{"version":3,"file":"601.f447219ab66c8571.js","mappings":"+aAEQA,MADJ,UACIA,CADG,aAKIA,MAAA,iBAAAC,GAAAD,MAAAE,GAAA,MAAAC,EAAAH,QAAA,OAAAA,MAASG,EAAAC,YAAAH,EAAAI,OAAAC,SAAkC,GAJlDN,QAQAA,MADA,cACAA,CADmC,WAOvCA,QAGQA,MAFR,UAEQA,CAFW,WAEXA,CADI,YACgBA,MAAA,GAExBA,UACAA,MAAA,gCACiDA,MAAA,sBACrDA,kCArBWA,QAEAA,MAFA,oBAAAG,EAAAI,MAEAP,CAF2B,cAAAG,EAAAK,cAAA,KAAAL,EAAAK,cAAAC,GAE3BT,CAD2B,UAAAG,EAAAG,SAM7BN,MAAA,GACAA,MADA,YAAAG,EAAAK,cAAA,KAAAL,EAAAK,cAAAE,OAAA,GACAV,CADgC,QAAAG,EAAAQ,WASbX,MAAA,GAAAA,MAAA,MAAAG,EAAAK,cAAA,KAAAL,EAAAK,cAAAI,MAInBZ,qDAA4CA,MAAA,GAAAA,YAAA,YAAAG,EAAAU,YAAA,KAAAV,EAAAU,YAAAC,uCAyByDd,MAAA,kDAAAA,MAAA,IAAAe,EAAAC,MAAAC,QAAA,aAAAF,EAAAH,MAAAM,IAAAC,EAAA,0DAnBtGnB,MADJ,UACIA,CADG,aAKIA,MAAA,iBAAAC,GAAAD,MAAAoB,GAAA,MAAAjB,EAAAH,MAAA,UAAAA,MAASG,EAAAC,YAAAH,EAAAI,OAAAC,SAAkC,GAJlDN,QAQAA,MADA,cACAA,CADmC,WAOvCA,QACAA,MAAA,cACQA,MAAA,mBAAAA,MAAAoB,GAAA,MAAAjB,EAAAH,MAAA,UAAAA,MAASG,EAAAkB,iBAAgB,GAEzBrB,MADJ,WACIA,CADI,YACgBA,MAAA,GAAkBA,QACtCA,MAAA,YAAwBA,MAAA,EAAAsB,GAAA,cAAAC,IAC5BvB,UACAA,MAAA,kCACiDA,MAAA,sBACrDA,uCAtBWA,QAEAA,MAFA,oBAAAG,EAAAI,MAEAP,CAF2B,QAAAwB,EAAAf,GAE3BT,CADoB,UAAAG,EAAAG,SAMtBN,MAAA,GACAA,MADA,MAAAwB,EAAAC,OACAzB,CADsB,QAAAG,EAAAQ,WAUHX,MAAA,GAAAA,MAAAwB,EAAAZ,MACIZ,MAAA,GAAAA,MAAAwB,EAAAE,WAGvB1B,MAAA,iDAA4CA,MAAA,GAAAA,YAAA,MAAAwB,EAAAG,kDAxBzD3B,MAAA,EAAA4B,GAAA,OA2BA5B,MAAA,6BAGAA,MAAA,sBAAAA,MAAA6B,GAAA,MAAA1B,EAAAH,QAAA,OAAAA,MAAYG,EAAAC,cAAa,GACFJ,sCA/BvBA,OAAA8B,EAAA3B,EAAA4B,UAAA,KAAAD,GA2BuB9B,QAIvBA,MAJuB,KAAAG,EAAA6B,KAIvBhC,CAJkC,eAIlCA,CAHkB,QAAAG,EAAAI,MAGlBP,CAFe,WAAAG,EAAAM,OC5BZ,IAAMwB,GAA4B,MAAnC,MAAOA,EAiBTC,YACcC,EACAC,EAEAC,EAEFC,EAEAC,EACAC,EACAC,GATEC,KAAAP,YACAO,KAAAN,UAEAM,KAAAL,cAEFK,KAAAJ,UAEAI,KAAAH,UACAG,KAAAF,OACAE,KAAAD,YA1BZC,KAAA/B,UAAY,CAAEgC,MAAS,OAAQC,IAAO,WACtCF,KAAAV,KAAOa,IAAKC,SACZJ,KAAAjC,MAAKsC,OAA0B,MAI/BL,KAAAM,kBAAoB,4BACVN,KAAAf,MAAQ,IAAIsB,MAqBlBP,KAAKM,kBAAoBE,IAAcC,oBAAsB,8BAAgC,4BAE7F,IAAIC,KAAiBC,MAASX,KAAKL,YAAYiB,UAAUC,QAAKC,MAAOC,GAAKA,EAAEhD,IAAMiC,KAAKV,OAAI,EAAG0B,MAAIC,GAAKjB,KAAKkB,UAAYD,KACxHjB,KAAKmB,YAAWR,MAASX,KAAKL,YAAYwB,SAASN,QAAKO,MAAIL,GAAKA,EAAEf,KAAKV,SAExEU,KAAKX,UAASgC,OAAS,KACnB,IAAIC,EAAOZ,IACX,GAAY,MAARY,EAGJ,OAAOA,EAAKC,mBACf,EAEDC,OAAgB,KACZ,IAAIC,EAAWzB,KAAKjC,KAChB2D,EAAMD,EAASE,KACfC,EAAYC,IAAQC,2BAA6BJ,EAAM,IAAI1B,KAAKnC,QAChEkE,EAAO,IAAIC,IAAIC,WAAWC,SAASC,MACvCnC,KAAKpC,QAAUmE,EAAKK,aAAaC,IAAIT,GACrCU,KAAWC,UAAU,CACjBxE,GAAIiC,KAAKV,KACTM,UACAC,UACA4B,aACDe,KAAKlB,IACJtB,KAAKyC,SAA6D,IAAjDnB,GAAMoB,SAAS3E,GAAG4E,MAAM,KAAK,IAAM,IAAIC,OACxD5C,KAAK7B,YAAcmD,EAAKuB,MACxB7C,KAAKlC,cAAgBwD,EAAKoB,QACrB1C,KAAKyC,UACFzC,KAAKpC,UACL6D,EAASE,KAAOD,EAAM,IAAMK,EAAKK,aAAaU,IAAIlB,IACtD5B,KAAKL,YAAYoD,YAAY,CACzBhF,GAAIiC,KAAKV,KACTM,UACAC,UACA4B,aAERzB,KAAKP,UAAUuD,cAAY,EAC9B,EAET,CAEAtF,YAAYE,EAAmBoC,KAAKpC,SAGhC,GADAoC,KAAKpC,QAAUA,EACXoC,KAAKyC,SAAU,CACf,IAAIQ,EAASpB,IAAQC,2BACjBC,EAAO,IAAIC,IAAIkB,OAAOhB,SAASC,MAC9BvE,EAGDmE,EAAKK,aAAae,IAAKF,EAASjD,KAAKjC,KAAK4D,KAAO,IAAI3B,KAAKnC,QAAU,IAFpEkE,EAAKK,aAAagB,OAAQH,EAASjD,KAAKjC,KAAK4D,KAAO,IAAI3B,KAAKnC,QAAU,IAG3EmC,KAAKf,MAAMoE,KAAKzF,EAAUoC,KAAK7B,YAAc,MAE7C,IAAImF,EAAMC,IAAeC,UAAUzB,GACnC/B,KAAKD,UAAU0D,aAAaH,GAC5BtD,KAAKN,QAAQgE,uBACb1D,KAAKP,UAAUuD,cACnB,KAAO,CACH,GAAwC,MAApChD,MAAMkB,WAAWK,gBACjB,OACA3D,IACAoC,KAAKkB,UAAUK,gBAAgBoC,WAAY,GAC/C3D,KAAK4D,OAAOC,UAAU7D,KAAKkB,WAAYtD,GACvCoC,KAAKf,MAAMoE,KAAKzF,EAAUoC,KAAKkB,UAAU4C,WAAWjB,MAAQ,KAChE,CACJ,CAEAlE,iBACI,IAAImF,EAAa9D,KAAKkB,UAAU4C,WAC5BpC,EAAMoC,EAAWpB,QAAQ3E,GAAG4E,MAAM,KAAK,GAC3C3C,KAAKL,YAAYoD,YAAY,CACzBe,WAAYA,EACZ/F,GAAIiC,KAAKV,KACTmC,SAAUzB,KAAKjC,KACf6B,QAASI,KAAKJ,QACdC,QAASG,KAAKH,QACdkE,KAAM,CAACrC,KAEX1B,KAAKF,KAAKkE,cAAcC,cAAc,UAAUC,WACpD,CAACC,SAAAnE,KAAA,mBAAAoE,iBA7GQ7E,GAA4BjC,mBAAA+G,MAAA/G,MAoBzBgH,MAAUhH,MAEViH,MAAQjH,MAERkH,MAAQlH,mBAAAmH,MAAA,EAAAN,SAAAnE,KAAA,UAAA0E,EAAAC,IAAA,MAxBXpF,EAA4BqF,UAAA,+BAAAC,UAAA,SAAAC,EAAAC,MAAA,EAAAD,SAU1BE,IAAyB,sjBDZxC1H,MA1BA,EAAA2H,GAAA,MA0BA3H,CA1Be,EAAA4H,GAAA,oCAAf5H,MAAAyH,EAAAtC,SAAA,oBCsBc0C,IAAWC,IAAAC,IAAEL,IAA2BM,IAAWC,IAAeC,MAAAC,OAAA,0zCAAAC,gBAAA,WAMnEnG,CAA4B,sLCfzBjC,MAAA,yEAEAA,MAFkB,UAAAqI,EAElBrI,CAFqC,QAAAA,MAAA,IAAAA,MAAA,EAAAsI,GAAAD,MCO9C,IAAME,GAAoB,MAA3B,MAAOA,EAST,UACIC,CAAOC,GACP/F,KAAKgG,UAAYD,EAAI3E,IAAIrD,GAAM,CAACA,IAChCkI,eAAe,IAAMjG,KAAKkG,WAAWH,EAAI3E,IAAIrD,GAAM,CAACA,KACxD,CAGAyB,YAEII,EAEQuG,EACA1G,GADAO,KAAAmG,YACAnG,KAAAP,YAERO,KAAKoG,cAAgB,IAAIC,MAAazG,GACtCI,KAAKsG,WAAaC,OAAOC,QAAQC,KAAY3D,IAAI,YAAY4D,KAAK,EAAEpD,EAAIqD,KAAqB,eAAVA,GAAwB,IAAM,QACjHnF,OAAgB,KACTS,WAAW2E,WAAa,KACvB5G,KAAK6G,UAAY,EACjBC,QAAQC,IAAI,MAAM/G,KAAK6G,YAEvB7G,KAAK6G,UAAY,IAErB7G,KAAKP,UAAUuH,eAAa,EAEpC,CAEMd,WAAWH,GAAe,IAAAkB,EAAAjH,KAAA,SAAAkH,KAAA,YAC5BD,EAAKE,UAAY,EACjBpB,EAAIqB,QAAQC,GAAQJ,EAAKE,WAAaE,EAAKzE,QAC3C,IAAI0E,QAA8EL,EAAKb,cAClFmB,OAAON,EAAKd,UAAW,CACpBqB,KAAMP,EAAKE,UACXM,KAAM1B,EACN2B,KAAM,IAETC,MAAMC,GAASX,EAAKY,YAAYD,IAErCX,EAAKa,SAAWR,EAAWS,QAE3Bd,EAAKxH,UAAUuD,cAAe,EAbF,EAchC,CACQ6E,YAAYD,GAChBd,eAAQc,MAAMA,GACP,CAAEG,QAAS,GACtB,CAAC5D,SAAAnE,KAAA,mBAAAoE,iBAtDQyB,GAAoBvI,MAiBjBiH,MAAQjH,MAERkH,MAAQlH,aAAA,EAAA6G,SAAAnE,KAAA,UAAA0E,EAAAC,IAAA,MAnBXkB,EAAoBjB,UAAA,uBAAAoD,OAAA,CAAA1J,MAAA,QAAAwH,OAAA,UAAAmC,YAAA,EAAAC,SAAA,CAAA5K,OAAA6K,MAAA,GAAAC,KAAA,GAAAC,OAAA,oWAAAC,SAAA,SAAAxD,EAAAC,GAAA,EAAAD,IDlBzBxH,MAFR,aAEQA,CAFmC,WAEnCA,CADI,YACwBA,MAAA,GAAWA,QAEnCA,MADJ,SACIA,CADqB,UACfA,MAAA,wBAA0CA,QAChDA,MAAA,eAERA,UAGIA,MADJ,QACIA,CADC,WACsBA,MAAA,0BAAqCA,QAC5DA,MAAA,4BACIA,MAAA,GAAAiL,GAAA,yBAAA1J,IAORvB,UAGAA,MAFJ,WAEIA,CAFoB,eAE2CA,MAAA,0BAAgCA,QAG/FA,MAFA,SAEAA,CAD2B,WACrBA,MAAA,0BAAoCA,QAC1CA,MAAA,iBAGJA,mBA7BQA,MAAA,YAE4BA,MAAA,GAAAA,MAAAyH,EAAAzG,OAElBhB,MAAA,GAAAA,YAAA,+BAMaA,MAAA,GAAAA,YAAA,4BACyBA,MAAA,GAAAA,MAAA,aAAAyH,EAAA8B,WAC5CvJ,cAAAyH,EAAA+C,UAUuDxK,MAAA,GAAAA,YAAA,uBAE/DA,MAAA,GAAAA,MAAA,aAAAyH,EAAAuB,YACMhJ,MAAA,GAAAA,YAAA,2CCVIkL,IAAYnE,IAAEoE,uBAAsBC,KAAyBnD,IAAed,KAAEU,IAAWC,IAAEuD,IAAgBtD,KAAAG,KAAEoD,KAAYC,MAAApD,OAAA,06IAAAC,gBAAA,WAK1HG,CAAoB,+GCPjBvI,MAAA,iBACIA,MAAA,aACJA,kCAFWA,MAAA,UAAAwL,GACAxL,cAAA,UAAAwL,2BAUSxL,MAAA,aAAsBA,MAAA,wBAAoDA,QAAOA,MAAA,uBAA3DA,oBAAA,mEACtBA,MAAA,aAAsBA,MAAA,wBAA4DA,QAAOA,MAAA,uBAAnEA,oBAAA,2EACvBA,MAAA,aAAqBA,MAAA,wBAA2DA,QAAOA,MAAA,uBAAlEA,oBAAA,mDCNjD,IAAMyL,GAA2B,MAAlC,MAAOA,EAmET,WAAIC,GACA,OAAO9F,OAAO,uBAClB,CACA,cAAI+F,GACA,OAAO/F,OAAO,yBAClB,CACA1D,YAEYK,EAEAD,EACAH,GAHAO,KAAAH,UAEAG,KAAAJ,UACAI,KAAAP,YA7EZO,KAAAkJ,KAAO,CACHhL,KAAM,UACNiL,gBAAiB,4BACjBC,IAAK,WACLC,YAAa,yCAEjBrJ,KAAAsJ,WAAa,CAET,CACIpL,KAAM,YACNiL,gBAAiB,kCACjBE,YAAa,8CACbE,aAAc,aACdC,KAAM,OACNJ,IAAK,QACLK,WAAY,CACRC,UAAU,EACVC,WAAY,KAGpB,CACIzL,KAAM,WACNiL,gBAAiB,iCACjBE,YAAa,6CACbE,aAAc,cACdC,KAAM,OACNJ,IAAK,QACLK,WAAY,CACRC,UAAU,EACVC,WAAY,KAGpB,CACIzL,KAAM,QACNiL,gBAAiB,6BACjBE,YAAa,yCACbE,aAAc,QACdC,KAAM,QACNJ,IAAK,QACLK,WAAY,CACRC,UAAU,EACVC,WAAY,KAGpB,CACIzL,KAAM,YACNiL,gBAAiB,6BACjBE,YAAa,yCACbE,aAAc,MACdC,KAAM,MACNJ,IAAK,QACLK,WAAY,CACRC,UAAU,EACVC,WAAY,KAGpB,CACIzL,KAAM,UACNiL,gBAAiB,+BACjBE,YAAa,2CACbE,aAAc,eACdC,KAAM,OACNJ,IAAK,UAGbpJ,KAAA4J,MAAgB,SAehB,CACQC,QACJ,IAAIC,EAAO,IAAIC,SAAS/J,KAAKgJ,SACzBgB,EAAyC,CACzCC,UAAWH,EAAKhH,IAAI,aACpBoH,SAAUJ,EAAKhH,IAAI,YACnBqH,MAAOL,EAAKhH,IAAI,SAChBsH,QAASN,EAAKhH,IAAI,WAClBuH,QAASP,EAAKhH,IAAI,WAClBwH,UAAWR,EAAKhH,IAAI,aACpBQ,IAAKJ,OAAOhB,SAASC,MAEzB,OAAOoI,MAAM,IAAIvI,IAAI,QAAQhC,KAAKH,0BAA2BG,KAAKJ,SAASuC,KAAM,CAC7EqI,OAAQ,OACRC,QAAS,CAAE,eAAgB,oBAC3BC,KAAMC,KAAKC,UAAUZ,IAE7B,CACAa,SACI,GAAI7K,KAAKgJ,QAAQ8B,gBACbC,KACKC,SAAS,IAAMhL,KAAK6J,SACpBrH,KAAK,KACFxC,KAAKgJ,QAAQiC,QACbjL,KAAK4J,MAAQ,UACb5J,KAAKP,UAAUuD,eACfkI,WAAW,KACPlL,KAAK4J,MAAQ,UACb5J,KAAKiJ,WAAWkC,QAChBnL,KAAKP,UAAUuD,cAAY,EAC5B,IAAI,EACR,KACChD,KAAK4J,MAAQ,SACb5J,KAAKP,UAAUuD,eACfkI,WAAW,KACPlL,KAAK4J,MAAQ,UACb5J,KAAKP,UAAUuD,cAAY,EAC5B,IAAI,OAGd,CACD,IAAIoI,EAAa,IAAIC,MAAM,QAAS,CAChCC,SAAS,IAEbtL,KAAKgJ,QACAuC,iBAAiB,yBACjBnE,QAASoE,GAAoEA,EAAIC,cAAcL,GACxG,CACA,OAAO,CACX,CAACjH,SAAAnE,KAAA,mBAAAoE,iBAlIQ2E,GAA2BzL,MA0ExBkH,MAAQlH,MAERiH,MAAQjH,aAAA,EAAA6G,SAAAnE,KAAA,UAAA0E,EAAAC,IAAA,MA5EXoE,EAA2BnE,UAAA,+BAAAqD,YAAA,EAAAC,SAAA,CAAA5K,OAAA6K,MAAA,GAAAC,KAAA,GAAAC,OAAA,gcAAAC,SAAA,SAAAxD,EAAAC,GAAA,EAAAD,IDpBxCxH,MAAA,cAAoGA,MAAA,wBAAoDA,QACxJA,MAAA,cACIA,MAAA,cAEAA,MAAA,YAEMA,MAAA,2BAAUyH,EAAA8F,QAAQ,GACpBvN,MAAA,YAAoBA,MAAA,wBAA4CA,QAChEA,MAAA,YAA0BA,MAAA,0BAAkDA,QAC5EA,MAAA,SACAA,MAAA,aAAkBA,MAAA,0BAA+CA,QACjEA,MAAA,YACIA,MAAA,GAAAoO,GAAA,kBAAApO,OAKJA,QACAA,MAAA,SACAA,MAAA,aAAwBA,MAAA,0BAA+CA,QACvEA,MAAA,kBACIA,MAAA,iBACJA,QACAA,MAAA,gBAGIA,MAFA,GAAAqO,GAAA,IAEArO,CAFwB,GAAAsO,GAAA,IAExBtO,CADwB,GAAAuO,GAAA,KAG5BvO,QACAA,MAAA,aAAwBA,MAAA,0BAEhCA,mBA/BoGA,oBAAA,0CAChEA,MAAA,GAAAA,MAAA,YAMRA,MAAA,GAAAA,YAAA,oCACMA,MAAA,GAAAA,YAAA,2CAERA,MAAA,GAAAA,YAAA,wCAEdA,MAAA,GAAAA,MAAAyH,EAAAuE,YAOoBhM,MAAA,GAAAA,YAAA,wCACbA,MAAA,GAAAA,MAAA,UAAAyH,EAAAmE,MACG5L,cAAA,UAAAyH,EAAAmE,MAGV5L,MAAA,GAAAA,MAAA,WAAAyH,EAAA6E,MAAA,OACAtM,cAAA,WAAAyH,EAAA6E,MAAA,OACAtM,cAAA,UAAAyH,EAAA6E,MAAA,OAGoBtM,MAAA,GAAAA,YAAA,2DCdlBwO,KAAgBC,KAAgBC,KAAczG,IAAelB,KAAEmE,IAAY/D,IAAAW,KAAED,IAAWE,KAAAI,OAAA,goFAAAC,gBAAA,WAKzFqD,CAA2B,mBCbjC,IAAMkD,GAAc,MAArB,MAAOA,EAETC,UAAUpI,GACN,IAAIqI,EAAqE,GACzE,OAAyC,MAArCrI,GAAYjB,OAAOuJ,gBACnB7F,OACKC,QAAQ1C,EAAWjB,MAAMuJ,gBACzBhF,QAAQ,EAAEiF,EAAUpN,KACjBkN,EACKG,KAAK,CACFD,WACAxJ,MAAO,CAAEzE,WAAaa,EAAMsN,gBAAiBC,UAAW,CAAEC,SAAUxN,EAAMuN,UAAUC,SAAUC,OAAQzN,EAAMuN,UAAUE,QAAUL,IAChIM,KAAM,CAAEvO,WAAYa,EAAMb,WAAYoO,UAAWvN,EAAMuN,cAGpEL,CACX,CAAChI,SAAAnE,KAAA,mBAAAoE,iBAhBQ6H,EAAc,EAAA9H,SAAAnE,KAAA,WAAA0E,EAAAkI,IAAA,wBAAdX,EAAcY,MAAA,EAAA5E,YAAA,WAAdgE,CAAc,KCAda,GAAa,MAApB,MAAOA,EAETZ,UAAUa,GACN,IAAIC,EAAY,CAAEN,OAAQ,EAAGD,SAAUM,GAAOP,WAAWC,UAAY,OACrEO,SAAUN,QAAUK,GAAOP,WAAWE,QAAU,IAAOK,GAAO3O,YAAYsO,QAAU,GAC7EM,CACX,CAAC7I,SAAAnE,KAAA,mBAAAoE,iBANQ0I,EAAa,EAAA3I,SAAAnE,KAAA,WAAA0E,EAAAkI,IAAA,uBAAbE,EAAaD,MAAA,EAAA5E,YAAA,WAAb6E,CAAa,2GCWVxP,MADJ,OACIA,CADA,QACIA,MAAA,wBAAuEA,QAC3EA,MAAA,QAAIA,MAAA,oBAAwDA,QAC5DA,MAAA,QAAIA,MAAA,0CAAwDA,QAC5DA,MAAA,SAAIA,MAAA,sBACRA,oCAJQA,MAAA,GAAAA,YAAA,gCAAAA,MAAA,GAAA2P,GAAAC,EAAAb,YACA/O,MAAA,GAAAA,YAAA,UAAA4P,EAAA,KAAAA,EAAAP,KAAAvO,WAAAd,MAAA,GAAA6P,KACA7P,MAAA,GAAAA,YAAA,MAAAA,MAAA,WAAA4P,EAAA,KAAAA,EAAAP,MAAArP,MAAA,GAAA6P,KACA7P,MAAA,GAAAA,YAAA,YAAA4P,EAAA,KAAAA,EAAArK,MAAAzE,WAAAd,MAAA,GAAA6P,MCLb,IAAMC,GAA2B,MAAlC,MAAOA,EAIT5N,YAAoBC,GAAAO,KAAAP,YADpBO,KAAAqN,4BAA8B,8CAI1BrN,KAAKqN,4BAA8B7M,IAAcC,oBAAsB,4CAA8C,8CACrHT,KAAKP,UAAUuD,cAEnB,CAACmB,SAAAnE,KAAA,mBAAAoE,iBAVQgJ,GAA2B9P,aAAA,EAAA6G,SAAAnE,KAAA,UAAA0E,EAAAC,IAAA,MAA3ByI,EAA2BxI,UAAA,+BAAAoD,OAAA,CAAAlE,WAAA,cAAAmE,YAAA,EAAAC,SAAA,CAAA5K,OAAA6K,MAAA,GAAAC,KAAA,GAAAE,SAAA,SAAAxD,EAAAC,GAAA,EAAAD,IDb5BxH,MAHZ,UAGYA,CAHL,UAGKA,CAFD,OAECA,CADA,QACIA,MAAA,wBAAuDA,QAC3DA,MAAA,QAAIA,MAAA,wBAA6CA,QACjDA,MAAA,QAAIA,MAAA,0BAA4DA,QAChEA,MAAA,SAAIA,MAAA,0BAEZA,YAGQA,MAFR,WAEQA,CAFD,QAECA,CADA,SACIA,MAAA,0BAA2DA,QAC/DA,MAAA,SAAIA,MAAA,sBAA+DA,QACnEA,MAAA,SAAIA,MAAA,4CAAgEA,QACpEA,MAAA,SAAIA,MAAA,sBACRA,UACAA,MAAA,GAAAgQ,GAAA,gBAAAhQ,8BASRA,iBAtBgBA,MAAA,GAAAA,YAAA,4CACAA,MAAA,GAAAA,YAAA,KAAAyH,EAAAsI,8BACA/P,MAAA,GAAAA,YAAA,mDACAA,MAAA,GAAAA,YAAA,iDAKAA,MAAA,GAAAA,YAAA,kCAAAA,MAAA,GAAAsI,MACAtI,MAAA,GAAAA,YAAA,YAAAyH,EAAAjB,YAAA,MAAAiB,EAAAjB,WAAAjB,MAAA,KAAAkC,EAAAjB,WAAAjB,MAAAzE,WAAAd,MAAA,GAAA6P,KACA7P,MAAA,GAAAA,YAAA,MAAAA,MAAA,YAAAyH,EAAAjB,WAAA,KAAAiB,EAAAjB,WAAAjB,OAAAvF,MAAA,GAAA6P,KACA7P,MAAA,GAAAA,YAAA,YAAAyH,EAAAjB,YAAA,MAAAiB,EAAAjB,WAAAjB,MAAA,KAAAkC,EAAAjB,WAAAjB,MAAAzE,WAAAd,MAAA,GAAA6P,KAER7P,MAAA,GAAAA,YAAA,MAAAyH,EAAAjB,6BCLMyB,IAAelB,KAAEkJ,IAAU9I,IAAEwH,GAAgBa,IAAarH,OAAA,0eAAAC,gBAAA,WAK3D0H,CAA2B,wFCCjC,IAAMI,EAAa,MAApB,MAAOA,EAAarJ,SAAAnE,KAAA,mBAAAoE,iBAAboJ,EAAa,EAAArJ,SAAAnE,KAAA,UAAA0E,EAAA+I,GAAA,MAAbD,IAAarJ,SAAAnE,KAAA,UAAA0E,EAAAgJ,IAAA,UANtB1B,eAMSwB,CAAa,KC6EbG,GAAiB,MAAxB,MAAOA,EAAiBxJ,SAAAnE,KAAA,mBAAAoE,iBAAjBuJ,EAAiB,EAAAxJ,SAAAnE,KAAA,UAAA0E,EAAA+I,GAAA,MAAjBE,IAAiBxJ,SAAAnE,KAAA,UAAA0E,EAAAgJ,IAAA,UAlBtB1B,KACAuB,IACAK,IACAC,IACAC,KACAC,oBACAtF,uBACAuF,gBACA7I,IACAI,IACA0I,+BACAC,IACAV,EACAW,IACAC,IACAzF,IA3CA4E,IACAK,IACAC,IACAC,KACAC,oBACAC,gBACA7I,IACAI,IACA0I,+BACAC,IACAV,EACAW,IACAC,IACAzF,cAiCKgF,CAAiB,sFC9FwDrQ,MAAA,UAA+DA,MAAA,wBAAyCA,eAAzCA,cAAA,GAAAA,MAAA,2DAArJA,MAAA,SAAsFA,MAAA,EAAA+Q,GAAA,cAA+G/Q,MAAA,GAAgBA,kCAAlNA,MAAA,aAAAgR,EAAAC,KAAAC,YAA0FlR,cAAA,QAAAgR,EAAAC,KAAAC,WAAAC,SAAA,mBAAwGnR,cAAAgR,EAAAhQ,QCc9L,IAAMoQ,GAAoB,MAA3B,MAAOA,EACT,UAeOC,CAAOC,GACVA,EAAapM,KAAKqM,IACd7O,KAAK6O,MAAQA,EACb7O,KAAKP,UAAUuD,cAAY,EAEnC,CAEAxD,YAAoBC,GAAAO,KAAAP,WAA+B,CACnDqP,UAAUC,EAAWR,GACjB,OAAOA,EAAKA,KAAKC,UACrB,CAACrK,SAAAnE,KAAA,mBAAAoE,iBA1BQsK,GAAoBpR,aAAA,EAAA6G,SAAAnE,KAAA,UAAA0E,EAAAC,IAAA,MAApB+J,EAAoB9J,UAAA,uBAAAoD,OAAA,CAAA2G,OAAA,oBAGb5B,IACR,IAAIiC,EAAU,CAAEC,MAAOpN,IAAQqN,cAAgBC,SAAUtN,IAAQuN,aAAe,YAChF,OAAOC,KAAUC,iBAAiB9M,KAAKT,GACnCwE,OAAOC,QAAQwI,GAAS5N,IAAI,EAAEmO,EAAK3N,MAC/B,IAAI2M,EAAO,IAAIvM,IAAID,GACfzD,EAAQ,GACZ,OAAa,MAATyO,GAAiBwC,KAAOxC,IACxBzO,EAAQyO,EAAMwC,IAClBhB,EAAKnM,aAAae,IAAIvB,EAAWtD,GAC1B,CAAEiQ,OAAMjQ,QAAK,GACrBwC,OAAOyN,GAAQA,EAAKjQ,OAAM,IAEpC4J,SAAA,CAAA5K,OAAA6K,MAAA,EAAAC,KAAA,EAAAC,OAAA,kFAAAC,SAAA,SAAAxD,EAAAC,GAAA,EAAAD,GD7BTxH,MAAA,EAAAkS,GAAA,gBAAkElS,MAAV,UAAAyH,EAAA8J,MAAUvR,CAAA,eAAAyH,EAAA+J,mVCcrDJ,CAAoB,iJCZ7BpR,MAAA,iCAGmEA,MAAA,oBAA+BA,+EAA/BA,MAAA,GAAAA,YAAA,UAAAmS,EAAA,KAAAA,EAAAjD,uCAKnElP,MAAA,iCAGmEA,MAAA,oBAAmHA,+EAAnHA,MAAA,GAAAA,YAAA,IAAAA,MAAA,EAAA2P,IAAA,MAAAwC,GAAA,MAAAA,EAAAjD,UAAA,KAAAiD,EAAAjD,UAAAE,SAAA,MAAA+C,GAAA,MAAAA,EAAArR,WAAA,KAAAqR,EAAArR,WAAAsO,QAAA,MAAA+C,EAAA,KAAAA,EAAArR,WAAAqO,uCAZnEnP,MAAA,YAAgBA,MAAA,0DAAwIA,QACxJA,MAAA,EAAAoS,GAAA,cAIApS,MAAA,iCAGKA,MAAA,oBAAgCA,QACrCA,MAAA,GAAAqS,GAAA,wCATgBrS,oBAAA,sCAAAA,MAAA,GAAA6P,GAAA7P,MAAA,UAAAmS,EAAA,KAAAA,EAAAjD,WAAAlP,MAAA,UAAAmS,EAAA,KAAAA,EAAArR,eAIXd,MAAA,GAAAA,MAAA,cAAAmS,GAAA,MAAAA,EAAAjD,UAAA,KAAAiD,EAAAjD,UAAAE,SAAA,MAAA+C,GAAA,MAAAA,EAAArR,WAAA,KAAAqR,EAAArR,WAAAsO,SAGDpP,sDACCA,MAAA,GAAAA,YAAA,WAAAmS,EAAA,KAAAA,EAAArR,aAIAd,MAAA,GAAAA,MAAA,cAAAmS,GAAA,MAAAA,EAAAjD,UAAA,KAAAiD,EAAAjD,UAAAE,SAAA,MAAA+C,GAAA,MAAAA,EAAArR,WAAA,KAAAqR,EAAArR,WAAAsO,oCAGLpP,MAAA,YACkGA,MAAA,wBAAyHA,8HAAzHA,oBAAA,2CAAAA,MAAA,EAAAsS,GAAA,MAAAC,EAAA,KAAAA,EAAAC,gBAAA,MAAAD,EAAA,KAAAA,EAAAE,oBCD/F,IAAMC,GAAqB,MAA5B,MAAOA,EAIT,SACInN,CAAMA,GAEN7C,KAAKiQ,OAASpN,EACd7C,KAAKkQ,QAET,CACA,YACIC,CAASA,GAETnQ,KAAKoQ,UAAYD,EACjBnQ,KAAKkQ,QAET,CAGA1Q,YAAoBC,GAAAO,KAAAP,YAnBpBO,KAAA0C,WAAUrC,SAiBVL,KAAAM,kBAAoB,4BAGhBN,KAAKM,kBAAoBE,IAAcC,oBAAsB,8BAAgC,2BAEjG,CACQyP,SACJ,IAAID,EAASI,gBAAgBrQ,KAAKiQ,QAC9BG,EAAYC,gBAAgBrQ,KAAKoQ,WAErCA,EAAYA,GAAa,GACzBA,EAAUhJ,QAAQkJ,IACTA,IAELL,EAAOzD,UAAUE,QAAU4D,EAAE9D,UAAUE,OACvCuD,EAAO7R,WAAWsO,QAAU4D,EAAElS,WAAWsO,UAE7C1M,KAAKuQ,OAASN,EACdjQ,KAAKP,UAAUuD,cACnB,CAACmB,SAAAnE,KAAA,mBAAAoE,iBArCQ4L,GAAqB1S,aAAA,EAAA6G,SAAAnE,KAAA,UAAA0E,EAAAC,IAAA,MAArBqL,EAAqBpL,UAAA,wBAAAoD,OAAA,CAAAtF,QAAA,cAAAG,MAAA,QAAAsN,SAAA,YAAAK,mBAAA5K,GAAAuC,MAAA,EAAAC,KAAA,EAAAC,OAAA,6QAAAC,SAAA,SAAAxD,EAAAC,MAAA,EAAAD,YDDlCxH,MAfA,EAAAmT,GAAA,MAeAnT,CAfwB,EAAAoT,GAAA,cAmBxBpT,MAAA,iBAnBAA,OAAAqT,EAAA5L,EAAAwL,QAAA,KAAAI,GAeArT,eAAA8B,EAAA2F,EAAArC,WAAA,KAAAtD,o+BCCa4Q,CAAqB,yCCC3B,IAAMY,GAAwB,MAA/B,MAAOA,EAQTpR,YACYqR,EACApR,EAEAqR,GAHA9Q,KAAA6Q,gBACA7Q,KAAAP,YAEAO,KAAA8Q,sBAVZ9Q,KAAA+Q,cAAgBC,IAASD,cACzB/Q,KAAAiR,aAAeD,IAASC,YAUrB,CAEGC,SAASC,GAAC,IAAAlK,EAAAjH,KAAA,SAAAkH,KAAA,YACZiK,EAAEC,iBACF,IAAIC,EAAiC,KACjCC,EAAWpG,WAAW,KACtBjE,EAAKsK,SAAU,EACfF,EAAW,IAAIG,QAAQ,CAACC,EAAKC,IAAQxG,WAAW,IAAMuG,IAAO,MAC7DxK,EAAKxH,UAAUuD,cAAY,EAC5B,KACC2O,EAAQ,IAAI5H,SAAS7G,OAAOR,SAC5BkP,EAAW,IAAI5P,IAAIkB,OAAOhB,SAASC,MAAMC,aAAaU,IAAIjB,IAAQgQ,gBAClExF,GAAYsF,EAAM7O,IAAI,aAAemE,EAAKvE,SAASoP,cAAgB,EACnEC,EAAY,CAAEC,IAAKL,EAAM7O,IAAI,UAAU0L,YAAcvH,EAAKvE,QAAQ3E,GAAIsO,YACtE4F,EAAQN,EACPO,OAAO,QACPpR,OAAOG,GAAU,MAALA,GACZG,IAAI+Q,KAAWH,IAAKG,GAAM3D,YAAc,GAAInC,cAC7C/K,QAAa2F,EAAK4J,cACjBuB,YAAY,CAAEL,YAAWH,WAAUK,UACnCtK,MAAOwJ,IACJrK,QAAQc,MAAMuJ,GACdlK,EAAK6J,oBAAoBuB,KAAK,CAC1B/T,MAAO,wBACPgU,KAAMnB,EAAE3C,WACR+D,MAAO,4BACPC,gBAAiB,qCACjBC,SAAU,UACVC,SAAU,MAEP,OAEXC,EAAOC,MACNlL,KAAKiK,EAAMnL,WACXpF,IAAI,EAAEmO,EAAKyC,MACR,GAAKzC,EAAIsD,WAAW,aAGhB,MAAO,CAAEd,UAAW,CAAEC,IAAKA,EAAe3F,SAAU,GAAK4F,MAAO,GAAIL,cAAUkB,EAAS,GAE9FhS,OAAOG,GAAKA,GACjB,KAAO0R,EAAK/P,OAAS,SACXqE,EAAK4J,cACNuB,YAAYO,EAAKI,OACjBpL,MAAOwJ,IACJrK,QAAQc,MAAMuJ,GACdlK,EAAK6J,oBAAoBuB,KAAK,CAC1B/T,MAAO,wBACPgU,KAAMnB,EAAE3C,WACR+D,MAAO,4BACPC,gBAAiB,qCACjBC,SAAU,UACVC,SAAU,KACb,GAIG,MAAZrB,GACA2B,aAAa1B,GACbrK,EAAKsK,SAAU,GAEfF,EAAS7O,KAAK,KACVwQ,aAAa1B,GACbrK,EAAKsK,SAAU,IAEX,MAARjQ,GAAgB4B,OAAO,kBAAkBe,cAAc,qBACvDf,OAAO,kBAAkBgB,YAC7B+C,EAAKxH,UAAUuD,cAAe,EAjElB,EAkEhB,CAACmB,SAAAnE,KAAA,mBAAAoE,iBAjFQwM,GAAwBtT,MAAA+G,MAAA/G,mBAWrB2V,MAAY,EAAA9O,SAAAnE,KAAA,UAAA0E,EAAAC,IAAA,MAXfiM,EAAwBhM,UAAA,2BAAAoD,OAAA,CAAAtF,QAAA,WAAAyF,MAAA,GAAAC,KAAA,EAAAC,OAAA,yeAAAC,SAAA,SAAAxD,EAAAC,MAAA,EAAAD,IChBjCxH,MADJ,SACIA,CADE,cAGqEA,MAAA,OAACA,QACxEA,MAAA,aAMOA,MADA,oBAAAC,GAAA,OAAYwH,EAAAgM,cAAAxT,EAAqB,EACjCD,CADkC,iBAAAC,GAAA,IAAAoT,EAAA,OACzB5L,EAAAkM,aAAA1T,EAAA,QAAAoT,EAAA,MAAA5L,EAAArC,QAAA,KAAAqC,EAAArC,QAAAoP,oBAAAgB,IAAAnC,IAA6C,EAAE,GAN/DrT,QAQAA,MAAA,cAEqEA,MAAA,OACzEA,UACAA,MAAA,cACQA,MAAA,iBAAAC,GAAA,OAASwH,EAAAmM,SAAA3T,EAAgB,GACWD,MAAA,UAAMA,MAAA,eAA2EA,QAAOA,MAAA,UAAMA,MAAA,0BAA8CA,0BAb7KA,MAAA,GAMAA,MANA,cAAAqT,EAAA,MAAA5L,EAAArC,QAAA,KAAAqC,EAAArC,QAAAoP,oBAAAgB,IAAAnC,IAAA,EAMArT,CANkC,eAAA8B,EAAA,MAAA2F,EAAArC,QAAA,KAAAqC,EAAArC,QAAAoP,oBAAAgB,IAAA1T,IAAA,EAMlC9B,CALmC,gBAAA4V,EAAA,MAAAnO,EAAArC,QAAA,KAAAqC,EAAArC,QAAAoP,oBAAAgB,IAAAI,IAAA,GAYtC5V,MAAA,sCAAmDA,MAAA,GAAAA,MAAA,MAAAyH,EAAAwM,QAAA,sCAA+EjU,MAAA,GAAAA,YAAA,k9DDD7HsT,CAAwB,4HEHrBtT,MAAA,YAK6DA,MAAA,GAAoBA,wCAAzEA,MADA,cAAA6V,EAAA,KAAAA,EAAAC,UACA9V,CADoC,yBAAA6V,EAAA,KAAAA,EAAAX,6GACiBlV,cAAA6V,EAAAb,gCAL7DhV,MAAA,EAAA+V,GAAA,uCACK/V,MAAA,wBAAA6V,EAAA,KAAAA,EAAAG,qCAOLhW,MAAA,YAGmBA,MAAA,oBAA4EA,kCAD3FA,MADA,cAAAiW,EAAA7G,OAAA,IACApP,CAD2C,mBAAAiW,EAAA7G,OAAA,OAE5BpP,cAAA,cAAAiW,EAAA/J,KAAAlM,MAAA,IAAAiW,KAAA7G,OAAA,kDAgBjBpP,MAFA,eAEAA,CAD0E,WAChDA,MAAA,wBAAyCA,QACnEA,MAAA,uBACAA,MAAA,4BAAAC,GAAAD,MAAA6B,GAAA,MAAAqU,EAAAlW,MAAA,UAAAA,MAAoBkW,EAAAC,WAAAlW,GAAkB,GACxCD,wJAH4BA,MAAA,GAAAA,YAAA,8BACVA,MAAA,GAAAA,MAAA,aAAAoW,6CASVpW,MAAA,iCAE0BA,MAAA,iBAAAC,GAAA,MAAAoW,EAAArW,MAAAsW,GAAAC,OAAAL,EAAAlW,MAAA,UAAAA,MAASkW,EAAAM,mBAAAH,EAAApW,GAAgC,GAAED,iCAD3CA,MADA,KAAAA,MAAA,EAAA6P,eAAA7P,MAAA,EAAAsI,IACAtI,CAD6B,QAAAqW,8BAmBvDrW,MADJ,QACIA,CADuC,YAKkBA,MAAA,GAC7DA,0CAFQA,QACAA,MADA,cAAAyW,EAAA,KAAAA,EAAAX,UACA9V,CADoC,yBAAAyW,EAAA,KAAAA,EAAAvB,gGACiBlV,cAAAyW,EAAAzB,6BAL7DhV,MAAA,EAAA0W,GAAA,mBAAM1W,MAAA,6BAAAgW,kCAQVhW,MAAA,kDAAsBA,MAAA,gBAAAoW,EAAA,KAAAA,EAAAhR,oCAatBpF,MAAA,GACIA,MAAA,aAGwBA,MAAA,GAAeA,QACvCA,MAAA,aAGwBA,MAAA,GAAiCA,oDALnDA,iCACkBA,cAAA2W,EAAAzK,MAGlBlM,iCACkBA,cAAA,GAAA2W,EAAAlH,MAAA,UAAAkH,EAAA,KAAAA,EAAAtH,KAAA,+BAbhCrP,MAFJ,eAEIA,CAD6D,gBACjCA,MAAA,wBAAuCA,QACnEA,MAAA,YAIIA,MAAA,EAAA4W,GAAA,uBAWR5W,gCAhBgCA,MAAA,GAAAA,YAAA,4BAIvBA,MAAA,wFAC8BA,cAAA,gBAAAoW,GAAA,MAAAA,EAAAhR,QAAA,KAAAgR,EAAAhR,QAAAyR,2CAuB3B7W,MAAA,UAEaA,MAAA,GAAwBA,kCADjCA,MAAA,OAAA8W,EAAA9Q,IAAAhG,OACSA,cAAA8W,EAAAC,kCANrB/W,MAAA,QAEIA,MADJ,YACIA,CADK,aACIA,MAAA,wBAA2CA,QACpDA,MAAA,EAAAgX,GAAA,WAAAC,IAKJjX,+BANaA,MAAA,GAAAA,YAAA,gCACTA,MAAA,GAAAA,MAAAkW,EAAAgB,2CAcAlX,MAAA,sDAEKA,MAFA,MAAAmX,EAEAnX,CAFa,QAAAkW,EAAAkB,iCAMlBpX,MAAA,sDACKA,MADA,MAAAmX,EACAnX,CADa,QAAAkW,EAAAkB,iCAMlBpX,MAAA,sDACKA,MADA,MAAAmX,EACAnX,CADa,QAAAkW,EAAAkB,iCADpBpX,MAZF,EAAAqX,GAAA,aAYErX,CAZoB,EAAAsX,GAAA,aAYpBtX,CAN4B,EAAAuX,GAAA,oCAN9BvX,MAAAwX,EAAA,OAAAA,EAAA,OAAAA,EAAA,qCA+BRxX,MAAA,4CAA0BA,MAAA,eAAAyX,qBAAAjC,IAAAiC,IAAAzX,MAAA,EAAAsI,+BA1J1BtI,MADJ,SACIA,CADG,oCAGCA,MAAA,WASIA,MAAA,EAAA0X,GAAA,YAAAnW,4BAQAvB,MAAA,EAAA2X,GAAA,YAAAC,IAMR5X,QAGSA,MAFT,cAESA,CAD+B,UAEpCA,MAAA,wBACAA,MAAA,WACsBA,MAAA,IAA+BA,QACrDA,MAAA,yBACAA,MAAA,UAAuBA,MAAA,IAA2CA,QAClEA,MAAA,aAEMA,MAAA,GAAA6X,GAAA,kBAUE7X,MAFJ,gBAEIA,CADyF,YAC9DA,MAAA,0BAAgDA,QAC3EA,MAAA,aACIA,MAAA,GAAA8X,GAAA,kCAAA9X,OAMRA,UAGIA,MAFJ,gBAEIA,CAD2E,YAC/CA,MAAA,0BAA8CA,QAC1EA,MAAA,kCACJA,QACAA,MAAA,oCACIA,MAAA,2BAKAA,MAAA,GAAA+X,GAAA,eAAAxW,GASAvB,MAAA,GAAAgY,GAAA,+BAEAhY,MAAA,+BAERA,UACAA,MAAA,SACAA,MAAA,GAAAiY,GAAA,kBAmBAjY,MAAA,SAEIA,MADJ,aACIA,CADK,cACIA,MAAA,0BAA6CA,QACtDA,MAAA,aAEJA,QACAA,MAAA,GAAAkY,GAAA,KAYJlY,UACAA,MAAA,uCAEIA,MAAA,aACAA,MAAA,GAAAmY,GAAA,cAAAnY,OAuBRA,YAQAA,MAAA,GAAAoY,GAAA,kCAAApY,OAICA,MAAA,gEA5JYA,8EAEAA,MAAA,GAEAA,MAFA,YAAAoW,EAAA,KAAAA,EAAAhR,QAAA1E,OAAA,GAEAV,CAFqC,QAAAkW,EAAAvV,WAQtCX,oBAAA,WAAAoW,GAAA,MAAAA,EAAAhR,QAAA,KAAAgR,EAAAhR,QAAAiT,aAQArY,MAAA,GAAAA,MAAA,MAAAoW,GAAA,MAAAA,EAAAhR,SAAA,MAAAgR,EAAAhR,QAAAzD,MAAA,KAAAyU,EAAAhR,QAAAzD,MAAA2W,WAUatY,MAAA,GAAAA,MAAA,cAAAkW,EAAAqC,aAEKvY,MAAA,GAAAA,MAAA,MAAAoW,GAAA,MAAAA,EAAAhR,QAAA,KAAAgR,EAAAhR,QAAAxE,MACJZ,cAAA,cAAAoW,EAAA,KAAAA,EAAAhR,SACKpF,MAAA,GAAAA,MAAA,MAAAoW,GAAA,MAAAA,EAAAhR,QAAA,KAAAgR,EAAAhR,QAAAoT,kBAGjBxY,MAAA,GAAAA,MAAA,MAAAoW,KAAAhR,QAAA3E,GAAA0Q,SAAA,YASOnR,6MACsBA,MAAA,GAAAA,YAAA,uCAEvBA,MAAA,GAAAA,MAAAoW,EAAAhR,QAAAqT,gBAAAC,UAQC1Y,MAAA,sFACuBA,MAAA,GAAAA,YAAA,qCACFA,MAAA,GAAAA,MAAA,aAAAoW,GAErBpW,uEACcA,MAAA,GAEAA,MAFA,gBAAAoW,EAAA,KAAAA,EAAAhR,QAEApF,CAF+B,cAAAoW,EAAA,KAAAA,EAAA7Q,MAE/BvF,CAD2B,WAAAkW,EAAAyC,mBAI9C3Y,cAAA,MAAAoW,GAAA,MAAAA,EAAAhR,QAAA,KAAAgR,EAAAhR,QAAAiT,YAUKrY,MAAA,GAAAA,MAAA,eAAAoW,GAAA,MAAAA,EAAAhR,SAAAgR,EAAAhR,QAAAwT,wBAMH5Y,MAAA,GAAAA,MAAA,cAAAoW,GAAA,MAAAA,EAAAhR,SAAA,MAAAgR,EAAAhR,QAAAyR,eAAA,KAAAT,EAAAhR,QAAAyR,eAAAvR,QAAA,GAoBGtF,MAAA,GAAAA,YAAA,oCAEJA,MAAA,GAAAA,MAAA,kBAAAoW,GAAA,MAAAA,EAAAhR,QAAA,KAAAgR,EAAAhR,QAAAyT,gBAAA7Y,OAETA,eAAA,OAAA8Y,EAAA5C,EAAAgB,iBAAA,KAAA4B,EAAAxT,QAAA,SAcKtF,iEAELA,MAAA,GAAAA,MAAAkW,EAAAxV,UA+BRV,MAAA,GAAAA,MAAA,QAAA+Y,EAAA,MAAA3C,EAAA,KAAAA,EAAA4C,eAAAxD,IAAAuD,IAAA/Y,MAAA,GAAAsI,IAImBtI,MAAA,GACDA,MADC,cAAAoW,GAAA,MAAAA,EAAAhR,QAAA,KAAAgR,EAAAhR,QAAAxE,KACDZ,CADoC,iBAAAiZ,EAAA,MAAA7C,GAAA,MAAAA,EAAAhR,SAAA,MAAAgR,EAAAhR,QAAAqT,gBAAA,KAAArC,EAAAhR,QAAAqT,gBAAAS,iBAAA1D,IAAAyD,IAAAjZ,MAAA,GAAAsI,KC9F/C,IAAM6Q,GAAqB,MAA5B,MAAOA,UAA6BC,KAUtClX,YACImX,EACQC,EACAtY,GAERuY,MAAMF,GAHE3W,KAAA4W,WACA5W,KAAA1B,QAXZ0B,KAAAL,eAAcmX,OAAwB,MACtC9W,KAAAwU,iBAAgBsC,OAA6B,IAC7C9W,KAAAhC,UAAS8Y,OAAiB,IAE1B9W,KAAA0U,MAAQ,CAAEqC,QAAW,cAAeC,SAAY,WAAYC,OAAU,OAAQhX,MAAS,OAAQC,IAAO,WACtGF,KAAA/B,UAAY,CAAEgC,MAAS,OAAQC,IAAO,WACtCF,KAAAiW,kBAA6B,EAQ7B,CAEMiB,cAAW,IAAAC,MAAAN,MAAAK,YAAAjQ,EAAAjH,KAAA,SAAAkH,KAAA,YACbiQ,IAAAC,KAAAnQ,GACAoQ,KAAaC,OAAQ,EAFR,EAGjB,CAEAC,WACkC,MAA1BvX,MAAMwX,MAAM1T,YAEhB9D,KAAKyT,WAAWzT,KAAKwX,KAAK1T,WAC9B,CAEAgQ,mBAAmBjW,EAAeoB,GAC9Be,KAAKiW,kBAAkBpY,GAASoB,EAChCe,KAAKL,YAAYwD,IAAIkN,gBAAgBrQ,KAAKL,eAE9C,CAEM8T,WAAW3P,GAA2B,IAAA2T,EAAAzX,KAAA,SAAAkH,KAAA,YACxCuQ,EAAK5B,YAAcpP,KAAY3D,IAAkC,QAAQ4U,WACzEL,KAAalU,IAAIW,GACjB2T,EAAK9X,YAAYwD,IAAIW,GACrB2T,EAAKnZ,MAAMqZ,SAAS7T,EAAWpB,QAAQxE,MACvCuZ,EAAKjD,cAAcrR,IAAIW,EAAWpB,QAAQkV,WAC1CH,EAAKzZ,OAAOmF,IAAIW,GAAYpB,SAAS1E,OAAO8C,OAAO,CAACG,EAAG8N,IAAMA,EAAI,IACjE9I,eAAe,KACX4R,KAAIC,MAAMC,KAASC,iBAAiBlU,EAAWpB,UAC/C+U,EAAKb,SAAS5T,cAAY,GAE9ByU,EAAKb,SAAS5T,cAAe,EAXW,EAY5C,CAACmB,SAAAnE,KAAA,mBAAAoE,iBA/CQqS,GAAoBnZ,MAAA+G,MAAA/G,mBAAAmH,OAAA,EAAAN,SAAAnE,KAAA,UAAA0E,EAAAC,IAAA,MAApB8R,EAAoB7R,UAAA,uBAAAqD,YAAA,EAAAC,SAAA,CAAA5K,MAFlB,CAAC2a,QAAgC3a,aAAA6K,MAAA,EAAAC,KAAA,EAAAC,OAAA,ugDAAAC,SAAA,SAAAxD,EAAAC,MAAA,EAAAD,GD/DhDxH,MAAA,EAAA4a,GAAA,kBAAA5a,OAAAqT,EAAA5L,EAAApF,eAAA,KAAAgR,mBCkDQ3E,KAAY5G,UACZuI,GAAiBtI,UAAAG,KAAAqD,IAAAsP,KAAAC,KAAAC,GAAAC,GAAAC,GAAAC,IAAAC,KACjB5S,GACAuH,GACArE,GACA2P,KACAnZ,IAA4BkG,OAAA,44SAAAC,gBAAA,WASvB+Q,CAAqB,wEChD3B,IAAMkC,EAAwB,MAA/B,MAAOA,UAAgCC,IAazCrB,WACIV,MAAMU,WACNvX,KAAK6Y,IAAM7Y,KAAK8Y,SAASD,IACzB7Y,KAAK6Y,IAAME,OAAO/Y,KAAK6Y,MAAsB,IAAb7Y,KAAK6Y,IAAY7Y,KAAK6Y,IAAM7Y,KAAK6Y,IAAM,KACvE7Y,KAAKgZ,aAAehZ,KAAK8Y,SAASE,aAClChZ,KAAKgZ,aAAgBD,OAAO/Y,KAAKgZ,eAAwC,IAAtBhZ,KAAKgZ,aAAqBhZ,KAAKgZ,aAAehZ,KAAKgZ,aAAe,IAEzH,CAAC7U,SAAAnE,KAAA,4DApBQ2Y,KAAuBvU,GAAvBuU,EAAuB,GAoB/B,GApB+BxU,SAAAnE,KAAA,UAAAiZ,EAAAtU,IAAA,MAAvBgU,EAAuB/T,UAAA,2BAAAsU,SAAA,EAAAC,aAAA,SAAArU,EAAAC,GAAA,EAAAD,GAAvBxH,MAAA,QAAAyH,EAAA8T,IAAAvb,CAAuB,wBAAAyH,EAAAiU,4ICjBpC1b,MAAA,qCAA0BA,MAAA,aAAAyH,EAAA1F,OAAA,KAAA0F,EAAA1F,smBDiBbsZ,CAAwB,mGEF9B,IAAM3K,EAAa,MAApB,MAAOA,EAAa7J,SACfnE,KAAAoZ,WAAa,CAAEC,eAAkBV,KAAyBxU,SAAAnE,KAAA,mBAAAoE,iBADxD4J,EAAa,EAAA7J,SAAAnE,KAAA,UAAAiZ,EAAAxL,GAAA,MAAbO,IAAa7J,SAAAnE,KAAA,UAAAiZ,EAAAvL,IAAA,UALlB1B,KACAkC,cAIKF,CAAa,iFCHnB,IAAM0I,EAAQ,MAAf,MAAOA,EAGTlX,YACc8Z,GAAAtZ,KAAAsZ,SAEVtZ,KAAKuZ,cAAgB,GACrBvZ,KAAKwX,KAAOxX,KAAKsZ,QAAQE,UAAU1P,MAAMwM,SAASkB,KAClDxX,KAAKuZ,cAAcjN,KAAKtM,KAAKsZ,OAAOxP,KAAKjJ,QAAK4Y,KAAK,IAAIC,UAAU5P,IAC7D9J,KAAKwX,KAAO1N,GAAMwM,SAASkB,KAC3BxX,KAAKuX,UAAQ,GAErB,CACAA,WAAY,CACZL,cACIlX,KAAKuZ,cAAcnS,QAAQuS,IACf,MAALA,IAAcA,EAAEC,QACnBD,EAAEE,aAAW,EAErB,CAAC1V,SAAAnE,KAAA,mBAAAoE,iBAnBQsS,GAAQpZ,MAAA+G,MAAA,EAAAF,SAAAnE,KAAA,UAAA8Z,EAAAnV,IAAA,MAAR+R,EAAQ9R,UAAA,gBAAAqD,YAAA,EAAAC,SAAA,CAAA5K,OAAA6K,MAAA,EAAAC,KAAA,EAAAE,SAAA,SAAAxD,EAAAC,GAAA,EAAAgV,aAAA,CAJP/N,MAAYgO,cAAA,WAIbtD,CAAQ","names":["i0","$event","_r1","ctx_r1","selectPrice","target","checked","index","simpleProduct","id","images","mainQuery","name","simplePrice","salesPrice","variant_r5","title","replace","ɵ$index_41_r6","ɵ$count_41_r7","_r4","openCustomizer","AccessoryCustomizerComponent_Conditional_1_Conditional_0_For_10_Template","_forTrack0","product_r8","imgUrl","variation","price","AccessoryCustomizerComponent_Conditional_1_Conditional_0_Template","_r3","tmp_1_0","layout","uuid","AccessoryCustomizerComponent","constructor","_detector","_router","_customizer","baseUrl","catalog","_elm","_location","this","rmode","rxy","Uuid","create","input","priceTranslateKey","EventEmitter","MarketSegment","isPrivateCustomer","workerResponse","toSignal","response$","pipe","filter","a","tap","_","_response","loading$","map","computed","resp","accessoryLayout","afterNextRender","selected","pid","main","searchKey","UrlUtil","ACCESSORY_VARIATION_PREFIX","_url","URL","globalThis","location","href","searchParams","has","Customizer","reHydrate","then","isSimple","product","split","length","total","get","postMessage","markForCheck","prefix","window","set","delete","emit","url","SerializerUtil","serialize","replaceState","getCurrentNavigation","isSelcted","dialog","updateUrl","customizer","path","nativeElement","querySelector","showModal","static","__ngFactoryType__","i1","CUSTOMIZER","BASE_URL","LANGUAGE","i2","core","VBU","selectors","viewQuery","rf","ctx","CustomizerDialogComponent","AccessoryCustomizerComponent_Conditional_0_Template","AccessoryCustomizerComponent_Conditional_1_Template","MediaModule","i3","i4","PricePipe","TranslateModule","i5","styles","changeDetection","product_r1","_c0","UpsellModalComponent","upsell","ids","upsellIds","queueMicrotask","loadUpsell","_language","_searchClient","SearchClient","basketLink","Object","entries","StorageUtil","find","alias","innerWidth","showCount","console","log","detectChanges","_this","_asyncToGenerator","idsLength","forEach","_ids","searchResp","search","size","tags","from","catch","error","handleError","products","results","inputs","standalone","features","decls","vars","consts","template","UpsellModalComponent_For_15_Template","DialogModule","ProductCardComponent","CarouselSimpleComponent","TagManagerModule","RouterModule","i6","options_r1","ProductContactFormComponent","formElm","formDialog","note","translatePrefix","tag","placeholder","formInputs","autocomplete","type","attributes","required","novalidate","state","_send","data","FormData","request","firstName","lastName","email","comment","company","telephone","fetch","method","headers","body","JSON","stringify","submit","checkValidity","PromiseUtils","retryWeb","reset","setTimeout","close","inputEvent","Event","bubbles","querySelectorAll","elm","dispatchEvent","ProductContactFormComponent_For_18_Template","ProductContactFormComponent_Conditional_26_Template","ProductContactFormComponent_Conditional_27_Template","ProductContactFormComponent_Conditional_28_Template","InputComponent","InputDirective","CommonModule","ListPricesPipe","transform","priceArray","quantityPrices","quantity","push","totalSalesPrice","listPrice","currency","amount","unit","EJ8","pure","PriceDiffPipe","value","diffPrice","_c2","item_r1","_c1","ProductPriceMatrixComponent","unitPriceTitleTranlationKey","ProductPriceMatrixComponent_For_31_Template","PipeModule","TooltipModule","$C","G2t","ProductPageModule","SplashModule","VarModule","ReactiveFormsModule","BreadcrumbsModule","UspBulkModule","RelatedProductsElementModule","GridModule","CustomizerModule","NavigationModule","SearchLinksComponent_a_0_span_1_Template","link_r1","link","toString","includes","SearchLinksComponent","_links","promiseLinks","links","linkTrack","i","options","brand","SEARCH_PREFIX","designer","FACET_PREFIX","PageUtils","loadSearchLink","key","SearchLinksComponent_a_0_Template","_total_r1","ProductPriceComponent_Conditional_0_span_5_Template","ProductPriceComponent_Conditional_0_span_10_Template","_c3","_product_r3","deliveryTimeMin","deliveryTimeMax","ProductPriceComponent","_total","update","addtions","_addtions","structuredClone","p","total$","ngContentSelectors","ProductPriceComponent_Conditional_0_Template","ProductPriceComponent_Conditional_1_Template","tmp_0_0","ProductQuantityComponent","basketService","notificationService","pressedNumber","DomUtils","pastedNumber","onSubmit","e","preventDefault","_minTime","_timeout","loading","Promise","res","rej","_form","replaces","REPLACE_PREFIX","saleUnitSize","groupLine","sku","lines","getAll","line","createLines","next","text","color","backgroundColor","position","duration","list","Array","startsWith","undefined","pop","clearTimeout","NOTIFICATION","tmp_2_0","indicator_r1","textColor","ProductPageComponent_Conditional_0_For_5_div_0_Template","display","discount_r2","ctx_r3","setProduct","customizer_r5","ɵ$index_54_r7","_r6","$index","addAdditionalPrice","indicator_r9","ProductPageComponent_Conditional_0_For_35_div_0_Template","spec_r10","ProductPageComponent_Conditional_0_details_39_ng_container_5_Template","specifications","downloadable_r12","label","ProductPageComponent_Conditional_0_Conditional_46_For_6_Template","_forTrack2","downloadables","image_r13","query","ProductPageComponent_Conditional_0_For_51_Conditional_0_Template","ProductPageComponent_Conditional_0_For_51_Conditional_1_Template","ProductPageComponent_Conditional_0_For_51_Conditional_2_Template","$index_r14","tmp_12_0","ProductPageComponent_Conditional_0_For_5_Template","ProductPageComponent_Conditional_0_For_8_Template","_forTrack1","ProductPageComponent_Conditional_0_Conditional_18_Template","ProductPageComponent_Conditional_0_For_25_Template","ProductPageComponent_Conditional_0_For_35_Template","ProductPageComponent_Conditional_0_app_product_quantity_36_Template","ProductPageComponent_Conditional_0_details_39_Template","ProductPageComponent_Conditional_0_Conditional_46_Template","ProductPageComponent_Conditional_0_For_51_Template","ProductPageComponent_Conditional_0_For_53_Template","indicators","discounts","breadcrumbs","shortDescription","relatedProducts","optional","additionalPrices$","onlyAvailableInStores","longDescription","tmp_27_0","tmp_30_0","content","tmp_32_0","crosssell","ProductPageComponent","PageBase","route","detector","super","signal","bgcolor","rsampler","format","ngOnDestroy","_superprop_getNgOnDestroy","call","ProductStore","clear","ngOnInit","page","_this2","breadcrumb","setTitle","documents","GA4","track","MapToGA4","mapProductToView","CatalogContentAndSearchResolver","ProductPageComponent_Conditional_0_Template","i7","i8","i9","i10","i11","i12","i13","IndicatorSortPipe","UspBulkElementComponent","SettingsSetterDirective","gap","settings","isNaN","contentWidth","_angular_core__WEBPACK_IMPORTED_MODULE_2__","hostVars","hostBindings","components","uspBulkElement","_route","subscriptions","snapshot","skip","subscribe","s","closed","unsubscribe","_angular_core__WEBPACK_IMPORTED_MODULE_1__","dependencies","encapsulation"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./src/business/customizer/components/accessory-customizer/accessory-customizer.component.html","./src/business/customizer/components/accessory-customizer/accessory-customizer.component.ts","./src/commerce/upsell-modal/upsell-modal.component.html","./src/commerce/upsell-modal/upsell-modal.component.ts","./src/app/product-page/components/product-contact-form/product-contact-form.component.html","./src/app/product-page/components/product-contact-form/product-contact-form.component.ts","./src/app/product-page/components/product-price-matrix/list-prices.pipe.ts","./src/app/product-page/components/product-price-matrix/price-diff.pipe.ts","./src/app/product-page/components/product-price-matrix/product-price-matrix.component.html","./src/app/product-page/components/product-price-matrix/product-price-matrix.component.ts","./src/layout/tooltip/tooltip.module.ts","./src/app/product-page/product-page.module.ts","./src/app/product-page/components/search-links/search-links.component.html","./src/app/product-page/components/search-links/search-links.component.ts","./src/app/product-page/components/product-price/product-price.component.html","./src/app/product-page/components/product-price/product-price.component.ts","./src/app/product-page/components/product-quantity/product-quantity.component.ts","./src/app/product-page/components/product-quantity/product-quantity.component.html","./src/app/product-page/product-page.component.html","./src/app/product-page/product-page.component.ts","./src/business/grid/usp-bulk/usp-bulk.component.ts","./src/business/grid/usp-bulk/usp-bulk.component.html","./src/business/grid/usp-bulk/usp-bulk.module.ts","./src/core-lib/navigation/base-page.ts"],"sourcesContent":["@if(isSimple) {\n \n
\n
\n {{ simpleProduct?.name }}\n\n
\n
{{ simplePrice?.salesPrice| price }}
\n
\n}\n@else {\n @if(layout(); as product) {\n \n \n }\n \n\n}\n","import { Location } from '@angular/common';\nimport { afterNextRender, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, ElementRef, EventEmitter, Inject, Input, input, Output, Signal, ViewChild } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { Price } from 'src/business/services/client.generated';\nimport { BASE_URL, LANGUAGE } from 'src/core-lib/misselaineous/boot.tokens';\nimport { PricePipe } from 'src/core-lib/pipes/price.pipe';\nimport { MediaModule } from 'src/layout/media/media.module';\nimport { MarketSegment } from 'src/utils/market-segment.util';\nimport { SerializerUtil } from 'src/utils/serializer.util';\nimport { UrlUtil } from 'src/utils/url.util';\nimport { Uuid } from 'src/utils/uuid.util';\nimport { Customizer, CustomizerAccessoryLayout, CustomizerRequest, CustomizerResponse, CustomizerSelected, Discount, Money, ProductModel, QuantityPrice } from '../../model';\nimport { CUSTOMIZER, CustomizerWorkerSubject } from '../../token';\nimport { CustomizerDialogComponent } from '../customizer-dialog/customizer-dialog.component';\nimport { filter, map, tap, } from 'rxjs';\n\n\n@Component({\n selector: 'app-accessory-customizer',\n standalone: true,\n imports: [MediaModule, CustomizerDialogComponent, PricePipe, TranslateModule],\n templateUrl: './accessory-customizer.component.html',\n styleUrl: './accessory-customizer.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n})\nexport class AccessoryCustomizerComponent {\n mainQuery = { \"rmode\": 'crop', \"rxy\": '0.5,0.5' };\n uuid = Uuid.create();\n id = input(null)\n @Input() index: number;\n loading$: Signal;\n layout: Signal;\n priceTranslateKey = 'PRODUCT.PRICE_POST_EX_VAT';\n @Output() price = new EventEmitter()\n private _response: CustomizerResponse;\n @ViewChild(CustomizerDialogComponent) dialog: CustomizerDialogComponent;\n\n checked: boolean;\n isSimple: boolean;\n simplePrice: { id?: string; listPrice?: Money; salesPrice?: Money; vatAmount?: Money; vatRate?: number; discounts?: Discount[]; quantityPrices?: { [key: string]: QuantityPrice; } | undefined; };\n simpleProduct: ProductModel;\n\n constructor(\n protected _detector: ChangeDetectorRef,\n protected _router: Router,\n @Inject(CUSTOMIZER)\n protected _customizer: CustomizerWorkerSubject,\n @Inject(BASE_URL)\n private baseUrl,\n @Inject(LANGUAGE)\n private catalog,\n private _elm: ElementRef,\n private _location: Location\n ) {\n this.priceTranslateKey = MarketSegment.isPrivateCustomer() ? 'PRODUCT.PRICE_POST_INCL_VAT' : 'PRODUCT.PRICE_POST_EX_VAT';\n\n let workerResponse = toSignal(this._customizer.response$.pipe(filter(a => a.id == this.uuid), tap(_ => this._response = _)));\n this.loading$ = toSignal(this._customizer.loading$.pipe(map(a => a[this.uuid])));\n\n this.layout = computed(() => {\n let resp = workerResponse();\n if (resp == null)\n return\n // // console.debug(resp)\n return resp.accessoryLayout\n })\n\n afterNextRender(() => {\n let selected = this.id();\n let pid = selected.main;\n let searchKey = UrlUtil.ACCESSORY_VARIATION_PREFIX + pid + `-${this.index}`;\n let _url = new URL(globalThis.location.href);\n this.checked = _url.searchParams.has(searchKey)\n Customizer.reHydrate({\n id: this.uuid,\n baseUrl,\n catalog,\n selected\n }).then(resp => {\n this.isSimple = (resp?.product?.id.split(',')[1] ?? '').length == 0;\n this.simplePrice = resp.total;\n this.simpleProduct = resp.product;\n if (!this.isSimple)\n if (this.checked)\n selected.main = pid + ',' + _url.searchParams.get(searchKey)\n this._customizer.postMessage({\n id: this.uuid,\n baseUrl,\n catalog,\n selected,\n } as CustomizerRequest)\n this._detector.markForCheck();\n });\n })\n }\n\n selectPrice(checked: boolean = this.checked) {\n // console.debug(checked, this.checked)\n this.checked = checked;\n if (this.isSimple) {\n let prefix = UrlUtil.ACCESSORY_VARIATION_PREFIX\n let _url = new URL(window.location.href);\n if (!checked)\n _url.searchParams.delete((prefix + this.id().main + `-${this.index}`), '');\n else\n _url.searchParams.set((prefix + this.id().main + `-${this.index}`), '');\n this.price.emit(checked ? this.simplePrice : null)\n\n let url = SerializerUtil.serialize(_url);\n this._location.replaceState(url);\n this._router.getCurrentNavigation();\n this._detector.markForCheck();\n } else {\n if (this?._response?.accessoryLayout == null)\n return;\n if (checked)\n this._response.accessoryLayout.isSelcted = true;\n this.dialog.updateUrl(this._response, !checked)\n this.price.emit(checked ? this._response.customizer.total : null)\n }\n }\n\n openCustomizer() {\n let customizer = this._response.customizer;\n let pid = customizer.product.id.split(',')[0]\n this._customizer.postMessage({\n customizer: customizer,\n id: this.uuid,\n selected: this.id(),\n baseUrl: this.baseUrl,\n catalog: this.catalog,\n path: [pid]\n });\n this._elm.nativeElement.querySelector('dialog').showModal();\n }\n}\n","\n
\n {{ title }}\n

\n {{ 'UPSELL.ADDED_TO_BASKET' | translate }}\n \n

\n
\n\n
\n

{{ 'UPSELL.LIST_TITLE' | translate }}

\n \n @for (product of products; track product.id) {\n \n }\n \n
\n
\n\n \n \n {{ 'UPSELL.TO_BASKET' | translate }}\n \n\n
\n
\n","import { afterNextRender, ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, OnInit } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ProductCardComponent } from 'src/business/product/components/product-card/product-card.component';\nimport { ProductCardModel, SearchClient, SpecificationGroupSearchProductResponseOfProductCardModel } from 'src/business/services/client.generated';\nimport { BASE_URL, LANGUAGE } from 'src/core-lib/misselaineous/boot.tokens';\nimport { TagManagerModule } from 'src/externals/tag-manager/tag-manager.module';\nimport { CarouselSimpleComponent } from 'src/layout/carousel/carousel-simple.component';\nimport { DialogModule } from 'src/layout/dialog/dialog.module';\nimport { MediaModule } from 'src/layout/media/media.module';\nimport { StorageUtil } from 'src/utils/storage.util';\n\n@Component({\n selector: 'app-upsell-modal',\n standalone: true,\n imports: [DialogModule, ProductCardComponent, CarouselSimpleComponent, TranslateModule, MediaModule, TagManagerModule, RouterModule],\n templateUrl: './upsell-modal.component.html',\n styleUrl: './upsell-modal.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UpsellModalComponent {\n private _searchClient: SearchClient;\n\n @Input()\n title: string;\n upsellIds: string[][];\n idsLength: number;\n basketLink?: string;\n\n @Input()\n set upsell(ids: string[]) {\n this.upsellIds = ids.map(id => [id]);\n queueMicrotask(() => this.loadUpsell(ids.map(id => [id])));\n }\n showCount:number;\n products: ProductCardModel[];\n constructor(\n @Inject(BASE_URL)\n baseUrl: string,\n @Inject(LANGUAGE)\n private _language: string,\n private _detector: ChangeDetectorRef,\n ) {\n this._searchClient = new SearchClient(baseUrl);\n this.basketLink = Object.entries(StorageUtil.get('routing')).find(([url,alias]) => alias === 'basketPage')[0] ?? null;\n afterNextRender(() => {\n if(globalThis.innerWidth > 400) {\n this.showCount = 3;\n console.log('hit',this.showCount)\n } else {\n this.showCount = 1.5;\n }\n this._detector.detectChanges();\n })\n }\n\n async loadUpsell(ids: string[][]) {\n this.idsLength = 0;\n ids.forEach(_ids => this.idsLength += _ids.length);\n var searchResp: SpecificationGroupSearchProductResponseOfProductCardModel = await this._searchClient\n .search(this._language, {\n size: this.idsLength,\n tags: ids,\n from: 0,\n })\n .catch(error => this.handleError(error));\n\n this.products = searchResp.results;\n\n this._detector.markForCheck();\n }\n private handleError(error: any): SpecificationGroupSearchProductResponseOfProductCardModel {\n console.error(error)\n return { results: [] }\n }\n\n\n}\n","\n\n \n
\n {{ 'PRODUCT_CONTACT_FORM.TITLE'|translate }}\n {{ 'PRODUCT_CONTACT_FORM.DESCRIPTION'|translate }}\n
\n {{ 'PRODUCT_CONTACT_FORM.PRE_FORM'|translate }}\n
\n @for (options of formInputs; track $index) {\n \n \n \n }\n
\n
\n {{ 'PRODUCT_CONTACT_FORM.PRE_NOTE'|translate }}\n \n \n \n \n {{ 'PRODUCT_CONTACT_FORM.POST_BUTTON'|translate }}\n
\n
\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { PromiseUtils } from 'src/business/promise.util';\nimport { SendProductInquiryRequestBody } from 'src/business/services/client.generated';\nimport { InputDirective } from 'src/commerce/forms/input.directive';\nimport { InputComponent } from 'src/commerce/forms/input/input.component';\nimport { StandardForms } from 'src/commerce/forms/standard-inputs';\nimport { BASE_URL, LANGUAGE } from 'src/core-lib/misselaineous/boot.tokens';\nimport { DialogModule } from 'src/layout/dialog/dialog.module';\nimport { MediaModule } from 'src/layout/media/media.module';\n\n@Component({\n selector: 'app-product-contact-form',\n standalone: true,\n imports: [InputComponent, InputDirective, CommonModule, TranslateModule, DialogModule, MediaModule],\n templateUrl: './product-contact-form.component.html',\n styleUrl: './product-contact-form.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ProductContactFormComponent {\n note = {\n name: 'comment',\n translatePrefix: 'PRODUCT_CONTACT_FORM.NOTE',\n tag: 'textarea',\n placeholder: 'PRODUCT_CONTACT_FORM.NOTE.PLACEHOLDER',\n } as StandardForms.InputModel;\n formInputs = [\n\n {\n name: 'firstName',\n translatePrefix: 'PRODUCT_CONTACT_FORM.FIRST_NAME',\n placeholder: 'PRODUCT_CONTACT_FORM.FIRST_NAME.PLACEHOLDER',\n autocomplete: 'given-name',\n type: 'text',\n tag: 'input',\n attributes: {\n required: true,\n novalidate: ''\n },\n },\n {\n name: 'lastName',\n translatePrefix: 'PRODUCT_CONTACT_FORM.LAST_NAME',\n placeholder: 'PRODUCT_CONTACT_FORM.LAST_NAME.PLACEHOLDER',\n autocomplete: 'family-name',\n type: 'text',\n tag: 'input',\n attributes: {\n required: true,\n novalidate: ''\n },\n },\n {\n name: 'email',\n translatePrefix: 'PRODUCT_CONTACT_FORM.EMAIL',\n placeholder: 'PRODUCT_CONTACT_FORM.EMAIL.PLACEHOLDER',\n autocomplete: 'email',\n type: 'email',\n tag: 'input',\n attributes: {\n required: true,\n novalidate: ''\n },\n },\n {\n name: 'telephone',\n translatePrefix: 'PRODUCT_CONTACT_FORM.PHONE',\n placeholder: 'PRODUCT_CONTACT_FORM.PHONE.PLACEHOLDER',\n autocomplete: 'tel',\n type: 'tel',\n tag: 'input',\n attributes: {\n required: true,\n novalidate: ''\n },\n },\n {\n name: 'company',\n translatePrefix: 'PRODUCT_CONTACT_FORM.COMPANY',\n placeholder: 'PRODUCT_CONTACT_FORM.COMPANY.PLACEHOLDER',\n autocomplete: 'organization',\n type: 'text',\n tag: 'input',\n },\n ] as Array;\n state: string = 'INITIAL';\n get formElm(): HTMLFormElement {\n return window['product-contact-form']\n }\n get formDialog(): HTMLFormElement {\n return window['product-contact-dialog']\n }\n constructor(\n @Inject(LANGUAGE)\n private catalog: string,\n @Inject(BASE_URL)\n private baseUrl: string,\n private _detector: ChangeDetectorRef,\n ) {\n\n }\n private _send() {\n let data = new FormData(this.formElm);\n let request: SendProductInquiryRequestBody = {\n firstName: data.get('firstName') as string,\n lastName: data.get('lastName') as string,\n email: data.get('email') as string,\n comment: data.get('comment') as string,\n company: data.get('company') as string,\n telephone: data.get('telephone') as string,\n url: window.location.href,\n }\n return fetch(new URL(`/api/${this.catalog}/product/inquiry`, this.baseUrl).href, {\n method: 'post',\n headers: { \"Content-Type\": \"application/json\", },\n body: JSON.stringify(request)\n });\n }\n submit() {\n if (this.formElm.checkValidity()) {\n PromiseUtils\n .retryWeb(() => this._send())\n .then(() => {\n this.formElm.reset();\n this.state = 'SUCCESS';\n this._detector.markForCheck();\n setTimeout(() => {\n this.state = 'INITIAL';\n this.formDialog.close();\n this._detector.markForCheck();\n }, 2000);\n }, () => {\n this.state = 'FAILED';\n this._detector.markForCheck();\n setTimeout(() => {\n this.state = 'INITIAL';\n this._detector.markForCheck();\n }, 5000);\n });\n }\n else {\n var inputEvent = new Event('input', {\n bubbles: true,\n });\n this.formElm\n .querySelectorAll('input,textarea,select')\n .forEach((elm: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement) => elm.dispatchEvent(inputEvent));\n }\n return false;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CustomizerModel, Price } from 'src/business/services/client.generated';\n\n@Pipe({\n name: 'listPrices',\n standalone: true\n})\nexport class ListPricesPipe implements PipeTransform {\n\n transform(customizer: CustomizerModel): Array<{ total: Price, unit: Price, quantity: string }> {\n let priceArray: Array<{ total: Price, unit: Price, quantity: string }> = [];\n if (customizer?.total?.quantityPrices != null)\n Object\n .entries(customizer.total.quantityPrices)\n .forEach(([quantity, price]) =>\n priceArray\n .push({\n quantity,\n total: { salesPrice: price.totalSalesPrice, listPrice: { currency: price.listPrice.currency, amount: price.listPrice.amount * +quantity } },\n unit: { salesPrice: price.salesPrice, listPrice: price.listPrice }\n })\n )\n return priceArray;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Money, Price } from 'src/business/services/client.generated';\n\n@Pipe({\n name: 'priceDiff',\n standalone: true\n})\nexport class PriceDiffPipe implements PipeTransform {\n\n transform(value: Price): Money {\n let diffPrice = { amount: 0, currency: value?.listPrice?.currency ?? 'XXX' } as Money;\n diffPrice.amount = (value?.listPrice?.amount ?? 0) - ((value?.salesPrice?.amount ?? 0));\n return diffPrice;\n }\n\n}\n","\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n @for (item of customizer | listPrices; track $index) {\n \n \n \n \n \n \n }\n \n
{{ 'PRODUCT.PRICE_MATRIX_QUANTITY_TITLE' | translate }}{{ unitPriceTitleTranlationKey | translate }}{{ 'PRODUCT.PRICE_MATRIX_UNIT_DISCOUNT_TITLE' | translate }}{{ 'PRODUCT.PRICE_MATRIX_TOTAL_PRICE_TITLE' | translate }}
{{ 'PRODUCT.PRICE_MATRIX_UNIT' | translate: {quantity:1} }}{{ customizer?.total?.salesPrice| price:{showZeroValue:true} }}{{ customizer?.total | priceDiff | price:{showZeroValue:true} }}{{ customizer?.total?.salesPrice| price:{showZeroValue:true} }}
{{ 'PRODUCT.PRICE_MATRIX_UNIT' | translate: {quantity:item.quantity} }}{{ item?.unit.salesPrice | price:{showZeroValue:true} }}{{ item?.unit | priceDiff| price:{showZeroValue:true} }}{{ item?.total.salesPrice| price:{showZeroValue:true} }}
\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CustomizerModel } from 'src/business/services/client.generated';\nimport { PipeModule } from 'src/core-lib/pipes/pipe.module';\nimport { MarketSegment } from 'src/utils/market-segment.util';\nimport { ListPricesPipe } from './list-prices.pipe';\nimport { PriceDiffPipe } from './price-diff.pipe';\n\n@Component({\n selector: 'app-product-price-matrix',\n standalone: true,\n imports: [TranslateModule, PipeModule, ListPricesPipe, PriceDiffPipe],\n templateUrl: './product-price-matrix.component.html',\n styleUrl: './product-price-matrix.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ProductPriceMatrixComponent {\n @Input()\n customizer: CustomizerModel;\n unitPriceTitleTranlationKey = \"PRODUCT.PRICE_MATRIX_UNIT_PRICE_EXVAT_TITLE\";\n constructor(private _detector: ChangeDetectorRef) {\n\n\n this.unitPriceTitleTranlationKey = MarketSegment.isPrivateCustomer() ? 'PRODUCT.PRICE_MATRIX_UNIT_PRICE_VAT_TITLE' : \"PRODUCT.PRICE_MATRIX_UNIT_PRICE_EXVAT_TITLE\";\n this._detector.markForCheck();\n\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TooltipComponent } from './tooltip.component';\n\n\n\n@NgModule({\n declarations: [\n TooltipComponent\n ],\n imports: [\n CommonModule\n ],\n exports: [\n TooltipComponent\n ]\n})\nexport class TooltipModule { }\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CustomizerModule } from 'src/business/customizer/customizer.module';\nimport { RelatedProductsElementModule } from 'src/business/grid/related-products/related-products.module';\nimport { UspBulkModule } from 'src/business/grid/usp-bulk/usp-bulk.module';\nimport { ProductCardComponent } from 'src/business/product/components/product-card/product-card.component';\nimport { NavigationModule } from 'src/core-lib/navigation/navigation.module';\nimport { PipeModule } from 'src/core-lib/pipes/pipe.module';\nimport { VarModule } from 'src/core-lib/var/var.module';\nimport { TagManagerModule } from 'src/externals/tag-manager/tag-manager.module';\nimport { BreadcrumbsModule } from 'src/layout/breadcrumbs/breadcrumbs.module';\nimport { GridModule } from 'src/layout/grid/grid.module';\nimport { MediaModule } from 'src/layout/media/media.module';\nimport { SplashModule } from 'src/layout/splash/splash.module';\nimport { TooltipModule } from 'src/layout/tooltip/tooltip.module';\nimport { ProductDisclaimerComponent } from './components/product-disclaimer/product-disclaimer.component';\nimport { ProductGalleryComponent } from './components/product-gallery/product-gallery.component';\nimport { ProductInqueryComponent } from './components/product-inquery/product-inquery.component';\nimport { ProductPriceComponent } from './components/product-price/product-price.component';\nimport { ProductQuantityComponent } from './components/product-quantity/product-quantity.component';\nimport { RelatedProductsComponent } from './components/related-products/related-products.component';\nimport { SearchLinksComponent } from './components/search-links/search-links.component';\nimport { DatespanPipe } from './pipes/datespan.pipe';\nimport { HasNoCustomizerPipe } from './pipes/has-no-customizer.pipe';\nimport { ToGalleryPipe } from './pipes/to-gallery.pipe';\nimport { ToSearchLinkPipe } from './pipes/to-search-link.pipe';\n\n\n\n@NgModule({\n declarations: [\n DatespanPipe,\n ToSearchLinkPipe,\n ProductGalleryComponent,\n ToGalleryPipe,\n SearchLinksComponent,\n RelatedProductsComponent,\n ProductPriceComponent,\n ProductQuantityComponent,\n ProductInqueryComponent,\n ProductDisclaimerComponent,\n HasNoCustomizerPipe,\n ],\n exports: [\n DatespanPipe,\n ToSearchLinkPipe,\n PipeModule,\n SplashModule,\n VarModule,\n ReactiveFormsModule,\n BreadcrumbsModule,\n UspBulkModule,\n MediaModule,\n TranslateModule,\n RelatedProductsElementModule,\n GridModule,\n TooltipModule,\n CustomizerModule,\n NavigationModule,\n TagManagerModule,\n DatespanPipe,\n ToSearchLinkPipe,\n ProductGalleryComponent,\n ToGalleryPipe,\n SearchLinksComponent,\n RelatedProductsComponent,\n ProductPriceComponent,\n ProductQuantityComponent,\n ProductInqueryComponent,\n ProductDisclaimerComponent,\n ProductCardComponent,\n HasNoCustomizerPipe\n ],\n imports: [\n CommonModule,\n PipeModule,\n SplashModule,\n VarModule,\n ReactiveFormsModule,\n BreadcrumbsModule,\n ProductCardComponent,\n UspBulkModule,\n MediaModule,\n TranslateModule,\n RelatedProductsElementModule,\n GridModule,\n TooltipModule,\n CustomizerModule,\n NavigationModule,\n TagManagerModule,\n ]\n})\nexport class ProductPageModule {\n\n}\n","{{'PRODUCT.PRODUCER' | translate }} {{ link.title }}\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\nimport { ProductModel } from 'src/business/customizer/model';\nimport { PageUtils } from 'src/utils/storage.util';\nimport { UrlUtil } from 'src/utils/url.util';\n\n\ntype SearchLink = { link: URL, title: string };\n\n@Component({\n selector: 'app-search-links',\n templateUrl: './search-links.component.html',\n styleUrls: ['./search-links.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SearchLinksComponent {\n @Input({\n alias: 'links',\n transform: (value: ProductModel) => {\n var options = { brand: UrlUtil.SEARCH_PREFIX , designer: UrlUtil.FACET_PREFIX + 'Designer' };\n return PageUtils.loadSearchLink().then(_url =>\n Object.entries(options).map(([key, searchKey]) => {\n let link = new URL(_url);\n let title = '';\n if (value != null && key in value)\n title = value[key];\n link.searchParams.set(searchKey, title);\n return { link, title };\n }).filter(link => link.title)\n );\n }\n }) set _links(promiseLinks: Promise>) {\n promiseLinks.then(links => {\n this.links = links;\n this._detector.markForCheck();\n });\n }\n links: Array;\n constructor(private _detector: ChangeDetectorRef) {}\n linkTrack(i: number, link: SearchLink) {\n return link.link.toString();\n }\n\n}\n","@if(total$; as _total) {\n {{ 'PRODUCT.PRICE_FOR_SCREEN_READER' | translate: { listPrice:(_total?.listPrice | price), salesPrice: (_total?.salesPrice | price) } }}\n _total?.salesPrice?.amount\">{{ _total?.listPrice | price }}\n {{ _total?.salesPrice | price }}\n _total?.salesPrice?.amount\">{{ {amount:_total?.listPrice?.amount - _total?.salesPrice?.amount, currency:_total?.salesPrice.currency} | price }}\n}\n@if(product(); as _product) {\n \n}\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, input, Input, OnInit, Signal } from '@angular/core';\nimport { Price, ProductModel } from 'src/business/services/client.generated';\nimport { MarketSegment } from 'src/utils/market-segment.util';\n\ntype Product = ProductModel & {\n deliveryTimeMin?: Date,\n deliveryTimeMax?: Date,\n}\n\n\n@Component({\n selector: 'app-product-price',\n templateUrl: './product-price.component.html',\n styleUrls: ['./product-price.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ProductPriceComponent {\n product = input();\n private _total: Price;\n private _addtions: Price[];\n @Input()\n set total(total: Price) {\n // console.debug(this._total, this._addtions)\n this._total = total;\n this.update();\n\n }\n @Input()\n set addtions(addtions: Price[]) {\n // console.debug(this._total, this._addtions)\n this._addtions = addtions;\n this.update();\n\n }\n priceTranslateKey = 'PRODUCT.PRICE_POST_EX_VAT';\n total$: Price;\n constructor(private _detector: ChangeDetectorRef) {\n this.priceTranslateKey = MarketSegment.isPrivateCustomer() ? 'PRODUCT.PRICE_POST_INCL_VAT' : 'PRODUCT.PRICE_POST_EX_VAT';\n\n }\n private update() {\n let _total = structuredClone(this._total);\n let _addtions = structuredClone(this._addtions);\n\n _addtions = _addtions ?? [];\n _addtions.forEach(p => {\n if (!p)\n return;\n _total.listPrice.amount += p.listPrice.amount;\n _total.salesPrice.amount += p.salesPrice.amount;\n })\n this.total$ = _total;\n this._detector.markForCheck()\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { BasketService } from 'src/app/checkout-page/services/basket.service';\nimport { NotificationModel } from 'src/app/notification/models/notification';\nimport { NOTIFICATION } from 'src/app/notification/tokens';\nimport { ProductModel } from 'src/business/customizer/model';\nimport { DomUtils } from 'src/utils/dom.util';\nimport { UrlUtil } from 'src/utils/url.util';\n\n\n\n@Component({\n selector: 'app-product-quantity',\n templateUrl: './product-quantity.component.html',\n styleUrls: ['./product-quantity.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ProductQuantityComponent {\n\n pressedNumber = DomUtils.pressedNumber;\n pastedNumber = DomUtils.pastedNumber;\n\n @Input() product: ProductModel;\n loading: boolean;\n\n constructor(\n private basketService: BasketService,\n private _detector: ChangeDetectorRef,\n @Inject(NOTIFICATION)\n private notificationService: ReplaySubject\n ) {}\n\n async onSubmit(e) {\n e.preventDefault();\n let _minTime: Promise | null = null;\n let _timeout = setTimeout(() => {\n this.loading = true;\n _minTime = new Promise((res, rej) => setTimeout(() => res(), 2000));\n this._detector.markForCheck();\n }, 1000);\n let _form = new FormData(window['product']);\n let replaces = new URL(window.location.href).searchParams.get(UrlUtil.REPLACE_PREFIX);\n let quantity = +_form.get('quantity') || this.product?.saleUnitSize || 1;\n let groupLine = { sku: _form.get('group')?.toString() ?? this.product.id, quantity };\n let lines = _form\n .getAll('line')\n .filter(_ => _ != null)\n .map(line => ({ sku: line?.toString() ?? '', quantity }));\n let resp = await this.basketService\n .createLines({ groupLine, replaces, lines })\n .catch((e) => {\n console.error(e)\n this.notificationService.next({\n title: 'Failed to add Product',\n text: e.toString(),\n color: 'var(--error-color, white)',\n backgroundColor: 'var(--error-background-color, red)',\n position: 'top-mid',\n duration: 5000\n });\n return null\n });\n let list = Array\n .from(_form.entries())\n .map(([key, sku]) => {\n if (!key.startsWith('accessory'))\n return\n else\n return { groupLine: { sku: sku as string, quantity: 1 }, lines: [], replaces: undefined }\n })\n .filter(_ => _);\n while (list.length > 0) {\n await this.basketService\n .createLines(list.pop())\n .catch((e) => {\n console.error(e)\n this.notificationService.next({\n title: 'Failed to add Product',\n text: e.toString(),\n color: 'var(--error-color, white)',\n backgroundColor: 'var(--error-background-color, red)',\n position: 'top-mid',\n duration: 5000\n });\n })\n }\n\n if (_minTime == null) {\n clearTimeout(_timeout);\n this.loading = false;\n } else\n _minTime.then(() => {\n clearTimeout(_timeout);\n this.loading = false;\n })\n if (resp != null && window['product-upsell'].querySelector('app-product-card'))\n window['product-upsell'].showModal();\n this._detector.markForCheck();\n }\n}\n\n\n","\n \n \n \n\n\n","@if(_customizer(); as customizer) {\n
\n
\n \n @for(indicator of customizer?.product?.indicators | indicatorSort; track indicator.text) {\n
{{ indicator.text }}
\n }\n @for(discount of customizer?.product?.price?.discounts; track discount.type) {\n
999\"\n [class.very-long-amount]=\"discount.amount > 99999\"\n position=\"Top\">-{{ discount.type == 'Amount' ? (discount | price) : discount.amount+'%' }}
\n }\n
\n
\n
\n \n

{{ customizer?.product?.name }}

\n \n

{{ customizer?.product?.shortDescription }}

\n
\n @if(customizer?.product.id.includes(',')) {\n
0 ? null : ''\">\n

{{ 'CUSTOMIZER.MAIN_TITLE' | translate }}

\n \n
\n }\n
0?null:''\">\n

{{ 'CUSTOMIZER.ACCESSORIES_TITLE' | translate }}

\n
\n @for (item of customizer.product.relatedProducts.optional; let index = $index; track index) {\n \n }\n
\n
\n
\n

{{ 'PRODUCT.PRICE_MATRIX_TITLE' | translate }}

\n \n
\n
\n \n \n @for(indicator of customizer?.product?.indicators; track indicator.text) {\n
\n
{{ indicator.text }}
\n
\n }\n \n \n
\n
\n
\n
0\">\n {{ 'PRODUCT.SPECS_LABEL' | translate }}\n
\n \n {{ spec.type }}\n {{ spec.value }} {{ spec?.unit }}\n \n
\n
\n
\n
\n {{ 'PRODUCT.DESCRIPTION_LABEL' | translate }}\n
\n
\n @if(downloadables()?.length > 0) {\n
\n
\n {{ 'PRODUCT.DOWNLOADS_LABEL' | translate }}\n @for(downloadable of downloadables(); track downloadable.id) {\n {{ downloadable.label }}\n }\n
\n }\n
\n
\n
\n
\n @for (image of images(); track image) {\n @if($index % 3 == 0) {\n \n } @else if ($index % 3 == 1) {\n \n } @else if ($index % 3 == 2) {\n \n }\n }\n
\n
\n
\n\n\n@for (item of (customizer?.content??[]); track $index) {\n \n}\n\n \n\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnChanges, OnInit, signal, SimpleChanges } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { Title } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\nimport { AccessoryCustomizerComponent } from 'src/business/customizer/components/accessory-customizer/accessory-customizer.component';\nimport { MapToGA4 } from 'src/business/Mapper/map-to-ga4-item';\nimport { IndicatorSortPipe } from 'src/business/product/pipes/indicator-sort.pipe';\nimport { CustomizerModel, DocumentModel, Price } from 'src/business/services/client.generated';\nimport { UpsellModalComponent } from 'src/commerce/upsell-modal/upsell-modal.component';\nimport { PageBase } from 'src/core-lib/navigation/base-page';\nimport { Breadcrumb } from 'src/core-lib/navigation/models/breadcrumb.interface';\nimport { ComponentPage } from 'src/core-lib/navigation/models/component-page.model';\nimport { CatalogContentAndSearchResolver } from 'src/core-lib/navigation/services/content.resolver';\nimport { GA4 } from 'src/externals/tag-manager/models/ga4.model';\nimport { ProductStore, StorageUtil } from 'src/utils/storage.util';\nimport { ProductContactFormComponent } from './components/product-contact-form/product-contact-form.component';\nimport { ProductPriceMatrixComponent } from './components/product-price-matrix/product-price-matrix.component';\nimport { ProductPage } from './product-page.model';\nimport { ProductPageModule } from './product-page.module';\n\ninterface Inquery {\n subject: string,\n firstName: string,\n lastName: string,\n email: string,\n phone: string,\n news: boolean,\n inquiry: string,\n}\n\nclass InquiryForm extends FormGroup {\n constructor() {\n super({\n subject: new FormControl(null),\n firstName: new FormControl('', Validators.required),\n lastName: new FormControl('', Validators.required),\n email: new FormControl('', [Validators.required, Validators.email]),\n phone: new FormControl('', []),\n news: new FormControl(false, []),\n inquiry: new FormControl(null, Validators.required),\n });\n }\n}\n\n\n@Component({\n selector: 'app-product-page',\n standalone: true,\n imports: [\n CommonModule,\n ProductPageModule,\n UpsellModalComponent,\n ProductPriceMatrixComponent,\n ProductContactFormComponent,\n IndicatorSortPipe,\n AccessoryCustomizerComponent,\n ],\n templateUrl: './product-page.component.html',\n styleUrls: [\n './product-page.component.scss'\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [CatalogContentAndSearchResolver]\n})\nexport class ProductPageComponent extends PageBase implements ComponentPage, OnInit {\n override page: ProductPage;\n _customizer = signal(null);\n downloadables = signal>([]);\n images = signal([]);\n breadcrumbs: Breadcrumb[];\n query = { 'bgcolor': 'transparent', 'rsampler': 'mitchell', 'format': 'webp', 'rmode': 'crop', 'rxy': '0.5,0.5' }\n mainQuery = { \"rmode\": 'crop', \"rxy\": '0.5,0.5' }\n additionalPrices$: Price[] = [];\n\n constructor(\n route: ActivatedRoute,\n private detector: ChangeDetectorRef,\n private title: Title,\n ) {\n super(route);\n }\n\n async ngOnDestroy() {\n super.ngOnDestroy();\n ProductStore.clear();\n }\n\n ngOnInit(): void {\n if (this?.page?.customizer == null)\n return\n this.setProduct(this.page.customizer);\n }\n\n addAdditionalPrice(index: number, price: Price) {\n this.additionalPrices$[index] = price;\n this._customizer.set(structuredClone(this._customizer())); // doesn't update unless customizer is updated. Why? I dunno and it bugs me\n // console.debug(this.additionalPrices$)\n }\n\n async setProduct(customizer: CustomizerModel) {\n this.breadcrumbs = StorageUtil.get<{ breadcrumb: Breadcrumb[] }>('page').breadcrumb;\n ProductStore.set(customizer);\n this._customizer.set(customizer);\n this.title.setTitle(customizer.product.name);\n this.downloadables.set(customizer.product.documents);\n this.images.set(customizer?.product?.images.filter((_, i) => i > 0));\n queueMicrotask(() => {\n GA4.track(MapToGA4.mapProductToView(customizer.product));\n this.detector.markForCheck();\n });\n this.detector.markForCheck();\n }\n}\n","import { ChangeDetectionStrategy, Component, HostBinding, Input, OnInit } from '@angular/core';\nimport { UmbracoGridElement } from 'src/layout/grid/models/umbraco-grid-element.interface';\nimport { GeneralElementSettings, SettingsSetterDirective } from '../../models/general-element-settings';\n\n\ninterface UspSettings extends GeneralElementSettings {\n gap: string;\n contentWidth: string;\n}\n\n\n@Component({\n selector: 'app-usp-bulk-element',\n templateUrl: './usp-bulk.component.html',\n styleUrls: ['./usp-bulk.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UspBulkElementComponent extends SettingsSetterDirective implements OnInit {\n @HostBinding('style.--gap')\n gap: string;\n\n @HostBinding('style.--inner-content-width')\n contentWidth: string;\n\n @Input()\n declare settings: UspSettings;\n\n @Input()\n layout?: { layout: UmbracoGridElement[] };\n\n ngOnInit() {\n super.ngOnInit();\n this.gap = this.settings.gap;\n this.gap = isNaN(+this.gap) || +this.gap === 0 ? this.gap : this.gap + 'px';\n this.contentWidth = this.settings.contentWidth;\n this.contentWidth = isNaN(+this.contentWidth) || +this.contentWidth === 0 ? this.contentWidth : this.contentWidth + 'px';\n // this.maxWidth = null;\n }\n}\n","\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { GridModule } from 'src/layout/grid/grid.module';\nimport { UspBulkElementComponent } from './usp-bulk.component';\n\n\n\n@NgModule({\n declarations: [UspBulkElementComponent],\n imports: [\n CommonModule,\n GridModule,\n ],\n exports: [UspBulkElementComponent]\n})\nexport class UspBulkModule {\n static components = { 'uspBulkElement': UspBulkElementComponent };\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { skip, Subscription } from 'rxjs';\nimport { Page } from './models/page.interface';\n\n@Component({\n standalone: true,\n imports: [CommonModule],\n selector: 'page-base',\n template: ''\n})\nexport class PageBase implements OnDestroy, OnInit {\n page: Page;\n protected subscriptions:Array\n constructor(\n protected _route: ActivatedRoute,\n ) {\n this.subscriptions = [];\n this.page = this._route?.snapshot?.data?.content?.page;\n this.subscriptions.push(this._route.data.pipe(skip(1)).subscribe(data => {\n this.page = data?.content?.page;\n this.ngOnInit();\n }))\n }\n ngOnInit() {}\n ngOnDestroy(): void {\n this.subscriptions.forEach(s => {\n if(s != null && !s.closed)\n s.unsubscribe();\n })\n }\n}\n"],"x_google_ignoreList":[]}