{"version":3,"file":"static/js/685.b70d93ca.chunk.js","mappings":";yFAAA,IAAIA,EAAa,CACfC,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,OACRA,EAAQ,QAGV,IAAK,IAAIC,KAAKF,EAAY,CACxB,IAAIG,EAAWH,EAAWE,GAC1B,IAAK,IAAIE,KAAKD,EACZE,EAAQD,GAAKC,EAAQD,IAAMD,EAASC,EAExC,CACAC,EAAQC,MAAQ,CACdC,OAAQN,EAAQ,yBCtBlB,IAAIO,EAAWP,EAAQ,OACnBQ,EAAcR,EAAQ,OACtBS,EAAcT,EAAQ,OACtBU,EAAWV,EAAQ,OAEvB,SAASW,EAAIC,EAAIC,GACf,GAAIA,EACF,IAAK,IAAIC,KAAKD,EACZD,EAAGE,GAAKD,EAAKC,GAIjB,OAAOF,CACT,CAEAR,EAAQW,SAAWP,EAAYQ,KAAKC,KACpCb,EAAQc,QAAUV,EAAYQ,KAAKG,IACnCf,EAAQgB,UAAYZ,EAAYa,MAAMJ,KACtCb,EAAQkB,QAAUlB,EAAQmB,WAAaZ,EAAIJ,EAASe,QAAQE,KAAMjB,EAASe,SAC3ElB,EAAQqB,YAAclB,EAASe,QAAQE,KACvCpB,EAAQsB,eAAiBnB,EAASe,QAAQK,QAC1CvB,EAAQwB,QAAUpB,EAAYqB,MAAMZ,KACpCb,EAAQ0B,UAAYtB,EAAYqB,MAAMZ,KAAKc,GAC3C3B,EAAQ4B,OAASxB,EAAYqB,MAAMV,IACnCf,EAAQ6B,SAAWzB,EAAYqB,MAAMV,IAAIY,GACzC3B,EAAQ8B,QAAU1B,EAAYqB,MAAMM,KACpC/B,EAAQgC,WAAazB,EAAIH,EAAY4B,WAAWC,KAAM7B,EAAY4B,YAClEhC,EAAQkC,MAAQ9B,EAAY+B,WAAWC,EACvCpC,EAAQqC,YAAcjC,EAAY+B,WAAWC,EAC7CpC,EAAQsC,YAAclC,EAAY+B,WAAWI,EAC7CvC,EAAQwC,UAAYpC,EAAYa,MAAMF,IACtCf,EAAQyC,UAAYrC,EAAYsC,MAAM7B,KACtCb,EAAQ2C,YAActC,EAAYuC,KAAKrB,QACvCvB,EAAQ6C,WAAaxC,EAAYyC,IAAIvB,QACrCvB,EAAQ+C,MAAQ3C,EAAY4C,EAAEnC,KAC9Bb,EAAQiD,QAAU7C,EAAY4C,EAAEnC,KAAKc,GACrC3B,EAAQkD,OAAS9C,EAAY4C,EAAEjC,IAAIY,GACnC3B,EAAQmD,KAAO/C,EAAY4C,EAAEjC,IAC7Bf,EAAQoD,MAAQ7C,EAAIJ,EAASiD,MAAMhC,KAAMjB,EAASiD,OAClDpD,EAAQqD,UAAYlD,EAASiD,MAAMhC,KACnCpB,EAAQsD,aAAenD,EAASiD,MAAM7B,QACtCvB,EAAQuD,MAAQnD,EAAY4C,EAAEjB,KAC9B/B,EAAQwD,UAAYpD,EAAYqD,MAAM5C,KACtCb,EAAQ0D,SAAWtD,EAAYqD,MAAM1C,IACrCf,EAAQ2D,eAAiBvD,EAAYwD,QAAQrC,QAC7CvB,EAAQ6D,YAAczD,EAAY0D,QAAQjD,KAC1Cb,EAAQ+D,OAAS3D,EAAY4D,QAAQjD,IACrCf,EAAQiE,WAAa7D,EAAY4D,QAAQjD,IACzCf,EAAQkE,YAAc9D,EAAY4D,QAAQnD,KAC1Cb,EAAQmE,KAAO5D,EAAIH,EAAY+D,KAAKC,KAAMhE,EAAY+D,MACtDnE,EAAQqE,SAAWjE,EAAY+D,KAAKG,KACpCtE,EAAQuE,SAAWnE,EAAY+D,KAAKC,KACpCpE,EAAQwE,aAAepE,EAAYqE,SAAS5D,KAC5Cb,EAAQ0E,gBAAkBpE,EAASqE,YAAYC,KAC/C5E,EAAQ6E,SAAWzE,EAAY6B,KAAKpB,KACpCb,EAAQ8E,QAAU1E,EAAY6B,KAAKlB,IACnCf,EAAQ+E,UAAY3E,EAAY6B,KAAKM,EAAE1B,KACvCb,EAAQgF,SAAW5E,EAAY6B,KAAKM,EAAExB,IACtCf,EAAQiF,WAAa1E,EAAIH,EAAY6E,WAAWC,IAAK9E,EAAY6E,YACjEjF,EAAQmF,cAAgB/E,EAAY6E,WAAWC,IAC/ClF,EAAQoF,cAAgBhF,EAAY6E,WAAWI,IAC/CrF,EAAQsF,YAAc/E,EAAIH,EAAYkF,YAAYD,IAAKjF,EAAYkF,aACnEtF,EAAQuF,eAAiBnF,EAAYkF,YAAYJ,IACjDlF,EAAQwF,eAAiBpF,EAAYkF,YAAYD,IACjDrF,EAAQyF,QAAUlF,EAAIH,EAAYqF,QAAQ5E,KAAMT,EAAYqF,SAC5DzF,EAAQ0F,YAActF,EAAYqF,QAAQ5E,KAC1Cb,EAAQ2F,SAAWpF,EAAIH,EAAYuF,SAASN,IAAKjF,EAAYuF,UAC7D3F,EAAQ4F,YAAcxF,EAAYuF,SAAST,IAC3ClF,EAAQ6F,YAAczF,EAAYuF,SAASN,IAC3CrF,EAAQ8F,KAAOvF,EAAIH,EAAY0F,KAAKC,GAAI3F,EAAY0F,MACpD9F,EAAQgG,QAAU5F,EAAY0F,KAAKG,IACnCjG,EAAQkG,OAAS9F,EAAY0F,KAAKC,GAClC/F,EAAQmG,MAAQ/F,EAAYgG,KAAKhE,EACjCpC,EAAQqG,MAAQ9F,EAAIH,EAAYiG,MAAM9D,EAAGnC,EAAYiG,OACrDrG,EAAQsG,OAASlG,EAAYiG,MAAMjE,EACnCpC,EAAQuG,OAASnG,EAAYiG,MAAM9D,EACnCvC,EAAQwG,MAAQpG,EAAYqG,EAAE5F,KAC9Bb,EAAQ0G,QAAUtG,EAAYqG,EAAE5F,KAAKc,GACrC3B,EAAQ2G,KAAOvG,EAAYqG,EAAE1F,IAC7Bf,EAAQ4G,MAAQxG,EAAYqG,EAAE1E,KAC9B/B,EAAQ6G,IAAMtG,EAAIH,EAAYyG,IAAItE,EAAGnC,EAAYyG,KACjD7G,EAAQ8G,KAAO1G,EAAYyG,IAAIzE,EAC/BpC,EAAQ+G,KAAO3G,EAAYyG,IAAItE,EAC/BvC,EAAQgH,QAAUzG,EAAIH,EAAY4G,QAAQnG,KAAMT,EAAY4G,SAC5DhH,EAAQiH,YAAc7G,EAAY4G,QAAQnG,KAC1Cb,EAAQkH,YAAc5G,EAAS6G,QAAQvC,KACvC5E,EAAQoH,MAAQhH,EAAYiH,EAAEtF,sBCtF9B,IAAIuF,EAAQ1H,EAAQ,OAChB2H,EAAQ3H,EAAQ,OAChB4H,EAAQ5H,EAAQ,OAChBK,EAAQL,EAAQ,OAChB6H,EAAiB7H,EAAQ,OAE7B,SAAS8H,EAAQC,GACf,IAAIC,EAAS,GAQb,OANA3H,EAAM4H,UAAUF,GAAO,SAASG,GAC1BA,GACFF,EAAOG,KAAKD,EAEhB,IAEOF,CACT,CAoBA,SAASI,EAAgBC,EAAUC,GAEjC,IADA,IAAIC,EAAU,CAAC,EACNzH,EAAI,EAAGA,EAAIuH,EAAS,GAAGG,SAAU1H,EACxCyH,EAAQzH,IAAK,EAEf,IAAI2H,EAAoBH,EAAU,GAAGE,OACrC,IAAK1H,EAAI,EAAGA,EAAIwH,EAAUE,SAAU1H,EAC9BwH,EAAUxH,GAAG0H,OAASC,IACxBA,EAAoBH,EAAUxH,GAAG0H,QAIrC,IAAK,IAAIE,EAAI,EAAGA,EAAIL,EAASG,SAAUE,EACrC,IAAK,IAAIC,EAAI,EAAGA,EAAIN,EAASK,GAAGF,SAAUG,EAAG,CAG3C,IAFA,IAAIC,GAAwB,EACxBC,GAAwB,EACnBC,EAAI,EAAGA,EAAIR,EAAUE,SAAUM,EAAG,CACzC,IAAIC,EAAWT,EAAUQ,GACzB,KAAIC,EAASP,OAASC,GAAtB,CAIA,IAAIO,EAAgBD,EAAS,GAC7B,GAAIV,EAASK,GAAG,KAAOM,EAAvB,CAGAH,GAAsB,EACtB,IAAK,IAAII,EAAI,EAAGA,EAAIF,EAASP,SAAUS,EAAG,CACxC,IAAKL,EAGH,QAFiC,IAAhBG,EAASE,IAAiC,MAAhBF,EAASE,GAGlDL,GAAwB,MACnB,CACL,IAAIM,EAAoBrB,EAAesB,MAAMJ,EAASE,GAAK,IACvDG,EAAS,CAACvB,EAAewB,YAAYhB,EAASK,GAAGC,GAAId,EAAeyB,qBAAqBC,OAAOL,GAEpGN,EAAwBf,EAAe2B,QAAQJ,EACjD,CAEJ,CAfA,CALA,CAqBF,CACIP,IACFN,EAAQI,GAAKJ,EAAQI,IAAMC,EAE/B,CAIF,IADA,IAAIZ,EAAS,GACJyB,EAAI,EAAGA,EAAIpB,EAAS,GAAGG,SAAUiB,EACpClB,EAAQkB,IACVzB,EAAOG,KAAKsB,EAAI,GAIpB,OAAOzB,CACT,CA1EA5H,EAAQsJ,UAAY,SAASrB,EAAUsB,GACrC,IAAIC,EAAQ,KAUZ,OARAvJ,EAAM4H,UAAUI,GAAU,SAASH,EAAOpH,GACxC,GAAIoH,EAAM,KAAOyB,EAEf,OADAC,EAAQ9I,GACD,CAEX,IAGa,MAAT8I,EACKlC,EAAMQ,MAGR0B,CACT,EA6DAxJ,EAAQyJ,SAAW,SAASxB,EAAUyB,EAAOf,GAE3C,GAAIgB,MAAMD,IAA4B,kBAAVA,EAC1B,OAAOpC,EAAMQ,MAEf,IAAI8B,EAAgB5B,EAAgBC,EAAUU,GAC1CkB,EAAe,GAEnB,GAAqB,kBAAVH,EAAoB,CAC7B,IAAIF,EAAQxJ,EAAQsJ,UAAUrB,EAAUyB,GACxCG,EAAe5J,EAAM6J,KAAK7B,EAASuB,GACrC,MACEK,EAAe5J,EAAM6J,KAAK7B,EAASyB,IAErC,IAAIK,EAAM,EAMV,OAJA9J,EAAM4H,UAAU+B,GAAe,SAAS9B,GACtCiC,GAAOF,EAAa/B,EACtB,IAEgC,IAAzB8B,EAAcxB,OAAed,EAAM0C,KAAOD,EAAMH,EAAcxB,MACvE,EAEApI,EAAQiK,OAAS,SAAShC,EAAUyB,EAAOf,GAEzC,GAAIgB,MAAMD,IAA4B,kBAAVA,EAC1B,OAAOpC,EAAMQ,MAEf,IAAI8B,EAAgB5B,EAAgBC,EAAUU,GAC1CkB,EAAe,GAEnB,GAAqB,kBAAVH,EAAoB,CAC7B,IAAIF,EAAQxJ,EAAQsJ,UAAUrB,EAAUyB,GACxCG,EAAe5J,EAAM6J,KAAK7B,EAASuB,GACrC,MACEK,EAAe5J,EAAM6J,KAAK7B,EAASyB,IAGrC,IAAIQ,EAAe,GAMnB,OAJAjK,EAAM4H,UAAU+B,GAAe,SAAS9B,GACtCoC,EAAanC,KAAK8B,EAAa/B,GACjC,IAEOP,EAAM4C,MAAMD,EACrB,EAEAlK,EAAQoK,QAAU,SAASnC,EAAUyB,EAAOf,GAE1C,GAAIgB,MAAMD,IAA4B,kBAAVA,EAC1B,OAAOpC,EAAMQ,MAGf,IAAI8B,EAAgB5B,EAAgBC,EAAUU,GAC1CkB,EAAe,GAEnB,GAAqB,kBAAVH,EAAoB,CAC7B,IAAIF,EAAQxJ,EAAQsJ,UAAUrB,EAAUyB,GACxCG,EAAe5J,EAAM6J,KAAK7B,EAASuB,GACrC,MACEK,EAAe5J,EAAM6J,KAAK7B,EAASyB,IAGrC,IAAIQ,EAAe,GAMnB,OAJAjK,EAAM4H,UAAU+B,GAAe,SAAS9B,GACtCoC,EAAanC,KAAK8B,EAAa/B,GACjC,IAEOP,EAAM8C,OAAOH,EACtB,EAEAlK,EAAQsK,KAAO,SAASrC,EAAUyB,EAAOf,GAEvC,GAAIgB,MAAMD,IAA4B,kBAAVA,EAC1B,OAAOpC,EAAMQ,MAGf,IAAI8B,EAAgB5B,EAAgBC,EAAUU,GAC1CkB,EAAe,GAEnB,GAAqB,kBAAVH,EAAoB,CAC7B,IAAIF,EAAQxJ,EAAQsJ,UAAUrB,EAAUyB,GACxCG,EAAe5J,EAAM6J,KAAK7B,EAASuB,GACrC,MACEK,EAAe5J,EAAM6J,KAAK7B,EAASyB,IAIrC,OAA6B,IAAzBE,EAAcxB,OACTd,EAAMQ,MAIX8B,EAAcxB,OAAS,EAClBd,EAAMiD,IAGRV,EAAaD,EAAc,GACpC,EAEA5J,EAAQwK,KAAO,SAASvC,EAAUyB,EAAOf,GAEvC,GAAIgB,MAAMD,IAA4B,kBAAVA,EAC1B,OAAOpC,EAAMQ,MAEf,IAAI8B,EAAgB5B,EAAgBC,EAAUU,GAC1CkB,EAAe,GAEnB,GAAqB,kBAAVH,EAAoB,CAC7B,IAAIF,EAAQxJ,EAAQsJ,UAAUrB,EAAUyB,GACxCG,EAAe5J,EAAM6J,KAAK7B,EAASuB,GACrC,MACEK,EAAe5J,EAAM6J,KAAK7B,EAASyB,IAGrC,IAAIe,EAAWZ,EAAaD,EAAc,IAQ1C,OANA3J,EAAM4H,UAAU+B,GAAe,SAAS9B,GAClC2C,EAAWZ,EAAa/B,KAC1B2C,EAAWZ,EAAa/B,GAE5B,IAEO2C,CACT,EAEAzK,EAAQ0K,KAAO,SAASzC,EAAUyB,EAAOf,GAEvC,GAAIgB,MAAMD,IAA4B,kBAAVA,EAC1B,OAAOpC,EAAMQ,MAGf,IAAI8B,EAAgB5B,EAAgBC,EAAUU,GAC1CkB,EAAe,GAEnB,GAAqB,kBAAVH,EAAoB,CAC7B,IAAIF,EAAQxJ,EAAQsJ,UAAUrB,EAAUyB,GACxCG,EAAe5J,EAAM6J,KAAK7B,EAASuB,GACrC,MACEK,EAAe5J,EAAM6J,KAAK7B,EAASyB,IAGrC,IAAIiB,EAAWd,EAAaD,EAAc,IAQ1C,OANA3J,EAAM4H,UAAU+B,GAAe,SAAS9B,GAClC6C,EAAWd,EAAa/B,KAC1B6C,EAAWd,EAAa/B,GAE5B,IAEO6C,CACT,EAEA3K,EAAQ4K,SAAW,SAAS3C,EAAUyB,EAAOf,GAE3C,GAAIgB,MAAMD,IAA4B,kBAAVA,EAC1B,OAAOpC,EAAMQ,MAGf,IAAI8B,EAAgB5B,EAAgBC,EAAUU,GAC1CkB,EAAe,GAEnB,GAAqB,kBAAVH,EAAoB,CAC7B,IAAIF,EAAQxJ,EAAQsJ,UAAUrB,EAAUyB,GACxCG,EAAe5J,EAAM6J,KAAK7B,EAASuB,GACrC,MACEK,EAAe5J,EAAM6J,KAAK7B,EAASyB,IAGrC,IAAIQ,EAAe,GAEnBjK,EAAM4H,UAAU+B,GAAe,SAAS9B,GACtCoC,EAAanC,KAAK8B,EAAa/B,GACjC,IACAoC,EAAexC,EAAQwC,GAEvB,IAAItC,EAAS,EAMb,OAJA3H,EAAM4H,UAAUqC,GAAc,SAASpC,GACrCF,GAAUE,CACZ,IAEOF,CACT,EAEA5H,EAAQ6K,OAAS,SAAS5C,EAAUyB,EAAOf,GAEzC,GAAIgB,MAAMD,IAA4B,kBAAVA,EAC1B,OAAOpC,EAAMQ,MAEf,IAAI8B,EAAgB5B,EAAgBC,EAAUU,GAC1CkB,EAAe,GAEnB,GAAqB,kBAAVH,EAAoB,CAC7B,IAAIF,EAAQxJ,EAAQsJ,UAAUrB,EAAUyB,GACxCG,EAAe5J,EAAM6J,KAAK7B,EAASuB,GACrC,MACEK,EAAe5J,EAAM6J,KAAK7B,EAASyB,IAErC,IAAIQ,EAAe,GAOnB,OALAjK,EAAM4H,UAAU+B,GAAe,SAAS9B,GACtCoC,EAAanC,KAAK8B,EAAa/B,GACjC,IACAoC,EAAexC,EAAQwC,GAEhB3C,EAAMlB,MAAM9D,EAAE2H,EACvB,EAEAlK,EAAQ8K,QAAU,SAAS7C,EAAUyB,EAAOf,GAE1C,GAAIgB,MAAMD,IAA4B,kBAAVA,EAC1B,OAAOpC,EAAMQ,MAEf,IAAI8B,EAAgB5B,EAAgBC,EAAUU,GAC1CkB,EAAe,GAEnB,GAAqB,kBAAVH,EAAoB,CAC7B,IAAIF,EAAQxJ,EAAQsJ,UAAUrB,EAAUyB,GACxCG,EAAe5J,EAAM6J,KAAK7B,EAASuB,GACrC,MACEK,EAAe5J,EAAM6J,KAAK7B,EAASyB,IAGrC,IAAIQ,EAAe,GAOnB,OALAjK,EAAM4H,UAAU+B,GAAe,SAAS9B,GACtCoC,EAAanC,KAAK8B,EAAa/B,GACjC,IACAoC,EAAexC,EAAQwC,GAEhB3C,EAAMlB,MAAMjE,EAAE8H,EACvB,EAEAlK,EAAQ+K,KAAO,SAAS9C,EAAUyB,EAAOf,GAEvC,GAAIgB,MAAMD,IAA4B,kBAAVA,EAC1B,OAAOpC,EAAMQ,MAEf,IAAI8B,EAAgB5B,EAAgBC,EAAUU,GAC1CkB,EAAe,GAEnB,GAAqB,kBAAVH,EAAoB,CAC7B,IAAIF,EAAQxJ,EAAQsJ,UAAUrB,EAAUyB,GACxCG,EAAe5J,EAAM6J,KAAK7B,EAASuB,GACrC,MACEK,EAAe5J,EAAM6J,KAAK7B,EAASyB,IAGrC,IAAIQ,EAAe,GAMnB,OAJAjK,EAAM4H,UAAU+B,GAAe,SAAS9B,GACtCoC,EAAanC,KAAK8B,EAAa/B,GACjC,IAEON,EAAMwD,IAAId,EACnB,EAEAlK,EAAQiL,KAAO,SAAShD,EAAUyB,EAAOf,GAEvC,GAAIgB,MAAMD,IAA4B,kBAAVA,EAC1B,OAAOpC,EAAMQ,MAEf,IAAI8B,EAAgB5B,EAAgBC,EAAUU,GAC1CkB,EAAe,GAEnB,GAAqB,kBAAVH,EAAoB,CAC7B,IAAIF,EAAQxJ,EAAQsJ,UAAUrB,EAAUyB,GACxCG,EAAe5J,EAAM6J,KAAK7B,EAASuB,GACrC,MACEK,EAAe5J,EAAM6J,KAAK7B,EAASyB,IAErC,IAAIQ,EAAe,GAMnB,OAJAjK,EAAM4H,UAAU+B,GAAe,SAAS9B,GACtCoC,EAAanC,KAAK8B,EAAa/B,GACjC,IAEOP,EAAMV,IAAItE,EAAE2H,EACrB,EAEAlK,EAAQkL,MAAQ,SAASjD,EAAUyB,EAAOf,GAExC,GAAIgB,MAAMD,IAA4B,kBAAVA,EAC1B,OAAOpC,EAAMQ,MAEf,IAAI8B,EAAgB5B,EAAgBC,EAAUU,GAC1CkB,EAAe,GAEnB,GAAqB,kBAAVH,EAAoB,CAC7B,IAAIF,EAAQxJ,EAAQsJ,UAAUrB,EAAUyB,GACxCG,EAAe5J,EAAM6J,KAAK7B,EAASuB,GACrC,MACEK,EAAe5J,EAAM6J,KAAK7B,EAASyB,IAErC,IAAIQ,EAAe,GAMnB,OAJAjK,EAAM4H,UAAU+B,GAAe,SAAS9B,GACtCoC,EAAanC,KAAK8B,EAAa/B,GACjC,IAEOP,EAAMV,IAAIzE,EAAE8H,EACrB,mBC9YA,IAAI5C,EAAQ1H,EAAQ,OAChBK,EAAQL,EAAQ,OAEhBuL,EAAQ,IAAIC,KAAKA,KAAKC,IAAI,KAAM,EAAG,IACnCC,EAAc,MAChBC,EACA,EACA,OACAA,OACAA,OACAA,OACAA,OACAA,OACAA,OACAA,OACAA,OACAA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GAEEC,EAAa,CACf,GACA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,GACA,GACA,GACA,GACA,GACA,GACA,GACA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAEjBC,EAAgB,CAClB,GACA,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,QACJF,OACAA,OACAA,EAAW,CAAC,EAAG,GACf,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,GACJ,CAAC,EAAG,IA2GN,SAASG,EAAWC,GAClB,IAAIC,EAAU,IAAIR,KAAKO,GAEvB,OADAC,EAAQC,SAAS,EAAG,EAAG,EAAG,GACnBD,CACT,CAuXA,SAASE,EAAWC,GAClB,OAA4C,IAArC,IAAIX,KAAKW,EAAM,EAAG,IAAIC,UAC/B,CAGA,SAASC,EAAYC,EAAYC,GAC/B,OAAOC,KAAKC,MAAMF,EAAWD,GAAc,IAAO,GAAK,GAAK,GAC9D,CAqEA,SAASI,EAAOX,GACd,IAAIY,EAASZ,GAAQ,WAAiB,EAAI,EAE1C,OAAOS,KAAKC,MAAMV,EAAOR,GAAS,OAAYoB,CAChD,CAnjBAvM,EAAQwM,KAAO,SAAUT,EAAMU,EAAOC,GACpC,IAAI9E,EAgBJ,OAdAmE,EAAO9L,EAAM0M,YAAYZ,GACzBU,EAAQxM,EAAM0M,YAAYF,GAC1BC,EAAMzM,EAAM0M,YAAYD,GAEpBzM,EAAM2M,WAAWb,EAAMU,EAAOC,GAChC9E,EAASN,EAAMQ,OAGfF,EAAS,IAAIwD,KAAKW,EAAMU,EAAQ,EAAGC,IACxBG,cAAgB,IACzBjF,EAASN,EAAMiD,KAIZ3C,CACT,EAEA5H,EAAQ8M,QAAU,SAAUZ,EAAYC,EAAUY,GAChDA,EAAOA,EAAKC,cACZd,EAAajM,EAAMgN,UAAUf,GAC7BC,EAAWlM,EAAMgN,UAAUd,GAE3B,IAOIvE,EAPAsF,EAAkBhB,EAAWW,cAC7BM,EAAmBjB,EAAWF,WAC9BoB,EAAiBlB,EAAWmB,UAC5BC,EAAgBnB,EAASU,cACzBU,EAAiBpB,EAASH,WAC1BwB,EAAerB,EAASkB,UAG5B,OAAQN,GACN,IAAK,IACHnF,EAASwE,KAAKqB,MAAMzN,EAAQ0N,SAASxB,EAAYC,IACjD,MACF,IAAK,IACHvE,EAAS5H,EAAQ2N,KAAKxB,EAAUD,GAChC,MACF,IAAK,IACHtE,EAAS2F,EAAiBJ,EAAmB,IAAMG,EAAgBJ,GAC/DM,EAAeJ,GACjBxF,IAEF,MACF,IAAK,KACCwF,GAAkBI,EACpB5F,EAAS4F,EAAeJ,GAED,IAAnBG,GACFrB,EAAW0B,YAAYN,EAAgB,GACvCpB,EAAW2B,SAAS,MAEpB3B,EAAW0B,YAAYN,GACvBpB,EAAW2B,SAASN,EAAiB,IAEvC3F,EAAS5H,EAAQ2N,KAAKxB,EAAUD,IAElC,MACF,IAAK,KACHtE,EAAS2F,EAAiBJ,EAAmB,IAAMG,EAAgBJ,GAC/DM,EAAeJ,GACjBxF,IAEFA,GAAkB,GAClB,MACF,IAAK,KACC2F,EAAiBJ,GAAqBI,IAAmBJ,GAAoBK,EAAeJ,EAC9FlB,EAAW0B,YAAYN,GAEvBpB,EAAW0B,YAAYN,EAAgB,GAGzC1F,EAAS5H,EAAQ2N,KAAKxB,EAAUD,GAIpC,OAAOtE,CACT,EAEA5H,EAAQ8N,UAAY,SAAUC,GAC5B,GAAyB,kBAAdA,EACT,OAAOzG,EAAMQ,MAGf,IAAI6D,EAAOP,KAAKrC,MAAMgF,GAEtB,OAAIpE,MAAMgC,GACDrE,EAAMQ,MAGR,IAAIsD,KAAK2C,EAClB,EAEA/N,EAAQgO,IAAM,SAAUC,GACtB,IAAItC,EAAO1L,EAAMgN,UAAUgB,GAC3B,OAAItC,aAAgBuC,MACXvC,EAGFA,EAAK0B,SACd,EAQArN,EAAQ2N,KAAO,SAAUxB,EAAUD,GAIjC,OAHAC,EAAWlM,EAAMgN,UAAUd,GAC3BD,EAAajM,EAAMgN,UAAUf,GAEzBC,aAAoB+B,MACf/B,EAELD,aAAsBgC,MACjBhC,EAGFI,EAAOZ,EAAWS,IAAaG,EAAOZ,EAAWQ,GAC1D,EAEAlM,EAAQmO,QAAU,SAAUjC,EAAYC,EAAUiC,GAKhD,GAJAA,EAASnO,EAAMoO,UAAUD,GAAU,SACnClC,EAAajM,EAAMgN,UAAUf,GAC7BC,EAAWlM,EAAMgN,UAAUd,GAEvBD,aAAsBgC,MACxB,OAAOhC,EAET,GAAIC,aAAoB+B,MACtB,OAAO/B,EAET,GAAIiC,aAAkBF,MACpB,OAAOE,EAET,IAEIE,EAAIC,EAFJC,EAAKtC,EAAWF,WAChByC,EAAKtC,EAASH,WAGlB,GAAIoC,EACFE,EAA8B,KAAzBpC,EAAWmB,UAAmB,GAAKnB,EAAWmB,UACnDkB,EAA4B,KAAvBpC,EAASkB,UAAmB,GAAKlB,EAASkB,cAC1C,CACL,IAAIqB,EAAM,IAAItD,KAAKc,EAAWW,cAAe2B,EAAK,EAAG,GAAGnB,UACpDsB,EAAM,IAAIvD,KAAKe,EAASU,cAAe4B,EAAK,EAAG,GAAGpB,UACtDiB,EAAKpC,EAAWmB,YAAcqB,EAAM,GAAKxC,EAAWmB,UAChDlB,EAASkB,YAAcsB,EACrBL,EAAK,IACPG,IACAF,EAAK,GAELA,EAAK,GAGPA,EAAKpC,EAASkB,SAElB,CAEA,OAAO,KAAOlB,EAASU,cAAgBX,EAAWW,eAChD,IAAM4B,EAAKD,IAAOD,EAAKD,EAC3B,EAEAtO,EAAQ4O,MAAQ,SAAU1C,EAAY2C,GAGpC,OAFA3C,EAAajM,EAAMgN,UAAUf,cAEHgC,MACjBhC,EAELvC,MAAMkF,GACDvH,EAAMQ,OAEf+G,EAASC,SAASD,EAAQ,IAC1B3C,EAAW2B,SAAS3B,EAAWF,WAAa6C,GAErC3C,EACT,EAEAlM,EAAQ+O,QAAU,SAAU7C,EAAY2C,GAGtC,OAFA3C,EAAajM,EAAMgN,UAAUf,cAEHgC,MACjBhC,EAELvC,MAAMkF,GACDvH,EAAMQ,OAEf+G,EAASC,SAASD,EAAQ,IAEnB,IAAIzD,KAAKc,EAAWW,cAAeX,EAAWF,WAAa6C,EAAS,EAAG,GAChF,EAEA7O,EAAQgP,KAAO,SAAUf,GAGvB,OAFAA,EAAgBhO,EAAMgN,UAAUgB,cAEHC,MACpBD,EAGFA,EAAcgB,UACvB,EAEAjP,EAAQkP,SAAW,SAAUC,GAC3B,GAAsB,kBAAXA,GAAyC,kBAAXA,EACvC,OAAO7H,EAAMQ,MAEbqH,EAASL,SAASK,EAAQ,IAG5B,IAAIpD,EAAOK,KAAKqB,MAAM0B,EAAS,SAC/BA,GAAkB,QAClB,IAAI1C,EAAQL,KAAKqB,MAAM0B,EAAS,QAChCA,GAAkB,OAClB,IAAIzC,EAAMN,KAAKqB,MAAM0B,EAAS,OAC9BA,GAAkB,MAElB,IAAIC,EAAOhD,KAAKqB,MAAM0B,EAAS,MAC/BA,GAAkB,KAClB,IAAIE,EAAMjD,KAAKqB,MAAM0B,EAAS,IAE1BG,EADJH,GAAkB,GAUlB,MAAO,KAPPpD,EAAQA,EAAO,EAAKA,EAAO,IAAM,KACjCU,EAASA,EAAQ,EAAKA,EAAQ,IAAM,KACpCC,EAAOA,EAAM,EAAKA,EAAM,IAAM,IAKI,KAJlC0C,EAAQA,EAAO,EAAKA,EAAO,IAAM,KACjCC,EAAOA,EAAM,EAAKA,EAAM,IAAM,KAC9BC,EAAOA,EAAM,EAAKA,EAAM,IAAM,GAGhC,EAEAtP,EAAQuP,WAAa,SAAU5D,GAG7B,IAFAA,EAAO1L,EAAMgN,UAAUtB,cAEHuC,MAClB,OAAOvC,GAGTA,EAAOD,EAAWC,IACb6D,QAAQ7D,EAAK0B,UAAY,GAAK1B,EAAK8D,UAAY,IACpD,IAAIC,EAAY,IAAItE,KAAKO,EAAKkB,cAAe,EAAG,GAEhD,OAAOT,KAAKC,OAAQV,EAAO+D,GAAa,MAAY,GAAK,EAC3D,EAEA1P,EAAQ2P,OAAS,SAAU1B,GAGzB,OAFAA,EAAgBhO,EAAMgN,UAAUgB,cAEHC,MACpBD,EAGFA,EAAc2B,YACvB,EAEA5P,EAAQ6P,MAAQ,SAAU5B,GAGxB,OAFAA,EAAgBhO,EAAMgN,UAAUgB,cAEHC,MACpBD,EAGFA,EAAcjC,WAAa,CACpC,EAEAhM,EAAQ2E,YAAc,SAAUuH,EAAYC,EAAU2D,GACpD,OAAOC,KAAKpL,YAAYC,KAAKsH,EAAYC,EAAU,EAAG2D,EACxD,EAEA9P,EAAQ2E,YAAYC,KAAO,SAAUsH,EAAYC,EAAU6D,EAASF,GAGlE,IAFA5D,EAAajM,EAAMgN,UAAUf,cAEHgC,MACxB,OAAOhC,EAIT,IAFAC,EAAWlM,EAAMgN,UAAUd,cAEH+B,MACtB,OAAO/B,EAGT,IAAI8D,GAAS,EACTC,EAAW,GACXC,EAAY,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC/BC,EAAY,IAAIC,OAAO,cAE3B,QAAgB9E,IAAZyE,EACFA,EAAUvE,EAAc,QACnB,GAAuB,kBAAZuE,GAAwBI,EAAUE,KAAKN,GAGvD,IAFAC,GAAS,EACTD,EAAUA,EAAQO,MAAM,IACnB7P,EAAI,EAAGA,EAAIsP,EAAQ5H,OAAQ1H,IACX,MAAfsP,EAAQtP,IACVwP,EAASnI,KAAKoI,EAAUzP,SAI5BsP,EAAUvE,EAAcuE,GAE1B,KAAMA,aAAmBQ,OACvB,OAAOlJ,EAAMQ,WAEEyD,IAAbuE,EACFA,EAAW,GACAA,aAAoBU,QAC/BV,EAAW,CAACA,IAGd,IAAK,IAAIpP,EAAI,EAAGA,EAAIoP,EAAS1H,OAAQ1H,IAAK,CACxC,IAAI+P,EAAIxQ,EAAMgN,UAAU6C,EAASpP,IACjC,GAAI+P,aAAavC,MACf,OAAOuC,EAETX,EAASpP,GAAK+P,CAChB,CACA,IAAIC,EAAOtE,KAAKuE,OAAOxE,EAAWD,GAAc,OAAyB,EACrE0E,EAAQF,EACRhE,EAAMR,EACV,IAAKxL,EAAI,EAAGA,EAAIgQ,EAAMhQ,IAAK,CAGzB,IAFA,IAAImQ,GAAK,IAAIzF,MAAO0F,oBAAsB,EAAKpE,EAAIqE,YAAcrE,EAAI+C,SACjEuB,EAAMf,EAASC,EAASe,SAASJ,GAAMA,IAAMb,EAAQ,IAAMa,IAAMb,EAAQ,GACpEtH,EAAI,EAAGA,EAAIoH,EAAS1H,OAAQM,IAAK,CACxC,IAAIwI,EAAUpB,EAASpH,GACvB,GAAIwI,EAAQ7D,YAAcX,EAAIW,WAC5B6D,EAAQlF,aAAeU,EAAIV,YAC3BkF,EAAQrE,gBAAkBH,EAAIG,cAAe,CAC7CmE,GAAM,EACN,KACF,CACF,CACIA,GACFJ,IAEFlE,EAAI8C,QAAQ9C,EAAIW,UAAY,EAC9B,CAEA,OAAOuD,CACT,EAEA5Q,EAAQmR,IAAM,WACZ,OAAO,IAAI/F,IACb,EAEApL,EAAQoR,OAAS,SAAUnD,GAEzB,OADAA,EAAgBhO,EAAMgN,UAAUgB,cACHC,MACpBD,EAGFA,EAAcoD,YACvB,EAEArR,EAAQsR,KAAO,SAAUlC,EAAMmC,EAAQpC,GAIrC,OAHAC,EAAOnP,EAAM0M,YAAYyC,GACzBmC,EAAStR,EAAM0M,YAAY4E,GAC3BpC,EAASlP,EAAM0M,YAAYwC,GACvBlP,EAAM2M,WAAWwC,EAAMmC,EAAQpC,GAC1B7H,EAAMQ,MAEXsH,EAAO,GAAKmC,EAAS,GAAKpC,EAAS,EAC9B7H,EAAMiD,KAGP,KAAO6E,EAAO,GAAKmC,EAASpC,GAAU,KAChD,EAEAnP,EAAQwR,UAAY,SAAUC,GAG5B,OAFAA,EAAYxR,EAAMgN,UAAUwE,cAEHvD,MAChBuD,GAGD,KAAOA,EAAUxC,WAAa,GAAKwC,EAAU7B,aAAe6B,EAAUJ,cAAgB,KAChG,EAEArR,EAAQ0R,MAAQ,WACd,OAAOhG,EAAW,IAAIN,KACxB,EAEApL,EAAQ2R,QAAU,SAAU1D,EAAe2D,GAEzC,IADA3D,EAAgBhO,EAAMgN,UAAUgB,cACHC,MAC3B,OAAOD,OAEW1C,IAAhBqG,IACFA,EAAc,GAEhB,IAAIlF,EAAMuB,EAAcwB,SAExB,OAAOjE,EAAWoG,GAAalF,EACjC,EAEA1M,EAAQ6R,QAAU,SAAU5D,EAAe2D,GAEzC,IADA3D,EAAgBhO,EAAMgN,UAAUgB,cACHC,MAC3B,OAAOD,EAKT,QAHoB1C,IAAhBqG,IACFA,EAAc,GAEI,KAAhBA,EACF,OAAO7B,KAAKR,WAAWtB,GAEzB,IAAI6D,EAAaxG,EAAYsG,GACzBG,EAAM,IAAI3G,KAAK6C,EAAcpB,cAAe,EAAG,GAC/CmF,EAAMD,EAAItC,SAAWqC,EAAa,EAAI,EAG1C,OAFAC,GAA6C,GAAtC3F,KAAK6F,IAAIF,EAAItC,SAAWqC,GAAmB,GAAK,GAAK,IAErD1F,KAAKqB,OAAQQ,EAAgB8D,GAAO,MAAyB,EAAI,GAAKC,CAC/E,EAEAhS,EAAQmH,QAAU,SAAU+E,EAAYwE,EAAMZ,GAC5C,OAAOC,KAAK5I,QAAQvC,KAAKsH,EAAYwE,EAAM,EAAGZ,EAChD,EAEA9P,EAAQmH,QAAQvC,KAAO,SAAUsH,EAAYwE,EAAMV,EAASF,GAE1D,IADA5D,EAAajM,EAAMgN,UAAUf,cACHgC,MACxB,OAAOhC,EAGT,IADAwE,EAAOzQ,EAAM0M,YAAY+D,cACLxC,MAClB,OAAOwC,EAET,GAAIA,EAAO,EACT,OAAOpJ,EAAMiD,IAOf,MAJEyF,OADczE,IAAZyE,EACQvE,EAAc,GAEdA,EAAcuE,cAEDQ,OACvB,OAAOlJ,EAAMQ,WAEEyD,IAAbuE,EACFA,EAAW,GACAA,aAAoBU,QAC/BV,EAAW,CAACA,IAEd,IAAK,IAAIpP,EAAI,EAAGA,EAAIoP,EAAS1H,OAAQ1H,IAAK,CACxC,IAAI+P,EAAIxQ,EAAMgN,UAAU6C,EAASpP,IACjC,GAAI+P,aAAavC,MACf,OAAOuC,EAETX,EAASpP,GAAK+P,CAChB,CAEA,IADA,IAAII,EAAI,EACDA,EAAIH,GAAM,CACfxE,EAAWsD,QAAQtD,EAAWmB,UAAY,GAC1C,IAAIX,EAAMR,EAAWuD,SACrB,GAAI/C,IAAQsD,EAAQ,IAAMtD,IAAQsD,EAAQ,GAA1C,CAGA,IAAK,IAAItH,EAAI,EAAGA,EAAIoH,EAAS1H,OAAQM,IAAK,CACxC,IAAIwI,EAAUpB,EAASpH,GACvB,GAAIwI,EAAQ7D,YAAcnB,EAAWmB,WACnC6D,EAAQlF,aAAeE,EAAWF,YAClCkF,EAAQrE,gBAAkBX,EAAWW,cAAe,CACpDgE,IACA,KACF,CACF,CACAA,GAVA,CAWF,CAEA,OAAO3E,CACT,EAEAlM,EAAQkS,KAAO,SAAUjE,GAGvB,OAFAA,EAAgBhO,EAAMgN,UAAUgB,cAEHC,MACpBD,EAGFA,EAAcpB,aACvB,EAWA7M,EAAQ0N,SAAW,SAAUxB,EAAYC,EAAUgG,GAEjD,IADAjG,EAAajM,EAAMgN,UAAUf,cACHgC,MACxB,OAAOhC,EAGT,IADAC,EAAWlM,EAAMgN,UAAUd,cACH+B,MACtB,OAAO/B,EAGTgG,EAAQA,GAAS,EACjB,IAAI7D,EAAKpC,EAAWmB,UAChBmB,EAAKtC,EAAWF,WAAa,EAC7BoG,EAAKlG,EAAWW,cAChB0B,EAAKpC,EAASkB,UACdoB,EAAKtC,EAASH,WAAa,EAC3BqG,EAAKlG,EAASU,cAElB,OAAQsF,GACN,KAAK,EAUH,OARW,KAAP7D,GAAoB,KAAPC,GACfD,EAAK,GACLC,EAAK,IACW,KAAPD,EACTA,EAAK,GACW,KAAPA,GAAoB,KAAPC,IACtBA,EAAK,KAEEA,EAAU,GAALE,EAAe,IAAL4D,GAAa/D,EAAU,GAALE,EAAe,IAAL4D,IAAa,IACnE,KAAK,EAEH,IAUIE,EAAU,IACd,GAAIF,IAAOC,GAAQD,EAAK,IAAOC,IAAS7D,EAAKC,GAASD,IAAOC,GAAQH,GAAMC,GAMzE,OALK6D,IAAOC,GAAMvG,EAAWsG,IAZZ,SAAUG,EAAOC,GAClC,IAAIC,EAAQF,EAAM1F,cACd6F,EAAY,IAAItH,KAAKqH,EAAO,EAAG,GACnC,GAAI3G,EAAW2G,IAAUF,EAAQG,GAAaF,GAASE,EACrD,OAAO,EAET,IAAIC,EAAQH,EAAM3F,cACd+F,EAAY,IAAIxH,KAAKuH,EAAO,EAAG,GACnC,OAAQ7G,EAAW6G,IAAUH,GAASI,GAAaL,EAAQK,CAC7D,CAIIC,CAAa3G,EAAYC,IACjB,IAAPsC,GAAmB,KAAPF,KACb+D,EAAU,KAELrG,EAAYC,EAAYC,GAAYmG,EAE7C,IAAIQ,EAAST,EAAKD,EAAM,EAEpBW,GADQ,IAAI3H,KAAKiH,EAAK,EAAG,EAAG,GAAK,IAAIjH,KAAKgH,EAAI,EAAG,IAAM,IAAO,GAAK,GAAK,GACvDU,EACrB,OAAO7G,EAAYC,EAAYC,GAAY4G,EAC7C,KAAK,EAEH,OAAO9G,EAAYC,EAAYC,GAAY,IAC7C,KAAK,EAEH,OAAOF,EAAYC,EAAYC,GAAY,IAC7C,KAAK,EAEH,OAASoC,EAAU,GAALE,EAAe,IAAL4D,GAAa/D,EAAU,GAALE,EAAe,IAAL4D,IAAa,IAEvE,mBC9mBA,IAAI9K,EAAQ1H,EAAQ,OAChBoT,EAAQpT,EAAQ,OAChBqT,EAAOrT,EAAQ,OACfK,EAAQL,EAAQ,OAChBsT,EAAStT,EAAQ,OAErB,SAASuT,EAAoBC,GAC3B,MAAQ,eAAgB9C,KAAK8C,EAC/B,CAEApT,EAAQqT,QAAU,SAASC,EAAGjK,GAG5B,OAFAiK,EAAIrT,EAAM0M,YAAY2G,GACtBjK,EAAIpJ,EAAM0M,YAAYtD,GAClBpJ,EAAM2M,WAAW0G,EAAGjK,GACf/B,EAAMQ,MAGRoL,EAAOK,QAAQD,EAAGjK,EAC3B,EAEArJ,EAAQwT,QAAU,SAASF,EAAGjK,GAG5B,OAFAiK,EAAIrT,EAAM0M,YAAY2G,GACtBjK,EAAIpJ,EAAM0M,YAAYtD,GAClBpJ,EAAM2M,WAAW0G,EAAGjK,GACf/B,EAAMQ,MAGRoL,EAAOO,QAAQH,EAAGjK,EAC3B,EAEArJ,EAAQ0T,QAAU,SAASJ,EAAGjK,GAG5B,OAFAiK,EAAIrT,EAAM0M,YAAY2G,GACtBjK,EAAIpJ,EAAM0M,YAAYtD,GAClBpJ,EAAM2M,WAAW0G,EAAGjK,GACf/B,EAAMQ,MAGRoL,EAAOS,QAAQL,EAAGjK,EAC3B,EAEArJ,EAAQ4T,QAAU,SAASN,EAAGjK,GAG5B,OAFAiK,EAAIrT,EAAM0M,YAAY2G,GACtBjK,EAAIpJ,EAAM0M,YAAYtD,GAClBpJ,EAAM2M,WAAW0G,EAAGjK,GACf/B,EAAMQ,MAGRoL,EAAOW,QAAQP,EAAGjK,EAC3B,EAEArJ,EAAQ8T,QAAU,SAASV,GAEzB,IAAKD,EAAoBC,GACvB,OAAO9L,EAAMiD,IAIf,IAAI3C,EAASkH,SAASsE,EAAQ,GAG1BW,EAAcX,EAAOY,WACzB,OAA2B,KAAvBD,EAAY3L,QAAiD,MAAhC2L,EAAYE,UAAU,EAAG,GACjDnF,SAASiF,EAAYE,UAAU,GAAI,GAAK,IAExCrM,CAEX,EAGA5H,EAAQkU,QAAU,SAASd,EAAQe,GAEjC,IAAKhB,EAAoBC,GACvB,OAAO9L,EAAMiD,IAIf,IAAIwJ,EAAcX,EAAOY,WACzB,GAA2B,KAAvBD,EAAY3L,QAAiD,MAAhC2L,EAAYE,UAAU,EAAG,GACxD,OAAQ,aAAgBnF,SAASiF,EAAYE,UAAU,GAAI,IAAID,SAAS,IAI1E,IAAIpM,EAASkH,SAASsE,EAAQ,GAAGY,SAAS,IAG1C,YAAezI,IAAX4I,EACKvM,EAGH+B,MAAMwK,GACD7M,EAAMQ,MAIXqM,EAAS,EACJ7M,EAAMiD,KAIf4J,EAAS/H,KAAKqB,MAAM0G,KAGFvM,EAAOQ,OAAU6K,EAAKmB,KAAK,IAAKD,EAASvM,EAAOQ,QAAUR,EAASN,EAAMiD,GAE/F,EAEAvK,EAAQqU,QAAU,SAASjB,EAAQe,GAEjC,IAAKhB,EAAoBC,GACvB,OAAO9L,EAAMiD,IAIf,IAAIwJ,EAAcX,EAAOY,WACzB,GAA2B,KAAvBD,EAAY3L,QAAiD,MAAhC2L,EAAYE,UAAU,EAAG,GACxD,OAAQ,WAAanF,SAASiF,EAAYE,UAAU,GAAI,IAAID,SAAS,GAIvE,IAAIpM,EAASkH,SAASsE,EAAQ,GAAGY,SAAS,GAG1C,YAAezI,IAAX4I,EACKvM,EAGH+B,MAAMwK,GACD7M,EAAMQ,MAIXqM,EAAS,EACJ7M,EAAMiD,KAIf4J,EAAS/H,KAAKqB,MAAM0G,KAGFvM,EAAOQ,OAAU6K,EAAKmB,KAAK,IAAKD,EAASvM,EAAOQ,QAAUR,EAASN,EAAMiD,GAE/F,EAEAvK,EAAQsU,OAAS,SAASC,EAASC,GAIjC,OAFAD,EAAUtU,EAAM0M,YAAY4H,GAC5BC,EAAUvU,EAAM0M,YAAY6H,GACxBvU,EAAM2M,WAAW2H,EAASC,GACrBlN,EAAMQ,MAIXyM,EAAU,GAAKC,EAAU,GAKzBpI,KAAKqB,MAAM8G,KAAaA,GAAWnI,KAAKqB,MAAM+G,KAAaA,GAK3DD,EAAU,gBAAmBC,EAAU,eATlClN,EAAMiD,IAcRgK,EAAUC,CACnB,EAEAxU,EAAQyU,UAAY,SAASrB,EAAQsB,GAGnC,OAFAtB,EAASnT,EAAM0M,YAAYyG,GAC3BsB,EAAQzU,EAAM0M,YAAY+H,GACtBzU,EAAM2M,WAAWwG,EAAQsB,GACpBpN,EAAMQ,MAIXsL,EAAS,GAKThH,KAAKqB,MAAM2F,KAAYA,GAKvBA,EAAS,gBAKThH,KAAK6F,IAAIyC,GAAS,GAdbpN,EAAMiD,IAmBPmK,GAAS,EAAKtB,GAAUsB,EAAQtB,IAAWsB,CACrD,EAEA1U,EAAQ2U,MAAQ,SAASJ,EAASC,GAGhC,OAFAD,EAAUtU,EAAM0M,YAAY4H,GAC5BC,EAAUvU,EAAM0M,YAAY6H,GACxBvU,EAAM2M,WAAW2H,EAASC,GACrBlN,EAAMQ,MAIXyM,EAAU,GAAKC,EAAU,GAKzBpI,KAAKqB,MAAM8G,KAAaA,GAAWnI,KAAKqB,MAAM+G,KAAaA,GAK3DD,EAAU,gBAAmBC,EAAU,eATlClN,EAAMiD,IAcRgK,EAAUC,CACnB,EAEAxU,EAAQ4U,UAAY,SAASxB,EAAQsB,GAGnC,OAFAtB,EAASnT,EAAM0M,YAAYyG,GAC3BsB,EAAQzU,EAAM0M,YAAY+H,GACtBzU,EAAM2M,WAAWwG,EAAQsB,GACpBpN,EAAMQ,MAIXsL,EAAS,GAKThH,KAAKqB,MAAM2F,KAAYA,GAKvBA,EAAS,gBAKThH,KAAK6F,IAAIyC,GAAS,GAdbpN,EAAMiD,IAmBPmK,GAAS,EAAKtB,GAAUsB,EAAQtB,IAAWsB,CACrD,EAEA1U,EAAQ6U,OAAS,SAASN,EAASC,GAGjC,OAFAD,EAAUtU,EAAM0M,YAAY4H,GAC5BC,EAAUvU,EAAM0M,YAAY6H,GACxBvU,EAAM2M,WAAW2H,EAASC,GACrBlN,EAAMQ,MAIXyM,EAAU,GAAKC,EAAU,GAKzBpI,KAAKqB,MAAM8G,KAAaA,GAAWnI,KAAKqB,MAAM+G,KAAaA,GAK3DD,EAAU,gBAAmBC,EAAU,eATlClN,EAAMiD,IAcRgK,EAAUC,CACnB,EAEAxU,EAAQ8U,QAAU,SAASC,EAAMC,EAAWC,GAG1C,GAFAF,EAAO9U,EAAM0M,YAAYoI,GACzBC,EAAY/U,EAAM0M,YAAYqI,GAC1B/U,EAAM2M,WAAWmI,EAAMC,GACzB,OAAOD,EAOT,GAAe,OAHfE,OAAqB1J,IAAX0J,EAAwB,IAAMA,IAGP,MAAXA,EACpB,OAAO3N,EAAMQ,MAIf,GAAa,IAATiN,GAA4B,IAAdC,EAChB,OAAO,EACF,GAAa,IAATD,EACT,OAAsB,IAAdC,EAAmBC,EAASD,EAAUhB,WAAaiB,EACtD,GAAkB,IAAdD,EACT,OAAOD,EAAKf,WAEZ,IAAIkB,EAAQF,EAAY,EAAK,IAAM,GACnC,OAAOD,EAAKf,WAAakB,GAAuB,IAAdF,EAAmBC,EAASD,EAAUhB,WAAaiB,EAEzF,EAEAjV,EAAQmV,QAAU,SAAS/B,EAAQgC,EAAWC,GAE5C,IADAjC,EAASnT,EAAM0M,YAAYyG,cACLlF,MACpB,OAAOkF,EA0MT,IArMA,IAkMIkC,EAlMAC,EAAQ,CACV,CAAC,iBAAkB,IAAK,KAAM,UAAU,GAAO,EAAO,qBACtD,CAAC,iBAAkB,IAAK,KAAM,mBAAmB,GAAO,EAAO,qBAC/D,CAAC,iBAAkB,KAAM,KAAM,UAAU,GAAO,EAAO,qBACvD,CAAC,iBAAkB,KAAM,KAAM,UAAU,GAAO,EAAO,qBACvD,CAAC,eAAgB,KAAM,KAAM,QAAQ,GAAO,EAAO,qBACnD,CAAC,eAAgB,OAAQ,KAAM,QAAQ,GAAO,EAAO,qBACrD,CAAC,iBAAkB,QAAS,KAAM,SAAS,GAAO,EAAM,YACxD,CAAC,SAAU,IAAK,KAAM,oBAAoB,GAAM,EAAO,GACvD,CAAC,mBAAoB,MAAO,KAAM,4BAA4B,GAAM,EAAO,GAC3E,CAAC,iBAAY,OAAK,CAAC,OAAQ,UAAU,GAAO,EAAM,OAClD,CAAC,MAAO,KAAM,KAAM,QAAQ,GAAO,EAAM,KACzC,CAAC,oBAAqB,KAAM,KAAM,UAAU,GAAO,EAAO,qBAC1D,CAAC,MAAO,MAAO,KAAM,YAAY,GAAO,EAAO,KAC/C,CAAC,OAAQ,IAAK,KAAM,QAAQ,GAAO,EAAO,OAC1C,CAAC,YAAa,KAAM,KAAM,iBAAiB,GAAM,EAAO,GACxD,CAAC,MAAO,MAAO,CAAC,KAAM,eAAe,GAAO,EAAM,GAClD,CAAC,MAAO,MAAO,CAAC,OAAQ,UAAU,GAAO,EAAM,eAC/C,CAAC,OAAQ,OAAQ,KAAM,eAAe,GAAO,EAAM,GACnD,CAAC,UAAW,KAAM,KAAM,sBAAsB,GAAM,EAAO,GAC3D,CAAC,2BAA4B,QAAS,KAAM,aAAa,GAAM,EAAO,GACtE,CAAC,UAAW,IAAK,KAAM,mBAAmB,GAAM,EAAO,GACvD,CAAC,uBAAkB,OAAQ,CAAC,SAAU,UAAU,GAAO,EAAM,OAC7D,CAAC,aAAc,MAAO,CAAC,QAAS,UAAU,GAAO,EAAM,eACvD,CAAC,aAAc,MAAO,CAAC,QAAS,UAAU,GAAO,EAAM,cACvD,CAAC,mBAAoB,MAAO,CAAC,QAAS,UAAU,GAAO,EAAM,qBAC7D,CAAC,cAAe,KAAM,KAAM,UAAU,GAAM,EAAM,GAClD,CAAC,aAAc,MAAO,CAAC,QAAS,UAAU,GAAO,EAAM,kBACvD,CAAC,sBAAuB,OAAQ,CAAC,SAAU,UAAU,GAAO,EAAM,YAClE,CAAC,aAAc,QAAS,CAAC,UAAW,SAAU,YAAa,UAAU,GAAO,EAAM,qBAClF,CAAC,aAAc,MAAO,CAAC,QAAS,UAAU,GAAO,EAAM,eACvD,CAAC,MAAO,MAAO,KAAM,UAAU,GAAO,EAAM,gBAC5C,CAAC,SAAU,KAAM,CAAC,KAAM,QAAQ,GAAO,EAAO,qBAC9C,CAAC,MAAO,IAAK,CAAC,OAAQ,QAAQ,GAAO,EAAM,OAC3C,CAAC,SAAU,OAAK,KAAM,SAAS,GAAO,EAAO,mBAC7C,CAAC,kBAAmB,OAAQ,KAAM,eAAe,GAAO,EAAM,kBAC9D,CAAC,OAAQ,MAAO,CAAC,MAAO,SAAS,GAAO,EAAM,MAC9C,CAAC,eAAgB,KAAM,CAAC,MAAO,UAAU,GAAO,EAAM,kBACtD,CAAC,MAAO,MAAO,KAAM,UAAU,GAAO,EAAM,OAC5C,CAAC,MAAO,MAAO,CAAC,KAAM,UAAU,GAAO,EAAM,MAC7C,CAAC,QAAS,IAAK,KAAM,wBAAwB,GAAM,EAAO,GAC1D,CAAC,cAAe,KAAM,KAAM,UAAU,GAAO,EAAM,kBACnD,CAAC,OAAQ,KAAM,KAAM,UAAU,GAAO,EAAM,OAC5C,CAAC,aAAc,MAAO,KAAM,UAAU,GAAO,EAAM,iBACnD,CAAC,MAAO,MAAO,KAAM,gBAAgB,GAAO,EAAO,KACnD,CAAC,SAAU,MAAO,KAAM,UAAU,GAAO,EAAM,eAC/C,CAAC,QAAS,IAAK,CAAC,MAAO,yBAAyB,GAAO,EAAM,GAC7D,CAAC,QAAS,QAAS,KAAM,QAAQ,GAAO,EAAM,YAC9C,CAAC,OAAQ,IAAK,KAAM,QAAQ,GAAO,EAAM,MACzC,CAAC,OAAQ,KAAM,KAAM,iBAAiB,GAAM,EAAO,GACnD,CAAC,uBAAwB,MAAO,CAAC,UAAW,UAAU,GAAO,EAAM,cACnE,CAAC,UAAW,KAAM,KAAM,QAAQ,GAAO,EAAM,KAC7C,CAAC,QAAS,IAAK,KAAM,cAAc,GAAM,EAAO,GAChD,CAAC,QAAS,KAAM,KAAM,aAAa,GAAM,EAAO,GAChD,CAAC,aAAc,KAAM,CAAC,KAAM,SAAS,GAAO,EAAM,iBAClD,CAAC,kBAAmB,MAAO,CAAC,KAAM,OAAQ,UAAU,GAAO,EAAM,aACjE,CAAC,OAAQ,IAAK,CAAC,MAAO,QAAQ,GAAO,EAAM,MAC3C,CAAC,yBAA0B,SAAU,KAAM,UAAU,GAAO,EAAM,WAClE,CAAC,yBAA0B,OAAQ,CAAC,SAAU,WAAY,QAAQ,GAAO,EAAM,WAC/E,CAAC,uBAAwB,QAAS,KAAM,UAAU,GAAO,EAAM,aAC/D,CAAC,eAAgB,QAAS,CAAC,SAAU,QAAS,QAAQ,GAAO,EAAM,aACnE,CAAC,OAAQ,KAAM,KAAM,UAAU,GAAO,EAAM,OAC5C,CAAC,qBAAsB,UAAW,KAAM,QAAQ,GAAO,EAAM,cAC7D,CAAC,aAAc,MAAO,KAAM,UAAU,GAAO,EAAM,QACnD,CAAC,QAAS,IAAK,KAAM,UAAU,GAAM,EAAM,GAC3C,CAAC,QAAS,MAAO,KAAM,sBAAsB,GAAM,EAAO,GAC1D,CAAC,SAAU,IAAK,CAAC,OAAQ,eAAe,GAAM,EAAM,GACpD,CAAC,WAAY,KAAM,KAAM,QAAQ,GAAM,EAAM,GAC7C,CAAC,OAAQ,KAAM,KAAM,SAAS,GAAO,EAAM,kBAC3C,CAAC,aAAc,KAAM,KAAM,UAAU,GAAO,EAAM,kBAClD,CAAC,QAAS,IAAK,CAAC,IAAK,MAAO,UAAU,GAAO,EAAM,MACnD,CAAC,QAAS,KAAM,KAAM,iBAAiB,GAAM,EAAO,GACpD,CAAC,MAAO,KAAM,KAAM,eAAe,GAAM,EAAO,GAChD,CAAC,UAAW,KAAM,KAAM,iBAAiB,GAAO,EAAO,OACvD,CAAC,kBAAmB,OAAQ,KAAM,UAAU,GAAO,EAAM,eACzD,CAAC,iBAAkB,MAAO,CAAC,QAAS,SAAS,GAAO,EAAM,oBAC1D,CAAC,mBAAoB,MAAO,CAAC,SAAU,SAAS,GAAM,EAAM,GAC5D,CAAC,2BAA4B,QAAS,KAAM,gBAAgB,GAAM,EAAO,GACzE,CAAC,SAAU,KAAM,CAAC,UAAW,UAAU,GAAO,EAAM,kBACpD,CAAC,2BAA4B,OAAQ,KAAM,uBAAuB,GAAM,EAAO,GAC/E,CAAC,QAAS,IAAK,KAAM,UAAU,GAAM,EAAM,GAC3C,CAAC,iBAAkB,MAAO,KAAM,SAAS,GAAO,EAAM,QACtD,CAAC,wBAAyB,OAAQ,KAAM,YAAY,GAAO,EAAO,SAClE,CAAC,SAAU,IAAK,KAAM,SAAS,GAAO,EAAO,qBAC7C,CAAC,SAAU,MAAO,CAAC,MAAO,QAAQ,GAAO,EAAM,IAC/C,CAAC,kBAAmB,OAAQ,KAAM,UAAU,GAAO,EAAM,MACzD,CAAC,OAAQ,MAAO,KAAM,uBAAuB,GAAM,EAAO,GAC1D,CAAC,SAAU,SAAU,KAAM,QAAQ,GAAO,EAAM,MAChD,CAAC,iBAAkB,IAAK,KAAM,UAAU,GAAO,EAAO,qBACtD,CAAC,eAAgB,KAAM,KAAM,QAAQ,GAAO,EAAO,qBACnD,CAAC,gBAAiB,KAAM,KAAM,SAAS,GAAO,EAAO,WACrD,CAAC,eAAgB,aAAc,KAAM,QAAQ,GAAO,EAAO,qBAC3D,CAAC,gBAAiB,IAAK,CAAC,OAAQ,UAAU,GAAO,EAAM,MACvD,CAAC,SAAU,IAAK,KAAM,SAAS,GAAM,EAAM,GAC3C,CAAC,cAAU,MAAO,KAAM,4BAA4B,GAAO,EAAO,kBAClE,CAAC,MAAO,SAAK,KAAM,uBAAuB,GAAM,EAAO,GACvD,CAAC,aAAc,MAAO,KAAM,QAAQ,GAAO,EAAM,eACjD,CAAC,SAAU,KAAM,KAAM,YAAY,GAAM,EAAO,GAChD,CAAC,gBAAiB,OAAQ,KAAM,qBAAqB,GAAM,EAAO,GAClE,CAAC,kBAAgB,KAAM,KAAM,SAAS,GAAO,EAAM,WACnD,CAAC,OAAQ,KAAM,KAAM,eAAe,GAAO,EAAO,MAClD,CAAC,kBAAmB,OAAQ,KAAM,UAAU,GAAO,EAAM,oBACzD,CAAC,mBAAoB,OAAQ,CAAC,UAAW,UAAU,GAAO,EAAM,oBAChE,CAAC,QAAS,IAAK,KAAM,qBAAqB,GAAO,EAAO,IACxD,CAAC,OAAQ,OAAQ,KAAM,SAAS,GAAO,EAAM,WAC7C,CAAC,cAAe,MAAO,KAAM,SAAS,GAAO,EAAM,iBACnD,CAAC,aAAc,MAAO,KAAM,QAAQ,GAAO,EAAM,WACjD,CAAC,QAAS,KAAM,KAAM,UAAU,GAAO,EAAM,eAC7C,CAAC,SAAU,MAAO,KAAM,SAAS,GAAM,EAAO,GAC9C,CAAC,SAAU,IAAK,KAAM,SAAS,GAAO,EAAO,qBAC7C,CAAC,SAAU,IAAK,CAAC,OAAQ,QAAQ,GAAM,EAAM,GAC7C,CAAC,sBAAuB,MAAO,CAAC,YAAa,QAAQ,GAAO,EAAM,WAClE,CAAC,UAAW,IAAK,KAAM,0BAA0B,GAAM,EAAO,GAC9D,CAAC,UAAW,KAAM,KAAM,mBAAmB,GAAM,EAAO,GACxD,CAAC,OAAQ,KAAM,KAAM,QAAQ,GAAO,EAAM,aAC1C,CAAC,wBAAmB,OAAQ,CAAC,SAAU,QAAQ,GAAO,EAAM,OAC5D,CAAC,cAAe,MAAO,CAAC,QAAS,QAAQ,GAAO,EAAM,WACtD,CAAC,cAAe,MAAO,CAAC,QAAS,QAAQ,GAAO,EAAM,UACtD,CAAC,oBAAqB,MAAO,CAAC,QAAS,QAAQ,GAAO,EAAM,oBAC5D,CAAC,eAAgB,KAAM,KAAM,QAAQ,GAAM,EAAM,GACjD,CAAC,cAAe,MAAO,CAAC,QAAS,QAAQ,GAAO,EAAM,gBACtD,CAAC,uBAAwB,OAAQ,CAAC,SAAU,QAAQ,GAAO,EAAM,SACjE,CAAC,cAAe,QAAS,CAAC,UAAW,SAAU,YAAa,QAAQ,GAAO,EAAM,mBACjF,CAAC,cAAe,MAAO,CAAC,QAAS,QAAQ,GAAO,EAAM,WACtD,CAAC,eAAgB,KAAM,KAAM,UAAU,GAAO,EAAM,UACpD,CAAC,YAAa,KAAM,KAAM,eAAe,GAAM,EAAO,GACtD,CAAC,QAAS,KAAM,KAAM,aAAa,GAAO,EAAO,MACjD,CAAC,SAAU,KAAM,KAAM,uBAAuB,GAAO,EAAO,MAC5D,CAAC,QAAS,QAAS,KAAM,QAAQ,GAAO,EAAM,YAC9C,CAAC,aAAc,MAAO,KAAM,UAAU,GAAO,EAAM,YACnD,CAAC,WAAY,MAAO,KAAM,UAAU,GAAO,EAAM,YACjD,CAAC,QAAS,IAAK,KAAM,yBAAyB,GAAM,EAAM,GAC1D,CAAC,wBAAyB,IAAK,KAAM,UAAU,GAAO,EAAM,OAC5D,CAAC,MAAO,MAAO,KAAM,QAAQ,GAAO,EAAM,WAC1C,CAAC,QAAS,IAAK,KAAM,QAAQ,GAAO,EAAO,KAC3C,CAAC,YAAa,QAAS,KAAM,UAAU,GAAO,EAAM,cACpD,CAAC,cAAe,SAAU,KAAM,UAAU,GAAO,EAAM,WACvD,CAAC,kBAAmB,SAAU,KAAM,UAAU,GAAO,EAAM,YAC3D,CAAC,YAAa,KAAM,CAAC,SAAU,UAAU,GAAO,EAAM,eACtD,CAAC,mBAAoB,YAAa,KAAM,UAAU,GAAO,EAAM,aAC/D,CAAC,2BAA4B,UAAW,KAAM,QAAQ,GAAO,EAAM,YACnE,CAAC,OAAQ,IAAK,KAAM,WAAW,GAAM,EAAO,GAC5C,CAAC,OAAQ,IAAK,KAAM,SAAS,GAAM,EAAM,GACzC,CAAC,YAAa,KAAM,CAAC,MAAO,UAAU,GAAO,EAAM,MACnD,CAAC,QAAS,KAAM,KAAM,iBAAiB,GAAM,EAAO,GACpD,CAAC,OAAQ,KAAM,KAAM,UAAU,GAAO,EAAM,OAC5C,CAAC,OAAQ,KAAM,KAAM,QAAQ,GAAO,EAAM,WAKxCC,EAAkB,CACpBC,GAAI,CAAC,OAAQ,GAAI,oBAA2B,KAAM,SAClDC,GAAI,CAAC,OAAQ,GAAI,oBAAwB,KAAM,SAC/CC,GAAI,CAAC,OAAQ,GAAI,mBAAqB,KAAM,OAC5CC,GAAI,CAAC,OAAQ,GAAI,gBAAkB,KAAM,QACzCC,GAAI,CAAC,OAAQ,GAAI,cAAe,KAAM,QACtCC,GAAI,CAAC,OAAQ,GAAI,WAAY,KAAM,QACnCC,GAAI,CAAC,OAAQ,GAAI,QAAS,KAAM,QAChCC,GAAI,CAAC,OAAQ,GAAI,KAAM,KAAM,SAK3BC,EAAgB,CAClBC,EAAG,CAAC,QAAS,KAAO,KACpB7O,EAAG,CAAC,QAAS,KAAO,KACpB8O,EAAG,CAAC,MAAO,KAAO,KAClB/T,EAAG,CAAC,OAAQ,KAAO,KACnBqE,EAAG,CAAC,OAAQ,KAAO,KACnB2P,EAAG,CAAC,OAAQ,IAAO,KACnBC,EAAG,CAAC,OAAQ,IAAO,KACnB/N,EAAG,CAAC,OAAQ,IAAO,KACnBmI,EAAG,CAAC,QAAS,IAAO,KACpB6F,EAAG,CAAC,QAAS,GAAO,KACpBzF,EAAG,CAAC,OAAQ,GAAO,KACnBhR,EAAG,CAAC,QAAS,IAAO,KACpB0W,EAAG,CAAC,QAAS,KAAO,KACpBC,EAAG,CAAC,QAAS,KAAO,KACpBnN,EAAG,CAAC,OAAQ,KAAO,KACnBR,EAAG,CAAC,OAAQ,MAAO,KACnB9I,EAAG,CAAC,QAAS,MAAO,KACpB0W,EAAG,CAAC,OAAQ,MAAO,KACnBC,EAAG,CAAC,QAAS,MAAO,KACpBC,EAAG,CAAC,QAAS,MAAO,MAIlBC,EAAO,KACPC,EAAK,KACLC,EAAiB1B,EACjB2B,EAAe1B,EACf2B,EAAkB,EAClBC,EAAgB,EAIXvW,EAAI,EAAGA,EAAI6U,EAAMnN,OAAQ1H,IAChC4U,EAAuB,OAAhBC,EAAM7U,GAAG,GAAe,GAAK6U,EAAM7U,GAAG,IACzC6U,EAAM7U,GAAG,KAAOoW,GAAkBxB,EAAI4B,QAAQJ,IAAmB,KACnEF,EAAOrB,EAAM7U,KAEX6U,EAAM7U,GAAG,KAAOqW,GAAgBzB,EAAI4B,QAAQH,IAAiB,KAC/DF,EAAKtB,EAAM7U,IAKf,GAAa,OAATkW,EAAe,CACjB,IAAIO,EAAqB3B,EAAgBJ,EAAUnB,UAAU,EAAG,IAC5DmD,EAAmBnB,EAAcb,EAAUnB,UAAU,EAAG,IAG1B,OAA9BmB,EAAUnB,UAAU,EAAG,KACzBmD,EAAmB,CAAC,QAAS,GAAO,OAIlCD,GACFH,EAAkBG,EAAmB,GACrCL,EAAiB1B,EAAUnB,UAAU,IAC5BmD,IACTJ,EAAkBI,EAAiB,GACnCN,EAAiB1B,EAAUnB,UAAUmD,EAAiB,GAAGhP,SAI3D,IAAK,IAAIM,EAAI,EAAGA,EAAI6M,EAAMnN,OAAQM,IAChC4M,EAAuB,OAAhBC,EAAM7M,GAAG,GAAe,GAAK6M,EAAM7M,GAAG,IACzC6M,EAAM7M,GAAG,KAAOoO,GAAkBxB,EAAI4B,QAAQJ,IAAmB,KACnEF,EAAOrB,EAAM7M,GAGnB,CAGA,GAAW,OAAPmO,EAAa,CACf,IAAIQ,EAAmB7B,EAAgBH,EAAQpB,UAAU,EAAG,IACxDqD,EAAiBrB,EAAcZ,EAAQpB,UAAU,EAAG,IAGxB,OAA5BoB,EAAQpB,UAAU,EAAG,KACvBqD,EAAiB,CAAC,QAAS,GAAO,OAIhCD,GACFJ,EAAgBI,EAAiB,GACjCN,EAAe1B,EAAQpB,UAAU,IACxBqD,IACTL,EAAgBK,EAAe,GAC/BP,EAAe1B,EAAQpB,UAAUqD,EAAe,GAAGlP,SAIrD,IAAK,IAAIE,EAAI,EAAGA,EAAIiN,EAAMnN,OAAQE,IAChCgN,EAAuB,OAAhBC,EAAMjN,GAAG,GAAe,GAAKiN,EAAMjN,GAAG,IACzCiN,EAAMjN,GAAG,KAAOyO,GAAgBzB,EAAI4B,QAAQH,IAAiB,KAC/DF,EAAKtB,EAAMjN,GAGjB,CAGA,OAAa,OAATsO,GAAwB,OAAPC,GAKjBD,EAAK,KAAOC,EAAG,GAJVvP,EAAMiQ,GASRnE,EAASwD,EAAK,GAAKI,GAAmBH,EAAG,GAAKI,EACvD,EAEAjX,EAAQwX,QAAU,SAASpE,EAAQe,GAEjC,IADAf,EAASnT,EAAM0M,YAAYyG,cACLlF,MACpB,OAAOkF,EAIT,IAAK,iBAAiB9C,KAAK8C,IAAWA,GAAU,KAAOA,EAAS,IAC9D,OAAO9L,EAAMiD,IAIf,GAAI6I,EAAS,EACX,MAAO,IAAMH,EAAKmB,KAAK,IAAK,GAAK,IAAMhB,GAAQY,SAAS,GAAG5L,SAAW,IAAMgL,GAAQY,SAAS,GAI/F,IAAIpM,EAASkH,SAASsE,EAAQ,IAAIY,SAAS,GAG3C,MAAsB,qBAAXG,EACFvM,EAGH+B,MAAMwK,GACD7M,EAAMQ,MAIXqM,EAAS,EACJ7M,EAAMiD,KAIf4J,EAAS/H,KAAKqB,MAAM0G,KAGFvM,EAAOQ,OAAU6K,EAAKmB,KAAK,IAAKD,EAASvM,EAAOQ,QAAUR,EAASN,EAAMiD,GAE/F,EAEAvK,EAAQyX,QAAU,SAASrE,EAAQe,GAEjC,IADAf,EAASnT,EAAM0M,YAAYyG,cACLlF,MACpB,OAAOkF,EAIT,IAAK,kBAAkB9C,KAAK8C,IAAWA,GAAU,cAAgBA,EAAS,aACxE,OAAO9L,EAAMiD,IAIf,GAAI6I,EAAS,EACX,OAAQ,cAAgBA,GAAQY,SAAS,IAI3C,IAAIpM,EAASkH,SAASsE,EAAQ,IAAIY,SAAS,IAG3C,MAAsB,qBAAXG,EACFvM,EAGH+B,MAAMwK,GACD7M,EAAMQ,MAIXqM,EAAS,EACJ7M,EAAMiD,KAIf4J,EAAS/H,KAAKqB,MAAM0G,KAGFvM,EAAOQ,OAAU6K,EAAKmB,KAAK,IAAKD,EAASvM,EAAOQ,QAAUR,EAASN,EAAMiD,GAE/F,EAEAvK,EAAQ0X,QAAU,SAAStE,EAAQe,GAEjC,IADAf,EAASnT,EAAM0M,YAAYyG,cACLlF,MACpB,OAAOkF,EAIT,IAAK,iBAAiB9C,KAAK8C,IAAWA,GAAU,WAAaA,EAAS,UACpE,OAAO9L,EAAMiD,IAIf,GAAI6I,EAAS,EACX,OAAQ,WAAaA,GAAQY,SAAS,GAIxC,IAAIpM,EAASkH,SAASsE,EAAQ,IAAIY,SAAS,GAG3C,MAAsB,qBAAXG,EACFvM,EAGH+B,MAAMwK,GACD7M,EAAMQ,MAIXqM,EAAS,EACJ7M,EAAMiD,KAIf4J,EAAS/H,KAAKqB,MAAM0G,KAGFvM,EAAOQ,OAAU6K,EAAKmB,KAAK,IAAKD,EAASvM,EAAOQ,QAAUR,EAASN,EAAMiD,GAE/F,EAEAvK,EAAQ2X,MAAQ,SAASpD,EAASC,GAKhC,OAHAA,OAAuBjJ,IAAZiJ,EAAyB,EAAIA,EACxCD,EAAUtU,EAAM0M,YAAY4H,GAC5BC,EAAUvU,EAAM0M,YAAY6H,GACxBvU,EAAM2M,WAAW2H,EAASC,GACrBlN,EAAMQ,MAIPyM,IAAYC,EAAW,EAAI,CACrC,EAGAxU,EAAQ8C,IAAM,SAAS8U,EAAaC,GAMlC,OAJAA,OAA+BtM,IAAhBsM,EAA6B,EAAIA,EAEhDD,EAAc3X,EAAM0M,YAAYiL,GAChCC,EAAc5X,EAAM0M,YAAYkL,GAC5B5X,EAAM2M,WAAWgL,EAAaC,GACzBvQ,EAAMQ,MAGRkL,EAAM8E,IAAIF,EACnB,EAGA5X,EAAQ8C,IAAIvB,QAAU,WACpB,MAAM,IAAI2M,MAAM,iCAClB,EAEAlO,EAAQ4C,KAAO,SAAS0Q,GAEtB,OAAI3J,MAAM2J,GACDhM,EAAMQ,MAGRkL,EAAM+E,KAAKzE,EACpB,EAGAtT,EAAQ4C,KAAKrB,QAAU,WACrB,MAAM,IAAI2M,MAAM,kCAClB,EAEAlO,EAAQgY,OAAS,SAAS5E,EAAQ6E,GAGhC,OAFAA,EAAOA,GAAQ,EACf7E,EAASnT,EAAM0M,YAAYyG,GACvBnT,EAAM2M,WAAWqL,EAAM7E,GAClBA,EAIDA,GAAU6E,EAAQ,EAAI,CAChC,EAEAjY,EAAQkY,QAAU,SAAS9E,EAAQe,GAEjC,IAAK,sBAAsB7D,KAAK8C,GAC9B,OAAO9L,EAAMiD,IAIf,IAAI4N,EAA8B,KAAlB/E,EAAOhL,QAA0D,MAAzCgL,EAAOa,UAAU,EAAG,GAAGmE,cAG3DC,EAAWF,EAAYrJ,SAASsE,EAAQ,IAAM,cAAgBtE,SAASsE,EAAQ,IAGnF,GAAIiF,GAAW,KAAOA,EAAU,IAC9B,OAAO/Q,EAAMiD,IAIf,GAAI4N,EACF,MAAO,IAAMlF,EAAKmB,KAAK,IAAK,GAAK,IAAMiE,GAASrE,SAAS,GAAG5L,SAAW,IAAMiQ,GAASrE,SAAS,GAIjG,IAAIpM,EAASyQ,EAAQrE,SAAS,GAG9B,YAAezI,IAAX4I,EACKvM,EAGH+B,MAAMwK,GACD7M,EAAMQ,MAIXqM,EAAS,EACJ7M,EAAMiD,KAIf4J,EAAS/H,KAAKqB,MAAM0G,KAGFvM,EAAOQ,OAAU6K,EAAKmB,KAAK,IAAKD,EAASvM,EAAOQ,QAAUR,EAASN,EAAMiD,GAE/F,EAEAvK,EAAQsY,QAAU,SAASlF,GAEzB,IAAK,sBAAsB9C,KAAK8C,GAC9B,OAAO9L,EAAMiD,IAIf,IAAI8N,EAAUvJ,SAASsE,EAAQ,IAG/B,OAAQiF,GAAW,aAAgBA,EAAU,cAAgBA,CAC/D,EAEArY,EAAQuY,QAAU,SAASnF,EAAQe,GAEjC,IAAK,sBAAsB7D,KAAK8C,GAC9B,OAAO9L,EAAMiD,IAIf,IAAI8N,EAAUvJ,SAASsE,EAAQ,IAG/B,GAAIiF,EAAU,WAAaA,EAAU,aACnC,OAAO/Q,EAAMiD,IAIf,GAAI8N,GAAW,aACb,OAAQA,EAAU,cAAerE,SAAS,GAI5C,IAAIpM,EAASyQ,EAAQrE,SAAS,GAG9B,YAAezI,IAAX4I,EACKvM,EAGH+B,MAAMwK,GACD7M,EAAMQ,MAIXqM,EAAS,EACJ7M,EAAMiD,KAIf4J,EAAS/H,KAAKqB,MAAM0G,KAGFvM,EAAOQ,OAAU6K,EAAKmB,KAAK,IAAKD,EAASvM,EAAOQ,QAAUR,EAASN,EAAMiD,GAE/F,EAEAvK,EAAQwY,MAAQ,SAASC,GAEvB,IAAInF,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAG1B,OAAIxY,EAAM2M,WAAW0G,EAAGqD,GACfrP,EAAMQ,MAIRsE,KAAKwM,KAAKxM,KAAKyM,IAAIvF,EAAG,GAAKlH,KAAKyM,IAAIlC,EAAG,GAChD,EAEA3W,EAAQ2Y,UAAY,SAASF,GAC3B,QAAgBlN,IAAZkN,IAAqC,IAAZA,IAAgC,IAAZA,EAC/C,OAAOnR,EAAMQ,MAIf,GAAgB,IAAZ2Q,GAA6B,MAAZA,EACnB,OAAO,EAIT,GAAI,CAAC,IAAK,KAAKvB,QAAQuB,IAAY,EACjC,OAAO,EAUT,IAAIK,GAHJL,GAHAA,GAAoB,IAGFM,QAAQ,KAAM,OAAOA,QAAQ,KAAM,OAAOA,QAAQ,KAAM,OAAOA,QAAQ,KAAM,QAG5E7B,QAAQ,KACvB8B,EAAQP,EAAQvB,QAAQ,KACf,IAAT4B,IACFA,EAAOL,EAAQvB,QAAQ,IAAK,IAGhB,IAAV8B,IACFA,EAAQP,EAAQvB,QAAQ,IAAK,IAI/B,IAAI+B,EAAOR,EAAQxE,UAAUwE,EAAQrQ,OAAS,EAAGqQ,EAAQrQ,QACrD2E,EAAiB,MAATkM,GAAyB,MAATA,EAE5B,OAAIH,GAAQ,GAAKE,GAAS,EAEnBjM,EAKD+L,GAAQ,EACFnP,MAAM8O,EAAQxE,UAAU,EAAG6E,KAAUnP,MAAM8O,EAAQxE,UAAU6E,EAAO,EAAGL,EAAQrQ,OAAS,IAC9Fd,EAAMiD,IACN2O,OAAOT,EAAQxE,UAAU6E,EAAO,EAAGL,EAAQrQ,OAAS,IAE9CuB,MAAM8O,EAAQxE,UAAU,EAAG+E,KAAWrP,MAAM8O,EAAQxE,UAAU+E,EAAQ,EAAGP,EAAQrQ,OAAS,IAChGd,EAAMiD,KACL2O,OAAOT,EAAQxE,UAAU+E,EAAQ,EAAGP,EAAQrQ,OAAS,IAXjDd,EAAMiD,IAcXwC,EACMpD,MAAM8O,EAAQxE,UAAU,EAAGwE,EAAQrQ,OAAS,IAAOd,EAAMiD,IAAMkO,EAAQxE,UAAU,EAAGwE,EAAQrQ,OAAS,GAErGuB,MAAM8O,GAAYnR,EAAMiD,IAAM,CAG5C,EAEAvK,EAAQmZ,WAAa,SAASV,GAE5B,IAAInF,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAG1B,OAAIxY,EAAM2M,WAAW0G,EAAGqD,GACfrP,EAAMQ,MAIL,IAANwL,GAAiB,IAANqD,EACNrP,EAAM0C,KAIL,IAANsJ,GAAWqD,EAAI,EACVvK,KAAKgN,GAAK,EAIT,IAAN9F,GAAWqD,EAAI,GACTvK,KAAKgN,GAAK,EAIV,IAANzC,GAAWrD,EAAI,EACV,EAIC,IAANqD,GAAWrD,EAAI,GACTlH,KAAKgN,GAIX9F,EAAI,EACClH,KAAKiN,KAAK1C,EAAIrD,GACZA,EAAI,GAAKqD,GAAK,EAChBvK,KAAKiN,KAAK1C,EAAIrD,GAAKlH,KAAKgN,GAExBhN,KAAKiN,KAAK1C,EAAIrD,GAAKlH,KAAKgN,EAEnC,EAEApZ,EAAQsZ,YAAc,SAASb,GAE7B,IAAInF,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAE1B,GAAIxY,EAAM2M,WAAW0G,EAAGqD,GACtB,OAAOrP,EAAMQ,MAIf,IAAIiF,EAAO0L,EAAQxE,UAAUwE,EAAQrQ,OAAS,GAI9C,OAHA2E,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAGjC,IAAN4J,EAAW3W,EAAQ8U,QAAQxB,GAAIqD,EAAG5J,GAAQ0L,CACpD,EAEAzY,EAAQuZ,MAAQ,SAASd,GAEvB,IAAInF,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAE1B,GAAIxY,EAAM2M,WAAW0G,EAAGqD,GACtB,OAAOrP,EAAMQ,MAIf,IAAIiF,EAAO0L,EAAQxE,UAAUwE,EAAQrQ,OAAS,GAI9C,OAHA2E,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAGxC/M,EAAQ8U,QAAQ1I,KAAKoN,IAAIlG,IAAMlH,KAAKqN,IAAI9C,GAAKvK,KAAKqN,KAAK9C,IAAM,GAAIvK,KAAKsN,IAAIpG,IAAMlH,KAAKqN,IAAI9C,GAAKvK,KAAKqN,KAAK9C,IAAM,EAAG5J,EAC1H,EAEA/M,EAAQ2Z,OAAS,SAASlB,GAExB,IAAInF,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAE1B,GAAIxY,EAAM2M,WAAW0G,EAAGqD,GACtB,OAAOrP,EAAMQ,MAIf,IAAIiF,EAAO0L,EAAQxE,UAAUwE,EAAQrQ,OAAS,GAI9C,OAHA2E,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAGxC/M,EAAQ8U,QAAQ1I,KAAKoN,IAAI7C,IAAMvK,KAAKqN,IAAInG,GAAKlH,KAAKqN,KAAKnG,IAAM,EAAGlH,KAAKsN,IAAI/C,IAAMvK,KAAKqN,IAAInG,GAAKlH,KAAKqN,KAAKnG,IAAM,EAAGvG,EACzH,EAEA/M,EAAQ4Z,MAAQ,SAASnB,GAEvB,IAAInF,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAE1B,OAAIxY,EAAM2M,WAAW0G,EAAGqD,GACfrP,EAAMQ,MAIR9H,EAAQ6Z,MAAM7Z,EAAQuZ,MAAMd,GAAUzY,EAAQ8Z,MAAMrB,GAC7D,EAEAzY,EAAQ6Z,MAAQ,SAASE,EAAUC,GAEjC,IAAIvD,EAAIzW,EAAQ0Y,OAAOqB,GACnBE,EAAIja,EAAQ2Y,UAAUoB,GACtBla,EAAIG,EAAQ0Y,OAAOsB,GACnBnJ,EAAI7Q,EAAQ2Y,UAAUqB,GAE1B,GAAI/Z,EAAM2M,WAAW6J,EAAGwD,EAAGpa,EAAGgR,GAC5B,OAAOvJ,EAAMQ,MAIf,IAAIoS,EAAQH,EAAS9F,UAAU8F,EAAS3R,OAAS,GAC7C+R,EAAQH,EAAS/F,UAAU+F,EAAS5R,OAAS,GAC7C2E,EAAO,IAQX,IAPc,MAAVmN,GAEiB,MAAVC,KADTpN,EAAO,KAMC,IAANlN,GAAiB,IAANgR,EACb,OAAOvJ,EAAMiD,IAIf,IAAI6P,EAAMva,EAAIA,EAAIgR,EAAIA,EACtB,OAAO7Q,EAAQ8U,SAAS2B,EAAI5W,EAAIoa,EAAIpJ,GAAKuJ,GAAMH,EAAIpa,EAAI4W,EAAI5F,GAAKuJ,EAAKrN,EACvE,EAEA/M,EAAQqa,MAAQ,SAAS5B,GAEvB,IAAInF,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAE1B,GAAIxY,EAAM2M,WAAW0G,EAAGqD,GACtB,OAAOrP,EAAMQ,MAIf,IAAIiF,EAAO0L,EAAQxE,UAAUwE,EAAQrQ,OAAS,GAC9C2E,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAG/C,IAAIuJ,EAAIlK,KAAKqN,IAAInG,GACjB,OAAOtT,EAAQ8U,QAAQwB,EAAIlK,KAAKoN,IAAI7C,GAAIL,EAAIlK,KAAKsN,IAAI/C,GAAI5J,EAC3D,EAEA/M,EAAQsa,KAAO,SAAS7B,GAEtB,IAAInF,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAE1B,GAAIxY,EAAM2M,WAAW0G,EAAGqD,GACtB,OAAOrP,EAAMQ,MAIf,IAAIiF,EAAO0L,EAAQxE,UAAUwE,EAAQrQ,OAAS,GAI9C,OAHA2E,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAGxC/M,EAAQ8U,QAAQ1I,KAAKmO,IAAInO,KAAKwM,KAAKtF,EAAIA,EAAIqD,EAAIA,IAAKvK,KAAKiN,KAAK1C,EAAIrD,GAAIvG,EAC/E,EAEA/M,EAAQwa,QAAU,SAAS/B,GAEzB,IAAInF,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAE1B,GAAIxY,EAAM2M,WAAW0G,EAAGqD,GACtB,OAAOrP,EAAMQ,MAIf,IAAIiF,EAAO0L,EAAQxE,UAAUwE,EAAQrQ,OAAS,GAI9C,OAHA2E,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAGxC/M,EAAQ8U,QAAQ1I,KAAKmO,IAAInO,KAAKwM,KAAKtF,EAAIA,EAAIqD,EAAIA,IAAMvK,KAAKmO,IAAI,IAAKnO,KAAKiN,KAAK1C,EAAIrD,GAAKlH,KAAKmO,IAAI,IAAKxN,EAC7G,EAEA/M,EAAQya,OAAS,SAAShC,GAExB,IAAInF,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAE1B,GAAIxY,EAAM2M,WAAW0G,EAAGqD,GACtB,OAAOrP,EAAMQ,MAIf,IAAIiF,EAAO0L,EAAQxE,UAAUwE,EAAQrQ,OAAS,GAI9C,OAHA2E,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAGxC/M,EAAQ8U,QAAQ1I,KAAKmO,IAAInO,KAAKwM,KAAKtF,EAAIA,EAAIqD,EAAIA,IAAMvK,KAAKmO,IAAI,GAAInO,KAAKiN,KAAK1C,EAAIrD,GAAKlH,KAAKmO,IAAI,GAAIxN,EAC3G,EAEA/M,EAAQ0a,QAAU,SAASjC,EAASrF,GAClCA,EAASnT,EAAM0M,YAAYyG,GAC3B,IAAIE,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAC1B,GAAIxY,EAAM2M,WAAWwG,EAAQE,EAAGqD,GAC9B,OAAOrP,EAAMQ,MAIf,IAAIiF,EAAO0L,EAAQxE,UAAUwE,EAAQrQ,OAAS,GAC9C2E,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAG/C,IAAIlE,EAAIuD,KAAKyM,IAAI7Y,EAAQwY,MAAMC,GAAUrF,GAGrCuH,EAAI3a,EAAQmZ,WAAWV,GAG3B,OAAOzY,EAAQ8U,QAAQjM,EAAIuD,KAAKoN,IAAIpG,EAASuH,GAAI9R,EAAIuD,KAAKsN,IAAItG,EAASuH,GAAI5N,EAC7E,EAEA/M,EAAQ4a,UAAY,WAElB,IAAIhT,EAASiT,UAAU,GAEvB,IAAKA,UAAUzS,OACb,OAAOd,EAAMQ,MAIf,IAAK,IAAIpH,EAAI,EAAGA,EAAIma,UAAUzS,OAAQ1H,IAAK,CAEzC,IAAI+V,EAAIzW,EAAQ0Y,OAAO9Q,GACnBqS,EAAIja,EAAQ2Y,UAAU/Q,GACtB/H,EAAIG,EAAQ0Y,OAAOmC,UAAUna,IAC7BmQ,EAAI7Q,EAAQ2Y,UAAUkC,UAAUna,IAEpC,GAAIT,EAAM2M,WAAW6J,EAAGwD,EAAGpa,EAAGgR,GAC5B,OAAOvJ,EAAMQ,MAIfF,EAAS5H,EAAQ8U,QAAQ2B,EAAI5W,EAAIoa,EAAIpJ,EAAG4F,EAAI5F,EAAIoJ,EAAIpa,EACtD,CAGA,OAAO+H,CACT,EAEA5H,EAAQ0Y,OAAS,SAASD,GACxB,QAAgBlN,IAAZkN,IAAqC,IAAZA,IAAgC,IAAZA,EAC/C,OAAOnR,EAAMQ,MAIf,GAAgB,IAAZ2Q,GAA6B,MAAZA,EACnB,OAAO,EAIT,GAAI,CAAC,IAAK,KAAM,KAAM,MAAO,KAAM,MAAO,IAAK,KAAM,KAAM,MAAO,KAAM,OAAOvB,QAAQuB,IAAY,EACjG,OAAO,EAOT,IAAIK,GAHJL,GAAoB,IAGDvB,QAAQ,KACvB8B,EAAQP,EAAQvB,QAAQ,KACf,IAAT4B,IACFA,EAAOL,EAAQvB,QAAQ,IAAK,IAEhB,IAAV8B,IACFA,EAAQP,EAAQvB,QAAQ,IAAK,IAI/B,IAAI+B,EAAOR,EAAQxE,UAAUwE,EAAQrQ,OAAS,EAAGqQ,EAAQrQ,QACrD2E,EAAiB,MAATkM,GAAyB,MAATA,EAE5B,OAAIH,GAAQ,GAAKE,GAAS,EAEnBjM,EAKD+L,GAAQ,EACFnP,MAAM8O,EAAQxE,UAAU,EAAG6E,KAAUnP,MAAM8O,EAAQxE,UAAU6E,EAAO,EAAGL,EAAQrQ,OAAS,IAC9Fd,EAAMiD,IACN2O,OAAOT,EAAQxE,UAAU,EAAG6E,IAEtBnP,MAAM8O,EAAQxE,UAAU,EAAG+E,KAAWrP,MAAM8O,EAAQxE,UAAU+E,EAAQ,EAAGP,EAAQrQ,OAAS,IAChGd,EAAMiD,IACN2O,OAAOT,EAAQxE,UAAU,EAAG+E,IAXvB1R,EAAMiD,IAcXwC,EACMpD,MAAM8O,EAAQxE,UAAU,EAAGwE,EAAQrQ,OAAS,IAAOd,EAAMiD,IAAM,EAE/DZ,MAAM8O,GAAYnR,EAAMiD,IAAMkO,CAG5C,EAEAzY,EAAQ8a,MAAQ,SAASrC,GAEvB,IAAgB,IAAZA,IAAgC,IAAZA,EACtB,OAAOnR,EAAMQ,MAIf,IAAIwL,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAE1B,OAAIxY,EAAM2M,WAAW0G,EAAGqD,GACfrP,EAAMQ,MAIR9H,EAAQ6Z,MAAM,IAAK7Z,EAAQuZ,MAAMd,GAC1C,EAEAzY,EAAQ+a,OAAS,SAAStC,GAExB,IAAInF,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAE1B,OAAIxY,EAAM2M,WAAW0G,EAAGqD,GACfrP,EAAMQ,MAIR9H,EAAQ6Z,MAAM,IAAK7Z,EAAQ2Z,OAAOlB,GAC3C,EAEAzY,EAAQ8Z,MAAQ,SAASrB,GAEvB,IAAInF,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAE1B,GAAIxY,EAAM2M,WAAW0G,EAAGqD,GACtB,OAAOrP,EAAMQ,MAIf,IAAIiF,EAAO0L,EAAQxE,UAAUwE,EAAQrQ,OAAS,GAI9C,OAHA2E,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAGxC/M,EAAQ8U,QAAQ1I,KAAKsN,IAAIpG,IAAMlH,KAAKqN,IAAI9C,GAAKvK,KAAKqN,KAAK9C,IAAM,EAAGvK,KAAKoN,IAAIlG,IAAMlH,KAAKqN,IAAI9C,GAAKvK,KAAKqN,KAAK9C,IAAM,EAAG5J,EACzH,EAEA/M,EAAQgb,OAAS,SAASvC,GAExB,IAAInF,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAE1B,GAAIxY,EAAM2M,WAAW0G,EAAGqD,GACtB,OAAOrP,EAAMQ,MAIf,IAAIiF,EAAO0L,EAAQxE,UAAUwE,EAAQrQ,OAAS,GAI9C,OAHA2E,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAGxC/M,EAAQ8U,QAAQ1I,KAAKoN,IAAI7C,IAAMvK,KAAKqN,IAAInG,GAAKlH,KAAKqN,KAAKnG,IAAM,EAAGlH,KAAKsN,IAAI/C,IAAMvK,KAAKqN,IAAInG,GAAKlH,KAAKqN,KAAKnG,IAAM,EAAGvG,EACzH,EAEA/M,EAAQib,OAAS,SAASxC,GAExB,IAAInF,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAE1B,GAAIxY,EAAM2M,WAAW0G,EAAGqD,GACtB,OAAOrP,EAAMQ,MAIf,IAAIiF,EAAO0L,EAAQxE,UAAUwE,EAAQrQ,OAAS,GAC9C2E,EAAiB,MAATA,GAAyB,MAATA,EAAgBA,EAAO,IAG/C,IAAImO,EAAI9O,KAAKwM,KAAK5Y,EAAQwY,MAAMC,IAG5BkC,EAAI3a,EAAQmZ,WAAWV,GAG3B,OAAOzY,EAAQ8U,QAAQoG,EAAI9O,KAAKoN,IAAImB,EAAI,GAAIO,EAAI9O,KAAKsN,IAAIiB,EAAI,GAAI5N,EACnE,EAEA/M,EAAQmb,MAAQ,SAAU1C,GAExB,IAAgB,IAAZA,IAAgC,IAAZA,EACtB,OAAOnR,EAAMQ,MAIf,IAAIwL,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAG1B,OAAIxY,EAAM2M,WAAW0G,EAAGqD,GACfrP,EAAMiD,IAIRvK,EAAQ6Z,MAAM,IAAK7Z,EAAQ8Z,MAAMrB,GAC1C,EAEAzY,EAAQob,OAAS,SAAU3C,GAEzB,IAAgB,IAAZA,IAAgC,IAAZA,EACtB,OAAOnR,EAAMQ,MAIf,IAAIwL,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAG1B,OAAIxY,EAAM2M,WAAW0G,EAAGqD,GACfrP,EAAMiD,IAIRvK,EAAQ6Z,MAAM,IAAK7Z,EAAQgb,OAAOvC,GAC3C,EAEAzY,EAAQqb,MAAQ,SAAStB,EAAUC,GAEjC,IAAIvD,EAAI1G,KAAK2I,OAAOqB,GAChBE,EAAIlK,KAAK4I,UAAUoB,GACnBla,EAAIkQ,KAAK2I,OAAOsB,GAChBnJ,EAAId,KAAK4I,UAAUqB,GAEvB,GAAI/Z,EAAM2M,WAAW6J,EAAGwD,EAAGpa,EAAGgR,GAC5B,OAAOvJ,EAAMQ,MAIf,IAAIoS,EAAQH,EAAS9F,UAAU8F,EAAS3R,OAAS,GAC7C+R,EAAQH,EAAS/F,UAAU+F,EAAS5R,OAAS,GAC7C2E,EAAO,IAQX,OAPc,MAAVmN,GAEiB,MAAVC,KADTpN,EAAO,KAMFgD,KAAK+E,QAAQ2B,EAAI5W,EAAGoa,EAAIpJ,EAAG9D,EACpC,EAEA/M,EAAQsb,MAAQ,WACd,IAAKT,UAAUzS,OACb,OAAOd,EAAMQ,MAQf,IANA,IAAIyT,EAAOtb,EAAMub,QAAQX,WAGrBjT,EAAS2T,EAAK,GAGT7a,EAAI,EAAGA,EAAI6a,EAAKnT,OAAQ1H,IAAK,CAEpC,IAAI+V,EAAI1G,KAAK2I,OAAO9Q,GAChBqS,EAAIlK,KAAK4I,UAAU/Q,GACnB/H,EAAIkQ,KAAK2I,OAAO6C,EAAK7a,IACrBmQ,EAAId,KAAK4I,UAAU4C,EAAK7a,IAE5B,GAAIT,EAAM2M,WAAW6J,EAAGwD,EAAGpa,EAAGgR,GAC5B,OAAOvJ,EAAMQ,MAIfF,EAASmI,KAAK+E,QAAQ2B,EAAI5W,EAAGoa,EAAIpJ,EACnC,CAGA,OAAOjJ,CACT,EAEA5H,EAAQyb,MAAQ,SAAShD,GAEvB,IAAgB,IAAZA,IAAgC,IAAZA,EACtB,OAAOnR,EAAMQ,MAIf,IAAIwL,EAAItT,EAAQ0Y,OAAOD,GACnB9B,EAAI3W,EAAQ2Y,UAAUF,GAE1B,OAAIxY,EAAM2M,WAAW0G,EAAGqD,GACfrP,EAAMQ,MAIRiI,KAAK8J,MAAM9J,KAAK+J,MAAMrB,GAAU1I,KAAKwJ,MAAMd,GACpD,EAEAzY,EAAQ0b,QAAU,SAAStI,EAAQe,GAEjC,IAAK,gBAAgB7D,KAAK8C,GACxB,OAAO9L,EAAMiD,IAIf,IAAI4N,EAA8B,KAAlB/E,EAAOhL,QAA4C,MAA3BgL,EAAOa,UAAU,EAAG,GAGxDoE,EAAWF,EAAYrJ,SAASsE,EAAQ,GAAK,WAAatE,SAASsE,EAAQ,GAG/E,GAAIiF,GAAW,KAAOA,EAAU,IAC9B,OAAO/Q,EAAMiD,IAIf,GAAI4N,EACF,MAAO,IAAMlF,EAAKmB,KAAK,IAAK,GAAK,IAAMiE,GAASrE,SAAS,GAAG5L,SAAW,IAAMiQ,GAASrE,SAAS,GAIjG,IAAIpM,EAASyQ,EAAQrE,SAAS,GAG9B,MAAsB,qBAAXG,EACFvM,EAGH+B,MAAMwK,GACD7M,EAAMQ,MAIXqM,EAAS,EACJ7M,EAAMiD,KAIf4J,EAAS/H,KAAKqB,MAAM0G,KAGFvM,EAAOQ,OAAU6K,EAAKmB,KAAK,IAAKD,EAASvM,EAAOQ,QAAUR,EAASN,EAAMiD,GAE/F,EAEAvK,EAAQ2b,QAAU,SAASvI,GAEzB,IAAK,gBAAgB9C,KAAK8C,GACxB,OAAO9L,EAAMiD,IAIf,IAAI8N,EAAUvJ,SAASsE,EAAQ,GAG/B,OAAQiF,GAAW,UAAaA,EAAU,WAAaA,CACzD,EAEArY,EAAQ4b,QAAU,SAASxI,EAAQe,GAEjC,IAAK,gBAAgB7D,KAAK8C,GACxB,OAAO9L,EAAMiD,IAIf,IAAI8N,EAAUvJ,SAASsE,EAAQ,GAG/B,GAAIiF,GAAW,UACb,MAAO,MAAQA,EAAU,YAAYrE,SAAS,IAIhD,IAAIpM,EAASyQ,EAAQrE,SAAS,IAG9B,YAAezI,IAAX4I,EACKvM,EAGH+B,MAAMwK,GACD7M,EAAMQ,MAIXqM,EAAS,EACJ7M,EAAMiD,KAIf4J,EAAS/H,KAAKqB,MAAM0G,KAGFvM,EAAOQ,OAAU6K,EAAKmB,KAAK,IAAKD,EAASvM,EAAOQ,QAAUR,EAASN,EAAMiD,GAE/F,mBC/hDA,IAAIjD,EAAQ1H,EAAQ,OAChBU,EAAWV,EAAQ,OACnBK,EAAQL,EAAQ,OAEpB,SAASic,EAAUhL,GACjB,OAAOA,GAAKA,EAAEiL,UAAYnS,MAAMkH,EAAEiL,UACpC,CAEA,SAASC,EAAWlL,GAClB,OAAQA,aAAazF,KAAMyF,EAAE,IAAIzF,KAAKyF,EACxC,CAEA7Q,EAAQgc,QAAU,SAASC,EAAOC,EAAOC,EAAYC,EAAMC,EAAKC,EAAWnK,GAKzE,OAHA8J,EAAaF,EAAWE,GACxBC,EAAaH,EAAWG,GACxBC,EAAaJ,EAAWI,GACnBN,EAAUI,IAAWJ,EAAUK,IAAWL,EAAUM,GAKrDC,GAAQ,GAAKC,GAAO,IAKc,IAAlC,CAAC,EAAG,EAAG,GAAGnF,QAAQoF,KAKkB,IAApC,CAAC,EAAG,EAAG,EAAG,EAAG,GAAGpF,QAAQ/E,IAKxBgK,GAAcF,EAdT3U,EAAMiD,KAoBf4H,EAAQA,GAAS,GADjBkK,EAAQA,GAAS,GAIJD,EAAO9b,EAASoN,SAASuO,EAAOE,EAAYhK,IA5BhD7K,EAAMQ,KA6BjB,EAGA9H,EAAQuc,SAAW,WACjB,MAAM,IAAIrO,MAAM,8BAClB,EAGAlO,EAAQwc,UAAY,WAClB,MAAM,IAAItO,MAAM,+BAClB,EAGAlO,EAAQyc,SAAW,WACjB,MAAM,IAAIvO,MAAM,8BAClB,EAGAlO,EAAQ0c,UAAY,WAClB,MAAM,IAAIxO,MAAM,+BAClB,EAGAlO,EAAQ2c,SAAW,WACjB,MAAM,IAAIzO,MAAM,8BAClB,EAGAlO,EAAQ4c,WAAa,WACnB,MAAM,IAAI1O,MAAM,gCAClB,EAGAlO,EAAQ6c,QAAU,WAChB,MAAM,IAAI3O,MAAM,6BAClB,EAGAlO,EAAQ8c,QAAU,WAChB,MAAM,IAAI5O,MAAM,6BAClB,EAGAlO,EAAQ+c,QAAU,WAChB,MAAM,IAAI7O,MAAM,6BAClB,EAEAlO,EAAQgd,QAAU,SAASZ,EAAMa,EAASnV,EAAOoV,EAAOC,EAAKC,GAI3D,GAHAhB,EAAOnc,EAAM0M,YAAYyP,GACzBa,EAAUhd,EAAM0M,YAAYsQ,GAC5BnV,EAAQ7H,EAAM0M,YAAY7E,GACtB7H,EAAM2M,WAAWwP,EAAMa,EAASnV,GAClC,OAAOR,EAAMQ,MAGf,GAAIsU,GAAQ,GAAKa,GAAW,GAAKnV,GAAS,EACxC,OAAOR,EAAMiD,IAGf,GAAI2S,EAAQ,GAAKC,EAAM,GAAKD,EAAQC,EAClC,OAAO7V,EAAMiD,IAGf,GAAa,IAAT6S,GAAuB,IAATA,EAChB,OAAO9V,EAAMiD,IAGf,IAAI8S,EAAUrd,EAAQsd,IAAIlB,EAAMa,EAASnV,EAAO,EAAGsV,GAC/CG,EAAW,EAED,IAAVL,IACW,IAATE,IACFG,GAAYzV,GAEdoV,KAGF,IAAK,IAAIxc,EAAIwc,EAAOxc,GAAKyc,EAAKzc,IAE1B6c,GADW,IAATH,EACUpd,EAAQwd,GAAGpB,EAAM1b,EAAI,EAAG2c,EAASvV,EAAO,GAAKuV,EAE7Crd,EAAQwd,GAAGpB,EAAM1b,EAAI,EAAG2c,EAASvV,EAAO,GAKxD,OAFAyV,GAAYnB,CAGd,EAEApc,EAAQyd,SAAW,SAASrB,EAAMa,EAASnV,EAAOoV,EAAOC,EAAKC,GAO5D,GAHAhB,EAAOnc,EAAM0M,YAAYyP,GACzBa,EAAUhd,EAAM0M,YAAYsQ,GAC5BnV,EAAQ7H,EAAM0M,YAAY7E,GACtB7H,EAAM2M,WAAWwP,EAAMa,EAASnV,GAClC,OAAOR,EAAMQ,MAIf,GAAIsU,GAAQ,GAAKa,GAAW,GAAKnV,GAAS,EACxC,OAAOR,EAAMiD,IAIf,GAAI2S,EAAQ,GAAKC,EAAM,GAAKD,EAAQC,EAClC,OAAO7V,EAAMiD,IAIf,GAAa,IAAT6S,GAAuB,IAATA,EAChB,OAAO9V,EAAMiD,IAIf,IAAI8S,EAAUrd,EAAQsd,IAAIlB,EAAMa,EAASnV,EAAO,EAAGsV,GAC/CM,EAAY,EACF,IAAVR,IAEAQ,EADW,IAATN,EACUC,EAAUvV,EAAQsU,EAElBiB,EAEdH,KAEF,IAAK,IAAIxc,EAAIwc,EAAOxc,GAAKyc,EAAKzc,IAE1Bgd,GADEN,EAAO,EACIC,GAAWrd,EAAQwd,GAAGpB,EAAM1b,EAAI,EAAG2c,EAASvV,EAAO,GAAKuV,GAAWjB,EAEnEiB,EAAUrd,EAAQwd,GAAGpB,EAAM1b,EAAI,EAAG2c,EAASvV,EAAO,GAAKsU,EAKxE,OAAOsB,CACT,EAEA1d,EAAQ2d,GAAK,SAASC,EAAMC,EAASC,EAAMC,EAAQtR,GASjD,GAPAA,OAAmBlB,IAAVkB,EAAuB,GAAKA,EAErCmR,EAAO3d,EAAM0M,YAAYiR,GACzBC,EAAU5d,EAAM0M,YAAYkR,GAC5BC,EAAO7d,EAAM0M,YAAYmR,GACzBC,EAAS9d,EAAM0M,YAAYoR,GAC3BtR,EAAQxM,EAAM0M,YAAYF,GACtBxM,EAAM2M,WAAWgR,EAAMC,EAASC,EAAMC,EAAQtR,GAChD,OAAOnF,EAAMQ,MAIf,GAAI8V,EAAO,GAAKC,EAAU,GAAKC,EAAO,GAAKC,EAAS,EAClD,OAAOzW,EAAMiD,IAIf,IAAgE,IAA5D,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,IAAI2M,QAAQzK,GAClD,OAAOnF,EAAMiD,IAIf,GAAIwT,EAASD,EACX,OAAOxW,EAAMiD,IAIf,GAAIsT,GAAWD,EACb,OAAO,EAaT,IATA,IAAIxB,GAAQ,EAAIhQ,KAAKyM,IAAIgF,EAAUD,EAAM,EAAIE,IAAOE,QAAQ,GAGxDC,EAAUL,EAAOxB,EAAO3P,EAAQ,GAGhCmE,EAAQqN,EACRC,EAAU,EACVC,EAAWJ,IAAWD,EAAQA,EAAO,EAAIC,EACpCrd,EAAI,EAAGA,GAAKyd,EAASzd,IAE5BkQ,GADAsN,GAAWN,EAAOhN,GAASwL,EAK7B,OAAe,IAAX2B,EAEKE,EACEF,IAAWD,GAEZF,EAAOhN,GAASwL,EAEjB8B,CAEX,EAEAle,EAAQoe,IAAM,SAASR,EAAMC,EAASC,EAAMC,EAAQM,GASlD,GAPAA,OAAqB9S,IAAX8S,EAAwB,EAAIA,EAEtCT,EAAO3d,EAAM0M,YAAYiR,GACzBC,EAAU5d,EAAM0M,YAAYkR,GAC5BC,EAAO7d,EAAM0M,YAAYmR,GACzBC,EAAS9d,EAAM0M,YAAYoR,GAC3BM,EAASpe,EAAM0M,YAAY0R,GACvBpe,EAAM2M,WAAWgR,EAAMC,EAASC,EAAMC,EAAQM,GAChD,OAAO/W,EAAMQ,MAIf,GAAI8V,EAAO,GAAKC,EAAU,GAAKC,EAAO,GAAKC,EAAS,GAAKM,GAAU,EACjE,OAAO/W,EAAMiD,IAIf,GAAIwT,EAASD,EACX,OAAOxW,EAAMiD,IAIf,GAAIsT,GAAWD,EACb,OAAO,EAMT,IAFA,IAAIhN,EAAQ,EACRsN,EAAU,EACLxd,EAAI,EAAGA,GAAKqd,EAAQrd,IAE3BkQ,GADAsN,EAAU9R,KAAKiD,IAAsBgP,EAASP,GAA1BF,EAAOhN,GAA2BgN,EAAOC,EAAUjN,GAKzE,OAAOsN,CACT,EAGAle,EAAQse,KAAO,WACb,MAAM,IAAIpQ,MAAM,0BAClB,EAEAlO,EAAQue,SAAW,SAASC,EAAQC,GAKlC,GAFAD,EAASve,EAAM0M,YAAY6R,GAC3BC,EAAWxe,EAAM0M,YAAY8R,GACzBxe,EAAM2M,WAAW4R,EAAQC,GAC3B,OAAOnX,EAAMQ,MAIf,GAAI2W,EAAW,EACb,OAAOnX,EAAMiD,IAIf,GAAIkU,GAAY,GAAKA,EAAW,EAC9B,OAAOnX,EAAM0C,KAIfyU,EAAW3P,SAAS2P,EAAU,IAG9B,IAAI7W,EAASkH,SAAS0P,EAAQ,IAG9B5W,GAAW4W,EAAS,EAAKpS,KAAKyM,IAAI,GAAIzM,KAAKC,KAAKD,KAAKmO,IAAIkE,GAAYrS,KAAKsS,OAASD,EAGnF,IAAIE,EAAQvS,KAAKyM,IAAI,GAAIzM,KAAKC,KAAKD,KAAKmO,IAAIkE,GAAYrS,KAAKwS,KAAO,GAIpE,OAHAhX,EAASwE,KAAKuE,MAAM/I,EAAS+W,GAASA,CAIxC,EAEA3e,EAAQ6e,SAAW,SAASL,EAAQC,GAKlC,GAFAD,EAASve,EAAM0M,YAAY6R,GAC3BC,EAAWxe,EAAM0M,YAAY8R,GACzBxe,EAAM2M,WAAW4R,EAAQC,GAC3B,OAAOnX,EAAMQ,MAIf,GAAI2W,EAAW,EACb,OAAOnX,EAAMiD,IAIf,GAAIkU,GAAY,GAAKA,EAAW,EAC9B,OAAOnX,EAAM0C,KAIfyU,EAAW3P,SAAS2P,EAAU,IAG9B,IAAI7W,EAASkH,SAAS0P,EAAQ,IAM9B,OAHA5W,GAAW4W,EAAS,EAAKpS,KAAKyM,IAAI,IAAKzM,KAAKC,KAAKD,KAAKmO,IAAIkE,GAAYrS,KAAKsS,OAASD,CAItF,EAGAze,EAAQ8e,SAAW,WACjB,MAAM,IAAI5Q,MAAM,8BAClB,EAEAlO,EAAQ+e,OAAS,SAAS3C,EAAMa,GAG9B,OAFAb,EAAOnc,EAAM0M,YAAYyP,GACzBa,EAAUhd,EAAM0M,YAAYsQ,GACxBhd,EAAM2M,WAAWwP,EAAMa,GAClB3V,EAAMQ,MAIXsU,GAAQ,GAAKa,EAAU,EAClB3V,EAAMiD,KAIf0S,EAAUnO,SAASmO,EAAS,IAGrB7Q,KAAKyM,IAAI,EAAIuD,EAAOa,EAASA,GAAW,EACjD,EAEAjd,EAAQwd,GAAK,SAASpB,EAAMa,EAASI,EAASvV,EAAOsV,GAWnD,GARAtV,EAAQA,GAAS,EACjBsV,EAAOA,GAAQ,EAEfhB,EAAOnc,EAAM0M,YAAYyP,GACzBa,EAAUhd,EAAM0M,YAAYsQ,GAC5BI,EAAUpd,EAAM0M,YAAY0Q,GAC5BvV,EAAQ7H,EAAM0M,YAAY7E,GAC1BsV,EAAOnd,EAAM0M,YAAYyQ,GACrBnd,EAAM2M,WAAWwP,EAAMa,EAASI,EAASvV,EAAOsV,GAClD,OAAO9V,EAAMQ,MAIf,IAAIF,EACJ,GAAa,IAATwU,EACFxU,EAASE,EAAQuV,EAAUJ,MACtB,CACL,IAAI+B,EAAO5S,KAAKyM,IAAI,EAAIuD,EAAMa,GAE5BrV,EADW,IAATwV,EACOtV,EAAQkX,EAAO3B,GAAW,EAAIjB,IAAS4C,EAAO,GAAK5C,EAEnDtU,EAAQkX,EAAO3B,GAAW2B,EAAO,GAAK5C,CAEnD,CACA,OAAQxU,CACV,EAEA5H,EAAQif,WAAa,SAASvB,EAAWwB,GAGvC,GAFAxB,EAAYzd,EAAM0M,YAAY+Q,GAC9BwB,EAAWjf,EAAMkf,iBAAiBlf,EAAMub,QAAQ0D,IAC5Cjf,EAAM2M,WAAW8Q,EAAWwB,GAC9B,OAAO5X,EAAMQ,MAOf,IAJA,IAAIuB,EAAI6V,EAAS9W,OACbgX,EAAS1B,EAGJhd,EAAI,EAAGA,EAAI2I,EAAG3I,IAErB0e,GAAU,EAAIF,EAASxe,GAIzB,OAAO0e,CACT,EAGApf,EAAQqf,QAAU,WAChB,MAAM,IAAInR,MAAM,6BAClB,EAEAlO,EAAQsf,KAAO,SAASlD,EAAM2B,EAAQd,EAASsC,EAASH,EAAQhC,GAY9D,GATAgC,EAASA,GAAU,EACnBhC,EAAOA,GAAQ,EAEfhB,EAAOnc,EAAM0M,YAAYyP,GACzB2B,EAAS9d,EAAM0M,YAAYoR,GAC3Bd,EAAUhd,EAAM0M,YAAYsQ,GAC5BsC,EAAUtf,EAAM0M,YAAY4S,GAC5BH,EAASnf,EAAM0M,YAAYyS,GAC3BhC,EAAOnd,EAAM0M,YAAYyQ,GACrBnd,EAAM2M,WAAWwP,EAAM2B,EAAQd,EAASsC,EAASH,EAAQhC,GAC3D,OAAO9V,EAAMQ,MAIf,IAAIuV,EAAUrd,EAAQsd,IAAIlB,EAAMa,EAASsC,EAASH,EAAQhC,GAmB1D,OAfe,IAAXW,EACW,IAATX,EACS,GAECmC,EAGD,IAATnC,EACSpd,EAAQwd,GAAGpB,EAAM2B,EAAS,EAAGV,EAASkC,EAAS,GAAKlC,EAEpDrd,EAAQwd,GAAGpB,EAAM2B,EAAS,EAAGV,EAASkC,EAAS,IAK5CnD,CACpB,EAEApc,EAAQwf,IAAM,SAASC,EAAQC,GAO7B,GAJAA,EAAQA,GAAS,EAEjBD,EAASxf,EAAMkf,iBAAiBlf,EAAMub,QAAQiE,IAC9CC,EAAQzf,EAAM0M,YAAY+S,GACtBzf,EAAM2M,WAAW6S,EAAQC,GAC3B,OAAOpY,EAAMQ,MA4Bf,IAxBA,IAAI6X,EAAY,SAASF,EAAQG,EAAOxD,GAGtC,IAFA,IAAIyD,EAAIzD,EAAO,EACXxU,EAAS6X,EAAO,GACX/e,EAAI,EAAGA,EAAI+e,EAAOrX,OAAQ1H,IACjCkH,GAAU6X,EAAO/e,GAAK0L,KAAKyM,IAAIgH,GAAID,EAAMlf,GAAKkf,EAAM,IAAM,KAE5D,OAAOhY,CACT,EAGIkY,EAAiB,SAASL,EAAQG,EAAOxD,GAG3C,IAFA,IAAIyD,EAAIzD,EAAO,EACXxU,EAAS,EACJlH,EAAI,EAAGA,EAAI+e,EAAOrX,OAAQ1H,IAAK,CACtC,IAAIqf,GAAQH,EAAMlf,GAAKkf,EAAM,IAAM,IACnChY,GAAUmY,EAAON,EAAO/e,GAAK0L,KAAKyM,IAAIgH,EAAGE,EAAO,EAClD,CACA,OAAOnY,CACT,EAGIgY,EAAQ,GACRI,GAAW,EACX7H,GAAW,EACNzX,EAAI,EAAGA,EAAI+e,EAAOrX,OAAQ1H,IACjCkf,EAAMlf,GAAY,IAANA,EAAW,EAAIkf,EAAMlf,EAAI,GAAK,IACtC+e,EAAO/e,GAAK,IACdsf,GAAW,GAETP,EAAO/e,GAAK,IACdyX,GAAW,GAKf,IAAK6H,IAAa7H,EAChB,OAAO7Q,EAAMiD,IAKf,IAMI0V,EAASC,EAASC,EANlBC,EADJV,OAAmBnU,IAAVmU,EAAuB,GAAMA,EAQlCW,GAAW,EACf,GAEEJ,EAAUG,GADVD,EAAcR,EAAUF,EAAQG,EAAOQ,IACFN,EAAeL,EAAQG,EAAOQ,GACnEF,EAAU9T,KAAK6F,IAAIgO,EAAUG,GAC7BA,EAAaH,EACbI,EAAYH,EAVD,OAUuB9T,KAAK6F,IAAIkO,GAVhC,YAWJE,GAGT,OAAOD,CACT,EAEApgB,EAAQsgB,MAAQ,SAASlE,EAAM2B,EAAQd,EAASnV,GAK9C,OAJAsU,EAAOnc,EAAM0M,YAAYyP,GACzB2B,EAAS9d,EAAM0M,YAAYoR,GAC3Bd,EAAUhd,EAAM0M,YAAYsQ,GAC5BnV,EAAQ7H,EAAM0M,YAAY7E,GACtB7H,EAAM2M,WAAWwP,EAAM2B,EAAQd,EAASnV,GACnCR,EAAMQ,MAIRA,EAAQsU,GAAQ2B,EAASd,EAAU,EAC5C,EAGAjd,EAAQugB,UAAY,WAClB,MAAM,IAAIrS,MAAM,+BAClB,EAEAlO,EAAQwgB,KAAO,SAASf,EAAQgB,EAAcC,GAI5C,GAHAjB,EAASxf,EAAMkf,iBAAiBlf,EAAMub,QAAQiE,IAC9CgB,EAAexgB,EAAM0M,YAAY8T,GACjCC,EAAgBzgB,EAAM0M,YAAY+T,GAC9BzgB,EAAM2M,WAAW6S,EAAQgB,EAAcC,GACzC,OAAOpZ,EAAMQ,MASf,IALA,IAAIuB,EAAIoW,EAAOrX,OAGXuY,EAAW,GACXC,EAAU,GACLlgB,EAAI,EAAGA,EAAI2I,EAAG3I,IACjB+e,EAAO/e,GAAK,EACdigB,EAAS5Y,KAAK0X,EAAO/e,IAErBkgB,EAAQ7Y,KAAK0X,EAAO/e,IAKxB,IAAI6J,GAAOvK,EAAQ6gB,IAAIH,EAAeE,GAAWxU,KAAKyM,IAAI,EAAI6H,EAAerX,EAAI,GAC7E+Q,EAAMpa,EAAQ6gB,IAAIJ,EAAcE,IAAa,EAAIF,GACrD,OAAOrU,KAAKyM,IAAItO,EAAM6P,EAAK,GAAK/Q,EAAI,IAAM,CAC5C,EAEArJ,EAAQ8gB,QAAU,SAAS1E,EAAMa,GAG/B,OAFAb,EAAOnc,EAAM0M,YAAYyP,GACzBa,EAAUhd,EAAM0M,YAAYsQ,GACxBhd,EAAM2M,WAAWwP,EAAMa,GAClB3V,EAAMQ,MAIXsU,GAAQ,GAAKa,EAAU,EAClB3V,EAAMiD,KAIf0S,EAAUnO,SAASmO,EAAS,KAGpB7Q,KAAKyM,IAAIuD,EAAO,EAAG,EAAIa,GAAW,GAAKA,EACjD,EAEAjd,EAAQ+gB,KAAO,SAAS3E,EAAMiB,EAASkC,EAASH,EAAQhC,GAUtD,GATAA,OAAiB7R,IAAT6R,EAAsB,EAAIA,EAClCgC,OAAqB7T,IAAX6T,EAAwB,EAAIA,EAEtChD,EAAOnc,EAAM0M,YAAYyP,GACzBiB,EAAUpd,EAAM0M,YAAY0Q,GAC5BkC,EAAUtf,EAAM0M,YAAY4S,GAC5BH,EAASnf,EAAM0M,YAAYyS,GAC3BhC,EAAOnd,EAAM0M,YAAYyQ,GAErBnd,EAAM2M,WAAWwP,EAAMiB,EAASkC,EAASH,EAAQhC,GACnD,OAAO9V,EAAMQ,MAGf,GAAa,IAATsU,EACF,QAAUmD,EAAUH,GAAU/B,EAE9B,IAAI9S,EAAM8S,GAAW,EAAIjB,EAAOgB,GAAQgC,EAAShD,EAC7ChC,EAAOmF,EAAUnD,EAAOiB,GAAW,EAAIjB,EAAOgB,GAClD,OAAOhR,KAAKmO,IAAIhQ,EAAM6P,GAAOhO,KAAKmO,IAAI,EAAI6B,EAE9C,EAEApc,EAAQ6gB,IAAM,WACZ,IAAItF,EAAOtb,EAAMkf,iBAAiBlf,EAAMub,QAAQX,YAChD,GAAIU,aAAgBrN,MAClB,OAAOqN,EAUT,IANA,IAAIa,EAAOb,EAAK,GAGZzT,EAAQ,EAGHY,EAAI,EAAGA,EAAI6S,EAAKnT,OAAQM,IAC/BZ,GAASyT,EAAK7S,GAAK0D,KAAKyM,IAAI,EAAIuD,EAAM1T,GAIxC,OAAOZ,CACT,EAGA9H,EAAQghB,UAAY,WAClB,MAAM,IAAI9S,MAAM,+BAClB,EAGAlO,EAAQihB,UAAY,WAClB,MAAM,IAAI/S,MAAM,+BAClB,EAGAlO,EAAQkhB,UAAY,WAClB,MAAM,IAAIhT,MAAM,+BAClB,EAGAlO,EAAQmhB,UAAY,WAClB,MAAM,IAAIjT,MAAM,+BAClB,EAEAlO,EAAQohB,UAAY,SAAShF,EAAMmD,EAASH,GAI1C,OAHAhD,EAAOnc,EAAM0M,YAAYyP,GACzBmD,EAAUtf,EAAM0M,YAAY4S,GAC5BH,EAASnf,EAAM0M,YAAYyS,GACvBnf,EAAM2M,WAAWwP,EAAMmD,EAASH,GAC3B9X,EAAMQ,MAIXsU,GAAQ,EACH9U,EAAMiD,KAIP6B,KAAKmO,IAAI6E,GAAUhT,KAAKmO,IAAIgF,IAAYnT,KAAKmO,IAAI,EAAI6B,EAC/D,EAEApc,EAAQsd,IAAM,SAASlB,EAAMa,EAASsC,EAASH,EAAQhC,GAWrD,GARAgC,EAASA,GAAU,EACnBhC,EAAOA,GAAQ,EAEfhB,EAAOnc,EAAM0M,YAAYyP,GACzBa,EAAUhd,EAAM0M,YAAYsQ,GAC5BsC,EAAUtf,EAAM0M,YAAY4S,GAC5BH,EAASnf,EAAM0M,YAAYyS,GAC3BhC,EAAOnd,EAAM0M,YAAYyQ,GACrBnd,EAAM2M,WAAWwP,EAAMa,EAASsC,EAASH,EAAQhC,GACnD,OAAO9V,EAAMQ,MAIf,IAAIF,EACJ,GAAa,IAATwU,EACFxU,GAAU2X,EAAUH,GAAUnC,MACzB,CACL,IAAI+B,EAAO5S,KAAKyM,IAAI,EAAIuD,EAAMa,GAE5BrV,EADW,IAATwV,GACQgC,EAAShD,GAAQ4C,EAAO,GAAKO,EAAUnD,GAAQ,EAAI,EAAI4C,KAAU,EAAI5C,GAEtEgD,EAAShD,GAAQ4C,EAAO,GAAKO,EAAUnD,GAAQ,EAAI,EAAI4C,EAEpE,CACA,OAAQpX,CACV,EAEA5H,EAAQqhB,KAAO,SAASjF,EAAM2B,EAAQd,EAASsC,EAASH,EAAQhC,GAS9D,OARAgC,EAASA,GAAU,EACnBhC,EAAOA,GAAQ,EAEfhB,EAAOnc,EAAM0M,YAAYyP,GACzBa,EAAUhd,EAAM0M,YAAYsQ,GAC5BsC,EAAUtf,EAAM0M,YAAY4S,GAC5BH,EAASnf,EAAM0M,YAAYyS,GAC3BhC,EAAOnd,EAAM0M,YAAYyQ,GACrBnd,EAAM2M,WAAWwP,EAAMa,EAASsC,EAASH,EAAQhC,GAC5C9V,EAAMQ,MAGR9H,EAAQsd,IAAIlB,EAAMa,EAASsC,EAASH,EAAQhC,GAAQpd,EAAQsf,KAAKlD,EAAM2B,EAAQd,EAASsC,EAASH,EAAQhC,EAClH,EAGApd,EAAQshB,MAAQ,WACd,MAAM,IAAIpT,MAAM,2BAClB,EAGAlO,EAAQuhB,UAAY,WAClB,MAAM,IAAIrT,MAAM,+BAClB,EAGAlO,EAAQwhB,SAAW,WACjB,MAAM,IAAItT,MAAM,8BAClB,EAEAlO,EAAQyhB,GAAK,SAASrF,EAAMa,EAASI,EAAS+B,EAAQhC,GASpD,OARAgC,EAASA,GAAU,EACnBhC,EAAOA,GAAQ,EAEfhB,EAAOnc,EAAM0M,YAAYyP,GACzBa,EAAUhd,EAAM0M,YAAYsQ,GAC5BI,EAAUpd,EAAM0M,YAAY0Q,GAC5B+B,EAASnf,EAAM0M,YAAYyS,GAC3BhC,EAAOnd,EAAM0M,YAAYyQ,GACrBnd,EAAM2M,WAAWwP,EAAMa,EAASI,EAAS+B,EAAQhC,GAC5C9V,EAAMQ,MAIF,IAATsU,GACMiB,EAAUJ,EAAUmC,IAElB,EAAIhT,KAAKyM,IAAI,EAAIuD,EAAMa,IAAYb,EAAQiB,GAAW,EAAIjB,EAAOgB,GAAQgC,GAAUhT,KAAKyM,IAAI,EAAIuD,EAAMa,EAEpH,EAEAjd,EAAQ0hB,KAAO,SAASzE,EAASI,EAASkC,EAASH,EAAQhC,EAAMsC,GAW/D,GAVAA,OAAmBnU,IAAVmU,EAAuB,IAAOA,EACvCN,OAAqB7T,IAAX6T,EAAwB,EAAIA,EACtChC,OAAiB7R,IAAT6R,EAAsB,EAAIA,EAElCH,EAAUhd,EAAM0M,YAAYsQ,GAC5BI,EAAUpd,EAAM0M,YAAY0Q,GAC5BkC,EAAUtf,EAAM0M,YAAY4S,GAC5BH,EAASnf,EAAM0M,YAAYyS,GAC3BhC,EAAOnd,EAAM0M,YAAYyQ,GACzBsC,EAAQzf,EAAM0M,YAAY+S,GACtBzf,EAAM2M,WAAWqQ,EAASI,EAASkC,EAASH,EAAQhC,EAAMsC,GAC5D,OAAOpY,EAAMQ,MAGf,IAAI6Z,EAAS,MAETvF,EAAOsD,EAEXtC,EAAOA,EAAO,EAAI,EAClB,IAAK,IAAI1c,EAAI,EAAGA,EAJF,GAIeA,IAAK,CAChC,GAAI0b,IAAS,EACX,OAAO9U,EAAMiD,IAEf,IAAIoM,EAAG5W,EAUH6hB,EAHJ,GALEjL,EADEvK,KAAK6F,IAAImK,GAAQuF,EACfpC,GAAW,EAAItC,EAAUb,GAAQiB,GAAW,EAAIjB,EAAOgB,GAAQH,EAAUmC,EAGzEG,GADJxf,EAAIqM,KAAKyM,IAAI,EAAIuD,EAAMa,IACLI,GAAW,EAAIjB,EAAOgB,IAASrd,EAAI,GAAKqf,EAExDhT,KAAK6F,IAAI0E,GAAKgL,EAChB,OAAOvF,EAGT,GAAIhQ,KAAK6F,IAAImK,GAAQuF,EACnBC,EAAKrC,EAAUtC,EAAUI,EAAUD,EAAOH,MACrC,CACLld,EAAIqM,KAAKyM,IAAI,EAAIuD,EAAMa,GACvB,IAAI4E,EAAK5E,EAAU7Q,KAAKyM,IAAI,EAAIuD,EAAMa,EAAU,GAChD2E,EAAKrC,EAAUsC,EAAKxE,GAAW,EAAIjB,EAAOgB,GAAQyE,EAAKxE,IAAY,GAAKjB,EAAOA,KAAUrc,EAAI,EAC/F,CACAqc,GAAQzF,EAAIiL,CACd,CAEA,OAAOxF,CACT,EAGApc,EAAQ8hB,SAAW,WACjB,MAAM,IAAI5T,MAAM,8BAClB,EAEAlO,EAAQ+hB,IAAM,SAAS9E,EAASsC,EAASH,GAIvC,OAHAnC,EAAUhd,EAAM0M,YAAYsQ,GAC5BsC,EAAUtf,EAAM0M,YAAY4S,GAC5BH,EAASnf,EAAM0M,YAAYyS,GACvBnf,EAAM2M,WAAWqQ,EAASsC,EAASH,GAC9B9X,EAAMQ,MAIC,IAAZmV,GAA6B,IAAZsC,EACZjY,EAAMiD,IAIR6B,KAAKyM,IAAIuG,EAASG,EAAS,EAAItC,GAAW,CACnD,EAEAjd,EAAQgiB,IAAM,SAASpE,EAAMC,EAASC,GAIpC,OAHAF,EAAO3d,EAAM0M,YAAYiR,GACzBC,EAAU5d,EAAM0M,YAAYkR,GAC5BC,EAAO7d,EAAM0M,YAAYmR,GACrB7d,EAAM2M,WAAWgR,EAAMC,EAASC,GAC3BxW,EAAMQ,MAIF,IAATgW,EACKxW,EAAMiD,KAIPqT,EAAOC,GAAWC,CAC5B,EAEA9d,EAAQiiB,IAAM,SAASrE,EAAMC,EAASC,EAAMC,GAM1C,OAJAH,EAAO3d,EAAM0M,YAAYiR,GACzBC,EAAU5d,EAAM0M,YAAYkR,GAC5BC,EAAO7d,EAAM0M,YAAYmR,GACzBC,EAAS9d,EAAM0M,YAAYoR,GACvB9d,EAAM2M,WAAWgR,EAAMC,EAASC,EAAMC,GACjCzW,EAAMQ,MAIF,IAATgW,GAKAC,EAAS,GAAKA,EAASD,EAJlBxW,EAAMiD,KAYNqT,EAAOC,IAAYC,GAH5BC,EAASjP,SAASiP,EAAQ,KAGkB,GAAK,GAAMD,GAAQA,EAAO,GACxE,EAEA9d,EAAQkiB,QAAU,SAAS/F,EAAYgG,EAAUC,GAI/C,OAHAjG,EAAalc,EAAMgN,UAAUkP,GAC7BgG,EAAWliB,EAAMgN,UAAUkV,GAC3BC,EAAWniB,EAAM0M,YAAYyV,GACzBniB,EAAM2M,WAAWuP,EAAYgG,EAAUC,GAClC9a,EAAMQ,MAIXsa,GAAY,GAKZjG,EAAagG,GAKbA,EAAWhG,EAAa,QATnB7U,EAAMiD,IAcP,IAAM6X,GAAa,IAAMA,EAAW9hB,EAAS6N,QAAQgO,EAAYgG,GAAU,GACrF,EAEAniB,EAAQqiB,WAAa,SAASlG,EAAYgG,EAAUC,GAIlD,OAHAjG,EAAalc,EAAMgN,UAAUkP,GAC7BgG,EAAWliB,EAAMgN,UAAUkV,GAC3BC,EAAWniB,EAAM0M,YAAYyV,GACzBniB,EAAM2M,WAAWuP,EAAYgG,EAAUC,GAClC9a,EAAMQ,MAIXsa,GAAY,GAKZjG,EAAagG,GAKbA,EAAWhG,EAAa,QATnB7U,EAAMiD,IAcR,KAAO,EAAI6X,EAAW9hB,EAAS6N,QAAQgO,EAAYgG,GAAU,GAAS,IAC/E,EAEAniB,EAAQsiB,WAAa,SAASnG,EAAYgG,EAAUI,GAIlD,OAHApG,EAAalc,EAAMgN,UAAUkP,GAC7BgG,EAAWliB,EAAMgN,UAAUkV,GAC3BI,EAAQtiB,EAAM0M,YAAY4V,GACtBtiB,EAAM2M,WAAWuP,EAAYgG,EAAUI,GAClCjb,EAAMQ,MAIXya,GAAS,GAKTpG,EAAagG,GAKbA,EAAWhG,EAAa,QATnB7U,EAAMiD,IAcQ,KAAf,IAAMgY,IAAgBA,EAAQjiB,EAAS6N,QAAQgO,EAAYgG,GAAU,GAC/E,EAGAniB,EAAQwiB,IAAM,WACZ,MAAM,IAAItU,MAAM,yBAClB,EAEAlO,EAAQyiB,KAAO,SAAShD,EAAQG,EAAOF,GAOrC,GAJAD,EAASxf,EAAMkf,iBAAiBlf,EAAMub,QAAQiE,IAC9CG,EAAQ3f,EAAMyiB,eAAeziB,EAAMub,QAAQoE,IAC3CF,EAAQzf,EAAM0M,YAAY+S,GAEtBzf,EAAM2M,WAAW6S,EAAQG,EAAOF,GAClC,OAAOpY,EAAMQ,MA2Bf,IAvBA,IAAI6X,EAAY,SAASF,EAAQG,EAAOxD,GAGtC,IAFA,IAAIyD,EAAIzD,EAAO,EACXxU,EAAS6X,EAAO,GACX/e,EAAI,EAAGA,EAAI+e,EAAOrX,OAAQ1H,IACjCkH,GAAU6X,EAAO/e,GAAK0L,KAAKyM,IAAIgH,EAAGvf,EAASqN,KAAKiS,EAAMlf,GAAIkf,EAAM,IAAM,KAExE,OAAOhY,CACT,EAGIkY,EAAiB,SAASL,EAAQG,EAAOxD,GAG3C,IAFA,IAAIyD,EAAIzD,EAAO,EACXxU,EAAS,EACJlH,EAAI,EAAGA,EAAI+e,EAAOrX,OAAQ1H,IAAK,CACtC,IAAIqf,EAAOzf,EAASqN,KAAKiS,EAAMlf,GAAIkf,EAAM,IAAM,IAC/ChY,GAAUmY,EAAON,EAAO/e,GAAK0L,KAAKyM,IAAIgH,EAAGE,EAAO,EAClD,CACA,OAAOnY,CACT,EAGIoY,GAAW,EACX7H,GAAW,EACNzX,EAAI,EAAGA,EAAI+e,EAAOrX,OAAQ1H,IAC7B+e,EAAO/e,GAAK,IACdsf,GAAW,GAETP,EAAO/e,GAAK,IACdyX,GAAW,GAKf,IAAK6H,IAAa7H,EAChB,OAAO7Q,EAAMiD,IAKf,IAMI0V,EAASC,EAASC,EANlBC,EADJV,EAAQA,GAAS,GAQbW,GAAW,EACf,GAEEJ,EAAUG,GADVD,EAAcR,EAAUF,EAAQG,EAAOQ,IACFN,EAAeL,EAAQG,EAAOQ,GACnEF,EAAU9T,KAAK6F,IAAIgO,EAAUG,GAC7BA,EAAaH,EACbI,EAAYH,EAVD,OAUuB9T,KAAK6F,IAAIkO,GAVhC,YAWJE,GAGT,OAAOD,CACT,EAEApgB,EAAQ2iB,KAAO,SAASvG,EAAMqD,EAAQG,GAIpC,GAHAxD,EAAOnc,EAAM0M,YAAYyP,GACzBqD,EAASxf,EAAMkf,iBAAiBlf,EAAMub,QAAQiE,IAC9CG,EAAQ3f,EAAMyiB,eAAeziB,EAAMub,QAAQoE,IACvC3f,EAAM2M,WAAWwP,EAAMqD,EAAQG,GACjC,OAAOtY,EAAMQ,MAIf,IADA,IAAIF,EAAS,EACJlH,EAAI,EAAGA,EAAI+e,EAAOrX,OAAQ1H,IACjCkH,GAAU6X,EAAO/e,GAAK0L,KAAKyM,IAAI,EAAIuD,EAAM9b,EAASqN,KAAKiS,EAAMlf,GAAIkf,EAAM,IAAM,KAE/E,OAAOhY,CACT,EAGA5H,EAAQ4iB,MAAQ,WACd,MAAM,IAAI1U,MAAM,2BAClB,EAGAlO,EAAQ6iB,UAAY,WAClB,MAAM,IAAI3U,MAAM,+BAClB,EAGAlO,EAAQ8iB,SAAW,WACjB,MAAM,IAAI5U,MAAM,8BAClB,mBCpjCA,IAAI5G,EAAQ1H,EAAQ,OAGpBI,EAAQ+iB,KAAO,WACb,MAAM,IAAI7U,MAAM,0BAClB,EAEAlO,EAAQgjB,MAAQ,CAAC,EACjBhjB,EAAQgjB,MAAMC,KAAO,SAASC,GAC5B,OAAQA,GACN,KAAK5b,EAAM6b,IAAK,OAAO,EACvB,KAAK7b,EAAM0C,KAAM,OAAO,EACxB,KAAK1C,EAAMQ,MAAO,OAAO,EACzB,KAAKR,EAAM8b,IAAK,OAAO,EACvB,KAAK9b,EAAM+b,KAAM,OAAO,EACxB,KAAK/b,EAAMiD,IAAK,OAAO,EACvB,KAAKjD,EAAMiQ,GAAI,OAAO,EACtB,KAAKjQ,EAAMgc,KAAM,OAAO,EAE1B,OAAOhc,EAAMiQ,EACf,EAGAvX,EAAQujB,KAAO,WACb,MAAM,IAAIrV,MAAM,0BAClB,EAEAlO,EAAQwjB,QAAU,SAAS1b,GACzB,OAAiB,OAAVA,CACT,EAEA9H,EAAQyjB,SAAW,SAAUrQ,GAC3B,MAAQ,eAAgB9C,KAAK8C,EAC/B,EAEApT,EAAQ0jB,MAAQ,SAAS5b,GACvB,MAAQ,CAACR,EAAMQ,MAAOR,EAAM8b,IAAK9b,EAAM0C,KAAM1C,EAAMiD,IAAKjD,EAAM+b,KAAM/b,EAAM6b,KAAMjM,QAAQpP,IAAU,GAC9E,kBAAVA,IAAuB6B,MAAM7B,KAAW6b,SAAS7b,GAC7D,EAEA9H,EAAQ4jB,QAAU,SAAS9b,GACzB,OAAO9H,EAAQ0jB,MAAM5b,IAAUA,IAAUR,EAAMiQ,EACjD,EAEAvX,EAAQ6jB,OAAS,SAASzQ,GACxB,QAAuC,EAA/BhH,KAAKqB,MAAMrB,KAAK6F,IAAImB,IAC9B,EAGApT,EAAQ8jB,UAAY,WAClB,MAAM,IAAI5V,MAAM,+BAClB,EAEAlO,EAAQ+jB,UAAY,SAASjc,GAC3B,OAAiB,IAAVA,IAA4B,IAAVA,CAC3B,EAEA9H,EAAQgkB,KAAO,SAASlc,GACtB,OAAOA,IAAUR,EAAMiQ,EACzB,EAEAvX,EAAQikB,UAAY,SAASnc,GAC3B,MAAyB,kBAAXA,CAChB,EAEA9H,EAAQkkB,SAAW,SAASpc,GAC1B,MAAyB,kBAAXA,IAAwB6B,MAAM7B,IAAU6b,SAAS7b,EACjE,EAEA9H,EAAQmkB,MAAQ,SAAS/Q,GACvB,SAAuC,EAA/BhH,KAAKqB,MAAMrB,KAAK6F,IAAImB,IAC9B,EAGApT,EAAQokB,MAAQ,WACd,MAAM,IAAIlW,MAAM,2BAClB,EAEAlO,EAAQqkB,OAAS,SAASvc,GACxB,MAAyB,kBAAXA,CAChB,EAEA9H,EAAQskB,EAAI,SAASxc,GACnB,OAAIiI,KAAKmU,SAASpc,GACTA,EAELA,aAAiBsD,KACZtD,EAAMgU,WAED,IAAVhU,EACK,GAEK,IAAVA,EACK,EAELiI,KAAK6T,QAAQ9b,GACRA,EAEF,CACT,EAEA9H,EAAQukB,GAAK,WACX,OAAOjd,EAAMiQ,EACf,EAIAvX,EAAQwkB,MAAQ,WACd,MAAM,IAAItW,MAAM,2BAClB,EAGAlO,EAAQykB,OAAS,WACf,MAAM,IAAIvW,MAAM,4BAClB,EAEAlO,EAAQijB,KAAO,SAASnb,GACtB,OAAIiI,KAAKmU,SAASpc,GACT,EAELiI,KAAKsU,OAAOvc,GACP,EAELiI,KAAKgU,UAAUjc,GACV,EAELiI,KAAK6T,QAAQ9b,GACR,GAEL0I,MAAMkU,QAAQ5c,GACT,QADT,CAGF,mBCpIA,IAAIR,EAAQ1H,EAAQ,OAChBK,EAAQL,EAAQ,OAChB+kB,EAAc/kB,EAAQ,OAE1BI,EAAQ4kB,IAAM,WAGZ,IAFA,IAAIrJ,EAAOtb,EAAMub,QAAQX,WACrBjT,EAASN,EAAMQ,MACVpH,EAAI,EAAGA,EAAI6a,EAAKnT,OAAQ1H,IAAK,CACpC,GAAI6a,EAAK7a,aAAcwN,MACrB,OAAOqN,EAAK7a,QAEE6K,IAAZgQ,EAAK7a,IAAgC,OAAZ6a,EAAK7a,IAAkC,kBAAZ6a,EAAK7a,KAGzDkH,IAAWN,EAAMQ,QACnBF,GAAS,GAEN2T,EAAK7a,KACRkH,GAAS,GAEb,CACA,OAAOA,CACT,EAEA5H,EAAQ6kB,OAAS,WACf,GAAIhK,UAAUzS,OAAS,EACrB,OAAOd,EAAMiQ,GAGf,IAAI/N,EAAQqR,UAAU,GACtB,OAAIrR,EAAQ,GAAKA,EAAQ,KAIrBqR,UAAUzS,OAASoB,EAAQ,EAHtBlC,EAAMQ,MAOR+S,UAAUrR,EACnB,EAEAxJ,EAAQ8kB,MAAQ,WACd,OAAO,CACT,EAEA9kB,EAAQ+kB,GAAK,SAASzU,EAAM0U,EAAYC,GACtC,OAAI3U,aAAgBpC,MACXoC,QAGU/E,KADnByZ,IAAanK,UAAUzS,QAAU,IAAI4c,IACU,OAAfA,IAC9BA,EAAa,QAGSzZ,KADxB0Z,EAAuC,IAArBpK,UAAUzS,QAAe6c,IACc,OAApBA,IACnCA,EAAkB,GAEb3U,EAAO0U,EAAaC,EAC7B,EAEAjlB,EAAQklB,IAAM,WACZ,IAAK,IAAIxkB,EAAI,EAAGA,EAAIma,UAAUzS,OAAS,EAAG1H,IACxC,GAAIma,UAAc,EAAJna,GACZ,OAAOma,UAAc,EAAJna,EAAQ,GAG7B,OAAO4G,EAAMiQ,EACf,EAEAvX,EAAQmlB,QAAU,SAASrd,EAAOsd,GAChC,OAAIT,EAAYf,QAAQ9b,GACfsd,EAEFtd,CACT,EAEA9H,EAAQqlB,KAAO,SAASvd,EAAOwd,GAC7B,OAAOxd,IAAUR,EAAMiQ,GAAK+N,EAAcxd,CAC5C,EAEA9H,EAAQulB,IAAM,SAASC,GACrB,MAAuB,kBAAZA,EACFle,EAAMQ,MAEX0d,aAAmBtX,MACdsX,GAEDA,CACV,EAEAxlB,EAAQylB,GAAK,WAGX,IAFA,IAAIlK,EAAOtb,EAAMub,QAAQX,WACrBjT,EAASN,EAAMQ,MACVpH,EAAI,EAAGA,EAAI6a,EAAKnT,OAAQ1H,IAAK,CACpC,GAAI6a,EAAK7a,aAAcwN,MACrB,OAAOqN,EAAK7a,QAEE6K,IAAZgQ,EAAK7a,IAAgC,OAAZ6a,EAAK7a,IAAkC,kBAAZ6a,EAAK7a,KAGzDkH,IAAWN,EAAMQ,QACnBF,GAAS,GAEP2T,EAAK7a,KACPkH,GAAS,GAEb,CACA,OAAOA,CACT,EAEA5H,EAAQ0lB,KAAO,WACb,OAAO,CACT,EAEA1lB,EAAQ2lB,IAAM,WAGZ,IAFA,IAAIpK,EAAOtb,EAAMub,QAAQX,WACrBjT,EAASN,EAAMQ,MACVpH,EAAI,EAAGA,EAAI6a,EAAKnT,OAAQ1H,IAAK,CACpC,GAAI6a,EAAK7a,aAAcwN,MACrB,OAAOqN,EAAK7a,QAEE6K,IAAZgQ,EAAK7a,IAAgC,OAAZ6a,EAAK7a,IAAkC,kBAAZ6a,EAAK7a,KAGzDkH,IAAWN,EAAMQ,QACnBF,EAAS,GAEP2T,EAAK7a,IACPkH,IAEJ,CACA,OAAIA,IAAWN,EAAMQ,MACZF,KAE8B,EAA/BwE,KAAKqB,MAAMrB,KAAK6F,IAAIrK,IAC9B,EAEA5H,EAAQ4lB,OAAS,WACf,IAAIhe,EAEJ,GAAIiT,UAAUzS,OAAS,EAAI,CACzB,IAAIyd,EAAchL,UAAU,GACxBiL,EAAOjL,UAAUzS,OAAS,EAC1B2d,EAAc3Z,KAAKqB,MAAMqY,EAAO,GAChCE,GAAkB,EAClBC,EAAmBH,EAAO,IAAM,EAChCI,EAAgBJ,EAAO,IAAM,EAAI,KAAOjL,UAAUA,UAAUzS,OAAS,GAEzE,GAAI2d,EACF,IAAK,IAAIvc,EAAQ,EAAGA,EAAQuc,EAAavc,IACvC,GAAIqc,IAAgBhL,UAAkB,EAARrR,EAAY,GAAI,CAC5C5B,EAASiT,UAAkB,EAARrR,EAAY,GAC/Bwc,GAAkB,EAClB,KACF,CAICA,IACHpe,EAASqe,EAAmBC,EAAgB5e,EAAMiQ,GAEtD,MACE3P,EAASN,EAAMQ,MAGjB,OAAOF,CACT,mBCtKA,IAAIN,EAAQ1H,EAAQ,OAChBK,EAAQL,EAAQ,OAEpBI,EAAQmmB,MAAQ,SAAUC,EAAaC,EAAaC,GAClD,IAAKF,IAAgBC,EACnB,OAAO/e,EAAMiQ,GAMf,GAHyB,IAArBsD,UAAUzS,SACZke,EAAY,KAERD,aAAuB7V,OAC3B,OAAOlJ,EAAMiQ,GAKf,GAFA8O,EAAcpmB,EAAMub,QAAQ6K,IAET,IAAfC,GAAkC,IAAdA,GAAiC,IAAdA,EACzC,OAAOhf,EAAMiQ,GAIf,IAFA,IAAI/N,EACA+c,EACKC,EAAM,EAAGA,EAAMH,EAAYje,OAAQoe,IAC1C,GAAkB,IAAdF,EAAiB,CACnB,GAAID,EAAYG,KAASJ,EACvB,OAAOI,EAAM,EACJH,EAAYG,GAAOJ,IACvBG,EAGMF,EAAYG,GAAOD,IAC5B/c,EAAQgd,EAAM,EACdD,EAAaF,EAAYG,KAJzBhd,EAAQgd,EAAM,EACdD,EAAaF,EAAYG,IAM/B,MAAO,GAAkB,IAAdF,GACT,GAA2B,kBAAhBF,GAET,GADAA,EAAcA,EAAYrN,QAAQ,MAAO,KACrCsN,EAAYG,GAAKpO,cAAcqO,MAAML,EAAYhO,eACnD,OAAOoO,EAAM,OAGf,GAAIH,EAAYG,KAASJ,EACvB,OAAOI,EAAM,OAGZ,IAAmB,IAAfF,EAAkB,CAC3B,GAAID,EAAYG,KAASJ,EACvB,OAAOI,EAAM,EACJH,EAAYG,GAAOJ,IACvBG,EAGMF,EAAYG,GAAOD,IAC5B/c,EAAQgd,EAAM,EACdD,EAAaF,EAAYG,KAJzBhd,EAAQgd,EAAM,EACdD,EAAaF,EAAYG,IAM/B,CAGF,OAAOhd,GAAgBlC,EAAMiQ,EAC/B,EAEAvX,EAAQ0mB,QAAU,SAAUC,EAAQC,EAAOpd,EAAOqd,GAChD,IAAKD,IAAUpd,EACb,OAAOlC,EAAMiQ,GAGfsP,IAAgC,IAAhBA,IAAqC,IAAhBA,GAIrC,IAHA,IAAIjf,EAASN,EAAMiQ,GACfuP,EAAoC,kBAAXH,EACzBI,GAAiB,EACZrmB,EAAI,EAAGA,EAAIkmB,EAAMxe,OAAQ1H,IAAK,CACrC,IAAIsmB,EAAMJ,EAAMlmB,GAEhB,GAAIsmB,EAAI,KAAOL,EAAQ,CACrB/e,EAAU4B,EAASwd,EAAI5e,OAAS,EAAK4e,EAAIxd,EAAQ,GAAKlC,EAAM8b,IAC5D,KACF,EAAY2D,IAAoBD,GAAkBD,GAAeG,EAAI,IAAML,GACxEE,GAAiC,kBAAXG,EAAI,IAAmBA,EAAI,GAAGC,cAAcN,GAAU,KAC7E/e,EAAU4B,EAASwd,EAAI5e,OAAS,EAAK4e,EAAIxd,EAAQ,GAAKlC,EAAM8b,KAG1D0D,GAAkBE,EAAI,GAAKL,IAC7BI,GAAiB,EAErB,CAEA,OAAOnf,CACT,EAEA5H,EAAQknB,QAAU,SAAUP,EAAQC,EAAOpd,EAAOqd,GAChD,OAAO7mB,EAAQ0mB,QAAQC,EAAQ1mB,EAAMknB,UAAUP,GAAQpd,EAAOqd,EAChE,EAEA7mB,EAAQonB,OAAS,SAAUC,EAAiB1f,EAAO2f,GACjD3f,EAAQ1H,EAAMub,QAAQ7T,GACtB2f,EAAcrnB,EAAMub,QAAQ8L,GAI5B,IAHA,IAAIR,EAA6C,kBAApBO,EACzBzf,EAASN,EAAMiQ,GAEV7W,EAAI,EAAGA,EAAIiH,EAAMS,OAAQ1H,IAAK,CACrC,GAAIiH,EAAMjH,KAAO2mB,EACf,OAAOC,EAAY5mB,GACd,GAAKomB,GAAkBnf,EAAMjH,IAAM2mB,GACnB,kBAAb1f,EAAMjH,IAAmBiH,EAAMjH,GAAGumB,cAAcI,GAAmB,EAC3Ezf,EAAS0f,EAAY5mB,QAChB,GAAKomB,GAAkBnf,EAAMjH,GAAK2mB,EACvC,OAAOzf,CAEX,CAEA,OAAOA,CACT,EAEA5H,EAAQunB,MAAQ,SAAUC,EAAWC,EAAWC,GAC9C,IAAIC,EAAY1nB,EAAM2nB,SAASJ,EAAWC,EAAWC,GACrD,GAAIC,EACF,OAAOA,EAGT,IAAKnX,MAAMkU,QAAQ8C,GACjB,OAAOlgB,EAAMQ,MAGf,IAAI+f,EAAsBL,EAAUpf,OAAS,IAAMoI,MAAMkU,QAAQ8C,EAAU,IAU3E,OARIK,IAAwBH,GAC1BA,EAAeD,EACfA,EAAY,IAEZC,EAAeA,GAA8B,EAC7CD,EAAYA,GAAwB,GAGlCC,EAAe,GAAKD,EAAY,EAC3BngB,EAAMQ,MAGX+f,GAAqC,IAAdJ,GAAmBC,GAAgBF,EAAUpf,OAC/Dof,EAAUE,EAAe,GACvBD,GAAaD,EAAUpf,QAAUsf,GAAgBF,EAAUC,EAAY,GAAGrf,OAC5Eof,EAAUC,EAAY,GAAGC,EAAe,GAG1CpgB,EAAM8b,GACf,mBCnJA,IAAInjB,EAAQL,EAAQ,OAChB0H,EAAQ1H,EAAQ,OAChBQ,EAAcR,EAAQ,OACtB+kB,EAAc/kB,EAAQ,OACtB6H,EAAiB7H,EAAQ,OAE7BI,EAAQ8nB,IAAM,SAAS1U,GAErB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEIhH,KAAK6F,IAAImB,EAGxB,EAEApT,EAAQ+nB,KAAO,SAAS3U,GAEtB,IADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACpB,OAAOkF,EAET,IAAIxL,EAASwE,KAAK4b,KAAK5U,GAMvB,OAJIzJ,MAAM/B,KACRA,EAASN,EAAMiD,KAGV3C,CACT,EAEA5H,EAAQioB,MAAQ,SAAS7U,GAEvB,IADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACpB,OAAOkF,EAET,IAAIxL,EAASwE,KAAKmO,IAAInH,EAAShH,KAAKwM,KAAKxF,EAASA,EAAS,IAM3D,OAJIzJ,MAAM/B,KACRA,EAASN,EAAMiD,KAGV3C,CACT,EAEA5H,EAAQkoB,KAAO,SAAS9U,GAEtB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEIhH,KAAKiN,KAAK,EAAIjG,EAG7B,EAEApT,EAAQmoB,MAAQ,SAAS/U,GAEvB,IADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACpB,OAAOkF,EAET,IAAIxL,EAAS,GAAMwE,KAAKmO,KAAKnH,EAAS,IAAMA,EAAS,IAMrD,OAJIzJ,MAAM/B,KACRA,EAASN,EAAMiD,KAGV3C,CACT,EAGA5H,EAAQooB,UAAY,SAASC,EAAcC,EAASC,EAAMC,GAGxD,GAFAH,EAAepoB,EAAM0M,YAAY0b,GACjCC,EAAUroB,EAAM0M,YAAY0b,GACxBpoB,EAAM2M,WAAWyb,EAAcC,GACjC,OAAOhhB,EAAMQ,MAEf,OAAQugB,GACN,KAAK,EACH,OAAOjoB,EAAYqoB,QAAQF,GAC7B,KAAK,EACH,OAAOnoB,EAAY+J,MAAMoe,GAC3B,KAAK,EACH,OAAOnoB,EAAYiK,OAAOke,GAC5B,KAAK,EACH,OAAOnoB,EAAYsoB,IAAIH,GACzB,KAAK,EACH,OAAOnoB,EAAYuoB,IAAIJ,GACzB,KAAK,EACH,OAAOvoB,EAAQ4oB,QAAQL,GACzB,KAAK,EACH,OAAOnoB,EAAYiG,MAAM9D,EAAEgmB,GAC7B,KAAK,EACH,OAAOnoB,EAAYiG,MAAMjE,EAAEmmB,GAC7B,KAAK,EACH,OAAOvoB,EAAQgL,IAAIud,GACrB,KAAK,GACH,OAAOnoB,EAAYyG,IAAItE,EAAEgmB,GAC3B,KAAK,GACH,OAAOnoB,EAAYyG,IAAIzE,EAAEmmB,GAC3B,KAAK,GACH,OAAOnoB,EAAYyoB,OAAON,GAC5B,KAAK,GACH,OAAOnoB,EAAY+D,KAAKC,KAAKmkB,GAC/B,KAAK,GACH,OAAOnoB,EAAY0oB,MAAMP,EAAMC,GACjC,KAAK,GACH,OAAOpoB,EAAY2oB,MAAMR,EAAMC,GACjC,KAAK,GACH,OAAOpoB,EAAY6E,WAAWI,IAAIkjB,EAAMC,GAC1C,KAAK,GACH,OAAOpoB,EAAYuF,SAASN,IAAIkjB,EAAMC,GACxC,KAAK,GACH,OAAOpoB,EAAY6E,WAAWC,IAAIqjB,EAAMC,GAC1C,KAAK,GACH,OAAOpoB,EAAYuF,SAAST,IAAIqjB,EAAMC,GAE5C,EAEAxoB,EAAQgpB,OAAS,SAAS/V,GACxB,QAAa1H,IAAT0H,GAA+B,OAATA,EACxB,OAAO,EAET,GAAIA,aAAgB/E,MAClB,OAAO+E,EAGT,IAAK,6DAA6D3C,KAAK2C,GACrE,OAAO3L,EAAMQ,MAEf,IAAI+X,EAAI,EAkBR,OAjBA5M,EAAK8F,QAAQ,gCAAgC,SAASrY,GACpDmf,GAAK,CACHxJ,EAAG,IACH4S,GAAI,IACJC,EAAG,IACHC,GAAI,IACJC,EAAG,IACHC,GAAI,GACJC,EAAG,GACHC,GAAI,GACJC,EAAG,GACHC,GAAI,EACJC,EAAG,EACHC,GAAI,EACJC,EAAG,GACHlpB,EACJ,IACOmf,CACT,EAEA7f,EAAQ6pB,KAAO,SAASzW,GAEtB,IADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACpB,OAAOkF,EAET,IAAIxL,EAASwE,KAAK0d,KAAK1W,GAMvB,OAJIzJ,MAAM/B,KACRA,EAASN,EAAMiD,KAGV3C,CACT,EAEA5H,EAAQ+pB,MAAQ,SAAS3W,GAEvB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEFhH,KAAKmO,IAAInH,EAAShH,KAAKwM,KAAKxF,EAASA,EAAS,GACvD,EAEApT,EAAQgqB,KAAO,SAAS5W,GAEtB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEFhH,KAAKiN,KAAKjG,EACnB,EAEApT,EAAQiqB,MAAQ,SAASC,EAAUC,GACjCD,EAAWjqB,EAAM0M,YAAYud,GAC7BC,EAAWlqB,EAAM0M,YAAYwd,GAC7B,IAAIvC,EAAW3nB,EAAM2nB,SAASsC,EAAUC,GACxC,OAAIvC,GAGGxb,KAAKge,MAAMF,EAAUC,EAC9B,EAEAnqB,EAAQqqB,MAAQ,SAASjX,GAEvB,IADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACpB,OAAOkF,EAET,IAAIxL,EAASwE,KAAKmO,KAAK,EAAInH,IAAW,EAAIA,IAAW,EAMrD,OAJIzJ,MAAM/B,KACRA,EAASN,EAAMiD,KAGV3C,CACT,EAEA5H,EAAQsqB,KAAO,SAASlX,EAAQmX,EAAOC,GACrCpX,EAASnT,EAAM0M,YAAYyG,GAC3BmX,EAAQtqB,EAAM0M,YAAY4d,GAC1BC,EAAavqB,EAAM0M,YAAY6d,GAC/B,IAAI5C,EAAW3nB,EAAM2nB,SAASxU,EAAQmX,EAAOC,GAC7C,GAAI5C,EACF,OAAOA,EAET,GAAc,IAAV2C,EACF,OAAOjjB,EAAMiD,IAEf,IAAI3C,EAASwL,EAAOY,SAASuW,GAC7B,OAAO,IAAI/Z,MAAMpE,KAAKqe,IAAID,EAAa,EAAI5iB,EAAOQ,OAAQ,IAAIsiB,KAAK,KAAO9iB,CAC5E,EAEA5H,EAAQkB,QAAU,SAASkS,EAAQuX,EAAcC,GAC/CxX,EAASnT,EAAM0M,YAAYyG,GAC3BuX,EAAe1qB,EAAM0M,YAAYge,GACjCC,EAAO3qB,EAAM0M,YAAYie,GACzB,IAAIhD,EAAW3nB,EAAM2nB,SAASxU,EAAQuX,EAAcC,GACpD,GAAIhD,EACF,OAAOA,EAET,GAAqB,IAAjB+C,EACF,OAAO,EAETA,EAAeve,KAAK6F,IAAI0Y,GACxB,IAAIE,GAAaze,KAAKqB,MAAMrB,KAAKmO,IAAIoQ,GAAgBve,KAAKmO,IAAI,KAC9D,OAAInH,GAAU,EACLpT,EAAQ8qB,MAAM1e,KAAKC,KAAK+G,EAASuX,GAAgBA,EAAcE,GAEzD,IAATD,GACM5qB,EAAQ8qB,MAAM1e,KAAKqB,MAAMrB,KAAK6F,IAAImB,GAAUuX,GAAgBA,EAAcE,IAE1E7qB,EAAQ8qB,MAAM1e,KAAKC,KAAKD,KAAK6F,IAAImB,GAAUuX,GAAgBA,EAAcE,EAGvF,EAEA7qB,EAAQkB,QAAQE,KAAOpB,EAAQkB,QAE/BlB,EAAQkB,QAAQK,QAAUvB,EAAQkB,QAElClB,EAAQ+qB,OAAS,SAAS3X,EAAQ4X,GAChC5X,EAASnT,EAAM0M,YAAYyG,GAC3B4X,EAAgB/qB,EAAM0M,YAAYqe,GAClC,IAAIpD,EAAW3nB,EAAM2nB,SAASxU,EAAQ4X,GACtC,OAAIpD,IAGAxU,EAAS4X,EACJ1jB,EAAMiD,IAERvK,EAAQirB,KAAK7X,IAAWpT,EAAQirB,KAAKD,GAAiBhrB,EAAQirB,KAAK7X,EAAS4X,IACrF,EAEAhrB,EAAQkrB,QAAU,SAAS9X,EAAQ4X,GACjC5X,EAASnT,EAAM0M,YAAYyG,GAC3B4X,EAAgB/qB,EAAM0M,YAAYqe,GAClC,IAAIpD,EAAW3nB,EAAM2nB,SAASxU,EAAQ4X,GACtC,OAAIpD,IAGAxU,EAAS4X,EACJ1jB,EAAMiD,IAEI,IAAX6I,GAAkC,IAAlB4X,EAAuB,EAAIhrB,EAAQ+qB,OAAO3X,EAAS4X,EAAgB,EAAG5X,EAAS,GACzG,EAEApT,EAAQmrB,IAAM,SAAS/X,GAErB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEFhH,KAAKoN,IAAIpG,EAClB,EAEApT,EAAQorB,KAAO,SAAShY,GAEtB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,GAEDhH,KAAKqN,IAAIrG,GAAUhH,KAAKqN,KAAKrG,IAAW,CAClD,EAEApT,EAAQqrB,IAAM,SAASjY,GAErB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEM,IAAXA,EACK9L,EAAM0C,KAER,EAAIoC,KAAKkf,IAAIlY,EACtB,EAEApT,EAAQurB,KAAO,SAASnY,GAEtB,IADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACpB,OAAOkF,EAET,GAAe,IAAXA,EACF,OAAO9L,EAAM0C,KAEf,IAAIwhB,EAAKpf,KAAKqN,IAAI,EAAIrG,GACtB,OAAQoY,EAAK,IAAMA,EAAK,EAC1B,EAEAxrB,EAAQyrB,IAAM,SAASrY,GAErB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEM,IAAXA,EACK9L,EAAM0C,KAER,EAAIoC,KAAKsN,IAAItG,EACtB,EAEApT,EAAQ0rB,KAAO,SAAStY,GAEtB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEM,IAAXA,EACK9L,EAAM0C,KAER,GAAKoC,KAAKqN,IAAIrG,GAAUhH,KAAKqN,KAAKrG,GAC3C,EAEApT,EAAQ2rB,QAAU,SAASvY,EAAQmX,GACjC,GAAI1P,UAAUzS,OAAS,EACrB,OAAOd,EAAMQ,MAGfsL,EAASnT,EAAM0M,YAAYyG,GAC3BmX,EAAQtqB,EAAM0M,YAAY4d,GAC1B,IAAI3C,EAAW3nB,EAAM2nB,SAASxU,EAAQmX,GACtC,OAAI3C,IAGU,IAAV2C,EACKjjB,EAAMiD,IAGRuE,SAASsE,EAAQmX,GAC1B,EAEAvqB,EAAQ4rB,QAAU,SAASxY,GAEzB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEO,IAATA,EAAehH,KAAKgN,EAC7B,EAEApZ,EAAQ6rB,KAAO,SAASzY,GAEtB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEFpT,EAAQkB,QAAQkS,GAAS,GAAI,EACtC,EAEApT,EAAQ8rB,IAAM,SAAS1Y,GACrB,OAAIyH,UAAUzS,OAAS,EACdd,EAAMiQ,GAEXsD,UAAUzS,OAAS,EACdd,EAAMA,OAGf8L,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAGTA,EAAShH,KAAKqN,IAAIrG,EAGpB,EAEA,IAAI2Y,EAAgB,GACpB/rB,EAAQirB,KAAO,SAAS7X,GAEtB,IADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACpB,OAAOkF,EAET,IAAI/J,EAAI+C,KAAKqB,MAAM2F,GACnB,OAAU,IAAN/J,GAAiB,IAANA,EACN,GACE0iB,EAAc1iB,GAAK,IAG5B0iB,EAAc1iB,GAAKrJ,EAAQirB,KAAK5hB,EAAI,GAAKA,GAFlC0iB,EAAc1iB,GAKzB,EAEArJ,EAAQgsB,WAAa,SAAS5Y,GAE5B,IADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACpB,OAAOkF,EAET,IAAI/J,EAAI+C,KAAKqB,MAAM2F,GACnB,OAAI/J,GAAK,EACA,EAEAA,EAAIrJ,EAAQgsB,WAAW3iB,EAAI,EAEtC,EAEArJ,EAAQoD,MAAQ,SAASgQ,EAAQuX,GAC/BvX,EAASnT,EAAM0M,YAAYyG,GAC3BuX,EAAe1qB,EAAM0M,YAAYge,GACjC,IAAI/C,EAAW3nB,EAAM2nB,SAASxU,EAAQuX,GACtC,GAAI/C,EACF,OAAOA,EAET,GAAqB,IAAjB+C,EACF,OAAO,EAGT,KAAMvX,GAAU,GAAKuX,EAAe,MAAQvX,GAAU,GAAKuX,EAAe,GACxE,OAAOrjB,EAAMiD,IAGfogB,EAAeve,KAAK6F,IAAI0Y,GACxB,IAAIE,GAAaze,KAAKqB,MAAMrB,KAAKmO,IAAIoQ,GAAgBve,KAAKmO,IAAI,KAC9D,OAAInH,GAAU,EACLpT,EAAQ8qB,MAAM1e,KAAKqB,MAAM2F,EAASuX,GAAgBA,EAAcE,IAE/D7qB,EAAQ8qB,MAAM1e,KAAKC,KAAKD,KAAK6F,IAAImB,GAAUuX,GAAeE,EAEtE,EAGA7qB,EAAQoD,MAAMhC,KAAO,SAASgS,EAAQuX,EAAcC,GAClD,GAAID,aAAwBzc,MAC1B,OAAOyc,EAETA,OAAiCpf,IAAjBof,EAA8B,EAAIA,EAElDvX,EAASnT,EAAM0M,YAAYyG,GAC3BuX,EAAe1qB,EAAM0M,YAAYge,GACjCC,EAAO3qB,EAAM0M,YAAYie,GACzB,IAAIhD,EAAW3nB,EAAM2nB,SAASxU,EAAQuX,EAAcC,GACpD,GAAIhD,EACF,OAAOA,EAET,GAAqB,IAAjB+C,EACF,OAAO,EAGTA,EAAeA,EAAeve,KAAK6F,IAAI0Y,GAAgB,EACvD,IAAIE,GAAaze,KAAKqB,MAAMrB,KAAKmO,IAAIoQ,GAAgBve,KAAKmO,IAAI,KAC9D,OAAInH,GAAU,EACLpT,EAAQ8qB,MAAM1e,KAAKqB,MAAM2F,EAASuX,GAAgBA,EAAcE,GACrD,IAATD,QAAuBrf,IAATqf,GACf5qB,EAAQ8qB,MAAM1e,KAAKC,KAAKD,KAAK6F,IAAImB,GAAUuX,GAAgBA,EAAcE,IAE3E7qB,EAAQ8qB,MAAM1e,KAAKqB,MAAMrB,KAAK6F,IAAImB,GAAUuX,GAAgBA,EAAcE,EACpF,EAGA7qB,EAAQoD,MAAM7B,QAAUvB,EAAQoD,MAAMhC,KAGtCpB,EAAQisB,IAAM,WACZ,IAAIC,EAAQjsB,EAAMkf,iBAAiBlf,EAAMub,QAAQX,YACjD,GAAIqR,aAAiBhe,MACnB,OAAOge,EAKT,IAHA,IAAI7iB,EAAI6iB,EAAM9jB,OACV+jB,EAAKD,EAAM,GACX5Y,EAAI6Y,EAAK,GAAKA,EAAKA,EACdzrB,EAAI,EAAGA,EAAI2I,EAAG3I,IAAK,CAG1B,IAFA,IAAI0rB,EAAKF,EAAMxrB,GACXiW,EAAIyV,EAAK,GAAKA,EAAKA,EAChB9Y,GAAKqD,GACNrD,EAAIqD,EACNrD,GAAKqD,EAELA,GAAKrD,EAGTA,GAAKqD,CACP,CACA,OAAOrD,CACT,EAGAtT,EAAQqsB,IAAM,SAASjZ,GAErB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEFhH,KAAKqB,MAAM2F,EACpB,EAGApT,EAAQssB,IAAM,CACZprB,QAASlB,EAAQkB,SAGnBlB,EAAQusB,IAAM,WAEZ,IAAIC,EAAIvsB,EAAMkf,iBAAiBlf,EAAMub,QAAQX,YAC7C,GAAI2R,aAAate,MACf,OAAOse,EAET,IAAK,IAAI9rB,EAAGgI,EAAGW,EAAGwH,EAAGgP,EAAI,OACFtU,KAAjBlC,EAAImjB,EAAEC,QAAuB,CACjC,GAAU,IAANpjB,EACF,OAAO,EAET,KAAOA,EAAI,GAAG,CACZ,GAAIA,EAAI,EAAG,CACT,IAAK3I,EAAI,EAAGgI,EAAI0D,KAAKqB,MAAMrB,KAAKwM,KAAKvP,IAAK3I,GAAKgI,GAAKW,EAAI3I,EAAGA,GAAK,GAGhEmQ,EAAKnQ,GAAKgI,EAAKhI,EAAI2I,CACrB,MACEwH,EAAI,EAEN,IAAKxH,GAAKwH,EAAGgP,GAAKhP,EAAGnQ,EAAI8rB,EAAEpkB,OAAQ1H,EAC7B8rB,IAAI9rB,GAAKmQ,IAAO,GAAqB,KAAf2b,EAAE9rB,IAAMmQ,IAAY2b,EAAEE,OAAOhsB,EAAG,IAG9D,CACF,CACA,OAAOmf,CACT,EAEA7f,EAAQ2sB,GAAK,SAASvZ,GAEpB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEM,IAAXA,EACK9L,EAAMiD,IAER6B,KAAKmO,IAAInH,EAClB,EAEApT,EAAQ0e,KAAO,WACb,OAAOtS,KAAKmO,IAAI,GAClB,EAEAva,EAAQ4e,IAAM,WACZ,OAAOxS,KAAKmO,IAAI,EAClB,EAEAva,EAAQ4sB,OAAS,WACf,OAAOxgB,KAAKwgB,MACd,EAEA5sB,EAAQ6sB,MAAQ,WACd,OAAOzgB,KAAKygB,KACd,EAEA7sB,EAAQ8sB,IAAM,SAAS1Z,EAAQ2Z,GAC7B3Z,EAASnT,EAAM0M,YAAYyG,GAC3B2Z,EAAO9sB,EAAM0M,YAAYogB,GACzB,IAAInF,EAAW3nB,EAAM2nB,SAASxU,EAAQ2Z,GACtC,OAAInF,IAGW,IAAXxU,GAAyB,IAAT2Z,EACXzlB,EAAMiD,IAER6B,KAAKmO,IAAInH,GAAUhH,KAAKmO,IAAIwS,GACrC,EAEA/sB,EAAQgtB,MAAQ,SAAS5Z,GAEvB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEM,IAAXA,EACK9L,EAAMiD,IAER6B,KAAKmO,IAAInH,GAAUhH,KAAKmO,IAAI,GACrC,EAEAva,EAAQitB,IAAM,SAASC,EAAUC,GAC/BD,EAAWjtB,EAAM0M,YAAYugB,GAC7BC,EAAUltB,EAAM0M,YAAYwgB,GAC5B,IAAIvF,EAAW3nB,EAAM2nB,SAASsF,EAAUC,GACxC,GAAIvF,EACF,OAAOA,EAET,GAAgB,IAAZuF,EACF,OAAO7lB,EAAM0C,KAEf,IAAIojB,EAAUhhB,KAAK6F,IAAIib,EAAWC,GAElC,OADAC,EAAUF,EAAW,EAAIC,EAAUC,EAAUA,EACrCD,EAAU,EAAKC,GAAWA,CACpC,EAEAptB,EAAQqtB,OAAS,SAASja,EAAQka,GAChCla,EAASnT,EAAM0M,YAAYyG,GAC3Bka,EAAWrtB,EAAM0M,YAAY2gB,GAC7B,IAAI1F,EAAW3nB,EAAM2nB,SAASxU,EAAQka,GACtC,OAAI1F,IAGAxU,EAASka,IAAa,EACjB,EAELla,EAASka,EAAW,EACfhmB,EAAMiD,IAGR6B,KAAKuE,MAAMyC,EAASka,GAAYA,EACzC,EAEAttB,EAAQutB,YAAc,WACpB,IAAIhS,EAAOtb,EAAMkf,iBAAiBlf,EAAMub,QAAQX,YAChD,GAAIU,aAAgBrN,MAClB,OAAOqN,EAIT,IAFA,IAAIxR,EAAM,EACNojB,EAAU,EACLzsB,EAAI,EAAGA,EAAI6a,EAAKnT,OAAQ1H,IAC/BqJ,GAAOwR,EAAK7a,GACZysB,GAAWntB,EAAQirB,KAAK1P,EAAK7a,IAE/B,OAAOV,EAAQirB,KAAKlhB,GAAOojB,CAC7B,EAEAntB,EAAQwtB,IAAM,SAASpa,GAErB,IADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACpB,OAAOkF,EAET,IAAIqa,EAAOrhB,KAAKC,KAAKD,KAAK6F,IAAImB,IAE9B,OADAqa,EAAe,EAAPA,EAAYA,EAAOA,EAAO,EAC1Bra,GAAU,EAAKqa,GAAQA,CACjC,EAEAztB,EAAQoZ,GAAK,WACX,OAAOhN,KAAKgN,EACd,EAEApZ,EAAQmW,EAAI,WACV,OAAO/J,KAAK+J,CACd,EAEAnW,EAAQ0tB,MAAQ,SAASta,EAAQuL,GAC/BvL,EAASnT,EAAM0M,YAAYyG,GAC3BuL,EAAQ1e,EAAM0M,YAAYgS,GAC1B,IAAIiJ,EAAW3nB,EAAM2nB,SAASxU,EAAQuL,GACtC,GAAIiJ,EACF,OAAOA,EAET,GAAe,IAAXxU,GAA0B,IAAVuL,EAClB,OAAOrX,EAAMiD,IAEf,IAAI3C,EAASwE,KAAKyM,IAAIzF,EAAQuL,GAC9B,OAAIhV,MAAM/B,GACDN,EAAMiD,IAGR3C,CACT,EAEA5H,EAAQ4oB,QAAU,WAChB,IACI+E,EADgB1tB,EAAMub,QAAQX,WACO+S,QAAO,SAAUC,GAAO,YAAetiB,IAARsiB,GAA6B,OAARA,CAAc,IAC3G,GAAoC,IAAhCF,EAAqBvlB,OACvB,OAAO,EAET,IAAImT,EAAOtb,EAAMkf,iBAAiBwO,GAClC,GAAIpS,aAAgBrN,MAClB,OAAOqN,EAGT,IADA,IAAI3T,EAAS,EACJlH,EAAI,EAAGA,EAAI6a,EAAKnT,OAAQ1H,IAC/BkH,GAAU2T,EAAK7a,GAEjB,OAAOkH,CACT,EAEA5H,EAAQ8tB,SAAW,SAASC,EAAWC,GACrCD,EAAY9tB,EAAM0M,YAAYohB,GAC9BC,EAAc/tB,EAAM0M,YAAYqhB,GAChC,IAAIpG,EAAW3nB,EAAM2nB,SAASmG,EAAWC,GACzC,OAAIpG,GAGG9Y,SAASif,EAAYC,EAAa,GAC3C,EAEAhuB,EAAQiuB,QAAU,SAAS7a,GAEzB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEFA,EAAShH,KAAKgN,GAAK,GAC5B,EAEApZ,EAAQkuB,KAAO,WACb,OAAO9hB,KAAK+hB,QACd,EAEAnuB,EAAQouB,YAAc,SAASC,EAAQC,GACrCD,EAASpuB,EAAM0M,YAAY0hB,GAC3BC,EAAMruB,EAAM0M,YAAY2hB,GACxB,IAAI1G,EAAW3nB,EAAM2nB,SAASyG,EAAQC,GACtC,OAAI1G,GAKGyG,EAASjiB,KAAKC,MAAMiiB,EAAMD,EAAS,GAAKjiB,KAAK+hB,UAAY,CAClE,EAGAnuB,EAAQuuB,MAAQ,SAASnb,GAEvB,IADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACpB,OAAOkF,EAQT,IAJA,IAAIob,EAASC,OAAOrb,GAAQ7C,MAAM,IAC9Bme,EAAM,CAAC,GAAI,IAAK,KAAM,MAAO,KAAM,IAAK,KAAM,MAAO,OAAQ,KAAM,GAAI,IAAK,KAAM,MAAO,KAAM,IAAK,KAAM,MAAO,OAAQ,KAAM,GAAI,IAAK,KAAM,MAAO,KAAM,IAAK,KAAM,MAAO,OAAQ,MACrLC,EAAQ,GACRjuB,EAAI,EACDA,KACLiuB,GAASD,GAAKF,EAAO/B,MAAa,GAAJ/rB,IAAY,IAAMiuB,EAElD,OAAO,IAAIne,OAAOge,EAAO9D,KAAK,IAAM,GAAGA,KAAK,KAAOiE,CACrD,EAEA3uB,EAAQ8qB,MAAQ,SAAS1X,EAAQob,GAC/Bpb,EAASnT,EAAM0M,YAAYyG,GAC3Bob,EAASvuB,EAAM0M,YAAY6hB,GAC3B,IAAI5G,EAAW3nB,EAAM2nB,SAASxU,EAAQob,GACtC,OAAI5G,GAGGxb,KAAKuE,MAAMyC,EAAShH,KAAKyM,IAAI,GAAI2V,IAAWpiB,KAAKyM,IAAI,GAAI2V,EAClE,EAEAxuB,EAAQ4uB,UAAY,SAASxb,EAAQob,GACnCpb,EAASnT,EAAM0M,YAAYyG,GAC3Bob,EAASvuB,EAAM0M,YAAY6hB,GAC3B,IAAI5G,EAAW3nB,EAAM2nB,SAASxU,EAAQob,GACtC,OAAI5G,IAGQxU,EAAS,EAAK,GAAK,GAChBhH,KAAKqB,MAAMrB,KAAK6F,IAAImB,GAAUhH,KAAKyM,IAAI,GAAI2V,IAAYpiB,KAAKyM,IAAI,GAAI2V,EACrF,EAEAxuB,EAAQ6uB,QAAU,SAASzb,EAAQob,GACjCpb,EAASnT,EAAM0M,YAAYyG,GAC3Bob,EAASvuB,EAAM0M,YAAY6hB,GAC3B,IAAI5G,EAAW3nB,EAAM2nB,SAASxU,EAAQob,GACtC,OAAI5G,IAGQxU,EAAS,EAAK,GAAK,GAChBhH,KAAKC,KAAKD,KAAK6F,IAAImB,GAAUhH,KAAKyM,IAAI,GAAI2V,IAAYpiB,KAAKyM,IAAI,GAAI2V,EACpF,EAEAxuB,EAAQ8uB,IAAM,SAAS1b,GAErB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEF,EAAIhH,KAAKoN,IAAIpG,EACtB,EAEApT,EAAQ+uB,KAAO,SAAS3b,GAEtB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEF,GAAKhH,KAAKqN,IAAIrG,GAAUhH,KAAKqN,KAAKrG,GAC3C,EAEApT,EAAQgvB,UAAY,SAAS1b,EAAGjK,EAAGkN,EAAG0Y,GAKpC,GAJA3b,EAAIrT,EAAM0M,YAAY2G,GACtBjK,EAAIpJ,EAAM0M,YAAYtD,GACtBkN,EAAItW,EAAM0M,YAAY4J,GACtB0Y,EAAehvB,EAAMkf,iBAAiB8P,GAClChvB,EAAM2M,WAAW0G,EAAGjK,EAAGkN,EAAG0Y,GAC5B,OAAO3nB,EAAMQ,MAGf,IADA,IAAIF,EAASqnB,EAAa,GAAK7iB,KAAKyM,IAAIvF,EAAGjK,GAClC3I,EAAI,EAAGA,EAAIuuB,EAAa7mB,OAAQ1H,IACvCkH,GAAUqnB,EAAavuB,GAAK0L,KAAKyM,IAAIvF,EAAGjK,EAAI3I,EAAI6V,GAElD,OAAO3O,CACT,EAEA5H,EAAQkvB,KAAO,SAAS9b,GAEtB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAELA,EAAS,GACH,EACY,IAAXA,EACF,EAEA,CAEX,EAEApT,EAAQmvB,IAAM,SAAS/b,GAErB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEFhH,KAAKsN,IAAItG,EAClB,EAEApT,EAAQovB,KAAO,SAAShc,GAEtB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,GAEDhH,KAAKqN,IAAIrG,GAAUhH,KAAKqN,KAAKrG,IAAW,CAClD,EAEApT,EAAQqvB,KAAO,SAASjc,GAEtB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAELA,EAAS,EACJ9L,EAAMiD,IAER6B,KAAKwM,KAAKxF,EACnB,EAEApT,EAAQsvB,OAAS,SAASlc,GAExB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEFhH,KAAKwM,KAAKxF,EAAShH,KAAKgN,GACjC,EAEApZ,EAAQuvB,QAAU,WAChB,OAAO,EAAInjB,KAAKwM,KAAK,EACvB,EAEA5Y,EAAQwvB,MAAQ,WACd,OAAOpjB,KAAKwM,KAAK,EACnB,EAEA5Y,EAAQyvB,SAAW,SAASC,EAAenH,GAEzC,IADAmH,EAAgBzvB,EAAM0M,YAAY+iB,cACLxhB,MAC3B,OAAOwhB,EAET,OAAQA,GACN,KAAK,EAuBL,KAAK,IACH,OAAOtvB,EAAYqoB,QAAQF,GAtB7B,KAAK,EAuBL,KAAK,IACH,OAAOnoB,EAAY+J,MAAMoe,GAtB3B,KAAK,EAuBL,KAAK,IACH,OAAOnoB,EAAYiK,OAAOke,GAtB5B,KAAK,EAuBL,KAAK,IACH,OAAOnoB,EAAYsoB,IAAIH,GAtBzB,KAAK,EAuBL,KAAK,IACH,OAAOnoB,EAAYuoB,IAAIJ,GAtBzB,KAAK,EAuBL,KAAK,IACH,OAAOvoB,EAAQ4oB,QAAQL,GAtBzB,KAAK,EAuBL,KAAK,IACH,OAAOnoB,EAAYiG,MAAM9D,EAAEgmB,GAtB7B,KAAK,EAuBL,KAAK,IACH,OAAOnoB,EAAYiG,MAAMjE,EAAEmmB,GAtB7B,KAAK,EAuBL,KAAK,IACH,OAAOvoB,EAAQgL,IAAIud,GAtBrB,KAAK,GAuBL,KAAK,IACH,OAAOnoB,EAAYyG,IAAItE,EAAEgmB,GAtB3B,KAAK,GAuBL,KAAK,IACH,OAAOnoB,EAAYyG,IAAIzE,EAAEmmB,GAG/B,EAEAvoB,EAAQ2vB,IAAM,SAAUC,EAAMC,GAC5B,GAAyB,IAArBhV,UAAUzS,OACZ,OAAOd,EAAMiQ,GAGfqY,EAAO3vB,EAAM0M,YAAYijB,GACzBC,EAAO5vB,EAAM0M,YAAYkjB,GACzB,IAAIjI,EAAW3nB,EAAM2nB,SAASgI,EAAMC,GACpC,OAAIjI,GAIGgI,EAAOC,CAChB,EAEA7vB,EAAQ8vB,MAAQ,SAAUF,EAAMC,GAC9B,GAAyB,IAArBhV,UAAUzS,OACZ,OAAOd,EAAMiQ,GAGfqY,EAAO3vB,EAAM0M,YAAYijB,GACzBC,EAAO5vB,EAAM0M,YAAYkjB,GACzB,IAAIjI,EAAW3nB,EAAM2nB,SAASgI,EAAMC,GACpC,OAAIjI,GAIGgI,EAAOC,CAChB,EAEA7vB,EAAQ+vB,OAAS,SAAU7C,EAAUC,GACnC,GAAyB,IAArBtS,UAAUzS,OACZ,OAAOd,EAAMiQ,GAGf2V,EAAWjtB,EAAM0M,YAAYugB,GAC7BC,EAAUltB,EAAM0M,YAAYwgB,GAC5B,IAAIvF,EAAW3nB,EAAM2nB,SAASsF,EAAUC,GACxC,OAAIvF,IAIY,IAAZuF,EACK7lB,EAAM0C,KAGRkjB,EAAWC,EACpB,EAEAntB,EAAQgwB,SAAW,SAAUC,EAASC,GACpC,GAAyB,IAArBrV,UAAUzS,OACZ,OAAOd,EAAMiQ,GAGf0Y,EAAUhwB,EAAM0M,YAAYsjB,GAC5BC,EAAUjwB,EAAM0M,YAAYujB,GAC5B,IAAItI,EAAW3nB,EAAM2nB,SAASqI,EAASC,GACvC,OAAItI,GAIGqI,EAAUC,CACnB,EAEAlwB,EAAQmwB,GAAK,SAAUP,EAAMC,GAC3B,GAAyB,IAArBhV,UAAUzS,OACZ,OAAOd,EAAMiQ,GAEf,GAAIqY,aAAgB1hB,MAClB,OAAO0hB,EAET,GAAIC,aAAgB3hB,MAClB,OAAO2hB,EAGL5vB,EAAMmwB,YAAYR,EAAMC,IAC1BD,EAAO3vB,EAAMowB,YAAYT,GACzBC,EAAO5vB,EAAMowB,YAAYR,KAEzBD,EAAO3vB,EAAM0M,YAAYijB,GACzBC,EAAO5vB,EAAM0M,YAAYkjB,IAE3B,IAAIjI,EAAW3nB,EAAM2nB,SAASgI,EAAMC,GACpC,OAAIjI,GAIGgI,EAAOC,CAChB,EAEA7vB,EAAQswB,IAAM,SAAUV,EAAMC,GAC5B,GAAyB,IAArBhV,UAAUzS,OACZ,OAAOd,EAAMiQ,GAGXtX,EAAMmwB,YAAYR,EAAMC,IAC1BD,EAAO3vB,EAAMowB,YAAYT,GACzBC,EAAO5vB,EAAMowB,YAAYR,KAEzBD,EAAO3vB,EAAM0M,YAAYijB,GACzBC,EAAO5vB,EAAM0M,YAAYkjB,IAE3B,IAAIjI,EAAW3nB,EAAM2nB,SAASgI,EAAMC,GACpC,OAAIjI,GAIGgI,GAAQC,CACjB,EAEA7vB,EAAQuwB,GAAK,SAAUX,EAAMC,GAC3B,GAAyB,IAArBhV,UAAUzS,OACZ,OAAOd,EAAMiQ,GAGXtX,EAAMmwB,YAAYR,EAAMC,IAC1BD,EAAO3vB,EAAMowB,YAAYT,GACzBC,EAAO5vB,EAAMowB,YAAYR,KAEzBD,EAAO3vB,EAAM0M,YAAYijB,GACzBC,EAAO5vB,EAAM0M,YAAYkjB,IAE3B,IAAIjI,EAAW3nB,EAAM2nB,SAASgI,EAAMC,GACpC,OAAIjI,GAIGgI,EAAOC,CAChB,EAGA7vB,EAAQwwB,IAAM,SAAUZ,EAAMC,GAC5B,GAAyB,IAArBhV,UAAUzS,OACZ,OAAOd,EAAMiQ,GAGXtX,EAAMmwB,YAAYR,EAAMC,IAC1BD,EAAO3vB,EAAMowB,YAAYT,GACzBC,EAAO5vB,EAAMowB,YAAYR,KAEzBD,EAAO3vB,EAAM0M,YAAYijB,GACzBC,EAAO5vB,EAAM0M,YAAYkjB,IAE3B,IAAIjI,EAAW3nB,EAAM2nB,SAASgI,EAAMC,GACpC,OAAIjI,GAIGgI,GAAQC,CACjB,EAEA7vB,EAAQ+F,GAAK,SAAU0qB,EAAQC,GAC7B,OAAyB,IAArB7V,UAAUzS,OACLd,EAAMiQ,GAEXkZ,aAAkBviB,MACbuiB,EAELC,aAAkBxiB,MACbwiB,GAEM,OAAXD,IACFA,OAASllB,GAEI,OAAXmlB,IACFA,OAASnlB,GAGJklB,IAAWC,EACpB,EAEA1wB,EAAQ2wB,GAAK,SAAUF,EAAQC,GAC7B,OAAyB,IAArB7V,UAAUzS,OACLd,EAAMiQ,GAEXkZ,aAAkBviB,MACbuiB,EAELC,aAAkBxiB,MACbwiB,GAEM,OAAXD,IACFA,OAASllB,GAEI,OAAXmlB,IACFA,OAASnlB,GAGJklB,IAAWC,EACpB,EAEA1wB,EAAQ4wB,IAAM,SAAU7D,EAAM8D,GAC5B,OAAyB,IAArBhW,UAAUzS,OACLd,EAAMiQ,GAGRvX,EAAQ0tB,MAAMX,EAAM8D,EAC7B,EAEA7wB,EAAQgL,IAAM,WACZ,IAAIpD,EAAS,EAyBb,OAvBA3H,EAAM4H,UAAU5H,EAAM6wB,YAAYjW,YAAY,SAAS/S,GACrD,GAAIF,aAAkBsG,MACpB,OAAO,EACF,GAAIpG,aAAiBoG,MAC1BtG,EAASE,OACJ,GAAqB,kBAAVA,EAChBF,GAAUE,OAEL,GAAqB,kBAAVA,EAAoB,CACpC,IAAIipB,EAASC,WAAWlpB,IAEvB6B,MAAMonB,KAAYnpB,GAAUmpB,EAE/B,MAAO,GAAIvgB,MAAMkU,QAAQ5c,GAAQ,CAC/B,IAAImpB,EAAejxB,EAAQgL,IAAIkmB,MAAM,KAAMppB,GACvCmpB,aAAwB/iB,MAC1BtG,EAASqpB,EAETrpB,GAAUqpB,CAEd,CACF,IAEOrpB,CACT,EAEA5H,EAAQmxB,MAAQ,SAAUjF,EAAOvjB,EAAUyoB,GAOzC,GANAlF,EAAQjsB,EAAMub,QAAQ0Q,GAEpBkF,EADEA,EACSnxB,EAAMub,QAAQ4V,GAEdlF,EAETA,aAAiBhe,MACnB,OAAOge,EAET,QAAiB3gB,IAAb5C,GAAuC,OAAbA,GAAqBA,aAAoBuF,MACrE,OAAO,EAKT,IAHA,IAAItG,EAAS,EACTypB,EAA0B,MAAb1oB,EACbG,EAAoBuoB,EAAa,KAAO5pB,EAAesB,MAAMJ,EAAW,IACnEjI,EAAI,EAAGA,EAAIwrB,EAAM9jB,OAAQ1H,IAAK,CACrC,IAAIoH,EAAQokB,EAAMxrB,GACd4wB,EAAWF,EAAS1wB,GAExB,GAAI2wB,EACFzpB,GAAUE,MACL,CACL,IAAIkB,EAAS,CAACvB,EAAewB,YAAYnB,EAAOL,EAAeyB,qBAAqBC,OAAOL,GAE3FlB,GAAUH,EAAe2B,QAAQJ,GAAUsoB,EAAW,CACxD,CACF,CAEA,OAAO1pB,CACT,EAEA5H,EAAQuxB,OAAS,WACf,IAAIhW,EAAOtb,EAAM6wB,YAAYjW,WACzBqR,EAAQjsB,EAAMkf,iBAAiBlf,EAAMub,QAAQD,EAAK7G,UAEtD,GAAIwX,aAAiBhe,MACnB,OAAOge,EAMT,IAHA,IAAIhkB,EAAYqT,EACZiW,EAAiBtpB,EAAUE,OAAS,EAE/B1H,EAAI,EAAGA,EAAI8wB,EAAgB9wB,IAClCwH,EAAc,EAAJxH,GAAST,EAAMub,QAAQtT,EAAc,EAAJxH,IAG7C,IAAIkH,EAAS,EAEb,IAASlH,EAAI,EAAGA,EAAIwrB,EAAM9jB,OAAQ1H,IAAK,CAGrC,IAFA,IAAI+wB,GAAkB,EAEb/oB,EAAI,EAAGA,EAAI8oB,EAAgB9oB,IAAK,CACvC,IAAIgpB,EAAcxpB,EAAc,EAAJQ,GAAOhI,GAC/BiI,EAAWT,EAAc,EAAJQ,EAAQ,GAE7BipB,GAAiB,EAErB,QAH8B,IAAbhpB,GAAoC,MAAbA,EAItCgpB,GAAiB,MACZ,CACL,IAAI7oB,EAAoBrB,EAAesB,MAAMJ,EAAW,IACpDK,EAAS,CAACvB,EAAewB,YAAYyoB,EAAajqB,EAAeyB,qBAAqBC,OAAOL,GAEjG6oB,EAAiBlqB,EAAe2B,QAAQJ,EAC1C,CAGA,IAAK2oB,EAAgB,CACnBF,GAAkB,EAClB,KACF,CAEAA,GAAkB,CACpB,CAEIA,IACF7pB,GAAUskB,EAAMxrB,GAEpB,CAEA,OAAOkH,CACT,EAEA5H,EAAQ4xB,WAAa,WACnB,IAAK/W,WAAkC,IAArBA,UAAUzS,OAC1B,OAAOd,EAAMQ,MAQf,IANA,IAEI+pB,EACAvpB,EACAwpB,EACAC,EALAC,EAASnX,UAAUzS,OAAS,EAC5BR,EAAS,EAKJlH,EAAI,EAAGA,EAAIma,UAAU,GAAGzS,OAAQ1H,IACvC,GAAMma,UAAU,GAAGna,aAAc8P,MAe/B,IAAK,IAAI9H,EAAI,EAAGA,EAAImS,UAAU,GAAGna,GAAG0H,OAAQM,IAAK,CAE/C,IADAmpB,EAAU,EACLvpB,EAAI,EAAGA,EAAI0pB,EAAQ1pB,IAAK,CAC3B,IAAI2pB,EAAUpX,UAAUvS,EAAI,GAAG5H,GAAGgI,GAClC,GAAIupB,aAAmB/jB,MACrB,OAAO+jB,EAGT,IADAF,EAAM9xB,EAAM0M,YAAYslB,cACL/jB,MACjB,OAAO6jB,EAETF,GAAWE,CACb,CACAnqB,GAAUiqB,CACZ,KA7BuC,CAEvC,IADAA,EAAU,EACLvpB,EAAI,EAAGA,EAAI0pB,EAAQ1pB,IAAK,CAC3B,IAAI4pB,EAASrX,UAAUvS,EAAI,GAAG5H,GAC9B,GAAIwxB,aAAkBhkB,MACpB,OAAOgkB,EAGT,IADAJ,EAAK7xB,EAAM0M,YAAYulB,cACLhkB,MAChB,OAAO4jB,EAETD,GAAWC,CACb,CACAlqB,GAAUiqB,CACZ,CAkBF,OAAOjqB,CACT,EAEA5H,EAAQmyB,MAAQ,WACd,IAAIC,EAAUnyB,EAAMkf,iBAAiBlf,EAAMub,QAAQX,YACnD,GAAIuX,aAAmBlkB,MACrB,OAAOkkB,EAIT,IAFA,IAAIxqB,EAAS,EACTQ,EAASgqB,EAAQhqB,OACZ1H,EAAI,EAAGA,EAAI0H,EAAQ1H,IAC1BkH,GAAW+c,EAAYT,SAASkO,EAAQ1xB,IAAO0xB,EAAQ1xB,GAAK0xB,EAAQ1xB,GAAK,EAE3E,OAAOkH,CACT,EAEA5H,EAAQqyB,SAAW,SAASC,EAASC,GAGnC,GAFAD,EAAUryB,EAAMkf,iBAAiBlf,EAAMub,QAAQ8W,IAC/CC,EAAUtyB,EAAMkf,iBAAiBlf,EAAMub,QAAQ+W,IAC3CtyB,EAAM2M,WAAW0lB,EAASC,GAC5B,OAAOjrB,EAAMQ,MAGf,IADA,IAAIF,EAAS,EACJlH,EAAI,EAAGA,EAAI4xB,EAAQlqB,OAAQ1H,IAClCkH,GAAU0qB,EAAQ5xB,GAAK4xB,EAAQ5xB,GAAK6xB,EAAQ7xB,GAAK6xB,EAAQ7xB,GAE3D,OAAOkH,CACT,EAEA5H,EAAQwyB,SAAW,SAASF,EAASC,GAGnC,GAFAD,EAAUryB,EAAMkf,iBAAiBlf,EAAMub,QAAQ8W,IAC/CC,EAAUtyB,EAAMkf,iBAAiBlf,EAAMub,QAAQ+W,IAC3CtyB,EAAM2M,WAAW0lB,EAASC,GAC5B,OAAOjrB,EAAMQ,MAEf,IAAIF,EAAS,EACb0qB,EAAUryB,EAAMkf,iBAAiBlf,EAAMub,QAAQ8W,IAC/CC,EAAUtyB,EAAMkf,iBAAiBlf,EAAMub,QAAQ+W,IAC/C,IAAK,IAAI7xB,EAAI,EAAGA,EAAI4xB,EAAQlqB,OAAQ1H,IAClCkH,GAAU0qB,EAAQ5xB,GAAK4xB,EAAQ5xB,GAAK6xB,EAAQ7xB,GAAK6xB,EAAQ7xB,GAE3D,OAAOkH,CACT,EAEA5H,EAAQyyB,QAAU,SAASH,EAASC,GAGlC,GAFAD,EAAUryB,EAAMkf,iBAAiBlf,EAAMub,QAAQ8W,IAC/CC,EAAUtyB,EAAMkf,iBAAiBlf,EAAMub,QAAQ+W,IAC3CtyB,EAAM2M,WAAW0lB,EAASC,GAC5B,OAAOjrB,EAAMQ,MAEf,IAAIF,EAAS,EACb0qB,EAAUryB,EAAMub,QAAQ8W,GACxBC,EAAUtyB,EAAMub,QAAQ+W,GACxB,IAAK,IAAI7xB,EAAI,EAAGA,EAAI4xB,EAAQlqB,OAAQ1H,IAClCkH,GAAUwE,KAAKyM,IAAIyZ,EAAQ5xB,GAAK6xB,EAAQ7xB,GAAI,GAE9C,OAAOkH,CACT,EAEA5H,EAAQ0yB,IAAM,SAAStf,GAErB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEFhH,KAAKkf,IAAIlY,EAClB,EAEApT,EAAQ2yB,KAAO,SAASvf,GAEtB,IADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACpB,OAAOkF,EAET,IAAIoY,EAAKpf,KAAKqN,IAAI,EAAIrG,GACtB,OAAQoY,EAAK,IAAMA,EAAK,EAC1B,EAEAxrB,EAAQ4yB,MAAQ,SAASxf,EAAQob,GAC/Bpb,EAASnT,EAAM0M,YAAYyG,GAC3Bob,EAASvuB,EAAM0M,YAAY6hB,GAC3B,IAAI5G,EAAW3nB,EAAM2nB,SAASxU,EAAQob,GACtC,OAAI5G,IAGQxU,EAAS,EAAK,GAAK,GAChBhH,KAAKqB,MAAMrB,KAAK6F,IAAImB,GAAUhH,KAAKyM,IAAI,GAAI2V,IAAYpiB,KAAKyM,IAAI,GAAI2V,EACrF,mBC10CA,IAAIvuB,EAAQL,EAAQ,OAChB0H,EAAQ1H,EAAQ,OAEpBI,EAAQ6yB,OAAS,WAEf,IADA,IAAIjrB,EAAS,GACJlH,EAAI,EAAGA,EAAIma,UAAUzS,SAAU1H,EAAG,CAKzC,IAJA,IAAIoyB,GAAa,EACbC,EAAalY,UAAUna,GAGlBgI,EAAI,EAAGA,EAAId,EAAOQ,UACzB0qB,EAAalrB,EAAOc,KAAOqqB,KADQrqB,GAMhCoqB,GACHlrB,EAAOG,KAAKgrB,EAEhB,CACA,OAAOnrB,CACT,EAEA5H,EAAQgzB,QAAU/yB,EAAMub,QAExBxb,EAAQizB,WAAa,WACnB,OAAOziB,MAAM0iB,UAAUC,MAAMC,KAAKvY,UAAW,EAC/C,EAEA7a,EAAQqzB,UAAY,SAAUC,EAASC,GACrC,IAAK1Y,UAAUzS,OACb,OAAOd,EAAMA,MAEf,IAGE,IAFA,IAAIksB,EAAOD,EAAUhjB,MAAM,KACvB3I,EAAS0rB,EACJ5yB,EAAI,EAAGA,EAAI8yB,EAAKprB,SAAU1H,EAAG,CACpC,IAAIuX,EAAOub,EAAK9yB,GAChB,GAA8B,MAA1BuX,EAAKA,EAAK7P,OAAS,GAAY,CACjC,IAAIqrB,EAAUxb,EAAKf,QAAQ,KACvB1N,EAAQyO,EAAKhE,UAAUwf,EAAU,EAAGxb,EAAK7P,OAAS,GACtDR,EAASA,EAAOqQ,EAAKhE,UAAU,EAAGwf,IAAUjqB,EAC9C,MACE5B,EAASA,EAAOqQ,EAEpB,CACA,OAAOrQ,CACT,CAAE,MAAON,GAAQ,CACnB,EAEAtH,EAAQ0zB,KAAO,SAAU/rB,EAAOgsB,GAC9B,OAAOhsB,EAAM+iB,KAAKiJ,EACpB,EAEA3zB,EAAQ4zB,QAAU,WAEhB,OADsB3zB,EAAMub,QAAQX,WACb+S,QAAO,SAAUiG,GACtC,MAAqB,kBAAPA,CAChB,GACF,mBC3DA,IAAI1zB,EAAWP,EAAQ,OACnBqT,EAAOrT,EAAQ,OACfoT,EAAQpT,EAAQ,OAChBK,EAAQL,EAAQ,OAChB6H,EAAiB7H,EAAQ,OACzB0H,EAAQ1H,EAAQ,OAChBk0B,EAAOl0B,EAAQ,OAInBI,EAAQ+zB,OAAS,WACf,IACIpG,EADgB1tB,EAAMub,QAAQX,WACO+S,OAAO3tB,EAAM+zB,WACtD,GAAoC,IAAhCrG,EAAqBvlB,OACvB,OAAOd,EAAMiD,IAEf,IAAI2hB,EAAQjsB,EAAMkf,iBAAiBwO,GACnC,OAAIzB,aAAiBhe,MACZge,EAEFlZ,EAAMjJ,IAAIiJ,EAAMkZ,GAAO+H,SAASjhB,EAAMkhB,KAAKhI,IAAQja,MAAM,IAAMia,EAAM9jB,MAC9E,EAEApI,EAAQyoB,QAAU,WAChB,IACIkF,EADgB1tB,EAAMub,QAAQX,WACO+S,OAAO3tB,EAAM+zB,WACtD,GAAoC,IAAhCrG,EAAqBvlB,OACvB,OAAOd,EAAM0C,KAEf,IAAI2d,EAAY1nB,EAAM2nB,SAASsJ,WAAM3lB,EAAWoiB,GAChD,GAAIhG,EACF,OAAOA,EAQT,IANA,IAII/f,EAJAskB,EAAQjsB,EAAMmyB,QAAQzE,GACtBtkB,EAAI6iB,EAAM9jB,OACV2B,EAAM,EACNoqB,EAAQ,EAGHzzB,EAAI,EAAGA,EAAI2I,EAAG3I,IACrBqJ,GAAOmiB,EAAMxrB,GACbyzB,GAAS,EAQX,OANAvsB,EAASmC,EAAMoqB,EAEXxqB,MAAM/B,KACRA,EAASN,EAAMiD,KAGV3C,CACT,EAEA5H,EAAQo0B,SAAW,WACjB,IACIzG,EADgB1tB,EAAMub,QAAQX,WACO+S,OAAO3tB,EAAM+zB,WACtD,GAAoC,IAAhCrG,EAAqBvlB,OACvB,OAAOd,EAAM0C,KAEf,IAAI2d,EAAY1nB,EAAM2nB,SAASsJ,WAAM3lB,EAAWoiB,GAChD,GAAIhG,EACF,OAAOA,EAOT,IALA,IAII/f,EAJAskB,EAAQyB,EACRtkB,EAAI6iB,EAAM9jB,OACV2B,EAAM,EACNoqB,EAAQ,EAEHzzB,EAAI,EAAGA,EAAI2I,EAAG3I,IAAK,CAC1B,IAAImzB,EAAK3H,EAAMxrB,GACG,kBAAPmzB,IACT9pB,GAAO8pB,IAEE,IAAPA,GACF9pB,IAES,OAAP8pB,GACFM,GAEJ,CAOA,OANAvsB,EAASmC,EAAMoqB,EAEXxqB,MAAM/B,KACRA,EAASN,EAAMiD,KAGV3C,CACT,EAEA5H,EAAQq0B,UAAY,SAASnI,EAAOvjB,EAAU2rB,GAC5C,GAAIzZ,UAAUzS,QAAU,EACtB,OAAOd,EAAMiQ,GAEf+c,EAAgBA,GAAiBpI,EACjC,IACIqI,EADmBt0B,EAAMub,QAAQ8Y,GACU1G,OAAO3tB,EAAM+zB,WAK5D,GAJAM,EAAgBr0B,EAAMkf,iBAAiBoV,GAEvCrI,EAAQjsB,EAAMub,QAAQ0Q,GAElBoI,aAAyBpmB,MAC3B,OAAOomB,EAOT,IALA,IAAIE,EAAgB,EAChB5sB,EAAS,EACTypB,OAA0B,IAAb1oB,GAAoC,MAAbA,EACpCG,EAAoBuoB,EAAa,KAAO5pB,EAAesB,MAAMJ,EAAW,IAEnEjI,EAAI,EAAGA,EAAIwrB,EAAM9jB,OAAQ1H,IAAK,CACrC,IAAIoH,EAAQokB,EAAMxrB,GAElB,GAAI2wB,EACFzpB,GAAU0sB,EAAc5zB,GACxB8zB,QACK,CACL,IAAIxrB,EAAS,CAACvB,EAAewB,YAAYnB,EAAOL,EAAeyB,qBAAqBC,OAAOL,GAEvFrB,EAAe2B,QAAQJ,KACzBpB,GAAU0sB,EAAc5zB,GACxB8zB,IAEJ,CACF,CAEA,OAAO5sB,EAAS4sB,CAClB,EAEAx0B,EAAQy0B,WAAa,WASnB,IANA,IAAIlZ,EAAOtb,EAAM6wB,YAAYjW,WACzB2W,GAAkBjW,EAAKnT,OAAS,GAAK,EACrC8jB,EAAQjsB,EAAMub,QAAQD,EAAK,IAC3B4Y,EAAQ,EACRvsB,EAAS,EAEJlH,EAAI,EAAGA,EAAIwrB,EAAM9jB,OAAQ1H,IAAK,CAGrC,IAFA,IAAI+wB,GAAkB,EAEb/oB,EAAI,EAAGA,EAAI8oB,EAAgB9oB,IAAK,CACvC,IAAIZ,EAAQyT,EAAK,EAAI7S,EAAI,GAAGhI,GACxBiI,EAAW4S,EAAK,EAAI7S,EAAI,GAExBipB,GAAiB,EAErB,QAH8B,IAAbhpB,GAAoC,MAAbA,EAItCgpB,GAAiB,MACZ,CACL,IAAI7oB,EAAoBrB,EAAesB,MAAMJ,EAAW,IACpDK,EAAS,CAACvB,EAAewB,YAAYnB,EAAOL,EAAeyB,qBAAqBC,OAAOL,GAE3F6oB,EAAiBlqB,EAAe2B,QAAQJ,EAC1C,CAGA,IAAK2oB,EAAgB,CACnBF,GAAkB,EAClB,KACF,CAEAA,GAAkB,CACpB,CAEIA,IACF7pB,GAAUskB,EAAMxrB,GAChByzB,IAEJ,CAEA,IAAIphB,EAAUnL,EAASusB,EAEvB,OAAIxqB,MAAMoJ,GACD,EAEAA,CAEX,EAEA/S,EAAQY,KAAO,CAAC,EAEhBZ,EAAQY,KAAKC,KAAO,SAASyS,EAAGohB,EAAOC,EAAMC,EAAYC,EAAGC,GAC1D,OAAIja,UAAUzS,OAAS,EACdd,EAAMQ,OAGf+sB,OAAWtpB,IAANspB,EAAmB,EAAIA,EAC5BC,OAAWvpB,IAANupB,EAAmB,EAAIA,EAE5BxhB,EAAIrT,EAAM0M,YAAY2G,GACtBohB,EAAQz0B,EAAM0M,YAAY+nB,GAC1BC,EAAO10B,EAAM0M,YAAYgoB,GACzBE,EAAI50B,EAAM0M,YAAYkoB,GACtBC,EAAI70B,EAAM0M,YAAYmoB,GAClB70B,EAAM2M,WAAW0G,EAAGohB,EAAOC,EAAME,EAAGC,GAC/BxtB,EAAMQ,OAGfwL,GAAKA,EAAIuhB,IAAMC,EAAID,GACXD,EAAc5hB,EAAM2hB,KAAKI,IAAIzhB,EAAGohB,EAAOC,GAAQ3hB,EAAM2hB,KAAKK,IAAI1hB,EAAGohB,EAAOC,IAClF,EAEA30B,EAAQY,KAAKG,IAAM,SAASk0B,EAAaP,EAAOC,EAAME,EAAGC,GASvD,OARAD,OAAWtpB,IAANspB,EAAmB,EAAIA,EAC5BC,OAAWvpB,IAANupB,EAAmB,EAAIA,EAE5BG,EAAch1B,EAAM0M,YAAYsoB,GAChCP,EAAQz0B,EAAM0M,YAAY+nB,GAC1BC,EAAO10B,EAAM0M,YAAYgoB,GACzBE,EAAI50B,EAAM0M,YAAYkoB,GACtBC,EAAI70B,EAAM0M,YAAYmoB,GAClB70B,EAAM2M,WAAWqoB,EAAaP,EAAOC,EAAME,EAAGC,GACzCxtB,EAAMQ,MAGRkL,EAAM2hB,KAAKO,IAAID,EAAaP,EAAOC,IAASG,EAAID,GAAKA,CAC9D,EAEA70B,EAAQiB,MAAQ,CAAC,EAEjBjB,EAAQiB,MAAMJ,KAAO,SAASs0B,EAAWC,EAAQH,EAAaL,GAK5D,OAJAO,EAAYl1B,EAAM0M,YAAYwoB,GAC9BC,EAASn1B,EAAM0M,YAAYyoB,GAC3BH,EAAch1B,EAAM0M,YAAYsoB,GAChCL,EAAa30B,EAAM0M,YAAYioB,GAC3B30B,EAAM2M,WAAWuoB,EAAWC,EAAQH,EAAaL,GAC5CttB,EAAMQ,MAEP8sB,EAAc5hB,EAAMqiB,SAASN,IAAII,EAAWC,EAAQH,GAAejiB,EAAMqiB,SAASL,IAAIG,EAAWC,EAAQH,EACnH,EAEAj1B,EAAQiB,MAAMJ,KAAKy0B,MAAQ,SAASF,EAAQH,EAAaE,EAAWI,GAOlE,GANAA,OAA6BhqB,IAAfgqB,EAA4BJ,EAAYI,EAEtDH,EAASn1B,EAAM0M,YAAYyoB,GAC3BH,EAAch1B,EAAM0M,YAAYsoB,GAChCE,EAAYl1B,EAAM0M,YAAYwoB,GAC9BI,EAAat1B,EAAM0M,YAAY4oB,GAC3Bt1B,EAAM2M,WAAWwoB,EAAQH,EAAaE,EAAWI,GACnD,OAAOjuB,EAAMQ,MAIf,IADA,IAAIF,EAAS,EACJlH,EAAIy0B,EAAWz0B,GAAK60B,EAAY70B,IACvCkH,GAAUzH,EAAS4qB,OAAOqK,EAAQ10B,GAAK0L,KAAKyM,IAAIoc,EAAav0B,GAAK0L,KAAKyM,IAAI,EAAIoc,EAAaG,EAAS10B,GAEvG,OAAOkH,CACT,EAEA5H,EAAQiB,MAAMF,IAAM,SAASq0B,EAAQH,EAAaP,GAIhD,GAHAU,EAASn1B,EAAM0M,YAAYyoB,GAC3BH,EAAch1B,EAAM0M,YAAYsoB,GAChCP,EAAQz0B,EAAM0M,YAAY+nB,GACtBz0B,EAAM2M,WAAWwoB,EAAQH,EAAaP,GACxC,OAAOptB,EAAMQ,MAIf,IADA,IAAIwL,EAAI,EACDA,GAAK8hB,GAAQ,CAClB,GAAIpiB,EAAMqiB,SAASN,IAAIzhB,EAAG8hB,EAAQH,IAAgBP,EAChD,OAAOphB,EAETA,GACF,CACF,EAEAtT,EAAQyB,MAAQ,CAAC,EAEjBzB,EAAQyB,MAAMZ,KAAO,SAASyS,EAAGhL,EAAGssB,GAGlC,OAFAthB,EAAIrT,EAAM0M,YAAY2G,GACtBhL,EAAIrI,EAAM0M,YAAYrE,GAClBrI,EAAM2M,WAAW0G,EAAGhL,GACfhB,EAAMQ,MAGP8sB,EAAc5hB,EAAMwiB,UAAUT,IAAIzhB,EAAGhL,GAAK0K,EAAMwiB,UAAUR,IAAI1hB,EAAGhL,EAC3E,EAEAtI,EAAQyB,MAAMZ,KAAKc,GAAK,SAAS2R,EAAGhL,GAClC,OAAKgL,GAAKhL,EACDhB,EAAMiQ,GAGXjE,EAAI,GAAKhL,EAAI8D,KAAKyM,IAAI,GAAI,IACrBvR,EAAMiD,IAGG,kBAAN+I,GAAiC,kBAANhL,EAC9BhB,EAAMQ,MAGR,EAAKkL,EAAMwiB,UAAUT,IAAIzhB,EAAGhL,EACrC,EAEAtI,EAAQyB,MAAMV,IAAM,SAASk0B,EAAa3sB,GAGxC,OAFA2sB,EAAch1B,EAAM0M,YAAYsoB,GAChC3sB,EAAIrI,EAAM0M,YAAYrE,GAClBrI,EAAM2M,WAAWqoB,EAAa3sB,GACzBhB,EAAMQ,MAERkL,EAAMwiB,UAAUN,IAAID,EAAa3sB,EAC1C,EAEAtI,EAAQyB,MAAMV,IAAIY,GAAK,SAASkH,EAAGP,GACjC,OAAKO,GAAKP,EACDhB,EAAMiQ,GAGX1O,EAAI,GAAKA,EAAI,GAAKP,EAAI,GAAKA,EAAI8D,KAAKyM,IAAI,GAAI,IACvCvR,EAAMiD,IAGG,kBAAN1B,GAAiC,kBAANP,EAC9BhB,EAAMQ,MAGRkL,EAAMwiB,UAAUN,IAAI,EAAMrsB,EAAGP,EACtC,EAEAtI,EAAQyB,MAAMM,KAAO,SAAS0zB,EAAUC,GACtC,GAAyB,IAArB7a,UAAUzS,OACZ,OAAOd,EAAMiQ,GAGf,KAAOke,aAAoBjlB,UAAcklB,aAAoBllB,OAC3D,OAAOlJ,EAAMQ,MAGf,GAAI2tB,EAASrtB,SAAWstB,EAASttB,OAC/B,OAAOd,EAAMQ,MAGf,GAAI2tB,EAAS,IAAMC,EAAS,IAC1BD,EAAS,GAAGrtB,SAAWstB,EAAS,GAAGttB,OACnC,OAAOd,EAAMQ,MAGf,IACI6tB,EAAKj1B,EAAGgI,EADRse,EAAMyO,EAASrtB,OAInB,IAAK1H,EAAI,EAAGA,EAAIsmB,EAAKtmB,IACb+0B,EAAS/0B,aAAc8P,QAC3BmlB,EAAMF,EAAS/0B,GACf+0B,EAAS/0B,GAAK,GACd+0B,EAAS/0B,GAAGqH,KAAK4tB,IAEbD,EAASh1B,aAAc8P,QAC3BmlB,EAAMD,EAASh1B,GACfg1B,EAASh1B,GAAK,GACdg1B,EAASh1B,GAAGqH,KAAK4tB,IAIrB,IAAIC,EAAMH,EAAS,GAAGrtB,OAClBytB,EAAe,IAARD,EAAa5O,EAAI,GAAKA,EAAI,IAAI4O,EAAI,GACzCE,EAAO,EACPlgB,EAAIxJ,KAAKgN,GAEb,IAAK1Y,EAAI,EAAGA,EAAIsmB,EAAKtmB,IACnB,IAAKgI,EAAI,EAAGA,EAAIktB,EAAKltB,IACnBotB,GAAQ1pB,KAAKyM,IAAK4c,EAAS/0B,GAAGgI,GAAKgtB,EAASh1B,GAAGgI,GAAK,GAAKgtB,EAASh1B,GAAGgI,GAyBzE,OAAO0D,KAAKuE,MAAyB,IApBrC,SAAemlB,EAAMD,GACnB,IAAIhtB,EAAIuD,KAAKqN,KAAK,GAAMqc,GACpBD,EAAI,IAAO,IACbhtB,GAAQuD,KAAKwM,KAAK,EAAIkd,EAAKlgB,IAG7B,IADA,IAAItN,EAAIutB,EACFvtB,GAAK,GACTO,EAAIA,EAAIitB,EAAKxtB,EACbA,GAAQ,EAIV,IAFA,IAAIqS,EAAI9R,EACJ4N,EAAIof,EACDlb,EAAI,MAAa9R,GAGtBA,GADA8R,EAAIA,EAAImb,GADRrf,GAAQ,GAIV,OAAO,EAAE5N,CACX,CAEkBktB,CAAMD,EAAMD,IAAkB,GAClD,EAEA71B,EAAQg2B,OAAS,SAASC,EAAQzsB,GAChC,OAAyB,IAArBqR,UAAUzS,OACLd,EAAMiQ,GAGX/N,EAAQ,EACHlC,EAAMiD,IAGT0rB,aAAkBzlB,OAA4B,kBAAVhH,EAIpB,IAAlBysB,EAAO7tB,OAIJ4K,EAAM4iB,IAAIK,EAAQzsB,QAJzB,EAHSlC,EAAMQ,KAQjB,EAEA9H,EAAQk2B,QAAU,SAASD,GACzB,OAAyB,IAArBpb,UAAUzS,OACLd,EAAMiQ,GAGT0e,aAAkBzlB,MAIF,IAAlBylB,EAAO7tB,OACF,EAGF4K,EAAMmjB,KAAKF,GAPT3uB,EAAMQ,KAQjB,EAEA9H,EAAQgC,WAAa,CAAC,EAEtBhC,EAAQgC,WAAWC,KAAO,SAASyyB,EAAOpmB,EAAIjF,GAI5C,OAHAqrB,EAAQz0B,EAAM0M,YAAY+nB,GAC1BpmB,EAAKrO,EAAM0M,YAAY2B,GACvBjF,EAAIpJ,EAAM0M,YAAYtD,GAClBpJ,EAAM2M,WAAW8nB,EAAOpmB,EAAIjF,GACvB/B,EAAMQ,MAERkL,EAAMojB,SAAS,EAAG1B,EAAOpmB,EAAIjF,GAAG,GAAK,CAC9C,EAEArJ,EAAQgC,WAAWyE,EAAI,SAASiuB,EAAOpmB,EAAIjF,GAIzC,OAHAqrB,EAAQz0B,EAAM0M,YAAY+nB,GAC1BpmB,EAAKrO,EAAM0M,YAAY2B,GACvBjF,EAAIpJ,EAAM0M,YAAYtD,GAClBpJ,EAAM2M,WAAW8nB,EAAOpmB,EAAIjF,GACvB/B,EAAMQ,MAERkL,EAAMqjB,IAAI,EAAG3B,EAAOpmB,EAAIjF,GAAG,GAAK,CACzC,EAEArJ,EAAQs2B,OAAS,SAASC,EAAQC,GAGhC,OAFAD,EAASt2B,EAAMkf,iBAAiBlf,EAAMub,QAAQ+a,IAC9CC,EAASv2B,EAAMkf,iBAAiBlf,EAAMub,QAAQgb,IAC1Cv2B,EAAM2M,WAAW2pB,EAAQC,GACpBlvB,EAAMQ,MAERkL,EAAMyjB,UAAUF,EAAQC,EACjC,EAEAx2B,EAAQmK,MAAQ,WACd,IAAIusB,EAAgBz2B,EAAMub,QAAQX,WAClC,OAAO5a,EAAMmyB,QAAQsE,GAAetuB,MACtC,EAEApI,EAAQqK,OAAS,WACf,IAAIqsB,EAAgBz2B,EAAMub,QAAQX,WAClC,OAAO6b,EAActuB,OAASpI,EAAQ22B,WAAWD,EACnD,EAEA12B,EAAQ42B,QAAU,SAAU1K,EAAOpkB,GACjC,IAAIF,EAAS,EAEbskB,EAAQjsB,EAAMub,QAAQ0Q,GAEtB,IAAK,IAAIxrB,EAAI,EAAGA,EAAIwrB,EAAM9jB,OAAQ1H,IAC5BwrB,EAAMxrB,KAAOoH,GACfF,IAGJ,OAAOA,CACT,EAGA5H,EAAQ22B,WAAa,WAInB,IAHA,IAEI5D,EAFA7G,EAAQjsB,EAAMub,QAAQX,WACtBgc,EAAS,EAEJn2B,EAAI,EAAGA,EAAIwrB,EAAM9jB,OAAQ1H,SAEhB6K,KADhBwnB,EAAU7G,EAAMxrB,KACyB,OAAZqyB,GAAgC,KAAZA,GAC/C8D,IAGJ,OAAOA,CACT,EAEA72B,EAAQ82B,QAAU,SAAS5K,EAAOvjB,GAKhC,GAJAujB,EAAQjsB,EAAMub,QAAQ0Q,QAEQ,IAAbvjB,GAAoC,MAAbA,EAGtC,OAAOujB,EAAM9jB,OAMf,IAHA,IAAID,EAAU,EACVW,EAAoBrB,EAAesB,MAAMJ,EAAW,IAE/CjI,EAAI,EAAGA,EAAIwrB,EAAM9jB,OAAQ1H,IAAK,CACrC,IAAIoH,EAAQokB,EAAMxrB,GACdsI,EAAS,CAACvB,EAAewB,YAAYnB,EAAOL,EAAeyB,qBAAqBC,OAAOL,GAEvFrB,EAAe2B,QAAQJ,IACzBb,GAEJ,CAEA,OAAOA,CACT,EAEAnI,EAAQ+2B,SAAW,WAIjB,IAHA,IAAIxb,EAAOtb,EAAM6wB,YAAYjW,WACzBmc,EAAU,IAAIxmB,MAAMvQ,EAAMub,QAAQD,EAAK,IAAInT,QAEtC1H,EAAI,EAAGA,EAAIs2B,EAAQ5uB,OAAQ1H,IAClCs2B,EAAQt2B,IAAK,EAEf,IAAKA,EAAI,EAAGA,EAAI6a,EAAKnT,OAAQ1H,GAAK,EAAG,CACnC,IAAIwrB,EAAQjsB,EAAMub,QAAQD,EAAK7a,IAC3BiI,EAAW4S,EAAK7a,EAAI,GAGxB,UAF8B,IAAbiI,GAAoC,MAAbA,GAKtC,IAFA,IAAIG,EAAoBrB,EAAesB,MAAMJ,EAAW,IAE/CD,EAAI,EAAGA,EAAIwjB,EAAM9jB,OAAQM,IAAK,CACrC,IAAIZ,EAAQokB,EAAMxjB,GACdM,EAAS,CAACvB,EAAewB,YAAYnB,EAAOL,EAAeyB,qBAAqBC,OAAOL,GAE3FkuB,EAAQtuB,GAAKsuB,EAAQtuB,IAAMjB,EAAe2B,QAAQJ,EACpD,CAEJ,CACA,IAAIpB,EAAS,EACb,IAAKlH,EAAI,EAAGA,EAAIs2B,EAAQ5uB,OAAQ1H,IAC1Bs2B,EAAQt2B,IACVkH,IAIJ,OAAOA,CACT,EAEA5H,EAAQi3B,YAAc,WACpB,OAAOnD,EAAKjB,OAAO3B,MAAM,KAAMjxB,EAAMub,QAAQX,YAAYzS,MAC3D,EAEApI,EAAQmC,WAAa,CAAC,EAEtBnC,EAAQmC,WAAWC,EAAI,SAASm0B,EAAQC,GAGtC,GAFAD,EAASt2B,EAAMkf,iBAAiBlf,EAAMub,QAAQ+a,IAC9CC,EAASv2B,EAAMkf,iBAAiBlf,EAAMub,QAAQgb,IAC1Cv2B,EAAM2M,WAAW2pB,EAAQC,GAC3B,OAAOlvB,EAAMQ,MAMf,IAJA,IAAIovB,EAAQlkB,EAAMkhB,KAAKqC,GACnBY,EAAQnkB,EAAMkhB,KAAKsC,GACnB5uB,EAAS,EACTyB,EAAIktB,EAAOnuB,OACN1H,EAAI,EAAGA,EAAI2I,EAAG3I,IACrBkH,IAAW2uB,EAAO71B,GAAKw2B,IAAUV,EAAO91B,GAAKy2B,GAE/C,OAAOvvB,EAASyB,CAClB,EAEArJ,EAAQmC,WAAWI,EAAI,SAASg0B,EAAQC,GAGtC,OAFAD,EAASt2B,EAAMkf,iBAAiBlf,EAAMub,QAAQ+a,IAC9CC,EAASv2B,EAAMkf,iBAAiBlf,EAAMub,QAAQgb,IAC1Cv2B,EAAM2M,WAAW2pB,EAAQC,GACpBlvB,EAAMQ,MAERkL,EAAMokB,WAAWb,EAAQC,EAClC,EAEAx2B,EAAQq3B,MAAQ,WACd,IAAInL,EAAQjsB,EAAMkf,iBAAiBlf,EAAMub,QAAQX,YACjD,GAAIqR,aAAiBhe,MACnB,OAAOge,EAIT,IAFA,IAAIgI,EAAOlhB,EAAMkhB,KAAKhI,GAClBtkB,EAAS,EACJlH,EAAI,EAAGA,EAAIwrB,EAAM9jB,OAAQ1H,IAChCkH,GAAUwE,KAAKyM,IAAKqT,EAAMxrB,GAAKwzB,EAAO,GAExC,OAAOtsB,CACT,EAEA5H,EAAQ0C,MAAQ,CAAC,EAEjB1C,EAAQ0C,MAAM7B,KAAO,SAASyS,EAAGgkB,EAAQ1C,GAGvC,OAFAthB,EAAIrT,EAAM0M,YAAY2G,GACtBgkB,EAASr3B,EAAM0M,YAAY2qB,GACvBr3B,EAAM2M,WAAW0G,EAAGgkB,GACfhwB,EAAMQ,MAEP8sB,EAAc5hB,EAAMukB,YAAYxC,IAAIzhB,EAAGgkB,GAAUtkB,EAAMukB,YAAYvC,IAAI1hB,EAAGgkB,EACpF,EAEAt3B,EAAQgD,EAAI,CAAC,EAEbhD,EAAQgD,EAAEnC,KAAO,SAASyS,EAAGkkB,EAAIC,EAAI7C,GAInC,OAHAthB,EAAIrT,EAAM0M,YAAY2G,GACtBkkB,EAAKv3B,EAAM0M,YAAY6qB,GACvBC,EAAKx3B,EAAM0M,YAAY8qB,GACnBx3B,EAAM2M,WAAW0G,EAAGkkB,EAAIC,GACnBnwB,EAAMQ,MAEP8sB,EAAc5hB,EAAM0kB,SAAS3C,IAAIzhB,EAAGkkB,EAAIC,GAAMzkB,EAAM0kB,SAAS1C,IAAI1hB,EAAGkkB,EAAIC,EAClF,EAEAz3B,EAAQgD,EAAEnC,KAAKc,GAAK,SAAS2R,EAAGkkB,EAAIC,GAClC,OAAyB,IAArB5c,UAAUzS,OACLd,EAAMiQ,GAGXjE,EAAI,GAAKkkB,EAAK,GAAKC,EAAK,EACnBnwB,EAAMiD,IAGG,kBAAN+I,GAAkC,kBAAPkkB,GAAmC,kBAAPC,EAC1DnwB,EAAMQ,MAGR,EAAIkL,EAAM0kB,SAAS3C,IAAIzhB,EAAGkkB,EAAIC,EACvC,EAEAz3B,EAAQgD,EAAEjC,IAAM,SAASk0B,EAAauC,EAAIC,GAIxC,OAHAxC,EAAch1B,EAAM0M,YAAYsoB,GAChCuC,EAAKv3B,EAAM0M,YAAY6qB,GACvBC,EAAKx3B,EAAM0M,YAAY8qB,GACnBx3B,EAAM2M,WAAWqoB,EAAauC,EAAIC,GAC7BnwB,EAAMQ,MAEXmtB,GAAe,GAAOA,EAAc,EAC/B3tB,EAAMiD,IAGRyI,EAAM0kB,SAASxC,IAAID,EAAauC,EAAIC,EAC7C,EAEAz3B,EAAQgD,EAAEjC,IAAIY,GAAK,SAASkH,EAAG2uB,EAAIC,GACjC,OAAyB,IAArB5c,UAAUzS,OACLd,EAAMiQ,GAGX1O,EAAI,GAAKA,EAAI,GAAK2uB,EAAK,GAAKA,EAAKprB,KAAKyM,IAAI,GAAI,KAAO4e,EAAK,GAAKA,EAAKrrB,KAAKyM,IAAI,GAAI,IAC5EvR,EAAMiD,IAGG,kBAAN1B,GAAkC,kBAAP2uB,GAAmC,kBAAPC,EAC1DnwB,EAAMQ,MAGRkL,EAAM0kB,SAASxC,IAAI,EAAMrsB,EAAG2uB,EAAIC,EACzC,EAEAz3B,EAAQgD,EAAEjB,KAAO,SAASw0B,EAAQC,GAChC,IAAKD,IAAWC,EACd,OAAOlvB,EAAMiQ,GAGf,KAAMgf,aAAkB/lB,UAAYgmB,aAAkBhmB,OACpD,OAAOlJ,EAAMiQ,GAGf,GAAIgf,EAAOnuB,OAAS,GAAKouB,EAAOpuB,OAAS,EACvC,OAAOd,EAAM0C,KAGf,IAAI2tB,EAAe,SAASlY,EAAQmY,GAElC,IADA,IAAI7tB,EAAM,EACDrJ,EAAI,EAAGA,EAAI+e,EAAOrX,OAAQ1H,IACjCqJ,GAAMqC,KAAKyM,IAAK4G,EAAO/e,GAAKk3B,EAAK,GAEnC,OAAO7tB,CACT,EAEI6tB,EAAKz3B,EAAS6K,IAAIurB,GAAUA,EAAOnuB,OACnCyvB,EAAK13B,EAAS6K,IAAIwrB,GAAUA,EAAOpuB,OAIvC,OAHWuvB,EAAapB,EAAQqB,IAAOrB,EAAOnuB,OAAS,IAC5CuvB,EAAanB,EAAQqB,IAAOrB,EAAOpuB,OAAS,GAGzD,EAEApI,EAAQ83B,OAAS,SAASxkB,GAExB,OADAA,EAAIrT,EAAM0M,YAAY2G,cACLpF,MACRoF,EAEFlH,KAAKmO,KAAK,EAAIjH,IAAM,EAAIA,IAAM,CACvC,EAEAtT,EAAQ+3B,UAAY,SAASphB,GAE3B,IADAA,EAAI1W,EAAM0M,YAAYgK,cACLzI,MACf,OAAOyI,EAET,IAAIqhB,EAAM5rB,KAAKqN,IAAI,EAAI9C,GACvB,OAAQqhB,EAAM,IAAMA,EAAM,EAC5B,EAEAh4B,EAAQi4B,SAAW,SAAS3kB,EAAG4kB,EAAQC,GAIrC,GAHA7kB,EAAIrT,EAAM0M,YAAY2G,GACtB4kB,EAASj4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ0c,IAC9CC,EAASl4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ2c,IAC1Cl4B,EAAM2M,WAAW0G,EAAG4kB,EAAQC,GAC9B,OAAO7wB,EAAMQ,MAOf,IALA,IAAIswB,EAAQplB,EAAMkhB,KAAKiE,GACnBE,EAAQrlB,EAAMkhB,KAAKgE,GACnB7uB,EAAI8uB,EAAO/vB,OACXmC,EAAM,EACN6P,EAAM,EACD1Z,EAAI,EAAGA,EAAI2I,EAAG3I,IACrB6J,IAAQ4tB,EAAOz3B,GAAK03B,IAAUF,EAAOx3B,GAAK23B,GAC1Cje,GAAOhO,KAAKyM,IAAIsf,EAAOz3B,GAAK03B,EAAO,GAErC,IAAIne,EAAI1P,EAAM6P,EAEd,OADQie,EAAQpe,EAAIme,EACTne,EAAI3G,CACjB,EAEAtT,EAAQs4B,UAAY,SAAShV,EAAMiV,GAGjC,GAFAjV,EAAOrjB,EAAMkf,iBAAiBlf,EAAMub,QAAQ8H,IAC5CiV,EAAOt4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ+c,IACxCt4B,EAAM2M,WAAW0W,EAAMiV,GACzB,OAAOjxB,EAAMQ,MAKf,IAHA,IAAIuB,EAAIia,EAAKlb,OACT6R,EAAIse,EAAKnwB,OACTyX,EAAI,GACCnf,EAAI,EAAGA,GAAKuZ,EAAGvZ,IAAK,CAC3Bmf,EAAEnf,GAAK,EACP,IAAK,IAAIgI,EAAI,EAAGA,EAAIW,EAAGX,IACX,IAANhI,EACE4iB,EAAK5a,IAAM6vB,EAAK,KAClB1Y,EAAE,IAAM,GAEDnf,EAAIuZ,EACTqJ,EAAK5a,GAAK6vB,EAAK73B,EAAI,IAAM4iB,EAAK5a,IAAM6vB,EAAK73B,KAC3Cmf,EAAEnf,IAAM,GAEDA,IAAMuZ,GACXqJ,EAAK5a,GAAK6vB,EAAKte,EAAI,KACrB4F,EAAE5F,IAAM,EAIhB,CACA,OAAO4F,CACT,EAGA7f,EAAQyD,MAAQ,SAAS2P,GAEvB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAGM,IAAXA,GAIAtE,SAASsE,EAAQ,MAAQA,GAAUA,EAAS,EAHvC9L,EAAMiD,IAORyI,EAAMwlB,QAAQplB,EACvB,EAEApT,EAAQyD,MAAM5C,KAAO,SAASiH,EAAO4sB,EAAOC,EAAMC,GAChD,OAAyB,IAArB/Z,UAAUzS,OACLd,EAAMiQ,GAGXzP,EAAQ,GAAK4sB,GAAS,GAAKC,GAAQ,GAIjB,kBAAV7sB,GAAyC,kBAAV4sB,GAAwC,kBAATC,EAHjErtB,EAAMQ,MAOR8sB,EAAa5hB,EAAMylB,MAAM1D,IAAIjtB,EAAO4sB,EAAOC,GAAM,GAAQ3hB,EAAMylB,MAAMzD,IAAIltB,EAAO4sB,EAAOC,GAAM,EACtG,EAEA30B,EAAQyD,MAAM1C,IAAM,SAASk0B,EAAaP,EAAOC,GAC/C,OAAyB,IAArB9Z,UAAUzS,OACLd,EAAMiQ,GAGX0d,EAAc,GAAKA,EAAc,GAAKP,GAAS,GAAKC,GAAQ,EACvDrtB,EAAMiD,IAGa,kBAAhB0qB,GAA+C,kBAAVP,GAAwC,kBAATC,EACvErtB,EAAMQ,MAGRkL,EAAMylB,MAAMvD,IAAID,EAAaP,EAAOC,EAC7C,EAEA30B,EAAQ4D,QAAU,SAASwP,GAEzB,OADAA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEFJ,EAAM0lB,QAAQtlB,EACvB,EAEApT,EAAQ4D,QAAQrC,QAAU,SAAS+R,GACjC,OAAyB,IAArBuH,UAAUzS,OACLd,EAAMiQ,GAGXjE,GAAK,EACAhM,EAAMiD,IAGE,kBAAN+I,EACFhM,EAAMQ,MAGRkL,EAAM0lB,QAAQplB,EACvB,EAEAtT,EAAQ24B,MAAQ,SAASjiB,GAEvB,OADAA,EAAIzW,EAAM0M,YAAY+J,cACLxI,MACRwI,EAEF1D,EAAM4lB,OAAO7D,IAAIre,EAAG,EAAG,GAAK,EACrC,EAEA1W,EAAQ64B,QAAU,WAChB,IAAItd,EAAOtb,EAAMkf,iBAAiBlf,EAAMub,QAAQX,YAChD,OAAIU,aAAgBrN,MACXqN,EAEFvI,EAAM8lB,QAAQvd,EACvB,EAEAvb,EAAQ+4B,OAAS,SAASC,EAASC,EAASC,EAAOC,GAIjD,IADAH,EAAU/4B,EAAMkf,iBAAiB6Z,cACV9qB,MACrB,OAAO8qB,EAIT,IAAIt4B,EACJ,QAAgB6K,IAAZ0tB,EAEF,IADAA,EAAU,GACLv4B,EAAI,EAAGA,GAAKs4B,EAAQ5wB,OAAQ1H,IAC/Bu4B,EAAQlxB,KAAKrH,GAGjB,QAAc6K,IAAV2tB,EAEF,IADAA,EAAQ,GACHx4B,EAAI,EAAGA,GAAKs4B,EAAQ5wB,OAAQ1H,IAC/Bw4B,EAAMnxB,KAAKrH,GAMf,GAFAu4B,EAAUh5B,EAAMkf,iBAAiB8Z,GACjCC,EAAQj5B,EAAMkf,iBAAiB+Z,GAC3Bj5B,EAAM2M,WAAWqsB,EAASC,GAC5B,OAAO5xB,EAAMQ,WAIGyD,IAAd4tB,IACFA,GAAY,GAId,IAmBIxE,EACAD,EApBArrB,EAAI2vB,EAAQ5wB,OACZgxB,EAAQ,EACRC,EAAQ,EACRC,EAAS,EACTC,EAAS,EACb,IAAK74B,EAAI,EAAGA,EAAI2I,EAAG3I,IAAK,CACtB,IAAI4S,EAAI2lB,EAAQv4B,GACZiW,EAAIvK,KAAKmO,IAAIye,EAAQt4B,IACzB04B,GAAS9lB,EACT+lB,GAAS1iB,EACT2iB,GAAUhmB,EAAIqD,EACd4iB,GAAUjmB,EAAIA,CAChB,CACA8lB,GAAS/vB,EACTgwB,GAAShwB,EACTiwB,GAAUjwB,EACVkwB,GAAUlwB,EAKN8vB,EAEFzE,EAAQ2E,GADR1E,GAAQ2E,EAASF,EAAQC,IAAUE,EAASH,EAAQA,IAC7BA,GAEvBzE,EAAO2E,EAASC,EAChB7E,EAAQ,GAIV,IAAI8E,EAAQ,GACZ,IAAK94B,EAAI,EAAGA,EAAIw4B,EAAM9wB,OAAQ1H,IAC5B84B,EAAMzxB,KAAKqE,KAAKqN,IAAIib,EAAQC,EAAOuE,EAAMx4B,KAE3C,OAAO84B,CACT,EAEAx5B,EAAQy5B,QAAU,WAChB,IAAIvN,EAAQjsB,EAAMkf,iBAAiBlf,EAAMub,QAAQX,YACjD,GAAIqR,aAAiBhe,MACnB,OAAOge,EAIT,IAFA,IAAI7iB,EAAI6iB,EAAM9jB,OACVgS,EAAM,EACD1Z,EAAI,EAAGA,EAAI2I,EAAG3I,IACrB0Z,GAAO,EAAI8R,EAAMxrB,GAEnB,OAAO2I,EAAI+Q,CACb,EAEApa,EAAQ8D,QAAU,CAAC,EAEnB9D,EAAQ8D,QAAQjD,KAAO,SAASyS,EAAGjK,EAAGgN,EAAGiO,EAAGsQ,GAK1C,GAJAthB,EAAIrT,EAAM0M,YAAY2G,GACtBjK,EAAIpJ,EAAM0M,YAAYtD,GACtBgN,EAAIpW,EAAM0M,YAAY0J,GACtBiO,EAAIrkB,EAAM0M,YAAY2X,GAClBrkB,EAAM2M,WAAW0G,EAAGjK,EAAGgN,EAAGiO,GAC5B,OAAOhd,EAAMQ,MAGf,SAASktB,EAAI1hB,EAAGjK,EAAGgN,EAAGiO,GACpB,OAAOnkB,EAAS4qB,OAAO1U,EAAG/C,GAAKnT,EAAS4qB,OAAOzG,EAAIjO,EAAGhN,EAAIiK,GAAKnT,EAAS4qB,OAAOzG,EAAGjb,EACpF,CAUA,OAAQurB,EARR,SAAathB,EAAGjK,EAAGgN,EAAGiO,GAEpB,IADA,IAAI1c,EAAS,EACJlH,EAAI,EAAGA,GAAK4S,EAAG5S,IACtBkH,GAAUotB,EAAIt0B,EAAG2I,EAAGgN,EAAGiO,GAEzB,OAAO1c,CACT,CAEsBmtB,CAAIzhB,EAAGjK,EAAGgN,EAAGiO,GAAK0Q,EAAI1hB,EAAGjK,EAAGgN,EAAGiO,EACvD,EAEAtkB,EAAQ05B,UAAY,SAASV,EAASC,GAGpC,OAFAD,EAAU/4B,EAAMkf,iBAAiB6Z,GACjCC,EAAUh5B,EAAMkf,iBAAiB8Z,GAC7Bh5B,EAAM2M,WAAWosB,EAASC,GACrB3xB,EAAMQ,MAEXkxB,EAAQ5wB,SAAW6wB,EAAQ7wB,OACtBd,EAAMiQ,GAERvX,EAAQi4B,SAAS,EAAGe,EAASC,EACtC,EAEAj5B,EAAQ25B,KAAO,WACb,IAAIzN,EAAQjsB,EAAMkf,iBAAiBlf,EAAMub,QAAQX,YACjD,GAAIqR,aAAiBhe,MACnB,OAAOge,EAKT,IAHA,IAAIgI,EAAOlhB,EAAMkhB,KAAKhI,GAClB7iB,EAAI6iB,EAAM9jB,OACVwxB,EAAQ,EACHl5B,EAAI,EAAGA,EAAI2I,EAAG3I,IACrBk5B,GAASxtB,KAAKyM,IAAIqT,EAAMxrB,GAAKwzB,EAAM,GAGrC,OAAS7qB,GAAKA,EAAI,KAAQA,EAAI,IAAMA,EAAI,IAAMA,EAAI,KADlDuwB,GAAgBxtB,KAAKyM,IAAI7F,EAAM6mB,MAAM3N,GAAO,GAAO,IACc,GAAK7iB,EAAI,IAAMA,EAAI,KAAOA,EAAI,IAAMA,EAAI,GAC3G,EAEArJ,EAAQ8oB,MAAQ,SAASoD,EAAO5jB,GAG9B,OAFA4jB,EAAQjsB,EAAMkf,iBAAiBlf,EAAMub,QAAQ0Q,IAC7C5jB,EAAIrI,EAAM0M,YAAYrE,GAClBrI,EAAM2M,WAAWsf,EAAO5jB,GACnB4jB,EAGN5jB,EAAI,GAAK4jB,EAAM9jB,OAASE,EAClBhB,EAAMQ,MAGRokB,EAAM4N,MAAK,SAASrjB,EAAGwD,GAC5B,OAAOA,EAAIxD,CACb,IAAGnO,EAAI,EACT,EAEAtI,EAAQ+5B,OAAS,SAAS7B,EAAQC,GAGhC,GAFAD,EAASj4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ0c,IAC9CC,EAASl4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ2c,IAC1Cl4B,EAAM2M,WAAWsrB,EAAQC,GAC3B,OAAO7wB,EAAMQ,MAOf,IALA,IAAIuwB,EAAQrlB,EAAMkhB,KAAKgE,GACnBE,EAAQplB,EAAMkhB,KAAKiE,GACnB9uB,EAAI8uB,EAAO/vB,OACXmC,EAAM,EACN6P,EAAM,EACD1Z,EAAI,EAAGA,EAAI2I,EAAG3I,IACrB6J,IAAQ4tB,EAAOz3B,GAAK03B,IAAUF,EAAOx3B,GAAK23B,GAC1Cje,GAAOhO,KAAKyM,IAAIsf,EAAOz3B,GAAK03B,EAAO,GAErC,IAAI7hB,EAAIhM,EAAM6P,EAEd,MAAO,CAAC7D,EADA8hB,EAAQ9hB,EAAI6hB,EAEtB,EAMAp4B,EAAQg6B,OAAS,SAAS9B,EAAQC,GAGhC,GAFAD,EAASj4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ0c,IAC9CC,EAASl4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ2c,IAC1Cl4B,EAAM2M,WAAWsrB,EAAQC,GAC3B,OAAO7wB,EAAMQ,MAEf,IAAK,IAAIpH,EAAI,EAAGA,EAAIw3B,EAAO9vB,OAAQ1H,IACjCw3B,EAAOx3B,GAAK0L,KAAKmO,IAAI2d,EAAOx3B,IAG9B,IAAIkH,EAAS5H,EAAQ+5B,OAAO7B,EAAQC,GAGpC,OAFAvwB,EAAO,GAAKwE,KAAKuE,MAA0B,IAApBvE,KAAKqN,IAAI7R,EAAO,KAAa,IACpDA,EAAO,GAAKwE,KAAKuE,MAA0B,IAApBvE,KAAKqN,IAAI7R,EAAO,KAAa,IAC7CA,CACT,EAEA5H,EAAQgE,QAAU,CAAC,EAEnBhE,EAAQgE,QAAQnD,KAAO,SAASyS,EAAG4gB,EAAM5lB,EAAIsmB,GAI3C,OAHAthB,EAAIrT,EAAM0M,YAAY2G,GACtB4gB,EAAOj0B,EAAM0M,YAAYunB,GACzB5lB,EAAKrO,EAAM0M,YAAY2B,GACnBrO,EAAM2M,WAAW0G,EAAG4gB,EAAM5lB,GACrBhH,EAAMQ,MAEP8sB,EAAc5hB,EAAMinB,UAAUlF,IAAIzhB,EAAG4gB,EAAM5lB,GAAM0E,EAAMinB,UAAUjF,IAAI1hB,EAAG4gB,EAAM5lB,EACxF,EAEAtO,EAAQgE,QAAQjD,IAAM,SAASk0B,EAAaf,EAAM5lB,GAIhD,OAHA2mB,EAAch1B,EAAM0M,YAAYsoB,GAChCf,EAAOj0B,EAAM0M,YAAYunB,GACzB5lB,EAAKrO,EAAM0M,YAAY2B,GACnBrO,EAAM2M,WAAWqoB,EAAaf,EAAM5lB,GAC/BhH,EAAMQ,MAERkL,EAAMinB,UAAU/E,IAAID,EAAaf,EAAM5lB,EAChD,EAEAtO,EAAQ0oB,IAAM,WACZ,IAAIgO,EAAgBz2B,EAAMub,QAAQX,WAC9B8M,EAAY1nB,EAAM2nB,SAASsJ,WAAM3lB,EAAWmrB,GAChD,GAAI/O,EACF,OAAOA,EAET,IAAIuE,EAAQjsB,EAAMmyB,QAAQsE,GAC1B,OAAyB,IAAjBxK,EAAM9jB,OAAgB,EAAIgE,KAAKqe,IAAIyG,MAAM9kB,KAAM8f,EACzD,EAEAlsB,EAAQk6B,KAAO,WACb,IAAIxD,EAAgBz2B,EAAMub,QAAQX,WAC9B8M,EAAY1nB,EAAM2nB,SAASsJ,WAAM3lB,EAAWmrB,GAChD,GAAI/O,EACF,OAAOA,EAET,IAAIuE,EAAQjsB,EAAMk6B,qBAAqBzD,GAEvC,OAAyB,KADzBxK,EAAQA,EAAMkO,KAAI,SAAUtyB,GAAS,YAAkByD,IAAVzD,GAAiC,OAAVA,EAAkB,EAAIA,CAAO,KACnFM,OAAgB,EAAIgE,KAAKqe,IAAIyG,MAAM9kB,KAAM8f,EACzD,EAEAlsB,EAAQ6oB,OAAS,WACf,IAAI6N,EAAgBz2B,EAAMub,QAAQX,WAC9B8M,EAAY1nB,EAAM2nB,SAASsJ,WAAM3lB,EAAWmrB,GAChD,GAAI/O,EACF,OAAOA,EAET,IAAIuE,EAAQjsB,EAAMk6B,qBAAqBzD,GACnC9uB,EAASoL,EAAMqnB,OAAOnO,GAM1B,OAJIviB,MAAM/B,KACRA,EAASN,EAAMiD,KAGV3C,CACT,EAEA5H,EAAQ2oB,IAAM,WACZ,IAAI+N,EAAgBz2B,EAAMub,QAAQX,WAC9B8M,EAAY1nB,EAAM2nB,SAASsJ,WAAM3lB,EAAWmrB,GAChD,GAAI/O,EACF,OAAOA,EAET,IAAIuE,EAAQjsB,EAAMmyB,QAAQsE,GAC1B,OAAyB,IAAjBxK,EAAM9jB,OAAgB,EAAIgE,KAAKiD,IAAI6hB,MAAM9kB,KAAM8f,EACzD,EAEAlsB,EAAQs6B,KAAO,WACb,IAAI5D,EAAgBz2B,EAAMub,QAAQX,WAC9B8M,EAAY1nB,EAAM2nB,SAASsJ,WAAM3lB,EAAWmrB,GAChD,GAAI/O,EACF,OAAOA,EAET,IAAIuE,EAAQjsB,EAAMk6B,qBAAqBzD,GAEvC,OAAyB,KADzBxK,EAAQA,EAAMkO,KAAI,SAAUtyB,GAAS,YAAkByD,IAAVzD,GAAiC,OAAVA,EAAkB,EAAIA,CAAO,KACnFM,OAAgB,EAAIgE,KAAKiD,IAAI6hB,MAAM9kB,KAAM8f,EACzD,EAEAlsB,EAAQmE,KAAO,CAAC,EAEhBnE,EAAQmE,KAAKG,KAAO,WAElB,IAAI4nB,EAAQjsB,EAAMkf,iBAAiBlf,EAAMub,QAAQX,YACjD,GAAIqR,aAAiBhe,MACnB,OAAOge,EAQT,IANA,IAIIqO,EAJAlxB,EAAI6iB,EAAM9jB,OACV+rB,EAAQ,CAAC,EACTqG,EAAW,GACX/P,EAAM,EAGD/pB,EAAI,EAAGA,EAAI2I,EAAG3I,IAErByzB,EADAoG,EAAcrO,EAAMxrB,IACCyzB,EAAMoG,GAAepG,EAAMoG,GAAe,EAAI,EAC/DpG,EAAMoG,GAAe9P,IACvBA,EAAM0J,EAAMoG,GACZC,EAAW,IAETrG,EAAMoG,KAAiB9P,IACzB+P,EAASA,EAASpyB,QAAUmyB,GAGhC,OAAOC,CACT,EAEAx6B,EAAQmE,KAAKC,KAAO,WAClB,IAAI8nB,EAAQjsB,EAAMkf,iBAAiBlf,EAAMub,QAAQX,YACjD,OAAIqR,aAAiBhe,MACZge,EAEFlsB,EAAQmE,KAAKG,KAAK4nB,GAAO4N,MAAK,SAASrjB,EAAGwD,GAC/C,OAAOxD,EAAIwD,CACb,IAAG,EACL,EAEAja,EAAQyE,SAAW,CAAC,EAEpBzE,EAAQyE,SAAS5D,KAAO,SAASyH,EAAGuX,EAAGhX,EAAG+rB,GAIxC,OAHAtsB,EAAIrI,EAAM0M,YAAYrE,GACtBuX,EAAI5f,EAAM0M,YAAYkT,GACtBhX,EAAI5I,EAAM0M,YAAY9D,GAClB5I,EAAM2M,WAAWtE,EAAGuX,EAAGhX,GAClBvB,EAAMQ,MAEP8sB,EAAc5hB,EAAMynB,OAAO1F,IAAIzsB,EAAGuX,EAAGhX,GAAKmK,EAAMynB,OAAOzF,IAAI1sB,EAAGuX,EAAGhX,EAC3E,EAEA7I,EAAQiC,KAAO,CAAC,EAEhBjC,EAAQiC,KAAKpB,KAAO,SAASyS,EAAG4gB,EAAM5lB,EAAIsmB,GAIxC,OAHAthB,EAAIrT,EAAM0M,YAAY2G,GACtB4gB,EAAOj0B,EAAM0M,YAAYunB,GACzB5lB,EAAKrO,EAAM0M,YAAY2B,GACnBrO,EAAM2M,WAAW0G,EAAG4gB,EAAM5lB,GACrBhH,EAAMQ,MAEXwG,GAAM,EACDhH,EAAMiD,IAIPqqB,EAAc5hB,EAAM4lB,OAAO7D,IAAIzhB,EAAG4gB,EAAM5lB,GAAM0E,EAAM4lB,OAAO5D,IAAI1hB,EAAG4gB,EAAM5lB,EAClF,EAEAtO,EAAQiC,KAAKlB,IAAM,SAASk0B,EAAaf,EAAM5lB,GAI7C,OAHA2mB,EAAch1B,EAAM0M,YAAYsoB,GAChCf,EAAOj0B,EAAM0M,YAAYunB,GACzB5lB,EAAKrO,EAAM0M,YAAY2B,GACnBrO,EAAM2M,WAAWqoB,EAAaf,EAAM5lB,GAC/BhH,EAAMQ,MAERkL,EAAM4lB,OAAO1D,IAAID,EAAaf,EAAM5lB,EAC7C,EAEAtO,EAAQiC,KAAKM,EAAI,CAAC,EAElBvC,EAAQiC,KAAKM,EAAE1B,KAAO,SAAS6V,EAAGke,GAEhC,OADAle,EAAIzW,EAAM0M,YAAY+J,cACLxI,MACR5G,EAAMQ,MAEP8sB,EAAc5hB,EAAM4lB,OAAO7D,IAAIre,EAAG,EAAG,GAAK1D,EAAM4lB,OAAO5D,IAAIte,EAAG,EAAG,EAC3E,EAEA1W,EAAQiC,KAAKM,EAAExB,IAAM,SAASk0B,GAE5B,OADAA,EAAch1B,EAAM0M,YAAYsoB,cACL/mB,MAClB5G,EAAMQ,MAERkL,EAAM4lB,OAAO1D,IAAID,EAAa,EAAG,EAC1C,EAEAj1B,EAAQ06B,QAAU,SAASvC,EAAQD,GAGjC,GAFAA,EAASj4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ0c,IAC9CC,EAASl4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ2c,IAC1Cl4B,EAAM2M,WAAWsrB,EAAQC,GAC3B,OAAO7wB,EAAMQ,MAQf,IANA,IAAIswB,EAAQplB,EAAMkhB,KAAKiE,GACnBE,EAAQrlB,EAAMkhB,KAAKgE,GACnB7uB,EAAI8uB,EAAO/vB,OACXmC,EAAM,EACNowB,EAAO,EACPC,EAAO,EACFl6B,EAAI,EAAGA,EAAI2I,EAAG3I,IACrB6J,IAAQ4tB,EAAOz3B,GAAK03B,IAAUF,EAAOx3B,GAAK23B,GAC1CsC,GAAQvuB,KAAKyM,IAAIsf,EAAOz3B,GAAK03B,EAAO,GACpCwC,GAAQxuB,KAAKyM,IAAIqf,EAAOx3B,GAAK23B,EAAO,GAEtC,OAAO9tB,EAAM6B,KAAKwM,KAAK+hB,EAAOC,EAChC,EAEA56B,EAAQiF,WAAa,CAAC,EAEtBjF,EAAQiF,WAAWC,IAAM,SAASyC,EAAOW,GAGvC,GAFAX,EAAQ1H,EAAMkf,iBAAiBlf,EAAMub,QAAQ7T,IAC7CW,EAAIrI,EAAM0M,YAAYrE,GAClBrI,EAAM2M,WAAWjF,EAAOW,GAC1B,OAAOhB,EAAMQ,MAOf,IAAIuB,GALJ1B,EAAQA,EAAMmyB,MAAK,SAASrjB,EAAGwD,GAE3B,OAAOxD,EAAIwD,CAEf,KACc7R,OACd,GAAIE,EAAI,GAAKe,EAAI,IAAMf,EAAI,EAAI,GAAKe,EAAI,GACtC,OAAO/B,EAAMiD,IAEf,IAAIhC,EAAID,GAAKe,EAAI,GAAK,EAClBwxB,EAAKzuB,KAAKqB,MAAMlF,GACpB,OAAOtI,EAAM66B,WAAYvyB,IAAMsyB,EAAMlzB,EAAMY,GAAKZ,EAAMkzB,IAAOtyB,EAAIsyB,IAAOlzB,EAAMkzB,EAAK,GAAKlzB,EAAMkzB,IAChG,EAEA76B,EAAQiF,WAAWI,IAAM,SAASsC,EAAOW,GAGvC,GAFAX,EAAQ1H,EAAMkf,iBAAiBlf,EAAMub,QAAQ7T,IAC7CW,EAAIrI,EAAM0M,YAAYrE,GAClBrI,EAAM2M,WAAWjF,EAAOW,GAC1B,OAAOhB,EAAMQ,MAKf,IACIS,EAAID,IAJRX,EAAQA,EAAMmyB,MAAK,SAASrjB,EAAGwD,GAC7B,OAAOxD,EAAIwD,CACb,KACc7R,OACG,GACbyyB,EAAKzuB,KAAKqB,MAAMlF,GACpB,OAAOtI,EAAM66B,WAAYvyB,IAAMsyB,EAAMlzB,EAAMY,GAAKZ,EAAMkzB,IAAOtyB,EAAIsyB,IAAOlzB,EAAMkzB,EAAK,GAAKlzB,EAAMkzB,IAChG,EAEA76B,EAAQsF,YAAc,CAAC,EAEvBtF,EAAQsF,YAAYJ,IAAM,SAASyC,EAAO2L,EAAGqX,GAK3C,GAJAA,OAAiCpf,IAAjBof,EAA8B,EAAIA,EAClDhjB,EAAQ1H,EAAMkf,iBAAiBlf,EAAMub,QAAQ7T,IAC7C2L,EAAIrT,EAAM0M,YAAY2G,GACtBqX,EAAe1qB,EAAM0M,YAAYge,GAC7B1qB,EAAM2M,WAAWjF,EAAO2L,EAAGqX,GAC7B,OAAOrjB,EAAMQ,MAEfH,EAAQA,EAAMmyB,MAAK,SAASrjB,EAAGwD,GAC7B,OAAOxD,EAAIwD,CACb,IAQA,IAPA,IAAI8gB,EAAUjH,EAAKjB,OAAO3B,MAAM,KAAMvpB,GAClC0B,EAAI1B,EAAMS,OACVmO,EAAIwkB,EAAQ3yB,OACZuW,EAAQvS,KAAKyM,IAAI,GAAI8R,GACrB/iB,EAAS,EACT6e,GAAQ,EACR/lB,EAAI,GACA+lB,GAAS/lB,EAAI6V,GACfjD,IAAMynB,EAAQr6B,IAChBkH,GAAUD,EAAMuP,QAAQ6jB,EAAQr6B,IAAM,IAAM2I,EAAI,GAChDod,GAAQ,GACCnT,GAAKynB,EAAQr6B,KAAO4S,EAAIynB,EAAQr6B,EAAI,IAAMA,IAAM6V,EAAI,KAC7D3O,GAAUD,EAAMuP,QAAQ6jB,EAAQr6B,IAAM,GAAK4S,EAAIynB,EAAQr6B,KAAOq6B,EAAQr6B,EAAI,GAAKq6B,EAAQr6B,MAAQ2I,EAAI,GACnGod,GAAQ,GAEV/lB,IAEF,OAAO0L,KAAKqB,MAAM7F,EAAS+W,GAASA,CACtC,EAEA3e,EAAQsF,YAAYD,IAAM,SAASsC,EAAO2L,EAAGqX,GAK3C,GAJAA,OAAiCpf,IAAjBof,EAA8B,EAAIA,EAClDhjB,EAAQ1H,EAAMkf,iBAAiBlf,EAAMub,QAAQ7T,IAC7C2L,EAAIrT,EAAM0M,YAAY2G,GACtBqX,EAAe1qB,EAAM0M,YAAYge,GAC7B1qB,EAAM2M,WAAWjF,EAAO2L,EAAGqX,GAC7B,OAAOrjB,EAAMQ,MAEfH,EAAQA,EAAMmyB,MAAK,SAASrjB,EAAGwD,GAC7B,OAAOxD,EAAIwD,CACb,IAQA,IAPA,IAAI8gB,EAAUjH,EAAKjB,OAAO3B,MAAM,KAAMvpB,GAClC0B,EAAI1B,EAAMS,OACVmO,EAAIwkB,EAAQ3yB,OACZuW,EAAQvS,KAAKyM,IAAI,GAAI8R,GACrB/iB,EAAS,EACT6e,GAAQ,EACR/lB,EAAI,GACA+lB,GAAS/lB,EAAI6V,GACfjD,IAAMynB,EAAQr6B,IAChBkH,EAASD,EAAMuP,QAAQ6jB,EAAQr6B,KAAO2I,EAAI,GAC1Cod,GAAQ,GACCnT,GAAKynB,EAAQr6B,KAAO4S,EAAIynB,EAAQr6B,EAAI,IAAMA,IAAM6V,EAAI,KAC7D3O,GAAUD,EAAMuP,QAAQ6jB,EAAQr6B,KAAO4S,EAAIynB,EAAQr6B,KAAOq6B,EAAQr6B,EAAI,GAAKq6B,EAAQr6B,MAAQ2I,EAAI,GAC/Fod,GAAQ,GAEV/lB,IAEF,OAAO0L,KAAKqB,MAAM7F,EAAS+W,GAASA,CACtC,EAEA3e,EAAQg7B,OAAS,SAAS5nB,EAAQ4X,GAGhC,OAFA5X,EAASnT,EAAM0M,YAAYyG,GAC3B4X,EAAgB/qB,EAAM0M,YAAYqe,GAC9B/qB,EAAM2M,WAAWwG,EAAQ4X,GACpB1jB,EAAMQ,MAER3H,EAAS8qB,KAAK7X,GAAUjT,EAAS8qB,KAAK7X,EAAS4X,EACxD,EAEAhrB,EAAQi7B,aAAe,SAAS7nB,EAAQ4X,GAGtC,OAFA5X,EAASnT,EAAM0M,YAAYyG,GAC3B4X,EAAgB/qB,EAAM0M,YAAYqe,GAC9B/qB,EAAM2M,WAAWwG,EAAQ4X,GACpB1jB,EAAMQ,MAERsE,KAAKyM,IAAIzF,EAAQ4X,EAC1B,EAEAhrB,EAAQk7B,IAAM,SAAS5nB,GAErB,OADAA,EAAIrT,EAAM0M,YAAY2G,cACLpF,MACR5G,EAAMQ,MAERsE,KAAKqN,KAAK,GAAMnG,EAAIA,GAz0Cf,kBA00Cd,EAEAtT,EAAQyF,QAAU,CAAC,EAEnBzF,EAAQyF,QAAQ5E,KAAO,SAASyS,EAAG4gB,EAAMU,GAGvC,OAFAthB,EAAIrT,EAAM0M,YAAY2G,GACtB4gB,EAAOj0B,EAAM0M,YAAYunB,GACrBj0B,EAAM2M,WAAW0G,EAAG4gB,GACf5sB,EAAMQ,MAEP8sB,EAAc5hB,EAAMmoB,QAAQpG,IAAIzhB,EAAG4gB,GAAQlhB,EAAMmoB,QAAQnG,IAAI1hB,EAAG4gB,EAC1E,EAEAl0B,EAAQo7B,KAAO,SAASlP,EAAO+I,EAAaoG,EAAOC,GACjD,QAAc/vB,IAAV8vB,EACF,OAAO,EAQT,GANAC,OAAmB/vB,IAAV+vB,EAAuBD,EAAQC,EAExCpP,EAAQjsB,EAAMkf,iBAAiBlf,EAAMub,QAAQ0Q,IAC7C+I,EAAch1B,EAAMkf,iBAAiBlf,EAAMub,QAAQyZ,IACnDoG,EAAQp7B,EAAM0M,YAAY0uB,GAC1BC,EAAQr7B,EAAM0M,YAAY2uB,GACtBr7B,EAAM2M,WAAWsf,EAAO+I,EAAaoG,EAAOC,GAC9C,OAAOh0B,EAAMQ,MAGf,GAAIuzB,IAAUC,EACZ,OAAQpP,EAAMhV,QAAQmkB,IAAU,EAAKpG,EAAY/I,EAAMhV,QAAQmkB,IAAU,EAQ3E,IALA,IAAIE,EAASrP,EAAM4N,MAAK,SAASrjB,EAAGwD,GAClC,OAAOxD,EAAIwD,CACb,IACI5Q,EAAIkyB,EAAOnzB,OACXR,EAAS,EACJlH,EAAI,EAAGA,EAAI2I,EAAG3I,IACjB66B,EAAO76B,IAAM26B,GAASE,EAAO76B,IAAM46B,IACrC1zB,GAAUqtB,EAAY/I,EAAMhV,QAAQqkB,EAAO76B,MAG/C,OAAOkH,CACT,EAEA5H,EAAQ2F,SAAW,CAAC,EAEpB3F,EAAQ2F,SAAST,IAAM,SAASgnB,EAAOsP,GAGrC,GAFAtP,EAAQjsB,EAAMkf,iBAAiBlf,EAAMub,QAAQ0Q,IAC7CsP,EAAQv7B,EAAM0M,YAAY6uB,GACtBv7B,EAAM2M,WAAWsf,EAAOsP,GAC1B,OAAOl0B,EAAMQ,MAEf,OAAQ0zB,GACN,KAAK,EACH,OAAOx7B,EAAQiF,WAAWC,IAAIgnB,EAAO,KACvC,KAAK,EACH,OAAOlsB,EAAQiF,WAAWC,IAAIgnB,EAAO,IACvC,KAAK,EACH,OAAOlsB,EAAQiF,WAAWC,IAAIgnB,EAAO,KACvC,QACE,OAAO5kB,EAAMiD,IAEnB,EAEAvK,EAAQ2F,SAASN,IAAM,SAAS6mB,EAAOsP,GAGrC,GAFAtP,EAAQjsB,EAAMkf,iBAAiBlf,EAAMub,QAAQ0Q,IAC7CsP,EAAQv7B,EAAM0M,YAAY6uB,GACtBv7B,EAAM2M,WAAWsf,EAAOsP,GAC1B,OAAOl0B,EAAMQ,MAEf,OAAQ0zB,GACN,KAAK,EACH,OAAOx7B,EAAQiF,WAAWI,IAAI6mB,EAAO,KACvC,KAAK,EACH,OAAOlsB,EAAQiF,WAAWI,IAAI6mB,EAAO,IACvC,KAAK,EACH,OAAOlsB,EAAQiF,WAAWI,IAAI6mB,EAAO,KACvC,QACE,OAAO5kB,EAAMiD,IAEnB,EAEAvK,EAAQ8F,KAAO,CAAC,EAEhB9F,EAAQ8F,KAAKG,IAAM,SAASmN,EAAQ8Y,EAAOuP,GAGzC,GAFAroB,EAASnT,EAAM0M,YAAYyG,GAC3B8Y,EAAQjsB,EAAMkf,iBAAiBlf,EAAMub,QAAQ0Q,IACzCjsB,EAAM2M,WAAWwG,EAAQ8Y,GAC3B,OAAO5kB,EAAMQ,MAaf,IATA,IAAIgyB,GADJ2B,EAAQA,IAAS,GACI,SAAShlB,EAAGwD,GAC/B,OAAOxD,EAAIwD,CACb,EAAI,SAASxD,EAAGwD,GACd,OAAOA,EAAIxD,CACb,EAGIrO,GAFJ8jB,GAPAA,EAAQjsB,EAAMub,QAAQ0Q,IAOR4N,KAAKA,IAEA1xB,OACf+rB,EAAQ,EACHzzB,EAAI,EAAGA,EAAI0H,EAAQ1H,IACtBwrB,EAAMxrB,KAAO0S,GACf+gB,IAIJ,OAAQA,EAAQ,GAAM,EAAIjI,EAAMhV,QAAQ9D,GAAU+gB,EAAQ,GAAK,EAAIjI,EAAMhV,QAAQ9D,GAAU,CAC7F,EAEApT,EAAQ8F,KAAKC,GAAK,SAASqN,EAAQ8Y,EAAOuP,GAGxC,GAFAroB,EAASnT,EAAM0M,YAAYyG,GAC3B8Y,EAAQjsB,EAAMkf,iBAAiBlf,EAAMub,QAAQ0Q,IACzCjsB,EAAM2M,WAAWwG,EAAQ8Y,GAC3B,OAAO5kB,EAAMQ,MAGf,IAAIgyB,GADJ2B,EAAQA,IAAS,GACI,SAAShlB,EAAGwD,GAC/B,OAAOxD,EAAIwD,CACb,EAAI,SAASxD,EAAGwD,GACd,OAAOA,EAAIxD,CACb,EAEA,OADAyV,EAAQA,EAAM4N,KAAKA,IACN5iB,QAAQ9D,GAAU,CACjC,EAEApT,EAAQ07B,IAAM,SAASzF,EAAQzsB,GAC7B,OAAyB,IAArBqR,UAAUzS,OACLd,EAAMiQ,GAGX/N,EAAQ,EACHlC,EAAMiD,IAGT0rB,aAAkBzlB,OAA4B,kBAAVhH,EAIpB,IAAlBysB,EAAO7tB,OAIJ4K,EAAMgU,IAAIiP,EAAQzsB,QAJzB,EAHSlC,EAAMQ,KAQjB,EAEA9H,EAAQ27B,KAAO,SAAS1F,GACtB,OAAyB,IAArBpb,UAAUzS,OACLd,EAAMiQ,GAGT0e,aAAkBzlB,MAIF,IAAlBylB,EAAO7tB,OACF,EAGF4K,EAAM4oB,KAAK3F,GAPT3uB,EAAMQ,KAQjB,EAEA9H,EAAQ67B,IAAM,SAAS1D,EAAQD,GAG7B,OAFAC,EAASl4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ2c,IAC9CD,EAASj4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ0c,IAC1Cj4B,EAAM2M,WAAWurB,EAAQD,GACpB5wB,EAAMQ,MAERsE,KAAKyM,IAAI7Y,EAAQ06B,QAAQvC,EAAQD,GAAS,EACnD,EAEAl4B,EAAQoG,KAAO,WACb,IAAI8lB,EAAQjsB,EAAMkf,iBAAiBlf,EAAMub,QAAQX,YACjD,GAAIqR,aAAiBhe,MACnB,OAAOge,EAKT,IAHA,IAAIgI,EAAOlhB,EAAMkhB,KAAKhI,GAClB7iB,EAAI6iB,EAAM9jB,OACVwxB,EAAQ,EACHl5B,EAAI,EAAGA,EAAI2I,EAAG3I,IACrBk5B,GAASxtB,KAAKyM,IAAIqT,EAAMxrB,GAAKwzB,EAAM,GAErC,OAAO7qB,EAAIuwB,IAAUvwB,EAAI,IAAMA,EAAI,GAAK+C,KAAKyM,IAAI7F,EAAM6mB,MAAM3N,GAAO,GAAO,GAC7E,EAEAlsB,EAAQoG,KAAKhE,EAAI,WACf,IAAI8pB,EAAQjsB,EAAMkf,iBAAiBlf,EAAMub,QAAQX,YACjD,GAAIqR,aAAiBhe,MACnB,OAAOge,EAMT,IAJA,IAAIgI,EAAOlhB,EAAMkhB,KAAKhI,GAClB7iB,EAAI6iB,EAAM9jB,OACV0zB,EAAK,EACLC,EAAK,EACAr7B,EAAI,EAAGA,EAAI2I,EAAG3I,IACrBq7B,GAAM3vB,KAAKyM,IAAIqT,EAAMxrB,GAAKwzB,EAAM,GAChC4H,GAAM1vB,KAAKyM,IAAIqT,EAAMxrB,GAAKwzB,EAAM,GAIlC,OADA4H,GAAUzyB,GADV0yB,GAAU1yB,GAEE+C,KAAKyM,IAAIijB,EAAI,IAC3B,EAEA97B,EAAQg8B,MAAQ,SAAS9D,EAAQC,GAG/B,GAFAD,EAASj4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ0c,IAC9CC,EAASl4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ2c,IAC1Cl4B,EAAM2M,WAAWsrB,EAAQC,GAC3B,OAAO7wB,EAAMQ,MAOf,IALA,IAAIswB,EAAQplB,EAAMkhB,KAAKiE,GACnBE,EAAQrlB,EAAMkhB,KAAKgE,GACnB7uB,EAAI8uB,EAAO/vB,OACXmC,EAAM,EACN6P,EAAM,EACD1Z,EAAI,EAAGA,EAAI2I,EAAG3I,IACrB6J,IAAQ4tB,EAAOz3B,GAAK03B,IAAUF,EAAOx3B,GAAK23B,GAC1Cje,GAAOhO,KAAKyM,IAAIsf,EAAOz3B,GAAK03B,EAAO,GAErC,OAAO7tB,EAAM6P,CACf,EAEApa,EAAQ+oB,MAAQ,SAASmD,EAAO5jB,GAG9B,OAFA4jB,EAAQjsB,EAAMkf,iBAAiBlf,EAAMub,QAAQ0Q,IAC7C5jB,EAAIrI,EAAM0M,YAAYrE,GAClBrI,EAAM2M,WAAWsf,EAAO5jB,GACnB4jB,EAEFA,EAAM4N,MAAK,SAASrjB,EAAGwD,GAC5B,OAAOxD,EAAIwD,CACb,IAAG3R,EAAI,EACT,EAEAtI,EAAQi8B,YAAc,SAAS3oB,EAAG4gB,EAAM5lB,GAItC,OAHAgF,EAAIrT,EAAM0M,YAAY2G,GACtB4gB,EAAOj0B,EAAM0M,YAAYunB,GACzB5lB,EAAKrO,EAAM0M,YAAY2B,GACnBrO,EAAM2M,WAAW0G,EAAG4gB,EAAM5lB,GACrBhH,EAAMQ,OAEPwL,EAAI4gB,GAAQ5lB,CACtB,EAEAtO,EAAQqG,MAAQ,CAAC,EAEjBrG,EAAQqG,MAAMjE,EAAI,WAChB,IAAI85B,EAAIl8B,EAAQ6G,IAAIzE,EAAE8uB,MAAMnhB,KAAM8K,WAC9BjT,EAASwE,KAAKwM,KAAKsjB,GAMvB,OAJIvyB,MAAM/B,KACRA,EAASN,EAAMiD,KAGV3C,CACT,EAEA5H,EAAQqG,MAAM9D,EAAI,WAChB,IAAI25B,EAAIl8B,EAAQ6G,IAAItE,EAAE2uB,MAAMnhB,KAAM8K,WAGlC,OAFazO,KAAKwM,KAAKsjB,EAGzB,EAEAl8B,EAAQm8B,OAAS,WACf,IAAID,EAAIl8B,EAAQo8B,KAAKlL,MAAMnhB,KAAM8K,WAGjC,OAFazO,KAAKwM,KAAKsjB,EAGzB,EAEAl8B,EAAQq8B,QAAU,WAChB,IAAIH,EAAIl8B,EAAQs8B,MAAMpL,MAAMnhB,KAAM8K,WAC9BjT,EAASwE,KAAKwM,KAAKsjB,GAMvB,OAJIvyB,MAAM/B,KACRA,EAASN,EAAMiD,KAGV3C,CACT,EAGA5H,EAAQu8B,MAAQ,SAASrE,EAAQC,GAG/B,GAFAD,EAASj4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ0c,IAC9CC,EAASl4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ2c,IAC1Cl4B,EAAM2M,WAAWsrB,EAAQC,GAC3B,OAAO7wB,EAAMQ,MAQf,IANA,IAAIswB,EAAQplB,EAAMkhB,KAAKiE,GACnBE,EAAQrlB,EAAMkhB,KAAKgE,GACnB7uB,EAAI8uB,EAAO/vB,OACXo0B,EAAM,EACNjyB,EAAM,EACN6P,EAAM,EACD1Z,EAAI,EAAGA,EAAI2I,EAAG3I,IACrB87B,GAAOpwB,KAAKyM,IAAIqf,EAAOx3B,GAAK23B,EAAO,GACnC9tB,IAAQ4tB,EAAOz3B,GAAK03B,IAAUF,EAAOx3B,GAAK23B,GAC1Cje,GAAOhO,KAAKyM,IAAIsf,EAAOz3B,GAAK03B,EAAO,GAErC,OAAOhsB,KAAKwM,MAAM4jB,EAAMjyB,EAAMA,EAAM6P,IAAQ/Q,EAAI,GAClD,EAEArJ,EAAQy8B,UAAY,SAASxG,GAC3B,OAAKA,EAGEjjB,EAAMmU,UAAU8O,GAFd3uB,EAAMiQ,EAGjB,EAEAvX,EAAQyG,EAAIwM,EAAKxM,EAEjBzG,EAAQyG,EAAE5F,KAAO,SAAUyS,EAAGuO,EAAI6a,GAChC,OAAc,IAAVA,GAAyB,IAAVA,EACVp1B,EAAMiD,IAGG,IAAVmyB,EAAe18B,EAAQyG,EAAE5F,KAAKc,GAAG2R,EAAGuO,GAAM7hB,EAAQyG,EAAE5F,KAAK,MAAMyS,EAAGuO,EAC5E,EAEA7hB,EAAQyG,EAAE5F,KAAK,MAAQ,SAASyS,EAAGuO,GACjC,OAAyB,IAArBhH,UAAUzS,OACLd,EAAMiQ,GAGXjE,EAAI,GAAKuO,EAAK,EACTva,EAAMiD,IAGG,kBAAN+I,GAAkC,kBAAPuO,EAC9Bva,EAAMQ,MAG2B,GAAlC,EAAIkL,EAAM2pB,SAAS5H,IAAIzhB,EAAIuO,GACrC,EAEA7hB,EAAQyG,EAAE5F,KAAKc,GAAK,SAAS2R,EAAGuO,GAC9B,OAAyB,IAArBhH,UAAUzS,OACLd,EAAMiQ,GAGXjE,EAAI,GAAKuO,EAAK,EACTva,EAAMiD,IAGG,kBAAN+I,GAAkC,kBAAPuO,EAC9Bva,EAAMQ,MAGR,EAAIkL,EAAM2pB,SAAS5H,IAAIzhB,EAAIuO,EACpC,EAEA7hB,EAAQyG,EAAE1F,IAAM,SAASk0B,EAAapT,GAGpC,OAFAoT,EAAch1B,EAAM0M,YAAYsoB,GAChCpT,EAAK5hB,EAAM0M,YAAYkV,GACnB5hB,EAAM2M,WAAWqoB,EAAapT,GACzBva,EAAMQ,MAERkL,EAAM2pB,SAASzH,IAAID,EAAapT,EACzC,EAEA7hB,EAAQyG,EAAE1F,IAAI,MAAQ,SAASk0B,EAAapT,GAG1C,OAFAoT,EAAch1B,EAAM0M,YAAYsoB,GAChCpT,EAAK5hB,EAAM0M,YAAYkV,GACnBoT,GAAe,GAAKA,EAAc,GAAKpT,EAAK,EACvCva,EAAMiD,IAEXtK,EAAM2M,WAAWqoB,EAAapT,GACzBva,EAAMQ,MAERsE,KAAK6F,IAAIe,EAAM2pB,SAASzH,IAAID,EAAY,EAAGpT,GACpD,EAIA7hB,EAAQyG,EAAE1E,KAAO,SAASo2B,EAAQD,GAGhC,GAFAC,EAASl4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ2c,IAC9CD,EAASj4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ0c,IAC1Cj4B,EAAM2M,WAAWurB,EAAQD,GAC3B,OAAO5wB,EAAMQ,MAGf,IAIIpH,EAJAk8B,EAAS5pB,EAAMkhB,KAAKiE,GACpB0E,EAAS7pB,EAAMkhB,KAAKgE,GACpB4E,EAAM,EACNC,EAAM,EAGV,IAAKr8B,EAAI,EAAGA,EAAIy3B,EAAO/vB,OAAQ1H,IAC7Bo8B,GAAO1wB,KAAKyM,IAAIsf,EAAOz3B,GAAKk8B,EAAQ,GAEtC,IAAKl8B,EAAI,EAAGA,EAAIw3B,EAAO9vB,OAAQ1H,IAC7Bq8B,GAAO3wB,KAAKyM,IAAIqf,EAAOx3B,GAAKm8B,EAAQ,GAGtCC,GAAa3E,EAAO/vB,OAAO,EAC3B20B,GAAa7E,EAAO9vB,OAAO,EAE3B,IAAIuS,EAAIvO,KAAK6F,IAAI2qB,EAASC,GAAUzwB,KAAKwM,KAAKkkB,EAAI3E,EAAO/vB,OAAS20B,EAAI7E,EAAO9vB,QAE7E,OAAOpI,EAAQyG,EAAE5F,KAAK,MAAM8Z,EAAGwd,EAAO/vB,OAAO8vB,EAAO9vB,OAAO,EAC7D,EAEApI,EAAQg9B,MAAQ,SAAS9E,EAAQC,EAAQ8E,GAIvC,GAHA/E,EAASj4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ0c,IAC9CC,EAASl4B,EAAMkf,iBAAiBlf,EAAMub,QAAQ2c,IAC9C8E,EAAah9B,EAAMkf,iBAAiBlf,EAAMub,QAAQyhB,IAC9Ch9B,EAAM2M,WAAWsrB,EAAQC,EAAQ8E,GACnC,OAAO31B,EAAMQ,MAEf,IAAIo1B,EAASl9B,EAAQ+5B,OAAO7B,EAAQC,GAChC5hB,EAAI2mB,EAAO,GACXjjB,EAAIijB,EAAO,GACXt1B,EAAS,GAMb,OAJAq1B,EAAWE,SAAQ,SAAS7pB,GAC1B1L,EAAOG,KAAKwO,EAAIjD,EAAI2G,EACtB,IAEOrS,CACT,EAEA5H,EAAQo9B,SAAW,SAASlR,EAAOmR,GAGjC,GAFAnR,EAAQjsB,EAAMkf,iBAAiBlf,EAAMub,QAAQ0Q,IAC7CmR,EAAUp9B,EAAM0M,YAAY0wB,GACxBp9B,EAAM2M,WAAWsf,EAAOmR,GAC1B,OAAO/1B,EAAMQ,MAEf,IAAIw1B,EAAOn9B,EAASiD,MAAM8oB,EAAM9jB,OAASi1B,EAAS,GAAK,EACvD,OAAOrqB,EAAMkhB,KAAKj0B,EAAMge,QAAQhe,EAAM6J,KAAKoiB,EAAM4N,MAAK,SAASrjB,EAAGwD,GAChE,OAAOxD,EAAIwD,CACb,IAAIqjB,GAAOA,GACb,EAEAt9B,EAAQ6G,IAAM,CAAC,EAEf7G,EAAQ6G,IAAIzE,EAAI,WAMd,IALA,IAIIwF,EAJAskB,EAAQjsB,EAAMmyB,QAAQnyB,EAAMub,QAAQX,YACpCxR,EAAI6iB,EAAM9jB,OACVwxB,EAAQ,EACR1F,EAAOl0B,EAAQyoB,QAAQyD,GAElBxrB,EAAI,EAAGA,EAAI2I,EAAG3I,IACrBk5B,GAASxtB,KAAKyM,IAAIqT,EAAMxrB,GAAKwzB,EAAM,GAQrC,OANAtsB,EAASgyB,EAAQvwB,EAEbM,MAAM/B,KACRA,EAASN,EAAMiD,KAGV3C,CACT,EAEA5H,EAAQ6G,IAAItE,EAAI,WAKd,IAJA,IAAI2pB,EAAQjsB,EAAMmyB,QAAQnyB,EAAMub,QAAQX,YACpCxR,EAAI6iB,EAAM9jB,OACVwxB,EAAQ,EACR1F,EAAOl0B,EAAQyoB,QAAQyD,GAClBxrB,EAAI,EAAGA,EAAI2I,EAAG3I,IACrBk5B,GAASxtB,KAAKyM,IAAIqT,EAAMxrB,GAAKwzB,EAAM,GAErC,OAAO0F,GAASvwB,EAAI,EACtB,EAEArJ,EAAQo8B,KAAO,WAMb,IALA,IAAIlQ,EAAQjsB,EAAMub,QAAQX,WACtBxR,EAAI6iB,EAAM9jB,OACVwxB,EAAQ,EACRzF,EAAQ,EACRD,EAAOl0B,EAAQo0B,SAASlI,GACnBxrB,EAAI,EAAGA,EAAI2I,EAAG3I,IAAK,CAC1B,IAAImzB,EAAK3H,EAAMxrB,GAEbk5B,GADgB,kBAAP/F,EACAznB,KAAKyM,IAAIgb,EAAKK,EAAM,IACb,IAAPL,EACAznB,KAAKyM,IAAI,EAAIqb,EAAM,GAEnB9nB,KAAKyM,IAAI,EAAIqb,EAAM,GAGnB,OAAPL,GACFM,GAEJ,CACA,OAAOyF,GAASzF,EAAQ,EAC1B,EAEAn0B,EAAQs8B,MAAQ,WAOd,IANA,IAKI10B,EALAskB,EAAQjsB,EAAMub,QAAQX,WACtBxR,EAAI6iB,EAAM9jB,OACVwxB,EAAQ,EACRzF,EAAQ,EACRD,EAAOl0B,EAAQo0B,SAASlI,GAEnBxrB,EAAI,EAAGA,EAAI2I,EAAG3I,IAAK,CAC1B,IAAImzB,EAAK3H,EAAMxrB,GAEbk5B,GADgB,kBAAP/F,EACAznB,KAAKyM,IAAIgb,EAAKK,EAAM,IACb,IAAPL,EACAznB,KAAKyM,IAAI,EAAIqb,EAAM,GAEnB9nB,KAAKyM,IAAI,EAAIqb,EAAM,GAGnB,OAAPL,GACFM,GAEJ,CAOA,OANAvsB,EAASgyB,EAAQzF,EAEbxqB,MAAM/B,KACRA,EAASN,EAAMiD,KAGV3C,CACT,EAEA5H,EAAQgH,QAAU,CAAC,EAEnBhH,EAAQgH,QAAQnG,KAAO,SAASyS,EAAGohB,EAAOC,EAAMC,GAI9C,OAHAthB,EAAIrT,EAAM0M,YAAY2G,GACtBohB,EAAQz0B,EAAM0M,YAAY+nB,GAC1BC,EAAO10B,EAAM0M,YAAYgoB,GACrB10B,EAAM2M,WAAW0G,EAAGohB,EAAOC,GACtBrtB,EAAMQ,MAEP8sB,EAAc,EAAIxoB,KAAKqN,KAAKrN,KAAKyM,IAAIvF,EAAIqhB,EAAMD,IAAUtoB,KAAKyM,IAAIvF,EAAGohB,EAAQ,GAAKtoB,KAAKqN,KAAKrN,KAAKyM,IAAIvF,EAAIqhB,EAAMD,IAAUA,EAAQtoB,KAAKyM,IAAI8b,EAAMD,EAC1J,EAEA10B,EAAQqH,EAAI,CAAC,EAEbrH,EAAQqH,EAAEtF,KAAO,SAASmqB,EAAO5Y,EAAGhF,GAGlC,GAFA4d,EAAQjsB,EAAMkf,iBAAiBlf,EAAMub,QAAQ0Q,IAC7C5Y,EAAIrT,EAAM0M,YAAY2G,GAClBrT,EAAM2M,WAAWsf,EAAO5Y,GAC1B,OAAOhM,EAAMQ,MAGfwG,EAAKA,GAAMtO,EAAQqG,MAAM9D,EAAE2pB,GAC3B,IAAI7iB,EAAI6iB,EAAM9jB,OACd,OAAO,EAAIpI,EAAQiC,KAAKM,EAAE1B,MAAMb,EAAQyoB,QAAQyD,GAAS5Y,IAAMhF,EAAKlC,KAAKwM,KAAKvP,KAAK,EACrF,mBC92DA,IAAIpJ,EAAQL,EAAQ,OAChB0H,EAAQ1H,EAAQ,OAGpBI,EAAQu9B,IAAM,WACZ,MAAM,IAAIrvB,MAAM,yBAClB,EAGAlO,EAAQw9B,SAAW,WACjB,MAAM,IAAItvB,MAAM,8BAClB,EAEAlO,EAAQy9B,KAAO,SAASrqB,GAEtB,OAAe,KADfA,EAASnT,EAAM0M,YAAYyG,IAElB9L,EAAMQ,MAEXsL,aAAkBlF,MACbkF,EAEFqb,OAAOiP,aAAatqB,EAC7B,EAEApT,EAAQ29B,MAAQ,SAAS1qB,GACvB,GAAIhT,EAAM2M,WAAWqG,GACnB,OAAOA,EAIT,OAFAA,EAAOA,GAAQ,IAEH8F,QADH,aACe,GAC1B,EAEA/Y,EAAQ49B,KAAO,SAAS3qB,GACtB,GAAIhT,EAAM2M,WAAWqG,GACnB,OAAOA,EAGT,IAAIrL,GADJqL,EAAOA,GAAQ,IACG4qB,WAAW,GAK7B,OAHIl0B,MAAM/B,KACRA,EAASN,EAAMQ,OAEVF,CACT,EAEA5H,EAAQ89B,YAAc,WACpB,IAAIviB,EAAOtb,EAAMub,QAAQX,WACrB8M,EAAY1nB,EAAM2nB,SAASsJ,WAAM3lB,EAAWgQ,GAChD,GAAIoM,EACF,OAAOA,EAGT,IADA,IAAIoW,EAAY,GACRA,EAAYxiB,EAAKrE,SAAQ,KAAU,GACzCqE,EAAKwiB,GAAa,OAIpB,IADA,IAAIC,EAAa,GACTA,EAAaziB,EAAKrE,SAAQ,KAAW,GAC3CqE,EAAKyiB,GAAc,QAGrB,OAAOziB,EAAKmP,KAAK,GACnB,EAEA1qB,EAAQi+B,OAASj+B,EAAQ89B,YAGzB99B,EAAQk+B,KAAO,WACb,MAAM,IAAIhwB,MAAM,0BAClB,EAGAlO,EAAQm+B,OAAS,WACf,MAAM,IAAIjwB,MAAM,4BAClB,EAEAlO,EAAQo+B,MAAQ,SAASC,EAAOC,GAC9B,GAAyB,IAArBzjB,UAAUzS,OACZ,OAAOd,EAAMiQ,GAEf,IAAIoQ,EAAY1nB,EAAM2nB,SAASyW,EAAOC,GACtC,OAAI3W,IAGJ0W,EAAQp+B,EAAMowB,YAAYgO,OAC1BC,EAAQr+B,EAAMowB,YAAYiO,GAE5B,EAEAt+B,EAAQu+B,KAAO,SAASC,EAAWC,EAAaC,GAC9C,GAAI7jB,UAAUzS,OAAS,EACrB,OAAOd,EAAMiQ,GAEfinB,EAAYv+B,EAAMowB,YAAYmO,GAE9BE,OAAyBnzB,IAAbmzB,EAA0B,EAAIA,EAC1C,IAAIC,GAFJF,EAAcx+B,EAAMowB,YAAYoO,IAEFvnB,QAAQsnB,EAAWE,EAAW,GAC5D,OAAqB,IAAjBC,EACKr3B,EAAMQ,MAER62B,EAAc,CACvB,EAGA3+B,EAAQ4+B,MAAQ,WACd,MAAM,IAAI1wB,MAAM,2BAClB,EAEAlO,EAAQ6+B,UAAY,SAAU/2B,GAC5B,GAAI7H,EAAM2M,WAAW9E,GACnB,OAAOA,EAET,IAAIF,EAAS,GAeb,OAbIE,IACEA,aAAiB0I,MACnB1I,EAAMq1B,SAAQ,SAAU2B,GACP,KAAXl3B,IACFA,GAAU,MAEZA,GAAWk3B,EAAK/lB,QAAQ,iBAAkB,GAC5C,IAEAnR,EAASE,EAAMiR,QAAQ,iBAAkB,KAItCnR,CACT,EAEA5H,EAAQ++B,KAAO,SAAS9rB,EAAMG,GAC5B,IAAIuU,EAAY1nB,EAAM2nB,SAAS3U,EAAMG,GACrC,OAAIuU,IAGJ1U,EAAOhT,EAAMowB,YAAYpd,GACzBG,OAAqB7H,IAAX6H,EAAwB,EAAIA,GACtCA,EAASnT,EAAM0M,YAAYyG,cACLlF,OAAyB,kBAAT+E,EAC7B3L,EAAMQ,MAERmL,EAAKgB,UAAU,EAAGb,GAC3B,EAEApT,EAAQg/B,IAAM,SAAS/rB,GACrB,OAAyB,IAArB4H,UAAUzS,OACLd,EAAMA,MAGX2L,aAAgB/E,MACX+E,EAGLzC,MAAMkU,QAAQzR,GACT3L,EAAMQ,MAGI7H,EAAMowB,YAAYpd,GACjB7K,MACtB,EAEApI,EAAQi/B,MAAQ,SAAShsB,GACvB,OAAyB,IAArB4H,UAAUzS,OACLd,EAAMQ,OAEfmL,EAAOhT,EAAMowB,YAAYpd,GACrBhT,EAAM2M,WAAWqG,GACZA,EAEFA,EAAKmF,cACd,EAEApY,EAAQk/B,IAAM,SAASjsB,EAAMiK,EAAO9J,GAClC,QAAc7H,IAAV2R,GAAiC,OAAVA,EACzB,OAAO5V,EAAMQ,MAIf,GAFAoV,EAAQjd,EAAM0M,YAAYuQ,GAC1B9J,EAASnT,EAAM0M,YAAYyG,GACvBnT,EAAM2M,WAAWsQ,EAAO9J,IAA2B,kBAATH,EAC5C,OAAOG,EAGT,IAAI+rB,EAAQjiB,EAAQ,EAChBC,EAAMgiB,EAAQ/rB,EAElB,OAAOH,EAAKgB,UAAUkrB,EAAOhiB,EAC/B,EAGAnd,EAAQo/B,YAAc,SAAUnsB,EAAMosB,EAAmBC,GAGvD,OAFAD,EAAkD,qBAAtBA,EAAqC,IAAMA,EACvEC,EAA8C,qBAApBA,EAAmC,IAAMA,EAC5DpmB,OAAOjG,EAAK8F,QAAQsmB,EAAmB,KAAKtmB,QAAQumB,EAAiB,IAC9E,EAGAt/B,EAAQu/B,SAAW,WACjB,MAAM,IAAIrxB,MAAM,8BAClB,EAEAlO,EAAQw/B,OAAS,SAASvsB,GACxB,OAAIhT,EAAM2M,WAAWqG,GACZA,EAELtJ,MAAMsJ,IAAyB,kBAATA,EACjB3L,EAAMQ,OAEfmL,EAAOhT,EAAMowB,YAAYpd,IAEb8F,QAAQ,UAAU,SAAS0mB,GACrC,OAAOA,EAAIC,OAAO,GAAG1yB,cAAgByyB,EAAIE,OAAO,GAAGvnB,aACrD,GACF,EAEApY,EAAQ4/B,aAAe,SAAU3sB,EAAM4sB,GACrC,GAAIhlB,UAAUzS,OAAS,EACrB,OAAOd,EAAMiQ,GAEf,IAAIkP,EAAQxT,EAAKwT,MAAM,IAAIpW,OAAOwvB,IAClC,OAAOpZ,EAASA,EAAMA,EAAMre,OAAS,EAAIqe,EAAMre,OAAS,EAAI,GAAM,IACpE,EAEApI,EAAQ8/B,WAAa,SAAU7sB,EAAM4sB,EAAoBE,GACvD,GAAIllB,UAAUzS,OAAS,EACrB,OAAOd,EAAMiQ,GAEf,IAAIkP,EAAQxT,EAAKwT,MAAM,IAAIpW,OAAOwvB,IAClC,OAAOE,EAAOtZ,IAAUA,CAC1B,EAEAzmB,EAAQggC,aAAe,SAAU/sB,EAAM4sB,EAAoBI,GACzD,OAAIplB,UAAUzS,OAAS,EACdd,EAAMiQ,GAERtE,EAAK8F,QAAQ,IAAI1I,OAAOwvB,GAAqBI,EACtD,EAEAjgC,EAAQkgC,QAAU,SAASjtB,EAAMyrB,EAAUt2B,EAAQ+3B,GAGjD,OAFAzB,EAAWz+B,EAAM0M,YAAY+xB,GAC7Bt2B,EAASnI,EAAM0M,YAAYvE,GACvBnI,EAAM2M,WAAW8xB,EAAUt2B,IACb,kBAAT6K,GACa,kBAAbktB,EACA74B,EAAMQ,MAERmL,EAAK0sB,OAAO,EAAGjB,EAAW,GAAKyB,EAAWltB,EAAK0sB,OAAOjB,EAAW,EAAIt2B,EAC9E,EAEApI,EAAQoU,KAAO,SAASnB,EAAMG,GAC5B,IAAIuU,EAAY1nB,EAAM2nB,SAAS3U,EAAMG,GACrC,OAAIuU,IAGJ1U,EAAOhT,EAAMowB,YAAYpd,IACzBG,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEF,IAAI5C,MAAM4C,EAAS,GAAGsX,KAAKzX,GACpC,EAEAjT,EAAQogC,MAAQ,SAASntB,EAAMG,GAC7B,IAAIuU,EAAY1nB,EAAM2nB,SAAS3U,EAAMG,GACrC,OAAIuU,IAGJ1U,EAAOhT,EAAMowB,YAAYpd,GACzBG,OAAqB7H,IAAX6H,EAAwB,EAAIA,GACtCA,EAASnT,EAAM0M,YAAYyG,cACLlF,MACbkF,EAEFH,EAAKgB,UAAUhB,EAAK7K,OAASgL,GACtC,EAEApT,EAAQqgC,OAAS,SAAS7B,EAAWC,EAAaC,GAChD,IAAI4B,EACJ,MAAyB,kBAAd9B,GAAiD,kBAAhBC,EACnCn3B,EAAMQ,OAEf42B,OAAyBnzB,IAAbmzB,EAA0B,EAAIA,EAEtB,KADpB4B,EAAU7B,EAAYrmB,cAAclB,QAAQsnB,EAAUpmB,cAAesmB,EAAW,GAAG,GAC5Dp3B,EAAMQ,MAAMw4B,EACrC,EAEAtgC,EAAQugC,MAAQ,SAAUttB,EAAM0gB,GAC9B,OAAO1gB,EAAK1C,MAAMojB,EACpB,EAEA3zB,EAAQwgC,WAAa,SAASvtB,EAAMwtB,EAAUN,EAAUO,GACtD,GAAI7lB,UAAUzS,OAAS,EACrB,OAAOd,EAAMiQ,GAEf,GAAKtE,GAASwtB,EAEP,SAAmBl1B,IAAfm1B,EACT,OAAOztB,EAAK1C,MAAMkwB,GAAU/V,KAAKyV,GAGjC,GADAO,EAAat0B,KAAKqB,MAAMyL,OAAOwnB,IAC3BxnB,OAAOvP,MAAM+2B,IAAeA,GAAc,EAC5C,OAAOp5B,EAAMQ,MAIf,IAFA,IAAI0B,EAAQ,EACR9I,EAAI,EACD8I,GAAS,GAAKyJ,EAAKiE,QAAQupB,EAAUj3B,IAAU,GAGpD,GADA9I,KADA8I,EAAQyJ,EAAKiE,QAAQupB,EAAUj3B,EAAQ,KAE1B,GAAK9I,IAAMggC,EACtB,OAAOztB,EAAKgB,UAAU,EAAGzK,GAAS22B,EAAWltB,EAAKgB,UAAUzK,EAAQi3B,EAASr4B,QAGjF,OAAO6K,CACT,CAlBE,OAAOA,CAmBX,EAEAjT,EAAQyG,EAAI,SAASqB,GACnB,OAAIA,aAAiBoG,OAGI,kBAAVpG,EAFNA,EAEoC,EAC/C,EAGA9H,EAAQ2gC,KAAO,WACb,MAAM,IAAIzyB,MAAM,0BAClB,EAEAlO,EAAQ4gC,KAAO,SAAS3tB,GAEtB,OADAA,EAAOhT,EAAMowB,YAAYpd,cACL/E,MACX+E,EAEFA,EAAK8F,QAAQ,OAAQ,KAAKukB,MACnC,EAEAt9B,EAAQ6gC,QAAU7gC,EAAQy9B,KAE1Bz9B,EAAQ8gC,QAAU9gC,EAAQ49B,KAE1B59B,EAAQ+gC,MAAQ,SAAS9tB,GAEvB,OADAA,EAAOhT,EAAMowB,YAAYpd,cACL/E,MACX+E,EAEFA,EAAKjG,aACd,EAEAhN,EAAQghC,MAAQ,SAASz2B,GACvB,IAAIqd,EAAW3nB,EAAM2nB,SAASrd,GAC9B,GAAIqd,EACF,OAAOA,EAGT,GAAmB,kBAARrd,EACT,OAAOjD,EAAMQ,MAGf,IAAIm5B,EAAY,OAAO3wB,KAAK/F,IAAQ,OAAO+F,KAAK/F,GAKhD,GAAU,MAFVA,GADAA,GADAA,EAAMA,EAAIwO,QAAQ,gBAAiB,KACzBA,QAAQ,eAAgB,KACxBA,QAAQ,SAAS,KAGzB,OAAOzR,EAAMQ,MAGf,IAAIo5B,EAAUhoB,OAAO3O,GAErB,OAAGZ,MAAMu3B,GACA55B,EAAMQ,OAGfo5B,EAASA,GAAU,EAEhBD,IACDC,GAAkB,KAGbA,EACT,mBC5XA,IAAI55B,EAAQ1H,EAAQ,OAEpBI,EAAQmhC,eAAiB,SAASx5B,GAChC,OAAKA,GAAUA,EAAMy5B,OAIdz5B,EAAMy5B,QAAO,SAAS3qB,EAAGwD,GAC9B,IAAIonB,EAAW7wB,MAAMkU,QAAQjO,GACzB6qB,EAAW9wB,MAAMkU,QAAQzK,GAE7B,OAAIonB,GAAYC,EACP7qB,EAAEtN,OAAO8Q,GAEdonB,GACF5qB,EAAE1O,KAAKkS,GAEAxD,GAEL6qB,EACK,CAAC7qB,GAAGtN,OAAO8Q,GAGb,CAACxD,EAAGwD,EACb,IApBStS,CAqBX,EAEA3H,EAAQuhC,OAAS,SAAS55B,GACxB,IAAKA,EACH,OAAO,EAGT,IAAK,IAAIjH,EAAI,EAAGA,EAAIiH,EAAMS,SAAU1H,EAClC,GAAI8P,MAAMkU,QAAQ/c,EAAMjH,IACtB,OAAO,EAIX,OAAO,CACT,EAEAV,EAAQwb,QAAU,WAGhB,IAFA,IAAI5T,EAAS5H,EAAQ8wB,YAAYI,MAAM,KAAMrW,YAErC7a,EAAQuhC,OAAO35B,IACrBA,EAAS5H,EAAQmhC,eAAev5B,GAGlC,OAAOA,CACT,EAEA5H,EAAQ8wB,YAAc,SAASvV,GAC7B,IAAI3T,EAAS,GAMb,OAJA5H,EAAQ6H,UAAU0T,GAAM,SAASzT,GAC/BF,EAAOG,KAAKD,EACd,IAEOF,CACT,EAEA5H,EAAQoyB,QAAU,WAEhB,OADsBriB,KAAKyL,QAAQ0V,MAAM,KAAMrW,WACxB+S,QAAO,SAASiG,GACrC,MAAqB,kBAAPA,CAChB,GACF,EAEA7zB,EAAQ86B,WAAa,SAAS1nB,GAC5B,IAAIuL,EAAQ,KACZ,OAAOvS,KAAKuE,MAAMyC,EAASuL,GAASA,CACtC,EAEA3e,EAAQqO,UAAY,SAASmzB,GAC3B,GAAoB,mBAATA,EACT,OAAOA,EAGT,GAAIA,aAAgBtzB,MAClB,OAAOszB,EAGT,GAAoB,kBAATA,EACT,OAAgB,IAATA,EAGT,GAAoB,kBAATA,EAAmB,CAC5B,IAAIC,EAAKD,EAAKx0B,cACd,GAAW,SAAPy0B,EACF,OAAO,EAGT,GAAW,UAAPA,EACF,OAAO,CAEX,CAEA,OAAID,aAAgBp2B,OAASzB,MAAM63B,IAI5Bl6B,EAAMQ,KACf,EAEA9H,EAAQ2M,YAAc,SAAS+0B,GAC7B,OAAIA,aAAkBxzB,MACbwzB,OAEMn2B,IAAXm2B,GAAmC,OAAXA,GAA8B,KAAXA,EACtC,GAEa,mBAAXA,IACTA,GAAUA,GAEP/3B,MAAM+3B,GAIJp6B,EAAMQ,MAHJkpB,WAAW0Q,GAItB,EAEA1hC,EAAQqwB,YAAc,SAASqR,GAC7B,OAAIA,aAAkBxzB,MACbwzB,OAEMn2B,IAAXm2B,GAAmC,OAAXA,EACnB,GAGFA,EAAO1tB,UAChB,EAEAhU,EAAQmf,iBAAmB,SAASwiB,GAClC,IAAIC,EAMA7Q,EAJJ,IAAK4Q,GAA8B,KAAtBC,EAAMD,EAAIv5B,QACrB,OAAOd,EAAMQ,MAKf,KAAO85B,KAAO,CACZ,GAAID,EAAIC,aAAgB1zB,MACtB,OAAOyzB,EAAIC,GAGb,IADA7Q,EAAS/wB,EAAQ2M,YAAYg1B,EAAIC,eACX1zB,MACpB,OAAO6iB,EAET4Q,EAAIC,GAAO7Q,CACb,CAEA,OAAO4Q,CACT,EAEA3hC,EAAQ6hC,YAAc,SAAS5L,GAC7B,IAKI6L,EAHJ,IAAK7L,GAAkC,IAAnBA,EAAO7tB,OACzB,OAAOd,EAAMQ,MAIf,IAAK,IAAIpH,EAAI,EAAGA,EAAIu1B,EAAO7tB,OAAQ1H,IAIjC,GAHAohC,EAAQ9hC,EAAQmf,iBAAiB8W,EAAOv1B,IACxCu1B,EAAOv1B,GAAKohC,EAERA,aAAiB5zB,MACnB,OAAO4zB,EAIX,OAAO7L,CACT,EA+BAj2B,EAAQiN,UAAY,SAAUtB,GAC5B,IAAKhC,MAAMgC,GAAO,CAChB,GAAIA,aAAgBP,KAClB,OAAO,IAAIA,KAAKO,GAElB,IAAIkF,EAAImgB,WAAWrlB,GACnB,OAAIkF,EAAI,GAAKA,GAAK,QACTvJ,EAAMiD,IApCnB,SAA4B+B,GACtBA,EAAS,KACXA,GAAU,GAEZ,IAAIy1B,EAAW31B,KAAKqB,MAAMnB,EAAS,OAE/B01B,EAAY,IAAI52B,KADO,MAAX22B,EACqB,KAEjCE,EAAiB31B,EAASF,KAAKqB,MAAMnB,GAAU,KAE/C41B,EAAgB91B,KAAKqB,MAAM,MAAQw0B,GAEnCE,EAAUD,EAAgB,GAE9BA,GAAiBC,EAEjB,IAAIC,EAAQh2B,KAAKqB,MAAMy0B,EAAgB,MACnCG,EAAUj2B,KAAKqB,MAAMy0B,EAAgB,IAAM,GAC3CxxB,EAAOsxB,EAAU30B,UACjBZ,EAAQu1B,EAAUh2B,WAElBM,GAAU,IAAMA,EAAS,KACvBoE,EAAO,GACPjE,EAAQ,GAGd,OAAO,IAAIrB,KAAK42B,EAAUn1B,cAAeJ,EAAOiE,EAAM0xB,EAAOC,EAASF,EACxE,CAWWG,CAAmBzxB,EAC5B,CACA,MAAoB,kBAATlF,IACTA,EAAO,IAAIP,KAAKO,GACXhC,MAAMgC,IAINrE,EAAMQ,MAHF6D,CAIb,EAEA3L,EAAQ0iB,eAAiB,SAASif,GAGhC,IAFA,IACI5Q,EADA6Q,EAAMD,EAAIv5B,OAEPw5B,KAAO,CAEZ,IADA7Q,EAAShhB,KAAK9C,UAAU00B,EAAIC,OACbt6B,EAAMQ,MACnB,OAAOipB,EAET4Q,EAAIC,GAAO7Q,CACb,CACA,OAAO4Q,CACT,EAEA3hC,EAAQ4nB,SAAW,WACjB,IAAK,IAAIve,EAAI,EAAGA,EAAIwR,UAAUzS,OAAQiB,IACpC,GAAIwR,UAAUxR,aAAc6E,MAC1B,OAAO2M,UAAUxR,EAIvB,EAEArJ,EAAQg0B,UAAY,SAAUnG,GAC5B,YAAetiB,IAARsiB,GAA6B,OAARA,CAC9B,EAEA7tB,EAAQ4M,WAAa,WAEnB,IADA,IAAIvD,EAAIwR,UAAUzS,OACXiB,KACL,GAAIwR,UAAUxR,aAAc6E,MAC1B,OAAO,EAGX,OAAO,CACT,EAEAlO,EAAQowB,YAAc,WAEpB,IADA,IAAI/mB,EAAIwR,UAAUzS,OACXiB,KACL,GAA4B,kBAAjBwR,UAAUxR,GACnB,OAAO,EAGX,OAAO,CACT,EAEArJ,EAAQm6B,qBAAuB,SAASwH,GAGtC,IAFA,IACI9N,EADAxqB,EAAIs4B,EAAIv5B,OAELiB,KAEL,GAAkB,kBADlBwqB,EAAK8N,EAAIt4B,IAIT,IAAW,IAAPwqB,EAIJ,IAAW,IAAPA,GAIJ,GAAkB,kBAAPA,EAAiB,CAC1B,IAAIzgB,EAASrD,KAAKpD,YAAYknB,GAC1BzgB,aAAkBlF,MACpByzB,EAAIt4B,GAAK,EAETs4B,EAAIt4B,GAAK+J,CAEb,OAVEuuB,EAAIt4B,GAAK,OAJTs4B,EAAIt4B,GAAK,EAgBb,OAAOs4B,CACT,EAEA3hC,EAAQ8J,KAAO,SAASnC,EAAO6e,GAE7B,OADAA,EAAMA,GAAO,EACR7e,GAAgC,oBAAhBA,EAAMwrB,MAGpBxrB,EAAMwrB,MAAM3M,GAFV7e,CAGX,EAEA3H,EAAQie,QAAU,SAAStW,EAAO6e,GAEhC,OADAA,EAAMA,GAAO,EACR7e,GAAgC,oBAAhBA,EAAMwrB,MAGpBxrB,EAAMwrB,MAAM,EAAGxrB,EAAMS,OAASoe,GAF5B7e,CAGX,EAEA3H,EAAQ6H,UAAY,SAASF,EAAO46B,GAGlC,IAFA,IAAI/4B,GAAS,EAAGpB,EAAST,EAAMS,SAEtBoB,EAAQpB,IAC8B,IAAzCm6B,EAAS56B,EAAM6B,GAAQA,EAAO7B,KAKpC,OAAOA,CACT,EAEA3H,EAAQmnB,UAAY,SAAS8O,GAC3B,OAAIA,EAIGA,EAAO,GAAGmE,KAAI,SAASxE,EAAKl1B,GACjC,OAAOu1B,EAAOmE,KAAI,SAASpT,GACzB,OAAOA,EAAItmB,EACb,GACF,IAPS4G,EAAMQ,KAQjB,iBChVA,IACI06B,EAAe,CAAC,IAAK,KAAM,IAAK,KAAM,IAAK,MAC3CC,EAAsB,WACtBv5B,EAAqB,UACrBw5B,EAAmB,CAACD,EAAqBv5B,GAY7C,SAASD,EAAYnB,EAAOsV,GAC1B,IAAwC,IAApCslB,EAAiBxrB,QAAQkG,GAC3B,MAAM,IAAIlP,MAAM,2BAA6BkP,GAG/C,MAAO,CACLtV,MAAOA,EACPsV,KAAMA,EAEV,CA2EA,SAASulB,EAAc35B,GAIrB,IAHA,IApE8BlB,EAoE1B86B,EAAe,GACfC,EAAiB,GAEZniC,EAAI,EAAGA,EAAIsI,EAAOZ,OAAQ1H,IAAK,CACtC,IAAIoiC,EAAQ95B,EAAOtI,GAET,IAANA,GAAW8hC,EAAatrB,QAAQ4rB,IAAU,EAC5CD,EAAe96B,KAAKkB,EAAY65B,EAAOL,IAEvCG,GAAgBE,CAEpB,CAUA,OARIF,EAAax6B,OAAS,GACxBy6B,EAAe96B,KAAKkB,GAjFD,kBADSnB,EAkF2B86B,IA7ErD,gBAAgBtyB,KAAKxI,KACvBA,GAAgC,IAAxBA,EAAMoP,QAAQ,KAAcpI,SAAShH,EAAO,IAAMkpB,WAAWlpB,IAJ9DA,GAgF+DoB,IAGpE25B,EAAez6B,OAAS,GAAKy6B,EAAe,GAAGzlB,OAASqlB,GAC1DI,EAAeE,QAAQ95B,EAvHL,IAuHkCw5B,IAG/CI,CACT,CArHA7iC,EAAQyiC,oBAAsBA,EAC9BziC,EAAQkJ,mBAAqBA,EAkL7BlJ,EAAQ+I,MAAQ,SAASi6B,GACvB,OAAOL,EAvIT,SAA4BK,GAO1B,IANA,IAAIC,EAAmBD,EAAW56B,OAC9BY,EAAS,GACTk6B,EAAc,EACdC,EAAiB,GACjBC,EAAkB,GAEfF,EAAcD,GAAkB,CACrC,IAAII,EAAOL,EAAWtD,OAAOwD,GAE7B,OAAQG,GACN,IAAK,IACL,IAAK,IACL,IAAK,IACHD,GAAoCC,EAEhCF,EAAe/6B,OAAS,IAC1BY,EAAOjB,KAAKo7B,GACZA,EAAiB,IAErB,MACA,QACMC,EAAgBh7B,OAAS,IAC3BY,EAAOjB,KAAKq7B,GACZA,EAAkB,IAGpBD,GAAkCE,EAGtCH,GACF,CASA,OAPIC,EAAe/6B,OAAS,GAC1BY,EAAOjB,KAAKo7B,GAEVC,EAAgBh7B,OAAS,GAC3BY,EAAOjB,KAAKq7B,GAGPp6B,CACT,CA8FuBs6B,CAAmBN,GAC1C,EACAhjC,EAAQiJ,YAAcA,EACtBjJ,EAAQoJ,QA1DR,SAA2BJ,GAIzB,IAHA,IACIu6B,EADA9jB,EAAS,GAGJ/e,EAAI,EAAGA,EAAIsI,EAAOZ,OAAQ1H,IAAK,CACtC,IAAIoiC,EAAQ95B,EAAOtI,GAEnB,OAAQoiC,EAAM1lB,MACZ,KAAKqlB,EACHc,EAAWT,EAAMh7B,MACnB,MACA,KAAKoB,EACHuW,EAAO1X,KAAK+6B,EAAMh7B,OAGxB,CAEA,OAUF,SAAkB2X,EAAQ8jB,GACxB,IAAI37B,GAAS,EAEb,OAAQ27B,GACN,IAAK,IACH37B,EAAS6X,EAAO,GAAKA,EAAO,GAC5B,MACF,IAAK,KACH7X,EAAS6X,EAAO,IAAMA,EAAO,GAC7B,MACF,IAAK,IACH7X,EAAS6X,EAAO,GAAKA,EAAO,GAC5B,MACF,IAAK,KACH7X,EAAS6X,EAAO,IAAMA,EAAO,GAC7B,MACF,IAAK,IACH7X,EAAS6X,EAAO,IAAMA,EAAO,GAC7B,MACF,IAAK,KACH7X,EAAS6X,EAAO,IAAMA,EAAO,GAIjC,OAAO7X,CACT,CAnCS47B,CAAS/jB,EAAQ8jB,EAC1B,iBCrJAvjC,EAAQmjB,IAAM,IAAIjV,MAAM,UACxBlO,EAAQgK,KAAO,IAAIkE,MAAM,WACzBlO,EAAQ8H,MAAQ,IAAIoG,MAAM,WAC1BlO,EAAQojB,IAAM,IAAIlV,MAAM,SACxBlO,EAAQqjB,KAAO,IAAInV,MAAM,UACzBlO,EAAQuK,IAAM,IAAI2D,MAAM,SACxBlO,EAAQuX,GAAK,IAAIrJ,MAAM,QACvBlO,EAAQsH,MAAQ,IAAI4G,MAAM,WAC1BlO,EAAQsjB,KAAO,IAAIpV,MAAM,+CCDzB,IAAIu1B,EAAgB7jC,EAAQ,OACxB8jC,EAAQ9jC,EAAQ,OAEhB+jC,EAAqB,QACrBC,EAAiB,OAEjB1H,EAAI,CAAC,EAsHT,SAAS2H,EAAqBC,GAC5B,IAAIC,EAAkBvzB,MAAMkU,QAAQof,GAQpC,OAAO,SAAwBh8B,GAC7B,IAR0B0B,EAQtBw6B,EAAmBC,EAAS/H,EAAEgI,WAAYp8B,GAC9C,GAAIk8B,EACF,OAAOA,EAGT,GAAID,GAAmBj8B,EAAMM,SAAW07B,EAAW17B,OACjD,MAAO,iBAAmB07B,EAAW17B,OAAS,SAGhD,IAAK,IAAI1H,EAAI,EAAGA,EAAIoH,EAAMM,OAAQ1H,IAEhC,GADAsjC,EAAmBC,GAlBKz6B,EAkBiB9I,EAjBvCqjC,EACKD,EAAWt6B,GAEbs6B,GAcwCh8B,EAAMpH,IAEjD,MAAO,CAACA,GAAGyI,OAAO66B,EAGxB,CACF,CA6IA,SAASC,EAASE,EAAWr8B,GAE3B,GAAa,MAATA,GAAkBq8B,EAAUC,eAAe,cAA/C,CAIA,IAAIx8B,EAASu8B,EAAUr8B,GAEvB,OAAIF,EACK4I,MAAMkU,QAAQ9c,GAAUA,EAAS,CAACA,QAD3C,CAJA,CAOF,CAEA,SAASy8B,EAAeC,EAAShc,GAK/B,IAAIsZ,EAAM0C,EAAQl8B,OAEdR,EAAS08B,EAAQ1C,EAAM,GACvBpO,EAAO8Q,EAAQnR,MAAM,EAAGyO,EAAM,GAOlC,OALoB,IAAhBpO,EAAKprB,SACPorB,EAAO,CAACmQ,IAEVrb,EAAUob,EAAMpb,EAAS,CAAEkL,KAAMA,IAER,oBAAX5rB,EACVA,EAAO0gB,GACPic,EAAmBjc,EAazB,SAAwB1gB,GACtB,MAAO,WAGT,SAAoB48B,GAClB,GAAI,QAAQl0B,KAAKk0B,GACf,OAAOA,EAET,GAAI,YAAYl0B,KAAKk0B,GACnB,MAAO,MAAQA,EAEjB,GAAI,UAAUl0B,KAAKk0B,GACjB,MAAO,KAAOA,EAEhB,OAAOA,CACT,CAdsBC,CAAW78B,GAAU,GAC3C,CAfkC88B,CAAe98B,GACjD,CA6BA,SAAS28B,EAAmBjc,EAASqc,GAKnC,OAJmBC,EAAetc,EAAQkL,MAEb,oBAAsB,KADtClL,EAAQkL,KAAK9I,KAAK,KAAO,IAAMia,EAI9C,CAEA,SAASC,EAAepR,GACtB,MAAuC,iBAAzBA,EAAKA,EAAKprB,OAAS,IAAoC,iBAAXorB,EAAK,EACjE,CA5VA0I,EAAE2I,OAAS,SAASC,EAAexc,GAEjC,OADAA,EAAUA,GAAW,CAAC,EACf,SAASxgB,GACd,IAAIw8B,EAAUL,EAASa,EAAeh9B,GAEtC,GAAKw8B,EAAL,CAIA,IAAIS,EAAeV,EAAeC,EAAShc,GAM3C,MAJIA,EAAQ0c,UACVD,EAAezc,EAAQ0c,QAAU,KAAOD,GAGpC,IAAI72B,MAAM62B,EARhB,CASF,CACF,EAQA7I,EAAE+I,MAAQ,SAAeC,GACvB,IAoUqBC,EApUjBrB,GAoUiBqB,EApUUD,EAqUxBE,OAAOC,KAAKF,GAAO,CAAC,GAAG/K,KAAI,SAAS1L,GACzC,MAAO,CAAEA,IAAKA,EAAK5mB,MAAOq9B,EAAIzW,GAChC,KAtUA,OAAO,SAAwB5mB,GAC7B,IAMI4mB,EANAsV,EAAmBC,EAAS/H,EAAEoJ,YAAax9B,GAE/C,GAAIk8B,EACF,OAAOA,EAMT,IAFA,IAAIuB,EAAgB,GAEX7kC,EAAI,EAAGA,EAAIojC,EAAW17B,OAAQ1H,IACrCguB,EAAMoV,EAAWpjC,GAAGguB,KAEpBsV,EAAmBC,EADPH,EAAWpjC,GAAGoH,MACaA,EAAM4mB,MAI3C6W,EAAcx9B,KAAK,CAAC2mB,GAAKvlB,OAAO66B,IAIpC,OAAIuB,EAAcn9B,OAAS,EAClBm9B,EAAc,GAIhB,SAASjd,GACdid,EAAgBA,EAAcnL,KAAI,SAASkK,GAKzC,MAAO,KAJGA,EAAQ,GAIE,KAHED,EAAeC,EAAShc,GAC3C/X,MAAM,MACNma,KAAKkZ,EAEV,IAEA,IAAI4B,EAAWld,EAAQkL,KAAK9I,KAAK,KAGjC,MACE,4BAHa8a,IAAa7B,EAAqB,GAAK,OAAS6B,GAK7D,wBACA5B,EACA2B,EAAc7a,KAAKkZ,EAEvB,CACF,CACF,EAEA1H,EAAEuJ,YAAc,SAAqBP,GACnC,IAAIQ,EAAiBxJ,EAAE+I,MAAMC,GAC7B,OAAO,SAA8Bp9B,GACnC,IAAI69B,EAAcD,EAAe59B,GACjC,GAAI69B,EACF,OAAOA,EAGT,IAAIC,EAAcR,OAAOC,KAAKv9B,GAAOs5B,QAAO,SAASyE,EAAMC,GAIzD,YAH+Bv6B,IAA3B25B,EAAaY,IACfD,EAAK99B,KAAK+9B,GAELD,CACT,GAAG,IAEH,OAA2B,IAAvBD,EAAYx9B,OACP,WACL,MAAO,mCAAqCw9B,EAAYlb,KAAK,KAC/D,OAHF,CAKF,CACF,EAEAwR,EAAE6J,QAAU,SAAiB5B,GAC3B,OAAON,EAAqBM,EAC9B,EAEAjI,EAAE8J,MAAQ,WAIR,OAAOnC,EAHUrzB,MAAMkU,QAAQ7J,UAAU,IACrCA,UAAU,GACVrK,MAAM0iB,UAAUC,MAAMC,KAAKvY,WAEjC,EA+BAqhB,EAAE+J,SAAW,SAAkB9B,GAC7B,SAAS+B,EAAkBp+B,GACzB,OAAa,MAATA,EACK,SAASwgB,GACd,OAAOic,EACLjc,EACAsc,EAAetc,EAAQkL,MACnB,4BACA,eAER,EAEK2Q,EAAUjT,MAAMnhB,KAAM8K,UAC/B,CAGA,OAFAqrB,EAAkBC,YAAa,EAExBD,CACT,EAEAhK,EAAEkK,UAAY,WACZ,IAAItC,EAAatzB,MAAMkU,QAAQ7J,UAAU,IACrCA,UAAU,GACVrK,MAAM0iB,UAAUC,MAAMC,KAAKvY,WAC/B,OAAO,SAA4B/S,GACjC,IAAIu+B,EAAWvC,EACZ1J,KAAI,SAAS+J,GACZ,OAAOF,EAASE,EAAWr8B,EAC7B,IACC8lB,OAAO0Y,SAIV,GAAID,EAASj+B,SAAW07B,EAAW17B,OAKnC,OACEi+B,EAASE,OAAM,SAASjC,GACtB,OAA0B,IAAnBA,EAAQl8B,QAAsC,kBAAfk8B,EAAQ,EAChD,IAoIN,SAAgBkC,GACd,GAAIA,EAAKp+B,OAAS,EAChB,OAAOo+B,EAAK,GAEd,GAAoB,IAAhBA,EAAKp+B,OACP,OAAOo+B,EAAK9b,KAAK,QAEnB,OAAO8b,EAAKrT,MAAM,GAAI,GAAGzI,KAAK,MAAQ,QAAU8b,EAAKrT,OAAO,EAC9D,CA1IasT,CACLJ,EAASjM,KAAI,SAAS7jB,GACpB,OAAOA,EAAE,EACX,KAOG8vB,EAASjF,QAAO,SAAS3W,EAAKkX,GACnC,OAAOA,EAAIv5B,OAASqiB,EAAIriB,OAASu5B,EAAMlX,CACzC,GACF,CACF,EAOAyR,EAAEwK,MAAQ,SAAeC,GACvB,OAAO,SAAwB7+B,GAC7B,GAAIA,IAAU6+B,EACZ,OAAOC,KAAKC,UAAUF,EAE1B,CACF,EAEAzK,EAAE4K,MAAQ,WACR,IAGIhD,GAHUtzB,MAAMkU,QAAQ7J,UAAU,IAClCA,UAAU,GACVrK,MAAM0iB,UAAUC,MAAMC,KAAKvY,YACNuf,KAAI,SAAStyB,GACpC,OAAOo0B,EAAEwK,MAAM5+B,EACjB,IAEA,OAAOo0B,EAAEkK,UAAUlV,MAAMnhB,KAAM+zB,EACjC,EAEA5H,EAAEhQ,MAAQ,SAAeya,GACvB,IAAIt3B,EAAMs3B,EAAY,GAClBlc,EAAMkc,EAAY,GACtB,OAAO,SAAwB7+B,GAG7B,GAFuBm8B,EAAS/H,EAAE9oB,OAAQtL,IAElBA,EAAQuH,GAAOvH,EAAQ2iB,EAC7C,MAAO,kBAAoBpb,EAAM,MAAQob,EAAM,cAEnD,CACF,EAOAyR,EAAE6K,IAAM,WAER,EAEA7K,EAAE8K,QAAU,SAAiBl/B,GAC3B,GAAqB,mBAAVA,EACT,MAAO,SAEX,EAEAo0B,EAAE9oB,OAAS,SAAgBtL,GACzB,GAAqB,kBAAVA,EACT,MAAO,QAEX,EAEAo0B,EAAEgI,WAAa,SAAoBp8B,GACjC,IAAK0I,MAAMkU,QAAQ5c,GACjB,MAAO,OAEX,EAEAo0B,EAAEoJ,YAAc,SAAqBx9B,GACnC,IAAK27B,EAAc37B,GACjB,MAAO,QAEX,EAEAo0B,EAAEwF,OAAS,SAAgB55B,GACzB,GAAqB,kBAAVA,EACT,MAAO,QAEX,EAEAo0B,EAAE+K,KAAO,SAAcn/B,GACrB,GAAqB,oBAAVA,EACT,MAAO,UAEX,EAgFAo0B,EAAE+H,SAAWA,EACb/H,EAAEmI,eAAiBA,EAEnB6C,EAAOlnC,QAAUk8B,+BC1XjB,IAAIiL,EAAQvnC,EAAQ,OAOpB,SAASwnC,EAAmB9e,GAC1BvY,KAAKs3B,OAAS/e,EAAQ+e,QAAU,yBAChCt3B,KAAKu3B,SAAW,aAChBv3B,KAAKw3B,aAAejf,EAAQkf,YAC5Bz3B,KAAK03B,QAAU,QACf13B,KAAK23B,UAAY33B,KAAK43B,oBACtB53B,KAAK63B,UAAY73B,KAAK83B,eAEtB93B,KAAK+3B,UAAaxf,EAAQwf,UAAaxf,EAAQwf,UAAUv3B,MAAM,KAAO,KACtER,KAAKg4B,MAASzf,EAAQyf,MAASzf,EAAQyf,MAAMx3B,MAAM,KAAO,KAC1DR,KAAKi4B,KAAQ1f,EAAQ0f,KAAQ1f,EAAQ0f,KAAO,KAC5Cj4B,KAAKk4B,SAAY3f,EAAQ2f,SAAY3f,EAAQ2f,SAAS13B,MAAM,KAAO,KACnER,KAAKm4B,MAAS5f,EAAQ4f,OAAU5f,EAAQ4f,MAAQ,KAChDn4B,KAAKo4B,OAASC,UAAUH,UAAY,KACpCl4B,KAAKs4B,mBAAqBt4B,KAAKu4B,oBAAoBhgB,GAEnDvY,KAAKw4B,cAAgB,GACrBx4B,KAAKy4B,cAAgB,CACvB,CAEApB,EAAmBlU,UAAY,CAW7BuV,OAAQ,SAAUC,EAAUC,EAAUC,GACpC,IAAIC,EAAc94B,KAAK+4B,iBAAiBJ,EAAUC,GAC9CI,EAAUh5B,KAAKi5B,gBAAgB,gBAAiBL,GAEpD,OADAI,EAAQF,YAAcA,EACjBA,IAAgB94B,KAAKy4B,eAAiBO,EAAQE,cAAgBl5B,KAAKw4B,gBAAkC,GAAhBM,EAEpFD,EAAiBA,SAChB,GAEP74B,KAAKy4B,cAAgBK,EACrB94B,KAAKw4B,cAAgBQ,EAAQE,YACtBl5B,KAAKm5B,KAAKH,EAASH,GAC5B,EAUA1rB,MAAO,SAAUyrB,EAAUC,GACzB,IAAIG,EAAUh5B,KAAKi5B,gBAAgB,eAAgBL,GACnD,OAAO54B,KAAKm5B,KAAKH,EAASH,EAC5B,EAWAM,KAAM,SAAUH,EAASH,GAIvB,GAHKA,IAAUA,EAAW,WAE1B,IACK74B,KAAKs4B,mBACR,OAAOO,IAET,IAAItgB,EAAUvY,KAAKo5B,kBAAkBJ,GACrCh5B,KAAKq5B,QAAQ9gB,GAAS,SAAU+gB,GAC9B,OAAIA,EAAYt5B,KAAKu5B,YAAYD,EAAKT,GAClCA,EAAiBA,SAArB,CACF,GACF,EAMAO,kBAAmB,SAAUJ,GAW3B,MAVc,CAEZ36B,OAAQ,OACRm7B,KAAMx5B,KAAKs3B,OACX7T,KAAMzjB,KAAKu3B,SAAY,iBAAmBv3B,KAAKw3B,aAC/CiC,QAAS,CACP,eAAgB,oBAElBC,KAAM7C,KAAKC,UAAU,CAACkC,IAG1B,EAUAC,gBAAiB,SAAUU,EAAOf,GAChC,IAAIgB,EAECA,EADAhB,EAASrgB,QAAQqhB,UACL,CAAChB,EAASrgB,QAAQqhB,UAAUC,UAAWjB,EAASrgB,QAAQqhB,UAAUE,UADtC,KAG7C,IAAIC,EAAQnB,EAASoB,KAAQpB,EAASoB,KAAKC,UAAY,KACvD,MAAO,CACLN,MAAOA,EACPO,SAAU,IAAI7+B,KACd8+B,kBAAmBn6B,KAAK23B,UACxByC,QAASp6B,KAAK+3B,UACdF,UAAW73B,KAAK63B,UAChBK,SAAUl4B,KAAKk4B,SACfD,KAAMj4B,KAAKi4B,KACXD,MAAOh4B,KAAKg4B,MACZT,SAAU,gBAEVqC,UAAWA,EACXzB,MAAOS,EAASrgB,QAAQ4f,MAExBe,YAAaN,EAASyB,YACtBC,QAASP,EACTQ,eAAgBv6B,KAAKo4B,OAEzB,EASAiB,QAAS,SAAUmB,EAAM3B,GACvB,IAAI4B,EAAQ,IAAIC,eAYhB,IAAK,IAAIC,KAXTF,EAAMG,mBAAqB,WACzB,GAAuB,GAAnB56B,KAAK66B,WACP,OAAmB,KAAf76B,KAAK86B,OAEAjC,EAAS,MAETA,EAAS74B,KAAK+6B,WAG3B,EACAN,EAAMO,KAAKR,EAAKn8B,OAAQm8B,EAAKhB,KAAOgB,EAAK/W,MAAM,GAC5B+W,EAAKf,QAAQ,CAC9B,IAAIwB,EAAcT,EAAKf,QAAQkB,GAC/BF,EAAMS,iBAAiBP,EAAQM,EACjC,CACAR,EAAMtB,KAAKqB,EAAKd,KAClB,EAOAH,YAAa,SAAUD,EAAKT,GAC1B,GAAIA,EAAU,OAAOA,EAASS,EAChC,EAOA1B,kBAAmB,WACjB,OAAO,IAAIR,EAAM+D,QAASC,OAAO/+B,KAAK+hB,SAASna,YAAYo3B,OAAO,MACpE,EAMAvD,aAAc,WACZ,MAAO,sBAAwB93B,KAAK03B,QAAU,IAAMW,UAAUR,SAChE,EASAkB,iBAAkB,SAAUJ,EAAUC,GACpC,IAAI3R,EAAU2R,EAAS0C,WAAW/nB,KAC9BgoB,EAAa5C,EAAS6C,GAK1B,OAJgBvU,EAAQoD,KAAI,SAAUoR,GACpC,OAAOA,EAAQD,EACjB,IAC4Br0B,QAAQo0B,EAEtC,EAOAhD,oBAAqB,SAAUhgB,GAC7B,OAA+C,GAA3CvY,KAAKs3B,OAAOnwB,QAAQ,qBAEpBoR,EAAQmjB,gBAERnjB,EAAQsF,OAEd,GAKFsZ,EAAOlnC,QAAUonC,aCpOjBF,EAAOlnC,QAAU,CACf,eAAgB,CACd,KAAQ,SACR,KAAQ,CAAC,EAAE,QAAS,WAAY,CAAC,SAAU,aAE7C,eAAgB,CACd,KAAQ,gBACR,KAAQ,CAAC,EAAE,WAAY,UAAW,EAAE,SAAU,aAEhD,cAAe,CACb,KAAQ,SACR,KAAQ,CAAC,CAAC,SAAU,WAAY,CAAC,UAAW,WAE9C,eAAgB,CACd,KAAQ,SACR,KAAQ,CAAC,EAAE,UAAW,WAAY,EAAE,UAAW,2CCbnD,IAQI0rC,EARAC,EAAY/rC,EAAQ,MACpBgsC,EAAWhsC,EAAQ,OACnBisC,EAASjsC,EAAQ,OACjBksC,EAAelsC,EAAAA,OAAAA,aACfmsC,EAAansC,EAAQ,OACrBosC,EAAepsC,EAAQ,OACvBqsC,EAAcrsC,EAAQ,OACtBwnC,EAAqBxnC,EAAQ,MAwCjC,SAASssC,EAAe5jB,GACtBvY,KAAKo8B,cAAgB,IAAIL,EACzB/7B,KAAKuY,QAAUujB,EAAO,CAAC,EAAG97B,KAAKuY,QAASA,GACxCvY,KAAKq6B,YAAc,GACnBr6B,KAAKq8B,OAAQ,CACf,CAEAF,EAAehZ,UAAY,CACzB5K,QAAS,CACP+jB,YAAa,SACbvC,KAAM,GACNwC,OAAO,EACPC,gBAAgB,EAChBC,UAAW,EACXC,gBAAgB,EAChBvE,MAAO,EACPb,OAAQ,0BAGVqF,MAAO,SAAStS,GACdrqB,KAAKg6B,KAAO3P,EAEZsR,EAAkBO,EAChBD,EAAa,CACXxE,YAAaz3B,KAAKuY,QAAQkf,YAC1BH,OAAQt3B,KAAKuY,QAAQ+e,UAIzBt3B,KAAK48B,aAAe,IAAIvF,EAAmBr3B,KAAKuY,SAEhDvY,KAAK68B,UAAY78B,KAAK68B,UAAUC,KAAK98B,MACrCA,KAAK+8B,WAAa/8B,KAAK+8B,WAAWD,KAAK98B,MACvCA,KAAKg9B,eAAiBh9B,KAAKg9B,eAAeF,KAAK98B,MAC/CA,KAAKi9B,OAASj9B,KAAKi9B,OAAOH,KAAK98B,MAC/BA,KAAKk9B,iBAAmBl9B,KAAKk9B,iBAAiBJ,KAAK98B,MAEnD,IAAI8jB,EAAM9jB,KAAKm9B,UAAYC,SAASC,cAAc,OAClDvZ,EAAGwZ,UAAY,uCAEf,IAAIC,EAAOH,SAASC,cAAc,QAClCE,EAAKD,UAAY,qCAEjBt9B,KAAKw9B,SAAWJ,SAASC,cAAc,SACvCr9B,KAAKw9B,SAASnwB,KAAO,OACrBrN,KAAKw9B,SAASlB,YAAct8B,KAAKuY,QAAQ+jB,YAEzCt8B,KAAKw9B,SAASC,iBAAiB,UAAWz9B,KAAK+8B,YAC/C/8B,KAAKw9B,SAASC,iBAAiB,SAAUz9B,KAAK68B,WAE9C,IAAIa,EAAUN,SAASC,cAAc,OAgCrC,OA/BAK,EAAQC,UAAUC,IAAI,sBAEtB59B,KAAK69B,SAAWT,SAASC,cAAc,UACvCr9B,KAAK69B,SAASP,UAAY,oCAC1Bt9B,KAAK69B,SAASC,aAAa,aAAc,SACzC99B,KAAK69B,SAASJ,iBAAiB,QAASz9B,KAAKi9B,QAE7Cj9B,KAAK+9B,WAAaX,SAASC,cAAc,QACzCr9B,KAAK+9B,WAAWT,UAAY,sCAE5BI,EAAQM,YAAYh+B,KAAK69B,UACzBH,EAAQM,YAAYh+B,KAAK+9B,YAEzBja,EAAGka,YAAYT,GACfzZ,EAAGka,YAAYh+B,KAAKw9B,UACpB1Z,EAAGka,YAAYN,GAEf19B,KAAKs7B,WAAa,IAAIM,EAAU57B,KAAKw9B,SAAU,GAAI,CACjD3f,QAAQ,EACR4e,UAAWz8B,KAAKuY,QAAQkkB,UACxBtE,MAAOn4B,KAAKuY,QAAQ4f,QAEtBn4B,KAAKs7B,WAAW2C,aAAe,SAASC,GACtC,OAAOA,EAAKC,UACd,EAEIn+B,KAAKuY,QAAQikB,iBACfx8B,KAAKk9B,mBACLl9B,KAAKg6B,KAAKoE,GAAG,UAAWp+B,KAAKk9B,mBAGxBpZ,CACT,EAEAua,SAAU,WASR,OARAr+B,KAAKm9B,UAAUmB,WAAWC,YAAYv+B,KAAKm9B,WAEvCn9B,KAAKuY,QAAQikB,gBACfx8B,KAAKg6B,KAAKwE,IAAI,UAAWx+B,KAAKk9B,kBAGhCl9B,KAAKg6B,KAAO,KAELh6B,IACT,EAEA+8B,WAAYlB,GAAS,SAASt1B,GAG5B,IAAIk4B,EAASl4B,EAAEk4B,OAAOC,WAClBn4B,EAAEk4B,OAAOC,WAAWC,cACpBp4B,EAAEk4B,OACN,IAAKA,EAAO1mC,MAIV,OAHAiI,KAAKq8B,OAAQ,EAEbr8B,KAAKi9B,OAAO12B,GACJvG,KAAK69B,SAASe,MAAMC,QAAU,OAIpCt4B,EAAEu4B,UAA+D,IAApD,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAI33B,QAAQZ,EAAEw4B,UAGnDN,EAAO1mC,MAAMM,QAAU2H,KAAKuY,QAAQkkB,WACtCz8B,KAAKg/B,SAASP,EAAO1mC,MAEzB,GAAG,KAEH8kC,UAAW,WACL78B,KAAKw9B,SAASzlC,QAAOiI,KAAK69B,SAASe,MAAMC,QAAU,SACvD,IAAIlG,EAAW34B,KAAKs7B,WAAW3C,SAC/B,GAAIA,EAAU,CACZ,GAAI34B,KAAKuY,QAAQgkB,MACf,IAAKP,EAAWrD,EAAS6C,KAAO7C,EAASV,KAAM,CAC7C,IAAIA,EAAOU,EAASV,KACpBj4B,KAAKg6B,KAAKiF,UAAU,CAAC,CAAChH,EAAK,GAAIA,EAAK,IAAK,CAACA,EAAK,GAAIA,EAAK,KAC1D,MAAW+D,EAAWrD,EAAS6C,IAO7Bx7B,KAAKg6B,KAAKiF,UAAUjD,EAAWrD,EAAS6C,IAAIvD,MAE5Cj4B,KAAKg6B,KAAKuC,MAAM,CACd2C,OAAQvG,EAASuG,OACjBnF,KAAM/5B,KAAKuY,QAAQwhB,OAIzB/5B,KAAKo8B,cAAc+C,KAAK,SAAU,CAAEtnC,OAAQ8gC,IAC5C34B,KAAK48B,aAAalE,OAAOC,EAAU34B,KACrC,CACF,EAEAg/B,SAAU,SAASI,GACjBp/B,KAAK+9B,WAAWa,MAAMC,QAAU,QAChC7+B,KAAKo8B,cAAc+C,KAAK,UAAW,CAAEE,MAAOD,IAC5Cp/B,KAAKq6B,YAAc+E,EAEnB,IA0BI/F,EAjBAiG,EAAOt/B,KAEPu/B,EAXO,CACT,OACA,QACA,YACA,YACA,QACA,WACA,eAIgBlO,QAAO,SAASkO,EAAQ5gB,GAYxC,OAXI2gB,EAAK/mB,QAAQoG,KAGf,CAAC,YAAa,QAAS,YAAYxX,QAAQwX,IAAQ,EAC9C4gB,EAAO5gB,GAAO2gB,EAAK/mB,QAAQoG,GAAKne,MAAM,UACtC++B,EAAO5gB,GAAO2gB,EAAK/mB,QAAQoG,GAEpB,cAARA,GAAuB2gB,EAAK/mB,QAAQoG,IAAQ2gB,EAAK/mB,QAAQoG,GAAKkb,WAAayF,EAAK/mB,QAAQoG,GAAKmb,WAC/FyF,EAAO5gB,GAAO,CAAC2gB,EAAK/mB,QAAQoG,GAAKkb,UAAWyF,EAAK/mB,QAAQoG,GAAKmb,YAG3DyF,CACT,GAAG,CAAC,GAKJ,GACEv/B,KAAKuY,QAAQmkB,gBACb,uCAAuCn8B,KAAK6+B,GAC5C,CAEA,IAAII,EAASJ,EAAY5+B,MAAM,aAAa6pB,KAAI,SAASv6B,GACvD,OAAOmxB,WAAWnxB,EAAG,GACvB,IAAG2vC,WAIHF,EAAOvH,OAASuH,EAAOvH,MAAM,GAC7BuH,EAASzD,EAAOyD,EAAQ,CAAEF,MAAOG,EAAQrH,MAAO,IAChDkB,EAAUsC,EAAgBe,eAAe6C,GAAQpG,MACnD,MACEoG,EAASzD,EAAOyD,EAAQ,CAAEF,MAAOD,IACjC/F,EAAUsC,EAAgB+D,eAAeH,GAAQpG,OAGnD,IAAIwG,EAAmB,GA+DvB,OA9DI3/B,KAAKuY,QAAQmjB,iBACfiE,EAAmB3/B,KAAKuY,QAAQmjB,cAAc0D,MAE5CO,EAAmB,KAIvBtG,EAAQuG,KACN,SAASC,GACP7/B,KAAK+9B,WAAWa,MAAMC,QAAU,OAEhC,IAAIiB,EAAM,CAAC,EAEgB,OAAvBD,EAASE,aACXD,EAAMD,EAASnG,MAIjBoG,EAAIE,SAAWF,EAAIE,SACfL,EAAiBvmC,OAAO0mC,EAAIE,UAC5BL,EAGA3/B,KAAKuY,QAAQsF,QAAUiiB,EAAIE,SAAS3nC,SACtCynC,EAAIE,SAAWF,EAAIE,SAASniB,OAAO7d,KAAKuY,QAAQsF,SAG9CiiB,EAAIE,SAAS3nC,OACf2H,KAAK69B,SAASe,MAAMC,QAAU,SAE9B7+B,KAAK69B,SAASe,MAAMC,QAAU,OAC9B7+B,KAAKs7B,WAAW3C,SAAW,MAG7BmH,EAAIP,OAASA,EACTv/B,KAAKq8B,QACPr8B,KAAK48B,aAAazvB,MAAMnN,MACxBA,KAAKq8B,OAAQ,GAEfr8B,KAAKo8B,cAAc+C,KAAK,UAAWW,GACnC9/B,KAAKs7B,WAAWF,OAAO0E,EAAIE,SAC7B,EAAElD,KAAK98B,OAGTq5B,EAAQ4G,MACN,SAAS3G,GACPt5B,KAAK+9B,WAAWa,MAAMC,QAAU,OAG5Bc,EAAiBtnC,OACnB2H,KAAK69B,SAASe,MAAMC,QAAU,SAE9B7+B,KAAK69B,SAASe,MAAMC,QAAU,OAC9B7+B,KAAKs7B,WAAW3C,SAAW,MAG7B34B,KAAKo8B,cAAc+C,KAAK,UAAW,CAAEa,SAAUL,IAC/C3/B,KAAKs7B,WAAWF,OAAOuE,GACvB3/B,KAAKo8B,cAAc+C,KAAK,QAAS,CAAE5nC,MAAO+hC,GAC5C,EAAEwD,KAAK98B,OAGFq5B,CACT,EAEA4D,OAAQ,SAASiD,GACXA,GAAIA,EAAGC,iBACXngC,KAAKw9B,SAASzlC,MAAQ,GACtBiI,KAAKs7B,WAAW3C,SAAW,KAC3B34B,KAAKs7B,WAAW8E,QAChBpgC,KAAK68B,YACL78B,KAAKw9B,SAAS6C,QACdrgC,KAAK69B,SAASe,MAAMC,QAAU,OAC9B7+B,KAAKo8B,cAAc+C,KAAK,SAExBn/B,KAAKq8B,OAAQ,CACf,EAEAW,eAAgB,SAAS6C,GACvB,IAAI5Y,EAAU4Y,EAASnG,KACvB,GAAKzS,EAAQ+Y,SAAS3nC,OAAtB,CACA,IAAIR,EAASovB,EAAQ+Y,SAAS,GAC9BhgC,KAAKs7B,WAAW3C,SAAW9gC,EAC3BmI,KAAKw9B,SAASzlC,MAAQF,EAAOsmC,WAC7Bn+B,KAAK68B,WAJ+B,CAKtC,EAEAK,iBAAkB,WAGhB,GAAIl9B,KAAKg6B,KAAKC,UAAY,EAAG,CAC3B,IAAIiF,EAASl/B,KAAKg6B,KAAKsG,YAAYC,OACnCvgC,KAAKwgC,aAAa,CAAE3G,UAAWqF,EAAOuB,IAAK3G,SAAUoF,EAAOwB,KAC9D,MACE1gC,KAAKwgC,aAAa,KAEtB,EAOAnB,MAAO,SAASD,GAEd,OADAp/B,KAAKg/B,SAASI,GAAaQ,KAAK5/B,KAAKg9B,gBAC9Bh9B,IACT,EAOA2gC,SAAU,SAASvB,GAMjB,OAJAp/B,KAAKw9B,SAASzlC,MAAQqnC,EACtBp/B,KAAKs7B,WAAW3C,SAAW,KAC3B34B,KAAKs7B,WAAW8E,QAChBpgC,KAAK68B,YACE78B,IACT,EAOAwgC,aAAc,SAAS5G,GAErB,OADA55B,KAAKuY,QAAQqhB,UAAYA,EAClB55B,IACT,EAMA4gC,aAAc,WACZ,OAAO5gC,KAAKuY,QAAQqhB,SACtB,EAcAwE,GAAI,SAAS/wB,EAAM5c,GAEjB,OADAuP,KAAKo8B,cAAcgC,GAAG/wB,EAAM5c,GACrBuP,IACT,EAQAw+B,IAAK,SAASnxB,EAAM5c,GAElB,OADAuP,KAAKo8B,cAAcyE,eAAexzB,EAAM5c,GACjCuP,IACT,GAGFm3B,EAAOlnC,QAAUksC,gCCjajB,IAAI2E,EAASjxC,EAAQ,OAErBsnC,EAAOlnC,QAAU6wC,gCCFjB,IAAIC,EAAUlxC,EAAQ,OAClBmxC,EAAanxC,EAAQ,OAEzB,SAASoxC,EAAc1oB,GACrByoB,EAAW3d,KAAKrjB,KAAMuY,EACxB,CACA0oB,EAAc9d,UAAYkS,OAAO6L,OAAOF,EAAW7d,WACnD8d,EAAc9d,UAAUge,YAAcF,EAEtCA,EAAc9d,UAAUie,YAAcL,EAAQM,YAC9CJ,EAAc9d,UAAUme,aAAeP,EAAQQ,aAc/CpK,EAAOlnC,QAJP,SAA6BsoB,GAC3B,OAAO,IAAI0oB,EAAc1oB,EAC3B,gCCtBA,IAAIipB,EAAe3xC,EAAQ,OACvB4xC,EAAY5xC,EAAQ,OACpB6xC,EAAY7xC,EAAQ,MACpB8xC,EAAe9xC,EAAQ,OAGvB+xC,EAAmB,CAAC,EAiBxB,SAASC,EAA8BlI,GACrC,IAAI94B,EAAQ84B,EAAM94B,MACdihC,EAAcnI,EAAMoI,OAExB,MAAO,CACLlhC,MAAOA,EACPihC,YAAaA,EACbxU,QAJa,IAAMwU,EAAejhC,EAMtC,CAEA,SAASmhC,EAAe3I,EAAS4I,GAC/B,OAAO,IAAIC,SAAQ,SAASC,EAASC,GACnCH,EAAII,WAAa,SAAS1I,GACxBN,EAAQiJ,QAAQnD,KACduC,EAAUa,wBACVV,EAA8BlI,GAElC,EAEA,IAAI6I,EAAOnJ,EAAQmJ,KACfA,IACFP,EAAIQ,OAAOJ,WAAa,SAAS1I,GAC/BN,EAAQiJ,QAAQnD,KACduC,EAAUgB,sBACVb,EAA8BlI,GAElC,GAGFsI,EAAIU,QAAU,SAASprC,GACrB6qC,EAAO7qC,EACT,EAEA0qC,EAAIW,QAAU,WACZ,IAAIC,EAAY,IAAIpB,EAAU,CAC5BpI,QAASA,EACThsB,KAAMq0B,EAAUoB,wBAElBV,EAAOS,EACT,EAEAZ,EAAIc,OAAS,WAEX,UADOnB,EAAiBvI,EAAQmC,IAC5ByG,EAAInH,OAAS,KAAOmH,EAAInH,QAAU,IAAtC,CACE,IAAI+H,EAAY,IAAIpB,EAAU,CAC5BpI,QAASA,EACTK,KAAMuI,EAAIpC,SACVE,WAAYkC,EAAInH,SAElBsH,EAAOS,EAET,MACAV,EAAQF,EACV,EAEA,IAAIvI,EAAOL,EAAQK,KAGC,kBAATA,EACTuI,EAAI9I,KAAKO,GACAA,EACTuI,EAAI9I,KAAKtC,KAAKC,UAAU4C,IACf8I,EACTP,EAAI9I,KAAKqJ,GAETP,EAAI9I,OAGNyI,EAAiBvI,EAAQmC,IAAMyG,CACjC,IAAGrC,MAAK,SAASqC,GACf,OA/EJ,SAAwB5I,EAAS4I,GAC/B,OAAO,IAAIT,EAAanI,EAAS,CAC/BK,KAAMuI,EAAIpC,SACVpG,QAASkI,EAAaM,EAAIe,yBAC1BjD,WAAYkC,EAAInH,QAEpB,CAyEWmI,CAAe5J,EAAS4I,EACjC,GACF,CAIA,SAASiB,EAAiB7J,EAAS5B,GACjC,IAAI0L,EAAM9J,EAAQ8J,IAAI1L,GAClBwK,EAAM,IAAImB,OAAO1I,eAKrB,OAJAuH,EAAIjH,KAAK3B,EAAQh7B,OAAQ8kC,GACzB9N,OAAOC,KAAK+D,EAAQI,SAASrM,SAAQ,SAASzO,GAC5CsjB,EAAI/G,iBAAiBvc,EAAK0a,EAAQI,QAAQ9a,GAC5C,IACOsjB,CACT,CASA9K,EAAOlnC,QAAU,CACfsxC,aA9GF,SAAsBlI,GACpB,IAAI4I,EAAML,EAAiBvI,EAAQmC,IAC9ByG,IACLA,EAAIoB,eACGzB,EAAiBvI,EAAQmC,IAClC,EA0GEwG,eAAgBA,EAChBX,YAVF,SAAqBhI,GACnB,OAAO6I,QAAQC,UAAUvC,MAAK,WAC5B,IAAIqC,EAAMiB,EAAiB7J,EAASA,EAAQyH,OAAOrJ,aACnD,OAAOuK,EAAe3I,EAAS4I,EACjC,GACF,EAMEiB,iBAAkBA,iCCzHpB,IAAII,EAAazzC,EAAQ,OACrB0zC,EAAc1zC,EAAQ,OACtB6xC,EAAY7xC,EAAQ,MAkBxB,SAASmxC,EAAWzoB,GAClB,IAAKA,IAAYA,EAAQkf,YACvB,MAAM,IAAIt5B,MAAM,kDAGlBmlC,EAAW/qB,EAAQkf,aAEnBz3B,KAAKy3B,YAAclf,EAAQkf,YAC3Bz3B,KAAKs3B,OAAS/e,EAAQ+e,QAAUoK,EAAU8B,UAC5C,CAEAxC,EAAW7d,UAAUsgB,cAAgB,SAAuBC,GAC1D,OAAO,IAAIH,EAAYvjC,KAAM0jC,EAC/B,EAEAvM,EAAOlnC,QAAU+wC,gCCnCjB,IAAIU,EAAY7xC,EAAQ,MA6DxBsnC,EAAOlnC,QAhCP,SAAmBsoB,GACjB,IAEImhB,EAFAiK,EAAYprB,EAAQlL,MAAQq0B,EAAUkC,WAG1C,GAAIrrB,EAAQmhB,KACV,IACEA,EAAO7C,KAAK79B,MAAMuf,EAAQmhB,KAC5B,CAAE,MAAOnzB,GACPmzB,EAAOnhB,EAAQmhB,IACjB,MAEAA,EAAO,KAGT,IAAInF,EAAUhc,EAAQgc,SAAW,KAC5BA,IACiB,kBAATmF,EACTnF,EAAUmF,EACDA,GAAgC,kBAAjBA,EAAKnF,QAC7BA,EAAUmF,EAAKnF,QACNoP,IAAcjC,EAAUoB,wBACjCvO,EAAU,oBAIdv0B,KAAKu0B,QAAUA,EACfv0B,KAAKqN,KAAOs2B,EACZ3jC,KAAK+/B,WAAaxnB,EAAQwnB,YAAc,KACxC//B,KAAKq5B,QAAU9gB,EAAQ8gB,QACvBr5B,KAAK05B,KAAOA,CACd,gCC3DA,IAAI4J,EAAazzC,EAAQ,OACrB8jC,EAAQ9jC,EAAQ,OAChBksC,EAAelsC,EAAQ,OACvBg0C,EAAWh0C,EAAQ,OACnB6xC,EAAY7xC,EAAQ,MAEpBi0C,EAAY,EA2DhB,SAASP,EAAYzC,EAAQvoB,GAC3B,IAAKuoB,EACH,MAAM,IAAI3iC,MAAM,iCAElB,IAAKoa,IAAYA,EAAQkL,OAASlL,EAAQla,OACxC,MAAM,IAAIF,MACR,0EAIJ,IAAI4lC,EAAiB,CAAC,EAClBxrB,EAAQmhB,OACVqK,EAAe,gBAAkB,oBAGnC,IAAIC,EAAsBrQ,EAAMoQ,EAAgBxrB,EAAQkhB,SAIpDA,EAAUpE,OAAOC,KAAK0O,GAAqB3S,QAAO,SAASyE,EAAMxiB,GAEnE,OADAwiB,EAAKxiB,EAAKjL,eAAiB27B,EAAoB1wB,GACxCwiB,CACT,GAAG,CAAC,GAEJ91B,KAAKw7B,GAAKsI,IACV9jC,KAAKikC,SAAW1rB,EAEhBvY,KAAKsiC,QAAU,IAAIvG,EACnB/7B,KAAK8gC,OAASA,EACd9gC,KAAK6/B,SAAW,KAChB7/B,KAAKzI,MAAQ,KACbyI,KAAKkkC,MAAO,EACZlkC,KAAKmkC,SAAU,EACfnkC,KAAKyjB,KAAOlL,EAAQkL,KACpBzjB,KAAK3B,OAASka,EAAQla,OACtB2B,KAAKs3B,OAAS/e,EAAQ+e,QAAUwJ,EAAOxJ,OACvCt3B,KAAKq/B,MAAQ9mB,EAAQ8mB,OAAS,CAAC,EAC/Br/B,KAAKokC,OAAS7rB,EAAQ6rB,QAAU,CAAC,EACjCpkC,KAAK05B,KAAOnhB,EAAQmhB,MAAQ,KAC5B15B,KAAKwiC,KAAOjqB,EAAQiqB,MAAQ,KAC5BxiC,KAAKy5B,QAAUA,CACjB,CASA8J,EAAYpgB,UAAUggB,IAAM,SAAa1L,GACvC,IAAI0L,EAAMU,EAASQ,cAAcrkC,KAAKyjB,KAAMzjB,KAAKs3B,QACjD6L,EAAMU,EAASS,kBAAkBnB,EAAKnjC,KAAKq/B,OAC3C,IAAIkF,EAAcvkC,KAAKokC,OACvB,GAAI3M,EAAa,CACf0L,EAAMU,EAASW,iBAAiBrB,EAAK,eAAgB1L,GACrD,IAAIgN,EAAqBnB,EAAW7L,GAAaiN,KACjDH,EAAc5Q,EAAM,CAAEgR,QAASF,GAAsBF,EACvD,CAEA,OADApB,EAAMU,EAASe,uBAAuBzB,EAAKoB,GACpCpB,CACT,EAaAI,EAAYpgB,UAAUgW,KAAO,WAC3B,IAAImG,EAAOt/B,KAEX,GAAIs/B,EAAK4E,KACP,MAAM,IAAI/lC,MACR,mHAKJ,OAFAmhC,EAAK4E,MAAO,EAEL5E,EAAKwB,OAAOM,YAAY9B,GAAMM,MACnC,SAASC,GAGP,OAFAP,EAAKO,SAAWA,EAChBP,EAAKgD,QAAQnD,KAAKuC,EAAUmD,eAAgBhF,GACrCA,CACT,IACA,SAAStoC,GAGP,MAFA+nC,EAAK/nC,MAAQA,EACb+nC,EAAKgD,QAAQnD,KAAKuC,EAAUoD,YAAavtC,GACnCA,CACR,GAEJ,EAeAgsC,EAAYpgB,UAAUkgB,MAAQ,WACxBrjC,KAAK+kC,mBACP/kC,KAAK+kC,iBAAiB1B,eACfrjC,KAAK+kC,kBAGV/kC,KAAK6/B,UAAY7/B,KAAKzI,OAASyI,KAAKmkC,UAExCnkC,KAAKmkC,SAAU,EACfnkC,KAAK8gC,OAAOQ,aAAathC,MAC3B,EAoBAujC,EAAYpgB,UAAU6hB,SAAW,SAAkBnM,GACjD,IAAIyG,EAAOt/B,KAEX,SAASilC,EAAepF,GAStBhH,EAAS,KAAMgH,GARf,kBACSP,EAAKyF,iBACZ,IAAIG,EAAkBrF,EAASsF,WAC3BD,IACF5F,EAAKyF,iBAAmBG,EACxBE,EAAQF,GAEZ,GAEF,CAEA,SAAS3L,EAAYhiC,GACnBshC,EAASthC,EAAO,MAAM,WAAY,GACpC,CAEA,SAAS6tC,EAAQ/L,GACfA,EAAQF,OAAOyG,KAAKqF,EAAgB1L,EACtC,CACA6L,EAAQplC,KACV,EAUAujC,EAAYpgB,UAAUkiB,MAAQ,WAC5B,OAAOrlC,KAAKslC,SACd,EAKA/B,EAAYpgB,UAAUmiB,QAAU,SAAiB/sB,GAC/C,IAAIgtB,EAAkB5R,EAAM3zB,KAAKikC,SAAU1rB,GAC3C,OAAO,IAAIgrB,EAAYvjC,KAAK8gC,OAAQyE,EACtC,EAEApO,EAAOlnC,QAAUszC,gCC3PjB,IAAIiC,EAAkB31C,EAAQ,OAsB9B,SAAS2xC,EAAanI,EAASoM,GAC7BzlC,KAAKq5B,QAAUA,EACfr5B,KAAKy5B,QAAUgM,EAAahM,QAC5Bz5B,KAAK0lC,QAAUD,EAAa/L,KAC5B15B,KAAK+/B,WAAa0F,EAAa1F,WAC/B,IACE//B,KAAK05B,KAAO7C,KAAK79B,MAAMysC,EAAa/L,MAAQ,KAC9C,CAAE,MAAOiM,GACP3lC,KAAK05B,KAAO+L,EAAa/L,IAC3B,CACA15B,KAAK4lC,MAAQJ,EAAgBxlC,KAAKy5B,QAAQoM,KAC5C,CAOArE,EAAare,UAAU2iB,YAAc,WACnC,QAAS9lC,KAAK4lC,MAAMG,IACtB,EAQAvE,EAAare,UAAUgiB,SAAW,WAChC,OAAKnlC,KAAK8lC,cACH9lC,KAAKq5B,QAAQiM,QAAQ,CAC1B7hB,KAAMzjB,KAAK4lC,MAAMG,KAAK5C,MAFQ,IAIlC,EAEAhM,EAAOlnC,QAAUuxC,yBCzDjBrK,EAAOlnC,QAAU,CACfuzC,WAAY,yBACZjB,wBAAyB,mBACzBG,sBAAuB,iBACvBoC,YAAa,QACbD,eAAgB,WAChBjB,WAAY,YACZd,sBAAuB,+CCiCzB3L,EAAOlnC,QAjBP,SAAsB+1C,GACpB,IAAIvM,EAAU,CAAC,EACf,OAAKuM,GAILA,EACGzY,OACA/sB,MAAM,YACN4sB,SAAQ,SAAS6Y,GAChB,IAAIjlB,EAjCV,SAA2BglB,GACzB,IAAIE,EAAWF,EAAI7+B,QAAQ,KAM3B,MAAO,CACLmM,KANS0yB,EACR9hC,UAAU,EAAGgiC,GACb3Y,OACAllB,cAIDtQ,MAHUiuC,EAAI9hC,UAAUgiC,EAAW,GAAG3Y,OAK1C,CAsBmB4Y,CAAkBF,GAC/BxM,EAAQzY,EAAO1N,MAAQ0N,EAAOjpB,KAChC,IAEK0hC,GAXEA,CAYX,0BCkCAtC,EAAOlnC,QApBP,SAAyBm2C,GACvB,OAAKA,EAEEA,EAAW5lC,MAAM,SAAS6wB,QAAO,SAASx5B,EAAQguC,GACvD,IAAI7kB,EA3CR,SAAmB6kB,GACjB,IAAIQ,EAAQR,EAAKnvB,MAAM,kBACvB,IAAK2vB,EAAO,OAAO,KAEnB,IAAIC,EAAUD,EAAM,GAChBE,EAAaF,EAAM,GAAG7lC,MAAM,KAC5BgmC,EAAM,KACNC,EAAmBF,EAAWlV,QAAO,SAASx5B,EAAQ6uC,GACxD,IAAI1lB,EAlBR,SAAoB0lB,GAClB,IAAIL,EAAQK,EAAMhwB,MAAM,6BACxB,OAAK2vB,EAEE,CACL1nB,IAAK0nB,EAAM,GACXtuC,MAAOsuC,EAAM,IAJI,IAMrB,CAUiBM,CAAWD,GACxB,OAAK1lB,EACc,QAAfA,EAAOrC,KACJ6nB,IACHA,EAAMxlB,EAAOjpB,OAERF,IAETA,EAAOmpB,EAAOrC,KAAOqC,EAAOjpB,MACrBF,GARaA,CAStB,GAAG,CAAC,GACJ,OAAK2uC,EAEE,CACLrD,IAAKmD,EACLE,IAAKA,EACLpC,OAAQqC,GALO,IAOnB,CAiBiBG,CAAUf,GACvB,OAAK7kB,GAEUA,EAAOwlB,IAAIhmC,MAAM,OACvB4sB,SAAQ,SAASoZ,GACnB3uC,EAAO2uC,KACV3uC,EAAO2uC,GAAO,CACZrD,IAAKniB,EAAOmiB,IACZiB,OAAQpjB,EAAOojB,QAGrB,IACOvsC,GAXaA,CAYtB,GAAG,CAAC,GAhBoB,CAAC,CAiB3B,0BChEA,SAASgvC,EAAY9uC,GACnB,OAAI0I,MAAMkU,QAAQ5c,GACGA,EALHsyB,IAAIyc,oBAAoBnsB,KAAK,KAOxCmsB,mBAAmBpoB,OAAO3mB,GACnC,CAYA,SAASysC,EAAiBrB,EAAKxkB,EAAK5mB,GAClC,IAAc,IAAVA,GAA6B,OAAVA,EACrB,OAAOorC,EAET,IAAI4D,EAAc,KAAKxmC,KAAK4iC,GAAO,IAAM,IACrC9D,EAAQyH,mBAAmBnoB,GAI/B,YAHcnjB,IAAVzD,GAAiC,KAAVA,IAA0B,IAAVA,IACzCsnC,GAAS,IAAMwH,EAAY9uC,IAEtB,GAAKorC,EAAM4D,EAAc1H,CAClC,CA+EAlI,EAAOlnC,QAAU,CACfq0C,kBAtEF,SAA2BnB,EAAK6D,GAC9B,IAAKA,EACH,OAAO7D,EAGT,IAAItrC,EAASsrC,EAeb,OAdA9N,OAAOC,KAAK0R,GAAa5Z,SAAQ,SAASzO,GACxC,IAAI5mB,EAAQivC,EAAYroB,QACVnjB,IAAVzD,IAGA0I,MAAMkU,QAAQ5c,KAChBA,EAAQA,EACL8lB,QAAO,SAASsO,GACf,QAASA,CACX,IACCxR,KAAK,MAEV9iB,EAAS2sC,EAAiB3sC,EAAQ8mB,EAAK5mB,GACzC,IACOF,CACT,EAkDE2sC,iBAAkBA,EAClBH,cAzCF,SAAuBlB,EAAK7L,GAC1B,IAAKA,EACH,OAAO6L,EAGT,GAAwB,SAApBA,EAAI/f,MAAM,EAAG,GACf,OAAO+f,EAGT,IAAI8D,EAAuB,MAAX9D,EAAI,GAAa,GAAK,IACtC,MAAO,GAAK7L,EAAOtuB,QAAQ,MAAO,IAAMi+B,EAAY9D,CACtD,EA+BEyB,uBAlBF,SAAgCsC,EAAO9C,GACrC,OAAKA,EAGE8C,EAAMl+B,QAAQ,sBAAsB,SAASm+B,EAAGC,GACrD,IAAIrvC,EAAQqsC,EAAOgD,GACnB,QAAc5rC,IAAVzD,EACF,MAAM,IAAIoG,MAAM,+BAAiCipC,GAGnD,MAAO,IADYP,EAAY9uC,EAEjC,IATSmvC,CAUX,iCC9GA,IAAIvT,EAAQ9jC,EAAQ,OAChBs8B,EAAIt8B,EAAQ,OACZw3C,EAAOx3C,EAAQ,OACfy3C,EAAoBz3C,EAAQ,OAC5B03C,EAAuB13C,EAAQ,OAQ/B23C,EAAY,CAAC,EAEbC,EAAe,CACjB,UACA,SACA,WACA,WACA,QACA,WACA,eACA,UACA,MACA,gBAuBFD,EAAU9H,eAAiB,SAASH,GAClCpT,EAAEub,YAAY,CACZrI,MAAOlT,EAAE+J,SAAS/J,EAAEwF,QACpB9W,KAAMsR,EAAE4K,MAAM,gBAAiB,2BAC/BgB,UAAW5L,EAAE6J,QAAQ7J,EAAEwF,QACvBiI,UAAWzN,EAAEwb,YACb3P,MAAO7L,EAAE6J,QAAQ7J,EAAE4K,MAAM0Q,IACzBG,aAAczb,EAAE8K,QAChBgB,KAAM9L,EAAE6J,QAAQ7J,EAAE9oB,QAClB80B,MAAOhM,EAAE9oB,OACT60B,SAAU/L,EAAE6J,QAAQ7J,EAAEwF,SATxBxF,CAUGoT,GAEHA,EAAO1kB,KAAO0kB,EAAO1kB,MAAQ,gBAE7B,IAAIwkB,EAAQiI,EACV3T,EACE,CAAEyG,QAASmF,EAAOxH,WAClBsP,EAAK9H,EAAQ,CACX,YACA,QACA,eACA,OACA,QACA,eAKN,OAAOv/B,KAAK8gC,OAAO2C,cAAc,CAC/BplC,OAAQ,MACRolB,KAAM,kCACN2gB,OAAQiD,EAAK9H,EAAQ,CAAC,OAAQ,UAC9BF,MAAOA,GAEX,EAqBAmI,EAAU9K,eAAiB,SAAS6C,GAClCpT,EAAEub,YAAY,CACZrI,MAAOlT,EAAE+J,SAAS/J,EAAEwb,aACpB9sB,KAAMsR,EAAE4K,MAAM,gBAAiB,2BAC/BgB,UAAW5L,EAAE6J,QAAQ7J,EAAEwF,QACvBqG,MAAO7L,EAAE6J,QAAQ7J,EAAE4K,MAAM0Q,IACzBxP,KAAM9L,EAAE6J,QAAQ7J,EAAE9oB,QAClB80B,MAAOhM,EAAE9oB,OACT60B,SAAU/L,EAAE6J,QAAQ7J,EAAEwF,QACtBkW,YAAa1b,EAAE4K,MAAM,WAAY,UARnC5K,CASGoT,GAEHA,EAAO1kB,KAAO0kB,EAAO1kB,MAAQ,gBAE7B,IAAIwkB,EAAQiI,EACV3T,EACE,CAAEyG,QAASmF,EAAOxH,WAClBsP,EAAK9H,EAAQ,CACX,UACA,QACA,OACA,QACA,WACA,kBAKN,OAAOv/B,KAAK8gC,OAAO2C,cAAc,CAC/BplC,OAAQ,MACRolB,KAAM,kCACN2gB,OAAQiD,EAAK9H,EAAQ,CAAC,OAAQ,UAC9BF,MAAOA,GAEX,EAEAlI,EAAOlnC,QAAUs3C,EAAqBC,iCC3ItC,IAAIxG,EAAanxC,EAAQ,OAErBi4C,EAAej4C,EAAQ,OAgB3BsnC,EAAOlnC,QAdP,SAA8B83C,GAC5B,OAAO,SAASC,GACd,IAAIlH,EAEFA,EADEE,EAAW7d,UAAU8kB,cAAcD,GAC5BA,EAEAF,EAAaE,GAExB,IAAIE,EAAU7S,OAAO6L,OAAO6G,GAE5B,OADAG,EAAQpH,OAASA,EACVoH,CACT,CACF,0BCTA/Q,EAAOlnC,QAPP,SAAmBmlC,EAAK+S,GACtB,OAAO9S,OAAOC,KAAKF,GAAK/D,QAAO,SAASx5B,EAAQ8mB,GAE9C,OADA9mB,EAAO8mB,GAAOwpB,EAAGxpB,EAAKyW,EAAIzW,IACnB9mB,CACT,GAAG,CAAC,EACN,0BCsBAs/B,EAAOlnC,QAnBP,SAAcm4C,EAAQ9S,GACpB,IAAIzX,EAAS,SAASc,EAAK0pB,GACzB,OAA8B,IAAvB/S,EAAKnuB,QAAQwX,SAAuBnjB,IAAR6sC,CACrC,EAMA,MAJoB,oBAAT/S,IACTzX,EAASyX,GAGJD,OAAOC,KAAK8S,GAChBvqB,QAAO,SAASc,GACf,OAAOd,EAAOc,EAAKypB,EAAOzpB,GAC5B,IACC0S,QAAO,SAASx5B,EAAQ8mB,GAEvB,OADA9mB,EAAO8mB,GAAOypB,EAAOzpB,GACd9mB,CACT,GAAG,CAAC,EACR,gCCzBA,IAAIywC,EAAYz4C,EAAQ,OAcxBsnC,EAAOlnC,QANP,SAA0BmlC,GACxB,OAAOkT,EAAUlT,GAAK,SAAS+R,EAAGpvC,GAChC,MAAwB,mBAAVA,EAAsB8+B,KAAKC,UAAU/+B,GAASA,CAC9D,GACF,gCCZA,IAAI47B,EAAQ9jC,EAAQ,OAChBs8B,EAAIt8B,EAAQ,OAwChBsnC,EAAOlnC,QAAU0jC,EAAMxH,EAAG,CACxBqW,KAvCF,SAAczqC,GAGZ,GAAsB,qBAAXqrC,OAAwB,CACjC,GAAIrrC,aAAiBwwC,EAAAA,EAAOC,MAAQzwC,aAAiBwwC,EAAAA,EAAOE,YAC1D,OAEF,MAAO,qBACT,CACA,GAAqB,kBAAV1wC,QAAqCyD,IAAfzD,EAAM2wC,KAGvC,MAAO,6BACT,EA2BE9sC,KArBF,SAAc7D,GACZ,IAAI4wC,EAAM,OACV,GAAqB,mBAAV5wC,EACT,OAAO4wC,EAET,IACE,IAAI/sC,EAAO,IAAIP,KAAKtD,GACpB,GAAI6D,EAAKmQ,SAAWnS,MAAMgC,EAAKmQ,WAC7B,OAAO48B,CAEX,CAAE,MAAOpiC,GACP,OAAOoiC,CACT,CACF,EASEhB,YAPF,SAAqB5vC,GACnB,OAAOo0B,EAAE8J,MAAM9J,EAAE9oB,OAAQ8oB,EAAE9oB,OAApB8oB,CAA4Bp0B,EACrC,EAME2vC,YA3BF,SAAqBvS,EAAcF,GACjC,OAAO9I,EAAE2I,OAAO3I,EAAEuJ,YAAYP,GAAeF,EAC/C,kCCpBA,IAAI2T,EAAS/4C,EAAQ,MAEjBg5C,EAAa,CAAC,EAwClB,SAASC,EAAI1T,EAAKzW,GAChB,OAAO0W,OAAOlS,UAAUkR,eAAehR,KAAK+R,EAAKzW,EACnD,CAEAwY,EAAOlnC,QA1CP,SAAoB8iC,GAClB,GAAI8V,EAAW9V,GACb,OAAO8V,EAAW9V,GAGpB,IAAIsT,EAAQtT,EAAMvyB,MAAM,KACpBuoC,EAAQ1C,EAAM,GACd2C,EAAa3C,EAAM,GACvB,IAAK2C,EACH,MAAM,IAAI7qC,MAAM,iBAGlB,IAAI8qC,EAkBN,SAAqBD,GACnB,IACE,OAAOnS,KAAK79B,MAAM4vC,EAAOM,OAAOF,GAClC,CAAE,MAAOrD,GACP,MAAM,IAAIxnC,MAAM,gBAClB,CACF,CAxBsBgrC,CAAYH,GAE5BnxC,EAAS,CACXkxC,MAAOA,EACPrE,KAAMuE,EAAcxiC,GAWtB,OATIqiC,EAAIG,EAAe,OAAMpxC,EAAOuxC,cAAgBH,EAAcviC,GAC9DoiC,EAAIG,EAAe,SAAQpxC,EAAOwxC,QAA8B,IAApBJ,EAAcv/B,KAC1Do/B,EAAIG,EAAe,SAAQpxC,EAAOqiC,QAA8B,IAApB+O,EAAcK,KAC1DR,EAAIG,EAAe,YAAWpxC,EAAO0xC,OAASN,EAAcM,QAC5DT,EAAIG,EAAe,YAAWpxC,EAAOipC,OAASmI,EAAcnI,QAC5DgI,EAAIG,EAAe,QAAOpxC,EAAO2xC,UAAYP,EAAcQ,IAC3DX,EAAIG,EAAe,QAAOpxC,EAAO6xC,aAAeT,EAAcU,IAElEd,EAAW9V,GAASl7B,EACbA,CACT,wBClCA,iBACE,WAGD,IAAI+xC,EAA4C35C,EAQ5C45C,GAL0C1S,GAC7CA,EAAOlnC,QAI0B,iBAAVs4C,EAAAA,GAAsBA,EAAAA,GAC1CsB,EAAWtB,SAAWsB,GAAcA,EAAWzG,OAMnD,IAAI0G,EAAwB,SAASvV,GACpCv0B,KAAKu0B,QAAUA,CAChB,GACAuV,EAAsB3mB,UAAY,IAAIhlB,OACNmV,KAAO,wBAEvC,IAAI/b,EAAQ,SAASg9B,GAGpB,MAAM,IAAIuV,EAAsBvV,EACjC,EAEIwV,EAAQ,mEAERC,EAAyB,eAuGzBpB,EAAS,CACZ,OA5DY,SAASqB,GACrBA,EAAQvrB,OAAOurB,GACX,aAAa1pC,KAAK0pC,IAGrB1yC,EACC,6EAeF,IAXA,IAGImP,EACAwD,EACApa,EAEAo6C,EAPAC,EAAUF,EAAM5xC,OAAS,EACzB84B,EAAS,GACTxC,GAAY,EAOZt2B,EAAS4xC,EAAM5xC,OAAS8xC,IAEnBxb,EAAWt2B,GAEnBqO,EAAIujC,EAAMnc,WAAWa,IAAa,GAClCzkB,EAAI+/B,EAAMnc,aAAaa,IAAa,EACpC7+B,EAAIm6C,EAAMnc,aAAaa,GAIvBwC,GACC4Y,EAAMpa,QAJPua,EAASxjC,EAAIwD,EAAIpa,IAIO,GAAK,IAC5Bi6C,EAAMpa,OAAOua,GAAU,GAAK,IAC5BH,EAAMpa,OAAOua,GAAU,EAAI,IAC3BH,EAAMpa,OAAgB,GAATua,GAuBf,OAnBe,GAAXC,GACHzjC,EAAIujC,EAAMnc,WAAWa,IAAa,EAClCzkB,EAAI+/B,EAAMnc,aAAaa,GAEvBwC,GACC4Y,EAAMpa,QAFPua,EAASxjC,EAAIwD,IAEW,IACvB6/B,EAAMpa,OAAQua,GAAU,EAAK,IAC7BH,EAAMpa,OAAQua,GAAU,EAAK,IAC7B,KAEoB,GAAXC,IACVD,EAASD,EAAMnc,WAAWa,GAC1BwC,GACC4Y,EAAMpa,OAAOua,GAAU,GACvBH,EAAMpa,OAAQua,GAAU,EAAK,IAC7B,MAIK/Y,CACR,EAIC,OAnGY,SAAS8Y,GAGrB,IAAI5xC,GAFJ4xC,EAAQvrB,OAAOurB,GACbjhC,QAAQghC,EAAwB,KACf3xC,OACfA,EAAS,GAAK,IAEjBA,GADA4xC,EAAQA,EAAMjhC,QAAQ,OAAQ,KACf3Q,SAGfA,EAAS,GAAK,GAEd,iBAAiBkI,KAAK0pC,KAEtB1yC,EACC,yEAQF,IALA,IACI6yC,EACAF,EAFAG,EAAa,EAGblZ,EAAS,GACTxC,GAAY,IACPA,EAAWt2B,GACnB6xC,EAASH,EAAM5iC,QAAQ8iC,EAAMta,OAAOhB,IACpCyb,EAAaC,EAAa,EAAiB,GAAbD,EAAkBF,EAASA,EAErDG,IAAe,IAElBlZ,GAAUzS,OAAOiP,aAChB,IAAOyc,KAAgB,EAAIC,EAAa,KAI3C,OAAOlZ,CACR,EAkEC,QAAW,cAYV,KAFDmZ,EAAAA,WACC,OAAO1B,CACP,+BAaF,CAnKC,kBCEF,IACW2B,IAkBT,SAASC,GACXA,EAAO9S,QAAU,QACjB,IAAIpxB,EAAIjK,KAER,SAASouC,EAAQ7Y,EAAKzF,GAAK,IAAI,IAAIx7B,EAAI,EAAGgW,EAAI,EAAGhW,EAAIihC,EAAIv5B,SAAU1H,EAAGgW,EAAIwlB,EAAIxlB,EAAIirB,EAAIjhC,GAAI,OAAOgW,CAAG,CACpG,SAAS+jC,EAAannC,EAAGjK,EAAGqxC,EAAIC,EAAIzlC,GAClC,GAAS,IAAN7L,EAAS,OAAOqxC,EACnB,GAAS,IAANrxC,EAAS,OAAOsxC,EAEnB,IADA,IAAIC,EAAM,EAAItnC,EAAGunC,EAAKF,EACdnuB,EAAI,EAAGA,EAAInjB,IAAKmjB,EACtBquB,EAAKF,EAAKnuB,EAAIouB,EAAM1lC,EAAOwlC,EAC3BA,EAAKC,EAAIA,EAAKE,EAEhB,OAAOA,CACT,CACA,SAASC,EAAaC,EAASC,EAAS33B,EAAM43B,EAAS/lC,GACrD,OAAO,SAAgB5B,EAAEjK,GACvB,GAAG4xC,EAAS,CACV,GAAS,IAAN3nC,EAAS,OAAmB,GAAX2nC,GAAe,IAAYC,IAC1C,GAAG5nC,EAAI,EAAG,OAAO6nC,GACxB,CACA,OAAS,IAAN9xC,EAAgB0xC,EAAQznC,GAClB,IAANjK,EAAgB2xC,EAAQ1nC,GACxBjK,EAAI,EAAU8xC,IAGVV,EAAannC,EAFpBjK,GAAG,EACM0xC,EAAQznC,GAAS0nC,EAAQ1nC,GACA4B,EACpC,CACF,CACA,IAAIzB,EAAW,WACb,IAAI2nC,EAAI,WAEJC,EAAS,CAAC,aAAgB,YAAe,aAAc,YAAa,aAAc,aAAa7L,UAC/F8L,EAAS,CAAC,YAAe,WAAc,YAAa,YAAa,YAAa,GAAK9L,UACnF+L,EAAS,CAAC,GAAM,cAAiB,gBAAkB,eAAiB,gBAAiB/L,UACrFgM,EAAS,EAAE,aAAiB,gBAAkB,eAAiB,gBAAkB,eAAgBhM,UAErG,SAASuL,EAAQznC,GACf,IAAImD,EAAE,EAAGglC,EAAG,EAAGC,EAAG,EAAG/kC,EAAIrD,EAAIA,EAC7B,GAAGA,EAAI,EAGLmD,GAFAglC,EAAKjB,EAAQa,EAAQ1kC,KACrB+kC,EAAKlB,EAAQc,EAAQ3kC,QAEhB,CACL,IAAIglC,EAAKroC,EAAI,WAEbmoC,EAAKjB,EAAQe,EADb5kC,EAAI,GAAKA,GAET+kC,EAAKlB,EAAQgB,EAAQ7kC,GACrBF,EAAIJ,EAAEuC,KAAKwiC,EAAE9nC,IAAI+C,EAAEmD,IAAImiC,GAAIF,EAAGplC,EAAEqD,IAAIiiC,GAAID,EAAG,EAAEpoC,EAC/C,CACA,OAAOmD,CACT,CAEA,IAAImlC,EAAS,CAAC,aAAgB,WAAc,aAAc,YAAa,YAAc,aAAapM,UAC9FqM,EAAS,CAAC,aAAgB,WAAc,YAAa,YAAa,YAAa,GAAKrM,UACpFsM,EAAS,CAAC,EAAK,WAAc,eAAiB,gBAAkB,eAAgBtM,UAChFuM,EAAS,CAAC,cAAgB,eAAiB,gBAAkB,aAAe,eAAgBvM,UAEhG,SAASwL,EAAQ1nC,GACf,IAAImD,EAAE,EAAGglC,EAAG,EAAGC,EAAG,EAAG/kC,EAAIrD,EAAEA,EAAGqoC,EAAKtlC,EAAEpE,IAAIqB,GAAK,YAY9C,OAXGlH,KAAK6F,IAAIqB,GAAI,EAGdmD,GAFAglC,EAAKnoC,EAAEknC,EAAQoB,EAAQjlC,KACvB+kC,EAAKlB,EAAQqB,EAAQllC,KAIrB8kC,EAAGjB,EAAQsB,EADXnlC,EAAI,GAAKA,GAET+kC,EAAGlB,EAAQuB,EAAQplC,GACnBF,EAAEJ,EAAEuC,KAAKwiC,EAAE/kC,EAAEpE,IAAIqB,KAAK+C,EAAEmD,IAAImiC,GAAIF,EAAGplC,EAAEqD,IAAIiiC,GAAID,EAAG,EAAErlC,EAAEpE,IAAIqB,IACrDA,EAAI,IAAGmD,GAAKA,IAEVA,CACT,CAEA,OAAO,SAAShD,EAAQH,EAAGjK,GAEzB,GADAA,EAAI+C,KAAKuE,MAAMtH,IACXsa,SAASrQ,GAAI,OAAO3J,MAAM2J,GAAKA,EAAI,EACvC,GAAGjK,EAAI,EAAG,OAASA,EAAE,GAAI,EAAE,GAAGoK,EAAQH,GAAIjK,GAC1C,GAAGiK,EAAI,EAAG,OAASjK,EAAE,GAAI,EAAE,GAAGoK,GAASH,EAAGjK,GAC1C,GAAS,IAANA,EAAS,OAAO0xC,EAAQznC,GAC3B,GAAS,IAANjK,EAAS,OAAO2xC,EAAQ1nC,GAC3B,GAAS,IAANA,EAAS,OAAO,EAEnB,IAAI0oC,EAAI,EACR,GAAG1oC,EAAIjK,EACL2yC,EAAMvB,EAAannC,EAAGjK,EAAG0xC,EAAQznC,GAAI0nC,EAAQ1nC,IAAI,OAC5C,CAML,IALA,IACI2oC,GAAK,EACLC,EAAI,EAAKnyC,EAAI,EACboyC,EAAG,EAAKC,EAAM,EACdC,EAAM,EAAI/oC,EACL5K,EALH,EAAE2N,EAAE5I,OAAOpE,EAAEgN,EAAE5I,MAAM4I,EAAEuC,KAAK,GAAGvP,KAAK,GAK7BX,EAAE,EAAEA,IACf0zC,EAAI1zC,EAAE2zC,EAAIF,EAAGD,EACbA,EAAIC,EACJA,EAAGC,EACC/lC,EAAEpE,IAAIkqC,GAAM,OACdA,GAAM,MACND,GAAO,MACPF,GAAO,MACPjyC,GAAO,OAELkyC,IAAMlyC,GAAOoyC,GACjBF,GAAMA,EACFvzC,GAAKW,IAAG2yC,EAAIE,GAGlBF,GADAjyC,EAAI,EAAIA,EAAIoyC,CAEd,CACA,OAAOH,CACT,CACF,CAlFe,GAmFXnoC,EAAW,WACb,IAAIunC,EAAI,WAEJC,EAAS,EAAE,WAAc,YAAe,YAAa,aAAc,YAAa,aAAa7L,UAC7F8L,EAAS,CAAC,YAAe,YAAa,YAAa,WAAa,YAAa,GAAK9L,UAClF+L,EAAS,CAAC,GAAM,cAAiB,gBAAkB,eAAiB,gBAAiB/L,UACrFgM,EAAS,EAAE,aAAiB,gBAAkB,eAAiB,gBAAkB,eAAgBhM,UAiBjGoM,EAAS,EAAE,aAAiB,aAAkB,YAAiB,aAAiB,YAAgB,aAAgBpM,UAChHqM,EAAS,CAAC,YAAiB,aAAiB,WAAiB,YAAgB,WAAgB,YAAgB,GAAGrM,UAChHsM,EAAS,CAAC,EAAK,WAAc,eAAiB,gBAAkB,eAAgBtM,UAChFuM,EAAS,CAAC,cAAgB,eAAiB,gBAAkB,aAAe,eAAgBvM,UAiBhG,OAAOsL,GAnCP,SAAiBxnC,GACf,IAAImD,EAAE,EAAGglC,EAAG,EAAGC,EAAG,EAAG/kC,EAAIrD,EAAIA,EAAGqoC,EAAKroC,EAAI,WAWzC,OAVGA,EAAI,EAGLmD,GAFAglC,EAAKjB,EAAQa,EAAQ1kC,KACrB+kC,EAAKlB,EAAQc,EAAQ3kC,IACTykC,EAAI3nC,EAAQH,EAAE,GAAK+C,EAAEkE,IAAIjH,IAGrCmoC,EAAKjB,EAAQe,EADb5kC,EAAI,GAAKA,GAET+kC,EAAKlB,EAAQgB,EAAQ7kC,GACrBF,EAAIJ,EAAEuC,KAAKwiC,EAAE9nC,IAAI+C,EAAEqD,IAAIiiC,GAAIF,EAAGplC,EAAEmD,IAAImiC,GAAID,EAAG,EAAEpoC,IAExCmD,CACT,IAOA,SAAiBnD,GACf,IAAImD,EAAE,EAAGglC,EAAG,EAAGC,EAAG,EAAG/kC,EAAIrD,EAAEA,EAAGqoC,EAAKroC,EAAI,YAWvC,OAVGA,EAAI,EAGLmD,GAFAglC,EAAKnoC,EAAEknC,EAAQoB,EAAQjlC,KACvB+kC,EAAKlB,EAAQqB,EAAQllC,IACTykC,GAAK3nC,EAAQH,EAAE,GAAK+C,EAAEkE,IAAIjH,GAAK,EAAIA,IAG/CmoC,EAAGjB,EAAQsB,EADXnlC,EAAI,GAAKA,GAET+kC,EAAGlB,EAAQuB,EAAQplC,GACnBF,EAAEJ,EAAEuC,KAAKwiC,EAAE9nC,IAAI+C,EAAEqD,IAAIiiC,GAAIF,EAAGplC,EAAEmD,IAAImiC,GAAID,EAAG,EAAEpoC,IAEtCmD,CACT,GAEsC,EAAW,GAAI,EACvD,CA5Ce,GA6CXlD,EAAW,WACb,IAAI+oC,EAAO,CAAC,EAAK,UAAW,UAAW,UAAW,SAAW,SAAa,UAAY9M,UAClF+M,EAAO,CAAC,UAAY,UAAc,WAAc,UAAa,WAAc,UAAc,WAAe,UAAc,WAAa/M,UAOnIgN,EAAO,CAAC,GAAK,UAAY,UAAY,UAAY,UAAc,UAAa,UAAYhN,UACxFiN,EAAO,CAAC,WAAa,WAAe,UAAa,WAAc,UAAc,WAAe,UAAc,WAAe,WAAajN,UAO1I,OAAO,SAASj8B,EAAQD,EAAGjK,GAEzB,GAAS,KADTA,EAAI+C,KAAKuE,MAAMtH,IACH,OAfd,SAAiBiK,GACf,OAAGA,GAAK,KAAaknC,EAAQ8B,EAAMhpC,EAAEA,EAAC,SAC/B+C,EAAEoD,IAAIpD,EAAEpE,IAAIqB,IAAI+C,EAAEuC,KAAKvC,EAAEpE,IAAIqB,IAAIknC,EAAQ+B,EAAM,KAAKlmC,EAAEpE,IAAIqB,GACnE,CAYqBynC,CAAQznC,GAC3B,GAAS,IAANjK,EAAS,OARd,SAAiBiK,GACf,OAAGA,EAAI,KAAaA,EAAIknC,EAAQgC,EAAMlpC,EAAEA,EAAC,UACjCA,EAAI,GAAK,EAAI,GAAK+C,EAAEoD,IAAIpD,EAAEpE,IAAIqB,IAAI+C,EAAEuC,KAAKvC,EAAEpE,IAAIqB,IAAIknC,EAAQiC,EAAM,KAAKpmC,EAAEpE,IAAIqB,GACtF,CAKqB0nC,CAAQ1nC,GAC3B,GAAGjK,EAAI,EAAG,OAAO8xC,IACjB,GAAgB,IAAb9kC,EAAEpE,IAAIqB,GAAU,OAAO,EAC1B,GAAGA,GAAK4nC,IAAU,OAAOA,IAEzB,IAAexyC,EAAXszC,EAAM,EAAQK,EAAM,EAAIhmC,EAAEpE,IAAIqB,GAAIopC,EAAM,EAAKC,EAAG,EAAKC,EAAI,EAE7D,IAAKl0C,EADC,EAAE2N,EAAE1F,OAAOtH,EAAEgN,EAAE1F,MAAM0F,EAAEuC,KAAK,GAAGvP,KAAK,GACjCX,EAAE,EAAEA,IACXk0C,EAAIl0C,EAAE2zC,EAAIM,EAAKD,EACfA,EAAIC,EAAIA,EAAGC,EACPvmC,EAAEpE,IAAI0qC,GAAM,OACdA,GAAM,MACND,GAAO,MACPV,GAAO,OAENtzC,GAAKW,IAAG2yC,EAAMU,GAGnB,OADAV,GAAOzoC,EAAQD,EAAG,GAAKqpC,EAChBrpC,EAAI,GAAMjK,EAAE,GAAM2yC,EAAMA,CACjC,CAEF,CAzCe,GA2CXroC,EAAW,WACb,IAAI2oC,EAAO,EAAE,UAAY,SAAY,UAAY,SAAc,UAAa,QAAY,OAAS9M,UAC7F+M,EAAO,CAAC,YAAa,UAAc,WAAe,UAAc,WAAc,SAAa,UAAY/M,UAOvGgN,EAAO,CAAC,EAAK,WAAa,WAAa,WAAa,WAAe,WAAc,SAAWhN,UAC5FiN,EAAO,CAAC,WAAY,WAAa,SAAc,WAAe,UAAa,WAAc,UAAYjN,UAOzG,OAAOsL,GAbP,SAAiBxnC,GACf,OAAGA,GAAK,GAAW+C,EAAEkE,IAAIjH,EAAE,GAAKC,EAAQD,EAAE,GAAKknC,EAAQ8B,EAAMhpC,EAAEA,EAAE,GAC1D+C,EAAEoD,KAAKnG,GAAK+C,EAAEuC,KAAKtF,GAAKknC,EAAQ+B,EAAM,EAAEjpC,EACjD,IAKA,SAAiBA,GACf,OAAGA,GAAK,EAAU+C,EAAEkE,IAAIjH,EAAE,GAAKC,EAAQD,EAAE,GAAM,EAAEA,EAAKknC,EAAQgC,EAAMlpC,EAAEA,EAAE,GACjE+C,EAAEoD,KAAKnG,GAAG+C,EAAEuC,KAAKtF,GAAGknC,EAAQiC,EAAM,EAAEnpC,EAC7C,GAEsC,EAAW,EAAG,EACtD,CAlBe,GAmBfinC,EAAO9mC,QAAUA,EACjB8mC,EAAO1mC,QAAUA,EACjB0mC,EAAOhnC,QAAUA,EACjBgnC,EAAO5mC,QAAUA,CACjB,EA/OqC,qBAAzBkpC,qBAENvC,EAAQt6C,GAWVs6C,EAAiB,CAAC,2BCjBtB,IAAIzB,EAAMzT,OAAOlS,UAAUkR,eACvB0Y,EAAS,IASb,SAASC,IAAU,CA4BnB,SAASC,EAAGx8C,EAAI8yB,EAAS2pB,GACvBltC,KAAKvP,GAAKA,EACVuP,KAAKujB,QAAUA,EACfvjB,KAAKktC,KAAOA,IAAQ,CACtB,CAaA,SAASC,EAAY7K,EAAS3I,EAAOlpC,EAAI8yB,EAAS2pB,GAChD,GAAkB,oBAAPz8C,EACT,MAAM,IAAI28C,UAAU,mCAGtB,IAAIC,EAAW,IAAIJ,EAAGx8C,EAAI8yB,GAAW+e,EAAS4K,GAC1CI,EAAMP,EAASA,EAASpT,EAAQA,EAMpC,OAJK2I,EAAQiL,QAAQD,GACXhL,EAAQiL,QAAQD,GAAK78C,GAC1B6xC,EAAQiL,QAAQD,GAAO,CAAChL,EAAQiL,QAAQD,GAAMD,GADhB/K,EAAQiL,QAAQD,GAAKt1C,KAAKq1C,IADlC/K,EAAQiL,QAAQD,GAAOD,EAAU/K,EAAQkL,gBAI7DlL,CACT,CASA,SAASmL,EAAWnL,EAASgL,GACI,MAAzBhL,EAAQkL,aAAoBlL,EAAQiL,QAAU,IAAIP,SAC5C1K,EAAQiL,QAAQD,EAC9B,CASA,SAASvR,IACP/7B,KAAKutC,QAAU,IAAIP,EACnBhtC,KAAKwtC,aAAe,CACtB,CAzEInY,OAAO6L,SACT8L,EAAO7pB,UAAYkS,OAAO6L,OAAO,OAM5B,IAAI8L,GAASU,YAAWX,GAAS,IA2ExChR,EAAa5Y,UAAUwqB,WAAa,WAClC,IACIC,EACAt6B,EAFAu6B,EAAQ,GAIZ,GAA0B,IAAtB7tC,KAAKwtC,aAAoB,OAAOK,EAEpC,IAAKv6B,KAASs6B,EAAS5tC,KAAKutC,QACtBzE,EAAIzlB,KAAKuqB,EAAQt6B,IAAOu6B,EAAM71C,KAAK+0C,EAASz5B,EAAK8P,MAAM,GAAK9P,GAGlE,OAAI+hB,OAAOyY,sBACFD,EAAMz0C,OAAOi8B,OAAOyY,sBAAsBF,IAG5CC,CACT,EASA9R,EAAa5Y,UAAU4qB,UAAY,SAAmBpU,GACpD,IAAI2T,EAAMP,EAASA,EAASpT,EAAQA,EAChCqU,EAAWhuC,KAAKutC,QAAQD,GAE5B,IAAKU,EAAU,MAAO,GACtB,GAAIA,EAASv9C,GAAI,MAAO,CAACu9C,EAASv9C,IAElC,IAAK,IAAIE,EAAI,EAAG6H,EAAIw1C,EAAS31C,OAAQ41C,EAAK,IAAIxtC,MAAMjI,GAAI7H,EAAI6H,EAAG7H,IAC7Ds9C,EAAGt9C,GAAKq9C,EAASr9C,GAAGF,GAGtB,OAAOw9C,CACT,EASAlS,EAAa5Y,UAAU+qB,cAAgB,SAAuBvU,GAC5D,IAAI2T,EAAMP,EAASA,EAASpT,EAAQA,EAChCoU,EAAY/tC,KAAKutC,QAAQD,GAE7B,OAAKS,EACDA,EAAUt9C,GAAW,EAClBs9C,EAAU11C,OAFM,CAGzB,EASA0jC,EAAa5Y,UAAUgc,KAAO,SAAcxF,EAAO+R,EAAIC,EAAIwC,EAAIC,EAAIC,GACjE,IAAIf,EAAMP,EAASA,EAASpT,EAAQA,EAEpC,IAAK35B,KAAKutC,QAAQD,GAAM,OAAO,EAE/B,IAEI9hC,EACA7a,EAHAo9C,EAAY/tC,KAAKutC,QAAQD,GACzBzb,EAAM/mB,UAAUzS,OAIpB,GAAI01C,EAAUt9C,GAAI,CAGhB,OAFIs9C,EAAUb,MAAMltC,KAAK6gC,eAAelH,EAAOoU,EAAUt9C,QAAI+K,GAAW,GAEhEq2B,GACN,KAAK,EAAG,OAAOkc,EAAUt9C,GAAG4yB,KAAK0qB,EAAUxqB,UAAU,EACrD,KAAK,EAAG,OAAOwqB,EAAUt9C,GAAG4yB,KAAK0qB,EAAUxqB,QAASmoB,IAAK,EACzD,KAAK,EAAG,OAAOqC,EAAUt9C,GAAG4yB,KAAK0qB,EAAUxqB,QAASmoB,EAAIC,IAAK,EAC7D,KAAK,EAAG,OAAOoC,EAAUt9C,GAAG4yB,KAAK0qB,EAAUxqB,QAASmoB,EAAIC,EAAIwC,IAAK,EACjE,KAAK,EAAG,OAAOJ,EAAUt9C,GAAG4yB,KAAK0qB,EAAUxqB,QAASmoB,EAAIC,EAAIwC,EAAIC,IAAK,EACrE,KAAK,EAAG,OAAOL,EAAUt9C,GAAG4yB,KAAK0qB,EAAUxqB,QAASmoB,EAAIC,EAAIwC,EAAIC,EAAIC,IAAK,EAG3E,IAAK19C,EAAI,EAAG6a,EAAO,IAAI/K,MAAMoxB,EAAK,GAAIlhC,EAAIkhC,EAAKlhC,IAC7C6a,EAAK7a,EAAI,GAAKma,UAAUna,GAG1Bo9C,EAAUt9C,GAAG0wB,MAAM4sB,EAAUxqB,QAAS/X,EACxC,KAAO,CACL,IACI7S,EADAN,EAAS01C,EAAU11C,OAGvB,IAAK1H,EAAI,EAAGA,EAAI0H,EAAQ1H,IAGtB,OAFIo9C,EAAUp9C,GAAGu8C,MAAMltC,KAAK6gC,eAAelH,EAAOoU,EAAUp9C,GAAGF,QAAI+K,GAAW,GAEtEq2B,GACN,KAAK,EAAGkc,EAAUp9C,GAAGF,GAAG4yB,KAAK0qB,EAAUp9C,GAAG4yB,SAAU,MACpD,KAAK,EAAGwqB,EAAUp9C,GAAGF,GAAG4yB,KAAK0qB,EAAUp9C,GAAG4yB,QAASmoB,GAAK,MACxD,KAAK,EAAGqC,EAAUp9C,GAAGF,GAAG4yB,KAAK0qB,EAAUp9C,GAAG4yB,QAASmoB,EAAIC,GAAK,MAC5D,KAAK,EAAGoC,EAAUp9C,GAAGF,GAAG4yB,KAAK0qB,EAAUp9C,GAAG4yB,QAASmoB,EAAIC,EAAIwC,GAAK,MAChE,QACE,IAAK3iC,EAAM,IAAK7S,EAAI,EAAG6S,EAAO,IAAI/K,MAAMoxB,EAAK,GAAIl5B,EAAIk5B,EAAKl5B,IACxD6S,EAAK7S,EAAI,GAAKmS,UAAUnS,GAG1Bo1C,EAAUp9C,GAAGF,GAAG0wB,MAAM4sB,EAAUp9C,GAAG4yB,QAAS/X,GAGpD,CAEA,OAAO,CACT,EAWAuwB,EAAa5Y,UAAUib,GAAK,SAAYzE,EAAOlpC,EAAI8yB,GACjD,OAAO4pB,EAAYntC,KAAM25B,EAAOlpC,EAAI8yB,GAAS,EAC/C,EAWAwY,EAAa5Y,UAAU+pB,KAAO,SAAcvT,EAAOlpC,EAAI8yB,GACrD,OAAO4pB,EAAYntC,KAAM25B,EAAOlpC,EAAI8yB,GAAS,EAC/C,EAYAwY,EAAa5Y,UAAU0d,eAAiB,SAAwBlH,EAAOlpC,EAAI8yB,EAAS2pB,GAClF,IAAII,EAAMP,EAASA,EAASpT,EAAQA,EAEpC,IAAK35B,KAAKutC,QAAQD,GAAM,OAAOttC,KAC/B,IAAKvP,EAEH,OADAg9C,EAAWztC,KAAMstC,GACVttC,KAGT,IAAI+tC,EAAY/tC,KAAKutC,QAAQD,GAE7B,GAAIS,EAAUt9C,GAEVs9C,EAAUt9C,KAAOA,GACfy8C,IAAQa,EAAUb,MAClB3pB,GAAWwqB,EAAUxqB,UAAYA,GAEnCkqB,EAAWztC,KAAMstC,OAEd,CACL,IAAK,IAAI38C,EAAI,EAAGi9C,EAAS,GAAIv1C,EAAS01C,EAAU11C,OAAQ1H,EAAI0H,EAAQ1H,KAEhEo9C,EAAUp9C,GAAGF,KAAOA,GACnBy8C,IAASa,EAAUp9C,GAAGu8C,MACtB3pB,GAAWwqB,EAAUp9C,GAAG4yB,UAAYA,IAErCqqB,EAAO51C,KAAK+1C,EAAUp9C,IAOtBi9C,EAAOv1C,OAAQ2H,KAAKutC,QAAQD,GAAyB,IAAlBM,EAAOv1C,OAAeu1C,EAAO,GAAKA,EACpEH,EAAWztC,KAAMstC,EACxB,CAEA,OAAOttC,IACT,EASA+7B,EAAa5Y,UAAUmrB,mBAAqB,SAA4B3U,GACtE,IAAI2T,EAUJ,OARI3T,GACF2T,EAAMP,EAASA,EAASpT,EAAQA,EAC5B35B,KAAKutC,QAAQD,IAAMG,EAAWztC,KAAMstC,KAExCttC,KAAKutC,QAAU,IAAIP,EACnBhtC,KAAKwtC,aAAe,GAGfxtC,IACT,EAKA+7B,EAAa5Y,UAAUqb,IAAMzC,EAAa5Y,UAAU0d,eACpD9E,EAAa5Y,UAAUgqB,YAAcpR,EAAa5Y,UAAUib,GAK5DrC,EAAawS,SAAWxB,EAKxBhR,EAAaA,aAAeA,EAM1B5E,EAAOlnC,QAAU8rC,0BCvTnB,IAOIyS,EAPAC,EAAuB,kBAAZC,QAAuBA,QAAU,KAC5CC,EAAeF,GAAwB,oBAAZA,EAAEttB,MAC7BstB,EAAEttB,MACF,SAAsBsd,EAAQmQ,EAAUpjC,GACxC,OAAOqjC,SAAS1rB,UAAUhC,MAAMkC,KAAKob,EAAQmQ,EAAUpjC,EACzD,EAIAgjC,EADEC,GAA0B,oBAAdA,EAAEK,QACCL,EAAEK,QACVzZ,OAAOyY,sBACC,SAAwBrP,GACvC,OAAOpJ,OAAO0Z,oBAAoBtQ,GAC/BrlC,OAAOi8B,OAAOyY,sBAAsBrP,GACzC,EAEiB,SAAwBA,GACvC,OAAOpJ,OAAO0Z,oBAAoBtQ,EACpC,EAOF,IAAIuQ,EAAc7lC,OAAOvP,OAAS,SAAqB7B,GACrD,OAAOA,IAAUA,CACnB,EAEA,SAASgkC,IACPA,EAAakT,KAAK5rB,KAAKrjB,KACzB,CACAm3B,EAAOlnC,QAAU8rC,EACjB5E,EAAOlnC,QAAQi9C,KAwYf,SAAc5K,EAAShvB,GACrB,OAAO,IAAI4uB,SAAQ,SAAUC,EAASC,GACpC,SAAS8M,EAAc5V,GACrBgJ,EAAQzB,eAAevtB,EAAM67B,GAC7B/M,EAAO9I,EACT,CAEA,SAAS6V,IAC+B,oBAA3B7M,EAAQzB,gBACjByB,EAAQzB,eAAe,QAASqO,GAElC/M,EAAQ,GAAG/e,MAAMC,KAAKvY,WACxB,CAEAskC,EAA+B9M,EAAShvB,EAAM67B,EAAU,CAAEjC,MAAM,IACnD,UAAT55B,GAMR,SAAuCgvB,EAAS+M,EAASC,GAC7B,oBAAfhN,EAAQlE,IACjBgR,EAA+B9M,EAAS,QAAS+M,EAASC,EAE9D,CATMC,CAA8BjN,EAAS4M,EAAe,CAAEhC,MAAM,GAElE,GACF,EAxZAnR,EAAaA,aAAeA,EAE5BA,EAAa5Y,UAAUoqB,aAAU/xC,EACjCugC,EAAa5Y,UAAUqqB,aAAe,EACtCzR,EAAa5Y,UAAUqsB,mBAAgBh0C,EAIvC,IAAIi0C,EAAsB,GAE1B,SAASC,EAAcrC,GACrB,GAAwB,oBAAbA,EACT,MAAM,IAAID,UAAU,0EAA4EC,EAEpG,CAoCA,SAASsC,EAAiBC,GACxB,YAA2Bp0C,IAAvBo0C,EAAKJ,cACAzT,EAAa0T,oBACfG,EAAKJ,aACd,CAkDA,SAASK,EAAapR,EAAQpxB,EAAMggC,EAAUyC,GAC5C,IAAItpC,EACAonC,EACAmC,EA1HsBC,EAgJ1B,GApBAN,EAAcrC,QAGC7xC,KADfoyC,EAASnP,EAAO8O,UAEdK,EAASnP,EAAO8O,QAAUlY,OAAO6L,OAAO,MACxCzC,EAAO+O,aAAe,SAIKhyC,IAAvBoyC,EAAOqC,cACTxR,EAAOU,KAAK,cAAe9xB,EACfggC,EAASA,SAAWA,EAASA,SAAWA,GAIpDO,EAASnP,EAAO8O,SAElBwC,EAAWnC,EAAOvgC,SAGH7R,IAAbu0C,EAEFA,EAAWnC,EAAOvgC,GAAQggC,IACxB5O,EAAO+O,kBAeT,GAbwB,oBAAbuC,EAETA,EAAWnC,EAAOvgC,GAChByiC,EAAU,CAACzC,EAAU0C,GAAY,CAACA,EAAU1C,GAErCyC,EACTC,EAAS/c,QAAQqa,GAEjB0C,EAAS/3C,KAAKq1C,IAIhB7mC,EAAImpC,EAAiBlR,IACb,GAAKsR,EAAS13C,OAASmO,IAAMupC,EAASG,OAAQ,CACpDH,EAASG,QAAS,EAGlB,IAAIC,EAAI,IAAIhyC,MAAM,+CACE4xC,EAAS13C,OAAS,IAAMqmB,OAAOrR,GADjC,qEAIlB8iC,EAAE78B,KAAO,8BACT68B,EAAE7N,QAAU7D,EACZ0R,EAAE9iC,KAAOA,EACT8iC,EAAE/rB,MAAQ2rB,EAAS13C,OA7KG23C,EA8KHG,EA7KnBC,SAAWA,QAAQC,MAAMD,QAAQC,KAAKL,EA8KxC,CAGF,OAAOvR,CACT,CAaA,SAAS6R,IACP,IAAKtwC,KAAKuwC,MAGR,OAFAvwC,KAAKy+B,OAAOoC,eAAe7gC,KAAKqN,KAAMrN,KAAKwwC,QAC3CxwC,KAAKuwC,OAAQ,EACY,IAArBzlC,UAAUzS,OACL2H,KAAKqtC,SAAShqB,KAAKrjB,KAAKy+B,QAC1Bz+B,KAAKqtC,SAASlsB,MAAMnhB,KAAKy+B,OAAQ3zB,UAE5C,CAEA,SAAS2lC,EAAUhS,EAAQpxB,EAAMggC,GAC/B,IAAIqD,EAAQ,CAAEH,OAAO,EAAOC,YAAQh1C,EAAWijC,OAAQA,EAAQpxB,KAAMA,EAAMggC,SAAUA,GACjFsD,EAAUL,EAAYxT,KAAK4T,GAG/B,OAFAC,EAAQtD,SAAWA,EACnBqD,EAAMF,OAASG,EACRA,CACT,CAyHA,SAASC,EAAWnS,EAAQpxB,EAAMwjC,GAChC,IAAIjD,EAASnP,EAAO8O,QAEpB,QAAe/xC,IAAXoyC,EACF,MAAO,GAET,IAAIkD,EAAalD,EAAOvgC,GACxB,YAAmB7R,IAAfs1C,EACK,GAEiB,oBAAfA,EACFD,EAAS,CAACC,EAAWzD,UAAYyD,GAAc,CAACA,GAElDD,EAsDT,SAAyBjf,GAEvB,IADA,IAAIqa,EAAM,IAAIxrC,MAAMmxB,EAAIv5B,QACf1H,EAAI,EAAGA,EAAIs7C,EAAI5zC,SAAU1H,EAChCs7C,EAAIt7C,GAAKihC,EAAIjhC,GAAG08C,UAAYzb,EAAIjhC,GAElC,OAAOs7C,CACT,CA3DI8E,CAAgBD,GAAcE,EAAWF,EAAYA,EAAWz4C,OACpE,CAmBA,SAAS61C,EAAc7gC,GACrB,IAAIugC,EAAS5tC,KAAKutC,QAElB,QAAe/xC,IAAXoyC,EAAsB,CACxB,IAAIkD,EAAalD,EAAOvgC,GAExB,GAA0B,oBAAfyjC,EACT,OAAO,EACF,QAAmBt1C,IAAfs1C,EACT,OAAOA,EAAWz4C,MAEtB,CAEA,OAAO,CACT,CAMA,SAAS24C,EAAWpf,EAAKt4B,GAEvB,IADA,IAAI23C,EAAO,IAAIxwC,MAAMnH,GACZ3I,EAAI,EAAGA,EAAI2I,IAAK3I,EACvBsgD,EAAKtgD,GAAKihC,EAAIjhC,GAChB,OAAOsgD,CACT,CA2CA,SAAS7B,EAA+B9M,EAAShvB,EAAM+5B,EAAUiC,GAC/D,GAA0B,oBAAfhN,EAAQlE,GACbkR,EAAMpC,KACR5K,EAAQ4K,KAAK55B,EAAM+5B,GAEnB/K,EAAQlE,GAAG9qB,EAAM+5B,OAEd,IAAwC,oBAA7B/K,EAAQ7E,iBAYxB,MAAM,IAAI2P,UAAU,6EAA+E9K,GATnGA,EAAQ7E,iBAAiBnqB,GAAM,SAAS49B,EAAapzB,GAG/CwxB,EAAMpC,MACR5K,EAAQ6O,oBAAoB79B,EAAM49B,GAEpC7D,EAASvvB,EACX,GAGF,CACF,CAraAuX,OAAO+b,eAAerV,EAAc,sBAAuB,CACzDsV,YAAY,EACZC,IAAK,WACH,OAAO7B,CACT,EACAj/C,IAAK,SAASstB,GACZ,GAAmB,kBAARA,GAAoBA,EAAM,GAAKkxB,EAAYlxB,GACpD,MAAM,IAAIyzB,WAAW,kGAAoGzzB,EAAM,KAEjI2xB,EAAsB3xB,CACxB,IAGFie,EAAakT,KAAO,gBAEGzzC,IAAjBwE,KAAKutC,SACLvtC,KAAKutC,UAAYlY,OAAOmc,eAAexxC,MAAMutC,UAC/CvtC,KAAKutC,QAAUlY,OAAO6L,OAAO,MAC7BlhC,KAAKwtC,aAAe,GAGtBxtC,KAAKwvC,cAAgBxvC,KAAKwvC,oBAAiBh0C,CAC7C,EAIAugC,EAAa5Y,UAAUsuB,gBAAkB,SAAyBn4C,GAChE,GAAiB,kBAANA,GAAkBA,EAAI,GAAK01C,EAAY11C,GAChD,MAAM,IAAIi4C,WAAW,gFAAkFj4C,EAAI,KAG7G,OADA0G,KAAKwvC,cAAgBl2C,EACd0G,IACT,EAQA+7B,EAAa5Y,UAAUuuB,gBAAkB,WACvC,OAAO/B,EAAiB3vC,KAC1B,EAEA+7B,EAAa5Y,UAAUgc,KAAO,SAAc9xB,GAE1C,IADA,IAAI7B,EAAO,GACF7a,EAAI,EAAGA,EAAIma,UAAUzS,OAAQ1H,IAAK6a,EAAKxT,KAAK8S,UAAUna,IAC/D,IAAIghD,EAAoB,UAATtkC,EAEXugC,EAAS5tC,KAAKutC,QAClB,QAAe/xC,IAAXoyC,EACF+D,EAAWA,QAA4Bn2C,IAAjBoyC,EAAOr2C,WAC1B,IAAKo6C,EACR,OAAO,EAGT,GAAIA,EAAS,CACX,IAAIC,EAGJ,GAFIpmC,EAAKnT,OAAS,IAChBu5C,EAAKpmC,EAAK,IACRomC,aAAczzC,MAGhB,MAAMyzC,EAGR,IAAItY,EAAM,IAAIn7B,MAAM,oBAAsByzC,EAAK,KAAOA,EAAGrd,QAAU,IAAM,KAEzE,MADA+E,EAAI/V,QAAUquB,EACRtY,CACR,CAEA,IAAI+V,EAAUzB,EAAOvgC,GAErB,QAAgB7R,IAAZ6zC,EACF,OAAO,EAET,GAAuB,oBAAZA,EACTV,EAAaU,EAASrvC,KAAMwL,OAE5B,KAAIqmB,EAAMwd,EAAQh3C,OACd01C,EAAYiD,EAAW3B,EAASxd,GACpC,IAASlhC,EAAI,EAAGA,EAAIkhC,IAAOlhC,EACzBg+C,EAAaZ,EAAUp9C,GAAIqP,KAAMwL,EAHX,CAM1B,OAAO,CACT,EAgEAuwB,EAAa5Y,UAAUgqB,YAAc,SAAqB9/B,EAAMggC,GAC9D,OAAOwC,EAAa7vC,KAAMqN,EAAMggC,GAAU,EAC5C,EAEAtR,EAAa5Y,UAAUib,GAAKrC,EAAa5Y,UAAUgqB,YAEnDpR,EAAa5Y,UAAU0uB,gBACnB,SAAyBxkC,EAAMggC,GAC7B,OAAOwC,EAAa7vC,KAAMqN,EAAMggC,GAAU,EAC5C,EAoBJtR,EAAa5Y,UAAU+pB,KAAO,SAAc7/B,EAAMggC,GAGhD,OAFAqC,EAAcrC,GACdrtC,KAAKo+B,GAAG/wB,EAAMojC,EAAUzwC,KAAMqN,EAAMggC,IAC7BrtC,IACT,EAEA+7B,EAAa5Y,UAAU2uB,oBACnB,SAA6BzkC,EAAMggC,GAGjC,OAFAqC,EAAcrC,GACdrtC,KAAK6xC,gBAAgBxkC,EAAMojC,EAAUzwC,KAAMqN,EAAMggC,IAC1CrtC,IACT,EAGJ+7B,EAAa5Y,UAAU0d,eACnB,SAAwBxzB,EAAMggC,GAC5B,IAAI5W,EAAMmX,EAAQjf,EAAUh+B,EAAGohD,EAK/B,GAHArC,EAAcrC,QAGC7xC,KADfoyC,EAAS5tC,KAAKutC,SAEZ,OAAOvtC,KAGT,QAAaxE,KADbi7B,EAAOmX,EAAOvgC,IAEZ,OAAOrN,KAET,GAAIy2B,IAAS4W,GAAY5W,EAAK4W,WAAaA,EACb,MAAtBrtC,KAAKwtC,aACTxtC,KAAKutC,QAAUlY,OAAO6L,OAAO,cAEtB0M,EAAOvgC,GACVugC,EAAO/M,gBACT7gC,KAAKm/B,KAAK,iBAAkB9xB,EAAMopB,EAAK4W,UAAYA,SAElD,GAAoB,oBAAT5W,EAAqB,CAGrC,IAFA9H,GAAY,EAEPh+B,EAAI8lC,EAAKp+B,OAAS,EAAG1H,GAAK,EAAGA,IAChC,GAAI8lC,EAAK9lC,KAAO08C,GAAY5W,EAAK9lC,GAAG08C,WAAaA,EAAU,CACzD0E,EAAmBtb,EAAK9lC,GAAG08C,SAC3B1e,EAAWh+B,EACX,KACF,CAGF,GAAIg+B,EAAW,EACb,OAAO3uB,KAEQ,IAAb2uB,EACF8H,EAAK9xB,QAiIf,SAAmB8xB,EAAMh9B,GACvB,KAAOA,EAAQ,EAAIg9B,EAAKp+B,OAAQoB,IAC9Bg9B,EAAKh9B,GAASg9B,EAAKh9B,EAAQ,GAC7Bg9B,EAAK/Z,KACP,CAnIUs1B,CAAUvb,EAAM9H,GAGE,IAAhB8H,EAAKp+B,SACPu1C,EAAOvgC,GAAQopB,EAAK,SAEQj7B,IAA1BoyC,EAAO/M,gBACT7gC,KAAKm/B,KAAK,iBAAkB9xB,EAAM0kC,GAAoB1E,EAC1D,CAEA,OAAOrtC,IACT,EAEJ+7B,EAAa5Y,UAAUqb,IAAMzC,EAAa5Y,UAAU0d,eAEpD9E,EAAa5Y,UAAUmrB,mBACnB,SAA4BjhC,GAC1B,IAAI0gC,EAAWH,EAAQj9C,EAGvB,QAAe6K,KADfoyC,EAAS5tC,KAAKutC,SAEZ,OAAOvtC,KAGT,QAA8BxE,IAA1BoyC,EAAO/M,eAUT,OATyB,IAArB/1B,UAAUzS,QACZ2H,KAAKutC,QAAUlY,OAAO6L,OAAO,MAC7BlhC,KAAKwtC,aAAe,QACMhyC,IAAjBoyC,EAAOvgC,KACY,MAAtBrN,KAAKwtC,aACTxtC,KAAKutC,QAAUlY,OAAO6L,OAAO,aAEtB0M,EAAOvgC,IAEXrN,KAIT,GAAyB,IAArB8K,UAAUzS,OAAc,CAC1B,IACIsmB,EADA2W,EAAOD,OAAOC,KAAKsY,GAEvB,IAAKj9C,EAAI,EAAGA,EAAI2kC,EAAKj9B,SAAU1H,EAEjB,oBADZguB,EAAM2W,EAAK3kC,KAEXqP,KAAKsuC,mBAAmB3vB,GAK1B,OAHA3e,KAAKsuC,mBAAmB,kBACxBtuC,KAAKutC,QAAUlY,OAAO6L,OAAO,MAC7BlhC,KAAKwtC,aAAe,EACbxtC,IACT,CAIA,GAAyB,oBAFzB+tC,EAAYH,EAAOvgC,IAGjBrN,KAAK6gC,eAAexzB,EAAM0gC,QACrB,QAAkBvyC,IAAduyC,EAET,IAAKp9C,EAAIo9C,EAAU11C,OAAS,EAAG1H,GAAK,EAAGA,IACrCqP,KAAK6gC,eAAexzB,EAAM0gC,EAAUp9C,IAIxC,OAAOqP,IACT,EAmBJ+7B,EAAa5Y,UAAU4qB,UAAY,SAAmB1gC,GACpD,OAAOujC,EAAW5wC,KAAMqN,GAAM,EAChC,EAEA0uB,EAAa5Y,UAAU8uB,aAAe,SAAsB5kC,GAC1D,OAAOujC,EAAW5wC,KAAMqN,GAAM,EAChC,EAEA0uB,EAAamS,cAAgB,SAAS5L,EAASj1B,GAC7C,MAAqC,oBAA1Bi1B,EAAQ4L,cACV5L,EAAQ4L,cAAc7gC,GAEtB6gC,EAAc7qB,KAAKif,EAASj1B,EAEvC,EAEA0uB,EAAa5Y,UAAU+qB,cAAgBA,EAiBvCnS,EAAa5Y,UAAUwqB,WAAa,WAClC,OAAO3tC,KAAKwtC,aAAe,EAAIgB,EAAexuC,KAAKutC,SAAW,EAChE,gCCzaA,IAAY2E,qBAAZ,SAAYA,GACVA,EAAAA,MAAAA,UACAA,EAAAA,SAAAA,UACAA,EAAAA,KAAAA,SACAA,EAAAA,cAAAA,OACAA,EAAAA,KAAAA,SACAA,EAAAA,IAAAA,QACAA,EAAAA,MAAAA,SACD,CARD,CAAYA,IAAAA,EAAY,KCAxB,IAAIz1B,EAAE,SAASlkB,EAAE4zB,EAAE1P,EAAEjkB,GAAG,IAAIikB,EAAEA,GAAG,GAAGjkB,EAAED,EAAEF,OAAOG,IAAIikB,EAAElkB,EAAEC,IAAI2zB,GAAG,OAAO1P,CAAC,EAAE01B,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAC/jBC,EAAS,CAACC,MAAO,WAAoB,EACzCC,GAAI,GACJC,SAAU,CAAC,MAAQ,EAAE,YAAc,EAAE,WAAa,EAAE,IAAM,EAAE,iBAAmB,EAAE,OAAS,EAAE,OAAS,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,SAAW,GAAG,OAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,SAAW,GAAG,QAAU,GAAG,OAAS,GAAG,IAAI,GAAG,MAAQ,GAAG,QAAU,EAAE,KAAO,GAC9TC,WAAY,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,IAAI,GAAG,SAChNC,aAAc,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,IAC7NC,cAAe,SAAmBC,EAAQC,EAAQC,EAAUP,EAAIQ,EAAyBC,EAAiBC,GAG1G,IAAIC,EAAKF,EAAGr8C,OAAS,EACrB,OAAQo8C,GACR,KAAK,EAEC,OAAO,SAAC3zC,QAAA,QAAAA,EAAAA,CAAAA,GACN,IACE,OAAO4zC,EAAGE,EAAG,GAAG9zC,GAChB,MAAOyF,GACP,OAAOA,EAAEguB,QAEb,EAGN,KAAK,EAEC,KAAKsgB,EAAI,YAAK,SAAEH,EAAGE,GAAI,GAAT,EAEpB,MACA,KAAK,EAEC,KAAKC,EAAI,YAAK,cAAOH,EAAGE,GAAV,EAEpB,MACA,KAAK,EAEC,KAAKC,EAAI,YAAK,SAAGC,UAAUJ,EAAGE,GAAhB,EAEpB,MACA,KAAK,EAEC,KAAKC,EAAI,YAAK,SAAGE,QAAQ,IAAKL,EAAGE,EAAG,GAAG9zC,GAAI4zC,EAAGE,GAAI9zC,GAApC,EAEpB,MACA,KAAK,EAEC,KAAK+zC,EAAI,YAAK,SAAGE,QAAQ,IAAKL,EAAGE,EAAG,GAAG9zC,GAAI4zC,EAAGE,GAAI9zC,GAApC,EAEpB,MACA,KAAK,EAEC,KAAK+zC,EAAI,YAAK,SAAGE,QAAQ,IAAKL,EAAGE,EAAG,GAAG9zC,GAAI4zC,EAAGE,GAAI9zC,GAApC,EAEpB,MACA,KAAK,EAEC,KAAK+zC,EAAIH,EAAGE,EAAG,GAErB,MACA,KAAK,EAEC,KAAKC,EAAI,YAAK,SAAGE,QAAQ,KAAML,EAAGE,EAAG,GAAG9zC,GAAI4zC,EAAGE,GAAI9zC,GAArC,EAEpB,MACA,KAAK,GAEC,KAAK+zC,EAAI,YAAK,SAAGE,QAAQ,KAAML,EAAGE,EAAG,GAAG9zC,GAAI4zC,EAAGE,GAAI9zC,GAArC,EAEpB,MACA,KAAK,GAEC,KAAK+zC,EAAI,YAAK,SAAGE,QAAQ,KAAML,EAAGE,EAAG,GAAG9zC,GAAI4zC,EAAGE,GAAI9zC,GAArC,EAEpB,MACA,KAAK,GAEC,KAAK+zC,EAAI,YAAK,SAAGE,QAAQ,MAAOL,EAAGE,EAAG,GAAG9zC,GAAI4zC,EAAGE,GAAI9zC,GAAtC,EAEpB,MACA,KAAK,GAEC,KAAK+zC,EAAI,YAAK,SAAGE,QAAQ,IAAKL,EAAGE,EAAG,GAAG9zC,GAAI4zC,EAAGE,GAAI9zC,GAApC,EAEpB,MACA,KAAK,GAEC,KAAK+zC,EAAI,YAAK,SAAGE,QAAQ,IAAKL,EAAGE,EAAG,GAAG9zC,GAAI4zC,EAAGE,GAAI9zC,GAApC,EAEpB,MACA,KAAK,GAEC,KAAK+zC,EAAI,YAAK,SAAGE,QAAQ,IAAKL,EAAGE,EAAG,GAAG9zC,GAAI4zC,EAAGE,GAAI9zC,GAApC,EAEpB,MACA,KAAK,GAEC,KAAK+zC,EAAI,YAAK,SAAGE,QAAQ,IAAKL,EAAGE,EAAG,GAAG9zC,GAAI4zC,EAAGE,GAAI9zC,GAApC,EAEpB,MACA,KAAK,GAEC,KAAK+zC,EAAI,YAAK,SAAGE,QAAQ,IAAKL,EAAGE,EAAG,GAAG9zC,GAAI4zC,EAAGE,GAAI9zC,GAApC,EAEpB,MACA,KAAK,GAEC,KAAK+zC,EAAI,YAAK,SAAGE,QAAQ,IAAKL,EAAGE,EAAG,GAAG9zC,GAAI4zC,EAAGE,GAAI9zC,GAApC,EAEpB,MACA,KAAK,GAEC,KAAK+zC,EAAI,YACP,IAAMG,EAAWf,EAAGgB,eAAeP,EAAGE,GAAI9zC,IAE1C,OAAGlH,MAAMo7C,GACA,EAGFA,CACT,EAEN,MACA,KAAK,GAEC,KAAKH,EAAI,YACP,IAAMK,EAAW/rC,OAAOurC,EAAGE,GAAI9zC,IAE/B,OAAGlH,MAAMs7C,GACA,EAGFA,CACT,EAEN,MACA,KAAK,GAECjB,EAAGkB,uBAAuBT,EAAGE,EAAG,IAChC,KAAKC,EAAI,YAAK,SAAGO,aAAaV,EAAGE,EAAG,GAAtB,EAEpB,MACA,KAAK,GAECX,EAAGkB,uBAAuBT,EAAGE,EAAG,IAChC,KAAKC,EAAI,YAAK,SAAGO,aAAaV,EAAGE,EAAG,GAAIF,EAAGE,EAAG,GAAG9zC,GAAnC,EAEpB,MACA,KAAK,GAEC,KAAK+zC,EAAI,YAAK,SAAGD,EAAG,GAAG9zC,EAAT,EAEpB,MACA,KAAK,GAEC,KAAK+zC,EAAI,YAAK,OAACH,EAAGE,GAAI9zC,GAAR,EAEpB,MACA,KAAK,GAAI,KAAK,GAER,KAAK+zC,EAAI,YACP,IAAMQ,EAAMX,EAAGE,EAAG,GAAG9zC,GAErB,OADAu0C,EAAIr9C,KAAK08C,EAAGE,GAAI9zC,IACTu0C,CACT,EAEN,MACA,KAAK,GAEC,KAAKR,EAAI,CAACH,EAAGE,IAEnB,MACA,KAAK,GAEC,KAAKC,EAAKp0C,MAAMkU,QAAQ+/B,EAAGE,EAAG,IAAMF,EAAGE,EAAG,GAAK,CAACF,EAAGE,EAAG,IACtD,KAAKC,EAAE78C,KAAK08C,EAAGE,IAErB,MACA,KAAK,GAEC,KAAKC,EAAIH,EAAGE,GAElB,MACA,KAAK,GAEC,KAAKC,EAAgC,GAA3BH,EAAGE,EAAG,GAAK,IAAMF,EAAGE,IAEpC,MACA,KAAK,GAEC,KAAKC,EAAe,IAAXH,EAAGE,EAAG,GAErB,MACA,KAAK,GAEC,KAAKC,EAAIZ,EAAGqB,kBAAkBZ,EAAGE,IAIvC,EACA/9B,MAAO,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAEs7B,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAEC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK52B,EAAE62B,EAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM72B,EAAE62B,EAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM72B,EAAE62B,EAAI,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAEnB,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAER,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAER,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAER,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAKl2B,EAAE62B,EAAI,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,GAAGX,IAAMl2B,EAAE82B,EAAI,CAAC,EAAE,KAAK92B,EAAE+2B,EAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM/2B,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE01B,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAER,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAER,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAER,EAAI,GAAG,CAAC,EAAE,IAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,IAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAER,EAAI,GAAG,CAAC,EAAE,IAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAER,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAER,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAER,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAER,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAER,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,GAAG,CAAC,EAAE,KAAKl2B,EAAE+2B,EAAI,CAAC,EAAE,KAAK,CAAC,EAAEZ,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,IAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK52B,EAAEg3B,EAAI,CAAC,EAAE,IAAI,CAAC,EAAEb,EAAI,GAAGO,EAAI,GAAGC,EAAI,GAAGC,IAAM52B,EAAEg3B,EAAI,CAAC,EAAE,IAAI,CAAC,EAAEb,EAAI,GAAGO,EAAI,GAAGC,EAAI,GAAGC,IAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAElB,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,CAAC,EAAE,IAAI,GAAGC,EAAI,GAAGC,EAAI,GAAG,GAAG,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAGe,EAAI,GAAGC,GAAKl3B,EAAEm3B,EAAI,CAAC,EAAE,IAAI,CAAC,EAAEhB,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,IAAM52B,EAAE62B,EAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK72B,EAAE62B,EAAI,CAAC,EAAE,IAAI72B,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,EAAEm2B,EAAI,GAAGE,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,IAAM52B,EAAEg3B,EAAI,CAAC,EAAE,GAAG,CAAC,EAAEb,EAAI,GAAGO,EAAI,GAAGC,EAAI,GAAGC,IAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAElB,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAER,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAKl2B,EAAEo3B,EAAI,CAAC,EAAE,IAAI,CAAC,EAAEjB,EAAI,GAAGE,EAAI,GAAGI,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,IAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAElB,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAKl2B,EAAEo3B,EAAI,CAAC,EAAE,IAAI,CAAC,EAAEjB,EAAI,GAAGE,EAAI,GAAGI,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,IAAM52B,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,EAAEm2B,EAAI,GAAGE,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGE,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,IAAM52B,EAAEg3B,EAAI,CAAC,EAAE,IAAI,CAAC,EAAEb,EAAI,GAAGO,EAAI,GAAGC,EAAI,GAAGC,IAAM52B,EAAEq3B,EAAI,CAAC,EAAE,IAAI,CAAC,EAAElB,EAAI,GAAGS,IAAM52B,EAAEq3B,EAAI,CAAC,EAAE,IAAI,CAAC,EAAElB,EAAI,GAAGS,IAAM52B,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,EAAEm2B,IAAMn2B,EAAE82B,EAAI,CAAC,EAAE,KAAK92B,EAAE62B,EAAI,CAAC,EAAE,IAAI72B,EAAE62B,EAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,GAAGI,EAAI,GAAGC,GAAKl3B,EAAE62B,EAAI,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAEnB,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAER,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,GAAKl2B,EAAE+2B,EAAI,CAAC,EAAE,KAAK/2B,EAAEo3B,EAAI,CAAC,EAAE,GAAG,CAAC,EAAEjB,EAAI,GAAGE,EAAI,GAAGI,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,IAAM52B,EAAEo3B,EAAI,CAAC,EAAE,IAAI,CAAC,EAAEjB,EAAI,GAAGE,EAAI,GAAGI,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,IAAM52B,EAAEo3B,EAAI,CAAC,EAAE,IAAI,CAAC,EAAEjB,EAAI,GAAGE,EAAI,GAAGI,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,IAAM52B,EAAE62B,EAAI,CAAC,EAAE,KAAK72B,EAAEm3B,EAAI,CAAC,EAAE,IAAI,CAAC,EAAEhB,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,IAAM52B,EAAEm3B,EAAI,CAAC,EAAE,IAAI,CAAC,EAAEhB,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,EAAI,GAAGC,KACzyGkC,eAAgB,CAAC,GAAG,CAAC,EAAE,IACvB5P,WAAY,SAAqB6P,EAAKC,GAClC,IAAIA,EAAKC,YAEF,CACH,IAAIn+C,EAAQ,IAAI4G,MAAMq3C,GAEtB,MADAj+C,EAAMk+C,KAAOA,EACPl+C,EAJN,KAAKy8C,MAAMwB,EAMnB,EACAx8C,MAAO,SAAgBixC,GACnB,IAAI3K,EAAO,KACPqW,EAAQ,CAAC,GAETC,EAAS,CAAC,MACVC,EAAS,GACTh/B,EAAQ,KAAKA,MACby9B,EAAS,GACTE,EAAW,EACXD,EAAS,EACTuB,EAAa,EAIbtqC,EAAOqqC,EAAOzyB,MAAMC,KAAKvY,UAAW,GAIpCirC,EAAQ1gB,OAAO6L,OAAO,KAAK6U,OAC3BC,EAAc,CAAE/B,GAAI,IAExB,IAAK,IAAI17C,KAAK,KAAK07C,GACb5e,OAAOlS,UAAUkR,eAAehR,KAAK,KAAK4wB,GAAI17C,KAChDy9C,EAAY/B,GAAG17C,GAAK,KAAK07C,GAAG17C,IAIhCw9C,EAAMpV,SAASsJ,EAAO+L,EAAY/B,IAClC+B,EAAY/B,GAAG8B,MAAQA,EACvBC,EAAY/B,GAAGF,OAAS,KACG,oBAAhBgC,EAAME,SACbF,EAAME,OAAS,IAEnB,IAAIC,EAAQH,EAAME,OAClBJ,EAAO79C,KAAKk+C,GAEZ,IAAIC,EAASJ,EAAMx9B,SAAWw9B,EAAMx9B,QAAQ49B,OAEH,oBAA9BH,EAAY/B,GAAGtO,WACtB,KAAKA,WAAaqQ,EAAY/B,GAAGtO,WAEjC,KAAKA,WAAatQ,OAAOmc,eAAe,MAAM7L,WAqBlD,IAXA,IAUIyQ,EAAQC,EAAgB3F,EAAO4F,EAAWxmC,EAAehX,EAAG+4B,EAAK0kB,EAAU5wB,EAjB5DrsB,EAOfk9C,EAAM,WACN,IAAIzjB,EAMJ,MAHqB,kBAFrBA,EAAQgjB,EAAMS,OAzCR,KA4CFzjB,EAAQuM,EAAK4U,SAASnhB,IAAUA,GAE7BA,CACX,EAEiD0jB,EAAQ,KAC5C,CAiBT,GAfA/F,EAAQiF,EAAMA,EAAMt9C,OAAS,GAGzB,KAAKk9C,eAAe7E,GACpB4F,EAAS,KAAKf,eAAe7E,IAEd,OAAX0F,GAAoC,oBAAVA,IAC1BA,EAASI,KAGbF,EAASz/B,EAAM65B,IAAU75B,EAAM65B,GAAO0F,IAKpB,qBAAXE,IAA2BA,EAAOj+C,SAAWi+C,EAAO,GAAI,CAC/D,IAAII,EACAC,EAAS,GAIb,SAASC,EAA+BlG,GAKpC,IAJA,IAAImG,EAAclB,EAAMt9C,OAAS,EAC7By+C,EAAQ,IAGJ,CAEJ,GAjFH,GAiFe7yC,aAAe4S,EAAM65B,GAC7B,OAAOoG,EAEX,GAAc,IAAVpG,GAAemG,EAAc,EAC7B,OAAO,EAGXnG,EAAQiF,EADRkB,GAAe,KAEbC,EAEV,CAEA,GAAKhB,EA5FH,IAsHSO,IACPK,EAAmBE,EAA+BlG,QA3BrC,CAMb,IAAK53C,KAJL49C,EAAmBE,EAA+BlG,GAGlD/qB,EAAW,GACD9O,EAAM65B,GACR,KAAKyD,WAAWr7C,IAAMA,EApG7B,GAqGO6sB,EAAS3tB,KAAK,IAAI,KAAKm8C,WAAWr7C,GAAG,KAIzC69C,EADAZ,EAAMgB,aACG,wBAAwBvC,EAAS,GAAG,MAAMuB,EAAMgB,eAAe,eAAepxB,EAAShL,KAAK,MAAQ,WAAa,KAAKw5B,WAAWiC,IAAWA,GAAS,IAErJ,wBAAwB5B,EAAS,GAAG,iBA1GnD,GA2GqB4B,EAAgB,eACJ,KAAK,KAAKjC,WAAWiC,IAAWA,GAAQ,KAEvE,KAAKzQ,WAAWgR,EAAQ,CACpBzzC,KAAM6yC,EAAMr/B,MACZqc,MAAO,KAAKohB,WAAWiC,IAAWA,EAClCrnB,KAAMgnB,EAAMvB,SACZwC,IAAKd,EACLvwB,SAAUA,EACV+vB,aAAmC,IAArBgB,IAOtB,GAAkB,GAAdZ,EAAiB,CACjB,GA5HF,IA4HMM,GA5HN,IA4HwBC,EAClB,MAAM,IAAIl4C,MAAMw4C,GAAU,gEAI9BpC,EAASwB,EAAMxB,OACfD,EAASyB,EAAMzB,OACfE,EAAWuB,EAAMvB,SACjB0B,EAAQH,EAAME,OACdG,EAASI,IAIb,IAAyB,IAArBE,EACA,MAAM,IAAIv4C,MAAMw4C,GAAU,8DA1GnBr9C,EA4GFo9C,EA3Gbf,EAAMt9C,OAASs9C,EAAMt9C,OAAS,EAAIiB,EAClCs8C,EAAOv9C,OAASu9C,EAAOv9C,OAASiB,EAChCu8C,EAAOx9C,OAASw9C,EAAOx9C,OAASiB,EA2G5B+8C,EA/IK,GA+IaD,EAAmB,KAAOA,EAC5CA,EAhJK,EAiJL1F,EAAQiF,EAAMA,EAAMt9C,OAAO,GAC3Bi+C,EAASz/B,EAAM65B,IAAU75B,EAAM65B,GAlJ1B,GAmJLoF,EAAa,EAIjB,GAAIQ,EAAO,aAAc71C,OAAS61C,EAAOj+C,OAAS,EAC9C,MAAM,IAAI8F,MAAM,oDAAoDuyC,EAAM,YAAY0F,GAG1F,OAAQE,EAAO,IACX,KAAK,EAGDX,EAAM39C,KAAKo+C,GACXR,EAAO59C,KAAK+9C,EAAMzB,QAClBuB,EAAO79C,KAAK+9C,EAAME,QAClBN,EAAM39C,KAAKs+C,EAAO,IAClBF,EAAS,KACJC,GAUDD,EAASC,EACTA,EAAiB,OAVjB9B,EAASwB,EAAMxB,OACfD,EAASyB,EAAMzB,OACfE,EAAWuB,EAAMvB,SACjB0B,EAAQH,EAAME,OACVH,EAAa,GACbA,KAOR,MAEJ,KAAK,EAoBD,GAhBAjkB,EAAM,KAAKuiB,aAAakC,EAAO,IAAI,GAGnCG,EAAM5B,EAAIe,EAAOA,EAAOv9C,OAAOw5B,GAE/B4kB,EAAM9B,GAAK,CACPsC,WAAYpB,EAAOA,EAAOx9C,QAAQw5B,GAAK,IAAIolB,WAC3CC,UAAWrB,EAAOA,EAAOx9C,OAAO,GAAG6+C,UACnCC,aAActB,EAAOA,EAAOx9C,QAAQw5B,GAAK,IAAIslB,aAC7CC,YAAavB,EAAOA,EAAOx9C,OAAO,GAAG++C,aAErCjB,IACFM,EAAM9B,GAAGx4B,MAAQ,CAAC05B,EAAOA,EAAOx9C,QAAQw5B,GAAK,IAAI1V,MAAM,GAAI05B,EAAOA,EAAOx9C,OAAO,GAAG8jB,MAAM,KAI1E,qBAFjBrM,EAAI,KAAKukC,cAAclzB,MAAMs1B,EAAO,CAACnC,EAAQC,EAAQC,EAAUwB,EAAY/B,GAAIqC,EAAO,GAAIV,EAAQC,GAAQz8C,OAAOoS,KAG7G,OAAOsE,EAIP+hB,IACA8jB,EAAQA,EAAMvyB,MAAM,GAAG,EAAEyO,EAAI,GAC7B+jB,EAASA,EAAOxyB,MAAM,GAAI,EAAEyO,GAC5BgkB,EAASA,EAAOzyB,MAAM,GAAI,EAAEyO,IAGhC8jB,EAAM39C,KAAK,KAAKo8C,aAAakC,EAAO,IAAI,IACxCV,EAAO59C,KAAKy+C,EAAM5B,GAClBgB,EAAO79C,KAAKy+C,EAAM9B,IAElB4B,EAAW1/B,EAAM8+B,EAAMA,EAAMt9C,OAAO,IAAIs9C,EAAMA,EAAMt9C,OAAO,IAC3Ds9C,EAAM39C,KAAKu+C,GACX,MAEJ,KAAK,EAED,OAAO,GAKnB,OAAO,CACX,GAIIR,EACS,CAEbsB,IAAI,EAEJ1R,WAAW,SAAoB6P,EAAKC,GAC5B,IAAI,KAAKxB,GAAGF,OAGR,MAAM,IAAI51C,MAAMq3C,GAFhB,KAAKvB,GAAGF,OAAOpO,WAAW6P,EAAKC,EAIvC,EAGJ9U,SAAS,SAAUsJ,EAAOgK,GAiBlB,OAhBA,KAAKA,GAAKA,GAAM,KAAKA,IAAM,GAC3B,KAAKqD,OAASrN,EACd,KAAKsN,MAAQ,KAAKC,WAAa,KAAKC,MAAO,EAC3C,KAAKjD,SAAW,KAAKD,OAAS,EAC9B,KAAKD,OAAS,KAAKoD,QAAU,KAAKhhC,MAAQ,GAC1C,KAAKihC,eAAiB,CAAC,WACvB,KAAK1B,OAAS,CACVgB,WAAY,EACZE,aAAc,EACdD,UAAW,EACXE,YAAa,GAEb,KAAK7+B,QAAQ49B,SACb,KAAKF,OAAO95B,MAAQ,CAAC,EAAE,IAE3B,KAAKy7B,OAAS,EACP,IACX,EAGJ3N,MAAM,WACE,IAAI4N,EAAK,KAAKP,OAAO,GAkBrB,OAjBA,KAAKhD,QAAUuD,EACf,KAAKtD,SACL,KAAKqD,SACL,KAAKlhC,OAASmhC,EACd,KAAKH,SAAWG,EACJA,EAAGnhC,MAAM,oBAEjB,KAAK89B,WACL,KAAKyB,OAAOiB,aAEZ,KAAKjB,OAAOmB,cAEZ,KAAK7+B,QAAQ49B,QACb,KAAKF,OAAO95B,MAAM,KAGtB,KAAKm7B,OAAS,KAAKA,OAAOl0B,MAAM,GACzBy0B,CACX,EAGJC,MAAM,SAAUD,GACR,IAAIhmB,EAAMgmB,EAAGx/C,OACT0/C,EAAQF,EAAGr3C,MAAM,iBAErB,KAAK82C,OAASO,EAAK,KAAKP,OACxB,KAAKhD,OAAS,KAAKA,OAAO1kB,OAAO,EAAG,KAAK0kB,OAAOj8C,OAASw5B,GAEzD,KAAK+lB,QAAU/lB,EACf,IAAImmB,EAAW,KAAKthC,MAAMlW,MAAM,iBAChC,KAAKkW,MAAQ,KAAKA,MAAMkZ,OAAO,EAAG,KAAKlZ,MAAMre,OAAS,GACtD,KAAKq/C,QAAU,KAAKA,QAAQ9nB,OAAO,EAAG,KAAK8nB,QAAQr/C,OAAS,GAExD0/C,EAAM1/C,OAAS,IACf,KAAKm8C,UAAYuD,EAAM1/C,OAAS,GAEpC,IAAIyX,EAAI,KAAKmmC,OAAO95B,MAgBpB,OAdA,KAAK85B,OAAS,CACVgB,WAAY,KAAKhB,OAAOgB,WACxBC,UAAW,KAAK1C,SAAW,EAC3B2C,aAAc,KAAKlB,OAAOkB,aAC1BC,YAAaW,GACRA,EAAM1/C,SAAW2/C,EAAS3/C,OAAS,KAAK49C,OAAOkB,aAAe,GAC5Da,EAASA,EAAS3/C,OAAS0/C,EAAM1/C,QAAQA,OAAS0/C,EAAM,GAAG1/C,OAChE,KAAK49C,OAAOkB,aAAetlB,GAG7B,KAAKtZ,QAAQ49B,SACb,KAAKF,OAAO95B,MAAQ,CAACrM,EAAE,GAAIA,EAAE,GAAK,KAAKykC,OAAS1iB,IAEpD,KAAK0iB,OAAS,KAAKD,OAAOj8C,OACnB,IACX,EAGJ4/C,KAAK,WAEG,OADA,KAAKV,OAAQ,EACN,IACX,EAGJnV,OAAO,WACC,OAAI,KAAK7pB,QAAQ2/B,iBACb,KAAKV,YAAa,EASf,MAPI,KAAK7R,WAAW,0BAA4B,KAAK6O,SAAW,GAAK,mIAAqI,KAAKuC,eAAgB,CAC9N7zC,KAAM,GACN6vB,MAAO,KACPhE,KAAM,KAAKylB,UAKvB,EAGJ2D,KAAK,SAAU7+C,GACP,KAAKw+C,MAAM,KAAKphC,MAAM0M,MAAM9pB,GAChC,EAGJ8+C,UAAU,WACF,IAAIC,EAAO,KAAKX,QAAQ9nB,OAAO,EAAG,KAAK8nB,QAAQr/C,OAAS,KAAKqe,MAAMre,QACnE,OAAQggD,EAAKhgD,OAAS,GAAK,MAAM,IAAMggD,EAAKzoB,QAAQ,IAAI5mB,QAAQ,MAAO,GAC3E,EAGJsvC,cAAc,WACN,IAAIvS,EAAO,KAAKrvB,MAIhB,OAHIqvB,EAAK1tC,OAAS,KACd0tC,GAAQ,KAAKuR,OAAO1nB,OAAO,EAAG,GAAGmW,EAAK1tC,UAElC0tC,EAAKnW,OAAO,EAAE,KAAOmW,EAAK1tC,OAAS,GAAK,MAAQ,KAAK2Q,QAAQ,MAAO,GAChF,EAGJ+tC,aAAa,WACL,IAAIwB,EAAM,KAAKH,YACXtoD,EAAI,IAAI2Q,MAAM83C,EAAIlgD,OAAS,GAAGsiB,KAAK,KACvC,OAAO49B,EAAM,KAAKD,gBAAkB,KAAOxoD,EAAI,GACnD,EAGJ0oD,WAAW,SAAS9hC,EAAO+hC,GACnB,IAAI1lB,EACAglB,EACAW,EAwDJ,GAtDI,KAAKngC,QAAQ2/B,kBAEbQ,EAAS,CACLlE,SAAU,KAAKA,SACfyB,OAAQ,CACJgB,WAAY,KAAKhB,OAAOgB,WACxBC,UAAW,KAAKA,UAChBC,aAAc,KAAKlB,OAAOkB,aAC1BC,YAAa,KAAKnB,OAAOmB,aAE7B9C,OAAQ,KAAKA,OACb59B,MAAO,KAAKA,MACZte,QAAS,KAAKA,QACds/C,QAAS,KAAKA,QACdnD,OAAQ,KAAKA,OACbqD,OAAQ,KAAKA,OACbL,MAAO,KAAKA,MACZD,OAAQ,KAAKA,OACbrD,GAAI,KAAKA,GACT0D,eAAgB,KAAKA,eAAev0B,MAAM,GAC1Cq0B,KAAM,KAAKA,MAEX,KAAKl/B,QAAQ49B,SACbuC,EAAOzC,OAAO95B,MAAQ,KAAK85B,OAAO95B,MAAMiH,MAAM,MAItD20B,EAAQrhC,EAAM,GAAGA,MAAM,sBAEnB,KAAK89B,UAAYuD,EAAM1/C,QAE3B,KAAK49C,OAAS,CACVgB,WAAY,KAAKhB,OAAOiB,UACxBA,UAAW,KAAK1C,SAAW,EAC3B2C,aAAc,KAAKlB,OAAOmB,YAC1BA,YAAaW,EACAA,EAAMA,EAAM1/C,OAAS,GAAGA,OAAS0/C,EAAMA,EAAM1/C,OAAS,GAAGqe,MAAM,UAAU,GAAGre,OAC5E,KAAK49C,OAAOmB,YAAc1gC,EAAM,GAAGre,QAEpD,KAAKi8C,QAAU59B,EAAM,GACrB,KAAKA,OAASA,EAAM,GACpB,KAAKte,QAAUse,EACf,KAAK69B,OAAS,KAAKD,OAAOj8C,OACtB,KAAKkgB,QAAQ49B,SACb,KAAKF,OAAO95B,MAAQ,CAAC,KAAKy7B,OAAQ,KAAKA,QAAU,KAAKrD,SAE1D,KAAKgD,OAAQ,EACb,KAAKC,YAAa,EAClB,KAAKF,OAAS,KAAKA,OAAOl0B,MAAM1M,EAAM,GAAGre,QACzC,KAAKq/C,SAAWhhC,EAAM,GACtBqc,EAAQ,KAAKshB,cAAchxB,KAAK,KAAM,KAAK4wB,GAAI,KAAMwE,EAAc,KAAKd,eAAe,KAAKA,eAAet/C,OAAS,IAChH,KAAKo/C,MAAQ,KAAKH,SAClB,KAAKG,MAAO,GAEZ1kB,EACA,OAAOA,EACJ,GAAI,KAAKykB,WAAY,CAExB,IAAK,IAAIj/C,KAAKmgD,EACV,KAAKngD,GAAKmgD,EAAOngD,GAErB,OAAO,EAEX,OAAO,CACX,EAGJwtC,KAAK,WACG,GAAI,KAAK0R,KACL,OAAO,KAAKJ,IAMhB,IAAItkB,EACArc,EACAiiC,EACAl/C,EAPC,KAAK69C,SACN,KAAKG,MAAO,GAOX,KAAKF,QACN,KAAKjD,OAAS,GACd,KAAK59B,MAAQ,IAGjB,IADA,IAAIkiC,EAAQ,KAAKC,gBACRloD,EAAI,EAAGA,EAAIioD,EAAMvgD,OAAQ1H,IAE9B,IADAgoD,EAAY,KAAKrB,OAAO5gC,MAAM,KAAKkiC,MAAMA,EAAMjoD,SAC5B+lB,GAASiiC,EAAU,GAAGtgD,OAASqe,EAAM,GAAGre,QAAS,CAGhE,GAFAqe,EAAQiiC,EACRl/C,EAAQ9I,EACJ,KAAK4nB,QAAQ2/B,gBAAiB,CAE9B,IAAc,KADdnlB,EAAQ,KAAKylB,WAAWG,EAAWC,EAAMjoD,KAErC,OAAOoiC,EACJ,GAAI,KAAKykB,WAAY,CACxB9gC,GAAQ,EACR,SAGA,OAAO,EAER,IAAK,KAAK6B,QAAQugC,KACrB,MAIZ,OAAIpiC,GAEc,KADdqc,EAAQ,KAAKylB,WAAW9hC,EAAOkiC,EAAMn/C,MAE1Bs5B,EAKK,KAAhB,KAAKukB,OACE,KAAKD,IAEL,KAAK1R,WAAW,0BAA4B,KAAK6O,SAAW,GAAK,yBAA2B,KAAKuC,eAAgB,CACpH7zC,KAAM,GACN6vB,MAAO,KACPhE,KAAM,KAAKylB,UAGvB,EAGJgC,IAAI,WACI,IAAI1mC,EAAI,KAAKi2B,OACb,OAAIj2B,GAGO,KAAK0mC,KAEpB,EAGJpnB,MAAM,SAAgB2pB,GACd,KAAKpB,eAAe3/C,KAAK+gD,EAC7B,EAGJC,SAAS,WAED,OADQ,KAAKrB,eAAet/C,OAAS,EAC7B,EACG,KAAKs/C,eAAej7B,MAEpB,KAAKi7B,eAAe,EAEnC,EAGJkB,cAAc,WACN,OAAI,KAAKlB,eAAet/C,QAAU,KAAKs/C,eAAe,KAAKA,eAAet/C,OAAS,GACxE,KAAK4gD,WAAW,KAAKtB,eAAe,KAAKA,eAAet/C,OAAS,IAAIugD,MAErE,KAAKK,WAAoB,QAAEL,KAE1C,EAGJM,SAAS,SAAmB5/C,GAEpB,OADAA,EAAI,KAAKq+C,eAAet/C,OAAS,EAAIgE,KAAK6F,IAAI5I,GAAK,KAC1C,EACE,KAAKq+C,eAAer+C,GAEpB,SAEf,EAGJ6/C,UAAU,SAAoBJ,GACtB,KAAK3pB,MAAM2pB,EACf,EAGJK,eAAe,WACP,OAAO,KAAKzB,eAAet/C,MAC/B,EACJkgB,QAAS,GACT87B,cAAe,SAAmBJ,EAAGoF,EAAIC,EAA0BC,GAEnE,OAAOD,GACP,KAAK,EACL,MACA,KAAK,EAEL,KAAK,EAAE,OAAO,EAEd,KAAK,EAIL,KAAK,EAAE,OAAO,GAFd,KAAK,EAAE,OAAO,GAId,KAAK,EAEL,KAAK,EAAE,OAAO,GAEd,KAAK,EAAE,OAAO,GAEd,KAAK,EAAE,OAAO,EAEd,KAAK,GAAG,MAAO,IAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,MAAO,IAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,MAAO,IAEf,KAAK,GAAG,MAAO,IAEf,KAAK,GAAG,MAAO,IAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,OAAO,GAEf,KAAK,GAAG,MAAO,IAEf,KAAK,GAAG,OAAO,EAGf,EACAV,MAAO,CAAC,WAAW,uBAAuB,uBAAuB,0CAA0C,2BAA2B,0BAA0B,iCAAiC,kBAAkB,cAAc,SAAS,SAAS,WAAW,SAAS,SAAS,SAAS,UAAU,UAAU,SAAS,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,aAAa,SAAS,SAAS,SAAS,SAAS,SAAS,WAAW,UACzcK,WAAY,CAAC,QAAU,CAAC,MAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,WAAY,KAK1I,SAASO,IAAW,KAAKvF,GAAK,EAAG,CADjCF,EAAOgC,MAAQA,EAEfyD,EAAOr2B,UAAY4wB,EACnBA,EAAOyF,OAASA,ECp1BT,IAAMC,EAA0C,SACrD/yC,EACAwD,GAEA,OAAOwU,OAAOhY,GAAKgY,OAAOxU,EAC5B,ECLM,SAAU4qC,EAAU5xC,GACxB,OAAOA,EAAKgB,UAAU,EAAGhB,EAAK7K,OAAS,EACzC,CAEM,SAAU48C,EAAel9C,GAC7B,OAAQ,EAAIA,CACd,CAEM,SAAUu9C,EAAkBjoC,GAChC,MAAIgoB,OAAO3lB,OAAOwiC,GAAchxC,SAASmM,GACjC,IAAIlP,MAAMkP,GAEV,IAAIlP,MAAM+zC,EAAaj/B,MAEjC,CA2BA,IAAMymC,EAA8B,CAClCr2C,OAAQ,EACRsuB,OAAQ,EACRsF,QAAS,EACTz7B,UAAW,GAGP,SAAUm+C,EACdC,GAKA,OAAO,SAAClzC,EAAGwD,GACT,IAAI2vC,SAAiBnzC,EACjBozC,SAAiB5vC,EAarB,MAVgB,WAAZ2vC,GAAoC,cAAZA,IAC1BA,EAAU,YACVnzC,EAAI,MAGU,WAAZozC,GAAoC,cAAZA,IAC1BA,EAAU,YACV5vC,EAAI,MAGF2vC,IAAYC,GACE,WAAZD,IACFnzC,EAAKA,EAAa2B,cAClB6B,EAAKA,EAAa7B,eAEbuxC,EAA6BlzC,EAAGwD,IAGrCwvC,EAA4BG,GAC5BH,EAA4BI,EAGlC,CACF,CChFO,QCgBKC,EClBCpjB,EAA4B,SAACjwB,EAAQwD,GAChD,OAAOxD,IAAMwD,CACf,ECDa8vC,EAA4C,SAACtzC,EAAGwD,GAAM,SAAIA,CAAJ,EAEtD+vC,EAA8DN,EACzEK,GCHWE,EAAmD,SAACxzC,EAAGwD,GAClE,UAAKA,CAAL,EAEWiwC,EAAqER,EAChFO,GCJWE,EAAyC,SAAC1zC,EAAGwD,GAAM,SAAIA,CAAJ,EAEnDmwC,EAA2DV,EACtES,GCDWE,EAAkEX,GAFlB,SAACjzC,EAAGwD,GAAM,UAAKA,CAAL,ICD1DqwC,EAA+B,SAAC7zC,EAAQwD,GACnD,OAAOxD,IAAMwD,CACf,GNgBA,SAAY6vC,GACVA,EAAAA,KAAAA,IACAA,EAAAA,MAAAA,IACAA,EAAAA,MAAAA,IACAA,EAAAA,WAAAA,IACAA,EAAAA,MAAAA,IACAA,EAAAA,UAAAA,KACAA,EAAAA,aAAAA,IACAA,EAAAA,sBAAAA,KACAA,EAAAA,UAAAA,IACAA,EAAAA,mBAAAA,KACAA,EAAAA,MAAAA,IACAA,EAAAA,YAAAA,GACD,CAbD,CAAYA,IAAAA,EAAQ,KAepB,IAAMS,KAAa,MAChBT,EAASU,MOhCqD,SAC/D/zC,EACAwD,GAQA,OANAxD,EAAIyC,OAAOzC,GACXwD,EAAIf,OAAOe,IAEPtQ,MAAM8M,IAAM9M,MAAMsQ,KACpBorC,EAAkBpD,EAAajhB,OAE1BvqB,EAAIwD,CACb,EPsBEwwC,EAACX,EAASh6B,OQjCsD,SAChErZ,EACAwD,GAQA,OANAxD,EAAIyC,OAAOzC,GACXwD,EAAIf,OAAOe,IAEPtQ,MAAM8M,IAAM9M,MAAMsQ,KACpBorC,EAAkBpD,EAAajhB,OAE1BvqB,EAAIwD,CACb,ERuBEwwC,EAACX,EAASY,OSlCsD,SAChEj0C,EACAwD,GAQA,OANAxD,EAAIyC,OAAOzC,GACXwD,EAAIf,OAAOe,IAEPtQ,MAAM8M,IAAM9M,MAAMsQ,KACpBorC,EAAkBpD,EAAajhB,OAE1BvqB,EAAIwD,CACb,ETwBEwwC,EAACX,EAASa,YDnC0D,SACpEl0C,EACAwD,GAYA,OAVAxD,EAAIyC,OAAOzC,GACXwD,EAAIf,OAAOe,IAEPtQ,MAAM8M,IAAM9M,MAAMsQ,KACpBorC,EAAkBpD,EAAajhB,OAGvB,IAAN/mB,GACForC,EAAkBpD,EAAa2I,UAE1Bn0C,EAAIwD,CACb,ECqBEwwC,EAACX,EAASe,OAAQnkB,EAClB+jB,EAACX,EAASgB,WAAYR,EACtBG,EAACX,EAASiB,cAAef,EACzBS,EAACX,EAASkB,uBAAwBd,EAClCO,EAACX,EAASmB,WAAYb,EACtBK,EAACX,EAASoB,oBAAqBb,EAC/BI,EAACX,EAASp8B,OU1CsD,SAChEjX,EACAwD,GAEAxD,EAAIyC,OAAOzC,GACXwD,EAAIf,OAAOe,GAEX,IAAMrS,EAASwE,KAAKyM,IAAIpC,EAAGwD,GAK3B,OAHItQ,MAAM/B,IACRy9C,EAAkBpD,EAAajhB,OAE1Bp5B,CACT,EV8BE6iD,EAACX,EAAShsB,aAAc0rB,EAAW,GAG/B2B,KAAmB,MACtBrB,EAASU,MOlCsC,SAAC/zC,EAAGwD,GAAM,SAAIA,CAAJ,EPmC1DmxC,EAACtB,EAASh6B,OQnCuC,SAACrZ,EAAGwD,GAAM,SAAIA,CAAJ,ERoC3DmxC,EAACtB,EAASY,OSpCuC,SAACj0C,EAAGwD,GAAM,SAAIA,CAAJ,ETqC3DmxC,EAACtB,EAASa,YDjC2C,SAACl0C,EAAGwD,GAAM,SAAIA,CAAJ,ECkC/DmxC,EAACtB,EAASe,OAAQnkB,EAClB0kB,EAACtB,EAASgB,WAAYR,EACtBc,EAACtB,EAASiB,cAAehB,EACzBqB,EAACtB,EAASkB,uBAAwBf,EAClCmB,EAACtB,EAASmB,WAAYd,EACtBiB,EAACtB,EAASoB,oBAAqBjB,EAC/BmB,EAACtB,EAASp8B,OU1CuC,SAACjX,EAAGwD,GAAM,YAAKpB,IAAIpC,EAAGwD,EAAZ,EV2C3DmxC,EAACtB,EAAShsB,aAAc0rB,EAAW,GAG/B,SAAU6B,GACd9nB,EACA+nB,EACAC,GAEA,OAAOhB,GAAchnB,GAAU+nB,EAAcC,EAC/C,CAEM,SAAUC,GACdjoB,EACA+nB,EACAC,GAEA,OAAOJ,GAAoB5nB,GAAU+nB,EAAcC,EACrD,CWxEO,IAAME,GAAgC,CAC3CC,UAAW,QACXC,UAAW,uNCKb,cAGE,WAAYC,QAAA,QAAAA,EAAAA,CAAAA,GACV,IAAMtjC,EAAO,SACRmjC,IACAG,GAEL,KAAKC,cAAiB,IAAIC,EAC1B,KAAKD,cAAc7H,GAAK,CACtBgB,eAAc,EACdH,UAAS,EACTC,QACwB,UAAtBx8B,EAAQojC,UAAwBL,GAAgBG,GAClDnG,kBAAiB,EACjBF,aAAc,SAAC4G,EAAsBxwC,GACnC,OdZF,SACJowC,EACAI,EACAxwC,GAEA,OAAOowC,EAAUI,GAAa,MAAvBJ,EAA2BpwC,EACpC,CcMQ,CAAa+M,EAAQqjC,UAAWI,EAAcxwC,EAA9C,EACF2pC,uBAAwB,SAAC6G,GACvB,OdNF,SACJJ,EACAI,GAEKJ,EAAUI,IACb1G,EAAkBpD,EAAa+J,KAEnC,CcDQ,CAAuB1jC,EAAQqjC,UAAWI,EAA1C,EAEN,CAaF,OAXExC,EAAAA,UAAAA,MAAA,SAAM0C,GACJ,IACE,OAAO,KAAKJ,cAAc9iD,MAAMkjD,GAChC,MAAO31C,GACP,OAAI8uB,OAAO3lB,OAAOwiC,GAAchxC,SAASqF,EAAEguB,SAClC,WAAM,SAAEA,OAAF,EAEN,WAAM,SAAathB,KAAb,EAGnB,EACF,EAjCA,eCNC,WAED,IAEIkpC,EAAQ,CAAC,EAIXhlB,EAAOlnC,QAAUksD,EAOnBA,EAAMC,aAAe,SAASC,EAASzkD,GACrC,OAAOA,EAAMimB,QAAO,SAAS23B,GAC3B,OAAO2G,EAAM57C,KAAK87C,EAAS7G,EAC7B,GACF,EAGA2G,EAAM57C,KAAO,SAAS87C,EAAS7G,GAC7B,OAAqC,OAA9B2G,EAAMzlC,MAAM2lC,EAAS7G,EAC9B,EAIA2G,EAAMzlC,MAAQ,SAAS2lC,EAAS7G,EAAKhb,GACnCA,EAAOA,GAAQ,CAAC,EAChB,IAYIqd,EAZAyE,EAAa,EACbzkD,EAAS,GACTg6B,EAAM2jB,EAAIn9C,OACVkkD,EAAa,EACbC,EAAY,EAEZjE,EAAM/d,EAAK+d,KAAO,GAElBkE,EAAOjiB,EAAKiiB,MAAQ,GAGpBC,EAAiBliB,EAAKmiB,eAAiBnH,GAAOA,EAAIntC,cAGtDg0C,EAAU7hB,EAAKmiB,eAAiBN,GAAWA,EAAQh0C,cAInD,IAAI,IAAIoO,EAAM,EAAGA,EAAMob,EAAKpb,IAC1BohC,EAAKrC,EAAI/+B,GACNimC,EAAcjmC,KAAS4lC,EAAQC,IAChCzE,EAAKU,EAAMV,EAAK4E,EAChBH,GAAc,EAGdE,GAAa,EAAIA,GAEjBA,EAAY,EAEdD,GAAcC,EACd3kD,EAAOA,EAAOQ,QAAUw/C,EAI1B,OAAGyE,IAAeD,EAAQhkD,QAExBkkD,EAAcG,IAAkBL,EAAWlR,IAAWoR,EAC/C,CAACK,SAAU/kD,EAAO8iB,KAAK,IAAKkiC,MAAON,IAGrC,IACT,EA0BAJ,EAAMt+B,OAAS,SAASw+B,EAASzqB,EAAK4I,GACpC,OAAI5I,GAAsB,IAAfA,EAAIv5B,OAGQ,kBAAZgkD,EACFzqB,GAET4I,EAAOA,GAAQ,CAAC,EACT5I,EACJP,QAAO,SAASyrB,EAAM95B,EAASvM,EAAKmb,GACnC,IAAI4jB,EAAMxyB,EACPwX,EAAKuiB,UACNvH,EAAMhb,EAAKuiB,QAAQ/5B,IAErB,IAAI45B,EAAWT,EAAMzlC,MAAM2lC,EAAS7G,EAAKhb,GASzC,OARe,MAAZoiB,IACDE,EAAKA,EAAKzkD,QAAU,CAChBs5B,OAAQirB,EAASA,SACjBC,MAAOD,EAASC,MAChBpjD,MAAOgd,EACPumC,SAAUh6B,IAGT85B,CACT,GAAG,IAKF/yB,MAAK,SAASrjB,EAAEwD,GACf,IAAI+yC,EAAU/yC,EAAE2yC,MAAQn2C,EAAEm2C,MAC1B,OAAGI,GACIv2C,EAAEjN,MAAQyQ,EAAEzQ,KACrB,KA/BO,EAgCX,CAGC,CAtIA,0BCRD,MACW8M,IAA8I,oBAAoBgiC,EAAAA,EAAOA,EAAAA,EAAO,oBAAoBnF,OAAOA,OAAOpjC,KAA9J,aAAa,OAAuJ,SAASuG,GAAG,aAAa,IAAIqE,EAAE,CAACsyC,SAAS,SAASC,aAAa,SAASC,QAAO,EAAGC,YAAY,SAASzF,OAAO,EAAE0F,QAAO,EAAG1P,QAAO,GAAIt0C,EAAE,SAASiN,EAAEqE,EAAEtR,GAAG,GAAGA,EAAEikD,SAAS3P,OAAO,CAAC,IAAInxB,EAAE,IAAI+gC,YAAYj3C,EAAE,CAACk3C,SAAQ,EAAGC,YAAW,EAAGC,OAAOrkD,IAAIsR,EAAEgzC,cAAcnhC,EAAE,CAAC,EAAEA,EAAE,SAASlW,GAAG,IAAIqE,EAAE,EAAE,GAAGrE,EAAEs3C,aAAa,KAAKt3C,GAAGqE,GAAGrE,EAAEu3C,UAAUv3C,EAAEA,EAAEs3C,aAAa,OAAOjzC,GAAG,EAAEA,EAAE,CAAC,EAAEO,EAAE,SAAS5E,GAAGA,GAAGA,EAAEwjB,MAAM,SAASxjB,EAAEqE,GAAG,OAAO6R,EAAElW,EAAEw3C,SAASthC,EAAE7R,EAAEmzC,UAAU,EAAE,CAAC,GAAG,EAAEjuD,EAAE,SAAS8a,EAAEtR,EAAEmjB,GAAG,IAAItR,EAAEP,EAAEozC,wBAAwBluD,EAAG,SAASyW,GAAG,MAAM,mBAAmBA,EAAEqxC,OAAO32B,WAAW1a,EAAEqxC,UAAU32B,WAAW1a,EAAEqxC,OAAO,CAAzF,CAA4Ft+C,GAAG,OAAOmjB,EAAE1d,SAASoM,EAAEmT,OAAO,KAAK/X,EAAE03C,aAAa7gB,SAAS8gB,gBAAgBC,cAAcp/C,SAASoM,EAAEoT,IAAI,KAAKzuB,CAAC,EAAEa,EAAE,WAAW,OAAO4V,EAAE03C,YAAY13C,EAAE63C,aAAa/hD,KAAKqe,IAAI0iB,SAAS1D,KAAK2kB,aAAajhB,SAAS8gB,gBAAgBG,aAAajhB,SAAS1D,KAAK4kB,aAAalhB,SAAS8gB,gBAAgBI,aAAalhB,SAAS1D,KAAKykB,aAAa/gB,SAAS8gB,gBAAgBC,aAAa,EAAEruC,EAAE,SAASvJ,EAAEqE,GAAG,IAAItR,EAAEiN,EAAEA,EAAElO,OAAO,GAAG,GAAG,SAASkO,EAAEqE,GAAG,SAASja,MAAMb,EAAEyW,EAAEw3C,QAAQnzC,GAAE,GAAI,CAA/C,CAAiDtR,EAAEsR,GAAG,OAAOtR,EAAE,IAAI,IAAImjB,EAAElW,EAAElO,OAAO,EAAEokB,GAAG,EAAEA,IAAI,GAAG3sB,EAAEyW,EAAEkW,GAAGshC,QAAQnzC,GAAG,OAAOrE,EAAEkW,EAAE,EAAE/V,EAAE,SAASH,EAAEqE,GAAG,GAAGA,EAAEwyC,QAAQ72C,EAAE+3B,WAAW,CAAC,IAAIhlC,EAAEiN,EAAE+3B,WAAWigB,QAAQ,MAAMjlD,IAAIA,EAAEqkC,UAAU6gB,OAAO5zC,EAAEyyC,aAAa32C,EAAEpN,EAAEsR,GAAG,CAAC,EAAEpS,EAAE,SAAS+N,EAAEqE,GAAG,GAAGrE,EAAE,CAAC,IAAIkW,EAAElW,EAAEk4C,IAAIF,QAAQ,MAAM9hC,IAAIA,EAAEkhB,UAAU6gB,OAAO5zC,EAAEsyC,UAAU32C,EAAEw3C,QAAQpgB,UAAU6gB,OAAO5zC,EAAEuyC,cAAcz2C,EAAE+V,EAAE7R,GAAGtR,EAAE,oBAAoBmjB,EAAE,CAACopB,KAAKt/B,EAAEk4C,IAAIV,QAAQx3C,EAAEw3C,QAAQR,SAAS3yC,IAAI,CAAC,EAAEnE,EAAE,SAASF,EAAEqE,GAAG,GAAGA,EAAEwyC,OAAO,CAAC,IAAI9jD,EAAEiN,EAAE+3B,WAAWigB,QAAQ,MAAMjlD,IAAIA,EAAEqkC,UAAUC,IAAIhzB,EAAEyyC,aAAa52C,EAAEnN,EAAEsR,GAAG,CAAC,EAAE,OAAO,SAAS6R,EAAE3sB,GAAG,IAAIa,EAAE+V,EAAE1W,EAAE8Q,EAAEqrB,EAAE3lB,EAAE,CAAGA,MAAQ,WAAW7V,EAAEysC,SAASshB,iBAAiBjiC,GAAG/V,EAAE,GAAGjG,MAAM0iB,UAAUiK,QAAQ/J,KAAK1yB,GAAG,SAAS4V,GAAG,IAAIqE,EAAEwyB,SAASuhB,eAAeC,mBAAmBr4C,EAAEkvC,KAAK7lB,OAAO,KAAKhlB,GAAGlE,EAAE1O,KAAK,CAACymD,IAAIl4C,EAAEw3C,QAAQnzC,GAAG,IAAIO,EAAEzE,EAAE,EAAEF,OAAS,WAAW,IAAID,EAAEuJ,EAAEpJ,EAAEylB,GAAG5lB,EAAEvW,GAAGuW,EAAEw3C,UAAU/tD,EAAE+tD,UAAUvlD,EAAExI,EAAEm8B,GAAI,SAAS5lB,EAAEqE,GAAG,GAAGrE,EAAE,CAAC,IAAIkW,EAAElW,EAAEk4C,IAAIF,QAAQ,MAAM9hC,IAAIA,EAAEkhB,UAAUC,IAAIhzB,EAAEsyC,UAAU32C,EAAEw3C,QAAQpgB,UAAUC,IAAIhzB,EAAEuyC,cAAc12C,EAAEgW,EAAE7R,GAAGtR,EAAE,kBAAkBmjB,EAAE,CAACopB,KAAKt/B,EAAEk4C,IAAIV,QAAQx3C,EAAEw3C,QAAQR,SAAS3yC,IAAI,CAAC,CAA/L,CAAkMrE,EAAE4lB,GAAGn8B,EAAEuW,GAAGvW,IAAIwI,EAAExI,EAAEm8B,GAAGn8B,EAAE,KAAK,GAAM8I,EAAE,SAAS8R,GAAG9J,GAAGyF,EAAEs4C,qBAAqB/9C,GAAGA,EAAEyF,EAAEu4C,sBAAsBt4C,EAAEu4C,OAAO,EAAEr+C,EAAE,SAASkK,GAAG9J,GAAGyF,EAAEs4C,qBAAqB/9C,GAAGA,EAAEyF,EAAEu4C,uBAAuB,WAAW3zC,EAAEzE,GAAGF,EAAEu4C,QAAQ,GAAG,EAAyJ,OAAvJv4C,EAAEw4C,QAAQ,WAAWhvD,GAAGwI,EAAExI,EAAEm8B,GAAG5lB,EAAE4qC,oBAAoB,SAASr4C,GAAE,GAAIqzB,EAAEmxB,QAAQ/2C,EAAE4qC,oBAAoB,SAASzwC,GAAE,GAAIgG,EAAE,KAAK/V,EAAE,KAAKX,EAAE,KAAK8Q,EAAE,KAAKqrB,EAAE,IAAI,EAASA,EAAG,WAAW,IAAI5lB,EAAE,CAAC,EAAE,OAAO9F,MAAM0iB,UAAUiK,QAAQ/J,KAAKvY,WAAW,SAASF,GAAG,IAAI,IAAItR,KAAKsR,EAAE,CAAC,IAAIA,EAAEypB,eAAe/6B,GAAG,OAAOiN,EAAEjN,GAAGsR,EAAEtR,EAAE,CAAC,IAAIiN,CAAC,CAA7I,CAAgJqE,EAAE9a,GAAG,CAAC,GAAG0W,EAAEy4C,QAAQz4C,EAAEu4C,SAASx4C,EAAEk3B,iBAAiB,SAAS3kC,GAAE,GAAIqzB,EAAEmxB,QAAQ/2C,EAAEk3B,iBAAiB,SAAS/8B,GAAE,GAAI8F,CAAC,CAAC,CAA5wFoE,CAAErE,EAAI,UAA5B,SAA4B,gCCD5D,oBAAlB8uB,OAAO6L,OAEhB/J,EAAOlnC,QAAU,SAAkBivD,EAAMC,GACnCA,IACFD,EAAKE,OAASD,EACdD,EAAK/7B,UAAYkS,OAAO6L,OAAOie,EAAUh8B,UAAW,CAClDge,YAAa,CACXppC,MAAOmnD,EACP7N,YAAY,EACZgO,UAAU,EACVC,cAAc,KAItB,EAGAnoB,EAAOlnC,QAAU,SAAkBivD,EAAMC,GACvC,GAAIA,EAAW,CACbD,EAAKE,OAASD,EACd,IAAII,EAAW,WAAa,EAC5BA,EAASp8B,UAAYg8B,EAAUh8B,UAC/B+7B,EAAK/7B,UAAY,IAAIo8B,EACrBL,EAAK/7B,UAAUge,YAAc+d,CAC/B,CACF,0BCxBF,IAAIj7C,EAAWoxB,OAAOlS,UAAUlf,SAEhCkzB,EAAOlnC,QAAU,SAAUsT,GAC1B,IAAI4f,EACJ,MAA4B,oBAArBlf,EAASof,KAAK9f,KAAiF,QAApD4f,EAAYkS,OAAOmc,eAAejuC,KAA0B4f,IAAckS,OAAOmc,eAAe,CAAC,GACpJ,qBCJQra,EAAOlnC,QAMN,WACT,IAAIgT,EAAS,SAAS5G,EAAMb,GAG5B,IAAIpC,EAASqH,MAAM0iB,UAAU/pB,OACzBgqB,EAAQ3iB,MAAM0iB,UAAUC,MACxBnf,EAAWoxB,OAAOlS,UAAUlf,SAIhC,SAASu7C,EAAQlmD,EAAGkN,GAClB,IAAI6hC,EAAM/uC,EAAIkN,EAAIlN,EAAIkN,EACtB,OAAOnK,EAAKyM,IAAI,GACA,MAAQzM,EAAKmO,IAAM69B,EAAM,EAAKA,GAAOA,GAAQhsC,EAAKwgB,QACpE,CAGA,IAAIlI,EAAUlU,MAAMkU,SAAW,SAAiBmJ,GAC9C,MAA8B,mBAAvB7Z,EAASof,KAAKvF,EACvB,EAGA,SAAS2hC,EAAW3hC,GAClB,MAA8B,sBAAvB7Z,EAASof,KAAKvF,EACvB,CAGA,SAAS4hC,EAASllD,GAChB,MAAuB,kBAARA,GAAoBA,EAAMA,IAAQ,CACnD,CAIA,SAASmlD,EAAS/tB,GAChB,OAAOx4B,EAAO+nB,MAAM,GAAIyQ,EAC1B,CAIA,SAAS3uB,IACP,OAAO,IAAIA,EAAM28C,MAAM90C,UACzB,CAmRA,SAAS+0C,IAAY,OAAO,CAAG,CAW/B,SAASC,IAAW,OAAO,CAAG,CAmB9B,SAASC,EAASpvD,EAAGgI,GAAK,OAAOhI,IAAMgI,EAAI,EAAI,CAAG,CA7SlDsK,EAAMxS,GAAKwS,EAAMkgB,UAKjBlgB,EAAM28C,MAAQ,SAAep0C,GAE3B,GAAImJ,EAAQnJ,EAAK,IAEf,GAAImJ,EAAQnJ,EAAK,GAAG,IAAK,CAEnBi0C,EAAWj0C,EAAK,MAClBA,EAAK,GAAKvI,EAAMonB,IAAI7e,EAAK,GAAIA,EAAK,KAEpC,IAAK,IAAI7a,EAAI,EAAGA,EAAI6a,EAAK,GAAGnT,OAAQ1H,IAClCqP,KAAKrP,GAAK6a,EAAK,GAAG7a,GACpBqP,KAAK3H,OAASmT,EAAK,GAAGnT,MAGxB,MACE2H,KAAK,GAAKy/C,EAAWj0C,EAAK,IAAMvI,EAAMonB,IAAI7e,EAAK,GAAIA,EAAK,IAAMA,EAAK,GACnExL,KAAK3H,OAAS,OAIX,GAAIqnD,EAASl0C,EAAK,IACvBxL,KAAK,GAAKiD,EAAM+8C,IAAI7+B,MAAM,KAAM3V,GAChCxL,KAAK3H,OAAS,MAGT,IAAImT,EAAK,aAAcvI,EAE5B,OAAOA,EAAMuI,EAAK,GAAGy0C,WAMrBjgD,KAAK,GAAK,GACVA,KAAK3H,OAAS,CAChB,CAEA,OAAO2H,IACT,EACAiD,EAAM28C,MAAMz8B,UAAYlgB,EAAMkgB,UAC9BlgB,EAAM28C,MAAMze,YAAcl+B,EAK1BA,EAAM/S,MAAQ,CACZsvD,QAASA,EACT7qC,QAASA,EACT8qC,WAAYA,EACZC,SAAUA,EACVC,SAAUA,GAIZ18C,EAAMi9C,WAAa7jD,EAAK+hB,OACxBnb,EAAMk9C,UAAY,SAAmB1vD,GACnC,GAAkB,oBAAPA,EACT,MAAM,IAAI28C,UAAU,wBACtBnqC,EAAMi9C,WAAazvD,CACrB,EAKAwS,EAAM64B,OAAS,SAAgB1G,GAC7B,IAAIzkC,EAAGgI,EAEP,GAAyB,IAArBmS,UAAUzS,OAAc,CAC1B,IAAKM,KAAKy8B,EACRnyB,EAAMtK,GAAKy8B,EAAIz8B,GACjB,OAAOqH,IACT,CAEA,IAAKrP,EAAI,EAAGA,EAAIma,UAAUzS,OAAQ1H,IAChC,IAAKgI,KAAKmS,UAAUna,GAClBykC,EAAIz8B,GAAKmS,UAAUna,GAAGgI,GAG1B,OAAOy8B,CACT,EAIAnyB,EAAM4oB,KAAO,SAAc+F,GACzB,OAAOA,EAAIv5B,QAAU,CACvB,EAIA4K,EAAMmjB,KAAO,SAAcwL,GACzB,OAAOA,EAAI,GAAGv5B,QAAU,CAC1B,EAIA4K,EAAMm9C,WAAa,SAAoBxuB,GACrC,MAAO,CACL/F,KAAM5oB,EAAM4oB,KAAK+F,GACjBxL,KAAMnjB,EAAMmjB,KAAKwL,GAErB,EAIA3uB,EAAMgU,IAAM,SAAa2a,EAAKn4B,GAC5B,OAAIkb,EAAQlb,GACHA,EAAM4wB,KAAI,SAAS15B,GACxB,OAAOsS,EAAMgU,IAAI2a,EAAKjhC,EACxB,IAEKihC,EAAIn4B,EACb,EAKAwJ,EAAMo9C,KAAO,SAAczuB,EAAKjhC,GAC9B,OAAOsS,EAAMgU,IAAI2a,EAAKjhC,EACxB,EAKAsS,EAAM4iB,IAAM,SAAa+L,EAAKn4B,GAC5B,GAAIkb,EAAQlb,GAAQ,CAClB,IAAI6mD,EAASr9C,EAAMs9C,OAAO3uB,EAAIv5B,QAAQgyB,KAAI,WACxC,OAAO,IAAI5pB,MAAMhH,EAAMpB,OACzB,IAMA,OALAoB,EAAM2zB,SAAQ,SAASozB,EAAK7vD,GAC1BsS,EAAMs9C,OAAO3uB,EAAIv5B,QAAQ+0B,SAAQ,SAASz0B,GACxC2nD,EAAO3nD,GAAGhI,GAAKihC,EAAIj5B,GAAG6nD,EACxB,GACF,IACOF,CACT,CAEA,IADA,IAAIG,EAAS,IAAIhgD,MAAMmxB,EAAIv5B,QAClB1H,EAAI,EAAGA,EAAIihC,EAAIv5B,OAAQ1H,IAC9B8vD,EAAO9vD,GAAK,CAACihC,EAAIjhC,GAAG8I,IACtB,OAAOgnD,CACT,EAKAx9C,EAAMy9C,KAAO,SAAc9uB,EAAKjhC,GAC9B,OAAOsS,EAAM4iB,IAAI+L,EAAKjhC,GAAG05B,KAAI,SAAS3jB,GAAI,OAAOA,EAAE,EAAG,GACxD,EAIAzD,EAAM09C,KAAO,SAAc/uB,GAGzB,IAFA,IAAIgvB,EAAO39C,EAAM4oB,KAAK+F,GAClBkO,EAAM,IAAIr/B,MAAMmgD,GACX3pC,EAAM,EAAGA,EAAM2pC,EAAM3pC,IAC5B6oB,EAAI7oB,GAAO,CAAC2a,EAAI3a,GAAKA,IACvB,OAAO6oB,CACT,EAIA78B,EAAM49C,SAAW,SAAkBjvB,GAGjC,IAFA,IAAIgvB,EAAO39C,EAAM4oB,KAAK+F,GAAO,EACzBkO,EAAM,IAAIr/B,MAAMmgD,GACXjwD,EAAI,EAAGiwD,GAAQ,EAAGA,IAAQjwD,IACjCmvC,EAAInvC,GAAK,CAACihC,EAAIjhC,GAAGiwD,IACnB,OAAO9gB,CACT,EAGA78B,EAAMmU,UAAY,SAAmBwa,GACnC,IACIkvB,EAAQj1B,EAAMzF,EAAMztB,EAAGhI,EADvBykC,EAAM,GAUV,IANKzgB,EAAQid,EAAI,MACfA,EAAM,CAACA,IAET/F,EAAO+F,EAAIv5B,OACX+tB,EAAOwL,EAAI,GAAGv5B,OAET1H,EAAI,EAAGA,EAAIy1B,EAAMz1B,IAAK,CAEzB,IADAmwD,EAAS,IAAIrgD,MAAMorB,GACdlzB,EAAI,EAAGA,EAAIkzB,EAAMlzB,IACpBmoD,EAAOnoD,GAAKi5B,EAAIj5B,GAAGhI,GACrBykC,EAAIp9B,KAAK8oD,EACX,CAGA,OAAsB,IAAf1rB,EAAI/8B,OAAe+8B,EAAI,GAAKA,CACrC,EAKAnyB,EAAMonB,IAAM,SAAauH,EAAKsF,EAAM6pB,GAClC,IAAI9pC,EAAK2pC,EAAMI,EAAMlhB,EAAKja,EAS1B,IAPKlR,EAAQid,EAAI,MACfA,EAAM,CAACA,IAETgvB,EAAOhvB,EAAIv5B,OACX2oD,EAAOpvB,EAAI,GAAGv5B,OACdynC,EAAMihB,EAAUnvB,EAAM,IAAInxB,MAAMmgD,GAE3B3pC,EAAM,EAAGA,EAAM2pC,EAAM3pC,IAIxB,IAFK6oB,EAAI7oB,KACP6oB,EAAI7oB,GAAO,IAAIxW,MAAMugD,IAClBn7B,EAAM,EAAGA,EAAMm7B,EAAMn7B,IACxBia,EAAI7oB,GAAK4O,GAAOqR,EAAKtF,EAAI3a,GAAK4O,GAAM5O,EAAK4O,GAG7C,OAAsB,IAAfia,EAAIznC,OAAeynC,EAAI,GAAKA,CACrC,EAIA78B,EAAMg+C,UAAY,SAAmBrvB,EAAKsF,EAAM6pB,GAC9C,IAAI9pC,EAAK2pC,EAAMI,EAAMlhB,EAAKja,EAS1B,IAPKlR,EAAQid,EAAI,MACfA,EAAM,CAACA,IAETgvB,EAAOhvB,EAAIv5B,OACX2oD,EAAOpvB,EAAI,GAAGv5B,OACdynC,EAAMihB,EAAUnvB,EAAM,IAAInxB,MAAMmgD,GAE3B3pC,EAAM,EAAGA,EAAM2pC,EAAM3pC,IAMxB,IAJK6oB,EAAI7oB,KACP6oB,EAAI7oB,GAAO,IAAIxW,MAAMugD,IACnBA,EAAO,IACTlhB,EAAI7oB,GAAK,GAAK2a,EAAI3a,GAAK,IACpB4O,EAAM,EAAGA,EAAMm7B,EAAMn7B,IACxBia,EAAI7oB,GAAK4O,GAAOqR,EAAK4I,EAAI7oB,GAAK4O,EAAI,GAAI+L,EAAI3a,GAAK4O,IAEnD,OAAsB,IAAfia,EAAIznC,OAAeynC,EAAI,GAAKA,CACrC,EAIA78B,EAAMi+C,MAAQ,SAAetvB,EAAKsF,GAChC,OAAOj0B,EAAMonB,IAAIuH,EAAKsF,GAAM,EAC9B,EAIAj0B,EAAMi+B,OAAS,SAAiBrV,EAAMzF,EAAM8Q,GAC1C,IACIvmC,EAAGgI,EADHmnC,EAAM,IAAIr/B,MAAMorB,GAQpB,IALI4zB,EAAWr5B,KACb8Q,EAAO9Q,EACPA,EAAOyF,GAGJl7B,EAAI,EAAGA,EAAIk7B,EAAMl7B,IAEpB,IADAmvC,EAAInvC,GAAK,IAAI8P,MAAM2lB,GACdztB,EAAI,EAAGA,EAAIytB,EAAMztB,IACpBmnC,EAAInvC,GAAGgI,GAAKu+B,EAAKvmC,EAAGgI,GAGxB,OAAOmnC,CACT,EAOA78B,EAAMk+C,MAAQ,SAAet1B,EAAMzF,GAGjC,OAFKs5B,EAASt5B,KACZA,EAAOyF,GACF5oB,EAAMi+B,OAAOrV,EAAMzF,EAAMy5B,EAClC,EAOA58C,EAAMm+C,KAAO,SAAcv1B,EAAMzF,GAG/B,OAFKs5B,EAASt5B,KACZA,EAAOyF,GACF5oB,EAAMi+B,OAAOrV,EAAMzF,EAAM05B,EAClC,EAIA78C,EAAMo+C,KAAO,SAAcx1B,EAAMzF,GAG/B,OAFKs5B,EAASt5B,KACZA,EAAOyF,GACF5oB,EAAMi+B,OAAOrV,EAAMzF,EAAMnjB,EAAMi9C,WACxC,EAOAj9C,EAAMq+C,SAAW,SAAkBz1B,EAAMzF,GAGvC,OAFKs5B,EAASt5B,KACZA,EAAOyF,GACF5oB,EAAMi+B,OAAOrV,EAAMzF,EAAM25B,EAClC,EAIA98C,EAAMs+C,UAAY,SAAmB3vB,GACnC,IACI3a,EAAK4O,EADL27B,EAAO5vB,EAAIv5B,OAGf,GAAIu5B,EAAIv5B,SAAWu5B,EAAI,GAAGv5B,OACxB,OAAO,EAET,IAAK4e,EAAM,EAAGA,EAAMuqC,EAAMvqC,IACxB,IAAK4O,EAAM,EAAGA,EAAM27B,EAAM37B,IACxB,GAAI+L,EAAI/L,GAAK5O,KAAS2a,EAAI3a,GAAK4O,GAC7B,OAAO,EAGb,OAAO,CACT,EAIA5iB,EAAMm9B,MAAQ,SAAexO,GAC3B,OAAO3uB,EAAMi+C,MAAMtvB,EAAKiuB,EAC1B,EAIA58C,EAAM+8C,IAAM,SAAa1gD,EAAKob,EAAKriB,EAAQ6+B,GACpCuoB,EAAWvoB,KACdA,GAAO,GAET,IAIIuqB,EAJA7vB,EAAM,GACN8vB,EAAQlC,EAAQlgD,EAAKob,GACrBxS,GAAQwS,EAAMgnC,EAAQpiD,EAAMoiD,KAAWrpD,EAAS,GAAKqpD,GACrDvzC,EAAU7O,EAKd,IAAKmiD,EAAM,EACNtzC,GAAWuM,GAAO+mC,EAAMppD,EACjB8V,GAAW7O,EAAMoiD,EAAQx5C,EAAOw5C,IAAvCD,GAAsDC,EACzD9vB,EAAI55B,KAAMk/B,EAAOA,EAAK/oB,EAASszC,GAAOtzC,GAGxC,OAAOyjB,CACT,EAMA3uB,EAAMs9C,OAAS,SAAgBpzC,EAAOC,EAAKlF,GACzC,IACIvX,EADAgxD,EAAK,GAOT,GALAz5C,EAAOA,GAAQ,EACXkF,IAAQ5R,IACV4R,EAAMD,EACNA,EAAQ,GAENA,IAAUC,GAAgB,IAATlF,EACnB,MAAO,GAET,GAAIiF,EAAQC,GAAOlF,EAAO,EACxB,MAAO,GAET,GAAIiF,EAAQC,GAAOlF,EAAO,EACxB,MAAO,GAET,GAAIA,EAAO,EACT,IAAKvX,EAAIwc,EAAOxc,EAAIyc,EAAKzc,GAAKuX,EAC5By5C,EAAG3pD,KAAKrH,QAGV,IAAKA,EAAIwc,EAAOxc,EAAIyc,EAAKzc,GAAKuX,EAC5By5C,EAAG3pD,KAAKrH,GAGZ,OAAOgxD,CACT,EAOA1+C,EAAMmgB,MAAS,WACb,SAASw+B,EAAOnrB,EAAMtpB,EAAOC,EAAKlF,GAEhC,IAAIvX,EACAgxD,EAAK,GACLtpD,EAASo+B,EAAKp+B,OAClB,GAAI8U,IAAU3R,GAAa4R,IAAQ5R,GAAa0M,IAAS1M,EACvD,OAAOyH,EAAMguC,KAAKxa,GAQpB,GADAvuB,EAAOA,GAAQ,GAFfiF,GAFAA,EAAQA,GAAS,IAEA,EAAIA,EAAQ9U,EAAS8U,MACtCC,GAFAA,EAAMA,GAAOqpB,EAAKp+B,SAEL,EAAI+U,EAAM/U,EAAS+U,IAEF,IAATlF,EACnB,MAAO,GAET,GAAIiF,EAAQC,GAAOlF,EAAO,EACxB,MAAO,GAET,GAAIiF,EAAQC,GAAOlF,EAAO,EACxB,MAAO,GAET,GAAIA,EAAO,EACT,IAAKvX,EAAIwc,EAAOxc,EAAIyc,EAAKzc,GAAKuX,EAC5By5C,EAAG3pD,KAAKy+B,EAAK9lC,SAGf,IAAKA,EAAIwc,EAAOxc,EAAIyc,EAAIzc,GAAKuX,EAC3By5C,EAAG3pD,KAAKy+B,EAAK9lC,IAGjB,OAAOgxD,CACT,CAEA,SAASv+B,EAAMqT,EAAMorB,GACnB,IAAIC,EAAUC,EAEd,OAAIrC,GADJmC,EAAUA,GAAW,CAAC,GACD5qC,KACfyoC,EAASmC,EAAQh8B,KACZ4Q,EAAKorB,EAAQ5qC,KAAK4qC,EAAQh8B,KAG5B+7B,EAFG3+C,EAAMo9C,KAAK5pB,EAAMorB,EAAQ5qC,MACnC6qC,EAAWD,EAAQh8B,KAAO,CAAC,GACC1Y,MAAO20C,EAAS10C,IAAK00C,EAAS55C,MAGxDw3C,EAASmC,EAAQh8B,KAGZ+7B,EAFG3+C,EAAMy9C,KAAKjqB,EAAMorB,EAAQh8B,MACnCk8B,EAAWF,EAAQ5qC,KAAO,CAAC,GACC9J,MAAO40C,EAAS30C,IAAK20C,EAAS75C,OAG5D65C,EAAWF,EAAQ5qC,KAAO,CAAC,EAC3B6qC,EAAWD,EAAQh8B,KAAO,CAAC,EAChB+7B,EAAOnrB,EAAMsrB,EAAS50C,MAAO40C,EAAS30C,IAAK20C,EAAS75C,MACnDmiB,KAAI,SAASpT,GACvB,OAAO2qC,EAAO3qC,EAAK6qC,EAAS30C,MAAO20C,EAAS10C,IAAK00C,EAAS55C,KAC5D,IACF,CAEA,OAAOkb,CACT,CA9De,GAoEfngB,EAAM++C,YAAc,SAAqBl9B,EAAG+8B,EAAS98B,GACnD,IAAIk9B,EAAIC,EACR,GAAIxC,EAASmC,EAAQ5qC,KAAM,CACzB,GAAIyoC,EAASmC,EAAQh8B,KACnB,OAAOf,EAAE+8B,EAAQ5qC,KAAK4qC,EAAQh8B,KAAOd,EACvC88B,EAAQh8B,IAAMg8B,EAAQh8B,KAAO,CAAC,EAC9Bg8B,EAAQh8B,IAAI1Y,MAAQ00C,EAAQh8B,IAAI1Y,OAAS,EACzC00C,EAAQh8B,IAAIzY,IAAMy0C,EAAQh8B,IAAIzY,KAAO0X,EAAE,GAAGzsB,OAC1CwpD,EAAQh8B,IAAI3d,KAAO25C,EAAQh8B,IAAI3d,MAAQ,EACvC+5C,EAAKh/C,EAAMs9C,OAAOsB,EAAQh8B,IAAI1Y,MACR9Q,EAAKiD,IAAIwlB,EAAEzsB,OAAQwpD,EAAQh8B,IAAIzY,KAC/By0C,EAAQh8B,IAAI3d,MAClC,IAAI1B,EAAIq7C,EAAQ5qC,IAIhB,OAHAgrC,EAAG70B,SAAQ,SAAS9zB,EAAG3I,GACrBm0B,EAAEte,GAAGlN,GAAKyrB,EAAEp0B,EACd,IACOm0B,CACT,CAEA,GAAI46B,EAASmC,EAAQh8B,KAAM,CACzBg8B,EAAQ5qC,IAAM4qC,EAAQ5qC,KAAO,CAAC,EAC9B4qC,EAAQ5qC,IAAI9J,MAAQ00C,EAAQ5qC,IAAI9J,OAAS,EACzC00C,EAAQ5qC,IAAI7J,IAAMy0C,EAAQ5qC,IAAI7J,KAAO0X,EAAEzsB,OACvCwpD,EAAQ5qC,IAAI/O,KAAO25C,EAAQ5qC,IAAI/O,MAAQ,EACvCg6C,EAAKj/C,EAAMs9C,OAAOsB,EAAQ5qC,IAAI9J,MACR9Q,EAAKiD,IAAIwlB,EAAE,GAAGzsB,OAAQwpD,EAAQ5qC,IAAI7J,KAClCy0C,EAAQ5qC,IAAI/O,MAClC,IAAI5O,EAAIuoD,EAAQh8B,IAIhB,OAHAq8B,EAAG90B,SAAQ,SAAS5mB,EAAG7N,GACrBmsB,EAAEte,GAAGlN,GAAKyrB,EAAEpsB,EACd,IACOmsB,CACT,CAsBA,OApBIC,EAAE,GAAG1sB,SAAWmD,IAClBupB,EAAI,CAACA,IAEP88B,EAAQ5qC,IAAI9J,MAAQ00C,EAAQ5qC,IAAI9J,OAAS,EACzC00C,EAAQ5qC,IAAI7J,IAAMy0C,EAAQ5qC,IAAI7J,KAAO0X,EAAEzsB,OACvCwpD,EAAQ5qC,IAAI/O,KAAO25C,EAAQ5qC,IAAI/O,MAAQ,EACvC25C,EAAQh8B,IAAI1Y,MAAQ00C,EAAQh8B,IAAI1Y,OAAS,EACzC00C,EAAQh8B,IAAIzY,IAAMy0C,EAAQh8B,IAAIzY,KAAO0X,EAAE,GAAGzsB,OAC1CwpD,EAAQh8B,IAAI3d,KAAO25C,EAAQh8B,IAAI3d,MAAQ,EACvCg6C,EAAKj/C,EAAMs9C,OAAOsB,EAAQ5qC,IAAI9J,MACR9Q,EAAKiD,IAAIwlB,EAAEzsB,OAAQwpD,EAAQ5qC,IAAI7J,KAC/By0C,EAAQ5qC,IAAI/O,MAClC+5C,EAAKh/C,EAAMs9C,OAAOsB,EAAQh8B,IAAI1Y,MACR9Q,EAAKiD,IAAIwlB,EAAE,GAAGzsB,OAAQwpD,EAAQh8B,IAAIzY,KAClCy0C,EAAQh8B,IAAI3d,MAClCg6C,EAAG90B,SAAQ,SAAS5mB,EAAG7V,GACrBsxD,EAAG70B,SAAQ,SAAS9zB,EAAGX,GACrBmsB,EAAEte,GAAGlN,GAAKyrB,EAAEp0B,GAAGgI,EACjB,GACF,IACOmsB,CACT,EAKA7hB,EAAMk/C,SAAW,SAAkBC,GACjC,IAAIC,EAAMp/C,EAAMk+C,MAAMiB,EAAU/pD,OAAQ+pD,EAAU/pD,QAIlD,OAHA+pD,EAAUh1B,SAAQ,SAASxiB,EAAGja,GAC5B0xD,EAAI1xD,GAAGA,GAAKia,CACd,IACOy3C,CACT,EAIAp/C,EAAMguC,KAAO,SAAcnsB,GACzB,OAAOA,EAAEuF,KAAI,SAASpT,GACpB,OAAIyoC,EAASzoC,GACJA,EACFA,EAAIoT,KAAI,SAASzf,GACtB,OAAOA,CACT,GACF,GACF,EAQA,IAAI03C,EAASr/C,EAAMkgB,UAwFnB,OArFAm/B,EAAOjqD,OAAS,EAKhBiqD,EAAOtqD,KAAOyI,MAAM0iB,UAAUnrB,KAC9BsqD,EAAOv4B,KAAOtpB,MAAM0iB,UAAU4G,KAC9Bu4B,EAAO3lC,OAASlc,MAAM0iB,UAAUxG,OAChC2lC,EAAOl/B,MAAQ3iB,MAAM0iB,UAAUC,MAI/Bk/B,EAAOrC,QAAU,WACf,OAAOjgD,KAAK3H,OAAS,EAAI+qB,EAAMC,KAAKrjB,MAAQojB,EAAMC,KAAKrjB,MAAM,EAC/D,EAIAsiD,EAAOj4B,IAAM,SAAa6M,EAAM6pB,GAC9B,OAAO99C,EAAMA,EAAMonB,IAAIrqB,KAAMk3B,EAAM6pB,GACrC,EAIAuB,EAAOrB,UAAY,SAAmB/pB,EAAM6pB,GAC1C,OAAO99C,EAAMA,EAAMg+C,UAAUjhD,KAAMk3B,EAAM6pB,GAC3C,EAIAuB,EAAOpB,MAAQ,SAAehqB,GAE5B,OADAj0B,EAAMi+C,MAAMlhD,KAAMk3B,GACXl3B,IACT,EAIA,SAAUuiD,GACR,IAAK,IAAI5xD,EAAI,EAAGA,EAAI4xD,EAAMlqD,OAAQ1H,KAAK,SAAU6xD,GAC/CF,EAAOE,GAAY,SAAStrB,GAC1B,IACAjQ,EADIqY,EAAOt/B,KAGX,OAAIk3B,GACFurB,YAAW,WACTvrB,EAAK7T,KAAKic,EAAMgjB,EAAOE,GAAUn/B,KAAKic,GACxC,IACOt/B,OAETinB,EAAUhkB,EAAMu/C,GAAUxiD,MACnB2U,EAAQsS,GAAWhkB,EAAMgkB,GAAWA,EAC7C,CACD,CAdsC,CAcpCs7B,EAAM5xD,GACV,CAhBD,CAgBG,+DAA+D6P,MAAM,MAIxE,SAAU+hD,GACR,IAAK,IAAI5xD,EAAI,EAAGA,EAAI4xD,EAAMlqD,OAAQ1H,KAAK,SAAU6xD,GAC/CF,EAAOE,GAAY,SAAS/oD,EAAOy9B,GACjC,IAAIoI,EAAOt/B,KAEX,OAAIk3B,GACFurB,YAAW,WACTvrB,EAAK7T,KAAKic,EAAMgjB,EAAOE,GAAUn/B,KAAKic,EAAM7lC,GAC9C,IACOuG,MAEFiD,EAAMA,EAAMu/C,GAAUxiD,KAAMvG,GACrC,CACD,CAZsC,CAYpC8oD,EAAM5xD,GACV,CAdD,CAcG,UAAU6P,MAAM,MAInB,SAAU+hD,GACR,IAAK,IAAI5xD,EAAI,EAAGA,EAAI4xD,EAAMlqD,OAAQ1H,KAAK,SAAU6xD,GAC/CF,EAAOE,GAAY,WACjB,OAAOv/C,EAAMA,EAAMu/C,GAAUrhC,MAAM,KAAMrW,WAC3C,CACD,CAJsC,CAIpCy3C,EAAM5xD,GACV,CAND,CAMG,kCAAkC6P,MAAM,MAIpCyC,CAEP,CA5qBa,CA4qBX5G,MAutIA,OAttID,SAAS4G,EAAO5G,GAEjB,IAAIojD,EAAax8C,EAAM/S,MAAMuvD,WAG7B,SAASiD,EAAOh8C,EAAGwD,GAAK,OAAOxD,EAAIwD,CAAG,CAEtC,SAASy4C,EAAK7kC,EAAKxe,EAAKob,GACtB,OAAOre,EAAKqe,IAAIpb,EAAKjD,EAAKiD,IAAIwe,EAAKpD,GACrC,CAIAzX,EAAMjJ,IAAM,SAAa43B,GAGvB,IAFA,IAAI53B,EAAM,EACNrJ,EAAIihC,EAAIv5B,SACH1H,GAAK,GACZqJ,GAAO43B,EAAIjhC,GACb,OAAOqJ,CACT,EAIAiJ,EAAM2/C,QAAU,SAAiBhxB,GAG/B,IAFA,IAAI53B,EAAM,EACNrJ,EAAIihC,EAAIv5B,SACH1H,GAAK,GACZqJ,GAAO43B,EAAIjhC,GAAKihC,EAAIjhC,GACtB,OAAOqJ,CACT,EAIAiJ,EAAM4/C,SAAW,SAAkBjxB,GAKjC,IAJA,IAGIhM,EAHAzB,EAAOlhB,EAAMkhB,KAAKyN,GAClB53B,EAAM,EACNrJ,EAAIihC,EAAIv5B,SAEH1H,GAAK,GAEZqJ,IADA4rB,EAAMgM,EAAIjhC,GAAKwzB,GACFyB,EAEf,OAAO5rB,CACT,EAGAiJ,EAAM6/C,OAAS,SAAgBlxB,GAG7B,IAFA,IAAI53B,EAAM,EACNrJ,EAAIihC,EAAIv5B,SACH1H,GAAK,GACZqJ,GAAO43B,EAAIjhC,GACb,OAAOqJ,CACT,EAGAiJ,EAAM6e,QAAU,SAAiB8P,GAG/B,IAFA,IAAImxB,EAAO,EACPpyD,EAAIihC,EAAIv5B,SACH1H,GAAK,GACZoyD,GAAQnxB,EAAIjhC,GACd,OAAOoyD,CACT,EAIA9/C,EAAM3D,IAAM,SAAasyB,GAGvB,IAFA,IAAIoxB,EAAMpxB,EAAI,GACVjhC,EAAI,IACCA,EAAIihC,EAAIv5B,QACXu5B,EAAIjhC,GAAKqyD,IACXA,EAAMpxB,EAAIjhC,IACd,OAAOqyD,CACT,EAIA//C,EAAMyX,IAAM,SAAakX,GAGvB,IAFA,IAAIqxB,EAAOrxB,EAAI,GACXjhC,EAAI,IACCA,EAAIihC,EAAIv5B,QACXu5B,EAAIjhC,GAAKsyD,IACXA,EAAOrxB,EAAIjhC,IACf,OAAOsyD,CACT,EAIAhgD,EAAMigD,OAAS,SAAgBtxB,GAE7B,IADA,IAAI6jB,EAAO,CAAC,EAAG0N,EAAO,GACdxyD,EAAI,EAAGA,EAAIihC,EAAIv5B,OAAQ1H,IACxB8kD,EAAK7jB,EAAIjhC,MACZ8kD,EAAK7jB,EAAIjhC,KAAM,EACfwyD,EAAKnrD,KAAK45B,EAAIjhC,KAGlB,OAAOwyD,CACT,EAIAlgD,EAAMkhB,KAAO,SAAcyN,GACzB,OAAO3uB,EAAMjJ,IAAI43B,GAAOA,EAAIv5B,MAC9B,EAIA4K,EAAMmgD,UAAY,SAAmBxxB,GACnC,OAAO3uB,EAAM4/C,SAASjxB,GAAOA,EAAIv5B,MACnC,EAIA4K,EAAM8lB,QAAU,SAAiB6I,GAC/B,OAAOv1B,EAAKyM,IAAI7F,EAAM6e,QAAQ8P,GAAM,EAAIA,EAAIv5B,OAC9C,EAIA4K,EAAMqnB,OAAS,SAAgBsH,GAC7B,IAAIyxB,EAASzxB,EAAIv5B,OACb8qD,EAAOvxB,EAAIxO,QAAQ2G,KAAK24B,GAE5B,OAAkB,EAATW,EAELF,EAAME,EAAS,EAAK,IADnBF,EAAME,EAAS,EAAK,GAAMF,EAAME,EAAS,IAAO,CAEvD,EAIApgD,EAAMqgD,OAAS,SAAgB1xB,GAC7B,OAAO3uB,EAAMg+C,UAAUrvB,GAAK,SAAUlrB,EAAGwD,GAAK,OAAOxD,EAAIwD,CAAG,GAC9D,EAIAjH,EAAMsgD,QAAU,SAAiB3xB,GAC/B,OAAO3uB,EAAMg+C,UAAUrvB,GAAK,SAAUlrB,EAAGwD,GAAK,OAAOxD,EAAIwD,CAAG,GAC9D,EAIAjH,EAAMugD,KAAO,SAAc5xB,GACzB,IAEIjhC,EAFA8yD,EAAQ,GACRC,EAAS9xB,EAAIv5B,OAEjB,IAAK1H,EAAI,EAAGA,EAAI+yD,EAAQ/yD,IACtB8yD,EAAMzrD,KAAK45B,EAAIjhC,GAAKihC,EAAIjhC,EAAI,IAC9B,OAAO8yD,CACT,EAIAxgD,EAAM0gD,KAAO,SAAU/xB,GACrB,IAAIjhC,EACAizD,EAAkB,GAClBC,EAAe,CAAC,EACpB,IAAKlzD,EAAI,EAAGA,EAAIihC,EAAIv5B,OAAQ1H,IAEtBkzD,EADAxgD,EAASuuB,EAAIjhC,IAEfkzD,EAAaxgD,MAEbwgD,EAAaxgD,GAAU,EACvBugD,EAAgB5rD,KAAKqL,IAIzB,IAAIygD,EAAwBF,EAAgB75B,KAAK24B,GAC7CqB,EAAc,CAAC,EACfC,EAAc,EAClB,IAAKrzD,EAAI,EAAGA,EAAImzD,EAAsBzrD,OAAQ1H,IAAK,CACjD,IAAI0S,EACA+gB,EAAQy/B,EADRxgD,EAASygD,EAAsBnzD,IAI/BgzD,GAFQK,GACDA,EAAc5/B,EAAQ,IACL,EAC5B2/B,EAAY1gD,GAAUsgD,EACtBK,GAAe5/B,CACjB,CAEA,OAAOwN,EAAIvH,KAAI,SAAUhnB,GACvB,OAAO0gD,EAAY1gD,EACrB,GACF,EAMAJ,EAAM4X,KAAO,SAAc+W,GACzB,IAMIjhC,EANA+yD,EAAS9xB,EAAIv5B,OACb8qD,EAAOvxB,EAAIxO,QAAQ2G,KAAK24B,GACxBt+B,EAAQ,EACR6/B,EAAW,EACXC,EAAc,EACdC,EAAW,GAGf,IAAKxzD,EAAI,EAAGA,EAAI+yD,EAAQ/yD,IAClBwyD,EAAKxyD,KAAOwyD,EAAKxyD,EAAI,GACvByzB,KAEIA,EAAQ6/B,GACVE,EAAW,CAAChB,EAAKxyD,IACjBszD,EAAW7/B,EACX8/B,EAAc,GAGP9/B,IAAU6/B,IACjBE,EAASnsD,KAAKmrD,EAAKxyD,IACnBuzD,KAGF9/B,EAAQ,GAIZ,OAAuB,IAAhB8/B,EAAoBC,EAAS,GAAKA,CAC3C,EAIAlhD,EAAMkZ,MAAQ,SAAeyV,GAC3B,OAAO3uB,EAAMyX,IAAIkX,GAAO3uB,EAAM3D,IAAIsyB,EACpC,EAIA3uB,EAAMmhD,SAAW,SAAkBxyB,EAAKyyB,GACtC,OAAOphD,EAAM4/C,SAASjxB,IAAQA,EAAIv5B,QAAUgsD,EAAO,EAAI,GACzD,EAGAphD,EAAMqhD,eAAiB,SAAwB1yB,GAG7C,OAFeA,EAAIP,QAAO,SAAU3qB,EAAG69C,GAAU,OAAO79C,EAAIzD,EAAM4/C,SAAS0B,EAAS,GAAG,IAC3E3yB,EAAIP,QAAO,SAAU3qB,EAAG69C,GAAU,OAAO79C,EAAI69C,EAAQlsD,MAAO,GAAG,GAChDu5B,EAAIv5B,OACjC,EAGA4K,EAAMuhD,UAAY,SAAU5yB,GAI1B,IAHA,IAAIzN,EAAOlhB,EAAMkhB,KAAKyN,GAClByxB,EAASzxB,EAAIv5B,OACbosD,EAAM,IAAIhkD,MAAM4iD,GACX1yD,EAAI,EAAGA,EAAI0yD,EAAQ1yD,IAC1B8zD,EAAI9zD,GAAKihC,EAAIjhC,GAAKwzB,EAEpB,OAAOsgC,CACT,EAIAxhD,EAAM6mB,MAAQ,SAAe8H,EAAKyyB,GAChC,OAAOhoD,EAAKwM,KAAK5F,EAAMmhD,SAASxyB,EAAKyyB,GACvC,EAGAphD,EAAMyhD,YAAc,SAAqB9yB,GACvC,OAAOv1B,EAAKwM,KAAK5F,EAAMqhD,eAAe1yB,GACxC,EAGA3uB,EAAM0hD,QAAU,SAAiB/yB,GAG/B,IAFA,IAAIzN,EAAOlhB,EAAMkhB,KAAKyN,GAClBlrB,EAAI,GACC/V,EAAIihC,EAAIv5B,OAAS,EAAG1H,GAAK,EAAGA,IACnC+V,EAAE1O,KAAKqE,EAAK6F,IAAI0vB,EAAIjhC,GAAKwzB,IAE3B,OAAOlhB,EAAMkhB,KAAKzd,EACpB,EAIAzD,EAAM2hD,OAAS,SAAgBhzB,GAG7B,IAFA,IAAItH,EAASrnB,EAAMqnB,OAAOsH,GACtBlrB,EAAI,GACC/V,EAAIihC,EAAIv5B,OAAS,EAAG1H,GAAK,EAAGA,IACnC+V,EAAE1O,KAAKqE,EAAK6F,IAAI0vB,EAAIjhC,GAAK25B,IAE3B,OAAOrnB,EAAMqnB,OAAO5jB,EACtB,EAIAzD,EAAM4hD,SAAW,SAAkBjzB,GACjC,OAAO3uB,EAAM6mB,MAAM8H,GAAO3uB,EAAMkhB,KAAKyN,EACvC,EAIA3uB,EAAM6hD,UAAY,SAAmBlzB,GACnC,IAAIyxB,EAASzxB,EAAIv5B,OACb8qD,EAAOvxB,EAAIxO,QAAQ2G,KAAK24B,GAC5B,MAAO,CACLS,EAAM9mD,EAAKuE,MAAOyiD,EAAU,GAAK,GACjCF,EAAM9mD,EAAKuE,MAAOyiD,EAAU,GAAK,GACjCF,EAAM9mD,EAAKuE,MAAiB,EAAVyiD,EAAc,GAAK,GAEzC,EAKApgD,EAAM8hD,UAAY,SAAmBnzB,EAAKozB,EAAgBC,EAAQC,GAChE,IAGIv0D,EAAGmI,EAAMqsD,EAAO5sD,EAAGmwB,EAHnB08B,EAAcxzB,EAAIxO,QAAQ2G,KAAK24B,GAC/B2C,EAAe,CAACL,EAAe3sD,QAC/BiB,EAAIs4B,EAAIv5B,OAQZ,IALsB,qBAAX4sD,IACTA,EAAS,EAAI,GACM,qBAAVC,IACTA,EAAQ,EAAI,GAETv0D,EAAI,EAAGA,EAAIq0D,EAAe3sD,OAAQ1H,IAGrCw0D,EAAQ7rD,GAFRR,EAAIksD,EAAer0D,KACfs0D,EAASnsD,GAAK,EAAImsD,EAASC,IAE/B3sD,EAAI8D,EAAKqB,MAAMilD,EAAKwC,EAAO,EAAG7rD,EAAI,IAClCovB,EAAQi6B,EAAKwC,EAAQ5sD,EAAG,EAAG,GAC3B8sD,EAAa10D,IAAM,EAAI+3B,GAAS08B,EAAY7sD,EAAI,GAAKmwB,EAAQ08B,EAAY7sD,GAG3E,OAAO8sD,CACT,EAIApiD,EAAMqiD,WAAa,SAAoB1zB,EAAKr5B,EAAGgtD,GAC7C,IAAIpC,EAAOvxB,EAAIxO,QAAQ2G,KAAK24B,GACxB8C,EAAYjtD,GAAK4qD,EAAK9qD,QAAUktD,EAAY,GAAK,KAAOA,EAAY,EAAI,GACxE9rD,EAAQsF,SAASymD,GACjBx1C,EAAOw1C,EAAY/rD,EACvB,OAAIA,EAAQ,EAAI0pD,EAAK9qD,OACZ8qD,EAAK1pD,EAAQ,GAAKuW,GAAQmzC,EAAK1pD,GAAS0pD,EAAK1pD,EAAQ,IAErD0pD,EAAK1pD,EAAQ,EAExB,EAKAwJ,EAAMwiD,kBAAoB,SAA2B7zB,EAAKirB,EAAO6I,GAC/D,IAGI3tD,EAAOpH,EAHPg1D,EAAU,EACV9zB,EAAMD,EAAIv5B,OACVutD,GAAS,EAMb,IAHa,WAATF,IACFE,GAAS,GAENj1D,EAAI,EAAGA,EAAIkhC,EAAKlhC,IACnBoH,EAAQ65B,EAAIjhC,IACPi1D,GAAU7tD,EAAQ8kD,IACjB+I,GAAU7tD,GAAS8kD,IACvB8I,IAIJ,OAAOA,EAAU9zB,CACnB,EAIA5uB,EAAM4iD,UAAY,SAAmBj0B,EAAKk0B,GACxCA,EAASA,GAAU,EACnB,IAIIn1D,EAJAwb,EAAQlJ,EAAM3D,IAAIsyB,GAClBm0B,GAAY9iD,EAAMyX,IAAIkX,GAAOzlB,GAAS25C,EACtCj0B,EAAMD,EAAIv5B,OACVmwB,EAAO,GAGX,IAAK73B,EAAI,EAAGA,EAAIm1D,EAAQn1D,IACtB63B,EAAK73B,GAAK,EACZ,IAAKA,EAAI,EAAGA,EAAIkhC,EAAKlhC,IACnB63B,EAAKnsB,EAAKiD,IAAIjD,EAAKqB,OAAQk0B,EAAIjhC,GAAKwb,GAAS45C,GAAYD,EAAS,KAAO,EAE3E,OAAOt9B,CACT,EAIAvlB,EAAMokB,WAAa,SAAoB2+B,EAAMC,GAC3C,IAIIt1D,EAJA8V,EAAIxD,EAAMkhB,KAAK6hC,GACf75B,EAAIlpB,EAAMkhB,KAAK8hC,GACfC,EAAUF,EAAK3tD,OACf8tD,EAAS,IAAI1lD,MAAMylD,GAGvB,IAAKv1D,EAAI,EAAGA,EAAIu1D,EAASv1D,IACvBw1D,EAAOx1D,IAAMq1D,EAAKr1D,GAAK8V,IAAMw/C,EAAKt1D,GAAKw7B,GAEzC,OAAOlpB,EAAMjJ,IAAImsD,IAAWD,EAAU,EACxC,EAIAjjD,EAAMyjB,UAAY,SAAmBs/B,EAAMC,GACzC,OAAOhjD,EAAMokB,WAAW2+B,EAAMC,GAC1BhjD,EAAM6mB,MAAMk8B,EAAM,GAClB/iD,EAAM6mB,MAAMm8B,EAAM,EACxB,EAGAhjD,EAAMmjD,cAAiB,SAAUJ,EAAMC,GAIrC,OAHAD,EAAO/iD,EAAM0gD,KAAKqC,GAClBC,EAAOhjD,EAAM0gD,KAAKsC,GAEXhjD,EAAMyjB,UAAUs/B,EAAMC,EAC/B,EAIAhjD,EAAMojD,WAAa,SAAoBz0B,EAAKt4B,GAM1C,IALA,IAAIgtD,EAAKrjD,EAAMkhB,KAAKyN,GAChB/H,EAAQ5mB,EAAM6mB,MAAM8H,GACpBC,EAAMD,EAAIv5B,OACVkuD,EAAU,EAEL51D,EAAI,EAAGA,EAAIkhC,EAAKlhC,IACvB41D,GAAWlqD,EAAKyM,KAAK8oB,EAAIjhC,GAAK21D,GAAMz8B,EAAOvwB,GAE7C,OAAOitD,EAAU30B,EAAIv5B,MACvB,EAGA4K,EAAMujD,SAAW,SAAkB50B,GACjC,OAAO3uB,EAAMojD,WAAWz0B,EAAK,EAC/B,EAGA3uB,EAAMwjD,SAAW,SAAkB70B,GACjC,OAAO3uB,EAAMojD,WAAWz0B,EAAK,GAAK,CACpC,EAGA,IAAI0wB,EAASr/C,EAAMkgB,WAQnB,SAAUo/B,GACR,IAAK,IAAI5xD,EAAI,EAAGA,EAAI4xD,EAAMlqD,OAAQ1H,KAAK,SAAU6xD,GAG/CF,EAAOE,GAAY,SAASkE,EAAUxvB,GACpC,IAAItF,EAAM,GACNjhC,EAAI,EACJg2D,EAAU3mD,KAOd,GALIy/C,EAAWiH,KACbxvB,EAAOwvB,EACPA,GAAW,GAGTxvB,EAIF,OAHAurB,YAAW,WACTvrB,EAAK7T,KAAKsjC,EAASrE,EAAOE,GAAUn/B,KAAKsjC,EAASD,GACpD,IACO1mD,KAGT,GAAIA,KAAK3H,OAAS,EAAG,CAEnB,IADAsuD,GAAuB,IAAbD,EAAoB1mD,KAAOA,KAAKoX,YACnCzmB,EAAIg2D,EAAQtuD,OAAQ1H,IACzBihC,EAAIjhC,GAAKsS,EAAMu/C,GAAUmE,EAAQh2D,IACnC,OAAOihC,CACT,CAEA,OAAO3uB,EAAMu/C,GAAUxiD,KAAK,GAAI0mD,EAClC,CACD,CA7BsC,CA6BpCnE,EAAM5xD,GACV,CA/BD,CA+BI,iBAAkB6P,MAAM,MAI5B,SAAU+hD,GACR,IAAK,IAAI5xD,EAAI,EAAGA,EAAI4xD,EAAMlqD,OAAQ1H,KAAK,SAAU6xD,GAG/CF,EAAOE,GAAY,SAASkE,EAAUxvB,GACpC,IAAItF,EAAM,GACNjhC,EAAI,EACJg2D,EAAU3mD,KAOd,GALIy/C,EAAWiH,KACbxvB,EAAOwvB,EACPA,GAAW,GAGTxvB,EAIF,OAHAurB,YAAW,WACTvrB,EAAK7T,KAAKsjC,EAASrE,EAAOE,GAAUn/B,KAAKsjC,EAASD,GACpD,IACO1mD,KAGT,GAAIA,KAAK3H,OAAS,EAAG,CAGnB,IAFiB,WAAbmqD,IACFmE,GAAuB,IAAbD,EAAoB1mD,KAAOA,KAAKoX,aACrCzmB,EAAIg2D,EAAQtuD,OAAQ1H,IACzBihC,EAAIjhC,GAAKsS,EAAMu/C,GAAUmE,EAAQh2D,IACnC,OAAoB,IAAb+1D,EACDzjD,EAAMu/C,GAAUv/C,EAAM/S,MAAMyvD,SAAS/tB,IACrCA,CACR,CAEA,OAAO3uB,EAAMu/C,GAAUxiD,KAAK,GAAI0mD,EAClC,CACD,CAhCsC,CAgCpCnE,EAAM5xD,GACV,CAlCD,CAkCG,+LAE0D6P,MAAM,MAKnE,SAAU+hD,GACR,IAAK,IAAI5xD,EAAI,EAAGA,EAAI4xD,EAAMlqD,OAAQ1H,KAAK,SAAU6xD,GAC/CF,EAAOE,GAAY,WACjB,IAIIoE,EAJAh1B,EAAM,GACNjhC,EAAI,EACJg2D,EAAU3mD,KACVwL,EAAO/K,MAAM0iB,UAAUC,MAAMC,KAAKvY,WAKtC,GAAI20C,EAAWj0C,EAAKA,EAAKnT,OAAS,IAAK,CACrCuuD,EAAmBp7C,EAAKA,EAAKnT,OAAS,GACtC,IAAIwuD,EAAar7C,EAAK4X,MAAM,EAAG5X,EAAKnT,OAAS,GAM7C,OAJAoqD,YAAW,WACTmE,EAAiBvjC,KAAKsjC,EACArE,EAAOE,GAAUrhC,MAAMwlC,EAASE,GACxD,IACO7mD,IAGT,CACE4mD,OAAmBprD,EACnB,IAAIsrD,EAAkB,SAAyBC,GAC7C,OAAO9jD,EAAMu/C,GAAUrhC,MAAMwlC,EAAS,CAACI,GAAQ3tD,OAAOoS,GACxD,EAIF,GAAIxL,KAAK3H,OAAS,EAAG,CAEnB,IADAsuD,EAAUA,EAAQvvC,YACXzmB,EAAIg2D,EAAQtuD,OAAQ1H,IACzBihC,EAAIjhC,GAAKm2D,EAAgBH,EAAQh2D,IACnC,OAAOihC,CACT,CAGA,OAAOk1B,EAAgB9mD,KAAK,GAC9B,CACD,CAvCsC,CAuCpCuiD,EAAM5xD,GACV,CAzCD,CAyCG,8BAA8B6P,MAAM,KAEtC,CAnjBA,CAmjBCyC,EAAO5G,MAER,SAAS4G,EAAO5G,GAGjB4G,EAAM0lB,QAAU,SAAiBplB,GAC/B,IAMIqoC,EAAIhlC,EAAGgf,EANPjtB,EAAI,EACJquD,EAAM,CACR,mBAAoB,kBAAmB,mBACtC,kBAAmB,qBAAwB,mBAE1CC,EAAM,kBAIV,IAFArhC,GAAOhf,EAAIglC,EAAKroC,GAAK,IACrBqiB,IAAQgmB,EAAK,IAAOvvC,EAAKmO,IAAIob,GACtBjtB,EAAI,EAAGA,IACZsuD,GAAOD,EAAIruD,KAAOiO,EACpB,OAAOvK,EAAKmO,IAAI,mBAAqBy8C,EAAMrb,GAAMhmB,CACnD,EAOA3iB,EAAMikD,OAAS,SAAgB3jD,GAC7B,IAAI4jD,EAAIr/B,EAAIs/B,EAAIC,EAAIC,EAChB/uD,EAAGe,EAEHoN,EAAI,CAAC,oBAAwB,oBACzB,sBAAwB,qBACxB,sBAAwB,oBACxB,oBAAwB,mBACxB,mBAAwB,iBAGhC,GAFAygD,EAAK5jD,EACLjK,EAAI,EACM,GAALiK,GAAmB,GAALA,EACf,OAAO,EASX,IAPIA,GAAK,IAEL4jD,EAAK5jD,GADLjK,EAAI+C,EAAKqB,MAAM,EAAI6F,KAGvBukB,EAAK,GAAOq/B,EAAKA,GACjBC,EAAK,EAAI/qD,EAAKgN,GACdi+C,EAAM5gD,EAAE,GACHnO,EAAI,EAAGA,GAAK,EAAGA,IAChB+uD,GAAOx/B,EACPw/B,GAAO5gD,EAAEnO,GAGb,GADA8uD,EAAKC,EAAMH,EAAK,GAAM9qD,EAAKmO,IAAI48C,IAAOD,EAAK,IAAO9qD,EAAKmO,IAAI28C,GAAMA,EAC7D5jD,GAAK,EACL,IAAKhL,EAAI,EAAGA,GAAKe,EAAGf,IAChB8uD,GAAMhrD,EAAKmO,IAAI28C,EAAK,GACpBA,GAAM,EAGd,OAAOE,CACT,EAGApkD,EAAMwlB,QAAU,SAAiBllB,GAC/B,IAYI5S,EAAGgW,EAAG4gD,EAAIznB,EAZVhnC,EAAI,EAAE,kBAAmB,mBAAoB,mBACxC,kBAAmB,mBAAoB,oBACtC,mBAAoB,mBAE1B0uD,EAAI,EAAE,iBAAkB,oBAAqB,oBACvC,kBAAmB,kBAAoB,mBACvC,mBAAoB,mBAC1BC,GAAO,EACPnuD,EAAI,EACJouD,EAAO,EACPC,EAAO,EACP/gD,EAAIrD,EAER,GAAIA,EAAI,kBACN,OAAO4nC,IAET,GAAIvkC,GAAK,EAAG,CAEV,KADAk5B,EAAMl5B,EAAI,EAAI,QAKZ,OAAOukC,IAHPsc,GAAc,EAAJ7gD,GAAc,EAAL,GAAUvK,EAAKgN,GAAKhN,EAAKsN,IAAItN,EAAKgN,GAAKy2B,GAC1Dl5B,EAAI,EAAIA,CAIZ,CAOA,IANA2gD,EAAK3gD,EAEHD,EADEC,EAAI,EACFA,KAECA,GAAKtN,GAAS,EAAJsN,GAAS,GAAK,EAE1BjW,EAAI,EAAGA,EAAI,IAAKA,EACnBg3D,GAAQA,EAAO7uD,EAAEnI,IAAMgW,EACvB+gD,EAAOA,EAAO/gD,EAAI6gD,EAAE72D,GAGtB,GADAmvC,EAAM6nB,EAAOD,EAAO,EAChBH,EAAK3gD,EACPk5B,GAAOynB,OACF,GAAIA,EAAK3gD,EACd,IAAKjW,EAAI,EAAGA,EAAI2I,IAAK3I,EACnBmvC,GAAOl5B,EACPA,IAMJ,OAHI6gD,IACF3nB,EAAM2nB,EAAO3nB,GAERA,CACT,EAKA78B,EAAM2kD,OAAS,SAAgBlhD,EAAGnD,GAChC,OAAON,EAAM4kD,YAAYnhD,EAAGnD,GAAKN,EAAMwlB,QAAQ/hB,EACjD,EAIAzD,EAAM4kD,YAAc,SAAqBnhD,EAAGnD,GAC1C,IAWIukD,EAXAC,EAAM9kD,EAAM0lB,QAAQjiB,GACpBshD,EAAKthD,EACL1M,EAAM,EAAI0M,EACVuhD,EAAMjuD,EACNkQ,EAAI3G,EAAI,EAAImD,EACZ5W,EAAI,EAAI,MACRgR,EAAI,EAAIoJ,EACRxJ,EAAII,EACJnQ,EAAI,EAEJu3D,KAA4C,IAAjC7rD,EAAKmO,IAAK9D,GAAK,EAAKA,EAAI,EAAIA,GAAe,GAAJA,EAAU,IAGhE,GAAInD,EAAI,GAAKmD,GAAK,EAChB,OAAO0kC,IACF,GAAI7nC,EAAImD,EAAI,EAAG,CACpB,KAAO/V,GAAKu3D,EAAOv3D,IACjBqJ,GAAOiuD,GAAO1kD,IAAMykD,EAEtB,OAAQhuD,EAAMqC,EAAKqN,KAAKnG,EAAImD,EAAIrK,EAAKmO,IAAIjH,GAAMwkD,EACjD,CAEA,KAAOp3D,GAAKu3D,EAAOv3D,IAMjB+P,IADAI,EAAI,GAFJA,GAFAgnD,GAAMn3D,GAAKA,EAAI+V,IAEN5F,GADToJ,GAAK,MAELpa,EAAIoa,EAAI49C,EAAKh4D,GAKf,OAAQ,EAAI4Q,EAAIrE,EAAKqN,KAAKnG,EAAImD,EAAIrK,EAAKmO,IAAIjH,GAAMwkD,EACnD,EAGA9kD,EAAMklD,YAAc,SAAqB7uD,GACvC,OAAOA,EAAI,EAAI8xC,IAAMnoC,EAAM0lB,QAAQrvB,EAAI,EACzC,EAGA2J,EAAMmlD,UAAY,SAAmB9uD,GACnC,OAAOA,EAAI,EAAI8xC,IAAMnoC,EAAMwlB,QAAQnvB,EAAI,EACzC,EAGA2J,EAAMolD,YAAc,SAAqB/uD,EAAGkN,GAE1C,OAAQlN,EAAI,KAAOkN,EAAI,IACjBnK,EAAKqN,IAAIzG,EAAMqlD,cAAchvD,EAAGkN,IAC/BvD,EAAMmlD,UAAU9uD,GAAK2J,EAAMmlD,UAAU5hD,GAAMvD,EAAMmlD,UAAU9uD,EAAIkN,EACxE,EAGAvD,EAAMqlD,cAAgB,SAAuBhvD,EAAGkN,GAC9C,OAAOvD,EAAMklD,YAAY7uD,GAAK2J,EAAMklD,YAAY3hD,GAAKvD,EAAMklD,YAAY7uD,EAAIkN,EAC7E,EAIAvD,EAAMslD,YAAc,SAAqBjvD,EAAGkN,GAC1C,OAAOvD,EAAMmlD,UAAU9uD,GAAK2J,EAAMmlD,UAAU9uD,EAAIkN,EAClD,EAIAvD,EAAMulD,OAAS,SAAgBjlD,EAAGqD,GAEhC,KAAIrD,GAAK,GAAKqD,GAAK,GAGnB,OAAQrD,EAAIqD,EAAI,IACVvK,EAAKqN,IAAIzG,EAAMwlD,OAAOllD,EAAGqD,IACzB3D,EAAMwlB,QAAQllB,GAAKN,EAAMwlB,QAAQ7hB,GAAK3D,EAAMwlB,QAAQllB,EAAIqD,EAChE,EAIA3D,EAAMwlD,OAAS,SAAgBllD,EAAGqD,GAChC,OAAO3D,EAAM0lB,QAAQplB,GAAKN,EAAM0lB,QAAQ/hB,GAAK3D,EAAM0lB,QAAQplB,EAAIqD,EACjE,EAKA3D,EAAMylD,OAAS,SAAgBnlD,EAAGmD,EAAGwD,GACnC,IAOI6hB,EAAI48B,EAAIV,EAAKvnD,EAPbkoD,EAAQ,MACRpiD,EAAI,EACJqiD,EAAMniD,EAAIwD,EACV4+C,EAAMpiD,EAAI,EACVqiD,EAAMriD,EAAI,EACV5W,EAAI,EACJgR,EAAI,EAAI+nD,EAAMtlD,EAAIulD,EAStB,IALIzsD,EAAK6F,IAAIpB,GAAK8nD,IAChB9nD,EAAI8nD,GAENloD,EADAI,EAAI,EAAIA,EAGD0F,GAAK,MAIV1F,EAAI,GAFJ6nD,EAAKniD,GAAK0D,EAAI1D,GAAKjD,IAAMwlD,GADzBh9B,EAAK,EAAIvlB,KAC6BE,EAAIqlB,KAE7BjrB,EACTzE,EAAK6F,IAAIpB,GAAK8nD,IAChB9nD,EAAI8nD,GACN94D,EAAI,EAAI64D,EAAK74D,EACTuM,EAAK6F,IAAIpS,GAAK84D,IAChB94D,EAAI84D,GAENloD,IADAI,EAAI,EAAIA,GACChR,EAGTgR,EAAI,GAFJ6nD,IAAOjiD,EAAIF,IAAMqiD,EAAMriD,GAAKjD,IAAMmD,EAAIqlB,IAAO+8B,EAAM/8B,KAEtCjrB,EACTzE,EAAK6F,IAAIpB,GAAK8nD,IAChB9nD,EAAI8nD,GACN94D,EAAI,EAAI64D,EAAK74D,EACTuM,EAAK6F,IAAIpS,GAAK84D,IAChB94D,EAAI84D,GAGNloD,GADAunD,GADAnnD,EAAI,EAAIA,GACEhR,IAENuM,EAAK6F,IAAI+lD,EAAM,GAAO,OAvBXzhD,KA2BjB,OAAO9F,CACT,EAIAuC,EAAM+lD,UAAY,SAAmBlwD,EAAG4N,GACtC,IAIInD,EAAQqH,EAAGnE,EAAGwiD,EAAIC,EAAMC,EAJxBxwD,EAAI,EACJ+yC,EAAKhlC,EAAI,EACT0iD,EAAM,KACNC,EAAMpmD,EAAM0lB,QAAQjiB,GAGxB,GAAI5N,GAAK,EACP,OAAOuD,EAAKqe,IAAI,IAAKhU,EAAI,IAAMrK,EAAKwM,KAAKnC,IAC3C,GAAI5N,GAAK,EACP,OAAO,EAmBT,IAlBI4N,EAAI,GACNwiD,EAAO7sD,EAAKmO,IAAIkhC,GAChByd,EAAO9sD,EAAKqN,IAAIgiC,GAAMwd,EAAO,GAAKG,GAClCJ,EAAMnwD,EAAI,GAAOA,EAAI,EAAIA,EAEzByK,GAAK,QAAc,QADnBqH,EAAIvO,EAAKwM,MAAM,EAAIxM,EAAKmO,IAAIy+C,OACG,EAAIr+C,GAAK,OAAc,OAAJA,IAAgBA,EAC9D9R,EAAI,KACNyK,GAAKA,GACPA,EAAIlH,EAAKqe,IAAI,KACAhU,EAAIrK,EAAKyM,IAAI,EAAI,GAAK,EAAIpC,GAAKnD,GAAK,EAAIlH,EAAKwM,KAAKnC,IAAK,KAIlEnD,EADEzK,GADJ8R,EAAI,EAAIlE,GAAK,KAAY,IAAJA,IAEfrK,EAAKyM,IAAIhQ,EAAI8R,EAAG,EAAIlE,GAEpB,EAAIrK,EAAKmO,IAAI,GAAK1R,EAAI8R,IAAM,EAAIA,IAGlCjS,EAAI,GAAIA,IAAK,CACjB,GAAI4K,GAAK,EACP,OAAO,EAUT,IAHAA,GAAMqH,GADNnE,GALMxD,EAAM4kD,YAAYnhD,EAAGnD,GAAKzK,IAE9B8R,EADElE,EAAI,EACFyiD,EAAO9sD,EAAKqN,MAAMnG,EAAImoC,GAAMA,GAAMrvC,EAAKmO,IAAIjH,GAAK2lD,IAEhD7sD,EAAKqN,KAAKnG,EAAImoC,EAAKrvC,EAAKmO,IAAIjH,GAAK8lD,MAExB,EAAI,GAAMhtD,EAAKiD,IAAI,EAAGmH,IAAMC,EAAI,GAAKnD,EAAI,OAC/C,IACPA,EAAI,IAAOA,EAAIqH,IACbvO,EAAK6F,IAAI0I,GAAKw+C,EAAM7lD,EACtB,KACJ,CAEA,OAAOA,CACT,EAIAN,EAAM8E,IAAM,SAAaxE,GACvB,IAcIqH,EAAG0+C,EAAI1jC,EAAKka,EAdZknB,EAAM,EAAE,mBAAoB,kBAAuB,qBAC3C,oBAAuB,oBAAqB,oBAC7C,oBAAqB,oBAAqB,kBAC1C,iBAAmB,iBAAkB,gBACrC,eAAgB,gBAAiB,gBAChC,eAAgB,aAAe,aAC/B,YAAc,WAAa,YAC3B,WAAa,QAAU,UACvB,UAAY,OAAS,SACrB,QACRruD,EAAIquD,EAAI3uD,OAAS,EACjBkxD,GAAQ,EACRzoD,EAAI,EACJ0oD,EAAK,EAWT,IARIjmD,EAAI,IACNA,GAAKA,EACLgmD,GAAQ,GAIVD,EAAK,GADL1+C,EAAI,GAAK,EAAIrH,IACA,EAEP5K,EAAI,EAAGA,IACXitB,EAAM9kB,EACNA,EAAIwoD,EAAKxoD,EAAI0oD,EAAKxC,EAAIruD,GACtB6wD,EAAK5jC,EAIP,OADAka,EAAMl1B,EAAIvO,EAAKqN,KAAKnG,EAAIA,EAAI,IAAOyjD,EAAI,GAAKsC,EAAKxoD,GAAK0oD,GAC/CD,EAAQzpB,EAAM,EAAI,EAAIA,CAC/B,EAIA78B,EAAM+E,KAAO,SAAczE,GACzB,OAAO,EAAIN,EAAM8E,IAAIxE,EACvB,EAIAN,EAAMwmD,QAAU,SAAiB3wD,GAC/B,IACIyK,EAAG+1B,EAAK1uB,EAAGq+C,EADXtwD,EAAI,EAER,GAAIG,GAAK,EACP,OAAQ,IACV,GAAIA,GAAK,EACP,OAAO,IAKT,IAJAmwD,EAAMnwD,EAAI,EAAKA,EAAI,EAAIA,EAEvByK,GAAK,SAAY,QAAc,QAD/BqH,EAAIvO,EAAKwM,MAAM,EAAIxM,EAAKmO,IAAIy+C,EAAK,OAEhB,EAAIr+C,GAAK,OAAc,OAAJA,IAAgBA,GAC7CjS,EAAI,EAAGA,IAEZ4K,IADA+1B,EAAMr2B,EAAM+E,KAAKzE,GAAK0lD,IACV,mBAAsB5sD,EAAKqN,KAAKnG,EAAIA,GAAKA,EAAI+1B,GAE3D,OAAQxgC,EAAI,EAAKyK,GAAKA,CACxB,EAIAN,EAAMymD,SAAW,SAAkB5wD,EAAG4N,EAAGwD,GACvC,IAIIy/C,EAAKC,EAAKX,EAAIr+C,EAAGnE,EAAQlD,EAAGsmD,EAAInpD,EAAGyvC,EAAGgZ,EAJtCC,EAAM,KACN1d,EAAKhlC,EAAI,EACTojD,EAAK5/C,EAAI,EACTvR,EAAI,EAER,GAAIG,GAAK,EACP,OAAO,EACT,GAAIA,GAAK,EACP,OAAO,EAwBT,IAvBI4N,GAAK,GAAKwD,GAAK,GACjB++C,EAAMnwD,EAAI,GAAOA,EAAI,EAAIA,EAEzByK,GAAK,QAAc,QADnBqH,EAAIvO,EAAKwM,MAAM,EAAIxM,EAAKmO,IAAIy+C,OACG,EAAIr+C,GAAI,OAAc,OAAJA,IAAgBA,EAC7D9R,EAAI,KACNyK,GAAKA,GACPsmD,GAAMtmD,EAAIA,EAAI,GAAK,EACnB7C,EAAI,GAAK,GAAK,EAAIgG,EAAI,GAAM,GAAK,EAAIwD,EAAI,IACzCimC,EAAK5sC,EAAIlH,EAAKwM,KAAKghD,EAAKnpD,GAAKA,GAAM,GAAK,EAAIwJ,EAAI,GAAK,GAAK,EAAIxD,EAAI,KAC7DmjD,EAAK,EAAI,EAAI,GAAK,EAAInpD,IAC3B6C,EAAImD,GAAKA,EAAIwD,EAAI7N,EAAKqN,IAAI,EAAIymC,MAE9BwZ,EAAMttD,EAAKmO,IAAI9D,GAAKA,EAAIwD,IACxB0/C,EAAMvtD,EAAKmO,IAAIN,GAAKxD,EAAIwD,IAKtB3G,EADEzK,GAHJ8R,EAAIvO,EAAKqN,IAAIhD,EAAIijD,GAAOjjD,IAExBypC,EAAIvlC,GADJnE,EAAIpK,EAAKqN,IAAIQ,EAAI0/C,GAAO1/C,IAGlB7N,EAAKyM,IAAIpC,EAAIypC,EAAIr3C,EAAG,EAAI4N,GAExB,EAAIrK,EAAKyM,IAAIoB,EAAIimC,GAAK,EAAIr3C,GAAI,EAAIoR,IAE1Ci/C,GAAQlmD,EAAM0lB,QAAQjiB,GAAKzD,EAAM0lB,QAAQze,GAAKjH,EAAM0lB,QAAQjiB,EAAIwD,GAC1DvR,EAAI,GAAIA,IAAK,CACjB,GAAU,IAAN4K,GAAiB,IAANA,EACb,OAAOA,EAST,IALAA,GAAMqH,GADNnE,GAFMxD,EAAM8mD,MAAMxmD,EAAGmD,EAAGwD,GAAKpR,IAC7B8R,EAAIvO,EAAKqN,IAAIgiC,EAAKrvC,EAAKmO,IAAIjH,GAAKumD,EAAKztD,EAAKmO,IAAI,EAAIjH,GAAK4lD,MAExC,EAAI,GAAM9sD,EAAKiD,IAAI,EAAGmH,GAAKilC,EAAKnoC,EAAIumD,GAAM,EAAIvmD,QACpD,IACPA,EAAI,IAAOA,EAAIqH,IACbrH,GAAK,IACPA,EAAI,IAAOA,EAAIqH,EAAI,IACjBvO,EAAK6F,IAAI0I,GAAKw+C,EAAM7lD,GAAK5K,EAAI,EAC/B,KACJ,CACA,OAAO4K,CACT,EAIAN,EAAM8mD,MAAQ,SAAexmD,EAAGmD,EAAGwD,GAEjC,IAAI8/C,EAAY,IAANzmD,GAAiB,IAANA,EAAY,EAC/BlH,EAAKqN,IAAIzG,EAAM0lB,QAAQjiB,EAAIwD,GAAKjH,EAAM0lB,QAAQjiB,GACrCzD,EAAM0lB,QAAQze,GAAKxD,EAAIrK,EAAKmO,IAAIjH,GAAK2G,EACrC7N,EAAKmO,IAAI,EAAIjH,IACxB,QAAIA,EAAI,GAAKA,EAAI,KAEbA,GAAKmD,EAAI,IAAMA,EAAIwD,EAAI,GAElB8/C,EAAK/mD,EAAMylD,OAAOnlD,EAAGmD,EAAGwD,GAAKxD,EAE/B,EAAIsjD,EAAK/mD,EAAMylD,OAAO,EAAInlD,EAAG2G,EAAGxD,GAAKwD,EAC9C,EAKAjH,EAAMgnD,MAAQ,SAAe3wD,EAAGkN,GAC9B,IAAIC,EAAG0lB,EAAG5oB,EAAGqD,EAAG4gD,EAGhB,GAFKhhD,IACHA,EAAIlN,GACFA,EACF,OAAO2J,EAAMi+B,OAAO5nC,EAAGkN,GAAG,WAAa,OAAOvD,EAAMgnD,OAAS,IAC/D,GACExjD,EAAIxD,EAAMi9C,aACV/zB,EAAI,QAAUlpB,EAAMi9C,aAAe,IAGnCsH,GAFAjkD,EAAIkD,EAAI,SAEAlD,GADRqD,EAAIvK,EAAK6F,IAAIiqB,GAAK,UACD,KAAUvlB,EAAI,OAAUrD,SAClCikD,EAAI,SAAYA,EAAI,QAAWr7B,EAAIA,GAAK,EAAI9vB,EAAKmO,IAAI/D,GAAKA,EAAIA,IACvE,OAAO0lB,EAAI1lB,CACb,EAIAxD,EAAMinD,MAAQ,SAAeh1B,EAAO57B,EAAGkN,GACrC,IACIklC,EAAIC,EAAIllC,EAAG0lB,EAAG5oB,EAAG8+C,EADjB8H,EAAQj1B,EAMZ,GAJK1uB,IACHA,EAAIlN,GACD47B,IACHA,EAAQ,GACN57B,EAGF,OAFA+oD,EAAMp/C,EAAMk+C,MAAM7nD,EAAEkN,IAChB06C,OAAM,WAAa,OAAOj+C,EAAMinD,MAAMh1B,EAAQ,IAC3CmtB,EAELntB,EAAQ,IACVA,GAAS,GACXwW,EAAKxW,EAAQ,EAAI,EACjByW,EAAK,EAAItvC,EAAKwM,KAAK,EAAI6iC,GACvB,EAAG,CACD,GAEEvf,EAAI,EAAIwf,GADRpoC,EAAIN,EAAMgnD,eAEJ99B,GAAK,GACbA,GAAIA,EAAIA,EACR1lB,EAAIxD,EAAMi9C,YACZ,OAAQz5C,EAAI,EAAI,KAAQpK,EAAKyM,IAAIvF,EAAG,IAC5BlH,EAAKmO,IAAI/D,GAAK,GAAMlD,EAAEA,EAAImoC,GAAM,EAAIvf,EAAI9vB,EAAKmO,IAAI2hB,KAEzD,GAAI+I,GAASi1B,EACX,OAAOze,EAAKvf,EAEd,GACE1lB,EAAIxD,EAAMi9C,mBACE,IAANz5C,GACR,OAAOpK,EAAKyM,IAAIrC,EAAG,EAAI0jD,GAASze,EAAKvf,CACvC,EAIA,SAAUo2B,GACR,IAAK,IAAI5xD,EAAI,EAAGA,EAAI4xD,EAAMlqD,OAAQ1H,KAAK,SAAU6xD,GAC/Cv/C,EAAMxS,GAAG+xD,GAAY,WACnB,OAAOv/C,EACHA,EAAMonB,IAAIrqB,MAAM,SAASjI,GAAS,OAAOkL,EAAMu/C,GAAUzqD,EAAQ,IACvE,CACD,CALsC,CAKpCwqD,EAAM5xD,GACV,CAPD,CAOG,wCAAwC6P,MAAM,MAGjD,SAAU+hD,GACR,IAAK,IAAI5xD,EAAI,EAAGA,EAAI4xD,EAAMlqD,OAAQ1H,KAAK,SAAU6xD,GAC/Cv/C,EAAMxS,GAAG+xD,GAAY,WACnB,OAAOv/C,EAAMA,EAAMu/C,GAAUrhC,MAAM,KAAMrW,WAC3C,CACD,CAJsC,CAIpCy3C,EAAM5xD,GACV,CAND,CAMG,QAAQ6P,MAAM,KAEhB,CA5fA,CA4fCyC,EAAO5G,MACR,SAAS4G,EAAO5G,GAutBjB,SAAS+tD,EAAO7mD,EAAGmD,EAAGwD,EAAGmgD,GASvB,IARA,IAMIC,EANAC,EAAK,EACLC,EAAK,EACL9e,EAAK,EACLoe,EAAK,EACLW,EAAK,EACL9e,EAAK,EAGFtvC,EAAK6F,KAAKwpC,EAAKC,GAAMD,GAAM2e,GAChC1e,EAAKD,EAGL8e,EAAKV,GAFLQ,IAAO5jD,EAAI+jD,IAAO/jD,EAAIwD,EAAIugD,GAAMlnD,GAAKmD,EAAI,EAAI+jD,IAAO/jD,EAAI,EAAI+jD,EAAK,IAElDD,EAGf9e,GAJA6e,EAAK7e,EAAK4e,EAAKC,IAGfD,GADAG,GAAU,IACCvgD,EAAIugD,GAAMlnD,GAAKmD,EAAI,EAAI+jD,EAAK,IAAM/jD,EAAI,EAAI+jD,IACtC/e,EAEf6e,GADAT,EAAKU,EAAKF,EAAKR,EAEfU,GAAUV,EACVpe,GAAUoe,EACVA,EAAK,EAGP,OAAOpe,EAAKhlC,CACd,CA8bA,SAASgkD,EAAYnnD,GAAK,OAAOA,EAAIlH,EAAK6F,IAAIqB,EAAI,CAwClD,SAASonD,EAAWxa,EAAGya,EAAIC,GACzB,IAAIC,EAAO,GACPC,EAAQ,EAERC,GAAM,GACNC,GAAM,GACNC,EAAK,GACLC,EAAO,EACPC,EAAO,EACPC,EAAS,EACTC,EAAS,EACTC,EAAO,CACT,kBACA,kBACA,kBACA,kBACA,kBACA,mBAEEC,EAAO,CACT,mBACA,mBACA,mBACA,mBACA,kBACA,oBAGEC,EAAW,GAAJtb,EAKX,GAAIsb,GAAQN,EACV,OAAO,EAKT,IAUIO,EAVAC,EAAO,EAAI1oD,EAAM4lB,OAAO7D,IAAIymC,EAAM,EAAG,EAAG,EAAG,GAAK,EAGlDE,EADEA,GAAQtvD,EAAKqN,IAAIuhD,EAAKJ,GACjBxuD,EAAKyM,IAAI6iD,EAAMd,GAEf,EA2BT,IARA,IAAIe,EAAMH,EACNI,GAAQV,EAAKM,IAbfC,EADEvb,EAAIib,EACEC,EAEAC,GAYNQ,EAAMF,EAAMC,EACZE,EAAS,EAITC,EAAMnB,EAAK,EACNoB,EAAK,EAAGA,GAAMP,EAAOO,IAAM,CAQlC,IAPA,IAAIC,EAAQ,EACRxlD,EAAI,IAAOolD,EAAMF,GAIjB1hD,EAAI,IAAO4hD,EAAMF,GAEZO,EAAK,EAAGA,GAAMrB,EAAMqB,IAAM,CACjC,IAAIxzD,EASAyzD,EAAK1lD,EADDwD,GAPJ6gD,EAAQoB,EAELZ,GADL5yD,EAAKmyD,EAAOqB,EAAM,GACN,IAGNZ,GADN5yD,EAAIwzD,GACS,IAQXE,EAAQD,EAAKA,EACjB,GAAIC,EAAQnB,EACV,MAEF,IAMIoB,EANQ,EAAIrpD,EAAM4lB,OAAO7D,IAAIonC,EAAI,EAAG,EAAG,EAAG,GAMxB,GALV,EAAInpD,EAAM4lB,OAAO7D,IAAIonC,EAAIjc,EAAG,EAAG,EAAG,GAKP,GACnCmc,GAAUjwD,EAAKqN,IAAIshD,EAAKgB,KAE1BE,GADAI,EAAUd,EAAK7yD,EAAE,GAAK0D,EAAKqN,KAAM,GAAM2iD,GAAWhwD,EAAKyM,IAAIwjD,EAAQN,GAGvE,CAEAD,GADAG,GAAY,EAAMhiD,EAAK2gD,EAAMxuD,EAAKwM,KAAK,EAAIxM,EAAKgN,IAEhDuiD,EAAME,EACNA,GAAOD,CACT,CAIA,OADAF,GAAQI,IACI1vD,EAAKqN,IAAIshD,EAAKJ,GACjB,GAETe,EAAOtvD,EAAKyM,IAAI6iD,EAAMf,KACV,EACH,EACFe,CACT,CAEA,SAASY,EAAUzzD,EAAGhJ,EAAGq8B,GACvB,IAAIqgC,EAAK,cACLC,EAAK,cACLC,GAAM,EACNC,EAAK,cACLC,GAAM,cACNC,EAAK,cACLC,GAAM,cACNC,EAAK,aACLC,GAAM,iBACNC,EAAK,eACLC,EAAK,MACLC,EAAK,MACLC,EAAK,MACLC,EAAK,MACLC,EAAK,OACLC,EAAO,IAEPC,EAAK,GAAM,GAAM10D,EACjByuD,EAAKlrD,EAAKwM,KAAKxM,EAAKmO,IAAI,GAAOgjD,EAAKA,KACpC5iD,EAAI28C,MAAUA,EAAKyF,EAAKF,GAAMvF,EAAKqF,GAAMrF,EAAKmF,GAAMnF,EAAKiF,OACnDjF,EAAK0F,EAAKF,GAAMxF,EAAKsF,GAAMtF,EAAKoF,GAAMpF,EAAKkF,GACjDtgC,EAAIohC,IAAM3iD,IAAMA,EAAIA,EAAIA,EAAIA,GAAKuhB,EAAI,GACzC,IAAIq7B,EAAI0F,EAAKC,EAAKviD,EAElB,OADIuhB,EAAIohC,IAAM/F,IAAM4F,EAAKjhC,EAAIkhC,EAAKziD,EAAIuhB,GAC/BvhB,GAAK48C,EAAInrD,EAAKmO,IAAI1a,EAAI,GAAOw9D,EACtC,EA52CA,SAAU72B,GACR,IAAK,IAAI9lC,EAAI,EAAGA,EAAI8lC,EAAKp+B,OAAQ1H,KAAK,SAAUumC,GAE9Cj0B,EAAMi0B,GAAQ,SAASlnC,EAAE0W,EAAGwD,EAAGpa,GAC7B,OAAMkQ,gBAAgBhQ,GAEtBgQ,KAAK06C,GAAKh0C,EACV1G,KAAKq7C,GAAKnxC,EACVlK,KAAKytD,GAAK39D,EACHkQ,MAJE,IAAIhQ,EAAE0W,EAAGwD,EAAGpa,EAKvB,EAEAmT,EAAMxS,GAAGymC,GAAQ,SAASxwB,EAAGwD,EAAGpa,GAC9B,IAAI49D,EAAUzqD,EAAMi0B,GAAMxwB,EAAGwD,EAAGpa,GAEhC,OADA49D,EAAQn6C,KAAOvT,KACR0tD,CACT,EAEAzqD,EAAMi0B,GAAM/T,UAAUwqC,OAAS,SAAS/7B,GACtC,IAAIlrB,EAAI1G,KAAK06C,GACTxwC,EAAIlK,KAAKq7C,GACTvrD,EAAIkQ,KAAKytD,GACb,OAAI77B,EACK3uB,EAAMi+C,MAAMtvB,GAAK,WACtB,OAAO3uB,EAAMi0B,GAAMy2B,OAAOjnD,EAAGwD,EAAGpa,EAClC,IAEOmT,EAAMi0B,GAAMy2B,OAAOjnD,EAAGwD,EAAGpa,EACpC,EAEA,SAAU89D,GACR,IAAK,IAAIj9D,EAAI,EAAGA,EAAIi9D,EAAKv1D,OAAQ1H,KAAK,SAAUk9D,GAC9C5qD,EAAMi0B,GAAM/T,UAAU0qC,GAAU,SAAStqD,GACvC,IAAImD,EAAI1G,KAAK06C,GACTxwC,EAAIlK,KAAKq7C,GACTvrD,EAAIkQ,KAAKytD,GAGb,OAFKlqD,GAAW,IAANA,IACRA,EAAIvD,KAAKuT,MACM,kBAANhQ,EACFN,EAAMxS,GAAG45B,IAAIhH,KAAK9f,GAAG,SAASA,GACnC,OAAON,EAAMi0B,GAAM22B,GAAQtqD,EAAGmD,EAAGwD,EAAGpa,EACtC,IAEKmT,EAAMi0B,GAAM22B,GAAQtqD,EAAGmD,EAAGwD,EAAGpa,EACtC,CACD,CAdqC,CAcnC89D,EAAKj9D,GACT,CAhBD,CAgBG,cAAc6P,MAAM,MAEvB,SAAUotD,GACR,IAAK,IAAIj9D,EAAI,EAAGA,EAAIi9D,EAAKv1D,OAAQ1H,KAAK,SAAUk9D,GAC9C5qD,EAAMi0B,GAAM/T,UAAU0qC,GAAU,WAC9B,OAAO5qD,EAAMi0B,GAAM22B,GAAQ7tD,KAAK06C,GAAI16C,KAAKq7C,GAAIr7C,KAAKytD,GACpD,CACD,CAJqC,CAInCG,EAAKj9D,GACT,CAND,CAMG,4BAA4B6P,MAAM,KACtC,CAtDqC,CAsDnCi2B,EAAK9lC,GACT,CAxDD,CAwDG,sMAID6P,MAAM,MAKRyC,EAAM64B,OAAO74B,EAAM2hB,KAAM,CACvBK,IAAK,SAAa1hB,EAAGohB,EAAOC,GAE1B,OAAIrhB,EAAI,GAAKA,EAAI,EACR,EAEI,GAATohB,GAAsB,GAARC,EACT,EAELD,EAAQ,KAAOC,EAAO,IAChBvoB,EAAKyM,IAAIvF,EAAGohB,EAAQ,GAAKtoB,EAAKyM,IAAI,EAAIvF,EAAGqhB,EAAO,GACpD3hB,EAAMulD,OAAO7jC,EAAOC,GAEjBvoB,EAAKqN,KAAKib,EAAQ,GAAKtoB,EAAKmO,IAAIjH,IACtBqhB,EAAO,GAAKvoB,EAAKmO,IAAI,EAAIjH,GAC1BN,EAAMwlD,OAAO9jC,EAAOC,GAExC,EAEAI,IAAK,SAAazhB,EAAGohB,EAAOC,GAC1B,OAAQrhB,EAAI,GAAKA,EAAI,EAAe,GAATA,EAAI,GAASN,EAAM8mD,MAAMxmD,EAAGohB,EAAOC,EAChE,EAEAO,IAAK,SAAa5hB,EAAGohB,EAAOC,GAC1B,OAAO3hB,EAAMymD,SAASnmD,EAAGohB,EAAOC,EAClC,EAEAT,KAAM,SAAcQ,EAAOC,GACzB,OAAOD,GAASA,EAAQC,EAC1B,EAEA0F,OAAQ,SAAgB3F,EAAOC,GAC7B,OAAO3hB,EAAMymD,SAAS,GAAK/kC,EAAOC,EACpC,EAEA/J,KAAM,SAAc8J,EAAOC,GACzB,OAAQD,EAAQ,IAAQA,EAAQC,EAAO,EACzC,EAGA+oC,OAAQ,SAAgBhpC,EAAOC,GAC7B,IAAIne,EAAIxD,EAAMinD,MAAMvlC,GACpB,OAAOle,GAAKA,EAAIxD,EAAMinD,MAAMtlC,GAC9B,EAEAw/B,SAAU,SAAkBz/B,EAAOC,GACjC,OAAQD,EAAQC,GAASvoB,EAAKyM,IAAI6b,EAAQC,EAAM,IAAMD,EAAQC,EAAO,GACvE,IAIF3hB,EAAM64B,OAAO74B,EAAM0kB,SAAU,CAI3B1C,IAAK,SAAa1hB,EAAGuqD,EAAKC,GACxB,IAAIj1D,EAEJ,OAAIyK,EAAI,EACC,EAELuqD,GAAO,EACC,IAANvqD,GAAWuqD,EAAM,EACZ3iB,IAEC,IAAN5nC,GAAmB,IAARuqD,EACN,EAED,EAAI7qD,EAAMulD,OAAOsF,EAAM,EAAGC,EAAM,GAChC1xD,EAAKyM,IAAIglD,EAAMC,EAAKD,EAAM,GAC1BzxD,EAAKyM,IAAIvF,EAAIuqD,EAAI,EAAK,GACtBzxD,EAAKyM,IAAK,EAAKglD,EAAMC,EAAOxqD,IAAMuqD,EAAMC,GAAO,IAGzDj1D,EAAKg1D,EAAMvqD,GAAMwqD,EAAMxqD,EAAIuqD,GAEvBA,GADAC,GAAOA,EAAMxqD,EAAIuqD,IACP,EACH7qD,EAAMqiB,SAASL,KAAK6oC,EAAM,GAAK,GAAIA,EAAMC,EAAM,GAAK,EAAGj1D,GACpE,EAEAksB,IAAK,SAAazhB,EAAGuqD,EAAKC,GACxB,OAAIxqD,EAAI,EACC,EACFN,EAAM8mD,MAAO+D,EAAMvqD,GAAMuqD,EAAMvqD,EAAIwqD,GAAMD,EAAM,EAAGC,EAAM,EACjE,EAEA5oC,IAAK,SAAa5hB,EAAGuqD,EAAKC,GACxB,OAAOA,GAAOD,GAAO,EAAI7qD,EAAMymD,SAASnmD,EAAGuqD,EAAM,EAAGC,EAAM,GAAK,GACjE,EAEA5pC,KAAM,SAAc2pC,EAAKC,GACvB,OAAQA,EAAM,EAAKA,GAAOA,EAAM,QAAKvyD,CACvC,EAEAqf,KAAM,SAAcizC,EAAKC,GACvB,OAAQD,EAAM,EAAMC,GAAOD,EAAM,IAAOA,GAAOC,EAAM,SAAMvyD,CAC7D,EAGAmyD,OAAQ,SAAgBG,EAAKC,GAG3B,OAFgC,EAAvB9qD,EAAMinD,MAAM4D,EAAM,GAEdA,GADmB,EAAvB7qD,EAAMinD,MAAM6D,EAAM,GACDA,EAC5B,EAEA3J,SAAU,SAAkB0J,EAAKC,GAC/B,KAAIA,GAAO,GAEX,OAAO,EAAIA,EAAMA,GAAOD,EAAMC,EAAM,IAC/BD,GAAOC,EAAM,IAAMA,EAAM,IAAMA,EAAM,GAC5C,IAKF9qD,EAAM64B,OAAO74B,EAAM+qD,OAAQ,CACzB/oC,IAAK,SAAa1hB,EAAG0qD,EAAOC,GAC1B,OAAIA,EAAQ,EAAY,EAEhBA,GAAS7xD,EAAKyM,IAAIvF,EAAI0qD,EAAO,GAAK5xD,EAAKyM,IAAIolD,EAAO,IAAO7xD,EAAKgN,EACxE,EAEA2b,IAAK,SAAazhB,EAAG0qD,EAAOC,GAC1B,OAAO7xD,EAAKiN,MAAM/F,EAAI0qD,GAASC,GAAS7xD,EAAKgN,GAAK,EACpD,EAEA8b,IAAK,SAASrsB,EAAGm1D,EAAOC,GACtB,OAAOD,EAAQC,EAAQ7xD,EAAKkf,IAAIlf,EAAKgN,IAAMvQ,EAAI,IACjD,EAEAwxB,OAAQ,SAAgB2jC,GACtB,OAAOA,CACT,EAEApzC,KAAM,SAAcozC,GAClB,OAAOA,CACT,EAEAN,OAAQ,SAAgBM,EAAOC,GAC7B,OAAOjrD,EAAMgnD,QACT5tD,EAAKwM,KAAK,GAAK,EAAI5F,EAAMinD,MAAM,MAASgE,EAAQD,CACtD,IAMFhrD,EAAM64B,OAAO74B,EAAMwiB,UAAW,CAC5BR,IAAK,SAAa1hB,EAAGuiB,GACnB,OAAIviB,EAAI,EACC,EACK,IAANA,GAAmB,IAARuiB,EAAa,GAC5BzpB,EAAKqN,KAAKoc,EAAM,EAAI,GAAKzpB,EAAKmO,IAAIjH,GAAKA,EAAI,EAAKuiB,EAAM,EAC7CzpB,EAAKmO,IAAI,GAAKvH,EAAM0lB,QAAQ7C,EAAM,GACjD,EAEAd,IAAK,SAAazhB,EAAGuiB,GACnB,OAAIviB,EAAI,EACC,EACFN,EAAM4kD,YAAY/hC,EAAM,EAAGviB,EAAI,EACxC,EAEA4hB,IAAK,SAASrsB,EAAGgtB,GACf,OAAO,EAAI7iB,EAAM+lD,UAAUlwD,EAAG,GAAMgtB,EACtC,EAEA3B,KAAO,SAAS2B,GACd,OAAOA,CACT,EAGAwE,OAAQ,SAAgBxE,GACtB,OAAOA,EAAMzpB,EAAKyM,IAAI,EAAK,GAAK,EAAIgd,GAAO,EAC7C,EAEAjL,KAAM,SAAciL,GAClB,OAAQA,EAAM,EAAI,EAAKA,EAAM,EAAI,CACnC,EAEA6nC,OAAQ,SAAgB7nC,GACtB,OAA8B,EAAvB7iB,EAAMinD,MAAMpkC,EAAM,EAC3B,EAEAs+B,SAAU,SAAkBt+B,GAC1B,OAAO,EAAIA,CACb,IAMF7iB,EAAM64B,OAAO74B,EAAMukB,YAAa,CAC9BvC,IAAK,SAAa1hB,EAAG8I,GACnB,OAAO9I,EAAI,EAAI,EAAI8I,EAAOhQ,EAAKqN,KAAK2C,EAAO9I,EAC7C,EAEAyhB,IAAK,SAAazhB,EAAG8I,GACnB,OAAO9I,EAAI,EAAI,EAAI,EAAIlH,EAAKqN,KAAK2C,EAAO9I,EAC1C,EAEA4hB,IAAK,SAASrsB,EAAGuT,GACf,OAAQhQ,EAAKmO,IAAI,EAAI1R,GAAKuT,CAC5B,EAEA8X,KAAO,SAAS9X,GACd,OAAO,EAAIA,CACb,EAEAie,OAAQ,SAAUje,GAChB,OAAQ,EAAIA,EAAQhQ,EAAKmO,IAAI,EAC/B,EAEAqQ,KAAM,WACJ,OAAO,CACT,EAEA8yC,OAAQ,SAAgBthD,GACtB,OAAQ,EAAIA,EAAOhQ,EAAKmO,IAAIvH,EAAMi9C,aACpC,EAEAkE,SAAW,SAAS/3C,GAClB,OAAOhQ,EAAKyM,IAAIuD,GAAO,EACzB,IAMFpJ,EAAM64B,OAAO74B,EAAMylB,MAAO,CACxBzD,IAAK,SAAa1hB,EAAG2xB,EAAOg5B,GAC1B,OAAI3qD,EAAI,EACC,EACK,IAANA,GAAqB,IAAV2xB,EAAe,EAAIg5B,EAC9B7xD,EAAKqN,KAAKwrB,EAAQ,GAAK74B,EAAKmO,IAAIjH,GAAKA,EAAI2qD,EACjCjrD,EAAM0lB,QAAQuM,GAASA,EAAQ74B,EAAKmO,IAAI0jD,GAC1D,EAEAlpC,IAAK,SAAazhB,EAAG2xB,EAAOg5B,GAC1B,OAAI3qD,EAAI,EACC,EACFN,EAAM4kD,YAAY3yB,EAAO3xB,EAAI2qD,EACtC,EAEA/oC,IAAK,SAASrsB,EAAGo8B,EAAOg5B,GACtB,OAAOjrD,EAAM+lD,UAAUlwD,EAAGo8B,GAASg5B,CACrC,EAEA/pC,KAAO,SAAS+Q,EAAOg5B,GACrB,OAAOh5B,EAAQg5B,CACjB,EAEArzC,KAAM,SAAcqa,EAAOg5B,GACzB,GAAGh5B,EAAQ,EAAG,OAAQA,EAAQ,GAAKg5B,CAErC,EAEAP,OAAQ,SAAgBz4B,EAAOg5B,GAC7B,OAAOjrD,EAAMinD,MAAMh1B,GAASg5B,CAC9B,EAEA9J,SAAU,SAAkBlvB,EAAOg5B,GACjC,OAAOh5B,EAAQg5B,EAAQA,CACzB,IAIFjrD,EAAM64B,OAAO74B,EAAMkrD,SAAU,CAC3BlpC,IAAK,SAAa1hB,EAAG2xB,EAAOg5B,GAC1B,OAAI3qD,GAAK,EACA,EACFlH,EAAKqN,MAAMwrB,EAAQ,GAAK74B,EAAKmO,IAAIjH,GAAK2qD,EAAQ3qD,EACrCN,EAAM0lB,QAAQuM,GAASA,EAAQ74B,EAAKmO,IAAI0jD,GAC1D,EAEAlpC,IAAK,SAAazhB,EAAG2xB,EAAOg5B,GAC1B,OAAI3qD,GAAK,EACA,EACF,EAAIN,EAAM4kD,YAAY3yB,EAAOg5B,EAAQ3qD,EAC9C,EAEA4hB,IAAK,SAASrsB,EAAGo8B,EAAOg5B,GACtB,OAAOA,EAAQjrD,EAAM+lD,UAAU,EAAIlwD,EAAGo8B,EACxC,EAEA/Q,KAAO,SAAS+Q,EAAOg5B,GACrB,OAAQh5B,EAAQ,EAAKg5B,GAASh5B,EAAQ,QAAK15B,CAC7C,EAEAqf,KAAM,SAAcqa,EAAOg5B,GACzB,OAAOA,GAASh5B,EAAQ,EAC1B,EAEAy4B,OAAQ,SAAgBz4B,EAAOg5B,GAC7B,OAAOA,EAAQjrD,EAAMinD,MAAMh1B,EAC7B,EAEAkvB,SAAU,SAAkBlvB,EAAOg5B,GACjC,KAAIh5B,GAAS,GAEb,OAAOg5B,EAAQA,IAAUh5B,EAAQ,IAAMA,EAAQ,IAAMA,EAAQ,GAC/D,IAKFjyB,EAAM64B,OAAO74B,EAAMmrD,YAAa,CAC9BnpC,IAAK,SAAa1hB,EAAGohB,EAAOC,GAC1B,OAAU,IAANrhB,GAAqB,IAAVohB,EACNC,EACM,IAANrhB,GAAoB,IAATqhB,EACXD,EACFtoB,EAAKqN,IAAIrN,EAAKmO,IAAIma,GAAStoB,EAAKmO,IAAIoa,IAASD,EAAQ,GAC5CtoB,EAAKmO,IAAIjH,IAAMqhB,EAAO,GACtBvoB,EAAKmO,IAAI,EAAInO,EAAKyM,IAAIvF,EAAGohB,IAC3C,EAEAK,IAAK,SAAazhB,EAAGohB,EAAOC,GAC1B,OAAIrhB,EAAI,EACC,EACAA,EAAI,EACJ,EACD,EAAIlH,EAAKyM,IAAI,EAAIzM,EAAKyM,IAAIvF,EAAGohB,GAAQC,EAC/C,EAEAO,IAAK,SAAarsB,EAAG6rB,EAAOC,GAC1B,OAAOvoB,EAAKyM,IAAI,EAAIzM,EAAKyM,IAAI,EAAIhQ,EAAG,EAAI8rB,GAAO,EAAID,EACrD,EAEAR,KAAO,SAASQ,EAAOC,GACrB,OAAQA,EAAO3hB,EAAMwlB,QAAQ,EAAI,EAAI9D,GAC7B1hB,EAAMwlB,QAAQ7D,GAAU3hB,EAAMwlB,QAAQ,EAAI,EAAI9D,EAAQC,EAChE,EAEA0F,OAAQ,SAAgB3F,EAAOC,GAC7B,OAAOvoB,EAAKyM,IAAI,EAAIzM,EAAKyM,IAAI,GAAI,EAAI8b,GAAO,EAAID,EAClD,EAEA9J,KAAM,SAAc8J,EAAOC,GACzB,GAAMD,GAAS,GAAKC,GAAQ,GAAgB,IAAVD,GAAwB,IAATC,EAEjD,OAAOvoB,EAAKyM,KAAK6b,EAAQ,IAAMA,EAAQC,EAAO,GAAI,EAAID,EACxD,EAEAy/B,SAAU,WACR,MAAM,IAAIjmD,MAAM,+BAElB,IAMF8E,EAAM64B,OAAO74B,EAAMinB,UAAW,CAC5BjF,IAAK,SAAa1hB,EAAG+iD,EAAIz8B,GACvB,OAAItmB,GAAK,EACA,EACFlH,EAAKqN,KAAKrN,EAAKmO,IAAIjH,GAAK,GAAMlH,EAAKmO,IAAI,EAAInO,EAAKgN,IACvChN,EAAKmO,IAAIqf,GAASxtB,EAAKyM,IAAIzM,EAAKmO,IAAIjH,GAAK+iD,EAAI,IAC5C,EAAIz8B,EAAQA,GAC/B,EAEA7E,IAAK,SAAazhB,EAAG+iD,EAAIz8B,GACvB,OAAItmB,EAAI,EACC,EACF,GACF,GAAMN,EAAM8E,KAAK1L,EAAKmO,IAAIjH,GAAK+iD,GAAMjqD,EAAKwM,KAAK,EAAIghB,EAAQA,GAClE,EAEA1E,IAAK,SAASrsB,EAAGwtD,EAAIz8B,GACnB,OAAOxtB,EAAKqN,KAAK,mBAAsBmgB,EAAQ5mB,EAAMwmD,QAAQ,EAAI3wD,GAAKwtD,EACxE,EAEAniC,KAAM,SAAcmiC,EAAIz8B,GACtB,OAAOxtB,EAAKqN,IAAI48C,EAAKz8B,EAAQA,EAAQ,EACvC,EAEAS,OAAQ,SAAgBg8B,GACtB,OAAOjqD,EAAKqN,IAAI48C,EAClB,EAEAzrC,KAAM,SAAcyrC,EAAIz8B,GACtB,OAAOxtB,EAAKqN,IAAI48C,EAAKz8B,EAAQA,EAC/B,EAEA8jC,OAAQ,SAAgBrH,EAAIz8B,GAC1B,OAAOxtB,EAAKqN,IAAIzG,EAAMgnD,QAAUpgC,EAAQy8B,EAC1C,EAEAlC,SAAU,SAAkBkC,EAAIz8B,GAC9B,OAAQxtB,EAAKqN,IAAImgB,EAAQA,GAAS,GAAKxtB,EAAKqN,IAAI,EAAI48C,EAAKz8B,EAAQA,EACnE,IAMF5mB,EAAM64B,OAAO74B,EAAMorD,YAAa,CAC9BppC,IAAK,SAAa1hB,EAAGuiB,EAAKwoC,GACxB,IAAIC,EAAM,MACV,OAAIlyD,EAAK6F,IAAIosD,GAAOC,EACXtrD,EAAM2pB,SAAS3H,IAAI1hB,EAAGuiB,GAE3BzpB,EAAK6F,IAAIqB,GAAKgrD,EACTlyD,EAAKqN,IAAIzG,EAAM0lB,SAAS7C,EAAM,GAAK,GAAKwoC,EAAMA,EAAM,EAC3C,GAAMjyD,EAAKmO,IAAInO,EAAKgN,GAAKyc,GAAO7iB,EAAM0lB,QAAQ7C,EAAM,IAI/DA,EAAMviB,GACRN,EAAMorD,YAAYrpC,IAAIzhB,EAAIlH,EAAKwM,KAAK,EAAI,EAAIid,GAAMA,EAAI,EAAGwoC,GACzDrrD,EAAMorD,YAAYrpC,IAAIzhB,EAAGuiB,EAAKwoC,GACrC,EAEAtpC,IAAK,SAAazhB,EAAGuiB,EAAKwoC,GACxB,IAAIC,EAAM,MACNC,EAAiB,IAErB,GAAInyD,EAAK6F,IAAIosD,GAAOC,EAClB,OAAOtrD,EAAM2pB,SAAS5H,IAAIzhB,EAAGuiB,GAG/B,IAAI2oC,GAAO,EACPlrD,EAAI,IACNkrD,GAAO,EACPH,GAAOA,GAYT,IATA,IAAII,EAAOzrD,EAAM4lB,OAAO7D,KAAKspC,EAAK,EAAG,GACjCv2D,EAAQw2D,EAAM,EAEdI,EAAY52D,EACZ6O,EAAIrD,EAAIA,GAAKA,EAAIA,EAAIuiB,GACrBntB,EAAI,EACJG,EAAIuD,EAAKqN,KAAK4kD,EAAMA,EAAM,GAC1B9G,EAAInrD,EAAKqN,KAAK4kD,EAAMA,EAAM,EAAI,GAAMjyD,EAAKmO,IAAI,GAChCvH,EAAM0lB,QAAQ,MAAU2lC,EAClC31D,EAAI61D,GAAkBG,EAAYJ,GAAOx2D,EAAQw2D,GACtDI,EAAY52D,EACRY,EAAI,IACNG,GAAMw1D,EAAMA,GAAQ,EAAI31D,GACxB6uD,GAAM8G,EAAMA,GAAQ,GAAK31D,EAAI,MAI/B+1D,GAAQ,IAFR32D,EAAQe,EAAImK,EAAM2hB,KAAKI,IAAIpe,EAAGjO,EAAI,GAAKmtB,EAAM,GACzC0hC,EAAIvkD,EAAM2hB,KAAKI,IAAIpe,EAAGjO,EAAE,EAAGmtB,EAAI,IAEnCntB,IAGF,OAAO81D,EAAQ,EAAIC,EAAQA,CAC7B,IAKFzrD,EAAM64B,OAAO74B,EAAM4lB,OAAQ,CACzB5D,IAAK,SAAa1hB,EAAG4gB,EAAMyqC,GACzB,OAAOvyD,EAAKqN,KAAK,GAAMrN,EAAKmO,IAAI,EAAInO,EAAKgN,IACzBhN,EAAKmO,IAAIokD,GAAOvyD,EAAKyM,IAAIvF,EAAI4gB,EAAM,IAAM,EAAIyqC,EAAMA,GACrE,EAEA5pC,IAAK,SAAazhB,EAAG4gB,EAAMyqC,GACzB,MAAO,IAAO,EAAI3rD,EAAM8E,KAAKxE,EAAI4gB,GAAQ9nB,EAAKwM,KAAK,EAAI+lD,EAAMA,IAC/D,EAEAzpC,IAAK,SAASrsB,EAAGqrB,EAAMyqC,GACrB,OAAQ,mBAAsBA,EAAM3rD,EAAMwmD,QAAQ,EAAI3wD,GAAKqrB,CAC7D,EAEAA,KAAO,SAASA,GACd,OAAOA,CACT,EAEAmG,OAAQ,SAAgBnG,GACtB,OAAOA,CACT,EAEAtJ,KAAM,SAAUsJ,GACd,OAAOA,CACT,EAEAwpC,OAAQ,SAAgBxpC,EAAMyqC,GAC5B,OAAO3rD,EAAMgnD,QAAU2E,EAAMzqC,CAC/B,EAEAigC,SAAW,SAASjgC,EAAMyqC,GACxB,OAAOA,EAAMA,CACf,IAMF3rD,EAAM64B,OAAO74B,EAAM4rD,OAAQ,CACzB5pC,IAAK,SAAa1hB,EAAG2qD,EAAOh5B,GAC1B,OAAI3xB,EAAI2qD,EACC,EACDh5B,EAAQ74B,EAAKyM,IAAIolD,EAAOh5B,GAAU74B,EAAKyM,IAAIvF,EAAG2xB,EAAQ,EAChE,EAEAlQ,IAAK,SAAazhB,EAAG2qD,EAAOh5B,GAC1B,OAAI3xB,EAAI2qD,EACC,EACF,EAAI7xD,EAAKyM,IAAIolD,EAAQ3qD,EAAG2xB,EACjC,EAEA/P,IAAK,SAAarsB,EAAGo1D,EAAOh5B,GAC1B,OAAOg5B,EAAQ7xD,EAAKyM,IAAI,EAAIhQ,EAAG,EAAIo8B,EACrC,EAEA/Q,KAAM,SAAc+pC,EAAOh5B,GACzB,KAAIA,GAAS,GAEb,OAAQA,EAAQ74B,EAAKyM,IAAIolD,EAAOh5B,IAAWA,EAAQ,EACrD,EAEA5K,OAAQ,SAAgB4jC,EAAOh5B,GAC7B,OAAOg5B,GAASh5B,EAAQ74B,EAAKojB,MAC/B,EAEA5E,KAAM,SAAcqzC,GAClB,OAAOA,CACT,EAEA9J,SAAW,SAAS8J,EAAOh5B,GACzB,KAAIA,GAAS,GAEb,OAAQg5B,EAAMA,EAAQh5B,GAAU74B,EAAKyM,IAAIosB,EAAQ,EAAG,IAAMA,EAAQ,GACpE,IAMFjyB,EAAM64B,OAAO74B,EAAM2pB,SAAU,CAC3B3H,IAAK,SAAa1hB,EAAGuiB,GAEnB,OADAA,EAAMA,EAAM,MAAQ,MAAQA,EACpB,GAAGzpB,EAAKwM,KAAKid,GAAO7iB,EAAMulD,OAAO,GAAK1iC,EAAI,IAC9CzpB,EAAKyM,IAAI,EAAMvF,EAAIA,EAAKuiB,IAASA,EAAM,GAAK,EAClD,EAEAd,IAAK,SAAazhB,EAAGuiB,GACnB,IAAIgpC,EAAOhpC,EAAM,EACjB,OAAO7iB,EAAM8mD,OAAOxmD,EAAIlH,EAAKwM,KAAKtF,EAAIA,EAAIuiB,KACtB,EAAIzpB,EAAKwM,KAAKtF,EAAIA,EAAIuiB,IAAOgpC,EAAMA,EACzD,EAEA3pC,IAAK,SAASrsB,EAAGgtB,GACf,IAAIviB,EAAIN,EAAMymD,SAAS,EAAIrtD,EAAKiD,IAAIxG,EAAG,EAAIA,GAAI,GAAMgtB,EAAK,IAE1D,OADAviB,EAAIlH,EAAKwM,KAAKid,GAAO,EAAIviB,GAAKA,GACtBzK,EAAI,GAAOyK,GAAKA,CAC1B,EAEA4gB,KAAM,SAAc2B,GAClB,OAAQA,EAAM,EAAK,OAAItqB,CACzB,EAEA8uB,OAAQ,WACN,OAAO,CACT,EAEAzP,KAAM,WACJ,OAAO,CACT,EAEA8yC,OAAQ,SAAgB7nC,GACtB,OAAO7iB,EAAMgnD,QAAU5tD,EAAKwM,KAAKid,GAAO,EAAI7iB,EAAMinD,MAAMpkC,EAAM,IAChE,EAEAs+B,SAAU,SAAkBt+B,GAC1B,OAAQA,EAAO,EAAKA,GAAOA,EAAM,GAAMA,EAAM,EAAKqlB,SAAW3vC,CAC/D,IAMFyH,EAAM64B,OAAO74B,EAAM8rD,QAAS,CAC1B9pC,IAAK,SAAa1hB,EAAG2qD,EAAOh5B,GAC1B,OAAI3xB,EAAI,GAAK2qD,EAAQ,GAAKh5B,EAAQ,EACzB,EACDA,EAAQg5B,EAAS7xD,EAAKyM,IAAKvF,EAAI2qD,EAASh5B,EAAQ,GACpD74B,EAAKqN,KAAMrN,EAAKyM,IAAKvF,EAAI2qD,EAAQh5B,GACvC,EAEAlQ,IAAK,SAAazhB,EAAG2qD,EAAOh5B,GAC1B,OAAO3xB,EAAI,EAAI,EAAI,EAAIlH,EAAKqN,KAAKrN,EAAKyM,IAAKvF,EAAI2qD,EAAQh5B,GACzD,EAEA/P,IAAK,SAASrsB,EAAGo1D,EAAOh5B,GACtB,OAAOg5B,EAAQ7xD,EAAKyM,KAAKzM,EAAKmO,IAAI,EAAI1R,GAAI,EAAIo8B,EAChD,EAEA/Q,KAAO,SAAS+pC,EAAOh5B,GACrB,OAAOg5B,EAAQjrD,EAAMwlB,QAAQ,EAAI,EAAIyM,EACvC,EAEA5K,OAAQ,SAAgB4jC,EAAOh5B,GAC7B,OAAOg5B,EAAQ7xD,EAAKyM,IAAIzM,EAAKmO,IAAI,GAAI,EAAI0qB,EAC3C,EAEAra,KAAM,SAAcqzC,EAAOh5B,GACzB,OAAIA,GAAS,EACJ,EACFg5B,EAAQ7xD,EAAKyM,KAAKosB,EAAQ,GAAKA,EAAO,EAAIA,EACnD,EAEAy4B,OAAQ,SAAgBO,EAAOh5B,GAC7B,OAAOg5B,EAAQ7xD,EAAKyM,KAAKzM,EAAKmO,IAAIvH,EAAMi9C,cAAe,EAAIhrB,EAC7D,EAEAkvB,SAAU,SAAkB8J,EAAOh5B,GACjC,OAAOg5B,EAAQA,EAAQjrD,EAAMwlB,QAAQ,EAAI,EAAIyM,GACzC74B,EAAKyM,IAAI7F,EAAM8rD,QAAQ5qC,KAAK+pC,EAAOh5B,GAAQ,EACjD,IAMFjyB,EAAM64B,OAAO74B,EAAM+rD,QAAS,CAC1B/pC,IAAK,SAAa1hB,EAAGmD,EAAGwD,GACtB,OAAQ3G,EAAImD,GAAKnD,EAAI2G,EAAK,EAAI,GAAKA,EAAIxD,EACzC,EAEAse,IAAK,SAAazhB,EAAGmD,EAAGwD,GACtB,OAAI3G,EAAImD,EACC,EACAnD,EAAI2G,GACH3G,EAAImD,IAAMwD,EAAIxD,GACjB,CACT,EAEAye,IAAK,SAASrsB,EAAG4N,EAAGwD,GAClB,OAAOxD,EAAK5N,GAAKoR,EAAIxD,EACvB,EAEAyd,KAAM,SAAczd,EAAGwD,GACrB,MAAO,IAAOxD,EAAIwD,EACpB,EAEAogB,OAAQ,SAAgB5jB,EAAGwD,GACzB,OAAOjH,EAAMkhB,KAAKzd,EAAGwD,EACvB,EAEA2Q,KAAM,WACJ,MAAM,IAAI1c,MAAM,8BAClB,EAEAwvD,OAAQ,SAAgBjnD,EAAGwD,GACzB,OAAQxD,EAAI,EAAIwD,EAAI,GAAMA,EAAI,EAAIxD,EAAI,IAAM,EAAIzD,EAAMi9C,aAAe,EACvE,EAEAkE,SAAU,SAAkB19C,EAAGwD,GAC7B,OAAO7N,EAAKyM,IAAIoB,EAAIxD,EAAG,GAAK,EAC9B,IAkCFzD,EAAM64B,OAAO74B,EAAMqiB,SAAU,CAC3BL,IAAK,SAAa1sB,EAAGe,EAAGR,GACtB,OAAc,IAANA,GAAiB,IAANA,EACfQ,EAAIR,IAAOP,EAAI,EAAI,EACrB0K,EAAMolD,YAAY/uD,EAAGf,GAAK8D,EAAKyM,IAAIhQ,EAAGP,GAAK8D,EAAKyM,IAAI,EAAIhQ,EAAGQ,EAAIf,EACnE,EAEAysB,IAAK,SAAazhB,EAAGjK,EAAGR,GACtB,IAAIm2D,EACA5E,EAAM,MAEV,GAAI9mD,EAAI,EACN,OAAO,EACT,GAAIA,GAAKjK,EACP,OAAO,EACT,GAAIR,EAAI,GAAKA,EAAI,GAAKQ,GAAK,EACzB,OAAO8xC,IAGT,IAAIzkC,EAAI7N,EACJ4N,GAFJnD,EAAIlH,EAAKqB,MAAM6F,IAEH,EACR2G,EAAI5Q,EAAIiK,EACR4H,EAAIzE,EAAIwD,EACR8/C,EAAK3tD,EAAKqN,IAAIzG,EAAM0lB,QAAQxd,GAAKlI,EAAM0lB,QAAQze,GACjCjH,EAAM0lB,QAAQjiB,GAAKA,EAAIrK,EAAKmO,IAAI7D,GAAKuD,EAAI7N,EAAKmO,IAAI,EAAI7D,IAOxE,OAJEsoD,EADEtoD,GAAKD,EAAI,IAAMyE,EAAI,GACX6+C,EAAKI,EAAOzjD,EAAGD,EAAGwD,EAAGmgD,GAErB,EAAIL,EAAKI,EAAO,EAAIzjD,EAAGuD,EAAGxD,EAAG2jD,GAElChuD,EAAKuE,MAAuB,EAAIypD,GAApB,EAAI4E,KAAyB,EAAI5E,EACtD,IAMFpnD,EAAM64B,OAAO74B,EAAMynB,OAAQ,CACzBzF,IAAK,SAAa1sB,EAAGuX,EAAGhX,GACtB,OAAIP,IAAMA,IAAM,IAEZA,EAAI,EACC,EACF0K,EAAMolD,YAAY9vD,EAAIuX,EAAI,EAAGA,EAAI,GACpCzT,EAAKyM,IAAI,EAAIhQ,EAAGP,GAAK8D,EAAKyM,IAAIhQ,EAAGgX,GACvC,EAEAkV,IAAK,SAAazhB,EAAGuM,EAAGhX,GACtB,IAAIkB,EAAM,EACVzB,EAAI,EACJ,GAAIgL,EAAI,EAAG,OAAO,EAClB,KAAOhL,GAAKgL,EAAGhL,IACbyB,GAAOiJ,EAAMynB,OAAOzF,IAAI1sB,EAAGuX,EAAGhX,GAEhC,OAAOkB,CACT,IAMFiJ,EAAM64B,OAAO74B,EAAMisD,QAAS,CAC1BjqC,IAAK,SAAa1sB,EAAGgc,EAAG/N,EAAGlN,GAUzB,GAAGf,IAAMA,EAAI,EACX,OAAO,EACF,GAAGA,EAAI,GAAKA,EAAIiO,GAAK+N,EAAIjb,GAE9B,OAAO,EACF,GAAGf,EAAIe,GAAKf,EAAIiO,EAErB,OAAO,EACF,GAAQ,EAAJA,EAAQ+N,EAGjB,OAAO,EAAJjb,EAAQib,EAGFtR,EAAMisD,QAAQjqC,IAAI1Q,EAAI/N,EAAIlN,EAAIf,EAAGgc,EAAGA,EAAI/N,EAAG+N,EAAIjb,GAI/C2J,EAAMisD,QAAQjqC,IAAI3rB,EAAIf,EAAGgc,EAAGA,EAAI/N,EAAGlN,GAGvC,GAAO,EAAJA,EAAQib,EAGhB,OAAOtR,EAAMisD,QAAQjqC,IAAIze,EAAIjO,EAAGgc,EAAG/N,EAAG+N,EAAIjb,GAErC,GAAGkN,EAAIlN,EAGZ,OAAO2J,EAAMisD,QAAQjqC,IAAI1sB,EAAGgc,EAAGjb,EAAGkN,GAkBlC,IALA,IAAI2oD,EAAY,EAGZC,EAAc,EAEVz+D,EAAI,EAAGA,EAAI4H,EAAG5H,IAAK,CAGzB,KAAMw+D,EAAY,GAAKC,EAAc91D,GAInC61D,GAAa,EAAK3oD,GAAK+N,EAAI66C,GAG3BA,IAKFD,IAAc71D,EAAI3I,IAAM6V,EAAI7V,KAAOA,EAAI,IAAM4jB,EAAI/N,EAAIlN,EAAI3I,EAAI,GAC/D,CAEA,KAAMy+D,EAAc91D,EAAG81D,IAErBD,GAAa,EAAK3oD,GAAK+N,EAAI66C,GAI7B,OAAO/yD,EAAKiD,IAAI,EAAGjD,EAAKqe,IAAI,EAAGy0C,GAEnC,EAEAnqC,IAAK,SAAazhB,EAAGgR,EAAG/N,EAAGlN,GAYzB,GAAGiK,EAAI,GAAKA,EAAIiD,GAAK+N,EAAIjb,GAEvB,OAAO,EACF,GAAGiK,GAAKjK,GAAKiK,GAAKiD,EAEvB,OAAO,EACF,GAAQ,EAAJA,EAAQ+N,EAGjB,OAAO,EAAJjb,EAAQib,EAGFtR,EAAMisD,QAAQlqC,IAAIzQ,EAAI/N,EAAIlN,EAAIiK,EAAGgR,EAAGA,EAAI/N,EAAG+N,EAAIjb,GAI/C,EAAI2J,EAAMisD,QAAQlqC,IAAI1rB,EAAIiK,EAAI,EAAGgR,EAAGA,EAAI/N,EAAGlN,GAG/C,GAAO,EAAJA,EAAQib,EAGhB,OAAO,EAAItR,EAAMisD,QAAQlqC,IAAIxe,EAAIjD,EAAI,EAAGgR,EAAG/N,EAAG+N,EAAIjb,GAE7C,GAAGkN,EAAIlN,EAGZ,OAAO2J,EAAMisD,QAAQlqC,IAAIzhB,EAAGgR,EAAGjb,EAAGkN,GAqBlC,IATA,IAAI6oD,EAAY,EAIZF,EAAY,EAGZC,EAAc,EAEVz+D,EAAI,EAAGA,EAAI4S,EAAG5S,IAAK,CAGzB,KAAM0+D,EAAY,GAAKD,EAAc91D,GAAG,CAItC,IAAIgV,EAAS,EAAK9H,GAAK+N,EAAI66C,GAE3BD,GAAa7gD,EACb+gD,GAAa/gD,EAGb8gD,GACF,CAOAC,GAHAF,IAAc71D,EAAI3I,IAAM6V,EAAI7V,KAAOA,EAAI,IAAM4jB,EAAI/N,EAAIlN,EAAI3I,EAAI,GAI/D,CAEA,KAAMy+D,EAAc91D,EAAG81D,IAErBC,GAAa,EAAK7oD,GAAK+N,EAAI66C,GAI7B,OAAO/yD,EAAKiD,IAAI,EAAGjD,EAAKqe,IAAI,EAAG20C,GAEnC,IAMFpsD,EAAM64B,OAAO74B,EAAMmoB,QAAS,CAC1BnG,IAAK,SAAa1sB,EAAGC,GACnB,OAAIA,EAAI,GAAMD,EAAI,IAAO,GAAKA,EAAI,EACzB,EAGF8D,EAAKyM,IAAItQ,EAAGD,GAAK8D,EAAKqN,KAAKlR,GAAKyK,EAAMmlD,UAAU7vD,EACzD,EAEAysB,IAAK,SAAazhB,EAAG/K,GACnB,IAAI82D,EAAS,GACb/2D,EAAI,EACJ,GAAIgL,EAAI,EAAG,OAAO,EAClB,KAAOhL,GAAKgL,EAAGhL,IACb+2D,EAAOt3D,KAAKiL,EAAMmoB,QAAQnG,IAAI1sB,EAAGC,IAEnC,OAAOyK,EAAMjJ,IAAIs1D,EACnB,EAEAnrC,KAAO,SAAS3rB,GACd,OAAOA,CACT,EAEA4rD,SAAW,SAAS5rD,GAClB,OAAOA,CACT,EAEA+2D,YAAa,SAAqB/2D,GAChC,IAAIM,EAAI,EAAGP,EAAI,EAAGghB,EAAIld,EAAKqN,KAAKlR,GAChC,GACED,IACAO,GAAKmK,EAAMi9C,mBACJpnD,EAAIygB,GACb,OAAOhhB,EAAI,CACb,EAEAi3D,YAAa,SAAqBh3D,GAChC,IACID,EACAk3D,EAAG91C,EAAG+1C,EAAMC,EAAQjpD,EAAGwD,EAAG0lD,EAAUC,EAAIC,EAFxCC,EAAMv3D,EAWV,IAPAk3D,EAAOrzD,EAAKwM,KAAKknD,GACjBJ,EAAStzD,EAAKmO,IAAIulD,GAElBrpD,EAAa,QADbwD,EAAI,KAAQ,KAAOwlD,GACd,KACLE,EAAW,OAAS,QAAU1lD,EAAI,KAClC2lD,EAAK,MAAS,QAAU3lD,EAAI,KAElB,CAKR,GAJAulD,EAAIpzD,EAAK+hB,SAAW,GACpBzE,EAAItd,EAAK+hB,SACT0xC,EAAK,GAAMzzD,EAAK6F,IAAIutD,GACpBl3D,EAAI8D,EAAKqB,OAAO,EAAIgJ,EAAIopD,EAAK5lD,GAAKulD,EAAIM,EAAM,KACvCD,GAAM,KAAUn2C,GAAKk2C,EACtB,OAAOt3D,EAEX,KAAKA,EAAI,GAAQu3D,EAAK,MAAWn2C,EAAIm2C,IAKhCzzD,EAAKmO,IAAImP,GAAKtd,EAAKmO,IAAIolD,GAAYvzD,EAAKmO,IAAI9D,GAAKopD,EAAKA,GAAM5lD,IAAe3R,EAAIo3D,EAAVI,EAAmB9sD,EAAMikD,OAAO3uD,EAAI,GAC1G,OAAOA,CAEb,CACF,EAEAo1D,OAAQ,SAAgBn1D,GACtB,OAAIA,EAAI,GACCwH,KAAKuvD,YAAY/2D,GAEjBwH,KAAKwvD,YAAYh3D,EAC5B,IAIFyK,EAAM64B,OAAO74B,EAAM+sD,WAAY,CAC7B/qC,IAAK,SAAa1hB,EAAGmD,EAAGwD,EAAGpa,GACzB,OAAIoa,GAAKxD,GAAK5W,EAAI4W,GAAK5W,EAAIoa,EAClBkhC,IAEH7nC,EAAImD,GAAKnD,EAAI2G,EACR,EACE3G,EAAIzT,EACH,GAAKyT,EAAImD,KAAQwD,EAAIxD,IAAM5W,EAAI4W,IAChCnD,IAAMzT,EACL,GAAKoa,EAAIxD,GAET,GAAKwD,EAAI3G,KAAQ2G,EAAIxD,IAAMwD,EAAIpa,GAG/C,EAEAk1B,IAAK,SAAazhB,EAAGmD,EAAGwD,EAAGpa,GACzB,OAAIoa,GAAKxD,GAAK5W,EAAI4W,GAAK5W,EAAIoa,EAClBkhC,IACL7nC,GAAKmD,EACA,EACAnD,GAAK2G,EACL,EACL3G,GAAKzT,EACAuM,EAAKyM,IAAIvF,EAAImD,EAAG,KAAOwD,EAAIxD,IAAM5W,EAAI4W,IAErC,EAAIrK,EAAKyM,IAAIoB,EAAI3G,EAAG,KAAO2G,EAAIxD,IAAMwD,EAAIpa,GACpD,EAEAq1B,IAAK,SAAarsB,EAAG4N,EAAGwD,EAAGpa,GACzB,OAAIoa,GAAKxD,GAAK5W,EAAI4W,GAAK5W,EAAIoa,EAClBkhC,IAEHtyC,IAAOhJ,EAAI4W,IAAMwD,EAAIxD,GAChBA,GAAKwD,EAAIxD,GAAKrK,EAAKwM,KAAK/P,IAAMhJ,EAAI4W,IAAMwD,EAAIxD,KAE5CA,GAAKwD,EAAIxD,IAAM,EAAIrK,EAAKwM,MAAM,EAAI/P,IAAM,GAAMhJ,EAAI4W,IAAMwD,EAAIxD,KAGzE,EAEAyd,KAAM,SAAczd,EAAGwD,EAAGpa,GACxB,OAAQ4W,EAAIwD,EAAIpa,GAAK,CACvB,EAEAw6B,OAAQ,SAAgB5jB,EAAGwD,EAAGpa,GAC5B,OAAIA,IAAM4W,EAAIwD,GAAK,EACVA,EAAI7N,EAAKwM,MAAMqB,EAAIxD,IAAMwD,EAAIpa,IAAMuM,EAAKwM,KAAK,GAC3C/Y,GAAK4W,EAAIwD,GAAK,EAChBxD,EAAIrK,EAAKwM,MAAMqB,EAAIxD,IAAM5W,EAAI4W,IAAMrK,EAAKwM,KAAK,QAD/C,CAGT,EAEAgS,KAAM,SAAcnU,EAAGwD,EAAGpa,GACxB,OAAOA,CACT,EAEA69D,OAAQ,SAAgBjnD,EAAGwD,EAAGpa,GAC5B,IAAI2W,EAAIxD,EAAMi9C,aACd,OAAIz5C,GAAM3W,EAAI4W,IAAMwD,EAAIxD,GACfA,EAAIrK,EAAKwM,KAAKpC,GAAKyD,EAAIxD,IAAM5W,EAAI4W,IACnCwD,EAAI7N,EAAKwM,MAAM,EAAIpC,IAAMyD,EAAIxD,IAAMwD,EAAIpa,GAChD,EAEAs0D,SAAU,SAAkB19C,EAAGwD,EAAGpa,GAChC,OAAQ4W,EAAIA,EAAIwD,EAAIA,EAAIpa,EAAIA,EAAI4W,EAAIwD,EAAIxD,EAAI5W,EAAIoa,EAAIpa,GAAK,EAC3D,IAKFmT,EAAM64B,OAAO74B,EAAMgtD,QAAS,CAC1BhrC,IAAK,SAAa1hB,EAAGmD,EAAGwD,GACtB,OAAIA,GAAKxD,EAAU0kC,IAEX7nC,GAAKmD,GAAKnD,GAAK2G,EAAK,EACzB,EAAI7N,EAAKgN,GACRhN,EAAKyM,IAAIzM,EAAKyM,IAAIoB,EAAIxD,EAAG,GACfrK,EAAKyM,IAAI,EAAIvF,EAAImD,EAAIwD,EAAG,IAAK,GAC7C,EAEA8a,IAAK,SAAazhB,EAAGmD,EAAGwD,GACtB,OAAI3G,EAAImD,EACC,EACAnD,EAAI2G,EACH,EAAI7N,EAAKgN,GAAMhN,EAAK0d,KAAK1d,EAAKwM,MAAMtF,EAAImD,IAAIwD,EAAIxD,KACnD,CACT,EAEAye,IAAK,SAASrsB,EAAG4N,EAAGwD,GAClB,OAAOxD,GAAK,GAAM,GAAMrK,EAAKoN,IAAIpN,EAAKgN,GAAKvQ,KAAOoR,EAAIxD,EACxD,EAEAyd,KAAM,SAAczd,EAAGwD,GACrB,OAAIA,GAAKxD,EAAU0kC,KACX1kC,EAAIwD,GAAK,CACnB,EAEAogB,OAAQ,SAAgB5jB,EAAGwD,GACzB,OAAIA,GAAKxD,EAAU0kC,KACX1kC,EAAIwD,GAAK,CACnB,EAEA2Q,KAAM,WACJ,MAAM,IAAI1c,MAAM,8BAClB,EAEAwvD,OAAQ,SAAgBjnD,EAAGwD,GACzB,OAASxD,EAAIwD,GAAK,GAAOA,EAAIxD,GAAK,EAChCrK,EAAKsN,IAAI,EAAItN,EAAKgN,GAAKpG,EAAM+rD,QAAQrB,OAAO,EAAG,GACnD,EAEAvJ,SAAU,SAAkB19C,EAAGwD,GAC7B,OAAIA,GAAKxD,EAAU0kC,IACZ/uC,EAAKyM,IAAIoB,EAAIxD,EAAG,GAAK,CAC9B,IAMFzD,EAAM64B,OAAO74B,EAAMitD,QAAS,CAC1BjrC,IAAK,SAAa1hB,EAAG+iD,EAAIp8C,GACvB,OAAQA,GAAK,EAAK,EAAK7N,EAAKqN,KAAKrN,EAAK6F,IAAIqB,EAAI+iD,GAAMp8C,IAAO,EAAIA,EACjE,EAEA8a,IAAK,SAAazhB,EAAG+iD,EAAIp8C,GACvB,OAAIA,GAAK,EAAY,EAElB3G,EAAI+iD,EACE,GAAMjqD,EAAKqN,KAAKnG,EAAI+iD,GAAMp8C,GAE1B,EAAI,GAAM7N,EAAKqN,MAAOnG,EAAI+iD,GAAMp8C,EAE3C,EAEAia,KAAM,SAASmiC,GACb,OAAOA,CACT,EAEAh8B,OAAQ,SAASg8B,GACf,OAAOA,CACT,EAEAzrC,KAAM,SAASyrC,GACb,OAAOA,CACT,EAEAlC,SAAU,SAASkC,EAAIp8C,GACrB,OAAO,EAAIA,EAAIA,CACjB,EAEAyjD,OAAQ,SAAgBrH,EAAIp8C,GAC1B,IAAIzD,EAAIxD,EAAMi9C,aAAe,GAE7B,OAAOoG,EAAMp8C,EAAIwgD,EAAYjkD,GAAKpK,EAAKmO,IAAI,EAAK,EAAInO,EAAK6F,IAAIuE,GAC/D,IA8JFxD,EAAM64B,OAAO74B,EAAMktD,MAAO,CACxBnrC,IAAK,SAAawiC,EAAG4I,EAAQt+C,GAE3B,IAAI84C,EAAK,EACLC,EAAKuF,EAELC,EAAQ,GACRC,EAAS,EAETC,GAAQ,GACRC,EAAO,MACPC,EAAQ,IACRC,EAAQ,IACRC,EAAQ,IACRC,EAAQ,KACRC,EAAQ,EACRC,EAAQ,GACRC,EAAQ,IACRC,EAAQ,KACRC,EAAQ,CACV,kBACA,kBACA,kBACA,iBACA,kBACA,mBACA,kBACA,oBAEEC,EAAQ,CACV,oBACA,oBACA,mBACA,mBACA,mBACA,mBACA,mBACA,mBAGF,GAAI1J,GAAK,EACP,OAAO,EAKT,GAAI11C,EAAK,GAAK84C,EAAK,GAAKC,EAAK,EAAG,OAAOzf,IAEvC,IAAKjiC,OAAOyK,SAAS4zC,GACnB,OAAO,EAET,GAAI11C,EAAK8+C,EACP,OAAOjG,EAAWnD,EAAGoD,EAAIC,GAI3B,IASIsG,EATArmB,EAAU,GAALh5B,EACLs/C,EAAStmB,EAAKzuC,EAAKmO,IAAIsH,GAAQA,EAAKzV,EAAKmO,IAAI,GAAOvH,EAAM0lB,QAAQmiB,GAClEumB,EAAMvmB,EAAK,EAMXwmB,EAAW,IAALx/C,EAEYq/C,EAAbr/C,GAAM2+C,EAAcI,EACpB/+C,GAAM4+C,EAAcI,EACpBh/C,GAAM6+C,EAAcI,EACAC,EAE7BI,GAAQ/0D,EAAKmO,IAAI2mD,GAMjB,IAFA,IAAII,EAAM,EAED5gE,EAAI,EAAGA,GAAK,GAAIA,IAAK,CAQ5B,IAPA,IAAI6gE,EAAQ,EAKRC,GAAQ,EAAI9gE,EAAI,GAAKwgE,EAEhBhF,EAAK,EAAGA,GAAMkE,EAAOlE,IAAM,CAClC,IAAIxzD,EAAG+4D,EACHpB,EAASnE,GACXxzD,EAAIwzD,EAAKmE,EAAS,EAClBoB,EAAMN,EAAQC,EAAMh1D,EAAKmO,IAAIinD,EAAQR,EAAMt4D,GAAKw4D,IACvCF,EAAMt4D,GAAKw4D,EAAQM,GAAQH,IAEpC34D,EAAIwzD,EAAK,EACTuF,EAAMN,EAAQC,EAAMh1D,EAAKmO,IAAIinD,EAAQR,EAAMt4D,GAAKw4D,IACvCF,EAAMt4D,GAAKw4D,EAAQM,GAAQH,GAKlCI,GAAMnB,IAWRiB,GAFW7G,EARP2F,EAASnE,EACJ3E,EAAInrD,EAAKwM,KAAkC,IAA3BooD,EAAMt4D,GAAKw4D,EAAQM,IAEnCjK,EAAInrD,EAAKwM,KAAqC,KAA5BooD,EAAMt4D,GAAKw4D,EAASM,IAKnB7G,EAAIC,GACXqG,EAAMv4D,GAAM0D,EAAKqN,IAAIgoD,GAK9C,CAKA,GAAI/gE,EAAIwgE,GAAQ,GAAOK,GAAShB,EAC9B,MAKFe,GAAOC,CACT,CAEA,GAAIA,EAAQhB,EACV,MAAM,IAAIryD,MAAM,gCAIlB,OAFIozD,EAAM,IACRA,EAAM,GACDA,CACT,EAEApsC,IAAK,SAASrsB,EAAGs3D,EAAQt+C,GAEvB,IAGIu4C,EAAM,KACNsH,EAAU,GAGd,GAAI7/C,EAAK,GANAs+C,EAMoB,EAAG,OAAOhlB,IAEvC,GAAItyC,EAAI,GAAKA,EAAI,EAAG,OAAOsyC,IAC3B,GAAU,IAANtyC,EAAS,OAAO,EACpB,GAAU,IAANA,EAAS,OAAOqyC,IAIpB,IAWItjB,EAXAs/B,EAAKoF,EAAUzzD,EAdVs3D,EAciBt+C,GAItB8/C,EAAQ3uD,EAAMktD,MAAMnrC,IAAImiC,EAAIiJ,EAAQt+C,GAAMhZ,EAS5C+uB,EADE+pC,EAAQ,EACLv1D,EAAKqe,IAAI,EAAKysC,EAAK,GAEnBA,EAAK,EAMZ,IALA,IAIIoK,EAJAM,EAAQ5uD,EAAMktD,MAAMnrC,IAAI6C,EAAIuoC,EAAQt+C,GAAMhZ,EAKtCg5D,EAAO,EAAGA,EAAOH,EAASG,IAoBhC,GAnBAP,EAAM1pC,EAAOgqC,GAAShqC,EAAKs/B,IAAQ0K,EAAQD,GAC3CA,EAAQC,EAIR1K,EAAKt/B,EACD0pC,EAAM,IACRA,EAAM,EACNM,GAAS/4D,GAIX+4D,EAAQ5uD,EAAMktD,MAAMnrC,IAAIusC,EAAKnB,EAAQt+C,GAAMhZ,EAC3C+uB,EAAK0pC,EAKMl1D,EAAK6F,IAAI2lB,EAAKs/B,GACdkD,EACT,OAAOkH,EAGX,MAAM,IAAIpzD,MAAM,+BAClB,GAGD,CA3jDA,CA2jDC8E,EAAO5G,MAIR,SAAS4G,EAAO5G,GAEjB,IAAIrE,EAAOyI,MAAM0iB,UAAUnrB,KACvB2c,EAAU1R,EAAM/S,MAAMykB,QAE1B,SAASo9C,EAASj0C,GAChB,OAAOnJ,EAAQmJ,IAAQA,aAAe7a,CACxC,CAEAA,EAAM64B,OAAO,CAGX8B,IAAK,SAAahM,EAAK9T,GAErB,OAAIi0C,EAASj0C,IACNi0C,EAASj0C,EAAI,MAAKA,EAAM,CAAEA,IACxB7a,EAAMonB,IAAIuH,GAAK,SAAS75B,EAAOkf,EAAK4O,GACzC,OAAO9tB,EAAQ+lB,EAAI7G,GAAK4O,EAC1B,KAEK5iB,EAAMonB,IAAIuH,GAAK,SAAS75B,GAAS,OAAOA,EAAQ+lB,CAAK,GAC9D,EAGAoG,SAAU,SAAkB0N,EAAK9T,GAE/B,OAAIi0C,EAASj0C,IACNi0C,EAASj0C,EAAI,MAAKA,EAAM,CAAEA,IACxB7a,EAAMonB,IAAIuH,GAAK,SAAS75B,EAAOkf,EAAK4O,GACzC,OAAO9tB,EAAQ+lB,EAAI7G,GAAK4O,IAAQ,CAClC,KAEK5iB,EAAMonB,IAAIuH,GAAK,SAAS75B,GAAS,OAAOA,EAAQ+lB,CAAK,GAC9D,EAGAk0C,OAAQ,SAAgBpgC,EAAK9T,GAC3B,OAAIi0C,EAASj0C,IACNi0C,EAASj0C,EAAI,MAAKA,EAAM,CAAEA,IACxB7a,EAAMgvD,SAASrgC,EAAK3uB,EAAMkiB,IAAIrH,KAEhC7a,EAAMonB,IAAIuH,GAAK,SAAS75B,GAAS,OAAOA,EAAQ+lB,CAAK,GAC9D,EAGAm0C,SAAU,SAAkBrgC,EAAK9T,GAC/B,IAAI7G,EAAK4O,EAAKqsC,EAAUl4D,EAAK4mD,EAAMI,EAAMlhB,EAAKqyB,EAE9C,QAAmB32D,IAAfo2B,EAAIv5B,aAAuCmD,IAAfsiB,EAAIzlB,OAClC,OAAOu5B,EAAM9T,EAMf,GAJA8iC,EAAOhvB,EAAIv5B,OACX2oD,EAAOpvB,EAAI,GAAGv5B,OACdynC,EAAM78B,EAAMk+C,MAAMP,EAAMsR,EAAYH,EAASj0C,GAAQA,EAAI,GAAGzlB,OAAS2oD,GACrEmR,EAAU,EACNJ,EAASj0C,GAAM,CACjB,KAAOq0C,EAAUD,EAAUC,IACzB,IAAKl7C,EAAM,EAAGA,EAAM2pC,EAAM3pC,IAAO,CAE/B,IADAjd,EAAM,EACD6rB,EAAM,EAAGA,EAAMm7B,EAAMn7B,IAC1B7rB,GAAO43B,EAAI3a,GAAK4O,GAAO/H,EAAI+H,GAAKssC,GAChCryB,EAAI7oB,GAAKk7C,GAAWn4D,CACtB,CAEF,OAAiB,IAAT4mD,GAA0B,IAAZuR,EAAiBryB,EAAI,GAAG,GAAKA,CACrD,CACA,OAAO78B,EAAMonB,IAAIuH,GAAK,SAAS75B,GAAS,OAAOA,EAAQ+lB,CAAK,GAC9D,EAOAs0C,MAAM,SAAettC,EAAGC,GACtB,OAAO9hB,EAAMgvD,SAASntC,EAAEuF,KAAI,SAASzf,GAAI,MAAO,CAACA,EAAG,IAAI,CAACma,GAC3D,EAIAstC,IAAK,SAAazgC,EAAK9T,GAChBi0C,EAASngC,EAAI,MAAKA,EAAM,CAAEA,IAC1BmgC,EAASj0C,EAAI,MAAKA,EAAM,CAAEA,IAS/B,IAPA,IAMA9jB,EAAK6rB,EANDysC,EAA0B,IAAlB1gC,EAAI,GAAGv5B,QAA+B,IAAfu5B,EAAIv5B,OAAgB4K,EAAMmU,UAAUwa,GAAOA,EAC9E2gC,EAA2B,IAAlBz0C,EAAI,GAAGzlB,QAA+B,IAAfylB,EAAIzlB,OAAgB4K,EAAMmU,UAAU0G,GAAOA,EAC3EgiB,EAAM,GACN7oB,EAAM,EACN2pC,EAAO0R,EAAKj6D,OACZ2oD,EAAOsR,EAAK,GAAGj6D,OAER4e,EAAM2pC,EAAM3pC,IAAO,CAGxB,IAFA6oB,EAAI7oB,GAAO,GACXjd,EAAM,EACD6rB,EAAM,EAAGA,EAAMm7B,EAAMn7B,IAC1B7rB,GAAOs4D,EAAKr7C,GAAK4O,GAAO0sC,EAAMt7C,GAAK4O,GACnCia,EAAI7oB,GAAOjd,CACb,CACA,OAAuB,IAAf8lC,EAAIznC,OAAgBynC,EAAI,GAAKA,CACvC,EAGAh3B,IAAK,SAAa8oB,EAAK9T,GACrB,OAAO7a,EAAMonB,IAAIuH,GAAK,SAAS75B,GAAS,OAAOsE,EAAKyM,IAAI/Q,EAAO+lB,EAAM,GACvE,EAGApU,IAAK,SAAakoB,GAChB,OAAO3uB,EAAMonB,IAAIuH,GAAK,SAAS75B,GAAS,OAAOsE,EAAKqN,IAAI3R,EAAQ,GAClE,EAGAyS,IAAK,SAAaonB,GAChB,OAAO3uB,EAAMonB,IAAIuH,GAAK,SAAS75B,GAAS,OAAOsE,EAAKmO,IAAIzS,EAAQ,GAClE,EAGAmK,IAAK,SAAa0vB,GAChB,OAAO3uB,EAAMonB,IAAIuH,GAAK,SAAS75B,GAAS,OAAOsE,EAAK6F,IAAInK,EAAQ,GAClE,EAIAy6D,KAAM,SAAc5gC,EAAK94B,GACvB,IAAI25D,EAAQ,EACZ9hE,EAAI,EAMJ,IAJIiJ,MAAMd,KAAIA,EAAI,GAEdi5D,EAASngC,EAAI,MAAKA,EAAMA,EAAI,IAEzBjhC,EAAIihC,EAAIv5B,OAAQ1H,IACrB8hE,GAASp2D,EAAKyM,IAAIzM,EAAK6F,IAAI0vB,EAAIjhC,IAAKmI,GAEtC,OAAOuD,EAAKyM,IAAI2pD,EAAO,EAAI35D,EAC7B,EAIA45D,MAAO,SAAe9gC,EAAK9T,GACzB,OAAOzhB,EAAK4b,KAAKhV,EAAMovD,IAAIzgC,EAAK9T,IAAQ7a,EAAMuvD,KAAK5gC,GAAO3uB,EAAMuvD,KAAK10C,IACvE,EAIA60C,IAAK,SAAajsD,EAAGwD,GACnB,IACIvZ,EADAiiE,EAAS,GAEb,IAAKjiE,EAAI,EAAGA,EAAI+V,EAAErO,OAAQ1H,IACxBiiE,EAAO56D,KAAK0O,EAAE/V,GAAGyyB,SAEnB,IAAKzyB,EAAI,EAAGA,EAAIiiE,EAAOv6D,OAAQ1H,IAC7BqH,EAAKmpB,MAAMyxC,EAAOjiE,GAAIuZ,EAAEvZ,IAE1B,OAAOiiE,CACT,EAKAztC,IAAK,SAAaze,GAUhB,IATA,IAMI/N,EANAkzB,EAAOnlB,EAAErO,OACT+tB,EAAO1f,EAAE,GAAGrO,OACZ6R,EAAIjH,EAAMq+C,SAASz1B,EAAMzF,GACzBt2B,EAAImT,EAAM4vD,aAAansD,EAAGwD,GAC1BrS,EAAS,GACTlH,EAAI,EAIDA,EAAIk7B,EAAMl7B,IAEf,IADAkH,EAAOlH,GAAK,GACPgI,EAAIytB,EAAMztB,EAAI7I,EAAE,GAAGuI,OAAQM,IAC9Bd,EAAOlH,GAAGgI,EAAIytB,GAAQt2B,EAAEa,GAAGgI,GAE/B,OAAOd,CACT,EAGAi7D,IAAK,SAAapsD,GAChB,IASA/N,EATIo6D,EAAOrsD,EAAErO,OACb26D,EAAe,EAAPD,EACRnF,EAAO,IAAIntD,MAAMuyD,GACjBC,EAAWF,EAAO,EAClBG,EAAWF,EAAQ,EACnBG,EAAOF,EAAWF,EAAO,EACzBK,EAAOF,EACPviE,EAAI,EACJkH,EAAS,EAGT,GAAa,IAATk7D,EACF,OAAOrsD,EAAE,GAAG,GAAKA,EAAE,GAAG,GAAKA,EAAE,GAAG,GAAKA,EAAE,GAAG,GAE5C,KAAO/V,EAAIqiE,EAAOriE,IAChBi9D,EAAKj9D,GAAK,EAEZ,IAAKA,EAAI,EAAGA,EAAIoiE,EAAMpiE,IAAK,CACzB,IAAKgI,EAAI,EAAGA,EAAIo6D,EAAMp6D,IACpBi1D,EAAMuF,EAAO,EAAKA,EAAOJ,EAAOI,IAAUzsD,EAAE/V,GAAGgI,GAC/Ci1D,EAAMwF,EAAOL,EAAQK,EAAOL,EAAOK,IAAU1sD,EAAE/V,GAAGgI,GAClDw6D,IACAC,IAEFD,IAASF,EAAWF,EAAO,EAC3BK,IAASF,CACX,CACA,IAAKviE,EAAI,EAAGA,EAAIoiE,EAAMpiE,IACpBkH,GAAU+1D,EAAKj9D,GAEjB,KAAOA,EAAIqiE,EAAOriE,IAChBkH,GAAU+1D,EAAKj9D,GAEjB,OAAOkH,CACT,EAEAw7D,kBAAmB,SAA2B3sD,EAAGwD,GAC/C,IAOAopD,EAAMC,EAAO71C,EAAMnlB,EAPf5H,EAAI,EACRgI,EAAI,EACJW,EAAIoN,EAAErO,OACNmO,EAAIE,EAAE,GAAGrO,OACTiW,EAAS,EACTtU,EAAM,EACNuJ,EAAI,GAIJ,IADA+vD,GADA5sD,EAAIzD,EAAM0vD,IAAIjsD,EAAGwD,IACR,GAAG7R,OACR1H,EAAI,EAAGA,EAAI2I,EAAG3I,IAAK,CAGrB,IAFA4iE,EAAQ7sD,EAAE/V,GAAGA,GACbgI,EAAIhI,EACC4H,EAAI5H,EAAI,EAAG4H,EAAIiO,EAAGjO,IACjBg7D,EAAQl3D,EAAK6F,IAAIwE,EAAEnO,GAAG5H,MACxB4iE,EAAQ7sD,EAAEnO,GAAG5H,GACbgI,EAAIJ,GAGR,GAAII,GAAKhI,EACP,IAAI4H,EAAI,EAAGA,EAAI+6D,EAAM/6D,IACnBmlB,EAAOhX,EAAE/V,GAAG4H,GACZmO,EAAE/V,GAAG4H,GAAKmO,EAAE/N,GAAGJ,GACfmO,EAAE/N,GAAGJ,GAAKmlB,EAGd,IAAK/kB,EAAIhI,EAAI,EAAGgI,EAAIW,EAAGX,IAErB,IADA2V,EAAS5H,EAAE/N,GAAGhI,GAAK+V,EAAE/V,GAAGA,GACpB4H,EAAI5H,EAAG4H,EAAI+6D,EAAM/6D,IACnBmO,EAAE/N,GAAGJ,GAAKmO,EAAE/N,GAAGJ,GAAK+V,EAAS5H,EAAE/V,GAAG4H,EAGxC,CACA,IAAK5H,EAAI2I,EAAI,EAAG3I,GAAK,EAAGA,IAAK,CAE3B,IADAqJ,EAAM,EACDrB,EAAIhI,EAAI,EAAGgI,GAAIW,EAAI,EAAGX,IACzBqB,GAAYuJ,EAAE5K,GAAK+N,EAAE/V,GAAGgI,GAE1B4K,EAAE5S,IAAK+V,EAAE/V,GAAG2iE,EAAO,GAAKt5D,GAAO0M,EAAE/V,GAAGA,EACtC,CACA,OAAO4S,CACT,EAEAsvD,aAAc,SAAsBnsD,EAAGwD,GACrC,IAII3G,EAAGqD,EAAG4sD,EAJNhtD,EAAIvD,EAAM0vD,IAAIjsD,EAAGwD,GACjBxJ,EAAI8F,EAAEnO,OACN83C,EAAI3pC,EAAE,GAAGnO,OACTvI,EAAI,EAGR,IAAK8W,EAAI,EAAGA,EAAIlG,EAAGkG,IAAK,CACtB,IAAI6sD,EAAS7sD,EACb,IAAK4sD,EAAK5sD,EAAE,EAAG4sD,EAAK9yD,EAAG8yD,IACjBn3D,EAAK6F,IAAIsE,EAAEgtD,GAAI5sD,IAAMvK,EAAK6F,IAAIsE,EAAEitD,GAAQ7sD,MAC1C6sD,EAASD,GAEb,IAAI5tC,EAAMpf,EAAEI,GAGZ,IAFAJ,EAAEI,GAAKJ,EAAEitD,GACTjtD,EAAEitD,GAAU7tC,EACP4tC,EAAK5sD,EAAE,EAAG4sD,EAAK9yD,EAAG8yD,IAErB,IADA1jE,EAAI0W,EAAEgtD,GAAI5sD,GAAKJ,EAAEI,GAAGA,GACfrD,EAAIqD,EAAGrD,EAAI4sC,EAAG5sC,IACjBiD,EAAEgtD,GAAIjwD,IAAMiD,EAAEI,GAAGrD,GAAKzT,CAG5B,CAEA,IAAK8W,EAAIlG,EAAE,EAAGkG,GAAK,EAAGA,IAAK,CAEzB,IADA9W,EAAI0W,EAAEI,GAAGA,GACJ4sD,EAAK,EAAGA,EAAK5sD,EAAG4sD,IACnB,IAAKjwD,EAAI4sC,EAAE,EAAG5sC,EAAIqD,EAAE,EAAGrD,IACrBiD,EAAEgtD,GAAIjwD,IAAMiD,EAAEI,GAAGrD,GAAKiD,EAAEgtD,GAAI5sD,GAAK9W,EAIrC,IADA0W,EAAEI,GAAGA,IAAM9W,EACNyT,EAAI7C,EAAG6C,EAAI4sC,EAAG5sC,IACjBiD,EAAEI,GAAGrD,IAAMzT,CAEf,CACA,OAAO0W,CACT,EAYAktD,YAAa,SAAqB5uC,EAAG5a,GACnC,IAEIm8B,EAFAmb,EAAO18B,EAAE,GAAGzsB,OACZkL,EAAIN,EAAMk+C,MAAM,EAAGK,GAAM,GAEzBmS,GAAc,EAclB,YAZmBn4D,GAAf0O,EAAE,GAAG7R,SACP6R,EAAIA,EAAEmgB,KAAI,SAAS15B,GAAI,OAAOA,EAAE,EAAG,IACnCgjE,GAAc,GAGhB1wD,EAAMs9C,OAAOiB,EAAO,GAAI,GAAI,GAAGp0B,SAAQ,SAASz8B,GAC9C01C,EAAQpjC,EAAMs9C,OAAO5vD,EAAI,EAAG6wD,GAAMn3B,KAAI,SAAS1xB,GAC7C,OAAO4K,EAAE5K,GAAKmsB,EAAEn0B,GAAGgI,EACrB,IACA4K,EAAE5S,IAAMuZ,EAAEvZ,GAAKsS,EAAMjJ,IAAIqsC,IAAUvhB,EAAEn0B,GAAGA,EAC1C,IAEIgjE,EACKpwD,EAAE8mB,KAAI,SAAS15B,GAAI,MAAO,CAACA,EAAG,IAChC4S,CACT,EAEAqwD,aAAc,SAAsB9uC,EAAG5a,GAErC,IAEIm8B,EAFAmb,EAAO18B,EAAE,GAAGzsB,OACZkL,EAAIN,EAAMk+C,MAAM,EAAGK,GAAM,GAGzBmS,GAAY,EAahB,YAZmBn4D,GAAf0O,EAAE,GAAG7R,SACP6R,EAAIA,EAAEmgB,KAAI,SAAS15B,GAAI,OAAOA,EAAE,EAAG,IACnCgjE,GAAc,GAGhB1wD,EAAMs9C,OAAOiB,GAAMp0B,SAAQ,SAASz8B,GAClC01C,EAAQpjC,EAAMs9C,OAAO5vD,GAAG05B,KAAI,SAAS1xB,GACnC,OAAOmsB,EAAEn0B,GAAGgI,GAAK4K,EAAE5K,EACrB,IACA4K,EAAE5S,IAAMuZ,EAAEvZ,GAAKsS,EAAMjJ,IAAIqsC,IAAUvhB,EAAEn0B,GAAGA,EAC1C,IAEIgjE,EACKpwD,EAAE8mB,KAAI,SAAS15B,GAAI,MAAO,CAACA,EAAG,IAChC4S,CACT,EAOAswD,GAAI,SAAY/uC,GACd,IAIIuhB,EAJAmb,EAAO18B,EAAEzsB,OAETkhB,EAAItW,EAAMq+C,SAASE,GACnB/S,EAAIxrC,EAAMk+C,MAAMr8B,EAAEzsB,OAAQysB,EAAE,GAAGzsB,QAmBnC,OAjBA4K,EAAMs9C,OAAOiB,GAAMp0B,SAAQ,SAASxiB,GAClC6jC,EAAE,GAAG7jC,GAAKka,EAAE,GAAGla,EACjB,IACA3H,EAAMs9C,OAAO,EAAGiB,GAAMp0B,SAAQ,SAAS50B,GACrCyK,EAAMs9C,OAAO/nD,GAAG40B,SAAQ,SAASz8B,GAC/B01C,EAAQpjC,EAAMs9C,OAAO5vD,GAAG05B,KAAI,SAAS8hC,GACnC,OAAO5yC,EAAE/gB,GAAG2zD,GAAM1d,EAAE0d,GAAIx7D,EAC1B,IACA4oB,EAAE/gB,GAAG7H,IAAMm0B,EAAEtsB,GAAG7H,GAAKsS,EAAMjJ,IAAIqsC,IAAUoI,EAAE99C,GAAGA,EAChD,IACAsS,EAAMs9C,OAAO/nD,EAAGgpD,GAAMp0B,SAAQ,SAASz0B,GACrC0tC,EAAQpjC,EAAMs9C,OAAO/nD,GAAG6xB,KAAI,SAAS8hC,GACnC,OAAO5yC,EAAE/gB,GAAG2zD,GAAM1d,EAAE0d,GAAIxzD,EAC1B,IACA81C,EAAEj2C,GAAGG,GAAKmsB,EAAEuhB,EAAMhuC,QAAQM,GAAKsK,EAAMjJ,IAAIqsC,EAC3C,GACF,IACO,CAAC9sB,EAAGk1B,EACb,EAKAqlB,SAAU,SAAkBhvC,GAC1B,IAEIuhB,EAFAmb,EAAO18B,EAAEzsB,OACT3B,EAAIuM,EAAMk+C,MAAMr8B,EAAEzsB,OAAQysB,EAAE,GAAGzsB,QAcnC,OAZA4K,EAAMs9C,OAAOiB,GAAMp0B,SAAQ,SAASz8B,GAClC01C,EAAQpjC,EAAMs9C,OAAO5vD,GAAG05B,KAAI,SAASzf,GACnC,OAAOvO,EAAKyM,IAAIpS,EAAE/F,GAAGia,GAAG,EAC1B,IACAlU,EAAE/F,GAAGA,GAAK0L,EAAKwM,KAAKic,EAAEn0B,GAAGA,GAAKsS,EAAMjJ,IAAIqsC,IACxCpjC,EAAMs9C,OAAO5vD,EAAI,EAAG6wD,GAAMp0B,SAAQ,SAASz0B,GACzC0tC,EAAQpjC,EAAMs9C,OAAO5vD,GAAG05B,KAAI,SAASzf,GACnC,OAAOlU,EAAE/F,GAAGia,GAAKlU,EAAEiC,GAAGiS,EACxB,IACAlU,EAAEiC,GAAGhI,IAAMm0B,EAAEn0B,GAAGgI,GAAKsK,EAAMjJ,IAAIqsC,IAAU3vC,EAAE/F,GAAGA,EAChD,GACF,IACO+F,CACT,EAGAq9D,aAAc,SAAsBrtD,EAAGwD,EAAG3G,EAAGuM,GAQ3C,IAPA,IAMIkkD,EAAIlkE,EAAG4Q,EAAGuzD,EANVtjE,EAAI,EACJgI,EAAI,EACJW,EAAIoN,EAAErO,OACNG,EAAI,GACJiO,EAAI,GACJ3F,EAAI,GAEDnQ,EAAI2I,EAAG3I,IAIZ,IAHA6H,EAAE7H,GAAK,GACP8V,EAAE9V,GAAK,GACPmQ,EAAEnQ,GAAK,GACFgI,EAAI,EAAGA,EAAIW,EAAGX,IACbhI,EAAIgI,GACNH,EAAE7H,GAAGgI,GAAK+N,EAAE/V,GAAGgI,GACf8N,EAAE9V,GAAGgI,GAAKmI,EAAEnQ,GAAGgI,GAAK,GACXhI,EAAIgI,GACb8N,EAAE9V,GAAGgI,GAAK+N,EAAE/V,GAAGgI,GACfH,EAAE7H,GAAGgI,GAAKmI,EAAEnQ,GAAGgI,GAAK,IAEpBmI,EAAEnQ,GAAGgI,GAAK+N,EAAE/V,GAAGgI,GACfH,EAAE7H,GAAGgI,GAAK8N,EAAE9V,GAAGgI,GAAK,GAS1B,IALA+H,EAAIuC,EAAMgvD,SAAShvD,EAAMgvD,SAAShvD,EAAMkiB,IAAIrkB,GAAImC,EAAM26B,IAAIplC,EAAGiO,KAAM,GACnE3W,EAAImT,EAAMgvD,SAAShvD,EAAMkiB,IAAIrkB,GAAIoJ,GACjC8pD,EAAKzwD,EACL0wD,EAAKhxD,EAAM26B,IAAI36B,EAAMgvD,SAASvxD,EAAG6C,GAAIzT,GACrCa,EAAI,EACG0L,EAAK6F,IAAIe,EAAMuvD,KAAKvvD,EAAMihB,SAAS+vC,EAAGD,KAAQlkD,GACnDkkD,EAAKC,EACLA,EAAKhxD,EAAM26B,IAAI36B,EAAMgvD,SAASvxD,EAAGszD,GAAKlkE,GACtCa,IAEF,OAAOsjE,CACT,EAEAC,aAAc,SAAsBxtD,EAAGwD,EAAG3G,EAAGuM,GAO3C,IANA,IAKInX,EAAGq7D,EAAIlkE,EAAG4Q,EAAGuzD,EALbtjE,EAAI,EACJ2I,EAAIoN,EAAErO,OACNG,EAAI,GACJiO,EAAI,GACJ3F,EAAI,GAEDnQ,EAAI2I,EAAG3I,IAIZ,IAHA6H,EAAE7H,GAAK,GACP8V,EAAE9V,GAAK,GACPmQ,EAAEnQ,GAAK,GACFgI,EAAI,EAAGA,EAAIW,EAAGX,IACbhI,EAAIgI,GACNH,EAAE7H,GAAGgI,GAAK+N,EAAE/V,GAAGgI,GACf8N,EAAE9V,GAAGgI,GAAKmI,EAAEnQ,GAAGgI,GAAK,GACXhI,EAAIgI,GACb8N,EAAE9V,GAAGgI,GAAK+N,EAAE/V,GAAGgI,GACfH,EAAE7H,GAAGgI,GAAKmI,EAAEnQ,GAAGgI,GAAK,IAEpBmI,EAAEnQ,GAAGgI,GAAK+N,EAAE/V,GAAGgI,GACfH,EAAE7H,GAAGgI,GAAK8N,EAAE9V,GAAGgI,GAAK,GAS1B,IALA+H,EAAIuC,EAAMgvD,SAAShvD,EAAMgvD,SAAShvD,EAAMkiB,IAAIliB,EAAM26B,IAAI98B,EAAGtI,IAAKiO,IAAK,GACnE3W,EAAImT,EAAMgvD,SAAShvD,EAAMkiB,IAAIliB,EAAM26B,IAAI98B,EAAGtI,IAAK0R,GAC/C8pD,EAAKzwD,EACL0wD,EAAKhxD,EAAM26B,IAAI36B,EAAMgvD,SAASvxD,EAAG6C,GAAIzT,GACrCa,EAAI,EACG0L,EAAK6F,IAAIe,EAAMuvD,KAAKvvD,EAAMihB,SAAS+vC,EAAID,KAAQlkD,GACpDkkD,EAAKC,EACLA,EAAKhxD,EAAM26B,IAAI36B,EAAMgvD,SAASvxD,EAAGszD,GAAKlkE,GACtCa,GAAQ,EAEV,OAAOsjE,CACT,EAEAE,IAAK,SAAaztD,EAAGwD,EAAG3G,EAAGuM,EAAGqgC,GAO5B,IANA,IAKIx3C,EAAGq7D,EAAIlkE,EAAG4Q,EAAGuzD,EALbtjE,EAAI,EACJ2I,EAAIoN,EAAErO,OACNG,EAAI,GACJiO,EAAI,GACJ3F,EAAI,GAEDnQ,EAAI2I,EAAG3I,IAIZ,IAHA6H,EAAE7H,GAAK,GACP8V,EAAE9V,GAAK,GACPmQ,EAAEnQ,GAAK,GACFgI,EAAI,EAAGA,EAAIW,EAAGX,IACbhI,EAAIgI,GACNH,EAAE7H,GAAGgI,GAAK+N,EAAE/V,GAAGgI,GACf8N,EAAE9V,GAAGgI,GAAKmI,EAAEnQ,GAAGgI,GAAK,GACXhI,EAAIgI,GACb8N,EAAE9V,GAAGgI,GAAK+N,EAAE/V,GAAGgI,GACfH,EAAE7H,GAAGgI,GAAKmI,EAAEnQ,GAAGgI,GAAK,IAEpBmI,EAAEnQ,GAAGgI,GAAK+N,EAAE/V,GAAGgI,GACfH,EAAE7H,GAAGgI,GAAK8N,EAAE9V,GAAGgI,GAAK,GAY1B,IARA+H,EAAIuC,EAAMgvD,SAAShvD,EAAMkiB,IAAIliB,EAAM26B,IAAI98B,EAAGmC,EAAMgvD,SAASz5D,EAAG23C,KACzCltC,EAAMihB,SAASjhB,EAAMgvD,SAASnxD,EAAG,EAAIqvC,GACtBltC,EAAMgvD,SAASxrD,EAAG0pC,KACpDrgD,EAAImT,EAAMgvD,SAAShvD,EAAMgvD,SAAShvD,EAAMkiB,IAAIliB,EAAM26B,IAAI98B,EAClDmC,EAAMgvD,SAASz5D,EAAG23C,KAAMjmC,GAAIimC,GAChC6jB,EAAKzwD,EACL0wD,EAAKhxD,EAAM26B,IAAI36B,EAAMgvD,SAASvxD,EAAG6C,GAAIzT,GACrCa,EAAI,EACG0L,EAAK6F,IAAIe,EAAMuvD,KAAKvvD,EAAMihB,SAAS+vC,EAAID,KAAQlkD,GACpDkkD,EAAKC,EACLA,EAAKhxD,EAAM26B,IAAI36B,EAAMgvD,SAASvxD,EAAGszD,GAAKlkE,GACtCa,IAEF,OAAOsjE,CACT,EAEAG,YAAa,SAAqB1tD,GAOhC,IANA,IAKIie,EAAO7U,EAAGvX,EAAGI,EALb6N,EAAIE,EAAErO,OACNiB,EAAIoN,EAAE,GAAGrO,OACT1H,EAAI,EACJw/C,EAAI,GACJr3C,EAAI,GAEDnI,EAAI6V,EAAI,EAAG7V,IAAK,CAErB,IADAg0B,EAAQ,EACHhsB,EAAIhI,EAAI,EAAGgI,EAAIW,EAAGX,IACvBgsB,GAAUje,EAAE/N,GAAGhI,GAAK+V,EAAE/N,GAAGhI,GAMzB,IAJAg0B,GADUje,EAAE/V,EAAI,GAAGA,GAAK,GAAM,EAAI,GACjB0L,EAAKwM,KAAK8b,GAC3B7U,EAAIzT,EAAKwM,MAAQ8b,EAAQA,EAASje,EAAE/V,EAAI,GAAGA,GAAKg0B,GAAS,IACzDwrB,EAAIltC,EAAMk+C,MAAM36C,EAAG,IACjB7V,EAAI,GAAG,IAAM+V,EAAE/V,EAAI,GAAGA,GAAKg0B,IAAU,EAAI7U,GACtCvX,EAAI5H,EAAI,EAAG4H,EAAIiO,EAAGjO,IAAK43C,EAAE53C,GAAG,GAAKmO,EAAEnO,GAAG5H,IAAM,EAAImf,GACrDhX,EAAImK,EAAMihB,SAASjhB,EAAMq+C,SAAS96C,EAAGlN,GACjC2J,EAAMgvD,SAAShvD,EAAMgvD,SAAS9hB,EAAGltC,EAAMmU,UAAU+4B,IAAK,IAC1DzpC,EAAIzD,EAAMgvD,SAASn5D,EAAGmK,EAAMgvD,SAASvrD,EAAG5N,GAC1C,CACA,OAAO4N,CACT,EAKA2tD,GAAK,WAOH,IAAIr6D,EAAQiJ,EAAMjJ,IACdmiB,EAAQlZ,EAAMs9C,OAElB,SAAS+T,EAAI/wD,GAIX,IAMI5S,EAAEgI,EAAEJ,EANJe,EAAIiK,EAAElL,OACNS,EAAIyK,EAAE,GAAGlL,OAETyX,EAAI7M,EAAMk+C,MAAMroD,EAAGA,GAIvB,IAHAyK,EAAIN,EAAMguC,KAAK1tC,GAGX5K,EAAI,EAAGA,EAAIG,EAAGH,IAAI,CAIpB,IAHAmX,EAAEnX,GAAGA,GAAK0D,EAAKwM,KAAK7O,EAAImiB,EAAM7iB,GAAG+wB,KAAI,SAAS15B,GAC5C,OAAO4S,EAAE5S,GAAGgI,GAAK4K,EAAE5S,GAAGgI,EACxB,MACIhI,EAAI,EAAGA,EAAI2I,EAAG3I,IAChB4S,EAAE5S,GAAGgI,GAAK4K,EAAE5S,GAAGgI,GAAKmX,EAAEnX,GAAGA,GAE3B,IAAIJ,EAAII,EAAE,EAAGJ,EAAIO,EAAGP,IAIlB,IAHAuX,EAAEnX,GAAGJ,GAAKyB,EAAImiB,EAAM7iB,GAAG+wB,KAAI,SAAS15B,GAClC,OAAO4S,EAAE5S,GAAGgI,GAAK4K,EAAE5S,GAAG4H,EACxB,KACI5H,EAAI,EAAGA,EAAI2I,EAAG3I,IAChB4S,EAAE5S,GAAG4H,GAAKgL,EAAE5S,GAAG4H,GAAKgL,EAAE5S,GAAGgI,GAAGmX,EAAEnX,GAAGJ,EAGvC,CACA,MAAO,CAACgL,EAAGuM,EACb,CAEA,OAAOwkD,CACT,CAzCK,GA2CLC,MAAQ,WAIN,SAASC,EAAI1vC,GAEX,IAAI08B,GADJ18B,EAAI7hB,EAAMguC,KAAKnsB,IACFzsB,OACTwhB,EAAI5W,EAAMq+C,SAASE,GAgBvB,OAfAv+C,EAAMs9C,OAAOiB,EAAO,GAAI,GAAI,GAAGp0B,SAAQ,SAASz8B,GAC9CsS,EAAM++C,YACFnoC,EAAG,CAAE5C,IAAKtmB,GAAKsS,EAAM+uD,OAAO/uD,EAAMmgB,MAAMvJ,EAAG,CAAE5C,IAAKtmB,IAAMm0B,EAAEn0B,GAAGA,KACjEsS,EAAM++C,YACFl9B,EAAG,CAAE7N,IAAKtmB,GAAKsS,EAAM+uD,OAAO/uD,EAAMmgB,MAAM0B,EAAG,CAAE7N,IAAKtmB,IAAMm0B,EAAEn0B,GAAGA,KACjEsS,EAAMs9C,OAAO5vD,GAAGy8B,SAAQ,SAASz0B,GAC/B,IAAI7I,EAAImT,EAAMgvD,SAASntC,EAAEnsB,GAAGhI,IAAK,GAC7B8jE,EAAKxxD,EAAMmgB,MAAM0B,EAAG,CAAE7N,IAAKte,IAC3B+7D,EAAMzxD,EAAMgvD,SAAShvD,EAAMmgB,MAAM0B,EAAG,CAAE7N,IAAKtmB,IAAMb,GACrDmT,EAAM++C,YAAYl9B,EAAG,CAAE7N,IAAKte,GAAKsK,EAAM26B,IAAI62B,EAAIC,IAC/C,IAAIC,EAAK1xD,EAAMmgB,MAAMvJ,EAAG,CAAE5C,IAAKte,IAC3Bi8D,EAAM3xD,EAAMgvD,SAAShvD,EAAMmgB,MAAMvJ,EAAG,CAAE5C,IAAKtmB,IAAMb,GACrDmT,EAAM++C,YAAYnoC,EAAG,CAAE5C,IAAKte,GAAKsK,EAAM26B,IAAI+2B,EAAIC,GACjD,GACF,IACO/6C,CACT,CAEA,SAASg7C,EAAS/vC,EAAG5a,GACnB,IAAI4qD,GAAa,OACGt5D,IAAhB0O,EAAE,GAAG7R,SAEP6R,EAAIA,EAAEmgB,KAAI,SAAS9mB,GAAI,MAAO,CAACA,EAAG,IAClCuxD,GAAa,GAEf,IAAIT,EAAKpxD,EAAMoxD,GAAGvvC,GACdiwC,EAAIV,EAAG,GACP5lB,EAAI4lB,EAAG,GACPW,EAAQlwC,EAAE,GAAGzsB,OACb48D,EAAKhyD,EAAMmgB,MAAM2xC,EAAE,CAAClvC,IAAI,CAACzY,IAAI4nD,KAE7BE,EAAKV,EADAvxD,EAAMmgB,MAAMqrB,EAAE,CAACx3B,IAAI,CAAC7J,IAAI4nD,MAE7BG,EAAKlyD,EAAMmU,UAAU69C,QAELz5D,IAAjB25D,EAAG,GAAG98D,SACP88D,EAAK,CAACA,IAGR,IAAI5xD,EAAIN,EAAMgvD,SAAShvD,EAAMgvD,SAASiD,EAAIC,GAAKjrD,GAO/C,YALgB1O,IAAb+H,EAAElL,SACHkL,EAAI,CAAC,CAACA,KAIJuxD,EACKvxD,EAAE8mB,KAAI,SAAS15B,GAAI,OAAOA,EAAE,EAAG,IACjC4S,CACT,CAEA,OAAOsxD,CACT,CA3DQ,GA6DRO,OAAQ,SAAgB1uD,GAOtB,IANA,IAIO/V,EAAGgI,EAAGG,EAAG0uD,EAAG6N,EAAOC,EAAOnqD,EAJ7B4tC,EAAY,EACZz/C,EAAIoN,EAAErO,OACNkO,EAAItD,EAAMq+C,SAAShoD,EAAGA,GACtB4mC,EAAK,GAGY,IAAd6Y,GAAiB,CAItB,IAHAsc,EAAQ3uD,EAAE,GAAG,GACb5N,EAAI,EACJ0uD,EAAI,EACC72D,EAAI,EAAGA,EAAI2I,EAAG3I,IACjB,IAAKgI,EAAI,EAAGA,EAAIW,EAAGX,IACbhI,GAAKgI,GACH08D,EAAQh5D,EAAK6F,IAAIwE,EAAE/V,GAAGgI,MACxB08D,EAAQh5D,EAAK6F,IAAIwE,EAAE/V,GAAGgI,IACtBG,EAAInI,EACJ62D,EAAI7uD,GAmBZ,IAbE28D,EADE5uD,EAAE5N,GAAGA,KAAO4N,EAAE8gD,GAAGA,GACV9gD,EAAE5N,GAAG0uD,GAAK,EAAKnrD,EAAKgN,GAAK,GAAKhN,EAAKgN,GAAK,EAEzChN,EAAKiN,KAAK,EAAI5C,EAAE5N,GAAG0uD,IAAM9gD,EAAE5N,GAAGA,GAAK4N,EAAE8gD,GAAGA,KAAO,GACzDr8C,EAAIlI,EAAMq+C,SAAShoD,EAAGA,IACpBR,GAAGA,GAAKuD,EAAKoN,IAAI6rD,GACnBnqD,EAAErS,GAAG0uD,IAAMnrD,EAAKsN,IAAI2rD,GACpBnqD,EAAEq8C,GAAG1uD,GAAKuD,EAAKsN,IAAI2rD,GACnBnqD,EAAEq8C,GAAGA,GAAKnrD,EAAKoN,IAAI6rD,GAEnB/uD,EAAItD,EAAMgvD,SAAS1rD,EAAG4E,GAEtBzE,EADIzD,EAAMgvD,SAAShvD,EAAMgvD,SAAShvD,EAAMkiB,IAAIha,GAAIzE,GAAIyE,GAEpD4tC,EAAY,EACPpoD,EAAI,EAAGA,EAAI2I,EAAG3I,IACjB,IAAKgI,EAAI,EAAGA,EAAIW,EAAGX,IACbhI,GAAKgI,GAAK0D,EAAK6F,IAAIwE,EAAE/V,GAAGgI,IAAM,OAChCogD,EAAY,EAIpB,CACA,IAAKpoD,EAAI,EAAGA,EAAI2I,EAAG3I,IAAKuvC,EAAGloC,KAAK0O,EAAE/V,GAAGA,IAErC,MAAO,CAAC4V,EAAG25B,EACb,EAEAq1B,WAAY,SAAoBvlE,EAAG0Q,EAAG5H,EAAG08D,EAAKC,EAAK/pC,GACjD,IAAIgqC,EAAIC,EAAUC,EAClB,GAAc,IAAVlqC,EACF,KAAO8pC,GAAO18D,GAIZ28D,KAHAC,EAAKh1D,EAAI1Q,EAAEwlE,EAAKC,KAChBE,EAAKj1D,EAAI1Q,EAAEwlE,EAAM90D,EAAG+0D,EAAMC,KACD,EAEzBF,GAAY90D,EAGhB,GAAc,IAAVgrB,EACF,KAAO8pC,GAAO18D,GAMZ28D,KALAC,EAAKh1D,EAAI1Q,EAAEwlE,EAAKC,IAIG,GAHnBE,EAAKj1D,EAAI1Q,EAAEwlE,EAAM90D,EAAI,EAAG+0D,EAAMC,EAAK,IAGP,GAF5BE,EAAKl1D,EAAI1Q,EAAEwlE,EAAM90D,EAAI,EAAG+0D,EAAME,EAAK,IAC9Bj1D,EAAI1Q,EAAEwlE,EAAK90D,EAAG+0D,EAAMG,IACkB,EAE3CJ,GAAY90D,EAGhB,OAAO+0D,CACT,EAEAI,QAAS,SAAiB7lE,EAAG0W,EAAGwD,EAAGwhB,GAOjC,IANA,IAKIllB,EAAGklC,EAAI/yC,EAAGJ,EAAGshB,EALblpB,EAAI,EACJ+P,GAAKwJ,EAAIxD,GAAK,EACdnD,EAAI,GACJuyD,EAAK,GACLC,EAAI,GAEDplE,EAAI+6B,EAAQ,GAAG,CAEpB,IADA7R,EAAI7pB,EAAE0W,GACD/N,EAAI+N,EAAGnO,EAAI,EAAGI,GAAKuR,EAAGvR,GAAQ+H,EAAGnI,IAAKgL,EAAEhL,GAAKI,EAElD,IADA6N,EAAIjD,EAAElL,OACDM,EAAI,EAAGA,EAAI6N,EAAI,EAAG7N,IACrBkhB,IAAQlhB,EAAI,IAAO,EAAK,EAAI,GAAK3I,EAAEuT,EAAE5K,IAEvCkhB,EAAKnZ,EAAI,GAAMmZ,EAAI7pB,EAAEka,IACrB6rD,EAAEplE,GAAKkpB,EACPnZ,GAAK,EACL/P,GACF,CAGA,IAFA+6C,EAAKqqB,EAAE19D,OACPmO,EAAI,EACU,IAAPklC,GAAU,CACf,IAAK/yC,EAAI,EAAGA,EAAI+yC,EAAK,EAAG/yC,IACxBm9D,EAAGn9D,IAAO0D,EAAKyM,IAAI,EAAGtC,GAAMuvD,EAAEp9D,EAAI,GAAKo9D,EAAEp9D,KAAO0D,EAAKyM,IAAI,EAAGtC,GAAK,GACjEklC,EAAKoqB,EAAGz9D,OACR09D,EAAID,EACJA,EAAK,GACLtvD,GACF,CACA,OAAOuvD,CACT,EAEAC,WAAY,SAAoBv8C,EAAGzpB,EAAGuT,EAAG7C,GACvC,SAASu1D,EAAIx8C,EAAGlW,GAId,IAHA,IAEIzK,EAFAnI,EAAI,EACJ2I,EAAImgB,EAAEphB,OAEH1H,EAAI2I,EAAG3I,IACR8oB,EAAE9oB,KAAO4S,IAAGzK,EAAInI,GACtB,OAAOmI,CACT,CAMA,IALA,IAIIo9D,EAAI1C,EAAIhtD,EAAGE,EAAG/N,EAJdw9D,EAAQ95D,EAAK6F,IAAIqB,EAAIkW,EAAEw8C,EAAIx8C,EAAGlW,GAAK,IACnC5S,EAAI,EACJolE,EAAI,GACJD,EAAK,GAEFp1D,GAAKy1D,GACVD,EAAKD,EAAIx8C,EAAGlW,EAAI7C,GAChB8yD,EAAKyC,EAAIx8C,EAAGlW,GACZwyD,EAAEplE,IAAMX,EAAEkmE,GAAM,EAAIlmE,EAAEwjE,GAAMxjE,EAAE,EAAIwjE,EAAK0C,KAAQx1D,EAAIA,GACnDA,GAAK,EACL/P,IAIF,IAFA+V,EAAIqvD,EAAE19D,OACNmO,EAAI,EACQ,GAALE,GAAQ,CACb,IAAK/N,EAAI,EAAGA,EAAI+N,EAAI,EAAG/N,IACrBm9D,EAAGn9D,IAAO0D,EAAKyM,IAAI,EAAGtC,GAAMuvD,EAAEp9D,EAAI,GAAKo9D,EAAEp9D,KAAO0D,EAAKyM,IAAI,EAAGtC,GAAK,GACnEE,EAAIovD,EAAGz9D,OACP09D,EAAID,EACJA,EAAK,GACLtvD,GACF,CACA,OAAOuvD,CACT,EAEAK,QAAS,SAAiBpmE,EAAG0W,EAAGwD,EAAG5Q,GAQjC,IAPA,IAMIkN,EANA9F,GAAKwJ,EAAIxD,GAAKpN,EACdugB,EAAI7pB,EAAE0W,GACNnD,EAAI,GACJ5K,EAAI+N,EACJnO,EAAI,EACJ5H,EAAI,EAEDgI,GAAKuR,EAAGvR,GAAQ+H,EAAGnI,IACxBgL,EAAEhL,GAAKI,EAET,IADA6N,EAAIjD,EAAElL,OACC1H,EAAI6V,EAAI,EAAG7V,IAChBkpB,IAAOlpB,EAAI,IAAM,EAAK,EAAI,GAAKX,EAAEuT,EAAE5S,IAErC,OAAQ+P,EAAI,GAAMmZ,EAAI7pB,EAAEka,GAC1B,EAEAmsD,QAAS,SAAiB58C,EAAGxmB,EAAGqjE,EAAIv+D,GASlC,IARA,IAOIY,EAPAW,EAAImgB,EAAEphB,OACNS,EAAI,EACJnI,EAAI,EACJ6H,EAAI,GACJ+9D,EAAK,GACLzxC,EAAI,GACJC,EAAI,GAEDp0B,EAAI2I,EAAG3I,IAAK,CAEjB,IADA6H,EAAE7H,GAAK,EACFgI,EAAI,EAAGA,EAAIW,EAAGX,IACbhI,GAAKgI,IAAGH,EAAE7H,KAAOoH,EAAQ0hB,EAAE9gB,KAAO8gB,EAAE9oB,GAAK8oB,EAAE9gB,KAGjD,IADA49D,EAAG5lE,GAAK,EACHgI,EAAI,EAAGA,EAAIW,EAAGX,IACbhI,GAAKgI,IAAG49D,EAAG5lE,IAAM,GAAK8oB,EAAG9oB,GAAK8oB,EAAE9gB,KAEtCmsB,EAAEn0B,IAAM,EAAI,GAAKoH,EAAQ0hB,EAAE9oB,IAAM4lE,EAAG5lE,KAAO6H,EAAE7H,GAAK6H,EAAE7H,IACpDo0B,EAAEp0B,IAAMoH,EAAQ0hB,EAAE9oB,KAAO6H,EAAE7H,GAAK6H,EAAE7H,IAClCmI,GAAMgsB,EAAEn0B,GAAKsC,EAAEtC,GAAKo0B,EAAEp0B,GAAK2lE,EAAG3lE,EAChC,CACA,OAAOmI,CACT,EAEA09D,SAAU,SAAkB/8C,EAAGxmB,EAAG8E,GAKhC,IAJA,IAEIY,EAAGH,EAFHM,EAAI,EACJnI,EAAI,EAEJ2I,EAAImgB,EAAEphB,OACH1H,EAAI2I,EAAG3I,IAAK,CAEjB,IADA6H,EAAIvF,EAAEtC,GACDgI,EAAI,EAAGA,EAAIW,EAAGX,IAEbhI,GAAKgI,IAAGH,IAAMT,EAAQ0hB,EAAE9gB,KAAO8gB,EAAE9oB,GAAK8oB,EAAE9gB,KAG9CG,GAAKN,CACP,CACA,OAAOM,CACT,EAEA29D,aAAc,SAAsBh9C,EAAGxmB,EAAG8E,GAUxC,IATA,IACWY,EADPW,EAAImgB,EAAEphB,OACN1H,EAAI,EACJm0B,EAAI,GACJC,EAAI,GACJJ,EAAQ,GACR70B,EAAI,GACJ4Q,EAAI,GACJwJ,EAAI,GACJpJ,EAAI,GACDnQ,EAAI2I,EAAI,EAAG3I,IAChB+P,EAAE/P,GAAK8oB,EAAE9oB,EAAI,GAAK8oB,EAAE9oB,GAEtB,IADAg0B,EAAM,GAAK,EACNh0B,EAAI,EAAGA,EAAI2I,EAAI,EAAG3I,IACrBg0B,EAAMh0B,GAAM,EAAI+P,EAAE/P,IAAOsC,EAAEtC,EAAI,GAAKsC,EAAEtC,IACjC,EAAI+P,EAAE/P,EAAE,IAAOsC,EAAEtC,GAAKsC,EAAEtC,EAAE,IAEjC,IAAKA,EAAI,EAAGA,EAAI2I,EAAI,EAAG3I,IACrBm0B,EAAEn0B,GAAK,GACPo0B,EAAEp0B,GAAK,GACPm0B,EAAEn0B,GAAGA,EAAE,GAAK+P,EAAE/P,EAAE,GAChBm0B,EAAEn0B,GAAGA,GAAK,GAAK+P,EAAE/P,EAAI,GAAK+P,EAAE/P,IAC5Bm0B,EAAEn0B,GAAGA,EAAE,GAAK+P,EAAE/P,GACdo0B,EAAEp0B,GAAG,GAAKg0B,EAAMh0B,GAGlB,IADAb,EAAImT,EAAMgvD,SAAShvD,EAAMkiB,IAAIL,GAAIC,GAC5BpsB,EAAI,EAAGA,EAAIW,EAAI,EAAGX,IACrBuR,EAAEvR,IAAM1F,EAAE0F,EAAI,GAAK1F,EAAE0F,IAAM+H,EAAE/H,GAAK+H,EAAE/H,IAAM7I,EAAE6I,EAAI,GAAG,GAAK,EAAI7I,EAAE6I,GAAG,IAAM,EACvEmI,EAAEnI,IAAM7I,EAAE6I,EAAI,GAAG,GAAK7I,EAAE6I,GAAG,KAAO,EAAI+H,EAAE/H,IAE1C,IAAKA,EAAI,EAAGA,EAAIW,KACVmgB,EAAE9gB,GAAKZ,GADMY,KAInB,OAAO1F,EADP0F,GAAK,IACUZ,EAAQ0hB,EAAE9gB,IAAMuR,EAAEvR,GAAKsK,EAAMyzD,GAAG3+D,EAAM0hB,EAAE9gB,IACnD7I,EAAE6I,IAAMZ,EAAQ0hB,EAAE9gB,IAAMsK,EAAMyzD,GAAG3+D,EAAQ0hB,EAAE9gB,IAAMmI,EAAEnI,EACzD,EAEAg+D,iBAAkB,WAChB,MAAM,IAAIx4D,MAAM,uCAClB,EAEAy4D,IAAK,SAAan9C,GAChB,IAGI9gB,EAAGk+D,EAHHrwD,EAAIiT,EAAEphB,OACNiB,EAAImgB,EAAE,GAAGphB,OACT1H,EAAI,EAEJ8V,EAAI,GACJ0S,EAAI,GACJthB,EAAS,GACTi/D,EAAQ,GACR3wD,EAAI,GACJ4wD,EAAK,GACLhyC,EAAI,GACJ1L,EAAI,GACJM,EAAI,GACJq9C,EAAK,GACT,IAAKrmE,EAAI,EAAGA,EAAI6V,EAAG7V,IACjB8V,EAAE9V,GAAKsS,EAAMjJ,IAAIyf,EAAE9oB,IAAM2I,EAE3B,IAAK3I,EAAI,EAAGA,EAAI2I,EAAG3I,IAEjB,IADAo0B,EAAEp0B,GAAK,GACHgI,EAAI,EAAGA,EAAI6N,EAAG7N,IAChBosB,EAAEp0B,GAAGgI,GAAK8gB,EAAE9gB,GAAGhI,GAAK8V,EAAE9N,GAI1B,IADAosB,EAAI9hB,EAAMmU,UAAU2N,GACfp0B,EAAI,EAAGA,EAAI6V,EAAG7V,IAEjB,IADA0oB,EAAE1oB,GAAK,GACFgI,EAAI,EAAGA,EAAI6N,EAAG7N,IACjB0gB,EAAE1oB,GAAGgI,GAAMsK,EAAMovD,IAAI,CAACttC,EAAEp0B,IAAK,CAACo0B,EAAEpsB,MAASW,EAAI,GAOjD,IAHAqgB,GADA9hB,EAASoL,EAAMmyD,OAAO/7C,IACX,GACXF,EAAIthB,EAAO,GACXm/D,EAAK/zD,EAAMmU,UAAUuC,GAChBhpB,EAAI,EAAGA,EAAIwoB,EAAE9gB,OAAQ1H,IACxB,IAAKgI,EAAIhI,EAAGgI,EAAIwgB,EAAE9gB,OAAQM,IACrBwgB,EAAExoB,GAAKwoB,EAAExgB,KACVk+D,EAAQ19C,EAAExoB,GACVwoB,EAAExoB,GAAKwoB,EAAExgB,GACTwgB,EAAExgB,GAAKk+D,EACPC,EAAQE,EAAGrmE,GACXqmE,EAAGrmE,GAAKqmE,EAAGr+D,GACXq+D,EAAGr+D,GAAKm+D,GAKd,IADAC,EAAK9zD,EAAMmU,UAAU2N,GAChBp0B,EAAI,EAAGA,EAAI6V,EAAG7V,IAEjB,IADAwV,EAAExV,GAAK,GACFgI,EAAI,EAAGA,EAAIo+D,EAAG1+D,OAAQM,IACzBwN,EAAExV,GAAGgI,GAAKsK,EAAMovD,IAAI,CAAC2E,EAAGrmE,IAAK,CAAComE,EAAGp+D,KAGrC,MAAO,CAAC8gB,EAAGN,EAAG69C,EAAI7wD,EACpB,IAID,SAASo8C,GACR,IAAK,IAAI5xD,EAAI,EAAGA,EAAI4xD,EAAMlqD,OAAQ1H,KAAM,SAAS6xD,GAC/Cv/C,EAAMxS,GAAG+xD,GAAY,SAAS1kC,EAAKoZ,GACjC,IAAIyvB,EAAU3mD,KAEd,OAAIk3B,GACFurB,YAAW,WACTvrB,EAAK7T,KAAKsjC,EAAS1jD,EAAMxS,GAAG+xD,GAAUn/B,KAAKsjC,EAAS7oC,GACtD,GAAG,IACI9d,MAEiC,kBAA/BiD,EAAMu/C,GAAUxiD,KAAM8d,GACxB7a,EAAMu/C,GAAUxiD,KAAM8d,GAEtB7a,EAAMA,EAAMu/C,GAAUxiD,KAAM8d,GACvC,CACD,CAfuC,CAetCykC,EAAM5xD,GACT,CAjBA,CAiBC,8DAA8D6P,MAAM,KAErE,CA/8BA,CA+8BCyC,EAAO5G,MACR,SAAS4G,EAAO5G,GAEjB,IAAI+mB,EAAQ,GAAGA,MACXs8B,EAAWz8C,EAAM/S,MAAMwvD,SACvB/qC,EAAU1R,EAAM/S,MAAMykB,QAwT1B,SAASsiD,EAAwBvK,EAAIwK,EAAItK,EAAIuK,GAC3C,GAAIzK,EAAK,GAAKE,EAAK,GAAKF,GAAM,GAAKE,GAAM,EACvC,MAAM,IAAIzuD,MAAM,wDAElB,IAAIi5D,GAAU1K,EAAKwK,EAAKtK,EAAKuK,IAAOD,EAAKC,GAEzC,OAAQzK,EAAKE,GADJvwD,EAAKwM,KAAKuuD,GAAU,EAAIA,IAAY,EAAEF,EAAO,EAAEC,GAE1D,CA3TAl0D,EAAM64B,OAAO,CAIXu7B,OAAQ,WACN,IAAI7rD,EAAO4X,EAAMC,KAAKvY,WACtB,OAAI40C,EAASl0C,EAAK,KACRA,EAAK,GAAKA,EAAK,IAAMA,EAAK,IAE5BA,EAAK,GAAKvI,EAAMkhB,KAAK3Y,EAAK,KAAOvI,EAAM6mB,MAAMte,EAAK,GAAIA,EAAK,GACrE,EAMA8rD,MAAO,WACL,IACI3wD,EADA6E,EAAO4X,EAAMC,KAAKvY,WAEtB,OAAI6J,EAAQnJ,EAAK,KAEf7E,EAAI1D,EAAMo0D,OAAO7rD,EAAK,GAAGA,EAAK,GAAGA,EAAK,IAClB,IAAZA,EAAK,GACVvI,EAAM4lB,OAAO7D,KAAK3oB,EAAK6F,IAAIyE,GAAI,EAAG,GACG,EAArC1D,EAAM4lB,OAAO7D,KAAK3oB,EAAK6F,IAAIyE,GAAI,EAAG,IAEjC6E,EAAKnT,OAAS,GAEhBsO,EAAI1D,EAAMo0D,OAAO7rD,EAAK,GAAGA,EAAK,GAAGA,EAAK,IAClB,IAAZA,EAAK,GACVvI,EAAM4lB,OAAO7D,KAAK3oB,EAAK6F,IAAIyE,GAAG,EAAE,GACI,EAApC1D,EAAM4lB,OAAO7D,KAAK3oB,EAAK6F,IAAIyE,GAAG,EAAE,KAGnCA,EAAI6E,EAAK,GACW,IAAZA,EAAK,GACVvI,EAAM4lB,OAAO7D,KAAK3oB,EAAK6F,IAAIyE,GAAG,EAAE,GACG,EAAnC1D,EAAM4lB,OAAO7D,KAAK3oB,EAAK6F,IAAIyE,GAAG,EAAE,GAGzC,IAGF1D,EAAM64B,OAAO74B,EAAMxS,GAAI,CACrB4mE,OAAQ,SAAgBt/D,EAAOssD,GAC7B,OAAQtsD,EAAQiI,KAAKmkB,QAAUnkB,KAAK8pB,MAAMu6B,EAC5C,EAEAiT,MAAO,SAAev/D,EAAOw/D,EAAOlT,GAClC,IAAIgT,EAASh7D,EAAK6F,IAAIlC,KAAKq3D,OAAOt/D,EAAOssD,IACzC,OAAkB,IAAVkT,EACLt0D,EAAM4lB,OAAO7D,KAAKqyC,EAAQ,EAAG,GACK,EAAlCp0D,EAAM4lB,OAAO7D,KAAKqyC,EAAQ,EAAG,EAClC,IAIFp0D,EAAM64B,OAAO,CAIX07B,OAAQ,WACN,IAAIhsD,EAAO4X,EAAMC,KAAKvY,WACtB,OAAwB,IAAhBU,EAAKnT,QACTmT,EAAK,GAAKA,EAAK,KAAOA,EAAK,GAAKnP,EAAKwM,KAAK2C,EAAK,MAC/CA,EAAK,GAAKvI,EAAMkhB,KAAK3Y,EAAK,MAC1BvI,EAAM6mB,MAAMte,EAAK,IAAI,GAAQnP,EAAKwM,KAAK2C,EAAK,GAAGnT,QACrD,EAMAo/D,MAAO,WACL,IACID,EADAhsD,EAAO4X,EAAMC,KAAKvY,WAEtB,OAAoB,IAAhBU,EAAKnT,QACPm/D,EAASn7D,EAAK6F,IAAIe,EAAMu0D,OAAOhsD,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,KAC3C,IAAZA,EAAK,GACVvI,EAAM2pB,SAAS5H,KAAKwyC,EAAQhsD,EAAK,GAAG,GACG,EAAvCvI,EAAM2pB,SAAS5H,KAAKwyC,EAAQhsD,EAAK,GAAG,IAErCk0C,EAASl0C,EAAK,KAChBgsD,EAASn7D,EAAK6F,IAAIsJ,EAAK,IACJ,GAAXA,EAAK,GACVvI,EAAM2pB,SAAS5H,KAAKwyC,EAAQhsD,EAAK,GAAG,GACK,EAAzCvI,EAAM2pB,SAAS5H,KAAKwyC,EAAQhsD,EAAK,GAAG,KAEzCgsD,EAASn7D,EAAK6F,IAAIe,EAAMu0D,OAAOhsD,EAAK,GAAIA,EAAK,KAC1B,GAAXA,EAAK,GACVvI,EAAM2pB,SAAS5H,KAAKwyC,EAAQhsD,EAAK,GAAGnT,OAAO,GACK,EAAhD4K,EAAM2pB,SAAS5H,KAAKwyC,EAAQhsD,EAAK,GAAGnT,OAAO,GAChD,IAGF4K,EAAM64B,OAAO74B,EAAMxS,GAAI,CACrB+mE,OAAQ,SAAgBz/D,GACtB,OAAQA,EAAQiI,KAAKmkB,SAAWnkB,KAAK8pB,OAAM,GAAQztB,EAAKwM,KAAK7I,KAAKomB,QACpE,EAEAqxC,MAAO,SAAe1/D,EAAOw/D,GAC3B,OAAkB,IAAVA,EACL,EAAIt0D,EAAM2pB,SAAS5H,IAAI3oB,EAAK6F,IAAIlC,KAAKw3D,OAAOz/D,IAASiI,KAAKomB,OAAO,GACA,EAAjEnjB,EAAM2pB,SAAS5H,KAAK3oB,EAAK6F,IAAIlC,KAAKw3D,OAAOz/D,IAASiI,KAAKomB,OAAO,EACnE,IAIFnjB,EAAM64B,OAAO,CAKX47B,YAAa,WACX,IACAC,EAAQhK,EAAQiK,EAAUC,EAAcC,EAASC,EAAUpnE,EAAGgI,EAD1D6S,EAAO4X,EAAMC,KAAKvY,WAEtB,GAAoB,IAAhBU,EAAKnT,OAAc,CAErB,IADAy/D,EAAU,IAAIr3D,MAAM+K,EAAK,GAAGnT,QACvB1H,EAAI,EAAGA,EAAI6a,EAAK,GAAGnT,OAAQ1H,IAC9BmnE,EAAQnnE,GAAK6a,EAAK,GAAG7a,GAEvB6a,EAAOssD,CACT,CAGA,IADAnK,EAAS,IAAIltD,MACR9P,EAAI,EAAGA,EAAI6a,EAAKnT,OAAQ1H,IAC3Bg9D,EAASA,EAAOv0D,OAAOoS,EAAK7a,IAK9B,IAHAinE,EAAW30D,EAAMkhB,KAAKwpC,GAEtBgK,EAAS,EACJhnE,EAAI,EAAGA,EAAI6a,EAAKnT,OAAQ1H,IAC3BgnE,GAAkBnsD,EAAK7a,GAAG0H,OAASgE,EAAKyM,IAAI7F,EAAMkhB,KAAK3Y,EAAK7a,IAAMinE,EAAU,GAK9E,IAHAD,GAAWnsD,EAAKnT,OAAS,EAEzB0/D,EAAW,EACNpnE,EAAI,EAAGA,EAAI6a,EAAKnT,OAAQ1H,IAE3B,IADAknE,EAAe50D,EAAMkhB,KAAK3Y,EAAK7a,IAC1BgI,EAAI,EAAGA,EAAI6S,EAAK7a,GAAG0H,OAAQM,IAC9Bo/D,GAAY17D,EAAKyM,IAAI0C,EAAK7a,GAAGgI,GAAKk/D,EAAc,GAIpD,OAAOF,GADPI,GAAapK,EAAOt1D,OAASmT,EAAKnT,OAEpC,EAKA2/D,WAAY,WACV,IACAlK,EAAKC,EAAKz0D,EAAG3I,EADT6a,EAAO4X,EAAMC,KAAKvY,WAEtB,GAAI40C,EAASl0C,EAAK,IAChB,OAAO,EAAIvI,EAAM0kB,SAAS3C,IAAIxZ,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAEvD,IAAIksD,EAAcz0D,EAAMy0D,YAAYlsD,GAGpC,IAFAsiD,EAAMtiD,EAAKnT,OAAS,EACpBiB,EAAI,EACC3I,EAAI,EAAGA,EAAI6a,EAAKnT,OAAQ1H,IAC3B2I,GAAQkS,EAAK7a,GAAG0H,OAGlB,OADA01D,EAAMz0D,EAAIw0D,EAAM,EACT,EAAI7qD,EAAM0kB,SAAS3C,IAAI0yC,EAAa5J,EAAKC,EAClD,EAEAkK,MAAO,SAAeC,EAAQpK,EAAKC,GACjC,OAAO,EAAI9qD,EAAM0kB,SAAS3C,IAAIkzC,EAAQpK,EAAKC,EAC7C,IAGF9qD,EAAM64B,OAAO74B,EAAMxS,GAAI,CACrBinE,YAAa,WACX,OAAOz0D,EAAMy0D,YAAY13D,KAAKigD,UAChC,EAEAkY,UAAW,WACT,IACIxnE,EADA2I,EAAI,EAER,IAAK3I,EAAI,EAAGA,EAAIqP,KAAK3H,OAAQ1H,IAC3B2I,GAAQ0G,KAAKrP,GAAG0H,OAElB,OAAO4K,EAAMg1D,MAAMj4D,KAAK03D,cAAe13D,KAAK3H,OAAS,EAAGiB,EAAI0G,KAAK3H,OACnE,IAIF4K,EAAM64B,OAAO,CAIXs8B,OAAQ,WACN,IACIjxC,EAAOC,EAAO8vC,EAAIC,EAAI54D,EADtBiN,EAAO4X,EAAMC,KAAKvY,WAetB,OAbI40C,EAASl0C,EAAK,KACd2b,EAAQ3b,EAAK,GACb4b,EAAQ5b,EAAK,GACb0rD,EAAK1rD,EAAK,GACV2rD,EAAK3rD,EAAK,GACVjN,EAAKiN,EAAK,KAEV2b,EAAQlkB,EAAMkhB,KAAK3Y,EAAK,IACxB4b,EAAQnkB,EAAMkhB,KAAK3Y,EAAK,IACxB0rD,EAAK1rD,EAAK,GAAGnT,OACb8+D,EAAK3rD,EAAK,GAAGnT,OACbkG,EAAKiN,EAAK,IAEPnP,EAAK6F,IAAIilB,EAAQC,IAAU7oB,EAAKlC,EAAKwM,MAAM,EAAIquD,EAAK,EAAIC,GAAM,GACvE,EAMAkB,MAAO,WACL,IAEID,EAFA5sD,EAAO4X,EAAMC,KAAKvY,WAGF,IAAhBU,EAAKnT,QACP+/D,EAAS5sD,EAAK,GACdA,EAAOA,EAAK4X,MAAM,IACO,IAAhB5X,EAAKnT,QACd+/D,EAASn1D,EAAMm1D,OAAO5sD,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC/DA,EAAOA,EAAK4X,MAAM,KAElBg1C,EAASn1D,EAAMm1D,OAAO5sD,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC7CA,EAAOA,EAAK4X,MAAM,IAGpB,IAAI9pB,EAAIkS,EAAK,GACTjT,EAAIiT,EAAK,GAEb,OAAO,EAAIvI,EAAMktD,MAAMnrC,IAAIozC,EAAQ7/D,EAAGe,EAAIf,EAC5C,EAEA+/D,SAAU,SAAkBr2C,GAM1B,IALA,IAAI1jB,EAAK0E,EAAMyhD,YAAYziC,GACvBs2C,EAAQt2C,EAAOoI,KAAI,SAAUuH,GAAM,OAAO3uB,EAAMkhB,KAAKyN,EAAK,IAC1Dt4B,EAAI2oB,EAAOoP,QAAO,SAAU/3B,EAAGs4B,GAAM,OAAOt4B,EAAIs4B,EAAIv5B,MAAO,GAAG,GAE9D4uB,EAAU,GACLt2B,EAAI,EAAGA,EAAIsxB,EAAO5pB,SAAU1H,EACjC,IAAK,IAAIgI,EAAIhI,EAAI,EAAGgI,EAAIspB,EAAO5pB,SAAUM,EAAG,CACxC,IAAIG,EAAImK,EAAMo1D,MAAME,EAAM5nE,GAAI4nE,EAAM5/D,GAAIspB,EAAOtxB,GAAG0H,OAAQ4pB,EAAOtpB,GAAGN,OAAQkG,EAAIjF,EAAG2oB,EAAO5pB,QAC1F4uB,EAAQjvB,KAAK,CAAC,CAACrH,EAAGgI,GAAIG,GAC1B,CAGJ,OAAOmuB,CACT,IAIFhkB,EAAM64B,OAAO,CAIXzV,SAAU,WACR,IAEAmyC,EAFIhtD,EAAO4X,EAAMC,KAAKvY,WACtBymD,EAAM,IAAI9wD,MAAM,GAWhB,OARE+3D,EADkB,IAAhBhtD,EAAKnT,OACEgE,EAAK6F,IAAIe,EAAM4lB,OAAO1D,IAAI3Z,EAAK,GAAK,EAAG,EAAG,GACjCA,EAAK,GAAKnP,EAAKwM,KAAK2C,EAAK,KAElCnP,EAAK6F,IAAIe,EAAM4lB,OAAO1D,IAAI3Z,EAAK,GAAK,EAAG,EAAG,GACjCvI,EAAM6mB,MAAMte,EAAK,IAAMnP,EAAKwM,KAAK2C,EAAK,GAAGnT,SAE7Dk5D,EAAI,GAAK/lD,EAAK,GAAKgtD,EACnBjH,EAAI,GAAK/lD,EAAK,GAAKgtD,EACZjH,CACT,EAKAjrC,IAAK,WACH,IAEAkyC,EAFIhtD,EAAO4X,EAAMC,KAAKvY,WACtBymD,EAAM,IAAI9wD,MAAM,GAWhB,OARE+3D,EADkB,IAAhBhtD,EAAKnT,OACEgE,EAAK6F,IAAIe,EAAM2pB,SAASzH,IAAI3Z,EAAK,GAAK,EAAGA,EAAK,GAAK,GAC1CA,EAAK,GAAKnP,EAAKwM,KAAK2C,EAAK,KAElCnP,EAAK6F,IAAIe,EAAM2pB,SAASzH,IAAI3Z,EAAK,GAAK,EAAGA,EAAK,GAAGnT,OAAS,GACjD4K,EAAM6mB,MAAMte,EAAK,IAAI,GAAQnP,EAAKwM,KAAK2C,EAAK,GAAGnT,SAEnEk5D,EAAI,GAAK/lD,EAAK,GAAKgtD,EACnBjH,EAAI,GAAK/lD,EAAK,GAAKgtD,EACZjH,CACT,EAEAkH,YAAa,SAAqBC,EAAQ/zC,GACxC,OAAO+zC,EAAS/zC,CAClB,IAGF1hB,EAAM64B,OAAO74B,EAAMxS,GAAI,CACrB41B,SAAU,SAAkBtuB,EAAO4sB,GACjC,OAAO1hB,EAAMojB,SAAStuB,EAAO4sB,EAAO3kB,KAAKigD,UAC3C,EAEA35B,IAAK,SAAavuB,EAAO4sB,GACvB,OAAO1hB,EAAMqjB,IAAIvuB,EAAO4sB,EAAO3kB,KAAKigD,UACtC,IAcFh9C,EAAM64B,OAAO74B,EAAMxS,GAAI,CACrBkoE,gCAAiC,SAAyCjM,EAAIwK,EAAItK,EAAIuK,GACpF,IAAIxwD,EAAIswD,EAAwBvK,EAAIwK,EAAItK,EAAIuK,GAC5C,OAAOl0D,EAAMq0D,MAAM3wD,EAAG,EACxB,EAEAiyD,gCAAiC,SAAyClM,EAAIwK,EAAItK,EAAIuK,GACpF,IAAIxwD,EAAIswD,EAAwBvK,EAAIwK,EAAItK,EAAIuK,GAC5C,OAAOl0D,EAAMq0D,MAAM3wD,EAAG,EACxB,GAGD,CAlVA,CAkVC1D,EAAO5G,MACT4G,EAAM41D,OAAU,WACd,SAASC,EAAYC,GACnB,IAAIC,EAAYD,EAAK,GAAG1gE,OAOxB,OANgB4K,EAAMs9C,OAAOyY,GAAW3uC,KAAI,SAAS4uC,GACnD,IAAIC,EACAj2D,EAAMs9C,OAAOyY,GAAWn7C,QAAO,SAASltB,GAAG,OAAOA,IAAIsoE,CAAW,IACrE,OAAOE,EAAIl2D,EAAM4iB,IAAIkzC,EAAME,GAAa5uC,KAAI,SAAS9mB,GAAI,OAAOA,EAAE,EAAG,IAC1DN,EAAM4iB,IAAIkzC,EAAMG,GAC7B,GAEF,CAMA,SAASC,EAAIC,EAAOL,GAClB,IAAIM,EAAOD,EAAM/gE,OACbihE,EAAWP,EAAK,GAAG1gE,OAAS,EAC5BkhE,EAAWF,EAAKC,EAAW,EAC3BE,EAAOv2D,EAAMsxD,MAAMwE,EAAMK,GACzBK,EACAx2D,EAAMgvD,SAAS8G,EAAMS,EAAKnvC,KAAI,SAAS9mB,GAAK,MAAO,CAACA,EAAG,KAClD8mB,KAAI,SAASvxB,GAAK,OAAOA,EAAE,EAAG,IACnC4gE,EAAQz2D,EAAMihB,SAASk1C,EAAOK,GAC9BE,EAAO12D,EAAMkhB,KAAKi1C,GAKlBQ,EAAM32D,EAAMjJ,IAAIy/D,EAAQpvC,KAAI,SAASr6B,GACvC,OAAOqM,KAAKyM,IAAI9Y,EAAI2pE,EAAM,EAC5B,KACIE,EAAM52D,EAAMjJ,IAAIo/D,EAAM/uC,KAAI,SAASzjB,EAAGjW,GACxC,OAAO0L,KAAKyM,IAAIlC,EAAI6yD,EAAQ9oE,GAAI,EAClC,KACImpE,EAAMF,EAAMC,EAEhB,MAAO,CACHd,KAAKA,EACLK,MAAMA,EACNC,KAAKA,EACLC,SAASA,EACTC,SAASA,EACTC,KAAKA,EACLC,QAAQA,EACRC,MAAMA,EACNC,KAAKA,EACLG,IAAIA,EACJF,IAAIA,EACJC,IAAIA,EACJE,GAdMH,EAAME,EAgBlB,CAIA,SAASE,EAAOC,GACd,IAAIC,EAAepB,EAAYmB,EAAMlB,MAEjCoB,EAAW99D,KAAKwM,KAAKoxD,EAAMJ,IAAOI,EAAMV,UACxCa,EAAYF,EAAa7vC,KAAI,SAASgwC,GACxC,IAAIP,EAAMO,EAAIP,IACVC,EAAKM,EAAIN,GACb,OAAOI,EAAW99D,KAAKwM,KAAKixD,GAAO,EAAIC,GACzC,IACIO,EAAaL,EAAMT,KAAKnvC,KAAI,SAASmvC,EAAM7oE,GAC7C,OAAQ6oE,EAAO,GAAKY,EAAUzpE,EAChC,IACI4pE,EAASD,EAAWjwC,KAAI,SAASzf,GACnC,IAAI4vD,EAAUv3D,EAAM2pB,SAAS5H,IAAIpa,EAAGqvD,EAAMV,UAC1C,OAAiD,GAAzCiB,EAAU,GAAM,EAAIA,EAAUA,EACxC,IACI1qE,EAAImT,EAAM2pB,SAASzH,IAAI,KAAO80C,EAAMV,UACpCkB,EAAaR,EAAMT,KAAKnvC,KAAI,SAASmvC,EAAM7oE,GAC7C,IAAImQ,EAAIhR,EAAIsqE,EAAUzpE,GACtB,MAAO,CAAC6oE,EAAO14D,EAAG04D,EAAO14D,EAC3B,IACA,MAAO,CACH45D,GAAIN,EACJxvD,EAAG0vD,EACHxhE,EAAGyhE,EACHJ,SAAUA,EACVM,WAAYA,EAElB,CAEA,SAASE,EAAOV,GACd,IAEoB12D,EAAG2zD,EAAIC,EAFvByD,EACCX,EAAMF,GAAKE,EAAMX,WAAc,EAAIW,EAAMF,IAAME,EAAMV,UAK1D,MAAO,CAAEqB,YAAaA,EAAalC,OADtB,GAHOn1D,EAGEq3D,EAHC1D,EAGY+C,EAAMX,SAHdnC,EAGwB8C,EAAMV,SAFhDt2D,EAAM2hB,KAAKI,IAAIzhB,GAAK4zD,EAAKD,EAAK3zD,GAAI2zD,EAAK,EAAGC,EAAK,IAI1D,CAEA,SAAS0D,EAASzB,EAAOL,GACvB,IAAIkB,EAAQd,EAAIC,EAAML,GAClBtB,EAAQuC,EAAOC,GACfhC,EAAQ0C,EAAOV,GAGfa,EACA,GAAK,EAAIb,EAAMF,MAAQE,EAAMZ,KAAO,GAAMY,EAAMV,UAIpD,OAHAU,EAAMrvD,EAAI6sD,EACVwC,EAAMjqE,EAAIioE,EACVgC,EAAMa,UAAYA,EACXb,CACT,CAEA,MAAO,CAAEd,IAAK0B,EAChB,CAhHgB,GA4HhB53D,EAAM64B,OAAO,CACXi/B,aAAc,WAMZ,IADA,IAAIC,EAAa,IAAIv6D,MAAMqK,UAAUzS,QAC7B1H,EAAE,EAAEA,EAAEma,UAAUzS,OAAO1H,IAAI,CACjC,IAAIiH,EAAQ,CAAC,GACbojE,EAAWrqE,GAAIiH,EAAMwB,OAAO0R,UAAUna,GACxC,CACA,OAAOsS,EAAM+3D,EAEf,EAEAC,cAAe,WAIb,IADA,IAAID,EAAa,IAAIv6D,MAAMqK,UAAU,GAAGzS,QAChC1H,EAAE,EAAEA,EAAEma,UAAU,GAAGzS,OAAO1H,IAAI,CACpC,IAAIiH,EAAQ,CAAC,GACbojE,EAAWrqE,GAAIiH,EAAMwB,OAAO0R,UAAU,GAAGna,GAC3C,CACA,OAAOsS,EAAM+3D,EAEf,EAEAE,cAAe,SAAuBC,GAGpC,IADA,IAAIC,EAAO,IAAI36D,MAAM06D,EAAK9iE,QAClB1H,EAAE,EAAEA,EAAEwqE,EAAK9iE,OAAO1H,IACxByqE,EAAKzqE,GAAKwqE,EAAKxqE,GAEjB,OAAOsS,EAAMg4D,cAAcG,EAE7B,EAEAC,aAAc,SAAsBzjE,GAClC,OAAOqL,EAAMrL,GAAOwf,WACtB,EAEAkkD,cAAe,SAAuBH,GACpC,OAAOA,EAAK/jD,WACd,EAEAmkD,WAAY,SAAoBz2C,EAAEC,GAChC,IAAIp0B,EAAGgI,EAAGJ,EAAGV,EAAQmC,EACrB,GAAI8qB,EAAEsB,QAAUrB,EAAE8G,OAAQ,CACxB,GAAG9G,EAAE8G,OAAO,EAAE,CAEZ,IADAh0B,EAAS,GACJlH,EAAI,EAAGA,EAAIm0B,EAAE+G,OAAQl7B,IAExB,IADAkH,EAAOlH,GAAK,GACPgI,EAAI,EAAGA,EAAIosB,EAAEqB,OAAQztB,IAAK,CAE7B,IADAqB,EAAM,EACDzB,EAAI,EAAGA,EAAIusB,EAAEsB,OAAQ7tB,IACxByB,GAAO8qB,EAAEm7B,UAAUtvD,GAAG4H,GAAKwsB,EAAEk7B,UAAU1nD,GAAGI,GAE5Cd,EAAOlH,GAAGgI,GAAKqB,CACjB,CAEF,OAAOiJ,EAAMpL,EACf,CAEA,IADAA,EAAS,GACJlH,EAAI,EAAGA,EAAIm0B,EAAE+G,OAAQl7B,IAExB,IADAkH,EAAOlH,GAAK,GACPgI,EAAI,EAAGA,EAAIosB,EAAEqB,OAAQztB,IAAK,CAE7B,IADAqB,EAAM,EACDzB,EAAI,EAAGA,EAAIusB,EAAEsB,OAAQ7tB,IACxByB,GAAO8qB,EAAEm7B,UAAUtvD,GAAG4H,GAAKwsB,EAAEk7B,UAAUtnD,GAEzCd,EAAOlH,GAAGgI,GAAKqB,CACjB,CAEF,OAAOiJ,EAAMpL,EACf,CACF,EAIA2jE,QAAS,SAAiBC,EAAMC,GAG9B,IAAIC,EAAW14D,EAAM24D,YAAYH,GAE7BI,EAAUJ,EAAMrkD,YAChB2uB,EAAO9iC,EAAMs4D,WAAWt4D,EAAM04D,GAAUE,GAC5C,OAAO54D,EAAMs4D,WAAWx1B,EAAK21B,EAE/B,EAEAI,SAAU,SAAkBL,EAAMC,EAAMnE,GACtC,IAAI3yC,EAAO3hB,EAAMu4D,QAAQC,EAAMC,GAE3BK,EAAU,CACdA,MAAgB,CAAC,GACbC,EAAW/4D,EAAM+4D,SAASP,EAAO72C,GACrCm3C,EAAQE,KAAOD,EACf,IAAIE,EAAWR,EAAMv3C,OACrB43C,EAAQI,MAAMC,UAAYn5D,EAAMm5D,UAAUV,EAAOM,GAEjDD,EAAQI,MAAME,IAAMp5D,EAAMo5D,IAAIL,EAAUE,GACxCH,EAAQI,MAAMG,IAAMP,EAAQI,MAAME,KAAOZ,EAAM,GAAGpjE,OAAS,GAE3D0jE,EAAQI,MAAMI,IAAMt5D,EAAMs5D,IAAIb,EAAOM,GACrCD,EAAQI,MAAMK,IACVT,EAAQI,MAAMI,KAAOb,EAAMrjE,QAAUojE,EAAM,GAAGpjE,OAAS,GAAK,GAEhE0jE,EAAQI,MAAMM,IAAMx5D,EAAMw5D,IAAIf,EAAOQ,GACrCH,EAAQI,MAAMO,IAAMX,EAAQI,MAAMM,KAAOf,EAAMrjE,OAAS,GAExD0jE,EAAQI,MAAMQ,GAAK,EAAKZ,EAAQI,MAAMI,IAAMR,EAAQI,MAAMM,IACtDV,EAAQI,MAAMQ,GAAK,IAAGZ,EAAQI,MAAMQ,GAAK,GAE7CZ,EAAQI,MAAMS,OAASb,EAAQI,MAAMG,IAAMP,EAAQI,MAAMK,IACzDT,EAAQI,MAAMzD,OACVz1D,EAAM+0D,WAAW+D,EAAQI,MAAMS,OACdnB,EAAM,GAAGpjE,OAAS,EAClBqjE,EAAMrjE,QAAUojE,EAAM,GAAGpjE,OAAS,GAAK,GAE5D0jE,EAAQI,MAAMU,KAAOxgE,KAAKwM,KAAKkzD,EAAQI,MAAMK,KAE7CT,EAAQI,MAAMW,MAAQ,EAAKf,EAAQI,MAAMK,IAAMT,EAAQI,MAAMO,IACzDX,EAAQI,MAAMW,MAAQ,IAAGf,EAAQI,MAAMW,MAAQ,GAEnDf,EAAQvkE,MAAQ,IAAIiJ,MAAMg7D,EAAM,GAAGpjE,QAInC,IAHA,IACI0kE,EAAKC,EAAIxP,EADTyP,EAAQh6D,EAAM24D,YAAYH,GAGtB9qE,EAAE,EAAGA,EAAEi0B,EAAKvsB,OAAO1H,IACzBosE,EAAI1gE,KAAKwM,KAAKkzD,EAAQI,MAAMK,IAAMngE,KAAK6F,IAAI+6D,EAAMtsE,GAAGA,KACpDqsE,EAAI3gE,KAAK6F,IAAI0iB,EAAKj0B,GAAKosE,GACvBvP,EAAIvqD,EAAMw0D,MAAMuF,EAAItB,EAAMrjE,OAASojE,EAAM,GAAGpjE,OAAS,EAAGk/D,GAExDwE,EAAQvkE,MAAM7G,GAAG,CAACi0B,EAAKj0B,GAAIosE,EAAKC,EAAIxP,GAItC,OADAuO,EAAQP,QAAU52C,EACXm3C,CACT,EAEAmB,SAAU,SAAkBzB,GAC1B,OAAOx4D,EAAMs4D,WAAWE,EAAMrkD,YAAYqkD,EAC5C,EAGAG,YAAa,SAAqBH,GAChC,IAAI0B,EAAQl6D,EAAMs4D,WAAWE,EAAMrkD,YAAYqkD,GAE/C,OADex4D,EAAMkiB,IAAIg4C,EAE3B,EAEAnB,SAAU,SAAkBP,EAAO72C,GACjC,IAAIq3C,EAAOh5D,EAAMs4D,WAAWE,EAAO72C,GACnC,OAAO,IAAI3hB,EAAMg5D,EACnB,EAEAG,UAAW,SAAmBV,EAAOM,GACnC,OAAO/4D,EAAMm6D,eAAe1B,EAAOM,EACrC,EAEAK,IAAK,SAAaL,EAAUE,GAE1B,IADA,IAAIG,EAAM,EACF1rE,EAAI,EAAGA,EAAIqrE,EAAS3jE,OAAQ1H,IAClC0rE,GAAOhgE,KAAKyM,IAAIkzD,EAASrrE,GAAKurE,EAAU,GAE1C,OAAOG,CACT,EAEAE,IAAK,SAAab,EAAOM,GAEvB,IADA,IAAIO,EAAM,EACF5rE,EAAI,EAAGA,EAAI+qE,EAAMrjE,OAAQ1H,IAC/B4rE,GAAOlgE,KAAKyM,IAAI4yD,EAAM/qE,GAAKqrE,EAASrrE,GAAI,GAE1C,OAAO4rE,CACT,EAEAE,IAAK,SAAaf,EAAOQ,GAEvB,IADA,IAAIO,EAAM,EACF9rE,EAAI,EAAGA,EAAI+qE,EAAMrjE,OAAQ1H,IAC/B8rE,GAAOpgE,KAAKyM,IAAI4yD,EAAM/qE,GAAKurE,EAAU,GAEvC,OAAOO,CACT,EAEAW,eAAgB,SAAwBt4C,EAAEC,GAExC,IADA,IAAIwsC,EAAM,IAAI9wD,MAAMqkB,EAAEzsB,QACd1H,EAAE,EAAEA,EAAEm0B,EAAEzsB,OAAO1H,IAAI,CACzB4gE,EAAI5gE,GAAK,IAAI8P,MAAMqkB,EAAEn0B,GAAG0H,QACxB,IAAI,IAAIM,EAAE,EAAEA,EAAEmsB,EAAEn0B,GAAG0H,OAAOM,IACxB44D,EAAI5gE,GAAGgI,GAAGmsB,EAAEn0B,GAAGgI,GAAGosB,EAAEp0B,GAAGgI,EAE3B,CACA,OAAOsK,EAAMsuD,EACf,IAGAtuD,EAAMA,MAAQA,EAEPA,CACT,CA34JyBsnC,oBCAzB,IAAIL,EAASr6C,EAAQ,OACjBwtE,EAASnzB,EAAOmzB,OAGpB,SAASC,EAAWC,EAAKC,GACvB,IAAK,IAAI7+C,KAAO4+C,EACdC,EAAI7+C,GAAO4+C,EAAI5+C,EAEnB,CASA,SAAS8+C,EAAY3/C,EAAK4/C,EAAkBrlE,GAC1C,OAAOglE,EAAOv/C,EAAK4/C,EAAkBrlE,EACvC,CAVIglE,EAAOx2D,MAAQw2D,EAAOM,OAASN,EAAOO,aAAeP,EAAOQ,gBAC9D1mC,EAAOlnC,QAAUi6C,GAGjBozB,EAAUpzB,EAAQj6C,GAClBA,EAAQotE,OAASI,GAOnBA,EAAWt6C,UAAYkS,OAAO6L,OAAOm8B,EAAOl6C,WAG5Cm6C,EAAUD,EAAQI,GAElBA,EAAW52D,KAAO,SAAUiX,EAAK4/C,EAAkBrlE,GACjD,GAAmB,kBAARylB,EACT,MAAM,IAAIsvB,UAAU,iCAEtB,OAAOiwB,EAAOv/C,EAAK4/C,EAAkBrlE,EACvC,EAEAolE,EAAWE,MAAQ,SAAUnc,EAAMsc,EAAMC,GACvC,GAAoB,kBAATvc,EACT,MAAM,IAAIpU,UAAU,6BAEtB,IAAI4wB,EAAMX,EAAO7b,GAUjB,YATahmD,IAATsiE,EACsB,kBAAbC,EACTC,EAAIF,KAAKA,EAAMC,GAEfC,EAAIF,KAAKA,GAGXE,EAAIF,KAAK,GAEJE,CACT,EAEAP,EAAWG,YAAc,SAAUpc,GACjC,GAAoB,kBAATA,EACT,MAAM,IAAIpU,UAAU,6BAEtB,OAAOiwB,EAAO7b,EAChB,EAEAic,EAAWI,gBAAkB,SAAUrc,GACrC,GAAoB,kBAATA,EACT,MAAM,IAAIpU,UAAU,6BAEtB,OAAOlD,EAAO+zB,WAAWzc,EAC3B,mBChEA,IAAI6b,EAASxtE,EAAAA,OAAAA,OAGb,SAASquE,EAAMC,EAAWC,GACxBp+D,KAAKq+D,OAAShB,EAAOM,MAAMQ,GAC3Bn+D,KAAKs+D,WAAaF,EAClBp+D,KAAKu+D,WAAaJ,EAClBn+D,KAAKw+D,KAAO,CACd,CAEAN,EAAK/6C,UAAUiY,OAAS,SAAU7nB,EAAMkrD,GAClB,kBAATlrD,IACTkrD,EAAMA,GAAO,OACblrD,EAAO8pD,EAAOx2D,KAAK0M,EAAMkrD,IAQ3B,IALA,IAAIC,EAAQ1+D,KAAKq+D,OACbF,EAAYn+D,KAAKu+D,WACjBlmE,EAASkb,EAAKlb,OACdsmE,EAAQ3+D,KAAKw+D,KAER5mB,EAAS,EAAGA,EAASv/C,GAAS,CAIrC,IAHA,IAAIumE,EAAWD,EAAQR,EACnBU,EAAYxiE,KAAKiD,IAAIjH,EAASu/C,EAAQumB,EAAYS,GAE7CjuE,EAAI,EAAGA,EAAIkuE,EAAWluE,IAC7B+tE,EAAME,EAAWjuE,GAAK4iB,EAAKqkC,EAASjnD,GAItCinD,GAAUinB,GADVF,GAASE,GAGIV,IAAe,GAC1Bn+D,KAAK8+D,QAAQJ,EAEjB,CAGA,OADA1+D,KAAKw+D,MAAQnmE,EACN2H,IACT,EAEAk+D,EAAK/6C,UAAUkY,OAAS,SAAUojC,GAChC,IAAIM,EAAM/+D,KAAKw+D,KAAOx+D,KAAKu+D,WAE3Bv+D,KAAKq+D,OAAOU,GAAO,IAInB/+D,KAAKq+D,OAAOP,KAAK,EAAGiB,EAAM,GAEtBA,GAAO/+D,KAAKs+D,aACdt+D,KAAK8+D,QAAQ9+D,KAAKq+D,QAClBr+D,KAAKq+D,OAAOP,KAAK,IAGnB,IAAIkB,EAAmB,EAAZh/D,KAAKw+D,KAGhB,GAAIQ,GAAQ,WACVh/D,KAAKq+D,OAAOY,cAAcD,EAAMh/D,KAAKu+D,WAAa,OAG7C,CACL,IAAIW,GAAkB,WAAPF,KAAuB,EAClCG,GAAYH,EAAOE,GAAW,WAElCl/D,KAAKq+D,OAAOY,cAAcE,EAAUn/D,KAAKu+D,WAAa,GACtDv+D,KAAKq+D,OAAOY,cAAcC,EAASl/D,KAAKu+D,WAAa,EACvD,CAEAv+D,KAAK8+D,QAAQ9+D,KAAKq+D,QAClB,IAAI5oB,EAAOz1C,KAAKo/D,QAEhB,OAAOX,EAAMhpB,EAAKxxC,SAASw6D,GAAOhpB,CACpC,EAEAyoB,EAAK/6C,UAAU27C,QAAU,WACvB,MAAM,IAAI3gE,MAAM,0CAClB,EAEAg5B,EAAOlnC,QAAUiuE,mBChFjB,IAAIjuE,EAAUknC,EAAOlnC,QAAU,SAAcovE,GAC3CA,EAAYA,EAAUh3D,cAEtB,IAAIi3D,EAAYrvE,EAAQovE,GACxB,IAAKC,EAAW,MAAM,IAAInhE,MAAMkhE,EAAY,+CAE5C,OAAO,IAAIC,CACb,EAEArvE,EAAQsvE,IAAM1vE,EAAQ,OACtBI,EAAQuvE,KAAO3vE,EAAQ,OACvBI,EAAQwvE,OAAS5vE,EAAQ,OACzBI,EAAQkrC,OAAStrC,EAAQ,OACzBI,EAAQyvE,OAAS7vE,EAAQ,OACzBI,EAAQ0vE,OAAS9vE,EAAQ,wBCNzB,IAAI+vE,EAAW/vE,EAAQ,OACnBquE,EAAOruE,EAAQ,OACfwtE,EAASxtE,EAAAA,OAAAA,OAETgwE,EAAI,CACN,WAAY,YAAY,YAAgB,WAGtCx0B,EAAI,IAAI5qC,MAAM,IAElB,SAASq/D,IACP9/D,KAAKivC,OACLjvC,KAAK+/D,GAAK10B,EAEV6yB,EAAK76C,KAAKrjB,KAAM,GAAI,GACtB,CAkBA,SAASggE,EAAQxlE,GACf,OAAQA,GAAO,GAAOA,IAAQ,CAChC,CAEA,SAASylE,EAAI90D,EAAGjB,EAAGpa,EAAGgR,GACpB,OAAU,IAANqK,EAAiBjB,EAAIpa,GAAQoa,EAAKpJ,EAC5B,IAANqK,EAAiBjB,EAAIpa,EAAMoa,EAAIpJ,EAAMhR,EAAIgR,EACtCoJ,EAAIpa,EAAIgR,CACjB,CAxBA8+D,EAASE,EAAK5B,GAEd4B,EAAI38C,UAAU8rB,KAAO,WAOnB,OANAjvC,KAAK06C,GAAK,WACV16C,KAAKq7C,GAAK,WACVr7C,KAAKytD,GAAK,WACVztD,KAAKkgE,GAAK,UACVlgE,KAAKmgE,GAAK,WAEHngE,IACT,EAgBA8/D,EAAI38C,UAAU27C,QAAU,SAAUx4D,GAShC,IARA,IAfc9L,EAeV6wC,EAAIrrC,KAAK+/D,GAETr5D,EAAc,EAAV1G,KAAK06C,GACTxwC,EAAc,EAAVlK,KAAKq7C,GACTvrD,EAAc,EAAVkQ,KAAKytD,GACT3sD,EAAc,EAAVd,KAAKkgE,GACT35D,EAAc,EAAVvG,KAAKmgE,GAEJxvE,EAAI,EAAGA,EAAI,KAAMA,EAAG06C,EAAE16C,GAAK2V,EAAE85D,YAAgB,EAAJzvE,GAClD,KAAOA,EAAI,KAAMA,EAAG06C,EAAE16C,GAAK06C,EAAE16C,EAAI,GAAK06C,EAAE16C,EAAI,GAAK06C,EAAE16C,EAAI,IAAM06C,EAAE16C,EAAI,IAEnE,IAAK,IAAIgI,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3B,IAAIwS,KAAOxS,EAAI,IACXiS,EAAoD,IA5B5CpQ,EA4BGkM,IA3BF,EAAMlM,IAAQ,IA2BPylE,EAAG90D,EAAGjB,EAAGpa,EAAGgR,GAAKyF,EAAI8kC,EAAE1yC,GAAKknE,EAAE10D,GAElD5E,EAAIzF,EACJA,EAAIhR,EACJA,EAAIkwE,EAAO91D,GACXA,EAAIxD,EACJA,EAAIkE,CACN,CAEA5K,KAAK06C,GAAMh0C,EAAI1G,KAAK06C,GAAM,EAC1B16C,KAAKq7C,GAAMnxC,EAAIlK,KAAKq7C,GAAM,EAC1Br7C,KAAKytD,GAAM39D,EAAIkQ,KAAKytD,GAAM,EAC1BztD,KAAKkgE,GAAMp/D,EAAId,KAAKkgE,GAAM,EAC1BlgE,KAAKmgE,GAAM55D,EAAIvG,KAAKmgE,GAAM,CAC5B,EAEAL,EAAI38C,UAAUi8C,MAAQ,WACpB,IAAIiB,EAAIhD,EAAOO,YAAY,IAQ3B,OANAyC,EAAEC,aAAuB,EAAVtgE,KAAK06C,GAAQ,GAC5B2lB,EAAEC,aAAuB,EAAVtgE,KAAKq7C,GAAQ,GAC5BglB,EAAEC,aAAuB,EAAVtgE,KAAKytD,GAAQ,GAC5B4S,EAAEC,aAAuB,EAAVtgE,KAAKkgE,GAAQ,IAC5BG,EAAEC,aAAuB,EAAVtgE,KAAKmgE,GAAQ,IAErBE,CACT,EAEAlpC,EAAOlnC,QAAU6vE,mBCpFjB,IAAIF,EAAW/vE,EAAQ,OACnBquE,EAAOruE,EAAQ,OACfwtE,EAASxtE,EAAAA,OAAAA,OAETgwE,EAAI,CACN,WAAY,YAAY,YAAgB,WAGtCx0B,EAAI,IAAI5qC,MAAM,IAElB,SAAS8/D,IACPvgE,KAAKivC,OACLjvC,KAAK+/D,GAAK10B,EAEV6yB,EAAK76C,KAAKrjB,KAAM,GAAI,GACtB,CAkBA,SAASwgE,EAAOhmE,GACd,OAAQA,GAAO,EAAMA,IAAQ,EAC/B,CAEA,SAASwlE,EAAQxlE,GACf,OAAQA,GAAO,GAAOA,IAAQ,CAChC,CAEA,SAASylE,EAAI90D,EAAGjB,EAAGpa,EAAGgR,GACpB,OAAU,IAANqK,EAAiBjB,EAAIpa,GAAQoa,EAAKpJ,EAC5B,IAANqK,EAAiBjB,EAAIpa,EAAMoa,EAAIpJ,EAAMhR,EAAIgR,EACtCoJ,EAAIpa,EAAIgR,CACjB,CA5BA8+D,EAASW,EAAMrC,GAEfqC,EAAKp9C,UAAU8rB,KAAO,WAOpB,OANAjvC,KAAK06C,GAAK,WACV16C,KAAKq7C,GAAK,WACVr7C,KAAKytD,GAAK,WACVztD,KAAKkgE,GAAK,UACVlgE,KAAKmgE,GAAK,WAEHngE,IACT,EAoBAugE,EAAKp9C,UAAU27C,QAAU,SAAUx4D,GASjC,IARA,IAnBc9L,EAmBV6wC,EAAIrrC,KAAK+/D,GAETr5D,EAAc,EAAV1G,KAAK06C,GACTxwC,EAAc,EAAVlK,KAAKq7C,GACTvrD,EAAc,EAAVkQ,KAAKytD,GACT3sD,EAAc,EAAVd,KAAKkgE,GACT35D,EAAc,EAAVvG,KAAKmgE,GAEJxvE,EAAI,EAAGA,EAAI,KAAMA,EAAG06C,EAAE16C,GAAK2V,EAAE85D,YAAgB,EAAJzvE,GAClD,KAAOA,EAAI,KAAMA,EAAG06C,EAAE16C,IA5BR6J,EA4BmB6wC,EAAE16C,EAAI,GAAK06C,EAAE16C,EAAI,GAAK06C,EAAE16C,EAAI,IAAM06C,EAAE16C,EAAI,MA3B1D,EAAM6J,IAAQ,GA6B7B,IAAK,IAAI7B,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3B,IAAIwS,KAAOxS,EAAI,IACXiS,EAAK41D,EAAM95D,GAAKu5D,EAAG90D,EAAGjB,EAAGpa,EAAGgR,GAAKyF,EAAI8kC,EAAE1yC,GAAKknE,EAAE10D,GAAM,EAExD5E,EAAIzF,EACJA,EAAIhR,EACJA,EAAIkwE,EAAO91D,GACXA,EAAIxD,EACJA,EAAIkE,CACN,CAEA5K,KAAK06C,GAAMh0C,EAAI1G,KAAK06C,GAAM,EAC1B16C,KAAKq7C,GAAMnxC,EAAIlK,KAAKq7C,GAAM,EAC1Br7C,KAAKytD,GAAM39D,EAAIkQ,KAAKytD,GAAM,EAC1BztD,KAAKkgE,GAAMp/D,EAAId,KAAKkgE,GAAM,EAC1BlgE,KAAKmgE,GAAM55D,EAAIvG,KAAKmgE,GAAM,CAC5B,EAEAI,EAAKp9C,UAAUi8C,MAAQ,WACrB,IAAIiB,EAAIhD,EAAOO,YAAY,IAQ3B,OANAyC,EAAEC,aAAuB,EAAVtgE,KAAK06C,GAAQ,GAC5B2lB,EAAEC,aAAuB,EAAVtgE,KAAKq7C,GAAQ,GAC5BglB,EAAEC,aAAuB,EAAVtgE,KAAKytD,GAAQ,GAC5B4S,EAAEC,aAAuB,EAAVtgE,KAAKkgE,GAAQ,IAC5BG,EAAEC,aAAuB,EAAVtgE,KAAKmgE,GAAQ,IAErBE,CACT,EAEAlpC,EAAOlnC,QAAUswE,mBC1FjB,IAAIX,EAAW/vE,EAAQ,OACnB4wE,EAAS5wE,EAAQ,OACjBquE,EAAOruE,EAAQ,OACfwtE,EAASxtE,EAAAA,OAAAA,OAETw7C,EAAI,IAAI5qC,MAAM,IAElB,SAASigE,IACP1gE,KAAKivC,OAELjvC,KAAK+/D,GAAK10B,EAEV6yB,EAAK76C,KAAKrjB,KAAM,GAAI,GACtB,CAEA4/D,EAASc,EAAQD,GAEjBC,EAAOv9C,UAAU8rB,KAAO,WAUtB,OATAjvC,KAAK06C,GAAK,WACV16C,KAAKq7C,GAAK,UACVr7C,KAAKytD,GAAK,UACVztD,KAAKkgE,GAAK,WACVlgE,KAAKmgE,GAAK,WACVngE,KAAK2gE,GAAK,WACV3gE,KAAK4gE,GAAK,WACV5gE,KAAK6gE,GAAK,WAEH7gE,IACT,EAEA0gE,EAAOv9C,UAAUi8C,MAAQ,WACvB,IAAIiB,EAAIhD,EAAOO,YAAY,IAU3B,OARAyC,EAAEC,aAAatgE,KAAK06C,GAAI,GACxB2lB,EAAEC,aAAatgE,KAAKq7C,GAAI,GACxBglB,EAAEC,aAAatgE,KAAKytD,GAAI,GACxB4S,EAAEC,aAAatgE,KAAKkgE,GAAI,IACxBG,EAAEC,aAAatgE,KAAKmgE,GAAI,IACxBE,EAAEC,aAAatgE,KAAK2gE,GAAI,IACxBN,EAAEC,aAAatgE,KAAK4gE,GAAI,IAEjBP,CACT,EAEAlpC,EAAOlnC,QAAUywE,mBC5CjB,IAAId,EAAW/vE,EAAQ,OACnBquE,EAAOruE,EAAQ,OACfwtE,EAASxtE,EAAAA,OAAAA,OAETgwE,EAAI,CACN,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,UAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,UAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,YAGlCx0B,EAAI,IAAI5qC,MAAM,IAElB,SAASggE,IACPzgE,KAAKivC,OAELjvC,KAAK+/D,GAAK10B,EAEV6yB,EAAK76C,KAAKrjB,KAAM,GAAI,GACtB,CAiBA,SAAS63C,EAAIt0C,EAAGqD,EAAGD,GACjB,OAAOA,EAAKpD,GAAKqD,EAAID,EACvB,CAEA,SAASm6D,EAAKv9D,EAAGqD,EAAGD,GAClB,OAAQpD,EAAIqD,EAAMD,GAAKpD,EAAIqD,EAC7B,CAEA,SAASm6D,EAAQx9D,GACf,OAAQA,IAAM,EAAIA,GAAK,KAAOA,IAAM,GAAKA,GAAK,KAAOA,IAAM,GAAKA,GAAK,GACvE,CAEA,SAASy9D,EAAQz9D,GACf,OAAQA,IAAM,EAAIA,GAAK,KAAOA,IAAM,GAAKA,GAAK,KAAOA,IAAM,GAAKA,GAAK,EACvE,CAEA,SAAS09D,EAAQ19D,GACf,OAAQA,IAAM,EAAIA,GAAK,KAAOA,IAAM,GAAKA,GAAK,IAAOA,IAAM,CAC7D,CAjCAq8D,EAASa,EAAQvC,GAEjBuC,EAAOt9C,UAAU8rB,KAAO,WAUtB,OATAjvC,KAAK06C,GAAK,WACV16C,KAAKq7C,GAAK,WACVr7C,KAAKytD,GAAK,WACVztD,KAAKkgE,GAAK,WACVlgE,KAAKmgE,GAAK,WACVngE,KAAK2gE,GAAK,WACV3gE,KAAK4gE,GAAK,UACV5gE,KAAK6gE,GAAK,WAEH7gE,IACT,EA0BAygE,EAAOt9C,UAAU27C,QAAU,SAAUx4D,GAYnC,IAXA,IALe/C,EAKX8nC,EAAIrrC,KAAK+/D,GAETr5D,EAAc,EAAV1G,KAAK06C,GACTxwC,EAAc,EAAVlK,KAAKq7C,GACTvrD,EAAc,EAAVkQ,KAAKytD,GACT3sD,EAAc,EAAVd,KAAKkgE,GACT35D,EAAc,EAAVvG,KAAKmgE,GACTnwE,EAAc,EAAVgQ,KAAK2gE,GACT5K,EAAc,EAAV/1D,KAAK4gE,GACTlgE,EAAc,EAAVV,KAAK6gE,GAEJlwE,EAAI,EAAGA,EAAI,KAAMA,EAAG06C,EAAE16C,GAAK2V,EAAE85D,YAAgB,EAAJzvE,GAClD,KAAOA,EAAI,KAAMA,EAAG06C,EAAE16C,GAAqE,KAjB5E4S,EAiBoB8nC,EAAE16C,EAAI,MAhB3B,GAAK4S,GAAK,KAAOA,IAAM,GAAKA,GAAK,IAAOA,IAAM,IAgBb8nC,EAAE16C,EAAI,GAAKswE,EAAO51B,EAAE16C,EAAI,KAAO06C,EAAE16C,EAAI,IAEpF,IAAK,IAAIgI,EAAI,EAAGA,EAAI,KAAMA,EAAG,CAC3B,IAAIuoE,EAAMxgE,EAAIsgE,EAAOz6D,GAAKsxC,EAAGtxC,EAAGvW,EAAG+lE,GAAK8J,EAAElnE,GAAK0yC,EAAE1yC,GAAM,EACnDwoE,EAAMJ,EAAOr6D,GAAKo6D,EAAIp6D,EAAGwD,EAAGpa,GAAM,EAEtC4Q,EAAIq1D,EACJA,EAAI/lE,EACJA,EAAIuW,EACJA,EAAKzF,EAAIogE,EAAM,EACfpgE,EAAIhR,EACJA,EAAIoa,EACJA,EAAIxD,EACJA,EAAKw6D,EAAKC,EAAM,CAClB,CAEAnhE,KAAK06C,GAAMh0C,EAAI1G,KAAK06C,GAAM,EAC1B16C,KAAKq7C,GAAMnxC,EAAIlK,KAAKq7C,GAAM,EAC1Br7C,KAAKytD,GAAM39D,EAAIkQ,KAAKytD,GAAM,EAC1BztD,KAAKkgE,GAAMp/D,EAAId,KAAKkgE,GAAM,EAC1BlgE,KAAKmgE,GAAM55D,EAAIvG,KAAKmgE,GAAM,EAC1BngE,KAAK2gE,GAAM3wE,EAAIgQ,KAAK2gE,GAAM,EAC1B3gE,KAAK4gE,GAAM7K,EAAI/1D,KAAK4gE,GAAM,EAC1B5gE,KAAK6gE,GAAMngE,EAAIV,KAAK6gE,GAAM,CAC5B,EAEAJ,EAAOt9C,UAAUi8C,MAAQ,WACvB,IAAIiB,EAAIhD,EAAOO,YAAY,IAW3B,OATAyC,EAAEC,aAAatgE,KAAK06C,GAAI,GACxB2lB,EAAEC,aAAatgE,KAAKq7C,GAAI,GACxBglB,EAAEC,aAAatgE,KAAKytD,GAAI,GACxB4S,EAAEC,aAAatgE,KAAKkgE,GAAI,IACxBG,EAAEC,aAAatgE,KAAKmgE,GAAI,IACxBE,EAAEC,aAAatgE,KAAK2gE,GAAI,IACxBN,EAAEC,aAAatgE,KAAK4gE,GAAI,IACxBP,EAAEC,aAAatgE,KAAK6gE,GAAI,IAEjBR,CACT,EAEAlpC,EAAOlnC,QAAUwwE,mBCtIjB,IAAIb,EAAW/vE,EAAQ,OACnBuxE,EAASvxE,EAAQ,OACjBquE,EAAOruE,EAAQ,OACfwtE,EAASxtE,EAAAA,OAAAA,OAETw7C,EAAI,IAAI5qC,MAAM,KAElB,SAAS4gE,IACPrhE,KAAKivC,OACLjvC,KAAK+/D,GAAK10B,EAEV6yB,EAAK76C,KAAKrjB,KAAM,IAAK,IACvB,CAEA4/D,EAASyB,EAAQD,GAEjBC,EAAOl+C,UAAU8rB,KAAO,WAmBtB,OAlBAjvC,KAAKshE,IAAM,WACXthE,KAAKuhE,IAAM,WACXvhE,KAAKwhE,IAAM,WACXxhE,KAAKyhE,IAAM,UACXzhE,KAAK0hE,IAAM,WACX1hE,KAAK2hE,IAAM,WACX3hE,KAAK4hE,IAAM,WACX5hE,KAAK6hE,IAAM,WAEX7hE,KAAK8hE,IAAM,WACX9hE,KAAK+hE,IAAM,UACX/hE,KAAKgiE,IAAM,UACXhiE,KAAKiiE,IAAM,WACXjiE,KAAKkiE,IAAM,WACXliE,KAAKmiE,IAAM,WACXniE,KAAKoiE,IAAM,WACXpiE,KAAKqiE,IAAM,WAEJriE,IACT,EAEAqhE,EAAOl+C,UAAUi8C,MAAQ,WACvB,IAAIiB,EAAIhD,EAAOO,YAAY,IAE3B,SAAS0E,EAAc5hE,EAAGlI,EAAGo/C,GAC3ByoB,EAAEC,aAAa5/D,EAAGk3C,GAClByoB,EAAEC,aAAa9nE,EAAGo/C,EAAS,EAC7B,CASA,OAPA0qB,EAAatiE,KAAKshE,IAAKthE,KAAK8hE,IAAK,GACjCQ,EAAatiE,KAAKuhE,IAAKvhE,KAAK+hE,IAAK,GACjCO,EAAatiE,KAAKwhE,IAAKxhE,KAAKgiE,IAAK,IACjCM,EAAatiE,KAAKyhE,IAAKzhE,KAAKiiE,IAAK,IACjCK,EAAatiE,KAAK0hE,IAAK1hE,KAAKkiE,IAAK,IACjCI,EAAatiE,KAAK2hE,IAAK3hE,KAAKmiE,IAAK,IAE1B9B,CACT,EAEAlpC,EAAOlnC,QAAUoxE,mBCxDjB,IAAIzB,EAAW/vE,EAAQ,OACnBquE,EAAOruE,EAAQ,OACfwtE,EAASxtE,EAAAA,OAAAA,OAETgwE,EAAI,CACN,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,UACpC,UAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,UAAY,UACpC,UAAY,UAAY,UAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,YAGlCx0B,EAAI,IAAI5qC,MAAM,KAElB,SAAS8hE,IACPviE,KAAKivC,OACLjvC,KAAK+/D,GAAK10B,EAEV6yB,EAAK76C,KAAKrjB,KAAM,IAAK,IACvB,CA0BA,SAASwiE,EAAIj/D,EAAGqD,EAAGD,GACjB,OAAOA,EAAKpD,GAAKqD,EAAID,EACvB,CAEA,SAASm6D,EAAKv9D,EAAGqD,EAAGD,GAClB,OAAQpD,EAAIqD,EAAMD,GAAKpD,EAAIqD,EAC7B,CAEA,SAASm6D,EAAQx9D,EAAGk/D,GAClB,OAAQl/D,IAAM,GAAKk/D,GAAM,IAAMA,IAAO,EAAIl/D,GAAK,KAAOk/D,IAAO,EAAIl/D,GAAK,GACxE,CAEA,SAASy9D,EAAQz9D,EAAGk/D,GAClB,OAAQl/D,IAAM,GAAKk/D,GAAM,KAAOl/D,IAAM,GAAKk/D,GAAM,KAAOA,IAAO,EAAIl/D,GAAK,GAC1E,CAEA,SAASm/D,EAAQn/D,EAAGk/D,GAClB,OAAQl/D,IAAM,EAAIk/D,GAAM,KAAOl/D,IAAM,EAAIk/D,GAAM,IAAOl/D,IAAM,CAC9D,CAEA,SAASo/D,EAASp/D,EAAGk/D,GACnB,OAAQl/D,IAAM,EAAIk/D,GAAM,KAAOl/D,IAAM,EAAIk/D,GAAM,KAAOl/D,IAAM,EAAIk/D,GAAM,GACxE,CAEA,SAASG,EAAQr/D,EAAGk/D,GAClB,OAAQl/D,IAAM,GAAKk/D,GAAM,KAAOA,IAAO,GAAKl/D,GAAK,GAAMA,IAAM,CAC/D,CAEA,SAASs/D,EAASt/D,EAAGk/D,GACnB,OAAQl/D,IAAM,GAAKk/D,GAAM,KAAOA,IAAO,GAAKl/D,GAAK,IAAMA,IAAM,EAAIk/D,GAAM,GACzE,CAEA,SAASK,EAAUp8D,EAAGwD,GACpB,OAAQxD,IAAM,EAAMwD,IAAM,EAAK,EAAI,CACrC,CA1DA01D,EAAS2C,EAAQrE,GAEjBqE,EAAOp/C,UAAU8rB,KAAO,WAmBtB,OAlBAjvC,KAAKshE,IAAM,WACXthE,KAAKuhE,IAAM,WACXvhE,KAAKwhE,IAAM,WACXxhE,KAAKyhE,IAAM,WACXzhE,KAAK0hE,IAAM,WACX1hE,KAAK2hE,IAAM,WACX3hE,KAAK4hE,IAAM,UACX5hE,KAAK6hE,IAAM,WAEX7hE,KAAK8hE,IAAM,WACX9hE,KAAK+hE,IAAM,WACX/hE,KAAKgiE,IAAM,WACXhiE,KAAKiiE,IAAM,WACXjiE,KAAKkiE,IAAM,WACXliE,KAAKmiE,IAAM,UACXniE,KAAKoiE,IAAM,WACXpiE,KAAKqiE,IAAM,UAEJriE,IACT,EAsCAuiE,EAAOp/C,UAAU27C,QAAU,SAAUx4D,GAqBnC,IApBA,IAAI+kC,EAAIrrC,KAAK+/D,GAETgD,EAAgB,EAAX/iE,KAAKshE,IACV0B,EAAgB,EAAXhjE,KAAKuhE,IACV1pB,EAAgB,EAAX73C,KAAKwhE,IACVyB,EAAgB,EAAXjjE,KAAKyhE,IACVyB,EAAgB,EAAXljE,KAAK0hE,IACVyB,EAAgB,EAAXnjE,KAAK2hE,IACVyB,EAAgB,EAAXpjE,KAAK4hE,IACVyB,EAAgB,EAAXrjE,KAAK6hE,IAEVhY,EAAgB,EAAX7pD,KAAK8hE,IACVwB,EAAgB,EAAXtjE,KAAK+hE,IACVwB,EAAgB,EAAXvjE,KAAKgiE,IACVzL,EAAgB,EAAXv2D,KAAKiiE,IACVn+C,EAAgB,EAAX9jB,KAAKkiE,IACVp3C,EAAgB,EAAX9qB,KAAKmiE,IACV9a,EAAgB,EAAXrnD,KAAKoiE,IACVoB,EAAgB,EAAXxjE,KAAKqiE,IAEL1xE,EAAI,EAAGA,EAAI,GAAIA,GAAK,EAC3B06C,EAAE16C,GAAK2V,EAAE85D,YAAgB,EAAJzvE,GACrB06C,EAAE16C,EAAI,GAAK2V,EAAE85D,YAAgB,EAAJzvE,EAAQ,GAEnC,KAAOA,EAAI,IAAKA,GAAK,EAAG,CACtB,IAAI8yE,EAAKp4B,EAAE16C,EAAI,IACX8xE,EAAKp3B,EAAE16C,EAAI,GAAS,GACpBswE,EAASyB,EAAOe,EAAIhB,GACpBiB,EAAUf,EAAQF,EAAIgB,GAItBE,EAASf,EAFba,EAAKp4B,EAAE16C,EAAI,GACX8xE,EAAKp3B,EAAE16C,EAAI,EAAQ,IAEfizE,EAAUf,EAAQJ,EAAIgB,GAGtBI,EAAOx4B,EAAE16C,EAAI,IACbmzE,EAAOz4B,EAAE16C,EAAI,GAAQ,GAErBozE,EAAQ14B,EAAE16C,EAAI,IACdqzE,EAAQ34B,EAAE16C,EAAI,GAAS,GAEvBszE,EAAOP,EAAUI,EAAQ,EACzBI,EAAOjD,EAAS4C,EAAOf,EAASmB,EAAKP,GAAY,EAIrDQ,GAFAA,EAAOA,EAAMP,EAASb,EADtBmB,EAAOA,EAAML,EAAW,EACYA,GAAY,GAEnCG,EAAQjB,EADrBmB,EAAOA,EAAMD,EAAS,EACaA,GAAU,EAE7C34B,EAAE16C,GAAKuzE,EACP74B,EAAE16C,EAAI,GAAKszE,CACb,CAEA,IAAK,IAAItrE,EAAI,EAAGA,EAAI,IAAKA,GAAK,EAAG,CAC/BurE,EAAM74B,EAAE1yC,GACRsrE,EAAM54B,EAAE1yC,EAAI,GAEZ,IAAIwrE,EAAOrD,EAAIiC,EAAIC,EAAInrB,GACnBusB,EAAOtD,EAAIjX,EAAIyZ,EAAIC,GAEnBc,EAAUtD,EAAOgC,EAAIlZ,GACrBya,EAAUvD,EAAOlX,EAAIkZ,GACrBwB,EAAUvD,EAAOkC,EAAIp/C,GACrB0gD,EAAUxD,EAAOl9C,EAAIo/C,GAGrBuB,EAAM5E,EAAElnE,GACR+rE,EAAM7E,EAAElnE,EAAI,GAEZgsE,EAAMnC,EAAGU,EAAIC,EAAIC,GACjBwB,EAAMpC,EAAG1+C,EAAIgH,EAAIu8B,GAEjBwd,EAAOrB,EAAKgB,EAAW,EACvBM,EAAOzB,EAAKkB,EAAUzB,EAAS+B,EAAKrB,GAAO,EAM/CsB,GAFAA,GAFAA,EAAOA,EAAMH,EAAM7B,EADnB+B,EAAOA,EAAMD,EAAO,EACaA,GAAQ,GAE5BH,EAAM3B,EADnB+B,EAAOA,EAAMH,EAAO,EACaA,GAAQ,GAE5BR,EAAMpB,EADnB+B,EAAOA,EAAMZ,EAAO,EACaA,GAAQ,EAGzC,IAAIc,GAAOT,EAAUF,EAAQ,EACzBY,GAAOX,EAAUF,EAAOrB,EAASiC,GAAKT,GAAY,EAEtDjB,EAAKD,EACLI,EAAKnc,EACL+b,EAAKD,EACL9b,EAAKv8B,EACLq4C,EAAKD,EACLp4C,EAAKhH,EAELo/C,EAAMD,EAAK6B,EAAMhC,EADjBh/C,EAAMyyC,EAAKsO,EAAO,EACYtO,GAAO,EACrC0M,EAAKprB,EACL0e,EAAKgN,EACL1rB,EAAKmrB,EACLO,EAAKD,EACLN,EAAKD,EACLO,EAAKzZ,EAELkZ,EAAM+B,EAAME,GAAMlC,EADlBjZ,EAAMgb,EAAME,GAAO,EACYF,GAAQ,CACzC,CAEA7kE,KAAK8hE,IAAO9hE,KAAK8hE,IAAMjY,EAAM,EAC7B7pD,KAAK+hE,IAAO/hE,KAAK+hE,IAAMuB,EAAM,EAC7BtjE,KAAKgiE,IAAOhiE,KAAKgiE,IAAMuB,EAAM,EAC7BvjE,KAAKiiE,IAAOjiE,KAAKiiE,IAAM1L,EAAM,EAC7Bv2D,KAAKkiE,IAAOliE,KAAKkiE,IAAMp+C,EAAM,EAC7B9jB,KAAKmiE,IAAOniE,KAAKmiE,IAAMr3C,EAAM,EAC7B9qB,KAAKoiE,IAAOpiE,KAAKoiE,IAAM/a,EAAM,EAC7BrnD,KAAKqiE,IAAOriE,KAAKqiE,IAAMmB,EAAM,EAE7BxjE,KAAKshE,IAAOthE,KAAKshE,IAAMyB,EAAKD,EAAS9iE,KAAK8hE,IAAKjY,GAAO,EACtD7pD,KAAKuhE,IAAOvhE,KAAKuhE,IAAMyB,EAAKF,EAAS9iE,KAAK+hE,IAAKuB,GAAO,EACtDtjE,KAAKwhE,IAAOxhE,KAAKwhE,IAAM3pB,EAAKirB,EAAS9iE,KAAKgiE,IAAKuB,GAAO,EACtDvjE,KAAKyhE,IAAOzhE,KAAKyhE,IAAMwB,EAAKH,EAAS9iE,KAAKiiE,IAAK1L,GAAO,EACtDv2D,KAAK0hE,IAAO1hE,KAAK0hE,IAAMwB,EAAKJ,EAAS9iE,KAAKkiE,IAAKp+C,GAAO,EACtD9jB,KAAK2hE,IAAO3hE,KAAK2hE,IAAMwB,EAAKL,EAAS9iE,KAAKmiE,IAAKr3C,GAAO,EACtD9qB,KAAK4hE,IAAO5hE,KAAK4hE,IAAMwB,EAAKN,EAAS9iE,KAAKoiE,IAAK/a,GAAO,EACtDrnD,KAAK6hE,IAAO7hE,KAAK6hE,IAAMwB,EAAKP,EAAS9iE,KAAKqiE,IAAKmB,GAAO,CACxD,EAEAjB,EAAOp/C,UAAUi8C,MAAQ,WACvB,IAAIiB,EAAIhD,EAAOO,YAAY,IAE3B,SAAS0E,EAAc5hE,EAAGlI,EAAGo/C,GAC3ByoB,EAAEC,aAAa5/D,EAAGk3C,GAClByoB,EAAEC,aAAa9nE,EAAGo/C,EAAS,EAC7B,CAWA,OATA0qB,EAAatiE,KAAKshE,IAAKthE,KAAK8hE,IAAK,GACjCQ,EAAatiE,KAAKuhE,IAAKvhE,KAAK+hE,IAAK,GACjCO,EAAatiE,KAAKwhE,IAAKxhE,KAAKgiE,IAAK,IACjCM,EAAatiE,KAAKyhE,IAAKzhE,KAAKiiE,IAAK,IACjCK,EAAatiE,KAAK0hE,IAAK1hE,KAAKkiE,IAAK,IACjCI,EAAatiE,KAAK2hE,IAAK3hE,KAAKmiE,IAAK,IACjCG,EAAatiE,KAAK4hE,IAAK5hE,KAAKoiE,IAAK,IACjCE,EAAatiE,KAAK6hE,IAAK7hE,KAAKqiE,IAAK,IAE1BhC,CACT,EAEAlpC,EAAOlnC,QAAUsyE,+BC1MjB,IAAI0C,EAAcp1E,EAAQ,OAC1BsnC,EAAOlnC,QAAUg1E,EAEK,qBAAX7hC,SACTA,OAAO6hC,YAAcA,2BC3DvB,IAAIC,EAAO,SAASC,GAgBlB,OAfAnlE,KAAKmlE,UAAYA,EACjBnlE,KAAKolE,MAAQ,GACbplE,KAAKqlE,OAAS,EACdrlE,KAAKslE,QAAUloC,SAASC,cAAc,OACtCr9B,KAAKslE,QAAQhoC,UAAY,sBACzBt9B,KAAKgjB,QAAUoa,SAASC,cAAc,MACtCr9B,KAAKgjB,QAAQsa,UAAY,cACzBt9B,KAAKslE,QAAQtnC,YAAYh+B,KAAKgjB,SAK9BhjB,KAAKulE,mBAAoB,EAEzBJ,EAAUrhD,GAAGwa,WAAWknC,aAAaxlE,KAAKslE,QAASH,EAAUrhD,GAAG2hD,aACzDzlE,IACT,EAEAklE,EAAK/hD,UAAUuiD,KAAO,WACpB1lE,KAAKgjB,QAAQ4b,MAAMC,QAAU,OAC/B,EAEAqmC,EAAK/hD,UAAUwiD,KAAO,WACpB3lE,KAAKgjB,QAAQ4b,MAAMC,QAAU,MAC/B,EAEAqmC,EAAK/hD,UAAUya,IAAM,SAASM,GAC5Bl+B,KAAKolE,MAAMptE,KAAKkmC,EAClB,EAEAgnC,EAAK/hD,UAAUid,MAAQ,WACrBpgC,KAAKolE,MAAQ,GACbplE,KAAKqlE,OAAS,CAChB,EAEAH,EAAK/hD,UAAUyiD,QAAU,WACvB,OAAQ5lE,KAAKolE,MAAM/sE,MACrB,EAEA6sE,EAAK/hD,UAAU0iD,UAAY,WACzB,MAAsC,UAA/B7lE,KAAKgjB,QAAQ4b,MAAMC,OAC5B,EAEAqmC,EAAK/hD,UAAU2iD,KAAO,WAGpB,GAFA9lE,KAAKgjB,QAAQ+iD,UAAY,GAEC,IAAtB/lE,KAAKolE,MAAM/sE,OAAf,CAKA,IAAK,IAAI1H,EAAI,EAAGA,EAAIqP,KAAKolE,MAAM/sE,OAAQ1H,IACrCqP,KAAKgmE,SAAShmE,KAAKolE,MAAMz0E,GAAIqP,KAAKqlE,SAAW10E,GAG/CqP,KAAK0lE,MANL,MAFE1lE,KAAK2lE,MAST,EAEAT,EAAK/hD,UAAU6iD,SAAW,SAAS9nC,EAAMmnC,GACvC,IAAIY,EAAK7oC,SAASC,cAAc,MAC9B32B,EAAI02B,SAASC,cAAc,KAEzBgoC,IAAQY,EAAG3oC,WAAa,WAE5B52B,EAAEq/D,UAAY7nC,EAAKvM,OAEnBs0C,EAAGjoC,YAAYt3B,GACf1G,KAAKgjB,QAAQgb,YAAYioC,GAEzBA,EAAGxoC,iBAAiB,YAAa,WAC/Bz9B,KAAKulE,mBAAoB,CAC3B,EAAEzoC,KAAK98B,OAEPimE,EAAGxoC,iBAAiB,UAAW,WAC7Bz9B,KAAKkmE,cAAc7iD,KAAKrjB,KAAMk+B,EAChC,EAAEpB,KAAK98B,MACT,EAEAklE,EAAK/hD,UAAU+iD,cAAgB,SAAShoC,GACtCl+B,KAAKulE,mBAAoB,EACzBvlE,KAAKmlE,UAAUptE,MAAMmmC,EAAK8e,UAC1Bh9C,KAAKogC,QACLpgC,KAAK8lE,MACP,EAEAZ,EAAK/hD,UAAUgjD,KAAO,SAAS1sE,GAC7BuG,KAAKqlE,OAAS5rE,EACduG,KAAK8lE,MACP,EAEAZ,EAAK/hD,UAAUijD,SAAW,WACxBpmE,KAAKmmE,KAAqB,IAAhBnmE,KAAKqlE,OAAerlE,KAAKolE,MAAM/sE,OAAS,EAAI2H,KAAKqlE,OAAS,EACtE,EAEAH,EAAK/hD,UAAU4iB,KAAO,WACpB/lC,KAAKmmE,KAAKnmE,KAAKqlE,SAAWrlE,KAAKolE,MAAM/sE,OAAS,EAAI,EAAI2H,KAAKqlE,OAAS,EACtE,EAEAH,EAAK/hD,UAAUkjD,UAAY,SAAS19B,GAClC,IAAIs9B,EAAK7oC,SAASC,cAAc,MAEhC4oC,EAAGF,UAAYp9B,EAEf3oC,KAAKgjB,QAAQgb,YAAYioC,GACzBjmE,KAAK0lE,MACP,EAEAvuC,EAAOlnC,QAAUi1E,gCC5GjB,IAAIppC,EAASjsC,EAAQ,OACjBssD,EAAQtsD,EAAQ,OAChBq1E,EAAOr1E,EAAQ,OAEfo1E,EAAc,SAASnhD,EAAIvQ,EAAMgF,GA4CnC,OA3CAA,EAAUA,GAAW,CAAC,EAEtBvY,KAAKuY,QAAUujB,EAAO,CACpBW,UAAW,EACXtE,MAAO,EACPta,QAAQ,EACRyoD,YAAY,GACX/tD,GAEHvY,KAAK8jB,GAAKA,EACV9jB,KAAKuT,KAAOA,GAAQ,GACpBvT,KAAKy2B,KAAO,IAAIyuC,EAAKllE,MAErBA,KAAKq/B,MAAQ,GACbr/B,KAAK24B,SAAW,KAEhB34B,KAAKy2B,KAAKqvC,OAEV9lE,KAAK8jB,GAAG2Z,iBAAiB,QAAS,SAASl3B,GACzCvG,KAAKumE,YAAYhgE,EAAEw4B,QACrB,EAAEjC,KAAK98B,OAAO,GAEdA,KAAK8jB,GAAG2Z,iBAAiB,UAAW,SAASl3B,GAC3CvG,KAAKwmE,cAAcjgE,EACrB,EAAEu2B,KAAK98B,OAEPA,KAAK8jB,GAAG2Z,iBAAiB,QAAS,WAChCz9B,KAAKymE,aACP,EAAE3pC,KAAK98B,OAEPA,KAAK8jB,GAAG2Z,iBAAiB,OAAQ,WAC/Bz9B,KAAK0mE,YACP,EAAE5pC,KAAK98B,OAEPA,KAAK8jB,GAAG2Z,iBAAiB,QAAS,SAASl3B,GACzCvG,KAAK2mE,YAAYpgE,EACnB,EAAEu2B,KAAK98B,OAGPA,KAAK4mE,OAAU5mE,KAAKuY,QAAQquD,OAAU5mE,KAAKuY,QAAQquD,OAAO9pC,KAAK98B,MAAQA,KAAK4mE,OAAO9pC,KAAK98B,MAExFA,KAAKi+B,aAAgBj+B,KAAKuY,QAAQ0lB,aAAgBj+B,KAAKuY,QAAQ0lB,aAAanB,KAAK98B,MAAQA,KAAKi+B,aAAanB,KAAK98B,MAEzGA,IACT,EAEAilE,EAAY9hD,UAAUojD,YAAc,SAASxnC,GAO3B,KAAZA,GACY,KAAZA,GACY,KAAZA,GACY,KAAZA,GACY,IAAZA,GAEJ/+B,KAAK6mE,kBAAkB7mE,KAAK8jB,GAAG/rB,MACjC,EAEAktE,EAAY9hD,UAAUqjD,cAAgB,SAASjgE,GAC7C,OAAQA,EAAEw4B,SACR,KAAK,GACL,KAAK,EACE/+B,KAAKy2B,KAAKmvC,YACT5lE,KAAKy2B,KAAKovC,aACZt/D,EAAE45B,iBAEJngC,KAAKjI,MAAMiI,KAAKy2B,KAAK2uC,MAAMplE,KAAKy2B,KAAK4uC,QAAQroB,UAC7Ch9C,KAAKy2B,KAAKkvC,QAEd,MACA,KAAK,GACE3lE,KAAKy2B,KAAKmvC,WAAW5lE,KAAKy2B,KAAKkvC,OACtC,MACA,KAAK,GACH3lE,KAAKy2B,KAAK2vC,WACZ,MACA,KAAK,GACHpmE,KAAKy2B,KAAKsP,OAGhB,EAEAk/B,EAAY9hD,UAAUujD,WAAa,YAC5B1mE,KAAKy2B,KAAK8uC,mBAAqBvlE,KAAKuY,QAAQ+tD,YAC/CtmE,KAAKy2B,KAAKkvC,MAEd,EAEAV,EAAY9hD,UAAUwjD,YAAc,SAASpgE,GAC3C,GAAIA,EAAEugE,cACJ9mE,KAAK6mE,kBAAkBtgE,EAAEugE,cAAcC,QAAQ,aAC1C,CACL,IAAIznC,EAAOt/B,KACXyiD,YAAW,WACTnjB,EAAKunC,kBAAkBtgE,EAAEk4B,OAAO1mC,MAClC,GAAG,IACL,CACF,EAEAktE,EAAY9hD,UAAU0jD,kBAAoB,SAASxnC,GACjDr/B,KAAKq/B,MAAQr/B,KAAKgnE,UAAU3nC,GAE5Br/B,KAAKy2B,KAAK2J,QAENpgC,KAAKq/B,MAAMhnC,OAAS2H,KAAKuY,QAAQkkB,UACnCz8B,KAAKy2B,KAAKqvC,OAIZ9lE,KAAKinE,cAAc,SAAS1zD,GAC1B,IAAK,IAAI5iB,EAAI,EAAGA,EAAI4iB,EAAKlb,SACvB2H,KAAKy2B,KAAKmH,IAAIrqB,EAAK5iB,IACfA,IAAOqP,KAAKuY,QAAQ4f,MAAQ,GAFDxnC,KAIjCqP,KAAKy2B,KAAKqvC,MACZ,EAAEhpC,KAAK98B,MACT,EAEAilE,EAAY9hD,UAAUsjD,YAAc,WAC7BzmE,KAAKy2B,KAAKmvC,WAAW5lE,KAAKy2B,KAAKivC,OACpC1lE,KAAKy2B,KAAK8uC,mBAAoB,CAChC,EAOAN,EAAY9hD,UAAUiY,OAAS,SAAS8rC,GACtClnE,KAAKuT,KAAO2zD,EACZlnE,KAAKumE,aACP,EAKAtB,EAAY9hD,UAAUid,MAAQ,WAC5BpgC,KAAKuT,KAAO,GACZvT,KAAKy2B,KAAK2J,OACZ,EAQA6kC,EAAY9hD,UAAU6jD,UAAY,SAASjvE,GAEzC,OADAA,EAAQA,EAAMsQ,aAEhB,EASA48D,EAAY9hD,UAAUzM,MAAQ,SAASywD,EAAW9nC,GAChD,OAAO8nC,EAAUhgE,QAAQk4B,IAAU,CACrC,EAEA4lC,EAAY9hD,UAAUprB,MAAQ,SAASA,GAIrC,GAHAiI,KAAK24B,SAAW5gC,EAChBiI,KAAK8jB,GAAG/rB,MAAQiI,KAAKi+B,aAAalmC,GAE9BqlC,SAASgqC,YAAa,CACxB,IAAI7gE,EAAI62B,SAASgqC,YAAY,cAC7B7gE,EAAE8gE,UAAU,UAAU,GAAM,GAC5BrnE,KAAK8jB,GAAG85B,cAAcr3C,EACxB,MACEvG,KAAK8jB,GAAGwjD,UAAU,WAEtB,EAEArC,EAAY9hD,UAAU8jD,cAAgB,SAASpuC,GAC7C,IAAItgB,EAAU,CACZggC,IAAK,WACLkE,KAAM,YACNM,QAAS,SAASj8C,GAAK,OAAOd,KAAKi+B,aAAan9B,EAAI,EAAEg8B,KAAK98B,OAqB7D64B,EAlBG74B,KAAKuY,QAAQsF,OACJs+B,EAAMt+B,OAAO7d,KAAKq/B,MAAOr/B,KAAKuT,KAAMgF,GAE5B8R,IAAI,SAAS6T,GAC7B,MAAO,CACL8e,SAAU9e,EAAK8e,SACfrrB,OAAQ3xB,KAAK4mE,OAAO1oC,EAAK8e,SAAU9e,EAAKvM,QAE5C,EAAEmL,KAAK98B,OAEGA,KAAKuT,KAAK8W,IAAI,SAASvpB,GAE/B,MAAO,CACLk8C,SAAUl8C,EACV6wB,OAHmB3xB,KAAK4mE,OAAO9lE,GAKnC,EAAEg8B,KAAK98B,OAGX,EAQAilE,EAAY9hD,UAAU8a,aAAe,SAASC,GAC5C,OAAOA,CACT,EAQA+mC,EAAY9hD,UAAUyjD,OAAS,SAAS1oC,EAAMqpC,GAC5C,GAAIA,EAEF,OAAOA,EAKT,IAHA,IAAIC,EAActpC,EAAK8e,SAAYh9C,KAAKi+B,aAAaC,EAAK8e,UAAYh9C,KAAKi+B,aAAaC,GACpFupC,EAAcznE,KAAKgnE,UAAUQ,GAC7BE,EAAeD,EAAYE,YAAY3nE,KAAKq/B,OACzCqoC,GAAgB,GAAG,CACxB,IAAIE,EAAkBF,EAAe1nE,KAAKq/B,MAAMhnC,OAChDmvE,EAAaA,EAAWpkD,MAAM,EAAGskD,GAAgB,WAAaF,EAAWpkD,MAAMskD,EAAcE,GAAmB,YAAcJ,EAAWpkD,MAAMwkD,GAC/IF,EAAeD,EAAYrkD,MAAM,EAAGskD,GAAcC,YAAY3nE,KAAKq/B,MACrE,CACA,OAAOmoC,CACT,EAMAvC,EAAY9hD,UAAU0kD,YAAc,SAASl/B,GAC3C3oC,KAAKy2B,KAAK4vC,UAAU19B,EACtB,EAEAxR,EAAOlnC,QAAUg1E,mBC/PjB,IAAI6C,EAAKj4E,EAAQ,OACbk4E,EAAKl4E,EAAQ,OAEbm4E,EAAOD,EACXC,EAAKF,GAAKA,EACVE,EAAKD,GAAKA,EAEV5wC,EAAOlnC,QAAU+3E,mBCPjB,IAQIC,EACAC,EATAC,EAAMt4E,EAAQ,OACdu4E,EAAcv4E,EAAQ,OAWtBw4E,EAAa,EACbC,EAAa,EA+FjBnxC,EAAOlnC,QA5FP,SAAYsoB,EAASylD,EAAKpmB,GACxB,IAAIjnD,EAAIqtE,GAAOpmB,GAAU,EACrB1tC,EAAI8zD,GAAO,GAGXuK,GADJhwD,EAAUA,GAAW,CAAC,GACHgwD,MAAQN,EACvBO,OAAgChtE,IAArB+c,EAAQiwD,SAAyBjwD,EAAQiwD,SAAWN,EAKnE,GAAY,MAARK,GAA4B,MAAZC,EAAkB,CACpC,IAAIC,EAAYN,IACJ,MAARI,IAEFA,EAAON,EAAU,CACA,EAAfQ,EAAU,GACVA,EAAU,GAAIA,EAAU,GAAIA,EAAU,GAAIA,EAAU,GAAIA,EAAU,KAGtD,MAAZD,IAEFA,EAAWN,EAAiD,OAApCO,EAAU,IAAM,EAAIA,EAAU,IAE1D,CAMA,IAAIC,OAA0BltE,IAAlB+c,EAAQmwD,MAAsBnwD,EAAQmwD,OAAQ,IAAIrtE,MAAO0Q,UAIjE48D,OAA0BntE,IAAlB+c,EAAQowD,MAAsBpwD,EAAQowD,MAAQL,EAAa,EAGnEM,EAAMF,EAAQL,GAAeM,EAAQL,GAAY,IAcrD,GAXIM,EAAK,QAA0BptE,IAArB+c,EAAQiwD,WACpBA,EAAWA,EAAW,EAAI,QAKvBI,EAAK,GAAKF,EAAQL,SAAiC7sE,IAAlB+c,EAAQowD,QAC5CA,EAAQ,GAINA,GAAS,IACX,MAAM,IAAIxqE,MAAM,mDAGlBkqE,EAAaK,EACbJ,EAAaK,EACbT,EAAYM,EAMZ,IAAIK,GAA4B,KAAb,WAHnBH,GAAS,cAG+BC,GAAS,WACjDz+D,EAAEvZ,KAAOk4E,IAAO,GAAK,IACrB3+D,EAAEvZ,KAAOk4E,IAAO,GAAK,IACrB3+D,EAAEvZ,KAAOk4E,IAAO,EAAI,IACpB3+D,EAAEvZ,KAAY,IAALk4E,EAGT,IAAIC,EAAOJ,EAAQ,WAAc,IAAS,UAC1Cx+D,EAAEvZ,KAAOm4E,IAAQ,EAAI,IACrB5+D,EAAEvZ,KAAa,IAANm4E,EAGT5+D,EAAEvZ,KAAOm4E,IAAQ,GAAK,GAAM,GAC5B5+D,EAAEvZ,KAAOm4E,IAAQ,GAAK,IAGtB5+D,EAAEvZ,KAAO63E,IAAa,EAAI,IAG1Bt+D,EAAEvZ,KAAkB,IAAX63E,EAGT,IAAK,IAAIlvE,EAAI,EAAGA,EAAI,IAAKA,EACvB4Q,EAAEvZ,EAAI2I,GAAKivE,EAAKjvE,GAGlB,OAAO0kE,GAAYoK,EAAYl+D,EACjC,aC1GAitB,EAAOlnC,QAIP,WAGI,IAFA,IAAIwuC,EAAS,CAAC,EAEL9tC,EAAI,EAAGA,EAAIma,UAAUzS,OAAQ1H,IAAK,CACvC,IAAIy3C,EAASt9B,UAAUna,GAEvB,IAAK,IAAIguB,KAAOypB,EACR/T,EAAehR,KAAK+kB,EAAQzpB,KAC5B8f,EAAO9f,GAAOypB,EAAOzpB,GAGjC,CAEA,OAAO8f,CACX,EAhBA,IAAIpK,EAAiBgB,OAAOlS,UAAUkR,0BCFtC,SAAS00C,EAAQ3zC,GAGf,OAAQ+B,EAAOlnC,QAAU84E,EAAU,mBAAqBC,QAAU,iBAAmBA,OAAOC,SAAW,SAAU7zC,GAC/G,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAO,mBAAqB4zC,QAAU5zC,EAAI+L,cAAgB6nC,QAAU5zC,IAAQ4zC,OAAO7lD,UAAY,gBAAkBiS,CAC1H,EAAG+B,EAAOlnC,QAAQi5E,YAAa,EAAM/xC,EAAOlnC,QAAiB,QAAIknC,EAAOlnC,QAAU84E,EAAQ3zC,EAC5F,CACA+B,EAAOlnC,QAAU84E,EAAS5xC,EAAOlnC,QAAQi5E,YAAa,EAAM/xC,EAAOlnC,QAAiB,QAAIknC,EAAOlnC","sources":["../node_modules/@formulajs/formulajs/index.js","../node_modules/@formulajs/formulajs/lib/compatibility.js","../node_modules/@formulajs/formulajs/lib/database.js","../node_modules/@formulajs/formulajs/lib/date-time.js","../node_modules/@formulajs/formulajs/lib/engineering.js","../node_modules/@formulajs/formulajs/lib/financial.js","../node_modules/@formulajs/formulajs/lib/information.js","../node_modules/@formulajs/formulajs/lib/logical.js","../node_modules/@formulajs/formulajs/lib/lookup-reference.js","../node_modules/@formulajs/formulajs/lib/math-trig.js","../node_modules/@formulajs/formulajs/lib/miscellaneous.js","../node_modules/@formulajs/formulajs/lib/statistical.js","../node_modules/@formulajs/formulajs/lib/text.js","../node_modules/@formulajs/formulajs/lib/utils/common.js","../node_modules/@formulajs/formulajs/lib/utils/criteria-eval.js","../node_modules/@formulajs/formulajs/lib/utils/error.js","../node_modules/@mapbox/fusspot/lib/index.js","../node_modules/@mapbox/mapbox-gl-geocoder/lib/events.js","../node_modules/@mapbox/mapbox-gl-geocoder/lib/exceptions.js","../node_modules/@mapbox/mapbox-gl-geocoder/lib/index.js","../node_modules/@mapbox/mapbox-sdk/index.js","../node_modules/@mapbox/mapbox-sdk/lib/browser/browser-client.js","../node_modules/@mapbox/mapbox-sdk/lib/browser/browser-layer.js","../node_modules/@mapbox/mapbox-sdk/lib/classes/mapi-client.js","../node_modules/@mapbox/mapbox-sdk/lib/classes/mapi-error.js","../node_modules/@mapbox/mapbox-sdk/lib/classes/mapi-request.js","../node_modules/@mapbox/mapbox-sdk/lib/classes/mapi-response.js","../node_modules/@mapbox/mapbox-sdk/lib/constants.js","../node_modules/@mapbox/mapbox-sdk/lib/helpers/parse-headers.js","../node_modules/@mapbox/mapbox-sdk/lib/helpers/parse-link-header.js","../node_modules/@mapbox/mapbox-sdk/lib/helpers/url-utils.js","../node_modules/@mapbox/mapbox-sdk/services/geocoding.js","../node_modules/@mapbox/mapbox-sdk/services/service-helpers/create-service-factory.js","../node_modules/@mapbox/mapbox-sdk/services/service-helpers/object-map.js","../node_modules/@mapbox/mapbox-sdk/services/service-helpers/pick.js","../node_modules/@mapbox/mapbox-sdk/services/service-helpers/stringify-booleans.js","../node_modules/@mapbox/mapbox-sdk/services/service-helpers/validator.js","../node_modules/@mapbox/parse-mapbox-token/index.js","../node_modules/base-64/base64.js","../node_modules/bessel/bessel.js","../node_modules/eventemitter3/index.js","../node_modules/events/events.js","../../../../src/lib/errors.enum.ts","../../../../../src/lib/grammar-parser/grammar-parser.js","../../../../../../src/lib/operate/operators/concatenate.ts","../../../../src/lib/utils.functions.ts","../../../../../../src/lib/operate/operators/divided-by.ts","../../../../../src/lib/operate/operate.ts","../../../../../../src/lib/operate/operators/equal.ts","../../../../../../src/lib/operate/operators/greater-than.ts","../../../../../../src/lib/operate/operators/greater-than-or-equal.ts","../../../../../../src/lib/operate/operators/less-than.ts","../../../../../../src/lib/operate/operators/less-than-or-equal.ts","../../../../../../src/lib/operate/operators/not-equal.ts","../../../../../../src/lib/operate/operators/plus.ts","../../../../../../src/lib/operate/operators/minus.ts","../../../../../../src/lib/operate/operators/times.ts","../../../../../../src/lib/operate/operators/power.ts","../../../../src/lib/options.ts","../../../../src/lib/parser.class.ts","../node_modules/fuzzy/lib/fuzzy.js","../node_modules/gumshoejs/dist/gumshoe.min.js","../node_modules/inherits/inherits_browser.js","../node_modules/is-plain-obj/index.js","../node_modules/jstat/dist/jstat.js","../node_modules/safe-buffer/index.js","../node_modules/sha.js/hash.js","../node_modules/sha.js/index.js","../node_modules/sha.js/sha.js","../node_modules/sha.js/sha1.js","../node_modules/sha.js/sha224.js","../node_modules/sha.js/sha256.js","../node_modules/sha.js/sha384.js","../node_modules/sha.js/sha512.js","../node_modules/suggestions/index.js","../node_modules/suggestions/src/list.js","../node_modules/suggestions/src/suggestions.js","../node_modules/uuid/index.js","../node_modules/uuid/v1.js","../node_modules/xtend/immutable.js","../node_modules/@babel/runtime/helpers/typeof.js"],"sourcesContent":["var categories = [\n require('./lib/compatibility'),\n require('./lib/database'),\n require('./lib/engineering'),\n require('./lib/logical'),\n require('./lib/math-trig'),\n require('./lib/text'),\n require('./lib/date-time'),\n require('./lib/financial'),\n require('./lib/information'),\n require('./lib/lookup-reference'),\n require('./lib/statistical'),\n require('./lib/miscellaneous')\n];\n\nfor (var c in categories) {\n var category = categories[c];\n for (var f in category) {\n exports[f] = exports[f] || category[f];\n }\n}\nexports.utils = {\n errors: require('./lib/utils/error')\n};\n","var mathTrig = require('./math-trig');\nvar statistical = require('./statistical');\nvar engineering = require('./engineering');\nvar dateTime = require('./date-time');\n\nfunction set(fn, root) {\n if (root) {\n for (var i in root) {\n fn[i] = root[i];\n }\n }\n\n return fn;\n}\n\nexports.BETADIST = statistical.BETA.DIST;\nexports.BETAINV = statistical.BETA.INV;\nexports.BINOMDIST = statistical.BINOM.DIST;\nexports.CEILING = exports.ISOCEILING = set(mathTrig.CEILING.MATH, mathTrig.CEILING);\nexports.CEILINGMATH = mathTrig.CEILING.MATH;\nexports.CEILINGPRECISE = mathTrig.CEILING.PRECISE;\nexports.CHIDIST = statistical.CHISQ.DIST;\nexports.CHIDISTRT = statistical.CHISQ.DIST.RT;\nexports.CHIINV = statistical.CHISQ.INV;\nexports.CHIINVRT = statistical.CHISQ.INV.RT;\nexports.CHITEST = statistical.CHISQ.TEST;\nexports.CONFIDENCE = set(statistical.CONFIDENCE.NORM, statistical.CONFIDENCE);\nexports.COVAR = statistical.COVARIANCE.P;\nexports.COVARIANCEP = statistical.COVARIANCE.P;\nexports.COVARIANCES = statistical.COVARIANCE.S;\nexports.CRITBINOM = statistical.BINOM.INV;\nexports.EXPONDIST = statistical.EXPON.DIST;\nexports.ERFCPRECISE = engineering.ERFC.PRECISE;\nexports.ERFPRECISE = engineering.ERF.PRECISE;\nexports.FDIST = statistical.F.DIST;\nexports.FDISTRT = statistical.F.DIST.RT;\nexports.FINVRT = statistical.F.INV.RT;\nexports.FINV = statistical.F.INV;\nexports.FLOOR = set(mathTrig.FLOOR.MATH, mathTrig.FLOOR);\nexports.FLOORMATH = mathTrig.FLOOR.MATH;\nexports.FLOORPRECISE = mathTrig.FLOOR.PRECISE;\nexports.FTEST = statistical.F.TEST;\nexports.GAMMADIST = statistical.GAMMA.DIST;\nexports.GAMMAINV = statistical.GAMMA.INV;\nexports.GAMMALNPRECISE = statistical.GAMMALN.PRECISE;\nexports.HYPGEOMDIST = statistical.HYPGEOM.DIST;\nexports.LOGINV = statistical.LOGNORM.INV;\nexports.LOGNORMINV = statistical.LOGNORM.INV;\nexports.LOGNORMDIST = statistical.LOGNORM.DIST;\nexports.MODE = set(statistical.MODE.SNGL, statistical.MODE);\nexports.MODEMULT = statistical.MODE.MULT;\nexports.MODESNGL = statistical.MODE.SNGL;\nexports.NEGBINOMDIST = statistical.NEGBINOM.DIST;\nexports.NETWORKDAYSINTL = dateTime.NETWORKDAYS.INTL;\nexports.NORMDIST = statistical.NORM.DIST;\nexports.NORMINV = statistical.NORM.INV;\nexports.NORMSDIST = statistical.NORM.S.DIST;\nexports.NORMSINV = statistical.NORM.S.INV;\nexports.PERCENTILE = set(statistical.PERCENTILE.EXC, statistical.PERCENTILE);\nexports.PERCENTILEEXC = statistical.PERCENTILE.EXC;\nexports.PERCENTILEINC = statistical.PERCENTILE.INC;\nexports.PERCENTRANK = set(statistical.PERCENTRANK.INC, statistical.PERCENTRANK);\nexports.PERCENTRANKEXC = statistical.PERCENTRANK.EXC;\nexports.PERCENTRANKINC = statistical.PERCENTRANK.INC;\nexports.POISSON = set(statistical.POISSON.DIST, statistical.POISSON);\nexports.POISSONDIST = statistical.POISSON.DIST;\nexports.QUARTILE = set(statistical.QUARTILE.INC, statistical.QUARTILE);\nexports.QUARTILEEXC = statistical.QUARTILE.EXC;\nexports.QUARTILEINC = statistical.QUARTILE.INC;\nexports.RANK = set(statistical.RANK.EQ, statistical.RANK);\nexports.RANKAVG = statistical.RANK.AVG;\nexports.RANKEQ = statistical.RANK.EQ;\nexports.SKEWP = statistical.SKEW.P;\nexports.STDEV = set(statistical.STDEV.S, statistical.STDEV);\nexports.STDEVP = statistical.STDEV.P;\nexports.STDEVS = statistical.STDEV.S;\nexports.TDIST = statistical.T.DIST;\nexports.TDISTRT = statistical.T.DIST.RT;\nexports.TINV = statistical.T.INV;\nexports.TTEST = statistical.T.TEST;\nexports.VAR = set(statistical.VAR.S, statistical.VAR);\nexports.VARP = statistical.VAR.P;\nexports.VARS = statistical.VAR.S;\nexports.WEIBULL = set(statistical.WEIBULL.DIST, statistical.WEIBULL);\nexports.WEIBULLDIST = statistical.WEIBULL.DIST;\nexports.WORKDAYINTL = dateTime.WORKDAY.INTL;\nexports.ZTEST = statistical.Z.TEST;\n","var error = require('./utils/error');\nvar stats = require('./statistical');\nvar maths = require('./math-trig');\nvar utils = require('./utils/common');\nvar evalExpression = require('./utils/criteria-eval');\n\nfunction compact(array) {\n var result = [];\n\n utils.arrayEach(array, function(value) {\n if (value) {\n result.push(value);\n }\n });\n\n return result;\n}\n\nexports.FINDFIELD = function(database, title) {\n var index = null;\n\n utils.arrayEach(database, function(value, i) {\n if (value[0] === title) {\n index = i;\n return false;\n }\n });\n\n // Return error if the input field title is incorrect\n if (index == null) {\n return error.value;\n }\n\n return index;\n};\n\nfunction findResultIndex(database, criterias) {\n var matches = {};\n for (var i = 1; i < database[0].length; ++i) {\n matches[i] = true;\n }\n var maxCriteriaLength = criterias[0].length;\n for (i = 1; i < criterias.length; ++i) {\n if (criterias[i].length > maxCriteriaLength) {\n maxCriteriaLength = criterias[i].length;\n }\n }\n\n for (var k = 1; k < database.length; ++k) {\n for (var l = 1; l < database[k].length; ++l) {\n var currentCriteriaResult = false;\n var hasMatchingCriteria = false;\n for (var j = 0; j < criterias.length; ++j) {\n var criteria = criterias[j];\n if (criteria.length < maxCriteriaLength) {\n continue;\n }\n\n var criteriaField = criteria[0];\n if (database[k][0] !== criteriaField) {\n continue;\n }\n hasMatchingCriteria = true;\n for (var p = 1; p < criteria.length; ++p) {\n if (!currentCriteriaResult) {\n var isWildcard = criteria[p] === void 0 || criteria[p] === '*';\n\n if (isWildcard) {\n currentCriteriaResult = true;\n } else {\n var tokenizedCriteria = evalExpression.parse(criteria[p] + '');\n var tokens = [evalExpression.createToken(database[k][l], evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria);\n\n currentCriteriaResult = evalExpression.compute(tokens);\n }\n }\n }\n }\n if (hasMatchingCriteria) {\n matches[l] = matches[l] && currentCriteriaResult;\n }\n }\n }\n\n var result = [];\n for (var n = 0; n < database[0].length; ++n) {\n if (matches[n]) {\n result.push(n - 1);\n }\n }\n\n return result;\n}\n\n// Database functions\nexports.DAVERAGE = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== \"string\")) {\n return error.value;\n }\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === \"string\") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n var sum = 0;\n\n utils.arrayEach(resultIndexes, function(value) {\n sum += targetFields[value];\n });\n\n return resultIndexes.length === 0 ? error.div0 : sum / resultIndexes.length;\n};\n\nexports.DCOUNT = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== \"string\")) {\n return error.value;\n }\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === \"string\") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n\n var targetValues = [];\n\n utils.arrayEach(resultIndexes, function(value) {\n targetValues.push(targetFields[value]);\n });\n\n return stats.COUNT(targetValues);\n};\n\nexports.DCOUNTA = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== \"string\")) {\n return error.value;\n }\n\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === \"string\") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n\n var targetValues = [];\n\n utils.arrayEach(resultIndexes, function(value) {\n targetValues.push(targetFields[value]);\n });\n\n return stats.COUNTA(targetValues);\n};\n\nexports.DGET = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== \"string\")) {\n return error.value;\n }\n\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === \"string\") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n\n // Return error if no record meets the criteria\n if (resultIndexes.length === 0) {\n return error.value;\n }\n // Returns the #NUM! error value because more than one record meets the\n // criteria\n if (resultIndexes.length > 1) {\n return error.num;\n }\n\n return targetFields[resultIndexes[0]];\n};\n\nexports.DMAX = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== \"string\")) {\n return error.value;\n }\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === \"string\") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n\n var maxValue = targetFields[resultIndexes[0]];\n\n utils.arrayEach(resultIndexes, function(value) {\n if (maxValue < targetFields[value]) {\n maxValue = targetFields[value];\n }\n });\n\n return maxValue;\n};\n\nexports.DMIN = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== \"string\")) {\n return error.value;\n }\n\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === \"string\") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n\n var minValue = targetFields[resultIndexes[0]];\n\n utils.arrayEach(resultIndexes, function(value) {\n if (minValue > targetFields[value]) {\n minValue = targetFields[value];\n }\n });\n\n return minValue;\n};\n\nexports.DPRODUCT = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== \"string\")) {\n return error.value;\n }\n\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === \"string\") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n\n var targetValues = [];\n\n utils.arrayEach(resultIndexes, function(value) {\n targetValues.push(targetFields[value]);\n });\n targetValues = compact(targetValues);\n\n var result = 1;\n\n utils.arrayEach(targetValues, function(value) {\n result *= value;\n });\n\n return result;\n};\n\nexports.DSTDEV = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== \"string\")) {\n return error.value;\n }\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === \"string\") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n var targetValues = [];\n\n utils.arrayEach(resultIndexes, function(value) {\n targetValues.push(targetFields[value]);\n });\n targetValues = compact(targetValues);\n\n return stats.STDEV.S(targetValues);\n};\n\nexports.DSTDEVP = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== \"string\")) {\n return error.value;\n }\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === \"string\") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n\n var targetValues = [];\n\n utils.arrayEach(resultIndexes, function(value) {\n targetValues.push(targetFields[value]);\n });\n targetValues = compact(targetValues);\n\n return stats.STDEV.P(targetValues);\n};\n\nexports.DSUM = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== \"string\")) {\n return error.value;\n }\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === \"string\") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n\n var targetValues = [];\n\n utils.arrayEach(resultIndexes, function(value) {\n targetValues.push(targetFields[value]);\n });\n\n return maths.SUM(targetValues);\n};\n\nexports.DVAR = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== \"string\")) {\n return error.value;\n }\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === \"string\") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n var targetValues = [];\n\n utils.arrayEach(resultIndexes, function(value) {\n targetValues.push(targetFields[value]);\n });\n\n return stats.VAR.S(targetValues);\n};\n\nexports.DVARP = function(database, field, criteria) {\n // Return error if field is not a number and not a string\n if (isNaN(field) && (typeof field !== \"string\")) {\n return error.value;\n }\n var resultIndexes = findResultIndex(database, criteria);\n var targetFields = [];\n\n if (typeof field === \"string\") {\n var index = exports.FINDFIELD(database, field);\n targetFields = utils.rest(database[index]);\n } else {\n targetFields = utils.rest(database[field]);\n }\n var targetValues = [];\n\n utils.arrayEach(resultIndexes, function(value) {\n targetValues.push(targetFields[value]);\n });\n\n return stats.VAR.P(targetValues);\n};\n","var error = require('./utils/error');\nvar utils = require('./utils/common');\n\nvar d1900 = new Date(Date.UTC(1900, 0, 1));\nvar WEEK_STARTS = [\n undefined,\n 0,\n 1,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 0\n];\nvar WEEK_TYPES = [\n [],\n [1, 2, 3, 4, 5, 6, 7],\n [7, 1, 2, 3, 4, 5, 6],\n [6, 0, 1, 2, 3, 4, 5],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [7, 1, 2, 3, 4, 5, 6],\n [6, 7, 1, 2, 3, 4, 5],\n [5, 6, 7, 1, 2, 3, 4],\n [4, 5, 6, 7, 1, 2, 3],\n [3, 4, 5, 6, 7, 1, 2],\n [2, 3, 4, 5, 6, 7, 1],\n [1, 2, 3, 4, 5, 6, 7]\n];\nvar WEEKEND_TYPES = [\n [],\n [6, 0],\n [0, 1],\n [1, 2],\n [2, 3],\n [3, 4],\n [4, 5],\n [5, 6],\n undefined,\n undefined,\n undefined, [0, 0],\n [1, 1],\n [2, 2],\n [3, 3],\n [4, 4],\n [5, 5],\n [6, 6]\n];\n\nexports.DATE = function (year, month, day) {\n var result;\n\n year = utils.parseNumber(year);\n month = utils.parseNumber(month);\n day = utils.parseNumber(day);\n\n if (utils.anyIsError(year, month, day)) {\n result = error.value;\n\n } else {\n result = new Date(year, month - 1, day);\n if (result.getFullYear() < 0) {\n result = error.num;\n }\n }\n\n return result;\n};\n\nexports.DATEDIF = function (start_date, end_date, unit) {\n unit = unit.toUpperCase();\n start_date = utils.parseDate(start_date);\n end_date = utils.parseDate(end_date);\n\n var start_date_year = start_date.getFullYear();\n var start_date_month = start_date.getMonth();\n var start_date_day = start_date.getDate();\n var end_date_year = end_date.getFullYear();\n var end_date_month = end_date.getMonth();\n var end_date_day = end_date.getDate();\n\n var result;\n switch (unit) {\n case 'Y':\n result = Math.floor(exports.YEARFRAC(start_date, end_date));\n break;\n case 'D':\n result = exports.DAYS(end_date, start_date);\n break;\n case 'M':\n result = end_date_month - start_date_month + 12 * (end_date_year - start_date_year);\n if (end_date_day < start_date_day) {\n result--;\n }\n break;\n case 'MD':\n if (start_date_day <= end_date_day) {\n result = end_date_day - start_date_day;\n } else {\n if (end_date_month === 0) {\n start_date.setFullYear(end_date_year - 1);\n start_date.setMonth(12);\n } else {\n start_date.setFullYear(end_date_year);\n start_date.setMonth(end_date_month - 1);\n }\n result = exports.DAYS(end_date, start_date);\n }\n break;\n case 'YM':\n result = end_date_month - start_date_month + 12 * (end_date_year - start_date_year);\n if (end_date_day < start_date_day) {\n result--;\n }\n result = result % 12;\n break;\n case 'YD':\n if (end_date_month > start_date_month || (end_date_month === start_date_month && end_date_day < start_date_day)) {\n start_date.setFullYear(end_date_year);\n } else {\n start_date.setFullYear(end_date_year - 1);\n }\n\n result = exports.DAYS(end_date, start_date);\n break;\n }\n\n return result;\n};\n\nexports.DATEVALUE = function (date_text) {\n if (typeof date_text !== 'string') {\n return error.value;\n }\n\n var date = Date.parse(date_text);\n\n if (isNaN(date)) {\n return error.value;\n }\n\n return new Date(date_text);\n};\n\nexports.DAY = function (serial_number) {\n var date = utils.parseDate(serial_number);\n if (date instanceof Error) {\n return date;\n }\n\n return date.getDate();\n};\n\nfunction startOfDay(date) {\n var newDate = new Date(date);\n newDate.setHours(0, 0, 0, 0);\n return newDate;\n}\n\nexports.DAYS = function (end_date, start_date) {\n end_date = utils.parseDate(end_date);\n start_date = utils.parseDate(start_date);\n\n if (end_date instanceof Error) {\n return end_date;\n }\n if (start_date instanceof Error) {\n return start_date;\n }\n\n return serial(startOfDay(end_date)) - serial(startOfDay(start_date));\n};\n\nexports.DAYS360 = function (start_date, end_date, method) {\n method = utils.parseBool(method || 'false');\n start_date = utils.parseDate(start_date);\n end_date = utils.parseDate(end_date);\n\n if (start_date instanceof Error) {\n return start_date;\n }\n if (end_date instanceof Error) {\n return end_date;\n }\n if (method instanceof Error) {\n return method;\n }\n var sm = start_date.getMonth();\n var em = end_date.getMonth();\n var sd, ed;\n\n if (method) {\n sd = start_date.getDate() === 31 ? 30 : start_date.getDate();\n ed = end_date.getDate() === 31 ? 30 : end_date.getDate();\n } else {\n var smd = new Date(start_date.getFullYear(), sm + 1, 0).getDate();\n var emd = new Date(end_date.getFullYear(), em + 1, 0).getDate();\n sd = start_date.getDate() === smd ? 30 : start_date.getDate();\n if (end_date.getDate() === emd) {\n if (sd < 30) {\n em++;\n ed = 1;\n } else {\n ed = 30;\n }\n } else {\n ed = end_date.getDate();\n }\n }\n\n return 360 * (end_date.getFullYear() - start_date.getFullYear()) +\n 30 * (em - sm) + (ed - sd);\n};\n\nexports.EDATE = function (start_date, months) {\n start_date = utils.parseDate(start_date);\n\n if (start_date instanceof Error) {\n return start_date;\n }\n if (isNaN(months)) {\n return error.value;\n }\n months = parseInt(months, 10);\n start_date.setMonth(start_date.getMonth() + months);\n\n return start_date;\n};\n\nexports.EOMONTH = function (start_date, months) {\n start_date = utils.parseDate(start_date);\n\n if (start_date instanceof Error) {\n return start_date;\n }\n if (isNaN(months)) {\n return error.value;\n }\n months = parseInt(months, 10);\n\n return new Date(start_date.getFullYear(), start_date.getMonth() + months + 1, 0);\n};\n\nexports.HOUR = function (serial_number) {\n serial_number = utils.parseDate(serial_number);\n\n if (serial_number instanceof Error) {\n return serial_number;\n }\n\n return serial_number.getHours();\n};\n\nexports.INTERVAL = function (second) {\n if (typeof second !== 'number' && typeof second !== 'string') {\n return error.value;\n } else {\n second = parseInt(second, 10);\n }\n\n var year = Math.floor(second / 946080000);\n second = second % 946080000;\n var month = Math.floor(second / 2592000);\n second = second % 2592000;\n var day = Math.floor(second / 86400);\n second = second % 86400;\n\n var hour = Math.floor(second / 3600);\n second = second % 3600;\n var min = Math.floor(second / 60);\n second = second % 60;\n var sec = second;\n\n year = (year > 0) ? year + 'Y' : '';\n month = (month > 0) ? month + 'M' : '';\n day = (day > 0) ? day + 'D' : '';\n hour = (hour > 0) ? hour + 'H' : '';\n min = (min > 0) ? min + 'M' : '';\n sec = (sec > 0) ? sec + 'S' : '';\n\n return 'P' + year + month + day + 'T' + hour + min + sec;\n};\n\nexports.ISOWEEKNUM = function (date) {\n date = utils.parseDate(date);\n\n if (date instanceof Error) {\n return date;\n }\n\n date = startOfDay(date);\n date.setDate(date.getDate() + 4 - (date.getDay() || 7));\n var yearStart = new Date(date.getFullYear(), 0, 1);\n\n return Math.ceil((((date - yearStart) / 86400000) + 1) / 7);\n};\n\nexports.MINUTE = function (serial_number) {\n serial_number = utils.parseDate(serial_number);\n\n if (serial_number instanceof Error) {\n return serial_number;\n }\n\n return serial_number.getMinutes();\n};\n\nexports.MONTH = function (serial_number) {\n serial_number = utils.parseDate(serial_number);\n\n if (serial_number instanceof Error) {\n return serial_number;\n }\n\n return serial_number.getMonth() + 1;\n};\n\nexports.NETWORKDAYS = function (start_date, end_date, holidays) {\n return this.NETWORKDAYS.INTL(start_date, end_date, 1, holidays);\n};\n\nexports.NETWORKDAYS.INTL = function (start_date, end_date, weekend, holidays) {\n start_date = utils.parseDate(start_date);\n\n if (start_date instanceof Error) {\n return start_date;\n }\n end_date = utils.parseDate(end_date);\n\n if (end_date instanceof Error) {\n return end_date;\n }\n\n var isMask = false;\n var maskDays = [];\n var maskIndex = [1, 2, 3, 4, 5, 6, 0];\n var maskRegex = new RegExp('^[0|1]{7}$');\n\n if (weekend === undefined) {\n weekend = WEEKEND_TYPES[1];\n } else if (typeof weekend === 'string' && maskRegex.test(weekend)) {\n isMask = true;\n weekend = weekend.split('');\n for (i = 0; i < weekend.length; i++) {\n if (weekend[i] === '1') {\n maskDays.push(maskIndex[i]);\n }\n }\n } else {\n weekend = WEEKEND_TYPES[weekend];\n }\n if (!(weekend instanceof Array)) {\n return error.value;\n }\n if (holidays === undefined) {\n holidays = [];\n } else if (!(holidays instanceof Array)) {\n holidays = [holidays];\n }\n\n for (var i = 0; i < holidays.length; i++) {\n var h = utils.parseDate(holidays[i]);\n if (h instanceof Error) {\n return h;\n }\n holidays[i] = h;\n }\n var days = Math.round((end_date - start_date) / (1000 * 60 * 60 * 24)) + 1;\n var total = days;\n var day = start_date;\n for (i = 0; i < days; i++) {\n var d = (new Date().getTimezoneOffset() > 0) ? day.getUTCDay() : day.getDay();\n var dec = isMask ? maskDays.includes(d) : (d === weekend[0] || d === weekend[1]);\n for (var j = 0; j < holidays.length; j++) {\n var holiday = holidays[j];\n if (holiday.getDate() === day.getDate() &&\n holiday.getMonth() === day.getMonth() &&\n holiday.getFullYear() === day.getFullYear()) {\n dec = true;\n break;\n }\n }\n if (dec) {\n total--;\n }\n day.setDate(day.getDate() + 1);\n }\n\n return total;\n};\n\nexports.NOW = function () {\n return new Date();\n};\n\nexports.SECOND = function (serial_number) {\n serial_number = utils.parseDate(serial_number);\n if (serial_number instanceof Error) {\n return serial_number;\n }\n\n return serial_number.getSeconds();\n};\n\nexports.TIME = function (hour, minute, second) {\n hour = utils.parseNumber(hour);\n minute = utils.parseNumber(minute);\n second = utils.parseNumber(second);\n if (utils.anyIsError(hour, minute, second)) {\n return error.value;\n }\n if (hour < 0 || minute < 0 || second < 0) {\n return error.num;\n }\n\n return (3600 * hour + 60 * minute + second) / 86400;\n};\n\nexports.TIMEVALUE = function (time_text) {\n time_text = utils.parseDate(time_text);\n\n if (time_text instanceof Error) {\n return time_text;\n }\n\n return (3600 * time_text.getHours() + 60 * time_text.getMinutes() + time_text.getSeconds()) / 86400;\n};\n\nexports.TODAY = function () {\n return startOfDay(new Date());\n};\n\nexports.WEEKDAY = function (serial_number, return_type) {\n serial_number = utils.parseDate(serial_number);\n if (serial_number instanceof Error) {\n return serial_number;\n }\n if (return_type === undefined) {\n return_type = 1;\n }\n var day = serial_number.getDay();\n\n return WEEK_TYPES[return_type][day];\n};\n\nexports.WEEKNUM = function (serial_number, return_type) {\n serial_number = utils.parseDate(serial_number);\n if (serial_number instanceof Error) {\n return serial_number;\n }\n if (return_type === undefined) {\n return_type = 1;\n }\n if (return_type === 21) {\n return this.ISOWEEKNUM(serial_number);\n }\n var week_start = WEEK_STARTS[return_type];\n var jan = new Date(serial_number.getFullYear(), 0, 1);\n var inc = jan.getDay() < week_start ? 1 : 0;\n jan -= Math.abs(jan.getDay() - week_start) * 24 * 60 * 60 * 1000;\n\n return Math.floor(((serial_number - jan) / (1000 * 60 * 60 * 24)) / 7 + 1) + inc;\n};\n\nexports.WORKDAY = function (start_date, days, holidays) {\n return this.WORKDAY.INTL(start_date, days, 1, holidays);\n};\n\nexports.WORKDAY.INTL = function (start_date, days, weekend, holidays) {\n start_date = utils.parseDate(start_date);\n if (start_date instanceof Error) {\n return start_date;\n }\n days = utils.parseNumber(days);\n if (days instanceof Error) {\n return days;\n }\n if (days < 0) {\n return error.num;\n }\n if (weekend === undefined) {\n weekend = WEEKEND_TYPES[1];\n } else {\n weekend = WEEKEND_TYPES[weekend];\n }\n if (!(weekend instanceof Array)) {\n return error.value;\n }\n if (holidays === undefined) {\n holidays = [];\n } else if (!(holidays instanceof Array)) {\n holidays = [holidays];\n }\n for (var i = 0; i < holidays.length; i++) {\n var h = utils.parseDate(holidays[i]);\n if (h instanceof Error) {\n return h;\n }\n holidays[i] = h;\n }\n var d = 0;\n while (d < days) {\n start_date.setDate(start_date.getDate() + 1);\n var day = start_date.getDay();\n if (day === weekend[0] || day === weekend[1]) {\n continue;\n }\n for (var j = 0; j < holidays.length; j++) {\n var holiday = holidays[j];\n if (holiday.getDate() === start_date.getDate() &&\n holiday.getMonth() === start_date.getMonth() &&\n holiday.getFullYear() === start_date.getFullYear()) {\n d--;\n break;\n }\n }\n d++;\n }\n\n return start_date;\n};\n\nexports.YEAR = function (serial_number) {\n serial_number = utils.parseDate(serial_number);\n\n if (serial_number instanceof Error) {\n return serial_number;\n }\n\n return serial_number.getFullYear();\n};\n\nfunction isLeapYear(year) {\n return new Date(year, 1, 29).getMonth() === 1;\n}\n\n// TODO : Use DAYS ?\nfunction daysBetween(start_date, end_date) {\n return Math.ceil((end_date - start_date) / 1000 / 60 / 60 / 24);\n}\n\nexports.YEARFRAC = function (start_date, end_date, basis) {\n start_date = utils.parseDate(start_date);\n if (start_date instanceof Error) {\n return start_date;\n }\n end_date = utils.parseDate(end_date);\n if (end_date instanceof Error) {\n return end_date;\n }\n\n basis = basis || 0;\n var sd = start_date.getDate();\n var sm = start_date.getMonth() + 1;\n var sy = start_date.getFullYear();\n var ed = end_date.getDate();\n var em = end_date.getMonth() + 1;\n var ey = end_date.getFullYear();\n\n switch (basis) {\n case 0:\n // US (NASD) 30/360\n if (sd === 31 && ed === 31) {\n sd = 30;\n ed = 30;\n } else if (sd === 31) {\n sd = 30;\n } else if (sd === 30 && ed === 31) {\n ed = 30;\n }\n return ((ed + em * 30 + ey * 360) - (sd + sm * 30 + sy * 360)) / 360;\n case 1:\n // Actual/actual\n var feb29Between = function (date1, date2) {\n var year1 = date1.getFullYear();\n var mar1year1 = new Date(year1, 2, 1);\n if (isLeapYear(year1) && date1 < mar1year1 && date2 >= mar1year1) {\n return true;\n }\n var year2 = date2.getFullYear();\n var mar1year2 = new Date(year2, 2, 1);\n return (isLeapYear(year2) && date2 >= mar1year2 && date1 < mar1year2);\n };\n var ylength = 365;\n if (sy === ey || ((sy + 1) === ey) && ((sm > em) || ((sm === em) && (sd >= ed)))) {\n if ((sy === ey && isLeapYear(sy)) ||\n feb29Between(start_date, end_date) ||\n (em === 1 && ed === 29)) {\n ylength = 366;\n }\n return daysBetween(start_date, end_date) / ylength;\n }\n var years = (ey - sy) + 1;\n var days = (new Date(ey + 1, 0, 1) - new Date(sy, 0, 1)) / 1000 / 60 / 60 / 24;\n var average = days / years;\n return daysBetween(start_date, end_date) / average;\n case 2:\n // Actual/360\n return daysBetween(start_date, end_date) / 360;\n case 3:\n // Actual/365\n return daysBetween(start_date, end_date) / 365;\n case 4:\n // European 30/360\n return ((ed + em * 30 + ey * 360) - (sd + sm * 30 + sy * 360)) / 360;\n }\n};\n\nfunction serial(date) {\n var addOn = (date > -2203891200000) ? 2 : 1;\n\n return Math.ceil((date - d1900) / 86400000) + addOn;\n}\n","var error = require('./utils/error');\nvar jStat = require('jstat');\nvar text = require('./text');\nvar utils = require('./utils/common');\nvar bessel = require('bessel');\n\nfunction isValidBinaryNumber(number) {\n return (/^[01]{1,10}$/).test(number);\n}\n\nexports.BESSELI = function(x, n) {\n x = utils.parseNumber(x);\n n = utils.parseNumber(n);\n if (utils.anyIsError(x, n)) {\n return error.value;\n }\n\n return bessel.besseli(x, n);\n};\n\nexports.BESSELJ = function(x, n) {\n x = utils.parseNumber(x);\n n = utils.parseNumber(n);\n if (utils.anyIsError(x, n)) {\n return error.value;\n }\n\n return bessel.besselj(x, n);\n};\n\nexports.BESSELK = function(x, n) {\n x = utils.parseNumber(x);\n n = utils.parseNumber(n);\n if (utils.anyIsError(x, n)) {\n return error.value;\n }\n\n return bessel.besselk(x, n);\n};\n\nexports.BESSELY = function(x, n) {\n x = utils.parseNumber(x);\n n = utils.parseNumber(n);\n if (utils.anyIsError(x, n)) {\n return error.value;\n }\n\n return bessel.bessely(x, n);\n};\n\nexports.BIN2DEC = function(number) {\n // Return error if number is not binary or contains more than 10 characters (10 digits)\n if (!isValidBinaryNumber(number)) {\n return error.num;\n }\n\n // Convert binary number to decimal\n var result = parseInt(number, 2);\n\n // Handle negative numbers\n var stringified = number.toString();\n if (stringified.length === 10 && stringified.substring(0, 1) === '1') {\n return parseInt(stringified.substring(1), 2) - 512;\n } else {\n return result;\n }\n};\n\n\nexports.BIN2HEX = function(number, places) {\n // Return error if number is not binary or contains more than 10 characters (10 digits)\n if (!isValidBinaryNumber(number)) {\n return error.num;\n }\n\n // Ignore places and return a 10-character hexadecimal number if number is negative\n var stringified = number.toString();\n if (stringified.length === 10 && stringified.substring(0, 1) === '1') {\n return (1099511627264 + parseInt(stringified.substring(1), 2)).toString(16);\n }\n\n // Convert binary number to hexadecimal\n var result = parseInt(number, 2).toString(16);\n\n // Return hexadecimal number using the minimum number of characters necessary if places is undefined\n if (places === undefined) {\n return result;\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return error.value;\n }\n\n // Return error if places is negative\n if (places < 0) {\n return error.num;\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return (places >= result.length) ? text.REPT('0', places - result.length) + result : error.num;\n }\n};\n\nexports.BIN2OCT = function(number, places) {\n // Return error if number is not binary or contains more than 10 characters (10 digits)\n if (!isValidBinaryNumber(number)) {\n return error.num;\n }\n\n // Ignore places and return a 10-character octal number if number is negative\n var stringified = number.toString();\n if (stringified.length === 10 && stringified.substring(0, 1) === '1') {\n return (1073741312 + parseInt(stringified.substring(1), 2)).toString(8);\n }\n\n // Convert binary number to octal\n var result = parseInt(number, 2).toString(8);\n\n // Return octal number using the minimum number of characters necessary if places is undefined\n if (places === undefined) {\n return result;\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return error.value;\n }\n\n // Return error if places is negative\n if (places < 0) {\n return error.num;\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return (places >= result.length) ? text.REPT('0', places - result.length) + result : error.num;\n }\n};\n\nexports.BITAND = function(number1, number2) {\n // Return error if either number is a non-numeric value\n number1 = utils.parseNumber(number1);\n number2 = utils.parseNumber(number2);\n if (utils.anyIsError(number1, number2)) {\n return error.value;\n }\n\n // Return error if either number is less than 0\n if (number1 < 0 || number2 < 0) {\n return error.num;\n }\n\n // Return error if either number is a non-integer\n if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\n return error.num;\n }\n\n // Return error if either number is greater than (2^48)-1\n if (number1 > 281474976710655 || number2 > 281474976710655) {\n return error.num;\n }\n\n // Return bitwise AND of two numbers\n return number1 & number2;\n};\n\nexports.BITLSHIFT = function(number, shift) {\n number = utils.parseNumber(number);\n shift = utils.parseNumber(shift);\n if (utils.anyIsError(number, shift)) {\n return error.value;\n }\n\n // Return error if number is less than 0\n if (number < 0) {\n return error.num;\n }\n\n // Return error if number is a non-integer\n if (Math.floor(number) !== number) {\n return error.num;\n }\n\n // Return error if number is greater than (2^48)-1\n if (number > 281474976710655) {\n return error.num;\n }\n\n // Return error if the absolute value of shift is greater than 53\n if (Math.abs(shift) > 53) {\n return error.num;\n }\n\n // Return number shifted by shift bits to the left or to the right if shift is negative\n return (shift >= 0) ? number << shift : number >> -shift;\n};\n\nexports.BITOR = function(number1, number2) {\n number1 = utils.parseNumber(number1);\n number2 = utils.parseNumber(number2);\n if (utils.anyIsError(number1, number2)) {\n return error.value;\n }\n\n // Return error if either number is less than 0\n if (number1 < 0 || number2 < 0) {\n return error.num;\n }\n\n // Return error if either number is a non-integer\n if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\n return error.num;\n }\n\n // Return error if either number is greater than (2^48)-1\n if (number1 > 281474976710655 || number2 > 281474976710655) {\n return error.num;\n }\n\n // Return bitwise OR of two numbers\n return number1 | number2;\n};\n\nexports.BITRSHIFT = function(number, shift) {\n number = utils.parseNumber(number);\n shift = utils.parseNumber(shift);\n if (utils.anyIsError(number, shift)) {\n return error.value;\n }\n\n // Return error if number is less than 0\n if (number < 0) {\n return error.num;\n }\n\n // Return error if number is a non-integer\n if (Math.floor(number) !== number) {\n return error.num;\n }\n\n // Return error if number is greater than (2^48)-1\n if (number > 281474976710655) {\n return error.num;\n }\n\n // Return error if the absolute value of shift is greater than 53\n if (Math.abs(shift) > 53) {\n return error.num;\n }\n\n // Return number shifted by shift bits to the right or to the left if shift is negative\n return (shift >= 0) ? number >> shift : number << -shift;\n};\n\nexports.BITXOR = function(number1, number2) {\n number1 = utils.parseNumber(number1);\n number2 = utils.parseNumber(number2);\n if (utils.anyIsError(number1, number2)) {\n return error.value;\n }\n\n // Return error if either number is less than 0\n if (number1 < 0 || number2 < 0) {\n return error.num;\n }\n\n // Return error if either number is a non-integer\n if (Math.floor(number1) !== number1 || Math.floor(number2) !== number2) {\n return error.num;\n }\n\n // Return error if either number is greater than (2^48)-1\n if (number1 > 281474976710655 || number2 > 281474976710655) {\n return error.num;\n }\n\n // Return bitwise XOR of two numbers\n return number1 ^ number2;\n};\n\nexports.COMPLEX = function(real, imaginary, suffix) {\n real = utils.parseNumber(real);\n imaginary = utils.parseNumber(imaginary);\n if (utils.anyIsError(real, imaginary)) {\n return real;\n }\n\n // Set suffix\n suffix = (suffix === undefined) ? 'i' : suffix;\n\n // Return error if suffix is neither \"i\" nor \"j\"\n if (suffix !== 'i' && suffix !== 'j') {\n return error.value;\n }\n\n // Return complex number\n if (real === 0 && imaginary === 0) {\n return 0;\n } else if (real === 0) {\n return (imaginary === 1) ? suffix : imaginary.toString() + suffix;\n } else if (imaginary === 0) {\n return real.toString();\n } else {\n var sign = (imaginary > 0) ? '+' : '';\n return real.toString() + sign + ((imaginary === 1) ? suffix : imaginary.toString() + suffix);\n }\n};\n\nexports.CONVERT = function(number, from_unit, to_unit) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n\n // List of units supported by CONVERT and units defined by the International System of Units\n // [Name, Symbol, Alternate symbols, Quantity, ISU, CONVERT, Conversion ratio]\n var units = [\n [\"a.u. of action\", \"?\", null, \"action\", false, false, 1.05457168181818e-34],\n [\"a.u. of charge\", \"e\", null, \"electric_charge\", false, false, 1.60217653141414e-19],\n [\"a.u. of energy\", \"Eh\", null, \"energy\", false, false, 4.35974417757576e-18],\n [\"a.u. of length\", \"a?\", null, \"length\", false, false, 5.29177210818182e-11],\n [\"a.u. of mass\", \"m?\", null, \"mass\", false, false, 9.10938261616162e-31],\n [\"a.u. of time\", \"?/Eh\", null, \"time\", false, false, 2.41888432650516e-17],\n [\"admiralty knot\", \"admkn\", null, \"speed\", false, true, 0.514773333],\n [\"ampere\", \"A\", null, \"electric_current\", true, false, 1],\n [\"ampere per meter\", \"A/m\", null, \"magnetic_field_intensity\", true, false, 1],\n [\"ångström\", \"Å\", [\"ang\"], \"length\", false, true, 1e-10],\n [\"are\", \"ar\", null, \"area\", false, true, 100],\n [\"astronomical unit\", \"ua\", null, \"length\", false, false, 1.49597870691667e-11],\n [\"bar\", \"bar\", null, \"pressure\", false, false, 100000],\n [\"barn\", \"b\", null, \"area\", false, false, 1e-28],\n [\"becquerel\", \"Bq\", null, \"radioactivity\", true, false, 1],\n [\"bit\", \"bit\", [\"b\"], \"information\", false, true, 1],\n [\"btu\", \"BTU\", [\"btu\"], \"energy\", false, true, 1055.05585262],\n [\"byte\", \"byte\", null, \"information\", false, true, 8],\n [\"candela\", \"cd\", null, \"luminous_intensity\", true, false, 1],\n [\"candela per square metre\", \"cd/m?\", null, \"luminance\", true, false, 1],\n [\"coulomb\", \"C\", null, \"electric_charge\", true, false, 1],\n [\"cubic ångström\", \"ang3\", [\"ang^3\"], \"volume\", false, true, 1e-30],\n [\"cubic foot\", \"ft3\", [\"ft^3\"], \"volume\", false, true, 0.028316846592],\n [\"cubic inch\", \"in3\", [\"in^3\"], \"volume\", false, true, 0.000016387064],\n [\"cubic light-year\", \"ly3\", [\"ly^3\"], \"volume\", false, true, 8.46786664623715e-47],\n [\"cubic metre\", \"m?\", null, \"volume\", true, true, 1],\n [\"cubic mile\", \"mi3\", [\"mi^3\"], \"volume\", false, true, 4168181825.44058],\n [\"cubic nautical mile\", \"Nmi3\", [\"Nmi^3\"], \"volume\", false, true, 6352182208],\n [\"cubic Pica\", \"Pica3\", [\"Picapt3\", \"Pica^3\", \"Picapt^3\"], \"volume\", false, true, 7.58660370370369e-8],\n [\"cubic yard\", \"yd3\", [\"yd^3\"], \"volume\", false, true, 0.764554857984],\n [\"cup\", \"cup\", null, \"volume\", false, true, 0.0002365882365],\n [\"dalton\", \"Da\", [\"u\"], \"mass\", false, false, 1.66053886282828e-27],\n [\"day\", \"d\", [\"day\"], \"time\", false, true, 86400],\n [\"degree\", \"°\", null, \"angle\", false, false, 0.0174532925199433],\n [\"degrees Rankine\", \"Rank\", null, \"temperature\", false, true, 0.555555555555556],\n [\"dyne\", \"dyn\", [\"dy\"], \"force\", false, true, 0.00001],\n [\"electronvolt\", \"eV\", [\"ev\"], \"energy\", false, true, 1.60217656514141],\n [\"ell\", \"ell\", null, \"length\", false, true, 1.143],\n [\"erg\", \"erg\", [\"e\"], \"energy\", false, true, 1e-7],\n [\"farad\", \"F\", null, \"electric_capacitance\", true, false, 1],\n [\"fluid ounce\", \"oz\", null, \"volume\", false, true, 0.0000295735295625],\n [\"foot\", \"ft\", null, \"length\", false, true, 0.3048],\n [\"foot-pound\", \"flb\", null, \"energy\", false, true, 1.3558179483314],\n [\"gal\", \"Gal\", null, \"acceleration\", false, false, 0.01],\n [\"gallon\", \"gal\", null, \"volume\", false, true, 0.003785411784],\n [\"gauss\", \"G\", [\"ga\"], \"magnetic_flux_density\", false, true, 1],\n [\"grain\", \"grain\", null, \"mass\", false, true, 0.0000647989],\n [\"gram\", \"g\", null, \"mass\", false, true, 0.001],\n [\"gray\", \"Gy\", null, \"absorbed_dose\", true, false, 1],\n [\"gross registered ton\", \"GRT\", [\"regton\"], \"volume\", false, true, 2.8316846592],\n [\"hectare\", \"ha\", null, \"area\", false, true, 10000],\n [\"henry\", \"H\", null, \"inductance\", true, false, 1],\n [\"hertz\", \"Hz\", null, \"frequency\", true, false, 1],\n [\"horsepower\", \"HP\", [\"h\"], \"power\", false, true, 745.69987158227],\n [\"horsepower-hour\", \"HPh\", [\"hh\", \"hph\"], \"energy\", false, true, 2684519.538],\n [\"hour\", \"h\", [\"hr\"], \"time\", false, true, 3600],\n [\"imperial gallon (U.K.)\", \"uk_gal\", null, \"volume\", false, true, 0.00454609],\n [\"imperial hundredweight\", \"lcwt\", [\"uk_cwt\", \"hweight\"], \"mass\", false, true, 50.802345],\n [\"imperial quart (U.K)\", \"uk_qt\", null, \"volume\", false, true, 0.0011365225],\n [\"imperial ton\", \"brton\", [\"uk_ton\", \"LTON\"], \"mass\", false, true, 1016.046909],\n [\"inch\", \"in\", null, \"length\", false, true, 0.0254],\n [\"international acre\", \"uk_acre\", null, \"area\", false, true, 4046.8564224],\n [\"IT calorie\", \"cal\", null, \"energy\", false, true, 4.1868],\n [\"joule\", \"J\", null, \"energy\", true, true, 1],\n [\"katal\", \"kat\", null, \"catalytic_activity\", true, false, 1],\n [\"kelvin\", \"K\", [\"kel\"], \"temperature\", true, true, 1],\n [\"kilogram\", \"kg\", null, \"mass\", true, true, 1],\n [\"knot\", \"kn\", null, \"speed\", false, true, 0.514444444444444],\n [\"light-year\", \"ly\", null, \"length\", false, true, 9460730472580800],\n [\"litre\", \"L\", [\"l\", \"lt\"], \"volume\", false, true, 0.001],\n [\"lumen\", \"lm\", null, \"luminous_flux\", true, false, 1],\n [\"lux\", \"lx\", null, \"illuminance\", true, false, 1],\n [\"maxwell\", \"Mx\", null, \"magnetic_flux\", false, false, 1e-18],\n [\"measurement ton\", \"MTON\", null, \"volume\", false, true, 1.13267386368],\n [\"meter per hour\", \"m/h\", [\"m/hr\"], \"speed\", false, true, 0.00027777777777778],\n [\"meter per second\", \"m/s\", [\"m/sec\"], \"speed\", true, true, 1],\n [\"meter per second squared\", \"m?s??\", null, \"acceleration\", true, false, 1],\n [\"parsec\", \"pc\", [\"parsec\"], \"length\", false, true, 30856775814671900],\n [\"meter squared per second\", \"m?/s\", null, \"kinematic_viscosity\", true, false, 1],\n [\"metre\", \"m\", null, \"length\", true, true, 1],\n [\"miles per hour\", \"mph\", null, \"speed\", false, true, 0.44704],\n [\"millimetre of mercury\", \"mmHg\", null, \"pressure\", false, false, 133.322],\n [\"minute\", \"?\", null, \"angle\", false, false, 0.000290888208665722],\n [\"minute\", \"min\", [\"mn\"], \"time\", false, true, 60],\n [\"modern teaspoon\", \"tspm\", null, \"volume\", false, true, 0.000005],\n [\"mole\", \"mol\", null, \"amount_of_substance\", true, false, 1],\n [\"morgen\", \"Morgen\", null, \"area\", false, true, 2500],\n [\"n.u. of action\", \"?\", null, \"action\", false, false, 1.05457168181818e-34],\n [\"n.u. of mass\", \"m?\", null, \"mass\", false, false, 9.10938261616162e-31],\n [\"n.u. of speed\", \"c?\", null, \"speed\", false, false, 299792458],\n [\"n.u. of time\", \"?/(me?c??)\", null, \"time\", false, false, 1.28808866778687e-21],\n [\"nautical mile\", \"M\", [\"Nmi\"], \"length\", false, true, 1852],\n [\"newton\", \"N\", null, \"force\", true, true, 1],\n [\"œrsted\", \"Oe \", null, \"magnetic_field_intensity\", false, false, 79.5774715459477],\n [\"ohm\", \"Ω\", null, \"electric_resistance\", true, false, 1],\n [\"ounce mass\", \"ozm\", null, \"mass\", false, true, 0.028349523125],\n [\"pascal\", \"Pa\", null, \"pressure\", true, false, 1],\n [\"pascal second\", \"Pa?s\", null, \"dynamic_viscosity\", true, false, 1],\n [\"pferdestärke\", \"PS\", null, \"power\", false, true, 735.49875],\n [\"phot\", \"ph\", null, \"illuminance\", false, false, 0.0001],\n [\"pica (1/6 inch)\", \"pica\", null, \"length\", false, true, 0.00035277777777778],\n [\"pica (1/72 inch)\", \"Pica\", [\"Picapt\"], \"length\", false, true, 0.00423333333333333],\n [\"poise\", \"P\", null, \"dynamic_viscosity\", false, false, 0.1],\n [\"pond\", \"pond\", null, \"force\", false, true, 0.00980665],\n [\"pound force\", \"lbf\", null, \"force\", false, true, 4.4482216152605],\n [\"pound mass\", \"lbm\", null, \"mass\", false, true, 0.45359237],\n [\"quart\", \"qt\", null, \"volume\", false, true, 0.000946352946],\n [\"radian\", \"rad\", null, \"angle\", true, false, 1],\n [\"second\", \"?\", null, \"angle\", false, false, 0.00000484813681109536],\n [\"second\", \"s\", [\"sec\"], \"time\", true, true, 1],\n [\"short hundredweight\", \"cwt\", [\"shweight\"], \"mass\", false, true, 45.359237],\n [\"siemens\", \"S\", null, \"electrical_conductance\", true, false, 1],\n [\"sievert\", \"Sv\", null, \"equivalent_dose\", true, false, 1],\n [\"slug\", \"sg\", null, \"mass\", false, true, 14.59390294],\n [\"square ångström\", \"ang2\", [\"ang^2\"], \"area\", false, true, 1e-20],\n [\"square foot\", \"ft2\", [\"ft^2\"], \"area\", false, true, 0.09290304],\n [\"square inch\", \"in2\", [\"in^2\"], \"area\", false, true, 0.00064516],\n [\"square light-year\", \"ly2\", [\"ly^2\"], \"area\", false, true, 8.95054210748189e+31],\n [\"square meter\", \"m?\", null, \"area\", true, true, 1],\n [\"square mile\", \"mi2\", [\"mi^2\"], \"area\", false, true, 2589988.110336],\n [\"square nautical mile\", \"Nmi2\", [\"Nmi^2\"], \"area\", false, true, 3429904],\n [\"square Pica\", \"Pica2\", [\"Picapt2\", \"Pica^2\", \"Picapt^2\"], \"area\", false, true, 0.00001792111111111],\n [\"square yard\", \"yd2\", [\"yd^2\"], \"area\", false, true, 0.83612736],\n [\"statute mile\", \"mi\", null, \"length\", false, true, 1609.344],\n [\"steradian\", \"sr\", null, \"solid_angle\", true, false, 1],\n [\"stilb\", \"sb\", null, \"luminance\", false, false, 0.0001],\n [\"stokes\", \"St\", null, \"kinematic_viscosity\", false, false, 0.0001],\n [\"stone\", \"stone\", null, \"mass\", false, true, 6.35029318],\n [\"tablespoon\", \"tbs\", null, \"volume\", false, true, 0.0000147868],\n [\"teaspoon\", \"tsp\", null, \"volume\", false, true, 0.00000492892],\n [\"tesla\", \"T\", null, \"magnetic_flux_density\", true, true, 1],\n [\"thermodynamic calorie\", \"c\", null, \"energy\", false, true, 4.184],\n [\"ton\", \"ton\", null, \"mass\", false, true, 907.18474],\n [\"tonne\", \"t\", null, \"mass\", false, false, 1000],\n [\"U.K. pint\", \"uk_pt\", null, \"volume\", false, true, 0.00056826125],\n [\"U.S. bushel\", \"bushel\", null, \"volume\", false, true, 0.03523907],\n [\"U.S. oil barrel\", \"barrel\", null, \"volume\", false, true, 0.158987295],\n [\"U.S. pint\", \"pt\", [\"us_pt\"], \"volume\", false, true, 0.000473176473],\n [\"U.S. survey mile\", \"survey_mi\", null, \"length\", false, true, 1609.347219],\n [\"U.S. survey/statute acre\", \"us_acre\", null, \"area\", false, true, 4046.87261],\n [\"volt\", \"V\", null, \"voltage\", true, false, 1],\n [\"watt\", \"W\", null, \"power\", true, true, 1],\n [\"watt-hour\", \"Wh\", [\"wh\"], \"energy\", false, true, 3600],\n [\"weber\", \"Wb\", null, \"magnetic_flux\", true, false, 1],\n [\"yard\", \"yd\", null, \"length\", false, true, 0.9144],\n [\"year\", \"yr\", null, \"time\", false, true, 31557600]\n ];\n\n // Binary prefixes\n // [Name, Prefix power of 2 value, Previx value, Abbreviation, Derived from]\n var binary_prefixes = {\n Yi: [\"yobi\", 80, 1208925819614629174706176, \"Yi\", \"yotta\"],\n Zi: [\"zebi\", 70, 1180591620717411303424, \"Zi\", \"zetta\"],\n Ei: [\"exbi\", 60, 1152921504606846976, \"Ei\", \"exa\"],\n Pi: [\"pebi\", 50, 1125899906842624, \"Pi\", \"peta\"],\n Ti: [\"tebi\", 40, 1099511627776, \"Ti\", \"tera\"],\n Gi: [\"gibi\", 30, 1073741824, \"Gi\", \"giga\"],\n Mi: [\"mebi\", 20, 1048576, \"Mi\", \"mega\"],\n ki: [\"kibi\", 10, 1024, \"ki\", \"kilo\"]\n };\n\n // Unit prefixes\n // [Name, Multiplier, Abbreviation]\n var unit_prefixes = {\n Y: [\"yotta\", 1e+24, \"Y\"],\n Z: [\"zetta\", 1e+21, \"Z\"],\n E: [\"exa\", 1e+18, \"E\"],\n P: [\"peta\", 1e+15, \"P\"],\n T: [\"tera\", 1e+12, \"T\"],\n G: [\"giga\", 1e+09, \"G\"],\n M: [\"mega\", 1e+06, \"M\"],\n k: [\"kilo\", 1e+03, \"k\"],\n h: [\"hecto\", 1e+02, \"h\"],\n e: [\"dekao\", 1e+01, \"e\"],\n d: [\"deci\", 1e-01, \"d\"],\n c: [\"centi\", 1e-02, \"c\"],\n m: [\"milli\", 1e-03, \"m\"],\n u: [\"micro\", 1e-06, \"u\"],\n n: [\"nano\", 1e-09, \"n\"],\n p: [\"pico\", 1e-12, \"p\"],\n f: [\"femto\", 1e-15, \"f\"],\n a: [\"atto\", 1e-18, \"a\"],\n z: [\"zepto\", 1e-21, \"z\"],\n y: [\"yocto\", 1e-24, \"y\"]\n };\n\n // Initialize units and multipliers\n var from = null;\n var to = null;\n var base_from_unit = from_unit;\n var base_to_unit = to_unit;\n var from_multiplier = 1;\n var to_multiplier = 1;\n var alt;\n\n // Lookup from and to units\n for (var i = 0; i < units.length; i++) {\n alt = (units[i][2] === null) ? [] : units[i][2];\n if (units[i][1] === base_from_unit || alt.indexOf(base_from_unit) >= 0) {\n from = units[i];\n }\n if (units[i][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) {\n to = units[i];\n }\n }\n\n // Lookup from prefix\n if (from === null) {\n var from_binary_prefix = binary_prefixes[from_unit.substring(0, 2)];\n var from_unit_prefix = unit_prefixes[from_unit.substring(0, 1)];\n\n // Handle dekao unit prefix (only unit prefix with two characters)\n if (from_unit.substring(0, 2) === 'da') {\n from_unit_prefix = [\"dekao\", 1e+01, \"da\"];\n }\n\n // Handle binary prefixes first (so that 'Yi' is processed before 'Y')\n if (from_binary_prefix) {\n from_multiplier = from_binary_prefix[2];\n base_from_unit = from_unit.substring(2);\n } else if (from_unit_prefix) {\n from_multiplier = from_unit_prefix[1];\n base_from_unit = from_unit.substring(from_unit_prefix[2].length);\n }\n\n // Lookup from unit\n for (var j = 0; j < units.length; j++) {\n alt = (units[j][2] === null) ? [] : units[j][2];\n if (units[j][1] === base_from_unit || alt.indexOf(base_from_unit) >= 0) {\n from = units[j];\n }\n }\n }\n\n // Lookup to prefix\n if (to === null) {\n var to_binary_prefix = binary_prefixes[to_unit.substring(0, 2)];\n var to_unit_prefix = unit_prefixes[to_unit.substring(0, 1)];\n\n // Handle dekao unit prefix (only unit prefix with two characters)\n if (to_unit.substring(0, 2) === 'da') {\n to_unit_prefix = [\"dekao\", 1e+01, \"da\"];\n }\n\n // Handle binary prefixes first (so that 'Yi' is processed before 'Y')\n if (to_binary_prefix) {\n to_multiplier = to_binary_prefix[2];\n base_to_unit = to_unit.substring(2);\n } else if (to_unit_prefix) {\n to_multiplier = to_unit_prefix[1];\n base_to_unit = to_unit.substring(to_unit_prefix[2].length);\n }\n\n // Lookup to unit\n for (var k = 0; k < units.length; k++) {\n alt = (units[k][2] === null) ? [] : units[k][2];\n if (units[k][1] === base_to_unit || alt.indexOf(base_to_unit) >= 0) {\n to = units[k];\n }\n }\n }\n\n // Return error if a unit does not exist\n if (from === null || to === null) {\n return error.na;\n }\n\n // Return error if units represent different quantities\n if (from[3] !== to[3]) {\n return error.na;\n }\n\n // Return converted number\n return number * from[6] * from_multiplier / (to[6] * to_multiplier);\n};\n\nexports.DEC2BIN = function(number, places) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n\n // Return error if number is not decimal, is lower than -512, or is greater than 511\n if (!/^-?[0-9]{1,3}$/.test(number) || number < -512 || number > 511) {\n return error.num;\n }\n\n // Ignore places and return a 10-character binary number if number is negative\n if (number < 0) {\n return '1' + text.REPT('0', 9 - (512 + number).toString(2).length) + (512 + number).toString(2);\n }\n\n // Convert decimal number to binary\n var result = parseInt(number, 10).toString(2);\n\n // Return binary number using the minimum number of characters necessary if places is undefined\n if (typeof places === 'undefined') {\n return result;\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return error.value;\n }\n\n // Return error if places is negative\n if (places < 0) {\n return error.num;\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return (places >= result.length) ? text.REPT('0', places - result.length) + result : error.num;\n }\n};\n\nexports.DEC2HEX = function(number, places) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n\n // Return error if number is not decimal, is lower than -549755813888, or is greater than 549755813887\n if (!/^-?[0-9]{1,12}$/.test(number) || number < -549755813888 || number > 549755813887) {\n return error.num;\n }\n\n // Ignore places and return a 10-character hexadecimal number if number is negative\n if (number < 0) {\n return (1099511627776 + number).toString(16);\n }\n\n // Convert decimal number to hexadecimal\n var result = parseInt(number, 10).toString(16);\n\n // Return hexadecimal number using the minimum number of characters necessary if places is undefined\n if (typeof places === 'undefined') {\n return result;\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return error.value;\n }\n\n // Return error if places is negative\n if (places < 0) {\n return error.num;\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return (places >= result.length) ? text.REPT('0', places - result.length) + result : error.num;\n }\n};\n\nexports.DEC2OCT = function(number, places) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n\n // Return error if number is not decimal, is lower than -549755813888, or is greater than 549755813887\n if (!/^-?[0-9]{1,9}$/.test(number) || number < -536870912 || number > 536870911) {\n return error.num;\n }\n\n // Ignore places and return a 10-character octal number if number is negative\n if (number < 0) {\n return (1073741824 + number).toString(8);\n }\n\n // Convert decimal number to octal\n var result = parseInt(number, 10).toString(8);\n\n // Return octal number using the minimum number of characters necessary if places is undefined\n if (typeof places === 'undefined') {\n return result;\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return error.value;\n }\n\n // Return error if places is negative\n if (places < 0) {\n return error.num;\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return (places >= result.length) ? text.REPT('0', places - result.length) + result : error.num;\n }\n};\n\nexports.DELTA = function(number1, number2) {\n // Set number2 to zero if undefined\n number2 = (number2 === undefined) ? 0 : number2;\n number1 = utils.parseNumber(number1);\n number2 = utils.parseNumber(number2);\n if (utils.anyIsError(number1, number2)) {\n return error.value;\n }\n\n // Return delta\n return (number1 === number2) ? 1 : 0;\n};\n\n// TODO: why is upper_bound not used ? The excel documentation has no examples with upper_bound\nexports.ERF = function(lower_bound, upper_bound) {\n // Set number2 to zero if undefined\n upper_bound = (upper_bound === undefined) ? 0 : upper_bound;\n\n lower_bound = utils.parseNumber(lower_bound);\n upper_bound = utils.parseNumber(upper_bound);\n if (utils.anyIsError(lower_bound, upper_bound)) {\n return error.value;\n }\n\n return jStat.erf(lower_bound);\n};\n\n// TODO\nexports.ERF.PRECISE = function() {\n throw new Error('ERF.PRECISE is not implemented');\n};\n\nexports.ERFC = function(x) {\n // Return error if x is not a number\n if (isNaN(x)) {\n return error.value;\n }\n\n return jStat.erfc(x);\n};\n\n// TODO\nexports.ERFC.PRECISE = function() {\n throw new Error('ERFC.PRECISE is not implemented');\n};\n\nexports.GESTEP = function(number, step) {\n step = step || 0;\n number = utils.parseNumber(number);\n if (utils.anyIsError(step, number)) {\n return number;\n }\n\n // Return delta\n return (number >= step) ? 1 : 0;\n};\n\nexports.HEX2BIN = function(number, places) {\n // Return error if number is not hexadecimal or contains more than ten characters (10 digits)\n if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {\n return error.num;\n }\n\n // Check if number is negative\n var negative = (number.length === 10 && number.substring(0, 1).toLowerCase() === 'f') ? true : false;\n\n // Convert hexadecimal number to decimal\n var decimal = (negative) ? parseInt(number, 16) - 1099511627776 : parseInt(number, 16);\n\n // Return error if number is lower than -512 or greater than 511\n if (decimal < -512 || decimal > 511) {\n return error.num;\n }\n\n // Ignore places and return a 10-character binary number if number is negative\n if (negative) {\n return '1' + text.REPT('0', 9 - (512 + decimal).toString(2).length) + (512 + decimal).toString(2);\n }\n\n // Convert decimal number to binary\n var result = decimal.toString(2);\n\n // Return binary number using the minimum number of characters necessary if places is undefined\n if (places === undefined) {\n return result;\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return error.value;\n }\n\n // Return error if places is negative\n if (places < 0) {\n return error.num;\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return (places >= result.length) ? text.REPT('0', places - result.length) + result : error.num;\n }\n};\n\nexports.HEX2DEC = function(number) {\n // Return error if number is not hexadecimal or contains more than ten characters (10 digits)\n if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {\n return error.num;\n }\n\n // Convert hexadecimal number to decimal\n var decimal = parseInt(number, 16);\n\n // Return decimal number\n return (decimal >= 549755813888) ? decimal - 1099511627776 : decimal;\n};\n\nexports.HEX2OCT = function(number, places) {\n // Return error if number is not hexadecimal or contains more than ten characters (10 digits)\n if (!/^[0-9A-Fa-f]{1,10}$/.test(number)) {\n return error.num;\n }\n\n // Convert hexadecimal number to decimal\n var decimal = parseInt(number, 16);\n\n // Return error if number is positive and greater than 0x1fffffff (536870911)\n if (decimal > 536870911 && decimal < 1098974756864) {\n return error.num;\n }\n\n // Ignore places and return a 10-character octal number if number is negative\n if (decimal >= 1098974756864) {\n return (decimal - 1098437885952).toString(8);\n }\n\n // Convert decimal number to octal\n var result = decimal.toString(8);\n\n // Return octal number using the minimum number of characters necessary if places is undefined\n if (places === undefined) {\n return result;\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return error.value;\n }\n\n // Return error if places is negative\n if (places < 0) {\n return error.num;\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return (places >= result.length) ? text.REPT('0', places - result.length) + result : error.num;\n }\n};\n\nexports.IMABS = function(inumber) {\n // Lookup real and imaginary coefficients using exports.js [http://formulajs.org]\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n\n // Return error if either coefficient is not a number\n if (utils.anyIsError(x, y)) {\n return error.value;\n }\n\n // Return absolute value of complex number\n return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));\n};\n\nexports.IMAGINARY = function(inumber) {\n if (inumber === undefined || inumber === true || inumber === false) {\n return error.value;\n }\n\n // Return 0 if inumber is equal to 0\n if (inumber === 0 || inumber === '0') {\n return 0;\n }\n\n // Handle special cases\n if (['i', 'j'].indexOf(inumber) >= 0) {\n return 1;\n }\n\n // Force string type\n inumber = inumber + '';\n\n // Normalize imaginary coefficient\n inumber = inumber.replace('+i', '+1i').replace('-i', '-1i').replace('+j', '+1j').replace('-j', '-1j');\n\n // Lookup sign\n var plus = inumber.indexOf('+');\n var minus = inumber.indexOf('-');\n if (plus === 0) {\n plus = inumber.indexOf('+', 1);\n }\n\n if (minus === 0) {\n minus = inumber.indexOf('-', 1);\n }\n\n // Lookup imaginary unit\n var last = inumber.substring(inumber.length - 1, inumber.length);\n var unit = (last === 'i' || last === 'j');\n\n if (plus >= 0 || minus >= 0) {\n // Return error if imaginary unit is neither i nor j\n if (!unit) {\n return error.num;\n }\n\n // Return imaginary coefficient of complex number\n if (plus >= 0) {\n return (isNaN(inumber.substring(0, plus)) || isNaN(inumber.substring(plus + 1, inumber.length - 1))) ?\n error.num :\n Number(inumber.substring(plus + 1, inumber.length - 1));\n } else {\n return (isNaN(inumber.substring(0, minus)) || isNaN(inumber.substring(minus + 1, inumber.length - 1))) ?\n error.num :\n -Number(inumber.substring(minus + 1, inumber.length - 1));\n }\n } else {\n if (unit) {\n return (isNaN(inumber.substring(0, inumber.length - 1))) ? error.num : inumber.substring(0, inumber.length - 1);\n } else {\n return (isNaN(inumber)) ? error.num : 0;\n }\n }\n};\n\nexports.IMARGUMENT = function(inumber) {\n // Lookup real and imaginary coefficients using exports.js [http://formulajs.org]\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n\n // Return error if either coefficient is not a number\n if (utils.anyIsError(x, y)) {\n return error.value;\n }\n\n // Return error if inumber is equal to zero\n if (x === 0 && y === 0) {\n return error.div0;\n }\n\n // Return PI/2 if x is equal to zero and y is positive\n if (x === 0 && y > 0) {\n return Math.PI / 2;\n }\n\n // Return -PI/2 if x is equal to zero and y is negative\n if (x === 0 && y < 0) {\n return -Math.PI / 2;\n }\n\n // Return zero if x is negative and y is equal to zero\n if (y === 0 && x > 0) {\n return 0;\n }\n\n // Return zero if x is negative and y is equal to zero\n if (y === 0 && x < 0) {\n return -Math.PI;\n }\n\n // Return argument of complex number\n if (x > 0) {\n return Math.atan(y / x);\n } else if (x < 0 && y >= 0) {\n return Math.atan(y / x) + Math.PI;\n } else {\n return Math.atan(y / x) - Math.PI;\n }\n};\n\nexports.IMCONJUGATE = function(inumber) {\n // Lookup real and imaginary coefficients using exports.js [http://formulajs.org]\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n\n if (utils.anyIsError(x, y)) {\n return error.value;\n }\n\n // Lookup imaginary unit\n var unit = inumber.substring(inumber.length - 1);\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n // Return conjugate of complex number\n return (y !== 0) ? exports.COMPLEX(x, -y, unit) : inumber;\n};\n\nexports.IMCOS = function(inumber) {\n // Lookup real and imaginary coefficients using exports.js [http://formulajs.org]\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n\n if (utils.anyIsError(x, y)) {\n return error.value;\n }\n\n // Lookup imaginary unit\n var unit = inumber.substring(inumber.length - 1);\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n // Return cosine of complex number\n return exports.COMPLEX(Math.cos(x) * (Math.exp(y) + Math.exp(-y)) / 2, -Math.sin(x) * (Math.exp(y) - Math.exp(-y)) / 2, unit);\n};\n\nexports.IMCOSH = function(inumber) {\n // Lookup real and imaginary coefficients using exports.js [http://formulajs.org]\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n\n if (utils.anyIsError(x, y)) {\n return error.value;\n }\n\n // Lookup imaginary unit\n var unit = inumber.substring(inumber.length - 1);\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n // Return hyperbolic cosine of complex number\n return exports.COMPLEX(Math.cos(y) * (Math.exp(x) + Math.exp(-x)) / 2, Math.sin(y) * (Math.exp(x) - Math.exp(-x)) / 2, unit);\n};\n\nexports.IMCOT = function(inumber) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n\n if (utils.anyIsError(x, y)) {\n return error.value;\n }\n\n // Return cotangent of complex number\n return exports.IMDIV(exports.IMCOS(inumber), exports.IMSIN(inumber));\n};\n\nexports.IMDIV = function(inumber1, inumber2) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n var a = exports.IMREAL(inumber1);\n var b = exports.IMAGINARY(inumber1);\n var c = exports.IMREAL(inumber2);\n var d = exports.IMAGINARY(inumber2);\n\n if (utils.anyIsError(a, b, c, d)) {\n return error.value;\n }\n\n // Lookup imaginary unit\n var unit1 = inumber1.substring(inumber1.length - 1);\n var unit2 = inumber2.substring(inumber2.length - 1);\n var unit = 'i';\n if (unit1 === 'j') {\n unit = 'j';\n } else if (unit2 === 'j') {\n unit = 'j';\n }\n\n // Return error if inumber2 is null\n if (c === 0 && d === 0) {\n return error.num;\n }\n\n // Return exponential of complex number\n var den = c * c + d * d;\n return exports.COMPLEX((a * c + b * d) / den, (b * c - a * d) / den, unit);\n};\n\nexports.IMEXP = function(inumber) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n\n if (utils.anyIsError(x, y)) {\n return error.value;\n }\n\n // Lookup imaginary unit\n var unit = inumber.substring(inumber.length - 1);\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n // Return exponential of complex number\n var e = Math.exp(x);\n return exports.COMPLEX(e * Math.cos(y), e * Math.sin(y), unit);\n};\n\nexports.IMLN = function(inumber) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n\n if (utils.anyIsError(x, y)) {\n return error.value;\n }\n\n // Lookup imaginary unit\n var unit = inumber.substring(inumber.length - 1);\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n // Return exponential of complex number\n return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)), Math.atan(y / x), unit);\n};\n\nexports.IMLOG10 = function(inumber) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n\n if (utils.anyIsError(x, y)) {\n return error.value;\n }\n\n // Lookup imaginary unit\n var unit = inumber.substring(inumber.length - 1);\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n // Return exponential of complex number\n return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)) / Math.log(10), Math.atan(y / x) / Math.log(10), unit);\n};\n\nexports.IMLOG2 = function(inumber) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n\n if (utils.anyIsError(x, y)) {\n return error.value;\n }\n\n // Lookup imaginary unit\n var unit = inumber.substring(inumber.length - 1);\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n // Return exponential of complex number\n return exports.COMPLEX(Math.log(Math.sqrt(x * x + y * y)) / Math.log(2), Math.atan(y / x) / Math.log(2), unit);\n};\n\nexports.IMPOWER = function(inumber, number) {\n number = utils.parseNumber(number);\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n if (utils.anyIsError(number, x, y)) {\n return error.value;\n }\n\n // Lookup imaginary unit\n var unit = inumber.substring(inumber.length - 1);\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n // Calculate power of modulus\n var p = Math.pow(exports.IMABS(inumber), number);\n\n // Calculate argument\n var t = exports.IMARGUMENT(inumber);\n\n // Return exponential of complex number\n return exports.COMPLEX(p * Math.cos(number * t), p * Math.sin(number * t), unit);\n};\n\nexports.IMPRODUCT = function() {\n // Initialize result\n var result = arguments[0];\n\n if (!arguments.length) {\n return error.value;\n }\n\n // Loop on all numbers\n for (var i = 1; i < arguments.length; i++) {\n // Lookup coefficients of two complex numbers\n var a = exports.IMREAL(result);\n var b = exports.IMAGINARY(result);\n var c = exports.IMREAL(arguments[i]);\n var d = exports.IMAGINARY(arguments[i]);\n\n if (utils.anyIsError(a, b, c, d)) {\n return error.value;\n }\n\n // Complute product of two complex numbers\n result = exports.COMPLEX(a * c - b * d, a * d + b * c);\n }\n\n // Return product of complex numbers\n return result;\n};\n\nexports.IMREAL = function(inumber) {\n if (inumber === undefined || inumber === true || inumber === false) {\n return error.value;\n }\n\n // Return 0 if inumber is equal to 0\n if (inumber === 0 || inumber === '0') {\n return 0;\n }\n\n // Handle special cases\n if (['i', '+i', '1i', '+1i', '-i', '-1i', 'j', '+j', '1j', '+1j', '-j', '-1j'].indexOf(inumber) >= 0) {\n return 0;\n }\n\n // Force String type\n inumber = inumber + '';\n\n // Lookup sign\n var plus = inumber.indexOf('+');\n var minus = inumber.indexOf('-');\n if (plus === 0) {\n plus = inumber.indexOf('+', 1);\n }\n if (minus === 0) {\n minus = inumber.indexOf('-', 1);\n }\n\n // Lookup imaginary unit\n var last = inumber.substring(inumber.length - 1, inumber.length);\n var unit = (last === 'i' || last === 'j');\n\n if (plus >= 0 || minus >= 0) {\n // Return error if imaginary unit is neither i nor j\n if (!unit) {\n return error.num;\n }\n\n // Return real coefficient of complex number\n if (plus >= 0) {\n return (isNaN(inumber.substring(0, plus)) || isNaN(inumber.substring(plus + 1, inumber.length - 1))) ?\n error.num :\n Number(inumber.substring(0, plus));\n } else {\n return (isNaN(inumber.substring(0, minus)) || isNaN(inumber.substring(minus + 1, inumber.length - 1))) ?\n error.num :\n Number(inumber.substring(0, minus));\n }\n } else {\n if (unit) {\n return (isNaN(inumber.substring(0, inumber.length - 1))) ? error.num : 0;\n } else {\n return (isNaN(inumber)) ? error.num : inumber;\n }\n }\n};\n\nexports.IMSEC = function(inumber) {\n // Return error if inumber is a logical value\n if (inumber === true || inumber === false) {\n return error.value;\n }\n\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n\n if (utils.anyIsError(x, y)) {\n return error.value;\n }\n\n // Return secant of complex number\n return exports.IMDIV('1', exports.IMCOS(inumber));\n};\n\nexports.IMSECH = function(inumber) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n\n if (utils.anyIsError(x, y)) {\n return error.value;\n }\n\n // Return hyperbolic secant of complex number\n return exports.IMDIV('1', exports.IMCOSH(inumber));\n};\n\nexports.IMSIN = function(inumber) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n\n if (utils.anyIsError(x, y)) {\n return error.value;\n }\n\n // Lookup imaginary unit\n var unit = inumber.substring(inumber.length - 1);\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n // Return sine of complex number\n return exports.COMPLEX(Math.sin(x) * (Math.exp(y) + Math.exp(-y)) / 2, Math.cos(x) * (Math.exp(y) - Math.exp(-y)) / 2, unit);\n};\n\nexports.IMSINH = function(inumber) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n\n if (utils.anyIsError(x, y)) {\n return error.value;\n }\n\n // Lookup imaginary unit\n var unit = inumber.substring(inumber.length - 1);\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n // Return hyperbolic sine of complex number\n return exports.COMPLEX(Math.cos(y) * (Math.exp(x) - Math.exp(-x)) / 2, Math.sin(y) * (Math.exp(x) + Math.exp(-x)) / 2, unit);\n};\n\nexports.IMSQRT = function(inumber) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n\n if (utils.anyIsError(x, y)) {\n return error.value;\n }\n\n // Lookup imaginary unit\n var unit = inumber.substring(inumber.length - 1);\n unit = (unit === 'i' || unit === 'j') ? unit : 'i';\n\n // Calculate power of modulus\n var s = Math.sqrt(exports.IMABS(inumber));\n\n // Calculate argument\n var t = exports.IMARGUMENT(inumber);\n\n // Return exponential of complex number\n return exports.COMPLEX(s * Math.cos(t / 2), s * Math.sin(t / 2), unit);\n};\n\nexports.IMCSC = function (inumber) {\n // Return error if inumber is a logical value\n if (inumber === true || inumber === false) {\n return error.value;\n }\n\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n\n // Return error if either coefficient is not a number\n if (utils.anyIsError(x, y)) {\n return error.num;\n }\n\n // Return cosecant of complex number\n return exports.IMDIV('1', exports.IMSIN(inumber));\n};\n\nexports.IMCSCH = function (inumber) {\n // Return error if inumber is a logical value\n if (inumber === true || inumber === false) {\n return error.value;\n }\n\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n\n // Return error if either coefficient is not a number\n if (utils.anyIsError(x, y)) {\n return error.num;\n }\n\n // Return hyperbolic cosecant of complex number\n return exports.IMDIV('1', exports.IMSINH(inumber));\n};\n\nexports.IMSUB = function(inumber1, inumber2) {\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n var a = this.IMREAL(inumber1);\n var b = this.IMAGINARY(inumber1);\n var c = this.IMREAL(inumber2);\n var d = this.IMAGINARY(inumber2);\n\n if (utils.anyIsError(a, b, c, d)) {\n return error.value;\n }\n\n // Lookup imaginary unit\n var unit1 = inumber1.substring(inumber1.length - 1);\n var unit2 = inumber2.substring(inumber2.length - 1);\n var unit = 'i';\n if (unit1 === 'j') {\n unit = 'j';\n } else if (unit2 === 'j') {\n unit = 'j';\n }\n\n // Return _ of two complex numbers\n return this.COMPLEX(a - c, b - d, unit);\n};\n\nexports.IMSUM = function() {\n if (!arguments.length) {\n return error.value;\n }\n var args = utils.flatten(arguments);\n\n // Initialize result\n var result = args[0];\n\n // Loop on all numbers\n for (var i = 1; i < args.length; i++) {\n // Lookup coefficients of two complex numbers\n var a = this.IMREAL(result);\n var b = this.IMAGINARY(result);\n var c = this.IMREAL(args[i]);\n var d = this.IMAGINARY(args[i]);\n\n if (utils.anyIsError(a, b, c, d)) {\n return error.value;\n }\n\n // Complute product of two complex numbers\n result = this.COMPLEX(a + c, b + d);\n }\n\n // Return sum of complex numbers\n return result;\n};\n\nexports.IMTAN = function(inumber) {\n // Return error if inumber is a logical value\n if (inumber === true || inumber === false) {\n return error.value;\n }\n\n // Lookup real and imaginary coefficients using Formula.js [http://formulajs.org]\n var x = exports.IMREAL(inumber);\n var y = exports.IMAGINARY(inumber);\n\n if (utils.anyIsError(x, y)) {\n return error.value;\n }\n\n // Return tangent of complex number\n return this.IMDIV(this.IMSIN(inumber), this.IMCOS(inumber));\n};\n\nexports.OCT2BIN = function(number, places) {\n // Return error if number is not hexadecimal or contains more than ten characters (10 digits)\n if (!/^[0-7]{1,10}$/.test(number)) {\n return error.num;\n }\n\n // Check if number is negative\n var negative = (number.length === 10 && number.substring(0, 1) === '7') ? true : false;\n\n // Convert octal number to decimal\n var decimal = (negative) ? parseInt(number, 8) - 1073741824 : parseInt(number, 8);\n\n // Return error if number is lower than -512 or greater than 511\n if (decimal < -512 || decimal > 511) {\n return error.num;\n }\n\n // Ignore places and return a 10-character binary number if number is negative\n if (negative) {\n return '1' + text.REPT('0', 9 - (512 + decimal).toString(2).length) + (512 + decimal).toString(2);\n }\n\n // Convert decimal number to binary\n var result = decimal.toString(2);\n\n // Return binary number using the minimum number of characters necessary if places is undefined\n if (typeof places === 'undefined') {\n return result;\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return error.value;\n }\n\n // Return error if places is negative\n if (places < 0) {\n return error.num;\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return (places >= result.length) ? text.REPT('0', places - result.length) + result : error.num;\n }\n};\n\nexports.OCT2DEC = function(number) {\n // Return error if number is not octal or contains more than ten characters (10 digits)\n if (!/^[0-7]{1,10}$/.test(number)) {\n return error.num;\n }\n\n // Convert octal number to decimal\n var decimal = parseInt(number, 8);\n\n // Return decimal number\n return (decimal >= 536870912) ? decimal - 1073741824 : decimal;\n};\n\nexports.OCT2HEX = function(number, places) {\n // Return error if number is not octal or contains more than ten characters (10 digits)\n if (!/^[0-7]{1,10}$/.test(number)) {\n return error.num;\n }\n\n // Convert octal number to decimal\n var decimal = parseInt(number, 8);\n\n // Ignore places and return a 10-character octal number if number is negative\n if (decimal >= 536870912) {\n return 'ff' + (decimal + 3221225472).toString(16);\n }\n\n // Convert decimal number to hexadecimal\n var result = decimal.toString(16);\n\n // Return hexadecimal number using the minimum number of characters necessary if places is undefined\n if (places === undefined) {\n return result;\n } else {\n // Return error if places is nonnumeric\n if (isNaN(places)) {\n return error.value;\n }\n\n // Return error if places is negative\n if (places < 0) {\n return error.num;\n }\n\n // Truncate places in case it is not an integer\n places = Math.floor(places);\n\n // Pad return value with leading 0s (zeros) if necessary (using Underscore.string)\n return (places >= result.length) ? text.REPT('0', places - result.length) + result : error.num;\n }\n};\n","var error = require('./utils/error');\nvar dateTime = require('./date-time');\nvar utils = require('./utils/common');\n\nfunction validDate(d) {\n return d && d.getTime && !isNaN(d.getTime());\n}\n\nfunction ensureDate(d) {\n return (d instanceof Date)?d:new Date(d);\n}\n\nexports.ACCRINT = function(issue, first, settlement, rate, par, frequency, basis) {\n // Return error if either date is invalid\n issue = ensureDate(issue);\n first = ensureDate(first);\n settlement = ensureDate(settlement);\n if (!validDate(issue) || !validDate(first) || !validDate(settlement)) {\n return error.value;\n }\n\n // Return error if either rate or par are lower than or equal to zero\n if (rate <= 0 || par <= 0) {\n return error.num;\n }\n\n // Return error if frequency is neither 1, 2, or 4\n if ([1, 2, 4].indexOf(frequency) === -1) {\n return error.num;\n }\n\n // Return error if basis is neither 0, 1, 2, 3, or 4\n if ([0, 1, 2, 3, 4].indexOf(basis) === -1) {\n return error.num;\n }\n\n // Return error if settlement is before or equal to issue\n if (settlement <= issue) {\n return error.num;\n }\n\n // Set default values\n par = par || 0;\n basis = basis || 0;\n\n // Compute accrued interest\n return par * rate * dateTime.YEARFRAC(issue, settlement, basis);\n};\n\n// TODO\nexports.ACCRINTM = function() {\n throw new Error('ACCRINTM is not implemented');\n};\n\n// TODO\nexports.AMORDEGRC = function() {\n throw new Error('AMORDEGRC is not implemented');\n};\n\n// TODO\nexports.AMORLINC = function() {\n throw new Error('AMORLINC is not implemented');\n};\n\n// TODO\nexports.COUPDAYBS = function() {\n throw new Error('COUPDAYBS is not implemented');\n};\n\n// TODO\nexports.COUPDAYS = function() {\n throw new Error('COUPDAYS is not implemented');\n};\n\n// TODO\nexports.COUPDAYSNC = function() {\n throw new Error('COUPDAYSNC is not implemented');\n};\n\n// TODO\nexports.COUPNCD = function() {\n throw new Error('COUPNCD is not implemented');\n};\n\n// TODO\nexports.COUPNUM = function() {\n throw new Error('COUPNUM is not implemented');\n};\n\n// TODO\nexports.COUPPCD = function() {\n throw new Error('COUPPCD is not implemented');\n};\n\nexports.CUMIPMT = function(rate, periods, value, start, end, type) {\n rate = utils.parseNumber(rate);\n periods = utils.parseNumber(periods);\n value = utils.parseNumber(value);\n if (utils.anyIsError(rate, periods, value)) {\n return error.value;\n }\n\n if (rate <= 0 || periods <= 0 || value <= 0) {\n return error.num;\n }\n\n if (start < 1 || end < 1 || start > end) {\n return error.num;\n }\n\n if (type !== 0 && type !== 1) {\n return error.num;\n }\n\n var payment = exports.PMT(rate, periods, value, 0, type);\n var interest = 0;\n\n if (start === 1) {\n if (type === 0) {\n interest = -value;\n }\n start++;\n }\n\n for (var i = start; i <= end; i++) {\n if (type === 1) {\n interest += exports.FV(rate, i - 2, payment, value, 1) - payment;\n } else {\n interest += exports.FV(rate, i - 1, payment, value, 0);\n }\n }\n interest *= rate;\n\n return interest;\n};\n\nexports.CUMPRINC = function(rate, periods, value, start, end, type) {\n // Credits: algorithm inspired by Apache OpenOffice\n // Credits: Hannes Stiebitzhofer for the translations of function and variable names\n\n rate = utils.parseNumber(rate);\n periods = utils.parseNumber(periods);\n value = utils.parseNumber(value);\n if (utils.anyIsError(rate, periods, value)) {\n return error.value;\n }\n\n // Return error if either rate, periods, or value are lower than or equal to zero\n if (rate <= 0 || periods <= 0 || value <= 0) {\n return error.num;\n }\n\n // Return error if start < 1, end < 1, or start > end\n if (start < 1 || end < 1 || start > end) {\n return error.num;\n }\n\n // Return error if type is neither 0 nor 1\n if (type !== 0 && type !== 1) {\n return error.num;\n }\n\n // Compute cumulative principal\n var payment = exports.PMT(rate, periods, value, 0, type);\n var principal = 0;\n if (start === 1) {\n if (type === 0) {\n principal = payment + value * rate;\n } else {\n principal = payment;\n }\n start++;\n }\n for (var i = start; i <= end; i++) {\n if (type > 0) {\n principal += payment - (exports.FV(rate, i - 2, payment, value, 1) - payment) * rate;\n } else {\n principal += payment - exports.FV(rate, i - 1, payment, value, 0) * rate;\n }\n }\n\n // Return cumulative principal\n return principal;\n};\n\nexports.DB = function(cost, salvage, life, period, month) {\n // Initialize month\n month = (month === undefined) ? 12 : month;\n\n cost = utils.parseNumber(cost);\n salvage = utils.parseNumber(salvage);\n life = utils.parseNumber(life);\n period = utils.parseNumber(period);\n month = utils.parseNumber(month);\n if (utils.anyIsError(cost, salvage, life, period, month)) {\n return error.value;\n }\n\n // Return error if any of the parameters is negative\n if (cost < 0 || salvage < 0 || life < 0 || period < 0) {\n return error.num;\n }\n\n // Return error if month is not an integer between 1 and 12\n if ([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12].indexOf(month) === -1) {\n return error.num;\n }\n\n // Return error if period is greater than life\n if (period > life) {\n return error.num;\n }\n\n // Return 0 (zero) if salvage is greater than or equal to cost\n if (salvage >= cost) {\n return 0;\n }\n\n // Rate is rounded to three decimals places\n var rate = (1 - Math.pow(salvage / cost, 1 / life)).toFixed(3);\n\n // Compute initial depreciation\n var initial = cost * rate * month / 12;\n\n // Compute total depreciation\n var total = initial;\n var current = 0;\n var ceiling = (period === life) ? life - 1 : period;\n for (var i = 2; i <= ceiling; i++) {\n current = (cost - total) * rate;\n total += current;\n }\n\n // Depreciation for the first and last periods are special cases\n if (period === 1) {\n // First period\n return initial;\n } else if (period === life) {\n // Last period\n return (cost - total) * rate;\n } else {\n return current;\n }\n};\n\nexports.DDB = function(cost, salvage, life, period, factor) {\n // Initialize factor\n factor = (factor === undefined) ? 2 : factor;\n\n cost = utils.parseNumber(cost);\n salvage = utils.parseNumber(salvage);\n life = utils.parseNumber(life);\n period = utils.parseNumber(period);\n factor = utils.parseNumber(factor);\n if (utils.anyIsError(cost, salvage, life, period, factor)) {\n return error.value;\n }\n\n // Return error if any of the parameters is negative or if factor is null\n if (cost < 0 || salvage < 0 || life < 0 || period < 0 || factor <= 0) {\n return error.num;\n }\n\n // Return error if period is greater than life\n if (period > life) {\n return error.num;\n }\n\n // Return 0 (zero) if salvage is greater than or equal to cost\n if (salvage >= cost) {\n return 0;\n }\n\n // Compute depreciation\n var total = 0;\n var current = 0;\n for (var i = 1; i <= period; i++) {\n current = Math.min((cost - total) * (factor / life), (cost - salvage - total));\n total += current;\n }\n\n // Return depreciation\n return current;\n};\n\n// TODO\nexports.DISC = function() {\n throw new Error('DISC is not implemented');\n};\n\nexports.DOLLARDE = function(dollar, fraction) {\n // Credits: algorithm inspired by Apache OpenOffice\n\n dollar = utils.parseNumber(dollar);\n fraction = utils.parseNumber(fraction);\n if (utils.anyIsError(dollar, fraction)) {\n return error.value;\n }\n\n // Return error if fraction is negative\n if (fraction < 0) {\n return error.num;\n }\n\n // Return error if fraction is greater than or equal to 0 and less than 1\n if (fraction >= 0 && fraction < 1) {\n return error.div0;\n }\n\n // Truncate fraction if it is not an integer\n fraction = parseInt(fraction, 10);\n\n // Compute integer part\n var result = parseInt(dollar, 10);\n\n // Add decimal part\n result += (dollar % 1) * Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN10)) / fraction;\n\n // Round result\n var power = Math.pow(10, Math.ceil(Math.log(fraction) / Math.LN2) + 1);\n result = Math.round(result * power) / power;\n\n // Return converted dollar price\n return result;\n};\n\nexports.DOLLARFR = function(dollar, fraction) {\n // Credits: algorithm inspired by Apache OpenOffice\n\n dollar = utils.parseNumber(dollar);\n fraction = utils.parseNumber(fraction);\n if (utils.anyIsError(dollar, fraction)) {\n return error.value;\n }\n\n // Return error if fraction is negative\n if (fraction < 0) {\n return error.num;\n }\n\n // Return error if fraction is greater than or equal to 0 and less than 1\n if (fraction >= 0 && fraction < 1) {\n return error.div0;\n }\n\n // Truncate fraction if it is not an integer\n fraction = parseInt(fraction, 10);\n\n // Compute integer part\n var result = parseInt(dollar, 10);\n\n // Add decimal part\n result += (dollar % 1) * Math.pow(10, -Math.ceil(Math.log(fraction) / Math.LN10)) * fraction;\n\n // Return converted dollar price\n return result;\n};\n\n// TODO\nexports.DURATION = function() {\n throw new Error('DURATION is not implemented');\n};\n\nexports.EFFECT = function(rate, periods) {\n rate = utils.parseNumber(rate);\n periods = utils.parseNumber(periods);\n if (utils.anyIsError(rate, periods)) {\n return error.value;\n }\n\n // Return error if rate <=0 or periods < 1\n if (rate <= 0 || periods < 1) {\n return error.num;\n }\n\n // Truncate periods if it is not an integer\n periods = parseInt(periods, 10);\n\n // Return effective annual interest rate\n return Math.pow(1 + rate / periods, periods) - 1;\n};\n\nexports.FV = function(rate, periods, payment, value, type) {\n // Credits: algorithm inspired by Apache OpenOffice\n\n value = value || 0;\n type = type || 0;\n\n rate = utils.parseNumber(rate);\n periods = utils.parseNumber(periods);\n payment = utils.parseNumber(payment);\n value = utils.parseNumber(value);\n type = utils.parseNumber(type);\n if (utils.anyIsError(rate, periods, payment, value, type)) {\n return error.value;\n }\n\n // Return future value\n var result;\n if (rate === 0) {\n result = value + payment * periods;\n } else {\n var term = Math.pow(1 + rate, periods);\n if (type === 1) {\n result = value * term + payment * (1 + rate) * (term - 1) / rate;\n } else {\n result = value * term + payment * (term - 1) / rate;\n }\n }\n return -result;\n};\n\nexports.FVSCHEDULE = function(principal, schedule) {\n principal = utils.parseNumber(principal);\n schedule = utils.parseNumberArray(utils.flatten(schedule));\n if (utils.anyIsError(principal, schedule)) {\n return error.value;\n }\n\n var n = schedule.length;\n var future = principal;\n\n // Apply all interests in schedule\n for (var i = 0; i < n; i++) {\n // Apply scheduled interest\n future *= 1 + schedule[i];\n }\n\n // Return future value\n return future;\n};\n\n// TODO\nexports.INTRATE = function() {\n throw new Error('INTRATE is not implemented');\n};\n\nexports.IPMT = function(rate, period, periods, present, future, type) {\n // Credits: algorithm inspired by Apache OpenOffice\n\n future = future || 0;\n type = type || 0;\n\n rate = utils.parseNumber(rate);\n period = utils.parseNumber(period);\n periods = utils.parseNumber(periods);\n present = utils.parseNumber(present);\n future = utils.parseNumber(future);\n type = utils.parseNumber(type);\n if (utils.anyIsError(rate, period, periods, present, future, type)) {\n return error.value;\n }\n\n // Compute payment\n var payment = exports.PMT(rate, periods, present, future, type);\n\n // Compute interest\n var interest;\n if (period === 1) {\n if (type === 1) {\n interest = 0;\n } else {\n interest = -present;\n }\n } else {\n if (type === 1) {\n interest = exports.FV(rate, period - 2, payment, present, 1) - payment;\n } else {\n interest = exports.FV(rate, period - 1, payment, present, 0);\n }\n }\n\n // Return interest\n return interest * rate;\n};\n\nexports.IRR = function(values, guess) {\n // Credits: algorithm inspired by Apache OpenOffice\n\n guess = guess || 0;\n\n values = utils.parseNumberArray(utils.flatten(values));\n guess = utils.parseNumber(guess);\n if (utils.anyIsError(values, guess)) {\n return error.value;\n }\n\n // Calculates the resulting amount\n var irrResult = function(values, dates, rate) {\n var r = rate + 1;\n var result = values[0];\n for (var i = 1; i < values.length; i++) {\n result += values[i] / Math.pow(r, (dates[i] - dates[0]) / 365);\n }\n return result;\n };\n\n // Calculates the first derivation\n var irrResultDeriv = function(values, dates, rate) {\n var r = rate + 1;\n var result = 0;\n for (var i = 1; i < values.length; i++) {\n var frac = (dates[i] - dates[0]) / 365;\n result -= frac * values[i] / Math.pow(r, frac + 1);\n }\n return result;\n };\n\n // Initialize dates and check that values contains at least one positive value and one negative value\n var dates = [];\n var positive = false;\n var negative = false;\n for (var i = 0; i < values.length; i++) {\n dates[i] = (i === 0) ? 0 : dates[i - 1] + 365;\n if (values[i] > 0) {\n positive = true;\n }\n if (values[i] < 0) {\n negative = true;\n }\n }\n\n // Return error if values does not contain at least one positive value and one negative value\n if (!positive || !negative) {\n return error.num;\n }\n\n // Initialize guess and resultRate\n guess = (guess === undefined) ? 0.1 : guess;\n var resultRate = guess;\n\n // Set maximum epsilon for end of iteration\n var epsMax = 1e-10;\n\n // Implement Newton's method\n var newRate, epsRate, resultValue;\n var contLoop = true;\n do {\n resultValue = irrResult(values, dates, resultRate);\n newRate = resultRate - resultValue / irrResultDeriv(values, dates, resultRate);\n epsRate = Math.abs(newRate - resultRate);\n resultRate = newRate;\n contLoop = (epsRate > epsMax) && (Math.abs(resultValue) > epsMax);\n } while (contLoop);\n\n // Return internal rate of return\n return resultRate;\n};\n\nexports.ISPMT = function(rate, period, periods, value) {\n rate = utils.parseNumber(rate);\n period = utils.parseNumber(period);\n periods = utils.parseNumber(periods);\n value = utils.parseNumber(value);\n if (utils.anyIsError(rate, period, periods, value)) {\n return error.value;\n }\n\n // Return interest\n return value * rate * (period / periods - 1);\n};\n\n// TODO\nexports.MDURATION = function() {\n throw new Error('MDURATION is not implemented');\n};\n\nexports.MIRR = function(values, finance_rate, reinvest_rate) {\n values = utils.parseNumberArray(utils.flatten(values));\n finance_rate = utils.parseNumber(finance_rate);\n reinvest_rate = utils.parseNumber(reinvest_rate);\n if (utils.anyIsError(values, finance_rate, reinvest_rate)) {\n return error.value;\n }\n\n // Initialize number of values\n var n = values.length;\n\n // Lookup payments (negative values) and incomes (positive values)\n var payments = [];\n var incomes = [];\n for (var i = 0; i < n; i++) {\n if (values[i] < 0) {\n payments.push(values[i]);\n } else {\n incomes.push(values[i]);\n }\n }\n\n // Return modified internal rate of return\n var num = -exports.NPV(reinvest_rate, incomes) * Math.pow(1 + reinvest_rate, n - 1);\n var den = exports.NPV(finance_rate, payments) * (1 + finance_rate);\n return Math.pow(num / den, 1 / (n - 1)) - 1;\n};\n\nexports.NOMINAL = function(rate, periods) {\n rate = utils.parseNumber(rate);\n periods = utils.parseNumber(periods);\n if (utils.anyIsError(rate, periods)) {\n return error.value;\n }\n\n // Return error if rate <=0 or periods < 1\n if (rate <= 0 || periods < 1) {\n return error.num;\n }\n\n // Truncate periods if it is not an integer\n periods = parseInt(periods, 10);\n\n // Return nominal annual interest rate\n return (Math.pow(rate + 1, 1 / periods) - 1) * periods;\n};\n\nexports.NPER = function(rate, payment, present, future, type) {\n type = (type === undefined) ? 0 : type;\n future = (future === undefined) ? 0 : future;\n\n rate = utils.parseNumber(rate);\n payment = utils.parseNumber(payment);\n present = utils.parseNumber(present);\n future = utils.parseNumber(future);\n type = utils.parseNumber(type);\n\n if (utils.anyIsError(rate, payment, present, future, type)) {\n return error.value;\n }\n\n if (rate === 0) {\n return (-(present + future) / payment);\n } else {\n var num = payment * (1 + rate * type) - future * rate;\n var den = (present * rate + payment * (1 + rate * type));\n return Math.log(num / den) / Math.log(1 + rate);\n }\n};\n\nexports.NPV = function() {\n var args = utils.parseNumberArray(utils.flatten(arguments));\n if (args instanceof Error) {\n return args;\n }\n\n // Lookup rate\n var rate = args[0];\n\n // Initialize net present value\n var value = 0;\n\n // Loop on all values\n for (var j = 1; j < args.length; j++) {\n value += args[j] / Math.pow(1 + rate, j);\n }\n\n // Return net present value\n return value;\n};\n\n// TODO\nexports.ODDFPRICE = function() {\n throw new Error('ODDFPRICE is not implemented');\n};\n\n// TODO\nexports.ODDFYIELD = function() {\n throw new Error('ODDFYIELD is not implemented');\n};\n\n// TODO\nexports.ODDLPRICE = function() {\n throw new Error('ODDLPRICE is not implemented');\n};\n\n// TODO\nexports.ODDLYIELD = function() {\n throw new Error('ODDLYIELD is not implemented');\n};\n\nexports.PDURATION = function(rate, present, future) {\n rate = utils.parseNumber(rate);\n present = utils.parseNumber(present);\n future = utils.parseNumber(future);\n if (utils.anyIsError(rate, present, future)) {\n return error.value;\n }\n\n // Return error if rate <=0\n if (rate <= 0) {\n return error.num;\n }\n\n // Return number of periods\n return (Math.log(future) - Math.log(present)) / Math.log(1 + rate);\n};\n\nexports.PMT = function(rate, periods, present, future, type) {\n // Credits: algorithm inspired by Apache OpenOffice\n\n future = future || 0;\n type = type || 0;\n\n rate = utils.parseNumber(rate);\n periods = utils.parseNumber(periods);\n present = utils.parseNumber(present);\n future = utils.parseNumber(future);\n type = utils.parseNumber(type);\n if (utils.anyIsError(rate, periods, present, future, type)) {\n return error.value;\n }\n\n // Return payment\n var result;\n if (rate === 0) {\n result = (present + future) / periods;\n } else {\n var term = Math.pow(1 + rate, periods);\n if (type === 1) {\n result = (future * rate / (term - 1) + present * rate / (1 - 1 / term)) / (1 + rate);\n } else {\n result = future * rate / (term - 1) + present * rate / (1 - 1 / term);\n }\n }\n return -result;\n};\n\nexports.PPMT = function(rate, period, periods, present, future, type) {\n future = future || 0;\n type = type || 0;\n\n rate = utils.parseNumber(rate);\n periods = utils.parseNumber(periods);\n present = utils.parseNumber(present);\n future = utils.parseNumber(future);\n type = utils.parseNumber(type);\n if (utils.anyIsError(rate, periods, present, future, type)) {\n return error.value;\n }\n\n return exports.PMT(rate, periods, present, future, type) - exports.IPMT(rate, period, periods, present, future, type);\n};\n\n// TODO\nexports.PRICE = function() {\n throw new Error('PRICE is not implemented');\n};\n\n// TODO\nexports.PRICEDISC = function() {\n throw new Error('PRICEDISC is not implemented');\n};\n\n// TODO\nexports.PRICEMAT = function() {\n throw new Error('PRICEMAT is not implemented');\n};\n\nexports.PV = function(rate, periods, payment, future, type) {\n future = future || 0;\n type = type || 0;\n\n rate = utils.parseNumber(rate);\n periods = utils.parseNumber(periods);\n payment = utils.parseNumber(payment);\n future = utils.parseNumber(future);\n type = utils.parseNumber(type);\n if (utils.anyIsError(rate, periods, payment, future, type)) {\n return error.value;\n }\n\n // Return present value\n if (rate === 0) {\n return -payment * periods - future;\n } else {\n return (((1 - Math.pow(1 + rate, periods)) / rate) * payment * (1 + rate * type) - future) / Math.pow(1 + rate, periods);\n }\n};\n\nexports.RATE = function(periods, payment, present, future, type, guess) {\n guess = (guess === undefined) ? 0.01 : guess;\n future = (future === undefined) ? 0 : future;\n type = (type === undefined) ? 0 : type;\n\n periods = utils.parseNumber(periods);\n payment = utils.parseNumber(payment);\n present = utils.parseNumber(present);\n future = utils.parseNumber(future);\n type = utils.parseNumber(type);\n guess = utils.parseNumber(guess);\n if (utils.anyIsError(periods, payment, present, future, type, guess)) {\n return error.value;\n }\n\n var epsMax = 1e-10;\n var iterMax = 20;\n var rate = guess;\n\n type = type ? 1 : 0;\n for (var i = 0; i < iterMax; i++) {\n if (rate <= -1) {\n return error.num;\n }\n var y, f;\n if (Math.abs(rate) < epsMax) {\n y = present * (1 + periods * rate) + payment * (1 + rate * type) * periods + future;\n } else {\n f = Math.pow(1 + rate, periods);\n y = present * f + payment * (1 / rate + type) * (f - 1) + future;\n }\n if (Math.abs(y) < epsMax) {\n return rate;\n }\n var dy;\n if (Math.abs(rate) < epsMax) {\n dy = present * periods + payment * type * periods;\n } else {\n f = Math.pow(1 + rate, periods);\n var df = periods * Math.pow(1 + rate, periods - 1);\n dy = present * df + payment * (1 / rate + type) * df + payment * (-1 / (rate * rate)) * (f - 1);\n }\n rate -= y / dy;\n }\n\n return rate;\n};\n\n// TODO\nexports.RECEIVED = function() {\n throw new Error('RECEIVED is not implemented');\n};\n\nexports.RRI = function(periods, present, future) {\n periods = utils.parseNumber(periods);\n present = utils.parseNumber(present);\n future = utils.parseNumber(future);\n if (utils.anyIsError(periods, present, future)) {\n return error.value;\n }\n\n // Return error if periods or present is equal to 0 (zero)\n if (periods === 0 || present === 0) {\n return error.num;\n }\n\n // Return equivalent interest rate\n return Math.pow(future / present, 1 / periods) - 1;\n};\n\nexports.SLN = function(cost, salvage, life) {\n cost = utils.parseNumber(cost);\n salvage = utils.parseNumber(salvage);\n life = utils.parseNumber(life);\n if (utils.anyIsError(cost, salvage, life)) {\n return error.value;\n }\n\n // Return error if life equal to 0 (zero)\n if (life === 0) {\n return error.num;\n }\n\n // Return straight-line depreciation\n return (cost - salvage) / life;\n};\n\nexports.SYD = function(cost, salvage, life, period) {\n // Return error if any of the parameters is not a number\n cost = utils.parseNumber(cost);\n salvage = utils.parseNumber(salvage);\n life = utils.parseNumber(life);\n period = utils.parseNumber(period);\n if (utils.anyIsError(cost, salvage, life, period)) {\n return error.value;\n }\n\n // Return error if life equal to 0 (zero)\n if (life === 0) {\n return error.num;\n }\n\n // Return error if period is lower than 1 or greater than life\n if (period < 1 || period > life) {\n return error.num;\n }\n\n // Truncate period if it is not an integer\n period = parseInt(period, 10);\n\n // Return straight-line depreciation\n return ((cost - salvage) * (life - period + 1) * 2) / (life * (life + 1));\n};\n\nexports.TBILLEQ = function(settlement, maturity, discount) {\n settlement = utils.parseDate(settlement);\n maturity = utils.parseDate(maturity);\n discount = utils.parseNumber(discount);\n if (utils.anyIsError(settlement, maturity, discount)) {\n return error.value;\n }\n\n // Return error if discount is lower than or equal to zero\n if (discount <= 0) {\n return error.num;\n }\n\n // Return error if settlement is greater than maturity\n if (settlement > maturity) {\n return error.num;\n }\n\n // Return error if maturity is more than one year after settlement\n if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) {\n return error.num;\n }\n\n // Return bond-equivalent yield\n return (365 * discount) / (360 - discount * dateTime.DAYS360(settlement, maturity, false));\n};\n\nexports.TBILLPRICE = function(settlement, maturity, discount) {\n settlement = utils.parseDate(settlement);\n maturity = utils.parseDate(maturity);\n discount = utils.parseNumber(discount);\n if (utils.anyIsError(settlement, maturity, discount)) {\n return error.value;\n }\n\n // Return error if discount is lower than or equal to zero\n if (discount <= 0) {\n return error.num;\n }\n\n // Return error if settlement is greater than maturity\n if (settlement > maturity) {\n return error.num;\n }\n\n // Return error if maturity is more than one year after settlement\n if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) {\n return error.num;\n }\n\n // Return bond-equivalent yield\n return 100 * (1 - discount * dateTime.DAYS360(settlement, maturity, false) / 360);\n};\n\nexports.TBILLYIELD = function(settlement, maturity, price) {\n settlement = utils.parseDate(settlement);\n maturity = utils.parseDate(maturity);\n price = utils.parseNumber(price);\n if (utils.anyIsError(settlement, maturity, price)) {\n return error.value;\n }\n\n // Return error if price is lower than or equal to zero\n if (price <= 0) {\n return error.num;\n }\n\n // Return error if settlement is greater than maturity\n if (settlement > maturity) {\n return error.num;\n }\n\n // Return error if maturity is more than one year after settlement\n if (maturity - settlement > 365 * 24 * 60 * 60 * 1000) {\n return error.num;\n }\n\n // Return bond-equivalent yield\n return (100 - price) * 360 / (price * dateTime.DAYS360(settlement, maturity, false));\n};\n\n// TODO\nexports.VDB = function() {\n throw new Error('VDB is not implemented');\n};\n\nexports.XIRR = function(values, dates, guess) {\n // Credits: algorithm inspired by Apache OpenOffice\n\n values = utils.parseNumberArray(utils.flatten(values));\n dates = utils.parseDateArray(utils.flatten(dates));\n guess = utils.parseNumber(guess);\n\n if (utils.anyIsError(values, dates, guess)) {\n return error.value;\n }\n\n // Calculates the resulting amount\n var irrResult = function(values, dates, rate) {\n var r = rate + 1;\n var result = values[0];\n for (var i = 1; i < values.length; i++) {\n result += values[i] / Math.pow(r, dateTime.DAYS(dates[i], dates[0]) / 365);\n }\n return result;\n };\n\n // Calculates the first derivation\n var irrResultDeriv = function(values, dates, rate) {\n var r = rate + 1;\n var result = 0;\n for (var i = 1; i < values.length; i++) {\n var frac = dateTime.DAYS(dates[i], dates[0]) / 365;\n result -= frac * values[i] / Math.pow(r, frac + 1);\n }\n return result;\n };\n\n // Check that values contains at least one positive value and one negative value\n var positive = false;\n var negative = false;\n for (var i = 0; i < values.length; i++) {\n if (values[i] > 0) {\n positive = true;\n }\n if (values[i] < 0) {\n negative = true;\n }\n }\n\n // Return error if values does not contain at least one positive value and one negative value\n if (!positive || !negative) {\n return error.num;\n }\n\n // Initialize guess and resultRate\n guess = guess || 0.1;\n var resultRate = guess;\n\n // Set maximum epsilon for end of iteration\n var epsMax = 1e-10;\n\n // Implement Newton's method\n var newRate, epsRate, resultValue;\n var contLoop = true;\n do {\n resultValue = irrResult(values, dates, resultRate);\n newRate = resultRate - resultValue / irrResultDeriv(values, dates, resultRate);\n epsRate = Math.abs(newRate - resultRate);\n resultRate = newRate;\n contLoop = (epsRate > epsMax) && (Math.abs(resultValue) > epsMax);\n } while (contLoop);\n\n // Return internal rate of return\n return resultRate;\n};\n\nexports.XNPV = function(rate, values, dates) {\n rate = utils.parseNumber(rate);\n values = utils.parseNumberArray(utils.flatten(values));\n dates = utils.parseDateArray(utils.flatten(dates));\n if (utils.anyIsError(rate, values, dates)) {\n return error.value;\n }\n\n var result = 0;\n for (var i = 0; i < values.length; i++) {\n result += values[i] / Math.pow(1 + rate, dateTime.DAYS(dates[i], dates[0]) / 365);\n }\n return result;\n};\n\n// TODO\nexports.YIELD = function() {\n throw new Error('YIELD is not implemented');\n};\n\n// TODO\nexports.YIELDDISC = function() {\n throw new Error('YIELDDISC is not implemented');\n};\n\n// TODO\nexports.YIELDMAT = function() {\n throw new Error('YIELDMAT is not implemented');\n};\n","var error = require('./utils/error');\n\n// TODO\nexports.CELL = function() {\n throw new Error('CELL is not implemented');\n};\n\nexports.ERROR = {};\nexports.ERROR.TYPE = function(error_val) {\n switch (error_val) {\n case error.nil: return 1;\n case error.div0: return 2;\n case error.value: return 3;\n case error.ref: return 4;\n case error.name: return 5;\n case error.num: return 6;\n case error.na: return 7;\n case error.data: return 8;\n }\n return error.na;\n};\n\n// TODO\nexports.INFO = function() {\n throw new Error('INFO is not implemented');\n};\n\nexports.ISBLANK = function(value) {\n return value === null;\n};\n\nexports.ISBINARY = function (number) {\n return (/^[01]{1,10}$/).test(number);\n};\n\nexports.ISERR = function(value) {\n return ([error.value, error.ref, error.div0, error.num, error.name, error.nil]).indexOf(value) >= 0 ||\n (typeof value === 'number' && (isNaN(value) || !isFinite(value)));\n};\n\nexports.ISERROR = function(value) {\n return exports.ISERR(value) || value === error.na;\n};\n\nexports.ISEVEN = function(number) {\n return (Math.floor(Math.abs(number)) & 1) ? false : true;\n};\n\n// TODO\nexports.ISFORMULA = function() {\n throw new Error('ISFORMULA is not implemented');\n};\n\nexports.ISLOGICAL = function(value) {\n return value === true || value === false;\n};\n\nexports.ISNA = function(value) {\n return value === error.na;\n};\n\nexports.ISNONTEXT = function(value) {\n return typeof(value) !== 'string';\n};\n\nexports.ISNUMBER = function(value) {\n return typeof(value) === 'number' && !isNaN(value) && isFinite(value);\n};\n\nexports.ISODD = function(number) {\n return (Math.floor(Math.abs(number)) & 1) ? true : false;\n};\n\n// TODO\nexports.ISREF = function() {\n throw new Error('ISREF is not implemented');\n};\n\nexports.ISTEXT = function(value) {\n return typeof(value) === 'string';\n};\n\nexports.N = function(value) {\n if (this.ISNUMBER(value)) {\n return value;\n }\n if (value instanceof Date) {\n return value.getTime();\n }\n if (value === true) {\n return 1;\n }\n if (value === false) {\n return 0;\n }\n if (this.ISERROR(value)) {\n return value;\n }\n return 0;\n};\n\nexports.NA = function() {\n return error.na;\n};\n\n\n// TODO\nexports.SHEET = function() {\n throw new Error('SHEET is not implemented');\n};\n\n// TODO\nexports.SHEETS = function() {\n throw new Error('SHEETS is not implemented');\n};\n\nexports.TYPE = function(value) {\n if (this.ISNUMBER(value)) {\n return 1;\n }\n if (this.ISTEXT(value)) {\n return 2;\n }\n if (this.ISLOGICAL(value)) {\n return 4;\n }\n if (this.ISERROR(value)) {\n return 16;\n }\n if (Array.isArray(value)) {\n return 64;\n }\n};\n","var error = require('./utils/error');\nvar utils = require('./utils/common');\nvar information = require('./information');\n\nexports.AND = function() {\n var args = utils.flatten(arguments);\n var result = error.value;\n for (var i = 0; i < args.length; i++) {\n if (args[i] instanceof Error) {\n return args[i];\n }\n if (args[i] === undefined || args[i] === null || typeof args[i] === \"string\") {\n continue;\n }\n if (result === error.value) {\n result = true;\n }\n if (!args[i]) {\n result = false;\n }\n }\n return result;\n};\n\nexports.CHOOSE = function() {\n if (arguments.length < 2) {\n return error.na;\n }\n\n var index = arguments[0];\n if (index < 1 || index > 254) {\n return error.value;\n }\n\n if (arguments.length < index + 1) {\n return error.value;\n }\n\n return arguments[index];\n};\n\nexports.FALSE = function() {\n return false;\n};\n\nexports.IF = function(test, then_value, otherwise_value) {\n if (test instanceof Error) {\n return test;\n }\n then_value = arguments.length >= 2 ? then_value : true;\n if (then_value === undefined || then_value === null) {\n then_value = 0;\n }\n otherwise_value = arguments.length === 3 ? otherwise_value : false;\n if (otherwise_value === undefined || otherwise_value === null) {\n otherwise_value = 0;\n }\n return test ? then_value : otherwise_value;\n};\n\nexports.IFS = function() {\n for (var i = 0; i < arguments.length / 2; i++) {\n if (arguments[i * 2]) {\n return arguments[i * 2 + 1];\n }\n }\n return error.na;\n};\n\nexports.IFERROR = function(value, valueIfError) {\n if (information.ISERROR(value)) {\n return valueIfError;\n }\n return value;\n};\n\nexports.IFNA = function(value, value_if_na) {\n return value === error.na ? value_if_na : value;\n};\n\nexports.NOT = function(logical) {\n if (typeof logical === \"string\") {\n return error.value;\n }\n if (logical instanceof Error) {\n return logical;\n }\n return !logical;\n};\n\nexports.OR = function() {\n var args = utils.flatten(arguments);\n var result = error.value;\n for (var i = 0; i < args.length; i++) {\n if (args[i] instanceof Error) {\n return args[i];\n }\n if (args[i] === undefined || args[i] === null || typeof args[i] === \"string\") {\n continue;\n }\n if (result === error.value) {\n result = false;\n }\n if (args[i]) {\n result = true;\n }\n }\n return result;\n};\n\nexports.TRUE = function() {\n return true;\n};\n\nexports.XOR = function() {\n var args = utils.flatten(arguments);\n var result = error.value;\n for (var i = 0; i < args.length; i++) {\n if (args[i] instanceof Error) {\n return args[i];\n }\n if (args[i] === undefined || args[i] === null || typeof args[i] === \"string\") {\n continue;\n }\n if (result === error.value) {\n result = 0;\n }\n if (args[i]) {\n result++;\n }\n }\n if (result === error.value) {\n return result;\n }\n return (Math.floor(Math.abs(result)) & 1) ? true : false;\n};\n\nexports.SWITCH = function () {\n var result;\n\n if (arguments.length > 0) {\n var targetValue = arguments[0];\n var argc = arguments.length - 1;\n var switchCount = Math.floor(argc / 2);\n var switchSatisfied = false;\n var hasDefaultClause = argc % 2 !== 0;\n var defaultClause = argc % 2 === 0 ? null : arguments[arguments.length - 1];\n\n if (switchCount) {\n for (var index = 0; index < switchCount; index++) {\n if (targetValue === arguments[index * 2 + 1]) {\n result = arguments[index * 2 + 2];\n switchSatisfied = true;\n break;\n }\n }\n }\n\n if (!switchSatisfied) {\n result = hasDefaultClause ? defaultClause : error.na;\n }\n } else {\n result = error.value;\n }\n\n return result;\n};\n","var error = require('./utils/error');\nvar utils = require('./utils/common');\n\nexports.MATCH = function (lookupValue, lookupArray, matchType) {\n if (!lookupValue && !lookupArray) {\n return error.na;\n }\n\n if (arguments.length === 2) {\n matchType = 1;\n }\n if (!(lookupArray instanceof Array)) {\n return error.na;\n }\n\n lookupArray = utils.flatten(lookupArray);\n\n if (matchType !== -1 && matchType !== 0 && matchType !== 1) {\n return error.na;\n }\n var index;\n var indexValue;\n for (var idx = 0; idx < lookupArray.length; idx++) {\n if (matchType === 1) {\n if (lookupArray[idx] === lookupValue) {\n return idx + 1;\n } else if (lookupArray[idx] < lookupValue) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = lookupArray[idx];\n } else if (lookupArray[idx] > indexValue) {\n index = idx + 1;\n indexValue = lookupArray[idx];\n }\n }\n } else if (matchType === 0) {\n if (typeof lookupValue === 'string') {\n lookupValue = lookupValue.replace(/\\?/g, '.');\n if (lookupArray[idx].toLowerCase().match(lookupValue.toLowerCase())) {\n return idx + 1;\n }\n } else {\n if (lookupArray[idx] === lookupValue) {\n return idx + 1;\n }\n }\n } else if (matchType === -1) {\n if (lookupArray[idx] === lookupValue) {\n return idx + 1;\n } else if (lookupArray[idx] > lookupValue) {\n if (!indexValue) {\n index = idx + 1;\n indexValue = lookupArray[idx];\n } else if (lookupArray[idx] < indexValue) {\n index = idx + 1;\n indexValue = lookupArray[idx];\n }\n }\n }\n }\n\n return index ? index : error.na;\n};\n\nexports.VLOOKUP = function (needle, table, index, rangeLookup) {\n if (!table || !index) {\n return error.na;\n }\n\n rangeLookup = !(rangeLookup === 0 || rangeLookup === false);\n var result = error.na;\n var isNumberLookup = (typeof needle === \"number\");\n var exactMatchOnly = false;\n for (var i = 0; i < table.length; i++) {\n var row = table[i];\n\n if (row[0] === needle) {\n result = (index < (row.length + 1) ? row[index - 1] : error.ref);\n break;\n } else if (!exactMatchOnly && ((isNumberLookup && rangeLookup && row[0] <= needle) ||\n (rangeLookup && typeof row[0] === \"string\" && row[0].localeCompare(needle) < 0))) {\n result = (index < (row.length + 1) ? row[index - 1] : error.ref);\n }\n\n if (isNumberLookup && row[0] > needle) {\n exactMatchOnly = true;\n }\n }\n\n return result;\n};\n\nexports.HLOOKUP = function (needle, table, index, rangeLookup) {\n return exports.VLOOKUP(needle, utils.transpose(table), index, rangeLookup);\n};\n\nexports.LOOKUP = function (searchCriterion, array, resultArray) {\n array = utils.flatten(array);\n resultArray = utils.flatten(resultArray);\n var isNumberLookup = (typeof searchCriterion === \"number\");\n var result = error.na;\n\n for (var i = 0; i < array.length; i++) {\n if (array[i] === searchCriterion) {\n return resultArray[i];\n } else if ((isNumberLookup && array[i] <= searchCriterion) ||\n (typeof array[i] === \"string\" && array[i].localeCompare(searchCriterion) < 0)) {\n result = resultArray[i];\n } else if ((isNumberLookup && array[i] > searchCriterion)) {\n return result;\n }\n }\n\n return result;\n};\n\nexports.INDEX = function (cellRange, rowNumber, columnNumber) {\n var someError = utils.anyError(cellRange, rowNumber, columnNumber);\n if (someError) {\n return someError;\n }\n\n if (!Array.isArray(cellRange)) {\n return error.value;\n }\n\n var isOneDimensionRange = cellRange.length > 0 && !Array.isArray(cellRange[0]);\n\n if (isOneDimensionRange && !columnNumber) {\n columnNumber = rowNumber;\n rowNumber = 1;\n } else {\n columnNumber = columnNumber ? columnNumber : 1;\n rowNumber = rowNumber ? rowNumber : 1;\n }\n\n if (columnNumber < 0 || rowNumber < 0) {\n return error.value;\n }\n\n if (isOneDimensionRange && rowNumber === 1 && columnNumber <= cellRange.length) {\n return cellRange[columnNumber - 1];\n } else if (rowNumber <= cellRange.length && columnNumber <= cellRange[rowNumber - 1].length) {\n return cellRange[rowNumber - 1][columnNumber - 1];\n }\n\n return error.ref;\n};\n","var utils = require('./utils/common');\nvar error = require('./utils/error');\nvar statistical = require('./statistical');\nvar information = require('./information');\nvar evalExpression = require('./utils/criteria-eval');\n\nexports.ABS = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n var result = Math.abs(number);\n\n return result;\n};\n\nexports.ACOS = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n var result = Math.acos(number);\n\n if (isNaN(result)) {\n result = error.num;\n }\n\n return result;\n};\n\nexports.ACOSH = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n var result = Math.log(number + Math.sqrt(number * number - 1));\n\n if (isNaN(result)) {\n result = error.num;\n }\n\n return result;\n};\n\nexports.ACOT = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n var result = Math.atan(1 / number);\n\n return result;\n};\n\nexports.ACOTH = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n var result = 0.5 * Math.log((number + 1) / (number - 1));\n\n if (isNaN(result)) {\n result = error.num;\n }\n\n return result;\n};\n\n//TODO: use options\nexports.AGGREGATE = function(function_num, options, ref1, ref2) {\n function_num = utils.parseNumber(function_num);\n options = utils.parseNumber(function_num);\n if (utils.anyIsError(function_num, options)) {\n return error.value;\n }\n switch (function_num) {\n case 1:\n return statistical.AVERAGE(ref1);\n case 2:\n return statistical.COUNT(ref1);\n case 3:\n return statistical.COUNTA(ref1);\n case 4:\n return statistical.MAX(ref1);\n case 5:\n return statistical.MIN(ref1);\n case 6:\n return exports.PRODUCT(ref1);\n case 7:\n return statistical.STDEV.S(ref1);\n case 8:\n return statistical.STDEV.P(ref1);\n case 9:\n return exports.SUM(ref1);\n case 10:\n return statistical.VAR.S(ref1);\n case 11:\n return statistical.VAR.P(ref1);\n case 12:\n return statistical.MEDIAN(ref1);\n case 13:\n return statistical.MODE.SNGL(ref1);\n case 14:\n return statistical.LARGE(ref1, ref2);\n case 15:\n return statistical.SMALL(ref1, ref2);\n case 16:\n return statistical.PERCENTILE.INC(ref1, ref2);\n case 17:\n return statistical.QUARTILE.INC(ref1, ref2);\n case 18:\n return statistical.PERCENTILE.EXC(ref1, ref2);\n case 19:\n return statistical.QUARTILE.EXC(ref1, ref2);\n }\n};\n\nexports.ARABIC = function(text) {\n if (text === undefined || text === null) {\n return 0;\n }\n if (text instanceof Error) {\n return text;\n }\n // Credits: Rafa? Kukawski\n if (!/^M*(?:D?C{0,3}|C[MD])(?:L?X{0,3}|X[CL])(?:V?I{0,3}|I[XV])$/.test(text)) {\n return error.value;\n }\n var r = 0;\n text.replace(/[MDLV]|C[MD]?|X[CL]?|I[XV]?/g, function(i) {\n r += {\n M: 1000,\n CM: 900,\n D: 500,\n CD: 400,\n C: 100,\n XC: 90,\n L: 50,\n XL: 40,\n X: 10,\n IX: 9,\n V: 5,\n IV: 4,\n I: 1\n }[i];\n });\n return r;\n};\n\nexports.ASIN = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n var result = Math.asin(number);\n\n if (isNaN(result)) {\n result = error.num;\n }\n\n return result;\n};\n\nexports.ASINH = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n return Math.log(number + Math.sqrt(number * number + 1));\n};\n\nexports.ATAN = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n return Math.atan(number);\n};\n\nexports.ATAN2 = function(number_x, number_y) {\n number_x = utils.parseNumber(number_x);\n number_y = utils.parseNumber(number_y);\n var anyError = utils.anyError(number_x, number_y);\n if (anyError) {\n return anyError;\n }\n return Math.atan2(number_x, number_y);\n};\n\nexports.ATANH = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n var result = Math.log((1 + number) / (1 - number)) / 2;\n\n if (isNaN(result)) {\n result = error.num;\n }\n\n return result;\n};\n\nexports.BASE = function(number, radix, min_length) {\n number = utils.parseNumber(number);\n radix = utils.parseNumber(radix);\n min_length = utils.parseNumber(min_length);\n var anyError = utils.anyError(number, radix, min_length);\n if (anyError) {\n return anyError;\n }\n if (radix === 0) {\n return error.num;\n }\n var result = number.toString(radix);\n return new Array(Math.max(min_length + 1 - result.length, 0)).join('0') + result;\n};\n\nexports.CEILING = function(number, significance, mode) {\n number = utils.parseNumber(number);\n significance = utils.parseNumber(significance);\n mode = utils.parseNumber(mode);\n var anyError = utils.anyError(number, significance, mode);\n if (anyError) {\n return anyError;\n }\n if (significance === 0) {\n return 0;\n }\n significance = Math.abs(significance);\n var precision = -Math.floor(Math.log(significance) / Math.log(10));\n if (number >= 0) {\n return exports.ROUND(Math.ceil(number / significance) * significance, precision);\n } else {\n if (mode === 0) {\n return -exports.ROUND(Math.floor(Math.abs(number) / significance) * significance, precision);\n } else {\n return -exports.ROUND(Math.ceil(Math.abs(number) / significance) * significance, precision);\n }\n }\n};\n\nexports.CEILING.MATH = exports.CEILING;\n\nexports.CEILING.PRECISE = exports.CEILING;\n\nexports.COMBIN = function(number, number_chosen) {\n number = utils.parseNumber(number);\n number_chosen = utils.parseNumber(number_chosen);\n var anyError = utils.anyError(number, number_chosen);\n if (anyError) {\n return anyError;\n }\n if (number < number_chosen) {\n return error.num;\n }\n return exports.FACT(number) / (exports.FACT(number_chosen) * exports.FACT(number - number_chosen));\n};\n\nexports.COMBINA = function(number, number_chosen) {\n number = utils.parseNumber(number);\n number_chosen = utils.parseNumber(number_chosen);\n var anyError = utils.anyError(number, number_chosen);\n if (anyError) {\n return anyError;\n }\n if (number < number_chosen) {\n return error.num;\n }\n return (number === 0 && number_chosen === 0) ? 1 : exports.COMBIN(number + number_chosen - 1, number - 1);\n};\n\nexports.COS = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n return Math.cos(number);\n};\n\nexports.COSH = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n return (Math.exp(number) + Math.exp(-number)) / 2;\n};\n\nexports.COT = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n if (number === 0) {\n return error.div0;\n }\n return 1 / Math.tan(number);\n};\n\nexports.COTH = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n if (number === 0) {\n return error.div0;\n }\n var e2 = Math.exp(2 * number);\n return (e2 + 1) / (e2 - 1);\n};\n\nexports.CSC = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n if (number === 0) {\n return error.div0;\n }\n return 1 / Math.sin(number);\n};\n\nexports.CSCH = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n if (number === 0) {\n return error.div0;\n }\n return 2 / (Math.exp(number) - Math.exp(-number));\n};\n\nexports.DECIMAL = function(number, radix) {\n if (arguments.length < 1) {\n return error.value;\n }\n\n number = utils.parseNumber(number);\n radix = utils.parseNumber(radix);\n var anyError = utils.anyError(number, radix);\n if (anyError) {\n return anyError;\n }\n if (radix === 0) {\n return error.num;\n }\n\n return parseInt(number, radix);\n};\n\nexports.DEGREES = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n return number * 180 / Math.PI;\n};\n\nexports.EVEN = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n return exports.CEILING(number, -2, -1);\n};\n\nexports.EXP = function(number) {\n if (arguments.length < 1) {\n return error.na;\n }\n if (arguments.length > 1) {\n return error.error;\n }\n\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n\n number = Math.exp(number);\n\n return number;\n};\n\nvar MEMOIZED_FACT = [];\nexports.FACT = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n var n = Math.floor(number);\n if (n === 0 || n === 1) {\n return 1;\n } else if (MEMOIZED_FACT[n] > 0) {\n return MEMOIZED_FACT[n];\n } else {\n MEMOIZED_FACT[n] = exports.FACT(n - 1) * n;\n return MEMOIZED_FACT[n];\n }\n};\n\nexports.FACTDOUBLE = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n var n = Math.floor(number);\n if (n <= 0) {\n return 1;\n } else {\n return n * exports.FACTDOUBLE(n - 2);\n }\n};\n\nexports.FLOOR = function(number, significance) {\n number = utils.parseNumber(number);\n significance = utils.parseNumber(significance);\n var anyError = utils.anyError(number, significance);\n if (anyError) {\n return anyError;\n }\n if (significance === 0) {\n return 0;\n }\n\n if (!(number >= 0 && significance > 0) && !(number <= 0 && significance < 0)) {\n return error.num;\n }\n\n significance = Math.abs(significance);\n var precision = -Math.floor(Math.log(significance) / Math.log(10));\n if (number >= 0) {\n return exports.ROUND(Math.floor(number / significance) * significance, precision);\n } else {\n return -exports.ROUND(Math.ceil(Math.abs(number) / significance), precision);\n }\n};\n\n//TODO: Verify\nexports.FLOOR.MATH = function(number, significance, mode) {\n if (significance instanceof Error) {\n return significance;\n }\n significance = (significance === undefined) ? 0 : significance;\n\n number = utils.parseNumber(number);\n significance = utils.parseNumber(significance);\n mode = utils.parseNumber(mode);\n var anyError = utils.anyError(number, significance, mode);\n if (anyError) {\n return anyError;\n }\n if (significance === 0) {\n return 0;\n }\n\n significance = significance ? Math.abs(significance) : 1;\n var precision = -Math.floor(Math.log(significance) / Math.log(10));\n if (number >= 0) {\n return exports.ROUND(Math.floor(number / significance) * significance, precision);\n } else if (mode === 0 || mode === undefined) {\n return -exports.ROUND(Math.ceil(Math.abs(number) / significance) * significance, precision);\n }\n return -exports.ROUND(Math.floor(Math.abs(number) / significance) * significance, precision);\n};\n\n// Deprecated\nexports.FLOOR.PRECISE = exports.FLOOR.MATH;\n\n// adapted http://rosettacode.org/wiki/Greatest_common_divisor#JavaScript\nexports.GCD = function() {\n var range = utils.parseNumberArray(utils.flatten(arguments));\n if (range instanceof Error) {\n return range;\n }\n var n = range.length;\n var r0 = range[0];\n var x = r0 < 0 ? -r0 : r0;\n for (var i = 1; i < n; i++) {\n var ri = range[i];\n var y = ri < 0 ? -ri : ri;\n while (x && y) {\n if (x > y) {\n x %= y;\n } else {\n y %= x;\n }\n }\n x += y;\n }\n return x;\n};\n\n\nexports.INT = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n return Math.floor(number);\n};\n\n//TODO: verify\nexports.ISO = {\n CEILING: exports.CEILING\n};\n\nexports.LCM = function() {\n // Credits: Jonas Raoni Soares Silva\n var o = utils.parseNumberArray(utils.flatten(arguments));\n if (o instanceof Error) {\n return o;\n }\n for (var i, j, n, d, r = 1;\n (n = o.pop()) !== undefined;) {\n if (n === 0) {\n return 0;\n }\n while (n > 1) {\n if (n % 2) {\n for (i = 3, j = Math.floor(Math.sqrt(n)); i <= j && n % i; i += 2) {\n //empty\n }\n d = (i <= j) ? i : n;\n } else {\n d = 2;\n }\n for (n /= d, r *= d, i = o.length; i;\n (o[--i] % d) === 0 && (o[i] /= d) === 1 && o.splice(i, 1)) {\n //empty\n }\n }\n }\n return r;\n};\n\nexports.LN = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n if (number === 0) {\n return error.num;\n }\n return Math.log(number);\n};\n\nexports.LN10 = function() {\n return Math.log(10);\n};\n\nexports.LN2 = function() {\n return Math.log(2);\n};\n\nexports.LOG10E = function() {\n return Math.LOG10E;\n};\n\nexports.LOG2E = function() {\n return Math.LOG2E;\n};\n\nexports.LOG = function(number, base) {\n number = utils.parseNumber(number);\n base = utils.parseNumber(base);\n var anyError = utils.anyError(number, base);\n if (anyError) {\n return anyError;\n }\n if (number === 0 || base === 0) {\n return error.num;\n }\n return Math.log(number) / Math.log(base);\n};\n\nexports.LOG10 = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n if (number === 0) {\n return error.num;\n }\n return Math.log(number) / Math.log(10);\n};\n\nexports.MOD = function(dividend, divisor) {\n dividend = utils.parseNumber(dividend);\n divisor = utils.parseNumber(divisor);\n var anyError = utils.anyError(dividend, divisor);\n if (anyError) {\n return anyError;\n }\n if (divisor === 0) {\n return error.div0;\n }\n var modulus = Math.abs(dividend % divisor);\n modulus = dividend < 0 ? divisor - modulus : modulus;\n return (divisor > 0) ? modulus : -modulus;\n};\n\nexports.MROUND = function(number, multiple) {\n number = utils.parseNumber(number);\n multiple = utils.parseNumber(multiple);\n var anyError = utils.anyError(number, multiple);\n if (anyError) {\n return anyError;\n }\n if (number * multiple === 0) {\n return 0;\n }\n if (number * multiple < 0) {\n return error.num;\n }\n\n return Math.round(number / multiple) * multiple;\n};\n\nexports.MULTINOMIAL = function() {\n var args = utils.parseNumberArray(utils.flatten(arguments));\n if (args instanceof Error) {\n return args;\n }\n var sum = 0;\n var divisor = 1;\n for (var i = 0; i < args.length; i++) {\n sum += args[i];\n divisor *= exports.FACT(args[i]);\n }\n return exports.FACT(sum) / divisor;\n};\n\nexports.ODD = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n var temp = Math.ceil(Math.abs(number));\n temp = (temp & 1) ? temp : temp + 1;\n return (number >= 0) ? temp : -temp;\n};\n\nexports.PI = function() {\n return Math.PI;\n};\n\nexports.E = function() {\n return Math.E;\n};\n\nexports.POWER = function(number, power) {\n number = utils.parseNumber(number);\n power = utils.parseNumber(power);\n var anyError = utils.anyError(number, power);\n if (anyError) {\n return anyError;\n }\n if (number === 0 && power === 0) {\n return error.num;\n }\n var result = Math.pow(number, power);\n if (isNaN(result)) {\n return error.num;\n }\n\n return result;\n};\n\nexports.PRODUCT = function() {\n var flatArguments = utils.flatten(arguments);\n var flatArgumentsDefined = flatArguments.filter(function (arg) { return arg !== undefined && arg !== null; });\n if (flatArgumentsDefined.length === 0) {\n return 0;\n }\n var args = utils.parseNumberArray(flatArgumentsDefined);\n if (args instanceof Error) {\n return args;\n }\n var result = 1;\n for (var i = 0; i < args.length; i++) {\n result *= args[i];\n }\n return result;\n};\n\nexports.QUOTIENT = function(numerator, denominator) {\n numerator = utils.parseNumber(numerator);\n denominator = utils.parseNumber(denominator);\n var anyError = utils.anyError(numerator, denominator);\n if (anyError) {\n return anyError;\n }\n return parseInt(numerator / denominator, 10);\n};\n\nexports.RADIANS = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n return number * Math.PI / 180;\n};\n\nexports.RAND = function() {\n return Math.random();\n};\n\nexports.RANDBETWEEN = function(bottom, top) {\n bottom = utils.parseNumber(bottom);\n top = utils.parseNumber(top);\n var anyError = utils.anyError(bottom, top);\n if (anyError) {\n return anyError;\n }\n // Creative Commons Attribution 3.0 License\n // Copyright (c) 2012 eqcode\n return bottom + Math.ceil((top - bottom + 1) * Math.random()) - 1;\n};\n\n// TODO\nexports.ROMAN = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n // The MIT License\n // Copyright (c) 2008 Steven Levithan\n var digits = String(number).split('');\n var key = ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM', '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC', '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'];\n var roman = '';\n var i = 3;\n while (i--) {\n roman = (key[+digits.pop() + (i * 10)] || '') + roman;\n }\n return new Array(+digits.join('') + 1).join('M') + roman;\n};\n\nexports.ROUND = function(number, digits) {\n number = utils.parseNumber(number);\n digits = utils.parseNumber(digits);\n var anyError = utils.anyError(number, digits);\n if (anyError) {\n return anyError;\n }\n return Math.round(number * Math.pow(10, digits)) / Math.pow(10, digits);\n};\n\nexports.ROUNDDOWN = function(number, digits) {\n number = utils.parseNumber(number);\n digits = utils.parseNumber(digits);\n var anyError = utils.anyError(number, digits);\n if (anyError) {\n return anyError;\n }\n var sign = (number > 0) ? 1 : -1;\n return sign * (Math.floor(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits);\n};\n\nexports.ROUNDUP = function(number, digits) {\n number = utils.parseNumber(number);\n digits = utils.parseNumber(digits);\n var anyError = utils.anyError(number, digits);\n if (anyError) {\n return anyError;\n }\n var sign = (number > 0) ? 1 : -1;\n return sign * (Math.ceil(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits);\n};\n\nexports.SEC = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n return 1 / Math.cos(number);\n};\n\nexports.SECH = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n return 2 / (Math.exp(number) + Math.exp(-number));\n};\n\nexports.SERIESSUM = function(x, n, m, coefficients) {\n x = utils.parseNumber(x);\n n = utils.parseNumber(n);\n m = utils.parseNumber(m);\n coefficients = utils.parseNumberArray(coefficients);\n if (utils.anyIsError(x, n, m, coefficients)) {\n return error.value;\n }\n var result = coefficients[0] * Math.pow(x, n);\n for (var i = 1; i < coefficients.length; i++) {\n result += coefficients[i] * Math.pow(x, n + i * m);\n }\n return result;\n};\n\nexports.SIGN = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n if (number < 0) {\n return -1;\n } else if (number === 0) {\n return 0;\n } else {\n return 1;\n }\n};\n\nexports.SIN = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n return Math.sin(number);\n};\n\nexports.SINH = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n return (Math.exp(number) - Math.exp(-number)) / 2;\n};\n\nexports.SQRT = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n if (number < 0) {\n return error.num;\n }\n return Math.sqrt(number);\n};\n\nexports.SQRTPI = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n return Math.sqrt(number * Math.PI);\n};\n\nexports.SQRT1_2 = function() {\n return 1 / Math.sqrt(2);\n};\n\nexports.SQRT2 = function() {\n return Math.sqrt(2);\n};\n\nexports.SUBTOTAL = function(function_code, ref1) {\n function_code = utils.parseNumber(function_code);\n if (function_code instanceof Error) {\n return function_code;\n }\n switch (function_code) {\n case 1:\n return statistical.AVERAGE(ref1);\n case 2:\n return statistical.COUNT(ref1);\n case 3:\n return statistical.COUNTA(ref1);\n case 4:\n return statistical.MAX(ref1);\n case 5:\n return statistical.MIN(ref1);\n case 6:\n return exports.PRODUCT(ref1);\n case 7:\n return statistical.STDEV.S(ref1);\n case 8:\n return statistical.STDEV.P(ref1);\n case 9:\n return exports.SUM(ref1);\n case 10:\n return statistical.VAR.S(ref1);\n case 11:\n return statistical.VAR.P(ref1);\n // no hidden values for us\n case 101:\n return statistical.AVERAGE(ref1);\n case 102:\n return statistical.COUNT(ref1);\n case 103:\n return statistical.COUNTA(ref1);\n case 104:\n return statistical.MAX(ref1);\n case 105:\n return statistical.MIN(ref1);\n case 106:\n return exports.PRODUCT(ref1);\n case 107:\n return statistical.STDEV.S(ref1);\n case 108:\n return statistical.STDEV.P(ref1);\n case 109:\n return exports.SUM(ref1);\n case 110:\n return statistical.VAR.S(ref1);\n case 111:\n return statistical.VAR.P(ref1);\n\n }\n};\n\nexports.ADD = function (num1, num2) {\n if (arguments.length !== 2) {\n return error.na;\n }\n\n num1 = utils.parseNumber(num1);\n num2 = utils.parseNumber(num2);\n var anyError = utils.anyError(num1, num2);\n if (anyError) {\n return anyError;\n }\n\n return num1 + num2;\n};\n\nexports.MINUS = function (num1, num2) {\n if (arguments.length !== 2) {\n return error.na;\n }\n\n num1 = utils.parseNumber(num1);\n num2 = utils.parseNumber(num2);\n var anyError = utils.anyError(num1, num2);\n if (anyError) {\n return anyError;\n }\n\n return num1 - num2;\n};\n\nexports.DIVIDE = function (dividend, divisor) {\n if (arguments.length !== 2) {\n return error.na;\n }\n\n dividend = utils.parseNumber(dividend);\n divisor = utils.parseNumber(divisor);\n var anyError = utils.anyError(dividend, divisor);\n if (anyError) {\n return anyError;\n }\n\n if (divisor === 0) {\n return error.div0;\n }\n\n return dividend / divisor;\n};\n\nexports.MULTIPLY = function (factor1, factor2) {\n if (arguments.length !== 2) {\n return error.na;\n }\n\n factor1 = utils.parseNumber(factor1);\n factor2 = utils.parseNumber(factor2);\n var anyError = utils.anyError(factor1, factor2);\n if (anyError) {\n return anyError;\n }\n\n return factor1 * factor2;\n};\n\nexports.GT = function (num1, num2) {\n if (arguments.length !== 2) {\n return error.na;\n }\n if (num1 instanceof Error) {\n return num1;\n }\n if (num2 instanceof Error) {\n return num2;\n }\n\n if (utils.anyIsString(num1, num2)) {\n num1 = utils.parseString(num1);\n num2 = utils.parseString(num2);\n } else {\n num1 = utils.parseNumber(num1);\n num2 = utils.parseNumber(num2);\n }\n var anyError = utils.anyError(num1, num2);\n if (anyError) {\n return anyError;\n }\n\n return num1 > num2;\n};\n\nexports.GTE = function (num1, num2) {\n if (arguments.length !== 2) {\n return error.na;\n }\n\n if (utils.anyIsString(num1, num2)) {\n num1 = utils.parseString(num1);\n num2 = utils.parseString(num2);\n } else {\n num1 = utils.parseNumber(num1);\n num2 = utils.parseNumber(num2);\n }\n var anyError = utils.anyError(num1, num2);\n if (anyError) {\n return anyError;\n }\n\n return num1 >= num2;\n};\n\nexports.LT = function (num1, num2) {\n if (arguments.length !== 2) {\n return error.na;\n }\n\n if (utils.anyIsString(num1, num2)) {\n num1 = utils.parseString(num1);\n num2 = utils.parseString(num2);\n } else {\n num1 = utils.parseNumber(num1);\n num2 = utils.parseNumber(num2);\n }\n var anyError = utils.anyError(num1, num2);\n if (anyError) {\n return anyError;\n }\n\n return num1 < num2;\n};\n\n\nexports.LTE = function (num1, num2) {\n if (arguments.length !== 2) {\n return error.na;\n }\n\n if (utils.anyIsString(num1, num2)) {\n num1 = utils.parseString(num1);\n num2 = utils.parseString(num2);\n } else {\n num1 = utils.parseNumber(num1);\n num2 = utils.parseNumber(num2);\n }\n var anyError = utils.anyError(num1, num2);\n if (anyError) {\n return anyError;\n }\n\n return num1 <= num2;\n};\n\nexports.EQ = function (value1, value2) {\n if (arguments.length !== 2) {\n return error.na;\n }\n if (value1 instanceof Error) {\n return value1;\n }\n if (value2 instanceof Error) {\n return value2;\n }\n if (value1 === null) {\n value1 = undefined;\n }\n if (value2 === null) {\n value2 = undefined;\n }\n\n return value1 === value2;\n};\n\nexports.NE = function (value1, value2) {\n if (arguments.length !== 2) {\n return error.na;\n }\n if (value1 instanceof Error) {\n return value1;\n }\n if (value2 instanceof Error) {\n return value2;\n }\n if (value1 === null) {\n value1 = undefined;\n }\n if (value2 === null) {\n value2 = undefined;\n }\n\n return value1 !== value2;\n};\n\nexports.POW = function (base, exponent) {\n if (arguments.length !== 2) {\n return error.na;\n }\n\n return exports.POWER(base, exponent);\n};\n\nexports.SUM = function() {\n var result = 0;\n\n utils.arrayEach(utils.argsToArray(arguments), function(value) {\n if (result instanceof Error) {\n return false;\n } else if (value instanceof Error) {\n result = value;\n } else if (typeof value === 'number') {\n result += value;\n\n } else if (typeof value === 'string') {\n var parsed = parseFloat(value);\n\n !isNaN(parsed) && (result += parsed);\n\n } else if (Array.isArray(value)) {\n var inner_result = exports.SUM.apply(null, value);\n if (inner_result instanceof Error) {\n result = inner_result;\n } else {\n result += inner_result;\n }\n }\n });\n\n return result;\n};\n\nexports.SUMIF = function (range, criteria, sumRange) {\n range = utils.flatten(range);\n if (sumRange) {\n sumRange = utils.flatten(sumRange);\n } else {\n sumRange = range;\n }\n if (range instanceof Error) {\n return range;\n }\n if (criteria === undefined || criteria === null || criteria instanceof Error) {\n return 0;\n }\n var result = 0;\n var isWildcard = criteria === '*';\n var tokenizedCriteria = isWildcard ? null : evalExpression.parse(criteria + '');\n for (var i = 0; i < range.length; i++) {\n var value = range[i];\n var sumValue = sumRange[i];\n\n if (isWildcard) {\n result += value;\n } else {\n var tokens = [evalExpression.createToken(value, evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria);\n\n result += evalExpression.compute(tokens) ? sumValue : 0;\n }\n }\n\n return result;\n};\n\nexports.SUMIFS = function() {\n var args = utils.argsToArray(arguments);\n var range = utils.parseNumberArray(utils.flatten(args.shift()));\n\n if (range instanceof Error) {\n return range;\n }\n\n var criterias = args;\n var criteriaLength = criterias.length / 2;\n\n for (var i = 0; i < criteriaLength; i++) {\n criterias[i * 2] = utils.flatten(criterias[i * 2]);\n }\n\n var result = 0;\n\n for (var i = 0; i < range.length; i++) {\n var isMeetCondition = false;\n\n for (var j = 0; j < criteriaLength; j++) {\n var valueToTest = criterias[j * 2][i];\n var criteria = criterias[j * 2 + 1];\n var isWildcard = criteria === void 0 || criteria === '*';\n var computedResult = false;\n\n if (isWildcard) {\n computedResult = true;\n } else {\n var tokenizedCriteria = evalExpression.parse(criteria + '');\n var tokens = [evalExpression.createToken(valueToTest, evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria);\n\n computedResult = evalExpression.compute(tokens);\n }\n\n // Criterias are calculated as AND so any `false` breakes the loop as unmeet condition\n if (!computedResult) {\n isMeetCondition = false;\n break;\n }\n\n isMeetCondition = true;\n }\n\n if (isMeetCondition) {\n result += range[i];\n }\n }\n\n return result;\n};\n\nexports.SUMPRODUCT = function() {\n if (!arguments || arguments.length === 0) {\n return error.value;\n }\n var arrays = arguments.length + 1;\n var result = 0;\n var product;\n var k;\n var _i;\n var _ij;\n for (var i = 0; i < arguments[0].length; i++) {\n if (!(arguments[0][i] instanceof Array)) {\n product = 1;\n for (k = 1; k < arrays; k++) {\n var _i_arg = arguments[k - 1][i];\n if (_i_arg instanceof Error) {\n return _i_arg;\n }\n _i = utils.parseNumber(_i_arg);\n if (_i instanceof Error) {\n return _i;\n }\n product *= _i;\n }\n result += product;\n } else {\n for (var j = 0; j < arguments[0][i].length; j++) {\n product = 1;\n for (k = 1; k < arrays; k++) {\n var _ij_arg = arguments[k - 1][i][j];\n if (_ij_arg instanceof Error) {\n return _ij_arg;\n }\n _ij = utils.parseNumber(_ij_arg);\n if (_ij instanceof Error) {\n return _ij;\n }\n product *= _ij;\n }\n result += product;\n }\n }\n }\n return result;\n};\n\nexports.SUMSQ = function() {\n var numbers = utils.parseNumberArray(utils.flatten(arguments));\n if (numbers instanceof Error) {\n return numbers;\n }\n var result = 0;\n var length = numbers.length;\n for (var i = 0; i < length; i++) {\n result += (information.ISNUMBER(numbers[i])) ? numbers[i] * numbers[i] : 0;\n }\n return result;\n};\n\nexports.SUMX2MY2 = function(array_x, array_y) {\n array_x = utils.parseNumberArray(utils.flatten(array_x));\n array_y = utils.parseNumberArray(utils.flatten(array_y));\n if (utils.anyIsError(array_x, array_y)) {\n return error.value;\n }\n var result = 0;\n for (var i = 0; i < array_x.length; i++) {\n result += array_x[i] * array_x[i] - array_y[i] * array_y[i];\n }\n return result;\n};\n\nexports.SUMX2PY2 = function(array_x, array_y) {\n array_x = utils.parseNumberArray(utils.flatten(array_x));\n array_y = utils.parseNumberArray(utils.flatten(array_y));\n if (utils.anyIsError(array_x, array_y)) {\n return error.value;\n }\n var result = 0;\n array_x = utils.parseNumberArray(utils.flatten(array_x));\n array_y = utils.parseNumberArray(utils.flatten(array_y));\n for (var i = 0; i < array_x.length; i++) {\n result += array_x[i] * array_x[i] + array_y[i] * array_y[i];\n }\n return result;\n};\n\nexports.SUMXMY2 = function(array_x, array_y) {\n array_x = utils.parseNumberArray(utils.flatten(array_x));\n array_y = utils.parseNumberArray(utils.flatten(array_y));\n if (utils.anyIsError(array_x, array_y)) {\n return error.value;\n }\n var result = 0;\n array_x = utils.flatten(array_x);\n array_y = utils.flatten(array_y);\n for (var i = 0; i < array_x.length; i++) {\n result += Math.pow(array_x[i] - array_y[i], 2);\n }\n return result;\n};\n\nexports.TAN = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n return Math.tan(number);\n};\n\nexports.TANH = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n var e2 = Math.exp(2 * number);\n return (e2 - 1) / (e2 + 1);\n};\n\nexports.TRUNC = function(number, digits) {\n number = utils.parseNumber(number);\n digits = utils.parseNumber(digits);\n var anyError = utils.anyError(number, digits);\n if (anyError) {\n return anyError;\n }\n var sign = (number > 0) ? 1 : -1;\n return sign * (Math.floor(Math.abs(number) * Math.pow(10, digits))) / Math.pow(10, digits);\n};\n","var utils = require('./utils/common');\nvar error = require('./utils/error');\n\nexports.UNIQUE = function () {\n var result = [];\n for (var i = 0; i < arguments.length; ++i) {\n var hasElement = false;\n var element = arguments[i];\n\n // Check if we've already seen this element.\n for (var j = 0; j < result.length; ++j) {\n hasElement = result[j] === element;\n if (hasElement) { break; }\n }\n\n // If we did not find it, add it to the result.\n if (!hasElement) {\n result.push(element);\n }\n }\n return result;\n};\n\nexports.FLATTEN = utils.flatten;\n\nexports.ARGS2ARRAY = function () {\n return Array.prototype.slice.call(arguments, 0);\n};\n\nexports.REFERENCE = function (context, reference) {\n if (!arguments.length) {\n return error.error;\n }\n try {\n var path = reference.split('.');\n var result = context;\n for (var i = 0; i < path.length; ++i) {\n var step = path[i];\n if (step[step.length - 1] === ']') {\n var opening = step.indexOf('[');\n var index = step.substring(opening + 1, step.length - 1);\n result = result[step.substring(0, opening)][index];\n } else {\n result = result[step];\n }\n }\n return result;\n } catch (error) {}\n};\n\nexports.JOIN = function (array, separator) {\n return array.join(separator);\n};\n\nexports.NUMBERS = function () {\n var possibleNumbers = utils.flatten(arguments);\n return possibleNumbers.filter(function (el) {\n return typeof el === 'number';\n });\n};\n","var mathTrig = require('./math-trig');\nvar text = require('./text');\nvar jStat = require('jstat');\nvar utils = require('./utils/common');\nvar evalExpression = require('./utils/criteria-eval');\nvar error = require('./utils/error');\nvar misc = require('./miscellaneous');\n\nvar SQRT2PI = 2.5066282746310002;\n\nexports.AVEDEV = function() {\n var flatArguments = utils.flatten(arguments);\n var flatArgumentsDefined = flatArguments.filter(utils.isDefined);\n if (flatArgumentsDefined.length === 0) {\n return error.num;\n }\n var range = utils.parseNumberArray(flatArgumentsDefined);\n if (range instanceof Error) {\n return range;\n }\n return jStat.sum(jStat(range).subtract(jStat.mean(range)).abs()[0]) / range.length;\n};\n\nexports.AVERAGE = function() {\n var flatArguments = utils.flatten(arguments);\n var flatArgumentsDefined = flatArguments.filter(utils.isDefined);\n if (flatArgumentsDefined.length === 0) {\n return error.div0;\n }\n var someError = utils.anyError.apply(undefined, flatArgumentsDefined);\n if (someError) {\n return someError;\n }\n var range = utils.numbers(flatArgumentsDefined);\n var n = range.length;\n var sum = 0;\n var count = 0;\n var result;\n\n for (var i = 0; i < n; i++) {\n sum += range[i];\n count += 1;\n }\n result = sum / count;\n\n if (isNaN(result)) {\n result = error.num;\n }\n\n return result;\n};\n\nexports.AVERAGEA = function() {\n var flatArguments = utils.flatten(arguments);\n var flatArgumentsDefined = flatArguments.filter(utils.isDefined);\n if (flatArgumentsDefined.length === 0) {\n return error.div0;\n }\n var someError = utils.anyError.apply(undefined, flatArgumentsDefined);\n if (someError) {\n return someError;\n }\n var range = flatArgumentsDefined;\n var n = range.length;\n var sum = 0;\n var count = 0;\n var result;\n for (var i = 0; i < n; i++) {\n var el = range[i];\n if (typeof el === 'number') {\n sum += el;\n }\n if (el === true) {\n sum++;\n }\n if (el !== null) {\n count++;\n }\n }\n result = sum / count;\n\n if (isNaN(result)) {\n result = error.num;\n }\n\n return result;\n};\n\nexports.AVERAGEIF = function(range, criteria, average_range) {\n if (arguments.length <= 1) {\n return error.na;\n }\n average_range = average_range || range;\n var flatAverageRange = utils.flatten(average_range);\n var flatAverageRangeDefined = flatAverageRange.filter(utils.isDefined);\n average_range = utils.parseNumberArray(flatAverageRangeDefined);\n\n range = utils.flatten(range);\n\n if (average_range instanceof Error) {\n return average_range;\n }\n var average_count = 0;\n var result = 0;\n var isWildcard = criteria === void 0 || criteria === '*';\n var tokenizedCriteria = isWildcard ? null : evalExpression.parse(criteria + '');\n\n for (var i = 0; i < range.length; i++) {\n var value = range[i];\n\n if (isWildcard) {\n result += average_range[i];\n average_count++;\n } else {\n var tokens = [evalExpression.createToken(value, evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria);\n\n if (evalExpression.compute(tokens)) {\n result += average_range[i];\n average_count++;\n }\n }\n }\n\n return result / average_count;\n};\n\nexports.AVERAGEIFS = function() {\n // Does not work with multi dimensional ranges yet!\n // http://office.microsoft.com/en-001/excel-help/averageifs-function-HA010047493.aspx\n var args = utils.argsToArray(arguments);\n var criteriaLength = (args.length - 1) / 2;\n var range = utils.flatten(args[0]);\n var count = 0;\n var result = 0;\n\n for (var i = 0; i < range.length; i++) {\n var isMeetCondition = false;\n\n for (var j = 0; j < criteriaLength; j++) {\n var value = args[2 * j + 1][i];\n var criteria = args[2 * j + 2];\n var isWildcard = criteria === void 0 || criteria === '*';\n var computedResult = false;\n\n if (isWildcard) {\n computedResult = true;\n } else {\n var tokenizedCriteria = evalExpression.parse(criteria + '');\n var tokens = [evalExpression.createToken(value, evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria);\n\n computedResult = evalExpression.compute(tokens);\n }\n\n // Criterias are calculated as AND so any `false` breakes the loop as unmeet condition\n if (!computedResult) {\n isMeetCondition = false;\n break;\n }\n\n isMeetCondition = true;\n }\n\n if (isMeetCondition) {\n result += range[i];\n count++;\n }\n }\n\n var average = result / count;\n\n if (isNaN(average)) {\n return 0;\n } else {\n return average;\n }\n};\n\nexports.BETA = {};\n\nexports.BETA.DIST = function(x, alpha, beta, cumulative, A, B) {\n if (arguments.length < 4) {\n return error.value;\n }\n\n A = (A === undefined) ? 0 : A;\n B = (B === undefined) ? 1 : B;\n\n x = utils.parseNumber(x);\n alpha = utils.parseNumber(alpha);\n beta = utils.parseNumber(beta);\n A = utils.parseNumber(A);\n B = utils.parseNumber(B);\n if (utils.anyIsError(x, alpha, beta, A, B)) {\n return error.value;\n }\n\n x = (x - A) / (B - A);\n return (cumulative) ? jStat.beta.cdf(x, alpha, beta) : jStat.beta.pdf(x, alpha, beta);\n};\n\nexports.BETA.INV = function(probability, alpha, beta, A, B) {\n A = (A === undefined) ? 0 : A;\n B = (B === undefined) ? 1 : B;\n\n probability = utils.parseNumber(probability);\n alpha = utils.parseNumber(alpha);\n beta = utils.parseNumber(beta);\n A = utils.parseNumber(A);\n B = utils.parseNumber(B);\n if (utils.anyIsError(probability, alpha, beta, A, B)) {\n return error.value;\n }\n\n return jStat.beta.inv(probability, alpha, beta) * (B - A) + A;\n};\n\nexports.BINOM = {};\n\nexports.BINOM.DIST = function(successes, trials, probability, cumulative) {\n successes = utils.parseNumber(successes);\n trials = utils.parseNumber(trials);\n probability = utils.parseNumber(probability);\n cumulative = utils.parseNumber(cumulative);\n if (utils.anyIsError(successes, trials, probability, cumulative)) {\n return error.value;\n }\n return (cumulative) ? jStat.binomial.cdf(successes, trials, probability) : jStat.binomial.pdf(successes, trials, probability);\n};\n\nexports.BINOM.DIST.RANGE = function(trials, probability, successes, successes2) {\n successes2 = (successes2 === undefined) ? successes : successes2;\n\n trials = utils.parseNumber(trials);\n probability = utils.parseNumber(probability);\n successes = utils.parseNumber(successes);\n successes2 = utils.parseNumber(successes2);\n if (utils.anyIsError(trials, probability, successes, successes2)) {\n return error.value;\n }\n\n var result = 0;\n for (var i = successes; i <= successes2; i++) {\n result += mathTrig.COMBIN(trials, i) * Math.pow(probability, i) * Math.pow(1 - probability, trials - i);\n }\n return result;\n};\n\nexports.BINOM.INV = function(trials, probability, alpha) {\n trials = utils.parseNumber(trials);\n probability = utils.parseNumber(probability);\n alpha = utils.parseNumber(alpha);\n if (utils.anyIsError(trials, probability, alpha)) {\n return error.value;\n }\n\n var x = 0;\n while (x <= trials) {\n if (jStat.binomial.cdf(x, trials, probability) >= alpha) {\n return x;\n }\n x++;\n }\n};\n\nexports.CHISQ = {};\n\nexports.CHISQ.DIST = function(x, k, cumulative) {\n x = utils.parseNumber(x);\n k = utils.parseNumber(k);\n if (utils.anyIsError(x, k)) {\n return error.value;\n }\n\n return (cumulative) ? jStat.chisquare.cdf(x, k) : jStat.chisquare.pdf(x, k);\n};\n\nexports.CHISQ.DIST.RT = function(x, k) {\n if (!x | !k) {\n return error.na;\n }\n\n if (x < 1 || k > Math.pow(10, 10)) {\n return error.num;\n }\n\n if ((typeof x !== 'number') || (typeof k !== 'number')) {\n return error.value;\n }\n\n return 1 - jStat.chisquare.cdf(x, k);\n};\n\nexports.CHISQ.INV = function(probability, k) {\n probability = utils.parseNumber(probability);\n k = utils.parseNumber(k);\n if (utils.anyIsError(probability, k)) {\n return error.value;\n }\n return jStat.chisquare.inv(probability, k);\n};\n\nexports.CHISQ.INV.RT = function(p, k) {\n if (!p | !k) {\n return error.na;\n }\n\n if (p < 0 || p > 1 || k < 1 || k > Math.pow(10, 10)) {\n return error.num;\n }\n\n if ((typeof p !== 'number') || (typeof k !== 'number')) {\n return error.value;\n }\n\n return jStat.chisquare.inv(1.0 - p, k);\n};\n\nexports.CHISQ.TEST = function(observed, expected) {\n if (arguments.length !== 2) {\n return error.na;\n }\n\n if ((!(observed instanceof Array)) || (!(expected instanceof Array))) {\n return error.value;\n }\n\n if (observed.length !== expected.length) {\n return error.value;\n }\n\n if (observed[0] && expected[0] &&\n observed[0].length !== expected[0].length) {\n return error.value;\n }\n\n var row = observed.length;\n var tmp, i, j;\n\n // Convert single-dimension array into two-dimension array\n for (i = 0; i < row; i ++) {\n if (!(observed[i] instanceof Array)) {\n tmp = observed[i];\n observed[i] = [];\n observed[i].push(tmp);\n }\n if (!(expected[i] instanceof Array)) {\n tmp = expected[i];\n expected[i] = [];\n expected[i].push(tmp);\n }\n }\n\n var col = observed[0].length;\n var dof = (col === 1) ? row-1 : (row-1)*(col-1);\n var xsqr = 0;\n var Pi =Math.PI;\n\n for (i = 0; i < row; i ++) {\n for (j = 0; j < col; j ++) {\n xsqr += Math.pow((observed[i][j] - expected[i][j]), 2) / expected[i][j];\n }\n }\n\n // Get independency by X square and its degree of freedom\n function ChiSq(xsqr, dof) {\n var p = Math.exp(-0.5 * xsqr);\n if((dof%2) === 1) {\n p = p * Math.sqrt(2 * xsqr/Pi);\n }\n var k = dof;\n while(k >= 2) {\n p = p * xsqr/k;\n k = k - 2;\n }\n var t = p;\n var a = dof;\n while (t > 0.0000000001*p) {\n a = a + 2;\n t = t * xsqr/a;\n p = p + t;\n }\n return 1-p;\n }\n\n return Math.round(ChiSq(xsqr, dof) * 1000000) / 1000000;\n};\n\nexports.COLUMN = function(matrix, index) {\n if (arguments.length !== 2) {\n return error.na;\n }\n\n if (index < 0) {\n return error.num;\n }\n\n if (!(matrix instanceof Array) || (typeof index !== 'number')) {\n return error.value;\n }\n\n if (matrix.length === 0) {\n return undefined;\n }\n\n return jStat.col(matrix, index);\n};\n\nexports.COLUMNS = function(matrix) {\n if (arguments.length !== 1) {\n return error.na;\n }\n\n if (!(matrix instanceof Array)) {\n return error.value;\n }\n\n if (matrix.length === 0) {\n return 0;\n }\n\n return jStat.cols(matrix);\n};\n\nexports.CONFIDENCE = {};\n\nexports.CONFIDENCE.NORM = function(alpha, sd, n) {\n alpha = utils.parseNumber(alpha);\n sd = utils.parseNumber(sd);\n n = utils.parseNumber(n);\n if (utils.anyIsError(alpha, sd, n)) {\n return error.value;\n }\n return jStat.normalci(1, alpha, sd, n)[1] - 1;\n};\n\nexports.CONFIDENCE.T = function(alpha, sd, n) {\n alpha = utils.parseNumber(alpha);\n sd = utils.parseNumber(sd);\n n = utils.parseNumber(n);\n if (utils.anyIsError(alpha, sd, n)) {\n return error.value;\n }\n return jStat.tci(1, alpha, sd, n)[1] - 1;\n};\n\nexports.CORREL = function(array1, array2) {\n array1 = utils.parseNumberArray(utils.flatten(array1));\n array2 = utils.parseNumberArray(utils.flatten(array2));\n if (utils.anyIsError(array1, array2)) {\n return error.value;\n }\n return jStat.corrcoeff(array1, array2);\n};\n\nexports.COUNT = function() {\n var flatArguments = utils.flatten(arguments);\n return utils.numbers(flatArguments).length;\n};\n\nexports.COUNTA = function() {\n var flatArguments = utils.flatten(arguments);\n return flatArguments.length - exports.COUNTBLANK(flatArguments);\n};\n\nexports.COUNTIN = function (range, value) {\n var result = 0;\n\n range = utils.flatten(range);\n\n for (var i = 0; i < range.length; i++) {\n if (range[i] === value) {\n result++;\n }\n }\n return result;\n};\n\n\nexports.COUNTBLANK = function() {\n var range = utils.flatten(arguments);\n var blanks = 0;\n var element;\n for (var i = 0; i < range.length; i++) {\n element = range[i];\n if (element === undefined || element === null || element === '') {\n blanks++;\n }\n }\n return blanks;\n};\n\nexports.COUNTIF = function(range, criteria) {\n range = utils.flatten(range);\n\n var isWildcard = criteria === void 0 || criteria === '*';\n\n if (isWildcard) {\n return range.length;\n }\n\n var matches = 0;\n var tokenizedCriteria = evalExpression.parse(criteria + '');\n\n for (var i = 0; i < range.length; i++) {\n var value = range[i];\n var tokens = [evalExpression.createToken(value, evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria);\n\n if (evalExpression.compute(tokens)) {\n matches++;\n }\n }\n\n return matches;\n};\n\nexports.COUNTIFS = function() {\n var args = utils.argsToArray(arguments);\n var results = new Array(utils.flatten(args[0]).length);\n\n for (var i = 0; i < results.length; i++) {\n results[i] = true;\n }\n for (i = 0; i < args.length; i += 2) {\n var range = utils.flatten(args[i]);\n var criteria = args[i + 1];\n var isWildcard = criteria === void 0 || criteria === '*';\n\n if (!isWildcard) {\n var tokenizedCriteria = evalExpression.parse(criteria + '');\n\n for (var j = 0; j < range.length; j++) {\n var value = range[j];\n var tokens = [evalExpression.createToken(value, evalExpression.TOKEN_TYPE_LITERAL)].concat(tokenizedCriteria);\n\n results[j] = results[j] && evalExpression.compute(tokens);\n }\n }\n }\n var result = 0;\n for (i = 0; i < results.length; i++) {\n if (results[i]) {\n result++;\n }\n }\n\n return result;\n};\n\nexports.COUNTUNIQUE = function () {\n return misc.UNIQUE.apply(null, utils.flatten(arguments)).length;\n};\n\nexports.COVARIANCE = {};\n\nexports.COVARIANCE.P = function(array1, array2) {\n array1 = utils.parseNumberArray(utils.flatten(array1));\n array2 = utils.parseNumberArray(utils.flatten(array2));\n if (utils.anyIsError(array1, array2)) {\n return error.value;\n }\n var mean1 = jStat.mean(array1);\n var mean2 = jStat.mean(array2);\n var result = 0;\n var n = array1.length;\n for (var i = 0; i < n; i++) {\n result += (array1[i] - mean1) * (array2[i] - mean2);\n }\n return result / n;\n};\n\nexports.COVARIANCE.S = function(array1, array2) {\n array1 = utils.parseNumberArray(utils.flatten(array1));\n array2 = utils.parseNumberArray(utils.flatten(array2));\n if (utils.anyIsError(array1, array2)) {\n return error.value;\n }\n return jStat.covariance(array1, array2);\n};\n\nexports.DEVSQ = function() {\n var range = utils.parseNumberArray(utils.flatten(arguments));\n if (range instanceof Error) {\n return range;\n }\n var mean = jStat.mean(range);\n var result = 0;\n for (var i = 0; i < range.length; i++) {\n result += Math.pow((range[i] - mean), 2);\n }\n return result;\n};\n\nexports.EXPON = {};\n\nexports.EXPON.DIST = function(x, lambda, cumulative) {\n x = utils.parseNumber(x);\n lambda = utils.parseNumber(lambda);\n if (utils.anyIsError(x, lambda)) {\n return error.value;\n }\n return (cumulative) ? jStat.exponential.cdf(x, lambda) : jStat.exponential.pdf(x, lambda);\n};\n\nexports.F = {};\n\nexports.F.DIST = function(x, d1, d2, cumulative) {\n x = utils.parseNumber(x);\n d1 = utils.parseNumber(d1);\n d2 = utils.parseNumber(d2);\n if (utils.anyIsError(x, d1, d2)) {\n return error.value;\n }\n return (cumulative) ? jStat.centralF.cdf(x, d1, d2) : jStat.centralF.pdf(x, d1, d2);\n};\n\nexports.F.DIST.RT = function(x, d1, d2) {\n if (arguments.length !== 3) {\n return error.na;\n }\n\n if (x < 0 || d1 < 1 || d2 < 1) {\n return error.num;\n }\n\n if ((typeof x !== 'number') || (typeof d1 !== 'number') || (typeof d2 !== 'number')) {\n return error.value;\n }\n\n return 1 - jStat.centralF.cdf(x, d1, d2);\n};\n\nexports.F.INV = function(probability, d1, d2) {\n probability = utils.parseNumber(probability);\n d1 = utils.parseNumber(d1);\n d2 = utils.parseNumber(d2);\n if (utils.anyIsError(probability, d1, d2)) {\n return error.value;\n }\n if (probability <= 0.0 || probability > 1.0) {\n return error.num;\n }\n\n return jStat.centralF.inv(probability, d1, d2);\n};\n\nexports.F.INV.RT = function(p, d1, d2) {\n if (arguments.length !== 3) {\n return error.na;\n }\n\n if (p < 0 || p > 1 || d1 < 1 || d1 > Math.pow(10, 10) || d2 < 1 || d2 > Math.pow(10, 10)) {\n return error.num;\n }\n\n if ((typeof p !== 'number') || (typeof d1 !== 'number') || (typeof d2 !== 'number')) {\n return error.value;\n }\n\n return jStat.centralF.inv(1.0 - p, d1, d2);\n};\n\nexports.F.TEST = function(array1, array2) {\n if (!array1 || !array2) {\n return error.na;\n }\n\n if (!(array1 instanceof Array) || !(array2 instanceof Array)) {\n return error.na;\n }\n\n if (array1.length < 2 || array2.length < 2) {\n return error.div0;\n }\n\n var sumOfSquares = function(values, x1) {\n var sum = 0;\n for (var i = 0; i < values.length; i++) {\n sum +=Math.pow((values[i] - x1), 2);\n }\n return sum;\n };\n\n var x1 = mathTrig.SUM(array1) / array1.length;\n var x2 = mathTrig.SUM(array2) / array2.length;\n var sum1 = sumOfSquares(array1, x1) / (array1.length - 1);\n var sum2 = sumOfSquares(array2, x2) / (array2.length - 1);\n\n return sum1 / sum2;\n};\n\nexports.FISHER = function(x) {\n x = utils.parseNumber(x);\n if (x instanceof Error) {\n return x;\n }\n return Math.log((1 + x) / (1 - x)) / 2;\n};\n\nexports.FISHERINV = function(y) {\n y = utils.parseNumber(y);\n if (y instanceof Error) {\n return y;\n }\n var e2y = Math.exp(2 * y);\n return (e2y - 1) / (e2y + 1);\n};\n\nexports.FORECAST = function(x, data_y, data_x) {\n x = utils.parseNumber(x);\n data_y = utils.parseNumberArray(utils.flatten(data_y));\n data_x = utils.parseNumberArray(utils.flatten(data_x));\n if (utils.anyIsError(x, data_y, data_x)) {\n return error.value;\n }\n var xmean = jStat.mean(data_x);\n var ymean = jStat.mean(data_y);\n var n = data_x.length;\n var num = 0;\n var den = 0;\n for (var i = 0; i < n; i++) {\n num += (data_x[i] - xmean) * (data_y[i] - ymean);\n den += Math.pow(data_x[i] - xmean, 2);\n }\n var b = num / den;\n var a = ymean - b * xmean;\n return a + b * x;\n};\n\nexports.FREQUENCY = function(data, bins) {\n data = utils.parseNumberArray(utils.flatten(data));\n bins = utils.parseNumberArray(utils.flatten(bins));\n if (utils.anyIsError(data, bins)) {\n return error.value;\n }\n var n = data.length;\n var b = bins.length;\n var r = [];\n for (var i = 0; i <= b; i++) {\n r[i] = 0;\n for (var j = 0; j < n; j++) {\n if (i === 0) {\n if (data[j] <= bins[0]) {\n r[0] += 1;\n }\n } else if (i < b) {\n if (data[j] > bins[i - 1] && data[j] <= bins[i]) {\n r[i] += 1;\n }\n } else if (i === b) {\n if (data[j] > bins[b - 1]) {\n r[b] += 1;\n }\n }\n }\n }\n return r;\n};\n\n\nexports.GAMMA = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n\n if (number === 0) {\n return error.num;\n }\n\n if (parseInt(number, 10) === number && number < 0) {\n return error.num;\n }\n\n return jStat.gammafn(number);\n};\n\nexports.GAMMA.DIST = function(value, alpha, beta, cumulative) {\n if (arguments.length !== 4) {\n return error.na;\n }\n\n if (value < 0 || alpha <= 0 || beta <= 0) {\n return error.value;\n }\n\n if ((typeof value !== 'number') || (typeof alpha !== 'number') || (typeof beta !== 'number')) {\n return error.value;\n }\n\n return cumulative ? jStat.gamma.cdf(value, alpha, beta, true) : jStat.gamma.pdf(value, alpha, beta, false);\n};\n\nexports.GAMMA.INV = function(probability, alpha, beta) {\n if (arguments.length !== 3) {\n return error.na;\n }\n\n if (probability < 0 || probability > 1 || alpha <= 0 || beta <= 0) {\n return error.num;\n }\n\n if ((typeof probability !== 'number') || (typeof alpha !== 'number') || (typeof beta !== 'number')) {\n return error.value;\n }\n\n return jStat.gamma.inv(probability, alpha, beta);\n};\n\nexports.GAMMALN = function(number) {\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n return jStat.gammaln(number);\n};\n\nexports.GAMMALN.PRECISE = function(x) {\n if (arguments.length !== 1) {\n return error.na;\n }\n\n if (x <= 0) {\n return error.num;\n }\n\n if (typeof x !== 'number') {\n return error.value;\n }\n\n return jStat.gammaln(x);\n};\n\nexports.GAUSS = function(z) {\n z = utils.parseNumber(z);\n if (z instanceof Error) {\n return z;\n }\n return jStat.normal.cdf(z, 0, 1) - 0.5;\n};\n\nexports.GEOMEAN = function() {\n var args = utils.parseNumberArray(utils.flatten(arguments));\n if (args instanceof Error) {\n return args;\n }\n return jStat.geomean(args);\n};\n\nexports.GROWTH = function(known_y, known_x, new_x, use_const) {\n // Credits: Ilmari Karonen (http://stackoverflow.com/questions/14161990/how-to-implement-growth-function-in-javascript)\n\n known_y = utils.parseNumberArray(known_y);\n if (known_y instanceof Error) {\n return known_y;\n }\n\n // Default values for optional parameters:\n var i;\n if (known_x === undefined) {\n known_x = [];\n for (i = 1; i <= known_y.length; i++) {\n known_x.push(i);\n }\n }\n if (new_x === undefined) {\n new_x = [];\n for (i = 1; i <= known_y.length; i++) {\n new_x.push(i);\n }\n }\n\n known_x = utils.parseNumberArray(known_x);\n new_x = utils.parseNumberArray(new_x);\n if (utils.anyIsError(known_x, new_x)) {\n return error.value;\n }\n\n\n if (use_const === undefined) {\n use_const = true;\n }\n\n // Calculate sums over the data:\n var n = known_y.length;\n var avg_x = 0;\n var avg_y = 0;\n var avg_xy = 0;\n var avg_xx = 0;\n for (i = 0; i < n; i++) {\n var x = known_x[i];\n var y = Math.log(known_y[i]);\n avg_x += x;\n avg_y += y;\n avg_xy += x * y;\n avg_xx += x * x;\n }\n avg_x /= n;\n avg_y /= n;\n avg_xy /= n;\n avg_xx /= n;\n\n // Compute linear regression coefficients:\n var beta;\n var alpha;\n if (use_const) {\n beta = (avg_xy - avg_x * avg_y) / (avg_xx - avg_x * avg_x);\n alpha = avg_y - beta * avg_x;\n } else {\n beta = avg_xy / avg_xx;\n alpha = 0;\n }\n\n // Compute and return result array:\n var new_y = [];\n for (i = 0; i < new_x.length; i++) {\n new_y.push(Math.exp(alpha + beta * new_x[i]));\n }\n return new_y;\n};\n\nexports.HARMEAN = function() {\n var range = utils.parseNumberArray(utils.flatten(arguments));\n if (range instanceof Error) {\n return range;\n }\n var n = range.length;\n var den = 0;\n for (var i = 0; i < n; i++) {\n den += 1 / range[i];\n }\n return n / den;\n};\n\nexports.HYPGEOM = {};\n\nexports.HYPGEOM.DIST = function(x, n, M, N, cumulative) {\n x = utils.parseNumber(x);\n n = utils.parseNumber(n);\n M = utils.parseNumber(M);\n N = utils.parseNumber(N);\n if (utils.anyIsError(x, n, M, N)) {\n return error.value;\n }\n\n function pdf(x, n, M, N) {\n return mathTrig.COMBIN(M, x) * mathTrig.COMBIN(N - M, n - x) / mathTrig.COMBIN(N, n);\n }\n\n function cdf(x, n, M, N) {\n var result = 0;\n for (var i = 0; i <= x; i++) {\n result += pdf(i, n, M, N);\n }\n return result;\n }\n\n return (cumulative) ? cdf(x, n, M, N) : pdf(x, n, M, N);\n};\n\nexports.INTERCEPT = function(known_y, known_x) {\n known_y = utils.parseNumberArray(known_y);\n known_x = utils.parseNumberArray(known_x);\n if (utils.anyIsError(known_y, known_x)) {\n return error.value;\n }\n if (known_y.length !== known_x.length) {\n return error.na;\n }\n return exports.FORECAST(0, known_y, known_x);\n};\n\nexports.KURT = function() {\n var range = utils.parseNumberArray(utils.flatten(arguments));\n if (range instanceof Error) {\n return range;\n }\n var mean = jStat.mean(range);\n var n = range.length;\n var sigma = 0;\n for (var i = 0; i < n; i++) {\n sigma += Math.pow(range[i] - mean, 4);\n }\n sigma = sigma / Math.pow(jStat.stdev(range, true), 4);\n return ((n * (n + 1)) / ((n - 1) * (n - 2) * (n - 3))) * sigma - 3 * (n - 1) * (n - 1) / ((n - 2) * (n - 3));\n};\n\nexports.LARGE = function(range, k) {\n range = utils.parseNumberArray(utils.flatten(range));\n k = utils.parseNumber(k);\n if (utils.anyIsError(range, k)) {\n return range;\n }\n\n if(k < 0 || range.length < k){\n return error.value;\n }\n\n return range.sort(function(a, b) {\n return b - a;\n })[k - 1];\n};\n\nexports.LINEST = function(data_y, data_x) {\n data_y = utils.parseNumberArray(utils.flatten(data_y));\n data_x = utils.parseNumberArray(utils.flatten(data_x));\n if (utils.anyIsError(data_y, data_x)) {\n return error.value;\n }\n var ymean = jStat.mean(data_y);\n var xmean = jStat.mean(data_x);\n var n = data_x.length;\n var num = 0;\n var den = 0;\n for (var i = 0; i < n; i++) {\n num += (data_x[i] - xmean) * (data_y[i] - ymean);\n den += Math.pow(data_x[i] - xmean, 2);\n }\n var m = num / den;\n var b = ymean - m * xmean;\n return [m, b];\n};\n\n// According to Microsoft:\n// http://office.microsoft.com/en-us/starter-help/logest-function-HP010342665.aspx\n// LOGEST returns are based on the following linear model:\n// ln y = x1 ln m1 + ... + xn ln mn + ln b\nexports.LOGEST = function(data_y, data_x) {\n data_y = utils.parseNumberArray(utils.flatten(data_y));\n data_x = utils.parseNumberArray(utils.flatten(data_x));\n if (utils.anyIsError(data_y, data_x)) {\n return error.value;\n }\n for (var i = 0; i < data_y.length; i ++) {\n data_y[i] = Math.log(data_y[i]);\n }\n\n var result = exports.LINEST(data_y, data_x);\n result[0] = Math.round(Math.exp(result[0])*1000000)/1000000;\n result[1] = Math.round(Math.exp(result[1])*1000000)/1000000;\n return result;\n};\n\nexports.LOGNORM = {};\n\nexports.LOGNORM.DIST = function(x, mean, sd, cumulative) {\n x = utils.parseNumber(x);\n mean = utils.parseNumber(mean);\n sd = utils.parseNumber(sd);\n if (utils.anyIsError(x, mean, sd)) {\n return error.value;\n }\n return (cumulative) ? jStat.lognormal.cdf(x, mean, sd) : jStat.lognormal.pdf(x, mean, sd);\n};\n\nexports.LOGNORM.INV = function(probability, mean, sd) {\n probability = utils.parseNumber(probability);\n mean = utils.parseNumber(mean);\n sd = utils.parseNumber(sd);\n if (utils.anyIsError(probability, mean, sd)) {\n return error.value;\n }\n return jStat.lognormal.inv(probability, mean, sd);\n};\n\nexports.MAX = function() {\n var flatArguments = utils.flatten(arguments);\n var someError = utils.anyError.apply(undefined, flatArguments);\n if (someError) {\n return someError;\n }\n var range = utils.numbers(flatArguments);\n return (range.length === 0) ? 0 : Math.max.apply(Math, range);\n};\n\nexports.MAXA = function() {\n var flatArguments = utils.flatten(arguments);\n var someError = utils.anyError.apply(undefined, flatArguments);\n if (someError) {\n return someError;\n }\n var range = utils.arrayValuesToNumbers(flatArguments);\n range = range.map(function (value) { return (value === undefined || value === null) ? 0 : value; });\n return (range.length === 0) ? 0 : Math.max.apply(Math, range);\n};\n\nexports.MEDIAN = function() {\n var flatArguments = utils.flatten(arguments);\n var someError = utils.anyError.apply(undefined, flatArguments);\n if (someError) {\n return someError;\n }\n var range = utils.arrayValuesToNumbers(flatArguments);\n var result = jStat.median(range);\n\n if (isNaN(result)) {\n result = error.num;\n }\n\n return result;\n};\n\nexports.MIN = function() {\n var flatArguments = utils.flatten(arguments);\n var someError = utils.anyError.apply(undefined, flatArguments);\n if (someError) {\n return someError;\n }\n var range = utils.numbers(flatArguments);\n return (range.length === 0) ? 0 : Math.min.apply(Math, range);\n};\n\nexports.MINA = function() {\n var flatArguments = utils.flatten(arguments);\n var someError = utils.anyError.apply(undefined, flatArguments);\n if (someError) {\n return someError;\n }\n var range = utils.arrayValuesToNumbers(flatArguments);\n range = range.map(function (value) { return (value === undefined || value === null) ? 0 : value; });\n return (range.length === 0) ? 0 : Math.min.apply(Math, range);\n};\n\nexports.MODE = {};\n\nexports.MODE.MULT = function() {\n // Credits: Roönaän\n var range = utils.parseNumberArray(utils.flatten(arguments));\n if (range instanceof Error) {\n return range;\n }\n var n = range.length;\n var count = {};\n var maxItems = [];\n var max = 0;\n var currentItem;\n\n for (var i = 0; i < n; i++) {\n currentItem = range[i];\n count[currentItem] = count[currentItem] ? count[currentItem] + 1 : 1;\n if (count[currentItem] > max) {\n max = count[currentItem];\n maxItems = [];\n }\n if (count[currentItem] === max) {\n maxItems[maxItems.length] = currentItem;\n }\n }\n return maxItems;\n};\n\nexports.MODE.SNGL = function() {\n var range = utils.parseNumberArray(utils.flatten(arguments));\n if (range instanceof Error) {\n return range;\n }\n return exports.MODE.MULT(range).sort(function(a, b) {\n return a - b;\n })[0];\n};\n\nexports.NEGBINOM = {};\n\nexports.NEGBINOM.DIST = function(k, r, p, cumulative) {\n k = utils.parseNumber(k);\n r = utils.parseNumber(r);\n p = utils.parseNumber(p);\n if (utils.anyIsError(k, r, p)) {\n return error.value;\n }\n return (cumulative) ? jStat.negbin.cdf(k, r, p) : jStat.negbin.pdf(k, r, p);\n};\n\nexports.NORM = {};\n\nexports.NORM.DIST = function(x, mean, sd, cumulative) {\n x = utils.parseNumber(x);\n mean = utils.parseNumber(mean);\n sd = utils.parseNumber(sd);\n if (utils.anyIsError(x, mean, sd)) {\n return error.value;\n }\n if (sd <= 0) {\n return error.num;\n }\n\n // Return normal distribution computed by jStat [http://jstat.org]\n return (cumulative) ? jStat.normal.cdf(x, mean, sd) : jStat.normal.pdf(x, mean, sd);\n};\n\nexports.NORM.INV = function(probability, mean, sd) {\n probability = utils.parseNumber(probability);\n mean = utils.parseNumber(mean);\n sd = utils.parseNumber(sd);\n if (utils.anyIsError(probability, mean, sd)) {\n return error.value;\n }\n return jStat.normal.inv(probability, mean, sd);\n};\n\nexports.NORM.S = {};\n\nexports.NORM.S.DIST = function(z, cumulative) {\n z = utils.parseNumber(z);\n if (z instanceof Error) {\n return error.value;\n }\n return (cumulative) ? jStat.normal.cdf(z, 0, 1) : jStat.normal.pdf(z, 0, 1);\n};\n\nexports.NORM.S.INV = function(probability) {\n probability = utils.parseNumber(probability);\n if (probability instanceof Error) {\n return error.value;\n }\n return jStat.normal.inv(probability, 0, 1);\n};\n\nexports.PEARSON = function(data_x, data_y) {\n data_y = utils.parseNumberArray(utils.flatten(data_y));\n data_x = utils.parseNumberArray(utils.flatten(data_x));\n if (utils.anyIsError(data_y, data_x)) {\n return error.value;\n }\n var xmean = jStat.mean(data_x);\n var ymean = jStat.mean(data_y);\n var n = data_x.length;\n var num = 0;\n var den1 = 0;\n var den2 = 0;\n for (var i = 0; i < n; i++) {\n num += (data_x[i] - xmean) * (data_y[i] - ymean);\n den1 += Math.pow(data_x[i] - xmean, 2);\n den2 += Math.pow(data_y[i] - ymean, 2);\n }\n return num / Math.sqrt(den1 * den2);\n};\n\nexports.PERCENTILE = {};\n\nexports.PERCENTILE.EXC = function(array, k) {\n array = utils.parseNumberArray(utils.flatten(array));\n k = utils.parseNumber(k);\n if (utils.anyIsError(array, k)) {\n return error.value;\n }\n array = array.sort(function(a, b) {\n {\n return a - b;\n }\n });\n var n = array.length;\n if (k < 1 / (n + 1) || k > 1 - 1 / (n + 1)) {\n return error.num;\n }\n var l = k * (n + 1) - 1;\n var fl = Math.floor(l);\n return utils.cleanFloat((l === fl) ? array[l] : array[fl] + (l - fl) * (array[fl + 1] - array[fl]));\n};\n\nexports.PERCENTILE.INC = function(array, k) {\n array = utils.parseNumberArray(utils.flatten(array));\n k = utils.parseNumber(k);\n if (utils.anyIsError(array, k)) {\n return error.value;\n }\n array = array.sort(function(a, b) {\n return a - b;\n });\n var n = array.length;\n var l = k * (n - 1);\n var fl = Math.floor(l);\n return utils.cleanFloat((l === fl) ? array[l] : array[fl] + (l - fl) * (array[fl + 1] - array[fl]));\n};\n\nexports.PERCENTRANK = {};\n\nexports.PERCENTRANK.EXC = function(array, x, significance) {\n significance = (significance === undefined) ? 3 : significance;\n array = utils.parseNumberArray(utils.flatten(array));\n x = utils.parseNumber(x);\n significance = utils.parseNumber(significance);\n if (utils.anyIsError(array, x, significance)) {\n return error.value;\n }\n array = array.sort(function(a, b) {\n return a - b;\n });\n var uniques = misc.UNIQUE.apply(null, array);\n var n = array.length;\n var m = uniques.length;\n var power = Math.pow(10, significance);\n var result = 0;\n var match = false;\n var i = 0;\n while (!match && i < m) {\n if (x === uniques[i]) {\n result = (array.indexOf(uniques[i]) + 1) / (n + 1);\n match = true;\n } else if (x >= uniques[i] && (x < uniques[i + 1] || i === m - 1)) {\n result = (array.indexOf(uniques[i]) + 1 + (x - uniques[i]) / (uniques[i + 1] - uniques[i])) / (n + 1);\n match = true;\n }\n i++;\n }\n return Math.floor(result * power) / power;\n};\n\nexports.PERCENTRANK.INC = function(array, x, significance) {\n significance = (significance === undefined) ? 3 : significance;\n array = utils.parseNumberArray(utils.flatten(array));\n x = utils.parseNumber(x);\n significance = utils.parseNumber(significance);\n if (utils.anyIsError(array, x, significance)) {\n return error.value;\n }\n array = array.sort(function(a, b) {\n return a - b;\n });\n var uniques = misc.UNIQUE.apply(null, array);\n var n = array.length;\n var m = uniques.length;\n var power = Math.pow(10, significance);\n var result = 0;\n var match = false;\n var i = 0;\n while (!match && i < m) {\n if (x === uniques[i]) {\n result = array.indexOf(uniques[i]) / (n - 1);\n match = true;\n } else if (x >= uniques[i] && (x < uniques[i + 1] || i === m - 1)) {\n result = (array.indexOf(uniques[i]) + (x - uniques[i]) / (uniques[i + 1] - uniques[i])) / (n - 1);\n match = true;\n }\n i++;\n }\n return Math.floor(result * power) / power;\n};\n\nexports.PERMUT = function(number, number_chosen) {\n number = utils.parseNumber(number);\n number_chosen = utils.parseNumber(number_chosen);\n if (utils.anyIsError(number, number_chosen)) {\n return error.value;\n }\n return mathTrig.FACT(number) / mathTrig.FACT(number - number_chosen);\n};\n\nexports.PERMUTATIONA = function(number, number_chosen) {\n number = utils.parseNumber(number);\n number_chosen = utils.parseNumber(number_chosen);\n if (utils.anyIsError(number, number_chosen)) {\n return error.value;\n }\n return Math.pow(number, number_chosen);\n};\n\nexports.PHI = function(x) {\n x = utils.parseNumber(x);\n if (x instanceof Error) {\n return error.value;\n }\n return Math.exp(-0.5 * x * x) / SQRT2PI;\n};\n\nexports.POISSON = {};\n\nexports.POISSON.DIST = function(x, mean, cumulative) {\n x = utils.parseNumber(x);\n mean = utils.parseNumber(mean);\n if (utils.anyIsError(x, mean)) {\n return error.value;\n }\n return (cumulative) ? jStat.poisson.cdf(x, mean) : jStat.poisson.pdf(x, mean);\n};\n\nexports.PROB = function(range, probability, lower, upper) {\n if (lower === undefined) {\n return 0;\n }\n upper = (upper === undefined) ? lower : upper;\n\n range = utils.parseNumberArray(utils.flatten(range));\n probability = utils.parseNumberArray(utils.flatten(probability));\n lower = utils.parseNumber(lower);\n upper = utils.parseNumber(upper);\n if (utils.anyIsError(range, probability, lower, upper)) {\n return error.value;\n }\n\n if (lower === upper) {\n return (range.indexOf(lower) >= 0) ? probability[range.indexOf(lower)] : 0;\n }\n\n var sorted = range.sort(function(a, b) {\n return a - b;\n });\n var n = sorted.length;\n var result = 0;\n for (var i = 0; i < n; i++) {\n if (sorted[i] >= lower && sorted[i] <= upper) {\n result += probability[range.indexOf(sorted[i])];\n }\n }\n return result;\n};\n\nexports.QUARTILE = {};\n\nexports.QUARTILE.EXC = function(range, quart) {\n range = utils.parseNumberArray(utils.flatten(range));\n quart = utils.parseNumber(quart);\n if (utils.anyIsError(range, quart)) {\n return error.value;\n }\n switch (quart) {\n case 1:\n return exports.PERCENTILE.EXC(range, 0.25);\n case 2:\n return exports.PERCENTILE.EXC(range, 0.5);\n case 3:\n return exports.PERCENTILE.EXC(range, 0.75);\n default:\n return error.num;\n }\n};\n\nexports.QUARTILE.INC = function(range, quart) {\n range = utils.parseNumberArray(utils.flatten(range));\n quart = utils.parseNumber(quart);\n if (utils.anyIsError(range, quart)) {\n return error.value;\n }\n switch (quart) {\n case 1:\n return exports.PERCENTILE.INC(range, 0.25);\n case 2:\n return exports.PERCENTILE.INC(range, 0.5);\n case 3:\n return exports.PERCENTILE.INC(range, 0.75);\n default:\n return error.num;\n }\n};\n\nexports.RANK = {};\n\nexports.RANK.AVG = function(number, range, order) {\n number = utils.parseNumber(number);\n range = utils.parseNumberArray(utils.flatten(range));\n if (utils.anyIsError(number, range)) {\n return error.value;\n }\n range = utils.flatten(range);\n order = order || false;\n var sort = (order) ? function(a, b) {\n return a - b;\n } : function(a, b) {\n return b - a;\n };\n range = range.sort(sort);\n\n var length = range.length;\n var count = 0;\n for (var i = 0; i < length; i++) {\n if (range[i] === number) {\n count++;\n }\n }\n\n return (count > 1) ? (2 * range.indexOf(number) + count + 1) / 2 : range.indexOf(number) + 1;\n};\n\nexports.RANK.EQ = function(number, range, order) {\n number = utils.parseNumber(number);\n range = utils.parseNumberArray(utils.flatten(range));\n if (utils.anyIsError(number, range)) {\n return error.value;\n }\n order = order || false;\n var sort = (order) ? function(a, b) {\n return a - b;\n } : function(a, b) {\n return b - a;\n };\n range = range.sort(sort);\n return range.indexOf(number) + 1;\n};\n\nexports.ROW = function(matrix, index) {\n if (arguments.length !== 2) {\n return error.na;\n }\n\n if (index < 0) {\n return error.num;\n }\n\n if (!(matrix instanceof Array) || (typeof index !== 'number')) {\n return error.value;\n }\n\n if (matrix.length === 0) {\n return undefined;\n }\n\n return jStat.row(matrix, index);\n};\n\nexports.ROWS = function(matrix) {\n if (arguments.length !== 1) {\n return error.na;\n }\n\n if (!(matrix instanceof Array)) {\n return error.value;\n }\n\n if (matrix.length === 0) {\n return 0;\n }\n\n return jStat.rows(matrix);\n};\n\nexports.RSQ = function(data_x, data_y) { // no need to flatten here, PEARSON will take care of that\n data_x = utils.parseNumberArray(utils.flatten(data_x));\n data_y = utils.parseNumberArray(utils.flatten(data_y));\n if (utils.anyIsError(data_x, data_y)) {\n return error.value;\n }\n return Math.pow(exports.PEARSON(data_x, data_y), 2);\n};\n\nexports.SKEW = function() {\n var range = utils.parseNumberArray(utils.flatten(arguments));\n if (range instanceof Error) {\n return range;\n }\n var mean = jStat.mean(range);\n var n = range.length;\n var sigma = 0;\n for (var i = 0; i < n; i++) {\n sigma += Math.pow(range[i] - mean, 3);\n }\n return n * sigma / ((n - 1) * (n - 2) * Math.pow(jStat.stdev(range, true), 3));\n};\n\nexports.SKEW.P = function() {\n var range = utils.parseNumberArray(utils.flatten(arguments));\n if (range instanceof Error) {\n return range;\n }\n var mean = jStat.mean(range);\n var n = range.length;\n var m2 = 0;\n var m3 = 0;\n for (var i = 0; i < n; i++) {\n m3 += Math.pow(range[i] - mean, 3);\n m2 += Math.pow(range[i] - mean, 2);\n }\n m3 = m3 / n;\n m2 = m2 / n;\n return m3 / Math.pow(m2, 3 / 2);\n};\n\nexports.SLOPE = function(data_y, data_x) {\n data_y = utils.parseNumberArray(utils.flatten(data_y));\n data_x = utils.parseNumberArray(utils.flatten(data_x));\n if (utils.anyIsError(data_y, data_x)) {\n return error.value;\n }\n var xmean = jStat.mean(data_x);\n var ymean = jStat.mean(data_y);\n var n = data_x.length;\n var num = 0;\n var den = 0;\n for (var i = 0; i < n; i++) {\n num += (data_x[i] - xmean) * (data_y[i] - ymean);\n den += Math.pow(data_x[i] - xmean, 2);\n }\n return num / den;\n};\n\nexports.SMALL = function(range, k) {\n range = utils.parseNumberArray(utils.flatten(range));\n k = utils.parseNumber(k);\n if (utils.anyIsError(range, k)) {\n return range;\n }\n return range.sort(function(a, b) {\n return a - b;\n })[k - 1];\n};\n\nexports.STANDARDIZE = function(x, mean, sd) {\n x = utils.parseNumber(x);\n mean = utils.parseNumber(mean);\n sd = utils.parseNumber(sd);\n if (utils.anyIsError(x, mean, sd)) {\n return error.value;\n }\n return (x - mean) / sd;\n};\n\nexports.STDEV = {};\n\nexports.STDEV.P = function() {\n var v = exports.VAR.P.apply(this, arguments);\n var result = Math.sqrt(v);\n\n if (isNaN(result)) {\n result = error.num;\n }\n\n return result;\n};\n\nexports.STDEV.S = function() {\n var v = exports.VAR.S.apply(this, arguments);\n var result = Math.sqrt(v);\n\n return result;\n};\n\nexports.STDEVA = function() {\n var v = exports.VARA.apply(this, arguments);\n var result = Math.sqrt(v);\n\n return result;\n};\n\nexports.STDEVPA = function() {\n var v = exports.VARPA.apply(this, arguments);\n var result = Math.sqrt(v);\n\n if (isNaN(result)) {\n result = error.num;\n }\n\n return result;\n};\n\n\nexports.STEYX = function(data_y, data_x) {\n data_y = utils.parseNumberArray(utils.flatten(data_y));\n data_x = utils.parseNumberArray(utils.flatten(data_x));\n if (utils.anyIsError(data_y, data_x)) {\n return error.value;\n }\n var xmean = jStat.mean(data_x);\n var ymean = jStat.mean(data_y);\n var n = data_x.length;\n var lft = 0;\n var num = 0;\n var den = 0;\n for (var i = 0; i < n; i++) {\n lft += Math.pow(data_y[i] - ymean, 2);\n num += (data_x[i] - xmean) * (data_y[i] - ymean);\n den += Math.pow(data_x[i] - xmean, 2);\n }\n return Math.sqrt((lft - num * num / den) / (n - 2));\n};\n\nexports.TRANSPOSE = function(matrix) {\n if (!matrix) {\n return error.na;\n }\n return jStat.transpose(matrix);\n};\n\nexports.T = text.T;\n\nexports.T.DIST = function (x, df, tails) {\n if (tails !== 1 && tails !== 2) {\n return error.num;\n }\n\n return (tails === 1) ? exports.T.DIST.RT(x, df) : exports.T.DIST['2T'](x, df);\n};\n\nexports.T.DIST['2T'] = function(x, df) {\n if (arguments.length !== 2) {\n return error.na;\n }\n\n if (x < 0 || df < 1) {\n return error.num;\n }\n\n if ((typeof x !== 'number') || (typeof df !== 'number')) {\n return error.value;\n }\n\n return (1 - jStat.studentt.cdf(x , df)) * 2;\n};\n\nexports.T.DIST.RT = function(x, df) {\n if (arguments.length !== 2) {\n return error.na;\n }\n\n if (x < 0 || df < 1) {\n return error.num;\n }\n\n if ((typeof x !== 'number') || (typeof df !== 'number')) {\n return error.value;\n }\n\n return 1 - jStat.studentt.cdf(x , df);\n};\n\nexports.T.INV = function(probability, df) {\n probability = utils.parseNumber(probability);\n df = utils.parseNumber(df);\n if (utils.anyIsError(probability, df)) {\n return error.value;\n }\n return jStat.studentt.inv(probability, df);\n};\n\nexports.T.INV['2T'] = function(probability, df) {\n probability = utils.parseNumber(probability);\n df = utils.parseNumber(df);\n if (probability <= 0 || probability > 1 || df < 1) {\n return error.num;\n }\n if (utils.anyIsError(probability, df)) {\n return error.value;\n }\n return Math.abs(jStat.studentt.inv(probability/2, df));\n};\n\n// The algorithm can be found here:\n// http://www.chem.uoa.gr/applets/AppletTtest/Appl_Ttest2.html\nexports.T.TEST = function(data_x, data_y) {\n data_x = utils.parseNumberArray(utils.flatten(data_x));\n data_y = utils.parseNumberArray(utils.flatten(data_y));\n if (utils.anyIsError(data_x, data_y)) {\n return error.value;\n }\n\n var mean_x = jStat.mean(data_x);\n var mean_y = jStat.mean(data_y);\n var s_x = 0;\n var s_y = 0;\n var i;\n\n for (i = 0; i < data_x.length; i++) {\n s_x += Math.pow(data_x[i] - mean_x, 2);\n }\n for (i = 0; i < data_y.length; i++) {\n s_y += Math.pow(data_y[i] - mean_y, 2);\n }\n\n s_x = s_x / (data_x.length-1);\n s_y = s_y / (data_y.length-1);\n\n var t = Math.abs(mean_x - mean_y) / Math.sqrt(s_x/data_x.length + s_y/data_y.length);\n\n return exports.T.DIST['2T'](t, data_x.length+data_y.length-2);\n};\n\nexports.TREND = function(data_y, data_x, new_data_x) {\n data_y = utils.parseNumberArray(utils.flatten(data_y));\n data_x = utils.parseNumberArray(utils.flatten(data_x));\n new_data_x = utils.parseNumberArray(utils.flatten(new_data_x));\n if (utils.anyIsError(data_y, data_x, new_data_x)) {\n return error.value;\n }\n var linest = exports.LINEST(data_y, data_x);\n var m = linest[0];\n var b = linest[1];\n var result = [];\n\n new_data_x.forEach(function(x) {\n result.push(m * x + b);\n });\n\n return result;\n};\n\nexports.TRIMMEAN = function(range, percent) {\n range = utils.parseNumberArray(utils.flatten(range));\n percent = utils.parseNumber(percent);\n if (utils.anyIsError(range, percent)) {\n return error.value;\n }\n var trim = mathTrig.FLOOR(range.length * percent, 2) / 2;\n return jStat.mean(utils.initial(utils.rest(range.sort(function(a, b) {\n return a - b;\n }), trim), trim));\n};\n\nexports.VAR = {};\n\nexports.VAR.P = function() {\n var range = utils.numbers(utils.flatten(arguments));\n var n = range.length;\n var sigma = 0;\n var mean = exports.AVERAGE(range);\n var result;\n for (var i = 0; i < n; i++) {\n sigma += Math.pow(range[i] - mean, 2);\n }\n result = sigma / n;\n\n if (isNaN(result)) {\n result = error.num;\n }\n\n return result;\n};\n\nexports.VAR.S = function() {\n var range = utils.numbers(utils.flatten(arguments));\n var n = range.length;\n var sigma = 0;\n var mean = exports.AVERAGE(range);\n for (var i = 0; i < n; i++) {\n sigma += Math.pow(range[i] - mean, 2);\n }\n return sigma / (n - 1);\n};\n\nexports.VARA = function() {\n var range = utils.flatten(arguments);\n var n = range.length;\n var sigma = 0;\n var count = 0;\n var mean = exports.AVERAGEA(range);\n for (var i = 0; i < n; i++) {\n var el = range[i];\n if (typeof el === 'number') {\n sigma += Math.pow(el - mean, 2);\n } else if (el === true) {\n sigma += Math.pow(1 - mean, 2);\n } else {\n sigma += Math.pow(0 - mean, 2);\n }\n\n if (el !== null) {\n count++;\n }\n }\n return sigma / (count - 1);\n};\n\nexports.VARPA = function() {\n var range = utils.flatten(arguments);\n var n = range.length;\n var sigma = 0;\n var count = 0;\n var mean = exports.AVERAGEA(range);\n var result;\n for (var i = 0; i < n; i++) {\n var el = range[i];\n if (typeof el === 'number') {\n sigma += Math.pow(el - mean, 2);\n } else if (el === true) {\n sigma += Math.pow(1 - mean, 2);\n } else {\n sigma += Math.pow(0 - mean, 2);\n }\n\n if (el !== null) {\n count++;\n }\n }\n result = sigma / count;\n\n if (isNaN(result)) {\n result = error.num;\n }\n\n return result;\n};\n\nexports.WEIBULL = {};\n\nexports.WEIBULL.DIST = function(x, alpha, beta, cumulative) {\n x = utils.parseNumber(x);\n alpha = utils.parseNumber(alpha);\n beta = utils.parseNumber(beta);\n if (utils.anyIsError(x, alpha, beta)) {\n return error.value;\n }\n return (cumulative) ? 1 - Math.exp(-Math.pow(x / beta, alpha)) : Math.pow(x, alpha - 1) * Math.exp(-Math.pow(x / beta, alpha)) * alpha / Math.pow(beta, alpha);\n};\n\nexports.Z = {};\n\nexports.Z.TEST = function(range, x, sd) {\n range = utils.parseNumberArray(utils.flatten(range));\n x = utils.parseNumber(x);\n if (utils.anyIsError(range, x)) {\n return error.value;\n }\n\n sd = sd || exports.STDEV.S(range);\n var n = range.length;\n return 1 - exports.NORM.S.DIST((exports.AVERAGE(range) - x) / (sd / Math.sqrt(n)), true);\n};\n","var utils = require('./utils/common');\nvar error = require('./utils/error');\n\n//TODO\nexports.ASC = function() {\n throw new Error('ASC is not implemented');\n};\n\n//TODO\nexports.BAHTTEXT = function() {\n throw new Error('BAHTTEXT is not implemented');\n};\n\nexports.CHAR = function(number) {\n number = utils.parseNumber(number);\n if (number === 0) {\n return error.value;\n }\n if (number instanceof Error) {\n return number;\n }\n return String.fromCharCode(number);\n};\n\nexports.CLEAN = function(text) {\n if (utils.anyIsError(text)) {\n return text;\n }\n text = text || '';\n var re = /[\\0-\\x1F]/g;\n return text.replace(re, \"\");\n};\n\nexports.CODE = function(text) {\n if (utils.anyIsError(text)) {\n return text;\n }\n text = text || '';\n var result = text.charCodeAt(0);\n\n if (isNaN(result)) {\n result = error.value;\n }\n return result;\n};\n\nexports.CONCATENATE = function() {\n var args = utils.flatten(arguments);\n var someError = utils.anyError.apply(undefined, args);\n if (someError) {\n return someError;\n }\n var trueFound = 0;\n while ((trueFound = args.indexOf(true)) > -1) {\n args[trueFound] = 'TRUE';\n }\n\n var falseFound = 0;\n while ((falseFound = args.indexOf(false)) > -1) {\n args[falseFound] = 'FALSE';\n }\n\n return args.join('');\n};\n\nexports.CONCAT = exports.CONCATENATE;\n\n//TODO\nexports.DBCS = function() {\n throw new Error('DBCS is not implemented');\n};\n\n//TODO\nexports.DOLLAR = function() {\n throw new Error('DOLLAR is not implemented');\n};\n\nexports.EXACT = function(text1, text2) {\n if (arguments.length !== 2) {\n return error.na;\n }\n var someError = utils.anyError(text1, text2);\n if (someError) {\n return someError;\n }\n text1 = utils.parseString(text1);\n text2 = utils.parseString(text2);\n return text1 === text2;\n};\n\nexports.FIND = function(find_text, within_text, position) {\n if (arguments.length < 2) {\n return error.na;\n }\n find_text = utils.parseString(find_text);\n within_text = utils.parseString(within_text);\n position = (position === undefined) ? 0 : position;\n var found_index = within_text.indexOf(find_text, position - 1);\n if (found_index === -1) {\n return error.value;\n }\n return found_index + 1;\n};\n\n//TODO\nexports.FIXED = function() {\n throw new Error('FIXED is not implemented');\n};\n\nexports.HTML2TEXT = function (value) {\n if (utils.anyIsError(value)) {\n return value;\n }\n var result = '';\n\n if (value) {\n if (value instanceof Array) {\n value.forEach(function (line) {\n if (result !== '') {\n result += '\\n';\n }\n result += (line.replace(/<(?:.|\\n)*?>/gm, ''));\n });\n } else {\n result = value.replace(/<(?:.|\\n)*?>/gm, '');\n }\n }\n\n return result;\n};\n\nexports.LEFT = function(text, number) {\n var someError = utils.anyError(text, number);\n if (someError) {\n return someError;\n }\n text = utils.parseString(text);\n number = (number === undefined) ? 1 : number;\n number = utils.parseNumber(number);\n if (number instanceof Error || typeof text !== 'string') {\n return error.value;\n }\n return text.substring(0, number);\n};\n\nexports.LEN = function(text) {\n if (arguments.length === 0) {\n return error.error;\n }\n\n if (text instanceof Error) {\n return text;\n }\n\n if (Array.isArray(text)) {\n return error.value;\n }\n\n var textAsString = utils.parseString(text);\n return textAsString.length;\n};\n\nexports.LOWER = function(text) {\n if (arguments.length !== 1) {\n return error.value;\n }\n text = utils.parseString(text);\n if (utils.anyIsError(text)) {\n return text;\n }\n return text.toLowerCase();\n};\n\nexports.MID = function(text, start, number) {\n if (start === undefined || start === null) {\n return error.value;\n }\n start = utils.parseNumber(start);\n number = utils.parseNumber(number);\n if (utils.anyIsError(start, number) || typeof text !== 'string') {\n return number;\n }\n\n var begin = start - 1;\n var end = begin + number;\n\n return text.substring(begin, end);\n};\n\n// TODO\nexports.NUMBERVALUE = function (text, decimal_separator, group_separator) {\n decimal_separator = (typeof decimal_separator === 'undefined') ? '.' : decimal_separator;\n group_separator = (typeof group_separator === 'undefined') ? ',' : group_separator;\n return Number(text.replace(decimal_separator, '.').replace(group_separator, ''));\n};\n\n// TODO\nexports.PRONETIC = function() {\n throw new Error('PRONETIC is not implemented');\n};\n\nexports.PROPER = function(text) {\n if (utils.anyIsError(text)) {\n return text;\n }\n if (isNaN(text) && typeof text === 'number') {\n return error.value;\n }\n text = utils.parseString(text);\n\n return text.replace(/\\w\\S*/g, function(txt) {\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\n });\n};\n\nexports.REGEXEXTRACT = function (text, regular_expression) {\n if (arguments.length < 2) {\n return error.na;\n }\n var match = text.match(new RegExp(regular_expression));\n return match ? (match[match.length > 1 ? match.length - 1 : 0]) : null;\n};\n\nexports.REGEXMATCH = function (text, regular_expression, full) {\n if (arguments.length < 2) {\n return error.na;\n }\n var match = text.match(new RegExp(regular_expression));\n return full ? match : !!match;\n};\n\nexports.REGEXREPLACE = function (text, regular_expression, replacement) {\n if (arguments.length < 3) {\n return error.na;\n }\n return text.replace(new RegExp(regular_expression), replacement);\n};\n\nexports.REPLACE = function(text, position, length, new_text) {\n position = utils.parseNumber(position);\n length = utils.parseNumber(length);\n if (utils.anyIsError(position, length) ||\n typeof text !== 'string' ||\n typeof new_text !== 'string') {\n return error.value;\n }\n return text.substr(0, position - 1) + new_text + text.substr(position - 1 + length);\n};\n\nexports.REPT = function(text, number) {\n var someError = utils.anyError(text, number);\n if (someError) {\n return someError;\n }\n text = utils.parseString(text);\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n return new Array(number + 1).join(text);\n};\n\nexports.RIGHT = function(text, number) {\n var someError = utils.anyError(text, number);\n if (someError) {\n return someError;\n }\n text = utils.parseString(text);\n number = (number === undefined) ? 1 : number;\n number = utils.parseNumber(number);\n if (number instanceof Error) {\n return number;\n }\n return text.substring(text.length - number);\n};\n\nexports.SEARCH = function(find_text, within_text, position) {\n var foundAt;\n if (typeof find_text !== 'string' || typeof within_text !== 'string') {\n return error.value;\n }\n position = (position === undefined) ? 0 : position;\n foundAt = within_text.toLowerCase().indexOf(find_text.toLowerCase(), position - 1)+1;\n return (foundAt === 0)?error.value:foundAt;\n};\n\nexports.SPLIT = function (text, separator) {\n return text.split(separator);\n};\n\nexports.SUBSTITUTE = function(text, old_text, new_text, occurrence) {\n if (arguments.length < 3) {\n return error.na;\n }\n if (!text || !old_text) {\n return text;\n } else if (occurrence === undefined) {\n return text.split(old_text).join(new_text);\n } else {\n occurrence = Math.floor(Number(occurrence));\n if (Number.isNaN(occurrence) || occurrence <= 0) {\n return error.value;\n }\n var index = 0;\n var i = 0;\n while (index > -1 && text.indexOf(old_text, index) > -1) {\n index = text.indexOf(old_text, index + 1);\n i++;\n if (index > -1 && i === occurrence) {\n return text.substring(0, index) + new_text + text.substring(index + old_text.length);\n }\n }\n return text;\n }\n};\n\nexports.T = function(value) {\n if (value instanceof Error) {\n return value;\n }\n return (typeof value === \"string\") ? value : '';\n};\n\n// TODO incomplete implementation\nexports.TEXT = function() {\n throw new Error('TEXT is not implemented');\n};\n\nexports.TRIM = function(text) {\n text = utils.parseString(text);\n if (text instanceof Error) {\n return text;\n }\n return text.replace(/\\s+/g, ' ').trim();\n};\n\nexports.UNICHAR = exports.CHAR;\n\nexports.UNICODE = exports.CODE;\n\nexports.UPPER = function(text) {\n text = utils.parseString(text);\n if (text instanceof Error) {\n return text;\n }\n return text.toUpperCase();\n};\n\nexports.VALUE = function(num) {\n var anyError = utils.anyError(num);\n if (anyError) {\n return anyError;\n }\n\n if (typeof num !== 'string') {\n return error.value;\n }\n\n var isPercent = /(%)$/.test(num) || /^(%)/.test(num);\n num = num.replace(/^[^0-9-]{0,3}/, '');\n num = num.replace(/[^0-9]{0,3}$/, '');\n num = num.replace(/[\\ ,]/g,'');\n\n if(num ===''){\n return error.value;\n }\n\n var output = Number(num);\n\n if(isNaN(output)){\n return error.value;\n }\n\n output = output || 0;\n\n if(isPercent) {\n output = output * 0.01;\n }\n\n return output;\n};\n","var error = require('./error');\n\nexports.flattenShallow = function(array) {\n if (!array || !array.reduce) {\n return array;\n }\n\n return array.reduce(function(a, b) {\n var aIsArray = Array.isArray(a);\n var bIsArray = Array.isArray(b);\n\n if (aIsArray && bIsArray ) {\n return a.concat(b);\n }\n if (aIsArray) {\n a.push(b);\n\n return a;\n }\n if (bIsArray) {\n return [a].concat(b);\n }\n\n return [a, b];\n });\n};\n\nexports.isFlat = function(array) {\n if (!array) {\n return false;\n }\n\n for (var i = 0; i < array.length; ++i) {\n if (Array.isArray(array[i])) {\n return false;\n }\n }\n\n return true;\n};\n\nexports.flatten = function() {\n var result = exports.argsToArray.apply(null, arguments);\n\n while (!exports.isFlat(result)) {\n result = exports.flattenShallow(result);\n }\n\n return result;\n};\n\nexports.argsToArray = function(args) {\n var result = [];\n\n exports.arrayEach(args, function(value) {\n result.push(value);\n });\n\n return result;\n};\n\nexports.numbers = function() {\n var possibleNumbers = this.flatten.apply(null, arguments);\n return possibleNumbers.filter(function(el) {\n return typeof el === 'number';\n });\n};\n\nexports.cleanFloat = function(number) {\n var power = 1e14;\n return Math.round(number * power) / power;\n};\n\nexports.parseBool = function(bool) {\n if (typeof bool === 'boolean') {\n return bool;\n }\n\n if (bool instanceof Error) {\n return bool;\n }\n\n if (typeof bool === 'number') {\n return bool !== 0;\n }\n\n if (typeof bool === 'string') {\n var up = bool.toUpperCase();\n if (up === 'TRUE') {\n return true;\n }\n\n if (up === 'FALSE') {\n return false;\n }\n }\n\n if (bool instanceof Date && !isNaN(bool)) {\n return true;\n }\n\n return error.value;\n};\n\nexports.parseNumber = function(string) {\n if (string instanceof Error) {\n return string;\n }\n if (string === undefined || string === null || string === '') {\n return 0;\n }\n if (typeof string === \"boolean\") {\n string = +string;\n }\n if (!isNaN(string)) {\n return parseFloat(string);\n }\n\n return error.value;\n};\n\nexports.parseString = function(string) {\n if (string instanceof Error) {\n return string;\n }\n if (string === undefined || string === null) {\n return '';\n }\n\n return string.toString();\n};\n\nexports.parseNumberArray = function(arr) {\n var len;\n\n if (!arr || (len = arr.length) === 0) {\n return error.value;\n }\n\n var parsed;\n\n while (len--) {\n if (arr[len] instanceof Error) {\n return arr[len];\n }\n parsed = exports.parseNumber(arr[len]);\n if (parsed instanceof Error) {\n return parsed;\n }\n arr[len] = parsed;\n }\n\n return arr;\n};\n\nexports.parseMatrix = function(matrix) {\n var n;\n\n if (!matrix || (n = matrix.length) === 0) {\n return error.value;\n }\n var pnarr;\n\n for (var i = 0; i < matrix.length; i++) {\n pnarr = exports.parseNumberArray(matrix[i]);\n matrix[i] = pnarr;\n\n if (pnarr instanceof Error) {\n return pnarr;\n }\n }\n\n return matrix;\n};\n\nfunction serialNumberToDate(serial) {\n if (serial < 60) {\n serial += 1;\n }\n var utc_days = Math.floor(serial - 25569);\n var utc_value = utc_days * 86400;\n var date_info = new Date(utc_value * 1000);\n\n var fractional_day = serial - Math.floor(serial) + 0.0000001;\n\n var total_seconds = Math.floor(86400 * fractional_day);\n\n var seconds = total_seconds % 60;\n\n total_seconds -= seconds;\n\n var hours = Math.floor(total_seconds / (60 * 60));\n var minutes = Math.floor(total_seconds / 60) % 60;\n var days = date_info.getDate();\n var month = date_info.getMonth();\n\n if (serial >= 60 && serial < 61) {\n var days = 29;\n var month = 1;\n }\n\n return new Date(date_info.getFullYear(), month, days, hours, minutes, seconds);\n}\n\nexports.parseDate = function (date) {\n if (!isNaN(date)) {\n if (date instanceof Date) {\n return new Date(date);\n }\n var d = parseFloat(date);\n if (d < 0 || d >= 2958466) {\n return error.num;\n }\n return serialNumberToDate(d);\n }\n if (typeof date === 'string') {\n date = new Date(date);\n if (!isNaN(date)) {\n return date;\n }\n }\n return error.value;\n};\n\nexports.parseDateArray = function(arr) {\n var len = arr.length;\n var parsed;\n while (len--) {\n parsed = this.parseDate(arr[len]);\n if (parsed === error.value) {\n return parsed;\n }\n arr[len] = parsed;\n }\n return arr;\n};\n\nexports.anyError = function() {\n for (var n = 0; n < arguments.length; n++) {\n if (arguments[n] instanceof Error) {\n return arguments[n];\n }\n }\n return undefined;\n};\n\nexports.isDefined = function (arg) {\n return arg !== undefined && arg !== null;\n};\n\nexports.anyIsError = function() {\n var n = arguments.length;\n while (n--) {\n if (arguments[n] instanceof Error) {\n return true;\n }\n }\n return false;\n};\n\nexports.anyIsString = function() {\n var n = arguments.length;\n while (n--) {\n if (typeof arguments[n] === 'string') {\n return true;\n }\n }\n return false;\n};\n\nexports.arrayValuesToNumbers = function(arr) {\n var n = arr.length;\n var el;\n while (n--) {\n el = arr[n];\n if (typeof el === 'number') {\n continue;\n }\n if (el === true) {\n arr[n] = 1;\n continue;\n }\n if (el === false) {\n arr[n] = 0;\n continue;\n }\n if (typeof el === 'string') {\n var number = this.parseNumber(el);\n if (number instanceof Error) {\n arr[n] = 0;\n } else {\n arr[n] = number;\n }\n }\n }\n return arr;\n};\n\nexports.rest = function(array, idx) {\n idx = idx || 1;\n if (!array || typeof array.slice !== 'function') {\n return array;\n }\n return array.slice(idx);\n};\n\nexports.initial = function(array, idx) {\n idx = idx || 1;\n if (!array || typeof array.slice !== 'function') {\n return array;\n }\n return array.slice(0, array.length - idx);\n};\n\nexports.arrayEach = function(array, iteratee) {\n var index = -1, length = array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n\n return array;\n};\n\nexports.transpose = function(matrix) {\n if(!matrix) {\n return error.value;\n }\n\n return matrix[0].map(function(col, i) {\n return matrix.map(function(row) {\n return row[i];\n });\n });\n};\n","var defaultOperator = '=';\nvar validSymbols = ['>', '>=', '<', '<=', '=', '<>'];\nvar TOKEN_TYPE_OPERATOR = 'operator';\nvar TOKEN_TYPE_LITERAL = 'literal';\nvar SUPPORTED_TOKENS = [TOKEN_TYPE_OPERATOR, TOKEN_TYPE_LITERAL];\n\nexports.TOKEN_TYPE_OPERATOR = TOKEN_TYPE_OPERATOR;\nexports.TOKEN_TYPE_LITERAL = TOKEN_TYPE_LITERAL;\n\n/**\n * Create token which describe passed symbol/value.\n *\n * @param {String} value Value/Symbol to describe.\n * @param {String} type Type of the token 'operator' or 'literal'.\n * @return {Object}\n */\nfunction createToken(value, type) {\n if (SUPPORTED_TOKENS.indexOf(type) === -1) {\n throw new Error('Unsupported token type: ' + type);\n }\n\n return {\n value: value,\n type: type,\n };\n}\n\n/**\n * Tries to cast numeric values to their type passed as a string.\n *\n * @param {*} value\n * @return {*}\n */\nfunction castValueToCorrectType(value) {\n if (typeof value !== 'string') {\n return value;\n }\n\n if (/^\\d+(\\.\\d+)?$/.test(value)) {\n value = value.indexOf('.') === -1 ? parseInt(value, 10) : parseFloat(value);\n }\n\n return value;\n}\n\n/**\n * Generate stream of tokens from passed expression.\n *\n * @param {String} expression\n * @return {String[]}\n */\nfunction tokenizeExpression(expression) {\n var expressionLength = expression.length;\n var tokens = [];\n var cursorIndex = 0;\n var processedValue = '';\n var processedSymbol = '';\n\n while (cursorIndex < expressionLength) {\n var char = expression.charAt(cursorIndex);\n\n switch (char) {\n case '>':\n case '<':\n case '=':\n processedSymbol = processedSymbol + char;\n\n if (processedValue.length > 0) {\n tokens.push(processedValue);\n processedValue = '';\n }\n break;\n default:\n if (processedSymbol.length > 0) {\n tokens.push(processedSymbol);\n processedSymbol = '';\n }\n\n processedValue = processedValue + char;\n break;\n }\n cursorIndex++;\n }\n\n if (processedValue.length > 0) {\n tokens.push(processedValue);\n }\n if (processedSymbol.length > 0) {\n tokens.push(processedSymbol);\n }\n\n return tokens;\n};\n\n/**\n * Analyze and convert tokens to an object which describes their meaning.\n *\n * @param {String[]} tokens\n * @return {Object[]}\n */\nfunction analyzeTokens(tokens) {\n var literalValue = '';\n var analyzedTokens = [];\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n if (i === 0 && validSymbols.indexOf(token) >= 0) {\n analyzedTokens.push(createToken(token, TOKEN_TYPE_OPERATOR));\n } else {\n literalValue += token;\n }\n }\n\n if (literalValue.length > 0) {\n analyzedTokens.push(createToken(castValueToCorrectType(literalValue), TOKEN_TYPE_LITERAL));\n }\n\n if (analyzedTokens.length > 0 && analyzedTokens[0].type !== TOKEN_TYPE_OPERATOR) {\n analyzedTokens.unshift(createToken(defaultOperator, TOKEN_TYPE_OPERATOR));\n }\n\n return analyzedTokens;\n};\n\n/**\n * Compute/Evaluate an expression passed as an array of tokens.\n *\n * @param {Object[]} tokens\n * @return {Boolean}\n */\nfunction computeExpression(tokens) {\n var values = [];\n var operator;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n\n switch (token.type) {\n case TOKEN_TYPE_OPERATOR:\n operator = token.value;\n break;\n case TOKEN_TYPE_LITERAL:\n values.push(token.value);\n break;\n }\n }\n\n return evaluate(values, operator);\n};\n\n/**\n * Evaluate values based on passed math operator.\n *\n * @param {*} values\n * @param {String} operator\n * @return {Boolean}\n */\nfunction evaluate(values, operator) {\n var result = false;\n\n switch (operator) {\n case '>':\n result = values[0] > values[1];\n break;\n case '>=':\n result = values[0] >= values[1];\n break;\n case '<':\n result = values[0] < values[1];\n break;\n case '<=':\n result = values[0] <= values[1];\n break;\n case '=':\n result = values[0] == values[1];\n break;\n case '<>':\n result = values[0] != values[1];\n break;\n }\n\n return result;\n}\n\nexports.parse = function(expression) {\n return analyzeTokens(tokenizeExpression(expression));\n};\nexports.createToken = createToken;\nexports.compute = computeExpression;\n","exports.nil = new Error('#NULL!');\nexports.div0 = new Error('#DIV/0!');\nexports.value = new Error('#VALUE!');\nexports.ref = new Error('#REF!');\nexports.name = new Error('#NAME?');\nexports.num = new Error('#NUM!');\nexports.na = new Error('#N/A');\nexports.error = new Error('#ERROR!');\nexports.data = new Error('#GETTING_DATA');\n","'use strict';\n/**\n * Validators are functions which assert certain type.\n * They can return a string which can then be used\n * to display a helpful error message.\n * They can also return a function for a custom error message.\n */\nvar isPlainObject = require('is-plain-obj');\nvar xtend = require('xtend');\n\nvar DEFAULT_ERROR_PATH = 'value';\nvar NEWLINE_INDENT = '\\n ';\n\nvar v = {};\n\n/**\n * Runners\n *\n * Take root validators and run assertion\n */\nv.assert = function(rootValidator, options) {\n options = options || {};\n return function(value) {\n var message = validate(rootValidator, value);\n // all good\n if (!message) {\n return;\n }\n\n var errorMessage = processMessage(message, options);\n\n if (options.apiName) {\n errorMessage = options.apiName + ': ' + errorMessage;\n }\n\n throw new Error(errorMessage);\n };\n};\n\n/**\n * Higher Order Validators\n *\n * validators which take other validators as input\n * and output a new validator\n */\nv.shape = function shape(validatorObj) {\n var validators = objectEntries(validatorObj);\n return function shapeValidator(value) {\n var validationResult = validate(v.plainObject, value);\n\n if (validationResult) {\n return validationResult;\n }\n\n var key, validator;\n var errorMessages = [];\n\n for (var i = 0; i < validators.length; i++) {\n key = validators[i].key;\n validator = validators[i].value;\n validationResult = validate(validator, value[key]);\n\n if (validationResult) {\n // return [key].concat(validationResult);\n errorMessages.push([key].concat(validationResult));\n }\n }\n\n if (errorMessages.length < 2) {\n return errorMessages[0];\n }\n\n // enumerate all the error messages\n return function(options) {\n errorMessages = errorMessages.map(function(message) {\n var key = message[0];\n var renderedMessage = processMessage(message, options)\n .split('\\n')\n .join(NEWLINE_INDENT); // indents any inner nesting\n return '- ' + key + ': ' + renderedMessage;\n });\n\n var objectId = options.path.join('.');\n var ofPhrase = objectId === DEFAULT_ERROR_PATH ? '' : ' of ' + objectId;\n\n return (\n 'The following properties' +\n ofPhrase +\n ' have invalid values:' +\n NEWLINE_INDENT +\n errorMessages.join(NEWLINE_INDENT)\n );\n };\n };\n};\n\nv.strictShape = function strictShape(validatorObj) {\n var shapeValidator = v.shape(validatorObj);\n return function strictShapeValidator(value) {\n var shapeResult = shapeValidator(value);\n if (shapeResult) {\n return shapeResult;\n }\n\n var invalidKeys = Object.keys(value).reduce(function(memo, valueKey) {\n if (validatorObj[valueKey] === undefined) {\n memo.push(valueKey);\n }\n return memo;\n }, []);\n\n if (invalidKeys.length !== 0) {\n return function() {\n return 'The following keys are invalid: ' + invalidKeys.join(', ');\n };\n }\n };\n};\n\nv.arrayOf = function arrayOf(validator) {\n return createArrayValidator(validator);\n};\n\nv.tuple = function tuple() {\n var validators = Array.isArray(arguments[0])\n ? arguments[0]\n : Array.prototype.slice.call(arguments);\n return createArrayValidator(validators);\n};\n\n// Currently array validation fails when the first invalid item is found.\nfunction createArrayValidator(validators) {\n var validatingTuple = Array.isArray(validators);\n var getValidator = function(index) {\n if (validatingTuple) {\n return validators[index];\n }\n return validators;\n };\n\n return function arrayValidator(value) {\n var validationResult = validate(v.plainArray, value);\n if (validationResult) {\n return validationResult;\n }\n\n if (validatingTuple && value.length !== validators.length) {\n return 'an array with ' + validators.length + ' items';\n }\n\n for (var i = 0; i < value.length; i++) {\n validationResult = validate(getValidator(i), value[i]);\n if (validationResult) {\n return [i].concat(validationResult);\n }\n }\n };\n}\n\nv.required = function required(validator) {\n function requiredValidator(value) {\n if (value == null) {\n return function(options) {\n return formatErrorMessage(\n options,\n isArrayCulprit(options.path)\n ? 'cannot be undefined/null.'\n : 'is required.'\n );\n };\n }\n return validator.apply(this, arguments);\n }\n requiredValidator.__required = true;\n\n return requiredValidator;\n};\n\nv.oneOfType = function oneOfType() {\n var validators = Array.isArray(arguments[0])\n ? arguments[0]\n : Array.prototype.slice.call(arguments);\n return function oneOfTypeValidator(value) {\n var messages = validators\n .map(function(validator) {\n return validate(validator, value);\n })\n .filter(Boolean);\n\n // If we don't have as many messages as no. of validators,\n // then at least one validator was ok with the value.\n if (messages.length !== validators.length) {\n return;\n }\n\n // check primitive type\n if (\n messages.every(function(message) {\n return message.length === 1 && typeof message[0] === 'string';\n })\n ) {\n return orList(\n messages.map(function(m) {\n return m[0];\n })\n );\n }\n\n // Complex oneOfTypes like\n // `v.oneOftypes(v.shape({name: v.string})`, `v.shape({name: v.number}))`\n // are complex ¯\\_(ツ)_/¯. For the current scope only returning the longest message.\n return messages.reduce(function(max, arr) {\n return arr.length > max.length ? arr : max;\n });\n };\n};\n\n/**\n * Meta Validators\n * which take options as argument (not validators)\n * and return a new primitive validator\n */\nv.equal = function equal(compareWith) {\n return function equalValidator(value) {\n if (value !== compareWith) {\n return JSON.stringify(compareWith);\n }\n };\n};\n\nv.oneOf = function oneOf() {\n var options = Array.isArray(arguments[0])\n ? arguments[0]\n : Array.prototype.slice.call(arguments);\n var validators = options.map(function(value) {\n return v.equal(value);\n });\n\n return v.oneOfType.apply(this, validators);\n};\n\nv.range = function range(compareWith) {\n var min = compareWith[0];\n var max = compareWith[1];\n return function rangeValidator(value) {\n var validationResult = validate(v.number, value);\n\n if (validationResult || value < min || value > max) {\n return 'number between ' + min + ' & ' + max + ' (inclusive)';\n }\n };\n};\n\n/**\n * Primitive validators\n *\n * simple validators which return a string or undefined\n */\nv.any = function any() {\n return;\n};\n\nv.boolean = function boolean(value) {\n if (typeof value !== 'boolean') {\n return 'boolean';\n }\n};\n\nv.number = function number(value) {\n if (typeof value !== 'number') {\n return 'number';\n }\n};\n\nv.plainArray = function plainArray(value) {\n if (!Array.isArray(value)) {\n return 'array';\n }\n};\n\nv.plainObject = function plainObject(value) {\n if (!isPlainObject(value)) {\n return 'object';\n }\n};\n\nv.string = function string(value) {\n if (typeof value !== 'string') {\n return 'string';\n }\n};\n\nv.func = function func(value) {\n if (typeof value !== 'function') {\n return 'function';\n }\n};\n\nfunction validate(validator, value) {\n // assertions are optional by default unless wrapped in v.require\n if (value == null && !validator.hasOwnProperty('__required')) {\n return;\n }\n\n var result = validator(value);\n\n if (result) {\n return Array.isArray(result) ? result : [result];\n }\n}\n\nfunction processMessage(message, options) {\n // message array follows the convention\n // [...path, result]\n // path is an array of object keys / array indices\n // result is output of the validator\n var len = message.length;\n\n var result = message[len - 1];\n var path = message.slice(0, len - 1);\n\n if (path.length === 0) {\n path = [DEFAULT_ERROR_PATH];\n }\n options = xtend(options, { path: path });\n\n return typeof result === 'function'\n ? result(options) // allows customization of result\n : formatErrorMessage(options, prettifyResult(result));\n}\n\nfunction orList(list) {\n if (list.length < 2) {\n return list[0];\n }\n if (list.length === 2) {\n return list.join(' or ');\n }\n return list.slice(0, -1).join(', ') + ', or ' + list.slice(-1);\n}\n\nfunction prettifyResult(result) {\n return 'must be ' + addArticle(result) + '.';\n}\n\nfunction addArticle(nounPhrase) {\n if (/^an? /.test(nounPhrase)) {\n return nounPhrase;\n }\n if (/^[aeiou]/i.test(nounPhrase)) {\n return 'an ' + nounPhrase;\n }\n if (/^[a-z]/i.test(nounPhrase)) {\n return 'a ' + nounPhrase;\n }\n return nounPhrase;\n}\n\nfunction formatErrorMessage(options, prettyResult) {\n var arrayCulprit = isArrayCulprit(options.path);\n var output = options.path.join('.') + ' ' + prettyResult;\n var prepend = arrayCulprit ? 'Item at position ' : '';\n\n return prepend + output;\n}\n\nfunction isArrayCulprit(path) {\n return typeof path[path.length - 1] == 'number' || typeof path[0] == 'number';\n}\n\nfunction objectEntries(obj) {\n return Object.keys(obj || {}).map(function(key) {\n return { key: key, value: obj[key] };\n });\n}\n\nv.validate = validate;\nv.processMessage = processMessage;\n\nmodule.exports = v;\n","'use strict';\nvar shajs = require('sha.js')\n/**\n * Construct a new mapbox event client to send interaction events to the mapbox event service\n * @param {Object} options options with which to create the service\n * @param {String} options.accessToken the mapbox access token to make requests\n * @private\n */\nfunction MapboxEventManager(options) {\n this.origin = options.origin || 'https://api.mapbox.com';\n this.endpoint = '/events/v2';\n this.access_token = options.accessToken;\n this.version = '0.0.1'\n this.sessionID = this.generateSessionID();\n this.userAgent = this.getUserAgent();\n // parse global options to be sent with each request\n this.countries = (options.countries) ? options.countries.split(\",\") : null;\n this.types = (options.types) ? options.types.split(\",\") : null;\n this.bbox = (options.bbox) ? options.bbox : null;\n this.language = (options.language) ? options.language.split(\",\") : null;\n this.limit = (options.limit) ? +options.limit : null;\n this.locale = navigator.language || null;\n this.enableEventLogging = this.shouldEnableLogging(options);\n // keep some state to deduplicate requests if necessary\n this.lastSentInput = \"\";\n this.lastSentIndex = 0;\n}\n\nMapboxEventManager.prototype = {\n\n /**\n * Send a search.select event to the mapbox events service\n * This event marks the array index of the item selected by the user out of the array of possible options\n * @private\n * @param {Object} selected the geojson feature selected by the user\n * @param {Object} geocoder a mapbox-gl-geocoder instance\n * @param {Function} callback a callback function to invoke once the event has been sent (optional)\n * @returns {Promise}\n */\n select: function (selected, geocoder, callback) {\n var resultIndex = this.getSelectedIndex(selected, geocoder);\n var payload = this.getEventPayload('search.select', geocoder);\n payload.resultIndex = resultIndex;\n if ((resultIndex === this.lastSentIndex && payload.queryString === this.lastSentInput) || resultIndex == -1) {\n // don't log duplicate events if the user re-selected the same feature on the same search\n if (callback) return callback();\n else return;\n }\n this.lastSentIndex = resultIndex;\n this.lastSentInput = payload.queryString;\n return this.send(payload, callback)\n },\n\n /**\n * Send a search-start event to the mapbox events service\n * This turnstile event marks when a user starts a new search\n * @private\n * @param {Object} geocoder a mapbox-gl-geocoder instance\n * @param {Function} callback \n * @returns {Promise}\n */\n start: function (geocoder, callback) {\n var payload = this.getEventPayload('search.start', geocoder);\n return this.send(payload, callback);\n },\n\n /**\n * Send an event to the events service\n * \n * The event is skipped if the instance is not enabled to send logging events\n * \n * @private\n * @param {Object} payload the http POST body of the event\n * @returns {Promise}\n */\n send: function (payload, callback) {\n if (!callback) callback = function () {\n return\n };\n if (!this.enableEventLogging) {\n return callback();\n }\n var options = this.getRequestOptions(payload);\n this.request(options, function (err) {\n if (err) return this.handleError(err, callback);\n if (callback) return callback();\n })\n },\n /**\n * Get http request options\n * @private\n * @param {*} payload \n */\n getRequestOptions: function (payload) {\n var options = {\n // events must be sent with POST\n method: \"POST\",\n host: this.origin,\n path: this.endpoint + \"?access_token=\" + this.access_token,\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify([payload]) //events are arrays\n }\n return options\n },\n\n /**\n * Get the event payload to send to the events service\n * Most payload properties are shared across all events\n * @private\n * @param {String} event the name of the event to send to the events service. Valid options are 'search.start', 'search.select', 'search.feedback'.\n * @param {Object} geocoder a mapbox-gl-geocoder instance \n * @returns {Object} an event payload \n */\n getEventPayload: function (event, geocoder) {\n var proximity;\n if (!geocoder.options.proximity) proximity = null;\n else proximity = [geocoder.options.proximity.longitude, geocoder.options.proximity.latitude];\n\n var zoom = (geocoder._map) ? geocoder._map.getZoom() : null;\n return {\n event: event,\n created: +new Date(),\n sessionIdentifier: this.sessionID,\n country: this.countries,\n userAgent: this.userAgent,\n language: this.language,\n bbox: this.bbox,\n types: this.types,\n endpoint: 'mapbox.places',\n // fuzzyMatch: search.fuzzy, //todo --> add to plugin\n proximity: proximity,\n limit: geocoder.options.limit,\n // routing: search.routing, //todo --> add to plugin\n queryString: geocoder.inputString,\n mapZoom: zoom,\n keyboardLocale: this.locale\n }\n },\n\n /**\n * Wraps the request function for easier testing\n * Make an http request and invoke a callback\n * @private\n * @param {Object} opts options describing the http request to be made\n * @param {Function} callback the callback to invoke when the http request is completed\n */\n request: function (opts, callback) {\n var xhttp = new XMLHttpRequest();\n xhttp.onreadystatechange = function() {\n if (this.readyState == 4 ) {\n if (this.status == 204){\n //success\n return callback(null);\n }else {\n return callback(this.statusText);\n }\n }\n };\n xhttp.open(opts.method, opts.host + opts.path, true);\n for (var header in opts.headers){\n var headerValue = opts.headers[header];\n xhttp.setRequestHeader(header, headerValue)\n }\n xhttp.send(opts.body);\n },\n\n /**\n * Handle an error that occurred while making a request\n * @param {Object} err an error instance to log\n * @private\n */\n handleError: function (err, callback) {\n if (callback) return callback(err);\n },\n\n /**\n * Generate a session ID to be returned with all of the searches made by this geocoder instance\n * ID is random and cannot be tracked across sessions\n * @private\n */\n generateSessionID: function () {\n return new shajs.sha256().update(Math.random().toString()).digest('hex')\n },\n\n /**\n * Get a user agent string to send with the request to the events service\n * @private\n */\n getUserAgent: function () {\n return 'mapbox-gl-geocoder.' + this.version + \".\" + navigator.userAgent;\n },\n\n /**\n * Get the 0-based numeric index of the item that the user selected out of the list of options\n * @private\n * @param {Object} selected the geojson feature selected by the user\n * @param {Object} geocoder a Mapbox-GL-Geocoder instance\n * @returns {Number} the index of the selected result\n */\n getSelectedIndex: function (selected, geocoder) {\n var results = geocoder._typeahead.data;\n var selectedID = selected.id;\n var resultIDs = results.map(function (feature) {\n return feature.id;\n });\n var selectedIdx = resultIDs.indexOf(selectedID);\n return selectedIdx;\n },\n\n /**\n * Check whether events should be logged\n * Clients using a localGeocoder or an origin other than mapbox should not have events logged\n * @private\n */\n shouldEnableLogging: function (options) {\n if (this.origin.indexOf('api.mapbox.com') == -1) return false;\n // hard to make sense of events when a local instance is suplementing results from origin\n if (options.localGeocoder) return false;\n // hard to make sense of events when a custom filter is in use\n if (options.filter) return false;\n return true;\n }\n}\n\n\n\nmodule.exports = MapboxEventManager;","module.exports = {\n 'country.3148': {\n 'name': 'France',\n 'bbox': [[-4.59235, 41.380007], [9.560016, 51.148506]]\n },\n 'country.3145': {\n 'name': 'United States',\n 'bbox': [[-171.791111, 18.91619], [-66.96466, 71.357764]]\n },\n 'country.330': {\n 'name': 'Russia',\n 'bbox': [[19.66064, 41.151416], [190.10042, 81.2504]]\n },\n 'country.3179': {\n 'name': 'Canada',\n 'bbox': [[-140.99778, 41.675105], [-52.648099, 83.23324]]\n }\n};\n","'use strict';\n\nvar Typeahead = require('suggestions');\nvar debounce = require('lodash.debounce');\nvar extend = require('xtend');\nvar EventEmitter = require('events').EventEmitter;\nvar exceptions = require('./exceptions');\nvar MapboxClient = require('@mapbox/mapbox-sdk');\nvar mbxGeocoder = require('@mapbox/mapbox-sdk/services/geocoding');\nvar MapboxEventManager = require('./events');\nvar geocoderService;\n\n/**\n * A geocoder component using Mapbox Geocoding API\n * @class MapboxGeocoder\n * @param {Object} options\n * @param {String} options.accessToken Required.\n * @param {String} options.origin Use to set a custom API origin. Defaults to https://api.mapbox.com.\n * @param {Number} [options.zoom=16] On geocoded result what zoom level should the map animate to when a `bbox` isn't found in the response. If a `bbox` is found the map will fit to the `bbox`.\n * @param {Boolean} [options.flyTo=true] If false, animating the map to a selected result is disabled.\n * @param {String} [options.placeholder=\"Search\"] Override the default placeholder attribute value.\n * @param {Object} [options.proximity] a proximity argument: this is\n * a geographical point given as an object with latitude and longitude\n * properties. Search results closer to this point will be given\n * higher priority.\n * @param {Boolean} [options.trackProximity=false] If true, the geocoder proximity will automatically update based on the map view.\n * @param {Array} [options.bbox] a bounding box argument: this is\n * a bounding box given as an array in the format [minX, minY, maxX, maxY].\n * Search results will be limited to the bounding box.\n * @param {string} [options.countries] a comma separated list of country codes to\n * limit results to specified country or countries.\n * @param {string} [options.types] a comma seperated list of types that filter\n * results to match those specified. See https://docs.mapbox.com/api/search/#data-types\n * for available types.\n * If reverseGeocode is enabled, you should specify one type. If you configure more than one type, the first type will be used.\n * @param {Number} [options.minLength=2] Minimum number of characters to enter before results are shown.\n * @param {Number} [options.limit=5] Maximum number of results to show.\n * @param {string} [options.language] Specify the language to use for response text and query result weighting. Options are IETF language tags comprised of a mandatory ISO 639-1 language code and optionally one or more IETF subtags for country or script. More than one value can also be specified, separated by commas.\n * @param {Function} [options.filter] A function which accepts a Feature in the [Carmen GeoJSON](https://github.com/mapbox/carmen/blob/master/carmen-geojson.md) format to filter out results from the Geocoding API response before they are included in the suggestions list. Return `true` to keep the item, `false` otherwise.\n * @param {Function} [options.localGeocoder] A function accepting the query string which performs local geocoding to supplement results from the Mapbox Geocoding API. Expected to return an Array of GeoJSON Features in the [Carmen GeoJSON](https://github.com/mapbox/carmen/blob/master/carmen-geojson.md) format.\n * @param {'distance'|'score'} [options.reverseMode='distance'] - Set the factors that are used to sort nearby results.\n * @param {boolean} [options.reverseGeocode] Enable reverse geocoding. Defaults to false. Expects coordinates to be lat, lon.\n * @example\n * var geocoder = new MapboxGeocoder({ accessToken: mapboxgl.accessToken });\n * map.addControl(geocoder);\n * @return {MapboxGeocoder} `this`\n *\n */\n\nfunction MapboxGeocoder(options) {\n this._eventEmitter = new EventEmitter();\n this.options = extend({}, this.options, options);\n this.inputString = '';\n this.fresh = true;\n}\n\nMapboxGeocoder.prototype = {\n options: {\n placeholder: 'Search',\n zoom: 16,\n flyTo: true,\n trackProximity: false,\n minLength: 2,\n reverseGeocode: false,\n limit: 5,\n origin: 'https://api.mapbox.com'\n },\n\n onAdd: function(map) {\n this._map = map;\n\n geocoderService = mbxGeocoder(\n MapboxClient({\n accessToken: this.options.accessToken,\n origin: this.options.origin\n })\n );\n\n this.eventManager = new MapboxEventManager(this.options);\n\n this._onChange = this._onChange.bind(this);\n this._onKeyDown = this._onKeyDown.bind(this);\n this._onQueryResult = this._onQueryResult.bind(this);\n this._clear = this._clear.bind(this);\n this._updateProximity = this._updateProximity.bind(this);\n\n var el = (this.container = document.createElement('div'));\n el.className = 'mapboxgl-ctrl-geocoder mapboxgl-ctrl';\n\n var icon = document.createElement('span');\n icon.className = 'geocoder-icon geocoder-icon-search';\n\n this._inputEl = document.createElement('input');\n this._inputEl.type = 'text';\n this._inputEl.placeholder = this.options.placeholder;\n\n this._inputEl.addEventListener('keydown', this._onKeyDown);\n this._inputEl.addEventListener('change', this._onChange);\n\n var actions = document.createElement('div');\n actions.classList.add('geocoder-pin-right');\n\n this._clearEl = document.createElement('button');\n this._clearEl.className = 'geocoder-icon geocoder-icon-close';\n this._clearEl.setAttribute('aria-label', 'Clear');\n this._clearEl.addEventListener('click', this._clear);\n\n this._loadingEl = document.createElement('span');\n this._loadingEl.className = 'geocoder-icon geocoder-icon-loading';\n\n actions.appendChild(this._clearEl);\n actions.appendChild(this._loadingEl);\n\n el.appendChild(icon);\n el.appendChild(this._inputEl);\n el.appendChild(actions);\n\n this._typeahead = new Typeahead(this._inputEl, [], {\n filter: false,\n minLength: this.options.minLength,\n limit: this.options.limit\n });\n this._typeahead.getItemValue = function(item) {\n return item.place_name;\n };\n\n if (this.options.trackProximity) {\n this._updateProximity();\n this._map.on('moveend', this._updateProximity);\n }\n\n return el;\n },\n\n onRemove: function() {\n this.container.parentNode.removeChild(this.container);\n\n if (this.options.trackProximity) {\n this._map.off('moveend', this._updateProximity);\n }\n\n this._map = null;\n\n return this;\n },\n\n _onKeyDown: debounce(function(e) {\n \n // if target has shadowRoot, then get the actual active element inside the shadowRoot\n var target = e.target.shadowRoot\n ? e.target.shadowRoot.activeElement\n : e.target;\n if (!target.value) {\n this.fresh = true;\n // the user has removed all the text\n this._clear(e);\n return (this._clearEl.style.display = 'none');\n }\n\n // TAB, ESC, LEFT, RIGHT, ENTER, UP, DOWN\n if (e.metaKey || [9, 27, 37, 39, 13, 38, 40].indexOf(e.keyCode) !== -1)\n return;\n\n if (target.value.length >= this.options.minLength) {\n this._geocode(target.value);\n }\n }, 200),\n\n _onChange: function() {\n if (this._inputEl.value) this._clearEl.style.display = 'block';\n var selected = this._typeahead.selected;\n if (selected) {\n if (this.options.flyTo) {\n if (!exceptions[selected.id] && selected.bbox) {\n var bbox = selected.bbox;\n this._map.fitBounds([[bbox[0], bbox[1]], [bbox[2], bbox[3]]]);\n } else if (exceptions[selected.id]) {\n // Certain geocoder search results return (and therefore zoom to fit)\n // an unexpectedly large bounding box: for example, both Russia and the\n // USA span both sides of -180/180, or France includes the island of\n // Reunion in the Indian Ocean. An incomplete list of these exceptions\n // at ./exceptions.json provides \"reasonable\" bounding boxes as a\n // short-term solution; this may be amended as necessary.\n this._map.fitBounds(exceptions[selected.id].bbox);\n } else {\n this._map.flyTo({\n center: selected.center,\n zoom: this.options.zoom\n });\n }\n }\n this._eventEmitter.emit('result', { result: selected });\n this.eventManager.select(selected, this);\n }\n },\n\n _geocode: function(searchInput) {\n this._loadingEl.style.display = 'block';\n this._eventEmitter.emit('loading', { query: searchInput });\n this.inputString = searchInput;\n // Possible config proprerties to pass to client\n var keys = [\n 'bbox',\n 'limit',\n 'proximity',\n 'countries',\n 'types',\n 'language',\n 'reverseMode'\n ];\n var self = this;\n // Create config object\n var config = keys.reduce(function(config, key) {\n if (self.options[key]) {\n // countries, types, and language need to be passed in as arrays to client\n // https://github.com/mapbox/mapbox-sdk-js/blob/master/services/geocoding.js#L38-L47\n ['countries', 'types', 'language'].indexOf(key) > -1\n ? (config[key] = self.options[key].split(/[\\s,]+/))\n : (config[key] = self.options[key]);\n\n if (key === 'proximity' && self.options[key] && self.options[key].longitude && self.options[key].latitude) {\n config[key] = [self.options[key].longitude, self.options[key].latitude]\n }\n }\n return config;\n }, {});\n\n var request;\n // check if searchInput resembles coordinates, and if it does,\n // make the request a reverseGeocode\n if (\n this.options.reverseGeocode &&\n /(-?\\d+\\.?\\d*)[, ]+(-?\\d+\\.?\\d*)[ ]*$/.test(searchInput)\n ) {\n // parse coordinates\n var coords = searchInput.split(/[\\s(,)?]+/).map(function(c) {\n return parseFloat(c, 10);\n }).reverse();\n\n // client only accepts one type for reverseGeocode, so\n // use first config type if one, if not default to poi\n config.types ? [config.types[0]] : [\"poi\"];\n config = extend(config, { query: coords, limit: 1 });\n request = geocoderService.reverseGeocode(config).send();\n } else {\n config = extend(config, { query: searchInput });\n request = geocoderService.forwardGeocode(config).send();\n }\n\n var localGeocoderRes = [];\n if (this.options.localGeocoder) {\n localGeocoderRes = this.options.localGeocoder(searchInput);\n if (!localGeocoderRes) {\n localGeocoderRes = [];\n }\n }\n\n request.then(\n function(response) {\n this._loadingEl.style.display = 'none';\n\n var res = {};\n\n if (response.statusCode == '200') {\n res = response.body;\n }\n\n // supplement Mapbox Geocoding API results with locally populated results\n res.features = res.features\n ? localGeocoderRes.concat(res.features)\n : localGeocoderRes;\n\n // apply results filter if provided\n if (this.options.filter && res.features.length) {\n res.features = res.features.filter(this.options.filter);\n }\n\n if (res.features.length) {\n this._clearEl.style.display = 'block';\n } else {\n this._clearEl.style.display = 'none';\n this._typeahead.selected = null;\n }\n\n res.config = config;\n if (this.fresh){\n this.eventManager.start(this);\n this.fresh = false;\n }\n this._eventEmitter.emit('results', res);\n this._typeahead.update(res.features);\n }.bind(this)\n );\n\n request.catch(\n function(err) {\n this._loadingEl.style.display = 'none';\n\n // in the event of an error in the Mapbox Geocoding API still display results from the localGeocoder\n if (localGeocoderRes.length) {\n this._clearEl.style.display = 'block';\n } else {\n this._clearEl.style.display = 'none';\n this._typeahead.selected = null;\n }\n\n this._eventEmitter.emit('results', { features: localGeocoderRes });\n this._typeahead.update(localGeocoderRes);\n this._eventEmitter.emit('error', { error: err });\n }.bind(this)\n );\n\n return request;\n },\n\n _clear: function(ev) {\n if (ev) ev.preventDefault();\n this._inputEl.value = '';\n this._typeahead.selected = null;\n this._typeahead.clear();\n this._onChange();\n this._inputEl.focus();\n this._clearEl.style.display = 'none';\n this._eventEmitter.emit('clear');\n // reset the turnstile event\n this.fresh = true;\n },\n\n _onQueryResult: function(response) {\n var results = response.body;\n if (!results.features.length) return;\n var result = results.features[0];\n this._typeahead.selected = result;\n this._inputEl.value = result.place_name;\n this._onChange();\n },\n\n _updateProximity: function() {\n // proximity is designed for local scale, if the user is looking at the whole world,\n // it doesn't make sense to factor in the arbitrary centre of the map\n if (this._map.getZoom() > 9) {\n var center = this._map.getCenter().wrap();\n this.setProximity({ longitude: center.lng, latitude: center.lat });\n } else {\n this.setProximity(null);\n }\n },\n\n /**\n * Set & query the input\n * @param {string} searchInput location name or other search input\n * @returns {MapboxGeocoder} this\n */\n query: function(searchInput) {\n this._geocode(searchInput).then(this._onQueryResult);\n return this;\n },\n\n /**\n * Set input\n * @param {string} searchInput location name or other search input\n * @returns {MapboxGeocoder} this\n */\n setInput: function(searchInput) {\n // Set input value to passed value and clear everything else.\n this._inputEl.value = searchInput;\n this._typeahead.selected = null;\n this._typeahead.clear();\n this._onChange();\n return this;\n },\n\n /**\n * Set proximity\n * @param {Object} proximity The new options.proximity value. This is a geographical point given as an object with latitude and longitude properties.\n * @returns {MapboxGeocoder} this\n */\n setProximity: function(proximity) {\n this.options.proximity = proximity;\n return this;\n },\n\n /**\n * Get proximity\n * @returns {Object} The geocoder proximity\n */\n getProximity: function() {\n return this.options.proximity;\n },\n\n /**\n * Subscribe to events that happen within the plugin.\n * @param {String} type name of event. Available events and the data passed into their respective event objects are:\n *\n * - __clear__ `Emitted when the input is cleared`\n * - __loading__ `{ query } Emitted when the geocoder is looking up a query`\n * - __results__ `{ results } Fired when the geocoder returns a response`\n * - __result__ `{ result } Fired when input is set`\n * - __error__ `{ error } Error as string`\n * @param {Function} fn function that's called when the event is emitted.\n * @returns {MapboxGeocoder} this;\n */\n on: function(type, fn) {\n this._eventEmitter.on(type, fn);\n return this;\n },\n\n /**\n * Remove an event\n * @returns {MapboxGeocoder} this\n * @param {String} type Event name.\n * @param {Function} fn Function that should unsubscribe to the event emitted.\n */\n off: function(type, fn) {\n this._eventEmitter.removeListener(type, fn);\n return this;\n }\n};\n\nmodule.exports = MapboxGeocoder;\n","'use strict';\n\nvar client = require('./lib/client');\n\nmodule.exports = client;\n","'use strict';\n\nvar browser = require('./browser-layer');\nvar MapiClient = require('../classes/mapi-client');\n\nfunction BrowserClient(options) {\n MapiClient.call(this, options);\n}\nBrowserClient.prototype = Object.create(MapiClient.prototype);\nBrowserClient.prototype.constructor = BrowserClient;\n\nBrowserClient.prototype.sendRequest = browser.browserSend;\nBrowserClient.prototype.abortRequest = browser.browserAbort;\n\n/**\n * Create a client for the browser.\n *\n * @param {Object} options\n * @param {string} options.accessToken\n * @param {string} [options.origin]\n * @returns {MapiClient}\n */\nfunction createBrowserClient(options) {\n return new BrowserClient(options);\n}\n\nmodule.exports = createBrowserClient;\n","'use strict';\n\nvar MapiResponse = require('../classes/mapi-response');\nvar MapiError = require('../classes/mapi-error');\nvar constants = require('../constants');\nvar parseHeaders = require('../helpers/parse-headers');\n\n// Keys are request IDs, values are XHRs.\nvar requestsUnderway = {};\n\nfunction browserAbort(request) {\n var xhr = requestsUnderway[request.id];\n if (!xhr) return;\n xhr.abort();\n delete requestsUnderway[request.id];\n}\n\nfunction createResponse(request, xhr) {\n return new MapiResponse(request, {\n body: xhr.response,\n headers: parseHeaders(xhr.getAllResponseHeaders()),\n statusCode: xhr.status\n });\n}\n\nfunction normalizeBrowserProgressEvent(event) {\n var total = event.total;\n var transferred = event.loaded;\n var percent = (100 * transferred) / total;\n return {\n total: total,\n transferred: transferred,\n percent: percent\n };\n}\n\nfunction sendRequestXhr(request, xhr) {\n return new Promise(function(resolve, reject) {\n xhr.onprogress = function(event) {\n request.emitter.emit(\n constants.EVENT_PROGRESS_DOWNLOAD,\n normalizeBrowserProgressEvent(event)\n );\n };\n\n var file = request.file;\n if (file) {\n xhr.upload.onprogress = function(event) {\n request.emitter.emit(\n constants.EVENT_PROGRESS_UPLOAD,\n normalizeBrowserProgressEvent(event)\n );\n };\n }\n\n xhr.onerror = function(error) {\n reject(error);\n };\n\n xhr.onabort = function() {\n var mapiError = new MapiError({\n request: request,\n type: constants.ERROR_REQUEST_ABORTED\n });\n reject(mapiError);\n };\n\n xhr.onload = function() {\n delete requestsUnderway[request.id];\n if (xhr.status < 200 || xhr.status >= 400) {\n var mapiError = new MapiError({\n request: request,\n body: xhr.response,\n statusCode: xhr.status\n });\n reject(mapiError);\n return;\n }\n resolve(xhr);\n };\n\n var body = request.body;\n\n // matching service needs to send a www-form-urlencoded request\n if (typeof body === 'string') {\n xhr.send(body);\n } else if (body) {\n xhr.send(JSON.stringify(body));\n } else if (file) {\n xhr.send(file);\n } else {\n xhr.send();\n }\n\n requestsUnderway[request.id] = xhr;\n }).then(function(xhr) {\n return createResponse(request, xhr);\n });\n}\n\n// The accessToken argument gives this function flexibility\n// for Mapbox's internal client.\nfunction createRequestXhr(request, accessToken) {\n var url = request.url(accessToken);\n var xhr = new window.XMLHttpRequest();\n xhr.open(request.method, url);\n Object.keys(request.headers).forEach(function(key) {\n xhr.setRequestHeader(key, request.headers[key]);\n });\n return xhr;\n}\n\nfunction browserSend(request) {\n return Promise.resolve().then(function() {\n var xhr = createRequestXhr(request, request.client.accessToken);\n return sendRequestXhr(request, xhr);\n });\n}\n\nmodule.exports = {\n browserAbort: browserAbort,\n sendRequestXhr: sendRequestXhr,\n browserSend: browserSend,\n createRequestXhr: createRequestXhr\n};\n","'use strict';\n\nvar parseToken = require('@mapbox/parse-mapbox-token');\nvar MapiRequest = require('./mapi-request');\nvar constants = require('../constants');\n\n/**\n * A low-level Mapbox API client. Use it to create service clients\n * that share the same configuration.\n *\n * Services and `MapiRequest`s use the underlying `MapiClient` to\n * determine how to create, send, and abort requests in a way\n * that is appropriate to the configuration and environment\n * (Node or the browser).\n *\n * @class MapiClient\n * @property {string} accessToken - The Mapbox access token assigned\n * to this client.\n * @property {string} [origin] - The origin\n * to use for API requests. Defaults to https://api.mapbox.com.\n */\n\nfunction MapiClient(options) {\n if (!options || !options.accessToken) {\n throw new Error('Cannot create a client without an access token');\n }\n // Try parsing the access token to determine right away if it's valid.\n parseToken(options.accessToken);\n\n this.accessToken = options.accessToken;\n this.origin = options.origin || constants.API_ORIGIN;\n}\n\nMapiClient.prototype.createRequest = function createRequest(requestOptions) {\n return new MapiRequest(this, requestOptions);\n};\n\nmodule.exports = MapiClient;\n","'use strict';\n\nvar constants = require('../constants');\n\n/**\n * A Mapbox API error.\n *\n * If there's an error during the API transaction,\n * the Promise returned by `MapiRequest`'s [`send`](#send)\n * method should reject with a `MapiError`.\n *\n * @class MapiError\n * @hideconstructor\n * @property {MapiRequest} request - The errored request.\n * @property {string} type - The type of error. Usually this is `'HttpError'`.\n * If the request was aborted, so the error was\n * not sent from the server, the type will be\n * `'RequestAbortedError'`.\n * @property {number} [statusCode] - The numeric status code of\n * the HTTP response.\n * @property {Object | string} [body] - If the server sent a response body,\n * this property exposes that response, parsed as JSON if possible.\n * @property {string} [message] - Whatever message could be derived from the\n * call site and HTTP response.\n *\n * @param {MapiRequest} options.request\n * @param {number} [options.statusCode]\n * @param {string} [options.body]\n * @param {string} [options.message]\n * @param {string} [options.type]\n */\nfunction MapiError(options) {\n var errorType = options.type || constants.ERROR_HTTP;\n\n var body;\n if (options.body) {\n try {\n body = JSON.parse(options.body);\n } catch (e) {\n body = options.body;\n }\n } else {\n body = null;\n }\n\n var message = options.message || null;\n if (!message) {\n if (typeof body === 'string') {\n message = body;\n } else if (body && typeof body.message === 'string') {\n message = body.message;\n } else if (errorType === constants.ERROR_REQUEST_ABORTED) {\n message = 'Request aborted';\n }\n }\n\n this.message = message;\n this.type = errorType;\n this.statusCode = options.statusCode || null;\n this.request = options.request;\n this.body = body;\n}\n\nmodule.exports = MapiError;\n","'use strict';\n\nvar parseToken = require('@mapbox/parse-mapbox-token');\nvar xtend = require('xtend');\nvar EventEmitter = require('eventemitter3');\nvar urlUtils = require('../helpers/url-utils');\nvar constants = require('../constants');\n\nvar requestId = 1;\n\n/**\n * A Mapbox API request.\n *\n * Note that creating a `MapiRequest` does *not* send the request automatically.\n * Use the request's `send` method to send it off and get a `Promise`.\n *\n * The `emitter` property is an `EventEmitter` that emits the following events:\n *\n * - `'response'` - Listeners will be called with a `MapiResponse`.\n * - `'error'` - Listeners will be called with a `MapiError`.\n * - `'downloadProgress'` - Listeners will be called with `ProgressEvents`.\n * - `'uploadProgress'` - Listeners will be called with `ProgressEvents`.\n * Upload events are only available when the request includes a file.\n *\n * @class MapiRequest\n * @property {EventEmitter} emitter - An event emitter. See above.\n * @property {MapiClient} client - This request's `MapiClient`.\n * @property {MapiResponse|null} response - If this request has been sent and received\n * a response, the response is available on this property.\n * @property {MapiError|Error|null} error - If this request has been sent and\n * received an error in response, the error is available on this property.\n * @property {boolean} aborted - If the request has been aborted\n * (via [`abort`](#abort)), this property will be `true`.\n * @property {boolean} sent - If the request has been sent, this property will\n * be `true`. You cannot send the same request twice, so if you need to create\n * a new request that is the equivalent of an existing one, use\n * [`clone`](#clone).\n * @property {string} path - The request's path, including colon-prefixed route\n * parameters.\n * @property {string} origin - The request's origin.\n * @property {string} method - The request's HTTP method.\n * @property {Object} query - A query object, which will be transformed into\n * a URL query string.\n * @property {Object} params - A route parameters object, whose values will\n * be interpolated the path.\n * @property {Object} headers - The request's headers.\n * @property {Object|string|null} body - Data to send with the request.\n * If the request has a body, it will also be sent with the header\n * `'Content-Type: application/json'`.\n * @property {Blob|ArrayBuffer|string|ReadStream} file - A file to\n * send with the request. The browser client accepts Blobs and ArrayBuffers;\n * the Node client accepts strings (filepaths) and ReadStreams.\n */\n\n/**\n * @ignore\n * @param {MapiClient} client\n * @param {Object} options\n * @param {string} options.method\n * @param {string} options.path\n * @param {Object} [options.query={}]\n * @param {Object} [options.params={}]\n * @param {string} [options.origin]\n * @param {Object} [options.headers]\n * @param {Object} [options.body=null]\n * @param {Blob|ArrayBuffer|string|ReadStream} [options.file=null]\n */\nfunction MapiRequest(client, options) {\n if (!client) {\n throw new Error('MapiRequest requires a client');\n }\n if (!options || !options.path || !options.method) {\n throw new Error(\n 'MapiRequest requires an options object with path and method properties'\n );\n }\n\n var defaultHeaders = {};\n if (options.body) {\n defaultHeaders['content-type'] = 'application/json';\n }\n\n var headersWithDefaults = xtend(defaultHeaders, options.headers);\n\n // Disallows duplicate header names of mixed case,\n // e.g. Content-Type and content-type.\n var headers = Object.keys(headersWithDefaults).reduce(function(memo, name) {\n memo[name.toLowerCase()] = headersWithDefaults[name];\n return memo;\n }, {});\n\n this.id = requestId++;\n this._options = options;\n\n this.emitter = new EventEmitter();\n this.client = client;\n this.response = null;\n this.error = null;\n this.sent = false;\n this.aborted = false;\n this.path = options.path;\n this.method = options.method;\n this.origin = options.origin || client.origin;\n this.query = options.query || {};\n this.params = options.params || {};\n this.body = options.body || null;\n this.file = options.file || null;\n this.headers = headers;\n}\n\n/**\n * Get the URL of the request.\n *\n * @param {string} [accessToken] - By default, the access token of the request's\n * client is used.\n * @return {string}\n */\nMapiRequest.prototype.url = function url(accessToken) {\n var url = urlUtils.prependOrigin(this.path, this.origin);\n url = urlUtils.appendQueryObject(url, this.query);\n var routeParams = this.params;\n if (accessToken) {\n url = urlUtils.appendQueryParam(url, 'access_token', accessToken);\n var accessTokenOwnerId = parseToken(accessToken).user;\n routeParams = xtend({ ownerId: accessTokenOwnerId }, routeParams);\n }\n url = urlUtils.interpolateRouteParams(url, routeParams);\n return url;\n};\n\n/**\n * Send the request. Returns a Promise that resolves with a `MapiResponse`.\n * You probably want to use `response.body`.\n *\n * `send` only retrieves the first page of paginated results. You can get\n * the next page by using the `MapiResponse`'s [`nextPage`](#nextpage)\n * function, or iterate through all pages using [`eachPage`](#eachpage)\n * instead of `send`.\n *\n * @returns {Promise<MapiResponse>}\n */\nMapiRequest.prototype.send = function send() {\n var self = this;\n\n if (self.sent) {\n throw new Error(\n 'This request has already been sent. Check the response and error properties. Create a new request with clone().'\n );\n }\n self.sent = true;\n\n return self.client.sendRequest(self).then(\n function(response) {\n self.response = response;\n self.emitter.emit(constants.EVENT_RESPONSE, response);\n return response;\n },\n function(error) {\n self.error = error;\n self.emitter.emit(constants.EVENT_ERROR, error);\n throw error;\n }\n );\n};\n\n/**\n * Abort the request.\n *\n * Any pending `Promise` returned by [`send`](#send) will be rejected with\n * an error with `type: 'RequestAbortedError'`. If you've created a request\n * that might be aborted, you need to catch and handle such errors.\n *\n * This method will also abort any requests created while fetching subsequent\n * pages via [`eachPage`](#eachpage).\n *\n * If the request has not been sent or has already been aborted, nothing\n * will happen.\n */\nMapiRequest.prototype.abort = function abort() {\n if (this._nextPageRequest) {\n this._nextPageRequest.abort();\n delete this._nextPageRequest;\n }\n\n if (this.response || this.error || this.aborted) return;\n\n this.aborted = true;\n this.client.abortRequest(this);\n};\n\n/**\n * Invoke a callback for each page of a paginated API response.\n *\n * The callback should have the following signature:\n *\n * ```js\n * (\n * error: MapiError,\n * response: MapiResponse,\n * next: () => void\n * ) => void\n * ```\n *\n * **The next page will not be fetched until you've invoked the\n * `next` callback**, indicating that you're ready for it.\n *\n * @param {Function} callback\n */\nMapiRequest.prototype.eachPage = function eachPage(callback) {\n var self = this;\n\n function handleResponse(response) {\n function getNextPage() {\n delete self._nextPageRequest;\n var nextPageRequest = response.nextPage();\n if (nextPageRequest) {\n self._nextPageRequest = nextPageRequest;\n getPage(nextPageRequest);\n }\n }\n callback(null, response, getNextPage);\n }\n\n function handleError(error) {\n callback(error, null, function() {});\n }\n\n function getPage(request) {\n request.send().then(handleResponse, handleError);\n }\n getPage(this);\n};\n\n/**\n * Clone this request.\n *\n * Each request can only be sent *once*. So if you'd like to send the\n * same request again, clone it and send away.\n *\n * @returns {MapiRequest} - A new `MapiRequest` configured just like this one.\n */\nMapiRequest.prototype.clone = function clone() {\n return this._extend();\n};\n\n/**\n * @ignore\n */\nMapiRequest.prototype._extend = function _extend(options) {\n var extendedOptions = xtend(this._options, options);\n return new MapiRequest(this.client, extendedOptions);\n};\n\nmodule.exports = MapiRequest;\n","'use strict';\n\nvar parseLinkHeader = require('../helpers/parse-link-header');\n\n/**\n * A Mapbox API response.\n *\n * @class MapiResponse\n * @property {Object} body - The response body, parsed as JSON.\n * @property {string} rawBody - The raw response body.\n * @property {number} statusCode - The response's status code.\n * @property {Object} headers - The parsed response headers.\n * @property {Object} links - The parsed response links.\n * @property {MapiRequest} request - The response's originating `MapiRequest`.\n */\n\n/**\n * @ignore\n * @param {MapiRequest} request\n * @param {Object} responseData\n * @param {Object} responseData.headers\n * @param {string} responseData.body\n * @param {number} responseData.statusCode\n */\nfunction MapiResponse(request, responseData) {\n this.request = request;\n this.headers = responseData.headers;\n this.rawBody = responseData.body;\n this.statusCode = responseData.statusCode;\n try {\n this.body = JSON.parse(responseData.body || '{}');\n } catch (parseError) {\n this.body = responseData.body;\n }\n this.links = parseLinkHeader(this.headers.link);\n}\n\n/**\n * Check if there is a next page that you can fetch.\n *\n * @returns {boolean}\n */\nMapiResponse.prototype.hasNextPage = function hasNextPage() {\n return !!this.links.next;\n};\n\n/**\n * Create a request for the next page, if there is one.\n * If there is no next page, returns `null`.\n *\n * @returns {MapiRequest | null}\n */\nMapiResponse.prototype.nextPage = function nextPage() {\n if (!this.hasNextPage()) return null;\n return this.request._extend({\n path: this.links.next.url\n });\n};\n\nmodule.exports = MapiResponse;\n","'use strict';\n\nmodule.exports = {\n API_ORIGIN: 'https://api.mapbox.com',\n EVENT_PROGRESS_DOWNLOAD: 'downloadProgress',\n EVENT_PROGRESS_UPLOAD: 'uploadProgress',\n EVENT_ERROR: 'error',\n EVENT_RESPONSE: 'response',\n ERROR_HTTP: 'HttpError',\n ERROR_REQUEST_ABORTED: 'RequestAbortedError'\n};\n","'use strict';\n\nfunction parseSingleHeader(raw) {\n var boundary = raw.indexOf(':');\n var name = raw\n .substring(0, boundary)\n .trim()\n .toLowerCase();\n var value = raw.substring(boundary + 1).trim();\n return {\n name: name,\n value: value\n };\n}\n\n/**\n * Parse raw headers into an object with lowercase properties.\n * Does not fully parse headings into more complete data structure,\n * as larger libraries might do. Also does not deal with duplicate\n * headers because Node doesn't seem to deal with those well, so\n * we shouldn't let the browser either, for consistency.\n *\n * @param {string} raw\n * @returns {Object}\n */\nfunction parseHeaders(raw) {\n var headers = {};\n if (!raw) {\n return headers;\n }\n\n raw\n .trim()\n .split(/[\\r|\\n]+/)\n .forEach(function(rawHeader) {\n var parsed = parseSingleHeader(rawHeader);\n headers[parsed.name] = parsed.value;\n });\n\n return headers;\n}\n\nmodule.exports = parseHeaders;\n","'use strict';\n\n// Like https://github.com/thlorenz/lib/parse-link-header but without any\n// additional dependencies.\n\nfunction parseParam(param) {\n var parts = param.match(/\\s*(.+)\\s*=\\s*\"?([^\"]+)\"?/);\n if (!parts) return null;\n\n return {\n key: parts[1],\n value: parts[2]\n };\n}\n\nfunction parseLink(link) {\n var parts = link.match(/<?([^>]*)>(.*)/);\n if (!parts) return null;\n\n var linkUrl = parts[1];\n var linkParams = parts[2].split(';');\n var rel = null;\n var parsedLinkParams = linkParams.reduce(function(result, param) {\n var parsed = parseParam(param);\n if (!parsed) return result;\n if (parsed.key === 'rel') {\n if (!rel) {\n rel = parsed.value;\n }\n return result;\n }\n result[parsed.key] = parsed.value;\n return result;\n }, {});\n if (!rel) return null;\n\n return {\n url: linkUrl,\n rel: rel,\n params: parsedLinkParams\n };\n}\n\n/**\n * Parse a Link header.\n *\n * @param {string} linkHeader\n * @returns {{\n * [string]: {\n * url: string,\n * params: { [string]: string }\n * }\n * }}\n */\nfunction parseLinkHeader(linkHeader) {\n if (!linkHeader) return {};\n\n return linkHeader.split(/,\\s*</).reduce(function(result, link) {\n var parsed = parseLink(link);\n if (!parsed) return result;\n // rel value can be multiple whitespace-separated rels.\n var splitRel = parsed.rel.split(/\\s+/);\n splitRel.forEach(function(rel) {\n if (!result[rel]) {\n result[rel] = {\n url: parsed.url,\n params: parsed.params\n };\n }\n });\n return result;\n }, {});\n}\n\nmodule.exports = parseLinkHeader;\n","'use strict';\n\n// Encode each item of an array individually. The comma\n// delimiters should not themselves be encoded.\nfunction encodeArray(arrayValue) {\n return arrayValue.map(encodeURIComponent).join(',');\n}\n\nfunction encodeValue(value) {\n if (Array.isArray(value)) {\n return encodeArray(value);\n }\n return encodeURIComponent(String(value));\n}\n\n/**\n * Append a query parameter to a URL.\n *\n * @param {string} url\n * @param {string} key\n * @param {string|number|boolean|Array<*>>} [value] - Provide an array\n * if the value is a list and commas between values need to be\n * preserved, unencoded.\n * @returns {string} - Modified URL.\n */\nfunction appendQueryParam(url, key, value) {\n if (value === false || value === null) {\n return url;\n }\n var punctuation = /\\?/.test(url) ? '&' : '?';\n var query = encodeURIComponent(key);\n if (value !== undefined && value !== '' && value !== true) {\n query += '=' + encodeValue(value);\n }\n return '' + url + punctuation + query;\n}\n\n/**\n * Derive a query string from an object and append it\n * to a URL.\n *\n * @param {string} url\n * @param {Object} [queryObject] - Values should be primitives.\n * @returns {string} - Modified URL.\n */\nfunction appendQueryObject(url, queryObject) {\n if (!queryObject) {\n return url;\n }\n\n var result = url;\n Object.keys(queryObject).forEach(function(key) {\n var value = queryObject[key];\n if (value === undefined) {\n return;\n }\n if (Array.isArray(value)) {\n value = value\n .filter(function(v) {\n return !!v;\n })\n .join(',');\n }\n result = appendQueryParam(result, key, value);\n });\n return result;\n}\n\n/**\n * Prepend an origin to a URL. If the URL already has an\n * origin, do nothing.\n *\n * @param {string} url\n * @param {string} origin\n * @returns {string} - Modified URL.\n */\nfunction prependOrigin(url, origin) {\n if (!origin) {\n return url;\n }\n\n if (url.slice(0, 4) === 'http') {\n return url;\n }\n\n var delimiter = url[0] === '/' ? '' : '/';\n return '' + origin.replace(/\\/$/, '') + delimiter + url;\n}\n\n/**\n * Interpolate values into a route with express-style,\n * colon-prefixed route parameters.\n *\n * @param {string} route\n * @param {Object} [params] - Values should be primitives\n * or arrays of primitives. Provide an array if the value\n * is a list and commas between values need to be\n * preserved, unencoded.\n * @returns {string} - Modified URL.\n */\nfunction interpolateRouteParams(route, params) {\n if (!params) {\n return route;\n }\n return route.replace(/\\/:([a-zA-Z0-9]+)/g, function(_, paramId) {\n var value = params[paramId];\n if (value === undefined) {\n throw new Error('Unspecified route parameter ' + paramId);\n }\n var preppedValue = encodeValue(value);\n return '/' + preppedValue;\n });\n}\n\nmodule.exports = {\n appendQueryObject: appendQueryObject,\n appendQueryParam: appendQueryParam,\n prependOrigin: prependOrigin,\n interpolateRouteParams: interpolateRouteParams\n};\n","'use strict';\n\nvar xtend = require('xtend');\nvar v = require('./service-helpers/validator');\nvar pick = require('./service-helpers/pick');\nvar stringifyBooleans = require('./service-helpers/stringify-booleans');\nvar createServiceFactory = require('./service-helpers/create-service-factory');\n\n/**\n * Geocoding API service.\n *\n * Learn more about this service and its responses in\n * [the HTTP service documentation](https://www.mapbox.com/api-documentation/#geocoding).\n */\nvar Geocoding = {};\n\nvar featureTypes = [\n 'country',\n 'region',\n 'postcode',\n 'district',\n 'place',\n 'locality',\n 'neighborhood',\n 'address',\n 'poi',\n 'poi.landmark'\n];\n\n/**\n * Search for a place.\n *\n * See the [public documentation](https://www.mapbox.com/api-documentation/#search-for-places).\n *\n * @param {Object} config\n * @param {string} config.query - A place name.\n * @param {'mapbox.places'|'mapbox.places-permanent'} [config.mode=\"mapbox.places\"] - Either `mapbox.places` for ephemeral geocoding, or `mapbox.places-permanent` for storing results and batch geocoding.\n * @param {Array<string>} [config.countries] - Limits results to the specified countries.\n * Each item in the array should be an [ISO 3166 alpha 2 country code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).\n * @param {Coordinates} [config.proximity] - Bias local results based on a provided location.\n * @param {Array<'country'|'region'|'postcode'|'district'|'place'|'locality'|'neighborhood'|'address'|'poi'|'poi.landmark'>} [config.types] - Filter results by feature types.\n * @param {boolean} [config.autocomplete=true] - Return autocomplete results or not.\n * @param {BoundingBox} [config.bbox] - Limit results to a bounding box.\n * @param {number} [config.limit=5] - Limit the number of results returned.\n * @param {Array<string>} [config.language] - Specify the language to use for response text and, for forward geocoding, query result weighting.\n * Options are [IETF language tags](https://en.wikipedia.org/wiki/IETF_language_tag) comprised of a mandatory\n * [ISO 639-1 language code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) and optionally one or more IETF subtags for country or script.\n * @return {MapiRequest}\n */\nGeocoding.forwardGeocode = function(config) {\n v.assertShape({\n query: v.required(v.string),\n mode: v.oneOf('mapbox.places', 'mapbox.places-permanent'),\n countries: v.arrayOf(v.string),\n proximity: v.coordinates,\n types: v.arrayOf(v.oneOf(featureTypes)),\n autocomplete: v.boolean,\n bbox: v.arrayOf(v.number),\n limit: v.number,\n language: v.arrayOf(v.string)\n })(config);\n\n config.mode = config.mode || 'mapbox.places';\n\n var query = stringifyBooleans(\n xtend(\n { country: config.countries },\n pick(config, [\n 'proximity',\n 'types',\n 'autocomplete',\n 'bbox',\n 'limit',\n 'language'\n ])\n )\n );\n\n return this.client.createRequest({\n method: 'GET',\n path: '/geocoding/v5/:mode/:query.json',\n params: pick(config, ['mode', 'query']),\n query: query\n });\n};\n\n/**\n * Search for places near coordinates.\n *\n * See the [public documentation](https://www.mapbox.com/api-documentation/#retrieve-places-near-a-location).\n *\n * @param {Object} config\n * @param {Coordinates} config.query - Coordinates at which features will be searched.\n * @param {'mapbox.places'|'mapbox.places-permanent'} [config.mode=\"mapbox.places\"] - Either `mapbox.places` for ephemeral geocoding, or `mapbox.places-permanent` for storing results and batch geocoding.\n * @param {Array<string>} [config.countries] - Limits results to the specified countries.\n * Each item in the array should be an [ISO 3166 alpha 2 country code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).\n * @param {Array<'country'|'region'|'postcode'|'district'|'place'|'locality'|'neighborhood'|'address'|'poi'|'poi.landmark'>} [config.types] - Filter results by feature types.\n * @param {BoundingBox} [config.bbox] - Limit results to a bounding box.\n * @param {number} [config.limit=1] - Limit the number of results returned. If using this option, you must provide a single item for `types`.\n * @param {Array<string>} [config.language] - Specify the language to use for response text and, for forward geocoding, query result weighting.\n * Options are [IETF language tags](https://en.wikipedia.org/wiki/IETF_language_tag) comprised of a mandatory\n * [ISO 639-1 language code](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) and optionally one or more IETF subtags for country or script.\n * @param {'distance'|'score'} [config.reverseMode='distance'] - Set the factors that are used to sort nearby results.\n * @return {MapiRequest}\n */\nGeocoding.reverseGeocode = function(config) {\n v.assertShape({\n query: v.required(v.coordinates),\n mode: v.oneOf('mapbox.places', 'mapbox.places-permanent'),\n countries: v.arrayOf(v.string),\n types: v.arrayOf(v.oneOf(featureTypes)),\n bbox: v.arrayOf(v.number),\n limit: v.number,\n language: v.arrayOf(v.string),\n reverseMode: v.oneOf('distance', 'score')\n })(config);\n\n config.mode = config.mode || 'mapbox.places';\n\n var query = stringifyBooleans(\n xtend(\n { country: config.countries },\n pick(config, [\n 'country',\n 'types',\n 'bbox',\n 'limit',\n 'language',\n 'reverseMode'\n ])\n )\n );\n\n return this.client.createRequest({\n method: 'GET',\n path: '/geocoding/v5/:mode/:query.json',\n params: pick(config, ['mode', 'query']),\n query: query\n });\n};\n\nmodule.exports = createServiceFactory(Geocoding);\n","'use strict';\n\nvar MapiClient = require('../../lib/classes/mapi-client');\n// This will create the environment-appropriate client.\nvar createClient = require('../../lib/client');\n\nfunction createServiceFactory(ServicePrototype) {\n return function(clientOrConfig) {\n var client;\n if (MapiClient.prototype.isPrototypeOf(clientOrConfig)) {\n client = clientOrConfig;\n } else {\n client = createClient(clientOrConfig);\n }\n var service = Object.create(ServicePrototype);\n service.client = client;\n return service;\n };\n}\n\nmodule.exports = createServiceFactory;\n","'use strict';\n\nfunction objectMap(obj, cb) {\n return Object.keys(obj).reduce(function(result, key) {\n result[key] = cb(key, obj[key]);\n return result;\n }, {});\n}\n\nmodule.exports = objectMap;\n","'use strict';\n\n/**\n * Create a new object by picking properties off an existing object.\n * The second param can be overloaded as a callback for\n * more fine grained picking of properties.\n * @param {Object} source\n * @param {Array<string>|function(string, Object):boolean} keys\n * @returns {Object}\n */\nfunction pick(source, keys) {\n var filter = function(key, val) {\n return keys.indexOf(key) !== -1 && val !== undefined;\n };\n\n if (typeof keys === 'function') {\n filter = keys;\n }\n\n return Object.keys(source)\n .filter(function(key) {\n return filter(key, source[key]);\n })\n .reduce(function(result, key) {\n result[key] = source[key];\n return result;\n }, {});\n}\n\nmodule.exports = pick;\n","'use strict';\n\nvar objectMap = require('./object-map');\n\n/**\n * Stringify all the boolean values in an object, so true becomes \"true\".\n *\n * @param {Object} obj\n * @returns {Object}\n */\nfunction stringifyBoolean(obj) {\n return objectMap(obj, function(_, value) {\n return typeof value === 'boolean' ? JSON.stringify(value) : value;\n });\n}\n\nmodule.exports = stringifyBoolean;\n","'use strict';\n\nvar xtend = require('xtend');\nvar v = require('@mapbox/fusspot');\n\nfunction file(value) {\n // If we're in a browser so Blob is available, the file must be that.\n // In Node, however, it could be a filepath or a pipeable (Readable) stream.\n if (typeof window !== 'undefined') {\n if (value instanceof global.Blob || value instanceof global.ArrayBuffer) {\n return;\n }\n return 'Blob or ArrayBuffer';\n }\n if (typeof value === 'string' || value.pipe !== undefined) {\n return;\n }\n return 'Filename or Readable stream';\n}\n\nfunction assertShape(validatorObj, apiName) {\n return v.assert(v.strictShape(validatorObj), apiName);\n}\n\nfunction date(value) {\n var msg = 'date';\n if (typeof value === 'boolean') {\n return msg;\n }\n try {\n var date = new Date(value);\n if (date.getTime && isNaN(date.getTime())) {\n return msg;\n }\n } catch (e) {\n return msg;\n }\n}\n\nfunction coordinates(value) {\n return v.tuple(v.number, v.number)(value);\n}\n\nmodule.exports = xtend(v, {\n file: file,\n date: date,\n coordinates: coordinates,\n assertShape: assertShape\n});\n","'use strict';\n\nvar base64 = require('base-64');\n\nvar tokenCache = {};\n\nfunction parseToken(token) {\n if (tokenCache[token]) {\n return tokenCache[token];\n }\n\n var parts = token.split('.');\n var usage = parts[0];\n var rawPayload = parts[1];\n if (!rawPayload) {\n throw new Error('Invalid token');\n }\n\n var parsedPayload = parsePaylod(rawPayload);\n\n var result = {\n usage: usage,\n user: parsedPayload.u\n };\n if (has(parsedPayload, 'a')) result.authorization = parsedPayload.a;\n if (has(parsedPayload, 'exp')) result.expires = parsedPayload.exp * 1000;\n if (has(parsedPayload, 'iat')) result.created = parsedPayload.iat * 1000;\n if (has(parsedPayload, 'scopes')) result.scopes = parsedPayload.scopes;\n if (has(parsedPayload, 'client')) result.client = parsedPayload.client;\n if (has(parsedPayload, 'll')) result.lastLogin = parsedPayload.ll;\n if (has(parsedPayload, 'iu')) result.impersonator = parsedPayload.iu;\n\n tokenCache[token] = result;\n return result;\n}\n\nfunction parsePaylod(rawPayload) {\n try {\n return JSON.parse(base64.decode(rawPayload));\n } catch (parseError) {\n throw new Error('Invalid token');\n }\n}\n\nfunction has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nmodule.exports = parseToken;\n","/*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */\n;(function(root) {\n\n\t// Detect free variables `exports`.\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`.\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code, and use\n\t// it as `root`.\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar InvalidCharacterError = function(message) {\n\t\tthis.message = message;\n\t};\n\tInvalidCharacterError.prototype = new Error;\n\tInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\n\tvar error = function(message) {\n\t\t// Note: the error messages used throughout this file match those used by\n\t\t// the native `atob`/`btoa` implementation in Chromium.\n\t\tthrow new InvalidCharacterError(message);\n\t};\n\n\tvar TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t// http://whatwg.org/html/common-microsyntaxes.html#space-character\n\tvar REGEX_SPACE_CHARACTERS = /[\\t\\n\\f\\r ]/g;\n\n\t// `decode` is designed to be fully compatible with `atob` as described in the\n\t// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob\n\t// The optimized base64-decoding algorithm used is based on @atk’s excellent\n\t// implementation. https://gist.github.com/atk/1020396\n\tvar decode = function(input) {\n\t\tinput = String(input)\n\t\t\t.replace(REGEX_SPACE_CHARACTERS, '');\n\t\tvar length = input.length;\n\t\tif (length % 4 == 0) {\n\t\t\tinput = input.replace(/==?$/, '');\n\t\t\tlength = input.length;\n\t\t}\n\t\tif (\n\t\t\tlength % 4 == 1 ||\n\t\t\t// http://whatwg.org/C#alphanumeric-ascii-characters\n\t\t\t/[^+a-zA-Z0-9/]/.test(input)\n\t\t) {\n\t\t\terror(\n\t\t\t\t'Invalid character: the string to be decoded is not correctly encoded.'\n\t\t\t);\n\t\t}\n\t\tvar bitCounter = 0;\n\t\tvar bitStorage;\n\t\tvar buffer;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\twhile (++position < length) {\n\t\t\tbuffer = TABLE.indexOf(input.charAt(position));\n\t\t\tbitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer;\n\t\t\t// Unless this is the first of a group of 4 characters…\n\t\t\tif (bitCounter++ % 4) {\n\t\t\t\t// …convert the first 8 bits to a single ASCII character.\n\t\t\t\toutput += String.fromCharCode(\n\t\t\t\t\t0xFF & bitStorage >> (-2 * bitCounter & 6)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t};\n\n\t// `encode` is designed to be fully compatible with `btoa` as described in the\n\t// HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa\n\tvar encode = function(input) {\n\t\tinput = String(input);\n\t\tif (/[^\\0-\\xFF]/.test(input)) {\n\t\t\t// Note: no need to special-case astral symbols here, as surrogates are\n\t\t\t// matched, and the input is supposed to only contain ASCII anyway.\n\t\t\terror(\n\t\t\t\t'The string to be encoded contains characters outside of the ' +\n\t\t\t\t'Latin1 range.'\n\t\t\t);\n\t\t}\n\t\tvar padding = input.length % 3;\n\t\tvar output = '';\n\t\tvar position = -1;\n\t\tvar a;\n\t\tvar b;\n\t\tvar c;\n\t\tvar d;\n\t\tvar buffer;\n\t\t// Make sure any padding is handled outside of the loop.\n\t\tvar length = input.length - padding;\n\n\t\twhile (++position < length) {\n\t\t\t// Read three bytes, i.e. 24 bits.\n\t\t\ta = input.charCodeAt(position) << 16;\n\t\t\tb = input.charCodeAt(++position) << 8;\n\t\t\tc = input.charCodeAt(++position);\n\t\t\tbuffer = a + b + c;\n\t\t\t// Turn the 24 bits into four chunks of 6 bits each, and append the\n\t\t\t// matching character for each of them to the output.\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 18 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 12 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer >> 6 & 0x3F) +\n\t\t\t\tTABLE.charAt(buffer & 0x3F)\n\t\t\t);\n\t\t}\n\n\t\tif (padding == 2) {\n\t\t\ta = input.charCodeAt(position) << 8;\n\t\t\tb = input.charCodeAt(++position);\n\t\t\tbuffer = a + b;\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 10) +\n\t\t\t\tTABLE.charAt((buffer >> 4) & 0x3F) +\n\t\t\t\tTABLE.charAt((buffer << 2) & 0x3F) +\n\t\t\t\t'='\n\t\t\t);\n\t\t} else if (padding == 1) {\n\t\t\tbuffer = input.charCodeAt(position);\n\t\t\toutput += (\n\t\t\t\tTABLE.charAt(buffer >> 2) +\n\t\t\t\tTABLE.charAt((buffer << 4) & 0x3F) +\n\t\t\t\t'=='\n\t\t\t);\n\t\t}\n\n\t\treturn output;\n\t};\n\n\tvar base64 = {\n\t\t'encode': encode,\n\t\t'decode': decode,\n\t\t'version': '0.1.0'\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn base64;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = base64;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (var key in base64) {\n\t\t\t\tbase64.hasOwnProperty(key) && (freeExports[key] = base64[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.base64 = base64;\n\t}\n\n}(this));\n","/* bessel.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported BESSEL */\nvar BESSEL;\n(function (factory) {\n /*jshint ignore:start */\n if(typeof DO_NOT_EXPORT_BESSEL === 'undefined') {\n if('object' === typeof exports) {\n factory(exports);\n } else if ('function' === typeof define && define.amd) {\n define(function () {\n var module = {};\n factory(module);\n return module;\n });\n } else {\n factory(BESSEL = {});\n }\n } else {\n factory(BESSEL = {});\n }\n /*jshint ignore:end */\n}(function(BESSEL) {\nBESSEL.version = '1.0.2';\nvar M = Math;\n\nfunction _horner(arr, v) { for(var i = 0, z = 0; i < arr.length; ++i) z = v * z + arr[i]; return z; }\nfunction _bessel_iter(x, n, f0, f1, sign) {\n if(n === 0) return f0;\n if(n === 1) return f1;\n var tdx = 2 / x, f2 = f1;\n for(var o = 1; o < n; ++o) {\n f2 = f1 * o * tdx + sign * f0;\n f0 = f1; f1 = f2;\n }\n return f2;\n}\nfunction _bessel_wrap(bessel0, bessel1, name, nonzero, sign) {\n return function bessel(x,n) {\n if(nonzero) {\n if(x === 0) return (nonzero == 1 ? -Infinity : Infinity);\n else if(x < 0) return NaN;\n }\n if(n === 0) return bessel0(x);\n if(n === 1) return bessel1(x);\n if(n < 0) return NaN;\n n|=0;\n var b0 = bessel0(x), b1 = bessel1(x);\n return _bessel_iter(x, n, b0, b1, sign);\n };\n}\nvar besselj = (function() {\n var W = 0.636619772; // 2 / Math.PI\n\n var b0_a1a = [57568490574.0, -13362590354.0, 651619640.7, -11214424.18, 77392.33017, -184.9052456].reverse();\n var b0_a2a = [57568490411.0, 1029532985.0, 9494680.718, 59272.64853, 267.8532712, 1.0].reverse();\n var b0_a1b = [1.0, -0.1098628627e-2, 0.2734510407e-4, -0.2073370639e-5, 0.2093887211e-6].reverse();\n var b0_a2b = [-0.1562499995e-1, 0.1430488765e-3, -0.6911147651e-5, 0.7621095161e-6, -0.934935152e-7].reverse();\n\n function bessel0(x) {\n var a=0, a1=0, a2=0, y = x * x;\n if(x < 8) {\n a1 = _horner(b0_a1a, y);\n a2 = _horner(b0_a2a, y);\n a = a1 / a2;\n } else {\n var xx = x - 0.785398164;\n y = 64 / y;\n a1 = _horner(b0_a1b, y);\n a2 = _horner(b0_a2b, y);\n a = M.sqrt(W/x)*(M.cos(xx)*a1-M.sin(xx)*a2*8/x);\n }\n return a;\n }\n\n var b1_a1a = [72362614232.0, -7895059235.0, 242396853.1, -2972611.439, 15704.48260, -30.16036606].reverse();\n var b1_a2a = [144725228442.0, 2300535178.0, 18583304.74, 99447.43394, 376.9991397, 1.0].reverse();\n var b1_a1b = [1.0, 0.183105e-2, -0.3516396496e-4, 0.2457520174e-5, -0.240337019e-6].reverse();\n var b1_a2b = [0.04687499995, -0.2002690873e-3, 0.8449199096e-5, -0.88228987e-6, 0.105787412e-6].reverse();\n\n function bessel1(x) {\n var a=0, a1=0, a2=0, y = x*x, xx = M.abs(x) - 2.356194491;\n if(Math.abs(x)< 8) {\n a1 = x*_horner(b1_a1a, y);\n a2 = _horner(b1_a2a, y);\n a = a1 / a2;\n } else {\n y = 64 / y;\n a1=_horner(b1_a1b, y);\n a2=_horner(b1_a2b, y);\n a=M.sqrt(W/M.abs(x))*(M.cos(xx)*a1-M.sin(xx)*a2*8/M.abs(x));\n if(x < 0) a = -a;\n }\n return a;\n }\n\n return function besselj(x, n) {\n n = Math.round(n);\n if(!isFinite(x)) return isNaN(x) ? x : 0;\n if(n < 0) return ((n%2)?-1:1)*besselj(x, -n);\n if(x < 0) return ((n%2)?-1:1)*besselj(-x, n);\n if(n === 0) return bessel0(x);\n if(n === 1) return bessel1(x);\n if(x === 0) return 0;\n\n var ret=0.0;\n if(x > n) {\n ret = _bessel_iter(x, n, bessel0(x), bessel1(x),-1);\n } else {\n var m=2*M.floor((n+M.floor(M.sqrt(40*n)))/2);\n var jsum=false;\n var bjp=0.0, sum=0.0;\n var bj=1.0, bjm = 0.0;\n var tox = 2 / x;\n for (var j=m;j>0;j--) {\n bjm=j*tox*bj-bjp;\n bjp=bj;\n bj=bjm;\n if (M.abs(bj) > 1E10) {\n bj *= 1E-10;\n bjp *= 1E-10;\n ret *= 1E-10;\n sum *= 1E-10;\n }\n if (jsum) sum += bj;\n jsum=!jsum;\n if (j == n) ret=bjp;\n }\n sum=2.0*sum-bj;\n ret /= sum;\n }\n return ret;\n };\n})();\nvar bessely = (function() {\n var W = 0.636619772;\n\n var b0_a1a = [-2957821389.0, 7062834065.0, -512359803.6, 10879881.29, -86327.92757, 228.4622733].reverse();\n var b0_a2a = [40076544269.0, 745249964.8, 7189466.438, 47447.26470, 226.1030244, 1.0].reverse();\n var b0_a1b = [1.0, -0.1098628627e-2, 0.2734510407e-4, -0.2073370639e-5, 0.2093887211e-6].reverse();\n var b0_a2b = [-0.1562499995e-1, 0.1430488765e-3, -0.6911147651e-5, 0.7621095161e-6, -0.934945152e-7].reverse();\n\n function bessel0(x) {\n var a=0, a1=0, a2=0, y = x * x, xx = x - 0.785398164;\n if(x < 8) {\n a1 = _horner(b0_a1a, y);\n a2 = _horner(b0_a2a, y);\n a = a1/a2 + W * besselj(x,0) * M.log(x);\n } else {\n y = 64 / y;\n a1 = _horner(b0_a1b, y);\n a2 = _horner(b0_a2b, y);\n a = M.sqrt(W/x)*(M.sin(xx)*a1+M.cos(xx)*a2*8/x);\n }\n return a;\n }\n\n var b1_a1a = [-0.4900604943e13, 0.1275274390e13, -0.5153438139e11, 0.7349264551e9, -0.4237922726e7, 0.8511937935e4].reverse();\n var b1_a2a = [0.2499580570e14, 0.4244419664e12, 0.3733650367e10, 0.2245904002e8, 0.1020426050e6, 0.3549632885e3, 1].reverse();\n var b1_a1b = [1.0, 0.183105e-2, -0.3516396496e-4, 0.2457520174e-5, -0.240337019e-6].reverse();\n var b1_a2b = [0.04687499995, -0.2002690873e-3, 0.8449199096e-5, -0.88228987e-6, 0.105787412e-6].reverse();\n\n function bessel1(x) {\n var a=0, a1=0, a2=0, y = x*x, xx = x - 2.356194491;\n if(x < 8) {\n a1 = x*_horner(b1_a1a, y);\n a2 = _horner(b1_a2a, y);\n a = a1/a2 + W * (besselj(x,1) * M.log(x) - 1 / x);\n } else {\n y = 64 / y;\n a1=_horner(b1_a1b, y);\n a2=_horner(b1_a2b, y);\n a=M.sqrt(W/x)*(M.sin(xx)*a1+M.cos(xx)*a2*8/x);\n }\n return a;\n }\n\n return _bessel_wrap(bessel0, bessel1, 'BESSELY', 1, -1);\n})();\nvar besseli = (function() {\n var b0_a = [1.0, 3.5156229, 3.0899424, 1.2067492, 0.2659732, 0.360768e-1, 0.45813e-2].reverse();\n var b0_b = [0.39894228, 0.1328592e-1, 0.225319e-2, -0.157565e-2, 0.916281e-2, -0.2057706e-1, 0.2635537e-1, -0.1647633e-1, 0.392377e-2].reverse();\n\n function bessel0(x) {\n if(x <= 3.75) return _horner(b0_a, x*x/(3.75*3.75));\n return M.exp(M.abs(x))/M.sqrt(M.abs(x))*_horner(b0_b, 3.75/M.abs(x));\n }\n\n var b1_a = [0.5, 0.87890594, 0.51498869, 0.15084934, 0.2658733e-1, 0.301532e-2, 0.32411e-3].reverse();\n var b1_b = [0.39894228, -0.3988024e-1, -0.362018e-2, 0.163801e-2, -0.1031555e-1, 0.2282967e-1, -0.2895312e-1, 0.1787654e-1, -0.420059e-2].reverse();\n\n function bessel1(x) {\n if(x < 3.75) return x * _horner(b1_a, x*x/(3.75*3.75));\n return (x < 0 ? -1 : 1) * M.exp(M.abs(x))/M.sqrt(M.abs(x))*_horner(b1_b, 3.75/M.abs(x));\n }\n\n return function besseli(x, n) {\n n = Math.round(n);\n if(n === 0) return bessel0(x);\n if(n === 1) return bessel1(x);\n if(n < 0) return NaN;\n if(M.abs(x) === 0) return 0;\n if(x == Infinity) return Infinity;\n\n var ret = 0.0, j, tox = 2 / M.abs(x), bip = 0.0, bi=1.0, bim=0.0;\n var m=2*M.round((n+M.round(M.sqrt(40*n)))/2);\n for (j=m;j>0;j--) {\n bim=j*tox*bi + bip;\n bip=bi; bi=bim;\n if (M.abs(bi) > 1E10) {\n bi *= 1E-10;\n bip *= 1E-10;\n ret *= 1E-10;\n }\n if(j == n) ret = bip;\n }\n ret *= besseli(x, 0) / bi;\n return x < 0 && (n%2) ? -ret : ret;\n };\n\n})();\n\nvar besselk = (function() {\n var b0_a = [-0.57721566, 0.42278420, 0.23069756, 0.3488590e-1, 0.262698e-2, 0.10750e-3, 0.74e-5].reverse();\n var b0_b = [1.25331414, -0.7832358e-1, 0.2189568e-1, -0.1062446e-1, 0.587872e-2, -0.251540e-2, 0.53208e-3].reverse();\n\n function bessel0(x) {\n if(x <= 2) return -M.log(x/2) * besseli(x,0) + _horner(b0_a, x*x/4);\n return M.exp(-x) / M.sqrt(x) * _horner(b0_b, 2/x);\n }\n\n var b1_a = [1.0, 0.15443144, -0.67278579, -0.18156897, -0.1919402e-1, -0.110404e-2, -0.4686e-4].reverse();\n var b1_b = [1.25331414, 0.23498619, -0.3655620e-1, 0.1504268e-1, -0.780353e-2, 0.325614e-2, -0.68245e-3].reverse();\n\n function bessel1(x) {\n if(x <= 2) return M.log(x/2) * besseli(x,1) + (1/x) * _horner(b1_a, x*x/4);\n return M.exp(-x)/M.sqrt(x)*_horner(b1_b, 2/x);\n }\n\n return _bessel_wrap(bessel0, bessel1, 'BESSELK', 2, 1);\n})();\nBESSEL.besselj = besselj;\nBESSEL.bessely = bessely;\nBESSEL.besseli = besseli;\nBESSEL.besselk = besselk;\n}));\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/*\n * Fuzzy\n * https://github.com/myork/fuzzy\n *\n * Copyright (c) 2012 Matt York\n * Licensed under the MIT license.\n */\n\n(function() {\n\nvar root = this;\n\nvar fuzzy = {};\n\n// Use in node or in browser\nif (typeof exports !== 'undefined') {\n module.exports = fuzzy;\n} else {\n root.fuzzy = fuzzy;\n}\n\n// Return all elements of `array` that have a fuzzy\n// match against `pattern`.\nfuzzy.simpleFilter = function(pattern, array) {\n return array.filter(function(str) {\n return fuzzy.test(pattern, str);\n });\n};\n\n// Does `pattern` fuzzy match `str`?\nfuzzy.test = function(pattern, str) {\n return fuzzy.match(pattern, str) !== null;\n};\n\n// If `pattern` matches `str`, wrap each matching character\n// in `opts.pre` and `opts.post`. If no match, return null\nfuzzy.match = function(pattern, str, opts) {\n opts = opts || {};\n var patternIdx = 0\n , result = []\n , len = str.length\n , totalScore = 0\n , currScore = 0\n // prefix\n , pre = opts.pre || ''\n // suffix\n , post = opts.post || ''\n // String to compare against. This might be a lowercase version of the\n // raw string\n , compareString = opts.caseSensitive && str || str.toLowerCase()\n , ch;\n\n pattern = opts.caseSensitive && pattern || pattern.toLowerCase();\n\n // For each character in the string, either add it to the result\n // or wrap in template if it's the next string in the pattern\n for(var idx = 0; idx < len; idx++) {\n ch = str[idx];\n if(compareString[idx] === pattern[patternIdx]) {\n ch = pre + ch + post;\n patternIdx += 1;\n\n // consecutive characters should increase the score more than linearly\n currScore += 1 + currScore;\n } else {\n currScore = 0;\n }\n totalScore += currScore;\n result[result.length] = ch;\n }\n\n // return rendered string if we have a match for every char\n if(patternIdx === pattern.length) {\n // if the string is an exact match with pattern, totalScore should be maxed\n totalScore = (compareString === pattern) ? Infinity : totalScore;\n return {rendered: result.join(''), score: totalScore};\n }\n\n return null;\n};\n\n// The normal entry point. Filters `arr` for matches against `pattern`.\n// It returns an array with matching values of the type:\n//\n// [{\n// string: '<b>lah' // The rendered string\n// , index: 2 // The index of the element in `arr`\n// , original: 'blah' // The original element in `arr`\n// }]\n//\n// `opts` is an optional argument bag. Details:\n//\n// opts = {\n// // string to put before a matching character\n// pre: '<b>'\n//\n// // string to put after matching character\n// , post: '</b>'\n//\n// // Optional function. Input is an entry in the given arr`,\n// // output should be the string to test `pattern` against.\n// // In this example, if `arr = [{crying: 'koala'}]` we would return\n// // 'koala'.\n// , extract: function(arg) { return arg.crying; }\n// }\nfuzzy.filter = function(pattern, arr, opts) {\n if(!arr || arr.length === 0) {\n return [];\n }\n if (typeof pattern !== 'string') {\n return arr;\n }\n opts = opts || {};\n return arr\n .reduce(function(prev, element, idx, arr) {\n var str = element;\n if(opts.extract) {\n str = opts.extract(element);\n }\n var rendered = fuzzy.match(pattern, str, opts);\n if(rendered != null) {\n prev[prev.length] = {\n string: rendered.rendered\n , score: rendered.score\n , index: idx\n , original: element\n };\n }\n return prev;\n }, [])\n\n // Sort by score. Browsers are inconsistent wrt stable/unstable\n // sorting, so force stable by using the index in the case of tie.\n // See http://ofb.net/~sethml/is-sort-stable.html\n .sort(function(a,b) {\n var compare = b.score - a.score;\n if(compare) return compare;\n return a.index - b.index;\n });\n};\n\n\n}());\n\n","/*! gumshoejs v5.1.2 | (c) 2019 Chris Ferdinandi | MIT License | http://github.com/cferdinandi/gumshoe */\n!(function(e,t){\"function\"==typeof define&&define.amd?define([],(function(){return t(e)})):\"object\"==typeof exports?module.exports=t(e):e.Gumshoe=t(e)})(\"undefined\"!=typeof global?global:\"undefined\"!=typeof window?window:this,(function(e){\"use strict\";var t={navClass:\"active\",contentClass:\"active\",nested:!1,nestedClass:\"active\",offset:0,reflow:!1,events:!0},n=function(e,t,n){if(n.settings.events){var o=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:n});t.dispatchEvent(o)}},o=function(e){var t=0;if(e.offsetParent)for(;e;)t+=e.offsetTop,e=e.offsetParent;return t>=0?t:0},s=function(e){e&&e.sort((function(e,t){return o(e.content)<o(t.content)?-1:1}))},c=function(t,n,o){var s=t.getBoundingClientRect(),c=(function(e){return\"function\"==typeof e.offset?parseFloat(e.offset()):parseFloat(e.offset)})(n);return o?parseInt(s.bottom,10)<(e.innerHeight||document.documentElement.clientHeight):parseInt(s.top,10)<=c},i=function(){return e.innerHeight+e.pageYOffset>=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},r=function(e,t){var n=e[e.length-1];if(function(e,t){return!(!i()||!c(e.content,t,!0))}(n,t))return n;for(var o=e.length-1;o>=0;o--)if(c(e[o].content,t))return e[o]},a=function(e,t){if(t.nested&&e.parentNode){var n=e.parentNode.closest(\"li\");n&&(n.classList.remove(t.nestedClass),a(n,t))}},l=function(e,t){if(e){var o=e.nav.closest(\"li\");o&&(o.classList.remove(t.navClass),e.content.classList.remove(t.contentClass),a(o,t),n(\"gumshoeDeactivate\",o,{link:e.nav,content:e.content,settings:t}))}},u=function(e,t){if(t.nested){var n=e.parentNode.closest(\"li\");n&&(n.classList.add(t.nestedClass),u(n,t))}};return function(o,c){var i,a,f,d,v,m={};m.setup=function(){i=document.querySelectorAll(o),a=[],Array.prototype.forEach.call(i,(function(e){var t=document.getElementById(decodeURIComponent(e.hash.substr(1)));t&&a.push({nav:e,content:t})})),s(a)},m.detect=function(){var e=r(a,v);e?f&&e.content===f.content||(l(f,v),(function(e,t){if(e){var o=e.nav.closest(\"li\");o&&(o.classList.add(t.navClass),e.content.classList.add(t.contentClass),u(o,t),n(\"gumshoeActivate\",o,{link:e.nav,content:e.content,settings:t}))}})(e,v),f=e):f&&(l(f,v),f=null)};var p=function(t){d&&e.cancelAnimationFrame(d),d=e.requestAnimationFrame(m.detect)},h=function(t){d&&e.cancelAnimationFrame(d),d=e.requestAnimationFrame((function(){s(a),m.detect()}))};m.destroy=function(){f&&l(f,v),e.removeEventListener(\"scroll\",p,!1),v.reflow&&e.removeEventListener(\"resize\",h,!1),a=null,i=null,f=null,d=null,v=null};return v=(function(){var e={};return Array.prototype.forEach.call(arguments,(function(t){for(var n in t){if(!t.hasOwnProperty(n))return;e[n]=t[n]}})),e})(t,c||{}),m.setup(),m.detect(),e.addEventListener(\"scroll\",p,!1),v.reflow&&e.addEventListener(\"resize\",h,!1),m}}));","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict';\nvar toString = Object.prototype.toString;\n\nmodule.exports = function (x) {\n\tvar prototype;\n\treturn toString.call(x) === '[object Object]' && (prototype = Object.getPrototypeOf(x), prototype === null || prototype === Object.getPrototypeOf({}));\n};\n","(function (window, factory) {\n if (typeof exports === 'object') {\n module.exports = factory();\n } else if (typeof define === 'function' && define.amd) {\n define(factory);\n } else {\n window.jStat = factory();\n }\n})(this, function () {\nvar jStat = (function(Math, undefined) {\n\n// For quick reference.\nvar concat = Array.prototype.concat;\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\n\n// Calculate correction for IEEE error\n// TODO: This calculation can be improved.\nfunction calcRdx(n, m) {\n var val = n > m ? n : m;\n return Math.pow(10,\n 17 - ~~(Math.log(((val > 0) ? val : -val)) * Math.LOG10E));\n}\n\n\nvar isArray = Array.isArray || function isArray(arg) {\n return toString.call(arg) === '[object Array]';\n};\n\n\nfunction isFunction(arg) {\n return toString.call(arg) === '[object Function]';\n}\n\n\nfunction isNumber(num) {\n return (typeof num === 'number') ? num - num === 0 : false;\n}\n\n\n// Converts the jStat matrix to vector.\nfunction toVector(arr) {\n return concat.apply([], arr);\n}\n\n\n// The one and only jStat constructor.\nfunction jStat() {\n return new jStat._init(arguments);\n}\n\n\n// TODO: Remove after all references in src files have been removed.\njStat.fn = jStat.prototype;\n\n\n// By separating the initializer from the constructor it's easier to handle\n// always returning a new instance whether \"new\" was used or not.\njStat._init = function _init(args) {\n // If first argument is an array, must be vector or matrix.\n if (isArray(args[0])) {\n // Check if matrix.\n if (isArray(args[0][0])) {\n // See if a mapping function was also passed.\n if (isFunction(args[1]))\n args[0] = jStat.map(args[0], args[1]);\n // Iterate over each is faster than this.push.apply(this, args[0].\n for (var i = 0; i < args[0].length; i++)\n this[i] = args[0][i];\n this.length = args[0].length;\n\n // Otherwise must be a vector.\n } else {\n this[0] = isFunction(args[1]) ? jStat.map(args[0], args[1]) : args[0];\n this.length = 1;\n }\n\n // If first argument is number, assume creation of sequence.\n } else if (isNumber(args[0])) {\n this[0] = jStat.seq.apply(null, args);\n this.length = 1;\n\n // Handle case when jStat object is passed to jStat.\n } else if (args[0] instanceof jStat) {\n // Duplicate the object and pass it back.\n return jStat(args[0].toArray());\n\n // Unexpected argument value, return empty jStat object.\n // TODO: This is strange behavior. Shouldn't this throw or some such to let\n // the user know they had bad arguments?\n } else {\n this[0] = [];\n this.length = 1;\n }\n\n return this;\n};\njStat._init.prototype = jStat.prototype;\njStat._init.constructor = jStat;\n\n\n// Utility functions.\n// TODO: for internal use only?\njStat.utils = {\n calcRdx: calcRdx,\n isArray: isArray,\n isFunction: isFunction,\n isNumber: isNumber,\n toVector: toVector\n};\n\n\njStat._random_fn = Math.random;\njStat.setRandom = function setRandom(fn) {\n if (typeof fn !== 'function')\n throw new TypeError('fn is not a function');\n jStat._random_fn = fn;\n};\n\n\n// Easily extend the jStat object.\n// TODO: is this seriously necessary?\njStat.extend = function extend(obj) {\n var i, j;\n\n if (arguments.length === 1) {\n for (j in obj)\n jStat[j] = obj[j];\n return this;\n }\n\n for (i = 1; i < arguments.length; i++) {\n for (j in arguments[i])\n obj[j] = arguments[i][j];\n }\n\n return obj;\n};\n\n\n// Returns the number of rows in the matrix.\njStat.rows = function rows(arr) {\n return arr.length || 1;\n};\n\n\n// Returns the number of columns in the matrix.\njStat.cols = function cols(arr) {\n return arr[0].length || 1;\n};\n\n\n// Returns the dimensions of the object { rows: i, cols: j }\njStat.dimensions = function dimensions(arr) {\n return {\n rows: jStat.rows(arr),\n cols: jStat.cols(arr)\n };\n};\n\n\n// Returns a specified row as a vector or return a sub matrix by pick some rows\njStat.row = function row(arr, index) {\n if (isArray(index)) {\n return index.map(function(i) {\n return jStat.row(arr, i);\n })\n }\n return arr[index];\n};\n\n\n// return row as array\n// rowa([[1,2],[3,4]],0) -> [1,2]\njStat.rowa = function rowa(arr, i) {\n return jStat.row(arr, i);\n};\n\n\n// Returns the specified column as a vector or return a sub matrix by pick some\n// columns\njStat.col = function col(arr, index) {\n if (isArray(index)) {\n var submat = jStat.arange(arr.length).map(function() {\n return new Array(index.length);\n });\n index.forEach(function(ind, i){\n jStat.arange(arr.length).forEach(function(j) {\n submat[j][i] = arr[j][ind];\n });\n });\n return submat;\n }\n var column = new Array(arr.length);\n for (var i = 0; i < arr.length; i++)\n column[i] = [arr[i][index]];\n return column;\n};\n\n\n// return column as array\n// cola([[1,2],[3,4]],0) -> [1,3]\njStat.cola = function cola(arr, i) {\n return jStat.col(arr, i).map(function(a){ return a[0] });\n};\n\n\n// Returns the diagonal of the matrix\njStat.diag = function diag(arr) {\n var nrow = jStat.rows(arr);\n var res = new Array(nrow);\n for (var row = 0; row < nrow; row++)\n res[row] = [arr[row][row]];\n return res;\n};\n\n\n// Returns the anti-diagonal of the matrix\njStat.antidiag = function antidiag(arr) {\n var nrow = jStat.rows(arr) - 1;\n var res = new Array(nrow);\n for (var i = 0; nrow >= 0; nrow--, i++)\n res[i] = [arr[i][nrow]];\n return res;\n};\n\n// Transpose a matrix or array.\njStat.transpose = function transpose(arr) {\n var obj = [];\n var objArr, rows, cols, j, i;\n\n // Make sure arr is in matrix format.\n if (!isArray(arr[0]))\n arr = [arr];\n\n rows = arr.length;\n cols = arr[0].length;\n\n for (i = 0; i < cols; i++) {\n objArr = new Array(rows);\n for (j = 0; j < rows; j++)\n objArr[j] = arr[j][i];\n obj.push(objArr);\n }\n\n // If obj is vector, return only single array.\n return obj.length === 1 ? obj[0] : obj;\n};\n\n\n// Map a function to an array or array of arrays.\n// \"toAlter\" is an internal variable.\njStat.map = function map(arr, func, toAlter) {\n var row, nrow, ncol, res, col;\n\n if (!isArray(arr[0]))\n arr = [arr];\n\n nrow = arr.length;\n ncol = arr[0].length;\n res = toAlter ? arr : new Array(nrow);\n\n for (row = 0; row < nrow; row++) {\n // if the row doesn't exist, create it\n if (!res[row])\n res[row] = new Array(ncol);\n for (col = 0; col < ncol; col++)\n res[row][col] = func(arr[row][col], row, col);\n }\n\n return res.length === 1 ? res[0] : res;\n};\n\n\n// Cumulatively combine the elements of an array or array of arrays using a function.\njStat.cumreduce = function cumreduce(arr, func, toAlter) {\n var row, nrow, ncol, res, col;\n\n if (!isArray(arr[0]))\n arr = [arr];\n\n nrow = arr.length;\n ncol = arr[0].length;\n res = toAlter ? arr : new Array(nrow);\n\n for (row = 0; row < nrow; row++) {\n // if the row doesn't exist, create it\n if (!res[row])\n res[row] = new Array(ncol);\n if (ncol > 0)\n res[row][0] = arr[row][0];\n for (col = 1; col < ncol; col++)\n res[row][col] = func(res[row][col-1], arr[row][col]);\n }\n return res.length === 1 ? res[0] : res;\n};\n\n\n// Destructively alter an array.\njStat.alter = function alter(arr, func) {\n return jStat.map(arr, func, true);\n};\n\n\n// Generate a rows x cols matrix according to the supplied function.\njStat.create = function create(rows, cols, func) {\n var res = new Array(rows);\n var i, j;\n\n if (isFunction(cols)) {\n func = cols;\n cols = rows;\n }\n\n for (i = 0; i < rows; i++) {\n res[i] = new Array(cols);\n for (j = 0; j < cols; j++)\n res[i][j] = func(i, j);\n }\n\n return res;\n};\n\n\nfunction retZero() { return 0; }\n\n\n// Generate a rows x cols matrix of zeros.\njStat.zeros = function zeros(rows, cols) {\n if (!isNumber(cols))\n cols = rows;\n return jStat.create(rows, cols, retZero);\n};\n\n\nfunction retOne() { return 1; }\n\n\n// Generate a rows x cols matrix of ones.\njStat.ones = function ones(rows, cols) {\n if (!isNumber(cols))\n cols = rows;\n return jStat.create(rows, cols, retOne);\n};\n\n\n// Generate a rows x cols matrix of uniformly random numbers.\njStat.rand = function rand(rows, cols) {\n if (!isNumber(cols))\n cols = rows;\n return jStat.create(rows, cols, jStat._random_fn);\n};\n\n\nfunction retIdent(i, j) { return i === j ? 1 : 0; }\n\n\n// Generate an identity matrix of size row x cols.\njStat.identity = function identity(rows, cols) {\n if (!isNumber(cols))\n cols = rows;\n return jStat.create(rows, cols, retIdent);\n};\n\n\n// Tests whether a matrix is symmetric\njStat.symmetric = function symmetric(arr) {\n var size = arr.length;\n var row, col;\n\n if (arr.length !== arr[0].length)\n return false;\n\n for (row = 0; row < size; row++) {\n for (col = 0; col < size; col++)\n if (arr[col][row] !== arr[row][col])\n return false;\n }\n\n return true;\n};\n\n\n// Set all values to zero.\njStat.clear = function clear(arr) {\n return jStat.alter(arr, retZero);\n};\n\n\n// Generate sequence.\njStat.seq = function seq(min, max, length, func) {\n if (!isFunction(func))\n func = false;\n\n var arr = [];\n var hival = calcRdx(min, max);\n var step = (max * hival - min * hival) / ((length - 1) * hival);\n var current = min;\n var cnt;\n\n // Current is assigned using a technique to compensate for IEEE error.\n // TODO: Needs better implementation.\n for (cnt = 0;\n current <= max && cnt < length;\n cnt++, current = (min * hival + step * hival * cnt) / hival) {\n arr.push((func ? func(current, cnt) : current));\n }\n\n return arr;\n};\n\n\n// arange(5) -> [0,1,2,3,4]\n// arange(1,5) -> [1,2,3,4]\n// arange(5,1,-1) -> [5,4,3,2]\njStat.arange = function arange(start, end, step) {\n var rl = [];\n var i;\n step = step || 1;\n if (end === undefined) {\n end = start;\n start = 0;\n }\n if (start === end || step === 0) {\n return [];\n }\n if (start < end && step < 0) {\n return [];\n }\n if (start > end && step > 0) {\n return [];\n }\n if (step > 0) {\n for (i = start; i < end; i += step) {\n rl.push(i);\n }\n } else {\n for (i = start; i > end; i += step) {\n rl.push(i);\n }\n }\n return rl;\n};\n\n\n// A=[[1,2,3],[4,5,6],[7,8,9]]\n// slice(A,{row:{end:2},col:{start:1}}) -> [[2,3],[5,6]]\n// slice(A,1,{start:1}) -> [5,6]\n// as numpy code A[:2,1:]\njStat.slice = (function(){\n function _slice(list, start, end, step) {\n // note it's not equal to range.map mode it's a bug\n var i;\n var rl = [];\n var length = list.length;\n if (start === undefined && end === undefined && step === undefined) {\n return jStat.copy(list);\n }\n\n start = start || 0;\n end = end || list.length;\n start = start >= 0 ? start : length + start;\n end = end >= 0 ? end : length + end;\n step = step || 1;\n if (start === end || step === 0) {\n return [];\n }\n if (start < end && step < 0) {\n return [];\n }\n if (start > end && step > 0) {\n return [];\n }\n if (step > 0) {\n for (i = start; i < end; i += step) {\n rl.push(list[i]);\n }\n } else {\n for (i = start; i > end;i += step) {\n rl.push(list[i]);\n }\n }\n return rl;\n }\n\n function slice(list, rcSlice) {\n var colSlice, rowSlice;\n rcSlice = rcSlice || {};\n if (isNumber(rcSlice.row)) {\n if (isNumber(rcSlice.col))\n return list[rcSlice.row][rcSlice.col];\n var row = jStat.rowa(list, rcSlice.row);\n colSlice = rcSlice.col || {};\n return _slice(row, colSlice.start, colSlice.end, colSlice.step);\n }\n\n if (isNumber(rcSlice.col)) {\n var col = jStat.cola(list, rcSlice.col);\n rowSlice = rcSlice.row || {};\n return _slice(col, rowSlice.start, rowSlice.end, rowSlice.step);\n }\n\n rowSlice = rcSlice.row || {};\n colSlice = rcSlice.col || {};\n var rows = _slice(list, rowSlice.start, rowSlice.end, rowSlice.step);\n return rows.map(function(row) {\n return _slice(row, colSlice.start, colSlice.end, colSlice.step);\n });\n }\n\n return slice;\n}());\n\n\n// A=[[1,2,3],[4,5,6],[7,8,9]]\n// sliceAssign(A,{row:{start:1},col:{start:1}},[[0,0],[0,0]])\n// A=[[1,2,3],[4,0,0],[7,0,0]]\njStat.sliceAssign = function sliceAssign(A, rcSlice, B) {\n var nl, ml;\n if (isNumber(rcSlice.row)) {\n if (isNumber(rcSlice.col))\n return A[rcSlice.row][rcSlice.col] = B;\n rcSlice.col = rcSlice.col || {};\n rcSlice.col.start = rcSlice.col.start || 0;\n rcSlice.col.end = rcSlice.col.end || A[0].length;\n rcSlice.col.step = rcSlice.col.step || 1;\n nl = jStat.arange(rcSlice.col.start,\n Math.min(A.length, rcSlice.col.end),\n rcSlice.col.step);\n var m = rcSlice.row;\n nl.forEach(function(n, i) {\n A[m][n] = B[i];\n });\n return A;\n }\n\n if (isNumber(rcSlice.col)) {\n rcSlice.row = rcSlice.row || {};\n rcSlice.row.start = rcSlice.row.start || 0;\n rcSlice.row.end = rcSlice.row.end || A.length;\n rcSlice.row.step = rcSlice.row.step || 1;\n ml = jStat.arange(rcSlice.row.start,\n Math.min(A[0].length, rcSlice.row.end),\n rcSlice.row.step);\n var n = rcSlice.col;\n ml.forEach(function(m, j) {\n A[m][n] = B[j];\n });\n return A;\n }\n\n if (B[0].length === undefined) {\n B = [B];\n }\n rcSlice.row.start = rcSlice.row.start || 0;\n rcSlice.row.end = rcSlice.row.end || A.length;\n rcSlice.row.step = rcSlice.row.step || 1;\n rcSlice.col.start = rcSlice.col.start || 0;\n rcSlice.col.end = rcSlice.col.end || A[0].length;\n rcSlice.col.step = rcSlice.col.step || 1;\n ml = jStat.arange(rcSlice.row.start,\n Math.min(A.length, rcSlice.row.end),\n rcSlice.row.step);\n nl = jStat.arange(rcSlice.col.start,\n Math.min(A[0].length, rcSlice.col.end),\n rcSlice.col.step);\n ml.forEach(function(m, i) {\n nl.forEach(function(n, j) {\n A[m][n] = B[i][j];\n });\n });\n return A;\n};\n\n\n// [1,2,3] ->\n// [[1,0,0],[0,2,0],[0,0,3]]\njStat.diagonal = function diagonal(diagArray) {\n var mat = jStat.zeros(diagArray.length, diagArray.length);\n diagArray.forEach(function(t, i) {\n mat[i][i] = t;\n });\n return mat;\n};\n\n\n// return copy of A\njStat.copy = function copy(A) {\n return A.map(function(row) {\n if (isNumber(row))\n return row;\n return row.map(function(t) {\n return t;\n });\n });\n};\n\n\n// TODO: Go over this entire implementation. Seems a tragic waste of resources\n// doing all this work. Instead, and while ugly, use new Function() to generate\n// a custom function for each static method.\n\n// Quick reference.\nvar jProto = jStat.prototype;\n\n// Default length.\njProto.length = 0;\n\n// For internal use only.\n// TODO: Check if they're actually used, and if they are then rename them\n// to _*\njProto.push = Array.prototype.push;\njProto.sort = Array.prototype.sort;\njProto.splice = Array.prototype.splice;\njProto.slice = Array.prototype.slice;\n\n\n// Return a clean array.\njProto.toArray = function toArray() {\n return this.length > 1 ? slice.call(this) : slice.call(this)[0];\n};\n\n\n// Map a function to a matrix or vector.\njProto.map = function map(func, toAlter) {\n return jStat(jStat.map(this, func, toAlter));\n};\n\n\n// Cumulatively combine the elements of a matrix or vector using a function.\njProto.cumreduce = function cumreduce(func, toAlter) {\n return jStat(jStat.cumreduce(this, func, toAlter));\n};\n\n\n// Destructively alter an array.\njProto.alter = function alter(func) {\n jStat.alter(this, func);\n return this;\n};\n\n\n// Extend prototype with methods that have no argument.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jProto[passfunc] = function(func) {\n var self = this,\n results;\n // Check for callback.\n if (func) {\n setTimeout(function() {\n func.call(self, jProto[passfunc].call(self));\n });\n return this;\n }\n results = jStat[passfunc](this);\n return isArray(results) ? jStat(results) : results;\n };\n })(funcs[i]);\n})('transpose clear symmetric rows cols dimensions diag antidiag'.split(' '));\n\n\n// Extend prototype with methods that have one argument.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jProto[passfunc] = function(index, func) {\n var self = this;\n // check for callback\n if (func) {\n setTimeout(function() {\n func.call(self, jProto[passfunc].call(self, index));\n });\n return this;\n }\n return jStat(jStat[passfunc](this, index));\n };\n })(funcs[i]);\n})('row col'.split(' '));\n\n\n// Extend prototype with simple shortcut methods.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jProto[passfunc] = function() {\n return jStat(jStat[passfunc].apply(null, arguments));\n };\n })(funcs[i]);\n})('create zeros ones rand identity'.split(' '));\n\n\n// Exposing jStat.\nreturn jStat;\n\n}(Math));\n(function(jStat, Math) {\n\nvar isFunction = jStat.utils.isFunction;\n\n// Ascending functions for sort\nfunction ascNum(a, b) { return a - b; }\n\nfunction clip(arg, min, max) {\n return Math.max(min, Math.min(arg, max));\n}\n\n\n// sum of an array\njStat.sum = function sum(arr) {\n var sum = 0;\n var i = arr.length;\n while (--i >= 0)\n sum += arr[i];\n return sum;\n};\n\n\n// sum squared\njStat.sumsqrd = function sumsqrd(arr) {\n var sum = 0;\n var i = arr.length;\n while (--i >= 0)\n sum += arr[i] * arr[i];\n return sum;\n};\n\n\n// sum of squared errors of prediction (SSE)\njStat.sumsqerr = function sumsqerr(arr) {\n var mean = jStat.mean(arr);\n var sum = 0;\n var i = arr.length;\n var tmp;\n while (--i >= 0) {\n tmp = arr[i] - mean;\n sum += tmp * tmp;\n }\n return sum;\n};\n\n// sum of an array in each row\njStat.sumrow = function sumrow(arr) {\n var sum = 0;\n var i = arr.length;\n while (--i >= 0)\n sum += arr[i];\n return sum;\n};\n\n// product of an array\njStat.product = function product(arr) {\n var prod = 1;\n var i = arr.length;\n while (--i >= 0)\n prod *= arr[i];\n return prod;\n};\n\n\n// minimum value of an array\njStat.min = function min(arr) {\n var low = arr[0];\n var i = 0;\n while (++i < arr.length)\n if (arr[i] < low)\n low = arr[i];\n return low;\n};\n\n\n// maximum value of an array\njStat.max = function max(arr) {\n var high = arr[0];\n var i = 0;\n while (++i < arr.length)\n if (arr[i] > high)\n high = arr[i];\n return high;\n};\n\n\n// unique values of an array\njStat.unique = function unique(arr) {\n var hash = {}, _arr = [];\n for(var i = 0; i < arr.length; i++) {\n if (!hash[arr[i]]) {\n hash[arr[i]] = true;\n _arr.push(arr[i]);\n }\n }\n return _arr;\n};\n\n\n// mean value of an array\njStat.mean = function mean(arr) {\n return jStat.sum(arr) / arr.length;\n};\n\n\n// mean squared error (MSE)\njStat.meansqerr = function meansqerr(arr) {\n return jStat.sumsqerr(arr) / arr.length;\n};\n\n\n// geometric mean of an array\njStat.geomean = function geomean(arr) {\n return Math.pow(jStat.product(arr), 1 / arr.length);\n};\n\n\n// median of an array\njStat.median = function median(arr) {\n var arrlen = arr.length;\n var _arr = arr.slice().sort(ascNum);\n // check if array is even or odd, then return the appropriate\n return !(arrlen & 1)\n ? (_arr[(arrlen / 2) - 1 ] + _arr[(arrlen / 2)]) / 2\n : _arr[(arrlen / 2) | 0 ];\n};\n\n\n// cumulative sum of an array\njStat.cumsum = function cumsum(arr) {\n return jStat.cumreduce(arr, function (a, b) { return a + b; });\n};\n\n\n// cumulative product of an array\njStat.cumprod = function cumprod(arr) {\n return jStat.cumreduce(arr, function (a, b) { return a * b; });\n};\n\n\n// successive differences of a sequence\njStat.diff = function diff(arr) {\n var diffs = [];\n var arrLen = arr.length;\n var i;\n for (i = 1; i < arrLen; i++)\n diffs.push(arr[i] - arr[i - 1]);\n return diffs;\n};\n\n\n// ranks of an array\njStat.rank = function (arr) {\n var i;\n var distinctNumbers = [];\n var numberCounts = {};\n for (i = 0; i < arr.length; i++) {\n var number = arr[i];\n if (numberCounts[number]) {\n numberCounts[number]++;\n } else {\n numberCounts[number] = 1;\n distinctNumbers.push(number);\n }\n }\n\n var sortedDistinctNumbers = distinctNumbers.sort(ascNum);\n var numberRanks = {};\n var currentRank = 1;\n for (i = 0; i < sortedDistinctNumbers.length; i++) {\n var number = sortedDistinctNumbers[i];\n var count = numberCounts[number];\n var first = currentRank;\n var last = currentRank + count - 1;\n var rank = (first + last) / 2;\n numberRanks[number] = rank;\n currentRank += count;\n }\n\n return arr.map(function (number) {\n return numberRanks[number];\n });\n};\n\n\n// mode of an array\n// if there are multiple modes of an array, return all of them\n// is this the appropriate way of handling it?\njStat.mode = function mode(arr) {\n var arrLen = arr.length;\n var _arr = arr.slice().sort(ascNum);\n var count = 1;\n var maxCount = 0;\n var numMaxCount = 0;\n var mode_arr = [];\n var i;\n\n for (i = 0; i < arrLen; i++) {\n if (_arr[i] === _arr[i + 1]) {\n count++;\n } else {\n if (count > maxCount) {\n mode_arr = [_arr[i]];\n maxCount = count;\n numMaxCount = 0;\n }\n // are there multiple max counts\n else if (count === maxCount) {\n mode_arr.push(_arr[i]);\n numMaxCount++;\n }\n // resetting count for new value in array\n count = 1;\n }\n }\n\n return numMaxCount === 0 ? mode_arr[0] : mode_arr;\n};\n\n\n// range of an array\njStat.range = function range(arr) {\n return jStat.max(arr) - jStat.min(arr);\n};\n\n// variance of an array\n// flag = true indicates sample instead of population\njStat.variance = function variance(arr, flag) {\n return jStat.sumsqerr(arr) / (arr.length - (flag ? 1 : 0));\n};\n\n// pooled variance of an array of arrays\njStat.pooledvariance = function pooledvariance(arr) {\n var sumsqerr = arr.reduce(function (a, samples) {return a + jStat.sumsqerr(samples);}, 0);\n var count = arr.reduce(function (a, samples) {return a + samples.length;}, 0);\n return sumsqerr / (count - arr.length);\n};\n\n// deviation of an array\njStat.deviation = function (arr) {\n var mean = jStat.mean(arr);\n var arrlen = arr.length;\n var dev = new Array(arrlen);\n for (var i = 0; i < arrlen; i++) {\n dev[i] = arr[i] - mean;\n }\n return dev;\n};\n\n// standard deviation of an array\n// flag = true indicates sample instead of population\njStat.stdev = function stdev(arr, flag) {\n return Math.sqrt(jStat.variance(arr, flag));\n};\n\n// pooled standard deviation of an array of arrays\njStat.pooledstdev = function pooledstdev(arr) {\n return Math.sqrt(jStat.pooledvariance(arr));\n};\n\n// mean deviation (mean absolute deviation) of an array\njStat.meandev = function meandev(arr) {\n var mean = jStat.mean(arr);\n var a = [];\n for (var i = arr.length - 1; i >= 0; i--) {\n a.push(Math.abs(arr[i] - mean));\n }\n return jStat.mean(a);\n};\n\n\n// median deviation (median absolute deviation) of an array\njStat.meddev = function meddev(arr) {\n var median = jStat.median(arr);\n var a = [];\n for (var i = arr.length - 1; i >= 0; i--) {\n a.push(Math.abs(arr[i] - median));\n }\n return jStat.median(a);\n};\n\n\n// coefficient of variation\njStat.coeffvar = function coeffvar(arr) {\n return jStat.stdev(arr) / jStat.mean(arr);\n};\n\n\n// quartiles of an array\njStat.quartiles = function quartiles(arr) {\n var arrlen = arr.length;\n var _arr = arr.slice().sort(ascNum);\n return [\n _arr[ Math.round((arrlen) / 4) - 1 ],\n _arr[ Math.round((arrlen) / 2) - 1 ],\n _arr[ Math.round((arrlen) * 3 / 4) - 1 ]\n ];\n};\n\n\n// Arbitary quantiles of an array. Direct port of the scipy.stats\n// implementation by Pierre GF Gerard-Marchant.\njStat.quantiles = function quantiles(arr, quantilesArray, alphap, betap) {\n var sortedArray = arr.slice().sort(ascNum);\n var quantileVals = [quantilesArray.length];\n var n = arr.length;\n var i, p, m, aleph, k, gamma;\n\n if (typeof alphap === 'undefined')\n alphap = 3 / 8;\n if (typeof betap === 'undefined')\n betap = 3 / 8;\n\n for (i = 0; i < quantilesArray.length; i++) {\n p = quantilesArray[i];\n m = alphap + p * (1 - alphap - betap);\n aleph = n * p + m;\n k = Math.floor(clip(aleph, 1, n - 1));\n gamma = clip(aleph - k, 0, 1);\n quantileVals[i] = (1 - gamma) * sortedArray[k - 1] + gamma * sortedArray[k];\n }\n\n return quantileVals;\n};\n\n// Return the k-th percentile of values in a range, where k is in the range 0..1, inclusive.\n// Passing true for the exclusive parameter excludes both endpoints of the range.\njStat.percentile = function percentile(arr, k, exclusive) {\n var _arr = arr.slice().sort(ascNum);\n var realIndex = k * (_arr.length + (exclusive ? 1 : -1)) + (exclusive ? 0 : 1);\n var index = parseInt(realIndex);\n var frac = realIndex - index;\n if (index + 1 < _arr.length) {\n return _arr[index - 1] + frac * (_arr[index] - _arr[index - 1]);\n } else {\n return _arr[index - 1];\n }\n}\n\n// The percentile rank of score in a given array. Returns the percentage\n// of all values in the input array that are less than (kind='strict') or\n// less or equal than (kind='weak') score. Default is weak.\njStat.percentileOfScore = function percentileOfScore(arr, score, kind) {\n var counter = 0;\n var len = arr.length;\n var strict = false;\n var value, i;\n\n if (kind === 'strict')\n strict = true;\n\n for (i = 0; i < len; i++) {\n value = arr[i];\n if ((strict && value < score) ||\n (!strict && value <= score)) {\n counter++;\n }\n }\n\n return counter / len;\n};\n\n\n// Histogram (bin count) data\njStat.histogram = function histogram(arr, binCnt) {\n binCnt = binCnt || 4;\n var first = jStat.min(arr);\n var binWidth = (jStat.max(arr) - first) / binCnt;\n var len = arr.length;\n var bins = [];\n var i;\n\n for (i = 0; i < binCnt; i++)\n bins[i] = 0;\n for (i = 0; i < len; i++)\n bins[Math.min(Math.floor(((arr[i] - first) / binWidth)), binCnt - 1)] += 1;\n\n return bins;\n};\n\n\n// covariance of two arrays\njStat.covariance = function covariance(arr1, arr2) {\n var u = jStat.mean(arr1);\n var v = jStat.mean(arr2);\n var arr1Len = arr1.length;\n var sq_dev = new Array(arr1Len);\n var i;\n\n for (i = 0; i < arr1Len; i++)\n sq_dev[i] = (arr1[i] - u) * (arr2[i] - v);\n\n return jStat.sum(sq_dev) / (arr1Len - 1);\n};\n\n\n// (pearson's) population correlation coefficient, rho\njStat.corrcoeff = function corrcoeff(arr1, arr2) {\n return jStat.covariance(arr1, arr2) /\n jStat.stdev(arr1, 1) /\n jStat.stdev(arr2, 1);\n};\n\n // (spearman's) rank correlation coefficient, sp\njStat.spearmancoeff = function (arr1, arr2) {\n arr1 = jStat.rank(arr1);\n arr2 = jStat.rank(arr2);\n //return pearson's correlation of the ranks:\n return jStat.corrcoeff(arr1, arr2);\n}\n\n\n// statistical standardized moments (general form of skew/kurt)\njStat.stanMoment = function stanMoment(arr, n) {\n var mu = jStat.mean(arr);\n var sigma = jStat.stdev(arr);\n var len = arr.length;\n var skewSum = 0;\n\n for (var i = 0; i < len; i++)\n skewSum += Math.pow((arr[i] - mu) / sigma, n);\n\n return skewSum / arr.length;\n};\n\n// (pearson's) moment coefficient of skewness\njStat.skewness = function skewness(arr) {\n return jStat.stanMoment(arr, 3);\n};\n\n// (pearson's) (excess) kurtosis\njStat.kurtosis = function kurtosis(arr) {\n return jStat.stanMoment(arr, 4) - 3;\n};\n\n\nvar jProto = jStat.prototype;\n\n\n// Extend jProto with method for calculating cumulative sums and products.\n// This differs from the similar extension below as cumsum and cumprod should\n// not be run again in the case fullbool === true.\n// If a matrix is passed, automatically assume operation should be done on the\n// columns.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n // If a matrix is passed, automatically assume operation should be done on\n // the columns.\n jProto[passfunc] = function(fullbool, func) {\n var arr = [];\n var i = 0;\n var tmpthis = this;\n // Assignment reassignation depending on how parameters were passed in.\n if (isFunction(fullbool)) {\n func = fullbool;\n fullbool = false;\n }\n // Check if a callback was passed with the function.\n if (func) {\n setTimeout(function() {\n func.call(tmpthis, jProto[passfunc].call(tmpthis, fullbool));\n });\n return this;\n }\n // Check if matrix and run calculations.\n if (this.length > 1) {\n tmpthis = fullbool === true ? this : this.transpose();\n for (; i < tmpthis.length; i++)\n arr[i] = jStat[passfunc](tmpthis[i]);\n return arr;\n }\n // Pass fullbool if only vector, not a matrix. for variance and stdev.\n return jStat[passfunc](this[0], fullbool);\n };\n })(funcs[i]);\n})(('cumsum cumprod').split(' '));\n\n\n// Extend jProto with methods which don't require arguments and work on columns.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n // If a matrix is passed, automatically assume operation should be done on\n // the columns.\n jProto[passfunc] = function(fullbool, func) {\n var arr = [];\n var i = 0;\n var tmpthis = this;\n // Assignment reassignation depending on how parameters were passed in.\n if (isFunction(fullbool)) {\n func = fullbool;\n fullbool = false;\n }\n // Check if a callback was passed with the function.\n if (func) {\n setTimeout(function() {\n func.call(tmpthis, jProto[passfunc].call(tmpthis, fullbool));\n });\n return this;\n }\n // Check if matrix and run calculations.\n if (this.length > 1) {\n if (passfunc !== 'sumrow')\n tmpthis = fullbool === true ? this : this.transpose();\n for (; i < tmpthis.length; i++)\n arr[i] = jStat[passfunc](tmpthis[i]);\n return fullbool === true\n ? jStat[passfunc](jStat.utils.toVector(arr))\n : arr;\n }\n // Pass fullbool if only vector, not a matrix. for variance and stdev.\n return jStat[passfunc](this[0], fullbool);\n };\n })(funcs[i]);\n})(('sum sumsqrd sumsqerr sumrow product min max unique mean meansqerr ' +\n 'geomean median diff rank mode range variance deviation stdev meandev ' +\n 'meddev coeffvar quartiles histogram skewness kurtosis').split(' '));\n\n\n// Extend jProto with functions that take arguments. Operations on matrices are\n// done on columns.\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jProto[passfunc] = function() {\n var arr = [];\n var i = 0;\n var tmpthis = this;\n var args = Array.prototype.slice.call(arguments);\n var callbackFunction;\n\n // If the last argument is a function, we assume it's a callback; we\n // strip the callback out and call the function again.\n if (isFunction(args[args.length - 1])) {\n callbackFunction = args[args.length - 1];\n var argsToPass = args.slice(0, args.length - 1);\n\n setTimeout(function() {\n callbackFunction.call(tmpthis,\n jProto[passfunc].apply(tmpthis, argsToPass));\n });\n return this;\n\n // Otherwise we curry the function args and call normally.\n } else {\n callbackFunction = undefined;\n var curriedFunction = function curriedFunction(vector) {\n return jStat[passfunc].apply(tmpthis, [vector].concat(args));\n }\n }\n\n // If this is a matrix, run column-by-column.\n if (this.length > 1) {\n tmpthis = tmpthis.transpose();\n for (; i < tmpthis.length; i++)\n arr[i] = curriedFunction(tmpthis[i]);\n return arr;\n }\n\n // Otherwise run on the vector.\n return curriedFunction(this[0]);\n };\n })(funcs[i]);\n})('quantiles percentileOfScore'.split(' '));\n\n}(jStat, Math));\n// Special functions //\n(function(jStat, Math) {\n\n// Log-gamma function\njStat.gammaln = function gammaln(x) {\n var j = 0;\n var cof = [\n 76.18009172947146, -86.50532032941677, 24.01409824083091,\n -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5\n ];\n var ser = 1.000000000190015;\n var xx, y, tmp;\n tmp = (y = xx = x) + 5.5;\n tmp -= (xx + 0.5) * Math.log(tmp);\n for (; j < 6; j++)\n ser += cof[j] / ++y;\n return Math.log(2.5066282746310005 * ser / xx) - tmp;\n};\n\n/*\n * log-gamma function to support poisson distribution sampling. The\n * algorithm comes from SPECFUN by Shanjie Zhang and Jianming Jin and their\n * book \"Computation of Special Functions\", 1996, John Wiley & Sons, Inc.\n */\njStat.loggam = function loggam(x) {\n var x0, x2, xp, gl, gl0;\n var k, n;\n\n var a = [8.333333333333333e-02, -2.777777777777778e-03,\n 7.936507936507937e-04, -5.952380952380952e-04,\n 8.417508417508418e-04, -1.917526917526918e-03,\n 6.410256410256410e-03, -2.955065359477124e-02,\n 1.796443723688307e-01, -1.39243221690590e+00];\n x0 = x;\n n = 0;\n if ((x == 1.0) || (x == 2.0)) {\n return 0.0;\n }\n if (x <= 7.0) {\n n = Math.floor(7 - x);\n x0 = x + n;\n }\n x2 = 1.0 / (x0 * x0);\n xp = 2 * Math.PI;\n gl0 = a[9];\n for (k = 8; k >= 0; k--) {\n gl0 *= x2;\n gl0 += a[k];\n }\n gl = gl0 / x0 + 0.5 * Math.log(xp) + (x0 - 0.5) * Math.log(x0) - x0;\n if (x <= 7.0) {\n for (k = 1; k <= n; k++) {\n gl -= Math.log(x0 - 1.0);\n x0 -= 1.0;\n }\n }\n return gl;\n}\n\n// gamma of x\njStat.gammafn = function gammafn(x) {\n var p = [-1.716185138865495, 24.76565080557592, -379.80425647094563,\n 629.3311553128184, 866.9662027904133, -31451.272968848367,\n -36144.413418691176, 66456.14382024054\n ];\n var q = [-30.8402300119739, 315.35062697960416, -1015.1563674902192,\n -3107.771671572311, 22538.118420980151, 4755.8462775278811,\n -134659.9598649693, -115132.2596755535];\n var fact = false;\n var n = 0;\n var xden = 0;\n var xnum = 0;\n var y = x;\n var i, z, yi, res;\n if (x > 171.6243769536076) {\n return Infinity;\n }\n if (y <= 0) {\n res = y % 1 + 3.6e-16;\n if (res) {\n fact = (!(y & 1) ? 1 : -1) * Math.PI / Math.sin(Math.PI * res);\n y = 1 - y;\n } else {\n return Infinity;\n }\n }\n yi = y;\n if (y < 1) {\n z = y++;\n } else {\n z = (y -= n = (y | 0) - 1) - 1;\n }\n for (i = 0; i < 8; ++i) {\n xnum = (xnum + p[i]) * z;\n xden = xden * z + q[i];\n }\n res = xnum / xden + 1;\n if (yi < y) {\n res /= yi;\n } else if (yi > y) {\n for (i = 0; i < n; ++i) {\n res *= y;\n y++;\n }\n }\n if (fact) {\n res = fact / res;\n }\n return res;\n};\n\n\n// lower incomplete gamma function, which is usually typeset with a\n// lower-case greek gamma as the function symbol\njStat.gammap = function gammap(a, x) {\n return jStat.lowRegGamma(a, x) * jStat.gammafn(a);\n};\n\n\n// The lower regularized incomplete gamma function, usually written P(a,x)\njStat.lowRegGamma = function lowRegGamma(a, x) {\n var aln = jStat.gammaln(a);\n var ap = a;\n var sum = 1 / a;\n var del = sum;\n var b = x + 1 - a;\n var c = 1 / 1.0e-30;\n var d = 1 / b;\n var h = d;\n var i = 1;\n // calculate maximum number of itterations required for a\n var ITMAX = -~(Math.log((a >= 1) ? a : 1 / a) * 8.5 + a * 0.4 + 17);\n var an;\n\n if (x < 0 || a <= 0) {\n return NaN;\n } else if (x < a + 1) {\n for (; i <= ITMAX; i++) {\n sum += del *= x / ++ap;\n }\n return (sum * Math.exp(-x + a * Math.log(x) - (aln)));\n }\n\n for (; i <= ITMAX; i++) {\n an = -i * (i - a);\n b += 2;\n d = an * d + b;\n c = b + an / c;\n d = 1 / d;\n h *= d * c;\n }\n\n return (1 - h * Math.exp(-x + a * Math.log(x) - (aln)));\n};\n\n// natural log factorial of n\njStat.factorialln = function factorialln(n) {\n return n < 0 ? NaN : jStat.gammaln(n + 1);\n};\n\n// factorial of n\njStat.factorial = function factorial(n) {\n return n < 0 ? NaN : jStat.gammafn(n + 1);\n};\n\n// combinations of n, m\njStat.combination = function combination(n, m) {\n // make sure n or m don't exceed the upper limit of usable values\n return (n > 170 || m > 170)\n ? Math.exp(jStat.combinationln(n, m))\n : (jStat.factorial(n) / jStat.factorial(m)) / jStat.factorial(n - m);\n};\n\n\njStat.combinationln = function combinationln(n, m){\n return jStat.factorialln(n) - jStat.factorialln(m) - jStat.factorialln(n - m);\n};\n\n\n// permutations of n, m\njStat.permutation = function permutation(n, m) {\n return jStat.factorial(n) / jStat.factorial(n - m);\n};\n\n\n// beta function\njStat.betafn = function betafn(x, y) {\n // ensure arguments are positive\n if (x <= 0 || y <= 0)\n return undefined;\n // make sure x + y doesn't exceed the upper limit of usable values\n return (x + y > 170)\n ? Math.exp(jStat.betaln(x, y))\n : jStat.gammafn(x) * jStat.gammafn(y) / jStat.gammafn(x + y);\n};\n\n\n// natural logarithm of beta function\njStat.betaln = function betaln(x, y) {\n return jStat.gammaln(x) + jStat.gammaln(y) - jStat.gammaln(x + y);\n};\n\n\n// Evaluates the continued fraction for incomplete beta function by modified\n// Lentz's method.\njStat.betacf = function betacf(x, a, b) {\n var fpmin = 1e-30;\n var m = 1;\n var qab = a + b;\n var qap = a + 1;\n var qam = a - 1;\n var c = 1;\n var d = 1 - qab * x / qap;\n var m2, aa, del, h;\n\n // These q's will be used in factors that occur in the coefficients\n if (Math.abs(d) < fpmin)\n d = fpmin;\n d = 1 / d;\n h = d;\n\n for (; m <= 100; m++) {\n m2 = 2 * m;\n aa = m * (b - m) * x / ((qam + m2) * (a + m2));\n // One step (the even one) of the recurrence\n d = 1 + aa * d;\n if (Math.abs(d) < fpmin)\n d = fpmin;\n c = 1 + aa / c;\n if (Math.abs(c) < fpmin)\n c = fpmin;\n d = 1 / d;\n h *= d * c;\n aa = -(a + m) * (qab + m) * x / ((a + m2) * (qap + m2));\n // Next step of the recurrence (the odd one)\n d = 1 + aa * d;\n if (Math.abs(d) < fpmin)\n d = fpmin;\n c = 1 + aa / c;\n if (Math.abs(c) < fpmin)\n c = fpmin;\n d = 1 / d;\n del = d * c;\n h *= del;\n if (Math.abs(del - 1.0) < 3e-7)\n break;\n }\n\n return h;\n};\n\n\n// Returns the inverse of the lower regularized inomplete gamma function\njStat.gammapinv = function gammapinv(p, a) {\n var j = 0;\n var a1 = a - 1;\n var EPS = 1e-8;\n var gln = jStat.gammaln(a);\n var x, err, t, u, pp, lna1, afac;\n\n if (p >= 1)\n return Math.max(100, a + 100 * Math.sqrt(a));\n if (p <= 0)\n return 0;\n if (a > 1) {\n lna1 = Math.log(a1);\n afac = Math.exp(a1 * (lna1 - 1) - gln);\n pp = (p < 0.5) ? p : 1 - p;\n t = Math.sqrt(-2 * Math.log(pp));\n x = (2.30753 + t * 0.27061) / (1 + t * (0.99229 + t * 0.04481)) - t;\n if (p < 0.5)\n x = -x;\n x = Math.max(1e-3,\n a * Math.pow(1 - 1 / (9 * a) - x / (3 * Math.sqrt(a)), 3));\n } else {\n t = 1 - a * (0.253 + a * 0.12);\n if (p < t)\n x = Math.pow(p / t, 1 / a);\n else\n x = 1 - Math.log(1 - (p - t) / (1 - t));\n }\n\n for(; j < 12; j++) {\n if (x <= 0)\n return 0;\n err = jStat.lowRegGamma(a, x) - p;\n if (a > 1)\n t = afac * Math.exp(-(x - a1) + a1 * (Math.log(x) - lna1));\n else\n t = Math.exp(-x + a1 * Math.log(x) - gln);\n u = err / t;\n x -= (t = u / (1 - 0.5 * Math.min(1, u * ((a - 1) / x - 1))));\n if (x <= 0)\n x = 0.5 * (x + t);\n if (Math.abs(t) < EPS * x)\n break;\n }\n\n return x;\n};\n\n\n// Returns the error function erf(x)\njStat.erf = function erf(x) {\n var cof = [-1.3026537197817094, 6.4196979235649026e-1, 1.9476473204185836e-2,\n -9.561514786808631e-3, -9.46595344482036e-4, 3.66839497852761e-4,\n 4.2523324806907e-5, -2.0278578112534e-5, -1.624290004647e-6,\n 1.303655835580e-6, 1.5626441722e-8, -8.5238095915e-8,\n 6.529054439e-9, 5.059343495e-9, -9.91364156e-10,\n -2.27365122e-10, 9.6467911e-11, 2.394038e-12,\n -6.886027e-12, 8.94487e-13, 3.13092e-13,\n -1.12708e-13, 3.81e-16, 7.106e-15,\n -1.523e-15, -9.4e-17, 1.21e-16,\n -2.8e-17];\n var j = cof.length - 1;\n var isneg = false;\n var d = 0;\n var dd = 0;\n var t, ty, tmp, res;\n\n if (x < 0) {\n x = -x;\n isneg = true;\n }\n\n t = 2 / (2 + x);\n ty = 4 * t - 2;\n\n for(; j > 0; j--) {\n tmp = d;\n d = ty * d - dd + cof[j];\n dd = tmp;\n }\n\n res = t * Math.exp(-x * x + 0.5 * (cof[0] + ty * d) - dd);\n return isneg ? res - 1 : 1 - res;\n};\n\n\n// Returns the complmentary error function erfc(x)\njStat.erfc = function erfc(x) {\n return 1 - jStat.erf(x);\n};\n\n\n// Returns the inverse of the complementary error function\njStat.erfcinv = function erfcinv(p) {\n var j = 0;\n var x, err, t, pp;\n if (p >= 2)\n return -100;\n if (p <= 0)\n return 100;\n pp = (p < 1) ? p : 2 - p;\n t = Math.sqrt(-2 * Math.log(pp / 2));\n x = -0.70711 * ((2.30753 + t * 0.27061) /\n (1 + t * (0.99229 + t * 0.04481)) - t);\n for (; j < 2; j++) {\n err = jStat.erfc(x) - pp;\n x += err / (1.12837916709551257 * Math.exp(-x * x) - x * err);\n }\n return (p < 1) ? x : -x;\n};\n\n\n// Returns the inverse of the incomplete beta function\njStat.ibetainv = function ibetainv(p, a, b) {\n var EPS = 1e-8;\n var a1 = a - 1;\n var b1 = b - 1;\n var j = 0;\n var lna, lnb, pp, t, u, err, x, al, h, w, afac;\n if (p <= 0)\n return 0;\n if (p >= 1)\n return 1;\n if (a >= 1 && b >= 1) {\n pp = (p < 0.5) ? p : 1 - p;\n t = Math.sqrt(-2 * Math.log(pp));\n x = (2.30753 + t * 0.27061) / (1 + t* (0.99229 + t * 0.04481)) - t;\n if (p < 0.5)\n x = -x;\n al = (x * x - 3) / 6;\n h = 2 / (1 / (2 * a - 1) + 1 / (2 * b - 1));\n w = (x * Math.sqrt(al + h) / h) - (1 / (2 * b - 1) - 1 / (2 * a - 1)) *\n (al + 5 / 6 - 2 / (3 * h));\n x = a / (a + b * Math.exp(2 * w));\n } else {\n lna = Math.log(a / (a + b));\n lnb = Math.log(b / (a + b));\n t = Math.exp(a * lna) / a;\n u = Math.exp(b * lnb) / b;\n w = t + u;\n if (p < t / w)\n x = Math.pow(a * w * p, 1 / a);\n else\n x = 1 - Math.pow(b * w * (1 - p), 1 / b);\n }\n afac = -jStat.gammaln(a) - jStat.gammaln(b) + jStat.gammaln(a + b);\n for(; j < 10; j++) {\n if (x === 0 || x === 1)\n return x;\n err = jStat.ibeta(x, a, b) - p;\n t = Math.exp(a1 * Math.log(x) + b1 * Math.log(1 - x) + afac);\n u = err / t;\n x -= (t = u / (1 - 0.5 * Math.min(1, u * (a1 / x - b1 / (1 - x)))));\n if (x <= 0)\n x = 0.5 * (x + t);\n if (x >= 1)\n x = 0.5 * (x + t + 1);\n if (Math.abs(t) < EPS * x && j > 0)\n break;\n }\n return x;\n};\n\n\n// Returns the incomplete beta function I_x(a,b)\njStat.ibeta = function ibeta(x, a, b) {\n // Factors in front of the continued fraction.\n var bt = (x === 0 || x === 1) ? 0 :\n Math.exp(jStat.gammaln(a + b) - jStat.gammaln(a) -\n jStat.gammaln(b) + a * Math.log(x) + b *\n Math.log(1 - x));\n if (x < 0 || x > 1)\n return false;\n if (x < (a + 1) / (a + b + 2))\n // Use continued fraction directly.\n return bt * jStat.betacf(x, a, b) / a;\n // else use continued fraction after making the symmetry transformation.\n return 1 - bt * jStat.betacf(1 - x, b, a) / b;\n};\n\n\n// Returns a normal deviate (mu=0, sigma=1).\n// If n and m are specified it returns a object of normal deviates.\njStat.randn = function randn(n, m) {\n var u, v, x, y, q;\n if (!m)\n m = n;\n if (n)\n return jStat.create(n, m, function() { return jStat.randn(); });\n do {\n u = jStat._random_fn();\n v = 1.7156 * (jStat._random_fn() - 0.5);\n x = u - 0.449871;\n y = Math.abs(v) + 0.386595;\n q = x * x + y * (0.19600 * y - 0.25472 * x);\n } while (q > 0.27597 && (q > 0.27846 || v * v > -4 * Math.log(u) * u * u));\n return v / u;\n};\n\n\n// Returns a gamma deviate by the method of Marsaglia and Tsang.\njStat.randg = function randg(shape, n, m) {\n var oalph = shape;\n var a1, a2, u, v, x, mat;\n if (!m)\n m = n;\n if (!shape)\n shape = 1;\n if (n) {\n mat = jStat.zeros(n,m);\n mat.alter(function() { return jStat.randg(shape); });\n return mat;\n }\n if (shape < 1)\n shape += 1;\n a1 = shape - 1 / 3;\n a2 = 1 / Math.sqrt(9 * a1);\n do {\n do {\n x = jStat.randn();\n v = 1 + a2 * x;\n } while(v <= 0);\n v = v * v * v;\n u = jStat._random_fn();\n } while(u > 1 - 0.331 * Math.pow(x, 4) &&\n Math.log(u) > 0.5 * x*x + a1 * (1 - v + Math.log(v)));\n // alpha > 1\n if (shape == oalph)\n return a1 * v;\n // alpha < 1\n do {\n u = jStat._random_fn();\n } while(u === 0);\n return Math.pow(u, 1 / oalph) * a1 * v;\n};\n\n\n// making use of static methods on the instance\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jStat.fn[passfunc] = function() {\n return jStat(\n jStat.map(this, function(value) { return jStat[passfunc](value); }));\n }\n })(funcs[i]);\n})('gammaln gammafn factorial factorialln'.split(' '));\n\n\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jStat.fn[passfunc] = function() {\n return jStat(jStat[passfunc].apply(null, arguments));\n };\n })(funcs[i]);\n})('randn'.split(' '));\n\n}(jStat, Math));\n(function(jStat, Math) {\n\n// generate all distribution instance methods\n(function(list) {\n for (var i = 0; i < list.length; i++) (function(func) {\n // distribution instance method\n jStat[func] = function f(a, b, c) {\n if (!(this instanceof f))\n return new f(a, b, c);\n this._a = a;\n this._b = b;\n this._c = c;\n return this;\n };\n // distribution method to be used on a jStat instance\n jStat.fn[func] = function(a, b, c) {\n var newthis = jStat[func](a, b, c);\n newthis.data = this;\n return newthis;\n };\n // sample instance method\n jStat[func].prototype.sample = function(arr) {\n var a = this._a;\n var b = this._b;\n var c = this._c;\n if (arr)\n return jStat.alter(arr, function() {\n return jStat[func].sample(a, b, c);\n });\n else\n return jStat[func].sample(a, b, c);\n };\n // generate the pdf, cdf and inv instance methods\n (function(vals) {\n for (var i = 0; i < vals.length; i++) (function(fnfunc) {\n jStat[func].prototype[fnfunc] = function(x) {\n var a = this._a;\n var b = this._b;\n var c = this._c;\n if (!x && x !== 0)\n x = this.data;\n if (typeof x !== 'number') {\n return jStat.fn.map.call(x, function(x) {\n return jStat[func][fnfunc](x, a, b, c);\n });\n }\n return jStat[func][fnfunc](x, a, b, c);\n };\n })(vals[i]);\n })('pdf cdf inv'.split(' '));\n // generate the mean, median, mode and variance instance methods\n (function(vals) {\n for (var i = 0; i < vals.length; i++) (function(fnfunc) {\n jStat[func].prototype[fnfunc] = function() {\n return jStat[func][fnfunc](this._a, this._b, this._c);\n };\n })(vals[i]);\n })('mean median mode variance'.split(' '));\n })(list[i]);\n})((\n 'beta centralF cauchy chisquare exponential gamma invgamma kumaraswamy ' +\n 'laplace lognormal noncentralt normal pareto studentt weibull uniform ' +\n 'binomial negbin hypgeom poisson triangular tukey arcsine'\n).split(' '));\n\n\n\n// extend beta function with static methods\njStat.extend(jStat.beta, {\n pdf: function pdf(x, alpha, beta) {\n // PDF is zero outside the support\n if (x > 1 || x < 0)\n return 0;\n // PDF is one for the uniform case\n if (alpha == 1 && beta == 1)\n return 1;\n\n if (alpha < 512 && beta < 512) {\n return (Math.pow(x, alpha - 1) * Math.pow(1 - x, beta - 1)) /\n jStat.betafn(alpha, beta);\n } else {\n return Math.exp((alpha - 1) * Math.log(x) +\n (beta - 1) * Math.log(1 - x) -\n jStat.betaln(alpha, beta));\n }\n },\n\n cdf: function cdf(x, alpha, beta) {\n return (x > 1 || x < 0) ? (x > 1) * 1 : jStat.ibeta(x, alpha, beta);\n },\n\n inv: function inv(x, alpha, beta) {\n return jStat.ibetainv(x, alpha, beta);\n },\n\n mean: function mean(alpha, beta) {\n return alpha / (alpha + beta);\n },\n\n median: function median(alpha, beta) {\n return jStat.ibetainv(0.5, alpha, beta);\n },\n\n mode: function mode(alpha, beta) {\n return (alpha - 1 ) / ( alpha + beta - 2);\n },\n\n // return a random sample\n sample: function sample(alpha, beta) {\n var u = jStat.randg(alpha);\n return u / (u + jStat.randg(beta));\n },\n\n variance: function variance(alpha, beta) {\n return (alpha * beta) / (Math.pow(alpha + beta, 2) * (alpha + beta + 1));\n }\n});\n\n// extend F function with static methods\njStat.extend(jStat.centralF, {\n // This implementation of the pdf function avoids float overflow\n // See the way that R calculates this value:\n // https://svn.r-project.org/R/trunk/src/nmath/df.c\n pdf: function pdf(x, df1, df2) {\n var p, q, f;\n\n if (x < 0)\n return 0;\n\n if (df1 <= 2) {\n if (x === 0 && df1 < 2) {\n return Infinity;\n }\n if (x === 0 && df1 === 2) {\n return 1;\n }\n return (1 / jStat.betafn(df1 / 2, df2 / 2)) *\n Math.pow(df1 / df2, df1 / 2) *\n Math.pow(x, (df1/2) - 1) *\n Math.pow((1 + (df1 / df2) * x), -(df1 + df2) / 2);\n }\n\n p = (df1 * x) / (df2 + x * df1);\n q = df2 / (df2 + x * df1);\n f = df1 * q / 2.0;\n return f * jStat.binomial.pdf((df1 - 2) / 2, (df1 + df2 - 2) / 2, p);\n },\n\n cdf: function cdf(x, df1, df2) {\n if (x < 0)\n return 0;\n return jStat.ibeta((df1 * x) / (df1 * x + df2), df1 / 2, df2 / 2);\n },\n\n inv: function inv(x, df1, df2) {\n return df2 / (df1 * (1 / jStat.ibetainv(x, df1 / 2, df2 / 2) - 1));\n },\n\n mean: function mean(df1, df2) {\n return (df2 > 2) ? df2 / (df2 - 2) : undefined;\n },\n\n mode: function mode(df1, df2) {\n return (df1 > 2) ? (df2 * (df1 - 2)) / (df1 * (df2 + 2)) : undefined;\n },\n\n // return a random sample\n sample: function sample(df1, df2) {\n var x1 = jStat.randg(df1 / 2) * 2;\n var x2 = jStat.randg(df2 / 2) * 2;\n return (x1 / df1) / (x2 / df2);\n },\n\n variance: function variance(df1, df2) {\n if (df2 <= 4)\n return undefined;\n return 2 * df2 * df2 * (df1 + df2 - 2) /\n (df1 * (df2 - 2) * (df2 - 2) * (df2 - 4));\n }\n});\n\n\n// extend cauchy function with static methods\njStat.extend(jStat.cauchy, {\n pdf: function pdf(x, local, scale) {\n if (scale < 0) { return 0; }\n\n return (scale / (Math.pow(x - local, 2) + Math.pow(scale, 2))) / Math.PI;\n },\n\n cdf: function cdf(x, local, scale) {\n return Math.atan((x - local) / scale) / Math.PI + 0.5;\n },\n\n inv: function(p, local, scale) {\n return local + scale * Math.tan(Math.PI * (p - 0.5));\n },\n\n median: function median(local/*, scale*/) {\n return local;\n },\n\n mode: function mode(local/*, scale*/) {\n return local;\n },\n\n sample: function sample(local, scale) {\n return jStat.randn() *\n Math.sqrt(1 / (2 * jStat.randg(0.5))) * scale + local;\n }\n});\n\n\n\n// extend chisquare function with static methods\njStat.extend(jStat.chisquare, {\n pdf: function pdf(x, dof) {\n if (x < 0)\n return 0;\n return (x === 0 && dof === 2) ? 0.5 :\n Math.exp((dof / 2 - 1) * Math.log(x) - x / 2 - (dof / 2) *\n Math.log(2) - jStat.gammaln(dof / 2));\n },\n\n cdf: function cdf(x, dof) {\n if (x < 0)\n return 0;\n return jStat.lowRegGamma(dof / 2, x / 2);\n },\n\n inv: function(p, dof) {\n return 2 * jStat.gammapinv(p, 0.5 * dof);\n },\n\n mean : function(dof) {\n return dof;\n },\n\n // TODO: this is an approximation (is there a better way?)\n median: function median(dof) {\n return dof * Math.pow(1 - (2 / (9 * dof)), 3);\n },\n\n mode: function mode(dof) {\n return (dof - 2 > 0) ? dof - 2 : 0;\n },\n\n sample: function sample(dof) {\n return jStat.randg(dof / 2) * 2;\n },\n\n variance: function variance(dof) {\n return 2 * dof;\n }\n});\n\n\n\n// extend exponential function with static methods\njStat.extend(jStat.exponential, {\n pdf: function pdf(x, rate) {\n return x < 0 ? 0 : rate * Math.exp(-rate * x);\n },\n\n cdf: function cdf(x, rate) {\n return x < 0 ? 0 : 1 - Math.exp(-rate * x);\n },\n\n inv: function(p, rate) {\n return -Math.log(1 - p) / rate;\n },\n\n mean : function(rate) {\n return 1 / rate;\n },\n\n median: function (rate) {\n return (1 / rate) * Math.log(2);\n },\n\n mode: function mode(/*rate*/) {\n return 0;\n },\n\n sample: function sample(rate) {\n return -1 / rate * Math.log(jStat._random_fn());\n },\n\n variance : function(rate) {\n return Math.pow(rate, -2);\n }\n});\n\n\n\n// extend gamma function with static methods\njStat.extend(jStat.gamma, {\n pdf: function pdf(x, shape, scale) {\n if (x < 0)\n return 0;\n return (x === 0 && shape === 1) ? 1 / scale :\n Math.exp((shape - 1) * Math.log(x) - x / scale -\n jStat.gammaln(shape) - shape * Math.log(scale));\n },\n\n cdf: function cdf(x, shape, scale) {\n if (x < 0)\n return 0;\n return jStat.lowRegGamma(shape, x / scale);\n },\n\n inv: function(p, shape, scale) {\n return jStat.gammapinv(p, shape) * scale;\n },\n\n mean : function(shape, scale) {\n return shape * scale;\n },\n\n mode: function mode(shape, scale) {\n if(shape > 1) return (shape - 1) * scale;\n return undefined;\n },\n\n sample: function sample(shape, scale) {\n return jStat.randg(shape) * scale;\n },\n\n variance: function variance(shape, scale) {\n return shape * scale * scale;\n }\n});\n\n// extend inverse gamma function with static methods\njStat.extend(jStat.invgamma, {\n pdf: function pdf(x, shape, scale) {\n if (x <= 0)\n return 0;\n return Math.exp(-(shape + 1) * Math.log(x) - scale / x -\n jStat.gammaln(shape) + shape * Math.log(scale));\n },\n\n cdf: function cdf(x, shape, scale) {\n if (x <= 0)\n return 0;\n return 1 - jStat.lowRegGamma(shape, scale / x);\n },\n\n inv: function(p, shape, scale) {\n return scale / jStat.gammapinv(1 - p, shape);\n },\n\n mean : function(shape, scale) {\n return (shape > 1) ? scale / (shape - 1) : undefined;\n },\n\n mode: function mode(shape, scale) {\n return scale / (shape + 1);\n },\n\n sample: function sample(shape, scale) {\n return scale / jStat.randg(shape);\n },\n\n variance: function variance(shape, scale) {\n if (shape <= 2)\n return undefined;\n return scale * scale / ((shape - 1) * (shape - 1) * (shape - 2));\n }\n});\n\n\n// extend kumaraswamy function with static methods\njStat.extend(jStat.kumaraswamy, {\n pdf: function pdf(x, alpha, beta) {\n if (x === 0 && alpha === 1)\n return beta;\n else if (x === 1 && beta === 1)\n return alpha;\n return Math.exp(Math.log(alpha) + Math.log(beta) + (alpha - 1) *\n Math.log(x) + (beta - 1) *\n Math.log(1 - Math.pow(x, alpha)));\n },\n\n cdf: function cdf(x, alpha, beta) {\n if (x < 0)\n return 0;\n else if (x > 1)\n return 1;\n return (1 - Math.pow(1 - Math.pow(x, alpha), beta));\n },\n\n inv: function inv(p, alpha, beta) {\n return Math.pow(1 - Math.pow(1 - p, 1 / beta), 1 / alpha);\n },\n\n mean : function(alpha, beta) {\n return (beta * jStat.gammafn(1 + 1 / alpha) *\n jStat.gammafn(beta)) / (jStat.gammafn(1 + 1 / alpha + beta));\n },\n\n median: function median(alpha, beta) {\n return Math.pow(1 - Math.pow(2, -1 / beta), 1 / alpha);\n },\n\n mode: function mode(alpha, beta) {\n if (!(alpha >= 1 && beta >= 1 && (alpha !== 1 && beta !== 1)))\n return undefined;\n return Math.pow((alpha - 1) / (alpha * beta - 1), 1 / alpha);\n },\n\n variance: function variance(/*alpha, beta*/) {\n throw new Error('variance not yet implemented');\n // TODO: complete this\n }\n});\n\n\n\n// extend lognormal function with static methods\njStat.extend(jStat.lognormal, {\n pdf: function pdf(x, mu, sigma) {\n if (x <= 0)\n return 0;\n return Math.exp(-Math.log(x) - 0.5 * Math.log(2 * Math.PI) -\n Math.log(sigma) - Math.pow(Math.log(x) - mu, 2) /\n (2 * sigma * sigma));\n },\n\n cdf: function cdf(x, mu, sigma) {\n if (x < 0)\n return 0;\n return 0.5 +\n (0.5 * jStat.erf((Math.log(x) - mu) / Math.sqrt(2 * sigma * sigma)));\n },\n\n inv: function(p, mu, sigma) {\n return Math.exp(-1.41421356237309505 * sigma * jStat.erfcinv(2 * p) + mu);\n },\n\n mean: function mean(mu, sigma) {\n return Math.exp(mu + sigma * sigma / 2);\n },\n\n median: function median(mu/*, sigma*/) {\n return Math.exp(mu);\n },\n\n mode: function mode(mu, sigma) {\n return Math.exp(mu - sigma * sigma);\n },\n\n sample: function sample(mu, sigma) {\n return Math.exp(jStat.randn() * sigma + mu);\n },\n\n variance: function variance(mu, sigma) {\n return (Math.exp(sigma * sigma) - 1) * Math.exp(2 * mu + sigma * sigma);\n }\n});\n\n\n\n// extend noncentralt function with static methods\njStat.extend(jStat.noncentralt, {\n pdf: function pdf(x, dof, ncp) {\n var tol = 1e-14;\n if (Math.abs(ncp) < tol) // ncp approx 0; use student-t\n return jStat.studentt.pdf(x, dof)\n\n if (Math.abs(x) < tol) { // different formula for x == 0\n return Math.exp(jStat.gammaln((dof + 1) / 2) - ncp * ncp / 2 -\n 0.5 * Math.log(Math.PI * dof) - jStat.gammaln(dof / 2));\n }\n\n // formula for x != 0\n return dof / x *\n (jStat.noncentralt.cdf(x * Math.sqrt(1 + 2 / dof), dof+2, ncp) -\n jStat.noncentralt.cdf(x, dof, ncp));\n },\n\n cdf: function cdf(x, dof, ncp) {\n var tol = 1e-14;\n var min_iterations = 200;\n\n if (Math.abs(ncp) < tol) // ncp approx 0; use student-t\n return jStat.studentt.cdf(x, dof);\n\n // turn negative x into positive and flip result afterwards\n var flip = false;\n if (x < 0) {\n flip = true;\n ncp = -ncp;\n }\n\n var prob = jStat.normal.cdf(-ncp, 0, 1);\n var value = tol + 1;\n // use value at last two steps to determine convergence\n var lastvalue = value;\n var y = x * x / (x * x + dof);\n var j = 0;\n var p = Math.exp(-ncp * ncp / 2);\n var q = Math.exp(-ncp * ncp / 2 - 0.5 * Math.log(2) -\n jStat.gammaln(3 / 2)) * ncp;\n while (j < min_iterations || lastvalue > tol || value > tol) {\n lastvalue = value;\n if (j > 0) {\n p *= (ncp * ncp) / (2 * j);\n q *= (ncp * ncp) / (2 * (j + 1 / 2));\n }\n value = p * jStat.beta.cdf(y, j + 0.5, dof / 2) +\n q * jStat.beta.cdf(y, j+1, dof/2);\n prob += 0.5 * value;\n j++;\n }\n\n return flip ? (1 - prob) : prob;\n }\n});\n\n\n// extend normal function with static methods\njStat.extend(jStat.normal, {\n pdf: function pdf(x, mean, std) {\n return Math.exp(-0.5 * Math.log(2 * Math.PI) -\n Math.log(std) - Math.pow(x - mean, 2) / (2 * std * std));\n },\n\n cdf: function cdf(x, mean, std) {\n return 0.5 * (1 + jStat.erf((x - mean) / Math.sqrt(2 * std * std)));\n },\n\n inv: function(p, mean, std) {\n return -1.41421356237309505 * std * jStat.erfcinv(2 * p) + mean;\n },\n\n mean : function(mean/*, std*/) {\n return mean;\n },\n\n median: function median(mean/*, std*/) {\n return mean;\n },\n\n mode: function (mean/*, std*/) {\n return mean;\n },\n\n sample: function sample(mean, std) {\n return jStat.randn() * std + mean;\n },\n\n variance : function(mean, std) {\n return std * std;\n }\n});\n\n\n\n// extend pareto function with static methods\njStat.extend(jStat.pareto, {\n pdf: function pdf(x, scale, shape) {\n if (x < scale)\n return 0;\n return (shape * Math.pow(scale, shape)) / Math.pow(x, shape + 1);\n },\n\n cdf: function cdf(x, scale, shape) {\n if (x < scale)\n return 0;\n return 1 - Math.pow(scale / x, shape);\n },\n\n inv: function inv(p, scale, shape) {\n return scale / Math.pow(1 - p, 1 / shape);\n },\n\n mean: function mean(scale, shape) {\n if (shape <= 1)\n return undefined;\n return (shape * Math.pow(scale, shape)) / (shape - 1);\n },\n\n median: function median(scale, shape) {\n return scale * (shape * Math.SQRT2);\n },\n\n mode: function mode(scale/*, shape*/) {\n return scale;\n },\n\n variance : function(scale, shape) {\n if (shape <= 2)\n return undefined;\n return (scale*scale * shape) / (Math.pow(shape - 1, 2) * (shape - 2));\n }\n});\n\n\n\n// extend studentt function with static methods\njStat.extend(jStat.studentt, {\n pdf: function pdf(x, dof) {\n dof = dof > 1e100 ? 1e100 : dof;\n return (1/(Math.sqrt(dof) * jStat.betafn(0.5, dof/2))) *\n Math.pow(1 + ((x * x) / dof), -((dof + 1) / 2));\n },\n\n cdf: function cdf(x, dof) {\n var dof2 = dof / 2;\n return jStat.ibeta((x + Math.sqrt(x * x + dof)) /\n (2 * Math.sqrt(x * x + dof)), dof2, dof2);\n },\n\n inv: function(p, dof) {\n var x = jStat.ibetainv(2 * Math.min(p, 1 - p), 0.5 * dof, 0.5);\n x = Math.sqrt(dof * (1 - x) / x);\n return (p > 0.5) ? x : -x;\n },\n\n mean: function mean(dof) {\n return (dof > 1) ? 0 : undefined;\n },\n\n median: function median(/*dof*/) {\n return 0;\n },\n\n mode: function mode(/*dof*/) {\n return 0;\n },\n\n sample: function sample(dof) {\n return jStat.randn() * Math.sqrt(dof / (2 * jStat.randg(dof / 2)));\n },\n\n variance: function variance(dof) {\n return (dof > 2) ? dof / (dof - 2) : (dof > 1) ? Infinity : undefined;\n }\n});\n\n\n\n// extend weibull function with static methods\njStat.extend(jStat.weibull, {\n pdf: function pdf(x, scale, shape) {\n if (x < 0 || scale < 0 || shape < 0)\n return 0;\n return (shape / scale) * Math.pow((x / scale), (shape - 1)) *\n Math.exp(-(Math.pow((x / scale), shape)));\n },\n\n cdf: function cdf(x, scale, shape) {\n return x < 0 ? 0 : 1 - Math.exp(-Math.pow((x / scale), shape));\n },\n\n inv: function(p, scale, shape) {\n return scale * Math.pow(-Math.log(1 - p), 1 / shape);\n },\n\n mean : function(scale, shape) {\n return scale * jStat.gammafn(1 + 1 / shape);\n },\n\n median: function median(scale, shape) {\n return scale * Math.pow(Math.log(2), 1 / shape);\n },\n\n mode: function mode(scale, shape) {\n if (shape <= 1)\n return 0;\n return scale * Math.pow((shape - 1) / shape, 1 / shape);\n },\n\n sample: function sample(scale, shape) {\n return scale * Math.pow(-Math.log(jStat._random_fn()), 1 / shape);\n },\n\n variance: function variance(scale, shape) {\n return scale * scale * jStat.gammafn(1 + 2 / shape) -\n Math.pow(jStat.weibull.mean(scale, shape), 2);\n }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.uniform, {\n pdf: function pdf(x, a, b) {\n return (x < a || x > b) ? 0 : 1 / (b - a);\n },\n\n cdf: function cdf(x, a, b) {\n if (x < a)\n return 0;\n else if (x < b)\n return (x - a) / (b - a);\n return 1;\n },\n\n inv: function(p, a, b) {\n return a + (p * (b - a));\n },\n\n mean: function mean(a, b) {\n return 0.5 * (a + b);\n },\n\n median: function median(a, b) {\n return jStat.mean(a, b);\n },\n\n mode: function mode(/*a, b*/) {\n throw new Error('mode is not yet implemented');\n },\n\n sample: function sample(a, b) {\n return (a / 2 + b / 2) + (b / 2 - a / 2) * (2 * jStat._random_fn() - 1);\n },\n\n variance: function variance(a, b) {\n return Math.pow(b - a, 2) / 12;\n }\n});\n\n\n// Got this from http://www.math.ucla.edu/~tom/distributions/binomial.html\nfunction betinc(x, a, b, eps) {\n var a0 = 0;\n var b0 = 1;\n var a1 = 1;\n var b1 = 1;\n var m9 = 0;\n var a2 = 0;\n var c9;\n\n while (Math.abs((a1 - a2) / a1) > eps) {\n a2 = a1;\n c9 = -(a + m9) * (a + b + m9) * x / (a + 2 * m9) / (a + 2 * m9 + 1);\n a0 = a1 + c9 * a0;\n b0 = b1 + c9 * b0;\n m9 = m9 + 1;\n c9 = m9 * (b - m9) * x / (a + 2 * m9 - 1) / (a + 2 * m9);\n a1 = a0 + c9 * a1;\n b1 = b0 + c9 * b1;\n a0 = a0 / b1;\n b0 = b0 / b1;\n a1 = a1 / b1;\n b1 = 1;\n }\n\n return a1 / a;\n}\n\n\n// extend uniform function with static methods\njStat.extend(jStat.binomial, {\n pdf: function pdf(k, n, p) {\n return (p === 0 || p === 1) ?\n ((n * p) === k ? 1 : 0) :\n jStat.combination(n, k) * Math.pow(p, k) * Math.pow(1 - p, n - k);\n },\n\n cdf: function cdf(x, n, p) {\n var betacdf;\n var eps = 1e-10;\n\n if (x < 0)\n return 0;\n if (x >= n)\n return 1;\n if (p < 0 || p > 1 || n <= 0)\n return NaN;\n\n x = Math.floor(x);\n var z = p;\n var a = x + 1;\n var b = n - x;\n var s = a + b;\n var bt = Math.exp(jStat.gammaln(s) - jStat.gammaln(b) -\n jStat.gammaln(a) + a * Math.log(z) + b * Math.log(1 - z));\n\n if (z < (a + 1) / (s + 2))\n betacdf = bt * betinc(z, a, b, eps);\n else\n betacdf = 1 - bt * betinc(1 - z, b, a, eps);\n\n return Math.round((1 - betacdf) * (1 / eps)) / (1 / eps);\n }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.negbin, {\n pdf: function pdf(k, r, p) {\n if (k !== k >>> 0)\n return false;\n if (k < 0)\n return 0;\n return jStat.combination(k + r - 1, r - 1) *\n Math.pow(1 - p, k) * Math.pow(p, r);\n },\n\n cdf: function cdf(x, r, p) {\n var sum = 0,\n k = 0;\n if (x < 0) return 0;\n for (; k <= x; k++) {\n sum += jStat.negbin.pdf(k, r, p);\n }\n return sum;\n }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.hypgeom, {\n pdf: function pdf(k, N, m, n) {\n // Hypergeometric PDF.\n\n // A simplification of the CDF algorithm below.\n\n // k = number of successes drawn\n // N = population size\n // m = number of successes in population\n // n = number of items drawn from population\n\n if(k !== k | 0) {\n return false;\n } else if(k < 0 || k < m - (N - n)) {\n // It's impossible to have this few successes drawn.\n return 0;\n } else if(k > n || k > m) {\n // It's impossible to have this many successes drawn.\n return 0;\n } else if (m * 2 > N) {\n // More than half the population is successes.\n\n if(n * 2 > N) {\n // More than half the population is sampled.\n\n return jStat.hypgeom.pdf(N - m - n + k, N, N - m, N - n)\n } else {\n // Half or less of the population is sampled.\n\n return jStat.hypgeom.pdf(n - k, N, N - m, n);\n }\n\n } else if(n * 2 > N) {\n // Half or less is successes.\n\n return jStat.hypgeom.pdf(m - k, N, m, N - n);\n\n } else if(m < n) {\n // We want to have the number of things sampled to be less than the\n // successes available. So swap the definitions of successful and sampled.\n return jStat.hypgeom.pdf(k, N, n, m);\n } else {\n // If we get here, half or less of the population was sampled, half or\n // less of it was successes, and we had fewer sampled things than\n // successes. Now we can do this complicated iterative algorithm in an\n // efficient way.\n\n // The basic premise of the algorithm is that we partially normalize our\n // intermediate product to keep it in a numerically good region, and then\n // finish the normalization at the end.\n\n // This variable holds the scaled probability of the current number of\n // successes.\n var scaledPDF = 1;\n\n // This keeps track of how much we have normalized.\n var samplesDone = 0;\n\n for(var i = 0; i < k; i++) {\n // For every possible number of successes up to that observed...\n\n while(scaledPDF > 1 && samplesDone < n) {\n // Intermediate result is growing too big. Apply some of the\n // normalization to shrink everything.\n\n scaledPDF *= 1 - (m / (N - samplesDone));\n\n // Say we've normalized by this sample already.\n samplesDone++;\n }\n\n // Work out the partially-normalized hypergeometric PDF for the next\n // number of successes\n scaledPDF *= (n - i) * (m - i) / ((i + 1) * (N - m - n + i + 1));\n }\n\n for(; samplesDone < n; samplesDone++) {\n // Apply all the rest of the normalization\n scaledPDF *= 1 - (m / (N - samplesDone));\n }\n\n // Bound answer sanely before returning.\n return Math.min(1, Math.max(0, scaledPDF));\n }\n },\n\n cdf: function cdf(x, N, m, n) {\n // Hypergeometric CDF.\n\n // This algorithm is due to Prof. Thomas S. Ferguson, <tom@math.ucla.edu>,\n // and comes from his hypergeometric test calculator at\n // <http://www.math.ucla.edu/~tom/distributions/Hypergeometric.html>.\n\n // x = number of successes drawn\n // N = population size\n // m = number of successes in population\n // n = number of items drawn from population\n\n if(x < 0 || x < m - (N - n)) {\n // It's impossible to have this few successes drawn or fewer.\n return 0;\n } else if(x >= n || x >= m) {\n // We will always have this many successes or fewer.\n return 1;\n } else if (m * 2 > N) {\n // More than half the population is successes.\n\n if(n * 2 > N) {\n // More than half the population is sampled.\n\n return jStat.hypgeom.cdf(N - m - n + x, N, N - m, N - n)\n } else {\n // Half or less of the population is sampled.\n\n return 1 - jStat.hypgeom.cdf(n - x - 1, N, N - m, n);\n }\n\n } else if(n * 2 > N) {\n // Half or less is successes.\n\n return 1 - jStat.hypgeom.cdf(m - x - 1, N, m, N - n);\n\n } else if(m < n) {\n // We want to have the number of things sampled to be less than the\n // successes available. So swap the definitions of successful and sampled.\n return jStat.hypgeom.cdf(x, N, n, m);\n } else {\n // If we get here, half or less of the population was sampled, half or\n // less of it was successes, and we had fewer sampled things than\n // successes. Now we can do this complicated iterative algorithm in an\n // efficient way.\n\n // The basic premise of the algorithm is that we partially normalize our\n // intermediate sum to keep it in a numerically good region, and then\n // finish the normalization at the end.\n\n // Holds the intermediate, scaled total CDF.\n var scaledCDF = 1;\n\n // This variable holds the scaled probability of the current number of\n // successes.\n var scaledPDF = 1;\n\n // This keeps track of how much we have normalized.\n var samplesDone = 0;\n\n for(var i = 0; i < x; i++) {\n // For every possible number of successes up to that observed...\n\n while(scaledCDF > 1 && samplesDone < n) {\n // Intermediate result is growing too big. Apply some of the\n // normalization to shrink everything.\n\n var factor = 1 - (m / (N - samplesDone));\n\n scaledPDF *= factor;\n scaledCDF *= factor;\n\n // Say we've normalized by this sample already.\n samplesDone++;\n }\n\n // Work out the partially-normalized hypergeometric PDF for the next\n // number of successes\n scaledPDF *= (n - i) * (m - i) / ((i + 1) * (N - m - n + i + 1));\n\n // Add to the CDF answer.\n scaledCDF += scaledPDF;\n }\n\n for(; samplesDone < n; samplesDone++) {\n // Apply all the rest of the normalization\n scaledCDF *= 1 - (m / (N - samplesDone));\n }\n\n // Bound answer sanely before returning.\n return Math.min(1, Math.max(0, scaledCDF));\n }\n }\n});\n\n\n\n// extend uniform function with static methods\njStat.extend(jStat.poisson, {\n pdf: function pdf(k, l) {\n if (l < 0 || (k % 1) !== 0 || k < 0) {\n return 0;\n }\n\n return Math.pow(l, k) * Math.exp(-l) / jStat.factorial(k);\n },\n\n cdf: function cdf(x, l) {\n var sumarr = [],\n k = 0;\n if (x < 0) return 0;\n for (; k <= x; k++) {\n sumarr.push(jStat.poisson.pdf(k, l));\n }\n return jStat.sum(sumarr);\n },\n\n mean : function(l) {\n return l;\n },\n\n variance : function(l) {\n return l;\n },\n\n sampleSmall: function sampleSmall(l) {\n var p = 1, k = 0, L = Math.exp(-l);\n do {\n k++;\n p *= jStat._random_fn();\n } while (p > L);\n return k - 1;\n },\n\n sampleLarge: function sampleLarge(l) {\n var lam = l;\n var k;\n var U, V, slam, loglam, a, b, invalpha, vr, us;\n\n slam = Math.sqrt(lam);\n loglam = Math.log(lam);\n b = 0.931 + 2.53 * slam;\n a = -0.059 + 0.02483 * b;\n invalpha = 1.1239 + 1.1328 / (b - 3.4);\n vr = 0.9277 - 3.6224 / (b - 2);\n\n while (1) {\n U = Math.random() - 0.5;\n V = Math.random();\n us = 0.5 - Math.abs(U);\n k = Math.floor((2 * a / us + b) * U + lam + 0.43);\n if ((us >= 0.07) && (V <= vr)) {\n return k;\n }\n if ((k < 0) || ((us < 0.013) && (V > us))) {\n continue;\n }\n /* log(V) == log(0.0) ok here */\n /* if U==0.0 so that us==0.0, log is ok since always returns */\n if ((Math.log(V) + Math.log(invalpha) - Math.log(a / (us * us) + b)) <= (-lam + k * loglam - jStat.loggam(k + 1))) {\n return k;\n }\n }\n },\n\n sample: function sample(l) {\n if (l < 10)\n return this.sampleSmall(l);\n else\n return this.sampleLarge(l);\n }\n});\n\n// extend triangular function with static methods\njStat.extend(jStat.triangular, {\n pdf: function pdf(x, a, b, c) {\n if (b <= a || c < a || c > b) {\n return NaN;\n } else {\n if (x < a || x > b) {\n return 0;\n } else if (x < c) {\n return (2 * (x - a)) / ((b - a) * (c - a));\n } else if (x === c) {\n return (2 / (b - a));\n } else { // x > c\n return (2 * (b - x)) / ((b - a) * (b - c));\n }\n }\n },\n\n cdf: function cdf(x, a, b, c) {\n if (b <= a || c < a || c > b)\n return NaN;\n if (x <= a)\n return 0;\n else if (x >= b)\n return 1;\n if (x <= c)\n return Math.pow(x - a, 2) / ((b - a) * (c - a));\n else // x > c\n return 1 - Math.pow(b - x, 2) / ((b - a) * (b - c));\n },\n\n inv: function inv(p, a, b, c) {\n if (b <= a || c < a || c > b) {\n return NaN;\n } else {\n if (p <= ((c - a) / (b - a))) {\n return a + (b - a) * Math.sqrt(p * ((c - a) / (b - a)));\n } else { // p > ((c - a) / (b - a))\n return a + (b - a) * (1 - Math.sqrt((1 - p) * (1 - ((c - a) / (b - a)))));\n }\n }\n },\n\n mean: function mean(a, b, c) {\n return (a + b + c) / 3;\n },\n\n median: function median(a, b, c) {\n if (c <= (a + b) / 2) {\n return b - Math.sqrt((b - a) * (b - c)) / Math.sqrt(2);\n } else if (c > (a + b) / 2) {\n return a + Math.sqrt((b - a) * (c - a)) / Math.sqrt(2);\n }\n },\n\n mode: function mode(a, b, c) {\n return c;\n },\n\n sample: function sample(a, b, c) {\n var u = jStat._random_fn();\n if (u < ((c - a) / (b - a)))\n return a + Math.sqrt(u * (b - a) * (c - a))\n return b - Math.sqrt((1 - u) * (b - a) * (b - c));\n },\n\n variance: function variance(a, b, c) {\n return (a * a + b * b + c * c - a * b - a * c - b * c) / 18;\n }\n});\n\n\n// extend arcsine function with static methods\njStat.extend(jStat.arcsine, {\n pdf: function pdf(x, a, b) {\n if (b <= a) return NaN;\n\n return (x <= a || x >= b) ? 0 :\n (2 / Math.PI) *\n Math.pow(Math.pow(b - a, 2) -\n Math.pow(2 * x - a - b, 2), -0.5);\n },\n\n cdf: function cdf(x, a, b) {\n if (x < a)\n return 0;\n else if (x < b)\n return (2 / Math.PI) * Math.asin(Math.sqrt((x - a)/(b - a)));\n return 1;\n },\n\n inv: function(p, a, b) {\n return a + (0.5 - 0.5 * Math.cos(Math.PI * p)) * (b - a);\n },\n\n mean: function mean(a, b) {\n if (b <= a) return NaN;\n return (a + b) / 2;\n },\n\n median: function median(a, b) {\n if (b <= a) return NaN;\n return (a + b) / 2;\n },\n\n mode: function mode(/*a, b*/) {\n throw new Error('mode is not yet implemented');\n },\n\n sample: function sample(a, b) {\n return ((a + b) / 2) + ((b - a) / 2) *\n Math.sin(2 * Math.PI * jStat.uniform.sample(0, 1));\n },\n\n variance: function variance(a, b) {\n if (b <= a) return NaN;\n return Math.pow(b - a, 2) / 8;\n }\n});\n\n\nfunction laplaceSign(x) { return x / Math.abs(x); }\n\njStat.extend(jStat.laplace, {\n pdf: function pdf(x, mu, b) {\n return (b <= 0) ? 0 : (Math.exp(-Math.abs(x - mu) / b)) / (2 * b);\n },\n\n cdf: function cdf(x, mu, b) {\n if (b <= 0) { return 0; }\n\n if(x < mu) {\n return 0.5 * Math.exp((x - mu) / b);\n } else {\n return 1 - 0.5 * Math.exp(- (x - mu) / b);\n }\n },\n\n mean: function(mu/*, b*/) {\n return mu;\n },\n\n median: function(mu/*, b*/) {\n return mu;\n },\n\n mode: function(mu/*, b*/) {\n return mu;\n },\n\n variance: function(mu, b) {\n return 2 * b * b;\n },\n\n sample: function sample(mu, b) {\n var u = jStat._random_fn() - 0.5;\n\n return mu - (b * laplaceSign(u) * Math.log(1 - (2 * Math.abs(u))));\n }\n});\n\nfunction tukeyWprob(w, rr, cc) {\n var nleg = 12;\n var ihalf = 6;\n\n var C1 = -30;\n var C2 = -50;\n var C3 = 60;\n var bb = 8;\n var wlar = 3;\n var wincr1 = 2;\n var wincr2 = 3;\n var xleg = [\n 0.981560634246719250690549090149,\n 0.904117256370474856678465866119,\n 0.769902674194304687036893833213,\n 0.587317954286617447296702418941,\n 0.367831498998180193752691536644,\n 0.125233408511468915472441369464\n ];\n var aleg = [\n 0.047175336386511827194615961485,\n 0.106939325995318430960254718194,\n 0.160078328543346226334652529543,\n 0.203167426723065921749064455810,\n 0.233492536538354808760849898925,\n 0.249147045813402785000562436043\n ];\n\n var qsqz = w * 0.5;\n\n // if w >= 16 then the integral lower bound (occurs for c=20)\n // is 0.99999999999995 so return a value of 1.\n\n if (qsqz >= bb)\n return 1.0;\n\n // find (f(w/2) - 1) ^ cc\n // (first term in integral of hartley's form).\n\n var pr_w = 2 * jStat.normal.cdf(qsqz, 0, 1, 1, 0) - 1; // erf(qsqz / M_SQRT2)\n // if pr_w ^ cc < 2e-22 then set pr_w = 0\n if (pr_w >= Math.exp(C2 / cc))\n pr_w = Math.pow(pr_w, cc);\n else\n pr_w = 0.0;\n\n // if w is large then the second component of the\n // integral is small, so fewer intervals are needed.\n\n var wincr;\n if (w > wlar)\n wincr = wincr1;\n else\n wincr = wincr2;\n\n // find the integral of second term of hartley's form\n // for the integral of the range for equal-length\n // intervals using legendre quadrature. limits of\n // integration are from (w/2, 8). two or three\n // equal-length intervals are used.\n\n // blb and bub are lower and upper limits of integration.\n\n var blb = qsqz;\n var binc = (bb - qsqz) / wincr;\n var bub = blb + binc;\n var einsum = 0.0;\n\n // integrate over each interval\n\n var cc1 = cc - 1.0;\n for (var wi = 1; wi <= wincr; wi++) {\n var elsum = 0.0;\n var a = 0.5 * (bub + blb);\n\n // legendre quadrature with order = nleg\n\n var b = 0.5 * (bub - blb);\n\n for (var jj = 1; jj <= nleg; jj++) {\n var j, xx;\n if (ihalf < jj) {\n j = (nleg - jj) + 1;\n xx = xleg[j-1];\n } else {\n j = jj;\n xx = -xleg[j-1];\n }\n var c = b * xx;\n var ac = a + c;\n\n // if exp(-qexpo/2) < 9e-14,\n // then doesn't contribute to integral\n\n var qexpo = ac * ac;\n if (qexpo > C3)\n break;\n\n var pplus = 2 * jStat.normal.cdf(ac, 0, 1, 1, 0);\n var pminus= 2 * jStat.normal.cdf(ac, w, 1, 1, 0);\n\n // if rinsum ^ (cc-1) < 9e-14,\n // then doesn't contribute to integral\n\n var rinsum = (pplus * 0.5) - (pminus * 0.5);\n if (rinsum >= Math.exp(C1 / cc1)) {\n rinsum = (aleg[j-1] * Math.exp(-(0.5 * qexpo))) * Math.pow(rinsum, cc1);\n elsum += rinsum;\n }\n }\n elsum *= (((2.0 * b) * cc) / Math.sqrt(2 * Math.PI));\n einsum += elsum;\n blb = bub;\n bub += binc;\n }\n\n // if pr_w ^ rr < 9e-14, then return 0\n pr_w += einsum;\n if (pr_w <= Math.exp(C1 / rr))\n return 0;\n\n pr_w = Math.pow(pr_w, rr);\n if (pr_w >= 1) // 1 was iMax was eps\n return 1;\n return pr_w;\n}\n\nfunction tukeyQinv(p, c, v) {\n var p0 = 0.322232421088;\n var q0 = 0.993484626060e-01;\n var p1 = -1.0;\n var q1 = 0.588581570495;\n var p2 = -0.342242088547;\n var q2 = 0.531103462366;\n var p3 = -0.204231210125;\n var q3 = 0.103537752850;\n var p4 = -0.453642210148e-04;\n var q4 = 0.38560700634e-02;\n var c1 = 0.8832;\n var c2 = 0.2368;\n var c3 = 1.214;\n var c4 = 1.208;\n var c5 = 1.4142;\n var vmax = 120.0;\n\n var ps = 0.5 - 0.5 * p;\n var yi = Math.sqrt(Math.log(1.0 / (ps * ps)));\n var t = yi + (((( yi * p4 + p3) * yi + p2) * yi + p1) * yi + p0)\n / (((( yi * q4 + q3) * yi + q2) * yi + q1) * yi + q0);\n if (v < vmax) t += (t * t * t + t) / v / 4.0;\n var q = c1 - c2 * t;\n if (v < vmax) q += -c3 / v + c4 * t / v;\n return t * (q * Math.log(c - 1.0) + c5);\n}\n\njStat.extend(jStat.tukey, {\n cdf: function cdf(q, nmeans, df) {\n // Identical implementation as the R ptukey() function as of commit 68947\n var rr = 1;\n var cc = nmeans;\n\n var nlegq = 16;\n var ihalfq = 8;\n\n var eps1 = -30.0;\n var eps2 = 1.0e-14;\n var dhaf = 100.0;\n var dquar = 800.0;\n var deigh = 5000.0;\n var dlarg = 25000.0;\n var ulen1 = 1.0;\n var ulen2 = 0.5;\n var ulen3 = 0.25;\n var ulen4 = 0.125;\n var xlegq = [\n 0.989400934991649932596154173450,\n 0.944575023073232576077988415535,\n 0.865631202387831743880467897712,\n 0.755404408355003033895101194847,\n 0.617876244402643748446671764049,\n 0.458016777657227386342419442984,\n 0.281603550779258913230460501460,\n 0.950125098376374401853193354250e-1\n ];\n var alegq = [\n 0.271524594117540948517805724560e-1,\n 0.622535239386478928628438369944e-1,\n 0.951585116824927848099251076022e-1,\n 0.124628971255533872052476282192,\n 0.149595988816576732081501730547,\n 0.169156519395002538189312079030,\n 0.182603415044923588866763667969,\n 0.189450610455068496285396723208\n ];\n\n if (q <= 0)\n return 0;\n\n // df must be > 1\n // there must be at least two values\n\n if (df < 2 || rr < 1 || cc < 2) return NaN;\n\n if (!Number.isFinite(q))\n return 1;\n\n if (df > dlarg)\n return tukeyWprob(q, rr, cc);\n\n // calculate leading constant\n\n var f2 = df * 0.5;\n var f2lf = ((f2 * Math.log(df)) - (df * Math.log(2))) - jStat.gammaln(f2);\n var f21 = f2 - 1.0;\n\n // integral is divided into unit, half-unit, quarter-unit, or\n // eighth-unit length intervals depending on the value of the\n // degrees of freedom.\n\n var ff4 = df * 0.25;\n var ulen;\n if (df <= dhaf) ulen = ulen1;\n else if (df <= dquar) ulen = ulen2;\n else if (df <= deigh) ulen = ulen3;\n else ulen = ulen4;\n\n f2lf += Math.log(ulen);\n\n // integrate over each subinterval\n\n var ans = 0.0;\n\n for (var i = 1; i <= 50; i++) {\n var otsum = 0.0;\n\n // legendre quadrature with order = nlegq\n // nodes (stored in xlegq) are symmetric around zero.\n\n var twa1 = (2 * i - 1) * ulen;\n\n for (var jj = 1; jj <= nlegq; jj++) {\n var j, t1;\n if (ihalfq < jj) {\n j = jj - ihalfq - 1;\n t1 = (f2lf + (f21 * Math.log(twa1 + (xlegq[j] * ulen))))\n - (((xlegq[j] * ulen) + twa1) * ff4);\n } else {\n j = jj - 1;\n t1 = (f2lf + (f21 * Math.log(twa1 - (xlegq[j] * ulen))))\n + (((xlegq[j] * ulen) - twa1) * ff4);\n }\n\n // if exp(t1) < 9e-14, then doesn't contribute to integral\n var qsqz;\n if (t1 >= eps1) {\n if (ihalfq < jj) {\n qsqz = q * Math.sqrt(((xlegq[j] * ulen) + twa1) * 0.5);\n } else {\n qsqz = q * Math.sqrt(((-(xlegq[j] * ulen)) + twa1) * 0.5);\n }\n\n // call wprob to find integral of range portion\n\n var wprb = tukeyWprob(qsqz, rr, cc);\n var rotsum = (wprb * alegq[j]) * Math.exp(t1);\n otsum += rotsum;\n }\n // end legendre integral for interval i\n // L200:\n }\n\n // if integral for interval i < 1e-14, then stop.\n // However, in order to avoid small area under left tail,\n // at least 1 / ulen intervals are calculated.\n if (i * ulen >= 1.0 && otsum <= eps2)\n break;\n\n // end of interval i\n // L330:\n\n ans += otsum;\n }\n\n if (otsum > eps2) { // not converged\n throw new Error('tukey.cdf failed to converge');\n }\n if (ans > 1)\n ans = 1;\n return ans;\n },\n\n inv: function(p, nmeans, df) {\n // Identical implementation as the R qtukey() function as of commit 68947\n var rr = 1;\n var cc = nmeans;\n\n var eps = 0.0001;\n var maxiter = 50;\n\n // df must be > 1 ; there must be at least two values\n if (df < 2 || rr < 1 || cc < 2) return NaN;\n\n if (p < 0 || p > 1) return NaN;\n if (p === 0) return 0;\n if (p === 1) return Infinity;\n\n // Initial value\n\n var x0 = tukeyQinv(p, cc, df);\n\n // Find prob(value < x0)\n\n var valx0 = jStat.tukey.cdf(x0, nmeans, df) - p;\n\n // Find the second iterate and prob(value < x1).\n // If the first iterate has probability value\n // exceeding p then second iterate is 1 less than\n // first iterate; otherwise it is 1 greater.\n\n var x1;\n if (valx0 > 0.0)\n x1 = Math.max(0.0, x0 - 1.0);\n else\n x1 = x0 + 1.0;\n var valx1 = jStat.tukey.cdf(x1, nmeans, df) - p;\n\n // Find new iterate\n\n var ans;\n for(var iter = 1; iter < maxiter; iter++) {\n ans = x1 - ((valx1 * (x1 - x0)) / (valx1 - valx0));\n valx0 = valx1;\n\n // New iterate must be >= 0\n\n x0 = x1;\n if (ans < 0.0) {\n ans = 0.0;\n valx1 = -p;\n }\n // Find prob(value < new iterate)\n\n valx1 = jStat.tukey.cdf(ans, nmeans, df) - p;\n x1 = ans;\n\n // If the difference between two successive\n // iterates is less than eps, stop\n\n var xabs = Math.abs(x1 - x0);\n if (xabs < eps)\n return ans;\n }\n\n throw new Error('tukey.inv failed to converge');\n }\n});\n\n}(jStat, Math));\n/* Provides functions for the solution of linear system of equations, integration, extrapolation,\n * interpolation, eigenvalue problems, differential equations and PCA analysis. */\n\n(function(jStat, Math) {\n\nvar push = Array.prototype.push;\nvar isArray = jStat.utils.isArray;\n\nfunction isUsable(arg) {\n return isArray(arg) || arg instanceof jStat;\n}\n\njStat.extend({\n\n // add a vector/matrix to a vector/matrix or scalar\n add: function add(arr, arg) {\n // check if arg is a vector or scalar\n if (isUsable(arg)) {\n if (!isUsable(arg[0])) arg = [ arg ];\n return jStat.map(arr, function(value, row, col) {\n return value + arg[row][col];\n });\n }\n return jStat.map(arr, function(value) { return value + arg; });\n },\n\n // subtract a vector or scalar from the vector\n subtract: function subtract(arr, arg) {\n // check if arg is a vector or scalar\n if (isUsable(arg)) {\n if (!isUsable(arg[0])) arg = [ arg ];\n return jStat.map(arr, function(value, row, col) {\n return value - arg[row][col] || 0;\n });\n }\n return jStat.map(arr, function(value) { return value - arg; });\n },\n\n // matrix division\n divide: function divide(arr, arg) {\n if (isUsable(arg)) {\n if (!isUsable(arg[0])) arg = [ arg ];\n return jStat.multiply(arr, jStat.inv(arg));\n }\n return jStat.map(arr, function(value) { return value / arg; });\n },\n\n // matrix multiplication\n multiply: function multiply(arr, arg) {\n var row, col, nrescols, sum, nrow, ncol, res, rescols;\n // eg: arr = 2 arg = 3 -> 6 for res[0][0] statement closure\n if (arr.length === undefined && arg.length === undefined) {\n return arr * arg;\n }\n nrow = arr.length,\n ncol = arr[0].length,\n res = jStat.zeros(nrow, nrescols = (isUsable(arg)) ? arg[0].length : ncol),\n rescols = 0;\n if (isUsable(arg)) {\n for (; rescols < nrescols; rescols++) {\n for (row = 0; row < nrow; row++) {\n sum = 0;\n for (col = 0; col < ncol; col++)\n sum += arr[row][col] * arg[col][rescols];\n res[row][rescols] = sum;\n }\n }\n return (nrow === 1 && rescols === 1) ? res[0][0] : res;\n }\n return jStat.map(arr, function(value) { return value * arg; });\n },\n\n // outer([1,2,3],[4,5,6])\n // ===\n // [[1],[2],[3]] times [[4,5,6]]\n // ->\n // [[4,5,6],[8,10,12],[12,15,18]]\n outer:function outer(A, B) {\n return jStat.multiply(A.map(function(t){ return [t] }), [B]);\n },\n\n\n // Returns the dot product of two matricies\n dot: function dot(arr, arg) {\n if (!isUsable(arr[0])) arr = [ arr ];\n if (!isUsable(arg[0])) arg = [ arg ];\n // convert column to row vector\n var left = (arr[0].length === 1 && arr.length !== 1) ? jStat.transpose(arr) : arr,\n right = (arg[0].length === 1 && arg.length !== 1) ? jStat.transpose(arg) : arg,\n res = [],\n row = 0,\n nrow = left.length,\n ncol = left[0].length,\n sum, col;\n for (; row < nrow; row++) {\n res[row] = [];\n sum = 0;\n for (col = 0; col < ncol; col++)\n sum += left[row][col] * right[row][col];\n res[row] = sum;\n }\n return (res.length === 1) ? res[0] : res;\n },\n\n // raise every element by a scalar\n pow: function pow(arr, arg) {\n return jStat.map(arr, function(value) { return Math.pow(value, arg); });\n },\n\n // exponentiate every element\n exp: function exp(arr) {\n return jStat.map(arr, function(value) { return Math.exp(value); });\n },\n\n // generate the natural log of every element\n log: function exp(arr) {\n return jStat.map(arr, function(value) { return Math.log(value); });\n },\n\n // generate the absolute values of the vector\n abs: function abs(arr) {\n return jStat.map(arr, function(value) { return Math.abs(value); });\n },\n\n // computes the p-norm of the vector\n // In the case that a matrix is passed, uses the first row as the vector\n norm: function norm(arr, p) {\n var nnorm = 0,\n i = 0;\n // check the p-value of the norm, and set for most common case\n if (isNaN(p)) p = 2;\n // check if multi-dimensional array, and make vector correction\n if (isUsable(arr[0])) arr = arr[0];\n // vector norm\n for (; i < arr.length; i++) {\n nnorm += Math.pow(Math.abs(arr[i]), p);\n }\n return Math.pow(nnorm, 1 / p);\n },\n\n // computes the angle between two vectors in rads\n // In case a matrix is passed, this uses the first row as the vector\n angle: function angle(arr, arg) {\n return Math.acos(jStat.dot(arr, arg) / (jStat.norm(arr) * jStat.norm(arg)));\n },\n\n // augment one matrix by another\n // Note: this function returns a matrix, not a jStat object\n aug: function aug(a, b) {\n var newarr = [];\n var i;\n for (i = 0; i < a.length; i++) {\n newarr.push(a[i].slice());\n }\n for (i = 0; i < newarr.length; i++) {\n push.apply(newarr[i], b[i]);\n }\n return newarr;\n },\n\n // The inv() function calculates the inverse of a matrix\n // Create the inverse by augmenting the matrix by the identity matrix of the\n // appropriate size, and then use G-J elimination on the augmented matrix.\n inv: function inv(a) {\n var rows = a.length;\n var cols = a[0].length;\n var b = jStat.identity(rows, cols);\n var c = jStat.gauss_jordan(a, b);\n var result = [];\n var i = 0;\n var j;\n\n //We need to copy the inverse portion to a new matrix to rid G-J artifacts\n for (; i < rows; i++) {\n result[i] = [];\n for (j = cols; j < c[0].length; j++)\n result[i][j - cols] = c[i][j];\n }\n return result;\n },\n\n // calculate the determinant of a matrix\n det: function det(a) {\n var alen = a.length,\n alend = alen * 2,\n vals = new Array(alend),\n rowshift = alen - 1,\n colshift = alend - 1,\n mrow = rowshift - alen + 1,\n mcol = colshift,\n i = 0,\n result = 0,\n j;\n // check for special 2x2 case\n if (alen === 2) {\n return a[0][0] * a[1][1] - a[0][1] * a[1][0];\n }\n for (; i < alend; i++) {\n vals[i] = 1;\n }\n for (i = 0; i < alen; i++) {\n for (j = 0; j < alen; j++) {\n vals[(mrow < 0) ? mrow + alen : mrow ] *= a[i][j];\n vals[(mcol < alen) ? mcol + alen : mcol ] *= a[i][j];\n mrow++;\n mcol--;\n }\n mrow = --rowshift - alen + 1;\n mcol = --colshift;\n }\n for (i = 0; i < alen; i++) {\n result += vals[i];\n }\n for (; i < alend; i++) {\n result -= vals[i];\n }\n return result;\n },\n\n gauss_elimination: function gauss_elimination(a, b) {\n var i = 0,\n j = 0,\n n = a.length,\n m = a[0].length,\n factor = 1,\n sum = 0,\n x = [],\n maug, pivot, temp, k;\n a = jStat.aug(a, b);\n maug = a[0].length;\n for(i = 0; i < n; i++) {\n pivot = a[i][i];\n j = i;\n for (k = i + 1; k < m; k++) {\n if (pivot < Math.abs(a[k][i])) {\n pivot = a[k][i];\n j = k;\n }\n }\n if (j != i) {\n for(k = 0; k < maug; k++) {\n temp = a[i][k];\n a[i][k] = a[j][k];\n a[j][k] = temp;\n }\n }\n for (j = i + 1; j < n; j++) {\n factor = a[j][i] / a[i][i];\n for(k = i; k < maug; k++) {\n a[j][k] = a[j][k] - factor * a[i][k];\n }\n }\n }\n for (i = n - 1; i >= 0; i--) {\n sum = 0;\n for (j = i + 1; j<= n - 1; j++) {\n sum = sum + x[j] * a[i][j];\n }\n x[i] =(a[i][maug - 1] - sum) / a[i][i];\n }\n return x;\n },\n\n gauss_jordan: function gauss_jordan(a, b) {\n var m = jStat.aug(a, b);\n var h = m.length;\n var w = m[0].length;\n var c = 0;\n var x, y, y2;\n // find max pivot\n for (y = 0; y < h; y++) {\n var maxrow = y;\n for (y2 = y+1; y2 < h; y2++) {\n if (Math.abs(m[y2][y]) > Math.abs(m[maxrow][y]))\n maxrow = y2;\n }\n var tmp = m[y];\n m[y] = m[maxrow];\n m[maxrow] = tmp\n for (y2 = y+1; y2 < h; y2++) {\n c = m[y2][y] / m[y][y];\n for (x = y; x < w; x++) {\n m[y2][x] -= m[y][x] * c;\n }\n }\n }\n // backsubstitute\n for (y = h-1; y >= 0; y--) {\n c = m[y][y];\n for (y2 = 0; y2 < y; y2++) {\n for (x = w-1; x > y-1; x--) {\n m[y2][x] -= m[y][x] * m[y2][y] / c;\n }\n }\n m[y][y] /= c;\n for (x = h; x < w; x++) {\n m[y][x] /= c;\n }\n }\n return m;\n },\n\n // solve equation\n // Ax=b\n // A is upper triangular matrix\n // A=[[1,2,3],[0,4,5],[0,6,7]]\n // b=[1,2,3]\n // triaUpSolve(A,b) // -> [2.666,0.1666,1.666]\n // if you use matrix style\n // A=[[1,2,3],[0,4,5],[0,6,7]]\n // b=[[1],[2],[3]]\n // will return [[2.666],[0.1666],[1.666]]\n triaUpSolve: function triaUpSolve(A, b) {\n var size = A[0].length;\n var x = jStat.zeros(1, size)[0];\n var parts;\n var matrix_mode = false;\n\n if (b[0].length != undefined) {\n b = b.map(function(i){ return i[0] });\n matrix_mode = true;\n }\n\n jStat.arange(size - 1, -1, -1).forEach(function(i) {\n parts = jStat.arange(i + 1, size).map(function(j) {\n return x[j] * A[i][j];\n });\n x[i] = (b[i] - jStat.sum(parts)) / A[i][i];\n });\n\n if (matrix_mode)\n return x.map(function(i){ return [i] });\n return x;\n },\n\n triaLowSolve: function triaLowSolve(A, b) {\n // like to triaUpSolve but A is lower triangular matrix\n var size = A[0].length;\n var x = jStat.zeros(1, size)[0];\n var parts;\n\n var matrix_mode=false;\n if (b[0].length != undefined) {\n b = b.map(function(i){ return i[0] });\n matrix_mode = true;\n }\n\n jStat.arange(size).forEach(function(i) {\n parts = jStat.arange(i).map(function(j) {\n return A[i][j] * x[j];\n });\n x[i] = (b[i] - jStat.sum(parts)) / A[i][i];\n })\n\n if (matrix_mode)\n return x.map(function(i){ return [i] });\n return x;\n },\n\n\n // A -> [L,U]\n // A=LU\n // L is lower triangular matrix\n // U is upper triangular matrix\n lu: function lu(A) {\n var size = A.length;\n //var L=jStat.diagonal(jStat.ones(1,size)[0]);\n var L = jStat.identity(size);\n var R = jStat.zeros(A.length, A[0].length);\n var parts;\n jStat.arange(size).forEach(function(t) {\n R[0][t] = A[0][t];\n });\n jStat.arange(1, size).forEach(function(l) {\n jStat.arange(l).forEach(function(i) {\n parts = jStat.arange(i).map(function(jj) {\n return L[l][jj] * R[jj][i];\n });\n L[l][i] = (A[l][i] - jStat.sum(parts)) / R[i][i];\n });\n jStat.arange(l, size).forEach(function(j) {\n parts = jStat.arange(l).map(function(jj) {\n return L[l][jj] * R[jj][j];\n });\n R[l][j] = A[parts.length][j] - jStat.sum(parts);\n });\n });\n return [L, R];\n },\n\n // A -> T\n // A=TT'\n // T is lower triangular matrix\n cholesky: function cholesky(A) {\n var size = A.length;\n var T = jStat.zeros(A.length, A[0].length);\n var parts;\n jStat.arange(size).forEach(function(i) {\n parts = jStat.arange(i).map(function(t) {\n return Math.pow(T[i][t],2);\n });\n T[i][i] = Math.sqrt(A[i][i] - jStat.sum(parts));\n jStat.arange(i + 1, size).forEach(function(j) {\n parts = jStat.arange(i).map(function(t) {\n return T[i][t] * T[j][t];\n });\n T[j][i] = (A[i][j] - jStat.sum(parts)) / T[i][i];\n });\n });\n return T;\n },\n\n\n gauss_jacobi: function gauss_jacobi(a, b, x, r) {\n var i = 0;\n var j = 0;\n var n = a.length;\n var l = [];\n var u = [];\n var d = [];\n var xv, c, h, xk;\n for (; i < n; i++) {\n l[i] = [];\n u[i] = [];\n d[i] = [];\n for (j = 0; j < n; j++) {\n if (i > j) {\n l[i][j] = a[i][j];\n u[i][j] = d[i][j] = 0;\n } else if (i < j) {\n u[i][j] = a[i][j];\n l[i][j] = d[i][j] = 0;\n } else {\n d[i][j] = a[i][j];\n l[i][j] = u[i][j] = 0;\n }\n }\n }\n h = jStat.multiply(jStat.multiply(jStat.inv(d), jStat.add(l, u)), -1);\n c = jStat.multiply(jStat.inv(d), b);\n xv = x;\n xk = jStat.add(jStat.multiply(h, x), c);\n i = 2;\n while (Math.abs(jStat.norm(jStat.subtract(xk,xv))) > r) {\n xv = xk;\n xk = jStat.add(jStat.multiply(h, xv), c);\n i++;\n }\n return xk;\n },\n\n gauss_seidel: function gauss_seidel(a, b, x, r) {\n var i = 0;\n var n = a.length;\n var l = [];\n var u = [];\n var d = [];\n var j, xv, c, h, xk;\n for (; i < n; i++) {\n l[i] = [];\n u[i] = [];\n d[i] = [];\n for (j = 0; j < n; j++) {\n if (i > j) {\n l[i][j] = a[i][j];\n u[i][j] = d[i][j] = 0;\n } else if (i < j) {\n u[i][j] = a[i][j];\n l[i][j] = d[i][j] = 0;\n } else {\n d[i][j] = a[i][j];\n l[i][j] = u[i][j] = 0;\n }\n }\n }\n h = jStat.multiply(jStat.multiply(jStat.inv(jStat.add(d, l)), u), -1);\n c = jStat.multiply(jStat.inv(jStat.add(d, l)), b);\n xv = x;\n xk = jStat.add(jStat.multiply(h, x), c);\n i = 2;\n while (Math.abs(jStat.norm(jStat.subtract(xk, xv))) > r) {\n xv = xk;\n xk = jStat.add(jStat.multiply(h, xv), c);\n i = i + 1;\n }\n return xk;\n },\n\n SOR: function SOR(a, b, x, r, w) {\n var i = 0;\n var n = a.length;\n var l = [];\n var u = [];\n var d = [];\n var j, xv, c, h, xk;\n for (; i < n; i++) {\n l[i] = [];\n u[i] = [];\n d[i] = [];\n for (j = 0; j < n; j++) {\n if (i > j) {\n l[i][j] = a[i][j];\n u[i][j] = d[i][j] = 0;\n } else if (i < j) {\n u[i][j] = a[i][j];\n l[i][j] = d[i][j] = 0;\n } else {\n d[i][j] = a[i][j];\n l[i][j] = u[i][j] = 0;\n }\n }\n }\n h = jStat.multiply(jStat.inv(jStat.add(d, jStat.multiply(l, w))),\n jStat.subtract(jStat.multiply(d, 1 - w),\n jStat.multiply(u, w)));\n c = jStat.multiply(jStat.multiply(jStat.inv(jStat.add(d,\n jStat.multiply(l, w))), b), w);\n xv = x;\n xk = jStat.add(jStat.multiply(h, x), c);\n i = 2;\n while (Math.abs(jStat.norm(jStat.subtract(xk, xv))) > r) {\n xv = xk;\n xk = jStat.add(jStat.multiply(h, xv), c);\n i++;\n }\n return xk;\n },\n\n householder: function householder(a) {\n var m = a.length;\n var n = a[0].length;\n var i = 0;\n var w = [];\n var p = [];\n var alpha, r, k, j, factor;\n for (; i < m - 1; i++) {\n alpha = 0;\n for (j = i + 1; j < n; j++)\n alpha += (a[j][i] * a[j][i]);\n factor = (a[i + 1][i] > 0) ? -1 : 1;\n alpha = factor * Math.sqrt(alpha);\n r = Math.sqrt((((alpha * alpha) - a[i + 1][i] * alpha) / 2));\n w = jStat.zeros(m, 1);\n w[i + 1][0] = (a[i + 1][i] - alpha) / (2 * r);\n for (k = i + 2; k < m; k++) w[k][0] = a[k][i] / (2 * r);\n p = jStat.subtract(jStat.identity(m, n),\n jStat.multiply(jStat.multiply(w, jStat.transpose(w)), 2));\n a = jStat.multiply(p, jStat.multiply(a, p));\n }\n return a;\n },\n\n // A -> [Q,R]\n // Q is orthogonal matrix\n // R is upper triangular\n QR: (function() {\n // x -> Q\n // find a orthogonal matrix Q st.\n // Qx=y\n // y is [||x||,0,0,...]\n\n // quick ref\n var sum = jStat.sum;\n var range = jStat.arange;\n\n function qr2(x) {\n // quick impletation\n // https://www.stat.wisc.edu/~larget/math496/qr.html\n\n var n = x.length;\n var p = x[0].length;\n\n var r = jStat.zeros(p, p);\n x = jStat.copy(x);\n\n var i,j,k;\n for(j = 0; j < p; j++){\n r[j][j] = Math.sqrt(sum(range(n).map(function(i){\n return x[i][j] * x[i][j];\n })));\n for(i = 0; i < n; i++){\n x[i][j] = x[i][j] / r[j][j];\n }\n for(k = j+1; k < p; k++){\n r[j][k] = sum(range(n).map(function(i){\n return x[i][j] * x[i][k];\n }));\n for(i = 0; i < n; i++){\n x[i][k] = x[i][k] - x[i][j]*r[j][k];\n }\n }\n }\n return [x, r];\n }\n\n return qr2;\n }()),\n\n lstsq: (function() {\n // solve least squard problem for Ax=b as QR decomposition way if b is\n // [[b1],[b2],[b3]] form will return [[x1],[x2],[x3]] array form solution\n // else b is [b1,b2,b3] form will return [x1,x2,x3] array form solution\n function R_I(A) {\n A = jStat.copy(A);\n var size = A.length;\n var I = jStat.identity(size);\n jStat.arange(size - 1, -1, -1).forEach(function(i) {\n jStat.sliceAssign(\n I, { row: i }, jStat.divide(jStat.slice(I, { row: i }), A[i][i]));\n jStat.sliceAssign(\n A, { row: i }, jStat.divide(jStat.slice(A, { row: i }), A[i][i]));\n jStat.arange(i).forEach(function(j) {\n var c = jStat.multiply(A[j][i], -1);\n var Aj = jStat.slice(A, { row: j });\n var cAi = jStat.multiply(jStat.slice(A, { row: i }), c);\n jStat.sliceAssign(A, { row: j }, jStat.add(Aj, cAi));\n var Ij = jStat.slice(I, { row: j });\n var cIi = jStat.multiply(jStat.slice(I, { row: i }), c);\n jStat.sliceAssign(I, { row: j }, jStat.add(Ij, cIi));\n })\n });\n return I;\n }\n\n function qr_solve(A, b){\n var array_mode = false;\n if (b[0].length === undefined) {\n // [c1,c2,c3] mode\n b = b.map(function(x){ return [x] });\n array_mode = true;\n }\n var QR = jStat.QR(A);\n var Q = QR[0];\n var R = QR[1];\n var attrs = A[0].length;\n var Q1 = jStat.slice(Q,{col:{end:attrs}});\n var R1 = jStat.slice(R,{row:{end:attrs}});\n var RI = R_I(R1);\n var Q2 = jStat.transpose(Q1);\n\n if(Q2[0].length === undefined){\n Q2 = [Q2]; // The confusing jStat.multifly implementation threat nature process again.\n }\n\n var x = jStat.multiply(jStat.multiply(RI, Q2), b);\n\n if(x.length === undefined){\n x = [[x]]; // The confusing jStat.multifly implementation threat nature process again.\n }\n\n\n if (array_mode)\n return x.map(function(i){ return i[0] });\n return x;\n }\n\n return qr_solve;\n }()),\n\n jacobi: function jacobi(a) {\n var condition = 1;\n var n = a.length;\n var e = jStat.identity(n, n);\n var ev = [];\n var b, i, j, p, q, maxim, theta, s;\n // condition === 1 only if tolerance is not reached\n while (condition === 1) {\n maxim = a[0][1];\n p = 0;\n q = 1;\n for (i = 0; i < n; i++) {\n for (j = 0; j < n; j++) {\n if (i != j) {\n if (maxim < Math.abs(a[i][j])) {\n maxim = Math.abs(a[i][j]);\n p = i;\n q = j;\n }\n }\n }\n }\n if (a[p][p] === a[q][q])\n theta = (a[p][q] > 0) ? Math.PI / 4 : -Math.PI / 4;\n else\n theta = Math.atan(2 * a[p][q] / (a[p][p] - a[q][q])) / 2;\n s = jStat.identity(n, n);\n s[p][p] = Math.cos(theta);\n s[p][q] = -Math.sin(theta);\n s[q][p] = Math.sin(theta);\n s[q][q] = Math.cos(theta);\n // eigen vector matrix\n e = jStat.multiply(e, s);\n b = jStat.multiply(jStat.multiply(jStat.inv(s), a), s);\n a = b;\n condition = 0;\n for (i = 1; i < n; i++) {\n for (j = 1; j < n; j++) {\n if (i != j && Math.abs(a[i][j]) > 0.001) {\n condition = 1;\n }\n }\n }\n }\n for (i = 0; i < n; i++) ev.push(a[i][i]);\n //returns both the eigenvalue and eigenmatrix\n return [e, ev];\n },\n\n rungekutta: function rungekutta(f, h, p, t_j, u_j, order) {\n var k1, k2, u_j1, k3, k4;\n if (order === 2) {\n while (t_j <= p) {\n k1 = h * f(t_j, u_j);\n k2 = h * f(t_j + h, u_j + k1);\n u_j1 = u_j + (k1 + k2) / 2;\n u_j = u_j1;\n t_j = t_j + h;\n }\n }\n if (order === 4) {\n while (t_j <= p) {\n k1 = h * f(t_j, u_j);\n k2 = h * f(t_j + h / 2, u_j + k1 / 2);\n k3 = h * f(t_j + h / 2, u_j + k2 / 2);\n k4 = h * f(t_j +h, u_j + k3);\n u_j1 = u_j + (k1 + 2 * k2 + 2 * k3 + k4) / 6;\n u_j = u_j1;\n t_j = t_j + h;\n }\n }\n return u_j;\n },\n\n romberg: function romberg(f, a, b, order) {\n var i = 0;\n var h = (b - a) / 2;\n var x = [];\n var h1 = [];\n var g = [];\n var m, a1, j, k, I;\n while (i < order / 2) {\n I = f(a);\n for (j = a, k = 0; j <= b; j = j + h, k++) x[k] = j;\n m = x.length;\n for (j = 1; j < m - 1; j++) {\n I += (((j % 2) !== 0) ? 4 : 2) * f(x[j]);\n }\n I = (h / 3) * (I + f(b));\n g[i] = I;\n h /= 2;\n i++;\n }\n a1 = g.length;\n m = 1;\n while (a1 !== 1) {\n for (j = 0; j < a1 - 1; j++)\n h1[j] = ((Math.pow(4, m)) * g[j + 1] - g[j]) / (Math.pow(4, m) - 1);\n a1 = h1.length;\n g = h1;\n h1 = [];\n m++;\n }\n return g;\n },\n\n richardson: function richardson(X, f, x, h) {\n function pos(X, x) {\n var i = 0;\n var n = X.length;\n var p;\n for (; i < n; i++)\n if (X[i] === x) p = i;\n return p;\n }\n var h_min = Math.abs(x - X[pos(X, x) + 1]);\n var i = 0;\n var g = [];\n var h1 = [];\n var y1, y2, m, a, j;\n while (h >= h_min) {\n y1 = pos(X, x + h);\n y2 = pos(X, x);\n g[i] = (f[y1] - 2 * f[y2] + f[2 * y2 - y1]) / (h * h);\n h /= 2;\n i++;\n }\n a = g.length;\n m = 1;\n while (a != 1) {\n for (j = 0; j < a - 1; j++)\n h1[j] = ((Math.pow(4, m)) * g[j + 1] - g[j]) / (Math.pow(4, m) - 1);\n a = h1.length;\n g = h1;\n h1 = [];\n m++;\n }\n return g;\n },\n\n simpson: function simpson(f, a, b, n) {\n var h = (b - a) / n;\n var I = f(a);\n var x = [];\n var j = a;\n var k = 0;\n var i = 1;\n var m;\n for (; j <= b; j = j + h, k++)\n x[k] = j;\n m = x.length;\n for (; i < m - 1; i++) {\n I += ((i % 2 !== 0) ? 4 : 2) * f(x[i]);\n }\n return (h / 3) * (I + f(b));\n },\n\n hermite: function hermite(X, F, dF, value) {\n var n = X.length;\n var p = 0;\n var i = 0;\n var l = [];\n var dl = [];\n var A = [];\n var B = [];\n var j;\n for (; i < n; i++) {\n l[i] = 1;\n for (j = 0; j < n; j++) {\n if (i != j) l[i] *= (value - X[j]) / (X[i] - X[j]);\n }\n dl[i] = 0;\n for (j = 0; j < n; j++) {\n if (i != j) dl[i] += 1 / (X [i] - X[j]);\n }\n A[i] = (1 - 2 * (value - X[i]) * dl[i]) * (l[i] * l[i]);\n B[i] = (value - X[i]) * (l[i] * l[i]);\n p += (A[i] * F[i] + B[i] * dF[i]);\n }\n return p;\n },\n\n lagrange: function lagrange(X, F, value) {\n var p = 0;\n var i = 0;\n var j, l;\n var n = X.length;\n for (; i < n; i++) {\n l = F[i];\n for (j = 0; j < n; j++) {\n // calculating the lagrange polynomial L_i\n if (i != j) l *= (value - X[j]) / (X[i] - X[j]);\n }\n // adding the lagrange polynomials found above\n p += l;\n }\n return p;\n },\n\n cubic_spline: function cubic_spline(X, F, value) {\n var n = X.length;\n var i = 0, j;\n var A = [];\n var B = [];\n var alpha = [];\n var c = [];\n var h = [];\n var b = [];\n var d = [];\n for (; i < n - 1; i++)\n h[i] = X[i + 1] - X[i];\n alpha[0] = 0;\n for (i = 1; i < n - 1; i++) {\n alpha[i] = (3 / h[i]) * (F[i + 1] - F[i]) -\n (3 / h[i-1]) * (F[i] - F[i-1]);\n }\n for (i = 1; i < n - 1; i++) {\n A[i] = [];\n B[i] = [];\n A[i][i-1] = h[i-1];\n A[i][i] = 2 * (h[i - 1] + h[i]);\n A[i][i+1] = h[i];\n B[i][0] = alpha[i];\n }\n c = jStat.multiply(jStat.inv(A), B);\n for (j = 0; j < n - 1; j++) {\n b[j] = (F[j + 1] - F[j]) / h[j] - h[j] * (c[j + 1][0] + 2 * c[j][0]) / 3;\n d[j] = (c[j + 1][0] - c[j][0]) / (3 * h[j]);\n }\n for (j = 0; j < n; j++) {\n if (X[j] > value) break;\n }\n j -= 1;\n return F[j] + (value - X[j]) * b[j] + jStat.sq(value-X[j]) *\n c[j] + (value - X[j]) * jStat.sq(value - X[j]) * d[j];\n },\n\n gauss_quadrature: function gauss_quadrature() {\n throw new Error('gauss_quadrature not yet implemented');\n },\n\n PCA: function PCA(X) {\n var m = X.length;\n var n = X[0].length;\n var i = 0;\n var j, temp1;\n var u = [];\n var D = [];\n var result = [];\n var temp2 = [];\n var Y = [];\n var Bt = [];\n var B = [];\n var C = [];\n var V = [];\n var Vt = [];\n for (i = 0; i < m; i++) {\n u[i] = jStat.sum(X[i]) / n;\n }\n for (i = 0; i < n; i++) {\n B[i] = [];\n for(j = 0; j < m; j++) {\n B[i][j] = X[j][i] - u[j];\n }\n }\n B = jStat.transpose(B);\n for (i = 0; i < m; i++) {\n C[i] = [];\n for (j = 0; j < m; j++) {\n C[i][j] = (jStat.dot([B[i]], [B[j]])) / (n - 1);\n }\n }\n result = jStat.jacobi(C);\n V = result[0];\n D = result[1];\n Vt = jStat.transpose(V);\n for (i = 0; i < D.length; i++) {\n for (j = i; j < D.length; j++) {\n if(D[i] < D[j]) {\n temp1 = D[i];\n D[i] = D[j];\n D[j] = temp1;\n temp2 = Vt[i];\n Vt[i] = Vt[j];\n Vt[j] = temp2;\n }\n }\n }\n Bt = jStat.transpose(B);\n for (i = 0; i < m; i++) {\n Y[i] = [];\n for (j = 0; j < Bt.length; j++) {\n Y[i][j] = jStat.dot([Vt[i]], [Bt[j]]);\n }\n }\n return [X, D, Vt, Y];\n }\n});\n\n// extend jStat.fn with methods that require one argument\n(function(funcs) {\n for (var i = 0; i < funcs.length; i++) (function(passfunc) {\n jStat.fn[passfunc] = function(arg, func) {\n var tmpthis = this;\n // check for callback\n if (func) {\n setTimeout(function() {\n func.call(tmpthis, jStat.fn[passfunc].call(tmpthis, arg));\n }, 15);\n return this;\n }\n if (typeof jStat[passfunc](this, arg) === 'number')\n return jStat[passfunc](this, arg);\n else\n return jStat(jStat[passfunc](this, arg));\n };\n }(funcs[i]));\n}('add divide multiply subtract dot pow exp log abs norm angle'.split(' ')));\n\n}(jStat, Math));\n(function(jStat, Math) {\n\nvar slice = [].slice;\nvar isNumber = jStat.utils.isNumber;\nvar isArray = jStat.utils.isArray;\n\n// flag==true denotes use of sample standard deviation\n// Z Statistics\njStat.extend({\n // 2 different parameter lists:\n // (value, mean, sd)\n // (value, array, flag)\n zscore: function zscore() {\n var args = slice.call(arguments);\n if (isNumber(args[1])) {\n return (args[0] - args[1]) / args[2];\n }\n return (args[0] - jStat.mean(args[1])) / jStat.stdev(args[1], args[2]);\n },\n\n // 3 different paramter lists:\n // (value, mean, sd, sides)\n // (zscore, sides)\n // (value, array, sides, flag)\n ztest: function ztest() {\n var args = slice.call(arguments);\n var z;\n if (isArray(args[1])) {\n // (value, array, sides, flag)\n z = jStat.zscore(args[0],args[1],args[3]);\n return (args[2] === 1) ?\n (jStat.normal.cdf(-Math.abs(z), 0, 1)) :\n (jStat.normal.cdf(-Math.abs(z), 0, 1)*2);\n } else {\n if (args.length > 2) {\n // (value, mean, sd, sides)\n z = jStat.zscore(args[0],args[1],args[2]);\n return (args[3] === 1) ?\n (jStat.normal.cdf(-Math.abs(z),0,1)) :\n (jStat.normal.cdf(-Math.abs(z),0,1)* 2);\n } else {\n // (zscore, sides)\n z = args[0];\n return (args[1] === 1) ?\n (jStat.normal.cdf(-Math.abs(z),0,1)) :\n (jStat.normal.cdf(-Math.abs(z),0,1)*2);\n }\n }\n }\n});\n\njStat.extend(jStat.fn, {\n zscore: function zscore(value, flag) {\n return (value - this.mean()) / this.stdev(flag);\n },\n\n ztest: function ztest(value, sides, flag) {\n var zscore = Math.abs(this.zscore(value, flag));\n return (sides === 1) ?\n (jStat.normal.cdf(-zscore, 0, 1)) :\n (jStat.normal.cdf(-zscore, 0, 1) * 2);\n }\n});\n\n// T Statistics\njStat.extend({\n // 2 parameter lists\n // (value, mean, sd, n)\n // (value, array)\n tscore: function tscore() {\n var args = slice.call(arguments);\n return (args.length === 4) ?\n ((args[0] - args[1]) / (args[2] / Math.sqrt(args[3]))) :\n ((args[0] - jStat.mean(args[1])) /\n (jStat.stdev(args[1], true) / Math.sqrt(args[1].length)));\n },\n\n // 3 different paramter lists:\n // (value, mean, sd, n, sides)\n // (tscore, n, sides)\n // (value, array, sides)\n ttest: function ttest() {\n var args = slice.call(arguments);\n var tscore;\n if (args.length === 5) {\n tscore = Math.abs(jStat.tscore(args[0], args[1], args[2], args[3]));\n return (args[4] === 1) ?\n (jStat.studentt.cdf(-tscore, args[3]-1)) :\n (jStat.studentt.cdf(-tscore, args[3]-1)*2);\n }\n if (isNumber(args[1])) {\n tscore = Math.abs(args[0])\n return (args[2] == 1) ?\n (jStat.studentt.cdf(-tscore, args[1]-1)) :\n (jStat.studentt.cdf(-tscore, args[1]-1) * 2);\n }\n tscore = Math.abs(jStat.tscore(args[0], args[1]))\n return (args[2] == 1) ?\n (jStat.studentt.cdf(-tscore, args[1].length-1)) :\n (jStat.studentt.cdf(-tscore, args[1].length-1) * 2);\n }\n});\n\njStat.extend(jStat.fn, {\n tscore: function tscore(value) {\n return (value - this.mean()) / (this.stdev(true) / Math.sqrt(this.cols()));\n },\n\n ttest: function ttest(value, sides) {\n return (sides === 1) ?\n (1 - jStat.studentt.cdf(Math.abs(this.tscore(value)), this.cols()-1)) :\n (jStat.studentt.cdf(-Math.abs(this.tscore(value)), this.cols()-1)*2);\n }\n});\n\n// F Statistics\njStat.extend({\n // Paramter list is as follows:\n // (array1, array2, array3, ...)\n // or it is an array of arrays\n // array of arrays conversion\n anovafscore: function anovafscore() {\n var args = slice.call(arguments),\n expVar, sample, sampMean, sampSampMean, tmpargs, unexpVar, i, j;\n if (args.length === 1) {\n tmpargs = new Array(args[0].length);\n for (i = 0; i < args[0].length; i++) {\n tmpargs[i] = args[0][i];\n }\n args = tmpargs;\n }\n // Builds sample array\n sample = new Array();\n for (i = 0; i < args.length; i++) {\n sample = sample.concat(args[i]);\n }\n sampMean = jStat.mean(sample);\n // Computes the explained variance\n expVar = 0;\n for (i = 0; i < args.length; i++) {\n expVar = expVar + args[i].length * Math.pow(jStat.mean(args[i]) - sampMean, 2);\n }\n expVar /= (args.length - 1);\n // Computes unexplained variance\n unexpVar = 0;\n for (i = 0; i < args.length; i++) {\n sampSampMean = jStat.mean(args[i]);\n for (j = 0; j < args[i].length; j++) {\n unexpVar += Math.pow(args[i][j] - sampSampMean, 2);\n }\n }\n unexpVar /= (sample.length - args.length);\n return expVar / unexpVar;\n },\n\n // 2 different paramter setups\n // (array1, array2, array3, ...)\n // (anovafscore, df1, df2)\n anovaftest: function anovaftest() {\n var args = slice.call(arguments),\n df1, df2, n, i;\n if (isNumber(args[0])) {\n return 1 - jStat.centralF.cdf(args[0], args[1], args[2]);\n }\n var anovafscore = jStat.anovafscore(args);\n df1 = args.length - 1;\n n = 0;\n for (i = 0; i < args.length; i++) {\n n = n + args[i].length;\n }\n df2 = n - df1 - 1;\n return 1 - jStat.centralF.cdf(anovafscore, df1, df2);\n },\n\n ftest: function ftest(fscore, df1, df2) {\n return 1 - jStat.centralF.cdf(fscore, df1, df2);\n }\n});\n\njStat.extend(jStat.fn, {\n anovafscore: function anovafscore() {\n return jStat.anovafscore(this.toArray());\n },\n\n anovaftes: function anovaftes() {\n var n = 0;\n var i;\n for (i = 0; i < this.length; i++) {\n n = n + this[i].length;\n }\n return jStat.ftest(this.anovafscore(), this.length - 1, n - this.length);\n }\n});\n\n// Tukey's range test\njStat.extend({\n // 2 parameter lists\n // (mean1, mean2, n1, n2, sd)\n // (array1, array2, sd)\n qscore: function qscore() {\n var args = slice.call(arguments);\n var mean1, mean2, n1, n2, sd;\n if (isNumber(args[0])) {\n mean1 = args[0];\n mean2 = args[1];\n n1 = args[2];\n n2 = args[3];\n sd = args[4];\n } else {\n mean1 = jStat.mean(args[0]);\n mean2 = jStat.mean(args[1]);\n n1 = args[0].length;\n n2 = args[1].length;\n sd = args[2];\n }\n return Math.abs(mean1 - mean2) / (sd * Math.sqrt((1 / n1 + 1 / n2) / 2));\n },\n\n // 3 different parameter lists:\n // (qscore, n, k)\n // (mean1, mean2, n1, n2, sd, n, k)\n // (array1, array2, sd, n, k)\n qtest: function qtest() {\n var args = slice.call(arguments);\n\n var qscore;\n if (args.length === 3) {\n qscore = args[0];\n args = args.slice(1);\n } else if (args.length === 7) {\n qscore = jStat.qscore(args[0], args[1], args[2], args[3], args[4]);\n args = args.slice(5);\n } else {\n qscore = jStat.qscore(args[0], args[1], args[2]);\n args = args.slice(3);\n }\n\n var n = args[0];\n var k = args[1];\n\n return 1 - jStat.tukey.cdf(qscore, k, n - k);\n },\n\n tukeyhsd: function tukeyhsd(arrays) {\n var sd = jStat.pooledstdev(arrays);\n var means = arrays.map(function (arr) {return jStat.mean(arr);});\n var n = arrays.reduce(function (n, arr) {return n + arr.length;}, 0);\n\n var results = [];\n for (var i = 0; i < arrays.length; ++i) {\n for (var j = i + 1; j < arrays.length; ++j) {\n var p = jStat.qtest(means[i], means[j], arrays[i].length, arrays[j].length, sd, n, arrays.length);\n results.push([[i, j], p]);\n }\n }\n\n return results;\n }\n});\n\n// Error Bounds\njStat.extend({\n // 2 different parameter setups\n // (value, alpha, sd, n)\n // (value, alpha, array)\n normalci: function normalci() {\n var args = slice.call(arguments),\n ans = new Array(2),\n change;\n if (args.length === 4) {\n change = Math.abs(jStat.normal.inv(args[1] / 2, 0, 1) *\n args[2] / Math.sqrt(args[3]));\n } else {\n change = Math.abs(jStat.normal.inv(args[1] / 2, 0, 1) *\n jStat.stdev(args[2]) / Math.sqrt(args[2].length));\n }\n ans[0] = args[0] - change;\n ans[1] = args[0] + change;\n return ans;\n },\n\n // 2 different parameter setups\n // (value, alpha, sd, n)\n // (value, alpha, array)\n tci: function tci() {\n var args = slice.call(arguments),\n ans = new Array(2),\n change;\n if (args.length === 4) {\n change = Math.abs(jStat.studentt.inv(args[1] / 2, args[3] - 1) *\n args[2] / Math.sqrt(args[3]));\n } else {\n change = Math.abs(jStat.studentt.inv(args[1] / 2, args[2].length - 1) *\n jStat.stdev(args[2], true) / Math.sqrt(args[2].length));\n }\n ans[0] = args[0] - change;\n ans[1] = args[0] + change;\n return ans;\n },\n\n significant: function significant(pvalue, alpha) {\n return pvalue < alpha;\n }\n});\n\njStat.extend(jStat.fn, {\n normalci: function normalci(value, alpha) {\n return jStat.normalci(value, alpha, this.toArray());\n },\n\n tci: function tci(value, alpha) {\n return jStat.tci(value, alpha, this.toArray());\n }\n});\n\n// internal method for calculating the z-score for a difference of proportions test\nfunction differenceOfProportions(p1, n1, p2, n2) {\n if (p1 > 1 || p2 > 1 || p1 <= 0 || p2 <= 0) {\n throw new Error(\"Proportions should be greater than 0 and less than 1\")\n }\n var pooled = (p1 * n1 + p2 * n2) / (n1 + n2);\n var se = Math.sqrt(pooled * (1 - pooled) * ((1/n1) + (1/n2)));\n return (p1 - p2) / se;\n}\n\n// Difference of Proportions\njStat.extend(jStat.fn, {\n oneSidedDifferenceOfProportions: function oneSidedDifferenceOfProportions(p1, n1, p2, n2) {\n var z = differenceOfProportions(p1, n1, p2, n2);\n return jStat.ztest(z, 1);\n },\n\n twoSidedDifferenceOfProportions: function twoSidedDifferenceOfProportions(p1, n1, p2, n2) {\n var z = differenceOfProportions(p1, n1, p2, n2);\n return jStat.ztest(z, 2);\n }\n});\n\n}(jStat, Math));\njStat.models = (function(){\n function sub_regress(exog) {\n var var_count = exog[0].length;\n var modelList = jStat.arange(var_count).map(function(endog_index) {\n var exog_index =\n jStat.arange(var_count).filter(function(i){return i!==endog_index});\n return ols(jStat.col(exog, endog_index).map(function(x){ return x[0] }),\n jStat.col(exog, exog_index))\n });\n return modelList;\n }\n\n // do OLS model regress\n // exog have include const columns ,it will not generate it .In fact, exog is\n // \"design matrix\" look at\n //https://en.wikipedia.org/wiki/Design_matrix\n function ols(endog, exog) {\n var nobs = endog.length;\n var df_model = exog[0].length - 1;\n var df_resid = nobs-df_model - 1;\n var coef = jStat.lstsq(exog, endog);\n var predict =\n jStat.multiply(exog, coef.map(function(x) { return [x] }))\n .map(function(p) { return p[0] });\n var resid = jStat.subtract(endog, predict);\n var ybar = jStat.mean(endog);\n // constant cause problem\n // var SST = jStat.sum(endog.map(function(y) {\n // return Math.pow(y-ybar,2);\n // }));\n var SSE = jStat.sum(predict.map(function(f) {\n return Math.pow(f - ybar, 2);\n }));\n var SSR = jStat.sum(endog.map(function(y, i) {\n return Math.pow(y - predict[i], 2);\n }));\n var SST = SSE + SSR;\n var R2 = (SSE / SST);\n return {\n exog:exog,\n endog:endog,\n nobs:nobs,\n df_model:df_model,\n df_resid:df_resid,\n coef:coef,\n predict:predict,\n resid:resid,\n ybar:ybar,\n SST:SST,\n SSE:SSE,\n SSR:SSR,\n R2:R2\n };\n }\n\n // H0: b_I=0\n // H1: b_I!=0\n function t_test(model) {\n var subModelList = sub_regress(model.exog);\n //var sigmaHat=jStat.stdev(model.resid);\n var sigmaHat = Math.sqrt(model.SSR / (model.df_resid));\n var seBetaHat = subModelList.map(function(mod) {\n var SST = mod.SST;\n var R2 = mod.R2;\n return sigmaHat / Math.sqrt(SST * (1 - R2));\n });\n var tStatistic = model.coef.map(function(coef, i) {\n return (coef - 0) / seBetaHat[i];\n });\n var pValue = tStatistic.map(function(t) {\n var leftppf = jStat.studentt.cdf(t, model.df_resid);\n return (leftppf > 0.5 ? 1 - leftppf : leftppf) * 2;\n });\n var c = jStat.studentt.inv(0.975, model.df_resid);\n var interval95 = model.coef.map(function(coef, i) {\n var d = c * seBetaHat[i];\n return [coef - d, coef + d];\n })\n return {\n se: seBetaHat,\n t: tStatistic,\n p: pValue,\n sigmaHat: sigmaHat,\n interval95: interval95\n };\n }\n\n function F_test(model) {\n var F_statistic =\n (model.R2 / model.df_model) / ((1 - model.R2) / model.df_resid);\n var fcdf = function(x, n1, n2) {\n return jStat.beta.cdf(x / (n2 / n1 + x), n1 / 2, n2 / 2)\n }\n var pvalue = 1 - fcdf(F_statistic, model.df_model, model.df_resid);\n return { F_statistic: F_statistic, pvalue: pvalue };\n }\n\n function ols_wrap(endog, exog) {\n var model = ols(endog,exog);\n var ttest = t_test(model);\n var ftest = F_test(model);\n // Provide the Wherry / Ezekiel / McNemar / Cohen Adjusted R^2\n // Which matches the 'adjusted R^2' provided by R's lm package\n var adjust_R2 =\n 1 - (1 - model.R2) * ((model.nobs - 1) / (model.df_resid));\n model.t = ttest;\n model.f = ftest;\n model.adjust_R2 = adjust_R2;\n return model;\n }\n\n return { ols: ols_wrap };\n})();\n//To regress, simply build X matrix\n//(append column of 1's) using\n//buildxmatrix and build the Y\n//matrix using buildymatrix\n//(simply the transpose)\n//and run regress.\n\n\n\n//Regressions\n\njStat.extend({\n buildxmatrix: function buildxmatrix(){\n //Parameters will be passed in as such\n //(array1,array2,array3,...)\n //as (x1,x2,x3,...)\n //needs to be (1,x1,x2,x3,...)\n var matrixRows = new Array(arguments.length);\n for(var i=0;i<arguments.length;i++){\n var array = [1];\n matrixRows[i]= array.concat(arguments[i]);\n }\n return jStat(matrixRows);\n\n },\n\n builddxmatrix: function builddxmatrix() {\n //Paramters will be passed in as such\n //([array1,array2,...]\n var matrixRows = new Array(arguments[0].length);\n for(var i=0;i<arguments[0].length;i++){\n var array = [1]\n matrixRows[i]= array.concat(arguments[0][i]);\n }\n return jStat(matrixRows);\n\n },\n\n buildjxmatrix: function buildjxmatrix(jMat) {\n //Builds from jStat Matrix\n var pass = new Array(jMat.length)\n for(var i=0;i<jMat.length;i++){\n pass[i] = jMat[i];\n }\n return jStat.builddxmatrix(pass);\n\n },\n\n buildymatrix: function buildymatrix(array){\n return jStat(array).transpose();\n },\n\n buildjymatrix: function buildjymatrix(jMat){\n return jMat.transpose();\n },\n\n matrixmult: function matrixmult(A,B){\n var i, j, k, result, sum;\n if (A.cols() == B.rows()) {\n if(B.rows()>1){\n result = [];\n for (i = 0; i < A.rows(); i++) {\n result[i] = [];\n for (j = 0; j < B.cols(); j++) {\n sum = 0;\n for (k = 0; k < A.cols(); k++) {\n sum += A.toArray()[i][k] * B.toArray()[k][j];\n }\n result[i][j] = sum;\n }\n }\n return jStat(result);\n }\n result = [];\n for (i = 0; i < A.rows(); i++) {\n result[i] = [];\n for (j = 0; j < B.cols(); j++) {\n sum = 0;\n for (k = 0; k < A.cols(); k++) {\n sum += A.toArray()[i][k] * B.toArray()[j];\n }\n result[i][j] = sum;\n }\n }\n return jStat(result);\n }\n },\n\n //regress and regresst to be fixed\n\n regress: function regress(jMatX,jMatY){\n //print(\"regressin!\");\n //print(jMatX.toArray());\n var innerinv = jStat.xtranspxinv(jMatX);\n //print(innerinv);\n var xtransp = jMatX.transpose();\n var next = jStat.matrixmult(jStat(innerinv),xtransp);\n return jStat.matrixmult(next,jMatY);\n\n },\n\n regresst: function regresst(jMatX,jMatY,sides){\n var beta = jStat.regress(jMatX,jMatY);\n\n var compile = {};\n compile.anova = {};\n var jMatYBar = jStat.jMatYBar(jMatX, beta);\n compile.yBar = jMatYBar;\n var yAverage = jMatY.mean();\n compile.anova.residuals = jStat.residuals(jMatY, jMatYBar);\n\n compile.anova.ssr = jStat.ssr(jMatYBar, yAverage);\n compile.anova.msr = compile.anova.ssr / (jMatX[0].length - 1);\n\n compile.anova.sse = jStat.sse(jMatY, jMatYBar);\n compile.anova.mse =\n compile.anova.sse / (jMatY.length - (jMatX[0].length - 1) - 1);\n\n compile.anova.sst = jStat.sst(jMatY, yAverage);\n compile.anova.mst = compile.anova.sst / (jMatY.length - 1);\n\n compile.anova.r2 = 1 - (compile.anova.sse / compile.anova.sst);\n if (compile.anova.r2 < 0) compile.anova.r2 = 0;\n\n compile.anova.fratio = compile.anova.msr / compile.anova.mse;\n compile.anova.pvalue =\n jStat.anovaftest(compile.anova.fratio,\n jMatX[0].length - 1,\n jMatY.length - (jMatX[0].length - 1) - 1);\n\n compile.anova.rmse = Math.sqrt(compile.anova.mse);\n\n compile.anova.r2adj = 1 - (compile.anova.mse / compile.anova.mst);\n if (compile.anova.r2adj < 0) compile.anova.r2adj = 0;\n\n compile.stats = new Array(jMatX[0].length);\n var covar = jStat.xtranspxinv(jMatX);\n var sds, ts, ps;\n\n for(var i=0; i<beta.length;i++){\n sds=Math.sqrt(compile.anova.mse * Math.abs(covar[i][i]));\n ts= Math.abs(beta[i] / sds);\n ps= jStat.ttest(ts, jMatY.length - jMatX[0].length - 1, sides);\n\n compile.stats[i]=[beta[i], sds, ts, ps];\n }\n\n compile.regress = beta;\n return compile;\n },\n\n xtranspx: function xtranspx(jMatX){\n return jStat.matrixmult(jMatX.transpose(),jMatX);\n },\n\n\n xtranspxinv: function xtranspxinv(jMatX){\n var inner = jStat.matrixmult(jMatX.transpose(),jMatX);\n var innerinv = jStat.inv(inner);\n return innerinv;\n },\n\n jMatYBar: function jMatYBar(jMatX, beta) {\n var yBar = jStat.matrixmult(jMatX, beta);\n return new jStat(yBar);\n },\n\n residuals: function residuals(jMatY, jMatYBar) {\n return jStat.matrixsubtract(jMatY, jMatYBar);\n },\n\n ssr: function ssr(jMatYBar, yAverage) {\n var ssr = 0;\n for(var i = 0; i < jMatYBar.length; i++) {\n ssr += Math.pow(jMatYBar[i] - yAverage, 2);\n }\n return ssr;\n },\n\n sse: function sse(jMatY, jMatYBar) {\n var sse = 0;\n for(var i = 0; i < jMatY.length; i++) {\n sse += Math.pow(jMatY[i] - jMatYBar[i], 2);\n }\n return sse;\n },\n\n sst: function sst(jMatY, yAverage) {\n var sst = 0;\n for(var i = 0; i < jMatY.length; i++) {\n sst += Math.pow(jMatY[i] - yAverage, 2);\n }\n return sst;\n },\n\n matrixsubtract: function matrixsubtract(A,B){\n var ans = new Array(A.length);\n for(var i=0;i<A.length;i++){\n ans[i] = new Array(A[i].length);\n for(var j=0;j<A[i].length;j++){\n ans[i][j]=A[i][j]-B[i][j];\n }\n }\n return jStat(ans);\n }\n});\n // Make it compatible with previous version.\n jStat.jStat = jStat;\n\n return jStat;\n});\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n]\n\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n","'use strict';\n\n/**\n * A typeahead component for inputs\n * @class Suggestions\n *\n * @param {HTMLInputElement} el A valid HTML input element\n * @param {Array} data An array of data used for results\n * @param {Object} options\n * @param {Number} [options.limit=5] Max number of results to display in the auto suggest list.\n * @param {Number} [options.minLength=2] Number of characters typed into an input to trigger suggestions.\n * @param {Boolean} [options.hideOnBlur=true] If `true`, hides the suggestions when focus is lost.\n * @return {Suggestions} `this`\n * @example\n * // in the browser\n * var input = document.querySelector('input');\n * var data = [\n * 'Roy Eldridge',\n * 'Roy Hargrove',\n * 'Rex Stewart'\n * ];\n *\n * new Suggestions(input, data);\n *\n * // with options\n * var input = document.querySelector('input');\n * var data = [{\n * name: 'Roy Eldridge',\n * year: 1911\n * }, {\n * name: 'Roy Hargrove',\n * year: 1969\n * }, {\n * name: 'Rex Stewart',\n * year: 1907\n * }];\n *\n * var typeahead = new Suggestions(input, data, {\n * filter: false, // Disable filtering\n * minLength: 3, // Number of characters typed into an input to trigger suggestions.\n * limit: 3, // Max number of results to display.\n * hideOnBlur: false // Don't hide results when input loses focus\n * });\n *\n * // As we're passing an object of an arrays as data, override\n * // `getItemValue` by specifying the specific property to search on.\n * typeahead.getItemValue = function(item) { return item.name };\n *\n * input.addEventListener('change', function() {\n * console.log(typeahead.selected); // Current selected item.\n * });\n *\n * // With browserify\n * var Suggestions = require('suggestions');\n *\n * new Suggestions(input, data);\n */\nvar Suggestions = require('./src/suggestions');\nmodule.exports = Suggestions;\n\nif (typeof window !== 'undefined') {\n window.Suggestions = Suggestions;\n}\n","'use strict';\n\nvar List = function(component) {\n this.component = component;\n this.items = [];\n this.active = 0;\n this.wrapper = document.createElement('div');\n this.wrapper.className = 'suggestions-wrapper';\n this.element = document.createElement('ul');\n this.element.className = 'suggestions';\n this.wrapper.appendChild(this.element);\n\n // selectingListItem is set to true in the time between the mousedown and mouseup when clicking an item in the list\n // mousedown on a list item will cause the input to blur which normally hides the list, so this flag is used to keep\n // the list open until the mouseup\n this.selectingListItem = false;\n\n component.el.parentNode.insertBefore(this.wrapper, component.el.nextSibling);\n return this;\n};\n\nList.prototype.show = function() {\n this.element.style.display = 'block';\n};\n\nList.prototype.hide = function() {\n this.element.style.display = 'none';\n};\n\nList.prototype.add = function(item) {\n this.items.push(item);\n};\n\nList.prototype.clear = function() {\n this.items = [];\n this.active = 0;\n};\n\nList.prototype.isEmpty = function() {\n return !this.items.length;\n};\n\nList.prototype.isVisible = function() {\n return this.element.style.display === 'block';\n};\n\nList.prototype.draw = function() {\n this.element.innerHTML = '';\n\n if (this.items.length === 0) {\n this.hide();\n return;\n }\n\n for (var i = 0; i < this.items.length; i++) {\n this.drawItem(this.items[i], this.active === i);\n }\n\n this.show();\n};\n\nList.prototype.drawItem = function(item, active) {\n var li = document.createElement('li'),\n a = document.createElement('a');\n\n if (active) li.className += ' active';\n\n a.innerHTML = item.string;\n\n li.appendChild(a);\n this.element.appendChild(li);\n\n li.addEventListener('mousedown', function() {\n this.selectingListItem = true;\n }.bind(this));\n\n li.addEventListener('mouseup', function() {\n this.handleMouseUp.call(this, item);\n }.bind(this));\n};\n\nList.prototype.handleMouseUp = function(item) {\n this.selectingListItem = false;\n this.component.value(item.original);\n this.clear();\n this.draw();\n};\n\nList.prototype.move = function(index) {\n this.active = index;\n this.draw();\n};\n\nList.prototype.previous = function() {\n this.move(this.active === 0 ? this.items.length - 1 : this.active - 1);\n};\n\nList.prototype.next = function() {\n this.move(this.active === this.items.length - 1 ? 0 : this.active + 1);\n};\n\nList.prototype.drawError = function(msg){\n var li = document.createElement('li');\n\n li.innerHTML = msg;\n\n this.element.appendChild(li);\n this.show();\n}\n\nmodule.exports = List;\n","'use strict';\n\nvar extend = require('xtend');\nvar fuzzy = require('fuzzy');\nvar List = require('./list');\n\nvar Suggestions = function(el, data, options) {\n options = options || {};\n\n this.options = extend({\n minLength: 2,\n limit: 5,\n filter: true,\n hideOnBlur: true\n }, options);\n\n this.el = el;\n this.data = data || [];\n this.list = new List(this);\n\n this.query = '';\n this.selected = null;\n\n this.list.draw();\n\n this.el.addEventListener('keyup', function(e) {\n this.handleKeyUp(e.keyCode);\n }.bind(this), false);\n\n this.el.addEventListener('keydown', function(e) {\n this.handleKeyDown(e);\n }.bind(this));\n\n this.el.addEventListener('focus', function() {\n this.handleFocus();\n }.bind(this));\n\n this.el.addEventListener('blur', function() {\n this.handleBlur();\n }.bind(this));\n\n this.el.addEventListener('paste', function(e) {\n this.handlePaste(e);\n }.bind(this));\n\n // use user-provided render function if given, otherwise just use the default\n this.render = (this.options.render) ? this.options.render.bind(this) : this.render.bind(this)\n\n this.getItemValue = (this.options.getItemValue) ? this.options.getItemValue.bind(this) : this.getItemValue.bind(this);\n\n return this;\n};\n\nSuggestions.prototype.handleKeyUp = function(keyCode) {\n // 40 - DOWN\n // 38 - UP\n // 27 - ESC\n // 13 - ENTER\n // 9 - TAB\n\n if (keyCode === 40 ||\n keyCode === 38 ||\n keyCode === 27 ||\n keyCode === 13 ||\n keyCode === 9) return;\n\n this.handleInputChange(this.el.value);\n};\n\nSuggestions.prototype.handleKeyDown = function(e) {\n switch (e.keyCode) {\n case 13: // ENTER\n case 9: // TAB\n if (!this.list.isEmpty()) {\n if (this.list.isVisible()) {\n e.preventDefault();\n }\n this.value(this.list.items[this.list.active].original);\n this.list.hide();\n }\n break;\n case 27: // ESC\n if (!this.list.isEmpty()) this.list.hide();\n break;\n case 38: // UP\n this.list.previous();\n break;\n case 40: // DOWN\n this.list.next();\n break;\n }\n};\n\nSuggestions.prototype.handleBlur = function() {\n if (!this.list.selectingListItem && this.options.hideOnBlur) {\n this.list.hide();\n }\n};\n\nSuggestions.prototype.handlePaste = function(e) {\n if (e.clipboardData) {\n this.handleInputChange(e.clipboardData.getData('Text'));\n } else {\n var self = this;\n setTimeout(function () {\n self.handleInputChange(e.target.value);\n }, 100);\n }\n};\n\nSuggestions.prototype.handleInputChange = function(query) {\n this.query = this.normalize(query);\n\n this.list.clear();\n\n if (this.query.length < this.options.minLength) {\n this.list.draw();\n return;\n }\n\n this.getCandidates(function(data) {\n for (var i = 0; i < data.length; i++) {\n this.list.add(data[i]);\n if (i === (this.options.limit - 1)) break;\n }\n this.list.draw();\n }.bind(this));\n};\n\nSuggestions.prototype.handleFocus = function() {\n if (!this.list.isEmpty()) this.list.show();\n this.list.selectingListItem = false;\n};\n\n/**\n * Update data previously passed\n *\n * @param {Array} revisedData\n */\nSuggestions.prototype.update = function(revisedData) {\n this.data = revisedData;\n this.handleKeyUp();\n};\n\n/**\n * Clears data\n */\nSuggestions.prototype.clear = function() {\n this.data = [];\n this.list.clear();\n};\n\n/**\n * Normalize the results list and input value for matching\n *\n * @param {String} value\n * @return {String}\n */\nSuggestions.prototype.normalize = function(value) {\n value = value.toLowerCase();\n return value;\n};\n\n/**\n * Evaluates whether an array item qualifies as a match with the current query\n *\n * @param {String} candidate a possible item from the array passed\n * @param {String} query the current query\n * @return {Boolean}\n */\nSuggestions.prototype.match = function(candidate, query) {\n return candidate.indexOf(query) > -1;\n};\n\nSuggestions.prototype.value = function(value) {\n this.selected = value;\n this.el.value = this.getItemValue(value);\n\n if (document.createEvent) {\n var e = document.createEvent('HTMLEvents');\n e.initEvent('change', true, false);\n this.el.dispatchEvent(e);\n } else {\n this.el.fireEvent('onchange');\n }\n};\n\nSuggestions.prototype.getCandidates = function(callback) {\n var options = {\n pre: '<strong>',\n post: '</strong>',\n extract: function(d) { return this.getItemValue(d); }.bind(this)\n };\n var results;\n if(this.options.filter){\n results = fuzzy.filter(this.query, this.data, options);\n\n results = results.map(function(item){\n return {\n original: item.original,\n string: this.render(item.original, item.string)\n };\n }.bind(this))\n }else{\n results = this.data.map(function(d) {\n var renderedString = this.render(d);\n return {\n original: d,\n string: renderedString\n };\n }.bind(this));\n }\n callback(results);\n};\n\n/**\n * For a given item in the data array, return what should be used as the candidate string\n *\n * @param {Object|String} item an item from the data array\n * @return {String} item\n */\nSuggestions.prototype.getItemValue = function(item) {\n return item;\n};\n\n/**\n * For a given item in the data array, return a string of html that should be rendered in the dropdown\n * @param {Object|String} item an item from the data array\n * @param {String} sourceFormatting a string that has pre-formatted html that should be passed directly through the render function \n * @return {String} html\n */\nSuggestions.prototype.render = function(item, sourceFormatting) {\n if (sourceFormatting){\n // use existing formatting on the source string\n return sourceFormatting;\n }\n var boldString = (item.original) ? this.getItemValue(item.original) : this.getItemValue(item);\n var indexString = this.normalize(boldString);\n var indexOfQuery = indexString.lastIndexOf(this.query);\n while (indexOfQuery > -1) {\n var endIndexOfQuery = indexOfQuery + this.query.length;\n boldString = boldString.slice(0, indexOfQuery) + '<strong>' + boldString.slice(indexOfQuery, endIndexOfQuery) + '</strong>' + boldString.slice(endIndexOfQuery);\n indexOfQuery = indexString.slice(0, indexOfQuery).lastIndexOf(this.query);\n }\n return boldString\n}\n\n/**\n * Render an custom error message in the suggestions list\n * @param {String} msg An html string to render as an error message\n */\nSuggestions.prototype.renderError = function(msg){\n this.list.drawError(msg);\n}\n\nmodule.exports = Suggestions;\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/uuidjs/uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n if (node == null || clockseq == null) {\n var seedBytes = rng();\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [\n seedBytes[0] | 0x01,\n seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n ];\n }\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n }\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;"],"names":["categories","require","c","category","f","exports","utils","errors","mathTrig","statistical","engineering","dateTime","set","fn","root","i","BETADIST","BETA","DIST","BETAINV","INV","BINOMDIST","BINOM","CEILING","ISOCEILING","MATH","CEILINGMATH","CEILINGPRECISE","PRECISE","CHIDIST","CHISQ","CHIDISTRT","RT","CHIINV","CHIINVRT","CHITEST","TEST","CONFIDENCE","NORM","COVAR","COVARIANCE","P","COVARIANCEP","COVARIANCES","S","CRITBINOM","EXPONDIST","EXPON","ERFCPRECISE","ERFC","ERFPRECISE","ERF","FDIST","F","FDISTRT","FINVRT","FINV","FLOOR","FLOORMATH","FLOORPRECISE","FTEST","GAMMADIST","GAMMA","GAMMAINV","GAMMALNPRECISE","GAMMALN","HYPGEOMDIST","HYPGEOM","LOGINV","LOGNORM","LOGNORMINV","LOGNORMDIST","MODE","SNGL","MODEMULT","MULT","MODESNGL","NEGBINOMDIST","NEGBINOM","NETWORKDAYSINTL","NETWORKDAYS","INTL","NORMDIST","NORMINV","NORMSDIST","NORMSINV","PERCENTILE","EXC","PERCENTILEEXC","PERCENTILEINC","INC","PERCENTRANK","PERCENTRANKEXC","PERCENTRANKINC","POISSON","POISSONDIST","QUARTILE","QUARTILEEXC","QUARTILEINC","RANK","EQ","RANKAVG","AVG","RANKEQ","SKEWP","SKEW","STDEV","STDEVP","STDEVS","TDIST","T","TDISTRT","TINV","TTEST","VAR","VARP","VARS","WEIBULL","WEIBULLDIST","WORKDAYINTL","WORKDAY","ZTEST","Z","error","stats","maths","evalExpression","compact","array","result","arrayEach","value","push","findResultIndex","database","criterias","matches","length","maxCriteriaLength","k","l","currentCriteriaResult","hasMatchingCriteria","j","criteria","criteriaField","p","tokenizedCriteria","parse","tokens","createToken","TOKEN_TYPE_LITERAL","concat","compute","n","FINDFIELD","title","index","DAVERAGE","field","isNaN","resultIndexes","targetFields","rest","sum","div0","DCOUNT","targetValues","COUNT","DCOUNTA","COUNTA","DGET","num","DMAX","maxValue","DMIN","minValue","DPRODUCT","DSTDEV","DSTDEVP","DSUM","SUM","DVAR","DVARP","d1900","Date","UTC","WEEK_STARTS","undefined","WEEK_TYPES","WEEKEND_TYPES","startOfDay","date","newDate","setHours","isLeapYear","year","getMonth","daysBetween","start_date","end_date","Math","ceil","serial","addOn","DATE","month","day","parseNumber","anyIsError","getFullYear","DATEDIF","unit","toUpperCase","parseDate","start_date_year","start_date_month","start_date_day","getDate","end_date_year","end_date_month","end_date_day","floor","YEARFRAC","DAYS","setFullYear","setMonth","DATEVALUE","date_text","DAY","serial_number","Error","DAYS360","method","parseBool","sd","ed","sm","em","smd","emd","EDATE","months","parseInt","EOMONTH","HOUR","getHours","INTERVAL","second","hour","min","sec","ISOWEEKNUM","setDate","getDay","yearStart","MINUTE","getMinutes","MONTH","holidays","this","weekend","isMask","maskDays","maskIndex","maskRegex","RegExp","test","split","Array","h","days","round","total","d","getTimezoneOffset","getUTCDay","dec","includes","holiday","NOW","SECOND","getSeconds","TIME","minute","TIMEVALUE","time_text","TODAY","WEEKDAY","return_type","WEEKNUM","week_start","jan","inc","abs","YEAR","basis","sy","ey","ylength","date1","date2","year1","mar1year1","year2","mar1year2","feb29Between","years","average","jStat","text","bessel","isValidBinaryNumber","number","BESSELI","x","besseli","BESSELJ","besselj","BESSELK","besselk","BESSELY","bessely","BIN2DEC","stringified","toString","substring","BIN2HEX","places","REPT","BIN2OCT","BITAND","number1","number2","BITLSHIFT","shift","BITOR","BITRSHIFT","BITXOR","COMPLEX","real","imaginary","suffix","sign","CONVERT","from_unit","to_unit","alt","units","binary_prefixes","Yi","Zi","Ei","Pi","Ti","Gi","Mi","ki","unit_prefixes","Y","E","G","M","e","m","u","a","z","y","from","to","base_from_unit","base_to_unit","from_multiplier","to_multiplier","indexOf","from_binary_prefix","from_unit_prefix","to_binary_prefix","to_unit_prefix","na","DEC2BIN","DEC2HEX","DEC2OCT","DELTA","lower_bound","upper_bound","erf","erfc","GESTEP","step","HEX2BIN","negative","toLowerCase","decimal","HEX2DEC","HEX2OCT","IMABS","inumber","IMREAL","IMAGINARY","sqrt","pow","plus","replace","minus","last","Number","IMARGUMENT","PI","atan","IMCONJUGATE","IMCOS","cos","exp","sin","IMCOSH","IMCOT","IMDIV","IMSIN","inumber1","inumber2","b","unit1","unit2","den","IMEXP","IMLN","log","IMLOG10","IMLOG2","IMPOWER","t","IMPRODUCT","arguments","IMSEC","IMSECH","IMSINH","IMSQRT","s","IMCSC","IMCSCH","IMSUB","IMSUM","args","flatten","IMTAN","OCT2BIN","OCT2DEC","OCT2HEX","validDate","getTime","ensureDate","ACCRINT","issue","first","settlement","rate","par","frequency","ACCRINTM","AMORDEGRC","AMORLINC","COUPDAYBS","COUPDAYS","COUPDAYSNC","COUPNCD","COUPNUM","COUPPCD","CUMIPMT","periods","start","end","type","payment","PMT","interest","FV","CUMPRINC","principal","DB","cost","salvage","life","period","toFixed","initial","current","ceiling","DDB","factor","DISC","DOLLARDE","dollar","fraction","LN10","power","LN2","DOLLARFR","DURATION","EFFECT","term","FVSCHEDULE","schedule","parseNumberArray","future","INTRATE","IPMT","present","IRR","values","guess","irrResult","dates","r","irrResultDeriv","frac","positive","newRate","epsRate","resultValue","resultRate","contLoop","ISPMT","MDURATION","MIRR","finance_rate","reinvest_rate","payments","incomes","NPV","NOMINAL","NPER","ODDFPRICE","ODDFYIELD","ODDLPRICE","ODDLYIELD","PDURATION","PPMT","PRICE","PRICEDISC","PRICEMAT","PV","RATE","epsMax","dy","df","RECEIVED","RRI","SLN","SYD","TBILLEQ","maturity","discount","TBILLPRICE","TBILLYIELD","price","VDB","XIRR","parseDateArray","XNPV","YIELD","YIELDDISC","YIELDMAT","CELL","ERROR","TYPE","error_val","nil","ref","name","data","INFO","ISBLANK","ISBINARY","ISERR","isFinite","ISERROR","ISEVEN","ISFORMULA","ISLOGICAL","ISNA","ISNONTEXT","ISNUMBER","ISODD","ISREF","ISTEXT","N","NA","SHEET","SHEETS","isArray","information","AND","CHOOSE","FALSE","IF","then_value","otherwise_value","IFS","IFERROR","valueIfError","IFNA","value_if_na","NOT","logical","OR","TRUE","XOR","SWITCH","targetValue","argc","switchCount","switchSatisfied","hasDefaultClause","defaultClause","MATCH","lookupValue","lookupArray","matchType","indexValue","idx","match","VLOOKUP","needle","table","rangeLookup","isNumberLookup","exactMatchOnly","row","localeCompare","HLOOKUP","transpose","LOOKUP","searchCriterion","resultArray","INDEX","cellRange","rowNumber","columnNumber","someError","anyError","isOneDimensionRange","ABS","ACOS","acos","ACOSH","ACOT","ACOTH","AGGREGATE","function_num","options","ref1","ref2","AVERAGE","MAX","MIN","PRODUCT","MEDIAN","LARGE","SMALL","ARABIC","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I","ASIN","asin","ASINH","ATAN","ATAN2","number_x","number_y","atan2","ATANH","BASE","radix","min_length","max","join","significance","mode","precision","ROUND","COMBIN","number_chosen","FACT","COMBINA","COS","COSH","COT","tan","COTH","e2","CSC","CSCH","DECIMAL","DEGREES","EVEN","EXP","MEMOIZED_FACT","FACTDOUBLE","GCD","range","r0","ri","INT","ISO","LCM","o","pop","splice","LN","LOG10E","LOG2E","LOG","base","LOG10","MOD","dividend","divisor","modulus","MROUND","multiple","MULTINOMIAL","ODD","temp","POWER","flatArgumentsDefined","filter","arg","QUOTIENT","numerator","denominator","RADIANS","RAND","random","RANDBETWEEN","bottom","top","ROMAN","digits","String","key","roman","ROUNDDOWN","ROUNDUP","SEC","SECH","SERIESSUM","coefficients","SIGN","SIN","SINH","SQRT","SQRTPI","SQRT1_2","SQRT2","SUBTOTAL","function_code","ADD","num1","num2","MINUS","DIVIDE","MULTIPLY","factor1","factor2","GT","anyIsString","parseString","GTE","LT","LTE","value1","value2","NE","POW","exponent","argsToArray","parsed","parseFloat","inner_result","apply","SUMIF","sumRange","isWildcard","sumValue","SUMIFS","criteriaLength","isMeetCondition","valueToTest","computedResult","SUMPRODUCT","product","_i","_ij","arrays","_ij_arg","_i_arg","SUMSQ","numbers","SUMX2MY2","array_x","array_y","SUMX2PY2","SUMXMY2","TAN","TANH","TRUNC","UNIQUE","hasElement","element","FLATTEN","ARGS2ARRAY","prototype","slice","call","REFERENCE","context","reference","path","opening","JOIN","separator","NUMBERS","el","misc","AVEDEV","isDefined","subtract","mean","count","AVERAGEA","AVERAGEIF","average_range","flatAverageRangeDefined","average_count","AVERAGEIFS","alpha","beta","cumulative","A","B","cdf","pdf","probability","inv","successes","trials","binomial","RANGE","successes2","chisquare","observed","expected","tmp","col","dof","xsqr","ChiSq","COLUMN","matrix","COLUMNS","cols","normalci","tci","CORREL","array1","array2","corrcoeff","flatArguments","COUNTBLANK","COUNTIN","blanks","COUNTIF","COUNTIFS","results","COUNTUNIQUE","mean1","mean2","covariance","DEVSQ","lambda","exponential","d1","d2","centralF","sumOfSquares","x1","x2","FISHER","FISHERINV","e2y","FORECAST","data_y","data_x","xmean","ymean","FREQUENCY","bins","gammafn","gamma","gammaln","GAUSS","normal","GEOMEAN","geomean","GROWTH","known_y","known_x","new_x","use_const","avg_x","avg_y","avg_xy","avg_xx","new_y","HARMEAN","INTERCEPT","KURT","sigma","stdev","sort","LINEST","LOGEST","lognormal","MAXA","arrayValuesToNumbers","map","median","MINA","currentItem","maxItems","negbin","PEARSON","den1","den2","fl","cleanFloat","uniques","PERMUT","PERMUTATIONA","PHI","poisson","PROB","lower","upper","sorted","quart","order","ROW","ROWS","rows","RSQ","m2","m3","SLOPE","STANDARDIZE","v","STDEVA","VARA","STDEVPA","VARPA","STEYX","lft","TRANSPOSE","tails","studentt","mean_x","mean_y","s_x","s_y","TREND","new_data_x","linest","forEach","TRIMMEAN","percent","trim","ASC","BAHTTEXT","CHAR","fromCharCode","CLEAN","CODE","charCodeAt","CONCATENATE","trueFound","falseFound","CONCAT","DBCS","DOLLAR","EXACT","text1","text2","FIND","find_text","within_text","position","found_index","FIXED","HTML2TEXT","line","LEFT","LEN","LOWER","MID","begin","NUMBERVALUE","decimal_separator","group_separator","PRONETIC","PROPER","txt","charAt","substr","REGEXEXTRACT","regular_expression","REGEXMATCH","full","REGEXREPLACE","replacement","REPLACE","new_text","RIGHT","SEARCH","foundAt","SPLIT","SUBSTITUTE","old_text","occurrence","TEXT","TRIM","UNICHAR","UNICODE","UPPER","VALUE","isPercent","output","flattenShallow","reduce","aIsArray","bIsArray","isFlat","bool","up","string","arr","len","parseMatrix","pnarr","utc_days","date_info","fractional_day","total_seconds","seconds","hours","minutes","serialNumberToDate","iteratee","validSymbols","TOKEN_TYPE_OPERATOR","SUPPORTED_TOKENS","analyzeTokens","literalValue","analyzedTokens","token","unshift","expression","expressionLength","cursorIndex","processedValue","processedSymbol","char","tokenizeExpression","operator","evaluate","isPlainObject","xtend","DEFAULT_ERROR_PATH","NEWLINE_INDENT","createArrayValidator","validators","validatingTuple","validationResult","validate","plainArray","validator","hasOwnProperty","processMessage","message","formatErrorMessage","nounPhrase","addArticle","prettifyResult","prettyResult","isArrayCulprit","assert","rootValidator","errorMessage","apiName","shape","validatorObj","obj","Object","keys","plainObject","errorMessages","objectId","strictShape","shapeValidator","shapeResult","invalidKeys","memo","valueKey","arrayOf","tuple","required","requiredValidator","__required","oneOfType","messages","Boolean","every","list","orList","equal","compareWith","JSON","stringify","oneOf","any","boolean","func","module","shajs","MapboxEventManager","origin","endpoint","access_token","accessToken","version","sessionID","generateSessionID","userAgent","getUserAgent","countries","types","bbox","language","limit","locale","navigator","enableEventLogging","shouldEnableLogging","lastSentInput","lastSentIndex","select","selected","geocoder","callback","resultIndex","getSelectedIndex","payload","getEventPayload","queryString","send","getRequestOptions","request","err","handleError","host","headers","body","event","proximity","longitude","latitude","zoom","_map","getZoom","created","sessionIdentifier","country","inputString","mapZoom","keyboardLocale","opts","xhttp","XMLHttpRequest","header","onreadystatechange","readyState","status","statusText","open","headerValue","setRequestHeader","sha256","update","digest","_typeahead","selectedID","id","feature","localGeocoder","geocoderService","Typeahead","debounce","extend","EventEmitter","exceptions","MapboxClient","mbxGeocoder","MapboxGeocoder","_eventEmitter","fresh","placeholder","flyTo","trackProximity","minLength","reverseGeocode","onAdd","eventManager","_onChange","bind","_onKeyDown","_onQueryResult","_clear","_updateProximity","container","document","createElement","className","icon","_inputEl","addEventListener","actions","classList","add","_clearEl","setAttribute","_loadingEl","appendChild","getItemValue","item","place_name","on","onRemove","parentNode","removeChild","off","target","shadowRoot","activeElement","style","display","metaKey","keyCode","_geocode","fitBounds","center","emit","searchInput","query","self","config","coords","reverse","forwardGeocode","localGeocoderRes","then","response","res","statusCode","features","catch","ev","preventDefault","clear","focus","getCenter","wrap","setProximity","lng","lat","setInput","getProximity","removeListener","client","browser","MapiClient","BrowserClient","create","constructor","sendRequest","browserSend","abortRequest","browserAbort","MapiResponse","MapiError","constants","parseHeaders","requestsUnderway","normalizeBrowserProgressEvent","transferred","loaded","sendRequestXhr","xhr","Promise","resolve","reject","onprogress","emitter","EVENT_PROGRESS_DOWNLOAD","file","upload","EVENT_PROGRESS_UPLOAD","onerror","onabort","mapiError","ERROR_REQUEST_ABORTED","onload","getAllResponseHeaders","createResponse","createRequestXhr","url","window","abort","parseToken","MapiRequest","API_ORIGIN","createRequest","requestOptions","errorType","ERROR_HTTP","urlUtils","requestId","defaultHeaders","headersWithDefaults","_options","sent","aborted","params","prependOrigin","appendQueryObject","routeParams","appendQueryParam","accessTokenOwnerId","user","ownerId","interpolateRouteParams","EVENT_RESPONSE","EVENT_ERROR","_nextPageRequest","eachPage","handleResponse","nextPageRequest","nextPage","getPage","clone","_extend","extendedOptions","parseLinkHeader","responseData","rawBody","parseError","links","link","hasNextPage","next","raw","rawHeader","boundary","parseSingleHeader","linkHeader","parts","linkUrl","linkParams","rel","parsedLinkParams","param","parseParam","parseLink","encodeValue","encodeURIComponent","punctuation","queryObject","delimiter","route","_","paramId","pick","stringifyBooleans","createServiceFactory","Geocoding","featureTypes","assertShape","coordinates","autocomplete","reverseMode","createClient","ServicePrototype","clientOrConfig","isPrototypeOf","service","cb","source","val","objectMap","global","Blob","ArrayBuffer","pipe","msg","base64","tokenCache","has","usage","rawPayload","parsedPayload","decode","parsePaylod","authorization","expires","iat","scopes","lastLogin","ll","impersonator","iu","freeExports","freeGlobal","InvalidCharacterError","TABLE","REGEX_SPACE_CHARACTERS","input","buffer","padding","bitStorage","bitCounter","define","factory","BESSEL","_horner","_bessel_iter","f0","f1","tdx","f2","_bessel_wrap","bessel0","bessel1","nonzero","Infinity","NaN","W","b0_a1a","b0_a2a","b0_a1b","b0_a2b","a1","a2","xx","b1_a1a","b1_a2a","b1_a1b","b1_a2b","ret","jsum","bjp","bj","bjm","tox","b0_a","b0_b","b1_a","b1_b","bip","bi","bim","DO_NOT_EXPORT_BESSEL","prefix","Events","EE","once","addListener","TypeError","listener","evt","_events","_eventsCount","clearEvent","__proto__","eventNames","events","names","getOwnPropertySymbols","listeners","handlers","ee","listenerCount","a3","a4","a5","removeAllListeners","prefixed","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","Function","ownKeys","getOwnPropertyNames","NumberIsNaN","init","errorListener","resolver","eventTargetAgnosticAddListener","handler","flags","addErrorHandlerIfEventEmitter","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","that","_addListener","prepend","existing","warning","newListener","warned","w","console","warn","onceWrapper","fired","wrapFn","_onceWrap","state","wrapped","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","copy","wrapListener","removeEventListener","defineProperty","enumerable","get","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","prependListener","prependOnceListener","originalListener","spliceOne","rawListeners","FormulaError","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","parser","trace","yy","symbols_","terminals_","productions_","performAction","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","trimEdges","operate","opposite","oppositeNumber","asNumber","checkFunctionExistence","callFunction","tab","throwFormulaError","defaultActions","str","hash","recoverable","stack","vstack","lstack","recovering","lexer","sharedState","yylloc","yyloc","ranges","symbol","preErrorSymbol","action","newState","lex","yyval","error_rule_depth","errStr","locateNearestErrorRecoveryRule","stack_probe","depth","showPosition","loc","first_line","last_line","first_column","last_column","EOF","_input","_more","_backtrack","done","matched","conditionStack","offset","ch","unput","lines","oldLines","more","backtrack_lexer","less","pastInput","past","upcomingInput","pre","test_match","indexed_rule","backup","tempMatch","rules","_currentRules","flex","condition","popState","conditions","topState","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","Parser","concatenate","excelComparisonTypePriority","excelifyComparison","javascriptComparisonFunction","typeOfA","typeOfB","Operator","javascriptGreaterThan","excelGreaterThan","javascriptGreaterThanOrEqual","excelGreaterThanOrEqual","javascriptLessThan","excelLessThan","excelLessThanOrEqual","notEqual","safeOperators","PLUS","_a","TIMES","DIVIDED_BY","DIV_ZERO","EQUAL","NOT_EQUAL","GREATER_THAN","GREATER_THAN_OR_EQUAL","LESS_THAN","LESS_THAN_OR_EQUAL","javascriptOperators","_b","operateExcely","firstOperand","secondOperand","operateJavascriptly","defaultOptions","operators","functions","userOptions","grammarParser","GrammarParser","functionName","NAME","formula","fuzzy","simpleFilter","pattern","patternIdx","totalScore","currScore","post","compareString","caseSensitive","rendered","score","prev","extract","original","compare","navClass","contentClass","nested","nestedClass","reflow","settings","CustomEvent","bubbles","cancelable","detail","dispatchEvent","offsetParent","offsetTop","content","getBoundingClientRect","innerHeight","documentElement","clientHeight","pageYOffset","scrollHeight","offsetHeight","closest","remove","nav","querySelectorAll","getElementById","decodeURIComponent","cancelAnimationFrame","requestAnimationFrame","detect","destroy","setup","ctor","superCtor","super_","writable","configurable","TempCtor","calcRdx","isFunction","isNumber","toVector","_init","retZero","retOne","retIdent","seq","toArray","_random_fn","setRandom","dimensions","rowa","submat","arange","ind","column","cola","diag","nrow","antidiag","objArr","toAlter","ncol","cumreduce","alter","zeros","ones","rand","identity","symmetric","size","cnt","hival","rl","_slice","rcSlice","colSlice","rowSlice","sliceAssign","nl","ml","diagonal","diagArray","mat","jProto","funcs","passfunc","setTimeout","ascNum","clip","sumsqrd","sumsqerr","sumrow","prod","low","high","unique","_arr","meansqerr","arrlen","cumsum","cumprod","diff","diffs","arrLen","rank","distinctNumbers","numberCounts","sortedDistinctNumbers","numberRanks","currentRank","maxCount","numMaxCount","mode_arr","variance","flag","pooledvariance","samples","deviation","dev","pooledstdev","meandev","meddev","coeffvar","quartiles","quantiles","quantilesArray","alphap","betap","aleph","sortedArray","quantileVals","percentile","exclusive","realIndex","percentileOfScore","kind","counter","strict","histogram","binCnt","binWidth","arr1","arr2","arr1Len","sq_dev","spearmancoeff","stanMoment","mu","skewSum","skewness","kurtosis","fullbool","tmpthis","callbackFunction","argsToPass","curriedFunction","vector","cof","ser","loggam","x0","xp","gl","gl0","yi","q","fact","xden","xnum","gammap","lowRegGamma","an","aln","ap","del","ITMAX","factorialln","factorial","combination","combinationln","permutation","betafn","betaln","betacf","aa","fpmin","qab","qap","qam","gammapinv","pp","lna1","afac","EPS","gln","ty","isneg","dd","erfcinv","ibetainv","lna","lnb","al","b1","ibeta","bt","randn","randg","oalph","betinc","eps","c9","a0","b0","m9","laplaceSign","tukeyWprob","rr","cc","nleg","ihalf","C1","C2","C3","bb","wlar","wincr1","wincr2","xleg","aleg","qsqz","wincr","pr_w","blb","binc","bub","einsum","cc1","wi","elsum","jj","ac","qexpo","rinsum","tukeyQinv","p0","q0","p1","q1","p2","q2","p3","q3","p4","q4","c1","c2","c3","c4","c5","vmax","ps","_c","newthis","sample","vals","fnfunc","df1","df2","cauchy","local","scale","invgamma","kumaraswamy","noncentralt","ncp","tol","min_iterations","flip","prob","lastvalue","std","pareto","dof2","weibull","uniform","betacdf","hypgeom","scaledPDF","samplesDone","scaledCDF","sumarr","sampleSmall","sampleLarge","U","slam","loglam","invalpha","vr","us","lam","triangular","arcsine","laplace","tukey","nmeans","nlegq","ihalfq","eps1","eps2","dhaf","dquar","deigh","dlarg","ulen1","ulen2","ulen3","ulen4","xlegq","alegq","ulen","f2lf","f21","ff4","ans","otsum","twa1","t1","maxiter","valx0","valx1","iter","isUsable","divide","multiply","nrescols","rescols","outer","dot","left","right","norm","nnorm","angle","aug","newarr","gauss_jordan","det","alen","alend","rowshift","colshift","mrow","mcol","gauss_elimination","maug","pivot","y2","maxrow","triaUpSolve","matrix_mode","triaLowSolve","lu","cholesky","gauss_jacobi","xv","xk","gauss_seidel","SOR","householder","QR","qr2","lstsq","R_I","Aj","cAi","Ij","cIi","qr_solve","array_mode","Q","attrs","Q1","RI","Q2","jacobi","maxim","theta","rungekutta","t_j","u_j","k1","k2","k3","romberg","h1","g","richardson","pos","y1","h_min","simpson","hermite","dF","dl","lagrange","cubic_spline","sq","gauss_quadrature","PCA","temp1","temp2","Bt","Vt","differenceOfProportions","n1","n2","pooled","zscore","ztest","sides","tscore","ttest","anovafscore","expVar","sampMean","sampSampMean","tmpargs","unexpVar","anovaftest","ftest","fscore","anovaftes","qscore","qtest","tukeyhsd","means","change","significant","pvalue","oneSidedDifferenceOfProportions","twoSidedDifferenceOfProportions","models","sub_regress","exog","var_count","endog_index","exog_index","ols","endog","nobs","df_model","df_resid","coef","predict","resid","ybar","SSE","SSR","SST","R2","t_test","model","subModelList","sigmaHat","seBetaHat","mod","tStatistic","pValue","leftppf","interval95","se","F_test","F_statistic","ols_wrap","adjust_R2","buildxmatrix","matrixRows","builddxmatrix","buildjxmatrix","jMat","pass","buildymatrix","buildjymatrix","matrixmult","regress","jMatX","jMatY","innerinv","xtranspxinv","xtransp","regresst","compile","jMatYBar","yBar","yAverage","anova","residuals","ssr","msr","sse","mse","sst","mst","r2","fratio","rmse","r2adj","sds","ts","covar","xtranspx","inner","matrixsubtract","Buffer","copyProps","src","dst","SafeBuffer","encodingOrOffset","alloc","allocUnsafe","allocUnsafeSlow","fill","encoding","buf","SlowBuffer","Hash","blockSize","finalSize","_block","_finalSize","_blockSize","_len","enc","block","accum","assigned","remainder","_update","rem","bits","writeUInt32BE","lowBits","highBits","_hash","algorithm","Algorithm","sha","sha1","sha224","sha384","sha512","inherits","K","Sha","_w","rotl30","ft","_d","_e","readInt32BE","H","writeInt32BE","Sha1","rotl5","Sha256","Sha224","_f","_g","_h","maj","sigma0","sigma1","gamma0","T1","T2","SHA512","Sha384","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","writeInt64BE","Sha512","Ch","xl","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","ah","bh","dh","eh","fh","gh","hh","bl","cl","hl","xh","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","Suggestions","List","component","items","active","wrapper","selectingListItem","insertBefore","nextSibling","show","hide","isEmpty","isVisible","draw","innerHTML","drawItem","li","handleMouseUp","move","previous","drawError","hideOnBlur","handleKeyUp","handleKeyDown","handleFocus","handleBlur","handlePaste","render","handleInputChange","clipboardData","getData","normalize","getCandidates","revisedData","candidate","createEvent","initEvent","fireEvent","sourceFormatting","boldString","indexString","indexOfQuery","lastIndexOf","endIndexOfQuery","renderError","v1","v4","uuid","_nodeId","_clockseq","rng","bytesToUuid","_lastMSecs","_lastNSecs","node","clockseq","seedBytes","msecs","nsecs","dt","tl","tmh","_typeof","Symbol","iterator","__esModule"],"sourceRoot":""}