/usr/share/grafana/public/build
{"version":3,"file":"canvasPanel.ddab72fab6e58c3419b2.js","mappings":"yQAMA,MAAMA,MAAkB,QAAK,CAAC,CAAE,OAAAC,CAAO,OAEnC,OAAC,OACC,oBAAC,MACC,QAAQ,qCACR,WAAY,CAAE,UAAQ,OAAC,OAAK,cAAK,UAAUA,EAAQ,KAAM,CAAC,EAAE,CAAO,EAEnE,oBAAC,MAAG,uBAAW,EACd,cACH,EACF,CAEH,EAEDD,GAAgB,YAAc,kBAEvB,MAAME,GAAkC,CAC7C,GAAI,YACJ,KAAM,YACN,YAAa,yDAEb,QAASF,GAET,YAAa,CACX,MAAO,IACP,OAAQ,GACV,EAEA,cAAe,KAAO,CACpB,OAAQ,CAAC,CACX,EACF,E,eCjCYG,IAAAA,IACVA,EAAA,OAAS,SACTA,EAAA,UAAY,YACZA,EAAA,QAAU,WACVA,EAAA,WAAa,cAJHA,IAAAA,IAAA,IAgBAC,IAAAA,IACVA,EAAA,kBAAoB,qBACpBA,EAAA,gBAAkB,mBAClBA,EAAA,mBAAqB,sBAHXA,IAAAA,IAAA,IA2BAC,IAAAA,IACVA,EAAA,MAAQ,QACRA,EAAA,OAAS,SACTA,EAAA,OAAS,SAHCA,IAAAA,IAAA,IAMAC,IAAAA,IACVA,EAAA,MAAQ,IACRA,EAAA,OAAS,MACTA,EAAA,OAAS,IAHCA,IAAAA,IAAA,I,uQC1CL,MAAMC,GAAe,CAAC,CAAE,MAAAC,EAAO,SAAAC,CAAS,IAAa,CAC1D,KAAM,CAACC,EAAWC,CAAY,KAAI,YAAS,EAAE,EACvC,CAACC,EAAYC,CAAa,KAAI,YAAS,EAAE,EAEzCC,EAAmB,CAAC,CAAE,cAAAC,CAAc,IAA2C,CACnFF,EAAcE,EAAc,KAAK,CACnC,EAEMC,EAAkB,CAAC,CAAE,cAAAD,CAAc,IAA2C,CAClFJ,EAAaI,EAAc,KAAK,CAClC,EAEME,EAAeC,GAAgB,IAAM,CACzC,MAAMC,EAAgBX,EAAM,OAAQY,GAAUA,EAAM,CAAC,IAAMF,CAAG,EAC9DT,EAASU,CAAa,CACxB,EAEME,EAAW,IAAM,CACrB,MAAMH,EAAMR,EACZ,IAAIY,EACAd,EACFc,EAAYd,EAAM,OAAQe,GAAMA,EAAE,CAAC,IAAML,CAAG,EAE5CI,EAAY,CAAC,EAEfA,EAAU,KAAK,CAACJ,EAAKN,CAAU,CAAC,EAChCU,EAAU,KAAK,CAACE,EAAGC,IAAMD,EAAE,CAAC,EAAE,cAAcC,EAAE,CAAC,CAAC,CAAC,EAEjDd,EAAa,EAAE,EACfE,EAAc,EAAE,EAChBJ,EAASa,CAAS,CACpB,EAEMI,EAAsB,CAAChB,GAAa,CAACE,EAE3C,SACE,QAAC,OACC,qBAACe,GAAA,EAAK,CAAC,UAAU,MACf,oBAACC,GAAA,GACC,eAAa,KAAE,uCAAwC,KAAK,EAC5D,MAAOlB,EACP,SAAUM,CAAA,CACZ,KACA,OAACY,GAAA,GACC,eAAa,KAAE,yCAA0C,OAAO,EAChE,MAAOhB,EACP,SAAUE,CAAA,CACZ,KACA,OAACe,GAAA,GACC,gBAAY,KAAE,sCAAuC,KAAK,EAC1D,KAAK,cACL,QAASR,EACT,SAAUK,CAAA,CACZ,GACF,KACA,OAACC,GAAA,EAAK,CAAC,UAAU,SACd,eAAM,KAAKnB,GAAS,CAAC,CAAC,EAAE,IAAKsB,MAC5B,QAACH,GAAA,EAAK,CAAgB,UAAU,MAC9B,oBAACC,GAAA,EAAK,CAAC,SAAQ,GAAC,MAAOE,EAAM,CAAC,EAAG,KACjC,OAACF,GAAA,EAAK,CAAC,SAAQ,GAAC,MAAOE,EAAM,CAAC,EAAG,KACjC,OAACD,GAAA,GACC,gBAAY,KAAE,yCAA0C,QAAQ,EAChE,QAASZ,EAAYa,EAAM,CAAC,CAAC,EAC7B,KAAK,YACP,IAPUA,EAAM,CAAC,CAQnB,CACD,EACH,GACF,CAEJ,E,2ECrEO,MAAMC,GAAU,CAACC,EAAsBC,IAAmD,CAC/F,GAAI,CAACD,EAAI,SAAU,CACjB,MAAU,KAAK,MAAU,WAAY,CAAC,8BAA8B,CAAC,EACrE,MACF,CAEA,MAAME,EAAUC,GAAWH,CAAG,KAE9B,OAAc,EACX,MAAME,CAAO,EACb,UAAU,CACT,MAAQE,GAAU,CAChB,MAAU,KAAK,MAAU,WAAY,CAAC,+DAA+D,CAAC,EACtG,QAAQ,MAAM,mBAAoBA,CAAK,EACvCH,GAA8BA,EAA2B,EAAK,CAChE,EACA,SAAU,IAAM,CACd,MAAU,KAAK,MAAU,aAAc,CAAC,yBAAyB,CAAC,EAClEA,GAA8BA,EAA2B,EAAK,CAChE,CACF,CAAC,CACL,EAEaI,GAAwBC,GAAiB,CACpD,MAAMC,KAAQ,OAAgB,EAAE,WAAW,GAAG,YAC9C,SAAO,MAAe,EAAE,QAAQD,EAAMC,GAAO,UAAU,CACzD,EAEaJ,GAAcH,GAAyB,CAClD,MAAMQ,EAAWC,GAAYJ,GAAqBL,EAAI,QAAQ,CAAC,EACzDU,EAAM,IAAI,IAAIF,CAAQ,EAEtBG,EAAyC,CAAC,EAEhD,IAAIT,EAA6B,CAC/B,IAAKQ,EAAI,SAAS,EAClB,OAAQV,EAAI,OACZ,KAAMY,GAAQZ,CAAG,EACjB,QAASW,CACX,EAEA,OAAIX,EAAI,cACNA,EAAI,aAAa,QAAQ,CAAC,CAACa,EAAMrC,CAAK,IAAM,CAC1CmC,EAAeN,GAAqBQ,CAAI,CAAC,EAAIR,GAAqB7B,CAAK,CACzE,CAAC,EAGCwB,EAAI,cACNA,EAAI,aAAa,QAAQ,CAAC,CAACa,EAAMrC,CAAK,IAAM,CAC1CkC,EAAI,aAAa,OAAOL,GAAqBQ,CAAI,EAAGR,GAAqB7B,CAAK,CAAC,CACjF,CAAC,EAED0B,EAAQ,IAAMQ,EAAI,SAAS,GAGzBV,EAAI,SAAW,KAAkB,OACnCW,EAAe,cAAc,EAAIX,EAAI,aAGvCW,EAAe,kBAAkB,EAAI,IACrCT,EAAQ,QAAUS,EAEXT,CACT,EAEMU,GAAWZ,GAAyB,CACxC,IAAIc,EAA2Bd,EAAI,KAAOK,GAAqBL,EAAI,IAAI,EAAI,KAC3E,OAAIA,EAAI,SAAW,KAAkB,MACnCc,EAAO,QAGFA,CACT,EAEML,GAAeD,GAAqB,CAExC,GADsBA,EAAS,WAAW,GAAG,EAC1B,CAEjB,MAAMO,EAAuB,MAAS,YAAYP,CAAQ,EAC1DA,KAAW,MAAkBO,EAAsB,CAAC,CAAC,CACvD,CAEA,OAAOP,CACT,ECpEMQ,GAAsF,CAC1F,GAAI,GACJ,KAAM,GACN,YAAa,GACb,OAAQ,KACR,SAAU,CAAC,CACb,EAIMC,GAAoB,CACxB,CAAE,MAAO,KAAkB,IAAK,MAAO,KAAkB,GAAI,EAC7D,CAAE,MAAO,KAAkB,KAAM,MAAO,KAAkB,IAAK,EAC/D,CAAE,MAAO,KAAkB,IAAK,MAAO,KAAkB,GAAI,CAC/D,EAEMC,GAAwC,CAC5C,CAAE,MAAO,OAAQ,MAAO,kBAAmB,EAC3C,CAAE,MAAO,OAAQ,MAAO,YAAa,EACrC,CAAE,MAAO,aAAc,MAAO,wBAAyB,EACvD,CAAE,MAAO,OAAQ,MAAO,WAAY,EACpC,CAAE,MAAO,MAAO,MAAO,iBAAkB,EACzC,CAAE,MAAO,wBAAyB,MAAO,mCAAoC,CAC/E,EAEO,SAASC,GAAU,CAAE,MAAA3C,EAAO,QAAA4C,EAAS,SAAA3C,CAAS,EAAU,CAGxDD,IACHA,EAAQ6C,IAGV,MAAMC,KAAmB,eACvB,CAACd,EAAW,KAAO,CACjB/B,EAAS,CACP,GAAGD,EACH,SAAAgC,CACF,CAAC,CACH,EACA,CAAC/B,EAAUD,CAAK,CAClB,EAEM+C,KAAe,eAClBT,GAAkB,CACjBrC,EAAS,CACP,GAAGD,EACH,KAAAsC,CACF,CAAC,CACH,EACA,CAACrC,EAAUD,CAAK,CAClB,EAEMgD,KAAiB,eACpBC,GAAmB,CAClBhD,EAAS,CACP,GAAGD,EACH,OAAAiD,CACF,CAAC,CACH,EACA,CAAChD,EAAUD,CAAK,CAClB,EAEMkD,KAAsB,eACzBC,GAAyC,CACxClD,EAAS,CACP,GAAGD,EACH,YAAamD,GAAa,KAC5B,CAAC,CACH,EACA,CAAClD,EAAUD,CAAK,CAClB,EAEMoD,EAAqBC,GAClBA,EAGHC,KAAsB,eACzBC,GAAyC,CACxCtD,EAAS,CACP,GAAGD,EACH,YAAAuD,CACF,CAAC,CACH,EACA,CAACtD,EAAUD,CAAK,CAClB,EAEMwD,KAAuB,eAC1BC,GAA0C,CACzCxD,EAAS,CACP,GAAGD,EACH,aAAAyD,CACF,CAAC,CACH,EACA,CAACxD,EAAUD,CAAK,CAClB,EAEM0D,EAAcpB,GAAiB,CACnC,GAAI,CACF,MAAMqB,EAAO,KAAK,MAAM9B,GAAqBS,CAAI,CAAC,EAClD,SAAO,OAACsB,GAAA,EAAa,CAAC,KAAAD,CAAA,CAAY,CACpC,OAAS/B,EAAO,CACd,OAAIA,aAAiB,MACZ,0BAA0BA,EAAM,OAAO,GAEvC,uBAEX,CACF,EAEMiC,EAAuBrC,GAAyB,CACpD,GAAIA,GAAOA,EAAI,SACb,SACE,OAACsC,GAAA,IACC,QAAS,IAAMvC,GAAQC,CAAG,EAC1B,SAAO,KAAE,wDAAyD,UAAU,EAE5E,mBAAC,KAAK,CAAC,QAAQ,kDAAkD,oBAAQ,EAC3E,CAKN,EAEA,SACE,oBACE,oBAACuC,GAAA,EAAc,CACb,mBAACC,GAAA,EAAW,CAAC,SAAO,KAAE,kCAAmC,UAAU,EAAG,WAAY,GAAa,KAAM,GACnG,mBAAC,MACC,QAAApB,EACA,MAAO5C,GAAO,SACd,SAAU8C,EACV,KAAMN,EAAA,CACR,EACF,EACF,KACA,OAACuB,GAAA,EAAc,CACb,mBAACC,GAAA,EAAW,CAAC,SAAO,KAAE,gCAAiC,QAAQ,EAAG,WAAY,GAAa,KAAM,GAC/F,mBAACC,GAAA,EAAgB,CAAC,MAAOjE,GAAO,OAAQ,QAASyC,GAAmB,SAAUO,EAAgB,UAAS,GAAC,EAC1G,EACF,EACChD,GAAO,SAAW,KAAkB,QACnC,OAAC+D,GAAA,EAAc,CACb,mBAACC,GAAA,GAEC,MAAM,eACN,WAAY,GACZ,KAAM,GAEN,mBAACE,GAAA,IACC,QAASxB,GACT,iBAAkB,GAClB,kBAAAU,EACA,MAAOpD,GAAO,YACd,SAAUkD,CAAA,CACZ,EACF,EACF,KAGF,OAAC,OAAG,KACJ,OAACiB,GAAA,EAAK,CAAC,SAAO,KAAE,0CAA2C,kBAAkB,EAC3E,mBAACpE,GAAY,CAAC,MAAOC,GAAO,aAAe,CAAC,EAAG,SAAUsD,CAAA,CAAqB,EAChF,KACA,OAACa,GAAA,EAAK,CAAC,SAAO,KAAE,2CAA4C,mBAAmB,EAC7E,mBAACpE,GAAY,CAAC,MAAOC,GAAO,cAAgB,CAAC,EAAG,SAAUwD,CAAA,CAAsB,EAClF,EACCxD,GAAO,SAAW,KAAkB,KAAOA,GAAO,gBACjD,OAACmE,GAAA,EAAK,CAAC,SAAO,KAAE,iCAAkC,SAAS,EACzD,mBAAC,MACC,QAAAvB,EACA,MAAO5C,GAAO,MAAQ,KACtB,SAAU+C,EACV,KAAM,CAAE,GAAGP,GAAqB,SAAU,CAAE,YAAa,EAAK,CAAE,EAClE,EACF,EAEDqB,EAAoB7D,CAAK,KAC1B,OAAC,OAAG,EACHA,GAAO,SAAW,KAAkB,KACnCA,GAAO,cAAgB6C,GAAiB,aACxCa,EAAW1D,GAAO,MAAQ,IAAI,GAClC,CAEJ,CCtMA,MAAMoE,GAAoC,CACxC,CAAE,MAAO,UAAW,MAAO,SAAU,EACrC,CAAE,MAAO,YAAa,MAAO,WAAY,EACzC,CAAE,MAAO,UAAW,MAAO,SAAU,EACrC,CAAE,MAAO,cAAe,MAAO,aAAc,CAC/C,EAEaC,GAAoB,CAAC,CAAE,MAAArE,EAAO,SAAAC,CAAS,IAAa,CAC1DD,IACHA,EAAQsE,IAGV,MAAMC,KAAkB,eACrBC,GAA4C,CAC3CvE,EAAS,CACP,GAAGD,EACH,QAASwE,GAAS,OAASF,GAAmB,OAChD,CAAC,CACH,EACA,CAACrE,EAAUD,CAAK,CAClB,EAEA,SACE,mBACE,mBAAC+D,GAAA,EAAc,CACb,mBAACC,GAAA,EAAW,CAAC,SAAO,KAAE,2CAA4C,SAAS,EAAG,KAAM,GAClF,mBAACE,GAAA,GAAM,CAAC,QAASE,GAAgB,MAAOpE,GAAO,QAAS,SAAUuE,CAAA,CAAiB,EACrF,EACF,EACF,CAEJ,ECCO,IAAKE,IAAAA,IACVA,EAAA,SAAW,WADDA,IAAAA,IAAA,IAIAC,IAAAA,IACVA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,KAAO,OACPA,EAAA,KAAO,OAJGA,IAAAA,IAAA,IAmEL,MAAMC,GAAiB,UACjBC,GAAmB,UACnBC,GAAwB,UACxBC,GAAwB,MAAO,OAAO,OAAO,KAAK,QCnHxD,IAAKC,IAAAA,IACVA,EAAA,IAAM,MACNA,EAAA,OAAS,SACTA,EAAA,KAAO,OACPA,EAAA,MAAQ,QACRA,EAAA,iBAAmB,UACnBA,EAAA,eAAiB,UANPA,IAAAA,IAAA,IASAC,IAAAA,IACVA,EAAA,KAAO,OACPA,EAAA,OAAS,SACTA,EAAA,MAAQ,QAHEA,IAAAA,IAAA,IAMAC,IAAAA,IACVA,EAAA,IAAM,MACNA,EAAA,OAAS,SACTA,EAAA,OAAS,SAHCA,IAAAA,IAAA,ICSL,MAAMpC,GAAoC,CAC/C,SAAU,GACV,OAAQ,KAAkB,KAC1B,KAAM,KACN,YAAa,mBACb,YAAa,CAAC,EACd,aAAc,CAAC,CACjB,EAEayB,GAAwC,CACnD,QAAS,SACX,EAEMY,GAAgB,CAAC,CAAE,KAAA5C,CAAK,IAAoD,CAChF,MAAM6C,KAAS,OAAWC,GAAW9C,CAAI,EAEnC,CAAC+C,EAAWC,CAAY,KAAI,YAAS,EAAK,EAE1C7D,EAA8B8D,GAAqB,CACvDD,EAAaC,CAAO,CACtB,EAEMC,EAAU,IAAM,CAChBlD,GAAM,KAAOA,GAAM,KAAK,WAC1BgD,EAAa,EAAI,EACjB/D,GAAQe,EAAK,IAAKb,CAA0B,EAEhD,EAEA,SACE,OAACqC,GAAA,GAAM,CAAC,KAAK,SAAS,QAASxB,GAAM,OAAO,QAAS,QAAAkD,EAAkB,UAAWL,EAAO,OACvF,oBAAC,QACE,UAAAE,MAAa,OAACI,GAAA,EAAO,CAAC,OAAQ,GAAM,UAAWN,EAAO,cAAe,EACrE7C,GAAM,MACT,EACF,CAEJ,EAEM8C,GAAY,CAACM,EAAsBpD,KAAkC,CACzE,UAAQ,OAAI,CACV,OAAQ,OACR,MAAO,OACP,QAAS,OAET,SAAU,CACR,QAAS,cACT,aAAc,SACd,UAAWA,GAAM,MACjB,SAAU,GAAGA,GAAM,IAAI,KACvB,MAAOA,GAAM,KACf,CACF,CAAC,EACD,iBAAe,OAAI,CACjB,YAAaoD,EAAM,QAAQ,EAAG,CAChC,CAAC,CACH,GAEaC,GAA0D,CACrE,GAAI,SACJ,KAAM,SACN,YAAa,SACb,MAAO,MAAY,KAEnB,qBAAsB,CACpB,WAAY,EACd,EAEA,QAAST,GAET,YAAa,CACX,MAAO,IACP,OAAQ,EACV,EAEA,cAAgBU,IAAa,CAC3B,GAAGA,EACH,OAAQ,CACN,KAAM,CACJ,KAAM,MAAkB,MACxB,MAAO,QACT,EACA,MAAOZ,GAAM,OACb,MAAO,CACL,MAAOH,EACT,EACA,KAAM,GACN,IAAKhC,GACL,MAAOyB,EACT,EACA,WAAY,CACV,MAAO,CACL,MAAO,aACT,CACF,EACA,UAAW,CACT,MAAOsB,GAAS,WAAW,OAAS,GACpC,OAAQA,GAAS,WAAW,QAAU,GACtC,IAAKA,GAAS,WAAW,KAAO,IAChC,KAAMA,GAAS,WAAW,MAAQ,IAClC,SAAUA,GAAS,WAAW,UAAY,CAC5C,CACF,GAGA,YAAa,CAACC,EAAoCC,IAAuD,CACvG,MAAMC,EAAeD,EAAe,OAE9BE,EAAe,IAAM,CACzB,GAAID,GAAc,IAChB,OAAAA,EAAa,IAAM,CACjB,GAAGA,EAAa,IAChB,OAAQA,EAAa,IAAI,QAAUlD,GAAiB,OACpD,YAAakD,EAAa,IAAI,aAAelD,GAAiB,WAChE,EACOkD,EAAa,GAIxB,EAEMzD,EAAmB,CACvB,KAAMyD,GAAc,KAAOF,EAAiB,QAAQE,EAAa,IAAI,EAAE,MAAM,EAAI,GACjF,MAAOA,GAAc,OAASf,GAAM,OACpC,KAAMe,GAAc,MAAQ,GAC5B,IAAKC,EAAa,EAClB,MAAOD,GAAc,OAASzB,EAChC,EAEA,OAAIyB,GAAc,QAChBzD,EAAK,MAAQuD,EAAiB,SAASE,EAAa,KAAK,EAAE,MAAM,GAG5DzD,CACT,EAGA,kBAAoB2D,GAAY,CAC9B,MAAMC,EAAW,IAAC,KAAE,qCAAsC,QAAQ,CAAC,EACnED,EACG,gBAAgB,CACf,SAAAC,EACA,GAAI,gBACJ,KAAM,eACN,QAAM,KAAE,gCAAiC,OAAO,EAChD,OAAQ7B,EACV,CAAC,EACA,gBAAgB,CACf,SAAA6B,EACA,GAAI,eACJ,KAAM,cACN,QAAM,KAAE,+BAAgC,MAAM,EAC9C,OAAQC,GAAA,CACV,CAAC,EACA,gBAAgB,CACf,SAAAD,EACA,GAAI,eACJ,KAAM,eACN,QAAM,KAAE,qCAAsC,YAAY,EAC1D,OAAQE,GAAA,EACR,SAAU,CAAC,EACX,aAAc,CAAC,CACjB,CAAC,EACA,SAAS,CACR,SAAAF,EACA,KAAM,eACN,QAAM,KAAE,qCAAsC,YAAY,EAC1D,SAAU,CACR,QAAS,CACP,CAAE,MAAOlB,GAAM,KAAM,SAAO,KAAE,gCAAiC,MAAM,CAAE,EACvE,CAAE,MAAOA,GAAM,OAAQ,SAAO,KAAE,kCAAmC,QAAQ,CAAE,EAC7E,CAAE,MAAOA,GAAM,MAAO,SAAO,KAAE,iCAAkC,OAAO,CAAE,CAC5E,CACF,EACA,aAAcA,GAAM,IACtB,CAAC,EACA,eAAe,CACd,SAAAkB,EACA,KAAM,cACN,QAAM,KAAE,oCAAqC,WAAW,EACxD,SAAU,CACR,eAAa,KAAE,sCAAuC,MAAM,CAC9D,CACF,CAAC,EACA,gBAAgB,CACf,SAAAA,EACA,GAAI,cACJ,KAAM,aACN,QAAM,KAAE,8BAA+B,KAAK,EAC5C,OAAQvD,EACV,CAAC,CACL,CACF,E,gBCvJO,MAAM0D,GAA+B,CAC1C,GAAI,QACJ,KAAM,QACN,YAAa,QAEb,QAvDaC,GAAsE,CACnF,KAAM,CAAE,KAAAhE,CAAK,EAAIgE,EACXnB,EAAS,GAAU,MAAO,OAAQ7C,CAAI,EAGtCiE,KAAW,MAAO,EAExB,SACE,QAAC,OAAI,UAAWpB,EAAO,UACrB,qBAAC,OACC,MAAM,6BACN,QAAQ,aACR,MAAM,OACN,OAAO,OACP,oBAAoB,OAEpB,qBAAC,QACC,oBAAC,WAAQ,GAAI,SAASoB,CAAQ,GAAI,aAAa,iBAAiB,MAAM,MAAM,OAAO,KACjF,mBAAC,SAAM,UAAWjE,GAAM,gBAAiB,EAAE,MAAM,EAAE,MAAM,MAAM,MAAM,OAAO,MAAM,EACpF,KACA,OAAC,YAAS,GAAI,aAAaiE,CAAQ,GACjC,mBAAC,QAAK,EAAE,4IAA6I,GACvJ,GACF,KAEA,OAAC,QACC,EAAE,IACF,EAAE,IACF,MAAM,OACN,OAAO,OACP,SAAU,kBAAkBA,CAAQ,IACpC,MAAO,CAAE,KAAM,MAAO,EACxB,KACA,OAAC,QACC,EAAE,6IACF,MAAO,CAAE,KAAMjE,GAAM,gBAAkB,cAAciE,CAAQ,IAAMjE,GAAM,eAAgB,EAC3F,KAGA,OAAC,QACC,EAAE,6IACF,SAAU,kBAAkBiE,CAAQ,IACpC,UAAWpB,EAAO,cACpB,GACF,KACA,OAAC,QAAK,UAAWA,EAAO,KAAO,SAAA7C,GAAM,KAAK,GAC5C,CAEJ,EASE,YAAa,CACX,MAAO,IACP,OAAQ,EACV,EAEA,cAAgBsD,IAAa,CAC3B,GAAGA,EACH,WAAY,CACV,MAAO,CACL,MAAOjB,EACT,CACF,EACA,OAAQ,CACN,MAAOK,GAAM,OACb,OAAQC,GAAO,OACf,MAAO,CACL,MAAOL,EACT,CACF,EACA,UAAW,CACT,MAAOgB,GAAS,WAAW,OAAS,IACpC,OAAQA,GAAS,WAAW,QAAU,GACtC,IAAKA,GAAS,WAAW,IACzB,KAAMA,GAAS,WAAW,KAC1B,SAAUA,GAAS,WAAW,UAAY,CAC5C,EACA,MAAOA,GAAS,OAAS,CAAC,CAC5B,GAGA,YAAa,CAACC,EAAoCC,IAA8D,CAC9G,MAAMU,EAAaV,EAAe,OAE5BxD,EAA0B,CAC9B,KAAMkE,GAAY,KAAOX,EAAiB,QAAQW,EAAW,IAAI,EAAE,MAAM,EAAI,GAC7E,MAAOA,GAAY,MAAM,MACzB,MAAOA,GAAY,OAASxB,GAAM,OAClC,OAAQwB,GAAY,QAAUvB,GAAO,OACrC,KAAMuB,GAAY,IACpB,EAEIA,GAAY,QACdlE,EAAK,MAAQuD,EAAiB,SAASW,EAAW,KAAK,EAAE,MAAM,GAGjE,KAAM,CAAE,WAAAC,EAAY,OAAAC,CAAO,EAAIZ,EAC/B,OAAAxD,EAAK,gBAAkBmE,GAAY,MAAQZ,EAAiB,SAASY,EAAW,KAAK,EAAE,MAAM,EAAI9B,GACjGrC,EAAK,YAAcoE,GAAQ,MAAQb,EAAiB,SAASa,EAAO,KAAK,EAAE,MAAM,EAAI/B,GACrFrC,EAAK,YAAcoE,GAAQ,OAAS,EAEpCpE,EAAK,gBAAkBmE,GAAY,MAAQZ,EAAiB,YAAYY,EAAW,KAAK,EAAE,MAAM,EAAI,OAE7FnE,CACT,EAEA,kBAAoB2D,GAAY,CAC9B,MAAMC,EAAW,IAAC,KAAE,mCAAoC,OAAO,CAAC,EAChED,EACG,gBAAgB,CACf,SAAAC,EACA,GAAI,eACJ,KAAM,cACN,QAAM,KAAE,8BAA+B,MAAM,EAC7C,OAAQC,GAAA,CACV,CAAC,EACA,gBAAgB,CACf,SAAAD,EACA,GAAI,eACJ,KAAM,eACN,QAAM,KAAE,oCAAqC,YAAY,EACzD,OAAQE,GAAA,EACR,SAAU,CAAC,EACX,aAAc,CAAC,CACjB,CAAC,EACA,SAAS,CACR,SAAAF,EACA,KAAM,eACN,QAAM,KAAE,oCAAqC,YAAY,EACzD,SAAU,CACR,QAAS,CACP,CAAE,MAAOlB,GAAM,KAAM,SAAO,KAAE,+BAAgC,MAAM,CAAE,EACtE,CAAE,MAAOA,GAAM,OAAQ,SAAO,KAAE,iCAAkC,QAAQ,CAAE,EAC5E,CAAE,MAAOA,GAAM,MAAO,SAAO,KAAE,gCAAiC,OAAO,CAAE,CAC3E,CACF,EACA,aAAcA,GAAM,IACtB,CAAC,EACA,SAAS,CACR,SAAAkB,EACA,KAAM,gBACN,QAAM,KAAE,wCAAyC,gBAAgB,EACjE,SAAU,CACR,QAAS,CACP,CAAE,MAAOjB,GAAO,IAAK,SAAO,KAAE,8BAA+B,KAAK,CAAE,EACpE,CAAE,MAAOA,GAAO,OAAQ,SAAO,KAAE,iCAAkC,QAAQ,CAAE,EAC7E,CAAE,MAAOA,GAAO,OAAQ,SAAO,KAAE,iCAAkC,QAAQ,CAAE,CAC/E,CACF,EACA,aAAcA,GAAO,MACvB,CAAC,EACA,eAAe,CACd,SAAAiB,EACA,KAAM,cACN,QAAM,KAAE,mCAAoC,WAAW,EACvD,SAAU,CACR,eAAa,KAAE,qCAAsC,MAAM,CAC7D,CACF,CAAC,CACL,EAEA,wBAAyB,CACvB,CAAE,EAAG,KAAO,EAAG,GAAK,EACpB,CAAE,EAAG,KAAO,EAAG,GAAK,EACpB,CAAE,EAAG,KAAO,EAAG,GAAK,EAEpB,CAAE,EAAG,GAAK,EAAG,EAAI,EACjB,CAAE,EAAG,KAAO,EAAG,GAAK,EACpB,CAAE,EAAG,IAAM,EAAG,IAAM,EAEpB,CAAE,EAAG,IAAM,EAAG,KAAO,EACrB,CAAE,EAAG,IAAM,EAAG,IAAM,EACpB,CAAE,EAAG,KAAO,EAAG,KAAO,EAEtB,CAAE,EAAG,IAAM,EAAG,IAAM,EACpB,CAAE,EAAG,KAAO,EAAG,IAAM,EACrB,CAAE,EAAG,IAAM,EAAG,GAAK,CACrB,CACF,EAEM,GAAY,CAACR,EAAsBpD,IAAwC,CAC/E,MAAMqE,EAAUrE,GAAM,SAAW2C,GAAO,OAAS,MAAQ3C,GAAM,SAAW2C,GAAO,IAAM,MAAQ,MACzF2B,EAAWtE,GAAM,QAAU0C,GAAM,OAAS,MAAQ1C,GAAM,QAAU0C,GAAM,KAAO,MAAQ,MACvF6B,EAAgB,aAAavE,GAAM,QAAU0C,GAAM,OAAS,OAAS1C,GAAM,QAAU0C,GAAM,KAAO,MAAQ,MAAM,KACpH1C,GAAM,SAAW2C,GAAO,OAAS,OAAS3C,GAAM,SAAW2C,GAAO,IAAM,MAAQ,MAClF,IAEA,MAAO,CACL,aAAW,OAAI,CACb,OAAQ,OACR,MAAO,MACT,CAAC,EACD,QAAM,OAAI,CACR,SAAU,WACV,IAAK0B,EACL,KAAMC,EACN,UAAWC,EACX,SAAU,GAAGvE,GAAM,IAAI,KACvB,MAAOA,GAAM,KACf,CAAC,EACD,iBAAe,OAAI,CACjB,KAAM,OACN,OAAQA,GAAM,aAAe,OAC7B,YAAaA,GAAM,aAAe,EAClC,eAAgB,OAClB,CAAC,CACH,CACF,E,gBCjKO,MAAMwE,GAAoC,CAC/C,GAAI,aACJ,KAAM,cACN,YAAa,cAEb,QAzDwB,CAAC,CAAE,KAAAxE,CAAK,IAA4D,CAC5F,MAAM6C,KAAS,OAAW,EAAS,EAE7B4B,EAA2B,UAAUzE,GAAM,UAAYA,EAAK,UAAY,CAAC,OAE/E,SACE,QAAC,OACC,UAAW6C,EAAO,WAClB,MAAM,6BACN,WAAW,+BACX,QAAQ,eACR,MAAO,CAAE,UAAW4B,EAA0B,OAAQpC,EAAe,EAErE,qBAAC,KAAE,UAAU,OAAO,OAAQA,GAAgB,YAAY,OACtD,oBAAC,QAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAM,MAC1C,OAAC,QAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAM,MAC1C,OAAC,QAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAM,MAC1C,OAAC,QAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAM,IAC5C,KACA,QAAC,KAAE,UAAU,OAAO,OAAQA,GAAgB,YAAY,OACtD,oBAAC,QACC,KAAK,OACL,EAAE,gRACJ,KACA,OAAC,UAAO,GAAG,MAAM,GAAG,MAAM,EAAE,KAAK,KAAK,MAAO,IAC/C,KACA,QAAC,KAAE,UAAU,SAAS,OAAQA,GAAgB,YAAY,OACxD,oBAAC,QACC,UAAU,QACV,KAAK,OACL,EAAE,yEACJ,KACA,OAAC,QACC,UAAU,QACV,KAAK,OACL,EAAE,6EACJ,GACF,KACA,QAAC,KAAE,UAAU,aAAa,KAAMA,GAC9B,oBAAC,QACC,UAAU,OACV,EAAE,2KACJ,KACA,OAAC,QACC,UAAU,OACV,EAAE,8LACJ,GACF,GACF,CAEJ,EASE,YAAa,CACX,MAAO,IACP,OAAQ,EACV,EAEA,cAAgBiB,IAAa,CAC3B,GAAGA,EACH,WAAY,CACV,MAAO,CACL,MAAO,aACT,CACF,EACA,UAAW,CACT,MAAOA,GAAS,WAAW,OAAS,IACpC,OAAQA,GAAS,WAAW,QAAU,GACtC,IAAKA,GAAS,WAAW,IACzB,KAAMA,GAAS,WAAW,KAC1B,SAAUA,GAAS,WAAW,UAAY,CAC5C,EACA,MAAOA,GAAS,OAAS,CAAC,CAC5B,GAGA,YAAa,CAACC,EAAoCC,IAA2D,CAC3G,MAAMkB,EAAmBlB,EAAe,OAMxC,MAJ6B,CAC3B,UAAWkB,GAAkB,UAAYnB,EAAiB,UAAUmB,EAAiB,SAAS,EAAE,MAAM,EAAI,CAC5G,CAGF,EAEA,kBAAoBf,GAAY,CAC9B,MAAMC,EAAW,IAAC,KAAE,+CAAgD,aAAa,CAAC,EAClFD,EAAQ,gBAAgB,CACtB,SAAAC,EACA,GAAI,YACJ,KAAM,mBACN,QAAM,KAAE,0CAA2C,YAAY,EAC/D,OAAQe,GAAA,CACV,CAAC,CACH,CACF,EAEM,GAAavB,IAA0B,CAC3C,cAAY,OAAI,CAGd,WAAY,gBACd,CAAC,CACH,GC3DawB,GAAmC,CAC9C,GAAI,YACJ,KAAM,aACN,YAAa,aAEb,QAxDuB,CAAC,CAAE,KAAA5E,CAAK,IAA0D,CACzF,MAAM6C,KAAS,OAAW,EAAS,EAE7BgC,EAA+B,UAAU7E,GAAM,WAAaA,EAAK,WAAa,CAAC,OAErF,SACE,QAAC,OACC,UAAW6C,EAAO,UAClB,MAAM,6BACN,WAAW,+BACX,QAAQ,eACR,MAAO,CAAE,UAAWgC,EAA8B,OAAQxC,EAAe,EAEzE,qBAAC,KAAE,UAAU,OAAO,OAAQA,GAAgB,YAAY,OACtD,oBAAC,QAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAM,MAC1C,OAAC,QAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAM,MAC1C,OAAC,QAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAM,MAC1C,OAAC,QAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAM,IAC5C,KACA,OAAC,KAAE,UAAU,OAAO,OAAQA,GAAgB,YAAY,OACtD,mBAAC,QACC,KAAK,OACL,EAAE,gRACJ,EACF,KACA,QAAC,KAAE,UAAU,SAAS,OAAQA,GAAgB,YAAY,OACxD,oBAAC,QACC,UAAU,QACV,KAAK,OACL,EAAE,yEACJ,KACA,OAAC,QACC,UAAU,QACV,KAAK,OACL,EAAE,6EACJ,GACF,KACA,QAAC,KAAE,UAAU,aAAa,KAAMA,GAC9B,oBAAC,QACC,UAAU,OACV,EAAE,2KACJ,KACA,OAAC,QACC,UAAU,OACV,EAAE,8LACJ,GACF,GACF,CAEJ,EASE,YAAa,CACX,MAAO,IACP,OAAQ,EACV,EAEA,cAAgBiB,IAAa,CAC3B,GAAGA,EACH,WAAY,CACV,MAAO,CACL,MAAO,aACT,CACF,EACA,UAAW,CACT,MAAOA,GAAS,WAAW,OAAS,IACpC,OAAQA,GAAS,WAAW,QAAU,GACtC,IAAKA,GAAS,WAAW,IACzB,KAAMA,GAAS,WAAW,KAC1B,SAAUA,GAAS,WAAW,UAAY,CAC5C,EACA,MAAOA,GAAS,OAAS,CAAC,CAC5B,GAGA,YAAa,CAACC,EAAoCC,IAA0D,CAC1G,MAAMsB,EAAkBtB,EAAe,OAMvC,MAJ4B,CAC1B,WAAYsB,GAAiB,WAAavB,EAAiB,UAAUuB,EAAgB,UAAU,EAAE,MAAM,EAAI,CAC7G,CAGF,EAEA,kBAAoBnB,GAAY,CAC9B,MAAMC,EAAW,IAAC,KAAE,6CAA8C,YAAY,CAAC,EAC/ED,EAAQ,gBAAgB,CACtB,SAAAC,EACA,GAAI,aACJ,KAAM,oBACN,QAAM,KAAE,0CAA2C,aAAa,EAChE,OAAQe,GAAA,CACV,CAAC,CACH,CACF,EAEM,GAAavB,IAA0B,CAC3C,aAAW,OAAI,CAGb,WAAY,gBACd,CAAC,CACH,GC9Ca2B,GAAkC,CAC7C,GAAI,WACJ,KAAM,YACN,YAAa,YAEb,QA5DsB,CAAC,CAAE,KAAA/E,CAAK,IAAwD,CACtF,MAAM6C,KAAS,OAAW,EAAS,EAE7BmC,EAAuB,QAAQhF,GAAM,eAAiB,GAAK,KAAK,IAAIA,EAAK,cAAc,EAAI,CAAC,oBAE5FiF,EAAsB,QAAQjF,GAAM,cAAgB,GAAK,KAAK,IAAIA,EAAK,aAAa,EAAI,CAAC,oBAEzFkF,EAAuB,QAAQlF,GAAM,eAAiB,GAAK,KAAK,IAAIA,EAAK,cAAc,EAAI,CAAC,oBAE5FmF,EAAsB,QAAQnF,GAAM,cAAgB,GAAK,KAAK,IAAIA,EAAK,aAAa,EAAI,CAAC,oBAEzFoF,EAAyB,UAAUpF,GAAM,SAAWA,EAAK,SAAW,CAAC,OAE3E,SACE,QAAC,OACC,MAAM,6BACN,WAAW,+BACX,QAAQ,kBACR,SAAS,WACT,MAAO,CAAE,UAAWoF,EAAwB,KAAM/C,EAAe,EAEjE,oBAAC,QACC,SAAS,UACT,EAAE,4oJACJ,KACA,OAAC,QACC,SAAS,UACT,EAAE,k7FACJ,KACA,QAAC,KAAE,UAAU,kBACX,oBAAC,QACC,UAAW,GAAGQ,EAAO,SAAS,IAAIA,EAAO,WAAW,GACpD,MAAO,CAAE,UAAWqC,CAAqB,EACzC,EAAE,mkBACJ,KACA,OAAC,QACC,UAAW,GAAGrC,EAAO,SAAS,IAAIA,EAAO,YAAY,GACrD,MAAO,CAAE,UAAWmC,CAAqB,EACzC,EAAE,8iBACJ,KACA,OAAC,QACC,UAAW,GAAGnC,EAAO,SAAS,IAAIA,EAAO,YAAY,GACrD,MAAO,CAAE,UAAWsC,CAAoB,EACxC,EAAE,4iBACJ,KACA,OAAC,QACC,UAAW,GAAGtC,EAAO,SAAS,IAAIA,EAAO,WAAW,GACpD,MAAO,CAAE,UAAWoC,CAAoB,EACxC,EAAE,uhBACJ,GACF,GACF,CAEJ,EASE,YAAa,CACX,MAAO,IACP,OAAQ,GACV,EAEA,cAAgB3B,IAAa,CAC3B,GAAGA,EACH,WAAY,CACV,MAAO,CACL,MAAO,aACT,CACF,EACA,MAAOA,GAAS,OAAS,CAAC,CAC5B,GAGA,YAAa,CAACC,EAAoCC,IAAyD,CACzG,MAAM6B,EAAiB7B,EAAe,OAkBtC,MAhB2B,CACzB,eAAgB6B,GAAgB,eAC5B9B,EAAiB,UAAU8B,EAAe,cAAc,EAAE,MAAM,EAChE,EACJ,cAAeA,GAAgB,cAC3B9B,EAAiB,UAAU8B,EAAe,aAAa,EAAE,MAAM,EAC/D,EACJ,eAAgBA,GAAgB,eAC5B9B,EAAiB,UAAU8B,EAAe,cAAc,EAAE,MAAM,EAChE,EACJ,cAAeA,GAAgB,cAC3B9B,EAAiB,UAAU8B,EAAe,aAAa,EAAE,MAAM,EAC/D,EACJ,SAAUA,GAAgB,SAAW9B,EAAiB,UAAU8B,EAAe,QAAQ,EAAE,MAAM,EAAI,CACrG,CAGF,EAEA,kBAAoB1B,GAAY,CAC9B,MAAMC,EAAW,IAAC,KAAE,2CAA4C,WAAW,CAAC,EAC5ED,EACG,gBAAgB,CACf,SAAAC,EACA,GAAI,WACJ,KAAM,kBACN,QAAM,KAAE,uCAAwC,WAAW,EAC3D,OAAQe,GAAA,CACV,CAAC,EACA,gBAAgB,CACf,SAAAf,EACA,GAAI,iBACJ,KAAM,wBACN,QAAM,KAAE,mDAAoD,uBAAuB,EACnF,OAAQe,GAAA,CACV,CAAC,EACA,gBAAgB,CACf,SAAAf,EACA,GAAI,gBACJ,KAAM,uBACN,QAAM,KAAE,kDAAmD,sBAAsB,EACjF,OAAQe,GAAA,CACV,CAAC,EACA,gBAAgB,CACf,SAAAf,EACA,GAAI,iBACJ,KAAM,wBACN,QAAM,KAAE,kDAAmD,sBAAsB,EACjF,OAAQe,GAAA,CACV,CAAC,EACA,gBAAgB,CACf,SAAAf,EACA,GAAI,gBACJ,KAAM,uBACN,QAAM,KAAE,iDAAkD,qBAAqB,EAC/E,OAAQe,GAAA,CACV,CAAC,CACL,CACF,EAEM,GAAavB,IAA0B,CAC3C,aAAW,OAAI,CACb,gBAAiB,UACjB,aAAc,WACd,QAAS,QACT,kBAAmB,CACjB,KAAM,CACJ,UAAW,cACb,EACA,GAAI,CACF,UAAW,gBACb,CACF,CACF,CAAC,EACD,eAAa,OAAI,CAGf,mBAAoB,QACtB,CAAC,EACD,gBAAc,OAAI,CAGhB,mBAAoB,SACtB,CAAC,CACH,GCpHakC,GAAyE,CACpF,GAAI,UACJ,KAAM,UACN,YAAa,UAEb,QA9DetB,GAAsE,CACrF,KAAM,CAAE,KAAAhE,CAAK,EAAIgE,EACXnB,EAAS,GAAU,MAAO,OAAQ7C,CAAI,EAGtCiE,KAAW,MAAO,EAExB,SACE,QAAC,OAAI,UAAWpB,EAAO,UACrB,qBAAC,OACC,MAAM,6BACN,QAAQ,cACR,MAAM,OACN,OAAO,OACP,oBAAoB,OAEpB,qBAAC,QACC,oBAAC,WAAQ,GAAI,SAASoB,CAAQ,GAAI,aAAa,iBAAiB,MAAM,MAAM,OAAO,MACjF,mBAAC,SAAM,UAAWjE,GAAM,gBAAiB,EAAE,MAAM,EAAE,MAAM,MAAM,MAAM,OAAO,MAAM,EACpF,KACA,OAAC,YAAS,GAAI,eAAeiE,CAAQ,GACnC,mBAAC,WAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAM,GAC/C,GACF,KAEA,OAAC,QACC,EAAE,IACF,EAAE,IACF,MAAM,OACN,OAAO,OACP,SAAU,oBAAoBA,CAAQ,IACtC,MAAO,CAAE,KAAM,MAAO,EACxB,KACA,OAAC,WACC,GAAG,MACH,GAAG,MACH,GAAG,MACH,GAAG,MACH,MAAO,CAAE,KAAMjE,GAAM,gBAAkB,cAAciE,CAAQ,IAAMjE,GAAM,eAAgB,EAC3F,KAGA,OAAC,WACC,GAAG,MACH,GAAG,MACH,GAAG,MACH,GAAG,MACH,SAAU,oBAAoBiE,CAAQ,IACtC,UAAWpB,EAAO,cACpB,GACF,KAEA,OAAC,QAAK,UAAWA,EAAO,KAAO,SAAA7C,GAAM,KAAK,GAC5C,CAEJ,EASE,YAAa,CACX,MAAO,IACP,OAAQ,GACV,EAEA,cAAgBsD,IAAa,CAC3B,GAAGA,EACH,WAAY,CACV,MAAO,CACL,MAAOjB,EACT,CACF,EACA,OAAQ,CACN,MAAOK,GAAM,OACb,OAAQC,GAAO,OACf,MAAO,CACL,MAAOL,EACT,CACF,EACA,UAAW,CACT,MAAOgB,GAAS,WAAW,OAAS,IACpC,OAAQA,GAAS,WAAW,QAAU,IACtC,IAAKA,GAAS,WAAW,IACzB,KAAMA,GAAS,WAAW,KAC1B,SAAUA,GAAS,WAAW,UAAY,CAC5C,EACA,MAAOA,GAAS,OAAS,CAAC,CAC5B,GAEA,YAAa,CAACC,EAAoCC,IAA8D,CAC9G,MAAMU,EAAaV,EAAe,OAE5BxD,EAA0B,CAC9B,KAAMkE,GAAY,KAAOX,EAAiB,QAAQW,EAAW,IAAI,EAAE,MAAM,EAAI,GAC7E,MAAOA,GAAY,MAAM,MACzB,MAAOA,GAAY,OAASxB,GAAM,OAClC,OAAQwB,GAAY,QAAUvB,GAAO,OACrC,KAAMuB,GAAY,IACpB,EAEIA,GAAY,QACdlE,EAAK,MAAQuD,EAAiB,SAASW,EAAW,KAAK,EAAE,MAAM,GAGjE,KAAM,CAAE,WAAAC,EAAY,OAAAC,CAAO,EAAIZ,EAC/B,OAAAxD,EAAK,gBAAkBmE,GAAY,MAAQZ,EAAiB,SAASY,EAAW,KAAK,EAAE,MAAM,EAAI9B,GACjGrC,EAAK,YAAcoE,GAAQ,MAAQb,EAAiB,SAASa,EAAO,KAAK,EAAE,MAAM,EAAI/B,GACrFrC,EAAK,YAAcoE,GAAQ,OAAS,EAEpCpE,EAAK,gBAAkBmE,GAAY,MAAQZ,EAAiB,YAAYY,EAAW,KAAK,EAAE,MAAM,EAAI,OAE7FnE,CACT,EAEA,kBAAoB2D,GAAY,CAC9B,MAAMC,EAAW,IAAC,KAAE,uCAAwC,SAAS,CAAC,EACtED,EACG,gBAAgB,CACf,SAAAC,EACA,GAAI,eACJ,KAAM,cACN,QAAM,KAAE,gCAAiC,MAAM,EAC/C,OAAQC,GAAA,CACV,CAAC,EACA,gBAAgB,CACf,SAAAD,EACA,GAAI,eACJ,KAAM,eACN,QAAM,KAAE,sCAAuC,YAAY,EAC3D,OAAQE,GAAA,EACR,SAAU,CAAC,EACX,aAAc,CAAC,CACjB,CAAC,EACA,SAAS,CACR,SAAAF,EACA,KAAM,eACN,QAAM,KAAE,sCAAuC,YAAY,EAC3D,SAAU,CACR,QAAS,CACP,CAAE,MAAOlB,GAAM,KAAM,SAAO,KAAE,iCAAkC,MAAM,CAAE,EACxE,CAAE,MAAOA,GAAM,OAAQ,SAAO,KAAE,mCAAoC,QAAQ,CAAE,EAC9E,CAAE,MAAOA,GAAM,MAAO,SAAO,KAAE,kCAAmC,OAAO,CAAE,CAC7E,CACF,EACA,aAAcA,GAAM,IACtB,CAAC,EACA,SAAS,CACR,SAAAkB,EACA,KAAM,gBACN,QAAM,KAAE,0CAA2C,gBAAgB,EACnE,SAAU,CACR,QAAS,CACP,CAAE,MAAOjB,GAAO,IAAK,SAAO,KAAE,gCAAiC,KAAK,CAAE,EACtE,CAAE,MAAOA,GAAO,OAAQ,SAAO,KAAE,mCAAoC,QAAQ,CAAE,EAC/E,CAAE,MAAOA,GAAO,OAAQ,SAAO,KAAE,mCAAoC,QAAQ,CAAE,CACjF,CACF,EACA,aAAcA,GAAO,MACvB,CAAC,EACA,eAAe,CACd,SAAAiB,EACA,KAAM,cACN,QAAM,KAAE,qCAAsC,WAAW,EACzD,SAAU,CACR,eAAa,KAAE,uCAAwC,MAAM,CAC/D,CACF,CAAC,CACL,EAEA,wBAAyB,CAEvB,CAAE,EAAG,GAAI,EAAG,CAAE,EACd,CAAE,EAAG,IAAM,EAAG,EAAI,EAGlB,CAAE,EAAG,EAAG,EAAG,CAAE,EACb,CAAE,EAAG,GAAK,EAAG,EAAI,EAGjB,CAAE,EAAG,EAAG,EAAG,CAAE,EACb,CAAE,EAAG,GAAK,EAAG,GAAK,EAGlB,CAAE,EAAG,EAAG,EAAG,EAAG,EACd,CAAE,EAAG,IAAM,EAAG,GAAK,CACrB,CACF,EAEM,GAAY,CAACR,EAAsBpD,IAAwC,CAC/E,MAAMqE,EAAUrE,GAAM,SAAW2C,GAAO,OAAS,MAAQ3C,GAAM,SAAW2C,GAAO,IAAM,MAAQ,MACzF2B,EAAWtE,GAAM,QAAU0C,GAAM,OAAS,MAAQ1C,GAAM,QAAU0C,GAAM,KAAO,MAAQ,MACvF6B,EAAgB,aAAavE,GAAM,QAAU0C,GAAM,OAAS,OAAS1C,GAAM,QAAU0C,GAAM,KAAO,MAAQ,MAAM,KACpH1C,GAAM,SAAW2C,GAAO,OAAS,OAAS3C,GAAM,SAAW2C,GAAO,IAAM,MAAQ,MAClF,IAEA,MAAO,CACL,aAAW,OAAI,CACb,OAAQ,OACR,MAAO,MACT,CAAC,EACD,QAAM,OAAI,CACR,SAAU,WACV,IAAK0B,EACL,KAAMC,EACN,UAAWC,EACX,SAAU,GAAGvE,GAAM,IAAI,KACvB,MAAOA,GAAM,KACf,CAAC,EACD,iBAAe,OAAI,CACjB,KAAM,OACN,OAAQA,GAAM,aAAe,OAC7B,YAAaA,GAAM,aAAe,EAClC,eAAgB,OAClB,CAAC,CACH,CACF,E,wCC/MA,MAAMuF,MAAqB,OAAI,CAC7B,KAAM,CACJ,aAAc,oBAChB,CACF,CAAC,EAEM,SAASC,GAAYxB,EAAiD,CAC3E,KAAM,CAAE,KAAAhE,CAAK,EAAIgE,EACjB,GAAI,CAAChE,GAAM,KACT,OAAO,KAGT,MAAMyF,EAA0B,CAC9B,KAAMzF,GAAM,KACZ,OAAQA,GAAM,YACd,YAAaA,GAAM,OACnB,OAAQ,OACR,MAAO,MACT,EAEA,SACE,OAAC0F,GAAA,EAAY,CAAC,IAAK1F,EAAK,KAAM,MAAOyF,EAAU,UAAWA,EAAS,YAAcF,GAAqB,OAAW,CAErH,CAEO,MAAMI,GAAoD,CAC/D,GAAI,OACJ,KAAM,OACN,YAAa,mBAEb,QAASH,GAET,cAAgBlC,IAAa,CAC3B,GAAGA,EACH,OAAQ,CACN,KAAM,CACJ,KAAM,MAAsB,MAC5B,MAAO,uCACT,EACA,KAAM,CAAE,MAAOjB,EAAe,CAChC,EACA,WAAY,CACV,MAAO,CACL,MAAO,aACT,CACF,EACA,UAAW,CACT,MAAOiB,GAAS,WAAW,OAAS,IACpC,OAAQA,GAAS,WAAW,QAAU,IACtC,IAAKA,GAAS,WAAW,KAAO,IAChC,KAAMA,GAAS,WAAW,MAAQ,IAClC,SAAUA,GAAS,WAAW,UAAY,CAC5C,EACA,MAAOA,GAAS,OAAS,CAAC,CAC5B,GAGA,YAAa,CAACC,EAAoCC,IAAqD,CACrG,MAAMoC,EAAapC,EAAe,OAElC,IAAIqC,EACAD,GAAY,OACdC,EAAOtC,EAAiB,YAAYqC,EAAW,IAAI,EAAE,MAAM,IAEzD,CAACC,GAAQ,IAAC,aAASA,CAAI,KACzBA,KAAO,MAAuB,uCAAuC,GAGvE,MAAM7F,EAAiB,CACrB,KAAA6F,EACA,KAAMD,GAAY,KAAOrC,EAAiB,SAASqC,EAAW,IAAI,EAAE,MAAM,EAAIvD,EAChF,EAEA,OAAIuD,GAAY,QAAQ,OAASA,GAAY,OAAO,OAC9CA,EAAW,OAAO,MAAQ,IAC5B5F,EAAK,OAAS4F,EAAW,QAAQ,MACjC5F,EAAK,YAAcuD,EAAiB,SAASqC,EAAW,OAAO,KAAK,EAAE,MAAM,GAIzE5F,CACT,EAGA,kBAAoB2D,GAAY,CAC9B,MAAMC,EAAW,IAAC,KAAE,iCAAkC,MAAM,CAAC,EAC7DD,EACG,gBAAgB,CACf,SAAAC,EACA,GAAI,eACJ,KAAM,cACN,QAAM,KAAE,iCAAkC,UAAU,EACpD,OAAQkC,GAAA,EACR,SAAU,CACR,aAAc,OACd,SAAU,GACZ,CACF,CAAC,EACA,gBAAgB,CACf,SAAAlC,EACA,GAAI,cACJ,KAAM,cACN,QAAM,KAAE,mCAAoC,YAAY,EACxD,OAAQE,GAAA,EACR,SAAU,CAAC,EACX,aAAc,CAEZ,MAAO,MACT,CACF,CAAC,CAwBL,CACF,E,gEC5IA,MAAMiC,GAAyF,CAC7F,SAAU,CAAC,CACb,EAEMC,GAAsBhC,GAAoD,CAC9E,KAAM,CAAE,KAAAhE,EAAM,WAAAiG,EAAY,OAAA9I,CAAO,EAAI6G,EAC/BnB,KAAS,OAAW,GAAU7C,CAAI,CAAC,EAEnCM,KAAU,OAAgB,EAC1B4F,EAAQ5F,EAAQ,eAAe,MACrC,IAAI6F,EACJA,EAAY7F,EAAQ,eAAe,OAAO,KAAK,OAE/C,MAAM8F,KAAaC,GAAA,GAAuBH,GAAO,oBAAmBI,GAAA,IAAG,EAAK,CAAC,EAEvEC,EAAkB,IAClBJ,GAAahJ,EAAO,MAAM,OAASqJ,EAAc,EAC5C,kBAGLL,GAAahJ,EAAO,MAAM,OAAS,CAAC6C,GAAM,KACrC,UAGFA,GAAM,KAAOA,EAAK,KAAO,4BAG5BwG,EAAgB,IAAM,CAC1B,MAAMC,KAAa,OAA2BN,CAAS,EACvD,MAAO,IAAC,OAAahJ,EAAO,MAAM,MAAOsJ,CAAU,CACrD,EAEA,OAAIL,GAAcH,KACT,OAACS,GAAA,CAAiB,GAAG1C,CAAA,CAAO,KAInC,OAAC,OAAI,UAAWnB,EAAO,UACrB,mBAAC,QAAK,UAAWA,EAAO,KAAO,SAAA0D,EAAgB,EAAE,EACnD,CAEJ,EAEMG,GAAmB1C,GAAoD,CAC3E,GAAI,CAAE,KAAAhE,EAAM,OAAA7C,CAAO,EAAI6G,EACvB,MAAM1D,KAAU,OAAgB,EAChC,IAAI6F,EACJA,EAAY7F,EAAQ,eAAe,OAAO,KAAK,OAE/C,MAAMqG,KAAgB,eACnBC,GAA8B,CAC7B,IAAIC,EAEJ,GADAA,EAAkBvG,EAAQ,eAAe,SAAS,CAAC,EAC/CuG,EAAiB,CACnB,MAAMvD,EAAUuD,EAAgB,QAChCA,EAAgB,SAAS,CACvB,GAAGvD,EACH,OAAQ,CACN,GAAGA,EAAQ,OACX,KAAM,CAAE,MAAO,GAAI,MAAAsD,EAAc,KAAM,MAAkB,KAAM,CACjE,EACA,WAAY,CACV,MAAO,CAAE,MAAAA,EAAc,MAAOtD,EAAQ,YAAY,OAAO,OAAS,EAAG,CACvE,CACF,CAAC,EAGD,MAAM4C,EAAQ5F,EAAQ,eAAe,MACjC4F,IACFA,EAAM,gBAAgB,KAAK,EAAK,EAChCA,EAAM,WAAWA,EAAM,IAAI,EAE/B,CACF,EACA,CAAC5F,EAAQ,eAAe,MAAOA,EAAQ,eAAe,QAAQ,CAChE,EAEMuC,KAAS,OAAW,GAAU7C,CAAI,CAAC,EACzC,SACE,OAAC,OAAI,UAAW6C,EAAO,sBACpB,SAAAsD,MACC,OAACW,GAAA,GACC,QAAS,CAAE,KAAMX,CAAU,EAC3B,MAAOhJ,EAAO,MAAM,OAAS,GAC7B,SAAUwJ,EACV,KAAMZ,EAAA,CACR,EAEJ,CAEJ,EAEM,GAAa/F,GAAgCoD,IAA0B,CAC3E,aAAW,OAAI,CACb,SAAU,WACV,OAAQ,OACR,MAAO,OACP,QAAS,OACX,CAAC,EACD,yBAAuB,OAAI,CACzB,OAAQ,OACR,MAAO,OACP,QAAS,OACT,WAAY,SACZ,QAASA,EAAM,QAAQ,CAAC,CAC1B,CAAC,EACD,QAAM,OAAI,CACR,QAAS,aACT,cAAepD,GAAM,OACrB,UAAWA,GAAM,MACjB,SAAU,GAAGA,GAAM,IAAI,KACvB,MAAOA,GAAM,KACf,CAAC,CACH,GAEa+G,GAA2D,CACtE,GAAI,eACJ,KAAM,eACN,YAAa,wBAEb,QAASf,GAET,YAAa,GAEb,YAAa,CACX,MAAO,IACP,OAAQ,EACV,EAEA,cAAgB1C,IAAa,CAC3B,GAAGA,EACH,OAAQ,CACN,MAAOZ,GAAM,OACb,OAAQC,GAAO,OACf,MAAO,CACL,MAAOL,EACT,EACA,KAAM,CAAE,KAAM,MAAkB,MAAO,MAAO,GAAI,MAAO,EAAG,EAC5D,KAAM,EACR,EACA,WAAY,CACV,MAAO,CACL,MAAOD,EACT,CACF,EACA,UAAW,CACT,MAAOiB,GAAS,WAAW,MAC3B,OAAQA,GAAS,WAAW,OAC5B,IAAKA,GAAS,WAAW,KAAO,IAChC,KAAMA,GAAS,WAAW,MAAQ,IAClC,SAAUA,GAAS,WAAW,UAAY,CAC5C,EACA,MAAOA,GAAS,OAAS,CAAC,CAC5B,GAEA,YAAa,CAACC,EAAoCC,IAAqD,CACrG,MAAMU,EAAaV,EAAe,OAE5BxD,EAAiB,CACrB,KAAMkE,GAAY,KAAOX,EAAiB,QAAQW,EAAW,IAAI,EAAE,MAAM,EAAI,GAC7E,MAAOA,GAAY,MAAM,MACzB,MAAOA,GAAY,OAASxB,GAAM,OAClC,OAAQwB,GAAY,QAAUvB,GAAO,OACrC,KAAMuB,GAAY,IACpB,EAEA,OAAIA,GAAY,QACdlE,EAAK,MAAQuD,EAAiB,SAASW,EAAW,KAAK,EAAE,MAAM,GAG1DlE,CACT,EAEA,kBAAoB2D,GAAY,CAC9B,MAAMC,EAAW,IAAC,KAAE,+BAAgC,cAAc,CAAC,EACnED,EACG,gBAAgB,CACf,SAAAC,EACA,GAAI,eACJ,KAAM,cACN,QAAM,KAAE,mBAAoB,MAAM,EAClC,OAAQC,GAAA,CACV,CAAC,EACA,gBAAgB,CACf,SAAAD,EACA,GAAI,eACJ,KAAM,eACN,QAAM,KAAE,oBAAqB,YAAY,EACzC,OAAQE,GAAA,EACR,SAAU,CAAC,EACX,aAAc,CAAC,CACjB,CAAC,EACA,SAAS,CACR,SAAAF,EACA,KAAM,eACN,QAAM,KAAE,yBAA0B,YAAY,EAC9C,SAAU,CACR,QAAS,CACP,CAAE,MAAOlB,GAAM,KAAM,SAAO,KAAE,sCAAuC,MAAM,CAAE,EAC7E,CAAE,MAAOA,GAAM,OAAQ,SAAO,KAAE,wCAAyC,QAAQ,CAAE,EACnF,CAAE,MAAOA,GAAM,MAAO,SAAO,KAAE,uCAAwC,OAAO,CAAE,CAClF,CACF,EACA,aAAcA,GAAM,IACtB,CAAC,EACA,SAAS,CACR,SAAAkB,EACA,KAAM,gBACN,QAAM,KAAE,6BAA8B,gBAAgB,EACtD,SAAU,CACR,QAAS,CACP,CAAE,MAAOjB,GAAO,IAAK,SAAO,KAAE,qCAAsC,KAAK,CAAE,EAC3E,CAAE,MAAOA,GAAO,OAAQ,SAAO,KAAE,wCAAyC,QAAQ,CAAE,EACpF,CAAE,MAAOA,GAAO,OAAQ,SAAO,KAAE,wCAAyC,QAAQ,CAAE,CACtF,CACF,EACA,aAAcA,GAAO,MACvB,CAAC,EACA,eAAe,CACd,SAAAiB,EACA,KAAM,cACN,QAAM,KAAE,wBAAyB,WAAW,EAC5C,SAAU,CACR,eAAa,KAAE,4CAA6C,MAAM,CACpE,CACF,CAAC,CACL,CACF,ECvLaoD,GAAuC,CAClD,GAAI,gBACJ,KAAM,gBACN,YAAa,gBAEb,QAvDqBhD,GAAsE,CAC3F,KAAM,CAAE,KAAAhE,CAAK,EAAIgE,EACXnB,EAAS,GAAU,MAAO,OAAQ7C,CAAI,EAGtCiE,KAAW,MAAO,EAExB,SACE,QAAC,OAAI,UAAWpB,EAAO,UACrB,qBAAC,OACC,MAAM,6BACN,QAAQ,cACR,MAAM,OACN,OAAO,OACP,oBAAoB,OAEpB,qBAAC,QACC,oBAAC,WAAQ,GAAI,SAASoB,CAAQ,GAAI,aAAa,iBAAiB,MAAM,MAAM,OAAO,MACjF,mBAAC,SAAM,UAAWjE,GAAM,gBAAiB,EAAE,MAAM,EAAE,MAAM,MAAM,MAAM,OAAO,MAAM,EACpF,KACA,OAAC,YAAS,GAAI,qBAAqBiE,CAAQ,GACzC,mBAAC,WAAQ,OAAO,0BAA2B,GAC7C,GACF,KAEA,OAAC,QACC,EAAE,IACF,EAAE,IACF,MAAM,OACN,OAAO,OACP,SAAU,0BAA0BA,CAAQ,IAC5C,MAAO,CAAE,KAAM,MAAO,EACxB,KACA,OAAC,WACC,OAAO,2BACP,MAAO,CAAE,KAAMjE,GAAM,gBAAkB,cAAciE,CAAQ,IAAMjE,GAAM,eAAgB,EAC3F,KAGA,OAAC,WACC,OAAO,2BACP,SAAU,0BAA0BiE,CAAQ,IAC5C,UAAWpB,EAAO,cACpB,GACF,KACA,OAAC,QAAK,UAAWA,EAAO,KAAO,SAAA7C,GAAM,KAAK,GAC5C,CAEJ,EASE,YAAa,CACX,MAAO,IACP,OAAQ,GACV,EAEA,cAAgBsD,IAAa,CAC3B,GAAGA,EACH,WAAY,CACV,MAAO,CACL,MAAOjB,EACT,CACF,EACA,OAAQ,CACN,MAAOK,GAAM,OACb,OAAQC,GAAO,OACf,MAAO,CACL,MAAOL,EACT,CACF,EACA,UAAW,CACT,MAAOgB,GAAS,WAAW,OAAS,IACpC,OAAQA,GAAS,WAAW,QAAU,IACtC,IAAKA,GAAS,WAAW,IACzB,KAAMA,GAAS,WAAW,KAC1B,SAAUA,GAAS,WAAW,UAAY,CAC5C,EACA,MAAOA,GAAS,OAAS,CAAC,CAC5B,GAGA,YAAa,CAACC,EAAoCC,IAA8D,CAC9G,MAAMU,EAAaV,EAAe,OAE5BxD,EAA0B,CAC9B,KAAMkE,GAAY,KAAOX,EAAiB,QAAQW,EAAW,IAAI,EAAE,MAAM,EAAI,GAC7E,MAAOA,GAAY,MAAM,MACzB,MAAOA,GAAY,OAASxB,GAAM,OAClC,OAAQwB,GAAY,QAAUvB,GAAO,OACrC,KAAMuB,GAAY,IACpB,EAEIA,GAAY,QACdlE,EAAK,MAAQuD,EAAiB,SAASW,EAAW,KAAK,EAAE,MAAM,GAGjE,KAAM,CAAE,WAAAC,EAAY,OAAAC,CAAO,EAAIZ,EAC/B,OAAAxD,EAAK,gBAAkBmE,GAAY,MAAQZ,EAAiB,SAASY,EAAW,KAAK,EAAE,MAAM,EAAI9B,GACjGrC,EAAK,YAAcoE,GAAQ,MAAQb,EAAiB,SAASa,EAAO,KAAK,EAAE,MAAM,EAAI/B,GACrFrC,EAAK,YAAcoE,GAAQ,OAAS,EAEpCpE,EAAK,gBAAkBmE,GAAY,MAAQZ,EAAiB,YAAYY,EAAW,KAAK,EAAE,MAAM,EAAI,OAE7FnE,CACT,EAEA,kBAAoB2D,GAAY,CAC9B,MAAMC,EAAW,IAAC,KAAE,mDAAoD,eAAe,CAAC,EACxFD,EACG,gBAAgB,CACf,SAAAC,EACA,GAAI,eACJ,KAAM,cACN,QAAM,KAAE,sCAAuC,MAAM,EACrD,OAAQC,GAAA,CACV,CAAC,EACA,gBAAgB,CACf,SAAAD,EACA,GAAI,eACJ,KAAM,eACN,QAAM,KAAE,4CAA6C,YAAY,EACjE,OAAQE,GAAA,EACR,SAAU,CAAC,EACX,aAAc,CAAC,CACjB,CAAC,EACA,SAAS,CACR,SAAAF,EACA,KAAM,eACN,QAAM,KAAE,4CAA6C,YAAY,EACjE,SAAU,CACR,QAAS,CACP,CAAE,MAAOlB,GAAM,KAAM,SAAO,KAAE,uCAAwC,MAAM,CAAE,EAC9E,CAAE,MAAOA,GAAM,OAAQ,SAAO,KAAE,yCAA0C,QAAQ,CAAE,EACpF,CAAE,MAAOA,GAAM,MAAO,SAAO,KAAE,wCAAyC,OAAO,CAAE,CACnF,CACF,EACA,aAAcA,GAAM,IACtB,CAAC,EACA,SAAS,CACR,SAAAkB,EACA,KAAM,gBACN,QAAM,KAAE,gDAAiD,gBAAgB,EACzE,SAAU,CACR,QAAS,CACP,CAAE,MAAOjB,GAAO,IAAK,SAAO,KAAE,sCAAuC,KAAK,CAAE,EAC5E,CAAE,MAAOA,GAAO,OAAQ,SAAO,KAAE,yCAA0C,QAAQ,CAAE,EACrF,CAAE,MAAOA,GAAO,OAAQ,SAAO,KAAE,yCAA0C,QAAQ,CAAE,CACvF,CACF,EACA,aAAcA,GAAO,MACvB,CAAC,EACA,eAAe,CACd,SAAAiB,EACA,KAAM,cACN,QAAM,KAAE,2CAA4C,WAAW,EAC/D,SAAU,CACR,eAAa,KAAE,6CAA8C,MAAM,CACrE,CACF,CAAC,CACL,EAEA,wBAAyB,CACvB,CAAE,EAAG,IAAM,EAAG,CAAE,EAChB,CAAE,EAAG,IAAM,EAAG,CAAE,EAChB,CAAE,EAAG,GAAK,EAAG,CAAE,EACf,CAAE,EAAG,EAAG,EAAG,CAAE,EACb,CAAE,EAAG,KAAO,EAAG,EAAI,EACnB,CAAE,EAAG,IAAM,EAAG,EAAI,EAClB,CAAE,EAAG,IAAM,EAAG,GAAK,EACnB,CAAE,EAAG,KAAO,EAAG,GAAK,EACpB,CAAE,EAAG,IAAM,EAAG,EAAG,EACjB,CAAE,EAAG,GAAK,EAAG,EAAG,EAChB,CAAE,EAAG,GAAK,EAAG,EAAG,EAChB,CAAE,EAAG,GAAI,EAAG,EAAG,EACf,CAAE,EAAG,MAAQ,EAAG,GAAK,EACrB,CAAE,EAAG,KAAO,EAAG,GAAK,EACpB,CAAE,EAAG,KAAO,EAAG,EAAI,EACnB,CAAE,EAAG,MAAQ,EAAG,EAAI,CACtB,CACF,EAEM,GAAY,CAACR,EAAsBpD,IAAwC,CAC/E,MAAMqE,EAAUrE,GAAM,SAAW2C,GAAO,OAAS,MAAQ3C,GAAM,SAAW2C,GAAO,IAAM,MAAQ,MACzF2B,EAAWtE,GAAM,QAAU0C,GAAM,OAAS,MAAQ1C,GAAM,QAAU0C,GAAM,KAAO,MAAQ,MACvF6B,EAAgB,aAAavE,GAAM,QAAU0C,GAAM,OAAS,OAAS1C,GAAM,QAAU0C,GAAM,KAAO,MAAQ,MAAM,KACpH1C,GAAM,SAAW2C,GAAO,OAAS,OAAS3C,GAAM,SAAW2C,GAAO,IAAM,MAAQ,MAClF,IAEA,MAAO,CACL,aAAW,OAAI,CACb,OAAQ,OACR,MAAO,MACT,CAAC,EACD,QAAM,OAAI,CACR,SAAU,WACV,IAAK0B,EACL,KAAMC,EACN,UAAWC,EACX,SAAU,GAAGvE,GAAM,IAAI,KACvB,MAAOA,GAAM,KACf,CAAC,EACD,iBAAe,OAAI,CACjB,KAAM,OACN,OAAQA,GAAM,aAAe,OAC7B,YAAaA,GAAM,aAAe,EAClC,eAAgB,OAClB,CAAC,CACH,CACF,ECtNMiH,MAAmB,QAA+C,CAAC,CAAE,KAAAjH,CAAK,IAAM,CACpF,MAAM6C,KAAS,OAAW,GAAW7C,CAAI,EAEzC,SACE,OAAC,OAAI,UAAW6C,EAAO,UACrB,mBAAC,QAAK,UAAWA,EAAO,KAAO,SAAA7C,GAAM,KAAK,EAC5C,CAEJ,CAAC,EAEDiH,GAAiB,YAAc,mBAE/B,MAAM,GAAY,CAAC7D,EAAsBpD,KAAgC,CACvE,aAAW,OAAI,CACb,SAAU,WACV,OAAQ,OACR,MAAO,OACP,QAAS,OACX,CAAC,EACD,QAAM,OAAI,CACR,QAAS,aACT,cAAeA,GAAM,OACrB,UAAWA,GAAM,MACjB,SAAU,GAAGA,GAAM,IAAI,KACvB,MAAOA,GAAM,KACf,CAAC,CACH,GAEakH,GAAyD,CACpE,GAAI,YACJ,KAAM,YACN,YAAa,YAEb,QAASD,GAET,YAAa,CACX,MAAO,IACP,OAAQ,GACV,EAEA,cAAgB3D,IAAa,CAC3B,GAAGA,EACH,OAAQ,CACN,MAAOZ,GAAM,OACb,OAAQC,GAAO,OACf,MAAO,CACL,MAAOL,EACT,CACF,EACA,WAAY,CACV,MAAO,CACL,MAAOD,EACT,CACF,EACA,MAAOiB,GAAS,OAAS,CAAC,CAC5B,GAGA,YAAa,CAACC,EAAoCC,IAAqD,CACrG,MAAMU,EAAaV,EAAe,OAE5BxD,EAAiB,CACrB,KAAMkE,GAAY,KAAOX,EAAiB,QAAQW,EAAW,IAAI,EAAE,MAAM,EAAI,GAC7E,MAAOA,GAAY,MAAM,MACzB,MAAOA,GAAY,OAASxB,GAAM,OAClC,OAAQwB,GAAY,QAAUvB,GAAO,OACrC,KAAMuB,GAAY,IACpB,EAEA,OAAIA,GAAY,QACdlE,EAAK,MAAQuD,EAAiB,SAASW,EAAW,KAAK,EAAE,MAAM,GAG1DlE,CACT,EAGA,kBAAoB2D,GAAY,CAC9B,MAAMC,EAAW,IAAC,KAAE,2CAA4C,WAAW,CAAC,EAC5ED,EACG,gBAAgB,CACf,SAAAC,EACA,GAAI,eACJ,KAAM,cACN,QAAM,KAAE,kCAAmC,MAAM,EACjD,OAAQC,GAAA,CACV,CAAC,EACA,gBAAgB,CACf,SAAAD,EACA,GAAI,eACJ,KAAM,eACN,QAAM,KAAE,wCAAyC,YAAY,EAC7D,OAAQE,GAAA,EACR,SAAU,CAAC,EACX,aAAc,CAAC,CACjB,CAAC,EACA,SAAS,CACR,SAAAF,EACA,KAAM,eACN,QAAM,KAAE,wCAAyC,YAAY,EAC7D,SAAU,CACR,QAAS,CACP,CAAE,MAAOlB,GAAM,KAAM,SAAO,KAAE,mCAAoC,MAAM,CAAE,EAC1E,CAAE,MAAOA,GAAM,OAAQ,SAAO,KAAE,qCAAsC,QAAQ,CAAE,EAChF,CAAE,MAAOA,GAAM,MAAO,SAAO,KAAE,oCAAqC,OAAO,CAAE,CAC/E,CACF,EACA,aAAcA,GAAM,IACtB,CAAC,EACA,SAAS,CACR,SAAAkB,EACA,KAAM,gBACN,QAAM,KAAE,4CAA6C,gBAAgB,EACrE,SAAU,CACR,QAAS,CACP,CAAE,MAAOjB,GAAO,IAAK,SAAO,KAAE,kCAAmC,KAAK,CAAE,EACxE,CAAE,MAAOA,GAAO,OAAQ,SAAO,KAAE,qCAAsC,QAAQ,CAAE,EACjF,CAAE,MAAOA,GAAO,OAAQ,SAAO,KAAE,qCAAsC,QAAQ,CAAE,CACnF,CACF,EACA,aAAcA,GAAO,MACvB,CAAC,EACA,eAAe,CACd,SAAAiB,EACA,KAAM,cACN,QAAM,KAAE,uCAAwC,WAAW,EAC3D,SAAU,CACR,eAAa,KAAE,yCAA0C,MAAM,CACjE,CACF,CAAC,CACL,CACF,EClJauD,GAAkBnH,GAAqB,CAClD,MAAM6C,KAAS,OAAWuE,GAAgBpH,CAAI,CAAC,EAC/C,SACE,QAAC,KAAE,UAAW6C,EAAO,QACnB,qBAAC,KAAE,UAAWA,EAAO,OACnB,oBAAC,QAAK,EAAE,8FAA+F,MACvG,OAAC,QAAK,EAAE,gGAAiG,MACzG,OAAC,QAAK,EAAE,2JAA4J,IACtK,KACA,QAAC,KAAE,UAAWA,EAAO,WACnB,oBAAC,QACC,UAAU,4CACV,EAAE,2JACJ,KACA,OAAC,QACC,UAAU,2CACV,EAAE,2JACJ,KACA,OAAC,QACC,UAAU,4CACV,EAAE,2JACJ,GACF,KACA,QAAC,KAAE,UAAWA,EAAO,OACnB,oBAAC,QACC,UAAU,2CACV,EAAE,2JACJ,KACA,OAAC,QACC,UAAU,4CACV,EAAE,2JACJ,KACA,OAAC,QACC,UAAU,4CACV,EAAE,2JACJ,GACF,GACF,CAEJ,ECvCawE,GAAgBrH,GAAqB,CAChD,MAAM6C,KAAS,OAAWuE,GAAgBpH,CAAI,CAAC,EAC/C,SACE,OAAC,KACC,oBAAC,KAAE,UAAW6C,EAAO,QAAS,UAAU,oCACtC,qBAAC,KAAE,UAAWA,EAAO,OACnB,oBAAC,QAAK,EAAE,iDAAkD,MAC1D,OAAC,QAAK,EAAE,0LAA2L,IACrM,KACA,OAAC,QAAK,EAAE,sBAAuB,MAC/B,OAAC,QAAK,EAAE,qBAAsB,MAC9B,OAAC,QACC,UAAWA,EAAO,WAClB,UAAU,4CACV,EAAE,2JACJ,KACA,OAAC,QACC,UAAWA,EAAO,OAClB,UAAU,4CACV,EAAE,2JACJ,GACF,EACF,CAEJ,ECxBayE,GAAetH,GAAqB,CAC/C,MAAM6C,KAAS,OAAWuE,GAAgBpH,CAAI,CAAC,EAC/C,SACE,QAAC,KAAE,UAAW6C,EAAO,QAAS,UAAU,uBACtC,qBAAC,KAAE,UAAWA,EAAO,OACnB,oBAAC,QAAK,EAAE,mDAAoD,MAC5D,OAAC,QAAK,EAAE,gLAAiL,MACzL,OAAC,QAAK,EAAE,mLAAoL,MAC5L,OAAC,QAAK,EAAE,gLAAiL,IAC3L,KACA,OAAC,QAAK,EAAE,uBAAwB,MAChC,OAAC,QAAK,EAAE,uBAAwB,MAChC,OAAC,QAAK,EAAE,uBAAwB,MAChC,OAAC,QAAK,EAAE,uBAAwB,MAChC,OAAC,QAAK,EAAE,uBAAwB,MAChC,OAAC,QAAK,EAAE,uBAAwB,MAChC,QAAC,KAAE,UAAWA,EAAO,WACnB,oBAAC,QACC,UAAU,2CACV,EAAE,2JACJ,KACA,OAAC,QACC,UAAU,4CACV,EAAE,2JACJ,KACA,OAAC,QACC,UAAU,4CACV,EAAE,2JACJ,GACF,KACA,QAAC,KAAE,UAAWA,EAAO,OACnB,oBAAC,QACC,UAAU,4CACV,EAAE,2JACJ,KACA,OAAC,QACC,UAAU,4CACV,EAAE,2JACJ,KACA,OAAC,QACC,UAAU,2CACV,EAAE,2JACJ,GACF,GACF,CAEJ,EC9Ca0E,GAAkBvH,GAAqB,CAClD,MAAM6C,KAAS,OAAWuE,GAAgBpH,CAAI,CAAC,EAC/C,SACE,QAAC,KAAE,UAAW6C,EAAO,QACnB,qBAAC,KAAE,UAAWA,EAAO,OACnB,oBAAC,QAAK,EAAE,wLAAyL,MACjM,OAAC,QAAK,EAAE,gLAAiL,IAC3L,KACA,OAAC,QAAK,EAAE,oBAAqB,MAC7B,OAAC,QAAK,EAAE,sBAAuB,MAC/B,OAAC,QAAK,EAAE,uBAAwB,MAChC,OAAC,QAAK,EAAE,uBAAwB,MAChC,OAAC,QACC,UAAWA,EAAO,WAClB,UAAU,2CACV,EAAE,2JACJ,KACA,OAAC,QACC,UAAWA,EAAO,OAClB,UAAU,2CACV,EAAE,2JACJ,GACF,CAEJ,ECIA,IAAK2E,IAAAA,IACHA,EAAA,OAAS,SACTA,EAAA,MAAQ,QACRA,EAAA,SAAW,WACXA,EAAA,SAAW,WAJRA,IAAAA,IAAA,IAQL,MAAMC,GAAe,MAAO,OAAO,OAAO,KAAK,QAkBlCC,GAA0D,CACrE,GAAI,SACJ,KAAM,SACN,YAAa,2BAEb,QArBoB,CAAC,CAAE,KAAA1H,CAAK,IACrBA,KACL,OAAC,OAAI,QAAQ,YACV,SAAAA,EAAK,OAAS,YACb,OAACqH,GAAY,CAAE,GAAGrH,CAAA,CAAM,EACtBA,EAAK,OAAS,WAChB,OAACsH,GAAW,CAAE,GAAGtH,CAAA,CAAM,EACrBA,EAAK,OAAS,cAChB,OAACmH,GAAc,CAAE,GAAGnH,CAAA,CAAM,EACxBA,EAAK,OAAS,cAChB,OAACuH,GAAc,CAAE,GAAGvH,CAAA,CAAM,EACxB,KACN,EACE,KAUJ,YAAa,CACX,MAAO,IACP,OAAQ,GACV,EAEA,cAAgBsD,IAAa,CAC3B,GAAGA,EACH,WAAY,CACV,MAAO,CACL,MAAO,aACT,CACF,EACA,UAAW,CACT,MAAOA,GAAS,WAAW,OAAS,IACpC,OAAQA,GAAS,WAAW,QAAU,IACtC,IAAKA,GAAS,WAAW,IACzB,KAAMA,GAAS,WAAW,KAC1B,SAAUA,GAAS,WAAW,UAAY,CAC5C,EACA,OAAQ,CACN,KAAM,QACR,EACA,MAAOA,GAAS,OAAS,CAAC,CAC5B,GAGA,YAAa,CAACC,EAAoCC,IAAuD,CACvG,MAAMmE,EAAenE,EAAe,OAWpC,MATyB,CACvB,UAAWmE,GAAc,UAAYpE,EAAiB,UAAUoE,EAAa,SAAS,EAAE,MAAM,EAAI,EAClG,YAAaA,GAAc,YACvBpE,EAAiB,SAASoE,EAAa,WAAW,EAAE,MAAM,EAC1D,cACJ,UAAWA,GAAc,UAAYpE,EAAiB,SAASoE,EAAa,SAAS,EAAE,MAAM,EAAI,QACjG,KAAMA,GAAc,MAAQ,QAC9B,CAGF,EAEA,kBAAoBhE,GAAY,CAC9B,MAAMC,EAAW,IAAC,KAAE,qCAAsC,QAAQ,CAAC,EACnED,EACG,UAAU,CACT,SAAAC,EACA,KAAM,cACN,QAAM,KAAE,+BAAgC,MAAM,EAC9C,SAAU,CACR,QAAS,CACP,CAAE,MAAO,SAAmB,SAAO,KAAE,+CAAgD,QAAQ,CAAE,EAC/F,CAAE,MAAO,QAAkB,SAAO,KAAE,8CAA+C,OAAO,CAAE,EAC5F,CAAE,MAAO,WAAqB,SAAO,KAAE,iDAAkD,UAAU,CAAE,EACrG,CAAE,MAAO,WAAqB,SAAO,KAAE,iDAAkD,UAAU,CAAE,CACvG,CACF,EACA,aAAc,QAChB,CAAC,EACA,gBAAgB,CACf,SAAAA,EACA,GAAI,cACJ,KAAM,qBACN,QAAM,KAAE,uCAAwC,cAAc,EAC9D,OAAQE,GAAA,EACR,SAAU,CAAC,EACX,aAAc,CACZ,MAAO,aACT,CACF,CAAC,EACA,gBAAgB,CACf,SAAAF,EACA,GAAI,YACJ,KAAM,mBACN,QAAM,KAAE,qCAAsC,YAAY,EAC1D,OAAQE,GAAA,EACR,SAAU,CAAC,EACX,aAAc,CACZ,MAAO,OACT,CACF,CAAC,EACA,gBAAgB,CACf,SAAAF,EACA,GAAI,YACJ,KAAM,mBACN,QAAM,KAAE,qCAAsC,2BAA2B,EACzE,OAAQe,GAAA,EACR,SAAU,CAAE,IAAK,EAAG,IAAK,GAAI,CAC/B,CAAC,CACL,CACF,EAEayC,GAAmBpH,GAAkCoD,IAA0B,CAC1F,QAAM,OAAI,CACR,mBAAoB,CAClB,KAAM,CACJ,YAAa,CACf,EACA,MAAO,CACL,YAAa,CACf,EACA,OAAQ,CACN,YAAa,CACf,CACF,CACF,CAAC,EACD,UAAQ,OAAI,CACV,KAAMpD,GAAM,aAAe,aAC7B,CAAC,EACD,UAAQ,OAAI,CACV,CAACoD,EAAM,YAAY,aAAa,gBAAiB,QAAQ,CAAC,EAAG,CAC3D,UAAW,SAASpD,GAAM,UAAY,EAAIA,EAAK,UAAY,CAAC,qBAC9D,EACA,KAAMA,GAAM,UACZ,OAAQ,MACV,CAAC,EACD,cAAY,OAAI,CACd,KAAMyH,GACN,OAAQ,OACR,QAAS,CACX,CAAC,EACD,WAAS,OAAI,CACX,OAAQA,GACR,cAAe,QACf,eAAgB,QAChB,YAAa,KACf,CAAC,CACH,GC9KMG,GAAe5D,GAAoD,CACvE,KAAM,CAAE,KAAAhE,EAAM,WAAAiG,CAAW,EAAIjC,EACvBnB,KAAS,OAAW,GAAU7C,CAAI,CAAC,EAGnCkG,KADU,OAAgB,EACV,eAAe,MAIrC,SAFmBG,GAAA,GAAuBH,GAAO,oBAAmBI,GAAA,IAAG,EAAK,CAAC,GAE3DL,KACT,OAAC4B,GAAA,CAAU,GAAG7D,CAAA,CAAO,KAG5B,OAAC,OAAI,UAAWnB,EAAO,UACrB,mBAAC,QAAK,UAAWA,EAAO,KACrB,SAAA7C,GAAM,KAAOA,EAAK,QAAO,KAAE,0CAA2C,0BAA0B,EACnG,EACF,CAEJ,EAEM6H,GAAY7D,GAAoD,CACpE,GAAI,CAAE,KAAAhE,EAAM,OAAA7C,CAAO,EAAI6G,EACvB,MAAM1D,KAAU,OAAgB,EAChC,IAAI6F,EACJA,EAAY7F,EAAQ,eAAe,OAAO,KAAK,OAE/C,MAAMwH,KAAU,UAAe3K,EAAO,MAAM,OAAS,EAAE,KAGvD,aAAU,IACD,IAAM,CACX4K,EAASD,EAAQ,OAAO,CAC1B,CACD,EAED,MAAME,EAAaC,GAAiD,CAClE,GAAIA,EAAM,MAAQ,QAAS,CACzBA,EAAM,eAAe,EACrB,MAAM/B,EAAQ5F,EAAQ,eAAe,MACjC4F,GACFA,EAAM,gBAAgB,KAAK,EAAK,CAEpC,CACF,EAEMgC,EAAWD,GAAiD,CAChEH,EAAQ,QAAUG,EAAM,cAAc,KACxC,EAEMF,KAAW,eACdI,GAAsB,CACrB,IAAItB,EAEJ,GADAA,EAAkBvG,EAAQ,eAAe,SAAS,CAAC,EAC/CuG,EAAiB,CACnB,MAAMvD,EAAUuD,EAAgB,QAChCA,EAAgB,SAAS,CACvB,GAAGvD,EACH,OAAQ,CACN,GAAGA,EAAQ,OACX,KAAM,CAAE,GAAGuD,EAAgB,QAAQ,OAAO,KAAM,MAAOsB,CAAU,CACnE,CACF,CAAC,EAGD,MAAMjC,EAAQ5F,EAAQ,eAAe,MACjC4F,GACFA,EAAM,WAAWA,EAAM,IAAI,CAE/B,CACF,EACA,CAAC5F,EAAQ,eAAe,MAAOA,EAAQ,eAAe,QAAQ,CAChE,EAEMuC,KAAS,OAAW,GAAU7C,CAAI,CAAC,EACzC,SACE,OAAC,OAAI,UAAW6C,EAAO,sBACpB,SAAAsD,MAAa,OAACrH,GAAA,EAAK,CAAC,aAAc3B,EAAO,MAAM,OAAS,GAAI,UAAA6K,EAAsB,QAAAE,EAAkB,UAAS,GAAC,EACjH,CAEJ,EAEM,GAAalI,GAAgCoD,IAA0B,CAC3E,aAAW,OAAI,CACb,SAAU,WACV,OAAQ,OACR,MAAO,OACP,QAAS,OACX,CAAC,EACD,yBAAuB,OAAI,CACzB,OAAQ,OACR,MAAO,OACP,QAAS,OACT,WAAY,SACZ,QAASA,EAAM,QAAQ,CAAC,CAC1B,CAAC,EACD,QAAM,OAAI,CACR,QAAS,aACT,cAAepD,GAAM,OACrB,UAAWA,GAAM,MACjB,SAAU,GAAGA,GAAM,IAAI,KACvB,MAAOA,GAAM,KACf,CAAC,CACH,GAEaoI,GAAoD,CAC/D,GAAI,OACJ,KAAM,OACN,YAAa,eAEb,QAASR,GAET,YAAa,GAEb,YAAa,CACX,MAAO,IACP,OAAQ,EACV,EAEA,cAAgBtE,IAAa,CAC3B,GAAGA,EACH,OAAQ,CACN,MAAOZ,GAAM,OACb,OAAQC,GAAO,OACf,MAAO,CACL,MAAOH,EACT,EACA,KAAM,EACR,EACA,UAAW,CACT,MAAOc,GAAS,WAAW,OAAS,IACpC,OAAQA,GAAS,WAAW,QAAU,IACtC,IAAKA,GAAS,WAAW,IACzB,KAAMA,GAAS,WAAW,KAC1B,SAAUA,GAAS,WAAW,UAAY,CAC5C,EACA,MAAOA,GAAS,OAAS,CAAC,CAC5B,GAEA,YAAa,CAACC,EAAoCC,IAAqD,CACrG,MAAMU,EAAaV,EAAe,OAE5BxD,EAAiB,CACrB,KAAMkE,GAAY,KAAOX,EAAiB,QAAQW,EAAW,IAAI,EAAE,MAAM,EAAI,GAC7E,MAAOA,GAAY,MAAM,MACzB,MAAOA,GAAY,OAASxB,GAAM,OAClC,OAAQwB,GAAY,QAAUvB,GAAO,OACrC,KAAMuB,GAAY,IACpB,EAEA,OAAIA,GAAY,QACdlE,EAAK,MAAQuD,EAAiB,SAASW,EAAW,KAAK,EAAE,MAAM,GAG1DlE,CACT,EAEA,kBAAoB2D,GAAY,CAC9B,MAAMC,EAAW,IAAC,KAAE,iCAAkC,MAAM,CAAC,EAC7DD,EACG,gBAAgB,CACf,SAAAC,EACA,GAAI,eACJ,KAAM,cACN,QAAM,KAAE,6BAA8B,MAAM,EAC5C,OAAQC,GAAA,CACV,CAAC,EACA,gBAAgB,CACf,SAAAD,EACA,GAAI,eACJ,KAAM,eACN,QAAM,KAAE,mCAAoC,YAAY,EACxD,OAAQE,GAAA,EACR,SAAU,CAAC,EACX,aAAc,CAAC,CACjB,CAAC,EACA,SAAS,CACR,SAAAF,EACA,KAAM,eACN,QAAM,KAAE,mCAAoC,YAAY,EACxD,SAAU,CACR,QAAS,CACP,CAAE,MAAOlB,GAAM,KAAM,SAAO,KAAE,8BAA+B,MAAM,CAAE,EACrE,CAAE,MAAOA,GAAM,OAAQ,SAAO,KAAE,gCAAiC,QAAQ,CAAE,EAC3E,CAAE,MAAOA,GAAM,MAAO,SAAO,KAAE,+BAAgC,OAAO,CAAE,CAC1E,CACF,EACA,aAAcA,GAAM,IACtB,CAAC,EACA,SAAS,CACR,SAAAkB,EACA,KAAM,gBACN,QAAM,KAAE,uCAAwC,gBAAgB,EAChE,SAAU,CACR,QAAS,CACP,CAAE,MAAOjB,GAAO,IAAK,SAAO,KAAE,6BAA8B,KAAK,CAAE,EACnE,CAAE,MAAOA,GAAO,OAAQ,SAAO,KAAE,gCAAiC,QAAQ,CAAE,EAC5E,CAAE,MAAOA,GAAO,OAAQ,SAAO,KAAE,gCAAiC,QAAQ,CAAE,CAC9E,CACF,EACA,aAAcA,GAAO,MACvB,CAAC,EACA,eAAe,CACd,SAAAiB,EACA,KAAM,cACN,QAAM,KAAE,kCAAmC,WAAW,EACtD,SAAU,CACR,eAAa,KAAE,oCAAqC,MAAM,CAC5D,CACF,CAAC,CACL,CACF,EC9JayE,GAAkC,CAC7C,GAAI,WACJ,KAAM,WACN,YAAa,WAEb,QAxDgBrE,GAAsE,CACtF,KAAM,CAAE,KAAAhE,CAAK,EAAIgE,EACXnB,EAAS,GAAU,MAAO,OAAQ7C,CAAI,EAGtCiE,KAAW,MAAO,EAExB,SACE,QAAC,OAAI,UAAWpB,EAAO,UACrB,qBAAC,OACC,MAAM,6BACN,QAAQ,cACR,MAAM,OACN,OAAO,OACP,oBAAoB,OAEpB,qBAAC,QACC,oBAAC,WAAQ,GAAI,SAASoB,CAAQ,GAAI,aAAa,iBAAiB,MAAM,MAAM,OAAO,MACjF,mBAAC,SAAM,UAAWjE,GAAM,gBAAiB,EAAE,MAAM,EAAE,MAAM,MAAM,MAAM,OAAO,MAAM,EACpF,KACA,OAAC,YAAS,GAAI,gBAAgBiE,CAAQ,GACpC,mBAAC,WAAQ,OAAO,qBAAsB,GACxC,GACF,KAEA,OAAC,QACC,EAAE,IACF,EAAE,IACF,MAAM,OACN,OAAO,OACP,SAAU,qBAAqBA,CAAQ,IACvC,MAAO,CAAE,KAAM,MAAO,EACxB,KACA,OAAC,WACC,OAAO,sBACP,MAAO,CAAE,KAAMjE,GAAM,gBAAkB,cAAciE,CAAQ,IAAMjE,GAAM,eAAgB,EAC3F,KAGA,OAAC,WACC,OAAO,sBACP,SAAU,qBAAqBiE,CAAQ,IACvC,UAAWpB,EAAO,cACpB,GACF,KAEA,OAAC,QAAK,UAAWA,EAAO,KAAO,SAAA7C,GAAM,KAAK,GAC5C,CAEJ,EASE,YAAa,CACX,MAAO,IACP,OAAQ,GACV,EAEA,cAAgBsD,IAAa,CAC3B,GAAGA,EACH,WAAY,CACV,MAAO,CACL,MAAOjB,EACT,CACF,EACA,OAAQ,CACN,MAAOK,GAAM,OACb,OAAQC,GAAO,OACf,MAAO,CACL,MAAOL,EACT,CACF,EACA,UAAW,CACT,MAAOgB,GAAS,WAAW,OAAS,IACpC,OAAQA,GAAS,WAAW,QAAU,IACtC,IAAKA,GAAS,WAAW,IACzB,KAAMA,GAAS,WAAW,KAC1B,SAAUA,GAAS,WAAW,UAAY,CAC5C,EACA,MAAOA,GAAS,OAAS,CAAC,CAC5B,GAGA,YAAa,CAACC,EAAoCC,IAA8D,CAC9G,MAAMU,EAAaV,EAAe,OAE5BxD,EAA0B,CAC9B,KAAMkE,GAAY,KAAOX,EAAiB,QAAQW,EAAW,IAAI,EAAE,MAAM,EAAI,GAC7E,MAAOA,GAAY,MAAM,MACzB,MAAOA,GAAY,OAASxB,GAAM,OAClC,OAAQwB,GAAY,QAAUvB,GAAO,OACrC,KAAMuB,GAAY,IACpB,EAEIA,GAAY,QACdlE,EAAK,MAAQuD,EAAiB,SAASW,EAAW,KAAK,EAAE,MAAM,GAGjE,KAAM,CAAE,WAAAC,EAAY,OAAAC,CAAO,EAAIZ,EAC/B,OAAAxD,EAAK,gBAAkBmE,GAAY,MAAQZ,EAAiB,SAASY,EAAW,KAAK,EAAE,MAAM,EAAI9B,GACjGrC,EAAK,YAAcoE,GAAQ,MAAQb,EAAiB,SAASa,EAAO,KAAK,EAAE,MAAM,EAAI/B,GACrFrC,EAAK,YAAcoE,GAAQ,OAAS,EAEpCpE,EAAK,gBAAkBmE,GAAY,MAAQZ,EAAiB,YAAYY,EAAW,KAAK,EAAE,MAAM,EAAI,OAE7FnE,CACT,EAEA,kBAAoB2D,GAAY,CAC9B,MAAMC,EAAW,IAAC,KAAE,yCAA0C,UAAU,CAAC,EACzED,EACG,gBAAgB,CACf,SAAAC,EACA,GAAI,eACJ,KAAM,cACN,QAAM,KAAE,iCAAkC,MAAM,EAChD,OAAQC,GAAA,CACV,CAAC,EACA,gBAAgB,CACf,SAAAD,EACA,GAAI,eACJ,KAAM,eACN,QAAM,KAAE,uCAAwC,YAAY,EAC5D,OAAQE,GAAA,EACR,SAAU,CAAC,EACX,aAAc,CAAC,CACjB,CAAC,EACA,SAAS,CACR,SAAAF,EACA,KAAM,eACN,QAAM,KAAE,uCAAwC,YAAY,EAC5D,SAAU,CACR,QAAS,CACP,CAAE,MAAOlB,GAAM,KAAM,SAAO,KAAE,kCAAmC,MAAM,CAAE,EACzE,CAAE,MAAOA,GAAM,OAAQ,SAAO,KAAE,oCAAqC,QAAQ,CAAE,EAC/E,CAAE,MAAOA,GAAM,MAAO,SAAO,KAAE,mCAAoC,OAAO,CAAE,CAC9E,CACF,EACA,aAAcA,GAAM,IACtB,CAAC,EACA,SAAS,CACR,SAAAkB,EACA,KAAM,gBACN,QAAM,KAAE,2CAA4C,gBAAgB,EACpE,SAAU,CACR,QAAS,CACP,CAAE,MAAOjB,GAAO,IAAK,SAAO,KAAE,iCAAkC,KAAK,CAAE,EACvE,CAAE,MAAOA,GAAO,OAAQ,SAAO,KAAE,oCAAqC,QAAQ,CAAE,EAChF,CAAE,MAAOA,GAAO,OAAQ,SAAO,KAAE,oCAAqC,QAAQ,CAAE,CAClF,CACF,EACA,aAAcA,GAAO,MACvB,CAAC,EACA,eAAe,CACd,SAAAiB,EACA,KAAM,cACN,QAAM,KAAE,sCAAuC,WAAW,EAC1D,SAAU,CACR,eAAa,KAAE,wCAAyC,MAAM,CAChE,CACF,CAAC,CACL,EAEA,wBAAyB,CAEvB,CAAE,EAAG,GAAI,EAAG,EAAG,EACf,CAAE,EAAG,IAAM,EAAG,GAAK,EACnB,CAAE,EAAG,IAAM,EAAG,GAAK,EACnB,CAAE,EAAG,IAAM,EAAG,EAAI,EAClB,CAAE,EAAG,IAAM,EAAG,EAAI,EAClB,CAAE,EAAG,EAAG,EAAG,CAAE,EAGb,CAAE,EAAG,GAAK,EAAG,EAAI,EACjB,CAAE,EAAG,GAAK,EAAG,EAAI,EACjB,CAAE,EAAG,GAAK,EAAG,GAAK,EAClB,CAAE,EAAG,GAAK,EAAG,GAAK,EAClB,CAAE,EAAG,EAAG,EAAG,EAAG,EAGd,CAAE,EAAG,GAAK,EAAG,EAAG,EAChB,CAAE,EAAG,GAAK,EAAG,EAAG,EAChB,CAAE,EAAG,IAAM,EAAG,EAAG,EACjB,CAAE,EAAG,IAAM,EAAG,EAAG,CACnB,CACF,EAEM,GAAY,CAACR,EAAsBpD,IAAwC,CAC/E,MAAMqE,EAAUrE,GAAM,SAAW2C,GAAO,OAAS,MAAQ3C,GAAM,SAAW2C,GAAO,IAAM,MAAQ,MACzF2B,EAAWtE,GAAM,QAAU0C,GAAM,OAAS,MAAQ1C,GAAM,QAAU0C,GAAM,KAAO,MAAQ,MACvF6B,EAAgB,aAAavE,GAAM,QAAU0C,GAAM,OAAS,OAAS1C,GAAM,QAAU0C,GAAM,KAAO,MAAQ,MAAM,KACpH1C,GAAM,SAAW2C,GAAO,OAAS,OAAS3C,GAAM,SAAW2C,GAAO,IAAM,MAAQ,MAClF,IAEA,MAAO,CACL,aAAW,OAAI,CACb,OAAQ,OACR,MAAO,MACT,CAAC,EACD,QAAM,OAAI,CACR,SAAU,WACV,IAAK0B,EACL,KAAMC,EACN,UAAWC,EACX,SAAU,GAAGvE,GAAM,IAAI,KACvB,MAAOA,GAAM,KACf,CAAC,EACD,iBAAe,OAAI,CACjB,KAAM,OACN,OAAQA,GAAM,aAAe,OAC7B,YAAaA,GAAM,aAAe,EAClC,eAAgB,OAClB,CAAC,CACH,CACF,EC3KasI,GAAqC,CAChD,GAAI,cACJ,KAAM,eACN,YAAa,gBAEb,QApDyB,CAAC,CAAE,KAAAtI,CAAK,IAA8D,CAC/F,MAAM6C,KAAS,OAAW,EAAS,EAE7B0F,EAAuB,QAAQvI,GAAM,IAAM,GAAK,KAAK,IAAIA,EAAK,GAAG,EAAI,CAAC,oBAE5E,SACE,QAAC,OAAI,QAAQ,sBAAsB,oBAAoB,gBAAgB,MAAO,CAAE,KAAMqC,EAAe,EACnG,qBAAC,UAAO,GAAG,QACT,oBAAC,QACC,KAAK,UACL,GAAG,cACH,EAAE,6OACJ,KACA,OAAC,QACC,KAAK,UACL,GAAG,aACH,EAAE,8LACJ,GACF,KAEA,QAAC,KACC,qBAAC,KAAE,GAAG,YAAY,UAAU,4BAA4B,SAAS,UAC/D,oBAAC,WAAQ,GAAG,QAAQ,KAAK,UAAU,OAAO,0DAA2D,MACrG,OAAC,QACC,GAAG,MACH,KAAK,mBACL,EAAE,wLACJ,KACA,OAAC,QACC,GAAG,OACH,KAAK,UACL,UAAU,kBACV,EAAE,kRACJ,KACA,OAAC,UAAO,GAAG,UAAU,KAAK,UAAU,GAAG,QAAQ,GAAG,KAAK,EAAE,OAAQ,MACjE,OAAC,UAAO,GAAG,UAAU,KAAK,OAAO,OAAO,UAAU,YAAY,OAAO,GAAG,SAAS,GAAG,SAAS,EAAE,KAAM,IACvG,KACA,QAAC,KAAE,UAAWQ,EAAO,MAAO,MAAO,CAAE,UAAW0F,CAAqB,EACnE,oBAAC,OAAI,GAAG,SAAS,KAAK,SAAS,EAAE,QAAQ,EAAE,GAAI,MAC/C,OAAC,OAAI,GAAG,SAAS,KAAK,SAAS,EAAE,QAAQ,EAAE,IAAI,UAAU,2BAA4B,MACrF,OAAC,OAAI,GAAG,SAAS,KAAK,SAAS,EAAE,QAAQ,EAAE,IAAI,UAAU,4BAA6B,IACxF,GACF,GACF,CAEJ,EASE,YAAa,CACX,MAAO,IACP,OAAQ,GACV,EAEA,cAAgBjF,IAAa,CAC3B,GAAGA,EACH,WAAY,CACV,MAAO,CACL,MAAO,aACT,CACF,EACA,UAAW,CACT,MAAOA,GAAS,WAAW,OAAS,IACpC,OAAQA,GAAS,WAAW,QAAU,IACtC,IAAKA,GAAS,WAAW,IACzB,KAAMA,GAAS,WAAW,KAC1B,SAAUA,GAAS,WAAW,UAAY,CAC5C,EACA,MAAOA,GAAS,OAAS,CAAC,CAC5B,GAGA,YAAa,CAACC,EAAoCC,IAA4D,CAC5G,MAAMgF,EAAoBhF,EAAe,OAMzC,MAJ8B,CAC5B,IAAKgF,GAAmB,IAAMjF,EAAiB,UAAUiF,EAAkB,GAAG,EAAE,MAAM,EAAI,CAC5F,CAGF,EAEA,kBAAoB7E,GAAY,CAC9B,MAAMC,EAAW,IAAC,KAAE,iDAAkD,cAAc,CAAC,EACrFD,EAAQ,gBAAgB,CACtB,SAAAC,EACA,GAAI,MACJ,KAAM,aACN,QAAM,KAAE,oCAAqC,KAAK,EAClD,OAAQe,GAAA,CACV,CAAC,CACH,CACF,EAEM,GAAavB,IAA0B,CAC3C,SAAO,OAAI,CACT,gBAAiB,oBACjB,UAAW,gBACX,kBAAmB,CACjB,KAAM,CACJ,UAAW,cACb,EACA,GAAI,CACF,UAAW,gBACb,CACF,CACF,CAAC,CACH,GClHaqF,GAAsD,CACjE,GAAG1B,GAAgB,cAAc,EACjC,UAAW,CAAE,GAAGA,GAAgB,cAAc,EAAE,UAAW,GAAGA,GAAgB,WAAY,EAC1F,KAAMA,GAAgB,GACtB,KAAM,WACR,EAEa2B,GAAsB,CACjC3B,GACAqB,GACA9C,GACA4B,GACAvB,GACA+B,GACAW,GACAtE,GACAiD,EACF,EAEa2B,GAAuB,CAACtF,GAAYiF,GAAiBvD,GAAcP,GAAgBI,EAAa,EAEhGgE,GAAwB,IAAIC,GAAA,EAA4B,IAAM,CACzE,GAAGH,GACH,GAAGC,EACL,CAAC,E,oGCID,IAAIG,GAAU,EAEP,MAAMC,GAAc,IAAI,IAAY,CAAC,gBAAiB,WAAY,QAAS,SAAS,CAAC,EAErF,MAAMC,EAAqC,CA+BhD,YACSC,EACA3F,EACA4F,EACP,CAHO,UAAAD,EACA,aAAA3F,EACA,YAAA4F,EAhCT,KAAS,IAAMJ,KACf,WAAQ,EACR,eAA2B,CAAC,EAC5B,eAA2B,CAAC,EAe5B,kBAAe,MAAa,IAC5B,4BAAyB,GAEzB,yBAAsB,GACtB,gBAAkC,CAAC,EAEnC,mBAAiBK,GAA8B,CAC7C,KAAK,WAAaA,EAClB,KAAK,YAAY,CACnB,EAssBA,iBAAeC,GAA2B,CACxC,KAAK,IAAMA,EACX,KAAK,uBAAuB,CAC9B,EAEA,eAAanB,GAAkB,CAC7B,MAAMoB,EAAgC,KAAK,QAAQ,YAAY,aAAe,KAAqB,OAC7FC,EAA8B,KAAK,QAAQ,YAAY,WAAa,KAAmB,OAC7F,IAAID,GAAiCC,IAG/B,GAFoB,KAAK,SAAS,GAAG,SAAS,mBAAmB,EAAE,QAAU,GACtC,GACpB,CAErB,MAAMC,EADmB,KAAK,KAAK,sBAAsB,GACxB,QAAU,IACrCC,EAAUF,EAA8BC,EAAS,EAAI,EAC3DtB,EAAM,OAAO,MAAM,UAAY,aAAaA,EAAM,UAAU,CAAC,CAAC,OAAOA,EAAM,UAAU,CAAC,EAAIuB,CAAO,MACjG,MACF,CAGFvB,EAAM,OAAO,MAAM,UAAYA,EAAM,SACvC,EAEA,iBAAeA,GAAoB,CACjC,MAAMwB,EAAgBxB,EAAM,MACtByB,EAAY,KAAK,QAAQ,UAGzBC,GAFoBD,EAAU,UAAY,GAEDD,EAG/CC,EAAU,SAAWC,EAAqB,KAAK,MAAMA,EAAqB,GAAG,EAAI,IACjF1B,EAAM,OAAO,MAAM,UAAYA,EAAM,SACvC,EAIA,iBAAeA,GAAoB,CACjC,MAAMyB,EAAY,KAAK,QAAQ,UAEzBE,EAAQ3B,EAAM,OAAO,MAC3B,IAAI4B,EAAS5B,EAAM,MAAM,CAAC,EACtB6B,EAAS7B,EAAM,MAAM,CAAC,EACtB8B,EAAQ9B,EAAM,UAAU,CAAC,EACzB+B,EAAQ/B,EAAM,UAAU,CAAC,EAG7B,GAAIyB,EAAU,SAAU,CAEtB,MAAMO,GADWP,EAAU,UAAY,GACD,KAAK,GAAM,IAC3CQ,EAAgBH,EAChBI,EAAgBH,EAEtBD,EAAQ,KAAK,KAAKG,EAAgB,KAAK,IAAID,CAAiB,EAAIE,EAAgB,KAAK,IAAIF,CAAiB,CAAC,EAC3GD,EAAQ,KAAK,KAAKE,EAAgB,KAAK,IAAID,CAAiB,EAAIE,EAAgB,KAAK,IAAIF,CAAiB,CAAC,CAC7G,CAEIF,IAAU,GACZL,EAAU,MAAQzB,EAAM,MACxB2B,EAAM,MAAQ,GAAGF,EAAU,KAAK,MACvBK,IAAU,KACnBL,EAAU,MAASG,EACnBH,EAAU,MAAQzB,EAAM,MACpB,MAAO,eAAe,mBACxB2B,EAAM,UAAY,aAAaF,EAAU,IAAI,OAAOA,EAAU,GAAG,cAAcA,EAAU,UAAY,CAAC,OAEtGE,EAAM,KAAO,GAAGF,EAAU,IAAI,KAEhCE,EAAM,MAAQ,GAAGF,EAAU,KAAK,MAG9BM,IAAU,IACZN,EAAU,KAAQI,EAClBJ,EAAU,OAASzB,EAAM,OACrB,MAAO,eAAe,mBACxB2B,EAAM,UAAY,aAAaF,EAAU,IAAI,OAAOA,EAAU,GAAG,cAAcA,EAAU,UAAY,CAAC,OAEtGE,EAAM,IAAM,GAAGF,EAAU,GAAG,KAE9BE,EAAM,OAAS,GAAGF,EAAU,MAAM,MACzBM,IAAU,IACnBN,EAAU,OAASzB,EAAM,OACzB2B,EAAM,OAAS,GAAGF,EAAU,MAAM,KAEtC,EAEA,sBAAmB,CAACzB,EAAyBhC,IAAoC,CAC/E,MAAMC,EAAQ,KAAK,SAAS,EAU5B,GAPE,CAACA,GAAO,mBAAqB,CAACA,GAAO,gBAAgB,QAAUA,GAAO,gBAAgB,UAAY,MAElG,KAAK,cAAc+B,CAAK,EACdhC,GACVC,GAAO,YAAY,iBAAiB+B,CAAK,EAGvC,KAAK,KAAO,MACd,GAAI,KAAK,eAAiB,MAAa,KAAM,CAC3C,MAAMmC,EAAkB,KAAK,mBAAmB,EAC5CA,IACF,KAAK,IAAI,MAAM,OAAS,UACxB,KAAK,IAAI,MAAQ,eAAeA,EAAgB,QAAU,GAAK,YAAcA,EAAgB,KAAK,GAEtG,SAAW,KAAK,eAAiB,MAAa,OAAQ,CACpD,MAAMC,EAAgB,KAAK,iBAAiB,EACxCA,IACF,KAAK,IAAI,MAAM,OAAS,UACxB,KAAK,IAAI,MAAQA,EAAc,MAEnC,EAEJ,EAEA,wBAAqB,IAAM,CACzB,GAAI,KAAK,SAEP,OADc,KAAK,SAAS,CAAE,cAAeC,GAAY,KAAK,KAAK,MAAO,KAAK,SAAS,CAAE,CAAE,CAAC,EAChF,KAAMC,GAASA,EAAK,WAAa,EAAI,CAItD,EAEA,sBAAmB,IAAM,CACvB,MAAMrE,EAAQ,KAAK,SAAS,EACtBsE,EAAoBtE,GAAO,OAAO,cAAc,kBAGtD,GAAI,EAF0BsE,IAAoB,GAAK,IAGrD,OAGF,MAAMrN,EAA0B,CAAE,cAAemN,GAAY,KAAK,KAAK,MAAOpE,CAAM,CAAE,EAChFuE,EAA4B,CAAE,MAAO,KAAK,QAAQ,OAAS,CAAC,EAAG,QAAS,KAAK,QAAQ,SAAW,CAAC,CAAE,EACnGC,EAASxE,GAAO,MAAM,OAE5B,GAAIwE,EAAQ,CACV,MAAMC,KAAe,OAAuBF,EAA0B,MAAOA,EAA0B,OAAO,EACxGG,EAAyB,CAC7B,cAAe,CACb,MAAO,CACL,KAAMF,EACN,MAAOC,EACP,MAAOD,EAAO,CAAC,EACf,WAAY,CACd,CACF,CACF,EAUA,SARgB,OACdA,EAAO,CAAC,EACRC,EACAC,EACA1E,GAAO,MAAM,MAAM,iBACnBuE,EAA0B,QAC1BtN,CACF,EACe,KAAM0N,GAAWA,EAAO,WAAa,EAAI,CAC1D,CAGF,EAEA,mBAAiB5C,GAA4B,CAC3C,MAAM/B,EAAQ,KAAK,SAAS,EAC5B,GAAI,CAACA,GAAS,CAACA,EAAM,gBACnB,OAGF,MAAM4E,EAA2B5E,EAAM,2BAA6B,KAAK,eAAiB,MAAa,IAGvG,GAF0BA,EAAM,cAAgB,MAAmB,MAAQ,CAAC4E,EAErD,CACrB,MAAMC,EAAO,KAAK,KAAK,sBAAsB,EAC7C7E,EAAM,gBAAgB,CACpB,YAAa,CAAE,EAAG6E,GAAM,OAAS9C,EAAM,MAAO,EAAG8C,GAAM,KAAO9C,EAAM,KAAM,EAC1E,QAAS,KACT,OAAQ,EACV,CAAC,CACH,CACF,EAEA,sBAAoBA,GAA4B,CAC9C,MAAM/B,EAAQ,KAAK,SAAS,EACxBA,GAAO,iBAAmB,CAACA,GAAO,gBAAgB,QACpDA,EAAM,gBAAgB,MAAS,EAG7B,KAAK,eAAiB,MAAa,KAAO,KAAK,MACjD,KAAK,IAAI,MAAM,OAAS,OACxB,KAAK,IAAI,MAAQ,GAErB,EAEA,oBAAkB+B,GAA4B,CAE5C,GAAI,KAAK,eAAiB,MAAa,KAAM,CAC3C,IAAImC,EAAkB,KAAK,mBAAmB,EAC1CA,GACF,OAAO,KAAKA,EAAgB,KAAMA,EAAgB,QAAU,OAAO,CAEvE,SAAW,KAAK,eAAiB,MAAa,OAAQ,CACpD,MAAMC,EAAgB,KAAK,iBAAiB,EACjBA,GAAe,WAAaA,EAAc,UAAU,OAAS,GAGtF,KAAK,oBAAsB,GAC3B,KAAK,YAAY,IAEjB,KAAK,uBAAyB,GAC9B,KAAK,YAAY,EAErB,MACE,KAAK,cAAcpC,CAAK,EACxB,KAAK,kBAAkB,CAE3B,EAEA,sBAAoBA,GAA+B,CAE/CA,EAAM,MAAQ,UACbA,EAAM,yBAAyB,aAAeA,EAAM,yBAAyB,aAEhE,KAAK,SAAS,GACrB,OAAO,CAAE,QAAS,CAACA,EAAM,aAAa,CAAE,CAAC,CAEpD,EAEA,uBAAoB,IAAM,CACxB,MAAM/B,EAAQ,KAAK,SAAS,EACxBA,GAAO,iBAAmBA,EAAM,gBAAgB,aAClDA,EAAM,gBAAgB,CACpB,YAAa,CAAE,EAAGA,EAAM,eAAe,YAAY,EAAG,EAAGA,EAAM,eAAe,YAAY,CAAE,EAC5F,QAAS,KACT,OAAQ,EACV,CAAC,CAEL,EAEA,iBAAc,IAAM,CAClB,MAAMA,EAAQ,KAAK,SAAS,EACxBA,GAAO,4BACTA,EAAM,2BAA2B,CAErC,EAEA,+BAA6B2E,GAAoC,CAC/D,GAAKA,EAIL,SACE,mBACG,cAAK,wBAA0BA,MAC9B,OAACG,GAAA,GACC,OAAQ,GACR,SAAO,KAAE,iDAAkD,gBAAgB,EAC3E,KAAMH,EAAO,aAA8C,EAC3D,eAAa,KAAE,0CAA2C,SAAS,EACnE,qBAAqB,UACrB,UAAW,IAAM,CACf,KAAK,uBAAyB,GAC9BA,EAAO,QAAQ,IAAI,WAAW,OAAO,EAAG,KAAM,KAAK,UAAU,EACzDA,EAAO,SACT,MAAoBA,EAAO,KAAM,GAAM,QAAQ,EAEjD,KAAK,YAAY,CACnB,EACA,UAAW,IAAM,CACf,KAAK,uBAAyB,GAC9B,KAAK,YAAY,CACnB,EACF,EAEJ,CAEJ,EAEA,+BAA6BA,GAAoC,CAC/D,GAAI,CAACA,GAAU,CAACA,EAAO,WAAaA,EAAO,UAAU,SAAW,EAC9D,OAGF,MAAMI,EAAkB,IAAM,CAC5B,KAAK,oBAAsB,GAC3B,KAAK,uBAAyB,GAC9B,KAAK,YAAY,CACnB,EAEA,SACE,OAACC,GAAA,GACC,OAAAL,EACA,UAAW,KAAK,WAChB,aAAc,KAAK,cACnB,UAAW,IAAM,CACf,KAAK,oBAAsB,GAC3B,KAAK,YAAY,CACnB,EACA,cAAeI,CAAA,CACjB,CAEJ,EA5+BE,MAAME,EAAe,WAAW,KAAK,IAAI,CAAC,GACrC7H,IACH,KAAK,QAAU,CAAE,KAAM2F,EAAK,GAAI,KAAMkC,CAAa,GAGrD7H,EAAQ,WAAaA,EAAQ,YAAc,CACzC,SAAU,KAAmB,IAC7B,WAAY,KAAqB,IACnC,EACAA,EAAQ,UAAYA,EAAQ,WAAa,CAAE,MAAO,IAAK,OAAQ,IAAK,IAAK,EAAG,KAAM,EAAG,SAAU,CAAE,EACjGA,EAAQ,WAAaA,EAAQ,YAAc,CAAE,MAAO,CAAE,MAAO,aAAc,CAAE,EAC7EA,EAAQ,OAASA,EAAQ,QAAU,CAAE,MAAO,CAAE,MAAO,YAAa,CAAE,EAEpE,MAAM4C,EAAQ,KAAK,SAAS,EAC5B,GAAI,CAAC5C,EAAQ,KAAM,CACjB,MAAM8H,EAAUlF,GAAO,mBAAmB,EAC1C5C,EAAQ,KAAO8H,GAAWD,CAC5B,CACAjF,GAAO,OAAO,IAAI5C,EAAQ,KAAM,IAAI,CACtC,CAEQ,UAA8B,CACpC,IAAI+H,EAAO,KAAK,OAChB,KAAOA,GAAM,CACX,GAAIA,EAAK,OAAO,EACd,OAAOA,EAAK,MAEdA,EAAOA,EAAK,MACd,CAGF,CAEA,SAAU,CACR,OAAO,KAAK,QAAQ,IACtB,CAGA,uBAAuBC,EAAgC,CACrD,GAAI,MAAO,eAAe,mBAAoB,CAC5C,KAAK,wBAAwBA,CAAoB,EACjD,MACF,CACA,GAAI,KAAK,OAAO,EAEd,OAGF,KAAM,CAAE,WAAAC,CAAW,EAAI,KAAK,QACtB,CAAE,SAAAC,EAAU,WAAAC,CAAW,EAAIF,GAAc,CAAC,EAC1C7B,EAAuB,KAAK,QAAQ,WAAa,CAAC,EAIlDE,EAA6B,CACjC,OAHqB,KAAK,SAAS,GAAG,iBAGb,OAAS,OAClC,cAAe0B,EAAuB,OAAS,OAC/C,SAAU,WAEV,SAAU,OACV,UAAW,OACX,OAAQ,GAAG5B,EAAU,UAAY,CAAC,KACpC,EAEMgC,EAAY,CAAC,MAAO,KAAK,EAE/B,OAAQF,EAAU,CAChB,KAAK,KAAmB,IACtB9B,EAAU,IAAMA,EAAU,KAAO,EACjCA,EAAU,OAASA,EAAU,QAAU,IACvCE,EAAM,IAAM,GAAGF,EAAU,GAAG,KAC5BE,EAAM,OAAS,GAAGF,EAAU,MAAM,KAClC,OAAOA,EAAU,OACjB,MACF,KAAK,KAAmB,OACtBA,EAAU,OAASA,EAAU,QAAU,EACvCA,EAAU,OAASA,EAAU,QAAU,IACvCE,EAAM,OAAS,GAAGF,EAAU,MAAM,KAClCE,EAAM,OAAS,GAAGF,EAAU,MAAM,KAClC,OAAOA,EAAU,IACjB,MACF,KAAK,KAAmB,UACtBA,EAAU,IAAMA,EAAU,KAAO,EACjCA,EAAU,OAASA,EAAU,QAAU,EACvCE,EAAM,IAAM,GAAGF,EAAU,GAAG,KAC5BE,EAAM,OAAS,GAAGF,EAAU,MAAM,KAClC,OAAOA,EAAU,OACjBE,EAAM,OAAS,GACf,MACF,KAAK,KAAmB,OACtBF,EAAU,IAAMA,EAAU,KAAO,EACjCA,EAAU,OAASA,EAAU,QAAU,IACvCgC,EAAU,CAAC,EAAI,OACf9B,EAAM,IAAM,cAAcF,EAAU,GAAG,MACvCE,EAAM,OAAS,GAAGF,EAAU,MAAM,KAClC,OAAOA,EAAU,OACjB,MACF,KAAK,KAAmB,MACtBA,EAAU,IAAMA,EAAU,KAAO,EACjCA,EAAU,OAASA,EAAU,QAAU,EACvCE,EAAM,IAAM,GAAGF,EAAU,GAAG,IAC5BE,EAAM,OAAS,GAAGF,EAAU,MAAM,IAClC,OAAOA,EAAU,OACjBE,EAAM,OAAS,GACf,KACJ,CAEA,OAAQ6B,EAAY,CAClB,KAAK,KAAqB,KACxB/B,EAAU,KAAOA,EAAU,MAAQ,EACnCA,EAAU,MAAQA,EAAU,OAAS,IACrCE,EAAM,KAAO,GAAGF,EAAU,IAAI,KAC9BE,EAAM,MAAQ,GAAGF,EAAU,KAAK,KAChC,OAAOA,EAAU,MACjB,MACF,KAAK,KAAqB,MACxBA,EAAU,MAAQA,EAAU,OAAS,EACrCA,EAAU,MAAQA,EAAU,OAAS,IACrCE,EAAM,MAAQ,GAAGF,EAAU,KAAK,KAChCE,EAAM,MAAQ,GAAGF,EAAU,KAAK,KAChC,OAAOA,EAAU,KACjB,MACF,KAAK,KAAqB,UACxBA,EAAU,KAAOA,EAAU,MAAQ,EACnCA,EAAU,MAAQA,EAAU,OAAS,EACrCE,EAAM,KAAO,GAAGF,EAAU,IAAI,KAC9BE,EAAM,MAAQ,GAAGF,EAAU,KAAK,KAChC,OAAOA,EAAU,MACjBE,EAAM,MAAQ,GACd,MACF,KAAK,KAAqB,OACxBF,EAAU,KAAOA,EAAU,MAAQ,EACnCA,EAAU,MAAQA,EAAU,OAAS,IACrCgC,EAAU,CAAC,EAAI,OACf9B,EAAM,KAAO,cAAcF,EAAU,IAAI,MACzCE,EAAM,MAAQ,GAAGF,EAAU,KAAK,KAChC,OAAOA,EAAU,MACjB,MACF,KAAK,KAAqB,MACxBA,EAAU,KAAOA,EAAU,MAAQ,EACnCA,EAAU,MAAQA,EAAU,OAAS,EACrCE,EAAM,KAAO,GAAGF,EAAU,IAAI,IAC9BE,EAAM,MAAQ,GAAGF,EAAU,KAAK,IAChC,OAAOA,EAAU,MACjBE,EAAM,MAAQ,GACd,KACJ,CAMA,GAJAA,EAAM,UAAY,aAAa8B,EAAU,CAAC,CAAC,KAAKA,EAAU,CAAC,CAAC,IAC5D,KAAK,QAAQ,UAAYhC,EACzB,KAAK,UAAYE,EAEb,KAAK,IAAK,CACZ+B,GAAY,KAAK,UAAW,KAAK,GAAG,EAGpC,MAAMC,EAAc,KAAK,QAAQ,KAC5B7C,GAAY,IAAI6C,CAAW,EAS9BC,GAAa,KAAK,UAAW,KAAK,GAAG,EAPrCF,GAAY,KAAK,UAAW,KAAK,GAAG,CASxC,CACF,CAGA,wBAAwBL,EAAgC,CACtD,GAAI,KAAK,OAAO,EAEd,OAGF,MAAMpF,EAAQ,KAAK,SAAS,EACtB,CAAE,MAAO4F,EAAY,OAAQC,CAAY,EAAI7F,GAAS,CAAC,EAEvD,CAAE,WAAAqF,CAAW,EAAI,KAAK,QACtB,CAAE,SAAAC,EAAU,WAAAC,CAAW,EAAIF,GAAc,CAAC,EAC1C7B,EAAuB,KAAK,QAAQ,WAAa,CAAC,EAIlDE,EAA6B,CACjC,OAHqB1D,GAAO,iBAGH,OAAS,OAClC,cAAeoF,EAAuB,OAAS,OAC/C,SAAU,WAEV,SAAU,OACV,UAAW,MACb,EAEA,IAAIU,EAAa,MACbC,EAAa,MAEjB,OAAQT,EAAU,CAChB,KAAK,KAAmB,IACtB9B,EAAU,IAAMA,EAAU,KAAO,EACjCA,EAAU,OAASA,EAAU,QAAU,IACvCsC,EAAa,GAAGtC,EAAU,KAAO,CAAC,KAClCE,EAAM,OAAS,GAAGF,EAAU,MAAM,KAClC,OAAOA,EAAU,OACjB,MACF,KAAK,KAAmB,OACtBA,EAAU,OAASA,EAAU,QAAU,EACvCA,EAAU,OAASA,EAAU,QAAU,IACvCsC,EAAa,GAAGD,GAAgBrC,EAAU,QAAU,IAAMA,EAAU,QAAU,IAAI,KAClFE,EAAM,OAAS,GAAGF,EAAU,MAAM,KAClC,OAAOA,EAAU,IACjB,MACF,KAAK,KAAmB,UACtBA,EAAU,IAAMA,EAAU,KAAO,EACjCA,EAAU,OAASA,EAAU,QAAU,EACvCsC,EAAa,GAAGtC,EAAU,KAAO,CAAC,KAClCE,EAAM,OAAS,GAAGmC,GAAgBrC,EAAU,KAAO,IAAMA,EAAU,QAAU,EAAE,KAC/E,OAAOA,EAAU,OACjB,MACF,KAAK,KAAmB,OACtBA,EAAU,IAAMA,EAAU,KAAO,EACjCA,EAAU,OAASA,EAAU,QAAU,IACvCsC,EAAa,GAAGD,EAAe,GAAKrC,EAAU,KAAO,IAAMA,EAAU,QAAU,GAAK,CAAC,KACrFE,EAAM,OAAS,GAAGF,EAAU,MAAM,KAClC,OAAOA,EAAU,OACjB,MACF,KAAK,KAAmB,MACtBA,EAAU,IAAMA,EAAU,KAAO,EACjCA,EAAU,OAASA,EAAU,QAAU,EACvCsC,EAAa,IAAItC,EAAU,KAAO,IAAMqC,EAAe,IAAI,KAC3DnC,EAAM,OAAS,GAAGmC,GAAgBrC,EAAU,KAAO,IAAMqC,EAAe,MAAQrC,EAAU,QAAU,IAAMqC,EAAe,IAAI,KAC7H,OAAOrC,EAAU,OACjB,KACJ,CAEA,OAAQ+B,EAAY,CAClB,KAAK,KAAqB,KACxB/B,EAAU,KAAOA,EAAU,MAAQ,EACnCA,EAAU,MAAQA,EAAU,OAAS,IACrCuC,EAAa,GAAGvC,EAAU,MAAQ,CAAC,KACnCE,EAAM,MAAQ,GAAGF,EAAU,KAAK,KAChC,OAAOA,EAAU,MACjB,MACF,KAAK,KAAqB,MACxBA,EAAU,MAAQA,EAAU,OAAS,EACrCA,EAAU,MAAQA,EAAU,OAAS,IACrCuC,EAAa,GAAGH,GAAepC,EAAU,OAAS,IAAMA,EAAU,OAAS,IAAI,KAC/EE,EAAM,MAAQ,GAAGF,EAAU,KAAK,KAChC,OAAOA,EAAU,KACjB,MACF,KAAK,KAAqB,UACxBA,EAAU,KAAOA,EAAU,MAAQ,EACnCA,EAAU,MAAQA,EAAU,OAAS,EACrCuC,EAAa,GAAGvC,EAAU,MAAQ,CAAC,KACnCE,EAAM,MAAQ,GAAGkC,GAAepC,EAAU,MAAQ,IAAMA,EAAU,OAAS,EAAE,KAC7E,OAAOA,EAAU,MACjB,MACF,KAAK,KAAqB,OACxBA,EAAU,KAAOA,EAAU,MAAQ,EACnCA,EAAU,MAAQA,EAAU,OAAS,IACrCuC,EAAa,GAAGH,EAAc,GAAKpC,EAAU,MAAQ,IAAMA,EAAU,OAAS,GAAK,CAAC,KACpFE,EAAM,MAAQ,GAAGF,EAAU,KAAK,KAChC,OAAOA,EAAU,MACjB,MACF,KAAK,KAAqB,MACxBA,EAAU,KAAOA,EAAU,MAAQ,EACnCA,EAAU,MAAQA,EAAU,OAAS,EACrCuC,EAAa,IAAIvC,EAAU,MAAQ,IAAMoC,EAAc,IAAI,KAC3DlC,EAAM,MAAQ,GAAGkC,GAAepC,EAAU,MAAQ,IAAMoC,EAAc,MAAQpC,EAAU,OAAS,IAAMoC,EAAc,IAAI,KACzH,OAAOpC,EAAU,MACjB,KACJ,CAKA,GAJA,KAAK,QAAQ,UAAYA,EACzBE,EAAM,UAAY,aAAaqC,CAAU,KAAKD,CAAU,YAAYtC,EAAU,UAAY,CAAC,OAC3F,KAAK,UAAYE,EAEb,KAAK,IAAK,CACZ+B,GAAY,KAAK,UAAW,KAAK,GAAG,EAGpC,MAAMC,EAAc,KAAK,QAAQ,KAC5B7C,GAAY,IAAI6C,CAAW,EAS9BC,GAAa,KAAK,UAAW,KAAK,GAAG,EAPrCF,GAAY,KAAK,UAAW,KAAK,GAAG,CASxC,CACF,CAEA,iBAAiBO,EAAkB,CACjC,MAAMtC,EAAQ,OAAO,iBAAiBsC,CAAO,EACvCC,EAAS,IAAI,UAAUvC,EAAM,WAAa,EAAE,EAClD,MAAO,CACL,KAAMuC,EAAO,IACb,IAAKA,EAAO,IACZ,MAAOvC,EAAM,MAAQ,WAAWA,EAAM,KAAK,EAAIsC,EAAQ,YACvD,OAAQtC,EAAM,OAAS,WAAWA,EAAM,MAAM,EAAIsC,EAAQ,YAC5D,CACF,CAEA,2BAA2BE,EAA4BC,EAA2BC,EAAiB,EAAG,CACpG,GAAI,MAAO,eAAe,mBAAoB,CAC5C,KAAK,4BAA4BF,EAAkBC,EAAiBC,CAAc,EAClF,MACF,CACA,KAAM,CAAE,WAAAf,CAAW,EAAI,KAAK,QACtB,CAAE,SAAAC,EAAU,WAAAC,CAAW,EAAIF,GAAc,CAAC,EAE3Ca,IACHA,EAAmB,KAAK,KAAO,KAAK,IAAI,sBAAsB,GAEhE,IAAIG,EAAoB,EACnBF,IACHA,EAAkB,KAAK,KAAO,KAAK,IAAI,eAAe,sBAAsB,EAC5EE,EAAoB,KAAK,QAAQ,OAAO,EACpC,EACA,WAAW,iBAAiB,KAAK,KAAK,aAAc,EAAE,WAAW,GAKvE,IAAIC,EAAoB,EACpBC,EAAqB,EACzB,GAAI,KAAK,QAAQ,WAAW,UAAY,KAAK,QAAQ,WAAW,OAAS,KAAK,QAAQ,WAAW,OAAQ,CACvG,MAAMC,EAAkB,KAAK,QAAQ,UAAU,SACzCC,EAAmB,KAAK,GAAK,IAAOD,EAC1C,IAAIE,EAAiBD,EAErB,OAAQ,GAAM,CACZ,KAAKD,GAAmB,GAAKA,EAAkB,IAE7C,MACF,KAAKA,GAAmB,IAAMA,EAAkB,KAC9CE,EAAiB,KAAK,GAAKD,EAC3B,MACF,KAAKD,GAAmB,KAAOA,EAAkB,KAC/CE,EAAiB,KAAK,GAAKD,EAC3B,MACF,KAAKD,GAAmB,IACtBE,EAAiB,CAACD,EAClB,KACJ,CAEA,MAAME,EAAiB,CAACC,EAAoBC,IACzCD,EAAa,EAAK,KAAK,IAAIF,CAAc,EAAKG,EAAa,GAAM,KAAK,IAAIH,CAAc,EAAI,GAE/FJ,EAAoBK,EAAe,KAAK,QAAQ,UAAU,MAAO,KAAK,QAAQ,UAAU,MAAM,EAC9FJ,EAAqBI,EAAe,KAAK,QAAQ,UAAU,OAAQ,KAAK,QAAQ,UAAU,KAAK,CACjG,CAEA,MAAMG,EACJZ,GAAoBC,EAChB,KAAK,MAAMD,EAAiB,IAAMC,EAAgB,IAAME,EAAoBC,CAAiB,EAC7FF,EACA,EACAW,EACJb,GAAoBC,EAChB,KAAK,MAAMA,EAAgB,OAASE,EAAoBH,EAAiB,OAASI,CAAiB,EACnGF,EACA,EACAY,EACJd,GAAoBC,EAChB,KAAK,MAAMD,EAAiB,KAAOC,EAAgB,KAAOE,EAAoBE,CAAkB,EAChGH,EACA,EACAa,EACJf,GAAoBC,EAChB,KAAK,MAAMA,EAAgB,MAAQE,EAAoBH,EAAiB,MAAQK,CAAkB,EAClGH,EACA,EAEA5C,EAAuB,CAAC,EAExB0D,GAAShB,GAAkB,OAAS,KAAOE,EAC3C/C,GAAU6C,GAAkB,QAAU,KAAOE,EAEnD,OAAQd,EAAU,CAChB,KAAK,KAAmB,IACtB9B,EAAU,IAAMsD,EAChBtD,EAAU,OAASH,EACnB,MACF,KAAK,KAAmB,OACtBG,EAAU,OAASuD,EACnBvD,EAAU,OAASH,EACnB,MACF,KAAK,KAAmB,UACtBG,EAAU,IAAMsD,EAChBtD,EAAU,OAASuD,EACnB,MACF,KAAK,KAAmB,OACtB,MAAMI,EAAgBjB,EAAmBY,EAAczD,EAAS,EAAI,EAE9D+D,GADejB,EAAkBA,EAAgB,OAAS,EAAI,GAC1BgB,EAC1C3D,EAAU,IAAM4D,EAChB5D,EAAU,OAASH,EACnB,MACF,KAAK,KAAmB,MACtBG,EAAU,IAAOsD,GAAeX,GAAiB,QAAU9C,GAAW,IAAM+C,EAC5E5C,EAAU,OAAUuD,GAAkBZ,GAAiB,QAAU9C,GAAW,IAAM+C,EAClF,KACJ,CAEA,OAAQb,EAAY,CAClB,KAAK,KAAqB,KACxB/B,EAAU,KAAOwD,EACjBxD,EAAU,MAAQ0D,EAClB,MACF,KAAK,KAAqB,MACxB1D,EAAU,MAAQyD,EAClBzD,EAAU,MAAQ0D,EAClB,MACF,KAAK,KAAqB,UACxB1D,EAAU,KAAOwD,EACjBxD,EAAU,MAAQyD,EAClB,MACF,KAAK,KAAqB,OACxB,MAAME,EAAgBjB,EAAmBc,EAAeE,EAAQ,EAAI,EAE9DE,GADejB,EAAkBA,EAAgB,MAAQ,EAAI,GACzBgB,EAC1C3D,EAAU,KAAO4D,EACjB5D,EAAU,MAAQ0D,EAClB,MACF,KAAK,KAAqB,MACxB1D,EAAU,KAAQwD,GAAgBb,GAAiB,OAASe,GAAU,IAAMd,EAC5E5C,EAAU,MAASyD,GAAiBd,GAAiB,OAASe,GAAU,IAAMd,EAC9E,KACJ,CAEI,KAAK,QAAQ,WAAW,WAC1B5C,EAAU,SAAW,KAAK,QAAQ,UAAU,SAC5CA,EAAU,MAAQ,KAAK,QAAQ,UAAU,MACzCA,EAAU,OAAS,KAAK,QAAQ,UAAU,QAG5C,KAAK,QAAQ,UAAYA,EAEzB,KAAK,uBAAuB,EAC5B,KAAK,QAEL,KAAK,SAAS,GAAG,KAAK,CACxB,CAEA,4BAA4B0C,EAA4BC,EAA2BC,EAAiB,EAAG,CACrG,MAAMpG,EAAQ,KAAK,SAAS,EACtB,CAAE,WAAAqF,CAAW,EAAI,KAAK,QACtB,CAAE,SAAAC,EAAU,WAAAC,CAAW,EAAIF,GAAc,CAAC,EAE1CgC,EAAc,KAAK,iBAAiB,KAAK,GAAI,EAE9CnB,IACHA,EAAmB,KAAK,KAAO,KAAK,IAAI,sBAAsB,GAG3DC,IACHA,EAAkB,KAAK,KAAO,KAAK,IAAI,eAAe,sBAAsB,GAG9E,MAAMW,EAAc,KAAK,MAAMO,EAAY,GAAG,EACxCN,EAAiB,KAAK,MAAM/G,EAAM,OAASqH,EAAY,IAAMA,EAAY,MAAM,EAC/EL,EAAe,KAAK,MAAMK,EAAY,IAAI,EAC1CJ,EAAgB,KAAK,MAAMjH,EAAM,MAAQqH,EAAY,KAAOA,EAAY,KAAK,EAE7E7D,EAAuB,CAAC,EAExB0D,EAAQG,EAAY,MACpBhE,EAASgE,EAAY,OAM3B,OAHA7D,EAAU,IAAMsD,EAChBtD,EAAU,KAAOwD,EAET1B,EAAU,CAChB,KAAK,KAAmB,IACtB9B,EAAU,IAAMsD,EAChBtD,EAAU,OAASH,EACnB,MACF,KAAK,KAAmB,OACtBG,EAAU,OAASuD,EACnBvD,EAAU,OAASH,EACnB,MACF,KAAK,KAAmB,UACtBG,EAAU,IAAMsD,EAChBtD,EAAU,OAASuD,EACnB,MACF,KAAK,KAAmB,OACtB,MAAMI,EAAgBjB,EAAmBY,EAAczD,EAAS,EAAI,EAE9D+D,EADepH,EAAM,OAAS,EACMmH,EAC1C3D,EAAU,IAAM4D,EAChB5D,EAAU,OAASH,EACnB,MACF,KAAK,KAAmB,MACtBG,EAAU,IAAOsD,GAAeX,GAAiB,QAAU9C,GAAW,IAAM+C,EAC5E5C,EAAU,OAAUuD,GAAkBZ,GAAiB,QAAU9C,GAAW,IAAM+C,EAClF,KACJ,CAEA,OAAQb,EAAY,CAClB,KAAK,KAAqB,KACxB/B,EAAU,KAAOwD,EACjBxD,EAAU,MAAQ0D,EAClB,MACF,KAAK,KAAqB,MACxB1D,EAAU,MAAQyD,EAClBzD,EAAU,MAAQ0D,EAClB,MACF,KAAK,KAAqB,UACxB1D,EAAU,KAAOwD,EACjBxD,EAAU,MAAQyD,EAClB,MACF,KAAK,KAAqB,OACxB,MAAME,EAAgBjB,EAAmBc,EAAeE,EAAQ,EAAI,EAE9DE,EADepH,EAAM,MAAQ,EACOmH,EAC1C3D,EAAU,KAAO4D,EACjB5D,EAAU,MAAQ0D,EAClB,MACF,KAAK,KAAqB,MACxB1D,EAAU,KAAQwD,GAAgBb,GAAiB,OAASe,GAAU,IAAMd,EAC5E5C,EAAU,MAASyD,GAAiBd,GAAiB,OAASe,GAAU,IAAMd,EAC9E,KACJ,CAEI,KAAK,QAAQ,WAAW,WAC1B5C,EAAU,SAAW,KAAK,QAAQ,UAAU,SAC5CA,EAAU,MAAQ,KAAK,QAAQ,UAAU,MACzCA,EAAU,OAAS,KAAK,QAAQ,UAAU,QAG5C,KAAK,QAAQ,UAAYA,EAEzB,KAAK,uBAAuB,EAC5B,KAAK,QAEL,KAAK,SAAS,GAAG,KAAK,CACxB,CAEA,WAAW8D,EAAuB,CAC5B,KAAK,KAAK,cACZ,KAAK,KAAO,KAAK,KAAK,YAAYA,EAAK,KAAK,OAAO,EACnD,KAAK,SAGP,MAAMtH,EAAQ,KAAK,SAAS,EACtBwE,EAASxE,GAAO,MAAM,OAI5B,GAFA,KAAK,QAAQ,MAAQ,KAAK,QAAQ,OAAO,OAAQqE,GAASA,IAAS,IAAI,EAEnE,KAAK,QAAQ,OAAO,KAAMA,GAASA,EAAK,WAAa,EAAI,EAC3D,KAAK,aAAe,MAAa,aAEjC,KAAK,QAAQ,SACT,OAAQM,GAAWA,EAAO,OAAS,MAAW,UAAS,OAAyBA,CAAM,CAAC,EACxF,KAAMA,GAAWA,EAAO,QAAQ,EACnC,CAEA,MAAML,EADQ,KAAK,SAAS,GACK,OAAO,cAAc,kBAChDiD,EAAwBjD,IAAoB,GAAK,GAEvD,KAAK,aAAeiD,EAAwB,MAAa,OAAS,MAAa,GACjF,MACE,KAAK,aAAe,MAAa,IAGnC,GAAI/C,EAAQ,CACV,MAAMC,EAAe,CACnB,KAAM,gBACN,KAAM,MAAU,OAChB,OAAQ,CAAE,MAAO,KAAK,QAAQ,OAAS,CAAC,EAAG,QAAS,KAAK,QAAQ,SAAW,CAAC,CAAE,EAC/E,OAAQ,CAAC,CACX,EAEA,KAAK,YAAW,OACdD,EAAO,CAAC,EACRC,EACA,CACE,cAAe,CACb,MAAO,CACL,KAAMD,EACN,MAAOC,EACP,MAAOD,EAAO,CAAC,EACf,WAAY,CACd,CACF,CACF,EACAxE,GAAO,MAAM,MAAM,gBACrB,CACF,CAEA,KAAM,CAAE,WAAA/B,EAAY,OAAAC,CAAO,EAAI,KAAK,QAC9BsJ,EAAqB,CAAC,EAC5B,GAAIvJ,EAAY,CACd,GAAIA,EAAW,MAAO,CACpB,MAAMwJ,EAAQH,EAAI,SAASrJ,EAAW,KAAK,EAC3CuJ,EAAI,gBAAkBC,EAAM,MAAM,CACpC,CACA,GAAIxJ,EAAW,MAAO,CACpB,MAAMyJ,EAAQJ,EAAI,YAAYrJ,EAAW,KAAK,EAC9C,GAAIyJ,EAAO,CACT,MAAMC,EAAID,EAAM,MAAM,EACtB,GAAIC,EAEF,OADAH,EAAI,gBAAkB,QAAQG,CAAC,KACvB1J,EAAW,MAAQ,KAAoB,QAAS,CACtD,KAAK,KAAoB,QACvBuJ,EAAI,eAAiB,UACrBA,EAAI,iBAAmB,YACvB,MACF,KAAK,KAAoB,MACvBA,EAAI,eAAiB,QACrBA,EAAI,iBAAmB,YACvB,MACF,KAAK,KAAoB,SACvBA,EAAI,iBAAmB,YACvB,MACF,KAAK,KAAoB,KACvBA,EAAI,iBAAmB,SACvB,MACF,KAAK,KAAoB,KACvBA,EAAI,eAAiB,YACrB,KACJ,MAEAA,EAAI,gBAAkB,EAE1B,CACF,CACF,CAEA,GAAItJ,GAAUA,EAAO,OAASA,EAAO,QAAU,OAAW,CACxD,MAAMuJ,EAAQH,EAAI,SAASpJ,EAAO,KAAK,EACvCsJ,EAAI,YAAc,GAAGtJ,EAAO,KAAK,KACjCsJ,EAAI,YAAc,QAClBA,EAAI,YAAcC,EAAM,MAAM,EAG1BD,EAAI,kBACNA,EAAI,iBAAmB,cAE3B,CAEItJ,GAAUA,EAAO,SAAW,SAC9BsJ,EAAI,aAAe,GAAGtJ,EAAO,MAAM,MAGrC,KAAK,UAAYsJ,EACjB,KAAK,uBAAuB,CAC9B,CAEA,QAA8B,CAC5B,MAAO,EACT,CAGA,MAAMI,EAAoC,CACxCA,EAAQ,IAAI,CACd,CAEA,SAASxK,EAA+B,CAClC,KAAK,KAAK,KAAOA,EAAQ,OAC3B,KAAK,KAAOsF,GAAsB,YAAYtF,EAAQ,IAAI,GAAKlG,IAIjE,MAAM2Q,EAAU,KAAK,QAAQ,KACvB3C,EAAU9H,EAAQ,KAExB,KAAK,QACL,KAAK,QAAU,CAAE,GAAGA,CAAQ,EAC5B,IAAI+H,EAAO,KAAK,OAChB,KAAOA,GAAM,CACX,GAAIA,EAAK,OAAO,EAAG,CACjBA,EAAK,MAAM,KAAK,EAChB,KACF,CACAA,EAAK,QACLA,EAAOA,EAAK,MACd,CAEA,MAAMnF,EAAQ,KAAK,SAAS,EACxB6H,IAAY3C,GAAWlF,IACrB8H,GAAmB,KAAM9H,EAAM,MAAM,GACvC+H,GAAuB,KAAM/H,CAAK,EAAE,QAASgI,GAAe,CAC1DA,EAAW,KAAK,WAAa9C,CAC/B,CAAC,EAGHlF,EAAM,OAAO,OAAO6H,CAAO,EAC3B7H,EAAM,OAAO,IAAIkF,EAAS,IAAI,EAElC,CAEA,cAAe,CACb,MAAO,CAAE,GAAG,KAAK,OAAQ,CAC3B,CAiTA,QAAS,CACP,KAAM,CAAE,KAAAnC,EAAM,IAAAkF,CAAI,EAAI,KAChBjI,EAAQ,KAAK,SAAS,EACtBD,EAAakI,GAAOjI,GAASA,EAAM,SAAWA,EAAM,QAAQ,mBAAmB,EAAE,SAASiI,CAAG,EAEnG,SACE,oBACE,oBAAC,OAEC,IAAK,KAAK,YACV,aAAe1P,GAAwB,KAAK,iBAAiBA,EAAGwH,CAAU,EAC1E,aAAeC,GAAO,iBAA2C,OAAxB,KAAK,iBAC9C,QAAUA,GAAO,iBAAyC,OAAtB,KAAK,eACzC,UAAYA,GAAO,iBAA2C,OAAxB,KAAK,iBAC3C,KAAK,SACL,SAAU,EACV,MAAO,CAAE,WAAY,MAAO,EAE5B,mBAAC+C,EAAK,QAAL,CAEC,OAAQ,KAAK,QAAQ,OACrB,KAAM,KAAK,KACX,WAAAhD,CAAA,EAHK,GAAG,KAAK,GAAG,IAAI,KAAK,KAAK,EAIhC,GAfK,KAAK,GAgBZ,EACC,KAAK,wBAA0B,KAAK,0BAA0B,KAAK,iBAAiB,CAAC,EACrF,KAAK,qBAAuB,KAAK,0BAA0B,KAAK,iBAAiB,CAAC,GACrF,CAEJ,CACF,CCnlCO,SAASmI,GAASlI,EAAcgG,EAAoC,CACzE,GAAI,CACF,IAAImC,EAA6B,CAAE,QAAS,CAAC,CAAE,EAC/C,GAAInC,aAAmBoC,GAAY,CACjC,MAAMC,EAAmC,CAAC,EAC1CA,EAAe,KAAKrC,GAAS,GAAI,EACjCmC,EAAU,QAAUE,EACpBF,EAAU,MAAQnC,EAClBhG,EAAM,OAAOmI,CAAS,CACxB,MACEnI,EAAM,aAAegG,EAAQ,OAC7BmC,EAAU,QAAU,CAACnC,GAAS,GAAI,EAClChG,EAAM,OAAOmI,CAAS,CAE1B,MAAgB,CACd,KAAU,KAAK,MAAU,WAAY,CAAC,kEAAkE,CAAC,CAC3G,CACF,CAEO,SAASG,GAAgBC,EAA8CC,EAAsC,CAClH,OACSC,GADLF,EAC4B,CAAC,GAAG/F,GAAqB,GAAGC,EAAoB,EAGlD,CAAC,GAAGD,EAAmB,EAH8BgG,CAAO,CAI5F,CAOO,SAASC,GAAuBC,EAA4BF,EAAiD,CAClH,MAAMG,EAAkC,CAAE,QAAS,CAAC,EAAG,QAAS,CAAC,CAAE,EAC7DC,EAAwC,CAAC,EAE/C,UAAW7F,KAAQ2F,EAAO,CACxB,MAAMG,EAAkC,CAAE,MAAO9F,EAAK,KAAM,MAAOA,EAAK,GAAI,YAAaA,EAAK,WAAY,EAC1G,GAAIA,EAAK,QAAU,MAAY,MAAO,CACpC,GAAI,CAAC,MACH,SAEF8F,EAAO,MAAQ,GAAG9F,EAAK,IAAI,WAC3B6F,EAAM,KAAKC,CAAM,CACnB,MACEF,EAAY,QAAQ,KAAKE,CAAM,EAG7B9F,EAAK,KAAOyF,GACdG,EAAY,QAAQ,KAAKE,CAAM,CAEnC,CAEA,UAAWrQ,KAAKoQ,EACdD,EAAY,QAAQ,KAAKnQ,CAAC,EAG5B,OAAOmQ,CACT,CAEO,SAASG,GAAUC,EAA8BC,EAAmCC,EAA2B,CACpH,MAAMC,EAAUxG,GAAsB,YAAYqG,EAAI,KAAK,GAAK7R,GAC1DiS,EAA0C,CAC9C,GAAGD,EAAQ,cAAc,EACzB,KAAMA,EAAQ,GACd,KAAM,EACR,EAUA,GARID,IACFE,EAAkB,UAAY,CAAE,GAAGA,EAAkB,UAAW,IAAKF,EAAY,EAAG,KAAMA,EAAY,CAAE,GAGtGC,EAAQ,cACVC,EAAkB,UAAY,CAAE,GAAGA,EAAkB,UAAW,GAAGD,EAAQ,WAAY,GAGrFF,EAAW,CACb,MAAMI,EAAa,IAAItG,GAAaoG,EAASC,EAAmBH,CAAS,EACzEI,EAAW,WAAWJ,EAAU,MAAM,OAAO,EAC7CA,EAAU,SAAS,KAAKI,CAAU,EAClCJ,EAAU,MAAM,KAAK,EACrBA,EAAU,qBAAqB,EAE/B,WAAW,IAAMd,GAASc,EAAU,MAAOI,CAAU,CAAC,CACxD,CACF,CAEO,SAASC,GAAmBrD,EAAuB,CACxD,OAAOA,EAAQ,QAAQ,aAAeA,EAAQ,QAAQ,YAAY,OAAS,CAC7E,CAEO,SAAS8B,GAAmB9B,EAAuBsD,EAAwC,CAEhG,OADoBC,GAAeD,CAAW,EAC3B,KAAMtB,GAAeA,EAAW,SAAWhC,CAAO,CACvE,CAEO,SAASuD,GAAeD,EAAwC,CACrE,MAAME,EAAiC,CAAC,EACxC,QAAS7B,KAAK2B,EAAY,OAAO,EAC3B3B,EAAE,QAAQ,aACZA,EAAE,QAAQ,YAAY,QAAQ,CAAC8B,EAAGC,IAAU,IAEtC,aAASD,EAAE,KAAK,IAClBA,EAAE,MAAQ,CAAE,MAAOA,EAAE,KAAM,MAGzB,aAASA,EAAE,IAAI,IACjBA,EAAE,KAAO,CAAE,MAAO,EAAG,IAAK,EAAG,IAAK,EAAG,GAGvC,MAAMvG,EAASuG,EAAE,WAAaH,EAAY,IAAIG,EAAE,UAAU,EAAI9B,EAAE,OAC5DzE,GACFsG,EAAY,KAAK,CACf,MAAAE,EACA,OAAQ/B,EACR,OAAAzE,EACA,KAAMuG,EACN,SAAUA,EAAE,UAAY,OACxB,eAAgBA,EAAE,gBAAkB,OACpC,eAAgBA,EAAE,gBAAkB,MACtC,CAAC,CAEL,CAAC,EAIL,OAAOD,CACT,CAEO,SAASzB,GAAuB/B,EAAuBhG,EAAc,CAC1E,OAAOA,EAAM,YAAY,MAAM,OAAQgI,GAAeA,EAAW,SAAWhC,CAAO,CACrF,CAEO,SAAS2D,GAA2B3D,EAAuBhG,EAAc,CACpD+H,GAAuB/B,EAAShG,CAAK,EAC7C,QAASgI,GAAe,CAExC,MAAMwB,GADoBxB,EAAW,OAAO,QAAQ,aAAa,OAAO,CAAC,GAAK,CAAC,GACzC,OAAQ4B,GAAQA,EAAI,aAAe5D,EAAQ,QAAQ,CAAC,EAC1FgC,EAAW,OAAO,SAAS,CAAE,GAAGA,EAAW,OAAO,QAAS,YAAAwB,CAAY,CAAC,CAC1E,CAAC,EAGDxJ,EAAM,YAAY,YAAY,CAChC,CAEO,MAAM6J,GAAuB,CAClCC,EACAC,EACAC,EACA9G,EACAkD,IACG,CACH,MAAM6D,EAAyBH,EAAW,KAAOC,EAAW,KAAOD,EAAW,MAAQ,EAChFI,EAAuBJ,EAAW,IAAMC,EAAW,IAAMD,EAAW,OAAS,EAG7EK,GAAMF,EAA0BD,EAAK,OAAO,EAAIF,EAAW,MAAS,GAAK1D,EACzEgE,GAAMF,EAAwBF,EAAK,OAAO,EAAIF,EAAW,OAAU,GAAK1D,EAE9E,IAAIiE,EACAC,EACJ,MAAMC,EAAarH,EAAO,KAAK,sBAAsB,EACrD,GAAI8G,EAAK,YAAcO,EAAY,CACjC,MAAMC,EAAyBD,EAAW,KAAOR,EAAW,KAAOQ,EAAW,MAAQ,EAChFE,EAAuBF,EAAW,IAAMR,EAAW,IAAMQ,EAAW,OAAS,EAEnFF,EAAKG,EAA0BR,EAAK,OAAO,EAAIO,EAAW,MAAS,EACnED,EAAKG,EAAwBT,EAAK,OAAO,EAAIO,EAAW,OAAU,CACpE,KAAO,CACL,MAAMG,EAAyBX,EAAW,MAAQ,EAC5CY,EAAuBZ,EAAW,OAAS,EAEjDM,EAAKK,EAA0BV,EAAK,OAAO,EAAID,EAAW,MAAS,EACnEO,EAAKK,EAAwBX,EAAK,OAAO,EAAID,EAAW,OAAU,CACpE,CACA,OAAAM,GAAMjE,EACNkE,GAAMlE,EAGFiE,EAAKF,IAAO,IACdE,GAAM,GAEJC,EAAKF,IAAO,IACdE,GAAM,GAED,CAAE,GAAAH,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,CAAG,CAC1B,EAEaM,GAAwB,CAACC,EAAsB3H,EAAsB8G,IAA2B,CAC3G,KAAM,CAAE,EAAGG,EAAI,EAAGC,CAAG,EAAIU,GAA0BD,EAAO,IAAMb,EAAK,OAAO,EAAGA,EAAK,OAAO,CAAC,EAE5F,IAAIK,EAAK,EACLC,EAAK,EACT,MAAMS,EAAY7H,EAAO,IACzB,OAAI8G,EAAK,YAAce,EACpB,CAAE,EAAGV,EAAI,EAAGC,CAAG,EAAIQ,GAA0BC,EAAWf,EAAK,OAAO,EAAGA,EAAK,OAAO,CAAC,GAErFK,EAAKL,EAAK,OAAO,EACjBM,EAAKN,EAAK,OAAO,GAGZ,CAAE,GAAAG,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,CAAG,CAC1B,EAEaU,GAAoChF,GAAqB,CACpE,MAAMtC,EAAQ,OAAO,iBAAiBsC,CAAO,EAEvCiF,EAAYvH,EAAM,UAExB,IAAIwH,EAAI,EACJC,EAAI,EACJC,EAAW,EAEf,GAAIH,IAAc,OAAQ,CAExB,MAAMhF,EAAS,IAAI,UAAUgF,CAAS,EAGtCC,EAAIjF,EAAO,IACXkF,EAAIlF,EAAO,IAIXmF,EAAW,CAAC,KAAK,MAAMnF,EAAO,IAAKA,EAAO,GAAG,GAAK,IAAM,KAAK,GAC/D,CAIA,MAAMiB,EAAQ,WAAWxD,EAAM,KAAK,EAC9BL,EAAS,WAAWK,EAAM,MAAM,EAEtC,MAAO,CAAE,KAAMwH,EAAG,IAAKC,EAAG,MAAAjE,EAAO,OAAA7D,EAAQ,EAAA6H,EAAG,EAAAC,EAAG,SAAAC,CAAS,CAC1D,EAEaC,GAA6B,CAACpD,EAAqBiD,EAAWC,IAAc,CACvF,KAAM,CAAE,KAAAG,EAAM,IAAAC,EAAK,MAAArE,EAAO,OAAA7D,EAAQ,SAAA+H,CAAS,EAAIJ,GAAiC/C,CAAG,EAE7EuD,EAAUF,EAAOpE,EAAQ,EACzBuE,EAAUF,EAAMlI,EAAS,EAG/B,IAAIqI,EAAKR,EAAIM,EACTG,EAAKR,EAAIM,EAGb,MAAMG,EAAMR,GAAY,KAAK,GAAK,KAC5BS,EAAM,KAAK,IAAI,CAACD,CAAG,EACnBE,EAAM,KAAK,IAAI,CAACF,CAAG,EAEnBG,EAAYL,EAAKG,EAAMF,EAAKG,EAC5BE,EAAYN,EAAKI,EAAMH,EAAKE,EAG5BI,EAAcF,GAAa7E,EAAQ,GACnCgF,EAAc,CAACF,GAAa3I,EAAS,GAE3C,MAAO,CAAE,EAAG4I,EAAa,EAAGC,CAAY,CAC1C,EAEapB,GAA4B,CAAC7C,EAAqBgE,EAAqBC,IAAwB,CAC1G,KAAM,CAAE,KAAAZ,EAAM,IAAAC,EAAK,MAAArE,EAAO,OAAA7D,EAAQ,SAAA+H,CAAS,EAAIJ,GAAiC/C,CAAG,EAC7EuD,EAAUF,EAAOpE,EAAQ,EACzBuE,EAAUF,EAAMlI,EAAS,EAGzB8I,EAAWF,EAAc/E,EAAS,EAClCkF,EAAU,EAAEF,EAAc7I,GAAU,EAGpCuI,EAAMR,GAAY,KAAK,GAAK,KAC5BS,EAAM,KAAK,IAAID,CAAG,EAClBE,EAAM,KAAK,IAAIF,CAAG,EAElBS,EAAiBF,EAAUN,EAAMO,EAAUN,EAC3CQ,EAAiBH,EAAUL,EAAMM,EAAUP,EAE3CX,EAAIM,EAAUa,EACdlB,EAAIM,EAAUa,EAEpB,MAAO,CAAE,EAAApB,EAAG,EAAAC,CAAE,CAChB,EAEaoB,GAAoB,CAACpC,EAAYC,EAAYC,EAAYC,KAC7D,CAAE,GAAIH,EAAKE,GAAM,EAAG,GAAID,EAAKE,GAAM,CAAE,GAGjCkC,GAA0B,CACrCrC,EACAC,EACAC,EACAC,EACAmC,EACAC,EACA/I,EACAC,KAEO,CAAE,EAAG6I,EAAS9I,EAASwG,EAAI,EAAGuC,EAAS9I,EAASwG,CAAG,GAI/CuC,GAAiB,CAACxC,EAAYC,EAAYC,EAAYC,IAC1D,KAAK,MAAMA,EAAKF,EAAIC,EAAKF,CAAE,EAGvByC,GAAoB,CAACzC,EAAYC,EAAYC,EAAYC,IAE7D,KAAK,MAAMD,EAAKF,IAAO,GAAKG,EAAKF,IAAO,CAAC,EAIrChG,GAAc,CAACyI,EAA+B7M,IAAiB,CAC1E,GAAI6M,EAAW,CAGb,MAAM/S,EAFSkG,EAAM,MAAM,OAAO,CAAC,GACb,OAAO,KAAMU,GAAUA,EAAM,OAASmM,CAAS,GACjD,OACpB,OAAO/S,EAAOA,EAAK,OAAS,EAAI,CAClC,CACA,MAAO,EACT,EAEagT,GAAsB,CACjC9C,EACAhK,EACA+M,EACAC,IACG,CACH,MAAMC,EAAoB,MAAO,OAAO,OAAO,KAAK,QAC9CC,EAAe9I,GAAY4F,EAAK,MAAM,MAAOhK,CAAK,EAClDmN,EAAcnD,EAAK,MAAQhK,EAAM,QAAQ,SAASgK,EAAK,KAAK,EAAE,MAAM,EAAIiD,EACxEG,EAAcpD,EAAK,KAAOhK,EAAM,QAAQ,SAASgK,EAAK,IAAI,EAAE,IAAIkD,CAAY,EAAIH,EAChFM,EAAerD,EAAK,OAAShK,EAAM,QAAQ,SAASgK,EAAK,MAAM,EAAE,IAAIkD,CAAY,EAAI,EACrFI,EAAiBtD,EAAK,UACxBhK,EAAM,QAAQ,aAAagK,EAAK,SAAS,EAAE,IAAIkD,CAAY,EAC3DF,EACEO,EAAYC,GAAaxD,EAAK,WAAW,KAAK,EAC9CyD,EAAgBzD,EAAK,WAAW,QAEtC,MAAO,CAAE,YAAAmD,EAAa,YAAAC,EAAa,aAAAC,EAAc,eAAAC,EAAgB,UAAAC,EAAW,cAAAE,CAAc,CAC5F,EAEMD,GAAgBD,GAA0B,CAC9C,OAAQA,EAAW,CACjB,KAAKlW,GAAU,OACb,OAAOC,GAAgB,OACzB,KAAKD,GAAU,OACb,OAAOC,GAAgB,OACzB,QACE,OAAOA,GAAgB,KAC3B,CACF,EAEaoW,GAA+B1N,GACtC,MAAO,eAAe,mBACjBA,EAAM,aAAa,sBAAsB,EAG3CA,EAAM,KAAK,sBAAsB,EAGnC,SAAS2N,GAAiBnJ,EAAqBoJ,EAA4B,CAChF,MAAMC,EAAS,IAAI,IACbC,EAAMF,EAAK,QAAU,CAAC,EAE5B,OAAApJ,EAAO,QAASuJ,GAAU,CACxBA,EAAM,OAAO,QAASrN,GAAU,CAI9B,UAHa,OAAoBA,EAAOqN,EAAOvJ,CAAM,EAGvC,CAEZ,KAAKoJ,EAAK,YAAY,OAAO,MAC7B,KAAKA,EAAK,YAAY,OAAO,MAC7B,KAAKA,EAAK,QAAQ,OAAO,MAEzB,KAAKE,EAAI,MAAM,MACf,KAAKA,EAAI,OAAO,MAEhB,KAAKA,EAAI,MAAM,MACf,KAAKA,EAAI,MAAM,MAEf,KAAKA,EAAI,WAAW,MACpB,KAAKA,EAAI,aAAa,MACtB,KAAKA,EAAI,WAAW,MAEpB,KAAKA,EAAI,KAAK,MACZD,EAAO,IAAInN,CAAK,CACpB,CACF,CAAC,CACH,CAAC,EAEM,CAAC,GAAGmN,CAAM,CACnB,CAEO,SAASpI,GAAY9I,EAA6BuG,EAAwB,CAE/E,OAAO,OAAOA,EAAO,MAAOvG,CAAM,CACpC,CAEO,SAASgJ,GAAahJ,EAA6BuG,EAAwB,CAChF,UAAWhL,KAAOyE,EAEhBuG,EAAO,MAAMhL,CAAU,EAAI,EAE/B,CC9YA,IAAI8V,GAAM,MASNC,GAAO,OASPC,GAAM,MASNC,GAAO,OASPC,GAAe,CAACJ,GAAKC,GAAMC,GAAKC,EAAI,EASpCE,GAAW,WASXC,GAAW,WASXC,GAAQ,QASRC,GAAS,SASTC,GAAS,SASTC,GAAS,SASTC,GAAY,YAUZC,GAAY,OAAO,SAAWD,GAW9BE,GAAM,OAAO,WAAaF,IAAa,SACvCG,GAAW,KAgBXC,GAAuC,SAAUC,EAAU,CAC7D,GAAI,CAACH,GACH,MAAO,GAET,IAAIlS,GAAUkS,GAAI,MAAQA,GAAI,iBAAiB,MAC3CI,EAASH,GAAS,OACtB,GAAI,OAAOnS,EAAOqS,CAAQ,IAAML,GAC9B,OAAOK,EAET,QAASE,EAAI,EAAGA,EAAID,EAAQ,EAAEC,EAAG,CAC/B,IAAIrV,EAAO,IAAMiV,GAASI,CAAC,EAAI,IAAMF,EACrC,GAAI,OAAOrS,EAAO9C,CAAI,IAAM8U,GAC1B,OAAO9U,CAEX,CACA,MAAO,EACT,EASIsV,GAAyB,KASzBC,GAAsB,KAStBC,GAAyB,KASzBC,GAAyB,KACzBC,GAAyB,CAAC,CAC5B,KAAM,IACN,MAAO,GACT,EAAG,CACD,KAAM,IACN,MAAO,GACT,EAAG,CACD,KAAM,IACN,MAAO,GACT,EAAG,CACD,KAAM,MACN,MAAO,KACT,EAAG,CACD,KAAM,MACN,MAAO,KACT,CAAC,EACGC,GAAW,KACXC,GAAmB,EAAID,GACvBE,GAAuB,CACzB,GAAM,SAAUC,EAAK,CACnB,OAAOA,EAAM,GAAK,IACpB,EACA,GAAM,SAAUA,EAAK,CACnB,OAAOA,EAAM,GAAK,GACpB,EACA,GAAM,SAAUA,EAAK,CACnB,OAAOA,EAAM,EACf,EACA,GAAM,SAAUA,EAAK,CACnB,OAAOA,EAAM,GAAK,EACpB,EACA,GAAM,SAAUA,EAAK,CACnB,OAAOA,EAAM,GAAK,CACpB,EACA,IAAK,SAAUA,EAAKC,EAAM,CACxB,OAAOD,EAAMC,EAAO,GACtB,EACA,GAAM,SAAUD,EAAKC,EAAM,CACzB,OAAIA,IAAS,SACXA,EAAO,OAAO,YAETD,EAAM,IAAMC,CACrB,EACA,GAAM,SAAUD,EAAKC,EAAM,CACzB,OAAIA,IAAS,SACXA,EAAO,OAAO,aAETD,EAAM,IAAMC,CACrB,EACA,KAAQ,SAAUD,EAAKC,EAAM,CAC3B,OAAIA,IAAS,SACXA,EAAO,KAAK,IAAI,OAAO,WAAY,OAAO,WAAW,GAEhDD,EAAM,IAAMC,CACrB,EACA,KAAQ,SAAUD,EAAKC,EAAM,CAC3B,OAAIA,IAAS,SACXA,EAAO,KAAK,IAAI,OAAO,WAAY,OAAO,WAAW,GAEhDD,EAAM,IAAMC,CACrB,CACF,EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gFAcA,SAASC,IAAiB,CACxB,QAASC,EAAI,EAAGZ,EAAI,EAAGa,EAAK,UAAU,OAAQb,EAAIa,EAAIb,IAAKY,GAAK,UAAUZ,CAAC,EAAE,OAC7E,QAAS,EAAI,MAAMY,CAAC,EAAGE,EAAI,EAAGd,EAAI,EAAGA,EAAIa,EAAIb,IAAK,QAAS,EAAI,UAAUA,CAAC,EAAGe,EAAI,EAAGC,EAAK,EAAE,OAAQD,EAAIC,EAAID,IAAKD,IAAK,EAAEA,CAAC,EAAI,EAAEC,CAAC,EAC/H,OAAO,CACT,CAoBA,SAASE,GAAIC,EAAIC,EAAIC,EAAIC,EAAI,CAC3B,OAAQH,EAAKG,EAAKF,EAAKC,IAAOA,EAAKC,EACrC,CAcA,SAASC,GAAYhZ,EAAO,CAC1B,OAAO,OAAOA,IAAUmX,EAC1B,CAcA,SAAS8B,GAASjZ,EAAO,CACvB,OAAOA,GAAS,OAAOA,IAAUgX,EACnC,CAcA,SAASkC,GAAQlZ,EAAO,CACtB,OAAO,MAAM,QAAQA,CAAK,CAC5B,CAcA,SAAS,GAASA,EAAO,CACvB,OAAO,OAAOA,IAAUiX,EAC1B,CACA,SAAS,GAASjX,EAAO,CACvB,OAAO,OAAOA,IAAUkX,EAC1B,CAeA,SAAS,GAAWlX,EAAO,CACzB,OAAO,OAAOA,IAAU6W,EAC1B,CACA,SAASsC,GAAiBC,EAAWC,EAAW,CAC9C,IAAIC,EAAmBF,IAAc,IAAMA,GAAa,IACpDG,EAAmBF,IAAc,IAAMA,GAAa,IACxD,OAAOE,GAAoBD,GAAoBF,IAAcC,CAC/D,CACA,SAASG,GAASC,EAAeC,EAAOxH,EAAOuF,EAAQkC,EAAqB,CAC1E,IAAIC,EAAWC,GAAWJ,EAAeC,EAAOxH,CAAK,EACrD,OAAK0H,EAGE1H,EAFE4H,GAAUL,EAAeC,EAAOxH,EAAQ,EAAGuF,EAAQkC,CAAmB,CAGjF,CACA,SAASE,GAAWT,EAAWM,EAAOxH,EAAO,CAC3C,GAAI,CAACkH,EAAU,OACb,OAAO,KAET,IAAIW,EAAYL,EAAM,MAAM,KAAK,IAAIxH,EAAQ,EAAG,CAAC,EAAGA,EAAQ,CAAC,EAAE,KAAK,EAAE,EACtE,OAAO,IAAI,OAAOkH,EAAU,MAAM,EAAE,KAAKW,CAAS,CACpD,CACA,SAASD,GAAUE,EAAgBN,EAAOxH,EAAOuF,EAAQkC,EAAqB,CAwB5E,QAvBIM,EAAU,SAAUvC,EAAG,CACzB,IAAI0B,EAAYM,EAAMhC,CAAC,EAAE,KAAK,EAC9B,GAAI0B,IAAcY,EAAe,OAAS,CAACH,GAAWG,EAAgBN,EAAOhC,CAAC,EAC5E,MAAO,CACL,MAAOA,CACT,EAEF,IAAIwC,EAAYxC,EAEZ+B,EAAgB,GAAKE,EAAqB,SAAUQ,EAAI,CAC1D,IAAIC,EAAOD,EAAG,KACd,OAAOC,IAAShB,CAClB,CAAC,EAID,GAHIK,IACFS,EAAYV,GAASC,EAAeC,EAAOhC,EAAGD,EAAQkC,CAAmB,GAEvEO,IAAc,GAChB,OAAOG,EAAU3C,EAAG,QAEtBA,EAAIwC,EACJG,EAAU3C,CACZ,EACI2C,EACK3C,EAAIxF,EAAOwF,EAAID,EAAQ,EAAEC,EAAG,CACnC,IAAI4C,EAAUL,EAAQvC,CAAC,EAEvB,GADAA,EAAI2C,EACA,OAAOC,GAAY,SAAU,OAAOA,EAAQ,MAChD,GAAIA,IAAY,QAAS,KAC3B,CACA,MAAO,EACT,CACA,SAASC,GAAUzY,EAAM0Y,EAAc,CACrC,IAAIL,EAAK,GAASK,CAAY,EAAI,CAC9B,UAAWA,CACb,EAAIA,EACJC,EAAKN,EAAG,UACRd,EAAYoB,IAAO,OAAS,IAAMA,EAClCC,EAAkBP,EAAG,gBACrBQ,EAA0BR,EAAG,wBAC7BS,EAAKT,EAAG,oBACRU,EAAsBD,IAAO,OAASD,EAA0BC,EAChEE,EAAKX,EAAG,oBACRR,EAAsBmB,IAAO,OAAS/C,GAAyB+C,EAC7DC,EAAiBpB,EAAoB,IAAI,SAAUQ,EAAI,CACzD,IAAIC,EAAOD,EAAG,KACZa,EAAQb,EAAG,MACb,OAAIC,IAASY,EACJZ,EAEFA,EAAO,IAAMY,CACtB,CAAC,EAAE,KAAK,GAAG,EACPC,EAAY,QAAU5B,EAAY,QAAU0B,EAAiB,SAC7DG,EAAQ,IAAI,OAAOD,EAAW,GAAG,EACjCvB,EAAQ5X,EAAK,MAAMoZ,CAAK,EAAE,OAAO,SAAUC,EAAK,CAClD,OAAOA,GAAOA,IAAQ,WACxB,CAAC,EACG1D,EAASiC,EAAM,OACf0B,EAAS,CAAC,EACVC,EAAa,CAAC,EAClB,SAASC,GAAY,CACnB,OAAID,EAAW,QACbD,EAAO,KAAKC,EAAW,KAAK,EAAE,CAAC,EAC/BA,EAAa,CAAC,EACP,IAEF,EACT,CAoDA,QAnDIE,EAAU,SAAU7D,EAAG,CACzB,IAAI0B,EAAYM,EAAMhC,CAAC,EAAE,KAAK,EAC1BwC,EAAYxC,EACZ+B,EAAgB,GAAKE,EAAqB,SAAUQ,EAAI,CAC1D,IAAIC,EAAOD,EAAG,KACd,OAAOC,IAAShB,CAClB,CAAC,EACGY,EAAiB,GAAKL,EAAqB,SAAUQ,EAAI,CAC3D,IAAIa,EAAQb,EAAG,MACf,OAAOa,IAAU5B,CACnB,CAAC,EACD,GAAIK,GAEF,GADAS,EAAYV,GAASC,EAAeC,EAAOhC,EAAGD,EAAQkC,CAAmB,EACrEO,IAAc,IAAMW,EAMtB,OALIS,EAAU,GAAKZ,IAGnBU,EAAO,KAAK1B,EAAM,MAAMhC,EAAGwC,EAAY,CAAC,EAAE,KAAK,EAAE,CAAC,EAClDxC,EAAIwC,EACAQ,IACKc,EAAU9D,EAAG,UAEf8D,EAAU9D,EAAG,oBAEbsC,GAAkB,CAACH,GAAWG,EAAgBN,EAAOhC,CAAC,EAAG,CAClE,IAAI+D,EAA0BpD,GAAesB,CAAmB,EAChE,OAAA8B,EAAwB,OAAO9B,EAAoB,QAAQK,CAAc,EAAG,CAAC,EACtE,CACL,MAAOO,GAAUzY,EAAM,CACrB,UAAWuX,EACX,gBAAiBqB,EACjB,wBAAyBC,EACzB,oBAAqBE,EACrB,oBAAqBY,CACvB,CAAC,CACH,CACF,SAAWtC,GAAiBC,EAAWC,CAAS,GAAK,CAACsB,EAEpD,OADAW,EAAU,EACNZ,GACKc,EAAU9D,EAAG,UAEf8D,EAAU9D,EAAG,YAElBwC,IAAc,KAChBA,EAAYzC,EAAS,GAEvB4D,EAAW,KAAK3B,EAAM,MAAMhC,EAAGwC,EAAY,CAAC,EAAE,KAAK,EAAE,CAAC,EACtDxC,EAAIwC,EACJsB,EAAU9D,CACZ,EACI8D,EACK9D,EAAI,EAAGA,EAAID,EAAQ,EAAEC,EAAG,CAC/B,IAAIgE,EAAUH,EAAQ7D,CAAC,EAEvB,GADAA,EAAI8D,EACA,OAAOE,GAAY,SAAU,OAAOA,EAAQ,MAChD,GAAIA,IAAY,QAAS,KAC3B,CACA,OAAIL,EAAW,QACbD,EAAO,KAAKC,EAAW,KAAK,EAAE,CAAC,EAE1BD,CACT,CAcA,SAASO,GAAW7Z,EAAM,CAExB,OAAOyY,GAAUzY,EAAM,EAAE,CAC3B,CAcA,SAAS8Z,GAAW9Z,EAAM,CAGxB,OAAOyY,GAAUzY,EAAM,GAAG,CAC5B,CAcA,SAAS+Z,GAAa/Z,EAAM,CAC1B,IAAIga,EAAU,iCAAiC,KAAKha,CAAI,EACxD,MAAI,CAACga,GAAWA,EAAQ,OAAS,EACxB,CAAC,EAED,CACL,OAAQA,EAAQ,CAAC,EACjB,MAAOA,EAAQ,CAAC,EAChB,OAAQA,EAAQ,CAAC,CACnB,CAEJ,CAgBA,SAASC,GAAUja,EAAM,CACvB,IAAIga,EAAU,gDAAgD,KAAKha,CAAI,EACvE,GAAI,CAACga,EACH,MAAO,CACL,OAAQ,GACR,KAAM,GACN,MAAO,GACT,EAEF,IAAIE,EAASF,EAAQ,CAAC,EAClB9b,EAAQ8b,EAAQ,CAAC,EACjBG,EAAOH,EAAQ,CAAC,EACpB,MAAO,CACL,OAAQE,EACR,KAAMC,EACN,MAAO,WAAWjc,CAAK,CACzB,CACF,CAaA,SAASkc,GAASC,EAAK,CACrB,OAAOA,EAAI,QAAQ,oBAAqB,SAAUC,EAAKC,EAAQ,CAC7D,OAAOA,EAAO,YAAY,CAC5B,CAAC,CACH,CAaA,SAAS,GAAWF,EAAK9C,EAAW,CAClC,OAAIA,IAAc,SAChBA,EAAY,KAEP8C,EAAI,QAAQ,kBAAmB,SAAUC,EAAKC,EAAQC,EAAS,CACpE,MAAO,GAAKD,EAAShD,EAAYiD,EAAQ,YAAY,CACvD,CAAC,CACH,CAYA,SAASC,GAAQvc,EAAO,CACtB,MAAO,CAAC,EAAE,MAAM,KAAKA,CAAK,CAC5B,CAUA,SAASwc,IAAM,CACb,OAAO,KAAK,IAAM,KAAK,IAAI,EAAI,IAAI,KAAK,EAAE,QAAQ,CACpD,CAaA,SAASC,GAAUC,EAAKC,EAAUC,EAAc,CAC1CA,IAAiB,SACnBA,EAAe,IAGjB,QADInF,EAASiF,EAAI,OACR,EAAI,EAAG,EAAIjF,EAAQ,EAAE,EAC5B,GAAIkF,EAASD,EAAI,CAAC,EAAG,EAAGA,CAAG,EACzB,OAAO,EAGX,OAAOE,CACT,CAaA,SAASC,GAAcH,EAAKC,EAAUC,EAAc,CAC9CA,IAAiB,SACnBA,EAAe,IAGjB,QADInF,EAASiF,EAAI,OACR,EAAIjF,EAAS,EAAG,GAAK,EAAG,EAAE,EACjC,GAAIkF,EAASD,EAAI,CAAC,EAAG,EAAGA,CAAG,EACzB,OAAO,EAGX,OAAOE,CACT,CAaA,SAASE,GAASJ,EAAKC,EAAUI,EAAc,CAC7C,IAAI7K,EAAQ2K,GAAcH,EAAKC,CAAQ,EACvC,OAAOzK,EAAQ,GAAKwK,EAAIxK,CAAK,EAAI6K,CACnC,CAaA,SAAS,GAAKL,EAAKC,EAAUI,EAAc,CACzC,IAAI7K,EAAQuK,GAAUC,EAAKC,CAAQ,EACnC,OAAOzK,EAAQ,GAAKwK,EAAIxK,CAAK,EAAI6K,CACnC,CAcA,IAAI,GAAqC,UAAY,CACnD,IAAIC,EAAYR,GAAI,EAChBS,EAAM7F,KAAc,OAAO,uBAAyB,OAAO,6BAA+B,OAAO,0BAA4B,OAAO,yBACxI,OAAO6F,EAAMA,EAAI,KAAK,MAAM,EAAI,SAAUN,EAAU,CAClD,IAAIO,EAAWV,GAAI,EACfW,EAAK,WAAW,UAAY,CAC9BR,EAASO,EAAWF,CAAS,CAC/B,EAAG,IAAO,EAAE,EACZ,OAAOG,CACT,CACF,EAAE,EAgBE,GAAoC,UAAY,CAClD,IAAIC,EAAMhG,KAAc,OAAO,sBAAwB,OAAO,4BAA8B,OAAO,yBAA2B,OAAO,wBACrI,OAAOgG,EAAMA,EAAI,KAAK,MAAM,EAAI,SAAUC,EAAQ,CAChD,aAAaA,CAAM,CACrB,CACF,EAAE,EAKF,SAASC,GAAQC,EAAK,CACpB,OAAO,OAAO,KAAKA,CAAG,CACxB,CAKA,SAASC,GAAUD,EAAK,CACtB,IAAIE,EAAOH,GAAQC,CAAG,EACtB,OAAOE,EAAK,IAAI,SAAU/c,EAAK,CAC7B,OAAO6c,EAAI7c,CAAG,CAChB,CAAC,CACH,CAKA,SAAS,GAAW6c,EAAK,CACvB,IAAIE,EAAOH,GAAQC,CAAG,EACtB,OAAOE,EAAK,IAAI,SAAU/c,EAAK,CAC7B,MAAO,CAACA,EAAK6c,EAAI7c,CAAG,CAAC,CACvB,CAAC,CACH,CAKA,SAASgd,GAAWD,EAAME,EAAQ,CAC5BA,IAAW,SACbA,EAAS,CAAC,GAEZF,EAAK,KAAK,SAAUzc,EAAGC,EAAG,CACxB,IAAI2c,EAASD,EAAO,QAAQ3c,CAAC,EACzB6c,EAASF,EAAO,QAAQ1c,CAAC,EAC7B,OAAI4c,IAAW,IAAMD,IAAW,GACvB,EAELA,IAAW,GACN,EAELC,IAAW,GACN,GAEFD,EAASC,CAClB,CAAC,CACH,CAMA,SAASC,GAAgB3F,EAAKC,EAAM,CAClC,IAAI+B,EAAK4B,GAAU5D,CAAG,EACpBnY,EAAQma,EAAG,MACX8B,EAAO9B,EAAG,KACZ,GAAIlB,GAASb,CAAI,EAAG,CAClB,IAAI2F,EAAe3F,EAAK6D,CAAI,EAC5B,GAAI8B,EAAc,CAChB,GAAI,GAAWA,CAAY,EACzB,OAAOA,EAAa/d,CAAK,EACpB,GAAIkY,GAAqB+D,CAAI,EAClC,OAAO/D,GAAqB+D,CAAI,EAAEjc,EAAO+d,CAAY,CAEzD,CACF,SAAW9B,IAAS,IAClB,OAAOjc,EAAQoY,EAAO,IAExB,OAAIF,GAAqB+D,CAAI,EACpB/D,GAAqB+D,CAAI,EAAEjc,CAAK,EAElCA,CACT,CAMA,SAASge,GAAQhe,EAAOie,EAAKC,EAAK,CAChC,OAAO,KAAK,IAAID,EAAK,KAAK,IAAIje,EAAOke,CAAG,CAAC,CAC3C,CACA,SAASC,GAAeC,EAAYC,EAAaC,EAAOC,EAAO,CAC7D,OAAIA,IAAU,SACZA,EAAQH,EAAW,CAAC,EAAIA,EAAW,CAAC,GAE/B,CAAC,CAACI,GAASH,EAAY,CAAC,EAAGrG,EAAQ,EAAGwG,GAASH,EAAY,CAAC,EAAIE,EAAOvG,EAAQ,CAAC,EAAG,CAACwG,GAASH,EAAY,CAAC,EAAIE,EAAOvG,EAAQ,EAAGwG,GAASH,EAAY,CAAC,EAAGrG,EAAQ,CAAC,CAAC,EAAE,OAAO,SAAUI,EAAM,CACjM,OAAOA,EAAK,MAAM,SAAUpY,EAAO0X,EAAG,CACpC,IAAI+G,EAAcJ,EAAY3G,CAAC,EAC3BgH,EAAgBF,GAASC,EAAazG,EAAQ,EAClD,OAAOsG,EAAQte,GAASye,GAAeze,GAAS0e,EAAgB1e,GAASye,GAAeze,GAAS0e,CACnG,CAAC,CACH,CAAC,EAAE,CAAC,GAAKN,CACX,CAMA,SAASO,GAAmBvG,EAAMwG,EAASC,EAASC,EAAW,CAC7D,GAAI,CAACA,EACH,OAAO1G,EAAK,IAAI,SAAUpY,EAAO0X,EAAG,CAClC,OAAOsG,GAAQhe,EAAO4e,EAAQlH,CAAC,EAAGmH,EAAQnH,CAAC,CAAC,CAC9C,CAAC,EAEH,IAAIhI,EAAQ0I,EAAK,CAAC,EAChBvM,EAASuM,EAAK,CAAC,EACbmG,EAAQO,IAAc,GAAOpP,EAAQ7D,EAASiT,EAE9C3E,EAAKgE,GAAe/F,EAAMwG,EAAS,GAAOL,CAAK,EACjDQ,EAAW5E,EAAG,CAAC,EACf6E,EAAY7E,EAAG,CAAC,EACdM,EAAK0D,GAAe/F,EAAMyG,EAAS,GAAMN,CAAK,EAChDU,EAAWxE,EAAG,CAAC,EACfyE,EAAYzE,EAAG,CAAC,EAClB,OAAI/K,EAAQqP,GAAYlT,EAASmT,GAC/BtP,EAAQqP,EACRlT,EAASmT,IACAtP,EAAQuP,GAAYpT,EAASqT,KACtCxP,EAAQuP,EACRpT,EAASqT,GAEJ,CAACxP,EAAO7D,CAAM,CACvB,CAMA,SAASsT,GAAIC,EAAM,CAGjB,QAFI3H,EAAS2H,EAAK,OACdC,EAAQ,EACH3H,EAAID,EAAS,EAAGC,GAAK,EAAG,EAAEA,EACjC2H,GAASD,EAAK1H,CAAC,EAEjB,OAAO2H,CACT,CAMA,SAAS,GAAQD,EAAM,CAGrB,QAFI3H,EAAS2H,EAAK,OACdC,EAAQ,EACH3H,EAAID,EAAS,EAAGC,GAAK,EAAG,EAAEA,EACjC2H,GAASD,EAAK1H,CAAC,EAEjB,OAAOD,EAAS4H,EAAQ5H,EAAS,CACnC,CAMA,SAAS6H,GAAOC,EAAMC,EAAM,CAC1B,IAAIC,EAAQD,EAAK,CAAC,EAAID,EAAK,CAAC,EACxBG,EAAQF,EAAK,CAAC,EAAID,EAAK,CAAC,EACxBnL,EAAM,KAAK,MAAMsL,EAAOD,CAAK,EACjC,OAAOrL,GAAO,EAAIA,EAAMA,EAAM,KAAK,GAAK,CAC1C,CAMA,SAASuL,GAAeC,EAAQ,CAC9B,MAAO,CAAC,EAAG,CAAC,EAAE,IAAI,SAAUlI,EAAG,CAC7B,OAAO,GAAQkI,EAAO,IAAI,SAAUzH,EAAK,CACvC,OAAOA,EAAIT,CAAC,CACd,CAAC,CAAC,CACJ,CAAC,CACH,CAMA,SAASmI,GAAkBD,EAAQ,CACjC,IAAIE,EAASH,GAAeC,CAAM,EAC9BG,EAAUT,GAAOQ,EAAQF,EAAO,CAAC,CAAC,EAClCI,EAAUV,GAAOQ,EAAQF,EAAO,CAAC,CAAC,EACtC,OAAOG,EAAUC,GAAWA,EAAUD,EAAU,KAAK,IAAMA,EAAUC,GAAWA,EAAUD,EAAU,CAAC,KAAK,GAAK,EAAI,EACrH,CAMA,SAAS,GAAQ/e,EAAGC,EAAG,CACrB,OAAO,KAAK,KAAK,KAAK,KAAKA,EAAIA,EAAE,CAAC,EAAI,GAAKD,EAAE,CAAC,EAAG,CAAC,EAAI,KAAK,KAAKC,EAAIA,EAAE,CAAC,EAAI,GAAKD,EAAE,CAAC,EAAG,CAAC,CAAC,CAC1F,CAMA,SAASwd,GAASyB,EAAKhE,EAAM,CAC3B,GAAI,CAACA,EACH,OAAOgE,EAET,IAAIC,EAAc,EAAIjE,EACtB,OAAO,KAAK,MAAMgE,EAAMhE,CAAI,EAAIiE,CAClC,CAMA,SAASC,GAAcf,EAAMnD,EAAM,CACjC,OAAAmD,EAAK,QAAQ,SAAUgB,EAAG1I,EAAG,CAC3B0H,EAAK1H,CAAC,EAAI8G,GAASY,EAAK1H,CAAC,EAAGuE,CAAI,CAClC,CAAC,EACMmD,CACT,CAKA,SAAS,GAAQa,EAAK,CAEpB,QADIb,EAAO,CAAC,EACH1H,EAAI,EAAGA,EAAIuI,EAAK,EAAEvI,EACzB0H,EAAK,KAAK1H,CAAC,EAEb,OAAO0H,CACT,CAKA,SAASiB,GAAYve,EAAMwe,EAAUC,EAAQ,CAC3C,IAAIC,EAAS,GACb,OAAO1e,EAAK,QAAQwe,EAAU,UAAY,CAExC,QADIG,EAAO,CAAC,EACHC,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACtCD,EAAKC,CAAE,EAAI,UAAUA,CAAE,EAEzB,OAAIF,EACKC,EAAK,CAAC,GAEfD,EAAS,GACF,GAASD,CAAM,EAAIA,EAASA,EAAO,MAAM,OAAQE,CAAI,EAC9D,CAAC,CACH,CAKA,SAASE,GAAKjE,EAAK,CACjB,OAAOA,EAAI,OAAO,SAAUkE,EAAMC,EAAK,CACrC,OAAOD,EAAK,OAAOC,CAAG,CACxB,EAAG,CAAC,CAAC,CACP,CAKA,SAASC,GAASpE,EAAK,CACrB,OAAOA,EAAI,OAAO,SAAUkE,EAAMC,EAAK,CACrC,OAAI3H,GAAQ2H,CAAG,EACbD,EAAK,KAAK,MAAMA,EAAME,GAASD,CAAG,CAAC,EAEnCD,EAAK,KAAKC,CAAG,EAERD,CACT,EAAG,CAAC,CAAC,CACP,CAKA,SAAS,GAAQG,EAAUvS,EAAS,CAC9BuS,EAAS,QAAQvS,CAAO,IAAM,IAChCuS,EAAS,KAAKvS,CAAO,CAEzB,CAgBA,SAASwS,GAAOC,EAAK,CACnB,OAAOA,EAAI,QAAQ,IAAK,EAAE,CAC5B,CAcA,SAASC,GAAUD,EAAK,CACtB,IAAIE,EAAIH,GAAOC,CAAG,EACdG,EAAI,SAASD,EAAE,UAAU,EAAG,CAAC,EAAG,EAAE,EAClCE,EAAI,SAASF,EAAE,UAAU,EAAG,CAAC,EAAG,EAAE,EAClClgB,EAAI,SAASkgB,EAAE,UAAU,EAAG,CAAC,EAAG,EAAE,EAClC,EAAI,SAASA,EAAE,UAAU,EAAG,CAAC,EAAG,EAAE,EAAI,IAC1C,OAAI,MAAM,CAAC,IACT,EAAI,GAEC,CAACC,EAAGC,EAAGpgB,EAAG,CAAC,CACpB,CAYA,SAASqgB,GAAUH,EAAG,CACpB,IAAIC,EAAID,EAAE,OAAO,CAAC,EACdE,EAAIF,EAAE,OAAO,CAAC,EACdlgB,EAAIkgB,EAAE,OAAO,CAAC,EACdngB,EAAImgB,EAAE,OAAO,CAAC,EACdzE,EAAM,CAAC,IAAK0E,EAAGA,EAAGC,EAAGA,EAAGpgB,EAAGA,EAAGD,EAAGA,CAAC,EACtC,OAAO0b,EAAI,KAAK,EAAE,CACpB,CAYA,SAAS6E,GAAUC,EAAK,CACtB,IAAIrH,EACAgH,EAAIK,EAAI,CAAC,EACTlJ,EAAIkJ,EAAI,CAAC,EACTC,EAAID,EAAI,CAAC,EACTL,EAAI,IACNA,GAAK,KAAK,OAAO,KAAK,IAAIA,CAAC,EAAI,KAAO,GAAG,EAAI,KAE/CA,GAAK,IACL,IAAIlP,GAAK,EAAI,KAAK,IAAI,EAAIwP,EAAI,CAAC,GAAKnJ,EAChC5E,EAAIzB,GAAK,EAAI,KAAK,IAAIkP,EAAI,GAAK,EAAI,CAAC,GACpCO,EAAID,EAAIxP,EAAI,EACZ0P,EACJ,OAAIR,EAAI,GACNQ,EAAM,CAAC1P,EAAGyB,EAAG,CAAC,EACLyN,EAAI,IACbQ,EAAM,CAACjO,EAAGzB,EAAG,CAAC,EACLkP,EAAI,IACbQ,EAAM,CAAC,EAAG1P,EAAGyB,CAAC,EACLyN,EAAI,IACbQ,EAAM,CAAC,EAAGjO,EAAGzB,CAAC,EACLkP,EAAI,IACbQ,EAAM,CAACjO,EAAG,EAAGzB,CAAC,EACLkP,EAAI,IACbQ,EAAM,CAAC1P,EAAG,EAAGyB,CAAC,EAEdiO,EAAM,CAAC,EAAG,EAAG,CAAC,EAET,CAAC,KAAK,OAAOA,EAAI,CAAC,EAAID,GAAK,GAAG,EAAG,KAAK,OAAOC,EAAI,CAAC,EAAID,GAAK,GAAG,EAAG,KAAK,OAAOC,EAAI,CAAC,EAAID,GAAK,GAAG,GAAIvH,EAAKqH,EAAI,CAAC,KAAO,MAAQrH,IAAO,OAASA,EAAK,CAAC,CAC1J,CAaA,SAASyH,GAAa3R,EAAO,CAC3B,GAAIA,EAAM,OAAO,CAAC,IAAM,IACtB,OAAIA,EAAM,SAAW,GAAKA,EAAM,SAAW,EAClCiR,GAAUI,GAAUrR,CAAK,CAAC,EAE1BiR,GAAUjR,CAAK,EAEnB,GAAIA,EAAM,QAAQ,GAAG,IAAM,GAAI,CAEpC,IAAIkK,EAAK0B,GAAa5L,CAAK,EACzB+L,EAAS7B,EAAG,OACZna,EAAQma,EAAG,MACb,GAAI,CAAC6B,GAAU,CAAChc,EACd,OAEF,IAAI0c,EAAMd,GAAW5b,CAAK,EACtB6hB,EAAW,CAAC,EAAG,EAAG,EAAG,CAAC,EACtBpK,EAASiF,EAAI,OACjB,OAAQV,EAAQ,CACd,KAAKxF,GACL,KAAKC,GACH,QAASiB,EAAI,EAAGA,EAAID,EAAQ,EAAEC,EAC5BmK,EAASnK,CAAC,EAAI,WAAWgF,EAAIhF,CAAC,CAAC,EAEjC,OAAOmK,EACT,KAAKnL,GACL,KAAKC,GACH,QAASe,EAAI,EAAGA,EAAID,EAAQ,EAAEC,EACxBgF,EAAIhF,CAAC,EAAE,QAAQ,GAAG,IAAM,GAC1BmK,EAASnK,CAAC,EAAI,WAAWgF,EAAIhF,CAAC,CAAC,EAAI,IAEnCmK,EAASnK,CAAC,EAAI,WAAWgF,EAAIhF,CAAC,CAAC,EAInC,OAAO6J,GAAUM,CAAQ,CAC7B,CACF,CAEF,CAiBA,SAASC,GAAEC,EAAWC,EAAO,CAC3B,OAAK3K,GAGE2K,EAAQ3K,GAAI,iBAAiB0K,CAAS,EAAI1K,GAAI,cAAc0K,CAAS,EAFnEC,EAAQ,CAAC,EAAI,IAGxB,CAYA,SAASC,GAASzT,EAAS0T,EAAW,CACpC,OAAI1T,EAAQ,UACHA,EAAQ,UAAU,SAAS0T,CAAS,EAEtC,CAAC,CAAC1T,EAAQ,UAAU,MAAM,IAAI,OAAO,UAAY0T,EAAY,SAAS,CAAC,CAChF,CAWA,SAASC,GAAS3T,EAAS0T,EAAW,CAChC1T,EAAQ,UACVA,EAAQ,UAAU,IAAI0T,CAAS,EAE/B1T,EAAQ,WAAa,IAAM0T,CAE/B,CAWA,SAASE,GAAY5T,EAAS0T,EAAW,CACvC,GAAI1T,EAAQ,UACVA,EAAQ,UAAU,OAAO0T,CAAS,MAC7B,CACL,IAAIG,EAAM,IAAI,OAAO,UAAYH,EAAY,SAAS,EACtD1T,EAAQ,UAAYA,EAAQ,UAAU,QAAQ6T,EAAK,GAAG,CACxD,CACF,CAYA,SAASC,GAAQvB,EAAUwB,EAAY,CACrC,GAAI,CAACxB,GAAY,CAACwB,GAAc,CAACA,EAAW,OAC1C,MAAO,CAAC,EAEV,IAAI/T,EACJ,GAAIuS,aAAoB,QACtBvS,EAAUuS,UACDA,EAAS,OAClBvS,EAAUuS,EAAS,CAAC,MAEpB,OAAO,CAAC,EAKV,QAHIyB,EAAY,CAAC,EACbrd,EAASsd,GAAUjU,CAAO,EAAE,iBAAiBA,CAAO,EACpDiJ,EAAS8K,EAAW,OACf7K,EAAI,EAAGA,EAAID,EAAQ,EAAEC,EAC5B8K,EAAUD,EAAW7K,CAAC,CAAC,EAAIvS,EAAOod,EAAW7K,CAAC,CAAC,EAEjD,OAAO8K,CACT,CAeA,SAASE,GAASC,EAAIC,EAAMC,EAAUjd,EAAS,CAC7C+c,EAAG,iBAAiBC,EAAMC,EAAUjd,CAAO,CAC7C,CAgBA,SAASkd,GAAYH,EAAIC,EAAMC,EAAUjd,EAAS,CAChD+c,EAAG,oBAAoBC,EAAMC,EAAUjd,CAAO,CAChD,CACA,SAASmd,GAAYJ,EAAI,CACvB,OAAgDA,GAAG,eAAkBtL,EACvE,CACA,SAAS2L,GAAmBL,EAAI,CAC9B,OAAOI,GAAYJ,CAAE,EAAE,eACzB,CACA,SAASM,GAAgBN,EAAI,CAC3B,OAAOI,GAAYJ,CAAE,EAAE,IACzB,CACA,SAASF,GAAUE,EAAI,CACrB,IAAIxI,EACJ,QAASA,EAA6CwI,GAAG,iBAAmB,MAAQxI,IAAO,OAAS,OAASA,EAAG,cAAgB,MAClI,CACA,SAAS+I,GAASC,EAAK,CACrB,OAAOA,GAAO,gBAAiBA,GAAO,SAAUA,GAAO,SAAUA,CACnE,CACA,SAASC,GAAOT,EAAI,CAClB,OAAO1J,GAAS0J,CAAE,GAAKA,EAAG,UAAYA,EAAG,UAAY,kBAAmBA,CAC1E,CCh4CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gFAcA,IAAIU,GAAW,UAAY,CACzB,OAAAA,GAAW,OAAO,QAAU,SAAkBC,EAAG,CAC/C,QAAShL,EAAGZ,EAAI,EAAG6L,EAAI,UAAU,OAAQ7L,EAAI6L,EAAG7L,IAAK,CACnDY,EAAI,UAAUZ,CAAC,EAEf,QAAS8L,KAAKlL,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGkL,CAAC,IAAGF,EAAEE,CAAC,EAAIlL,EAAEkL,CAAC,EAC7E,CAEA,OAAOF,CACT,EAEOD,GAAS,MAAM,KAAM,SAAS,CACvC,EACA,SAAS,IAAiB,CACxB,QAAS/K,EAAI,EAAGZ,EAAI,EAAGa,EAAK,UAAU,OAAQb,EAAIa,EAAIb,IAAKY,GAAK,UAAUZ,CAAC,EAAE,OAE7E,QAAS,EAAI,MAAMY,CAAC,EAAGE,EAAI,EAAGd,EAAI,EAAGA,EAAIa,EAAIb,IAAK,QAAS,EAAI,UAAUA,CAAC,EAAGe,EAAI,EAAGC,EAAK,EAAE,OAAQD,EAAIC,EAAID,IAAKD,IAAK,EAAEA,CAAC,EAAI,EAAEC,CAAC,EAE/H,OAAO,CACT,CAMA,IAAIgL,GAEJ,UAAY,CACV,SAASA,GAAe,CACtB,KAAK,QAAU,CAAC,CAClB,CAoBA,IAAIC,EAAUD,EAAa,UAE3B,OAAAC,EAAQ,GAAK,SAAUC,EAAWd,EAAU,CAC1C,GAAI5J,GAAS0K,CAAS,EACpB,QAASthB,KAAQshB,EACf,KAAK,GAAGthB,EAAMshB,EAAUthB,CAAI,CAAC,OAG/B,KAAK,UAAUshB,EAAWd,EAAU,CAAC,CAAC,EAGxC,OAAO,IACT,EAqBAa,EAAQ,IAAM,SAAUC,EAAWd,EAAU,CAC3C,GAAI,CAACc,EACH,KAAK,QAAU,CAAC,UACP1K,GAAS0K,CAAS,EAC3B,QAASthB,KAAQshB,EACf,KAAK,IAAIthB,CAAI,UAEN,CAACwgB,EACV,KAAK,QAAQc,CAAS,EAAI,CAAC,MACtB,CACL,IAAIC,EAAS,KAAK,QAAQD,CAAS,EAEnC,GAAIC,EAAQ,CACV,IAAI1R,EAAQuK,GAAUmH,EAAQ,SAAU7iB,EAAG,CACzC,OAAOA,EAAE,WAAa8hB,CACxB,CAAC,EAEG3Q,EAAQ,IACV0R,EAAO,OAAO1R,EAAO,CAAC,CAE1B,CACF,CAEA,OAAO,IACT,EAmBAwR,EAAQ,KAAO,SAAUC,EAAWd,EAAU,CAC5C,IAAIgB,EAAQ,KAEZ,OAAIhB,GACF,KAAK,UAAUc,EAAWd,EAAU,CAClC,KAAM,EACR,CAAC,EAGI,IAAI,QAAQ,SAAUiB,EAAS,CACpCD,EAAM,UAAUF,EAAWG,EAAS,CAClC,KAAM,EACR,CAAC,CACH,CAAC,CACH,EAuBAJ,EAAQ,KAAO,SAAUC,EAAW/iB,EAAO,CACzC,IAAIijB,EAAQ,KAERjjB,IAAU,SACZA,EAAQ,CAAC,GAGX,IAAIgjB,EAAS,KAAK,QAAQD,CAAS,EAEnC,GAAI,CAACA,GAAa,CAACC,EACjB,MAAO,GAGT,IAAIG,EAAS,GACb,OAAAnjB,EAAM,UAAY+iB,EAElB/iB,EAAM,KAAO,UAAY,CACvBmjB,EAAS,EACX,EAEAnjB,EAAM,cAAgB,KAEtB,GAAegjB,CAAM,EAAE,QAAQ,SAAUpR,EAAM,CAC7CA,EAAK,SAAS5R,CAAK,EAEf4R,EAAK,MACPqR,EAAM,IAAIF,EAAWnR,EAAK,QAAQ,CAEtC,CAAC,EAEM,CAACuR,CACV,EA4CAL,EAAQ,QAAU,SAAUC,EAAW/iB,EAAO,CAC5C,OAAIA,IAAU,SACZA,EAAQ,CAAC,GAGJ,KAAK,KAAK+iB,EAAW/iB,CAAK,CACnC,EAEA8iB,EAAQ,UAAY,SAAUC,EAAWd,EAAUjd,EAAS,CAC1D,IAAIge,EAAS,KAAK,QAClBA,EAAOD,CAAS,EAAIC,EAAOD,CAAS,GAAK,CAAC,EAC1C,IAAIK,EAAYJ,EAAOD,CAAS,EAChCK,EAAU,KAAKX,GAAS,CACtB,SAAUR,CACZ,EAAGjd,CAAO,CAAC,CACb,EAEO6d,CACT,EAAE,EAEF,SAAeA,GC/Qf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gFAgBA,IAAIQ,GAAgB,SAASC,EAAGjjB,EAAG,CAC/B,OAAAgjB,GAAgB,OAAO,gBAClB,CAAE,UAAW,CAAC,CAAE,YAAa,OAAS,SAAUC,EAAGjjB,EAAG,CAAEijB,EAAE,UAAYjjB,CAAG,GAC1E,SAAUijB,EAAGjjB,EAAG,CAAE,QAASuiB,KAAKviB,EAAOA,EAAE,eAAeuiB,CAAC,IAAGU,EAAEV,CAAC,EAAIviB,EAAEuiB,CAAC,EAAG,EACtES,GAAcC,EAAGjjB,CAAC,CAC7B,EAEA,SAASkjB,GAAUD,EAAGjjB,EAAG,CACrBgjB,GAAcC,EAAGjjB,CAAC,EAClB,SAASmjB,GAAK,CAAE,KAAK,YAAcF,CAAG,CACtCA,EAAE,UAAYjjB,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAKmjB,EAAG,UAAYnjB,EAAE,UAAW,IAAImjB,EACnF,CAEA,IAAI,GAAW,UAAW,CACtB,UAAW,OAAO,QAAU,SAAkBd,EAAG,CAC7C,QAAShL,EAAGZ,EAAI,EAAG6L,EAAI,UAAU,OAAQ7L,EAAI6L,EAAG7L,IAAK,CACjDY,EAAI,UAAUZ,CAAC,EACf,QAAS8L,KAAKlL,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGkL,CAAC,IAAGF,EAAEE,CAAC,EAAIlL,EAAEkL,CAAC,EAC/E,CACA,OAAOF,CACX,EACO,GAAS,MAAM,KAAM,SAAS,CACzC,EAEA,SAAS,GAAO/D,EAAMC,EAAM,CACxB,IAAIC,EAAQD,EAAK,CAAC,EAAID,EAAK,CAAC,EACxBG,EAAQF,EAAK,CAAC,EAAID,EAAK,CAAC,EACxBnL,EAAM,KAAK,MAAMsL,EAAOD,CAAK,EACjC,OAAOrL,GAAO,EAAIA,EAAMA,EAAM,KAAK,GAAK,CAC5C,CACA,SAASiQ,GAAaC,EAAS,CAC3B,OAAO,GAAO,CACVA,EAAQ,CAAC,EAAE,QACXA,EAAQ,CAAC,EAAE,OACf,EAAG,CACCA,EAAQ,CAAC,EAAE,QACXA,EAAQ,CAAC,EAAE,OACf,CAAC,EAAI,KAAK,GAAK,GACnB,CACA,SAASC,GAAaxjB,EAAG,CACrB,OAAOA,EAAE,SAAWA,EAAE,QAAQ,QAAU,CAC5C,CACA,SAASyjB,GAAgBzjB,EAAG,CACxB,OAAKA,EAGDA,EAAE,QACK0jB,GAAW1jB,EAAE,OAAO,EAGpB,CAAC2jB,GAAU3jB,CAAC,CAAC,EANb,CAAC,CAQhB,CACA,SAAS4jB,GAAa5jB,EAAG,CACrB,OAAOA,IAAMA,EAAE,KAAK,QAAQ,OAAO,EAAI,IAAM,WAAYA,EAC7D,CACA,SAAS6jB,GAAYC,EAASC,EAAaC,EAAc,CACrD,IAAItN,EAASsN,EAAa,OACtB5K,EAAK6K,GAAiBH,EAASpN,CAAM,EAAGwN,EAAU9K,EAAG,QAAS+K,EAAU/K,EAAG,QAASgL,EAAkBhL,EAAG,gBAAiBiL,EAAkBjL,EAAG,gBAC/IM,EAAKuK,GAAiBF,EAAarN,CAAM,EAAG4N,EAAQ5K,EAAG,QAAS6K,EAAQ7K,EAAG,QAC3EG,EAAKoK,GAAiBD,EAActN,CAAM,EAAG8N,EAAS3K,EAAG,QAAS4K,EAAS5K,EAAG,QAC9EzO,EAAS8Y,EAAUI,EACnBjZ,EAAS8Y,EAAUI,EACnB7F,EAAQwF,EAAUM,EAClB7F,EAAQwF,EAAUM,EACtB,MAAO,CACH,QAASL,EACT,QAASC,EACT,OAAQjZ,EACR,OAAQC,EACR,MAAOqT,EACP,MAAOC,CACX,CACJ,CACA,SAAS,GAAQmF,EAAS,CACtB,OAAO,KAAK,KAAK,KAAK,IAAIA,EAAQ,CAAC,EAAE,QAAUA,EAAQ,CAAC,EAAE,QAAS,CAAC,EAC9D,KAAK,IAAIA,EAAQ,CAAC,EAAE,QAAUA,EAAQ,CAAC,EAAE,QAAS,CAAC,CAAC,CAC9D,CACA,SAASJ,GAAWH,EAAS,CAGzB,QAFI7M,EAAS,KAAK,IAAI6M,EAAQ,OAAQ,CAAC,EACnCO,EAAU,CAAC,EACNnN,EAAI,EAAGA,EAAID,EAAQ,EAAEC,EAC1BmN,EAAQ,KAAKH,GAAUJ,EAAQ5M,CAAC,CAAC,CAAC,EAEtC,OAAOmN,CACX,CACA,SAASH,GAAU3jB,EAAG,CAClB,MAAO,CACH,QAASA,EAAE,QACX,QAASA,EAAE,OACf,CACJ,CACA,SAASikB,GAAiBH,EAASpN,EAAQ,CACnCA,IAAW,SAAUA,EAASoN,EAAQ,QAQ1C,QAPIY,EAAY,CACZ,QAAS,EACT,QAAS,EACT,gBAAiB,EACjB,gBAAiB,CACrB,EACIC,EAAY,KAAK,IAAIb,EAAQ,OAAQpN,CAAM,EACtC,EAAI,EAAG,EAAIiO,EAAW,EAAE,EAAG,CAChC,IAAIC,EAASd,EAAQ,CAAC,EACtBY,EAAU,iBAAmB,oBAAqBE,EAASA,EAAO,gBAAkBA,EAAO,QAC3FF,EAAU,iBAAmB,oBAAqBE,EAASA,EAAO,gBAAkBA,EAAO,QAC3FF,EAAU,SAAWE,EAAO,QAC5BF,EAAU,SAAWE,EAAO,OAChC,CACA,OAAKlO,EAGE,CACH,QAASgO,EAAU,QAAUhO,EAC7B,QAASgO,EAAU,QAAUhO,EAC7B,gBAAiBgO,EAAU,gBAAkBhO,EAC7C,gBAAiBgO,EAAU,gBAAkBhO,CACjD,EAPWgO,CAQf,CAEA,IAAIG,GAA6B,UAAY,CACzC,SAASA,EAAYf,EAAS,CAC1B,KAAK,YAAc,CAAC,EACpB,KAAK,aAAe,CAAC,EACrB,KAAK,SAAW,EAChB,KAAK,OAAS,EACd,KAAK,aAAeA,EACpB,KAAK,YAAcA,EACnB,KAAK,OAASA,EAAQ,MAC1B,CACA,OAAAe,EAAY,UAAU,SAAW,SAAUf,EAAS,CAChD,OAAIA,IAAY,SAAUA,EAAU,KAAK,aAClCR,GAAaQ,CAAO,CAC/B,EACAe,EAAY,UAAU,YAAc,SAAUf,EAAS,CACnD,OAAIA,IAAY,SAAUA,EAAU,KAAK,aAClCR,GAAaQ,CAAO,EAAIR,GAAa,KAAK,YAAY,CACjE,EACAuB,EAAY,UAAU,YAAc,SAAUf,EAASgB,EAAO,CACtDhB,IAAY,SAAUA,EAAU,KAAK,aACzC,IAAIiB,EAAWlB,GAAYC,GAAW,KAAK,YAAa,KAAK,YAAa,KAAK,YAAY,EACvF1Y,EAAS2Z,EAAS,OAAQ1Z,EAAS0Z,EAAS,OAChD,YAAK,UAAY,KAAK,KAAK3Z,EAASA,EAASC,EAASA,CAAM,EAC5D,KAAK,YAAcyY,EACZiB,CACX,EACAF,EAAY,UAAU,aAAe,SAAUf,EAAS,CAChDA,IAAY,SAAUA,EAAU,KAAK,aAKzC,QAJIC,EAAc,KAAK,YACnBC,EAAe,KAAK,aACpBW,EAAY,KAAK,IAAI,KAAK,OAAQZ,EAAY,MAAM,EACpDiB,EAAY,CAAC,EACRrO,EAAI,EAAGA,EAAIgO,EAAW,EAAEhO,EAC7BqO,EAAUrO,CAAC,EAAIkN,GAAY,CAACC,EAAQnN,CAAC,CAAC,EAAG,CAACoN,EAAYpN,CAAC,CAAC,EAAG,CAACqN,EAAarN,CAAC,CAAC,CAAC,EAEhF,OAAOqO,CACX,EACAH,EAAY,UAAU,YAAc,SAAUf,EAAS,CACnD,IAAImB,EAAW,KAAK,SACpB,GAAI,CAACnB,EACD,OAAOmB,EAEX,IAAIC,EAAgBjB,GAAiBH,EAAS,KAAK,MAAM,EACrDqB,EAAalB,GAAiB,KAAK,YAAa,KAAK,MAAM,EAC3D7Y,EAAS8Z,EAAc,QAAUC,EAAW,QAC5C9Z,EAAS6Z,EAAc,QAAUC,EAAW,QAChD,OAAO,KAAK,KAAK/Z,EAASA,EAASC,EAASA,CAAM,EAAI4Z,CAC1D,EACAJ,EAAY,UAAU,YAAc,SAAUf,EAAS,CACnD,OAAIA,IAAY,SAAUA,EAAU,KAAK,aAClC,GAAQA,CAAO,CAC1B,EACAe,EAAY,UAAU,SAAW,SAAUf,EAAS,CAChD,OAAIA,IAAY,SAAUA,EAAU,KAAK,aAClC,GAAQA,CAAO,EAAI,GAAQ,KAAK,YAAY,CACvD,EACAe,EAAY,UAAU,KAAO,SAAUzZ,EAAQC,EAAQ,CACnD,KAAK,aAAa,QAAQ,SAAUuZ,EAAQ,CACxCA,EAAO,SAAWxZ,EAClBwZ,EAAO,SAAWvZ,CACtB,CAAC,EACD,KAAK,YAAY,QAAQ,SAAUuZ,EAAQ,CACvCA,EAAO,SAAWxZ,EAClBwZ,EAAO,SAAWvZ,CACtB,CAAC,CACL,EACOwZ,CACX,EAAE,EAEEO,GAAiB,CAAC,WAAY,OAAO,EAIrCC,GAAuB,SAAUC,EAAQ,CACzClC,GAAUiC,EAAOC,CAAM,EAIvB,SAASD,EAAME,EAAS1gB,EAAS,CACzBA,IAAY,SAAUA,EAAU,CAAC,GACrC,IAAIie,EAAQwC,EAAO,KAAK,IAAI,GAAK,KACjCxC,EAAM,QAAU,CAAC,EACjBA,EAAM,KAAO,GACbA,EAAM,UAAY,GAClBA,EAAM,KAAO,CAAC,EACdA,EAAM,OAAS,GACfA,EAAM,QAAU,GAChBA,EAAM,aAAe,CAAC,EACtBA,EAAM,QAAU,CAAC,EACjBA,EAAM,SAAW,EACjBA,EAAM,WAAa,GACnBA,EAAM,UAAY,GAClBA,EAAM,UAAY,GAClBA,EAAM,SAAW,GACjBA,EAAM,UAAY,GAClBA,EAAM,WAAa,GACnBA,EAAM,cAAgB,GACtBA,EAAM,mBAAqB,GAC3BA,EAAM,mBAAqB,GAC3BA,EAAM,gBAAkB,KACxBA,EAAM,WAAa,GACnBA,EAAM,QAAU,GAChBA,EAAM,qBAAuB,EAC7BA,EAAM,QAAU,OAChBA,EAAM,YAAc,SAAU9iB,EAAGwlB,EAAW,CAExC,GADIA,IAAc,SAAUA,EAAY,IACpC,GAAC1C,EAAM,MAAQ9iB,EAAE,aAAe,IAGpC,KAAIylB,EAAYzlB,EAAE,KAAK,QAAQ,MAAM,GAAK,GAC1C,GAAI,EAAA8iB,EAAM,MAAQ2C,GAGlB,CAAA3C,EAAM,WAAa,GACnB,IAAI1J,EAAK0J,EAAM,QAAS4C,EAAYtM,EAAG,UAAWuM,EAAevM,EAAG,aAAcwM,EAAoBxM,EAAG,kBAAmByM,EAAoBzM,EAAG,kBAAmB0M,EAAiB1M,EAAG,eAAgB2M,EAAa3M,EAAG,WAAY4M,EAAmB5M,EAAG,iBAAkB6M,EAA+B7M,EAAG,6BAA8B8M,EAA0B9M,EAAG,wBAAyB+M,EAA+B/M,EAAG,6BAClagN,EAAWtD,EAAM,UACjBuD,EAAc,CAACvD,EAAM,KAEzB,GADAA,EAAM,mBAAqB9iB,EAAE,QAAU,GAAKA,EAAE,SAAW,EACpD4lB,IAAsB5lB,EAAE,QAAU,GAAKA,EAAE,SAAW,IACjD6lB,IAAsB7lB,EAAE,QAAU,GAAKA,EAAE,SAAW,GACxD,OAAA8iB,EAAM,KAAK,EACJ,GAEX,GAAIuD,EAAa,CACb,IAAIC,EAAgBxD,EAAM,QAAQ,SAAS,cACvCnY,EAAS3K,EAAE,OACf,GAAI2K,EAAQ,CACR,IAAI4b,EAAU5b,EAAO,QAAQ,YAAY,EACrC6b,EAAWpB,GAAe,QAAQmB,CAAO,EAAI,GAC7CE,EAAqB9b,EAAO,kBAChC,GAAI6b,GAAYC,EAAoB,CAChC,GAAIV,GAAe,CAACC,GAAoBM,IAAkB3b,EAEtD,MAAO,GAGX,GAAI2b,IAAkBA,IAAkB3b,GAChC8b,GAAsBH,EAAc,mBAAqBA,EAAc,SAAS3b,CAAM,GAC1F,GAAIqb,EACArb,EAAO,KAAK,MAGZ,OAAO,EAGnB,UACUmb,GAAkB9lB,EAAE,OAAS,eAAiBsmB,EAAe,CACnE,IAAII,EAAgBJ,EAAc,QAAQ,YAAY,GAClDA,EAAc,mBAAqBlB,GAAe,QAAQsB,CAAa,EAAI,KAC3EJ,EAAc,KAAK,CAE3B,EACIL,GAAgCC,GAA2BC,IAC3DxE,GAASmB,EAAM,QAAS,QAASA,EAAM,SAAU,EAAI,CAE7D,CACAA,EAAM,aAAe,CAAC,IAAI+B,GAAYpB,GAAgBzjB,CAAC,CAAC,CAAC,EACzD8iB,EAAM,QAAU,GAChBA,EAAM,KAAO,GACbA,EAAM,OAAS,GACfA,EAAM,WAAa0C,EACnB1C,EAAM,UAAY,GAClBA,EAAM,gBAAkB9iB,EACxB8iB,EAAM,KAAO,CAAC,EACdA,EAAM,WAAarH,GAAI,EAAIqH,EAAM,SAAW,IAC5CA,EAAM,cAAgBc,GAAa5jB,CAAC,EAChC,CAAC8iB,EAAM,eAAiBA,EAAM,oBAC9BA,EAAM,iBAAiB,EAE3B,IAAI6D,EAAS7D,EAAM,oBAAsBA,EAAM,KAAK,YAAa,GAAS,GAAS,CAAE,KAAMA,EAAM,KAAM,MAAOA,EAAM,KAAM,WAAY9iB,EAAG,aAAc8iB,EAAM,cAAe,kBAAmBA,EAAM,mBAAoB,UAAW0C,EAAW,SAAU1C,EAAM,UAAW,EAAGA,EAAM,gBAAgB,EAAE,YAAY,CAAC,EAAG,CAAE,eAAgB,UAAY,CAC3U9iB,EAAE,eAAe,CACrB,EAAG,YAAa,UAAY,CACxB8iB,EAAM,UAAY,EACtB,CAAE,CAAC,CAAC,EACJ6D,IAAW,IACX7D,EAAM,KAAK,EAEXA,EAAM,eAAiBA,EAAM,MAAQgD,GACrC9lB,EAAE,eAAe,CAEzB,CACA,GAAI,CAAC8iB,EAAM,KACP,MAAO,GAEX,IAAI8D,EAAQ,EAgBZ,GAfIP,GACAvD,EAAM,gBAAgB,EAElBsD,GAAYT,IACZiB,EAAQ,WAAW,UAAY,CAC3BjF,GAAS+D,EAAW,aAAc5C,EAAM,YAAa,CACjD,QAAS,EACb,CAAC,CACL,CAAC,IAGAsD,GAAYT,GAEjB5D,GAAY2D,EAAW,aAAc5C,EAAM,WAAW,EAEtDA,EAAM,MAAQU,GAAaxjB,CAAC,EAAG,CAE/B,GADA,aAAa4mB,CAAK,EACdP,GAAgBrmB,EAAE,QAAQ,SAAWA,EAAE,eAAe,OACtD,OAEC8iB,EAAM,WACPA,EAAM,aAAa9iB,CAAC,CAE5B,GACJ,EACA8iB,EAAM,OAAS,SAAU9iB,EAAG6mB,EAAU,CAClC,GAAK/D,EAAM,KAGX,KAAIgD,EAAiBhD,EAAM,QAAQ,eAC/B,CAACA,EAAM,eAAiBgD,GACxB9lB,EAAE,eAAe,EAErB8iB,EAAM,gBAAkB9iB,EACxB,IAAI8jB,EAAUL,GAAgBzjB,CAAC,EAC3B2mB,EAAS7D,EAAM,YAAYgB,EAAS9jB,EAAG,EAAK,EAChD,GAAI8iB,EAAM,UAAW,CACjB,GAAIA,EAAM,WAAa6D,EAAO,QAAUA,EAAO,OAAQ,CACnD,IAAIG,EAAahE,EAAM,oBAAsBA,EAAM,KAAK,OAAQ,GAAS,GAAS,CAAC,EAAG6D,CAAM,EAAG,CAAE,SAAU,CAAC,CAACE,EAAU,WAAY7mB,CAAE,CAAC,CAAC,EACvI,GAAI8mB,IAAe,GAAO,CACtBhE,EAAM,KAAK,EACX,MACJ,CACJ,CACIA,EAAM,WACNA,EAAM,QAAQ9iB,EAAG8jB,CAAO,CAEhC,CACAhB,EAAM,gBAAgB,EAAE,YAAYgB,EAAS,EAAI,EACrD,EACAhB,EAAM,UAAY,SAAU9iB,EAAG,CAC3B,GAAK8iB,EAAM,KAGX,KAAI1J,EAAK0J,EAAM,QAAS6C,EAAevM,EAAG,aAAcsM,EAAYtM,EAAG,UAAW8M,EAA0B9M,EAAG,wBAAyB6M,EAA+B7M,EAAG,6BAA8B+M,EAA+B/M,EAAG,6BACtO2N,EAASjE,EAAM,QACfoD,GAA2BD,GAAgCE,IAC3D,sBAAsB,UAAY,CAC9BrD,EAAM,iBAAiB,CAC3B,CAAC,EAED,CAACqD,GAAgC,CAACF,GAAgCC,GAA2B,CAACa,GAC9FjE,EAAM,iBAAiB,EAEvBA,EAAM,WAAa6C,GACnB5D,GAAY2D,EAAW,aAAc5C,EAAM,WAAW,EAEtDA,EAAM,WACNA,EAAM,WAAW9iB,CAAC,EAEtB,IAAI8jB,EAAiD9jB,GAAE,QAAWyjB,GAAgBzjB,CAAC,EAAI,CAAC,EACpFgnB,EAAgBlD,EAAQ,OACxBkD,IAAkB,GAAK,CAAClE,EAAM,QAAQ,aACtCA,EAAM,KAAO,GAGbA,EAAM,UAAU,IAAI+B,GAAYf,CAAO,CAAC,EAE5C,IAAIiB,EAAWjC,EAAM,aAAa,EAC9BmE,EAAcxL,GAAI,EAClByL,EAAW,CAACH,GAAUjE,EAAM,WAChCA,EAAM,gBAAkB,KACxBA,EAAM,SAAWiE,GAAUG,EAAW,EAAID,EACrCnE,EAAM,OACPA,EAAM,kBAAkB,EACxBA,EAAM,oBAAsBA,EAAM,KAAK,UAAW,GAAS,CAAE,KAAMA,EAAM,KAAM,MAAOA,EAAM,KAAM,SAAUoE,EAAU,OAAQH,EAAQ,QAAS,CAACA,EAAQ,aAAcjE,EAAM,cAAe,kBAAmBA,EAAM,mBAAoB,WAAY9iB,EAAG,UAAW8iB,EAAM,UAAW,EAAGiC,CAAQ,CAAC,EAC/RjC,EAAM,aAAe,CAAC,EACjBA,EAAM,gBACPA,EAAM,mBAAqB,GAE3B,aAAaA,EAAM,oBAAoB,EACvCA,EAAM,qBAAuB,WAAW,UAAY,CAChDA,EAAM,mBAAqB,EAC/B,EAAG,GAAG,GAEVA,EAAM,QAAU,IAExB,EACAA,EAAM,OAAS,UAAY,CACvBA,EAAM,UAAU,CACpB,EACAA,EAAM,iBAAmB,UAAY,CACjCf,GAAYe,EAAM,QAAS,QAASA,EAAM,SAAU,EAAI,CAC5D,EACAA,EAAM,SAAW,SAAU9iB,EAAG,CAC1B8iB,EAAM,iBAAiB,EACvBA,EAAM,iBAAiB,EACvB,IAAIqD,EAA+BrD,EAAM,QAAQ,6BAC+CqD,IAA6BnmB,CAAC,IAG9HA,EAAE,gBAAgB,EAClBA,EAAE,eAAe,EACrB,EACA8iB,EAAM,eAAiB,SAAU9iB,EAAG,CAChC,IAAI6E,EAAUie,EAAM,QACfje,EAAQ,kBAITie,EAAM,UAAU9iB,CAAC,EAHjBA,EAAE,eAAe,CAKzB,EACA8iB,EAAM,cAAgB,UAAY,CAAE,EACpC,IAAI9C,EAAW,CAAC,EAAE,OAAOuF,CAAO,EAC5B4B,EAAcnH,EAAS,CAAC,EAC5B8C,EAAM,QAAUX,GAASgF,CAAW,EAAIA,EAAczF,GAAUyF,CAAW,EAC3ErE,EAAM,QAAU,GAAS,CAAE,WAAY,GAAO,UAAWqE,GAAe,EAAE,aAAcA,GAAezF,GAAUyF,CAAW,EAAIA,EAAa,kBAAmB,GAAM,kBAAmB,GAAM,6BAA8B,GAAO,wBAAyB,GAAO,6BAA8B,KAAM,eAAgB,GAAM,gBAAiB,GAAO,aAAc,GAAO,eAAgB,EAAG,OAAQ,CAAC,QAAS,OAAO,CAAE,EAAGtiB,CAAO,EACna,IAAIuU,EAAK0J,EAAM,QAAS4C,EAAYtM,EAAG,UAAWyJ,EAASzJ,EAAG,OAAQgO,EAAkBhO,EAAG,gBAoB3F,GAnBA0J,EAAM,SAAWD,EAAO,QAAQ,MAAM,EAAI,GAC1CC,EAAM,UAAYD,EAAO,QAAQ,OAAO,EAAI,GAC5CC,EAAM,UAAYD,EAAO,QAAQ,OAAO,EAAI,GAC5CC,EAAM,QAAU9C,EACZ8C,EAAM,UACN9C,EAAS,QAAQ,SAAU4B,EAAI,CAC3BD,GAASC,EAAI,YAAakB,EAAM,WAAW,CAC/C,CAAC,EAEDA,EAAM,YACN9C,EAAS,QAAQ,SAAU4B,EAAI,CAC3BD,GAASC,EAAI,YAAakB,EAAM,WAAW,EAC3CnB,GAASC,EAAI,YAAakB,EAAM,aAAa,CACjD,CAAC,EACDnB,GAAS+D,EAAW,cAAe5C,EAAM,cAAc,GAEvDsE,GACAzF,GAASD,GAAU,EAAG,OAAQoB,EAAM,MAAM,EAE1CA,EAAM,UAAW,CACjB,IAAIuE,EAAY,CACZ,QAAS,EACb,EACArH,EAAS,QAAQ,SAAU4B,EAAI,CAC3BD,GAASC,EAAI,aAAckB,EAAM,YAAauE,CAAS,EACvD1F,GAASC,EAAI,YAAakB,EAAM,cAAeuE,CAAS,CAC5D,CAAC,CACL,CACA,OAAOvE,CACX,CAIA,OAAAuC,EAAM,UAAU,KAAO,UAAY,CAC/B,KAAK,OAAS,GACd,KAAK,KAAO,CAAC,EACb,KAAK,aAAe,CAAC,EACrB,KAAK,UAAY,GACjB,KAAK,WAAa,GAClB,KAAK,SAAW,EAChB,KAAK,KAAO,GACZ,KAAK,QAAU,GACf,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,WAAa,EACtB,EAIAA,EAAM,UAAU,YAAc,SAAUvB,EAAS,CAC7C,OAAO,KAAK,gBAAgB,EAAE,YAAYA,CAAO,EAAI,KAAK,aAAa,MAAM,CAAC,EAAE,OAAO,SAAUjE,EAAMC,EAAK,CACxG,OAAOD,EAAOC,EAAI,QACtB,EAAG,CAAC,CACR,EAIAuF,EAAM,UAAU,WAAa,UAAY,CACrC,OAAO,KAAK,MAChB,EAIAA,EAAM,UAAU,OAAS,UAAY,CACjC,OAAO,KAAK,OAChB,EAIAA,EAAM,UAAU,OAAS,UAAY,CACjC,OAAO,KAAK,IAChB,EAIAA,EAAM,UAAU,YAAc,UAAY,CACtC,OAAO,KAAK,SAChB,EAIAA,EAAM,UAAU,aAAe,UAAY,CACvC,OAAO,KAAK,UAChB,EAIAA,EAAM,UAAU,WAAa,UAAY,CACrC,OAAO,KAAK,OAChB,EAIAA,EAAM,UAAU,SAAW,SAAUja,EAAQC,EAAQrL,EAAGsnB,EAAY,CAC5DA,IAAe,SAAUA,EAAa,IACrC,KAAK,OAGV,KAAK,aAAa,CAAC,EAAE,KAAKlc,EAAQC,CAAM,EACxCic,GAAc,KAAK,OAAOtnB,EAAG,EAAI,EACrC,EAIAqlB,EAAM,UAAU,KAAO,SAAUjM,EAAImO,EAAY,CAC7C,IAAInc,EAASgO,EAAG,CAAC,EAAG/N,EAAS+N,EAAG,CAAC,EAC7BoO,EAAQ,KAAK,gBAAgB,EAC7BC,EAAcD,EAAM,YACxB,OAAO,KAAK,YAAYC,EAAY,IAAI,SAAUrO,EAAI,CAClD,IAAI8K,EAAU9K,EAAG,QAAS+K,EAAU/K,EAAG,QACvC,MAAO,CACH,QAAS8K,EAAU9Y,EACnB,QAAS+Y,EAAU9Y,EACnB,gBAAiB6Y,EACjB,gBAAiBC,CACrB,CACJ,CAAC,EAAGoD,EAAY,EAAI,CACxB,EAIAlC,EAAM,UAAU,iBAAmB,SAAUrlB,EAAG,CAC5C,KAAK,YAAYA,EAAG,EAAK,CAC7B,EAIAqlB,EAAM,UAAU,aAAe,SAAU9jB,EAAM,CAC3C,IAAImmB,EAAc,KAAK,KACvB,QAASC,KAAUpmB,EACfmmB,EAAYC,CAAM,EAAIpmB,EAAKomB,CAAM,EAErC,OAAO,IACX,EAMAtC,EAAM,UAAU,cAAgB,SAAU9jB,EAAM,CAC5C,OAAO,KAAK,aAAaA,CAAI,CACjC,EAIA8jB,EAAM,UAAU,gBAAkB,SAAUkC,EAAY,CACpD,OAAIA,IAAe,SAAUA,EAAa,KAAK,iBACxC,GAAS,GAAS,CAAE,KAAM,KAAK,KAAM,MAAO,KAAK,IAAK,EAAG,KAAK,aAAa,CAAC,EAAG,CAAE,SAAU,KAAK,YAAY,EAAG,OAAQ,KAAK,OAAQ,QAAS,KAAK,QAAS,SAAU,GAAO,WAAYA,CAAW,CAAC,CAC/M,EAIAlC,EAAM,UAAU,aAAe,UAAY,CACvC,OAAO,KAAK,IAChB,EAMAA,EAAM,UAAU,cAAgB,UAAY,CACxC,OAAO,KAAK,IAChB,EAIAA,EAAM,UAAU,MAAQ,UAAY,CAChC,IAAIvC,EAAQ,KACRyC,EAAU,KAAK,QACfG,EAAY,KAAK,QAAQ,UAC7B,KAAK,IAAI,EACT3D,GAAY,KAAK,QAAS,OAAQ,KAAK,MAAM,EACzC,KAAK,UACLwD,EAAQ,QAAQ,SAAU3D,EAAI,CAC1BG,GAAYH,EAAI,YAAakB,EAAM,WAAW,CAClD,CAAC,EAED,KAAK,YACLyC,EAAQ,QAAQ,SAAU5a,EAAQ,CAC9BoX,GAAYpX,EAAQ,YAAamY,EAAM,WAAW,CACtD,CAAC,EACDf,GAAY2D,EAAW,cAAe,KAAK,cAAc,GAEzD,KAAK,YACLH,EAAQ,QAAQ,SAAU5a,EAAQ,CAC9BoX,GAAYpX,EAAQ,aAAcmY,EAAM,WAAW,CACvD,CAAC,EACDf,GAAY2D,EAAW,aAAc,KAAK,WAAW,GAEzD,KAAK,gBAAkB,KACvB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,CAC3B,EACAL,EAAM,UAAU,aAAe,SAAUrlB,EAAG,CACxC,IAAI8iB,EAAQ,KACR8E,EAAiB,KAAK,QAAQ,eAClC,GAAI,OAAK,QAAU,KAAK,YAAY,EAAIA,GAGxC,KAAIJ,EAAQ,IAAI3C,GAAYpB,GAAgBzjB,CAAC,CAAC,EAC9C,KAAK,UAAY,GACjB,KAAK,UAAUwnB,CAAK,EACpB,IAAIb,EAAS,KAAK,KAAK,aAAc,GAAS,GAAS,CAAE,KAAM,KAAK,KAAM,MAAO,KAAK,KAAM,MAAOa,EAAM,SAAS,EAAG,QAAS,KAAK,gBAAgB,EAAE,aAAa,CAAE,EAAGA,EAAM,YAAY,CAAC,EAAG,CAAE,WAAYxnB,EAAG,UAAW,KAAK,WAAY,eAAgB,UAAY,CAC9PA,EAAE,eAAe,CACrB,EAAG,YAAa,UAAY,CACxB8iB,EAAM,UAAY,EACtB,CAAE,CAAC,CAAC,EACJ6D,IAAW,KACX,KAAK,UAAY,IAEzB,EACAtB,EAAM,UAAU,QAAU,SAAUrlB,EAAG8jB,EAAS,CAC5C,GAAI,GAAC,KAAK,MAAQ,CAAC,KAAK,WAAaA,EAAQ,OAAS,GAGtD,KAAI0D,EAAQ,KAAK,gBAAgB,EACjC,KAAK,QAAU,GACf,KAAK,KAAK,QAAS,GAAS,GAAS,CAAE,KAAM,KAAK,KAAM,MAAO,KAAK,KAAM,SAAU,KAAK,YAAY1D,CAAO,EAAG,MAAO0D,EAAM,SAAS1D,CAAO,EAAG,SAAU0D,EAAM,YAAY1D,CAAO,EAAG,QAAS0D,EAAM,aAAa1D,CAAO,EAAG,MAAO0D,EAAM,SAAS1D,CAAO,EAAG,SAAU0D,EAAM,YAAY1D,CAAO,CAAE,EAAG0D,EAAM,YAAY1D,CAAO,CAAC,EAAG,CAAE,WAAY9jB,EAAG,UAAW,KAAK,UAAW,CAAC,CAAC,EAClX,EACAqlB,EAAM,UAAU,WAAa,SAAUrlB,EAAG,CACtC,GAAK,KAAK,UAGV,KAAI6nB,EAAU,KAAK,QACnB,KAAK,QAAU,GACf,KAAK,UAAY,GACjB,IAAIL,EAAQ,KAAK,gBAAgB,EACjC,KAAK,KAAK,WAAY,GAAS,GAAS,CAAE,KAAM,KAAK,KAAM,MAAO,KAAK,KAAM,QAASK,EAAS,QAASL,EAAM,aAAa,CAAE,EAAGA,EAAM,YAAY,CAAC,EAAG,CAAE,WAAYxnB,CAAE,CAAC,CAAC,EAC5K,EACAqlB,EAAM,UAAU,gBAAkB,UAAY,CAC1C,OAAO,KAAK,aAAa,CAAC,CAC9B,EACAA,EAAM,UAAU,YAAc,SAAUvB,EAASyD,EAAYzC,EAAO,CAChE,IAAIC,EAAW,KAAK,aAAajB,EAASgB,CAAK,EAC3CgD,EAAa,KAAK,QAClB/C,EAAS,QAAUA,EAAS,UAC5B,KAAK,OAAS,IAElB,IAAIgD,EAAc,GAClB,MAAI,CAACD,GAAc,KAAK,SACpBC,EAAc,IAEX,GAAS,GAAS,CAAE,KAAM,KAAK,KAAM,MAAO,KAAK,IAAK,EAAGhD,CAAQ,EAAG,CAAE,SAAU,KAAK,YAAYjB,CAAO,EAAG,OAAQ,KAAK,OAAQ,QAAS,KAAK,QAAS,SAAU,GAAO,aAAc,KAAK,cAAe,kBAAmB,KAAK,mBAAoB,WAAYyD,EAAY,UAAW,KAAK,WAAY,YAAaQ,CAAY,CAAC,CAC/U,EACA1C,EAAM,UAAU,UAAY,SAAUmC,EAAO,CACzC,KAAK,aAAa,OAAO,EAAG,EAAGA,CAAK,CACxC,EACAnC,EAAM,UAAU,aAAe,SAAUvB,EAASgB,EAAO,CACrD,IAAI0C,EAAQ,KAAK,gBAAgB,EAC7BzC,EAAWyC,EAAM,YAAY1D,EAASgB,CAAK,EAC3C1L,EAAK,KAAK,aAAa,MAAM,CAAC,EAAE,OAAO,SAAUyG,EAAMC,EAAK,CAC5D,IAAIkI,EAAgBlI,EAAI,YAAY,EACpC,OAAAD,EAAK,OAASmI,EAAc,MAC5BnI,EAAK,OAASmI,EAAc,MACrBnI,CACX,EAAGkF,CAAQ,EAAGrG,EAAQtF,EAAG,MAAOuF,EAAQvF,EAAG,MAC3C,OAAO,GAAS,GAAS,CAAC,EAAG2L,CAAQ,EAAG,CAAE,MAAOrG,EAAO,MAAOC,CAAM,CAAC,CAC1E,EACA0G,EAAM,UAAU,gBAAkB,UAAY,CAC1C,IAAI4C,EAAM,KAAK,QACXvC,EAAY,KAAK,QAAQ,UACzBwC,EAAU,CACV,QAAS,EACb,EACI,KAAK,aACLvG,GAAS+D,EAAW,WAAY,KAAK,OAAQwC,CAAO,EACpDvG,GAASsG,EAAK,UAAW,KAAK,SAAS,GAEvC,KAAK,YACLtG,GAAS+D,EAAW,YAAa,KAAK,MAAM,EAC5C/D,GAASsG,EAAK,UAAW,KAAK,SAAS,GAEvC,KAAK,YACLtG,GAAS+D,EAAW,YAAa,KAAK,OAAQwC,CAAO,EACrDvG,GAASsG,EAAK,WAAY,KAAK,UAAWC,CAAO,EACjDvG,GAASsG,EAAK,cAAe,KAAK,UAAWC,CAAO,EAE5D,EACA7C,EAAM,UAAU,kBAAoB,UAAY,CAC5C,IAAI4C,EAAM,KAAK,QACXvC,EAAY,KAAK,QAAQ,UACzB,KAAK,aACL3D,GAAY2D,EAAW,WAAY,KAAK,MAAM,EAC9C3D,GAAYkG,EAAK,UAAW,KAAK,SAAS,GAE1C,KAAK,YACLlG,GAAY2D,EAAW,YAAa,KAAK,MAAM,EAC/C3D,GAAYkG,EAAK,UAAW,KAAK,SAAS,GAE1C,KAAK,YACLlG,GAAY2D,EAAW,aAAc,KAAK,WAAW,EACrD3D,GAAY2D,EAAW,YAAa,KAAK,MAAM,EAC/C3D,GAAYkG,EAAK,WAAY,KAAK,SAAS,EAC3ClG,GAAYkG,EAAK,cAAe,KAAK,SAAS,EAEtD,EACA5C,EAAM,UAAU,iBAAmB,UAAY,CAC3C,KAAK,mBAAqB,GAC1B,aAAa,KAAK,oBAAoB,CAC1C,EACOA,CACX,EAAE,EAAY,ECjvBd,SAAS8C,GAAYlN,EAAQ,CAG3B,QAFImN,EAAa,CAAC,EAETzI,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACtCyI,EAAWzI,EAAK,CAAC,EAAI,UAAUA,CAAE,EAGnC,OAAOyI,EAAW,IAAI,SAAUjH,EAAW,CACzC,OAAOA,EAAU,MAAM,GAAG,EAAE,IAAI,SAAU7f,EAAM,CAC9C,OAAOA,EAAO,GAAK2Z,EAAS3Z,EAAO,EACrC,CAAC,EAAE,KAAK,GAAG,CACb,CAAC,EAAE,KAAK,GAAG,CACb,CACA,SAAS+mB,GAAUpN,EAAQhM,EAAK,CAC9B,OAAOA,EAAI,QAAQ,cAAe,SAAUoQ,EAAGiJ,EAAU,CACvD,OAAOA,EAAS,QAAQ,mBAAoB,IAAMrN,EAAS,IAAI,EAAI,GACrE,CAAC,CACH,CAGA,SAAS,GAAItQ,EAAQrJ,EAAM,CACzB,OAAO,SAAUtB,EAAG,CAClBA,IAAM2K,EAAOrJ,CAAI,EAAItB,EACvB,CACF,CACA,SAASuoB,GAAK5d,EAAQrJ,EAAMqV,EAAG,CAC7B,OAAO,SAAU3W,EAAG,CAClBA,IAAM2K,EAAOrJ,CAAI,EAAEqV,CAAC,EAAI3W,EAC1B,CACF,CAGA,SAASwoB,GAAWhH,EAAYpV,EAAQ,CACtC,OAAO,SAAUqc,EAAW,CAC1B,IAAIC,EAAYD,EAAU,UAC1BjH,EAAW,QAAQ,SAAU/K,EAAU,CACrCrK,EAAOsc,EAAWjS,CAAQ,CAC5B,CAAC,CACH,CACF,CAGA,SAASkS,GAAYC,EAASC,EAAW,CACvC,OAAIA,IAAc,SAChBA,EAAY,CAAC,GAGR,SAAUH,EAAWI,EAAc,CACxCF,EAAQ,QAAQ,SAAUtnB,EAAM,CAC9B,IAAIynB,EAAaF,EAAUvnB,CAAI,GAAKA,EAEhCynB,KAAcL,IAIlBA,EAAUK,CAAU,EAAI,UAAY,CAKlC,QAJI3P,EAEAsG,EAAO,CAAC,EAEHC,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACtCD,EAAKC,CAAE,EAAI,UAAUA,CAAE,EAGzB,IAAIgH,GAAUvN,EAAK,KAAK0P,CAAY,GAAGxnB,CAAI,EAAE,MAAM8X,EAAIsG,CAAI,EAE3D,OAAIiH,IAAW,KAAKmC,CAAY,EACvB,KAEAnC,CAEX,EACF,CAAC,CACH,CACF,CCxEA,SAASqC,GAAK5N,EAAK,CAIjB,QAHI4N,EAAO,KACPrS,EAAOyE,EAAI,OAETzE,GACJqS,EAAQA,EAAO,GAAM5N,EAAI,WAAW,EAAEzE,CAAC,EAMzC,OAAOqS,IAAS,CAClB,CAEA,IAAIC,GAAaD,GAEjB,SAASE,GAAQ9N,EAAK,CACpB,OAAO6N,GAAW7N,CAAG,EAAE,SAAS,EAAE,CACpC,CACA,SAAS+N,GAAcC,EAAe,CACpC,GAAIA,GAAiBA,EAAc,YAAa,CAC9C,IAAIC,EAAWD,EAAc,YAAY,EACzC,GAAIC,EAAS,WAAa,GACxB,OAAOA,CAEX,CAEF,CACA,SAASC,GAAanI,EAAWlS,EAAKpK,EAAS,CAC7C,OAAIA,EAAQ,SACHoK,EAEFA,EAAI,QAAQ,6BAA8B,SAAUoQ,EAAGiJ,EAAU,CACtE,IAAIiB,EAAkBjB,EAAS,KAAK,EACpC,OAAQiB,EAAkB1O,GAAW0O,CAAe,EAAI,CAAC,EAAE,GAAG,IAAI,SAAUC,EAAa,CACvF,IAAIC,EAAqBD,EAAY,KAAK,EAC1C,OAAIC,EAAmB,QAAQ,GAAG,IAAM,EAC/BA,EACEA,EAAmB,QAAQ,SAAS,EAAI,GAC1CA,EAAmB,QAAQ,YAAa,EAAE,EACxCA,EAAmB,QAAQ,OAAO,EAAI,GACxC,GAAG,OAAOA,EAAmB,QAAQ,UAAW,IAAI,OAAOtI,CAAS,CAAC,CAAC,EACpEsI,EACF,IAAI,OAAOtI,EAAW,GAAG,EAAE,OAAOsI,CAAkB,EAEpD,IAAI,OAAOtI,CAAS,CAE/B,CAAC,EAAE,KAAK,IAAI,EAAI,IAClB,CAAC,CACH,CACA,SAASuI,GAAYvI,EAAWlS,EAAKpK,EAAS+c,EAAI+H,EAAY,CAC5D,IAAIrT,EAAM0L,GAAYJ,CAAE,EACpBzW,EAAQmL,EAAI,cAAc,OAAO,EACrC,OAAAnL,EAAM,aAAa,OAAQ,UAAU,EACrCA,EAAM,aAAa,iBAAkBgW,CAAS,EAC9ChW,EAAM,aAAa,oBAAqB,GAAG,EACvCtG,EAAQ,OACVsG,EAAM,aAAa,QAAStG,EAAQ,KAAK,EAE3CsG,EAAM,UAAYme,GAAanI,EAAWlS,EAAKpK,CAAO,GACrD8kB,GAAcrT,EAAI,MAAQA,EAAI,MAAM,YAAYnL,CAAK,EAC/CA,CACT,CAMA,SAASye,GAAO3a,EAAK,CACnB,IAAI4a,EAAkB,MAAQX,GAAQja,CAAG,EACzC,MAAO,CACL,UAAW4a,EACX,OAAQ,SAAUjI,EAAI/c,EAAS,CACzBA,IAAY,SACdA,EAAU,CAAC,GAEb,IAAI8kB,EAAaR,GAAcvH,CAAE,EAC7BkI,GAAgBH,GAAc/H,EAAG,eAAiB,UAAU,cAAc,yBAA0B,OAAOiI,EAAiB,IAAK,CAAC,EACtI,GAAI,CAACC,EACHA,EAAeJ,GAAYG,EAAiB5a,EAAKpK,EAAS+c,EAAI+H,CAAU,MACnE,CACL,IAAII,EAAQ,WAAWD,EAAa,aAAa,mBAAmB,CAAC,GAAK,EAC1EA,EAAa,aAAa,oBAAqB,GAAG,OAAOC,EAAQ,CAAC,CAAC,CACrE,CACA,MAAO,CACL,QAAS,UAAY,CACnB,IAAI3Q,EACA4Q,EAAc,WAAWF,EAAa,aAAa,mBAAmB,CAAC,GAAK,EAC5EE,GAAe,GACbF,EAAa,OACfA,EAAa,OAAO,GAEnB1Q,EAAK0Q,EAAa,cAAgB,MAAQ1Q,IAAO,QAAkBA,EAAG,YAAY0Q,CAAY,EAEjGA,EAAe,MAEfA,EAAa,aAAa,oBAAqB,GAAG,OAAOE,EAAc,CAAC,CAAC,CAE7E,CACF,CACF,CACF,CACF,CAEA,SAAeJ,GC1Gf,SAASK,GAAKtO,EAAKC,EAAU,CAG3B,QAFIlF,EAASiF,EAAI,OAERhF,EAAI,EAAGA,EAAID,EAAQ,EAAEC,EAC5B,GAAIiF,EAASD,EAAIhF,CAAC,EAAGA,CAAC,EACpB,MAAO,GAIX,MAAO,EACT,CACA,SAAS,GAAKgF,EAAKC,EAAU,CAG3B,QAFIlF,EAASiF,EAAI,OAERhF,EAAI,EAAGA,EAAID,EAAQ,EAAEC,EAC5B,GAAIiF,EAASD,EAAIhF,CAAC,EAAGA,CAAC,EACpB,OAAOgF,EAAIhF,CAAC,EAIhB,OAAO,IACT,CACA,SAASuT,GAAaC,EAAO,CAC3B,IAAIC,EAAYD,EAEhB,GAAI,OAAOC,EAAc,IAAa,CACpC,GAAI,OAAO,UAAc,KAAe,CAAC,UACvC,MAAO,GAGTA,EAAY,UAAU,WAAa,EACrC,CAEA,OAAOA,EAAU,YAAY,CAC/B,CACA,SAASC,GAAWC,EAASvpB,EAAM,CACjC,GAAI,CACF,OAAO,IAAI,OAAOupB,EAAS,GAAG,EAAE,KAAKvpB,CAAI,CAC3C,MAAY,CACV,OAAO,IACT,CACF,CACA,SAASwpB,IAAmB,CAC1B,GAAI,OAAO,UAAc,KAAe,CAAC,WAAa,CAAC,UAAU,cAC/D,MAAO,GAGT,IAAIC,EAAgB,UAAU,cAC1BC,EAASD,EAAc,QAAUA,EAAc,OACnD,MAAO,CAAC,EAAEC,GAAUA,EAAO,OAC7B,CACA,SAASC,GAAYC,EAAaP,EAAW,CAC3C,IAAIzD,EAAS0D,GAAW,IAAMM,EAAc,iCAAkCP,CAAS,EACvF,OAAOzD,EAASA,EAAO,CAAC,EAAI,EAC9B,CACA,SAASiE,GAAe7pB,EAAM,CAC5B,OAAOA,EAAK,QAAQ,KAAM,GAAG,CAC/B,CACA,SAAS8pB,GAAWC,EAASV,EAAW,CACtC,IAAIW,EAAa,KACbC,EAAU,KACd,OAAAf,GAAKa,EAAS,SAAUG,EAAQ,CAC9B,IAAItE,EAAS0D,GAAW,IAAMY,EAAO,KAAO,kCAAmCb,CAAS,EAExF,MAAI,CAACzD,GAAUsE,EAAO,MACb,IAGTF,EAAaE,EACbD,EAAUrE,EAAO,CAAC,GAAK,KAEnBsE,EAAO,aACTD,EAAUC,EAAO,aACRA,EAAO,cAChBD,EAAUN,GAAYO,EAAO,YAAY,YAAY,EAAGb,CAAS,GAAKY,GAGxEA,EAAUJ,GAAeI,CAAO,EACzB,GACT,CAAC,EACM,CACL,OAAQD,EACR,QAASC,CACX,CACF,CACA,SAASE,GAAgBJ,EAASL,EAAQ,CACxC,IAAIU,EAAY,CACd,MAAO,GACP,QAAS,IACX,EACA,OAAAlB,GAAKa,EAAS,SAAUG,EAAQ,CAC9B,IAAItE,EAASyE,GAAUX,EAAQQ,CAAM,EAErC,OAAKtE,GAILwE,EAAU,MAAQF,EAAO,GACzBE,EAAU,QAAUF,EAAO,cAAgBtE,EAAO,QAC3CwE,EAAU,UAAY,MALpB,EAMX,CAAC,EACMA,CACT,CACA,SAASC,GAAUX,EAAQQ,EAAQ,CACjC,OAAO,GAAKR,EAAQ,SAAUrR,EAAI,CAChC,IAAIiS,EAAQjS,EAAG,MACf,OAAOiR,GAAW,GAAKY,EAAO,KAAMI,EAAM,YAAY,CAAC,CACzD,CAAC,CACH,CAEA,IAAIC,GAAkB,CAAC,CACrB,KAAM,YACN,GAAI,WACN,EAAG,CACD,KAAM,QACN,GAAI,OACN,EAAG,CACD,KAAM,kBACN,GAAI,MACN,EAAG,CACD,KAAM,6BACN,GAAI,KACJ,YAAa,kBACf,EAAG,CACD,KAAM,cACN,GAAI,cACN,EAAG,CACD,KAAM,iBACN,GAAI,kBACN,EAAG,CACD,KAAM,UACN,GAAI,mBACJ,YAAa,SACf,EAAG,CACD,KAAM,eACN,GAAI,QACN,EAAG,CACD,KAAM,gBACN,GAAI,SACN,EAAG,CACD,KAAM,UACN,GAAI,kBACJ,YAAa,SACf,EAAG,CACD,KAAM,0BACN,GAAI,SACJ,YAAa,SACf,CAAC,EAEGC,GAAmB,CAAC,CACtB,KAAM,0DACN,GAAI,SACJ,YAAa,QACf,EAAG,CACD,KAAM,WACN,GAAI,QACN,EAAG,CACD,KAAM,QACN,GAAI,SACJ,aAAc,KACd,MAAO,EACT,CAAC,EACGC,GAAiB,CAAC,CACpB,KAAM,cACN,GAAI,SACJ,YAAa,oBACf,CAAC,EACGC,GAAkB,CAAC,CACrB,KAAM,mCACN,GAAI,SACN,EAAG,CACD,KAAM,mDACN,GAAI,SACN,EAAG,CAED,KAAM,UACN,GAAI,SACN,CAAC,EACGC,GAAa,CAAC,CAChB,KAAM,gBACN,GAAI,eACN,EAAG,CACD,KAAM,eACN,GAAI,SACJ,aAAc,KAChB,EAAG,CACD,KAAM,aACN,GAAI,QACN,EAAG,CACD,KAAM,mBACN,GAAI,MACJ,YAAa,kBACf,EAAG,CACD,KAAM,WACN,GAAI,KACN,EAAG,CACD,KAAM,UACN,GAAI,SACN,EAAG,CACD,KAAM,QACN,GAAI,OACN,EAAG,CACD,KAAM,cACN,GAAI,OACN,CAAC,EAED,SAASC,GAAmBC,EAAQ,CAClC,IAAIpB,EAAgB,UAAU,cAC1BC,GAAUD,EAAc,QAAUA,EAAc,QAAQ,MAAM,EAC9DqB,EAAWrB,EAAc,QAAU,GACnCsB,EAAarB,EAAO,CAAC,EACrBsB,EAAU,CACZ,KAAMD,EAAW,MACjB,QAASA,EAAW,QACpB,aAAc,GACd,OAAQ,GACR,cAAe,KACf,SAAU,GACV,gBAAiB,KACjB,QAAS,CAAC,CAACZ,GAAgBO,GAAiBhB,CAAM,EAAE,KACtD,EACIuB,EAAK,CACP,KAAM,UACN,QAAS,KACT,aAAc,EAChB,EACAD,EAAQ,OAAS,CAACA,EAAQ,UAAY9B,GAAKuB,GAAgB,SAAUP,EAAQ,CAC3E,OAAOG,GAAUX,EAAQQ,CAAM,CACjC,CAAC,EACD,IAAIgB,EAAgBf,GAAgBK,GAAkBd,CAAM,EAI5D,GAHAsB,EAAQ,SAAW,CAAC,CAACE,EAAc,MACnCF,EAAQ,gBAAkBE,EAAc,QAEpC,CAACF,EAAQ,SAAU,CACrB,IAAIG,EAAchB,GAAgBM,GAAgBf,CAAM,EACxDsB,EAAQ,OAAS,CAAC,CAACG,EAAY,MAC/BH,EAAQ,cAAgBG,EAAY,OACtC,CAEA,GAAIN,EAAQ,CACV,IAAIO,EAAaP,EAAO,SAAS,YAAY,EACzCjF,EAAS,GAAK+E,GAAY,SAAUT,EAAQ,CAC9C,OAAO,IAAI,OAAO,GAAKA,EAAO,KAAM,GAAG,EAAE,KAAKkB,CAAU,CAC1D,CAAC,EACDH,EAAG,KAAOrF,EAASA,EAAO,GAAKwF,EAC/BH,EAAG,QAAUJ,EAAO,eACtB,CAEA,IAAIQ,EAAelB,GAAgBI,GAAiBb,CAAM,EAE1D,OAAI2B,EAAa,QACfL,EAAQ,KAAOK,EAAa,MAC5BL,EAAQ,QAAUH,EAASA,EAAO,cAAgBQ,EAAa,SAG7D,UAAU,WAAa,eACzBJ,EAAG,KAAO,UACDD,EAAQ,SACjBC,EAAG,KAAOH,EAAW,MAAQ,OAG3BG,EAAG,OAAS,OAASD,EAAQ,UAC/BA,EAAQ,QAAU,MAGpBC,EAAG,QAAUpB,GAAeoB,EAAG,OAAO,EACtCD,EAAQ,QAAUnB,GAAemB,EAAQ,OAAO,EAChDC,EAAG,aAAe,SAASA,EAAG,QAAS,EAAE,EACzCD,EAAQ,aAAe,SAASA,EAAQ,QAAS,EAAE,EAC5C,CACL,QAASA,EACT,GAAIC,EACJ,SAAUH,EACV,QAAS,EACX,CACF,CAEA,SAASQ,GAAejC,EAAW,CACjC,IAAIkC,EAAYpC,GAAaE,CAAS,EAClCyB,EAAW,CAAC,CAAC,QAAQ,KAAKS,CAAS,EACnCP,EAAU,CACZ,KAAM,UACN,QAAS,KACT,aAAc,GACd,QAAS,CAAC,CAAClB,GAAWY,GAAiBa,CAAS,EAAE,OAClD,SAAU,GACV,gBAAiB,KACjB,OAAQ,GACR,cAAe,IACjB,EACIN,EAAK,CACP,KAAM,UACN,QAAS,KACT,aAAc,EAChB,EAEI5S,EAAKyR,GAAWS,GAAiBgB,CAAS,EAC1CC,EAAgBnT,EAAG,OACnBoT,EAAiBpT,EAAG,QAEpBM,EAAKmR,GAAWa,GAAYY,CAAS,EACrCG,EAAW/S,EAAG,OACdgT,EAAYhT,EAAG,QAEfiT,EAAiB9B,GAAWU,GAAkBe,CAAS,EAI3D,GAHAP,EAAQ,SAAW,CAAC,CAACY,EAAe,OACpCZ,EAAQ,gBAAkBY,EAAe,QAErC,CAACZ,EAAQ,SAAU,CACrB,IAAIa,EAAe/B,GAAWW,GAAgBc,CAAS,EACvDP,EAAQ,OAAS,CAAC,CAACa,EAAa,OAChCb,EAAQ,cAAgBa,EAAa,OACvC,CAEA,OAAIH,IACFT,EAAG,KAAOS,EAAS,GACnBT,EAAG,QAAUU,EACbV,EAAG,aAAe,SAASU,EAAW,EAAE,GAGtCH,IACFR,EAAQ,KAAOQ,EAAc,GAC7BR,EAAQ,QAAUS,EAEdT,EAAQ,SAAWC,EAAG,OAAS,OAASD,EAAQ,OAAS,WAC3DA,EAAQ,QAAU,KAItBA,EAAQ,aAAe,SAASA,EAAQ,QAAS,EAAE,EAC5C,CACL,QAASA,EACT,GAAIC,EACJ,SAAUH,EACV,QAAS,EACX,CACF,CAuBA,SAASgB,GAAiBjR,EAAU,CAClC,OAAI2O,GAAiB,EACZ,UAAU,cAAc,qBAAqB,CAAC,eAAgB,QAAS,WAAY,kBAAmB,eAAe,CAAC,EAAE,KAAK,SAAU9Y,EAAM,CAClJ,IAAIqb,EAAYnB,GAAmBla,CAAI,EACvC,OAAAmK,GAAYA,EAASkR,CAAS,EACvBA,CACT,CAAC,GAGHlR,GAAYA,EAASuO,GAAM,CAAC,EAExB,OAAO,QAAY,KAAe,CAAC,QAC9B,KAGF,QAAQ,QAAQA,GAAM,CAAC,EAChC,CAaA,SAASA,GAAMC,EAAW,CACxB,OAAI,OAAOA,EAAc,KAAeG,GAAiB,EAChDoB,GAAmB,EAEnBU,GAAejC,CAAS,CAEnC,CAEA,SAAeD,GCrXf,IAAI,GAAgB,SAAUhH,EAAGjjB,EAAG,CAClC,UAAgB,OAAO,gBAAkB,CACvC,UAAW,CAAC,CACd,YAAa,OAAS,SAAUijB,EAAGjjB,EAAG,CACpCijB,EAAE,UAAYjjB,CAChB,GAAK,SAAUijB,EAAGjjB,EAAG,CACnB,QAASuiB,KAAKviB,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGuiB,CAAC,IAAGU,EAAEV,CAAC,EAAIviB,EAAEuiB,CAAC,EAC7E,EAEO,GAAcU,EAAGjjB,CAAC,CAC3B,EAEA,SAAS,GAAUijB,EAAGjjB,EAAG,CACvB,GAAI,OAAOA,GAAM,YAAcA,IAAM,KAAM,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EACnI,GAAcijB,EAAGjjB,CAAC,EAElB,SAASmjB,GAAK,CACZ,KAAK,YAAcF,CACrB,CAEAA,EAAE,UAAYjjB,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAKmjB,EAAG,UAAYnjB,EAAE,UAAW,IAAImjB,EACjF,CACA,IAAI,GAAW,UAAY,CACzB,UAAW,OAAO,QAAU,SAAkBd,EAAG,CAC/C,QAAShL,EAAGZ,EAAI,EAAG6L,EAAI,UAAU,OAAQ7L,EAAI6L,EAAG7L,IAAK,CACnDY,EAAI,UAAUZ,CAAC,EAEf,QAAS8L,KAAKlL,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGkL,CAAC,IAAGF,EAAEE,CAAC,EAAIlL,EAAEkL,CAAC,EAC7E,CAEA,OAAOF,CACT,EAEO,GAAS,MAAM,KAAM,SAAS,CACvC,EACA,SAASwK,GAAWC,EAAYriB,EAAQhL,EAAKstB,EAAM,CACjD,IAAI/b,EAAI,UAAU,OACdmP,EAAInP,EAAI,EAAIvG,EAASsiB,IAAS,KAAOA,EAAO,OAAO,yBAAyBtiB,EAAQhL,CAAG,EAAIstB,EAC3F9J,EACJ,GAAI,OAAO,SAAY,UAAY,OAAO,QAAQ,UAAa,WAAY9C,EAAI,QAAQ,SAAS2M,EAAYriB,EAAQhL,EAAKstB,CAAI,MAAO,SAAStW,EAAIqW,EAAW,OAAS,EAAGrW,GAAK,EAAGA,KAASwM,EAAI6J,EAAWrW,CAAC,KAAG0J,GAAKnP,EAAI,EAAIiS,EAAE9C,CAAC,EAAInP,EAAI,EAAIiS,EAAExY,EAAQhL,EAAK0gB,CAAC,EAAI8C,EAAExY,EAAQhL,CAAG,IAAM0gB,GAC/Q,OAAOnP,EAAI,GAAKmP,GAAK,OAAO,eAAe1V,EAAQhL,EAAK0gB,CAAC,EAAGA,CAC9D,CACA,SAAS6M,GAAcC,EAAIC,EAAMC,EAAM,CACrC,GAAIA,GAAQ,UAAU,SAAW,EAAG,QAAS1W,EAAI,EAAG+J,EAAI0M,EAAK,OAAQE,EAAI3W,EAAI+J,EAAG/J,KAC1E2W,GAAM,EAAE3W,KAAKyW,MACVE,IAAIA,EAAK,MAAM,UAAU,MAAM,KAAKF,EAAM,EAAGzW,CAAC,GACnD2W,EAAG3W,CAAC,EAAIyW,EAAKzW,CAAC,GAGlB,OAAOwW,EAAG,OAAOG,GAAM,MAAM,UAAU,MAAM,KAAKF,CAAI,CAAC,CACzD,CAEA,IAAI,GAAQ,GAAS,EACjBG,GAAY,GAAM,QAAQ,OAAS,SACnCC,GAAS,mBACTC,GAAqB,GAAG,OAAOD,GAAQ,SAAS,EAChDE,GAAyB,GAAG,OAAOF,GAAQ,aAAa,EACxDG,GAAwB,GAAG,OAAOH,GAAQ,YAAY,EACtDI,GAAmC,GAAG,OAAOJ,GAAQ,uBAAuB,EAC5EK,GAAiC,GAAG,OAAOL,GAAQ,qBAAqB,EACxEM,GAA0B,GAAG,OAAON,GAAQ,cAAc,EAC1DO,GAAW,GAAO1F,GAAUmF,GAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAimD,CAAC,EACtoDQ,GAAkB,CACpB,OAAQ,IACR,UAAW,IACX,KAAM,EACN,MAAO,EACP,MAAO,EACP,OAAQ,CAAC,KAAW,GAAQ,EAC5B,OAAQ,CAAC,KAAW,GAAQ,EAC5B,aAAc,CAAC,EAAG,CAAC,EACnB,aAAc,CAAC,EAAG,CAAC,EACnB,eAAgB,KAChB,kBAAmB,KACnB,wBAAyB,KACzB,sBAAuB,KACvB,SAAU,GACV,YAAa,GACb,aAAc,GACd,eAAgB,GAChB,SAAU,GACV,cAAe,IACf,WAAY,IACZ,wBAAyB,GACzB,sBAAuB,GACvB,aAAc,GACd,cAAe,GACf,UAAW,CAAC,KAAO,GAAQ,EAC3B,cAAe,OACf,eAAgBT,GAChB,YAAa,MACb,YAAa,MACb,WAAY,EACZ,WAAY,GACZ,kBAAmB,GACnB,eAAgB,MAChB,kBAAmB,GACnB,mBAAoB,GACpB,kBAAmB,EACrB,EACIU,GAAiB,SAAUtb,EAAG,CAChC,MAAO,GAAI,KAAK,IAAI,EAAIA,EAAG,CAAC,CAC9B,EACIub,GAAQ,CACV,WAAY,CACV,IAAK,OACL,MAAO,IACP,KAAM,OACR,EACA,SAAU,CACR,IAAK,MACL,MAAO,IACP,KAAM,QACR,CACF,EAKIC,GAAaJ,GAAS,UAKtBK,GAAa,CAAC,SAAU,YAAa,cAAe,cAAe,OAAQ,QAAS,QAAS,SAAU,SAAU,eAAgB,eAAgB,WAAY,eAAgB,iBAAkB,gBAAiB,aAAc,wBAAyB,0BAA2B,aAAc,cAAe,gBAAiB,YAAa,aAAc,aAAc,iBAAkB,mBAAmB,EAK9YC,GAAUnB,GAAcA,GAAc,CAAC,EAAGkB,GAAY,EAAI,EAAG,CAAC,oBAAqB,gBAAiB,iBAAkB,aAAc,WAAY,iBAAkB,oBAAqB,wBAAyB,0BAA2B,oBAAqB,iBAAkB,oBAAoB,EAAG,EAAK,EAK9SE,GAAS,KAKTC,GAAU,KACV,GAAW,KAEf,SAASC,GAAaxuB,EAAG,CACvB,IAAIoL,EAASpL,EAAE,OACXqL,EAASrL,EAAE,OACXyuB,EAAQzuB,EAAE,MACV0uB,EAAO,KAAK,IAAI,EAChBC,EAAYF,EAAM,MAEtB,GAAI,CAACE,EAAW,CACdF,EAAM,MAAQ,CAAC,EAAG,CAAC,EACnBA,EAAM,KAAOC,EACb,MACF,CAEA,IAAIE,EAAKF,EAAOD,EAAM,KACtBA,EAAM,MAAQ,CAACE,EAAU,CAAC,EAAI,EAAIvjB,EAASwjB,EAAID,EAAU,CAAC,EAAI,EAAItjB,EAASujB,CAAE,CAC/E,CACA,SAASC,GAAYC,EAAO7uB,EAAG,CAC7B,IAAI8uB,EAAc,KAAK,KAAKD,EAAM,CAAC,EAAIA,EAAM,CAAC,EAAIA,EAAM,CAAC,EAAIA,EAAM,CAAC,CAAC,EACrE,OAAO,KAAK,IAAIC,EAAc9uB,CAAC,CACjC,CACA,SAAS+uB,GAAWF,EAAO7uB,EAAG,CAC5B,IAAIgvB,EAAWJ,GAAYC,EAAO7uB,CAAC,EACnC,MAAO,CAAC,CAAC6uB,EAAM,CAAC,EAAI,EAAIG,EAAU,CAACH,EAAM,CAAC,EAAI,EAAIG,CAAQ,CAC5D,CACA,SAASC,GAAI9f,EAAG,CACd,OAAO,KAAK,IAAIA,CAAC,CACnB,CACA,SAAS+f,GAAS/X,EAAKgY,EAAQC,EAAOC,EAAWC,EAAQ,CACvD,IAAIrS,EAAMqS,GAAU,SAASF,EAAM,CAAC,CAAC,EAAIA,EAAM,CAAC,EAAI,KAAK,IAAI,GAAI,KAAK,MAAMjY,EAAMgY,CAAM,CAAC,EAAIA,EAASE,EAClGnS,EAAMoS,GAAU,SAASF,EAAM,CAAC,CAAC,EAAIA,EAAM,CAAC,EAAI,KAAK,IAAI,EAAG,KAAK,KAAKjY,EAAMgY,CAAM,CAAC,EAAIA,EAASE,EACpG,MAAO,CAACpS,EAAKC,CAAG,CAClB,CACA,SAASqS,GAAavwB,EAAOwwB,EAAc,CACzC,OAAOxwB,GAAwBwwB,CACjC,CACA,SAASC,GAAe9T,EAAU+T,EAAe9qB,EAAS,CACxD,IAAIoqB,EAAWpqB,EAAQ,SAEnB+qB,EAAS/qB,EAAQ,QAAU,SAAU8N,EAAG,CAC1C,MAAO,GAAI,KAAK,IAAI,EAAIA,EAAG,CAAC,CAC9B,EAEIkd,EAAY,KAAK,IAAI,EACrBC,EAAWD,EAEXE,EAAO,UAAY,CACrB,IAAItU,EAAM,KAAK,IAAI,EACf8G,EAAI9G,EAAMoU,EAEVZ,EAAW1M,IACbA,EAAI0M,GAGN,IAAIzR,EAAQoS,EAAOrN,EAAI0M,CAAQ,EAC3Be,EAAYJ,GAAQE,EAAWD,GAAaZ,CAAQ,EACxDa,EAAWrU,EACXG,EAAS4B,EAAQwS,CAAS,EAEtB,EAAAzN,GAAK0M,IAITU,EAAcI,CAAI,CACpB,EAEAJ,EAAcI,CAAI,CACpB,CAEA,IAAIE,GAEJ,SAAU3K,EAAQ,CAChB,GAAU2K,EAAW3K,CAAM,EAE3B,SAAS2K,EAAUC,EAAkBrO,EAAM6D,EAAW,CACpD,IAAI5C,EAAQwC,EAAO,KAAK,IAAI,GAAK,KAEjCxC,EAAM,KAAOjB,EACbiB,EAAM,SAAW,GACjBA,EAAM,KAAO,EACbA,EAAM,WAAa,EACnBA,EAAM,aAAe,GAErBA,EAAM,aAAe,SAAU9iB,EAAG,CAChC,IAAImwB,EAAerN,EAAM,aACrBnY,EAAS3K,EAAE,WAAW,OACtByuB,EAAQzuB,EAAE,MACVowB,EAAUtN,EAAM,eAAiBnY,EAEhCylB,GACH,WAAW,UAAY,CACrB,sBAAsB,UAAY,CAChC,IAAIC,EAAYvN,EAAM,aAAa,sBAAsB,EAErDtE,EAAO6R,EAAUF,EAAe,OAAS,KAAK,EAC9CG,EAAYD,EAAUF,EAAe,QAAU,QAAQ,EACvD1R,EAAOD,EAAO8R,EACdC,EAAYvwB,EAAEmwB,EAAe,UAAY,SAAS,EAEtD,GAAI,EAAA3R,GAAQ+R,GAAaA,GAAa9R,GAItC,KAAIpH,EAAOyL,EAAM,KACb0N,EAAQnZ,EAAOA,EAAOyL,EAAM,WAEhCA,EAAM,SAAStE,EAAO+R,EAAYC,EAAQ,CAACA,CAAK,EAClD,CAAC,CACH,EAAG,GAAG,EAGR/B,EAAM,QAAU2B,EAChBpwB,EAAE,WAAW,gBAAgB,EAC7BA,EAAE,WAAW,eAAe,CAC9B,EAEA8iB,EAAM,QAAU,SAAU9iB,EAAG,CACtBA,EAAE,MAAM,SAIb8iB,EAAM,SAASA,EAAM,aAAe9iB,EAAE,OAASA,EAAE,MAAM,CACzD,EAEA8iB,EAAM,SAAW,SAAU9iB,EAAG,CAC5B,IAAIwwB,EAAQ1N,EAAM,aAAe9iB,EAAE,OAASA,EAAE,OAE1CwwB,GACFxwB,EAAE,eAAe,EAGnB8iB,EAAM,QAAQ,SAAU,CACtB,MAAO0N,CACT,CAAC,CACH,EAEA,IAAIL,EAAetO,IAAS,aACxBvL,EAAM0L,GAAYkO,CAAgB,EAClCO,EACAC,EAAahL,EAEjB,OAAKA,EAMH+K,EAAe/K,EAAU,cAAc,IAAI,OAAOoI,EAAuB,CAAC,GAL1E4C,EAAapa,EAAI,cAAc,KAAK,EACpCma,EAAena,EAAI,cAAc,KAAK,EACtCoa,EAAW,aAAaD,EAAc,IAAI,EAC1C3N,EAAM,SAAW,IAKnB1B,GAASsP,EAAYP,EAAevC,GAAmCC,EAA8B,EACrGzM,GAASsP,EAAY/C,EAAqB,EAC1CvM,GAASqP,EAAc3C,EAAuB,EAC9ChL,EAAM,aAAe2N,EACrB3N,EAAM,WAAa4N,EACnB5N,EAAM,aAAeqN,EACrBrN,EAAM,MAAQ,IAAIuC,GAAMqL,EAAY,CAClC,UAAWhP,GAAUpL,CAAG,CAC1B,CAAC,EAAE,GAAG,YAAa,SAAUtW,EAAG,CAC9B,OAAO8iB,EAAM,aAAa9iB,CAAC,CAC7B,CAAC,EAAE,GAAG,OAAQ,SAAUA,EAAG,CACzB,OAAO8iB,EAAM,QAAQ9iB,CAAC,CACxB,CAAC,EACD2hB,GAASmB,EAAM,WAAY,QAASA,EAAM,SAAU,CAClD,QAAS,EACX,CAAC,EACMA,CACT,CAEA,IAAIH,EAAUsN,EAAU,UAExB,OAAAtN,EAAQ,SAAW,SAAU6N,EAAOG,EAAY,CAC9C,IAAInT,EAAQgT,EAAQ,KAAK,KACzB,KAAK,QAAQ,SAAU,CACrB,MAAOG,EAAaH,EAAQ,KAAK,WAAahT,CAChD,CAAC,CACH,EAEAmF,EAAQ,OAAS,SAAUiO,EAAWxZ,EAAKC,EAAMwZ,EAAY,CAC3D,KAAK,KAAOxZ,EACZ,KAAK,WAAawZ,EAClB,IAAIC,EAAUF,GAAanT,GAASoT,EAAaxZ,EAAM,IAAK,EAAI,EAAI,EAAI,EAEpE+B,EAAK,KAAK,aAAe,CAAC,IAAK,OAAO,EAAI,CAAC,IAAK,QAAQ,EACxD2X,EAAW3X,EAAG,CAAC,EACf4X,EAAW5X,EAAG,CAAC,EAEf6X,EAAQ5Z,EAAOwZ,EAAa,IAC5BK,EAAO,KAAK,IAAI,EAAG9Z,CAAG,EAAIyZ,EAAa,IAC3C,KAAK,aAAa,MAAM,SAAW,GAAG,OAAOG,EAAU,IAAI,EAAE,OAAOC,EAAO,aAAa,EAAE,OAAOH,EAAS,GAAG,EAAI,uBAAuB,OAAOC,EAAU,GAAG,EAAE,OAAO,IAAME,EAAQC,EAAM,IAAI,CAC/L,EAEAvO,EAAQ,QAAU,UAAY,CAC5BZ,GAAY,KAAK,WAAY,QAAS,KAAK,QAAQ,EACnD,KAAK,MAAM,IAAI,EACf,KAAK,IAAI,CACX,EAEOkO,CACT,EAAE,EAAY,EAEVkB,GAEJ,SAAU7L,EAAQ,CAChB,GAAU6L,EAAgB7L,CAAM,EAMhC,SAAS6L,EAAeC,EAAmBC,EAAiBxsB,EAAS,CAC/DwsB,IAAoB,SACtBA,EAAkB,CAAC,GAGjBxsB,IAAY,SACdA,EAAU,CAAC,GAGb,IAAIie,EAAQwC,EAAO,KAAK,IAAI,GAAK,KAEjC,OAAAxC,EAAM,kBAAoBsO,EAC1BtO,EAAM,QAAU,EAChBA,EAAM,QAAU,EAChBA,EAAM,eAAiB,EACvBA,EAAM,gBAAkB,EACxBA,EAAM,cAAgB,EACtBA,EAAM,eAAiB,EACvBA,EAAM,oBAAsB,EAC5BA,EAAM,qBAAuB,EAC7BA,EAAM,WAAa,EACnBA,EAAM,UAAY,EAClBA,EAAM,aAAe,EACrBA,EAAM,WAAa,EACnBA,EAAM,iBAAmB,KACzBA,EAAM,uBAAyB,KAC/BA,EAAM,SAAW,GACjBA,EAAM,OAAS,GACfA,EAAM,WAAa,CAAC,EAAG,CAAC,EACxBA,EAAM,UAAY,KAClBA,EAAM,eAAiB,KACvBA,EAAM,YAAc,CAAC,EACrBA,EAAM,QAAU,EAChBA,EAAM,OAAS,EAMfA,EAAM,OAAS,UAAY,CACzB,IAAI1J,EAAK0J,EAAM,kBACXwO,EAAiBlY,EAAG,YACpBmY,EAAkBnY,EAAG,aACrBM,EAAKoJ,EAAM,iBACX0O,EAAgB9X,EAAG,YACnB+X,EAAiB/X,EAAG,aACpBgY,EAAsBhY,EAAG,YACzBiY,EAAuBjY,EAAG,aAC9BoJ,EAAM,eAAiBwO,EACvBxO,EAAM,gBAAkByO,EACxBzO,EAAM,cAAgB0O,EACtB1O,EAAM,eAAiB2O,EACvB3O,EAAM,oBAAsB,KAAK,IAAI0O,EAAeE,CAAmB,EACvE5O,EAAM,qBAAuB,KAAK,IAAI2O,EAAgBE,CAAoB,EAE1E7O,EAAM,OAAO,EAEbA,EAAM,UAAU,EAAG,CAAC,CACtB,EAEAA,EAAM,UAAY,UAAY,CAC5B,IAAI1J,EAAK0J,EAAM,eACX8O,EAAaxY,EAAG,WAChByY,EAAYzY,EAAG,UACfM,EAAKoJ,EAAM,KACXgP,EAAOpY,IAAO,OAASsU,GAAgB,KAAOtU,EAC9CtO,EAASwmB,EAAa9O,EAAM,WAC5BzX,EAASwmB,EAAY/O,EAAM,UAE3BiP,EAAmBjP,EAAM,cAAc,EAEvCkP,EAAkBlP,EAAM,aAAa,EAErCA,EAAM,SACRA,EAAM,OAAS,IAGjBA,EAAM,WAAa8O,EACnB9O,EAAM,UAAY+O,EAElB/O,EAAM,SAASiP,EAAmB3mB,EAAS0mB,EAAME,EAAkB3mB,EAASymB,CAAI,CAClF,EAEAhP,EAAM,QAAU,SAAU9iB,EAAG,CAC3B,IAAI6E,EAAUie,EAAM,QAChBmP,EAAiBptB,EAAQ,eACzBqtB,EAAgBrtB,EAAQ,eAAiB,IACzCstB,EAAYnyB,EAAE,GAAG,OAAO8iB,EAAM,cAAe,KAAK,CAAC,GAAK9iB,EAAE,QAE9D,GAAI6E,EAAQ,eAAiBstB,EAAW,CACtC,IAAI9mB,EAASrL,EAAE,OACXoyB,EAAO/mB,GAAU,EAAI,EAAI,GACzBgnB,EAAW,KAAK,IAAIH,EAAe,KAAK,IAAI7mB,CAAM,CAAC,EACvDA,EAAS+mB,EAAOC,EAChB,IAAI7B,EAAQ,CAACnlB,EACTinB,EAAQ,KAAK,IAAI,EAAI9B,GAAS3rB,EAAQ,YAAc,KAAO,EAAQ,EACvE,aAAaie,EAAM,cAAc,EACjCA,EAAM,eAAiB,OAAO,WAAW,UAAY,CACnDA,EAAM,UAAY,IACpB,EAAG,GAAG,EAENA,EAAM,cAAc,CAClB,SAAUuP,EACV,MAAOC,EACP,SAAU,EACV,KAAMxP,EAAM,KAAOwP,EACnB,MAAOxP,EAAM,OAASmP,IAAmB,WAAa,EAAIK,GAC1D,MAAOxP,EAAM,OAASmP,IAAmB,aAAe,EAAIK,GAC5D,WAAYtyB,EACZ,QAAS,GACT,QAASA,EAAE,QACX,QAASA,EAAE,QACX,OAAQ,EACR,OAAQ,CACV,CAAC,CACH,SAAW6E,EAAQ,eAAgB,CACjC,IAAIuG,EAASpL,EAAE,OACXqL,EAASrL,EAAE,OAEXA,EAAE,UAAY,CAACoL,IACjBA,EAASC,EACTA,EAAS,GAGXyX,EAAM,SAAS1X,EAAS0X,EAAM,MAAOzX,EAASyX,EAAM,KAAK,CAC3D,KACE,QAGF9iB,EAAE,eAAe,CACnB,EAEA8iB,EAAM,eAAiB,SAAU9iB,EAAG,CAClC8iB,EAAM,WAAa,CAACA,EAAM,MAAOA,EAAM,KAAK,EAE5CA,EAAM,eAAe,EAErB9iB,EAAE,eAAe,CACnB,EAEA8iB,EAAM,gBAAkB,SAAU9iB,EAAG,CAGnC,GAFAA,EAAE,eAAe,EAEb8iB,EAAM,MAAM,OAAO,GAAK,CAACA,EAAM,WAAY,CAC7CA,EAAM,WAAa,CAAC,EAAG,CAAC,EACxB,MACF,CAEA,IAAIwP,EAAQtyB,EAAE,MACVuyB,EAAQzP,EAAM,WAAW,CAAC,EAC1B0P,EAAQ1P,EAAM,WAAW,CAAC,EAC1BmP,EAAiBnP,EAAM,QAAQ,eAEnCA,EAAM,cAAc,CAClB,SAAU,EACV,MAAOwP,EACP,SAAUtyB,EAAE,SACZ,WAAYA,EACZ,QAAS,GACT,MAAOuyB,EAAQC,GAASF,EAAQ,EAChC,MAAOC,GAASN,IAAmB,WAAa,EAAIK,GACpD,MAAOE,GAASP,IAAmB,aAAe,EAAIK,GACtD,QAAStyB,EAAE,QACX,QAASA,EAAE,QACX,OAAQ,EACR,OAAQ,CACV,CAAC,CACH,EAEA8iB,EAAM,aAAe,UAAY,CAAC,EAE9BT,GAAOgP,CAAe,GACxBvO,EAAM,iBAAmBuO,EACzBvO,EAAM,QAAU,GAAS,GAAS,CAAC,EAAGkL,EAAe,EAAGnpB,CAAO,IAE/Die,EAAM,iBAAmBsO,EAAkB,SAAS,CAAC,EACrDtO,EAAM,QAAU,GAAS,GAAS,CAAC,EAAGkL,EAAe,EAAGqD,CAAe,GAGzEvO,EAAM,KAAK,EAEJA,CACT,CAMA,IAAIH,EAAUwO,EAAe,UAE7B,OAAAxO,EAAQ,aAAe,UAAY,CACjC,OAAO,KAAK,iBACd,EAMAA,EAAQ,kBAAoB,UAAY,CACtC,OAAO,KAAK,sBACd,EAMAA,EAAQ,YAAc,UAAY,CAChC,OAAO,KAAK,gBACd,EAMAA,EAAQ,WAAa,UAAY,CAC/B,OAAO,KAAK,cACd,EAMAA,EAAQ,aAAe,UAAY,CACjC,OAAO,KAAK,iBACd,EAMAA,EAAQ,QAAU,UAAY,CAC5B,KAAK,IAAI,EACT,KAAK,MAAM,MAAM,EACjB,KAAK,kBAAkB,QAAQ,EAC/B,KAAK,oBAAoB,QAAQ,EACjC,KAAK,aAAa,QAAQ,EAC1B,IAAIuN,EAAmB,KAAK,kBAE5B,KAAK,YAAY,QAAQ,SAAUtU,EAAU,CAC3CA,EAAS,CACX,CAAC,EAEDmG,GAAY,KAAK,eAAgB,SAAU,KAAK,SAAS,EACzDA,GAAY,KAAK,uBAAwB,QAAS,KAAK,OAAO,EAC9DA,GAAYmO,EAAkB,eAAgB,KAAK,cAAc,EACjEnO,GAAYmO,EAAkB,gBAAiB,KAAK,eAAe,EACnEnO,GAAYmO,EAAkB,cAAe,KAAK,YAAY,EAC9D,KAAK,MAAQ,KACb,KAAK,aAAe,KACpB,KAAK,kBAAoB,KACzB,KAAK,iBAAmB,KACxB,KAAK,QAAU,IACjB,EAMAvN,EAAQ,aAAe,SAAU9d,EAAS,CACpCA,IAAY,SACdA,EAAU,CAAC,GAGb,IAAIwqB,EAAQ,GACRoD,EAAW,GAEXva,GAASrT,CAAO,GAClBwqB,EAAQxqB,EAAQ,MAChB4tB,EAAW5tB,EAAQ,UAEnBwqB,EAAQxqB,EAGV,IAAIitB,EAAO,KAAK,MACZ1a,EAAM,KAAK,UAAY0a,EAAO,KAAK,SAAWzC,EAAQH,GAAI,KAAK,UAAU,EAAE,CAAC,CAAC,EAAI,GACrF,OAAOuD,EAAWrb,EAAM0a,EAAO1a,CACjC,EAMAuL,EAAQ,cAAgB,SAAU9d,EAAS,CACrCA,IAAY,SACdA,EAAU,CAAC,GAGb,IAAIwqB,EAAQ,GACRoD,EAAW,GAEXva,GAASrT,CAAO,GAClBwqB,EAAQxqB,EAAQ,MAChB4tB,EAAW5tB,EAAQ,UAEnBwqB,EAAQxqB,EAGV,IAAIitB,EAAO,KAAK,MACZ1a,EAAM,KAAK,WAAa0a,EAAO,KAAK,SAAWzC,EAAQH,GAAI,KAAK,UAAU,EAAE,CAAC,CAAC,EAAI,GACtF,OAAOuD,EAAWrb,EAAM0a,EAAO1a,CACjC,EAMAuL,EAAQ,eAAiB,SAAU+P,EAAQ,CACzC,IAAIrD,EAAQ,KAAK,iBAAiB,EAE9ByC,EAAO,KAAK,MACZza,EAAO,KAAK,eAAiBya,EAAO5C,GAAIG,EAAM,CAAC,CAAC,EAAIA,EAAM,CAAC,EAC/D,OAAOqD,EAASrb,EAAOA,EAAOya,CAChC,EAMAnP,EAAQ,gBAAkB,SAAU+P,EAAQ,CAC1C,IAAIrD,EAAQ,KAAK,iBAAiB,EAE9ByC,EAAO,KAAK,MACZza,EAAO,KAAK,gBAAkBya,EAAO5C,GAAIG,EAAM,CAAC,CAAC,EAAIA,EAAM,CAAC,EAChE,OAAOqD,EAASrb,EAAOA,EAAOya,CAChC,EAMAnP,EAAQ,aAAe,SAAU9d,EAAS,CACpCA,IAAY,SACdA,EAAU,CAAC,GAGb,KAAK,OAAO,EACZ,IAAI0tB,EAAQ,KAAK,MACbC,EAAQ,KAAK,MACbzf,EAAO,EAAE,KAAK,eAAiBwf,EAAQ,KAAK,eAAiB,EAC7Dvf,EAAM,EAAE,KAAK,gBAAkBwf,EAAQ,KAAK,gBAAkB,EAElE,OAAI3tB,EAAQ,WACVkO,GAAQwf,EACRvf,GAAOwf,GAGL3tB,EAAQ,aAAe,KACzBkO,EAAO,KAAK,cAAc,GAGxBlO,EAAQ,WAAa,KACvBmO,EAAM,KAAK,aAAa,GAGnB,KAAK,SAASD,EAAMC,EAAKnO,CAAO,CACzC,EAOA8d,EAAQ,MAAQ,SAAU9d,EAAS,CACjC,IAAIuU,EAAKvU,EAAQ,EACb8N,EAAIyG,IAAO,OAAS,KAAK,cAAc,EAAIA,EAC3CM,EAAK7U,EAAQ,EACb+N,EAAI8G,IAAO,OAAS,KAAK,aAAa,EAAIA,EAC1CG,EAAKhV,EAAQ,KACbitB,EAAOjY,IAAO,OAAS,CAAC,KAAK,SAAS,EAAG,KAAK,SAAS,CAAC,EAAIA,EAC5DoV,EAAWpqB,EAAQ,SAEnBkV,EAAK,KACL4Y,EAAY5Y,EAAG,MACf6Y,EAAY7Y,EAAG,MACf8Y,EAAY9Y,EAAG,UAEf+Y,EAAK,KACLC,EAAKD,EAAG,YACRE,EAAcD,IAAO,OAAS/E,GAAgB,YAAc+E,EAC5DE,EAAKH,EAAG,YACRI,EAAcD,IAAO,OAASjF,GAAgB,YAAciF,EAE5D,gBAAiBpuB,IACnBmuB,EAAcnuB,EAAQ,aAGpB,gBAAiBA,IACnBquB,EAAcruB,EAAQ,aAGxB,IAAIsuB,EAAKhb,GAAQ2Z,CAAI,EAAIA,EAAO,CAACA,EAAMA,CAAI,EACvCS,EAAQY,EAAG,CAAC,EACZX,EAAQW,EAAG,CAAC,EAEZC,EAAa,KAAK,YAAcP,EAChCQ,EAAa,KAAK,YAAcR,EAChCS,EAAYrW,GAAQsV,EAAOa,EAAW,CAAC,EAAGA,EAAW,CAAC,CAAC,EACvDG,EAAYtW,GAAQuV,EAAOa,EAAW,CAAC,EAAGA,EAAW,CAAC,CAAC,EACvDG,EAAWzW,GAAgB,GAAG,OAAOiW,CAAW,EAAG,KAAK,aAAa,GAAK,EAAIL,EAAY,EAAIW,GAC9FG,EAAW1W,GAAgB,GAAG,OAAOmW,CAAW,EAAG,KAAK,cAAc,GAAK,EAAIN,EAAY,EAAIW,GACnG,KAAK,SAAS5gB,EAAI6gB,EAAU5gB,EAAI6gB,EAAU,CACxC,SAAUxE,CACZ,CAAC,EACD,KAAK,QAAQ6C,EAAM,CACjB,YAAakB,EACb,YAAaE,EACb,SAAUjE,EACV,SAAU,OACZ,CAAC,CACH,EAOAtM,EAAQ,MAAQ,SAAU9d,EAAS,CACjC,IAAIuU,EAAKvU,EAAQ,EACb8N,EAAIyG,IAAO,OAAS,EAAIA,EACxBM,EAAK7U,EAAQ,EACb+N,EAAI8G,IAAO,OAAS,EAAIA,EACxBG,EAAKhV,EAAQ,KACbitB,EAAOjY,IAAO,OAAS,CAAC,EAAG,CAAC,EAAIA,EAEhCE,EAAK5B,GAAQ2Z,CAAI,EAAIA,EAAO,CAACA,EAAMA,CAAI,EACvCS,EAAQxY,EAAG,CAAC,EACZyY,EAAQzY,EAAG,CAAC,EAEhB,KAAK,MAAM,GAAS,GAAS,CAAC,EAAGlV,CAAO,EAAG,CACzC,EAAG,KAAK,cAAc,EAAI8N,EAC1B,EAAG,KAAK,aAAa,EAAIC,EACzB,KAAM,CAAC,KAAK,MAAQ2f,EAAO,KAAK,MAAQC,CAAK,CAC/C,CAAC,CAAC,CACJ,EAMA7P,EAAQ,SAAW,SAAUvX,EAAQC,EAAQxG,EAAS,CAGpD,GAFA,KAAK,sBAAsB,EAEvB,CAACA,GAAW,CAACA,EAAQ,SAAU,CACjC,IAAI+sB,EAAa,KAAK,cAAc,EAChCC,EAAY,KAAK,aAAa,EAElC,OAAsDhtB,GAAQ,WAC5D+sB,GAAc,KAAK,MACnBC,GAAa,KAAK,OAGb,KAAK,UAAUD,EAAaxmB,EAAQymB,EAAYxmB,EAAQxG,CAAO,CACxE,KACE,aAAK,sBAAsB,CAACuG,EAAQC,CAAM,EAAGxG,CAAO,EAE7C,EAEX,EAQA8d,EAAQ,SAAW,SAAUhQ,EAAGC,EAAG/N,EAAS,CAG1C,GAFA,KAAK,sBAAsB,EAEvB,CAACA,GAAW,CAACA,EAAQ,SACvB,OAAO,KAAK,UAAU8N,EAAGC,EAAG/N,CAAO,EAEnC,IAAI+sB,EAAa,KAAK,cAAc,EAChCC,EAAY,KAAK,aAAa,EAElC,OAAsDhtB,GAAQ,WAC5D+sB,GAAc,KAAK,MACnBC,GAAa,KAAK,OAGb,KAAK,SAASlf,EAAIif,EAAYhf,EAAIif,EAAWhtB,CAAO,CAE/D,EAMA8d,EAAQ,OAAS,SAAU+Q,EAAW7uB,EAAS,CAC7C,KAAK,oBAAoB,EAEzB,IAAIuU,EAAKjB,GAAQub,CAAS,EAAIA,EAAY,CAACA,EAAWA,CAAS,EAC3DtoB,EAASgO,EAAG,CAAC,EACb/N,EAAS+N,EAAG,CAAC,EAEb,CAACvU,GAAW,CAACA,EAAQ,SACvB,KAAK,SAAS,CAAC,KAAK,MAAQuG,EAAQ,KAAK,MAAQC,CAAM,EAAGxG,CAAO,EAEjE,KAAK,oBAAoB,CAACuG,EAAQC,CAAM,EAAGxG,CAAO,CAEtD,EAMA8d,EAAQ,QAAU,SAAUmP,EAAMjtB,EAAS,CAGzC,GAFA,KAAK,oBAAoB,EAErB,CAACA,GAAW,CAACA,EAAQ,SACvB,KAAK,SAASitB,EAAMjtB,CAAO,MACtB,CACL,IAAIuU,EAAKjB,GAAQ2Z,CAAI,EAAIA,EAAO,CAACA,EAAMA,CAAI,EACvCS,EAAQnZ,EAAG,CAAC,EACZoZ,EAAQpZ,EAAG,CAAC,EAEhB,KAAK,oBAAoB,CAACmZ,EAAQ,KAAK,MAAOC,EAAQ,KAAK,KAAK,EAAG3tB,CAAO,CAC5E,CACF,EAEA8d,EAAQ,iBAAmB,UAAY,CACrC,OAAO,KAAK,aACd,EAEAA,EAAQ,kBAAoB,UAAY,CACtC,OAAO,KAAK,aACd,EAEAA,EAAQ,uBAAyB,UAAY,CAC3C,OAAO,KAAK,mBACd,EAEAA,EAAQ,wBAA0B,UAAY,CAC5C,OAAO,KAAK,oBACd,EAEAA,EAAQ,kBAAoB,UAAY,CACtC,OAAO,KAAK,cACd,EAEAA,EAAQ,mBAAqB,UAAY,CACvC,OAAO,KAAK,eACd,EAMAA,EAAQ,QAAU,UAAY,CAC5B,OAAQ,KAAK,MAAQ,KAAK,OAAS,CACrC,EAOAA,EAAQ,SAAW,UAAY,CAC7B,OAAO,KAAK,KACd,EAOAA,EAAQ,SAAW,UAAY,CAC7B,OAAO,KAAK,KACd,EAMAA,EAAQ,UAAY,SAAU+P,EAAQnD,EAAQ,CAC5C,OAAO,KAAK,eAAe,aAAcmD,EAAQnD,CAAM,CACzD,EAMA5M,EAAQ,UAAY,SAAU+P,EAAQnD,EAAQ,CAC5C,OAAO,KAAK,eAAe,WAAYmD,EAAQnD,CAAM,CACvD,EAEA5M,EAAQ,KAAO,UAAY,CACzB,IAAIG,EAAQ,KAER1J,EAKA8W,EAAmB,KAAK,kBACxBrrB,EAAU,KAAK,QACfyR,EAAM0L,GAAYkO,CAAgB,EAClCjI,EAAMvG,GAAUwO,CAAgB,EAEhCyD,EAAiB9uB,EAAQ,gBAAkBqrB,EAAiB,cAAc,IAAI,OAAOzC,EAAkB,CAAC,EACxGmG,EAAoB/uB,EAAQ,mBAAqBqrB,EAAiB,cAAc,IAAI,OAAOxC,EAAsB,CAAC,EAClHmG,EAA0BhvB,EAAQ,yBAA2BqrB,EAAiB,cAAc,IAAI,OAAOtC,EAAgC,CAAC,EACxIkG,EAAwBjvB,EAAQ,uBAAyBqrB,EAAiB,cAAc,IAAI,OAAOrC,EAA8B,CAAC,EAEjI8F,IACHA,EAAiBrd,EAAI,cAAc,KAAK,EACxCqd,EAAe,aAAa,KAAK,iBAAkB,IAAI,EACvDzD,EAAiB,aAAayD,EAAgB,IAAI,GAGpD,KAAK,eAAiBA,EAEjBC,IACHA,EAAoBtd,EAAI,cAAc,KAAK,EAC3Cqd,EAAe,aAAaC,EAAmBD,EAAe,UAAU,GAG1E,KAAK,kBAAoBC,EACzBxS,GAAS8O,EAAkB/B,EAAU,EACrC/M,GAASuS,EAAgBlG,EAAkB,EAE3CrM,GAASwS,EAAmBlG,EAAsB,EAClD,IAAIqG,EAAgB,IAAI9D,GAAUC,EAAkB,aAAc2D,CAAuB,EACrFG,EAAc,IAAI/D,GAAUC,EAAkB,WAAY4D,CAAqB,EACnF,KAAK,oBAAsBC,EAC3B,KAAK,kBAAoBC,EACzBD,EAAc,GAAG,SAAU,SAAU/zB,EAAG,CACtC8iB,EAAM,SAAS9iB,EAAE,MAAQ8iB,EAAM,MAAO,CAAC,CACzC,CAAC,EACDkR,EAAY,GAAG,SAAU,SAAUh0B,EAAG,CACpC8iB,EAAM,SAAS,EAAG9iB,EAAE,MAAQ8iB,EAAM,KAAK,CACzC,CAAC,EAEGiR,EAAc,UAChB7D,EAAiB,aAAa6D,EAAc,WAAY,IAAI,EAG1DC,EAAY,UACd9D,EAAiB,aAAa8D,EAAY,WAAY,IAAI,EAG5D,KAAK,aAAejG,GAAS,OAAOmC,EAAkB,CACpD,MAAO,KAAK,QAAQ,QACtB,CAAC,EACD,IAAI+D,EAAuBpvB,EAAQ,eAC/BqvB,EAAwB,KAkM5B,GAhMID,IACE,GAASA,CAAoB,EAC/BC,EAAwB5d,EAAI,cAAc2d,CAAoB,EACrD5R,GAAO4R,CAAoB,EACpCC,EAAwBD,GACf,UAAWA,GAAwB,YAAaA,KACzDC,EAAwBD,EAAqB,SAAWA,EAAqB,QAIjFC,IAA0BA,EAAwBhE,GAClD,KAAK,uBAAyBgE,EAwF9B,KAAK,MAAQ,IAAI7O,GAAM6K,EAAkB,CACvC,UAAWxO,GAAUwO,CAAgB,EACrC,OAAQ,CAAC,QAAS,OAAO,EACzB,mBAAoB9W,EAAK,KAAK,QAAQ,qBAAuB,MAAQA,IAAO,OAASA,EAAK,EAC5F,CAAC,EAAE,GAAG,YAAa,SAAUpZ,EAAG,CAC9B,IAAIunB,EAAavnB,EAAE,WACfm0B,EAAOn0B,EAAE,KACTyuB,EAAQzuB,EAAE,MAEd,GAAI,CAAC8iB,EAAM,cAAgB9iB,EAAE,aAAc,CACzCm0B,EAAK,EACL,MACF,CAEArR,EAAM,sBAAsB,EAE5BA,EAAM,SAAW,GAEjB,IAAI6D,EAAS7D,EAAM,QAAQ,YAAa9iB,CAAC,EAEzC,GAAI2mB,IAAW,GAAO,CACpBwN,EAAK,EACL,MACF,CAEA5M,EAAW,eAAe,EAC1BkH,EAAM,WAAalH,CACrB,CAAC,EAAE,GAAG,OAAQ,SAAUvnB,EAAG,CACrB,CAAC8iB,EAAM,QAAQ,UAAY9iB,EAAE,SAAW8iB,EAAM,cAAgB9iB,EAAE,cAClE8iB,EAAM,QAAQ,OAAQ,GAAS,GAAS,CAAC,EAAG9iB,CAAC,EAAG,CAC9C,WAAYA,EAAE,UAChB,CAAC,CAAC,EAEFwuB,GAAaxuB,CAAC,EAEd8iB,EAAM,SAAS,CAAC9iB,EAAE,OAAS8iB,EAAM,MAAO,CAAC9iB,EAAE,OAAS8iB,EAAM,KAAK,GACtD,CAACA,EAAM,UAAY9iB,EAAE,SAAW6E,EAAQ,iBACjDie,EAAM,SAAW,GAEjBA,EAAM,QAAQ,aAAc,CAC1B,WAAY9iB,EAAE,MAAM,YAAcA,EAAE,UACtC,CAAC,EAEL,CAAC,EAAE,GAAG,UAAW,SAAUA,EAAG,CAC5B8iB,EAAM,QAAQ,UAAW,CACvB,OAAQ9iB,EAAE,OACV,SAAUA,EAAE,SACZ,WAAYA,EAAE,UAChB,CAAC,EAED8iB,EAAM,6BAA6B9iB,EAAE,MAAM,KAAK,CAClD,CAAC,EAAE,GAAG,aAAc,SAAUoZ,EAAI,CAChC,IAAImO,EAAanO,EAAG,WAChBqV,EAAQrV,EAAG,MACX+a,EAAO/a,EAAG,KACdmO,EAAW,eAAe,EAE1BzE,EAAM,sBAAsB,EAE5B2L,EAAM,UAAY,CAAC3L,EAAM,MAAOA,EAAM,KAAK,EAE3C,IAAI6D,EAAS7D,EAAM,QAAQ,aAAc,CACvC,WAAYyE,CACd,CAAC,EAEGZ,IAAW,IACbwN,EAAK,EAGPrR,EAAM,eAAe,CACvB,CAAC,EAAE,GAAG,QAAS,SAAU9iB,EAAG,CAC1B,IAAIsyB,EAAQtyB,EAAE,MACViyB,EAAiBnP,EAAM,QAAQ,eAEnCA,EAAM,cAAc,CAClB,SAAU9iB,EAAE,SACZ,SAAUA,EAAE,SACZ,MAAOA,EAAE,MACT,WAAYA,EAAE,WACd,QAAS,GACT,KAAMA,EAAE,MAAM,UAAYsyB,EAC1B,MAAOxP,EAAM,OAASmP,IAAmB,WAAa,EAAIK,GAC1D,MAAOxP,EAAM,OAASmP,IAAmB,aAAe,EAAIK,GAC5D,QAAStyB,EAAE,QACX,QAASA,EAAE,QACX,OAAQ,EACR,OAAQ,CACV,CAAC,CACH,CAAC,EAAE,GAAG,WAAY,UAAY,CAC5B8iB,EAAM,UAAY,IACpB,CAAC,EACDnB,GAASgS,EAAgB,SAAU,KAAK,SAAS,EAE7C9uB,EAAQ,kBAAmB,CAC7B,IAAIuvB,EAAa,IAAInM,EAAI,eAAe,UAAY,CAClDnF,EAAM,OAAO,CACf,CAAC,EACDsR,EAAW,QAAQ,KAAK,gBAAgB,EACxCA,EAAW,QAAQ,KAAK,iBAAiB,EAEzC,KAAK,YAAY,KAAK,UAAY,CAChCA,EAAW,WAAW,CACxB,CAAC,CACH,MACEzS,GAASsG,EAAK,SAAU,KAAK,MAAM,EAEnC,KAAK,YAAY,KAAK,UAAY,CAChClG,GAAYkG,EAAK,SAAUnF,EAAM,MAAM,CACzC,CAAC,GAGCje,EAAQ,eAAiBA,EAAQ,iBACnC8c,GAASuS,EAAuB,QAAS,KAAK,QAAS,CACrD,QAAS,EACX,CAAC,EAGCrvB,EAAQ,aACV8c,GAASuO,EAAkB,eAAgB,KAAK,eAAgB,CAC9D,QAAS,EACX,CAAC,EACDvO,GAASuO,EAAkB,gBAAiB,KAAK,gBAAiB,CAChE,QAAS,EACX,CAAC,GAGH,KAAK,OAAO,CACd,EAEAvN,EAAQ,OAAS,UAAY,CAC3B,IAAIvJ,EAAK,KACLxF,EAAUwF,EAAG,QACbvF,EAAUuF,EAAG,QACbM,EAAKN,EAAG,MACRmZ,EAAQ7Y,IAAO,OAASsU,GAAgB,MAAQtU,EAChDG,EAAKT,EAAG,MACRoZ,EAAQ3Y,IAAO,OAASmU,GAAgB,MAAQnU,EAChDE,EAAKX,EAAG,WACRib,EAAata,IAAO,OAAS,EAAIA,EACjCua,EAASlb,EAAG,OACZmb,EAASnb,EAAG,OACZkY,EAAiBlY,EAAG,eACpBmY,EAAkBnY,EAAG,gBAErB0Z,EAAK,KAAK,QAAQ,aAClB0B,EAAe1B,IAAO,OAAS9E,GAAgB,aAAe8E,EAC9D2B,EAAc,CAAC7gB,EAAU2e,EACzBmC,EAAc,CAAC7gB,EAAU2e,EAC7B,KAAK,kBAAkB,MAAM,QAAU,qBAAqB,OAAO,KAAK,mBAAmB,EAAG,MAAM,EAAI,sBAAsB,OAAO,KAAK,oBAAoB,EAAG,MAAM,EACvK,IAAImC,EAAgB,KAAK,iBAAiB,MAEtCH,IAAiB,GACnBG,EAAc,SAAW,6BAA6B,OAAOF,EAAa,WAAW,EAAE,OAAOC,EAAa,MAAM,EAIjHC,EAAc,SAAW,yBAA2B,yBAAyB,OAAOF,EAAa,MAAM,EAAE,OAAOC,EAAa,MAAM,EAAE,OAAOL,EAAY,YAAY,EAAE,OAAO9B,EAAO,IAAI,EAAE,OAAOC,EAAO,IAAI,EAK9M,KAAK,aAAa,CACpB,EAEA7P,EAAQ,aAAe,UAAY,CACjC,IAAIvJ,EAAK,KACLmZ,EAAQnZ,EAAG,MACXoZ,EAAQpZ,EAAG,MACXkY,EAAiBlY,EAAG,eACpBmY,EAAkBnY,EAAG,gBAErB2a,EAAgB,KAAK,oBACrBC,EAAc,KAAK,kBAEvB,GAAI,KAAK,QAAQ,mBAAoB,CACnC,IAAIpC,EAAa,KAAK,cAAc,EAAI,EAAIW,EACxC+B,EAAS,KAAK,UAAU,EAAI,EAC5BM,EAActD,EAAiBpC,GAAIoF,EAAO,CAAC,CAAC,EAAIpF,GAAIoF,EAAO,CAAC,CAAC,EAC7DzC,EAAY,KAAK,aAAa,EAAI,EAAIW,EACtC+B,EAAS,KAAK,UAAU,EAAI,EAC5BM,EAAetD,EAAkBrC,GAAIqF,EAAO,CAAC,CAAC,EAAIrF,GAAIqF,EAAO,CAAC,CAAC,EACnER,EAAc,OAAO,KAAK,wBAAyBnC,EAAYN,EAAgBsD,CAAW,EAC1FZ,EAAY,OAAO,KAAK,sBAAuBnC,EAAWN,EAAiBsD,CAAY,CACzF,KAAO,CACL,IAAIC,EAAe,KAAK,iBAAiB,EAErCC,EAAe,KAAK,iBAAiB,EAErCnD,EAAa,KAAK,cAAc,EAChCC,EAAY,KAAK,aAAa,EAC9B+C,EAAc,KAAK,eAAiB1F,GAAI4F,EAAa,CAAC,CAAC,EAAIA,EAAa,CAAC,EACzED,EAAe,KAAK,gBAAkB3F,GAAI6F,EAAa,CAAC,CAAC,EAAIA,EAAa,CAAC,EAC/EhB,EAAc,OAAO,KAAK,wBAAyBnC,EAAakD,EAAa,CAAC,EAAGxD,EAAgBsD,CAAW,EAC5GZ,EAAY,OAAO,KAAK,sBAAuBnC,EAAYkD,EAAa,CAAC,EAAGxD,EAAiBsD,CAAY,CAC3G,CACF,EAEAlS,EAAQ,KAAO,SAAUiP,EAAYC,EAAW,CAC9C,IAAI8B,EAAiB,KAAK,eAC1BA,EAAe,WAAa/B,EAC5B+B,EAAe,UAAY9B,CAC7B,EAEAlP,EAAQ,yBAA2B,SAAUqS,EAAuB,CAClE,KAAK,QAAQ,sBAAwBA,EACrC,KAAK,aAAa,CACpB,EAEArS,EAAQ,2BAA6B,SAAUsS,EAAyB,CACtE,KAAK,QAAQ,wBAA0BA,EACvC,KAAK,aAAa,CACpB,EAEAtS,EAAQ,oBAAsB,SAAUuS,EAAMrwB,EAAS,CACrD,IAAIie,EAAQ,KAEZ,GAAKoS,EAIL,KAAIjG,EAAWpqB,EAAQ,SACnB+qB,EAAS/qB,EAAQ,QAAUopB,GAC/ByB,GAAe,SAAUyF,EAAW,CAClC,OAAOrS,EAAM,SAAS,CAACA,EAAM,MAAQoS,EAAK,CAAC,EAAIC,EAAWrS,EAAM,MAAQoS,EAAK,CAAC,EAAIC,CAAS,EAAGtwB,CAAO,CACvG,EAAG,SAAUkrB,EAAM,CACjBjN,EAAM,WAAa,sBAAsBiN,CAAI,CAC/C,EAAG,CACD,OAAQH,EACR,SAAUX,CACZ,CAAC,EACH,EAEAtM,EAAQ,sBAAwB,SAAUuS,EAAMrwB,EAAS,CACvD,IAAIie,EAAQ,KAEZ,GAAI,GAACoS,EAAK,CAAC,GAAK,CAACA,EAAK,CAAC,GAIvB,KAAIjG,EAAWpqB,EAAQ,SACnB+qB,EAAS/qB,EAAQ,QAAUopB,GAC/ByB,GAAe,SAAUyF,EAAW,CAClC,OAAOrS,EAAM,UAAUoS,EAAK,CAAC,EAAIC,EAAWD,EAAK,CAAC,EAAIC,EAAWtwB,CAAO,CAC1E,EAAG,SAAUkrB,EAAM,CACjBjN,EAAM,aAAe,sBAAsBiN,CAAI,CACjD,EAAG,CACD,OAAQH,EACR,SAAUX,CACZ,CAAC,EACH,EAEAtM,EAAQ,6BAA+B,SAAUmM,EAAO,CACtD,GAAI,GAACA,GAAS,CAACA,EAAM,CAAC,GAAK,CAACA,EAAM,CAAC,GAInC,KAAI7uB,EAAI,MACJgvB,EAAWJ,GAAYC,EAAO7uB,CAAC,EAC/Bm1B,EAAUpG,GAAWF,EAAO7uB,CAAC,EACjC,OAAO,KAAK,sBAAsBm1B,EAAS,CACzC,SAAUnG,CACZ,CAAC,EACH,EAEAtM,EAAQ,sBAAwB,UAAY,CAC1C,qBAAqB,KAAK,YAAY,EACtC,KAAK,aAAe,CACtB,EAEAA,EAAQ,oBAAsB,UAAY,CACxC,qBAAqB,KAAK,UAAU,EACpC,KAAK,WAAa,CACpB,EAEAA,EAAQ,mBAAqB,UAAY,CACvC,IAAIvJ,EAAK,KAAK,UAAU,EAAI,EACxB8D,EAAM9D,EAAG,CAAC,EACV+D,EAAM/D,EAAG,CAAC,EAEd,OAAO8D,GAAOC,EAAM,KAAK,OAAS,EAAI,CACxC,EAEAwF,EAAQ,oBAAsB,UAAY,CACxC,IAAIvJ,EAAK,KAAK,UAAU,EAAI,EACxB8D,EAAM9D,EAAG,CAAC,EACV+D,EAAM/D,EAAG,CAAC,EAEd,OAAO8D,GAAOC,EAAM,KAAK,OAAS,EAAI,CACxC,EAEAwF,EAAQ,cAAgB,SAAUnZ,EAAO,CACvC,IAAI0a,EAAU1a,EAAM,QAChB2a,EAAU3a,EAAM,QAChB+oB,EAAQ/oB,EAAM,MACdgpB,EAAQhpB,EAAM,MAEd,KAAK,aACP,KAAK,cAAc,CAAC+oB,EAAOC,CAAK,EAAGtO,EAASC,CAAO,EAGhD,KAAK,WACR,KAAK,eAAe,EAGtB,IAAI0O,EAAY,KAAK,UACjBO,EAAa,KAAK,YAAcP,EAChCQ,EAAa,KAAK,YAAcR,EAChCzZ,EAAK,KAAK,UACVrG,EAAOqG,EAAG,KACVpG,EAAMoG,EAAG,IACTzK,EAAQyK,EAAG,MACXtO,EAASsO,EAAG,OACZic,GAAUnR,EAAUnR,GAAQpE,EAAQ,IACpC2mB,GAAUnR,EAAUnR,GAAOlI,EAAS,IACxC,KAAK,QAAQ,QAAS,GAAS,GAAS,CAAC,EAAGtB,CAAK,EAAG,CAClD,KAAMyT,IAASsV,EAAQC,GAAS,EAAGK,EAAU,CAAC,EAAGA,EAAU,CAAC,CAAC,EAC7D,MAAO5V,GAAQsV,EAAOa,EAAW,CAAC,EAAGA,EAAW,CAAC,CAAC,EAClD,MAAOnW,GAAQuV,EAAOa,EAAW,CAAC,EAAGA,EAAW,CAAC,CAAC,EAClD,OAAQgC,EACR,OAAQC,CACV,CAAC,CAAC,CACJ,EAEA3S,EAAQ,eAAiB,UAAY,CACnC,IAAIrW,EAAO,KAAK,aAAa,EAAE,sBAAsB,EACrD,KAAK,UAAY,CACf,KAAMA,EAAK,KACX,IAAKA,EAAK,IACV,MAAOA,EAAK,MACZ,OAAQA,EAAK,MACf,CACF,EAEAqW,EAAQ,cAAgB,SAAUmP,EAAM5N,EAASC,EAAS,CACnD,KAAK,WACR,KAAK,eAAe,EAGtB,IAAI/K,EAAK,KAAK,UACVrG,EAAOqG,EAAG,KACVpG,EAAMoG,EAAG,IACTzK,EAAQyK,EAAG,MACXtO,EAASsO,EAAG,OACZvU,EAAU,KAAK,QACf0wB,EAAsB1wB,EAAQ,YAC9B2wB,EAAsB3wB,EAAQ,YAClCA,EAAQ,YAAc,GAAG,QAAQqf,EAAUnR,GAAQpE,EAAQ,IAAK,GAAG,EACnE9J,EAAQ,YAAc,GAAG,QAAQsf,EAAUnR,GAAOlI,EAAS,IAAK,GAAG,EAEnE,KAAK,SAASgnB,EAAM,CAClB,SAAU,QACZ,CAAC,EAEDjtB,EAAQ,YAAc0wB,EACtB1wB,EAAQ,YAAc2wB,CACxB,EAEA7S,EAAQ,SAAW,SAAUmP,EAAM2D,EAAa,CAC1CA,IAAgB,SAClBA,EAAc,CAAC,GAGjB,IAAIC,EAAWD,EAAY,SAEvBrc,EAAK,KACLkY,EAAiBlY,EAAG,eACpBmY,EAAkBnY,EAAG,gBACrBuZ,EAAYvZ,EAAG,MACfwZ,EAAYxZ,EAAG,MACfyZ,EAAYzZ,EAAG,UAEfM,EAAK,KACLG,EAAKH,EAAG,YACRsZ,EAAcnZ,IAAO,OAASmU,GAAgB,YAAcnU,EAC5DE,EAAKL,EAAG,YACRwZ,EAAcnZ,IAAO,OAASiU,GAAgB,YAAcjU,EAE5D,gBAAiB0b,IACnBzC,EAAcyC,EAAY,aAGxB,gBAAiBA,IACnBvC,EAAcuC,EAAY,aAG5B,IAAI7D,EAAa,KAAK,cAAc,EAChCC,EAAY,KAAK,aAAa,EAE9BiB,EAAK3a,GAAQ2Z,CAAI,EAAIA,EAAO,CAACA,EAAMA,CAAI,EACvCS,EAAQO,EAAG,CAAC,EACZN,EAAQM,EAAG,CAAC,EAEZM,EAAa,KAAK,YAAcP,EAChCQ,EAAa,KAAK,YAAcR,EAChCS,EAAYrW,GAAQsV,EAAOa,EAAW,CAAC,EAAGA,EAAW,CAAC,CAAC,EACvDG,EAAYtW,GAAQuV,EAAOa,EAAW,CAAC,EAAGA,EAAW,CAAC,CAAC,EACvDxuB,EAAU,KAAK,QACnBA,EAAQ,MAAQyuB,EAChBzuB,EAAQ,MAAQ0uB,EAChB1uB,EAAQ,MAAQyuB,EAAYC,GAAa,EACzC,IAAIoC,EAAiB,KAAK,cAAc,EACpCC,EAAgB,KAAK,aAAa,EAClCpC,EAAW,EACXC,EAAW,EAEXiC,IAAa,SACflC,EAAWzW,GAAgB,GAAG,OAAOiW,CAAW,EAAG,KAAK,aAAa,EACrES,EAAW1W,GAAgB,GAAG,OAAOmW,CAAW,EAAG,KAAK,cAAc,GAC7DwC,IAAa,YACtBlC,GAAY,CAAC5B,EAAa7U,GAAgB,GAAG,OAAOiW,CAAW,EAAG,KAAK,aAAa,GAAKL,EACzFc,GAAY,CAAC5B,EAAY9U,GAAgB,GAAG,OAAOmW,CAAW,EAAG,KAAK,cAAc,GAAKN,IAEzFY,EAAWzW,GAAgB,GAAG,OAAOiW,CAAW,EAAG1B,CAAc,EACjEmC,EAAW1W,GAAgB,GAAG,OAAOmW,CAAW,EAAG3B,CAAe,GAGpE,IAAIte,EAAU2e,EAAa4B,EAAWb,EAClCzf,EAAU2e,EAAY4B,EAAWb,EACjCiD,EAAcF,EAAiBnC,EAAWF,EAC1CwC,EAAcF,EAAgBnC,EAAWF,EAE7C,KAAK,UAAUtgB,EAAU4iB,EAAa3iB,EAAU4iB,EAAa,CAC3D,KAAM,CAAC,EAAExC,EAAYX,GAAaY,EAAYX,EAChD,CAAC,EAED,KAAK,OAAO,CACd,EAEAjQ,EAAQ,UAAY,SAAUvX,EAAQC,EAAQxG,EAAS,CACrD,IAAI+sB,EAAa,KAAK,cAAc,EAChCC,EAAY,KAAK,aAAa,EAElC,OAAsDhtB,GAAQ,WAC5D+sB,GAAc,KAAK,MACnBC,GAAa,KAAK,OAGb,KAAK,UAAUD,EAAaxmB,EAAQymB,EAAYxmB,EAAQxG,CAAO,CACxE,EAEA8d,EAAQ,UAAY,SAAUhQ,EAAGC,EAAG/N,EAAS,CAC3C,IAAIie,EAAQ,KAER1J,EAAK,KACL2c,EAAiB3c,EAAG,WACpB4c,EAAgB5c,EAAG,UAEnBuX,EAA+D9rB,GAAQ,SAE3E,KAAK,cAAc,aAAc8N,EAAGge,CAAU,EAE9C,KAAK,cAAc,WAAY/d,EAAG+d,CAAU,EAE5C,IAAIiB,EAAa,KAAK,WAClBC,EAAY,KAAK,UACrB,KAAK,OAAO,EACZ,IAAIoE,EAAyB,KAAK,cAAc,EAC5CC,EAAwB,KAAK,aAAa,EAI9C,OAFA,KAAK,iBAAiBD,EAAwBC,EAAyErxB,GAAQ,IAAI,EAE/H,KAAK,MAAMkxB,CAAc,IAAMnE,GAAc,KAAK,MAAMoE,CAAa,IAAMnE,GAC7E,KAAK,OAAS,GACd,KAAK,KAAKD,EAAYC,CAAS,EAC/B,sBAAsB,UAAY,CAChC,GAAK/O,EAAM,OAIX,CAAAA,EAAM,OAAS,GACf,IAAI1J,EAAK0J,EAAM,eACXqT,EAAoB/c,EAAG,WACvBgd,EAAmBhd,EAAG,UAC1B0J,EAAM,WAAaqT,EACnBrT,EAAM,UAAYsT,GAEdxE,IAAe,KAAK,MAAMuE,CAAiB,GAAKtE,IAAc,KAAK,MAAMuE,CAAgB,IAC3FtT,EAAM,UAAUmT,EAAwBC,CAAqB,EAEjE,CAAC,EACM,IAGF,EACT,EAEAvT,EAAQ,cAAgB,SAAUd,EAAMwU,EAAO1F,EAAY,CACzD,IAAI2F,EAAQpI,GAAMrM,CAAI,EAElBzI,EAAK,KACLM,EAAKN,EAAG,OACRgW,EAAS1V,IAAO,OAASsU,GAAgB,OAAStU,EAClDG,EAAKT,EAAG,UACRkW,EAAYzV,IAAO,OAASmU,GAAgB,UAAYnU,EAExD0c,EAAgB,KAAK,SAAS,OAAOD,EAAM,GAAG,CAAC,EAE/Cvc,EAAK,KAAK,WAAW,OAAOuc,EAAM,KAAK,CAAC,EAAE,GAAM,EAAI,EACpDE,EAAWzc,EAAG,CAAC,EACf0c,EAAW1c,EAAG,CAAC,EAEf2c,EAAY,KAAK,MAAMH,CAAa,EACpCI,EAAiB,KAAK,gBAAgB,OAAOL,EAAM,IAAI,CAAC,EAAE,EAC1DxE,EAAO,KAAK,OAAO,OAAOwE,EAAM,KAAK,CAAC,EAEtC3F,IACF0F,EAAQA,EAAQvE,GAGlB,IAAI8E,EAAYP,EAAQvE,EAExB,GAAI0E,IAAaC,EACfC,EAAYF,EACZH,EAAQG,EAAW1E,UACV8E,EAAYtH,GAAakH,EAAU,CAC5C,IAAIK,EAAe,KAAK,IAAI,EAAGD,EAAYJ,CAAQ,EACnDE,EAAYG,EACZR,GAASG,EAAWK,GAAgB/E,CACtC,SAAW8E,EAAYtH,GAAamH,EAAU,CAC5C,IAAIK,EAAe,KAAK,IAAI,EAAGL,EAAWG,CAAS,EACnDF,EAAYC,EAAiBG,EAC7BT,GAASI,EAAWK,GAAgBhF,CACtC,MAAW4E,EAAYpH,EACrBoH,GAAatH,EACJsH,EAAYC,EAAiBrH,IACtCoH,GAAatH,GAGfsH,EAAY,KAAK,MAAMA,CAAS,EAChC,KAAK,SAAS,OAAOJ,EAAM,GAAG,CAAC,EAAII,EACnC,KAAK,SAAS,OAAOJ,EAAM,KAAK,CAAC,EAAID,EAAQK,EAAY5E,CAC3D,EAEAnP,EAAQ,eAAiB,SAAUd,EAAM6Q,EAAQnD,EAAQ,CACvD,IAAInW,EAAK,KACLM,EAAKN,EAAG,OACRgW,EAAS1V,IAAO,OAASsU,GAAgB,OAAStU,EAClD4V,EAAYlW,EAAG,UAEfkd,EAAQpI,GAAMrM,CAAI,EAClBkV,EAAavH,GAAa,KAAK,QAAQ,OAAO8G,EAAM,KAAK,CAAC,EAAGtI,GAAgB,QAAQ,OAAOsI,EAAM,KAAK,CAAC,CAAC,EACzGU,EAAmBxH,GAAa,KAAK,cAAc,OAAO8G,EAAM,KAAK,CAAC,EAAGtI,GAAgB,cAAc,OAAOsI,EAAM,KAAK,CAAC,CAAC,EAC3HxE,EAAO,KAAK,OAAO,OAAOwE,EAAM,KAAK,CAAC,EACtCjH,EAAQF,GAAS,KAAK,YAAY,OAAOmH,EAAM,GAAG,CAAC,EAAE,EAAGlH,EAAQ2H,EAAYzH,EAAWC,CAAM,EAEjG,OAAKmD,EAIE,CAACrD,EAAM,CAAC,EAAIyC,EAAOkF,EAAiB,CAAC,EAAG,KAAK,QAAQ,kBAAoB,KAAK,IAAI,KAAK,WAAW,OAAOV,EAAM,IAAI,CAAC,EAAIxE,EAAO,KAAK,YAAY,OAAOwE,EAAM,IAAI,CAAC,EAAGjH,EAAM,CAAC,EAAIyC,EAAOkF,EAAiB,CAAC,CAAC,EAAI3H,EAAM,CAAC,EAAIyC,EAAOkF,EAAiB,CAAC,CAAC,EAHjP,CAAC3H,EAAM,CAAC,EAAI2H,EAAiB,CAAC,EAAG3H,EAAM,CAAC,EAAI2H,EAAiB,CAAC,CAAC,CAI1E,EAEArU,EAAQ,iBAAmB,SAAUiP,EAAYC,EAAWC,EAAM,CAChE,IAAIiE,EAAiB,KAAK,QACtBC,EAAgB,KAAK,OAErB,CAAClE,GAAQiE,IAAmBnE,GAAcoE,IAAkBnE,IAIhE,KAAK,QAAUD,EACf,KAAK,OAASC,EAiBd,KAAK,QAAQ,SAAU,CACrB,WAAYD,EACZ,UAAWC,EACX,MAAO,KAAK,MACZ,MAAO,KAAK,KACd,CAAC,EACH,EAEAlP,EAAQ,iBAAmB,UAAY,CACrC,IAAIvL,EAAM,KAAK,cAAc,EACzBkd,EAAS,KAAK,OACd2C,EAAa3C,EAAO,CAAC,EACrB4C,EAAW5C,EAAO,CAAC,EAEnB,KAAK,mBAAqB,SAAS4C,CAAQ,IAC7CA,EAAW,KAAK,IAAIA,EAAU,KAAK,cAAgB,KAAK,eAAiB,KAAK,KAAK,GAGrF,IAAIC,EAAc,KAAK,IAAI,EAAG,SAASF,CAAU,EAAI,KAAK,IAAIA,EAAY7f,CAAG,EAAIA,CAAG,EAChFggB,EAAY,KAAK,IAAI,EAAG,SAASF,CAAQ,EAAI,KAAK,IAAIA,EAAU9f,CAAG,EAAIA,CAAG,EAC1EigB,EAAe,KAAK,oBACpBjI,EAAS,KAAK,IAAI,KAAK,eAAiB,KAAK,MAAOiI,CAAY,EAAIA,EACpEC,EAAkB,KAAK,IAAI,EAAGlI,EAAS+H,CAAW,EACtD,MAAO,CAACG,EAAiBF,CAAS,CACpC,EAEAzU,EAAQ,iBAAmB,UAAY,CACrC,IAAIvL,EAAM,KAAK,aAAa,EACxBmd,EAAS,KAAK,OACd0C,EAAa1C,EAAO,CAAC,EACrB2C,EAAW3C,EAAO,CAAC,EAEnB,KAAK,mBAAqB,SAAS2C,CAAQ,IAC7CA,EAAW,KAAK,IAAIA,EAAU,KAAK,eAAiB,KAAK,gBAAkB,KAAK,KAAK,GAGvF,IAAIC,EAAc,KAAK,IAAI,EAAG,SAASF,CAAU,EAAI,KAAK,IAAIA,EAAY7f,CAAG,EAAIA,CAAG,EAChFggB,EAAY,KAAK,IAAI,EAAG,SAASF,CAAQ,EAAI,KAAK,IAAIA,EAAU9f,CAAG,EAAIA,CAAG,EAC1EigB,EAAe,KAAK,qBACpBjI,EAAS,KAAK,IAAI,KAAK,gBAAkB,KAAK,MAAOiI,CAAY,EAAIA,EACrEC,EAAkB,KAAK,IAAI,EAAGlI,EAAS+H,CAAW,EACtD,MAAO,CAACG,EAAiBF,CAAS,CACpC,EAEAjG,EAAiBpE,GAAW,CAACvE,GAAW4F,GAAY,SAAU1F,EAAWjS,EAAU,CACjF,IAAI8gB,EAAa,CACf,WAAY,GACZ,aAAc,GACd,IAAK,UAAY,CACf,OAAO,KAAK,QAAQ9gB,CAAQ,CAC9B,CACF,EACI+gB,EAASrc,GAAS,OAAO,OAAO1E,CAAQ,CAAC,EAEzCiS,EAAU8O,CAAM,EAClBD,EAAW,IAAM,SAAUt4B,EAAO,CAChC,KAAKu4B,CAAM,EAAEv4B,CAAK,CACpB,EAEAs4B,EAAW,IAAM,SAAUt4B,EAAO,CAChC,KAAK,QAAQwX,CAAQ,EAAIxX,CAC3B,EAGF,OAAO,eAAeypB,EAAWjS,EAAU8gB,CAAU,CACvD,CAAC,CAID,EAAGpG,CAAc,EACVA,CACT,EAAE,EAAY,EAEVsG,GAEJ,SAAUnS,EAAQ,CAChB,GAAU6L,EAAgB7L,CAAM,EAEhC,SAAS6L,GAAiB,CACxB,OAAO7L,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,IAC7D,CAEA,OAAO6L,CACT,EAAEA,EAAc,EAEhB,SAAesG,GCjvDf,IAAIC,GAEJ,UAAY,CACV,SAASA,GAAU,CACjB,KAAK,KAAO,CAAC,EACb,KAAK,OAAS,CAAC,CACjB,CAEA,IAAI/U,EAAU+U,EAAQ,UAEtB,OAAA/U,EAAQ,IAAM,SAAUhjB,EAAK,CAC3B,OAAO,KAAK,OAAO,KAAK,KAAK,QAAQA,CAAG,CAAC,CAC3C,EAEAgjB,EAAQ,IAAM,SAAUhjB,EAAKV,EAAO,CAClC,IAAIyd,EAAO,KAAK,KACZrC,EAAS,KAAK,OACdsd,EAAYjb,EAAK,QAAQ/c,CAAG,EAC5BwR,EAAQwmB,IAAc,GAAKjb,EAAK,OAASib,EAC7Cjb,EAAKvL,CAAK,EAAIxR,EACd0a,EAAOlJ,CAAK,EAAIlS,CAClB,EAEOy4B,CACT,EAAE,EAOEE,GAEJ,UAAY,CACV,SAASA,GAAU,CACjB,KAAK,OAAS,CAAC,CACjB,CAEA,IAAIjV,EAAUiV,EAAQ,UAEtB,OAAAjV,EAAQ,IAAM,SAAUhjB,EAAK,CAC3B,OAAO,KAAK,OAAOA,CAAG,CACxB,EAEAgjB,EAAQ,IAAM,SAAUhjB,EAAKV,EAAO,CAClC,KAAK,OAAOU,CAAG,EAAIV,CACrB,EAEO24B,CACT,EAAE,EAOEC,GAAc,OAAO,KAAQ,WAO7BC,GAEJ,UAAY,CACV,SAASA,GAAO,CAAC,CAEjB,IAAInV,EAAUmV,EAAK,UAEnB,OAAAnV,EAAQ,QAAU,SAAUoV,EAAUC,EAAU,CAC9C,KAAK,KAAOD,EACZ,KAAK,KAAOC,EACZD,IAAaA,EAAS,KAAO,MAC7BC,IAAaA,EAAS,KAAO,KAC/B,EAEArV,EAAQ,WAAa,UAAY,CAE/B,IAAIoV,EAAW,KAAK,KAChBC,EAAW,KAAK,KACpBD,IAAaA,EAAS,KAAOC,GAC7BA,IAAaA,EAAS,KAAOD,EAC/B,EAEApV,EAAQ,SAAW,UAAY,CAI7B,QAHI7W,EAAO,KACPqF,EAAQ,GAELrF,GACLA,EAAOA,EAAK,KACZ,EAAEqF,EAGJ,OAAOA,CACT,EAEO2mB,CACT,EAAE,EAQF,SAASG,GAAaC,EAASC,EAAO,CAGpC,IAAIC,EAAY,CAAC,EAEbC,EAAU,CAAC,EACf,OAAAH,EAAQ,QAAQ,SAAU9e,EAAI,CAC5B,IAAIgU,EAAOhU,EAAG,CAAC,EACX+T,EAAK/T,EAAG,CAAC,EACTtN,EAAO,IAAIgsB,GACfM,EAAUhL,CAAI,EAAIthB,EAClBusB,EAAQlL,CAAE,EAAIrhB,CAChB,CAAC,EAEDssB,EAAU,QAAQ,SAAUtsB,EAAM6K,EAAG,CACnC7K,EAAK,QAAQssB,EAAUzhB,EAAI,CAAC,CAAC,CAC/B,CAAC,EACMuhB,EAAQ,OAAO,SAAU7Y,EAAG1I,EAAG,CACpC,MAAO,CAACwhB,EAAMxhB,CAAC,CACjB,CAAC,EAAE,IAAI,SAAUyC,EAAIzC,EAAG,CACtB,IAAIyW,EAAOhU,EAAG,CAAC,EACX+T,EAAK/T,EAAG,CAAC,EAEb,GAAIgU,IAASD,EACX,MAAO,CAAC,EAAG,CAAC,EAGd,IAAImL,EAAWF,EAAUhL,CAAI,EACzBmL,EAASF,EAAQlL,EAAK,CAAC,EACvBqL,EAAYF,EAAS,SAAS,EAElCA,EAAS,WAAW,EAEfC,EAGHD,EAAS,QAAQC,EAAQA,EAAO,IAAI,EAFpCD,EAAS,QAAQ,OAAWF,EAAU,CAAC,CAAC,EAK1C,IAAIK,EAAUH,EAAS,SAAS,EAChC,MAAO,CAACE,EAAWC,CAAO,CAC5B,CAAC,CACH,CAEA,IAAIC,GAEJ,UAAY,CACV,SAASA,EAAOC,EAAUC,EAAMC,EAAOC,EAASZ,EAASa,EAAYC,EAAoBb,EAAO,CAC9F,KAAK,SAAWQ,EAChB,KAAK,KAAOC,EACZ,KAAK,MAAQC,EACb,KAAK,QAAUC,EACf,KAAK,QAAUZ,EACf,KAAK,WAAaa,EAClB,KAAK,mBAAqBC,EAC1B,KAAK,MAAQb,CACf,CAEA,IAAIxV,EAAU+V,EAAO,UACrB,cAAO,eAAe/V,EAAS,UAAW,CACxC,IAAK,UAAY,CACf,OAAK,KAAK,cACR,KAAK,gBAAgB,EAGhB,KAAK,YACd,EACA,WAAY,GACZ,aAAc,EAChB,CAAC,EACD,OAAO,eAAeA,EAAS,cAAe,CAC5C,IAAK,UAAY,CACf,OAAK,KAAK,kBACR,KAAK,gBAAgB,EAGhB,KAAK,gBACd,EACA,WAAY,GACZ,aAAc,EAChB,CAAC,EAEDA,EAAQ,gBAAkB,UAAY,CACpC,IAAIsW,EAAUhB,GAAa,KAAK,mBAAoB,KAAK,KAAK,EAC1DC,EAAU,KAAK,QACfgB,EAAc,CAAC,EACnB,KAAK,aAAeD,EAAQ,OAAO,SAAU7f,EAAIzC,EAAG,CAClD,IAAIyW,EAAOhU,EAAG,CAAC,EACX+T,EAAK/T,EAAG,CAAC,EACTM,EAAKwe,EAAQvhB,CAAC,EACdwiB,EAAazf,EAAG,CAAC,EACjB0f,EAAW1f,EAAG,CAAC,EAEnB,GAAI0T,IAASD,EACX,OAAA+L,EAAY,KAAK,CAACC,EAAYC,CAAQ,CAAC,EAChC,EAEX,CAAC,EACD,KAAK,iBAAmBF,CAC1B,EAEOR,CACT,EAAE,EAyCF,SAASW,GAAKV,EAAUC,EAAMU,EAAiB,CAC7C,IAAIC,EAAW1B,GAAc,IAAMyB,EAAkB1B,GAAUF,GAE3D9b,EAAW0d,GAAmB,SAAUt5B,EAAG,CAC7C,OAAOA,CACT,EAEI64B,EAAQ,CAAC,EACTC,EAAU,CAAC,EACXC,EAAa,CAAC,EACdS,EAAWb,EAAS,IAAI/c,CAAQ,EAChCc,EAAOkc,EAAK,IAAIhd,CAAQ,EACxB6d,EAAa,IAAIF,EACjBG,EAAS,IAAIH,EACbP,EAAqB,CAAC,EACtBb,EAAQ,CAAC,EACTwB,EAAa,CAAC,EACdzB,EAAU,CAAC,EACX0B,EAAa,EACbC,EAAe,EAEnB,OAAAL,EAAS,QAAQ,SAAU75B,EAAKm6B,EAAe,CAC7CL,EAAW,IAAI95B,EAAKm6B,CAAa,CACnC,CAAC,EACDpd,EAAK,QAAQ,SAAU/c,EAAKo6B,EAAW,CACrCL,EAAO,IAAI/5B,EAAKo6B,CAAS,CAC3B,CAAC,EAEDP,EAAS,QAAQ,SAAU75B,EAAKm6B,EAAe,CAC7C,IAAIC,EAAYL,EAAO,IAAI/5B,CAAG,EAE1B,OAAOo6B,EAAc,KACvB,EAAEF,EACFf,EAAQ,KAAKgB,CAAa,GAE1BH,EAAWI,CAAS,EAAIF,CAE5B,CAAC,EAEDnd,EAAK,QAAQ,SAAU/c,EAAKo6B,EAAW,CACrC,IAAID,EAAgBL,EAAW,IAAI95B,CAAG,EAElC,OAAOm6B,EAAkB,KAC3BjB,EAAM,KAAKkB,CAAS,EACpB,EAAEH,IAEFb,EAAW,KAAK,CAACe,EAAeC,CAAS,CAAC,EAC1CF,EAAeF,EAAWI,CAAS,GAAK,EACxCf,EAAmB,KAAK,CAACc,EAAgBD,EAAcE,EAAYH,CAAU,CAAC,EAC9EzB,EAAM,KAAK4B,IAAcD,CAAa,EAElCA,IAAkBC,GACpB7B,EAAQ,KAAK,CAAC4B,EAAeC,CAAS,CAAC,EAG7C,CAAC,EAEDjB,EAAQ,QAAQ,EACT,IAAIJ,GAAOC,EAAUC,EAAMC,EAAOC,EAASZ,EAASa,EAAYC,EAAoBb,CAAK,CAClG,CAQA,IAAI6B,GAEJ,UAAY,CAkCV,SAASA,EAAWpB,EAAMU,EAAiB,CACrCV,IAAS,SACXA,EAAO,CAAC,GAGV,KAAK,gBAAkBU,EACvB,KAAK,KAAO,CAAC,EAAE,MAAM,KAAKV,CAAI,CAChC,CASA,IAAIjW,EAAUqX,EAAW,UAEzB,OAAArX,EAAQ,OAAS,SAAUiW,EAAM,CAC/B,IAAIqB,EAAU,CAAC,EAAE,MAAM,KAAKrB,CAAI,EAC5BjS,EAAS0S,GAAK,KAAK,KAAMY,EAAS,KAAK,eAAe,EAC1D,YAAK,KAAOA,EACLtT,CACT,EAEOqT,CACT,EAAE,EAQF,SAAeA,GCpXf,IAAI,GAAgB,SAAS7W,EAAGjjB,EAAG,CAC/B,UAAgB,OAAO,gBAClB,CAAE,UAAW,CAAC,CAAE,YAAa,OAAS,SAAUijB,EAAGjjB,EAAG,CAAEijB,EAAE,UAAYjjB,CAAG,GAC1E,SAAUijB,EAAGjjB,EAAG,CAAE,QAASuiB,KAAKviB,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGuiB,CAAC,IAAGU,EAAEV,CAAC,EAAIviB,EAAEuiB,CAAC,EAAG,EAC7F,GAAcU,EAAGjjB,CAAC,CAC7B,EAEA,SAAS,GAAUijB,EAAGjjB,EAAG,CACrB,GAAI,OAAOA,GAAM,YAAcA,IAAM,KACjC,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EAC5F,GAAcijB,EAAGjjB,CAAC,EAClB,SAASmjB,GAAK,CAAE,KAAK,YAAcF,CAAG,CACtCA,EAAE,UAAYjjB,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAKmjB,EAAG,UAAYnjB,EAAE,UAAW,IAAImjB,EACnF,CAEA,IAAI,GAAW,UAAW,CACtB,UAAW,OAAO,QAAU,SAAkBd,EAAG,CAC7C,QAAShL,EAAGZ,EAAI,EAAG6L,EAAI,UAAU,OAAQ7L,EAAI6L,EAAG7L,IAAK,CACjDY,EAAI,UAAUZ,CAAC,EACf,QAAS8L,KAAKlL,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGkL,CAAC,IAAGF,EAAEE,CAAC,EAAIlL,EAAEkL,CAAC,EAC/E,CACA,OAAOF,CACX,EACO,GAAS,MAAM,KAAM,SAAS,CACzC,EAEA,SAAS2X,GAAO3iB,EAAG,EAAG,CAClB,IAAIgL,EAAI,CAAC,EACT,QAASE,KAAKlL,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGkL,CAAC,GAAK,EAAE,QAAQA,CAAC,EAAI,IAC9EF,EAAEE,CAAC,EAAIlL,EAAEkL,CAAC,GACd,GAAIlL,GAAK,MAAQ,OAAO,OAAO,uBAA0B,WACrD,QAAS,EAAI,EAAGkL,EAAI,OAAO,sBAAsBlL,CAAC,EAAG,EAAIkL,EAAE,OAAQ,IAC3D,EAAE,QAAQA,EAAE,CAAC,CAAC,EAAI,GAAK,OAAO,UAAU,qBAAqB,KAAKlL,EAAGkL,EAAE,CAAC,CAAC,IACzEF,EAAEE,EAAE,CAAC,CAAC,EAAIlL,EAAEkL,EAAE,CAAC,CAAC,GAE5B,OAAOF,CACX,CAEA,SAAS,GAAc4K,EAAIC,EAAMC,EAAM,CACnC,GAAIA,GAAQ,UAAU,SAAW,EAAG,QAAS1W,EAAI,EAAG+J,EAAI0M,EAAK,OAAQE,EAAI3W,EAAI+J,EAAG/J,KACxE2W,GAAM,EAAE3W,KAAKyW,MACRE,IAAIA,EAAK,MAAM,UAAU,MAAM,KAAKF,EAAM,EAAGzW,CAAC,GACnD2W,EAAG3W,CAAC,EAAIyW,EAAKzW,CAAC,GAGtB,OAAOwW,EAAG,OAAOG,GAAM,MAAM,UAAU,MAAM,KAAKF,CAAI,CAAC,CAC3D,CAEA,SAAS+M,GAASzd,EAAM,CACtB,IAAIvL,EAAQ,EACZ,OAAOuL,EAAK,IAAI,SAAU/c,EAAK,CAC7B,OAAOA,GAAO,KAAO,UAAU,OAAO,EAAEwR,CAAK,EAAI,GAAG,OAAOxR,CAAG,CAChE,CAAC,CACH,CACA,SAAS,GAAKgc,EAAK,CACjB,IAAIye,EAAO,CAAC,EACZ,OAAAze,EAAI,QAAQ,SAAUiG,EAAI,CACxBwY,EAAOA,EAAK,OAAOjiB,GAAQyJ,CAAE,EAAI,GAAKA,CAAE,EAAIA,CAAE,CAChD,CAAC,EACMwY,CACT,CACA,SAASC,GAAU90B,EAAO+0B,EAAc,CACtC,GAAI,CAACA,EACH,OAAO/0B,EAET,QAASoiB,KAAU2S,EACbriB,GAAY1S,EAAMoiB,CAAM,CAAC,IAC3BpiB,EAAMoiB,CAAM,EAAI2S,EAAa3S,CAAM,GAGvC,OAAOpiB,CACT,CACA,SAASg1B,GAAOt6B,EAAGC,EAAG,CACpB,GAAID,IAAMC,EACR,MAAO,GAET,QAASyW,KAAK1W,EACZ,GAAI,EAAE0W,KAAKzW,GACT,MAAO,GAGX,QAASyW,KAAKzW,EACZ,GAAID,EAAE0W,CAAC,IAAMzW,EAAEyW,CAAC,EACd,MAAO,GAGX,MAAO,EACT,CACA,SAAS6jB,GAAcj1B,EAAO,CAC5B,IAAI4b,EAAY5b,EAAM,UACpBk1B,EAAaP,GAAO30B,EAAO,CAAC,WAAW,CAAC,EAC1C,OAAI4b,GAAa,OACfsZ,EAAW,MAAQtZ,GAErB,OAAOsZ,EAAW,MAClB,OAAOA,EAAW,SACXA,CACT,CACA,SAASC,GAAWn1B,EAAO,CACzB,IAAIgyB,EAAa,CAAC,EACd1U,EAAS,CAAC,EACd,QAAS8X,KAAUp1B,EACbo1B,EAAO,QAAQ,IAAI,IAAM,EAC3B9X,EAAO8X,CAAM,EAAIp1B,EAAMo1B,CAAM,EAE7BpD,EAAWoD,CAAM,EAAIp1B,EAAMo1B,CAAM,EAGrC,MAAO,CAACpD,EAAY1U,CAAM,CAC5B,CACA,SAAS+X,GAAkBC,EAAU,CACnC,GAAI,CAACA,EACH,OAAO,KAET,IAAIC,EAAOD,EAAS,EACpB,OAAIxY,GAAOyY,CAAI,EACNA,EAEFF,GAAkBC,EAAS,CAAC,CACrC,CACA,SAASE,GAAWC,EAAM,CACxB,IAAIC,EAAaD,EAAK,WAClBC,GACFA,EAAW,YAAYD,CAAI,CAE/B,CACA,SAASE,GAAaC,EAAO,CAC3BA,EAAM,QAAQ,SAAUC,EAAM,CAC5BA,EAAK,CACP,CAAC,CACH,CACA,SAASC,IAA0B,CACjC,OAAO,KAAK,YAAY,KAAK,MAAO,KAAK,OAAO,CAClD,CAEA,IAAIC,GAAa,EACbC,GAAwB,UAAY,CACtC,SAASA,EAIThZ,EAIAY,EAIA1L,EAIAd,EAIAzF,EAIAsqB,EAIAC,EAAI,CACEA,IAAO,SACTA,EAAK,CAAC,GAER,KAAK,EAAIlZ,EACT,KAAK,EAAIY,EACT,KAAK,EAAI1L,EACT,KAAK,EAAId,EACT,KAAK,EAAIzF,EACT,KAAK,IAAMsqB,EACX,KAAK,GAAKC,EACV,KAAK,IAAM,OAIX,KAAK,IAAM,CAAC,EAIZ,KAAK,IAAM,CAAC,EAIZ,KAAK,KAAO,KAIZ,KAAK,KAAO,EACd,CACA,IAAI9Y,EAAU4Y,EAAS,UACvB,OAAA5Y,EAAQ,EAAI,UAAY,CACtB,MAAO,EACT,EAIAA,EAAQ,EAAI,SAAUwY,EAAOO,EAAUC,EAAaC,EAAWC,EAAe,CAC5E,IAAIC,EAAO,KACPC,EAAeD,EAAK,EACpBE,EAAoBvf,GAAUif,CAAQ,EAAE,OAAO,SAAU75B,EAAS,CACpE,OAAOA,EAAQ,KACjB,CAAC,EACGo6B,EAAgB,GAAKD,EAAkB,IAAI,SAAUn6B,EAAS,CAChE,OAAOA,EAAQ,MACjB,CAAC,CAAC,EACEq6B,EAAkB,GAAKD,EAAe,SAAUpB,EAAU,CAC5D,OAAOA,EAAS,IAAMkB,CACxB,CAAC,EACD,GAAID,EAAK,GAAK,CAAC,GAASH,CAAW,GAAK,CAACE,GAAiB,CAACC,EAAK,EAAEH,EAAY,MAAOC,CAAS,GAAK,CAACM,EAAiB,CACnH,IAAIC,EAAgBF,EAAc,OAAO,SAAUG,EAAQC,EAAK,CAC9D,IAAIC,EAAQD,EAAI,EAChB,OAAID,EAAO,CAAC,EACNA,EAAO,CAAC,EAAE,IAAME,GAClBF,EAAO,KAAKC,CAAG,EAERC,EAAQP,GACjBK,EAAO,KAAKC,CAAG,EAEVD,CACT,EAAG,CAAC,CAAC,EACL,OAAAD,EAAc,QAAQ,SAAUI,EAAO,CAQrCC,GAAgBD,EAAOA,EAAM,IAAK,CAACA,EAAM,CAAC,EAAGpB,EAAOO,EAAU,EAAI,CACpE,CAAC,EACM,EACT,CACAI,EAAK,EAAIH,EACTG,EAAK,GAAGF,CAAS,EAEjB,IAAIa,EAAYX,EAAK,GACrB,OAAK,GAASH,CAAW,IACvBG,EAAK,GAAKH,EAAY,MACtBG,EAAK,IAAMH,EAAY,KAEzBe,GAAmB,IAAI,EACvBZ,EAAK,EAAEX,EAAOO,EAAUI,EAAK,EAAIW,EAAY,CAAC,EAAGb,CAAS,EACnD,EACT,EACAjZ,EAAQ,GAAK,UAAY,CACvB,KAAK,GAAG,CACV,EACAA,EAAQ,GAAK,UAAY,CAEzB,EACAA,EAAQ,GAAK,UAAY,CACvB,KAAK,GAAG,CACV,EAIAA,EAAQ,GAAK,UAAY,CACvB,IAAImZ,EAAO,KACPN,EAAMM,EAAK,IACXa,EAAKb,EAAK,GACdN,GAAOA,EAAImB,EAAKA,EAAG,QAAUb,EAAK,CAAC,CACrC,EACOP,CACT,EAAE,EACF,SAASqB,IAAqB,CAC5B,OAAO,OAAO,2BAChB,CACA,SAASC,IAAgB,CACvB,OAAOvB,EACT,CACA,SAASwB,GAAaC,EAAgB,CACpCzB,GAAayB,CACf,CACA,SAASL,GAAmB7B,EAAU,CACpC,cAAO,4BAA8BA,EACrCS,GAAa,EACNT,CACT,CAEA,IAAI,GAAyB,UAAY,CACvC,SAASmC,EAAUz3B,EAAO1D,EAAS,CAC7B0D,IAAU,SACZA,EAAQ,CAAC,GAEX,KAAK,MAAQA,EACb,KAAK,QAAU1D,EACf,KAAK,MAAQ,CAAC,EACd,KAAK,QAAU,EACf,KAAK,QAAU,CAAC,EAChB,KAAK,OAAS,CAAC,EACf,KAAK,KAAO,CAAC,CACf,CACA,IAAI8gB,EAAUqa,EAAU,UACxB,OAAAra,EAAQ,OAAS,UAAY,CAC3B,OAAO,IACT,EACAA,EAAQ,sBAAwB,SAAUpd,EAAO03B,EAAO,CACtD,OAAO,KAAK,QAAU13B,GAAS,KAAK,QAAU03B,CAChD,EACAta,EAAQ,SAAW,SAAUsa,EAAOrhB,EAAUigB,EAAe,CAC3D,IAAIC,EAAO,KACNA,EAAK,UACRA,EAAK,QAAU,CAAC,GAElB,aAAaA,EAAK,OAAO,EACzBA,EAAK,QAAU,EACfA,EAAK,QAAU,GAAS,GAAS,CAAC,EAAGA,EAAK,OAAO,EAAGmB,CAAK,EACpDpB,EAMHC,EAAK,WAAWlgB,EAAUigB,CAAa,EALvCC,EAAK,QAAU,OAAO,WAAW,UAAY,CAC3CA,EAAK,QAAU,EACfA,EAAK,WAAWlgB,EAAUigB,CAAa,CACzC,CAAC,CAKL,EACAlZ,EAAQ,YAAc,SAAU/G,EAAU,CACxC,KAAK,SAAS,CAAC,EAAGA,EAAU,EAAI,CAClC,EACA+G,EAAQ,kBAAoB,UAAY,CAAC,EACzCA,EAAQ,mBAAqB,SAAU8Z,EAAWS,EAAW,CAAC,EAC9Dva,EAAQ,qBAAuB,UAAY,CAAC,EAC5CA,EAAQ,WAAa,SAAU/G,EAAUigB,EAAe,CACtD,IAAIV,EAAQ,CAAC,EACTN,EAAW,KAAK,IAChBsC,EAAWX,GAAgB3B,EAAS,EAAG,CAACA,CAAQ,EAAG,CAACA,EAAS,CAAC,EAAGM,EAAON,EAAS,IAAK,GAAS,GAAS,CAAC,EAAG,KAAK,KAAK,EAAG,KAAK,OAAO,EAAGgB,CAAa,EACrJsB,IACEvhB,GACFuf,EAAM,KAAKvf,CAAQ,EAErBsf,GAAaC,CAAK,EAClBuB,GAAmB,IAAI,EAE3B,EACOM,CACT,EAAE,EACEI,GAA6B,SAAU9X,EAAQ,CACjD,GAAU8X,EAAe9X,CAAM,EAC/B,SAAS8X,GAAgB,CACvB,OAAO9X,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,IAC7D,CACA,IAAI3C,EAAUya,EAAc,UAC5B,OAAAza,EAAQ,sBAAwB,SAAUpd,EAAO03B,EAAO,CACtD,OAAO1C,GAAO,KAAK,MAAOh1B,CAAK,GAAKg1B,GAAO,KAAK,MAAO0C,CAAK,CAC9D,EACOG,CACT,EAAE,EAAS,EAEX,SAASC,GAAU5N,EAAc,CAC/B,IAAI6N,EAAc,SAAUt9B,EAAG,CAC7Bs9B,EAAY,QAAUt9B,CACxB,EACA,OAAAs9B,EAAY,QAAU7N,EACf6N,CACT,CACA,SAASC,GAAWC,EAAM,CACxB,OAAAA,EAAK,IAAM,GACJA,CACT,CAEA,SAASC,GAAgB5b,EAAMtc,EAAOm4B,EAAc5B,EAAM,CACxD,IAAI1iB,EACA0hB,EACJ,MAAK,GAAA1hB,EAAiDyI,GAAK,aAAe,MAAQzI,IAAO,SAAkBA,EAAG,OAC5G0hB,EAAO,IAAIjZ,EAAKtc,EAAOm4B,CAAY,GAEnC5C,EAAO,IAAI,GAAUv1B,EAAOm4B,CAAY,EACxC5C,EAAK,YAAcjZ,EACfA,EAAK,KACPia,EAAK,GAAKuB,GAAU,EACpBvC,EAAK,OAAS,UAAY,CACxB,OAAO,KAAK,YAAY,KAAK,MAAOgB,EAAK,EAAE,CAC7C,GAEAhB,EAAK,OAASO,IAGlBP,EAAK,IAAMgB,EACJhB,CACT,CACA,IAAI6C,GAAiC,SAAUrY,EAAQ,CACrD,GAAUqY,EAAmBrY,CAAM,EACnC,SAASqY,EAAkB9b,EAAMya,EAAO38B,EAAKwR,EAAOuU,EAAW8V,EAAKj2B,EAAO,CACrEA,IAAU,SACZA,EAAQ,CAAC,GAEX,IAAIud,EAAQwC,EAAO,KAAK,KAAMzD,EAAMya,EAAO38B,EAAKwR,EAAOuU,EAAW8V,EAAKnB,GAAU90B,EAAOsc,EAAK,YAAY,CAAC,GAAK,KAC/G,OAAAiB,EAAM,IAAM,OAIZA,EAAM,OAAS,CAAC,EAIhBA,EAAM,MAAQ,CAAC,EAIfA,EAAM,MAAQ,CAAC,EACRA,CACT,CACA,IAAIH,EAAUgb,EAAkB,UAChC,OAAAhb,EAAQ,EAAI,SAAUib,EAAWhC,EAAW,CAC1C,IAAId,EAAO,KAAK,EAChB,OAAOA,EAAK,sBAAsBT,GAAUuD,EAAW,KAAK,EAAE,YAAY,EAAGhC,GAAad,EAAK,KAAK,IAAM,EAC5G,EACAnY,EAAQ,EAAI,SAAUwY,EAAOO,EAAUe,EAAW,CAChD,IAAIrjB,EAAIM,EACJoiB,EAAO,KACPja,EAAOia,EAAK,EAChBA,EAAK,GAAKzB,GAAUyB,EAAK,GAAIA,EAAK,EAAE,YAAY,EAChD,IAAIv2B,EAAQu2B,EAAK,GACb+B,EAAU,CAAC/B,EAAK,EAChBgC,EAAcjc,EAAK,YACnBiZ,EAAOgB,EAAK,EACZ4B,EAAyEI,GAAY,IAAIhC,CAAI,EACjGA,EAAK,IAAMJ,EACPmC,GACF/C,EAAO2C,GAAgB5b,EAAMtc,EAAOm4B,EAAc5B,CAAI,EACtDA,EAAK,EAAIhB,IAETA,EAAK,MAAQv1B,EACbu1B,EAAK,QAAU4C,GAEjB,IAAIR,EAAYpC,EAAK,MACrBgB,EAAK,OAAS,CAAC,EACfA,EAAK,MAAQ,CAAC,EACd,IAAIiC,EAAWjD,EAAK,OAAO,IACrBphB,GAAMN,EAAyD2kB,GAAS,SAAW,MAAQ3kB,IAAO,OAAS,OAASA,EAAG,YAAc,MAAQM,IAAO,OAAS,OAASA,EAAG,UAAY,IACzLqkB,EAAS,MAAM,SAAWjC,EAAK,GAAG,UAEpC,IAAIkC,EAAe,GAAS,GAAS,CAAC,EAAGtC,CAAQ,EAAGZ,EAAK,IAAI,EAC7D0B,GAAgBV,EAAMA,EAAK,IAAKiC,EAAW,CAACA,CAAQ,EAAI,CAAC,EAAG5C,EAAO6C,CAAY,EAC3EH,EACF/B,EAAK,MAAM,KAAK,UAAY,CACgCgC,GAAY,SAAShC,CAAI,EACnFhB,EAAK,kBAAkB,CACzB,CAAC,EAEDgB,EAAK,MAAM,KAAK,UAAY,CAC1BhB,EAAK,mBAAmB2B,EAAWS,CAAS,CAC9C,CAAC,EAEH/B,EAAM,KAAK,UAAY,CACrBW,EAAK,OAAO,QAAQ,SAAUmC,EAAI,CAChCA,EAAG,CACL,CAAC,EACGJ,EACF/B,EAAK,GAAG,EAERA,EAAK,GAAG,EAEVA,EAAK,MAAQA,EAAK,MAAM,IAAI,SAAUmC,EAAI,CACxC,OAAOA,EAAG,CACZ,CAAC,CACH,CAAC,CACH,EACAtb,EAAQ,GAAK,SAAUiZ,EAAW,CAChC,IAAId,EAAO,KAAK,EACZ,CAACA,GAAQ,CAACc,IAGdd,EAAK,MAAQc,EACf,EACAjZ,EAAQ,GAAK,UAAY,CACvB,IAAIvJ,EACA0iB,EAAO,KACXA,EAAK,IAAI,QAAQ,SAAUjB,EAAU,CACnCA,EAAS,GAAG,CACd,CAAC,EACD,IAAIhZ,EAAOia,EAAK,GACf1iB,EAAKyI,EAAK,eAAiB,MAAQzI,IAAO,QAAkBA,EAAG,WAAW0iB,CAAI,EAC/E,aAAaA,EAAK,EAAE,OAAO,EAC3BA,EAAK,MAAM,QAAQ,SAAUoC,EAAK,CAChCA,GAAOA,EAAI,CACb,CAAC,EACDpC,EAAK,EAAE,qBAAqB,CAC9B,EACO6B,CACT,EAAEpC,EAAQ,EAEV,SAAS4C,GAAeC,EAAQC,EAAQzc,EAAI,CAC1C,IAAIxI,EAAKklB,GAAW9D,GAAc4D,CAAM,EAAG5D,GAAc6D,CAAM,CAAC,EAC9DxF,EAAQzf,EAAG,MACX0f,EAAU1f,EAAG,QACb8e,EAAU9e,EAAG,QACf,QAASuO,KAAUkR,EACjBjX,EAAG,aAAa+F,EAAQkR,EAAMlR,CAAM,CAAC,EAEvC,QAASgT,KAAUzC,EACjBtW,EAAG,aAAa+Y,EAAQzC,EAAQyC,CAAM,EAAE,CAAC,CAAC,EAE5C,QAAS4D,KAAUzF,EACjBlX,EAAG,gBAAgB2c,CAAM,CAE7B,CACA,SAASC,GAAWC,EAASC,EAASC,EAAS,CAC7C,IAAIvlB,EAAKklB,GAAWG,EAASC,CAAO,EAClC7F,EAAQzf,EAAG,MACX0f,EAAU1f,EAAG,QACf,QAASwlB,KAAU9F,EACjB6F,EAAQ,EAAEC,EAAQ,EAAI,EAExB,QAASC,KAAUhG,EACjB8F,EAAQ,EAAEE,CAAM,CAEpB,CACA,SAASP,GAAWr+B,EAAGC,EAAG,CACxB,IAAI4+B,EAAQviB,GAAQtc,CAAC,EACjB8+B,EAAQxiB,GAAQrc,CAAC,EACjBymB,EAAS0S,GAAKyF,EAAOC,EAAO,SAAUp/B,EAAK,CAC7C,OAAOA,CACT,CAAC,EACGk5B,EAAQ,CAAC,EACTC,EAAU,CAAC,EACXZ,EAAU,CAAC,EACf,OAAAvR,EAAO,MAAM,QAAQ,SAAUxV,EAAO,CACpC,IAAI7P,EAAOy9B,EAAM5tB,CAAK,EACtB0nB,EAAMv3B,CAAI,EAAIpB,EAAEoB,CAAI,CACtB,CAAC,EACDqlB,EAAO,QAAQ,QAAQ,SAAUxV,EAAO,CACtC,IAAI7P,EAAOw9B,EAAM3tB,CAAK,EACtB2nB,EAAQx3B,CAAI,EAAIrB,EAAEqB,CAAI,CACxB,CAAC,EACDqlB,EAAO,WAAW,QAAQ,SAAUvN,EAAI,CACtC,IAAIjI,EAAQiI,EAAG,CAAC,EACZ9X,EAAOw9B,EAAM3tB,CAAK,EAClBkJ,EAAS,CAACpa,EAAEqB,CAAI,EAAGpB,EAAEoB,CAAI,CAAC,EAC1BrB,EAAEqB,CAAI,IAAMpB,EAAEoB,CAAI,IACpB42B,EAAQ52B,CAAI,EAAI+Y,EAEpB,CAAC,EACM,CACL,MAAOwe,EACP,QAASC,EACT,QAASZ,CACX,CACF,CACA,SAAS8G,GAAUC,EAAQC,EAAQtd,EAAI,CACrC,IAAIzW,EAAQyW,EAAG,MACXxI,EAAKklB,GAAWW,EAAQC,CAAM,EAChCrG,EAAQzf,EAAG,MACX0f,EAAU1f,EAAG,QACb8e,EAAU9e,EAAG,QACf,QAAS+lB,KAActG,EAAO,CAC5B,IAAIuG,EAAS,GAAWD,EAAY,GAAG,EACvCh0B,EAAM,YAAYi0B,EAAQvG,EAAMsG,CAAU,CAAC,CAC7C,CACA,QAASA,KAAcjH,EAAS,CAC9B,IAAImH,EAAS,GAAWF,EAAY,GAAG,EACvCh0B,EAAM,YAAYk0B,EAAQnH,EAAQiH,CAAU,EAAE,CAAC,CAAC,CAClD,CACA,QAASA,KAAcrG,EAAS,CAC9B,IAAIwG,EAAS,GAAWH,EAAY,GAAG,EACvCh0B,EAAM,eAAem0B,CAAM,CAC7B,CACF,CACA,SAASC,GAAmBj+B,EAAM,CAChC,OAAOA,EAAK,QAAQ,OAAQ,EAAE,EAAE,YAAY,CAC9C,CACA,IAAIk+B,GAA+B,SAAUla,EAAQ,CACnD,GAAUka,EAAiBla,CAAM,EACjC,SAASka,GAAkB,CACzB,IAAI1c,EAAQwC,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,KAChE,OAAAxC,EAAM,IAAM,OAIZA,EAAM,IAAM,CAAC,EAIbA,EAAM,KAAO,GACNA,CACT,CACA,IAAIH,EAAU6c,EAAgB,UAC9B,OAAA7c,EAAQ,EAAI,SAAUrhB,EAAMm+B,EAAU,CACpC,IAAI3D,EAAO,KACPjZ,EAASiZ,EAAK,IACdhB,EAAOgB,EAAK,EACZlZ,EAAY2c,GAAmBj+B,CAAI,EACnCm+B,GACF1d,GAAY+Y,EAAMlY,EAAWC,EAAOvhB,CAAI,CAAC,EACzC,OAAOuhB,EAAOvhB,CAAI,IAElBuhB,EAAOvhB,CAAI,EAAI,SAAUtB,EAAG,CAC1B,IAAIoZ,EAAIM,GACPA,GAAMN,EAAK0iB,EAAK,IAAIx6B,CAAI,KAAO,MAAQoY,IAAO,QAAkBA,EAAG,KAAKN,EAAIpZ,CAAC,CAChF,EACA2hB,GAASmZ,EAAMlY,EAAWC,EAAOvhB,CAAI,CAAC,EAE1C,EACAqhB,EAAQ,EAAI,SAAUib,EAAW,CAC/B,OAAOrD,GAAO,KAAK,GAAIqD,CAAS,CAClC,EACAjb,EAAQ,EAAI,SAAUwY,EAAOuE,EAAejD,EAAW,CACrD,IAAIrjB,EACA0iB,EAAO,KACP+B,EAAU,CAAC/B,EAAK,EAChB8B,EAAY9B,EAAK,GACrB,GAAI+B,EAAS,CACX,IAAI8B,EAAgB/E,GAAkBkB,EAAK,CAAC,EACxC8D,EAAQ,GACR9D,EAAK,MAAQA,EAAK,IAAM,MAC1B8D,EAAQ,GAERA,EAAQD,GAAiBA,EAAc,gBAEzC7D,EAAK,KAAO8D,EACZ,IAAInyB,GAAW2L,EAAK0iB,EAAK,QAAU,MAAQ1iB,IAAO,OAAS,OAASA,EAAG,OAAO,EAAG,CAAC,EAAE,CAAC,EACjFyI,EAAOia,EAAK,EAChB,GAAIruB,EACFquB,EAAK,KAAO,CAAC,EAAE,MAAM,KAAKruB,EAAQ,UAAY,CAAC,CAAC,MAC3C,CACL,IAAI6I,EAAM0L,GAAY2d,CAAa,EAC/BC,EACFnyB,EAAU6I,EAAI,gBAAgB,6BAA8BuL,CAAI,EAEhEpU,EAAU6I,EAAI,cAAcuL,CAAI,CAEpC,CACAia,EAAK,EAAIruB,CACX,CACA+uB,GAAgBV,EAAMA,EAAK,IAAK8B,EAAU,SAAUzC,EAAOuE,CAAa,EACxE,IAAI5E,EAAOgB,EAAK,EACZpiB,EAAKghB,GAAW+B,CAAS,EAC3BoD,EAAiBnmB,EAAG,CAAC,EACrBomB,EAAapmB,EAAG,CAAC,EACfG,EAAK6gB,GAAWkD,CAAS,EAC3BmC,EAAiBlmB,EAAG,CAAC,EACrBmmB,EAAanmB,EAAG,CAAC,EACnB,OAAAskB,GAAe0B,EAAgBE,EAAgBjF,CAAI,EACnD0D,GAAWsB,EAAYE,EAAYlE,CAAI,EACvCkD,GAAUvC,EAAU,OAAS,CAAC,EAAGmB,EAAU,OAAS,CAAC,EAAG9C,CAAI,EAC5DK,EAAM,KAAK,UAAY,CACjB0C,EACF/B,EAAK,GAAG,EAERA,EAAK,GAAG,CAEZ,CAAC,EACM,EACT,EACAnZ,EAAQ,GAAK,UAAY,CACvB,IAAImZ,EAAO,KACPjZ,EAASiZ,EAAK,IACdhB,EAAOgB,EAAK,EAChB,QAASmE,KAAUpd,EACjBd,GAAY+Y,EAAMmF,EAAQpd,EAAOod,CAAM,CAAC,EAE1CnE,EAAK,IAAI,QAAQ,SAAUjB,EAAU,CACnCA,EAAS,GAAG,CACd,CAAC,EACDiB,EAAK,IAAM,CAAC,EACPA,EAAK,MACRf,GAAWD,CAAI,CAEnB,EACO0E,CACT,EAAEjE,EAAQ,EAEV,SAAS2E,GAAYC,EAAM,CACzB,GAAI,CAACA,GAAQ9d,GAAO8d,CAAI,EACtB,OAAOA,EAET,IAAIC,EAAYD,EAAK,IAAI,IACzB,OAAKC,EAAU,OAGRF,GAAYE,EAAU,CAAC,EAAE,CAAC,EAFxB,IAGX,CACA,SAASC,GAAiBxF,EAAU,CAClC,GAAKA,EAGL,IAAIA,EAAS,GAAKxY,GAAOwY,EAAS,CAAC,EACjC,OAAOA,EAET,IAAIuF,EAAYvF,EAAS,IACzB,OAAKuF,EAAU,OAGRC,GAAiBD,EAAU,CAAC,CAAC,EAF3B,KAGX,CACA,SAAS,GAAcve,EAAMtc,EAAO,CAElC,QADI+6B,EAAW,CAAC,EACP3gB,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACtC2gB,EAAS3gB,EAAK,CAAC,EAAI,UAAUA,CAAE,EAEjC,IAAIvG,EAAK7T,GAAS,CAAC,EACjB5F,EAAMyZ,EAAG,IACToiB,EAAMpiB,EAAG,IACTqhB,EAAaP,GAAO9gB,EAAI,CAAC,MAAO,KAAK,CAAC,EACxC,MAAO,CACL,KAAMyI,EACN,IAAKliB,EACL,IAAK67B,EACL,MAAO,GAAS,GAAS,CAAC,EAAGf,CAAU,EAAG,CACxC,SAAU7a,GAAO0gB,CAAQ,EAAE,OAAO,SAAU/D,EAAO,CACjD,OAAOA,GAAS,MAAQA,IAAU,EACpC,CAAC,CACH,CAAC,CACH,CACF,CAEA,IAAIgE,GAAiC,SAAUjb,EAAQ,CACrD,GAAUib,EAAmBjb,CAAM,EACnC,SAASib,EAAkBzF,EAAMwB,EAAO,CAClCA,IAAU,SACZA,EAAQ,GAEV,IAAIxZ,EAAQwC,EAAO,KAAK,KAAM,YAAagX,EAAO,YAAa,EAAG,IAAI,GAAK,KAC3E,OAAAxZ,EAAM,IAAM,YACZA,EAAM,EAAIgY,EACHhY,CACT,CACA,IAAIH,EAAU4d,EAAkB,UAChC,OAAA5d,EAAQ,EAAI,UAAY,CACtB,MAAO,EACT,EACAA,EAAQ,GAAK,UAAY,CAEzB,EACO4d,CACT,EAAEhF,EAAQ,EACNiF,GAA4B,SAAUlb,EAAQ,CAChD,GAAUkb,EAAclb,CAAM,EAC9B,SAASkb,GAAe,CACtB,IAAI1d,EAAQwC,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,KAChE,OAAAxC,EAAM,IAAM,OACLA,CACT,CACA,IAAIH,EAAU6d,EAAa,UAC3B,OAAA7d,EAAQ,EAAI,SAAUwY,EAAO,CAC3B,IAAI/hB,EACA0iB,EAAO,KACP+B,EAAU,CAAC/B,EAAK,EACpB,GAAI+B,EAAS,CACX,IAAI8B,EAAgB/E,GAAkBkB,EAAK,CAAC,EACxC57B,GAAKkZ,EAAK0iB,EAAK,QAAU,MAAQ1iB,IAAO,OAAS,OAASA,EAAG,OAAO,EAAG,CAAC,EAAE,CAAC,EAC/E0iB,EAAK,EAAI57B,GAAK8hB,GAAY2d,CAAa,EAAE,eAAe7D,EAAK,EAAE,QAAQ,QAAS,EAAE,CAAC,CACrF,CACA,OAAAX,EAAM,KAAK,UAAY,CACjB0C,EACF/B,EAAK,GAAG,EAERA,EAAK,GAAG,CAEZ,CAAC,EACM,EACT,EACAnZ,EAAQ,GAAK,UAAY,CACvBoY,GAAW,KAAK,CAAC,CACnB,EACOyF,CACT,EAAEjF,EAAQ,EACV,SAASkF,GAAcC,EAAmBN,EAAWE,EAAU,CAC7D,IAAIK,EAAeL,EAAS,IAAI,SAAU7d,EAAG,CAC3C,OAAO,GAASA,CAAC,EAAI,KAAOA,EAAE,GAChC,CAAC,EACGqc,EAAQ3E,GAASiG,EAAU,IAAI,SAAU3d,EAAG,CAC9C,OAAOA,EAAE,CACX,CAAC,CAAC,EACEsc,EAAQ5E,GAASwG,CAAY,EAC7Bha,EAAS0S,GAAKyF,EAAOC,EAAO,SAAUp/B,EAAK,CAC7C,OAAOA,CACT,CAAC,EACDgnB,EAAO,QAAQ,QAAQ,SAAUxV,EAAO,CACtCivB,EAAU,OAAOjvB,EAAO,CAAC,EAAE,CAAC,EAAE,GAAG,CACnC,CAAC,EACDwV,EAAO,QAAQ,QAAQ,SAAUvN,EAAI,CACnC,IAAIgU,EAAOhU,EAAG,CAAC,EACb+T,EAAK/T,EAAG,CAAC,EACPwnB,EAAmBR,EAAU,OAAOhT,EAAM,CAAC,EAAE,CAAC,EAClDgT,EAAU,OAAOjT,EAAI,EAAGyT,CAAgB,EACxC,IAAIhf,EAAKse,GAAYU,EAAiB,CAAC,EACnC7Q,EAAOmQ,GAAYE,EAAUjT,EAAK,CAAC,GAAKiT,EAAUjT,EAAK,CAAC,EAAE,CAAC,EAC3DvL,GACFA,EAAG,WAAW,aAAaA,EAAImO,CAAI,CAEvC,CAAC,EACDpJ,EAAO,MAAM,QAAQ,SAAUxV,EAAO,CACpCivB,EAAU,OAAOjvB,EAAO,EAAG0vB,GAAeP,EAASnvB,CAAK,EAAGwvB,EAAaxvB,CAAK,EAAGA,EAAOuvB,CAAiB,CAAC,CAC3G,CAAC,EACD,IAAIxI,EAAUvR,EAAO,WAAW,OAAO,SAAUvN,EAAI,CACnDA,EAAG,CAAC,EACF,IAAI+T,EAAK/T,EAAG,CAAC,EACXwI,EAAK0e,EAASnT,CAAE,EAChB2T,EAAgBV,EAAUjT,CAAE,EAC5BtL,EAAO,GAASD,CAAE,EAAI,QAAQ,OAAOA,CAAE,EAAIA,EAAG,KAClD,OAAIC,IAASif,EAAc,GACzBA,EAAc,GAAG,EACjBV,EAAU,OAAOjT,EAAI,EAAG0T,GAAejf,EAAI+e,EAAaxT,CAAE,EAAGA,EAAIuT,CAAiB,CAAC,EAC5E,KAETI,EAAc,EAAI3T,EACX,GACT,CAAC,EACD,OAAO,GAAc,GAAc,CAAC,EAAGxG,EAAO,MAAO,EAAI,EAAGuR,EAAQ,IAAI,SAAU9e,EAAI,CACpFA,EAAG,CAAC,EACF,IAAI+T,EAAK/T,EAAG,CAAC,EACf,OAAO+T,CACT,CAAC,EAAG,EAAI,CACV,CAEA,SAAS4T,GAAgBlG,EAAUiG,EAAe,CAGhD,QAFIE,EAAiBnG,EAAS,IAC1BnkB,EAASsqB,EAAe,OACnB,EAAIF,EAAc,EAAI,EAAG,EAAIpqB,EAAQ,EAAE,EAAG,CACjD,IAAIkL,EAAKse,GAAYc,EAAe,CAAC,EAAE,CAAC,EACxC,GAAIpf,EACF,OAAOA,CAEX,CACA,OAAO,IACT,CACA,SAASif,GAAejf,EAAIjiB,EAAKwR,EAAOuvB,EAAmB,CACzD,IAAIpE,EAAQoE,EAAkB,EAAI,EAClC,GAAI,GAAS9e,CAAE,GAAK,GAASA,CAAE,EAC7B,OAAO,IAAI4e,GAAa,QAAQ,OAAO5e,CAAE,EAAG0a,EAAO38B,EAAKwR,EAAOuvB,EAAmB,KAAM,CAAC,CAAC,EAE5F,IAAI7e,EAAOD,EAAG,KACVqf,EAAgB,OAAOpf,GAAS,SAAW2d,GAAkB7B,GACjE,OAAO,IAAIsD,EAAcpf,EAAMya,EAAO38B,EAAKwR,EAAOuvB,EAAmB9e,EAAG,IAAKA,EAAG,KAAK,CACvF,CACA,SAAS4a,GAAgBkE,EAAmBN,EAAWE,EAAUY,EAAclD,EAAcpC,EAAWC,EAAe,CACrH,IAAIlV,EAAS8Z,GAAcC,EAAmBN,EAAWE,CAAQ,EAC7Da,EAAMT,EAAkB,KACxBU,EAAUhB,EAAU,OAAO,SAAUU,EAAenqB,EAAG,CACzD,OAAAmqB,EAAc,KAAOK,EACdL,EAAc,EAAEI,EAAclD,EAAcsC,EAAS3pB,CAAC,EAAGilB,EAAWC,CAAa,CAC1F,CAAC,EACG6E,EAAkB,MAAQ,aAAeA,EAAkB,MAC7DN,EAAU,QAAQ,SAAUvF,EAAU,CACpC,IAAIwG,EAAehB,GAAiBxF,CAAQ,EACxCwG,IACFA,EAAa,KAAO,GAExB,CAAC,EAEHX,EAAkB,KAAO,KACzB,IAAIf,EAAgB/E,GAAkB8F,CAAiB,EACvD,OAAIf,GACFhZ,EAAO,QAAQ,EAAE,QAAQ,SAAUxV,EAAO,CACxC,IAAI2vB,EAAgBV,EAAUjvB,CAAK,EAC/ByQ,EAAKse,GAAYY,EAAc,CAAC,EACpC,GAAKlf,GAGD+d,IAAkB/d,GAAM,CAACA,EAAG,WAAY,CAC1C,IAAI+Z,EAAcoF,GAAgBL,EAAmBI,CAAa,EAClEnB,EAAc,aAAa/d,EAAI+Z,CAAW,CAC5C,CACF,CAAC,EAEIyF,EAAQ,OAAS,CAC1B,CACA,SAASE,GAAe7zB,EAASiY,EAAWmV,EAAUa,EAAU,CAC1Db,IAAa,SACfA,EAAWnV,EAAU,YAEnBgW,IAAa,SACfA,EAAW,CAAC,GAEd,IAAI6F,EAAa,CAAC,CAAC1G,EACdA,IACHA,EAAW,IAAI0F,GAAkB7a,CAAS,GAE5C,IAAIyV,EAAQ,CAAC,EACb,OAAAqB,GAAgB3B,EAAUA,EAAS,IAAKptB,EAAU,CAACA,CAAO,EAAI,CAAC,EAAG0tB,EAAOO,EAAU,OAAW,MAAS,EACvGR,GAAaC,CAAK,EAClBuB,GAAmB,IAAI,EAClB6E,IACH7b,EAAU,WAAamV,GAElBA,CACT,CACA,SAAS2G,GAAO/zB,EAASiY,EAAW9J,EAAU,CAC5C,IAAIif,EAAWnV,EAAU,WACrBjY,GAAW,CAACotB,IACdnV,EAAU,UAAY,IAExB4b,GAAe7zB,EAASiY,EAAWmV,CAAQ,EAC3Cjf,GAAYA,EAAS,CACvB,CACA,SAAS6lB,GAAWh0B,EAASquB,EAAM4E,EAAmB,CACpD,MAAI,CAACA,GAAqBjzB,IACxBizB,EAAoB,IAAIH,GAAkBzE,EAAK,aAAa,EAC5D4E,EAAkB,KAAO,CAAC5E,CAAI,EAC9B4E,EAAkB,KAAO,IAE3BY,GAAe7zB,EAASquB,EAAM4E,CAAiB,EACxCA,CACT,CAEA,IAAI/pB,GAAK,EACT,SAAS+qB,GAAcjS,EAAc,CACnC,IAAIrT,EAAK,IAAI,OAAO,EAAEzF,EAAC,EACvB,SAAS4kB,EAASh2B,EAAO,CACvB,IAAIu2B,EAAO,KACX,GAAI,CAACA,EAAK,KAAK1f,CAAE,EAAG,CAClB0f,EAAK,KAAK1f,CAAE,EAAI0f,EAChB,IAAI6F,EAAS,CAAC,EACd7F,EAAK,sBAAwB,SAAU8B,EAAW,CAC5CA,EAAU,QAAU9B,EAAK,MAAM,QAEjCA,EAAK,MAAQ,GAEjB,EACAA,EAAK,OAAS,UAAY,CACxB,OAAOA,EAAK,MAAM,SAAS,CAAC,CAC9B,EACAA,EAAK,OAAS6F,CAChB,CACA,OAAOp8B,EAAM,SAAS,CAAC,CACzB,CACA,SAASq8B,EAASr8B,EAAOm4B,EAAc,CACrC,OAAOn4B,EAAM,SAASm4B,CAAY,CACpC,CACA,SAASmE,EAAWhH,EAAU,CAC5B,OAAOA,EAAS,IAAIze,CAAE,CACxB,CACA,IAAIva,EAAU,CACZ,KAAMua,EACN,KAAMqT,EACN,SAAUmS,EACV,SAAUrG,EACV,IAAK,SAAUV,EAAU,CACvB,IAAIzhB,EAAIM,EACR,OAAQA,GAAMN,EAAKyoB,EAAWhH,CAAQ,KAAO,MAAQzhB,IAAO,OAAS,OAASA,EAAG,MAAM,SAAW,MAAQM,IAAO,OAASA,EAAK+V,CACjI,EACA,SAAU,SAAUoL,EAAU,CAC5B,IAAIiH,EAAgBD,EAAWhH,CAAQ,EACnCiH,GACF,QAAQA,EAAc,OAAQjH,CAAQ,CAE1C,EACA,WAAY,SAAUA,EAAU,CAC9B,IAAIiH,EAAgBD,EAAWhH,CAAQ,EACvC,GAAIiH,EAAe,CACjB,IAAIC,EAAOD,EAAc,OACrB3wB,EAAQ4wB,EAAK,QAAQlH,CAAQ,EAC7B1pB,EAAQ,IACV4wB,EAAK,OAAO5wB,EAAO,CAAC,CAExB,CACF,CACF,EACA,OAAAywB,EAAS,YAAc//B,EAChBA,CACT,CAEA,IAAImgC,GAAsB,KA8B1B,SAASC,GAAargB,EAAI8D,EAAW,CACnC,OAAO,GAAcsc,GAAQ,CAC3B,QAASpgB,EACT,UAAW8D,CACb,CAAC,CACH,CAEA,SAASwc,GAAgBlH,EAAMmH,EAAgBrG,EAAM,CACnD,GAAId,GAAQ,KACV,MAAO,GAET,GAAI,SAASA,CAAI,GAAK,SAASA,CAAI,GAAK,WAAWA,CAAI,EACrD,OAAOA,EAET,IAAInZ,EAAOmZ,EAAK,KACdz1B,EAAQy1B,EAAK,MACf,GAAI,SAASnZ,CAAI,EAAG,CAClB,IAAIugB,EAAgB,CAAC,EACrB,WAAW78B,CAAK,EAAE,QAAQ,SAAU6T,EAAI,CACtC,IAAI9X,EAAO8X,EAAG,CAAC,EACbna,EAAQma,EAAG,CAAC,EACd,GAAI9X,IAAS,QACX8gC,EAAc9gC,CAAI,EAAI,WAAWrC,CAAK,EAAE,IAAI,SAAUma,EAAI,CACxD,IAAIipB,EAAYjpB,EAAG,CAAC,EAClBkpB,EAAalpB,EAAG,CAAC,EACnB,MAAO,GAAG,OAAO,WAAWipB,CAAS,EAAG,IAAI,EAAE,OAAOC,EAAY,GAAG,CACtE,CAAC,EAAE,KAAK,EAAE,MACL,IAAIhhC,IAAS,WAClB,OACUA,EAAK,MAAM,YAAY,IACjC8gC,EAAc9gC,CAAI,EAAI,GAAG,OAAOrC,CAAK,GAEzC,CAAC,EACD,IAAIqhC,EAAW/6B,EAAM,SAAS,IAAI,SAAUg3B,EAAO,CACjD,OAAO2F,GAAgB3F,EAAO4F,CAAc,CAC9C,CAAC,EAAE,KAAK,EAAE,EACV,GAAIrG,EACF,MAAO,CACL,QAASja,EACT,MAAOugB,EACP,SAAU9B,CACZ,EAEF,IAAIiC,EAAU,GAAc,CAAC1gB,CAAI,EAAG,WAAWugB,CAAa,EAAE,IAAI,SAAUhpB,EAAI,CAC9E,IAAI9X,EAAO8X,EAAG,CAAC,EACbna,EAAQma,EAAG,CAAC,EACd,MAAO,GAAG,OAAO9X,EAAM,IAAK,EAAE,OAAOrC,EAAM,QAAQ,KAAM,KAAM,EAAG,GAAI,CACxE,CAAC,EAAG,EAAI,EACR,MAAO,IAAI,OAAOsjC,EAAQ,KAAK,GAAG,EAAG,GAAG,EAAE,OAAOjC,EAAU,IAAI,EAAE,OAAOze,EAAM,GAAG,CACnF,SAAW,WAAWA,CAAI,EAAG,CAC3B,IAAIic,EAAcjc,EAAK,YACnBgZ,EAAW,CACb,EAAG,KACH,IAAK,CAAC,EACN,OAAQ,CAAC,EACT,MAAO,CAAC,EACR,MAAO,CAAC,EACR,IAAKsH,CACP,EACAzF,GAAmB7B,CAAQ,EAC3B,IAAI6C,EAAyEI,GAAY,IAAIjD,CAAQ,EACjGC,EAAO2C,GAAgB5b,EAAMtc,EAAOm4B,EAAc,CAAC,CAAC,EACpDM,EAAe,GAAS,GAAS,CAAC,EAAGmE,CAAc,EAAGrH,EAAK,IAAI,EACnE,OAAAD,EAAS,EAAIC,EACNoH,GAAgBpH,EAAK,OAAO,EAAGkD,EAAclC,CAAI,CAC1D,CACA,MAAO,EACT,CACA,SAAS0G,GAAexH,EAAM,CAC5B,OAAOkH,GAAgBlH,EAAM,CAAC,CAAC,CACjC,CACA,SAASyH,GAAmBzH,EAAM,CAChC,OAAOkH,GAAgBlH,EAAM,CAAC,EAAG,EAAI,CACvC,CAEA,SAAS0H,GAAcjxB,EAAM,CAC3B,IAAIkxB,EAAO/F,GAAmB,EAC1BzB,EAAQwH,EAAK,MAAQA,EAAK,IAAM,CAAC,GACjCxxB,EAAQ0rB,GAAc,EACtB+F,EAASzH,EAAMhqB,CAAK,EAExB,GADA2rB,GAAa3rB,EAAQ,CAAC,EAClByxB,EAAQ,CACV,GAAI,CAACrI,GAAOqI,EAAO,KAAMnxB,EAAK,IAAI,EAChC,OAAAmxB,EAAO,QAAU,GACVA,EAETzH,EAAMhqB,CAAK,EAAIM,CACjB,MACE0pB,EAAM,KAAK1pB,CAAI,EAEjB,OAAAA,EAAK,MAAQA,EAAK,KAAK,EACvBA,EAAK,QAAU,GACRA,CACT,CACA,SAASoxB,GAAQC,EAAiBC,EAAM,CACtC,IAAItxB,EAAOixB,GAAc,CACvB,KAAMI,EACN,KAAMC,CACR,CAAC,EACD,OAAOtxB,EAAK,KACd,CACA,SAASuxB,GAAOvT,EAAc,CAC5B,OAAOoT,GAAQ,UAAY,CACzB,OAAOxF,GAAU5N,CAAY,CAC/B,EAAG,CAAC,CAAC,CACP,CACA,SAASwT,GAAWphC,EAAS,CAC3B,IAAI8gC,EAAO/F,GAAmB,EAC1BsG,EAAYrhC,EAAQ,KACpB65B,EAAWiH,EAAK,IAChBQ,EACJ,OAAID,KAAaxH,GACfyH,EAAoBzH,EAASwH,CAAS,EACtCC,EAAkB,MAAM,OAExBthC,EAAQ,KAEVuhC,GAAU,UAAY,CACpB,OAAAvhC,EAAQ,SAAS8gC,CAAI,EACd,UAAY,CACjB9gC,EAAQ,WAAW8gC,CAAI,CACzB,CACF,EAAG,CAAC,CAAC,EACE9gC,EAAQ,IAAI8gC,CAAI,CACzB,CACA,SAASU,GAASC,EAAI,CACpB,IAAIX,EAAO/F,GAAmB,EAC1BzrB,EAAQ0rB,GAAc,EACtBsD,EAAOwC,EAAK,EAChB,OAAAD,GAAc,CACZ,KAAM,UAAY,CAChBvC,EAAK,MAAMhvB,CAAK,EAAI,WAAWmyB,CAAE,EAAIA,EAAG,EAAIA,CAC9C,EACA,KAAM,CAAC,CACT,CAAC,EACM,CAACnD,EAAK,MAAMhvB,CAAK,EAAG,SAAUoyB,EAAW,CAC9C,IAAInqB,EACJ,OAAO+mB,EAAK,UAAU/mB,EAAK,CAAC,EAAGA,EAAGjI,CAAK,EAAIoyB,EAAWnqB,EAAG,CAC3D,CAAC,CACH,CACA,SAASgqB,GAAUI,EAAQT,EAAMU,EAAS,CACxC,IAAId,EAAO/F,GAAmB,EAC1BnrB,EAAOixB,GAAc,CACvB,KAAM,UAAY,CAChB,OAAOc,CACT,EACA,KAAMT,CACR,CAAC,EACGW,EAAUD,EAAUd,EAAK,OAASA,EAAK,MACvClxB,EAAK,QACPiyB,EAAQ,KAAK,UAAY,CACvB,OAAAjyB,EAAK,QAAUA,EAAK,OAAO,EAC3BA,EAAK,OAAS+xB,EAAO,EACd/xB,EAAK,MACd,CAAC,EAEDiyB,EAAQ,KAAK,UAAY,CACvB,OAAOjyB,EAAK,MACd,CAAC,CAEL,CACA,SAASkyB,GAAoBnI,EAAKgC,EAAMuF,EAAM,CAC5CK,GAAU,UAAY,CACsB5H,IAAIgC,EAAK,CAAC,CACtD,EAAGuF,EAAM,EAAI,CACf,CAEA,IAAI,GAAU,eCrpCd,SAASa,GAAIl2B,EAAQm2B,EAAeC,EAAYtL,EAAWhW,EAAG/K,EAAG,CAC/D,QAASd,EAAI,EAAGA,EAAI6L,EAAG,EAAE7L,EAAG,CAC1B,IAAIhE,EAAImxB,EAAantB,EAAI6L,EACrBuhB,EAAQvL,EAAY7hB,EAAI6L,EAC5B9U,EAAOiF,CAAC,GAAKjF,EAAOq2B,CAAK,EAAItsB,EAC7BosB,EAAclxB,CAAC,GAAKkxB,EAAcE,CAAK,EAAItsB,CAC7C,CACF,CAEA,SAASusB,GAAKt2B,EAAQm2B,EAAeC,EAAYtL,EAAWhW,EAAG,CAC7D,QAAS7L,EAAI,EAAGA,EAAI6L,EAAG,EAAE7L,EAAG,CAC1B,IAAIhE,EAAImxB,EAAantB,EAAI6L,EACrBuhB,EAAQvL,EAAY7hB,EAAI6L,EACxBpT,EAAI1B,EAAOiF,CAAC,EACZsxB,EAAKJ,EAAclxB,CAAC,EACxBjF,EAAOiF,CAAC,EAAIjF,EAAOq2B,CAAK,EACxBr2B,EAAOq2B,CAAK,EAAI30B,EAChBy0B,EAAclxB,CAAC,EAAIkxB,EAAcE,CAAK,EACtCF,EAAcE,CAAK,EAAIE,CACzB,CACF,CAEA,SAASC,GAAOx2B,EAAQm2B,EAAeC,EAAYthB,EAAG/K,EAAG,CACvD,QAASd,EAAI,EAAGA,EAAI6L,EAAG,EAAE7L,EAAG,CAC1B,IAAIhE,EAAImxB,EAAantB,EAAI6L,EACzB9U,EAAOiF,CAAC,GAAK8E,EACbosB,EAAclxB,CAAC,GAAK8E,CACtB,CACF,CAWA,SAAS0sB,GAAgBz2B,EAAQiT,EAAG,EAAG,CACjC,IAAM,SACR,EAAI,KAAK,KAAKjT,EAAO,MAAM,GAK7B,QAFI02B,EAAY12B,EAAO,MAAM,EAEpB,EAAI,EAAG,EAAI,EAAG,EAAE,EACvB02B,EAAU,EAAI,EAAIzjB,EAAI,CAAC,EAAI,EAC3ByjB,GAAWzjB,EAAI,GAAK,EAAI,CAAC,EAAI,EAG/B,OAAAyjB,GAAWzjB,EAAI,IAAM,EAAI,EAAE,EAAI,EACxByjB,CACT,CAKA,SAASC,GAAO32B,EAAQ8U,EAAG,CACrBA,IAAM,SACRA,EAAI,KAAK,KAAK9U,EAAO,MAAM,GAM7B,QAHI02B,EAAY12B,EAAO,MAAM,EACzBm2B,EAAgBS,GAAqB9hB,CAAC,EAEjC,EAAI,EAAG,EAAIA,EAAG,EAAE,EAAG,CAE1B,IAAI+hB,EAAgB/hB,EAAI,EAAI,EAE5B,GAAI,CAAC/E,GAAS2mB,EAAUG,CAAa,EAAGttB,EAAQ,GAE9C,QAASS,EAAI,EAAI,EAAGA,EAAI8K,EAAG,EAAE9K,EAC3B,GAAI0sB,EAAU5hB,EAAI,EAAI9K,CAAC,EAAG,CACxBssB,GAAKI,EAAWP,EAAe,EAAGnsB,EAAG8K,CAAC,EACtC,KACF,EAIJ,GAAI,CAAC/E,GAAS2mB,EAAUG,CAAa,EAAGttB,EAAQ,EAE9C,MAAO,CAAC,EAGVitB,GAAOE,EAAWP,EAAe,EAAGrhB,EAAG4hB,EAAUG,CAAa,CAAC,EAE/D,QAAS7sB,EAAI,EAAGA,EAAI8K,EAAG,EAAE9K,EAAG,CAC1B,IAAI8sB,EAAmB9sB,EACnB+sB,EAAc/sB,EAAI,EAAI8K,EACtB7X,EAASy5B,EAAUK,CAAW,EAE9B,CAAChnB,GAAS9S,EAAQsM,EAAQ,GAAK,IAAMS,GAIzCksB,GAAIQ,EAAWP,EAAeW,EAAkB,EAAGhiB,EAAG,CAAC7X,CAAM,CAC/D,CACF,CAEA,OAAOk5B,CACT,CAKA,SAASa,GAAUh3B,EAAQ8U,EAAG,CACxBA,IAAM,SACRA,EAAI,KAAK,KAAK9U,EAAO,MAAM,GAK7B,QAFI02B,EAAY,CAAC,EAERztB,EAAI,EAAGA,EAAI6L,EAAG,EAAE7L,EACvB,QAASe,EAAI,EAAGA,EAAI8K,EAAG,EAAE9K,EACvB0sB,EAAU1sB,EAAI8K,EAAI7L,CAAC,EAAIjJ,EAAO8U,EAAI7L,EAAIe,CAAC,EAI3C,OAAO0sB,CACT,CAKA,SAASO,GAAUj3B,EAAQ8U,EAAG,CACxBA,IAAM,SACRA,EAAI,KAAK,KAAK9U,EAAO,MAAM,GAM7B,QAHIk3B,EAAe,CAAC,EAChBC,EAAIn3B,EAAO8U,EAAIA,EAAI,CAAC,EAEf,EAAI,EAAG,EAAIA,EAAI,EAAG,EAAE,EAC3BoiB,EAAa,CAAC,EAAIl3B,EAAO8U,GAAKA,EAAI,GAAK,CAAC,EAAIqiB,EAG9C,OAAAD,EAAapiB,EAAI,CAAC,EAAI,EACfoiB,CACT,CAKA,SAASE,GAAgB1tB,EAAKoL,EAAG,CAG/B,QAFI4hB,EAAYE,GAAqB9hB,CAAC,EAE7B7L,EAAI,EAAGA,EAAI6L,EAAI,EAAG,EAAE7L,EAC3BytB,EAAU5hB,GAAKA,EAAI,GAAK7L,CAAC,EAAIS,EAAIT,CAAC,GAAK,EAGzC,OAAOytB,CACT,CAKA,SAASW,GAAsBr3B,EAAQ8U,EAAG,CAGxC,QAFI4hB,EAAY12B,EAAO,MAAM,EAEpBiJ,EAAIjJ,EAAO,OAAQiJ,EAAI6L,EAAI,EAAG,EAAE7L,EACvCytB,EAAUztB,CAAC,EAAI,EAGjB,OAAAytB,EAAU5hB,EAAI,CAAC,EAAI,EACZ4hB,CACT,CAKA,SAASY,GAAiBt3B,EAAQ8U,EAAG7B,EAAG,CAMtC,GALI6B,IAAM,SACRA,EAAI,KAAK,KAAK9U,EAAO,MAAM,GAIzB8U,IAAM7B,EACR,OAAOjT,EAMT,QAHI02B,EAAYE,GAAqB3jB,CAAC,EAClCjK,EAAS,KAAK,IAAI8L,EAAG7B,CAAC,EAEjBhK,EAAI,EAAGA,EAAID,EAAS,EAAG,EAAEC,EAAG,CACnC,QAASe,EAAI,EAAGA,EAAIhB,EAAS,EAAG,EAAEgB,EAChC0sB,EAAUztB,EAAIgK,EAAIjJ,CAAC,EAAIhK,EAAOiJ,EAAI6L,EAAI9K,CAAC,EAGzC0sB,GAAWztB,EAAI,GAAKgK,EAAI,CAAC,EAAIjT,GAAQiJ,EAAI,GAAK6L,EAAI,CAAC,EACnD4hB,GAAWzjB,EAAI,GAAKA,EAAIhK,CAAC,EAAIjJ,GAAQ8U,EAAI,GAAKA,EAAI7L,CAAC,CACrD,CAEA,OAAAytB,EAAUzjB,EAAIA,EAAI,CAAC,EAAIjT,EAAO8U,EAAIA,EAAI,CAAC,EAChC4hB,CACT,CAKA,SAASa,GAAWziB,EAAG,CAGrB,QAFI0iB,EAAW,CAAC,EAEPvlB,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACtCulB,EAASvlB,EAAK,CAAC,EAAI,UAAUA,CAAE,EAGjC,IAAIgB,EAAI2jB,GAAqB9hB,CAAC,EAC9B,OAAA0iB,EAAS,QAAQ,SAAUx3B,EAAQ,CACjCiT,EAAIwkB,GAASxkB,EAAGjT,EAAQ8U,CAAC,CAC3B,CAAC,EACM7B,CACT,CAKA,SAASwkB,GAASz3B,EAAQ03B,EAAS,EAAG,CAChC,IAAM,SACR,EAAI,KAAK,KAAK13B,EAAO,MAAM,GAG7B,IAAI02B,EAAY,CAAC,EAMbzjB,EAAIjT,EAAO,OAAS,EACpB+J,EAAI2tB,EAAQ,OAASzkB,EAEzB,GAAKA,GAEE,GAAI,CAAClJ,EACV,OAAO/J,MAFP,QAAO03B,EAKT,QAASzuB,EAAI,EAAGA,EAAI,EAAG,EAAEA,EACvB,QAASe,EAAI,EAAGA,EAAID,EAAG,EAAEC,EAAG,CAC1B0sB,EAAU1sB,EAAI,EAAIf,CAAC,EAAI,EAEvB,QAAS,EAAI,EAAG,EAAIgK,EAAG,EAAE,EAIvByjB,EAAU1sB,EAAI,EAAIf,CAAC,GAAKjJ,EAAO,EAAI,EAAIiJ,CAAC,EAAIyuB,EAAQ1tB,EAAIiJ,EAAI,CAAC,CAEjE,CAIF,OAAOyjB,CACT,CAKA,SAASiB,GAAK7mB,EAAMC,EAAM,CAIxB,QAHI/H,EAAS,KAAK,IAAI8H,EAAK,OAAQC,EAAK,MAAM,EAC1C6mB,EAAU9mB,EAAK,MAAM,EAEhB,EAAI,EAAG,EAAI9H,EAAQ,EAAE,EAC5B4uB,EAAQ,CAAC,EAAIA,EAAQ,CAAC,EAAI7mB,EAAK,CAAC,EAGlC,OAAO6mB,CACT,CAKA,SAASC,GAAM/mB,EAAMC,EAAM,CAIzB,QAHI/H,EAAS,KAAK,IAAI8H,EAAK,OAAQC,EAAK,MAAM,EAC1C6mB,EAAU9mB,EAAK,MAAM,EAEhB,EAAI,EAAG,EAAI9H,EAAQ,EAAE,EAC5B4uB,EAAQ,CAAC,EAAIA,EAAQ,CAAC,EAAI7mB,EAAK,CAAC,EAGlC,OAAO6mB,CACT,CAKA,SAASE,GAAmBvlC,EAAGwlC,EAAM,CAKnC,OAJIA,IAAS,SACXA,EAAOxlC,EAAE,SAAW,GAGlBwlC,EACK,CAACxlC,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAG,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAG,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAG,CAAC,EAG9CA,CACT,CAKA,SAASylC,GAAmBzlC,EAAGwlC,EAAM,CAKnC,OAJIA,IAAS,SACXA,EAAOxlC,EAAE,SAAW,GAGlBwlC,EACK,CAACxlC,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,EAGrCA,CACT,CAKA,SAAS0lC,GAAUj4B,EAAQ03B,EAAS,EAAG,CACjC,IAAM,SACR,EAAIA,EAAQ,QAGd,IAAIze,EAASwe,GAASz3B,EAAQ03B,EAAS,CAAC,EACpC3tB,EAAIkP,EAAO,EAAI,CAAC,EACpB,OAAOA,EAAO,IAAI,SAAUvX,EAAG,CAC7B,OAAOA,EAAIqI,CACb,CAAC,CACH,CAKA,SAASmuB,GAAUl4B,EAAQ2F,EAAK,CAC9B,OAAO8xB,GAASz3B,EAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,KAAK,IAAI2F,CAAG,EAAG,KAAK,IAAIA,CAAG,EAAG,EAAG,EAAG,CAAC,KAAK,IAAIA,CAAG,EAAG,KAAK,IAAIA,CAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAAG,CAAC,CAC9H,CAKA,SAASwyB,GAAUn4B,EAAQ2F,EAAK,CAC9B,OAAO8xB,GAASz3B,EAAQ,CAAC,KAAK,IAAI2F,CAAG,EAAG,EAAG,CAAC,KAAK,IAAIA,CAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,KAAK,IAAIA,CAAG,EAAG,EAAG,KAAK,IAAIA,CAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAAG,CAAC,CAC9H,CAKA,SAASyyB,GAAUp4B,EAAQ2F,EAAK,CAC9B,OAAO8xB,GAASz3B,EAAQq4B,GAAmB1yB,EAAK,CAAC,CAAC,CACpD,CAKA,SAAS2yB,GAAQt4B,EAAQ0L,EAAI,CAC3B,IAAIM,EAAKN,EAAG,CAAC,EACT6sB,EAAKvsB,IAAO,OAAS,EAAIA,EACzBG,EAAKT,EAAG,CAAC,EACT8sB,EAAKrsB,IAAO,OAAS,EAAIA,EACzBE,EAAKX,EAAG,CAAC,EACT+sB,EAAKpsB,IAAO,OAAS,EAAIA,EAC7B,OAAOorB,GAASz3B,EAAQ,CAACu4B,EAAI,EAAG,EAAG,EAAG,EAAGC,EAAI,EAAG,EAAG,EAAG,EAAGC,EAAI,EAAG,EAAG,EAAG,EAAG,CAAC,EAAG,CAAC,CAChF,CAKA,SAASC,GAAOhvB,EAAK/D,EAAK,CACxB,OAAOsyB,GAAUI,GAAmB1yB,EAAK,CAAC,EAAG0xB,GAAsB3tB,EAAK,CAAC,CAAC,CAC5E,CAKA,SAASivB,GAAY34B,EAAQ0L,EAAI,CAC/B,IAAIM,EAAKN,EAAG,CAAC,EACTktB,EAAK5sB,IAAO,OAAS,EAAIA,EACzBG,EAAKT,EAAG,CAAC,EACTmtB,EAAK1sB,IAAO,OAAS,EAAIA,EACzBE,EAAKX,EAAG,CAAC,EACTotB,EAAKzsB,IAAO,OAAS,EAAIA,EAC7B,OAAOorB,GAASz3B,EAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG44B,EAAIC,EAAIC,EAAI,CAAC,EAAG,CAAC,CAChF,CAKA,SAASC,GAASC,EAAStB,EAAS,CAClC,OAAOD,GAASuB,EAAStB,EAAS,CAAC,CACrC,CAKA,SAASW,GAAmB1yB,EAAKmP,EAAG,CAClC,IAAIlP,EAAM,KAAK,IAAID,CAAG,EAClBE,EAAM,KAAK,IAAIF,CAAG,EAClBsN,EAAI2jB,GAAqB9hB,CAAC,EAG9B,OAAA7B,EAAE,CAAC,EAAIrN,EACPqN,EAAE,CAAC,EAAIpN,EACPoN,EAAE6B,CAAC,EAAI,CAACjP,EACRoN,EAAE6B,EAAI,CAAC,EAAIlP,EACJqN,CACT,CAKA,SAAS2jB,GAAqB9hB,EAAG,CAI/B,QAHI9L,EAAS8L,EAAIA,EACb9U,EAAS,CAAC,EAELiJ,EAAI,EAAGA,EAAID,EAAQ,EAAEC,EAC5BjJ,EAAOiJ,CAAC,EAAIA,GAAK6L,EAAI,GAAK,EAAI,EAGhC,OAAO9U,CACT,CAKA,SAASi5B,GAAkBrU,EAAO9P,EAAG,CAInC,QAHI7B,EAAI2jB,GAAqB9hB,CAAC,EAC1B9L,EAAS,KAAK,IAAI4b,EAAM,OAAQ9P,EAAI,CAAC,EAEhC,EAAI,EAAG,EAAI9L,EAAQ,EAAE,EAC5BiK,GAAG6B,EAAI,GAAK,CAAC,EAAI8P,EAAM,CAAC,EAG1B,OAAO3R,CACT,CAKA,SAASimB,GAAmBC,EAAQrkB,EAAG,CAIrC,QAHI7B,EAAI2jB,GAAqB9hB,CAAC,EAC1B9L,EAAS,KAAK,IAAImwB,EAAO,OAAQrkB,EAAI,CAAC,EAEjC,EAAI,EAAG,EAAI9L,EAAQ,EAAE,EAC5BiK,EAAE6B,GAAKA,EAAI,GAAK,CAAC,EAAIqkB,EAAO,CAAC,EAG/B,OAAOlmB,CACT,CAKA,SAASmmB,GAAiBC,EAAMvoB,EAAMC,EAAMuoB,EAAMC,EAAUC,EAAUC,EAAUC,EAAU,CACxF,IAAIC,EAAKN,EAAK,CAAC,EACXO,EAAKP,EAAK,CAAC,EACXn1B,EAAK4M,EAAK,CAAC,EACX3M,EAAK2M,EAAK,CAAC,EACX1M,EAAK2M,EAAK,CAAC,EACX1M,EAAK0M,EAAK,CAAC,EACX8oB,EAAKP,EAAK,CAAC,EACXQ,EAAKR,EAAK,CAAC,EACXS,EAAKR,EAAS,CAAC,EACfS,EAAKT,EAAS,CAAC,EACfU,EAAKT,EAAS,CAAC,EACfU,EAAKV,EAAS,CAAC,EACfW,EAAKV,EAAS,CAAC,EACfW,EAAKX,EAAS,CAAC,EACfY,EAAKX,EAAS,CAAC,EACfY,EAAKZ,EAAS,CAAC,EACf15B,EAAS,CAAC25B,EAAI,EAAGz1B,EAAI,EAAGE,EAAI,EAAGy1B,EAAI,EAAGD,EAAI,EAAGz1B,EAAI,EAAGE,EAAI,EAAGy1B,EAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGH,EAAI,EAAGz1B,EAAI,EAAGE,EAAI,EAAGy1B,EAAI,EAAGD,EAAI,EAAGz1B,EAAI,EAAGE,EAAI,EAAGy1B,EAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAACC,EAAKJ,EAAI,CAACK,EAAKL,EAAI,CAACM,EAAK/1B,EAAI,CAACg2B,EAAKh2B,EAAI,CAACi2B,EAAK/1B,EAAI,CAACg2B,EAAKh2B,EAAI,CAACi2B,EAAKR,EAAI,CAACS,EAAKT,EAAI,CAACE,EAAKH,EAAI,CAACI,EAAKJ,EAAI,CAACK,EAAK91B,EAAI,CAAC+1B,EAAK/1B,EAAI,CAACg2B,EAAK91B,EAAI,CAAC+1B,EAAK/1B,EAAI,CAACg2B,EAAKP,EAAI,CAACQ,EAAKR,CAAE,EACxU3D,EAAgBQ,GAAO32B,EAAQ,CAAC,EAEpC,GAAI,CAACm2B,EAAc,OACjB,MAAO,CAAC,EAGV,IAAIzjB,EAAI+kB,GAAStB,EAAe,CAAC4D,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,CAAE,EAAG,CAAC,EACnE,OAAA5nB,EAAE,CAAC,EAAI,EACA4kB,GAAiBN,GAAUtkB,CAAC,EAAG,EAAG,CAAC,CAC5C,CAKA,SAAS6nB,GAAUppB,EAAQ,CACzB,MAAO,CAAC,EAAG,CAAC,EAAE,IAAI,SAAUlI,EAAG,CAC7B,OAAO,QAAQkI,EAAO,IAAI,SAAUzH,EAAK,CACvC,OAAOA,EAAIT,CAAC,CACd,CAAC,CAAC,CACJ,CAAC,CACH,CCrdA,IAAI,GAAW,UAAW,CACtB,UAAW,OAAO,QAAU,SAAkB4L,EAAG,CAC7C,QAAShL,EAAGZ,EAAI,EAAG6L,EAAI,UAAU,OAAQ7L,EAAI6L,EAAG7L,IAAK,CACjDY,EAAI,UAAUZ,CAAC,EACf,QAAS8L,KAAKlL,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGkL,CAAC,IAAGF,EAAEE,CAAC,EAAIlL,EAAEkL,CAAC,EAC/E,CACA,OAAOF,CACX,EACO,GAAS,MAAM,KAAM,SAAS,CACzC,EAEA,SAAS2lB,IAAe,CACpB,MAAO,CACH,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,CACb,CACJ,CACA,SAASC,GAASz1B,EAAW2E,EAAM,CAC/B,OAAIA,IAAS,SAAUA,EAAO,GACvB+wB,GAAMC,GAAM31B,EAAW2E,CAAI,CAAC,CACvC,CACA,SAASixB,GAAiB1mB,EAAI,CAC1B,OAAOumB,GAAS,iBAAiBvmB,CAAE,EAAE,SAAS,CAClD,CACA,SAAS2mB,GAAoB76B,EAAQ0J,EAAK,CACtC,IAAIoxB,EAAM7C,GAAUj4B,EAAQ,CAAC0J,EAAI,CAAC,EAAGA,EAAI,CAAC,GAAK,EAAGA,EAAI,CAAC,GAAK,EAAG,CAAC,EAAG,CAAC,EAChEytB,EAAI2D,EAAI,CAAC,GAAK,EAClB,MAAO,CACHA,EAAI,CAAC,EAAI3D,EACT2D,EAAI,CAAC,EAAI3D,EACT2D,EAAI,CAAC,EAAI3D,CACb,CACJ,CACA,SAAS4D,GAAqB7mB,EAAI8D,EAAW,CACrCA,IAAc,SAAUA,EAAY,SAAS,MAGjD,QAFI/a,EAASiX,EACTlU,EAASw6B,GAAa,EACnBv9B,GAAQ,CACX,IAAI+H,EAAY,iBAAiB/H,CAAM,EAAE,UAEzC,GADA+C,EAAS+4B,GAAS0B,GAASz1B,CAAS,EAAGhF,CAAM,EACzC/C,IAAW+a,EACX,MAEJ/a,EAASA,EAAO,aACpB,CACA,OAAA+C,EAAS22B,GAAO32B,EAAQ,CAAC,EACzBA,EAAO,EAAE,EAAI,EACbA,EAAO,EAAE,EAAI,EACbA,EAAO,EAAE,EAAI,EACNA,CACX,CACA,SAAS06B,GAAMM,EAAa,CACxB,IAAI/9B,EAASu9B,GAAa,EAC1B,OAAAQ,EAAY,QAAQ,SAAUj3B,EAAM,CAChC,IAAIk3B,EAAiBl3B,EAAK,eAAgBm3B,EAAgBn3B,EAAK,cAC1Dk3B,IAGLh+B,EAASg+B,EAAeh+B,EAAQi+B,CAAa,EACjD,CAAC,EACMj+B,CACX,CACA,SAAS09B,GAAM31B,EAAW2E,EAAM,CACxBA,IAAS,SAAUA,EAAO,GAC9B,IAAIwxB,EAAa1wB,GAAQzF,CAAS,EAAIA,EAAYkI,GAAWlI,CAAS,EACtE,OAAOm2B,EAAW,IAAI,SAAUtmB,EAAG,CAC/B,IAAInJ,EAAK0B,GAAayH,CAAC,EAAGjhB,EAAO8X,EAAG,OAAQna,EAAQma,EAAG,MACnDuvB,EAAiB,KACjBG,EAAexnC,EACfsnC,EAAgB,GACpB,GAAItnC,IAAS,aAAeA,IAAS,cAAgBA,IAAS,cAAe,CACzE,IAAIynC,EAAa7wB,GAASb,CAAI,EAAI,GAAS,GAAS,CAAC,EAAGA,CAAI,EAAG,CAAE,KAAMA,EAAK,GAAG,CAAE,CAAC,EAAI,CAClF,IAAKA,EACL,KAAMA,CACV,EACIqC,EAAKmB,GAAW5b,CAAK,EAAE,IAAI,SAAUmQ,EAAGuH,EAAG,CAC3C,OAAIA,IAAM,GAAK,OAAQoyB,EACnBA,EAAW,GAAG,EAAI1xB,EAAK,IAAI,EAEtBV,IAAM,GAAK,OAAQoyB,EACxBA,EAAW,GAAG,EAAI1xB,EAAK,IAAI,EAG3B0xB,EAAW,GAAG,EAAI1xB,EAAK,IAAI,EAExB0F,GAAgB3N,EAAG25B,CAAU,CACxC,CAAC,EAAGC,EAAOtvB,EAAG,CAAC,EAAGG,EAAKH,EAAG,CAAC,EAAGuvB,EAAOpvB,IAAO,OAAS,EAAIA,EAAIE,EAAKL,EAAG,CAAC,EAAGwvB,EAAOnvB,IAAO,OAAS,EAAIA,EACpG4uB,EAAiBtC,GACjBuC,EAAgB,CAACI,EAAMC,EAAMC,CAAI,CACrC,SACS5nC,IAAS,aAAc,CAC5B,IAAI6nC,EAAWjxB,GAASb,CAAI,EAAI,GAAS,CAAE,IAAKA,EAAK,IAAI,CAAE,EAAGA,CAAI,EAAI,CAClE,IAAKA,CACT,EACI4xB,EAAOlsB,GAAgB9d,EAAOkqC,CAAQ,EAC1CR,EAAiBtC,GACjBuC,EAAgB,CAAC,EAAGK,EAAM,CAAC,CAC/B,SACS3nC,IAAS,aAAc,CAC5B,IAAI4nC,EAAO,WAAWjqC,CAAK,EAC3B0pC,EAAiBtC,GACjBuC,EAAgB,CAAC,EAAG,EAAGM,CAAI,CAC/B,SACS5nC,IAAS,SAAWA,IAAS,UAAW,CAC7C,IAAIwxB,EAAKjY,GAAW5b,CAAK,EAAE,IAAI,SAAUmQ,EAAG,CAAE,OAAO,WAAWA,CAAC,CAAG,CAAC,EAAG62B,EAAKnT,EAAG,CAAC,EAAGC,EAAKD,EAAG,CAAC,EAAGoT,EAAKnT,IAAO,OAASkT,EAAKlT,EAAIE,EAAKH,EAAG,CAAC,EAAGqT,EAAKlT,IAAO,OAAS,EAAIA,EACnK0V,EAAiB3C,GACjB4C,EAAgB,CAAC3C,EAAIC,EAAIC,CAAE,CAC/B,SACS7kC,IAAS,SAAU,CACxB,IAAI2kC,EAAK,WAAWhnC,CAAK,EACzB0pC,EAAiB3C,GACjB4C,EAAgB,CAAC3C,EAAI,EAAG,CAAC,CAC7B,SACS3kC,IAAS,SAAU,CACxB,IAAI4kC,EAAK,WAAWjnC,CAAK,EACzB0pC,EAAiB3C,GACjB4C,EAAgB,CAAC,EAAG1C,EAAI,CAAC,CAC7B,SACS5kC,IAAS,SAAU,CACxB,IAAI6kC,EAAK,WAAWlnC,CAAK,EACzB0pC,EAAiB3C,GACjB4C,EAAgB,CAAC,EAAG,EAAGzC,CAAE,CAC7B,SACS7kC,IAAS,UAAYA,IAAS,WAAaA,IAAS,WAAaA,IAAS,UAAW,CAC1F,IAAI6xB,EAAKnY,GAAU/b,CAAK,EAAGic,EAAOiY,EAAG,KAAMiW,EAAYjW,EAAG,MACtD9f,EAAM6H,IAAS,MAAQkuB,EAAYA,EAAY,KAAK,GAAK,IACzD9nC,IAAS,UAAYA,IAAS,WAC9BwnC,EAAe,UACfH,EAAiB7C,IAEZxkC,IAAS,UACdqnC,EAAiB/C,GAEZtkC,IAAS,YACdqnC,EAAiB9C,IAErB+C,EAAgBv1B,CACpB,SACS/R,IAAS,WACdqnC,EAAiBlC,GACjBmC,EAAgB/tB,GAAW5b,CAAK,EAAE,IAAI,SAAUmQ,EAAG,CAAE,OAAO,WAAWA,CAAC,CAAG,CAAC,UAEvE9N,IAAS,SAAU,CACxB,IAAIqf,EAAI9F,GAAW5b,CAAK,EAAE,IAAI,SAAUmQ,EAAG,CAAE,OAAO,WAAWA,CAAC,CAAG,CAAC,EACpEu5B,EAAiBlC,GACjBmC,EAAgB,CACZjoB,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAG,EAAG,EACfA,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAG,EAAG,EACf,EAAG,EAAG,EAAG,EACTA,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAG,EAAG,CACnB,CACJ,MAEImoB,EAAe,GAEnB,MAAO,CACH,KAAMxnC,EACN,aAAcwnC,EACd,MAAO7pC,EACP,eAAgB0pC,EAChB,cAAeC,CACnB,CACJ,CAAC,CACL,CCvLA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gFAgBA,IAAI,GAAgB,SAAUzlB,EAAGjjB,EAAG,CAClC,UAAgB,OAAO,gBAAkB,CACvC,UAAW,CAAC,CACd,YAAa,OAAS,SAAUijB,EAAGjjB,EAAG,CACpCijB,EAAE,UAAYjjB,CAChB,GAAK,SAAUijB,EAAGjjB,EAAG,CACnB,QAASuiB,KAAKviB,EAAOA,EAAE,eAAeuiB,CAAC,IAAGU,EAAEV,CAAC,EAAIviB,EAAEuiB,CAAC,EACtD,EAEO,GAAcU,EAAGjjB,CAAC,CAC3B,EAEA,SAAS,GAAUijB,EAAGjjB,EAAG,CACvB,GAAcijB,EAAGjjB,CAAC,EAElB,SAASmjB,GAAK,CACZ,KAAK,YAAcF,CACrB,CAEAA,EAAE,UAAYjjB,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAKmjB,EAAG,UAAYnjB,EAAE,UAAW,IAAImjB,EACjF,CAOA,IAAIiW,GAAkB,OAAO,KAAQ,WAAa,OAAY,UAAY,CACxE,IAAI+P,EAAgB,EACpB,OAAO,SAAUznB,EAAI,CACnB,OAAOA,EAAG,eAAiBA,EAAG,aAAe,EAAEynB,EACjD,CACF,EAAE,EASEC,GAEJ,SAAUhkB,EAAQ,CAChB,GAAUgkB,EAAgBhkB,CAAM,EAMhC,SAASgkB,EAAe1Q,EAAM,CAC5B,OAAIA,IAAS,SACXA,EAAO,CAAC,GAGHtT,EAAO,KAAK,KAAMsT,EAAMU,EAAe,GAAK,IACrD,CAEA,OAAOgQ,CACT,EAAE,EAAU,EA6CZ,SAAS,GAAK3Q,EAAUC,EAAM,CAC5B,OAAOS,GAAOV,EAAUC,EAAMU,EAAe,CAC/C,CAQA,SAAegQ,GCjIf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gFAgBA,IAAI,GAAgB,SAAUnmB,EAAGjjB,EAAG,CAClC,UAAgB,OAAO,gBAAkB,CACvC,UAAW,CAAC,CACd,YAAa,OAAS,SAAUijB,EAAGjjB,EAAG,CACpCijB,EAAE,UAAYjjB,CAChB,GAAK,SAAUijB,EAAGjjB,EAAG,CACnB,QAASuiB,KAAKviB,EAAOA,EAAE,eAAeuiB,CAAC,IAAGU,EAAEV,CAAC,EAAIviB,EAAEuiB,CAAC,EACtD,EACO,GAAcU,EAAGjjB,CAAC,CAC3B,EACA,SAAS,GAAUijB,EAAGjjB,EAAG,CACvB,GAAcijB,EAAGjjB,CAAC,EAClB,SAASmjB,GAAK,CACZ,KAAK,YAAcF,CACrB,CACAA,EAAE,UAAYjjB,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAKmjB,EAAG,UAAYnjB,EAAE,UAAW,IAAImjB,EACjF,CACA,IAAI,GAAW,UAAY,CACzB,UAAW,OAAO,QAAU,SAAkBd,EAAG,CAC/C,QAAShL,EAAGZ,EAAI,EAAG6L,EAAI,UAAU,OAAQ7L,EAAI6L,EAAG7L,IAAK,CACnDY,EAAI,UAAUZ,CAAC,EACf,QAAS8L,KAAKlL,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGkL,CAAC,IAAGF,EAAEE,CAAC,EAAIlL,EAAEkL,CAAC,EAC7E,CACA,OAAOF,CACT,EACO,GAAS,MAAM,KAAM,SAAS,CACvC,EAEA,SAASgnB,GAAyBvpC,EAAG,CACnC,IAAI0lB,EAAY1lB,EAAE,UAClB,OAAI0lB,IAAc,SAAS,KAClB,CAACA,EAAU,YAAc,SAAS,gBAAgB,WAAYA,EAAU,WAAa,SAAS,gBAAgB,SAAS,EAEzH,CAACA,EAAU,WAAYA,EAAU,SAAS,CACnD,CACA,SAAS8jB,GAAwB9jB,EAAW9J,EAAU,CACpD,OAAA8J,EAAU,iBAAiB,SAAU9J,CAAQ,EACtC,UAAY,CACjB8J,EAAU,oBAAoB,SAAU9J,CAAQ,CAClD,CACF,CACA,SAAS6tB,GAAoB/jB,EAAW,CACtC,GAAKA,GAEE,GAAI,GAASA,CAAS,EAC3B,OAAO,SAAS,cAAcA,CAAS,MAFvC,QAAO,KAIT,GAAI,GAAWA,CAAS,EACtB,OAAOA,EAAU,EACZ,GAAIA,aAAqB,QAC9B,OAAOA,EACF,GAAI,YAAaA,EACtB,OAAOA,EAAU,QACZ,GAAI,UAAWA,EACpB,OAAOA,EAAU,KAErB,CAIA,IAAIgkB,GAA0B,SAAUpkB,EAAQ,CAC9C,GAAUokB,EAAYpkB,CAAM,EAC5B,SAASokB,GAAa,CACpB,IAAI5mB,EAAQwC,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,KAChE,OAAAxC,EAAM,WAAa,KACnBA,EAAM,UAAY,CAAC,EACnBA,EAAM,UAAY,EAClBA,EAAM,OAAS,EACfA,EAAM,eAAiB,CAAC,EAAG,CAAC,EAC5BA,EAAM,QAAU,GAChBA,EAAM,MAAQ,GACdA,EAAM,gBAAkB,KACxBA,EAAM,MAAQ,GACdA,EAAM,YAAc,KACpBA,EAAM,UAAY,UAAY,CAC5B,IAAIje,EAAUie,EAAM,gBAChBA,EAAM,OAAS,CAACje,GAGpBie,EAAM,KAAK,aAAc,CACvB,KAAM,SAAUyE,EAAY,CAC1BzE,EAAM,YAAY,CAChB,UAAWje,EAAQ,UACnB,WAAY0iB,CACd,CAAC,CACH,CACF,CAAC,CACH,EACOzE,CACT,CAGA,IAAIH,EAAU+mB,EAAW,UACzB,OAAA/mB,EAAQ,UAAY,SAAU3iB,EAAG6E,EAAS,CACxC,IAAI6gB,EAAY+jB,GAAoB5kC,EAAQ,SAAS,EACrD,GAAI,CAAC6gB,EAAW,CACd,KAAK,MAAQ,GACb,MACF,CACA,IAAI1S,EAAM,EACND,EAAO,EACPpE,EAAQ,EACR7D,EAAS,EACb,GAAI4a,IAAc,SAAS,KACzB/W,EAAQ,OAAO,WACf7D,EAAS,OAAO,gBACX,CACL,IAAIwB,EAAOoZ,EAAU,sBAAsB,EAC3C1S,EAAM1G,EAAK,IACXyG,EAAOzG,EAAK,KACZqC,EAAQrC,EAAK,MACbxB,EAASwB,EAAK,MAChB,CACA,KAAK,MAAQ,GACb,KAAK,UAAY,CAACtM,EAAE,QAASA,EAAE,OAAO,EACtC,KAAK,WAAa,CAChB,IAAKgT,EACL,KAAMD,EACN,MAAOpE,EACP,OAAQ7D,CACV,EACA,KAAK,eAAiB,KAAK,mBAAmB,CAAC,EAAG,CAAC,EAAGjG,CAAO,EAC7D,KAAK,gBAAkBA,EACvB,KAAK,qBAAqBA,CAAO,CACnC,EACA8d,EAAQ,KAAO,SAAU3iB,EAAG6E,EAAS,CAEnC,GADA,aAAa,KAAK,MAAM,EACpB,EAAC,KAAK,MAGV,KAAIqf,EAAUlkB,EAAE,QACdmkB,EAAUnkB,EAAE,QACVoZ,EAAKvU,EAAQ,UACfyqB,EAAYlW,IAAO,OAAS,EAAIA,EAC9BM,EAAK,KACPiwB,EAAajwB,EAAG,WAChBkwB,EAAYlwB,EAAG,UACjB,KAAK,gBAAkB7U,EACvB,IAAIglC,EAAY,CAAC,EAAG,CAAC,EAmBrB,OAlBIF,EAAW,IAAMxlB,EAAUmL,GACzBsa,EAAU,CAAC,EAAID,EAAW,KAAOxlB,EAAUylB,EAAU,CAAC,KACxDC,EAAU,CAAC,EAAI,IAERF,EAAW,IAAMA,EAAW,OAASxlB,EAAUmL,IACpDsa,EAAU,CAAC,EAAID,EAAW,IAAMA,EAAW,QAAUxlB,EAAUylB,EAAU,CAAC,KAC5EC,EAAU,CAAC,EAAI,GAGfF,EAAW,KAAOzlB,EAAUoL,GAC1Bsa,EAAU,CAAC,EAAID,EAAW,MAAQzlB,EAAU0lB,EAAU,CAAC,KACzDC,EAAU,CAAC,EAAI,IAERF,EAAW,KAAOA,EAAW,MAAQzlB,EAAUoL,IACpDsa,EAAU,CAAC,EAAID,EAAW,KAAOA,EAAW,OAASzlB,EAAU0lB,EAAU,CAAC,KAC5EC,EAAU,CAAC,EAAI,GAGf,CAACA,EAAU,CAAC,GAAK,CAACA,EAAU,CAAC,EACxB,GAEF,KAAK,cAAc,GAAS,GAAS,CAAC,EAAGhlC,CAAO,EAAG,CACxD,UAAWglC,EACX,WAAY7pC,EACZ,OAAQ,EACV,CAAC,CAAC,EACJ,EAGA2iB,EAAQ,YAAc,SAAU9d,EAAS,CACvC,IAAIie,EAAQ,KACZ,GAAI,KAAK,QACP,MAAO,GAET,IAAI1J,EAAKvU,EAAQ,cACf0xB,EAAgBnd,IAAO,OAAS,KAAK,eAAiBA,EACtDywB,EAAYhlC,EAAQ,UACpB6U,EAAK7U,EAAQ,aACbilC,EAAepwB,IAAO,OAAS,EAAIA,EACnC6N,EAAa1iB,EAAQ,WACrBkiB,EAASliB,EAAQ,OACfklC,EAAgB,KAAK,mBAAmBF,GAAa,CAAC,EAAG,CAAC,EAAGhlC,CAAO,EACpE+O,EAAUm2B,EAAc,CAAC,EAAIxT,EAAc,CAAC,EAC5C1iB,EAAUk2B,EAAc,CAAC,EAAIxT,EAAc,CAAC,EAC5CyT,EAAgBH,GAAa,CAACj2B,EAAU,KAAK,IAAIA,CAAO,EAAIA,EAAU,EAAGC,EAAU,KAAK,IAAIA,CAAO,EAAIA,EAAU,CAAC,EAGtH,OAFA,KAAK,eAAiBk2B,EACtB,KAAK,MAAQ,GACT,CAACn2B,GAAW,CAACC,EACR,IAKT,KAAK,KAAK,OAAQ,CAChB,QAASm2B,EAAc,CAAC,EAAIp2B,EAAU,EACtC,QAASo2B,EAAc,CAAC,EAAIn2B,EAAU,EACtC,WAAY0T,CACd,CAAC,EACGuiB,GAAgB/iB,IAClB,aAAa,KAAK,MAAM,EACxB,KAAK,OAAS,OAAO,WAAW,UAAY,CAC1CjE,EAAM,cAAcje,CAAO,CAC7B,EAAGilC,CAAY,GAEV,GACT,EAIAnnB,EAAQ,QAAU,UAAY,CAC5B,KAAK,MAAQ,GACb,KAAK,MAAQ,GACb,aAAa,KAAK,MAAM,EACxB,KAAK,uBAAuB,CAC9B,EACAA,EAAQ,mBAAqB,SAAUknB,EAAWhlC,EAAS,CACzD,IAAI6gB,EAAY7gB,EAAQ,UACtBuU,EAAKvU,EAAQ,kBACbolC,EAAoB7wB,IAAO,OAASmwB,GAA2BnwB,EACjE,OAAO6wB,EAAkB,CACvB,UAAWR,GAAoB/jB,CAAS,EACxC,UAAWmkB,CACb,CAAC,CACH,EACAlnB,EAAQ,cAAgB,SAAU9d,EAAS,CACzC,IAAIie,EAAQ,KACR1J,EACAsM,EAAY7gB,EAAQ,UACtBglC,EAAYhlC,EAAQ,UACpBilC,EAAejlC,EAAQ,aACvBqlC,EAAYrlC,EAAQ,UACpBkiB,EAASliB,EAAQ,OACjB0iB,EAAa1iB,EAAQ,WACvB,GAAI,GAAC,KAAK,OAASkiB,GAAU,KAAK,SAGlC,KAAIojB,EAAU1uB,GAAI,EACd2uB,EAAW,KAAK,IAAIN,EAAe,KAAK,UAAYK,EAAS,CAAC,EAClE,GAAIC,EAAW,EACb,oBAAa,KAAK,MAAM,EACxB,KAAK,OAAS,OAAO,WAAW,UAAY,CAC1CtnB,EAAM,cAAcje,CAAO,CAC7B,EAAGulC,CAAQ,EACJ,GAET,KAAK,UAAYD,EACjB,IAAI5T,EAAgB,KAAK,mBAAmBsT,EAAWhlC,CAAO,EAC9D,KAAK,eAAiB0xB,EAClBxP,IACF,KAAK,QAAU,IAGZmjB,IACH,KAAK,MAAQ,IAEf,IAAIrqC,EAAQ,CACV,UAAW4pC,GAAoB/jB,CAAS,EACxC,UAAWmkB,EACX,WAAYtiB,CACd,EACA,OAACnO,EAAKvU,EAAQ,iBAAmB,MAAQuU,IAAO,QAAkBA,EAAG,KAAKvU,EAAShF,CAAK,EAIxF,KAAK,KAAK,SAAUA,CAAK,EACzB,KAAK,QAAU,GACRqqC,GAAa,KAAK,YAAY,GAAS,GAAS,CAAC,EAAGrlC,CAAO,EAAG,CACnE,cAAe0xB,EACf,UAAWsT,EACX,WAAYtiB,CACd,CAAC,CAAC,EACJ,EACA5E,EAAQ,qBAAuB,SAAU9d,EAAS,CAChD,KAAK,uBAAuB,EAC5B,IAAIwlC,EAAmBxlC,EAAQ,iBAC/B,GAAKwlC,EAGL,KAAIzuB,EAAWyuB,IAAqB,GAAOb,GAA0Ba,EACjE3kB,EAAY+jB,GAAoB5kC,EAAQ,SAAS,EACjDwlC,IAAqB,KAAS3kB,IAAc,SAAS,MAAQA,IAAc,SAAS,iBACtF,KAAK,YAAc8jB,GAAwB,OAAQ,KAAK,SAAS,EAEjE,KAAK,YAAc5tB,EAAS8J,EAAW,KAAK,SAAS,EAEzD,EACA/C,EAAQ,uBAAyB,UAAY,CAC3C,IAAIvJ,GACHA,EAAK,KAAK,eAAiB,MAAQA,IAAO,QAAkBA,EAAG,KAAK,IAAI,EACzE,KAAK,YAAc,IACrB,EACOswB,CACT,EAAE,EAAY,EAEd,SAAeA,GCtTf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gFAcA,SAAS,IAAiB,CACxB,QAASnyB,EAAI,EAAGZ,EAAI,EAAGa,EAAK,UAAU,OAAQb,EAAIa,EAAIb,IAAKY,GAAK,UAAUZ,CAAC,EAAE,OAE7E,QAAS,EAAI,MAAMY,CAAC,EAAGE,EAAI,EAAGd,EAAI,EAAGA,EAAIa,EAAIb,IAAK,QAAS,EAAI,UAAUA,CAAC,EAAGe,EAAI,EAAGC,EAAK,EAAE,OAAQD,EAAIC,EAAID,IAAKD,IAAK,EAAEA,CAAC,EAAI,EAAEC,CAAC,EAE/H,OAAO,CACT,CAEA,SAAS4yB,GAAaprB,EAAK,CACzB,OAAOzB,GAASyB,EAAKjI,EAAQ,CAC/B,CACA,SAASszB,GAAgBC,EAAkBC,EAAkB,CAC3D,OAAOD,EAAiB,MAAM,SAAUp7B,EAAGuH,EAAG,CAC5C,OAAO2zB,GAAal7B,EAAIq7B,EAAiB9zB,CAAC,CAAC,IAAM,CACnD,CAAC,CACH,CACA,SAAS+zB,GAAYC,EAAQC,EAAQ,CACnC,MAAO,CAACN,GAAaK,EAAO,CAAC,EAAIC,EAAO,CAAC,CAAC,GAAK,CAACN,GAAaK,EAAO,CAAC,EAAIC,EAAO,CAAC,CAAC,CACpF,CACA,SAAS,GAAKjvB,EAAK,CACjB,OAAOA,EAAI,OAAO,SAAUkE,EAAM5P,EAAS,CACzC,OAAA4P,EAAK,KAAK,MAAMA,EAAM5P,CAAO,EACtB4P,CACT,EAAG,CAAC,CAAC,CACP,CAWA,SAASgrB,GAAYhsB,EAAQ,CAC3B,OAAIA,EAAO,OAAS,EACX,EAGF,KAAK,IAAIT,GAAIS,EAAO,IAAI,SAAUisB,EAAOn0B,EAAG,CACjD,IAAIo0B,EAAYlsB,EAAOlI,EAAI,CAAC,GAAKkI,EAAO,CAAC,EACzC,OAAOisB,EAAM,CAAC,EAAIC,EAAU,CAAC,EAAIA,EAAU,CAAC,EAAID,EAAM,CAAC,CACzD,CAAC,CAAC,CAAC,EAAI,CACT,CAMA,SAASE,GAAUnsB,EAAQvS,EAAM,CAC/B,IAAIqC,EAAQrC,EAAK,MACbxB,EAASwB,EAAK,OACdyG,EAAOzG,EAAK,KACZ0G,EAAM1G,EAAK,IAEX8M,EAAK6xB,GAAWpsB,CAAM,EACtBqsB,EAAO9xB,EAAG,KACV+xB,EAAO/xB,EAAG,KACVgyB,EAAOhyB,EAAG,KACViyB,EAAOjyB,EAAG,KAEVic,EAAS1mB,GAASy8B,EAAOF,GACzB5V,EAASxqB,GAAUugC,EAAOF,GAC9B,OAAOtsB,EAAO,IAAI,SAAUisB,EAAO,CACjC,MAAO,CAAC/3B,GAAQ+3B,EAAM,CAAC,EAAII,GAAQ7V,EAAQriB,GAAO83B,EAAM,CAAC,EAAIK,GAAQ7V,CAAM,CAC7E,CAAC,CACH,CAMA,SAAS2V,GAAWpsB,EAAQ,CAC1B,IAAIysB,EAAKzsB,EAAO,IAAI,SAAUisB,EAAO,CACnC,OAAOA,EAAM,CAAC,CAChB,CAAC,EACGS,EAAK1sB,EAAO,IAAI,SAAUisB,EAAO,CACnC,OAAOA,EAAM,CAAC,CAChB,CAAC,EACD,MAAO,CACL,KAAM,KAAK,IAAI,MAAM,KAAMQ,CAAE,EAC7B,KAAM,KAAK,IAAI,MAAM,KAAMC,CAAE,EAC7B,KAAM,KAAK,IAAI,MAAM,KAAMD,CAAE,EAC7B,KAAM,KAAK,IAAI,MAAM,KAAMC,CAAE,CAC/B,CACF,CASA,SAASC,GAASp0B,EAAKyH,EAAQ4sB,EAAa,CAC1C,IAAI94B,EAAIyE,EAAI,CAAC,EACTxE,EAAIwE,EAAI,CAAC,EAETgC,EAAK6xB,GAAWpsB,CAAM,EACtBqsB,EAAO9xB,EAAG,KACVgyB,EAAOhyB,EAAG,KAEVsyB,EAAQ,CAAC,CAACR,EAAMt4B,CAAC,EAAG,CAACw4B,EAAMx4B,CAAC,CAAC,EAC7B+4B,EAAmBC,GAAmBF,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EACxDG,EAAQC,GAAajtB,CAAM,EAC3BktB,EAAuB,CAAC,EAiC5B,GAhCAF,EAAM,QAAQ,SAAUG,EAAM,CAC5B,IAAIC,EAAkBL,GAAmBI,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,EACrDE,EAAgBF,EAAK,CAAC,EAE1B,GAAIzB,GAAgBoB,EAAkBM,CAAe,EACnDF,EAAqB,KAAK,CACxB,IAAK30B,EACL,KAAM40B,EACN,KAAM,MACR,CAAC,MACI,CACL,IAAIG,EAAUC,GAAiBC,GAAiCV,EAAkBM,CAAe,EAAG,CAACP,EAAOM,CAAI,CAAC,EACjHG,EAAQ,QAAQ,SAAUrB,EAAO,CAC3BkB,EAAK,KAAK,SAAUM,EAAW,CACjC,OAAO5B,GAAY4B,EAAWxB,CAAK,CACrC,CAAC,EACCiB,EAAqB,KAAK,CACxB,IAAKjB,EACL,KAAMkB,EACN,KAAM,OACR,CAAC,EACQ1B,GAAa4B,EAAc,CAAC,EAAIt5B,CAAC,IAAM,GAChDm5B,EAAqB,KAAK,CACxB,IAAKjB,EACL,KAAMkB,EACN,KAAM,cACR,CAAC,CAEL,CAAC,CACH,CACF,CAAC,EAEG,CAACP,GAEC,GAAKM,EAAsB,SAAUtpB,EAAG,CAC1C,OAAOA,EAAE,CAAC,IAAM9P,CAClB,CAAC,EACC,MAAO,GAIX,IAAI45B,EAAoB,EACpBC,EAAO,CAAC,EACZ,OAAAT,EAAqB,QAAQ,SAAU3yB,EAAI,CACzC,IAAIhC,EAAMgC,EAAG,IACTyI,EAAOzI,EAAG,KACV4yB,EAAO5yB,EAAG,KAEd,GAAI,EAAAhC,EAAI,CAAC,EAAIzE,GAIb,GAAIkP,IAAS,eACX,EAAE0qB,MACG,IAAI1qB,IAAS,OAClB,OACK,GAAIA,IAAS,QAAS,CAC3B,IAAIipB,EAAQ,GAAKkB,EAAM,SAAUM,EAAW,CAC1C,OAAOA,EAAU,CAAC,IAAM15B,CAC1B,CAAC,EACG65B,EAAYD,EAAKp1B,EAAI,CAAC,CAAC,EACvBmsB,EAAYuH,EAAM,CAAC,EAAIl4B,EAAI,EAAI,GAE9B65B,EAEMA,IAAclJ,GACvB,EAAEgJ,EAFFC,EAAKp1B,EAAI,CAAC,CAAC,EAAImsB,CAInB,EACF,CAAC,EACMgJ,EAAoB,IAAM,CACnC,CAOA,SAASG,GAAgCtzB,EAAIhC,EAAK,CAChD,IAAInX,EAAImZ,EAAG,CAAC,EACRlZ,EAAIkZ,EAAG,CAAC,EACRlI,EAAIkI,EAAG,CAAC,EACZ,OAAQnZ,EAAImX,EAAI,CAAC,EAAIlX,EAAIkX,EAAI,CAAC,EAAIlG,IAAMjR,EAAIA,EAAIC,EAAIA,EACtD,CAOA,SAAS0rC,GAAmBjB,EAAQC,EAAQ,CAC1C,IAAIh5B,EAAK+4B,EAAO,CAAC,EACb94B,EAAK84B,EAAO,CAAC,EACb74B,EAAK84B,EAAO,CAAC,EACb74B,EAAK64B,EAAO,CAAC,EAGbz3B,EAAKrB,EAAKF,EACVwB,EAAKrB,EAAKF,EAEV,KAAK,IAAIsB,CAAE,EAAI8D,KACjB9D,EAAK,GAGH,KAAK,IAAIC,CAAE,EAAI6D,KACjB7D,EAAK,GAKP,IAAInT,EAAI,EACJC,EAAI,EACJgR,EAAI,EAER,OAAKiC,EAMOC,GAOVnT,EAAI,CAACmT,EAAKD,EACVjT,EAAI,EACJgR,EAAI,CAACjR,EAAI2R,EAAKC,IAPd3R,EAAI,EACJgR,EAAI,CAACW,GARDuB,IAEFnT,EAAI,GACJiR,EAAIU,GAcD,CAAC3R,EAAGC,EAAGgR,CAAC,CACjB,CAMA,SAASm7B,GAAiC7B,EAAkBC,EAAkB,CAC5E,IAAI5yB,EAAK2yB,EAAiB,CAAC,EACvBzyB,EAAKyyB,EAAiB,CAAC,EACvBmC,EAAKnC,EAAiB,CAAC,EACvB1yB,EAAK2yB,EAAiB,CAAC,EACvBzyB,EAAKyyB,EAAiB,CAAC,EACvBmC,EAAKnC,EAAiB,CAAC,EACvBoC,EAAUh1B,IAAO,GAAKC,IAAO,EAC7Bg1B,EAAU/0B,IAAO,GAAKC,IAAO,EAC7B+0B,EAAU,CAAC,EAEf,GAAIF,GAAWC,EACb,MAAO,CAAC,EACH,GAAID,EAAS,CAGlB,IAAIh7B,EAAK,CAAC86B,EAAK50B,EACXhG,EAAK,CAAC66B,EAAK50B,EAEf,OAAInG,IAAOE,EACF,CAAC,EAED,CAAC,CAAC,KAAWF,CAAE,EAAG,CAAC,IAAUA,CAAE,CAAC,CAE3C,SAAWi7B,EAAS,CAGlB,IAAIl7B,EAAK,CAAC+6B,EAAK90B,EACX/F,EAAK,CAAC86B,EAAK90B,EAEf,OAAIlG,IAAOE,EACF,CAAC,EAED,CAAC,CAACF,EAAI,IAAS,EAAG,CAACA,EAAI,GAAQ,CAAC,CAE3C,SAAWiG,IAAO,EAAG,CAInB,IAAIjF,EAAI,CAAC+5B,EAAK50B,EACVpF,EAAI,EAAEqF,EAAKpF,EAAIg6B,GAAM90B,EACzBi1B,EAAU,CAAC,CAACp6B,EAAGC,CAAC,CAAC,CACnB,SAAWkF,IAAO,EAAG,CAInB,IAAIlF,EAAI,CAACg6B,EAAK50B,EACVrF,EAAI,EAAEoF,EAAKnF,EAAI+5B,GAAM90B,EACzBk1B,EAAU,CAAC,CAACp6B,EAAGC,CAAC,CAAC,CACnB,SAAWmF,IAAO,EAAG,CAInB,IAAIpF,EAAI,CAACg6B,EAAK90B,EACVjF,EAAI,EAAEkF,EAAKnF,EAAIi6B,GAAM50B,EACzB+0B,EAAU,CAAC,CAACp6B,EAAGC,CAAC,CAAC,CACnB,SAAWoF,IAAO,EAAG,CAInB,IAAIrF,EAAI,CAACi6B,EAAK90B,EACVlF,EAAI,EAAEiF,EAAKlF,EAAIg6B,GAAM50B,EACzBg1B,EAAU,CAAC,CAACp6B,EAAGC,CAAC,CAAC,CACnB,KAAO,CAML,IAAID,GAAKoF,EAAK60B,EAAK50B,EAAK20B,IAAO30B,EAAKH,EAAKE,EAAKD,GAC1ClF,EAAI,EAAEiF,EAAKlF,EAAIg6B,GAAM50B,EACzBg1B,EAAU,CAAC,CAACp6B,EAAGC,CAAC,CAAC,CACnB,CAEA,OAAOm6B,EAAQ,IAAI,SAAUpmB,EAAQ,CACnC,MAAO,CAACA,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,CAC9B,CAAC,CACH,CAMA,SAASqmB,GAAsBC,EAAOC,EAAOC,EAAS,CACpD,IAAItuB,EAASwtB,GAAiCT,GAAmBqB,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAAGrB,GAAmBsB,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,CAAC,EAE5H,OAAIC,EACKf,GAAiBvtB,EAAQ,CAACouB,EAAOC,CAAK,CAAC,EAGzCruB,CACT,CACA,SAASuuB,GAAch2B,EAAK40B,EAAM,CAChC,IAAIC,EAAkBL,GAAmBI,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,EACzD,OAAO1B,GAAaoC,GAAgCT,EAAiB70B,CAAG,CAAC,IAAM,CACjF,CAMA,SAASg1B,GAAiBvtB,EAAQgtB,EAAO,CACvC,IAAIwB,EAAUxB,EAAM,IAAI,SAAUG,EAAM,CACtC,MAAO,CAAC,EAAG,CAAC,EAAE,IAAI,SAAUsB,EAAO,CACjC,MAAO,CAAC,KAAK,IAAItB,EAAK,CAAC,EAAEsB,CAAK,EAAGtB,EAAK,CAAC,EAAEsB,CAAK,CAAC,EAAG,KAAK,IAAItB,EAAK,CAAC,EAAEsB,CAAK,EAAGtB,EAAK,CAAC,EAAEsB,CAAK,CAAC,CAAC,CAC5F,CAAC,CACH,CAAC,EACGP,EAAU,CAAC,EAEf,GAAIluB,EAAO,SAAW,EAAG,CACvB,IAAIzF,EAAKyF,EAAO,CAAC,EACblM,EAAIyG,EAAG,CAAC,EACRxG,EAAIwG,EAAG,CAAC,EAEZ,GAAKkxB,GAAa33B,EAAIkM,EAAO,CAAC,EAAE,CAAC,CAAC,GAe3B,GAAI,CAACyrB,GAAa13B,EAAIiM,EAAO,CAAC,EAAE,CAAC,CAAC,EAAG,CAE1C,IAAI9L,EAAO,KAAK,IAAI,MAAM,KAAMs6B,EAAQ,IAAI,SAAUE,EAAQ,CAC5D,OAAOA,EAAO,CAAC,EAAE,CAAC,CACpB,CAAC,CAAC,EAEEC,EAAQ,KAAK,IAAI,MAAM,KAAMH,EAAQ,IAAI,SAAUE,EAAQ,CAC7D,OAAOA,EAAO,CAAC,EAAE,CAAC,CACpB,CAAC,CAAC,EAEF,GAAIjD,GAAav3B,EAAOy6B,CAAK,EAAI,EAC/B,MAAO,CAAC,EAGVT,EAAU,CAAC,CAACh6B,EAAMH,CAAC,EAAG,CAAC46B,EAAO56B,CAAC,CAAC,CAClC,MA9BqC,CAEnC,IAAII,EAAM,KAAK,IAAI,MAAM,KAAMq6B,EAAQ,IAAI,SAAUE,EAAQ,CAC3D,OAAOA,EAAO,CAAC,EAAE,CAAC,CACpB,CAAC,CAAC,EAEEE,EAAS,KAAK,IAAI,MAAM,KAAMJ,EAAQ,IAAI,SAAUE,EAAQ,CAC9D,OAAOA,EAAO,CAAC,EAAE,CAAC,CACpB,CAAC,CAAC,EAEF,GAAIjD,GAAat3B,EAAMy6B,CAAM,EAAI,EAC/B,MAAO,CAAC,EAGVV,EAAU,CAAC,CAACp6B,EAAGK,CAAG,EAAG,CAACL,EAAG86B,CAAM,CAAC,CAClC,CAgBF,CAEA,OAAKV,EAAQ,SACXA,EAAUluB,EAAO,OAAO,SAAUisB,EAAO,CACvC,IAAI4C,EAAS5C,EAAM,CAAC,EAChB6C,EAAS7C,EAAM,CAAC,EACpB,OAAOuC,EAAQ,MAAM,SAAUE,EAAQ,CACrC,MAAO,IAAKjD,GAAaoD,EAASH,EAAO,CAAC,EAAE,CAAC,CAAC,GAAK,GAAKjD,GAAaiD,EAAO,CAAC,EAAE,CAAC,EAAIG,CAAM,GAAK,GAAKpD,GAAaqD,EAASJ,EAAO,CAAC,EAAE,CAAC,CAAC,GAAK,GAAKjD,GAAaiD,EAAO,CAAC,EAAE,CAAC,EAAII,CAAM,CACpL,CAAC,CACH,CAAC,GAGIZ,EAAQ,IAAI,SAAUpmB,EAAQ,CACnC,MAAO,CAAC2jB,GAAa3jB,EAAO,CAAC,CAAC,EAAG2jB,GAAa3jB,EAAO,CAAC,CAAC,CAAC,CAC1D,CAAC,CACH,CAOA,SAASmlB,GAAajtB,EAAQ,CAC5B,OAAO,GAAeA,EAAO,MAAM,CAAC,EAAG,CAACA,EAAO,CAAC,CAAC,CAAC,EAAE,IAAI,SAAUisB,EAAOn0B,EAAG,CAC1E,MAAO,CAACkI,EAAOlI,CAAC,EAAGm0B,CAAK,CAC1B,CAAC,CACH,CAEA,SAAS8C,GAAqBC,EAASC,EAAS,CAC9C,IAAIC,EAAgBF,EAAQ,MAAM,EAC9BG,EAAgBF,EAAQ,MAAM,EAE9BhvB,GAAkBivB,CAAa,IAAM,IACvCA,EAAc,QAAQ,EAGpBjvB,GAAkBkvB,CAAa,IAAM,IACvCA,EAAc,QAAQ,EAGxB,IAAIC,EAASnC,GAAaiC,CAAa,EACnCG,EAASpC,GAAakC,CAAa,EACnCG,EAAuBF,EAAO,IAAI,SAAUhB,EAAO,CACrD,OAAOrB,GAAmBqB,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,CAC9C,CAAC,EACGmB,EAAuBF,EAAO,IAAI,SAAUhB,EAAO,CACrD,OAAOtB,GAAmBsB,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,CAC9C,CAAC,EACGmB,EAAe,CAAC,EACpBF,EAAqB,QAAQ,SAAU3D,EAAkB7zB,EAAG,CAC1D,IAAIs2B,EAAQgB,EAAOt3B,CAAC,EAChB23B,EAAiB,CAAC,EACtBF,EAAqB,QAAQ,SAAU3D,EAAkB/yB,EAAG,CAC1D,IAAI62B,EAAqBlC,GAAiC7B,EAAkBC,CAAgB,EACxF5rB,EAASutB,GAAiBmC,EAAoB,CAACtB,EAAOiB,EAAOx2B,CAAC,CAAC,CAAC,EACpE42B,EAAe,KAAK,MAAMA,EAAgBzvB,EAAO,IAAI,SAAUzH,EAAK,CAClE,MAAO,CACL,OAAQT,EACR,OAAQe,EACR,IAAKN,EACL,KAAM,cACR,CACF,CAAC,CAAC,CACJ,CAAC,EACDk3B,EAAe,KAAK,SAAUruC,EAAGC,EAAG,CAClC,OAAO,GAAQ+sC,EAAM,CAAC,EAAGhtC,EAAE,GAAG,EAAI,GAAQgtC,EAAM,CAAC,EAAG/sC,EAAE,GAAG,CAC3D,CAAC,EACDmuC,EAAa,KAAK,MAAMA,EAAcC,CAAc,EAEhD9C,GAASyB,EAAM,CAAC,EAAGe,CAAa,GAClCK,EAAa,KAAK,CAChB,OAAQ13B,EACR,OAAQ,GACR,IAAKs2B,EAAM,CAAC,EACZ,KAAM,QACR,CAAC,CAEL,CAAC,EACDiB,EAAO,QAAQ,SAAUhB,EAAOv2B,EAAG,CACjC,GAAK60B,GAAS0B,EAAM,CAAC,EAAGa,CAAa,EAIrC,KAAIS,EAAS,GACTr9B,EAAQuK,GAAU2yB,EAAc,SAAUj1B,EAAI,CAChD,IAAI0D,EAAS1D,EAAG,OAEhB,OAAI0D,IAAWnG,GACb63B,EAAS,GACF,IAGL,EAAAA,CAKN,CAAC,EAEGr9B,IAAU,KACZq9B,EAAS,GACTr9B,EAAQuK,GAAU2yB,EAAc,SAAUj1B,EAAI,CAC5C,IAAIyD,EAASzD,EAAG,OACZ0D,EAAS1D,EAAG,OAEhB,OAAIyD,IAAW,IAAMC,EAAS,IAAMnG,GAClC63B,EAAS,GACF,IAGL,EAAAA,CAKN,CAAC,GAGCr9B,IAAU,GACZk9B,EAAa,KAAK,CAChB,OAAQ,GACR,OAAQ13B,EACR,IAAKu2B,EAAM,CAAC,EACZ,KAAM,QACR,CAAC,EAEDmB,EAAa,OAAOl9B,EAAO,EAAG,CAC5B,OAAQ,GACR,OAAQwF,EACR,IAAKu2B,EAAM,CAAC,EACZ,KAAM,QACR,CAAC,EAEL,CAAC,EACD,IAAIuB,EAAW,CAAC,EAChB,OAAOJ,EAAa,OAAO,SAAUj1B,EAAI,CACvC,IAAIhC,EAAMgC,EAAG,IACTzZ,EAAMyX,EAAI,CAAC,EAAI,IAAMA,EAAI,CAAC,EAE9B,OAAIq3B,EAAS9uC,CAAG,EACP,IAGT8uC,EAAS9uC,CAAG,EAAI,GACT,GACT,CAAC,CACH,CAQA,SAAS+uC,GAAiBb,EAASC,EAAS,CAC1C,IAAIa,EAAQf,GAAqBC,EAASC,CAAO,EACjD,OAAOa,EAAM,IAAI,SAAUv1B,EAAI,CAC7B,IAAIhC,EAAMgC,EAAG,IACb,OAAOhC,CACT,CAAC,CACH,CAEA,SAASw3B,GAAgB5C,EAAM,CAC7B,IAAI5yB,EAAK4yB,EAAK,CAAC,EACX6C,EAAaz1B,EAAG,OAChB01B,EAAa11B,EAAG,OAChBM,EAAKsyB,EAAK,CAAC,EACX+C,EAAar1B,EAAG,OAChBs1B,EAAat1B,EAAG,OAapB,OAXIm1B,IAAe,KAEbA,IAAeE,GAIfF,EAAa,IAAME,IAKrBD,IAAe,KAEbA,IAAeE,GAIfF,EAAa,IAAME,EAM3B,CAQA,SAASC,GAAgBpB,EAASC,EAAS,CACzC,IAAIa,EAAQf,GAAqBC,EAASC,CAAO,EAC7CoB,EAAQ,CAAC,EACTC,EACJ,OAAAvB,GAAqBC,EAASC,CAAO,EAAE,QAAQ,SAAUr8B,EAAMkF,EAAGgF,EAAK,CACjEhF,IAAM,GAAK,CAACi4B,GAAgB,CAACjzB,EAAIhF,EAAI,CAAC,EAAGlF,CAAI,CAAC,GAChD09B,EAAO,CAAC19B,CAAI,EACZy9B,EAAM,KAAKC,CAAI,GAEfA,EAAK,KAAK19B,CAAI,CAElB,CAAC,EACMy9B,EAAM,IAAI,SAAUC,EAAM,CAC/B,OAAOA,EAAK,IAAI,SAAU/1B,EAAI,CAC5B,IAAIhC,EAAMgC,EAAG,IACb,OAAOhC,CACT,CAAC,CACH,CAAC,CACH,CAEA,SAASg4B,GAAkBvB,EAASC,EAAS38B,EAAO+9B,EAAO,CACrD/9B,IAAU,SACZA,EAAQ,GAGN+9B,IAAU,SACZA,EAAQ,CAAC,GA4DX,QAzDIG,EAAUH,EAAM,SAAW,EAC3Bx4B,EAASm3B,EAAQ,OACjB10B,EAAY00B,EAAQ18B,CAAK,EAAIA,EAAQ,EAErCm+B,EAAc,GAAezB,EAAQ,MAAM10B,CAAS,EAAG00B,EAAQ,MAAM,EAAG10B,CAAS,CAAC,EAElFD,EAAU,SAAUvC,EAAG,CACzB,IAAIg0B,EAAS2E,EAAY34B,CAAC,EAE1B,GAAI,KAAKm3B,EAAS,SAAUlD,EAAQ,CAClC,OAAOA,EAAO,CAAC,IAAMD,EAAO,CAAC,GAAKC,EAAO,CAAC,IAAMD,EAAO,CAAC,CAC1D,CAAC,EACC,MAAO,WAGT,GAAIuE,EAAM,KAAK,SAAUK,EAAU,CACjC,OAAO,KAAKA,EAAU,SAAUC,EAAW,CACzC,OAAOA,EAAU,CAAC,IAAM7E,EAAO,CAAC,GAAK6E,EAAU,CAAC,IAAM7E,EAAO,CAAC,CAChE,CAAC,CACH,CAAC,EACC,OAAI0E,EACK,WAEA,QAIX,IAAIE,EAAW,OAEXF,GACFE,EAAW,CAAC,EACZL,EAAM,KAAKK,CAAQ,GAEnBA,EAAWL,EAAMA,EAAM,OAAS,CAAC,EAGnCK,EAAS,KAAK5E,CAAM,EACpB,IAAIqB,EAAO,CAACrB,EAAQkD,EAAQ18B,EAAQ,CAAC,GAAK08B,EAAQ,CAAC,CAAC,EAChD4B,EAAa3B,EAAQ,OAAO,SAAUlD,EAAQ,CAChD,OAAOwC,GAAcxC,EAAQoB,CAAI,CACnC,CAAC,EAAE,KAAK,SAAU/rC,EAAGC,EAAG,CACtB,OAAO,QAAQyqC,EAAQ1qC,CAAC,EAAI,QAAQ0qC,EAAQzqC,CAAC,CAC/C,CAAC,EAAE,CAAC,EAEJ,GAAKuvC,EAGE,CACL,IAAIC,EAAc5B,EAAQ,QAAQ2B,CAAU,EAG5C,GAFAL,GAAkBtB,EAASD,EAAS6B,EAAaR,CAAK,EAElD,CAACG,EACH,MAAO,OAEX,KATE,QAAAD,GAAkBE,EAAaxB,EAASn3B,EAAI,EAAGu4B,CAAK,EAC7C,OASX,EAESv4B,EAAI,EAAGA,EAAID,EAAQ,EAAEC,EAAG,CAC/B,IAAI4C,EAAUL,EAAQvC,CAAC,EAEvB,GAAI4C,IAAY,QAAS,KAC3B,CAEA,OAAO21B,CACT,CAEA,SAASS,GAAmB9B,EAASC,EAAS,CAC5C,OAAOsB,GAAkBvB,EAAS,GAAeC,CAAO,EAAE,QAAQ,CAAC,CACrE,CAMA,SAAS8B,GAAkB/B,EAASC,EAAS,CAC3C,GAAI,CAACA,EAAQ,OACX,MAAO,CAAC,GAAeD,CAAO,CAAC,EAGjC,IAAIgC,EAAeZ,GAAgBpB,EAASC,CAAO,EAC/CgC,EAAiB,CAACjC,CAAO,EAC7B,OAAAgC,EAAa,QAAQ,SAAUE,EAAa,CAC1C,IAAIC,EAAkB,GAAeD,CAAW,EAAE,QAAQ,EAE1DD,EAAiB,GAAKA,EAAe,IAAI,SAAUX,EAAM,CACvD,IAAIc,EAAiBb,GAAkBD,EAAMa,CAAe,EACxDE,EAAqBD,EAAe,CAAC,EAEzC,GAAIA,EAAe,SAAW,GAAKD,EAAgB,MAAM,SAAUlF,EAAO,CACxE,OAAOoF,EAAmB,QAAQpF,CAAK,IAAM,EAC/C,CAAC,EAAG,CACF,IAAIqF,EAAcD,EAAmBA,EAAmB,OAAS,CAAC,EAE9DE,EAAa,GAAeJ,CAAe,EAAE,KAAK,SAAU/vC,EAAGC,EAAG,CACpE,OAAO,QAAQiwC,EAAalwC,CAAC,EAAI,QAAQkwC,EAAajwC,CAAC,CACzD,CAAC,EAAE,CAAC,EAEAmwC,EAAaL,EAAgB,QAAQI,CAAU,EACnDF,EAAmB,KAAK,MAAMA,EAAoB,GAAeF,EAAgB,MAAMK,CAAU,EAAGL,EAAgB,MAAM,EAAGK,CAAU,EAAG,CAACL,EAAgBK,CAAU,EAAGF,CAAW,CAAC,CAAC,CACvL,CAEA,OAAOF,CACT,CAAC,CAAC,CACJ,CAAC,EACMH,CACT,CAOA,SAASQ,GAAezC,EAASC,EAAS,CACxC,IAAIjvB,EAAS6vB,GAAiBb,EAASC,CAAO,EAC9C,OAAOjD,GAAYhsB,CAAM,CAC3B,CCntBA,IAAI,GAAgB,SAAUsE,EAAGjjB,EAAG,CAClC,UAAgB,OAAO,gBAAkB,CACvC,UAAW,CAAC,CACd,YAAa,OAAS,SAAUijB,EAAGjjB,EAAG,CACpCijB,EAAE,UAAYjjB,CAChB,GAAK,SAAUijB,EAAGjjB,EAAG,CACnB,QAASuiB,KAAKviB,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGuiB,CAAC,IAAGU,EAAEV,CAAC,EAAIviB,EAAEuiB,CAAC,EAC7E,EACO,GAAcU,EAAGjjB,CAAC,CAC3B,EACA,SAAS,GAAUijB,EAAGjjB,EAAG,CACvB,GAAI,OAAOA,GAAM,YAAcA,IAAM,KAAM,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EACnI,GAAcijB,EAAGjjB,CAAC,EAClB,SAASmjB,GAAK,CACZ,KAAK,YAAcF,CACrB,CACAA,EAAE,UAAYjjB,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAKmjB,EAAG,UAAYnjB,EAAE,UAAW,IAAImjB,EACjF,CACA,IAAI,GAAW,UAAY,CACzB,UAAW,OAAO,QAAU,SAAkBd,EAAG,CAC/C,QAAShL,EAAGZ,EAAI,EAAG6L,EAAI,UAAU,OAAQ7L,EAAI6L,EAAG7L,IAAK,CACnDY,EAAI,UAAUZ,CAAC,EACf,QAAS8L,KAAKlL,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGkL,CAAC,IAAGF,EAAEE,CAAC,EAAIlL,EAAEkL,CAAC,EAC7E,CACA,OAAOF,CACT,EACO,GAAS,MAAM,KAAM,SAAS,CACvC,EACA,SAAS,GAAOhL,EAAG,EAAG,CACpB,IAAIgL,EAAI,CAAC,EACT,QAASE,KAAKlL,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGkL,CAAC,GAAK,EAAE,QAAQA,CAAC,EAAI,IAAGF,EAAEE,CAAC,EAAIlL,EAAEkL,CAAC,GAC/F,GAAIlL,GAAK,MAAQ,OAAO,OAAO,uBAA0B,WAAY,QAAS,EAAI,EAAGkL,EAAI,OAAO,sBAAsBlL,CAAC,EAAG,EAAIkL,EAAE,OAAQ,IAClI,EAAE,QAAQA,EAAE,CAAC,CAAC,EAAI,GAAK,OAAO,UAAU,qBAAqB,KAAKlL,EAAGkL,EAAE,CAAC,CAAC,IAAGF,EAAEE,EAAE,CAAC,CAAC,EAAIlL,EAAEkL,EAAE,CAAC,CAAC,GAElG,OAAOF,CACT,CACA,IAAIguB,GAA6B,KA4CjC,SAASC,GAAcC,EAAKxhC,EAAK,CAC/B,IAAI8e,EAAW,UAAU9e,CAAG,EAC5B,OAAoB,SAAUqW,EAAQ,CACpC,GAAUorB,EAAQprB,CAAM,EACxB,SAASorB,GAAS,CAChB,IAAI5tB,EAAQwC,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,KAChE,OAAAxC,EAAM,SAAWiL,EACjBjL,EAAM,IAAM2tB,EACL3tB,CACT,CACA,OAAO4tB,CACT,EAAEH,EAAa,CACjB,CACA,SAAS,GAAOI,EAAK1hC,EAAK,CACxB,IAAI8e,EAAW,GAAU9e,CAAG,EACxB2hC,EAAQ7iB,EAAS,UACrB,OAAOwP,GAAW,SAAUh4B,EAAOi2B,EAAK,CACtC,IAAIpiB,EAAK7T,EAAM,UACb4b,EAAY/H,IAAO,OAAS,GAAKA,EACjCy3B,EAAWtrC,EAAM,SACjBgyB,EAAa,GAAOhyB,EAAO,CAAC,YAAa,UAAU,CAAC,EAClDurC,EAAY9N,GAAO,EACvB,OAAAW,GAAoBnI,EAAK,UAAY,CACnC,OAAOsV,EAAU,OACnB,EAAG,CAAC,CAAC,EACL1N,GAAU,UAAY,CACpB,IAAI2N,EAAehjB,EAAS,OAAO+iB,EAAU,QAAS,CACpD,MAAOvrC,EAAM,QACf,CAAC,EACD,OAAO,UAAY,CACjBwrC,EAAa,QAAQ,CACvB,CACF,EAAG,CAAC,CAAC,EACE,GAAcJ,EAAK,GAAS,CACjC,IAAOG,EACP,iBAAkBF,EAClB,UAAa,GAAG,OAAOzvB,EAAW,GAAG,EAAE,OAAOyvB,CAAK,CACrD,EAAGrZ,CAAU,CAAC,CAChB,CAAC,CACH,CAEA,SAAe,KC9Gf,IAAI,GAAgB,SAASpU,EAAGjjB,EAAG,CAC/B,UAAgB,OAAO,gBAClB,CAAE,UAAW,CAAC,CAAE,YAAa,OAAS,SAAUijB,EAAGjjB,EAAG,CAAEijB,EAAE,UAAYjjB,CAAG,GAC1E,SAAUijB,EAAGjjB,EAAG,CAAE,QAASuiB,KAAKviB,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGuiB,CAAC,IAAGU,EAAEV,CAAC,EAAIviB,EAAEuiB,CAAC,EAAG,EAC7F,GAAcU,EAAGjjB,CAAC,CAC7B,EAEA,SAAS,GAAUijB,EAAGjjB,EAAG,CACrB,GAAI,OAAOA,GAAM,YAAcA,IAAM,KACjC,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EAC5F,GAAcijB,EAAGjjB,CAAC,EAClB,SAASmjB,GAAK,CAAE,KAAK,YAAcF,CAAG,CACtCA,EAAE,UAAYjjB,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAKmjB,EAAG,UAAYnjB,EAAE,UAAW,IAAImjB,EACnF,CAEA,IAAI,EAAW,UAAW,CACtB,SAAW,OAAO,QAAU,SAAkBd,EAAG,CAC7C,QAAShL,EAAGZ,EAAI,EAAG6L,EAAI,UAAU,OAAQ7L,EAAI6L,EAAG7L,IAAK,CACjDY,EAAI,UAAUZ,CAAC,EACf,QAAS8L,KAAKlL,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGkL,CAAC,IAAGF,EAAEE,CAAC,EAAIlL,EAAEkL,CAAC,EAC/E,CACA,OAAOF,CACX,EACO,EAAS,MAAM,KAAM,SAAS,CACzC,EAEA,SAAS,GAAOhL,EAAG,EAAG,CAClB,IAAIgL,EAAI,CAAC,EACT,QAASE,KAAKlL,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGkL,CAAC,GAAK,EAAE,QAAQA,CAAC,EAAI,IAC9EF,EAAEE,CAAC,EAAIlL,EAAEkL,CAAC,GACd,GAAIlL,GAAK,MAAQ,OAAO,OAAO,uBAA0B,WACrD,QAAS,EAAI,EAAGkL,EAAI,OAAO,sBAAsBlL,CAAC,EAAG,EAAIkL,EAAE,OAAQ,IAC3D,EAAE,QAAQA,EAAE,CAAC,CAAC,EAAI,GAAK,OAAO,UAAU,qBAAqB,KAAKlL,EAAGkL,EAAE,CAAC,CAAC,IACzEF,EAAEE,EAAE,CAAC,CAAC,EAAIlL,EAAEkL,EAAE,CAAC,CAAC,GAE5B,OAAOF,CACX,CAEA,SAAS,GAAWyK,EAAYriB,EAAQhL,EAAKstB,EAAM,CAC/C,IAAI/b,EAAI,UAAU,OAAQmP,EAAInP,EAAI,EAAIvG,EAASsiB,IAAS,KAAOA,EAAO,OAAO,yBAAyBtiB,EAAQhL,CAAG,EAAIstB,EAAM9J,EAC3H,GAAI,OAAO,SAAY,UAAY,OAAO,QAAQ,UAAa,WAAY9C,EAAI,QAAQ,SAAS2M,EAAYriB,EAAQhL,EAAKstB,CAAI,MACxH,SAAStW,EAAIqW,EAAW,OAAS,EAAGrW,GAAK,EAAGA,KAASwM,EAAI6J,EAAWrW,CAAC,KAAG0J,GAAKnP,EAAI,EAAIiS,EAAE9C,CAAC,EAAInP,EAAI,EAAIiS,EAAExY,EAAQhL,EAAK0gB,CAAC,EAAI8C,EAAExY,EAAQhL,CAAG,IAAM0gB,GAChJ,OAAOnP,EAAI,GAAKmP,GAAK,OAAO,eAAe1V,EAAQhL,EAAK0gB,CAAC,EAAGA,CAChE,CAEA,SAAS2wB,GAASC,EAAG,CACjB,IAAI15B,EAAI,OAAO,QAAW,YAAc,OAAO,SAAUoJ,EAAIpJ,GAAK05B,EAAE15B,CAAC,EAAGZ,EAAI,EAC5E,GAAIgK,EAAG,OAAOA,EAAE,KAAKswB,CAAC,EACtB,GAAIA,GAAK,OAAOA,EAAE,QAAW,SAAU,MAAO,CAC1C,KAAM,UAAY,CACd,OAAIA,GAAKt6B,GAAKs6B,EAAE,SAAQA,EAAI,QACrB,CAAE,MAAOA,GAAKA,EAAEt6B,GAAG,EAAG,KAAM,CAACs6B,CAAE,CAC1C,CACJ,EACA,MAAM,IAAI,UAAU15B,EAAI,0BAA4B,iCAAiC,CACzF,CAEA,SAAS25B,EAAOD,EAAGzuB,EAAG,CAClB,IAAI7B,EAAI,OAAO,QAAW,YAAcswB,EAAE,OAAO,QAAQ,EACzD,GAAI,CAACtwB,EAAG,OAAOswB,EACf,IAAIt6B,EAAIgK,EAAE,KAAKswB,CAAC,EAAG5wB,EAAGiN,EAAK,CAAC,EAAGttB,EAC/B,GAAI,CACA,MAAQwiB,IAAM,QAAUA,KAAM,IAAM,EAAEnC,EAAI1J,EAAE,KAAK,GAAG,MAAM2W,EAAG,KAAKjN,EAAE,KAAK,CAC7E,OACOxf,EAAO,CAAEb,EAAI,CAAE,MAAOa,CAAM,CAAG,QACtC,CACI,GAAI,CACIwf,GAAK,CAACA,EAAE,OAASM,EAAIhK,EAAE,SAAYgK,EAAE,KAAKhK,CAAC,CACnD,QACA,CAAU,GAAI3W,EAAG,MAAMA,EAAE,KAAO,CACpC,CACA,OAAOstB,CACX,CAEA,SAAS,EAAcH,EAAIC,EAAMC,EAAM,CACnC,GAAIA,GAAQ,UAAU,SAAW,EAAG,QAAS1W,EAAI,EAAG+J,EAAI0M,EAAK,OAAQE,EAAI3W,EAAI+J,EAAG/J,KACxE2W,GAAM,EAAE3W,KAAKyW,MACRE,IAAIA,EAAK,MAAM,UAAU,MAAM,KAAKF,EAAM,EAAGzW,CAAC,GACnD2W,EAAG3W,CAAC,EAAIyW,EAAKzW,CAAC,GAGtB,OAAOwW,EAAG,OAAOG,GAAM,MAAM,UAAU,MAAM,KAAKF,CAAI,CAAC,CAC3D,CAEA,SAAS+jB,GAAS7vC,EAAM8vC,EAAM,CAC1B,OAAO,EAAS,CAAE,OAAQ,CAAC,EAAG,MAAO,CAAC,EAAG,KAAM9vC,CAAK,EAAG8vC,CAAI,CAC/D,CAEA,IAAIC,GAAc,CAAC,IAAK,IAAK,IAAK,GAAG,EACjCC,GAAa,CAAC,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,IAAI,EAC5D,SAASC,GAAajf,EAAOkf,EAAQ,CACjC,MAAO,0EAA6E,OAAO,GAAKlf,EAAO,cAAgB,EAAE,OAAO,GAAKA,EAAO,qOAAmP,EAAE,OAAOkf,EAAQ,iDAAkD,CACtc,CACA,SAASC,GAAaD,EAAQ,CAC1B,IAAI5/B,EAAK2/B,GAAa,EAAGC,CAAM,EAE3BE,EAAY,KAAK,MAAMF,EAAS,EAAE,EAAI,GAAM,IAC5CG,EAAgB,YACpB,OAAID,IAAa,IACbC,EAAgB,cAEXD,IAAa,GAClBC,EAAgB,cAEXD,IAAa,KAClBC,EAAgB,aAGb,UAAU,OAAOA,EAAe,gBAAgB,EAAE,OAAO//B,EAAI,YAAY,EAAE,OAAO+/B,EAAe,GAAG,CAC/G,CACA,IAAI,GAAQ,GAAS,EACjBC,GAAY,GAAM,QAAQ,OAC1BC,GAAeD,IAAc,UAAY,CACzC,IAAIE,EAAO,OAAO,OAAW,IAAc,CAAE,UAAW,EAAG,EAAI,OAAO,UAClEtJ,EAAM,yBAAyB,KAAKsJ,EAAK,UAAU,YAAY,CAAC,EACpE,OAAOtJ,EAAM,WAAWA,EAAI,CAAC,CAAC,EAAI,IAAM,EAC5C,EAAG,EACCuJ,GAAc,GAAM,QAAQ,KAC5BvlB,GAAiB,SAAS,GAAM,QAAQ,QAAS,EAAE,EACnDwlB,GAAYD,KAAgB,SAC5BE,GAAc,GAAM,QAAQ,SAC5BC,GAAkB,SAAS,GAAM,QAAQ,gBAAiB,EAAE,GAAK,EACjEC,GAAkBH,IAAaxlB,IAAkB,KAC7CylB,IAAeC,IAAmB,IACtCE,GAAaL,KAAgB,UAC7BM,GAAoB,SAAS,GAAM,QAAQ,cAAe,EAAE,GAAK,KAC9D7lB,IAAkB,GACrB,GAAS,YACT8lB,GAAehB,GAAW,IAAI,SAAUiB,EAAK,CAC7C,IAAIv/B,EAAM,GACND,EAAO,GACPy/B,EAAU,SACVC,EAAU,SACVC,EAAS,mDACb,OAAIH,EAAI,QAAQ,GAAG,EAAI,KACnBv/B,EAAM,QAAQ,OAAO0/B,EAAQ,GAAG,EAChCD,EAAU,UAEVF,EAAI,QAAQ,GAAG,EAAI,KACnBv/B,EAAM,YACNy/B,EAAU,OAEVF,EAAI,QAAQ,GAAG,EAAI,KACnBx/B,EAAO,SAAS,OAAO2/B,EAAQ,GAAG,EAClCF,EAAU,SAEVD,EAAI,QAAQ,GAAG,EAAI,KACnBx/B,EAAO,aACPy/B,EAAU,QAEP,oCAAqC,OAAOD,EAAK;AAAA,SAAiB,EAAE,OAAOx/B,CAAI,EAAE,OAAOC,EAAK;AAAA,2BAA8B,EAAE,OAAOw/B,EAAS,GAAG,EAAE,OAAOC,EAAS;AAAA,MAAU,CACvL,CAAC,EAAE,KAAK;AAAA,CAAI,EACRE,GAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAuhC,OAAOL,GAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAi8B,EAAE,OAAO,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,GAAG,EAAE,IAAI,SAAUd,EAAQ,CAAE,MAAO;AAAA,4BAAgC,OAAOA,EAAQ,oCAAqC,EAAE,OAAOA,EAAQ;AAAA,CAAM,EAAE,OAAOC,GAAaD,CAAM,EAAG;AAAA;AAAA,CAAO,CAAG,CAAC,EAAE,KAAK;AAAA,CAAI,EAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAub,EAAE,OAAOK,GAAe;AAAA;AAAA;AAAA,GAAyE,GAAI;AAAA,CAAI,EAC5xFe,GAAa,CACb,CAAC,EAAG,EAAG,CAAC,EACR,CAAC,EAAG,EAAG,CAAC,EACR,CAAC,EAAG,EAAG,CAAC,EACR,CAAC,EAAG,EAAG,CAAC,CACZ,EACIC,GAAkB,KAClB,GAAW,KACXC,GAAY,KACZC,GAAU,KAAK,IAAI,GAAI,EAAE,EACzBC,GAAU,CAACD,GACXE,GAAgC,CAChC,EAAG,CAAC,EAAG,EAAE,EACT,EAAG,CAAC,EAAG,CAAC,EACR,EAAG,CAAC,EAAG,CAAC,EACR,EAAG,CAAC,GAAI,CAAC,EACT,GAAI,CAAC,GAAI,EAAE,EACX,GAAI,CAAC,EAAG,EAAE,EACV,GAAI,CAAC,GAAI,CAAC,EACV,GAAI,CAAC,EAAG,CAAC,CACb,EACIC,GAAoB,CACpB,EAAG,CAAC,EAAG,CAAC,EACR,EAAG,CAAC,EAAG,CAAC,EACR,EAAG,CAAC,EAAG,CAAC,EACR,EAAG,CAAC,EAAG,CAAC,EACR,GAAI,CAAC,CAAC,EACN,GAAI,CAAC,CAAC,EACN,GAAI,CAAC,CAAC,EACN,GAAI,CAAC,CAAC,CACV,EACIC,GAAsB,CACtB,EAAG,EACH,EAAG,IACH,EAAG,IACH,EAAG,GACH,GAAI,IACJ,GAAI,GACJ,GAAI,IACJ,GAAI,GACR,EACIC,GAAmB,CACnB,oBACA,aACA,eACA,UACA,YACA,WACA,UACA,WACA,UACA,UACA,aACA,aACA,cACA,qBACA,kBACA,aACA,WACA,uBACA,eACA,gBACJ,EAEA,SAASC,GAAcrzC,EAAGi9B,EAAOzM,EAAO3I,EAASyrB,EAAWC,EAAU,CAClE,IAAIn6B,EAAIM,EACJ65B,IAAa,SAAUA,EAAW,aACtC,IAAI5sB,GAAUjN,GAAMN,EAAK6jB,EAAM,OAAOsW,CAAQ,KAAO,MAAQn6B,IAAO,OAAS,OAASA,EAAG,KAAKoX,EAAOxwB,EAAE,UAAU,KAAO,MAAQ0Z,IAAO,OAASA,EAAK,CAAC,EAClJ+U,EAAQ9H,EAAO,eAAiBA,EAAO,MACvC6sB,EAAY/kB,EAAM8kB,CAAQ,IAAM9kB,EAAM8kB,CAAQ,EAAI,CAAC,GACvD,OAAO,EAAS,EAAS,CAAC,EAAID,EAAYG,GAAgBxW,EAAOtW,CAAM,EAAIA,CAAO,EAAG,CAAE,QAAS,CAAC,CAACkB,EAAS,YAAa,GAAM,MAAO2rB,EAAW,cAAexzC,EAAE,aAAc,CAAC,CACpL,CACA,IAAI0zC,GAA6B,UAAY,CACzC,SAASA,EAAYH,EAAU,CAC3B,IAAIn6B,EACAm6B,IAAa,SAAUA,EAAW,aACtC,KAAK,SAAWA,EAChB,KAAK,MAAQ,EACb,KAAK,MAAQ,EACb,KAAK,OAAS,EACd,KAAK,OAAS,EACd,KAAK,OAAS,GACd,KAAK,OAAS,GACd,KAAK,MAAQ,CACT,UAAW,CAAC,CAChB,EACA,KAAK,OAASn6B,EAAK,CAAC,EAChBA,EAAGm6B,CAAQ,EAAI,CAAC,EAChBn6B,EACR,CACA,OAAAs6B,EAAY,UAAU,UAAY,SAAU9uB,EAAQ5kB,EAAG,CACnD,KAAK,OAAS,GACd,KAAK,OAAS,GACd,IAAI2zC,EAAgB3zC,EAAE,cACtB,YAAK,MAAQ2zC,EACRA,EAAc,KAAK,QAAQ,IAC5BA,EAAc,KAAK,QAAQ,EAAI,CAAC,GAE7B,EAAS,EAAS,CAAC,EAAG,KAAK,KAAK/uB,EAAQ5kB,EAAE,UAAU,CAAC,EAAG,CAAE,KAAM,WAAY,CAAC,CACxF,EACA0zC,EAAY,UAAU,KAAO,SAAU9uB,EAAQ2C,EAAY,CACvD,OAAO,KAAK,KAAK,CACb3C,EAAO,CAAC,EAAI,KAAK,MACjBA,EAAO,CAAC,EAAI,KAAK,KACrB,EAAG2C,CAAU,CACjB,EACAmsB,EAAY,UAAU,KAAO,SAAUljB,EAAOjJ,EAAY,CACtD,IAAIrD,EACAC,EACA4D,EAAc,GAClB,GAAI,CAAC,KAAK,OACN,KAAK,MAAQyI,EAAM,CAAC,EACpB,KAAK,MAAQA,EAAM,CAAC,EACpB,KAAK,OAASA,EAAM,CAAC,EACrB,KAAK,OAASA,EAAM,CAAC,EACrBtM,EAAUsM,EAAM,CAAC,EACjBrM,EAAUqM,EAAM,CAAC,EACjB,KAAK,OAAS,OAEb,CACD,IAAI1I,EAAa,KAAK,OACtB5D,EAAU,KAAK,MAAQsM,EAAM,CAAC,EAC9BrM,EAAU,KAAK,MAAQqM,EAAM,CAAC,GAC1BA,EAAM,CAAC,GAAKA,EAAM,CAAC,KACnB,KAAK,OAAS,IAEd,CAAC1I,GAAc,KAAK,SACpBC,EAAc,GAEtB,CACA,YAAK,MAAQ7D,EACb,KAAK,MAAQC,EACN,CACH,KAAM,OACN,QAASD,EACT,QAASC,EACT,WAAYoD,EACZ,YAAaQ,EACb,OAAQ,KAAK,OACb,MAAO7D,EAAU,KAAK,OACtB,MAAOC,EAAU,KAAK,OACtB,OAAQqM,EAAM,CAAC,EACf,OAAQA,EAAM,CAAC,EACf,MAAO,KAAK,MAAM,KAAK,QAAQ,EAC/B,cAAe,KAAK,MACpB,YAAa,GACb,YAAa,IACjB,CACJ,EACOkjB,CACX,EAAE,EAEF,SAASE,GAAyBlmC,EAAQm5B,EAAQl4B,EAAO7D,EAAQ,CAC7D,IAAI+oC,EAAOnmC,EAAO,SAAW,GACzB8U,EAAIqxB,EAAO,EAAI,EACfC,EAAQC,GAAermC,EAAQiB,EAAO7D,EAAQ0X,CAAC,EAC/CpJ,EAAK83B,EAAO4C,EAAO,CAAC,EAAGp6B,EAAKw3B,EAAO93B,EAAG,CAAC,EAAG,CAAC,EAAGxH,EAAK8H,EAAG,CAAC,EAAG7H,EAAK6H,EAAG,CAAC,EAAGG,EAAKq3B,EAAO93B,EAAG,CAAC,EAAG,CAAC,EAAGtH,EAAK+H,EAAG,CAAC,EAAG9H,EAAK8H,EAAG,CAAC,EAAGE,EAAKm3B,EAAO93B,EAAG,CAAC,EAAG,CAAC,EAAGmuB,EAAKxtB,EAAG,CAAC,EAAGytB,EAAKztB,EAAG,CAAC,EAAG+Y,EAAKoe,EAAO93B,EAAG,CAAC,EAAG,CAAC,EAAG46B,EAAKlhB,EAAG,CAAC,EAAGmhB,EAAKnhB,EAAG,CAAC,EAChNC,EAAKme,EAAOgD,GAAkBxmC,EAAQm5B,EAAQrkB,CAAC,EAAG,CAAC,EAAGgwB,EAAUzf,EAAG,CAAC,EAAG0f,EAAU1f,EAAG,CAAC,EACrFhgB,EAAO,KAAK,IAAInB,EAAIE,EAAIy1B,EAAIyM,CAAE,EAC9BhhC,EAAM,KAAK,IAAInB,EAAIE,EAAIy1B,EAAIyM,CAAE,EAC7BzG,EAAQ,KAAK,IAAI57B,EAAIE,EAAIy1B,EAAIyM,CAAE,EAC/BvG,EAAS,KAAK,IAAI57B,EAAIE,EAAIy1B,EAAIyM,CAAE,EACpCriC,EAAMA,EAAKmB,GAAS,EACpBjB,EAAMA,EAAKiB,GAAS,EACpBw0B,EAAMA,EAAKx0B,GAAS,EACpBihC,EAAMA,EAAKjhC,GAAS,EACpBlB,EAAMA,EAAKmB,GAAQ,EACnBjB,EAAMA,EAAKiB,GAAQ,EACnBw0B,EAAMA,EAAKx0B,GAAQ,EACnBihC,EAAMA,EAAKjhC,GAAQ,EACnBw/B,EAAWA,EAAUz/B,GAAS,EAC9B0/B,EAAWA,EAAUz/B,GAAQ,EAC7B,IAAIizB,EAAKv4B,EAAO,CAAC,EACbw4B,EAAKx4B,EAAO8U,EAAI,CAAC,EACjBqnB,EAAYzX,GAAK6T,EAAKC,CAAE,EAC5B,MAAO,CACH,KAAMnzB,EACN,IAAKC,EACL,MAAOw6B,EACP,OAAQC,EACR,OAAQ,CAAC+E,EAASC,CAAO,EACzB,KAAM,CAAC7gC,EAAIC,CAAE,EACb,KAAM,CAACC,EAAIC,CAAE,EACb,KAAM,CAACw1B,EAAIC,CAAE,EACb,KAAM,CAACwM,EAAIC,CAAE,EACb,UAAWpK,CACf,CACJ,CAEA,SAASsK,GAAqBC,EAAU,EAAG,CACvC,IAAIlwB,EAAU,EAAE,QAASC,EAAU,EAAE,QAASsK,EAAQ,EAAE,MACpDrV,EAAKg7B,EAAS,MAAOC,EAAqBj7B,EAAG,mBAAoBk7B,EAAal7B,EAAG,WAAYy6B,EAAOz6B,EAAG,KAAMoF,EAAOpF,EAAG,KACvHrG,EAAOshC,EAAmB,KAAMrhC,EAAMqhC,EAAmB,IACzD7xB,EAAIqxB,EAAO,EAAI,EACfn6B,EAAKw3B,EAAO3L,GAAMgP,GAAyBD,EAAY,CAACpwB,EAAUnR,EAAMoR,EAAUnR,CAAG,EAAGwP,CAAC,EAAGhE,CAAI,EAAG,CAAC,EAAGwqB,EAAOtvB,EAAG,CAAC,EAAGuvB,EAAOvvB,EAAG,CAAC,EAChIG,EAAKq3B,EAAOsD,GAAY,CAAE,MAAO/lB,EAAO,MAAOua,EAAM,MAAOC,CAAK,CAAC,EAAG,CAAC,EAAGvqB,EAAQ7E,EAAG,CAAC,EAAG8E,EAAQ9E,EAAG,CAAC,EACxG,MAAO,CAAC6E,EAAOC,CAAK,CACxB,CACA,SAAS81B,GAAaL,EAAUh7B,EAAI,CAChC,IAAIqV,EAAQrV,EAAG,MACXM,EAAK06B,EAAS,MAAOM,EAAYh7B,EAAG,UAAWi7B,EAAej7B,EAAG,aAAcm6B,EAAOn6B,EAAG,KAAM3G,EAAO2G,EAAG,KAAM1G,EAAM0G,EAAG,IAAKmtB,EAASntB,EAAG,OAAQk7B,EAAel7B,EAAG,aAAcm7B,EAAen7B,EAAG,aAAco7B,EAAkBp7B,EAAG,gBACtO8I,EAAIqxB,EAAO,EAAI,EACnBplB,EAAM,KAAOolB,EACbplB,EAAM,OAASimB,EACfjmB,EAAM,aAAeomB,EACrBpmB,EAAM,aAAekmB,EACrBlmB,EAAM,aAAemmB,EACrBnmB,EAAM,gBAAkBqmB,EACxBrmB,EAAM,cAAgB4V,GAAOqQ,EAAWlyB,CAAC,EACzCiM,EAAM,oBAAsB4V,GAAOsQ,EAAcnyB,CAAC,EAClDiM,EAAM,eAAiBsW,GAAsBM,GAAK,CAACtyB,EAAMC,CAAG,EAAG6zB,CAAM,EAAGrkB,CAAC,EACzEiM,EAAM,oBAAsBkX,GAAUlX,EAAM,oBAAqBA,EAAM,eAAgBjM,CAAC,EACxFiM,EAAM,cAAgBkX,GAAUlX,EAAM,cAAeA,EAAM,eAAgBjM,CAAC,CAChF,CACA,SAASuyB,GAAsB/0C,EAAG,CAC9B,OAAO4zC,GAAyB5zC,EAAE,MAAM,gBAAiB,CAAC,GAAI,EAAE,EAAG,IAAK,GAAG,EAAE,SACjF,CACA,SAASg1C,GAAsBZ,EAAU5qC,EAAOs/B,EAAc,CAC1D,IAAIra,EAAQjlB,EAAM,MAAOmqC,EAAgBnqC,EAAM,cAAc,iBACzD2H,EAAQsd,EAAM,eACdwmB,EAAiBtB,EAAc,eAC/Bj9B,EAASu+B,EAAe,OACxBC,EAA+BvB,EAAc,6BAC7Cx6B,EAAY,GACZhI,IAAU,IAEN23B,IAAiB,YACjB3vB,EAAY,EAEP2vB,IAAiB,WACtB3vB,EAAYuC,GAAUu5B,EAAgB,SAAUl0C,EAAM,CAAE,OAAOA,EAAK,MAAM,UAAU,CAAG,CAAC,GAExFoY,IAAc,KACdA,EAAY87B,EAAe,QAE/BxmB,EAAM,eAAiBtV,GAElB,GAAK+7B,EAA8B,SAAUzjC,EAAM,CAAE,OAAOA,EAAK,QAAUN,GAASM,EAAK,eAAiBq3B,CAAc,CAAC,EAC9H3vB,EAAYhI,EAGZgI,EAAYhI,EAAQ+jC,EAA6B,OAAO,SAAUzjC,EAAM,CAAE,OAAOA,EAAK,MAAQN,CAAO,CAAC,EAAE,OAE5G,IAAIwV,EAASwuB,GAAqBF,EAAgBb,EAAS,MAAOj7B,CAAS,EACvEi8B,EAAiBzuB,EAAO,eACxB0uB,EAAkBvM,IAAiB,SAAW,UAAYA,EAC9Dra,EAAM,oBAAsB9H,EAAO,oBACnC8H,EAAM,mBAAqB9H,EAAO,mBAClC8H,EAAM,gBAAkB9H,EAAO,qBAC/B8H,EAAM,iBAAmB9H,EAAO,sBAChC8H,EAAM,eAAiB9H,EAAO,qBAC9B8H,EAAM,eAAiB9H,EAAO,oBAC9B8H,EAAM,gBAAkB9H,EAAO,qBAC/B8H,EAAM,mBAAqB9H,EAAO,kBAC9ByuB,EAAe,eAAiBC,GAChC5mB,EAAM,mBAAmB,OAAO,EAAG,CAAC,EACpCA,EAAM,kBAAoB,IAErB/X,EAASyC,IACdsV,EAAM,kBAAoB,GAC1BklB,EAAc,6BAA+B,EAAc,EAAc,CAAC,EAAGzC,EAAOgE,CAA4B,EAAG,EAAK,EAAG,CAAC,CACpH,aAAcpM,EACd,MAAO3vB,EACP,SAAU,EACd,CAAC,EAAG,EAAK,EAErB,CACA,SAASm8B,GAAuB7mB,EAAOxvB,EAAOs2C,EAAM,CAChD,MAAO,GAAG,OAAO9mB,EAAM,oBAAoB,KAAK,GAAG,EAAG,GAAG,EAAE,OAAOA,EAAM,kBAAoB8mB,EAAOt2C,EAAO,GAAG,EAAE,OAAOwvB,EAAM,mBAAmB,KAAK,GAAG,CAAC,CAC5J,CACA,SAAS+mB,GAAiBp8B,EAAI,CAC1B,IAAIqV,EAAQrV,EAAG,MAAOsF,EAAQtF,EAAG,MAAOuF,EAAQvF,EAAG,MAC/CM,EAAKw3B,EAAOuE,GAAkB,CAAE,MAAOhnB,EAAO,MAAO/P,EAAO,MAAOC,CAAM,CAAC,EAAG,CAAC,EAAG+2B,EAAKh8B,EAAG,CAAC,EAAGi8B,EAAKj8B,EAAG,CAAC,EAGtG8uB,EAAMoN,GAAmBnnB,EAAOqW,GAAgB,CAAC4Q,EAAIC,CAAE,EAAG,CAAC,CAAC,EAChE,OAAOhQ,GAAU6C,EAAKzD,GAAsB,CAAC,EAAG,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAChE,CACA,SAAS6Q,GAAmBnnB,EAAOomB,EAAcgB,EAAS,CACtD,IAAIC,EAAkBrnB,EAAM,gBAAiBsnB,EAAiBtnB,EAAM,eAAgBunB,EAAmBvnB,EAAM,iBAAkBwnB,EAAkBxnB,EAAM,gBAAiBynB,EAAqBznB,EAAM,mBAI/L0nB,EAAmBN,EACjB1Q,GAAS+Q,EAAoBrB,EAAc,CAAC,EAC5C1P,GAAS0P,EAAcqB,EAAoB,CAAC,EAE9CE,EAAOjR,GAASd,GAAOwR,EAAUG,EAAmBF,EAAiB,CAAC,EAAGK,EAAkB,CAAC,EAE5FE,EAAoBlR,GAASiR,EAAM/R,GAAOwR,EAAUI,EAAkBF,EAAgB,CAAC,EAAG,CAAC,EAC/F,OAAOM,CACX,CACA,SAASZ,GAAkBr8B,EAAI,CAC3B,IAAIqV,EAAQrV,EAAG,MAAOsF,EAAQtF,EAAG,MAAOuF,EAAQvF,EAAG,MAE/Ck9B,EAAsB7nB,EAAM,oBAAqBolB,EAAOplB,EAAM,KAAM8nB,EAAsB9nB,EAAM,oBAAqB+nB,EAAiB/nB,EAAM,eAC5IjM,EAAIqxB,EAAO,EAAI,EAGnB,OAAOtO,GAAMI,GAAU2Q,EAAqBjR,GAAKmR,EAAgB,CAAC93B,EAAOC,CAAK,CAAC,EAAG6D,CAAC,EAAG+zB,CAAmB,CAC7G,CACA,SAAS/B,GAAYp7B,EAAIq9B,EAAU,CAC/B,IAAIhoB,EAAQrV,EAAG,MAAOsF,EAAQtF,EAAG,MAAOuF,EAAQvF,EAAG,MAC/Ck9B,EAAsB7nB,EAAM,oBAAqBoV,EAAgBpV,EAAM,cAAeolB,EAAOplB,EAAM,KAAM8nB,EAAsB9nB,EAAM,oBAAqBioB,EAAgBjoB,EAAM,cAAe+nB,EAAiB/nB,EAAM,eACtNjM,EAAIqxB,EAAO,EAAI,EACnB,OAAOtO,GAAMI,GAAU8Q,EAAWH,EAAsBzS,EAAewB,GAAKmR,EAAgB,CAAC93B,EAAOC,CAAK,CAAC,EAAG6D,CAAC,EAAGi0B,EAAWF,EAAsBG,CAAa,CACnK,CACA,SAASC,GAAmBv9B,EAAIq9B,EAAU,CACtC,IAAIhoB,EAAQrV,EAAG,MAAOsF,EAAQtF,EAAG,MAAOuF,EAAQvF,EAAG,MAC/Cu7B,EAAelmB,EAAM,aAAc/gB,EAAS+gB,EAAM,OAAQolB,EAAOplB,EAAM,KAAM8nB,EAAsB9nB,EAAM,oBAAqBioB,EAAgBjoB,EAAM,cAAe+nB,EAAiB/nB,EAAM,eAC1LjM,EAAIqxB,EAAO,EAAI,EACnB,OAAOtO,GAAMI,GAAU8Q,EAAW9B,EAAejnC,EAAQ23B,GAAKoR,EAAWF,EAAsBG,EAAe,CAACh4B,EAAOC,CAAK,CAAC,EAAG6D,CAAC,EAAGg0B,CAAc,CACrJ,CACA,SAASI,GAAyB9B,EAAiBnmC,EAAO7D,EAAQ+rC,EAAWC,EAAYC,EAAY,CAIjG,OAHIF,IAAc,SAAUA,EAAYloC,GACpCmoC,IAAe,SAAUA,EAAahsC,GACtCisC,IAAe,SAAUA,EAAa,CAAC,EAAG,CAAC,GAC1CjC,EAGEA,EAAgB,IAAI,SAAU19B,EAAKT,EAAG,CACzC,IAAIyC,EAAK4B,GAAU5D,CAAG,EAAGnY,EAAQma,EAAG,MAAO8B,EAAO9B,EAAG,KACjD49B,EAAYrgC,EAAImgC,EAAaD,EAC7Bx/B,EAAQV,EAAI7L,EAAS6D,EACzB,GAAIyI,IAAQ,KAAO,MAAMnY,CAAK,EAAG,CAE7B,IAAIg4C,EAAeD,EAAWD,EAAWpgC,CAAC,EAAIqgC,EAAW,EACzD,OAAO3/B,EAAO4/B,CAClB,SACS/7B,IAAS,IACd,OAAOjc,EAEX,OAAOoY,EAAOpY,EAAQ,GAC1B,CAAC,EAfU83C,CAgBf,CACA,SAASG,GAAyBrN,EAAW,CACzC,IAAIsN,EAAU,CAAC,EACf,OAAItN,EAAU,CAAC,GAAK,IACZA,EAAU,CAAC,GAAK,GAChBsN,EAAQ,KAAK,CAAC,EAEdtN,EAAU,CAAC,GAAK,GAChBsN,EAAQ,KAAK,CAAC,GAGlBtN,EAAU,CAAC,GAAK,IACZA,EAAU,CAAC,GAAK,GAChBsN,EAAQ,KAAK,CAAC,EAEdtN,EAAU,CAAC,GAAK,GAChBsN,EAAQ,KAAK,CAAC,GAGfA,CACX,CACA,SAASC,GAAoBtD,EAAOjK,EAAW,CAM3C,OAAOqN,GAAyBrN,CAAS,EAAE,IAAI,SAAU14B,EAAO,CAAE,OAAO2iC,EAAM3iC,CAAK,CAAG,CAAC,CAC5F,CACA,SAASkmC,GAAwBvD,EAAOjK,EAAW,CAC/C,IAAIrsB,GAASqsB,EAAY,GAAK,EAC9B,MAAO,CACHjyB,GAAIk8B,EAAM,CAAC,EAAE,CAAC,EAAGA,EAAM,CAAC,EAAE,CAAC,EAAGt2B,EAAO,EAAIA,CAAK,EAC9C5F,GAAIk8B,EAAM,CAAC,EAAE,CAAC,EAAGA,EAAM,CAAC,EAAE,CAAC,EAAGt2B,EAAO,EAAIA,CAAK,CAClD,CACJ,CACA,SAAS85B,GAAkBxD,EAAOjK,EAAW,CACzC,IAAI72B,EAAMqkC,GAAwB,CAACvD,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAAGjK,EAAU,CAAC,CAAC,EAChE4D,EAAS4J,GAAwB,CAACvD,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAAGjK,EAAU,CAAC,CAAC,EACvE,OAAOwN,GAAwB,CAACrkC,EAAKy6B,CAAM,EAAG5D,EAAU,CAAC,CAAC,CAC9D,CACA,SAAS,GAAQ0N,EAAU7pC,EAAQiB,EAAO7D,EAAQ0X,EAAGg1B,EAAgB,CACjE,IAAI1D,EAAQC,GAAermC,EAAQiB,EAAO7D,EAAQ0X,CAAC,EAC/Ci1B,EAAWH,GAAkBxD,EAAO0D,CAAc,EAClD94B,EAAQ64B,EAAS,CAAC,EAAIE,EAAS,CAAC,EAChC94B,EAAQ44B,EAAS,CAAC,EAAIE,EAAS,CAAC,EACpC,MAAO,CAAC/4B,EAAOC,CAAK,CACxB,CACA,SAAS+4B,GAAc9C,EAAcC,EAAchO,EAAQrkB,EAAG,CAC1D,OAAO2iB,GAASyP,EAAc+C,GAAkB9C,EAAcryB,EAAGqkB,CAAM,EAAGrkB,CAAC,CAC/E,CACA,SAASo1B,GAAuB3a,EAAOxO,EAAO/b,EAAWmlC,EAAgB,CACrE,IAAI/C,EAAkB7X,EAAM,gBAAiB2X,EAAe3X,EAAM,aAAc4W,EAAO5W,EAAM,KACzFza,EAAIqxB,EAAO,EAAI,EACfiE,EACJ,GAAI,GAASplC,CAAS,EAAG,CACrB,IAAIojC,EAAkBrnB,EAAM,gBAAiBsnB,EAAiBtnB,EAAM,eAChEopB,EACAC,EAAkB9S,GAAiBmD,GAASz1B,CAAS,EAAG,EAAG8P,CAAC,EAG5Ds1B,EAAkB9S,GAAiBG,GAASA,GAAS2Q,EAAiB3N,GAAS,CAACz1B,CAAS,CAAC,EAAG,CAAC,EAAGqjC,EAAgB,CAAC,EAAG,EAAGvzB,CAAC,CAEjI,MAEIs1B,EAAkBplC,EAEtB,OAAOglC,GAAc9C,EAAckD,EAAiBhD,EAAiBtyB,CAAC,CAC1E,CACA,SAASu1B,GAAY9a,EAAO3K,EAAO,CAC/B,IAAIwiB,EAAkB7X,EAAM,gBAAiB2X,EAAe3X,EAAM,aAAc4W,EAAO5W,EAAM,KAAM4X,EAAe5X,EAAM,aAAciZ,EAAqBjZ,EAAM,mBAC7Jza,EAAIqxB,EAAO,EAAI,EACnB,OAAO6D,GAAc9C,EAAczP,GAAS+Q,GAAsBrB,EAAclO,GAAkBrU,EAAO9P,CAAC,EAAGA,CAAC,EAAGsyB,EAAiBtyB,CAAC,CACvI,CACA,SAASw1B,GAAwB5D,EAAU,EAAG,CAC1C,IAAIT,EAAgBsE,GAAyB,CAAC,EAC9C,MAAO,CACH,aAAc,SAAUvlC,EAAWvB,EAAO,CAClCA,IAAU,SAAUA,EAAQ,IAChCwiC,EAAc,gBAAkBx7B,GAAQzF,CAAS,EAAIA,EAAYkI,GAAWlI,CAAS,EACrFwlC,GAAkB9D,EAAU,EAAGjjC,CAAK,CACxC,EACA,kBAAmB,SAAUA,EAAO,CAChC+mC,GAAkB9D,EAAU,EAAGjjC,CAAK,CACxC,CACJ,CACJ,CACA,SAASgnC,GAAyB/D,EAAU,EAAG39B,EAAU,CACrD,IAAIk9B,EAAgBsE,GAAyB,CAAC,EAC1CG,EAAkBzE,EAAc,gBACpCuE,GAAkB9D,EAAU,EAAG14B,GAAU08B,EAAiB,SAAU5a,EAAM,CAAE,OAAOA,EAAK,QAAQ,GAAG,OAAO/mB,EAAU,GAAG,CAAC,IAAM,CAAG,CAAC,CAAC,CACvI,CACA,SAASyhC,GAAkB9D,EAAU,EAAGjjC,EAAO,CAC3C,IAAIwiC,EAAgBsE,GAAyB,CAAC,EAC1CxpB,EAAQ,EAAE,MAEd,GADAA,EAAM,eAAiBtd,EACnBA,IAAU,GAGd,KAAIuB,EAAYihC,EAAc,gBAAgBxiC,CAAK,EACnD,GAAKuB,EAGL,KAAIuqB,EAAQmX,EAAS,MACjB3iC,EAAO42B,GAAM,CAAC31B,CAAS,EAAG,CAC1B,KAAM,SAAUtD,EAAG,CAAE,OAAOA,EAAI,IAAM6tB,EAAM,WAAa,EACzD,KAAM,SAAU7tB,EAAG,CAAE,OAAOA,EAAI,IAAM6tB,EAAM,YAAc,CAC9D,CAAC,EACDxO,EAAM,WAAahd,EAAK,CAAC,EAAE,eAC/B,CACA,SAAS4mC,GAAsBr4C,EAAG0S,EAAW,CACzC,IAAIihC,EAAgBsE,GAAyBj4C,CAAC,EAC9C2zC,EAAc,eAAiB/4B,GAAWlI,CAAS,CAEvD,CACA,SAASulC,GAAyBj4C,EAAG,CACjC,OAAOA,EAAE,cAAc,gBAC3B,CACA,SAASs4C,GAAkBt4C,EAAG,CAC1B,IAAI2zC,EAAgB3zC,EAAE,cAAc,iBACpC,OAAO2zC,EAAc,cACzB,CACA,SAAS4E,GAAqBv4C,EAAG,CAC7B,OAAQs4C,GAAkBt4C,CAAC,GAAK,CAAC,GAAG,KAAK,GAAG,CAChD,CACA,SAASw4C,GAAax4C,EAAG,CACrB,OAAOi4C,GAAyBj4C,CAAC,EAAE,SACvC,CACA,SAASy4C,GAAmBrE,EAAUsE,EAAeloB,EAAO3I,EAAS7nB,EAAG,CACpEq4C,GAAsBr4C,EAAG04C,CAAa,EACtC,IAAIC,EAAOC,GAAU,KAAKxE,EAAUf,GAAcrzC,EAAGo0C,EAAS,MAAO5jB,EAAO3I,EAAS,EAAK,CAAC,EACvFkuB,EAAiB4C,EAAOA,EAAK,UAAYD,EAC7C,OAAO,EAAS,EAAS,CAAE,UAAWA,EAAe,KAAMC,CAAK,EAAGE,GAAc,CAC7E,UAAW9C,CACf,EAAG/1C,CAAC,CAAC,EAAG,CAAE,eAAgB+1C,CAAe,CAAC,CAC9C,CACA,SAAS+C,GAA0B1E,EAAU1hC,EAAW8kC,EAAgBuB,EAAatqB,EAAOopB,EAAgB,CACxG,IAAImB,EAAapB,GAAuBxD,EAAS,MAAO3lB,EAAO/b,EAAWmlC,CAAc,EACpFoB,EAAoBC,GAAmB9E,EAAUoD,EAAgBuB,EAAaC,CAAU,EAC5F,OAAOC,CACX,CACA,SAASE,GAAiB/E,EAAU1hC,EAAW8kC,EAAgB4B,EAAeL,EAAatqB,EAAOopB,EAAgB,CAC9G,IAAIoB,EAAoBH,GAA0B1E,EAAU1hC,EAAW8kC,EAAgBuB,EAAatqB,EAAOopB,CAAc,EACrH5a,EAAQmX,EAAS,MACjBrhC,EAAOkqB,EAAM,KAAMjqB,EAAMiqB,EAAM,IAC/Boc,EAAYjF,EAAS,MAAM,UAC3BkF,EAAYD,EAAYtmC,EAAO,EAC/BwmC,EAAWF,EAAYrmC,EAAM,EAC7BuiC,EAAOhQ,GAAM6T,EAAeH,CAAiB,EACjD,OAAO1T,GAAMgQ,EAAM,CAAC+D,EAAWC,CAAQ,CAAC,CAC5C,CACA,SAASC,GAAapF,EAAU1hC,EAAW8kC,EAAgB4B,EAAeL,EAAatqB,EAAOopB,EAAgB,CAC1G,IAAItC,EAAO4D,GAAiB/E,EAAU1hC,EAAW8kC,EAAgB4B,EAAeL,EAAatqB,EAAOopB,CAAc,EAClH,OAAOtC,CACX,CACA,SAASkE,GAAkBriC,EAAKzI,EAAO7D,EAAQ,CAC3C,MAAO,CACH6D,EAAQ,GAAKyI,EAAI,CAAC,GAAKzI,EAAQ,GAAK,EACpC7D,EAAS,GAAKsM,EAAI,CAAC,GAAKtM,EAAS,GAAK,CAC1C,CACJ,CACA,SAASouC,GAAmB9E,EAAUoD,EAAgBuB,EAAaC,EAAY,CACvEA,IAAe,SAAUA,EAAa5E,EAAS,MAAM,WACzD,IAAIh7B,EAAKg7B,EAAS,MAAOzlC,EAAQyK,EAAG,MAAOtO,EAASsO,EAAG,OAAQy6B,EAAOz6B,EAAG,KACrEoJ,EAAIqxB,EAAO,EAAI,EACf6F,EAAsB,CACtB/qC,EAAQ,GAAK,EAAI6oC,EAAe,CAAC,GAAKuB,EAAY,CAAC,EACnDjuC,EAAS,GAAK,EAAI0sC,EAAe,CAAC,GAAKuB,EAAY,CAAC,CACxD,EACA,OAAO7E,GAAkB8E,EAAYU,EAAqBl3B,CAAC,CAC/D,CACA,SAASm3B,GAAcvF,EAAUwF,EAAYnrB,EAAO,CAChD,IAAI+oB,EAAiB/oB,EAAM,eACvB2qB,EAAgB3qB,EAAM,cACtBsqB,EAActqB,EAAM,YACxB,OAAO0qB,GAAiB/E,EAAU,UAAU,OAAOwF,EAAY,MAAM,EAAGpC,EAAgB4B,EAAeL,EAAatqB,CAAK,CAC7H,CACA,SAASorB,GAAczF,EAAUzlC,EAAO7D,EAAQsuC,EAAetE,EAAiBrmB,EAAO,CACnF,IAAI4qB,EAAYjF,EAAS,MAAM,UAC3BnX,EAAQmX,EAAS,MACjB2C,EAAa9Z,EAAM,gBAAiB2X,EAAe3X,EAAM,aAAc4W,EAAO5W,EAAM,KAAM4Z,EAAY5Z,EAAM,MAAO6Z,EAAa7Z,EAAM,OAAQlqB,EAAOkqB,EAAM,KAAMjqB,EAAMiqB,EAAM,IAC7Kua,EAAiB/oB,EAAM,eACvBomB,EAAepmB,EAAM,kBAAoBwO,EAAM,aAC/Cza,EAAIqxB,EAAO,EAAI,EACfiG,EAAalD,GAAyB9B,EAAiBnmC,EAAO7D,EAAQ+rC,EAAWC,EAAYC,CAAU,EACvGuC,EAAYD,EAAYtmC,EAAO,EAC/BwmC,EAAWF,EAAYrmC,EAAM,EAC7BgmC,EAAatB,GAAc9C,EAAcC,EAAciF,EAAYt3B,CAAC,EACpE+yB,EAAO,GAAQ6D,EAAeJ,EAAYrqC,EAAO7D,EAAQ0X,EAAGg1B,CAAc,EAC9E,OAAOjS,GAAMgQ,EAAM,CAAC+D,EAAWC,CAAQ,CAAC,CAC5C,CACA,SAASQ,GAAoB3F,EAAUvK,EAAW,CAC9C,OAAOyN,GAAkB0C,GAAwB5F,EAAS,KAAK,EAAGvK,CAAS,CAC/E,CAEA,SAASoQ,GAAa7F,EAAUb,EAAU,CACtC,IAAI2G,EAAc9F,EAAS,YACvB+F,EAAe/F,EAAS,aACxB7yC,EACJ,OAA8D24C,GAAY,OAAO,IAC7E34C,EAAO24C,EAAY,aAAa,EAAE3G,CAAQ,GAE1C,CAAChyC,GAAqE44C,GAAa,OAAO,IAC1F54C,EAAO44C,EAAa,aAAa,EAAE5G,CAAQ,GAExChyC,GAAQ,CAAC,CACpB,CAEA,SAAS,GAAc6nB,EAAe,CAClC,GAAIA,GAAiBA,EAAc,YAAa,CAC5C,IAAIC,EAAWD,EAAc,YAAY,EACzC,GAAIC,EAAS,WAAa,GACtB,OAAOA,CAEf,CAEJ,CACA,SAAS+wB,GAAwBC,EAAU,CACvC,IAAI/nB,EAAQ+nB,EAAS,OAAO,EACxBjU,EAASiU,EAAS,QAAQ,EAC1BptC,EAAYotC,EAAS,WAAW,EAChCC,EAAuB,CAAC,EAC5B,OAAIrtC,GAAaA,IAAc,OAASA,IAAc,QAClDqtC,EAAqB,KAAK,aAAa,OAAOrtC,EAAU,MAAM,KAAK,EAAE,KAAK,GAAG,EAAG,GAAG,CAAC,EAEpFm5B,GAAUA,IAAW,KAAOA,IAAW,QACvCkU,EAAqB,KAAK,UAAU,OAAOlU,EAAQ,GAAG,CAAC,EAEvD9T,GAASA,IAAU,KAAOA,IAAU,QACpCgoB,EAAqB,KAAK,SAAS,OAAOhoB,EAAM,MAAM,KAAK,EAAE,KAAK,GAAG,EAAG,GAAG,CAAC,EAEzEgoB,CACX,CACA,SAASC,GAAmB5vC,EAAQ+a,EAAW80B,EAAgB,CAc3D,QAbI54B,EAAKjX,EACLu6B,EAAW,CAAC,EACZuV,EAAkBx4B,GAAmBtX,CAAM,GAAKuX,GAAgBvX,CAAM,EACtE+vC,EAAa,CAACF,GAAkB7vC,IAAW+a,GAAa/a,IAAW8vC,EACnEE,EAAQD,EACR7G,EAAO,GACPrxB,EAAI,EACJsyB,EACA8F,EACA/F,EACAgG,EAAW,GACXC,EAAkBC,GAAcr1B,EAAWA,EAAW,EAAI,EAAE,aAC5DoM,EAAO,EACJlQ,GAAM,CAAC+4B,GAAO,CACjBA,EAAQD,EACR,IAAIL,EAAWW,GAAep5B,CAAE,EAC5BmD,EAAWs1B,EAAS,UAAU,EAC9B3nC,EAAYuoC,GAAoBr5B,CAAE,EAClCs5B,EAAUn2B,IAAa,QACvBu1B,EAAuBF,GAAwBC,CAAQ,EACvD3sC,EAAS83B,GAAmB2V,GAAmBzoC,CAAS,CAAC,EACzD0oC,EAAe,OACfC,EAAc,GACdC,EAAW,GACXC,EAAmB,EACnBC,EAAkB,EAClBC,EAAkB,EAClBC,EAAiB,EACjBC,EAAY,CACZ,aAAc,GACd,eAAgB,IACpB,EACIT,IACAL,EAAW,GACXc,EAAYC,GAAqBh6B,CAAE,EACnCk5B,EAAkBa,EAAU,gBAGhC,IAAIE,EAAWnuC,EAAO,OAClB,CAACmmC,IAASgI,IAAa,IAAMvB,EAAqB,UAClDzG,EAAO,GACPrxB,EAAI,EACJs5B,GAAkB5W,CAAQ,EACtB2P,IACAA,EAAe7P,GAAiB6P,EAAc,EAAG,CAAC,IAGtDhB,GAAQgI,IAAa,IACrBnuC,EAASs3B,GAAiBt3B,EAAQ,EAAG,CAAC,GAE1C,IAAI0L,EAAK2iC,GAAiBn6B,EAAIjX,CAAM,EAAG4b,EAAUnN,EAAG,QAAS4iC,EAAY5iC,EAAG,UAAWwmB,EAAQxmB,EAAG,MAAO6iC,EAAW7iC,EAAG,OAAQ8iC,EAAe9iC,EAAG,aAAc+iC,EAAY/iC,EAAG,OAC1KM,EAAKw3B,EAAOiL,EAAW,CAAC,EAAGC,EAAa1iC,EAAG,CAAC,EAAG2iC,EAAY3iC,EAAG,CAAC,EAE/D6M,IAAY,OAAS,CAAC3E,EAAG,iBAAmBizB,IAE5C3P,EAAS,KAAK,CACV,KAAM,SACN,OAAQtjB,EACR,OAAQ06B,GAAa16B,EAAIY,CAAC,CAC9B,CAAC,EACD0iB,EAAS,KAAK,CACV,KAAM,SACN,OAAQtjB,EACR,OAAQ0iB,GAAqB9hB,CAAC,CAClC,CAAC,GAEL,IAAI+5B,EAAa,WAAWlC,EAAS,MAAM,CAAC,GAAK,EACjD,GAAIa,EACAE,EAAeO,EAAU,eACzBN,EAAc,OAEb,CACD,IAAImB,EAAazB,GAAcn5B,EAAI8D,EAAW,GAAO,GAAM20B,CAAQ,EAC/DoC,GAAaD,EAAW,WAK5B,GAJApB,EAAeoB,EAAW,aAC1BnB,EAAcmB,EAAW,MACzBlB,EAAWkB,EAAW,SACtB1qB,GAAQ2qB,IACHD,EAAW,iBAAmBC,KAAe,IAAMnB,EACpDc,GAAchB,EAAa,WAC3BiB,GAAajB,EAAa,kBAErBhJ,IAAcD,GAAgB,CACnC,IAAIuK,GAAoBF,EAAW,kBACnC,GAAIE,GAAmB,CAInB,QAHIC,GAAqBvB,EACrBwB,GAAmB,EACnBC,EAAkB,EACfF,IACE,GAAcA,EAAkB,GAGrCC,IAAoBD,GAAmB,WACvCE,GAAmBF,GAAmB,UACtCA,GAAqBA,GAAmB,aAE5CP,GAAcQ,GACdP,GAAaQ,CACjB,CACJ,CACJ,CAQA,GAPIjL,IAAa,CAACS,IACX2J,GAAa,CAACpc,GAAS0b,IACtBv2B,IAAa,YAAcA,IAAa,YAC5Cq3B,GAAchB,EAAa,WAC3BiB,GAAajB,EAAa,UAC1BV,EAAaA,GAAcW,GAE3BH,EACIc,GAAaL,EAAU,eAEvBF,EAAkBL,EAAa,WAC/BM,EAAiBN,EAAa,mBAI9BY,GAAalB,IAAoBM,IAEjCG,EAAmBH,EAAa,WAChCI,EAAkBJ,EAAa,WAE/BY,GAAaZ,IAAiBX,EAAiB,CAC/C,IAAIrrB,GAAS0tB,GAAcl7B,EAAI,EAAK,EACpCw6B,GAAchtB,GAAO,CAAC,EACtBitB,GAAajtB,GAAO,CAAC,CACzB,CAmBJ,GAjBA8V,EAAS,KAAK,CACV,KAAM,SACN,OAAQtjB,EACR,OAAQ+1B,GAAkBjqC,EAAQ8U,EAAGy5B,CAAQ,CACjD,CAAC,EACG3B,EAAqB,SACrBpV,EAAS,KAAK,CACV,KAAM,SACN,OAAQtjB,EACR,OAAQ0iB,GAAqB9hB,CAAC,CAClC,CAAC,EACD0iB,EAAS,KAAK,CACV,KAAM,SACN,OAAQtjB,EACR,OAAQ+1B,GAAkBxP,GAASmS,CAAoB,EAAG93B,EAAGy5B,CAAQ,CACzE,CAAC,GAEDD,EAAW,CACX,IAAIe,GAAkBn7B,IAAOjX,EACzBinB,GAAamrB,GAAkB,EAAIn7B,EAAG,WACtCiQ,GAAYkrB,GAAkB,EAAIn7B,EAAG,UACzCsjB,EAAS,KAAK,CACV,KAAM,SACN,OAAQtjB,EACR,OAAQglB,GAAmB,CACvBwV,EAAaxqB,GAAa2pB,EAAmBE,EAC7CY,EAAYxqB,GAAY2pB,EAAkBE,CAC9C,EAAGl5B,CAAC,CACR,CAAC,CACL,MAGI0iB,EAAS,KAAK,CACV,KAAM,SACN,OAAQtjB,EACR,OAAQq6B,CACZ,CAAC,EAmBL,GAhBIM,IAAe,GACfrX,EAAS,KAAK,CACV,KAAM,OACN,OAAQtjB,EACR,OAAQ+1B,GAAkBhR,GAAkB,CAAC4V,EAAYA,CAAU,EAAG/5B,CAAC,EAAGA,EAAG,CAAC,EAAG,CAAC,CAAC,CACvF,CAAC,EAEAqyB,IACDA,EAAennC,GAEdonC,IACDA,EAAkBmH,GAEjBrB,IACDA,EAAwBsB,GAExBvB,GAASO,EACT,MAGAt5B,EAAKw5B,EACLV,EAAaW,GAEb,CAACb,GAAkB54B,IAAO64B,KAC1BE,EAAQD,EAEhB,CACA,OAAK7F,IACDA,EAAevQ,GAAqB9hB,CAAC,GAEpCsyB,IACDA,EAAkB,CAAC,EAAG,CAAC,GAEtB8F,IACDA,EAAwB,CAAC,EAAG,CAAC,GAE1B,CACH,KAAM9oB,EACN,gBAAiBgpB,EACjB,SAAU5V,EACV,aAAc2P,EACd,gBAAiBC,EACjB,aAAc8F,EACd,KAAM/G,EACN,SAAUgH,CACd,CACJ,CAEA,IAAImC,GAAgB,KAChBC,GAAqB,KACrBC,GAAuB,KAC3B,SAASC,GAAcC,EAAU,CACzBA,GACI,OAAO,MACPJ,GAAgB,IAAI,IACpBC,GAAqB,IAAI,KAE7BC,GAAuB,CAAC,IAGxBF,GAAgB,KAChBE,GAAuB,KACvBD,GAAqB,KAE7B,CACA,SAASI,GAAoBz7B,EAAI,CAC7B,IAAI07B,EAAqFL,IAAmB,IAAIr7B,CAAE,EAClH,GAAI07B,EACA,OAAOA,EAEX,IAAIC,EAAiBC,GAAc57B,EAAI,EAAI,EAC3C,OAAIq7B,IACAA,GAAmB,IAAIr7B,EAAI27B,CAAc,EAEtCA,CACX,CACA,SAASE,GAA6B9yC,EAAQ+a,EAAW,CACrD,GAAIw3B,GAAsB,CACtB,IAAIQ,EAAW,GAAKR,GAAsB,SAAUzrC,EAAM,CAAE,OAAOA,EAAK,CAAC,EAAE,CAAC,GAAK9G,GAAU8G,EAAK,CAAC,EAAE,CAAC,GAAKiU,CAAW,CAAC,EACrH,GAAIg4B,EACA,OAAOA,EAAS,CAAC,CAEzB,CACA,IAAI/2B,EAAS4zB,GAAmB5vC,EAAQ+a,EAAW,EAAI,EACvD,OAAIw3B,IACAA,GAAqB,KAAK,CAAC,CAACvyC,EAAQ+a,CAAS,EAAGiB,CAAM,CAAC,EAEpDA,CACX,CACA,SAASq0B,GAAevtC,EAAS,CAC7B,IAAIkwC,EAAsEX,IAAc,IAAIvvC,CAAO,EACnG,GAAI,CAACkwC,EAAO,CACR,IAAIC,EAAcl8B,GAAUjU,CAAO,EAAE,iBAAiBA,CAAO,EAC7D,GAAI,CAACuvC,GACD,OAAO,SAAUvmC,EAAU,CACvB,OAAOmnC,EAAYnnC,CAAQ,CAC/B,EAEJknC,EAAQ,CACJ,MAAOC,EACP,OAAQ,CAAC,CACb,EACAZ,GAAc,IAAIvvC,EAASkwC,CAAK,CACpC,CACA,IAAIE,EAASF,EAAM,OACfxyC,EAAQwyC,EAAM,MAClB,OAAO,SAAUlnC,EAAU,CACvB,OAAMA,KAAYonC,IACdA,EAAOpnC,CAAQ,EAAItL,EAAMsL,CAAQ,GAE9BonC,EAAOpnC,CAAQ,CAC1B,CACJ,CAEA,SAASqnC,GAAgB1J,EAAU9yC,EAAMtB,EAAG,CACxC,IAAIyuB,EAAQzuB,EAAE,cACdyuB,EAAM,UAAYA,EAAM,WAAa,CAAC,EACtC,IAAIsvB,EAAiBtvB,EAAM,UAC3BsvB,EAAe,WAAaA,EAAe,YAAc,CAAC,EAC1D,IAAIC,EAAaD,EAAe,WAChC,OAAO3J,EAAS,UAAU,IAAI,SAAU/0B,EAAG1I,EAAG,CAC1C,OAAAqnC,EAAWrnC,CAAC,EAAIqnC,EAAWrnC,CAAC,GAAK,CAAC,EAClCqnC,EAAWrnC,CAAC,EAAErV,CAAI,EAAI08C,EAAWrnC,CAAC,EAAErV,CAAI,GAAK,CAAC,EACvC,EAAS,EAAS,CAAC,EAAGtB,CAAC,EAAG,CAAE,eAAgB,GAAM,MAAOg+C,EAAWrnC,CAAC,EAAErV,CAAI,EAAG,cAAe08C,EAAWrnC,CAAC,CAAE,CAAC,CACvH,CAAC,CACL,CACA,SAASsnC,GAAkB7J,EAAUhD,EAAMvvB,EAAM2O,EAAOxwB,EAAGszC,EAAWC,EAAU,CAC5E,IAAI2K,EAAU,CAAC,CAACr8B,EAAK,MAAM,SAAS,EAChC84B,EAAQ,CAAC,CAAC94B,EAAK,MAAM,OAAO,EAC5BgG,EAAU7nB,EAAE,QACZyuB,EAAQzuB,EAAE,MACV6iB,EAASi7B,GAAgB1J,EAAUhD,EAAK,KAAMpxC,CAAC,EAC/Cm+C,EAAY/J,EAAS,UACrBgK,EAAc,CAAC,EACfC,EAAcx7B,EAAO,IAAI,SAAUy7B,EAAI3nC,EAAG,CAC1C,IAAI4nC,EAAgBJ,EAAUxnC,CAAC,EAC3BsmB,EAAQshB,EAAc,MACtBC,EAASvhB,EAAM,OACfwhB,EAAaH,EACjB,GAAIJ,EACAO,EAAa,IAAI/K,GAAYH,CAAQ,EAAE,UAAU/iB,EAAO8tB,CAAE,EAC1DF,EAAY,KAAKK,CAAU,MAE1B,CAID,GAHKD,EAAOjL,CAAQ,IAChBiL,EAAOjL,CAAQ,EAAI9kB,EAAM,YAAY9X,CAAC,GAEtC,CAAC6nC,EAAOjL,CAAQ,EAChB,OAEJkL,EAAapL,GAAciL,EAAIrhB,EAAOzM,EAAO3I,EAASyrB,EAAWC,CAAQ,EACzE6K,EAAY,KAAKK,CAAU,CAC/B,CACA,IAAI93B,EAASyqB,EAAKvvB,CAAI,EAAE08B,EAAe,EAAS,EAAS,CAAC,EAAGE,CAAU,EAAG,CAAE,WAAY,EAAK,CAAC,CAAC,EAC/F,OAAI9D,IACA6D,EAAOjL,CAAQ,EAAI,MAEhB5sB,CACX,CAAC,EACD,OAAIu3B,IACAzvB,EAAM,YAAc0vB,EAAU,IAAI,SAAU5hB,EAAO,CAAE,OAAOA,EAAM,MAAM,OAAOgX,CAAQ,CAAG,CAAC,GAExF,CACH,YAAa8K,EACb,YAAaD,CACjB,CACJ,CACA,SAASM,GAAkBtK,EAAUhD,EAAMvvB,EAAM7hB,EAAG2+C,EAAW/iC,EAAU,CACjE+iC,IAAc,SAAUA,EAAY,SAAUt/B,EAAGi/B,EAAI,CAAE,OAAOA,CAAI,GACtE,IAAI3D,EAAQ,CAAC,CAAC94B,EAAK,MAAM,OAAO,EAC5BgB,EAASi7B,GAAgB1J,EAAUhD,EAAK,KAAMpxC,CAAC,EAC/Cm+C,EAAY/J,EAAS,UACrBhY,EAASvZ,EAAO,IAAI,SAAUy7B,EAAI3nC,EAAG,CACrC,IAAI4nC,EAAgBJ,EAAUxnC,CAAC,EAC3B8nC,EAAaH,EACjBG,EAAaE,EAAUJ,EAAeD,CAAE,EACxC,IAAI33B,EAASyqB,EAAKvvB,CAAI,EAAE08B,EAAe,EAAS,EAAS,CAAC,EAAGE,CAAU,EAAG,CAAE,WAAY,EAAK,CAAC,CAAC,EAC/F,OAAA93B,GAAU/K,GAAYA,EAAS2iC,EAAeD,EAAI33B,EAAQhQ,CAAC,EACvDgkC,IACA4D,EAAc,MAAM,OAAS,CAAC,GAE3B53B,CACX,CAAC,EACD,OAAOyV,CACX,CACA,SAASwiB,GAAexK,EAAU7X,EAAOsiB,EAAaJ,EAAY,CAC9D,IAAIjH,EAAiBqH,EAAY,eAC7BzF,EAAgByF,EAAY,cAC5BC,EAAiBL,EAAW,MAAM,gBAAkBzE,GAAwBzd,EAAM,KAAK,EACvFnlB,EAAMkgC,GAAkBwH,EAAgBtH,CAAc,EACtDp+B,EAAK83B,EAAOvL,GAAUI,GAAmB,CAACqO,EAAS,SAAW,IAAM,KAAK,GAAI,CAAC,EAAG,CAACh9B,EAAI,CAAC,EAAIgiC,EAAc,CAAC,EAAGhiC,EAAI,CAAC,EAAIgiC,EAAc,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG2F,EAAY3lC,EAAG,CAAC,EAAG4lC,EAAY5lC,EAAG,CAAC,EAC3L,OAAAqlC,EAAW,MAAM,UAAYM,EAC7BN,EAAW,MAAM,UAAYO,EACtBP,CACX,CAEA,SAASQ,GAA+B7K,EAAUb,EAAU2L,EAAkBC,EAAO,CACjF,IAAI/lC,EAAKg7B,EAAS,SAAS,EAAGgL,EAAchmC,EAAG,YAAaimC,EAAcjmC,EAAG,SAAUywB,EAAYzwB,EAAG,UAClG0Y,EAAOwtB,GAASlL,EAAS,MAAOb,CAAQ,EAAE,KAC1CgM,EAAcC,GAAUH,EAAc,KAAK,GAAK,GAAG,EACnDI,EAAe,CAAC,EAChBC,EAActL,EAAS,YACtBsL,EAAY,qBACbA,EAAY,mBAAqB,CAAC,GAEtC,IAAIC,EAAqBD,EAAY,mBACrCR,EAAiB,QAAQ,SAAU9lC,EAAI,CACnC,IAAIm5B,EAAMn5B,EAAG,IACbqmC,EAAalN,CAAG,EAAI,EACxB,CAAC,EACD,IAAIqN,EAAgBxtB,GAAKyX,CAAS,EAClC,OAAOqV,EAAiB,IAAI,SAAU9lC,EAAI,CACtC,IAAI7X,EAAO6X,EAAG,KAAMgP,EAAahP,EAAG,WAAYm5B,EAAMn5B,EAAG,IACrD+9B,EAAUjE,GAAkBX,CAAG,EACnC,GAAI,CAAC4E,GAAW,CAACsI,EAAalN,CAAG,EAC7B,OAAO,KAEXoN,EAAmBpN,CAAG,EAAI,GAC1B,IAAIsN,GAAqBpiC,GAAS8hC,EAAa,EAAE,EAAIK,EAAgBzM,GAAoBZ,CAAG,EAAI,KAAO,IACnGuN,EAAY,CAAC,EACjB,OAAAvjC,GAAQhb,CAAI,EAAE,QAAQ,SAAUD,EAAM,CAClCw+C,EAAU,QAAQ,OAAOx+C,CAAI,CAAC,EAAIC,EAAKD,CAAI,CAC/C,CAAC,EACO69C,EAAM,cAAc,MAAO,EAAS,CAAE,UAAWlkC,GAAO,MAAM,OAAQ,EAAc,CAAC,UAAW,YAAas3B,EAAKgB,CAAQ,EAAGrC,EAAO9oB,CAAU,EAAG,EAAK,CAAC,EAAG,gBAAiBy3B,EAAmB,iBAAkBtN,CAAI,EAAGuN,EAAW,CAAE,IAAK,aAAa,OAAOvN,CAAG,EAAG,MAAOwN,GAAoB,MAAM,OAAQ,EAAc,CAACV,EAAavtB,CAAI,EAAGof,EAAOiG,EAAQ,IAAI,SAAUhmC,EAAO,CAAE,OAAOiuC,EAAYjuC,CAAK,CAAG,CAAC,CAAC,EAAG,EAAK,CAAC,CAAE,CAAC,CAAC,CAC3a,CAAC,CACL,CACA,SAAS6uC,GAAwB5L,EAAU6L,EAAmB1M,EAAU4L,EAAO,CAC3E,IAAI/lC,EAAKkmC,GAASlL,EAAS,MAAOb,CAAQ,EAAG75B,EAAKN,EAAG,iBAAkB8mC,EAAaxmC,IAAO,OAASumC,EAAoBvmC,EAAIymC,EAAwB/mC,EAAG,sBACvJ,GAAI,CAAC8mC,EACD,MAAO,CAAC,EAEZ,IAAIhB,EAAmBgB,IAAe,GAAO5O,GAAa4O,EAC1D,OAAO,EAAc,EAAc,CAAC,EAAGhP,EAAQiP,EAAwBC,GAAqBhM,EAAU+K,EAAO5L,EAAU2L,CAAgB,EAAI,CAAC,CAAE,EAAG,EAAK,EAAGhO,EAAO+N,GAA+B7K,EAAUb,EAAU2L,EAAiB,IAAI,SAAU3M,EAAK,CACnP,MAAO,CACH,KAAM,CAAC,EACP,WAAY,CAAC,EACb,IAAKA,CACT,CACJ,CAAC,EAAG4M,CAAK,CAAC,EAAG,EAAK,CACtB,CACA,SAASkB,GAAWlB,EAAOtV,EAAWrrB,EAAMC,EAAMqT,EAAMnyB,EAAK,CAEzD,QADIyoB,EAAa,CAAC,EACTzI,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpCyI,EAAWzI,EAAK,CAAC,EAAI,UAAUA,CAAE,EAErC,IAAItM,EAAMkL,GAAOC,EAAMC,CAAI,EACvB5L,EAAWg3B,EAAapsB,GAASpK,EAAM,KAAK,GAAK,IAAK,EAAE,EAAK,IAAM,GACvE,OAAO8rC,EAAM,cAAc,MAAO,CAAE,IAAK,QAAQ,OAAOx/C,CAAG,EAAG,UAAWsb,GAAO,MAAM,OAAQ,EAAc,CAAC,OAAQ,YAAa4uB,EAAY,OAAS,GAAIA,CAAS,EAAGqH,EAAO9oB,CAAU,EAAG,EAAK,CAAC,EAAG,gBAAiBvV,EAAU,gBAAiBlT,EAAK,iBAAkBkqC,EAAW,MAAO,GAAarrB,EAAMC,EAAMqT,EAAMze,CAAG,CAAE,CAAC,CAClU,CACA,SAASitC,GAAgBnB,EAAO5L,EAAUgN,EAAMzM,EAAOhiB,EAAM,CACzD,IAAIouB,EAAaK,IAAS,GAAOlP,GAAckP,EAC/C,OAAOL,EAAW,IAAI,SAAUrW,EAAWlzB,EAAG,CAC1C,IAAIyC,EAAK83B,EAAOgC,GAAkBrJ,CAAS,EAAG,CAAC,EAAGhtB,EAASzD,EAAG,CAAC,EAAG0D,EAAS1D,EAAG,CAAC,EAC/E,GAAI0D,GAAU,KAGd,OAAOujC,GAAWlB,EAAOtV,EAAWiK,EAAMj3B,CAAM,EAAGi3B,EAAMh3B,CAAM,EAAGgV,EAAM,GAAG,OAAOyhB,EAAU,MAAM,EAAE,OAAO58B,CAAC,EAAG48B,CAAQ,CAC3H,CAAC,EAAE,OAAO,OAAO,CACrB,CACA,SAASiN,GAAoBjN,EAAU,CACnC,OAAO,SAAUa,EAAU+K,EAAO,CAC9B,IAAIoB,EAAOjB,GAASlL,EAAS,MAAOb,CAAQ,EAAE,KAC9C,OAAIgN,IAASA,IAAS,IAAQA,EAAK,QACxB,EAAc,EAAc,CAAC,EAAGrP,EAAOoP,GAAgBnB,EAAO5L,EAAUgN,EAAMnM,EAAS,SAAS,EAAE,YAAaA,EAAS,MAAM,IAAI,CAAC,EAAG,EAAK,EAAGlD,EAAOuP,GAAyBrM,EAAUb,EAAU4L,CAAK,CAAC,EAAG,EAAK,EAEpNuB,GAAoBtM,EAAUb,EAAU4L,CAAK,CACxD,CACJ,CACA,SAASuB,GAAoBtM,EAAUb,EAAU4L,EAAO,CACpD,OAAOa,GAAwB5L,EAAU9C,GAAYiC,EAAU4L,CAAK,CACxE,CACA,SAASsB,GAAyBrM,EAAUb,EAAU4L,EAAO,CACzD,OAAOa,GAAwB5L,EAAU,CAAC,KAAM,KAAM,KAAM,IAAI,EAAGb,EAAU4L,CAAK,CACtF,CACA,SAASiB,GAAqBhM,EAAU+K,EAAO5L,EAAU2L,EAAkB,CACvE,IAAIQ,EAActL,EAAS,YACtBsL,EAAY,qBACbA,EAAY,mBAAqB,CAAC,GAEtC,IAAItmC,EAAKg7B,EAAS,SAAS,EAAGgL,EAAchmC,EAAG,YAAaimC,EAAcjmC,EAAG,SAAUywB,EAAYzwB,EAAG,UAClGumC,EAAqBD,EAAY,mBACjC5tB,EAAOsiB,EAAS,MAAM,KACtBwL,EAAgBxtB,GAAKyX,CAAS,EAC9B0V,EAAcF,EAAc,KAAK,GAAK,IAC1C,OAAQH,GAAoB3iC,GAAQojC,CAAkB,GAAG,IAAI,SAAUpN,EAAK,CACxE,IAAI4E,EAAUjE,GAAkBX,CAAG,EACnC,GAAI,CAAC4E,EACD,OAAO,KAEX,IAAI0I,GAAqBpiC,GAAS8hC,EAAa,EAAE,EAAIK,EAAgBzM,GAAoBZ,CAAG,EAAI,KAAO,IACnGnqB,EAAa,CAAC,gBAAgB,EAClC,OAAImrB,GACAnrB,EAAW,KAAK,YAAamrB,CAAQ,EAEjC4L,EAAM,cAAc,MAAO,CAAE,UAAWlkC,GAAO,MAAM,OAAQ,EAAc,CAAC,EAAGi2B,EAAO9oB,CAAU,EAAG,EAAK,CAAC,EAAG,gBAAiBy3B,EAAmB,iBAAkBtN,EAAK,IAAK,oBAAoB,OAAOA,CAAG,EAAG,MAAOwN,GAAoB,MAAM,OAAQ,EAAc,CAACV,EAAavtB,CAAI,EAAGof,EAAOiG,EAAQ,IAAI,SAAUhmC,EAAO,CAAE,OAAOiuC,EAAYjuC,CAAK,CAAG,CAAC,CAAC,EAAG,EAAK,CAAC,CAAE,CAAC,CACpX,CAAC,CACL,CAEA,SAASwvC,GAAgBC,EAAQC,EAAeC,EAAiB,CAC7D,IAAI1nC,EAAKwnC,GAAU,CAAC,EAAGlnC,EAAKN,EAAG,SAAU2L,EAAWrL,IAAO,OAAS,SAAWA,EAAIG,EAAKT,EAAG,KAAMrG,EAAO8G,IAAO,OAAS,KAAYA,EAAIE,EAAKX,EAAG,IAAKpG,EAAM+G,IAAO,OAAS,KAAYA,EAAI+Y,EAAK1Z,EAAG,MAAOo0B,EAAQ1a,IAAO,OAAS,IAAWA,EAAIC,EAAK3Z,EAAG,OAAQq0B,EAAS1a,IAAO,OAAS,IAAWA,EACjSguB,EAAa,CACb,SAAUh8B,EACV,KAAMhS,EACN,IAAKC,EACL,MAAOw6B,EACP,OAAQC,CACZ,EACA,MAAO,CACH,SAAUuT,GAAYD,EAAYF,EAAe,EAAI,EACrD,WAAYG,GAAYD,EAAYD,EAAiB,EAAK,CAC9D,CACJ,CACA,SAASG,GAAU7M,EAAU8M,EAAgB,CACzC,IAAI9nC,EAAKg7B,EAAS,MAAO16B,EAAKN,EAAG,oBAAqBmY,EAAkB7X,EAAG,aAAc4X,EAAiB5X,EAAG,YAAaynC,EAAaznC,EAAG,WAAY0nC,EAAY1nC,EAAG,UAAWG,EAAKT,EAAG,WAAYioC,EAAiBxnC,EAAG,KAAMynC,EAAgBznC,EAAG,IAAK0nC,EAAkB1nC,EAAG,MAAO2nC,EAAmB3nC,EAAG,OACpS+mC,EAASM,GAAkB9M,EAAS,MAAM,QAAU,CAAC,EACrDrvB,EAAW67B,EAAO,UAAY,SAC9Ba,EAAQ18B,IAAa,MACrBhL,EAAK6mC,EAAO,KAAM7tC,EAAOgH,IAAO,OAAS,KAAYA,EAAI+Y,EAAK8tB,EAAO,IAAK5tC,EAAM8f,IAAO,OAAS,KAAYA,EAC5GC,EAAK6tB,EAAO,MAAOpT,EAAQza,IAAO,OAAS0uB,EAAQ,KAAY,IAAW1uB,EAAIE,EAAK2tB,EAAO,OAAQnT,EAASxa,IAAO,OAASwuB,EAAQ,KAAY,IAAWxuB,EAC9J,OAAIwuB,IACAjU,EAAQlc,EAAiBiwB,EAAkBF,EAAiB7T,EAC5DC,EAASlc,EAAkBiwB,EAAmBF,EAAgB7T,GAE3D,CACH,KAAM16B,EAAOsuC,EAAiBF,EAC9B,MAAO3T,EAAQ6T,EAAiBF,EAChC,IAAKnuC,EAAMsuC,EAAgBF,EAC3B,OAAQ3T,EAAS6T,EAAgBF,CACrC,CACJ,CACA,SAASM,GAAoBtN,EAAUmD,EAAUoK,EAAQ,CACrD,IAAIvoC,EAAK6nC,GAAU7M,CAAQ,EAAGrhC,EAAOqG,EAAG,KAAMpG,EAAMoG,EAAG,IAAKo0B,EAAQp0B,EAAG,MAAOq0B,EAASr0B,EAAG,OACtFM,EAAKw3B,EAAOyQ,EAAQ,CAAC,EAAGC,EAAOloC,EAAG,CAAC,EAAGmoC,EAAOnoC,EAAG,CAAC,EACjDG,EAAKq3B,EAAO3L,GAAMoc,EAAQpK,CAAQ,EAAG,CAAC,EAAGpkC,EAAK0G,EAAG,CAAC,EAAGzG,EAAKyG,EAAG,CAAC,EAC9D,EAAI1G,CAAE,EAAI,KACVA,EAAK,GAEL,EAAIC,CAAE,EAAI,KACVA,EAAK,GAET,IAAI0uC,EAAW1uC,EAAK,EAChB2uC,EAAU5uC,EAAK,EACf6uC,EAAe,CACf,QAAS,GACT,OAAQ,EACR,IAAK,CACT,EACIC,EAAiB,CACjB,QAAS,GACT,OAAQ,EACR,IAAK,CACT,EACA,GAAI9uC,IAAO,GAAKC,IAAO,EACnB,MAAO,CACH,SAAU4uC,EACV,WAAYC,CAChB,EAEC,GAAI9uC,IAAO,EACR2uC,EACIrU,EAASoU,IACTI,EAAe,IAAMxU,EACrBwU,EAAe,OAASJ,EAAOpU,GAI/Bz6B,EAAM6uC,IACNI,EAAe,IAAMjvC,EACrBivC,EAAe,OAASJ,EAAO7uC,WAIlCI,IAAO,EACR2uC,EACIvU,EAAQoU,IACRI,EAAa,IAAMxU,EACnBwU,EAAa,OAASJ,EAAOpU,GAI7Bz6B,EAAO6uC,IACPI,EAAa,IAAMjvC,EACnBivC,EAAa,OAASJ,EAAO7uC,OAIpC,CAED,IAAI9S,EAAImT,EAAKD,EACT,EAAIwuC,EAAO,CAAC,EAAI1hD,EAAI2hD,EACpBhvC,EAAI,EACJD,EAAI,EACJuvC,EAAU,GACVH,GAAWvU,GAASoU,GACpBhvC,EAAI3S,EAAIutC,EAAQ,EAChB76B,EAAI66B,EACJ0U,EAAU,IAEL,CAACH,GAAWH,GAAQ7uC,IACzBH,EAAI3S,EAAI8S,EAAO,EACfJ,EAAII,EACJmvC,EAAU,IAEVA,IACItvC,EAAII,GAAOJ,EAAI66B,KACfyU,EAAU,IAGbA,IACGJ,GAAYrU,GAAUoU,GACtBjvC,EAAI66B,EACJ96B,GAAKC,EAAI,GAAK3S,EACdiiD,EAAU,IAEL,CAACJ,GAAYD,GAAQ7uC,IAC1BJ,EAAII,EACJL,GAAKC,EAAI,GAAK3S,EACdiiD,EAAU,KAGdA,IACAF,EAAa,QAAU,GACvBA,EAAa,IAAMrvC,EACnBqvC,EAAa,OAASJ,EAAOjvC,EAC7BsvC,EAAe,QAAU,GACzBA,EAAe,IAAMrvC,EACrBqvC,EAAe,OAASJ,EAAOjvC,EAEvC,CACA,MAAO,CACH,SAAUovC,EACV,WAAYC,CAChB,CACJ,CACA,SAASjB,GAAYJ,EAAQ9M,EAAOqO,EAAY,CAE5C,IAAIC,EAAgBxB,EAAOuB,EAAa,OAAS,KAAK,EAClDE,EAAczB,EAAOuB,EAAa,QAAU,QAAQ,EAEpDG,EAAS,KAAK,IAAI,MAAM,KAAM,EAAc,CAAC,EAAGpR,EAAO4C,CAAK,EAAG,EAAK,CAAC,EACrEyO,EAAS,KAAK,IAAI,MAAM,KAAM,EAAc,CAAC,EAAGrR,EAAO4C,CAAK,EAAG,EAAK,CAAC,EACrE0O,EAAa,CAAC,EAClB,OAAIJ,EAAgB,EAAIE,GACpBE,EAAW,KAAK,CACZ,UAAW,QACX,QAAS,GACT,OAAQF,EAASF,EACjB,IAAKA,CACT,CAAC,EAEDC,EAAc,EAAIE,GAClBC,EAAW,KAAK,CACZ,UAAW,MACX,QAAS,GACT,OAAQD,EAASF,EACjB,IAAKA,CACT,CAAC,EAEAG,EAAW,QACZA,EAAW,KAAK,CACZ,QAAS,GACT,OAAQ,EACR,IAAK,CACT,CAAC,EAEEA,EAAW,KAAK,SAAUviD,EAAGC,EAAG,CAAE,OAAO,EAAIA,EAAE,MAAM,EAAI,EAAID,EAAE,MAAM,CAAG,CAAC,CACpF,CACA,SAASwiD,GAAgBC,EAAeC,EAAWtvC,EAAK,CACpD,IAAIuvC,EAAYvvC,EAAMqvC,EAAc,IAAI,SAAUtrC,EAAK,CAAE,OAAOgvB,GAAOhvB,EAAK/D,CAAG,CAAG,CAAC,EAAIqvC,EACvF,OAAOE,EAAU,KAAK,SAAUxrC,EAAK,CACjC,OAAQA,EAAI,CAAC,EAAIurC,EAAU,MAAQ,EAAIvrC,EAAI,CAAC,EAAIurC,EAAU,IAAI,EAAI,IAC1DvrC,EAAI,CAAC,EAAIurC,EAAU,OAAS,EAAIvrC,EAAI,CAAC,EAAIurC,EAAU,KAAK,EAAI,IAC5DvrC,EAAI,CAAC,EAAIurC,EAAU,KAAO,EAAIvrC,EAAI,CAAC,EAAIurC,EAAU,GAAG,EAAI,IACxDvrC,EAAI,CAAC,EAAIurC,EAAU,QAAU,EAAIvrC,EAAI,CAAC,EAAIurC,EAAU,MAAM,EAAI,EAC1E,CAAC,CACL,CACA,SAASE,GAAYC,EAAKC,EAAU5xC,EAAO,CACvC,IAAI,EAAI6xC,GAAYF,CAAG,EACnBxd,EAAU,KAAK,KAAK,EAAI,EAAIyd,EAAWA,CAAQ,GAAK,EACxD,MAAO,CAACzd,EAAS,CAACA,CAAO,EAAE,KAAK,SAAU,EAAGplC,EAAG,CAC5C,OAAO,EAAI,EAAI4iD,EAAI3xC,EAAQ,EAAI,CAAC,CAAC,EAAI,EAAIjR,EAAI4iD,EAAI3xC,EAAQ,EAAI,CAAC,CAAC,CACnE,CAAC,EAAE,IAAI,SAAUiG,EAAK,CAClB,OAAOmH,GAAO,CAAC,EAAG,CAAC,EAAGpN,EAAQ,CAACiG,EAAK2rC,CAAQ,EAAI,CAACA,EAAU3rC,CAAG,CAAC,CACnE,CAAC,CACL,CACA,SAAS6rC,GAAkB7O,EAAU8O,EAAWN,EAAW/b,EAAQh0B,EAAU,CACzE,GAAI,CAACuhC,EAAS,MAAM,OAChB,MAAO,CAAC,EAEZ,IAAI/gC,EAAMR,EAAW,KAAK,GAAK,IAC3BuG,EAAK6nC,GAAU7M,CAAQ,EAAGrhC,EAAOqG,EAAG,KAAMpG,EAAMoG,EAAG,IAAKo0B,EAAQp0B,EAAG,MAAOq0B,EAASr0B,EAAG,OACtF3K,EAAesE,EAAO8zB,EAAO,CAAC,EAC9Bn4B,EAAgB8+B,EAAQ3G,EAAO,CAAC,EAChCt4B,EAAcyE,EAAM6zB,EAAO,CAAC,EAC5Br4B,EAAiBi/B,EAAS5G,EAAO,CAAC,EAClC8b,EAAY,CACZ,KAAMl0C,EACN,IAAKF,EACL,MAAOG,EACP,OAAQF,CACZ,EACA,GAAI,CAACi0C,GAAgBG,EAAWD,EAAW,CAAC,EACxC,MAAO,CAAC,EAEZ,IAAIh8B,EAAS,CAAC,EACd,OACI,CAAClY,EAAc,CAAC,EAChB,CAACC,EAAe,CAAC,EACjB,CAACH,EAAa,CAAC,EACf,CAACC,EAAgB,CAAC,CACtB,EAAE,QAAQ,SAAU4K,EAAI,CACpB,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAG2pC,EAAWrpC,EAAG,CAAC,EAAGvI,EAAQuI,EAAG,CAAC,EACtDkpC,EAAU,QAAQ,SAAUtd,EAAS,CACjC,IAAI6d,EAAe5kC,GAAO,CAAC,EAAG,CAAC,EAAG+mB,CAAO,EACzC3e,EAAO,KAAK,MAAMA,EAAQ,EAAc,CAAC,EAAGuqB,EAAO2R,GAAYvd,EAASyd,EAAU5xC,CAAK,EAClF,IAAI,SAAUiyC,EAAc,CAAE,OAAO/vC,EAAM+vC,EAAeD,CAAc,CAAC,EACzE,OAAO,SAAUE,EAAS,CAAE,MAAO,CAACZ,GAAgBS,EAAWP,EAAWU,CAAO,CAAG,CAAC,EACrF,IAAI,SAAUA,EAAS,CAAE,OAAO5lC,GAAS4lC,EAAU,IAAM,KAAK,GAAI,EAAQ,CAAG,CAAC,CAAC,EAAG,EAAK,CAAC,CACjG,CAAC,CACL,CAAC,EACM18B,CACX,CAEA,IAAI28B,GAAiB,CAAC,OAAQ,QAAS,QAAQ,EAC3CC,GAAmB,CAAC,MAAO,SAAU,QAAQ,EAC7CC,GAAsB,CACtB,KAAQ,QACR,MAAS,MACT,OAAU,SACV,IAAO,QACP,OAAU,MACV,OAAU,QACd,EACIC,GAAqB,CACrB,MAAO,OACP,IAAK,QACL,OAAQ,QACZ,EACIC,GAAuB,CACvB,MAAO,MACP,IAAK,SACL,OAAQ,QACZ,EACA,SAASC,IAAmB,CACxB,MAAO,CACH,KAAM,GACN,IAAK,GACL,MAAO,GACP,OAAQ,EACZ,CACJ,CACA,SAASC,GAAcxP,EAAUb,EAAU,CACvC,IAAIn6B,EAAKg7B,EAAS,MAAOyP,EAAYzqC,EAAG,UAAWwnC,EAASxnC,EAAG,OAAQ0qC,EAAc1qC,EAAG,YAAa2qC,EAAqB3qC,EAAG,mBAAoB4qC,EAAuB5qC,EAAG,qBAAsB6qC,EAAgB7qC,EAAG,cAAe8qC,EAAiB9qC,EAAG,eAAgBM,EAAK06B,EAAS,MAAO+P,EAAazqC,EAAG,WAAY0qC,EAAa1qC,EAAG,WACxU,MAAI,CAACmqC,GACD,CAACO,GACA7Q,GAAYsQ,IAAc,IAAQA,EAAU,QAAQtQ,CAAQ,EAAI,EAC1D,GAEP,GAAA0Q,GACAC,GACAtD,GACAkD,GACCK,GAAcA,EAAW,QACzBJ,GAAsBA,EAAmB,QACzCC,GAAwBA,EAAqB,OAItD,CACA,SAASK,GAAkBC,EAAgB,CACvC,OAAIA,IAAmB,GACZ,CAAC,EAEHA,IAAmB,IAAQ,CAACA,EAC1B,CAAE,KAAM,GAAM,MAAO,GAAM,IAAK,GAAM,OAAQ,EAAK,EAEvDA,CACX,CACA,SAASC,GAAsBD,EAAgBE,EAAW,CACtD,IAAIC,EAAqBJ,GAAkBC,CAAc,EACrDI,EAAgB,CAAC,EACrB,QAAS/8B,KAAU88B,EACX98B,KAAU68B,GAAaC,EAAmB98B,CAAM,IAChD+8B,EAAc/8B,CAAM,EAAI68B,EAAU78B,CAAM,GAGhD,OAAO+8B,CACX,CACA,SAASC,GAAwBL,EAAgBE,EAAW,CACxD,IAAIE,EAAgBH,GAAsBD,EAAgBE,CAAS,EAC/DI,EAAkBrB,GAAiB,OAAO,SAAUjiD,EAAM,CAAE,OAAOA,KAAQojD,CAAe,CAAC,EAC3FG,EAAgBvB,GAAe,OAAO,SAAUhiD,EAAM,CAAE,OAAOA,KAAQojD,CAAe,CAAC,EAC3F,MAAO,CACH,gBAAiBE,EACjB,cAAeC,EACf,WAAYD,EAAgB,IAAI,SAAUtjD,EAAM,CAAE,OAAOojD,EAAcpjD,CAAI,CAAG,CAAC,EAC/E,SAAUujD,EAAc,IAAI,SAAUvjD,EAAM,CAAE,OAAOojD,EAAcpjD,CAAI,CAAG,CAAC,CAC/E,CACJ,CACA,SAASwjD,GAAsBxQ,EAAYyQ,EAAe,EAAG,CACzD,IAAIx0B,EAAY2jB,GAAkBI,EAAY,CAACyQ,EAAc,WAAYA,EAAc,SAAS,EAAG,CAAC,EACpG,MAAO,CACHA,EAAc,KAAOx0B,EAAU,CAAC,EAChCw0B,EAAc,IAAMx0B,EAAU,CAAC,CACnC,CACJ,CACA,SAASy0B,GAAmB5rC,EAAI,CAC5B,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGuxB,EAASjxB,EAAG,CAAC,EAAGkxB,EAASlxB,EAAG,CAAC,EACjDvG,EAAKy3B,EAAO,CAAC,EAAID,EAAO,CAAC,EACzBv3B,EAAKw3B,EAAO,CAAC,EAAID,EAAO,CAAC,EACzB,KAAK,IAAIx3B,CAAE,EAAI8D,KACf9D,EAAK,GAEL,KAAK,IAAIC,CAAE,EAAI6D,KACf7D,EAAK,GAIT,IAAInT,EAAI,EACJC,EAAI,EACJgR,EAAI,EACR,OAAKiC,EAKKC,GAQNnT,EAAI,CAACmT,EAAKD,EACVjT,EAAI,EACJgR,EAAIjR,EAAI0qC,EAAO,CAAC,EAAIA,EAAO,CAAC,IAR5BzqC,EAAI,EACJgR,EAAI,CAACy5B,EAAO,CAAC,IANb1qC,EAAI,GACJiR,EAAIy5B,EAAO,CAAC,GAcT,CAAC1qC,EAAGC,EAAGgR,CAAC,EAAE,IAAI,SAAU9B,EAAG,CAAE,OAAOqO,GAASrO,EAAG6H,EAAU,CAAG,CAAC,CACzE,CAEA,IAAIguC,GAA6B,wBAC7BC,GAA2B,sBAC3BC,GAA+B,0BAC/BC,GAA6B,wBAEjC,SAASC,GAAuBjR,EAAUkR,EAAQC,EAAQC,EAAOC,EAAOC,EAA6BC,EAA+B,CAChI,IAAIvsC,EACAosC,IAAU,SAAUA,EAAQ,CAAC,GAC7BC,IAAU,SAAUA,EAAQ,CAAC,GACjC,IAAIlgD,EAAQ6uC,EAAS,MACjBwR,IAA2BxsC,EAAKg7B,EAAS,MAAM,qBAAuB,MAAQh7B,IAAO,OAAS,OAASA,EAAG,YAAc,CAAC,EAAG,CAAC,EAC7HysC,EAA0BC,GAAYH,EAA+BpgD,EAAM4/C,EAA4B,EAAG,CAAC,EAC3GY,EAAwBD,GAAYJ,EAA6BngD,EAAM6/C,EAA0B,EAAG,CAAC,EACzG,OAAOY,GAAe5R,EAAS,MAAM,WAAYkR,EAAQC,EAAQC,EAAOC,EAAOI,EAAyBE,EAAuBH,CAAsB,CACzJ,CACA,SAASI,GAAe7B,EAAYmB,EAAQC,EAAQC,EAAOC,EAAOI,EAAyBE,EAAuBE,EAAW,CACzH,MAAO,CACH,SAAUC,GAAU/B,EAAY,WAAYmB,EAAQS,EAAwBE,EAAU,CAAC,EAAGT,CAAK,EAC/F,WAAYU,GAAU/B,EAAY,aAAcoB,EAAQM,EAA0BI,EAAU,CAAC,EAAGR,CAAK,CACzG,CACJ,CACA,SAASU,GAAmB/R,EAAUmD,EAAUoK,EAAQ,CACpD,IAAIvoC,EAAK83B,EAAOyQ,EAAQ,CAAC,EAAGC,EAAOxoC,EAAG,CAAC,EAAGyoC,EAAOzoC,EAAG,CAAC,EACjDM,EAAKw3B,EAAOqG,EAAU,CAAC,EAAG/yB,EAAS9K,EAAG,CAAC,EAAG+K,EAAS/K,EAAG,CAAC,EACvDG,EAAKq3B,EAAO3L,GAAMoc,EAAQpK,CAAQ,EAAG,CAAC,EAAGpkC,EAAK0G,EAAG,CAAC,EAAGzG,EAAKyG,EAAG,CAAC,EAC9DioC,EAAW1uC,EAAK,EAChB2uC,EAAU5uC,EAAK,EACnBA,EAAKizC,GAAYjzC,CAAE,EACnBC,EAAKgzC,GAAYhzC,CAAE,EACnB,IAAI4uC,EAAe,CACf,OAAQ,GACR,OAAQ,EACR,IAAK,CACT,EACIC,EAAiB,CACjB,OAAQ,GACR,OAAQ,EACR,IAAK,CACT,EACA,GAAI9uC,IAAO,GAAKC,IAAO,EACnB,MAAO,CACH,SAAU4uC,EACV,WAAYC,CAChB,EAEJ,IAAIloC,EAAKsrC,GAAuBjR,EAAUjhC,EAAK,CAACyuC,CAAI,EAAI,CAAC,EAAGxuC,EAAK,CAACyuC,CAAI,EAAI,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,OAAW,MAAS,EAAGwE,EAAmBtsC,EAAG,SAAUusC,EAAqBvsC,EAAG,WACrKssC,EAAiB,SAAS,OAAO,SAAUjtC,EAAI,CAC3C,IAAIhC,EAAMgC,EAAG,IACb,OAAO2oC,EAAU3qC,GAAOoN,EAASpN,GAAOoN,CAC5C,CAAC,EACD8hC,EAAmB,SAAS,OAAO,SAAUltC,EAAI,CAC7C,IAAIhC,EAAMgC,EAAG,IACb,OAAO0oC,EAAW1qC,GAAOqN,EAASrN,GAAOqN,CAC7C,CAAC,EACD4hC,EAAiB,OAASA,EAAiB,SAAS,OAAS,EAC7DC,EAAmB,OAASA,EAAmB,SAAS,OAAS,EACjE,IAAIxzB,EAAKyzB,GAA4BF,CAAgB,EAAGG,EAAiB1zB,EAAG,OAAQ2zB,EAAoB3zB,EAAG,UACvGC,EAAKwzB,GAA4BD,CAAkB,EAAGI,EAAmB3zB,EAAG,OAAQ4zB,EAAsB5zB,EAAG,UAC7G6zB,EAAgBF,EAAmBC,EAAoB,IAAI,CAAC,EAAI,EAChEE,EAAcL,EAAiBC,EAAkB,IAAI,CAAC,EAAI,EAC9D,GAAItzC,IAAO,EACHuzC,IACAzE,EAAe,OAAS,GACxBA,EAAe,IAAM0E,EAAoB,IAAI,CAAC,EAC9C1E,EAAe,OAASJ,EAAOI,EAAe,aAG7C7uC,IAAO,EACRozC,IACAxE,EAAa,OAAS,GACtBA,EAAa,IAAM6E,EACnB7E,EAAa,OAASJ,EAAOiF,OAGhC,CAED,IAAI5mD,EAAImT,EAAKD,EACTjT,EAAIyhD,EAAO,CAAC,EAAI1hD,EAAI2hD,EACpBhvC,EAAI,EACJD,EAAI,EACJm0C,EAAS,GACTN,GACA7zC,EAAIk0C,EACJj0C,EAAI3S,EAAI0S,EAAIzS,EACZ4mD,EAAS,IAEJJ,IACL9zC,EAAIg0C,EACJj0C,GAAKC,EAAI1S,GAAKD,EACd6mD,EAAS,IAETA,IACA9E,EAAa,OAAS,GACtBA,EAAa,IAAMrvC,EACnBqvC,EAAa,OAASJ,EAAOjvC,EAC7BsvC,EAAe,OAAS,GACxBA,EAAe,IAAMrvC,EACrBqvC,EAAe,OAASJ,EAAOjvC,EAEvC,CACA,MAAO,CACH,SAAUovC,EACV,WAAYC,CAChB,CACJ,CACA,SAAS8E,GAAmBxU,EAAK,CAC7B,IAAIyU,EAAkB,GACtB,OAAIzU,IAAQ,IAAMA,IAAQ,OAASA,IAAQ,OACvCyU,EAAkB,QAEbzU,IAAQ,GAAKA,IAAQ,UAAYA,IAAQ,SAC9CyU,EAAkB,UAEbzU,IAAQ,GAAKA,IAAQ,SAAWA,IAAQ,YAC7CyU,EAAkB,OAEfA,CACX,CACA,SAASC,GAAW7S,EAAU9nC,EAAMo5C,EAA6BC,EAA+B,CAC5F,IAAI7R,EAAQ6Q,GAAwBvQ,EAAS,MAAM,eAAgB9nC,CAAI,EACnEqa,EAAS0+B,GAAuBjR,EAAUN,EAAM,SAAUA,EAAM,WAAYA,EAAM,cAAc,IAAI,SAAUxyC,EAAM,CAAE,OAAOylD,GAAmBzlD,CAAI,CAAG,CAAC,EAAGwyC,EAAM,gBAAgB,IAAI,SAAUxyC,EAAM,CAAE,OAAOylD,GAAmBzlD,CAAI,CAAG,CAAC,EAAGokD,EAA6BC,CAA6B,EACtSuB,EAAsBH,GAAmBjT,EAAM,gBAAgBntB,EAAO,WAAW,KAAK,CAAC,EACvFwgC,EAAoBJ,GAAmBjT,EAAM,cAAcntB,EAAO,SAAS,KAAK,CAAC,EACrF,MAAO,CACH,SAAU,EAAS,EAAS,CAAC,EAAGA,EAAO,QAAQ,EAAG,CAAE,UAAWwgC,CAAkB,CAAC,EAClF,WAAY,EAAS,EAAS,CAAC,EAAGxgC,EAAO,UAAU,EAAG,CAAE,UAAWugC,CAAoB,CAAC,CAC5F,CACJ,CACA,SAASX,GAA4Ba,EAAU,CAC3C,IAAIN,EAASM,EAAS,OACtB,GAAI,CAACN,EACD,MAAO,CACH,OAAQ,GACR,OAAQ,EACR,KAAM,GACN,IAAK,EACL,UAAW,IACf,EAEJ,IAAIO,EAAUD,EAAS,SAAS,CAAC,EAC7BE,EAAgBD,EAAQ,eAAe,CAAC,EACxC3U,EAAS4U,EAAc,OACvB/R,EAAO+R,EAAc,KACrBC,EAAYD,EAAc,UAC9B,MAAO,CACH,OAAQR,EACR,OAAQpU,EACR,KAAM6C,EACN,IAAK8R,EAAQ,IACb,UAAWE,CACf,CACJ,CACA,SAASrB,GAAU/B,EAAYqD,EAAYC,EAAaC,EAAeC,EAAM,CACzE,IAAIvuC,EAAIM,EAER,GADIiuC,IAAS,SAAUA,EAAO,CAAC,GAC3B,CAACxD,GAAc,CAACA,EAAW,OAC3B,MAAO,CACH,OAAQ,GACR,MAAO,GACP,UAAW,GACX,SAAU,CAAC,CACf,EAEJ,IAAIhC,EAAaqF,IAAe,WAC5BI,EAAUzF,EAAa,EAAI,EAC3B0F,EAAeJ,EAAY,IAAI,SAAUK,EAAW32C,EAAO,CAC3D,IAAI04B,EAAY8d,EAAKx2C,CAAK,GAAK,GAC3B42C,EAAiB5D,EAAW,IAAI,SAAUoD,EAAW,CACrD,IAAInwC,EAAMmwC,EAAU,IAChB7U,EAASoV,EAAY1wC,EAAIwwC,CAAO,EACpC,MAAO,CACH,OAAQlV,EACR,KAAM,EAAIA,CAAM,EAChB,UAAW6U,EACX,UAAW1d,CACf,CACJ,CAAC,EAAE,OAAO,SAAUzwB,EAAI,CACpB,IAAImuC,EAAYnuC,EAAG,UAAWm8B,EAAOn8B,EAAG,KACpCyI,EAAO0lC,EAAU,KACrB,MAAI,EAAA1lC,IAAS2lC,GACNjS,EAAOmS,EAIlB,CAAC,EAAE,KAAK,SAAUznD,EAAGC,EAAG,CAAE,OAAOD,EAAE,KAAOC,EAAE,IAAM,CAAC,EACnD,MAAO,CACH,IAAK4nD,EACL,MAAO32C,EACP,eAAgB42C,EAChB,UAAWle,CACf,CACJ,CAAC,EAAE,OAAO,SAAUme,EAAa,CAC7B,OAAOA,EAAY,eAAe,OAAS,CAC/C,CAAC,EAAE,KAAK,SAAU/nD,EAAGC,EAAG,CACpB,OAAOD,EAAE,eAAe,CAAC,EAAE,KAAOC,EAAE,eAAe,CAAC,EAAE,IAC1D,CAAC,EACG4mD,EAASe,EAAa,OAAS,EACnC,MAAO,CACH,OAAQf,EACR,MAAOA,EAASe,EAAa,CAAC,EAAE,MAAQ,GACxC,WAAYnuC,GAAMN,EAAKyuC,EAAa,CAAC,KAAO,MAAQzuC,IAAO,OAAS,OAASA,EAAG,aAAe,MAAQM,IAAO,OAASA,EAAK,GAC5H,SAAUmuC,CACd,CACJ,CACA,SAASI,GAAwB7T,EAEjCN,EAAOoU,EAAexC,EAA6BC,EAA+B,CAC9E,IAAIgC,EAAO,CAAC,EACRO,EAAc,CAAC,GAAKA,EAAc,CAAC,EACnCP,EAAO,CACHO,EACA,CAAC,CAACA,EAAc,CAAC,EAAGA,EAAc,CAAC,CAAC,EACpC,CAACA,EAAc,CAAC,EAAG,CAACA,EAAc,CAAC,CAAC,CACxC,EAEK,CAACA,EAAc,CAAC,GAAK,CAACA,EAAc,CAAC,EAC1C,CACI,CAAC,GAAI,EAAE,EACP,CAAC,EAAG,EAAE,EACN,CAAC,EAAG,CAAC,EACL,CAAC,GAAI,CAAC,CACV,EAAE,QAAQ,SAAU3V,EAAK57B,EAAGgF,EAAK,CAC7B,IAAIwsC,EAAWxsC,EAAIhF,EAAI,CAAC,GAAKgF,EAAI,CAAC,EAClCgsC,EAAK,KAAKpV,CAAG,EACboV,EAAK,KAAK,EACLpV,EAAI,CAAC,EAAI4V,EAAQ,CAAC,GAAK,GACvB5V,EAAI,CAAC,EAAI4V,EAAQ,CAAC,GAAK,CAC5B,CAAC,CACL,CAAC,EAGG/T,EAAS,MAAM,UACfuT,EAAK,KAAK,CAAC,GAAI,EAAE,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,EAAG,EAAE,EAAG,CAAC,EAAG,CAAC,EAAGO,CAAa,GAG3DP,EAAK,KAAK,MAAMA,EAAM,EAAc,CAAC,EAAGzW,EAAOkG,GAAoB,CAC/D,CAAC,GAAI,EAAE,EACP,CAAC,EAAG,EAAE,EACN,CAAC,GAAI,EAAE,EACP,CAAC,EAAG,CAAC,CACT,EAAG8Q,CAAa,CAAC,EAAG,EAAK,CAAC,EACtBP,EAAK,OAAS,GACdA,EAAK,KAAK,EACLA,EAAK,CAAC,EAAE,CAAC,EAAIA,EAAK,CAAC,EAAE,CAAC,GAAK,GAC3BA,EAAK,CAAC,EAAE,CAAC,EAAIA,EAAK,CAAC,EAAE,CAAC,GAAK,CAChC,CAAC,GAIb,IAAI/E,EAAY+E,EAAK,IAAI,SAAUpV,EAAK,CAAE,OAAO+E,GAAkBxD,EAAOvB,CAAG,CAAG,CAAC,EAC7EjH,EAAKsX,EAAU,IAAI,SAAUxrC,EAAK,CAAE,OAAOA,EAAI,CAAC,CAAG,CAAC,EACpDm0B,EAAKqX,EAAU,IAAI,SAAUxrC,EAAK,CAAE,OAAOA,EAAI,CAAC,CAAG,CAAC,EACpDuP,EAAS0+B,GAAuBjR,EAAU9I,EAAIC,EAAIoc,EAAK,IAAI,SAAUpV,EAAK,CAAE,OAAOwU,GAAmBxU,EAAI,CAAC,CAAC,CAAG,CAAC,EAAGoV,EAAK,IAAI,SAAUpV,EAAK,CAAE,OAAOwU,GAAmBxU,EAAI,CAAC,CAAC,CAAG,CAAC,EAAGmT,EAA6BC,CAA6B,EAC9OwB,EAAoBJ,GAAmBY,EAAK,IAAI,SAAUpV,EAAK,CAAE,OAAOA,EAAI,CAAC,CAAG,CAAC,EAAE5rB,EAAO,SAAS,KAAK,CAAC,EACzGugC,EAAsBH,GAAmBY,EAAK,IAAI,SAAUpV,EAAK,CAAE,OAAOA,EAAI,CAAC,CAAG,CAAC,EAAE5rB,EAAO,WAAW,KAAK,CAAC,EACjH,MAAO,CACH,SAAU,EAAS,EAAS,CAAC,EAAGA,EAAO,QAAQ,EAAG,CAAE,UAAWwgC,CAAkB,CAAC,EAClF,WAAY,EAAS,EAAS,CAAC,EAAGxgC,EAAO,UAAU,EAAG,CAAE,UAAWugC,CAAoB,CAAC,CAC5F,CACJ,CACA,SAASkB,GAAuBnoD,EAAGC,EAAG,CAClC,IAAImoD,EAAQ,EAAIpoD,EAAE,MAAM,EACpBqoD,EAAQ,EAAIpoD,EAAE,MAAM,EACxB,OAAID,EAAE,SAAWC,EAAE,QACRooD,EAAQD,EAEVpoD,EAAE,QACA,GAEFC,EAAE,QACA,EAEFD,EAAE,QAAUC,EAAE,OACZooD,EAAQD,EAEVpoD,EAAE,OACA,GAEFC,EAAE,QAGFmoD,EAAQ,GAFN,EAKFC,EAAQ,GACN,GAEJD,EAAQC,CACnB,CACA,SAASC,GAAkBC,EAASr3C,EAAO,CACvC,OAAOq3C,EAAQ,MAAM,EAAE,KAAK,SAAUvoD,EAAGC,EAAG,CACxC,IAAIuoD,EAAQxoD,EAAE,KAAKkR,CAAK,EACpBu3C,EAAQxoD,EAAE,KAAKiR,CAAK,EACpBw3C,EAAU1oD,EAAE,OAAOkR,CAAK,EACxBy3C,EAAU1oD,EAAE,OAAOiR,CAAK,EAG5B,GAAKs3C,GAGA,GAAI,CAACC,EACN,MAAO,OAHP,OAAO,GAKX,OAAON,GAAuB,CAAE,QAASnoD,EAAE,QAAS,OAAQA,EAAE,OAAQ,OAAQ0oD,CAAQ,EAAG,CAAE,QAASzoD,EAAE,QAAS,OAAQA,EAAE,OAAQ,OAAQ0oD,CAAQ,CAAC,CACtJ,CAAC,EAAE,CAAC,CACR,CACA,SAASC,GAAuBhf,EAAW2N,EAAgBz5B,EAAW,CAClE,IAAImiC,EAAa,CAAC,EAElB,GAAIniC,EACI,EAAIy5B,EAAe,CAAC,CAAC,IAAM,GAAK,EAAIA,EAAe,CAAC,CAAC,IAAM,EAC3D0I,EAAW,KAAK,CAAC1I,EAAgB,CAAC,GAAI,EAAE,CAAC,EAAG,CAACA,EAAgB,CAAC,GAAI,CAAC,CAAC,EAAG,CAACA,EAAgB,CAAC,EAAG,EAAE,CAAC,EAAG,CAACA,EAAgB,CAAC,EAAG,CAAC,CAAC,CAAC,EAG1H0I,EAAW,KAAK,CAAC1I,EAAgB,CAAC3N,EAAU,CAAC,EAAG,CAACA,EAAU,CAAC,CAAC,CAAC,EAAG,CAAC2N,EAAgB,CAAC,CAAC3N,EAAU,CAAC,EAAGA,EAAU,CAAC,CAAC,CAAC,CAAC,EAEpHqW,EAAW,KAAK,CAAC1I,EAAgB3N,CAAS,CAAC,UAGtCA,EAAU,CAAC,GAAKA,EAAU,CAAC,GAAO,CAACA,EAAU,CAAC,GAAK,CAACA,EAAU,CAAC,EAAI,CACpE,IAAIif,EAAiBjf,EAAU,CAAC,EAAIA,EAAY,CAAC,EAAG,CAAC,EACrD,CAAC,EAAG,EAAE,EAAE,QAAQ,SAAUkf,EAAO,CAC7B,CAAC,EAAG,EAAE,EAAE,QAAQ,SAAUC,EAAO,CAC7B,IAAIhf,EAAgB,CAAC+e,EAAQD,EAAe,CAAC,EAAGE,EAAQF,EAAe,CAAC,CAAC,EACrEtR,EAAe,CAAC,IAAMxN,EAAc,CAAC,GAClCwN,EAAe,CAAC,IAAMxN,EAAc,CAAC,GAG5CkW,EAAW,KAAK,CAAC1I,EAAgBxN,CAAa,CAAC,CACnD,CAAC,CACL,CAAC,CACL,SACSH,EAAU,CAAC,EAAG,CACnB,IAAIof,EAAQ,EAAIzR,EAAe,CAAC,CAAC,IAAM,EAAI,CAAC,CAAC,EAAI,CAAC,EAAG,EAAE,EACvDyR,EAAM,QAAQ,SAAU72B,EAAM,CAC1B8tB,EAAW,KAAK,CACZ,CAAC1I,EAAe,CAAC,EAAG,EAAE,EACtB,CAACplB,EAAOyX,EAAU,CAAC,EAAG,EAAE,CAC5B,EAAG,CACC,CAAC2N,EAAe,CAAC,EAAG,CAAC,EACrB,CAACplB,EAAOyX,EAAU,CAAC,EAAG,CAAC,CAC3B,EAAG,CACC,CAAC2N,EAAe,CAAC,EAAG,CAAC,EACrB,CAACplB,EAAOyX,EAAU,CAAC,EAAG,CAAC,CAC3B,CAAC,CACL,CAAC,CACL,SACSA,EAAU,CAAC,EAAG,CACnB,IAAIof,EAAQ,EAAIzR,EAAe,CAAC,CAAC,IAAM,EAAI,CAAC,CAAC,EAAI,CAAC,EAAG,EAAE,EACvDyR,EAAM,QAAQ,SAAU72B,EAAM,CAC1B8tB,EAAW,KAAK,CACZ,CAAC,GAAI1I,EAAe,CAAC,CAAC,EACtB,CAAC,GAAIplB,EAAOyX,EAAU,CAAC,CAAC,CAC5B,EAAG,CACC,CAAC,EAAG2N,EAAe,CAAC,CAAC,EACrB,CAAC,EAAGplB,EAAOyX,EAAU,CAAC,CAAC,CAC3B,EAAG,CACC,CAAC,EAAG2N,EAAe,CAAC,CAAC,EACrB,CAAC,EAAGplB,EAAOyX,EAAU,CAAC,CAAC,CAC3B,CAAC,CACL,CAAC,CACL,CAEJ,OAAOqW,CACX,CAEA,SAASgJ,GAAYtxC,EAAKo0B,EAAM,CAG5B,IAAImd,EAAK,GAAQ,CAACnd,EAAK,CAAC,EAAE,CAAC,EAAGA,EAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EACrCod,EAAK,GAAQ,CAACpd,EAAK,CAAC,EAAE,CAAC,EAAGA,EAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EACzC,MAAO,CACH,SAAUmd,GAAMvxC,EAAI,CAAC,EACrB,WAAYwxC,GAAMxxC,EAAI,CAAC,CAC3B,CACJ,CACA,SAASyxC,GAAYzxC,EAAKwB,EAAI,CAC1B,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGoF,EAAO9E,EAAG,CAAC,EAAG+E,EAAO/E,EAAG,CAAC,EAC7CvG,EAAKsL,EAAK,CAAC,EAAID,EAAK,CAAC,EACrBpL,EAAKqL,EAAK,CAAC,EAAID,EAAK,CAAC,EACrB,EAAIrL,CAAE,EAAI,KACVA,EAAK,GAEL,EAAIC,CAAE,EAAI,KACVA,EAAK,GAET,IAAIk2C,EACAC,EACJ,GAAI,CAACp2C,EACDm2C,EAAQ9qC,EAAK,CAAC,EACd+qC,EAAQ3xC,EAAI,CAAC,UAER,CAACxE,EACNk2C,EAAQ9qC,EAAK,CAAC,EACd+qC,EAAQ3xC,EAAI,CAAC,MAEZ,CACD,IAAI3X,EAAImT,EAAKD,EAEbm2C,EAAQrpD,GAAK2X,EAAI,CAAC,EAAI4G,EAAK,CAAC,GAAKA,EAAK,CAAC,EACvC+qC,EAAQ3xC,EAAI,CAAC,CACjB,CACA,OAAO0xC,EAAQC,CACnB,CACA,SAASC,GAAgBC,EAAMzd,EAAM0d,EAAY7oD,EAAO,CACpD,OAAIA,IAAU,SAAUA,EAAQ,IACzB4oD,EAAK,MAAM,SAAU7xC,EAAK,CAC7B,IAAI3Y,EAAQoqD,GAAYzxC,EAAKo0B,CAAI,EAC7B5Z,EAAOnzB,GAAS,EACpB,OAAOmzB,IAASs3B,GAAc,EAAIzqD,CAAK,GAAK4B,CAChD,CAAC,CACL,CACA,SAAS8oD,GAAmBvyC,EAAKwyC,EAAOC,EAAK3L,EAAS5uB,EAAW,CAE7D,OADIA,IAAc,SAAUA,EAAY,GACnC4uB,GAAW0L,EAAQt6B,GAAalY,GAC7B,CAAC8mC,GAAW9mC,GAAOyyC,EAAMv6B,EAItB,CACH,QAAS,GACT,OAAQ4uB,EAAU0L,EAAQxyC,EAAMyyC,EAAMzyC,CAC1C,EAEG,CACH,QAAS,GACT,OAAQ,CACZ,CACJ,CACA,SAAS0yC,GAAgB1V,EAAUh7B,EAAI,CACnC,IAAI4yB,EAAO5yB,EAAG,KAAMswC,EAAatwC,EAAG,WAAY2wC,EAAe3wC,EAAG,aAAc4wC,EAAiB5wC,EAAG,eAAgB6wC,EAAgB7wC,EAAG,cACnIwnC,EAASxM,EAAS,MAAM,YAC5B,GAAI,CAACwM,EACD,MAAO,CACH,WAAY,GACZ,QAAS,GACT,gBAAiB,GACjB,kBAAmB,GACnB,OAAQ,CAAC,EAAG,CAAC,CACjB,EAEJ,IAAI7tC,EAAO6tC,EAAO,KAAM5tC,EAAM4tC,EAAO,IAAKjyC,EAAQiyC,EAAO,MAAO91C,EAAS81C,EAAO,OAC5EsJ,EAAW,CAAC,CAACn3C,EAAMC,CAAG,EAAG,CAACD,EAAMC,EAAMlI,CAAM,CAAC,EAC7Cq/C,EAAU,CAAC,CAACp3C,EAAMC,CAAG,EAAG,CAACD,EAAOpE,EAAOqE,CAAG,CAAC,EAC3Co3C,EAAY,CAAC,CAACr3C,EAAOpE,EAAOqE,CAAG,EAAG,CAACD,EAAOpE,EAAOqE,EAAMlI,CAAM,CAAC,EAC9Du/C,EAAa,CAAC,CAACt3C,EAAMC,EAAMlI,CAAM,EAAG,CAACiI,EAAOpE,EAAOqE,EAAMlI,CAAM,CAAC,EACpE,GAAI0+C,GAAgB,CAChB,CAACz2C,EAAMC,CAAG,EACV,CAACD,EAAOpE,EAAOqE,CAAG,EAClB,CAACD,EAAMC,EAAMlI,CAAM,EACnB,CAACiI,EAAOpE,EAAOqE,EAAMlI,CAAM,CAC/B,EAAGkhC,EAAM0d,CAAU,EACf,MAAO,CACH,WAAY,GACZ,QAAS,GACT,gBAAiB,GACjB,kBAAmB,GACnB,OAAQ,CAAC,EAAG,CAAC,CACjB,EAGJ,IAAIY,EAAeC,GAAwBve,EAAMie,EAAeE,EAASJ,CAAY,EACjFS,EAAkBD,GAAwBve,EAAMie,EAAeI,EAAYN,CAAY,EAEvFU,EAAgBF,GAAwBve,EAAMie,EAAeC,EAAUF,CAAc,EACrFU,EAAiBH,GAAwBve,EAAMie,EAAeG,EAAWJ,CAAc,EACvFW,EAAqBL,EAAa,SAAWE,EAAgB,QAC7DI,EAAkBN,EAAa,SAAWE,EAAgB,QAC1DK,EAAuBJ,EAAc,SAAWC,EAAe,QAC/DI,EAAoBL,EAAc,SAAWC,EAAe,QAC5DK,EAAiBC,GAAUV,EAAa,OAAQE,EAAgB,MAAM,EACtES,EAAmBD,GAAUP,EAAc,OAAQC,EAAe,MAAM,EACxEhY,EAAS,CAAC,EAAG,CAAC,EACdwP,EAAU,GACVgJ,EAAa,GACjB,OAAI,EAAID,CAAgB,EAAI,EAAIF,CAAc,GAC1CrY,EAAS,CAACqY,EAAgB,CAAC,EAC3B7I,EAAU0I,EACVM,EAAaP,IAGbjY,EAAS,CAAC,EAAGuY,CAAgB,EAC7B/I,EAAU4I,EACVI,EAAaL,GAEV,CACH,WAAYK,EACZ,gBAAiBN,EACjB,kBAAmBE,EACnB,QAAS5I,EACT,OAAQxP,CACZ,CACJ,CACA,SAAS6X,GAAwBve,EAAM5yB,EAAI+xC,EAAWjN,EAAS5uB,EAAW87B,EAAU,CAChF,IAAI1xC,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGnZ,EAAIyZ,EAAG,CAAC,EAAGxZ,EAAIwZ,EAAG,CAAC,EACvC2xC,EAAOrf,EAAK,CAAC,EAEbsf,EAAYH,EAAU,CAAC,EACvBI,EAAYJ,EAAU,CAAC,EAGvBK,EAAMpF,GAAYmF,EAAU,CAAC,EAAID,EAAU,CAAC,CAAC,EAC7CG,EAAMrF,GAAYmF,EAAU,CAAC,EAAID,EAAU,CAAC,CAAC,EAC7CI,EAAQxrD,EACRyrD,EAAQ1rD,EACR2rD,EAAQ,CAAC3rD,EAAIC,EAIjB,GAAKurD,GA2BA,GAAI,CAACD,EAAK,CAEX,GAAIJ,GAAY,CAACM,EAEb,MAAO,CACH,QAAS,GACT,OAAQ,CACZ,EAEC,GAAIC,EAAO,CAKZ,IAAIh5C,GAAK24C,EAAU,CAAC,EAAID,EAAK,CAAC,GAAKO,EAAQP,EAAK,CAAC,EAEjD,OAAO1B,GAAmBh3C,EAAG24C,EAAU,CAAC,EAAGC,EAAU,CAAC,EAAGrN,EAAS5uB,CAAS,CAC/E,KACK,CACD,IAAIojB,EAAS4Y,EAAU,CAAC,EAAID,EAAK,CAAC,EAC9BnJ,EAAU,EAAIxP,CAAM,IAAMpjB,GAAa,GAC3C,MAAO,CACH,QAAS4yB,EACT,OAAQA,EAAUxP,EAAS,CAC/B,CACJ,CACJ,MArDU,CAGN,GAAI0Y,GAAY,CAACO,EAEb,MAAO,CACH,QAAS,GACT,OAAQ,CACZ,EAEC,GAAID,EAAO,CAGZ,IAAI94C,EAAIg5C,GAASN,EAAU,CAAC,EAAID,EAAK,CAAC,GAAKA,EAAK,CAAC,EAEjD,OAAO1B,GAAmB/2C,EAAG04C,EAAU,CAAC,EAAGC,EAAU,CAAC,EAAGrN,EAAS5uB,CAAS,CAC/E,KACK,CAED,IAAIojB,EAAS4Y,EAAU,CAAC,EAAID,EAAK,CAAC,EAC9BnJ,EAAU,EAAIxP,CAAM,IAAMpjB,GAAa,GAC3C,MAAO,CACH,QAAS4yB,EACT,OAAQA,EAAUxP,EAAS,CAC/B,CACJ,CACJ,CA4BA,MAAO,CACH,QAAS,GACT,OAAQ,CACZ,CACJ,CACA,SAASmZ,GAAkBzX,EAAU0X,EAAWr9B,EAAO,CACnD,OAAOq9B,EAAU,IAAI,SAAUr6C,EAAM,CACjC,IAAI2H,EAAK0wC,GAAgB1V,EAAU3iC,CAAI,EAAGywC,EAAU9oC,EAAG,QAASs5B,EAASt5B,EAAG,OAAQwxC,EAAkBxxC,EAAG,gBAAiB0xC,EAAoB1xC,EAAG,kBAC7I2yC,EAAWt6C,EAAK,SAChBu6C,EAAaxX,GAAY,CACzB,MAAO/lB,EACP,MAAOikB,EAAO,CAAC,EACf,MAAOA,EAAO,CAAC,CACnB,CAAC,EAAE,IAAI,SAAUr7B,EAAMV,EAAG,CAAE,OAAOU,GAAQ00C,EAASp1C,CAAC,EAAI,EAAIo1C,EAASp1C,CAAC,EAAI,EAAI,CAAC,EAChF,MAAO,CACH,KAAMo1C,EACN,QAAS7J,EACT,gBAAiB0I,EACjB,kBAAmBE,EACnB,OAAQ,GACR,OAAQkB,CACZ,CACJ,CAAC,CACL,CACA,SAASC,GAAsB7X,EAAUN,EAAOrlB,EAAO,CACnD,IAAIrV,EACAyyB,EAAQqgB,GAA4B9X,EAAUN,EAAO,CAAC,EAAG,CAAC,EAAG,EAAK,EAAE,IAAI,SAAUriC,EAAM,CACxF,OAAO,EAAS,EAAS,CAAC,EAAGA,CAAI,EAAG,CAAE,SAAUA,EAAK,SAAS,IAAI,SAAU8gC,EAAK,CAAE,OAAO,EAAIA,CAAG,EAAI,CAAG,CAAC,CAAE,CAAC,CAChH,CAAC,EACG4Z,EAAiBN,GAAkBzX,EAAUvI,EAAOpd,CAAK,EACzD29B,EAAkB7D,GAAkB4D,EAAgB,CAAC,EACrDE,EAAmB9D,GAAkB4D,EAAgB,CAAC,EACtDpB,EAAiB,EACjBE,EAAmB,EACnBL,EAAkBwB,EAAgB,iBAAmBC,EAAiB,gBACtEvB,EAAoBsB,EAAgB,mBAAqBC,EAAiB,kBAC9E,OAAIzB,GAAmBE,KACnB1xC,EAAK83B,EAAOyF,GAAmB,CAC3B,MAAOloB,EACP,MAAO,CAAC29B,EAAgB,OAAO,CAAC,EAChC,MAAO,CAACC,EAAiB,OAAO,CAAC,CACrC,CAAC,EAAG,CAAC,EAAGtB,EAAiB3xC,EAAG,CAAC,EAAG6xC,EAAmB7xC,EAAG,CAAC,GAEpD,CACH,SAAU,CACN,QAASwxC,EACT,OAAQG,CACZ,EACA,WAAY,CACR,QAASD,EACT,OAAQG,CACZ,CACJ,CACJ,CACA,SAASqB,GAA2BziB,EAAW9rB,EAAW,CACtD,IAAIwuC,EAAiB,CAAC,EAClB55C,EAAIk3B,EAAU,CAAC,EACfj3B,EAAIi3B,EAAU,CAAC,EACnB,OAAIl3B,GAAKC,EACL25C,EAAe,KAAK,CAAC,CAAC,EAAG35C,EAAI,CAAC,EAAGi3B,EAAW,CAAC,CAACl3B,EAAGC,CAAC,CAAC,EAAG,CAAC,CAACD,EAAI,EAAG,CAAC,EAAGk3B,EAAW,CAACl3B,EAAG,CAACC,CAAC,CAAC,CAAC,EAEjFD,GAEL45C,EAAe,KAAK,CAAC,CAAC55C,EAAI,EAAG,CAAC,EAAG,CAACA,EAAG,CAAC,EAAG,CAACA,EAAG,EAAE,CAAC,CAAC,EAC7CoL,GACAwuC,EAAe,KAAK,CAAC,CAAC,EAAG,EAAE,EAAG,CAAC55C,EAAG,EAAE,EAAG,CAAC,CAACA,EAAG,EAAE,CAAC,EAAG,CAAC,CAAC,EAAG,CAAC,EAAG,CAACA,EAAG,CAAC,EAAG,CAAC,CAACA,EAAG,CAAC,CAAC,CAAC,GAG1EC,GAEL25C,EAAe,KAAK,CAAC,CAAC,EAAG35C,EAAI,CAAC,EAAG,CAAC,EAAGA,CAAC,EAAG,CAAC,GAAIA,CAAC,CAAC,CAAC,EAC7CmL,GACAwuC,EAAe,KAAK,CAAC,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI35C,CAAC,EAAG,CAAC,GAAI,CAACA,CAAC,CAAC,EAAG,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAGA,CAAC,EAAG,CAAC,EAAG,CAACA,CAAC,CAAC,CAAC,GAK/E25C,EAAe,KAAK,CAAC,CAAC,GAAI,CAAC,EAAG,CAAC,GAAI,EAAE,EAAG,CAAC,GAAI,CAAC,CAAC,EAAG,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,EAAE,EAAG,CAAC,EAAG,CAAC,CAAC,EAAG,CAAC,CAAC,EAAG,EAAE,EAAG,CAAC,GAAI,EAAE,EAAG,CAAC,EAAG,EAAE,CAAC,EAAG,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,GAAI,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC,CAAC,EAEjIA,CACX,CACA,SAASL,GAA4B9X,EAAUN,EAAOjK,EAAW9rB,EAAW,CACxE,IAAI3E,EAAKg7B,EAAS,MAAOM,EAAYt7B,EAAG,UAAWy6B,EAAOz6B,EAAG,KACzDozC,EAAezY,GAAeW,EAAW,IAAK,IAAKb,EAAO,EAAI,CAAC,EAC/D90B,EAASu4B,GAAkBkV,EAAc,CAAC,EAAG,CAAC,CAAC,EACnD,OAAOF,GAA2BziB,EAAW9rB,CAAS,EAAE,IAAI,SAAU3E,EAAI,CACtE,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAG2yC,EAAWryC,EAAG,CAAC,EAAG+yC,EAAO/yC,EAAG,CAAC,EAAGgzC,EAAOhzC,EAAG,CAAC,EAC/DizC,EAAc,CACdrV,GAAkBkV,EAAcC,CAAI,EACpCnV,GAAkBkV,EAAcE,CAAI,CACxC,EACIzC,EAAgBjF,GAAmB2H,CAAW,EAC9C9yC,EAAKqvC,GAAYnqC,EAAQ4tC,CAAW,EAAG5C,EAAelwC,EAAG,SAAUmwC,EAAiBnwC,EAAG,WACvF6vC,EAAaL,GAAYtqC,EAAQ4tC,CAAW,GAAK,EACrD,MAAO,CACH,SAAUZ,EACV,WAAYrC,EACZ,aAAcK,EACd,eAAgBC,EAChB,cAAeC,EACf,KAAM,CACF3S,GAAkBxD,EAAO2Y,CAAI,EAC7BnV,GAAkBxD,EAAO4Y,CAAI,CACjC,CACJ,CACJ,CAAC,CACL,CACA,SAASE,GAAclK,EAAemK,EAAW9tC,EAAQ1L,EAAK,CAC1D,IAAIuvC,EAAYvvC,EAAMqvC,EAAc,IAAI,SAAUtrC,EAAK,CAAE,OAAOgvB,GAAOhvB,EAAK/D,CAAG,CAAG,CAAC,EAAIqvC,EACvF,MAAO,CACH,CAACE,EAAU,CAAC,EAAGA,EAAU,CAAC,CAAC,EAC3B,CAACA,EAAU,CAAC,EAAGA,EAAU,CAAC,CAAC,EAC3B,CAACA,EAAU,CAAC,EAAGA,EAAU,CAAC,CAAC,EAC3B,CAACA,EAAU,CAAC,EAAGA,EAAU,CAAC,CAAC,CAC/B,EAAE,KAAK,SAAU5W,EAAM,CACnB,IAAI0d,EAAaL,GAAYtqC,EAAQitB,CAAI,GAAK,EAC9C,MAAO,CAACwd,GAAgBqD,EAAW7gB,EAAM0d,CAAU,CACvD,CAAC,CACL,CACA,SAASoD,GAAiB1zC,EAAI,CAG1B,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGoF,EAAO9E,EAAG,CAAC,EAAG+E,EAAO/E,EAAG,CAAC,EAC7CvG,EAAKsL,EAAK,CAAC,EAAID,EAAK,CAAC,EACrBpL,EAAKqL,EAAK,CAAC,EAAID,EAAK,CAAC,EACzB,GAAI,CAACrL,EACD,OAAO,EAAIqL,EAAK,CAAC,CAAC,EAEtB,GAAI,CAACpL,EACD,OAAO,EAAIoL,EAAK,CAAC,CAAC,EAItB,IAAIve,EAAImT,EAAKD,EACb,OAAO,GAAK,CAAClT,EAAIue,EAAK,CAAC,EAAIA,EAAK,CAAC,GAAK,KAAK,KAAK,KAAK,IAAIve,EAAG,CAAC,EAAI,CAAC,CAAC,CACvE,CACA,SAAS8sD,GAAiB3zC,EAAI,CAC1B,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGoF,EAAO9E,EAAG,CAAC,EAAG+E,EAAO/E,EAAG,CAAC,EAC7CvG,EAAKsL,EAAK,CAAC,EAAID,EAAK,CAAC,EACrBpL,EAAKqL,EAAK,CAAC,EAAID,EAAK,CAAC,EACzB,GAAI,CAACrL,EACD,MAAO,CAACqL,EAAK,CAAC,EAAG,CAAC,EAEtB,GAAI,CAACpL,EACD,MAAO,CAAC,EAAGoL,EAAK,CAAC,CAAC,EAEtB,IAAIve,EAAImT,EAAKD,EAGTjT,EAAI,CAACD,EAAIue,EAAK,CAAC,EAAIA,EAAK,CAAC,EAI7B,MAAO,CACH,CAACte,GAAKD,EAAI,EAAIA,GACdC,GAAMD,EAAIA,EAAK,EACnB,CACJ,CACA,SAAS+sD,GAAuB5Y,EAAU8O,EAAWN,EAAW/b,EAAQh0B,EAAU,CAC9E,IAAI+tC,EAASxM,EAAS,MAAM,YACxB/gC,EAAMR,EAAW,KAAK,GAAK,IAC/B,GAAI,CAAC+tC,EACD,MAAO,CAAC,EAEZ,IAAI7tC,EAAO6tC,EAAO,KAAM5tC,EAAM4tC,EAAO,IAAKjyC,EAAQiyC,EAAO,MAAO91C,EAAS81C,EAAO,OAC5EnyC,EAAesE,EAAO8zB,EAAO,CAAC,EAC9Bn4B,EAAgBqE,EAAOpE,EAAQk4B,EAAO,CAAC,EACvCt4B,EAAcyE,EAAM6zB,EAAO,CAAC,EAC5Br4B,EAAiBwE,EAAMlI,EAAS+7B,EAAO,CAAC,EACxC4iB,EAAO,CACP,CAACh7C,EAAcF,CAAW,EAC1B,CAACG,EAAeH,CAAW,EAC3B,CAACE,EAAcD,CAAc,EAC7B,CAACE,EAAeF,CAAc,CAClC,EACIuQ,EAASu4B,GAAkBsL,EAAW,CAAC,EAAG,CAAC,CAAC,EAChD,GAAI,CAACgK,GAAchK,EAAW6G,EAAM1qC,EAAQ,CAAC,EACzC,MAAO,CAAC,EAEZ,IAAI4H,EAAS,CAAC,EACVsmC,EAAWxD,EAAK,IAAI,SAAU7xC,EAAK,CAAE,MAAO,CAC5CorC,GAAYprC,CAAG,EACf2G,GAAO,CAAC,EAAG,CAAC,EAAG3G,CAAG,CACtB,CAAG,CAAC,EACJ,OACI,CAACgrC,EAAU,CAAC,EAAGA,EAAU,CAAC,CAAC,EAC3B,CAACA,EAAU,CAAC,EAAGA,EAAU,CAAC,CAAC,EAC3B,CAACA,EAAU,CAAC,EAAGA,EAAU,CAAC,CAAC,EAC3B,CAACA,EAAU,CAAC,EAAGA,EAAU,CAAC,CAAC,CAC/B,EAAE,QAAQ,SAAU5W,EAAM,CACtB,IAAIkhB,EAAU3uC,GAAO,CAAC,EAAG,CAAC,EAAGwuC,GAAiB/gB,CAAI,CAAC,EAC/CmhB,EAAWL,GAAiB9gB,CAAI,EACpCrlB,EAAO,KAAK,MAAMA,EAAQ,EAAc,CAAC,EAAGuqB,EAAO+b,EAC9C,OAAO,SAAU7zC,EAAI,CACtB,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGg0C,EAAU1zC,EAAG,CAAC,EACtC,OAAO0zC,GAAWD,GAAYC,CAClC,CAAC,EACI,IAAI,SAAUh0C,EAAI,CACnB,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGg0C,EAAU1zC,EAAG,CAAC,EAAG2zC,EAAS3zC,EAAG,CAAC,EAClD4zC,EAAU,KAAK,KAAKF,EAAUD,EAAWC,EAAU,CAAC,EACpDG,EAAWF,EAASC,EACpBE,EAAWH,EAASC,EACxB,MAAO,CACHj6C,EAAMk6C,EAAWL,EACjB75C,EAAMm6C,EAAWN,CACrB,CACJ,CAAC,EACI,OAAO,SAAUrtC,EAAMC,EAAK,CAC7B,OAAAD,EAAK,KAAK,MAAMA,EAAM,EAAc,CAAC,EAAGqxB,EAAOpxB,CAAG,EAAG,EAAK,CAAC,EACpDD,CACX,EAAG,CAAC,CAAC,EACA,OAAO,SAAUwjC,EAAS,CAAE,MAAO,CAACuJ,GAAc1J,EAAWuG,EAAM1qC,EAAQskC,CAAO,CAAG,CAAC,EACtF,IAAI,SAAUA,EAAS,CAAE,OAAO5lC,GAAS4lC,EAAU,IAAM,KAAK,GAAI,EAAQ,CAAG,CAAC,CAAC,EAAG,EAAK,CAAC,CACjG,CAAC,EACM18B,CACX,CACA,SAAS8mC,GAAqBrZ,EAAU,CACpC,IAAI0P,EAAc1P,EAAS,MAAM,YAC7BsZ,EAAW/J,GAAiB,EAChC,GAAI,CAACG,EACD,MAAO,CACH,SAAU4J,EACV,SAAU,CAAC,EACX,WAAY,CAAC,CACjB,EAEJ,IAAIt0C,EAAKg7B,EAAS,QAAQ,EAAG51B,EAAOpF,EAAG,KAAMqF,EAAOrF,EAAG,KAAM4tB,EAAO5tB,EAAG,KAAMu0C,EAAOv0C,EAAG,KACnF06B,EAAQ,CAACt1B,EAAMC,EAAMuoB,EAAM2mB,CAAI,EAC/B5uC,EAASu4B,GAAkBxD,EAAO,CAAC,EAAG,CAAC,CAAC,EACxC/gC,EAAO+wC,EAAY,KAAM9wC,EAAM8wC,EAAY,IAAKn1C,EAAQm1C,EAAY,MAAOh5C,EAASg5C,EAAY,OAChGoG,EAAW,CAAC,CAACn3C,EAAMC,CAAG,EAAG,CAACD,EAAMC,EAAMlI,CAAM,CAAC,EAC7Cq/C,EAAU,CAAC,CAACp3C,EAAMC,CAAG,EAAG,CAACD,EAAOpE,EAAOqE,CAAG,CAAC,EAC3Co3C,EAAY,CAAC,CAACr3C,EAAOpE,EAAOqE,CAAG,EAAG,CAACD,EAAOpE,EAAOqE,EAAMlI,CAAM,CAAC,EAC9Du/C,EAAa,CAAC,CAACt3C,EAAMC,EAAMlI,CAAM,EAAG,CAACiI,EAAOpE,EAAOqE,EAAMlI,CAAM,CAAC,EAChEghD,EAAYI,GAA4B9X,EAAUN,EAAO,CAAC,EAAG,CAAC,EAAG,EAAK,EACtEgN,EAAkB,CAAC,EACnBD,EAAgB,CAAC,EACrB,OAAAiL,EAAU,QAAQ,SAAU8B,EAAU,CAClC,IAAI5hB,EAAO4hB,EAAS,KAAM3D,EAAgB2D,EAAS,cAC/Cx0C,EAAK8vC,GAAYnqC,EAAQitB,CAAI,EAAG6hB,EAAoBz0C,EAAG,WAAY00C,EAAkB10C,EAAG,SAExFkxC,EAAeC,GAAwBve,EAAMie,EAAeE,EAAS2D,EAAiB,EAAG,EAAI,EAC7FtD,EAAkBD,GAAwBve,EAAMie,EAAeI,EAAYyD,EAAiB,EAAG,EAAI,EAEnGrD,EAAgBF,GAAwBve,EAAMie,EAAeC,EAAU2D,EAAmB,EAAG,EAAI,EACjGnD,EAAiBH,GAAwBve,EAAMie,EAAeG,EAAWyD,EAAmB,EAAG,EAAI,EACnGvD,EAAa,SAAW,CAACoD,EAAS,MAClC5M,EAAgB,KAAK9tC,CAAG,EACxB06C,EAAS,IAAM,IAEflD,EAAgB,SAAW,CAACkD,EAAS,SACrC5M,EAAgB,KAAK9tC,EAAMlI,CAAM,EACjC4iD,EAAS,OAAS,IAElBjD,EAAc,SAAW,CAACiD,EAAS,OACnC7M,EAAc,KAAK9tC,CAAI,EACvB26C,EAAS,KAAO,IAEhBhD,EAAe,SAAW,CAACgD,EAAS,QACpC7M,EAAc,KAAK9tC,EAAOpE,CAAK,EAC/B++C,EAAS,MAAQ,GAEzB,CAAC,EACM,CACH,SAAUA,EACV,WAAY5M,EACZ,SAAUD,CACd,CACJ,CAEA,SAASkN,GAAcvvC,EAAMC,EAAMuvC,EAAY7L,EAAY,CACvD,IAAIhvC,EAAKsL,EAAK,CAAC,EAAID,EAAK,CAAC,EACrBpL,EAAKqL,EAAK,CAAC,EAAID,EAAK,CAAC,EAOzB,GANI,EAAIrL,CAAE,EAAI8D,KACV9D,EAAK,GAEL,EAAIC,CAAE,EAAI6D,KACV7D,EAAK,GAEL,CAACD,EAGD,OAAKgvC,EAGE,CAAC,EAAG,CAAC,EAFD,CAAC,EAAG6L,CAAU,EAI7B,GAAI,CAAC56C,EAED,OAAI+uC,EACO,CAAC6L,EAAY,CAAC,EAElB,CAAC,EAAG,CAAC,EAGhB,IAAI/tD,EAAImT,EAAKD,EACTjT,EAAIse,EAAK,CAAC,EAAIve,EAAIue,EAAK,CAAC,EAC5B,GAAI2jC,EAAY,CAEZ,IAAIvvC,EAAI3S,GAAKwe,EAAK,CAAC,EAAIuvC,GAAc9tD,EACrC,MAAO,CAAC8tD,EAAYp7C,EAAI6L,EAAK,CAAC,CAAC,CACnC,KACK,CAED,IAAI9L,GAAK8L,EAAK,CAAC,EAAIuvC,EAAa9tD,GAAKD,EACrC,MAAO,CAAC0S,EAAI8L,EAAK,CAAC,EAAGuvC,CAAU,CACnC,CACJ,CACA,SAASC,GAAgBzvC,EAAMC,EAAMi0B,EAAQyP,EAAY1zB,EAAO,CAC5D,IAAIu9B,EAAa+B,GAAcvvC,EAAMC,EAAMi0B,EAAQyP,CAAU,EAC7D,GAAI,CAAC6J,EACD,MAAO,CACH,UAAW,GACX,OAAQ,CAAC,EAAG,CAAC,CACjB,EAEJ,IAAI30C,EAAO,GAAUmH,EAAMC,CAAI,EAC3ByvC,EAAQ,GAAUlC,EAAYxtC,CAAI,EAClC2vC,EAAQ,GAAUnC,EAAYvtC,CAAI,EAClC2vC,EAAYF,EAAQ72C,GAAQ82C,EAAQ92C,EACpC+B,EAAK83B,EAAOsD,GAAY,CACxB,MAAO/lB,EACP,MAAOu9B,EAAW,CAAC,EACnB,MAAOA,EAAW,CAAC,CACvB,CAAC,EAAG,CAAC,EAAGqC,EAAcj1C,EAAG,CAAC,EAAGk1C,EAAel1C,EAAG,CAAC,EAChD,MAAO,CACH,OAAQ,CAACi1C,EAAaC,CAAY,EAClC,UAAWF,CACf,CACJ,CACA,SAASG,GAAaC,EAAWpH,EAAU,CACvC,OAAIoH,EAAU,QACHA,EAAU,OAEZpH,EAAS,OACPb,GAA4Ba,CAAQ,EAAE,OAE1C,CACX,CACA,SAASqH,GAAwBC,EAAoBt1C,EAAIM,EAAIG,EAAIE,EAAI,CACjE,IAAI+Y,EAAKoe,EAAO93B,EAAI,CAAC,EAAGsF,EAAQoU,EAAG,CAAC,EAAGnU,EAAQmU,EAAG,CAAC,EAC/CC,EAAKme,EAAOx3B,EAAI,CAAC,EAAGkxC,EAAkB73B,EAAG,CAAC,EAAG+3B,EAAoB/3B,EAAG,CAAC,EACrEE,EAAKie,EAAOr3B,EAAI,CAAC,EAAG2sC,EAAiBvzB,EAAG,CAAC,EAAGyzB,EAAmBzzB,EAAG,CAAC,EACnEE,EAAK+d,EAAOn3B,EAAI,CAAC,EAAGgxC,EAAiB53B,EAAG,CAAC,EAAG83B,EAAmB93B,EAAG,CAAC,EACnEvf,EAAU,CAACm3C,EACXl3C,EAAU,CAACo3C,EACf,GAAIyD,GAAsBhwC,GAASC,EAAO,CACtC/K,EAAU,EACVC,EAAU,EACV,IAAI86C,EAAc,CAAC,EAmBnB,GAlBI/D,GAAmBE,EACnB6D,EAAY,KAAK,CAAC,EAAG1D,CAAgB,EAAG,CAACF,EAAgB,CAAC,CAAC,EAEtDH,EACL+D,EAAY,KAAK,CAAC5D,EAAgB,CAAC,CAAC,EAE/BD,EACL6D,EAAY,KAAK,CAAC,EAAG1D,CAAgB,CAAC,EAEjCzE,GAAkBE,EACvBiI,EAAY,KAAK,CAAC,EAAG1D,CAAgB,EAAG,CAACF,EAAgB,CAAC,CAAC,EAEtDvE,EACLmI,EAAY,KAAK,CAAC5D,EAAgB,CAAC,CAAC,EAE/BrE,GACLiI,EAAY,KAAK,CAAC,EAAG1D,CAAgB,CAAC,EAEtC0D,EAAY,OAAQ,CACpBA,EAAY,KAAK,SAAU1uD,EAAGC,EAAG,CAC7B,OAAQ8iD,GAAYzd,GAAM,CAAC7mB,EAAOC,CAAK,EAAG1e,CAAC,CAAC,EACxC+iD,GAAYzd,GAAM,CAAC7mB,EAAOC,CAAK,EAAGze,CAAC,CAAC,CAC5C,CAAC,EACD,IAAI0uD,EAAYD,EAAY,CAAC,EAC7B,GAAIC,EAAU,CAAC,GAAK,EAAIlwC,CAAK,EAAIzH,GAC7BrD,EAAU,CAACg7C,EAAU,CAAC,EACtB/6C,EACK8K,EAAQ,EAAID,EAAQ9K,CAAO,EAAK,EAAI8K,CAAK,EACtCC,UAEHiwC,EAAU,CAAC,GAAK,EAAIjwC,CAAK,EAAI1H,GAAY,CAC9C,IAAI43C,EAAYlwC,EAChB9K,EAAU,CAAC+6C,EAAU,CAAC,EACtBh7C,EACK8K,EAAQ,EAAIC,EAAQ9K,CAAO,EAAK,EAAIg7C,CAAS,EAC1CnwC,CACZ,CACA,GAAIgwC,GAAsB5D,GAAqBF,EAC3C,GAAI,EAAIh3C,CAAO,EAAIqD,IACf,EAAIrD,CAAO,EAAI,EAAIm3C,CAAc,EAAG,CACpC,IAAIz4B,EAAQ,EAAIy4B,CAAc,EAAI,EAAIn3C,CAAO,EAC7CA,GAAW0e,EACXze,GAAWye,CACf,SACS,EAAIze,CAAO,EAAIoD,IACpB,EAAIpD,CAAO,EAAI,EAAIo3C,CAAgB,EAAG,CACtC,IAAI34B,EAAQ,EAAI24B,CAAgB,EAAI,EAAIp3C,CAAO,EAC/CD,GAAW0e,EACXze,GAAWye,CACf,MAEI1e,EAAUo3C,GAAU,CAACD,EAAgBn3C,CAAO,EAC5CC,EAAUm3C,GAAU,CAACC,EAAkBp3C,CAAO,CAG1D,CACJ,MAEID,EAAU8K,GAASksC,EAAkB,CAACG,EAAiB,EACvDl3C,EAAU8K,GAASmsC,EAAoB,CAACG,EAAmB,EAE/D,MAAO,CAACr3C,EAASC,CAAO,CAC5B,CACA,SAASi7C,GAAoB1a,EAAU11B,EAAOC,EAAO+vC,EAAoBK,EAAYtgC,EAAO,CACxF,GAAI,CAACm1B,GAAcxP,EAAU,WAAW,EACpC,MAAO,CACH,CACI,OAAQ,GACR,QAAS,GACT,OAAQ,CACZ,EACA,CACI,OAAQ,GACR,QAAS,GACT,OAAQ,CACZ,CACJ,EAEJ,IAAIN,EAAQkb,GAAiBvgC,EAAM,cAAe,CAAC/P,EAAOC,CAAK,CAAC,EAC5DvF,EAAK61C,GAAQnb,CAAK,EAAG/gC,EAAOqG,EAAG,KAAMo0B,EAAQp0B,EAAG,MAAOpG,EAAMoG,EAAG,IAAKq0B,EAASr0B,EAAG,OACjF81C,EAAa,CACb,WAAYpb,EAAM,IAAI,SAAU18B,EAAK,CAAE,OAAOA,EAAI,CAAC,CAAG,CAAC,EACvD,SAAU08B,EAAM,IAAI,SAAU18B,EAAK,CAAE,OAAOA,EAAI,CAAC,CAAG,CAAC,CACzD,EACIktC,EAAiBD,GAAkBjQ,EAAS,MAAM,cAAc,EAChEoQ,EAAYG,GAAwBL,EAAgB,CACpD,KAAMvxC,EACN,MAAOy6B,EACP,IAAKx6B,EACL,OAAQy6B,EACR,QAAS16B,EAAOy6B,GAAS,EACzB,QAASx6B,EAAMy6B,GAAU,CAC7B,CAAC,EACG/zB,EAAKy1C,GAAwB/a,EAAU2a,EAAYvK,EAAW0K,CAAU,EAAGE,EAAwB11C,EAAG,SAAU21C,EAA0B31C,EAAG,WAC7IG,EAAKoyC,GAAsB7X,EAAUN,EAAOrlB,CAAK,EAAG6gC,EAAyBz1C,EAAG,SAAU01C,EAA2B11C,EAAG,WACxH2sC,EAAiB4I,EAAsB,OACvC1I,EAAmB2I,EAAwB,OAC3CzE,EAAkBwE,EAAsB,SAAWE,EAAuB,QAC1ExE,EAAoBuE,EAAwB,SAAWE,EAAyB,QAChFxE,EAAiBC,GAAUoE,EAAsB,OAAQE,EAAuB,MAAM,EACtFrE,EAAmBD,GAAUqE,EAAwB,OAAQE,EAAyB,MAAM,EAC5Fx1C,EAAKm3B,EAAOud,GAAwBC,EAAoB,CAAChwC,EAAOC,CAAK,EAAG,CAACisC,EAAiBE,CAAiB,EAAG,CAACtE,EAAgBE,CAAgB,EAAG,CAACqE,EAAgBE,CAAgB,CAAC,EAAG,CAAC,EAAGr3C,EAAUmG,EAAG,CAAC,EAAGlG,EAAUkG,EAAG,CAAC,EAC9N,MAAO,CACH,CACI,QAAS6wC,EACT,OAAQpE,EACR,OAAQ5yC,CACZ,EACA,CACI,QAASk3C,EACT,OAAQpE,EACR,OAAQ7yC,CACZ,CACJ,CACJ,CACA,SAASs7C,GAAwB/a,EAAU2a,EAAYjb,EAAOob,EAAY,CAClEA,IAAe,SAAUA,EAAapb,GAC1C,IAAI16B,EAAKunC,GAAgBM,GAAU7M,CAAQ,EAAG8a,EAAW,SAAUA,EAAW,UAAU,EAAGM,EAAuBp2C,EAAG,WAAYq2C,EAAqBr2C,EAAG,SACrJM,EAAKq1C,EAAa,CAClB,WAAY,CAAE,OAAQ,GAAO,MAAO,EAAG,EACvC,SAAU,CAAE,OAAQ,GAAO,MAAO,EAAG,CACzC,EAAI1J,GAAuBjR,EAAUN,EAAM,SAAUA,EAAM,WAAY,OAAW,OAAW,OAAW,MAAS,EAAGwS,EAAqB5sC,EAAG,WAAY2sC,EAAmB3sC,EAAG,SAC1KuxC,EAAmBsD,GAAaiB,EAAqB,CAAC,EAAGlJ,CAAkB,EAC3EyE,EAAiBwD,GAAakB,EAAmB,CAAC,EAAGpJ,CAAgB,EACrEqJ,EAAiB,EAAIzE,CAAgB,EACrC0E,EAAe,EAAI5E,CAAc,EACrC,MAAO,CACH,WAAY,CACR,QAASyE,EAAqB,CAAC,EAAE,QACjC,OAAQlJ,EAAmB,OAC3B,UAAWA,EAAmB,MAC9B,OAAQ2E,EACR,KAAMyE,EACN,OAAQF,EACR,KAAMlJ,CACV,EACA,SAAU,CACN,QAASmJ,EAAmB,CAAC,EAAE,QAC/B,OAAQpJ,EAAiB,OACzB,UAAWA,EAAiB,MAC5B,OAAQ0E,EACR,KAAM4E,EACN,OAAQF,EACR,KAAMpJ,CACV,CACJ,CACJ,CACA,SAASuJ,GAAgBC,EAAWjP,EAAQ0E,EAAQC,EAAQM,EAAyBE,EAAuBE,EAAW,CAC/GA,IAAc,SAAUA,EAAY,CAAC,EAAG,CAAC,GAC7C,IAAI7sC,EAAKunC,GAAgBC,EAAQ0E,EAAQC,CAAM,EAAGiK,EAAuBp2C,EAAG,WAAYq2C,EAAqBr2C,EAAG,SAK5GM,EAAKssC,GAAe6J,EAAWvK,EAAQC,EAAQ,CAAC,EAAG,CAAC,EAAGM,EAAyBE,EAAuBE,CAAS,EAAGK,EAAqB5sC,EAAG,WAAY2sC,EAAmB3sC,EAAG,SAC7KuxC,EAAmBsD,GAAaiB,EAAqB,CAAC,EAAGlJ,CAAkB,EAC3EyE,EAAiBwD,GAAakB,EAAmB,CAAC,EAAGpJ,CAAgB,EACrEqJ,EAAiB,EAAIzE,CAAgB,EACrC0E,EAAe,EAAI5E,CAAc,EACrC,MAAO,CACH,WAAY,CACR,QAASyE,EAAqB,CAAC,EAAE,QACjC,OAAQlJ,EAAmB,OAC3B,UAAWA,EAAmB,MAC9B,OAAQ2E,EACR,KAAMyE,EACN,OAAQF,EACR,KAAMlJ,CACV,EACA,SAAU,CACN,QAASmJ,EAAmB,CAAC,EAAE,QAC/B,OAAQpJ,EAAiB,OACzB,UAAWA,EAAiB,MAC5B,OAAQ0E,EACR,KAAM4E,EACN,OAAQF,EACR,KAAMpJ,CACV,CACJ,CACJ,CACA,SAASyJ,GAAmBvY,EAAUoK,EAAQoO,EAAehyC,EAAW,CACpE,IAAI1K,EAAOkL,GAAOg5B,EAAUoK,CAAM,EAAI,KAAK,GAAM,IAC7CvoC,EAAK22C,EAAc,SAAUnF,EAAkBxxC,EAAG,QAASotC,EAAiBptC,EAAG,OAAQu2C,EAAev2C,EAAG,KAAMM,EAAKq2C,EAAc,WAAYjF,EAAoBpxC,EAAG,QAASgtC,EAAmBhtC,EAAG,OAAQg2C,EAAiBh2C,EAAG,KAChOs2C,EAAS38C,EAAM,IACf48C,EAAmBD,EAAS,GAAKA,EAAS,IAC1CE,EAAiBF,EAAS,IAAMA,EAAS,GAC7C,OAAIN,EAAiBC,IACb/E,GACCpE,GACG,CAAC0J,IACA,CAACnyC,GAAa,CAACkyC,IACb,WAGXnF,GACCpE,GACG,CAACuJ,IACA,CAAClyC,GAAa,CAACmyC,GACb,aAEJ,EACX,CACA,SAASC,GAAiB/b,EAAUN,EAAOoM,EAAYniC,EAAWqyC,EAAW3hC,EAAO,CAChF,OAAOyxB,EAAW,IAAI,SAAU9mC,EAAI,CAChC,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGi3C,EAAiB32C,EAAG,CAAC,EAAG42C,EAAe52C,EAAG,CAAC,EAC/D62C,EAAgBjZ,GAAkBxD,EAAOuc,CAAc,EACvDG,EAAclZ,GAAkBxD,EAAOwc,CAAY,EACnDP,EAAgBhyC,EACd0yC,GAAyBrc,EAAUmc,EAAeC,EAAaJ,CAAS,EACxEjB,GAAwB/a,EAAUgc,EAAW,CAC3C,SAAU,CAACI,EAAY,CAAC,CAAC,EACzB,WAAY,CAACA,EAAY,CAAC,CAAC,CAC/B,CAAC,EACD32C,EAAKk2C,EAAc,WAEvBW,EAAwB72C,EAAG,OAAQ82C,EAAyB92C,EAAG,QAAS+2C,EAAwB/2C,EAAG,OAAQE,EAAKg2C,EAAc,SAE9Hc,EAAsB92C,EAAG,OAAQ+2C,EAAuB/2C,EAAG,QAASg3C,EAAsBh3C,EAAG,OACzFgyC,EAAWxmB,GAAM+qB,EAAcD,CAAc,EACjD,GAAI,CAACQ,GAAuB,CAACH,EACzB,MAAO,CACH,QAASI,GAAwBH,EACjC,OAAQI,GAAuBH,EAC/B,KAAM7E,EACN,OAAQ,CAAC,EAAG,CAAC,CACjB,EAEJ,IAAIiF,EAAWlB,GAAmBS,EAAeC,EAAaT,EAAehyC,CAAS,EACtF,GAAI,CAACizC,EACD,MAAO,CACH,KAAMjF,EACN,QAAS,GACT,OAAQ,GACR,OAAQ,CAAC,EAAG,CAAC,CACjB,EAEJ,IAAI5J,EAAa6O,IAAa,WAC1BhF,EAAa,CAAC,EAAG,CAAC,EACtB,MAAI,CAACjuC,GACE,EAAIuyC,EAAa,CAAC,CAAC,IAAM,GACzB,EAAIA,EAAa,CAAC,CAAC,IAAM,GACzBD,EAAe,CAAC,IAAMC,EAAa,CAAC,GACpCD,EAAe,CAAC,IAAMC,EAAa,CAAC,EACvCtE,EAAaxX,GAAY,CACrB,MAAO/lB,EACP,MAAO,CAACoiC,EACR,MAAO,CAACH,CACZ,CAAC,EAGD1E,EAAaiC,GAAgBsC,EAAeC,EAAa,EAAErO,EAAa0O,EAAsBH,GAAwBvO,EAAY1zB,CAAK,EAAE,OAE7Iu9B,EAAaA,EAAW,IAAI,SAAU30C,EAAMV,EAAG,CAAE,OAAOU,GAAQ00C,EAASp1C,CAAC,EAAI,EAAIo1C,EAASp1C,CAAC,EAAI,EAAI,CAAC,EAC9F,CACH,KAAMo1C,EACN,QAAS5J,EAAa2O,EAAuBH,EAC7C,OAAQxO,EAAa4O,EAAsBH,EAC3C,OAAQ5E,CACZ,CACJ,CAAC,CACL,CACA,SAASiF,GAAmBzC,EAAWpH,EAAU,CAC7C,OAAIoH,EAAU,QACHA,EAAU,OAEZpH,EAAS,OACPA,EAAS,OAEb,CACX,CACA,SAASqJ,GAAyBrc,EAAUmD,EAAUoK,EAAQyO,EAAW,CACrE,IAAIh3C,EAAKsoC,GAAoBtN,EAAUmD,EAAUoK,CAAM,EAAGuP,EAAsB93C,EAAG,WAAY+3C,EAAoB/3C,EAAG,SAClHM,EAAK02C,EAAY,CACjB,WAAY,CAAE,OAAQ,EAAM,EAC5B,SAAU,CAAE,OAAQ,EAAM,CAC9B,EAAIjK,GAAmB/R,EAAUmD,EAAUoK,CAAM,EAAG2E,EAAqB5sC,EAAG,WAAY2sC,EAAmB3sC,EAAG,SAC1GuxC,EAAmBgG,GAAmBC,EAAqB5K,CAAkB,EAC7EyE,EAAiBkG,GAAmBE,EAAmB9K,CAAgB,EACvEqJ,EAAiB,EAAIzE,CAAgB,EACrC0E,EAAe,EAAI5E,CAAc,EACrC,MAAO,CACH,WAAY,CACR,QAASmG,EAAoB,QAC7B,OAAQ5K,EAAmB,OAC3B,OAAQ2E,EACR,KAAMyE,CACV,EACA,SAAU,CACN,QAASyB,EAAkB,QAC3B,OAAQ9K,EAAiB,OACzB,OAAQ0E,EACR,KAAM4E,CACV,CACJ,CACJ,CACA,SAASyB,GAAehd,EAAUN,EAAOjK,EAAWuP,EAAe3qB,EAAO,CACtE,IAAI+oB,EAAiB,CAAC,CAAC3N,EAAU,CAAC,EAAG,CAACA,EAAU,CAAC,CAAC,EAC9CzwB,EAAKg7B,EAAS,MAAOzlC,EAAQyK,EAAG,MAAOtO,EAASsO,EAAG,OACnDwnC,EAASxM,EAAS,MAAM,OACxBl2B,EAAW,IACXC,EAAY,IAChB,GAAIyiC,EAAQ,CACR,IAAIV,EAAa,CACb,CAACrW,EAAU,CAAC,EAAG,CAACA,EAAU,CAAC,CAAC,EAC5B,CAAC,CAACA,EAAU,CAAC,EAAGA,EAAU,CAAC,CAAC,CAChC,EACInwB,EAAKknC,EAAO,KAAMyQ,EAAS33C,IAAO,OAAS,KAAYA,EAAIG,EAAK+mC,EAAO,IAAK0Q,EAAQz3C,IAAO,OAAS,KAAYA,EAAIE,EAAK6mC,EAAO,MAAO2Q,EAAUx3C,IAAO,OAAS,IAAWA,EAAI+Y,EAAK8tB,EAAO,OAAQ4Q,EAAW1+B,IAAO,OAAS,IAAWA,EAC9OotB,EAAW,QAAQ,SAAUuR,EAAgB,CACzC,IAAIC,EAAkBD,EAAe,CAAC,IAAMja,EAAe,CAAC,EACxDma,EAAoBF,EAAe,CAAC,IAAMja,EAAe,CAAC,EAC1Doa,EAAWta,GAAkBxD,EAAO2d,CAAc,EAClDI,EAAOtzC,GAAO66B,EAAewY,CAAQ,EAAI,IAAO,KAAK,GACzD,GAAID,EAAmB,CACnB,IAAIG,EAAeF,EAAS,MAAM,GAC9B,EAAIC,EAAM,GAAG,EAAI,GAAK,EAAIA,EAAM,GAAG,EAAI,KACvCC,EAAa,CAAC,EAAI1Y,EAAc,CAAC,GAErC,IAAIhgC,EAAK60C,GAAgB7U,EAAe0Y,GAAe1Y,EAAc,CAAC,EAAIwY,EAAS,CAAC,EAAIJ,EAAWF,GAC/FM,EAAS,CAAC,EAAG,GAAOnjC,CAAK,EAAG/U,EAAKw3B,EAAO93B,EAAG,OAAQ,CAAC,EAAGk1C,EAAe50C,EAAG,CAAC,EAAGq4C,EAAkB34C,EAAG,UACjG,MAAMk1C,CAAY,IACnBnwC,EAAYrT,GAAUinD,EAAkB,EAAI,IAAM,EAAIzD,CAAY,EAE1E,CACA,GAAIoD,EAAiB,CACjB,IAAII,EAAeF,EAAS,MAAM,GAC9B,EAAIC,EAAM,EAAE,EAAI,GAAK,EAAIA,EAAM,GAAG,EAAI,KACtCC,EAAa,CAAC,EAAI1Y,EAAc,CAAC,GAErC,IAAIv/B,EAAKo0C,GAAgB7U,EAAe0Y,GAAe1Y,EAAc,CAAC,EAAIwY,EAAS,CAAC,EAAIL,EAAUF,GAAUO,EAAS,CAAC,EAAG,GAAMnjC,CAAK,EAAG1U,EAAKm3B,EAAOr3B,EAAG,OAAQ,CAAC,EAAGw0C,EAAct0C,EAAG,CAAC,EAAGi4C,EAAiBn4C,EAAG,UACtM,MAAMw0C,CAAW,IAClBnwC,EAAWvP,GAASqjD,EAAiB,EAAI,IAAM,EAAI3D,CAAW,EAEtE,CACJ,CAAC,CACL,CACA,MAAO,CACH,SAAUnwC,EACV,UAAWC,CACf,CACJ,CAOA,IAAIy6B,GAAY,CACZ,KAAM,YACN,MAAO,CACH,YACA,eACA,qBACA,6BACA,kBACA,eACJ,EACA,OAAQ,CACJ,YACA,OACA,UACA,iBACA,YACA,cACJ,EACA,aAAc,UAAY,CACtB,MAAO,CAAC,OAAQ,MAAO,QAAS,QAAQ,CAC5C,EACA,kBAAmB,UAAY,CAC3B,MAAO,CAAC,OAAQ,MAAO,QAAS,QAAQ,CAC5C,EACA,OAAQ,SAAUxE,EAAU+K,EAAO,CAC/B,IAAI/lC,EAAKg7B,EAAS,MAAO6d,EAA6B74C,EAAG,2BAA4Bs1C,EAAqBt1C,EAAG,mBAAoB0Y,EAAO1Y,EAAG,KACvIM,EAAK06B,EAAS,SAAS,EAAG8d,EAAWx4C,EAAG,SAAUy4C,EAAez4C,EAAG,aACxE,GAAIu4C,GAA8B,CAACvD,GAAsB,CAACwD,EACtD,MAAO,CAAC,EAEZ,IAAI3c,EAAO2c,EAAS,KACpB,GAAI,CAAC3c,EAAK,CAAC,GAAK,CAACA,EAAK,CAAC,EACnB,MAAO,CAAC,EAEZ,IAAI5mC,EAAQq0C,GAAYzN,CAAI,EACxBliC,EAAMkL,GAAOg3B,EAAM,CAAC,EAAG,CAAC,CAAC,EAC7B,MAAO,CAAC4J,EAAM,cAAc,MAAO,CAAE,UAAWlkC,GAAO,OAAQ,aAAc,WAAY,QAAQ,EAAG,IAAK,sBAAuB,MAAO,CAC3H,MAAO,GAAG,OAAOtM,EAAO,IAAI,EAC5B,UAAW,aAAa,OAAOwjD,EAAa,CAAC,EAAG,MAAM,EAAE,OAAOA,EAAa,CAAC,EAAG,aAAa,EAAE,OAAO9+C,EAAK,cAAc,EAAE,OAAOye,EAAM,GAAG,CAC/I,CAAE,CAAC,CAAC,CAChB,EACA,UAAW,SAAUsiB,EAAU,EAAG,CAC9B,IAAI3lB,EAAQ,EAAE,MAAO2jC,EAAc,EAAE,YAAaC,EAAc,EAAE,YAC9Dp1B,EAAQmX,EAAS,MACjBoK,EAASvhB,EAAM,OAAQ9xB,EAAQ8xB,EAAM,MACzC,GAAIuhB,EAAO,UACP,MAAO,GAEXA,EAAO,UAAY6T,GAAeje,EAAS,YAC3C3lB,EAAM,MAAQ,CAAC,EACfA,EAAM,KAAO,WAAWtjB,EAAM,MAAQ,EAAE,GAAK,EAC7CsjB,EAAM,IAAM,WAAWtjB,EAAM,KAAO,EAAE,GAAK,EAC3CsjB,EAAM,OAAS,WAAWtjB,EAAM,QAAU,EAAE,GAAK,EACjDsjB,EAAM,MAAQ,WAAWtjB,EAAM,OAAS,EAAE,GAAK,EAC/CsjB,EAAM,WAAa,CAAC,EAAG,CAAC,EACxBgmB,GAAaL,EAAU,CAAC,EACxB+D,GAAyB/D,EAAU,EAAG,WAAW,EACjDke,GAAmBle,EAAU3lB,CAAK,EAClCA,EAAM,SAAW,CAAC,EAAG,CAAC,EACtBA,EAAM,eAAiB,CAAC,EAAG,CAAC,EAC5BA,EAAM,OAAS,GACfA,EAAM,YAAc,CAAC,EAAG,CAAC,EACzB,IAAI8jC,EAASC,GAAWpe,EAAU,EAAG,EAAS,CAAE,IAAK,SAAUnnC,EAAW,CAClEwhB,EAAM,WAAaxhB,CACvB,CAAE,EAAG+qC,GAAwB5D,EAAU,CAAC,CAAC,CAAC,EAC1CztB,EAASyrC,GAAeK,GAAare,EAAU,cAAeme,CAAM,EACxE,OAAI5rC,IAAW,IACX8H,EAAM,OAAS,GACf2lB,EAAS,MAAM,SAAW,CACtB,UAAWA,EAAS,QAAQ,EAC5B,KAAM,CAAC,EAAG,CAAC,CACf,IAGAoK,EAAO,UAAY,KACnB/vB,EAAM,QAAU,IAEbA,EAAM,OAAS8jC,EAAS,EACnC,EACA,KAAM,SAAUne,EAAU,EAAG,CACzB,GAAK,EAGL,CAAAY,GAAsBZ,EAAU,EAAG,WAAW,EAC9C,IAAI3lB,EAAQ,EAAE,MAAO2jC,EAAc,EAAE,YAAaM,EAAa,EAAE,WAAY7qC,EAAU,EAAE,QAAS8qC,EAAc,EAAE,YAAaC,EAAU,EAAE,QAASxC,EAAY,EAAE,UAAWyC,EAAU,EAAE,QAASC,EAAqB,EAAE,mBACrNp0C,EAAQ,EAAE,MAAOC,EAAQ,EAAE,MAC3BoI,EAAS0H,EAAM,OAAQskC,EAAWtkC,EAAM,SAAUukC,EAAiBvkC,EAAM,eAAgBwkC,EAAaxkC,EAAM,WAChH,GAAK1H,EAGL,CAAI4rC,IACAj0C,GAASi0C,EAAY,CAAC,EACtBh0C,GAASg0C,EAAY,CAAC,GAE1B,IAAIptD,EAAQ6uC,EAAS,MACjB8e,EAAiB3tD,EAAM,eACvB4tD,EAAeN,EAAU,EAAKttD,EAAM,cAAgButD,GAAsB,EAC1EpE,EAAqB0D,EAAc,EAAK7sD,EAAM,oBAAsB,EACpE6tD,EAAgB,EAChB5M,EAAiB,GACjBoE,EAAkB,GAClBlE,EAAmB,GACnBoE,EAAoB,GACxB,GAAI,CAACsH,GAAe1D,EAAqB,IAAMhwC,GAASC,GAAQ,CAC5D,IAAI00C,EAAkB9tD,EAAM,iBAAmB,EAC3CssD,EAAMp0C,GAAS41C,EAAkB90C,GAAO,CAAC,EAAG,CAAC,EAAG,CAACG,EAAOC,CAAK,CAAC,EAAI,IAAM,KAAK,GAAI+vC,CAAkB,EACjG2E,EACFC,EAAK30C,EAAQ,KAAK,IAAI,KAAK,KAAKkzC,EAAM,IAAM,IAAM,KAAK,EAAE,CAAC,EAC1D0B,EAAK70C,EAAQ,KAAK,IAAI,KAAK,IAAImzC,EAAM,IAAM,KAAK,EAAE,CAAC,EACnDxxC,EAAI2iC,GAAY,CAACuQ,EAAID,CAAE,CAAC,EAC5BF,EAAgBvB,EAAM,KAAK,GAAK,IAChCnzC,EAAQ2B,EAAI,KAAK,IAAI+yC,CAAa,EAClCz0C,EAAQ0B,EAAI,KAAK,IAAI+yC,CAAa,CACtC,CACA,GAAI,CAACvrC,GAAW,CAACuqC,GAAe,CAACM,EAAY,CACzC,IAAIt5C,EAAK83B,EAAO4d,GAAoB1a,EAAU11B,EAAOC,EAAO+vC,EAAqB,CAACkE,GAAWxC,GAAcuC,EAAalkC,CAAK,EAAG,CAAC,EAAGuzB,EAAe5oC,EAAG,CAAC,EAAG6oC,EAAiB7oC,EAAG,CAAC,EAC/KotC,EAAiBxE,EAAa,OAC9B4I,EAAkB5I,EAAa,QAC/B0E,EAAmBzE,EAAe,OAClC6I,EAAoB7I,EAAe,QACnC,IAAI8I,EAAiB/I,EAAa,OAC9BiJ,EAAmBhJ,EAAe,OACtCvjC,GAASqsC,EACTpsC,GAASssC,CACb,CACA,IAAIuI,EAAkBnuB,GAAKoQ,GAAkB,CAAE,MAAOhnB,EAAO,MAAO/P,EAAO,MAAOC,CAAM,CAAC,EAAGs0C,CAAU,EAClGhmD,EAAYo4B,GAAKmQ,GAAiB,CAAE,MAAO/mB,EAAO,MAAO/P,EAAO,MAAOC,CAAM,CAAC,EAAGs0C,CAAU,EAC/F7zC,GAAcnS,EAAW,EAAQ,EACjCmS,GAAco0C,EAAiB,EAAQ,EAClC9E,IACG,CAAClI,GAAkB,CAACoE,IACpB39C,EAAU,CAAC,EAAIwQ,GAASxQ,EAAU,CAAC,EAAGkmD,CAAY,EAClDK,EAAgB,CAAC,EAAI/1C,GAAS+1C,EAAgB,CAAC,EAAGL,CAAY,GAE9D,CAACzM,GAAoB,CAACoE,IACtB79C,EAAU,CAAC,EAAIwQ,GAASxQ,EAAU,CAAC,EAAGkmD,CAAY,EAClDK,EAAgB,CAAC,EAAI/1C,GAAS+1C,EAAgB,CAAC,EAAGL,CAAY,IAGtE,IAAIM,EAAaluB,GAAMiuB,EAAiBP,CAAU,EAC9C1d,EAAOhQ,GAAMt4B,EAAWgmD,CAAU,EAClCziC,EAAQ+U,GAAMgQ,EAAMwd,CAAQ,EAC5BW,EAAcnuB,GAAMkuB,EAAYT,CAAc,EAClDvkC,EAAM,SAAW8mB,EACjB9mB,EAAM,eAAiBglC,EACvBhlC,EAAM,UAAY+B,EAElB/B,EAAM,SAAW8mB,EAEjB,IAAIxiC,EAAO0b,EAAM,KAAOglC,EAAW,CAAC,EAChCzgD,GAAMyb,EAAM,IAAMglC,EAAW,CAAC,EAC9BjmB,GAAQ/e,EAAM,MAAQglC,EAAW,CAAC,EAClChmB,GAAShf,EAAM,OAASglC,EAAW,CAAC,EACpC/a,GAAgBpD,GAAuB7mB,EAAO,aAAa,OAAOxhB,EAAU,CAAC,EAAG,MAAM,EAAE,OAAOA,EAAU,CAAC,EAAG,KAAK,EAAG,aAAa,OAAOsoC,EAAK,CAAC,EAAG,MAAM,EAAE,OAAOA,EAAK,CAAC,EAAG,KAAK,CAAC,EAGpL,GAFA8C,GAAsB,EAAGK,EAAa,EACtCtE,EAAS,MAAM,SAAS,KAAOge,EAAc,CAAC,EAAG,CAAC,EAAI7c,EAClD,GAAC6c,GAAe,CAACc,GAAkB1iC,EAAM,MAAM,SAAUtR,GAAK,CAAE,MAAO,CAACA,EAAK,CAAC,GAAKw0C,EAAY,KAAK,SAAUx0C,GAAK,CAAE,MAAO,CAACA,EAAK,CAAC,GAGvI,KAAIxF,EAAK06B,EAAS,MAAOzlC,GAAQ+K,EAAG,MAAO5O,GAAS4O,EAAG,OACnD64C,GAASC,GAAWpe,EAAU,EAAG,EAAS,CAAE,UAAWsE,GAAe,KAAMnD,EAAM,MAAO/kB,EAAO,UAAWvjB,EAAW,WAAYwmD,EAAY,YAAaC,EAAa,gBAAiBF,EAAiB,KAAMzgD,EAAM,IAAKC,GAAK,MAAOw6B,GAAO,OAAQC,GAAQ,MAAO9+B,GAAO,OAAQ7D,GAAQ,QAAS+c,CAAQ,EAAGgxB,GAAc,CAC9T,UAAWH,EACf,EAAG,CAAC,CAAC,CAAC,EACN,OAAC0Z,GAAeK,GAAare,EAAU,SAAUme,EAAM,EAChDA,KACX,EACA,UAAW,SAAUne,EAAU,EAAG,CAC9B,IAAI3lB,EAAQ,EAAE,MACVkkC,EAAclkC,EAAM,YACxB,OAAIkkC,EAAY,CAAC,GAAKA,EAAY,CAAC,GAC/BlkC,EAAM,YAAc,CAAC,EAAG,CAAC,EAClB,KAAK,KAAK2lB,EAAU,EAAS,EAAS,CAAC,EAAG,CAAC,EAAG,CAAE,YAAaue,CAAY,CAAC,CAAC,GAE/E,EACX,EACA,QAAS,SAAUve,EAAU,EAAG,CAC5B,IAAIge,EAAc,EAAE,YAAa3jC,EAAQ,EAAE,MAE3C,GADA2lB,EAAS,MAAM,SAAW,KACtB,EAAC3lB,EAAM,OAGX,CAAAA,EAAM,OAAS,GACf,IAAI5uB,EAAQ8zD,GAAcvf,EAAU,EAAG,CAAC,CAAC,EACzC,OAACge,GAAeK,GAAare,EAAU,YAAav0C,CAAK,EAClDA,EACX,EACA,eAAgB,SAAUu0C,EAAU,EAAG,CACnC,IAAIh7B,EAAIM,EACJ+U,EAAQ,EAAE,MAAOvK,EAAU,EAAE,QAASC,EAAU,EAAE,QAClDouC,EAAS,KAAK,UAAUne,EAAU,CAAC,EACvC,GAAI,CAACme,EACD,MAAO,GAEX,IAAI14C,EAAKokC,GAAkB7J,EAAU,KAAM,YAAa,CACpDlwB,GAAW,EACXC,GAAW,CACf,EAAG,EAAG,GAAO,WAAW,EAAGi6B,EAAcvkC,EAAG,YAAawkC,EAAcxkC,EAAG,YACtE+5C,EAAa,EAAS,EAAS,CAAC,EAAGrB,CAAM,EAAG,CAAE,QAASne,EAAS,MAAM,QAAS,OAAQiK,CAAY,CAAC,EACpG13B,EAAS8rC,GAAare,EAAU,mBAAoBwf,CAAU,EAClEnlC,EAAM,OAAS9H,IAAW,GAE1B,IAAIssC,GAAcv5C,GAAMN,EAAKglC,EAAY,CAAC,KAAO,MAAQhlC,IAAO,OAAS,OAASA,EAAG,MAAM,cAAgB,MAAQM,IAAO,OAASA,EAAK,CAAC,EAAG,CAAC,EAC7I,OAAA+U,EAAM,eAAiB,CAACwkC,EAAW,CAAC,EAAI,EAAGA,EAAW,CAAC,EAAI,CAAC,EACrDxkC,EAAM,OAAS8jC,EAAS,EACnC,EACA,UAAW,SAAUne,EAAU,EAAG,CAC9B,IAAI3lB,EAAQ,EAAE,MACd,GAAKA,EAAM,OAGX,KAAI8jC,EAAS,KAAK,KAAKne,EAAU,EAAS,EAAS,CAAC,EAAG,CAAC,EAAG,CAAE,mBAAoBA,EAAS,MAAM,YAAa,CAAC,CAAC,EAC3Gyf,EAAY,EAAE,MAAM,UACpBxV,EAAcJ,GAAkB7J,EAAU,KAAM,OAAQyf,EAAW,EAAG,GAAO,WAAW,EAAE,YAC9F,GAAKtB,EAGL,KAAIqB,EAAa,EAAS,CAAE,QAASxf,EAAS,MAAM,QAAS,OAAQiK,CAAY,EAAGkU,CAAM,EAC1F,OAAAE,GAAare,EAAU,cAAewf,CAAU,EACzCA,GACX,EACA,aAAc,SAAUxf,EAAU,EAAG,CACjC,IAAIrtB,EAAS,EAAE,OAAQ0H,EAAQ,EAAE,MACjC,GAAKA,EAAM,OAGX,MAAK,QAAQ2lB,EAAU,CAAC,EACxB,IAAIiK,EAAcJ,GAAkB7J,EAAU,KAAM,UAAW,CAAC,EAAG,CAAC,EAAG,EAAG,GAAO,WAAW,EAAE,YAC9F,OAAAqe,GAAare,EAAU,iBAAkBuf,GAAcvf,EAAU,EAAG,CAChE,QAASA,EAAS,MAAM,QACxB,OAAQiK,CACZ,CAAC,CAAC,EACKt3B,EACX,EAiCA,QAAS,SAAUqtB,EAAU,CACzB,IAAI3lB,EAAQ,CAAC,EACTniB,EAAO8nC,EAAS,QAAQ,EACxB11B,EAAQ,EACRC,EAAQ,EACRi0C,EAAU,GACd,MAAO,CACH,UAAW,GACX,aAAc,SAAU5yD,EAAG,CACvB,OAAA4yD,EAAU5yD,EAAE,QACL,CAAE,MAAOyuB,EAAO,QAASmkC,CAAQ,CAC5C,EACA,QAAS,SAAU5yD,EAAG,CAClB,MAAI,MAAOA,EACP0e,EAAQ1e,EAAE,EAAIsM,EAAK,KAEd,WAAYtM,IACjB0e,GAAS1e,EAAE,QAEX,MAAOA,EACP2e,EAAQ3e,EAAE,EAAIsM,EAAK,IAEd,WAAYtM,IACjB2e,GAAS3e,EAAE,QAER,CAAE,MAAOyuB,EAAO,MAAO/P,EAAO,MAAOC,EAAO,QAASi0C,CAAQ,CACxE,EACA,WAAY,UAAY,CACpB,MAAO,CAAE,MAAOnkC,EAAO,OAAQ,GAAM,QAASmkC,CAAQ,CAC1D,CACJ,CACJ,EACA,MAAO,SAAUxe,EAAU,CACvBA,EAAS,MAAM,OAAO,UAAY,KAClCA,EAAS,MAAM,SAAW,IAC9B,CACJ,EA4IA,SAAS0f,GAAsBhV,EAAgBtH,EAAgB,CAC3D,IAAI4B,EAAgB9B,GAAkBwH,EAAgBtH,CAAc,EAChEuB,EAAc,CAAC,EAAG,CAAC,EACvB,MAAO,CACH,cAAeK,EACf,eAAgB5B,EAChB,YAAauB,CACjB,CACJ,CACA,SAASgb,GAA4B92B,EAAOua,EAAgB,CAExD,IAAI9C,EAAYzX,EAAM,UAAW4W,EAAO5W,EAAM,KAAMtuB,EAAQsuB,EAAM,MAAOnyB,EAASmyB,EAAM,OACpFza,EAAIqxB,EAAO,EAAI,EACfmgB,EAAkB,CAClBrlD,EAAQ,GAAK,EAAI6oC,EAAe,CAAC,GACjC1sC,EAAS,GAAK,EAAI0sC,EAAe,CAAC,EACtC,EACI4B,EAAgBlF,GAAkBQ,EAAWsf,EAAiBxxC,CAAC,EAC/Du2B,EAAc,CAAC,EAAG,CAAC,EACvB,MAAO,CACH,cAAeK,EACf,eAAgB5B,EAChB,YAAauB,CACjB,CACJ,CACA,SAASkb,GAA2Bh3B,EAAOi3B,EAAqB,CAE5D,IAAIxf,EAAYzX,EAAM,UAAW4W,EAAO5W,EAAM,KAAMtuB,EAAQsuB,EAAM,MAAOnyB,EAASmyB,EAAM,OACpFza,EAAIqxB,EAAO,EAAI,EACf2D,EAAiBiC,GAAkBya,EAAqBvlD,EAAO7D,CAAM,EACrEmuC,EAAoB/E,GAAkBQ,EAAWwf,EAAqB1xC,CAAC,EACvEu2B,EAAc,CACdpqC,EAAQ,EAAIulD,EAAoB,CAAC,EACjCppD,EAAS,EAAIopD,EAAoB,CAAC,CACtC,EACA,MAAO,CACH,cAAejb,EACf,eAAgBzB,EAChB,YAAauB,CACjB,CACJ,CAOA,IAAIob,GAAuBC,GAAsB,WAAW,EACxDC,GAAY,CACZ,KAAM,YACN,UAAW,OACX,SAAU,GACV,MAAO,CACH,YACA,iBACA,mBACA,wBACA,YACA,eACA,mBACA,OACA,qBACJ,EACA,OAAQ,CACJ,cACA,eACA,SACA,YACA,mBACA,oBACA,cACA,gBACJ,EACA,OAAQ7T,GAAoB,WAAW,EACvC,qBAAsB2T,GACtB,cAAeG,GAA0B,WAAW,EACpD,iBAAkB,SAAUlgB,EAAU,EAAG,CACrC,IAAIh7B,EACAmO,EAAa,EAAE,WAAYM,EAAU,EAAE,QAASgrC,EAAU,EAAE,QAAS0B,EAAkB,EAAE,gBAAiBlC,EAAc,EAAE,YAAa5jC,EAAQ,EAAE,MAAO+lC,EAAuB,EAAE,qBAAsBpC,EAAc,EAAE,YACvNvoB,EAAY4qB,GAAkBF,EAAiB1sC,EAASN,EAAYkH,CAAK,EACzEwO,EAAQmX,EAAS,MACjBzpC,EAASsyB,EAAM,OAAQtuB,EAAQsuB,EAAM,MAAOnyB,EAASmyB,EAAM,OAAQuhB,EAASvhB,EAAM,OAItF,GAHI,CAAC4M,GAAa,CAACl/B,GAGf6zC,EAAO,UACP,MAAO,GAEXA,EAAO,UAAY6T,GAAeje,EAAS,aAC3C,CAACvsB,GAAW4sB,GAAaL,EAAU,CAAC,EACpC3lB,EAAM,MAAQ,CAAC,EACfA,EAAM,UAAYob,EAClBpb,EAAM,iBAAmB9f,EACzB8f,EAAM,kBAAoB3jB,EAC1B2jB,EAAM,UAAY,EAClBA,EAAM,WAAa,EACnBA,EAAM,QAAU,CAAC,EAAG,CAAC,EACrBA,EAAM,WAAawO,EAAM,gBAAkBA,EAAM,SACjDxO,EAAM,YAAcwO,EAAM,iBAAmBA,EAAM,UACnDxO,EAAM,QAAU,CAAC,IAAU,GAAQ,EAC9BokC,IACDpkC,EAAM,QAAU,CACZwO,EAAM,eACNA,EAAM,eACV,EACAxO,EAAM,QAAU,CACZwO,EAAM,eACNA,EAAM,eACV,GAEJ,IAAI6X,EAAkBV,EAAS,MAAM,iBAAmB,MACxD3lB,EAAM,gBAAkBqmB,GAAmB,GAASA,CAAe,EAC7DA,EAAgB,MAAM,GAAG,EACzBA,EACNrmB,EAAM,kBAAoBwO,EAAM,aAChCxO,EAAM,qBAAuBwO,EAAM,gBACnCxO,EAAM,SAAWrV,EAA2C,GAAE,iBAAmB,MAAQA,IAAO,OAASA,EAAO,CAACywB,EAAU,CAAC,GAAK,CAACA,EAAU,CAAC,GAAMA,EAAU,CAAC,GAAK,CAACA,EAAU,CAAC,EAC/K,SAAS6qB,EAASl3C,EAAO,CACrBiR,EAAM,MAAQjR,GAAS,SAASA,CAAK,EAAIA,EAAQ,CACrD,CACAiR,EAAM,eAAiBurB,GAAwB5F,EAAS,KAAK,EAC7D,SAASugB,EAAkBnd,EAAgB,CACvC,IAAI7wB,EAASmtC,GAAsBrlC,EAAM,eAAgB+oB,CAAc,EACvE/oB,EAAM,eAAiB9H,EAAO,eAC9B8H,EAAM,cAAgB9H,EAAO,cAC7B8H,EAAM,YAAc9H,EAAO,WAC/B,CACA,SAASiuC,EAAiBxb,EAAe,CACrC,IAAIzyB,EAASstC,GAA2B7f,EAAS,MAAOgF,CAAa,EACrE3qB,EAAM,eAAiB9H,EAAO,eAC9B8H,EAAM,cAAgB9H,EAAO,cAC7B8H,EAAM,YAAc9H,EAAO,WAC/B,CACA,SAASkuC,EAAOh3C,EAAS,CACrB4Q,EAAM,QAAU,CACZ1R,GAAgB,GAAG,OAAOc,EAAQ,CAAC,CAAC,EAAG,CAAC,GAAK,EAC7Cd,GAAgB,GAAG,OAAOc,EAAQ,CAAC,CAAC,EAAG,CAAC,GAAK,CACjD,CACJ,CACA,SAASi3C,EAAOh3C,EAAS,CACrB,IAAIi3C,EAAc,CACdj3C,EAAQ,CAAC,GAAK,IACdA,EAAQ,CAAC,GAAK,GAClB,GACI,CAAC,GAASi3C,EAAY,CAAC,CAAC,GAAK,SAASA,EAAY,CAAC,CAAC,KACpDA,EAAY,CAAC,EAAIh4C,GAAgB,GAAG,OAAOg4C,EAAY,CAAC,CAAC,EAAG,CAAC,GAAK,MAElE,CAAC,GAASA,EAAY,CAAC,CAAC,GAAK,SAASA,EAAY,CAAC,CAAC,KACpDA,EAAY,CAAC,EAAIh4C,GAAgB,GAAG,OAAOg4C,EAAY,CAAC,CAAC,EAAG,CAAC,GAAK,KAEtEtmC,EAAM,QAAUsmC,CACpB,CACAL,EAAS/lD,EAAQ7D,CAAM,EACvB6pD,EAAkBH,GAAwB,CAAC,CAAC3qB,EAAU,CAAC,EAAG,CAACA,EAAU,CAAC,CAAC,CAAC,EACxEpb,EAAM,kBAAoBkmC,EAC1BlmC,EAAM,iBAAmBmmC,EACzBnmC,EAAM,OAASomC,EACfpmC,EAAM,OAASqmC,EACf,IAAIvC,EAASC,GAAWpe,EAAU,EAAG,CACjC,UAAWvK,EACX,WAAYpb,EAAM,MAClB,IAAK,SAAUrV,EAAI,CACf,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAG47C,EAAat7C,EAAG,CAAC,EAAGu7C,EAAcv7C,EAAG,CAAC,EAC9D+U,EAAM,WAAaumC,EACnBvmC,EAAM,YAAcwmC,CACxB,EACA,OAAQJ,EACR,OAAQC,EACR,SAAUJ,EACV,kBAAmBC,EACnB,iBAAkBC,EAClB,UAAW,SAAU/tB,EAAQ,CACzBpY,EAAM,gBAAkBoY,CAC5B,EACA,UAAW+R,GAAU,UAAUxE,EAAU,IAAIV,GAAY,EAAE,UAAU,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC,CACnF,CAAC,EACG/sB,EAASyrC,GAAeK,GAAare,EAAU,gBAAiBme,CAAM,EAC1E,OAAA9jC,EAAM,oBAAsBA,EAAM,eAClCA,EAAM,mBAAqBA,EAAM,cAC7B9H,IAAW,KACX8H,EAAM,SAAW,GACjB2lB,EAAS,MAAM,eAAiB,CAC5B,QAAS,EAAE,UACX,UAAWvK,CACf,GAEGpb,EAAM,SAAW8jC,EAAS,EACrC,EACA,YAAa,SAAUne,EAAU,EAAG,CAChC,IAAIh7B,EACAqV,EAAQ,EAAE,MAAOikC,EAAa,EAAE,WAAY7qC,EAAU,EAAE,QAASqtC,EAAkB,EAAE,gBAAiBC,EAAa,EAAE,WAAYC,EAAa,EAAE,WAAYxC,EAAU,EAAE,QAASxC,EAAY,EAAE,UAAWyC,EAAU,EAAE,QAAST,EAAc,EAAE,YAAaiD,EAAgB,EAAE,cAC9QC,EAAW7mC,EAAM,SAAUqmB,EAAkBrmB,EAAM,gBAAiBumC,EAAavmC,EAAM,WAAYwmC,EAAcxmC,EAAM,YAAaooB,EAAYpoB,EAAM,UAAWqoB,EAAaroB,EAAM,WAAY5Q,EAAU4Q,EAAM,QAAS3Q,EAAU2Q,EAAM,QAASjR,EAAQiR,EAAM,MAAO8mC,EAAmB9mC,EAAM,iBAAkB+mC,EAAoB/mC,EAAM,kBAAmBgnC,EAAUhnC,EAAM,QACnX,GAAI,CAAC6mC,EACD,OAEJ,GAAID,EAAe,CACf,IAAIxhB,EAAOO,EAAS,MAAM,KACtBshB,EAAoBjnC,EAAM,kBAAmBknC,EAAuBlnC,EAAM,qBAC1EjM,EAAIqxB,EAAO,EAAI,EACfgB,EAAe1M,GAASmQ,GAAkB,CAAC,CAAC,EAC5Csd,EAAU,KAAK,KAAK/gB,EAAa,MAAM,EACvCryB,IAAMozC,IACN/gB,EAAe7P,GAAiB6P,EAAc+gB,EAASpzC,CAAC,GAE5D,IAAIqzC,EAAgBne,GAAcge,EAAmB7gB,EAAc8gB,EAAsBnzC,CAAC,EACtFsxB,EAAQC,GAAe8hB,EAAeN,EAAkBC,EAAmBhzC,CAAC,EAChFiM,EAAM,eAAiBqlB,EACvBrlB,EAAM,iBAAmBomB,EACzBpmB,EAAM,cAAgBonC,CAC1B,CACA,IAAItwD,EAAQ+5C,GAASlL,EAAS,MAAO,WAAW,EAC5C0hB,EAAevwD,EAAM,aAAcmU,EAAKnU,EAAM,eAAgBwwD,EAAiBr8C,IAAO,OAASg5C,EAAa,EAAI,EAAIh5C,EAAIw5C,EAAiB3tD,EAAM,eAAgBywD,EAAmBzwD,EAAM,iBACxLskC,EAAYpb,EAAM,UAClBwnC,EAAgBpsB,EAChBqsB,EAAY,EACZC,GAAa,EACb,CAACtsB,EAAU,CAAC,GAAK,CAACA,EAAU,CAAC,IAC7BosB,EAAgB,CAAC,EAAG,CAAC,GAEzB,IAAIl4C,GAAaP,IAAU03C,GAA4C3vD,EAAM,YAAe,GAC5F,SAAS6wD,IAAsB,CAC3B,IAAI5e,GAAiB/oB,EAAM,eACvB0a,GAAWktB,GAAkBJ,EAAel4C,GAAW0Q,EAAO,CAAC,EACnEynC,EAAY/sB,GAAS,UACrBgtB,GAAahtB,GAAS,WACtB,IAAImtB,GAAaL,EAAc,CAAC,EAAIze,GAAe,CAAC,GAAMz5B,GACpD,KAAK,IAAIw3C,EAAmBW,EAAW,EAAQ,EAAIX,EACrDgB,GAAcN,EAAc,CAAC,EAAIze,GAAe,CAAC,GAAMz5B,GACrD,KAAK,IAAIy3C,EAAoBW,GAAY,EAAQ,EAAIX,EAC3D,OAAIz3C,IAAaw3C,GAAoBC,IAE7BC,EACAc,GAAaD,GAAY94C,EAGzB84C,GAAYC,GAAa/4C,GAG1B,CAAC84C,GAAWC,EAAU,CACjC,CACA,IAAI18C,GAAKq3B,EAAOklB,GAAoB,EAAG,CAAC,EAAGI,EAAgB38C,GAAG,CAAC,EAAG48C,GAAiB58C,GAAG,CAAC,EAClFu4C,IACD3jC,EAAM,kBAAkBA,EAAM,cAAc,EAC5CgkC,GAAare,EAAU,iBAAkBoe,GAAWpe,EAAU,EAAG,CAC7D,oBAAqB3lB,EAAM,oBAC3B,mBAAoBA,EAAM,mBAC1B,kBAAmB,SAAUioC,GAAoB,CAC7C,IAAIt9C,GACJ,OAAAqV,EAAM,kBAAkBioC,EAAkB,EAC1Ct9C,GAAK83B,EAAOklB,GAAoB,EAAG,CAAC,EAAGI,EAAgBp9C,GAAG,CAAC,EAAGq9C,GAAiBr9C,GAAG,CAAC,EAC5E,CAACo9C,EAAeC,EAAc,CACzC,EACA,iBAAkB,SAAUxd,GAAmB,CAC3C,IAAI7/B,GACJ,OAAAqV,EAAM,iBAAiBwqB,EAAiB,EACxC7/B,GAAK83B,EAAOklB,GAAoB,EAAG,CAAC,EAAGI,EAAgBp9C,GAAG,CAAC,EAAGq9C,GAAiBr9C,GAAG,CAAC,EAC5E,CAACo9C,EAAeC,EAAc,CACzC,EACA,cAAeD,EACf,eAAgBC,GAChB,QAAS,SAAUp/C,GAAM,CACrB,IAAI+B,GACJA,GAAK83B,EAAO75B,GAAM,CAAC,EAAGm/C,EAAgBp9C,GAAG,CAAC,EAAGq9C,GAAiBr9C,GAAG,CAAC,CACtE,CACJ,EAAG,EAAI,CAAC,GAEZ,IAAIggC,GAAgB+b,EACfA,IACG,CAACzC,GAAc7qC,EACfuxB,GAAgBW,GAAoB3F,EAAU,CAAC,EAAG,CAAC,CAAC,EAGpDgF,GAAgB3qB,EAAM,eAG9B,IAAIkoC,GAAW,CAAC,EAAG,CAAC,EACf9uC,IACD8uC,GAAWC,GAAgBxiB,EAAUoiB,EAAeC,GAAgB5sB,EAAWuP,GAAe,CAACwZ,GAAWxC,EAAW3hC,CAAK,GAE1H2mC,IACA,CAACA,EAAW,CAAC,IAAMuB,GAAS,CAAC,EAAI,GACjC,CAACvB,EAAW,CAAC,IAAMuB,GAAS,CAAC,EAAI,IAErC,SAASE,IAAc,CACnB,IAAIz9C,GACA08C,IACA18C,GAAK83B,EAAO4kB,EAAa,CAACU,EAAeC,EAAc,CAAC,EAAG,CAAC,EAAGD,EAAgBp9C,GAAG,CAAC,EAAGq9C,GAAiBr9C,GAAG,CAAC,GAE/Go9C,EAAgB/4C,GAAS+4C,EAAeT,CAAc,EACtDU,GAAiBh5C,GAASg5C,GAAgBV,CAAc,CAC5D,CACA,GAAIh4C,GAAW,CACPk4C,EAAc,CAAC,GAAKA,EAAc,CAAC,GAAKU,GAAS,CAAC,GAAKA,GAAS,CAAC,IAC7D,EAAIA,GAAS,CAAC,CAAC,EAAI,EAAIA,GAAS,CAAC,CAAC,EAClCA,GAAS,CAAC,EAAI,EAGdA,GAAS,CAAC,EAAI,GAGtB,IAAIG,GAAW,CAACH,GAAS,CAAC,GAAK,CAACA,GAAS,CAAC,EACtCG,IAEAD,GAAY,EAEXZ,EAAc,CAAC,GAAK,CAACA,EAAc,CAAC,GACjCU,GAAS,CAAC,GAAK,CAACA,GAAS,CAAC,GAC1BG,IAAYrB,GAChBe,GAAiBG,GAAS,CAAC,EAC3BF,GAAiBD,EAAgBh5C,IAE3B,CAACy4C,EAAc,CAAC,GAAKA,EAAc,CAAC,GACtC,CAACU,GAAS,CAAC,GAAKA,GAAS,CAAC,GAC1BG,IAAY,CAACrB,KACjBgB,IAAkBE,GAAS,CAAC,EAC5BH,EAAgBC,GAAiBj5C,EAEzC,MAEIg5C,GAAiBG,GAAS,CAAC,EAC3BF,IAAkBE,GAAS,CAAC,EAC5BH,EAAgB,KAAK,IAAI,EAAGA,CAAa,EACzCC,GAAiB,KAAK,IAAI,EAAGA,EAAc,EAE/Cr9C,EAAK83B,EAAOtzB,GAAmB,CAAC44C,EAAeC,EAAc,EAAG54C,EAASC,EAASC,GAAYP,EAAQ,EAAK,EAAG,CAAC,EAAGg5C,EAAgBp9C,EAAG,CAAC,EAAGq9C,GAAiBr9C,EAAG,CAAC,EAC9Jy9C,GAAY,EACR94C,KAAc80C,GAAWmD,KACrBP,EACAgB,GAAiBD,EAAgBh5C,EAGjCg5C,EAAgBC,GAAiBj5C,GAGzC04C,EAAYM,EAAgBjB,EAC5BY,GAAaM,GAAiBjB,EAC9B,IAAIhlC,GAAQ,CAAC0lC,EAAYrf,EAAWsf,GAAarf,CAAU,EAC3DroB,EAAM,UAAYynC,EAClBznC,EAAM,WAAa0nC,GACnB,IAAIY,GAAeld,GAAczF,EAAUoiB,EAAeC,GAAgBrd,GAAetE,EAAiBrmB,CAAK,EAC/G,GAAI,GAACykC,GAAkB1iC,GAAM,MAAM,SAAUtR,GAAK,CAAE,MAAO,CAACA,EAAK,CAAC,GAAK63C,GAAa,MAAM,SAAU73C,GAAK,CAAE,MAAO,CAACA,EAAK,CAAC,GAGzH,KAAIy5B,GAAOC,GAAU,KAAKxE,EAAUf,GAAc,EAAGe,EAAS,MAAO2iB,GAAc,CAAC,CAAClvC,EAAS,GAAO,WAAW,CAAC,EAC7GnV,GAAYimC,GAAK,UACjB2d,GAAYtB,EAAakB,EACzBK,GAAatB,EAAckB,GAC3B5D,GAASC,GAAWpe,EAAU,EAAG,EAAS,CAAE,MAAOkiB,GAAW,OAAQC,GAAY,YAAa,KAAK,MAAMC,CAAa,EAAG,aAAc,KAAK,MAAMC,EAAc,EAAG,WAAYj5C,EAAO,cAAeg5C,EAAe,eAAgBC,GAAgB,UAAW5sB,EAAW,KAAM,CAACqsB,EAAWC,EAAU,EAAG,MAAO3lC,GAAO,QAAS,CAAC,CAAC3I,EAAS,KAAM8wB,EAAK,EAAGqe,GAAmB,CAC7W,MAAO,CACH,MAAO,GAAG,OAAOV,GAAW,IAAI,EAChC,OAAQ,GAAG,OAAOC,GAAY,IAAI,CACtC,EACA,UAAW7jD,EACf,EAAGimC,GAAM,CAAC,CAAC,CAAC,EACZ,OAACyZ,GAAeK,GAAare,EAAU,WAAYme,EAAM,EAClDA,GACX,EACA,iBAAkB,SAAUne,EAAU,EAAG,CACrC,IAAI3lB,EAAQ,EAAE,MACV6mC,EAAW7mC,EAAM,SAAU8mC,EAAmB9mC,EAAM,iBAAkB+mC,EAAoB/mC,EAAM,kBAAmBooB,EAAYpoB,EAAM,UAAWqoB,EAAaroB,EAAM,WACvK,GAAI,GAAC6mC,GAAYlhB,EAAS,MAAM,sBAAwB,IAGxD,KAAIh7B,EAAKg7B,EAAS,MAAOzlC,EAAQyK,EAAG,MAAOtO,EAASsO,EAAG,OACnD69C,EAAatoD,GAAS4mD,EAAmB1e,GACzCqgB,EAAcpsD,GAAU0qD,EAAoB1e,GAC5CqgB,EAAe,EAAIF,CAAU,EAAI,EACjCG,EAAgB,EAAIF,CAAW,EAAI,EAWvC,GAVIC,IACA1oC,EAAM,YAAcwoC,EACpBxoC,EAAM,kBAAoBwoC,EAC1BxoC,EAAM,WAAawoC,GAEnBG,IACA3oC,EAAM,aAAeyoC,EACrBzoC,EAAM,mBAAqByoC,EAC3BzoC,EAAM,YAAcyoC,GAEpBC,GAAgBC,EAChB,OAAO,KAAK,YAAYhjB,EAAU,CAAC,EAE3C,EACA,eAAgB,SAAUA,EAAU,EAAG,CACnC,IAAI3lB,EAAQ,EAAE,MAAO2jC,EAAc,EAAE,YACrC,GAAK3jC,EAAM,SAGX,CAAAA,EAAM,SAAW,GACjB,IAAI8jC,EAASoB,GAAcvf,EAAU,EAAG,CAAC,CAAC,EAC1C,OAACge,GAAeK,GAAare,EAAU,cAAeme,CAAM,EACrDA,EACX,EACA,0BAA2B4B,GAC3B,sBAAuB,SAAU/f,EAAU,EAAG,CAC1C,IAAI3lB,EAAQ,EAAE,MACV8jC,EAAS,KAAK,iBAAiBne,EAAU,EAAS,EAAS,CAAC,EAAG,CAAC,EAAG,CAAE,QAAS,EAAK,CAAC,CAAC,EACzF,GAAI,CAACme,EACD,MAAO,GAEX,IAAI8E,EAAiBvZ,GAAgB1J,EAAU,YAAa,CAAC,EACzDkjB,EAAyB7oC,EAAM,iBAAkB8oC,EAA0B9oC,EAAM,kBACrF,SAAS+oC,GAAiB,CACtB,IAAIC,EAAkBhpC,EAAM,QAC5B4oC,EAAe,QAAQ,SAAU/Y,EAAI,CACjC,IAAIllC,EAAKklC,EAAG,MAAOoZ,EAAet+C,EAAG,QAASu+C,EAAwBv+C,EAAG,iBAAkBw+C,EAAyBx+C,EAAG,kBACnHy+C,EAAiBP,GACdK,EAAwBD,EAAa,CAAC,EAAIC,EAAwB,GACrEG,EAAkBP,GACfK,EAAyBF,EAAa,CAAC,EAAIE,EAAyB,GAC3EH,EAAgB,CAAC,EAAI,KAAK,IAAIA,EAAgB,CAAC,EAAGI,CAAc,EAChEJ,EAAgB,CAAC,EAAI,KAAK,IAAIA,EAAgB,CAAC,EAAGK,CAAe,CACrE,CAAC,CACL,CACA,SAASC,GAAiB,CACtB,IAAIC,EAAkBvpC,EAAM,QAC5B4oC,EAAe,QAAQ,SAAU/Y,EAAI,CACjC,IAAIllC,EAAKklC,EAAG,MAAO2Z,EAAe7+C,EAAG,QAASu+C,EAAwBv+C,EAAG,iBAAkBw+C,EAAyBx+C,EAAG,kBACnH8+C,EAAiBZ,GACdK,EAAwBM,EAAa,CAAC,EAAIN,EAAwB,GACrEQ,EAAkBZ,GACfK,EAAyBK,EAAa,CAAC,EAAIL,EAAyB,GAC3EI,EAAgB,CAAC,EAAI,KAAK,IAAIA,EAAgB,CAAC,EAAGE,CAAc,EAChEF,EAAgB,CAAC,EAAI,KAAK,IAAIA,EAAgB,CAAC,EAAGG,CAAe,CACrE,CAAC,CACL,CACA,IAAIt1C,EAAS67B,GAAkBtK,EAAU,KAAM,mBAAoB,EAAG,SAAU7X,EAAO+hB,EAAI,CACvF,OAAOM,GAAexK,EAAU7X,EAAO9N,EAAO6vB,CAAE,CACpD,CAAC,EACDkZ,EAAe,EACfO,EAAe,EACf,IAAIpD,EAAoB,SAAUnd,EAAgB,CAC9C+a,EAAO,kBAAkB/a,CAAc,EACvC30B,EAAO,QAAQ,SAAUy7B,EAAI3nC,EAAG,CAC5B2nC,EAAG,kBAAkB9G,CAAc,EACnCoH,GAAexK,EAAUkK,EAAG,SAAU7vB,EAAO4oC,EAAe1gD,CAAC,CAAC,CAClE,CAAC,CACL,EACA8X,EAAM,kBAAoBkmC,EAC1B,IAAIf,EAAa,EAAS,EAAS,CAAC,EAAGrB,CAAM,EAAG,CAAE,QAASne,EAAS,MAAM,QAAS,OAAQvxB,EAAO,IAAI,SAAUy7B,EAAI,CAC5G,OAAO,EAAS,EAAS,CAAC,EAAGA,CAAE,EAAG,CAAE,OAAQ,SAAUzgC,EAAS,CACvDygC,EAAG,OAAOzgC,CAAO,EACjB25C,EAAe,CACnB,EAAG,OAAQ,SAAU15C,EAAS,CAC1BwgC,EAAG,OAAOxgC,CAAO,EACjBi6C,EAAe,CACnB,CAAE,CAAC,CACX,CAAC,EAAG,kBAAmBpD,EAAmB,OAAQ,SAAU92C,EAAS,CACjE00C,EAAO,OAAO10C,CAAO,EACrB25C,EAAe,CACnB,EAAG,OAAQ,SAAU15C,EAAS,CAC1By0C,EAAO,OAAOz0C,CAAO,EACrBi6C,EAAe,CACnB,CAAE,CAAC,EACHpxC,EAAS8rC,GAAare,EAAU,qBAAsBwf,CAAU,EACpE,OAAAnlC,EAAM,SAAW9H,IAAW,GACrB8H,EAAM,SAAW8jC,EAAS,EACrC,EACA,iBAAkB,SAAUne,EAAU,EAAG,CACrC,IAAI3lB,EAAQ,EAAE,MACd,GAAKA,EAAM,SAGX,KAAIlpB,EAAQ+5C,GAASlL,EAAS,MAAO,WAAW,EAChDgkB,GAAWhkB,EAAU,iBAAkB,SAAUge,EAAa,CAC1DK,GAAare,EAAU,sBAAuBoe,GAAWpe,EAAU,EAAG,EAAS,EAAS,CAAC,EAAGge,CAAW,EAAG,CAAE,QAAS7sD,EAAM,OAAQ,CAAC,EAAG,EAAI,CAAC,CAChJ,CAAC,EACD,IAAIgtD,EAAS,KAAK,YAAYne,EAAU,EAAS,EAAS,CAAC,EAAG,CAAC,EAAG,CAAE,QAAS,EAAK,CAAC,CAAC,EACpF,GAAKme,EAGL,KAAIiE,EAAgBjE,EAAO,cAAekE,EAAiBlE,EAAO,eAAgBhd,EAAOgd,EAAO,KAC5Fx0C,EAAYxY,EAAM,UAClB8yD,EAAc,CACd7B,GAAiBA,EAAgBjhB,EAAK,CAAC,GACvCkhB,GAAkBA,EAAiBlhB,EAAK,CAAC,EAC7C,EACI6D,EAAgB3qB,EAAM,cACtB5L,EAAS67B,GAAkBtK,EAAU,KAAM,cAAe,EAAG,SAAU/0B,EAAGi/B,EAAI,CAC9E,IAAIllC,EAAK83B,EAAOvL,GAAUI,GAAmBqO,EAAS,SAAW,IAAM,KAAK,GAAI,CAAC,EAAG,CAChFkK,EAAG,MAAM,UAAY+Z,EAAY,CAAC,EAClC/Z,EAAG,MAAM,UAAY+Z,EAAY,CAAC,EAClC,CACJ,EAAG,CAAC,EAAG,CAAC,EAAGn0C,EAAU9K,EAAG,CAAC,EAAG+K,EAAU/K,EAAG,CAAC,EAC1C,OAAO,EAAS,EAAS,CAAC,EAAGklC,CAAE,EAAG,CAAE,WAAY,KAAM,YAAa+Z,EAAa,WAAYhzB,GAAK+T,EAAe,CAACl1B,EAASC,CAAO,CAAC,EAAG,gBAAiBpG,CAAU,CAAC,CACrK,CAAC,EACG61C,EAAa,EAAS,CAAE,QAASruD,EAAM,QAAS,OAAQsd,CAAO,EAAG0vC,CAAM,EAC5E,OAAAE,GAAare,EAAU,gBAAiBwf,CAAU,EAC3CA,GACX,EACA,oBAAqB,SAAUxf,EAAU,EAAG,CACxC,IAAIrtB,EAAS,EAAE,OAAQ0H,EAAQ,EAAE,MACjC,GAAKA,EAAM,SAGX,MAAK,eAAe2lB,EAAU,CAAC,EAC/B,IAAIvxB,EAAS67B,GAAkBtK,EAAU,KAAM,iBAAkB,CAAC,EAC9Dwf,EAAaD,GAAcvf,EAAU,EAAG,CACxC,QAASA,EAAS,MAAM,QACxB,OAAQvxB,CACZ,CAAC,EACD,OAAA4vC,GAAare,EAAU,mBAAoBwf,CAAU,EAC9C7sC,EACX,EA+BA,QAAS,SAAUqtB,EAAU,CACzB,IAAI3lB,EAAQ,CAAC,EACTynC,EAAY,EACZC,EAAa,EACbvD,EAAU,GACVtmD,EAAO8nC,EAAS,QAAQ,EAC5B,MAAO,CACH,UAAW,GACX,aAAc,SAAUp0C,EAAG,CACvB,IAAIoZ,EACJ,OAAAw5C,EAAU5yD,EAAE,QACL,CACH,MAAOyuB,EACP,gBAAiBzuB,EAAE,WAAa,CAAC,EAAG,CAAC,EACrC,eAAgBoZ,EAA2CpZ,GAAE,cAAgB,MAAQoZ,IAAO,OAASA,EAAK,GAC1G,QAASw5C,CACb,CACJ,EACA,QAAS,SAAU5yD,EAAG,CAClB,MAAI,gBAAiBA,EACjBk2D,EAAYl2D,EAAE,YAAcsM,EAAK,YAE5B,eAAgBtM,IACrBk2D,GAAal2D,EAAE,YAEf,iBAAkBA,EAClBm2D,EAAan2D,EAAE,aAAesM,EAAK,aAE9B,gBAAiBtM,IACtBm2D,GAAcn2D,EAAE,aAEb,CACH,MAAOyuB,EACP,WAAY,CAACynC,EAAWC,CAAU,EAClC,gBAAiBn2D,EAAE,UACnB,QAAS4yD,CACb,CACJ,EACA,WAAY,UAAY,CACpB,MAAO,CAAE,MAAOnkC,EAAO,OAAQ,GAAM,QAASmkC,CAAQ,CAC1D,CACJ,CACJ,EACA,MAAO,SAAUxe,EAAU,CACvBA,EAAS,MAAM,OAAO,UAAY,IACtC,CACJ,EAkMA,SAASkkB,GAAmBlkB,EAAU3lB,EAAOvK,EAASC,EAAS7X,EAAM,CACjE,IAAI+sC,EAAYjF,EAAS,MAAM,UAC3BnX,EAAQmX,EAAS,MACjB5xB,EAAIya,EAAM,KAAO,EAAI,EACrB4J,EAASpY,EAAM,OACfqrB,EAAa5F,GAAkBE,EAAS,MAAM,WAElD7O,GAAM,CAACsB,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EAAGwS,EAAY,CAAC,EAAG,CAAC,EAAI,CAACpc,EAAM,KAAMA,EAAM,GAAG,CAAC,EAAGza,CAAC,EAC1E+1C,EAAsBlzB,GAAK,CAAC/4B,EAAK,KAAMA,EAAK,GAAG,EAAGwtC,CAAU,EAChErrB,EAAM,oBAAsB8pC,EAC5B9pC,EAAM,QAAUlQ,GAAOg6C,EAAqB,CAACr0C,EAASC,CAAO,CAAC,EAAI,KAAK,GAAK,IAC5EsK,EAAM,WAAaA,EAAM,QACzBA,EAAM,YAAc,EACpBA,EAAM,KAAO,EACbA,EAAM,UAAY,GAAU8pC,EAAqB,CAACr0C,EAASC,CAAO,CAAC,CACvE,CACA,SAASq0C,GAAgB3G,EAAKhoB,EAAWpb,EAAO,CAC5C,IAAIgqC,EAAahqC,EAAM,WAAYiqC,EAAUjqC,EAAM,QAC/CkqC,EAAoBD,EAAU,IAC9BE,EAAO,KAAK,MAAMF,EAAU,GAAG,EAC/BC,EAAoB,IACpBA,GAAqB,KAErBA,EAAoB9G,GAAO8G,EAAoB,KAAO9G,EAAM,GAE5D,EAAE+G,EAEGD,EAAoB9G,GAAO8G,EAAoB,IAAM9G,EAAM,KAEhE,EAAE+G,EAEN,IAAIrjB,EAAO1L,GAAa+uB,EAAO,IAAM/G,EAAM4G,GAC3C,OAAAhqC,EAAM,QAAUgqC,EAAaljB,EACtBA,CACX,CACA,SAASsjB,GAAwB30C,EAASC,EAAS0lB,EAAWpb,EAAO,CACjE,OAAO+pC,GAAgBj6C,GAAOkQ,EAAM,oBAAqB,CAACvK,EAASC,CAAO,CAAC,EAAI,KAAK,GAAK,IAAK0lB,EAAWpb,CAAK,CAClH,CACA,SAASqqC,GAAc1kB,EAAU2kB,EAActqC,EAAO8mB,EAAM0d,EAAY/M,EAAW,CAC/E,IAAI9sC,EAAKg7B,EAAS,MAAM,eAAgB4kB,EAAiB5/C,IAAO,OAAS,EAAIA,EACzE6/C,EAAcxqC,EAAM,YACpByqC,EAAe,EACfpS,EAAS,GACb,GAAIZ,EAAW,CACX,IAAIv/B,EAASwyC,GAAgB/kB,EAAU2kB,EAAcxjB,EAAM0d,EAAa1d,CAAI,EAC5EuR,EAASngC,EAAO,OAChBuyC,EAAejG,EAAatsC,EAAO,IACvC,CACKmgC,IACDoS,EAAez7C,GAASw1C,EAAa1d,EAAMyjB,CAAc,GAE7D,IAAII,EAAUF,EAAejG,EAC7B,OAAAxkC,EAAM,YAAc2qC,EACb,CAACA,EAAUH,EAAaG,EAASF,CAAY,CACxD,CACA,SAASG,GAAqBC,EAAkBlgD,EAAIywB,EAAW,CAC3D,IAAInwB,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGoF,EAAO9E,EAAG,CAAC,EAAG+E,EAAO/E,EAAG,CAAC,EAAGstB,EAAOttB,EAAG,CAAC,EAAGi0C,EAAOj0C,EAAG,CAAC,EAC7E,GAAI4/C,IAAqB,OACrB,MAAO,CAAC,EAEZ,GAAInhD,GAAQmhD,CAAgB,EACxB,OAAOA,EAAiB,IAAI,SAAU/8B,EAAO,CAAE,OAAO88B,GAAqB98B,EAAO,CAAC/d,EAAMC,EAAMuoB,EAAM2mB,CAAI,EAAG9jB,CAAS,EAAE,CAAC,CAAG,CAAC,EAEhI,IAAIhwB,EAAKq3B,GAAQooB,GAAoB,OAAO,MAAM,GAAG,EAAG,CAAC,EAAG7M,EAAO5yC,EAAG,CAAC,EAAG6yC,EAAO7yC,EAAG,CAAC,EACjF0/C,EAAW,CAAC/6C,EAAMC,CAAI,EACtBguC,IAAS,OACT8M,EAAW,CAACvyB,EAAMxoB,CAAI,EAEjBiuC,IAAS,QACd8M,EAAW,CAAC96C,EAAMkvC,CAAI,EAEjBlB,IAAS,WACd8M,EAAW,CAAC5L,EAAM3mB,CAAI,GAE1B,IAAI5vB,EAAM,EACLmiD,EAAS,CAAC,EAAE,CAAC,EAAIA,EAAS,CAAC,EAAE,CAAC,GAAK,GACnCA,EAAS,CAAC,EAAE,CAAC,EAAIA,EAAS,CAAC,EAAE,CAAC,GAAK,CACxC,EACIlmD,EAAMmmD,GAAeD,EAAU1vB,CAAS,EAC5C,GAAI6iB,EAAM,CACN,IAAIxO,EAAUwO,IAAS,OAASA,IAAS,OACrC+M,EAAYhN,IAAS,UAAYA,IAAS,OAC9Cr1C,EAAMmiD,EAAUrb,GAAW,CAACub,GAAe,CAACvb,GAAWub,EAAa,EAAI,CAAC,CAC7E,CACA,MAAO,CAAC,CAACriD,EAAK/D,CAAG,CAAC,CACtB,CACA,SAASqmD,GAAqBtlB,EAAU,EAAG,CACvC,GAAI,EAAE,UACF,OAAO,EAAE,cAAgB,YAE7B,IAAIzpC,EAAS,EAAE,WAAW,OAC1B,GAAIuW,GAASvW,EAAQsQ,GAAO,kBAAkB,CAAC,GACvCm5B,EAAS,MAAM,sBAAwBlzB,GAASvW,EAAQsQ,GAAO,gBAAgB,CAAC,GAChFiG,GAASvW,EAAQsQ,GAAO,SAAS,CAAC,GAAKiG,GAASvW,EAAQsQ,GAAO,WAAW,CAAC,EAC/E,MAAO,GAEX,IAAI0+C,EAAiBvlB,EAAS,MAAM,eACpC,OAAIulB,EACOC,GAAcD,EAAgB,EAAI,EAAE,KAAK,SAAUlsD,EAAS,CAC/D,OAAKA,EAGE9C,IAAW8C,GAAW9C,EAAO,SAAS8C,CAAO,EAFzC,EAGf,CAAC,EAEE,EACX,CACA,IAAIwB,GAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EACN4qD,GAAY,CACZ,KAAM,YACN,SAAU,GACV,MAAO,CACH,YACA,mBACA,iBACA,mBACA,iBACA,uBACA,OACA,4BACA,uBACJ,EACA,OAAQ,CACJ,cACA,eACA,SACA,YACA,mBACA,oBACA,cACA,gBACJ,EACA,IAAK,CAAC5qD,EAAG,EACT,cAAe,SAAUmlC,EAAU,CAC/B,OAAKA,EAAS,WAAW,WAAW,EAG7Bn5B,GAAO,wBAAwB,EAF3B,EAGf,EACA,OAAQ,SAAUm5B,EAAU+K,EAAO,CAC/B,IAAI/lC,EAAKkmC,GAASlL,EAAS,MAAO,WAAW,EAAG0lB,EAAY1gD,EAAG,UAAWkgD,EAAmBlgD,EAAG,iBAAkB0Y,EAAO1Y,EAAG,KAAM8lC,EAAmB9lC,EAAG,iBAAkB2gD,EAAuB3gD,EAAG,qBAAsB4gD,EAA4B5gD,EAAG,0BACrPM,EAAK06B,EAAS,SAAS,EAAGgL,EAAc1lC,EAAG,YAAamwB,EAAYnwB,EAAG,UAC3E,GAAI,CAACogD,EACD,OAAO,KAEX,IAAI90C,EAAYq0C,GAAqBC,EAAkBla,EAAavV,CAAS,EACzEowB,EAAO,CAAC,EAcZ,GAbAj1C,EAAU,QAAQ,SAAU5L,EAAIzC,EAAG,CAC/B,IAAI+C,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGhC,EAAMsC,EAAG,CAAC,EAAGrG,EAAMqG,EAAG,CAAC,EAC/CugD,EAAK,KAAK9a,EAAM,cAAc,MAAO,CAAE,IAAK,WAAW,OAAOxoC,CAAC,EAAG,UAAWsE,GAAO,UAAU,EAAG,MAAO,CAEhG,UAAW,6BAA6B,OAAO7D,EAAI,CAAC,EAAG,MAAM,EAAE,OAAOA,EAAI,CAAC,EAAG,aAAa,EAAE,OAAO/D,EAAK,MAAM,CACnH,CAAE,EACF8rC,EAAM,cAAc,MAAO,CAAE,UAAWlkC,GAAO,oBAAoB,EAAG,MAAO,CACrE,UAAW,UAAU,OAAO6W,EAAM,GAAG,CACzC,CAAE,CAAC,EACPqtB,EAAM,cAAc,MAAO,CAAE,UAAWlkC,GAAO,0BAA0B,EAAG,MAAO,CAC3E,UAAW,0BAA0B,OAAO6W,EAAM,GAAG,CACzD,CAAE,CAAC,CAAC,CAAC,CACjB,CAAC,EACGotB,EAAkB,CAClB,IAAIgb,EAAQ39C,GAAQy9C,GAA6B,CAAC,CAAC,EAC/CG,EAAe,CAAC,EACpBD,EAAM,QAAQ,SAAU54D,EAAM,CAC1B04D,EAA0B14D,CAAI,EAAE,QAAQ,SAAUuoC,EAAW,CACzDswB,EAAatwB,CAAS,EAAIvoC,CAC9B,CAAC,CACL,CAAC,EACD,IAAI84D,EAAwB,CAAC,EACzBjiD,GAAQ+mC,CAAgB,IACxBkb,EAAwBlb,EAAiB,IAAI,SAAU3M,EAAK,CACxD,IAAInB,EAAO+oB,EAAa5nB,CAAG,EAC3B,MAAO,CACH,KAAMnB,EAAO,CAAE,QAASA,CAAK,EAAI,CAAC,EAClC,WAAYA,EAAO,CAAC,MAAM,EAAI,CAAC,EAC/B,IAAKmB,CACT,CACJ,CAAC,GAEL0nB,EAAK,KAAK,MAAMA,EAAM,EAAc,CAAC,EAAG/oB,EAAO+N,GAA+B7K,EAAU,YAAagmB,EAAuBjb,CAAK,CAAC,EAAG,EAAK,CAAC,CAC/I,CACA,OAAI4a,GACAE,EAAK,KAAK,MAAMA,EAAM,EAAc,CAAC,EAAG/oB,EAAOkP,GAAqBhM,EAAU+K,CAAK,CAAC,EAAG,EAAK,CAAC,EAE1F8a,CACX,EACA,qBAAsBP,GACtB,iBAAkB,SAAUtlB,EAAU,EAAG,CACrC,IAAIh7B,EACAM,EACA+U,EAAQ,EAAE,MAAOvK,EAAU,EAAE,QAASC,EAAU,EAAE,QAASk2C,EAAe,EAAE,aAAc3H,EAAa,EAAE,WAAY7qC,EAAU,EAAE,QAASuoC,EAAY,EAAE,UACxJnzB,EAAQmX,EAAS,MACjBzpC,EAASsyB,EAAM,OAAQlqB,EAAOkqB,EAAM,KAAMjqB,EAAMiqB,EAAM,IAAK4M,EAAY5M,EAAM,UAAWq9B,EAAkBr9B,EAAM,gBAAiB6a,EAAkB7a,EAAM,gBAAiBoX,EAAqBpX,EAAM,mBAAoB2X,EAAe3X,EAAM,aAAc4X,EAAe5X,EAAM,aAAcyX,EAAYzX,EAAM,UAAWtuB,EAAQsuB,EAAM,MAAOnyB,EAASmyB,EAAM,OACpW,GAAI,CAACmzB,GAAa,CAACzlD,EACf,MAAO,GAEX,IAAI2B,EAAO8nC,EAAS,QAAQ,EAC5B3lB,EAAM,KAAOniB,EACbmiB,EAAM,UAAYqpB,EAClBrpB,EAAM,KAAO1b,EACb0b,EAAM,IAAMzb,EACZ,IAAI4hD,EAAmB,SAAUxb,EAAe,CAC5C,IAAIzyB,EAASstC,GAA2B7f,EAAS,MAAOgF,CAAa,EACrE3qB,EAAM,eAAiB9H,EAAO,eAC9B8H,EAAM,YAAc9H,EAAO,YAC3B8H,EAAM,cAAgB9H,EAAO,cACzB4zC,GACAA,EAAY,iBAAiBnhB,CAAa,CAElD,EACIub,EAAoB,SAAUnd,EAAgB,CAC9C,IAAI7wB,EAASotC,GAA4B3f,EAAS,MAAOoD,CAAc,EACvE/oB,EAAM,eAAiB9H,EAAO,eAC9B8H,EAAM,YAAc9H,EAAO,YAC3B8H,EAAM,cAAgB9H,EAAO,cACzB4zC,GACAA,EAAY,kBAAkB/iB,CAAc,CAEpD,EACIgjB,EAAet2C,EACfu2C,EAAet2C,EACnB,GAAIisC,GAAavoC,GAAW6qC,EAAY,CACpC,IAAIgI,EAAiBL,GAAgB,EACrC5rC,EAAM,WAAa,CACf,OAAQniB,EAAK,aACb,QAASouD,EACT,WAAYA,EACZ,YAAa,EACb,UAAW,CACf,EACAjsC,EAAM,UAAY,EAAS,EAAS,CAAC,EAAGA,EAAM,UAAU,EAAG,CAAE,OAAQniB,EAAK,MAAO,CAAC,EAClFmiB,EAAM,aAAe,EAAS,EAAS,CAAC,EAAGA,EAAM,UAAU,EAAG,CAAE,OAAQniB,EAAK,OAAQ,WAAYouD,CAAe,CAAC,CACrH,KACK,CACD,IAAIC,GAAejhD,EAAK,EAAE,cAAgB,MAAQA,IAAO,OAAS,OAASA,EAAG,OAC9E,GAAIihD,EAAa,CACb,IAAIC,EAAkBD,EAAY,aAAa,gBAAgB,GAAK,GAChEE,EAAmB5nB,GAA8B2nB,CAAe,EACpE,GAAIC,EAAkB,CAClBpsC,EAAM,UAAY,GAClBA,EAAM,gBAAkBvN,GAASy5C,EAAa1/C,GAAO,gBAAgB,CAAC,EACtEwT,EAAM,iBAAmBosC,EACzB,IAAI93C,EAAU43C,EAAY,aAAa,cAAc,EACjD53C,IACA0L,EAAM,YAAc1L,GAExB,IAAI+3C,EAAcC,GAAiC99B,EAAM,WAAYA,EAAM,YAAaoX,CAAkB,EAC1Gj7B,EAAK83B,EAAOoG,GAAkBwjB,EAAaD,CAAgB,EAAG,CAAC,EAAGL,EAAephD,EAAG,CAAC,EAAGqhD,EAAerhD,EAAG,CAAC,CAC/G,CACJ,CACAqV,EAAM,WAAa,CAAE,OAAQniB,EAAK,YAAa,EAC/CmiB,EAAM,UAAY,CAAE,OAAQniB,EAAK,MAAO,EACxCmiB,EAAM,aAAe,CACjB,OAAQniB,EAAK,OACb,WAAYA,EAAK,QACrB,EACA,IAAI0uD,EAA0BpG,EAC9BA,EAAmB,SAAUxb,EAAe,CACxC,IAAI52B,EAAIya,EAAM,KAAO,EAAI,EACrB7jB,GAAK83B,EAAO7L,GAAKV,GAAUkQ,EAAcryB,CAAC,EAAG42B,CAAa,EAAG,CAAC,EAAG5G,GAAUp5B,GAAG,CAAC,EAAGq5B,GAAUr5B,GAAG,CAAC,EAChG6hD,GAAoBt1B,GAAUiP,EAAc7P,GAAsB,CAACyN,GAASC,EAAO,EAAGjwB,CAAC,CAAC,EACxF04C,EAAmBv1B,GAAU+O,EAAW3P,GAAsB,CAACqU,EAAc,CAAC,EAAGA,EAAc,CAAC,CAAC,EAAG52B,CAAC,CAAC,EAC1Gw4C,EAAwB5hB,CAAa,EACrC,IAAI+hB,GAAWl+B,EAAM,SACrBxO,EAAM,WAAW,OAAS8W,GAAM01B,GAAmBE,EAAQ,EAC3D1sC,EAAM,UAAU,OAAS8W,GAAM21B,EAAkBC,EAAQ,EACzD1sC,EAAM,aAAa,OAAS8W,GAAM21B,EAAkBC,EAAQ,EAC5D7C,GAAmBlkB,EAAU3lB,EAAM,WAAY+rC,EAAcC,EAAcpmB,CAAkB,EAC7FikB,GAAmBlkB,EAAU3lB,EAAM,UAAW+rC,EAAcC,EAAcpmB,CAAkB,EAC5FikB,GAAmBlkB,EAAU3lB,EAAM,aAAc+rC,EAAcC,EAAcpmB,CAAkB,CACnG,EACAsgB,EAAoB,SAAUnd,EAAgB,CAC1C,IAAI4B,EAAgB9B,GAAkB,CAClC,CAAC,EAAG,CAAC,EACL,CAAC3oC,EAAO,CAAC,EACT,CAAC,EAAG7D,CAAM,EACV,CAAC6D,EAAO7D,CAAM,CAClB,EAAG0sC,CAAc,EACjBod,EAAiBxb,CAAa,CAClC,CACJ,CACA3qB,EAAM,aAAe+rC,EACrB/rC,EAAM,aAAegsC,EACrBhsC,EAAM,UAAYob,EAClBpb,EAAM,gBAAkB6rC,EACxB7rC,EAAM,WAAa,EACnBA,EAAM,MAAQ,CAAC,EACf0pB,GAAyB/D,EAAU,EAAG,QAAQ,EAC9C,IAAIgnB,EAAY,GACZb,EAAc,GAClB,GAAI9rC,EAAM,WAAaA,EAAM,YAAa,CACtC,IAAI4sC,EAAc5sC,EAAM,YACpB4sC,IAAgB,cAChBd,EAAclG,GAAU,iBAAiBjgB,EAAU,EAAS,EAAS,CAAC,EAAI,IAAIV,GAAY,WAAW,EAAE,UAAU,CAAC,EAAG,CAAC,EAAG,CAAC,CAAE,EAAG,CAAE,eAAgBjlB,EAAM,gBAAiB,oBAAqBA,EAAM,aAAc,CAAC,CAAC,EAE3N,CACK8rC,IACDa,EAAYxiB,GAAU,UAAUxE,EAAU,IAAIV,GAAY,EAAE,UAAU,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC,GAEpFkhB,EAAiB0G,GAAelnB,CAAQ,CAAC,EACzC,IAAIme,EAASC,GAAWpe,EAAU,EAAG,EAAS,EAAS,CAAE,IAAK,SAAUmnB,EAAY,CAC5E9sC,EAAM,WAAa8sC,EAAa,KAAK,GAAK,GAC9C,EAAG,kBAAmB5G,EAAmB,iBAAkBC,CAAiB,EAAG5c,GAAwB5D,EAAU,CAAC,CAAC,EAAG,CAAE,UAAWgnB,EAAW,YAAab,CAAY,CAAC,CAAC,EACzK5zC,EAAS8rC,GAAare,EAAU,gBAAiBme,CAAM,EAC3D,OAAA9jC,EAAM,SAAW9H,IAAW,GAC5BsW,EAAM,eAAiB,CACnB,QAAS,EAAE,SACf,EACOxO,EAAM,SAAW8jC,EAAS,EACrC,EACA,YAAa,SAAUne,EAAU,EAAG,CAChC,IAAIh7B,EAAIM,EAAIG,EACR4U,EAAQ,EAAE,MAAO+sC,EAAc,EAAE,YAAaC,EAAc,EAAE,YAAapB,EAAe,EAAE,aAAc3H,EAAa,EAAE,WAAY7qC,EAAU,EAAE,QAAS6zC,EAAa,EAAE,WAAYrG,EAAgB,EAAE,cACvMiF,EAAkB7rC,EAAM,gBAAiBktC,EAAaltC,EAAM,WAAYmtC,EAAYntC,EAAM,UAAWotC,EAAeptC,EAAM,aAAcqtC,EAAWrtC,EAAM,SAAUwkC,EAAaxkC,EAAM,WAAYniB,EAAOmiB,EAAM,KAAM+rC,EAAe/rC,EAAM,aAAcgsC,EAAehsC,EAAM,aACjR,GAAKqtC,EAGL,CAAA9mB,GAAsBZ,EAAU,EAAG,QAAQ,EAC3C,IAAI2nB,EAAkBhnB,GAAsB,CAAC,EACzClL,EAAYywB,EAAkByB,EAC9B7I,EAAiB9e,EAAS,MAAM,eAChCsf,EAAc,EACdD,EACAuI,EACAxrC,EAAQ,EACR+kB,EACA1iC,EACAopD,EAAgB,EAChBC,EACAC,EACAC,EAAgB,IAAM,KAAK,GAAKnJ,EAChCoJ,EAAwBR,EAAa,WACrC/U,EAAS,GACTwV,EAAc9B,EAAegB,EAC7Be,EAAc9B,EAAegB,EACjC,GAAI,CAAC/I,GAAc,eAAgB,EAAG,CAClC,IAAI0C,EAAa,EAAE,WACnB3B,EAAa2B,EACb7f,EAAO6f,EACP8G,EAAe9G,CACnB,MACSvtC,GAAW6qC,GAChBe,EAAa+E,GAAgB6B,EAAcC,EAAiBqB,CAAU,EACtEpmB,EAAOijB,GAAgB6B,EAAcxwB,EAAW+xB,CAAS,EACzDM,EAAe1D,GAAgB6B,EAAcxwB,EAAWgyB,CAAY,IAGpEpI,EAAaoF,GAAwByD,EAAaC,EAAajC,EAAiBqB,CAAU,EAC1FpmB,EAAOsjB,GAAwByD,EAAaC,EAAa1yB,EAAW+xB,CAAS,EAC7EM,EAAerD,GAAwByD,EAAaC,EAAa1yB,EAAWgyB,CAAY,EACxF/U,EAAS,IAkBb,GAhBAkV,EAAiBI,EAAgB3I,EACjC5gD,EAAWupD,EAAgB7mB,EAC3B4mB,EAAmBE,EAAwBH,EAC3CzJ,GAAare,EAAU,iBAAkBoe,GAAWpe,EAAU,EAAG,CAC7D,eAAgB4nB,EAChB,SAAUnpD,EACV,iBAAkBspD,EAClB,YAAa,SAAUK,GAAc,CACjCjnB,EAAOinB,GAAeJ,EACtB3I,EAAale,EACb2mB,EAAe3mB,CACnB,CACJ,EAAG,EAAI,CAAC,EACRn8B,EAAK83B,EAAO4nB,GAAc1kB,EAAU9nC,EAAMqvD,EAAYlI,EAAY2I,EAAetV,CAAM,EAAG,CAAC,EAAG4M,EAAct6C,EAAG,CAAC,EAAGq6C,EAAar6C,EAAG,CAAC,EAAG4iD,EAAiB5iD,EAAG,CAAC,EAC5JM,EAAKw3B,EAAO4nB,GAAc1kB,EAAU9nC,EAAMsvD,EAAWrmB,EAAM6mB,EAAetV,CAAM,EAAG,CAAC,EAAGt2B,EAAQ9W,EAAG,CAAC,EAAG67B,EAAO77B,EAAG,CAAC,EAAG7G,EAAW6G,EAAG,CAAC,EACnIG,EAAKq3B,EAAO4nB,GAAc1kB,EAAU9nC,EAAMuvD,EAAcK,EAAcG,EAAuBvV,CAAM,EAAG,CAAC,EAAGmV,EAAgBpiD,EAAG,CAAC,EAAGqiD,EAAeriD,EAAG,CAAC,EAAGsiD,EAAmBtiD,EAAG,CAAC,EAC1K,GAACoiD,GAAiB,CAACzrC,GAAS,CAACkjC,GAAe,CAACR,GAAkB,CAACmC,GAGpE,KAAI3c,EAAgBpD,GAAuB7mB,EAAO,UAAU,OAAO5b,EAAU,MAAM,EAAG,UAAU,OAAO0iC,EAAM,MAAM,CAAC,EAChH8f,IACA5mC,EAAM,cAAgBqqB,GAA0B1E,EAAU3lB,EAAM,mBAAoBA,EAAM,eAAgBA,EAAM,YAAaA,CAAK,GAEtI,IAAIguC,EAAc9iB,GAAcvF,EAAUmB,EAAM9mB,CAAK,EACjDsoC,EAAexxB,GAAMF,GAAKq2B,GAAc,CAAC,EAAG,CAAC,EAAGe,CAAW,EAAGhuC,EAAM,iBAAmB,CAAC,EAAG,CAAC,CAAC,EACjGA,EAAM,gBAAkBguC,EACxBhuC,EAAM,aAAe,KACrB,IAAIiuC,GAAYjkB,GAAmBrE,EAAUsE,EAAeqe,EAAclvC,EAAS,CAAC,EAChF80C,GAAiBD,GACjBE,GAAiB,GAAU,CAACN,EAAaC,CAAW,EAAGV,EAAa,mBAAmB,EAAIA,EAAa,UACxGgB,GAAS,OACb,GAAIpuC,EAAM,cAAgB,YAAa,CACnC,IAAIquC,EAAczI,GAAU,YAAYjgB,EAAU,EAAS,EAAS,CAAC,EAAGf,GAAc,EAAGe,EAAS,MAAO,CAAC,EAAE,OAAQ,EAAE,MAAM,EAAG,CAAC,CAACvsB,EAAS,GAAO,WAAW,CAAC,EAAG,CAAE,cAAe,GAAM,eAAgB+0C,EAAe,CAAC,CAAC,EACpNE,IACAD,GAASC,EACTH,GAAiB3F,GAAmB2F,GAAgBG,EAAa,CAAC,EAE1E,CACA,IAAIvK,GAASC,GAAWpe,EAAU,EAAG,EAAS,EAAS,CAAE,MAAO5jB,EAAO,KAAM+kB,EAAM,OAAQ1iC,EAAU,SAAUA,EAAU,WAAY4gD,EAAY,YAAaC,EAAa,aAAcsI,EAAgB,eAAgBA,EAAgB,aAAcE,EAAc,cAAeD,EAAe,eAAgBE,EAAkB,iBAAkBA,EAAkB,QAAS,CAAC,CAACt0C,EAAS,OAAQg1C,EAAO,EAAGH,EAAS,EAAGC,EAAc,CAAC,EAC1a,OAAAlK,GAAare,EAAU,WAAYme,EAAM,EAClCA,IACX,EACA,eAAgB,SAAUne,EAAU,EAAG,CACnC,IAAI3lB,EAAQ,EAAE,MACd,GAAKA,EAAM,SAGX,CAAAA,EAAM,SAAW,GACjB,IAAI8jC,EAASoB,GAAcvf,EAAU,EAAG,CAAC,CAAC,EAC1C,OAAAqe,GAAare,EAAU,cAAeme,CAAM,EACrCA,EACX,EACA,0BAA2BmH,GAC3B,sBAAuB,SAAUtlB,EAAU,EAAG,CAC1C,IAAI3lB,EAAQ,EAAE,MACVrV,EAAKg7B,EAAS,MAAO2oB,EAAa3jD,EAAG,KAAM4jD,EAAY5jD,EAAG,IAAK6jD,EAAqB7jD,EAAG,aACvFm5C,EAAS,KAAK,iBAAiBne,EAAU,CAAC,EAC9C,GAAI,CAACme,EACD,MAAO,GAEXA,EAAO,IAAI9jC,EAAM,gBAAkB2lB,EAAS,QAAQ,EACpD,IAAIvxB,EAAS67B,GAAkBtK,EAAU,KAAM,mBAAoB,EAAG,SAAU7X,EAAO+hB,EAAI,CACvF,IAAIllC,EAAKmjB,EAAM,MAAOxpB,EAAOqG,EAAG,KAAMpG,EAAMoG,EAAG,IAAK+4C,EAAe/4C,EAAG,aAClE8jD,EAAc73B,GAAKE,GAAM,CAACxyB,EAAMC,CAAG,EAAG,CAAC+pD,EAAYC,CAAS,CAAC,EAAGz3B,GAAM4sB,EAAc8K,CAAkB,CAAC,EAC3G,OAAA3e,EAAG,MAAM,iBAAmB4e,EAC5B5e,EAAG,MAAM,YAAc4e,EAChB,EAAS,EAAS,CAAC,EAAG5e,CAAE,EAAG,CAAE,aAAc,CAAE,CAAC,CACzD,CAAC,EACGsV,EAAa,EAAS,EAAS,CAAC,EAAGrB,CAAM,EAAG,CAAE,QAASne,EAAS,MAAM,QAAS,OAAQvxB,CAAO,CAAC,EAC/F8D,EAAS8rC,GAAare,EAAU,qBAAsBwf,CAAU,EACpE,OAAAnlC,EAAM,SAAW9H,IAAW,GACrB8H,EAAM,SAAW8jC,EAAS,EACrC,EACA,iBAAkB,SAAUne,EAAU,EAAG,CACrC,IAAI3lB,EAAQ,EAAE,MACd,GAAKA,EAAM,SAGX,CAAA2pC,GAAWhkB,EAAU,iBAAkB,SAAUge,EAAa,CAC1DK,GAAare,EAAU,sBAAuBoe,GAAWpe,EAAU,EAAG,EAAS,EAAS,CAAC,EAAGge,CAAW,EAAG,CAAE,QAAShe,EAAS,MAAM,OAAQ,CAAC,EAAG,EAAI,CAAC,CACzJ,CAAC,EACD,IAAIme,EAAS,KAAK,YAAYne,EAAU,CAAC,EACzC,GAAKme,EAGL,KAAI1oB,EAAYpb,EAAM,gBAClB4rC,EAAe9H,EAAO,WACtBl/C,EAAMgnD,EAAe,IAAM,KAAK,GAChCx3C,EAAS67B,GAAkBtK,EAAU,KAAM,cAAe,EAAG,SAAU/0B,EAAGi/B,EAAI,CAC9E,IAAI6e,EAAmB7e,EAAG,MAAM,iBAC5BllC,EAAK83B,EAAOoN,EAAG,MAAM,YAAa,CAAC,EAAG8e,EAAchkD,EAAG,CAAC,EAAGikD,EAAcjkD,EAAG,CAAC,EAC7EM,EAAKw3B,EAAO9K,GAAO+2B,EAAkB9pD,EAAMw2B,CAAS,EAAG,CAAC,EAAG3lB,EAAUxK,EAAG,CAAC,EAAGyK,EAAUzK,EAAG,CAAC,EAC1F8W,EAAQ,CAACtM,EAAUk5C,EAAaj5C,EAAUk5C,CAAW,EACzD,OAAA/e,EAAG,MAAM,YAAc,CAACp6B,EAASC,CAAO,EACjC,EAAS,EAAS,CAAC,EAAGm6B,CAAE,EAAG,CAAE,aAAc+b,EAAc,WAAY7pC,CAAM,CAAC,CACvF,CAAC,EACD4jB,EAAS,SAAWvK,EAAY0oB,EAAO,eACvC,IAAIqB,EAAa,EAAS,CAAE,QAASxf,EAAS,MAAM,QAAS,OAAQvxB,EAAQ,IAAK,SAAUhQ,EAAU,CAC9FuhC,EAAS,SAAWvhC,CACxB,EAAG,iBAAkB,SAAUA,EAAU,CACrCuhC,EAAS,SAAWvhC,CACxB,CAAE,EAAG0/C,CAAM,EACf,OAAAE,GAAare,EAAU,gBAAiBwf,CAAU,EAC3CA,GACX,EACA,oBAAqB,SAAUxf,EAAU,EAAG,CACxC,IAAIrtB,EAAS,EAAE,OAAQ0H,EAAQ,EAAE,MACjC,GAAKA,EAAM,SAGX,MAAK,eAAe2lB,EAAU,CAAC,EAC/B,IAAIvxB,EAAS67B,GAAkBtK,EAAU,KAAM,iBAAkB,CAAC,EAC9Dwf,EAAaD,GAAcvf,EAAU,EAAG,CACxC,QAASA,EAAS,MAAM,QACxB,OAAQvxB,CACZ,CAAC,EACD,OAAA4vC,GAAare,EAAU,mBAAoBwf,CAAU,EAC9C7sC,EACX,EA6BA,QAAS,SAAUqtB,EAAU,CACzB,IAAI3lB,EAAQ,CAAC,EACT6uC,EAAa,EACblB,EAAgBhoB,EAAS,YAAY,EACzC,MAAO,CACH,UAAW,GACX,aAAc,UAAY,CACtB,MAAO,CAAE,MAAO3lB,CAAM,CAC1B,EACA,QAAS,SAAUzuB,EAAG,CAClB,MAAI,gBAAiBA,EACjBs9D,GAAct9D,EAAE,YAEX,WAAYA,IACjBs9D,EAAat9D,EAAE,OAASo8D,GAErB,CAAE,MAAO3tC,EAAO,WAAY6uC,CAAW,CAClD,EACA,WAAY,UAAY,CACpB,MAAO,CAAE,MAAO7uC,EAAO,OAAQ,EAAK,CACxC,CACJ,CACJ,CACJ,EAgIA,SAAS8uC,GAAgB9rD,EAAM0tC,EAAO,CAClC,IAAI/lC,EACAywB,EAAYp4B,EAAK,UAAW2W,EAAa3W,EAAK,WAAY4F,EAAO5F,EAAK,KAAM2F,EAAM3F,EAAK,IAAKqgB,EAAOrgB,EAAK,KAAM9R,EAAM8R,EAAK,IACzH0e,EAAe0Z,IAAc,aAC7B2zB,EAAYrtC,EAAe,IAAM,IAErC,OAAOgvB,EAAM,cAAc,MAAO,CAC9B,IAAKx/C,EACL,UAAWyoB,EAAW,KAAK,GAAG,EAC9B,OAAQhP,EAAK,CAAC,EACVA,EAAG+W,EAAe,QAAU,QAAQ,EAAI,GAAG,OAAO9Y,CAAI,EACtD+B,EAAG,UAAY,aAAa,OAAOhC,EAAI,CAAC,EAAG,IAAI,EAAE,OAAOA,EAAI,CAAC,EAAG,aAAa,EAAE,OAAOomD,EAAW,cAAc,EAAE,OAAOA,EAAW,GAAG,EAAE,OAAO1rC,EAAM,GAAG,EACxJ1Y,EACR,CAAC,CACL,CACA,SAASqkD,GAAqBhsD,EAAM0tC,EAAO,CACvC,OAAOoe,GAAgB,EAAS,EAAS,CAAC,EAAG9rD,CAAI,EAAG,CAAE,WAAY,EAAc,CACxEwJ,GAAO,OAAQ,YAAaxJ,EAAK,SAAS,CAC9C,EAAGy/B,EAAOz/B,EAAK,UAAU,EAAG,EAAK,EAAE,OAAO,SAAU0P,EAAW,CAAE,OAAOA,CAAW,CAAC,EAAG,KAAM1P,EAAK,MAAQ,GAAG,OAAOA,EAAK,UAAW,IAAI,EAAG,IAAKA,EAAK,KAAOA,EAAK,SAAS,IAAI,SAAUrC,EAAG,CAAE,MAAO,GAAG,OAAOqO,GAASrO,EAAG,EAAG,EAAG,IAAI,CAAG,CAAC,CAAE,CAAC,EAAG+vC,CAAK,CAC3P,CACA,SAASue,GAAgBtpB,EAAUvK,EAAW2a,EAAWlC,EAAQwF,EAAWzwC,EAAMlG,EAAOguC,EAAO,CAC5F,IAAIrtB,EAAOsiB,EAAS,MAAM,KAC1B,OAAOoQ,EAAU,IAAI,SAAUprC,EAAIzC,EAAG,CAClC,IAAIkL,EAAOzI,EAAG,KAAMhC,EAAMgC,EAAG,IACzBukD,EAAY,CAAC,EAAG,CAAC,EACrB,OAAAA,EAAUxsD,CAAK,EAAImxC,EACnBqb,EAAUxsD,EAAQ,EAAI,CAAC,EAAI,CAAC22C,EAAY1wC,EACjCqmD,GAAqB,CACxB,IAAK,GAAG,OAAO5zB,EAAW,iBAAiB,EAAE,OAAOlzB,CAAC,EACrD,WAAY,CAACsE,GAAO,SAAU,OAAQ4G,CAAI,CAAC,EAC3C,SAAU87C,EACV,UAAWtmD,EACX,KAAMya,EACN,UAAW+X,CACf,EAAGsV,CAAK,CACZ,CAAC,CACL,CACA,SAASye,GAAiBxpB,EAAUvyB,EAAMsiC,EAAY2D,EAAW91C,EAAYmtC,EAAO,CAChF,IAAI/lC,EAAKg7B,EAAS,MAAOtiB,EAAO1Y,EAAG,KAAMykD,EAA0BzkD,EAAG,wBAClE0kD,EAAYj8C,IAAS,aAAe4hC,GAAqBC,GACzDqa,EAAc/rD,EAAW8rD,EAAU,KAAK,EACxCE,EAAYhsD,EAAW8rD,EAAU,GAAG,EACxC,OAAO3Z,EAAW,OAAO,SAAU/qC,EAAI,CACnC,IAAI6kD,EAAO7kD,EAAG,KAAMtK,EAAcsK,EAAG,YACrC,GAAI6kD,EACA,MAAO,GAEX,GAAIJ,GAA2B/uD,EAAa,CAExC,IAAIxC,EAAOwC,EAAY,KACvB,GAAIxC,EAAKwxD,EAAU,KAAK,GAAKC,GAAeC,GAAa1xD,EAAKwxD,EAAU,GAAG,EACvE,MAAO,EAEf,CACA,MAAO,EACX,CAAC,EAAE,IAAI,SAAUvW,EAAW5wC,EAAG,CAC3B,IAAIS,EAAMmwC,EAAU,IAAKlwC,EAAOkwC,EAAU,KAAM95C,EAAU85C,EAAU,QAASpmC,EAAYomC,EAAU,UAC/FoW,EAAY,CACZ,CAAC7V,EAAU,CAAC,EAAI1wC,EAAI,CAAC,EACrB,CAAC0wC,EAAU,CAAC,EAAI1wC,EAAI,CAAC,CACzB,EACA,OAAOqmD,GAAqB,CACxB,IAAK,GAAG,OAAO57C,EAAM,qBAAqB,EAAE,OAAOlL,CAAC,EACpD,WAAYlJ,EAAU,CAACwN,GAAO,MAAM,EAAGkG,CAAS,EAAI,CAAClG,GAAO,QAAQ,EAAGkG,CAAS,EAChF,UAAWU,EACX,SAAU87C,EACV,UAAWtmD,EACX,KAAMya,CACV,EAAGqtB,CAAK,CACZ,CAAC,CACL,CACA,SAAS+e,GAAgB9pB,EAAUvyB,EAAMs8C,EAAUhtD,EAAOitD,EAAKT,EAAWx8C,EAAWg+B,EAAO,CACxF,IAAI/lC,EACAM,EAAK06B,EAAS,MAAOv6B,EAAKH,EAAG,UAAW2kD,EAAYxkD,IAAO,OAAS,EAAIA,EAAIE,EAAKL,EAAG,mBAAoB4kD,EAAqBvkD,IAAO,OAAS,GAAOA,EAAI+Y,EAAKpZ,EAAG,eAAgB6kD,EAAiBzrC,IAAO,OAAS,SAAU1jB,EAAGyS,EAAM,CAEpO,OACWzS,CAGf,EAAI0jB,EAAIhB,EAAOpY,EAAG,KACd8jD,EAAY37C,IAAS,aAAe,IAAM,IAC1CmP,EAAWnP,IAAS,WAAa,SAAW,QAC5C28C,EAAS,KAAK,IAAIJ,CAAG,EACrBK,EAAWH,EACT,WAAWE,EAAO,QAAQH,CAAS,CAAC,EACpC,EACN,OAAOlf,EAAM,cAAc,MAAO,CAAE,IAAK,GAAG,OAAOt9B,EAAM,GAAG,EAAE,OAAOs8C,EAAU,aAAa,EAAE,OAAOhtD,CAAK,EAAG,UAAW8J,GAAO,kBAAmB4G,CAAI,EAAG,OAAQzI,EAAK,CAC1J,KAAM,GAAG,OAAOukD,EAAU,CAAC,EAAG,IAAI,EAClC,IAAK,GAAG,OAAOA,EAAU,CAAC,EAAG,IAAI,CACrC,EACAvkD,EAAG4X,CAAQ,EAAI,GAAG,OAAOwtC,EAAQ,IAAI,EACrCplD,EAAI,EACRqkD,GAAqB,CACjB,UAAW57C,EACX,WAAY,CAAC5G,GAAOkjD,CAAQ,EAAGh9C,CAAS,EACxC,KAAM,OACN,SAAU,CAAC,EAAG,CAAC,EACf,UAAWq9C,EACX,KAAM1sC,CACV,EAAGqtB,CAAK,EACRA,EAAM,cAAc,MAAO,CAAE,UAAWlkC,GAAO,aAAc,KAAK,EAAG,MAAO,CACpE,UAAW,YAAY,OAAOuiD,EAAW,eAAe,EAAE,OAAO1rC,EAAM,GAAG,CAC9E,CAAE,EAAG2sC,EAAW,EAAIF,EAAeE,EAAU58C,CAAI,EAAI,EAAE,CAAC,CACpE,CACA,SAAS68C,GAAyB78C,EAAMsiC,EAAYnyC,EAAY6rD,EAAyB,CACrF,IAAI1sD,EAAQ0Q,IAAS,WAAa,EAAI,EAClC88C,EAAa98C,IAAS,WAAa,EAAI,EACvCyU,EAAQnlB,EAAQsyC,GAAqBC,GACrCqa,EAAc/rD,EAAWskB,EAAM,KAAK,EACpC0nC,EAAYhsD,EAAWskB,EAAM,GAAG,EACpC,OAAOsoC,GAAQza,EAAY,SAAUoD,EAAW,CAC5C,OAAOA,EAAU,IAAIp2C,CAAK,CAC9B,CAAC,EAAE,IAAI,SAAU0tD,EAAgB,CAC7B,IAAIjV,EAAQ,CAAC,EACTC,EAAM,CAAC,EACPiV,EAAQ,CAAC,EACb,OAAAD,EAAe,QAAQ,SAAUtX,EAAW,CACxC,IAAInuC,EAAIM,EACJjM,EAAU85C,EAAU,QACpBj7C,EAAOi7C,EAAU,YAAY,KACjC,GAAIj7C,EAAKgqB,EAAM,GAAG,EAAIynC,EAClBnU,EAAM,KAAKrC,CAAS,UAEfyW,EAAY1xD,EAAKgqB,EAAM,KAAK,EACjCuzB,EAAI,KAAKtC,CAAS,UAEbj7C,EAAKgqB,EAAM,KAAK,GAAKynC,GAAeC,GAAa1xD,EAAKgqB,EAAM,GAAG,GAAKunC,EAAyB,CAClG,IAAIzmD,EAAMmwC,EAAU,IAChBwX,EAAe,CAAE,QAAStxD,EAAS,KAAM,EAAS,EAAS,CAAC,EAAGnB,CAAI,GAAI8M,EAAK,CAAC,EAAGA,EAAGkd,EAAM,GAAG,EAAIhqB,EAAKgqB,EAAM,KAAK,EAAGld,EAAG,CAAE,EACxH4lD,EAAe,CAAE,QAASvxD,EAAS,KAAM,EAAS,EAAS,CAAC,EAAGnB,CAAI,GAAIoN,EAAK,CAAC,EAAGA,EAAG4c,EAAM,KAAK,EAAIhqB,EAAKgqB,EAAM,GAAG,EAAG5c,EAAG,CAAE,EACxHwtB,EAAW,CAAC,EAAG,CAAC,EAChBC,EAAW,CAAC,EAAG,CAAC,EACpBD,EAAS/1B,CAAK,EAAIiG,EAAIjG,CAAK,EAC3B+1B,EAASy3B,CAAU,EAAIvnD,EAAIunD,CAAU,EACrCx3B,EAASh2B,CAAK,EAAIiG,EAAIjG,CAAK,EAC3Bg2B,EAASw3B,CAAU,EAAIvnD,EAAIunD,CAAU,EAAIpX,EAAU,KACnDqC,EAAM,KAAK,CACP,KAAM/nC,EACN,IAAKqlB,EACL,KAAM,EACN,YAAa63B,EACb,UAAW,GACX,iBAAkB,KACtB,CAAC,EACDlV,EAAI,KAAK,CACL,KAAMhoC,EACN,IAAKslB,EACL,KAAM,EACN,YAAa63B,EACb,UAAW,GACX,iBAAkB,OACtB,CAAC,CAEL,CACJ,CAAC,EACDpV,EAAM,KAAK,SAAU3pD,EAAGC,EAAG,CACvB,OAAOA,EAAE,IAAIy+D,CAAU,EAAI1+D,EAAE,IAAI0+D,CAAU,CAC/C,CAAC,EACD9U,EAAI,KAAK,SAAU5pD,EAAGC,EAAG,CACrB,OAAOD,EAAE,IAAI0+D,CAAU,EAAIz+D,EAAE,IAAIy+D,CAAU,CAC/C,CAAC,EACM,CACH,MAAOE,EACP,MAAOjV,EACP,IAAKC,EACL,MAAOiV,CACX,CACJ,CAAC,CACL,CACA,SAASG,GAAuB7qB,EAAU+P,EAAY2D,EAAW91C,EAAYmtC,EAAO,CAChF,IAAI0e,EAA0BzpB,EAAS,MAAM,wBACzC8qB,EAAW,CAAC,EAChB,OAAC,WAAY,YAAY,EAAE,QAAQ,SAAUr9C,EAAM,CAC/C,IAAIg9C,EAAiB1a,EAAW,OAAO,SAAUoD,EAAW,CAAE,OAAOA,EAAU,OAAS1lC,CAAM,CAAC,EAC3F1Q,EAAQ0Q,IAAS,WAAa,EAAI,EAClC88C,EAAaxtD,EAAQ,EAAI,EACzBguD,EAAST,GAAyB78C,EAAMg9C,EAAgB7sD,EAAY6rD,CAAuB,EAC3FC,EAAY3sD,EAAQuyC,GAAuBD,GAC3C2b,EAAYjuD,EAAQsyC,GAAqBC,GACzCqa,EAAc/rD,EAAW8rD,EAAU,KAAK,EACxCE,EAAYhsD,EAAW8rD,EAAU,GAAG,EACxCqB,EAAO,QAAQ,SAAU/lD,EAAI,CACzB,IAAIkF,EAAQlF,EAAG,MAAOwwC,EAAQxwC,EAAG,MAAOywC,EAAMzwC,EAAG,IAAK0lD,EAAQ1lD,EAAG,MAC7DimD,EAAUvX,EAAU6W,CAAU,EAAIrgD,EAAM,CAAC,EAAE,IAAIqgD,CAAU,EAAI3sD,EAAWotD,EAAU,KAAK,EACvFE,EAAWttD,EACf43C,EAAM,QAAQ,SAAUrC,EAAW,CAC/B,IAAIgY,EAAWhY,EAAU,YAAY,KACjClwC,EAAOioD,EAASxB,EAAU,KAAK,EAAIyB,EAASzB,EAAU,GAAG,EAC7D,GAAIzmD,EAAO,EAAG,CACV,IAAIsmD,EAAY,CAAC,EAAG,CAAC,EACrBA,EAAUxsD,CAAK,EAAI22C,EAAU32C,CAAK,EAAImuD,EAASxB,EAAU,KAAK,EAAIC,EAAc1mD,EAChFsmD,EAAUgB,CAAU,EAAIU,EACxBH,EAAS,KAAKhB,GAAgB9pB,EAAUvyB,EAAM,SAAUq9C,EAAS,OAAQ7nD,EAAMsmD,EAAWpW,EAAU,UAAWpI,CAAK,CAAC,CACzH,CACAmgB,EAAWC,CACf,CAAC,EACDD,EAAWttD,EACX63C,EAAI,QAAQ,SAAUtC,EAAW,CAC7B,IAAIgY,EAAWhY,EAAU,YAAY,KACjClwC,EAAOkoD,EAASzB,EAAU,KAAK,EAAIwB,EAASxB,EAAU,GAAG,EAC7D,GAAIzmD,EAAO,EAAG,CACV,IAAIsmD,EAAY,CAAC,EAAG,CAAC,EACrBA,EAAUxsD,CAAK,EAAI22C,EAAU32C,CAAK,EAAImuD,EAASxB,EAAU,GAAG,EAAIC,EAChEJ,EAAUgB,CAAU,EAAIU,EACxBH,EAAS,KAAKhB,GAAgB9pB,EAAUvyB,EAAM,SAAUq9C,EAAS,OAAQ7nD,EAAMsmD,EAAWpW,EAAU,UAAWpI,CAAK,CAAC,CACzH,CACAmgB,EAAWC,CACf,CAAC,EACDT,EAAM,QAAQ,SAAUvX,EAAW,CAC/B,IAAIgY,EAAWhY,EAAU,YAAY,KACjCiY,EAAQzB,EAAcwB,EAASzB,EAAU,KAAK,EAC9C2B,EAAQF,EAASzB,EAAU,GAAG,EAAIE,EAClC0B,EAAa,CAAC,EAAG,CAAC,EAClBC,EAAa,CAAC,EAAG,CAAC,EACtBD,EAAWvuD,CAAK,EAAI22C,EAAU32C,CAAK,EAAIquD,EACvCE,EAAWf,CAAU,EAAIU,EACzBM,EAAWxuD,CAAK,EAAI22C,EAAU32C,CAAK,EAAI6sD,EAAYD,EACnD4B,EAAWhB,CAAU,EAAIU,EACzBH,EAAS,KAAKhB,GAAgB9pB,EAAUvyB,EAAM,SAAUq9C,EAAS,OAAQM,EAAOE,EAAYnY,EAAU,UAAWpI,CAAK,CAAC,EACvH+f,EAAS,KAAKhB,GAAgB9pB,EAAUvyB,EAAM,SAAUq9C,EAAS,OAAQO,EAAOE,EAAYpY,EAAU,UAAWpI,CAAK,CAAC,CAC3H,CAAC,CACL,CAAC,CACL,CAAC,EACM+f,CACX,CACA,SAASU,GAAoBxrB,EAAU+P,EAAY2D,EAAW91C,EAAYmtC,EAAO,CAC7E,IAAI+f,EAAW,CAAC,EAChB,OAAC,aAAc,UAAU,EAAE,QAAQ,SAAUr9C,EAAM,CAC/C,IAAIg9C,EAAiB1a,EAAW,OAAO,SAAUoD,EAAW,CAAE,OAAOA,EAAU,OAAS1lC,CAAM,CAAC,EAAE,MAAM,EAAG,CAAC,EACvG1Q,EAAQ0Q,IAAS,WAAa,EAAI,EAClC88C,EAAaxtD,EAAQ,EAAI,EACzB2sD,EAAY3sD,EAAQuyC,GAAuBD,GAC3C2b,EAAYjuD,EAAQsyC,GAAqBC,GACzCqa,EAAc/rD,EAAW8rD,EAAU,KAAK,EACxCE,EAAYhsD,EAAW8rD,EAAU,GAAG,EACpC+B,EAAkB7tD,EAAWotD,EAAU,KAAK,EAC5CU,EAAgB9tD,EAAWotD,EAAU,GAAG,EAC5CP,EAAe,QAAQ,SAAUzlD,EAAI,CACjC,IAAIglD,EAAMhlD,EAAG,IAAK2mD,EAAW3mD,EAAG,SAC5B4mD,EAAe,KAAK,IAAI,MAAM,KAAM,EAAc,CAACH,CAAe,EAAG3uB,EAAO6uB,EAAS,IAAI,SAAU3mD,EAAI,CACvG,IAAI9M,EAAO8M,EAAG,KACd,OAAO9M,EAAK8yD,EAAU,KAAK,CAC/B,CAAC,CAAC,EAAG,EAAK,CAAC,EACPa,EAAa,KAAK,IAAI,MAAM,KAAM,EAAc,CAACH,CAAa,EAAG5uB,EAAO6uB,EAAS,IAAI,SAAU3mD,EAAI,CACnG,IAAI9M,EAAO8M,EAAG,KACd,OAAO9M,EAAK8yD,EAAU,GAAG,CAC7B,CAAC,CAAC,EAAG,EAAK,CAAC,EACPc,GAAiBF,EAAeC,GAAc,EAC9CD,IAAiBC,GAAcC,KAAmBL,EAAkBC,GAAiB,GAGzFC,EAAS,QAAQ,SAAU3mD,EAAI,CAC3B,IAAI9M,EAAO8M,EAAG,KAAM+H,EAAY/H,EAAG,UAC/BukD,EAAY,CAAC7V,EAAU,CAAC,EAAGA,EAAU,CAAC,CAAC,EAC3C,GAAIx7C,EAAKwxD,EAAU,GAAG,EAAIC,EACtBJ,EAAUxsD,CAAK,GAAK7E,EAAKwxD,EAAU,GAAG,EAAIC,UAErCC,EAAY1xD,EAAKwxD,EAAU,KAAK,EACrCH,EAAUxsD,CAAK,GAAK7E,EAAKwxD,EAAU,KAAK,EAAIC,EAAcK,MAG1D,QAEJT,EAAUgB,CAAU,GAAKuB,EAAgBL,EACzCX,EAAS,KAAKhB,GAAgB9pB,EAAUjjC,EAAQ,WAAa,aAAc,MAAO+tD,EAAS,OAAQd,EAAKT,EAAWx8C,EAAWg+B,CAAK,CAAC,CACxI,CAAC,CACL,CAAC,CACL,CAAC,EACM+f,CACX,CAEA,SAASiB,GAAmB/rB,EAAU,CAClC,IAAIh7B,EAAIM,EACJujB,EAAQmX,EAAS,MACjBgsB,EAAsBnjC,EAAM,oBAAqB4d,EAAW5d,EAAM,SAClEojC,EAAWD,EAAoB,SAAU7uC,EAAkB6uC,EAAoB,aAAc9uC,EAAiB8uC,EAAoB,YAAaE,EAAwBF,EAAoB,aAAcG,EAAuBH,EAAoB,YAAajf,EAAaif,EAAoB,WAAYhf,EAAYgf,EAAoB,UAC9UvmD,EAAKu6B,EAAS,MAAOr6B,EAAKF,EAAG,QAAS2mD,EAAUzmD,IAAO,OAAS,GAAOA,EAAIgqC,EAAqBlqC,EAAG,mBAAoBmqC,EAAuBnqC,EAAG,qBAAsBiZ,EAAKjZ,EAAG,cAAe6tC,EAAgB50B,IAAO,OAAS,EAAIA,EAAIC,EAAKlZ,EAAG,gCAAiC4mD,EAAkC1tC,IAAO,OAAS,IAAWA,EAAI2tC,EAA0B7mD,EAAG,wBAC7WoZ,EAAKg8B,GAAQjV,GAAwB5F,EAAS,KAAK,CAAC,EAAGphC,EAAMigB,EAAG,IAAKlgB,EAAOkgB,EAAG,KAAMwa,EAASxa,EAAG,OAAQua,EAAQva,EAAG,MACpHjhB,EAAa,CAAE,IAAKgB,EAAK,KAAMD,EAAM,OAAQ06B,EAAQ,MAAOD,EAAO,QAASz6B,EAAOy6B,GAAS,EAAG,QAASx6B,EAAMy6B,GAAU,CAAE,EAC1HkzB,EAAoBC,GAAqBxsB,CAAQ,EACjDysB,EAAkB,EAAc,CAAC,EAAG3vB,EAAOyvB,CAAiB,EAAG,EAAK,EACpE/a,IAA2BlsC,GAAMN,EAAK6jB,EAAM,qBAAuB,MAAQ7jB,IAAO,OAAS,OAASA,EAAG,aAAe,MAAQM,IAAO,OAASA,EAAK,CAAC,EAAG,CAAC,GAAG,IAAI,SAAU8I,EAAG,CAAE,OAAOA,EAAIklC,CAAe,CAAC,EACzM8Y,GACAK,EAAgB,KAAK,MAAMA,EAAiB,EAAc,CAAC,EAAG3vB,EAAO4vB,GAAiB1sB,EAAUpiC,EAAY4zC,CAAsB,CAAC,EAAG,EAAK,CAAC,EAEhJ,IAAIoI,EAAa,EAAS,CAAC,EAAI/wB,EAAM,YAAc,CAC/C,KAAM,EACN,IAAK,EACL,OAAQ,EACR,MAAO,CACX,CAAE,EAEF,GADA4jC,EAAgB,KAAK,MAAMA,EAAiB,EAAc,CAAC,EAAG3vB,EAAO6vB,GAAkB3sB,EAAUisB,EAAW/uC,EAAiBivC,EAAsBF,EAAW9uC,EAAkB+uC,EAAuBnf,EAAYC,EAAW4M,EAAY0S,CAAuB,CAAC,EAAG,EAAK,CAAC,EACvQ7lB,EAAU,CACV,IAAIwW,EAAS+O,EAAoB,KAAM9O,EAAQ8O,EAAoB,IACnEpS,EAAW,MAAQqD,EACnBrD,EAAW,KAAOsD,EAClBtD,EAAW,OAASqD,EACpBrD,EAAW,QAAUsD,CACzB,CACA,OAAAuP,EAAgB,KAAK,MAAMA,EAAiB,EAAc,CAAC,EAAG3vB,EAAO8vB,GAAqBhd,GAAwB,GAAOD,GAAsB,GAAOsc,EAAW/uC,EAAiBivC,EAAsBF,EAAW9uC,EAAkB+uC,EAAuBnf,EAAYC,EAAW4M,CAAU,CAAC,EAAG,EAAK,CAAC,EACvS6S,EAAkBA,EAAgB,OAAO,SAAUznD,EAAI,CACnD,IAAI3L,EAAU2L,EAAG,QAAStK,EAAcsK,EAAG,YAAayI,EAAOzI,EAAG,KAClE,GAAI,CAAC3L,GAAW,CAACqB,EACb,MAAO,GAEX,IAAIxC,EAAOwC,EAAY,KACvB,OAAOmyD,GAAkBjvD,EAAY1F,EAAMuV,EAAM4+C,CAA+B,CACpF,CAAC,EACMI,CACX,CACA,SAASC,GAAiB1sB,EAAUpiC,EAAYkvD,EAAgB,CAC5D,IAAI9nD,EAAKg7B,EAAS,MAAO16B,EAAKN,EAAG,gCAAiCqnD,EAAkC/mD,IAAO,OAAS,IAAWA,EAAIG,EAAKT,EAAG,0BAA2B+nD,EAA4BtnD,IAAO,OAAS,IAAWA,EACzNunD,EAAehtB,EAAS,MAAM,aAC9BitB,EAAgB,CAAC,EACrB,OACI,CAAC,WAAY5d,GAAoBC,EAAoB,EACrD,CAAC,aAAcA,GAAsBD,EAAkB,CAC3D,EAAE,QAAQ,SAAUrqC,EAAI,CACpB,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGyI,EAAOnI,EAAG,CAAC,EAAGokD,EAAYpkD,EAAG,CAAC,EAAG0lD,EAAY1lD,EAAG,CAAC,EACrEqkD,EAAc/rD,EAAW8rD,EAAU,KAAK,EACxCE,EAAYhsD,EAAW8rD,EAAU,GAAG,EACpCwD,EAAetvD,EAAW8rD,EAAU,MAAM,EAC1CyD,EAAevvD,EAAWotD,EAAU,KAAK,EACzCoC,EAAaxvD,EAAWotD,EAAU,GAAG,EAErCqC,EAAmB,CACnB,KAAMP,EAAe,CAAC,EACtB,IAAKA,EAAe,CAAC,CACzB,EACA,SAASQ,EAAQ5yD,EAAa,CAC1B,IAAIxC,EAAOwC,EAAY,KACnB44C,EAAgB+Z,EAAiB3D,EAAU,KAAK,EACpD,OAAIxxD,EAAKwxD,EAAU,GAAG,EAAIC,EAAcrW,EAC7BqW,EAAczxD,EAAKwxD,EAAU,GAAG,EAElCE,EAAYtW,EAAgBp7C,EAAKwxD,EAAU,KAAK,EAC9CxxD,EAAKwxD,EAAU,KAAK,EAAIE,EAGxB,EAEf,CACA,IAAI2D,EAAmBP,EAAa,OAAO,SAAUtyD,EAAa,CAC9D,IAAIxC,EAAOwC,EAAY,KACvB,OAAIxC,EAAK8yD,EAAU,KAAK,EAAIoC,GAAcl1D,EAAK8yD,EAAU,GAAG,EAAImC,EACrD,GAEJG,EAAQ5yD,CAAW,EAAI,CAClC,CAAC,EAAE,KAAK,SAAU7O,EAAGC,EAAG,CACpB,OAAOwhE,EAAQzhE,CAAC,EAAIyhE,EAAQxhE,CAAC,CACjC,CAAC,EACGi/D,EAAS,CAAC,EACdwC,EAAiB,QAAQ,SAAUC,EAAW,CAC1CD,EAAiB,QAAQ,SAAUE,EAAW,CAC1C,GAAID,IAAcC,EAGlB,KAAIC,EAAQF,EAAU,KAClBG,EAAQF,EAAU,KAClBG,EAAaF,EAAM1C,EAAU,KAAK,EAClC6C,EAAWH,EAAM1C,EAAU,GAAG,EAC9B8C,EAAaH,EAAM3C,EAAU,KAAK,EAClC+C,EAAWJ,EAAM3C,EAAU,GAAG,EAC9B4C,EAAaG,GAAYD,EAAaD,GAG1C9C,EAAO,KAAK,CAACyC,EAAWC,CAAS,CAAC,EACtC,CAAC,CACL,CAAC,EACD1C,EAAO,QAAQ,SAAU/lD,EAAI,CACzB,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGwoD,EAAYloD,EAAG,CAAC,EAAGmoD,EAAYnoD,EAAG,CAAC,EACvDooD,EAAQF,EAAU,KAClBG,EAAQF,EAAU,KAClBG,EAAaF,EAAMhE,EAAU,KAAK,EAClCmE,EAAWH,EAAMhE,EAAU,GAAG,EAC9BoE,EAAaH,EAAMjE,EAAU,KAAK,EAClCqE,EAAWJ,EAAMjE,EAAU,GAAG,EAC9BpW,EAAgB+Z,EAAiB3D,EAAU,KAAK,EAChDM,EAAM,EACNhnD,EAAM,EACN8mC,EAAU,GACVkkB,EAAW,GACXznB,EAAQ,GACZ,GAAIsnB,GAAYlE,GAAeC,GAAakE,GAKxC,GAHAE,EAAW,GACXhE,GAAQ8D,EAAaD,GAAajE,EAAYD,IAAgB,EAC9D3mD,EAAM6qD,EAAW7D,GAAOJ,EAAYD,GAAe,EAC/C,EAAI3mD,EAAMkqD,CAAY,EAAI5Z,EAC1B,eAGCua,EAAWC,GAAcC,EAAWpE,EAAcrW,GAKvD,GAHAxJ,EAAU,GACVkgB,EAAM8D,EAAaD,EACnB7qD,EAAM+qD,EAAW/D,EACb,EAAIhnD,EAAM2mD,CAAW,EAAIrW,EACzB,eAGCua,EAAWC,GAAclE,EAAYtW,EAAgBsa,GAK1D,GAHArnB,EAAQ,GACRyjB,EAAM8D,EAAaD,EACnB7qD,EAAM4qD,EAAa5D,EACf,EAAIhnD,EAAM4mD,CAAS,EAAItW,EACvB,WAIJ,QAEC0W,GAGA6C,GAAkBjvD,EAAY+vD,EAAOlgD,EAAM4+C,CAA+B,IAG3ErC,EAAM+C,GAGVE,EAAc,KAAK,CACf,KAAMx/C,EACN,IAAKA,IAAS,WAAa,CAACzK,EAAK,CAAC,EAAI,CAAC,EAAGA,CAAG,EAC7C,QAASyqD,EAAU,QACnB,KAAM,EACN,UAAWA,EAAU,UACrB,QAAS3jB,EACT,SAAUkkB,EACV,MAAOznB,EACP,IAAKyjB,EACL,KAAM,GACN,SAAU,CAACwD,EAAWC,CAAS,EAC/B,UAAW,GACX,iBAAkB,EACtB,CAAC,EACL,CAAC,CACL,CAAC,EACMR,CACX,CACA,SAASgB,GAAyBjuB,EAAU+M,EAAYC,EAAW4M,EAAY,CAC3E,IAAI50C,EAAIM,EACJnU,EAAQ6uC,EAAS,MACjBnX,EAAQmX,EAAS,MACjBkuB,EAAc/8D,EAAM,YACpBsU,EAAKtU,EAAM,cAAe0+C,EAAgBpqC,IAAO,OAAS,EAAIA,EAAIE,EAAKxU,EAAM,eAAgB2+C,EAAiBnqC,IAAO,OAAS,EAAIA,EAClIwoD,EAAiBtlC,EAAM,eACvBulC,EAAeD,MAAqBnpD,EAAKmpD,EAAe,aAAe,MAAQnpD,IAAO,OAAS,OAASA,EAAG,CAAC,MAAQM,EAAK6oD,EAAe,aAAe,MAAQ7oD,IAAO,OAAS,OAASA,EAAG,CAAC,IAC5LykC,EAAY/J,EAAS,UAEzB,GAAIkuB,GACGnkB,GACAqkB,IACCve,GAAiBC,GAAiB,CACtC,GAAIjnB,EAAM,kBACN,OAEJA,EAAM,kBAAoB,CACtB,UAAW,CAAC,EAAG,CAAC,EAChB,OAAQ,CAAC,EAAG,CAAC,CACjB,EACA,IAAIwlC,EAASruB,EAAS,QAAQ,EAC1BsuB,EAAaD,EAAO,SACpB54B,EAAY04B,EAAe,UAC/B,GAAIG,EAAY,CACZ,IAAI/7C,EAASkjB,EAAU,IAAI,SAAU0I,EAAK57B,EAAG,CACzC,IAAIyC,EAAKzC,IAAM,EAAI,CACf,SAAUstC,EACV,QAAS,OACT,SAAU,QACV,aAAc+J,EAAW,KAAO7M,CACpC,EAAI,CACA,SAAU+C,EACV,QAAS,MACT,SAAU,SACV,aAAc8J,EAAW,IAAM5M,CACnC,EAAGqd,EAAWrlD,EAAG,SAAUupD,EAAUvpD,EAAG,QAAS4X,EAAW5X,EAAG,SAAUwpD,EAAexpD,EAAG,aAC3F,GAAI,CAACqlD,EACD,MAAO,CACH,IAAKlsB,EACL,SAAU,EACV,SAAUksB,EACV,WAAY,CAChB,EAEJ,IAAIoE,EAAWJ,EAAOzxC,CAAQ,EAC1B8xC,EAAUL,EAAOE,CAAO,EAExBI,EAAanjD,GAAO8iD,EAAW,IAAI,SAAUnmC,EAAO,CACpD,MAAO,CACFA,EAAMomC,CAAO,EAAIG,EACjBvmC,EAAMvL,CAAQ,EACd6xC,EAAWtmC,EAAMvL,CAAQ,EAAIuL,EAAMomC,CAAO,EAAIG,CACnD,CACJ,CAAC,CAAC,EAAE,OAAO,SAAU1zD,EAAG,CAAE,OAAOA,CAAG,CAAC,EAAE,KAAK,SAAUnP,EAAGC,EAAG,CACxD,OAAOD,EAAIC,CACf,CAAC,EACG8iE,EAAiBD,EAAW,CAAC,EAC7BE,EAAiBF,EAAW,IAAI,SAAU1rD,EAAM,CAAE,OAAOoG,GAASpG,EAAO2rD,EAAgB,EAAG,EAAIvE,CAAU,CAAC,EAC3Gj8C,EAAI,EACJ0gD,EAAYzlD,GAASolD,EAAWG,EAAgB,EAAG,EACvD,IAAKxgD,EAAI,EAAGA,GAAK,IACT,CAAAygD,EAAe,MAAM,SAAUE,EAAW,CAC1C,OAAOA,EAAY3gD,EAAI,IAAM,CACjC,CAAC,EAHgB,EAAEA,EACnB,CASJ,IAAIhF,GAAS,CAAC+0B,EAAM,GAAK,EACrB4J,EAAYvkC,GAAIkrD,EAAUF,EAAcE,EAAUF,EAAeC,EAAUrlD,EAAO,EAAIA,CAAK,EAC/F,MAAO,CACH,SAAU0lD,EAAY1gD,EACtB,IAAK+vB,EACL,SAAUksB,EACV,WAAY,KAAK,MAAMtiB,EAAYsiB,CAAQ,CAC/C,CACJ,CAAC,EACGxY,EAAYt/B,EAAO,IAAI,SAAUtG,EAAG,CAAE,OAAOA,EAAE,UAAY,CAAG,CAAC,EACnE4c,EAAM,kBAAkB,UAAYgpB,EACpChpB,EAAM,kBAAkB,OAAStW,EAAO,IAAI,SAAUtG,EAAG,CAAE,OAAOA,EAAE,UAAY,CAAC,EACjFsG,EAAO,QAAQ,SAAUtG,EAAG1J,EAAG,CACvB0J,EAAE,QACV,CAAC,CACL,CACJ,MAEI4c,EAAM,kBAAoB,IAElC,CACA,SAAS8jC,GAAkB3sB,EAAU9iB,EAAgBC,EAAiB4vB,EAAYC,EAAW4M,EAAY0S,EAAyB,CAC1Hvf,IAAe,SAAUA,EAAa,GACtCC,IAAc,SAAUA,EAAY,GACxC,IAAI77C,EAAQ6uC,EAAS,MACjBnX,EAAQmX,EAAS,MACjBh7B,EAAK7T,EAAM,cAAe0+C,EAAgB7qC,IAAO,OAAS,EAAIA,EAAIM,EAAKnU,EAAM,eAAgB2+C,EAAiBxqC,IAAO,OAAS,EAAIA,EAClIyqC,EAAa,CAAC,EACd9C,EAAiB2M,EAAW,KAAM1M,EAAgB0M,EAAW,IAC7DoV,EAAc,CAAC,EAAG,CAAC,EACvBf,GAAyBjuB,EAAU+M,EAAYC,EAAW4M,CAAU,EACpE,IAAIqV,EAAoBpmC,EAAM,kBAC1BqmC,EAAuBrf,EACvBsf,EAAwBrf,EAM5B,GALImf,IACApf,GAAiBof,EAAkB,UAAU,CAAC,GAAK,EACnDnf,GAAkBmf,EAAkB,UAAU,CAAC,GAAK,EACpDD,EAAcC,EAAkB,QAEhCnf,EAAgB,CAehB,QAdIsf,EAAgB,SAAUpsD,EAAK,CAC/B+sC,EAAW,KAAK,CACZ,KAAM,aACN,IAAK,CACD9C,EACA5jC,GAAS2lD,EAAY,CAAC,EAAIG,EAAwBnsD,EAAMgqC,EAAYE,EAAe,EAAG,CAC1F,EACA,UAAWrmC,GAAO,gBAAgB,EAClC,KAAMqW,EACN,KAAM,CAACovC,EACP,UAAW,GACX,KAAM,EACV,CAAC,CACL,EACStpD,EAAM,EAAGA,GAAOma,EAAkB,EAAGna,GAAO8sC,EACjDsf,EAAcpsD,CAAG,EAErB,QAASA,EAAM,CAAC8sC,EAAgB9sC,GAAO,CAACma,EAAiBna,GAAO8sC,EAC5Dsf,EAAcpsD,CAAG,CAEzB,CACA,GAAI6sC,EAAe,CAef,QAdIuf,EAAgB,SAAUpsD,EAAK,CAC/B+sC,EAAW,KAAK,CACZ,KAAM,WACN,IAAK,CACD1mC,GAAS2lD,EAAY,CAAC,EAAIE,EAAuBlsD,EAAM+pC,EAAaE,EAAgB,EAAG,EACvFC,CACJ,EACA,UAAWrmC,GAAO,gBAAgB,EAClC,KAAMsW,EACN,KAAM,CAACmvC,EACP,UAAW,GACX,KAAM,EACV,CAAC,CACL,EACStpD,EAAM,EAAGA,GAAOka,EAAiB,EAAGla,GAAO6sC,EAChDuf,EAAcpsD,CAAG,EAErB,QAASA,EAAM,CAAC6sC,EAAe7sC,GAAO,CAACka,EAAgBla,GAAO6sC,EAC1Duf,EAAcpsD,CAAG,CAEzB,CACA,OAAO+sC,CACX,CACA,SAAS8c,GAAkBa,EAAOC,EAAOlgD,EAAMwQ,EAAU,CACrD,OAAIxQ,IAAS,aACF,EAAIigD,EAAM,MAAQC,EAAM,IAAI,GAAK1vC,GACjC,EAAIyvC,EAAM,KAAOC,EAAM,KAAK,GAAK1vC,GACjCyvC,EAAM,MAAQC,EAAM,OAASA,EAAM,MAAQD,EAAM,MAEnDjgD,IAAS,WACP,EAAIigD,EAAM,OAASC,EAAM,GAAG,GAAK1vC,GACjC,EAAIyvC,EAAM,IAAMC,EAAM,MAAM,GAAK1vC,GACjCyvC,EAAM,KAAOC,EAAM,QAAUA,EAAM,KAAOD,EAAM,OAEpD,EACX,CACA,SAASlB,GAAqBxsB,EAAU,CACpC,IAAInX,EAAQmX,EAAS,MACjBh7B,EAAKg7B,EAAS,MAAM,kBAAmBusB,EAAoBvnD,IAAO,OAAS,CAAC,EAAIA,EACpF,GAAI,CAACunD,EAAkB,OACnB,OAAA1jC,EAAM,aAAe,CAAC,EACf,CAAC,EAEZ,IAAIwmC,GAAcxmC,EAAM,cAAgB,CAAC,GAAG,OAAO,SAAUymC,EAAU,CAAE,MAAO,CAACA,EAAS,OAAS,CAAC,EAChGC,EAAwBhD,EAAkB,IAAI,SAAU/+C,EAAI,CAC5D,OAAI1J,GAAS0J,CAAE,GAAK,YAAaA,EACtB,EAAS,EAAS,CAAC,EAAGA,CAAE,EAAG,CAAE,QAASgiD,GAAahiD,EAAG,QAAS,EAAI,CAAE,CAAC,EAE1E,CACH,QAASgiD,GAAahiD,EAAI,EAAI,CAClC,CACJ,CAAC,EAAE,OAAO,SAAU3iB,EAAO,CACvB,OAAOA,EAAM,OACjB,CAAC,EACGya,EAAK,GAAK+pD,EAAW,IAAI,SAAUr0D,EAAG,CAAE,OAAOA,EAAE,OAAS,CAAC,EAAGu0D,EAAsB,IAAI,SAAUv0D,EAAG,CAAE,OAAOA,EAAE,OAAS,CAAC,CAAC,EAAG2pB,EAAarf,EAAG,WAAYmf,EAAQnf,EAAG,MACrKmqD,EAAa,CAAC,EAClB9qC,EAAW,QAAQ,SAAU3f,EAAI,CAC7B,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGue,EAAYje,EAAG,CAAC,EAAGP,EAAYO,EAAG,CAAC,EAC3DmqD,EAAW1qD,CAAS,EAAIsqD,EAAW9rC,CAAS,CAChD,CAAC,EACDmsC,GAAoB1vB,EAAUvb,EAAM,IAAI,SAAU1nB,EAAO,CAAE,OAAOwyD,EAAsBxyD,CAAK,CAAG,CAAC,CAAC,EAAE,IAAI,SAAU7E,EAAMqK,EAAG,CACvHktD,EAAWhrC,EAAMliB,CAAC,CAAC,EAAIrK,CAC3B,CAAC,EACD2wB,EAAM,aAAe4mC,EACrB,IAAIE,EAAwB1f,GAAkBjQ,EAAS,MAAM,qBAAqB,EAC9EyqB,EAAiB,CAAC,EACtB,OAAAgF,EAAW,QAAQ,SAAUH,EAAU,CACnC,IAAIj2D,EAAUi2D,EAAS,QAAStqD,EAAKsqD,EAAS,IAAKM,EAAW5qD,IAAO,OAAS2qD,EAAsB,IAAM3qD,EAAIM,EAAKgqD,EAAS,KAAMO,EAAYvqD,IAAO,OAASqqD,EAAsB,KAAOrqD,EAAIG,EAAK6pD,EAAS,MAAOQ,EAAarqD,IAAO,OAASkqD,EAAsB,MAAQlqD,EAAIE,EAAK2pD,EAAS,OAAQS,EAAcpqD,IAAO,OAASgqD,EAAsB,OAAShqD,EAAI+Y,EAAK4wC,EAAS,OAAQU,EAActxC,IAAO,OAASixC,EAAsB,OAASjxC,EAAIC,EAAK2wC,EAAS,OAAQW,EAActxC,IAAO,OAASgxC,EAAsB,OAAShxC,EAAI5R,EAAYuiD,EAAS,UAAWp3D,EAAOo3D,EAAS,KACpkBzwC,EAAK0xB,GAAwB,CAC7B,IAAKqf,EACL,MAAOE,EACP,KAAMD,EACN,OAAQE,EACR,OAAQC,EACR,OAAQC,CACZ,EAAG/3D,CAAI,EAAGU,EAAaimB,EAAG,WAAYlmB,EAAWkmB,EAAG,SAAU2xB,EAAkB3xB,EAAG,gBAAiB4xB,EAAgB5xB,EAAG,cACnHqxC,EAAUh4D,EAAK,IACfi4D,EAAWj4D,EAAK,KAChBqC,EAAQrC,EAAK,MAAQi4D,EACrBz5D,EAASwB,EAAK,OAASg4D,EACvBE,EAAQ,CAAC71D,EAAO7D,CAAM,EAC1BiC,EAAS,QAAQ,SAAUqK,EAAKT,EAAG,CAC/BkoD,EAAe,KAAK,CAChB,KAAM,WACN,QAASpxD,EACT,IAAK,CACDgQ,GAASrG,EAAK,EAAG,EACjBktD,CACJ,EAAG,KAAMx5D,EACT,MAAO05D,EACP,UAAWrjD,EACX,YAAauiD,EACb,iBAAkBlgB,GAAoBqB,EAAcluC,CAAC,CAAC,GAAKkuC,EAAcluC,CAAC,EAC1E,UAAW,EACf,CAAC,CACL,CAAC,EACD3J,EAAW,QAAQ,SAAUoK,EAAKT,EAAG,CACjCkoD,EAAe,KAAK,CAChB,KAAM,aACN,QAASpxD,EACT,IAAK,CACD82D,EACA9mD,GAASrG,EAAK,EAAG,CACrB,EACA,KAAMzI,EACN,MAAO61D,EACP,UAAWrjD,EACX,YAAauiD,EACb,iBAAkBlgB,GAAoBoB,EAAgBjuC,CAAC,CAAC,GAAKiuC,EAAgBjuC,CAAC,EAC9E,UAAW,EACf,CAAC,CACL,CAAC,CACL,CAAC,EACMkoD,CACX,CACA,SAAS4F,GAAoBtgB,EAAYugB,EAAe,CACpD,OAAOvgB,EAAaA,EAAW,IAAI,SAAU1yC,EAAM,CAC/C,IAAIkzD,EAAezsD,GAASzG,CAAI,EAAIA,EAAO,CAAE,IAAKA,CAAK,EACnD2F,EAAMutD,EAAa,IACvB,OAAI,GAASvtD,CAAG,EACLutD,EAGA,EAAS,EAAS,CAAC,EAAGA,CAAY,EAAG,CAAE,IAAK5nD,GAAgB3F,EAAKstD,CAAa,CAAE,CAAC,CAEhG,CAAC,EAAI,CAAC,CACV,CACA,SAAS1D,GAAqBhd,EAAsBD,EAAoBp1C,EAAO7D,EAAQq2C,EAAYC,EAAW4M,EAAY,CAClH7M,IAAe,SAAUA,EAAa,GACtCC,IAAc,SAAUA,EAAY,GACpC4M,IAAe,SAAUA,EAAa,CAAE,KAAM,EAAG,IAAK,EAAG,MAAO,EAAG,OAAQ,CAAE,GACjF,IAAI7J,EAAa,CAAC,EACd9C,EAAiB2M,EAAW,KAAM1M,EAAgB0M,EAAW,IAAKxM,EAAmBwM,EAAW,OAAQzM,EAAkByM,EAAW,MACrI4W,EAAYj2D,EAAQ4yC,EAAkBF,EACtCwjB,EAAa/5D,EAAS02C,EAAmBF,EAC7C,OAAAmjB,GAAoBzgB,EAAsB6gB,CAAU,EAAE,QAAQ,SAAUxd,EAAS,CAC7ElD,EAAW,KAAK,CACZ,KAAM,aACN,IAAK,CACD9C,EACA5jC,GAAS4pC,EAAQ,IAAMjG,EAAYE,EAAe,EAAG,CACzD,EACA,KAAMsjB,EACN,UAAWvd,EAAQ,UACnB,UAAW,EACf,CAAC,CACL,CAAC,EACDod,GAAoB1gB,EAAoB6gB,CAAS,EAAE,QAAQ,SAAUvd,EAAS,CAC1ElD,EAAW,KAAK,CACZ,KAAM,WACN,IAAK,CACD1mC,GAAS4pC,EAAQ,IAAMlG,EAAaE,EAAgB,EAAG,EACvDC,CACJ,EACA,KAAMujB,EACN,UAAWxd,EAAQ,UACnB,UAAW,EACf,CAAC,CACL,CAAC,EACMlD,CACX,CACA,SAAS2f,GAAoB1vB,EAAU/5B,EAAQ,CAC3C,GAAI,CAACA,EAAO,OACR,MAAO,CAAC,EAEZ,IAAIg/B,EAAYjF,EAAS,MAAM,UAC3BnX,EAAQmX,EAAS,MACjBgsB,EAAsBnjC,EAAM,oBAKhCqX,EAAarX,EAAM,WAAY4W,EAAO5W,EAAM,KAAM6nC,EAAc7nC,EAAM,YAClEza,EAAIqxB,EAAO,EAAI,EACfz6B,EAAK83B,EAAO4T,GAAsBxQ,EAAY8rB,EAAqB59C,CAAC,EAAG,CAAC,EAAGuiD,EAAgB3rD,EAAG,CAAC,EAAG4rD,EAAe5rD,EAAG,CAAC,EAUrHgjC,EAAa/C,EAAY,EAAIyrB,EAAY,CAAC,EAC1CzoB,EAAYhD,EAAY,EAAIyrB,EAAY,CAAC,EAC7C,OAAOzqD,EAAO,IAAI,SAAUpb,EAAO,CAC/B,IAAIqN,EAAOrN,EAAM,QAAQ,sBAAsB,EAC3C8T,EAAOzG,EAAK,KAAOy4D,EAAgB3oB,EACnCppC,EAAM1G,EAAK,IAAM04D,EAAe3oB,EAChC5O,EAASz6B,EAAM1G,EAAK,OACpBkhC,EAAQz6B,EAAOzG,EAAK,MACpB8M,EAAK83B,EAAOqD,GAAyBD,EAAY,CAACvhC,EAAMC,CAAG,EAAGwP,CAAC,EAAG,CAAC,EAAGyiD,EAAc7rD,EAAG,CAAC,EAAG8rD,EAAa9rD,EAAG,CAAC,EAC5GM,EAAKw3B,EAAOqD,GAAyBD,EAAY,CAAC9G,EAAOC,CAAM,EAAGjrB,CAAC,EAAG,CAAC,EAAG2iD,EAAezrD,EAAG,CAAC,EAAG0rD,EAAgB1rD,EAAG,CAAC,EACxH,OAAO,EAAS,EAAS,CAAC,EAAGza,CAAK,EAAG,CAAE,KAAM,CACrC,KAAMgmE,EACN,MAAOE,EACP,IAAKD,EACL,OAAQE,EACR,QAASH,EAAcE,GAAgB,EACvC,QAASD,EAAaE,GAAiB,CAC3C,CAAE,CAAC,CACX,CAAC,CACL,CAEA,SAASC,GAAcjxB,EAAU,CAC7B,IAAInX,EAAQmX,EAAS,MACjB1uB,EAAYuX,EAAM,UAClBqoC,EAAgBlxB,EAAS,MAAM,eAAiB1uB,EACpD,GAAIuX,EAAM,gBAAkBqoC,GAAiBroC,EAAM,YAAcA,EAAM,WAAW,OAC9E,MAAO,GAEX,IAAImjC,EAAsBnjC,EAAM,oBAC5B+wB,EAAa,CACb,KAAM,EACN,IAAK,EACL,OAAQ,EACR,MAAO,CACX,EACA,GAAItoC,IAAc4/C,EAAe,CAC7B,IAAIC,EAAsB3B,GAAa0B,EAAe,EAAI,EAC1D,GAAIC,EAAqB,CACrB,IAAIC,EAAoBhoB,GAAc+nB,CAAmB,EACrDE,EAAUC,GAAmBzoC,EAAO,CACpCuoC,EAAkB,KAAOpF,EAAoB,KAC7CoF,EAAkB,IAAMpF,EAAoB,GAChD,CAAC,EACGuF,EAAUD,GAAmBzoC,EAAO,CACpCuoC,EAAkB,MAAQpF,EAAoB,MAC9CoF,EAAkB,OAASpF,EAAoB,MACnD,CAAC,EACDpS,EAAW,KAAOvwC,GAASgoD,EAAQ,CAAC,EAAG,IAAO,EAC9CzX,EAAW,IAAMvwC,GAASgoD,EAAQ,CAAC,EAAG,IAAO,EAC7CzX,EAAW,MAAQvwC,GAASkoD,EAAQ,CAAC,EAAG,IAAO,EAC/C3X,EAAW,OAASvwC,GAASkoD,EAAQ,CAAC,EAAG,IAAO,CACpD,CACJ,CACA,OAAA1oC,EAAM,cAAgBqoC,EACtBroC,EAAM,WAAa+wB,EACnB/wB,EAAM,WAAakjC,GAAmB/rB,CAAQ,EAC9CnX,EAAM,WAAa,GACZ,EACX,CACA,SAAS2oC,GAAkBl4D,EAAQiB,EAAO7D,EAAQ0sC,EAAgBC,EAAU5D,EAAM,CAC9E,IAAI+O,EAAY7O,GAAermC,EAAQiB,EAAO7D,EAAQ+oC,EAAO,EAAI,CAAC,EAC9DgyB,EAAevuB,GAAkBsL,EAAWpL,CAAc,EAC9D,OAAOwX,GAAiBpM,EAAWrd,GAAMkS,EAAUouB,CAAY,CAAC,CACpE,CACA,SAASC,GAAW7mE,EAAO,CACvB,OAAOA,EAAQA,EAAQ,EAAIA,CAAK,EAAI,CACxC,CACA,SAAS8mE,GAAkB3xB,EAAUN,EAAOjK,EAAW9rB,EAAWqyC,EAAW3hC,EAAO,CAChF,IAAI+oB,EAAiB/oB,EAAM,eACvByxB,EAAa2I,GAAuBhf,EAAW2N,EAAgBz5B,CAAS,EACxEioD,EAAsB9Z,GAA4B9X,EAAUN,EAAOjK,EAAW9rB,CAAS,EACvFyqC,EAAU,EAAc,EAAc,CAAC,EAAGtX,EAAOif,GAAiB/b,EAAUN,EAAOoM,EAAYniC,EAAWqyC,EAAW3hC,CAAK,CAAC,EAAG,EAAK,EAAGyiB,EAAO2a,GAAkBzX,EAAU4xB,EAAqBv3C,CAAK,CAAC,EAAG,EAAK,EAC5M29B,EAAkB7D,GAAkBC,EAAS,CAAC,EAC9C6D,EAAmB9D,GAAkBC,EAAS,CAAC,EACnD,MAAO,CACH,MAAO,CACH,QAAS4D,EAAgB,QACzB,OAAQA,EAAgB,OAAO,CAAC,CACpC,EACA,OAAQ,CACJ,QAASC,EAAiB,QAC1B,OAAQA,EAAiB,OAAO,CAAC,CACrC,CACJ,CACJ,CACA,SAAS4Z,GAA0B7xB,EAAUN,EAAOnlC,EAAO7D,EAAQoT,EAAUC,EAAW0rB,EAAWumB,EAAW3hC,EAAO,CACjH,IAAIy3C,EAAU5uB,GAAkBxD,EAAOjK,CAAS,EAC5CzwB,EAAK+1C,GAAwB/a,EAAUgc,EAAW,CAClD,SAAU,CAAC8V,EAAQ,CAAC,CAAC,EACrB,WAAY,CAACA,EAAQ,CAAC,CAAC,CAC3B,CAAC,EAAGjb,EAAmB7xC,EAAG,WAAW,OAAQ2xC,EAAiB3xC,EAAG,SAAS,OAC1E,GAAIqE,GAASstC,EAAgBlY,EAAe,GAAKp1B,GAASwtC,EAAkBpY,EAAe,EAAG,CAC1F,IAAIn5B,EAAKw3B,EAAOsD,GAAY,CACxB,MAAO/lB,EACP,MAAO,CAACs8B,EACR,MAAO,CAACE,CACZ,CAAC,EAAG,CAAC,EAAGkb,EAAkBzsD,EAAG,CAAC,EAAG0sD,EAAmB1sD,EAAG,CAAC,EACpD48C,EAAY,KAAK,IAAIp4C,GAAY,IAAUvP,EAAQk7B,EAAU,CAAC,EAAIs8B,CAAe,EACjF5P,EAAa,KAAK,IAAIp4C,GAAa,IAAUrT,EAAS++B,EAAU,CAAC,EAAIu8B,CAAgB,EACzF,MAAO,CAAC9P,EAAY3nD,EAAO4nD,EAAazrD,CAAM,CAClD,CACA,MAAO,CAAC,EAAG,CAAC,CAChB,CACA,SAASu7D,GAAcjyB,EAAUkyB,EAAc33D,EAAO7D,EAAQ++B,EAAWuP,EAAegX,EAAW3hC,EAAO,CAKtG,QAJIqlB,EAAQkG,GAAwB5F,EAAS,KAAK,EAC9Cr2B,EAAYq2B,EAAS,MAAM,UAC3Bia,EAAc,EACdC,EAAe,EACV33C,EAAI,EAAGA,EAAI,EAAG,EAAEA,EAAG,CACxB,IAAIisC,EAAY0jB,EAAajY,EAAaC,CAAY,EAClDl1C,EAAK2sD,GAAkB3xB,EAAUwO,EAAW/Y,EAAW9rB,EAAWqyC,EAAW3hC,CAAK,EAAG29B,EAAkBhzC,EAAG,MAAOizC,EAAmBjzC,EAAG,OACvImtD,EAAena,EAAgB,QAC/Boa,EAAgBna,EAAiB,QACjC8Z,EAAkB/Z,EAAgB,OAClCga,EAAmB/Z,EAAiB,OASxC,GARI11C,IAAM,IACD4vD,IACDJ,EAAkB,GAEjBK,IACDJ,EAAmB,IAGvBzvD,IAAM,GAAKy5C,GAAa,CAACmW,GAAgB,CAACC,EAC1C,MAAO,CAAC,EAAG,CAAC,EAEhB,GAAIzoD,EAAW,CACX,IAAI0oD,EAAY,EAAIN,CAAe,GAAKx3D,EAAQ,EAAIA,EAAQ,GACxD+3D,EAAa,EAAIN,CAAgB,GAAKt7D,EAAS,EAAIA,EAAS,GAC5D67D,EAAmBJ,GAAgBC,EACjCC,EAAYC,EACZF,GACG,CAACD,GAAgBE,EAAYC,EAClCC,EAEAR,EAAmBx3D,EAAQy3D,EAAoBt7D,EAI/Cs7D,EAAoBt7D,EAASq7D,EAAmBx3D,CAExD,CACA0/C,GAAe8X,EACf7X,GAAgB8X,CACpB,CACA,GAAI,CAACroD,GAAa8rB,EAAU,CAAC,GAAKA,EAAU,CAAC,EAAG,CAC5C,IAAInwB,EAAK03C,GAAehd,EAAUN,EAAOjK,EAAWuP,EAAe3qB,CAAK,EAAGvQ,EAAWxE,EAAG,SAAUyE,EAAYzE,EAAG,UAC9GG,EAAKq3B,EAAO+0B,GAA0B7xB,EAAUkyB,EAAajY,EAAaC,CAAY,EAAE,IAAI,SAAUl3C,EAAK,CAAE,OAAOA,EAAI,IAAI,SAAUqL,EAAG,CAAE,OAAOhF,GAASgF,EAAGowB,EAAe,CAAG,CAAC,CAAG,CAAC,EAAGlkC,EAAQ0/C,EAAavjD,EAASwjD,EAAcpwC,EAAUC,EAAW0rB,EAAWumB,EAAW3hC,CAAK,EAAG,CAAC,EAAG03C,EAAkBtsD,EAAG,CAAC,EAAGusD,EAAmBvsD,EAAG,CAAC,EAC/Uw0C,GAAe8X,EACf7X,GAAgB8X,CACpB,CACA,MAAO,CAAC/X,EAAaC,CAAY,CACrC,CACA,SAAS9O,GAAUqS,EAAK,CACpB,OAAIA,EAAM,IACNA,EAAMA,EAAM,IAAM,KAEtBA,GAAO,IACAA,CACX,CACA,SAAS+U,GAAWC,EAASzN,EAAS,CAIlCA,EAAU5Z,GAAU4Z,CAAO,EAC3B,IAAIrvC,EAAQ,KAAK,MAAM88C,EAAU,GAAG,EAChCC,EAAO/8C,EAAQ,IAAM,IAAMqvC,EAC3B2N,EAAOh9C,EAAQ,IAAMqvC,EACzB,OAAO,EAAIyN,EAAUC,CAAI,EAAI,EAAID,EAAUE,CAAI,EAAID,EAAOC,CAC9D,CACA,SAASC,GAAqBF,EAAMC,EAAM,CACtCD,EAAOtnB,GAAUsnB,CAAI,EACrBC,EAAOvnB,GAAUunB,CAAI,EACrB,IAAIE,EAAOznB,GAAUsnB,EAAOC,CAAI,EAChC,OAAO,KAAK,IAAIE,EAAM,IAAMA,CAAI,CACpC,CACA,SAAS9N,GAAgB/kB,EAAU9nC,EAAMipC,EAAM1iC,EAAU,CACrD,IAAIuG,EACA7T,EAAQ6uC,EAAS,MACjB8yB,GAAyB9tD,EAAK7T,EAAM0/C,EAA0B,KAAO,MAAQ7rC,IAAO,OAASA,EAAK,EAClG+tD,EAAsB5hE,EAAM2/C,EAAwB,EACxD,GAAItB,GAAcxP,EAAU,WAAW,EAAG,CACtC,IAAI51B,EAAOlS,EAAK,KAAMmS,EAAOnS,EAAK,KAAM06B,EAAO16B,EAAK,KAAMqhD,EAAOrhD,EAAK,KAAM86D,EAAY96D,EAAK,OACzF+6D,EAAS9xB,EAAO,KAAK,GAAM,IAC3B2N,EAAY,CAAC1kC,EAAMC,EAAMuoB,EAAM2mB,CAAI,EAAE,IAAI,SAAUv2C,EAAK,CAAE,OAAOmuB,GAAMnuB,EAAKgwD,CAAS,CAAG,CAAC,EACzFxkB,EAAYM,EAAU,IAAI,SAAU9rC,EAAK,CAAE,OAAOgvB,GAAOhvB,EAAKiwD,CAAK,CAAG,CAAC,EAGvE1gD,EAAS,EAAc,EAAc,CAAC,EAAGuqB,EAAO+R,GAAkB7O,EAAU8O,EAAWN,EAAWwkB,EAAW7xB,CAAI,CAAC,EAAG,EAAK,EAAGrE,EAAO8b,GAAuB5Y,EAAU8O,EAAWN,EAAWwkB,EAAW7xB,CAAI,CAAC,EAAG,EAAK,EACvN5uB,EAAO,KAAK,SAAU1mB,EAAGC,EAAG,CAAE,OAAO,EAAID,EAAIs1C,CAAI,EAAI,EAAIr1C,EAAIq1C,CAAI,CAAG,CAAC,EACrE,IAAIuR,EAASngC,EAAO,OAAS,EAC7B,GAAImgC,EACA,MAAO,CACH,OAAQA,EACR,KAAMA,EAASngC,EAAO,CAAC,EAAI4uB,CAC/B,CAER,CACA,GAA+E4xB,GAAoB,QAAWD,EAAuB,CACjI,IAAII,EAASH,EAAoB,MAAM,EAAE,KAAK,SAAUlnE,EAAGC,EAAG,CAC1D,OAAO8mE,GAAqB/mE,EAAG4S,CAAQ,EAAIm0D,GAAqB9mE,EAAG2S,CAAQ,CAC/E,CAAC,EACG00D,EAAcD,EAAO,CAAC,EAC1B,GAAIN,GAAqBO,EAAa10D,CAAQ,GAAKq0D,EAC/C,MAAO,CACH,OAAQ,GACR,KAAM3xB,EAAOqxB,GAAW/zD,EAAU00D,CAAW,EAAI10D,CACrD,CAER,CACA,MAAO,CACH,OAAQ,GACR,KAAM0iC,CACV,CACJ,CACA,SAASqhB,GAAgBxiB,EAAUzlC,EAAO7D,EAAQ++B,EAAWuP,EAAegX,EAAW3hC,EAAO,CAC1F,GAAI,CAACm1B,GAAcxP,EAAU,WAAW,EACpC,MAAO,CAAC,EAAG,CAAC,EAEhB,IAAIoD,EAAiB/oB,EAAM,eAAgBonC,EAAgBpnC,EAAM,cAC7DrV,EAAKg7B,EAAS,MAAOM,EAAYt7B,EAAG,UAAWy6B,EAAOz6B,EAAG,KAC7D,OAAOitD,GAAcjyB,EAAU,SAAUia,EAAaC,EAAc,CAChE,OAAOsX,GAAkB/P,GAAiBnhB,EAAW/lC,EAAQ0/C,EAAavjD,EAASwjD,EAAc9W,EAAgB4B,EAAevF,CAAI,CACxI,EAAGllC,EAAO7D,EAAQ++B,EAAWuP,EAAegX,EAAW3hC,CAAK,CAChE,CACA,SAAS+4C,GAAepzB,EAAU9hB,EAAOuX,EAAWumB,EAAW3hC,EAAO,CAClE,GAAI,CAACm1B,GAAcxP,EAAU,UAAU,EACnC,MAAO,CAAC,EAAG,CAAC,EAEhB,IAAImhB,EAAmB9mC,EAAM,iBAAkB+mC,EAAoB/mC,EAAM,kBAAmB2qB,EAAgB3qB,EAAM,cAAe+oB,EAAiB/oB,EAAM,eAAgBolB,EAAOplB,EAAM,KACjLg5C,EAAWpB,GAAcjyB,EAAU,SAAUia,EAAaC,EAAc,CACxE,OAAOsX,GAAkB7tB,GAAYtpB,EAAO4W,GAAK/S,EAAO,CAAC+7B,EAAckH,EAAkBjH,EAAekH,CAAiB,CAAC,CAAC,EAAGD,EAAkBC,EAAmBhe,EAAgB4B,EAAevF,CAAI,CAC1M,EAAG0hB,EAAkBC,EAAmB3rB,EAAWuP,EAAegX,EAAW3hC,CAAK,EAClF,MAAO,CAACg5C,EAAS,CAAC,EAAIlS,EAAkBkS,EAAS,CAAC,EAAIjS,CAAiB,CAC3E,CACA,SAASlD,GAAmBle,EAAU3lB,EAAO,CACzCA,EAAM,cAAgBurB,GAAwB5F,EAAS,KAAK,CAChE,CACA,SAASszB,GAAkBC,EAAU,CACjC,IAAIxjB,EAAa,CAAC,EAClB,OAAAwjB,EAAS,QAAQ,SAAUtgB,EAAS,CAChCA,EAAQ,eAAe,QAAQ,SAAUjuC,EAAI,CACzC,IAAImuC,EAAYnuC,EAAG,UACf,GAAK+qC,EAAY,SAAU1yC,EAAM,CAAE,OAAOA,EAAK,YAAc81C,CAAW,CAAC,IAG7EA,EAAU,UAAY,GACtBpD,EAAW,KAAK,CAAE,UAAWoD,EAAW,QAASF,CAAQ,CAAC,EAC9D,CAAC,CACL,CAAC,EACMlD,EAAW,IAAI,SAAU/qC,EAAI,CAChC,IAAImuC,EAAYnuC,EAAG,UAAWiuC,EAAUjuC,EAAG,QAC3C,OAAO,EAAS,EAAS,CAAC,EAAGmuC,CAAS,EAAG,CAAE,UAAWF,EAAQ,SAAU,CAAC,CAC7E,CAAC,CACL,CACA,SAASugB,GAAmBxzB,EAAUyM,EAAeC,EAAiB+mB,EAAmBC,EAAqB5mB,EAAgB,CAC1H,IAAI9nC,EAAKunC,GAAgBM,GAAU7M,EAAU8M,CAAc,EAAGL,EAAeC,CAAe,EAAG2O,EAAqBr2C,EAAG,SAAUo2C,EAAuBp2C,EAAG,WACvJs0C,EAAW/J,GAAiB,EAChC8L,EAAmB,QAAQ,SAAUh+C,EAAM,CACnCA,EAAK,UACDA,EAAK,YAAc,UACnBi8C,EAAS,KAAO,IAEhBj8C,EAAK,YAAc,QACnBi8C,EAAS,MAAQ,IAErBma,EAAkB,KAAK,CACnB,KAAM,SACN,IAAKp2D,EAAK,GACd,CAAC,EAET,CAAC,EACD+9C,EAAqB,QAAQ,SAAU/9C,EAAM,CACrCA,EAAK,UACDA,EAAK,YAAc,UACnBi8C,EAAS,IAAM,IAEfj8C,EAAK,YAAc,QACnBi8C,EAAS,OAAS,IAEtBoa,EAAoB,KAAK,CACrB,KAAM,SACN,IAAKr2D,EAAK,GACd,CAAC,EAET,CAAC,EACD,IAAIiI,EAAK+zC,GAAqBrZ,CAAQ,EAAG2zB,EAAgBruD,EAAG,SAAUsuD,EAA0BtuD,EAAG,SAAUuuD,EAA4BvuD,EAAG,WAC5I,OAAAsuD,EAAwB,QAAQ,SAAUE,EAAU,CAC5CxsD,GAAUmsD,EAAmB,SAAUzuD,EAAI,CAC3C,IAAIyI,EAAOzI,EAAG,KAAMhC,EAAMgC,EAAG,IAC7B,OAAOyI,IAAS,UAAYzK,IAAQ8wD,CACxC,CAAC,GAAK,GAGNL,EAAkB,KAAK,CACnB,KAAM,SACN,IAAKK,CACT,CAAC,CACL,CAAC,EACDD,EAA0B,QAAQ,SAAUC,EAAU,CAC9CxsD,GAAUosD,EAAqB,SAAU1uD,EAAI,CAC7C,IAAIyI,EAAOzI,EAAG,KAAMhC,EAAMgC,EAAG,IAC7B,OAAOyI,IAAS,UAAYzK,IAAQ8wD,CACxC,CAAC,GAAK,GAGNJ,EAAoB,KAAK,CACrB,KAAM,SACN,IAAKI,CACT,CAAC,CACL,CAAC,EACM,CACH,SAAUxa,EACV,cAAeqa,CACnB,CACJ,CACA,IAAII,GAAuB/T,GAAsB,GAAI,CAAC,YAAa,UAAU,CAAC,EAM1EgU,GAAY,CACZ,KAAM,YACN,aAAc,SACd,MAAO,CACH,YACA,gBACA,iBACA,wBACA,UACA,gBACA,iBACA,qBACA,0BACA,0BACA,YACA,gBACA,sBACA,cACAnjB,GACAC,GACAC,GACAC,GACA,uBACA,qBACA,oBACA,SACA,cACA,iBACA,kCACA,2BACJ,EACA,OAAQ,CAAC,OAAQ,OAAO,EACxB,IAAK,CACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CACJ,EACA,OAAQ,SAAUhR,EAAU+K,EAAO,CAC/B,IAAIliB,EAAQmX,EAAS,MACjBi0B,EAAYprC,EAAM,IAAKqrC,EAAarrC,EAAM,KAAMze,EAAOye,EAAM,KAAMxe,EAAOwe,EAAM,KAAM+J,EAAO/J,EAAM,KAAM0wB,EAAO1wB,EAAM,KAAMslC,EAAiBtlC,EAAM,eACnJ7jB,EAAKg7B,EAAS,MAAM,oBAAqBm0B,EAAsBnvD,IAAO,OAAS,EAAIA,EACvF,GAAI,CAACmpD,GAAkB,CAACA,EAAe,QAAU,CAAC3e,GAAcxP,EAAU,EAAE,EAExE,OAAAo0B,GAAWp0B,EAAU,WAAYuP,GAAiB,EAAG,SAAUv0C,EAAG,CAAE,OAAO,KAAK,UAAUA,CAAC,CAAG,CAAC,EAC/Fo5D,GAAWp0B,EAAU,gBAAiBuP,GAAiB,EAAG,SAAUv0C,EAAG,CAAE,OAAO,KAAK,UAAUA,CAAC,CAAG,CAAC,EAC7F,CAAC,EAEZ6tB,EAAM,WAAakjC,GAAmB/rB,CAAQ,EAC9C,IAAIq0B,EAAU,KAAK,IAAIjqD,EAAK,CAAC,EAAGC,EAAK,CAAC,EAAGuoB,EAAK,CAAC,EAAG2mB,EAAK,CAAC,CAAC,EACrD+a,EAAS,KAAK,IAAIlqD,EAAK,CAAC,EAAGC,EAAK,CAAC,EAAGuoB,EAAK,CAAC,EAAG2mB,EAAK,CAAC,CAAC,EACpDgb,EAAgBpG,EAAe,eAAiB,CAAC,EACjDzuB,EAAQkG,GAAwB5F,EAAS,KAAK,EAC9CyzB,EAAoB,CAAC,EACrBC,EAAsB,CAAC,EACvB/jB,EAAqB,CAAC,EACtBC,EAAuB,CAAC,EACxB4kB,EAAY,CAAC,EACblvD,EAAKu1C,GAAQnb,CAAK,EAAGnlC,EAAQ+K,EAAG,MAAO5O,EAAS4O,EAAG,OAAQ1G,EAAM0G,EAAG,IAAK3G,EAAO2G,EAAG,KAAM+zB,EAAS/zB,EAAG,OAAQ8zB,EAAQ9zB,EAAG,MACxH1H,EAAa,CAAE,KAAMe,EAAM,MAAOy6B,EAAO,IAAKx6B,EAAK,OAAQy6B,EAAQ,QAAS16B,EAAOy6B,GAAS,EAAG,QAASx6B,EAAMy6B,GAAU,CAAE,EAC1Ho7B,EAAmBF,EAAc,OAAS,EAC1CG,EAAeD,EACb5Z,GAAQ0Z,CAAa,EACrB,CAAC,EACP,GAAI,CAACpG,EAAe,QAAS,CAIzB,GAHIA,EAAe,WACfqG,EAAU,KAAK3gB,GAAwB7T,EAAUN,EAAOyuB,EAAe,UAAWgG,EAAqBA,CAAmB,CAAC,EAE3HhG,EAAe,KAAM,CACrB,IAAIj2D,EAAO2iD,GAAQnb,CAAK,EACpByuB,EAAe,SACfj2D,EAAK,QAAUA,EAAK,IAAMA,EAAK,QAAU,EACzCA,EAAK,QAAUA,EAAK,KAAOA,EAAK,OAAS,GAE7Cs8D,EAAU,KAAK3hB,GAAW7S,EAAU9nC,EAAMi8D,EAAqBA,CAAmB,CAAC,CACvF,CACIM,IACItG,EAAe,SACfuG,EAAa,QACRA,EAAa,IAAMA,EAAa,QAAU,EAC/CA,EAAa,QACRA,EAAa,KAAOA,EAAa,OAAS,GAEnDF,EAAU,KAAK3hB,GAAW7S,EAAU00B,EAAcP,EAAqBA,CAAmB,CAAC,GAE/FK,EAAU,QAAQ,SAAUxhB,EAAU,CAClC,IAAI2hB,EAAmB3hB,EAAS,SAAS,SAAU4hB,EAAqB5hB,EAAS,WAAW,SAC5FygB,EAAkB,KAAK,MAAMA,EAAmB,EAAc,CAAC,EAAG32B,EAAO63B,EAAiB,OAAO,SAAU3vD,GAAI,CAC3G,IAAI2uC,GAAiB3uC,GAAG,eACxB,OAAO2uC,GAAe,KAAK,SAAU3uC,GAAI,CACrC,IAAImuC,GAAYnuC,GAAG,UACnB,MAAO,CAACmuC,GAAU,IACtB,CAAC,CACL,CAAC,EAAE,IAAI,SAAUF,GAAS,CAAE,MAAQ,CAChC,KAAM,OACN,IAAKA,GAAQ,GACjB,CAAI,CAAC,CAAC,EAAG,EAAK,CAAC,EACfygB,EAAoB,KAAK,MAAMA,EAAqB,EAAc,CAAC,EAAG52B,EAAO83B,EAAmB,OAAO,SAAU5vD,GAAI,CACjH,IAAI2uC,GAAiB3uC,GAAG,eACxB,OAAO2uC,GAAe,KAAK,SAAU3uC,GAAI,CACrC,IAAImuC,GAAYnuC,GAAG,UACnB,MAAO,CAACmuC,GAAU,IACtB,CAAC,CACL,CAAC,EAAE,IAAI,SAAUF,GAAS,CAAE,MAAQ,CAChC,KAAM,OACN,IAAKA,GAAQ,GACjB,CAAI,CAAC,CAAC,EAAG,EAAK,CAAC,EACftD,EAAmB,KAAK,MAAMA,EAAoB,EAAc,CAAC,EAAG7S,EAAOw2B,GAAkBqB,CAAgB,CAAC,EAAG,EAAK,CAAC,EACvH/kB,EAAqB,KAAK,MAAMA,EAAsB,EAAc,CAAC,EAAG9S,EAAOw2B,GAAkBsB,CAAkB,CAAC,EAAG,EAAK,CAAC,CACjI,CAAC,CACL,CACA,IAAInvD,EAAK+tD,GAAmBxzB,EAAU,CAACrhC,EAAMy6B,CAAK,EAAG,CAACx6B,EAAKy6B,CAAM,EAAGo6B,EAAmBC,CAAmB,EAAGpa,EAAW7zC,EAAG,SAAUkuD,EAAgBluD,EAAG,cACpJgvD,GACAjB,GAAmBxzB,EAAU,CAAC00B,EAAa,KAAMA,EAAa,KAAK,EAAG,CAACA,EAAa,IAAKA,EAAa,MAAM,EAAGjB,EAAmBC,EAAqBvF,EAAe,cAAc,EAExL,IAAI0G,EAAgB,EAAc,EAAc,CAAC,EAAG/3B,EAAO6S,CAAkB,EAAG,EAAK,EAAG7S,EAAO8S,CAAoB,EAAG,EAAK,EACvH2c,EAAoBsI,EAAc,OAAO,SAAU1hB,EAAW,CAAE,OAAOA,EAAU,SAAW,CAACA,EAAU,QAAU,CAAC,EAClH8Z,EAAgB4H,EAAc,OAAO,SAAU1hB,EAAW,CAAE,OAAOA,EAAU,QAAU,CAAC,EAAE,KAAK,SAAUtnD,EAAGC,EAAG,CAC/G,OAAOD,EAAE,IAAMC,EAAE,GACrB,CAAC,EACDuyD,GAAare,EAAU,SAAU,CAC7B,WAAY60B,EAAc,OAAO,SAAU7vD,EAAI,CAC3C,IAAI3L,EAAU2L,EAAG,QACjB,MAAO,CAAC3L,CACZ,CAAC,EACD,SAAUkzD,EACV,KAAMU,CACV,EAAG,EAAI,EACP,IAAI6H,EAAeV,GAAWp0B,EAAU,WAAYsZ,EAAU,SAAUt+C,EAAG,CAAE,OAAO,KAAK,UAAUA,CAAC,CAAG,EAAGu0C,GAAiB,CAAC,EACxHwlB,EAAoBX,GAAWp0B,EAAU,gBAAiB2zB,EAAe,SAAU34D,EAAG,CAAE,OAAO,KAAK,UAAUA,CAAC,CAAG,EAAGu0C,GAAiB,CAAC,EAC3I,OAAI+J,IAAawb,GAAgBnB,IAAkBoB,IAC/C1W,GAAare,EAAU,UAAW,CAC9B,OAAQsZ,EACR,YAAaqa,CACjB,EAAG,EAAI,EAGJ,EAAc,EAAc,EAAc,EAAc,EAAc,EAAc,CAAC,EAAG72B,EAAO+tB,GAAuB7qB,EAAUusB,EAAmB,CAAC8H,EAASC,CAAM,EAAG12D,EAAYmtC,CAAK,CAAC,EAAG,EAAK,EAAGjO,EAAO0uB,GAAoBxrB,EAAUitB,EAAe,CAACoH,EAASC,CAAM,EAAG12D,EAAYmtC,CAAK,CAAC,EAAG,EAAK,EAAGjO,EAAO0sB,GAAiBxpB,EAAU,aAAc4P,EAAsB,CAACskB,EAAYD,CAAS,EAAGr2D,EAAYmtC,CAAK,CAAC,EAAG,EAAK,EAAGjO,EAAO0sB,GAAiBxpB,EAAU,WAAY2P,EAAoB,CAACukB,EAAYD,CAAS,EAAGr2D,EAAYmtC,CAAK,CAAC,EAAG,EAAK,EAAGjO,EAAOwsB,GAAgBtpB,EAAU,aAAc0zB,EAAqBW,EAASJ,EAAW15D,EAAO,EAAGwwC,CAAK,CAAC,EAAG,EAAK,EAAGjO,EAAOwsB,GAAgBtpB,EAAU,WAAYyzB,EAAmBa,EAAQJ,EAAYx9D,EAAQ,EAAGq0C,CAAK,CAAC,EAAG,EAAK,CACtwB,EACA,UAAW,SAAU/K,EAAU,EAAG,CAC9BA,EAAS,MAAM,eAAiB,CAC5B,QAAS,EAAE,UACX,KAAM,GACN,OAAQ,EACZ,EACAixB,GAAcjxB,CAAQ,CAC1B,EACA,KAAM,SAAUA,EAAU,CACtB,IAAInX,EAAQmX,EAAS,MAChBixB,GAAcjxB,CAAQ,IACvBnX,EAAM,WAAakjC,GAAmB/rB,CAAQ,GAE9CnX,EAAM,iBACNA,EAAM,eAAe,OAAS,GAEtC,EACA,WAAY,SAAUmX,EAAU,CAC5B,KAAK,MAAMA,CAAQ,CACvB,EACA,QAAS,SAAUA,EAAU,CACzB,KAAK,MAAMA,CAAQ,CACvB,EACA,qBAAsB,SAAUA,EAAU,EAAG,CACzC,GAAI+zB,GAAqB/zB,EAAU,CAAC,GAAKslB,GAAqBtlB,EAAU,CAAC,EACrE,MAAO,GAEX,GAAI,CAAC,EAAE,WAAa,EAAE,WAClB,OAAOlzB,GAAS,EAAE,WAAW,OAAQjG,GAAO,cAAc,CAAC,CAEnE,EACA,iBAAkB,SAAUm5B,EAAU,CAClCA,EAAS,MAAM,eAAiB,KAChCixB,GAAcjxB,CAAQ,CAC1B,EACA,YAAa,SAAUA,EAAU,CAC7B,KAAK,KAAKA,CAAQ,CACtB,EACA,eAAgB,SAAUA,EAAU,CAChC,KAAK,MAAMA,CAAQ,CACvB,EACA,eAAgB,SAAUA,EAAU,EAAG,CACnC,KAAK,UAAUA,EAAU,CAAC,CAC9B,EACA,UAAW,SAAUA,EAAU,CAC3B,KAAK,KAAKA,CAAQ,CACtB,EACA,aAAc,SAAUA,EAAU,CAC9B,KAAK,MAAMA,CAAQ,CACvB,EACA,sBAAuB,SAAUA,EAAU,CACvCA,EAAS,MAAM,eAAiB,KAChCixB,GAAcjxB,CAAQ,CAC1B,EACA,iBAAkB,SAAUA,EAAU,CAClC,KAAK,KAAKA,CAAQ,CACtB,EACA,oBAAqB,SAAUA,EAAU,CACrC,KAAK,MAAMA,CAAQ,CACvB,EACA,MAAO,SAAUA,EAAU,CACvB,IAAInX,EAAQmX,EAAS,MACrBnX,EAAM,WAAa,GACnBA,EAAM,WAAa,CAAC,EACpBA,EAAM,eAAiB,KACvBA,EAAM,aAAe,CAAC,CAC1B,CACJ,EA4NA,SAASmsC,GAAU5qD,EAAMC,EAAM,CAC3B,MAAO,CACHD,EAAK,CAAC,EAAIC,EAAK,CAAC,EAChBD,EAAK,CAAC,EAAIC,EAAK,CAAC,CACpB,CACJ,CACA,SAASxD,IAAS,CAEd,QADImN,EAAa,CAAC,EACTzI,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpCyI,EAAWzI,CAAE,EAAI,UAAUA,CAAE,EAEjC,OAAOwI,GAAY,MAAM,OAAQ,EAAc,CAAC,EAAM,EAAG+oB,EAAO9oB,CAAU,EAAG,EAAK,CAAC,CACvF,CACA,SAASihD,GAAYC,EAAI,CACrBA,EAAG,CACP,CACA,SAASnuB,GAAmBzoC,EAAW,CACnC,MAAI,CAACA,GAAaA,IAAc,OACrB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAExBwF,GAASxF,CAAS,EACXA,EAEJy1B,GAASz1B,CAAS,CAC7B,CACA,SAASilC,GAAkBjqC,EAAQ8U,EAAGqkB,EAAQ,CAC1C,OAAO5B,GAAWziB,EAAGokB,GAAmBC,EAAQrkB,CAAC,EAAG9U,EAAQk5B,GAAmBC,EAAO,IAAI,SAAU5mC,EAAG,CAAE,MAAO,CAACA,CAAG,CAAC,EAAGuiB,CAAC,CAAC,CAC9H,CACA,SAAS+mD,GAAe3nD,EAAI1G,EAAMiV,EAAc,CAC5C,GAAIjV,IAAS,IAAK,CACd,IAAIsuD,EAAUC,GAAc7nD,EAAG,eAAe,EAC9C,OAAO4nD,EAAQr5C,EAAe,QAAU,QAAQ,EAAI,GACxD,CACA,MAAO,EACX,CACA,SAASu5C,GAAyB9nD,EAAI,CAClC,IAAI+nD,EAAiBC,GAAmB,GAAiBhoD,EAAI,SAAS,CAAC,EACvE,OAAO+nD,EAAe,IAAI,SAAU14B,EAAGt6B,EAAG,CACtC,IAAIyC,EAAK4B,GAAUi2B,CAAC,EAAGhyC,EAAQma,EAAG,MAAO8B,EAAO9B,EAAG,KACnD,OAAOna,EAAQsqE,GAAe3nD,EAAI1G,EAAMvE,IAAM,CAAC,CACnD,CAAC,CACL,CACA,SAASkzD,GAAwB/0B,EAAiB,CAC9C,OAAOA,EAAkBA,EAAgB,MAAM,GAAG,EAAI,CAAC,IAAK,GAAG,CACnE,CACA,SAAS80B,GAAmBz+D,EAAO,CAC/B,OAAO0+D,GAAwB1+D,EAAM,eAAe,CACxD,CACA,SAAS8vC,GAAoBtwC,EAAQ,CACjC,IAAI0vC,EAAWW,GAAerwC,CAAM,EAChCm/D,EAAoBzvB,EAAS,WAAW,EAC5C,GAAIyvB,GAAqBA,IAAsB,OAC3C,OAAOA,EAEX,GAAI,cAAen/D,EAAQ,CACvB,IAAIiuB,EAAOjuB,EAAO,UACdo/D,EAAUnxC,EAAK,QACnB,GAAI,CAACmxC,EACD,MAAO,GAEX,IAAIluB,EAAWkuB,EAAQ,OACvB,GAAI,CAACluB,EACD,MAAO,GAOX,QALI3W,EAAW,CAAC,EACZhsB,EAAU,SAAUvC,EAAG,CACvB,IAAIjJ,EAASq8D,EAAQpzD,CAAC,EAAE,OACxBuuB,EAAS,KAAK,UAAU,OAAO,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,GAAG,EAAE,IAAI,SAAU9qB,EAAK,CAAE,OAAO1M,EAAO0M,CAAG,CAAG,CAAC,EAAE,KAAK,IAAI,EAAG,GAAG,CAAC,CAC9H,EACSzD,EAAI,EAAGA,EAAIklC,EAAU,EAAEllC,EAC5BuC,EAAQvC,CAAC,EAEb,OAAOuuB,EAAS,KAAK,GAAG,CAC5B,CACA,MAAO,EACX,CACA,SAAS6V,GAAcn5B,EAAIooD,EAAYC,EAAUC,EAAWC,EAAgB,CACxE,IAAI/wD,EAAIM,EACJ+gC,EAAkBx4B,GAAmBL,CAAE,GAAKM,GAAgBN,CAAE,EAC9DwoD,EAAU,GACVz/D,EACA+xC,EACJ,GAAI,CAAC96B,GAAMqoD,EACPt/D,EAASiX,MAER,CACD,IAAIyoD,GAA6BjxD,EAA6CwI,GAAG,gBAAkB,MAAQxI,IAAO,OAAS,OAASA,EAAG,cACnIgQ,EAAgBxH,EAAG,cACnByoD,GACAD,EAAU,GACV1tB,EAAoBtzB,EACpBze,EAAS0/D,GAGT1/D,EAASye,CAEjB,CAOA,QANIkhD,EAAkB,GAClB3vB,EAAQ/4B,IAAOooD,GAAcr/D,IAAWq/D,EACxCjlD,EAAW,WACX03B,EAAa,EACbF,EAAa,WAA2E4tB,IAAe,MAAM,CAAC,GAAK,EACnHI,EAAiFJ,IAAe,UAAU,EACvGx/D,GAAUA,IAAW8vC,GAAiB,CACrCuvB,IAAer/D,IACfgwC,EAAQ,IAEZ,IAAIN,EAAWW,GAAerwC,CAAM,EAChC4b,EAAU5b,EAAO,QAAQ,YAAY,EACrC+H,EAAYuoC,GAAoBtwC,CAAM,EACtC6/D,EAAanwB,EAAS,YAAY,EAClCvoB,EAAO,WAAWuoB,EAAS,MAAM,CAAC,GAAK,EAE3C,GADAt1B,EAAWs1B,EAAS,UAAU,EAC1B6vB,GAAap4C,IAAS,EAAG,CACzB2qB,EAAa3qB,EACb,KACJ,CACA,GAEA,CAACm4C,GAAYC,GAAa3tB,IAAe,GAAKguB,GAAkBA,IAAmB,YAC5EhkD,IAAY,OACZA,IAAY,iBACZxB,IAAa,UACZrS,GAAaA,IAAc,QAC5B83D,IAAe,YAClB,MAEJ,IAAIC,GAAkB/wD,EAA6CkI,GAAG,gBAAkB,MAAQlI,IAAO,OAAS,OAASA,EAAG,WACxHgxD,EAAmB//D,EAAO,WAC1B8/D,IACAL,EAAU,GACV1tB,EAAoBguB,GAExB,IAAIzvC,EAAayvC,EACjB,GAAIzvC,GAAcA,EAAW,WAAa,GAAI,CAE1CtwB,EAASswB,EAAW,KACpBqvC,EAAkB,GAClBvlD,EAAWi2B,GAAerwC,CAAM,EAAE,UAAU,EAC5C,KACJ,CACAA,EAASswB,EACTlW,EAAW,UACf,CACA,MAAO,CACH,WAAY03B,EACZ,QAAS2tB,EACT,kBAAmB1tB,EACnB,gBAAiB4tB,EACjB,SAAUvlD,IAAa,SACvB,MAAO41B,GAAS,CAAChwC,GAAUA,IAAW8vC,EACtC,aAAc9vC,GAAU8vC,CAC5B,CACJ,CACA,SAASsB,GAAiBn6B,EAAIjX,EAAQ,CAClC,IAAIyO,EACAmN,EAAU3E,EAAG,QAAQ,YAAY,EACjCw6B,EAAax6B,EAAG,WAChBy6B,EAAYz6B,EAAG,UACfy4B,EAAWW,GAAep5B,CAAE,EAE5Bge,EAAQ3nB,GAAYmkC,CAAU,EAC9BJ,EAAY,CAACpc,EACbiH,EACAqV,EAEJ,MAAI,CAACF,IAAcz1B,IAAY,OAAS3E,EAAG,kBACvCilB,EAASgL,GACH63B,GAAyB9nD,CAAE,EAC3BioD,GAAwBxvB,EAAS,iBAAiB,CAAC,EAAE,IAAI,SAAUjjC,EAAK,CAAE,OAAO,WAAWA,CAAG,CAAG,CAAC,EACzG8kC,EAAerV,EAAO,MAAM,EAC5BmV,EAAY,GACRz1B,IAAY,OACZ61B,EAAa,EACbC,EAAY,IAGZjjC,EAAK83B,EAAOy5B,GAAqB/oD,EAAIilB,EAAQjlB,IAAOjX,GAAUA,EAAO,QAAQ,YAAY,IAAM,GAAG,EAAG,CAAC,EAAGyxC,EAAahjC,EAAG,CAAC,EAAGijC,EAAYjjC,EAAG,CAAC,EAAGytB,EAAO,CAAC,EAAIztB,EAAG,CAAC,EAAGytB,EAAO,CAAC,EAAIztB,EAAG,CAAC,KAIvLytB,EAASgjC,GAAwBxvB,EAAS,iBAAiB,CAAC,EAAE,IAAI,SAAUjjC,EAAK,CAAE,OAAO,WAAWA,CAAG,CAAG,CAAC,EAC5G8kC,EAAerV,EAAO,MAAM,GAGzB,CACH,QAAStgB,EACT,MAAOqZ,EACP,UAAWoc,EACX,OAAQ,CAACI,GAAc,EAAGC,GAAa,CAAC,EACxC,OAAQxV,EACR,aAAcqV,CAClB,CACJ,CACA,SAASY,GAAcl7B,EAAIge,EAAO,CAC9B,IAAIya,EAAWW,GAAep5B,CAAE,EAC5BgpD,EAAe5vB,GAAe94B,GAAgBN,CAAE,CAAC,EACjDipD,EAAeD,EAAa,UAAU,EAC1C,GAAI,CAAChrC,IAAU,CAACirC,GAAgBA,IAAiB,UAC7C,MAAO,CAAC,EAAG,CAAC,EAEhB,IAAIC,EAAa,SAASF,EAAa,YAAY,EAAG,EAAE,EACpDG,EAAY,SAASH,EAAa,WAAW,EAAG,EAAE,EACtD,OAAIvwB,EAAS,UAAU,IAAM,cACrBA,EAAS,KAAK,IAAM,QAAUA,EAAS,QAAQ,IAAM,UACrD0wB,EAAY,IAEZ1wB,EAAS,MAAM,IAAM,QAAUA,EAAS,OAAO,IAAM,UACrDywB,EAAa,IAGd,CAACA,EAAYC,CAAS,CACjC,CACA,SAASjvB,GAAkB5W,EAAU,CACjCA,EAAS,QAAQ,SAAUzzB,EAAM,CAC7B,IAAI/D,EAAS+D,EAAK,OACd/D,IACA+D,EAAK,OAASuzB,GAAiBt3B,EAAQ,EAAG,CAAC,EAEnD,CAAC,CACL,CACA,SAASkuC,GAAqBh6B,EAAI,CAI9B,QAHIopD,EAAiBppD,EAAG,cACpBqpD,EAAe,GACfC,EAAOhpD,GAAgBN,CAAE,EACtBopD,GAAgB,CACnB,IAAIt4D,EAAY,GAAiBs4D,CAAc,EAAE,UACjD,GAAIt4D,GAAaA,IAAc,OAAQ,CACnCu4D,EAAe,GACf,KACJ,CACA,GAAID,IAAmBE,EACnB,MAEJF,EAAiBA,EAAe,aACpC,CACA,MAAO,CACH,eAAgBA,GAAkBE,EAClC,aAAcD,CAClB,CACJ,CACA,SAASE,GAAcz9D,EAAQmmC,EAAM,CACjC,OAAIA,IAAS,SAAUA,EAAOnmC,EAAO,OAAS,GACvC,GAAG,OAAOmmC,EAAO,WAAa,SAAU,GAAG,EAAE,OAAOnO,GAAmBh4B,EAAQ,CAACmmC,CAAI,EAAE,KAAK,GAAG,EAAG,GAAG,CAC/G,CACA,SAAS41B,GAAc7nD,EAAI,CACvB,IAAIwpD,EAAcxpD,EAAG,YACjBypD,EAAezpD,EAAG,aACtB,GAAI,CAACA,EACD,MAAO,CAAE,EAAG,EAAG,EAAG,EAAG,MAAO,EAAG,OAAQ,EAAG,YAAawpD,EAAa,aAAcC,CAAa,EAEnG,IAAI7B,EAAU5nD,EAAG,QACbmoD,EAAWP,GAAWA,EAAQ,SAAY,CAAE,EAAG,EAAG,EAAG,EAAG,MAAO,EAAG,OAAQ,CAAE,EAChF,MAAO,CACH,EAAGO,EAAQ,EACX,EAAGA,EAAQ,EACX,MAAOA,EAAQ,OAASqB,EACxB,OAAQrB,EAAQ,QAAUsB,EAC1B,YAAaD,EACb,aAAcC,CAClB,CACJ,CACA,SAAS/uB,GAAa16B,EAAIY,EAAG,CACzB,IAAIpJ,EACAM,EAAK+vD,GAAc7nD,CAAE,EAAG0pD,EAAe5xD,EAAG,MAAO6xD,EAAgB7xD,EAAG,OAAQ0xD,EAAc1xD,EAAG,YAAa2xD,EAAe3xD,EAAG,aAC5H8xD,EAASJ,EAAcE,EACvBG,EAASJ,EAAeE,EACxBG,EAAsB9pD,EAAG,oBAAoB,QAE7C+pD,EAAQD,EAAoB,MAE5BE,EAAcF,EAAoB,YAClCG,EAAY,CAAC,EAAG,CAAC,EACjBv5C,EAAQ,CAACk5C,EAAQC,CAAM,EACvBx+D,EAAY,CAAC,EAAG,CAAC,EACrB,GAAI0+D,IAAU,EAAG,CACb,IAAIG,GAAUH,EAAQ,GAAK,EACvBI,EAAS,KAAK,OAAOJ,EAAQ,GAAK,CAAC,EACvCE,EAAU,CAAC,EAAIP,EAAeQ,EAAS,EACvCD,EAAU,CAAC,EAAIN,EAAgBQ,EAAS,EACxC,IAAIC,EAAiBJ,IAAgB,EAAI,KAAK,IAAIH,EAAQD,CAAM,EAAI,KAAK,IAAIA,EAAQC,CAAM,EAC3Fn5C,EAAM,CAAC,EAAI05C,EACX15C,EAAM,CAAC,EAAI05C,EACX/+D,EAAU,CAAC,GAAKm+D,EAAcE,GAAgB,EAAIQ,EAClD7+D,EAAU,CAAC,GAAKo+D,EAAeE,GAAiB,EAAIQ,CACxD,CACA,IAAIh0B,EAAcpR,GAAkBrU,EAAO9P,CAAC,EAC5C,OAAApJ,EAAK83B,EAAOjkC,EAAW,CAAC,EAAG8qC,EAAYv1B,GAAKA,EAAI,EAAE,EAAIpJ,EAAG,CAAC,EAAG2+B,EAAYv1B,GAAKA,EAAI,GAAK,CAAC,EAAIpJ,EAAG,CAAC,EACzFu+B,GAAkBI,EAAav1B,EAAGqpD,CAAS,CACtD,CACA,SAASlB,GAAqB/oD,EAAIilB,EAAQolC,EAAW,CACjD,IAAI1lD,EAAU3E,EAAG,QAAQ,YAAY,EACrC,GAAI,CAACA,EAAG,SAAW,CAACqqD,GAAa1lD,IAAY,IACzC,MAAO,CAAC,EAAG,EAAG,EAAG,CAAC,EAEtB,IAAI8zB,EAAWW,GAAep5B,CAAE,EAC5BsqD,EAAY7xB,EAAS,eAAe,IAAM,WAC1C8xB,EAAOvqD,EAAG,QAAQ,EAClB4nD,EAAUC,GAAc7nD,EAAG,eAAe,EAC1CjP,EAAIw5D,EAAK,EACTv5D,EAAIu5D,EAAK,EAET5lD,IAAY,iBAAoB,CAAC5T,GAAK,CAACC,IACvCD,EAAI,WAAWiP,EAAG,aAAa,GAAG,CAAC,GAAK,EACxChP,EAAI,WAAWgP,EAAG,aAAa,GAAG,CAAC,GAAK,GAE5C,IAAI7O,EAAOJ,EAAI62D,EAAQ,EACnBx2D,EAAMJ,EAAI42D,EAAQ,EAClBh3B,EAAU05B,EAAYrlC,EAAO,CAAC,EAAIA,EAAO,CAAC,EAAI9zB,EAC9C0/B,EAAUy5B,EAAYrlC,EAAO,CAAC,EAAIA,EAAO,CAAC,EAAI7zB,EAWlD,MAAO,CAACD,EAAMC,EAAKw/B,EAASC,CAAO,CACvC,CACA,SAASyB,GAAkBxmC,EAAQ0J,EAAK,EAAG,CACvC,OAAOuuB,GAAUj4B,EAAQq3B,GAAsB3tB,EAAK,CAAC,EAAG,CAAC,CAC7D,CACA,SAAS28B,GAAermC,EAAQiB,EAAO7D,EAAQ0X,EAAG,CAC9C,MAAO,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC7T,EAAO,CAAC,EAAG,CAAC,EAAG7D,CAAM,EAAG,CAAC6D,EAAO7D,CAAM,CAAC,EAAE,IAAI,SAAUsM,EAAK,CAAE,OAAO88B,GAAkBxmC,EAAQ0J,EAAKoL,CAAC,CAAG,CAAC,CAC9H,CACA,SAASysC,GAAQnb,EAAO,CACpB,IAAIwR,EAASxR,EAAM,IAAI,SAAU18B,EAAK,CAAE,OAAOA,EAAI,CAAC,CAAG,CAAC,EACpDmuC,EAASzR,EAAM,IAAI,SAAU18B,EAAK,CAAE,OAAOA,EAAI,CAAC,CAAG,CAAC,EACpDrE,EAAO,KAAK,IAAI,MAAM,KAAM,EAAc,CAAC,EAAGm+B,EAAOoU,CAAM,EAAG,EAAK,CAAC,EACpEtyC,EAAM,KAAK,IAAI,MAAM,KAAM,EAAc,CAAC,EAAGk+B,EAAOqU,CAAM,EAAG,EAAK,CAAC,EACnE/X,EAAQ,KAAK,IAAI,MAAM,KAAM,EAAc,CAAC,EAAG0D,EAAOoU,CAAM,EAAG,EAAK,CAAC,EACrE7X,EAAS,KAAK,IAAI,MAAM,KAAM,EAAc,CAAC,EAAGyD,EAAOqU,CAAM,EAAG,EAAK,CAAC,EACtE6mB,EAAY5+B,EAAQz6B,EACpBs5D,EAAa5+B,EAASz6B,EAC1B,MAAO,CACH,KAAMD,EACN,IAAKC,EACL,MAAOw6B,EACP,OAAQC,EACR,MAAO2+B,EACP,OAAQC,CACZ,CACJ,CACA,SAASC,GAAc5+D,EAAQiB,EAAO7D,EAAQ0X,EAAG,CAC7C,IAAIsxB,EAAQC,GAAermC,EAAQiB,EAAO7D,EAAQ0X,CAAC,EACnD,OAAOysC,GAAQnb,CAAK,CACxB,CACA,SAASy4B,GAAa/vB,EAAYgwB,EAAY9mD,EAAWlD,EAAGmyB,EAAc,CACtE,IAAIv7B,EACAzO,EAAS6xC,EAAW,OACpB3V,EAAS2V,EAAW,OACpB3H,EAAe23B,EAAW,OAC1B9yD,EAAK+yD,GAAQ9hE,CAAM,EAAGgE,EAAQ+K,EAAG,YAAa5O,EAAS4O,EAAG,aAC1D0mD,EAAsB16C,EAAU,sBAAsB,EACtD0J,EAAS,CAAC,EAAG,CAAC,EACd1J,IAAcxD,GAAgBwD,CAAS,IACvC0J,EAAS0tB,GAAcnyC,EAAQ,EAAI,GAmBvC,QAjBI2B,EAAO3B,EAAO,sBAAsB,EACpC45D,EAAWj4D,EAAK,KAAO8zD,EAAoB,KAAO16C,EAAU,YACzDA,EAAU,YAAc,GAAK0J,EAAO,CAAC,EACxCk1C,EAAUh4D,EAAK,IAAM8zD,EAAoB,IAAM16C,EAAU,WACtDA,EAAU,WAAa,GAAK0J,EAAO,CAAC,EACvCg9C,EAAY9/D,EAAK,MACjB+/D,EAAa//D,EAAK,OAClBogE,EAAMznC,GAAWziB,EAAGmyB,EAAcE,CAAY,EAC9Ch7B,EAAKyyD,GAAcI,EAAK/9D,EAAO7D,EAAQ0X,CAAC,EAAGmqD,EAAW9yD,EAAG,KAAM+yD,EAAU/yD,EAAG,IAAKg9B,EAAYh9B,EAAG,MAAOi9B,EAAaj9B,EAAG,OACvHgzD,EAAY34B,GAAkBw4B,EAAK7lC,EAAQrkB,CAAC,EAC5Cu0B,EAAaxR,GAAMsnC,EAAW,CAACF,EAAUC,CAAO,CAAC,EACjDE,EAAa,CACbvI,EAAWxtB,EAAW,CAAC,EAAIq1B,EAAYv1B,EACvCytB,EAAUvtB,EAAW,CAAC,EAAIs1B,EAAav1B,CAC3C,EACIpE,EAAS,CAAC,EAAG,CAAC,EACd3oB,EAAQ,EACL,EAAEA,EAAQ,IAAI,CACjB,IAAIusB,EAAsBjS,GAAOsQ,EAAcnyB,CAAC,EAChDpJ,EAAK83B,EAAO3L,GAAM2O,GAAkBoC,EAAqBw2B,EAAYtqD,CAAC,EAAG0xB,GAAkBoC,EAAqBu2B,EAAWrqD,CAAC,CAAC,EAAG,CAAC,EAAGkwB,EAAO,CAAC,EAAIt5B,EAAG,CAAC,EAAGs5B,EAAO,CAAC,EAAIt5B,EAAG,CAAC,EACvK,IAAI2zD,EAAO9nC,GAAWziB,EAAGmyB,EAAc/N,GAAmB8L,EAAQlwB,CAAC,EAAGqyB,CAAY,EAC9E96B,EAAKuyD,GAAcS,EAAMp+D,EAAO7D,EAAQ0X,CAAC,EAAGwqD,EAAWjzD,EAAG,KAAMkzD,EAAUlzD,EAAG,IAC7EmzD,EAAWF,EAAWzI,EACtB4I,EAAUF,EAAU3I,EACxB,GAAI,EAAI4I,CAAQ,EAAI,GAAK,EAAIC,CAAO,EAAI,EACpC,MAEJL,EAAW,CAAC,GAAKI,EACjBJ,EAAW,CAAC,GAAKK,CACrB,CACA,OAAOz6B,EAAO,IAAI,SAAUjwB,EAAG,CAAE,OAAO,KAAK,MAAMA,CAAC,CAAG,CAAC,CAC5D,CACA,SAASs4C,GAAiCzmB,EAAYR,EAAOs5B,EAAgB,CACzE,IAAIv5B,EAAOS,EAAW,SAAW,GAC7B9xB,EAAIqxB,EAAO,EAAI,EACfw5B,EAAYv5B,EAAM,IAAI,SAAU18B,EAAK,CAAE,OAAO88B,GAAkBI,EAAYl9B,EAAKoL,CAAC,CAAG,CAAC,EACtFzP,EAAOq6D,EAAe,KAAMp6D,EAAMo6D,EAAe,IACrD,OAAOC,EAAU,IAAI,SAAUj2D,EAAK,CAChC,MAAO,CAACA,EAAI,CAAC,EAAIrE,EAAMqE,EAAI,CAAC,EAAIpE,CAAG,CACvC,CAAC,CACL,CACA,SAASgwC,GAAYF,EAAK,CACtB,OAAO,KAAK,KAAKA,EAAI,CAAC,EAAIA,EAAI,CAAC,EAAIA,EAAI,CAAC,EAAIA,EAAI,CAAC,CAAC,CACtD,CACA,SAASwqB,GAAgB9uD,EAAMC,EAAM,CACjC,OAAOukC,GAAY,CACfvkC,EAAK,CAAC,EAAID,EAAK,CAAC,EAChBC,EAAK,CAAC,EAAID,EAAK,CAAC,CACpB,CAAC,CACL,CACA,SAAS,GAAaA,EAAMC,EAAMqT,EAAMze,EAAK,CACrCye,IAAS,SAAUA,EAAO,GAC1Bze,IAAQ,SAAUA,EAAMkL,GAAOC,EAAMC,CAAI,GAC7C,IAAI9P,EAAQ2+D,GAAgB9uD,EAAMC,CAAI,EACtC,MAAO,CACH,UAAW,8BAA8B,OAAOD,EAAK,CAAC,EAAG,MAAM,EAAE,OAAOA,EAAK,CAAC,EAAG,aAAa,EAAE,OAAOnL,EAAK,cAAc,EAAE,OAAOye,EAAM,GAAG,EAC5I,MAAO,GAAG,OAAOnjB,EAAO,IAAI,CAChC,CACJ,CACA,SAASoxC,GAAoBltC,EAAUif,EAAM,CAEzC,QADIgiB,EAAQ,CAAC,EACJn0B,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpCm0B,EAAMn0B,EAAK,CAAC,EAAI,UAAUA,CAAE,EAEhC,IAAIjJ,EAASo9B,EAAM,OACfnhC,EAAImhC,EAAM,OAAO,SAAUj0B,EAAMzI,EAAK,CAAE,OAAOyI,EAAOzI,EAAI,CAAC,CAAG,EAAG,CAAC,EAAIV,EACtE9D,EAAIkhC,EAAM,OAAO,SAAUj0B,EAAMzI,EAAK,CAAE,OAAOyI,EAAOzI,EAAI,CAAC,CAAG,EAAG,CAAC,EAAIV,EAC1E,MAAO,CACH,UAAW,6BAA6B,OAAO/D,EAAG,MAAM,EAAE,OAAOC,EAAG,aAAa,EAAE,OAAOC,EAAU,aAAa,EAAE,OAAOif,EAAM,GAAG,CACvI,CACJ,CACA,SAASwtB,GAAS/5C,EAAOguC,EAAU,CAC/B,IAAIzX,EAAOv2B,EAAMguC,CAAQ,EACzB,OAAIr7B,GAAS4jB,CAAI,EACN,EAAS,EAAS,CAAC,EAAGv2B,CAAK,EAAGu2B,CAAI,EAEtCv2B,CACX,CACA,SAASknE,GAAQ9hE,EAAQ,CACrB,IAAIqxC,EAAYrxC,GAAU,CAACsN,GAAYtN,EAAO,WAAW,EACrD4iE,EAAc,EACdC,EAAe,EACfpC,EAAc,EACdC,EAAe,EACfoC,EAAW,EACXC,EAAY,EACZC,EAAe,EACfC,EAAgB,EAChB5vD,EAAW,EACXC,EAAY,EACZ4vD,EAAiB,EACjBC,EAAkB,EAClB5vD,EAAW,IACXC,EAAY,IACZ4vD,EAAiB,IACjBC,EAAkB,IAClBC,EAAiB,EACjBC,EAAkB,EAClBC,EAAM,GACV,GAAIxjE,EACA,GAAI,CAACqxC,GAAarxC,EAAO,gBAAiB,CAEtC,IAAIwhE,EAAOxhE,EAAO,QAAQ,EAC1BwjE,EAAM,GACNZ,EAAcpB,EAAK,MACnBqB,EAAerB,EAAK,OACpBsB,EAAWF,EACXG,EAAYF,EACZG,EAAeJ,EACfK,EAAgBJ,EAChBpC,EAAcmC,EACdlC,EAAemC,CACnB,KACK,CAED,IAAInzB,EAAWW,GAAerwC,CAAM,EAChCyjE,EAAczjE,EAAO,MACrB0jE,EAAYh0B,EAAS,WAAW,IAAM,aACtCi0B,EAAa,WAAWj0B,EAAS,iBAAiB,CAAC,GAAK,EACxDk0B,EAAc,WAAWl0B,EAAS,kBAAkB,CAAC,GAAK,EAC1Dm0B,EAAY,WAAWn0B,EAAS,gBAAgB,CAAC,GAAK,EACtDo0B,EAAe,WAAWp0B,EAAS,mBAAmB,CAAC,GAAK,EAC5Dq0B,EAAc,WAAWr0B,EAAS,aAAa,CAAC,GAAK,EACrDs0B,EAAe,WAAWt0B,EAAS,cAAc,CAAC,GAAK,EACvDu0B,EAAa,WAAWv0B,EAAS,YAAY,CAAC,GAAK,EACnDw0B,EAAgB,WAAWx0B,EAAS,eAAe,CAAC,GAAK,EACzDy0B,EAAoBJ,EAAcC,EAClCI,EAAkBH,EAAaC,EAC/BG,EAAmBV,EAAaC,EAChCU,EAAiBT,EAAYC,EAC7BxjB,EAAmB6jB,EAAoBE,EACvCjkB,EAAiBgkB,EAAkBE,EACnClqD,EAAWs1B,EAAS,UAAU,EAC9B/oB,EAAiB,EACjBC,EAAkB,EAEtB,GAAI,eAAgB5mB,EAAQ,CACxB,IAAIye,EAAgB,KACpB,GAAIrE,IAAa,WAAY,CACzB,IAAIy3B,GAAazB,GAAcpwC,EAAQuX,GAAgBvX,CAAM,CAAC,EAC9Dye,EAAgBozB,GAAW,YAC/B,MAEIpzB,EAAgBze,EAAO,cAE3B,GAAIye,EAAe,CACf,IAAI8lD,GAAiBl0B,GAAe5xB,CAAa,EACjDkI,EAAiB,WAAW49C,GAAe,OAAO,CAAC,EACnD39C,EAAkB,WAAW29C,GAAe,QAAQ,CAAC,CACzD,CACJ,CACAlxD,EAAW,KAAK,IAAI8wD,EAAmB/xD,GAAgBs9B,EAAS,UAAU,EAAG/oB,CAAc,GAAK,CAAC,EACjGrT,EAAY,KAAK,IAAI8wD,EAAiBhyD,GAAgBs9B,EAAS,WAAW,EAAG9oB,CAAe,GAAK,CAAC,EAClGrT,EAAWnB,GAAgBs9B,EAAS,UAAU,EAAG/oB,CAAc,EAC/DnT,EAAYpB,GAAgBs9B,EAAS,WAAW,EAAG9oB,CAAe,EAC9D,MAAMrT,CAAQ,IACdA,EAAW,KAEX,MAAMC,CAAS,IACfA,EAAY,KAEhB8vD,EAAiBlxD,GAAgBqxD,EAAY,MAAO,CAAC,GAAK,EAC1DF,EAAkBnxD,GAAgBqxD,EAAY,OAAQ,CAAC,GAAK,EAC5DX,EAAW,WAAWpzB,EAAS,OAAO,CAAC,GAAK,EAC5CqzB,EAAY,WAAWrzB,EAAS,QAAQ,CAAC,GAAK,EAC9CszB,EAAe,EAAIF,EAAWQ,CAAc,EAAI,EAC1ChxD,GAAQe,EAAUiwD,GAAkBR,EAAUvvD,CAAQ,EACtDuvD,EACNG,EAAgB,EAAIF,EAAYQ,CAAe,EAAI,EAC7CjxD,GAAQgB,EAAWiwD,GAAmBR,EAAWvvD,CAAS,EAC1DuvD,EACNH,EAAcI,EACdH,EAAeI,EACfxC,EAAcuC,EACdtC,EAAeuC,EACXS,GACAN,EAAiB7vD,EACjB8vD,EAAkB7vD,EAClB0vD,EAAiB7vD,EACjB8vD,EAAkB7vD,EAClB0vD,EAAeJ,EAActiB,EAC7B2iB,EAAgBJ,EAAeziB,IAG/BgjB,EAAiB7vD,EAAW+sC,EAC5B+iB,EAAkB7vD,EAAY4sC,EAC9B8iB,EAAiB7vD,EAAWitC,EAC5B6iB,EAAkB7vD,EAAY8sC,EAC9BwiB,EAAcI,EAAe1iB,EAC7BuiB,EAAeI,EAAgB7iB,GAEnCqgB,EAAcuC,EAAemB,EAC7BzD,EAAeuC,EAAgBmB,CACnC,CAEJ,MAAO,CACH,IAAKZ,EACL,YAAaZ,EACb,aAAcC,EACd,YAAapC,EACb,aAAcC,EACd,aAAcsC,EACd,cAAeC,EACf,eAAgBK,EAChB,gBAAiBC,EACjB,SAAUT,EACV,UAAWC,EACX,SAAU1vD,EACV,UAAWC,EACX,SAAUC,EACV,UAAWC,EACX,eAAgB0vD,EAChB,gBAAiBC,EACjB,eAAgBC,EAChB,gBAAiBC,CACrB,CACJ,CACA,SAASxU,GAAe1lB,EAAOjK,EAAW,CACtC,OAAOtrB,GAAOsrB,EAAY,EAAIiK,EAAM,CAAC,EAAIA,EAAM,CAAC,EAAGjK,EAAY,EAAIiK,EAAM,CAAC,EAAIA,EAAM,CAAC,CAAC,CAC1F,CACA,SAASq7B,IAAkB,CACvB,MAAO,CACH,KAAM,EAAG,IAAK,EACd,MAAO,EAAG,OAAQ,EAClB,MAAO,EACP,OAAQ,EACR,WAAY,EAAG,UAAW,EAC1B,YAAa,EAAG,aAAc,EAC9B,YAAa,EAAG,aAAc,CAClC,CACJ,CACA,SAASC,GAAextD,EAAItV,EAAM,CAC9B,IAAI+iE,EAASztD,IAAOM,GAAgBN,CAAE,GAAKA,IAAOK,GAAmBL,CAAE,EACnE0tD,EAAc,CACd,WAAY1tD,EAAG,WACf,UAAWA,EAAG,UACd,YAAaA,EAAG,YAChB,aAAcA,EAAG,aACjB,YAAaA,EAAG,YAChB,aAAcA,EAAG,aACjB,SAAU,EACd,EACA,OAAIytD,IACAC,EAAY,aAAe,KAAK,IAAIhjE,EAAK,OAAQgjE,EAAY,YAAY,EACzEA,EAAY,aAAe,KAAK,IAAIhjE,EAAK,OAAQgjE,EAAY,YAAY,GAE7EA,EAAY,SAAWt0B,GAAep5B,CAAE,EAAE,UAAU,IAAM,UACnD,EAAS,EAAS,CAAC,EAAGtV,CAAI,EAAGgjE,CAAW,CACnD,CACA,SAASC,GAAwBxqD,EAAU+V,EAAMlZ,EAAI4tD,EAAW,CAC5D,IAAIz8D,EAAOgS,EAAS,KAAMyoB,EAAQzoB,EAAS,MAAO/R,EAAM+R,EAAS,IAAK0oB,EAAS1oB,EAAS,OACpF0qD,EAAU30C,EAAK,IACf40C,EAAW50C,EAAK,KAChBxuB,EAAO,CACP,KAAMojE,EAAW38D,EACjB,IAAK08D,EAAUz8D,EACf,MAAO08D,EAAWliC,EAClB,OAAQiiC,EAAUhiC,EAClB,MAAOD,EAAQz6B,EACf,OAAQ06B,EAASz6B,CACrB,EACA,OAAI4O,GAAM4tD,EACCJ,GAAextD,EAAItV,CAAI,EAE3BA,CACX,CACA,SAASkxC,GAAc57B,EAAI4tD,EAAW,CAClC,IAAIz8D,EAAO,EACPC,EAAM,EACNrE,EAAQ,EACR7D,EAAS,EAEb,GAAI8W,EAAI,CACJ,IAAI07B,EAAa17B,EAAG,sBAAsB,EAC1C7O,EAAOuqC,EAAW,KAClBtqC,EAAMsqC,EAAW,IACjB3uC,EAAQ2uC,EAAW,MACnBxyC,EAASwyC,EAAW,MACxB,CACA,IAAIhxC,EAAO,CACP,KAAMyG,EACN,IAAKC,EACL,MAAOrE,EACP,OAAQ7D,EACR,MAAOiI,EAAOpE,EACd,OAAQqE,EAAMlI,CAClB,EACA,OAAI8W,GAAM4tD,EACCJ,GAAextD,EAAItV,CAAI,EAE3BA,CACX,CACA,SAASgvD,GAAelnB,EAAU,CAC9B,IAAIh7B,EAAKg7B,EAAS,MAAOiF,EAAYjgC,EAAG,UAAWyyD,EAAYzyD,EAAG,UAC9DM,EAAK06B,EAAS,SAAS,EAAGm5B,EAAc7zD,EAAG,YAAa8zD,EAAe9zD,EAAG,aAAcy0D,EAAMz0D,EAAG,IAAKo7B,EAAkBp7B,EAAG,gBAC/H,MAAI,CAAC2/B,GAAa80B,GAAOtC,EACd8D,GAA4B9D,EAAW0B,EAAaC,CAAY,EAEpE14B,CACX,CACA,SAAS2f,GAAkBF,EAAiB1sC,EAASN,EAAYkH,EAAO,CACpE,IAAIob,EACJ,GAAI0qB,EACA1qB,EAAY0qB,UAEP1sC,EACLgiB,EAAY,CAAC,EAAG,CAAC,MAEhB,CACD,IAAIl/B,EAAS4c,EAAW,OACxBsiB,EAAY+lC,GAAajlE,EAAQ8jB,CAAK,CAC1C,CACA,OAAOob,CACX,CACA,SAAS+lC,GAAajlE,EAAQ8jB,EAAO,CACjC,GAAK9jB,EAGL,KAAIknD,EAAMlnD,EAAO,aAAa,eAAe,GAAK,GAC9CklE,EAAYllE,EAAO,aAAa,gBAAgB,EAEpD,GADA8jB,EAAM,IAAMojC,EACR,EAACge,EAGL,KAAIt9B,EAAM,CAAC,EAAG,CAAC,EACf,OAACs9B,EAAU,QAAQ,GAAG,EAAI,KAAQt9B,EAAI,CAAC,EAAI,IAC1Cs9B,EAAU,QAAQ,GAAG,EAAI,KAAQt9B,EAAI,CAAC,EAAI,GAC1Cs9B,EAAU,QAAQ,GAAG,EAAI,KAAQt9B,EAAI,CAAC,EAAI,IAC1Cs9B,EAAU,QAAQ,GAAG,EAAI,KAAQt9B,EAAI,CAAC,EAAI,GACpCA,GACX,CACA,SAASyc,GAAiBlb,EAAOyB,EAAM,CACnC,MAAO,CACHlQ,GAAKkQ,EAAMzB,EAAM,CAAC,CAAC,EACnBzO,GAAKkQ,EAAMzB,EAAM,CAAC,CAAC,EACnBzO,GAAKkQ,EAAMzB,EAAM,CAAC,CAAC,EACnBzO,GAAKkQ,EAAMzB,EAAM,CAAC,CAAC,CACvB,CACJ,CACA,SAASkG,GAAwB5gC,EAAI,CACjC,IAAIrG,EAAOqG,EAAG,KAAMpG,EAAMoG,EAAG,IAAKoF,EAAOpF,EAAG,KAAMqF,EAAOrF,EAAG,KAAM4tB,EAAO5tB,EAAG,KAAMu0C,EAAOv0C,EAAG,KAC5F,OAAO41C,GAAiB,CAACxwC,EAAMC,EAAMuoB,EAAM2mB,CAAI,EAAG,CAAC56C,EAAMC,CAAG,CAAC,CACjE,CACA,SAAS88D,GAAWh0C,EAAMi0C,EAAW,CACjCj0C,EAAKi0C,EAAY,eAAiB,aAAa,EAAE,QAAQ,SAAU3+B,EAAM,CACrEA,EAAK,OAASA,EAAK,MAAMtV,CAAI,CACjC,CAAC,CACL,CACA,SAASk0C,GAAWl0C,EAAMi0C,EAAW,CACjC,IAAIE,EAAYF,EAAY,eAAiB,cACzCG,EAAQp0C,EAAKm0C,CAAS,EACyBC,GAAM,OAAO,IAAO,IACnEJ,GAAWh0C,EAAMi0C,CAAS,EAEgBG,GAAM,MAAM,EAC1Dp0C,EAAKm0C,CAAS,EAAI,IACtB,CACA,SAASp3B,GAAc1tC,EAAOglE,EAAe,CACzC,GAAIA,EAAe,CACf,IAAIx8B,EAAgBsE,GAAyBk4B,CAAa,EAC1Dx8B,EAAc,UAAY,EAAS,EAAS,CAAC,EAAGA,EAAc,SAAS,EAAGxoC,CAAK,CACnF,CACA,MAAO,CACH,MAAOA,EACP,QAASoR,GAAQpR,CAAK,EAAE,IAAI,SAAU7J,EAAM,CAAE,MAAO,GAAG,OAAO,GAAWA,EAAM,GAAG,EAAG,IAAI,EAAE,OAAO6J,EAAM7J,CAAI,EAAG,GAAG,CAAG,CAAC,EAAE,KAAK,EAAE,CACpI,CACJ,CACA,SAAS01D,GAAmBoZ,EAAWC,EAAWF,EAAe,CAC7D,IAAIp6B,EAAiBs6B,EAAU,gBAAkBA,EAAU,UAC3D,OAAO,EAAS,EAAS,CAAC,EAAGx3B,GAAc,EAAS,EAAS,EAAS,CAAC,EAAGu3B,EAAU,KAAK,EAAGC,EAAU,KAAK,EAAG,CAAE,UAAWt6B,CAAe,CAAC,EAAGo6B,CAAa,CAAC,EAAG,CAAE,eAAgBp6B,EAAgB,UAAWq6B,EAAU,SAAU,CAAC,CACrO,CACA,SAAS5d,GAAWpe,EAAU,EAAGme,EAAQ+d,EAAe,CACpD,IAAI7hD,EAAQ,EAAE,MACTA,EAAM,QACPA,EAAM,MAAQ,CAAC,GAEnB,IAAImlC,EAAa,EAAS,EAAS,CAAC,EAAGrB,CAAM,EAAG,CAAE,OAAQne,EAAS,MAAM,OAAQ,QAAS,EAAE,QAAS,QAAS,EAAE,QAAS,WAAY,EAAE,WAAY,cAAeA,EAAU,SAAUA,EAAU,MAAO3lB,EAAM,MAAO,UAAW,EAAE,UAAW,eAAgB,EAAE,eAAgB,YAAa,CAAC,CAAC,EAAE,YAAa,UAAW,EAAE,YAAc,GAAO,SAAU,UAAY,CAC5VA,EAAM,aAAe,EACzB,EAAG,SAAU,UAAY,CACrB,IAAIrV,GACHA,EAAK,EAAE,QAAU,MAAQA,IAAO,QAAkBA,EAAG,KAAK,CAAC,CAChE,CAAE,CAAC,EACP,OAAKqV,EAAM,aAGD6hD,IACN7hD,EAAM,UAAYmlC,GAHlBnlC,EAAM,aAAe,GAKlBmlC,CACX,CACA,SAASD,GAAcvf,EAAU,EAAGme,EAAQ,CACxC,IAAI9jC,EAAQ,EAAE,MACV1H,EAAS,WAAYwrC,EAASA,EAAO,OAAS,EAAE,OACpD,OAAK9jC,EAAM,QACPA,EAAM,MAAQ,CAAC,GAEZ,EAAS,EAAS,CAAE,OAAQ1H,CAAO,EAAGwrC,CAAM,EAAG,CAAE,SAAUne,EAAU,OAAQA,EAAS,MAAM,OAAQ,QAAS,EAAE,QAAS,QAAS,EAAE,QAAS,WAAY,EAAE,WAAY,cAAeA,EAAU,UAAW3lB,EAAM,UAAW,SAAU,EAAE,SAAU,MAAOA,EAAM,MAAO,YAAa,CAAC,CAAC,EAAE,WAAY,CAAC,CAC9S,CACA,SAAS2pC,GAAWhkB,EAAU9yC,EAAMsa,EAAU,CAC1Cw4B,EAAS,SAAS,GAAG9yC,EAAMsa,CAAQ,CACvC,CACA,SAAS62C,GAAare,EAAU9yC,EAAMixD,EAAQge,EAAWngB,EAAW,CAChE,OAAOhc,EAAS,aAAa9yC,EAAMixD,EAAQge,EAAWngB,CAAS,CACnE,CACA,SAAS,GAAiBxuC,EAAI4uD,EAAW,CACrC,OAAO9uD,GAAUE,CAAE,EAAE,iBAAiBA,EAAI4uD,CAAS,CACvD,CACA,SAASC,GAAYvW,EAAOtxC,EAAS8nD,EAA4B,CAC7D,IAAIC,EAAe,CAAC,EAChBC,EAAa,CAAC,EAClB,OAAO1W,EAAM,OAAO,SAAU9oB,EAAM,CAChC,IAAI9vC,EAAO8vC,EAAK,KAChB,GAAIu/B,EAAarvE,CAAI,GAAK,CAACsnB,EAAQ,KAAK,SAAU1mB,EAAQ,CAAE,OAAOkvC,EAAKlvC,CAAM,CAAG,CAAC,EAC9E,MAAO,GAEX,GAAI,CAACwuE,GAA8Bt/B,EAAK,UAAW,CAC/C,GAAIw/B,EAAWx/B,EAAK,SAAS,EACzB,MAAO,GAEXw/B,EAAWx/B,EAAK,SAAS,EAAI,EACjC,CACA,OAAAu/B,EAAarvE,CAAI,EAAI,GACd,EACX,CAAC,CACL,CACA,SAASuvE,GAAOh5D,EAAIC,EAAI,CACpB,OAAOD,IAAOC,GAAOD,GAAM,MAAQC,GAAM,IAC7C,CACA,SAASguC,IAAc,CAEnB,QADIzrC,EAAS,CAAC,EACLsF,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpCtF,EAAOsF,CAAE,EAAI,UAAUA,CAAE,EAG7B,QADIjJ,EAAS2D,EAAO,OAAS,EACpB1D,EAAI,EAAGA,EAAID,EAAQ,EAAEC,EAAG,CAC7B,IAAI1X,EAAQob,EAAO1D,CAAC,EACpB,GAAI,CAACsB,GAAYhZ,CAAK,EAClB,OAAOA,CAEf,CACA,OAAOob,EAAO3D,CAAM,CACxB,CACA,SAASkoD,GAAQjjD,EAAK6hB,EAAM,CACxB,IAAI2hC,EAAS,CAAC,EACV2R,EAAY,CAAC,EACjB,OAAAn1D,EAAI,QAAQ,SAAUiG,EAAIzQ,EAAO,CAC7B,IAAI4/D,EAAWvzC,EAAK5b,EAAIzQ,EAAOwK,CAAG,EAC9Bq1D,EAAWF,EAAU,QAAQC,CAAQ,EACrCE,EAAQ9R,EAAO6R,CAAQ,GAAK,CAAC,EAC7BA,IAAa,KACbF,EAAU,KAAKC,CAAQ,EACvB5R,EAAO,KAAK8R,CAAK,GAErBA,EAAM,KAAKrvD,CAAE,CACjB,CAAC,EACMu9C,CACX,CACA,SAAS+R,GAAWv1D,EAAK6hB,EAAM,CAC3B,IAAI2hC,EAAS,CAAC,EACV2R,EAAY,CAAC,EACjB,OAAAn1D,EAAI,QAAQ,SAAUiG,EAAIzQ,EAAO,CAC7B,IAAI4/D,EAAWvzC,EAAK5b,EAAIzQ,EAAOwK,CAAG,EAC9Bs1D,EAAQH,EAAUC,CAAQ,EACzBE,IACDA,EAAQ,CAAC,EACTH,EAAUC,CAAQ,EAAIE,EACtB9R,EAAO,KAAK8R,CAAK,GAErBA,EAAM,KAAKrvD,CAAE,CACjB,CAAC,EACMu9C,CACX,CACA,SAAS,GAAKxjD,EAAK,CACf,OAAOA,EAAI,OAAO,SAAUkE,EAAMC,EAAK,CACnC,OAAOD,EAAK,OAAOC,CAAG,CAC1B,EAAG,CAAC,CAAC,CACT,CACA,SAASkrC,IAAY,CAEjB,QADItrC,EAAO,CAAC,EACHC,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACpCD,EAAKC,CAAE,EAAI,UAAUA,CAAE,EAE3B,OAAAD,EAAK,KAAK,SAAUzf,EAAGC,EAAG,CAAE,OAAO,EAAIA,CAAC,EAAI,EAAID,CAAC,CAAG,CAAC,EAC9Cyf,EAAK,CAAC,CACjB,CACA,SAAS60B,GAAyB7mC,EAAQ0J,EAAK,EAAG,CAC9C,OAAOuuB,GAAUtB,GAAO32B,EAAQ,CAAC,EAAGq3B,GAAsB3tB,EAAK,CAAC,EAAG,CAAC,CACxE,CACA,SAASq8B,GAAgBxW,EAAO,EAAG,CAC/B,IAAI7jB,EACAy6B,EAAO5W,EAAM,KAAMqX,EAAarX,EAAM,WACtCza,EAAIqxB,EAAO,EAAI,EACnB,OAAAz6B,EAAK83B,EAAOqD,GAAyBD,EAAY,CAAC,EAAE,MAAO,EAAE,KAAK,EAAG9xB,CAAC,EAAG,CAAC,EAAG,EAAE,MAAQpJ,EAAG,CAAC,EAAG,EAAE,MAAQA,EAAG,CAAC,EACrG,CACX,CACA,SAAS+3D,GAAiBzjE,EAAQ0J,EAAKyhB,EAAOrW,EAAG,CAC7C,GAAI,CAACqW,EAAM,CAAC,GAAK,CAACA,EAAM,CAAC,EACrB,OAAOzhB,EAEX,IAAIg6D,EAASl9B,GAAkBxmC,EAAQ,CAACo4D,GAAWjtC,EAAM,CAAC,GAAK,CAAC,EAAG,CAAC,EAAGrW,CAAC,EACpE6uD,EAASn9B,GAAkBxmC,EAAQ,CAAC,EAAGo4D,GAAWjtC,EAAM,CAAC,GAAK,CAAC,CAAC,EAAGrW,CAAC,EACpE8uD,EAAYp9B,GAAkBxmC,EAAQ,CACtCmrB,EAAM,CAAC,EAAImqB,GAAYouB,CAAM,EAC7Bv4C,EAAM,CAAC,EAAImqB,GAAYquB,CAAM,CACjC,EAAG7uD,CAAC,EACJ,OAAO6iB,GAAKjuB,EAAKk6D,CAAS,CAC9B,CACA,SAASC,GAAetyE,EAAOoY,EAAMm6D,EAAY,CAC7C,OAAOA,EAAa,GAAG,OAAOvyE,EAAQoY,EAAO,IAAK,GAAG,EAAI,GAAG,OAAOpY,EAAO,IAAI,CAClF,CACA,SAASmnD,GAAYh3C,EAAG,CACpB,OAAO,EAAIA,CAAC,GAAK,GAAW,EAAIA,CACpC,CACA,SAASklD,GAA0B/gB,EAAU,CACzC,OAAO,SAAUa,EAAU,CACvB,GAAI,CAACA,EAAS,WAAWb,CAAQ,EAC7B,MAAO,GAEX,IAAIhyC,EAAO04C,GAAa7F,EAAUb,CAAQ,EACtCse,EAAMtwD,EAAK,IACf,OAAKswD,EAGE52C,GAAO,wBAAwB,OAAO42C,CAAG,CAAC,EAFtC,EAGf,CACJ,CACA,SAASuC,GAAsB7gB,EAAUk+B,EAAY,CACjD,OAAIA,IAAe,SAAUA,EAAa,CAACl+B,CAAQ,GAC5C,SAAUa,EAAUp0C,EAAG,CAC1B,GAAIA,EAAE,UACF,OAAIyxE,EAAW,KAAK,SAAUnwE,EAAM,CAAE,OAAOtB,EAAE,cAAgBsB,CAAM,CAAC,EAC3DtB,EAAE,gBAGF,GAGf,IAAI2K,EAAS3K,EAAE,WAAW,OAC1B,OAAOkhB,GAASvW,EAAQsQ,GAAO,WAAW,CAAC,IAAM,CAACs4B,GAAYryB,GAASvW,EAAQsQ,GAAOs4B,CAAQ,CAAC,EACnG,CACJ,CACA,SAAS4B,GAAqBtM,EAAY5L,EAAO9rB,EAAO,CACpD,IAAIiI,EACAsvB,EAAcL,GAAMQ,EAAY,CAChC,KAAM,SAAUz5B,EAAG,CAAE,OAAOA,EAAI,IAAM6tB,EAAM,WAAa,EACzD,KAAM,SAAU7tB,EAAG,CAAE,OAAOA,EAAI,IAAM6tB,EAAM,YAAc,CAC9D,CAAC,EACGy0C,EAAsB7oC,EAAW,MAAM,EAAG13B,EAAQ,EAAI,OAAYA,CAAK,EACvEwgE,EAAuB9oC,EAAW,MAAM,EAAG13B,EAAQ,EAAI,OAAYA,EAAQ,CAAC,EAC5EygE,EAAqB/oC,EAAW13B,CAAK,GAAK,GAC1C0gE,EAAqB1gE,EAAQ,EAAI,CAAC,EAAI03B,EAAW,MAAM13B,CAAK,EAC5D2gE,EAAsB3gE,EAAQ,EAAI,CAAC,EAAI03B,EAAW,MAAM13B,EAAQ,CAAC,EACjE4gE,EAAkBrpC,EAAY,MAAM,EAAGv3B,EAAQ,EAAI,OAAYA,CAAK,EACpE6gE,EAAmBtpC,EAAY,MAAM,EAAGv3B,EAAQ,EAAI,OAAYA,EAAQ,CAAC,EACzEikC,GAAkBh8B,EAAKsvB,EAAYv3B,CAAK,KAAO,MAAQiI,IAAO,OAASA,EAAKivB,GAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EACzF4pC,EAAiB9gE,EAAQ,EAAI,CAAC,EAAIu3B,EAAY,MAAMv3B,CAAK,EACzD+gE,EAAkB/gE,EAAQ,EAAI,CAAC,EAAIu3B,EAAY,MAAMv3B,EAAQ,CAAC,EAC9DghE,EAAkB/8B,EAAiB,CAACA,CAAc,EAAI,CAAC,EACvDg9B,EAAuBhqC,GAAM2pC,CAAe,EAC5CM,EAAwBjqC,GAAM4pC,CAAgB,EAC9CM,EAAsBlqC,GAAM6pC,CAAc,EAC1CM,EAAuBnqC,GAAM8pC,CAAe,EAC5CM,EAAoBrtC,GAASitC,EAAsBE,EAAqB,CAAC,EAC7E,MAAO,CACH,WAAYzpC,EACZ,qBAAsBupC,EACtB,sBAAuBC,EACvB,qBAAsBjqC,GAAM+pC,CAAe,EAC3C,oBAAqBG,EACrB,qBAAsBC,EACtB,kBAAmBC,EACnB,gBAAiBT,EACjB,iBAAkBC,EAClB,eAAgBG,EAAgB,CAAC,EACjC,eAAgBF,EAChB,gBAAiBC,EACjB,oBAAqBR,EACrB,qBAAsBC,EACtB,mBAAoBC,EACpB,mBAAoBC,EACpB,oBAAqBC,CACzB,CACJ,CACA,SAASW,GAAc92D,EAAK,CAIxB,MAHI,CAACA,GAAO,CAACzD,GAASyD,CAAG,GAGrB0G,GAAO1G,CAAG,EACH,GAEJxD,GAAQwD,CAAG,GAAK,WAAYA,CACvC,CACA,SAASioD,GAAaj5D,EAAQ+nE,EAAY,CACtC,OAAK/nE,EAGD0X,GAAO1X,CAAM,EACNA,EAEP,GAASA,CAAM,EACX+nE,EACO,SAAS,cAAc/nE,CAAM,EAEjCA,EAEP,GAAWA,CAAM,EACVA,EAAO,EAEdwX,GAASxX,CAAM,EACRA,EAEP,YAAaA,EACNA,EAAO,QAEXA,EApBI,IAqBf,CACA,SAASivD,GAAcr0C,EAASmtD,EAAY,CACxC,GAAI,CAACntD,EACD,MAAO,CAAC,EAEZ,IAAIotD,EAAcF,GAAcltD,CAAO,EAAI,CAAC,EAAE,MAAM,KAAKA,CAAO,EAAI,CAACA,CAAO,EAC5E,OAAOotD,EAAY,OAAO,SAAU9yD,EAAMlV,EAAQ,CAC9C,OAAI,GAASA,CAAM,GAAK+nE,EACb,EAAc,EAAc,CAAC,EAAGxhC,EAAOrxB,CAAI,EAAG,EAAK,EAAGqxB,EAAO,CAAC,EAAE,MAAM,KAAK,SAAS,iBAAiBvmC,CAAM,CAAC,CAAC,EAAG,EAAK,GAE5HwN,GAAQxN,CAAM,EACdkV,EAAK,KAAK+5C,GAAcjvD,EAAQ+nE,CAAU,CAAC,EAG3C7yD,EAAK,KAAK+jD,GAAaj5D,EAAQ+nE,CAAU,CAAC,EAEvC7yD,EACX,EAAG,CAAC,CAAC,CACT,CACA,SAAS+yD,GAAoBp0D,EAAMC,EAAMorB,EAAW,CAChD,IAAIgoB,EAAMtzC,GAAOC,EAAMC,CAAI,EAAI,KAAK,GAAK,IACzC,OAAAozC,EAAMhoB,GAAa,EAAIgoB,EAAM,IAAMA,EACnCA,EAAMA,GAAO,EAAIA,EAAM,IAAMA,EACtBA,CACX,CACA,SAAS6T,GAAmBzoC,EAAOsY,EAAM,CACrC,IAAIjB,EAAarX,EAAM,WAAY4W,EAAO5W,EAAM,KAC5Cza,EAAIqxB,EAAO,EAAI,EACfhQ,EAAgBQ,GAAOiQ,EAAY9xB,CAAC,EACxC,OAAKqxB,IACDhQ,EAAgBmB,GAAiBnB,EAAe,EAAG,CAAC,GAExDA,EAAc,EAAE,EAAI,EACpBA,EAAc,EAAE,EAAI,EACpBA,EAAc,EAAE,EAAI,EACb0E,GAAoB1E,EAAe0R,CAAI,CAClD,CACA,SAASs9B,GAAkBC,EAAWv9B,EAAM/3B,EAAOqsB,EAAW9rB,EAAW,CACrE,IAAI3E,EAAK83B,EAAO4hC,EAAW,CAAC,EAAGvd,EAAmBn8C,EAAG,CAAC,EAAGo8C,EAAoBp8C,EAAG,CAAC,EAC7E88C,EAAY,EACZC,EAAa,EACjB,GAAIp4C,GAAaw3C,GAAoBC,EAAmB,CACpD,IAAIniD,EAAMkL,GAAO,CAAC,EAAG,CAAC,EAAGg3B,CAAI,EACzBw9B,EAAcx0D,GAAO,CAAC,EAAG,CAAC,EAAGsrB,CAAS,EACtCxyB,EAAO2rC,GAAYzN,CAAI,EACvBy9B,EAAW,KAAK,IAAI3/D,EAAM0/D,CAAW,EAAI17D,EAC7C,GAAI,CAACwyB,EAAU,CAAC,EAEZssB,EAAa6c,EACb9c,EAAYC,EAAa34C,UAEpB,CAACqsB,EAAU,CAAC,EAEjBqsB,EAAY8c,EACZ7c,EAAaD,EAAY14C,MAExB,CAED,IAAIy1D,EAAiBppC,EAAU,CAAC,EAAI0rB,EAChC2d,EAAkBrpC,EAAU,CAAC,EAAI2rB,EACjC2d,EAAY,KAAK,MAAMF,EAAiB19B,EAAK,CAAC,EAAG29B,EAAkB39B,EAAK,CAAC,CAAC,EAC1E69B,EAAW,KAAK,MAAMH,EAAgBC,CAAe,EACrDC,EAAY,IACZA,GAAa,KAAK,GAAK,GAEvBC,EAAW,IACXA,GAAY,KAAK,GAAK,GAE1B,IAAI/L,EAAQ,EACR,EAAI8L,EAAYC,CAAQ,EAAI,KAAK,GAAK,GAAK,EAAID,EAAYC,CAAQ,EAAI,KAAK,GAAK,EAAI,IAIrFA,GAAY,KAAK,IACjB/L,EAAQ8L,EAAYC,EAEpB/L,EAAQ,KAAK,GAAK,EAClBA,GAAS,KAAK,GAAK,EAEdA,EAAQ,KAAK,GAClBA,EAAQ,EAAI,KAAK,GAAKA,EAEjBA,EAAQ,CAAC,KAAK,KACnBA,EAAQ,GAAK,KAAK,GAAKA,GAO3B,IAAIgM,EAAWrwB,GAAY,CAACiwB,EAAiB19B,EAAK,CAAC,EAAG29B,EAAkB39B,EAAK,CAAC,CAAC,CAAC,EAAI,KAAK,IAAI8xB,CAAK,EAClGnR,EAAYmd,EAAW,KAAK,IAAID,CAAQ,EAAIH,EAC5C9c,EAAakd,EAAW,KAAK,IAAID,CAAQ,EAAIF,EACzCrpC,EAAU,CAAC,EAAI,IACfqsB,GAAa,IAEbrsB,EAAU,CAAC,EAAI,IACfssB,GAAc,GAEtB,CACJ,MAEID,EAAYrsB,EAAU,CAAC,EAAI0L,EAAK,CAAC,EACjC4gB,EAAatsB,EAAU,CAAC,EAAI0L,EAAK,CAAC,EAEtC,MAAO,CAAC2gB,EAAWC,CAAU,CACjC,CACA,SAASE,GAAkBJ,EAAel4C,EAAW0Q,EAAOzuB,EAAG,CAC3D,IAAIoZ,EACAoE,EAAQiR,EAAM,MAAO8mC,EAAmB9mC,EAAM,iBAAkB+mC,EAAoB/mC,EAAM,kBAC1FynC,EAAY,EACZC,EAAa,EACbz3C,EAAQ1e,EAAE,MAAO2e,EAAQ3e,EAAE,MAAOszE,EAAatzE,EAAE,WAAY48D,EAAiB58D,EAAE,eAAgBo1D,EAAap1D,EAAE,WAAYq4D,EAAcr4D,EAAE,YAC3IuzE,EAAsB9kD,EAAM,eAC5B+kD,EAAkB,CAAC,EAAG,CAAC,EAAE,IAAI,SAAUriE,EAAO,CAC9C,OAAO,EAAI8kD,EAAc9kD,CAAK,EAAIoiE,EAAoBpiE,CAAK,CAAC,CAChE,CAAC,EACGsiE,EAAkB,CAAC,EAAG,CAAC,EAAE,IAAI,SAAUtiE,EAAO,CAC9C,IAAIokC,EAAOi+B,EAAgBriE,CAAK,EAChC,OAAIokC,IAAS,IACTA,EAAO,EAAIA,GAERA,CACX,CAAC,EACD,GAAI6f,EACAc,EAAYd,EAAW,CAAC,EACxBe,EAAaf,EAAW,CAAC,EACrBr3C,IACKm4C,EAGKC,IACNA,EAAaD,EAAY14C,GAHzB04C,EAAYC,EAAa34C,WAO5B,GAAS81D,CAAU,EACxBpd,GAAaod,EAAa,GAAK/d,EAC/BY,GAAcmd,EAAa,GAAK9d,UAE3B6C,EACLnC,GAAamC,EAAY,CAAC,EAAI,GAAK9C,EACnCY,GAAckC,EAAY,CAAC,EAAI,GAAK7C,UAE/BoH,EAAgB,CACrB,IAAI4O,EAASjW,EAAmBie,EAAgB,CAAC,EAC7C/H,EAASjW,EAAoBge,EAAgB,CAAC,EAC9CE,EAAgB1wB,GAAY,CAACwoB,EAAQC,CAAM,CAAC,EAChDvV,EAAY0G,EAAiB8W,EAAgBlI,EAASiI,EAAgB,CAAC,EACvEtd,EAAayG,EAAiB8W,EAAgBjI,EAASgI,EAAgB,CAAC,CAC5E,KACK,CACD,IAAIE,EAASn/B,GAAY,CAAE,MAAO/lB,EAAO,MAAO/P,EAAO,MAAOC,CAAM,CAAC,EACrEg1D,EAASF,EAAgB,IAAI,SAAUj2D,EAAO7G,EAAG,CAC7C,OAAOg9D,EAAOh9D,CAAC,EAAI6G,CACvB,CAAC,EACDpE,EAAK83B,EAAO2hC,GAAkB,CAACtd,EAAkBC,CAAiB,EAAGme,EAAQn2D,EAAOy4C,EAAel4C,CAAS,EAAG,CAAC,EAAGm4C,EAAY98C,EAAG,CAAC,EAAG+8C,EAAa/8C,EAAG,CAAC,CAC3J,CACA,MAAO,CAGH,UAAW88C,EACX,WAAYC,CAChB,CACJ,CACA,SAASyd,GAAqB/sC,EAAQgtC,EAAI,CACtC,GAAIA,EAAI,CACJ,GAAIhtC,IAAW,OACX,MAAO,CAAE,EAAG,KAAM,EAAG,KAAM,EAE1B,GAAIA,IAAW,MAChB,MAAO,CAAE,EAAG,MAAO,EAAG,KAAM,EAE3B,GAAIA,IAAW,SAChB,MAAO,CAAE,EAAG,MAAO,EAAG,KAAM,EAE3B,GAAIA,IAAW,QAChB,MAAO,CAAE,EAAG,OAAQ,EAAG,KAAM,EAE5B,GAAIA,IAAW,SAChB,MAAO,CAAE,EAAG,MAAO,EAAG,MAAO,EAEjC,IAAIztB,EAAK83B,EAAOrK,EAAO,MAAM,GAAG,EAAG,CAAC,EAAG9zB,EAAOqG,EAAG,CAAC,EAAGo0B,EAAQp0B,EAAG,CAAC,EAC7D06D,EAAaF,GAAqB7gE,GAAQ,EAAE,EAC5CghE,EAAcH,GAAqBpmC,GAAS,EAAE,EAC9CwmC,EAAe,EAAS,EAAS,CAAC,EAAGF,CAAU,EAAGC,CAAW,EAC7DE,EAAmB,CACnB,EAAG,MACH,EAAG,KACP,EACA,OAAID,EAAa,IACbC,EAAiB,EAAID,EAAa,GAElCA,EAAa,IACbC,EAAiB,EAAID,EAAa,GAElCA,EAAa,QACTA,EAAa,GAAK,CAACA,EAAa,IAChCC,EAAiB,EAAID,EAAa,OAElC,CAACA,EAAa,GAAKA,EAAa,IAChCC,EAAiB,EAAID,EAAa,QAGnCC,CACX,CACA,OAAIptC,IAAW,OACJ,CAAE,EAAG,IAAK,EAEjBA,IAAW,QACJ,CAAE,EAAG,MAAO,EAEnBA,IAAW,MACJ,CAAE,EAAG,IAAK,EAEjBA,IAAW,SACJ,CAAE,EAAG,MAAO,EAElBA,EAGDA,IAAW,SACJ,CAAE,MAAO,KAAM,EAEnB,CAAE,MAAOA,CAAO,EALZ,CAAC,CAMhB,CACA,SAAS8oC,GAA4B76B,EAAiBnmC,EAAO7D,EAAQ,CACjE,IAAIsO,EAAKw6D,GAAqB9+B,EAAiB,EAAI,EAAGniC,EAAIyG,EAAG,EAAGxG,EAAIwG,EAAG,EACvE,MAAO,CACH2D,GAAgBpK,EAAGhE,CAAK,GAAK,EAC7BoO,GAAgBnK,EAAG9H,CAAM,GAAK,CAClC,CACJ,CACA,SAASopE,GAAgBpgC,EAAOjN,EAAQxzB,EAAK,CACzC,IAAI6vC,EAAYpP,EAAM,IAAI,SAAU18B,EAAK,CAAE,OAAOmuB,GAAMnuB,EAAKyvB,CAAM,CAAG,CAAC,EACnE+b,EAAYM,EAAU,IAAI,SAAU9rC,EAAK,CAAE,OAAOgvB,GAAOhvB,EAAK/D,CAAG,CAAG,CAAC,EACzE,MAAO,CACH,KAAM6vC,EACN,KAAMN,EACN,OAAQA,EAAU,IAAI,SAAUxrC,EAAK,CAAE,OAAOiuB,GAAKjuB,EAAKyvB,CAAM,CAAG,CAAC,CACtE,CACJ,CACA,SAASstC,GAAkBC,EAAMh6C,EAAM,CACnC,OAAOg6C,EAAK,SAAWh6C,EAAK,QAAUg6C,EAAK,MAAM,SAAUC,EAAQ19D,EAAG,CAClE,IAAI29D,EAASl6C,EAAKzjB,CAAC,EACf49D,EAAWp8D,GAAQk8D,CAAM,EACzBG,EAAWr8D,GAAQm8D,CAAM,EAC7B,OAAIC,GAAYC,EACLL,GAAkBE,EAAQC,CAAM,EAElC,CAACC,GAAY,CAACC,EACZH,IAAWC,EAEf,EACX,CAAC,CACL,CACA,SAAS9L,GAAWp0B,EAAU39B,EAAU8sB,EAAWkxC,EAAUhlD,EAAc,CACvE,IAAIjI,EAAQ4sB,EAAS,OACjB3H,EAAYjlB,EAAM/Q,CAAQ,EAC9B,GAAI,EAAEA,KAAY+Q,GACd,GAAIiI,GAAgB,KAChBjI,EAAM/Q,CAAQ,EAAIgZ,EAClBgd,EAAYhd,MAGZ,QAAAjI,EAAM/Q,CAAQ,EAAI8sB,EACXA,EAGf,OAAIkJ,IAAclJ,GAAakxC,EAAShoC,CAAS,IAAMgoC,EAASlxC,CAAS,EAC9DkJ,GAEXjlB,EAAM/Q,CAAQ,EAAI8sB,EACXA,EACX,CACA,SAASnR,GAAKnzB,EAAO,CACjB,OAAOA,GAAS,EAAI,EAAI,EAC5B,CACA,SAAS,EAAIA,EAAO,CAChB,OAAO,KAAK,IAAIA,CAAK,CACzB,CACA,SAASy1E,GAAU3qD,EAAOnO,EAAU,CAChC,OAAO,GAAQmO,CAAK,EAAE,IAAI,SAAU5Y,EAAO,CAAE,OAAOyK,EAASzK,CAAK,CAAG,CAAC,CAC1E,CACA,SAASwjE,GAAcC,EAAS,CAC5B,OAAI,GAASA,CAAO,EACT,CACH,IAAKA,EACL,KAAMA,EACN,MAAOA,EACP,OAAQA,CACZ,EAEG,CACH,KAAMA,EAAQ,MAAQ,EACtB,IAAKA,EAAQ,KAAO,EACpB,MAAOA,EAAQ,OAAS,EACxB,OAAQA,EAAQ,QAAU,CAC9B,CACJ,CAMA,IAAIC,GAAY1jC,GAAS,YAAa,CAClC,MAAO,CACH,WACJ,EACA,OAAQ,CACJ,aACA,QACA,WACA,kBACA,aACA,eACJ,EACA,UAAW,UAAY,CACnB,MAAO,EACX,EACA,WAAY,SAAUiD,EAAU,EAAG,CAC/B,IAAI3lB,EAAQ,EAAE,MAAOlJ,EAAU,EAAE,QAASuvD,EAAQ,EAAE,MAAOnhC,EAAgB,EAAE,cACzEv6B,EAAKg7B,EAAS,MAAO2gC,EAAY37D,EAAG,UAAW8gD,EAAQ9gD,EAAG,MAC9D,GAAI,CAAC27D,EACD,MAAO,GAEX,IAAInyD,EAAY,UAAU,OAAO2C,EAAU,QAAU,GAAI,OAAO,EAC5DyvD,EAAmB,OAAO,OAAOzvD,EAAU,QAAU,GAAI,cAAc,EACvE0vD,GAAcF,IAAc,GAAO3gC,EAAS,aAAe8lB,EAAM,OAAO,SAAU9oB,EAAM,CACxF,OAAO2jC,EAAU,QAAQ3jC,EAAK,IAAI,EAAI,EAC1C,CAAC,GAAG,OAAO,SAAUA,EAAM,CAAE,OAAOA,EAAK,UAAYA,EAAK4jC,CAAgB,CAAG,CAAC,EAC1EziB,EAASC,GAAWpe,EAAU,EAAG,CAAC,CAAC,EACnC7uB,IACAgtC,EAAO,QAAUhtC,GAErB,IAAIoB,EAAS8rC,GAAare,EAAUxxB,EAAW2vC,CAAM,EACrD9jC,EAAM,QAAU9H,IAAW,GAC3B8H,EAAM,MAAQwmD,EACd,IAAIptD,EAAU4G,EAAM,QACpB,OAAK5G,GAGLotD,EAAW,QAAQ,SAAU7jC,EAAM,CAE/B,GADAuC,EAAcvC,EAAK,IAAI,EAAIuC,EAAcvC,EAAK,IAAI,GAAK,CAAC,EACpD,EAACA,EAAK4jC,CAAgB,EAG1B,KAAIE,EAAY,EAAS,EAAS,CAAC,EAAG,CAAC,EAAG,CAAE,MAAOvhC,EAAcvC,EAAK,IAAI,EAAG,aAAc0jC,EAAO,QAAS,EAAK,CAAC,EACjH1jC,EAAK4jC,CAAgB,EAAE5gC,EAAU8gC,CAAS,EAC9C,CAAC,EACD9gC,EAAS,MAAM,eAAiB,CAC5B,QAAS,EAAE,UACX,UAAW,CAAC,EAAG,CAAC,CACpB,EACOvsB,GAdI,EAef,EACA,MAAO,SAAUusB,EAAU,EAAG,CAC1B,IAAI3lB,EAAQ,EAAE,MAAO6kD,EAAa,EAAE,MAAOjhD,EAAW,EAAE,SAAUshB,EAAgB,EAAE,cAAepsB,EAAa,EAAE,WAAYhC,EAAU,EAAE,QAASuvD,EAAQ,EAAE,MAC7J,GAAKrmD,EAAM,QAGX,KAAImuC,EAAiBvqC,GAAY,EAAI,EAAIihD,GACrC/gB,EAASC,GAAWpe,EAAU,EAAG,CAAC,CAAC,EACnC7uB,IACAgtC,EAAO,QAAUhtC,GAErB,IAAI3C,EAAY,UAAU,OAAO2C,EAAU,QAAU,EAAE,EACvDktC,GAAare,EAAUxxB,EAAW2vC,CAAM,EACxC,IAAI2H,EAAQzrC,EAAM,MACdumD,EAAmB,OAAO,OAAOzvD,EAAU,QAAU,GAAI,SAAS,EACtE,OAAA20C,EAAM,QAAQ,SAAU9oB,EAAM,CACrBA,EAAK4jC,CAAgB,GAG1B5jC,EAAK4jC,CAAgB,EAAE5gC,EAAU,EAAS,EAAS,CAAC,EAAG,CAAC,EAAG,CAAE,MAAOT,EAAcvC,EAAK,IAAI,EAAG,WAAY7pB,EAAY,cAAe,GAAM,WAAY+rD,EAAY,eAAgB1W,EAAgB,aAAckY,EAAO,QAAS,EAAK,CAAC,CAAC,CAC5O,CAAC,EACMviB,EACX,EACA,SAAU,SAAUne,EAAU,EAAG,CAC7B,IAAI3lB,EAAQ,EAAE,MAAO5G,EAAU,EAAE,QAASN,EAAa,EAAE,WAAYhC,EAAU,EAAE,QAASouB,EAAgB,EAAE,cAC5G,GAAKllB,EAAM,QAGX,KAAI7L,EAAY,UAAU,OAAO2C,EAAU,QAAU,GAAI,KAAK,EAC1DgtC,EAASoB,GAAcvf,EAAU,EAAG,CAAE,OAAQvsB,CAAQ,CAAC,EACvDtC,IACAgtC,EAAO,QAAUhtC,GAErBktC,GAAare,EAAUxxB,EAAW2vC,CAAM,EACxC,IAAI2H,EAAQzrC,EAAM,MACdumD,EAAmB,OAAO,OAAOzvD,EAAU,QAAU,GAAI,YAAY,EACzE,OAAA20C,EAAM,QAAQ,SAAU9oB,EAAM,CACrBA,EAAK4jC,CAAgB,GAG1B5jC,EAAK4jC,CAAgB,EAAE5gC,EAAU,EAAS,EAAS,CAAC,EAAG,CAAC,EAAG,CAAE,OAAQvsB,EAAS,MAAO8rB,EAAcvC,EAAK,IAAI,EAAG,WAAY7pB,EAAY,QAAS,EAAK,CAAC,CAAC,CAC3J,CAAC,EACMM,EACX,EACA,gBAAiB,SAAUusB,EAAU,EAAG,CACpC,OAAO,KAAK,WAAWA,EAAU,EAAS,EAAS,CAAC,EAAG,CAAC,EAAG,CAAE,QAASA,EAAS,MAAM,OAAQ,CAAC,CAAC,CACnG,EACA,WAAY,SAAUA,EAAU,EAAG,CAC/B,OAAO,KAAK,MAAMA,EAAU,EAAS,EAAS,CAAC,EAAG,CAAC,EAAG,CAAE,QAASA,EAAS,MAAM,OAAQ,CAAC,CAAC,CAC9F,EACA,cAAe,SAAUA,EAAU,EAAG,CAClC,OAAO,KAAK,SAASA,EAAU,EAAS,EAAS,CAAC,EAAG,CAAC,EAAG,CAAE,QAASA,EAAS,MAAM,OAAQ,CAAC,CAAC,CACjG,CACJ,CAAC,EAiIG+gC,GAAqB/gB,GAAsB,UAAU,EAMrDghB,GAAW,CACX,KAAM,WACN,UAAW,OACX,SAAU,GACV,MAAO,CACH,WACA,gBACA,mBACA,YACA,OACA,uBACJ,EACA,OAAQ,CACJ,aACA,cACA,QACA,WACA,kBACA,mBACA,aACA,eACJ,EACA,OAAQ50B,GAAoB,UAAU,EACtC,qBAAsB20B,GACtB,cAAe7gB,GAA0B,UAAU,EACnD,iBAAkB,SAAUlgB,EAAU,EAAG,CACrC,IAAI3lB,EAAQ,EAAE,MAAO5G,EAAU,EAAE,QAASN,EAAa,EAAE,WAAYgtC,EAAkB,EAAE,gBACrF1qB,EAAY4qB,GAAkBF,EAAiB1sC,EAASN,EAAYkH,CAAK,EACzErV,EAAKg7B,EAAS,MAAOzlC,EAAQyK,EAAG,MAAOtO,EAASsO,EAAG,OAAQ0+B,EAAkB1+B,EAAG,gBAAiBzO,EAASyO,EAAG,OAAQoF,EAAOpF,EAAG,KAAMqF,EAAOrF,EAAG,KAAMu0C,EAAOv0C,EAAG,KACnK,GAAI,CAACywB,GAAa,CAACl/B,EACf,MAAO,GAENkd,GACD4sB,GAAaL,EAAU,CAAC,EAE5B3lB,EAAM,MAAQ,CAAC,EACfA,EAAM,UAAYqpB,EAClBrpB,EAAM,SAAW,CAAC,EAAG,CAAC,EACtBA,EAAM,UAAYob,EAClBpb,EAAM,iBAAmB9f,EACzB8f,EAAM,kBAAoB3jB,EAC1B2jB,EAAM,WAAa,CAAC,EAAG,CAAC,EAGxB,IAAIgnC,EAAW,CAAC5rB,EAAU,CAAC,GAAK,CAACA,EAAU,CAAC,GAAMA,EAAU,CAAC,GAAK,CAACA,EAAU,CAAC,EAK9EsO,GAAyB/D,EAAU,EAAG,OAAO,EAC7C3lB,EAAM,QAAUgnC,EAChB,SAASf,EAASl3C,EAAO,CACrBiR,EAAM,MAAQjR,GAAS,SAASA,CAAK,EAAIA,EAAQ,CACrD,CACAiR,EAAM,eAAiBurB,GAAwB5F,EAAS,KAAK,EAC7D,SAASugB,EAAkBnd,EAAgB,CACvC,IAAI7wB,EAASmtC,GAAsBrlC,EAAM,eAAgB+oB,CAAc,EACvE/oB,EAAM,eAAiB9H,EAAO,eAC9B8H,EAAM,cAAgB9H,EAAO,cAC7B8H,EAAM,YAAc9H,EAAO,WAC/B,CACA8H,EAAM,kBAAoBkmC,EAC1BD,EAAS,GAAUl2C,EAAMC,CAAI,EAAI,GAAUA,EAAMkvC,CAAI,CAAC,EACtDgH,EAAkB,CAAC,CAAC9qB,EAAU,CAAC,EAAG,CAACA,EAAU,CAAC,CAAC,CAAC,EAChD,IAAIwrC,EAAkB,SAAUn4D,EAAK,CACjCuR,EAAM,aAAevR,CACzB,EACIo4D,EAAkB,SAAUn4D,EAAK,CACjCsR,EAAM,aAAetR,CACzB,EAKAk4D,EAAgB,CAAC,KAAW,IAAS,CAAC,EACtCC,EAAgB,CAAC,IAAU,GAAQ,CAAC,EACpC,IAAI/iB,EAASC,GAAWpe,EAAU,EAAG,EAAS,EAAS,CAAE,UAAWvK,EAAW,IAAK,SAAUvX,EAAO,CAC7F7D,EAAM,WAAa6D,CACvB,EAAG,SAAUoiC,EAAU,kBAAmBC,EAAmB,gBAAiB0gB,EAAiB,gBAAiBC,CAAgB,EAAGt9B,GAAwB5D,EAAU,CAAC,CAAC,EAAG,CAAE,UAAWwE,GAAU,UAAUxE,EAAU,IAAIV,GAAY,EAAE,UAAU,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC,CAAE,CAAC,CAAC,EAC/P/sB,EAAS8rC,GAAare,EAAU,eAAgBme,CAAM,EAC1D,OAAA9jC,EAAM,oBAAsBA,EAAM,eAC9B9H,IAAW,KACX8H,EAAM,QAAU,GAChB2lB,EAAS,MAAM,eAAiB,CAC5B,QAAS,EAAE,UACX,UAAWvK,CACf,GAEGpb,EAAM,QAAU8jC,EAAS,EACpC,EACA,YAAa,SAAUne,EAAU,EAAG,CAChCY,GAAsBZ,EAAU,EAAG,OAAO,EAC1C,IAAI3lB,EAAQ,EAAE,MAAOymC,EAAkB,EAAE,gBAAiBxC,EAAa,EAAE,WAAY7qC,EAAU,EAAE,QAASstC,EAAa,EAAE,WAAY/E,EAAY,EAAE,UAAWwC,EAAU,EAAE,QAASyC,EAAgB,EAAE,cACjMtC,EAAWtkC,EAAM,SAAUob,EAAYpb,EAAM,UAAW8mC,EAAmB9mC,EAAM,iBAAkB+mC,EAAoB/mC,EAAM,kBAAmB8mD,EAAU9mD,EAAM,QAASwkC,EAAaxkC,EAAM,WAAYgnC,EAAUhnC,EAAM,QAASjR,EAAQiR,EAAM,MACnP,GAAI,CAAC8mD,EACD,MAAO,GAEX,IAAIhwE,EAAQ6uC,EAAS,MACjBohC,EAAgBjwE,EAAM,cAAe2tD,EAAiB3tD,EAAM,eAC5D0wD,EAAgBpsB,EAChB,CAACA,EAAU,CAAC,GAAK,CAACA,EAAU,CAAC,IAC7BosB,EAAgB,CAAC,EAAG,CAAC,GAEzB,IAAIl4C,EAAaP,IAAU03C,GAA4C3vD,EAAM,YAAe,GACxF03B,EAAQmX,EAAS,MACjBqhC,EAAiB,CACjBxiB,EAAW,CAAC,EACZA,EAAW,CAAC,CAChB,EACA,SAASyiB,GAAe,CACpB,IAAIt8D,EAAKi9C,GAAkBJ,EAAel4C,EAAW0Q,EAAO,CAAC,EAAGynC,GAAY98C,EAAG,UAAW+8C,GAAa/8C,EAAG,WACtGsF,GAAQ62C,GAAoBA,EAAmBW,IAAaX,EAAmB,EAC/E52C,GAAQ62C,GAAqBA,EAAoBW,IAAcX,EAAoB,EAClFvC,EAAW,CAAC,IACbwiB,EAAe,CAAC,EAAIvf,GAAYX,GAE/BtC,EAAW,CAAC,IACbwiB,EAAe,CAAC,EAAItf,GAAaX,GAErC,IAAIgW,IAAUvV,EAAc,CAAC,GAAKl4C,EAAYW,GAAQ,GAAK+2D,EAAe,CAAC,EACvEhK,IAAUxV,EAAc,CAAC,GAAKl4C,EAAYY,GAAQ,GAAK82D,EAAe,CAAC,EAC3E,OAAIjK,KAAW,IACXA,GAASp5C,GAAK2gC,EAAS,CAAC,CAAC,EAAIjgB,IAE7B24B,KAAW,IACXA,GAASr5C,GAAK2gC,EAAS,CAAC,CAAC,EAAIjgB,IAE1B,CAAC04B,GAAQC,EAAM,CAC1B,CACA,IAAIn5C,EAAQojD,EAAa,EACzB,GAAI,CAAC7tD,GAAWusB,EAAS,MAAM,UAAW,CACtC,IAAImuB,EAAiBtlC,EAAM,gBAAkB,CAAC,EAC1C04C,EAAiBpT,EAAe,UAChCpqD,GAAQw9D,CAAc,IAAMA,EAAe,CAAC,GAAKA,EAAe,CAAC,KACjE14C,EAAM,eAAiB,CAAE,UAAW4M,EAAW,QAAS,EAAE,SAAU,EAE5E,CACA4oB,GAAare,EAAU,gBAAiBoe,GAAWpe,EAAU,EAAG,CAC5D,MAAO9hB,EACP,kBAAmB,SAAUokC,EAAoB,CAC7C,OAAAjoC,EAAM,kBAAkBioC,CAAkB,EAC1CpkC,EAAQojD,EAAa,EACdpjD,CACX,EACA,oBAAqB7D,EAAM,oBAC3B,SAAU,SAAUmnD,EAAW,CAC3BtjD,EAAQsjD,CACZ,CACJ,EAAG,EAAI,CAAC,EACR,IAAIrgC,EAAO,CACPjjB,EAAM,CAAC,EAAImjD,EAAe,CAAC,EAC3BnjD,EAAM,CAAC,EAAImjD,EAAe,CAAC,CAC/B,EACIr8B,EAAgB+b,EAChBwB,EAAW,CAAC,EAAG,CAAC,EAChBkf,EAAWzjD,GAAKmjB,EAAK,CAAC,EAAIA,EAAK,CAAC,CAAC,EACjCugC,EAAc,CAAC3gB,GAAc,CAACzC,GAAc7qC,EAUhD,GATIiuD,GAAezgB,EACfjc,EAAgBN,GAA0B1E,EAAU3lB,EAAM,mBAAoB,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAGA,CAAK,EAE7F0mC,IACN/b,EAAgB3qB,EAAM,eAErB5G,IACD8uC,EAAW6Q,GAAepzB,EAAUmB,EAAM1L,EAAW,CAAC+oB,GAAWxC,EAAW3hC,CAAK,GAEjF1Q,EAAW,CACPk4C,EAAc,CAAC,GAAKA,EAAc,CAAC,GAAKU,EAAS,CAAC,GAAKA,EAAS,CAAC,IAC7D,KAAK,IAAIA,EAAS,CAAC,EAAIpB,CAAgB,EAAI,KAAK,IAAIoB,EAAS,CAAC,EAAInB,CAAiB,EACnFmB,EAAS,CAAC,EAAI,EAGdA,EAAS,CAAC,EAAI,GAGtB,IAAIG,EAAW,CAACH,EAAS,CAAC,GAAK,CAACA,EAAS,CAAC,EAU1C,GATIG,IAEIrB,EACAlgB,EAAK,CAAC,EAAI93B,GAAS83B,EAAK,CAAC,EAAIkgC,EAAe,CAAC,EAAGD,CAAa,EAAIC,EAAe,CAAC,EAGjFlgC,EAAK,CAAC,EAAI93B,GAAS83B,EAAK,CAAC,EAAIkgC,EAAe,CAAC,EAAGD,CAAa,EAAIC,EAAe,CAAC,GAGpFxf,EAAc,CAAC,GAAK,CAACA,EAAc,CAAC,GACjCU,EAAS,CAAC,GAAK,CAACA,EAAS,CAAC,GAC1BG,GAAYrB,EAAU,CAC1BlgB,EAAK,CAAC,GAAKohB,EAAS,CAAC,EACrB,IAAIkO,EAAatP,EAAmBhgB,EAAK,CAAC,EAAIkgC,EAAe,CAAC,EAAIj4D,EAClE+3B,EAAK,CAAC,EAAInjB,GAAKyjD,EAAWtgC,EAAK,CAAC,CAAC,EAAI,EAAIsvB,EAAarP,EAAoBigB,EAAe,CAAC,CAAC,CAC/F,SACU,CAACxf,EAAc,CAAC,GAAKA,EAAc,CAAC,GACtC,CAACU,EAAS,CAAC,GAAKA,EAAS,CAAC,GAC1BG,GAAY,CAACrB,EAAU,CAC3BlgB,EAAK,CAAC,GAAKohB,EAAS,CAAC,EACrB,IAAIiO,EAAYpP,EAAoBjgB,EAAK,CAAC,EAAIkgC,EAAe,CAAC,EAAIj4D,EAClE+3B,EAAK,CAAC,EAAInjB,GAAKyjD,EAAWtgC,EAAK,CAAC,CAAC,EAAI,EAAIqvB,EAAYrP,EAAmBkgB,EAAe,CAAC,CAAC,CAC7F,CACJ,MAEIlgC,EAAK,CAAC,GAAKohB,EAAS,CAAC,EACrBphB,EAAK,CAAC,GAAKohB,EAAS,CAAC,EAChBA,EAAS,CAAC,IACXphB,EAAK,CAAC,EAAI93B,GAAS83B,EAAK,CAAC,EAAIkgC,EAAe,CAAC,EAAGD,CAAa,EAAIC,EAAe,CAAC,GAEhF9e,EAAS,CAAC,IACXphB,EAAK,CAAC,EAAI93B,GAAS83B,EAAK,CAAC,EAAIkgC,EAAe,CAAC,EAAGD,CAAa,EAAIC,EAAe,CAAC,GAGrFlgC,EAAK,CAAC,IAAM,IACZA,EAAK,CAAC,EAAInjB,GAAK2gC,EAAS,CAAC,CAAC,EAAIjgB,IAE9ByC,EAAK,CAAC,IAAM,IACZA,EAAK,CAAC,EAAInjB,GAAK2gC,EAAS,CAAC,CAAC,EAAIjgB,IAElCxgB,EAAQ82C,GAAU7zB,EAAM,CAACkgC,EAAe,CAAC,EAAGA,EAAe,CAAC,CAAC,CAAC,EAC9D,IAAIM,EAAkB,CAClBxgB,EACAC,CACJ,EACIwgB,EAAY,CACZzgB,EAAmBjjC,EAAM,CAAC,EAC1BkjC,EAAoBljC,EAAM,CAAC,CAC/B,EACA0jD,EAAYp4D,GAAmBo4D,EAAWvnD,EAAM,aAAcA,EAAM,aAAc1Q,EAAYP,EAAQ,EAAK,EAQ3G8U,EAAQoiD,GAAU,EAAG,SAAU/9D,EAAG,CAC9B,OAAOo/D,EAAgBp/D,CAAC,EAAIq/D,EAAUr/D,CAAC,EAAIo/D,EAAgBp/D,CAAC,EAAIq/D,EAAUr/D,CAAC,CAC/E,CAAC,EACD4+B,EAAOm/B,GAAU,EAAG,SAAU/9D,EAAG,CAC7B,OAAO2b,EAAM3b,CAAC,EAAI8+D,EAAe9+D,CAAC,CACtC,CAAC,EACD,IAAI6Z,EAAQkkD,GAAU,EAAG,SAAU/9D,EAAG,CAAE,OAAOo8C,EAASp8C,CAAC,EAAI4+B,EAAK5+B,CAAC,EAAIo8C,EAASp8C,CAAC,EAAI4+B,EAAK5+B,CAAC,CAAG,CAAC,EAC3Fs/D,EAAW,SAAS,OAAO1gC,EAAK,KAAK,IAAI,EAAG,GAAG,EAC/C2gC,EAAY,SAAS,OAAO5jD,EAAM,KAAK,IAAI,EAAG,GAAG,EACjDomB,EAAgBpD,GAAuB7mB,EAAOynD,EAAWD,CAAQ,EACjEE,GAAc,CAACljB,EAAW,CAAC,GAAK,CAACA,EAAW,CAAC,EAC7CwJ,GAAcjjB,GAAapF,EAAU+hC,GAAcD,EAAYD,EAAUxnD,EAAM,eAAgB2qB,EAAe3qB,EAAM,YAAaA,EAAO0nD,EAAW,EACnJpf,GAAe+e,EAAcrZ,GAAcl3B,GAAMk3B,GAAahuC,EAAM,iBAAmB,CAAC,EAAG,CAAC,CAAC,EAGjG,GAFAA,EAAM,SAAW8mB,EACjB9mB,EAAM,gBAAkBguC,GACpBnqC,EAAM,CAAC,IAAMygC,EAAS,CAAC,GAAKzgC,EAAM,CAAC,IAAMygC,EAAS,CAAC,GAChDgE,GAAa,MAAM,SAAU73C,EAAK,CAAE,MAAO,CAACA,CAAK,CAAC,GAClD,CAACg0C,GACD,CAAC4iB,EACJ,MAAO,GAEX,IAAIvjB,GAASC,GAAWpe,EAAU,EAAG,EAAS,CAAE,YAAamhB,EAAkB,aAAcC,EAAmB,UAAW3rB,EAAW,MAAOvX,EAAO,KAAMijB,EAAM,MAAO/kB,EAAO,QAAS,CAAC,CAAC3I,CAAQ,EAAG4wB,GAAmBrE,EAAUsE,EAAeqe,GAAclvC,EAAS,CAAC,CAAC,CAAC,EAC1Q,OAAA4qC,GAAare,EAAU,UAAWme,EAAM,EACjCA,EACX,EACA,eAAgB,SAAUne,EAAU,EAAG,CACnC,IAAI3lB,EAAQ,EAAE,MACd,GAAI,CAACA,EAAM,QACP,MAAO,GAEXA,EAAM,QAAU,GAChB,IAAI2nD,EAAgBziB,GAAcvf,EAAU,EAAG,CAAC,CAAC,EACjD,OAAAqe,GAAare,EAAU,aAAcgiC,CAAa,EAC3CA,CACX,EACA,0BAA2BjB,GAC3B,sBAAuB,SAAU/gC,EAAU,EAAG,CAC1C,IAAI3lB,EAAQ,EAAE,MACV8jC,EAAS,KAAK,iBAAiBne,EAAU,CAAC,EAC9C,GAAI,CAACme,EACD,MAAO,GAEX,IAAI8E,EAAiBvZ,GAAgB1J,EAAU,YAAa,CAAC,EAC7D3lB,EAAM,cAAgB2lB,EAAS,MAC/B,IAAIvxB,EAAS67B,GAAkBtK,EAAU,KAAM,mBAAoB,EAAG,SAAU7X,EAAO+hB,EAAI,CACvF,OAAOM,GAAexK,EAAU7X,EAAO9N,EAAO6vB,CAAE,CACpD,CAAC,EACGqW,EAAoB,SAAUnd,EAAgB,CAC9C+a,EAAO,kBAAkB/a,CAAc,EACvC30B,EAAO,QAAQ,SAAUy7B,EAAI3nC,EAAG,CAC5B2nC,EAAG,kBAAkB9G,CAAc,EACnCoH,GAAexK,EAAUkK,EAAG,SAAU7vB,EAAO4oC,EAAe1gD,CAAC,CAAC,CAClE,CAAC,CACL,EACA8X,EAAM,kBAAoBkmC,EAC1B,IAAIf,EAAa,EAAS,EAAS,CAAC,EAAGrB,CAAM,EAAG,CAAE,QAASne,EAAS,MAAM,QAAS,OAAQvxB,EAAQ,kBAAmB8xC,CAAkB,CAAC,EACrIhuC,EAAS8rC,GAAare,EAAU,oBAAqBwf,CAAU,EACnE,OAAAnlC,EAAM,QAAU9H,IAAW,GACpB8H,EAAM,QAAUmlC,EAAa,EACxC,EACA,iBAAkB,SAAUxf,EAAU,EAAG,CACrC,IAAI3lB,EAAQ,EAAE,MACd,GAAKA,EAAM,QAGX,CAAA2pC,GAAWhkB,EAAU,gBAAiB,SAAUge,EAAa,CACzDK,GAAare,EAAU,qBAAsBoe,GAAWpe,EAAU,EAAG,EAAS,EAAS,CAAC,EAAGge,CAAW,EAAG,CAAE,QAAShe,EAAS,MAAM,OAAQ,CAAC,EAAG,EAAI,CAAC,CACxJ,CAAC,EACD,IAAIme,EAAS,KAAK,YAAYne,EAAU,CAAC,EACzC,GAAKme,EAGL,KAAIhd,EAAOgd,EAAO,KACd8jB,EAAgB5nD,EAAM,cAC1B2lB,EAAS,MAAQ,CACbmB,EAAK,CAAC,EAAI8gC,EAAc,CAAC,EACzB9gC,EAAK,CAAC,EAAI8gC,EAAc,CAAC,CAC7B,EACA,IAAIt4D,EAAYq2B,EAAS,MAAM,UAC3BgF,EAAgB3qB,EAAM,cACtB5L,EAAS67B,GAAkBtK,EAAU,KAAM,cAAe,EAAG,SAAU/0B,EAAGi/B,EAAI,CAC9E,IAAIllC,EAAK83B,EAAOvL,GAAUI,GAAmBqO,EAAS,SAAW,IAAM,KAAK,GAAI,CAAC,EAAG,CAChFkK,EAAG,MAAM,UAAY/I,EAAK,CAAC,EAC3B+I,EAAG,MAAM,UAAY/I,EAAK,CAAC,EAC3B,CACJ,EAAG,CAAC,EAAG,CAAC,EAAGrxB,EAAU9K,EAAG,CAAC,EAAG+K,EAAU/K,EAAG,CAAC,EAC1C,OAAO,EAAS,EAAS,CAAC,EAAGklC,CAAE,EAAG,CAAE,WAAY,KAAM,YAAa/I,EAAM,gBAAiBx3B,EAEtF,WAAYsnB,GAAK+T,EAAe,CAACl1B,EAASC,CAAO,CAAC,CAAE,CAAC,CAC7D,CAAC,EACGyvC,EAAa,EAAS,CAAE,QAASxf,EAAS,MAAM,QAAS,OAAQvxB,CAAO,EAAG0vC,CAAM,EACrF,OAAAE,GAAare,EAAU,eAAgBwf,CAAU,EAC1CA,GACX,EACA,oBAAqB,SAAUxf,EAAU,EAAG,CACxC,IAAIrtB,EAAS,EAAE,OAAQ0H,EAAQ,EAAE,MACjC,GAAKA,EAAM,QAGX,MAAK,eAAe2lB,EAAU,CAAC,EAC/B,IAAIvxB,EAAS67B,GAAkBtK,EAAU,KAAM,iBAAkB,CAAC,EAC9Dwf,EAAaD,GAAcvf,EAAU,EAAG,CACxC,QAASA,EAAS,MAAM,QACxB,OAAQvxB,CACZ,CAAC,EACD,OAAA4vC,GAAare,EAAU,kBAAmBwf,CAAU,EAC7C7sC,EACX,EAqBA,QAAS,UAAY,CACjB,IAAI0H,EAAQ,CAAC,EACTynC,EAAY,EACZC,EAAa,EACbvD,EAAU,GACd,MAAO,CACH,UAAW,GACX,aAAc,SAAU5yD,EAAG,CACvB,OAAA4yD,EAAU5yD,EAAE,QACL,CACH,MAAOyuB,EACP,gBAAiBzuB,EAAE,WAAa,CAAC,EAAG,CAAC,EACrC,QAAS4yD,CACb,CACJ,EACA,QAAS,SAAU5yD,EAAG,CAClB,OAAAk2D,GAAal2D,EAAE,WACfm2D,GAAcn2D,EAAE,YACT,CACH,MAAOyuB,EACP,WAAY,CAACynC,EAAWC,CAAU,EAClC,gBAAiBn2D,EAAE,UACnB,QAAS4yD,CACb,CACJ,EACA,WAAY,UAAY,CACpB,MAAO,CAAE,MAAOnkC,EAAO,OAAQ,GAAM,QAASmkC,CAAQ,CAC1D,CACJ,CACJ,CACJ,EAkKA,SAAS0jB,GAAiB93D,EAAMC,EAAM,CAClC,OAAOD,EAAK,IAAI,SAAUpH,EAAKT,EAAG,CAAE,OAAOiB,GAAIR,EAAKqH,EAAK9H,CAAC,EAAG,EAAG,CAAC,CAAG,CAAC,CACzE,CACA,SAAS4/D,GAAe/3D,EAAMC,EAAMuoB,EAAM,CAEtC,IAAIwvC,EAAOj4D,GAAOC,EAAMC,CAAI,EACxBg4D,EAAOl4D,GAAOC,EAAMwoB,CAAI,EACxB3zB,EAAMojE,EAAOD,EACjB,OAAOnjE,GAAO,EAAIA,EAAMA,EAAM,EAAI,KAAK,EAC3C,CACA,SAASqjE,GAAWC,EAAQC,EAAQ,CAChC,IAAIJ,EAAOD,GAAeI,EAAO,CAAC,EAAGA,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EACrDF,EAAOF,GAAeK,EAAO,CAAC,EAAGA,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,EACrDC,EAAK,KAAK,GACd,MAAK,EAAAL,GAAQK,GAAMJ,GAAQI,GAAQL,GAAQK,GAAMJ,GAAQI,EAI7D,CAKA,IAAIC,GAAW,CACX,KAAM,WACN,UAAW,OACX,MAAO,CACH,WACA,mBACA,OACA,uBACJ,EACA,OAAQ,CACJ,YACA,OACA,SACJ,EACA,cAAexiB,GAA0B,UAAU,EACnD,OAAQ,SAAUlgB,EAAU+K,EAAO,CAC/B,IAAI/lC,EAAKg7B,EAAS,MAAO2iC,EAAY39D,EAAG,UAAW49D,EAAW59D,EAAG,SAAU69D,EAAW79D,EAAG,SAAU0Y,EAAO1Y,EAAG,KAC7G,GAAI29D,GAAaC,GAAY,CAACC,EAC1B,MAAO,CAAC,EAEZ,IAAIv9D,EAAK06B,EAAS,MAAO51B,EAAO9E,EAAG,KAAM+E,EAAO/E,EAAG,KAAMstB,EAAOttB,EAAG,KAAMi0C,EAAOj0C,EAAG,KAC/Ew9D,EAAeZ,GAAiB93D,EAAMC,CAAI,EAC1C04D,EAAeb,GAAiB73D,EAAMD,CAAI,EAC1C44D,EAAed,GAAiB93D,EAAMwoB,CAAI,EAC1CqwC,EAAef,GAAiBtvC,EAAMxoB,CAAI,EAC1C84D,EAAahB,GAAiBtvC,EAAM2mB,CAAI,EACxC4pB,EAAajB,GAAiB3oB,EAAM3mB,CAAI,EACxCwwC,EAAalB,GAAiB73D,EAAMkvC,CAAI,EACxC8pB,EAAanB,GAAiB3oB,EAAMlvC,CAAI,EAC5C,OAAO,EAAc,CACjB0gC,EAAM,cAAc,MAAO,CAAE,UAAWlkC,GAAO,MAAM,EAAG,IAAK,aAAc,MAAO,GAAai8D,EAAcI,EAAYxlD,CAAI,CAAE,CAAC,EAChIqtB,EAAM,cAAc,MAAO,CAAE,UAAWlkC,GAAO,MAAM,EAAG,IAAK,aAAc,MAAO,GAAak8D,EAAcI,EAAYzlD,CAAI,CAAE,CAAC,EAChIqtB,EAAM,cAAc,MAAO,CAAE,UAAWlkC,GAAO,MAAM,EAAG,IAAK,aAAc,MAAO,GAAam8D,EAAcI,EAAY1lD,CAAI,CAAE,CAAC,EAChIqtB,EAAM,cAAc,MAAO,CAAE,UAAWlkC,GAAO,MAAM,EAAG,IAAK,aAAc,MAAO,GAAao8D,EAAcI,EAAY3lD,CAAI,CAAE,CAAC,CACpI,EAAGof,EAAOwP,GAAoBtM,EAAU,WAAY+K,CAAK,CAAC,EAAG,EAAK,CACtE,EACA,qBAAsB,SAAU/K,EAAU,EAAG,CACzC,GAAI,EAAE,UACF,MAAO,GAEX,IAAIzpC,EAAS,EAAE,WAAW,OAC1B,OAAOuW,GAASvW,EAAQsQ,GAAO,WAAW,CAAC,GAAKiG,GAASvW,EAAQsQ,GAAO,UAAU,CAAC,CACvF,EACA,iBAAkB,SAAUm5B,EAAU,EAAG,CACrC,IAAI3lB,EAAQ,EAAE,MAAOlH,EAAa,EAAE,WAChC5c,EAASypC,EAAS,MAAM,OACxBumB,EAAcpzC,EAAW,OACzBsiB,EAAY+lC,GAAajV,EAAalsC,CAAK,EAC/C,GAAI,CAACob,GAAa,CAACl/B,EACf,MAAO,GAEX,IAAIsyB,EAAQmX,EAAS,MACjBU,EAAkB7X,EAAM,gBAAiB4W,EAAO5W,EAAM,KAAM6a,EAAkB7a,EAAM,gBAAiB4X,EAAe5X,EAAM,aAActuB,EAAQsuB,EAAM,MAAOnyB,EAASmyB,EAAM,OAAQlqB,EAAOkqB,EAAM,KAAMjqB,EAAMiqB,EAAM,IACvNxO,EAAM,MAAQ,CAAC,EACfA,EAAM,gBAAkBqpB,EACxBrpB,EAAM,iBAAmBolB,EAAOgB,EAAe7P,GAAiB6P,EAAc,EAAG,CAAC,EAClFpmB,EAAM,oBAAsB0V,GAAgBE,GAAO5V,EAAM,iBAAkB,CAAC,EAAG,EAAG,CAAC,EACnFA,EAAM,UAAYob,EAClBpb,EAAM,KAAO1b,EACb0b,EAAM,IAAMzb,EACZyb,EAAM,MAAQ,CACV,CAAC,EAAG,CAAC,EACL,CAAC9f,EAAO,CAAC,EACT,CAAC,EAAG7D,CAAM,EACV,CAAC6D,EAAO7D,CAAM,CAClB,EAAE,IAAI,SAAU2X,EAAG,CAAE,OAAO8iB,GAAM9iB,EAAGqyB,CAAe,CAAG,CAAC,EACxDrmB,EAAM,UAAYA,EAAM,MAAM,IAAI,SAAUrV,EAAI,CAC5C,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGzG,EAAI+G,EAAG,CAAC,EAAG9G,EAAI8G,EAAG,CAAC,EAC3C,OAAOisB,GAAUlX,EAAM,iBAAkB,CAAC9b,EAAGC,EAAG,EAAG,CAAC,EAAG,CAAC,CAC5D,CAAC,EACD6b,EAAM,WAAa6V,GAAqB,CAAC,EACzC7V,EAAM,WAAa6V,GAAqB,CAAC,EACzC7V,EAAM,cAAgBurB,GAAwB/c,CAAK,EACnDxO,EAAM,WAAayoB,GAAyBrN,CAAS,EACrD4K,GAAaL,EAAU,CAAC,EACxB+D,GAAyB/D,EAAU,EAAG,UAAU,EAChDnX,EAAM,eAAiB,CACnB,QAAS,EAAE,UACX,UAAW4M,CACf,EACA,IAAI0oB,EAASC,GAAWpe,EAAU,EAAG,EAAS,CAAE,IAAK,SAAU1mC,EAAQ,CAC/D+gB,EAAM,WAAa/gB,CACvB,CAAE,EAAGsqC,GAAwB5D,EAAU,CAAC,CAAC,CAAC,EAC1CztB,EAAS8rC,GAAare,EAAU,cAAeme,CAAM,EACzD,OAAI5rC,IAAW,KACX8H,EAAM,OAAS,IAEZA,EAAM,MACjB,EACA,YAAa,SAAU2lB,EAAU,EAAG,CAChC,IAAI3lB,EAAQ,EAAE,MAAO2hC,EAAY,EAAE,UAC/B1xC,EAAQ,EAAE,MAAOC,EAAQ,EAAE,MAC3B+4D,EAAsBjpD,EAAM,oBAAqBkpD,EAAalpD,EAAM,WAAYmpD,EAASnpD,EAAM,OAAQwkC,EAAaxkC,EAAM,WAAYqlB,EAAQrlB,EAAM,MAAOopD,EAAappD,EAAM,WAAYqpD,EAAgBrpD,EAAM,cACpN,GAAI,CAACmpD,EACD,MAAO,GAGX,GADA5iC,GAAsBZ,EAAU,EAAG,UAAU,EACzCwP,GAAcxP,EAAU,UAAU,EAAG,CACrC,IAAI2jC,EAAgBF,EAAW,IAAI,SAAU1mE,EAAO,CAAE,OAAO2mE,EAAc3mE,CAAK,CAAG,CAAC,EAChF4mE,EAAc,OAAS,GACvBA,EAAc,KAAK,EACdA,EAAc,CAAC,EAAE,CAAC,EAAIA,EAAc,CAAC,EAAE,CAAC,GAAK,GAC7CA,EAAc,CAAC,EAAE,CAAC,EAAIA,EAAc,CAAC,EAAE,CAAC,GAAK,CAClD,CAAC,EAEL,IAAI3+D,EAAK+1C,GAAwB/a,EAAUgc,EAAW,CAClD,WAAY2nB,EAAc,IAAI,SAAU3gE,EAAK,CAAE,OAAOA,EAAI,CAAC,EAAIuH,CAAO,CAAC,EACvE,SAAUo5D,EAAc,IAAI,SAAU3gE,EAAK,CAAE,OAAOA,EAAI,CAAC,EAAIsH,CAAO,CAAC,CACzE,CAAC,EAAG4nC,EAAqBltC,EAAG,WAAYitC,EAAmBjtC,EAAG,SAC9DuF,GAAS2nC,EAAmB,OAC5B5nC,GAAS2nC,EAAiB,MAC9B,CACA,IAAI9Q,EAAOf,GAAY,CAAE,MAAO/lB,EAAO,MAAO/P,EAAO,MAAOC,CAAM,EAAG,EAAI,EACrEikC,EAAYn0B,EAAM,UAAU,MAAM,EAItC,GAHAopD,EAAW,QAAQ,SAAU1mE,EAAO,CAChCyxC,EAAUzxC,CAAK,EAAIk0B,GAAKud,EAAUzxC,CAAK,EAAGokC,CAAI,CAClD,CAAC,EACG,CAAC3C,GAAW,MAAM,SAAUolC,EAAa,CAAE,OAAOtB,GAAWsB,EAAY,IAAI,SAAUrhE,EAAG,CAAE,OAAOm9B,EAAMn9B,CAAC,CAAG,CAAC,EAAGqhE,EAAY,IAAI,SAAUrhE,EAAG,CAAE,OAAOisC,EAAUjsC,CAAC,CAAG,CAAC,CAAC,CAAG,CAAC,EAC3K,MAAO,GAEX,IAAIyJ,EAAI0mB,GAAiBgN,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAG8O,EAAU,CAAC,EAAGA,EAAU,CAAC,EAAGA,EAAU,CAAC,EAAGA,EAAU,CAAC,CAAC,EACvH,GAAI,CAACxiC,EAAE,OACH,MAAO,GAGX,IAAI63D,EAAc9yC,GAASuyC,EAAqBt3D,EAAG,CAAC,EAEhD1S,EAASkoC,GAAmBnnB,EAAOwpD,EAAa,EAAI,EACpDznD,EAAQ2U,GAASd,GAAOszC,EAAY,CAAC,EAAGjqE,EAAQ,CAAC,EACrD+gB,EAAM,WAAa/gB,EACnB,IAAIwqE,EAAc/yC,GAAS8tB,EAAYvlD,EAAQ,CAAC,EAC5CgrC,EAAgBpD,GAAuB7mB,EAAO,YAAY,OAAOypD,EAAY,KAAK,IAAI,EAAG,GAAG,EAAG,YAAY,OAAOxqE,EAAO,KAAK,IAAI,EAAG,GAAG,CAAC,EAC7I,OAAA2qC,GAAsB,EAAGK,CAAa,EACtC+Z,GAAare,EAAU,SAAUoe,GAAWpe,EAAU,EAAG,EAAS,CAAE,MAAO5jB,EAAO,OAAQ0nD,EAAa,KAAMxqE,EAAQ,SAAUy3B,GAAU,UAAWuT,CAAc,EAAGG,GAAc,CAC/K,UAAWH,CACf,EAAG,CAAC,CAAC,CAAC,CAAC,EACA,EACX,EACA,eAAgB,SAAUtE,EAAU,EAAG,CACnC,IAAI3lB,EAAQ,EAAE,MAAO1H,EAAS,EAAE,OAChC,OAAK0H,EAAM,QAGXA,EAAM,OAAS,GACfgkC,GAAare,EAAU,YAAauf,GAAcvf,EAAU,EAAG,CAAC,CAAC,CAAC,EAC3DrtB,GAJI,EAKf,CACJ,EAuEIoxD,GAA4Bl9D,GAAO,aAAa,EAChDm9D,GAA2Bn9D,GAAO,YAAY,EAC9Co9D,GAAsBp9D,GAAO,OAAO,EACpCq9D,GAAgBr9D,GAAO,eAAe,EAE1C,SAASs9D,GAAankC,EAAU,CAC5B,IAAIxyB,EAAKwyB,EAAS,YAClB,GAAKxyB,EAGL,KAAIxI,EAAKg7B,EAAS,MAAOzlC,EAAQyK,EAAG,MAAOtO,EAASsO,EAAG,OACvDiI,GAAYO,EAAIy2D,EAAK,EACrBz2D,EAAG,MAAM,SAAW,+BAA+B,OAAOjT,EAAO,cAAc,EAAE,OAAO7D,EAAQ,IAAI,EACxG,CACA,SAAS0tE,GAAar5B,EAAO,CACzB,OAAQA,EAAM,cAAc,MAAO,CAAE,IAAK,cAAe,UAAWg5B,EAAY,EAC5Eh5B,EAAM,cAAc,MAAO,CAAE,UAAWi5B,EAAW,CAAC,EACpDj5B,EAAM,cAAc,MAAO,CAAE,UAAWi5B,EAAW,CAAC,EACpDj5B,EAAM,cAAc,MAAO,CAAE,UAAWi5B,EAAW,CAAC,EACpDj5B,EAAM,cAAc,MAAO,CAAE,UAAWi5B,EAAW,CAAC,CAAC,CAC7D,CACA,IAAIK,GAAW,CACX,KAAM,WACN,MAAO,CACH,WACA,cACJ,EACA,OAAQ,CACJ,QACA,YACJ,EACA,OAAQ,SAAUrkC,EAAU+K,EAAO,CAC/B,IAAI/lC,EAAKg7B,EAAS,MAAOzpC,EAASyO,EAAG,OAAQs/D,EAAWt/D,EAAG,SAAUigC,EAAYjgC,EAAG,UAAWu/D,EAAev/D,EAAG,aAC7GM,EAAK06B,EAAS,SAAS,EAAGzlC,EAAQ+K,EAAG,MAAO5O,EAAS4O,EAAG,OAAQ0lC,EAAc1lC,EAAG,YACjFyH,EAAYw3D,EAAe19D,GAAO,OAAQ,MAAM,EAAIA,GAAO,MAAM,EACrE,GAAIo+B,EACA,MAAO,CACH8F,EAAM,cAAc,MAAO,CAAE,IAAK,OAAQ,IAAK,GAAI/K,EAAU,aAAa,EAAG,UAAWjzB,CAAU,CAAC,EACnGq3D,GAAar5B,CAAK,CACtB,EAEJ,GAAI,CAACx0C,GAAU,CAAC+tE,EACZ,MAAO,CAAC,EAEZ,IAAIt4D,EAAI0mB,GAAiB,CAAC,EAAG,CAAC,EAAG,CAACn4B,EAAO,CAAC,EAAG,CAAC,EAAG7D,CAAM,EAAG,CAAC6D,EAAO7D,CAAM,EAAGs0C,EAAY,CAAC,EAAGA,EAAY,CAAC,EAAGA,EAAY,CAAC,EAAGA,EAAY,CAAC,CAAC,EACrI1sC,EAAY0N,EAAE,OAAS+qD,GAAc/qD,EAAG,EAAI,EAAI,OACpD,MAAO,CACH++B,EAAM,cAAc,MAAO,CAAE,IAAK,OAAQ,IAAK,GAAI/K,EAAU,aAAa,EAAG,UAAWjzB,EAAW,MAAO,CAClG,IAAK,MACL,KAAM,MACN,MAAO,GAAG,OAAOxS,EAAO,IAAI,EAC5B,OAAQ,GAAG,OAAO7D,EAAQ,IAAI,EAC9B,gBAAiB,MACjB,UAAW4H,CACf,CAAE,CAAC,EACP8lE,GAAar5B,CAAK,CACtB,CACJ,EACA,UAAW,SAAU/K,EAAUh7B,EAAI,CAC/B,IAAIqV,EAAQrV,EAAG,MAAO8K,EAAU9K,EAAG,QAAS+K,EAAU/K,EAAG,QAASmO,EAAanO,EAAG,WAClF,GAAI,CAACmO,EACD,MAAO,GAEXkH,EAAM,WAAa,GACnB,IAAImqD,EAAcxkC,EAAS,YACvBnX,EAAQmX,EAAS,MACjBC,EAAqBpX,EAAM,mBAAoBmiB,EAAcniB,EAAM,YAAaqX,EAAarX,EAAM,WAAY4W,EAAO5W,EAAM,KAC5HlqB,EAAOshC,EAAmB,KAAMrhC,EAAMqhC,EAAmB,IACzD36B,EAAKu1C,GAAQ7P,CAAW,EAAG3wC,EAAeiL,EAAG,KAAMnL,EAAcmL,EAAG,IAAK/K,EAAQ+K,EAAG,MAAO5O,EAAS4O,EAAG,OACvG8I,EAAIqxB,EAAO,EAAI,EACfh6B,EAAKq3B,EAAOqD,GAAyBD,EAAY,CAACpwB,EAAUnR,EAAMoR,EAAUnR,CAAG,EAAGwP,CAAC,EAAG,CAAC,EAAGwmB,EAAOnvB,EAAG,CAAC,EAAGovB,EAAOpvB,EAAG,CAAC,EACvHmvB,GAAQv6B,EACRw6B,GAAQ16B,EACR,IAAIsqE,EAAQ,CACR,CAAE,KAAMpqE,EAAc,IAAKF,EAAa,MAAOI,EAAO,OAAQs6B,EAAO,EAAG,EACxE,CAAE,KAAMx6B,EAAc,IAAKF,EAAa,MAAOy6B,EAAO,GAAI,OAAQl+B,CAAO,EACzE,CAAE,KAAM2D,EAAc,IAAKF,EAAc06B,EAAO,GAAI,MAAOt6B,EAAO,OAAQ7D,EAASm+B,EAAO,EAAG,EAC7F,CAAE,KAAMx6B,EAAeu6B,EAAO,GAAI,IAAKz6B,EAAa,MAAOI,EAAQq6B,EAAO,GAAI,OAAQl+B,CAAO,CACjG,EACIw1B,EAAW,CAAC,EAAE,MAAM,KAAKs4C,EAAY,mBAAmB,QAAQ,EACpEC,EAAM,QAAQ,SAAUvsE,EAAMqK,EAAG,CAC7B2pB,EAAS3pB,CAAC,EAAE,MAAM,QACZ,SAAS,OAAOrK,EAAK,KAAM,UAAU,EAAE,OAAOA,EAAK,IAAK,aAAa,EAAE,OAAOA,EAAK,MAAO,cAAc,EAAE,OAAOA,EAAK,OAAQ,KAAK,CAC7I,CAAC,EACD8U,GAASw3D,EAAaP,EAAK,EAC3Bp7C,EAAM,mBAAqB,EAE/B,EACA,KAAM,SAAUmX,EAAUh7B,EAAI,CAC1B,IAAIqV,EAAQrV,EAAG,MAAOmO,EAAanO,EAAG,WAEtC,GADA,KAAK,kBAAkBg7B,CAAQ,EAC3B,CAAC7sB,EACD,MAAO,GAENkH,EAAM,aACPA,EAAM,WAAa,GACnB8pD,GAAankC,CAAQ,EAE7B,EACA,QAAS,SAAUA,EAAU,EAAG,CAC5B,KAAK,kBAAkBA,CAAQ,EAC/B,IAAI7sB,EAAa,EAAE,WAAYkH,EAAQ,EAAE,MACzC,GAAI,CAAClH,EACD,MAAO,GAENkH,EAAM,YACP8pD,GAAankC,CAAQ,CAE7B,EACA,eAAgB,SAAUA,EAAU,EAAG,CACnC,OAAO,KAAK,UAAUA,EAAU,CAAC,CACrC,EACA,UAAW,SAAUA,EAAU,EAAG,CAC9B,OAAO,KAAK,KAAKA,EAAU,CAAC,CAChC,EACA,aAAc,SAAUA,EAAU,EAAG,CACjC,OAAO,KAAK,QAAQA,EAAU,CAAC,CACnC,EACA,MAAO,SAAUA,EAAU,CACvBmkC,GAAankC,CAAQ,EACrBA,EAAS,MAAM,mBAAqB,EACxC,EACA,kBAAmB,SAAUA,EAAU,CACnC,IAAInX,EAAQmX,EAAS,MACjBnX,EAAM,oBACN,GAAsB,UAAY,CAC9BA,EAAM,mBAAqB,EAC/B,CAAC,CAET,CACJ,EAsBI67C,GAAS3nC,GAAS,SAAU,CAC5B,MAAO,CAAC,SAAU,WAAW,EAC7B,OAAQ,SAAUiD,EAAU+K,EAAO,CAC/B,IAAI/lC,EAAKg7B,EAAS,MAAOtiB,EAAO1Y,EAAG,KAAMyyD,EAAYzyD,EAAG,UAAWigC,EAAYjgC,EAAG,UAC9EM,EAAK06B,EAAS,SAAS,EAAG+d,EAAez4C,EAAG,aAAc7G,EAAW6G,EAAG,SAAUy0D,EAAMz0D,EAAG,IAAKg7B,EAAYh7B,EAAG,UAAWm6B,EAAOn6B,EAAG,KAAM3G,EAAO2G,EAAG,KAAM1G,EAAM0G,EAAG,IAAK6zD,EAAc7zD,EAAG,YAAa8zD,EAAe9zD,EAAG,aACxNq/D,EACJ,GAAI,CAAC1/B,GAAa80B,GAAOtC,EAAW,CAChC,IAAIhyD,EAAKq3B,EAAOy+B,GAA4B9D,EAAW0B,EAAaC,CAAY,EAAG,CAAC,EAAGh7B,EAAU34B,EAAG,CAAC,EAAG44B,EAAU54B,EAAG,CAAC,EAClH2I,EAAIqxB,EAAO,EAAI,EACfltB,EAASutB,GAAkBQ,EAAW,CAAClC,EAASC,CAAO,EAAGjwB,CAAC,EAC/Du2D,EAAch5B,GAAoBltC,EAAUif,EAAMyT,GAAM5e,EAAQ,CAAC5T,EAAMC,CAAG,CAAC,CAAC,CAChF,MAEI+lE,EAAch5B,GAAoBltC,EAAUif,EAAMqgC,CAAY,EAElE,MAAO,CACHhT,EAAM,cAAc,MAAO,CAAE,UAAWlkC,GAAO,UAAW,QAAQ,EAAG,MAAO89D,EAAa,IAAK,cAAe,CAAC,CAClH,CACJ,CACJ,CAAC,EAYD,SAAS,GAAyB/4E,EAAG,CACjC,IAAIg5E,EAAkBh5E,EAAE,gBACxB,MAAO,CACHg5E,EAAgB,WAChBA,EAAgB,SACpB,CACJ,CAKA,IAAIC,GAAa,CACb,KAAM,aACN,SAAU,GACV,MAAO,CACH,aACA,kBACA,kBACA,qBACA,oBACA,eACJ,EACA,OAAQ,CACJ,SACA,aACJ,EACA,aAAc,SACd,UAAW,SAAU7kC,EAAU,EAAG,CAC9B,IAAI7uC,EAAQ6uC,EAAS,MACjBh7B,EAAK7T,EAAM,gBAAiByzE,EAAkB5/D,IAAO,OAASg7B,EAAS,aAAa,EAAIh7B,EAAI8/D,EAAgB3zE,EAAM,cAClH4zE,EAAa,IAAI,GACjBC,EAAyBxV,GAAaoV,EAAiB,EAAI,EAC/D,EAAE,MAAM,WAAaG,EACrB/kC,EAAS,MAAM,WAAa+kC,EAC5B,IAAIlJ,EAAY,EAAE,UAAY,eAAiB,cAC3C1qD,EAAU,EAAE,QAChB4zD,EAAW,GAAG,SAAU,SAAU//D,EAAI,CAClC,IAAIsM,EAAYtM,EAAG,UAAWywB,EAAYzwB,EAAG,UACzCm5C,EAASC,GAAWpe,EAAU,EAAG,CACjC,gBAAiB1uB,EACjB,UAAWmkB,CACf,CAAC,EACGjnB,EAAY2C,EAAU,gBAAkB,WACxCA,IACAgtC,EAAO,QAAUhtC,GAErBktC,GAAare,EAAUxxB,EAAW2vC,CAAM,CAC5C,CAAC,EAAE,GAAG,OAAQ,SAAUn5C,EAAI,CACxB,IAAIxF,EAAUwF,EAAG,QAASvF,EAAUuF,EAAG,QAASmO,EAAanO,EAAG,WAChEg7B,EAAS67B,CAAS,EAAE,SAASr8D,EAASC,EAAS0T,EAAW,WAAY,EAAK,CAC/E,CAAC,EAAE,GAAG,aAAc,SAAUnO,EAAI,CAC9B,IAAI2W,EAAO3W,EAAG,KACd2W,EAAKqkB,EAAS67B,CAAS,EAAE,gBAAgB,CAAC,CAC9C,CAAC,EACDkJ,EAAW,UAAU,EAAG,EAAS,CAAE,UAAWC,CAAuB,EAAGF,CAAa,CAAC,CAC1F,EACA,YAAa,SAAU9kC,EAAU,EAAG,CAChC,IAAI+kC,EAAa,EAAE,MAAM,WACzB,GAAKA,EAGL,KAAI//D,EAAKg7B,EAAS,MAAO16B,EAAKN,EAAG,gBAAiB4/D,EAAkBt/D,IAAO,OAAS06B,EAAS,aAAa,EAAI16B,EAAIG,EAAKT,EAAG,gBAAiBigE,EAAkBx/D,IAAO,OAAS,EAAIA,EAAIE,EAAKX,EAAG,mBAAoBkgE,EAAqBv/D,IAAO,OAAS,EAAIA,EAAI+Y,EAAK1Z,EAAG,kBAAmB6wB,EAAoBnX,IAAO,OAAS,GAA2BA,EAAIomD,EAAgB9/D,EAAG,cAC/W,OAAA+/D,EAAW,KAAK,EAAG,EAAS,CAAE,UAAWH,EAAiB,UAAWK,EAAiB,aAAcC,EAAoB,kBAAmB,SAAUh7B,EAAI,CACjJ,OAAOrU,EAAkB,CAAE,gBAAiBqU,EAAG,UAAW,UAAWA,EAAG,SAAU,CAAC,CACvF,CAAE,EAAG46B,CAAa,CAAC,EAChB,GACX,EACA,KAAM,SAAU9kC,EAAU,EAAG,CACzB,OAAO,KAAK,YAAYA,EAAU,CAAC,CACvC,EACA,QAAS,SAAUA,EAAU,EAAG,CAC5B,EAAE,MAAM,WAAW,QAAQ,EAC3B,EAAE,MAAM,WAAa,IACzB,EACA,iBAAkB,SAAUA,EAAU,EAAG,CACrC,OAAO,KAAK,UAAUA,EAAU,EAAS,EAAS,CAAC,EAAG,CAAC,EAAG,CAAE,UAAW,EAAK,CAAC,CAAC,CAClF,EACA,YAAa,SAAUA,EAAU,EAAG,CAChC,OAAO,KAAK,KAAKA,EAAU,CAAC,CAChC,EACA,eAAgB,SAAUA,EAAU,EAAG,CACnC,OAAO,KAAK,QAAQA,EAAU,CAAC,CACnC,EACA,eAAgB,SAAUA,EAAU,EAAG,CACnC,OAAO,KAAK,UAAUA,EAAU,EAAS,EAAS,CAAC,EAAG,CAAC,EAAG,CAAE,QAASA,EAAS,MAAM,OAAQ,CAAC,CAAC,CAClG,EACA,UAAW,SAAUA,EAAU,EAAG,CAC9B,OAAO,KAAK,KAAKA,EAAU,EAAS,EAAS,CAAC,EAAG,CAAC,EAAG,CAAE,QAASA,EAAS,MAAM,OAAQ,CAAC,CAAC,CAC7F,EACA,aAAc,SAAUA,EAAU,EAAG,CACjC,OAAO,KAAK,QAAQA,EAAU,EAAS,EAAS,CAAC,EAAG,CAAC,EAAG,CAAE,QAASA,EAAS,MAAM,OAAQ,CAAC,CAAC,CAChG,EACA,sBAAuB,SAAUA,EAAU,EAAG,CAC1C,OAAO,KAAK,UAAUA,EAAU,EAAS,EAAS,CAAC,EAAG,CAAC,EAAG,CAAE,QAASA,EAAS,MAAM,QAAS,UAAW,EAAK,CAAC,CAAC,CACnH,EACA,iBAAkB,SAAUA,EAAU,EAAG,CACrC,OAAO,KAAK,KAAKA,EAAU,EAAS,EAAS,CAAC,EAAG,CAAC,EAAG,CAAE,QAASA,EAAS,MAAM,OAAQ,CAAC,CAAC,CAC7F,EACA,mBAAoB,SAAUA,EAAU,EAAG,CACvC,OAAO,KAAK,QAAQA,EAAU,EAAS,EAAS,CAAC,EAAG,CAAC,EAAG,CAAE,QAASA,EAAS,MAAM,OAAQ,CAAC,CAAC,CAChG,EACA,MAAO,SAAUA,EAAU,CACvB,IAAIh7B,EACA6jB,EAAQmX,EAAS,OACpBh7B,EAAK6jB,EAAM,cAAgB,MAAQ7jB,IAAO,QAAkBA,EAAG,QAAQ,EACxE6jB,EAAM,WAAa,IACvB,CACJ,EAkCIs8C,GAAU,CACV,KAAM,GACN,MAAO,CACH,SACA,iBACA,aACA,gBACA,YACA,WACA,gBACA,oBACA,sBACA,OACA,mBACA,kBACA,QACA,YACA,iBACA,eACA,6BACA,aACA,WACA,aACA,mBACA,QACA,YACA,kBACA,0BACA,sBACA,gBACA,cACA,sBACA,mBACA,cACA,iBACA,iBACA,oBACA,oBACA,eACJ,EACA,OAAQ,CACJ,eACJ,CACJ,EAEIC,GAAUroC,GAAS,UAAW,CAC9B,MAAO,CAAC,SAAS,EACjB,OAAQ,SAAUiD,EAAU+K,EAAO,CAC/B,IAAI55C,EAAQ6uC,EAAS,MACrB,GAAI7uC,EAAM,SACN,MAAO,CAAC,EAEZ,IAAI6T,EAAKu7D,GAAcpvE,EAAM,SAAW,CAAC,CAAC,EAAGwN,EAAOqG,EAAG,KAAMpG,EAAMoG,EAAG,IAAKo0B,EAAQp0B,EAAG,MAAOq0B,EAASr0B,EAAG,OACrGM,EAAK06B,EAAS,SAAS,EAAGgL,EAAc1lC,EAAG,YAAa8E,EAAO9E,EAAG,KAAM+E,EAAO/E,EAAG,KAAMstB,EAAOttB,EAAG,KAAMi0C,EAAOj0C,EAAG,KAClHo6B,EAAQ,CAACt1B,EAAMC,EAAMuoB,EAAM2mB,CAAI,EAC/B8rB,EAAoB,CAAC,EACzB,OAAI1mE,EAAO,GACP0mE,EAAkB,KAAK,CAAC,EAAG,CAAC,CAAC,EAE7BzmE,EAAM,GACNymE,EAAkB,KAAK,CAAC,EAAG,CAAC,CAAC,EAE7BjsC,EAAQ,GACRisC,EAAkB,KAAK,CAAC,EAAG,CAAC,CAAC,EAE7BhsC,EAAS,GACTgsC,EAAkB,KAAK,CAAC,EAAG,CAAC,CAAC,EAE1BA,EAAkB,IAAI,SAAUrgE,EAAIzC,EAAG,CAC1C,IAAI+C,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGqzC,EAAO/yC,EAAG,CAAC,EAAGgzC,EAAOhzC,EAAG,CAAC,EAC7CggE,EAAc5lC,EAAM2Y,CAAI,EACxBktB,EAAc7lC,EAAM4Y,CAAI,EACxBktB,EAAcx6B,EAAYqN,CAAI,EAC9BotB,EAAcz6B,EAAYsN,CAAI,EAC9BtsC,EAAI0mB,GAAiB,CAAC,EAAG,CAAC,EAAG,CAAC,IAAK,CAAC,EAAG,CAAC,EAAG,GAAG,EAAG,CAAC,IAAK,GAAG,EAAG4yC,EAAaC,EAAaC,EAAaC,CAAW,EACnH,GAAKz5D,EAAE,OAGP,OAAQ++B,EAAM,cAAc,MAAO,CAAE,IAAK,UAAU,OAAOxoC,CAAC,EAAG,UAAWsE,GAAO,SAAS,EAAG,MAAO,CAC5F,UAAWkwD,GAAc/qD,EAAG,EAAI,CACpC,CAAE,CAAC,CACX,CAAC,CACL,CACJ,CAAC,EAgBG05D,GAAoB,CAAC,KAAM,KAAM,KAAM,IAAI,EAC/C,SAASC,GAAe1/D,EAAQhD,EAAM,CAClC,IAAI2iE,EAAU3/D,EAAO,CAAC,EAAIA,EAAO,CAAC,EAC9B4/D,EAAWD,EAAU3iE,EAAOA,EAAO2iE,EAAU,EACjD,OAAA3/D,EAAO,CAAC,GAAK4/D,EACb5/D,EAAO,CAAC,EAAIhD,EAAOgD,EAAO,CAAC,EAAI4/D,EACxB5/D,CACX,CACA,IAAI6/D,GAA0B,CAAC,EAAG,EAAG,EAAG,CAAC,EACrCC,GAAwB,CAAC,EAAG,EAAG,EAAG,CAAC,EACnCC,GAA+B,CAAC,EAAG,GAAI,GAAI,CAAC,EAC5CC,GAA6B,CAAC,EAAG,EAAG,GAAI,EAAE,EAC9C,SAASC,GAAgB13B,EAAW4uB,EAAY7iE,EAAO7D,EAAQiI,EAAMC,EAAKw6B,EAAOC,EAAQ,CACjF16B,IAAS,SAAUA,EAAO,GAC1BC,IAAQ,SAAUA,EAAM,GACxBw6B,IAAU,SAAUA,EAAQ7+B,GAC5B8+B,IAAW,SAAUA,EAAS3iC,GAClC,IAAIyvE,EAAa,CAAC,EACdp4B,EAAa,GACbq4B,EAAc53B,EAAU,OAAO,SAAUxrC,EAAK,CAAE,MAAO,CAACA,EAAI,OAAS,CAAC,EACtEqjE,EAAOD,EAAY,IAAI,SAAUnzB,EAAS,CAC1C,IAAIr6C,EAAaq6C,EAAQ,WAAYt6C,EAAWs6C,EAAQ,SAAUjwC,EAAMiwC,EAAQ,IAKhF,GAJIt6C,GAAY,CAACo1C,IACbA,EAAa,GACbo4B,EAAW,KAAK,GAAG,GAEnBp4B,EAAY,CACZ,IAAIu4B,EAAS,KAAK,IAAI,EAAG3tE,IAAa,EAAIqK,EAAI,CAAC,EAAIpE,EAAMy6B,EAASr2B,EAAI,CAAC,CAAC,EACxE,OAAAmjE,EAAW,KAAKhJ,GAAemJ,EAAQ5vE,EAAQ0mE,CAAU,CAAC,EACnDkJ,CACX,KACK,CACD,IAAIA,EAAS,KAAK,IAAI,EAAG1tE,IAAe,EAAIoK,EAAI,CAAC,EAAIrE,EAAOy6B,EAAQp2B,EAAI,CAAC,CAAC,EAC1E,OAAAmjE,EAAW,KAAKhJ,GAAemJ,EAAQ/rE,EAAO6iE,CAAU,CAAC,EAClDkJ,CACX,CACJ,CAAC,EACD,MAAO,CACH,YAAaF,EACb,OAAQD,EACR,KAAME,CACV,CACJ,CACA,SAASE,GAAeC,EAAc,CAKlC,QAHIC,EAAkB,CAAC,EAAG,CAAC,EACvBC,EAAgB,CAAC,EAAG,CAAC,EACrBpkE,EAASkkE,EAAa,OACjB,EAAI,EAAG,EAAIlkE,EAAQ,EAAE,EAAG,CAC7B,IAAIqkE,EAAWH,EAAa,CAAC,EACxBG,EAAS,MAGVA,EAAS,aACLF,EAAgB,CAAC,IAAM,IACvBA,EAAgB,CAAC,EAAI,GAEzBA,EAAgB,CAAC,EAAI,EAAIA,EAAgB,CAAC,EAAI,EAC9CC,EAAc,CAAC,EAAI,EAAI,GAEvBC,EAAS,WACLD,EAAc,CAAC,IAAM,IACrBA,EAAc,CAAC,EAAI,GAEvBA,EAAc,CAAC,EAAI,EAAIA,EAAc,CAAC,EAAI,GAElD,CACA,MAAO,CACH,gBAAiBD,EACjB,cAAeC,CACnB,CACJ,CACA,SAASE,GAAgB3gE,EAAQ1L,EAAO7D,EAAQiI,EAAMC,EAAKioE,EAAWC,EAAM,CACxE,IAAI9hE,EAAIM,EAAIG,EAAIE,EACZkhE,IAAc,SAAUA,EAAY,CAAC,EAAG,CAAC,GACzCC,IAAS,SAAUA,EAAO,IAC9B,IAAIC,EAAa9gE,EAAO,QAAQ,GAAG,EAC/B+gE,GAAeD,EAAa,GAAK9gE,EAAO,MAAM,EAAG8gE,CAAU,EAAI9gE,GAAQ,OACvEghE,EAAmBhhE,EAAO,MAAM,EAAG+gE,CAAW,EAC9CE,EAAiBjhE,EAAO,MAAM+gE,EAAc,CAAC,EAC7CG,EAAyBF,EAAiB,OAC1CG,EAAuBF,EAAe,OACtCG,EAAoBD,EAAuB,EAC3C1oD,EAAKoe,EAAOmqC,EAAkB,CAAC,EAAGtoD,EAAKD,EAAG,CAAC,EAAG4oD,EAAU3oD,IAAO,OAAS,MAAQA,EAAIE,EAAKH,EAAG,CAAC,EAAG6oD,EAAU1oD,IAAO,OAASyoD,EAAUzoD,EAAIE,EAAKL,EAAG,CAAC,EAAG8oD,EAAUzoD,IAAO,OAASuoD,EAAUvoD,EAAI0oD,EAAK/oD,EAAG,CAAC,EAAGgpD,EAAUD,IAAO,OAASF,EAAUE,EAC5OE,EAAK7qC,EAAOoqC,EAAgB,CAAC,EAAGU,EAAKD,EAAG,CAAC,EAAGE,EAAUD,IAAO,OAASN,EAAUM,EAAIE,EAAKH,EAAG,CAAC,EAAGI,EAAUD,IAAO,OAAST,EAAoBQ,EAAUN,EAAUO,EAAIE,EAAKL,EAAG,CAAC,EAAGM,EAAUD,IAAO,OAASX,EAAoBQ,EAAUL,EAAUQ,EAAIE,EAAKP,EAAG,CAAC,EAAGQ,EAAUD,IAAO,OAASb,EAAoBU,EAAUL,EAAUQ,EACtUE,EAAqB,CAACd,EAASC,EAASC,EAASE,CAAO,EAAE,IAAI,SAAU1kE,EAAK,CAAE,OAAO2F,GAAgB3F,EAAKzI,CAAK,CAAG,CAAC,EACpH8tE,EAAmB,CAACR,EAASE,EAASE,EAASE,CAAO,EAAE,IAAI,SAAUnlE,EAAK,CAAE,OAAO2F,GAAgB3F,EAAKtM,CAAM,CAAG,CAAC,EACnHg2C,EAAkB07B,EAAmB,MAAM,EAC3C37B,EAAgB47B,EAAiB,MAAM,EAC3CrjE,EAAK83B,EAAO6oC,GAAe,CAACj5B,EAAgB,CAAC,EAAGA,EAAgB,CAAC,CAAC,EAAGnyC,CAAK,EAAG,CAAC,EAAGmyC,EAAgB,CAAC,EAAI1nC,EAAG,CAAC,EAAG0nC,EAAgB,CAAC,EAAI1nC,EAAG,CAAC,EACtIM,EAAKw3B,EAAO6oC,GAAe,CAACj5B,EAAgB,CAAC,EAAGA,EAAgB,CAAC,CAAC,EAAGnyC,CAAK,EAAG,CAAC,EAAGmyC,EAAgB,CAAC,EAAIpnC,EAAG,CAAC,EAAGonC,EAAgB,CAAC,EAAIpnC,EAAG,CAAC,EACtIG,EAAKq3B,EAAO6oC,GAAe,CAACl5B,EAAc,CAAC,EAAGA,EAAc,CAAC,CAAC,EAAG/1C,CAAM,EAAG,CAAC,EAAG+1C,EAAc,CAAC,EAAIhnC,EAAG,CAAC,EAAGgnC,EAAc,CAAC,EAAIhnC,EAAG,CAAC,EAC/HE,EAAKm3B,EAAO6oC,GAAe,CAACl5B,EAAc,CAAC,EAAGA,EAAc,CAAC,CAAC,EAAG/1C,CAAM,EAAG,CAAC,EAAG+1C,EAAc,CAAC,EAAI9mC,EAAG,CAAC,EAAG8mC,EAAc,CAAC,EAAI9mC,EAAG,CAAC,EAC/H,IAAI2iE,EAAsBxB,EACpBp6B,EACAA,EAAgB,MAAM,EAAG,KAAK,IAAIm6B,EAAU,CAAC,EAAGM,CAAsB,CAAC,EACzEoB,EAAoBzB,EAClBr6B,EACAA,EAAc,MAAM,EAAG,KAAK,IAAIo6B,EAAU,CAAC,EAAGO,CAAoB,CAAC,EACzE,OAAO,EAAc,EAAc,CAAC,EAAGtqC,EAAOwrC,EAAoB,IAAI,SAAUtlE,EAAKT,GAAG,CACpF,IAAIkzB,GAAYiwC,GAAkBnjE,EAAC,EACnC,MAAO,CACH,QAASA,IAAK4kE,EACd,WAAYnB,GAA6BzjE,EAAC,EAC1C,SAAU,EACV,IAAK,CAAC5D,EAAOqE,EAAKpE,GAAOqnE,GAA2B1jE,EAAC,IAAM,GAAK7L,EAAS,EAAE,EAC3E,IAAK,GACL,IAAK0xE,EAAmB7lE,EAAC,EACzB,UAAWkzB,EACf,CACJ,CAAC,CAAC,EAAG,EAAK,EAAGqH,EAAOyrC,EAAkB,IAAI,SAAUvlE,EAAKT,GAAG,CACxD,IAAIkzB,GAAYiwC,GAAkBnjE,EAAC,EACnC,MAAO,CACH,QAASA,IAAK6kE,EACd,WAAY,EACZ,SAAUnB,GAA2B1jE,EAAC,EACtC,IAAK,CAAC5D,GAAQqnE,GAA6BzjE,EAAC,IAAM,GAAKhI,EAAQ,GAAIqE,EAAMoE,CAAG,EAC5E,IAAK,GACL,IAAKqlE,EAAiB9lE,EAAC,EACvB,UAAWkzB,EACf,CACJ,CAAC,CAAC,EAAG,EAAK,CACd,CACA,SAAS+yC,GAAgBhC,EAAc9mC,EAAO3iC,EAAO2yB,EAAYptB,EAAQ,CACjEA,IAAW,SAAUA,EAASo9B,EAAM,QACxC,IAAI16B,EAAKuhE,GAAeC,EAAa,MAAM92C,CAAU,CAAC,EAAG+2C,EAAkBzhE,EAAG,gBAAiB0hE,EAAgB1hE,EAAG,cAC9GyjE,EAAe1rE,EAAQ2yB,EACvBg5C,EAAc,EAClB,GAAID,IAAiB,EACjBC,EAAcpmE,UAETmmE,EAAe,GAAKA,EAAehC,EAAgB,CAAC,EACzDiC,EAAcjC,EAAgB,CAAC,EAAIgC,UAE9BA,GAAgB/B,EAAc,CAAC,EACpCgC,EAAchC,EAAc,CAAC,EAAIA,EAAc,CAAC,EAAI+B,MAGpD,QAEJjC,EAAa,OAAOzpE,EAAO2rE,CAAW,EACtChpC,EAAM,OAAO3iC,EAAO2rE,CAAW,CACnC,CACA,SAASC,GAAanC,EAAc9mC,EAAOhQ,EAAYk5C,EAAiBC,EAAev+D,EAAOC,EAAO6uB,EAAOC,EAAQ16B,EAAMC,EAAK,CACvHD,IAAS,SAAUA,EAAO,GAC1BC,IAAQ,SAAUA,EAAM,GAC5B,IAAIoG,EAAKuhE,GAAeC,EAAa,MAAM92C,CAAU,CAAC,EAAG+2C,EAAkBzhE,EAAG,gBAAiB0hE,EAAgB1hE,EAAG,cAClH,GAAI4jE,EAAkB,GAIlB,QAHIE,EAAU9C,GAA6B4C,CAAe,IAAM,EAC1Dt+D,EAAQ3L,EACRy6B,EAAQ9uB,EACL/H,EAAIkkE,EAAgB,CAAC,EAAGlkE,GAAKqmE,EAAiB,EAAErmE,EAAG,CACxD,IAAI/D,EAAIynE,GAA2B1jE,CAAC,IAAM,EAAI3D,EAAMy6B,EAChD96B,EAAI,EAgBR,GAfIqqE,IAAoBrmE,EACpBhE,EAAI+L,EAEC/H,IAAM,EACXhE,EAAII,EAAOmqE,EAEN9C,GAA6BzjE,CAAC,IAAM,KACzChE,EAAI66B,GAASsG,EAAMhQ,CAAU,EAAE,CAAC,EAAI/wB,IAExC6nE,EAAa,OAAO92C,EAAantB,EAAG,EAAG,CACnC,WAAYyjE,GAA6BzjE,CAAC,EAC1C,SAAU,EACV,IAAK,CAAChE,EAAGC,CAAC,CACd,CAAC,EACDkhC,EAAM,OAAOhQ,EAAantB,EAAG,EAAG,CAAChE,EAAGC,CAAC,CAAC,EAClC+D,IAAM,EACN,KAER,SAEKsmE,EAAgB,GAAI,CACzB,IAAIE,EAAU9C,GAA2B4C,CAAa,IAAM,EACtDt+D,EAAQ3L,EACRy6B,EAAS9uB,EACf,GAAIk8D,EAAgB,CAAC,IAAM,GAAKC,EAAc,CAAC,IAAM,EAAG,CACpD,IAAI1jE,EAAM,CACNrE,EAAOoqE,EACPnqE,CACJ,EACA4nE,EAAa,KAAK,CACd,WAAYR,GAA6B,CAAC,EAC1C,SAAU,EACV,IAAKhjE,CACT,CAAC,EACD08B,EAAM,KAAK18B,CAAG,CAClB,CAEA,QADIgmE,EAAqBtC,EAAc,CAAC,EAC/BnkE,EAAImkE,EAAc,CAAC,EAAGnkE,GAAKsmE,EAAe,EAAEtmE,EAAG,CACpD,IAAIhE,EAAIynE,GAA6BzjE,CAAC,IAAM,EAAI5D,EAAOy6B,EACnD56B,EAAI,EAmBR,GAlBIqqE,IAAkBtmE,EAClB/D,EAAI+L,EAEChI,IAAM,EACX/D,EAAII,EAAMmqE,EAEL9C,GAA2B1jE,CAAC,IAAM,EACvC/D,EAAIkhC,EAAMhQ,EAAas5C,CAAkB,EAAE,CAAC,EAEvC/C,GAA2B1jE,CAAC,IAAM,KACvC/D,EAAI66B,GAAUqG,EAAMhQ,EAAas5C,CAAkB,EAAE,CAAC,EAAIpqE,IAE9D4nE,EAAa,KAAK,CACd,WAAY,EACZ,SAAUP,GAA2B1jE,CAAC,EACtC,IAAK,CAAChE,EAAGC,CAAC,CACd,CAAC,EACDkhC,EAAM,KAAK,CAACnhC,EAAGC,CAAC,CAAC,EACb+D,IAAM,EACN,KAER,CACJ,CACJ,CACA,SAAS0mE,GAAiBzC,EAAcH,EAAM,CACtCA,IAAS,SAAUA,EAAOG,EAAa,IAAI,SAAUxjE,EAAK,CAAE,OAAOA,EAAI,GAAK,CAAC,GACjF,IAAIkmE,EAAc1C,EACb,IAAI,SAAUxjE,EAAKT,EAAG,CAAE,OAAOS,EAAI,WAAaqjE,EAAK9jE,CAAC,EAAI,IAAM,CAAC,EAAE,OAAO,SAAUS,EAAK,CAAE,OAAOA,GAAO,IAAM,CAAC,EACjHmmE,EAAY3C,EACX,IAAI,SAAUxjE,EAAKT,EAAG,CAAE,OAAOS,EAAI,SAAWqjE,EAAK9jE,CAAC,EAAI,IAAM,CAAC,EAAE,OAAO,SAAUS,EAAK,CAAE,OAAOA,GAAO,IAAM,CAAC,EACnH,MAAO,CACH,YAAakmE,EACb,UAAWC,CACf,CACJ,CAEA,IAAIC,GAAkB,CAClB,CAAC,EAAG,GAAI,GAAG,EACX,CAAC,EAAG,EAAG,GAAG,CACd,EACIC,GAAuB,CACvB,CAAC,GAAI,GAAI,IAAI,EACb,CAAC,EAAG,GAAI,GAAG,EACX,CAAC,EAAG,GAAI,IAAI,EACZ,CAAC,EAAG,EAAG,GAAG,EACV,CAAC,EAAG,EAAG,IAAI,EACX,CAAC,EAAG,EAAG,GAAG,EACV,CAAC,GAAI,EAAG,IAAI,EACZ,CAAC,GAAI,EAAG,GAAG,CACf,EAGA,SAASC,GAActpC,EAAUupC,EAAU7pC,EAAO,CAC9C,IAAI8pC,EAAexpC,EAAS,MAAM,aAC9Bh7B,EAAKg7B,EAAS,MAAOzlC,EAAQyK,EAAG,MAAOtO,EAASsO,EAAG,OACnDM,EAAKikE,EAAUE,EAAWnkE,EAAG,KAAMokE,EAAYpkE,EAAG,MAClDqkE,EAASF,IAAa,OACtBG,EAAWH,IAAa,SAC5B,GAAIA,IAAa,UACb,OAAO/pC,EAAM,IAAI,SAAU18B,EAAK,CAAE,MAAO,GAAG,OAAOm6D,GAAen6D,EAAI,CAAC,EAAGzI,EAAOivE,CAAY,EAAG,GAAG,EAAE,OAAOrM,GAAen6D,EAAI,CAAC,EAAGtM,EAAQ8yE,CAAY,CAAC,CAAG,CAAC,EAE3J,GAAIG,GAAUF,IAAa,QAAS,CACrC,IAAIvsB,EAAQxd,EAAM,CAAC,EAAE,CAAC,EAClBtG,EAAQsG,EAAM,CAAC,EAAE,CAAC,EAClB/gC,EAAO+gC,EAAM,CAAC,EAAE,CAAC,EACjBrG,EAASqG,EAAM,CAAC,EAAE,CAAC,EACvB,GAAIiqC,EACA,MAAO,CACHzsB,EACA9jB,EACAC,EACA16B,CACJ,EAAE,IAAI,SAAUqE,EAAK,CAAE,MAAO,GAAG,OAAOA,EAAK,IAAI,CAAG,CAAC,EAEzD,IAAImjE,EAAa,CAACjpB,EAAO3iD,EAAQ6+B,EAAO1iC,EAAS2iC,EAAQ16B,CAAI,EACxD,IAAI,SAAUqE,EAAKT,EAAG,CAAE,OAAO46D,GAAen6D,EAAKT,EAAI,EAAIhI,EAAQ7D,EAAQ8yE,CAAY,CAAG,CAAC,EAChG,GAAI9pC,EAAM,OAAS,EAAG,CAClB,IAAIj6B,EAAKq3B,EAAO3L,GAAMuO,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EAAG,CAAC,EAAGmqC,EAAWpkE,EAAG,CAAC,EAAGqkE,EAAYrkE,EAAG,CAAC,EACjF0gE,EAAW,KAAK,MAAMA,EAAY,EAAc,CAAC,OAAO,EAAGrpC,EAAOopC,GAAgBwD,EAAU,MAAM,CAAC,EAAE,IAAI,SAAUrsE,EAAMkF,EAAG,CACxH,OAAO,EAAS,EAAS,CAAC,EAAGlF,CAAI,EAAG,CAAE,IAAKqiC,EAAMn9B,CAAC,CAAE,CAAC,CACzD,CAAC,EAAGinE,EAAcK,EAAUC,EAAWnrE,EAAMu+C,EAAO9jB,EAAOC,CAAM,EAAE,MAAM,EAAG,EAAK,CAAC,CACtF,CACA,OAAO8sC,CACX,SACSyD,GAAYH,IAAa,UAAW,CACzC,IAAI9+D,EAAS+0B,EAAM,CAAC,EAChBwf,EAAKie,GAAe,EAAIz9B,EAAM,CAAC,EAAE,CAAC,EAAI/0B,EAAO,CAAC,CAAC,EAAGi/D,EAAW,KAAK,MAAMrvE,EAAQA,EAAQ7D,EAASA,GAAU,CAAC,EAAIA,EAAQ8yE,CAAY,EACpIrD,EAAayD,EAAW,CAAC1qB,CAAE,EACzB,CAACie,GAAe,EAAIz9B,EAAM,CAAC,EAAE,CAAC,EAAI/0B,EAAO,CAAC,CAAC,EAAGpQ,EAAOivE,CAAY,EAAGtqB,CAAE,EAC5E,OAAAinB,EAAW,KAAK,KAAMhJ,GAAexyD,EAAO,CAAC,EAAGpQ,EAAOivE,CAAY,EAAGrM,GAAexyD,EAAO,CAAC,EAAGjU,EAAQ8yE,CAAY,CAAC,EAC9GrD,CACX,CACJ,CACA,SAAS4D,GAAanrE,EAAKw6B,EAAOC,EAAQ16B,EAAM,CAC5C,IAAIu4B,EAAK,CAACv4B,GAAOA,EAAOy6B,GAAS,EAAGA,CAAK,EACrCjC,EAAK,CAACv4B,GAAMA,EAAMy6B,GAAU,EAAGA,CAAM,EACzC,OAAOgwC,GAAqB,IAAI,SAAUrkE,EAAI,CAC1C,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGglE,EAAO1kE,EAAG,CAAC,EAAG2kE,EAAO3kE,EAAG,CAAC,EAAG64B,EAAM74B,EAAG,CAAC,EAC1D/G,EAAI24B,EAAG8yC,EAAO,CAAC,EACfxrE,EAAI24B,EAAG8yC,EAAO,CAAC,EACnB,MAAO,CACH,SAAU,EAAIA,CAAI,EAClB,WAAY,EAAID,CAAI,EACpB,UAAW7rC,EACX,IAAK,CAAC5/B,EAAGC,CAAC,CACd,CACJ,CAAC,CACL,CACA,SAAS0rE,GAAe1D,EAAc,CAClC,IAAI2D,EAAS,CAAC,IAAU,IAAS,EAC7BC,EAAS,CAAC,IAAU,IAAS,EACjC,OAAA5D,EAAa,QAAQ,SAAUxhE,EAAI,CAC/B,IAAIhC,EAAMgC,EAAG,IACbmlE,EAAO,CAAC,EAAI,KAAK,IAAIA,EAAO,CAAC,EAAGnnE,EAAI,CAAC,CAAC,EACtCmnE,EAAO,CAAC,EAAI,KAAK,IAAIA,EAAO,CAAC,EAAGnnE,EAAI,CAAC,CAAC,EACtConE,EAAO,CAAC,EAAI,KAAK,IAAIA,EAAO,CAAC,EAAGpnE,EAAI,CAAC,CAAC,EACtConE,EAAO,CAAC,EAAI,KAAK,IAAIA,EAAO,CAAC,EAAGpnE,EAAI,CAAC,CAAC,CAC1C,CAAC,EACM,CACH,EAAImnE,EAAO,CAAC,EAAIA,EAAO,CAAC,CAAC,EACzB,EAAIC,EAAO,CAAC,EAAIA,EAAO,CAAC,CAAC,CAC7B,CACJ,CACA,SAASC,GAAY9zE,EAAQgE,EAAO7D,EAAQ4zE,EAAaC,EAAY,CACjE,IAAIvlE,EAAIM,EAAIG,EAAIE,EAAI+Y,EAAIC,EAAIE,EAAIE,EAAI0oD,EACpC,GAAKlxE,EAGL,KAAIi0E,EAAWD,EACf,GAAI,CAACC,EAAU,CACX,IAAIvkC,EAAWW,GAAerwC,CAAM,EAChCgzE,EAAWtjC,EAAS,UAAU,EAClCukC,EAAWjB,IAAa,OAASA,EAAWtjC,EAAS,MAAM,CAC/D,CACA,GAAI,IAACukC,GAAYA,IAAa,QAAUA,IAAa,UACjDA,EAAWF,EACP,CAACE,IAIT,KAAI7C,EAAKjhE,GAAa8jE,CAAQ,EAAG5C,EAAKD,EAAG,OAAQ8C,EAAa7C,IAAO,OAAS4C,EAAW5C,EAAIE,EAAKH,EAAG,MAAO98E,EAAQi9E,IAAO,OAAS,GAAKA,EACrI8B,EAAWa,IAAe,SAC1BC,EAAW,IACf,GAAID,IAAe,UAAW,CAC1B,IAAIxkE,EAASQ,GAAW5b,GAAS,oCAAoC,EACrE6/E,EAAW,IACX,IAAIhrC,EAAQz5B,EAAO,IAAI,SAAUjD,GAAK,CAClC,IAAIgC,GAAK83B,EAAO95B,GAAI,MAAM,GAAG,EAAG,CAAC,EAAG2nE,GAAO3lE,GAAG,CAAC,EAAG4lE,GAAO5lE,GAAG,CAAC,EAC7D,MAAO,CACH,SAAU,EACV,WAAY,EACZ,IAAK,CACD2D,GAAgBgiE,GAAMpwE,CAAK,EAC3BoO,GAAgBiiE,GAAMl0E,CAAM,CAChC,CACJ,CACJ,CAAC,EACGuiC,EAAUpC,GAAW6I,EAAM,IAAI,SAAU18B,GAAK,CAAE,OAAOA,GAAI,GAAK,CAAC,CAAC,EACtE,MAAO,CACH,KAAMynE,EACN,SAAUD,EACV,MAAO9qC,EACP,SAAUgrC,EACV,KAAMzxC,EAAQ,KACd,MAAOA,EAAQ,KACf,IAAKA,EAAQ,KACb,OAAQA,EAAQ,IACpB,CACJ,SACS2wC,GAAYa,IAAe,UAAW,CAC3C,IAAIE,EAAO,GACPC,EAAO,GACPC,EAAY,EACZC,EAAY,EACZ7kE,EAASO,GAAW3b,CAAK,EAC7B,GAAI++E,EAAU,CACV,IAAImB,EAAS,GACb/lE,EAAK83B,EAAO72B,EAAQ,CAAC,EAAGX,EAAKN,EAAG,CAAC,EAAG+lE,EAASzlE,IAAO,OAAS,MAAQA,EAAIG,EAAKT,EAAG,CAAC,EAAG2lE,EAAOllE,IAAO,OAAS,MAAQA,EAAIE,EAAKX,EAAG,CAAC,EAAG4lE,EAAOjlE,IAAO,OAAS,MAAQA,EACnKklE,EAAYliE,GAAgBoiE,EAAQ,KAAK,MAAMxwE,EAAQA,EAAQ7D,EAASA,GAAU,CAAC,CAAC,EACpFo0E,EAAYD,CAChB,KACK,CACD,IAAIG,EAAU,GACVC,EAAU,GACdvsD,EAAKoe,EAAO72B,EAAQ,CAAC,EAAG0Y,EAAKD,EAAG,CAAC,EAAGssD,EAAUrsD,IAAO,OAAS,MAAQA,EAAIE,EAAKH,EAAG,CAAC,EAAGusD,EAAUpsD,IAAO,OAAS,MAAQA,EAAIE,EAAKL,EAAG,CAAC,EAAGisD,EAAO5rD,IAAO,OAAS,MAAQA,EAAI0oD,EAAK/oD,EAAG,CAAC,EAAGksD,EAAOnD,IAAO,OAAS,MAAQA,EACtNoD,EAAYliE,GAAgBqiE,EAASzwE,CAAK,EAC1CuwE,EAAYniE,GAAgBsiE,EAASv0E,CAAM,CAC/C,CACA,IAAIw0E,EAAc,CACdviE,GAAgBgiE,EAAMpwE,CAAK,EAC3BoO,GAAgBiiE,EAAMl0E,CAAM,CAChC,EACIgpC,EAAQ,EAAc,CACtB,CACI,SAAU,EACV,WAAY,EACZ,IAAKwrC,EACL,UAAW,MACf,CACJ,EAAGpuC,EAAOssC,GAAgB,MAAM,EAAGQ,EAAW,EAAI,CAAC,EAAE,IAAI,SAAUzrC,GAAK,CAAE,MAAQ,CAC9E,SAAU,EAAIA,GAAI,CAAC,CAAC,EACpB,WAAYA,GAAI,CAAC,EACjB,UAAWA,GAAI,CAAC,EAChB,IAAK,GACL,IAAK,CACD+sC,EAAY,CAAC,EAAI/sC,GAAI,CAAC,EAAI0sC,EAC1BK,EAAY,CAAC,EAAI/sC,GAAI,CAAC,EAAI2sC,CAC9B,CACJ,CAAI,CAAC,CAAC,EAAG,EAAK,EACd,MAAO,CACH,KAAML,EACN,SAAUD,EACV,QAASK,EACT,QAASC,EACT,KAAMI,EAAY,CAAC,EAAIL,EACvB,IAAKK,EAAY,CAAC,EAAIJ,EACtB,MAAOI,EAAY,CAAC,EAAIL,EACxB,OAAQK,EAAY,CAAC,EAAIJ,EACzB,MAAOprC,EACP,SAAUgrC,CACd,CACJ,SACSD,IAAe,QAAS,CAC7B,IAAIxkE,EAASO,GAAW3b,GAAS,SAAS,EACtCsgF,EAAallE,EAAO,QAAQ,OAAO,EACnCmlE,GAAcD,EAAa,GAAKllE,EAAO,MAAM,EAAGklE,CAAU,EAAIllE,GAAQ,OACtEolE,EAAeplE,EAAO,MAAMmlE,EAAa,CAAC,EAC1CpD,EAAKlrC,EAAO72B,EAAO,MAAM,EAAGmlE,CAAU,EAAG,CAAC,EAAGxb,EAAWoY,EAAG,CAAC,EAAGE,EAAKF,EAAG,CAAC,EAAGlY,EAAaoY,IAAO,OAAStY,EAAWsY,EAAIoD,EAAKtD,EAAG,CAAC,EAAGjY,GAAcub,IAAO,OAAS1b,EAAW0b,EAAIC,GAAKvD,EAAG,CAAC,EAAGnY,GAAY0b,KAAO,OAASzb,EAAayb,GACrOC,GAAK1uC,EAAO,CAAC8yB,EAAUG,EAAW,EAAE,IAAI,SAAU/sD,GAAK,CAAE,OAAO2F,GAAgB3F,GAAKtM,CAAM,CAAG,CAAC,EAAG,CAAC,EAAG+0E,EAAQD,GAAG,CAAC,EAAGnyC,GAASmyC,GAAG,CAAC,EAClIE,GAAK5uC,EAAO,CAAC+yB,GAAWC,CAAU,EAAE,IAAI,SAAU9sD,GAAK,CAAE,OAAO2F,GAAgB3F,GAAKzI,CAAK,CAAG,CAAC,EAAG,CAAC,EAAGoE,GAAO+sE,GAAG,CAAC,EAAGtyC,GAAQsyC,GAAG,CAAC,EAC/HC,GAAYpxE,EAAQ6+B,GACpBwyC,GAAal1E,EAAS2iC,GACtB+sC,GAAcQ,GAAgByE,EAAcM,GAAYhtE,GAAMitE,GAAaH,EAAO9sE,GAAM8sE,CAAK,EAC7F/rC,EAAQ,EAAc,EAAc,CAAC,EAAG5C,EAAOitC,GAAa0B,EAAOE,GAAWC,GAAYjtE,EAAI,CAAC,EAAG,EAAK,EAAGm+B,EAAOspC,EAAW,EAAG,EAAK,EACxI,MAAO,CACH,KAAM,QACN,SAAUoE,EACV,MAAO9qC,EACP,IAAK+rC,EACL,KAAM9sE,GACN,MAAOgtE,GACP,OAAQC,GACR,OAAQP,EACR,SAAUX,CACd,CACJ,SACSD,IAAe,OAAQ,CAE5B,IAAIxkE,EAASQ,GAAW5b,GAAS,QAAQ,OAAO0P,EAAO,MAAM,EAAE,OAAO7D,EAAQ,SAAS,CAAC,EACxFg0E,EAAW,IACX,IAAImB,GAAK/uC,EAAO72B,EAAO,IAAI,SAAUjD,GAAK,CACtC,IAAI8oE,GAAWllE,GAAU5D,EAAG,EAAE,MAC9B,OAAO8oE,EACX,CAAC,EAAG,CAAC,EAAGC,GAAQF,GAAG,CAAC,EAAGzyC,GAAQyyC,GAAG,CAAC,EAAGxyC,GAASwyC,GAAG,CAAC,EAAGltE,GAAOktE,GAAG,CAAC,EAC7DnsC,EAAQqqC,GAAagC,GAAO3yC,GAAOC,GAAQ16B,EAAI,EACnD,MAAO,CACH,KAAM,OACN,SAAU6rE,EACV,MAAO9qC,EACP,IAAKqsC,GACL,MAAO3yC,GACP,OAAQC,GACR,KAAM16B,GACN,OAAQsH,EACR,SAAUykE,CACd,CACJ,GAEJ,CAEA,SAASsB,GAAexF,EAAczpE,EAAOokC,EAAMwoC,EAAQhgE,EAAW,CAClE,IAAI3E,EAAKwhE,EAAazpE,CAAK,EAAG04B,EAAYzwB,EAAG,UAAWijB,EAAMjjB,EAAG,IAC7DinE,EAAQzF,EAAa,IAAI,UAAY,CAAE,MAAO,CAAC,EAAG,CAAC,CAAG,CAAC,EACvD16B,EAAarW,EAAYA,EAAU,MAAM,EAAE,EAAI,CAAC,EACpD,GAAIk0C,GAAU5sE,EAAQ,EAAG,CACrB,IAAImvE,EAAqBpgC,EAAW,OAAO,SAAU3N,EAAK,CAAE,OAAOA,IAAQ,KAAOA,IAAQ,GAAK,CAAC,EAC5FguC,EAAuBrgC,EAAW,OAAO,SAAU3N,EAAK,CAAE,OAAOA,IAAQ,KAAOA,IAAQ,GAAK,CAAC,EAC9FiuC,EAAsBF,EAAmB,CAAC,EAC1CG,EAAwBF,EAAqB,CAAC,EAClDF,EAAMlvE,CAAK,EAAIokC,EACf,IAAI77B,EAAKw3B,EAAOotC,GAAe1D,CAAY,EAAG,CAAC,EAAGjsE,EAAQ+K,EAAG,CAAC,EAAG5O,EAAS4O,EAAG,CAAC,EAC1E8D,EAAQ7O,GAAS7D,EAAS6D,EAAQ7D,EAAS,EAC/C,GAAI0S,GAASO,EAAW,CAIpB,IAAI2iE,GAAcvvE,EAAQ,GAAK,EAC3BioC,EAAgBwhC,EAAa8F,CAAU,EAAE,IACzCzqB,EAAgB,CAAC,EAAG,CAAC,EACrBpsB,EAAU,QAAQ,GAAG,EAAI,GACzBosB,EAAc,CAAC,EAAI,GAEdpsB,EAAU,QAAQ,GAAG,EAAI,KAC9BosB,EAAc,CAAC,EAAI,GAEnBpsB,EAAU,QAAQ,GAAG,EAAI,GACzBosB,EAAc,CAAC,EAAI,GAEdpsB,EAAU,QAAQ,GAAG,EAAI,KAC9BosB,EAAc,CAAC,EAAI,GAEvB,IAAI0qB,EAAW9N,GAAkB,CAAClkE,EAAO7D,CAAM,EAAGyqC,EAAM/3B,EAAOy4C,EAAe,EAAI,EAC9EK,EAAY3nD,EAAQgyE,EAAS,CAAC,EAC9BpqB,EAAazrD,EAAS61E,EAAS,CAAC,EAChCrvB,EAAQlY,EAAc,CAAC,EACvB3L,EAAS2L,EAAc,CAAC,EACxBrmC,EAAOqmC,EAAc,CAAC,EACtB5L,EAAQ4L,EAAc,CAAC,EACvB6c,EAAc,CAAC,IAAM,GACrBljD,EAAOy6B,EAAQ8oB,EAEVL,EAAc,CAAC,IAAM,EAC1BzoB,EAAQz6B,EAAOujD,GAGfvjD,EAAOA,EAAOujD,EAAY,EAC1B9oB,EAAQA,EAAQ8oB,EAAY,GAE5BL,EAAc,CAAC,IAAM,GACrB3E,EAAQ7jB,EAAS8oB,GAEZN,EAAc,CAAC,IAAM,IAI1B3E,EAAQ7jB,EAAS8oB,EAAa,GAC9B9oB,EAAS6jB,EAAQiF,GAErB,IAAIqqB,EAAqBzC,GAAa7sB,EAAO9jB,EAAOC,EAAQ16B,CAAI,EAChE6nE,EAAa,QAAQ,SAAUiG,EAAalqE,EAAG,CAC3C0pE,EAAM1pE,CAAC,EAAE,CAAC,EAAIiqE,EAAmBjqE,CAAC,EAAE,IAAI,CAAC,EAAIkqE,EAAY,IAAI,CAAC,EAC9DR,EAAM1pE,CAAC,EAAE,CAAC,EAAIiqE,EAAmBjqE,CAAC,EAAE,IAAI,CAAC,EAAIkqE,EAAY,IAAI,CAAC,CAClE,CAAC,CACL,MAEIjG,EAAa,QAAQ,SAAUiG,EAAalqE,EAAG,CAC3C,IAAImqE,EAAaD,EAAY,UACxBC,IAGDA,EAAW,QAAQN,CAAmB,EAAI,KAC1CH,EAAM1pE,CAAC,EAAE,CAAC,EAAI4+B,EAAK,CAAC,GAEpBurC,EAAW,QAAQL,CAAqB,EAAI,KAC5CJ,EAAM1pE,CAAC,EAAE,CAAC,EAAI4+B,EAAK,CAAC,GAE5B,CAAC,EACGirC,IACAH,EAAM,CAAC,EAAE,CAAC,EAAI9qC,EAAK,CAAC,EAAI,EACxB8qC,EAAM,CAAC,EAAE,CAAC,EAAI9qC,EAAK,CAAC,EAAI,GAExBkrC,IACAJ,EAAM,CAAC,EAAE,CAAC,EAAI9qC,EAAK,CAAC,EAAI,EACxB8qC,EAAM,CAAC,EAAE,CAAC,EAAI9qC,EAAK,CAAC,EAAI,EAGpC,MACS1L,GAAa,CAACxN,EACnB6jB,EAAW,QAAQ,SAAU3N,EAAK,CAC9B,IAAI4P,EAAa5P,IAAQ,KAAOA,IAAQ,IACxCqoC,EAAa,QAAQ,SAAUiG,EAAalqE,EAAG,CAC3C,IAAIoqE,EAASF,EAAY,UAAWG,EAAgBH,EAAY,WAAYI,EAAcJ,EAAY,SAClG,CAACE,GAAUA,EAAO,QAAQxuC,CAAG,IAAM,KAGvC8tC,EAAM1pE,CAAC,EAAI,CACPwrC,GAAc,CAAC6+B,EAAgB,EAAIzrC,EAAK,CAAC,EACzC,CAAC4M,GAAc,CAAC8+B,EAAc,EAAI1rC,EAAK,CAAC,CAC5C,EACJ,CAAC,CACL,CAAC,EAGD8qC,EAAMlvE,CAAK,EAAIokC,EAEnB,OAAO8qC,CACX,CACA,SAASa,GAAY9sC,EAAU,EAAG,CAC9B,IAAIh7B,EAAK83B,EAAOiD,GAAqBC,EAAU,CAAC,EAAG,CAAC,EAAG11B,EAAQtF,EAAG,CAAC,EAAGuF,EAAQvF,EAAG,CAAC,EAC9EM,EAAK,EAAE,MAAOikE,EAAWjkE,EAAG,SAAUynE,EAAYznE,EAAG,UACrDG,EAAK8jE,EAAUE,EAAWhkE,EAAG,KAAMikE,EAAYjkE,EAAG,MAAOilE,EAAWjlE,EAAG,SACvEi6B,EAAQgqC,EAAU,IAAI,SAAU1mE,EAAK,CAAE,OAAOA,EAAI,GAAK,CAAC,EAC5D,GAAIymE,IAAa,UACb/pC,EAAM,OAAOqtC,EAAW,EAAG,CAACziE,EAAOC,CAAK,CAAC,UAEpCk/D,IAAa,QAAS,CAC3B,IAAIb,EAAkB9C,GAAwB,QAAQiH,CAAS,EAC3DlE,EAAgB9C,GAAsB,QAAQgH,CAAS,EACvDtlC,EAAWiiC,EAAU,OAEzB,GADAf,GAAae,EAAWhqC,EAAO,EAAGkpC,EAAiBC,EAAev+D,EAAOC,EAAOm1B,EAAM,CAAC,EAAE,CAAC,EAAGA,EAAM,CAAC,EAAE,CAAC,EAAGA,EAAM,CAAC,EAAE,CAAC,EAAGA,EAAM,CAAC,EAAE,CAAC,CAAC,EAC9H+H,IAAaiiC,EAAU,OACvB,MAER,KAEI,QAEJ,IAAIvD,EAAamD,GAActpC,EAAUupC,EAAU7pC,CAAK,EACpDstC,EAAY,GAAG,OAAOvD,EAAU,GAAG,EAAE,OAAOtD,EAAW,KAAKuE,CAAQ,EAAG,GAAG,EAC9ErsB,GAAare,EAAU,SAAUoe,GAAWpe,EAAU,EAAG,EAAS,CAAE,cAAe,QAAS,SAAUypC,EAAU,MAAO/pC,EAAO,WAAYymC,EAAY,UAAW6G,EAAW,MAAO,EAAG,MAAO,CAAE,EAAGvoC,GAAc,CAC5M,SAAUuoC,CACd,EAAG,CAAC,CAAC,CAAC,CAAC,CACX,CACA,SAASC,GAAejtC,EAAU,EAAG,CACjC,IAAIh7B,EAAK,EAAE,MAAOukE,EAAWvkE,EAAG,SAAU+nE,EAAY/nE,EAAG,UACrDM,EAAKikE,EAAUE,EAAWnkE,EAAG,KAAMokE,EAAYpkE,EAAG,MAAOolE,EAAWplE,EAAG,SACvEo6B,EAAQgqC,EAAU,IAAI,SAAU1mE,EAAK,CAAE,OAAOA,EAAI,GAAK,CAAC,EACxDV,EAASo9B,EAAM,OACnB,GAAI+pC,IAAa,UACbC,EAAU,OAAOqD,EAAW,CAAC,EAC7BrtC,EAAM,OAAOqtC,EAAW,CAAC,UAEpBtD,IAAa,SAKlB,GAJIsD,EAAY,IAGhBvE,GAAgBkB,EAAWhqC,EAAOqtC,EAAW,EAAGzqE,CAAM,EAClDA,IAAWonE,EAAU,QACrB,WAIJ,QAEJ,IAAIvD,EAAamD,GAActpC,EAAUupC,EAAU7pC,CAAK,EACpDstC,EAAY,GAAG,OAAOvD,EAAU,GAAG,EAAE,OAAOtD,EAAW,KAAKuE,CAAQ,EAAG,GAAG,EAC9ErsB,GAAare,EAAU,SAAUoe,GAAWpe,EAAU,EAAG,EAAS,CAAE,cAAe,UAAW,SAAUypC,EAAU,MAAO/pC,EAAO,WAAYymC,EAAY,UAAW6G,EAAW,MAAO,EAAG,MAAO,CAAE,EAAGvoC,GAAc,CAC9M,SAAUuoC,CACd,EAAG,CAAC,CAAC,CAAC,CAAC,CACX,CAKA,IAAIE,GAAY,CACZ,KAAM,YACN,MAAO,CACH,YACA,kBACA,iBACA,YACA,eACA,WACA,eACA,mBACA,yBACA,2BACA,mBACJ,EACA,OAAQ,CACJ,YACA,OACA,SACJ,EACA,IAAK,CACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GACA;AAAA;AAAA,GACA;AAAA;AAAA;AAAA,GACA;AAAA;AAAA;AAAA,EACJ,EACA,OAAQ,SAAUltC,EAAU+K,EAAO,CAC/B,IAAI/lC,EAAKg7B,EAAS,MAAOmtC,EAAiBnoE,EAAG,eAAgBooE,EAAkBpoE,EAAG,gBAAiBqoE,EAAWroE,EAAG,SAAU0Y,EAAO1Y,EAAG,KAAMigC,EAAYjgC,EAAG,UACtJM,EAAK06B,EAAS,SAAS,EAAGzpC,EAAS+O,EAAG,OAAQ/K,EAAQ+K,EAAG,MAAO5O,EAAS4O,EAAG,OAAQg7B,EAAYh7B,EAAG,UAAWm6B,EAAOn6B,EAAG,KAAM3G,EAAO2G,EAAG,KAAM1G,EAAM0G,EAAG,IAAK8E,EAAO9E,EAAG,KAAM+E,EAAO/E,EAAG,KAAMstB,EAAOttB,EAAG,KAAMi0C,EAAOj0C,EAAG,KAAMgoE,EAAgBhoE,EAAG,cAAeioE,EAAiBjoE,EAAG,eAAgB2lC,EAAc3lC,EAAG,SACvT,GAAI,CAAC/O,GAAU0uC,EACX,MAAO,CAAC,EAEZ,IAAIskC,EAAWc,GAAY9zE,EAAQgE,EAAO7D,EAAQ02E,GAAmB,QAASE,GAAiBH,CAAc,EAC7G,GAAI,CAAC5D,EACD,MAAO,CAAC,EAEZ,IAAIn7D,EAAIqxB,EAAO,EAAI,EACfhyB,EAAO87D,EAAS,KAChBG,EAAYH,EAAS,MACrB7pC,EAAQgqC,EAAU,IAAI,SAAU1mE,GAAK,CAErC,IAAIwqE,GAAgB1tC,GAAkBQ,EAAWt9B,GAAI,IAAKoL,CAAC,EAC3D,MAAO,CACHo/D,GAAc,CAAC,EAAI7uE,EACnB6uE,GAAc,CAAC,EAAI5uE,CACvB,CACJ,CAAC,EACG6uE,EAAW,CAAC,EACZh2C,EAAQ,CAAC,EACTkyC,EAASl8D,IAAS,OAClBigE,EAAUjgE,IAAS,QACnBkgE,EAAYlgE,IAAS,UACzB,GAAIk8D,GAAU+D,GAAWC,EAAW,CAChC,IAAIC,EAAcF,EAAUhuC,EAAM,MAAM,EAAG,CAAC,EAAIA,EAChDjI,EAAQm2C,EAAY,IAAI,SAAU70D,GAAIxW,GAAG,CACrC,IAAIyW,GAAOzW,KAAM,EAAIqrE,EAAYA,EAAY,OAAS,CAAC,EAAIA,EAAYrrE,GAAI,CAAC,EACxEtD,GAAMkL,GAAO6O,GAAMD,EAAE,EACrBooB,GAAO+3B,GAAgBlgD,GAAMD,EAAE,EACnC,OAAOgyB,EAAM,cAAc,MAAO,CAAE,IAAK,WAAW,OAAOxoC,EAAC,EAAG,UAAWsE,GAAO,OAAQ,YAAa,cAAc,EAAG,kBAAmBtE,GAAG,MAAO,CAC5I,MAAO,GAAG,OAAO4+B,GAAM,IAAI,EAC3B,UAAW,aAAa,OAAOnoB,GAAK,CAAC,EAAG,MAAM,EAAE,OAAOA,GAAK,CAAC,EAAG,aAAa,EAAE,OAAO/Z,GAAK,cAAc,EAAE,OAAOye,EAAM,GAAG,CAC/H,CAAE,CAAC,CACX,CAAC,CACL,CAaA,GAZA+vD,EAAW/tC,EAAM,IAAI,SAAU18B,GAAKT,GAAG,CACnC,OAAOwoC,EAAM,cAAc,MAAO,CAAE,IAAK,cAAc,OAAOxoC,EAAC,EAAG,UAAWsE,GAAO,UAAW,eAAgB,cAAc,EAAG,kBAAmBtE,GAAG,MAAO,CACrJ,UAAW,aAAa,OAAOS,GAAI,CAAC,EAAG,MAAM,EAAE,OAAOA,GAAI,CAAC,EAAG,aAAa,EAAE,OAAOioC,EAAa,aAAa,EAAE,OAAOvtB,EAAM,GAAG,CACpI,CAAE,CAAC,CACX,CAAC,EACGgwD,GACAD,EAAS,KAAK,MAAMA,EAAU,EAAc,CAAC,EAAG3wC,EAAO4C,EAAM,MAAM,CAAC,EAAE,IAAI,SAAU18B,GAAKT,GAAG,CACxF,OAAOwoC,EAAM,cAAc,MAAO,CAAE,IAAK,oBAAoB,OAAOxoC,EAAC,EAAG,UAAWsE,GAAO,UAAW,eAAgB,cAAe,cAAc,EAAG,kBAAmB,EAAItE,GAAG,MAAO,CAC9K,UAAW,aAAa,OAAOS,GAAI,CAAC,EAAG,MAAM,EAAE,OAAOA,GAAI,CAAC,EAAG,aAAa,EAAE,OAAOioC,EAAa,aAAa,EAAE,OAAOvtB,EAAM,GAAG,CACpI,CAAE,CAAC,CACX,CAAC,CAAC,EAAG,EAAK,CAAC,EAEXjQ,IAAS,UAAYA,IAAS,UAAW,CACzC,IAAIogE,EAAWtE,EAAS,KAAMuE,EAAUvE,EAAS,IAAKT,EAAUS,EAAS,QAASR,EAAUQ,EAAS,QACjG9jE,EAAKq3B,EAAO3L,GAAM2O,GAAkBQ,EAAW,CAACutC,EAAUC,CAAO,EAAG1/D,CAAC,EAAG0xB,GAAkBQ,EAAW,CAAC,EAAG,CAAC,EAAGlyB,CAAC,CAAC,EAAG,CAAC,EAAG0qD,EAAWrzD,EAAG,CAAC,EAAGszD,EAAUtzD,EAAG,CAAC,EACtJsoE,EAAkB,OACtB,GAAI,CAACV,EAAU,CAGX,QAFIW,EAAQ,KAAK,IAAI,GAAIlF,EAAU,EAAGC,EAAU,CAAC,EAC7CkF,GAAY,CAAC,EACR1rE,GAAI,EAAGA,IAAKyrE,EAAO,EAAEzrE,GAAG,CAC7B,IAAItD,GAAM,KAAK,GAAK,EAAI+uE,EAAQzrE,GAChC0rE,GAAU,KAAK,CACXnF,GAAWA,EAAUprD,GAAQ,KAAK,IAAIze,EAAG,EACzC8pE,GAAWA,EAAUrrD,GAAQ,KAAK,IAAIze,EAAG,CAC7C,CAAC,CACL,CACAgvE,GAAU,KAAK,CAACnF,EAAS,EAAE,CAAC,EAC5BmF,GAAU,KAAK,CAAC,GAAI,EAAE,CAAC,EACvBA,GAAU,KAAK,CAAC,GAAIlF,EAAU,EAAI,CAAC,CAAC,EACpCkF,GAAU,KAAK,CAACnF,EAAU,EAAI,EAAGC,EAAU,EAAI,CAAC,CAAC,EACjDkF,GAAU,KAAK,CAACnF,EAAU,EAAI,EAAG,EAAE,CAAC,EACpCmF,GAAU,KAAK,CAACnF,EAAS,EAAE,CAAC,EAC5BiF,EAAkB,WAAW,OAAOE,GAAU,IAAI,SAAUjrE,GAAK,CAAE,MAAO,GAAG,OAAOA,GAAI,CAAC,EAAG,KAAK,EAAE,OAAOA,GAAI,CAAC,EAAG,IAAI,CAAG,CAAC,EAAE,KAAK,IAAI,EAAG,GAAG,CAC/I,CACAyqE,EAAS,KAAK1iC,EAAM,cAAc,MAAO,CAAE,IAAK,cAAe,UAAWlkC,GAAO,eAAgB,cAAc,EAAG,MAAO,CACjH,MAAO,GAAG,OAAOiiE,EAAU,EAAG,IAAI,EAClC,OAAQ,GAAG,OAAOC,EAAU,EAAG,IAAI,EACnC,SAAUgF,EACV,UAAW,aAAa,OAAO,CAACpvE,EAAOm6D,EAAU,MAAM,EAAE,OAAO,CAACl6D,EAAMm6D,EAAS,MAAM,EAAE,OAAOhC,GAAcz2B,CAAS,CAAC,CAC3H,CAAE,CAAC,CAAC,CACZ,CACA,GAAI+sC,EAAU,CACV,IAAI1nE,GAAKk1C,GAAQ,EAAc,CAACzwC,EAAMC,EAAMuoB,EAAM2mB,CAAI,EAAGzc,EAAO4C,CAAK,EAAG,EAAK,CAAC,EAAGwuC,EAAWvoE,GAAG,MAAOwoE,GAAYxoE,GAAG,OAAQyoE,GAAYzoE,GAAG,KAAM0oE,GAAW1oE,GAAG,IAChK,GAAIgoE,GAAahE,GAAU+D,EAAS,CAChC,IAAIO,GAAYP,EAAUhuC,EAAM,MAAM,EAAG,CAAC,EAAIA,EAC9C+tC,EAAS,KAAK1iC,EAAM,cAAc,MAAO,CAAE,IAAK,WAAY,UAAWlkC,GAAO,YAAa,cAAc,EAAG,MAAO,CAC3G,MAAO,GAAG,OAAOqnE,EAAU,IAAI,EAC/B,OAAQ,GAAG,OAAOC,GAAW,IAAI,EACjC,UAAW,aAAa,OAAOC,GAAW,MAAM,EAAE,OAAOC,GAAU,KAAK,EACxE,SAAU,WAAW,OAAOJ,GAAU,IAAI,SAAUjrE,GAAK,CAAE,MAAO,GAAG,OAAOA,GAAI,CAAC,EAAIorE,GAAW,KAAK,EAAE,OAAOprE,GAAI,CAAC,EAAIqrE,GAAU,IAAI,CAAG,CAAC,EAAE,KAAK,IAAI,EAAG,GAAG,CAC9J,CAAE,CAAC,CAAC,CACZ,CACJ,CACA,OAAId,GACA,CAAC,WAAY,YAAY,EAAE,QAAQ,SAAUe,GAAe,CACxD,IAAIjxE,GAAOkwE,EAAee,EAAa,EACnCvyD,GAAeuyD,KAAkB,aACjCjxE,GAAK,QACLo6B,EAAM,KAAK,MAAMA,EAAO,EAAc,CAAC,EAAGqF,EAAOz/B,GAAK,KAAK,SAAS,IAAI,SAAU2H,GAAIzC,GAAG,CACrF,IAAIS,GAAMgC,GAAG,IACTupE,GAAWp9C,GAAM2O,GAAkBQ,EAAWvkB,GAAe,CAAC,EAAG/Y,EAAG,EAAI,CAACA,GAAK,CAAC,EAAGoL,CAAC,EAAG,CAACzP,EAAMC,CAAG,CAAC,EACjG4vE,GAAWr9C,GAAM2O,GAAkBQ,EAAWvkB,GAAe,CAACxhB,EAAOyI,EAAG,EAAI,CAACA,GAAKtM,CAAM,EAAG0X,CAAC,EAAG,CAACzP,EAAMC,CAAG,CAAC,EAC9G,OAAOqtC,GAAWlB,EAAO,GAAIwjC,GAAUC,GAAU9wD,EAAM,OAAO,OAAO4wD,GAAe,MAAM,EAAE,OAAO/rE,EAAC,EAAG,WAAW,CACtH,CAAC,CAAC,EAAG,EAAK,CAAC,EAEXlF,GAAK,SACLo6B,EAAM,KAAK,MAAMA,EAAO,EAAc,CAAC,EAAGqF,EAAOz/B,GAAK,OAAO,IAAI,SAAU2H,GAAIzC,GAAG,CAC9E,IAAIS,GAAMgC,GAAG,IACTupE,GAAWp9C,GAAM2O,GAAkBQ,EAAWvkB,GAAe,CAAC,EAAG/Y,EAAG,EAAI,CAACA,GAAK,CAAC,EAAGoL,CAAC,EAAG,CAACzP,EAAMC,CAAG,CAAC,EACjG4vE,GAAWr9C,GAAM2O,GAAkBQ,EAAWvkB,GAAe,CAACxhB,EAAOyI,EAAG,EAAI,CAACA,GAAKtM,CAAM,EAAG0X,CAAC,EAAG,CAACzP,EAAMC,CAAG,CAAC,EAC9G,OAAOqtC,GAAWlB,EAAO,GAAIwjC,GAAUC,GAAU9wD,EAAM,OAAO,OAAO4wD,GAAe,QAAQ,EAAE,OAAO/rE,EAAC,EAAG,YAAa,SAAU,MAAM,CAC1I,CAAC,CAAC,EAAG,EAAK,CAAC,CAEnB,CAAC,EAEE,EAAc,EAAc,CAAC,EAAGu6B,EAAO2wC,CAAQ,EAAG,EAAK,EAAG3wC,EAAOrF,CAAK,EAAG,EAAK,CACzF,EACA,qBAAsB,SAAUuI,EAAU,EAAG,CACzC,OAAO,EAAE,aAAe,EAAE,WAAW,OAAO,aAAa,OAAO,GAAK,IAAI,QAAQ,MAAM,EAAI,EAC/F,EACA,UAAW,SAAUA,EAAU,EAAG,CAC9B,IAAI7uC,EAAQ6uC,EAAS,MACjBh7B,EAAK7T,EAAM,aAAcs9E,EAAezpE,IAAO,OAAS,GAAOA,EACnE,OAAIypE,EACO,GAEJ,KAAK,iBAAiBzuC,EAAU,CAAC,CAC5C,EACA,KAAM,SAAUA,EAAU,EAAG,CACzB,OAAO,KAAK,YAAYA,EAAU,EAAS,EAAS,CAAC,EAAG,CAAC,EAAG,CAAE,aAAc,EAAK,CAAC,CAAC,CACvF,EACA,QAAS,SAAUA,EAAU,EAAG,CAC5B,OAAO,KAAK,eAAeA,EAAU,CAAC,CAC1C,EACA,iBAAkB,SAAUA,EAAU,EAAG,CACrC,IAAInX,EAAQmX,EAAS,MACjBh7B,EAAKg7B,EAAS,MAAOotC,EAAkBpoE,EAAG,gBAAiBmoE,EAAiBnoE,EAAG,eAC/EzO,EAASsyB,EAAM,OAAQtuB,EAAQsuB,EAAM,MAAOnyB,EAASmyB,EAAM,OAC3D09B,EAAc,EAAE,WAAa,EAAE,WAAW,OAAS,KACnDx5C,EAAaw5C,GAAeA,EAAY,aAAa,OAAO,GAAM,GAClElsC,EAAQ,EAAE,MACVkvD,EAAWc,GAAY9zE,EAAQgE,EAAO7D,EAAQ02E,GAAmB,QAASD,CAAc,EAC5F,GAAI,CAAC5D,EACD,MAAO,GAEX,IAAIiB,EAAWjB,EAAS,SAAU97D,EAAO87D,EAAS,KAAM7pC,EAAQ6pC,EAAS,MACrEh3D,EAAS8rC,GAAare,EAAU,cAAeoe,GAAWpe,EAAU,EAAG,CACvE,SAAUvyB,EACV,UAAW+8D,EACX,MAAO9qC,EAAM,IAAI,SAAU18B,EAAK,CAAE,OAAOA,EAAI,GAAK,CAAC,CACvD,CAAC,CAAC,EACF,OAAIuP,IAAW,IACX8H,EAAM,YAAc,GACb,KAEXA,EAAM,UAAYtN,GAAaA,EAAU,QAAQ,cAAc,EAAI,GACnEsN,EAAM,OAAStN,EAAU,QAAQ,WAAW,EAAI,GAChDsN,EAAM,OAAStN,EAAU,QAAQ,WAAW,EAAI,IAAMA,EAAU,QAAQ,cAAc,EAAI,GAC1FsN,EAAM,UAAYksC,EAAc,SAASA,EAAY,aAAa,iBAAiB,EAAG,EAAE,EAAI,GAC5FlsC,EAAM,SAAWkvD,EACjBlvD,EAAM,YAAc,GACpBwO,EAAM,cAAgB2hD,EACtBnqC,GAAaL,EAAU,CAAC,EACjB,GACX,EACA,YAAa,SAAUA,EAAU,EAAG,CAChC,IAAIh7B,EAAIM,EAAIG,EACR4U,EAAQ,EAAE,MAAOklB,EAAgB,EAAE,cAAemvC,EAAe,EAAE,aACvE,GAAI,CAACr0D,EAAM,YACP,MAAO,GAEX,IAAI1U,EAAK0U,EAAOshD,EAAYh2D,EAAG,UAAWgpE,EAAShpE,EAAG,OAAQipE,EAASjpE,EAAG,OAAQonE,EAAYpnE,EAAG,UAAW4jE,EAAW5jE,EAAG,SAC1H,GAAI,CAAC4jE,EACD,MAAO,GAEX,IAAIp4E,EAAQ+5C,GAASlL,EAAS,MAAO,WAAW,EAC5Cr2B,EAAYxY,EAAM,UAClBmZ,EAAQ,EACRC,EAAQ,EACRskE,EAAoBtvC,EAAc,UAClCuvC,EAAe1uC,GAAY,CAAC,EAC5BsuC,GAAgBG,GAChB7pE,EAAK83B,EAAO+xC,EAAkB,eAAgB,CAAC,EAAGvkE,EAAQtF,EAAG,CAAC,EAAGuF,EAAQvF,EAAG,CAAC,IAG7EM,EAAKw3B,EAAOgyC,EAAc,CAAC,EAAGxkE,EAAQhF,EAAG,CAAC,EAAGiF,EAAQjF,EAAG,CAAC,GAE7D,IAAIypE,EAAY,CAACzkE,EAAOC,CAAK,EACzBse,EAAQmX,EAAS,MACjBzlC,EAAQsuB,EAAM,MAAOnyB,EAASmyB,EAAM,OACpCmmD,EAAmB,CAACJ,GAAU,CAACjT,GAAa,CAACgT,EAC7ClF,EAAWF,EAAS,KAAMG,EAAYH,EAAS,MAAOmB,EAAWnB,EAAS,SAC1E7pC,EAAQgqC,EAAU,IAAI,SAAU1mE,GAAK,CAAE,OAAOA,GAAI,GAAK,CAAC,EACxDgsE,IACA1kE,EAAQ,CAACA,EACTC,EAAQ,CAACA,GAEb,IAAI0kE,EAAQ,CAACtT,GAAa+N,EAAUqD,CAAS,EAAE,YAAc,OACzDpD,EAASF,IAAa,SAAWA,IAAa,OAC9CwC,EAAQvC,EAAU,IAAI,UAAY,CAAE,MAAO,CAAC,EAAG,CAAC,CAAG,CAAC,EACxD,GAAI/N,GAAa,CAACsT,EAAO,CACrB,IAAIvwD,EAAKgrD,EAAUqD,CAAS,EAAGn0E,EAAa8lB,EAAG,WAAY/lB,EAAW+lB,EAAG,SACrEyiB,EAAO,CACP72B,EAAQ,EAAI1R,CAAU,EACtB2R,EAAQ,EAAI5R,CAAQ,CACxB,EACAszE,EAAQD,GAAetC,EAAWqD,EAAW5rC,EAAMwoC,EAAQhgE,CAAS,CACxE,MACSslE,IACLhD,EAAQvsC,EAAM,IAAI,UAAY,CAAE,MAAO,CAACp1B,EAAOC,CAAK,CAAG,CAAC,GAE5D,IAAIikC,EAAY9O,EAAM,IAAI,SAAU18B,GAAKT,GAAG,CAAE,OAAO0uB,GAAKjuB,GAAKipE,EAAM1pE,EAAC,CAAC,CAAG,CAAC,EACvE2sE,EAAa,EAAc,CAAC,EAAGpyC,EAAO0R,CAAS,EAAG,EAAK,EAC3D3lB,EAAM,eAAiB,KACvB,IAAI+gD,EAAWL,EAAS,OAAS,SAC7B4F,EAAY5F,EAAS,OAAS,UAClC,GAAIK,GAAYuF,EAAW,CACvB,IAAIC,EAAYv0B,GAAQrM,CAAS,EAC7B0Q,EAAK,EAAIkwB,EAAU,OAASA,EAAU,GAAG,EACzCjwB,EAAK,EAAIgwB,EAAYC,EAAU,MAAQA,EAAU,KAAOlwB,CAAE,EAC1D7lB,GAASmV,EAAU,CAAC,EAAE,CAAC,EAAI0Q,EAC3BvgD,GAAO6vC,EAAU,CAAC,EAAE,CAAC,EAAI2Q,EACzB/lB,GAAQoV,EAAU,CAAC,EAAE,CAAC,EAAI2Q,EAE1ByqB,IACAsF,EAAW,KAAK,CAAC91C,GAAOg2C,EAAU,MAAM,CAAC,EACzCnD,EAAM,KAAK,CAAC,EAAG,CAAC,CAAC,GAGrBiD,EAAW,KAAK,CAACE,EAAU,KAAM/1C,EAAM,CAAC,EACxC4yC,EAAM,KAAK,CAAC,EAAG,CAAC,CAAC,EAEjBiD,EAAW,KAAK,CAACvwE,GAAMywE,EAAU,MAAM,CAAC,EACxCnD,EAAM,KAAK,CAAC,EAAG,CAAC,CAAC,CACrB,CACA,IAAIl8B,GAAa6c,IAAsBz7D,EAAM,0BAA4B,CAAC,GAAG,IAAI,SAAU6J,GAAG,CAAE,OAAO2N,GAAgB,GAAG,OAAO3N,EAAC,EAAGtE,CAAM,CAAG,CAAC,GAAIvF,EAAM,wBAA0B,CAAC,GAAG,IAAI,SAAU6J,GAAG,CAAE,OAAO2N,GAAgB,GAAG,OAAO3N,EAAC,EAAGT,CAAK,CAAG,CAAC,EAAGA,EAAO7D,CAAM,EACpQ24E,EAAc,CAAC,EACfC,GAAc,CAAC,EACnB,GAAI1F,GAAYuF,EACZE,EAAc,CAACH,EAAW,CAAC,EAAE,CAAC,EAAGA,EAAW,CAAC,EAAE,CAAC,CAAC,EACjDI,GAAc,CAACJ,EAAW,CAAC,EAAE,CAAC,EAAGA,EAAW,CAAC,EAAE,CAAC,CAAC,UAE5CvF,EAAQ,CACb,IAAI4F,GAAY,CAACL,EAAW,CAAC,EAAGA,EAAW,CAAC,EAAGA,EAAW,CAAC,EAAGA,EAAW,CAAC,CAAC,EACvEM,GAAc,CAACvD,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAGA,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,EACzDoD,EAAcE,GAAU,OAAO,SAAUtkE,GAAG1I,GAAG,CAAE,OAAOitE,GAAYjtE,EAAC,EAAE,CAAC,CAAG,CAAC,EAAE,IAAI,SAAUS,GAAK,CAAE,OAAOA,GAAI,CAAC,CAAG,CAAC,EACnHssE,GAAcC,GAAU,OAAO,SAAUtkE,GAAG1I,GAAG,CAAE,OAAOitE,GAAYjtE,EAAC,EAAE,CAAC,CAAG,CAAC,EAAE,IAAI,SAAUS,GAAK,CAAE,OAAOA,GAAI,CAAC,CAAG,CAAC,CACvH,MAEIqsE,EAAcH,EAAW,OAAO,SAAUjkE,GAAG1I,GAAG,CAAE,OAAO0pE,EAAM1pE,EAAC,EAAE,CAAC,CAAG,CAAC,EAAE,IAAI,SAAUS,GAAK,CAAE,OAAOA,GAAI,CAAC,CAAG,CAAC,EAC9GssE,GAAcJ,EAAW,OAAO,SAAUjkE,GAAG1I,GAAG,CAAE,OAAO0pE,EAAM1pE,EAAC,EAAE,CAAC,CAAG,CAAC,EAAE,IAAI,SAAUS,GAAK,CAAE,OAAOA,GAAI,CAAC,CAAG,CAAC,EAElH,IAAIysE,GAAa,CAAC,EAAG,CAAC,EAClB9wD,GAAK68B,GAAgBzL,GAAY5+C,EAAM,kBAAoB,CAAE,KAAM,EAAG,IAAK,EAAG,MAAOoJ,EAAO,OAAQ7D,CAAO,EAAG24E,EAAaC,GAAa,EAAG,CAAC,EAAGp9B,GAAqBvzB,GAAG,WAAYszB,GAAmBtzB,GAAG,SACzM+wD,GAAcx9B,GAAmB,OACjCy9B,GAAc19B,GAAiB,OAOnC,GANIC,GAAmB,UACnBu9B,GAAW,CAAC,GAAKC,IAEjBz9B,GAAiB,UACjBw9B,GAAW,CAAC,GAAKE,KAEhBR,GAAavF,IAAaqC,EAAM,CAAC,EAAE,CAAC,IAAM,GAAKA,EAAM,CAAC,EAAE,CAAC,IAAM,EAAG,CACnE,IAAImD,EAAYv0B,GAAQrM,CAAS,EAC7BwG,GAAKo6B,EAAU,OAASA,EAAU,IAClCr6B,GAAKo6B,EAAYC,EAAU,MAAQA,EAAU,KAAOp6B,GACpD46B,GAAY39B,GAAiB,QAC3B,EAAI09B,EAAW,EACd19B,GAAiB,YAAc,EAAI,CAAC09B,GAAcA,GACrDE,GAAY39B,GAAmB,QAC7B,EAAIw9B,EAAW,EACdx9B,GAAmB,YAAc,EAAI,CAACw9B,GAAcA,GAC3D36B,IAAM66B,GACN56B,IAAM66B,GACFjG,IACA50B,GAAKhB,GAAuB/B,GAAkBC,EAAkB,EAAI,EAAI8C,GAAKD,GAC7EA,GAAKC,IAET,IAAIrqC,GAASukE,EAAW,CAAC,EACzBA,EAAW,CAAC,EAAE,CAAC,EAAIvkE,GAAO,CAAC,EAAIqqC,GAC/Bk6B,EAAW,CAAC,EAAE,CAAC,EAAIvkE,GAAO,CAAC,EAAIoqC,GAC/Bm6B,EAAW,CAAC,EAAE,CAAC,EAAIvkE,GAAO,CAAC,EAAIqqC,GAC/Bk6B,EAAW,CAAC,EAAE,CAAC,EAAIvkE,GAAO,CAAC,EAAIoqC,EACnC,SACS40B,GAAUhgE,GAAagyD,EAAW,CACvC,IAAI98C,GAAKie,EAAOotC,GAAeR,CAAS,EAAG,CAAC,EAAGoG,GAAUjxD,GAAG,CAAC,EAAGkxD,GAAWlxD,GAAG,CAAC,EAC3EzV,GAAQ0mE,IAAWC,GAAWD,GAAUC,GAAW,EACnDpJ,GAAW+C,EAAUqD,CAAS,EAC9Bt3C,GAAYkxC,GAAS,WAAa,GAClC8E,GAAQyD,EAAW,CAAC,EAAE,CAAC,EACvB71C,GAAS61C,EAAW,CAAC,EAAE,CAAC,EACxBvwE,GAAOuwE,EAAW,CAAC,EAAE,CAAC,EACtB91C,GAAQ81C,EAAW,CAAC,EAAE,CAAC,EACvB,EAAIQ,EAAW,GAAK,EAAIC,EAAW,EACnCD,GAAc1xD,GAAK0xD,EAAW,EAAI,EAAIC,EAAW,EAAIvmE,GAGrDumE,GAAc3xD,GAAK2xD,EAAW,EAAI,EAAID,EAAW,EAAItmE,GAErDqsB,GAAU,QAAQ,GAAG,EAAI,GACzB92B,IAAQgxE,GAEHl6C,GAAU,QAAQ,GAAG,EAAI,GAC9B2D,IAASu2C,IAGThxE,IAAQgxE,GAAc,EACtBv2C,IAASu2C,GAAc,GAEvBl6C,GAAU,QAAQ,GAAG,EAAI,GACzBg2C,IAASiE,GAEJj6C,GAAU,QAAQ,GAAG,EAAI,GAC9B4D,IAAUq2C,IAGVjE,IAASiE,GAAc,EACvBr2C,IAAUq2C,GAAc,GAE5B,IAAIM,GAAqBjG,GAAa0B,GAAOryC,GAAOC,GAAQ16B,EAAI,EAChEuwE,EAAW,QAAQ,SAAUlsE,GAAKT,GAAG,CACjC,IAAIyC,GACJA,GAAK83B,EAAOkzC,GAAmBztE,EAAC,EAAE,IAAK,CAAC,EAAGS,GAAI,CAAC,EAAIgC,GAAG,CAAC,EAAGhC,GAAI,CAAC,EAAIgC,GAAG,CAAC,CAC5E,CAAC,CACL,MAEIkqE,EAAW,QAAQ,SAAUlsE,GAAKM,GAAG,CACjC,IAAI69B,GAAO8qC,EAAM3oE,EAAC,EACd69B,GAAK,CAAC,IACNn+B,GAAI,CAAC,GAAK2sE,IAEVxuC,GAAK,CAAC,IACNn+B,GAAI,CAAC,GAAK0sE,GAElB,CAAC,EAEL,IAAIO,GAAiB3G,GAActpC,EAAUupC,EAAU/6B,CAAS,EAC5Dw+B,GAAY,GAAG,OAAOvD,EAAU,GAAG,EAAE,OAAOwG,GAAe,KAAKvF,CAAQ,EAAG,GAAG,EAElF,GADA7hD,EAAM,cAAgBmkD,GAClBpD,GAAYuF,EACZE,EAAc,CAACH,EAAW,CAAC,EAAE,CAAC,EAAGA,EAAW,CAAC,EAAE,CAAC,CAAC,EACjDI,GAAc,CAACJ,EAAW,CAAC,EAAE,CAAC,EAAGA,EAAW,CAAC,EAAE,CAAC,CAAC,UAE5CvF,EAAQ,CACb,IAAI4F,GAAY,CAACL,EAAW,CAAC,EAAGA,EAAW,CAAC,EAAGA,EAAW,CAAC,EAAGA,EAAW,CAAC,CAAC,EAC3EG,EAAcE,GAAU,IAAI,SAAUvsE,GAAK,CAAE,OAAOA,GAAI,CAAC,CAAG,CAAC,EAC7DssE,GAAcC,GAAU,IAAI,SAAUvsE,GAAK,CAAE,OAAOA,GAAI,CAAC,CAAG,CAAC,CACjE,MAEIqsE,EAAcH,EAAW,IAAI,SAAUlsE,GAAK,CAAE,OAAOA,GAAI,CAAC,CAAG,CAAC,EAC9DssE,GAAcJ,EAAW,IAAI,SAAUlsE,GAAK,CAAE,OAAOA,GAAI,CAAC,CAAG,CAAC,EAGlE,GADA6lB,EAAM,eAAiB2yB,GAAgBzL,GAAY5+C,EAAM,kBAAoB,CAAE,KAAM,EAAG,IAAK,EAAG,MAAOoJ,EAAO,OAAQ7D,CAAO,EAAG24E,EAAaC,GAAa,EAAG,CAAC,EAC1JT,EAAmB,CACnB,IAAIpvC,GAAO5W,EAAM,KAAMyX,GAAYzX,EAAM,UACrCza,GAAIqxB,GAAO,EAAI,EACfywC,GAAWT,GACXf,IACAwB,GAAW,CACPnB,EAAU,CAAC,EAAIU,GAAW,CAAC,EAAIX,EAAa,CAAC,EAC7CC,EAAU,CAAC,EAAIU,GAAW,CAAC,EAAIX,EAAa,CAAC,CACjD,GAEJD,EAAkB,YAAc99C,GAASuP,GAAW,CAAC4vC,GAAS,CAAC,EAAGA,GAAS,CAAC,EAAG,EAAG,CAAC,EAAG9hE,EAAC,CAC3F,CACA,OAAAiwC,GAAare,EAAU,SAAUoe,GAAWpe,EAAU,EAAG,EAAS,CAAE,cAAe,UAAW,SAAUypC,EAAU,MAAOj7B,EAAW,UAAWw+B,GAAW,WAAYiD,GAAgB,MAAO3lE,EAAO,MAAOC,CAAM,EAAGk6B,IAAeh/B,EAAK,CAAC,EACrOA,EAAGgkE,IAAa,OAAS,OAAS,UAAU,EAAIuD,GAChDvnE,GAAK,CAAC,CAAC,CAAC,CAAC,EACN,EACX,EACA,eAAgB,SAAUu6B,EAAU,EAAG,CACnC,KAAK,MAAMA,CAAQ,EACnB,IAAIrtB,EAAS,EAAE,OAAQ0H,EAAQ,EAAE,MAAOvH,EAAW,EAAE,SACjD67D,EAASt0D,EAAM,OAAQ81D,EAAc91D,EAAM,YAAashD,EAAYthD,EAAM,UAC9E,OAAK81D,GAGL9xB,GAAare,EAAU,YAAauf,GAAcvf,EAAU,EAAG,CAAC,CAAC,CAAC,EAC9DltB,IACI6oD,EACAsR,GAAejtC,EAAU,CAAC,EAErB2uC,GAEL7B,GAAY9sC,EAAU,CAAC,GAGxBltB,GAAYH,GAZR,EAaf,EACA,MAAO,SAAUqtB,EAAU,CACvBA,EAAS,MAAM,cAAgB,GAC/BA,EAAS,MAAM,eAAiB,IACpC,CACJ,EA6UIowC,GAAkB,CAClB,KAAM,kBACN,MAAO,CACH,kBACA,gBACJ,EACA,OAAQ,CACJ,kBACA,aACA,eACJ,EACA,IAAK,CACD;AAAA;AAAA,EACJ,EACA,qBAAsB,SAAUnlE,EAAG,EAAG,CAClC,OAAI,EAAE,UACK,EAAE,cAAgB,kBAEtB6B,GAAS,EAAE,WAAW,OAAQjG,GAAO,QAAQ,CAAC,CACzD,EACA,iBAAkB,SAAUm5B,EAAU,EAAG,CACrC,IAAI3lB,EAAQ,EAAE,MACdgmB,GAAaL,EAAU,CAAC,EACxB,IAAIme,EAASC,GAAWpe,EAAU,EAAG,CACjC,UAAWwE,GAAU,UAAUxE,EAAU,IAAIV,GAAY,EAAE,UAAU,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC,CACnF,CAAC,EACG/sB,EAAS8rC,GAAare,EAAU,oBAAqBme,CAAM,EAK/D,OAJA9jC,EAAM,YAAc2lB,EAAS,MAAM,gBACnC3lB,EAAM,kBAAoB2lB,EAAS,MAAM,aACzC3lB,EAAM,WAAa,CAAC,EAAG,CAAC,EACxBA,EAAM,aAAe,GACjB9H,IAAW,IACX8H,EAAM,aAAe,GACd,IAEJ8jC,CACX,EACA,YAAa,SAAUne,EAAU,EAAG,CAChC,IAAI3lB,EAAQ,EAAE,MAAO5G,EAAU,EAAE,QAASuoC,EAAY,EAAE,UACxD,GAAI,CAAC3hC,EAAM,aACP,MAAO,GAEX,IAAIrV,EAAK83B,EAAOsD,GAAY,CAAC,EAAG,CAAC,EAAG91B,EAAQtF,EAAG,CAAC,EAAGuF,EAAQvF,EAAG,CAAC,EAC3D6jB,EAAQmX,EAAS,MACjBzlC,EAAQsuB,EAAM,MAAOnyB,EAASmyB,EAAM,OAAQ2X,EAAe3X,EAAM,aAAc4X,EAAe5X,EAAM,aAAc4W,EAAO5W,EAAM,KAC/HvjB,EAAK06B,EAAS,MAAM,eAAgBqwC,EAAiB/qE,IAAO,OAAS,GAAOA,EAC5E8I,EAAIqxB,EAAO,EAAI,EACf0B,EAAO,CAAC72B,EAAOC,CAAK,EACxB,GAAIyxC,EAAW,CACX,IAAIs0B,EAAa,EAAE,YACfA,EAAW,CAAC,GAAKA,EAAW,CAAC,KAC7BnvC,EAAOmvC,EAEf,CACA,IAAI79C,EAASxB,GAAK5W,EAAM,YAAa8mB,CAAI,EACrC2G,EAAe7W,GAAK5W,EAAM,kBAAmB8mB,CAAI,EACjD/kB,EAAQ+U,GAAMgQ,EAAM9mB,EAAM,UAAU,EACpCuqB,EAAatB,GAAc9C,EAAcC,EAAchO,EAAQrkB,CAAC,EAChElW,EAAO8nC,EAAS,QAAQ,EACxBmrB,EAAWtQ,GAAQlb,GAAeiF,EAAYrqC,EAAO7D,EAAQ0X,CAAC,CAAC,EAC/DmiE,EAAY,CACZr4E,EAAK,KAAOizD,EAAS,KACrBjzD,EAAK,IAAMizD,EAAS,GACxB,EACA9wC,EAAM,WAAa8mB,EACnB,IAAIT,EAAkB,CAClBy8B,GAAer1B,EAAa,CAAC,EAAGvtC,EAAO81E,CAAc,EACrDlT,GAAer1B,EAAa,CAAC,EAAGpxC,EAAQ25E,CAAc,CAC1D,EAAE,KAAK,GAAG,EACN99D,EAASiyB,GAAU,KAAKxE,EAAUf,GAAc,EAAGe,EAAS,MAAOuwC,EAAW,CAAC,CAAC98D,EAAS,EAAK,CAAC,EAC/F0qC,EAASC,GAAWpe,EAAU,EAAG,EAAS,EAAS,CAAE,MAAOzlC,EAAO,OAAQ7D,EAAQ,OAAQ+7B,EAAQ,KAAM0O,EAAM,MAAO/kB,EAAO,gBAAiBskB,EAAiB,KAAMnuB,CAAO,EAAGkyB,GAAc,CAC7L,gBAAiB/D,EACjB,UAAWnuB,EAAO,SACtB,EAAG,CAAC,CAAC,EAAG,CAAE,eAAgBA,EAAO,SAAU,CAAC,CAAC,EAC7C,OAAA8rC,GAAare,EAAU,eAAgBme,CAAM,EACtCA,CACX,EACA,eAAgB,SAAUne,EAAU,EAAG,CACnC,IAAI3lB,EAAQ,EAAE,MACd,OAAKA,EAAM,cAGXgkC,GAAare,EAAU,kBAAmBuf,GAAcvf,EAAU,EAAG,CAAC,CAAC,CAAC,EACjE,IAHI,EAIf,EACA,0BAA2B,SAAUA,EAAU,EAAG,CAC9C,OAAO,KAAK,qBAAqBA,EAAU,CAAC,CAChD,EACA,sBAAuB,SAAUA,EAAU,EAAG,CAC1C,IAAIme,EAAS,KAAK,iBAAiBne,EAAU,CAAC,EAC9C,MAAK,EAAAme,CAIT,EACA,iBAAkB,SAAUne,EAAU,EAAG,CACrC,IAAIme,EAAS,KAAK,YAAYne,EAAU,CAAC,EACzC,OAAKme,GAGLne,EAAS,gBAAkBme,EAAO,gBAC3B,IAHI,EAIf,EAsCA,QAAS,SAAUne,EAAU,CACzB,IAAI3lB,EAAQ,CAAC,EACTniB,EAAO8nC,EAAS,QAAQ,EACxB11B,EAAQ,EACRC,EAAQ,EACRm2B,EAAkBxoC,EAAK,gBACvBo4E,EAAa,CAAC,EAAG,CAAC,EACtB,MAAO,CACH,UAAW,GACX,aAAc,UAAY,CACtB,MAAO,CAAE,MAAOj2D,CAAM,CAC1B,EACA,QAAS,SAAUzuB,EAAG,CAClB,MAAI,gBAAiBA,GACjB0kF,EAAW,CAAC,GAAK1kF,EAAE,YAAY,CAAC,EAChC0kF,EAAW,CAAC,GAAK1kF,EAAE,YAAY,CAAC,GAE3B,WAAYA,GACjB0kF,EAAW,CAAC,EAAI1kF,EAAE,OAAO,CAAC,EAAI80C,EAAgB,CAAC,EAC/C4vC,EAAW,CAAC,EAAI1kF,EAAE,OAAO,CAAC,EAAI80C,EAAgB,CAAC,IAG3C,MAAO90C,EACP0e,EAAQ1e,EAAE,EAAIsM,EAAK,KAEd,WAAYtM,IACjB0e,GAAS1e,EAAE,QAEX,MAAOA,EACP2e,EAAQ3e,EAAE,EAAIsM,EAAK,IAEd,WAAYtM,IACjB2e,GAAS3e,EAAE,SAGZ,CAAE,MAAOyuB,EAAO,MAAO/P,EAAO,MAAOC,EAAO,WAAY+lE,CAAW,CAC9E,EACA,WAAY,UAAY,CACpB,MAAO,CAAE,MAAOj2D,EAAO,OAAQ,EAAK,CACxC,CACJ,CACJ,CACJ,EAwGA,SAASm2D,GAAsBhK,EAAciK,EAAWnmE,EAAOC,EAAO,CAMlE,IAAImmE,EAAoBlK,EAAa,OAAO,SAAUxhE,EAAI,CACtD,IAAI2rE,EAAU3rE,EAAG,QAASpM,EAAaoM,EAAG,WAC1C,OAAOpM,GAAc,CAAC+3E,CAC1B,CAAC,EAAE,OACCC,EAAkBpK,EAAa,OAAO,SAAUxhE,EAAI,CACpD,IAAI2rE,EAAU3rE,EAAG,QAASrM,EAAWqM,EAAG,SACxC,OAAOrM,GAAY,CAACg4E,CACxB,CAAC,EAAE,OACCE,EAAe,GAqCnB,GAnCIJ,IAAc,IACVC,IAAsB,EACtBG,EAAe,EAEVH,IAAsB,IAC3BG,EAAe,IAInBJ,IAAc,IACVC,GAAqB,EACrBG,EAAe,EAEVH,GAAqB,IAC1BG,EAAe,IAInBJ,IAAc,IACVG,IAAoB,EACpBC,EAAe,EAEVD,EAAkB,IACvBC,EAAe,IAInBJ,IAAc,IACVG,GAAmB,EACnBC,EAAe,EAEVD,GAAmB,IACxBC,EAAe,IAGnB,EAAAA,IAAiB,IAAM,CAACrK,EAAaqK,CAAY,EAAE,SAGvD,KAAIC,EAAkBtK,EAAaqK,CAAY,EAC/CE,GAAgBvK,EAAcqK,CAAY,EACtCA,EAAe,EACfC,EAAgB,IAAI,CAAC,EAAIxmE,EAGzBwmE,EAAgB,IAAI,CAAC,EAAIvmE,EAEjC,CACA,SAASwmE,GAAgBvK,EAAczpE,EAAO,CACtCA,EAAQ,EACRypE,EAAa,MAAM,EAAGzpE,EAAQ,CAAC,EAAE,QAAQ,SAAUM,EAAM,CACrDA,EAAK,QAAU,EACnB,CAAC,GAGGmpE,EAAa,CAAC,EAAE,UAChBA,EAAa,CAAC,EAAE,QAAU,IAE9BA,EAAa,MAAM,EAAGzpE,EAAQ,CAAC,EAAE,QAAQ,SAAUM,EAAM,CACrDA,EAAK,QAAU,EACnB,CAAC,EAET,CACA,SAAS2zE,GAAmBxK,EAAczpE,EAAO,CACzCA,EAAQ,EACRypE,EAAa,MAAMzpE,EAAO,CAAC,EAAE,QAAQ,SAAUM,EAAM,CACjDA,EAAK,QAAU,EACnB,CAAC,EAGDmpE,EAAa,MAAMzpE,CAAK,EAAE,QAAQ,SAAUM,EAAM,CAC9CA,EAAK,QAAU,EACnB,CAAC,CAET,CACA,SAAS4zE,GAAgBC,EAAc32E,EAAO7D,EAAQmwE,EAAWC,EAAM,CAC/DD,IAAc,SAAUA,EAAY,CAAC,EAAG,CAAC,GAC7C,IAAI5gE,EAAS,CAAC,EACd,MAAI,CAACirE,GAAgBA,IAAiB,MAClCjrE,EAAS,CAAC,EAGVA,EAASO,GAAW0qE,CAAY,EAE7BtK,GAAgB3gE,EAAQ1L,EAAO7D,EAAQ,EAAG,EAAGmwE,EAAWC,CAAI,CACvE,CACA,SAASqK,GAAkBnxC,EAAU,EAAGmB,EAAM/kB,EAAOoyB,EAAW,CAC5D,IAAI3lB,EAAQmX,EAAS,MACjBzlC,EAAQsuB,EAAM,MAAOnyB,EAASmyB,EAAM,OACpC7jB,EAAKkhE,GAAgB13B,EAAWxO,EAAS,MAAM,cAAezlC,EAAO7D,CAAM,EAAG2vE,EAAOrhE,EAAG,KAAMhV,EAASgV,EAAG,OAAQohE,EAAcphE,EAAG,YACnIM,EAAK2jE,GAAiB7C,EAAaC,CAAI,EAAG6C,EAAc5jE,EAAG,YAAa6jE,EAAY7jE,EAAG,UACvF4rE,EAAelhF,EAAO,KAAK,GAAG,EAClC64B,EAAM,kBAAoBqoD,EAC1B,IAAI/yB,EAASC,GAAWpe,EAAU,EAAG,EAAS,CAAE,YAAakpC,EAAa,UAAWC,EAAW,aAAc+H,EAAc,MAAO32E,EAAO,OAAQ7D,EAAQ,MAAO0lB,EAAO,KAAM+kB,CAAK,EAAGsD,GAAc,CAChM,aAAcysC,CAClB,EAAG,CAAC,CAAC,CAAC,EACN,OAAA7yB,GAAare,EAAU,UAAWme,CAAM,EACjCA,CACX,CACA,SAASizB,GAAqBpxC,EAAU,CACpC,IAAIh7B,EAAIM,EACJvO,EAAQipC,EAAS,SAAS,EAAE,MAC5BkxC,EAAen6E,EAAM,cAAgB,GACzC,GAAI,CAACm6E,GAAgBlxC,EAAS,MAAM,UAAW,CAC3C,IAAIqxC,EAAgBrxC,EAAS,UAAU,CAAC,EACpCjtB,EAAcitB,EAAS,WAAW,EAAE,CAAC,EACrCjtB,IACmEs+D,GAAc,MAAM,SAAYt+D,GAC/Fm+D,GAAgB5rE,GAAMN,EAAKg7B,EAAS,UAAU,CAAC,KAAO,MAAQh7B,IAAO,OAAS,OAASA,EAAG,MAAM,MAAM,gBAAkB,MAAQM,IAAO,OAASA,EAAK,GACrJvO,EAAM,aAAem6E,IAGrBA,EAAe,GAAiBn+D,CAAW,EAAE,aAC7Chc,EAAM,aAAem6E,GAGjC,CACA,OAAOA,CACX,CAKA,IAAII,GAAY,CACZ,KAAM,YACN,MAAO,CACH,YACA,gBACA,mBACA,mBACA,iBACA,eACA,8BACJ,EACA,OAAQ,CACJ,aACA,QACA,WACA,kBACA,aACA,eACJ,EACA,IAAK,CACD;AAAA;AAAA;AAAA;AAAA,GACA;AAAA;AAAA;AAAA,GACA;AAAA;AAAA;AAAA,GACA;AAAA;AAAA,EACJ,EACA,UAAW,SAAUtxC,EAAU,CAC3B,IAAIuxC,EAAiBvxC,EAAS,MAAM,eACpC,OAAOuxC,IAAmB,IAAQA,IAAmB,OAAS1qE,GAAO,sBAAsB,EAAI,EACnG,EACA,aAAc,UAAY,CACtB,MAAO,CAAC,cAAc,CAC1B,EACA,kBAAmB,UAAY,CAC3B,MAAO,CAAC,cAAc,CAC1B,EACA,OAAQ,SAAUm5B,EAAU+K,EAAO,CAC/B,IAAI/lC,EAAKg7B,EAAS,SAAS,EAAGzpC,EAASyO,EAAG,OAAQzK,EAAQyK,EAAG,MAAOtO,EAASsO,EAAG,OAAQs7B,EAAYt7B,EAAG,UAAWy6B,EAAOz6B,EAAG,KAAMrG,EAAOqG,EAAG,KAAMpG,EAAMoG,EAAG,IAAKwsE,EAAoBxsE,EAAG,kBACnLM,EAAK06B,EAAS,MAAOv6B,EAAKH,EAAG,iBAAkBmsE,EAAmBhsE,IAAO,OAAS,CAAC,EAAG,CAAC,EAAIA,EAAIE,EAAKL,EAAG,iBAAkBosE,EAAmB/rE,IAAO,OAAS,CAAC,EAAG,CAAC,EAAIA,EAAI+X,EAAOpY,EAAG,KAAMoZ,EAAKpZ,EAAG,aAAcqsE,EAAejzD,IAAO,OAAS,EAAIA,EAAIkzD,EAA+BtsE,EAAG,6BAA8B2/B,EAAY3/B,EAAG,UACzU,GAAI,CAAC/O,EACD,OAAO,KAEX,IAAI26E,EAAeM,GAAqBJ,GAAqBpxC,CAAQ,EACjE5xB,EAAIqxB,EAAO,EAAI,EACf4rC,EAAe4F,GAAgBC,EAAc32E,EAAO7D,EAAQ+6E,EAAkB,EAAI,EACtF,GAAI,CAACpG,EACD,OAAO,KAEX,IAAIwG,EAAgB,EAChBC,EAAkB,EAClBC,EAAU9sC,EAAY,CAAC,EAAG,CAAC,EAAI,CAACtmC,EAAMC,CAAG,EAC7C,OAAOysE,EAAa,IAAI,SAAUrwE,EAAGuH,EAAG,CACpC,IAAI3J,EAAaoC,EAAE,WACfrC,EAAWqC,EAAE,SACby6B,EAAYz6B,EAAE,WAAa,GAC3Bg3E,EAAc,EAAc,CAAC,EAAGl1C,EAAO9hC,EAAE,GAAG,EAAG,EAAK,EACxD82E,GAAmB,KAAK,IAAIl5E,CAAU,EACtCi5E,GAAiB,KAAK,IAAIl5E,CAAQ,EAC9BC,GAAc68B,EAAU,QAAQ,GAAG,EAAI,KACvCu8C,EAAY,CAAC,GAAKL,GAElBh5E,GAAY88B,EAAU,QAAQ,GAAG,EAAI,KACrCu8C,EAAY,CAAC,GAAKL,GAElB/4E,GAAc68B,EAAU,QAAQ,GAAG,EAAI,KACvCu8C,EAAY,CAAC,GAAKL,GAElBh5E,GAAY88B,EAAU,QAAQ,GAAG,EAAI,KACrCu8C,EAAY,CAAC,GAAKL,GAEtB,IAAI3uE,EAAMmuB,GAAM2O,GAAkBQ,EAAW0xC,EAAa5jE,CAAC,EAAG2jE,CAAO,EACjEE,EAA0BL,GACvBA,IAAiC,aACpCp1D,EAAYxhB,EAAE,SACZ62E,GAAiBH,EAAiB,CAAC,IAAMO,GAA2B,CAACj3E,EAAE,SACvE82E,GAAmBJ,EAAiB,CAAC,IAAME,GAAgC,CAAC52E,EAAE,SACpF,OAAO+vC,EAAM,cAAc,MAAO,CAAE,IAAK,sBAAsB,OAAOxoC,CAAC,EAAG,UAAWsE,GAAO,UAAW,gBAAiB7L,EAAE,SAAW,WAAa,GAAIA,EAAE,QAAU,UAAY,EAAE,EAAG,oBAAqBuH,EAAG,MAAO,CAC1M,QAASia,EAAY,QAAU,OAC/B,UAAW,aAAa,OAAOxZ,EAAI,CAAC,EAAG,MAAM,EAAE,OAAOA,EAAI,CAAC,EAAG,YAAY,EAAE,OAAO0a,EAAM,GAAG,CAChG,CAAE,CAAC,CACX,CAAC,CACL,EACA,qBAAsB,SAAUsiB,EAAU,EAAG,CACzC,GAAI,CAAC,EAAE,YAAc,EAAE,UACnB,MAAO,GAEX,IAAIjzB,EAAa,EAAE,WAAW,OAAO,aAAa,OAAO,GAAK,GAC9D,OAAOA,EAAU,QAAQ,eAAe,EAAI,IACpCA,EAAU,QAAQ,eAAe,EAAI,IAAMA,EAAU,QAAQ,oBAAoB,EAAI,EACjG,EACA,0BAA2B,SAAUizB,EAAU,EAAG,CAC9C,OAAO,KAAK,qBAAqBA,EAAU,CAAC,CAChD,EACA,iBAAkB,SAAUA,EAAU,EAAG,CACrC,IAAI7sB,EAAa,EAAE,WAAYkH,EAAQ,EAAE,MACrCksC,EAAcpzC,EAAW,OACzBpG,EAAaw5C,EAAY,aAAa,OAAO,GAAK,GAClDoV,EAAY5uD,EAAU,QAAQ,eAAe,EAAI,GACjD4hE,EAAS5hE,EAAU,QAAQ,eAAe,EAAI,IAAMA,EAAU,QAAQ,oBAAoB,EAAI,GAC9F8jE,EAAelV,EAAY,SAASpV,EAAY,aAAa,mBAAmB,EAAG,EAAE,EAAI,GACzFkqB,EAAY,GAChB,GAAI9B,EAAQ,CACR,IAAIuD,EAAY3rB,EAAY,aAAa,eAAe,GAAK,GACzD2rB,IACAzB,EAAY,SAASyB,EAAU,QAAQ,gBAAiB,EAAE,EAAG,EAAE,EAC3D,MAAMzB,CAAS,IACfA,EAAY,IAGxB,CACA,GAAI,CAAC9U,GAAa,CAACgT,EACf,MAAO,GAEX,IAAIxwB,EAASC,GAAWpe,EAAU,EAAG,CAAC,CAAC,EACnCztB,EAAS8rC,GAAare,EAAU,eAAgBme,CAAM,EAC1D,GAAI5rC,IAAW,GACX,MAAO,GAEX8H,EAAM,UAAYo2D,EAClBp2D,EAAM,aAAew2D,EACrBx2D,EAAM,UAAYshD,EAClBthD,EAAM,OAASs0D,EACftuC,GAAaL,EAAU,CAAC,EACxB,IAAIh7B,EAAKg7B,EAAS,MAAOmyC,EAAgBntE,EAAG,cAAeM,EAAKN,EAAG,iBAAkBysE,EAAmBnsE,IAAO,OAAS,CAAC,EAAG,CAAC,EAAIA,EAC7HujB,EAAQmX,EAAS,MACjBzlC,EAAQsuB,EAAM,MAAOnyB,EAASmyB,EAAM,OACxCxO,EAAM,QAAU,GAChBA,EAAM,SAAW,CAAC,EAAG,CAAC,EACtB,IAAI62D,EAAeE,GAAqBpxC,CAAQ,EAC5CwmC,EAAeyK,GAAgBC,GAAgB,GAAI32E,EAAO7D,EAAQ+6E,EAAkB,EAAI,GAAK,CAAC,EAClG,OAAAp3D,EAAM,aAAemsD,EACrB39C,EAAM,kBAAoBq9C,GAAgBM,EAAc2L,EAAe53E,EAAO7D,CAAM,EAAE,OAAO,KAAK,GAAG,EAC9FynD,CACX,EACA,YAAa,SAAUne,EAAU,EAAG,CAChC,IAAI3lB,EAAQ,EAAE,MACVmsD,EAAensD,EAAM,aACzB,GAAI,CAACA,EAAM,SAAW,CAACA,EAAM,WAAa,CAACmsD,EAAa,OACpD,MAAO,GAEX,IAAIzpE,EAAQsd,EAAM,aACdrV,EAAK83B,EAAOsD,GAAY,CAAC,EAAG,CAAC,EAAG91B,EAAQtF,EAAG,CAAC,EAAGuF,EAAQvF,EAAG,CAAC,EAC3Dm8B,EAAO,CAAC72B,EAAOC,CAAK,EACpB6R,EAAQ+U,GAAMgQ,EAAM9mB,EAAM,QAAQ,EAClC/U,EAAK06B,EAAS,MAAM,iBAAkB0xC,EAAmBpsE,IAAO,OAAS,CAAC,EAAG,CAAC,EAAIA,EAClFG,EAAKu6B,EAAS,MAAOzlC,EAAQkL,EAAG,MAAO/O,EAAS+O,EAAG,OACnD2sE,EAAsB5L,EAAazpE,CAAK,EACxCs1E,EAAmBD,EAAoB,SACvCE,EAAqBF,EAAoB,WAMzCnG,EAAQzF,EAAa,IAAI,SAAU+L,EAAM,CACzC,IAAI35E,EAAa25E,EAAK,WAAY55E,EAAW45E,EAAK,SAC9CC,EAAW,CACX55E,EAAa05E,EAAqBnxC,EAAK,CAAC,EACxCxoC,EAAW05E,EAAmBlxC,EAAK,CAAC,CACxC,EACA,GAAIvoC,EAAY,CACZ,GAAI84E,EAAiB,CAAC,IAAM,EACxB,OAAOc,EAEN,GAAId,EAAiB,CAAC,EAAI,GAAK94E,IAAe05E,EAC/C,OAAOE,CAEf,KACK,IAAId,EAAiB,CAAC,IAAM,EAC7B,OAAAc,EAAS,CAAC,EAAI75E,EAAW25E,EAAqBnxC,EAAK,CAAC,EAAI5mC,EAAQ7D,EACzD87E,EAEN,GAAIH,EAAkB,CACvB,GAAIX,EAAiB,CAAC,IAAM,EACxB,OAAOc,EAEN,GAAId,EAAiB,CAAC,EAAI,GAAK/4E,IAAa05E,EAC7C,OAAOG,CAEf,EACA,MAAO,CAAC,EAAG,CAAC,CAChB,CAAC,EACDvG,EAAMlvE,CAAK,EAAIokC,EACf,IAAIqN,EAAYg4B,EAAa,IAAI,SAAUnpE,EAAMkF,EAAG,CAChD,OAAO,EAAS,EAAS,CAAC,EAAGlF,CAAI,EAAG,CAAE,IAAK4zB,GAAK5zB,EAAK,IAAK4uE,EAAM1pE,CAAC,CAAC,CAAE,CAAC,CACzE,CAAC,EACD,OAAIxF,EAAQ,EACRyxC,EAAU,MAAM,EAAGzxC,EAAQ,CAAC,EAAE,QAAQ,SAAUM,EAAM,CAClDA,EAAK,QAAU,EACnB,CAAC,EAGDmxC,EAAU,MAAM,EAAGzxC,EAAQ,CAAC,EAAE,QAAQ,SAAUM,EAAM,CAClDA,EAAK,QAAU,EACnB,CAAC,EAELgd,EAAM,SAAW,CAAC/P,EAAOC,CAAK,EACvB4mE,GAAkBnxC,EAAU,EAAGmB,EAAM/kB,EAAOoyB,CAAS,CAChE,EACA,eAAgB,SAAUxO,EAAU,EAAG,CACnC,IAAInX,EAAQmX,EAAS,MACrBnX,EAAM,kBAAoB,GAC1B,IAAIxO,EAAQ,EAAE,MAAOvH,EAAW,EAAE,SAClC,GAAI,CAACuH,EAAM,QACP,MAAO,GAEX,IAAIshD,EAAYthD,EAAM,UAAWw2D,EAAex2D,EAAM,aAAcs0D,EAASt0D,EAAM,OAAQo2D,EAAYp2D,EAAM,UACzGmsD,EAAensD,EAAM,aACrB/X,EAASkkE,EAAa,OAAO,SAAUxhE,EAAI,CAC3C,IAAI2rE,EAAU3rE,EAAG,QACjB,OAAO2rE,CACX,CAAC,EAAE,OACC3rE,EAAKg7B,EAAS,MAAM,eAAgBuxC,EAAiBvsE,IAAO,OAAS,GAAOA,EAChF,GAAI8N,GAAYy+D,EAAgB,CAC5B,GAAI5V,IAAc4V,IAAmB,IAAQA,IAAmB,WAC5DP,GAAmBxK,EAAcqK,CAAY,UAExClC,IAAW4C,IAAmB,IAAQA,IAAmB,QAAS,CACvE,IAAIjsE,EAAKw3B,EAAOiD,GAAqBC,EAAU,CAAC,EAAG,CAAC,EAAG11B,EAAQhF,EAAG,CAAC,EAAGiF,EAAQjF,EAAG,CAAC,EAClFkrE,GAAsBhK,EAAciK,EAAWnmE,EAAOC,CAAK,CAC/D,CACIjI,IAAWkkE,EAAa,OAAO,SAAUxhE,EAAI,CAC7C,IAAI2rE,EAAU3rE,EAAG,QACjB,OAAO2rE,CACX,CAAC,EAAE,QACCQ,GAAkBnxC,EAAU,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAGwmC,CAAY,CAEnE,CACA,IAAIroB,EAASoB,GAAcvf,EAAU,EAAG,CAAC,CAAC,EAC1C,OAAAqe,GAAare,EAAU,aAAcme,CAAM,EAC3Ct1B,EAAM,kBAAoB,GACnBs1B,CACX,EACA,sBAAuB,SAAUne,EAAU,EAAG,CAC1C,IAAIztB,EAAS,KAAK,iBAAiBytB,EAAU,CAAC,EAC9C,GAAI,CAACztB,EACD,MAAO,GAEX,IAAIw3B,EAAY/J,EAAS,UACrB7uB,EAAU6uB,EAAS,MAAM,QACzBvxB,EAASi7B,GAAgB1J,EAAU,YAAa,CAAC,EACjDwf,EAAa,EAAS,CAAE,QAASxf,EAAS,MAAM,QAAS,OAAQvxB,EAAO,IAAI,SAAUy7B,EAAI3nC,EAAG,CACzF,OAAO,EAAS,EAAS,CAAC,EAAG2nC,CAAE,EAAG,CAAE,OAAQ/4B,EAAQ5O,CAAC,EAAG,SAAUwnC,EAAUxnC,CAAC,EAAG,cAAewnC,EAAUxnC,CAAC,CAAE,CAAC,CACjH,CAAC,CAAE,EAAGgQ,CAAM,EAChB,OAAA8rC,GAAare,EAAU,oBAAqBwf,CAAU,EAC/CjtC,CACX,EACA,iBAAkB,SAAUytB,EAAU,EAAG,CACrC,IAAIztB,EAAS,KAAK,YAAYytB,EAAU,CAAC,EACzC,GAAI,CAACztB,EACD,MAAO,GAEX,IAAIw3B,EAAY/J,EAAS,UACrB7uB,EAAU6uB,EAAS,MAAM,QACzBvxB,EAASi7B,GAAgB1J,EAAU,YAAa,CAAC,EACjDwf,EAAa,EAAS,CAAE,QAASxf,EAAS,MAAM,QAAS,OAAQvxB,EAAO,IAAI,SAAUy7B,EAAI3nC,EAAG,CACzF,OAAO,EAAS,EAAS,EAAS,CAAC,EAAG2nC,CAAE,EAAG,CAAE,OAAQ/4B,EAAQ5O,CAAC,EAAG,SAAUwnC,EAAUxnC,CAAC,EAAG,cAAewnC,EAAUxnC,CAAC,CAAE,CAAC,EAAGkiC,GAAc,CACnI,aAAclyB,EAAO,YACzB,EAAG23B,CAAE,CAAC,CACV,CAAC,CAAE,EAAG33B,CAAM,EAChB,OAAA8rC,GAAare,EAAU,eAAgBwf,CAAU,EAC1CA,CACX,EACA,oBAAqB,SAAUxf,EAAU,EAAG,CACxC,IAAI+J,EAAY/J,EAAS,UACrB7uB,EAAU6uB,EAAS,MAAM,QACzBvxB,EAASi7B,GAAgB1J,EAAU,YAAa,CAAC,EACrDgkB,GAAWhkB,EAAU,UAAW,SAAUge,EAAa,CACnD,IAAIwB,EAAa,EAAS,CAAE,QAASxf,EAAS,MAAM,QAAS,OAAQvxB,EAAO,IAAI,SAAUy7B,EAAI3nC,EAAG,CACzF,OAAO,EAAS,EAAS,EAAS,CAAC,EAAG2nC,CAAE,EAAG,CAAE,OAAQ/4B,EAAQ5O,CAAC,EAAG,SAAUwnC,EAAUxnC,CAAC,EAAG,cAAewnC,EAAUxnC,CAAC,CAAE,CAAC,EAAGkiC,GAAc,CACnI,aAAcuZ,EAAY,YAC9B,EAAG9T,CAAE,CAAC,CACV,CAAC,CAAE,EAAG8T,CAAW,EACrBK,GAAare,EAAU,eAAgBwf,CAAU,CACrD,CAAC,EACD,IAAIjtC,EAAS,KAAK,eAAeytB,EAAU,CAAC,EAC5C,GAAI,CAACztB,EACD,MAAO,GAEX,IAAIitC,EAAa,EAAS,CAAE,QAASxf,EAAS,MAAM,QAAS,OAAQvxB,EAAO,IAAI,SAAUy7B,EAAI3nC,EAAG,CACzF,IAAIyC,EACJ,OAAO,EAAS,EAAS,CAAC,EAAGklC,CAAE,EAAG,CAAE,OAAQ/4B,EAAQ5O,CAAC,EAAG,SAAUwnC,EAAUxnC,CAAC,EAAG,cAAewnC,EAAUxnC,CAAC,EAAG,WAAYyC,EAAKklC,EAAG,SAAW,MAAQllC,IAAO,OAAS,OAASA,EAAG,SAAU,CAAC,CAC/L,CAAC,CAAE,EAAGuN,CAAM,EAChB,OAAA8rC,GAAare,EAAU,kBAAmBwf,CAAU,EAC7CA,CACX,EACA,MAAO,SAAUxf,EAAU,CACvBA,EAAS,MAAM,kBAAoB,EACvC,CACJ,EAsOA,SAASyyC,GAAiBn5E,EAAQmmC,EAAM,CACpC,IAAI,EAAIA,EAAO,EAAI,EACfizC,EAAiBxiD,GAAqB,CAAC,EACvCrlC,EAAQ,SAAS,OAAO40C,EAAO,KAAO,GAAI,GAAG,EAAE,OAAOizC,EAAe,KAAK,GAAG,EAAG,GAAG,EACvF,OAAOp5E,IAAWzO,GAASyO,IAAW,qBAC1C,CACA,IAAIq5E,GAAmB,CACnB,QAAS,GACT,KAAM,mBACN,MAAO,CAAC,EACR,OAAQ,CACJ,oBACA,eACA,kBACA,yBACA,oBACA,sBACJ,EACA,aAAc,OACd,aAAc,SAAU3yC,EAAU,EAAG,CACjC,IAAIh7B,EAAKg7B,EAAS,MAAOP,EAAOz6B,EAAG,KAAMy7B,EAAez7B,EAAG,aAAc4tE,EAAkB5tE,EAAG,gBAC1F6tE,EAAYpzC,EACV,YAAY,OAAOgB,EAAa,KAAK,GAAG,EAAG,GAAG,EAC9C,UAAU,OAAOnP,GAAmBmP,EAAc,EAAI,EAAG,GAAG,EAC9DqyC,EAAiB,CAACF,GAAmBA,IAAoB,OAASC,EAAYD,EAClF,EAAE,MAAM,gBAAkBH,GAAiBK,EAAgBrzC,CAAI,EAAI,CAAC,EAAIj5B,GAAWssE,CAAc,CACrG,EACA,WAAY,SAAUlnF,EAAG,CACrB,IAAIyuB,EAAQzuB,EAAE,MACdyuB,EAAM,UAAY,CAAC,EACnBA,EAAM,eAAiBzuB,EAAE,MAAM,gBAC/ByuB,EAAM,6BAA+B,CAAC,CAC1C,EACA,oBAAqB,SAAU2lB,EAAU,EAAG,CACxC,OAAOoe,GAAWpe,EAAU,EAAG,CAC3B,aAAc,SAAU1hC,EAAW,CAC/B,EAAE,MAAM,gBAAkByF,GAAQzF,CAAS,EAAIA,EAAYkI,GAAWlI,CAAS,CACnF,EACA,QAAS,CAAC,CAAC,EAAE,OACjB,CAAC,CACL,EACA,eAAgB,SAAU0hC,EAAU,EAAG,CACnC,OAAOoe,GAAWpe,EAAU,EAAG,CAC3B,QAAS,CAAC,CAAC,EAAE,OACjB,CAAC,CACL,EACA,UAAW,SAAUA,EAAU,EAAG,CAC9B,KAAK,aAAaA,EAAU,CAAC,EAC7B,KAAK,WAAW,CAAC,EACjBqe,GAAare,EAAU,sBAAuB,KAAK,oBAAoBA,EAAU,CAAC,CAAC,CACvF,EACA,KAAM,SAAUA,EAAU,EAAG,CACpB,EAAE,MAAM,iBACT,KAAK,aAAaA,EAAU,CAAC,EAEjC,KAAK,WAAW,CAAC,EACjBqe,GAAare,EAAU,iBAAkBoe,GAAWpe,EAAU,EAAG,CAC7D,QAAS,CAAC,CAAC,EAAE,OACjB,CAAC,CAAC,CACN,EACA,QAAS,SAAUA,EAAU,EAAG,CACvB,EAAE,MAAM,kBACT,KAAK,aAAaA,EAAU,CAAC,EAC7B,KAAK,WAAW,CAAC,GAErBqe,GAAare,EAAU,oBAAqBoe,GAAWpe,EAAU,EAAG,CAChE,QAAS,CAAC,CAAC,EAAE,QACb,OAAQ,EAAE,MACd,CAAC,CAAC,CACN,EACA,eAAgB,SAAUA,EAAU,EAAG,CACnC,IAAItxB,EAAQ,KACZ,KAAK,UAAUsxB,EAAU,CAAC,EAC1B,IAAIvxB,EAASi7B,GAAgB1J,EAAU,mBAAoB,CAAC,EACxD+J,EAAY/J,EAAS,UACrBme,EAAS1vC,EAAO,IAAI,SAAU47B,EAAY9nC,EAAG,CAC7C,IAAI4nC,EAAgBJ,EAAUxnC,CAAC,EAC/B,OAAAmM,EAAM,aAAay7B,EAAeE,CAAU,EAC5C37B,EAAM,WAAW27B,CAAU,EACpB37B,EAAM,oBAAoBy7B,EAAeE,CAAU,CAC9D,CAAC,EACDgU,GAAare,EAAU,2BAA4Boe,GAAWpe,EAAU,EAAG,CACvE,QAAS,CAAC,CAAC,EAAE,QACb,QAASA,EAAS,MAAM,QACxB,aAAc,UAAY,CAAE,EAC5B,OAAQme,CACZ,CAAC,CAAC,CACN,EACA,UAAW,SAAUne,EAAU,EAAG,CAC9B,IAAItxB,EAAQ,KACZ,KAAK,KAAKsxB,EAAU,CAAC,EACrB,IAAIvxB,EAASi7B,GAAgB1J,EAAU,mBAAoB,CAAC,EACxD+J,EAAY/J,EAAS,UACrBme,EAAS1vC,EAAO,IAAI,SAAU47B,EAAY9nC,EAAG,CAC7C,IAAI4nC,EAAgBJ,EAAUxnC,CAAC,EAC/B,OAAAmM,EAAM,WAAW27B,CAAU,EACpB37B,EAAM,eAAey7B,EAAeE,CAAU,CACzD,CAAC,EACDgU,GAAare,EAAU,sBAAuBoe,GAAWpe,EAAU,EAAG,CAClE,QAAS,CAAC,CAAC,EAAE,QACb,QAASA,EAAS,MAAM,QACxB,OAAQme,CACZ,CAAC,CAAC,CACN,EACA,aAAc,SAAUne,EAAU,EAAG,CACjC,KAAK,QAAQA,EAAU,CAAC,EACxBqe,GAAare,EAAU,yBAA0Boe,GAAWpe,EAAU,EAAG,CACrE,QAAS,CAAC,CAAC,EAAE,QACb,OAAQ,EAAE,OACV,QAASA,EAAS,MAAM,OAC5B,CAAC,CAAC,CACN,EACA,iBAAkB,SAAUA,EAAU,EAAG,CACrC,OAAO,KAAK,UAAUA,EAAU,CAAC,CACrC,EACA,YAAa,SAAUA,EAAU,EAAG,CAChC,OAAO,KAAK,KAAKA,EAAU,CAAC,CAChC,EACA,eAAgB,SAAUA,EAAU,EAAG,CACnC,OAAO,KAAK,QAAQA,EAAU,CAAC,CACnC,EACA,sBAAuB,SAAUA,EAAU,EAAG,CAC1C,OAAO,KAAK,eAAeA,EAAU,CAAC,CAC1C,EACA,iBAAkB,SAAUA,EAAU,EAAG,CACrC,OAAO,KAAK,UAAUA,EAAU,CAAC,CACrC,EACA,oBAAqB,SAAUA,EAAU,EAAG,CACxC,OAAO,KAAK,aAAaA,EAAU,CAAC,CACxC,CACJ,EAEI+yC,GAAa,CACb,KAAM,aACN,MAAO,CAAC,EACR,OAAQ,CACJ,cACA,SACA,YACA,mBACA,cACA,gBACJ,EACA,aAAc,OACd,UAAW,SAAU/yC,EAAU,EAAG,CAC9Bqe,GAAare,EAAU,gBAAiBoe,GAAWpe,EAAU,EAAG,CAC5D,QAAS,CAAC,CAAC,EAAE,OACjB,CAAC,CAAC,CACN,EACA,KAAM,SAAUA,EAAU,EAAG,CACzBqe,GAAare,EAAU,WAAY,KAAK,eAAeA,EAAU,CAAC,CAAC,CACvE,EACA,UAAW,SAAUA,EAAU,EAAG,CAC9B,OAAO,KAAK,KAAKA,EAAU,CAAC,CAChC,EACA,QAAS,SAAUA,EAAU,EAAG,CAC5Bqe,GAAare,EAAU,cAAe,KAAK,kBAAkBA,EAAU,CAAC,CAAC,CAC7E,EACA,eAAgB,SAAUA,EAAU,EAAG,CACnCqe,GAAare,EAAU,qBAAsBoe,GAAWpe,EAAU,EAAG,CACjE,QAAS,CAAC,CAAC,EAAE,QACb,QAASA,EAAS,MAAM,OAC5B,CAAC,CAAC,CACN,EACA,UAAW,SAAUA,EAAU,EAAG,CAC9B,IAAItxB,EAAQ,KACRD,EAASi7B,GAAgB1J,EAAU,mBAAoB,CAAC,EACxD+J,EAAY/J,EAAS,UACrBme,EAAS1vC,EAAO,IAAI,SAAU47B,EAAY9nC,EAAG,CAC7C,IAAI4nC,EAAgBJ,EAAUxnC,CAAC,EAC/B,OAAOmM,EAAM,eAAey7B,EAAeE,CAAU,CACzD,CAAC,EACDgU,GAAare,EAAU,gBAAiBoe,GAAWpe,EAAU,EAAG,EAAS,EAAS,CAAE,QAAS,CAAC,CAAC,EAAE,QAAS,QAASA,EAAS,MAAM,QAAS,UAAWmE,GAAqB,CAAC,EAAG,gBAAiB,CAAC,CAAE,EAAGM,GAAcL,GAAa,CAAC,CAAC,CAAC,EAAG,CAAE,OAAQ+Z,CAAO,CAAC,CAAC,CAAC,CAC/P,EACA,aAAc,SAAUne,EAAU,EAAG,CACjC,IAAItxB,EAAQ,KACRD,EAASi7B,GAAgB1J,EAAU,mBAAoB,CAAC,EACxD+J,EAAY/J,EAAS,UACrBme,EAAS1vC,EAAO,IAAI,SAAU47B,EAAY9nC,EAAG,CAC7C,IAAI4nC,EAAgBJ,EAAUxnC,CAAC,EAC/B,OAAOmM,EAAM,kBAAkBy7B,EAAeE,CAAU,CAC5D,CAAC,EACDgU,GAAare,EAAU,mBAAoBoe,GAAWpe,EAAU,EAAG,EAAS,CAAE,QAAS,CAAC,CAAC,EAAE,QAAS,OAAQ,EAAE,OAAQ,QAASA,EAAS,MAAM,QAAS,OAAQme,EAAQ,gBAAiB,CAAC,EAAG,UAAWha,GAAqB,CAAC,CAAE,EAAGM,GAAcL,GAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CACtQ,EACA,iBAAkB,SAAUpE,EAAU,EAAG,CACrC,OAAO,KAAK,UAAUA,EAAU,CAAC,CACrC,EACA,YAAa,SAAUA,EAAU,EAAG,CAChC,OAAO,KAAK,KAAKA,EAAU,CAAC,CAChC,EACA,iBAAkB,SAAUA,EAAU,EAAG,CACrC,OAAO,KAAK,UAAUA,EAAU,CAAC,CACrC,EACA,eAAgB,SAAUA,EAAU,EAAG,CACnC,OAAO,KAAK,QAAQA,EAAU,CAAC,CACnC,EACA,sBAAuB,SAAUA,EAAU,EAAG,CAC1C,OAAO,KAAK,eAAeA,EAAU,CAAC,CAC1C,EACA,iBAAkB,SAAUA,EAAU,EAAG,CACrC,OAAO,KAAK,UAAUA,EAAU,CAAC,CACrC,EACA,oBAAqB,SAAUA,EAAU,EAAG,CACxC,OAAO,KAAK,aAAaA,EAAU,CAAC,CACxC,EACA,eAAgB,SAAUA,EAAU,EAAG,CACnC,IAAIgzC,EAAkB,CAAC,EACvB,OAAA/+C,GAAMiQ,GAAkB,CAAC,GAAK,CAAC,CAAC,EAAE,QAAQ,SAAU+uC,EAAY,CAC5DD,EAAgBC,EAAW,IAAI,EAAIA,EAAW,aAClD,CAAC,EACM70B,GAAWpe,EAAU,EAAG,EAAS,CAAE,QAAS,CAAC,CAAC,EAAE,QAAS,gBAAiBgzC,EAAiB,UAAW7uC,GAAqB,CAAC,CAAE,EAAGM,GAAcL,GAAa,CAAC,CAAC,CAAC,CAAC,CAC3K,EACA,kBAAmB,SAAUpE,EAAU,EAAG,CACtC,IAAIgzC,EAAkB,CAAC,EACvB,OAAA/+C,GAAMiQ,GAAkB,CAAC,GAAK,CAAC,CAAC,EAAE,QAAQ,SAAU+uC,EAAY,CAC5DD,EAAgBC,EAAW,IAAI,EAAIA,EAAW,aAClD,CAAC,EACM70B,GAAWpe,EAAU,EAAG,EAAS,CAAE,QAAS,CAAC,CAAC,EAAE,QAAS,OAAQ,EAAE,OAAQ,gBAAiBgzC,EAAiB,UAAW7uC,GAAqB,CAAC,CAAE,EAAGM,GAAcL,GAAa,CAAC,CAAC,CAAC,CAAC,CAC7L,CACJ,EAEA,SAAS8uC,GAAYlzC,EAAUmzC,EAAeC,EAAiBC,EAAYC,EAAW1nF,EAAG2nF,EAAgB,CAErG3nF,EAAE,YAAcA,EAAE,MAClBA,EAAE,YAAcA,EAAE,MAClB,IAAIk+C,EAAUwpC,IAAc,QACxB/sC,EAAQ+sC,IAAc,MACtB7xC,EAAU6xC,IAAc,QACxB/8E,EAASypC,EAAS,MAAM,OACxBgc,EAAYpwD,EAAE,UACd+vE,EAAY0X,EAAW,QAAQ,SAAS,EAAI,GAChD,GAAI,CAAC98E,GACGuzC,GAAW6xB,GAAa,CAAC3f,GAAahc,EAAS,cAAgBp0C,EAAE,WAAW,OAChF,MAAO,GAEX,IAAIk6D,EAAQ,EAAc,CAAC,EAAGhpB,EAAOq2C,CAAa,EAAG,EAAK,EAC1D,GAAIn3B,EAAW,CACX,IAAIw3B,EAAgB5nF,EAAE,YACjBk6D,EAAM,KAAK,SAAU9oB,EAAM,CAAE,OAAOA,EAAK,OAASw2C,CAAe,CAAC,GACnE1tB,EAAM,KAAK,MAAMA,EAAO,EAAc,CAAC,EAAGhpB,EAAOkD,EAAS,MAAM,MAAM,OAAO,SAAUhD,EAAM,CAAE,OAAOA,EAAK,OAASw2C,CAAe,CAAC,CAAC,EAAG,EAAK,CAAC,CAEtJ,CACA,GAAI,CAAC1tB,EAAM,QAAUA,EAAM,MAAM,SAAU9oB,EAAM,CAAE,OAAOA,EAAK,YAAc,CAAC,EAC1E,MAAO,GAGX,IAAI7pB,EAAavnB,EAAE,WACf26D,EACAhgB,GAASpzB,IACTozC,EAAc,SAAS,iBAAiB36D,EAAE,QAASA,EAAE,OAAO,GAAKunB,EAAW,QAEhF,IAAIsgE,EAAa,GACb1zD,EAAO,UAAY,CACnB,IAAI/a,EACJyuE,EAAa,IACZzuE,EAAKpZ,EAAE,QAAU,MAAQoZ,IAAO,QAAkBA,EAAG,KAAKpZ,CAAC,CAChE,EACI8nF,EAAe5pC,IAAY,CAAC9J,EAAS,aAAe,CAACA,EAAS,cAC1D,CAACA,EAAS,YAAY,OAAO,GAAK,CAACA,EAAS,aAAa,OAAO,GACpE0zC,GACA1zC,EAAS,WAAWszC,EAAW,GAAM,EAAK,EAG9C,IAAIj5D,EAAQzuB,EAAE,MACV+nF,EAAYhY,EAAY,eAAiB,cACzCiY,EAAY5zC,EAAS2zC,CAAS,EAC9BE,EAAU,SAAU72C,EAAMxuB,EAAWslE,EAAe,CACpD,GAAI,EAAEtlE,KAAawuB,IAAS42C,IAAc5zC,EAAS2zC,CAAS,EACxD,MAAO,GAEX,IAAIx0C,EAAWnC,EAAK,KAChB+2C,EAAY15D,EAAM8kB,CAAQ,IAAM9kB,EAAM8kB,CAAQ,EAAI,CAAC,GAKvD,GAJI2K,IACAiqC,EAAU,aAAe,CAACD,GACnB,CAAC92C,EAAK82C,CAAa,GAAK92C,EAAK82C,CAAa,EAAE9zC,EAAUp0C,CAAC,GAE9D,CAACmoF,EAAU,aACX,MAAO,GAEX,IAAIxhE,EAASyqB,EAAKxuB,CAAS,EAAEwxB,EAAU,EAAS,EAAS,CAAC,EAAGp0C,CAAC,EAAG,CAAE,KAAMm0B,EAAM,MAAOg0D,EAAW,cAAe15D,EAAO,YAAaksC,CAAY,CAAC,CAAC,EAClJ,OAAAvmB,EAAS,SAAS,IAAI,EAClB8J,GAAWv3B,IAAW,KACtBwhE,EAAU,aAAe,IAEtBxhE,CACX,EAEImhE,GACA5tB,EAAM,QAAQ,SAAU9oB,EAAM,CAC1BA,EAAK,OAASA,EAAK,MAAMgD,CAAQ,CACrC,CAAC,EAGL6zC,EAAQlB,GAAkB,OAAO,OAAOU,CAAU,EAAE,OAAOC,CAAS,CAAC,EACrE,IAAIU,EAAkB,EAClBC,EAAe,EACnBb,EAAgB,QAAQ,SAAUc,EAAgB,CAC9C,GAAIT,EACA,MAAO,GAEX,IAAIjlE,EAAY,GAAG,OAAO0lE,CAAc,EAAE,OAAOb,CAAU,EAAE,OAAOC,CAAS,EACzEQ,EAAgB,GAAG,OAAOI,CAAc,EAAE,OAAOb,EAAY,WAAW,EACxEC,IAAc,IAAM,CAACt3B,GAErB3c,GAAgBW,EAAS,MAAOp0C,CAAC,EAGrC,IAAIuoF,EAAaruB,EAAM,OAAO,SAAU9oB,EAAM,CAAE,OAAOA,EAAKxuB,CAAS,CAAG,CAAC,EACzE2lE,EAAaA,EAAW,OAAO,SAAUn3C,EAAMz6B,EAAG,CAC9C,OAAOy6B,EAAK,MAAQm3C,EAAW,QAAQn3C,CAAI,IAAMz6B,CACrD,CAAC,EACD,IAAIo2B,EAAUw7C,EAAW,OAAO,SAAUn3C,EAAM,CAAE,OAAO62C,EAAQ72C,EAAMxuB,EAAWslE,CAAa,CAAG,CAAC,EAC/F/qD,EAAW4P,EAAQ,OAEnB86C,GACA,EAAEO,EAEFjrD,GACA,EAAEkrD,EAEF,CAACR,GAAc3pC,GAAWqqC,EAAW,QAAU,CAACprD,IAChDirD,GAAmBG,EAAW,OAAO,SAAUn3C,EAAM,CACjD,IAAImC,EAAWnC,EAAK,KAChB+2C,EAAY15D,EAAM8kB,CAAQ,EAC9B,OAAI40C,EAAU,aACN/2C,EAAK,eAAiB,SAOvB,EACX,CAAC,EAAE,OAAS,EAAI,EAExB,CAAC,GACG,CAACyE,GAAWwyC,IACZJ,EAAQd,GAAY,OAAO,OAAOM,CAAU,EAAE,OAAOC,CAAS,CAAC,EAGnE,IAAIc,EAAaR,IAAc5zC,EAAS2zC,CAAS,GAAKK,IAAoBZ,EAAgB,OAe1F,IAdI7sC,GAASktC,GAAcW,KACvBp0C,EAAS,MAAM,OAAS,CAAC,EACrBA,EAAS,WACTA,EAAS,UAAU,QAAQ,SAAUmK,EAAe,CAChDA,EAAc,MAAM,OAAS,CAAC,CAClC,CAAC,EAEL2b,EAAM,QAAQ,SAAU9oB,EAAM,CAC1BA,EAAK,OAASA,EAAK,MAAMgD,CAAQ,CACrC,CAAC,GAED8J,GAAW,CAACsqC,GAAc,CAACp4B,GAAai4B,GAAgBj0C,EAAS,MAAM,gBACjCp0C,GAAE,eAAe,EAEvDo0C,EAAS,aAAeo0C,EACxB,MAAO,GAEX,GAAK,CAACtqC,GAAWmqC,GAAgB,CAACV,GAAmBhtC,EAAO,CACxD,IAAI8tC,EAAYr0C,EAAS,MAAM,WAAai1B,GAC5Cof,EAAU,UAAY,CAClBr0C,EAAS,WAAWuG,EAAQ+sC,EAAY,GAAI,GAAM,EAAK,EACvDtzC,EAAS,YAAY,CACzB,CAAC,CACL,CACA,MAAI,CAAC8J,GAAW,CAACvD,GAAS,CAAC9E,GAAWwyC,GAAgB,CAACV,GACnDL,GAAYlzC,EAAUmzC,EAAeC,EAAiBC,EAAYC,EAAY,QAAS1nF,CAAC,EAErF,EACX,CACA,SAAS0oF,GAAoBt0C,EAAU27B,EAAW,CAC9C,OAAO,SAAU/vE,EAAG2K,EAAQ,CACxB,IAAIyO,EACAzO,IAAW,SAAUA,EAAS3K,EAAE,WAAW,QAC/C,IAAI2oF,EAAch+E,EACdiuE,EAAcxkC,EAAS,YACvBw0C,EAAoBx0C,EAAS,YACjC,MAAI,CAACw0C,GAAsB,CAAC7Y,IAAe,GAAA32D,EAAKg7B,EAAS,gBAAkB,MAAQh7B,IAAO,SAAkBA,EAAG,OAAO,GAC3G,GAEJuvE,IAAgBC,GAChBA,EAAkB,SAASD,CAAW,GACtCA,IAAgB/P,GACf,CAACxkC,EAAS,kBAAkBu0C,CAAW,GAAK,CAACv0C,EAAS,WAAW,SAASu0C,CAAW,GACtFznE,GAASynE,EAAa,eAAe,GACrCznE,GAASynE,EAAa,kBAAkB,GACxCznE,GAASynE,EAAa,wBAAwB,CACzD,CACJ,CACA,SAASE,GAAmBz0C,EAAU00C,EAAgBrB,EAAY,CAC9D,IAAIsB,EAAa30C,EAAS,WACtB7uB,EAAU,CAAC,EACXhgB,EAAQ6uC,EAAS,MACjBskC,EAAWnzE,EAAM,SACjBoF,EAASypC,EAAS,MAAM,OACxB40C,EAAazjF,EAAM,WACvBggB,EAAQ,KAAKwjE,CAAU,GACnB,CAACrQ,GAAYsQ,IACbzjE,EAAQ,KAAKujE,CAAc,EAE3B,CAACpQ,GAAYsQ,GAAcr+E,GAAUm+E,IAAmBn+E,GAAUpF,EAAM,gBACxEggB,EAAQ,KAAK5a,CAAM,EAEvB,IAAIs+E,EAAcP,GAAoBt0C,CAAQ,EAC9C,OAAO80C,GAAa90C,EAAU7uB,EAAS,cAAekiE,EAAY,CAC9D,UAAWwB,EACX,WAAYA,CAChB,CAAC,CACL,CACA,SAASE,GAAoB/0C,EAAUqzC,EAAY,CAC/C,IAAIsB,EAAa30C,EAAS,WACtB7uB,EAAU,CAAC,EACfA,EAAQ,KAAKwjE,CAAU,EACvB,IAAIE,EAAcP,GAAoBt0C,EAAU,EAAI,EAChDg1C,EAAqB,SAAUppF,EAAG2K,EAAQ,CAE1C,GADIA,IAAW,SAAUA,EAAS3K,EAAE,WAAW,QAC3C2K,IAAWo+E,EACX,MAAO,GAEX,IAAIpiE,EAASsiE,EAAYjpF,EAAG2K,CAAM,EAClC,MAAO,CAACgc,CACZ,EACA,OAAOuiE,GAAa90C,EAAU7uB,EAAS,eAAgBkiE,EAAY,CAC/D,UAAW2B,EACX,WAAYA,CAChB,CAAC,CACL,CACA,SAASF,GAAa90C,EAAUzpC,EAAQ0+E,EAAU5B,EAAY6B,EAAoB,CAC1EA,IAAuB,SAAUA,EAAqB,CAAC,GAC3D,IAAIC,EAAgBF,IAAa,cAC7BjwE,EAAKg7B,EAAS,MAAOzuB,EAAevM,EAAG,aAAcwO,EAAiBxO,EAAG,eAAgB8M,EAA0B9M,EAAG,wBAAyBowE,EAAsBpwE,EAAG,oBAAqB2M,EAAa3M,EAAG,WAAY4M,EAAmB5M,EAAG,iBAAkBM,EAAKN,EAAG,eAAgB0M,EAAiBpM,IAAO,OAAS,GAAOA,EAAIG,EAAKT,EAAG,kBAAmByM,EAAoBhM,IAAO,OAAS,GAAOA,EAAIE,EAAKX,EAAG,kBAAmBwM,EAAoB7L,IAAO,OAAS,GAAOA,EAAI0vE,EAAsBrwE,EAAG,cAClfswE,EAAgB9lB,GAAa6lB,EAAqB,EAAI,EACtD5kF,EAAU,CACV,eAAgBihB,EAChB,kBAAmBD,EACnB,kBAAmBD,EACnB,UAAW8jE,GAAiBhoE,GAAU0yB,EAAS,qBAAqB,CAAC,EACrE,eAAgBxsB,EAChB,aAAcjC,EACd,wBAAyB4jE,EAAgBrjE,EAA0B,GACnE,6BAA8BqjE,EAAgBC,EAAsB,GACpE,6BAA8BD,EAAgB,KAAO,SAAUvpF,EAAG,CAC9D,OAAOo0C,EAAS,WAAW,SAASp0C,EAAE,MAAM,CAChD,EACA,WAAYupF,EAAgBxjE,EAAa,GACzC,iBAAkBC,CACtB,EACIkqD,EAAQ,IAAI7qD,GAAM1a,EAAQ9F,CAAO,EACjCkrE,EAAY0X,IAAe,UAC/B,OAAC,OAAQ,OAAO,EAAE,QAAQ,SAAUa,EAAgB,CAChD,CAAC,QAAS,GAAI,KAAK,EAAE,QAAQ,SAAUZ,EAAW,CAC9CxX,EAAM,GAAG,GAAG,OAAOoY,CAAc,EAAE,OAAOZ,CAAS,EAAG,SAAU1nF,EAAG,CAC/D,IAAIoZ,EACAwJ,EAAY5iB,EAAE,UACd2pF,EAAmBrB,IAAmB,QAAUtoF,EAAE,QACtD,GAAIspF,EAAmB1mE,CAAS,GAAK,CAAC0mE,EAAmB1mE,CAAS,EAAE5iB,CAAC,EAAG,CACpEA,EAAE,KAAK,EACP,MACJ,CACA,GAAI,CAAA2pF,EAGJ,KAAInC,EAAkBc,IAAmB,OAAS,CAACA,CAAc,EAAI,CAAC,OAAQA,CAAc,EACxFf,EAAgB,EAAc,CAAC,EAAGr2C,EAAOkD,EAASi1C,CAAQ,CAAC,EAAG,EAAK,EACnE1iE,EAAS2gE,GAAYlzC,EAAUmzC,EAAeC,EAAiBC,EAAYC,EAAW1nF,CAAC,EACtF2mB,GAGIytB,EAAS,MAAM,iBAAoBszC,IAAc,SAAW3X,MAChE32D,EAA2CpZ,GAAE,cAAgB,MAAQoZ,IAAO,QAAkBA,EAAG,gBAAgB,GAHlHpZ,EAAE,KAAK,EAKf,CAAC,CACL,CAAC,CACL,CAAC,EACMkwE,CACX,CAEA,IAAI0Z,GAA8B,UAAY,CAC1C,SAASA,EAAaj/E,EAAQypC,EAAUxxB,EAAW,CAC/C,IAAIE,EAAQ,KACZ,KAAK,OAASnY,EACd,KAAK,SAAWypC,EAChB,KAAK,UAAYxxB,EACjB,KAAK,MAAQ,CAAC,EACd,KAAK,SAAW,SAAU5iB,EAAG,CACzB,IAAI4iB,EAAYE,EAAM,UAClBsxB,EAAWtxB,EAAM,SACjBsxB,EAAS,MAAM,oBAGnBtxB,EAAM,MAAM,QAAQ,SAAUsuB,EAAM,CAChCA,EAAKxuB,CAAS,EAAEwxB,EAAU,CACtB,WAAYp0C,CAChB,CAAC,CACL,CAAC,CACL,EACA2K,EAAO,iBAAiBiY,EAAU,YAAY,EAAG,KAAK,QAAQ,CAClE,CACA,OAAAgnE,EAAa,UAAU,SAAW,SAAU1vB,EAAO,CAC/C,KAAK,MAAQA,CACjB,EACA0vB,EAAa,UAAU,QAAU,UAAY,CACzC,KAAK,OAAO,oBAAoB,KAAK,UAAU,YAAY,EAAG,KAAK,QAAQ,EAC3E,KAAK,OAAS,KACd,KAAK,SAAW,IACpB,EACOA,CACX,EAAE,EAEF,SAASC,GAAqBl/E,EAAQ+a,EAAWokE,EAAeC,EAAc,CAC1E,IAAI3wE,EACA0wE,IAAkB,SAAUA,EAAgBpkE,GAChD,IAAIhM,EAAK6gC,GAAmB5vC,EAAQ+a,CAAS,EAAGwf,EAAWxrB,EAAG,SAAUm6B,EAAOn6B,EAAG,KAAMswE,EAAmBtwE,EAAG,aAAco7B,EAAkBp7B,EAAG,gBAAiBwiC,EAAexiC,EAAG,aAAcohC,EAAkBphC,EAAG,gBAAiBmhC,EAAWnhC,EAAG,SAAUuwE,EAAgBvwE,EAAG,KAC/QG,EAAK4jC,GAA6B3C,EAAiBgvC,CAAa,EAAGI,EAAerwE,EAAG,SAAUswE,EAAWtwE,EAAG,KAAMuwE,EAAsBvwE,EAAG,gBAAiBwwE,EAAWxwE,EAAG,KAI3KywE,EAAWP,GAAgBI,GAAYt2C,EACvCrxB,EAAI8nE,EAAW,EAAI,EACnBC,EAAsB5/E,EAAO,QAAQ,YAAY,IAAM,OAAS,oBAAqBA,EACrFkqC,EAAem1C,EAIft1C,EAAYpQ,GAAqB9hB,CAAC,EAClC8xB,EAAahQ,GAAqB9hB,CAAC,EACnCmyB,EAAerQ,GAAqB9hB,CAAC,EACrCoyB,EAAetQ,GAAqB9hB,CAAC,EACrC9L,EAASwuB,EAAS,OAClBslD,EAAmBN,EAAa,IAAI,SAAUz4E,EAAM,CACpD,OAAO,EAAS,EAAS,CAAC,EAAGA,CAAI,EAAG,CAAE,OAAQA,EAAK,OAAS,EAAc,CAAC,EAAGy/B,EAAOz/B,EAAK,MAAM,EAAG,EAAK,EAAI,MAAU,CAAC,CAC3H,CAAC,EAAE,QAAQ,EACXyzB,EAAS,QAAQ,EACb,CAAC2O,GAAQy2C,IACTz1C,EAAe7P,GAAiB6P,EAAc,EAAG,CAAC,EAClDiH,GAAkB5W,CAAQ,GAE1B,CAACilD,GAAYG,GACbxuC,GAAkB0uC,CAAgB,EAMtCA,EAAiB,QAAQ,SAAU/4E,EAAM,CACrC6iC,EAAanP,GAASmP,EAAY7iC,EAAK,OAAQ+Q,CAAC,CACpD,CAAC,EACD,IAAIioE,EAAwBX,GAAiB5nE,GAAgBvX,CAAM,EAC/D+/E,IAAiBtxE,EAAKoxE,EAAiB,CAAC,KAAO,MAAQpxE,IAAO,OAAS,OAASA,EAAG,SAChF2hC,GAAc0vC,EAAuBA,EAAuB,EAAI,EAAE,aACrEE,EAAyBH,EAAiB,MAAM,CAAC,EAAE,OAAO,SAAU98E,EAAQ+D,EAAM,CAClF,OAAO0zB,GAASz3B,EAAQ+D,EAAK,OAAQ+Q,CAAC,CAC1C,EAAG8hB,GAAqB9hB,CAAC,CAAC,EAC1B0iB,EAAS,QAAQ,SAAUzzB,EAAMkF,EAAG,CAUhC,GATID,EAAS,IAAMC,IAEfg+B,EAAeD,EAAU,MAAM,GAE/Bh+B,EAAS,IAAMC,IAEfi+B,EAAeF,EAAU,MAAM,GAG/B,CAACjjC,EAAK,OAAQ,CACd,IAAIm5E,EAAW1lD,EAASvuB,EAAI,CAAC,EACzB+7B,EAAS65B,GAAa96D,EAAMm5E,EAAUF,EAAcloE,EAAG2iB,GAASwlD,EAAwBj2C,EAAWlyB,CAAC,CAAC,EACzG/Q,EAAK,OAASm1B,GAAmB8L,EAAQlwB,CAAC,CAC9C,CACAkyB,EAAYvP,GAASuP,EAAWjjC,EAAK,OAAQ+Q,CAAC,CAClD,CAAC,EACD,IAAIqoE,EAAa,CAACN,GAAuB12C,EACpCgB,IACDA,EAAevQ,GAAqBumD,EAAa,EAAI,CAAC,GAE1D,IAAI/yC,EAAkBqzB,GAAcof,GAAuB11C,EAAa,SAAW,GAC7E7P,GAAiB6P,EAAc,EAAG,CAAC,EAAIA,EAAcg2C,CAAU,EACjEC,EAAqBx2C,EACzB,OAAAA,EAAanQ,GAAgBmQ,EAAY9xB,EAAGA,CAAC,EACtC,CACH,QAASynE,IAAkB,GAAKI,IAAa,EAC7C,SAAUxvC,EACV,SAAU3V,EACV,WAAYoP,EACZ,mBAAoBw2C,EACpB,aAAcn2C,EACd,aAAcC,EACd,UAAWF,EACX,aAAcG,EACd,gBAAiBiD,EACjB,gBAAiBntC,EAAO,MAAM,UAC9B,gBAAiBmqC,EACjB,aAAcoH,EACd,KAAMouC,EACN,gBAAiBxvC,EACjB,oBAAqBsvC,CACzB,CACJ,CAEA,SAASW,GAAqBpgF,EAAQ+a,EAAWokE,EAAeC,EAAc,CACtED,IAAkB,SAAUA,EAAgBpkE,GAChD,IAAI/W,EAAQ,EACR7D,EAAS,EACT+H,EAAW,EACXm4E,EAAY,CAAC,EACbxmB,EAAQiI,GAAQ9hE,CAAM,EAK1B,GAJIA,IACAgE,EAAQ61D,EAAM,YACd15D,EAAS05D,EAAM,cAEf75D,EAAQ,CACR,IAAIgc,EAASkjE,GAAqBl/E,EAAQ+a,EAAWokE,EAAeC,CAAY,EAC5EhlE,EAAW6uB,GAAyBjtB,EAAO,UAAWA,EAAO,gBAAiBhY,EAAO7D,CAAM,EAC/FkgF,EAAY,EAAS,EAAS,CAAC,EAAGrkE,CAAM,EAAG5B,CAAQ,EACnD,IAAIu0C,EAAmB1lB,GAAyBjtB,EAAO,UAAW,CAAC,GAAI,EAAE,EAAG,IAAK,GAAG,EACpF9T,EAAW2mD,GAAe,CAACF,EAAiB,KAAMA,EAAiB,IAAI,EAAGA,EAAiB,SAAS,CACxG,CACA,IAAI92C,EAAIunE,EAAe,EAAI,EAC3B,OAAO,EAAS,EAAS,EAAS,CAAE,QAAS,GAAO,MAAOp7E,EAAO,OAAQ7D,EAAQ,SAAU+H,CAAS,EAAG2xD,CAAK,EAAG,CAAE,mBAAoBlgC,GAAqB9hB,CAAC,EAAG,WAAY8hB,GAAqB9hB,CAAC,EAAG,aAAc8hB,GAAqB9hB,CAAC,EAAG,aAAc8hB,GAAqB9hB,CAAC,EAAG,UAAW8hB,GAAqB9hB,CAAC,EAAG,aAAc8hB,GAAqB9hB,CAAC,EAAG,gBAAiB,GAAI,gBAAiB,GAAI,gBAAiB,CAAC,EAAG,CAAC,EAAG,aAAc,CAAC,EAAG,CAAC,EAAG,KAAM,CAAC,CAACunE,EAAc,KAAM,EAAG,IAAK,EAAG,MAAO,EAAG,OAAQ,EAAG,OAAQ,CAAC,EAAG,CAAC,EAAG,KAAM,CAAC,EAAG,CAAC,EAAG,KAAM,CAAC,EAAG,CAAC,EAAG,KAAM,CAAC,EAAG,CAAC,EAAG,KAAM,CAAC,EAAG,CAAC,EAAG,UAAW,EAAG,SAAU,GAAO,gBAAiB,KAAM,oBAAqB,KAAM,SAAU,CAAC,CAAE,CAAC,EAAGiB,CAAS,CACzqB,CACA,SAASC,GAAetgF,EAAQ+a,EAAWokE,EAAe,CACtD,OAAIA,IAAkB,SAAUA,EAAgBpkE,GACzCqlE,GAAqBpgF,EAAQ+a,EAAWokE,EAAe,EAAI,CACtE,CAEA,SAASoB,GAAsBC,EAAiBxgF,EAAQ+a,EAAW9X,EAAiBk8E,EAAesB,EAAe,CAC1GA,IAAkB,SAAUA,EAAgB,CAAC,GACjD,IAAI9wB,EAAkB,EAClBnI,EAAe,CAAC,EAAG,CAAC,EACpBk5B,EAAmBlc,GAAgB,EACnC96B,EAAqB86B,GAAgB,EACrC/O,EAAsB+O,GAAgB,EACtCmc,EAA0Bnc,GAAgB,EAC1CrK,EAAc,CAAC,EAAG,CAAC,EACnB35D,EAAQ,CAAC,EACTwb,EAASokE,GAAqBpgF,EAAQ+a,EAAWokE,EAAe,EAAI,EACxE,GAAIn/E,EAAQ,CACR,IAAI4gF,EAAavwC,GAAerwC,CAAM,EACtCygF,EAAc,QAAQ,SAAU9pF,EAAM,CAClC6J,EAAM7J,CAAI,EAAIiqF,EAAWjqF,CAAI,CACjC,CAAC,EACD,IAAIkhB,EAAImE,EAAO,KAAO,EAAI,EACtB6kE,EAAiB53C,GAAyBjtB,EAAO,aAAc0e,GAAK1e,EAAO,gBAAiBge,GAAUhe,EAAO,aAAcnE,CAAC,CAAC,EAAGmE,EAAO,MAAOA,EAAO,MAAM,EAC/J2zC,EAAkBkxB,EAAe,UACjCr5B,EAAe9sB,GAAKmmD,EAAe,OAAQ,CAACA,EAAe,KAAO7kE,EAAO,KAAM6kE,EAAe,IAAM7kE,EAAO,GAAG,CAAC,EAC/G2kE,EAA0B9tC,GAAc72B,EAAO,mBAAmB,EAClE,IAAIm0B,EAAkBC,GAAcntC,EAAiBA,EAAiB,EAAI,EAAE,cACrE+Y,EAAO,oBACd,GAAIA,EAAO,QAAS,CAChB,IAAI8kE,EAAyB73C,GAAyBzO,GAASxe,EAAO,mBAAoBA,EAAO,SAAS,EAAGA,EAAO,gBAAiBA,EAAO,MAAOA,EAAO,MAAM,EAC5J+kE,EAA4B93C,GAAyBjtB,EAAO,mBAAoBkjD,GAAwB7uB,GAAeF,CAAe,EAAE,iBAAiB,CAAC,EAAE,IAAI,SAAU1jC,EAAK,CAAE,OAAO,WAAWA,CAAG,CAAG,CAAC,EAAG0jC,EAAgB,YAAaA,EAAgB,YAAY,EAG1Q,GAFAuwC,EAAmB9b,GAAwBkc,EAAwBH,CAAuB,EAC1FlrB,EAAsBmP,GAAwBmc,EAA2BJ,EAAyBxwC,EAAiB,EAAI,EACnHqwC,EAAiB,CACjB,IAAIp4E,EAAO04E,EAAuB,KAC9Bn6B,EAAQm6B,EAAuB,IACnCp3C,EAAqBk7B,GAAwB,CACzC,KAAMx8D,EACN,IAAKu+C,EACL,OAAQA,EACR,MAAOA,CACX,EAAGg6B,CAAuB,CAC9B,CACJ,KACK,CACDD,EAAmB7tC,GAAc7yC,CAAM,EACvCy1D,EAAsB/iB,GAAoBvC,CAAe,EACrDqwC,IACA92C,EAAqBmJ,GAAc2tC,CAAe,GAEtD,IAAIQ,EAA0BvrB,EAAoB,KAAMwrB,EAAyBxrB,EAAoB,IAAKyrB,EAAuBzrB,EAAoB,WAAY0rB,EAAqB1rB,EAAoB,UACtM2rB,EAAc,CACdV,EAAiB,KAAOM,EACxBN,EAAiB,IAAMO,CAC3B,EACA9mB,EAAcv/B,GAAMgP,GAAyB5tB,EAAO,WAAYolE,EAAa,CAAC,EAAG,CAACF,EAAuBllE,EAAO,KAAMmlE,EAAqBnlE,EAAO,GAAG,CAAC,CAC1J,CACJ,CACA,OAAO,EAAS,CAAE,iBAAkB0kE,EAAkB,oBAAqBjrB,EAAqB,mBAAoB/rB,EAAoB,wBAAyBi3C,EAAyB,gBAAiBhxB,EAAiB,aAAcnI,EAAc,qBAAsBA,EAAc,OAAQxnD,EAAQ,MAAOQ,EAAO,YAAa25D,CAAY,EAAGn+C,CAAM,CAChW,CAEA,SAASqlE,GAAgB1/E,EAAM,CAC3B,IAAIkS,EAAOlS,EAAK,KAAMmS,EAAOnS,EAAK,KAAM06B,EAAO16B,EAAK,KAAMqhD,EAAOrhD,EAAK,KACtE,GAAI,CAACkS,GAAQ,CAACC,GAAQ,CAACuoB,GAAQ,CAAC2mB,EAC5B,OAAO,KAEX,IAAIrL,EAASrX,GAAW,CAACzsB,EAAMC,EAAMuoB,EAAM2mB,CAAI,CAAC,EAC5CwN,EAAW,CAAC7Y,EAAO,KAAMA,EAAO,IAAI,EACpCzb,EAAStB,GAAMj5B,EAAK,OAAQ6uD,CAAQ,EACxC,OAAA38C,EAAO+mB,GAAM/mB,EAAM28C,CAAQ,EAC3B18C,EAAO8mB,GAAM9mB,EAAM08C,CAAQ,EAC3Bn0B,EAAOzB,GAAMyB,EAAMm0B,CAAQ,EAC3BxN,EAAOpoB,GAAMooB,EAAMwN,CAAQ,EACpB,EAAS,EAAS,CAAC,EAAG7uD,CAAI,EAAG,CAAE,KAAMA,EAAK,KAAM,IAAKA,EAAK,IAAK,SAAU6uD,EAAU,KAAM38C,EAAM,KAAMC,EAAM,KAAMuoB,EAAM,KAAM2mB,EAAM,OAAQ9mB,EAAQ,aAAcA,EAEpK,YAAa,EAAK,CAAC,CAC3B,CAEA,IAAIolD,GAAiC,SAAU3mE,EAAQ,CACnD,GAAU2mE,EAAiB3mE,CAAM,EACjC,SAAS2mE,GAAkB,CACvB,IAAInpE,EAAQwC,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,KAChE,OAAAxC,EAAM,MAAQ,EAAS,CAAE,UAAW,KAAM,OAAQ,CAAC,EAAG,YAAa,CAC3D,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC,EACf,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC,EACf,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC,EACf,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC,CACnB,EAAG,YAAa,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC,EAAG,mBAAoB,GAAO,SAAU,CAAC,EAAG,CAAC,CAAE,EAAGooE,GAAsB,IAAI,CAAC,EAChIpoE,EAAM,YAAc,CAAC,EACrBA,EAAM,aAAe,CAAC,EACtBA,EAAM,YAAc,CAAC,EACrBA,EAAM,aAAe,CAAC,EACtBA,EAAM,SAAW,EACjBA,EAAM,MAAQ,CAAC,EAAG,CAAC,EACnBA,EAAM,kBAAoB,GAC1BA,EAAM,YAAc,GACpBA,EAAM,OAAS,CACX,WAAc,KACd,WAAc,IAClB,EACAA,EAAM,SAAW,IAAI,GACrBA,EAAM,wBAA0B,KAChCA,EAAM,oBAAsB,KAC5BA,EAAM,gBAAkB,KACxBA,EAAM,YAAc,KACpBA,EAAM,gBAAkB,KACxBA,EAAM,YAAc,KACpBA,EAAM,cAAgB,GACtBA,EAAM,qBAAuB,GAC7BA,EAAM,gBAAkB,GACxBA,EAAM,gBAAkB,KACxBA,EAAM,YAAc,EACpBA,EAAM,kBAAoB,KAC1BA,EAAM,eAAiB,KACvBA,EAAM,eAAiB,KACvBA,EAAM,gBAAkB,CAAC,EACzBA,EAAM,OAAS,CAAC,EAChBA,EAAM,gBAAkB,UAAY,CAChC,GAAI,CAAAA,EAAM,WAAW,EAGrB,KAAIowC,EAAiBpwC,EAAM,MAAM,eACjC,GAAIowC,EAAgB,CAChBA,EAAe,gBAAgB,EAC/B,MACJ,CACA,GAAqBpwC,EAAM,WAAW,EACtCA,EAAM,YAAc,GAAsB,UAAY,CAC9CA,EAAM,WAAW,GAGrBA,EAAM,WAAW,CACrB,CAAC,EACL,EACAA,EAAM,gBAAkB,SAAU9iB,EAAG,CACjCA,EAAE,gBAAgB,EAClBA,EAAE,eAAe,CAErB,EACO8iB,CACX,CACA,OAAAmpE,EAAgB,UAAU,OAAS,UAAY,CAC3C,IAAI1mF,EAAQ,KAAK,MACb03B,EAAQ,KAAK,SAAS,EACtBivD,EAAiB3mF,EAAM,eAAgB4b,EAAY5b,EAAM,UAAW4mF,EAAc5mF,EAAM,OAAQusB,EAAOvsB,EAAM,KAAMsrC,EAAWtrC,EAAM,SAAU8uB,EAAa9uB,EAAM,WAAY6mF,EAAoB7mF,EAAM,UAAW8zC,EAAY9zC,EAAM,UAAW8mF,EAAc9mF,EAAM,YAAa+mF,EAAiB/mF,EAAM,eAC3S,KAAK,0BAA0B,EAC/B,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,IAAI6T,EAAK83B,EAAOg7C,GAAkB,CAAC,EAAG,CAAC,EAAG,CAAC,EAAGnvB,EAAa3jD,EAAG,CAAC,EAAG4jD,EAAY5jD,EAAG,CAAC,EAC9ErG,EAAOkqB,EAAM,KAAMjqB,EAAMiqB,EAAM,IAAKsvD,EAActvD,EAAM,OAAQ4M,EAAY5M,EAAM,UAAW4d,EAAW5d,EAAM,SAAU6nC,EAAc7nC,EAAM,YAC5IuvD,EAAejnF,EAAM,QACrBknF,EAAa,KAAK,WAAW,EAC7BC,EAAiB,CAAC,EACtB,KAAK,gBAAgB,EAAE,QAAQ,SAAUt7C,EAAM,CAC3Cs7C,EAAe,aAAa,OAAOt7C,EAAK,KAAK,YAAY,CAAC,CAAC,EAAI,EACnE,CAAC,EACD,IAAIu7C,EAAgB,KAAK,kBAAkB,EACvC/7D,EAAa47D,GAAgBA,EAAa,SAAWD,GAAelzC,IACjE8yC,GACC,CAAC,KAAK,iBAAmB,KAAK,MAAM,YACxCS,EAAY,KAAK,YAAc,KAAK,MAAM,kBAAoB,KAAK,MAAM,YACzE3/E,EAAY,CAAC8F,EAAOgqD,EAAY/pD,EAAMgqD,CAAS,EAC/C,CAAC3jB,GAAa9zC,EAAM,sBACpB0H,EAAU,CAAC,GAAK63D,EAAY,CAAC,EAC7B73D,EAAU,CAAC,GAAK63D,EAAY,CAAC,GAEjC,IAAI35D,EAAQ,CACR,SAAY0vC,EAAW,QAAU,WACjC,QAAWjqB,EAAY,QAAU,OACjC,WAAcg8D,EAAY,UAAY,SACtC,UAAa,eAAe,OAAO3/E,EAAU,CAAC,EAAG,MAAM,EAAE,OAAOA,EAAU,CAAC,EAAG,MAAM,EAAE,OAAOonB,EAAY,GAAG,EAC5G,SAAUvC,EACV,WAAY,GAAG,OAAOA,EAAM,IAAI,CACpC,EACA,OAAIu6D,IACAlhF,EAAM,yBAAyB,EAAIkhF,GAEnCC,IACAnhF,EAAM,4BAA4B,EAAImhF,GAElC,GAAoBF,EAAmB,EAAS,CAAE,SAAUv7C,EAAU,IAAK,GAAI,KAAM,YAAY,EAAG,UAAW,GAAG,OAAO51B,GAAO,cAAe4uB,IAAc,GAAK,UAAY,GAAI4iD,EAAa,WAAa,EAAE,EAAG,GAAG,EAAE,OAAOE,EAAe,GAAG,EAAE,OAAOxrE,CAAS,CAAE,EAAGurE,EAAgB,CAAE,QAAS,KAAK,gBAAiB,MAAOvhF,CAAM,CAAC,EACzU,KAAK,YAAY,EACjB,KAAK,aAAa,CAAC,CAC3B,EACA8gF,EAAgB,UAAU,kBAAoB,UAAY,CACtD,KAAK,kBAAoB,GACzB,KAAK,YAAc,GACnB,IAAI1mF,EAAQ,KAAK,MACb2tD,EAAiB3tD,EAAM,eAAgBmgB,EAAYngB,EAAM,UAC7D,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,KAAK,KAAK,EAC3B,CAACmgB,GAAa,CAACwtC,GAAkB,CAAC,KAAK,MAAM,cAC7C,KAAK,WAAW,GAAI,GAAO,EAAK,EAChC,KAAK,YAAY,EAEzB,EACA+4B,EAAgB,UAAU,mBAAqB,SAAUxvD,EAAW,CAChE,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,gBAAgBA,CAAS,CAClC,EACAwvD,EAAgB,UAAU,qBAAuB,UAAY,CACzD,IAAI7yE,EAAIM,EACR,KAAK,kBAAoB,GACzB,KAAK,YAAc,GACnB,KAAK,SAAS,IAAI,GACjBN,EAAK,KAAK,mBAAqB,MAAQA,IAAO,QAAkBA,EAAG,WAAW,GAC9EM,EAAK,KAAK,qBAAuB,MAAQA,IAAO,QAAkBA,EAAG,WAAW,EACjF,IAAImzE,EAAgB,KAAK,eACrBA,GACA,KAAK,0BAA0B,CAAC,CAAC,EAErC7c,GAAW,KAAM,EAAK,EACtBA,GAAW,KAAM,EAAI,EACrB,IAAIntD,EAAS,KAAK,OAClB,QAAS8E,KAAU9E,EAAQ,CACvB,IAAIiqE,EAAUjqE,EAAO8E,CAAM,EAC3BmlE,GAAWA,EAAQ,QAAQ,CAC/B,CACJ,EACAb,EAAgB,UAAU,WAAa,UAAY,CAC/C,IAAIthF,EAAS,KAAK,MAAM,OACxB,OAAOA,EAAS,CAACA,CAAM,EAAI,CAAC,CAChC,EAMAshF,EAAgB,UAAU,QAAU,SAAU14C,EAAU,CACpD,IAAI2mB,EAAQ,KAAK,MAAM,OAAS,CAAC,EACjC,OAAO,GAAKA,EAAO,SAAU9oB,EAAM,CAAE,OAAOA,EAAK,OAASmC,CAAU,CAAC,CACzE,EACA04C,EAAgB,UAAU,aAAe,UAAY,CACjD,IAAI7yE,EAAK,KAAK,MAAO85C,EAAiB95C,EAAG,eAAgB2zE,EAAkB3zE,EAAG,gBAAiBsM,EAAYtM,EAAG,UAC9G,OAAOsM,GACCqnE,GAAmBA,EAAgB,aAAa,GAChD75B,GAAkBA,EAAe,aAAa,GAC/C,KAAK,WAAW,aAC3B,EAKA+4B,EAAgB,UAAU,qBAAuB,UAAY,CACzD,OAAO,KAAK,UAChB,EAKAA,EAAgB,UAAU,eAAiB,UAAY,CACnD,OAAO,KAAK,WAChB,EAgBAA,EAAgB,UAAU,kBAAoB,SAAUthF,EAAQ,CAC5D,IAAIyO,EACJ,OAAOzO,MAAayO,EAAKzO,EAAO,gBAAkB,MAAQyO,IAAO,OAAS,OAASA,EAAG,KAAKzO,EAAQ,OAAO,IAAM,IAAI,QAAQ,EAAM,EAAI,EAC1I,EAgBAshF,EAAgB,UAAU,UAAY,SAAUjsF,EAAG2K,EAAQ,CACnDA,IAAW,SAAUA,EAAS3K,EAAE,QACpC,IAAIk6C,EAAc,KAAK,YACnBC,EAAe,KAAK,aACxB,OAAID,GAAewuC,GAAoB,IAAI,EAAE,CAAE,WAAY1oF,CAAE,EAAG2K,CAAM,EAC7DuvC,EAAY,OAAO,GACpBA,EAAY,iBAAiBl6C,CAAC,EAG7Bm6C,GAAgB,KAAK,kBAAkBxvC,CAAM,IAC7CwvC,EAAa,OAAO,GACrBA,EAAa,iBAAiBn6C,CAAC,GAGhC,IACX,EAkBAisF,EAAgB,UAAU,QAAU,SAAUrqE,EAAI,CAC9C,IAAIxI,EAAK,KAAK,MAAOzO,EAASyO,EAAG,OAAQoF,EAAOpF,EAAG,KAAMqF,EAAOrF,EAAG,KAAM4tB,EAAO5tB,EAAG,KAAMu0C,EAAOv0C,EAAG,KAAMiyE,EAAmBjyE,EAAG,iBAC/H,GAAI,CAACzO,EACD,MAAO,GAEX,IAAI2B,EACJ,GAAI+V,GAAOT,CAAE,EAAG,CACZ,IAAI07B,EAAa17B,EAAG,sBAAsB,EAC1CtV,EAAO,CACH,KAAMgxC,EAAW,KACjB,IAAKA,EAAW,IAChB,MAAOA,EAAW,MAClB,OAAQA,EAAW,MACvB,CACJ,MAEIhxC,EAAO,EAAS,CAAE,MAAO,EAAG,OAAQ,CAAE,EAAGsV,CAAE,EAE/C,IAAI2iD,EAAWj4D,EAAK,KAAMg4D,EAAUh4D,EAAK,IAAK8/D,EAAY9/D,EAAK,MAAO+/D,EAAa//D,EAAK,OACpFuS,EAASmsB,GAAU,CAACxsB,EAAMC,EAAMkvC,EAAM3mB,CAAI,EAAGqkD,CAAgB,EAC7Dh0E,EAAOi5B,GAAezxB,EAAQ,CAC9B,CAAC0lD,EAAUD,CAAO,EAClB,CAACC,EAAW6H,EAAW9H,CAAO,EAC9B,CAACC,EAAW6H,EAAW9H,EAAU+H,CAAU,EAC3C,CAAC9H,EAAUD,EAAU+H,CAAU,CACnC,CAAC,EACG2gB,EAAYniD,GAAYhsB,CAAM,EAClC,MAAI,CAACxH,GAAQ,CAAC21E,EACH,EAEJ,KAAK,IAAI,IAAK31E,EAAO21E,EAAY,GAAG,CAC/C,EAkBAf,EAAgB,UAAU,SAAW,SAAU/nE,EAASC,EAAS,CAC7D,IAAI/K,EAAK,KAAK,MAAOzO,EAASyO,EAAG,OAAQoF,EAAOpF,EAAG,KAAMqF,EAAOrF,EAAG,KAAM4tB,EAAO5tB,EAAG,KAAMu0C,EAAOv0C,EAAG,KAAMiyE,EAAmBjyE,EAAG,iBAC/H,OAAKzO,EAGE6gC,GAAS,CAACtnB,EAASC,CAAO,EAAG6mB,GAAU,CAACxsB,EAAMC,EAAMkvC,EAAM3mB,CAAI,EAAGqkD,CAAgB,CAAC,EAF9E,EAGf,EAaAY,EAAgB,UAAU,WAAa,SAAUpqE,EAAMorE,EAAUC,EAAY,CACrEA,IAAe,SAAUA,EAAa,IAC1C,IAAI3nF,EAAQ,KAAK,MACb4nF,EAAW,CAAC5nF,EAAM,gBAAkB,CAACA,EAAM,gBAC3C4nF,GACAhwC,GAAc,EAAI,EAEtB,IAAI+V,EAAiB3tD,EAAM,eACvB03B,EAAQ,KAAK,MACbtyB,EAAUsyB,EAAM,QAAU13B,EAAM,OAChCmgB,EAAY,KAAK,aAAa,EAC9BokE,EAAgB52B,EACdA,EAAe,eACf,KAAK,eACPt3B,EAAYsvD,GAAsB,KAAK,WAAYvgF,EAAQ+a,EAAWA,EAAWokE,GAAiBpkE,EAAW,KAAK,kBAAkB,CAAC,EACzI,GAAI,CAAC/a,GAAU,KAAK,iBAAmBpF,EAAM,YAAa,CACtD,IAAI6nF,EAAepB,GAAgBzmF,EAAM,WAAW,EACpD,QAASo1B,KAAUyyD,EACfxxD,EAAUjB,CAAM,EAAIyyD,EAAazyD,CAAM,CAE/C,CACIwyD,GACAhwC,GAAc,EAElB,KAAK,YAAYvhB,EAAWs3B,EAAiB,GAAQg6B,CAAU,CACnE,EAkBAjB,EAAgB,UAAU,WAAa,SAAU14C,EAAU,CACvD,IAAIn6B,EAAIM,EACJwgC,EAAc,KAAK,YACnBC,EAAe,KAAK,aACxB,GAA8DD,GAAY,OAAO,EAAG,CAChF,GAAI,CAAC3G,EACD,MAAO,GAEX,IAAIhyC,EAAO24C,EAAY,aAAa,EACpC,MAAO,CAAC,EAAG,GAAA9gC,EAAK7X,EAAKgyC,CAAQ,KAAO,MAAQn6B,IAAO,SAAkBA,EAAG,aAC5E,CACA,GAAgE+gC,GAAa,OAAO,EAAG,CACnF,GAAI,CAAC5G,EACD,MAAO,GAEX,IAAIhyC,EAAO44C,EAAa,aAAa,EACrC,MAAO,CAAC,EAAG,GAAAzgC,EAAKnY,EAAKgyC,CAAQ,KAAO,MAAQ75B,IAAO,SAAkBA,EAAG,aAC5E,CACA,MAAO,EACX,EAaAuyE,EAAgB,UAAU,aAAe,SAAUpqE,EAAM,CACrD,KAAK,WAAWA,EAAM,EAAI,CAC9B,EAYAoqE,EAAgB,UAAU,QAAU,UAAY,CAC5C,IAAIhvD,EAAQ,KAAK,MACb6W,EAAQkG,GAAwB,KAAK,KAAK,EAC1C5gC,EAAK83B,EAAO4C,EAAO,CAAC,EAAGt1B,EAAOpF,EAAG,CAAC,EAAGqF,EAAOrF,EAAG,CAAC,EAAG4tB,EAAO5tB,EAAG,CAAC,EAAGu0C,EAAOv0C,EAAG,CAAC,EAC5E9M,EAAO2iD,GAAQnb,CAAK,EACpBy5B,EAActwC,EAAM,MAAOuwC,EAAevwC,EAAM,OAChDtuB,EAAQrC,EAAK,MAAOxB,EAASwB,EAAK,OAAQyG,EAAOzG,EAAK,KAAM0G,EAAM1G,EAAK,IACvE+gF,EAAW,CAACpwD,EAAM,KAAMA,EAAM,GAAG,EACjC4J,EAASxB,GAAKgoD,EAAUpwD,EAAM,MAAM,EACpCk1B,EAAe9sB,GAAKgoD,EAAUpwD,EAAM,YAAY,EAChD6X,EAAkB7X,EAAM,gBAC5B,MAAO,CACH,MAAOtuB,EACP,OAAQ7D,EACR,KAAMiI,EACN,IAAKC,EACL,KAAMwL,EACN,KAAMC,EACN,KAAMuoB,EACN,KAAM2mB,EACN,YAAa4f,EACb,aAAcC,EACd,aAAcrb,EACd,OAAQtrB,EACR,gBAAiBiO,EACjB,SAAU,KAAK,YAAY,CAC/B,CACJ,EAYAm3C,EAAgB,UAAU,WAAa,UAAY,CAC/C,OAAO,IACX,EAYAA,EAAgB,UAAU,SAAW,SAAUpqE,EAAM,CACjD,GAAI,CAACA,GAAQA,IAAS,SAAU,CAC5B,IAAIquD,EAAQ,KAAK,YACkCA,GAAM,OAAO,IAAO,IACnEJ,GAAW,KAAM,EAAK,EAEoBI,GAAM,KAAK,CAC7D,CACA,GAAI,CAACruD,GAAQA,IAAS,UAAW,CAC7B,IAAIquD,EAAQ,KAAK,aACkCA,GAAM,OAAO,IAAO,IACnEJ,GAAW,KAAM,EAAI,EAEqBI,GAAM,KAAK,CAC7D,CACJ,EACA+b,EAAgB,UAAU,YAAc,UAAY,CAChD,IAAI7yE,EAAK,KAAK,MAAOoF,EAAOpF,EAAG,KAAMqF,EAAOrF,EAAG,KAAMywB,EAAYzwB,EAAG,UACpE,OAAOw5D,GAAoBp0D,EAAMC,EAAMorB,CAAS,CACpD,EA8BAoiD,EAAgB,UAAU,QAAU,SAAU14C,EAAU1zC,EAAOytF,EAAW,CAClEztF,IAAU,SAAUA,EAAQ,CAAC,GACjC,IAAIi8B,EAAO,KACPv2B,EAAQu2B,EAAK,MACbgxD,EAAUvnF,EAAM,gBAAkBA,EAAM,iBAAmBu2B,EAC3DyxD,EAAWT,EAAQ,MAAM,MACzBzzC,EAAY9zC,EAAM,UAClBioF,EAAc,GAAKD,EAAU,SAAUn8C,EAAM,CAAE,OAAOA,EAAK,OAASmC,CAAU,CAAC,EACnF,GAAI,KAAK,WAAW,GAAK,CAACi6C,GAAe,CAACA,EAAY,QAClD,MAAO,CACH,QAAS,UAAY,CACjB,OAAO,IACX,EACA,WAAY,UAAY,CACpB,OAAO,IACX,CACJ,EAEJ,IAAIC,EAAgBD,EAAY,QAAQ1xD,CAAI,EACxC6rD,EAAiB2F,GAAaztF,EAAM,UACpCwpF,EAAWoE,EAAc,UAAY,eAAiB,cACtDhG,EAAa,GAAG,OAAQpuC,EAAY,QAAU,EAAG,EAAE,OAAOo0C,EAAc,UAAY,UAAY,EAAE,EAClGlG,EAAgB,EAAc,CAAC,EAAGr2C,EAAO47C,EAAQzD,CAAQ,CAAC,EAAG,EAAK,EAClEqE,EAAY,CACZ,QAAS,SAAUC,EAAW,CAC1B,OAAArG,GAAYxrD,EAAMyrD,EAAe,CAAC,MAAM,EAAGE,EAAY,GAAI,EAAS,EAAS,CAAC,EAAGgG,EAAc,QAAQE,CAAS,CAAC,EAAG,CAAE,YAAap6C,EAAU,UAAW,EAAK,CAAC,EAAGo0C,CAAc,EACxK+F,CACX,EACA,WAAY,UAAY,CACpB,OAAApG,GAAYxrD,EAAMyrD,EAAe,CAAC,MAAM,EAAGE,EAAY,MAAO,EAAS,EAAS,CAAC,EAAGgG,EAAc,WAAW,CAAC,EAAG,CAAE,YAAal6C,EAAU,UAAW,EAAK,CAAC,EAAGo0C,CAAc,EACrK+F,CACX,CACJ,EACA,OAAApG,GAAYxrD,EAAMyrD,EAAe,CAAC,MAAM,EAAGE,EAAY,QAAS,EAAS,EAAS,CAAC,EAAGgG,EAAc,aAAa5tF,CAAK,CAAC,EAAG,CAAE,YAAa0zC,EAAU,UAAW,EAAK,CAAC,EAAGo0C,CAAc,EAC9KA,EAAiB+F,EAAU,QAAQ7tF,CAAK,EAAE,WAAW,EAAI6tF,CACpE,EAQAzB,EAAgB,UAAU,aAAe,UAAY,CACjD,MAAO,CAAC,IAAI,CAChB,EAWAA,EAAgB,UAAU,QAAU,UAAY,CAC5C,KAAK,qBAAqB,CAC9B,EACAA,EAAgB,UAAU,kBAAoB,UAAY,CACtD,IAAIhvD,EAAQ,KAAK,SAAS,EACtB13B,EAAQ,KAAK,MACbqvE,EAAUrvE,EAAM,QAChBqoF,EAAuB3wD,EAAM,qBAAsB6X,EAAkB7X,EAAM,gBAAiByX,EAAYzX,EAAM,UAAW4W,EAAO5W,EAAM,KAAMze,EAAOye,EAAM,KAAMxe,EAAOwe,EAAM,KAAM+J,EAAO/J,EAAM,KAAM0wB,EAAO1wB,EAAM,KAAM4wD,EAAY5wD,EAAM,KAAM6wD,EAAW7wD,EAAM,IAAK8wD,EAAc9wD,EAAM,YAC1RnL,EAAOvsB,EAAM,MAAQ,EACzB,GAAI,CAACqvE,GAAW9iD,GAAQ,EAAG,CACvBmL,EAAM,YAAc,CAChBze,EACAC,EACAuoB,EACA2mB,CACJ,EACA1wB,EAAM,YAAc,CAChB,CAACze,EAAMC,CAAI,EACX,CAACA,EAAMkvC,CAAI,EACX,CAACA,EAAM3mB,CAAI,EACX,CAACA,EAAMxoB,CAAI,CACf,EACA,MACJ,CACA,IAAIpF,EAAKu7D,GAAcC,GAAW,CAAC,CAAC,EAAG7hE,EAAOqG,EAAG,KAAMpG,EAAMoG,EAAG,IAAKq0B,EAASr0B,EAAG,OAAQo0B,EAAQp0B,EAAG,MAChGoJ,EAAIqxB,EAAO,EAAI,EAYf2C,EAAiB,CAAC,EAClBu3C,EACAv3C,EAAiB1B,EAEZ,KAAK,YAAcvvC,EAAM,UAC9BixC,EAAiBo3C,EAGjBp3C,EAAiBnR,GAAKuoD,EAAsB,CAACC,EAAWC,CAAQ,CAAC,EAErE,IAAI90C,EAAa/T,GAAWziB,EAAGokB,GAAmB4P,EAAe,IAAI,SAAUpnC,EAAG,CAAE,MAAO,CAACA,CAAG,CAAC,EAAGoT,CAAC,EAAGkyB,EAAW9N,GAAmBkO,EAAiBtyB,CAAC,CAAC,EACpJk9C,EAAayR,GAAiBn4B,EAAYx6B,EAAM,CAAC,CAACzL,EAAM,CAACC,CAAG,EAAGwP,CAAC,EAChEm9C,EAAawR,GAAiBn4B,EAAYv6B,EAAM,CAAC+uB,EAAO,CAACx6B,CAAG,EAAGwP,CAAC,EAChEwrE,EAAa7c,GAAiBn4B,EAAYhS,EAAM,CAAC,CAACj0B,EAAM06B,CAAM,EAAGjrB,CAAC,EAClEyrE,EAAa9c,GAAiBn4B,EAAY2U,EAAM,CAACngB,EAAOC,CAAM,EAAGjrB,CAAC,EAatE,GAZAya,EAAM,YAAc,CAChByiC,EACAC,EACAquB,EACAC,CACJ,EACAhxD,EAAM,YAAc,CAChB,CAACyiC,EAAYC,CAAU,EACvB,CAACA,EAAYsuB,CAAU,EACvB,CAACA,EAAYD,CAAU,EACvB,CAACA,EAAYtuB,CAAU,CAC3B,EACI5tC,EAAM,CACN,IAAIo8D,EAAap8D,EAAO,EACxBmL,EAAM,YAAc,CAChB,CACIk0C,GAAiBn4B,EAAYx6B,EAAM,CAAC,CAACzL,EAAOm7E,EAAY,CAACl7E,CAAG,EAAGwP,CAAC,EAChE2uD,GAAiBn4B,EAAYv6B,EAAM,CAAC+uB,EAAQ0gD,EAAY,CAACl7E,CAAG,EAAGwP,CAAC,CACpE,EACA,CACI2uD,GAAiBn4B,EAAYv6B,EAAM,CAAC+uB,EAAO,CAACx6B,EAAMk7E,CAAU,EAAG1rE,CAAC,EAChE2uD,GAAiBn4B,EAAY2U,EAAM,CAACngB,EAAOC,EAASygD,CAAU,EAAG1rE,CAAC,CACtE,EACA,CACI2uD,GAAiBn4B,EAAY2U,EAAM,CAACngB,EAAQ0gD,EAAYzgD,CAAM,EAAGjrB,CAAC,EAClE2uD,GAAiBn4B,EAAYhS,EAAM,CAAC,CAACj0B,EAAOm7E,EAAYzgD,CAAM,EAAGjrB,CAAC,CACtE,EACA,CACI2uD,GAAiBn4B,EAAYhS,EAAM,CAAC,CAACj0B,EAAM06B,EAASygD,CAAU,EAAG1rE,CAAC,EAClE2uD,GAAiBn4B,EAAYx6B,EAAM,CAAC,CAACzL,EAAM,CAACC,EAAMk7E,CAAU,EAAG1rE,CAAC,CACpE,CACJ,CACJ,CACJ,EACAypE,EAAgB,UAAU,YAAc,UAAY,CAChD,KAAK,qBAAuB,GAC5B,IAAI7yE,EAAK,KAAK,MAAOzO,EAASyO,EAAG,OAAQsM,EAAYtM,EAAG,UAAW85C,EAAiB95C,EAAG,eACnFM,EAAK,KAAK,MAAO6yE,EAAc7yE,EAAG,OAAQy0E,EAAiBz0E,EAAG,UAClE,GAAI,GAAC6yE,GAAe,CAAC5hF,GAGrB,MAAK,YAAY,EACjB,IAAIyjF,EAAkB,CAACvd,GAAO0b,EAAa5hF,CAAM,EAC7C0jF,EAAYD,GAAmB,CAACvd,GAAOsd,EAAgBzoE,CAAS,EACpE,GAAK2oE,EAGL,KAAIC,EAAoB5oE,GAAa,KAAK,WACtC4oE,GACA,KAAK,WAAW,EAEpB,KAAK,YAAY,CAAE,OAAQ3jF,EAAQ,UAAW+a,CAAU,CAAC,EACrD,CAACwtC,GAAkBo7B,GACnB,KAAK,WAAW,MAAO,GAAO,EAAK,EAEvC,KAAK,qBAAuBF,GAChC,EACAnC,EAAgB,UAAU,mBAAqB,UAAY,CACvD,OAAO,IAAI,QAAQ,UAAY,CAAE,CAAC,CACtC,EACAA,EAAgB,UAAU,aAAe,SAAU3qF,EAAMtB,EAAG,CACxD,IAAIuF,EAAQ,KAAK,MAEjB,GADA,KAAK,SAAS,QAAQjE,EAAMtB,CAAC,EACzBuF,EAAM,gBAAkBvF,EAAE,WAAa,CAACA,EAAE,eAC1C,OAAOuF,EAAM,eAAe,aAAajE,EAAMtB,EAAG,EAAI,EAE1D,IAAI4b,EAAWrW,EAAMjE,CAAI,EACzB,OAAOsa,GAAYA,EAAS5b,CAAC,CACjC,EACAisF,EAAgB,UAAU,OAAS,SAAUx7C,EAAKxhC,EAAK,CACnD,IAAIs/E,EAAiB,KAAK,MAAM,gBAC5B5uF,EAAM8wC,EAAMxhC,EAChB,OAAKs/E,EAAe5uF,CAAG,IACnB4uF,EAAe5uF,CAAG,EAAI,GAAO8wC,EAAKxhC,CAAG,GAElCs/E,EAAe5uF,CAAG,CAC7B,EACAssF,EAAgB,UAAU,SAAW,UAAY,CAC7C,IAAI7yE,EACA7T,EAAQ,KAAK,OACbA,EAAM,QAAY,GAAA6T,EAAK7T,EAAM,WAAa,MAAQ6T,IAAO,SAAkBA,EAAG,UAC9E,KAAK,gBAAkB,IAE3B,IAAIo1E,EAAgB,KAAK,WACrBC,EAAclpF,EAAM,YACpBmpF,EAAmBnpF,EAAM,iBAC7B,GAAImpF,GAAoB,CAACF,EACrB,OAAOE,EAEX,GAAI,CAAC,KAAK,iBAAmBD,EAAa,CACtC,IAAIrB,EAAepB,GAAgByC,CAAW,EAC9C,GAAIrB,EACA,YAAK,YAAYA,EAAc,EAAK,EAC7B,KAAK,KAEpB,CACA,YAAK,MAAM,YAAc,GAClB,KAAK,KAChB,EACAnB,EAAgB,UAAU,gBAAkB,UAAY,CAAE,EAC1DA,EAAgB,UAAU,WAAa,UAAY,CAC/C,IAAInpE,EAAQ,KACZ,KAAK,YAAY,QAAQ,SAAUsuB,EAAM,CACjCA,EAAK,OACLA,EAAK,MAAMtuB,CAAK,CAExB,CAAC,CACL,EACAmpE,EAAgB,UAAU,YAAc,SAAU/xB,EAAOutB,EAAY,CAC7DvtB,IAAU,SAAUA,EAAQ,KAAK,MAAM,OACvCutB,IAAe,SAAUA,EAAa,IAC1C,IAAIliF,EAAQ,KAAK,MACbmrE,EAA6BnrE,EAAM,2BACnCorE,EAAe,KAAK,gBAAgBzW,CAAK,EACzCkB,EAAY,OAAO,OAAOqsB,EAAY,OAAO,EAC7CkH,EAAa,QAAQ,OAAOlH,EAAY,OAAO,EAC/CmH,EAAmB,OAAO,OAAOnH,EAAY,cAAc,EAC3DoH,EAAcpe,GAAYE,EAAc,CAACvV,EAAWuzB,CAAU,EAAGje,CAA0B,EAC3Foe,EAAere,GAAYE,EAAc,CAACie,CAAgB,EAAGle,CAA0B,EAC3F,KAAK,aAAeC,EACpB,KAAK,YAAcke,EACnB,KAAK,aAAeC,CACxB,EACA7C,EAAgB,UAAU,YAAc,SAAUrwD,EAAWsxD,EAAY,CACrE,GAAIA,EAAY,CACZ,GAAI,KAAK,YACL,OAEJ,KAAK,SAAStxD,CAAS,CAC3B,KACK,CACD,IAAIqB,EAAQ,KAAK,MACjB,QAASsB,KAAU3C,EACfqB,EAAMsB,CAAM,EAAI3C,EAAU2C,CAAM,CAExC,CACJ,EACA0tD,EAAgB,UAAU,gBAAkB,SAAU/xB,EAAO,CACrDA,IAAU,SAAUA,EAAQ,KAAK,MAAM,OAC3C,IAAI30D,EAAQ,KAAK,MACjB,OAAO20D,EAAM,OAAO,SAAU9oB,EAAM,CAAE,OAAOA,IAAUA,EAAK,QAAU7rC,EAAM6rC,EAAK,IAAI,IAAM,IACpF7rC,EAAM6rC,EAAK,IAAI,EAAI,CAAC,CAC/B,EACA66C,EAAgB,UAAU,YAAc,UAAY,CAChD,IAAInpE,EAAQ,KACRvd,EAAQ,KAAK,MACbmrE,EAA6BnrE,EAAM,2BACnCwpF,EAAW,CACX,cAAe,EACnB,EACA,YAAK,YAAc,CAAC,EACb7d,GAAW,GAAKT,GAAY,KAAK,gBAAgB,EAAG,CAAC,QAAQ,EAAGC,CAA0B,EAAE,IAAI,SAAUt3D,EAAI,CACjH,IAAIooB,EAASpoB,EAAG,OAChB,OAAOooB,EAAO1e,EAAOisE,CAAQ,GAAK,CAAC,CACvC,CAAC,CAAC,EAAE,OAAO,SAAUntE,EAAI,CAAE,OAAOA,CAAI,CAAC,EAAG,SAAUxI,EAAI,CACpD,IAAIzZ,EAAMyZ,EAAG,IACb,OAAOzZ,CACX,CAAC,EAAE,IAAI,SAAUsxE,EAAO,CAAE,OAAOA,EAAM,CAAC,CAAG,CAAC,CAChD,EACAgb,EAAgB,UAAU,iBAAmB,UAAY,CACrD,KAAK,cAAgB,KAAK,YAAY,QAAQ,WAAa,KAAK,MAAM,WAC1E,EACAA,EAAgB,UAAU,kBAAoB,UAAY,CACtD,IAAI+C,EAAa,KAAK,gBAAgB,EAAE,OAAO,SAAU14D,EAAO8a,EAAM,CAClE,IAAIh4B,EAAIM,EACJu1E,GAAmBv1E,GAAMN,EAAKg4B,EAAK,gBAAkB,MAAQh4B,IAAO,OAAS,OAASA,EAAG,KAAKg4B,CAAI,KAAO,MAAQ13B,IAAO,OAASA,EAAK,CAAC,EAC3I,OAAO,EAAc,EAAc,CAAC,EAAGw3B,EAAO5a,CAAK,EAAG,EAAK,EAAG4a,EAAO+9C,CAAc,EAAG,EAAK,CAC/F,EAAG,EAAc,CAAC,EAAG/9C,EAAQ,KAAK,MAAM,eAAiB,CAAC,CAAE,EAAG,EAAK,CAAC,EACrE,OAAO89C,CACX,EACA/C,EAAgB,UAAU,gBAAkB,SAAUxvD,EAAW,CAC7D,KAAK,sBAAsBA,CAAS,EACpC,KAAK,wBAAwBA,CAAS,CAC1C,EACAwvD,EAAgB,UAAU,cAAgB,UAAY,CAClD,IAAIiD,EAAgB,KAAK,YAAY,OACjCC,EAAiB,KAAK,aAAa,OACnCxkF,EAAS,KAAK,YACdykF,EAAW,CAACF,GAAiB,KAAK,aAC/B,KAAK,iBAAiB,EAAI,EAC7BE,IACApf,GAAW,KAAM,EAAK,EACtB,KAAK,YAAY,CAAE,OAAQ,CAAC,CAAE,CAAC,GAE9Bmf,GACDnf,GAAW,KAAM,EAAI,EAErBrlE,GAAUukF,GAAiB,CAAC,KAAK,cACjC,KAAK,YAAcrG,GAAmB,KAAMl+E,EAAQ,EAAE,GAEtD,CAAC,KAAK,cAAgBwkF,IACtB,KAAK,aAAehG,GAAoB,KAAM,SAAS,EAE/D,EACA8C,EAAgB,UAAU,eAAiB,UAAY,CACnD,IAAI1mF,EAAQ,KAAK,MACjB,KAAK,gBAAkB,KAAK,YAC5B,KAAK,gBAAkB,KAAK,YAC5B,KAAK,wBAA0B,KAAK,oBACpC,KAAK,cAAgBA,EAAM,SAC3B,KAAK,YAAcA,EAAM,OACzB,KAAK,oBAAsBA,EAAM,YAAcA,EAAM,OACrD,KAAK,YAAcq+D,GAAa,KAAK,oBAAqB,EAAI,CAClE,EACAqoB,EAAgB,UAAU,aAAe,UAAY,CACjD,IAAI1mF,EAAQ,KAAK,MACb6T,EAAK7T,EAAOusB,EAAO1Y,EAAG,KAAMi2E,EAAmBj2E,EAAG,iBAAkBk2E,EAAgCl2E,EAAG,8BAA+B85C,EAAiB95C,EAAG,eAC9J,GAAIi2E,GAAqBn8B,GAAkBo8B,EACvC,MAAO,CAAC,EAEZ,IAAIryD,EAAQ,KAAK,SAAS,EACtB8xD,EAAW,CACX,cAAe,EACnB,EACA,OAAO9xD,EAAM,YAAY,IAAI,SAAU+O,EAAMr1B,EAAG,CAC5C,OAAO0pC,GAAW0uC,EAAU,GAAI/iD,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGla,EAAM,eAAe,OAAOnb,CAAC,CAAC,CACpF,CAAC,CACL,EACAs1E,EAAgB,UAAU,iBAAmB,SAAUsD,EAAa,CAChE,IAAIhqF,EAAQ,KAAK,MACbiqF,EAAajqF,EAAM,YAAcA,EAAM,OACvCkqF,EAAa,KAAK,wBAClBC,EAAe,KAAK,cACpBhX,EAAWnzE,EAAM,SAEjBoqF,EAAsB,CAACjX,GAAY+W,IAAeD,EAClDI,GAAqBL,GAAe7W,IAAagX,IAAiBhX,EACtE,OAAOiX,GAAuBC,GAAqB,KAAK,iBAAmB,KAAK,WACpF,EACA3D,EAAgB,UAAU,oBAAsB,UAAY,CACxD,IAAInpE,EAAQ,KACRvd,EAAQ,KAAK,MACboF,EAASpF,EAAM,SAAW,KAAK,YAAc,KAAK,MAAM,OACxDsd,EAAS,KAAK,OACdgtE,EAAYtzE,GAAQsG,CAAM,EAC9B,GAAI,KAAK,iBAAiB,EACtB,QAASD,KAAaC,EAAQ,CAC1B,IAAIiqE,EAAUjqE,EAAOD,CAAS,EAC9BkqE,GAAWA,EAAQ,QAAQ,EAC3BjqE,EAAOD,CAAS,EAAI,IACxB,CAEJ,GAAKjY,EAGL,KAAIgmE,EAAe,KAAK,aACxBkf,EAAU,QAAQ,SAAUjtE,EAAW,CACnC,IAAIs3C,EAAQuW,GAAYE,EAAc,CAAC/tD,CAAS,CAAC,EAC7CktE,EAAW51B,EAAM,OAAS,EAC1B4yB,EAAUjqE,EAAOD,CAAS,EAC9B,GAAI,CAACktE,EAAU,CACPhD,IACAA,EAAQ,QAAQ,EAChBjqE,EAAOD,CAAS,EAAI,MAExB,MACJ,CACKkqE,IACDA,EAAU,IAAIlD,GAAaj/E,EAAQmY,EAAOF,CAAS,EACnDC,EAAOD,CAAS,EAAIkqE,GAExBA,EAAQ,SAAS5yB,CAAK,CAC1B,CAAC,EACL,EACA+xB,EAAgB,UAAU,0BAA4B,UAAY,CAC9D,IAAInC,EAAgB,KAAK,MAAM,cAC3B,CAAC,KAAK,gBAAkBA,IACxB,KAAK,eAAiBlmB,GAAakmB,EAAe,EAAI,EAE9D,EACAmC,EAAgB,UAAU,0BAA4B,UAAY,CAC9D,IAAI8D,EAAsB,KAAK,MAAM,cACjC,CAAC,KAAK,gBAAkBA,IACxB,KAAK,eAAiBnsB,GAAamsB,EAAqB,EAAI,GAEhE,IAAIlD,EAAgB,KAAK,eACrBA,GACA,KAAK,0BAA0B,EAAc,EAAc,CAAC,EAAG37C,EAAO,KAAK,uBAAuB,CAAC,EAAG,EAAK,EAAG,CAC1G,KAAK,WAAW,EAAIonC,GAAgB,EACxC,EAAG,EAAK,CAAC,CAEjB,EACA2T,EAAgB,UAAU,0BAA4B,SAAU7jE,EAAY,CACxE,IAAIykE,EAAgB,KAAK,eACrBmD,EAAiBpxB,GAAQx2C,EAAW,OAAO,OAAO,EAAG,SAAUxG,EAAI,CAAE,OAAOA,CAAI,CAAC,EAAE,IAAI,SAAUxI,EAAI,CACrG,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAG+H,EAAYzH,EAAG,CAAC,EACxC,OAAOyH,CACX,CAAC,EACG8uE,EAAiB,KAAK,gBACtB72E,EAAKigB,GAAO42D,EAAgBD,CAAc,EAAGl3D,EAAU1f,EAAG,QAASyf,EAAQzf,EAAG,MAClF0f,EAAQ,QAAQ,SAAU3nB,EAAO,CAC7BkQ,GAAYwrE,EAAeoD,EAAe9+E,CAAK,CAAC,CACpD,CAAC,EACD0nB,EAAM,QAAQ,SAAU1nB,EAAO,CAC3BiQ,GAASyrE,EAAemD,EAAe7+E,CAAK,CAAC,CACjD,CAAC,EACD,KAAK,gBAAkB6+E,CAC3B,EACA/D,EAAgB,UAAU,uBAAyB,UAAY,CAC3D,IAAInpE,EAAQ,KACZ,OAAQ,KAAK,gBAAgB,EAAE,IAAI,SAAUsuB,EAAM,CAC/C,IAAIh4B,EACJ,QAAUA,EAAKg4B,EAAK,iBAAmB,MAAQh4B,IAAO,OAAS,OAASA,EAAG,KAAKg4B,EAAMtuB,CAAK,IAAM,EACrG,CAAC,EAAE,KAAK,GAAG,EAAI,IAAI,OAAO,KAAK,kBAAkB,OAAO,CAAC,GAAG,MAAM,MAAM,CAC5E,EACAmpE,EAAgB,UAAU,kBAAoB,SAAUiE,EAAa,CACjE,IAAIptE,EAAQ,KACRotE,IAAgB,SAAUA,EAAc,IAC5C,IAAIh2B,EAAQ,KAAK,gBAAgB,EAC7BhgB,EAAc,KAAK,YACnBC,EAAe,KAAK,aACpBg2C,EAA6Ej2C,GAAY,OAAO,EAC9FA,EAAY,aAAa,EAAI,CAAC,EAChCk2C,EAAgFj2C,GAAa,OAAO,EAClGA,EAAa,aAAa,EAAI,CAAC,EACrC,OAAO+f,EAAM,IAAI,SAAU9oB,EAAM,CAC7B,IAAIh4B,EAAIM,EAAIG,EACRvY,EAAO8vC,EAAK,KACZjwB,IAAc/H,EAAKg4B,EAAK,aAAe,MAAQh4B,IAAO,OAAS,OAASA,EAAG,KAAKg4B,EAAMtuB,CAAK,IAAM,GACrG,OAAM,GAAApJ,EAAKy2E,EAAgB7uF,CAAI,KAAO,MAAQoY,IAAO,SAAkBA,EAAG,cACjE,GAAAG,EAAKu2E,EAAiB9uF,CAAI,KAAO,MAAQuY,IAAO,SAAkBA,EAAG,gBAC1EsH,GAAa,IAAI,OAAOlG,GAAO,GAAG,OAAO3Z,CAAI,EAAE,OAAO4uF,EAAa,WAAW,CAAC,CAAC,GAE7E/uE,EAAU,KAAK,CAC1B,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAC/B,EACA8qE,EAAgB,UAAU,sBAAwB,SAAUxvD,EAAW,CACnE,IAAIrjB,EACA7T,EAAQ,KAAK,MACboF,EAASpF,EAAM,OACf0iB,EAAMvG,GAAU,KAAK,qBAAqB,CAAC,EAC/C,GAAI,CAACuG,EAAI,gBAAkB,CAACtd,GAAU,CAACpF,EAAM,kBAAmB,EAC3D6T,EAAK,KAAK,mBAAqB,MAAQA,IAAO,QAAkBA,EAAG,WAAW,EAC/E,MACJ,CACA,GAAI,EAAAqjB,EAAU,SAAW9xB,GAAU,KAAK,iBAGxC,KAAI0lF,EAAW,IAAIpoE,EAAI,eAAe,KAAK,eAAe,EAC1DooE,EAAS,QAAQ1lF,EAAQ,CACrB,IAAK,YACT,CAAC,EACD,KAAK,gBAAkB0lF,EAC3B,EACApE,EAAgB,UAAU,wBAA0B,SAAUxvD,EAAW,CACrE,IAAI3Z,EAAQ,KACR1J,EACA7T,EAAQ,KAAK,MACboF,EAASpF,EAAM,OACf0iB,EAAMvG,GAAU,KAAK,qBAAqB,CAAC,EAC/C,GAAI,CAACuG,EAAI,kBAAoB,CAACtd,GAAU,CAACpF,EAAM,oBAAqB,EAC/D6T,EAAK,KAAK,qBAAuB,MAAQA,IAAO,QAAkBA,EAAG,WAAW,EACjF,MACJ,CACA,GAAI,EAAAqjB,EAAU,SAAW9xB,GAAU,KAAK,mBAGxC,KAAI0lF,EAAW,IAAIpoE,EAAI,iBAAiB,SAAUqoE,EAAS,CACvD,IAAIC,EAAKn3E,EACT,GAAI,CACA,QAASo3E,EAAYx/C,GAASs/C,CAAO,EAAGG,EAAcD,EAAU,KAAK,EAAG,CAACC,EAAY,KAAMA,EAAcD,EAAU,KAAK,EAAG,CACvH,IAAIE,EAAWD,EAAY,MACvBC,EAAS,OAAS,cAAgBA,EAAS,gBAAkB,SAC7D5tE,EAAM,gBAAgB,CAE9B,CACJ,OACO6tE,EAAO,CAAEJ,EAAM,CAAE,MAAOI,CAAM,CAAG,QACxC,CACI,GAAI,CACIF,GAAe,CAACA,EAAY,OAASr3E,EAAKo3E,EAAU,SAASp3E,EAAG,KAAKo3E,CAAS,CACtF,QACA,CAAU,GAAID,EAAK,MAAMA,EAAI,KAAO,CACxC,CACJ,CAAC,EACDF,EAAS,QAAQ1lF,EAAQ,CACrB,WAAY,EAChB,CAAC,EACD,KAAK,kBAAoB0lF,EAC7B,EACApE,EAAgB,aAAe,CAC3B,eAAgB,GAChB,OAAQ,KACR,WAAY,KACZ,UAAW,KACX,cAAe,KACf,OAAQ,GACR,eAAgB,KAChB,gBAAiB,KACjB,iBAAkB,GAClB,eAAgB,KAChB,SAAU,GACV,UAAW,GACX,cAAe,KACf,kBAAmB,GACnB,oBAAqB,GACrB,eAAgB,GAChB,kBAAmB,GACnB,kBAAmB,GACnB,YAAa,EACb,eAAgB,EAChB,MAAO,CAAC,EACR,eAAgB,GAChB,SAAU,GACV,aAAc,GACd,gBAAiB,GACjB,UAAW,GACX,KAAM,EACN,2BAA4B,GAC5B,QAAS,CAAC,EACV,aAAc,GACd,WAAY,GACZ,iBAAkB,GAClB,UAAW,GACX,iBAAkB,GAClB,SAAU,GACV,WAAY,EACZ,UAAW,KACX,gBAAiB,CAAC,EAClB,MAAO,CAAC,EACR,gBAAiB,GACjB,oBAAqB,GACrB,wBAAyB,GACzB,UAAW5iB,GACX,iBAAkB,KAClB,YAAa,KACb,cAAe,KACf,cAAe,CAAC,EAChB,oBAAqB,EACzB,EACO4iB,CACX,EAAE,EAAmB,EA0JjB2E,GAAY,CACZ,KAAM,YACN,MAAO,CACH,qBACA,wBACA,qBACA,YACA,iBACA,eACA,+BACJ,EACA,OAAQ,CAAC,EACT,OAAQ,SAAUx8C,EAAU+K,EAAO,CAC/B,IAAI/lC,EACA7T,EAAQ6uC,EAAS,MACjB7uB,EAAUhgB,EAAM,SAAW,CAAC,EAC5BmU,EAAK06B,EAAS,SAAS,EAAGrhC,EAAO2G,EAAG,KAAM1G,EAAM0G,EAAG,IAAKq0E,EAAcr0E,EAAG,YACzEoY,EAAOvsB,EAAM,MAAQ,EACrBsrF,EAAmBz8C,EAAS,iBAC5B08C,IAAuB13E,EAAK7T,EAAM,eAAiB,MAAQ6T,IAAO,OAAS,OAASA,EAAG,WAAa,CAAC,EACrG20E,EACAxoE,EAAUurE,EAAmB,IAAI,UAAY,CAAE,OAAO,IAAM,CAAC,EAG7DA,EAAqB,CAAC,EAE1B,IAAI5E,EAAiB1jB,GAAWp0B,EAAU,iBAAkB,CAACrhC,EAAMC,CAAG,EAAG,SAAU5O,EAAQ,CAAE,OAAOA,EAAO,KAAK,GAAG,CAAG,CAAC,EACnHgnF,EAAgB5iB,GAAWp0B,EAAU,gBAAiBA,EAAS,sBAAsB,EAAG,SAAUhwC,EAAQ,CAAE,OAAOA,EAAO,KAAK,GAAG,CAAG,CAAC,EAC1I,OAAAgwC,EAAS,UAAYA,EAAS,UAAU,MAAM,EAAG7uB,EAAQ,MAAM,EACxD,EAAc,EAAc,CAAC,EAAG2rB,EAAO3rB,EAAQ,IAAI,SAAU5a,EAAQgM,EAAG,CAC3E,OAAOwoC,EAAM,cAAc8sC,GAAiB,CAAE,IAAK,WAAat1E,EAAG,IAAK4R,GAAK6rB,EAAU,YAAaz9B,CAAC,EAAG,OAAQhM,EAAQ,OAAQ,GAAO,cAAeygF,EAAe,UAAW7lF,EAAM,UAAW,gBAAiBA,EAAM,gBAAiB,kBAAmBA,EAAM,kBAAmB,oBAAqBA,EAAM,oBAAqB,8BAA+BA,EAAM,8BAA+B,eAAgB6uC,EAAU,eAAgB,CAACrhC,EAAMC,CAAG,EAAG,YAAa89E,EAAmBn6E,CAAC,EAAG,KAAMmb,CAAK,CAAC,CACpf,CAAC,CAAC,EAAG,EAAK,EAAGof,EAAO,GAAK2/C,EAAiB,IAAI,SAAUz3E,EAAIzC,EAAG,CAC3D,IAAI6H,EAAOpF,EAAG,KAAMqF,EAAOrF,EAAG,KAAM4tB,EAAO5tB,EAAG,KAAMu0C,EAAOv0C,EAAG,KAC1D06B,EAAQ,CAACt1B,EAAMC,EAAMuoB,EAAM2mB,CAAI,EACnC,MAAO,CACH,CAAC,EAAG,CAAC,EACL,CAAC,EAAG,CAAC,EACL,CAAC,EAAG,CAAC,EACL,CAAC,EAAG,CAAC,CACT,EAAE,IAAI,SAAUv0C,EAAI1B,EAAG,CACnB,IAAIgC,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGgU,EAAO1T,EAAG,CAAC,EAAGyT,EAAKzT,EAAG,CAAC,EAC/C,OAAO2mC,GAAWlB,EAAO,GAAI5Z,GAAMuO,EAAM1mB,CAAI,EAAG8+D,CAAc,EAAG3mD,GAAMuO,EAAM3mB,CAAE,EAAG++D,CAAc,EAAGp6D,EAAM,cAAc,OAAOnb,EAAG,GAAG,EAAE,OAAOe,CAAC,CAAC,CACnJ,CAAC,CACL,CAAC,CAAC,CAAC,EAAG,EAAK,CACf,CACJ,EAEIq5E,GAAY5/C,GAAS,YAAa,CAClC,MAAO,CACH,WACJ,EACA,OAAQ,CACJ,QACA,YACJ,EACA,OAAQ,GACR,aAAc,OAEd,UAAW,UAAY,CAEvB,EACA,iBAAkB,UAAY,CAE9B,EACA,eAAgB,SAAUiD,EAAU,EAAG,CACnC,EAAE,MAAM,YAAc,EAAE,YAAc,EAAE,WAAW,MACvD,EACA,QAAS,SAAUA,EAAU,EAAG,CAC5B,IAAIzpC,EAASypC,EAAS,MAAM,OACxB7sB,EAAa,EAAE,WACfozC,EAAc,EAAE,YAChBq2B,EAAoB58C,EAAS,kBAAkBumB,CAAW,EAC1Ds2B,EAAkB,CAACD,GAAqB58C,EAAS,WAAW,SAASumB,CAAW,EACpF,GAAI,GAACpzC,GAAc,CAACozC,GAAe,EAAE,QAC9BvmB,EAAS,kBAAkBumB,CAAW,GACtCs2B,GAKP,KAAIC,EAAiBvmF,EAAO,SAASgwD,CAAW,EAChDlI,GAAare,EAAU,UAAWoe,GAAWpe,EAAU,EAAG,CACtD,SAAU,EAAE,SACZ,YAAaumB,EACb,SAAUhwD,IAAWgwD,EACrB,eAAgBvmB,EAAS,MAAM,OAC/B,eAAgB88C,CACpB,CAAC,CAAC,EACN,EACA,aAAc,SAAU98C,EAAU,EAAG,CACjC,IAAI7sB,EAAa,EAAE,WACfozC,EAAc,EAAE,YACpB,GAAI,GAACpzC,GAAc,CAACozC,GAAe,EAAE,QAC9BvmB,EAAS,kBAAkBumB,CAAW,GAEtC,EAAE,MAAM,cAAgBA,GAG/B,KAAIp1C,EAAU6uB,EAAS,MAAM,QACzB3P,EAAclf,EAAQ,QAAQo1C,CAAW,EACzCsyB,EAAWxoD,EAAc,GACzBysD,EAAiB,GACjBzsD,IAAgB,KAChBA,EAAc/oB,GAAU6J,EAAS,SAAU4rE,EAAc,CAAE,OAAOA,EAAa,SAASx2B,CAAW,CAAG,CAAC,EACvGu2B,EAAiBzsD,EAAc,IAEnCguB,GAAare,EAAU,eAAgBoe,GAAWpe,EAAU,EAAG,CAC3D,SAAU,EAAE,SACZ,QAAS7uB,EACT,YAAao1C,EACb,YAAal2B,EACb,SAAUwoD,EACV,eAAgBiE,EAChB,eAAgB3rE,EAAQkf,CAAW,CACvC,CAAC,CAAC,EACN,EACA,eAAgB,SAAU2P,EAAU,EAAG,CACnC,KAAK,QAAQA,EAAU,CAAC,CAC5B,EACA,oBAAqB,SAAUA,EAAU,EAAG,CACxC,KAAK,QAAQA,EAAU,CAAC,CAC5B,CACJ,CAAC,EAkCD,SAASg9C,GAAkBpxF,EAAG,CAC1B,IAAIyuB,EAAQzuB,EAAE,cAAc,UAC5B,OAAKyuB,IACDzuB,EAAE,cAAc,UAAY,CAAC,EAC7ByuB,EAAQzuB,EAAE,cAAc,WAErB,EAAS,EAAS,CAAC,EAAGA,CAAC,EAAG,CAAE,MAAOyuB,CAAM,CAAC,CACrD,CACA,IAAI4iE,GAAgBlgD,GAAS,gBAAiB,CAC1C,IAAK,CACD;AAAA;AAAA,EACJ,EACA,OAAQ,SAAUiD,EAAU+K,EAAO,CAC/B,IAAI55C,EAAQ6uC,EAAS,MACjBmM,EAAOh7C,EAAM,cACjB,OAAKg7C,EAGED,GAAgBnB,EAAO,gBAAiBoB,EAAMnM,EAAS,SAAS,EAAE,YAAa7uC,EAAM,IAAI,EAFrF,CAAC,CAGhB,EACA,cAAe,SAAU6uC,EAAU,EAAG,CAClC,IAAIh7B,EACA7T,EAAQ6uC,EAAS,MACjBzpC,GAAUyO,EAAK,EAAE,cAAgB,MAAQA,IAAO,OAAS,OAASA,EAAG,OACzE,MAAI,CAAC7T,EAAM,eAAiB,CAACoF,EAClB,GAEJ,CAACpF,EAAM,WACP2b,GAASvW,EAAQsQ,GAAO,WAAW,CAAC,GACpCiG,GAASvW,EAAQsQ,GAAO,MAAM,CAAC,GAC/BiG,GAASvW,EAAQsQ,GAAO,eAAe,CAAC,CACnD,EACA,UAAW,SAAUm5B,EAAU,EAAG,CAC9B,OAAOwE,GAAU,UAAUxE,EAAUg9C,GAAkB,CAAC,CAAC,CAC7D,EACA,KAAM,SAAUh9C,EAAU,EAAG,CACzB,OAAOwE,GAAU,KAAKxE,EAAUg9C,GAAkB,CAAC,CAAC,CACxD,EACA,QAAS,SAAUh9C,EAAU,EAAG,CAC5B,OAAOwE,GAAU,QAAQxE,EAAUg9C,GAAkB,CAAC,CAAC,CAC3D,EACA,mBAAoB,SAAUh9C,EAAU,EAAG,CACvC,IAAIh7B,EACA7T,EAAQ6uC,EAAS,MACjBzpC,GAAUyO,EAAK,EAAE,cAAgB,MAAQA,IAAO,OAAS,OAASA,EAAG,OACzE,MAAI,CAAC7T,EAAM,eAAiB,CAACoF,EAClB,GAEJ,CAACpF,EAAM,WAAa2b,GAASvW,EAAQsQ,GAAO,WAAW,CAAC,GAAKiG,GAASvW,EAAQsQ,GAAO,MAAM,CAAC,CACvG,EACA,eAAgB,SAAUm5B,EAAU,EAAG,CACnC,OAAOwE,GAAU,eAAexE,EAAUg9C,GAAkB,CAAC,CAAC,CAClE,EACA,UAAW,SAAUh9C,EAAU,EAAG,CAC9B,OAAOwE,GAAU,UAAUxE,EAAUg9C,GAAkB,CAAC,CAAC,CAC7D,EACA,aAAc,SAAUh9C,EAAU,EAAG,CACjC,OAAOwE,GAAU,aAAaxE,EAAUg9C,GAAkB,CAAC,CAAC,CAChE,EACA,MAAO,SAAUh9C,EAAU,CACvB,OAAOwE,GAAU,MAAMxE,CAAQ,CACnC,CACJ,CAAC,EAeGk9C,GAAsB,CACtB,KAAM,sBACN,MAAO,CACH,sBACA,0BACJ,EACA,OAAQ,CAAC,CACb,EAEIC,GAAkB,CAClBxK,GACAxN,GAASnR,GAAWyM,GACpBj8B,GAAWy4C,GACXh9B,GAAW+gB,GAAU0B,GAAUjd,GAC/Bof,GAAYO,GAASV,GACrB0L,GACAlD,GAAWoE,GAAWkL,GAAWU,GACjCP,GACAtY,GACA0O,EACJ,EACIqK,GAAgCD,GAAe,OAAO,SAAUthF,EAASmhC,EAAM,CAC/E,OAACA,EAAK,QAAU,CAAC,GAAG,QAAQ,SAAU9vC,EAAM,CACxC,GAAQ2O,EAAS3O,CAAI,CACzB,CAAC,EACM2O,CACX,EAAG,CAAC,CAAC,EACDwhF,GAA+BF,GAAe,OAAO,SAAUthF,EAASmhC,EAAM,CAC9E,OAACA,EAAK,OAAS,CAAC,GAAG,QAAQ,SAAU9vC,EAAM,CACvC,GAAQ2O,EAAS3O,CAAI,CACzB,CAAC,EACM2O,CACX,EAAG,CAAC,CAAC,EAEL,SAASyhF,GAAuBt4E,EAAIhC,EAAK,CACrC,IAAIsC,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGnZ,EAAIyZ,EAAG,CAAC,EAAGxZ,EAAIwZ,EAAG,CAAC,EAAGxI,EAAIwI,EAAG,CAAC,EACtD,OAAQzZ,EAAImX,EAAI,CAAC,EAAIlX,EAAIkX,EAAI,CAAC,EAAIlG,GAAK,KAAK,KAAKjR,EAAIA,EAAIC,EAAIA,CAAC,CAClE,CACA,SAASyxF,GAAOv4E,EAAIhC,EAAK,CACrB,IAAIsC,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGnZ,EAAIyZ,EAAG,CAAC,EAAGxZ,EAAIwZ,EAAG,CAAC,EAG3C,MAAO,CAACzZ,EAAImX,EAAI,CAAC,EAAIlX,EAAIkX,EAAI,CAAC,CAClC,CAEA,SAASw6E,GAAU99C,EAAO3iC,EAAO,CAC7B,OAAO,KAAK,IAAI,MAAM,KAAM,EAAc,CAAC,EAAG+/B,EAAO4C,EAAM,IAAI,SAAU16B,EAAI,CACzE,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGoF,EAAO9E,EAAG,CAAC,EAAG+E,EAAO/E,EAAG,CAAC,EAAGstB,EAAOttB,EAAG,CAAC,EAAGi0C,EAAOj0C,EAAG,CAAC,EAC7E,OAAO,KAAK,IAAI8E,EAAKrN,CAAK,EAAGsN,EAAKtN,CAAK,EAAG61B,EAAK71B,CAAK,EAAGw8C,EAAKx8C,CAAK,CAAC,CACtE,CAAC,CAAC,EAAG,EAAK,CAAC,CACf,CACA,SAAS0gF,GAAU/9C,EAAO3iC,EAAO,CAC7B,OAAO,KAAK,IAAI,MAAM,KAAM,EAAc,CAAC,EAAG+/B,EAAO4C,EAAM,IAAI,SAAU16B,EAAI,CACzE,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAGoF,EAAO9E,EAAG,CAAC,EAAG+E,EAAO/E,EAAG,CAAC,EAAGstB,EAAOttB,EAAG,CAAC,EAAGi0C,EAAOj0C,EAAG,CAAC,EAC7E,OAAO,KAAK,IAAI8E,EAAKrN,CAAK,EAAGsN,EAAKtN,CAAK,EAAG61B,EAAK71B,CAAK,EAAGw8C,EAAKx8C,CAAK,CAAC,CACtE,CAAC,CAAC,EAAG,EAAK,CAAC,CACf,CACA,SAAS2gF,GAAaC,EAAal/E,EAAU,CACzC,IAAIuG,EAAIM,EAAIG,EACR2E,EAAO,CAAC,EAAG,CAAC,EACZC,EAAO,CAAC,EAAG,CAAC,EACZuoB,EAAO,CAAC,EAAG,CAAC,EACZ2mB,EAAO,CAAC,EAAG,CAAC,EACZh/C,EAAQ,EACR7D,EAAS,EACb,GAAI,CAACinF,EAAY,OACb,MAAO,CACH,KAAMvzE,EACN,KAAMC,EACN,KAAMuoB,EACN,KAAM2mB,EACN,KAAM,EACN,KAAM,EACN,KAAM,EACN,KAAM,EACN,MAAOh/C,EACP,OAAQ7D,EACR,SAAU+H,CACd,EAEJ,IAAIm/E,EAAgBv0E,GAAS5K,EAAU,EAAQ,EAC/C,GAAIm/E,EAAgB,GAAI,CACpB,IAAI3+E,EAAM2+E,EAAgB,IAAM,KAAK,GACjCC,EAAO,KAAK,IAAI5+E,CAAG,EACnB6+E,EAAO,GAAKD,EAGZE,EAAa,CAACp/C,GAASC,EAAO,EAC9Bo/C,EAAgB,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC,EAC/BC,EAAa,CAACt/C,GAASC,EAAO,EAC9Bs/C,EAAgB,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EAAG,CAAC,CAAC,EACnCP,EAAY,QAAQ,SAAUj+C,EAAO,CACjCA,EAAM,QAAQ,SAAU18B,EAAK,CAGzB,IAAIm7E,EAASb,GAAuB,CAAC,CAACO,EAAM,EAAG,CAAC,EAAG76E,CAAG,EAClDo7E,EAASd,GAAuB,CAAC,CAACQ,EAAM,EAAG,CAAC,EAAG96E,CAAG,EAClD+6E,EAAW,CAAC,EAAII,IAChBH,EAAc,CAAC,EAAIh7E,EACnB+6E,EAAW,CAAC,EAAII,GAEhBJ,EAAW,CAAC,EAAII,IAChBH,EAAc,CAAC,EAAIh7E,EACnB+6E,EAAW,CAAC,EAAII,GAEhBF,EAAW,CAAC,EAAIG,IAChBF,EAAc,CAAC,EAAIl7E,EACnBi7E,EAAW,CAAC,EAAIG,GAEhBH,EAAW,CAAC,EAAIG,IAChBF,EAAc,CAAC,EAAIl7E,EACnBi7E,EAAW,CAAC,EAAIG,EAExB,CAAC,CACL,CAAC,EACD,IAAIz4E,EAAKm3B,EAAOkhD,EAAe,CAAC,EAAGK,EAAW14E,EAAG,CAAC,EAAG24E,EAAW34E,EAAG,CAAC,EAChE+Y,EAAKoe,EAAOohD,EAAe,CAAC,EAAGK,EAAW7/D,EAAG,CAAC,EAAG8/D,EAAW9/D,EAAG,CAAC,EAChE+/D,EAAoB,CAAC,CAACZ,EAAM,EAAGN,GAAO,CAAC,CAACM,EAAM,CAAC,EAAGQ,CAAQ,CAAC,EAC3DK,EAAoB,CAAC,CAACb,EAAM,EAAGN,GAAO,CAAC,CAACM,EAAM,CAAC,EAAGS,CAAQ,CAAC,EAC3DK,EAAkB,CAAC,CAACb,EAAM,EAAGP,GAAO,CAAC,CAACO,EAAM,CAAC,EAAGS,CAAQ,CAAC,EACzDK,EAAkB,CAAC,CAACd,EAAM,EAAGP,GAAO,CAAC,CAACO,EAAM,CAAC,EAAGU,CAAQ,CAAC,EAC7Dx5E,EAAK83B,EAAO,CACR,CAAC2hD,EAAmBE,CAAe,EACnC,CAACF,EAAmBG,CAAe,EACnC,CAACF,EAAmBC,CAAe,EACnC,CAACD,EAAmBE,CAAe,CACvC,EAAE,IAAI,SAAU55E,EAAI,CAChB,IAAIM,EAAKw3B,EAAO93B,EAAI,CAAC,EAAG6zB,EAAQvzB,EAAG,CAAC,EAAGwzB,EAAQxzB,EAAG,CAAC,EACnD,OAAO2yB,GAAiCY,EAAOC,CAAK,EAAE,CAAC,CAC3D,CAAC,EAAG,CAAC,EAAG1uB,EAAOpF,EAAG,CAAC,EAAGqF,EAAOrF,EAAG,CAAC,EAAG4tB,EAAO5tB,EAAG,CAAC,EAAGu0C,EAAOv0C,EAAG,CAAC,EAC7DzK,EAAQ0jF,EAAW,CAAC,EAAIA,EAAW,CAAC,EACpCvnF,EAASqnF,EAAW,CAAC,EAAIA,EAAW,CAAC,CACzC,KACK,CACD,IAAIc,EAASpB,GAAUE,EAAa,CAAC,EACjCmB,EAASrB,GAAUE,EAAa,CAAC,EACjCoB,EAASvB,GAAUG,EAAa,CAAC,EACjCqB,EAASxB,GAAUG,EAAa,CAAC,EAOrC,GANAvzE,EAAO,CAACy0E,EAAQC,CAAM,EACtBz0E,EAAO,CAAC00E,EAAQD,CAAM,EACtBlsD,EAAO,CAACisD,EAAQG,CAAM,EACtBzlC,EAAO,CAACwlC,EAAQC,CAAM,EACtBzkF,EAAQwkF,EAASF,EACjBnoF,EAASsoF,EAASF,EACdlB,EAAgB,IAAK,CAcrB,IAAIqB,EAAW,CAACrsD,EAAMxoB,EAAMmvC,EAAMlvC,CAAI,EACtC/E,EAAKw3B,EAAOmiD,EAAU,CAAC,EAAG70E,EAAO9E,EAAG,CAAC,EAAG+E,EAAO/E,EAAG,CAAC,EAAGstB,EAAOttB,EAAG,CAAC,EAAGi0C,EAAOj0C,EAAG,CAAC,EAC/E/K,EAAQykF,EAASF,EACjBpoF,EAASqoF,EAASF,CACtB,CACJ,CACA,GAAIjB,EAAgB,IAAM,IAAK,CAG3B,IAAIqB,EAAW,CAAC1lC,EAAM3mB,EAAMvoB,EAAMD,CAAI,EACtC3E,EAAKq3B,EAAOmiD,EAAU,CAAC,EAAG70E,EAAO3E,EAAG,CAAC,EAAG4E,EAAO5E,EAAG,CAAC,EAAGmtB,EAAOntB,EAAG,CAAC,EAAG8zC,EAAO9zC,EAAG,CAAC,CACnF,CACA,IAAIkZ,EAAKkY,GAAW,CAACzsB,EAAMC,EAAMuoB,EAAM2mB,CAAI,CAAC,EAAGziB,EAAOnY,EAAG,KAAMoY,EAAOpY,EAAG,KAAMqY,EAAOrY,EAAG,KAAMsY,EAAOtY,EAAG,KACzG,MAAO,CACH,KAAMvU,EACN,KAAMC,EACN,KAAMuoB,EACN,KAAM2mB,EACN,MAAOh/C,EACP,OAAQ7D,EACR,KAAMogC,EACN,KAAMC,EACN,KAAMC,EACN,KAAMC,EACN,SAAUx4B,CACd,CACJ,CACA,SAASygF,GAAmBn1C,EAAWo1C,EAAmB,CACtD,IAAIp0B,EAASo0B,EAAkB,IAAI,SAAUC,EAAa,CACtD,GAAIr7E,GAAQq7E,CAAW,EAAG,CACtB,IAAIC,EAAsBH,GAAmBn1C,EAAWq1C,CAAW,EAC/D33C,EAAW43C,EAAoB,OACnC,OAAI53C,EAAW,EACJ43C,EAEF53C,IAAa,EACX43C,EAAoB,CAAC,EAGrB,IAEf,KACK,CACD,IAAIC,EAAU,GAAKv1C,EAAW,SAAU/kC,EAAI,CACxC,IAAI0zE,EAAU1zE,EAAG,QACjB,OAAO0zE,EAAQ,MAAM,SAAW0G,CACpC,CAAC,EACD,OAAIE,GACAA,EAAQ,OAAS,GACVA,EAAQ,SAEZ,IACX,CACJ,CAAC,EAAE,OAAO,OAAO,EACjB,OAAIv0B,EAAO,SAAW,GAAKhnD,GAAQgnD,EAAO,CAAC,CAAC,EACjCA,EAAO,CAAC,EAEZA,CACX,CAKA,IAAIw0B,GAA+B,SAAUruE,EAAQ,CACjD,GAAUquE,EAAeruE,CAAM,EAC/B,SAASquE,GAAgB,CACrB,IAAI7wE,EAAQwC,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,KAChE,OAAAxC,EAAM,OAAS,IAAI,GACnBA,EAAM,UAAY,CAAC,EACnBA,EAAM,gBAAkB,UACxBA,EAAM,iBAAmB,CAAC,EAC1BA,EAAM,cAAgB,CAAC,EACvBA,EAAM,iBAAmB,GAClBA,CACX,CACA,OAAA6wE,EAAc,UAAU,kBAAoB,UAAY,CACpDruE,EAAO,UAAU,kBAAkB,KAAK,IAAI,CAChD,EACAquE,EAAc,UAAU,YAAc,UAAY,CAC9C,KAAK,qBAAuB,GAC5B,KAAK,YAAY,CACrB,EACAA,EAAc,UAAU,WAAa,UAAY,CAC7C,OAAO,KAAK,MAAM,OACtB,EACAA,EAAc,UAAU,WAAa,SAAU9xE,EAAMorE,EAAUC,EAAY,CACvE,IAAI9zE,EACA8zE,IAAe,SAAUA,EAAa,IAC1C,IAAIjwD,EAAQ,KAAK,MACjB,GAAI,CAAC,KAAK,YAAcA,EAAM,YAC1B,OAEJkgB,GAAc,EAAI,EAClB,KAAK,UAAU,QAAQ,SAAU/I,GAAU,CACvCA,GAAS,WAAWvyB,EAAM,GAAO,EAAK,CAC1C,CAAC,EACD,IAAItc,EAAQ,KAAK,MACb44C,EAAY,KAAK,UACjBxzC,EAASsyB,EAAM,QAAU13B,EAAM,OAC/BquF,EAAWz1C,EAAU,IAAI,SAAU/J,GAAU,CAAE,MAAQ,CAAE,OAAQ,GAAO,QAASA,EAAS,CAAI,CAAC,EAC/Fy/C,EAAe,KAAK,MAAM,cAAgB,CAAC,EAC3CC,EAAiBR,GAAmBM,EAAUC,CAAY,EAC1DE,EAAwBxuF,EAAM,sBAClCuuF,EAAe,KAAK,MAAMA,EAAgB,EAAc,CAAC,EAAG5iD,EAAO0iD,EAAS,OAAO,SAAUx6E,GAAI,CAC7F,IAAI46E,GAAS56E,GAAG,OAChB,MAAO,CAAC46E,EACZ,CAAC,EAAE,IAAI,SAAU56E,GAAI,CACjB,IAAI0zE,GAAU1zE,GAAG,QACjB,OAAO0zE,EACX,CAAC,CAAC,EAAG,EAAK,CAAC,EACX,IAAI+D,EAAmB,CAAC,EACpBoD,EAAU,CAAChH,GAAaprE,IAAS,IAAMtc,EAAM,YAC7C2uF,EAAqB3uF,EAAM,oBAAsB,EACrD,GAAI,CAAC,KAAK,iBAAkB,CACxB,IAAI4uF,GAAsB/6E,EAAK7T,EAAM,eAAiB,MAAQ6T,IAAO,OAAS,OAASA,EAAG,SACtF+6E,GAAsB,OACtBD,EAAqBC,EAE7B,CACA,SAASC,EAAqBnjB,GAAOojB,GAAgBhlB,GAAQ,CACzD,IAAIilB,EAAiBrjB,GAAM,IAAI,SAAU78B,GAAU,CAC/C,GAAIj8B,GAAQi8B,EAAQ,EAAG,CACnB,IAAI9nC,GAAO8nF,EAAqBhgD,GAAUigD,EAAc,EACpDvgD,GAAQ,CAACxnC,GAAK,KAAMA,GAAK,KAAMA,GAAK,KAAMA,GAAK,IAAI,EACvD,OAAAukF,EAAiB,KAAKvkF,EAAI,EACnB,CAAE,MAAOwnC,GAAO,SAAUxnC,GAAK,QAAS,CACnD,KAEI,OAAO,CACH,MAAO0tC,GAAwB5F,GAAS,KAAK,EAC7C,SAAUA,GAAS,YAAY,CACnC,CAER,CAAC,EACGmgD,GAAYD,EAAe,IAAI,SAAUl7E,GAAI,CAC7C,IAAIvG,GAAWuG,GAAG,SAClB,OAAOvG,EACX,CAAC,EACG2hF,GAAgB,EAChBC,GAAgBF,GAAU,CAAC,EAC3BG,GAAiBH,GAAU,MAAM,SAAU/3B,GAAc,CACzD,OAAO,KAAK,IAAIi4B,GAAgBj4B,EAAY,EAAI,EACpD,CAAC,EACGy3B,EACAO,GAAgB,CAACT,GAAyBW,GAAiBD,GAAgBP,EAG3EM,GAAgB,CAACT,GAAyB,CAAC1kB,IAAUqlB,GAAiBD,GAAgBJ,GAE1F,IAAIM,GAAaL,EAAe,IAAI,SAAUl7E,GAAI,CAC9C,IAAI06B,GAAQ16B,GAAG,MACf,OAAO06B,EACX,CAAC,EACG8gD,GAAY9C,GAAa6C,GAAYH,EAAa,EACtD,OAAOI,EACX,CACA,IAAIC,EAAgBT,EAAqBN,EAAgB,KAAK,SAAU,EAAI,EACxEG,IAEA,KAAK,SAAWY,EAAc,SAC9B,KAAK,gBAAkBtvF,EAAM,oBAAsB,UACnD,KAAK,MAAQ,CAAC,EAAG,CAAC,GAEtB,KAAK,cAAgBsuF,EACrB,KAAK,iBAAmBhD,EACxB,IAAI/7C,EAAkB,KAAK,gBACvBjiC,EAAW,KAAK,SAChByf,EAAQ,KAAK,MACb3jB,EAAQkmF,EAAc,MAAO/pF,EAAS+pF,EAAc,OAAQ3pD,EAAO2pD,EAAc,KAAM1pD,EAAO0pD,EAAc,KAC5GC,EAAY5gB,GAAgB,CAC5B,CAAC,EAAG,CAAC,EACL,CAACvlE,EAAO,CAAC,EACT,CAAC,EAAG7D,CAAM,EACV,CAAC6D,EAAO7D,CAAM,CAClB,EAAG6kE,GAA4B76B,EAAiBnmC,EAAO7D,CAAM,EAAG,KAAK,SAAW,IAAM,KAAK,EAAE,EACzF4O,EAAKuxB,GAAW6pD,EAAU,MAAM,EAAG1pF,EAASsO,EAAG,KAAMrO,EAASqO,EAAG,KACjEq7E,EAAc,WAAW,OAAOliF,EAAU,MAAM,EAC9C,UAAU,OAAOuf,GAAKE,EAAM,CAAC,CAAC,EAAG,IAAI,EAAE,OAAOF,GAAKE,EAAM,CAAC,CAAC,EAAG,GAAG,EACnE5f,EAAY,aAAa,OAAO,CAACtH,EAAQ,MAAM,EAAE,OAAO,CAACC,EAAQ,KAAK,EAAE,OAAO0pF,CAAW,EAC9F,KAAK,WAAW,MAAM,UAChB,eAAe,OAAO7pD,EAAM,MAAM,EAAE,OAAOC,EAAM,MAAM,EAAE,OAAO,KAAK,MAAM,YAAc,EAAG,GAAG,EACrGxgC,EAAO,MAAM,SAAW,oBAClB,oBAAoB,OAAOmqC,EAAiB,GAAG,EAC/C,SAAS,OAAOnmC,EAAO,YAAY,EAAE,OAAO7D,EAAQ,KAAK,EACzD,cAAc,OAAO4H,CAAS,EACpCuqB,EAAM,MAAQtuB,EACdsuB,EAAM,OAASnyB,EACf,IAAI4a,EAAY,KAAK,aAAa,EAC9BjU,EAAOy5E,GAAsB,KAAK,WAAYvgF,EAAQ,KAAK,WAAY,KAAK,aAAa,EAAG,KAAK,gBAAkB+a,EAAW,CAAC,CAAC,EAChItO,EAAM,CAAC3F,EAAK,KAAMA,EAAK,GAAG,EAC1BoI,EAAKq3B,EAAO8I,GAAwBvoC,CAAI,EAAG,CAAC,EAAG+M,EAAO3E,EAAG,CAAC,EAAG4E,EAAO5E,EAAG,CAAC,EAAGmtB,EAAOntB,EAAG,CAAC,EAAG8zC,EAAO9zC,EAAG,CAAC,EACpGyoC,EAASrX,GAAW,CAACzsB,EAAMC,EAAMuoB,EAAM2mB,CAAI,CAAC,EAC5Cn9B,EAAQ,CAAC8xB,EAAO,KAAMA,EAAO,IAAI,EACjCzY,GAAYzX,GAAKE,EAAM,CAAC,EAAIA,EAAM,CAAC,CAAC,EACxC7gB,EAAK,KAAO8zB,GAAM/mB,EAAMgS,CAAK,EAC7B/e,EAAK,KAAO8zB,GAAM9mB,EAAM+R,CAAK,EAC7B/e,EAAK,KAAO8zB,GAAMyB,EAAMxW,CAAK,EAC7B/e,EAAK,KAAO8zB,GAAMooB,EAAMn9B,CAAK,EAG7B/e,EAAK,KAAOy5B,EAAOz5B,EAAK,KAAO+e,EAAM,CAAC,EACtC/e,EAAK,IAAM05B,EAAO15B,EAAK,IAAM+e,EAAM,CAAC,EACpC/e,EAAK,OAAS8zB,GAAMF,GAAKjuB,EAAK3F,EAAK,MAAM,EAAG+e,CAAK,EACjD/e,EAAK,aAAe8zB,GAAMF,GAAKjuB,EAAK3F,EAAK,YAAY,EAAG+e,CAAK,EAC7D/e,EAAK,qBAAuB4zB,GAAKjuB,EAAK3F,EAAK,oBAAoB,EAC/DA,EAAK,gBAAkB8zB,GAAMF,GAAKjuB,EAAK3F,EAAK,eAAe,EAAG+e,CAAK,EACnE7lB,EAAO,MAAM,UACP,aAAa,OAAO,CAACS,EAASolB,EAAM,CAAC,EAAG,MAAM,EAAE,OAAO,CAACnlB,EAASmlB,EAAM,CAAC,EAAG,KAAK,EAC5EukE,EACV53C,GAAc,EACd,KAAK,YAAY,EAAS,EAAS,CAAC,EAAG1rC,CAAI,EAAG,CAAE,SAAU+e,EAAO,UAAWqZ,GAAW,gBAAiBA,EAAU,CAAC,EAAGqjD,CAAU,CACpI,EACAyG,EAAc,UAAU,QAAU,UAAY,CAC1C,OAAO,EAAS,EAAS,CAAC,EAAGruE,EAAO,UAAU,QAAQ,KAAK,IAAI,CAAC,EAAG,CAAE,SAAU,KAAK,UAAU,IAAI,SAAUiX,EAAO,CAAE,OAAOA,EAAM,QAAQ,CAAG,CAAC,CAAE,CAAC,CACrJ,EACAo3D,EAAc,UAAU,aAAe,SAAUryF,EAAMtB,EAAGuwE,EAAW,CACjE,GAAIA,GAAajvE,EAAK,QAAQ,OAAO,EAAI,GACrC,OAAOgkB,EAAO,UAAU,aAAa,KAAK,KAAMhkB,EAAMtB,CAAC,EAGvD,KAAK,SAAS,QAAQsB,EAAMtB,CAAC,CAErC,EACA2zF,EAAc,UAAU,sBAAwB,UAAY,CACxD,IAAI3E,EAAa,KAAK,gBAAgB,EAAE,OAAO,SAAU14D,EAAO8a,EAAM,CAClE,IAAIh4B,EAAIM,EACJu1E,GAAmBv1E,GAAMN,EAAKg4B,EAAK,qBAAuB,MAAQh4B,IAAO,OAAS,OAASA,EAAG,KAAKg4B,CAAI,KAAO,MAAQ13B,IAAO,OAASA,EAAK,CAAC,EAChJ,OAAO,EAAc,EAAc,CAAC,EAAGw3B,EAAO5a,CAAK,EAAG,EAAK,EAAG4a,EAAO+9C,CAAc,EAAG,EAAK,CAC/F,EAAG,CAAC,CAAC,EACL,OAAOD,CACX,EACA2E,EAAc,UAAU,aAAe,UAAY,CAC/C,OAAO,EAAc,CAAC,EAAGziD,EAAO,KAAK,SAAS,EAAG,EAAK,CAC1D,EACAyiD,EAAc,UAAU,YAAc,UAAY,CAC9CruE,EAAO,UAAU,YAAY,KAAK,KAAM,EAAc,EAAc,CAAC,EAAG4rB,EAAO,KAAK,MAAM,KAAK,EAAG,EAAK,EAAG,CAAC0/C,EAAS,EAAG,EAAK,EAAG,OAAO,CAC1I,EACA+C,EAAc,UAAU,eAAiB,UAAY,CACjDruE,EAAO,UAAU,eAAe,KAAK,IAAI,EACzC,KAAK,oBAAsB,KAAK,MAAM,YAAc,KAAK,YACzD,KAAK,YAAcs+C,GAAa,KAAK,oBAAqB,EAAI,CAClE,EACA+vB,EAAc,UAAU,cAAgB,UAAY,CAChD,IAAI12D,EAAQ,KAAK,MACb13B,EAAQ,KAAK,MACbkqF,EAAa,KAAK,gBAClBD,EAAajqF,EAAM,YAAc,KAAK,YACtCggB,EAAUhgB,EAAM,QAChB6T,EAAK,KAAK,OAAO,OAAOmM,CAAO,EAAGsT,EAAQzf,EAAG,MAAO8e,EAAU9e,EAAG,QAAS0f,EAAU1f,EAAG,QACvFg1E,EAAkBv1D,EAAM,QAAUC,EAAQ,QAC1Cs1D,GAAmB,KAAK,0BAA4B,KAAK,uBACzDpe,GAAW,KAAM,EAAK,EACtBA,GAAW,KAAM,EAAI,EACrB,KAAK,YAAY,CAAE,OAAQ,CAAC,CAAE,CAAC,GAE/Byf,IAAeD,IACfvyD,EAAM,OAAS,MAEdA,EAAM,SACPA,EAAM,OAAS,KAAK,YACpB,KAAK,WAAW,MAAM,QAAU,SAEhCA,EAAM,SACD,KAAK,cACN,KAAK,YAAc4rD,GAAmB,KAAM,KAAK,YAAa,OAAO,GAEpE,KAAK,eACN,KAAK,aAAeM,GAAoB,KAAM,cAAc,IAGpE,IAAI6L,EAAqB,CAACnkB,GAAO5zC,EAAM,UAAW13B,EAAM,SAAS,EAC7DyvF,IACA/3D,EAAM,UAAY13B,EAAM,YAExByvF,GACG5G,GACA,KAAK,mBAAqB7oF,EAAM,oBAAsB,YACtD2yB,EAAQ,QACR3S,EAAQ,QAAU,CAAC4uD,GAAkB,KAAK,cAAe5uE,EAAM,cAAgB,CAAC,CAAC,KACpF,KAAK,WAAW,EAChB,KAAK,iBAAmB,IAE5B,KAAK,qBAAuB,CAAC,CAAC6oF,CAClC,EACAuF,EAAc,UAAU,gBAAkB,UAAY,CAAE,EACxDA,EAAc,aAAe,EAAS,EAAS,CAAC,EAAG1H,GAAgB,YAAY,EAAG,CAAE,gBAAiB,CAAC,MAAO,KAAK,EAAG,UAAW,GAAM,SAAU,GAAM,UAAW,GAAM,QAAS,CAAC,EAAG,mBAAoB,EAAG,mBAAoB,SAAU,CAAC,EACnO0H,CACX,EAAE1H,EAAe,EAMbgJ,GAAyC,SAAU3vE,EAAQ,CAC3D,GAAU2vE,EAAyB3vE,CAAM,EACzC,SAAS2vE,GAA0B,CAC/B,IAAInyE,EAAQwC,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,KAChE,OAAAxC,EAAM,UAAY,CAAC,EACZA,CACX,CACA,OAAAmyE,EAAwB,UAAU,OAAS,UAAY,CACnD,IAAInyE,EAAQ,KACR1J,EACA7T,EAAQ,KAAK,MACbsrC,EAAWtrC,EAAM,SAAU6mF,EAAoB7mF,EAAM,UAAWkpF,EAAclpF,EAAM,YACpFggB,EAAUhgB,EAAM,SAAW,CAAC,EAC5BmR,EAAS6O,EAAQ,OACjB2vE,EAAa,KAAK,aAAe,CAACx+E,EAClCo6E,GAAsB13E,EAA+Dq1E,GAAY,YAAc,MAAQr1E,IAAO,OAASA,EAAK,CAAC,EACjJ,OAAI87E,GAAc,CAACx+E,GAAUo6E,EAAmB,OAC5CvrE,EAAUurE,EAAmB,IAAI,UAAY,CAAE,OAAO,IAAM,CAAC,EAEvDoE,IACNpE,EAAqB,CAAC,GAEnB,GAAoB1E,EAAmB,CAAE,SAAUv7C,EAAU,IAAK,GAAI,KAAM,YAAY,EAAG,UAAW51B,GAAO,aAAa,CAAE,EAAGsK,EAAQ,IAAI,SAAU5a,EAAQgM,EAAG,CACnK,IAAIyC,EAAIM,EACJy7E,GAAmBz7E,GAAMN,EAAK7T,EAAM,4BAA8B,MAAQ6T,IAAO,OAAS,OAASA,EAAG,KAAK7T,EAAOoF,EAAQgM,CAAC,KAAO,MAAQ+C,IAAO,OAASA,EAAK,CAAC,EACpK,OAAO,GAAoBuyE,GAAiB,EAAS,CAAE,IAAK,WAAat1E,EAAG,IAAK4R,GAAKzF,EAAO,YAAanM,CAAC,CAAE,EAAGpR,EAAO4vF,EAAiB,CAAE,OAAQxqF,EAAQ,gBAAiBmY,EAAO,iBAAkBA,EAAM,kBAAmB,YAAaguE,EAAmBn6E,CAAC,CAAE,CAAC,CAAC,CACtQ,CAAC,CAAC,CACN,EACAs+E,EAAwB,UAAU,kBAAoB,UAAY,CAAE,EACpEA,EAAwB,UAAU,mBAAqB,UAAY,CAAE,EACrEA,EAAwB,UAAU,WAAa,UAAY,CACvD,OAAO,KAAK,MAAM,OACtB,EACAA,EAAwB,UAAU,WAAa,SAAUpzE,EAAMorE,EAAUC,EAAY,CAC7EA,IAAe,SAAUA,EAAa,IAC1C/vC,GAAc,EAAI,EAClB,KAAK,UAAU,QAAQ,SAAU/I,EAAU,CACvCA,EAAS,WAAWvyB,EAAMorE,EAAUC,CAAU,CAClD,CAAC,EACD/vC,GAAc,CAClB,EACA83C,EAAwB,UAAU,QAAU,UAAY,CACpD,OAAO,EAAS,EAAS,CAAC,EAAG3vE,EAAO,UAAU,QAAQ,KAAK,IAAI,CAAC,EAAG,CAAE,SAAU,KAAK,UAAU,IAAI,SAAUiX,EAAO,CAAE,OAAOA,EAAM,QAAQ,CAAG,CAAC,CAAE,CAAC,CACrJ,EACA04D,EAAwB,UAAU,QAAU,SAAU1hD,EAAU1zC,EAAOytF,EAAW,CAC1EztF,IAAU,SAAUA,EAAQ,CAAC,GACjC,IAAIktC,EAAU,KAAK,UAAU,IAAI,SAAUpsB,EAAG,CAAE,OAAOA,EAAE,QAAQ4yB,EAAU,EAAS,EAAS,CAAC,EAAG1zC,CAAK,EAAG,CAAE,UAAW,EAAM,CAAC,EAAG,EAAK,CAAG,CAAC,EACrI8nF,EAAiB2F,GAAaztF,EAAM,UACpC6tF,EAAY,CACZ,QAAS,SAAUC,EAAW,CAC1B,OAAA5gD,EAAQ,QAAQ,SAAU1sB,EAAG,CAAE,OAAOA,EAAE,QAAQstE,CAAS,CAAG,CAAC,EACtD,IACX,EACA,WAAY,UAAY,CACpB,OAAA5gD,EAAQ,QAAQ,SAAU1sB,EAAG,CAAE,OAAOA,EAAE,WAAW,CAAG,CAAC,EAChD,IACX,CACJ,EACA,OAAOsnE,EAAiB+F,EAAU,QAAQ7tF,CAAK,EAAE,WAAW,EAAI6tF,CACpE,EACAuH,EAAwB,UAAU,UAAY,SAAUj1F,EAAG2K,EAAQ,CAC3DA,IAAW,SAAUA,EAAS3K,EAAE,QACpC,IAAI26D,EAAchwD,EACd4zC,EAAgB,GAAK,KAAK,UAAW,SAAUhiB,EAAO,CACtD,IAAI5xB,EAAS4xB,EAAM,WAAW,EAAE,CAAC,EAC7B64D,EAAoB74D,EAAM,qBAAqB,EAC/C84D,EAAc94D,EAAM,eAAe,EACvC,MAAI,CAAC5xB,GAAU,CAAC0qF,EACL,GAEJA,IAAgB16B,GAAe06B,EAAY,SAAS16B,CAAW,GAC9D06B,IAAgB1qF,GAAUA,IAAWgwD,GAAehwD,EAAO,SAASgwD,CAAW,GAChFy6B,IAAsBz6B,GAAey6B,EAAkB,SAASz6B,CAAW,CACtF,CAAC,EACD,OAAIpc,GACAA,EAAc,UAAUv+C,EAAG2K,CAAM,EAE9B,IACX,EACAsqF,EAAwB,UAAU,QAAU,UAAY,CACpD,MAAO,EACX,EACAA,EAAwB,UAAU,SAAW,UAAY,CACrD,MAAO,EACX,EACAA,EAAwB,UAAU,WAAa,UAAY,CACvD,MAAO,EACX,EACAA,EAAwB,UAAU,eAAiB,UAAY,CAC3D,OAAO,IACX,EACAA,EAAwB,UAAU,aAAe,UAAY,CACzD,OAAO,EAAc,CAAC,EAAG/jD,EAAO,KAAK,SAAS,EAAG,EAAK,CAC1D,EACA+jD,EAAwB,UAAU,kBAAoB,UAAY,CAAE,EACpEA,EAAwB,UAAU,YAAc,UAAY,CAAE,EAC9DA,EAAwB,UAAU,aAAe,UAAY,CAAE,EAC/DA,EAAwB,UAAU,YAAc,UAAY,CAAE,EAC9DA,EAAwB,UAAU,cAAgB,UAAY,CAAE,EAChEA,EAAwB,UAAU,gBAAkB,UAAY,CAAE,EAC3DA,CACX,EAAEhJ,EAAe,EAEjB,SAASqJ,GAAkBC,EAAYC,EAAa,CAChD,IAAIC,EAAiB,CAAC,EACtB,OAAAF,EAAW,QAAQ,SAAU5qF,EAAQ,CACjC,GAAKA,EAGL,IAAI,GAASA,CAAM,EAAG,CACd6qF,EAAY7qF,CAAM,GAClB8qF,EAAe,KAAK,MAAMA,EAAgB,EAAc,CAAC,EAAGvkD,EAAOskD,EAAY7qF,CAAM,CAAC,EAAG,EAAK,CAAC,EAEnG,MACJ,CACIwN,GAAQxN,CAAM,EACd8qF,EAAe,KAAK,MAAMA,EAAgB,EAAc,CAAC,EAAGvkD,EAAOokD,GAAkB3qF,EAAQ6qF,CAAW,CAAC,EAAG,EAAK,CAAC,EAGlHC,EAAe,KAAK9qF,CAAM,EAElC,CAAC,EACM8qF,CACX,CACA,SAASC,GAAgBH,EAAYC,EAAa,CAC9C,IAAI3B,EAAe,CAAC,EACpB,OAAA0B,EAAW,QAAQ,SAAU5qF,EAAQ,CACjC,GAAKA,EAGL,IAAI,GAASA,CAAM,EAAG,CACd6qF,EAAY7qF,CAAM,GAClBkpF,EAAa,KAAK,MAAMA,EAAc,EAAc,CAAC,EAAG3iD,EAAOskD,EAAY7qF,CAAM,CAAC,EAAG,EAAK,CAAC,EAE/F,MACJ,CACIwN,GAAQxN,CAAM,EACdkpF,EAAa,KAAK6B,GAAgB/qF,EAAQ6qF,CAAW,CAAC,EAGtD3B,EAAa,KAAKlpF,CAAM,EAEhC,CAAC,EACMkpF,CACX,CACA,SAAS8B,GAAkBC,EAAgBC,EAAgB,CACvD,OAAQD,EAAe,SAAWC,EAAe,QAAWD,EAAe,KAAK,SAAUjrF,EAAQgM,EAAG,CACjG,IAAI64E,EAAaqG,EAAel/E,CAAC,EACjC,MAAI,CAAChM,GAAU,CAAC6kF,EACL,GAEF7kF,GAAU6kF,EACXr3E,GAAQxN,CAAM,GAAKwN,GAAQq3E,CAAU,EAC9BmG,GAAkBhrF,EAAQ6kF,CAAU,EAExC,GAEJ,EACX,CAAC,CACL,CACA,IAAIsG,GAAiC,SAAUxwE,EAAQ,CACnD,GAAUwwE,EAAiBxwE,CAAM,EACjC,SAASwwE,GAAkB,CACvB,IAAIhzE,EAAQwC,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,KAChE,OAAAxC,EAAM,WAAa,CAAC,EACpBA,EAAM,YAAc,CAAC,EACrBA,EAAM,QAAU,IAAI,GACpBA,EAAM,gBAAkB,CAAC,EACzBA,EAAM,eAAiB,CAAC,EACxBA,EAAM,gBAAkB,CAAC,EACzBA,EAAM,iBAAmB,KAClBA,CACX,CACA,OAAAgzE,EAAgB,WAAa,UAAY,CACrC,IAAIC,EAAS,CAAC,EACV77B,EAAQ,KAAK,cAAc,EAC/BA,EAAM,QAAQ,SAAU9gD,EAAI,CACxB,IAAInK,EAAMmK,EAAG,IACRnK,GAGLA,EAAI,QAAQ,SAAUlO,EAAM,CACxBg1F,EAAOh1F,CAAI,EAAI,EACnB,CAAC,CACL,CAAC,EACD,IAAIoK,EAAQoR,GAAQw5E,CAAM,EAAE,KAAK;AAAA,CAAI,EACrC,KAAK,cAAgB,GAAO,MAAO1tE,GAAU,GAAQsqB,GAAexnC,CAAK,CAAC,CAC9E,EACA2qF,EAAgB,cAAgB,UAAY,CACxC,OAAO,EAAc,CAACvc,GAASqX,GAAWU,GAAqB7Y,EAAQ,EAAGvnC,EAAO,KAAK,YAAY,EAAG,EAAK,CAC9G,EACA4kD,EAAgB,UAAU,OAAS,UAAY,CAC3C,IAAI18E,EACA48E,EAAqB,KAAK,YACzBA,EAAmB,eACpBA,EAAmB,WAAW,EAElC,IAAIt8E,EAAK,KAAK,MAAOu8E,EAAYv8E,EAAG,MAAOw8E,EAAYx8E,EAAG,MAAOnU,EAAQ,GAAOmU,EAAI,CAAC,QAAS,OAAO,CAAC,EAClGG,EAAKq3B,EAAO,KAAK,YAAY,EAAI,EAAG,CAAC,EAAGqkD,EAAa17E,EAAG,CAAC,EAAGs8E,EAAkBt8E,EAAG,CAAC,EAClF47E,EAAiBH,GAAkBC,EAAYY,CAAe,EAC9DtjC,EAAU4iC,EAAe,OAAS,EAClCW,EAAaJ,EAAmB,cAAc,EAC9C97B,EAAQ,EAAc,EAAc,CAAC,EAAGhpB,EAAOklD,CAAU,EAAG,EAAK,EAAGllD,EAAQ+kD,GAAa,CAAC,CAAE,EAAG,EAAK,EACpGr4D,EAAY,EAAS,EAAS,EAAS,CAAC,EAAGr4B,CAAK,EAAI2wF,GAAa,CAAC,CAAE,EAAG,CAAE,MAAOh8B,EAAO,UAAW87B,EAAmB,cAAe,gBAAiBA,EAAmB,eAAgB,CAAC,EAC7L,KAAK,gBAAkBP,EACvB,IAAI/G,EAAmB,KACnB2H,EAAe,KAAK,SACpB5H,EAAclpF,EAAM,YAKxB,GAJ8DkpF,GAAY,WACtE57B,EAAU,IAGVttD,EAAM,oBACN,OAAO,GAAoB0vF,GAAyB,EAAS,CAAE,IAAK,mBAAoB,IAAK,GAAI,KAAM,UAAU,CAAE,EAAGr3D,EAAW,CAAE,OAAQ,KAAM,QAAS63D,CAAe,CAAC,CAAC,EAE/K,GAAI5iC,EAAS,CACT,IAAIghC,EAAe6B,GAAgBH,EAAYY,CAAe,EAE9D,GAAIE,GAAgB,CAACA,EAAa,MAAM,WAAa,CAACA,EAAa,MAAM,oBAAqB,CAC1F,IAAI1rF,EAAS0rF,EAAa,MAAM,OAC5B1rF,GAAU8qF,EAAe,QAAQ9qF,CAAM,EAAI,KAC3C+jF,EAAmB,EAAS,CAAC,EAAG2H,EAAa,KAAK,EAE1D,CACA,OAAO,GAAoB1C,GAAe,EAAS,CAAE,IAAK,QAAS,IAAK,GAAI,KAAM,UAAU,CAAE,EAAG/1D,GAAYxkB,EAAK7T,EAAM,kBAAoB,MAAQ6T,IAAO,OAASA,EAAK,CAAC,EAAG,CAAE,OAAQ,KAAM,QAASq8E,EAAgB,aAAc5B,EAAc,iBAAkBnF,CAAiB,CAAC,CAAC,CAC3R,KACK,CACD,IAAI4H,EAAWb,EAAe,CAAC,EAE/B,GAAIY,IAAiBA,EAAa,MAAM,WAAaA,EAAa,MAAM,qBAAsB,CAC1F,IAAIl4C,EAAYk4C,EAAa,WAAa,CAAC,EACvCE,EAAqB,GAAKp4C,EAAW,SAAUq4C,EAAI,CAAE,OAAOA,EAAG,MAAM,SAAWF,CAAU,CAAC,EAC3FC,IACA7H,EAAmB,EAAS,CAAC,EAAG6H,EAAmB,KAAK,EAEhE,CACA,OAAO,GAAoBtK,GAAiB,EAAS,CAAE,IAAK,SAAU,IAAK,GAAI,KAAM,UAAU,CAAE,EAAGruD,EAAW,CAAE,OAAQ04D,EAAU,iBAAkB5H,CAAiB,CAAC,CAAC,CAC5K,CACJ,EACAoH,EAAgB,UAAU,kBAAoB,UAAY,CACtD,KAAK,oBAAoB,CAC7B,EACAA,EAAgB,UAAU,mBAAqB,UAAY,CACvD,KAAK,oBAAoB,CAC7B,EACAA,EAAgB,UAAU,qBAAuB,UAAY,CACzD,KAAK,YAAc,CAAC,EACpB,KAAK,WAAa,CAAC,CACvB,EAaAA,EAAgB,UAAU,WAAa,UAAY,CAC/C,IAAI18E,EAAIM,EACR,OAAQA,GAAMN,EAAK,KAAK,YAAc,MAAQA,IAAO,OAAS,OAASA,EAAG,WAAW,KAAO,MAAQM,IAAO,OAASA,EAAK,CAAC,CAC9H,EAaAo8E,EAAgB,UAAU,gBAAkB,UAAY,CACpD,KAAK,YAAc,CAAC,EACpB,KAAK,YAAY,EACjB,KAAK,YAAY,CACrB,EAaAA,EAAgB,UAAU,mBAAqB,UAAY,CAEvD,IAAIhzE,EAAQ,KAWR2zE,EACJ,YAAK,iBAAmB,UAAY,CAChC3zE,EAAM,iBAAmB,KACzB2zE,EAAe,CACnB,EACO,IAAI,QAAQ,SAAU1zE,EAAS,CAClC0zE,EAAiB1zE,CACrB,CAAC,CACL,EACA+yE,EAAgB,UAAU,oBAAsB,UAAY,CACxD,OAAO,KAAK,mBAAmB,CACnC,EACAA,EAAgB,UAAU,WAAa,UAAY,CAC/C,OAAO,KAAK,QAChB,EACAA,EAAgB,UAAU,aAAe,UAAY,CACjD,OAAO,KAAK,SAAS,aAAa,CACtC,EACAA,EAAgB,UAAU,eAAiB,UAAY,CACnD,OAAO,KAAK,SAAS,eAAe,CACxC,EACAA,EAAgB,UAAU,YAAc,SAAU1qC,EAAU,CACxD,IAAIwqC,EAAiB,KAAK,WACtBC,EAAiBj8B,GAAe,KAAK,MAAM,QAAU,KAAK,MAAM,OAAQ,EACxE88B,EAAY,OAAO,SAAa,IAChCv5D,EAAWw4D,GAAkBC,EAAgBC,CAAc,EAC3DL,EAAc,KAAK,YACnBW,EAAkB,CAAC,EACvB,YAAK,WAAW,QAAQ,SAASQ,EAAkBhsF,EAAQ,CACvD,GAAI,GAASA,CAAM,EAAG,CAClB,IAAIisF,EAAiBpB,EAAY7qF,CAAM,EACnCisF,EACAT,EAAgBxrF,CAAM,EAAI6qF,EAAY7qF,CAAM,EAEvC+rF,IACLv5D,EAAW,GACXg5D,EAAgBxrF,CAAM,EAAI,CAAC,EAAE,MAAM,KAAK,SAAS,iBAAiBA,CAAM,CAAC,EAEjF,MACSwN,GAAQxN,CAAM,GACnBA,EAAO,QAAQgsF,CAAiB,CAExC,CAAC,EACD,KAAK,eAAiBd,EACtB,KAAK,gBAAkBM,EAChB,CACHN,EACAM,EACA,CAAC/qC,GAAYjuB,CACjB,CACJ,EACA24D,EAAgB,UAAU,oBAAsB,UAAY,CACxD,IAAI18E,EAAIM,EAAIG,EACZ,KAAK,WAAa,KAAK,eACvB,KAAK,YAAc,KAAK,gBACxB,IAAIE,EAAK,KAAK,QAAQ,OAAO,KAAK,eAAe,EAAG8e,EAAQ9e,EAAG,MAAO+e,EAAU/e,EAAG,QAC/Eq0E,EAAkBv1D,EAAM,QAAUC,EAAQ,OAC1Cs1D,KACC10E,GAAMN,EAAK,KAAK,OAAO,mBAAqB,MAAQM,IAAO,QAAkBA,EAAG,KAAKN,EAAI,CACtF,SAAU,KAAK,SACf,QAAS,KAAK,eAClB,CAAC,GACAS,EAAK,KAAK,oBAAsB,MAAQA,IAAO,QAAkBA,EAAG,KAAK,IAAI,GAElF,IAAIiZ,EAAKoe,EAAO,KAAK,YAAY,EAAG,CAAC,EAAGqkD,EAAaziE,EAAG,CAAC,EAAG0iE,EAAc1iE,EAAG,CAAC,EAAGqK,EAAWrK,EAAG,CAAC,EAChG,KAAK,WAAayiE,EAClB,KAAK,YAAcC,EACfr4D,GACA,KAAK,YAAY,CAEzB,EACA24D,EAAgB,aAAe,CAAC,EAChCA,EAAgB,gBAAkB,CAAC,EACnCA,EAAgB,cAAgB,KAChC,GAAW,CACPntE,GAAYyqB,EAAgB,CAChC,EAAG0iD,EAAgB,UAAW,WAAY,MAAM,EACzCA,CACX,EAAE,EAAmB,EAEjBe,GAA0B,SAAUvxE,EAAQ,CAC5C,GAAUuxE,EAAUvxE,CAAM,EAC1B,SAASuxE,GAAW,CAChB,OAAOvxE,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,IAC/D,CACA,OAAAuxE,EAAS,aAAetF,GACjBsF,CACX,EAAEf,EAAe,EAEjB,SAASgB,GAAa58B,EAAO,CACzB,IAAI9gD,EACJ,OAAOA,EAAoB,SAAUkM,EAAQ,CACrC,GAAUuxE,EAAUvxE,CAAM,EAC1B,SAASuxE,GAAW,CAChB,OAAOvxE,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,IAC/D,CACA,OAAOuxE,CACX,EAAEf,EAAe,EACjB18E,EAAG,aAAe8gD,EAClB9gD,CACR,CC34bA,IAAI,GAAgB,SAAS+J,EAAGjjB,EAAG,CAC/B,UAAgB,OAAO,gBAClB,CAAE,UAAW,CAAC,CAAE,YAAa,OAAS,SAAUijB,EAAGjjB,EAAG,CAAEijB,EAAE,UAAYjjB,CAAG,GAC1E,SAAUijB,EAAGjjB,EAAG,CAAE,QAASuiB,KAAKviB,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGuiB,CAAC,IAAGU,EAAEV,CAAC,EAAIviB,EAAEuiB,CAAC,EAAG,EAC7F,GAAcU,EAAGjjB,CAAC,CAC7B,EAEA,SAAS,GAAUijB,EAAGjjB,EAAG,CACrB,GAAI,OAAOA,GAAM,YAAcA,IAAM,KACjC,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EAC5F,GAAcijB,EAAGjjB,CAAC,EAClB,SAASmjB,GAAK,CAAE,KAAK,YAAcF,CAAG,CACtCA,EAAE,UAAYjjB,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAKmjB,EAAG,UAAYnjB,EAAE,UAAW,IAAImjB,EACnF,CAEA,IAAI,GAAW,UAAW,CACtB,UAAW,OAAO,QAAU,SAAkBd,EAAG,CAC7C,QAAShL,EAAGZ,EAAI,EAAG6L,EAAI,UAAU,OAAQ7L,EAAI6L,EAAG7L,IAAK,CACjDY,EAAI,UAAUZ,CAAC,EACf,QAAS8L,KAAKlL,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGkL,CAAC,IAAGF,EAAEE,CAAC,EAAIlL,EAAEkL,CAAC,EAC/E,CACA,OAAOF,CACX,EACO,GAAS,MAAM,KAAM,SAAS,CACzC,EAEA,SAAS,GAAWyK,EAAYriB,EAAQhL,EAAKstB,EAAM,CAC/C,IAAI/b,EAAI,UAAU,OAAQmP,EAAInP,EAAI,EAAIvG,EAASsiB,IAAS,KAAOA,EAAO,OAAO,yBAAyBtiB,EAAQhL,CAAG,EAAIstB,EAAM9J,EAC3H,GAAI,OAAO,SAAY,UAAY,OAAO,QAAQ,UAAa,WAAY9C,EAAI,QAAQ,SAAS2M,EAAYriB,EAAQhL,EAAKstB,CAAI,MACxH,SAAStW,EAAIqW,EAAW,OAAS,EAAGrW,GAAK,EAAGA,KAASwM,EAAI6J,EAAWrW,CAAC,KAAG0J,GAAKnP,EAAI,EAAIiS,EAAE9C,CAAC,EAAInP,EAAI,EAAIiS,EAAExY,EAAQhL,EAAK0gB,CAAC,EAAI8C,EAAExY,EAAQhL,CAAG,IAAM0gB,GAChJ,OAAOnP,EAAI,GAAKmP,GAAK,OAAO,eAAe1V,EAAQhL,EAAK0gB,CAAC,EAAGA,CAChE,CAEA,IAAI02E,GAA6B,SAAUzxE,EAAQ,CACjD,GAAUyxE,EAAezxE,CAAM,EAE/B,SAASyxE,EAAcxxF,EAAO,CAC5B,IAAIud,EAAQwC,EAAO,KAAK,KAAM/f,CAAK,GAAK,KAExC,OAAAud,EAAM,MAAQ,CAAC,EACfA,EAAM,MAAQA,EAAM,MACbA,CACT,CAEA,IAAIH,EAAUo0E,EAAc,UAE5B,OAAAp0E,EAAQ,OAAS,UAAY,CAC3B,OAAO,GAAoBk0E,GAAY,GAAS,CAC9C,IAAK,GAAI,KAAM,UAAU,CAC3B,EAAG,KAAK,KAAK,CAAC,CAChB,EAEOE,CACT,EAAE,EAAe,EAEb,GAAatF,GACb,GAAUr+C,GACV,GAASo+C,GAST,GAA+B,SAAUlsE,EAAQ,CACnD,GAAU2mE,EAAiB3mE,CAAM,EAMjC,SAAS2mE,EAAgB7iE,EAAevkB,EAAS,CAC3CA,IAAY,SACdA,EAAU,CAAC,GAGb,IAAIie,EAAQwC,EAAO,KAAK,IAAI,GAAK,KAEjCxC,EAAM,kBAAoB,KAC1BA,EAAM,YAAc,KACpBA,EAAM,MAAQ,GAEd,IAAIk0E,EAAc,GAAS,CAAC,EAAGnyF,CAAO,EAElCge,EAAS,CAAC,EACd,GAAO,QAAQ,SAAUvhB,EAAM,CAC7BuhB,EAAO1H,GAAS,MAAM,OAAO7Z,CAAI,CAAC,CAAC,EAAI,SAAUtB,EAAG,CAClD,OAAO8iB,EAAM,QAAQxhB,EAAMtB,CAAC,CAC9B,CACF,CAAC,EACD,IAAIi3F,EAEApyF,EAAQ,UACV,OAAOA,EAAQ,SACfie,EAAM,MAAQ,GACdm0E,EAAc7tE,IAEd6tE,EAAcj1E,GAAYoH,CAAa,EAAE,cAAc,KAAK,EAC5DA,EAAc,YAAY6tE,CAAW,GAGvCn0E,EAAM,kBAAoB2e,GAAW,GAAoBs1D,GAAe,GAAS,CAC/E,IAAK,GAAIj0E,EAAO,eAAe,CACjC,EAAGk0E,EAAan0E,CAAM,CAAC,EAAGo0E,CAAW,EACrCn0E,EAAM,YAAcm0E,EACpB,IAAItsF,EAASqsF,EAAY,OAEzB,OAAI7+E,GAAQxN,CAAM,GAAKA,EAAO,OAAS,GACrCmY,EAAM,WAAW,EAGZA,CACT,CAEA,IAAIH,EAAUspE,EAAgB,UAE9B,OAAAtpE,EAAQ,SAAW,SAAUsa,EAAOrhB,EAAU,CAC5C,KAAK,cAAc,SAASqhB,EAAOrhB,CAAQ,CAC7C,EAEA+G,EAAQ,YAAc,SAAU/G,EAAU,CACxC,KAAK,cAAc,YAAYA,CAAQ,CACzC,EAEA+G,EAAQ,UAAY,SAAU3iB,EAAG2K,EAAQ,CACnCA,IAAW,SACbA,EAAS3K,EAAE,QAGb,IAAIk3F,EAAgB,KAAK,cAErBA,EAAc,SAChB,KAAK,YAAY,EAGnB,KAAK,YAAY,EAAE,UAAUl3F,EAAG2K,CAAM,CACxC,EAEAgY,EAAQ,QAAU,UAAY,CAC5B,IAAIvJ,EAEA69E,EAAc,KAAK,YACvBx1D,GAAW,KAAMw1D,EAAa,KAAK,iBAAiB,EAE/C,KAAK,QACP79E,EAA+D69E,GAAY,iBAAmB,MAAQ79E,IAAO,QAAkBA,EAAG,YAAY69E,CAAW,EAG5J,KAAK,kBAAoB,KACzB,KAAK,IAAI,EACT,KAAK,YAAc,KACnB,KAAK,cAAgB,IACvB,EAEAt0E,EAAQ,YAAc,UAAY,CAChC,OAAO,KAAK,cAAc,QAC5B,EAEAspE,EAAkB,GAAW,CAACzjE,GAAW,GAAS,SAAUE,EAAWjS,EAAU,CAC3EiS,EAAUjS,CAAQ,IAItBiS,EAAUjS,CAAQ,EAAI,UAAY,CAGhC,QAFIiJ,EAAO,CAAC,EAEHC,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACtCD,EAAKC,CAAE,EAAI,UAAUA,CAAE,EAGzB,IAAImc,EAAO,KAAK,YAAY,EAE5B,GAAI,GAACA,GAAQ,CAACA,EAAKrlB,CAAQ,GAI3B,OAAOqlB,EAAKrlB,CAAQ,EAAE,MAAMqlB,EAAMpc,CAAI,CACxC,EACF,CAAC,EAAG8I,GAAW,GAAY,SAAUE,EAAWjS,EAAU,CACxD,OAAO,eAAeiS,EAAWjS,EAAU,CACzC,IAAK,UAAY,CACf,OAAO,KAAK,YAAY,EAAE,MAAMA,CAAQ,CAC1C,EACA,IAAK,SAAUxX,EAAO,CACpB,IAAIma,EAEJ,KAAK,UAAUA,EAAK,CAAC,EAAGA,EAAG3C,CAAQ,EAAIxX,EAAOma,EAAG,CACnD,EACA,WAAY,GACZ,aAAc,EAChB,CAAC,CACH,CAAC,CAAC,EAAG6yE,CAAe,EACbA,CACT,EAAE,EAAY,EAEV,GAAwB,SAAU3mE,EAAQ,CAC5C,GAAUuxE,EAAUvxE,CAAM,EAE1B,SAASuxE,GAAW,CAClB,OAAOvxE,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,IAC7D,CAEA,OAAOuxE,CACT,EAAE,EAAe,EAEjB,SAAS,GAAelsF,EAAQ+a,EAAWokE,EAAe,CACxD,OAAO,iBAAiBn/E,EAAQ+a,EAAWokE,CAAa,CAC1D,CACA,SAAS,GAASxoF,EAAM8vC,EAAM,CAC5B,OAAO,WAAW9vC,EAAM8vC,CAAI,CAC9B,CC3NA,IAAI,GAAgB,SAAUjuB,EAAGjjB,EAAG,CAClC,UAAgB,OAAO,gBAAkB,CACvC,UAAW,CAAC,CACd,YAAa,OAAS,SAAUijB,EAAGjjB,EAAG,CACpCijB,EAAE,UAAYjjB,CAChB,GAAK,SAAUijB,EAAGjjB,EAAG,CACnB,QAASuiB,KAAKviB,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGuiB,CAAC,IAAGU,EAAEV,CAAC,EAAIviB,EAAEuiB,CAAC,EAC7E,EAEO,GAAcU,EAAGjjB,CAAC,CAC3B,EAEA,SAAS,GAAUijB,EAAGjjB,EAAG,CACvB,GAAI,OAAOA,GAAM,YAAcA,IAAM,KAAM,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EACnI,GAAcijB,EAAGjjB,CAAC,EAElB,SAASmjB,GAAK,CACZ,KAAK,YAAcF,CACrB,CAEAA,EAAE,UAAYjjB,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAKmjB,EAAG,UAAYnjB,EAAE,UAAW,IAAImjB,EACjF,CAmBA,IAAI,GAAS,SAUT,GAAS,SAeb,SAAS,GAASpkB,EAAO,CACvB,OAAOA,GAAS,OAAOA,IAAU,EACnC,CAeA,SAAS,GAAQA,EAAO,CACtB,OAAO,MAAM,QAAQA,CAAK,CAC5B,CAeA,SAAS,GAASA,EAAO,CACvB,OAAO,OAAOA,IAAU,EAC1B,CAcA,SAAS,GAAU0c,EAAKC,EAAUC,EAAc,CAC1CA,IAAiB,SACnBA,EAAe,IAKjB,QAFInF,EAASiF,EAAI,OAER,EAAI,EAAG,EAAIjF,EAAQ,EAAE,EAC5B,GAAIkF,EAASD,EAAI,CAAC,EAAG,EAAGA,CAAG,EACzB,OAAO,EAIX,OAAOE,CACT,CAgBA,SAAS,GAAS+F,EAAIC,EAAMC,EAAUjd,EAAS,CAC7C+c,EAAG,iBAAiBC,EAAMC,EAAUjd,CAAO,CAC7C,CAiBA,SAAS,GAAY+c,EAAIC,EAAMC,EAAUjd,EAAS,CAChD+c,EAAG,oBAAoBC,EAAMC,EAAUjd,CAAO,CAChD,CAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gFAcA,IAAI,GAAW,UAAY,CACzB,UAAW,OAAO,QAAU,SAAkB0d,EAAG,CAC/C,QAAShL,EAAGZ,EAAI,EAAG6L,EAAI,UAAU,OAAQ7L,EAAI6L,EAAG7L,IAAK,CACnDY,EAAI,UAAUZ,CAAC,EAEf,QAAS8L,KAAKlL,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGkL,CAAC,IAAGF,EAAEE,CAAC,EAAIlL,EAAEkL,CAAC,EAC7E,CAEA,OAAOF,CACT,EAEO,GAAS,MAAM,KAAM,SAAS,CACvC,EACA,SAAS,IAAiB,CACxB,QAAShL,EAAI,EAAGZ,EAAI,EAAGa,EAAK,UAAU,OAAQb,EAAIa,EAAIb,IAAKY,GAAK,UAAUZ,CAAC,EAAE,OAE7E,QAAS,EAAI,MAAMY,CAAC,EAAGE,EAAI,EAAGd,EAAI,EAAGA,EAAIa,EAAIb,IAAK,QAAS,EAAI,UAAUA,CAAC,EAAGe,EAAI,EAAGC,EAAK,EAAE,OAAQD,EAAIC,EAAID,IAAKD,IAAK,EAAEA,CAAC,EAAI,EAAEC,CAAC,EAE/H,OAAO,CACT,CAMA,IAAI,GAEJ,UAAY,CACV,SAASgL,GAAe,CACtB,KAAK,QAAU,CAAC,CAClB,CAoBA,IAAIC,EAAUD,EAAa,UAE3B,OAAAC,EAAQ,GAAK,SAAUC,EAAWd,EAAU,CAC1C,GAAI,GAASc,CAAS,EACpB,QAASthB,KAAQshB,EACf,KAAK,GAAGthB,EAAMshB,EAAUthB,CAAI,CAAC,OAG/B,KAAK,UAAUshB,EAAWd,EAAU,CAAC,CAAC,EAGxC,OAAO,IACT,EAqBAa,EAAQ,IAAM,SAAUC,EAAWd,EAAU,CAC3C,GAAI,CAACc,EACH,KAAK,QAAU,CAAC,UACP,GAASA,CAAS,EAC3B,QAASthB,KAAQshB,EACf,KAAK,IAAIthB,CAAI,UAEN,CAACwgB,EACV,KAAK,QAAQc,CAAS,EAAI,CAAC,MACtB,CACL,IAAIC,EAAS,KAAK,QAAQD,CAAS,EAEnC,GAAIC,EAAQ,CACV,IAAI1R,EAAQ,GAAU0R,EAAQ,SAAU7iB,EAAG,CACzC,OAAOA,EAAE,WAAa8hB,CACxB,CAAC,EAEG3Q,EAAQ,IACV0R,EAAO,OAAO1R,EAAO,CAAC,CAE1B,CACF,CAEA,OAAO,IACT,EAmBAwR,EAAQ,KAAO,SAAUC,EAAWd,EAAU,CAC5C,IAAIgB,EAAQ,KAEZ,OAAIhB,GACF,KAAK,UAAUc,EAAWd,EAAU,CAClC,KAAM,EACR,CAAC,EAGI,IAAI,QAAQ,SAAUiB,EAAS,CACpCD,EAAM,UAAUF,EAAWG,EAAS,CAClC,KAAM,EACR,CAAC,CACH,CAAC,CACH,EAuBAJ,EAAQ,KAAO,SAAUC,EAAW/iB,EAAO,CACzC,IAAIijB,EAAQ,KAERjjB,IAAU,SACZA,EAAQ,CAAC,GAGX,IAAIgjB,EAAS,KAAK,QAAQD,CAAS,EAEnC,GAAI,CAACA,GAAa,CAACC,EACjB,MAAO,GAGT,IAAIG,EAAS,GACb,OAAAnjB,EAAM,UAAY+iB,EAElB/iB,EAAM,KAAO,UAAY,CACvBmjB,EAAS,EACX,EAEAnjB,EAAM,cAAgB,KAEtB,GAAegjB,CAAM,EAAE,QAAQ,SAAUpR,EAAM,CAC7CA,EAAK,SAAS5R,CAAK,EAEf4R,EAAK,MACPqR,EAAM,IAAIF,EAAWnR,EAAK,QAAQ,CAEtC,CAAC,EAEM,CAACuR,CACV,EA4CAL,EAAQ,QAAU,SAAUC,EAAW/iB,EAAO,CAC5C,OAAIA,IAAU,SACZA,EAAQ,CAAC,GAGJ,KAAK,KAAK+iB,EAAW/iB,CAAK,CACnC,EAEA8iB,EAAQ,UAAY,SAAUC,EAAWd,EAAUjd,EAAS,CAC1D,IAAIge,EAAS,KAAK,QAClBA,EAAOD,CAAS,EAAIC,EAAOD,CAAS,GAAK,CAAC,EAC1C,IAAIK,EAAYJ,EAAOD,CAAS,EAChCK,EAAU,KAAK,GAAS,CACtB,SAAUnB,CACZ,EAAGjd,CAAO,CAAC,CACb,EAEO6d,CACT,EAAE,EAEF,SAASy0E,GAAqB7tB,EAAI8tB,EAAQ,CACxC,OAAOA,EAAS,CACd,QAAS,CAAC,CACZ,EAAG9tB,EAAG8tB,EAAQA,EAAO,OAAO,EAAGA,EAAO,OACxC,CAEA,IAAIC,GAAUF,GAAqB,SAAUC,EAAQE,EAAS,CAY9D,SAASC,EAAQC,EAAa,CAE5B,GAAIA,GAA4B,OAAOA,GAApB,SAAiC,CAClD,IAAIC,EAAaD,EAAY,OAASA,EAAY,SAAWA,EAAY,SACrEC,IAAYD,EAAcC,EAChC,CAGA,GAAiB,OAAOD,GAApB,SAAiC,OAAOlhE,EAAMkhE,CAAW,EAG7D,IAAIE,EAAS,OAAOF,CAAW,EAG3BG,EAAgBC,EAAMF,EAAO,YAAY,CAAC,EAC9C,GAAIC,EAAe,OAAOA,EAG1B,IAAIA,EAAgBE,EAAQH,EAAO,YAAY,CAAC,EAChD,GAAIC,EAAe,OAAOA,EAG1B,GAAID,EAAO,SAAW,EAAG,OAAOA,EAAO,WAAW,CAAC,CAGrD,CAUAH,EAAQ,WAAa,SAAoB/tF,EAAOsuF,EAAY,CAC1D,GAAItuF,GAAsB,OAAOA,GAApB,SAA2B,CACtC,IAAI+tF,EAAU/tF,EAAM,OAASA,EAAM,SAAWA,EAAM,SACpD,GAAI+tF,GAAY,KAAiC,MAAO,GACxD,GAAI,OAAOO,GAAe,SAAU,CAElC,IAAIH,EAAgBC,EAAME,EAAW,YAAY,CAAC,EAClD,GAAIH,EAAiB,OAAOA,IAAkBJ,EAG9C,IAAII,EAAgBE,EAAQC,EAAW,YAAY,CAAC,EACpD,GAAIH,EAAiB,OAAOA,IAAkBJ,CAChD,SAAW,OAAOO,GAAe,SAC/B,OAAOA,IAAeP,EAExB,MAAO,EACT,CACF,EAEAD,EAAUF,EAAO,QAAUG,EAQ3B,IAAIK,EAAQN,EAAQ,KAAOA,EAAQ,MAAQ,CACzC,UAAa,EACb,IAAO,EACP,MAAS,GACT,MAAS,GACT,KAAQ,GACR,IAAO,GACP,cAAe,GACf,YAAa,GACb,IAAO,GACP,MAAS,GACT,UAAW,GACX,YAAa,GACb,IAAO,GACP,KAAQ,GACR,KAAQ,GACR,GAAM,GACN,MAAS,GACT,KAAQ,GACR,OAAU,GACV,OAAU,GACV,QAAW,GACX,eAAgB,GAChB,gBAAiB,GACjB,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,WAAY,IACZ,cAAe,IACf,cAAe,IACf,gBAAiB,IACjB,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,KAAM,IACN,IAAK,IACL,IAAK,GACP,EAIIO,EAAUP,EAAQ,QAAU,CAC9B,QAAW,GACX,SAAK,GACL,SAAK,GACL,SAAK,GACL,SAAK,GACL,IAAO,GACP,QAAW,GACX,OAAU,GACV,MAAS,GACT,MAAS,GACT,KAAQ,GACR,OAAU,GACV,OAAU,GACV,IAAO,GACP,SAAY,GACZ,KAAQ,GACR,KAAQ,GACR,IAAO,GACP,IAAO,GACP,IAAO,EACT,EAEA;AAAA;AAAA,GAKA,IAAK3gF,EAAI,GAAIA,EAAI,IAAKA,IAAKihF,EAAM,OAAO,aAAajhF,CAAC,CAAC,EAAIA,EAAI,GAG/D,QAASA,EAAI,GAAIA,EAAI,GAAIA,IAAKihF,EAAMjhF,EAAI,EAAE,EAAIA,EAG9C,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAAKihF,EAAM,IAAIjhF,CAAC,EAAIA,EAAI,IAG5C,IAAKA,EAAI,EAAGA,EAAI,GAAIA,IAAKihF,EAAM,UAAUjhF,CAAC,EAAIA,EAAI,GAQlD,IAAI2f,EAAQghE,EAAQ,MAAQA,EAAQ,MAAQ,CAAC,EAG7C,IAAK3gF,KAAKihF,EAAOthE,EAAMshE,EAAMjhF,CAAC,CAAC,EAAIA,EAGnC,QAASohF,KAASF,EAChBD,EAAMG,CAAK,EAAIF,EAAQE,CAAK,CAE9B,CAAC,EACGC,GAAYX,GAAQ,KACpBY,GAAYZ,GAAQ,MACpBa,GAAYb,GAAQ,QACpBc,GAAYd,GAAQ,MACpBe,GAAYf,GAAQ,MAEpBgB,GAAW,CACb,IAAK,OACL,eAAgB,OAChB,gBAAiB,MACnB,EACIC,GAAW,CACb,MAAO,EACP,KAAM,EACN,IAAK,EACL,KAAM,CACR,EAKA,SAASC,GAAOhB,EAASiB,EAAS,CAChC,IAAI74F,GAAOw4F,GAAUZ,CAAO,GAAKiB,GAAW,IAAI,YAAY,EAE5D,QAASl3F,KAAQ+2F,GACf14F,EAAMA,EAAI,QAAQ2B,EAAM+2F,GAAS/2F,CAAI,CAAC,EAGxC,OAAO3B,EAAI,QAAQ,MAAO,EAAE,CAC9B,CAKA,SAAS84F,GAASz4F,EAAGL,EAAK,CACpBA,IAAQ,SACVA,EAAM44F,GAAOv4F,EAAE,QAASA,EAAE,GAAG,GAG/B,IAAI0c,EAAOg8E,GAAiB14F,CAAC,EAC7B,OAAA0c,EAAK,QAAQ/c,CAAG,IAAM,IAAM+c,EAAK,KAAK/c,CAAG,EAClC+c,EAAK,OAAO,OAAO,CAC5B,CAKA,SAASg8E,GAAiB14F,EAAG,CAC3B,IAAI0c,EAAO,CAAC1c,EAAE,UAAY,QAASA,EAAE,SAAW,OAAQA,EAAE,QAAU,MAAOA,EAAE,SAAW,MAAM,EAC9F,OAAO0c,EAAK,OAAO,OAAO,CAC5B,CAEA,SAASi8E,GAAgBj8E,EAAM,CAC7B,IAAIk8E,EAAcl8E,EAAK,MAAM,EAC7B,OAAAk8E,EAAY,KAAK,SAAU/4E,EAAMkQ,EAAM,CACrC,IAAI8oE,EAAYP,GAASz4E,CAAI,GAAK,EAC9Bi5E,EAAYR,GAASvoE,CAAI,GAAK,EAClC,OAAO8oE,EAAYC,CACrB,CAAC,EACMF,CACT,CAEA,IAAIG,GAIAC,GAEJ,SAAU1zE,EAAQ,CAChB,GAAU0zE,EAAe1zE,CAAM,EAM/B,SAAS0zE,EAActzE,EAAW,CAC5BA,IAAc,SAChBA,EAAY,QAGd,IAAI5C,EAAQwC,EAAO,KAAK,IAAI,GAAK,KAEjC,OAAAxC,EAAM,UAAY4C,EAIlB5C,EAAM,QAAU,GAIhBA,EAAM,OAAS,GAKfA,EAAM,SAAW,GAKjBA,EAAM,QAAU,GAEhBA,EAAM,MAAQ,UAAY,CACxB,OAAAA,EAAM,QAAU,GAChBA,EAAM,OAAS,GACfA,EAAM,SAAW,GACjBA,EAAM,QAAU,GACTA,CACT,EAEAA,EAAM,aAAe,SAAU9iB,EAAG,CAChC8iB,EAAM,aAAa,UAAW9iB,CAAC,CACjC,EAEA8iB,EAAM,WAAa,SAAU9iB,EAAG,CAC9B8iB,EAAM,aAAa,QAAS9iB,CAAC,CAC/B,EAEA8iB,EAAM,KAAO,UAAY,CACvBA,EAAM,MAAM,EAEZA,EAAM,QAAQ,MAAM,CACtB,EAEA,GAAS4C,EAAW,OAAQ5C,EAAM,IAAI,EACtC,GAAS4C,EAAW,UAAW5C,EAAM,YAAY,EACjD,GAAS4C,EAAW,QAAS5C,EAAM,UAAU,EACtCA,CACT,CAEA,IAAIH,EAAUq2E,EAAc,UAC5B,cAAO,eAAeA,EAAe,SAAU,CAG7C,IAAK,UAAY,CACf,OAAOD,KAAwBA,GAAsB,IAAIC,EAC3D,EACA,WAAY,GACZ,aAAc,EAChB,CAAC,EAEDA,EAAc,UAAY,UAAY,CACpC,OAAO,KAAK,MACd,EAMAr2E,EAAQ,QAAU,UAAY,CAC5B,IAAI+C,EAAY,KAAK,UACrB,KAAK,MAAM,EACX,KAAK,IAAI,EACT,GAAYA,EAAW,OAAQ,KAAK,IAAI,EACxC,GAAYA,EAAW,UAAW,KAAK,YAAY,EACnD,GAAYA,EAAW,QAAS,KAAK,UAAU,CACjD,EAMA/C,EAAQ,QAAU,SAAUs2E,EAAMr9E,EAAU,CAC1C,OAAO,KAAK,SAAS,UAAWq9E,EAAMr9E,CAAQ,CAChD,EAMA+G,EAAQ,WAAa,SAAUs2E,EAAMr9E,EAAU,CAC7C,OAAO,KAAK,YAAY,UAAWq9E,EAAMr9E,CAAQ,CACnD,EAMA+G,EAAQ,SAAW,SAAUs2E,EAAMr9E,EAAU,CAC3C,OAAO,KAAK,YAAY,QAASq9E,EAAMr9E,CAAQ,CACjD,EAMA+G,EAAQ,MAAQ,SAAUs2E,EAAMr9E,EAAU,CACxC,OAAO,KAAK,SAAS,QAASq9E,EAAMr9E,CAAQ,CAC9C,EAEA+G,EAAQ,SAAW,SAAUd,EAAMo3E,EAAMr9E,EAAU,CACjD,OAAI,GAAQq9E,CAAI,EACd,KAAK,GAAGp3E,EAAO,IAAM82E,GAAgBM,CAAI,EAAE,KAAK,GAAG,EAAGr9E,CAAQ,EACrD,GAASq9E,CAAI,EACtB,KAAK,GAAGp3E,EAAO,IAAMo3E,EAAMr9E,CAAQ,EAEnC,KAAK,GAAGiG,EAAMo3E,CAAI,EAGb,IACT,EAEAt2E,EAAQ,YAAc,SAAUd,EAAMo3E,EAAMr9E,EAAU,CACpD,OAAI,GAAQq9E,CAAI,EACd,KAAK,IAAIp3E,EAAO,IAAM82E,GAAgBM,CAAI,EAAE,KAAK,GAAG,EAAGr9E,CAAQ,EACtD,GAASq9E,CAAI,EACtB,KAAK,IAAIp3E,EAAO,IAAMo3E,EAAMr9E,CAAQ,EAEpC,KAAK,IAAIiG,EAAMo3E,CAAI,EAGd,IACT,EAEAt2E,EAAQ,aAAe,SAAUd,EAAM7hB,EAAG,CACxC,KAAK,QAAUA,EAAE,QACjB,KAAK,SAAWA,EAAE,SAClB,KAAK,OAASA,EAAE,OAChB,KAAK,QAAUA,EAAE,QACjB,IAAIL,EAAM44F,GAAOv4F,EAAE,QAASA,EAAE,GAAG,EAC7Bk5F,EAAWv5F,IAAQ,QAAUA,IAAQ,SAAWA,IAAQ,QAAUA,IAAQ,MAC1EE,EAAQ,CACV,IAAKF,EACL,SAAUu5F,EACV,WAAYl5F,EACZ,QAASA,EAAE,QACX,QAASA,EAAE,QACX,OAAQA,EAAE,OACV,SAAUA,EAAE,SACZ,QAASA,EAAE,OACb,EACA,KAAK,QAAQ6hB,EAAMhiB,CAAK,EACxB,KAAK,QAAQgiB,EAAO,IAAMliB,EAAKE,CAAK,EACpC,IAAIs5F,EAAQV,GAASz4F,EAAGL,CAAG,EAC3Bw5F,EAAM,OAAS,GAAK,KAAK,QAAQt3E,EAAO,IAAMs3E,EAAM,KAAK,GAAG,EAAGt5F,CAAK,CACtE,EAEOm5F,CACT,EAAE,EAAY,EAEd,SAAeA,GC71Bf,IAAI,GAAgB,SAAU71E,EAAGjjB,EAAG,CAClC,UAAgB,OAAO,gBAAkB,CACvC,UAAW,CAAC,CACd,YAAa,OAAS,SAAUijB,EAAGjjB,EAAG,CACpCijB,EAAE,UAAYjjB,CAChB,GAAK,SAAUijB,EAAGjjB,EAAG,CACnB,QAASuiB,KAAKviB,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGuiB,CAAC,IAAGU,EAAEV,CAAC,EAAIviB,EAAEuiB,CAAC,EAC7E,EAEO,GAAcU,EAAGjjB,CAAC,CAC3B,EAEA,SAAS,GAAUijB,EAAGjjB,EAAG,CACvB,GAAI,OAAOA,GAAM,YAAcA,IAAM,KAAM,MAAM,IAAI,UAAU,uBAAyB,OAAOA,CAAC,EAAI,+BAA+B,EACnI,GAAcijB,EAAGjjB,CAAC,EAElB,SAASmjB,GAAK,CACZ,KAAK,YAAcF,CACrB,CAEAA,EAAE,UAAYjjB,IAAM,KAAO,OAAO,OAAOA,CAAC,GAAKmjB,EAAG,UAAYnjB,EAAE,UAAW,IAAImjB,EACjF,CACA,IAAI,GAAW,UAAY,CACzB,UAAW,OAAO,QAAU,SAAkBd,EAAG,CAC/C,QAAShL,EAAGZ,EAAI,EAAG6L,EAAI,UAAU,OAAQ7L,EAAI6L,EAAG7L,IAAK,CACnDY,EAAI,UAAUZ,CAAC,EAEf,QAAS8L,KAAKlL,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGkL,CAAC,IAAGF,EAAEE,CAAC,EAAIlL,EAAEkL,CAAC,EAC7E,CAEA,OAAOF,CACT,EAEO,GAAS,MAAM,KAAM,SAAS,CACvC,EACA,SAAS,GAAOhL,EAAG,EAAG,CACpB,IAAIgL,EAAI,CAAC,EAET,QAASE,KAAKlL,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAGkL,CAAC,GAAK,EAAE,QAAQA,CAAC,EAAI,IAAGF,EAAEE,CAAC,EAAIlL,EAAEkL,CAAC,GAE/F,GAAIlL,GAAK,MAAQ,OAAO,OAAO,uBAA0B,WAAY,QAAS,EAAI,EAAGkL,EAAI,OAAO,sBAAsBlL,CAAC,EAAG,EAAIkL,EAAE,OAAQ,IAClI,EAAE,QAAQA,EAAE,CAAC,CAAC,EAAI,GAAK,OAAO,UAAU,qBAAqB,KAAKlL,EAAGkL,EAAE,CAAC,CAAC,IAAGF,EAAEE,EAAE,CAAC,CAAC,EAAIlL,EAAEkL,EAAE,CAAC,CAAC,GAElG,OAAOF,CACT,CACA,SAAS,GAAWyK,EAAYriB,EAAQhL,EAAKstB,EAAM,CACjD,IAAI/b,EAAI,UAAU,OACdmP,EAAInP,EAAI,EAAIvG,EAASsiB,IAAS,KAAOA,EAAO,OAAO,yBAAyBtiB,EAAQhL,CAAG,EAAIstB,EAC3F9J,EACJ,GAAI,OAAO,SAAY,UAAY,OAAO,QAAQ,UAAa,WAAY9C,EAAI,QAAQ,SAAS2M,EAAYriB,EAAQhL,EAAKstB,CAAI,MAAO,SAAStW,EAAIqW,EAAW,OAAS,EAAGrW,GAAK,EAAGA,KAASwM,EAAI6J,EAAWrW,CAAC,KAAG0J,GAAKnP,EAAI,EAAIiS,EAAE9C,CAAC,EAAInP,EAAI,EAAIiS,EAAExY,EAAQhL,EAAK0gB,CAAC,EAAI8C,EAAExY,EAAQhL,CAAG,IAAM0gB,GAC/Q,OAAOnP,EAAI,GAAKmP,GAAK,OAAO,eAAe1V,EAAQhL,EAAK0gB,CAAC,EAAGA,CAC9D,CACA,SAAS,GAAc8M,EAAIC,EAAMC,EAAM,CACrC,GAAIA,GAAQ,UAAU,SAAW,EAAG,QAAS1W,EAAI,EAAG+J,EAAI0M,EAAK,OAAQE,EAAI3W,EAAI+J,EAAG/J,KAC1E2W,GAAM,EAAE3W,KAAKyW,MACVE,IAAIA,EAAK,MAAM,UAAU,MAAM,KAAKF,EAAM,EAAGzW,CAAC,GACnD2W,EAAG3W,CAAC,EAAIyW,EAAKzW,CAAC,GAGlB,OAAOwW,EAAG,OAAOG,GAAM,MAAM,UAAU,MAAM,KAAKF,CAAI,CAAC,CACzD,CAEA,SAAS,GAAUptB,EAAG,CACpB,GAAI,YAAaA,EAAG,CAClB,IAAIo5F,EAAQp5F,EAAE,QAAQ,CAAC,GAAKA,EAAE,eAAe,CAAC,EAC9C,MAAO,CACL,QAASo5F,EAAM,QACf,QAASA,EAAM,OACjB,CACF,KACE,OAAO,CACL,QAASp5F,EAAE,QACX,QAASA,EAAE,OACb,CAEJ,CACA,SAASq5F,GAAiB19E,EAAK,CAC7B,GAAI,OAAO,IAAQ,IACjB,OAAOA,EAAI,OAAO,SAAU1c,EAAOkS,EAAO,CACxC,OAAOwK,EAAI,QAAQ1c,CAAK,IAAMkS,CAChC,CAAC,EAGH,IAAImoF,EAAM,IAAI,IACd,OAAO39E,EAAI,OAAO,SAAU1c,EAAO,CACjC,OAAIq6F,EAAI,IAAIr6F,CAAK,EACR,IAGTq6F,EAAI,IAAIr6F,EAAO,EAAI,EACZ,GACT,CAAC,CACH,CACA,SAASs6F,GAAiBC,EAAUt1E,EAASC,EAAS,CACpD,IAAI7N,EAAM0L,GAAYw3E,CAAQ,EAC9B,OAAOljF,EAAI,kBAAoBA,EAAI,iBAAiB4N,EAASC,CAAO,GAAK,IAC3E,CACA,SAAS,GAAcs1E,EAAKhK,EAAY/pE,EAAW,CACjD,IAAI+qB,EAAMgpD,EAAI,IACVn5D,EAAWm5D,EAAI,SACfliE,EAAakiE,EAAI,WACjBt4E,EAAYs4E,EAAI,UAChBtuF,EAAQsuF,EAAI,MACZ73E,EAAK6tE,GAAcztE,GAAY0D,CAAS,EAAE,cAAc+qB,CAAG,EAE/D,QAASnvC,KAAQi2B,EACf3V,EAAG,aAAatgB,EAAMi2B,EAAWj2B,CAAI,CAAC,EAGxC,IAAIo4F,EAAa93E,EAAG,SAapB,GAZA0e,EAAS,QAAQ,SAAU/D,EAAO5lB,EAAG,CACnC,GAAc4lB,EAAOm9D,EAAW/iF,CAAC,EAAGiL,CAAE,CACxC,CAAC,EAEGT,GACFA,EAAU,MAAM,MAAM,EAAE,QAAQ,SAAU7f,EAAM,CAC1CA,GAAQ,CAAC4f,GAASU,EAAItgB,CAAI,GAC5B8f,GAASQ,EAAItgB,CAAI,CAErB,CAAC,EAGC6J,EAAO,CACT,IAAIwuF,EAAU/3E,EAAG,MAEjB,QAAStgB,KAAQ6J,EACfwuF,EAAQr4F,CAAI,EAAI6J,EAAM7J,CAAI,CAE9B,CAEA,MAAI,CAACmuF,GAAc/pE,GACjBA,EAAU,YAAY9D,CAAE,EAGnBA,CACT,CACA,SAASxB,GAAEqwB,EAAKmpD,EAAO,CAGrB,QAFIt5D,EAAW,CAAC,EAEP3gB,EAAK,EAAGA,EAAK,UAAU,OAAQA,IACtC2gB,EAAS3gB,EAAK,CAAC,EAAI,UAAUA,CAAE,EAGjC,IAAIvG,EAAKwgF,GAAS,CAAC,EACflgF,EAAKN,EAAG,UACR+H,EAAYzH,IAAO,OAAS,GAAKA,EACjCG,EAAKT,EAAG,MACRjO,EAAQ0O,IAAO,OAAS,CAAC,EAAIA,EAC7B0d,EAAa,GAAOne,EAAI,CAAC,YAAa,OAAO,CAAC,EAElD,MAAO,CACL,IAAKq3B,EACL,UAAWtvB,EACX,MAAOhW,EACP,WAAYosB,EACZ,SAAU+I,CACZ,CACF,CACA,SAASu5D,GAAUh6E,EAAMC,EAAK0d,EAAM,CAC9B3d,IAASC,GACX0d,EAAK3d,EAAMC,CAAG,CAElB,CACA,SAAS,GAAQ9f,EAAGwd,EAAOs8E,EAAW,CACpC,IAAI1gF,EAEA0gF,IAAc,SAChBA,EAAY95F,EAAE,KAAK,WAGrB,IAAI0Z,EAAK1Z,EAAE,MACP0e,EAAQhF,IAAO,OAAS,EAAIA,EAC5BG,EAAK7Z,EAAE,MACP2e,EAAQ9E,IAAO,OAAS,EAAIA,EAC5BE,EAAK/Z,EAAE,KACPwkB,EAASzK,EAAG,OACZ0K,EAAS1K,EAAG,OAEhB,GAAIyD,EAAQ,EAAG,CACb,IAAI+4C,EAAa,KAAK,MAAM73C,EAAQA,EAAQC,EAAQA,IAAU,EAAInB,EAAQA,EAAM,EAC5E84C,EAAY94C,EAAQ+4C,EACxB73C,GAASA,GAAS,EAAI,EAAI,IAAM43C,EAChC33C,GAASA,GAAS,EAAI,EAAI,IAAM43C,CAClC,CAEA,IAAI5nD,EAAQ,KAAK,IAAI+P,CAAK,EACtB5T,EAAS,KAAK,IAAI6T,CAAK,EACvBT,EAAWQ,EAAQ,EAAI8F,EAASs1E,EAAU,KAAOA,EAAU,MAAQt1E,EACnErG,EAAYQ,EAAQ,EAAI8F,EAASq1E,EAAU,IAAMA,EAAU,OAASr1E,EACxErL,EAAKwE,GAAmB,CAACjP,EAAO7D,CAAM,EAAG,CAAC,EAAG,CAAC,EAAG,CAACoT,EAAUC,CAAS,EAAG,CAAC,CAACX,CAAK,EAAG7O,EAAQyK,EAAG,CAAC,EAAGtO,EAASsO,EAAG,CAAC,EAC9GsF,GAASA,GAAS,EAAI,EAAI,IAAM/P,EAChCgQ,GAASA,GAAS,EAAI,EAAI,IAAM7T,EAChC,IAAIw7B,EAAK,KAAK,IAAI,EAAG5nB,CAAK,EACtB6nB,EAAK,KAAK,IAAI,EAAG5nB,CAAK,EACtB5L,EAAOyR,EAAS8hB,EAChBtzB,EAAMyR,EAAS8hB,EACnB,MAAO,CACL,KAAMxzB,EACN,IAAKC,EACL,MAAOD,EAAOpE,EACd,OAAQqE,EAAMlI,EACd,MAAO6D,EACP,OAAQ7D,CACV,CACF,CACA,SAASivF,GAAsBn4E,EAAI,CACjC,IAAItV,EAAOsV,EAAG,sBAAsB,EAChC7O,EAAOzG,EAAK,KACZ0G,EAAM1G,EAAK,IACXqC,EAAQrC,EAAK,MACbxB,EAASwB,EAAK,OAClB,MAAO,CACL,KAAM,CAACyG,EAAMC,CAAG,EAChB,KAAM,CAACD,EAAOpE,EAAOqE,CAAG,EACxB,KAAM,CAACD,EAAMC,EAAMlI,CAAM,EACzB,KAAM,CAACiI,EAAOpE,EAAOqE,EAAMlI,CAAM,CACnC,CACF,CACA,SAASkvF,GAAYC,EAAeC,EAAcC,EAA+B,CAC/E,IAAI/gF,EAAK,GAAK6gF,EAAeC,CAAY,EACrCthE,EAAOxf,EAAG,KACVuf,EAAWvf,EAAG,SACdyf,EAAQzf,EAAG,MACX0f,EAAU1f,EAAG,QACb2f,EAAa3f,EAAG,WAEpB,OAAO,GAAc,GAAc,GAAc,CAAC,EAAGyf,EAAM,IAAI,SAAU1nB,EAAO,CAC9E,OAAOynB,EAAKznB,CAAK,CACnB,CAAC,EAAG,EAAI,EAAG2nB,EAAQ,IAAI,SAAU3nB,EAAO,CACtC,OAAOwnB,EAASxnB,CAAK,CACvB,CAAC,EAAG,EAAI,EAAGgpF,EAAgCphE,EAAW,IAAI,SAAU3f,EAAI,CACtE,IAAID,EAAYC,EAAG,CAAC,EACpB,OAAOwf,EAAKzf,CAAS,CACvB,CAAC,EAAI,CAAC,EAAG,EAAI,CACf,CACA,SAASihF,GAAYv7E,EAAQ,CAI3B,QAHIxH,EAAO,EACPX,EAASmI,EAAO,OAEXlI,EAAI,EAAGA,EAAID,EAAQ,EAAEC,EAC5BU,EAAO,KAAK,IAAI,GAAQwH,EAAOlI,CAAC,EAAGkI,EAAOlI,EAAI,CAAC,CAAC,EAAGU,CAAI,EAGzD,OAAOA,CACT,CAEA,IAAI,GAAW,GAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAA4M,EAK9N,GAAa,qBAAqB,OAAO,GAAS,SAAS,EAC3D,GAAa,CAAC,YAAa,iBAAkB,oBAAqB,gBAAiB,mBAAoB,iBAAkB,gCAAiC,uBAAwB,sCAAuC,eAAgB,UAAW,gBAAiB,aAAc,iBAAkB,QAAS,iBAAkB,wBAAyB,gBAAiB,gBAAiB,mBAAoB,gBAAiB,oBAAoB,EAKpb,GAAU,GAAc,CAC5B,gBAAiB,WAAY,0BAA2B,+BAAgC,mBAAmB,EAAG,GAAY,EAAI,EAC1HgjF,GAAe,CACjB,UAAW,OACX,eAAgB,KAChB,gBAAiB,KACjB,UAAW,KACX,cAAe,KACf,kBAAmB,MACnB,cAAe,QACf,iBAAkB,QAClB,eAAgB,QAChB,qBAAsB,MACtB,oCAAqC,MACrC,aAAc,KACd,QAAS,OACT,cAAe,OACf,WAAY,QACZ,eAAgB,QAChB,SAAU,OACV,MAAO,OACP,eAAgB,SAChB,sBAAuB,QACvB,cAAe,OACf,cAAe,SACf,iBAAkB,QAClB,8BAA+B,QAC/B,6BAA8B,QAC9B,wBAAyB,QACzB,cAAe,QACf,mBAAoB,MACtB,EAKI,GAAS,KAKT,GAAU,KAQVC,GAEJ,SAAUh1E,EAAQ,CAChB,GAAUg1E,EAASh1E,CAAM,EAMzB,SAASg1E,EAAQz1F,EAAS,CACpBA,IAAY,SACdA,EAAU,CAAC,GAGb,IAAIie,EAAQwC,EAAO,KAAK,IAAI,GAAK,KAEjCxC,EAAM,gBAAkB,CAAC,EACzBA,EAAM,WAAa,IAAI,GAEvBA,EAAM,aAAe,SAAU9iB,EAAGu6F,EAAe,CAC/C,IAAIh5F,EAAOvB,EAAE,KACTkkB,EAAUlkB,EAAE,QACZmkB,EAAUnkB,EAAE,QACZunB,EAAavnB,EAAE,WACfoZ,EAAK0J,EAAM,QACX03E,EAAmBphF,EAAG,iBACtBqhF,EAAgBrhF,EAAG,cACnB0wE,EAAgB1wE,EAAG,cACnBshF,EAAiBthF,EAAG,eACpBM,EAAKN,EAAG,sBACRuhF,EAAwBjhF,IAAO,OAAS,GAAOA,EAC/CkhF,EAAmBxhF,EAAG,iBACtByhF,EAAgBzhF,EAAG,cAEvB,GAAIyhF,GAAiB,CAACA,EAAc76F,CAAC,EAAG,CACtCA,EAAE,KAAK,EACP,MACF,CAEAuB,EAAK,KAAO,CAAC,EACb,IAAI0mB,EAAMvG,GAAUoB,EAAM,SAAS,EACnCvhB,EAAK,WAAa0mB,EAAI,WACtB1mB,EAAK,YAAc0mB,EAAI,YAEvBnF,EAAM,sBAAsBvhB,CAAI,EAEhCA,EAAK,qBAAuBuhB,EAAM,gBAClCvhB,EAAK,YAAc2mC,GAAa,EAChC3mC,EAAK,WAAa,EAClBA,EAAK,WAAa,EAClB,IAAImkB,EAAY5C,EAAM,UAClBg3E,EAAY,CACd,KAAM,KACN,IAAK,KACL,MAAO,IACP,OAAQ,GACV,EAEA,GAAIhQ,EAAe,CACjB,IAAI/kC,EAAgBjiC,EAAM,UAAU,sBAAsB,EAE1DvhB,EAAK,WAAawjD,EAAc,KAChCxjD,EAAK,WAAawjD,EAAc,IAChCxjD,EAAK,YAAcknC,GAAqB3lB,EAAM,UAAWgnE,CAAa,CACxE,CAEA,GAAI4Q,EAAgB,CAClB,IAAIlsC,EAAYt2C,GAASwiF,CAAc,GAAK,YAAaA,EAAiB,GAAS,CACjF,KAAM,GACN,IAAK,GACL,OAAQ,GACR,MAAO,EACT,EAAGA,CAAc,EAAI,CACnB,QAASA,EACT,KAAM,GACN,IAAK,GACL,OAAQ,GACR,MAAO,EACT,EACII,EAAetsC,EAAU,QACzBusC,EAAc,OAElB,GAAID,EAAc,CACZ,GAASA,CAAY,EACvBC,EAAc/4E,GAAY0D,CAAS,EAAE,cAAco1E,CAAY,EACtDA,IAAiB,GAC1BC,EAAcj4E,EAAM,UAEpBi4E,EAAcD,EAGhB,IAAIxuF,EAAOyuF,EAAY,sBAAsB,EAEzCvsC,EAAU,OACZsrC,EAAU,KAAOxtF,EAAK,MAGpBkiD,EAAU,MACZsrC,EAAU,IAAMxtF,EAAK,KAGnBkiD,EAAU,QACZsrC,EAAU,MAAQxtF,EAAK,OAGrBkiD,EAAU,SACZsrC,EAAU,OAASxtF,EAAK,OAE5B,CACF,CAEA/K,EAAK,UAAYu4F,EACjB,IAAIkB,EAAU,CACZ,KAAM92E,EACN,IAAKC,EACL,MAAOD,EACP,OAAQC,EACR,MAAO,EACP,OAAQ,CACV,EACI82E,EAAqB,CAAC,EAEtBC,EAAwBT,GAAiB,CAACG,EAC1CO,EAAmB,GAEvB,GAAI,CAACX,GAAoBU,EAAuB,CAC9C,IAAIE,EAAct4E,EAAM,aAAay3E,GAAiBhzE,EAAW,OACjEhmB,EAAK,iBAAiB,EAEtB45F,EAAmB,CAAC,CAACC,EAEjBF,IACFD,EAAqBG,EAAc,CAACA,CAAW,EAAI,CAAC,EAExD,CAEA,IAAIC,EAAkB,CAACb,GAAoBW,EAE3C,GAAIE,GAAmB,CAACZ,EACtB,OAAAz6F,EAAE,KAAK,EACA,GAGT,IAAI6hB,EAAO0F,EAAW,KAClB/B,EAAY3D,IAAS,aAAeA,IAAS,aA8B7C8E,EAAS,CAAC3mB,EAAE,SAAWwlB,EAAY1C,EAAM,KAAK,YAAa,GAAS,GAAS,CAAC,EAAG9iB,CAAC,EAAG,CACvF,KAAMuB,EAAK,IACb,CAAC,CAAC,EAAI,GAEN,GAAI,CAAColB,EACH,OAAA3mB,EAAE,KAAK,EACA,GAiBT,GAdI8iB,EAAM,gBACRm4E,EAAqBjB,GAAYl3E,EAAM,gBAAiBm4E,EAAoBn4E,EAAM,6BAA6B,EAC/GvhB,EAAK,mBAAqBuhB,EAAM,iBAEhCvhB,EAAK,mBAAqB,CAAC,EAG7BuhB,EAAM,QAAQm4E,EAAoBD,EAASh7F,EAAG,GAAMq7F,GAAmBZ,GAAiB,CAACG,GAAoBD,CAAqB,EAElIp5F,EAAK,OAAS2iB,EACd3iB,EAAK,OAAS4iB,EACd5iB,EAAK,WAAa,GAClBA,EAAK,sBAAwB,GAEzBgmB,EAAW,OAAQ,CACrB,IAAI40B,EAAY5T,GAAoBhnC,EAAK,YAAa,CAAC2iB,EAAU3iB,EAAK,WAAY4iB,EAAU5iB,EAAK,UAAU,CAAC,EAC5GuhB,EAAM,OAAO,MAAM,SAAW,aAAa,OAAOgnE,EAAgB,WAAa,QAAS,GAAG,EAAI,oBAAsB,wBAAwB,OAAO3tC,EAAU,CAAC,EAAG,MAAM,EAAE,OAAOA,EAAU,CAAC,EAAG,KAAK,CACtM,CAEA,GAAIk/C,GAAmBZ,GAAiB,CAACG,EACvCrzE,EAAW,eAAe,EAEtBozE,IACF73E,EAAM,WAAWvhB,EAAK,qBAAsBA,EAAK,mBAAoBy5F,EAASh7F,EAAG,EAAI,EAErFuB,EAAK,sBAAwB,QAE1B,CACLA,EAAK,WAAa,GAKlB,IAAIsY,EAAKiJ,EAAM,QACXo2D,EAAgBr/D,EAAG,cACnByhF,EAAqBzhF,EAAG,mBACxB0hF,GAAgB,GAEpB,GAAID,EAAoB,CAMtB,QALIE,GAAex7F,EAAE,WACjB2K,GAAS6wF,GAAa,OACtBC,GAAqB,KACrBryE,EAAgBze,GAEbye,GAAiBA,IAAkBpH,GAAY0D,CAAS,EAAE,MAAM,CACrE,IAAI26C,GAAW,iBAAiBj3C,CAAa,EAAE,WAAa,UAE5D,GAAIi3C,GAAU,CACZo7B,GAAqBryE,EACrB,KACF,CAEAA,EAAgBA,EAAc,aAChC,CAEIqyE,KACFl6F,EAAK,mBAAqB,GAAS,CACjC,UAAWk6F,GACX,iBAAkB,EACpB,EAAGH,IAAuB,GAAO,CAAC,EAAIA,CAAkB,EAExDx4E,EAAM,WAAW,UAAU9iB,EAAGuB,EAAK,kBAAkB,EAErDg6F,GAAgB,GAEpB,CAEI,CAACA,IAAiBriB,GAAiBA,EAAc,WACnDp2D,EAAM,WAAW,UAAU9iB,EAAGk5E,CAAa,EAGzCmiB,GAAmBZ,GAAiBG,IACtCr5F,EAAK,WAAa,GAClBvB,EAAE,YAAY,EAElB,CAEA,MAAO,EACT,EAEA8iB,EAAM,QAAU,SAAU9iB,EAAG,CAC3B,GAAIA,EAAE,KAAK,WAAY,CACrB,IAAIk5E,EAAgBp2D,EAAM,cACtBw4E,EAAqBt7F,EAAE,KAAK,mBAC5B07F,EAAmBJ,GAAqFpiB,GAAc,UAE1H,GAAIwiB,GAAoB,CAAC17F,EAAE,UAAY8iB,EAAM,WAAW,KAAK9iB,EAAGs7F,GAAsBpiB,CAAa,EACjG,MAEJ,CAEAp2D,EAAM,eAAe9iB,CAAC,CACxB,EAEA8iB,EAAM,WAAa,SAAU9iB,EAAG,CAC9B,IAAIuB,EAAOvB,EAAE,KACTunB,EAAavnB,EAAE,WACfsM,EAAO,GAAQtM,EAAG8iB,EAAM,QAAQ,KAAK,EACrC64E,EAAap6F,EAAK,WAClBmkB,EAAY5C,EAAM,UAsBtB,GAdIyE,GACFzE,EAAM,KAAK,UAAW,GAAS,GAAS,CACtC,SAAU,CAAC,CAAC9iB,EAAE,SACd,QAAS,CAAC,CAACA,EAAE,QACb,OAAQ,GACR,SAAU27F,CACZ,EAAG37F,CAAC,EAAG,CACL,KAAMuB,EAAK,KACX,KAAM+K,CACR,CAAC,CAAC,EAGJwW,EAAM,OAAO,MAAM,SAAW,iBAE1B64E,EACFp6F,EAAK,WAAa,GAElBuhB,EAAM,WAAW,QAAQ,UAChBA,EAAM,eAAiBA,EAAM,iBAAkB,CAExD,IAAIs4E,EAAct4E,EAAM,aAAsEyE,GAAW,QAAWgyE,GAAiB7zE,EAAW1lB,EAAE,QAASA,EAAE,OAAO,EAAGuB,EAAK,iBAAiB,EAE7LuhB,EAAM,QAAQs4E,EAAc,CAACA,CAAW,EAAI,CAAC,EAAG9uF,EAAMtM,CAAC,CACzD,CAEKuB,EAAK,uBACRuhB,EAAM,WAAWvhB,EAAK,qBAAsBA,EAAK,mBAAoB+K,EAAMtM,CAAC,CAEhF,EAEA8iB,EAAM,WAAa,SAAU9iB,EAAG,CAC9B,IAAI6E,EAAUie,EAAM,QAChB84E,EAAY,GAEhB,GAAI,CAAC94E,EAAM,uBAAwB,CACjC,IAAI6D,EAAS7D,EAAM,cAAc9iB,EAAG6E,EAAQ,oBAAoB,EAEhEie,EAAM,uBAAyB6D,EAC/Bi1E,IAAcA,EAAYj1E,EAC5B,CAEA,GAAI,CAAC7D,EAAM,yCAA0C,CACnD,IAAI6D,EAAS7D,EAAM,cAAc9iB,EAAG6E,EAAQ,mCAAmC,EAE/Eie,EAAM,yCAA2C6D,EACjDi1E,IAAcA,EAAYj1E,EAC5B,CAEKi1E,GA+BL94E,EAAM,KAAK,UAAW,CACpB,sBAAuBA,EAAM,uBAC7B,wCAAyCA,EAAM,wCACjD,CAAC,CACH,EAEAA,EAAM,SAAW,SAAU9iB,EAAG,CAC5B,IAAI6E,EAAUie,EAAM,QAChB+4E,EAAU,GAEd,GAAI/4E,EAAM,uBAAwB,CAChC,IAAI6D,EAAS7D,EAAM,cAAc9iB,EAAG6E,EAAQ,qBAAsB,EAAI,EAEtEie,EAAM,uBAAyB,CAAC6D,EAChCk1E,IAAYA,EAAUl1E,EACxB,CAEA,GAAI7D,EAAM,yCAA0C,CAClD,IAAI6D,EAAS7D,EAAM,cAAc9iB,EAAG6E,EAAQ,oCAAqC,EAAI,EAErFie,EAAM,yCAA2C,CAAC6D,EAClDk1E,IAAYA,EAAUl1E,EACxB,CAEKk1E,GA+BL/4E,EAAM,KAAK,QAAS,CAClB,sBAAuBA,EAAM,uBAC7B,wCAAyCA,EAAM,wCACjD,CAAC,CACH,EAEAA,EAAM,QAAU,UAAY,EACtBA,EAAM,wBAA0BA,EAAM,4CACxCA,EAAM,uBAAyB,GAC/BA,EAAM,yCAA2C,GAEjDA,EAAM,KAAK,QAAS,CAClB,sBAAuBA,EAAM,uBAC7B,wCAAyCA,EAAM,wCACjD,CAAC,EAEL,EAEAA,EAAM,uBAAyB,SAAU9iB,EAAG,CAC1C,IAAIsW,EAAM0L,GAAYc,EAAM,SAAS,EAErC,GAAKA,EAAM,MAAM,OAAO,EAIxB,KAAI4mE,EAAgB5mE,EAAM,cAEtB4mE,IAAkBhoE,GAAUoB,EAAM,SAAS,IAC7C4mE,EAAgBpzE,EAAI,iBAGtB,IAAIwlF,EAAaz5E,GAAOqnE,CAAa,EAAI,CAACA,CAAa,EAAI,CAAC,EAAE,MAAM,KAAKA,CAAa,EAClF/+E,EAAS3K,EAAE,OACf87F,EAAW,KAAK,SAAUp2E,EAAW,CACnC,GAAIA,IAAc/a,GAAU+a,EAAU,SAAS/a,CAAM,EACnD,OAAA3K,EAAE,eAAe,EACV,EAEX,CAAC,EACH,EAEA8iB,EAAM,OAASje,EAAQ,gBACvB,IAAI6gB,EAAY7gB,EAAQ,UACxBie,EAAM,QAAU,GAAS,CACvB,UAAW,GACX,gBAAiB,KACjB,UAAW,KACX,cAAe,KACf,kBAAmB,CAAC,EACpB,cAAe,GACf,iBAAkB,GAClB,iBAAkB,GAClB,QAAS,IACT,eAAgB,GAChB,8BAA+B,GAC/B,qBAAsB,KACtB,oCAAqC,KACrC,aAAc,KACd,cAAe,KACf,WAAY,GACZ,eAAgB,GAChB,eAAgB,GAChB,sBAAuB,GACvB,cAAe,KACf,cAAe,KACf,cAAe,GACf,mBAAoB,GACpB,eAAgBi3E,GAChB,SAAU,GACV,MAAO,CACT,EAAGl1F,CAAO,EACV,IAAIk3F,EAAkBj5E,EAAM,QAAQ,gBAEpC,OAAIi5E,IACFr2E,EAAYq2E,EAAgB,eAG9Bj5E,EAAM,UAAY4C,GAAa,SAAS,KAExC5C,EAAM,YAAY,EAElBA,EAAM,eAAe,EAErBA,EAAM,iBAAiB,EAEhBA,CACT,CAOA,IAAIH,EAAU23E,EAAQ,UAEtB,OAAA33E,EAAQ,mBAAqB,SAAUq5E,EAAiB,CACtD,IAAIC,EAAiB,KAAK,gBAEtB7iF,EAAK,GAAK6iF,EAAgBD,CAAe,EACzCnjE,EAAQzf,EAAG,MACX0f,EAAU1f,EAAG,QACbuf,EAAWvf,EAAG,SACdwf,EAAOxf,EAAG,KAEd,YAAK,gBAAkB4iF,EAChB,CACL,MAAOnjE,EAAM,IAAI,SAAU1nB,EAAO,CAChC,OAAOynB,EAAKznB,CAAK,CACnB,CAAC,EACD,QAAS2nB,EAAQ,IAAI,SAAU3nB,EAAO,CACpC,OAAOwnB,EAASxnB,CAAK,CACvB,CAAC,EACD,eAAgB8qF,EAChB,SAAUD,CACZ,CACF,EAOAr5E,EAAQ,2BAA6B,SAAUgoB,EAAQC,EAAQ,CAC7D,IAAI73B,EAAO,KAAK,IAAI43B,EAAO,CAAC,EAAGC,EAAO,CAAC,CAAC,EACpC53B,EAAM,KAAK,IAAI23B,EAAO,CAAC,EAAGC,EAAO,CAAC,CAAC,EACnC4C,EAAQ,KAAK,IAAI7C,EAAO,CAAC,EAAGC,EAAO,CAAC,CAAC,EACrC6C,EAAS,KAAK,IAAI9C,EAAO,CAAC,EAAGC,EAAO,CAAC,CAAC,EACtCt+B,EAAO,CACT,KAAMyG,EACN,IAAKC,EACL,MAAOw6B,EACP,OAAQC,EACR,MAAOD,EAAQz6B,EACf,OAAQ06B,EAASz6B,CACnB,EACIzR,EAAO,CACT,YAAa,EACf,EACA,KAAK,sBAAsBA,CAAI,EAC/B,IAAI26F,EAAmB,KAAK,QAAQ5vF,EAAM/K,EAAM,GAAM,IAAI,EACtDolB,EAAS,KAAK,mBAAmBu1E,CAAgB,EACrD,OAAO,GAAS,GAAS,CAAC,EAAGv1E,CAAM,EAAG,CACpC,KAAMra,CACR,CAAC,CACH,EAOAqW,EAAQ,sBAAwB,SAAUw5E,EAAYC,EAAU,CAC9D,IAAIC,EAAY,IAAI,WAAW,YAAa,CAC1C,QAASF,EAAW,CAAC,EACrB,QAASA,EAAW,CAAC,EACrB,WAAY,GACZ,QAAS,EACX,CAAC,EACGG,EAAY,IAAI,WAAW,YAAa,CAC1C,QAASF,EAAS,CAAC,EACnB,QAASA,EAAS,CAAC,EACnB,WAAY,GACZ,QAAS,EACX,CAAC,EACGG,EAAU,IAAI,WAAW,YAAa,CACxC,QAASH,EAAS,CAAC,EACnB,QAASA,EAAS,CAAC,EACnB,WAAY,GACZ,QAAS,EACX,CAAC,EACGlsB,EAAQ,KAAK,MACbvpD,EAASupD,EAAM,YAAYmsB,CAAS,EAEpC11E,IAAW,KACbupD,EAAM,OAAOosB,CAAS,EACtBpsB,EAAM,UAAUqsB,CAAO,EAE3B,EAMA55E,EAAQ,mBAAqB,UAAY,CACvC,OAAO,KAAK,eACd,EAeAA,EAAQ,iBAAmB,SAAU3iB,EAAG,CACtC,YAAK,MAAM,iBAAiBA,CAAC,EACtB,IACT,EAMA2iB,EAAQ,QAAU,UAAY,CAC5B,IAAIvJ,EAEJ,KAAK,IAAI,EACT,KAAK,QAAU,KAAK,OAAO,QAAQ,EACnC,KAAK,MAAM,MAAM,EACjB,KAAK,aAAa,QAAQ,EAC1B,KAAK,WAAW,QAAQ,EACxB2I,GAAY,SAAU,cAAe,KAAK,sBAAsB,EAE3D,KAAK,QAAQ,kBACf3I,EAAK,KAAK,OAAO,iBAAmB,MAAQA,IAAO,QAAkBA,EAAG,YAAY,KAAK,MAAM,EAGlG,KAAK,OAAS,KACd,KAAK,MAAQ,KACb,KAAK,aAAe,KACpB,KAAK,OAAS,KACd,KAAK,UAAY,KACjB,KAAK,QAAU,IACjB,EAEAuJ,EAAQ,iBAAmB,SAAUhY,EAAQ,CAC3C,IAAI6xF,EAAiB,KAAK,gBAAkBzC,GACxCtoF,EAAO+qF,EAAe7xF,CAAM,EAC5BkU,EAAS,CAACpN,EAAK,KAAMA,EAAK,KAAMA,EAAK,KAAMA,EAAK,IAAI,EAExD,GAAI+qF,IAAmBzC,GAAuB,CAC5C,IAAIztF,EAAO3B,EAAO,sBAAsB,EACxC,OAAOqgC,GAAUnsB,EAAQvS,CAAI,CAC/B,CAEA,OAAOuS,CACT,EAMA8D,EAAQ,sBAAwB,UAAY,CAC1C,IAAI+C,EAAY,KAAK,UACjB+2E,EAAqB,CAAC,EAC1B,YAAK,QAAQ,kBAAkB,QAAQ,SAAU9xF,EAAQ,CACvD,GAAI,GAAWA,CAAM,EAAG,CACtB,IAAIgc,EAAShc,EAAO,EAEhBgc,GACF81E,EAAmB,KAAK,MAAMA,EAAoB,CAAC,EAAE,MAAM,KAAK91E,CAAM,CAAC,CAE3E,SAAWtE,GAAO1X,CAAM,EACtB8xF,EAAmB,KAAK9xF,CAAM,UACrBuN,GAASvN,CAAM,EACxB8xF,EAAmB,KAAK9xF,EAAO,OAASA,EAAO,OAAO,MACjD,CACL,IAAIqV,EAAW,CAAC,EAAE,MAAM,KAAKgC,GAAY0D,CAAS,EAAE,iBAAiB/a,CAAM,CAAC,EAC5E8xF,EAAmB,KAAK,MAAMA,EAAoBz8E,CAAQ,CAC5D,CACF,CAAC,EACMy8E,CACT,EAMA95E,EAAQ,YAAc,UAAY,CAChC,GAAK,KAAK,MAAM,OAAO,EAIvB,KAAIu2D,EAAgB,KAAK,cACrBoiB,EAAqB,KAAK,MAAM,aAAa,EAAE,mBAC/CI,EAAmBJ,GAAqFpiB,GAAc,UAEtHwiB,GACF,KAAK,WAAW,YAAY,GAAS,CACnC,WAAY,KAAK,MAAM,gBAAgB,CACzC,EAAGJ,GAAsBpiB,CAAa,CAAC,EAE3C,EAOAv2D,EAAQ,sBAAwB,SAAUphB,EAAM,CAC9C,IAAIuhB,EAAQ,KAERvhB,IAAS,SACXA,EAAO,KAAK,MAAM,aAAa,GAGjC,IAAIm7F,EAAoB,KAAK,sBAAsB,EAC/CC,EAAmBD,EAAkB,IAAI,SAAU/xF,EAAQ,CAC7D,OAAOmY,EAAM,iBAAiBnY,CAAM,CACtC,CAAC,EACDpJ,EAAK,kBAAoBm7F,EACzBn7F,EAAK,iBAAmBo7F,EACxBp7F,EAAK,oBAAsB,KAC3B,IAAIsD,EAAU,KAAK,QACf+3F,EAAgB/3F,EAAQ,eAAiBA,EAAQ,mBACjDyR,EAAM0L,GAAY,KAAK,SAAS,EAEpC,GAAI46E,EAAe,CACjB,IAAIC,EAAc,IAAI,IACtBt7F,EAAK,+BAAiCs7F,EACtCt7F,EAAK,+BAAiCm7F,EAAkB,IAAI,SAAU/xF,EAAQwG,EAAO,CAsCnF,QArCIiY,EAAgBze,EAAO,cACvBmyF,EAAU,CAAC,EACXC,EAAQ,CAAC,EAET7jF,EAAU,UAAY,CACxB,IAAIzH,EAAOorF,EAAY,IAAIzzE,CAAa,EAExC,GAAI,CAAC3X,EAAM,CACT,IAAI4uD,EAAW,iBAAiBj3C,CAAa,EAAE,WAAa,UAE5D,GAAIi3C,EAAU,CACZ,IAAI/zD,EAAOytF,GAAsB3wE,CAAa,EAC9C3X,EAAO,CACL,cAAe2X,EACf,QAAS,CAAC,EACV,OAAQ,CAAC9c,EAAK,KAAMA,EAAK,KAAMA,EAAK,KAAMA,EAAK,IAAI,EACnD,MAAO,GAAc,CAAC,EAAGywF,EAAO,EAAI,CACtC,EACAD,EAAQ,KAAK1zE,CAAa,EAC1B0zE,EAAQ,QAAQ,SAAUE,EAAmB,CAC3CH,EAAY,IAAIG,EAAmBvrF,CAAI,CACzC,CAAC,EACDqrF,EAAU,CAAC,CACb,CACF,CAEIrrF,GACF2X,EAAgB3X,EAAK,cACrBorF,EAAY,IAAIzzE,CAAa,EAAE,QAAQ,KAAKjY,CAAK,EACjD4rF,EAAM,KAAK3zE,CAAa,GAExB0zE,EAAQ,KAAK1zE,CAAa,EAG5BA,EAAgBA,EAAc,aAChC,EAEOA,GAAiBA,IAAkB9S,EAAI,MAC5C4C,EAAQ,EAGV,OAAO6jF,CACT,CAAC,CACH,CAEA,OAAKl4F,EAAQ,gBACXtD,EAAK,iBAAmBm7F,EAAkB,IAAI,UAAY,CACxD,MAAO,EACT,CAAC,GAGH,KAAK,eAAen7F,CAAI,EAEjBm7F,CACT,EAQA/5E,EAAQ,YAAc,SAAU3iB,EAAGu6F,EAAe,CAChD,IAAInhF,EAAK,GAAUpZ,CAAC,EAChBkkB,EAAU9K,EAAG,QACb+K,EAAU/K,EAAG,QAEbsjD,EAAY,CACd,KAAM,CACJ,WAAY,EACd,EACA,QAASx4C,EACT,QAASC,EACT,WAAYnkB,EACZ,QAAS,GACT,UAAW,GACX,KAAM,UAAY,CAChB,MAAO,EACT,CACF,EAEA,OAAI,KAAK,aAAa08D,EAAW69B,CAAa,GAC5C,KAAK,WAAW79B,CAAS,EAGpB,IACT,EAEA/5C,EAAQ,iBAAmB,UAAY,CACrC,IAAIvJ,EAAK,KAAK,QACV6jF,EAAe7jF,EAAG,aAClB8jF,EAAuB9jF,EAAG,qBAC1B+jF,EAAsC/jF,EAAG,oCAEzC,KAAK,SACP,KAAK,OAAO,QAAQ,EACpB,KAAK,OAAS,OAGZ8jF,GAAwBC,KAC1B,KAAK,OAAS,IAAI,GAAcF,GAAgBv7E,GAAU,KAAK,SAAS,CAAC,EACzE,KAAK,OAAO,QAAQ,KAAK,UAAU,EAAE,MAAM,KAAK,QAAQ,EAAE,GAAG,OAAQ,KAAK,OAAO,EAErF,EAEAiB,EAAQ,aAAe,SAAUy6E,EAAe,CAC9C,KAAK,QAAQ,UAAYA,EACzB,KAAK,OAAO,aAAa,QAAS,GAAG,OAAO,GAAY,GAAG,EAAE,OAAOA,GAAiB,EAAE,CAAC,CAC1F,EAEAz6E,EAAQ,YAAc,UAAY,CAChC,IAAIvJ,EAAK,KAAK,QACV8jF,EAAuB9jF,EAAG,qBAC1B+jF,EAAsC/jF,EAAG,oCAEzC,CAAC8jF,GAAwB,CAACC,GAAuC,KAAK,QAI1E,KAAK,iBAAiB,CACxB,EAGAx6E,EAAQ,gBAAkB,SAAUs6E,EAAc,CAChD,IAAIn6E,EAAQ,KAERje,EAAU,KAAK,QACnBg1F,GAAUh1F,EAAQ,aAAco4F,EAAc,UAAY,CACxDp4F,EAAQ,aAAeo4F,EAEvBn6E,EAAM,iBAAiB,CACzB,CAAC,CACH,EAEAH,EAAQ,kBAAoB,UAAY,CACtC,IAAIvJ,EAAK,KAAK,QACVikF,EAAiBjkF,EAAG,eACpB8jF,EAAuB9jF,EAAG,qBAE9B,MAAI,CAAC8jF,GAAwB,CAAC,KAAK,uBAC1BG,EAGF,CAACA,CACV,EAEA16E,EAAQ,iCAAmC,UAAY,CACrD,IAAIvJ,EAAK,KAAK,QACV+gF,EAAgC/gF,EAAG,8BACnC+jF,EAAsC/jF,EAAG,oCAE7C,MAAI,CAAC+jF,GAAuC,CAAC,KAAK,yCACzChD,EAGF,CAACA,CACV,EAEAx3E,EAAQ,wBAA0B,SAAUu6E,EAAsB,CAChE,IAAIp6E,EAAQ,KAERje,EAAU,KAAK,QACnBg1F,GAAUh1F,EAAQ,qBAAsBq4F,EAAsB,UAAY,CACxEr4F,EAAQ,qBAAuBq4F,EAE/Bp6E,EAAM,YAAY,CACpB,CAAC,CACH,EAEAH,EAAQ,uCAAyC,SAAUw6E,EAAqC,CAC9F,IAAIr6E,EAAQ,KAERje,EAAU,KAAK,QACnBg1F,GAAUh1F,EAAQ,oCAAqCs4F,EAAqC,UAAY,CACtGt4F,EAAQ,oCAAsCs4F,EAE9Cr6E,EAAM,YAAY,CACpB,CAAC,CACH,EAEAH,EAAQ,kBAAoB,SAAU1jB,EAAO,CAC3C,KAAK,MAAM,QAAQ,eAAiBA,CACtC,EAEA0jB,EAAQ,cAAgB,SAAU1jB,EAAO,CACvC,KAAK,MAAM,QAAQ,WAAaA,CAClC,EAEA0jB,EAAQ,YAAc,UAAY,CAChC,IAAIvJ,EAAK,KAAK,QACVswE,EAAgBtwE,EAAG,cACnB2M,EAAa3M,EAAG,WAChB0M,EAAiB1M,EAAG,eACpB6M,EAA+B7M,EAAG,6BAClC8M,EAA0B9M,EAAG,wBAC7B+M,EAA+B/M,EAAG,6BAClCM,EAAKN,EAAG,kBACRyM,EAAoBnM,IAAO,OAAS,GAAOA,EAC3CyH,EAAY/H,EAAG,UACfsM,EAAY,KAAK,UACrB,KAAK,OAAS,GAActF,GAAE,MAAO,CACnC,UAAW,GAAG,OAAO,GAAY,GAAG,EAAE,OAAOe,GAAa,EAAE,CAC9D,CAAC,EAAG,KAAK,OAAQuE,CAAS,EAC1B,IAAI/a,EAAS,KAAK,OAClB,KAAK,cAAgB,OAAO++E,GAAkB,SAAW,CAAC,EAAE,MAAM,KAAK1nE,GAAY0D,CAAS,EAAE,iBAAiBgkE,CAAa,CAAC,EAAIA,GAAiB,KAAK,OAAO,WAC9J,KAAK,MAAQ,IAAIrkE,GAAM,KAAK,cAAe,CACzC,gBAAiB,GACjB,UAAW3D,GAAUgE,CAAS,EAC9B,WAAYK,EACZ,eAAgBD,EAChB,6BAA8BG,EAC9B,wBAAyBC,EACzB,6BAA8BC,EAC9B,kBAAmBN,CACrB,CAAC,EAAE,GAAG,CACJ,UAAW,KAAK,aAChB,KAAM,KAAK,QACX,QAAS,KAAK,UAChB,CAAC,EACDlE,GAAS,SAAU,cAAe,KAAK,sBAAsB,EAC7D,KAAK,aAAe,GAAS,OAAOhX,EAAQ,CAC1C,MAAO,KAAK,QAAQ,QACtB,CAAC,CACH,EAEAgY,EAAQ,QAAU,SAAU26E,EAAY/7F,EAAMwlB,EAAQw2E,EAAY,CAChE,IAAInkF,EAAK,KAAK,QACVokF,EAAUpkF,EAAG,QACbqhF,EAAgBrhF,EAAG,cACnBrG,EAAOuqF,EAAW,KAClBtqF,EAAMsqF,EAAW,IACjB9vD,EAAQ8vD,EAAW,MACnB7vD,EAAS6vD,EAAW,OACpBG,EAAcl8F,EAAK,YACnBm8F,EAAan8F,EAAK,WAClBo8F,EAAcp8F,EAAK,YACnB2iB,EAAkEq5E,GAAW,QAC7Ep5E,EAAkEo5E,GAAW,QAC7EK,EAAcr8F,EAAK,YACnBs8F,EAAa,CAAC,CAAC9qF,EAAMC,CAAG,EAAG,CAACw6B,EAAOx6B,CAAG,EAAG,CAACw6B,EAAOC,CAAM,EAAG,CAAC16B,EAAM06B,CAAM,CAAC,EAExEqwD,EAAQ,SAAUj/E,EAAQ+C,EAAI,CAChC,IAAIm8E,EAA+C/iF,GAAhC,OAAOwiF,GAAY,WAAuB,GAAG,OAAOA,EAAQ57E,CAAE,CAAC,EAAe,GAAG,OAAO47E,CAAO,CAA/B,EAC/EQ,EAASJ,EAAc,GAAQpyD,GAAS,CAACtnB,EAASC,CAAO,EAAGtF,CAAM,EAEtE,GAAI,CAACkI,GAAU0zE,GAAiBuD,EAC9B,MAAO,GAGT,IAAIC,EAAgBvvD,GAAiBmvD,EAAYh/E,CAAM,EAEvD,GAAI,CAACo/E,EAAc,OACjB,MAAO,GAGT,IAAIC,EAAcrzD,GAAYozD,CAAa,EAEvC5gF,EAAa,EASjB,GAPI6gF,IAAgB,GAAKrzD,GAAYhsB,CAAM,IAAM,GAC/CxB,EAAa+8E,GAAYv7E,CAAM,EAC/Bq/E,EAAc9D,GAAY6D,CAAa,GAEvC5gF,EAAawtB,GAAYhsB,CAAM,EAG7Bk/E,EAAa,OAAS,KACxB,OAAOG,GAAeH,EAAa,MAEnC,IAAII,EAAOlhF,GAAQ,KAAK,MAAMihF,EAAc7gF,EAAa,GAAG,EAAG,EAAG,GAAG,EACrE,OAAO8gF,GAAQ,KAAK,IAAI,IAAKJ,EAAa,KAAK,CAEnD,EAEIrB,EAAoBn7F,EAAK,kBACzBo7F,EAAmBp7F,EAAK,iBACxB68F,EAAmB78F,EAAK,iBAE5B,GAAI,CAACk8F,EACH,OAAOf,EAAkB,OAAO,SAAUr9E,EAAG1I,EAAG,CAC9C,OAAKynF,EAAiBznF,CAAC,EAIhBmnF,EAAMnB,EAAiBhmF,CAAC,EAAG+lF,EAAkB/lF,CAAC,CAAC,EAH7C,EAIX,CAAC,EASH,QANIqlF,EAAkB,CAAC,EACnB9wD,EAAO,KAAK,MAAMn4B,EAAO2qF,CAAU,EACnCtyD,EAAO,KAAK,MAAMoC,EAAQkwD,CAAU,EACpCvyD,EAAO,KAAK,MAAMn4B,EAAM2qF,CAAW,EACnCtyD,EAAO,KAAK,MAAMoC,EAASkwD,CAAW,EAEjChrF,EAAIu4B,EAAMv4B,GAAKy4B,EAAM,EAAEz4B,EAAG,CACjC,IAAI0rF,EAAUZ,EAAY9qF,CAAC,EAE3B,GAAK0rF,EAIL,QAASzrF,EAAIu4B,EAAMv4B,GAAKy4B,EAAM,EAAEz4B,EAAG,CACjC,IAAIq+D,EAAQotB,EAAQzrF,CAAC,EAEhBq+D,GAILA,EAAM,QAAQ,SAAU9/D,EAAO,CAC7B,IAAI0N,EAAS89E,EAAiBxrF,CAAK,EAC/B2tD,EAAQs/B,EAAiBjtF,CAAK,EAC9BxG,EAAS+xF,EAAkBvrF,CAAK,EAEhC2tD,GAASg/B,EAAMj/E,EAAQlU,CAAM,GAC/BqxF,EAAgB,KAAKrxF,CAAM,CAE/B,CAAC,CACH,CACF,CAEA,OAAO0uF,GAAiB2C,CAAe,CACzC,EAEAr5E,EAAQ,eAAiB,UAAY,CACnC,IAAIG,EAAQ,KAEZ,KAAK,WAAW,GAAG,aAAc,SAAU1J,EAAI,CAC7C,IAAI2W,EAAO3W,EAAG,KACd2W,EAAKjN,EAAM,MAAM,gBAAgB,CAAC,CACpC,CAAC,EAAE,GAAG,SAAU,SAAU1J,EAAI,CAC5B,IAAIsM,EAAYtM,EAAG,UACfywB,EAAYzwB,EAAG,UAEfkiF,EAAqBx4E,EAAM,MAAM,aAAa,EAAE,mBAEhDw4E,EACFx4E,EAAM,KAAK,cAAe,CACxB,UAAW4C,EACX,UAAWmkB,CACb,CAAC,EAED/mB,EAAM,KAAK,SAAU,CACnB,UAAW4C,EACX,UAAWmkB,CACb,CAAC,CAEL,CAAC,EAAE,GAAG,OAAQ,SAAUzwB,EAAI,CAC1B,IAAIxF,EAAUwF,EAAG,QACbvF,EAAUuF,EAAG,QACbmO,EAAanO,EAAG,WAChB82D,EAAQptD,EAAM,MAElB,GAAI,GAACotD,GAAS,CAACA,EAAM,OAAO,GAI5B,KAAI3uE,EAAOuhB,EAAM,MAAM,aAAa,EAEhCg3E,EAAYv4F,EAAK,UACrBA,EAAK,QAAUqS,EACfrS,EAAK,QAAUsS,EAEf,IAAIynF,EAAqBx4E,EAAM,MAAM,aAAa,EAAE,mBAEhD4C,EAAoF41E,GAAmB,UACvGgD,EAAoB,GAExB,GAAI54E,EAAW,CACb,IAAI64E,EAAch9F,EAAK,+BACnBi9F,EAAaD,EAAY,IAAI74E,CAAS,EAEtC84E,IACFA,EAAW,MAAM,QAAQ,SAAUxlB,EAAiB,CAClD,IAAIylB,EAAgBF,EAAY,IAAIvlB,CAAe,EACnDylB,EAAc,OAAO,QAAQ,SAAUrnF,EAAK,CAC1CA,EAAI,CAAC,GAAKxD,EACVwD,EAAI,CAAC,GAAKvD,CACZ,CAAC,CACH,CAAC,EACD2qF,EAAW,QAAQ,QAAQ,SAAUrtF,EAAO,CAC1C5P,EAAK,iBAAiB4P,CAAK,EAAE,QAAQ,SAAUiG,EAAK,CAClDA,EAAI,CAAC,GAAKxD,EACVwD,EAAI,CAAC,GAAKvD,CACZ,CAAC,CACH,CAAC,EACDyqF,EAAoB,GAExB,CAEKA,GACH/8F,EAAK,iBAAiB,QAAQ,SAAUsd,EAAQ,CAC9CA,EAAO,QAAQ,SAAUzH,EAAK,CAC5BA,EAAI,CAAC,GAAKxD,EACVwD,EAAI,CAAC,GAAKvD,CACZ,CAAC,CACH,CAAC,EAGHiP,EAAM,eAAevhB,CAAI,EAEzBu4F,EAAU,MAAQlmF,EAClBkmF,EAAU,OAASlmF,EACnBkmF,EAAU,KAAOjmF,EACjBimF,EAAU,QAAUjmF,EAEpBiP,EAAM,MAAM,SAASlP,EAASC,EAAS0T,EAAW,UAAU,EAE5DzE,EAAM,eAAeA,EAAM,MAAM,gBAAgB,CAAC,EACpD,CAAC,CACH,EAEAH,EAAQ,QAAU,SAAUq5E,EAAiB1vF,EAAMtM,EAAGk+C,EAASwgD,EAAgB,CACzEA,IAAmB,SACrBA,EAAiB,IAGnB,IAAIn3E,EAAavnB,EAAE,WACfuB,EAAOvB,EAAE,KACT2mB,EAAS,KAAK,mBAAmBq1E,CAAe,EAEhD5iF,EAAK,GAAK7X,EAAK,qBAAsBy6F,CAAe,EACpDnjE,EAAQzf,EAAG,MACX0f,EAAU1f,EAAG,QACbuf,EAAWvf,EAAG,SACdwf,EAAOxf,EAAG,KAEVulF,EAAc,CAChB,cAAehmE,EACf,WAAYE,EAAM,IAAI,SAAUliB,EAAG,CACjC,OAAOiiB,EAAKjiB,CAAC,CACf,CAAC,EACD,aAAcmiB,EAAQ,IAAI,SAAUniB,EAAG,CACrC,OAAOgiB,EAAShiB,CAAC,CACnB,CAAC,CACH,EAEIunC,GA+BF,KAAK,KAAK,cAAe,GAAS,GAAS,GAAS,CAAC,EAAGv3B,CAAM,EAAGg4E,CAAW,EAAG,CAC7E,KAAMryF,EACN,WAAYib,EACZ,KAAMhmB,EAAK,KACX,UAAWvB,EAAE,UACb,eAAgB0+F,CAClB,CAAC,CAAC,GAGA/3E,EAAO,MAAM,QAAUA,EAAO,QAAQ,SAwBxC,KAAK,KAAK,SAAU,GAAS,GAAS,GAAS,CAAC,EAAGA,CAAM,EAAGg4E,CAAW,EAAG,CACxE,KAAMryF,EACN,WAAYib,EACZ,KAAMhmB,EAAK,KACX,UAAWvB,EAAE,UACb,eAAgB0+F,CAClB,CAAC,CAAC,CAEN,EAEA/7E,EAAQ,WAAa,SAAUi8E,EAAsBC,EAAoBvyF,EAAMtM,EAAG0+F,EAAgB,CAC5FA,IAAmB,SACrBA,EAAiB,IAGnB,IAAIn3E,EAAavnB,EAAE,WACfknB,EAAWlnB,EAAE,SACbuB,EAAOvB,EAAE,KACT6hB,EAAO0F,GAAcA,EAAW,KAChClB,EAAcxE,IAAS,aAAeA,IAAS,aAE/CzI,EAAK,GAAKwlF,EAAsB,KAAK,eAAe,EACpD/lE,EAAQzf,EAAG,MACX0f,EAAU1f,EAAG,QACbuf,EAAWvf,EAAG,SACdwf,EAAOxf,EAAG,KAEVM,EAAK,GAAKmlF,EAAoB,KAAK,eAAe,EAClDC,EAAaplF,EAAG,MAChBqlF,EAAerlF,EAAG,QAClBslF,EAAgBtlF,EAAG,SACnBulF,EAAYvlF,EAAG,KAiCnB,KAAK,KAAK,YAAa,CACrB,cAAeklF,EACf,eAAgBC,EAChB,SAAU,KAAK,gBACf,MAAOhmE,EAAM,IAAI,SAAU1nB,EAAO,CAChC,OAAOynB,EAAKznB,CAAK,CACnB,CAAC,EACD,QAAS2nB,EAAQ,IAAI,SAAU3nB,EAAO,CACpC,OAAOwnB,EAASxnB,CAAK,CACvB,CAAC,EACD,WAAY2tF,EAAW,IAAI,SAAU3tF,EAAO,CAC1C,OAAO8tF,EAAU9tF,CAAK,CACxB,CAAC,EACD,aAAc4tF,EAAa,IAAI,SAAU5tF,EAAO,CAC9C,OAAO6tF,EAAc7tF,CAAK,CAC5B,CAAC,EACD,YAAakV,GAAeq4E,EAC5B,eAAgBr4E,GAAeq4E,EAC/B,QAAS,CAAC,CAAC1+F,EAAE,QACb,SAAU,CAAC,CAACknB,EACZ,KAAM5a,EACN,WAAYib,EACZ,KAAMhmB,EAAK,KACX,UAAWvB,EAAE,SACf,CAAC,CACH,EAEA2iB,EAAQ,eAAiB,SAAU3iB,EAAGsM,EAAM,CACtCA,IAAS,SACXA,EAAO,GAAQtM,EAAG,KAAK,QAAQ,KAAK,GAGtC,IAAIuB,EAAOvB,EAAE,KACTgT,EAAM1G,EAAK,IACXyG,EAAOzG,EAAK,KACZqC,EAAQrC,EAAK,MACbxB,EAASwB,EAAK,OACdqvF,EAAap6F,EAAK,WAClB29F,EAAa39F,EAAK,WAClB49F,EAAa59F,EAAK,WAClBw2C,EAAcx2C,EAAK,YACnB46C,EAAY5T,GAAoBwP,EAAa,CAAChlC,EAAOmsF,EAAYlsF,EAAMmsF,CAAU,CAAC,EAClFC,EAAa72D,GAAoBwP,EAAa,CAACppC,EAAO7D,CAAM,CAAC,EAC7DkxF,EAAkB,CAAC,EAEvB,GAAIL,EAAY,CACd,KAAK,OAAO,MAAM,SAAW,mCAA0C,wBAAwB,OAAOx/C,EAAU,CAAC,EAAG,MAAM,EAAE,OAAOA,EAAU,CAAC,EAAG,MAAM,EAAI,SAAS,OAAOijD,EAAW,CAAC,EAAG,YAAY,EAAE,OAAOA,EAAW,CAAC,EAAG,KAAK,EACnO,IAAIC,EAAgB,KAAK,QAAQ/yF,EAAM/K,EAAM,GAAMvB,CAAC,EACpDg8F,EAAkBhC,GAAYz4F,EAAK,mBAAoB89F,EAAe,KAAK,gBAAkB,KAAK,6BAA6B,CACjI,CA6BA,IAAI14E,EAAS,KAAK,KAAK,OAAQ,GAAS,GAAS,CAAC,EAAG3mB,CAAC,EAAG,CACvD,KAAMuB,EAAK,KACX,SAAUo6F,EACV,KAAMrvF,CACR,CAAC,CAAC,EAEF,GAAIqa,IAAW,GAAO,CACpB,KAAK,OAAO,MAAM,SAAW,iBAC7B3mB,EAAE,KAAK,EACP,MACF,CAEI27F,GACF,KAAK,QAAQK,EAAiB1vF,EAAMtM,CAAC,CAEzC,EAEA2iB,EAAQ,cAAgB,SAAU3iB,EAAG0c,EAAM4iF,EAAS,CAClD,GAAI,CAAC5iF,EACH,MAAO,GAGT,IAAIy8E,EAAQV,GAASz4F,EAAE,WAAYA,EAAE,GAAG,EACpCu/F,EAAW,CAAC,EAAE,OAAO7iF,CAAI,EACzB8iF,EAAarnF,GAAQonF,EAAS,CAAC,CAAC,EAAIA,EAAW,CAACA,CAAQ,EAE5D,GAAID,EAAS,CACX,IAAIG,EAAcz/F,EAAE,IACpB,OAAOw/F,EAAW,KAAK,SAAU9iF,EAAM,CACrC,OAAOA,EAAK,KAAK,SAAU/c,EAAK,CAC9B,OAAOA,IAAQ8/F,CACjB,CAAC,CACH,CAAC,CACH,CAEA,OAAOD,EAAW,KAAK,SAAU9iF,EAAM,CACrC,OAAOA,EAAK,MAAM,SAAU/c,EAAK,CAC/B,OAAOw5F,EAAM,QAAQx5F,CAAG,EAAI,EAC9B,CAAC,CACH,CAAC,CACH,EAEAgjB,EAAQ,aAAe,SAAU43E,EAAemC,EAAmB,CAGjE,QAFItB,EAAcb,EAEXa,GACD,EAAAsB,EAAkB,QAAQtB,CAAW,EAAI,KAI7CA,EAAcA,EAAY,cAG5B,OAAOA,CACT,EAEAz4E,EAAQ,eAAiB,SAAUphB,EAAM,CACvC,IAAI6X,EAEAskF,EAAan8F,EAAK,WAClBo8F,EAAcp8F,EAAK,YACnBo7F,EAAmBp7F,EAAK,iBAE5B,GAAI,KAAK,QAAQ,cAAe,CAC9B,IAAIm+F,GAA0BtmF,EAAK,KAAK,MAAM,aAAa,EAAE,sBAAwB,MAAQA,IAAO,OAAS,OAASA,EAAG,UACrHumF,EAAcp+F,EAAK,+BACnBq+F,EAAuBr+F,EAAK,+BAChCA,EAAK,iBAAmBq+F,EAAqB,IAAI,SAAUC,EAAkBlpF,EAAG,CAC9E,IAAImpF,EAAe,GACnB,OAAOD,EAAiB,MAAM,SAAUl1F,EAAQ,CAC9C,GAAIm1F,EACF,MAAO,GAGT,GAAIn1F,IAAW+0F,EACb,OAAAI,EAAe,GACR,GAGT,IAAIxzF,EAAOqzF,EAAY,IAAIh1F,CAAM,EAEjC,GAAI2B,EAAM,CACR,IAAIuhC,EAAU8uD,EAAiBhmF,CAAC,EAC5Bm3B,EAAUxhC,EAAK,OACf2xF,EAAgBvvD,GAAiBb,EAASC,CAAO,EAErD,GAAI,CAACmwD,EAAc,OACjB,MAAO,EAEX,CAEA,MAAO,EACT,CAAC,CACH,CAAC,CACH,CAEA,GAAI,CAACP,GAAc,CAACC,EAClBp8F,EAAK,YAAc,SACd,CACL,IAAIw+F,EAAqBx+F,EAAK,iBAC1By+F,EAAW,CAAC,EAChBD,EAAmB,QAAQ,SAAUlhF,EAAQlI,EAAG,CAC9C,IAAIu0B,EAAO,IACPE,EAAO,KACPD,EAAO,IACPE,EAAO,KACXxsB,EAAO,QAAQ,SAAUzH,EAAK,CAC5B,IAAIzE,EAAI,KAAK,MAAMyE,EAAI,CAAC,EAAIsmF,CAAU,EAClC9qF,EAAI,KAAK,MAAMwE,EAAI,CAAC,EAAIumF,CAAW,EACvCzyD,EAAO,KAAK,IAAIv4B,EAAGu4B,CAAI,EACvBE,EAAO,KAAK,IAAIz4B,EAAGy4B,CAAI,EACvBD,EAAO,KAAK,IAAIv4B,EAAGu4B,CAAI,EACvBE,EAAO,KAAK,IAAIz4B,EAAGy4B,CAAI,CACzB,CAAC,EAED,QAAS14B,EAAIu4B,EAAMv4B,GAAKy4B,EAAM,EAAEz4B,EAC9B,QAASC,EAAIu4B,EAAMv4B,GAAKy4B,EAAM,EAAEz4B,EAC9BotF,EAASrtF,CAAC,EAAIqtF,EAASrtF,CAAC,GAAK,CAAC,EAC9BqtF,EAASrtF,CAAC,EAAEC,CAAC,EAAIotF,EAASrtF,CAAC,EAAEC,CAAC,GAAK,CAAC,EACpCotF,EAASrtF,CAAC,EAAEC,CAAC,EAAE,KAAK+D,CAAC,CAG3B,CAAC,EACDpV,EAAK,YAAcy+F,CACrB,CACF,EAEA1F,EAAU,GAAW,CAAC9xE,GAAW,GAAY,SAAUE,EAAWjS,EAAU,CAC1E,IAAI8gB,EAAa,CACf,WAAY,GACZ,aAAc,GACd,IAAK,UAAY,CACf,OAAO,KAAK,QAAQ9gB,CAAQ,CAC9B,CACF,EACIwpF,EAAS9kF,GAAS,OAAO,OAAO1E,CAAQ,CAAC,EAEzCiS,EAAUu3E,CAAM,EAClB1oE,EAAW,IAAM,UAAY,CAC3B,OAAO,KAAK0oE,CAAM,EAAE,CACtB,EAEA1oE,EAAW,IAAM,UAAY,CAC3B,OAAO,KAAK,QAAQ9gB,CAAQ,CAC9B,EAGF,IAAI+gB,EAASrc,GAAS,OAAO,OAAO1E,CAAQ,CAAC,EAEzCiS,EAAU8O,CAAM,EAClBD,EAAW,IAAM,SAAUt4B,EAAO,CAChC,KAAKu4B,CAAM,EAAEv4B,CAAK,CACpB,EAEAs4B,EAAW,IAAM,SAAUt4B,EAAO,CAChC,KAAK,QAAQwX,CAAQ,EAAIxX,CAC3B,EAGF,OAAO,eAAeypB,EAAWjS,EAAU8gB,CAAU,CACvD,CAAC,CAAC,EAAG+iE,CAAO,EACLA,CACT,EAAE,EAAY,EAEV4F,GAEJ,SAAU56E,EAAQ,CAChB,GAAUg1E,EAASh1E,CAAM,EAEzB,SAASg1E,GAAU,CACjB,OAAOh1E,IAAW,MAAQA,EAAO,MAAM,KAAM,SAAS,GAAK,IAC7D,CAEA,OAAOg1E,CACT,EAAEA,EAAO,EAET,SAAe4F,GC51DFC,GAA2B,oBAC3BC,GAAwB,oBACxBC,GAAqC,EAGrCC,GAAU,CACrB,CAAE,EAAG,GAAI,EAAG,CAAE,EACd,CAAE,EAAG,IAAM,EAAG,CAAE,EAChB,CAAE,EAAG,EAAG,EAAG,CAAE,EACb,CAAE,EAAG,GAAK,EAAG,CAAE,EACf,CAAE,EAAG,EAAG,EAAG,CAAE,EACb,CAAE,EAAG,EAAG,EAAG,EAAI,EACf,CAAE,EAAG,EAAG,EAAG,CAAE,EACb,CAAE,EAAG,EAAG,EAAG,GAAK,EAChB,CAAE,EAAG,EAAG,EAAG,EAAG,EACd,CAAE,EAAG,GAAK,EAAG,EAAG,EAChB,CAAE,EAAG,EAAG,EAAG,EAAG,EACd,CAAE,EAAG,IAAM,EAAG,EAAG,EACjB,CAAE,EAAG,GAAI,EAAG,EAAG,EACf,CAAE,EAAG,GAAI,EAAG,GAAK,EACjB,CAAE,EAAG,GAAI,EAAG,CAAE,EACd,CAAE,EAAG,GAAI,EAAG,EAAI,CAClB,EAEaC,GAAiB,EACjBC,GAAY,IAEZC,GAAoB,CAAC,CAAE,OAAAC,EAAQ,cAAAC,EAAe,iBAAAC,CAAiB,IAAa,CACvF,MAAMC,KAAsB,UAAuB,IAAI,EACjDz8F,KAAS,OAAW,EAAS,EAC7B08F,EAA2B,IAC3BC,EACJ,ihBAEIC,EAAsBx3F,GAA4B,CAChDA,EAAM,kBAAkB,kBAI1Bq3F,EAAoB,SAAWr3F,EAAM,OAAO,QAC9Cq3F,EAAoB,QAAQ,MAAM,QAAU,QAC5CA,EAAoB,QAAQ,MAAM,IAAM,QAAQr3F,EAAM,OAAO,MAAM,GAAG,MAAMs3F,CAAwB,QAAQP,EAAc,MAC1HM,EAAoB,QAAQ,MAAM,KAAO,QAAQr3F,EAAM,OAAO,MAAM,IAAI,MAAMs3F,CAAwB,QAAQP,EAAc,MAEhI,EAEMU,EAA+B,IAAM,CACrCJ,EAAoB,UACtBA,EAAoB,QAAQ,MAAM,QAAU,OAEhD,EAEMK,EACJ13F,GACG,CACoBo3F,EAAiBp3F,CAAK,GAG3Cy3F,EAA6B,CAEjC,EAEME,EAAkB,CAACC,EAAmCd,KACnDc,EAAQ,IAAKC,GAAW,CAC7B,MAAMjlF,EAAK,GAAGilF,EAAO,CAAC,IAAIA,EAAO,CAAC,GAG5Bl2F,EAAQ,CACZ,IAAK,QAAQ,CAACk2F,EAAO,EAAI,GAAK,EAAE,OAAOb,EAAS,QAAQD,EAAc,MACtE,KAAM,QAAQc,EAAO,EAAI,GAAK,EAAE,OAAOb,EAAS,QAAQD,EAAc,KACxE,EAEA,SACE,OAAC,OACC,GAAAnkF,EACA,IAAM3O,GAAY,CACZA,GAEFA,EAAQ,MAAM,YAAY,iBAAkB,OAAQ,WAAW,CAEnE,EAEA,IAAK2yF,GACL,UAAWh8F,EAAO,OAClB,MAAA+G,EACA,IAAK41F,EACL,aAAcC,CAAA,EALT5kF,CAMP,CAEJ,CAAC,EAGH,SACE,QAAC,OAAI,UAAWhY,EAAO,KAAM,IAAKs8F,EAChC,oBAAC,OAAI,UAAWt8F,EAAO,YAAa,WAAY88F,EAAyB,OAAQA,CAAA,CAAyB,KAC1G,OAAC,OACC,GAAIf,GACJ,IAAKU,EACL,UAAWz8F,EAAO,iBAClB,aAAc68F,CAAA,CAChB,KACA,OAAC,OAAI,IAAKN,EAAgB,SAAAQ,EAAgB,EAAE,GAC9C,CAEJ,EAEM,GAAax8F,IAA0B,CAC3C,QAAM,OAAI,CACR,SAAU,WACV,QAAS,MACX,CAAC,EACD,eAAa,OAAI,CACf,SAAU,WACV,OAAQ,QACR,MAAO,oBACP,OAAQ,mBACV,CAAC,EACD,UAAQ,OAAI,CACV,QAAS,GAAG47F,EAAc,KAC1B,SAAU,WACV,OAAQ,SACR,MAAO,kBAAkBA,EAAc,MACvC,OAAQ,kBAAkBA,EAAc,MACxC,OAAQ,GACV,CAAC,EACD,oBAAkB,OAAI,CACpB,gBAAiB,UACjB,QAAS,GACT,SAAU,WACV,OAAQ,SACR,cAAe,OACf,MAAO,OACP,OAAQ,OACR,aAAc57F,EAAM,MAAM,OAAO,OACjC,QAAS,OACT,OAAQ,GACV,CAAC,CACH,G,4BC7IO,MAAM28F,GAAkB,CAACC,EAAmBrsE,EAAoBssE,EAAoBC,IAAyB,CAClH,OAAQD,EAAW,CACjB,IAAK,GACH,OAAQC,EAAc,CACpB,IAAK,GAECF,EAAI,kBAAkB1xF,GAEpBqlB,EAAK,SACPwsE,GAAeH,EAAKrsE,EAAK,OAAQA,EAAK,OAAO,SAAS,MAAM,EAC5DqsE,EAAI,WAAWrsE,EAAK,OAAO,MAAM,OAAO,GAG1CA,EAAK,QAAQ,YAAYqsE,EAAKrsE,EAAM,EAAI,EAE1C,MACF,QACMA,EAAK,SACPwsE,GAAeH,EAAKrsE,EAAK,OAAQA,EAAK,OAAO,SAAS,QAAQA,CAAI,CAAC,EACnEqsE,EAAI,WAAWrsE,EAAK,OAAO,MAAM,OAAO,GAE1C,KACJ,CACA,MACF,IAAK,GACCA,aAAgBrlB,GACd0xF,EAAI,SAAWrsE,EAEjBqsE,EAAI,QAAQ,YAAYA,EAAKrsE,EAAM,EAAI,GAEvCwsE,GAAeH,EAAKrsE,CAAI,EACxBqsE,EAAI,WAAWrsE,EAAK,MAAM,OAAO,GAE1BqsE,EAAI,SAAWrsE,EAAK,OAC7BqsE,EAAI,QAAQ,YAAYA,EAAKrsE,CAAI,EAE7BA,EAAK,SACPwsE,GAAeH,EAAKrsE,EAAK,MAAM,EAC/BqsE,EAAI,WAAWrsE,EAAK,OAAO,MAAM,OAAO,GAG5C,KACJ,CACF,EAGMwsE,GAAiB,CAACH,EAAmBrsE,EAAgCysE,EAAqB,OAAS,CACvGJ,EAAI,QAAQ,SAAS3iG,GAAc,OAAQ2iG,CAAG,EAC9CA,EAAI,OAASrsE,EAEb,MAAMvnB,EAAmB4zF,EAAI,KAAK,sBAAsB,EACxDA,EAAI,2BAA2B5zF,EAAkBunB,EAAK,KAAK,sBAAsB,CAAC,EAElF,MAAM0sE,EAAYD,GAAOzsE,EAAK,SAAS,OAAS,EAChDA,EAAK,SAAS,OAAO0sE,EAAW,EAAGL,CAAG,EACtCrsE,EAAK,MAAM,KAAK,EAEhBA,EAAK,qBAAqB,CAC5B,EAGa2sE,GAAsB,CAACl3F,EAAiBm3F,IAA4D,CAG/G,MAAMC,EAAQ,CAAC,GAAGD,CAAa,EAC/B,KAAOC,EAAM,OAAS,GAAG,CACvB,MAAMC,EAAiBD,EAAM,MAAM,EAEnC,GAAIC,GAAkBA,EAAe,KAAOA,EAAe,MAAQr3F,EACjE,OAAOq3F,EAGT,MAAMC,EAAiBD,aAA0BnyF,GAAamyF,EAAe,SAAW,CAAC,EACzF,UAAWE,KAAiBD,EAC1BF,EAAM,QAAQG,CAAa,CAE/B,CAGF,EAGaC,GAAkB16F,GAAiB,CAC9CA,EAAM,UAAU,QAAK26F,GAAA,GAAM,CAAC,EAAE,UAAWC,GAA4B,CACnE,MAAMC,EAAeD,EAAwB,CAAC,EAAE,OAE1CE,EAAW,IAAI1yF,GACnB,CACE,KAAM,QACN,KAAMpI,EAAM,mBAAmB,EAAI,EACnC,SAAU,CAAC,CACb,EACAA,EACA46F,EAAwB,CAAC,EAAE,MAC7B,EAEMG,EAAiBC,GAAuBJ,CAAuB,EAErEE,EAAS,QAAQ,UAAYC,EAE7BH,EAAwB,QAAS50F,GAA0B,CACzD,MAAME,EAAmBF,EAAQ,KAAK,sBAAsB,EAG5DA,EAAQ,2BAA2BE,EAAkB60F,CAAyB,EAC9EF,EAAa,SAAS1jG,GAAc,OAAQ6O,CAAO,EACnD80F,EAAS,SAAS3jG,GAAc,UAAW6O,EAAS,GAAO,EAAK,CAClE,CAAC,EAGD80F,EAAS,2BAA2BC,EAA2BF,EAAa,KAAK,sBAAsB,CAAC,EAExGA,EAAa,SAAS,KAAKC,CAAQ,EAEnC96F,EAAM,OAAO,IAAI86F,EAAS,QAAQ,EAAGA,CAAQ,EAE7C96F,EAAM,KAAK,CACb,CAAC,CACH,EAGMg7F,GAA0BziF,GAAwC,CACtE,IAAI0oD,EAAS,IACTD,EAAU,IACVi6B,EAAW,EACXC,EAAY,EAEhB,OAAA3iF,EAAS,QAASvS,GAA0B,CAC1C,MAAME,EAAmBF,EAAQ,KAAK,sBAAsB,EAEvDE,IAID+6D,EAAS/6D,EAAiB,MAC5B+6D,EAAS/6D,EAAiB,KAGxB86D,EAAU96D,EAAiB,OAC7B86D,EAAU96D,EAAiB,MAGzB+0F,EAAW/0F,EAAiB,QAC9B+0F,EAAW/0F,EAAiB,OAG1Bg1F,EAAYh1F,EAAiB,SAC/Bg1F,EAAYh1F,EAAiB,QAEjC,CAAC,EAEM,CACL,IAAK+6D,EACL,KAAMD,EACN,MAAOi6B,EAAWj6B,EAClB,OAAQk6B,EAAYj6B,CACtB,CACF,EC1IA,IAAIk6B,GAAY,EAChB,MAAMC,GAAmB,CAAC,QAAS,UAAU,EAEhCC,GAAgB,CAAC,CAC5B,UAAAC,EACA,WAAAC,EACA,gBAAAC,EACA,iBAAAC,EACA,aAAAC,EACA,MAAA17F,CACF,IAAa,CACX,MAAMrD,KAAS,OAAW,EAAS,EAE7Bg/F,EAAS,KAAK,IAAI,EAAI,IAAMR,KAC5BS,KAAqB,WAAQ,IAAM,oBAAoBD,CAAM,GAAI,CAACA,CAAM,CAAC,EACzEE,KAAiB,WAAQ,IAAM,cAAcF,CAAM,GAAI,CAACA,CAAM,CAAC,EAC/D1uF,EAAoB,MAAO,OAAO,OAAO,KAAK,QAC9CF,EAAmB,EACnBC,EAAkD,CACtD,KAAM,MAAuB,MAC7B,MAAO,MAAoB,OAC7B,EACM8uF,EAAkB,GAElB,CAACC,EAAoBC,CAAqB,KAAI,YAAsC,MAAS,EAG7FC,KAAwB,UAAOF,CAAkB,KACvD,aAAU,IAAM,CACdE,EAAsB,QAAUF,CAClC,CAAC,KAED,aAAU,IAAM,CACV/7F,EAAM,MAAM,QAAQ,eAAe,oBACrCg8F,EAAsBh8F,EAAM,MAAM,QAAQ,eAAe,kBAAkB,CAE/E,EAAG,CAACA,EAAM,MAAM,QAAQ,eAAe,kBAAkB,CAAC,EAE1D,MAAMgC,EAAWzJ,GAAqB,CACpC,MAAM2K,EAAS3K,EAAE,OAEjB,GAAM2K,aAAkB,aAIpB,EAAAk4F,GAAiB,QAAQl4F,EAAO,SAAS,YAAY,CAAC,EAAI,IAK9D,IAAI3K,EAAE,UAAY,GAAKA,EAAE,UAAY,GAC/B0jG,EAAsB,SAAWA,EAAsB,QAAQ,SACjEA,EAAsB,QAAQ,OAAO,QAAQ,YAC3CA,EAAsB,QAAQ,OAAO,QAAQ,aAAa,OACvDj0F,GAAeA,IAAei0F,EAAsB,SAAS,IAChE,EACFA,EAAsB,QAAQ,OAAO,SAASA,EAAsB,QAAQ,OAAO,OAAO,EAE1FD,EAAsB,MAAS,EAC/Bh8F,EAAM,YAAY,OAAO,MAAS,EAClCA,EAAM,YAAY,YAAY,EAC9BA,EAAM,KAAK,OAIb,QAGF,SAAS,oBAAoB,QAASgC,CAAO,EAC7ChC,EAAM,QAAS,cAAe,oBAAoB,QAASk8F,CAAuB,EACpF,EAEMA,EAA2Bn6F,GAAsB,CACrD,MAAMm/E,EAAcn/E,EAAM,OAEY,EACpCm/E,aAAuB,gBAAkBA,EAAY,KAAO0a,KAI5DI,EAAsB,MAAS,EAC/Bh8F,EAAM,YAAY,OAAO,MAAS,EAEtC,EAEMm8F,EAAoBn0F,GAAgC,CACpDhI,EAAM,mBACRg8F,EAAsBh0F,CAAU,EAChChI,EAAM,YAAY,OAAOgI,CAAU,EAEnC,SAAS,iBAAiB,QAAShG,CAAO,EAC1ChC,EAAM,QAAS,cAAe,iBAAiB,QAASk8F,CAAuB,EAEnF,EAGME,EAAoB,IAEtBp8F,EAAM,YAAY,MAEf,KAAK,CAAC2R,EAAIlZ,IAAOsjG,IAAuBtjG,GAAKuH,EAAM,MAAM,QAAQ,cAAc,mBAAqB,GAAK,CAAE,EAC3G,IAAI,CAAC2H,EAAGuyF,IAAQ,CACf,KAAM,CAAE,OAAArvF,EAAQ,OAAA3H,EAAQ,KAAA8G,EAAM,SAAAqyF,EAAU,MAAA3yF,CAAM,EAAI/B,EAC5CmC,EAAae,EAAO,KAAK,sBAAsB,EAC/C7H,EAAS6H,EAAO,KAAK,cACrBzE,EAAiBpG,EAAM,MACvB+J,EAAa2D,GAA4B1N,CAAK,EAEpD,GAAI,CAAC8J,GAAc,CAAC9G,GAAU,CAAC+G,EAC7B,OAGF,KAAM,CAAE,GAAAI,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,CAAG,EAAIT,GAAqBC,EAAYC,EAAYC,EAAM9G,EAAQkD,CAAc,EAEpG,GAAI,CAAE,OAAAk2F,EAAQ,OAAAC,EAAQ,KAAAC,EAAM,KAAAC,CAAK,EAAI,CAAE,OAAQtyF,EAAI,OAAQC,EAAI,KAAMC,EAAI,KAAMC,CAAG,EAC9E3C,EAAE,gBAAkBA,EAAE,gBACxB20F,EAAS30F,EAAE,eAAe,EAC1B40F,EAAS50F,EAAE,eAAe,EAC1B60F,EAAO70F,EAAE,eAAe,EACxB80F,EAAO90F,EAAE,eAAe,GACfkD,EAAO,QAAQ,cAGtB,CAACA,EAAO,QAAQ,YAAYnB,CAAK,EAAE,gBACnC,CAACmB,EAAO,QAAQ,YAAYnB,CAAK,EAAE,kBAEnCmB,EAAO,QAAQ,YAAYnB,CAAK,EAAE,eAAiB,CAAE,EAAGS,EAAI,EAAGC,CAAG,EAClES,EAAO,QAAQ,YAAYnB,CAAK,EAAE,eAAiB,CAAE,EAAGW,EAAI,EAAGC,CAAG,GAItE,MAAMoyF,EAAWnwF,GAAkBpC,EAAIC,EAAIC,EAAIC,CAAE,EAC3CqyF,EAAQH,EAAOF,EACfM,EAAQH,EAAOF,EAEf,CAAE,YAAApvF,GAAa,YAAAC,GAAa,aAAAC,GAAc,eAAAC,GAAgB,UAAAC,EAAW,cAAAE,EAAc,EACvFX,GACE9C,EACAhK,EACA+M,EACAC,EAAsB,OAAS,MAAoB,OACrD,EAEIjN,GAAag8F,IAAuBp0F,GAAK3H,EAAM,MAAM,QAAQ,cAAc,mBAE3E68F,GAAwB78F,EAAM,iBAAmB,OAAS,GAC1D88F,GAAiB,CAAE,OAAQ,UAAW,cAAe,GAAK,YAAa1vF,GAAc,CAAE,EAEvF2vF,GAA2B,uBAAuBpB,EAAS,KAAK,OAAO,CAAC,GACxEqB,GAAyB,qBAAqBrB,EAAS,KAAK,OAAO,CAAC,GAEpEjkB,GAASrqE,GAET4vF,GAAuC,CAAC,EAC9C,IAAIC,GAAa,IAAI/yF,CAAE,IAAIC,CAAE,IACzBiyF,GAAU,SACZA,EAAS,IAAI,CAACc,GAAQzzF,KAAU,CAC9B,MAAMwB,GAAIiyF,GAAO,EACXhyF,GAAIgyF,GAAO,EAGXC,GAAIlyF,GAAIyxF,EAAQL,EAChBe,GAAIlyF,GAAIyxF,EAAQL,EAGtB,IAAIe,GAAKF,GACLG,GAAKF,GAGLG,GAAKJ,GACLK,GAAKJ,GAGLK,GAAW,EACXC,GAAS,EACTC,GAAS,EAGb,GAAIlmB,GAAQ,CACV,GAAIhuE,GAAQ2yF,EAAS,OAAS,EAAG,CAC/B,MAAMwB,GAAKxB,EAAS3yF,GAAQ,CAAC,EAAE,EAAIizF,EAAQL,EACrCwB,GAAKzB,EAAS3yF,GAAQ,CAAC,EAAE,EAAIkzF,EAAQL,EAC3C,GAAI7yF,KAAU,EAEZi0F,GAAShxF,GAAexC,EAAIC,EAAIgzF,GAAGC,EAAC,EACpCO,GAASjxF,GAAeywF,GAAGC,GAAGQ,GAAIC,EAAE,MAC/B,CAEL,MAAMC,GAAiB1B,EAAS3yF,GAAQ,CAAC,EACnCs0F,GAAKD,GAAe,EAAIpB,EAAQL,EAChC2B,GAAKF,GAAe,EAAInB,EAAQL,EACtCoB,GAAShxF,GAAeqxF,GAAIC,GAAIb,GAAGC,EAAC,EACpCO,GAASjxF,GAAeywF,GAAGC,GAAGQ,GAAIC,EAAE,CACtC,CACF,KAAO,CAEL,GAAIp0F,GAAQ,EAAG,CAEb,MAAMq0F,GAAiB1B,EAAS3yF,GAAQ,CAAC,EACnCs0F,GAAKD,GAAe,EAAIpB,EAAQL,EAChC2B,GAAKF,GAAe,EAAInB,EAAQL,EACtCoB,GAAShxF,GAAeqxF,GAAIC,GAAIb,GAAGC,EAAC,CACtC,MACEM,GAAShxF,GAAexC,EAAIC,EAAIgzF,GAAGC,EAAC,EAEtCO,GAASjxF,GAAeywF,GAAGC,GAAGhzF,EAAIC,CAAE,CACtC,CAGA,MAAM4zF,GAAQN,GAASD,GAEjBQ,GAAMD,GAAQ,EAEpBR,GAAWhmB,GAAS,KAAK,IAAIwmB,GAAQ,CAAC,EAClCC,KACFT,IAAY,GAEhB,CAEA,GAAIh0F,KAAU,GAOZ,GALAuzF,GAAY,KACV1wF,IAAmBpC,EAAKmyF,IAAWE,EAAOF,IAAUlyF,EAAKmyF,IAAWE,EAAOF,GAASrxF,GAAGC,EAAC,CAC1F,EAGIusE,GAAQ,CAEV,MAAM0mB,GAAWxxF,GAAkBwwF,GAAGC,GAAGlzF,EAAIC,CAAE,EAC3C,KAAK,IAAIszF,EAAQ,EAAI,GAAM,KAAK,IAAIU,EAAQ,IAE9CV,GAAW,GAAMU,IAGnB,IAAIP,GAAKxzF,EACLyzF,GAAKxzF,EACT,GAAIZ,GAAQ2yF,EAAS,OAAS,EAAG,CAE/B,MAAMgC,GAAahC,EAAS3yF,GAAQ,CAAC,EACrCm0F,GAAKQ,GAAW,EAAI1B,EAAQL,EAC5BwB,GAAKO,GAAW,EAAIzB,EAAQL,CAC9B,CAGA,MAAM+B,GAAe1xF,GAAkBwwF,GAAGC,GAAGQ,GAAIC,EAAE,EAC/C,KAAK,IAAIJ,EAAQ,EAAI,GAAM,KAAK,IAAIY,EAAY,IAElDZ,GAAW,GAAMY,IAGnB,MAAMC,GAASH,GAAWV,GAC1BJ,GAAK,KAAK,MAAMiB,GAAS,KAAK,IAAIZ,EAAM,EAAIxzF,CAAE,EAC9CozF,GAAK,KAAK,MAAMgB,GAAS,KAAK,IAAIZ,EAAM,EAAIvzF,CAAE,EAC9CozF,GAAK,KAAK,MAAME,GAAW,KAAK,IAAIE,EAAM,EAAIR,EAAC,EAC/CK,GAAK,KAAK,MAAMC,GAAW,KAAK,IAAIE,EAAM,EAAIP,EAAC,GAG1CC,GAAKF,IAAKE,GAAKnzF,GAAQmzF,GAAKF,IAAKE,GAAKnzF,KACzCmzF,IAAMiB,GAAS,EAAIb,IAAY,KAAK,IAAIC,EAAM,EAAIxzF,EAClDozF,IAAMgB,GAAS,EAAIb,IAAY,KAAK,IAAIC,EAAM,EAAIvzF,EAClDozF,GAAK,CAACE,GAAW,KAAK,IAAIE,EAAM,EAAIR,GACpCK,GAAK,CAACC,GAAW,KAAK,IAAIE,EAAM,EAAIP,GAExC,MACK,CAEL,MAAMU,GAAiB1B,EAAS3yF,GAAQ,CAAC,EAIzC,GAHAuzF,GAAY,KAAK1wF,GAAkBwxF,GAAe,EAAGA,GAAe,EAAG7yF,GAAGC,EAAC,CAAC,EAGxEusE,GAAQ,CAEV,MAAMsmB,GAAKD,GAAe,EAAIpB,EAAQL,EAChC2B,GAAKF,GAAe,EAAInB,EAAQL,EAGhC6B,GAAWxxF,GAAkBwwF,GAAGC,GAAGW,GAAIC,EAAE,EAC3C,KAAK,IAAIP,EAAQ,EAAI,GAAM,KAAK,IAAIU,EAAQ,IAE9CV,GAAW,GAAMU,IAGnB,IAAIP,GAAKxzF,EACLyzF,GAAKxzF,EACT,GAAIZ,GAAQ2yF,EAAS,OAAS,EAAG,CAE/B,MAAMgC,GAAahC,EAAS3yF,GAAQ,CAAC,EACrCm0F,GAAKQ,GAAW,EAAI1B,EAAQL,EAC5BwB,GAAKO,GAAW,EAAIzB,EAAQL,CAC9B,CAGA,MAAM+B,GAAe1xF,GAAkBwwF,GAAGC,GAAGQ,GAAIC,EAAE,EAC/C,KAAK,IAAIJ,EAAQ,EAAI,GAAM,KAAK,IAAIY,EAAY,IAElDZ,GAAW,GAAMY,IAInB,MAAMC,GAASH,GAAWV,GAC1BJ,GAAK,KAAK,MAAMiB,GAAS,KAAK,IAAIZ,EAAM,EAAIK,EAAE,EAC9CT,GAAK,KAAK,MAAMgB,GAAS,KAAK,IAAIZ,EAAM,EAAIM,EAAE,EAC9CT,GAAK,KAAK,MAAME,GAAW,KAAK,IAAIE,EAAM,EAAIR,EAAC,EAC/CK,GAAK,KAAK,MAAMC,GAAW,KAAK,IAAIE,EAAM,EAAIP,EAAC,GAG1CC,GAAKF,IAAKE,GAAKU,IAAQV,GAAKF,IAAKE,GAAKU,MACzCV,IAAMiB,GAAS,EAAIb,IAAY,KAAK,IAAIC,EAAM,EAAIK,GAClDT,IAAMgB,GAAS,EAAIb,IAAY,KAAK,IAAIC,EAAM,EAAIM,GAClDT,GAAK,CAACE,GAAW,KAAK,IAAIE,EAAM,EAAIR,GACpCK,GAAK,CAACC,GAAW,KAAK,IAAIE,EAAM,EAAIP,GAExC,CACF,CACI3zF,KAAU2yF,EAAS,OAAS,GAE9BY,GAAY,KACV1wF,IAAmBlC,EAAKiyF,IAAWE,EAAOF,IAAUhyF,EAAKiyF,IAAWE,EAAOF,GAASrxF,GAAGC,EAAC,CAC1F,EAGF+xF,IAAc,IAAII,EAAE,IAAIC,EAAE,IAEtBG,KAAa,IAEfR,IAAc,KAAKE,EAAC,IAAIC,EAAC,IAAIG,EAAE,IAAIC,EAAE,IAEzC,CAAC,EAEDP,IAAc,IAAI7yF,CAAE,IAAIC,CAAE,IAG5B,MAAMk0F,GACJlxF,KAAmB,MAAoB,SAAWA,KAAmB,MAAoB,KACrF,QAAQyvF,EAAwB,IAChC,OAEA0B,GACJnxF,KAAmB,MAAoB,SAAWA,KAAmB,MAAoB,KACrF,QAAQ0vF,EAAsB,IAC9B,OAEA0B,GAAwB,IAAM,CAClC,IAAI9rF,GAAS,QAEb,OAAItF,KAAmB,MAAoB,UACzCsF,GAAS,SAGJA,EACT,EAEA,SACE,OAAC,OAAI,UAAWjW,EAAO,WACrB,oBAAC,KAAE,QAAS,IAAMw/F,EAAiBx0F,CAAC,EAClC,qBAAC,QACC,oBAAC,UACC,GAAIo1F,GACJ,YAAY,KACZ,aAAa,IACb,KAAK,IACL,KAAK,MACL,OAAO,OACP,OAAQ5vF,GAER,mBAAC,WAAQ,OAAO,oBAAoB,KAAMA,EAAA,CAAa,EACzD,KACA,OAAC,UACC,GAAI6vF,GACJ,YAAY,KACZ,aAAa,IACb,KAAK,KACL,KAAK,MACL,OAAO,OACP,OAAQ7vF,GAER,mBAAC,WAAQ,OAAO,mBAAmB,KAAMA,EAAA,CAAa,EACxD,GACF,EACCkvF,GAAU,UACT,QAAC,KACC,oBAAC,QACC,GAAI,GAAGT,CAAkB,eACzB,EAAGsB,GACH,OAAQL,GACR,cAAc,OACd,OAAO,cACP,YAAa,GACb,KAAM,OACN,MAAO98F,GAAa+8F,GAAiB,CAAC,EACxC,KACA,OAAC,QACC,EAAGI,GACH,OAAQ/vF,GACR,YAAAC,GACA,gBAAiBG,EACjB,iBAAkB,EAClB,KAAM,OACN,UAAAkxF,GACA,YAAAD,GAEC,SAAA/wF,OACC,OAAC,WACC,cAAc,oBACd,OAAQixF,GAAsB,EAC9B,IAAI,KACJ,SAAS,SACT,YAAY,aACZ,KAAM,SACR,EAEJ,EACC3+F,OACC,QAAC,KACE,UAAAs8F,EAAS,IAAI,CAAC7kG,GAAOkS,QAElB,OAAC,UACC,GAAIi1F,GACJ,aAAYj1F,GAEZ,GAAIlS,GAAM,EAAImlG,EAAQL,EACtB,GAAI9kG,GAAM,EAAIolG,EAAQL,EACtB,EAAG,EACH,OAAQpvF,GACR,UAAWxQ,EAAO,OAClB,OAAQ,YACR,cAAc,QAPT,GAAGgiG,EAAoB,GAAGj1F,EAAK,IAAIwwF,CAAG,EAQ7C,CAEH,EACAmC,EAAS,OAASP,GACjBmB,GAAY,IAAI,CAACzlG,GAAOkS,QAEpB,OAAC,UACC,GAAIk1F,GACJ,aAAYl1F,GAEZ,GAAIlS,GAAM,EAAImlG,EAAQL,EACtB,GAAI9kG,GAAM,EAAIolG,EAAQL,EACtB,EAAG,EACH,OAAQpvF,GACR,UAAWxQ,EAAO,UAClB,OAAQ,YACR,cAAc,QAPT,GAAGiiG,EAAwB,GAAGl1F,EAAK,IAAIwwF,CAAG,EAQjD,CAEH,GACL,GAEJ,KAEA,QAAC,KACC,oBAAC,QACC,GAAI,GAAG0B,CAAkB,eACzB,OAAQiB,GACR,cAAc,OACd,OAAO,cACP,YAAa,GACb,MAAO98F,GAAa+8F,GAAiB,CAAC,EACtC,GAAA3yF,EACA,GAAAC,EACA,GAAAC,EACA,GAAAC,CAAA,CACF,KACA,OAAC,QACC,GAAIsxF,EACJ,OAAQzuF,GACR,cAAc,OACd,YAAAC,GACA,UAAAqxF,GACA,YAAAD,GACA,gBAAiBjxF,EACjB,iBAAkB,EAClB,GAAApD,EACA,GAAAC,EACA,GAAAC,EACA,GAAAC,EACA,OAAQuyF,GAEP,SAAApvF,OACC,OAAC,WACC,cAAc,oBACd,OAAQixF,GAAsB,EAC9B,IAAI,KACJ,SAAS,SACT,YAAY,aACZ,KAAM,SACR,EAEJ,EACC3+F,OACC,OAAC,UACC,GAAI6+F,GACJ,aAAY,EACZ,GAAIlC,EAAS,EACb,GAAIA,EAAS,EACb,EAAG,EACH,OAAQvvF,GACR,UAAWxQ,EAAO,UAClB,OAAQ,YACR,cAAc,OAChB,GAEJ,GAEJ,GAxJsCu9F,CAyJxC,CAEJ,CAAC,EAIP,SACE,oBACE,qBAAC,OAAI,IAAKoB,EAAW,UAAW3+F,EAAO,UACrC,oBAAC,QACC,mBAAC,UACC,GAAIk/F,EACJ,YAAY,KACZ,aAAa,IACb,KAAK,KACL,KAAK,MACL,OAAO,OACP,OAAQ5uF,EAER,mBAAC,WAAQ,OAAO,mBAAmB,KAAMA,CAAA,CAAmB,EAC9D,EACF,KACA,OAAC,QAAK,IAAKsuF,EAAY,OAAQtuF,EAAmB,YAAa,EAAG,UAAW,QAAQ4uF,CAAc,IAAK,GAC1G,KACA,QAAC,OAAI,IAAKL,EAAiB,UAAW7+F,EAAO,UAC3C,oBAAC,QACC,IAAK8+F,EACL,OAAQxuF,EACR,YAAa,EACb,gBAAiB,OACjB,KAAM,OACR,KACA,OAAC,UAAO,IAAKyuF,EAAc,OAAQzuF,EAAmB,EAAG,EAAG,UAAWtQ,EAAO,OAAQ,GACxF,EACCy/F,EAAkB,GACrB,CAEJ,EAEM,GAAal/F,IAA0B,CAC3C,aAAW,OAAI,CACb,SAAU,WACV,cAAe,OACf,MAAO,OACP,OAAQ,OACR,OAAQ,IACR,QAAS,MACX,CAAC,EACD,cAAY,OAAI,CACd,SAAU,WACV,MAAO,OACP,OAAQ,OACR,OAAQ,IACR,cAAe,MACjB,CAAC,EACD,UAAQ,OAAI,CACV,KAAM,UACN,YAAa,CACf,CAAC,EACD,aAAW,OAAI,CACb,KAAM,UACN,QAAS,GACT,YAAa,CACf,CAAC,CACH,GC5jBayhG,GAAuB,SACvBC,GAA2B,YAClCC,GAAoC,IACpCC,GAAoC,EAAI,IAAO,KAAK,GAEnD,MAAMC,EAAY,CAmBvB,YAAY/+F,EAAc,CAH1B,WAA2B,CAAC,EAC5B,KAAS,UAAY,IAAIg/F,GAAA,EAA6C,MAAS,EAO/E,YAAUh3F,GAA4C,CAChDA,IAAe,KAAK,UAAU,OAGlC,KAAK,UAAU,KAAKA,CAAU,CAChC,EAEA,iBAAc,IAAM,CAClB,MAAM8H,EAAI,KAAK,UAAU,MAGzB,GAFA,KAAK,MAAQvG,GAAe,KAAK,MAAM,MAAM,EAEzCuG,GACF,QAASrG,KAAK,KAAK,MACjB,GAAIA,EAAE,SAAWqG,EAAE,QAAUrG,EAAE,QAAUqG,EAAE,MAAO,CAChD,KAAK,UAAU,KAAKrG,CAAC,EACrB,KACF,EAGN,EAEA,4BAA0Bw1F,GAAkC,CAC1D,KAAK,oBAAsBA,CAC7B,EAEA,mBAAiBC,GAAmC,CAClD,KAAK,WAAaA,CACpB,EAEA,yBAAuBC,GAAiC,CACtD,KAAK,cAAgBA,CACvB,EAEA,0BAAwBC,GAAmC,CACzD,KAAK,eAAiBA,CACxB,EAEA,+BAA6BD,GAAiC,CAC5D,KAAK,oBAAsBA,CAC7B,EAEA,4BAA0BE,GAAuC,CAC/D,KAAK,iBAAmBA,CAC1B,EAEA,gCAA8BC,GAAyC,CACrE,KAAK,qBAAuBA,CAC9B,EAGA,uBAAqBt5F,GAA+C,CAClE,IAAIu5F,EAGJ,GAAIv5F,IAAY,KAAK,MAAM,IAI3B,OAAAu5F,EAAgBnF,GAAoBp0F,EAAS,KAAK,MAAM,KAAK,QAAQ,EAEjE,CAACu5F,GAAiBv5F,EAAQ,gBAC5Bu5F,EAAgB,KAAK,kBAAkBv5F,EAAQ,aAAa,GAGvDu5F,CACT,EAEA,sBAAoBx9F,GAA4B,CAC9C,GAAI,EAAEA,EAAM,kBAAkB,UAAY,CAAC,KAAK,MAAM,iBACpD,OAGF,IAAIiE,EAAoC,KAAK,kBAAkBjE,EAAM,MAAM,EAE3E,GAAI,CAACiE,EAAS,CACZ,QAAQ,IAAI,YAAY,EACxB,MACF,CAEA,GAAI,KAAK,oBACP,KAAK,iBAAmBA,UAExB,KAAK,iBAAmBA,EACpB,CAAC,KAAK,iBAAkB,CAC1B,QAAQ,IAAI,sBAAsB,EAClC,MACF,CAGF,MAAMw5F,EAAuBx5F,GAAS,KAAK,yBAA2B6yF,GAGhEc,EAAU,MAAM,KAAK,KAAK,YAAY,QAAyC,EAC/E8F,EAAgBD,EAAqB,OAI3C7F,EAAQ,QAAQ,CAACC,EAAQlwF,IAAU,CACjC,GAAIA,GAAS+1F,EACX7F,EAAO,MAAM,QAAU,WAClB,CACL,KAAM,CAAE,EAAA1uF,EAAG,EAAAC,CAAE,EAAIq0F,EAAqB91F,CAAK,EAC3CkwF,EAAO,MAAM,IAAM,QAAQ,CAACzuF,EAAI,GAAK,EAAE,OAAO4tF,EAAS,QAAQD,EAAc,MAC7Ec,EAAO,MAAM,KAAO,QAAQ1uF,EAAI,GAAK,EAAE,OAAO6tF,EAAS,QAAQD,EAAc,MAC7Ec,EAAO,MAAM,QAAU,OACzB,CACF,CAAC,EAED,MAAM8F,EAAsB15F,EAAQ,IAAK,sBAAsB,EACzDI,EAAiB,KAAK,MAAM,MAC5Bu5F,EAAqBjyF,GAA4B,KAAK,KAAK,EAE3D5G,EAAc44F,EAAoB,KAAOC,GAAoB,KAAO,GACpE34F,EAAe04F,EAAoB,MAAQC,GAAoB,MAAQ,GAEzE,KAAK,sBACP,KAAK,oBAAoB,MAAM,QAAU,OACzC,KAAK,oBAAoB,MAAM,QAAU,QACzC,KAAK,oBAAoB,MAAM,IAAM,GAAG74F,EAAcV,CAAc,KACpE,KAAK,oBAAoB,MAAM,KAAO,GAAGY,EAAeZ,CAAc,KACtE,KAAK,oBAAoB,MAAM,OAAS,GAAGs5F,EAAoB,OAASt5F,CAAc,KACtF,KAAK,oBAAoB,MAAM,MAAQ,GAAGs5F,EAAoB,MAAQt5F,CAAc,KAExF,EAGA,sBAAoBrE,GAGhBA,EAAM,yBAAyB,kBAC/BA,EAAM,cAAc,aAAa,KAAK,IAAM42F,GAErC,IAGT,KAAK,iBAAmB,OACxB,KAAK,oBAAqB,MAAM,QAAU,OACnC,IAGT,wBAAsB52F,GAAsB,CAG1C,GAFAA,EAAM,eAAe,EAEjB,EAAE,KAAK,gBAAkB,KAAK,MAAM,KAAO,KAAK,MAAM,IAAI,eAC5D,OAGF,MAAMqE,EAAiB,KAAK,MAAM,MAC5Bu5F,EAAqBjyF,GAA4B,KAAK,KAAK,EAEjE,GAAI,CAACiyF,EACH,OAGF,MAAMz0F,EAAInJ,EAAM,OAAS49F,EAAmB,GAAK,GAC3Cx0F,EAAIpJ,EAAM,OAAS49F,EAAmB,GAAK,GAEjD,KAAK,eAAe,aAAa,KAAM,GAAGz0F,EAAI9E,CAAc,EAAE,EAC9D,KAAK,eAAe,aAAa,KAAM,GAAG+E,EAAI/E,CAAc,EAAE,EAE9D,MAAMw5F,EAAmB,KAAK,eAAe,GAAG,QAAQ,MAClDC,EAAmB,KAAK,eAAe,GAAG,QAAQ,MAUxD,GATK,KAAK,6BACiB,KAAK,MAAM30F,EAAI00F,EAAkBz0F,EAAI00F,CAAgB,EACvDjH,IAAsC,KAAK,gBAChE,KAAK,4BAA8B,GACnC,KAAK,cAAc,MAAM,QAAU,QACnC,KAAK,oBAAsB,IAI3B,CAAC72F,EAAM,QAAS,CAClB,GAAI,KAAK,kBAAoB,KAAK,iBAAiB,KAAO,KAAK,iBAAiB,IAAI,cAAe,CACjG,MAAM+H,EAAa,KAAK,iBAAiB,IAAI,sBAAsB,EAE7D1D,EAAiB,KAAK,MAAM,MAC5B2D,EAAa2D,GAA4B,KAAK,KAAK,EAEzD,GAAI,CAAC3D,EACH,OAGF,MAAMG,GAAwBJ,EAAW,IAAMC,EAAW,IAAMD,EAAW,OAAS,GAAK1D,EACnF6D,GAA0BH,EAAW,KAAOC,EAAW,KAAOD,EAAW,MAAQ,GAAK1D,EAItF05F,GAAWF,EAAmB31F,IAA2BH,EAAW,MAAQ,EAAI1D,GAChF25F,GAAW71F,EAAuB21F,IAAqB/1F,EAAW,OAAS,EAAI1D,GAErF,IAAI45F,EACAC,EACAC,EAEJ,GAAI,KAAK,kBAAoB,KAAK,iBAAiB,IAAK,CACtD,MAAM31F,EAAa,KAAK,iBAAiB,IAAI,sBAAsB,EAE7DE,EAAuBF,EAAW,IAAMR,EAAW,IAAMQ,EAAW,OAAS,EAC7EC,EAAyBD,EAAW,KAAOR,EAAW,KAAOQ,EAAW,MAAQ,EAEtFy1F,GAAW90F,EAAIV,IAA2BD,EAAW,MAAQ,GAC7D01F,GAAWx1F,EAAuBU,IAAMZ,EAAW,OAAS,GAC5D21F,EAAa,KAAK,iBAAiB,QAAQ,IAC7C,KAAO,CACL,MAAMv1F,EAAuBZ,EAAW,OAAS,EAC3CW,EAAyBX,EAAW,MAAQ,EAElDi2F,GAAW90F,EAAIR,IAA2BX,EAAW,MAAQ,GAC7Dk2F,GAAWt1F,EAAuBQ,IAAMpB,EAAW,OAAS,EAC9D,CAEA,MAAM/B,EAAa,CACjB,OAAQ,CACN,EAAG83F,EACH,EAAGC,CACL,EACA,OAAQ,CACN,EAAGC,EACH,EAAGC,CACL,EACA,WAAAC,EACA,MAAO,CACL,MAAOjpG,GAAA,EAAO,OAAO,OAAO,KAAK,OACnC,EACA,KAAM,CACJ,MAAO,EACP,IAAK,EACL,IAAK,EACP,EACA,KAAMgF,GAAe,QACvB,EAEM,CAAE,QAAAmB,CAAQ,EAAI,KAAK,iBACpBA,EAAQ,cACXA,EAAQ,YAAc,CAAC,GAErB,KAAK,8BACP,KAAK,iBAAiB,QAAQ,YAAc,CAAC,GAAGA,EAAQ,YAAa4K,CAAU,EAC/E,KAAK,iBAAiB,SAAS,KAAK,iBAAiB,OAAO,EAEhE,CAEI,KAAK,gBACP,KAAK,cAAc,MAAM,QAAU,QAGjC,KAAK,MAAM,SAAW,KAAK,MAAM,QAAQ,gBAC3C,KAAK,MAAM,QAAQ,cAAc,MAAM,OAAS,UAChD,KAAK,MAAM,QAAQ,cAAc,oBAAoB,YAAa,KAAK,kBAAkB,GAG3F,KAAK,oBAAsB,GAC3B,KAAK,YAAY,EACjB,KAAK,MAAM,KAAK,CAClB,CACF,EAGA,oBAAkBjG,GAAsB,CAKtC,GAJA,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,YAElDA,EAAM,eAAe,EAEjB,EAAE,KAAK,kBAAoB,KAAK,MAAM,KAAO,KAAK,MAAM,IAAI,eAC9D,OAGF,MAAMqE,EAAiB,KAAK,MAAM,MAC5Bu5F,EAAqBjyF,GAA4B,KAAK,KAAK,EAEjE,GAAI,CAACiyF,EACH,OAGF,MAAMz0F,GAAKnJ,EAAM,MAAQ49F,EAAmB,GAAKv5F,EAC3C+E,GAAKpJ,EAAM,MAAQ49F,EAAmB,GAAKv5F,EAEjD,KAAK,kBAAkB,aAAa,KAAM,GAAG8E,CAAC,EAAE,EAChD,KAAK,kBAAkB,aAAa,KAAM,GAAGC,CAAC,EAAE,EAEhD,MAAMg1F,EAAgB,KAAK,UAAU,MAC/Br2F,EAAaq2F,EAAe,OAAO,IAAK,sBAAsB,EAG9D,CAAE,GAAAh2F,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,CAAG,EAAIT,GACzBC,EACA61F,EACAQ,GAAe,KACfA,EAAe,OACf/5F,CACF,EAEA,GAAI,CAAE,OAAAk2F,EAAQ,OAAAC,EAAQ,KAAAC,EAAM,KAAAC,CAAK,EAAI,CAAE,OAAQtyF,EAAI,OAAQC,EAAI,KAAMC,EAAI,KAAMC,CAAG,EAC9E61F,GAAe,gBAAkBA,EAAc,iBACjD7D,EAAS6D,EAAc,eAAe,EACtC5D,EAAS4D,EAAc,eAAe,EACtC3D,EAAO2D,EAAc,eAAe,EACpC1D,EAAO0D,EAAc,eAAe,GAGtC,MAAMxD,EAAQH,EAAOF,EACfM,EAAQH,EAAOF,EAErB,IAAI6D,EAAMj2F,EACNk2F,EAAMj2F,EACNk2F,EAAMj2F,EACNk2F,EAAMj2F,EACN61F,GAAiBA,EAAc,WAC7B,KAAK,sBAAwB,QAAa,KAAK,oBAAsB,IACvEC,EAAMD,EAAc,SAAS,KAAK,oBAAsB,CAAC,EAAE,EAAIxD,EAAQL,EACvE+D,EAAMF,EAAc,SAAS,KAAK,oBAAsB,CAAC,EAAE,EAAIvD,EAAQL,GAErE,KAAK,sBAAwB,QAAa,KAAK,oBAAsB4D,EAAc,SAAS,OAAS,IACvGG,EAAMH,EAAc,SAAS,KAAK,oBAAsB,CAAC,EAAE,EAAIxD,EAAQL,EACvEiE,EAAMJ,EAAc,SAAS,KAAK,oBAAsB,CAAC,EAAE,EAAIvD,EAAQL,IAK3E,IAAIiE,EAAQt1F,EACRu1F,EAAQt1F,EACRu1F,EAAe,GAEnB,GAAI,CAAC3+F,EAAM,QAAS,CAElB,MAAM4+F,EAAiB,KAAK,KAAKz1F,EAAIk1F,IAAQj1F,EAAIk1F,EAAI,EAAIxB,GACnD+B,EAAgB,KAAK,KAAK11F,EAAIo1F,IAAQn1F,EAAIo1F,EAAI,EAAI1B,GAClDgC,EAAmB,KAAK,KAAK11F,EAAIk1F,IAAQn1F,EAAIk1F,EAAI,EAAIvB,GACrDiC,EAAkB,KAAK,KAAK31F,EAAIo1F,IAAQr1F,EAAIo1F,EAAI,EAAIzB,GAEtD8B,EACFH,EAAQJ,EACCQ,IACTJ,EAAQF,GAENO,EACFJ,EAAQJ,EACCS,IACTL,EAAQF,IAGLI,GAAkBC,KAAmBC,GAAoBC,GAC5D,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,OACzCH,GAAkBC,EAC3B,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,cACzCC,GAAoBC,KAC7B,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,cAGpD,MAAMC,EAAep0F,GAAeyzF,EAAKC,EAAKC,EAAKC,CAAG,EAChDS,EAAcr0F,GAAeyzF,EAAKC,EAAKn1F,EAAGC,CAAC,EACjDu1F,EAAe,KAAK,IAAIM,EAAcD,CAAY,EAAIjC,EACxD,CAeA,GAbI4B,GAEF,KAAK,sBAAsB,aAAa,IAAK,IAAIN,CAAG,IAAIC,CAAG,KAAKC,CAAG,IAAIC,CAAG,EAAE,EAC5E,KAAK,oBAAqB,MAAM,QAAU,QAC1C,KAAK,iBAAiB,MAAM,QAAU,SAGtC,KAAK,sBAAsB,aAAa,IAAK,IAAIH,CAAG,IAAIC,CAAG,KAAKG,CAAK,IAAIC,CAAK,KAAKH,CAAG,IAAIC,CAAG,EAAE,EAC/F,KAAK,oBAAqB,MAAM,QAAU,QAC1C,KAAK,iBAAiB,MAAM,QAAU,SAIpC,CAACx+F,EAAM,QAAS,CAElB,KAAK,MAAM,SAAS,eAAe,oBAAoB,YAAa,KAAK,cAAc,EACvF,KAAK,MAAM,SAAS,eAAe,oBAAoB,UAAW,KAAK,cAAc,EACrF,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,OAClD,KAAK,oBAAqB,MAAM,QAAU,OAG1C,MAAMk/F,EAAkBd,GAAe,MACjCe,EAAc,KAAK,oBAEzB,GAAID,IAAoB,QAAaC,IAAgB,OAAW,CAC9D,MAAMC,EAAgBhB,EAAe,OACrC,GAAIgB,EAAc,QAAQ,YAAa,CACrC,MAAMC,EAAqB,CAAC,GAAGD,EAAc,QAAQ,WAAW,EAChE,GAAIC,EAAmBH,CAAe,EAAE,SAAU,CAChD,MAAMI,EAAkB,CAAC,GAAGD,EAAmBH,CAAe,EAAE,QAAS,EAGzE,GAAIP,EACFW,EAAgB,OAAOH,EAAa,CAAC,MAChC,CACL,MAAMI,EAAgB,CAAE,GAAGD,EAAgBH,CAAW,CAAE,EAExDI,EAAc,GAAKd,EAAQlE,GAAUK,EACrC2E,EAAc,GAAKb,EAAQlE,GAAUK,EAErCyE,EAAgBH,CAAW,EAAII,CACjC,CAEAF,EAAmBH,CAAe,EAAI,CACpC,GAAGG,EAAmBH,CAAe,EACrC,SAAUI,CACZ,EAGAF,EAAc,SAAS,CAAE,GAAGA,EAAc,QAAS,YAAaC,CAAmB,CAAC,EACpF,KAAK,YAAY,EACjB,KAAK,MAAM,KAAK,CAClB,CACF,CACF,CACF,CACF,EAGA,uBAAqBr/F,GAAsB,CAKzC,GAJA,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,YAElDA,EAAM,eAAe,EAEjB,EAAE,KAAK,kBAAoB,KAAK,MAAM,KAAO,KAAK,MAAM,IAAI,eAC9D,OAGF,MAAMqE,EAAiB,KAAK,MAAM,MAC5Bu5F,EAAqBjyF,GAA4B,KAAK,KAAK,EAEjE,GAAI,CAACiyF,EACH,OAGF,MAAMz0F,GAAKnJ,EAAM,MAAQ49F,EAAmB,GAAKv5F,EAC3C+E,GAAKpJ,EAAM,MAAQ49F,EAAmB,GAAKv5F,EAEjD,KAAK,kBAAkB,aAAa,KAAM,GAAG8E,CAAC,EAAE,EAChD,KAAK,kBAAkB,aAAa,KAAM,GAAGC,CAAC,EAAE,EAEhD,MAAMg1F,EAAgB,KAAK,UAAU,MAC/Br2F,EAAaq2F,EAAe,OAAO,IAAK,sBAAsB,EAG9D,CAAE,GAAAh2F,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,CAAG,EAAIT,GACzBC,EACA61F,EACAQ,GAAe,KACfA,EAAe,OACf/5F,CACF,EAEA,GAAI,CAAE,OAAAk2F,EAAQ,OAAAC,EAAQ,KAAAC,EAAM,KAAAC,CAAK,EAAI,CAAE,OAAQtyF,EAAI,OAAQC,EAAI,KAAMC,EAAI,KAAMC,CAAG,EAC9E61F,GAAe,gBAAkBA,EAAc,iBACjD7D,EAAS6D,EAAc,eAAe,EACtC5D,EAAS4D,EAAc,eAAe,EACtC3D,EAAO2D,EAAc,eAAe,EACpC1D,EAAO0D,EAAc,eAAe,GAGtC,MAAMxD,EAAQH,EAAOF,EACfM,EAAQH,EAAOF,EAErB,IAAI6D,EAAMj2F,EACNk2F,EAAMj2F,EACNk2F,EAAMj2F,EACNk2F,EAAMj2F,EACN61F,GAAiBA,EAAc,WAC7B,KAAK,sBAAwB,QAAa,KAAK,oBAAsB,IACvEC,EAAMD,EAAc,SAAS,KAAK,oBAAsB,CAAC,EAAE,EAAIxD,EAAQL,EACvE+D,EAAMF,EAAc,SAAS,KAAK,oBAAsB,CAAC,EAAE,EAAIvD,EAAQL,GAErE,KAAK,sBAAwB,QAAa,KAAK,oBAAsB4D,EAAc,SAAS,SAC9FG,EAAMH,EAAc,SAAS,KAAK,mBAAmB,EAAE,EAAIxD,EAAQL,EACnEiE,EAAMJ,EAAc,SAAS,KAAK,mBAAmB,EAAE,EAAIvD,EAAQL,IAKvE,IAAIiE,EAAQt1F,EACRu1F,EAAQt1F,EAEZ,GAAI,CAACpJ,EAAM,QAAS,CAElB,MAAM4+F,EAAiB,KAAK,KAAKz1F,EAAIk1F,IAAQj1F,EAAIk1F,EAAI,EAAIxB,GACnD+B,EAAgB,KAAK,KAAK11F,EAAIo1F,IAAQn1F,EAAIo1F,EAAI,EAAI1B,GAClDgC,EAAmB,KAAK,KAAK11F,EAAIk1F,IAAQn1F,EAAIk1F,EAAI,EAAIvB,GACrDiC,EAAkB,KAAK,KAAK31F,EAAIo1F,IAAQr1F,EAAIo1F,EAAI,EAAIzB,GAEtD8B,EACFH,EAAQJ,EACCQ,IACTJ,EAAQF,GAENO,EACFJ,EAAQJ,EACCS,IACTL,EAAQF,IAGLI,GAAkBC,KAAmBC,GAAoBC,GAC5D,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,OACzCH,GAAkBC,EAC3B,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,cACzCC,GAAoBC,KAC7B,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,aAEtD,CAOA,GALA,KAAK,sBAAsB,aAAa,IAAK,IAAIV,CAAG,IAAIC,CAAG,KAAKG,CAAK,IAAIC,CAAK,KAAKH,CAAG,IAAIC,CAAG,EAAE,EAC/F,KAAK,oBAAqB,MAAM,QAAU,QAC1C,KAAK,iBAAiB,MAAM,QAAU,QAGlC,CAACx+F,EAAM,QAAS,CAElB,KAAK,MAAM,SAAS,eAAe,oBAAoB,YAAa,KAAK,iBAAiB,EAC1F,KAAK,MAAM,SAAS,eAAe,oBAAoB,UAAW,KAAK,iBAAiB,EACxF,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,OAClD,KAAK,oBAAqB,MAAM,QAAU,OAG1C,MAAMk/F,EAAkBd,GAAe,MACjCe,EAAc,KAAK,oBAEzB,GAAID,IAAoB,QAAaC,IAAgB,OAAW,CAC9D,MAAMC,EAAgBhB,EAAe,OACrC,GAAIgB,EAAc,QAAQ,YAAa,CACrC,MAAMC,EAAqB,CAAC,GAAGD,EAAc,QAAQ,WAAW,EAC1DI,EAAY,CAAE,GAAIr2F,EAAIoxF,GAAUK,EAAO,GAAIxxF,EAAIoxF,GAAUK,CAAM,EACrE,GAAIwE,EAAmBH,CAAe,EAAE,SAAU,CAChD,MAAMI,EAAkB,CAAC,GAAGD,EAAmBH,CAAe,EAAE,QAAS,EACzEI,EAAgB,OAAOH,EAAa,EAAGK,CAAS,EAChDH,EAAmBH,CAAe,EAAI,CACpC,GAAGG,EAAmBH,CAAe,EACrC,SAAUI,CACZ,CACF,KAAO,CAEL,MAAMA,EAA2C,CAACE,CAAS,EAC3DH,EAAmBH,CAAe,EAAI,CACpC,GAAGG,EAAmBH,CAAe,EACrC,SAAUI,CACZ,CACF,EAIE,CAACD,EAAmBH,CAAe,EAAE,gBACrC,CAACG,EAAmBH,CAAe,EAAE,kBAErCG,EAAmBH,CAAe,EAAI,CACpC,GAAGG,EAAmBH,CAAe,EACrC,eAAgB,CAAE,EAAG92F,EAAI,EAAGC,CAAG,EAC/B,eAAgB,CAAE,EAAGC,EAAI,EAAGC,CAAG,CACjC,GAGF62F,EAAc,SAAS,CAAE,GAAGA,EAAc,QAAS,YAAaC,CAAmB,CAAC,EACpF,KAAK,YAAY,EACjB,KAAK,MAAM,KAAK,CAClB,CACF,CACF,CACF,EAEA,+BAA4B,CAACI,EAA6B/kF,EAAiBC,IAAoB,CAE7F,GADA,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,YAC9C,KAAK,eAAiB,KAAK,gBAAkB,KAAK,MAAM,KAAO,KAAK,MAAM,IAAI,cAAe,CAC/F,MAAM+kF,EAA2BD,EAAe,sBAAsB,EAEhEp7F,EAAiB,KAAK,MAAM,MAC5Bu5F,EAAqBjyF,GAA4B,KAAK,KAAK,EAEjE,GAAI,CAACiyF,EACH,OAIF,MAAM+B,EAA0B9I,GAAqCxyF,EAC/Du7F,EAA0B/I,GAAqCxyF,EAE/D8E,GAAKu2F,EAAyB,EAAI9B,EAAmB,EAAI+B,GAA2Bt7F,EACpF+E,GAAKs2F,EAAyB,EAAI9B,EAAmB,EAAIgC,GAA2Bv7F,EAEpFw7F,EAASnlF,EAAUkjF,EAAmB,EACtCkC,EAASnlF,EAAUijF,EAAmB,EAE5C,KAAK,eAAe,aAAa,KAAM,GAAGz0F,CAAC,EAAE,EAC7C,KAAK,eAAe,aAAa,KAAM,GAAGC,CAAC,EAAE,EAC7C,KAAK,eAAe,aAAa,KAAM,GAAGy2F,CAAM,EAAE,EAClD,KAAK,eAAe,aAAa,KAAM,GAAGC,CAAM,EAAE,EAClD,KAAK,4BAA8B,EACrC,CAEA,KAAK,MAAM,SAAS,eAAe,iBAAiB,YAAa,KAAK,kBAAkB,CAC1F,EAGA,2BAAyBL,GAAgC,CAEvD,KAAK,oBAAsB,OAAOA,EAAe,aAAa,YAAY,CAAC,EAE3E,KAAK,MAAM,SAAS,eAAe,iBAAiB,YAAa,KAAK,cAAc,EACpF,KAAK,MAAM,SAAS,eAAe,iBAAiB,UAAW,KAAK,cAAc,CACpF,EAGA,8BAA4BA,GAAgC,CAE1D,KAAK,oBAAsB,OAAOA,EAAe,aAAa,YAAY,CAAC,EAE3E,KAAK,MAAM,SAAS,eAAe,iBAAiB,YAAa,KAAK,iBAAiB,EACvF,KAAK,MAAM,SAAS,eAAe,iBAAiB,UAAW,KAAK,iBAAiB,CACvF,EAEA,cAAW,CAACh5F,EAA0Bs5F,IAA6B,CACjE,MAAMt4F,EAAchB,EAAQ,OAAO,QAAQ,aAAa,OAAO,CAAC,GAAK,CAAC,EACtEgB,EAAYhB,EAAQ,KAAK,EAAIs5F,EAC7Bt5F,EAAQ,OAAO,SAAS,CAAE,GAAGA,EAAQ,OAAO,QAAS,YAAAgB,CAAY,CAAC,EAClE,KAAK,YAAY,CACnB,EAGA,2BAAyBxD,GAChBqD,GAAmBrD,CAAO,GAAK8B,GAAmB9B,EAAS,KAAK,MAAM,MAAM,EAhnBnF,KAAK,MAAQhG,EACb,KAAK,YAAY,CACnB,CAinBA,QAAS,CACP,SACE,oBACE,oBAACg5F,GAAA,CACC,OAAQ,KAAK,uBACb,cAAe,KAAK,cACpB,iBAAkB,KAAK,iBACzB,KACA,OAACqC,GAAA,CACC,UAAW,KAAK,oBAChB,WAAY,KAAK,qBACjB,gBAAiB,KAAK,0BACtB,iBAAkB,KAAK,2BACvB,aAAc,KAAK,uBACnB,MAAO,KAAK,MACd,GACF,CAEJ,CACF,CCrrBO,MAAM0G,GAAoB/hG,IAAkB,CACjD,KAAM,mBACN,MAAO,CAAC,EACR,OAAQ,CAAC,EACT,OAAO2sC,EAAsD+K,EAAiB,CAE5E,GAAI13C,EAAM,SAAS,mBAAmB,GAAKA,EAAM,SAAS,mBAAmB,EAAE,OAAS,EACtF,OAGF,MAAMgiG,EAAe,CAAC92F,EAAWC,IAAc,CAC7C,MAAM8S,EAAY0uB,EAAS,aAAa,EAClCs1D,EAAM,IAAI,aAAa,cAAe,CAAE,QAAS/2F,EAAG,QAASC,CAAE,CAAC,EACtE8S,EAAU,cAAcgkF,CAAG,CAC7B,EAEMjlG,EAAW+E,GAA4B,CAC3CigG,EAAajgG,EAAM,QAASA,EAAM,OAAO,CAC3C,EAEMmgG,EAAcngG,GAA+B,CACjD,GAAIA,EAAM,MAAQ,QAAS,CACzB,MAAM8C,EAAO9C,EAAM,cAAc,sBAAsB,EACvDigG,EAAan9F,EAAK,EAAGA,EAAK,CAAC,CAC7B,CACF,EAEMA,EAAO8nC,EAAS,QAAQ,EAC9B,SACE,QAAC,OAEC,UAAW,oBACX,MAAO,CACL,SAAU,WACV,KAAM,GAAG9nC,EAAK,MAAQ,EAAE,KACxB,IAAK,MACL,MAAO,QACP,SAAU,OACV,OAAQ,UACR,WAAY,OACZ,WAAY,YACZ,UAAW,uBACX,OAAQ,GACV,EACA,QAAA7H,EACA,UAAWklG,EACX,KAAK,SACL,SAAU,EAET,aAAG,eAEH,KArBI,mBAsBP,CAEJ,CACF,GAEaC,GAAoB,CAC/B,KAAM,oBACN,MAAO,CAAC,EACR,OAAQ,CAAC,EACT,OAAOx1D,EAAsD+K,EAAiB,CAC5E,MAAM7yC,EAAO8nC,EAAS,QAAQ,EAC9B,SAEE,QAAC,OAEC,UAAW,qBACX,MAAO,CACL,SAAU,WACV,KAAM,GAAG9nC,EAAK,MAAQ,CAAC,KACvB,IAAK,GAAGA,EAAK,OAAS,EAAE,KACxB,WAAY,OACZ,aAAc,MACd,QAAS,UACT,MAAO,QACP,SAAU,OACV,WAAY,SACZ,WAAY,OACZ,WAAY,YACZ,UAAW,uBACX,OAAQ,GACV,EAEC,eAAK,MAAMA,EAAK,WAAW,EAAE,MAAI,KAAK,MAAMA,EAAK,YAAY,IAlBzD,oBAmBP,CAEJ,CACF,EAEau9F,GAAsBpiG,IAAkB,CACnD,KAAM,qBACN,MAAO,CAAC,EACR,OAAQ,CAAC,EACT,OAAO2sC,EAAsD+K,EAAiB,CAC5E,MAAM7yC,EAAO8nC,EAAS,QAAQ,EACxB01D,EAAgBjI,GAAoBztD,EAAS,MAAM,OAAS3sC,EAAM,KAAK,QAAQ,EAGrF,GAAIA,EAAM,SAAS,mBAAmB,GAAKA,EAAM,SAAS,mBAAmB,EAAE,OAAS,EACtF,OAGF,IAAIsiG,EAAkC,KAClCC,EAAoC,KAExC,MAAMl9F,EAAag9F,GAAe,gBAAkBA,GAAe,QAAQ,YAAc,CAAC,EAEpFG,EAAc,kBAEdC,EAAyB/qD,EAAM,cAAc,MAAO,CACxD,MAAO,CACL,SAAU,WACV,KAAM,GAAG7yC,EAAK,MAAQ,CAAC,KACvB,IAAK,GAAGA,EAAK,OAAS,EAAIA,EAAK,OAAS,EAAE,KAC1C,WAAY29F,EACZ,OAAQ,GAAG39F,EAAK,OAAS,CAAC,KAC1B,UAAW,eACb,CACF,CAAC,EAEK69F,EAAyBhrD,EAAM,cAAc,MAAO,CACxD,MAAO,CACL,SAAU,WACV,KAAM,GAAG7yC,EAAK,MAAQ,CAAC,KACvB,IAAK,GAAGA,EAAK,OAAS,EAAIA,EAAK,OAAS,EAAE,KAC1C,WAAY29F,EACZ,OAAQ,GAAG39F,EAAK,OAAS,CAAC,KAC1B,UAAW,gBACb,CACF,CAAC,EAEK89F,EAAkBjrD,EAAM,cAAc,MAAO,CAAC,EAAG,CAAC+qD,EAAwBC,CAAsB,CAAC,EAEjGE,EAAwBlrD,EAAM,cAAc,MAAO,CACvD,MAAO,CACL,SAAU,WACV,KAAM,GAAG7yC,EAAK,MAAQ,CAAC,KACvB,OAAQ,MACR,WAAY29F,EACZ,OAAQ,OACV,CACF,CAAC,EAEKK,EAA2BnrD,EAAM,cAAc,MAAO,CAC1D,MAAO,CACL,SAAU,WACV,KAAM,GAAG7yC,EAAK,MAAQ,CAAC,KACvB,IAAK,GAAGA,EAAK,MAAM,KACnB,WAAY29F,EACZ,OAAQ,OACV,CACF,CAAC,EAEKM,EAA8BprD,EAAM,cAAc,MAAO,CAAC,EAAG,CACjEkrD,EACAC,CACF,CAAC,EAEKE,EAA+BrrD,EAAM,cAAc,MAAO,CAC9D,MAAO,CACL,SAAU,WACV,KAAM,GAAG7yC,EAAK,MAAQ,CAAC,KACvB,IAAK,GAAGA,EAAK,OAAS,CAAC,KACvB,WAAY29F,EACZ,OAAQ,GAAG39F,EAAK,OAAS,CAAC,IAC5B,CACF,CAAC,EAEKm+F,EAA2BtrD,EAAM,cAAc,MAAO,CAAC,EAAG,CAACqrD,EAA8BJ,CAAe,CAAC,EAE/G,OAAQt9F,EAAW,SAAU,CAC3B,KAAK,KAAmB,IACtBi9F,EAAkCM,EAClC,MACF,KAAK,KAAmB,OACtBN,EAAkCO,EAClC,MACF,KAAK,KAAmB,UACtBP,EAAkCQ,EAClC,MACF,KAAK,KAAmB,OACtBR,EAAkCU,EAClC,KACJ,CAEA,MAAMC,EAA2BvrD,EAAM,cAAc,MAAO,CAC1D,MAAO,CACL,SAAU,WACV,MAAO,MACP,IAAK,GAAG7yC,EAAK,OAAS,CAAC,KACvB,UAAW29F,EACX,MAAO,OACT,CACF,CAAC,EAEKU,EAA4BxrD,EAAM,cAAc,MAAO,CAC3D,MAAO,CACL,SAAU,WACV,KAAM,GAAG7yC,EAAK,KAAK,KACnB,IAAK,GAAGA,EAAK,OAAS,CAAC,KACvB,UAAW29F,EACX,MAAO,OACT,CACF,CAAC,EAEKW,EAAgCzrD,EAAM,cAAc,MAAO,CAAC,EAAG,CACnEurD,EACAC,CACF,CAAC,EAEKE,EAAiC1rD,EAAM,cAAc,MAAO,CAChE,MAAO,CACL,SAAU,WACV,KAAM,GAAG7yC,EAAK,MAAQ,CAAC,KACvB,IAAK,GAAGA,EAAK,OAAS,CAAC,KACvB,UAAW29F,EACX,MAAO,GAAG39F,EAAK,MAAQ,CAAC,IAC1B,CACF,CAAC,EAEKw+F,EAA6B3rD,EAAM,cAAc,MAAO,CAAC,EAAG,CAChE0rD,EACAT,CACF,CAAC,EAED,OAAQt9F,EAAW,WAAY,CAC7B,KAAK,KAAqB,KACxBk9F,EAAoCU,EACpC,MACF,KAAK,KAAqB,MACxBV,EAAoCW,EACpC,MACF,KAAK,KAAqB,UACxBX,EAAoCY,EACpC,MACF,KAAK,KAAqB,OACxBZ,EAAoCc,EACpC,KACJ,CAOA,OALgC3rD,EAAM,cAAc,MAAO,CAAC,EAAG,CAC7D4qD,EACAC,CACF,CAAC,CAGH,CACF,GC7OMe,GAAa,CAAC,GAAK,CAAC,EAGpBC,GAAsB52D,GAAuB,CACjDA,EAAU,MAAQ,CAChB,kBAAmB,GACnB,mBAAoB,GACpB,iBAAkB,EACpB,CACF,EAGM62D,GAAqB72D,GAAuB,CAChDA,EAAU,MAAQ,CAChB,kBAAmB,GACnB,mBAAoB,GACpB,iBAAkB,EACpB,CACF,EAUM82D,GAA0B,CAACjC,EAA6BxhG,IAAiB,CAC7E,IAAI0jG,EAAuBlC,EAAe,cACtCiC,EAA0B,GAG9B,KAAOC,GAED,EAAAA,IAAyB1jG,EAAM,KAAK,MAKxCyjG,EAA0BzjG,EAAM,SAAS,mBAAmB,EAAE,SAAS0jG,CAAoB,GAAK,GAC5FD,KAKJC,EAAuBA,EAAqB,cAG9C,OAAOD,CACT,EAGME,GAA0BC,GAAmD,CACjF,IAAIv7F,EAAmC,CAAC,EAExC,MAAMiyF,EAAQ,CAAC,GAAGsJ,CAAY,EAC9B,KAAOtJ,EAAM,OAAS,GAAG,CACvB,MAAMC,EAAiBD,EAAM,MAAM,EAE/BC,GAAkBA,EAAe,KACnClyF,EAAe,KAAKkyF,EAAe,GAAG,EAGxC,MAAMC,EAAiBD,aAA0BnyF,GAAamyF,EAAe,SAAW,CAAC,EACzF,UAAWE,KAAiBD,EAC1BF,EAAM,QAAQG,CAAa,CAE/B,CAEA,OAAOpyF,CACT,EAGaw7F,GAAe,CAACC,EAAiB,GAAOC,EAAe,GAAM/jG,IAAiB,CACzF,MAAMqI,EAAiBs7F,GAAuB3jG,EAAM,KAAK,QAAQ,EAE7D8jG,GAAkB9jG,EAAM,SAC1BA,EAAM,QAAQ,QAAQ,EAGxBA,EAAM,QAAU,IAAI,GAAQ,CAC1B,cAAe,MAAO,eAAe,mBAAqBA,EAAM,UAAYA,EAAM,IAClF,cAAe,MAAO,eAAe,mBAAqBA,EAAM,UAAYA,EAAM,IAClF,kBAAmBqI,EACnB,qBAAsB,QACtB,iBAAkB,GAClB,QAAS,CACX,CAAC,EAED,MAAMw0C,EAAiB,CAAE,IAAK,GAAM,KAAM,GAAM,OAAQ,GAAM,MAAO,GAAM,OAAQ,GAAM,OAAQ,EAAK,EAChGyf,EAAwB,CAAE,IAAK,GAAM,KAAM,GAAM,OAAQ,GAAM,MAAO,GAAM,OAAQ,GAAM,OAAQ,EAAK,EAE7Gt8D,EAAM,SAAW,IAAI,GAAS,MAAO,eAAe,mBAAqBA,EAAM,UAAaA,EAAM,IAAM,CACtG,UAAW+jG,GAAgB,CAAC/jG,EAAM,gBAAgB,SAAS,EAC3D,UAAW+jG,EAGX,UAAWA,EACX,eAAgB,EAChB,iBAAkB,CAAC,MAAO,OAAO,EAGjC,UAAWA,EACX,eAAAlnD,EACA,sBAAAyf,EACA,kBAAmBj0D,EAEnB,MAAO,CAAC85F,GAAmBC,GAAmBpiG,CAAK,EAAG+hG,GAAiB/hG,CAAK,CAAC,EAC7E,MAAO,CACL,kBAAmB+jG,EACnB,mBAAoBA,EACpB,iBAAkBA,CACpB,EACA,OAAQ,EACV,CAAC,EACE,GAAG,cAAe,IAAM,CACvBR,GAAmBvjG,EAAM,QAAS,CACpC,CAAC,EACA,GAAG,SAAW+B,GAAU,CACvB,MAAMiiG,EAAkB5J,GAAoBr4F,EAAM,OAAQ/B,EAAM,KAAK,QAAQ,EAEzEgkG,IACFA,EAAgB,YAAYjiG,CAAK,EAE7B,MAAO,eAAe,oBACpB/B,EAAM,YAAY,sBAAsBgkG,CAAe,GAAKhkG,EAAM,wBACpEA,EAAM,uBAAuB,EAAI,EAIzC,CAAC,EACA,GAAG,cAAgBzH,GAAM,CACxB,QAASwJ,KAASxJ,EAAE,OAAQ,CAC1B,MAAMyrG,EAAkB5J,GAAoBr4F,EAAM,OAAQ/B,EAAM,KAAK,QAAQ,EACzEgkG,GACFA,EAAgB,YAAYjiG,CAAK,CAErC,CACF,CAAC,EACA,GAAG,YAAa,IAAM,CACrByhG,GAAkBxjG,EAAM,QAAS,EAEjCA,EAAM,MAAM,KAAK,KAAK,IAAI,CAAC,CAC7B,CAAC,EACA,GAAG,QAAU+B,GAAU,CACtB,MAAMiiG,EAAkB5J,GAAoBr4F,EAAM,OAAQ/B,EAAM,KAAK,QAAQ,EAC7E,IAAIikG,EAAyB,GACzBD,IACFC,EAAyBD,EAAgB,KAAK,aAAe,IAG3DjiG,EAAM,UAAYgiG,GAAgB,CAAC/jG,EAAM,gBAAgB,SAAS,GAAKikG,GACzEjkG,EAAM,gBAAgB,KAAK,EAAI,CAEnC,CAAC,EACA,GAAG,aAAe+B,GAAU,CAC3B/B,EAAM,QAAS,YAAY+B,EAAM,WAAYA,EAAM,WAAW,CAChE,CAAC,EACA,GAAG,YAAcA,GAAU,CAK1B,GAJA/B,EAAM,iBAAmB,GACzBA,EAAM,0BAA0B+B,EAAM,OAAQ,EAAI,EAG9C/B,EAAM,UAAYA,EAAM,SAAS,kBAAmB,CACtD,MAAMg9B,EAAch9B,EAAM,SAAS,kBAAkB,QAAQ+B,EAAM,MAAM,EACrEi7B,EAAc,IAChBh9B,EAAM,SAAS,kBAAkB,OAAOg9B,EAAa,CAAC,CAE1D,CACF,CAAC,EACA,GAAG,iBAAmBzkC,GAAM,CAI3B,GAHAyH,EAAM,iBAAmB,GAGrBA,EAAM,UAAYA,EAAM,SAAS,kBACnC,QAAS+B,KAASxJ,EAAE,OAAQ,CAC1B,MAAMykC,EAAch9B,EAAM,SAAS,kBAAkB,QAAQ+B,EAAM,MAAM,EACrEi7B,EAAc,IAChBh9B,EAAM,SAAS,kBAAkB,OAAOg9B,EAAa,CAAC,CAE1D,CAEJ,CAAC,EACA,GAAG,OAASj7B,GAAU,CACrB,MAAMiiG,EAAkB5J,GAAoBr4F,EAAM,OAAQ/B,EAAM,KAAK,QAAQ,EACzEgkG,IACFA,EAAgB,UAAUjiG,CAAK,EAE3B/B,EAAM,YAAY,sBAAsBgkG,CAAe,GAAKhkG,EAAM,wBACpEA,EAAM,uBAAuB,EAAI,EAGvC,CAAC,EACA,GAAG,YAAczH,GAAM,CACtB,IAAI2rG,EAAc,GAClB,QAASniG,KAASxJ,EAAE,OAAQ,CAC1B,MAAMyrG,EAAkB5J,GAAoBr4F,EAAM,OAAQ/B,EAAM,KAAK,QAAQ,EACzEgkG,IACFA,EAAgB,UAAUjiG,CAAK,EAC1BmiG,IACHA,EAAclkG,EAAM,YAAY,sBAAsBgkG,CAAe,GAG3E,CAEIE,GAAelkG,EAAM,wBACvBA,EAAM,uBAAuB,EAAI,CAErC,CAAC,EACA,GAAG,eAAiBzH,GAAM,CACzBA,EAAE,OAAO,QAASwJ,GAAU,CAC1B,MAAMiiG,EAAkB5J,GAAoBr4F,EAAM,OAAQ/B,EAAM,KAAK,QAAQ,EACzEgkG,IACFA,EAAgB,2BAA2B,OAAW,OAAWhkG,EAAM,KAAK,EAGxEA,EAAM,UAAYA,EAAM,SAAS,mBACnCA,EAAM,SAAS,kBAAkB,KAAK+B,EAAM,MAAM,EAGxD,CAAC,EAED/B,EAAM,MAAM,KAAK,KAAK,IAAI,CAAC,EAC3BA,EAAM,iBAAmB,EAC3B,CAAC,EACA,GAAG,UAAY+B,GAAU,CACxB,MAAMiiG,EAAkB5J,GAAoBr4F,EAAM,OAAQ/B,EAAM,KAAK,QAAQ,EACzEgkG,GACFA,EAAgB,2BAA2B,OAAW,OAAWhkG,EAAM,KAAK,EAG9EA,EAAM,MAAM,KAAK,KAAK,IAAI,CAAC,EAC3BA,EAAM,iBAAmB,GACzBA,EAAM,0BAA0B+B,EAAM,OAAQ,EAAK,EAG/C/B,EAAM,UAAYA,EAAM,SAAS,mBACnCA,EAAM,SAAS,kBAAkB,KAAK+B,EAAM,MAAM,CAEtD,CAAC,EACA,GAAG,cAAgBA,GAAU,CAC5B,MAAMiiG,EAAkB5J,GAAoBr4F,EAAM,OAAQ/B,EAAM,KAAK,QAAQ,EAE7E,GAAIgkG,EAAiB,CAEnB,GAAIhkG,EAAM,UAAYA,EAAM,SAAS,kBAAmB,CACtD,MAAMg9B,EAAch9B,EAAM,SAAS,kBAAkB,QAAQ+B,EAAM,MAAM,EACrEi7B,EAAc,IAChBh9B,EAAM,SAAS,kBAAkB,OAAOg9B,EAAa,CAAC,CAE1D,CAEAgnE,EAAgB,eAAiB,CAAE,GAAGA,EAAgB,QAAQ,UAAW,EACzEA,EAAgB,QAAQ,WAAa,CACnC,SAAU,KAAmB,IAC7B,WAAY,KAAqB,IACnC,EACAA,EAAgB,2BAA2B,OAAW,OAAWhkG,EAAM,KAAK,CAC9E,CACF,CAAC,EACA,GAAG,mBAAqBzH,GAAM,CAE7B,GAAIyH,EAAM,UAAYA,EAAM,SAAS,kBACnC,QAAS+B,KAASxJ,EAAE,OAAQ,CAC1B,MAAMykC,EAAch9B,EAAM,SAAS,kBAAkB,QAAQ+B,EAAM,MAAM,EACrEi7B,EAAc,IAChBh9B,EAAM,SAAS,kBAAkB,OAAOg9B,EAAa,CAAC,CAE1D,CAGF,QAASj7B,KAASxJ,EAAE,OAAQ,CAC1B,MAAMyrG,EAAkB5J,GAAoBr4F,EAAM,OAAQ/B,EAAM,KAAK,QAAQ,EACzEgkG,IACFA,EAAgB,eAAiB,CAAE,GAAGA,EAAgB,QAAQ,UAAW,EACzEA,EAAgB,QAAQ,WAAa,CACnC,SAAU,KAAmB,IAC7B,WAAY,KAAqB,IACnC,EACAA,EAAgB,2BAA2B,OAAW,OAAWhkG,EAAM,KAAK,EAEhF,CACF,CAAC,EACA,GAAG,SAAW+B,GAAU,CACvB,MAAMiiG,EAAkB5J,GAAoBr4F,EAAM,OAAQ/B,EAAM,KAAK,QAAQ,EACzEgkG,IACFA,EAAgB,YAAYjiG,CAAK,EAE7B/B,EAAM,YAAY,sBAAsBgkG,CAAe,GAAKhkG,EAAM,wBACpEA,EAAM,uBAAuB,EAAI,GAGrCA,EAAM,MAAM,KAAK,KAAK,IAAI,CAAC,CAC7B,CAAC,EACA,GAAG,cAAgBzH,GAAM,CACxB,IAAI2rG,EAAc,GAClB,QAASniG,KAASxJ,EAAE,OAAQ,CAC1B,MAAMyrG,EAAkB5J,GAAoBr4F,EAAM,OAAQ/B,EAAM,KAAK,QAAQ,EACzEgkG,IACFA,EAAgB,YAAYjiG,CAAK,EAE5BmiG,IACHA,EAAclkG,EAAM,YAAY,sBAAsBgkG,CAAe,GAG3E,CAEIE,GAAelkG,EAAM,wBACvBA,EAAM,uBAAuB,EAAI,EAGnCA,EAAM,MAAM,KAAK,KAAK,IAAI,CAAC,CAC7B,CAAC,EACA,GAAG,YAAc+B,GAAU,CAC1B,MAAMiiG,EAAkB5J,GAAoBr4F,EAAM,OAAQ/B,EAAM,KAAK,QAAQ,EAEzEgkG,IACEA,EAAgB,iBAClBA,EAAgB,QAAQ,WAAaA,EAAgB,eACrDA,EAAgB,eAAiB,QAEnCA,EAAgB,2BAA2B,OAAW,OAAWhkG,EAAM,KAAK,EAGxEA,EAAM,UAAYA,EAAM,SAAS,mBACnCA,EAAM,SAAS,kBAAkB,KAAK+B,EAAM,MAAM,EAGxD,CAAC,EACA,GAAG,iBAAmBxJ,GAAM,CAE3B,GAAIyH,EAAM,UAAYA,EAAM,SAAS,kBACnC,QAAS+B,KAASxJ,EAAE,OAClByH,EAAM,SAAS,kBAAkB,KAAK+B,EAAM,MAAM,CAGxD,CAAC,EAEH,IAAI+b,EAA2C,CAAC,EAyEhD,GAxEA9d,EACG,QAAS,GAAG,YAAc+B,GAAU,CACnC,MAAMy/F,EAAiBz/F,EAAM,WAAW,OAGxC,GAAIy/F,EAAe,KAAO9I,GAA0B,CAClD14F,EAAM,YAAY,0BAA0BwhG,EAAgBz/F,EAAM,WAAW,QAASA,EAAM,WAAW,OAAO,EAC9GA,EAAM,KAAK,EACX,MACF,CAGA,GAAIy/F,EAAe,KAAO7C,GAAsB,CAC9C3+F,EAAM,YAAY,sBAAsBwhG,CAAc,EACtDz/F,EAAM,KAAK,EACX,MACF,CAGA,GAAIy/F,EAAe,KAAO5C,GAA0B,CAClD5+F,EAAM,YAAY,yBAAyBwhG,CAAc,EACzDz/F,EAAM,KAAK,EACX,MACF,CAEA,MAAMoiG,EACJnkG,EAAM,SAAU,kBAAkBwhG,CAAc,GAChD1jF,EAAQ,KAAM5a,GAAWA,IAAWs+F,GAAkBt+F,EAAO,SAASs+F,CAAc,CAAC,EAEjF4C,EAAoBX,GAAwBjC,EAAgBxhG,CAAK,EAIrEA,EAAM,kBACN,CAACA,EAAM,gBAAgB,SAAS,GAChCmkG,GACAnkG,EAAM,SAAS,mBAAmB,EAAE,SAEpCA,EAAM,QAAQ,mBAAmB,EAAE,CAAC,EAAE,MAAM,OAAS,aAGnDmkG,GAA2BC,GAAqB,CAACpkG,EAAM,mBAEzD+B,EAAM,KAAK,CAEf,CAAC,EACA,GAAG,SAAU,IAAM,CAClB/B,EAAM,gBAAgB,KAAK,EAAK,EAG5BA,EAAM,YAAY,sBACpBA,EAAM,YAAY,oBAAoB,MAAM,QAAU,OAE1D,CAAC,EACA,GAAG,YAAc+B,GAAU,CAC1B+b,EAAU/b,EAAM,SAChB/B,EAAM,gBAAgB,CAAE,QAAA8d,CAAQ,CAAC,EAE7B/b,EAAM,cACJ/B,EAAM,kBAAoB,CAACA,EAAM,gBAAgB,SAAS,GAAKA,EAAM,SAAS,mBAAmB,EAAE,SACrGA,EAAM,QAAQ,mBAAmB,EAAE,CAAC,EAAE,MAAM,OAAS,YAEvD+B,EAAM,WAAW,eAAe,EAChCA,EAAM,KAAK,MAAQ,WAAW,IAAM,CAClC/B,EAAM,SAAU,UAAU+B,EAAM,UAAU,CAC5C,CAAC,EAEL,CAAC,EACA,GAAG,UAAYA,GAAU,CACxB,aAAaA,EAAM,KAAK,KAAK,CAC/B,CAAC,EAEC,MAAO,eAAe,mBAAoB,CA+B5C,IAASsiG,EAAT,SAAsB9rG,EAAe,CACnCA,EAAE,eAAe,EAEjB,MAAMwkB,EAASxkB,EAAE,QACXykB,EAASzkB,EAAE,QACX+rG,EAAkBtkG,EAAM,eAAgB,cAAc,EACtDukG,EAAiBvkG,EAAM,eAAgB,aAAa,EAEpDwkG,EAAmBC,GAA0B,CACjD,MAAM9gG,EAASoZ,EAAS0nF,EAAU,QAC5B7gG,EAASoZ,EAASynF,EAAU,QAC5BC,EAAsB/gG,EAAS3D,EAAM,MACrC2kG,EAAsB/gG,EAAS5D,EAAM,MAC3CA,EAAM,eAAgB,SAASskG,EAAkBI,EAAqBH,EAAiBI,CAAmB,EAC1GF,EAAU,eAAe,CAC3B,EAEMG,EAAgB,IAAM,CAC1B,SAAS,oBAAoB,YAAaJ,CAAe,EACzD,SAAS,oBAAoB,UAAWI,CAAa,CACvD,EAEA,SAAS,iBAAiB,YAAaJ,CAAe,EACtD,SAAS,iBAAiB,UAAWI,CAAa,CACpD,EAxBS,IAAAP,EAAAA,EA3BTrkG,EAAM,eAAiB,IAAI,GAAeA,EAAM,UAAYA,EAAM,YAAc,CAC9E,kBAAmB,GACnB,YAAa,GACb,aAAc,GACd,eAAgBA,EAAM,cACtB,wBAAyB,GACzB,sBAAuB,GACvB,UAAWsjG,EACb,CAAC,EACDtjG,EAAM,eAAe,QAAQA,EAAM,KAAK,EACxCA,EAAM,eAAe,SAASA,EAAM,WAAYA,EAAM,SAAS,EAK/D,MAAM6kG,EAAqB,CAAC35F,EAAWC,IAAc,CAC/CnL,EAAM,gBACRA,EAAM,gBAAgB,CAAE,EAAAkL,EAAG,EAAAC,CAAE,CAAC,EAE9BnL,EAAM,8BAA8B,EAAI,CAE5C,EAiCAA,EAAM,UAAW,iBAAiB,cAAgBzH,GAAM,CAClDA,EAAE,SAAWA,EAAE,SAAW,GAAKyH,EAAM,cAEvCqkG,EAAa9rG,CAAC,GAGdA,EAAE,eAAe,EACjBssG,EAAmBtsG,EAAE,MAAOA,EAAE,KAAK,EAEvC,CAAC,EAGDyH,EAAM,UAAW,iBAAiB,YAAczH,GAAkB,CAC5DA,EAAE,SAAW,GAAKyH,EAAM,eAE1BqkG,EAAa9rG,CAAC,CAElB,CAAC,EAGDyH,EAAM,YAAa,iBACjB,QACCzH,GAAM,CACAyH,EAAM,gBACTzH,EAAE,yBAAyB,EAC3BA,EAAE,eAAe,EAErB,EACA,CAAE,QAAS,EAAM,CACnB,EAGAyH,EAAM,UAAW,iBAAiB,WAAazH,GAAkB,CAE3D,CAACyH,EAAM,gBAAgB,SAAS,GAAKA,EAAM,eAAiBA,EAAM,iBACpEA,EAAM,eAAe,QAAQ,CAAC,EAC9BA,EAAM,eAAe,SAAS,EAAG,CAAC,EAEtC,CAAC,EAKDA,EAAM,eAAgB,GAAG,YAAczH,GAAM,CACvCA,EAAE,WAAW,SAAW,IAC1BA,EAAE,eAAe,EACjBA,EAAE,YAAY,EAElB,CAAC,EAGDyH,EAAM,eAAgB,GAAG,SAAU,IAAM,CAGvCA,EAAM,sBAAsB,EAAI,EAEhCA,EAAM,sBAAsB,EAC5BA,EAAM,MAAQA,EAAM,eAAgB,QAAQ,EAE5CA,EAAM,WAAaA,EAAM,eAAgB,cAAc,EACvDA,EAAM,UAAYA,EAAM,eAAgB,aAAa,CACvD,CAAC,CACH,CACF,EAGO,SAAS8kG,GAAwBvsF,EAAqB0F,EAA2B8mF,EAAe,IAAM,CAC3G,MAAM5rD,EAAS6rD,GAA0BzsF,CAAQ,EAC3C+kC,EAAgBr/B,EAAU,sBAAsB,EAChD4L,EAAiByzB,EAAc,MAC/BxzB,EAAkBwzB,EAAc,OAEhC2nD,EAAcp7E,GAAkB,EAAI,EAAIk7E,GACxCG,EAAep7E,GAAmB,EAAI,EAAIi7E,GAE1ChhC,EAASkhC,EAAc9rD,EAAO,MAC9B6qB,EAASkhC,EAAe/rD,EAAO,OAG/BtuB,EAAQ,KAAK,IAAIk5C,EAAQC,CAAM,EAG/Bx4D,GAAW2tC,EAAO,QAAUtuB,EAAQhB,EAAiB,GAAKgB,EAC1Dpf,GAAW0tC,EAAO,QAAUtuB,EAAQf,EAAkB,GAAKe,EAEjE,MAAO,CACL,MAAAA,EACA,QAAArf,EACA,QAAAC,CACF,CACF,CAEO,SAAS05F,GAA8Bl6F,EAAmB,CAC/D,MAAMhF,EAAS,IAAI,UAAUgF,CAAS,EACtC,MAAO,CAAE,EAAGhF,EAAO,IAAK,EAAGA,EAAO,GAAI,CACxC,CAEO,SAAS++F,GAA0BzsF,EAAqB,CAC7D,IAAIkrB,EAAO,IACTC,EAAO,IACLC,EAAO,KACTC,EAAO,KAET,UAAWzpB,KAAM5B,EAAU,CACzB,MAAM7U,EAAQ,OAAO,iBAAiByW,CAAE,EAClC,CAAE,EAAG0kB,EAAI,EAAGC,CAAG,EAAIqmE,GAA8BzhG,EAAM,WAAa,EAAE,EAEtEwD,EAAQ,WAAWxD,EAAM,KAAK,EAC9BL,EAAS,WAAWK,EAAM,MAAM,EAEhC4H,EAAOuzB,EACPtzB,EAAMuzB,EACNiH,EAAQlH,EAAK33B,EACb8+B,EAASlH,EAAKz7B,EAEpBogC,EAAO,KAAK,IAAIA,EAAMn4B,CAAI,EAC1Bo4B,EAAO,KAAK,IAAIA,EAAMn4B,CAAG,EACzBo4B,EAAO,KAAK,IAAIA,EAAMoC,CAAK,EAC3BnC,EAAO,KAAK,IAAIA,EAAMoC,CAAM,CAC9B,CAEA,MAAO,CACL,KAAMvC,EACN,IAAKC,EACL,MAAOC,EACP,OAAQC,EACR,MAAOD,EAAOF,EACd,OAAQG,EAAOF,EACf,SAAUD,EAAOE,GAAQ,EACzB,SAAUD,EAAOE,GAAQ,CAC3B,CACF,CC1lBA,MAAMwhE,GAAiB,GACjBC,GAAoB,GAEbC,GAAoC,CAC/C,GAAI,QACJ,KAAM,QACN,YAAa,QAEb,cAAe,KAAO,CACpB,OAAQ,CAAC,CACX,GAEA,QAAS,OAGA,OAAC,OAAI,kBAAM,CAEtB,EAEO,MAAMl9F,WAAmBtF,EAAa,CAI3C,YACS1F,EACP4C,EACOgD,EACP,CACA,MAAMsiG,GAAgBloG,EAAS4F,CAAM,EAJ9B,aAAA5F,EAEA,YAAA4F,EANT,cAA2B,CAAC,EAmF5B,cAAW,CAAC2B,EAAuBqB,EAAuBu/F,EAAa,GAAMC,EAAwB,KAAS,CAC5G,OAAQ7gG,EAAQ,CACd,KAAKxN,GAAc,OACjB,KAAK,SAAW,KAAK,SAAS,OAAQoB,GAAMA,IAAMyN,CAAO,EACzD2D,GAA2B3D,EAAS,KAAK,KAAK,EAC9C,KAAK,MAAM,OAAO,OAAOA,EAAQ,QAAQ,IAAI,EAC7C,KAAK,MAAM,KAAK,EAChB,KAAK,qBAAqB,EAC1B,MACF,KAAK7O,GAAc,UACjB,GAAI6O,EAAQ,KAAK,KAAO,QAAS,CAC/B,QAAQ,IAAI,iCAAkCrB,EAAQqB,CAAO,EAC7D,MACF,CACA,MAAM4H,KAAO,cAAU5H,EAAQ,OAAO,EAEtC,GAAIw/F,EAAuB,CACzB,KAAM,CAAE,WAAAngG,EAAY,UAAWogG,CAAa,EAAIz/F,EAAQ,QAClD,CAAE,SAAAV,EAAU,WAAAC,CAAW,EAAIF,GAAc,CAAC,EAC1C7B,EAAuB,CAAE,GAAGiiG,CAAa,EAE/C,OAAQngG,EAAU,CAChB,KAAK,KAAmB,IAClB9B,EAAU,KAAO,KACnBA,EAAU,IAAM,GAEhBA,EAAU,KAAO4hG,GAEnB,MACF,KAAK,KAAmB,OAClB5hG,EAAU,QAAU,KACtBA,EAAU,OAAS,IAEnBA,EAAU,QAAU4hG,GAEtB,MACF,KAAK,KAAmB,UAClB5hG,EAAU,KAAO,KACnBA,EAAU,IAAM,GAEhBA,EAAU,KAAO4hG,GAGf5hG,EAAU,QAAU,KACtBA,EAAU,OAAS,IAEnBA,EAAU,QAAU4hG,GAEtB,MACF,KAAK,KAAmB,OAClB5hG,EAAU,KAAO,OACnBA,EAAU,KAAO4hG,IAEnB,KACJ,CAEA,OAAQ7/F,EAAY,CAClB,KAAK,KAAqB,KACpB/B,EAAU,MAAQ,KACpBA,EAAU,KAAO6hG,GAEjB7hG,EAAU,MAAQ4hG,GAEpB,MACF,KAAK,KAAqB,MACpB5hG,EAAU,OAAS,KACrBA,EAAU,MAAQ6hG,GAElB7hG,EAAU,OAAS4hG,GAErB,MACF,KAAK,KAAqB,UACpB5hG,EAAU,MAAQ,KACpBA,EAAU,KAAO6hG,GAEjB7hG,EAAU,MAAQ4hG,GAGhB5hG,EAAU,OAAS,KACrBA,EAAU,MAAQ6hG,GAElB7hG,EAAU,OAAS4hG,GAErB,MACF,KAAK,KAAqB,OACpB5hG,EAAU,MAAQ,OACpBA,EAAU,MAAQ4hG,IAEpB,KACJ,CAEAx3F,EAAK,UAAYpK,CACnB,CAGAoK,EAAK,YAAc,OAEnB,MAAM83F,EAAO,IAAI5iG,GAAakD,EAAQ,KAAM4H,EAAM,IAAI,EACtD83F,EAAK,WAAW,KAAK,MAAM,OAAO,EAC9BH,IACFG,EAAK,QAAQ,KAAO,KAAK,MAAM,mBAAmB,GAEpD,KAAK,SAAS,KAAKA,CAAI,EACvB,KAAK,MAAM,OAAO,IAAIA,EAAK,QAAQ,KAAMA,CAAI,EAG7C,KAAK,MAAM,OAAO,IAAI1/F,EAAQ,QAAQ,KAAMA,CAAO,EAEnD,KAAK,MAAM,KAAK,EAChB,KAAK,qBAAqB,EAE1B,WAAW,IAAM,CACf,KAAK,MAAM,gBAAgB,IAAI0/F,EAAK,GAAI,CAC1C,CAAC,EACD,MACF,KAAKvuG,GAAc,QACnB,KAAKA,GAAc,WACjB6O,EAAQ,QAAQ,OAAOA,EAASrB,CAAM,EACtC,MAEF,QACE,QAAQ,IAAI,YAAaA,EAAQqB,CAAO,EACxC,MACJ,CACF,EArME,KAAK,MAAQhG,EAGb,GAAI,CAAE,SAAAuY,CAAS,EAAI,KAAK,QACnBA,IACH,KAAK,QAAQ,SAAWA,EAAW,CAAC,GAGtC,UAAWvS,KAAWuS,EACpB,GAAIvS,EAAQ,OAAS,QAEnB,KAAK,SAAS,KAAK,IAAIoC,GAAWpC,EAA+BhG,EAAO,IAAI,CAAC,MACxE,CACL,MAAM+C,EAAOL,GAAsB,YAAYsD,EAAQ,IAAI,GAAK9O,GAChE,KAAK,SAAS,KAAK,IAAI4L,GAAaC,EAAMiD,EAAS,IAAI,CAAC,CAC1D,CAEJ,CAEA,QAA8B,CAC5B,MAAO,EACT,CAEA,WAAWsB,EAAuB,CAChC,MAAM,WAAWA,CAAG,EACpB,UAAWq+F,KAAQ,KAAK,SACtBA,EAAK,WAAWr+F,CAAG,CAEvB,CAGA,QAAQ+0B,EAAoBupE,EAAkB,CAC5C,MAAM1mF,EAAS,MAAM,KAAK,KAAK,QAAQ,EACjC,CAACmS,CAAO,EAAInS,EAAO,OAAOmd,EAAY,CAAC,EAC7Cnd,EAAO,OAAO0mF,EAAU,EAAGv0E,CAAO,EAClC,KAAK,SAAWnS,EAEhB,KAAK,qBAAqB,CAC5B,CAGA,YAAY46E,EAAmBrsE,EAAoBo4E,EAAgB,GAAO,CACxE,MAAM3mF,EAAS,MAAM,KAAK,KAAK,QAAQ,EACjC4mF,EAAW,KAAK,SAAS,QAAQhM,CAAG,EACpCK,EAAY0L,EAAgB,KAAK,SAAS,OAAS,EAAI,KAAK,SAAS,QAAQp4E,CAAI,EAEjF,CAAC4D,CAAO,EAAInS,EAAO,OAAO4mF,EAAU,CAAC,EAC3C5mF,EAAO,OAAOi7E,EAAW,EAAG9oE,CAAO,EACnC,KAAK,SAAWnS,EAEhB,KAAK,qBAAqB,CAC5B,CAEA,OAAO4V,EAAqBnwB,EAAuB,CACjD,MAAMohG,EAAO,KAAK,SAAS,OAAQp+F,GAAMA,IAAMmtB,CAAK,EAChDnwB,IAAWxN,GAAc,WAC3B4uG,EAAK,QAAQjxE,CAAK,EAElBixE,EAAK,KAAKjxE,CAAK,EAEjB,KAAK,SAAWixE,EAChB,KAAK,MAAM,KAAK,EAChB,KAAK,qBAAqB,CAC5B,CAEA,sBAAuB,CAErB,KAAK,MAAM,sBAAsB,EACjC,WAAW,IAAMlC,GAAa,GAAM,KAAK,MAAM,iBAAkB,KAAK,KAAK,CAAC,CAC9E,CAkIA,QAAS,CACP,SACE,OAAC,OAAmB,IAAK,KAAK,YAC3B,cAAK,SAAS,IAAKl8F,GAAMA,EAAE,OAAO,CAAC,GAD5B,KAAK,GAEf,CAEJ,CAGA,MAAMC,EAAoC,CACxC,MAAM,MAAMA,CAAO,EACnB,UAAWrP,KAAK,KAAK,SACnBqP,EAAQrP,CAAC,CAEb,CAEA,cAAe,CACb,MAAO,CACL,GAAG,KAAK,QACR,SAAU,KAAK,SAAS,IAAKoP,GAAMA,EAAE,aAAa,CAAC,CACrD,CACF,CACF,C,oGCpPO,MAAMq+F,GAAoB,CAAC,CAAE,MAAAhmG,EAAO,MAAAzG,EAAO,mBAAA0sG,CAAmB,IAAa,CAChF,MAAMC,EAAmB3sG,EAAM,MAAM,eAC/B,CAAC4sG,EAAeC,CAAgB,KAAI,YAAkB,EAAK,EAC3D,CAACn9F,EAAao9F,CAAc,KAAI,YAAsB,CAAE,EAAG,EAAG,EAAG,CAAE,CAAC,EAEpE1pG,EAAS,GAAU,EAEnB83F,EAAmBz0F,EAAM,SAAS,mBAAmB,EACrDgJ,EAAoCzP,EAAM,SAAS,eAAe,SAExE,aAAU,IAAM,CACd,GAAI,MAAO,eAAe,mBACxB,OAAAyG,EAAM,gBAAmBsd,GAA0B,CACjD+oF,EAAe/oF,CAAQ,EACvB8oF,EAAiB,EAAI,EACrBH,EAAmB,EAAI,CACzB,EAGO,IAAOjmG,EAAM,gBAAkB,MAG1C,EAAG,CAACA,EAAOimG,CAAkB,CAAC,EAE9B,MAAMK,KAAoB,eACvBvkG,GAAiB,CAChB,GAAI,EAAEA,aAAiB,aAAeA,EAAM,QAC1C,OAGFA,EAAM,eAAe,EACrBxI,EAAM,eAAe,GAEO,MAAO,eAAe,mBAC9CwI,EAAM,gBAAkB/B,EAAM,YAC9B+B,EAAM,gBAAkB/B,EAAM,OAG/B+B,EAAM,yBAAyB,aAAeA,EAAM,yBAAyB,aAE9E/B,EAAM,OAAO,CAAE,QAAS,CAAC+B,EAAM,aAAa,CAAE,CAAC,EAEjDskG,EAAe,CAAE,EAAGtkG,EAAM,MAAO,EAAGA,EAAM,KAAM,CAAC,EACjDqkG,EAAiB,EAAI,EACrBH,EAAmB,EAAI,CACzB,EACA,CAACjmG,EAAOzG,EAAO0sG,CAAkB,CACnC,KAEA,aAAU,IAAM,CACVjmG,EAAM,SACRA,EAAM,QAAQ,sBAAsB,EAAE,QAASgG,GAAY,CACzDA,EAAQ,iBAAiB,cAAesgG,CAAiB,CAC3D,CAAC,CAEL,EAAG,CAACA,EAAmBtmG,EAAM,OAAO,CAAC,KAErC,aAAU,IAAM,CACVA,EAAM,KACRA,EAAM,IAAI,iBAAiB,cAAesmG,CAAiB,CAE/D,EAAG,CAACA,EAAmBtmG,EAAM,GAAG,CAAC,EAEjC,MAAMumG,EAAmB,IAAM,CAC7BH,EAAiB,EAAK,EACtBH,EAAmB,EAAK,CAC1B,EAEMO,EAAkB,IAAM,CAE5B,MAAMC,EAA0B,CAACzmG,EAAM,mBACrC,OAAC0mG,GAAA,GACC,MACER,KACI,KAAE,0CAA2C,cAAc,KAC3D,KAAE,yCAA0C,aAAa,EAE/D,QAAS,IAAM,CACTlmG,EAAM,wBACJkmG,EACF3sG,EAAM,gBAAgB,EAEtByG,EAAM,sBAAsB,GAGhCumG,EAAiB,CACnB,EACA,UAAW5pG,EAAO,SACpB,EAGIgqG,EAAsB,IAAM,CAChC,GAAIlS,GAAkB,SAAW,EAAG,CAClC,MAAMmS,EAA6B,IAAM,CACvC5mG,EAAM,gBAAgB,KAAK,EAAI,EAC/BumG,EAAiB,CACnB,EAEMvgG,EAAUo0F,GAAoB3F,EAAiB,CAAC,EAAGz0F,EAAM,KAAK,QAAQ,EAC5E,OACEgG,GACAA,EAAQ,KAAK,gBACX,OAAC0gG,GAAA,GACC,SAAO,KAAE,iFAAkF,MAAM,EACjG,QAASE,EACT,UAAWjqG,EAAO,SACpB,CAGN,CACA,OAAO,IACT,EAEMkqG,EAAcv+F,GAAgBtI,EAAM,uBAAuB,EAAE,QAE7D8mG,EAAwB,IAAM,CAClC,MAAMC,EAEF,CAAC,EAECC,EAAen+F,GAAoC,CACvD,IAAIuD,EAAUnD,EAAY,EACtBkD,EAAUlD,EAAY,EAC1B,GAAIjJ,EAAM,IAAK,CACb,MAAMoG,EAAiBpG,EAAM,MACvBinG,EAA2BjnG,EAAM,IAAI,sBAAsB,EACjEoM,GAAWA,EAAU66F,EAAyB,KAAO7gG,EACrD+F,GAAWA,EAAU86F,EAAyB,MAAQ7gG,CACxD,SAAWpG,EAAM,YAAa,CAC5B,MAAMinG,EAA2BjnG,EAAM,YAAY,sBAAsB,EACzEoM,GAAW66F,EAAyB,IACpC96F,GAAW86F,EAAyB,IACtC,CAEAn+F,GAAUD,EAAQG,EAAW,CAC3B,GAAGC,EACH,EAAGmD,EACH,EAAGD,CACL,CAAC,CACH,EAEA,OAAA06F,EAAY,IAAKh+F,GAAW,CAC1Bk+F,EAAa,QACX,OAACL,GAAA,EAAQ,CAAoB,MAAO79F,EAAO,OAAS,cAAe,QAAS,IAAMm+F,EAAYn+F,CAAM,GAArFA,EAAO,KAAiF,CACzG,CACF,CAAC,EAEMk+F,CACT,EAEMG,KACJ,OAACR,GAAA,GACC,SAAO,KAAE,iFAAkF,UAAU,EACrG,UAAW/pG,EAAO,SAClB,WAAYmqG,EAAsB,EAClC,6BAA8B,CAAE,UAAW,QAAS,UAAW,MAAO,EACxE,EAGIK,KACJ,OAACT,GAAA,GACC,SAAO,KACL,6FACA,gBACF,EACA,QAAS,IAAM,CACT1mG,EAAM,uBACRA,EAAM,sBAAsBiJ,CAAW,EAEzCs9F,EAAiB,CACnB,EACA,UAAW5pG,EAAO,SACpB,EAGF,OAAI83F,GAAoBA,EAAiB,QAAU,KAE/C,oBACG,UAAAkS,EAAoB,KACrB,OAACD,GAAA,GACC,SAAO,KAAE,4DAA6D,QAAQ,EAC9E,QAAS,IAAM,CACbU,EAAkBjwG,GAAc,MAAM,EACtCovG,EAAiB,CACnB,EACA,UAAW5pG,EAAO,SACpB,KACA,OAAC+pG,GAAA,GACC,SAAO,KAAE,+DAAgE,WAAW,EACpF,QAAS,IAAM,CACbU,EAAkBjwG,GAAc,SAAS,EACzCovG,EAAiB,CACnB,EACA,UAAW5pG,EAAO,SACpB,KACA,OAAC+pG,GAAA,GACC,SAAO,KAAE,oEAAqE,gBAAgB,EAC9F,QAAS,IAAM,CACbU,EAAkBjwG,GAAc,OAAO,EACvCovG,EAAiB,CACnB,EACA,UAAW5pG,EAAO,SACpB,KACA,OAAC+pG,GAAA,GACC,SAAO,KAAE,kEAAmE,cAAc,EAC1F,QAAS,IAAM,CACbU,EAAkBjwG,GAAc,UAAU,EAC1CovG,EAAiB,CACnB,EACA,UAAW5pG,EAAO,SACpB,EACC8pG,CAAA,EACH,KAIA,oBACG,UAAAA,EACAU,EACAD,CAAA,EACH,CAGN,EAEME,EAAqBC,GAA8B,CACvDrnG,EAAM,UAAU,QAAK26F,GAAA,GAAM,CAAC,EAAE,UAAWC,GAA4B,CACnE,MAAMC,EAAeD,EAAwB,CAAC,EAAE,OAChDA,EAAwB,QAAS0M,GAAyC,CACxEzM,EAAa,SAASwM,EAAYC,CAAsB,CAC1D,CAAC,CACH,CAAC,EAED,WAAW,IAAM,CACftnG,EAAM,eAAe,EACrBA,EAAM,gBAAgB,MAAM,CAC9B,CAAC,CACH,EAEA,OAAImmG,KAEA,OAAC,OACC,cAAgBpkG,GAAU,CACxBA,EAAM,eAAe,EACrBwkG,EAAiB,CACnB,EAEA,mBAACgB,GAAA,GACC,EAAGt+F,EAAY,EACf,EAAGA,EAAY,EACf,QAASs9F,EACT,gBAAAC,EACA,YAAa,GACf,EACF,KAIG,oBAAE,CACX,EAEM,GAAY,KAAO,CACvB,YAAU,OAAI,CACZ,SAAU,OACZ,CAAC,CACH,G,gHC/PO,MAAMgB,GAAgB,CAAC,CAAE,MAAAxnG,CAAM,IAAa,CACjD,MAAM9C,KAAQ,OAAU,EAClBP,KAAS,OAAW,EAAS,EAC7B,CAAE,kBAAA2H,CAAkB,KAAI,OAAgB,EACxCiD,KAAwB,WAAQ,IAAMjD,IAAoB,GAAK,GAAO,CAACA,CAAiB,CAAC,EAEzFmjG,EAAU,IAAM,CAChBznG,GAAO,iBAAmBA,EAAM,gBAClCA,EAAM,gBAAgB,MAAS,CAEnC,EAEM+zB,KAAM,aAAuB,EAC7B,CAAE,aAAA2zE,CAAa,KAAIC,GAAA,GAAW,CAAE,QAAAF,EAAkB,cAAe,EAAK,EAAG1zE,CAAG,EAC5E,CAAE,YAAA6zE,CAAY,KAAIC,GAAA,GAAU,CAAC,EAAG9zE,CAAG,EAEnC/tB,EAAUhG,EAAM,gBAAgB,QACtC,GAAI,CAACgG,EACH,SAAO,oBAAE,EAIX,MAAM8hG,EAAY9nG,EAAM,MAAM,OAAO,CAAC,GAAG,QAAQ,KAAMU,GAAUA,EAAM,OAAS,MAAU,IAAI,EACxFqnG,EAAgBD,GAAW,OAAOA,EAAU,OAAO,OAAS,CAAC,EAC7DE,EACJF,GAAaC,GAAiB/hG,EAAQ,KAAK,UAAS,OAAoB8hG,CAAS,IAAM9hG,EAAQ,KAAK,MAEhGiiG,EAA6B,CACjC,MAAOjiG,EAAQ,QAAQ,EACvB,MAAO,EACT,EAEMkiG,EAAiC,CACrC,CACE,MAAOliG,EAAQ,KAAK,OAAS,QAC7B,MAAOA,EAAQ,KAAK,IACtB,EACA,GAAIgiG,EACA,CACE,CACE,MAAO,OACP,SAAO,OAAuBF,GAAW,QAASC,CAAa,CAAC,CAClE,CACF,EACA,CAAC,CACP,EAGMI,EAAiC,CAAC,EAExC,IAAKniG,EAAQ,QAAQ,OAAO,QAAU,GAAK,GAAKA,EAAQ,SAAU,CAChE,MAAMoiG,EAAa,IAAI,IAEvBpiG,EAAQ,SAAS,CAAE,cAAe5B,GAAY4B,EAAQ,KAAK,MAAOhG,CAAK,CAAE,CAAC,EAAE,QAASqE,GAAS,CAC5F,MAAMnM,EAAM,GAAGmM,EAAK,KAAK,IAAIA,EAAK,IAAI,GACjC+jG,EAAW,IAAIlwG,CAAG,IACrBiwG,EAAM,KAAK9jG,CAAI,EACf+jG,EAAW,IAAIlwG,CAAG,EAEtB,CAAC,CACH,CAEI8H,EAAM,MAAM,QACd2N,GAAiB3N,EAAM,MAAM,OAAQgG,EAAQ,OAAO,EAAE,QAAStF,GAAU,CACvEynG,EAAM,KAAK,MAAG,MAAaznG,EAAO0D,GAAY4B,EAAQ,KAAK,MAAOhG,CAAK,CAAC,CAAC,CAC3E,CAAC,EAGH,MAAMqoG,EAAqC,CAAC,EACtCC,EAAe,IAAI,IAEnBC,GAAqBviG,EAAQ,QAAQ,SAAS,QAAU,GAAK,EAC7DxB,EAASxE,EAAM,MAAM,OAE3B,GAAIuoG,GAAqB/jG,GAAU+C,EAAuB,CACxD,MAAM9C,KAAe,OAAuBuB,EAAQ,QAAQ,OAAS,CAAC,EAAGA,EAAQ,QAAQ,SAAW,CAAC,CAAC,EAChGtB,EAAyB,CAC7B,cAAe,CACb,MAAO,CACL,KAAMF,EACN,MAAOC,EACP,MAAOD,EAAO,CAAC,EACf,WAAY,CACd,CACF,CACF,EAEMvN,EAA0B,CAAE,cAAemN,GAAY4B,EAAQ,KAAK,MAAOhG,CAAK,CAAE,KAEnE,OACnBwE,EAAO,CAAC,EACRC,EACAC,EACA1E,EAAM,MAAM,MAAM,iBAClBgG,EAAQ,QAAQ,SAAW,CAAC,EAC5B/O,EACA,QACF,EAEa,QAAS0N,GAAW,CAC/B,MAAMzM,EAAM,GAAGyM,EAAO,KAAK,IAAI,KAAK,OAAO,CAAC,GACvC2jG,EAAa,IAAIpwG,CAAG,IACvBmwG,EAAQ,KAAK1jG,CAAM,EACnB2jG,EAAa,IAAIpwG,CAAG,EAExB,CAAC,CACH,CAEA,SACE,mBACG,SAAA8H,EAAM,gBAAgB,SAAWA,EAAM,eAAe,gBACrD,OAAC,MAAM,CAAC,OAAQ9C,EAAM,OAAO,QAC3B,mBAACsrG,GAAA,GACC,aAAW,MAAG7rG,EAAO,eAAgBqD,EAAM,eAAe,QAAUrD,EAAO,MAAM,EACjF,SAAU,CAAE,EAAGqD,EAAM,eAAe,YAAY,EAAG,EAAGA,EAAM,eAAe,YAAY,CAAE,EACzF,OAAQ,CAAE,EAAG,EAAG,EAAG,CAAE,EACrB,mBAAoBA,EAAM,eAAe,OAEzC,oBAAC,WAAQ,IAAA+zB,EAAW,GAAG2zE,EAAe,GAAGE,EACtC,UAAA5nG,EAAM,eAAe,WAAU,OAACyoG,GAAA,EAAW,CAAC,MAAO,CAAE,OAAQ,CAAE,EAAG,QAAShB,CAAA,CAAS,KACrF,OAACiB,GAAA,EAAgB,CAAC,KAAMT,EAAY,SAAUjoG,EAAM,eAAe,OAAS,EAC3EgG,EAAQ,KAAK,SAAQ,OAAC2iG,GAAA,EAAiB,CAAC,MAAOT,EAAc,SAAUloG,EAAM,eAAe,OAAS,GACpGmoG,EAAM,OAAS,GAAKE,EAAQ,OAAS,OAAM,OAACO,GAAA,EAAgB,CAAC,UAAWT,EAAO,QAAAE,CAAA,CAAkB,GACrG,EACF,EACF,EAEJ,CAEJ,EAEM,GAAanrG,IAA0B,CAC3C,WAAS,OAAI,CACX,UAAW,OACX,WAAYA,EAAM,OAAO,WAAW,OACtC,CAAC,EACD,kBAAgB,OAAI,CAClB,IAAK,EACL,KAAM,EACN,WAAY,MACZ,aAAcA,EAAM,MAAM,OAAO,QACjC,SAAU,QACV,WAAYA,EAAM,OAAO,WAAW,QACpC,OAAQ,aAAaA,EAAM,OAAO,OAAO,IAAI,GAC7C,UAAWA,EAAM,QAAQ,GACzB,WAAY,OACZ,QAAS,EACT,SAAUA,EAAM,WAAW,UAAU,QACvC,CAAC,EACD,UAAQ,OAAI,CACV,UAAWA,EAAM,QAAQ,EAC3B,CAAC,CACH,GC1Ka,GAA2B,oBAC3B,GAAwB,oBACxB,GAAqC,EAGrC,GAAU,CACrB,CAAE,EAAG,GAAI,EAAG,CAAE,EACd,CAAE,EAAG,IAAM,EAAG,CAAE,EAChB,CAAE,EAAG,EAAG,EAAG,CAAE,EACb,CAAE,EAAG,GAAK,EAAG,CAAE,EACf,CAAE,EAAG,EAAG,EAAG,CAAE,EACb,CAAE,EAAG,EAAG,EAAG,EAAI,EACf,CAAE,EAAG,EAAG,EAAG,CAAE,EACb,CAAE,EAAG,EAAG,EAAG,GAAK,EAChB,CAAE,EAAG,EAAG,EAAG,EAAG,EACd,CAAE,EAAG,GAAK,EAAG,EAAG,EAChB,CAAE,EAAG,EAAG,EAAG,EAAG,EACd,CAAE,EAAG,IAAM,EAAG,EAAG,EACjB,CAAE,EAAG,GAAI,EAAG,EAAG,EACf,CAAE,EAAG,GAAI,EAAG,GAAK,EACjB,CAAE,EAAG,GAAI,EAAG,CAAE,EACd,CAAE,EAAG,GAAI,EAAG,EAAI,CAClB,EACa,GAAiB,EACjB,GAAY,IAEnB2rG,GAAS,CACb,KAAM,IACN,OAAQ,KACR,UAAW,IACb,EAEA,IAAKC,IAAAA,IACHA,EAAA,KAAO,OACPA,EAAA,aAAe,OACfA,EAAA,OAAS,OACTA,EAAA,UAAY,OAJTA,IAAAA,IAAA,IAOE,MAAM,GAAoB,CAAC,CAAE,OAAA7P,EAAQ,cAAAC,EAAe,iBAAAC,CAAiB,IAAa,CACvF,MAAMC,KAAsB,UAAuB,IAAI,EACjDz8F,KAAS,OAAW,EAAS,EAC7B08F,EAA2B,IAC3BC,EACJ,ihBAEIC,EAAsBx3F,GAA4B,CAChDA,EAAM,kBAAkB,kBAI1Bq3F,EAAoB,SAAWr3F,EAAM,OAAO,QAC9Cq3F,EAAoB,QAAQ,MAAM,QAAU,QAC5CA,EAAoB,QAAQ,MAAM,IAAM,QAAQr3F,EAAM,OAAO,MAAM,GAAG,MAAMs3F,CAAwB,QAAQ,EAAc,MAC1HD,EAAoB,QAAQ,MAAM,KAAO,QAAQr3F,EAAM,OAAO,MAAM,IAAI,MAAMs3F,CAAwB,QAAQ,EAAc,MAEhI,EAEMG,EAA+B,IAAM,CACrCJ,EAAoB,UACtBA,EAAoB,QAAQ,MAAM,QAAU,OAEhD,EAEMK,EACJ13F,GACG,CACoBo3F,EAAiBp3F,CAAK,GAG3Cy3F,EAA6B,CAEjC,EAEME,EAAkB,CAACC,EAAmC,KACnDA,EAAQ,IAAKC,GAAW,CAC7B,MAAMjlF,EAAK,GAAGilF,EAAO,CAAC,IAAIA,EAAO,CAAC,GAG5Bl2F,EAAQ,CACZ,IAAK,QAAQ,CAACk2F,EAAO,EAAI,GAAK,EAAE,OAAO,EAAS,QAAQ,EAAc,MACtE,KAAM,QAAQA,EAAO,EAAI,GAAK,EAAE,OAAO,EAAS,QAAQ,EAAc,KACxE,EAEA,SACE,OAAC,OACC,GAAAjlF,EACA,IAAM3O,GAAY,CACZA,GAEFA,EAAQ,MAAM,YAAY,iBAAkB,OAAsB,WAAW,CAEjF,EAEA,IAAK,GACL,UAAWrJ,EAAO,OAClB,MAAA+G,EACA,IAAK41F,EACL,aAAcC,CAAA,EALT5kF,CAMP,CAEJ,CAAC,EAGH,SACE,QAAC,OAAI,UAAWhY,EAAO,KAAM,IAAKs8F,EAChC,oBAAC,OAAI,UAAWt8F,EAAO,YAAa,WAAY88F,EAAyB,OAAQA,CAAA,CAAyB,KAC1G,OAAC,OACC,GAAI,GACJ,IAAKL,EACL,UAAWz8F,EAAO,iBAClB,aAAc68F,CAAA,CAChB,KACA,OAAC,OAAI,IAAKN,EAAgB,SAAAQ,EAAgB,EAAE,GAC9C,CAEJ,EAEM,GAAax8F,IAA0B,CAC3C,QAAM,OAAI,CACR,SAAU,WACV,QAAS,OACT,OAAQ,GAAG2rG,GAAO,IAAI,cACtB,cAAe,MACjB,CAAC,EACD,eAAa,OAAI,CACf,SAAU,WACV,OAAQ,QACR,MAAO,oBACP,OAAQ,oBACR,cAAe,MACjB,CAAC,EACD,UAAQ,OAAI,CACV,QAAS,GAAG,EAAc,KAC1B,SAAU,WACV,OAAQ,SACR,MAAO,kBAAkB,EAAc,MACvC,OAAQ,kBAAkB,EAAc,MACxC,OAAQ,GAAGA,GAAO,MAAM,cACxB,cAAe,OACf,WAAY,MACd,CAAC,EACD,oBAAkB,OAAI,CACpB,gBAAiB,UACjB,QAAS,GACT,SAAU,WACV,OAAQ,SACR,cAAe,OACf,MAAO,OACP,OAAQ,OACR,aAAc3rG,EAAM,MAAM,OAAO,OACjC,QAAS,OACT,OAAQ,GAAG2rG,GAAO,SAAS,aAC7B,CAAC,CACH,GC7IA,IAAI,GAAY,EAChB,MAAM,GAAmB,CAAC,QAAS,UAAU,EAEhC,GAAgB,CAAC,CAAE,WAAAtN,EAAY,iBAAAE,EAAkB,aAAAC,EAAc,qBAAAqN,EAAsB,MAAA/oG,CAAM,IAAa,CACnH,MAAMrD,KAAS,OAAW,EAAS,EAE7Bg/F,EAAS,KAAK,IAAI,EAAI,IAAM,KAC5BC,KAAqB,WAAQ,IAAM,oBAAoBD,CAAM,GAAI,CAACA,CAAM,CAAC,EACzEE,KAAiB,WAAQ,IAAM,cAAcF,CAAM,GAAI,CAACA,CAAM,CAAC,EAC/D1uF,EAAoB,MAAO,OAAO,OAAO,KAAK,QAC9CF,EAAmB,EACnBC,EAAkD,CACtD,KAAM,MAAuB,MAC7B,MAAO,MAAoB,OAC7B,EACM8uF,EAAkB,GAElB,CAACC,EAAoBC,CAAqB,KAAI,YAAsC,MAAS,EAG7FC,KAAwB,UAAOF,CAAkB,KACvD,aAAU,IAAM,CACdE,EAAsB,QAAUF,CAClC,CAAC,KAED,aAAU,IAAM,CACV/7F,EAAM,MAAM,QAAQ,eAAe,oBACrCg8F,EAAsBh8F,EAAM,MAAM,QAAQ,eAAe,kBAAkB,CAE/E,EAAG,CAACA,EAAM,MAAM,QAAQ,eAAe,kBAAkB,CAAC,EAE1D,MAAMgC,EAAWzJ,GAAqB,CACpC,MAAM2K,EAAS3K,EAAE,OAEjB,GAAM2K,aAAkB,aAIpB,KAAiB,QAAQA,EAAO,SAAS,YAAY,CAAC,EAAI,IAK9D,IAAI3K,EAAE,UAAY,GAAKA,EAAE,UAAY,GAC/B0jG,EAAsB,SAAWA,EAAsB,QAAQ,SACjEA,EAAsB,QAAQ,OAAO,QAAQ,YAC3CA,EAAsB,QAAQ,OAAO,QAAQ,aAAa,OACvDj0F,GAAeA,IAAei0F,EAAsB,SAAS,IAChE,EACFA,EAAsB,QAAQ,OAAO,SAASA,EAAsB,QAAQ,OAAO,OAAO,EAE1FD,EAAsB,MAAS,EAC/Bh8F,EAAM,YAAY,OAAO,MAAS,EAClCA,EAAM,YAAY,YAAY,EAC9BA,EAAM,KAAK,OAIb,QAGF,SAAS,oBAAoB,QAASgC,CAAO,EAC7ChC,EAAM,QAAS,cAAe,oBAAoB,QAASk8F,CAAuB,EACpF,EAEMA,EAA2Bn6F,GAAsB,CACrD,MAAMm/E,EAAcn/E,EAAM,OAEY,EACpCm/E,aAAuB,gBAAkBA,EAAY,KAAO0a,KAI5DI,EAAsB,MAAS,EAC/Bh8F,EAAM,YAAY,OAAO,MAAS,EAEtC,EAEMm8F,EAAoBn0F,GAAgC,CACpDhI,EAAM,mBACRg8F,EAAsBh0F,CAAU,EAChChI,EAAM,YAAY,OAAOgI,CAAU,EAEnC,SAAS,iBAAiB,QAAShG,CAAO,EAC1ChC,EAAM,QAAS,cAAe,iBAAiB,QAASk8F,CAAuB,EAEnF,EAGME,EAAoB,IAEtBp8F,EAAM,YAAY,MAEf,KAAK,CAAC2R,EAAIlZ,IAAOsjG,IAAuBtjG,GAAKuH,EAAM,MAAM,QAAQ,cAAc,mBAAqB,GAAK,CAAE,EAC3G,IAAI,CAAC2H,EAAGuyF,IAAQ,CACf,KAAM,CAAE,OAAArvF,EAAQ,OAAA3H,EAAQ,KAAA8G,EAAM,SAAAqyF,EAAU,MAAA3yF,CAAM,EAAI/B,EAC5CmC,EAAae,EAAO,IACpB7H,EAAS6H,EAAO,KAAK,cACrBd,EAAa/J,EAAM,YAEzB,GAAI,CAAC8J,GAAc,CAAC9G,GAAU,CAAC+G,EAC7B,OAGF,GAAI,CAAE,GAAAI,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,CAAG,EAAIM,GAAsBC,EAAQ3H,EAAQ8G,CAAI,EAE/D,CAAE,OAAAsyF,EAAQ,OAAAC,EAAQ,KAAAC,EAAM,KAAAC,CAAK,EAAI,CAAE,OAAQtyF,EAAI,OAAQC,EAAI,KAAMC,EAAI,KAAMC,CAAG,EAC9E3C,EAAE,gBAAkBA,EAAE,gBACxB20F,EAAS30F,EAAE,eAAe,EAC1B40F,EAAS50F,EAAE,eAAe,EAC1B60F,EAAO70F,EAAE,eAAe,EACxB80F,EAAO90F,EAAE,eAAe,GACfkD,EAAO,QAAQ,cAGtB,CAACA,EAAO,QAAQ,YAAYnB,CAAK,EAAE,gBACnC,CAACmB,EAAO,QAAQ,YAAYnB,CAAK,EAAE,kBAEnCmB,EAAO,QAAQ,YAAYnB,CAAK,EAAE,eAAiB,CAAE,EAAGS,EAAI,EAAGC,CAAG,EAClES,EAAO,QAAQ,YAAYnB,CAAK,EAAE,eAAiB,CAAE,EAAGW,EAAI,EAAGC,CAAG,GAItE,MAAMoyF,EAAWnwF,GAAkBpC,EAAIC,EAAIC,EAAIC,CAAE,EAC3CqyF,EAAQH,EAAOF,EACfM,EAAQH,EAAOF,EAEf,CAAE,YAAApvF,EAAa,YAAAC,EAAa,aAAAC,GAAc,eAAAC,GAAgB,UAAAC,GAAW,cAAAE,EAAc,EACvFX,GACE9C,EACAhK,EACA+M,EACAC,EAAsB,OAAS,MAAoB,OACrD,EAEIjN,EAAag8F,IAAuBp0F,GAAK3H,EAAM,MAAM,QAAQ,cAAc,mBAE3E68F,GAAwB78F,EAAM,iBAAmB,OAAS,GAC1D88F,GAAiB,CAAE,OAAQ,UAAW,cAAe,GAAK,YAAa1vF,EAAc,CAAE,EAEvF2vF,GAA2B,uBAAuBpB,EAAS,KAAK,OAAO,CAAC,GACxEqB,GAAyB,qBAAqBrB,EAAS,KAAK,OAAO,CAAC,GAEpEjkB,GAASrqE,GAET4vF,GAAuC,CAAC,EAC9C,IAAIC,GAAa,IAAI/yF,CAAE,IAAIC,CAAE,IACzBiyF,GAAU,SACZA,EAAS,IAAI,CAACc,GAAQzzF,KAAU,CAC9B,KAAM,CAAE,EAAAwB,GAAG,EAAAC,EAAE,EAAIgyF,GAGXC,GAAIlyF,GAAIyxF,EAAQL,EAChBe,GAAIlyF,GAAIyxF,EAAQL,EAGtB,IAAIe,GAAKF,GACLG,GAAKF,GAGLG,GAAKJ,GACLK,GAAKJ,GAGLK,GAAW,EACXC,GAAS,EACTC,GAAS,EAGb,GAAIlmB,GAAQ,CACV,GAAIhuE,GAAQ2yF,EAAS,OAAS,EAAG,CAC/B,MAAMwB,GAAKxB,EAAS3yF,GAAQ,CAAC,EAAE,EAAIizF,EAAQL,EACrCwB,GAAKzB,EAAS3yF,GAAQ,CAAC,EAAE,EAAIkzF,EAAQL,EAC3C,GAAI7yF,KAAU,EAEZi0F,GAAShxF,GAAexC,EAAIC,EAAIgzF,GAAGC,EAAC,EACpCO,GAASjxF,GAAeywF,GAAGC,GAAGQ,GAAIC,EAAE,MAC/B,CAEL,MAAMC,GAAiB1B,EAAS3yF,GAAQ,CAAC,EACnCs0F,GAAKD,GAAe,EAAIpB,EAAQL,EAChC2B,GAAKF,GAAe,EAAInB,EAAQL,EACtCoB,GAAShxF,GAAeqxF,GAAIC,GAAIb,GAAGC,EAAC,EACpCO,GAASjxF,GAAeywF,GAAGC,GAAGQ,GAAIC,EAAE,CACtC,CACF,KAAO,CAEL,GAAIp0F,GAAQ,EAAG,CAEb,MAAMq0F,GAAiB1B,EAAS3yF,GAAQ,CAAC,EACnCs0F,GAAKD,GAAe,EAAIpB,EAAQL,EAChC2B,GAAKF,GAAe,EAAInB,EAAQL,EACtCoB,GAAShxF,GAAeqxF,GAAIC,GAAIb,GAAGC,EAAC,CACtC,MACEM,GAAShxF,GAAexC,EAAIC,EAAIgzF,GAAGC,EAAC,EAEtCO,GAASjxF,GAAeywF,GAAGC,GAAGhzF,EAAIC,CAAE,CACtC,CAGA,MAAM4zF,GAAQN,GAASD,GAEjBQ,GAAMD,GAAQ,EAEpBR,GAAWhmB,GAAS,KAAK,IAAIwmB,GAAQ,CAAC,EAClCC,KACFT,IAAY,GAEhB,CAEA,GAAIh0F,KAAU,GAOZ,GALAuzF,GAAY,KACV1wF,IAAmBpC,EAAKmyF,IAAWE,EAAOF,IAAUlyF,EAAKmyF,IAAWE,EAAOF,GAASrxF,GAAGC,EAAC,CAC1F,EAGIusE,GAAQ,CAEV,MAAM0mB,GAAWxxF,GAAkBwwF,GAAGC,GAAGlzF,EAAIC,CAAE,EAC3C,KAAK,IAAIszF,EAAQ,EAAI,GAAM,KAAK,IAAIU,EAAQ,IAE9CV,GAAW,GAAMU,IAGnB,IAAIP,GAAKxzF,EACLyzF,GAAKxzF,EACT,GAAIZ,GAAQ2yF,EAAS,OAAS,EAAG,CAE/B,MAAMgC,GAAahC,EAAS3yF,GAAQ,CAAC,EACrCm0F,GAAKQ,GAAW,EAAI1B,EAAQL,EAC5BwB,GAAKO,GAAW,EAAIzB,EAAQL,CAC9B,CAGA,MAAM+B,GAAe1xF,GAAkBwwF,GAAGC,GAAGQ,GAAIC,EAAE,EAC/C,KAAK,IAAIJ,EAAQ,EAAI,GAAM,KAAK,IAAIY,EAAY,IAElDZ,GAAW,GAAMY,IAGnB,MAAMC,GAASH,GAAWV,GAC1BJ,GAAK,KAAK,MAAMiB,GAAS,KAAK,IAAIZ,EAAM,EAAIxzF,CAAE,EAC9CozF,GAAK,KAAK,MAAMgB,GAAS,KAAK,IAAIZ,EAAM,EAAIvzF,CAAE,EAC9CozF,GAAK,KAAK,MAAME,GAAW,KAAK,IAAIE,EAAM,EAAIR,EAAC,EAC/CK,GAAK,KAAK,MAAMC,GAAW,KAAK,IAAIE,EAAM,EAAIP,EAAC,GAG1CC,GAAKF,IAAKE,GAAKnzF,GAAQmzF,GAAKF,IAAKE,GAAKnzF,KACzCmzF,IAAMiB,GAAS,EAAIb,IAAY,KAAK,IAAIC,EAAM,EAAIxzF,EAClDozF,IAAMgB,GAAS,EAAIb,IAAY,KAAK,IAAIC,EAAM,EAAIvzF,EAClDozF,GAAK,CAACE,GAAW,KAAK,IAAIE,EAAM,EAAIR,GACpCK,GAAK,CAACC,GAAW,KAAK,IAAIE,EAAM,EAAIP,GAExC,MACK,CAEL,MAAMU,GAAiB1B,EAAS3yF,GAAQ,CAAC,EAIzC,GAHAuzF,GAAY,KAAK1wF,GAAkBwxF,GAAe,EAAGA,GAAe,EAAG7yF,GAAGC,EAAC,CAAC,EAGxEusE,GAAQ,CAEV,MAAMsmB,GAAKD,GAAe,EAAIpB,EAAQL,EAChC2B,GAAKF,GAAe,EAAInB,EAAQL,EAGhC6B,GAAWxxF,GAAkBwwF,GAAGC,GAAGW,GAAIC,EAAE,EAC3C,KAAK,IAAIP,EAAQ,EAAI,GAAM,KAAK,IAAIU,EAAQ,IAE9CV,GAAW,GAAMU,IAGnB,IAAIP,GAAKxzF,EACLyzF,GAAKxzF,EACT,GAAIZ,GAAQ2yF,EAAS,OAAS,EAAG,CAE/B,MAAMgC,GAAahC,EAAS3yF,GAAQ,CAAC,EACrCm0F,GAAKQ,GAAW,EAAI1B,EAAQL,EAC5BwB,GAAKO,GAAW,EAAIzB,EAAQL,CAC9B,CAGA,MAAM+B,GAAe1xF,GAAkBwwF,GAAGC,GAAGQ,GAAIC,EAAE,EAC/C,KAAK,IAAIJ,EAAQ,EAAI,GAAM,KAAK,IAAIY,EAAY,IAElDZ,GAAW,GAAMY,IAInB,MAAMC,GAASH,GAAWV,GAC1BJ,GAAK,KAAK,MAAMiB,GAAS,KAAK,IAAIZ,EAAM,EAAIK,EAAE,EAC9CT,GAAK,KAAK,MAAMgB,GAAS,KAAK,IAAIZ,EAAM,EAAIM,EAAE,EAC9CT,GAAK,KAAK,MAAME,GAAW,KAAK,IAAIE,EAAM,EAAIR,EAAC,EAC/CK,GAAK,KAAK,MAAMC,GAAW,KAAK,IAAIE,EAAM,EAAIP,EAAC,GAG1CC,GAAKF,IAAKE,GAAKU,IAAQV,GAAKF,IAAKE,GAAKU,MACzCV,IAAMiB,GAAS,EAAIb,IAAY,KAAK,IAAIC,EAAM,EAAIK,GAClDT,IAAMgB,GAAS,EAAIb,IAAY,KAAK,IAAIC,EAAM,EAAIM,GAClDT,GAAK,CAACE,GAAW,KAAK,IAAIE,EAAM,EAAIR,GACpCK,GAAK,CAACC,GAAW,KAAK,IAAIE,EAAM,EAAIP,GAExC,CACF,CACI3zF,KAAU2yF,EAAS,OAAS,GAE9BY,GAAY,KACV1wF,IAAmBlC,EAAKiyF,IAAWE,EAAOF,IAAUhyF,EAAKiyF,IAAWE,EAAOF,GAASrxF,GAAGC,EAAC,CAC1F,EAGF+xF,IAAc,IAAII,EAAE,IAAIC,EAAE,IAEtBG,KAAa,IAEfR,IAAc,KAAKE,EAAC,IAAIC,EAAC,IAAIG,EAAE,IAAIC,EAAE,IAEzC,CAAC,EAEDP,IAAc,IAAI7yF,CAAE,IAAIC,CAAE,IAG5B,MAAMk0F,GACJlxF,KAAmB,MAAoB,SAAWA,KAAmB,MAAoB,KACrF,QAAQyvF,EAAwB,IAChC,OAEA0B,GACJnxF,KAAmB,MAAoB,SAAWA,KAAmB,MAAoB,KACrF,QAAQ0vF,EAAsB,IAC9B,OAEA0B,GAAwB,IAAM,CAClC,IAAI9rF,GAAS,QAEb,OAAItF,KAAmB,MAAoB,UACzCsF,GAAS,SAGJA,EACT,EAEA,SACE,QAAC,KAAY,QAAS,IAAMupF,EAAiBx0F,CAAC,EAC5C,qBAAC,QACC,oBAAC,UACC,GAAIo1F,GACJ,YAAY,KACZ,aAAa,IACb,KAAK,IACL,KAAK,MACL,OAAO,OACP,OAAQ5vF,EAER,mBAAC,WAAQ,OAAO,oBAAoB,KAAMA,CAAA,CAAa,EACzD,KACA,OAAC,UACC,GAAI6vF,GACJ,YAAY,KACZ,aAAa,IACb,KAAK,KACL,KAAK,MACL,OAAO,OACP,OAAQ7vF,EAER,mBAAC,WAAQ,OAAO,mBAAmB,KAAMA,CAAA,CAAa,EACxD,GACF,EACCkvF,GAAU,UAET,QAAC,KAEC,oBAAC,QACC,GAAI,GAAGT,CAAkB,eACzB,EAAGsB,GACH,OAAQL,GACR,cAAc,OACd,OAAO,cACP,YAAa,GACb,KAAM,OACN,MAAO98F,EAAa+8F,GAAiB,CAAC,EACxC,KAEA,OAAC,QACC,EAAGI,GACH,OAAQ/vF,EACR,YAAAC,EACA,gBAAiBG,GACjB,iBAAkB,EAClB,KAAM,OACN,UAAAkxF,GACA,YAAAD,GAEC,SAAA/wF,OACC,OAAC,WACC,cAAc,oBACd,OAAQixF,GAAsB,EAC9B,IAAI,KACJ,SAAS,SACT,YAAY,aACZ,KAAM,SACR,EAEJ,EACC3+F,MACC,QAAC,KAEE,UAAAs8F,EAAS,IAAI,CAAC7kG,GAAOkS,QAElB,OAAC,UACC,GAAIi1F,GACJ,aAAYj1F,GAEZ,GAAIlS,GAAM,EAAImlG,EAAQL,EACtB,GAAI9kG,GAAM,EAAIolG,EAAQL,EACtB,EAAG,EACH,OAAQpvF,EACR,UAAWxQ,EAAO,OAClB,OAAQ,YACR,cAAc,QAPT,GAAGgiG,EAAoB,GAAGj1F,EAAK,IAAIwwF,CAAG,EAQ7C,CAEH,EAEAmC,EAAS,OAASP,GACjBmB,GAAY,IAAI,CAACzlG,GAAOkS,QAEpB,OAAC,UACC,GAAIk1F,GACJ,aAAYl1F,GAEZ,GAAIlS,GAAM,EAAImlG,EAAQL,EACtB,GAAI9kG,GAAM,EAAIolG,EAAQL,EACtB,EAAG,EACH,OAAQpvF,EACR,UAAWxQ,EAAO,UAClB,OAAQ,YACR,cAAc,QAPT,GAAGiiG,EAAwB,GAAGl1F,EAAK,IAAIwwF,CAAG,EAQjD,CAEH,GACL,GAEJ,KAGA,QAAC,KAEC,oBAAC,QACC,GAAI,GAAG0B,CAAkB,eACzB,OAAQiB,GACR,cAAc,OACd,OAAO,cACP,YAAa,GACb,MAAO98F,EAAa+8F,GAAiB,CAAC,EACtC,GAAA3yF,EACA,GAAAC,EACA,GAAAC,EACA,GAAAC,CAAA,CACF,KAEA,OAAC,QACC,GAAIsxF,EACJ,OAAQzuF,EACR,cAAc,OACd,YAAAC,EACA,UAAAqxF,GACA,YAAAD,GACA,gBAAiBjxF,GACjB,iBAAkB,EAClB,GAAApD,EACA,GAAAC,EACA,GAAAC,EACA,GAAAC,EACA,OAAQuyF,GAEP,SAAApvF,OACC,OAAC,WACC,cAAc,oBACd,OAAQixF,GAAsB,EAC9B,IAAI,KACJ,SAAS,SACT,YAAY,aACZ,KAAM,SACR,EAEJ,EAEC3+F,MACC,OAAC,UACC,GAAI6+F,GACJ,aAAY,EACZ,GAAIlC,EAAS,EACb,GAAIA,EAAS,EACb,EAAG,EACH,OAAQvvF,EACR,UAAWxQ,EAAO,UAClB,OAAQ,YACR,cAAc,OAChB,GAEJ,IA9JIu9F,CAgKR,CAEJ,CAAC,EAIP,SACE,mBACE,oBAAC,OAAI,IAAK6O,EAAsB,UAAWpsG,EAAO,WAChD,oBAAC,QACC,mBAAC,UACC,GAAIk/F,EACJ,YAAY,KACZ,aAAa,IACb,KAAK,KACL,KAAK,MACL,OAAO,OACP,OAAQ5uF,EAER,mBAAC,WAAQ,OAAO,mBAAmB,KAAMA,CAAA,CAAmB,EAC9D,EACF,KAEA,OAAC,QACC,IAAKsuF,EACL,OAAQtuF,EACR,YAAa,EACb,UAAW,QAAQ4uF,CAAc,IACjC,MAAO,CAAE,QAAS,MAAO,EAC3B,KAIA,OAAC,QACC,IAAKJ,EACL,OAAQxuF,EACR,YAAa,EACb,gBAAiB,OACjB,KAAM,OACN,MAAO,CAAE,QAAS,MAAO,EAC3B,KACA,OAAC,UACC,IAAKyuF,EACL,OAAQzuF,EACR,EAAG,EACH,UAAWtQ,EAAO,OAClB,MAAO,CAAE,QAAS,MAAO,EAC3B,EAECy/F,EAAkB,GACrB,EACF,CAEJ,EAEM,GAAal/F,IAA0B,CAC3C,cAAY,OAAI,CACd,SAAU,WACV,OAAQ,IACR,cAAe,MACjB,CAAC,EACD,UAAQ,OAAI,CACV,KAAM,UACN,YAAa,CACf,CAAC,EACD,aAAW,OAAI,CACb,KAAM,UACN,QAAS,GACT,YAAa,CACf,CAAC,CACH,GC5jBa,GAAuB,SACvB,GAA2B,YAClC,GAAoC,IACpC,GAAoC,EAAI,IAAO,KAAK,GAEnD,MAAM8rG,EAAa,CAgBxB,YAAYhpG,EAAc,CAH1B,WAA2B,CAAC,EAC5B,KAAS,UAAY,IAAIg/F,GAAA,EAA6C,MAAS,EAO/E,YAAUh3F,GAA4C,CAChDA,IAAe,KAAK,UAAU,OAGlC,KAAK,UAAU,KAAKA,CAAU,CAChC,EAEA,iBAAc,IAAM,CAClB,KAAK,MAAQuB,GAAe,KAAK,MAAM,MAAM,EAE7C,MAAMuG,EAAI,KAAK,UAAU,MACzB,GAAIA,GACF,QAASrG,KAAK,KAAK,MACjB,GAAIA,EAAE,SAAWqG,EAAE,QAAUrG,EAAE,QAAUqG,EAAE,MAAO,CAChD,KAAK,UAAU,KAAKrG,CAAC,EACrB,KACF,EAGN,EAEA,4BAA0Bw1F,GAAkC,CAC1D,KAAK,oBAAsBA,CAC7B,EAEA,mBAAiBC,GAAmC,CAClD,KAAK,WAAaA,CACpB,EAEA,0BAAwB+J,GAA+B,CACrD,KAAK,eAAiBA,CACxB,EAEA,0BAAwB7J,GAAmC,CACzD,KAAK,eAAiBA,CACxB,EAEA,4BAA0BC,GAAuC,CAC/D,KAAK,iBAAmBA,CAC1B,EAEA,gCAA8BC,GAAyC,CACrE,KAAK,qBAAuBA,CAC9B,EAGA,uBAAqBt5F,GAA+C,CAClE,IAAIu5F,EAGJ,GAAIv5F,IAAY,KAAK,MAAM,YAI3B,OAAAu5F,EAAgBnF,GAAoBp0F,EAAS,KAAK,MAAM,KAAK,QAAQ,EAEjE,CAACu5F,GAAiBv5F,EAAQ,gBAC5Bu5F,EAAgB,KAAK,kBAAkBv5F,EAAQ,aAAa,GAGvDu5F,CACT,EAEA,sBAAoBx9F,GAA4B,CAC9C,GAAI,EAAEA,EAAM,kBAAkB,UAAY,CAAC,KAAK,MAAM,iBACpD,OAGF,IAAIiE,EAAoC,KAAK,kBAAkBjE,EAAM,MAAM,EAE3E,GAAI,CAACiE,EAAS,CACZ,QAAQ,IAAI,YAAY,EACxB,MACF,CAEA,GAAI,KAAK,oBACP,KAAK,iBAAmBA,UAExB,KAAK,iBAAmBA,EACpB,CAAC,KAAK,iBAAkB,CAC1B,QAAQ,IAAI,sBAAsB,EAClC,MACF,CAGF,MAAMw5F,EAAuBx5F,GAAS,KAAK,yBAA2B6yF,GAGhEc,EAAU,MAAM,KAAK,KAAK,YAAY,QAAyC,EAC/E8F,EAAgBD,EAAqB,OAI3C7F,EAAQ,QAAQ,CAACC,EAAQlwF,IAAU,CACjC,GAAIA,GAAS+1F,EACX7F,EAAO,MAAM,QAAU,WAClB,CACL,KAAM,CAAE,EAAA1uF,EAAG,EAAAC,CAAE,EAAIq0F,EAAqB91F,CAAK,EAC3CkwF,EAAO,MAAM,IAAM,QAAQ,CAACzuF,EAAI,GAAK,EAAE,OAAO4tF,EAAS,QAAQD,EAAc,MAC7Ec,EAAO,MAAM,KAAO,QAAQ1uF,EAAI,GAAK,EAAE,OAAO6tF,EAAS,QAAQD,EAAc,MAC7Ec,EAAO,MAAM,QAAU,OACzB,CACF,CAAC,EAED,KAAM,CAAE,IAAAruF,EAAK,KAAAD,EAAM,MAAApE,EAAO,OAAA7D,EAAQ,SAAA+H,CAAS,EAAIJ,GAAiChF,EAAQ,GAAI,EAExF,KAAK,sBACP,KAAK,oBAAoB,MAAM,QAAU,OACzC,KAAK,oBAAoB,MAAM,QAAU,QACzC,KAAK,oBAAoB,MAAM,UAAY,aAAasF,CAAI,OAAOC,CAAG,cAAcH,CAAQ,OAC5F,KAAK,oBAAoB,MAAM,OAAS,GAAG/H,CAAM,KACjD,KAAK,oBAAoB,MAAM,MAAQ,GAAG6D,CAAK,KAEnD,EAGA,sBAAoBnF,GAGhBA,EAAM,yBAAyB,kBAC/BA,EAAM,cAAc,aAAa,KAAK,IAAM42F,GAErC,IAGT,KAAK,iBAAmB,OACxB,KAAK,oBAAqB,MAAM,QAAU,OACnC,IAGT,wBAAsB52F,GAAsB,CAG1C,GAFAA,EAAM,eAAe,EAEjB,EAAE,KAAK,gBAAkB,KAAK,MAAM,aAAe,KAAK,MAAM,YAAY,eAC5E,OAEF,KAAM,CAAE,MAAA8oB,CAAM,EAAI,KAAK,MACjB80E,EAAqBjyF,GAA4B,KAAK,KAAK,EAEjE,GAAI,CAACiyF,EACH,OAGF,MAAMz0F,GAAKnJ,EAAM,MAAQ49F,EAAmB,GAAK90E,EAC3C1f,GAAKpJ,EAAM,MAAQ49F,EAAmB,GAAK90E,EAEjD,KAAK,eAAe,aAAa,KAAM,GAAG3f,CAAC,EAAE,EAC7C,KAAK,eAAe,aAAa,KAAM,GAAGC,CAAC,EAAE,EAE7C,MAAMy0F,EAAmB,KAAK,eAAe,GAAG,QAAQ,MAClDC,EAAmB,KAAK,eAAe,GAAG,QAAQ,MAcxD,GAZK,KAAK,6BACiB,KAAK,MAAM30F,EAAI00F,EAAkBz0F,EAAI00F,CAAgB,EACvDjH,KACrB,KAAK,4BAA8B,GACnC,KAAK,eAAe,MAAM,QAAU,QACpC,KAAK,oBAAsB,IAO3B,CAAC72F,EAAM,QAAS,CAClB,GAAI,KAAK,kBAAoB,KAAK,iBAAiB,KAAO,KAAK,iBAAiB,IAAI,cAAe,CACjG,KAAM,CAAE,EAAG+9F,EAAS,EAAGC,CAAQ,EAAI10F,GACjC,KAAK,iBAAiB,IACtBu0F,EACAC,CACF,EAEA,IAAIG,EACAC,EACAC,EAEA,KAAK,kBAAoB,KAAK,iBAAiB,KAChD,CAAE,EAAGF,EAAS,EAAGC,CAAQ,EAAI50F,GAA2B,KAAK,iBAAiB,IAAKH,EAAGC,CAAC,EACxF+0F,EAAa,KAAK,iBAAiB,QAAQ,OAG3CF,EAAU90F,EACV+0F,EAAU90F,GAGZ,MAAMnD,EAAa,CACjB,OAAQ,CACN,EAAG83F,EACH,EAAGC,CACL,EACA,OAAQ,CACN,EAAGC,EACH,EAAGC,CACL,EACA,WAAAC,EACA,MAAO,CACL,MAAOjpG,GAAA,EAAO,OAAO,OAAO,KAAK,OACnC,EACA,KAAM,CACJ,MAAO,EACP,IAAK,EACL,IAAK,EACP,EACA,KAAMgF,GAAe,QACvB,EAEM,CAAE,QAAAmB,CAAQ,EAAI,KAAK,iBACpBA,EAAQ,cACXA,EAAQ,YAAc,CAAC,GAErB,KAAK,8BACP,KAAK,iBAAiB,QAAQ,YAAc,CAAC,GAAGA,EAAQ,YAAa4K,CAAU,EAC/E,KAAK,iBAAiB,SAAS,KAAK,iBAAiB,OAAO,EAEhE,CAEI,KAAK,iBACP,KAAK,eAAe,MAAM,QAAU,QAGlC,KAAK,MAAM,SAAW,KAAK,MAAM,QAAQ,gBAC3C,KAAK,MAAM,QAAQ,cAAc,MAAM,OAAS,UAChD,KAAK,MAAM,QAAQ,cAAc,oBAAoB,YAAa,KAAK,kBAAkB,GAG3F,KAAK,oBAAsB,GAC3B,KAAK,YAAY,EACjB,KAAK,MAAM,KAAK,CAClB,CACF,EAGA,oBAAkBjG,GAAsB,CAKtC,GAJA,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,YAElDA,EAAM,eAAe,EAEjB,EAAE,KAAK,kBAAoB,KAAK,MAAM,aAAe,KAAK,MAAM,YAAY,eAC9E,OAGF,MAAM49F,EAAqBjyF,GAA4B,KAAK,KAAK,EAEjE,GAAI,CAACiyF,EACH,OAGF,KAAM,CAAE,MAAA90E,CAAM,EAAI,KAAK,MACjB3f,GAAKnJ,EAAM,MAAQ49F,EAAmB,GAAK90E,EAC3C1f,GAAKpJ,EAAM,MAAQ49F,EAAmB,GAAK90E,EAEjD,KAAK,kBAAkB,aAAa,KAAM,GAAG3f,CAAC,EAAE,EAChD,KAAK,kBAAkB,aAAa,KAAM,GAAGC,CAAC,EAAE,EAEhD,MAAMg1F,EAAgB,KAAK,UAAU,MAE/B,CAAE,GAAAh2F,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,CAAG,EAAIM,GACzBu1F,EAAe,OACfA,EAAe,OACfA,GAAe,IACjB,EAEA,GAAI,CAAE,OAAA7D,EAAQ,OAAAC,EAAQ,KAAAC,EAAM,KAAAC,CAAK,EAAI,CAAE,OAAQtyF,EAAI,OAAQC,EAAI,KAAMC,EAAI,KAAMC,CAAG,EAC9E61F,GAAe,gBAAkBA,EAAc,iBACjD7D,EAAS6D,EAAc,eAAe,EACtC5D,EAAS4D,EAAc,eAAe,EACtC3D,EAAO2D,EAAc,eAAe,EACpC1D,EAAO0D,EAAc,eAAe,GAGtC,MAAMxD,EAAQH,EAAOF,EACfM,EAAQH,EAAOF,EAErB,IAAI6D,EAAMj2F,EACNk2F,EAAMj2F,EACNk2F,EAAMj2F,EACNk2F,EAAMj2F,EACN61F,GAAiBA,EAAc,WAC7B,KAAK,sBAAwB,QAAa,KAAK,oBAAsB,IACvEC,EAAMD,EAAc,SAAS,KAAK,oBAAsB,CAAC,EAAE,EAAIxD,EAAQL,EACvE+D,EAAMF,EAAc,SAAS,KAAK,oBAAsB,CAAC,EAAE,EAAIvD,EAAQL,GAErE,KAAK,sBAAwB,QAAa,KAAK,oBAAsB4D,EAAc,SAAS,OAAS,IACvGG,EAAMH,EAAc,SAAS,KAAK,oBAAsB,CAAC,EAAE,EAAIxD,EAAQL,EACvEiE,EAAMJ,EAAc,SAAS,KAAK,oBAAsB,CAAC,EAAE,EAAIvD,EAAQL,IAK3E,IAAIiE,EAAQt1F,EACRu1F,EAAQt1F,EACRu1F,EAAe,GAEnB,GAAI,CAAC3+F,EAAM,QAAS,CAElB,MAAM4+F,EAAiB,KAAK,KAAKH,EAAQJ,IAAQK,EAAQJ,EAAI,EAAI,GAC3DO,EAAgB,KAAK,KAAKJ,EAAQF,IAAQG,EAAQF,EAAI,EAAI,GAC1DM,EAAmB,KAAK,KAAKJ,EAAQJ,IAAQG,EAAQJ,EAAI,EAAI,GAC7DU,EAAkB,KAAK,KAAKL,EAAQF,IAAQC,EAAQF,EAAI,EAAI,GAE9DK,EACFH,EAAQJ,EACCQ,IACTJ,EAAQF,GAENO,EACFJ,EAAQJ,EACCS,IACTL,EAAQF,IAGLI,GAAkBC,KAAmBC,GAAoBC,GAC5D,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,OACzCH,GAAkBC,EAC3B,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,cACzCC,GAAoBC,KAC7B,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,cAGpD,MAAMC,EAAep0F,GAAeyzF,EAAKC,EAAKC,EAAKC,CAAG,EAChDS,EAAcr0F,GAAeyzF,EAAKC,EAAKn1F,EAAGC,CAAC,EACjDu1F,EAAe,KAAK,IAAIM,EAAcD,CAAY,EAAI,EACxD,CAeA,GAbIL,GAEF,KAAK,sBAAsB,aAAa,IAAK,IAAIN,CAAG,IAAIC,CAAG,KAAKC,CAAG,IAAIC,CAAG,EAAE,EAC5E,KAAK,qBAAsB,MAAM,QAAU,QAC3C,KAAK,iBAAiB,MAAM,QAAU,SAGtC,KAAK,sBAAsB,aAAa,IAAK,IAAIH,CAAG,IAAIC,CAAG,KAAKG,CAAK,IAAIC,CAAK,KAAKH,CAAG,IAAIC,CAAG,EAAE,EAC/F,KAAK,qBAAsB,MAAM,QAAU,QAC3C,KAAK,iBAAiB,MAAM,QAAU,SAIpC,CAACx+F,EAAM,QAAS,CAElB,KAAK,MAAM,SAAS,eAAe,oBAAoB,YAAa,KAAK,cAAc,EACvF,KAAK,MAAM,SAAS,eAAe,oBAAoB,UAAW,KAAK,cAAc,EACrF,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,OAClD,KAAK,qBAAsB,MAAM,QAAU,OAC3C,KAAK,iBAAiB,MAAM,QAAU,OAGtC,MAAMk/F,EAAkBd,GAAe,MACjCe,EAAc,KAAK,oBAEzB,GAAID,IAAoB,QAAaC,IAAgB,OAAW,CAC9D,MAAMC,EAAgBhB,EAAe,OACrC,GAAIgB,EAAc,QAAQ,YAAa,CACrC,MAAMC,EAAqB,CAAC,GAAGD,EAAc,QAAQ,WAAW,EAChE,GAAIC,EAAmBH,CAAe,EAAE,SAAU,CAChD,MAAMI,EAAkB,CAAC,GAAGD,EAAmBH,CAAe,EAAE,QAAS,EAGzE,GAAIP,EACFW,EAAgB,OAAOH,EAAa,CAAC,MAChC,CACL,MAAMI,EAAgB,CAAE,GAAGD,EAAgBH,CAAW,CAAE,EAExDI,EAAc,GAAKd,EAAQlE,GAAUK,EACrC2E,EAAc,GAAKb,EAAQlE,GAAUK,EAErCyE,EAAgBH,CAAW,EAAII,CACjC,CAEAF,EAAmBH,CAAe,EAAI,CACpC,GAAGG,EAAmBH,CAAe,EACrC,SAAUI,CACZ,EAGAF,EAAc,SAAS,CAAE,GAAGA,EAAc,QAAS,YAAaC,CAAmB,CAAC,EACpF,KAAK,YAAY,EACjB,KAAK,MAAM,KAAK,CAClB,CACF,CACF,CACF,CACF,EAGA,uBAAqBr/F,GAAsB,CAKzC,GAJA,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,YAElDA,EAAM,eAAe,EAEjB,EAAE,KAAK,kBAAoB,KAAK,MAAM,aAAe,KAAK,MAAM,YAAY,eAC9E,OAGF,MAAM49F,EAAqBjyF,GAA4B,KAAK,KAAK,EAEjE,GAAI,CAACiyF,EACH,OAGF,KAAM,CAAE,MAAA90E,CAAM,EAAI,KAAK,MACjB3f,GAAKnJ,EAAM,MAAQ49F,EAAmB,GAAK90E,EAC3C1f,GAAKpJ,EAAM,MAAQ49F,EAAmB,GAAK90E,EAEjD,KAAK,kBAAkB,aAAa,KAAM,GAAG3f,CAAC,EAAE,EAChD,KAAK,kBAAkB,aAAa,KAAM,GAAGC,CAAC,EAAE,EAEhD,MAAMg1F,EAAgB,KAAK,UAAU,MAE/B,CAAE,GAAAh2F,EAAI,GAAAC,EAAI,GAAAC,EAAI,GAAAC,CAAG,EAAIM,GACzBu1F,EAAe,OACfA,EAAe,OACfA,GAAe,IACjB,EAEA,GAAI,CAAE,OAAA7D,EAAQ,OAAAC,EAAQ,KAAAC,EAAM,KAAAC,CAAK,EAAI,CAAE,OAAQtyF,EAAI,OAAQC,EAAI,KAAMC,EAAI,KAAMC,CAAG,EAC9E61F,GAAe,gBAAkBA,EAAc,iBACjD7D,EAAS6D,EAAc,eAAe,EACtC5D,EAAS4D,EAAc,eAAe,EACtC3D,EAAO2D,EAAc,eAAe,EACpC1D,EAAO0D,EAAc,eAAe,GAGtC,MAAMxD,EAAQH,EAAOF,EACfM,EAAQH,EAAOF,EAErB,IAAI6D,EAAMj2F,EACNk2F,EAAMj2F,EACNk2F,EAAMj2F,EACNk2F,EAAMj2F,EACN61F,GAAiBA,EAAc,WAC7B,KAAK,sBAAwB,QAAa,KAAK,oBAAsB,IACvEC,EAAMD,EAAc,SAAS,KAAK,oBAAsB,CAAC,EAAE,EAAIxD,EAAQL,EACvE+D,EAAMF,EAAc,SAAS,KAAK,oBAAsB,CAAC,EAAE,EAAIvD,EAAQL,GAErE,KAAK,sBAAwB,QAAa,KAAK,oBAAsB4D,EAAc,SAAS,SAC9FG,EAAMH,EAAc,SAAS,KAAK,mBAAmB,EAAE,EAAIxD,EAAQL,EACnEiE,EAAMJ,EAAc,SAAS,KAAK,mBAAmB,EAAE,EAAIvD,EAAQL,IAKvE,IAAIiE,EAAQt1F,EACRu1F,EAAQt1F,EAEZ,GAAI,CAACpJ,EAAM,QAAS,CAElB,MAAM4+F,EAAiB,KAAK,KAAKH,EAAQJ,IAAQK,EAAQJ,EAAI,EAAI,GAC3DO,EAAgB,KAAK,KAAKJ,EAAQF,IAAQG,EAAQF,EAAI,EAAI,GAC1DM,EAAmB,KAAK,KAAKJ,EAAQJ,IAAQG,EAAQJ,EAAI,EAAI,GAC7DU,EAAkB,KAAK,KAAKL,EAAQF,IAAQC,EAAQF,EAAI,EAAI,GAE9DK,EACFH,EAAQJ,EACCQ,IACTJ,EAAQF,GAENO,EACFJ,EAAQJ,EACCS,IACTL,EAAQF,IAGLI,GAAkBC,KAAmBC,GAAoBC,GAC5D,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,OACzCH,GAAkBC,EAC3B,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,cACzCC,GAAoBC,KAC7B,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,aAEtD,CAOA,GALA,KAAK,sBAAsB,aAAa,IAAK,IAAIV,CAAG,IAAIC,CAAG,KAAKG,CAAK,IAAIC,CAAK,KAAKH,CAAG,IAAIC,CAAG,EAAE,EAC/F,KAAK,qBAAsB,MAAM,QAAU,QAC3C,KAAK,iBAAiB,MAAM,QAAU,QAGlC,CAACx+F,EAAM,QAAS,CAElB,KAAK,MAAM,SAAS,eAAe,oBAAoB,YAAa,KAAK,iBAAiB,EAC1F,KAAK,MAAM,SAAS,eAAe,oBAAoB,UAAW,KAAK,iBAAiB,EACxF,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,OAClD,KAAK,qBAAsB,MAAM,QAAU,OAC3C,KAAK,iBAAiB,MAAM,QAAU,OAGtC,MAAMk/F,EAAkBd,GAAe,MACjCe,EAAc,KAAK,oBAEzB,GAAID,IAAoB,QAAaC,IAAgB,OAAW,CAC9D,MAAMC,EAAgBhB,EAAe,OACrC,GAAIgB,EAAc,QAAQ,YAAa,CACrC,MAAMC,EAAqB,CAAC,GAAGD,EAAc,QAAQ,WAAW,EAE1DI,EAAY,CAAE,GAAIf,EAAQlE,GAAUK,EAAO,GAAI8D,EAAQlE,GAAUK,CAAM,EAC7E,GAAIwE,EAAmBH,CAAe,EAAE,SAAU,CAChD,MAAMI,EAAkB,CAAC,GAAGD,EAAmBH,CAAe,EAAE,QAAS,EACzEI,EAAgB,OAAOH,EAAa,EAAGK,CAAS,EAChDH,EAAmBH,CAAe,EAAI,CACpC,GAAGG,EAAmBH,CAAe,EACrC,SAAUI,CACZ,CACF,KAAO,CAEL,MAAMA,EAA2C,CAACE,CAAS,EAC3DH,EAAmBH,CAAe,EAAI,CACpC,GAAGG,EAAmBH,CAAe,EACrC,SAAUI,CACZ,CACF,EAIE,CAACD,EAAmBH,CAAe,EAAE,gBACrC,CAACG,EAAmBH,CAAe,EAAE,kBAErCG,EAAmBH,CAAe,EAAI,CACpC,GAAGG,EAAmBH,CAAe,EACrC,eAAgB,CAAE,EAAG92F,EAAI,EAAGC,CAAG,EAC/B,eAAgB,CAAE,EAAGC,EAAI,EAAGC,CAAG,CACjC,GAGF62F,EAAc,SAAS,CAAE,GAAGA,EAAc,QAAS,YAAaC,CAAmB,CAAC,EACpF,KAAK,YAAY,EACjB,KAAK,MAAM,KAAK,CAClB,CACF,CACF,CACF,EAEA,+BAA4B,CAACI,EAA6B/kF,EAAiBC,IAAoB,CAG7F,GAFA,KAAK,MAAM,QAAS,cAAe,MAAM,OAAS,YAE9C,KAAK,gBAAkB,KAAK,MAAM,aAAe,KAAK,MAAM,YAAY,cAAe,CACzF,MAAM+kF,EAA2BD,EAAe,sBAAsB,EAEhE,CAAE,MAAA32E,CAAM,EAAI,KAAK,MACjB80E,EAAqBjyF,GAA4B,KAAK,KAAK,EAEjE,GAAI,CAACiyF,EACH,OAIF,MAAM+B,EAA0B9I,GAAqC/tE,EAC/D82E,EAA0B/I,GAAqC/tE,EAE/D3f,GAAKu2F,EAAyB,EAAI9B,EAAmB,EAAI+B,GAA2B72E,EACpF1f,GAAKs2F,EAAyB,EAAI9B,EAAmB,EAAIgC,GAA2B92E,EAEpF+2E,EAASnlF,EAAUkjF,EAAmB,EACtCkC,EAASnlF,EAAUijF,EAAmB,EAE5C,KAAK,eAAe,aAAa,KAAM,GAAGz0F,CAAC,EAAE,EAC7C,KAAK,eAAe,aAAa,KAAM,GAAGC,CAAC,EAAE,EAC7C,KAAK,eAAe,aAAa,KAAM,GAAGy2F,CAAM,EAAE,EAClD,KAAK,eAAe,aAAa,KAAM,GAAGC,CAAM,EAAE,EAClD,KAAK,4BAA8B,EACrC,CAEA,KAAK,MAAM,SAAS,eAAe,iBAAiB,YAAa,KAAK,kBAAkB,CAC1F,EAGA,2BAAyBL,GAAgC,CAEvD,KAAK,oBAAsB,OAAOA,EAAe,aAAa,YAAY,CAAC,EAE3E,KAAK,MAAM,SAAS,eAAe,iBAAiB,YAAa,KAAK,cAAc,EACpF,KAAK,MAAM,SAAS,eAAe,iBAAiB,UAAW,KAAK,cAAc,CACpF,EAGA,8BAA4BA,GAAgC,CAE1D,KAAK,oBAAsB,OAAOA,EAAe,aAAa,YAAY,CAAC,EAE3E,KAAK,MAAM,SAAS,eAAe,iBAAiB,YAAa,KAAK,iBAAiB,EACvF,KAAK,MAAM,SAAS,eAAe,iBAAiB,UAAW,KAAK,iBAAiB,CACvF,EAEA,cAAW,CAACh5F,EAA0Bs5F,IAA6B,CACjE,MAAMt4F,EAAchB,EAAQ,OAAO,QAAQ,aAAa,OAAO,CAAC,GAAK,CAAC,EACtEgB,EAAYhB,EAAQ,KAAK,EAAIs5F,EAC7Bt5F,EAAQ,OAAO,SAAS,CAAE,GAAGA,EAAQ,OAAO,QAAS,YAAAgB,CAAY,CAAC,EAClE,KAAK,YAAY,CACnB,EAGA,2BAAyBxD,GAChBqD,GAAmBrD,CAAO,GAAK8B,GAAmB9B,EAAS,KAAK,MAAM,MAAM,EAllBnF,KAAK,MAAQhG,EACb,KAAK,YAAY,CACnB,CAmlBA,QAAS,CACP,SACE,oBACE,oBAAC,IACC,OAAQ,KAAK,uBACb,cAAe,KAAK,cACpB,iBAAkB,KAAK,iBACzB,KACA,OAAC,IACC,WAAY,KAAK,qBACjB,iBAAkB,KAAK,2BACvB,aAAc,KAAK,uBACnB,qBAAsB,KAAK,qBAC3B,MAAO,KAAK,MACd,GACF,CAEJ,CACF,CCrpBO,MAAMkpG,WAAoB9gG,EAAW,CAC1C,YACShL,EACA4C,EACCmpG,EACR,CACA,MAAM/rG,EAAS4C,CAAK,EAJb,aAAA5C,EACA,WAAA4C,EACC,oBAAAmpG,EA8BV,gBAAcjmG,GAA2B,CACvC,KAAK,IAAMA,CACb,EA5BE,KAAK,UAAY,CACf,OAAQ,OACR,MAAO,MACT,CACF,CAEA,QAA8B,CAC5B,MAAO,EACT,CAGA,SAAS9F,EAA6B,CACpC,KAAK,QACL,KAAK,QAAU,CAAE,GAAGA,CAAQ,EAC5B,KAAK,eAAe,CACtB,CAEA,cAAmC,CACjC,KAAM,CAAE,UAAAoG,EAAW,WAAA6B,EAAY,GAAG+jG,CAAK,EAAI,KAAK,QAEhD,MAAO,CACL,GAAGA,EACH,SAAU,KAAK,SAAS,IAAKzhG,GAAMA,EAAE,aAAa,CAAC,CACrD,CACF,CAMA,QAAS,CACP,SACE,OAAC,OACC,cAAgB5F,GAAUA,EAAM,eAAe,EAE/C,IAAK,KAAK,WACV,MAAO,CAAE,GAAG,KAAK,UAAW,GAAG,KAAK,SAAU,EAE7C,cAAK,SAAS,IAAK4F,MAClB,OAAC,WAAQ,CAAc,SAAAA,EAAE,OAAO,GAAjBA,EAAE,GAAiB,CACnC,GANI,KAAK,GAOZ,CAEJ,CACF,CCLO,MAAM0hG,EAAM,CAyDjB,YACEjsG,EACOksG,EACP/vG,EACA,CAFO,YAAA+vG,EA1DT,YAAS,GAAU,EACnB,KAAS,UAAY,IAAIC,GAAA,EAA8B,CAAC,EACxD,KAAS,MAAQ,IAAIC,GAAA,EACrB,KAAS,OAAS,IAAI,IAItB,WAAQ,EAER,WAAQ,EACR,YAAS,EACT,WAAQ,EACR,gBAAa,EACb,eAAY,EACZ,WAAuB,CAAC,EAgBxB,gCAA6B,GAC7B,sBAAmB,GAInB,mCAAiCC,GAAqB,CACpD,KAAK,mBAAqBA,CAC5B,EAEA,oBAAiB,MAAgB,gBAAgB,EAAE,YAAc,OAYjE,KAAS,gBAAkB,IAAIzK,GAAA,EAAyB,EAAK,EAG7D,qBAAkB,IAAI,IAyBtB,wBAAqB,CAAC0K,EAAU,KAAU,CACxC,MAAMC,EAAQD,EAAU,QAAU,UAClC,IAAIxP,EAAM,KAAK,OAAO,KAAO,EAE7B,MAAMxkF,EAAMwkF,EAAM,IAClB,KAAeA,EAAMxkF,GAAK,CACxB,MAAM7b,EAAO,GAAG8vG,CAAK,IAAIzP,GAAK,GAC9B,GAAI,CAAC,KAAK,OAAO,IAAIrgG,CAAI,EACvB,OAAOA,CAEX,CAEA,MAAO,GAAG8vG,CAAK,IAAI,KAAK,IAAI,CAAC,EAC/B,EAEA,eAAahiG,GACJ,CAAC,KAAK,OAAO,IAAIA,CAAC,EA2D3B,aAA4B,CAC1B,SAAWF,MAAgC,OAA0B,KAAK,KAAMA,CAAK,EACrF,SAAWojB,MAAgC,OAA0B,KAAK,KAAMA,CAAK,EACrF,UAAY++E,MAAkC,OAA2B,KAAK,KAAMA,CAAM,EAC1F,QAAUtwG,MAA8B,OAAyB,KAAK,KAAMA,CAAI,EAChF,YAAcynC,MAAiC,OAA6B,KAAK,KAAMA,CAAG,EAC1F,aAAeqB,MAAwC,OAA8B,KAAK,KAAMA,CAAS,EACzG,aAAc,IAAM,KAAK,IAC3B,EA4DA,UAAO,CAACynE,EAAiB,KAAU,CACjC,KAAK,OAAO,KAAK,KAAK,aAAa,CAAC,EAEhCA,GACF,WAAW,IAAM,CACX,MAAO,eAAe,mBACpB,KAAK,aAAe,KAAK,YAC3BhG,GAAa,GAAM,KAAK,iBAAkB,IAAI,EAC9C,KAAK,sBAAsB,GAGzB,KAAK,KACPA,GAAa,GAAM,KAAK,iBAAkB,IAAI,CAGpD,CAAC,CAEL,EAEA,+BAA4B,CAAC3gG,EAAiBkC,IAAkC,CAC9E,MAAMk1F,EAAQ,CAAC,GAAG,KAAK,KAAK,QAAQ,EACpC,KAAOA,EAAM,OAAS,GAAG,CACvB,MAAMC,EAAiBD,EAAM,MAAM,EAE/BC,GAAkBA,EAAe,KAAOA,EAAe,MAAQr3F,GACjEq3F,EAAe,uBAAuBn1F,CAAoB,EAG5D,MAAMo1F,EAAiBD,aAA0BnyF,GAAamyF,EAAe,SAAW,CAAC,EACzF,UAAWE,KAAiBD,EAC1BF,EAAM,QAAQG,CAAa,CAE/B,CACF,EAEA,YAAUqP,GAAmC,CAC3C,KAAK,IAAMA,CACb,EAEA,kBAAgBC,GAAoC,CAClD,KAAK,UAAYA,CACnB,EAEA,oBAAkBC,GAAsC,CACtD,KAAK,YAAcA,CACrB,EAEA,YAAU7hG,GAA+B,CACnC,KAAK,UACP,KAAK,QAAQ,mBAAmBA,EAAU,OAAO,EACjD,KAAK,gBAAgBA,CAAS,EAC9B,KAAK,gBAAgB,KAAK,EAAK,EAG3B,KAAK,YAAY,sBACnB,KAAK,YAAY,oBAAoB,MAAM,QAAU,QAG3D,EAEA,qBAAmBA,GAA+B,CAEhD,GADA,KAAK,SAAU,OAASA,EAAU,QAC9B,KAAK,2BAA4B,CACnC,KAAK,2BAA6B,GAClC,MACF,CAEA,GAAIA,EAAU,MACZ,KAAK,UAAU,KAAK,CAACA,EAAU,KAAK,CAAC,MAChC,CACL,MAAM,EAAIA,EAAU,QAAQ,IAAK2S,GAAMs/E,GAAoBt/E,EAAG,KAAK,KAAK,QAAQ,CAAE,EAClF,KAAK,UAAU,KAAK,CAAC,CACvB,CACF,EAEA,oBAAiB,IAAM,CACrB,GAAI,CACF,IAAI3S,EAA6B,CAAE,QAAS,CAAC,CAAE,EAC/CA,EAAU,QAAU,CAAC,GAAG,KAAK,eAAe,EAC5C,KAAK,OAAOA,CAAS,CACvB,MAAgB,CACd,KAAU,KAAK,MAAU,WAAY,CAAC,4BAA4B,CAAC,CACrE,CACF,EAEA,gBAAa,CAACnI,EAAciqG,IAA2B,CACrD,KAAM,CAAE,KAAAC,EAAM,UAAAC,EAAW,eAAAC,CAAe,EAAIpqG,EAC5C,GAAIiqG,GAAiBC,EAAK,KAAOE,GAAkBD,EAAW,CAC5D,MAAME,EAAavF,GAAwB,MAAM,KAAKoF,EAAK,IAAI,QAAQ,EAAGC,CAAS,EAC7E,CAAE,MAAAt/E,EAAO,QAAArf,EAAS,QAAAC,CAAQ,EAAI4+F,EACpCD,EAAe,QAAQv/E,CAAK,EAC5Bu/E,EAAe,SAAS5+F,EAASC,CAAO,CAC1C,CACF,EA5PE,MAAM6+F,KAAY,OAAgB,EAAE,WAAW,EACzCC,EAAgBntG,EAAQ,eAAiBktG,GAAW,SAE1D,KAAK,KAAO,KAAK,KAAKltG,EAASmtG,CAAa,EAE5C,KAAK,aAAe,KAAK,gBAAgB,UAAW34F,GAAS,CACvD,CAAC,KAAK,UAAY,CAAC,KAAK,mBAG5B,KAAK,SAAS,UAAY,CAACA,EAC7B,CAAC,EAED,KAAK,MAAQrY,EACb,KAAK,YAAc,MAAO,eAAe,mBAAqB,IAAIyvG,GAAa,IAAI,EAAI,IAAIjK,GAAY,IAAI,CAC7G,CAqBA,KAAK3hG,EAAkBmtG,EAAwB,CAC7C,KAAM,CAAE,KAAAL,EAAM,kBAAAM,EAAmB,QAAAC,EAAS,cAAAR,EAAe,QAAAS,CAAQ,EAAIttG,EAC/DutG,EAAcD,GAAS,MAAQ,MAAmB,OAClDE,EAA4BF,GAAS,oBAAsB,GAEjE,YAAK,KAAO,IAAIxB,GACdgB,GAAQ,CACN,KAAM,QACN,SAAU,CAAC3nG,EAA6B,CAC1C,EACA,KACA,KAAK,IACP,EAEA,KAAK,iBAAmBgoG,EACxB,KAAK,wBAA0BC,EAC/B,KAAK,cAAgBC,EACrB,KAAK,cAAgBR,EACrB,KAAK,YAAcU,EACnB,KAAK,0BAA4BC,EAEjC,WAAW,IAAM,CACX,MAAO,eAAe,mBACpB,KAAK,aAAe,KAAK,YACtB,KAAK,gBACR,KAAK,MAAQ,EACb,KAAK,WAAa,EAClB,KAAK,UAAY,GAKnB/G,GADuB0G,EACMA,EAAe,IAAI,EAChD,KAAK,aAAe,KAAK,KACzB,KAAK,UAAU,KAAK,CAAC,CAAC,EACtB,KAAK,YAAY,OAAO,MAAS,EACjC,KAAK,YAAY,YAAY,EAE7B,KAAK,sBAAsB,EAC3B,KAAK,WAAW,KAAMN,CAAa,GAGjC,KAAK,MAGPpG,GADuB0G,EACMA,EAAe,IAAI,EAChD,KAAK,aAAe,KAAK,KACzB,KAAK,UAAU,KAAK,CAAC,CAAC,EACtB,KAAK,YAAY,OAAO,MAAS,EACjC,KAAK,YAAY,YAAY,EAGnC,CAAC,EACM,KAAK,IACd,CAYA,WAAWzwG,EAAiB,CAC1B,KAAK,KAAOA,EACZ,KAAK,KAAK,WAAW,KAAK,OAAO,CACnC,CAEA,WAAWoN,EAAe7D,EAAgB,CACxC,KAAK,MAAQ6D,EACb,KAAK,OAAS7D,EACd,KAAK,MAAQ,CAAE,MAAA6D,EAAO,OAAA7D,CAAO,EAEzB,MAAO,eAAe,qBACxB,KAAK,sBAAsB,EAC3B,KAAK,WAAW,KAAM,KAAK,aAAc,EAIzC,KAAK,KAAK,SAAS,QAAS8W,GAAO,CACjCA,EAAG,uBAAuB,EAAK,CACjC,CAAC,EAGG,KAAK,YAAY,sBACnB,KAAK,YAAY,oBAAoB,MAAM,QAAU,QAG3D,CAEA,uBAAwB,CACtB,MAAM0wF,EAAiB,KAAK,YAAY,eAExC,GAAIA,EAAgB,CAClB,MAAMhgF,EAAQ,KAAK,eAAgB,QAAQ,EAGrCvf,EAAO,KAAK,eAAgB,cAAc,GAAK,EAC/CC,EAAM,KAAK,eAAgB,aAAa,GAAK,EAC7CrE,EAAQ,KAAK,MACb7D,EAAS,KAAK,OAEpBwnG,EAAe,MAAM,KAAO,GAAGv/F,CAAI,KACnCu/F,EAAe,MAAM,IAAM,GAAGt/F,CAAG,KACjCs/F,EAAe,MAAM,MAAQ,GAAG3jG,EAAQ2jB,CAAK,KAC7CggF,EAAe,MAAM,OAAS,GAAGxnG,EAASwnB,CAAK,KAE/CggF,EAAe,aAAa,UAAW,GAAGv/F,CAAI,IAAIC,CAAG,IAAIrE,EAAQ2jB,CAAK,IAAIxnB,EAASwnB,CAAK,EAAE,CAC5F,CACF,CAEA,sBAAsBigF,EAA6B,GAAO,CACxD,KAAK,2BAA6BA,EAClC,IAAI/oG,EAAoB,IAAI,WAAW,OAAO,EAC1C,MAAO,eAAe,mBACxB,KAAK,SAAS,YAAYA,EAAO,KAAK,WAAW,EAEjD,KAAK,SAAS,YAAYA,EAAO,KAAK,GAAG,CAE7C,CAiGA,QAAS,CACP,MAAMgpG,EAAe,KAAK,gBAAgB,SAAS,UAAY,KAAK,eAAe,QAAQ,SAAS,CAAC,CAAC,EAAE,OAAS,EAC3GC,EACJ,KAAK,gBAAgB,SAAS,QAAQ,SACtC,KAAK,eAAe,QAAQ,QAAQ,QAAQ,OACzCrmG,GAAWA,EAAO,OAAS,MAAW,UAAS,OAAyBA,CAAM,CACjF,EAAE,OAAS,EAEPsmG,EAAiBF,GAAgBC,GAAc,KAAK,gBAAgB,SAAS,MAAM,MACnFE,EAAyB,KAAK,cAAgB,MAAmB,KAEjEC,EACJ,KAAK,2BAA6B,KAAK,gBAAgB,SAAS,eAAiB,MAAa,IAC1FC,EACJ,CAAC,KAAK,kBAAoBH,GAAkBC,GAA0B,CAACC,EAEnEE,KACJ,oBACG,eAAK,YAAY,OAAO,EACxB,KAAK,KAAK,OAAO,EACjB,KAAK,qBACJ,OAAC,MAAM,CACL,mBAACrF,GAAA,CACC,MAAO,KACP,MAAO,KAAK,MACZ,mBAAoB,KAAK,8BAC3B,EACF,EAEDoF,MACC,OAAC,MAAM,CACL,mBAAC5D,GAAa,CAAC,MAAO,KAAM,EAC9B,GAEJ,EAGF,OAAO,MAAO,eAAe,sBAC3B,OAAC,OAAI,UAAW,KAAK,OAAO,OAAQ,IAAK,KAAK,aAA+B,cAAY,uBACvF,mBAAC,OACC,UAAW,KAAK,OAAO,SACvB,IAAK,KAAK,eAEV,cAAY,wBAEX,SAAA6D,CAAA,EAHI,KAAK,KAIZ,GAR+D,KAAK,KAStE,KAEA,OAAC,OAEC,UAAW,KAAK,OAAO,KACvB,MAAO,KAAK,MACZ,IAAK,KAAK,OACV,cAAY,eAEX,SAAAA,CAAA,EANI,KAAK,KAOZ,CAEJ,CACF,CAEA,MAAM,GAAY,KAAO,CACvB,QAAM,OAAI,CACR,SAAU,SACV,SAAU,UACZ,CAAC,EACD,YAAU,OAAI,CACZ,OAAQ,gBACV,CAAC,EACD,UAAQ,OAAI,CACV,SAAU,SACV,MAAO,OACP,OAAQ,MACV,CAAC,EACD,YAAU,OAAI,CACZ,MAAO,OACP,OAAQ,MACV,CAAC,CACH,G,uCCjbO,SAASC,GAAc,CAAE,QAAA7D,EAAS,MAAAznG,EAAO,YAAAiJ,CAAY,EAAU,CACpE,MAAM+e,EAAehoB,EAAM,KAAK,QAAQ,YAAY,OAAO,OAAS,GAE9D,CAACurG,EAASC,CAAU,KAAI,YAASxjF,CAAY,EAC7C9qB,KAAQ,OAAU,EAClBP,EAAS,GAAUO,EAAO+L,CAAW,EAErCxR,EAAYD,GAA8B,CAC1CA,IACFg0G,EAAWh0G,CAAK,EACZwI,EAAM,OACRA,EAAM,KAAK,QAAQ,WAAa,CAC9B,GAAGA,EAAM,KAAK,QAAQ,WACtB,MAAO,CAAE,KAAM,MAAsB,MAAO,MAAOxI,CAAM,CAC3D,EACAwI,EAAM,QACNA,EAAM,KAAK,EAEXA,EAAM,KAAK,qBAAqB,GAI9BA,GACFA,EAAM,WAAWA,EAAM,IAAK,GAIhCynG,EAAQ,CACV,EAEA,SACE,OAAC,MAAM,CAAC,UAAW9qG,EAAO,cACxB,mBAAC8uG,GAAA,GACC,SAAAh0G,EACA,MAAO8zG,EACP,UAAW,MAAU,MACrB,WAAY,MAAmB,IACjC,EACF,CAEJ,CAEA,MAAM,GAAY,CAACruG,EAAsB+L,KAA8B,CACrE,iBAAe,OAAI,CACjB,MAAO,QACP,OAAQ,QACR,UAAW,aAAaA,EAAY,CAAC,OAAOA,EAAY,EAAI,GAAG,KACjE,CAAC,CACH,G,+GC3DO,MAAMyiG,GAAuB,CAAC,CAAE,MAAAl0G,EAAO,SAAAC,CAAS,IAAyD,CAC9G,MAAM2F,EAAuD,CAC3D,CACE,MAAO,KAAoB,SAC3B,SAAO,KAAE,2DAA4D,UAAU,CACjF,EACA,CACE,MAAO,KAAoB,QAC3B,SAAO,KAAE,0DAA2D,SAAS,CAC/E,EACA,CAAE,MAAO,KAAoB,MAAO,SAAO,KAAE,wDAAyD,OAAO,CAAE,EAC/G,CAAE,MAAO,KAAoB,KAAM,SAAO,KAAE,uDAAwD,MAAM,CAAE,EAC5G,CAAE,MAAO,KAAoB,KAAM,SAAO,KAAE,uDAAwD,MAAM,CAAE,CAC9G,EACMuuG,EAAYn0G,GAAS,KAAoB,MAEzCo0G,KAAoB,eACvBh8F,GAAiB,CAChBnY,EAASmY,CAAI,CACf,EACA,CAACnY,CAAQ,CACX,EAEA,SACE,OAAC8D,GAAA,EAAc,CACb,mBAACC,GAAA,EAAW,CAAC,KAAM,GACjB,mBAACC,GAAA,EAAgB,CAAC,MAAOkwG,EAAW,QAAAvuG,EAAkB,SAAUwuG,EAAmB,UAAS,GAAC,EAC/F,EACF,CAEJ,ECrBM,GAAqB,CACzB,SAAU,CAAC,CACb,EAIaC,GAA2B,CAAC,CAAE,MAAAr0G,EAAO,QAAA4C,EAAS,SAAA3C,CAAS,IAAa,CAC/E,MAAMq0G,EAAmB,CACvB,CACE,SAAO,KAAE,oDAAqD,OAAO,EACrE,MAAO,MAAuB,MAC9B,eAAa,KAAE,0DAA2D,uBAAuB,CACnG,EACA,CACE,SAAO,KAAE,oDAAqD,OAAO,EACrE,MAAO,MAAuB,MAC9B,eAAa,KAAE,0DAA2D,gCAAgC,CAC5G,CACF,EAEMC,EAAqE,CACzE,CAAE,MAAO,MAAoB,QAAS,SAAO,KAAE,oDAAqD,SAAS,CAAE,EAC/G,CAAE,MAAO,MAAoB,QAAS,SAAO,KAAE,oDAAqD,SAAS,CAAE,EAC/G,CAAE,MAAO,MAAoB,KAAM,SAAO,KAAE,iDAAkD,MAAM,CAAE,EACtG,CAAE,MAAO,MAAoB,KAAM,SAAO,KAAE,iDAAkD,MAAM,CAAE,CACxG,EAEMC,EAAa,EAEbC,KAAe,eAClBC,GAAiC,CAChCz0G,EAAS,CACP,GAAGD,EACH,KAAA00G,CACF,CAAC,CACH,EACA,CAACz0G,EAAUD,CAAK,CAClB,EAEMiJ,KAAgB,eACnBC,GAAmB,CAClBjJ,EAAS,CACP,GAAGD,EACH,MAAAkJ,CACF,CAAC,CACH,EACA,CAACjJ,EAAUD,CAAK,CAClB,EAEM20G,KAAgB,eACnBhkG,GAAoD,CACnD1Q,EAAS,CACP,GAAGD,EACH,MAAO,OACP,MAAO2Q,EAAU,OAAS,MAAoB,OAChD,CAAC,CACH,EACA,CAAC1Q,EAAUD,CAAK,CAClB,EAEM00G,EAAO10G,GAAO,MAAQ,MAAuB,MAC7C40G,EAAoBL,EAAsB,KAAMM,GAAQA,EAAI,QAAU70G,GAAO,KAAK,GAAKu0G,EAAsB,CAAC,EAEpH,SACE,oBACE,oBAACxwG,GAAA,EAAc,CACb,mBAACC,GAAA,GACC,SAAO,KAAE,qDAAsD,QAAQ,EACvE,WAAAwwG,EACA,KAAM,GAEN,mBAACvwG,GAAA,EAAgB,CAAC,MAAOywG,EAAM,QAASJ,EAAkB,SAAUG,EAAc,UAAS,GAAC,EAC9F,EACF,EAECC,IAAS,MAAuB,UAC/B,OAAC3wG,GAAA,EAAc,CACb,mBAACC,GAAA,GACC,SAAO,KAAE,oDAAqD,OAAO,EACrE,WAAAwwG,EACA,KAAM,GAEN,mBAACprG,GAAA,GACC,QAAAxG,EACA,MAAO5C,GAAO,OAAS,GACvB,SAAUiJ,EACV,KAAM,GACR,EACF,EACF,EAGDyrG,IAAS,MAAuB,UAC/B,OAAC3wG,GAAA,EAAc,CACb,mBAACC,GAAA,GACC,SAAO,KAAE,wDAAyD,WAAW,EAC7E,WAAAwwG,EACA,KAAM,GAEN,mBAACtwG,GAAA,GAAM,CAAC,MAAO0wG,EAAmB,QAASL,EAAuB,SAAUI,CAAA,CAAe,EAC7F,EACF,GAEJ,CAEJ,E,4BCjHA,MAAM/uG,GAA6C,CACjD,CAAE,MAAO/F,GAAU,MAAO,MAAO,OAAQ,EACzC,CAAE,MAAOA,GAAU,OAAQ,MAAO,QAAS,EAC3C,CAAE,MAAOA,GAAU,OAAQ,MAAO,QAAS,CAC7C,EASai1G,GAA0C,CACrD,MAAOj1G,GAAU,MACjB,QAAS,EACX,EAEak1G,GAAkB,CAAC,CAAE,MAAA/0G,EAAO,SAAAC,CAAS,IAAa,CACxDD,EAEM,OAAOA,GAAU,WAC1BA,EAAQ,CACN,MAAOA,EACP,QAAS,EACX,GALAA,EAAQ80G,GAQV,MAAME,KAAoB,eACvBj/F,GAAyB,CACxB9V,EAAS,CAAE,GAAGD,EAAO,MAAO+V,CAAU,CAAC,CACzC,EACA,CAAC9V,EAAUD,CAAK,CAClB,EAEMi1G,KAAkB,eACrBC,GAAqB,CACpBj1G,EAAS,CAAE,GAAGD,EAAO,QAAAk1G,CAAQ,CAAC,CAChC,EACA,CAACj1G,EAAUD,CAAK,CAClB,EAEA,SACE,oBACE,oBAACiE,GAAA,EAAgB,CAAC,MAAOjE,EAAM,MAAO,QAAA4F,GAAkB,SAAUovG,EAAmB,UAAS,GAAC,EAC9Fh1G,EAAM,QAAUH,GAAU,UACzB,oBACE,oBAAC,OAAG,KACJ,OAACsE,GAAA,EAAK,CAAC,SAAO,KAAE,yCAA0C,SAAS,EACjE,mBAACgxG,GAAA,EAAM,CAAC,MAAOn1G,EAAM,QAAS,SAAWe,GAAMk0G,EAAgBl0G,EAAE,cAAc,OAAO,EAAG,EAC3F,GACF,GAEJ,CAEJ,E,gBCzDO,SAASq0G,GAAc,CAAE,MAAAp1G,EAAO,SAAAC,EAAU,KAAAsL,EAAM,QAAA3I,CAAQ,EAAU,CACvE,MAAMyyG,EAAY9pG,EAAK,UAAU,OAAS,CAAC,EAE3C,SACE,OAAC+pG,GAAA,GACC,QAASt1G,EACT,SAAW6wG,GAAY,CACjBA,EAAQ,KAAK,CAAC,CAAE,SAAA0E,CAAS,IAAMA,IAAa,EAAI,GAClDF,EAAU,QAASxoG,GAAS,CAC1BA,EAAK,SAAW,EAClB,CAAC,EAEH5M,EAAS4wG,CAAO,CAClB,EACA,eAAgB,IAAOjuG,EAAQ,eAAiBA,EAAQ,eAAe,MAAyB,MAAM,EAAI,CAAC,EAC3G,KAAM,CAAC,EACP,aAAc,GAChB,CAEJ,C,gBCnBO,SAAS4yG,GAAgB,CAAE,MAAAx1G,EAAO,SAAAC,EAAU,KAAAsL,EAAM,QAAA3I,CAAQ,EAAU,CACzE,MAAMiuG,EAAUtlG,EAAK,UAAU,SAAW,CAAC,EAE3C,SACE,OAACkqG,GAAA,GACC,MAAOz1G,EACP,SAAW2wG,GAAU,CACfA,EAAM,KAAK,CAAC,CAAE,SAAA4E,CAAS,IAAMA,IAAa,EAAI,GAChD1E,EAAQ,QAAS1jG,GAAW,CAC1BA,EAAO,SAAW,EACpB,CAAC,EAEHlN,EAAS0wG,CAAK,CAChB,EACA,eAAgB,IAAO/tG,EAAQ,eAAiBA,EAAQ,eAAe,MAAyB,MAAM,EAAI,CAAC,EAC3G,KAAM,CAAC,EACP,aAAc,GAChB,CAEJ,CCKA,MAAM8yG,GAAkB,CAACv5F,EAAayG,IAChCA,IAAS,SAAWA,IAAS,OACxB,CAACzG,EAAM,KAAKyG,CAAI,GAAG,EAErB,CAACzG,CAAG,EAGAw5F,GAAiC,CAC5C,cAAe,CAAC1vG,EAASrD,IAAY,CACnC,MAAMsD,EAAWwvG,MAAgB,KAAE,6BAA8B,YAAY,EAAG9yG,EAAQ,SAAS,IAAI,EACrGqD,EACG,gBAAgB,CACf,SAAAC,EACA,GAAI,mBACJ,KAAM,mBACN,QAAM,KAAE,qBAAsB,OAAO,EACrC,OAAQE,GAAA,EACR,SAAU,CAAC,EACX,aAAc,CAEZ,MAAO,EACT,CACF,CAAC,EACA,gBAAgB,CACf,SAAAF,EACA,GAAI,mBACJ,KAAM,mBACN,QAAM,KAAE,qBAAsB,OAAO,EACrC,OAAQkC,GAAA,EACR,SAAU,CACR,aAAc,OAChB,CACF,CAAC,EACA,gBAAgB,CACf,SAAAlC,EACA,GAAI,kBACJ,KAAM,kBACN,QAAM,KAAE,0BAA2B,YAAY,EAC/C,OAAQguG,GACR,SAAU,CACR,aAAc,OAChB,EACA,OAAQ,IAGFtxG,EAAQ,SAAS,KACZ,CAACyI,GAAY,IAAIzI,EAAQ,QAAQ,IAAI,EAGvC,EAEX,CAAC,CACL,EAEA,UAAW,CAACqD,EAASrD,IAAY,CAC/B,MAAMsD,EAAWwvG,MAAgB,KAAE,yBAA0B,QAAQ,EAAG9yG,EAAQ,SAAS,IAAI,EAC7FqD,EAAQ,eAAe,CACrB,SAAAC,EACA,KAAM,eACN,QAAM,KAAE,qBAAsB,OAAO,EACrC,aAAc,EACd,SAAU,CACR,IAAK,EACL,IAAK,EACP,CACF,CAAC,EAEGtD,EAAQ,SAAS,QAAQ,OAC3BqD,EAAQ,gBAAgB,CACtB,SAAAC,EACA,GAAI,eACJ,KAAM,eACN,QAAM,KAAE,qBAAsB,OAAO,EACrC,OAAQE,GAAA,EACR,SAAU,CAAC,EACX,aAAc,CAEZ,MAAO,EACT,CACF,CAAC,EAGHH,EAAQ,eAAe,CACrB,SAAAC,EACA,KAAM,gBACN,QAAM,KAAE,sBAAuB,QAAQ,EACvC,aAAc,EACd,SAAU,CACR,IAAK,EACL,IAAK,EACP,CACF,CAAC,CACH,EAEA,SAAU,CAACD,EAASrD,IAAY,CAC9B,MAAMsD,EAAW,IAAC,KAAE,wBAAyB,OAAO,CAAC,EACrDD,EAAQ,gBAAgB,CACtB,SAAAC,EACA,GAAI,QACJ,KAAM,QACN,QAAM,KAAE,qBAAsB,OAAO,EACrC,OAAQE,GAAA,EACR,SAAU,CAAC,EACX,aAAc,CAEZ,MAAO,EACT,CACF,CAAC,CACH,EAEA,QAAS,CAACH,EAASrD,IAAY,CAC7B,MAAMsD,EAAW,IAAC,KAAE,uBAAwB,MAAM,CAAC,EACnDD,EAAQ,gBAAgB,CACtB,SAAAC,EACA,GAAI,OACJ,KAAM,OACN,QAAM,KAAE,oBAAqB,MAAM,EACnC,OAAQ0vG,GAAA,EACR,SAAU,CACR,IAAK,EACL,IAAK,EACP,EACA,aAAc,CAEZ,MAAO,EACP,IAAK,EACL,IAAK,EACP,CACF,CAAC,CACH,EAEA,UAAW,CAAC3vG,EAASrD,IAAY,CAC/B,MAAMsD,EAAW,IAAC,KAAE,yBAA0B,QAAQ,CAAC,EACvDD,EAAQ,gBAAgB,CACtB,SAAAC,EACA,GAAI,SACJ,KAAM,SACN,QAAM,KAAE,sBAAuB,QAAQ,EACvC,OAAQ0vG,GAAA,EACR,SAAU,CACR,IAAK,EACL,IAAK,IACL,kBAAmB,MAAU,MAC/B,EACA,aAAc,CAEZ,MAAO,EACP,IAAK,EACL,IAAK,GACP,CACF,CAAC,CACH,EAEA,aAAc,CAAC3vG,EAASrD,IAAY,CAClC,MAAMsD,EAAW,IAAC,KAAE,kCAAmC,WAAW,CAAC,EACnED,EAAQ,gBAAgB,CACtB,SAAAC,EACA,GAAI,YACJ,KAAM,YACN,QAAM,KAAE,yBAA0B,WAAW,EAC7C,OAAQmuG,GACR,SAAU,CAAC,EACX,aAAc,CACZ,KAAM,MAAuB,MAC7B,MAAO,MAAoB,OAC7B,CACF,CAAC,CACH,EAEA,aAAc,CAACpuG,EAASrD,IAAY,CAClC,MAAMsD,EAAW,IAAC,KAAE,6BAA8B,YAAY,CAAC,EAC/DD,EAAQ,gBAAgB,CACtB,SAAAC,EACA,GAAI,YACJ,KAAM,YACN,QAAM,KAAE,0BAA2B,YAAY,EAC/C,OAAQ6uG,GACR,SAAU,CAAC,EACX,aAAc,CAAE,MAAOl1G,GAAU,MAAO,SAAO,KAAE,wCAAyC,OAAO,CAAE,CACrG,CAAC,CACH,EAEA,aAAc,CAACoG,EAASrD,IAAY,CAClCqD,EAAQ,gBAAgB,CACtB,SAAU,IAAC,KAAE,6BAA8B,wBAAwB,CAAC,EACpE,GAAI,YACJ,KAAM,QACN,QAAM,KAAE,qBAAsB,OAAO,EACrC,OAAQuvG,GACR,SAAU5yG,EAAQ,OACpB,CAAC,CACH,EAEA,WAAY,CAACqD,EAASrD,IAAY,CAChCqD,EAAQ,gBAAgB,CACtB,SAAU,IAAC,KAAE,6BAA8B,wBAAwB,CAAC,EACpE,GAAI,UACJ,KAAM,UACN,QAAM,KAAE,uBAAwB,SAAS,EACzC,OAAQmvG,GACR,SAAUxyG,EAAQ,OACpB,CAAC,CACH,CACF,ECxNO,SAASizG,GAAoBz/F,EAA2E,CAC7G,MAAO,CACL,SAAUA,EAAK,SACf,KAAM,KAEN,OAAS5K,IAA+B,CACtC,SAAWrD,MACF2tG,GAAA,KAAU1/F,EAAK,WAAW,KAAMjO,CAAI,EAG7C,SAAU,CAACA,EAAcnI,IAAmB,CAC1C,IAAI4F,EAAUwQ,EAAK,WAAW,KAC9BxQ,KAAU,OAAmBA,EAASuC,EAAMnI,CAAK,EACjDoW,EAAK,MAAM,YAAY,SAASA,EAAK,WAAYxQ,CAAO,CAC1D,CACF,GAEA,MAAO,CAACK,EAASrD,IAAY,CAC3B,MAAMkN,EAAM,CAAE,GAAGlN,EAAS,QAASwT,EAAK,WAAW,IAAK,EACxDu/F,GAAc,SAAS1vG,EAAS6J,CAAG,EACnC6lG,GAAc,QAAQ1vG,EAAS6J,CAAG,EAClC6lG,GAAc,UAAU1vG,EAAS6J,CAAG,EACpC6lG,GAAc,aAAa1vG,EAAS6J,CAAG,EACvC6lG,GAAc,aAAa1vG,EAAS6J,CAAG,CACzC,CACF,CACF,C,4BC9BO,MAAMimG,GAAyB,CAAC,CACrC,2BAAAC,EACA,6BAAAC,EACA,mBAAAC,CACF,IAAa,CACX,MAAM/wG,KAAS,OAAW,GAAU+wG,CAAkB,CAAC,EAEjDC,EAAuB,IAAM,CACjCH,EAA2B,KAAmB,GAAG,CACnD,EAEMI,EAA0B,IAAM,CACpCJ,EAA2B,KAAmB,MAAM,CACtD,EAEMK,EAAkC,IAAM,CAC5CL,EAA2B,KAAmB,MAAM,CACtD,EAEMM,EAAwB,IAAM,CAClCL,EAA6B,KAAqB,IAAI,CACxD,EAEMM,EAAyB,IAAM,CACnCN,EAA6B,KAAqB,KAAK,CACzD,EAEMO,EAAoC,IAAM,CAC9CP,EAA6B,KAAqB,MAAM,CAC1D,EAEA,SACE,OAAC,OACC,QAAQ,MACR,MAAM,6BACN,MAAM,cACN,OAAO,cACP,QAAQ,4BACR,oBAAoB,gBACpB,MAAO,CAAE,aAAc,OAAQ,EAE/B,oBAAC,KAAE,UAAU,2DAA2D,KAAK,UAAU,OAAO,OAC5F,oBAAC,QACC,KAAK,UACL,EAAE;AAAA;AAAA;AAAA;AAAA,oCAKJ,KACA,OAAC,QAAK,UAAW9wG,EAAO,cAAe,OAAO,MAAM,MAAM,KAAK,EAAE,OAAO,EAAE,MAAO,MACjF,OAAC,QACC,UAAWA,EAAO,gBAClB,QAASgxG,EACT,OAAO,MACP,MAAM,MACN,EAAE,OACF,EAAE,MACF,KAAK,cACP,KACA,OAAC,QAAK,UAAWhxG,EAAO,iBAAkB,OAAO,MAAM,MAAM,KAAK,EAAE,MAAM,EAAE,MAAO,MACnF,OAAC,QACC,UAAWA,EAAO,gBAClB,QAASixG,EACT,OAAO,MACP,MAAM,MACN,EAAE,MACF,EAAE,MACF,KAAK,cACP,KACA,OAAC,QAAK,UAAWjxG,EAAO,eAAgB,OAAO,KAAK,MAAM,MAAM,EAAE,OAAO,EAAE,KAAM,MACjF,OAAC,QACC,UAAWA,EAAO,gBAClB,QAASmxG,EACT,OAAO,MACP,MAAM,MACN,EAAE,MACF,EAAE,MACF,KAAK,cACP,KACA,OAAC,QAAK,UAAWnxG,EAAO,gBAAiB,OAAO,KAAK,MAAM,MAAM,EAAE,OAAO,EAAE,MAAO,MACnF,OAAC,QACC,UAAWA,EAAO,gBAClB,QAASoxG,EACT,OAAO,MACP,MAAM,MACN,EAAE,MACF,EAAE,OACF,KAAK,cACP,KACA,OAAC,QACC,UAAWpxG,EAAO,IAClB,EAAE;AAAA;AAAA;AAAA,iDAIJ,KACA,OAAC,QAAK,UAAWA,EAAO,yBAA0B,OAAO,MAAM,MAAM,KAAK,EAAE,MAAM,EAAE,MAAO,MAC3F,OAAC,QACC,UAAWA,EAAO,gBAClB,QAASkxG,EACT,OAAO,MACP,MAAM,MACN,EAAE,MACF,EAAE,MACF,KAAK,cACP,KACA,OAAC,QAAK,UAAWlxG,EAAO,2BAA4B,OAAO,KAAK,MAAM,MAAM,EAAE,OAAO,EAAE,KAAM,MAC7F,OAAC,QACC,UAAWA,EAAO,gBAClB,QAASqxG,EACT,OAAO,MACP,MAAM,MACN,EAAE,MACF,EAAE,MACF,KAAK,cACP,GACF,EACF,CAEJ,EAEM,GAAaN,GAAoCxwG,GAAyB,CAC9E,MAAM+wG,EAAc,UAEdC,EAAiB,UAEjBC,EAAoBjxG,EAAM,OAAS,UAAY,UAErD,MAAO,CACL,mBAAiB,OAAI,CACnB,UAAW,CACT,KAAM+wG,EACN,YAAa,KACf,CACF,CAAC,EACD,iBAAe,OAAI,CACjB,GAAIP,EAAmB,WAAa,KAAmB,KACvDA,EAAmB,WAAa,KAAmB,UAC/C,CACE,MAAO,OACP,EAAG,OACH,KAAMQ,CACR,EACA,CACE,KAAMC,CACR,CACN,CAAC,EACD,oBAAkB,OAAI,CACpB,GAAIT,EAAmB,WAAa,KAAmB,QACvDA,EAAmB,WAAa,KAAmB,UAC/C,CACE,MAAO,OACP,EAAG,OACH,KAAMQ,CACR,EACA,CACE,KAAMC,CACR,CACN,CAAC,EACD,kBAAgB,OAAI,CAClB,GAAIT,EAAmB,aAAe,KAAqB,MAC3DA,EAAmB,aAAe,KAAqB,UACnD,CACE,OAAQ,OACR,EAAG,OACH,KAAMQ,CACR,EACA,CACE,KAAMC,CACR,CACN,CAAC,EACD,mBAAiB,OAAI,CACnB,GAAIT,EAAmB,aAAe,KAAqB,OAC3DA,EAAmB,aAAe,KAAqB,UACnD,CACE,OAAQ,OACR,EAAG,OACH,KAAMQ,CACR,EACA,CACE,KAAMC,CACR,CACN,CAAC,EACD,8BAA4B,OAAI,CAC9B,GAAIT,EAAmB,aAAe,KAAqB,OACvD,CACE,OAAQ,OACR,EAAG,OACH,KAAMQ,CACR,EACA,CACE,KAAMC,CACR,CACN,CAAC,EACD,4BAA0B,OAAI,CAC5B,GAAIT,EAAmB,WAAa,KAAmB,OACnD,CACE,MAAO,OACP,EAAG,OACH,KAAMQ,CACR,EACA,CACE,KAAMC,CACR,CACN,CAAC,EACD,OAAK,OAAI,CACP,KAAMA,CACR,CAAC,CACH,CACF,EC7MaC,GAAmB,CAAC,CAAE,iBAAAC,EAAkB,QAAAroG,EAAS,SAAAsoG,CAAS,IAAa,CAClF,MAAM3xG,KAAS,OAAW,EAAS,EAE7B4xG,EAA4BjxF,GAA6B,CAC7D,MAAMkxF,EAAoB,CAAE,SAAU,KAAmB,IAAK,WAAY,KAAqB,IAAK,EAC9FC,EAAqB,CAAE,GAAGzoG,EAAQ,QAAQ,UAAW,EAK3D,OAHAA,EAAQ,QAAQ,WAAawoG,EAC7BxoG,EAAQ,2BAA2B,EAE3BsX,EAAU,CAChB,KAAK/gB,GAAe,IAClB8xG,EAAiB,EAAG,KAAK,EACzB,MACF,KAAK9xG,GAAe,OAClB8xG,EAAiBK,EAAuB1oG,EAAQ,QAAQ,WAAW,QAAU,EAAG,QAAQ,EAAG,KAAK,EAChG,MACF,KAAKzJ,GAAe,eAClB8xG,EAAiBM,EAAkB3oG,EAAQ,QAAQ,WAAW,QAAU,EAAG,GAAG,EAAG,KAAK,EACtF,MACF,KAAKzJ,GAAe,KAClB8xG,EAAiB,EAAG,MAAM,EAC1B,MACF,KAAK9xG,GAAe,MAClB8xG,EAAiBK,EAAuB1oG,EAAQ,QAAQ,WAAW,OAAS,EAAG,OAAO,EAAG,MAAM,EAC/F,MACF,KAAKzJ,GAAe,iBAClB8xG,EAAiBM,EAAkB3oG,EAAQ,QAAQ,WAAW,OAAS,EAAG,GAAG,EAAG,MAAM,EACtF,KACJ,CAEAA,EAAQ,QAAQ,WAAayoG,EAC7BzoG,EAAQ,2BAA2B,CACrC,EAGM2oG,EAAoB,CAACC,EAAqB1qC,MAC5BA,IAAU,IAAMoqC,EAAS,MAAM,MAAQA,EAAS,MAAM,QAEpDM,GAAe,EAG/BF,EAAyB,CAACE,EAAqB1qC,KACjCA,IAAU,QAAUoqC,EAAS,MAAM,MAAQA,EAAS,MAAM,QAEzDM,EAGrB,SACE,QAAC,OAAI,UAAWjyG,EAAO,YACrB,oBAAC9D,GAAA,GACC,KAAK,wBACL,QAAS,IAAM01G,EAAyBhyG,GAAe,IAAI,EAC3D,UAAWI,EAAO,OAClB,KAAK,KACL,WAAS,KAAE,8CAA+C,YAAY,EACxE,KACA,OAAC9D,GAAA,GACC,KAAK,0BACL,QAAS,IAAM01G,EAAyBhyG,GAAe,gBAAgB,EACvE,UAAWI,EAAO,OAClB,KAAK,KACL,WAAS,KAAE,4DAA6D,0BAA0B,EACpG,KACA,OAAC9D,GAAA,GACC,KAAK,yBACL,QAAS,IAAM01G,EAAyBhyG,GAAe,KAAK,EAC5D,UAAWI,EAAO,OAClB,KAAK,KACL,WAAS,KAAE,+CAAgD,aAAa,EAC1E,KACA,OAAC9D,GAAA,GACC,KAAK,qBACL,QAAS,IAAM01G,EAAyBhyG,GAAe,GAAG,EAC1D,KAAK,KACL,WAAS,KAAE,6CAA8C,WAAW,EACtE,KACA,OAAC1D,GAAA,GACC,KAAK,wBACL,QAAS,IAAM01G,EAAyBhyG,GAAe,cAAc,EACrE,UAAWI,EAAO,OAClB,KAAK,KACL,WAAS,KAAE,0DAA2D,wBAAwB,EAChG,KACA,OAAC9D,GAAA,GACC,KAAK,wBACL,QAAS,IAAM01G,EAAyBhyG,GAAe,MAAM,EAC7D,UAAWI,EAAO,OAClB,KAAK,KACL,WAAS,KAAE,gDAAiD,cAAc,EAC5E,GACF,CAEJ,EAEM,GAAaO,IAA0B,CAC3C,eAAa,OAAI,CACf,QAAS,OACT,SAAU,OACV,QAAS,eACX,CAAC,EACD,UAAQ,OAAI,CACV,WAAY,MACZ,YAAa,KACf,CAAC,CACH,GC7GM2xG,GAAiC,CAAC,MAAO,OAAQ,SAAU,QAAS,QAAS,SAAU,UAAU,EAIhG,SAASC,GAAgB,CAAE,KAAA/rG,CAAK,EAAU,CAC/C,MAAMurG,EAAWvrG,EAAK,SAChBgsG,EAAkE,CACtE,CAAE,SAAO,KAAE,wDAAyD,MAAM,EAAG,MAAO,KAAqB,IAAK,EAC9G,CAAE,SAAO,KAAE,yDAA0D,OAAO,EAAG,MAAO,KAAqB,KAAM,EACjH,CACE,SAAO,KAAE,kEAAmE,cAAc,EAC1F,MAAO,KAAqB,SAC9B,EACA,CACE,SAAO,KAAE,0DAA2D,QAAQ,EAC5E,MAAO,KAAqB,MAC9B,EACA,CAAE,SAAO,KAAE,yDAA0D,OAAO,EAAG,MAAO,KAAqB,KAAM,CACnH,EAEMC,EAA8D,CAClE,CAAE,SAAO,KAAE,qDAAsD,KAAK,EAAG,MAAO,KAAmB,GAAI,EACvG,CAAE,SAAO,KAAE,wDAAyD,QAAQ,EAAG,MAAO,KAAmB,MAAO,EAChH,CACE,SAAO,KAAE,gEAAiE,cAAc,EACxF,MAAO,KAAmB,SAC5B,EACA,CAAE,SAAO,KAAE,wDAAyD,QAAQ,EAAG,MAAO,KAAmB,MAAO,EAChH,CAAE,SAAO,KAAE,uDAAwD,OAAO,EAAG,MAAO,KAAmB,KAAM,CAC/G,EAKA,MAFA7uG,GAAA,GAAcmuG,GAAU,MAAQA,EAAS,MAAM,MAAQ,IAAI9E,GAAA,CAAS,EAEhE,CAAC8E,EACH,SACE,OAAC,OACC,mBAAC,KAAK,CAAC,QAAQ,kCAAkC,sBAAU,EAC7D,EAIJ,MAAMtoG,EAAUsoG,EAAS,QACzB,GAAI,CAACtoG,EACH,SAAO,OAAC,OAAI,eAAG,EAEjB,KAAM,CAAE,QAAA5I,CAAQ,EAAI4I,EACd,CAAE,UAAAxC,EAAW,WAAYyrG,CAAO,EAAI7xG,EAEtCoG,IACFA,EAAU,SAAWA,GAAW,UAAY,GAG9C,MAAM0rG,EAA6B,IAAM,CACvC,WAAW,IAAM,CACfZ,EAAS,MAAM,OAAO,CAAE,QAAS,CAACtoG,EAAQ,GAAI,CAAE,CAAC,CACnD,CAAC,CACH,EAEMmpG,EAAgCx2F,GAA6C,CACjF80F,EAA6B90F,EAAE,KAAM,CACvC,EAEM80F,EAAgC90F,GAA4B,CAChE3S,EAAQ,QAAQ,WAAY,WAAa2S,EACzC3S,EAAQ,2BAA2B,OAAW,OAAWsoG,EAAS,MAAM,KAAK,EAC7EA,EAAS,MAAM,QACfA,EAAS,MAAM,KAAK,EAAI,EACxBY,EAA2B,CAC7B,EAEME,EAA8BznG,GAA2C,CAC7E6lG,EAA2B7lG,EAAE,KAAM,CACrC,EAEM6lG,EAA8B7lG,GAA0B,CAC5D3B,EAAQ,QAAQ,WAAY,SAAW2B,EACvC3B,EAAQ,2BAA2B,OAAW,OAAWsoG,EAAS,MAAM,KAAK,EAC7EA,EAAS,MAAM,QACfA,EAAS,MAAM,KAAK,EAAI,EACxBY,EAA2B,CAC7B,EAEMb,EAAmB,CAAC72G,EAA2BgM,IAA+B,CAClFwC,EAAQ,QAAQ,UAAWxC,CAAS,EAAIhM,GAASwO,EAAQ,QAAQ,UAAWxC,CAAS,EACrFwC,EAAQ,uBAAuB,EAC/BsoG,EAAS,MAAM,sBAAsB,EAAI,EACzCY,EAA2B,CAC7B,EAEM7pG,EAAaW,EAAQ,gBAAkBipG,GAAU,CAAC,EAExD,SACE,QAAC,OACC,oBAACb,GAAgB,CAAC,iBAAAC,EAAoC,SAAAC,EAAoB,QAAAtoG,CAAA,CAAkB,KAC5F,OAAC,OAAG,KACJ,OAACrK,GAAA,EAAK,CAAC,SAAO,KAAE,4CAA6C,aAAa,EACxE,oBAAChD,GAAA,EAAK,CAAC,UAAU,MACf,oBAAC40G,GAAA,CACC,2BAAAC,EACA,6BAAAC,EACA,mBAAoBpoG,CAAA,CACtB,KACA,QAAC1M,GAAA,EAAK,CAAC,UAAU,SACf,qBAACA,GAAA,EAAK,CAAC,UAAU,MACf,oBAAC02G,GAAA,EAAI,CAAC,KAAK,UAAW,MACtB,OAAC3zG,GAAA,IACC,QAASqzG,EACT,SAAUI,EACV,MAAO9pG,EAAW,WACpB,GACF,KACA,QAAC1M,GAAA,EAAK,CAAC,UAAU,MACf,oBAAC02G,GAAA,EAAI,CAAC,KAAK,UAAW,MACtB,OAAC3zG,GAAA,GAAM,CAAC,QAASszG,EAAiB,SAAUI,EAA4B,MAAO/pG,EAAW,SAAU,GACtG,GACF,GACF,EACF,KAEA,OAAC,OAAG,KAEJ,OAAC1J,GAAA,EAAK,CAAC,SAAO,KAAE,yCAA0C,UAAU,EAClE,+BACG,SAAAkzG,GAAO,IAAK,GAAM,CACjB,MAAMlnG,EAAInE,EAAW,CAAC,EACtB,GAAImE,GAAK,KACP,OAAO,KAIT,MAAM8N,EAAM,IAAM,WAAa,EAAI,OAC7BC,EAAM,IAAM,WAAa,IAAM,OAErC,SACE,OAACna,GAAA,EAAc,CACb,mBAACC,GAAA,EAAW,CAAC,MAAO,EAAG,WAAY,EAAG,KAAM,GAC1C,mBAAC8zG,GAAA,EAAW,CAAC,IAAA75F,EAAU,IAAAC,EAAU,MAAO/N,EAAG,SAAWA,GAAM0mG,EAAiB1mG,EAAG,CAAC,EAAG,EACtF,GAHmB,CAIrB,CAEJ,CAAC,EACH,EACF,GACF,CAEJ,CChIO,SAAS4nG,GAAiB3hG,EAAqE,CACpG,MAAO,CACL,SAAUA,EAAK,SACf,KAAM,KAGN,OAAS5K,IAA+B,CACtC,SAAWrD,MACF2tG,GAAA,KAAU1/F,EAAK,QAAQ,QAASjO,CAAI,EAE7C,SAAU,CAACA,EAAMnI,IAAU,CACzB,IAAI4F,EAAUwQ,EAAK,QAAQ,QAC3B,GAAIjO,IAAS,QAAUnI,EAAO,CAC5B,MAAMg4G,EAAQ9sG,GAAsB,YAAYlL,CAAK,EACrD,GAAI,CAACg4G,EAAO,CACV,QAAQ,KAAK,uBAAwBh4G,CAAK,EAC1C,MACF,CACA4F,EAAU,CACR,GAAGA,EACH,GAAGoyG,EAAM,cAAcpyG,CAAO,EAC9B,KAAMoyG,EAAM,EACd,CACF,MACEpyG,KAAU,OAAmBA,EAASuC,EAAMnI,CAAK,EAEnDoW,EAAK,QAAQ,SAASxQ,CAAO,EAC7BwQ,EAAK,QAAQ,WAAWA,EAAK,MAAM,OAAO,CAC5C,CACF,GAGA,MAAO,CAACnQ,EAASrD,IAAY,CAC3B,KAAM,CAAE,QAAAgD,CAAQ,EAAIwQ,EAAK,QACnBpF,EAAUpL,GAAS,KAAOA,EAAQ,KAAOmF,GAA8B,KACvEktG,EAAannG,GAAgBsF,EAAK,MAAM,wBAAyBpF,CAAO,EAAE,QAE1EknG,EACJ,CAAC9hG,EAAK,MAAM,yBAA2B,CAACpL,GAAoB,OAAQO,GAASA,EAAK,KAAO3F,GAAS,IAAI,EAAE,OAE1GK,EAAQ,UAAU,CAChB,KAAM,OAEN,KAAM,OACN,SAAU,CACR,QAASgyG,CACX,EACA,YAAaC,KACT,KACE,gDACA,mGACF,EACA,EACN,CAAC,EAGD,MAAMF,EAAQ9sG,GAAsB,YAAYtF,GAAS,MAAQmF,GAA8B,IAAI,EACnG,IAAIotG,EAAiBvyG,EAChBuyG,IACHA,EAAiB,CACf,GAAGH,EAAM,cAAcpyG,CAAO,EAC9B,KAAMoyG,EAAM,GACZ,KAAM,WAAW,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,KAAK,OAAO,EAAI,GAAG,CAAC,EAChE,GAEF,MAAMloG,EAAM,CAAE,GAAGlN,EAAS,QAASu1G,CAAe,EAE9CH,GAAO,mBACTA,EAAM,kBAAkB/xG,EAAS6J,CAAG,GAGRsG,EAAK,QAAQ,KAAK,sBAAsB,QAAU,KAE9EnQ,EAAQ,gBAAgB,CACtB,SAAU,IAAC,KAAE,wCAAyC,QAAQ,CAAC,EAC/D,GAAI,UACJ,KAAM,KACN,QAAM,KAAE,6CAA8C,iBAAiB,EACvE,OAAQqxG,GACR,SAAUlhG,CACZ,CAAC,GAG+BA,EAAK,QAAQ,KAAK,sBAAsB,YAAc,KAEtFu/F,GAAc,cAAc1vG,EAAS6J,CAAG,GAGZsG,EAAK,QAAQ,KAAK,sBAAsB,QAAU,KAE9Eu/F,GAAc,UAAU1vG,EAAS6J,CAAG,EAGtC6lG,GAAc,aAAa1vG,EAAS6J,CAAG,EACvC6lG,GAAc,WAAW1vG,EAAS6J,CAAG,CACvC,CACF,CACF,C,gBCjIA,SAAS,IAAW,CAClB,OAAO,GAAW,OAAO,OAAS,OAAO,OAAO,KAAK,EAAI,SAAUyT,EAAG,CACpE,QAAS,EAAI,EAAG,EAAI,UAAU,OAAQ,IAAK,CACzC,IAAID,EAAI,UAAU,CAAC,EACnB,QAAS,KAAKA,GAAI,CAAC,GAAG,eAAe,KAAKA,EAAG,CAAC,IAAMC,EAAE,CAAC,EAAID,EAAE,CAAC,EAChE,CACA,OAAOC,CACT,EAAG,GAAS,MAAM,KAAM,SAAS,CACnC,C,wCCRA,SAAS60F,GAAgBp3G,EAAGuiB,EAAG,CAC7B,GAAI,EAAEviB,aAAauiB,GAAI,MAAM,IAAI,UAAU,mCAAmC,CAChF,C,gBCDA,SAAS80F,GAAkBt3G,EAAGqgB,EAAG,CAC/B,QAASkC,EAAI,EAAGA,EAAIlC,EAAE,OAAQkC,IAAK,CACjC,IAAI0uB,EAAI5wB,EAAEkC,CAAC,EACX0uB,EAAE,WAAaA,EAAE,YAAc,GAAIA,EAAE,aAAe,GAAI,UAAWA,IAAMA,EAAE,SAAW,IAAK,OAAO,eAAejxC,KAAGu3G,GAAA,GAActmE,EAAE,GAAG,EAAGA,CAAC,CAC7I,CACF,CACA,SAASumE,GAAax3G,EAAGqgB,EAAGkC,EAAG,CAC7B,OAAOlC,GAAKi3F,GAAkBt3G,EAAE,UAAWqgB,CAAC,EAAGkC,GAAK+0F,GAAkBt3G,EAAGuiB,CAAC,EAAG,OAAO,eAAeviB,EAAG,YAAa,CACjH,SAAU,EACZ,CAAC,EAAGA,CACN,CCXA,SAASy3G,GAAuBz3G,EAAG,CACjC,GAAeA,IAAX,OAAc,MAAM,IAAI,eAAe,2DAA2D,EACtG,OAAOA,CACT,CCHA,SAAS03G,GAAgB,EAAG,EAAG,CAC7B,OAAOA,GAAkB,OAAO,eAAiB,OAAO,eAAe,KAAK,EAAI,SAAUn1F,EAAGviB,EAAG,CAC9F,OAAOuiB,EAAE,UAAYviB,EAAGuiB,CAC1B,EAAGm1F,GAAgB,EAAG,CAAC,CACzB,CCHA,SAASC,GAAU,EAAG,EAAG,CACvB,GAAkB,OAAO,GAArB,YAAmC,IAAT,KAAY,MAAM,IAAI,UAAU,oDAAoD,EAClH,EAAE,UAAY,OAAO,OAAO,GAAK,EAAE,UAAW,CAC5C,YAAa,CACX,MAAO,EACP,SAAU,GACV,aAAc,EAChB,CACF,CAAC,EAAG,OAAO,eAAe,EAAG,YAAa,CACxC,SAAU,EACZ,CAAC,EAAG,GAAK,GAAe,EAAG,CAAC,CAC9B,CCZA,SAASC,GAAgB,EAAG,CAC1B,OAAOA,GAAkB,OAAO,eAAiB,OAAO,eAAe,KAAK,EAAI,SAAUr1F,EAAG,CAC3F,OAAOA,EAAE,WAAa,OAAO,eAAeA,CAAC,CAC/C,EAAGq1F,GAAgB,CAAC,CACtB,CCJA,SAASC,IAA4B,CACnC,GAAI,CACF,IAAI,EAAI,CAAC,QAAQ,UAAU,QAAQ,KAAK,QAAQ,UAAU,QAAS,CAAC,EAAG,UAAY,CAAC,CAAC,CAAC,CACxF,MAAY,CAAC,CACb,OAAQA,GAA4B,UAAqC,CACvE,MAAO,CAAC,CAAC,CACX,GAAG,CACL,CCLA,SAASC,GAA2B,EAAG,EAAG,CACxC,GAAI,OAAkB,MAAQ,CAAC,GAArB,UAAwC,OAAO,GAArB,YAAyB,OAAO,EACpE,GAAe,IAAX,OAAc,MAAM,IAAI,UAAU,0DAA0D,EAChG,OAAO,GAAsB,CAAC,CAChC,CCHA,SAASC,GAAa,EAAG,CACvB,IAAI13F,EAAI,GAAyB,EACjC,OAAO,UAAY,CACjB,IAAIrgB,EACFixC,EAAI,GAAe,CAAC,EACtB,GAAI5wB,EAAG,CACL,IAAI9I,EAAI,GAAe,IAAI,EAAE,YAC7BvX,EAAI,QAAQ,UAAUixC,EAAG,UAAW15B,CAAC,CACvC,MAAOvX,EAAIixC,EAAE,MAAM,KAAM,SAAS,EAClC,OAAO,GAA0B,KAAMjxC,CAAC,CAC1C,CACF,C,2ECTWg4G,GAA2B,gBAAoB,IAAI,EAGnDC,GAA+B,gBAAoB,CAAC,CAAC,ECP5DC,GAAgB,SAAuB3yG,EAAO,CAChD,IAAI4yG,EAAe5yG,EAAM,aACvB6yG,EAAkB7yG,EAAM,gBACxB8yG,EAAS9yG,EAAM,OACb4F,EAAQ,CACV,cAAe,OACf,SAAU,WACV,MAAO,EACP,gBAAiB,MACjB,OAAQ,CACV,EACA,OAAQgtG,EAAc,CACpB,IAAK,GACHhtG,EAAM,IAAM,EACZA,EAAM,KAAO,CAACitG,EAAkBC,EAChC,MACF,IAAK,GACHltG,EAAM,OAAS,EACfA,EAAM,KAAO,CAACitG,EAAkBC,EAChC,MACF,IAAK,GACHltG,EAAM,OAAS,EACfA,EAAM,KAAOktG,EACb,KACJ,CACA,OAAoB,gBAAoB,MAAO,CAC7C,MAAOltG,CACT,CAAC,CACH,EAIA,SAAe+sG,GCjCf,SAASI,GAA0B,EAAG,CACpC,GAAY,GAAR,KAAW,MAAM,IAAI,UAAU,sBAAwB,CAAC,CAC9D,CCFA,SAASC,GAAgBl4F,EAAG,CAC1B,GAAI,MAAM,QAAQA,CAAC,EAAG,OAAOA,CAC/B,CCFA,SAASm4F,GAAsBn4F,EAAGK,EAAG,CACnC,IAAI6B,EAAYlC,GAAR,KAAY,KAAsB,OAAO,OAAtB,KAAgCA,EAAE,OAAO,QAAQ,GAAKA,EAAE,YAAY,EAC/F,GAAYkC,GAAR,KAAW,CACb,IAAIviB,EACFwiB,EACA7L,EACA8hG,EACAx4G,EAAI,CAAC,EACLy4G,EAAI,GACJznE,EAAI,GACN,GAAI,CACF,GAAIt6B,GAAK4L,EAAIA,EAAE,KAAKlC,CAAC,GAAG,KAAYK,IAAN,EAAS,CACrC,GAAI,OAAO6B,CAAC,IAAMA,EAAG,OACrBm2F,EAAI,EACN,KAAO,MAAO,EAAEA,GAAK14G,EAAI2W,EAAE,KAAK4L,CAAC,GAAG,QAAUtiB,EAAE,KAAKD,EAAE,KAAK,EAAGC,EAAE,SAAWygB,GAAIg4F,EAAI,GAAG,CACzF,OAASr4F,EAAG,CACV4wB,EAAI,GAAIzuB,EAAInC,CACd,QAAE,CACA,GAAI,CACF,GAAI,CAACq4F,GAAan2F,EAAE,QAAV,OAAwBk2F,EAAIl2F,EAAE,OAAU,EAAG,OAAOk2F,CAAC,IAAMA,GAAI,MACzE,QAAE,CACA,GAAIxnE,EAAG,MAAMzuB,CACf,CACF,CACA,OAAOviB,CACT,CACF,C,gBC1BA,SAAS04G,IAAmB,CAC1B,MAAM,IAAI,UAAU;AAAA,mFAA2I,CACjK,CCEA,SAASC,GAAev4F,EAAG,EAAG,CAC5B,OAAO,GAAeA,CAAC,GAAK,GAAqBA,EAAG,CAAC,MAAKw4F,GAAA,GAA2Bx4F,EAAG,CAAC,GAAK,GAAgB,CAChH,C,mDCHIy4F,GAAS,SAAgBC,EAAM,CAOjC,QANIC,EAAYD,EAAK,UACnBE,EAAQF,EAAK,MACb76D,EAAU66D,EAAK,QACfp+D,EAAQo+D,EAAK,MACXG,EAAgB,GAAG,OAAOF,EAAW,cAAc,EACnDpgF,EAAO,CAAC,EACHjiB,EAAI,EAAGA,EAAIsiG,EAAOtiG,GAAK,EAC9BiiB,EAAK,KAAmB,gBAAoB,OAAQ,CAClD,IAAKjiB,EACL,UAAW,KAAWuiG,KAAe,SAAgB,MAAgB,CAAC,EAAG,GAAG,OAAOA,EAAe,QAAQ,EAAGh7D,EAAQvnC,CAAC,CAAC,EAAG,GAAG,OAAOuiG,EAAe,MAAM,EAAGv+D,EAAMhkC,CAAC,CAAC,CAAC,CACvK,CAAC,CAAC,EAEJ,OAAoB,gBAAoB,OAAQ,CAC9C,cAAe,OACf,UAAW,GAAG,OAAOqiG,EAAW,SAAS,CAC3C,EAAGpgF,CAAI,CACT,EACA,SAA4B,OAAWkgF,EAAM,E,2BChBzCK,GAAY,CAAC,WAAY,YAAa,QAAS,WAAY,iBAAkB,oBAAqB,SAAU,UAAW,QAAS,WAAY,WAAY,UAAW,cAAe,UAAW,SAAU,SAAU,OAAQ,cAAe,YAAY,EAQpPC,GAAY,OACZC,GAAa,QACbC,GAAe,MACf,GAAW,SAAkB/zG,EAAO,CACtC,IAAIg0G,EAAuBC,EAAuBC,EAC9CC,EAAWn0G,EAAM,SACnB4b,EAAY5b,EAAM,UAClB4F,EAAQ5F,EAAM,MACdo0G,EAAWp0G,EAAM,SACjBq0G,EAAiBr0G,EAAM,eACvBs0G,EAAoBt0G,EAAM,kBAC1Bu0G,EAASv0G,EAAM,OACf24C,EAAU34C,EAAM,QAChBo1C,EAAQp1C,EAAM,MACdw0G,EAAWx0G,EAAM,SACjBy0G,EAAWz0G,EAAM,SACjBmuF,EAAUnuF,EAAM,QAChB00G,EAAc10G,EAAM,YACpBf,EAAUe,EAAM,QAChB20G,EAAS30G,EAAM,OACf40G,EAAS50G,EAAM,OACfhE,EAAOgE,EAAM,KACb60G,EAAc70G,EAAM,YACpB80G,EAAa90G,EAAM,WACnBk1B,KAAa,MAAyBl1B,EAAO4zG,EAAS,EACpDt3G,EAAU,aAAiBm2G,EAAW,EACtCsC,EAAkB,aAAiBrC,EAAe,EAClDsC,EAAkB,SAAa,IAAI,EACnCC,EAAkB,WAAe,EAAK,EACxCC,EAAmB7B,GAAe4B,EAAiB,CAAC,EACpDE,EAAoBD,EAAiB,CAAC,EACtCE,EAAuBF,EAAiB,CAAC,EAGvCG,EAAa,CAAC,EAAE/4G,EAAQ,UAAY0D,EAAM,WAAag0G,EAAwBe,EAAgB,gBAAkB,MAAQf,IAA0B,QAAUA,EAAsB,KAAKe,EAAiB/4G,CAAI,GAC7Ms5G,EAAc,UAAc,UAAY,CAE1C,MAAI,CAACh5G,EAAQ,WAAa0D,EAAM,YAAc,GACrC,GAEF1D,EAAQ,SACjB,EAAG,CAACA,EAAQ,UAAW0D,EAAM,SAAS,CAAC,EAGnCu1G,EAAW,SAAkB96G,GAAG,CAC9B46G,GAGJ/4G,EAAQ,aAAa7B,MAAG,OAA4BuF,CAAK,CAAC,CAC5D,EACIw1G,EAAU,SAAiB/6G,GAAG,CAC5B46G,GAGA,CAACC,GAAet1G,EAAM,iBAG1B1D,EAAQ,YAAY7B,MAAG,OAA4BuF,CAAK,EAAG,CAACmuF,CAAO,CACrE,EAGIsnB,EAAe,UAAc,UAAY,CAE3C,OAAI,OAAOX,GAAe,UACjBA,EAEFx4G,EAAQ,UACjB,EAAG,CAACw4G,EAAYx4G,EAAQ,UAAU,CAAC,EAC/Bo5G,EAAkB,SAAyBj7G,GAAG,CAEhD6B,EAAQ,YAAY7B,MAAG,OAA4BuF,CAAK,CAAC,EACrDy1G,EACFF,EAAS96G,EAAC,EAEV+6G,EAAQ/6G,EAAC,CAEb,EACIk7G,EAAwB,SAA+Bl7G,GAAG,CAC5D6B,EAAQ,kBAAkB7B,MAAG,OAA4BuF,CAAK,CAAC,CACjE,EACI41G,EAAe,SAAsBn7G,GAAG,CAC1C6B,EAAQ,iBAAiB7B,MAAG,OAA4BuF,CAAK,CAAC,CAChE,EACI61G,EAAe,SAAsBp7G,GAAG,CAC1C6B,EAAQ,iBAAiB7B,MAAG,OAA4BuF,CAAK,CAAC,CAChE,EACI81G,EAAgB,SAAuBr7G,GAAG,CAC5C6B,EAAQ,kBAAkB7B,MAAG,OAA4BuF,CAAK,CAAC,CACjE,EAGI+1G,EAAc,UAAc,UAAY,CAC1C,MAAO,CAAC,EAAEz5G,EAAQ,YAAc,CAACA,EAAQ,UAAU,eAAiBA,EAAQ,UAAU,cAAcN,CAAI,GAC1G,EAAG,CAACM,EAAQ,UAAWN,CAAI,CAAC,EAGxBg6G,GAAc,SAAqBv7G,GAAG,CACxCA,GAAE,gBAAgB,EAClB26G,EAAqB,EAAI,EACzB94G,EAAQ,gBAAgB7B,GAAGuF,CAAK,EAChC,GAAI,CAGFvF,GAAE,aAAa,QAAQ,aAAc,EAAE,CACzC,MAAkB,CAElB,CACF,EACIw7G,GAAc,SAAqBx7G,GAAG,CACxCA,GAAE,eAAe,EACjBA,GAAE,gBAAgB,EAClB6B,EAAQ,gBAAgB7B,GAAGuF,CAAK,CAClC,EACIk2G,GAAa,SAAoBz7G,GAAG,CACtCA,GAAE,eAAe,EACjBA,GAAE,gBAAgB,EAClB6B,EAAQ,eAAe7B,GAAGuF,CAAK,CACjC,EACIm2G,GAAc,SAAqB17G,GAAG,CACxCA,GAAE,gBAAgB,EAClB6B,EAAQ,gBAAgB7B,GAAGuF,CAAK,CAClC,EACIo2G,EAAY,SAAmB37G,GAAG,CACpCA,GAAE,gBAAgB,EAClB26G,EAAqB,EAAK,EAC1B94G,EAAQ,cAAc7B,GAAGuF,CAAK,CAChC,EACIq2G,GAAS,SAAgB57G,GAAG,CAC9BA,GAAE,eAAe,EACjBA,GAAE,gBAAgB,EAClB26G,EAAqB,EAAK,EAC1B94G,EAAQ,WAAW7B,GAAGuF,CAAK,CAC7B,EAGIs2G,GAAW,SAAkB77G,GAAG,CAC9BwE,GAGJ3C,EAAQ,aAAa7B,MAAG,OAA4BuF,CAAK,CAAC,CAC5D,EAGIu2G,GAAc,UAAc,UAAY,CAC1C,IAAI/C,MAAO,MAAUl3G,EAAQ,YAAa63G,CAAQ,GAAK,CAAC,EACtDp5E,GAAWy4E,GAAK,SAClB,MAAO,GAASz4E,IAAY,CAAC,GAAG,MAClC,EAAG,CAACz+B,EAAQ,YAAa63G,CAAQ,CAAC,EAG9BqC,GAAiB,UAAc,UAAY,CAC7C,OAAIjC,IAAW,GACN,GAEFA,GAAU,CAACj4G,EAAQ,UAAY,CAACi6G,IAAej6G,EAAQ,UAAY0D,EAAM,QAAU,CAACu2G,EAC7F,EAAG,CAAChC,EAAQj4G,EAAQ,SAAUi6G,GAAav2G,EAAM,MAAM,CAAC,EAGxD,YAAgB,UAAY,CAEtBf,GAIA,OAAO3C,EAAQ,UAAa,YAAck4G,GAAY,CAACgC,IAAkB,CAACx2G,EAAM,QAGlF1D,EAAQ,cAAW,OAA4B0D,CAAK,CAAC,CAEzD,EAAG,CAACf,EAAS3C,EAAQ,SAAUA,EAAQ,WAAYk4G,EAAUgC,GAAgBx2G,CAAK,CAAC,EAGnF,IAAIy2G,GAAkB,UAAc,UAAY,CAC9C,IAAIC,GACJ,OAAOA,GAAqBp6G,EAAQ,aAAe,MAAQo6G,KAAuB,QAAUA,GAAmB,KAG3F,gBAAoB,OAAQ,CAC9C,UAAW,GAAG,OAAOp6G,EAAQ,UAAW,iBAAiB,CAC3D,EAAGA,EAAQ,UAAU,IAAI,EAJhB,IAKX,EAAG,CAACA,EAAQ,SAAS,CAAC,EAGlBq6G,GAAwB,SAA+BC,GAAgB,CACzE,IAAIC,GAAe72G,EAAM,cAAgB1D,EAAQ,aAEjD,OAAI,OAAOu6G,IAAiB,WACnBA,MAAa,SAAc,MAAc,CAAC,EAAG72G,CAAK,EAAG,CAAC,EAAG,CAC9D,OAAQ42G,EACV,CAAC,CAAC,EAEGC,EACT,EAGIC,GAAiB,UAA0B,CAC7C,GAAIN,GAAgB,CAElB,IAAIO,GAAmBJ,GAAsB,EAAI,EACjD,OAAOI,KAAqB,GAAqB,gBAAoB,OAAQ,CAC3E,UAAW,KAAW,GAAG,OAAOz6G,EAAQ,UAAW,WAAW,EAAG,GAAG,OAAOA,EAAQ,UAAW,gBAAgB,CAAC,CACjH,EAAGy6G,EAAgB,EAAI,IACzB,CACA,IAAIC,GAAkBL,GAAsB,EAAK,EACjD,OAAOK,KAAoB,GAAqB,gBAAoB,OAAQ,CAC1E,QAASV,GACT,UAAW,KAAW,GAAG,OAAOh6G,EAAQ,UAAW,WAAW,EAAG,GAAG,OAAOA,EAAQ,UAAW,YAAY,EAAE,OAAOk4G,EAAWX,GAAYC,EAAU,CAAC,CACvJ,EAAGkD,EAAe,EAAI,IACxB,EAGIC,GAAe,UAAc,UAAY,CAC3C,GAAI,CAAC3B,EACH,OAAO,KAIT,IAAI4B,GAAU,OAAO5B,GAAgB,UAAYA,EAAc,KAC/D,OAAoB,gBAAoB,OAAQ,CAC9C,UAAW,KAAW,GAAG,OAAOh5G,EAAQ,UAAW,WAAW,KAAG,SAAgB,SAAgB,MAAgB,CAAC,EAAG,GAAG,OAAOA,EAAQ,UAAW,mBAAmB,EAAG6xF,CAAO,EAAG,GAAG,OAAO7xF,EAAQ,UAAW,yBAAyB,EAAG,CAAC6xF,GAAWumB,CAAW,EAAG,GAAG,OAAOp4G,EAAQ,UAAW,oBAAoB,EAAG+4G,GAAcr1G,EAAM,eAAe,CAAC,EAC7V,QAASw1G,EACT,KAAM,WACN,eAAgBd,EAAc,QAAUvmB,EACxC,gBAAiBknB,GAAcr1G,EAAM,gBACrC,aAAc,UAAU,OAAO,OAAOA,EAAM,OAAU,SAAWA,EAAM,MAAQ,WAAW,CAC5F,EAAGk3G,EAAO,CACZ,EAAG,CAAC5B,EAAannB,EAASumB,EAAaW,EAAYr1G,EAAM,gBAAiBA,EAAM,KAAK,CAAC,EAGlFm3G,GAAY,UAAc,UAAY,CACxC,OAAIX,GACK,KAEFhC,EAAWX,GAAYC,EAChC,EAAG,CAAC0C,GAAgBhC,CAAQ,CAAC,EAGzB4C,GAAW,UAAc,UAAY,CACvC,OAAoB,gBAAoB,OAAQ,CAC9C,UAAW,KAAW,GAAG,OAAO96G,EAAQ,UAAW,UAAU,EAAG,GAAG,OAAOA,EAAQ,UAAW,SAAS,EAAE,OAAO66G,IAAa,MAAM,KAAG,MAAgB,CAAC,EAAG,GAAG,OAAO76G,EAAQ,UAAW,eAAe,EAAG2C,CAAO,CAAC,CAClN,CAAC,CACH,EAAG,CAAC3C,EAAQ,UAAW66G,GAAWl4G,CAAO,CAAC,EAGtCo4G,GAAoB,UAAc,UAAY,CAChD,IAAIC,GAAgB,EAAQh7G,EAAQ,UAEhCi7G,GAAgB,CAACv3G,EAAM,UAAYs3G,IAAiBh7G,EAAQ,kBAAoB63G,EACpF,OAAKoD,GAGEj7G,EAAQ,oBAAoB,CACjC,aAAcA,EAAQ,aACtB,gBAAiBA,EAAQ,gBACzB,OAAQA,EAAQ,OAChB,UAAWA,EAAQ,UACnB,UAAWA,EAAQ,SACrB,CAAC,EARQ,IASX,EAAG,CAACA,EAAQ,aAAcA,EAAQ,gBAAiBA,EAAQ,OAAQA,EAAQ,UAAWA,EAAQ,UAAWA,EAAQ,UAAWA,EAAQ,gBAAiBA,EAAQ,mBAAmB,CAAC,EAG7Kk7G,GAAe,UAAc,UAAY,CAC3C,IAAIC,GAAez3G,EAAM,MACvB03G,GAAQD,KAAiB,OAAS1D,GAAe0D,GAC/CE,GAAY,GAAG,OAAOr7G,EAAQ,UAAW,uBAAuB,EAGhEs7G,GACJ,GAAIt7G,EAAQ,SAAU,CACpB,IAAIu7G,GAAc73G,EAAM,MAAQ1D,EAAQ,KACxCs7G,GAAQC,GAA2B,gBAAoB,OAAQ,CAC7D,UAAW,KAAW,GAAG,OAAOv7G,EAAQ,UAAW,UAAU,EAAG,GAAG,OAAOA,EAAQ,UAAW,kBAAkB,CAAC,CAClH,EAAG,OAAOu7G,IAAgB,WAAaA,GAAY73G,CAAK,EAAI63G,EAAW,EAAIT,EAC7E,MAAW96G,EAAQ,UAAY2C,IAC7B24G,GAAQR,IAIV,IAAIU,GACJ,OAAI,OAAOJ,IAAU,WACnBI,GAAYJ,GAAM17G,CAAI,EACbM,EAAQ,YACjBw7G,GAAYx7G,EAAQ,YAAYN,CAAI,EAEpC87G,GAAYJ,GAEM,gBAAoB,OAAQ,CAC9C,IAAK1C,EACL,MAAO,OAAO0C,IAAU,SAAWA,GAAQ,GAC3C,UAAW,KAAWC,GAAW,GAAG,OAAOA,GAAW,GAAG,EAAE,OAAOR,IAAa,QAAQ,KAAG,MAAgB,CAAC,EAAG,GAAG,OAAO76G,EAAQ,UAAW,gBAAgB,EAAG,CAAC+4G,IAAeZ,GAAYU,EAAkB,CAAC,EAC7M,aAAcS,EACd,aAAcC,EACd,cAAeC,EACf,QAASJ,EACT,cAAeC,CACjB,EAAGiC,GAAoB,gBAAoB,OAAQ,CACjD,UAAW,GAAG,OAAOt7G,EAAQ,UAAW,QAAQ,CAClD,EAAGw7G,EAAS,EAAGT,EAAiB,CAClC,EAAG,CAAC/6G,EAAQ,UAAWA,EAAQ,SAAU0D,EAAO1D,EAAQ,KAAM86G,GAAU96G,EAAQ,YAAaN,EAAMm7G,GAAWvB,EAAcC,EAAcC,EAAeJ,EAAiBC,CAAqB,CAAC,EAC5LoC,MAA2BC,GAAA,GAAU9iF,EAAY,CACnD,KAAM,GACN,KAAM,EACR,CAAC,EACG+iF,MAAQ,MAAU37G,EAAQ,YAAa63G,CAAQ,GAAK,CAAC,EACvDT,GAAQuE,GAAM,MACZC,GAAY9iE,EAAMA,EAAM,OAAS,CAAC,EAClC+iE,GAA2B,CAAC9C,GAAcU,EAC1CqC,GAAW97G,EAAQ,kBAAoB63G,EACvCkE,GAAevD,IAAe,OAAY,CAC5C,gBAAiB,CAAC,CAACA,CACrB,EAAI,OACJ,OAAoB,gBAAoB,MAAO,GAAS,CACtD,IAAKH,EACL,KAAM,WACN,gBAAiBJ,EAAS,OAAYC,EACtC,UAAW,KAAW54F,EAAW,GAAG,OAAOtf,EAAQ,UAAW,WAAW,GAAI43G,EAAe,CAAC,KAAG,SAAgB,SAAgB,SAAgB,SAAgB,SAAgB,SAAgB,SAAgB,SAAgB,SAAgB,MAAgBA,EAAc,GAAG,OAAO53G,EAAQ,UAAW,oBAAoB,EAAG+4G,CAAU,EAAG,GAAG,OAAO/4G,EAAQ,UAAW,qBAAqB,EAAE,OAAOk4G,EAAW,OAAS,OAAO,EAAG,CAACD,CAAM,EAAG,GAAG,OAAOj4G,EAAQ,UAAW,4BAA4B,EAAG6xF,CAAO,EAAG,GAAG,OAAO7xF,EAAQ,UAAW,kCAAkC,EAAGo4G,CAAW,EAAG,GAAG,OAAOp4G,EAAQ,UAAW,oBAAoB,EAAGm4G,CAAQ,EAAG,GAAG,OAAOn4G,EAAQ,UAAW,mBAAmB,EAAG2C,CAAO,EAAG,GAAG,OAAO3C,EAAQ,UAAW,kBAAkB,EAAGs4G,CAAM,EAAG,GAAG,OAAOt4G,EAAQ,UAAW,qBAAqB,EAAG47G,EAAS,EAAG,GAAG,OAAO57G,EAAQ,UAAW,qBAAqB,EAAGy5G,CAAW,EAAG,WAAYqC,EAAQ,KAAG,SAAgB,SAAgB,SAAgB,SAAgB,SAAgB,SAAgB,MAAgBlE,EAAc,cAAe53G,EAAQ,gBAAkB63G,CAAQ,EAAG,iBAAkB73G,EAAQ,mBAAqB63G,CAAQ,EAAG,YAAa,CAACkB,GAAcjB,CAAQ,EAAG,oBAAqB,CAACiB,GAAchB,CAAc,EAAG,uBAAwB,CAACgB,GAAcf,CAAiB,EAAG,eAAgBL,EAAwB33G,EAAQ,kBAAoB,MAAQ23G,IAA0B,OAAS,OAASA,EAAsB,KAAK33G,KAAS,OAA4B0D,CAAK,CAAC,CAAC,EAAG,GAAG,OAAO1D,EAAQ,UAAW,gBAAgB,EAAGk6G,EAAc,EAAE,EAC/hD,MAAO5wG,EAGP,UAAWuyG,GACX,YAAaA,GAA2BnC,GAAc,OAGtD,YAAaD,EAAcE,GAAc,OACzC,WAAYF,EAAcG,GAAa,OACvC,YAAaH,EAAcI,GAAc,OACzC,OAAQJ,EAAcM,GAAS,OAC/B,UAAWN,EAAcK,EAAY,OACrC,YAAavB,CACf,EAAGwD,GAAcN,EAAwB,EAAgB,gBAAoB,GAAQ,CACnF,UAAWz7G,EAAQ,UACnB,MAAOo3G,GACP,QAAS/6D,EACT,MAAOvD,CACT,CAAC,EAAGqhE,GAAiBK,GAAe,EAAGG,GAAcO,EAAY,CACnE,EACA,GAAS,WAAa,EAItB,SAAe,GC1Vf,SAASc,GAAWC,EAAcC,EAAY,CAC5C,IAAIvD,EAAkB,WAAe,EAAK,EACxCC,EAAmB7B,GAAe4B,EAAiB,CAAC,EACpDwD,EAAavD,EAAiB,CAAC,EAC/BwD,EAAgBxD,EAAiB,CAAC,KACpCyD,GAAA,GAAgB,UAAY,CAC1B,GAAIF,EACF,OAAAF,EAAa,EACN,UAAY,CACjBC,EAAW,CACb,CAEJ,EAAG,CAACC,CAAU,CAAC,KACfE,GAAA,GAAgB,UAAY,CAC1B,OAAAD,EAAc,EAAI,EACX,UAAY,CACjBA,EAAc,EAAK,CACrB,CACF,EAAG,CAAC,CAAC,CACP,CACA,SAAeJ,GCvBf,IAAI,GAAY,CAAC,YAAa,QAAS,SAAU,cAAe,aAAc,gBAAiB,cAAe,SAAU,uBAAuB,EAS3IM,GAA8B,aAAiB,SAAUC,EAAU5iF,EAAK,CAC1E,IAAIra,EAAYi9F,EAAS,UACvBjzG,EAAQizG,EAAS,MACjBC,EAASD,EAAS,OAClBE,EAAcF,EAAS,YACvBG,EAAaH,EAAS,WACtBI,EAAsBJ,EAAS,cAC/BK,EAAoBL,EAAS,YAC7BjE,EAASiE,EAAS,OAClBM,EAAwBN,EAAS,sBACjC74G,KAAQ,MAAyB64G,EAAU,EAAS,EAClD5D,EAAkB,WAAe,EAAI,EACvCC,EAAmB7B,GAAe4B,EAAiB,CAAC,EACpDtJ,EAAUuJ,EAAiB,CAAC,EAC5BkE,EAAalE,EAAiB,CAAC,EAC7BmE,EAAoB,aAAiB5G,EAAW,EAClDgB,EAAY4F,EAAkB,UAI5BC,EAAgBP,GAAeC,IAAe,UAClDL,GAAA,GAAgB,UAAY,CACtBI,GACEO,IAAkB3N,GACpByN,EAAWE,CAAa,CAG9B,EAAG,CAACP,CAAW,CAAC,EAChB,IAAIQ,EAAqB,UAA8B,CACjDR,GACFE,EAAoB,CAExB,EAGIO,EAAsB,SAAa,EAAK,EACxCC,EAAmB,UAA4B,CAC7CV,GAAe,CAACS,EAAoB,UACtCA,EAAoB,QAAU,GAC9BN,EAAkB,EAEtB,EAGA,GAAWK,EAAoBE,CAAgB,EAG/C,IAAIC,EAAmB,SAA0BC,EAAa,CACxDL,IAAkBK,GACpBF,EAAiB,CAErB,EACA,OAAIV,EACkB,gBAAoB,KAAW,GAAS,CAC1D,IAAK9iF,EACL,QAAS01E,CACX,EAAGmN,EAAQ,CACT,aAAcE,IAAe,OAC7B,iBAAkBU,CACpB,CAAC,EAAG,SAAUlG,EAAMoG,EAAW,CAC7B,IAAIC,EAAkBrG,EAAK,UACzBsG,EAActG,EAAK,MACrB,OAAoB,gBAAoB,MAAO,CAC7C,IAAKoG,EACL,UAAW,KAAW,GAAG,OAAOnG,EAAW,kBAAkB,EAAGoG,CAAe,EAC/E,MAAOC,CACT,EAAGf,EAAY,IAAI,SAAUgB,EAAU,CACrC,IAAIC,EAAY,OAAO,OAAO,CAAC,GAAIjH,GAA0BgH,EAAS,IAAI,EAAGA,EAAS,KAAK,EACzFrC,EAAQqC,EAAS,MACjB3/G,EAAM2/G,EAAS,IACfphE,EAAUohE,EAAS,QACnB3kE,EAAQ2kE,EAAS,MACnB,OAAOC,EAAU,SACjB,IAAIC,KAAgB,OAAiB7/G,EAAK++G,CAAqB,EAC/D,OAAoB,gBAAoB,GAAU,GAAS,CAAC,EAAGa,EAAWC,EAAe,CACvF,MAAOvC,EACP,OAAQ9C,EACR,KAAMmF,EAAS,KACf,IAAK3/G,EACL,QAASu+C,EACT,MAAOvD,CACT,CAAC,CAAC,CACJ,CAAC,CAAC,CACJ,CAAC,EAEiB,gBAAoB,GAAU,GAAS,CACzD,OAAQnf,EACR,UAAWra,EACX,MAAOhW,CACT,EAAG5F,EAAO,CACR,OAAQ40G,CACV,CAAC,CAAC,CACJ,CAAC,EAID,SAAegE,GC7GR,SAASsB,IAAmB,CACjC,IAAI5/F,EAAO,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAC5EkQ,EAAO,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAC5E2vF,EAAU7/F,EAAK,OACf8/F,EAAU5vF,EAAK,OACnB,GAAI,KAAK,IAAI2vF,EAAUC,CAAO,IAAM,EAClC,MAAO,CACL,IAAK,GACL,IAAK,IACP,EAEF,SAASC,EAAKC,EAASC,EAAQ,CAC7B,IAAIniE,EAAQ,IAAI,IAChBkiE,EAAQ,QAAQ,SAAUlgH,EAAK,CAC7Bg+C,EAAM,IAAIh+C,EAAK,EAAI,CACrB,CAAC,EACD,IAAI+c,EAAOojG,EAAO,OAAO,SAAUngH,EAAK,CACtC,MAAO,CAACg+C,EAAM,IAAIh+C,CAAG,CACvB,CAAC,EACD,OAAO+c,EAAK,SAAW,EAAIA,EAAK,CAAC,EAAI,IACvC,CACA,OAAIgjG,EAAUC,EACL,CACL,IAAK,GACL,IAAKC,EAAK//F,EAAMkQ,CAAI,CACtB,EAEK,CACL,IAAK,GACL,IAAK6vF,EAAK7vF,EAAMlQ,CAAI,CACtB,CACF,CACO,SAASkgG,GAAeF,EAASC,EAAQngH,EAAK,CACnD,IAAIqgH,EAAoBH,EAAQ,UAAU,SAAUt+G,EAAM,CACxD,OAAOA,EAAK,MAAQ5B,CACtB,CAAC,EACGsgH,EAAiBJ,EAAQG,EAAoB,CAAC,EAC9CE,EAAmBJ,EAAO,UAAU,SAAUv+G,EAAM,CACtD,OAAOA,EAAK,MAAQ5B,CACtB,CAAC,EACD,GAAIsgH,EAAgB,CAClB,IAAIE,EAAiBL,EAAO,UAAU,SAAUv+G,EAAM,CACpD,OAAOA,EAAK,MAAQ0+G,EAAe,GACrC,CAAC,EACD,OAAOH,EAAO,MAAMI,EAAmB,EAAGC,CAAc,CAC1D,CACA,OAAOL,EAAO,MAAMI,EAAmB,CAAC,CAC1C,CC3CA,IAAI,GAAY,CAAC,YAAa,OAAQ,aAAc,YAAa,eAAgB,eAAgB,cAAe,aAAc,cAAe,kBAAmB,cAAe,WAAY,WAAY,kBAAmB,eAAgB,SAAU,SAAU,aAAc,UAAW,cAAe,YAAa,aAAc,UAAW,WAAY,YAAa,UAAW,SAAU,iBAAkB,oBAAqB,iBAAiB,EAW9aE,GAAe,CACjB,MAAO,EACP,OAAQ,EACR,QAAS,OACT,SAAU,SACV,QAAS,EACT,OAAQ,EACR,QAAS,EACT,OAAQ,CACV,EACIC,GAAO,UAAgB,CAAC,EACjBC,GAAa,kBAAkB,OAAO,KAAK,OAAO,CAAC,EAC1DC,GAAa,CACf,IAAKD,EACP,EACWE,GAAe,CACxB,IAAKF,GACL,MAAO,EACP,MAAO,EACP,IAAK,IACL,KAAMC,GACN,MAAO,CAACA,EAAU,CACpB,EACIE,GAAoB,CACtB,OAAQ,KACR,SAAU,CAAC,EACX,IAAKD,GAAa,IAClB,KAAMD,GACN,MAAO,KACP,IAAKD,GAEL,QAAS,CAAC,EACV,MAAO,CAAC,CACV,EAIO,SAASI,GAA+B9nF,EAAMmsD,EAASj6E,EAAQ61G,EAAY,CAChF,OAAI57B,IAAY,IAAS,CAACj6E,EACjB8tB,EAEFA,EAAK,MAAM,EAAG,KAAK,KAAK9tB,EAAS61G,CAAU,EAAI,CAAC,CACzD,CACA,SAASC,GAAQp2G,EAAM,CACrB,IAAI7K,EAAM6K,EAAK,IACb4M,EAAM5M,EAAK,IACb,SAAO,OAAO7K,EAAKyX,CAAG,CACxB,CACA,SAASypG,GAAqBr2G,EAAM,CAGlC,QAFIpD,EAAO,OAAOoD,EAAK,KAAK,GAAG,EAC3ByF,EAAUzF,EACPyF,EAAQ,QACbA,EAAUA,EAAQ,OAClB7I,EAAO,GAAG,OAAO6I,EAAQ,KAAK,IAAK,KAAK,EAAE,OAAO7I,CAAI,EAEvD,OAAOA,CACT,CACA,IAAI05G,GAAwB,aAAiB,SAAUv7G,EAAOi2B,EAAK,CACjE,IAAIw9E,EAAYzzG,EAAM,UACpBhE,EAAOgE,EAAM,KACb80G,EAAa90G,EAAM,WACnBw7G,EAAYx7G,EAAM,UAClBy7G,EAAez7G,EAAM,aACrB07G,EAAe17G,EAAM,aACrB27G,EAAc37G,EAAM,YACpB47G,EAAa57G,EAAM,WACnB67G,EAAc77G,EAAM,YACpB87G,EAAkB97G,EAAM,gBACxB+7G,EAAc/7G,EAAM,YACpBg8G,EAAWh8G,EAAM,SACjBo4G,EAAWp4G,EAAM,SACjBi8G,EAAkBj8G,EAAM,gBACxB4yG,EAAe5yG,EAAM,aACrB84G,EAAS94G,EAAM,OACfuF,EAASvF,EAAM,OACfo7G,EAAap7G,EAAM,WACnBw/E,EAAUx/E,EAAM,QAChBqvB,EAAcrvB,EAAM,YACpBk8G,EAAYl8G,EAAM,UAClBm8G,EAAan8G,EAAM,WACnBo8G,EAAUp8G,EAAM,QAChBq8G,EAAWr8G,EAAM,SACjBgE,EAAYhE,EAAM,UAClBs8G,EAAUt8G,EAAM,QAChBu8G,EAASv8G,EAAM,OACfw8G,EAAiBx8G,EAAM,eACvBy8G,EAAoBz8G,EAAM,kBAC1B08G,EAAkB18G,EAAM,gBACxB28G,KAAW,MAAyB38G,EAAO,EAAS,EAGlD48G,EAAU,SAAa,IAAI,EAC3BC,EAAoB,SAAa,IAAI,EACzC,sBAA0B5mF,EAAK,UAAY,CACzC,MAAO,CACL,SAAU,SAAkB6mF,GAAQ,CAClCF,EAAQ,QAAQ,SAASE,EAAM,CACjC,EACA,eAAgB,UAA0B,CACxC,OAAOD,EAAkB,QAAQ,WACnC,CACF,CACF,CAAC,EAGD,IAAI5H,EAAkB,WAAewG,CAAY,EAC/CvG,EAAmB7B,GAAe4B,EAAiB,CAAC,EACpD8H,EAAmB7H,EAAiB,CAAC,EACrC8H,EAAsB9H,EAAiB,CAAC,EACtC+H,EAAmB,WAAejhH,CAAI,EACxCkhH,EAAmB7J,GAAe4J,EAAkB,CAAC,EACrDE,EAAWD,EAAiB,CAAC,EAC7BE,EAAcF,EAAiB,CAAC,EAC9BG,GAAmB,WAAerhH,CAAI,EACxCshH,GAAmBjK,GAAegK,GAAkB,CAAC,EACrDE,GAAiBD,GAAiB,CAAC,EACnCE,GAAoBF,GAAiB,CAAC,EACpCG,EAAmB,WAAe,CAAC,CAAC,EACtCC,GAAmBrK,GAAeoK,EAAkB,CAAC,EACrDE,GAAkBD,GAAiB,CAAC,EACpCE,GAAqBF,GAAiB,CAAC,EACrCG,GAAmB,WAAe,IAAI,EACxCC,GAAoBzK,GAAewK,GAAkB,CAAC,EACtD7E,GAAa8E,GAAkB,CAAC,EAChCC,GAAgBD,GAAkB,CAAC,EAGjCE,GAAU,SAAahiH,CAAI,EAC/BgiH,GAAQ,QAAUhiH,EAClB,SAASiiH,IAAc,CACrB,IAAIC,GAAaF,GAAQ,QACzBZ,EAAYc,EAAU,EACtBV,GAAkBU,EAAU,EAC5BN,GAAmB,CAAC,CAAC,EACrBG,GAAc,IAAI,EAClBrB,EAAgB,CAClB,IAIA/D,GAAA,GAAgB,UAAY,CAC1BqE,EAAoBvB,CAAY,EAChC,IAAI0C,GAAejE,GAAiB6C,EAAkBtB,CAAY,EAClE,GAAI0C,GAAa,MAAQ,KACvB,GAAIA,GAAa,IAAK,CACpB,IAAI1yC,GAAW0xC,EAAS,UAAU,SAAU3J,GAAM,CAChD,IAAIp5G,GAAMo5G,GAAK,IACf,OAAOp5G,KAAQ+jH,GAAa,GAC9B,CAAC,EACGC,GAAajD,GAA+BX,GAAe2C,EAAUnhH,EAAMmiH,GAAa,GAAG,EAAG3+B,EAASj6E,EAAQ61G,CAAU,EACzHiD,GAAoBlB,EAAS,MAAM,EACvCkB,GAAkB,OAAO5yC,GAAW,EAAG,EAAGyvC,EAAiB,EAC3DsC,GAAkBa,EAAiB,EACnCT,GAAmBQ,EAAU,EAC7BL,GAAc,MAAM,CACtB,KAAO,CACL,IAAIO,GAAYtiH,EAAK,UAAU,SAAUi8G,GAAO,CAC9C,IAAI79G,GAAM69G,GAAM,IAChB,OAAO79G,KAAQ+jH,GAAa,GAC9B,CAAC,EACGI,GAAcpD,GAA+BX,GAAex+G,EAAMmhH,EAAUgB,GAAa,GAAG,EAAG3+B,EAASj6E,EAAQ61G,CAAU,EAC1HoD,GAAqBxiH,EAAK,MAAM,EACpCwiH,GAAmB,OAAOF,GAAY,EAAG,EAAGpD,EAAiB,EAC7DsC,GAAkBgB,EAAkB,EACpCZ,GAAmBW,EAAW,EAC9BR,GAAc,MAAM,CACtB,MACSZ,IAAanhH,IAEtBohH,EAAYphH,CAAI,EAChBwhH,GAAkBxhH,CAAI,EAE1B,EAAG,CAACy/G,EAAcz/G,CAAI,CAAC,EAGvB,YAAgB,UAAY,CACrBo8G,GACH6F,GAAY,CAEhB,EAAG,CAAC7F,CAAQ,CAAC,EACb,IAAIqG,GAAa3F,EAASyE,GAAiBvhH,EACvCm9G,GAAwB,CAC1B,aAAcsC,EACd,aAAcC,EACd,WAAYE,EACZ,YAAaC,EACb,YAAaF,EACb,gBAAiBG,EACjB,gBAAiBG,EACjB,aAAcrJ,EACd,YAAamJ,CACf,EACA,OAAoB,gBAAoB,WAAgB,KAAMK,GAAWD,GAA2B,gBAAoB,OAAQ,CAC9H,MAAOtB,GACP,YAAa,WACf,EAAGS,GAAqBa,CAAU,CAAC,EAAgB,gBAAoB,MAAO,KAAmB,gBAAoB,QAAS,CAC5H,MAAOtB,GACP,SAAUqB,IAAc,IAASF,EACjC,SAAUE,IAAc,GAAQG,EAAW,KAC3C,UAAWr4G,EACX,QAASs4G,EACT,OAAQC,EACR,MAAO,GACP,SAAUzB,GACV,aAAc,mBAChB,CAAC,CAAC,EAAgB,gBAAoB,MAAO,CAC3C,UAAW,GAAG,OAAOrH,EAAW,WAAW,EAC3C,cAAe,GACf,MAAO,CACL,SAAU,WACV,cAAe,OACf,WAAY,SACZ,OAAQ,EACR,SAAU,SACV,OAAQ,EACR,QAAS,CACX,CACF,EAAgB,gBAAoB,MAAO,CACzC,UAAW,GAAG,OAAOA,EAAW,SAAS,CAC3C,EAAgB,gBAAoB,MAAO,CACzC,IAAKoJ,EACL,UAAW,GAAG,OAAOpJ,EAAW,cAAc,CAChD,CAAC,CAAC,CAAC,EAAgB,gBAAoB,KAAa,GAAS,CAAC,EAAGkJ,EAAU,CACzE,KAAM8B,GACN,QAASpD,GACT,OAAQ91G,EACR,WAAY,GACZ,QAASi6E,EACT,WAAY47B,EACZ,YAAa/rF,EACb,UAAW,GAAG,OAAOokF,EAAW,OAAO,EACvC,IAAKmJ,EACL,KAAM,OACN,gBAAiB,SAAyB8B,GAAY,CAKhDA,GAAW,MAAM,SAAUz5G,GAAM,CACnC,OAAOo2G,GAAQp2G,EAAI,IAAM81G,EAC3B,CAAC,GACCkD,GAAY,CAEhB,CACF,CAAC,EAAG,SAAUlE,GAAU,CACtB,IAAIloG,GAAMkoG,GAAS,IACjBC,GAAY,OAAO,OAAO,CAAC,GAAIjH,GAA0BgH,GAAS,IAAI,EAAGA,GAAS,KAAK,EACvFrC,GAAQqC,GAAS,MACjB3/G,GAAM2/G,GAAS,IACfphE,GAAUohE,GAAS,QACnB3kE,GAAQ2kE,GAAS,MACf4E,MAAY,OAAOvkH,GAAKyX,EAAG,EAC/B,OAAOmoG,GAAU,IACjB,OAAOA,GAAU,SACjB,IAAIC,MAAgB,OAAiB0E,GAAWxF,EAAqB,EACrE,OAAoB,gBAAoB,GAAgB,GAAS,CAAC,EAAGa,GAAWC,GAAe,CAC7F,MAAOvC,GACP,OAAQ,CAAC,CAACyE,GAAc/hH,KAAQ+hH,EAAW,IAC3C,IAAKtqG,GACL,KAAMkoG,GAAS,KACf,QAASphE,GACT,MAAOvD,GACP,OAAQ0jE,EACR,YAAa1+G,KAAQ2gH,GAAa4C,GAAkB,KACpD,WAAY3E,GACZ,cAAeyD,EACf,YAAawB,GACb,sBAAuB9E,GACvB,YAAa,UAAuB,CAClCqD,EAAe,IAAI,CACrB,CACF,CAAC,CAAC,CACJ,CAAC,CAAC,CACJ,CAAC,EAID,SAAejB,GChSf,IAAI,GAAY,KAWT,SAASqD,GAAOvrF,EAAM35B,EAAO,CAClC,GAAI,CAAC25B,EAAM,MAAO,CAAC,EACnB,IAAIwrF,EAAQxrF,EAAK,MAAM,EACnBznB,EAAQizG,EAAM,QAAQnlH,CAAK,EAC/B,OAAIkS,GAAS,GACXizG,EAAM,OAAOjzG,EAAO,CAAC,EAEhBizG,CACT,CACO,SAASC,GAAOzrF,EAAM35B,EAAO,CAClC,IAAImlH,GAASxrF,GAAQ,CAAC,GAAG,MAAM,EAC/B,OAAIwrF,EAAM,QAAQnlH,CAAK,IAAM,IAC3BmlH,EAAM,KAAKnlH,CAAK,EAEXmlH,CACT,CACO,SAASE,GAASltG,EAAK,CAC5B,OAAOA,EAAI,MAAM,GAAG,CACtB,CACO,SAASmtG,GAAoBC,EAAalD,EAAa,CAG5D,IAAImD,EAAmB,CAAC,EACpBC,KAAS,MAAUpD,EAAakD,CAAW,EAC/C,SAASG,GAAM,CACb,IAAI/rF,EAAO,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,CAAC,EAChFA,EAAK,QAAQ,SAAUmgF,EAAM,CAC3B,IAAIp5G,EAAMo5G,EAAK,IACbz4E,EAAWy4E,EAAK,SAClB0L,EAAiB,KAAK9kH,CAAG,EACzBglH,EAAIrkF,CAAQ,CACd,CAAC,CACH,CACA,OAAAqkF,EAAID,EAAO,QAAQ,EACZD,CACT,CACO,SAASG,GAAYC,EAAgB,CAC1C,GAAIA,EAAe,OAAQ,CACzB,IAAIC,EAASR,GAASO,EAAe,GAAG,EACxC,OAAO,OAAOC,EAAOA,EAAO,OAAS,CAAC,CAAC,IAAMD,EAAe,OAAO,SAAS,OAAS,CACvF,CACA,MAAO,EACT,CACO,SAASE,GAAaF,EAAgB,CAC3C,IAAIC,EAASR,GAASO,EAAe,GAAG,EACxC,OAAO,OAAOC,EAAOA,EAAO,OAAS,CAAC,CAAC,IAAM,CAC/C,CAGO,SAASE,GAAiBx7G,EAAOy7G,EAAeC,EAAiB7M,EAAQ8M,EAAoBC,EAAWC,EAAgB/D,EAAagE,EAAYz7E,EAAW,CACjK,IAAI07E,EACArhG,EAAU1a,EAAM,QAClB2a,EAAU3a,EAAM,QACdg8G,EAAwBh8G,EAAM,OAAO,sBAAsB,EAC7DwJ,EAAMwyG,EAAsB,IAC5B16G,EAAS06G,EAAsB,OAE7BC,GAAyB57E,IAAc,MAAQ,GAAK,KAAgFs7E,GAAmB,GAAM,GAAKjhG,GAClKwhG,GAAsBD,EAAwB,IAAMpN,EAGpDsN,EAAqBL,EAAW,OAAO,SAAU3lH,EAAK,CACxD,IAAIimH,EACJ,OAAQA,EAAmBtE,EAAY3hH,CAAG,KAAO,MAAQimH,IAAqB,SAAWA,EAAmBA,EAAiB,YAAc,MAAQA,IAAqB,OAAS,OAASA,EAAiB,MAC7M,CAAC,EAGGC,KAAyB,MAAUvE,EAAa4D,EAAgB,QAAQ,EAC5E,GAAI/gG,EAAUnR,EAAMlI,EAAS,EAAG,CAE9B,IAAIg7G,EAAYT,EAAe,UAAU,SAAUU,EAAe,CAChE,OAAOA,EAAc,MAAQF,EAAuB,GACtD,CAAC,EACGG,EAAgBF,GAAa,EAAI,EAAIA,EAAY,EACjDG,EAAcZ,EAAeW,CAAa,EAAE,IAChDH,KAAyB,MAAUvE,EAAa2E,CAAW,CAC7D,CACA,IAAIC,EAA6BL,EAAuB,IACpDM,EAAyBN,EACzBrE,EAAkBqE,EAAuB,IACzC1N,EAAe,EACfC,EAAkB,EAGtB,GAAI,CAACuN,EAAmB,SAASO,CAA0B,EACzD,QAASvvG,EAAI,EAAGA,EAAI+uG,GACdd,GAAYiB,CAAsB,EADAlvG,GAAK,EAEzCkvG,EAAyBA,EAAuB,OAChDzN,GAAmB,EAMzB,IAAIgO,EAAuBnB,EAAc,KACrCoB,EAAuBR,EAAuB,KAC9CS,EAAc,GAClB,OAAIvB,GAAac,CAAsB,GAAKA,EAAuB,QAAU,GAAK1hG,EAAUnR,EAAMlI,EAAS,GAAKs6G,EAAU,CACxH,SAAUgB,EACV,SAAUC,EACV,aAAc,EAChB,CAAC,GAAKR,EAAuB,MAAQX,EAAgB,SAEnD/M,EAAe,IACLgO,EAAuB,UAAY,CAAC,GAAG,QAAUR,EAAmB,SAASnE,CAAe,EAGlG4D,EAAU,CACZ,SAAUgB,EACV,SAAUC,EACV,aAAc,CAChB,CAAC,EACClO,EAAe,EAEfmO,EAAc,GAEPlO,IAAoB,EACzBsN,EAAqB,KAKnBN,EAAU,CACZ,SAAUgB,EACV,SAAUC,EACV,aAAc,CAChB,CAAC,EACClO,EAAe,EAEfmO,EAAc,GAUZlB,EAAU,CACZ,SAAUgB,EACV,SAAUC,EACV,aAAc,CAChB,CAAC,EACClO,EAAe,EACNiN,EAAU,CACnB,SAAUgB,EACV,SAAUC,EACV,aAAc,CAChB,CAAC,EACClO,EAAe,EAEfmO,EAAc,GASdlB,EAAU,CACZ,SAAUgB,EACV,SAAUC,EACV,aAAc,CAChB,CAAC,EACClO,EAAe,EAEfmO,EAAc,GAGX,CACL,aAAcnO,EACd,gBAAiBC,EACjB,cAAeyN,EAAuB,IACtC,cAAeA,EAAuB,IACtC,gBAAiBrE,EACjB,iBAAkBrJ,IAAiB,EAAI,OAASoN,EAAwBM,EAAuB,UAAY,MAAQN,IAA0B,OAAS,OAASA,EAAsB,MAAQ,KAC7L,YAAae,CACf,CACF,CAQO,SAASC,GAAiBtF,EAAc17G,EAAO,CACpD,GAAK07G,EACL,KAAIl1D,EAAWxmD,EAAM,SACrB,OAAIwmD,EACKk1D,EAAa,MAAM,EAExBA,EAAa,OACR,CAACA,EAAa,CAAC,CAAC,EAElBA,EACT,CACA,IAAIuF,GAAuB,SAA8BjhH,EAAO,CAC9D,OAAOA,CACT,EACO,SAASkhH,GAAkBC,EAAUC,EAAW,CACrD,GAAI,CAACD,EAAU,MAAO,CAAC,EACvB,IAAIlJ,EAAQmJ,GAAa,CAAC,EACxBC,EAAqBpJ,EAAM,aAC3BqJ,EAAeD,IAAuB,OAASJ,GAAuBI,EACpEhuF,EAAO,MAAM,QAAQ8tF,CAAQ,EAAIA,EAAW,CAACA,CAAQ,EACzD,OAAO9tF,EAAK,IAAI,SAAUkuF,EAAO,CAC/B,IAAIxmF,EAAWwmF,EAAM,SACnBvhH,EAAQ,yBAAyBuhH,EAAO,EAAS,EAC/CC,EAAgBN,GAAkBnmF,EAAUqmF,CAAS,EACzD,OAAoB,MAAM,cAAc,SAAU,SAAS,CACzD,IAAKphH,EAAM,GACb,EAAGshH,EAAathH,CAAK,CAAC,EAAGwhH,CAAa,CACxC,CAAC,CACH,CAKO,SAASC,GAAiBtqG,EAAM,CACrC,GAAI,CAACA,EACH,OAAO,KAIT,IAAIuqG,EACJ,GAAI,MAAM,QAAQvqG,CAAI,EAEpBuqG,EAAW,CACT,YAAavqG,EACb,gBAAiB,MACnB,aACS,MAAQA,CAAI,IAAM,SAC3BuqG,EAAW,CACT,YAAavqG,EAAK,SAAW,OAC7B,gBAAiBA,EAAK,aAAe,MACvC,MAEA,UAAAwqG,GAAA,IAAQ,GAAO,4CAA4C,EACpD,KAET,OAAOD,CACT,CAOO,SAASE,GAAoBC,EAAS9F,EAAa,CACxD,IAAIN,EAAe,IAAI,IACvB,SAASqG,EAAU1nH,EAAK,CACtB,GAAI,CAAAqhH,EAAa,IAAIrhH,CAAG,EACxB,KAAI+kH,KAAS,MAAUpD,EAAa3hH,CAAG,EACvC,GAAK+kH,EACL,CAAA1D,EAAa,IAAIrhH,CAAG,EACpB,IAAI8K,EAASi6G,EAAO,OAClB1pF,EAAO0pF,EAAO,KACZ1pF,EAAK,UACLvwB,GACF48G,EAAU58G,EAAO,GAAG,GAExB,CACA,OAAC28G,GAAW,CAAC,GAAG,QAAQ,SAAUznH,EAAK,CACrC0nH,EAAU1nH,CAAG,CACf,CAAC,KACM,MAAmBqhH,CAAY,CACxC,C,gBClQIsG,GAAkB,GAClBC,GAAoB,SAAUC,EAAkB,CAClD7P,GAAU4P,EAAMC,CAAgB,EAChC,IAAIliG,EAASyyF,GAAawP,CAAI,EAC9B,SAASA,GAAO,CACd,IAAIzkG,EACJu0F,GAAgB,KAAMkQ,CAAI,EAC1B,QAASE,EAAO,UAAU,OAAQC,EAAQ,IAAI,MAAMD,CAAI,EAAGE,EAAO,EAAGA,EAAOF,EAAME,IAChFD,EAAMC,CAAI,EAAI,UAAUA,CAAI,EAE9B,OAAA7kG,EAAQwC,EAAO,KAAK,MAAMA,EAAQ,CAAC,IAAI,EAAE,OAAOoiG,CAAK,CAAC,KACtD,MAAgBjQ,GAAuB30F,CAAK,EAAG,YAAa,EAAK,KACjE,MAAgB20F,GAAuB30F,CAAK,EAAG,wBAAyB,MAAM,KAC9E,MAAgB20F,GAAuB30F,CAAK,EAAG,oBAAqB,CAAC,CAAC,KACtE,MAAgB20F,GAAuB30F,CAAK,EAAG,QAAS,CACtD,YAAa,CAAC,EACd,OAAQ,KACR,aAAc,CAAC,EACf,YAAa,CAAC,EACd,gBAAiB,CAAC,EAClB,WAAY,CAAC,EACb,YAAa,CAAC,EACd,aAAc,CAAC,EACf,gBAAiB,KACjB,iBAAkB,CAAC,EAInB,cAAe,KACf,aAAc,KAEd,iBAAkB,KAElB,gBAAiB,KAEjB,cAAe,KAEf,YAAa,GAKb,gBAAiB,KACjB,SAAU,CAAC,EACX,aAAc,CAAC,EACf,QAAS,GACT,UAAW,KACX,aAAc,GACd,UAAW,KACX,cAAY,OAAe,CAC7B,CAAC,KACD,MAAgB20F,GAAuB30F,CAAK,EAAG,yBAA0B,IAAI,KAC7E,MAAgB20F,GAAuB30F,CAAK,EAAG,gBAAiB,IAAI,KACpE,MAAgB20F,GAAuB30F,CAAK,EAAG,mCAAoC,IAAI,KACvF,MAAgB20F,GAAuB30F,CAAK,EAAG,UAAwB,YAAgB,CAAC,KACxF,MAAgB20F,GAAuB30F,CAAK,EAAG,kBAAmB,SAAUtZ,EAAOo+G,EAAW,CAC5F,IAAIC,EAAc/kG,EAAM,MACtBk+F,EAAe6G,EAAY,aAC3BvG,EAAcuG,EAAY,YACxBtM,EAAcz4F,EAAM,MAAM,YAC1B42F,EAAWkO,EAAU,SACzB9kG,EAAM,cAAgB8kG,EACtB9kG,EAAM,uBAAyB,CAC7B,EAAGtZ,EAAM,QACT,EAAGA,EAAM,OACX,EACA,IAAIs+G,EAAkB3D,GAAOnD,EAActH,CAAQ,EACnD52F,EAAM,SAAS,CACb,gBAAiB42F,EACjB,iBAAkB6K,GAAoB7K,EAAU4H,CAAW,EAC3D,OAAQx+F,EAAM,QAAQ,QAAQ,eAAe,CAC/C,CAAC,EACDA,EAAM,gBAAgBglG,CAAe,EACrC,OAAO,iBAAiB,UAAWhlG,EAAM,eAAe,EACNy4F,IAAY,CAC5D,MAAO/xG,EACP,QAAM,OAA4Bo+G,CAAS,CAC7C,CAAC,CACH,CAAC,KAQD,MAAgBnQ,GAAuB30F,CAAK,EAAG,kBAAmB,SAAUtZ,EAAOo+G,EAAW,CAC5F,IAAIG,EAAejlG,EAAM,MACvBk+F,EAAe+G,EAAa,aAC5BzG,EAAcyG,EAAa,YAC3BtD,EAAmBsD,EAAa,iBAChCC,EAAeD,EAAa,aAC5B1P,EAAS0P,EAAa,OACpBE,EAAcnlG,EAAM,MACtB04F,EAAcyM,EAAY,YAC1BpM,EAAWoM,EAAY,SACvB7C,EAAY6C,EAAY,UACxBp+E,EAAYo+E,EAAY,UACtB7wG,EAAMwwG,EAAU,IAClBlO,EAAWkO,EAAU,SAMvB,GAHI9kG,EAAM,mCAAqC42F,IAC7C52F,EAAM,iCAAmC42F,GAEvC,CAAC52F,EAAM,cAAe,CACxBA,EAAM,eAAe,EACrB,MACF,CACA,IAAIolG,EAAoBlD,GAAiBx7G,EAAOsZ,EAAM,cAAe8kG,EAAWvP,EAAQv1F,EAAM,uBAAwBsiG,EAAW4C,EAAc1G,EAAaN,EAAcn3E,CAAS,EACjLsuE,EAAe+P,EAAkB,aACjC9P,EAAkB8P,EAAkB,gBACpCC,EAAgBD,EAAkB,cAClCE,EAAmBF,EAAkB,iBACrCG,EAAgBH,EAAkB,cAClC5B,EAAc4B,EAAkB,YAChC1G,EAAkB0G,EAAkB,gBACtC,GAEAzD,EAAiB,SAAS0D,CAAa,GAEvC,CAAC7B,EAAa,CACZxjG,EAAM,eAAe,EACrB,MACF,CAoCA,GAjCKA,EAAM,wBACTA,EAAM,sBAAwB,CAAC,GAEjC,OAAO,KAAKA,EAAM,qBAAqB,EAAE,QAAQ,SAAUnjB,EAAK,CAC9D,aAAamjB,EAAM,sBAAsBnjB,CAAG,CAAC,CAC/C,CAAC,EACGmjB,EAAM,cAAc,WAAa8kG,EAAU,WAK7Cp+G,EAAM,QAAQ,EACdsZ,EAAM,sBAAsB1L,CAAG,EAAI,OAAO,WAAW,UAAY,CAC/D,GAAI0L,EAAM,MAAM,kBAAoB,KAGpC,KAAIglG,KAAkB,MAAmB9G,CAAY,EACjD0D,KAAS,MAAUpD,EAAasG,EAAU,QAAQ,EAClDlD,IAAWA,EAAO,UAAY,CAAC,GAAG,SACpCoD,EAAkBzD,GAAOrD,EAAc4G,EAAU,QAAQ,GAEtD9kG,EAAM,MAAM,eAAe,cAAc,GAC5CA,EAAM,gBAAgBglG,CAAe,EAEKjM,IAASiM,EAAiB,CACpE,QAAM,OAA4BF,CAAS,EAC3C,SAAU,GACV,YAAap+G,EAAM,WACrB,CAAC,EACH,EAAG,GAAG,GAIJsZ,EAAM,cAAc,WAAaqlG,GAAiB/P,IAAoB,EAAG,CAC3Et1F,EAAM,eAAe,EACrB,MACF,CAGAA,EAAM,SAAS,CACb,gBAAiB0+F,EACjB,aAAcrJ,EACd,gBAAiBC,EACjB,cAAe+P,EACf,iBAAkBC,EAClB,cAAeC,EACf,YAAa/B,CACf,CAAC,EACiD9K,IAAY,CAC5D,MAAOhyG,EACP,QAAM,OAA4Bo+G,CAAS,EAC3C,aAAc5G,CAChB,CAAC,CACH,CAAC,KACD,MAAgBvJ,GAAuB30F,CAAK,EAAG,iBAAkB,SAAUtZ,EAAOo+G,EAAW,CAC3F,IAAIU,EAAexlG,EAAM,MACvB2hG,EAAmB6D,EAAa,iBAChCN,EAAeM,EAAa,aAC5BhH,EAAcgH,EAAa,YAC3BtH,EAAesH,EAAa,aAC5BjQ,EAASiQ,EAAa,OACpBC,EAAezlG,EAAM,MACvB24F,EAAa8M,EAAa,WAC1BnD,EAAYmD,EAAa,UACzB1+E,EAAY0+E,EAAa,UAC3B,GAAKzlG,EAAM,cAGX,KAAI0lG,EAAqBxD,GAAiBx7G,EAAOsZ,EAAM,cAAe8kG,EAAWvP,EAAQv1F,EAAM,uBAAwBsiG,EAAW4C,EAAc1G,EAAaN,EAAcn3E,CAAS,EAClLsuE,EAAeqQ,EAAmB,aAClCpQ,EAAkBoQ,EAAmB,gBACrCL,EAAgBK,EAAmB,cACnCJ,EAAmBI,EAAmB,iBACtCH,EAAgBG,EAAmB,cACnClC,EAAckC,EAAmB,YACjChH,EAAkBgH,EAAmB,gBACnC/D,EAAiB,SAAS0D,CAAa,GAAK,CAAC7B,IAQ7CxjG,EAAM,cAAc,WAAaqlG,GAAiB/P,IAAoB,EAClEt1F,EAAM,MAAM,eAAiB,MAAQA,EAAM,MAAM,kBAAoB,MAAQA,EAAM,MAAM,gBAAkB,MAAQA,EAAM,MAAM,mBAAqB,MAAQA,EAAM,MAAM,gBAAkB,MAAQA,EAAM,MAAM,cAAgB,IAASA,EAAM,MAAM,kBAAoB,MAC3QA,EAAM,eAAe,EAEZq1F,IAAiBr1F,EAAM,MAAM,cAAgBs1F,IAAoBt1F,EAAM,MAAM,iBAAmBqlG,IAAkBrlG,EAAM,MAAM,eAAiBslG,IAAqBtlG,EAAM,MAAM,kBAAoBulG,IAAkBvlG,EAAM,MAAM,eAAiBwjG,IAAgBxjG,EAAM,MAAM,aAAe0+F,IAAoB1+F,EAAM,MAAM,iBACzUA,EAAM,SAAS,CACb,aAAcq1F,EACd,gBAAiBC,EACjB,cAAe+P,EACf,iBAAkBC,EAClB,cAAeC,EACf,YAAa/B,EACb,gBAAiB9E,CACnB,CAAC,EAE6C/F,IAAW,CACzD,MAAOjyG,EACP,QAAM,OAA4Bo+G,CAAS,CAC7C,CAAC,GACH,CAAC,KACD,MAAgBnQ,GAAuB30F,CAAK,EAAG,kBAAmB,SAAUtZ,EAAOo+G,EAAW,CAGxF9kG,EAAM,mCAAqC8kG,EAAU,UAAY,CAACp+G,EAAM,cAAc,SAASA,EAAM,aAAa,IACpHsZ,EAAM,eAAe,EACrBA,EAAM,iCAAmC,MAE3C,IAAI44F,EAAc54F,EAAM,MAAM,YACoB44F,IAAY,CAC5D,MAAOlyG,EACP,QAAM,OAA4Bo+G,CAAS,CAC7C,CAAC,CACH,CAAC,KAGD,MAAgBnQ,GAAuB30F,CAAK,EAAG,kBAAmB,SAAUtZ,EAAO,CACjFsZ,EAAM,cAActZ,EAAO,KAAM,EAAI,EACrC,OAAO,oBAAoB,UAAWsZ,EAAM,eAAe,CAC7D,CAAC,KAED,MAAgB20F,GAAuB30F,CAAK,EAAG,gBAAiB,SAAUtZ,EAAOo+G,EAAW,CAC1F,IAAIjM,EAAY74F,EAAM,MAAM,UAC5BA,EAAM,SAAS,CACb,gBAAiB,IACnB,CAAC,EACDA,EAAM,eAAe,EACyB64F,IAAU,CACtD,MAAOnyG,EACP,QAAM,OAA4Bo+G,CAAS,CAC7C,CAAC,EACD9kG,EAAM,cAAgB,KACtB,OAAO,oBAAoB,UAAWA,EAAM,eAAe,CAC7D,CAAC,KACD,MAAgB20F,GAAuB30F,CAAK,EAAG,aAAc,SAAUtZ,EAAO6V,EAAG,CAC/E,IAAIopG,EACAC,EAAc,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAClFC,EAAe7lG,EAAM,MACvB2hG,EAAmBkE,EAAa,iBAChCxQ,EAAewQ,EAAa,aAC5BR,EAAgBQ,EAAa,cAC7BN,EAAgBM,EAAa,cAC7BrC,EAAcqC,EAAa,YAC7B,GAAKrC,EAGL,KAAI1K,EAAS94F,EAAM,MAAM,OAKzB,GAJAA,EAAM,SAAS,CACb,gBAAiB,IACnB,CAAC,EACDA,EAAM,eAAe,EACjBqlG,IAAkB,KACtB,KAAIS,KAAwB,SAAc,MAAc,CAAC,KAAG,OAAiBT,EAAerlG,EAAM,yBAAyB,CAAC,CAAC,EAAG,CAAC,EAAG,CAClI,SAAU2lG,EAAsB3lG,EAAM,cAAc,KAAO,MAAQ2lG,IAAwB,OAAS,OAASA,EAAoB,OAASN,EAC1I,QAAM,MAAUrlG,EAAM,MAAM,YAAaqlG,CAAa,EAAE,IAC1D,CAAC,EACGU,EAAcpE,EAAiB,SAAS0D,CAAa,KACzDjB,GAAA,IAAQ,CAAC2B,EAAa,6FAA6F,EACnH,IAAI/D,EAASR,GAAS+D,CAAa,EAC/BS,EAAa,CACf,MAAOt/G,EACP,QAAM,OAA4Bo/G,CAAqB,EACvD,SAAU9lG,EAAM,iBAAgB,OAA4BA,EAAM,aAAa,EAAI,KACnF,cAAe,CAACA,EAAM,cAAc,QAAQ,EAAE,OAAO2hG,CAAgB,EACrE,UAAWtM,IAAiB,EAC5B,aAAcA,EAAe,OAAO2M,EAAOA,EAAO,OAAS,CAAC,CAAC,CAC/D,EACK4D,GACqC9M,IAAOkN,CAAU,EAE3DhmG,EAAM,cAAgB,MACxB,CAAC,KACD,MAAgB20F,GAAuB30F,CAAK,EAAG,iBAAkB,UAAY,CAC3E,IAAIimG,EAAkBjmG,EAAM,MAAM,gBAC9BimG,IAAoB,MACtBjmG,EAAM,SAAS,CACb,gBAAiB,KACjB,aAAc,KACd,iBAAkB,KAClB,cAAe,KACf,gBAAiB,KACjB,YAAa,GACb,gBAAiB,IACnB,CAAC,EAEHA,EAAM,uBAAyB,KAC/BA,EAAM,iCAAmC,IAC3C,CAAC,KACD,MAAgB20F,GAAuB30F,CAAK,EAAG,4BAA6B,SAAU9iB,EAAGs/G,EAAU,CACjG,IAAI0J,EAAelmG,EAAM,MACvBk+F,EAAegI,EAAa,aAC5BhB,EAAegB,EAAa,aAC1BjP,EAAWuF,EAAS,SACtB3/G,EAAM2/G,EAAS,IACfxF,EAASwF,EAAS,OACpB,GAAI,EAAAxF,GAAU95G,EAAE,UAAYA,EAAE,SAAWA,EAAE,SAG3C,KAAIg7B,EAAOgtF,EAAa,OAAO,SAAUiB,EAAU,CACjD,OAAOA,EAAS,MAAQtpH,CAC1B,CAAC,EAAE,CAAC,EACAupH,KAAY,UAA4B,SAAc,MAAc,CAAC,KAAG,OAAiBvpH,EAAKmjB,EAAM,yBAAyB,CAAC,CAAC,EAAG,CAAC,EAAG,CACxI,KAAMkY,EAAK,IACb,CAAC,CAAC,EACFlY,EAAM,gBAAgBi3F,EAAWoK,GAAOnD,EAAcrhH,CAAG,EAAI0kH,GAAOrD,EAAcrhH,CAAG,CAAC,EACtFmjB,EAAM,aAAa9iB,EAAGkpH,CAAS,EACjC,CAAC,KACD,MAAgBzR,GAAuB30F,CAAK,EAAG,cAAe,SAAU9iB,EAAGs/G,EAAU,CACnF,IAAI6J,EAAermG,EAAM,MACvBre,EAAU0kH,EAAa,QACvBC,EAAeD,EAAa,aAC1BC,IAAiB,SACnBtmG,EAAM,0BAA0B9iB,EAAGs/G,CAAQ,EAEH76G,IAAQzE,EAAGs/G,CAAQ,CAC/D,CAAC,KACD,MAAgB7H,GAAuB30F,CAAK,EAAG,oBAAqB,SAAU9iB,EAAGs/G,EAAU,CACzF,IAAI+J,EAAevmG,EAAM,MACvBwmG,EAAgBD,EAAa,cAC7BD,EAAeC,EAAa,aAC1BD,IAAiB,eACnBtmG,EAAM,0BAA0B9iB,EAAGs/G,CAAQ,EAESgK,IAActpH,EAAGs/G,CAAQ,CACjF,CAAC,KACD,MAAgB7H,GAAuB30F,CAAK,EAAG,eAAgB,SAAU9iB,EAAGs/G,EAAU,CACpF,IAAI2B,EAAen+F,EAAM,MAAM,aAC3BymG,EAAezmG,EAAM,MACvBw+F,EAAciI,EAAa,YAC3BvhH,EAAauhH,EAAa,WACxBC,EAAe1mG,EAAM,MACvBg4F,EAAW0O,EAAa,SACxBz9D,EAAWy9D,EAAa,SACtBxP,EAAWsF,EAAS,SACpB3/G,EAAM2/G,EAASt3G,EAAW,GAAG,EAC7ByhH,EAAiB,CAACzP,EAGjByP,EAEO19D,EAGVk1D,EAAeoD,GAAOpD,EAActhH,CAAG,EAFvCshH,EAAe,CAACthH,CAAG,EAFnBshH,EAAekD,GAAOlD,EAActhH,CAAG,EAQzC,IAAI+pH,EAAgBzI,EAAa,IAAI,SAAU0I,EAAa,CAC1D,IAAIjF,KAAS,MAAUpD,EAAaqI,CAAW,EAC/C,OAAOjF,EAASA,EAAO,KAAO,IAChC,CAAC,EAAE,OAAO,OAAO,EACjB5hG,EAAM,qBAAqB,CACzB,aAAcm+F,CAChB,CAAC,EAC2CnG,IAASmG,EAAc,CACjE,MAAO,SACP,SAAUwI,EACV,KAAMnK,EACN,cAAeoK,EACf,YAAa1pH,EAAE,WACjB,CAAC,CACH,CAAC,KACD,MAAgBy3G,GAAuB30F,CAAK,EAAG,cAAe,SAAU9iB,EAAGs/G,EAAU5rB,EAAS,CAC5F,IAAIk2B,EAAe9mG,EAAM,MACvBw+F,EAAcsI,EAAa,YAC3BC,EAAiBD,EAAa,YAC9BE,EAAqBF,EAAa,gBAChCG,EAAejnG,EAAM,MACvBknG,EAAgBD,EAAa,cAC7BhP,EAAUgP,EAAa,QACrBpqH,EAAM2/G,EAAS,IAGf2K,EACAC,EAAW,CACb,MAAO,QACP,KAAM5K,EACN,QAAS5rB,EACT,YAAa1zF,EAAE,WACjB,EACA,GAAIgqH,EAAe,CACjB,IAAI9I,EAAcxtB,EAAU2wB,GAAOwF,EAAgBlqH,CAAG,EAAIwkH,GAAO0F,EAAgBlqH,CAAG,EAChF0hH,EAAkB8C,GAAO2F,EAAoBnqH,CAAG,EACpDsqH,EAAa,CACX,QAAS/I,EACT,YAAaG,CACf,EACA6I,EAAS,aAAehJ,EAAY,IAAI,SAAUiJ,EAAY,CAC5D,SAAO,MAAU7I,EAAa6I,CAAU,CAC1C,CAAC,EAAE,OAAO,OAAO,EAAE,IAAI,SAAUzF,EAAQ,CACvC,OAAOA,EAAO,IAChB,CAAC,EACD5hG,EAAM,qBAAqB,CACzB,YAAao+F,CACf,CAAC,CACH,KAAO,CAEL,IAAIkJ,KAAgB,MAAa,CAAC,EAAE,UAAO,MAAmBP,CAAc,EAAG,CAAClqH,CAAG,CAAC,EAAG,GAAM2hH,CAAW,EACtG+I,EAAeD,EAAc,YAC7BE,EAAmBF,EAAc,gBAGnC,GAAI,CAAC12B,EAAS,CACZ,IAAI62B,EAAS,IAAI,IAAIF,CAAY,EACjCE,EAAO,OAAO5qH,CAAG,EACjB,IAAI6qH,KAAiB,MAAa,MAAM,KAAKD,CAAM,EAAG,CACpD,QAAS,GACT,gBAAiBD,CACnB,EAAGhJ,CAAW,EACd+I,EAAeG,EAAe,YAC9BF,EAAmBE,EAAe,eACpC,CACAP,EAAaI,EAGbH,EAAS,aAAe,CAAC,EACzBA,EAAS,sBAAwB,CAAC,EAClCA,EAAS,gBAAkBI,EAC3BD,EAAa,QAAQ,SAAUF,EAAY,CACzC,IAAIzF,KAAS,MAAUpD,EAAa6I,CAAU,EAC9C,GAAKzF,EACL,KAAI1pF,EAAO0pF,EAAO,KAChBttG,EAAMstG,EAAO,IACfwF,EAAS,aAAa,KAAKlvF,CAAI,EAC/BkvF,EAAS,sBAAsB,KAAK,CAClC,KAAMlvF,EACN,IAAK5jB,CACP,CAAC,EACH,CAAC,EACD0L,EAAM,qBAAqB,CACzB,YAAaunG,CACf,EAAG,GAAO,CACR,gBAAiBC,CACnB,CAAC,CACH,CAC0CvP,IAAQkP,EAAYC,CAAQ,CACxE,CAAC,KACD,MAAgBzS,GAAuB30F,CAAK,EAAG,aAAc,SAAUw8F,EAAU,CAC/E,IAAImL,EACA9qH,EAAM2/G,EAAS,IACfgC,EAAcx+F,EAAM,MAAM,YAG1B4hG,KAAS,MAAUpD,EAAa3hH,CAAG,EACvC,GAAI,EAAA+kH,GAAW,OAA8B+F,EAAmB/F,EAAO,YAAc,MAAQ+F,IAAqB,QAAUA,EAAiB,QAG7I,KAAIC,EAAc,IAAI,QAAQ,SAAU3nG,EAAS4nG,EAAQ,CAEvD7nG,EAAM,SAAS,SAAUi2F,EAAM,CAC7B,IAAI6R,EAAkB7R,EAAK,WACzBoI,EAAayJ,IAAoB,OAAS,CAAC,EAAIA,EAC/CC,EAAmB9R,EAAK,YACxBqI,EAAcyJ,IAAqB,OAAS,CAAC,EAAIA,EAC/CC,EAAehoG,EAAM,MACvBioG,EAAWD,EAAa,SACxBE,EAASF,EAAa,OACxB,GAAI,CAACC,GAAY5J,EAAW,SAASxhH,CAAG,GAAKyhH,EAAY,SAASzhH,CAAG,EACnE,OAAO,KAIT,IAAIsrH,EAAUF,EAASzL,CAAQ,EAC/B,OAAA2L,EAAQ,KAAK,UAAY,CACvB,IAAIC,EAAoBpoG,EAAM,MAAM,WAChCqoG,EAAgB9G,GAAO6G,EAAmBvrH,CAAG,EAITqrH,IAAOG,EAAe,CAC5D,MAAO,OACP,KAAM7L,CACR,CAAC,EACDx8F,EAAM,qBAAqB,CACzB,WAAYqoG,CACd,CAAC,EACDroG,EAAM,SAAS,SAAUoa,EAAW,CAClC,MAAO,CACL,YAAainF,GAAOjnF,EAAU,YAAav9B,CAAG,CAChD,CACF,CAAC,EACDojB,EAAQ,CACV,CAAC,EAAE,MAAM,SAAU/iB,EAAG,CASpB,GARA8iB,EAAM,SAAS,SAAUoa,EAAW,CAClC,MAAO,CACL,YAAainF,GAAOjnF,EAAU,YAAav9B,CAAG,CAChD,CACF,CAAC,EAGDmjB,EAAM,kBAAkBnjB,CAAG,GAAKmjB,EAAM,kBAAkBnjB,CAAG,GAAK,GAAK,EACjEmjB,EAAM,kBAAkBnjB,CAAG,GAAK2nH,GAAiB,CACnD,IAAI4D,EAAoBpoG,EAAM,MAAM,cACpCokG,GAAA,IAAQ,GAAO,kEAAkE,EACjFpkG,EAAM,qBAAqB,CACzB,WAAYuhG,GAAO6G,EAAmBvrH,CAAG,CAC3C,CAAC,EACDojB,EAAQ,CACV,CACA4nG,EAAO3qH,CAAC,CACV,CAAC,EACM,CACL,YAAaqkH,GAAOjD,EAAazhH,CAAG,CACtC,CACF,CAAC,CACH,CAAC,EAGD,OAAA+qH,EAAY,MAAM,UAAY,CAAC,CAAC,EACzBA,EACT,CAAC,KACD,MAAgBjT,GAAuB30F,CAAK,EAAG,mBAAoB,SAAUtZ,EAAOwxB,EAAM,CACxF,IAAImgF,EAAer4F,EAAM,MAAM,aACqBq4F,IAAa,CAC/D,MAAO3xG,EACP,KAAMwxB,CACR,CAAC,CACH,CAAC,KACD,MAAgBy8E,GAAuB30F,CAAK,EAAG,mBAAoB,SAAUtZ,EAAOwxB,EAAM,CACxF,IAAIogF,EAAet4F,EAAM,MAAM,aACqBs4F,IAAa,CAC/D,MAAO5xG,EACP,KAAMwxB,CACR,CAAC,CACH,CAAC,KACD,MAAgBy8E,GAAuB30F,CAAK,EAAG,oBAAqB,SAAUtZ,EAAOwxB,EAAM,CACzF,IAAIowF,EAAetoG,EAAM,MAAM,aAC3BsoG,IACF5hH,EAAM,eAAe,EACrB4hH,EAAa,CACX,MAAO5hH,EACP,KAAMwxB,CACR,CAAC,EAEL,CAAC,KACD,MAAgBy8E,GAAuB30F,CAAK,EAAG,UAAW,UAAY,CACpE,IAAI++F,EAAU/+F,EAAM,MAAM,QAC1BA,EAAM,SAAS,CACb,QAAS,EACX,CAAC,EACD,QAASuoG,EAAQ,UAAU,OAAQ3rG,EAAO,IAAI,MAAM2rG,CAAK,EAAGC,EAAQ,EAAGA,EAAQD,EAAOC,IACpF5rG,EAAK4rG,CAAK,EAAI,UAAUA,CAAK,EAEWzJ,GAAQ,MAAM,OAAQniG,CAAI,CACtE,CAAC,KACD,MAAgB+3F,GAAuB30F,CAAK,EAAG,SAAU,UAAY,CACnE,IAAIg/F,EAASh/F,EAAM,MAAM,OACzBA,EAAM,SAAS,CACb,QAAS,EACX,CAAC,EACDA,EAAM,eAAe,IAAI,EACzB,QAASyoG,EAAQ,UAAU,OAAQ7rG,EAAO,IAAI,MAAM6rG,CAAK,EAAGC,EAAQ,EAAGA,EAAQD,EAAOC,IACpF9rG,EAAK8rG,CAAK,EAAI,UAAUA,CAAK,EAES1J,GAAO,MAAM,OAAQpiG,CAAI,CACnE,CAAC,KACD,MAAgB+3F,GAAuB30F,CAAK,EAAG,2BAA4B,UAAY,CACrF,IAAI2oG,EAAe3oG,EAAM,MACvBk+F,EAAeyK,EAAa,aAC5BxK,EAAewK,EAAa,aAC5BtK,EAAasK,EAAa,WAC1BrK,EAAcqK,EAAa,YAC3BvK,EAAcuK,EAAa,YAC3BpK,EAAkBoK,EAAa,gBAC/BjK,EAAkBiK,EAAa,gBAC/BtT,EAAesT,EAAa,aAC5BnK,EAAcmK,EAAa,YAC7B,MAAO,CACL,aAAczK,GAAgB,CAAC,EAC/B,aAAcC,GAAgB,CAAC,EAC/B,WAAYE,GAAc,CAAC,EAC3B,YAAaC,GAAe,CAAC,EAC7B,YAAaF,GAAe,CAAC,EAC7B,gBAAiBG,GAAmB,CAAC,EACrC,gBAAiBG,EACjB,aAAcrJ,EACd,YAAamJ,CACf,CACF,CAAC,KAGD,MAAgB7J,GAAuB30F,CAAK,EAAG,kBAAmB,SAAUk+F,EAAc,CACxF,IAAI0K,EAAe5oG,EAAM,MACvB4jG,EAAWgF,EAAa,SACxB1jH,EAAa0jH,EAAa,WACxB1D,KAAe,OAAgBtB,EAAU1F,EAAch5G,CAAU,EACrE8a,EAAM,qBAAqB,CACzB,aAAck+F,EACd,aAAcgH,CAChB,EAAG,EAAI,CACT,CAAC,KACD,MAAgBvQ,GAAuB30F,CAAK,EAAG,eAAgB,SAAU9iB,EAAGs/G,EAAU,CACpF,IAAI0B,EAAel+F,EAAM,MAAM,aAC3B6oG,EAAgB7oG,EAAM,MACxB8oG,EAAeD,EAAc,aAC7B3jH,EAAa2jH,EAAc,WACzBE,EAAe/oG,EAAM,MACvB+4F,EAAWgQ,EAAa,SACxBd,EAAWc,EAAa,SACtB9R,EAAWuF,EAAS,SACpB3/G,EAAM2/G,EAASt3G,EAAW,GAAG,EAGjC,GAAI,CAAA4jH,EAKJ,KAAIE,EAAU9K,EAAa,SAASrhH,CAAG,EACnCosH,EAAiB,CAAChS,EAWtB,MAVAmN,GAAA,IAAQnN,GAAY+R,GAAW,CAAC/R,GAAY,CAAC+R,EAAS,wCAAwC,EAC9F9K,EAAe+K,EAAiB1H,GAAOrD,EAAcrhH,CAAG,EAAIwkH,GAAOnD,EAAcrhH,CAAG,EACpFmjB,EAAM,gBAAgBk+F,CAAY,EACUnF,IAASmF,EAAc,CACjE,KAAM1B,EACN,SAAUyM,EACV,YAAa/rH,EAAE,WACjB,CAAC,EAGG+rH,GAAkBhB,EAAU,CAC9B,IAAIL,EAAc5nG,EAAM,WAAWw8F,CAAQ,EACvCoL,GACFA,EAAY,KAAK,UAAY,CAE3B,IAAIsB,KAAqB,OAAgBlpG,EAAM,MAAM,SAAUk+F,EAAch5G,CAAU,EACvF8a,EAAM,qBAAqB,CACzB,aAAckpG,CAChB,CAAC,CACH,CAAC,EAAE,MAAM,UAAY,CACnB,IAAIC,EAAsBnpG,EAAM,MAAM,aAClCopG,EAAwB/H,GAAO8H,EAAqBtsH,CAAG,EAC3DmjB,EAAM,gBAAgBopG,CAAqB,CAC7C,CAAC,CAEL,EACF,CAAC,KACD,MAAgBzU,GAAuB30F,CAAK,EAAG,oBAAqB,UAAY,CAC9EA,EAAM,qBAAqB,CACzB,aAAc,EAChB,CAAC,CACH,CAAC,KACD,MAAgB20F,GAAuB30F,CAAK,EAAG,kBAAmB,UAAY,CAC5E,WAAW,UAAY,CACrBA,EAAM,qBAAqB,CACzB,aAAc,EAChB,CAAC,CACH,CAAC,CACH,CAAC,KAED,MAAgB20F,GAAuB30F,CAAK,EAAG,iBAAkB,SAAUqpG,EAAc,CACvF,IAAIC,EAAYtpG,EAAM,MAAM,UACxBupG,EAAevpG,EAAM,MACvBi/F,EAAiBsK,EAAa,eAC9BC,EAAwBD,EAAa,iBACrCE,EAAmBD,IAA0B,OAAS,EAAIA,EACxDF,IAAcD,IAGlBrpG,EAAM,SAAS,CACb,UAAWqpG,CACb,CAAC,EACGA,IAAiB,MACnBrpG,EAAM,SAAS,CACb,IAAKqpG,EACL,OAAQI,CACV,CAAC,EAEqDxK,IAAeoK,CAAY,EACrF,CAAC,KACD,MAAgB1U,GAAuB30F,CAAK,EAAG,gBAAiB,UAAY,CAC1E,IAAI0pG,EAAgB1pG,EAAM,MACxBspG,EAAYI,EAAc,UAC1BxE,EAAewE,EAAc,aAC/B,OAAIJ,IAAc,KACT,KAEFpE,EAAa,KAAK,SAAUxK,EAAO,CACxC,IAAI79G,EAAM69G,EAAM,IAChB,OAAO79G,IAAQysH,CACjB,CAAC,GAAK,IACR,CAAC,KACD,MAAgB3U,GAAuB30F,CAAK,EAAG,kBAAmB,SAAU4vB,EAAQ,CAClF,IAAI+5E,EAAgB3pG,EAAM,MACxBklG,EAAeyE,EAAc,aAC7BL,EAAYK,EAAc,UACxBt7G,EAAQ62G,EAAa,UAAU,SAAUlB,EAAO,CAClD,IAAInnH,EAAMmnH,EAAM,IAChB,OAAOnnH,IAAQysH,CACjB,CAAC,EAGGj7G,IAAU,IAAMuhC,EAAS,IAC3BvhC,EAAQ62G,EAAa,QAEvB72G,GAASA,EAAQuhC,EAASs1E,EAAa,QAAUA,EAAa,OAC9D,IAAIx9G,EAAOw9G,EAAa72G,CAAK,EAC7B,GAAI3G,EAAM,CACR,IAAIkiH,EAAQliH,EAAK,IACjBsY,EAAM,eAAe4pG,CAAK,CAC5B,MACE5pG,EAAM,eAAe,IAAI,CAE7B,CAAC,KACD,MAAgB20F,GAAuB30F,CAAK,EAAG,YAAa,SAAUtZ,EAAO,CAC3E,IAAImjH,EAAgB7pG,EAAM,MACxBspG,EAAYO,EAAc,UAC1B3L,EAAe2L,EAAc,aAC7BzL,EAAcyL,EAAc,YAC5B3kH,EAAa2kH,EAAc,WACzBC,EAAgB9pG,EAAM,MACxBvZ,EAAYqjH,EAAc,UAC1B7L,EAAY6L,EAAc,UAC1BvS,EAAauS,EAAc,WAG7B,OAAQpjH,EAAM,MAAO,CACnB,KAAKqjH,GAAA,EAAQ,GACX,CACE/pG,EAAM,gBAAgB,EAAE,EACxBtZ,EAAM,eAAe,EACrB,KACF,CACF,KAAKqjH,GAAA,EAAQ,KACX,CACE/pG,EAAM,gBAAgB,CAAC,EACvBtZ,EAAM,eAAe,EACrB,KACF,CACJ,CAGA,IAAIk4G,EAAa5+F,EAAM,cAAc,EACrC,GAAI4+F,GAAcA,EAAW,KAAM,CACjC,IAAIhD,EAAwB57F,EAAM,yBAAyB,EACvDgqG,EAAapL,EAAW,KAAK,SAAW,IAAS,CAAC,EAAEA,EAAW,KAAK15G,EAAW,QAAQ,GAAK,CAAC,GAAG,OAChGkhH,KAAY,UAA4B,SAAc,MAAc,CAAC,KAAG,OAAiBkD,EAAW1N,CAAqB,CAAC,EAAG,CAAC,EAAG,CACnI,KAAMgD,EAAW,KACjB,OAAQ,EACV,CAAC,CAAC,EACF,OAAQl4G,EAAM,MAAO,CAEnB,KAAKqjH,GAAA,EAAQ,KACX,CAEMC,GAAc9L,EAAa,SAASoL,CAAS,EAC/CtpG,EAAM,aAAa,CAAC,EAAGomG,CAAS,EACvBxH,EAAW,QACpB5+F,EAAM,eAAe4+F,EAAW,OAAO,GAAG,EAE5Cl4G,EAAM,eAAe,EACrB,KACF,CACF,KAAKqjH,GAAA,EAAQ,MACX,CAEMC,GAAc,CAAC9L,EAAa,SAASoL,CAAS,EAChDtpG,EAAM,aAAa,CAAC,EAAGomG,CAAS,EACvBxH,EAAW,UAAYA,EAAW,SAAS,QACpD5+F,EAAM,eAAe4+F,EAAW,SAAS,CAAC,EAAE,GAAG,EAEjDl4G,EAAM,eAAe,EACrB,KACF,CAGF,KAAKqjH,GAAA,EAAQ,MACb,KAAKA,GAAA,EAAQ,MACX,CACM9L,GAAa,CAACmI,EAAU,UAAYA,EAAU,YAAc,IAAS,CAACA,EAAU,gBAClFpmG,EAAM,YAAY,CAAC,EAAGomG,EAAW,CAAChI,EAAY,SAASkL,CAAS,CAAC,EACxD,CAACrL,GAAa1G,GAAc,CAAC6O,EAAU,UAAYA,EAAU,aAAe,IACrFpmG,EAAM,aAAa,CAAC,EAAGomG,CAAS,EAElC,KACF,CACJ,CACF,CAC8C3/G,IAAUC,CAAK,CAC/D,CAAC,KAID,MAAgBiuG,GAAuB30F,CAAK,EAAG,uBAAwB,SAAUma,EAAO,CACtF,IAAI8vF,EAAS,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,GAC7EC,EAAa,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KACrF,GAAI,CAAClqG,EAAM,UAAW,CACpB,IAAImqG,EAAW,GACXC,EAAY,GACZC,EAAW,CAAC,EAChB,OAAO,KAAKlwF,CAAK,EAAE,QAAQ,SAAU37B,EAAM,CACzC,GAAIwhB,EAAM,MAAM,eAAexhB,CAAI,EAAG,CACpC4rH,EAAY,GACZ,MACF,CACAD,EAAW,GACXE,EAAS7rH,CAAI,EAAI27B,EAAM37B,CAAI,CAC7B,CAAC,EACG2rH,IAAa,CAACF,GAAUG,IAC1BpqG,EAAM,YAAS,SAAc,MAAc,CAAC,EAAGqqG,CAAQ,EAAGH,CAAU,CAAC,CAEzE,CACF,CAAC,KACD,MAAgBvV,GAAuB30F,CAAK,EAAG,WAAY,SAAUu/F,EAAQ,CAC3Ev/F,EAAM,QAAQ,QAAQ,SAASu/F,CAAM,CACvC,CAAC,EACMv/F,CACT,CACA,OAAA00F,GAAa+P,EAAM,CAAC,CAClB,IAAK,oBACL,MAAO,UAA6B,CAClC,KAAK,UAAY,GACjB,KAAK,UAAU,CACjB,CACF,EAAG,CACD,IAAK,qBACL,MAAO,UAA8B,CACnC,KAAK,UAAU,CACjB,CACF,EAAG,CACD,IAAK,YACL,MAAO,UAAqB,CAC1B,IAAI6F,EAAgB,KAAK,MACvBhB,EAAYgB,EAAc,UAC1BC,EAAwBD,EAAc,iBACtCb,EAAmBc,IAA0B,OAAS,EAAIA,EACxDjB,IAAc,QAAaA,IAAc,KAAK,MAAM,YACtD,KAAK,SAAS,CACZ,UAAWA,CACb,CAAC,EACGA,IAAc,MAChB,KAAK,SAAS,CACZ,IAAKA,EACL,OAAQG,CACV,CAAC,EAGP,CACF,EAAG,CACD,IAAK,uBACL,MAAO,UAAgC,CACrC,OAAO,oBAAoB,UAAW,KAAK,eAAe,EAC1D,KAAK,UAAY,EACnB,CACF,EAAG,CACD,IAAK,iBACL,MAAO,UAA0B,CAC/B,KAAK,SAAS,CACZ,gBAAiB,KACjB,aAAc,KACd,gBAAiB,KACjB,cAAe,KACf,iBAAkB,KAClB,cAAe,KACf,YAAa,EACf,CAAC,CACH,CACF,EAAG,CACD,IAAK,SACL,MAAO,UAAkB,CACvB,IAAIe,EAAgB,KAAK,MACvB3L,EAAU2L,EAAc,QACxBtF,EAAesF,EAAc,aAC7BhM,EAAcgM,EAAc,YAC5BvE,EAAkBuE,EAAc,gBAChClB,EAAYkB,EAAc,UAC1BlV,EAAkBkV,EAAc,gBAChClF,EAAmBkF,EAAc,iBACjCnF,EAAgBmF,EAAc,cAC9BnV,EAAemV,EAAc,aAC7B9L,EAAkB8L,EAAc,gBAChCjV,EAASiV,EAAc,OACrBC,EAAgB,KAAK,MACvBvU,EAAYuU,EAAc,UAC1BpsG,EAAYosG,EAAc,UAC1BpiH,EAAQoiH,EAAc,MACtBC,EAAWD,EAAc,SACzB9L,EAAY8L,EAAc,UAC1BE,EAAwBF,EAAc,SACtC3L,EAAW6L,IAA0B,OAAS,EAAIA,EAClDpT,EAAakT,EAAc,WAC3BG,EAAWH,EAAc,SACzBI,EAAOJ,EAAc,KACrBnR,EAAemR,EAAc,aAC7BK,EAAYL,EAAc,UAC1BxM,EAAYwM,EAAc,UAC1BvD,EAAgBuD,EAAc,cAC9BhM,EAAWgM,EAAc,SACzBlP,EAASkP,EAAc,OACvBxC,EAAWwC,EAAc,SACzBM,EAAiBN,EAAc,eAC/BziH,EAASyiH,EAAc,OACvB5M,EAAa4M,EAAc,WAC3B34F,EAAc24F,EAAc,YAC5BxoC,EAAUwoC,EAAc,QACxBO,EAAcP,EAAc,YAC5BQ,EAAsBR,EAAc,oBACpClS,EAAgBkS,EAAc,cAC9BS,EAAWT,EAAc,SACzB1jF,GAAY0jF,EAAc,UAC1BU,GAAgBV,EAAc,cAC9BW,GAAYX,EAAc,UACxBrL,MAAW3E,GAAA,GAAU,KAAK,MAAO,CACnC,KAAM,GACN,KAAM,EACR,CAAC,EAGG4Q,EACAP,OACE,MAAQA,CAAS,IAAM,SACzBO,EAAkBP,EACT,OAAOA,GAAc,WAC9BO,EAAkB,CAChB,cAAeP,CACjB,EAEAO,EAAkB,CAAC,GAGvB,IAAIzwF,GAAe,CACjB,UAAWs7E,EACX,WAAYqB,EACZ,SAAUqT,EACV,KAAMC,EACN,aAAcvR,EACd,UAAW+R,EACX,gBAAiBpF,EACjB,UAAWhI,EACX,cAAeiJ,EACf,SAAUzI,EACV,YAAaD,EACb,gBAAiBlJ,EACjB,iBAAkBgQ,EAClB,cAAeD,EACf,aAAchQ,EACd,gBAAiBqJ,EACjB,OAAQnJ,EACR,UAAWxuE,GACX,oBAAqBkkF,EACrB,SAAUhD,EACV,eAAgB8C,EAChB,YAAaC,EACb,YAAa,KAAK,YAClB,kBAAmB,KAAK,kBACxB,aAAc,KAAK,aACnB,aAAc,KAAK,aACnB,YAAa,KAAK,YAClB,WAAY,KAAK,WACjB,iBAAkB,KAAK,iBACvB,iBAAkB,KAAK,iBACvB,kBAAmB,KAAK,kBACxB,gBAAiB,KAAK,gBACtB,gBAAiB,KAAK,gBACtB,eAAgB,KAAK,eACrB,gBAAiB,KAAK,gBACtB,cAAe,KAAK,cACpB,WAAY,KAAK,UACnB,EACA,OAAoB,gBAAoB9V,GAAY,SAAU,CAC5D,MAAOt6E,EACT,EAAgB,gBAAoB,MAAO,CACzC,UAAW,KAAWs7E,EAAW73F,EAAW8sG,MAAe,SAAgB,SAAgB,MAAgB,CAAC,EAAG,GAAG,OAAOjV,EAAW,YAAY,EAAGwU,CAAQ,EAAG,GAAG,OAAOxU,EAAW,UAAU,EAAG2I,CAAO,EAAG,GAAG,OAAO3I,EAAW,iBAAiB,EAAGoT,IAAc,IAAI,CAAC,EACtQ,MAAO8B,EACT,EAAgB,gBAAoB,GAAU,GAAS,CACrD,IAAK,KAAK,QACV,UAAWlV,EACX,MAAO7tG,EACP,KAAM68G,EACN,SAAUzG,EACV,WAAYlH,EACZ,UAAW,CAAC,CAAC0G,EACb,OAAQ1C,EACR,SAAU0K,IAAoB,KAC9B,OAAQj+G,EACR,WAAY61G,EACZ,QAAS57B,EACT,UAAW08B,EACX,QAASE,EACT,SAAUC,EACV,WAAY,KAAK,cAAc,EAC/B,QAAS,KAAK,QACd,OAAQ,KAAK,OACb,UAAW,KAAK,UAChB,eAAgB,KAAK,eACrB,kBAAmB,KAAK,kBACxB,gBAAiB,KAAK,gBACtB,cAAevG,EACf,SAAU2S,EACV,YAAap5F,CACf,EAAG,KAAK,yBAAyB,EAAGstF,EAAQ,CAAC,CAAC,CAAC,CACjD,CACF,CAAC,EAAG,CAAC,CACH,IAAK,2BACL,MAAO,SAAkC38G,EAAO23B,EAAW,CACzD,IAAIT,EAAYS,EAAU,UACtBiwF,EAAW,CACb,UAAW5nH,CACb,EACA,SAAS0nH,EAAS3rH,EAAM,CACtB,MAAO,CAACm7B,GAAal3B,EAAM,eAAejE,CAAI,GAAKm7B,GAAaA,EAAUn7B,CAAI,IAAMiE,EAAMjE,CAAI,CAChG,CAGA,IAAIolH,EAGA1+G,EAAak1B,EAAU,WAe3B,GAdI+vF,EAAS,YAAY,IACvBjlH,KAAa,OAAezC,EAAM,UAAU,EAC5C4nH,EAAS,WAAanlH,GAIpBilH,EAAS,UAAU,EACrBvG,EAAWnhH,EAAM,SACR0nH,EAAS,UAAU,OAC5B/F,GAAA,IAAQ,GAAO,kEAAkE,EACjFR,KAAW,OAAkBnhH,EAAM,QAAQ,GAIzCmhH,EAAU,CACZyG,EAAS,SAAWzG,EACpB,IAAI0H,KAAc,OAAsB1H,EAAU,CAChD,WAAY1+G,CACd,CAAC,EACDmlH,EAAS,eAAc,SAAc,MAAgB,CAAC,EAAG7M,GAAYE,EAAY,EAAG4N,EAAY,WAAW,CAM7G,CACA,IAAI9M,EAAc6L,EAAS,aAAejwF,EAAU,YAGpD,GAAI+vF,EAAS,cAAc,GAAKxwF,GAAawwF,EAAS,kBAAkB,EACtEE,EAAS,aAAe5nH,EAAM,kBAAoB,CAACk3B,GAAal3B,EAAM,oBAAsB4hH,GAAoB5hH,EAAM,aAAc+7G,CAAW,EAAI/7G,EAAM,qBAChJ,CAACk3B,GAAal3B,EAAM,iBAAkB,CAC/C,IAAI8oH,KAAmB,MAAc,CAAC,EAAG/M,CAAW,EACpD,OAAO+M,EAAiB/N,EAAU,EAGlC,IAAIgO,EAAmB,CAAC,EACxB,OAAO,KAAKD,CAAgB,EAAE,QAAQ,SAAU1uH,EAAK,CACnD,IAAI+kH,EAAS2J,EAAiB1uH,CAAG,EAC7B+kH,EAAO,UAAYA,EAAO,SAAS,QACrC4J,EAAiB,KAAK5J,EAAO,GAAG,CAEpC,CAAC,EACDyI,EAAS,aAAemB,CAC1B,KAAW,CAAC7xF,GAAal3B,EAAM,sBAC7B4nH,EAAS,aAAe5nH,EAAM,kBAAoBA,EAAM,oBAAsB4hH,GAAoB5hH,EAAM,oBAAqB+7G,CAAW,EAAI/7G,EAAM,qBAOpJ,GALK4nH,EAAS,cACZ,OAAOA,EAAS,aAIdzG,GAAYyG,EAAS,aAAc,CACrC,IAAInF,KAAe,OAAgBtB,GAAYxpF,EAAU,SAAUiwF,EAAS,cAAgBjwF,EAAU,aAAcl1B,CAAU,EAC9HmlH,EAAS,aAAenF,CAC1B,CAYA,GATIziH,EAAM,aACJ0nH,EAAS,cAAc,EACzBE,EAAS,aAAe5G,GAAiBhhH,EAAM,aAAcA,CAAK,EACzD,CAACk3B,GAAal3B,EAAM,sBAC7B4nH,EAAS,aAAe5G,GAAiBhhH,EAAM,oBAAqBA,CAAK,IAKzEA,EAAM,UAAW,CACnB,IAAIgpH,EAYJ,GAXItB,EAAS,aAAa,EACxBsB,EAAmBvH,GAAiBzhH,EAAM,WAAW,GAAK,CAAC,EAClD,CAACk3B,GAAal3B,EAAM,mBAC7BgpH,EAAmBvH,GAAiBzhH,EAAM,kBAAkB,GAAK,CAAC,EACzDmhH,IAET6H,EAAmBvH,GAAiBzhH,EAAM,WAAW,GAAK,CACxD,YAAa23B,EAAU,YACvB,gBAAiBA,EAAU,eAC7B,GAEEqxF,EAAkB,CACpB,IAAIC,EAAoBD,EACtBE,EAAwBD,EAAkB,YAC1CtN,EAAcuN,IAA0B,OAAS,CAAC,EAAIA,EACtDC,EAAwBF,EAAkB,gBAC1CnN,EAAkBqN,IAA0B,OAAS,CAAC,EAAIA,EAC5D,GAAI,CAACnpH,EAAM,cAAe,CACxB,IAAIopH,KAAc,MAAazN,EAAa,GAAMI,CAAW,EAC7DJ,EAAcyN,EAAY,YAC1BtN,EAAkBsN,EAAY,eAChC,CACAxB,EAAS,YAAcjM,EACvBiM,EAAS,gBAAkB9L,CAC7B,CACF,CAGA,OAAI4L,EAAS,YAAY,IACvBE,EAAS,WAAa5nH,EAAM,YAEvB4nH,CACT,CACF,CAAC,CAAC,EACK5F,CACT,EAAE,WAAe,KACjB,MAAgBA,GAAM,eAAgB,CACpC,UAAW,UACX,SAAU,GACV,SAAU,GACV,WAAY,GACZ,SAAU,GACV,UAAW,GACX,SAAU,GACV,cAAe,GACf,UAAW,GACX,oBAAqB,GACrB,iBAAkB,GAClB,iBAAkB,GAClB,oBAAqB,CAAC,EACtB,mBAAoB,CAAC,EACrB,oBAAqB,CAAC,EACtB,oBAAqB,GACrB,UAAW,UAAqB,CAC9B,MAAO,EACT,EACA,aAAc,EAChB,CAAC,KACD,MAAgBA,GAAM,WAAY,EAAQ,ECnqC1C,SDoqCeA,GEpqCR,SAASqH,GAAgBjqH,EAAsB,CACpD,SAAO,QAAI,CACT,wBAAyB,CACvB,OAAQ,GACV,EACA,WAAY,CACV,OAAQ,EACR,aAAc,OACd,OAAQ,wBACR,kCAAmC,CACjC,YAAa,MACf,EACA,iBAAkB,CAChB,QAAS,OACT,WAAY,SACZ,eAAgB,gBAChB,MAAO,MACT,EACA,oBAAqB,CACnB,OAAQ,EACR,QAAS,MACT,WAAY,OACZ,WAAY,SACZ,UAAW,OACX,QAAS,EACT,QAAS,OACT,aAAc,MACd,OAAQ,UACR,aAAc,CACZ,MAAO,OACP,cAAe,OACf,gBAAiB,OACjB,iBAAkB,OAClB,WAAY,MACd,EACA,mBAAoB,CAClB,sBAAuB,CACrB,SAAU,WACV,IAAK,EACL,MAAO,EACP,OAAQ,EACR,KAAM,EACN,UAAW,uBACX,QAAS,IACX,EACA,wBAAyB,CACvB,WAAY,aAAaA,EAAM,WAAW,MAAM,WAAW,EAC7D,CACF,EACA,gBAAiB,CACf,wBAAyB,CACvB,WAAY,MACd,CACF,EACA,gBAAiB,CACf,kCAAmC,CACjC,MAAO,qBACP,WAAY,iBACd,CACF,EACA,GAAI,CACF,OAAQ,EACR,QAAS,YACX,EACA,gCAAiC,CAC/B,SAAU,WACV,QAAS,eACT,OAAQ,OACR,OAAQ,EACR,QAAS,EACT,eAAgB,OAChB,cAAe,MACf,OAAQ,OACR,SAAU,EACV,OAAQ,aAAaA,EAAM,WAAW,MAAM,WAAW,GACvD,aAAc,GAAGA,EAAM,MAAM,OAAO,OAAO,GAC3C,WAAY,GAAGA,EAAM,OAAO,WAAW,SAAS,GAChD,UAAW,GAAGA,EAAM,QAAQ,SAAW,CAAC,KACxC,UAAW,CACT,OAAQ,aAAaA,EAAM,WAAW,MAAM,WAAW,EACzD,EACA,0BAA2B,CACzB,OAAQ,aAAaA,EAAM,OAAO,QAAQ,MAAM,GAChD,QAAS,CACX,CACF,EACA,KAAM,CACJ,OAAQ,OACR,wCAAyC,CACvC,QAAS,eACT,MAAO,OACP,OAAQ,OACR,YAAa,MACb,WAAY,OACZ,cAAe,WACf,gBAAiB,cACjB,iBAAkB,YAClB,qBAAsB,SACtB,OAAQ,SACR,QAAS,OACT,OAAQ,UACR,4BAA6B,CAC3B,gBAAiB,MACnB,CACF,EACA,qBAAsB,CACpB,QAAS,OACT,WAAY,SACZ,MAAO,OACP,OAAQ,OACR,gBAAiB,cACjB,iBAAkB,YAClB,qBAAsB,SACtB,OAAQ,SACR,QAAS,OACT,OAAQ,UACR,4BAA6B,CAC3B,gBAAiB,MACnB,EACA,0BAA2B,CACzB,OAAQ,MACV,EACA,0BAA2B,CACzB,mBAAoB,aACtB,EACA,2BAA4B,CAC1B,mBAAoB,aACtB,CACF,EACA,yBAA0B,CACxB,YAAa,MACb,cAAe,MACf,WACE,4jBACJ,EACA,qBAAsB,CACpB,MAAO,OACP,OAAQ,OACR,OAAQ,QACR,mBAAoB,MACpB,YAAa,CACX,mBAAoB,SACtB,EACA,kBAAmB,CACjB,mBAAoB,aACtB,EACA,aAAc,CACZ,mBAAoB,SACtB,EACA,uDAAwD,CACtD,mBAAoB,aACtB,EACA,6DAA8D,CAC5D,SAAU,WACV,WAAY,OACZ,aAAcA,EAAM,MAAM,OAAO,QACjC,WAAY,CACV,SAAU,WACV,IAAK,MACL,KAAM,MACN,MAAO,MACP,OAAQ,EACR,OAAQ,iBACR,UAAW,EACX,WAAY,EACZ,gBAAiB,WACjB,UAAW,WACX,QAAS,KACX,CACF,CACF,CACF,CACF,EACA,4BAA6B,CAC3B,oBAAqB,CACnB,yBAA0B,CACxB,WAAY,MACd,CACF,CACF,EACA,sBAAuB,CACrB,qCAAsC,CACpC,OAAQ,CACN,WACE,wGACJ,EACA,2BAA4B,CAC1B,mBAAoB,aACtB,CACF,EACA,+BAAgC,CAC9B,2BAA4B,CAC1B,mBAAoB,aACtB,CACF,CACF,EACA,eAAgB,CACd,QAAS,OACT,SAAU,CACR,QAAS,OACX,CACF,EACA,sBAAuB,CACrB,+CAAgD,CAC9C,MAAO,UACP,OAAQ,aACV,CACF,EACA,oBAAqB,CACnB,WAAY,oBACd,EACA,kBAAmB,CACjB,QAAS,EACX,EACA,eAAgB,CACd,YAAa,MACb,cAAe,MACf,mBAAoB,cACtB,EACA,gBAAiB,CACf,YAAa,MACb,cAAe,MACf,mBAAoB,UACtB,EACA,eAAgB,CACd,YAAa,MACb,cAAe,MACf,mBAAoB,cACtB,EACA,oBAAqB,CACnB,YAAa,MACb,cAAe,KACjB,EACA,UAAW,CACT,QAAS,cACX,EACA,WAAY,CACV,QAAS,eACT,OAAQ,EACR,cAAe,QACjB,EACA,gBAAiB,CACf,QAAS,eACT,MAAO,MACT,EACA,mBAAoB,CAClB,QAAS,cACT,eAAgB,SAChB,MAAO,MACT,CACF,CACF,CAAC,CACH,C,gBC7OO,MAAMkqH,GAAgB,CAAC,CAAE,SAAA9Y,EAAU,SAAA+Y,EAAU,kBAAAC,CAAkB,IAAa,CACjF,MAAMthH,EAAUqhH,EAAS,QACnBxtH,EAAOwtH,EAAS,QAAQ,QAAQ,EAEhC1qH,KAAS,OAAW,EAAS,EAE7B6yG,EAAQlB,EAAS,MAEjBiZ,EAAW,IAAM,CACrB,GAAKjZ,GAAU,MAIf,OAAOA,EAAS,MAAM,KACxB,EAEMkZ,EAAYxhH,GAA0B,EAC1BA,EAAQ,QAAUwpG,GAC1B,SAASr4G,GAAc,OAAQ6O,CAAO,EAC9CshH,EAAkB,EAAK,CACzB,EAEMG,EAAezhH,GAA0B,EAC7BA,EAAQ,QAAUwpG,GAC1B,SAASr4G,GAAc,UAAW6O,CAAO,EACjDshH,EAAkB,EAAK,CACzB,EAEMI,EAAe,CAAC1hH,EAAuBnM,IAAiB,CAC5DmM,EAAQ,SAAS,CAAE,GAAGA,EAAQ,QAAS,KAAAnM,CAAK,CAAC,CAC/C,EAEM8tH,EAA6BC,GAG1B,EAFOL,EAAS,GAED,UAAUK,CAAY,EAGxCC,EAAgB7hH,GACbA,EAAQ,QAAQ,KAGzB,SACE,oBACE,oBAAC8hH,GAAA,GACC,KAAAjuH,EACA,SAAW8N,GAAM+/G,EAAa1hH,EAAS2B,CAAC,EACxC,0BAA2BggH,GAA6B,OAC1D,KAEA,QAAC,OAAI,UAAWhrH,EAAO,YAAa,kBAAQkrH,EAAa7hH,CAAO,GAAE,EAEjE,CAACqhH,EAAS,aACT,QAAC,OAAI,UAAW1qH,EAAO,qBACrB,oBAAC9D,GAAA,GACC,KAAK,OACL,SAAO,KAAE,yCAA0C,WAAW,EAC9D,UAAW8D,EAAO,WAClB,QAAS,IAAM8qH,EAAYzhH,CAAO,EAClC,WAAS,KAAE,2CAA4C,WAAW,EACpE,KACA,OAACnN,GAAA,GACC,KAAK,YACL,SAAO,KAAE,sCAAuC,QAAQ,EACxD,UAAW8D,EAAO,WAClB,QAAS,IAAM6qH,EAASxhH,CAAO,EAC/B,WAAS,KAAE,wCAAyC,QAAQ,EAC9D,GACF,GAEJ,CAEJ,EAEM,GAAa9I,IAA0B,CAC3C,wBAAsB,OAAI,CACxB,QAAS,OACT,WAAY,UACd,CAAC,EACD,cAAY,OAAI,CACd,MAAOA,EAAM,OAAO,KAAK,UACzB,OAAQ,UACR,UAAW,CACT,MAAOA,EAAM,OAAO,KAAK,OAC3B,CACF,CAAC,EACD,eAAa,OAAI,CACf,QAAS,OACT,WAAY,SACZ,SAAU,EACV,SAAU,SACV,YAAaA,EAAM,QAAQ,CAAC,CAC9B,CAAC,EACD,aAAW,OAAI,CACb,WAAYA,EAAM,WAAW,iBAC7B,MAAOA,EAAM,OAAO,QAAQ,KAC5B,OAAQ,UACR,SAAU,SACV,WAAYA,EAAM,QAAQ,EAAG,CAC/B,CAAC,CACH,GCtGO,SAAS6qH,GAAY7d,EAAiC/hG,EAAsB6/G,EAAwB,CACzG,IAAIzvG,EAA0B,CAAC,EAC/B,GAAI2xF,EACF,QAAS,EAAIA,EAAK,SAAS,OAAQ,IAAK,GAAK,EAAG,CAC9C,MAAMnnG,EAAOmnG,EAAK,SAAS,CAAC,EACtBlkG,EAAuB,CAC3B,IAAKjD,EAAK,IACV,MAAOA,EAAK,QAAQ,EACpB,WAAY,GACZ,QAASA,CACX,EAEIA,aAAgBqF,KAClBpC,EAAQ,SAAW+hH,GAAYhlH,EAAMoF,EAAW6/G,CAAa,GAE/DzvG,EAAS,KAAKvS,CAAO,CACvB,CAGF,OAAOuS,CACT,CAEO,SAAS0vG,GACdj+G,EACAi1G,EACA,CACA,MAAMiJ,EAAUl+G,EAAK,KAAK,IACpBm+G,EAASn+G,EAAK,SAAS,IACvB2jB,EAAU3jB,EAAK,KAAK,IAAI,MAAM,GAAG,EACjCgwF,EAAehwF,EAAK,aAAe,OAAO2jB,EAAQA,EAAQ,OAAS,CAAC,CAAC,EAErEwjC,EAAO,CACXr3D,EACA5B,EACAic,IACG,CACHra,EAAK,QAAQ,CAACiJ,EAAM2G,EAAOwK,IAAQ,CACjC,GAAInR,EAAK,MAAQ7K,EAAK,CACpBic,EAASpR,EAAM2G,EAAOwK,CAAG,EACzB,MACF,CACInR,EAAK,UACPouD,EAAKpuD,EAAK,SAAU7K,EAAKic,CAAQ,CAErC,CAAC,CACH,EACMra,EAAO,CAAC,GAAGmlH,CAAQ,EAGzB,IAAImJ,EAMJ,GALAj3D,EAAKr3D,EAAMquH,EAAQ,CAACplH,EAAmB2G,EAAewK,IAAuB,CAC3EA,EAAI,OAAOxK,EAAO,CAAC,EACnB0+G,EAAarlH,CACf,CAAC,EAEGi3F,IAAiB,EAEnB7oC,EAAKr3D,EAAMouH,EAAUnlH,GAAsB,CACzCA,EAAK,SAAWA,EAAK,UAAY,CAAC,EAClCA,EAAK,SAAS,QAAQqlH,CAAW,CACnC,CAAC,MACI,CAEL,IAAIviG,EAAoB,CAAC,EACrB3W,EAAI,EACRiiD,EAAKr3D,EAAMouH,EAAS,CAACnlH,EAAmB2G,EAAewK,IAAuB,CAC5E2R,EAAK3R,EACLhF,EAAIxF,CACN,CAAC,EAEGswF,IAAiB,GACnBn0E,EAAG,OAAO3W,EAAG,EAAGk5G,CAAW,EAE3BviG,EAAG,OAAO3W,EAAI,EAAG,EAAGk5G,CAAW,CAEnC,CAEA,OAAOtuH,CACT,CCzEA,IAAIuuH,GAAiB,GAEd,MAAMC,GAAuB,CAAC,CAAE,KAAAvlH,CAAK,IAAkE,CAC5G,KAAM,CAACk8G,EAAUsJ,CAAW,KAAI,YAASR,GAAYhlH,GAAM,UAAU,MAAM,IAAI,CAAC,EAC1E,CAACylH,EAAkBC,CAAmB,KAAI,YAAS,EAAI,EACvD,CAAClP,EAAcmP,CAAe,KAAI,YAAgB,CAAC,CAAC,EACpD,CAAClP,EAAcmP,CAAe,KAAI,YAAgB,CAAC,CAAC,EAEpDzrH,KAAQ,OAAU,EAClB0rH,EAAYzB,GAAgBjqH,CAAK,EACjCP,KAAS,OAAW,EAAS,EAE7BksH,EAAkB3rH,EAAM,OAAO,QAAQ,OACvC,CAAE,SAAAoxG,CAAS,EAAIvrG,EACfoF,KAAY,WAChB,IAAOmmG,GAAU,SAAWA,EAAS,SAAS,IAAK3mG,GAAMA,GAAG,QAAQ,CAAC,EAAI,CAAC,EAC1E,CAAC2mG,GAAU,QAAQ,CACrB,EAEMwa,KAAiB,WACrB,IAAOxa,GAAU,SAAWA,EAAS,SAAS,IAAK3mG,GAAMA,GAAG,GAAG,EAAI,CAAC,EACpE,CAAC2mG,GAAU,QAAQ,CACrB,EAQA,MANA,aAAU,IAAM,CACdia,EAAYR,GAAYhlH,GAAM,UAAU,MAAM,KAAMoF,EAAW0gH,CAAe,CAAC,EAC/EF,EAAgBG,CAAc,EAC9BxB,EAAkB,CACpB,EAAG,CAACvkH,GAAM,UAAU,MAAM,KAAM8lH,EAAiB1gH,EAAW2gH,CAAc,CAAC,EAEvE,CAACxa,EACH,SACE,OAAC,OACC,mBAAC,KAAK,CAAC,QAAQ,4CAA4C,uBAAW,EACxE,EAIJ,MAAMkB,EAAQlB,EAAS,MACvB,GAAI,CAACkB,EACH,SACE,OAAC,OACC,mBAAC,KAAK,CAAC,QAAQ,8CAA8C,0BAAc,EAC7E,EAIJ,MAAM6D,EAAW,CAACmG,EAAqBxvG,IAA8C,CAC/Eq+G,IAAkBtlH,EAAK,UAAU,OACnCmF,GAASnF,EAAK,SAAS,MAAOiH,EAAK,KAAK,OAAO,CAEnD,EAEM2zG,EAAY,IACT,GAGHxJ,EAAUnqG,GAA2F,CACzG,MAAM2jB,EAAU3jB,EAAK,KAAK,IAAI,MAAM,GAAG,EACjCgwF,EAAehwF,EAAK,aAAe,OAAO2jB,EAAQA,EAAQ,OAAS,CAAC,CAAC,EAErEo7F,EAAQ/+G,EAAK,SAAS,QACtBg/G,EAASh/G,EAAK,KAAK,QAEnBlQ,EAAOmuH,GAAWj+G,EAAMi1G,CAAQ,EAEtCsJ,EAAYzuH,CAAI,EAChB+/F,GAAgBkvB,EAAOC,EAAQh/G,EAAK,UAAWgwF,CAAY,CAC7D,EAEMoa,EAAYmF,GAAwB,CACxCmP,EAAgBnP,CAAY,EAC5BkP,EAAoB,EAAK,CAC3B,EAEM9T,EAAgB5/F,GAChBA,EAAI,UAEC,oBAAE,KAIT,OAACs6F,GAAA,GACC,KAAK,cACL,SAAO,KAAE,8DAA+D,WAAW,EACnF,MAAO,CACL,UAAW,UAAUt6F,EAAI,SAAW,GAAK,CAAC,OAC1C,KAAM7X,EAAM,OAAO,KAAK,OAC1B,EACF,EAIEoqH,EAAoB,CAAC2B,EAAQ,KAAS,CAC1CZ,GAAiBY,CACnB,EAEMC,EAAmB,IAAM,CAC7B1Z,EAAM,MAAM,sBAAsB,CACpC,EAEM2Z,EAAiB9B,MACd,OAACD,GAAa,CAAC,SAAAC,EAAoB,kBAAAC,EAAsC,SAAAhZ,CAAA,CAAoB,EAIhG8a,EAAmB,IAAM,CACzB5Z,EAAM,MACR9U,GAAe8U,EAAM,KAAK,EAE1B,QAAQ,KAAK,WAAW,CAE5B,EAEM3I,EAAcv+F,GAAgBgmG,EAAS,MAAM,uBAAuB,EAAE,QAE5E,SACE,oBACE,oBAAC,UAAM,CAAC,OAAQsa,CAAA,CAAW,KAC3B,OAAC,IACC,WAAY,GACZ,SAAAvV,EACA,UAAW,GACX,iBAAkB,GAClB,iBAAAmV,EACA,SAAU,GACV,UAAA7K,EACA,OAAAxJ,EACA,aAAAoF,EACA,SAAAnF,EACA,SAAA6K,EACA,YAAakK,EACb,aAAAxU,EACA,aAAA6E,EACA,SAAU,GACZ,KAEA,QAAC7gH,GAAA,EAAK,CAAC,eAAe,gBAAgB,UAAU,MAC9C,oBAAC,OAAI,UAAWgE,EAAO,eACrB,mBAAC0sH,GAAA,GACC,SAAWtgH,GAAQD,GAAUC,EAAKymG,CAAK,EACvC,QAAS3I,EACT,SAAO,KAAE,+CAAgD,UAAU,EACrE,EACF,EACC1+F,EAAU,OAAS,MAClB,OAAC7M,GAAA,GAAM,CAAC,KAAK,KAAK,QAAQ,YAAY,QAAS4tH,EAC7C,mBAAC,KAAK,CAAC,QAAQ,gDAAgD,2BAAe,EAChF,EAED/gH,EAAU,OAAS,GAAKlR,GAAA,EAAO,eAAe,uBAC7C,OAACqE,GAAA,GAAM,CAAC,KAAK,KAAK,QAAQ,YAAY,QAAS8tH,EAC7C,mBAAC,KAAK,CAAC,QAAQ,gDAAgD,2BAAe,EAChF,GAEJ,GACF,CAEJ,EAEM,GAAalsH,IAA0B,CAC3C,kBAAgB,OAAI,CAClB,WAAY,OACZ,SAAU,OACZ,CAAC,CACH,GCtKO,SAASosH,GAAe17G,EAA2D,CACxF,KAAM,CAAE,SAAA2kG,EAAU,MAAAvyG,CAAM,EAAI4N,EAM5B,GAJK5N,EAAM,eACTA,EAAM,aAAeA,EAAM,MAGzBuyG,EACF,UAAWvsG,KAAWusG,EAAU,CAC9B,GAAIvsG,aAAmBoC,GAAY,CACjCpI,EAAM,aAAegG,EACrB,KACF,CAEA,GAAIA,GAAWA,EAAQ,OAAQ,CAC7BhG,EAAM,aAAegG,EAAQ,OAC7B,KACF,CACF,CAGF,MAAM5I,EAAU4C,EAAM,aAAa,SAAW,CAAE,SAAU,CAAC,CAAE,EAE7D,MAAO,CACL,SAAU,IAAC,KAAE,qCAAsC,OAAO,CAAC,EAC3D,KAAM,KAGN,OAASgD,IAA+B,CACtC,SAAWrD,MACF2tG,GAAA,KAAUlwG,EAASuC,CAAI,EAEhC,SAAU,CAACA,EAAMnI,IAAU,CACzB,GAAImI,IAAS,QAAUnI,EAAO,CAC5B,QAAQ,KAAK,6BAA6B,EAC1C,MACF,CACA,MAAMiS,KAAI,OAAmBrM,EAASuC,EAAMnI,CAAK,EACjDwI,EAAM,cAAc,SAASyJ,CAAC,EAC9BzJ,EAAM,cAAc,WAAWA,EAAM,OAAO,CAC9C,CACF,GAGA,MAAO,CAACvC,EAASrD,IAAY,CAC3B,MAAMygG,EAAe76F,EAAM,aACvB66F,GAAiBA,EAAa,OAAO,EAIzCp9F,EAAQ,gBAAgB,CACtB,GAAI,UACJ,KAAM,OACN,QAAM,KAAE,oCAAqC,UAAU,EACvD,OAAQ6qH,GACR,SAAU,CAAE,MAAAtoH,EAAO,MAAOA,EAAM,aAAc,SAAAuyG,CAAS,CACzD,CAAC,EAED,MAAMjrG,EAAM,CAAE,GAAGlN,EAAS,QAAAgD,CAAQ,EAElC+vG,GAAc,cAAc1vG,EAAgB6J,CAAG,EAE/C6lG,GAAc,UAAU1vG,EAAgB6J,CAAG,EAEvCuzF,GAAgB,CAACA,EAAa,OAAO,GACvCp9F,EAAQ,gBAAgB,CACtB,SAAU,IAAC,KAAE,sCAAuC,QAAQ,CAAC,EAC7D,GAAI,UACJ,KAAM,KACN,QAAM,KAAE,uCAAwC,aAAa,EAC7D,OAAQqxG,GACR,SAAU,CACR,MAAOlhG,EAAK,MACZ,QAASitF,CACX,CACF,CAAC,CAEL,CACF,CACF,C,4BC1FO,MAAM0uB,GAAa,CAAC,CAAE,YAAAC,CAAY,IAAa,CACpD,KAAM,CAACC,EAAWC,CAAY,KAAI,YAAiBtyH,GAAe,eAAe,EAE3EuyH,EAAO,CACX,CAAE,MAAO,mBAAoB,MAAOvyH,GAAe,eAAgB,EACnE,CAAE,MAAO,qBAAsB,MAAOA,GAAe,iBAAkB,CACzE,EAEMwyH,EAAsBpyH,GAAkB,CAC5CgyH,EAAYhyH,CAAK,EACjBkyH,EAAalyH,CAAK,CACpB,EAEA,SACE,mBACE,mBAACqyH,GAAA,EAAO,CACL,SAAAF,EAAK,IAAI,CAAC7uG,EAAGpR,OACZ,OAACogH,GAAA,GAEC,MAAOhvG,EAAE,MACT,OAAQA,EAAE,QAAU2uG,EACpB,YAAa,IAAMG,EAAmB9uG,EAAE,KAAM,GAHzC,GAAGA,EAAE,KAAK,IAAIpR,CAAK,EAI1B,CACD,EACH,EACF,CAEJ,ECVO,SAASqgH,IAAiB,CAC/B,MAAMC,KAAc7pH,GAAA,GAAc8pH,EAAkB,EAC9CC,EAAgBF,GAAa,MAAM,SAAS,cAC5CrtH,KAAS,OAAW,EAAS,EAE7B,CAAC8sH,EAAWC,CAAY,KAAI,YAAiBtyH,GAAe,eAAe,EAE3E+yH,KAAO,WAAQ,IAAM,CACzB,MAAMnvG,EAAIgvG,GAAa,MACjBx0F,EAAuB00F,EAC7B,GAAI,EAAE10F,GAASA,EAAM,QAAU,CAACxa,EAC9B,OAAO,IAAIovG,GAAA,EAA8B,CAAE,GAAI,OAAQ,MAAO,MAAO,CAAC,EAGxE,MAAMC,EAAY5sH,GAAgD,CAC5DgsH,IAAcryH,GAAe,mBAC/BqG,EAAQ,iBAAiB6rH,GAAeY,CAAa,CAAC,EAGxD,MAAMnuB,EAAqBvmE,EAAM,mBAC7BumE,GAAsB0tB,IAAcryH,GAAe,iBACrDqG,EAAQ,iBACN4vG,GAAoB,CAClB,SAAU,CAAC,qBAAqB,EAChC,WAAYtR,EACZ,MAAOvmE,EAAM,KACf,CAAC,CACH,EAGF,MAAMrtB,EAAYqtB,EAAM,SACxB,GAAIrtB,GAAW,SAAW,GAAKshH,IAAcryH,GAAe,gBAAiB,CAC3E,MAAM4O,EAAUmC,EAAU,CAAC,EACvBnC,GAAW,EAAEA,aAAmBoC,KAClC3K,EAAQ,iBACN8xG,GAAiB,CACf,SAAU,IACR,KAAE,oDAAqD,iCAAkC,CACvF,QAASvpG,EAAQ,QAAQ,IAC3B,CAAC,CACH,EACA,QAAAA,EACA,MAAOwvB,EAAM,KACf,CAAC,CACH,CAEJ,CAEA80F,GAA+B7sH,CAAO,CACxC,EAEA,OAAO8sH,GACL,CACE,QAASvvG,EAAE,MAAM,QACjB,SAAUA,EAAE,MAAM,gBAClB,KAAMA,EAAE,MAAM,MAAM,MACtB,EACAqvG,CACF,CACF,EAAG,CAACH,EAAeF,EAAaP,CAAS,CAAC,EAEpCe,EAA8B,CAClC,WAAY,GACZ,UAAW,EACb,EAEMhB,EAAeiB,GAAgB,CACnCf,EAAae,CAAG,CAClB,EAEM5jB,EAAcv+F,GAAgB4hH,GAAe,MAAM,uBAAuB,EAAE,QAC5ElhH,EAAoCkhH,GAAe,MAEnDQ,EACJR,GACAT,IAAcryH,GAAe,iBAC7B8yH,EAAc,SAAS,SAAW,GAClCA,EAAc,qBAAuB,OAEvC,SACE,oBACE,oBAAC,OAAI,MAAOM,EAA8B,SAAAL,EAAK,MAAM,IAAKpnH,GAASA,EAAK,OAAO,CAAC,EAAE,KAClF,OAAC,OAAI,MAAOynH,EACV,mBAACnB,GAAA,GACC,SAAWtgH,GAAQD,GAAUC,EAAKC,CAAS,EAC3C,QAAS69F,EACT,SAAO,KAAE,yCAA0C,UAAU,EAC/D,EACF,KACA,QAAC,OAAI,MAAO2jB,EACV,oBAACjB,GAAU,CAAC,YAAAC,CAAA,CAA0B,EACrCW,EAAK,WAAW,IAAKnvG,GAAM2vG,GAAoC3vG,CAAC,CAAC,EACjE0vG,MACC,OAAC,OAAI,UAAW/tH,EAAO,cACrB,mBAAC,KAAK,CAAC,QAAQ,mDAAmD,oCAAwB,EAC5F,GAEJ,GACF,CAEJ,CAGA,SAASguH,GAAoCR,EAAqC,CAChF,SACE,iBAACS,GAAA,EAAmB,CAAE,GAAGT,EAAK,MAAO,IAAKA,EAAK,MAAM,OACnD,OAAC,OAAK,SAAAA,EAAK,MAAM,IAAKxiH,GAAMA,EAAE,OAAO,CAAC,EAAE,EACvCwiH,EAAK,WAAW,IAAK1gH,GAAMkhH,GAAoClhH,CAAC,CAAC,CACpE,CAEJ,CAQA,SAAS8gH,GACPzsH,EACAusH,EAC+B,CAC/B,MAAMjwH,EAAmD,CACvD,KAAM0D,EAAM,MAAQ,CAAC,EACrB,QAASA,EAAM,OACjB,EAEMosG,EAAO,IAAIkgB,GAAA,EAA8B,CAAE,GAAI,OAAQ,MAAO,MAAO,CAAC,EACtES,EAA0BC,GAA4D,CAC1F,GAAIA,GAAe,OAAQ,CACzB,MAAM5yH,EAAM4yH,EAAc,CAAC,EAC3B,IAAIl2F,EAAMs1E,EAAK,WAAW,KAAMviG,GAAMA,EAAE,MAAM,KAAOzP,CAAG,EACxD,OAAK08B,IACHA,EAAM,IAAIw1F,GAAA,EAA8B,CAAE,GAAIlyH,EAAK,MAAOA,CAAI,CAAC,EAC/DgyG,EAAK,WAAW,KAAKt1E,CAAG,GAEnBA,CACT,CACA,OAAOs1E,CACT,EAEM6gB,EAA4B,CAChC,SAAWprH,MAAS2tG,GAAA,KAAUxvG,EAAM,QAAS6B,CAAI,EACjD,SAAU,CAACA,EAAMnI,IAAU,CACzBsG,EAAM,YAAS,OAAsBA,EAAM,QAAS6B,EAAMnI,CAAK,CAAC,CAClE,CACF,EAGA,gBAAqB,gBAAiB6yH,EAAUU,EAAQF,EAAwBzwH,CAAO,EAChF8vG,CACT,CAEA,MAAM,GAAahtG,IAA0B,CAC3C,iBAAe,OAAI,CACjB,MAAOA,EAAM,OAAO,KAAK,UACzB,QAASA,EAAM,QAAQ,CAAC,CAC1B,CAAC,CACH,GCtKM8tH,GAAW,GACXC,GAAW,GAEV,SAASC,GAAW,CAAE,QAAAzjB,EAAS,GAAA9yF,EAAI,MAAA3U,CAAM,EAAU,CACxD,MAAMkqG,EAAOlqG,EAAM,KAAK,KAAK,sBAAsB,EAC7CmrH,EAAe,OAAO,YACtBC,EAAc,OAAO,WACrBr3F,KAAM,UAAuB,IAAI,EACjCp3B,KAAS,OAAW,EAAS,EAC7B0uH,EAAgB,kBAAoB12G,EAAG,SAAS,EAEhD22G,EAAsB,CAAE,MAAO,IAAK,OAAQ,GAAI,EAChD1kE,EAAcsjD,GAAM,OAASohB,EAAoB,MAAQN,GAAW,EACpEO,EAAWrhB,GAAM,GAAK,EAAItjD,EAAc0kE,EAAoB,MAAQN,GACpEQ,EAAWthB,GAAM,GAAK,EAAI+gB,GAE1BQ,EAAiB1rG,GAAA,EAAM,UAAUsrG,EAAe,CACpD,EAAGE,EACH,EAAGC,EACH,EAAGF,EAAoB,MACvB,EAAGA,EAAoB,MACzB,CAAC,EACK,CAACI,EAAcC,CAAe,KAAI,YAAuB,CAAE,MAAOF,EAAe,EAAG,OAAQA,EAAe,CAAE,CAAC,EAC9G,CAACjoH,EAAWooH,CAAY,KAAI,YAAS,CAAE,EAAGH,EAAe,EAAG,EAAGA,EAAe,CAAE,CAAC,KAGvF,aAAU,IAAM,CACd,MAAMhoF,EAAO2nF,EAAcM,EAAa,MAAQV,GAC1CtnF,EAAOynF,EAAeO,EAAa,OAAST,GAC9CxnF,EAAOjgC,EAAU,GAAKigC,EAAO,GAC/BmoF,EAAa,CAAE,GAAGpoH,EAAW,EAAGigC,CAAK,CAAC,EAEpCC,EAAOlgC,EAAU,GAAKkgC,EAAO,GAC/BkoF,EAAa,CAAE,GAAGpoH,EAAW,EAAGkgC,CAAK,CAAC,CAE1C,EAAG,CAACynF,EAAcC,EAAa5nH,EAAWkoH,CAAY,CAAC,EAEvD,MAAMG,EAAoC,CAAC9pH,EAAO6rF,IAAgB,CAChE,IAAI1iF,EAAI0iF,EAAY,EAAI,EAAI,EAAIA,EAAY,EACxCziF,EAAIyiF,EAAY,EAAI,EAAI,EAAIA,EAAY,EAE5Cg+B,EAAa,CAAE,EAAA1gH,EAAM,EAAAC,CAAK,CAAC,EAC3B2gH,EAAY5gH,EAAGC,EAAGugH,EAAa,MAAOA,EAAa,MAAM,CAC3D,EAEMK,EAAe,CAAChqH,EAAuCjI,IAA6B,CACxF,KAAM,CAAE,KAAA8V,CAAK,EAAI9V,EACjB6xH,EAAgB,CAAE,MAAO/7G,EAAK,MAAO,OAAQA,EAAK,MAAO,CAAC,EAC1Dk8G,EAAYtoH,EAAU,EAAGA,EAAU,EAAGoM,EAAK,MAAOA,EAAK,MAAM,CAC/D,EAEMk8G,EAAc,CAAC5gH,EAAWC,EAAWjE,EAAe7D,IAAmB,CAC3E0c,GAAA,EAAM,UAAUsrG,EAAe,CAAE,EAAAngH,EAAM,EAAAC,EAAM,EAAGjE,EAAO,EAAG7D,CAAO,CAAC,CACpE,EAEA,SACE,OAAC,MAAM,CACL,mBAAC,OAAI,UAAW1G,EAAO,iBACrB,mBAAC,KAAS,CAAC,OAAO,SAAS,OAAQkvH,EAAY,SAAU,CAAE,EAAGroH,EAAU,EAAG,EAAGA,EAAU,CAAE,EACxF,mBAAC,aAAS,CAAC,OAAQkoH,EAAa,OAAQ,MAAOA,EAAa,MAAO,SAAUK,EAC3E,oBAAC,OACC,UAAWpvH,EAAO,sBAClB,MAAO,CAAE,OAAQ,GAAG+uH,EAAa,MAAM,KAAM,MAAO,GAAGA,EAAa,KAAK,IAAK,EAC9E,IAAA33F,EAEA,qBAAC,UAAO,UAAWp3B,EAAO,mBACxB,oBAAC,OAAI,UAAWA,EAAO,YAAa,KACpC,OAAC,OACC,mBAAC,KAAK,CAAC,QAAQ,0CAA0C,gCAAoB,EAC/E,KACA,OAAC9D,GAAA,GACC,KAAK,QACL,KAAK,KACL,UAAW8D,EAAO,kBAClB,QAAS8qG,EACT,WAAS,KAAE,iDAAkD,qBAAqB,EACpF,GACF,KACA,OAAC,OAAI,UAAW9qG,EAAO,2BACrB,mBAAC,OAAI,UAAWA,EAAO,oBACrB,mBAACotH,GAAc,EAAC,EAClB,EACF,GACF,EACF,EACF,EACF,EACF,CAEJ,CAEA,MAAM,GAAa7sH,IAA0B,CAC3C,yBAAuB,OAAI,CACzB,QAAS,OACT,cAAe,SACf,WAAYA,EAAM,WAAW,MAAM,WACnC,OAAQ,aAAaA,EAAM,OAAO,OAAO,IAAI,GAC7C,UAAWA,EAAM,QAAQ,GACzB,OAAQ,IACR,QAAS,EACT,SAAU,OACZ,CAAC,EACD,oBAAkB,OAAI,CACpB,MAAO,EACP,OAAQ,CACV,CAAC,EACD,sBAAoB,OAAI,CACtB,QAAS,OACT,WAAY,SACZ,eAAgB,SAChB,WAAYA,EAAM,OAAO,WAAW,OACpC,aAAc,aAAaA,EAAM,OAAO,OAAO,IAAI,GACnD,OAAQ,OACR,OAAQ,MACV,CAAC,EACD,uBAAqB,OAAI,CACvB,WAAY,WACZ,QAAS,MACX,CAAC,EACD,qBAAmB,OAAI,CACrB,WAAY,MACd,CAAC,EACD,eAAa,OAAI,CACf,MAAO,OACP,OAAQ,OACR,WAAY,SACZ,YAAa,MACf,CAAC,EACD,8BAA4B,OAAI,CAC9B,SAAU,QACZ,CAAC,CACH,GCjHA,IAAI8uH,GAAiC,CAAC,EAClCC,GACAC,GAAmB,GACnBC,GAAsB,GAEnB,MAAMlC,GAAqB,IAAI1gB,GAAA,EAA+B,CAAC,EAE/D,MAAM6iB,WAAoB,WAAwB,CAWvD,YAAYtuH,EAAc,CACxB,MAAMA,CAAK,EANb,KAAQ,KAAO,IAAIuuH,GAAA,GACnB,KAAQ,kBAAoB,GAC5B,iBAAc,GACd,eAAY,MAAgB,gBAAgB,EAAE,YAAc,OA6I5D,mBAAiBniB,GAA6B,CAC5C,KAAM,CAAE,gBAAAoiB,EAAiB,QAAAlvH,CAAQ,EAAI,KAAK,MAC1CkvH,EAAgB,CAAE,GAAGlvH,EAAS,KAAA8sG,CAAK,CAAC,EAEpC,KAAK,SAAS,CAAE,QAAS,KAAK,MAAM,QAAU,CAAE,CAAC,EACjD+f,GAAmB,KAAK,CAAE,MAAO,IAAK,CAAC,CACzC,EAsEA,oBAAiB,IAAM,CACrB,GAAIiC,GAAkB,CACpB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,MACF,CAEA,KAAK,eAAe,EACpB,KAAK,SAAS,CAAE,eAAgB,EAAK,CAAC,EACtCA,GAAmB,EACrB,EAEA,uBAAqBjjH,GAA6B,CAChD,GAAIkjH,GAAqB,CACvB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,MACF,CAEA,KAAK,eAAe,EACpB,KAAK,SAAS,CAAE,kBAAmB,EAAK,CAAC,EACzC,KAAK,SAAS,CAAE,uBAAwBljH,CAAY,CAAC,EAErDkjH,GAAsB,EACxB,EAEA,qBAAmBzhB,GAA8C,CAC/D,KAAK,MAAM,eAAiBA,EAC5B,KAAK,YAAY,CACnB,EAEA,4BAA0B/wE,GAAqB,CAC7C,KAAK,SAAS,CAAE,eAAgBA,CAAQ,CAAC,EACzC,KAAK,YAAY,CACnB,EAEA,gCAA6B,IAAM,CACjC,KAAK,YAAY,CACnB,EAEA,qBAAkB,IAAM,CACtB,KAAK,SAAS,CAAE,eAAgB,EAAM,CAAC,EACvCuyF,GAAmB,EACrB,EAEA,wBAAqB,IAAM,CACzB,KAAK,SAAS,CAAE,kBAAmB,EAAM,CAAC,EAC1CC,GAAsB,EACxB,EAEA,oBAAiB,IAAM,CACrBF,GAAoB,KACpBhC,GAAmB,KAAK,CAAE,MAAO,IAAK,CAAC,CACzC,EAEA,sBAAmB,OACV,OAACiB,GAAU,CAAC,QAAS,IAAM,KAAK,gBAAgB,EAAG,GAAI,KAAK,MAAM,GAAI,MAAO,KAAK,MAAO,EAGlG,yBAAsB,OAElB,OAAC5f,GAAA,CACC,QAAS,IAAM,KAAK,mBAAmB,EACvC,MAAO,KAAK,MACZ,YAAa,KAAK,MAAM,uBAC1B,EAtRF,KAAK,MAAQ,CACX,QAAS,EACT,eAAgB,GAChB,kBAAmB,GACnB,uBAAwB,CAAE,EAAG,EAAG,EAAG,CAAE,EACrC,eAAgB,EAClB,EAIA,KAAK,MAAQ,IAAIjC,GAAM,KAAK,MAAM,QAAS,KAAK,cAAe,IAAI,EACnE,KAAK,MAAM,WAAWvrG,EAAM,MAAOA,EAAM,MAAM,EAC/C,KAAK,MAAM,WAAWA,EAAM,IAAI,EAChC,KAAK,MAAM,sBAAwB,KAAK,eACxC,KAAK,MAAM,sBAAwB,KAAK,kBACxC,KAAK,MAAM,gBAAkB,KAAK,gBAClC,KAAK,MAAM,uBAAyB,KAAK,uBACzC,KAAK,MAAM,2BAA6B,KAAK,2BAE7C,KAAK,KAAK,IACR,KAAK,MAAM,SAAS,UAAU,MAAwBmkG,GAA+B,CAEnF,KAAK,MAAM,sBAAsB,EACjC,KAAK,gBAAgB,CACvB,CAAC,CACH,EAEA,KAAK,KAAK,IACR,KAAK,MAAM,SAAS,UAAU,MAAuBA,GAA8B,CAC7E,KAAK,MAAM,KAAOA,EAAI,UACxB,KAAK,YAAc,GACnB,KAAK,MAAM,sBAAsB,EAErC,CAAC,CACH,CACF,CA9CA,MAAO,CAAP,KAAO,YAAcsqB,GAAA,GAgDrB,mBAAoB,CAClBN,GAAoB,KACpBhC,GAAmB,KAAK,CAAE,MAAO,IAAK,CAAC,EAEvC,KAAK,aAAe,KAAK,QAErB,KAAK,MAAM,MACb,KAAK,MAAM,WAAW,KAAK,MAAM,IAAI,EAGnC,KAAK,aAAa,wBACpB,KAAK,aAAa,sBAAsB,CAAE,MAAO,KAAK,MAAO,MAAO,KAAK,MAAM,IAAK,CAAC,EAErF,KAAK,KAAK,IACR,KAAK,MAAM,UAAU,UAAU,CAC7B,KAAOtiH,GAAM,CACPA,EAAE,SACJskH,GAAoB,KACpBhC,GAAmB,KAAK,CAAE,MAAO,IAAK,CAAC,GAGzC+B,GAAgB,QAASQ,GAAmB,CACtCA,IAAmBP,KACrBO,EAAe,MAAM,sBAAsB,EAAI,EAC/CA,EAAe,MAAM,YAAY,OAAO,MAAS,EAErD,CAAC,EAED,KAAK,cAAc,sBAAuB,CAAE,MAAO,KAAK,MAAO,SAAU7kH,EAAG,MAAO,KAAK,MAAM,IAAK,CAAC,CACtG,CACF,CAAC,CACH,EAEA,KAAK,KAAK,IACR,KAAK,MAAM,YAAY,UAAU,UAAU,CACzC,KAAOA,GAAM,CACN,KAAK,QAAQ,gBAIlB,KAAK,cAAc,sBAAuB,CACxC,MAAO,KAAK,MACZ,SAAU,KAAK,QAAQ,cAAc,SACrC,mBAAoBA,EACpB,MAAO,KAAK,MAAM,IACpB,CAAC,EAEGA,IACFskH,GAAoB,KACpBhC,GAAmB,KAAK,CAAE,MAAO,IAAK,CAAC,GAGzC+B,GAAgB,QAASQ,GAAmB,CACtCA,IAAmBP,KACrBO,EAAe,MAAM,sBAAsB,EAAI,EAC/CA,EAAe,MAAM,YAAY,OAAO,MAAS,EAErD,CAAC,EAED,WAAW,IAAM,CACf,KAAK,YAAY,CACnB,CAAC,EACH,CACF,CAAC,CACH,GAIE,KAAK,YACP,KAAK,kBAAoB,IAG3BR,GAAgB,KAAK,IAAI,CAC3B,CAEA,mBAAmBh3F,EAAkB,CAE/B,KAAK,WAAa,CAAC,KAAK,oBACAA,EAAU,QAAU,KAAK,MAAM,OAASA,EAAU,SAAW,KAAK,MAAM,UAGhG,KAAK,kBAAoB,GAEzB,sBAAsB,IAAM,CAC1B,KAAK,MAAM,WAAW,KAAK,MAAM,MAAO,KAAK,MAAM,MAAM,CAC3D,CAAC,EAGP,CAEA,sBAAuB,CACrB,KAAK,MAAM,aAAa,YAAY,EACpC,KAAK,KAAK,YAAY,EACtBk3F,GAAmB,GACnBC,GAAsB,GACtBH,GAAkBA,GAAgB,OAAQS,GAAOA,EAAG,MAAM,KAAOR,IAAmB,MAAM,EAAE,CAC9F,CAYA,sBAAsB91F,EAAkBhC,EAAkB,CACxD,KAAM,CAAE,MAAAjtB,EAAO,OAAA7D,EAAQ,KAAAvJ,EAAM,QAAAsD,CAAQ,EAAI,KAAK,MAC9C,IAAIqzB,EAAU,IAEVvpB,IAAUivB,EAAU,OAAS9yB,IAAW8yB,EAAU,UACpD,KAAK,MAAM,WAAWA,EAAU,MAAOA,EAAU,MAAM,EACvD1F,EAAU,IAGR32B,IAASq8B,EAAU,MAAQ,CAAC,KAAK,MAAM,mBACzC,KAAK,MAAM,WAAWA,EAAU,IAAI,EACpC1F,EAAU,IAGRrzB,IAAY+4B,EAAU,SAAW,CAAC,KAAK,MAAM,mBAC/C,KAAK,MAAM,WAAWA,EAAU,IAAI,EACpC1F,EAAU,IAGR,KAAK,MAAM,UAAY0D,EAAU,UACnC1D,EAAU,IAGR,KAAK,MAAM,iBAAmB0D,EAAU,iBAC1C1D,EAAU,IAGR,KAAK,MAAM,oBAAsB0D,EAAU,oBAC7C1D,EAAU,IAGR,KAAK,MAAM,iBAAmB0D,EAAU,iBAC1C1D,EAAU,IAIZ,MAAMi8F,EAAwB,KAAK,MAAM,QAAQ,gBAAkBv2F,EAAU,QAAQ,cAC/Ew2F,EACJ,KAAK,MAAM,QAAQ,oBAAsBx2F,EAAU,QAAQ,kBACvDy2F,EAAkB,KAAK,MAAM,QAAQ,UAAYz2F,EAAU,QAAQ,QACnE02F,EAAwB,KAAK,MAAM,QAAQ,gBAAkB12F,EAAU,QAAQ,cAC/E22F,EAAsB,KAAK,MAAM,QAAQ,SAAS,OAAS32F,EAAU,QAAQ,SAAS,KACtF42F,EACJ,KAAK,MAAM,QAAQ,SAAS,qBAAuB52F,EAAU,QAAQ,SAAS,mBAChF,OACE,KAAK,aACLu2F,GACAC,GACAC,GACAC,GACAC,GACAC,KAEIL,GAEF,KAAK,MAAM,QAGb,KAAK,YAAc,GACnB,KAAK,MAAM,KAAKv2F,EAAU,QAASA,EAAU,QAAQ,aAAa,EAClE,KAAK,MAAM,WAAWA,EAAU,MAAOA,EAAU,MAAM,EACvD,KAAK,MAAM,WAAWA,EAAU,IAAI,EACpC1F,EAAU,IAGLA,CACT,CAuEA,QAAS,CACP,SACE,oBACG,eAAK,MAAM,OAAO,EAClB,KAAK,MAAM,gBAAkB,KAAK,iBAAiB,EACnD,KAAK,MAAM,mBAAqB,KAAK,oBAAoB,GAC5D,CAEJ,CACF,C,gBCtVA,MAAMu8F,GAAU,uFAEHC,GAAc,CAAC,CAAC,IAA8D,CACzF,MAAMtwH,KAAS,OAAW,EAAS,EAEnC,SACE,mBACE,mBAAChE,GAAA,EAAK,CAAC,UAAU,MACf,mBAACu0H,GAAA,GACC,SAAO,KAAE,mDAAoD,uBAAuB,EACpF,SAAS,OACT,iBAAe,OAAC7d,GAAA,EAAI,CAAC,KAAK,kBAAkB,KAAK,IAAK,GACtD,UAAW1yG,EAAO,MAClB,SAAU,IAAM,CACd,MAAMwwH,EAAY,OAAO,KAAKH,GAAS,SAAU,qBAAqB,EAClEG,IACFA,EAAU,OAAS,KAEvB,EAEA,mBAACx0H,GAAA,EAAK,CAAC,UAAU,SACf,oBAAC,MACC,qBAAC,MACC,oBAAC,KAAK,CAAC,QAAQ,iCAAiC,gBAAI,KACpD,QAAC,MACC,oBAAC,MACC,mBAAC,KAAK,CAAC,QAAQ,oCAAoC,wBAAY,EACjE,KACA,OAAC,MACC,mBAAC,KAAK,CAAC,QAAQ,wCAAwC,8BAAkB,EAC3E,GACF,GACF,KACA,OAAC,MACC,mBAAC,KAAK,CAAC,QAAQ,yCAAyC,8BAAkB,EAC5E,KACA,OAAC,MACC,mBAAC,KAAK,CAAC,QAAQ,0CAA0C,+BAAmB,EAC9E,GACF,EACF,EACF,EACF,EACF,CAEJ,EAEM,GAAauE,IAA0B,CAC3C,SAAO,OAAI,CACT,QAAS,CAAE,QAAS,MAAO,WAAY,OAAQ,EAC/C,aAAc,MACd,UAAW,MACX,QAAS,MACT,UAAW,CAAE,WAAY,MAAO,CAClC,CAAC,CACH,GCzDakwH,GAA0B7zH,GAAwC,CAC7E,MAAM8zH,EAAgB9zH,GAAO,eAAiB,GAI9C,GAAI8zH,IAAkB,GAAI,CACxB,MAAMnjB,EAAO3wG,EAAM,SAAS,KAC5B,GAAI2wG,GAAM,SACR,UAAWlkG,KAAWkkG,EAAK,SACrBlkG,EAAQ,OAAS,aACnBA,EAAQ,KAAO,YAIvB,CAEA,GAAIqnH,EAAc,WAAW,MAAM,EAAG,CAEpC,MAAMnjB,EAAO3wG,EAAM,SAAS,KAC5B,GAAI2wG,GAAM,SACR,UAAWlkG,KAAWkkG,EAAK,SACrBlkG,EAAQ,OAAS,YAEfA,EAAQ,OAAO,kBACjBA,EAAQ,WAAaA,EAAQ,OAAO,gBACpC,OAAOA,EAAQ,OAAO,iBAEpBA,EAAQ,OAAO,cACjBA,EAAQ,OAAO,MAAQA,EAAQ,OAAO,YACtC,OAAOA,EAAQ,OAAO,aAEpBA,EAAQ,OAAO,QACjBA,EAAQ,OAAO,MAAQA,EAAQ,OAAO,MACtC,OAAOA,EAAQ,OAAO,OAKhC,CAEA,GAAI,WAAWqnH,CAAa,GAAK,KAAM,CACrC,MAAMnjB,EAAO3wG,EAAM,SAAS,KAC5B,GAAI2wG,GAAM,UACR,UAAWlkG,KAAWkkG,EAAK,SAEzB,GAAIlkG,EAAQ,QACV,UAAWrB,KAAUqB,EAAQ,QACvBrB,EAAO,UACTA,EAAO,MAAQ,CAAE,GAAGA,EAAO,OAAQ,EACnC,OAAOA,EAAO,SAM1B,CAGA,GAAI,WAAW0oH,CAAa,GAAK,KAAM,CACrC,MAAMnjB,EAAO3wG,EAAM,SAAS,KAC5B,GAAI2wG,GAAM,SACR,UAAWlkG,KAAWkkG,EAAK,UACpBlkG,EAAQ,eAAiB,MAAa,MAAQA,EAAQ,gBAAkBA,EAAQ,OAAO,OAC1FA,EAAQ,MAAM,CAAC,EAAE,SAAW,GACnBA,EAAQ,eAAiB,MAAa,QAAUA,EAAQ,SAAS,SAC1EA,EAAQ,QAAQ,CAAC,EAAE,SAAW,IAGhC,OAAOA,EAAQ,aACf,OAAOA,EAAQ,aAGrB,CAGA,GAAI,WAAWqnH,CAAa,GAAK,KAAM,CACrC,MAAMnjB,EAAO3wG,EAAM,SAAS,KAC5B,GAAI2wG,GAAM,SACR,UAAWlkG,KAAWkkG,EAAK,SACzB,UAAWliG,KAAchC,EAAQ,aAAe,CAAC,EAC3CgC,EAAW,WAAa,OAAOA,EAAW,WAAc,SAE1DA,EAAW,UAAY,CACrB,KAAM,QACN,MAAOA,EAAW,SACpB,EACUA,EAAW,YACrBA,EAAW,UAAY,CACrB,KAAM,QACN,MAAO,SACT,EAKV,CAEA,OAAOzO,EAAM,OACf,ECxFa+wH,GAAkC7sH,GAAgD,CAC7F,IAAIC,EAAW,IAAC,KAAE,yBAA0B,QAAQ,CAAC,EACrDD,EAAQ,iBAAiB,CACvB,KAAM,gBACN,QAAM,KAAE,6BAA8B,gBAAgB,EACtD,SAAAC,EACA,eAAa,KAAE,oCAAqC,mCAAmC,EACvF,aAAc,EAChB,CAAC,EAEDD,EAAQ,iBAAiB,CACvB,KAAM,oBACN,QAAM,KAAE,iCAAkC,4BAA4B,EACtE,SAAAC,EACA,eAAa,KAAE,wCAAyC,gDAAgD,EACxG,aAAc,EAChB,CAAC,EAEDD,EAAQ,iBAAiB,CACvB,KAAM,UACN,QAAM,KAAE,uBAAwB,cAAc,EAC9C,SAAAC,EACA,eAAa,KAAE,8BAA+B,qBAAqB,EACnE,aAAc,GACd,OAAQ,IAAMzG,GAAA,EAAO,eAAe,kBACtC,CAAC,EACDwG,EAAQ,gBAAgB,CACtB,GAAI,cACJ,KAAM,cACN,KAAM,GACN,SAAAC,EACA,OAAQuvH,GACR,OAASr/G,GAAS3W,GAAA,EAAO,eAAe,oBAAsB2W,EAAK,OACrE,CAAC,EACDnQ,EAAQ,iBAAiB,CACvB,KAAM,gBACN,KAAM,kBACN,YAAa,oCACb,aAAc,GACd,OAAQ,IAAMxG,GAAA,EAAO,eAAe,kBACtC,CAAC,EAEDyG,EAAW,IAAC,KAAE,0BAA2B,SAAS,CAAC,EAEnDD,EAAQ,SAAS,CACf,KAAM,eACN,QAAM,KAAE,2CAA4C,cAAc,EAClE,SAAAC,EACA,aAAc,MAAmB,OACjC,SAAU,CACR,QAAS,CACP,CACE,MAAO,MAAmB,OAC1B,SAAO,KAAE,4DAA6D,SAAS,CACjF,EACA,CACE,MAAO,MAAmB,KAC1B,SAAO,KAAE,6DAA8D,UAAU,CACnF,CACF,CACF,CACF,CAAC,EAEDD,EAAQ,iBAAiB,CACvB,KAAM,6BACN,QAAM,KAAE,iDAAkD,gCAAgC,EAC1F,SAAAC,EACA,aAAc,GACd,OAASN,GAAYA,EAAQ,SAAS,OAAS,MAAmB,IACpE,CAAC,CACH,EAEa,GAAS,IAAIkwH,GAAA,EAAqBlB,EAAW,EACvD,aAAa,EACb,eAAe,CACd,gBAAiB,CACf,CAAC,MAAoB,QAAQ,EAAG,CAC9B,SAAU,CACR,KAAM,EACR,CACF,EACA,CAAC,MAAoB,KAAK,EAAG,CAC3B,SAAU,CACR,aAAc,EAChB,CACF,EACA,CAAC,MAAoB,OAAO,EAAG,CAC7B,SAAU,CACR,aAAc,EAChB,CACF,CACF,CACF,CAAC,EACA,oBAAoBgB,GAAyB7zH,GAAU,CACtD,MAAM8zH,EAAgB9zH,GAAO,eAAiB,GAC9C,OAAO,WAAW8zH,CAAa,GAAK,IACtC,CAAC,EACA,gBAAgB,CAAC5vH,EAASrD,IAAY,CACrC,MAAMo7B,EAAuBp7B,EAAQ,cAIrC,GAFAkwH,GAA+B7sH,CAAO,EAElC+3B,GAASA,EAAM,MAAO,CACxB/3B,EAAQ,iBAAiB6rH,GAAe9zF,CAAK,CAAC,EAE9C,MAAMrtB,EAAYqtB,EAAM,SAClB+3F,EAAsB/3F,EAAM,mBAElC,GAAIrtB,GAAW,SAAW,EAAG,CAC3B,MAAMnC,EAAUmC,EAAU,CAAC,EACrBnC,aAAmBoC,IACvB3K,EAAQ,iBACN8xG,GAAiB,CACf,SAAU,IACR,KAAE,mCAAoC,iCAAkC,CACtE,QAASvpG,EAAQ,QAAQ,IAC3B,CAAC,CACH,EACA,QAAAA,EACA,MAAOwvB,EAAM,KACf,CAAC,CACH,CAEJ,CAEI+3F,GACF9vH,EAAQ,iBACN4vG,GAAoB,CAClB,SAAU,IAAC,KAAE,sCAAuC,qBAAqB,CAAC,EAC1E,WAAYkgB,EACZ,MAAO/3F,EAAM,KACf,CAAC,CACH,CAEJ,CACF,CAAC,C,0FCvII,MAAMkzE,GAAmB,CAAC,CAAE,KAAM,CAAE,MAAAiB,GAAO,MAAAnyG,EAAO,MAAAiQ,GAAO,eAAA+lH,EAAe,EAAG,SAAAC,CAAS,IAAa,CACtG,MAAM9wH,MAAS,MAAWC,CAAS,EACnC,SACE,QAAC,OAAI,UAAWD,GACd,oBAAC,MACC,MAAAgtG,GACA,MAAAnyG,EACA,MAAAiQ,GACA,eAAA+lH,GACA,YAAa,OACb,SAAAC,CAAA,CACF,EACF,CAEJ,EAEM7wH,EAAaM,OACjB,QAAI,CACF,QAAS,OACT,cAAe,SACf,KAAM,EACN,QAASA,GAAM,QAAQ,CAAC,EACxB,WAAY,CACd,CAAC,C,0FCnBI,MAAMyrG,GAAoB,CAAC,CAChC,MAAAjgG,GACA,SAAAmwB,EACA,SAAA40F,GACA,WAAAC,GAAa,GACb,UAAAh3G,CACF,IAA8B,CAC5B,MAAM/Z,MAAS,MAAWC,CAAS,EAE7B+wH,GAAiCD,GACnC,CACE,UAAAh3G,EACA,UAAW,MACb,EACA,CAAC,EAEL,SACE,SAAC,OAAI,UAAW/Z,GAAO,QAAS,MAAOgxH,GACpC,UAAAjlH,GAAM,IAAI,CAAC,CAAE,MAAAihG,GAAO,MAAAnyG,GAAO,MAAAiQ,GAAO,eAAA+lH,GAAgB,eAAAI,GAAgB,SAAAC,GAAU,UAAAtgH,GAAW,gBAAAugH,EAAgB,EAAG5+G,OACzG,QAAC,MAEC,MAAAy6F,GACA,MAAAnyG,GACA,MAAAiQ,GACA,eAAA+lH,GACA,eAAAI,GACA,SAAAC,GACA,SAAAJ,GACA,UAAAlgH,GACA,gBAAiB,CAACmgH,GAClB,gBAAAI,EAAA,EAVK5+G,CAWP,CACD,EACA2pB,CAAA,EACH,CAEJ,EAEMj8B,EAAaM,KAA0B,CAC3C,WAAS,QAAI,CACX,QAAS,OACT,cAAe,SACf,KAAM,EACN,IAAK,EACL,UAAW,aAAaA,GAAM,OAAO,OAAO,IAAI,GAChD,QAASA,GAAM,QAAQ,CAAC,CAC1B,CAAC,CACH,E,2KCtDY6wH,IAAAA,IACVA,EAAAA,EAAA,qBACAA,EAAAA,EAAA,uBAFUA,IAAAA,IAAA,IAeL,MAAMC,GAA2B,CAAC,CACvC,MAAAvmH,EAAQ,IACR,eAAA+lH,GAAiB,MACjB,SAAAlwG,GAAW,EACX,UAAA/P,GACA,SAAA0gH,EACF,IAAa,CACX,MAAMtxH,MAAS,OAAWC,EAAS,EAEnC,OAAI4wH,KAAmB,MAAe,QAAU,CAACS,MAE7C,QAACC,GAAA,GACC,MAAAzmH,EACA,UAAA8F,GACA,SAAQ,GACR,aAAW,OACT+P,KAAa,EAAiC3gB,GAAO,QAAUA,GAAO,SACtEA,GAAO,eACT,EACF,KAKF,QAAC,OACC,MAAOsxH,GAAW,CAAE,OAAQ,aAAaxmH,CAAK,EAAG,EAAI,CAAE,gBAAiBA,CAAM,EAC9E,aAAW,OACT6V,KAAa,EAAiC3gB,GAAO,QAAUA,GAAO,YACtE,MAAuB6wH,GAAgB7wH,EAAM,CAC/C,EACF,CAEJ,EAGMC,GAAaM,IAA0B,CAC3C,WAAS,QAAI,CACX,YAAaA,EAAM,QAAQ,EAAG,CAChC,CAAC,EACD,YAAU,QAAI,CACZ,WAAYA,EAAM,QAAQ,EAAG,CAC/B,CAAC,EACD,mBAAiB,QAAI,CACnB,SAAU,WACV,IAAK,EACP,CAAC,EACD,UAAQ,QAAI,CACV,MAAO,OACP,OAAQ,MACR,aAAcA,EAAM,MAAM,OAAO,KACjC,SAAU,MACZ,CAAC,EACD,SAAO,QAAI,CACT,MAAO,OACP,OAAQ,OACR,aAAcA,EAAM,MAAM,OAAO,QACjC,WAAY,IACZ,SAAU,MACZ,CAAC,EACD,WAAS,QAAI,CAAC,CAAC,EACf,WAAS,QAAI,CAAC,CAAC,EACf,WAAS,QAAI,CAAC,CAAC,EACf,WAAS,QAAI,CAAC,CAAC,EACf,aAAW,QAAI,CACb,MAAO,MACP,OAAQ,MACR,aAAcA,EAAM,MAAM,OAAO,OACjC,SAAU,KACZ,CAAC,EACD,aAAW,QAAI,CACb,MAAO,MACP,OAAQ,MACR,aAAcA,EAAM,MAAM,OAAO,OACjC,SAAU,KACZ,CAAC,EACD,aAAW,QAAI,CACb,MAAO,OACP,OAAQ,OACR,aAAcA,EAAM,MAAM,OAAO,OACjC,SAAU,MACZ,CAAC,CACH,GCnFA,IAAKixH,IAAAA,IACHA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QAFLA,IAAAA,IAAA,IAKL,MAAMC,GAA2B,sBAC3BC,GAAwB,EAAI,IAC5BC,GAAyB,EACzBC,GAAW,GAAQ,UAAU,WAAa,OAAO,iBAE1CC,GAAgB,CAAC,CAC5B,MAAA7kB,EACA,MAAAnyG,GACA,MAAAiQ,GACA,eAAA+lH,GACA,eAAAI,GAAiB,MAAe,MAChC,QAAAa,GACA,SAAAZ,GAAW,GACX,YAAAa,GACA,SAAAjB,GACA,UAAAlgH,GACA,gBAAAohH,GACA,gBAAAb,EACF,IAA0B,CACxB,MAAMnxH,MAAS,OAAW,GAAW8xH,GAASC,EAAW,EAEnDE,GAAuCD,GACzC,CACE,UAAW,GACX,WAAY,OACZ,UAAW,aACX,UAAW,MACb,EACA,CACE,WAAY,WACZ,UAAW,aACX,WAAY,GACd,EAEE,CAACE,GAAkBC,EAAmB,KAAI,aAAS,EAAK,EAExD,CAACC,GAAYC,EAAa,KAAI,aAAwC,IAAI,EAC1E,CAACC,GAAiBC,EAAkB,KAAI,aAAS,EAAK,EAEtDC,MAAW,WAA8B,IAAI,EAC7CC,MAAW,WAA8B,IAAI,KAEnD,cAAU,IAAM,CACd,IAAIC,GAEJ,OAAIJ,KACFI,GAAY,WAAW,IAAM,CAC3BH,GAAmB,EAAK,CAC1B,EAAGb,EAAqB,GAGnB,IAAM,CACX,OAAO,aAAagB,EAAS,CAC/B,CACF,EAAG,CAACJ,EAAe,CAAC,EAEpB,MAAMK,GAAkB,MAAOh2H,GAAc8gB,KAA0B,CACrE,GAAI,CAACm0G,GAAU,CACbgB,GAAwBj2H,GAAM8gB,EAAI,EAClC,MACF,CAEA,GAAI,CACF,MAAM,UAAU,UAAU,UAAU9gB,EAAI,EACxC01H,GAAc,CAAE,CAAC,GAAG50G,EAAI,EAAE,EAAG9gB,EAAK,CAAC,EACnC41H,GAAmB,EAAI,CACzB,MAAgB,CACdF,GAAc,IAAI,CACpB,CACF,EAEMO,GAA0B,CAACj2H,GAAc8gB,KAA0B,CAEvE,MAAMo1G,GAAW,SAAS,cAAc,UAAU,EAClDL,GAAS,SAAS,YAAYK,EAAQ,EACtCA,GAAS,MAAQl2H,GACjBk2H,GAAS,MAAM,EACfA,GAAS,OAAO,EAChB,GAAI,CACiB,SAAS,YAAY,MAAM,IAE5CR,GAAc,CAAE,CAAC,GAAG50G,EAAI,EAAE,EAAG9gB,EAAK,CAAC,EACnC41H,GAAmB,EAAI,EAE3B,OAASO,GAAK,CACZ,QAAQ,MAAM,8BAA+BA,EAAG,CAClD,CAEAD,GAAS,OAAO,CAClB,EAEME,GAAqB3tH,IAA4C,CACjEA,GAAM,cAAc,YAAcA,GAAM,cAAc,aACxD+sH,GAAoB,EAAI,CAE5B,EAEMa,GAAoB,IAAMb,GAAoB,EAAK,EAGzD,OAAInlB,EAAM,OAAS2kB,GAAyB,OAAO,WAAa,IAC9D3kB,EAAQA,EAAM,WAAW,IAAK;AAAA,GAAO,EAAE,WAAW,IAAK;AAAA,EAAK,EAAE,WAAW,KAAM;AAAA,GAAO,MAItF,SAAC,OAAI,UAAWhtG,GAAO,eACpB,UAAA8K,IAASmmH,KAAmB,MAAe,UAC1C,QAAC,OAAI,UAAWjxH,GAAO,aACrB,oBAACqxH,GAAA,CACC,MAAAvmH,GACA,eAAA+lH,GACA,UAAAjgH,GACA,SAAUugH,EAAA,CACZ,EACF,EAEDnkB,MACC,QAAC,OAAI,UAAWhtG,GAAO,aACpB,SAAC8wH,MAGA,qBACE,oBAACmC,GAAA,EAAO,CAAC,QAASjmB,EAAO,YAAa,GAAO,KAAMklB,GACjD,kCACG,UAAAI,IAAmBF,IAAY,UAC9B,QAACc,EAAA,EAAW,CAAC,UAAU,MAAM,iBAAkBV,GAAS,QACrD,SAAAf,EAAA,CACH,KAGF,QAAC,OACC,aAAW0B,EAAA,GAAKnzH,GAAO,MAAOkxH,GAAWlxH,GAAO,aAAe,GAAI4xH,GAAW5xH,GAAO,KAAO,EAAE,EAC9F,aAAc+yH,GACd,aAAcC,GACd,QAAS,IAAML,GAAgB3lB,EAAO,OAAqB,EAC3D,IAAKwlB,GAEJ,SAAAxlB,CAAA,CACH,GACF,EACF,EACF,KAtBA,QAAC,OAAI,aAAWmmB,EAAA,GAAKnzH,GAAO,MAAOkxH,GAAWlxH,GAAO,aAAe,EAAE,EAAI,SAAAgtG,CAAA,CAAM,CAsBhF,CAEJ,KAGF,SAAC,OAAI,UAAWhtG,GAAO,aACpB,UAAA8K,IAASmmH,KAAmB,MAAe,YAC1C,QAACI,GAAA,CACC,MAAAvmH,GACA,eAAA+lH,GACA,SAAUO,GAAuB,QACjC,UAAAxgH,EAAA,CACF,EAGAkgH,MAKA,sBACG,UAAAwB,IAAmBF,IAAY,UAC9B,QAACc,EAAA,EAAW,CAAC,UAAU,MAAM,iBAAkBT,GAAS,QACrD,SAAAhB,EAAA,CACH,KAGF,QAAC,OACC,aAAW0B,EAAA,GAAKnzH,GAAO,MAAO4xH,GAAW5xH,GAAO,KAAO,EAAE,EACzD,MAAOiyH,GACP,QAAS,IAAMU,GAAgB93H,GAAQA,GAAM,SAAS,EAAI,GAAI,OAAqB,EACnF,IAAK43H,GAEJ,SAAA53H,EAAA,CACH,GACF,KAnBA,QAAC,OAAI,UAAWmF,GAAO,MAAO,MAAOiyH,GAClC,SAAAp3H,EAAA,CACH,EAoBDiQ,IAASmmH,KAAmB,MAAe,aAC1C,QAACI,GAAA,CACC,MAAAvmH,GACA,eAAA+lH,GACA,SAAUO,GAAuB,SACjC,UAAAxgH,EAAA,CACF,GAEJ,GACF,CAEJ,EAEM,GAAY,CAACrQ,EAAsBuxH,GAAU,QAASC,MAA0B,CACpF,kBAAgB,QAAI,CAClB,QAAS,OACT,SAAU,OACV,WAAY,QACZ,eAAgBD,GAChB,UAAWvxH,EAAM,QAAQ,GAAI,CAC/B,CAAC,EACD,SAAO,QAAI,CAAE,QAAS,QAAS,CAAC,EAChC,SAAO,QAAI,CACT,WAAY,IACZ,aAAc,WACd,SAAU,QACZ,CAAC,EACD,gBAAc,QAAI,CAChB,UAAW,SACX,WAAY,CACd,CAAC,EACD,gBAAc,QAAI,CAChB,SAAU,EACV,SAAU,SACV,aAAc,WACd,MAAOA,EAAM,OAAO,KAAK,UACzB,WAAY,GACd,CAAC,EACD,gBAAc,QAAI,CAChB,QAAS,OACT,WAAY,SACZ,WAAY,EACZ,UAAW,SACX,YAAAwxH,EACF,CAAC,EACD,gBAAc,QAAI,CAChB,WAAYxxH,EAAM,WAAW,eAC7B,MAAOA,EAAM,OAAO,KAAK,WAC3B,CAAC,EACD,QAAM,QAAI,CACR,OAAQ,SACV,CAAC,CACH,E","sources":["webpack://grafana/./public/app/features/canvas/elements/notFound.tsx","webpack://grafana/./public/app/plugins/panel/canvas/types.ts","webpack://grafana/./public/app/plugins/panel/canvas/editor/element/ParamsEditor.tsx","webpack://grafana/./public/app/plugins/panel/canvas/editor/element/utils.ts","webpack://grafana/./public/app/plugins/panel/canvas/editor/element/APIEditor.tsx","webpack://grafana/./public/app/plugins/panel/canvas/editor/element/ButtonStyleEditor.tsx","webpack://grafana/./public/app/features/canvas/element.ts","webpack://grafana/./public/app/features/canvas/types.ts","webpack://grafana/./public/app/features/canvas/elements/button.tsx","webpack://grafana/./public/app/features/canvas/elements/cloud.tsx","webpack://grafana/./public/app/features/canvas/elements/droneFront.tsx","webpack://grafana/./public/app/features/canvas/elements/droneSide.tsx","webpack://grafana/./public/app/features/canvas/elements/droneTop.tsx","webpack://grafana/./public/app/features/canvas/elements/ellipse.tsx","webpack://grafana/./public/app/features/canvas/elements/icon.tsx","webpack://grafana/./public/app/features/canvas/elements/metricValue.tsx","webpack://grafana/./public/app/features/canvas/elements/parallelogram.tsx","webpack://grafana/./public/app/features/canvas/elements/rectangle.tsx","webpack://grafana/./public/app/features/canvas/elements/server/types/database.tsx","webpack://grafana/./public/app/features/canvas/elements/server/types/single.tsx","webpack://grafana/./public/app/features/canvas/elements/server/types/stack.tsx","webpack://grafana/./public/app/features/canvas/elements/server/types/terminal.tsx","webpack://grafana/./public/app/features/canvas/elements/server/server.tsx","webpack://grafana/./public/app/features/canvas/elements/text.tsx","webpack://grafana/./public/app/features/canvas/elements/triangle.tsx","webpack://grafana/./public/app/features/canvas/elements/windTurbine.tsx","webpack://grafana/./public/app/features/canvas/registry.ts","webpack://grafana/./public/app/features/canvas/runtime/element.tsx","webpack://grafana/./public/app/plugins/panel/canvas/utils.ts","webpack://grafana/./node_modules/@daybrush/utils/dist/utils.esm.js","webpack://grafana/./node_modules/@scena/event-emitter/dist/event-emitter.esm.js","webpack://grafana/./node_modules/gesto/dist/gesto.esm.js","webpack://grafana/./node_modules/framework-utils/dist/utils.esm.js","webpack://grafana/./node_modules/css-styled/dist/styled.esm.js","webpack://grafana/./node_modules/@egjs/agent/dist/agent.esm.js","webpack://grafana/./node_modules/infinite-viewer/dist/infinite-viewer.esm.js","webpack://grafana/./node_modules/@egjs/list-differ/dist/list-differ.esm.js","webpack://grafana/./node_modules/croact/dist/croact.esm.js","webpack://grafana/./node_modules/@scena/matrix/dist/matrix.esm.js","webpack://grafana/./node_modules/css-to-mat/dist/css-to-mat.esm.js","webpack://grafana/./node_modules/@egjs/children-differ/dist/children-differ.esm.js","webpack://grafana/./node_modules/@scena/dragscroll/dist/dragscroll.esm.js","webpack://grafana/./node_modules/overlap-area/dist/overlap-area.esm.js","webpack://grafana/./node_modules/croact-css-styled/dist/styled.esm.js","webpack://grafana/./node_modules/croact-moveable/dist/moveable.esm.js","webpack://grafana/./node_modules/moveable/dist/moveable.esm.js","webpack://grafana/./node_modules/keycon/dist/keycon.esm.js","webpack://grafana/./node_modules/selecto/dist/selecto.esm.js","webpack://grafana/./public/app/plugins/panel/canvas/components/connections/ConnectionAnchors.tsx","webpack://grafana/./public/app/features/canvas/runtime/sceneElementManagement.ts","webpack://grafana/./public/app/plugins/panel/canvas/components/connections/ConnectionSVG.tsx","webpack://grafana/./public/app/plugins/panel/canvas/components/connections/Connections.tsx","webpack://grafana/./public/app/features/canvas/runtime/ables.tsx","webpack://grafana/./public/app/features/canvas/runtime/sceneAbleManagement.ts","webpack://grafana/./public/app/features/canvas/runtime/frame.tsx","webpack://grafana/./public/app/plugins/panel/canvas/components/CanvasContextMenu.tsx","webpack://grafana/./public/app/plugins/panel/canvas/components/CanvasTooltip.tsx","webpack://grafana/./public/app/plugins/panel/canvas/components/connections/ConnectionAnchors2.tsx","webpack://grafana/./public/app/plugins/panel/canvas/components/connections/ConnectionSVG2.tsx","webpack://grafana/./public/app/plugins/panel/canvas/components/connections/Connections2.tsx","webpack://grafana/./public/app/features/canvas/runtime/root.tsx","webpack://grafana/./public/app/features/canvas/runtime/scene.tsx","webpack://grafana/./public/app/plugins/panel/canvas/components/SetBackground.tsx","webpack://grafana/./public/app/features/dimensions/editors/BackgroundSizeEditor.tsx","webpack://grafana/./public/app/features/dimensions/editors/DirectionDimensionEditor.tsx","webpack://grafana/./public/app/plugins/panel/canvas/editor/LineStyleEditor.tsx","webpack://grafana/./public/app/plugins/panel/canvas/editor/element/ActionsEditor.tsx","webpack://grafana/./public/app/plugins/panel/canvas/editor/element/DataLinksEditor.tsx","webpack://grafana/./public/app/plugins/panel/canvas/editor/options.ts","webpack://grafana/./public/app/plugins/panel/canvas/editor/connectionEditor.tsx","webpack://grafana/./public/app/plugins/panel/canvas/editor/element/ConstraintSelectionBox.tsx","webpack://grafana/./public/app/plugins/panel/canvas/editor/element/QuickPositioning.tsx","webpack://grafana/./public/app/plugins/panel/canvas/editor/element/PlacementEditor.tsx","webpack://grafana/./public/app/plugins/panel/canvas/editor/element/elementEditor.tsx","webpack://grafana/./node_modules/rc-tree/node_modules/@babel/runtime/helpers/esm/extends.js","webpack://grafana/./node_modules/rc-tree/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://grafana/./node_modules/rc-tree/node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://grafana/./node_modules/rc-tree/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://grafana/./node_modules/rc-tree/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://grafana/./node_modules/rc-tree/node_modules/@babel/runtime/helpers/esm/inherits.js","webpack://grafana/./node_modules/rc-tree/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack://grafana/./node_modules/rc-tree/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","webpack://grafana/./node_modules/rc-tree/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack://grafana/./node_modules/rc-tree/node_modules/@babel/runtime/helpers/esm/createSuper.js","webpack://grafana/./node_modules/rc-tree/es/contextTypes.js","webpack://grafana/./node_modules/rc-tree/es/DropIndicator.js","webpack://grafana/./node_modules/rc-tree/node_modules/@babel/runtime/helpers/esm/objectDestructuringEmpty.js","webpack://grafana/./node_modules/rc-tree/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://grafana/./node_modules/rc-tree/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://grafana/./node_modules/rc-tree/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://grafana/./node_modules/rc-tree/node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://grafana/./node_modules/rc-tree/es/Indent.js","webpack://grafana/./node_modules/rc-tree/es/TreeNode.js","webpack://grafana/./node_modules/rc-tree/es/useUnmount.js","webpack://grafana/./node_modules/rc-tree/es/MotionTreeNode.js","webpack://grafana/./node_modules/rc-tree/es/utils/diffUtil.js","webpack://grafana/./node_modules/rc-tree/es/NodeList.js","webpack://grafana/./node_modules/rc-tree/es/util.js","webpack://grafana/./node_modules/rc-tree/es/Tree.js","webpack://grafana/./node_modules/rc-tree/es/index.js","webpack://grafana/./public/app/plugins/panel/canvas/globalStyles.ts","webpack://grafana/./public/app/plugins/panel/canvas/editor/layer/TreeNodeTitle.tsx","webpack://grafana/./public/app/plugins/panel/canvas/editor/layer/tree.ts","webpack://grafana/./public/app/plugins/panel/canvas/editor/layer/TreeNavigationEditor.tsx","webpack://grafana/./public/app/plugins/panel/canvas/editor/layer/layerEditor.tsx","webpack://grafana/./public/app/plugins/panel/canvas/editor/inline/TabsEditor.tsx","webpack://grafana/./public/app/plugins/panel/canvas/editor/inline/InlineEditBody.tsx","webpack://grafana/./public/app/plugins/panel/canvas/editor/inline/InlineEdit.tsx","webpack://grafana/./public/app/plugins/panel/canvas/CanvasPanel.tsx","webpack://grafana/./public/app/plugins/panel/canvas/editor/panZoomHelp.tsx","webpack://grafana/./public/app/plugins/panel/canvas/migrations.ts","webpack://grafana/./public/app/plugins/panel/canvas/module.tsx","webpack://grafana/./packages/grafana-ui/src/components/VizTooltip/VizTooltipHeader.tsx","webpack://grafana/./packages/grafana-ui/src/components/VizTooltip/VizTooltipContent.tsx","webpack://grafana/./packages/grafana-ui/src/components/VizTooltip/VizTooltipColorIndicator.tsx","webpack://grafana/./packages/grafana-ui/src/components/VizTooltip/VizTooltipRow.tsx"],"sourcesContent":["import { memo } from 'react';\n\nimport { Trans } from '@grafana/i18n';\n\nimport { CanvasElementItem, CanvasElementProps } from '../element';\n\nconst NotFoundDisplay = memo(({ config }: CanvasElementProps) => {\n return (\n <div>\n <Trans\n i18nKey=\"canvas.not-found-display.not-found\"\n components={{ config: <pre>{JSON.stringify(config, null, 2)}</pre> }}\n >\n <h3>Not found: </h3>\n {'<config />'}\n </Trans>\n </div>\n );\n});\n\nNotFoundDisplay.displayName = 'NotFoundDisplay';\n\nexport const notFoundItem: CanvasElementItem = {\n id: 'not-found',\n name: 'Not found',\n description: 'Display when element type is not found in the registry',\n\n display: NotFoundDisplay,\n\n defaultSize: {\n width: 100,\n height: 100,\n },\n\n getNewOptions: () => ({\n config: {},\n }),\n};\n","import { ElementState } from '../../../features/canvas/runtime/element';\n\nimport { CanvasConnection, ConnectionCoordinates } from './panelcfg.gen';\n\nexport enum LayerActionID {\n Delete = 'delete',\n Duplicate = 'duplicate',\n MoveTop = 'move-top',\n MoveBottom = 'move-bottom',\n}\n\nexport interface DragNode {\n key: number;\n dataRef: ElementState;\n}\n\nexport interface DropNode extends DragNode {\n pos: string;\n}\n\nexport enum InlineEditTabs {\n ElementManagement = 'element-management',\n SelectedElement = 'selected-element',\n SelectedConnection = 'selected-connection',\n}\n\nexport type AnchorPoint = {\n x: number;\n y: number;\n};\n\nexport interface CanvasTooltipPayload {\n anchorPoint: AnchorPoint | undefined;\n element: ElementState | undefined;\n isOpen?: boolean;\n}\n\nexport interface ConnectionState {\n index: number; // array index from the source\n source: ElementState;\n target: ElementState;\n info: CanvasConnection;\n vertices?: ConnectionCoordinates[];\n sourceOriginal?: ConnectionCoordinates;\n targetOriginal?: ConnectionCoordinates;\n}\n\nexport enum LineStyle {\n Solid = 'solid',\n Dashed = 'dashed',\n Dotted = 'dotted',\n}\n\nexport enum StrokeDasharray {\n Solid = '0',\n Dashed = '8 8',\n Dotted = '3',\n}\n","import { useState } from 'react';\nimport * as React from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { IconButton, Input, Stack } from '@grafana/ui';\n\ninterface Props {\n onChange: (v: Array<[string, string]>) => void;\n value: Array<[string, string]>;\n}\n\nexport const ParamsEditor = ({ value, onChange }: Props) => {\n const [paramName, setParamName] = useState('');\n const [paramValue, setParamValue] = useState('');\n\n const changeParamValue = ({ currentTarget }: React.ChangeEvent<HTMLInputElement>) => {\n setParamValue(currentTarget.value);\n };\n\n const changeParamName = ({ currentTarget }: React.ChangeEvent<HTMLInputElement>) => {\n setParamName(currentTarget.value);\n };\n\n const removeParam = (key: string) => () => {\n const updatedParams = value.filter((param) => param[0] !== key);\n onChange(updatedParams);\n };\n\n const addParam = () => {\n const key = paramName;\n let newParams: Array<[string, string]>;\n if (value) {\n newParams = value.filter((e) => e[0] !== key);\n } else {\n newParams = [];\n }\n newParams.push([key, paramValue]);\n newParams.sort((a, b) => a[0].localeCompare(b[0]));\n\n setParamName('');\n setParamValue('');\n onChange(newParams);\n };\n\n const isAddParamsDisabled = !paramName && !paramValue;\n\n return (\n <div>\n <Stack direction=\"row\">\n <Input\n placeholder={t('canvas.params-editor.placeholder-key', 'Key')}\n value={paramName}\n onChange={changeParamName}\n />\n <Input\n placeholder={t('canvas.params-editor.placeholder-value', 'Value')}\n value={paramValue}\n onChange={changeParamValue}\n />\n <IconButton\n aria-label={t('canvas.params-editor.aria-label-add', 'Add')}\n name=\"plus-circle\"\n onClick={addParam}\n disabled={isAddParamsDisabled}\n />\n </Stack>\n <Stack direction=\"column\">\n {Array.from(value || []).map((entry) => (\n <Stack key={entry[0]} direction=\"row\">\n <Input disabled value={entry[0]} />\n <Input disabled value={entry[1]} />\n <IconButton\n aria-label={t('canvas.params-editor.aria-label-delete', 'Delete')}\n onClick={removeParam(entry[0])}\n name=\"trash-alt\"\n />\n </Stack>\n ))}\n </Stack>\n </div>\n );\n};\n","import { AppEvents, textUtil } from '@grafana/data';\nimport { BackendSrvRequest, getBackendSrv, getTemplateSrv } from '@grafana/runtime';\nimport { appEvents } from 'app/core/core';\nimport { createAbsoluteUrl, RelativeUrl } from 'app/features/alerting/unified/utils/url';\nimport { getDashboardSrv } from 'app/features/dashboard/services/DashboardSrv';\n\nimport { HttpRequestMethod } from '../../panelcfg.gen';\n\nimport { APIEditorConfig } from './APIEditor';\n\ntype IsLoadingCallback = (loading: boolean) => void;\n\nexport const callApi = (api: APIEditorConfig, updateLoadingStateCallback?: IsLoadingCallback) => {\n if (!api.endpoint) {\n appEvents.emit(AppEvents.alertError, ['API endpoint is not defined.']);\n return;\n }\n\n const request = getRequest(api);\n\n getBackendSrv()\n .fetch(request)\n .subscribe({\n error: (error) => {\n appEvents.emit(AppEvents.alertError, ['An error has occurred. Check console output for more details.']);\n console.error('API call error: ', error);\n updateLoadingStateCallback && updateLoadingStateCallback(false);\n },\n complete: () => {\n appEvents.emit(AppEvents.alertSuccess, ['API call was successful']);\n updateLoadingStateCallback && updateLoadingStateCallback(false);\n },\n });\n};\n\nexport const interpolateVariables = (text: string) => {\n const panel = getDashboardSrv().getCurrent()?.panelInEdit;\n return getTemplateSrv().replace(text, panel?.scopedVars);\n};\n\nexport const getRequest = (api: APIEditorConfig) => {\n const endpoint = getEndpoint(interpolateVariables(api.endpoint));\n const url = new URL(endpoint);\n\n const requestHeaders: Record<string, string> = {};\n\n let request: BackendSrvRequest = {\n url: url.toString(),\n method: api.method,\n data: getData(api),\n headers: requestHeaders,\n };\n\n if (api.headerParams) {\n api.headerParams.forEach(([name, value]) => {\n requestHeaders[interpolateVariables(name)] = interpolateVariables(value);\n });\n }\n\n if (api.queryParams) {\n api.queryParams?.forEach(([name, value]) => {\n url.searchParams.append(interpolateVariables(name), interpolateVariables(value));\n });\n\n request.url = url.toString();\n }\n\n if (api.method === HttpRequestMethod.POST) {\n requestHeaders['Content-Type'] = api.contentType!;\n }\n\n requestHeaders['X-Grafana-Action'] = '1';\n request.headers = requestHeaders;\n\n return request;\n};\n\nconst getData = (api: APIEditorConfig) => {\n let data: string | undefined = api.data ? interpolateVariables(api.data) : '{}';\n if (api.method === HttpRequestMethod.GET) {\n data = undefined;\n }\n\n return data;\n};\n\nconst getEndpoint = (endpoint: string) => {\n const isRelativeUrl = endpoint.startsWith('/');\n if (isRelativeUrl) {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const sanitizedRelativeURL = textUtil.sanitizeUrl(endpoint) as RelativeUrl;\n endpoint = createAbsoluteUrl(sanitizedRelativeURL, []);\n }\n\n return endpoint;\n};\n","import { useCallback } from 'react';\n\nimport {\n StandardEditorProps,\n StandardEditorsRegistryItem,\n StringFieldConfigSettings,\n SelectableValue,\n} from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, Field, InlineField, InlineFieldRow, JSONFormatter, RadioButtonGroup, Select } from '@grafana/ui';\nimport { StringValueEditor } from 'app/core/components/OptionsUI/string';\nimport { defaultApiConfig } from 'app/features/canvas/elements/button';\n\nimport { HttpRequestMethod } from '../../panelcfg.gen';\n\nimport { ParamsEditor } from './ParamsEditor';\nimport { callApi, interpolateVariables } from './utils';\n\nexport interface APIEditorConfig {\n method: string;\n endpoint: string;\n data?: string;\n contentType?: string;\n queryParams?: Array<[string, string]>;\n headerParams?: Array<[string, string]>;\n}\n\nconst dummyStringSettings: StandardEditorsRegistryItem<string, StringFieldConfigSettings> = {\n id: '',\n name: '',\n description: '',\n editor: StringValueEditor,\n settings: {},\n};\n\ntype Props = StandardEditorProps<APIEditorConfig>;\n\nconst httpMethodOptions = [\n { label: HttpRequestMethod.GET, value: HttpRequestMethod.GET },\n { label: HttpRequestMethod.POST, value: HttpRequestMethod.POST },\n { label: HttpRequestMethod.PUT, value: HttpRequestMethod.PUT },\n];\n\nconst contentTypeOptions: SelectableValue[] = [\n { label: 'JSON', value: 'application/json' },\n { label: 'Text', value: 'text/plain' },\n { label: 'JavaScript', value: 'application/javascript' },\n { label: 'HTML', value: 'text/html' },\n { label: 'XML', value: 'application/XML' },\n { label: 'x-www-form-urlencoded', value: 'application/x-www-form-urlencoded' },\n];\n\nexport function APIEditor({ value, context, onChange }: Props) {\n const LABEL_WIDTH = 13;\n\n if (!value) {\n value = defaultApiConfig;\n }\n\n const onEndpointChange = useCallback(\n (endpoint = '') => {\n onChange({\n ...value,\n endpoint,\n });\n },\n [onChange, value]\n );\n\n const onDataChange = useCallback(\n (data?: string) => {\n onChange({\n ...value,\n data,\n });\n },\n [onChange, value]\n );\n\n const onMethodChange = useCallback(\n (method: string) => {\n onChange({\n ...value,\n method,\n });\n },\n [onChange, value]\n );\n\n const onContentTypeChange = useCallback(\n (contentType: SelectableValue<string>) => {\n onChange({\n ...value,\n contentType: contentType?.value,\n });\n },\n [onChange, value]\n );\n\n const formatCreateLabel = (input: string) => {\n return input;\n };\n\n const onQueryParamsChange = useCallback(\n (queryParams: Array<[string, string]>) => {\n onChange({\n ...value,\n queryParams,\n });\n },\n [onChange, value]\n );\n\n const onHeaderParamsChange = useCallback(\n (headerParams: Array<[string, string]>) => {\n onChange({\n ...value,\n headerParams,\n });\n },\n [onChange, value]\n );\n\n const renderJSON = (data: string) => {\n try {\n const json = JSON.parse(interpolateVariables(data));\n return <JSONFormatter json={json} />;\n } catch (error) {\n if (error instanceof Error) {\n return `Invalid JSON provided: ${error.message}`;\n } else {\n return 'Invalid JSON provided';\n }\n }\n };\n\n const renderTestAPIButton = (api: APIEditorConfig) => {\n if (api && api.endpoint) {\n return (\n <Button\n onClick={() => callApi(api)}\n title={t('canvas.apieditor.render-test-apibutton.title-test-api', 'Test API')}\n >\n <Trans i18nKey=\"canvas.apieditor.render-test-apibutton.test-api\">Test API</Trans>\n </Button>\n );\n }\n\n return;\n };\n\n return (\n <>\n <InlineFieldRow>\n <InlineField label={t('canvas.apieditor.label-endpoint', 'Endpoint')} labelWidth={LABEL_WIDTH} grow={true}>\n <StringValueEditor\n context={context}\n value={value?.endpoint}\n onChange={onEndpointChange}\n item={dummyStringSettings}\n />\n </InlineField>\n </InlineFieldRow>\n <InlineFieldRow>\n <InlineField label={t('canvas.apieditor.label-method', 'Method')} labelWidth={LABEL_WIDTH} grow={true}>\n <RadioButtonGroup value={value?.method} options={httpMethodOptions} onChange={onMethodChange} fullWidth />\n </InlineField>\n </InlineFieldRow>\n {value?.method !== HttpRequestMethod.GET && (\n <InlineFieldRow>\n <InlineField\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n label=\"Content-Type\"\n labelWidth={LABEL_WIDTH}\n grow={true}\n >\n <Select\n options={contentTypeOptions}\n allowCustomValue={true}\n formatCreateLabel={formatCreateLabel}\n value={value?.contentType}\n onChange={onContentTypeChange}\n />\n </InlineField>\n </InlineFieldRow>\n )}\n\n <br />\n <Field label={t('canvas.apieditor.label-query-parameters', 'Query parameters')}>\n <ParamsEditor value={value?.queryParams ?? []} onChange={onQueryParamsChange} />\n </Field>\n <Field label={t('canvas.apieditor.label-header-parameters', 'Header parameters')}>\n <ParamsEditor value={value?.headerParams ?? []} onChange={onHeaderParamsChange} />\n </Field>\n {value?.method !== HttpRequestMethod.GET && value?.contentType && (\n <Field label={t('canvas.apieditor.label-payload', 'Payload')}>\n <StringValueEditor\n context={context}\n value={value?.data ?? '{}'}\n onChange={onDataChange}\n item={{ ...dummyStringSettings, settings: { useTextarea: true } }}\n />\n </Field>\n )}\n {renderTestAPIButton(value)}\n <br />\n {value?.method !== HttpRequestMethod.GET &&\n value?.contentType === defaultApiConfig.contentType &&\n renderJSON(value?.data ?? '{}')}\n </>\n );\n}\n","import { useCallback } from 'react';\n\nimport { SelectableValue, StandardEditorProps } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { ButtonVariant, InlineField, InlineFieldRow, Select } from '@grafana/ui';\nimport { defaultStyleConfig } from 'app/features/canvas/elements/button';\n\nexport interface ButtonStyleConfig {\n variant: ButtonVariant;\n}\n\ntype Props = StandardEditorProps<ButtonStyleConfig>;\n\nconst variantOptions: SelectableValue[] = [\n { label: 'primary', value: 'primary' },\n { label: 'secondary', value: 'secondary' },\n { label: 'success', value: 'success' },\n { label: 'destructive', value: 'destructive' },\n];\n\nexport const ButtonStyleEditor = ({ value, onChange }: Props) => {\n if (!value) {\n value = defaultStyleConfig;\n }\n\n const onVariantChange = useCallback(\n (variant: SelectableValue<ButtonVariant>) => {\n onChange({\n ...value,\n variant: variant?.value ?? defaultStyleConfig.variant,\n });\n },\n [onChange, value]\n );\n\n return (\n <>\n <InlineFieldRow>\n <InlineField label={t('canvas.button-style-editor.label-variant', 'Variant')} grow={true}>\n <Select options={variantOptions} value={value?.variant} onChange={onVariantChange} />\n </InlineField>\n </InlineFieldRow>\n </>\n );\n};\n","import { ComponentType } from 'react';\n\nimport { DataLink, RegistryItem, Action } from '@grafana/data';\nimport { PanelOptionsSupplier } from '@grafana/data/internal';\nimport { ColorDimensionConfig, ScaleDimensionConfig, DirectionDimensionConfig } from '@grafana/schema';\nimport { config } from 'app/core/config';\nimport { BackgroundConfig, Constraint, LineConfig, Placement } from 'app/plugins/panel/canvas/panelcfg.gen';\n\nimport { LineStyleConfig } from '../../plugins/panel/canvas/editor/LineStyleEditor';\nimport { DimensionContext } from '../dimensions/context';\n\nimport { StandardEditorConfig } from './types';\n\n/**\n * This gets saved in panel json\n *\n * depending on the type, it may have additional config\n *\n * @alpha\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface CanvasElementOptions<TConfig = any> {\n name: string; // configured unique display name\n type: string;\n\n // Custom options depending on the type\n config?: TConfig;\n\n // Standard options available for all elements\n constraint?: Constraint; // defaults vertical - top, horizontal - left\n placement?: Placement;\n background?: BackgroundConfig;\n border?: LineConfig;\n connections?: CanvasConnection[];\n links?: DataLink[];\n actions?: Action[];\n}\n\n// Unit is percentage from the middle of the element\n// 0, 0 middle; -1, -1 bottom left; 1, 1 top right\nexport interface ConnectionCoordinates {\n x: number;\n y: number;\n}\n\nexport enum ConnectionPath {\n Straight = 'straight',\n}\n\nexport enum ConnectionDirection {\n Forward = 'forward',\n Reverse = 'reverse',\n Both = 'both',\n None = 'none',\n}\n\nexport interface CanvasConnection {\n source: ConnectionCoordinates;\n target: ConnectionCoordinates;\n targetName?: string;\n path: ConnectionPath;\n color?: ColorDimensionConfig;\n size?: ScaleDimensionConfig;\n lineStyle?: LineStyleConfig;\n vertices?: ConnectionCoordinates[];\n radius?: ScaleDimensionConfig;\n direction?: DirectionDimensionConfig;\n sourceOriginal?: ConnectionCoordinates;\n targetOriginal?: ConnectionCoordinates;\n // See https://github.com/anseki/leader-line#options for more examples of more properties\n}\n\nexport interface CanvasElementProps<TConfig = unknown, TData = unknown> {\n // Saved config\n config: TConfig;\n\n // Raw data\n data?: TData;\n\n // If the element is currently selected\n isSelected?: boolean;\n}\n\n/**\n * Canvas item builder\n *\n * @alpha\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface CanvasElementItem<TConfig = any, TData = any> extends RegistryItem {\n /** The default width/height to use when adding */\n defaultSize?: Placement;\n\n prepareData?: (dimensionContext: DimensionContext, elementOptions: CanvasElementOptions<TConfig>) => TData;\n\n /** Component used to draw */\n display: ComponentType<CanvasElementProps<TConfig, TData>>;\n\n getNewOptions: (options?: CanvasElementOptions) => Omit<CanvasElementOptions<TConfig>, 'type' | 'name'>;\n\n /** Build the configuration UI */\n registerOptionsUI?: PanelOptionsSupplier<CanvasElementOptions<TConfig>>;\n\n /** If item has an edit mode */\n hasEditMode?: boolean;\n\n /** Optional config to customize what standard element editor options are available for the item */\n standardEditorConfig?: StandardEditorConfig;\n\n /** Custom connection anchor coordinates, like for svg elements such as triangle, cloud, etc */\n customConnectionAnchors?: Array<{\n x: number;\n y: number;\n }>;\n}\n\nexport const defaultBgColor = '#D9D9D9';\nexport const defaultTextColor = '#000000';\nexport const defaultLightTextColor = '#F0F4FD';\nexport const defaultThemeTextColor = config.theme2.colors.text.primary;\n","import { LinkModel } from '@grafana/data';\nimport { ColorDimensionConfig, ResourceDimensionConfig, TextDimensionConfig } from '@grafana/schema';\nimport { BackgroundImageSize } from 'app/plugins/panel/canvas/panelcfg.gen';\n\nexport enum QuickPlacement {\n Top = 'top',\n Bottom = 'bottom',\n Left = 'left',\n Right = 'right',\n HorizontalCenter = 'hcenter',\n VerticalCenter = 'vcenter',\n}\n\nexport enum Align {\n Left = 'left',\n Center = 'center',\n Right = 'right',\n}\n\nexport enum VAlign {\n Top = 'top',\n Middle = 'middle',\n Bottom = 'bottom',\n}\n\nexport interface TextData {\n text?: string;\n color?: string;\n size?: number; // 0 or missing will \"auto size\"\n align: Align;\n valign: VAlign;\n links?: LinkModel[];\n field?: string;\n}\n\nexport interface TextConfig {\n text?: TextDimensionConfig;\n color?: ColorDimensionConfig;\n size?: number; // 0 or missing will \"auto size\"\n align: Align;\n valign: VAlign;\n}\n\nexport interface CanvasElementConfig extends TextConfig {\n backgroundColor?: ColorDimensionConfig;\n backgroundImage?: ResourceDimensionConfig;\n backgroundSize?: BackgroundImageSize;\n borderColor?: ColorDimensionConfig;\n borderWidth?: number;\n}\n\nexport interface CanvasElementData extends TextData {\n backgroundColor?: string;\n backgroundImage?: string;\n backgroundSize?: string;\n borderColor?: string;\n borderWidth?: number;\n}\n\nexport interface StandardEditorConfig {\n layout?: boolean;\n background?: boolean;\n border?: boolean;\n}\n","import { css } from '@emotion/css';\nimport { useState } from 'react';\n\nimport { GrafanaTheme2, PluginState } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { TextDimensionMode } from '@grafana/schema';\nimport { Button, Spinner, useStyles2 } from '@grafana/ui';\nimport { DimensionContext } from 'app/features/dimensions/context';\nimport { ColorDimensionEditor } from 'app/features/dimensions/editors/ColorDimensionEditor';\nimport { TextDimensionEditor } from 'app/features/dimensions/editors/TextDimensionEditor';\nimport { APIEditor, APIEditorConfig } from 'app/plugins/panel/canvas/editor/element/APIEditor';\nimport { ButtonStyleConfig, ButtonStyleEditor } from 'app/plugins/panel/canvas/editor/element/ButtonStyleEditor';\nimport { callApi } from 'app/plugins/panel/canvas/editor/element/utils';\nimport { HttpRequestMethod } from 'app/plugins/panel/canvas/panelcfg.gen';\n\nimport { CanvasElementItem, CanvasElementOptions, CanvasElementProps, defaultLightTextColor } from '../element';\nimport { Align, TextConfig, TextData } from '../types';\n\ninterface ButtonData extends Omit<TextData, 'valign'> {\n api?: APIEditorConfig;\n style?: ButtonStyleConfig;\n}\n\ninterface ButtonConfig extends Omit<TextConfig, 'valign'> {\n api?: APIEditorConfig;\n style?: ButtonStyleConfig;\n}\n\nexport const defaultApiConfig: APIEditorConfig = {\n endpoint: '',\n method: HttpRequestMethod.POST,\n data: '{}',\n contentType: 'application/json',\n queryParams: [],\n headerParams: [],\n};\n\nexport const defaultStyleConfig: ButtonStyleConfig = {\n variant: 'primary',\n};\n\nconst ButtonDisplay = ({ data }: CanvasElementProps<ButtonConfig, ButtonData>) => {\n const styles = useStyles2(getStyles, data);\n\n const [isLoading, setIsLoading] = useState(false);\n\n const updateLoadingStateCallback = (loading: boolean) => {\n setIsLoading(loading);\n };\n\n const onClick = () => {\n if (data?.api && data?.api?.endpoint) {\n setIsLoading(true);\n callApi(data.api, updateLoadingStateCallback);\n }\n };\n\n return (\n <Button type=\"submit\" variant={data?.style?.variant} onClick={onClick} className={styles.button}>\n <span>\n {isLoading && <Spinner inline={true} className={styles.buttonSpinner} />}\n {data?.text}\n </span>\n </Button>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2, data: ButtonData | undefined) => ({\n button: css({\n height: '100%',\n width: '100%',\n display: 'grid',\n\n '> span': {\n display: 'inline-grid',\n gridAutoFlow: 'column',\n textAlign: data?.align,\n fontSize: `${data?.size}px`,\n color: data?.color,\n },\n }),\n buttonSpinner: css({\n marginRight: theme.spacing(0.5),\n }),\n});\n\nexport const buttonItem: CanvasElementItem<ButtonConfig, ButtonData> = {\n id: 'button',\n name: 'Button',\n description: 'Button',\n state: PluginState.beta,\n\n standardEditorConfig: {\n background: false,\n },\n\n display: ButtonDisplay,\n\n defaultSize: {\n width: 150,\n height: 45,\n },\n\n getNewOptions: (options) => ({\n ...options,\n config: {\n text: {\n mode: TextDimensionMode.Fixed,\n fixed: 'Button',\n },\n align: Align.Center,\n color: {\n fixed: defaultLightTextColor,\n },\n size: 14,\n api: defaultApiConfig,\n style: defaultStyleConfig,\n },\n background: {\n color: {\n fixed: 'transparent',\n },\n },\n placement: {\n width: options?.placement?.width ?? 32,\n height: options?.placement?.height ?? 78,\n top: options?.placement?.top ?? 100,\n left: options?.placement?.left ?? 100,\n rotation: options?.placement?.rotation ?? 0,\n },\n }),\n\n // Called when data changes\n prepareData: (dimensionContext: DimensionContext, elementOptions: CanvasElementOptions<ButtonConfig>) => {\n const buttonConfig = elementOptions.config;\n\n const getAPIConfig = () => {\n if (buttonConfig?.api) {\n buttonConfig.api = {\n ...buttonConfig.api,\n method: buttonConfig.api.method ?? defaultApiConfig.method,\n contentType: buttonConfig.api.contentType ?? defaultApiConfig.contentType,\n };\n return buttonConfig.api;\n }\n\n return undefined;\n };\n\n const data: ButtonData = {\n text: buttonConfig?.text ? dimensionContext.getText(buttonConfig.text).value() : '',\n align: buttonConfig?.align ?? Align.Center,\n size: buttonConfig?.size ?? 14,\n api: getAPIConfig(),\n style: buttonConfig?.style ?? defaultStyleConfig,\n };\n\n if (buttonConfig?.color) {\n data.color = dimensionContext.getColor(buttonConfig.color).value();\n }\n\n return data;\n },\n\n // Heatmap overlay options\n registerOptionsUI: (builder) => {\n const category = [t('canvas.button-item.category-button', 'Button')];\n builder\n .addCustomEditor({\n category,\n id: 'styleSelector',\n path: 'config.style',\n name: t('canvas.button-item.name-style', 'Style'),\n editor: ButtonStyleEditor,\n })\n .addCustomEditor({\n category,\n id: 'textSelector',\n path: 'config.text',\n name: t('canvas.button-item.name-text', 'Text'),\n editor: TextDimensionEditor,\n })\n .addCustomEditor({\n category,\n id: 'config.color',\n path: 'config.color',\n name: t('canvas.button-item.name-text-color', 'Text color'),\n editor: ColorDimensionEditor,\n settings: {},\n defaultValue: {},\n })\n .addRadio({\n category,\n path: 'config.align',\n name: t('canvas.button-item.name-align-text', 'Align text'),\n settings: {\n options: [\n { value: Align.Left, label: t('canvas.button-item.label.left', 'Left') },\n { value: Align.Center, label: t('canvas.button-item.label.center', 'Center') },\n { value: Align.Right, label: t('canvas.button-item.label.right', 'Right') },\n ],\n },\n defaultValue: Align.Left,\n })\n .addNumberInput({\n category,\n path: 'config.size',\n name: t('canvas.button-item.name-text-size', 'Text size'),\n settings: {\n placeholder: t('canvas.button-item.placeholder.auto', 'Auto'),\n },\n })\n .addCustomEditor({\n category,\n id: 'apiSelector',\n path: 'config.api',\n name: t('canvas.button-item.name-api', 'API'),\n editor: APIEditor,\n });\n },\n};\n","import { css } from '@emotion/css';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { config } from 'app/core/config';\nimport { DimensionContext } from 'app/features/dimensions/context';\nimport { ColorDimensionEditor } from 'app/features/dimensions/editors/ColorDimensionEditor';\nimport { TextDimensionEditor } from 'app/features/dimensions/editors/TextDimensionEditor';\n\nimport {\n CanvasElementItem,\n CanvasElementProps,\n CanvasElementOptions,\n defaultBgColor,\n defaultTextColor,\n} from '../element';\nimport { Align, CanvasElementConfig, CanvasElementData, VAlign } from '../types';\n\nconst Cloud = (props: CanvasElementProps<CanvasElementConfig, CanvasElementData>) => {\n const { data } = props;\n const styles = getStyles(config.theme2, data);\n\n // uuid needed to avoid id conflicts when multiple elements are rendered\n const uniqueId = uuidv4();\n\n return (\n <div className={styles.container}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 110 70\"\n width=\"100%\"\n height=\"100%\"\n preserveAspectRatio=\"none\"\n >\n <defs>\n <pattern id={`image-${uniqueId}`} patternUnits=\"userSpaceOnUse\" width=\"110\" height=\"70\">\n <image xlinkHref={data?.backgroundImage} x=\"-50\" y=\"-50\" width=\"300\" height=\"300\"></image>\n </pattern>\n <clipPath id={`cloudClip-${uniqueId}`}>\n <path d=\"M 23 13 C -1 13 -7 33 12.2 37 C -7 45.8 14.6 65 30.2 57 C 41 73 77 73 89 57 C 113 57 113 41 98 33 C 113 17 89 1 68 9 C 53 -3 29 -3 23 13 Z\" />\n </clipPath>\n </defs>\n {/* Apply background image within the clipping area */}\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n clipPath={`url(#cloudClip-${uniqueId})`}\n style={{ fill: 'none' }}\n />\n <path\n d=\"M 23 13 C -1 13 -7 33 12.2 37 C -7 45.8 14.6 65 30.2 57 C 41 73 77 73 89 57 C 113 57 113 41 98 33 C 113 17 89 1 68 9 C 53 -3 29 -3 23 13 Z\"\n style={{ fill: data?.backgroundImage ? `url(#image-${uniqueId})` : data?.backgroundColor }}\n />\n\n {/* Border */}\n <path\n d=\"M 23 13 C -1 13 -7 33 12.2 37 C -7 45.8 14.6 65 30.2 57 C 41 73 77 73 89 57 C 113 57 113 41 98 33 C 113 17 89 1 68 9 C 53 -3 29 -3 23 13 Z\"\n clipPath={`url(#cloudClip-${uniqueId})`}\n className={styles.elementBorder}\n />\n </svg>\n <span className={styles.text}>{data?.text}</span>\n </div>\n );\n};\n\nexport const cloudItem: CanvasElementItem = {\n id: 'cloud',\n name: 'Cloud',\n description: 'Cloud',\n\n display: Cloud,\n\n defaultSize: {\n width: 110,\n height: 70,\n },\n\n getNewOptions: (options) => ({\n ...options,\n background: {\n color: {\n fixed: defaultBgColor,\n },\n },\n config: {\n align: Align.Center,\n valign: VAlign.Middle,\n color: {\n fixed: defaultTextColor,\n },\n },\n placement: {\n width: options?.placement?.width ?? 110,\n height: options?.placement?.height ?? 70,\n top: options?.placement?.top,\n left: options?.placement?.left,\n rotation: options?.placement?.rotation ?? 0,\n },\n links: options?.links ?? [],\n }),\n\n // Called when data changes\n prepareData: (dimensionContext: DimensionContext, elementOptions: CanvasElementOptions<CanvasElementConfig>) => {\n const textConfig = elementOptions.config;\n\n const data: CanvasElementData = {\n text: textConfig?.text ? dimensionContext.getText(textConfig.text).value() : '',\n field: textConfig?.text?.field,\n align: textConfig?.align ?? Align.Center,\n valign: textConfig?.valign ?? VAlign.Middle,\n size: textConfig?.size,\n };\n\n if (textConfig?.color) {\n data.color = dimensionContext.getColor(textConfig.color).value();\n }\n\n const { background, border } = elementOptions;\n data.backgroundColor = background?.color ? dimensionContext.getColor(background.color).value() : defaultBgColor;\n data.borderColor = border?.color ? dimensionContext.getColor(border.color).value() : defaultBgColor;\n data.borderWidth = border?.width ?? 0;\n\n data.backgroundImage = background?.image ? dimensionContext.getResource(background.image).value() : undefined;\n\n return data;\n },\n\n registerOptionsUI: (builder) => {\n const category = [t('canvas.cloud-item.category-cloud', 'Cloud')];\n builder\n .addCustomEditor({\n category,\n id: 'textSelector',\n path: 'config.text',\n name: t('canvas.cloud-item.name-text', 'Text'),\n editor: TextDimensionEditor,\n })\n .addCustomEditor({\n category,\n id: 'config.color',\n path: 'config.color',\n name: t('canvas.cloud-item.name-text-color', 'Text color'),\n editor: ColorDimensionEditor,\n settings: {},\n defaultValue: {},\n })\n .addRadio({\n category,\n path: 'config.align',\n name: t('canvas.cloud-item.name-align-text', 'Align text'),\n settings: {\n options: [\n { value: Align.Left, label: t('canvas.cloud-item.label.left', 'Left') },\n { value: Align.Center, label: t('canvas.cloud-item.label.center', 'Center') },\n { value: Align.Right, label: t('canvas.cloud-item.label.right', 'Right') },\n ],\n },\n defaultValue: Align.Left,\n })\n .addRadio({\n category,\n path: 'config.valign',\n name: t('canvas.cloud-item.name-vertical-align', 'Vertical align'),\n settings: {\n options: [\n { value: VAlign.Top, label: t('canvas.cloud-item.label.top', 'Top') },\n { value: VAlign.Middle, label: t('canvas.cloud-item.label.middle', 'Middle') },\n { value: VAlign.Bottom, label: t('canvas.cloud-item.label.bottom', 'Bottom') },\n ],\n },\n defaultValue: VAlign.Middle,\n })\n .addNumberInput({\n category,\n path: 'config.size',\n name: t('canvas.cloud-item.name-text-size', 'Text size'),\n settings: {\n placeholder: t('canvas.cloud-item.placeholder.auto', 'Auto'),\n },\n });\n },\n\n customConnectionAnchors: [\n { x: -0.58, y: 0.63 }, // Top Left\n { x: -0.22, y: 0.99 }, // Top Middle\n { x: 0.235, y: 0.75 }, // Top Right\n\n { x: 0.8, y: 0.6 }, // Right Top\n { x: 0.785, y: 0.06 }, // Right Middle\n { x: 0.91, y: -0.51 }, // Right Bottom\n\n { x: 0.62, y: -0.635 }, // Bottom Right\n { x: 0.05, y: -0.98 }, // Bottom Middle\n { x: -0.45, y: -0.635 }, // Bottom Left\n\n { x: -0.8, y: -0.58 }, // Left Bottom\n { x: -0.78, y: -0.06 }, // Left Middle\n { x: -0.9, y: 0.48 }, // Left Top\n ],\n};\n\nconst getStyles = (theme: GrafanaTheme2, data: CanvasElementData | undefined) => {\n const textTop = data?.valign === VAlign.Middle ? '50%' : data?.valign === VAlign.Top ? '10%' : '90%';\n const textLeft = data?.align === Align.Center ? '50%' : data?.align === Align.Left ? '10%' : '90%';\n const textTransform = `translate(${data?.align === Align.Center ? '-50%' : data?.align === Align.Left ? '10%' : '-90%'}, ${\n data?.valign === VAlign.Middle ? '-50%' : data?.valign === VAlign.Top ? '10%' : '-90%'\n })`;\n\n return {\n container: css({\n height: '100%',\n width: '100%',\n }),\n text: css({\n position: 'absolute',\n top: textTop,\n left: textLeft,\n transform: textTransform,\n fontSize: `${data?.size}px`,\n color: data?.color,\n }),\n elementBorder: css({\n fill: 'none',\n stroke: data?.borderColor ?? 'none',\n strokeWidth: data?.borderWidth ?? 0,\n strokeLinejoin: 'round',\n }),\n };\n};\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { ScalarDimensionConfig } from '@grafana/schema';\nimport { useStyles2 } from '@grafana/ui';\nimport { DimensionContext } from 'app/features/dimensions/context';\nimport { ScalarDimensionEditor } from 'app/features/dimensions/editors/ScalarDimensionEditor';\n\nimport { CanvasElementItem, CanvasElementOptions, CanvasElementProps, defaultBgColor } from '../element';\n\ninterface DroneFrontData {\n rollAngle?: number;\n}\n\ninterface DroneFrontConfig {\n rollAngle?: ScalarDimensionConfig;\n}\n\nconst DroneFrontDisplay = ({ data }: CanvasElementProps<DroneFrontConfig, DroneFrontData>) => {\n const styles = useStyles2(getStyles);\n\n const droneFrontTransformStyle = `rotate(${data?.rollAngle ? data.rollAngle : 0}deg)`;\n\n return (\n <svg\n className={styles.droneFront}\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 1300 290\"\n style={{ transform: droneFrontTransformStyle, stroke: defaultBgColor }}\n >\n <g className=\"arms\" stroke={defaultBgColor} strokeWidth=\"28px\">\n <line x1=\"510\" x2=\"320\" y1=\"100\" y2=\"150\" />\n <line x1=\"510\" x2=\"320\" y1=\"190\" y2=\"210\" />\n <line x1=\"790\" x2=\"980\" y1=\"190\" y2=\"210\" />\n <line x1=\"790\" x2=\"980\" y1=\"100\" y2=\"150\" />\n </g>\n <g className=\"body\" stroke={defaultBgColor} strokeWidth=\"28px\">\n <path\n fill=\"none\"\n d=\" M 510 130 C 510 124 510 110 510 100 C 510 90 530 71 540 70 C 640 61 670 60 760 70 C 770 71 790 90 790 100 Q 790 120 790 130 L 790 130 Q 790 177 790 196 C 790 207 770 225 760 226 C 670 236 640 236 540 226 C 530 226 510 206 510 196 Q 510 177 510 130 Q 510 133 510 130 Z \"\n />\n <circle cx=\"650\" cy=\"160\" r=\"40\" fill=\"none\" />\n </g>\n <g className=\"motors\" stroke={defaultBgColor} strokeWidth=\"28px\">\n <path\n className=\"motor\"\n fill=\"none\"\n d=\" M 320 60 L 250 60 L 250 230 L 260 290 L 310 290 L 320 230 L 320 60 Z \"\n />\n <path\n className=\"motor\"\n fill=\"none\"\n d=\" M 1050 60 L 980 60 L 980 230 L 990 290 L 1040 290 L 1050 230 L 1050 60 Z \"\n />\n </g>\n <g className=\"propellers\" fill={defaultBgColor}>\n <path\n className=\"prop\"\n d=\" M 270 60 L 300 60 L 300 20 Q 311 30 330 30 Q 349 30 570 10 L 300 10 Q 300 0 290 0 C 286 0 284 0 280 0 Q 270 0 270 10 L 0 10 Q 220 30 240 30 Q 260 30 270 20 L 270 60 Z \"\n />\n <path\n className=\"prop\"\n d=\" M 1000 60 L 1030 60 L 1030 20 Q 1041 30 1060 30 Q 1079 30 1300 10 L 1030 10 Q 1030 0 1020 0 C 1016 0 1014 0 1010 0 Q 1000 0 1000 10 L 730 10 Q 950 30 970 30 Q 990 30 1000 20 L 1000 60 Z \"\n />\n </g>\n </svg>\n );\n};\n\nexport const droneFrontItem: CanvasElementItem = {\n id: 'droneFront',\n name: 'Drone Front',\n description: 'Drone front',\n\n display: DroneFrontDisplay,\n\n defaultSize: {\n width: 100,\n height: 26,\n },\n\n getNewOptions: (options) => ({\n ...options,\n background: {\n color: {\n fixed: 'transparent',\n },\n },\n placement: {\n width: options?.placement?.width ?? 100,\n height: options?.placement?.height ?? 26,\n top: options?.placement?.top,\n left: options?.placement?.left,\n rotation: options?.placement?.rotation ?? 0,\n },\n links: options?.links ?? [],\n }),\n\n // Called when data changes\n prepareData: (dimensionContext: DimensionContext, elementOptions: CanvasElementOptions<DroneFrontConfig>) => {\n const droneFrontConfig = elementOptions.config;\n\n const data: DroneFrontData = {\n rollAngle: droneFrontConfig?.rollAngle ? dimensionContext.getScalar(droneFrontConfig.rollAngle).value() : 0,\n };\n\n return data;\n },\n\n registerOptionsUI: (builder) => {\n const category = [t('canvas.drone-front-item.category-drone-front', 'Drone Front')];\n builder.addCustomEditor({\n category,\n id: 'rollAngle',\n path: 'config.rollAngle',\n name: t('canvas.drone-front-item.name-roll-angle', 'Roll Angle'),\n editor: ScalarDimensionEditor,\n });\n },\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n droneFront: css({\n // TODO: figure out what styles to apply when prefers-reduced-motion is set\n // eslint-disable-next-line @grafana/no-unreduced-motion\n transition: 'transform 0.4s',\n }),\n});\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { ScalarDimensionConfig } from '@grafana/schema';\nimport { useStyles2 } from '@grafana/ui';\nimport { DimensionContext } from 'app/features/dimensions/context';\nimport { ScalarDimensionEditor } from 'app/features/dimensions/editors/ScalarDimensionEditor';\n\nimport { CanvasElementItem, CanvasElementOptions, CanvasElementProps, defaultBgColor } from '../element';\n\ninterface DroneSideData {\n pitchAngle?: number;\n}\n\ninterface DroneSideConfig {\n pitchAngle?: ScalarDimensionConfig;\n}\n\nconst DroneSideDisplay = ({ data }: CanvasElementProps<DroneSideConfig, DroneSideData>) => {\n const styles = useStyles2(getStyles);\n\n const droneSidePitchTransformStyle = `rotate(${data?.pitchAngle ? data.pitchAngle : 0}deg)`;\n\n return (\n <svg\n className={styles.droneSide}\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 1300 290\"\n style={{ transform: droneSidePitchTransformStyle, stroke: defaultBgColor }}\n >\n <g className=\"arms\" stroke={defaultBgColor} strokeWidth=\"28px\">\n <line x1=\"510\" x2=\"320\" y1=\"100\" y2=\"150\" />\n <line x1=\"510\" x2=\"320\" y1=\"190\" y2=\"210\" />\n <line x1=\"790\" x2=\"980\" y1=\"190\" y2=\"210\" />\n <line x1=\"790\" x2=\"980\" y1=\"100\" y2=\"150\" />\n </g>\n <g className=\"body\" stroke={defaultBgColor} strokeWidth=\"28px\">\n <path\n fill=\"none\"\n d=\" M 510 130 C 510 124 510 110 510 100 C 510 90 530 71 540 70 C 640 61 670 60 760 70 C 770 71 790 90 790 100 Q 790 120 790 130 L 790 130 Q 790 177 790 196 C 790 207 770 225 760 226 C 670 236 640 236 540 226 C 530 226 510 206 510 196 Q 510 177 510 130 Q 510 133 510 130 Z \"\n />\n </g>\n <g className=\"motors\" stroke={defaultBgColor} strokeWidth=\"28px\">\n <path\n className=\"motor\"\n fill=\"none\"\n d=\" M 320 60 L 250 60 L 250 230 L 260 290 L 310 290 L 320 230 L 320 60 Z \"\n />\n <path\n className=\"motor\"\n fill=\"none\"\n d=\" M 1050 60 L 980 60 L 980 230 L 990 290 L 1040 290 L 1050 230 L 1050 60 Z \"\n />\n </g>\n <g className=\"propellers\" fill={defaultBgColor}>\n <path\n className=\"prop\"\n d=\" M 270 60 L 300 60 L 300 20 Q 311 30 330 30 Q 349 30 570 10 L 300 10 Q 300 0 290 0 C 286 0 284 0 280 0 Q 270 0 270 10 L 0 10 Q 220 30 240 30 Q 260 30 270 20 L 270 60 Z \"\n />\n <path\n className=\"prop\"\n d=\" M 1000 60 L 1030 60 L 1030 20 Q 1041 30 1060 30 Q 1079 30 1300 10 L 1030 10 Q 1030 0 1020 0 C 1016 0 1014 0 1010 0 Q 1000 0 1000 10 L 730 10 Q 950 30 970 30 Q 990 30 1000 20 L 1000 60 Z \"\n />\n </g>\n </svg>\n );\n};\n\nexport const droneSideItem: CanvasElementItem = {\n id: 'droneSide',\n name: 'Drone Side',\n description: 'Drone Side',\n\n display: DroneSideDisplay,\n\n defaultSize: {\n width: 100,\n height: 26,\n },\n\n getNewOptions: (options) => ({\n ...options,\n background: {\n color: {\n fixed: 'transparent',\n },\n },\n placement: {\n width: options?.placement?.width ?? 100,\n height: options?.placement?.height ?? 26,\n top: options?.placement?.top,\n left: options?.placement?.left,\n rotation: options?.placement?.rotation ?? 0,\n },\n links: options?.links ?? [],\n }),\n\n // Called when data changes\n prepareData: (dimensionContext: DimensionContext, elementOptions: CanvasElementOptions<DroneSideConfig>) => {\n const droneSideConfig = elementOptions.config;\n\n const data: DroneSideData = {\n pitchAngle: droneSideConfig?.pitchAngle ? dimensionContext.getScalar(droneSideConfig.pitchAngle).value() : 0,\n };\n\n return data;\n },\n\n registerOptionsUI: (builder) => {\n const category = [t('canvas.drone-side-item.category-drone-side', 'Drone Side')];\n builder.addCustomEditor({\n category,\n id: 'pitchAngle',\n path: 'config.pitchAngle',\n name: t('canvas.drone-side-item.name-pitch-angle', 'Pitch Angle'),\n editor: ScalarDimensionEditor,\n });\n },\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n droneSide: css({\n // TODO: figure out what styles to apply when prefers-reduced-motion is set\n // eslint-disable-next-line @grafana/no-unreduced-motion\n transition: 'transform 0.4s',\n }),\n});\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { ScalarDimensionConfig } from '@grafana/schema';\nimport { useStyles2 } from '@grafana/ui';\nimport { DimensionContext } from 'app/features/dimensions/context';\nimport { ScalarDimensionEditor } from 'app/features/dimensions/editors/ScalarDimensionEditor';\n\nimport { CanvasElementItem, CanvasElementOptions, CanvasElementProps, defaultBgColor } from '../element';\n\ninterface DroneTopData {\n bRightRotorRPM?: number;\n bLeftRotorRPM?: number;\n fRightRotorRPM?: number;\n fLeftRotorRPM?: number;\n yawAngle?: number;\n}\n\ninterface DroneTopConfig {\n bRightRotorRPM?: ScalarDimensionConfig;\n bLeftRotorRPM?: ScalarDimensionConfig;\n fRightRotorRPM?: ScalarDimensionConfig;\n fLeftRotorRPM?: ScalarDimensionConfig;\n yawAngle?: ScalarDimensionConfig;\n}\n\nconst DroneTopDisplay = ({ data }: CanvasElementProps<DroneTopConfig, DroneTopData>) => {\n const styles = useStyles2(getStyles);\n\n const fRightRotorAnimation = `spin ${data?.fRightRotorRPM ? 60 / Math.abs(data.fRightRotorRPM) : 0}s linear infinite`;\n\n const fLeftRotorAnimation = `spin ${data?.fLeftRotorRPM ? 60 / Math.abs(data.fLeftRotorRPM) : 0}s linear infinite`;\n\n const bRightRotorAnimation = `spin ${data?.bRightRotorRPM ? 60 / Math.abs(data.bRightRotorRPM) : 0}s linear infinite`;\n\n const bLeftRotorAnimation = `spin ${data?.bLeftRotorRPM ? 60 / Math.abs(data.bLeftRotorRPM) : 0}s linear infinite`;\n\n const droneTopTransformStyle = `rotate(${data?.yawAngle ? data.yawAngle : 0}deg)`;\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlnsXlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"-43 -43 640 640\"\n xmlSpace=\"preserve\"\n style={{ transform: droneTopTransformStyle, fill: defaultBgColor }}\n >\n <path\n fillRule=\"evenodd\"\n d=\" M 137.95 127.967 C 137.14 127.157 136.189 126.58 135.178 126.218 C 138.173 121.545 139.967 116.036 140.125 110.123 L 217.64 151.862 C 214.049 157.411 211.8 163.922 211.386 170.95 L 209.694 199.712 L 137.95 127.967 L 137.95 127.967 L 137.95 127.967 L 137.95 127.967 L 137.95 127.967 L 137.95 127.967 L 137.95 127.967 L 137.95 127.967 L 137.95 127.967 Z M 134.268 426.981 C 130.211 421.314 124.328 417.045 117.482 415.041 L 201.999 330.523 L 201.385 340.955 C 200.67 353.107 202.829 364.914 207.563 375.673 L 134.268 426.981 L 134.268 426.981 L 134.268 426.981 L 134.268 426.981 L 134.268 426.981 L 134.268 426.981 L 134.268 426.981 L 134.268 426.981 Z M 324.765 373.673 L 228.527 373.673 Q 215.374 358.611 216.361 341.835 L 226.361 171.832 C 226.825 163.94 231.012 157.096 237.146 152.957 L 316.146 152.957 C 322.28 157.096 326.466 163.94 326.931 171.832 L 336.931 341.835 Q 337.918 358.611 324.765 373.673 L 324.765 373.673 L 324.765 373.673 L 324.765 373.673 L 324.765 373.673 L 324.765 373.673 L 324.765 373.673 Z M 435.81 415.041 C 428.964 417.045 423.081 421.314 419.024 426.981 L 345.727 375.673 C 350.461 364.914 352.62 353.107 351.905 340.955 L 351.291 330.523 L 435.81 415.041 L 435.81 415.041 L 435.81 415.041 L 435.81 415.041 L 435.81 415.041 L 435.81 415.041 Z M 343.596 199.713 L 341.904 170.951 C 341.49 163.923 339.242 157.411 335.651 151.863 L 413.167 110.124 C 413.325 116.037 415.119 121.546 418.114 126.219 C 417.103 126.581 416.152 127.158 415.342 127.968 L 343.596 199.713 L 343.596 199.713 L 343.596 199.713 L 343.596 199.713 L 343.596 199.713 Z M 444.646 92.771 C 453.744 92.771 461.146 100.172 461.146 109.271 C 461.146 118.369 453.744 125.771 444.646 125.771 C 435.548 125.771 428.146 118.369 428.146 109.271 C 428.146 100.172 435.548 92.771 444.646 92.771 L 444.646 92.771 L 444.646 92.771 L 444.646 92.771 Z M 108.647 92.771 C 117.745 92.771 125.147 100.172 125.147 109.271 C 125.147 118.369 117.745 125.771 108.647 125.771 C 99.549 125.771 92.147 118.369 92.147 109.271 C 92.147 100.172 99.549 92.771 108.647 92.771 L 108.647 92.771 L 108.647 92.771 Z M 108.647 461.771 C 99.549 461.771 92.147 454.369 92.147 445.271 C 92.147 436.172 99.549 428.771 108.647 428.771 C 117.745 428.771 125.147 436.172 125.147 445.271 C 125.147 454.369 117.745 461.771 108.647 461.771 L 108.647 461.771 Z M 92.322 136.202 C 97.086 139.1 102.675 140.771 108.647 140.771 C 114.883 140.771 120.697 138.941 125.594 135.802 C 125.956 136.813 126.534 137.764 127.343 138.573 L 207.342 218.573 C 207.711 218.942 208.109 219.264 208.528 219.54 L 203.212 309.908 C 201.794 310.182 200.44 310.869 199.342 311.967 L 95.343 415.967 C 94.954 416.356 94.62 416.779 94.335 417.224 C 93.651 417.575 92.976 417.942 92.322 418.34 Q 84.615 424.182 81.716 428.946 C 78.817 433.71 77.147 439.299 77.147 445.271 C 77.147 462.64 91.278 476.771 108.647 476.771 C 114.619 476.771 120.208 475.1 124.972 472.202 C 129.736 469.304 132.678 466.36 135.577 461.596 C 138.476 456.832 140.147 451.243 140.147 445.271 C 140.147 443.943 140.055 442.637 139.895 441.352 L 214.997 388.78 C 217.05 391.677 336.242 391.678 338.295 388.78 L 413.398 441.352 C 413.238 442.637 413.146 443.943 413.146 445.271 C 413.146 451.243 414.817 456.832 417.715 461.596 C 420.613 466.36 423.557 469.304 428.321 472.202 C 433.085 475.1 438.674 476.771 444.646 476.771 C 462.015 476.771 476.146 462.64 476.146 445.271 C 476.146 439.299 474.475 433.71 471.577 428.946 C 468.679 424.182 459.642 417.575 458.958 417.224 C 458.672 416.779 458.339 416.356 457.95 415.967 L 353.95 311.967 C 352.852 310.869 351.498 310.182 350.08 309.908 L 344.764 219.54 C 345.183 219.264 345.581 218.942 345.95 218.573 L 425.95 138.573 C 426.76 137.763 427.337 136.812 427.699 135.802 C 432.596 138.941 438.409 140.771 444.646 140.771 C 450.618 140.771 456.207 139.1 460.971 136.202 C 465.735 133.304 468.679 130.36 471.577 125.596 C 474.475 120.832 476.146 115.243 476.146 109.271 C 476.146 91.903 462.015 77.772 444.646 77.772 C 438.674 77.772 433.085 79.442 428.321 82.34 L 416.215 91.446 L 324.765 140.688 C 318.402 136.324 310.718 133.771 302.473 133.771 L 250.819 133.771 C 242.574 133.771 234.89 136.324 228.527 140.688 L 137.078 91.446 L 124.972 82.34 C 120.208 79.442 114.619 77.772 108.647 77.772 C 91.278 77.772 77.147 91.903 77.147 109.271 C 77.147 115.243 78.818 120.832 81.716 125.595 C 84.614 130.358 87.558 133.304 92.322 136.202 L 92.322 136.202 L 92.322 136.202 L 92.322 136.202 L 92.322 136.202 L 92.322 136.202 L 92.322 136.202 L 92.322 136.202 L 92.322 136.202 Z M 444.646 461.771 C 435.548 461.771 428.146 454.369 428.146 445.271 C 428.146 436.172 435.548 428.771 444.646 428.771 C 453.744 428.771 461.146 436.172 461.146 445.271 C 461.146 454.369 453.744 461.771 444.646 461.771 Z \"\n />\n <path\n fillRule=\"evenodd\"\n d=\" M 259.458 334.235 L 259.458 337.211 L 254.514 337.211 L 254.514 350.795 L 250.842 350.795 L 250.842 337.211 L 245.898 337.211 L 245.898 334.235 L 259.458 334.235 Z M 266.226 347.939 L 272.586 347.939 L 272.754 350.627 L 272.754 350.627 Q 270.498 350.867 265.074 350.867 L 265.074 350.867 L 265.074 350.867 Q 263.418 350.867 262.434 349.967 L 262.434 349.967 L 262.434 349.967 Q 261.45 349.067 261.426 347.531 L 261.426 347.531 L 261.426 337.499 L 261.426 337.499 Q 261.45 335.963 262.434 335.063 L 262.434 335.063 L 262.434 335.063 Q 263.418 334.163 265.074 334.163 L 265.074 334.163 L 265.074 334.163 Q 270.498 334.163 272.754 334.403 L 272.754 334.403 L 272.586 337.115 L 266.226 337.115 L 266.226 337.115 Q 265.626 337.115 265.362 337.403 L 265.362 337.403 L 265.362 337.403 Q 265.098 337.691 265.098 338.339 L 265.098 338.339 L 265.098 340.859 L 271.698 340.859 L 271.698 343.499 L 265.098 343.499 L 265.098 346.691 L 265.098 346.691 Q 265.098 347.363 265.362 347.651 L 265.362 347.651 L 265.362 347.651 Q 265.626 347.939 266.226 347.939 L 266.226 347.939 Z M 275.202 333.995 L 278.73 333.995 L 278.73 346.931 L 278.73 346.931 Q 278.73 348.131 280.074 348.131 L 280.074 348.131 L 281.034 348.131 L 281.442 350.603 L 281.442 350.603 Q 280.53 351.083 278.61 351.083 L 278.61 351.083 L 278.61 351.083 Q 277.026 351.083 276.114 350.231 L 276.114 350.231 L 276.114 350.231 Q 275.202 349.379 275.202 347.819 L 275.202 347.819 L 275.202 333.995 Z M 283.05 333.995 L 286.578 333.995 L 286.578 346.931 L 286.578 346.931 Q 286.578 348.131 287.922 348.131 L 287.922 348.131 L 288.882 348.131 L 289.29 350.603 L 289.29 350.603 Q 288.378 351.083 286.458 351.083 L 286.458 351.083 L 286.458 351.083 Q 284.874 351.083 283.962 350.231 L 283.962 350.231 L 283.962 350.231 Q 283.05 349.379 283.05 347.819 L 283.05 347.819 L 283.05 333.995 Z M 292.086 335.759 L 292.086 335.759 L 292.086 335.759 Q 293.634 333.923 297.618 333.923 L 297.618 333.923 L 297.618 333.923 Q 301.602 333.923 303.162 335.759 L 303.162 335.759 L 303.162 335.759 Q 304.722 337.595 304.722 342.515 L 304.722 342.515 L 304.722 342.515 Q 304.722 347.435 303.162 349.271 L 303.162 349.271 L 303.162 349.271 Q 301.602 351.107 297.618 351.107 L 297.618 351.107 L 297.618 351.107 Q 293.634 351.107 292.086 349.271 L 292.086 349.271 L 292.086 349.271 Q 290.538 347.435 290.538 342.515 L 290.538 342.515 L 290.538 342.515 Q 290.538 337.595 292.086 335.759 Z M 300.174 338.051 L 300.174 338.051 L 300.174 338.051 Q 299.49 336.875 297.618 336.875 L 297.618 336.875 L 297.618 336.875 Q 295.746 336.875 295.062 338.051 L 295.062 338.051 L 295.062 338.051 Q 294.378 339.227 294.378 342.515 L 294.378 342.515 L 294.378 342.515 Q 294.378 345.803 295.062 346.979 L 295.062 346.979 L 295.062 346.979 Q 295.746 348.155 297.618 348.155 L 297.618 348.155 L 297.618 348.155 Q 299.49 348.155 300.174 346.979 L 300.174 346.979 L 300.174 346.979 Q 300.858 345.803 300.858 342.515 L 300.858 342.515 L 300.858 342.515 Q 300.858 339.227 300.174 338.051 Z \"\n />\n <g className=\"propeller-group\">\n <path\n className={`${styles.propeller} ${styles.propellerCW}`}\n style={{ animation: bRightRotorAnimation }}\n d=\" M 461.563 418.77 L 463.992 416.34 Q 465.495 407.116 466.461 400.395 C 467.426 393.675 469.363 388.087 474.731 383.284 Q 533.862 341.514 538.196 338.859 C 542.529 336.203 548.345 334.299 551.492 338.29 C 554.639 342.282 553.481 346.02 549.419 350.082 L 471.147 428.354 L 461.563 418.77 Z M 427.729 471.772 L 425.299 474.202 Q 423.797 483.426 422.831 490.146 C 421.866 496.867 419.929 502.454 414.561 507.257 Q 355.43 549.028 351.096 551.683 C 346.763 554.338 340.947 556.243 337.8 552.251 C 334.653 548.26 335.811 544.522 339.873 540.46 L 418.145 462.187 L 427.729 471.772 Z \"\n />\n <path\n className={`${styles.propeller} ${styles.propellerCCW}`}\n style={{ animation: fRightRotorAnimation }}\n d=\" M 461.563 135.773 L 463.992 138.203 Q 465.495 147.426 466.461 154.147 C 467.426 160.868 469.363 166.455 474.731 171.258 Q 533.862 213.028 538.196 215.684 C 542.529 218.339 548.345 220.244 551.492 216.252 C 554.639 212.26 553.481 208.523 549.419 204.46 L 471.147 126.188 L 461.563 135.773 Z M 427.729 82.77 L 425.299 80.34 Q 423.797 71.117 422.831 64.396 C 421.866 57.675 419.929 52.088 414.561 47.285 Q 355.43 5.515 351.096 2.859 C 346.763 0.204 340.947 -1.701 337.8 2.291 C 334.653 6.282 335.811 10.02 339.873 14.082 L 418.145 92.355 L 427.729 82.77 Z \"\n />\n <path\n className={`${styles.propeller} ${styles.propellerCCW}`}\n style={{ animation: bLeftRotorAnimation }}\n d=\" M 125.563 471.772 L 127.993 474.202 Q 129.496 483.426 130.461 490.146 C 131.427 496.867 133.363 502.454 138.731 507.257 Q 197.863 549.028 202.196 551.683 C 206.53 554.338 212.345 556.243 215.492 552.251 C 218.639 548.26 217.482 544.522 213.419 540.46 L 135.148 462.187 L 125.563 471.772 Z M 91.73 418.77 L 89.3 416.34 Q 87.797 407.116 86.832 400.395 C 85.866 393.675 83.93 388.087 78.562 383.284 Q 19.431 341.514 15.097 338.859 C 10.763 336.203 4.948 334.299 1.801 338.29 C -1.346 342.282 -0.189 346.02 3.874 350.082 L 82.146 428.354 L 91.73 418.77 Z \"\n />\n <path\n className={`${styles.propeller} ${styles.propellerCW}`}\n style={{ animation: fLeftRotorAnimation }}\n d=\" M 125.563 82.77 L 127.993 80.34 Q 129.496 71.117 130.461 64.396 C 131.427 57.675 133.363 52.088 138.731 47.285 Q 197.863 5.515 202.196 2.859 C 206.53 0.204 212.345 -1.701 215.492 2.291 C 218.639 6.282 217.482 10.02 213.419 14.083 L 135.147 92.355 L 125.563 82.77 Z M 91.73 135.773 L 89.3 138.203 Q 87.797 147.426 86.832 154.147 C 85.866 160.868 83.93 166.455 78.562 171.258 Q 19.431 213.028 15.097 215.684 C 10.763 218.339 4.948 220.243 1.801 216.252 C -1.346 212.26 -0.189 208.523 3.874 204.46 L 82.146 126.188 L 91.73 135.773 Z \"\n />\n </g>\n </svg>\n );\n};\n\nexport const droneTopItem: CanvasElementItem = {\n id: 'droneTop',\n name: 'Drone Top',\n description: 'Drone top',\n\n display: DroneTopDisplay,\n\n defaultSize: {\n width: 100,\n height: 100,\n },\n\n getNewOptions: (options) => ({\n ...options,\n background: {\n color: {\n fixed: 'transparent',\n },\n },\n links: options?.links ?? [],\n }),\n\n // Called when data changes\n prepareData: (dimensionContext: DimensionContext, elementOptions: CanvasElementOptions<DroneTopConfig>) => {\n const droneTopConfig = elementOptions.config;\n\n const data: DroneTopData = {\n bRightRotorRPM: droneTopConfig?.bRightRotorRPM\n ? dimensionContext.getScalar(droneTopConfig.bRightRotorRPM).value()\n : 0,\n bLeftRotorRPM: droneTopConfig?.bLeftRotorRPM\n ? dimensionContext.getScalar(droneTopConfig.bLeftRotorRPM).value()\n : 0,\n fRightRotorRPM: droneTopConfig?.fRightRotorRPM\n ? dimensionContext.getScalar(droneTopConfig.fRightRotorRPM).value()\n : 0,\n fLeftRotorRPM: droneTopConfig?.fLeftRotorRPM\n ? dimensionContext.getScalar(droneTopConfig.fLeftRotorRPM).value()\n : 0,\n yawAngle: droneTopConfig?.yawAngle ? dimensionContext.getScalar(droneTopConfig.yawAngle).value() : 0,\n };\n\n return data;\n },\n\n registerOptionsUI: (builder) => {\n const category = [t('canvas.drone-top-item.category-drone-top', 'Drone Top')];\n builder\n .addCustomEditor({\n category,\n id: 'yawAngle',\n path: 'config.yawAngle',\n name: t('canvas.drone-top-item.name-yaw-angle', 'Yaw Angle'),\n editor: ScalarDimensionEditor,\n })\n .addCustomEditor({\n category,\n id: 'fRightRotorRPM',\n path: 'config.fRightRotorRPM',\n name: t('canvas.drone-top-item.name-front-right-rotor-rpm', 'Front Right Rotor RPM'),\n editor: ScalarDimensionEditor,\n })\n .addCustomEditor({\n category,\n id: 'fLeftRotorRPM',\n path: 'config.fLeftRotorRPM',\n name: t('canvas.drone-top-item.name-front-left-rotor-rpm', 'Front Left Rotor RPM'),\n editor: ScalarDimensionEditor,\n })\n .addCustomEditor({\n category,\n id: 'bRightRotorRPM',\n path: 'config.bRightRotorRPM',\n name: t('canvas.drone-top-item.name-back-right-rotor-rpm', 'Back Right Rotor RPM'),\n editor: ScalarDimensionEditor,\n })\n .addCustomEditor({\n category,\n id: 'bLeftRotorRPM',\n path: 'config.bLeftRotorRPM',\n name: t('canvas.drone-top-item.name-back-left-rotor-rpm', 'Back Left Rotor RPM'),\n editor: ScalarDimensionEditor,\n });\n },\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n propeller: css({\n transformOrigin: '50% 50%',\n transformBox: 'fill-box',\n display: 'block',\n '@keyframes spin': {\n from: {\n transform: 'rotate(0deg)',\n },\n to: {\n transform: 'rotate(360deg)',\n },\n },\n }),\n propellerCW: css({\n // TODO: figure out what styles to apply when prefers-reduced-motion is set\n // eslint-disable-next-line @grafana/no-unreduced-motion\n animationDirection: 'normal',\n }),\n propellerCCW: css({\n // TODO: figure out what styles to apply when prefers-reduced-motion is set\n // eslint-disable-next-line @grafana/no-unreduced-motion\n animationDirection: 'reverse',\n }),\n});\n","import { css } from '@emotion/css';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { config } from 'app/core/config';\nimport { DimensionContext } from 'app/features/dimensions/context';\nimport { ColorDimensionEditor } from 'app/features/dimensions/editors/ColorDimensionEditor';\nimport { TextDimensionEditor } from 'app/features/dimensions/editors/TextDimensionEditor';\n\nimport {\n CanvasElementItem,\n CanvasElementOptions,\n CanvasElementProps,\n defaultBgColor,\n defaultTextColor,\n} from '../element';\nimport { Align, CanvasElementConfig, CanvasElementData, VAlign } from '../types';\n\nconst Ellipse = (props: CanvasElementProps<CanvasElementConfig, CanvasElementData>) => {\n const { data } = props;\n const styles = getStyles(config.theme2, data);\n\n // uuid needed to avoid id conflicts when multiple elements are rendered\n const uniqueId = uuidv4();\n\n return (\n <div className={styles.container}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 200 200\"\n width=\"100%\"\n height=\"100%\"\n preserveAspectRatio=\"none\"\n >\n <defs>\n <pattern id={`image-${uniqueId}`} patternUnits=\"userSpaceOnUse\" width=\"200\" height=\"200\">\n <image xlinkHref={data?.backgroundImage} x=\"-50\" y=\"-50\" width=\"300\" height=\"300\"></image>\n </pattern>\n <clipPath id={`ellipseClip-${uniqueId}`}>\n <ellipse cx=\"50%\" cy=\"50%\" rx=\"50%\" ry=\"50%\" />\n </clipPath>\n </defs>\n {/* Apply background image within the clipping area */}\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n clipPath={`url(#ellipseClip-${uniqueId})`}\n style={{ fill: 'none' }}\n />\n <ellipse\n cx=\"50%\"\n cy=\"50%\"\n rx=\"50%\"\n ry=\"50%\"\n style={{ fill: data?.backgroundImage ? `url(#image-${uniqueId})` : data?.backgroundColor }}\n />\n\n {/* Border */}\n <ellipse\n cx=\"50%\"\n cy=\"50%\"\n rx=\"50%\"\n ry=\"50%\"\n clipPath={`url(#ellipseClip-${uniqueId})`}\n className={styles.elementBorder}\n />\n </svg>\n\n <span className={styles.text}>{data?.text}</span>\n </div>\n );\n};\n\nexport const ellipseItem: CanvasElementItem<CanvasElementConfig, CanvasElementData> = {\n id: 'ellipse',\n name: 'Ellipse',\n description: 'Ellipse',\n\n display: Ellipse,\n\n defaultSize: {\n width: 160,\n height: 160,\n },\n\n getNewOptions: (options) => ({\n ...options,\n background: {\n color: {\n fixed: defaultBgColor,\n },\n },\n config: {\n align: Align.Center,\n valign: VAlign.Middle,\n color: {\n fixed: defaultTextColor,\n },\n },\n placement: {\n width: options?.placement?.width ?? 160,\n height: options?.placement?.height ?? 138,\n top: options?.placement?.top,\n left: options?.placement?.left,\n rotation: options?.placement?.rotation ?? 0,\n },\n links: options?.links ?? [],\n }),\n\n prepareData: (dimensionContext: DimensionContext, elementOptions: CanvasElementOptions<CanvasElementConfig>) => {\n const textConfig = elementOptions.config;\n\n const data: CanvasElementData = {\n text: textConfig?.text ? dimensionContext.getText(textConfig.text).value() : '',\n field: textConfig?.text?.field,\n align: textConfig?.align ?? Align.Center,\n valign: textConfig?.valign ?? VAlign.Middle,\n size: textConfig?.size,\n };\n\n if (textConfig?.color) {\n data.color = dimensionContext.getColor(textConfig.color).value();\n }\n\n const { background, border } = elementOptions;\n data.backgroundColor = background?.color ? dimensionContext.getColor(background.color).value() : defaultBgColor;\n data.borderColor = border?.color ? dimensionContext.getColor(border.color).value() : defaultBgColor;\n data.borderWidth = border?.width ?? 0;\n\n data.backgroundImage = background?.image ? dimensionContext.getResource(background.image).value() : undefined;\n\n return data;\n },\n\n registerOptionsUI: (builder) => {\n const category = [t('canvas.ellipse-item.category-ellipse', 'Ellipse')];\n builder\n .addCustomEditor({\n category,\n id: 'textSelector',\n path: 'config.text',\n name: t('canvas.ellipse-item.name-text', 'Text'),\n editor: TextDimensionEditor,\n })\n .addCustomEditor({\n category,\n id: 'config.color',\n path: 'config.color',\n name: t('canvas.ellipse-item.name-text-color', 'Text color'),\n editor: ColorDimensionEditor,\n settings: {},\n defaultValue: {},\n })\n .addRadio({\n category,\n path: 'config.align',\n name: t('canvas.ellipse-item.name-align-text', 'Align text'),\n settings: {\n options: [\n { value: Align.Left, label: t('canvas.ellipse-item.label.left', 'Left') },\n { value: Align.Center, label: t('canvas.ellipse-item.label.center', 'Center') },\n { value: Align.Right, label: t('canvas.ellipse-item.label.right', 'Right') },\n ],\n },\n defaultValue: Align.Left,\n })\n .addRadio({\n category,\n path: 'config.valign',\n name: t('canvas.ellipse-item.name-vertical-align', 'Vertical align'),\n settings: {\n options: [\n { value: VAlign.Top, label: t('canvas.ellipse-item.label.top', 'Top') },\n { value: VAlign.Middle, label: t('canvas.ellipse-item.label.middle', 'Middle') },\n { value: VAlign.Bottom, label: t('canvas.ellipse-item.label.bottom', 'Bottom') },\n ],\n },\n defaultValue: VAlign.Middle,\n })\n .addNumberInput({\n category,\n path: 'config.size',\n name: t('canvas.ellipse-item.name-text-size', 'Text size'),\n settings: {\n placeholder: t('canvas.ellipse-item.placeholder.auto', 'Auto'),\n },\n });\n },\n\n customConnectionAnchors: [\n // points along the left edge\n { x: -1, y: 0 }, // middle left\n { x: -0.7, y: 0.7 },\n\n // points along the top edge\n { x: 0, y: 1 }, // top\n { x: 0.7, y: 0.7 },\n\n // points along the right edge\n { x: 1, y: 0 }, // middle right\n { x: 0.7, y: -0.7 },\n\n // points along the bottom edge\n { x: 0, y: -1 }, // bottom\n { x: -0.7, y: -0.7 },\n ],\n};\n\nconst getStyles = (theme: GrafanaTheme2, data: CanvasElementData | undefined) => {\n const textTop = data?.valign === VAlign.Middle ? '50%' : data?.valign === VAlign.Top ? '10%' : '90%';\n const textLeft = data?.align === Align.Center ? '50%' : data?.align === Align.Left ? '10%' : '90%';\n const textTransform = `translate(${data?.align === Align.Center ? '-50%' : data?.align === Align.Left ? '10%' : '-90%'}, ${\n data?.valign === VAlign.Middle ? '-50%' : data?.valign === VAlign.Top ? '10%' : '-90%'\n })`;\n\n return {\n container: css({\n height: '100%',\n width: '100%',\n }),\n text: css({\n position: 'absolute',\n top: textTop,\n left: textLeft,\n transform: textTransform,\n fontSize: `${data?.size}px`,\n color: data?.color,\n }),\n elementBorder: css({\n fill: 'none',\n stroke: data?.borderColor ?? 'none',\n strokeWidth: data?.borderWidth ?? 0,\n strokeLinejoin: 'round',\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport { isString } from 'lodash';\nimport { CSSProperties } from 'react';\n\nimport { LinkModel } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { ColorDimensionConfig, ResourceDimensionConfig, ResourceDimensionMode } from '@grafana/schema';\nimport { SanitizedSVG } from 'app/core/components/SVG/SanitizedSVG';\nimport { DimensionContext } from 'app/features/dimensions/context';\nimport { ColorDimensionEditor } from 'app/features/dimensions/editors/ColorDimensionEditor';\nimport { ResourceDimensionEditor } from 'app/features/dimensions/editors/ResourceDimensionEditor';\nimport { getPublicOrAbsoluteUrl } from 'app/features/dimensions/resource';\nimport { LineConfig } from 'app/plugins/panel/canvas/panelcfg.gen';\n\nimport { CanvasElementItem, CanvasElementOptions, CanvasElementProps, defaultBgColor } from '../element';\n\nexport interface IconConfig {\n path?: ResourceDimensionConfig;\n fill?: ColorDimensionConfig;\n stroke?: LineConfig;\n}\n\ninterface IconData {\n path: string;\n fill: string;\n strokeColor?: string;\n stroke?: number;\n links?: LinkModel[];\n}\n\n// When a stoke is defined, we want the path to be in page units\nconst svgStrokePathClass = css({\n path: {\n vectorEffect: 'non-scaling-stroke',\n },\n});\n\nexport function IconDisplay(props: CanvasElementProps<IconConfig, IconData>) {\n const { data } = props;\n if (!data?.path) {\n return null;\n }\n\n const svgStyle: CSSProperties = {\n fill: data?.fill,\n stroke: data?.strokeColor,\n strokeWidth: data?.stroke,\n height: '100%',\n width: '100%',\n };\n\n return (\n <SanitizedSVG src={data.path} style={svgStyle} className={svgStyle.strokeWidth ? svgStrokePathClass : undefined} />\n );\n}\n\nexport const iconItem: CanvasElementItem<IconConfig, IconData> = {\n id: 'icon',\n name: 'Icon',\n description: 'SVG Icon display',\n\n display: IconDisplay,\n\n getNewOptions: (options) => ({\n ...options,\n config: {\n path: {\n mode: ResourceDimensionMode.Fixed,\n fixed: 'img/icons/unicons/question-circle.svg',\n },\n fill: { fixed: defaultBgColor },\n },\n background: {\n color: {\n fixed: 'transparent',\n },\n },\n placement: {\n width: options?.placement?.width ?? 100,\n height: options?.placement?.height ?? 100,\n top: options?.placement?.top ?? 100,\n left: options?.placement?.left ?? 100,\n rotation: options?.placement?.rotation ?? 0,\n },\n links: options?.links ?? [],\n }),\n\n // Called when data changes\n prepareData: (dimensionContext: DimensionContext, elementOptions: CanvasElementOptions<IconConfig>) => {\n const iconConfig = elementOptions.config;\n\n let path: string | undefined = undefined;\n if (iconConfig?.path) {\n path = dimensionContext.getResource(iconConfig.path).value();\n }\n if (!path || !isString(path)) {\n path = getPublicOrAbsoluteUrl('img/icons/unicons/question-circle.svg');\n }\n\n const data: IconData = {\n path,\n fill: iconConfig?.fill ? dimensionContext.getColor(iconConfig.fill).value() : defaultBgColor,\n };\n\n if (iconConfig?.stroke?.width && iconConfig?.stroke.color) {\n if (iconConfig.stroke.width > 0) {\n data.stroke = iconConfig.stroke?.width;\n data.strokeColor = dimensionContext.getColor(iconConfig.stroke.color).value();\n }\n }\n\n return data;\n },\n\n // Heatmap overlay options\n registerOptionsUI: (builder) => {\n const category = [t('canvas.icon-item.category-icon', 'Icon')];\n builder\n .addCustomEditor({\n category,\n id: 'iconSelector',\n path: 'config.path',\n name: t('canvas.icon-item.name-svg-path', 'SVG Path'),\n editor: ResourceDimensionEditor,\n settings: {\n resourceType: 'icon',\n maxFiles: 2000,\n },\n })\n .addCustomEditor({\n category,\n id: 'config.fill',\n path: 'config.fill',\n name: t('canvas.icon-item.name-fill-color', 'Fill color'),\n editor: ColorDimensionEditor,\n settings: {},\n defaultValue: {\n // Configured values\n fixed: 'grey',\n },\n });\n // .addSliderInput({\n // category,\n // path: 'config.stroke.width',\n // name: 'Stroke',\n // defaultValue: 0,\n // settings: {\n // min: 0,\n // max: 10,\n // },\n // })\n // .addCustomEditor({\n // category,\n // id: 'config.stroke.color',\n // path: 'config.stroke.color',\n // name: 'Stroke color',\n // editor: ColorDimensionEditor,\n // settings: {},\n // defaultValue: {\n // // Configured values\n // fixed: 'grey',\n // },\n // showIf: (cfg) => Boolean(cfg?.config?.stroke?.width),\n // })\n },\n};\n","import { css } from '@emotion/css';\nimport { useCallback } from 'react';\nimport { useObservable } from 'react-use';\nimport { of } from 'rxjs';\n\nimport { DataFrame, FieldNamePickerConfigSettings, GrafanaTheme2, StandardEditorsRegistryItem } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { TextDimensionMode } from '@grafana/schema';\nimport { usePanelContext, useStyles2 } from '@grafana/ui';\nimport { FieldNamePicker, frameHasName, getFrameFieldsDisplayNames } from '@grafana/ui/internal';\nimport { DimensionContext } from 'app/features/dimensions/context';\nimport { ColorDimensionEditor } from 'app/features/dimensions/editors/ColorDimensionEditor';\nimport { TextDimensionEditor } from 'app/features/dimensions/editors/TextDimensionEditor';\n\nimport {\n CanvasElementItem,\n CanvasElementOptions,\n CanvasElementProps,\n defaultBgColor,\n defaultTextColor,\n} from '../element';\nimport { ElementState } from '../runtime/element';\nimport { Align, TextConfig, TextData, VAlign } from '../types';\n\n// eslint-disable-next-line\nconst dummyFieldSettings: StandardEditorsRegistryItem<string, FieldNamePickerConfigSettings> = {\n settings: {},\n} as StandardEditorsRegistryItem<string, FieldNamePickerConfigSettings>;\n\nconst MetricValueDisplay = (props: CanvasElementProps<TextConfig, TextData>) => {\n const { data, isSelected, config } = props;\n const styles = useStyles2(getStyles(data));\n\n const context = usePanelContext();\n const scene = context.instanceState?.scene;\n let panelData: DataFrame[];\n panelData = context.instanceState?.scene?.data.series;\n\n const isEditMode = useObservable<boolean>(scene?.editModeEnabled ?? of(false));\n\n const getDisplayValue = () => {\n if (panelData && config.text?.field && fieldNotFound()) {\n return 'Field not found';\n }\n\n if (panelData && config.text?.field && !data?.text) {\n return 'No data';\n }\n\n return data?.text ? data.text : 'Double click to set field';\n };\n\n const fieldNotFound = () => {\n const fieldNames = getFrameFieldsDisplayNames(panelData);\n return !frameHasName(config.text?.field, fieldNames);\n };\n\n if (isEditMode && isSelected) {\n return <MetricValueEdit {...props} />;\n }\n\n return (\n <div className={styles.container}>\n <span className={styles.span}>{getDisplayValue()}</span>\n </div>\n );\n};\n\nconst MetricValueEdit = (props: CanvasElementProps<TextConfig, TextData>) => {\n let { data, config } = props;\n const context = usePanelContext();\n let panelData: DataFrame[];\n panelData = context.instanceState?.scene?.data.series;\n\n const onFieldChange = useCallback(\n (field: string | undefined) => {\n let selectedElement: ElementState;\n selectedElement = context.instanceState?.selected[0];\n if (selectedElement) {\n const options = selectedElement.options;\n selectedElement.onChange({\n ...options,\n config: {\n ...options.config,\n text: { fixed: '', field: field, mode: TextDimensionMode.Field },\n },\n background: {\n color: { field: field, fixed: options.background?.color?.fixed ?? '' },\n },\n });\n\n // Force a re-render (update scene data after config update)\n const scene = context.instanceState?.scene;\n if (scene) {\n scene.editModeEnabled.next(false);\n scene.updateData(scene.data);\n }\n }\n },\n [context.instanceState?.scene, context.instanceState?.selected]\n );\n\n const styles = useStyles2(getStyles(data));\n return (\n <div className={styles.inlineEditorContainer}>\n {panelData && (\n <FieldNamePicker\n context={{ data: panelData }}\n value={config.text?.field ?? ''}\n onChange={onFieldChange}\n item={dummyFieldSettings}\n />\n )}\n </div>\n );\n};\n\nconst getStyles = (data: TextData | undefined) => (theme: GrafanaTheme2) => ({\n container: css({\n position: 'absolute',\n height: '100%',\n width: '100%',\n display: 'table',\n }),\n inlineEditorContainer: css({\n height: '100%',\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(1),\n }),\n span: css({\n display: 'table-cell',\n verticalAlign: data?.valign,\n textAlign: data?.align,\n fontSize: `${data?.size}px`,\n color: data?.color,\n }),\n});\n\nexport const metricValueItem: CanvasElementItem<TextConfig, TextData> = {\n id: 'metric-value',\n name: 'Metric Value',\n description: 'Display a field value',\n\n display: MetricValueDisplay,\n\n hasEditMode: true,\n\n defaultSize: {\n width: 260,\n height: 50,\n },\n\n getNewOptions: (options) => ({\n ...options,\n config: {\n align: Align.Center,\n valign: VAlign.Middle,\n color: {\n fixed: defaultTextColor,\n },\n text: { mode: TextDimensionMode.Field, fixed: '', field: '' },\n size: 20,\n },\n background: {\n color: {\n fixed: defaultBgColor,\n },\n },\n placement: {\n width: options?.placement?.width,\n height: options?.placement?.height,\n top: options?.placement?.top ?? 100,\n left: options?.placement?.left ?? 100,\n rotation: options?.placement?.rotation ?? 0,\n },\n links: options?.links ?? [],\n }),\n\n prepareData: (dimensionContext: DimensionContext, elementOptions: CanvasElementOptions<TextConfig>) => {\n const textConfig = elementOptions.config;\n\n const data: TextData = {\n text: textConfig?.text ? dimensionContext.getText(textConfig.text).value() : '',\n field: textConfig?.text?.field,\n align: textConfig?.align ?? Align.Center,\n valign: textConfig?.valign ?? VAlign.Middle,\n size: textConfig?.size,\n };\n\n if (textConfig?.color) {\n data.color = dimensionContext.getColor(textConfig.color).value();\n }\n\n return data;\n },\n\n registerOptionsUI: (builder) => {\n const category = [t('canvas.category-metric-value', 'Metric value')];\n builder\n .addCustomEditor({\n category,\n id: 'textSelector',\n path: 'config.text',\n name: t('canvas.name-text', 'Text'),\n editor: TextDimensionEditor,\n })\n .addCustomEditor({\n category,\n id: 'config.color',\n path: 'config.color',\n name: t('canvas.name-color', 'Text color'),\n editor: ColorDimensionEditor,\n settings: {},\n defaultValue: {},\n })\n .addRadio({\n category,\n path: 'config.align',\n name: t('canvas.name-align-text', 'Align text'),\n settings: {\n options: [\n { value: Align.Left, label: t('canvas.metric-value-item.label.left', 'Left') },\n { value: Align.Center, label: t('canvas.metric-value-item.label.center', 'Center') },\n { value: Align.Right, label: t('canvas.metric-value-item.label.right', 'Right') },\n ],\n },\n defaultValue: Align.Left,\n })\n .addRadio({\n category,\n path: 'config.valign',\n name: t('canvas.name-vertical-align', 'Vertical align'),\n settings: {\n options: [\n { value: VAlign.Top, label: t('canvas.metric-value-item.label.top', 'Top') },\n { value: VAlign.Middle, label: t('canvas.metric-value-item.label.middle', 'Middle') },\n { value: VAlign.Bottom, label: t('canvas.metric-value-item.label.bottom', 'Bottom') },\n ],\n },\n defaultValue: VAlign.Middle,\n })\n .addNumberInput({\n category,\n path: 'config.size',\n name: t('canvas.name-text-size', 'Text size'),\n settings: {\n placeholder: t('canvas.metric-value-item.placeholder.auto', 'Auto'),\n },\n });\n },\n};\n","import { css } from '@emotion/css';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { config } from 'app/core/config';\nimport { DimensionContext } from 'app/features/dimensions/context';\nimport { ColorDimensionEditor } from 'app/features/dimensions/editors/ColorDimensionEditor';\nimport { TextDimensionEditor } from 'app/features/dimensions/editors/TextDimensionEditor';\n\nimport {\n CanvasElementItem,\n CanvasElementProps,\n CanvasElementOptions,\n defaultBgColor,\n defaultTextColor,\n} from '../element';\nimport { Align, CanvasElementConfig, CanvasElementData, VAlign } from '../types';\n\nconst Parallelogram = (props: CanvasElementProps<CanvasElementConfig, CanvasElementData>) => {\n const { data } = props;\n const styles = getStyles(config.theme2, data);\n\n // uuid needed to avoid id conflicts when multiple elements are rendered\n const uniqueId = uuidv4();\n\n return (\n <div className={styles.container}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 250 150\"\n width=\"100%\"\n height=\"100%\"\n preserveAspectRatio=\"none\"\n >\n <defs>\n <pattern id={`image-${uniqueId}`} patternUnits=\"userSpaceOnUse\" width=\"250\" height=\"150\">\n <image xlinkHref={data?.backgroundImage} x=\"-50\" y=\"-50\" width=\"350\" height=\"200\"></image>\n </pattern>\n <clipPath id={`parallelogramClip-${uniqueId}`}>\n <polygon points=\"0,150 50,0 250,0 200,150\" />\n </clipPath>\n </defs>\n {/* Apply background image within the clipping area */}\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n clipPath={`url(#parallelogramClip-${uniqueId})`}\n style={{ fill: 'none' }}\n />\n <polygon\n points=\"0,150 50,0 250,0 200,150\"\n style={{ fill: data?.backgroundImage ? `url(#image-${uniqueId})` : data?.backgroundColor }}\n />\n\n {/* Border */}\n <polygon\n points=\"0,150 50,0 250,0 200,150\"\n clipPath={`url(#parallelogramClip-${uniqueId})`}\n className={styles.elementBorder}\n />\n </svg>\n <span className={styles.text}>{data?.text}</span>\n </div>\n );\n};\n\nexport const parallelogramItem: CanvasElementItem = {\n id: 'parallelogram',\n name: 'Parallelogram',\n description: 'Parallelogram',\n\n display: Parallelogram,\n\n defaultSize: {\n width: 250,\n height: 150,\n },\n\n getNewOptions: (options) => ({\n ...options,\n background: {\n color: {\n fixed: defaultBgColor,\n },\n },\n config: {\n align: Align.Center,\n valign: VAlign.Middle,\n color: {\n fixed: defaultTextColor,\n },\n },\n placement: {\n width: options?.placement?.width ?? 250,\n height: options?.placement?.height ?? 150,\n top: options?.placement?.top,\n left: options?.placement?.left,\n rotation: options?.placement?.rotation ?? 0,\n },\n links: options?.links ?? [],\n }),\n\n // Called when data changes\n prepareData: (dimensionContext: DimensionContext, elementOptions: CanvasElementOptions<CanvasElementConfig>) => {\n const textConfig = elementOptions.config;\n\n const data: CanvasElementData = {\n text: textConfig?.text ? dimensionContext.getText(textConfig.text).value() : '',\n field: textConfig?.text?.field,\n align: textConfig?.align ?? Align.Center,\n valign: textConfig?.valign ?? VAlign.Middle,\n size: textConfig?.size,\n };\n\n if (textConfig?.color) {\n data.color = dimensionContext.getColor(textConfig.color).value();\n }\n\n const { background, border } = elementOptions;\n data.backgroundColor = background?.color ? dimensionContext.getColor(background.color).value() : defaultBgColor;\n data.borderColor = border?.color ? dimensionContext.getColor(border.color).value() : defaultBgColor;\n data.borderWidth = border?.width ?? 0;\n\n data.backgroundImage = background?.image ? dimensionContext.getResource(background.image).value() : undefined;\n\n return data;\n },\n\n registerOptionsUI: (builder) => {\n const category = [t('canvas.parallelogram-item.category-parallelogram', 'Parallelogram')];\n builder\n .addCustomEditor({\n category,\n id: 'textSelector',\n path: 'config.text',\n name: t('canvas.parallelogram-item.name-text', 'Text'),\n editor: TextDimensionEditor,\n })\n .addCustomEditor({\n category,\n id: 'config.color',\n path: 'config.color',\n name: t('canvas.parallelogram-item.name-text-color', 'Text color'),\n editor: ColorDimensionEditor,\n settings: {},\n defaultValue: {},\n })\n .addRadio({\n category,\n path: 'config.align',\n name: t('canvas.parallelogram-item.name-align-text', 'Align text'),\n settings: {\n options: [\n { value: Align.Left, label: t('canvas.parallelogram-item.label.left', 'Left') },\n { value: Align.Center, label: t('canvas.parallelogram-item.label.center', 'Center') },\n { value: Align.Right, label: t('canvas.parallelogram-item.label.right', 'Right') },\n ],\n },\n defaultValue: Align.Left,\n })\n .addRadio({\n category,\n path: 'config.valign',\n name: t('canvas.parallelogram-item.name-vertical-align', 'Vertical align'),\n settings: {\n options: [\n { value: VAlign.Top, label: t('canvas.parallelogram-item.label.top', 'Top') },\n { value: VAlign.Middle, label: t('canvas.parallelogram-item.label.middle', 'Middle') },\n { value: VAlign.Bottom, label: t('canvas.parallelogram-item.label.bottom', 'Bottom') },\n ],\n },\n defaultValue: VAlign.Middle,\n })\n .addNumberInput({\n category,\n path: 'config.size',\n name: t('canvas.parallelogram-item.name-text-size', 'Text size'),\n settings: {\n placeholder: t('canvas.parallelogram-item.placeholder.auto', 'Auto'),\n },\n });\n },\n\n customConnectionAnchors: [\n { x: -0.6, y: 1 }, // Angled Top Left\n { x: -0.1, y: 1 }, // Top Middle\n { x: 0.5, y: 1 }, // Angled Top Right\n { x: 1, y: 1 }, // Top Right\n { x: 0.925, y: 0.6 }, // Angled Right Top\n { x: 0.84, y: 0.2 }, // Right Middle\n { x: 0.76, y: -0.2 }, // Angled Right Bottom\n { x: 0.675, y: -0.6 }, // Bottom Right\n { x: -0.5, y: -1 }, // Angled Bottom Right\n { x: 0.1, y: -1 }, // Bottom Middle\n { x: 0.6, y: -1 }, // Angled Bottom Left\n { x: -1, y: -1 }, // Bottom Left\n { x: -0.925, y: -0.6 }, // Angled Left Bottom\n { x: -0.84, y: -0.2 }, // Left Middle\n { x: -0.76, y: 0.2 }, // Angled Left Top\n { x: -0.675, y: 0.6 }, // Top Left 2\n ],\n};\n\nconst getStyles = (theme: GrafanaTheme2, data: CanvasElementData | undefined) => {\n const textTop = data?.valign === VAlign.Middle ? '50%' : data?.valign === VAlign.Top ? '10%' : '90%';\n const textLeft = data?.align === Align.Center ? '50%' : data?.align === Align.Left ? '10%' : '90%';\n const textTransform = `translate(${data?.align === Align.Center ? '-50%' : data?.align === Align.Left ? '10%' : '-90%'}, ${\n data?.valign === VAlign.Middle ? '-50%' : data?.valign === VAlign.Top ? '10%' : '-90%'\n })`;\n\n return {\n container: css({\n height: '100%',\n width: '100%',\n }),\n text: css({\n position: 'absolute',\n top: textTop,\n left: textLeft,\n transform: textTransform,\n fontSize: `${data?.size}px`,\n color: data?.color,\n }),\n elementBorder: css({\n fill: 'none',\n stroke: data?.borderColor ?? 'none',\n strokeWidth: data?.borderWidth ?? 0,\n strokeLinejoin: 'round',\n }),\n };\n};\n","import { css } from '@emotion/css';\nimport { memo } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { useStyles2 } from '@grafana/ui';\nimport { DimensionContext } from 'app/features/dimensions/context';\nimport { ColorDimensionEditor } from 'app/features/dimensions/editors/ColorDimensionEditor';\nimport { TextDimensionEditor } from 'app/features/dimensions/editors/TextDimensionEditor';\n\nimport {\n CanvasElementItem,\n CanvasElementOptions,\n CanvasElementProps,\n defaultBgColor,\n defaultTextColor,\n} from '../element';\nimport { Align, TextConfig, TextData, VAlign } from '../types';\n\nconst RectangleDisplay = memo<CanvasElementProps<TextConfig, TextData>>(({ data }) => {\n const styles = useStyles2(getStyles, data);\n\n return (\n <div className={styles.container}>\n <span className={styles.span}>{data?.text}</span>\n </div>\n );\n});\n\nRectangleDisplay.displayName = 'RectangleDisplay';\n\nconst getStyles = (theme: GrafanaTheme2, data: TextData | undefined) => ({\n container: css({\n position: 'absolute',\n height: '100%',\n width: '100%',\n display: 'table',\n }),\n span: css({\n display: 'table-cell',\n verticalAlign: data?.valign,\n textAlign: data?.align,\n fontSize: `${data?.size}px`,\n color: data?.color,\n }),\n});\n\nexport const rectangleItem: CanvasElementItem<TextConfig, TextData> = {\n id: 'rectangle',\n name: 'Rectangle',\n description: 'Rectangle',\n\n display: RectangleDisplay,\n\n defaultSize: {\n width: 240,\n height: 160,\n },\n\n getNewOptions: (options) => ({\n ...options,\n config: {\n align: Align.Center,\n valign: VAlign.Middle,\n color: {\n fixed: defaultTextColor,\n },\n },\n background: {\n color: {\n fixed: defaultBgColor,\n },\n },\n links: options?.links ?? [],\n }),\n\n // Called when data changes\n prepareData: (dimensionContext: DimensionContext, elementOptions: CanvasElementOptions<TextConfig>) => {\n const textConfig = elementOptions.config;\n\n const data: TextData = {\n text: textConfig?.text ? dimensionContext.getText(textConfig.text).value() : '',\n field: textConfig?.text?.field,\n align: textConfig?.align ?? Align.Center,\n valign: textConfig?.valign ?? VAlign.Middle,\n size: textConfig?.size,\n };\n\n if (textConfig?.color) {\n data.color = dimensionContext.getColor(textConfig.color).value();\n }\n\n return data;\n },\n\n // Heatmap overlay options\n registerOptionsUI: (builder) => {\n const category = [t('canvas.rectangle-item.category-rectangle', 'Rectangle')];\n builder\n .addCustomEditor({\n category,\n id: 'textSelector',\n path: 'config.text',\n name: t('canvas.rectangle-item.name-text', 'Text'),\n editor: TextDimensionEditor,\n })\n .addCustomEditor({\n category,\n id: 'config.color',\n path: 'config.color',\n name: t('canvas.rectangle-item.name-text-color', 'Text color'),\n editor: ColorDimensionEditor,\n settings: {},\n defaultValue: {},\n })\n .addRadio({\n category,\n path: 'config.align',\n name: t('canvas.rectangle-item.name-align-text', 'Align text'),\n settings: {\n options: [\n { value: Align.Left, label: t('canvas.rectangle-item.label.left', 'Left') },\n { value: Align.Center, label: t('canvas.rectangle-item.label.center', 'Center') },\n { value: Align.Right, label: t('canvas.rectangle-item.label.right', 'Right') },\n ],\n },\n defaultValue: Align.Left,\n })\n .addRadio({\n category,\n path: 'config.valign',\n name: t('canvas.rectangle-item.name-vertical-align', 'Vertical align'),\n settings: {\n options: [\n { value: VAlign.Top, label: t('canvas.rectangle-item.label.top', 'Top') },\n { value: VAlign.Middle, label: t('canvas.rectangle-item.label.middle', 'Middle') },\n { value: VAlign.Bottom, label: t('canvas.rectangle-item.label.bottom', 'Bottom') },\n ],\n },\n defaultValue: VAlign.Middle,\n })\n .addNumberInput({\n category,\n path: 'config.size',\n name: t('canvas.rectangle-item.name-text-size', 'Text size'),\n settings: {\n placeholder: t('canvas.rectangle-item.placeholder.auto', 'Auto'),\n },\n });\n },\n};\n","import { useStyles2 } from '@grafana/ui';\n\nimport { getServerStyles, ServerData } from '../server';\n\nexport const ServerDatabase = (data: ServerData) => {\n const styles = useStyles2(getServerStyles(data));\n return (\n <g className={styles.outline}>\n <g className={styles.server}>\n <path d=\"m2.6953 37.5v20.883c0 7.6725 15.592 13.922 34.805 13.922s34.805-6.2493 34.805-13.922v-20.883\" />\n <path d=\"m2.6953 16.617v20.883c0 7.7035 15.592 13.922 34.805 13.922s34.805-6.2184 34.805-13.922v-20.883\" />\n <path d=\"m37.5 30.539c19.212 0 34.805-6.2185 34.805-13.922 0-7.7034-15.592-13.922-34.805-13.922s-34.805 6.2184-34.805 13.922c0 7.7035 15.592 13.922 34.805 13.922z\" />\n </g>\n <g className={styles.circleBack}>\n <path\n transform=\"matrix(2.7868 0 0 2.7868 -132.86 -110.58)\"\n d=\"m62.198 60.586c.6388 0 1.1558.5171 1.1558 1.1559 0 .6387-.517 1.1558-1.1558 1.1558-.6387 0-1.1558-.5171-1.1558-1.1558 0-.6388.5171-1.1559 1.1558-1.1559z\"\n />\n <path\n transform=\"matrix(2.7868 0 0 2.7868 -122.04 -111.7)\"\n d=\"m62.198 60.586c.6388 0 1.1558.5171 1.1558 1.1559 0 .6387-.517 1.1558-1.1558 1.1558-.6387 0-1.1558-.5171-1.1558-1.1558 0-.6388.5171-1.1559 1.1558-1.1559z\"\n />\n <path\n transform=\"matrix(2.7868 0 0 2.7868 -111.21 -114.77)\"\n d=\"m62.198 60.586c.6388 0 1.1558.5171 1.1558 1.1559 0 .6387-.517 1.1558-1.1558 1.1558-.6387 0-1.1558-.5171-1.1558-1.1558 0-.6388.5171-1.1559 1.1558-1.1559z\"\n />\n </g>\n <g className={styles.circle}>\n <path\n transform=\"matrix(1.4922 0 0 1.4922 -52.337 -30.65)\"\n d=\"m62.198 60.586c.6388 0 1.1558.5171 1.1558 1.1559 0 .6387-.517 1.1558-1.1558 1.1558-.6387 0-1.1558-.5171-1.1558-1.1558 0-.6388.5171-1.1559 1.1558-1.1559z\"\n />\n <path\n transform=\"matrix(1.4922 0 0 1.4922 -41.518 -31.769)\"\n d=\"m62.198 60.586c.6388 0 1.1558.5171 1.1558 1.1559 0 .6387-.517 1.1558-1.1558 1.1558-.6387 0-1.1558-.5171-1.1558-1.1558 0-.6388.5171-1.1559 1.1558-1.1559z\"\n />\n <path\n transform=\"matrix(1.4922 0 0 1.4922 -30.688 -34.842)\"\n d=\"m62.198 60.586c.6388 0 1.1558.5171 1.1558 1.1559 0 .6387-.517 1.1558-1.1558 1.1558-.6387 0-1.1558-.5171-1.1558-1.1558 0-.6388.5171-1.1559 1.1558-1.1559z\"\n />\n </g>\n </g>\n );\n};\n","import { useStyles2 } from '@grafana/ui';\n\nimport { getServerStyles, ServerData } from '../server';\n\nexport const ServerSingle = (data: ServerData) => {\n const styles = useStyles2(getServerStyles(data));\n return (\n <g>\n <g className={styles.outline} transform=\"matrix(1.01 0 0 1.01 -.375 -.375)\">\n <g className={styles.server}>\n <path d=\"m3.2812 55.659 9.125-52.377h50.188l9.125 52.377\" />\n <path d=\"m3.2812 56.328c0-2.5246 2.0379-4.5625 4.5625-4.5625h59.313c2.5245 0 4.5625 2.0379 4.5625 4.5625v10.828c0 2.5245-2.038 4.5625-4.5625 4.5625h-59.313c-2.5246 0-4.5625-2.038-4.5625-4.5625z\" />\n </g>\n <path d=\"m12.406 61.742h30.69\" />\n <path d=\"m52.8 51.765v19.953\" />\n <path\n className={styles.circleBack}\n transform=\"matrix(2.7592 0 0 2.7592 -109.42 -108.61)\"\n d=\"m62.198 60.586c.6388 0 1.1558.5171 1.1558 1.1559 0 .6387-.517 1.1558-1.1558 1.1558-.6387 0-1.1558-.5171-1.1558-1.1558 0-.6388.5171-1.1559 1.1558-1.1559z\"\n />\n <path\n className={styles.circle}\n transform=\"matrix(1.4775 0 0 1.4775 -29.697 -29.479)\"\n d=\"m62.198 60.586c.6388 0 1.1558.5171 1.1558 1.1559 0 .6387-.517 1.1558-1.1558 1.1558-.6387 0-1.1558-.5171-1.1558-1.1558 0-.6388.5171-1.1559 1.1558-1.1559z\"\n />\n </g>\n </g>\n );\n};\n","import { useStyles2 } from '@grafana/ui';\n\nimport { getServerStyles, ServerData } from '../server';\n\nexport const ServerStack = (data: ServerData) => {\n const styles = useStyles2(getServerStyles(data));\n return (\n <g className={styles.outline} transform=\"translate(.5 .49865)\">\n <g className={styles.server}>\n <path d=\"m3.4834 21.768 8.0783-19.456h50.875l8.0784 19.456\" />\n <path d=\"m2.3125 24.852c0-2.5592 2.0658-4.625 4.625-4.625h60.125c2.5592 0 4.625 2.0658 4.625 4.625v7.8933c0 2.5592-2.0658 4.625-4.625 4.625h-60.125c-2.5592 0-4.625-2.0658-4.625-4.625z\" />\n <path d=\"m2.3125 42.031c0-2.5592 2.0658-4.6251 4.625-4.6251h60.125c2.5592 0 4.625 2.0659 4.625 4.6251v7.8933c0 2.5592-2.0658 4.625-4.625 4.625h-60.125c-2.5592 0-4.625-2.0658-4.625-4.625z\" />\n <path d=\"m2.3125 59.172c0-2.5592 2.0658-4.625 4.625-4.625h60.125c2.5592 0 4.625 2.0658 4.625 4.625v7.8933c0 2.5592-2.0658 4.625-4.625 4.625h-60.125c-2.5592 0-4.625-2.0658-4.625-4.625z\" />\n </g>\n <path d=\"m11.562 28.797h31.111\" />\n <path d=\"m52.508 20.227v17.143\" />\n <path d=\"m11.562 63.117h31.111\" />\n <path d=\"m52.508 54.547v17.143\" />\n <path d=\"m11.562 45.977h31.111\" />\n <path d=\"m52.508 37.406v17.143\" />\n <g className={styles.circleBack}>\n <path\n transform=\"matrix(2.7868 0 0 2.7868 -111.31 -143.2)\"\n d=\"m62.198 60.586c.6388 0 1.1558.5171 1.1558 1.1559 0 .6387-.517 1.1558-1.1558 1.1558-.6387 0-1.1558-.5171-1.1558-1.1558 0-.6388.5171-1.1559 1.1558-1.1559z\"\n />\n <path\n transform=\"matrix(2.7868 0 0 2.7868 -111.31 -126.14)\"\n d=\"m62.198 60.586c.6388 0 1.1558.5171 1.1558 1.1559 0 .6387-.517 1.1558-1.1558 1.1558-.6387 0-1.1558-.5171-1.1558-1.1558 0-.6388.5171-1.1559 1.1558-1.1559z\"\n />\n <path\n transform=\"matrix(2.7868 0 0 2.7868 -111.31 -108.86)\"\n d=\"m62.198 60.586c.6388 0 1.1558.5171 1.1558 1.1559 0 .6387-.517 1.1558-1.1558 1.1558-.6387 0-1.1558-.5171-1.1558-1.1558 0-.6388.5171-1.1559 1.1558-1.1559z\"\n />\n </g>\n <g className={styles.circle}>\n <path\n transform=\"matrix(1.4922 0 0 1.4922 -30.794 -63.277)\"\n d=\"m62.198 60.586c.6388 0 1.1558.5171 1.1558 1.1559 0 .6387-.517 1.1558-1.1558 1.1558-.6387 0-1.1558-.5171-1.1558-1.1558 0-.6388.5171-1.1559 1.1558-1.1559z\"\n />\n <path\n transform=\"matrix(1.4922 0 0 1.4922 -30.794 -46.209)\"\n d=\"m62.198 60.586c.6388 0 1.1558.5171 1.1558 1.1559 0 .6387-.517 1.1558-1.1558 1.1558-.6387 0-1.1558-.5171-1.1558-1.1558 0-.6388.5171-1.1559 1.1558-1.1559z\"\n />\n <path\n transform=\"matrix(1.4922 0 0 1.4922 -30.794 -28.93)\"\n d=\"m62.198 60.586c.6388 0 1.1558.5171 1.1558 1.1559 0 .6387-.517 1.1558-1.1558 1.1558-.6387 0-1.1558-.5171-1.1558-1.1558 0-.6388.5171-1.1559 1.1558-1.1559z\"\n />\n </g>\n </g>\n );\n};\n","import { useStyles2 } from '@grafana/ui';\n\nimport { getServerStyles, ServerData } from '../server';\n\nexport const ServerTerminal = (data: ServerData) => {\n const styles = useStyles2(getServerStyles(data));\n return (\n <g className={styles.outline}>\n <g className={styles.server}>\n <path d=\"m5.3125 9.6562c0-3.5621 2.8754-6.4375 6.4375-6.4375h51.5c3.5621 0 6.4375 2.8754 6.4375 6.4375v28.625c0 3.5621-2.8754 6.4375-6.4375 6.4375h-51.5c-3.5621 0-6.4375-2.8754-6.4375-6.4375z\" />\n <path d=\"m2.8125 59.859c0-2.5592 2.0658-4.625 4.625-4.625h60.125c2.5592 0 4.625 2.0658 4.625 4.625v7.8933c0 2.5592-2.0658 4.625-4.625 4.625h-60.125c-2.5592 0-4.625-2.0658-4.625-4.625z\" />\n </g>\n <path d=\"m37.5 46.719v2.875\" />\n <path d=\"m24.625 51.343h25.75\" />\n <path d=\"m12.062 63.804h31.111\" />\n <path d=\"m53.008 55.234v17.143\" />\n <path\n className={styles.circleBack}\n transform=\"matrix(2.7868 0 0 2.7868 -110.81 -108.2)\"\n d=\"m62.198 60.586c.6388 0 1.1558.5171 1.1558 1.1559 0 .6387-.517 1.1558-1.1558 1.1558-.6387 0-1.1558-.5171-1.1558-1.1558 0-.6388.5171-1.1559 1.1558-1.1559z\"\n />\n <path\n className={styles.circle}\n transform=\"matrix(1.4922 0 0 1.4922 -30.294 -28.27)\"\n d=\"m62.198 60.586c.6388 0 1.1558.5171 1.1558 1.1559 0 .6387-.517 1.1558-1.1558 1.1558-.6387 0-1.1558-.5171-1.1558-1.1558 0-.6388.5171-1.1559 1.1558-1.1559z\"\n />\n </g>\n );\n};\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2, LinkModel } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { ColorDimensionConfig, ScalarDimensionConfig } from '@grafana/schema';\nimport config from 'app/core/config';\nimport { DimensionContext } from 'app/features/dimensions/context';\nimport { ColorDimensionEditor } from 'app/features/dimensions/editors/ColorDimensionEditor';\nimport { ScalarDimensionEditor } from 'app/features/dimensions/editors/ScalarDimensionEditor';\n\nimport { CanvasElementItem, CanvasElementOptions, CanvasElementProps } from '../../element';\n\nimport { ServerDatabase } from './types/database';\nimport { ServerSingle } from './types/single';\nimport { ServerStack } from './types/stack';\nimport { ServerTerminal } from './types/terminal';\n\ninterface ServerConfig {\n blinkRate?: ScalarDimensionConfig;\n statusColor?: ColorDimensionConfig;\n bulbColor?: ColorDimensionConfig;\n type: ServerType;\n}\n\nexport interface ServerData {\n blinkRate?: number;\n statusColor?: string;\n bulbColor?: string;\n type: ServerType;\n links?: LinkModel[];\n}\n\nenum ServerType {\n Single = 'Single',\n Stack = 'Stack',\n Database = 'Database',\n Terminal = 'Terminal',\n}\n\ntype Props = CanvasElementProps<ServerConfig, ServerData>;\nconst outlineColor = config.theme2.colors.text.primary;\n\nconst ServerDisplay = ({ data }: Props) => {\n return data ? (\n <svg viewBox=\"0 0 75 75\">\n {data.type === ServerType.Single ? (\n <ServerSingle {...data} />\n ) : data.type === ServerType.Stack ? (\n <ServerStack {...data} />\n ) : data.type === ServerType.Database ? (\n <ServerDatabase {...data} />\n ) : data.type === ServerType.Terminal ? (\n <ServerTerminal {...data} />\n ) : null}\n </svg>\n ) : null;\n};\n\nexport const serverItem: CanvasElementItem<ServerConfig, ServerData> = {\n id: 'server',\n name: 'Server',\n description: 'Basic server with status',\n\n display: ServerDisplay,\n\n defaultSize: {\n width: 100,\n height: 100,\n },\n\n getNewOptions: (options) => ({\n ...options,\n background: {\n color: {\n fixed: 'transparent',\n },\n },\n placement: {\n width: options?.placement?.width ?? 100,\n height: options?.placement?.height ?? 100,\n top: options?.placement?.top,\n left: options?.placement?.left,\n rotation: options?.placement?.rotation ?? 0,\n },\n config: {\n type: ServerType.Single,\n },\n links: options?.links ?? [],\n }),\n\n // Called when data changes\n prepareData: (dimensionContext: DimensionContext, elementOptions: CanvasElementOptions<ServerConfig>) => {\n const serverConfig = elementOptions.config;\n\n const data: ServerData = {\n blinkRate: serverConfig?.blinkRate ? dimensionContext.getScalar(serverConfig.blinkRate).value() : 0,\n statusColor: serverConfig?.statusColor\n ? dimensionContext.getColor(serverConfig.statusColor).value()\n : 'transparent',\n bulbColor: serverConfig?.bulbColor ? dimensionContext.getColor(serverConfig.bulbColor).value() : 'green',\n type: serverConfig?.type ?? ServerType.Single,\n };\n\n return data;\n },\n\n registerOptionsUI: (builder) => {\n const category = [t('canvas.server-item.category-server', 'Server')];\n builder\n .addSelect({\n category,\n path: 'config.type',\n name: t('canvas.server-item.name-type', 'Type'),\n settings: {\n options: [\n { value: ServerType.Single, label: t('canvas.server-item.type-options.label-single', 'Single') },\n { value: ServerType.Stack, label: t('canvas.server-item.type-options.label-stack', 'Stack') },\n { value: ServerType.Database, label: t('canvas.server-item.type-options.label-database', 'Database') },\n { value: ServerType.Terminal, label: t('canvas.server-item.type-options.label-terminal', 'Terminal') },\n ],\n },\n defaultValue: ServerType.Single,\n })\n .addCustomEditor({\n category,\n id: 'statusColor',\n path: 'config.statusColor',\n name: t('canvas.server-item.name-status-color', 'Status color'),\n editor: ColorDimensionEditor,\n settings: {},\n defaultValue: {\n fixed: 'transparent',\n },\n })\n .addCustomEditor({\n category,\n id: 'bulbColor',\n path: 'config.bulbColor',\n name: t('canvas.server-item.name-bulb-color', 'Bulb color'),\n editor: ColorDimensionEditor,\n settings: {},\n defaultValue: {\n fixed: 'green',\n },\n })\n .addCustomEditor({\n category,\n id: 'blinkRate',\n path: 'config.blinkRate',\n name: t('canvas.server-item.name-blink-rate', 'Blink rate [hz] (0 = off)'),\n editor: ScalarDimensionEditor,\n settings: { min: 0, max: 100 },\n });\n },\n};\n\nexport const getServerStyles = (data: ServerData | undefined) => (theme: GrafanaTheme2) => ({\n bulb: css({\n '@keyframes blink': {\n '0%': {\n fillOpacity: 0,\n },\n '50%': {\n fillOpacity: 1,\n },\n '100%': {\n fillOpacity: 0,\n },\n },\n }),\n server: css({\n fill: data?.statusColor ?? 'transparent',\n }),\n circle: css({\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n animation: `blink ${data?.blinkRate ? 1 / data.blinkRate : 0}s infinite step-end`,\n },\n fill: data?.bulbColor,\n stroke: 'none',\n }),\n circleBack: css({\n fill: outlineColor,\n stroke: 'none',\n opacity: 1,\n }),\n outline: css({\n stroke: outlineColor,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n strokeWidth: '4px',\n }),\n});\n","import { css } from '@emotion/css';\nimport { useCallback, useEffect, useRef } from 'react';\nimport * as React from 'react';\nimport { useObservable } from 'react-use';\nimport { of } from 'rxjs';\n\nimport { DataFrame, GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Input, usePanelContext, useStyles2 } from '@grafana/ui';\nimport { DimensionContext } from 'app/features/dimensions/context';\nimport { ColorDimensionEditor } from 'app/features/dimensions/editors/ColorDimensionEditor';\nimport { TextDimensionEditor } from 'app/features/dimensions/editors/TextDimensionEditor';\n\nimport { CanvasElementItem, CanvasElementOptions, CanvasElementProps, defaultThemeTextColor } from '../element';\nimport { ElementState } from '../runtime/element';\nimport { Align, TextConfig, TextData, VAlign } from '../types';\n\nconst TextDisplay = (props: CanvasElementProps<TextConfig, TextData>) => {\n const { data, isSelected } = props;\n const styles = useStyles2(getStyles(data));\n\n const context = usePanelContext();\n const scene = context.instanceState?.scene;\n\n const isEditMode = useObservable<boolean>(scene?.editModeEnabled ?? of(false));\n\n if (isEditMode && isSelected) {\n return <TextEdit {...props} />;\n }\n return (\n <div className={styles.container}>\n <span className={styles.span}>\n {data?.text ? data.text : t('canvas.text-display.double-click-to-set', 'Double click to set text')}\n </span>\n </div>\n );\n};\n\nconst TextEdit = (props: CanvasElementProps<TextConfig, TextData>) => {\n let { data, config } = props;\n const context = usePanelContext();\n let panelData: DataFrame[];\n panelData = context.instanceState?.scene?.data.series;\n\n const textRef = useRef<string>(config.text?.fixed ?? '');\n\n // Save text on TextEdit unmount\n useEffect(() => {\n return () => {\n saveText(textRef.current);\n };\n });\n\n const onKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n const scene = context.instanceState?.scene;\n if (scene) {\n scene.editModeEnabled.next(false);\n }\n }\n };\n\n const onKeyUp = (event: React.KeyboardEvent<HTMLInputElement>) => {\n textRef.current = event.currentTarget.value;\n };\n\n const saveText = useCallback(\n (textValue: string) => {\n let selectedElement: ElementState;\n selectedElement = context.instanceState?.selected[0];\n if (selectedElement) {\n const options = selectedElement.options;\n selectedElement.onChange({\n ...options,\n config: {\n ...options.config,\n text: { ...selectedElement.options.config.text, fixed: textValue },\n },\n });\n\n // Force a re-render (update scene data after config update)\n const scene = context.instanceState?.scene;\n if (scene) {\n scene.updateData(scene.data);\n }\n }\n },\n [context.instanceState?.scene, context.instanceState?.selected]\n );\n\n const styles = useStyles2(getStyles(data));\n return (\n <div className={styles.inlineEditorContainer}>\n {panelData && <Input defaultValue={config.text?.fixed ?? ''} onKeyDown={onKeyDown} onKeyUp={onKeyUp} autoFocus />}\n </div>\n );\n};\n\nconst getStyles = (data: TextData | undefined) => (theme: GrafanaTheme2) => ({\n container: css({\n position: 'absolute',\n height: '100%',\n width: '100%',\n display: 'table',\n }),\n inlineEditorContainer: css({\n height: '100%',\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(1),\n }),\n span: css({\n display: 'table-cell',\n verticalAlign: data?.valign,\n textAlign: data?.align,\n fontSize: `${data?.size}px`,\n color: data?.color,\n }),\n});\n\nexport const textItem: CanvasElementItem<TextConfig, TextData> = {\n id: 'text',\n name: 'Text',\n description: 'Display text',\n\n display: TextDisplay,\n\n hasEditMode: true,\n\n defaultSize: {\n width: 100,\n height: 50,\n },\n\n getNewOptions: (options) => ({\n ...options,\n config: {\n align: Align.Center,\n valign: VAlign.Middle,\n color: {\n fixed: defaultThemeTextColor,\n },\n size: 16,\n },\n placement: {\n width: options?.placement?.width ?? 100,\n height: options?.placement?.height ?? 100,\n top: options?.placement?.top,\n left: options?.placement?.left,\n rotation: options?.placement?.rotation ?? 0,\n },\n links: options?.links ?? [],\n }),\n\n prepareData: (dimensionContext: DimensionContext, elementOptions: CanvasElementOptions<TextConfig>) => {\n const textConfig = elementOptions.config;\n\n const data: TextData = {\n text: textConfig?.text ? dimensionContext.getText(textConfig.text).value() : '',\n field: textConfig?.text?.field,\n align: textConfig?.align ?? Align.Center,\n valign: textConfig?.valign ?? VAlign.Middle,\n size: textConfig?.size,\n };\n\n if (textConfig?.color) {\n data.color = dimensionContext.getColor(textConfig.color).value();\n }\n\n return data;\n },\n\n registerOptionsUI: (builder) => {\n const category = [t('canvas.text-item.category-text', 'Text')];\n builder\n .addCustomEditor({\n category,\n id: 'textSelector',\n path: 'config.text',\n name: t('canvas.text-item.name-text', 'Text'),\n editor: TextDimensionEditor,\n })\n .addCustomEditor({\n category,\n id: 'config.color',\n path: 'config.color',\n name: t('canvas.text-item.name-text-color', 'Text color'),\n editor: ColorDimensionEditor,\n settings: {},\n defaultValue: {},\n })\n .addRadio({\n category,\n path: 'config.align',\n name: t('canvas.text-item.name-align-text', 'Align text'),\n settings: {\n options: [\n { value: Align.Left, label: t('canvas.text-item.label.left', 'Left') },\n { value: Align.Center, label: t('canvas.text-item.label.center', 'Center') },\n { value: Align.Right, label: t('canvas.text-item.label.right', 'Right') },\n ],\n },\n defaultValue: Align.Left,\n })\n .addRadio({\n category,\n path: 'config.valign',\n name: t('canvas.text-item.name-vertical-align', 'Vertical align'),\n settings: {\n options: [\n { value: VAlign.Top, label: t('canvas.text-item.label.top', 'Top') },\n { value: VAlign.Middle, label: t('canvas.text-item.label.middle', 'Middle') },\n { value: VAlign.Bottom, label: t('canvas.text-item.label.bottom', 'Bottom') },\n ],\n },\n defaultValue: VAlign.Middle,\n })\n .addNumberInput({\n category,\n path: 'config.size',\n name: t('canvas.text-item.name-text-size', 'Text size'),\n settings: {\n placeholder: t('canvas.text-item.placeholder.auto', 'Auto'),\n },\n });\n },\n};\n","import { css } from '@emotion/css';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { config } from 'app/core/config';\nimport { DimensionContext } from 'app/features/dimensions/context';\nimport { ColorDimensionEditor } from 'app/features/dimensions/editors/ColorDimensionEditor';\nimport { TextDimensionEditor } from 'app/features/dimensions/editors/TextDimensionEditor';\n\nimport {\n CanvasElementItem,\n CanvasElementProps,\n CanvasElementOptions,\n defaultBgColor,\n defaultTextColor,\n} from '../element';\nimport { Align, CanvasElementConfig, CanvasElementData, VAlign } from '../types';\n\nconst Triangle = (props: CanvasElementProps<CanvasElementConfig, CanvasElementData>) => {\n const { data } = props;\n const styles = getStyles(config.theme2, data);\n\n // uuid needed to avoid id conflicts when multiple elements are rendered\n const uniqueId = uuidv4();\n\n return (\n <div className={styles.container}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 200 200\"\n width=\"100%\"\n height=\"100%\"\n preserveAspectRatio=\"none\"\n >\n <defs>\n <pattern id={`image-${uniqueId}`} patternUnits=\"userSpaceOnUse\" width=\"200\" height=\"200\">\n <image xlinkHref={data?.backgroundImage} x=\"-50\" y=\"-50\" width=\"300\" height=\"300\"></image>\n </pattern>\n <clipPath id={`triangleClip-${uniqueId}`}>\n <polygon points=\"100,0 200,200 0,200\" />\n </clipPath>\n </defs>\n {/* Apply background image within the clipping area */}\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n clipPath={`url(#triangleClip-${uniqueId})`}\n style={{ fill: 'none' }}\n />\n <polygon\n points=\"100,0 200,200 0,200\"\n style={{ fill: data?.backgroundImage ? `url(#image-${uniqueId})` : data?.backgroundColor }}\n />\n\n {/* Border */}\n <polygon\n points=\"100,0 200,200 0,200\"\n clipPath={`url(#triangleClip-${uniqueId})`}\n className={styles.elementBorder}\n />\n </svg>\n\n <span className={styles.text}>{data?.text}</span>\n </div>\n );\n};\n\nexport const triangleItem: CanvasElementItem = {\n id: 'triangle',\n name: 'Triangle',\n description: 'Triangle',\n\n display: Triangle,\n\n defaultSize: {\n width: 160,\n height: 138,\n },\n\n getNewOptions: (options) => ({\n ...options,\n background: {\n color: {\n fixed: defaultBgColor,\n },\n },\n config: {\n align: Align.Center,\n valign: VAlign.Middle,\n color: {\n fixed: defaultTextColor,\n },\n },\n placement: {\n width: options?.placement?.width ?? 160,\n height: options?.placement?.height ?? 138,\n top: options?.placement?.top,\n left: options?.placement?.left,\n rotation: options?.placement?.rotation ?? 0,\n },\n links: options?.links ?? [],\n }),\n\n // Called when data changes\n prepareData: (dimensionContext: DimensionContext, elementOptions: CanvasElementOptions<CanvasElementConfig>) => {\n const textConfig = elementOptions.config;\n\n const data: CanvasElementData = {\n text: textConfig?.text ? dimensionContext.getText(textConfig.text).value() : '',\n field: textConfig?.text?.field,\n align: textConfig?.align ?? Align.Center,\n valign: textConfig?.valign ?? VAlign.Middle,\n size: textConfig?.size,\n };\n\n if (textConfig?.color) {\n data.color = dimensionContext.getColor(textConfig.color).value();\n }\n\n const { background, border } = elementOptions;\n data.backgroundColor = background?.color ? dimensionContext.getColor(background.color).value() : defaultBgColor;\n data.borderColor = border?.color ? dimensionContext.getColor(border.color).value() : defaultBgColor;\n data.borderWidth = border?.width ?? 0;\n\n data.backgroundImage = background?.image ? dimensionContext.getResource(background.image).value() : undefined;\n\n return data;\n },\n\n registerOptionsUI: (builder) => {\n const category = [t('canvas.triangle-item.category-triangle', 'Triangle')];\n builder\n .addCustomEditor({\n category,\n id: 'textSelector',\n path: 'config.text',\n name: t('canvas.triangle-item.name-text', 'Text'),\n editor: TextDimensionEditor,\n })\n .addCustomEditor({\n category,\n id: 'config.color',\n path: 'config.color',\n name: t('canvas.triangle-item.name-text-color', 'Text color'),\n editor: ColorDimensionEditor,\n settings: {},\n defaultValue: {},\n })\n .addRadio({\n category,\n path: 'config.align',\n name: t('canvas.triangle-item.name-align-text', 'Align text'),\n settings: {\n options: [\n { value: Align.Left, label: t('canvas.triangle-item.label.left', 'Left') },\n { value: Align.Center, label: t('canvas.triangle-item.label.center', 'Center') },\n { value: Align.Right, label: t('canvas.triangle-item.label.right', 'Right') },\n ],\n },\n defaultValue: Align.Left,\n })\n .addRadio({\n category,\n path: 'config.valign',\n name: t('canvas.triangle-item.name-vertical-align', 'Vertical align'),\n settings: {\n options: [\n { value: VAlign.Top, label: t('canvas.triangle-item.label.top', 'Top') },\n { value: VAlign.Middle, label: t('canvas.triangle-item.label.middle', 'Middle') },\n { value: VAlign.Bottom, label: t('canvas.triangle-item.label.bottom', 'Bottom') },\n ],\n },\n defaultValue: VAlign.Middle,\n })\n .addNumberInput({\n category,\n path: 'config.size',\n name: t('canvas.triangle-item.name-text-size', 'Text size'),\n settings: {\n placeholder: t('canvas.triangle-item.placeholder.auto', 'Auto'),\n },\n });\n },\n\n customConnectionAnchors: [\n // points along the left edge\n { x: -1, y: -1 }, // bottom left\n { x: -0.8, y: -0.6 },\n { x: -0.6, y: -0.2 },\n { x: -0.4, y: 0.2 },\n { x: -0.2, y: 0.6 },\n { x: 0, y: 1 }, // top\n\n // points along the right edge\n { x: 0.2, y: 0.6 },\n { x: 0.4, y: 0.2 },\n { x: 0.6, y: -0.2 },\n { x: 0.8, y: -0.6 },\n { x: 1, y: -1 }, // bottom right\n\n // points along the bottom edge\n { x: 0.6, y: -1 },\n { x: 0.2, y: -1 },\n { x: -0.2, y: -1 },\n { x: -0.6, y: -1 },\n ],\n};\n\nconst getStyles = (theme: GrafanaTheme2, data: CanvasElementData | undefined) => {\n const textTop = data?.valign === VAlign.Middle ? '50%' : data?.valign === VAlign.Top ? '10%' : '90%';\n const textLeft = data?.align === Align.Center ? '50%' : data?.align === Align.Left ? '10%' : '90%';\n const textTransform = `translate(${data?.align === Align.Center ? '-50%' : data?.align === Align.Left ? '10%' : '-90%'}, ${\n data?.valign === VAlign.Middle ? '-50%' : data?.valign === VAlign.Top ? '10%' : '-90%'\n })`;\n\n return {\n container: css({\n height: '100%',\n width: '100%',\n }),\n text: css({\n position: 'absolute',\n top: textTop,\n left: textLeft,\n transform: textTransform,\n fontSize: `${data?.size}px`,\n color: data?.color,\n }),\n elementBorder: css({\n fill: 'none',\n stroke: data?.borderColor ?? 'none',\n strokeWidth: data?.borderWidth ?? 0,\n strokeLinejoin: 'round',\n }),\n };\n};\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2, LinkModel } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { ScalarDimensionConfig } from '@grafana/schema';\nimport { useStyles2 } from '@grafana/ui';\nimport { DimensionContext } from 'app/features/dimensions/context';\nimport { ScalarDimensionEditor } from 'app/features/dimensions/editors/ScalarDimensionEditor';\n\nimport { CanvasElementItem, CanvasElementOptions, CanvasElementProps, defaultBgColor } from '../element';\n\ninterface WindTurbineData {\n rpm?: number;\n links?: LinkModel[];\n}\n\ninterface WindTurbineConfig {\n rpm?: ScalarDimensionConfig;\n}\n\nconst WindTurbineDisplay = ({ data }: CanvasElementProps<WindTurbineConfig, WindTurbineData>) => {\n const styles = useStyles2(getStyles);\n\n const windTurbineAnimation = `spin ${data?.rpm ? 60 / Math.abs(data.rpm) : 0}s linear infinite`;\n\n return (\n <svg viewBox=\"0 0 189.326 283.989\" preserveAspectRatio=\"xMidYMid meet\" style={{ fill: defaultBgColor }}>\n <symbol id=\"blade\">\n <path\n fill=\"#e6e6e6\"\n id=\"blade-front\"\n d=\"M14.6491879,1.85011601 C14.2684455,-0.0535962877 10.7150812,-0.815081206 9.06473318,3.37308585 L0.434338747,70.7658933 L8.93805104,91.9607889 L15.4106729,90.437819 L17.5684455,78.3807425 L14.5218097,1.97679814 L14.6491879,1.85011601 Z\"\n />\n <path\n fill=\"#d0d6d7\"\n id=\"blade-side\"\n d=\"M11.0951276,0.581206497 C10.3336427,0.961948956 9.57215777,1.85011601 8.93735499,3.24640371 L0.306960557,70.6392111 L8.81067285,91.8341067 L3.35359629,70.0044084 L11.0951276,0.581206497 Z\"\n />\n </symbol>\n\n <g>\n <g id=\"structure\" transform=\"translate(58.123, 82.664)\" fillRule=\"nonzero\">\n <polygon id=\"tower\" fill=\"#e6e6e6\" points=\"33.111,10.984 39.965,10.984 44.28,196.176 28.796,196.176\" />\n <path\n id=\"yaw\"\n fill=\"rgba(0,0,0,0.25)\"\n d=\"M40.3454756,23.2948956 L40.7262181,34.8445476 C38.8225058,35.0986079 35.7765661,35.0986079 32.349884,34.337123 L32.7306265,23.2955916 L40.3454756,23.2955916 L40.3454756,23.2948956 Z\"\n />\n <path\n id=\"base\"\n fill=\"#d0d6d7\"\n transform=\"translate(0 42)\"\n d=\"M26.3846868,150.591647 L46.5640371,150.591647 C48.8484919,150.591647 50.7522042,152.49536 50.7522042,154.779814 L50.7522042,158.967981 L22.0691415,158.967981 L22.0691415,154.779814 C22.0691415,152.49536 23.9728538,150.591647 26.2573086,150.591647 L26.3846868,150.591647 Z\"\n />\n <circle id=\"nacelle\" fill=\"#e6e6e6\" cx=\"36.54\" cy=\"12\" r=\"11.93\" />\n <circle id=\"gearbox\" fill=\"none\" stroke=\"#d0d6d7\" strokeWidth=\"2.75\" cx=\"36.538\" cy=\"11.999\" r=\"5.8\" />\n </g>\n <g className={styles.blade} style={{ animation: windTurbineAnimation }}>\n <use id=\"blade1\" href=\"#blade\" x=\"83.24\" y=\"0\" />\n <use id=\"blade2\" href=\"#blade\" x=\"83.24\" y=\"0\" transform=\"rotate(120 94.663 94.663)\" />\n <use id=\"blade3\" href=\"#blade\" x=\"83.24\" y=\"0\" transform=\"rotate(-120 94.663 94.663)\" />\n </g>\n </g>\n </svg>\n );\n};\n\nexport const windTurbineItem: CanvasElementItem = {\n id: 'windTurbine',\n name: 'Wind Turbine',\n description: 'Spinny spinny',\n\n display: WindTurbineDisplay,\n\n defaultSize: {\n width: 100,\n height: 155,\n },\n\n getNewOptions: (options) => ({\n ...options,\n background: {\n color: {\n fixed: 'transparent',\n },\n },\n placement: {\n width: options?.placement?.width ?? 100,\n height: options?.placement?.height ?? 155,\n top: options?.placement?.top,\n left: options?.placement?.left,\n rotation: options?.placement?.rotation ?? 0,\n },\n links: options?.links ?? [],\n }),\n\n // Called when data changes\n prepareData: (dimensionContext: DimensionContext, elementOptions: CanvasElementOptions<WindTurbineConfig>) => {\n const windTurbineConfig = elementOptions.config;\n\n const data: WindTurbineData = {\n rpm: windTurbineConfig?.rpm ? dimensionContext.getScalar(windTurbineConfig.rpm).value() : 0,\n };\n\n return data;\n },\n\n registerOptionsUI: (builder) => {\n const category = [t('canvas.wind-turbine-item.category-wind-turbine', 'Wind Turbine')];\n builder.addCustomEditor({\n category,\n id: 'rpm',\n path: 'config.rpm',\n name: t('canvas.wind-turbine-item.name-rpm', 'RPM'),\n editor: ScalarDimensionEditor,\n });\n },\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n blade: css({\n transformOrigin: '94.663px 94.663px',\n transform: 'rotate(15deg)',\n '@keyframes spin': {\n from: {\n transform: 'rotate(0deg)',\n },\n to: {\n transform: 'rotate(360deg)',\n },\n },\n }),\n});\n","import { Registry } from '@grafana/data';\n\nimport { CanvasElementItem, CanvasElementOptions } from './element';\nimport { buttonItem } from './elements/button';\nimport { cloudItem } from './elements/cloud';\nimport { droneFrontItem } from './elements/droneFront';\nimport { droneSideItem } from './elements/droneSide';\nimport { droneTopItem } from './elements/droneTop';\nimport { ellipseItem } from './elements/ellipse';\nimport { iconItem } from './elements/icon';\nimport { metricValueItem } from './elements/metricValue';\nimport { parallelogramItem } from './elements/parallelogram';\nimport { rectangleItem } from './elements/rectangle';\nimport { serverItem } from './elements/server/server';\nimport { textItem } from './elements/text';\nimport { triangleItem } from './elements/triangle';\nimport { windTurbineItem } from './elements/windTurbine';\n\nexport const DEFAULT_CANVAS_ELEMENT_CONFIG: CanvasElementOptions = {\n ...metricValueItem.getNewOptions(),\n placement: { ...metricValueItem.getNewOptions().placement, ...metricValueItem.defaultSize },\n type: metricValueItem.id,\n name: `Element 1`,\n};\n\nexport const defaultElementItems = [\n metricValueItem, // default for now\n textItem,\n ellipseItem,\n rectangleItem,\n iconItem,\n serverItem,\n triangleItem,\n cloudItem,\n parallelogramItem,\n];\n\nexport const advancedElementItems = [buttonItem, windTurbineItem, droneTopItem, droneFrontItem, droneSideItem];\n\nexport const canvasElementRegistry = new Registry<CanvasElementItem>(() => [\n ...defaultElementItems,\n ...advancedElementItems,\n]);\n","import * as React from 'react';\nimport { CSSProperties } from 'react';\nimport { OnDrag, OnResize, OnRotate } from 'react-moveable/declaration/types';\n\nimport {\n FieldType,\n getLinksSupplier,\n LinkModel,\n ScopedVars,\n ValueLinkConfig,\n OneClickMode,\n ActionModel,\n ActionVariableInput,\n ActionType,\n} from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { TooltipDisplayMode } from '@grafana/schema';\nimport { ConfirmModal, VariablesInputModal } from '@grafana/ui';\nimport { LayerElement } from 'app/core/components/Layers/types';\nimport { config } from 'app/core/config';\nimport { notFoundItem } from 'app/features/canvas/elements/notFound';\nimport { DimensionContext } from 'app/features/dimensions/context';\nimport {\n BackgroundImageSize,\n Constraint,\n HorizontalConstraint,\n Placement,\n VerticalConstraint,\n} from 'app/plugins/panel/canvas/panelcfg.gen';\nimport {\n applyStyles,\n getConnectionsByTarget,\n getRowIndex,\n isConnectionTarget,\n removeStyles,\n} from 'app/plugins/panel/canvas/utils';\n\nimport { reportActionTrigger } from '../../actions/analytics';\nimport { getActions, getActionsDefaultField, isInfinityActionWithAuth } from '../../actions/utils';\nimport { CanvasElementItem, CanvasElementOptions } from '../element';\nimport { canvasElementRegistry } from '../registry';\n\nimport { FrameState } from './frame';\nimport { RootElement } from './root';\nimport { Scene } from './scene';\n\nlet counter = 0;\n\nexport const SVGElements = new Set<string>(['parallelogram', 'triangle', 'cloud', 'ellipse']);\n\nexport class ElementState implements LayerElement {\n // UID necessary for moveable to work (for now)\n readonly UID = counter++;\n revId = 0;\n sizeStyle: CSSProperties = {};\n dataStyle: CSSProperties = {};\n\n // Temp stored constraint for visualization purposes (switch to top / left constraint to simplify some functionality)\n tempConstraint: Constraint | undefined;\n\n // Filled in by ref\n div?: HTMLDivElement;\n\n // Calculated\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data?: any; // depends on the type\n\n getLinks?: (config: ValueLinkConfig) => LinkModel[];\n\n // cached for tooltips/mousemove\n oneClickMode = OneClickMode.Off;\n showActionConfirmation = false;\n\n showActionVarsModal = false;\n actionVars: ActionVariableInput = {};\n\n setActionVars = (vars: ActionVariableInput) => {\n this.actionVars = vars;\n this.forceUpdate();\n };\n\n constructor(\n public item: CanvasElementItem,\n public options: CanvasElementOptions,\n public parent?: FrameState\n ) {\n const fallbackName = `Element ${Date.now()}`;\n if (!options) {\n this.options = { type: item.id, name: fallbackName };\n }\n\n options.constraint = options.constraint ?? {\n vertical: VerticalConstraint.Top,\n horizontal: HorizontalConstraint.Left,\n };\n options.placement = options.placement ?? { width: 100, height: 100, top: 0, left: 0, rotation: 0 };\n options.background = options.background ?? { color: { fixed: 'transparent' } };\n options.border = options.border ?? { color: { fixed: 'dark-green' } };\n\n const scene = this.getScene();\n if (!options.name) {\n const newName = scene?.getNextElementName();\n options.name = newName ?? fallbackName;\n }\n scene?.byName.set(options.name, this);\n }\n\n private getScene(): Scene | undefined {\n let trav = this.parent;\n while (trav) {\n if (trav.isRoot()) {\n return trav.scene;\n }\n trav = trav.parent;\n }\n\n return undefined;\n }\n\n getName() {\n return this.options.name;\n }\n\n /** Use the configured options to update CSS style properties directly on the wrapper div **/\n applyLayoutStylesToDiv(disablePointerEvents?: boolean) {\n if (config.featureToggles.canvasPanelPanZoom) {\n this.applyLayoutStylesToDiv2(disablePointerEvents);\n return;\n }\n if (this.isRoot()) {\n // Root supersedes layout engine and is always 100% width + height of panel\n return;\n }\n\n const { constraint } = this.options;\n const { vertical, horizontal } = constraint ?? {};\n const placement: Placement = this.options.placement ?? {};\n\n const editingEnabled = this.getScene()?.isEditingEnabled;\n\n const style: React.CSSProperties = {\n cursor: editingEnabled ? 'grab' : 'auto',\n pointerEvents: disablePointerEvents ? 'none' : 'auto',\n position: 'absolute',\n // Minimum element size is 10x10\n minWidth: '10px',\n minHeight: '10px',\n rotate: `${placement.rotation ?? 0}deg`,\n };\n\n const translate = ['0px', '0px'];\n\n switch (vertical) {\n case VerticalConstraint.Top:\n placement.top = placement.top ?? 0;\n placement.height = placement.height ?? 100;\n style.top = `${placement.top}px`;\n style.height = `${placement.height}px`;\n delete placement.bottom;\n break;\n case VerticalConstraint.Bottom:\n placement.bottom = placement.bottom ?? 0;\n placement.height = placement.height ?? 100;\n style.bottom = `${placement.bottom}px`;\n style.height = `${placement.height}px`;\n delete placement.top;\n break;\n case VerticalConstraint.TopBottom:\n placement.top = placement.top ?? 0;\n placement.bottom = placement.bottom ?? 0;\n style.top = `${placement.top}px`;\n style.bottom = `${placement.bottom}px`;\n delete placement.height;\n style.height = '';\n break;\n case VerticalConstraint.Center:\n placement.top = placement.top ?? 0;\n placement.height = placement.height ?? 100;\n translate[1] = '-50%';\n style.top = `calc(50% - ${placement.top}px)`;\n style.height = `${placement.height}px`;\n delete placement.bottom;\n break;\n case VerticalConstraint.Scale:\n placement.top = placement.top ?? 0;\n placement.bottom = placement.bottom ?? 0;\n style.top = `${placement.top}%`;\n style.bottom = `${placement.bottom}%`;\n delete placement.height;\n style.height = '';\n break;\n }\n\n switch (horizontal) {\n case HorizontalConstraint.Left:\n placement.left = placement.left ?? 0;\n placement.width = placement.width ?? 100;\n style.left = `${placement.left}px`;\n style.width = `${placement.width}px`;\n delete placement.right;\n break;\n case HorizontalConstraint.Right:\n placement.right = placement.right ?? 0;\n placement.width = placement.width ?? 100;\n style.right = `${placement.right}px`;\n style.width = `${placement.width}px`;\n delete placement.left;\n break;\n case HorizontalConstraint.LeftRight:\n placement.left = placement.left ?? 0;\n placement.right = placement.right ?? 0;\n style.left = `${placement.left}px`;\n style.right = `${placement.right}px`;\n delete placement.width;\n style.width = '';\n break;\n case HorizontalConstraint.Center:\n placement.left = placement.left ?? 0;\n placement.width = placement.width ?? 100;\n translate[0] = '-50%';\n style.left = `calc(50% - ${placement.left}px)`;\n style.width = `${placement.width}px`;\n delete placement.right;\n break;\n case HorizontalConstraint.Scale:\n placement.left = placement.left ?? 0;\n placement.right = placement.right ?? 0;\n style.left = `${placement.left}%`;\n style.right = `${placement.right}%`;\n delete placement.width;\n style.width = '';\n break;\n }\n\n style.transform = `translate(${translate[0]}, ${translate[1]})`;\n this.options.placement = placement;\n this.sizeStyle = style;\n\n if (this.div) {\n applyStyles(this.sizeStyle, this.div);\n\n // TODO: This is a hack, we should have a better way to handle this\n const elementType = this.options.type;\n if (!SVGElements.has(elementType)) {\n // apply styles to div if it's not an SVG element\n applyStyles(this.dataStyle, this.div);\n } else {\n // ELEMENT IS SVG\n // clean data styles from div if it's an SVG element; SVG elements have their own data styles;\n // this is necessary for changing type of element cases;\n // wrapper div element (this.div) doesn't re-render (has static `key` property),\n // so we have to clean styles manually;\n removeStyles(this.dataStyle, this.div);\n }\n }\n }\n\n /** Use the configured options to update CSS style properties directly on the wrapper div **/\n applyLayoutStylesToDiv2(disablePointerEvents?: boolean) {\n if (this.isRoot()) {\n // Root supersedes layout engine and is always 100% width + height of panel\n return;\n }\n\n const scene = this.getScene();\n const { width: sceneWidth, height: sceneHeight } = scene ?? {};\n\n const { constraint } = this.options;\n const { vertical, horizontal } = constraint ?? {};\n const placement: Placement = this.options.placement ?? {};\n\n const editingEnabled = scene?.isEditingEnabled;\n\n const style: React.CSSProperties = {\n cursor: editingEnabled ? 'grab' : 'auto',\n pointerEvents: disablePointerEvents ? 'none' : 'auto',\n position: 'absolute',\n // Minimum element size is 10x10\n minWidth: '10px',\n minHeight: '10px',\n };\n\n let transformY = '0px';\n let transformX = '0px';\n\n switch (vertical) {\n case VerticalConstraint.Top:\n placement.top = placement.top ?? 0;\n placement.height = placement.height ?? 100;\n transformY = `${placement.top ?? 0}px`;\n style.height = `${placement.height}px`;\n delete placement.bottom;\n break;\n case VerticalConstraint.Bottom:\n placement.bottom = placement.bottom ?? 0;\n placement.height = placement.height ?? 100;\n transformY = `${sceneHeight! - (placement.bottom ?? 0) - (placement.height ?? 100)}px`;\n style.height = `${placement.height}px`;\n delete placement.top;\n break;\n case VerticalConstraint.TopBottom:\n placement.top = placement.top ?? 0;\n placement.bottom = placement.bottom ?? 0;\n transformY = `${placement.top ?? 0}px`;\n style.height = `${sceneHeight! - (placement.top ?? 0) - (placement.bottom ?? 0)}px`;\n delete placement.height;\n break;\n case VerticalConstraint.Center:\n placement.top = placement.top ?? 0;\n placement.height = placement.height ?? 100;\n transformY = `${sceneHeight! / 2 - (placement.top ?? 0) - (placement.height ?? 0) / 2}px`;\n style.height = `${placement.height}px`;\n delete placement.bottom;\n break;\n case VerticalConstraint.Scale:\n placement.top = placement.top ?? 0;\n placement.bottom = placement.bottom ?? 0;\n transformY = `${(placement.top ?? 0) * (sceneHeight! / 100)}px`;\n style.height = `${sceneHeight! - (placement.top ?? 0) * (sceneHeight! / 100) - (placement.bottom ?? 0) * (sceneHeight! / 100)}px`;\n delete placement.height;\n break;\n }\n\n switch (horizontal) {\n case HorizontalConstraint.Left:\n placement.left = placement.left ?? 0;\n placement.width = placement.width ?? 100;\n transformX = `${placement.left ?? 0}px`;\n style.width = `${placement.width}px`;\n delete placement.right;\n break;\n case HorizontalConstraint.Right:\n placement.right = placement.right ?? 0;\n placement.width = placement.width ?? 100;\n transformX = `${sceneWidth! - (placement.right ?? 0) - (placement.width ?? 100)}px`;\n style.width = `${placement.width}px`;\n delete placement.left;\n break;\n case HorizontalConstraint.LeftRight:\n placement.left = placement.left ?? 0;\n placement.right = placement.right ?? 0;\n transformX = `${placement.left ?? 0}px`;\n style.width = `${sceneWidth! - (placement.left ?? 0) - (placement.right ?? 0)}px`;\n delete placement.width;\n break;\n case HorizontalConstraint.Center:\n placement.left = placement.left ?? 0;\n placement.width = placement.width ?? 100;\n transformX = `${sceneWidth! / 2 - (placement.left ?? 0) - (placement.width ?? 0) / 2}px`;\n style.width = `${placement.width}px`;\n delete placement.right;\n break;\n case HorizontalConstraint.Scale:\n placement.left = placement.left ?? 0;\n placement.right = placement.right ?? 0;\n transformX = `${(placement.left ?? 0) * (sceneWidth! / 100)}px`;\n style.width = `${sceneWidth! - (placement.left ?? 0) * (sceneWidth! / 100) - (placement.right ?? 0) * (sceneWidth! / 100)}px`;\n delete placement.width;\n break;\n }\n this.options.placement = placement;\n style.transform = `translate(${transformX}, ${transformY}) rotate(${placement.rotation ?? 0}deg)`;\n this.sizeStyle = style;\n\n if (this.div) {\n applyStyles(this.sizeStyle, this.div);\n\n // TODO: This is a hack, we should have a better way to handle this\n const elementType = this.options.type;\n if (!SVGElements.has(elementType)) {\n // apply styles to div if it's not an SVG element\n applyStyles(this.dataStyle, this.div);\n } else {\n // ELEMENT IS SVG\n // clean data styles from div if it's an SVG element; SVG elements have their own data styles;\n // this is necessary for changing type of element cases;\n // wrapper div element (this.div) doesn't re-render (has static `key` property),\n // so we have to clean styles manually;\n removeStyles(this.dataStyle, this.div);\n }\n }\n }\n\n getTopLeftValues(element: Element) {\n const style = window.getComputedStyle(element);\n const matrix = new DOMMatrix(style.transform || '');\n return {\n left: matrix.m41,\n top: matrix.m42,\n width: style.width ? parseFloat(style.width) : element.clientWidth,\n height: style.height ? parseFloat(style.height) : element.clientHeight,\n }; // m41 = translateX, m42 = translateY\n }\n\n setPlacementFromConstraint(elementContainer?: DOMRect, parentContainer?: DOMRect, transformScale = 1) {\n if (config.featureToggles.canvasPanelPanZoom) {\n this.setPlacementFromConstraint2(elementContainer, parentContainer, transformScale);\n return;\n }\n const { constraint } = this.options;\n const { vertical, horizontal } = constraint ?? {};\n\n if (!elementContainer) {\n elementContainer = this.div && this.div.getBoundingClientRect();\n }\n let parentBorderWidth = 0;\n if (!parentContainer) {\n parentContainer = this.div && this.div.parentElement?.getBoundingClientRect();\n parentBorderWidth = this.parent?.isRoot()\n ? 0\n : parseFloat(getComputedStyle(this.div?.parentElement!).borderWidth);\n }\n\n // For elements with rotation, a delta needs to be applied to account for bounding box rotation\n // TODO: Fix behavior for top+bottom, left+right, center, and scale constraints\n let rotationTopOffset = 0;\n let rotationLeftOffset = 0;\n if (this.options.placement?.rotation && this.options.placement?.width && this.options.placement?.height) {\n const rotationDegrees = this.options.placement.rotation;\n const rotationRadians = (Math.PI / 180) * rotationDegrees;\n let rotationOffset = rotationRadians;\n\n switch (true) {\n case rotationDegrees >= 0 && rotationDegrees < 90:\n // no-op\n break;\n case rotationDegrees >= 90 && rotationDegrees < 180:\n rotationOffset = Math.PI - rotationRadians;\n break;\n case rotationDegrees >= 180 && rotationDegrees < 270:\n rotationOffset = Math.PI + rotationRadians;\n break;\n case rotationDegrees >= 270:\n rotationOffset = -rotationRadians;\n break;\n }\n\n const calculateDelta = (dimension1: number, dimension2: number) =>\n (dimension1 / 2) * Math.sin(rotationOffset) + (dimension2 / 2) * (Math.cos(rotationOffset) - 1);\n\n rotationTopOffset = calculateDelta(this.options.placement.width, this.options.placement.height);\n rotationLeftOffset = calculateDelta(this.options.placement.height, this.options.placement.width);\n }\n\n const relativeTop =\n elementContainer && parentContainer\n ? Math.round(elementContainer.top - parentContainer.top - parentBorderWidth + rotationTopOffset) /\n transformScale\n : 0;\n const relativeBottom =\n elementContainer && parentContainer\n ? Math.round(parentContainer.bottom - parentBorderWidth - elementContainer.bottom + rotationTopOffset) /\n transformScale\n : 0;\n const relativeLeft =\n elementContainer && parentContainer\n ? Math.round(elementContainer.left - parentContainer.left - parentBorderWidth + rotationLeftOffset) /\n transformScale\n : 0;\n const relativeRight =\n elementContainer && parentContainer\n ? Math.round(parentContainer.right - parentBorderWidth - elementContainer.right + rotationLeftOffset) /\n transformScale\n : 0;\n\n const placement: Placement = {};\n\n const width = (elementContainer?.width ?? 100) / transformScale;\n const height = (elementContainer?.height ?? 100) / transformScale;\n\n switch (vertical) {\n case VerticalConstraint.Top:\n placement.top = relativeTop;\n placement.height = height;\n break;\n case VerticalConstraint.Bottom:\n placement.bottom = relativeBottom;\n placement.height = height;\n break;\n case VerticalConstraint.TopBottom:\n placement.top = relativeTop;\n placement.bottom = relativeBottom;\n break;\n case VerticalConstraint.Center:\n const elementCenter = elementContainer ? relativeTop + height / 2 : 0;\n const parentCenter = parentContainer ? parentContainer.height / 2 : 0;\n const distanceFromCenter = parentCenter - elementCenter;\n placement.top = distanceFromCenter;\n placement.height = height;\n break;\n case VerticalConstraint.Scale:\n placement.top = (relativeTop / (parentContainer?.height ?? height)) * 100 * transformScale;\n placement.bottom = (relativeBottom / (parentContainer?.height ?? height)) * 100 * transformScale;\n break;\n }\n\n switch (horizontal) {\n case HorizontalConstraint.Left:\n placement.left = relativeLeft;\n placement.width = width;\n break;\n case HorizontalConstraint.Right:\n placement.right = relativeRight;\n placement.width = width;\n break;\n case HorizontalConstraint.LeftRight:\n placement.left = relativeLeft;\n placement.right = relativeRight;\n break;\n case HorizontalConstraint.Center:\n const elementCenter = elementContainer ? relativeLeft + width / 2 : 0;\n const parentCenter = parentContainer ? parentContainer.width / 2 : 0;\n const distanceFromCenter = parentCenter - elementCenter;\n placement.left = distanceFromCenter;\n placement.width = width;\n break;\n case HorizontalConstraint.Scale:\n placement.left = (relativeLeft / (parentContainer?.width ?? width)) * 100 * transformScale;\n placement.right = (relativeRight / (parentContainer?.width ?? width)) * 100 * transformScale;\n break;\n }\n\n if (this.options.placement?.rotation) {\n placement.rotation = this.options.placement.rotation;\n placement.width = this.options.placement.width;\n placement.height = this.options.placement.height;\n }\n\n this.options.placement = placement;\n\n this.applyLayoutStylesToDiv();\n this.revId++;\n\n this.getScene()?.save();\n }\n\n setPlacementFromConstraint2(elementContainer?: DOMRect, parentContainer?: DOMRect, transformScale = 1) {\n const scene = this.getScene()!;\n const { constraint } = this.options;\n const { vertical, horizontal } = constraint ?? {};\n\n const elementRect = this.getTopLeftValues(this.div!);\n\n if (!elementContainer) {\n elementContainer = this.div && this.div.getBoundingClientRect();\n }\n // let parentBorderWidth = 0;\n if (!parentContainer) {\n parentContainer = this.div && this.div.parentElement?.getBoundingClientRect();\n }\n\n const relativeTop = Math.round(elementRect.top);\n const relativeBottom = Math.round(scene.height - elementRect.top - elementRect.height);\n const relativeLeft = Math.round(elementRect.left);\n const relativeRight = Math.round(scene.width - elementRect.left - elementRect.width);\n\n const placement: Placement = {};\n\n const width = elementRect.width;\n const height = elementRect.height;\n\n // INFO: calculate it anyway to be able to use it for pan&zoom\n placement.top = relativeTop;\n placement.left = relativeLeft;\n\n switch (vertical) {\n case VerticalConstraint.Top:\n placement.top = relativeTop;\n placement.height = height;\n break;\n case VerticalConstraint.Bottom:\n placement.bottom = relativeBottom;\n placement.height = height;\n break;\n case VerticalConstraint.TopBottom:\n placement.top = relativeTop;\n placement.bottom = relativeBottom;\n break;\n case VerticalConstraint.Center:\n const elementCenter = elementContainer ? relativeTop + height / 2 : 0;\n const parentCenter = scene.height / 2; // Use scene height instead of scaled viewport height\n const distanceFromCenter = parentCenter - elementCenter;\n placement.top = distanceFromCenter;\n placement.height = height;\n break;\n case VerticalConstraint.Scale:\n placement.top = (relativeTop / (parentContainer?.height ?? height)) * 100 * transformScale;\n placement.bottom = (relativeBottom / (parentContainer?.height ?? height)) * 100 * transformScale;\n break;\n }\n\n switch (horizontal) {\n case HorizontalConstraint.Left:\n placement.left = relativeLeft;\n placement.width = width;\n break;\n case HorizontalConstraint.Right:\n placement.right = relativeRight;\n placement.width = width;\n break;\n case HorizontalConstraint.LeftRight:\n placement.left = relativeLeft;\n placement.right = relativeRight;\n break;\n case HorizontalConstraint.Center:\n const elementCenter = elementContainer ? relativeLeft + width / 2 : 0;\n const parentCenter = scene.width / 2; // Use scene width instead of scaled viewport width\n const distanceFromCenter = parentCenter - elementCenter;\n placement.left = distanceFromCenter;\n placement.width = width;\n break;\n case HorizontalConstraint.Scale:\n placement.left = (relativeLeft / (parentContainer?.width ?? width)) * 100 * transformScale;\n placement.right = (relativeRight / (parentContainer?.width ?? width)) * 100 * transformScale;\n break;\n }\n\n if (this.options.placement?.rotation) {\n placement.rotation = this.options.placement.rotation;\n placement.width = this.options.placement.width;\n placement.height = this.options.placement.height;\n }\n\n this.options.placement = placement;\n\n this.applyLayoutStylesToDiv();\n this.revId++;\n\n this.getScene()?.save();\n }\n\n updateData(ctx: DimensionContext) {\n if (this.item.prepareData) {\n this.data = this.item.prepareData(ctx, this.options);\n this.revId++; // rerender\n }\n\n const scene = this.getScene();\n const frames = scene?.data?.series;\n\n this.options.links = this.options.links?.filter((link) => link !== null);\n\n if (this.options.links?.some((link) => link.oneClick === true)) {\n this.oneClickMode = OneClickMode.Link;\n } else if (\n this.options.actions\n ?.filter((action) => action.type === ActionType.Fetch || isInfinityActionWithAuth(action))\n .some((action) => action.oneClick)\n ) {\n const scene = this.getScene();\n const canExecuteActions = scene?.panel?.panelContext?.canExecuteActions;\n const userCanExecuteActions = canExecuteActions?.() ?? false;\n\n this.oneClickMode = userCanExecuteActions ? OneClickMode.Action : OneClickMode.Off;\n } else {\n this.oneClickMode = OneClickMode.Off;\n }\n\n if (frames) {\n const defaultField = {\n name: 'Default field',\n type: FieldType.string,\n config: { links: this.options.links ?? [], actions: this.options.actions ?? [] },\n values: [],\n };\n\n this.getLinks = getLinksSupplier(\n frames[0],\n defaultField,\n {\n __dataContext: {\n value: {\n data: frames,\n field: defaultField,\n frame: frames[0],\n frameIndex: 0,\n },\n },\n },\n scene?.panel.props.replaceVariables!\n );\n }\n\n const { background, border } = this.options;\n const css: CSSProperties = {};\n if (background) {\n if (background.color) {\n const color = ctx.getColor(background.color);\n css.backgroundColor = color.value();\n }\n if (background.image) {\n const image = ctx.getResource(background.image);\n if (image) {\n const v = image.value();\n if (v) {\n css.backgroundImage = `url(\"${v}\")`;\n switch (background.size ?? BackgroundImageSize.Contain) {\n case BackgroundImageSize.Contain:\n css.backgroundSize = 'contain';\n css.backgroundRepeat = 'no-repeat';\n break;\n case BackgroundImageSize.Cover:\n css.backgroundSize = 'cover';\n css.backgroundRepeat = 'no-repeat';\n break;\n case BackgroundImageSize.Original:\n css.backgroundRepeat = 'no-repeat';\n break;\n case BackgroundImageSize.Tile:\n css.backgroundRepeat = 'repeat';\n break;\n case BackgroundImageSize.Fill:\n css.backgroundSize = '100% 100%';\n break;\n }\n } else {\n css.backgroundImage = '';\n }\n }\n }\n }\n\n if (border && border.color && border.width !== undefined) {\n const color = ctx.getColor(border.color);\n css.borderWidth = `${border.width}px`;\n css.borderStyle = 'solid';\n css.borderColor = color.value();\n\n // Move the image to inside the border\n if (css.backgroundImage) {\n css.backgroundOrigin = 'padding-box';\n }\n }\n\n if (border && border.radius !== undefined) {\n css.borderRadius = `${border.radius}px`;\n }\n\n this.dataStyle = css;\n this.applyLayoutStylesToDiv();\n }\n\n isRoot(): this is RootElement {\n return false;\n }\n\n /** Recursively visit all nodes */\n visit(visitor: (v: ElementState) => void) {\n visitor(this);\n }\n\n onChange(options: CanvasElementOptions) {\n if (this.item.id !== options.type) {\n this.item = canvasElementRegistry.getIfExists(options.type) ?? notFoundItem;\n }\n\n // rename handling\n const oldName = this.options.name;\n const newName = options.name;\n\n this.revId++;\n this.options = { ...options };\n let trav = this.parent;\n while (trav) {\n if (trav.isRoot()) {\n trav.scene.save();\n break;\n }\n trav.revId++;\n trav = trav.parent;\n }\n\n const scene = this.getScene();\n if (oldName !== newName && scene) {\n if (isConnectionTarget(this, scene.byName)) {\n getConnectionsByTarget(this, scene).forEach((connection) => {\n connection.info.targetName = newName;\n });\n }\n\n scene.byName.delete(oldName);\n scene.byName.set(newName, this);\n }\n }\n\n getSaveModel() {\n return { ...this.options };\n }\n\n initElement = (target: HTMLDivElement) => {\n this.div = target;\n this.applyLayoutStylesToDiv();\n };\n\n applyDrag = (event: OnDrag) => {\n const hasHorizontalCenterConstraint = this.options.constraint?.horizontal === HorizontalConstraint.Center;\n const hasVerticalCenterConstraint = this.options.constraint?.vertical === VerticalConstraint.Center;\n if (hasHorizontalCenterConstraint || hasVerticalCenterConstraint) {\n const numberOfTargets = this.getScene()?.selecto?.getSelectedTargets().length ?? 0;\n const isMultiSelection = numberOfTargets > 1;\n if (!isMultiSelection) {\n const elementContainer = this.div?.getBoundingClientRect();\n const height = elementContainer?.height ?? 100;\n const yOffset = hasVerticalCenterConstraint ? height / 4 : 0;\n event.target.style.transform = `translate(${event.translate[0]}px, ${event.translate[1] - yOffset}px)`;\n return;\n }\n }\n\n event.target.style.transform = event.transform;\n };\n\n applyRotate = (event: OnRotate) => {\n const rotationDelta = event.delta;\n const placement = this.options.placement!;\n const placementRotation = placement.rotation ?? 0;\n\n const calculatedRotation = placementRotation + rotationDelta;\n\n // Ensure rotation is between 0 and 360\n placement.rotation = calculatedRotation - Math.floor(calculatedRotation / 360) * 360;\n event.target.style.transform = event.transform;\n };\n\n // kinda like:\n // https://github.com/grafana/grafana-edge-app/blob/main/src/panels/draw/WrapItem.tsx#L44\n applyResize = (event: OnResize) => {\n const placement = this.options.placement!;\n\n const style = event.target.style;\n let deltaX = event.delta[0];\n let deltaY = event.delta[1];\n let dirLR = event.direction[0];\n let dirTB = event.direction[1];\n\n // Handle case when element is rotated\n if (placement.rotation) {\n const rotation = placement.rotation ?? 0;\n const rotationInRadians = (rotation * Math.PI) / 180;\n const originalDirLR = dirLR;\n const originalDirTB = dirTB;\n\n dirLR = Math.sign(originalDirLR * Math.cos(rotationInRadians) - originalDirTB * Math.sin(rotationInRadians));\n dirTB = Math.sign(originalDirLR * Math.sin(rotationInRadians) + originalDirTB * Math.cos(rotationInRadians));\n }\n\n if (dirLR === 1) {\n placement.width = event.width;\n style.width = `${placement.width}px`;\n } else if (dirLR === -1) {\n placement.left! -= deltaX;\n placement.width = event.width;\n if (config.featureToggles.canvasPanelPanZoom) {\n style.transform = `translate(${placement.left}px, ${placement.top}px) rotate(${placement.rotation ?? 0}deg)`;\n } else {\n style.left = `${placement.left}px`;\n }\n style.width = `${placement.width}px`;\n }\n\n if (dirTB === -1) {\n placement.top! -= deltaY;\n placement.height = event.height;\n if (config.featureToggles.canvasPanelPanZoom) {\n style.transform = `translate(${placement.left}px, ${placement.top}px) rotate(${placement.rotation ?? 0}deg)`;\n } else {\n style.top = `${placement.top}px`;\n }\n style.height = `${placement.height}px`;\n } else if (dirTB === 1) {\n placement.height = event.height;\n style.height = `${placement.height}px`;\n }\n };\n\n handleMouseEnter = (event: React.MouseEvent, isSelected: boolean | undefined) => {\n const scene = this.getScene();\n\n const shouldHandleTooltip =\n !scene?.isEditingEnabled && (!scene?.tooltipPayload?.isOpen || scene?.tooltipPayload?.element === this);\n if (shouldHandleTooltip) {\n this.handleTooltip(event);\n } else if (!isSelected) {\n scene?.connections.handleMouseEnter(event);\n }\n\n if (this.div != null) {\n if (this.oneClickMode === OneClickMode.Link) {\n const primaryDataLink = this.getPrimaryDataLink();\n if (primaryDataLink) {\n this.div.style.cursor = 'pointer';\n this.div.title = `Navigate to ${primaryDataLink.title === '' ? 'data link' : primaryDataLink.title}`;\n }\n } else if (this.oneClickMode === OneClickMode.Action) {\n const primaryAction = this.getPrimaryAction();\n if (primaryAction) {\n this.div.style.cursor = 'pointer';\n this.div.title = primaryAction.title;\n }\n }\n }\n };\n\n getPrimaryDataLink = () => {\n if (this.getLinks) {\n const links = this.getLinks({ valueRowIndex: getRowIndex(this.data.field, this.getScene()!) });\n return links.find((link) => link.oneClick === true);\n }\n\n return undefined;\n };\n\n getPrimaryAction = () => {\n const scene = this.getScene();\n const canExecuteActions = scene?.panel?.panelContext?.canExecuteActions;\n const userCanExecuteActions = canExecuteActions?.() ?? false;\n\n if (!userCanExecuteActions) {\n return undefined;\n }\n\n const config: ValueLinkConfig = { valueRowIndex: getRowIndex(this.data.field, scene!) };\n const actionsDefaultFieldConfig = { links: this.options.links ?? [], actions: this.options.actions ?? [] };\n const frames = scene?.data?.series;\n\n if (frames) {\n const defaultField = getActionsDefaultField(actionsDefaultFieldConfig.links, actionsDefaultFieldConfig.actions);\n const scopedVars: ScopedVars = {\n __dataContext: {\n value: {\n data: frames,\n field: defaultField,\n frame: frames[0],\n frameIndex: 0,\n },\n },\n };\n\n const actions = getActions(\n frames[0],\n defaultField,\n scopedVars,\n scene?.panel.props.replaceVariables!,\n actionsDefaultFieldConfig.actions,\n config\n );\n return actions.find((action) => action.oneClick === true);\n }\n\n return undefined;\n };\n\n handleTooltip = (event: React.MouseEvent) => {\n const scene = this.getScene();\n if (!scene || !scene.tooltipCallback) {\n return;\n }\n\n const shouldDisableForOneClick = scene.tooltipDisableForOneClick && this.oneClickMode !== OneClickMode.Off;\n const shouldShowTooltip = scene.tooltipMode !== TooltipDisplayMode.None && !shouldDisableForOneClick;\n\n if (shouldShowTooltip) {\n const rect = this.div?.getBoundingClientRect();\n scene.tooltipCallback({\n anchorPoint: { x: rect?.right ?? event.pageX, y: rect?.top ?? event.pageY },\n element: this,\n isOpen: false,\n });\n }\n };\n\n handleMouseLeave = (event: React.MouseEvent) => {\n const scene = this.getScene();\n if (scene?.tooltipCallback && !scene?.tooltipPayload?.isOpen) {\n scene.tooltipCallback(undefined);\n }\n\n if (this.oneClickMode !== OneClickMode.Off && this.div) {\n this.div.style.cursor = 'auto';\n this.div.title = '';\n }\n };\n\n onElementClick = (event: React.MouseEvent) => {\n // If one-click access is enabled, open the primary link\n if (this.oneClickMode === OneClickMode.Link) {\n let primaryDataLink = this.getPrimaryDataLink();\n if (primaryDataLink) {\n window.open(primaryDataLink.href, primaryDataLink.target ?? '_self');\n }\n } else if (this.oneClickMode === OneClickMode.Action) {\n const primaryAction = this.getPrimaryAction();\n const actionHasVariables = primaryAction?.variables && primaryAction.variables.length > 0;\n\n if (actionHasVariables) {\n this.showActionVarsModal = true;\n this.forceUpdate();\n } else {\n this.showActionConfirmation = true;\n this.forceUpdate();\n }\n } else {\n this.handleTooltip(event);\n this.onTooltipCallback();\n }\n };\n\n onElementKeyDown = (event: React.KeyboardEvent) => {\n if (\n event.key === 'Enter' &&\n (event.currentTarget instanceof HTMLElement || event.currentTarget instanceof SVGElement)\n ) {\n const scene = this.getScene();\n scene?.select({ targets: [event.currentTarget] });\n }\n };\n\n onTooltipCallback = () => {\n const scene = this.getScene();\n if (scene?.tooltipCallback && scene.tooltipPayload?.anchorPoint) {\n scene.tooltipCallback({\n anchorPoint: { x: scene.tooltipPayload.anchorPoint.x, y: scene.tooltipPayload.anchorPoint.y },\n element: this,\n isOpen: true,\n });\n }\n };\n\n forceUpdate = () => {\n const scene = this.getScene();\n if (scene?.actionConfirmationCallback) {\n scene.actionConfirmationCallback();\n }\n };\n\n renderActionsConfirmModal = (action: ActionModel | undefined) => {\n if (!action) {\n return;\n }\n\n return (\n <>\n {this.showActionConfirmation && action && (\n <ConfirmModal\n isOpen={true}\n title={t('grafana-ui.action-editor.button.confirm-action', 'Confirm action')}\n body={action.confirmation(/** TODO: implement actionVars */)}\n confirmText={t('grafana-ui.action-editor.button.confirm', 'Confirm')}\n confirmButtonVariant=\"primary\"\n onConfirm={() => {\n this.showActionConfirmation = false;\n action.onClick(new MouseEvent('click'), null, this.actionVars);\n if (action.type) {\n reportActionTrigger(action.type, true, 'canvas');\n }\n this.forceUpdate();\n }}\n onDismiss={() => {\n this.showActionConfirmation = false;\n this.forceUpdate();\n }}\n />\n )}\n </>\n );\n };\n\n renderVariablesInputModal = (action: ActionModel | undefined) => {\n if (!action || !action.variables || action.variables.length === 0) {\n return;\n }\n\n const onModalContinue = () => {\n this.showActionVarsModal = false;\n this.showActionConfirmation = true;\n this.forceUpdate();\n };\n\n return (\n <VariablesInputModal\n action={action}\n variables={this.actionVars}\n setVariables={this.setActionVars}\n onDismiss={() => {\n this.showActionVarsModal = false;\n this.forceUpdate();\n }}\n onShowConfirm={onModalContinue}\n />\n );\n };\n\n render() {\n const { item, div } = this;\n const scene = this.getScene();\n const isSelected = div && scene && scene.selecto && scene.selecto.getSelectedTargets().includes(div);\n\n return (\n <>\n <div\n key={this.UID}\n ref={this.initElement}\n onMouseEnter={(e: React.MouseEvent) => this.handleMouseEnter(e, isSelected)}\n onMouseLeave={!scene?.isEditingEnabled ? this.handleMouseLeave : undefined}\n onClick={!scene?.isEditingEnabled ? this.onElementClick : undefined}\n onKeyDown={!scene?.isEditingEnabled ? this.onElementKeyDown : undefined}\n role=\"button\"\n tabIndex={0}\n style={{ userSelect: 'none' }}\n >\n <item.display\n key={`${this.UID}/${this.revId}`}\n config={this.options.config}\n data={this.data}\n isSelected={isSelected}\n />\n </div>\n {this.showActionConfirmation && this.renderActionsConfirmModal(this.getPrimaryAction())}\n {this.showActionVarsModal && this.renderVariablesInputModal(this.getPrimaryAction())}\n </>\n );\n }\n}\n","import { isNumber, isString } from 'lodash';\n\nimport { DataFrame, Field, AppEvents, getFieldDisplayName, PluginState, SelectableValue } from '@grafana/data';\nimport { ConnectionDirection } from '@grafana/schema';\nimport appEvents from 'app/core/app_events';\nimport { hasAlphaPanels, config } from 'app/core/config';\nimport { CanvasConnection, CanvasElementItem, CanvasElementOptions } from 'app/features/canvas/element';\nimport { notFoundItem } from 'app/features/canvas/elements/notFound';\nimport { advancedElementItems, canvasElementRegistry, defaultElementItems } from 'app/features/canvas/registry';\nimport { ElementState } from 'app/features/canvas/runtime/element';\nimport { FrameState } from 'app/features/canvas/runtime/frame';\nimport { Scene, SelectionParams } from 'app/features/canvas/runtime/scene';\n\nimport { AnchorPoint, ConnectionState, LineStyle, StrokeDasharray } from './types';\n\nexport function doSelect(scene: Scene, element: ElementState | FrameState) {\n try {\n let selection: SelectionParams = { targets: [] };\n if (element instanceof FrameState) {\n const targetElements: HTMLDivElement[] = [];\n targetElements.push(element?.div!);\n selection.targets = targetElements;\n selection.frame = element;\n scene.select(selection);\n } else {\n scene.currentLayer = element.parent;\n selection.targets = [element?.div!];\n scene.select(selection);\n }\n } catch (error) {\n appEvents.emit(AppEvents.alertError, ['Unable to select element, try selecting element in panel instead']);\n }\n}\n\nexport function getElementTypes(shouldShowAdvancedTypes: boolean | undefined, current?: string): RegistrySelectInfo {\n if (shouldShowAdvancedTypes) {\n return getElementTypesOptions([...defaultElementItems, ...advancedElementItems], current);\n }\n\n return getElementTypesOptions([...defaultElementItems], current);\n}\n\ninterface RegistrySelectInfo {\n options: Array<SelectableValue<string>>;\n current: Array<SelectableValue<string>>;\n}\n\nexport function getElementTypesOptions(items: CanvasElementItem[], current: string | undefined): RegistrySelectInfo {\n const selectables: RegistrySelectInfo = { options: [], current: [] };\n const alpha: Array<SelectableValue<string>> = [];\n\n for (const item of items) {\n const option: SelectableValue<string> = { label: item.name, value: item.id, description: item.description };\n if (item.state === PluginState.alpha) {\n if (!hasAlphaPanels) {\n continue;\n }\n option.label = `${item.name} (Alpha)`;\n alpha.push(option);\n } else {\n selectables.options.push(option);\n }\n\n if (item.id === current) {\n selectables.current.push(option);\n }\n }\n\n for (const a of alpha) {\n selectables.options.push(a);\n }\n\n return selectables;\n}\n\nexport function onAddItem(sel: SelectableValue<string>, rootLayer: FrameState | undefined, anchorPoint?: AnchorPoint) {\n const newItem = canvasElementRegistry.getIfExists(sel.value) ?? notFoundItem;\n const newElementOptions: CanvasElementOptions = {\n ...newItem.getNewOptions(),\n type: newItem.id,\n name: '',\n };\n\n if (anchorPoint) {\n newElementOptions.placement = { ...newElementOptions.placement, top: anchorPoint.y, left: anchorPoint.x };\n }\n\n if (newItem.defaultSize) {\n newElementOptions.placement = { ...newElementOptions.placement, ...newItem.defaultSize };\n }\n\n if (rootLayer) {\n const newElement = new ElementState(newItem, newElementOptions, rootLayer);\n newElement.updateData(rootLayer.scene.context);\n rootLayer.elements.push(newElement);\n rootLayer.scene.save();\n rootLayer.reinitializeMoveable();\n\n setTimeout(() => doSelect(rootLayer.scene, newElement));\n }\n}\n\nexport function isConnectionSource(element: ElementState) {\n return element.options.connections && element.options.connections.length > 0;\n}\n\nexport function isConnectionTarget(element: ElementState, sceneByName: Map<string, ElementState>) {\n const connections = getConnections(sceneByName);\n return connections.some((connection) => connection.target === element);\n}\n\nexport function getConnections(sceneByName: Map<string, ElementState>) {\n const connections: ConnectionState[] = [];\n for (let v of sceneByName.values()) {\n if (v.options.connections) {\n v.options.connections.forEach((c, index) => {\n // @TODO Remove after v10.x\n if (isString(c.color)) {\n c.color = { fixed: c.color };\n }\n\n if (isNumber(c.size)) {\n c.size = { fixed: 2, min: 1, max: 10 };\n }\n\n const target = c.targetName ? sceneByName.get(c.targetName) : v.parent;\n if (target) {\n connections.push({\n index,\n source: v,\n target,\n info: c,\n vertices: c.vertices ?? undefined,\n sourceOriginal: c.sourceOriginal ?? undefined,\n targetOriginal: c.targetOriginal ?? undefined,\n });\n }\n });\n }\n }\n\n return connections;\n}\n\nexport function getConnectionsByTarget(element: ElementState, scene: Scene) {\n return scene.connections.state.filter((connection) => connection.target === element);\n}\n\nexport function updateConnectionsForSource(element: ElementState, scene: Scene) {\n const targetConnections = getConnectionsByTarget(element, scene);\n targetConnections.forEach((connection) => {\n const sourceConnections = connection.source.options.connections?.splice(0) ?? [];\n const connections = sourceConnections.filter((con) => con.targetName !== element.getName());\n connection.source.onChange({ ...connection.source.options, connections });\n });\n\n // Update scene connection state to clear out old connections\n scene.connections.updateState();\n}\n\nexport const calculateCoordinates = (\n sourceRect: DOMRect,\n parentRect: DOMRect,\n info: CanvasConnection,\n target: ElementState,\n transformScale: number\n) => {\n const sourceHorizontalCenter = sourceRect.left - parentRect.left + sourceRect.width / 2;\n const sourceVerticalCenter = sourceRect.top - parentRect.top + sourceRect.height / 2;\n\n // Convert from connection coords to DOM coords\n const x1 = (sourceHorizontalCenter + (info.source.x * sourceRect.width) / 2) / transformScale;\n const y1 = (sourceVerticalCenter - (info.source.y * sourceRect.height) / 2) / transformScale;\n\n let x2: number;\n let y2: number;\n const targetRect = target.div?.getBoundingClientRect();\n if (info.targetName && targetRect) {\n const targetHorizontalCenter = targetRect.left - parentRect.left + targetRect.width / 2;\n const targetVerticalCenter = targetRect.top - parentRect.top + targetRect.height / 2;\n\n x2 = targetHorizontalCenter + (info.target.x * targetRect.width) / 2;\n y2 = targetVerticalCenter - (info.target.y * targetRect.height) / 2;\n } else {\n const parentHorizontalCenter = parentRect.width / 2;\n const parentVerticalCenter = parentRect.height / 2;\n\n x2 = parentHorizontalCenter + (info.target.x * parentRect.width) / 2;\n y2 = parentVerticalCenter - (info.target.y * parentRect.height) / 2;\n }\n x2 /= transformScale;\n y2 /= transformScale;\n\n // TODO look into a better way to avoid division by zero\n if (x2 - x1 === 0) {\n x2 += 1;\n }\n if (y2 - y1 === 0) {\n y2 += 1;\n }\n return { x1, y1, x2, y2 };\n};\n\nexport const calculateCoordinates2 = (source: ElementState, target: ElementState, info: CanvasConnection) => {\n const { x: x1, y: y1 } = getRotatedConnectionPoint(source.div!, info.source.x, info.source.y);\n\n let x2 = 0;\n let y2 = 0;\n const targetDiv = target.div;\n if (info.targetName && targetDiv) {\n ({ x: x2, y: y2 } = getRotatedConnectionPoint(targetDiv, info.target.x, info.target.y));\n } else {\n x2 = info.target.x;\n y2 = info.target.y;\n }\n\n return { x1, y1, x2, y2 };\n};\n\nexport const getElementTransformAndDimensions = (element: Element) => {\n const style = window.getComputedStyle(element);\n\n const transform = style.transform;\n\n let x = 0;\n let y = 0;\n let rotation = 0;\n\n if (transform !== 'none') {\n // Use DOMMatrix to parse the transform string\n const matrix = new DOMMatrix(transform);\n\n // Extract x and y values\n x = matrix.m41;\n y = matrix.m42;\n\n // Extract rotation in radians and convert to degrees\n // For 2D transforms, rotation = atan2(m21, m11)\n rotation = -Math.atan2(matrix.m21, matrix.m11) * (180 / Math.PI);\n }\n\n // Get the width and height of the element\n // TODO: there sould be a better way than parseFloat\n const width = parseFloat(style.width);\n const height = parseFloat(style.height);\n\n return { left: x, top: y, width, height, x, y, rotation };\n};\n\nexport const getNormalizedRotatedOffset = (div: HTMLDivElement, x: number, y: number) => {\n const { left, top, width, height, rotation } = getElementTransformAndDimensions(div);\n // Calculate center of source element\n const centerX = left + width / 2;\n const centerY = top + height / 2;\n\n // Calculate the offset from the center to the connection start point\n let dx = x - centerX;\n let dy = y - centerY;\n\n // Adjust for rotation\n const rad = rotation * (Math.PI / 180);\n const cos = Math.cos(-rad);\n const sin = Math.sin(-rad);\n // Rotate the delta by the negative of the element's rotation\n const rotatedDx = dx * cos - dy * sin;\n const rotatedDy = dx * sin + dy * cos;\n\n // Convert to normalized coordinates\n const normalizedX = rotatedDx / (width / 2);\n const normalizedY = -rotatedDy / (height / 2);\n\n return { x: normalizedX, y: normalizedY };\n};\n\nexport const getRotatedConnectionPoint = (div: HTMLDivElement, normalizedX: number, normalizedY: number) => {\n const { left, top, width, height, rotation } = getElementTransformAndDimensions(div);\n const centerX = left + width / 2;\n const centerY = top + height / 2;\n\n // Calculate offset from center before rotation\n const offsetX = (normalizedX * width) / 2;\n const offsetY = -(normalizedY * height) / 2;\n\n // Convert rotation to radians\n const rad = rotation * (Math.PI / 180);\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n // Apply rotation to offset\n const rotatedOffsetX = offsetX * cos - offsetY * sin;\n const rotatedOffsetY = offsetX * sin + offsetY * cos;\n\n const x = centerX + rotatedOffsetX;\n const y = centerY + rotatedOffsetY;\n\n return { x, y };\n};\n\nexport const calculateMidpoint = (x1: number, y1: number, x2: number, y2: number) => {\n return { x: (x1 + x2) / 2, y: (y1 + y2) / 2 };\n};\n\nexport const calculateAbsoluteCoords = (\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n valueX: number,\n valueY: number,\n deltaX: number,\n deltaY: number\n) => {\n return { x: valueX * deltaX + x1, y: valueY * deltaY + y1 };\n};\n\n// Calculate angle between two points and return angle in radians\nexport const calculateAngle = (x1: number, y1: number, x2: number, y2: number) => {\n return Math.atan2(y2 - y1, x2 - x1);\n};\n\nexport const calculateDistance = (x1: number, y1: number, x2: number, y2: number) => {\n //TODO add sqrt approx option\n return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n};\n\n// @TODO revisit, currently returning last row index for field\nexport const getRowIndex = (fieldName: string | undefined, scene: Scene) => {\n if (fieldName) {\n const series = scene.data?.series[0];\n const field = series?.fields.find((field) => field.name === fieldName);\n const data = field?.values;\n return data ? data.length - 1 : 0;\n }\n return 0;\n};\n\nexport const getConnectionStyles = (\n info: CanvasConnection,\n scene: Scene,\n defaultArrowSize: number,\n defaultArrowDirection: ConnectionDirection\n) => {\n const defaultArrowColor = config.theme2.colors.text.primary;\n const lastRowIndex = getRowIndex(info.size?.field, scene);\n const strokeColor = info.color ? scene.context.getColor(info.color).value() : defaultArrowColor;\n const strokeWidth = info.size ? scene.context.getScale(info.size).get(lastRowIndex) : defaultArrowSize;\n const strokeRadius = info.radius ? scene.context.getScale(info.radius).get(lastRowIndex) : 0;\n const arrowDirection = info.direction\n ? scene.context.getDirection(info.direction).get(lastRowIndex)\n : defaultArrowDirection;\n const lineStyle = getLineStyle(info.lineStyle?.style);\n const shouldAnimate = info.lineStyle?.animate;\n\n return { strokeColor, strokeWidth, strokeRadius, arrowDirection, lineStyle, shouldAnimate };\n};\n\nconst getLineStyle = (lineStyle?: LineStyle) => {\n switch (lineStyle) {\n case LineStyle.Dashed:\n return StrokeDasharray.Dashed;\n case LineStyle.Dotted:\n return StrokeDasharray.Dotted;\n default:\n return StrokeDasharray.Solid;\n }\n};\n\nexport const getParentBoundingClientRect = (scene: Scene) => {\n if (config.featureToggles.canvasPanelPanZoom) {\n return scene.viewportDiv?.getBoundingClientRect();\n }\n\n return scene.div?.getBoundingClientRect();\n};\n\nexport function getElementFields(frames: DataFrame[], opts: CanvasElementOptions) {\n const fields = new Set<Field>();\n const cfg = opts.config ?? {};\n\n frames.forEach((frame) => {\n frame.fields.forEach((field) => {\n const name = getFieldDisplayName(field, frame, frames);\n\n // (intentional fall-through)\n switch (name) {\n // General element config\n case opts.background?.color?.field:\n case opts.background?.image?.field:\n case opts.border?.color?.field:\n // Text config\n case cfg.text?.field:\n case cfg.color?.field:\n // Icon config\n case cfg.path?.field:\n case cfg.fill?.field:\n // Server config\n case cfg.blinkRate?.field:\n case cfg.statusColor?.field:\n case cfg.bulbColor?.field:\n // Wind turbine config (maybe remove / not support this?)\n case cfg.rpm?.field:\n fields.add(field);\n }\n });\n });\n\n return [...fields];\n}\n\nexport function applyStyles(styles: React.CSSProperties, target: HTMLDivElement) {\n // INFO: CSSProperties can't be applied using setProperty, so we use Object.assign\n Object.assign(target.style, styles);\n}\n\nexport function removeStyles(styles: React.CSSProperties, target: HTMLDivElement) {\n for (const key in styles) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/consistent-type-assertions\n target.style[key as any] = '';\n }\n}\n","/*\nCopyright (c) 2018 Daybrush\n@name: @daybrush/utils\nlicense: MIT\nauthor: Daybrush\nrepository: https://github.com/daybrush/utils\n@version 1.13.0\n*/\n/**\n* @namespace\n* @name Consts\n*/\n/**\n* get string \"rgb\"\n* @memberof Color\n* @example\nimport {RGB} from \"@daybrush/utils\";\n\nconsole.log(RGB); // \"rgb\"\n*/\nvar RGB = \"rgb\";\n/**\n* get string \"rgba\"\n* @memberof Color\n* @example\nimport {RGBA} from \"@daybrush/utils\";\n\nconsole.log(RGBA); // \"rgba\"\n*/\nvar RGBA = \"rgba\";\n/**\n* get string \"hsl\"\n* @memberof Color\n* @example\nimport {HSL} from \"@daybrush/utils\";\n\nconsole.log(HSL); // \"hsl\"\n*/\nvar HSL = \"hsl\";\n/**\n* get string \"hsla\"\n* @memberof Color\n* @example\nimport {HSLA} from \"@daybrush/utils\";\n\nconsole.log(HSLA); // \"hsla\"\n*/\nvar HSLA = \"hsla\";\n/**\n* gets an array of color models.\n* @memberof Color\n* @example\nimport {COLOR_MODELS} from \"@daybrush/utils\";\n\nconsole.log(COLOR_MODELS); // [\"rgb\", \"rgba\", \"hsl\", \"hsla\"];\n*/\nvar COLOR_MODELS = [RGB, RGBA, HSL, HSLA];\n/**\n* get string \"function\"\n* @memberof Consts\n* @example\nimport {FUNCTION} from \"@daybrush/utils\";\n\nconsole.log(FUNCTION); // \"function\"\n*/\nvar FUNCTION = \"function\";\n/**\n* get string \"property\"\n* @memberof Consts\n* @example\nimport {PROPERTY} from \"@daybrush/utils\";\n\nconsole.log(PROPERTY); // \"property\"\n*/\nvar PROPERTY = \"property\";\n/**\n* get string \"array\"\n* @memberof Consts\n* @example\nimport {ARRAY} from \"@daybrush/utils\";\n\nconsole.log(ARRAY); // \"array\"\n*/\nvar ARRAY = \"array\";\n/**\n* get string \"object\"\n* @memberof Consts\n* @example\nimport {OBJECT} from \"@daybrush/utils\";\n\nconsole.log(OBJECT); // \"object\"\n*/\nvar OBJECT = \"object\";\n/**\n* get string \"string\"\n* @memberof Consts\n* @example\nimport {STRING} from \"@daybrush/utils\";\n\nconsole.log(STRING); // \"string\"\n*/\nvar STRING = \"string\";\n/**\n* get string \"number\"\n* @memberof Consts\n* @example\nimport {NUMBER} from \"@daybrush/utils\";\n\nconsole.log(NUMBER); // \"number\"\n*/\nvar NUMBER = \"number\";\n/**\n* get string \"undefined\"\n* @memberof Consts\n* @example\nimport {UNDEFINED} from \"@daybrush/utils\";\n\nconsole.log(UNDEFINED); // \"undefined\"\n*/\nvar UNDEFINED = \"undefined\";\n/**\n* Check whether the environment is window or node.js.\n* @memberof Consts\n* @example\nimport {IS_WINDOW} from \"@daybrush/utils\";\n\nconsole.log(IS_WINDOW); // false in node.js\nconsole.log(IS_WINDOW); // true in browser\n*/\nvar IS_WINDOW = typeof window !== UNDEFINED;\n/**\n* Check whether the environment is window or node.js.\n* @memberof Consts\n* @name document\n* @example\nimport {IS_WINDOW} from \"@daybrush/utils\";\n\nconsole.log(IS_WINDOW); // false in node.js\nconsole.log(IS_WINDOW); // true in browser\n*/\nvar doc = typeof document !== UNDEFINED && document; // FIXME: this type maybe false\nvar prefixes = [\"webkit\", \"ms\", \"moz\", \"o\"];\n/**\n * @namespace CrossBrowser\n */\n/**\n* Get a CSS property with a vendor prefix that supports cross browser.\n* @function\n* @param {string} property - A CSS property\n* @return {string} CSS property with cross-browser vendor prefix\n* @memberof CrossBrowser\n* @example\nimport {getCrossBrowserProperty} from \"@daybrush/utils\";\n\nconsole.log(getCrossBrowserProperty(\"transform\")); // \"transform\", \"-ms-transform\", \"-webkit-transform\"\nconsole.log(getCrossBrowserProperty(\"filter\")); // \"filter\", \"-webkit-filter\"\n*/\nvar getCrossBrowserProperty = /*#__PURE__*/function (property) {\n if (!doc) {\n return \"\";\n }\n var styles = (doc.body || doc.documentElement).style;\n var length = prefixes.length;\n if (typeof styles[property] !== UNDEFINED) {\n return property;\n }\n for (var i = 0; i < length; ++i) {\n var name = \"-\" + prefixes[i] + \"-\" + property;\n if (typeof styles[name] !== UNDEFINED) {\n return name;\n }\n }\n return \"\";\n};\n/**\n* get string \"transfrom\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {TRANSFORM} from \"@daybrush/utils\";\n\nconsole.log(TRANSFORM); // \"transform\", \"-ms-transform\", \"-webkit-transform\"\n*/\nvar TRANSFORM = /*#__PURE__*/getCrossBrowserProperty(\"transform\");\n/**\n* get string \"filter\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {FILTER} from \"@daybrush/utils\";\n\nconsole.log(FILTER); // \"filter\", \"-ms-filter\", \"-webkit-filter\"\n*/\nvar FILTER = /*#__PURE__*/getCrossBrowserProperty(\"filter\");\n/**\n* get string \"animation\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {ANIMATION} from \"@daybrush/utils\";\n\nconsole.log(ANIMATION); // \"animation\", \"-ms-animation\", \"-webkit-animation\"\n*/\nvar ANIMATION = /*#__PURE__*/getCrossBrowserProperty(\"animation\");\n/**\n* get string \"keyframes\" with the vendor prefix.\n* @memberof CrossBrowser\n* @example\nimport {KEYFRAMES} from \"@daybrush/utils\";\n\nconsole.log(KEYFRAMES); // \"keyframes\", \"-ms-keyframes\", \"-webkit-keyframes\"\n*/\nvar KEYFRAMES = /*#__PURE__*/ANIMATION.replace(\"animation\", \"keyframes\");\nvar OPEN_CLOSED_CHARACTERS = [{\n open: \"(\",\n close: \")\"\n}, {\n open: \"\\\"\",\n close: \"\\\"\"\n}, {\n open: \"'\",\n close: \"'\"\n}, {\n open: \"\\\\\\\"\",\n close: \"\\\\\\\"\"\n}, {\n open: \"\\\\'\",\n close: \"\\\\'\"\n}];\nvar TINY_NUM = 0.0000001;\nvar REVERSE_TINY_NUM = 1 / TINY_NUM;\nvar DEFAULT_UNIT_PRESETS = {\n \"cm\": function (pos) {\n return pos * 96 / 2.54;\n },\n \"mm\": function (pos) {\n return pos * 96 / 254;\n },\n \"in\": function (pos) {\n return pos * 96;\n },\n \"pt\": function (pos) {\n return pos * 96 / 72;\n },\n \"pc\": function (pos) {\n return pos * 96 / 6;\n },\n \"%\": function (pos, size) {\n return pos * size / 100;\n },\n \"vw\": function (pos, size) {\n if (size === void 0) {\n size = window.innerWidth;\n }\n return pos / 100 * size;\n },\n \"vh\": function (pos, size) {\n if (size === void 0) {\n size = window.innerHeight;\n }\n return pos / 100 * size;\n },\n \"vmax\": function (pos, size) {\n if (size === void 0) {\n size = Math.max(window.innerWidth, window.innerHeight);\n }\n return pos / 100 * size;\n },\n \"vmin\": function (pos, size) {\n if (size === void 0) {\n size = Math.min(window.innerWidth, window.innerHeight);\n }\n return pos / 100 * size;\n }\n};\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j];\n return r;\n}\n\n/**\n* @namespace\n* @name Utils\n*/\n/**\n * Returns the inner product of two numbers(`a1`, `a2`) by two criteria(`b1`, `b2`).\n * @memberof Utils\n * @param - The first number\n * @param - The second number\n * @param - The first number to base on the inner product\n * @param - The second number to base on the inner product\n * @return - Returns the inner product\nimport { dot } from \"@daybrush/utils\";\n\nconsole.log(dot(0, 15, 2, 3)); // 6\nconsole.log(dot(5, 15, 2, 3)); // 9\nconsole.log(dot(5, 15, 1, 1)); // 10\n */\nfunction dot(a1, a2, b1, b2) {\n return (a1 * b2 + a2 * b1) / (b1 + b2);\n}\n/**\n* Check the type that the value is undefined.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {boolean} true if the type is correct, false otherwise\n* @example\nimport {isUndefined} from \"@daybrush/utils\";\n\nconsole.log(isUndefined(undefined)); // true\nconsole.log(isUndefined(\"\")); // false\nconsole.log(isUndefined(1)); // false\nconsole.log(isUndefined(null)); // false\n*/\nfunction isUndefined(value) {\n return typeof value === UNDEFINED;\n}\n/**\n* Check the type that the value is object.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isObject} from \"@daybrush/utils\";\n\nconsole.log(isObject({})); // true\nconsole.log(isObject(undefined)); // false\nconsole.log(isObject(\"\")); // false\nconsole.log(isObject(null)); // false\n*/\nfunction isObject(value) {\n return value && typeof value === OBJECT;\n}\n/**\n* Check the type that the value is isArray.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isArray} from \"@daybrush/utils\";\n\nconsole.log(isArray([])); // true\nconsole.log(isArray({})); // false\nconsole.log(isArray(undefined)); // false\nconsole.log(isArray(null)); // false\n*/\nfunction isArray(value) {\n return Array.isArray(value);\n}\n/**\n* Check the type that the value is string.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isString} from \"@daybrush/utils\";\n\nconsole.log(isString(\"1234\")); // true\nconsole.log(isString(undefined)); // false\nconsole.log(isString(1)); // false\nconsole.log(isString(null)); // false\n*/\nfunction isString(value) {\n return typeof value === STRING;\n}\nfunction isNumber(value) {\n return typeof value === NUMBER;\n}\n/**\n* Check the type that the value is function.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isFunction} from \"@daybrush/utils\";\n\nconsole.log(isFunction(function a() {})); // true\nconsole.log(isFunction(() => {})); // true\nconsole.log(isFunction(\"1234\")); // false\nconsole.log(isFunction(1)); // false\nconsole.log(isFunction(null)); // false\n*/\nfunction isFunction(value) {\n return typeof value === FUNCTION;\n}\nfunction isEqualSeparator(character, separator) {\n var isCharacterSpace = character === \"\" || character == \" \";\n var isSeparatorSpace = separator === \"\" || separator == \" \";\n return isSeparatorSpace && isCharacterSpace || character === separator;\n}\nfunction findOpen(openCharacter, texts, index, length, openCloseCharacters) {\n var isIgnore = findIgnore(openCharacter, texts, index);\n if (!isIgnore) {\n return findClose(openCharacter, texts, index + 1, length, openCloseCharacters);\n }\n return index;\n}\nfunction findIgnore(character, texts, index) {\n if (!character.ignore) {\n return null;\n }\n var otherText = texts.slice(Math.max(index - 3, 0), index + 3).join(\"\");\n return new RegExp(character.ignore).exec(otherText);\n}\nfunction findClose(closeCharacter, texts, index, length, openCloseCharacters) {\n var _loop_1 = function (i) {\n var character = texts[i].trim();\n if (character === closeCharacter.close && !findIgnore(closeCharacter, texts, i)) {\n return {\n value: i\n };\n }\n var nextIndex = i;\n // re open\n var openCharacter = find(openCloseCharacters, function (_a) {\n var open = _a.open;\n return open === character;\n });\n if (openCharacter) {\n nextIndex = findOpen(openCharacter, texts, i, length, openCloseCharacters);\n }\n if (nextIndex === -1) {\n return out_i_1 = i, \"break\";\n }\n i = nextIndex;\n out_i_1 = i;\n };\n var out_i_1;\n for (var i = index; i < length; ++i) {\n var state_1 = _loop_1(i);\n i = out_i_1;\n if (typeof state_1 === \"object\") return state_1.value;\n if (state_1 === \"break\") break;\n }\n return -1;\n}\nfunction splitText(text, splitOptions) {\n var _a = isString(splitOptions) ? {\n separator: splitOptions\n } : splitOptions,\n _b = _a.separator,\n separator = _b === void 0 ? \",\" : _b,\n isSeparateFirst = _a.isSeparateFirst,\n isSeparateOnlyOpenClose = _a.isSeparateOnlyOpenClose,\n _c = _a.isSeparateOpenClose,\n isSeparateOpenClose = _c === void 0 ? isSeparateOnlyOpenClose : _c,\n _d = _a.openCloseCharacters,\n openCloseCharacters = _d === void 0 ? OPEN_CLOSED_CHARACTERS : _d;\n var openClosedText = openCloseCharacters.map(function (_a) {\n var open = _a.open,\n close = _a.close;\n if (open === close) {\n return open;\n }\n return open + \"|\" + close;\n }).join(\"|\");\n var regexText = \"(\\\\s*\" + separator + \"\\\\s*|\" + openClosedText + \"|\\\\s+)\";\n var regex = new RegExp(regexText, \"g\");\n var texts = text.split(regex).filter(function (chr) {\n return chr && chr !== \"undefined\";\n });\n var length = texts.length;\n var values = [];\n var tempValues = [];\n function resetTemp() {\n if (tempValues.length) {\n values.push(tempValues.join(\"\"));\n tempValues = [];\n return true;\n }\n return false;\n }\n var _loop_2 = function (i) {\n var character = texts[i].trim();\n var nextIndex = i;\n var openCharacter = find(openCloseCharacters, function (_a) {\n var open = _a.open;\n return open === character;\n });\n var closeCharacter = find(openCloseCharacters, function (_a) {\n var close = _a.close;\n return close === character;\n });\n if (openCharacter) {\n nextIndex = findOpen(openCharacter, texts, i, length, openCloseCharacters);\n if (nextIndex !== -1 && isSeparateOpenClose) {\n if (resetTemp() && isSeparateFirst) {\n return out_i_2 = i, \"break\";\n }\n values.push(texts.slice(i, nextIndex + 1).join(\"\"));\n i = nextIndex;\n if (isSeparateFirst) {\n return out_i_2 = i, \"break\";\n }\n return out_i_2 = i, \"continue\";\n }\n } else if (closeCharacter && !findIgnore(closeCharacter, texts, i)) {\n var nextOpenCloseCharacters = __spreadArrays(openCloseCharacters);\n nextOpenCloseCharacters.splice(openCloseCharacters.indexOf(closeCharacter), 1);\n return {\n value: splitText(text, {\n separator: separator,\n isSeparateFirst: isSeparateFirst,\n isSeparateOnlyOpenClose: isSeparateOnlyOpenClose,\n isSeparateOpenClose: isSeparateOpenClose,\n openCloseCharacters: nextOpenCloseCharacters\n })\n };\n } else if (isEqualSeparator(character, separator) && !isSeparateOnlyOpenClose) {\n resetTemp();\n if (isSeparateFirst) {\n return out_i_2 = i, \"break\";\n }\n return out_i_2 = i, \"continue\";\n }\n if (nextIndex === -1) {\n nextIndex = length - 1;\n }\n tempValues.push(texts.slice(i, nextIndex + 1).join(\"\"));\n i = nextIndex;\n out_i_2 = i;\n };\n var out_i_2;\n for (var i = 0; i < length; ++i) {\n var state_2 = _loop_2(i);\n i = out_i_2;\n if (typeof state_2 === \"object\") return state_2.value;\n if (state_2 === \"break\") break;\n }\n if (tempValues.length) {\n values.push(tempValues.join(\"\"));\n }\n return values;\n}\n/**\n* divide text by space.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {Array} divided texts\n* @example\nimport {spliceSpace} from \"@daybrush/utils\";\n\nconsole.log(splitSpace(\"a b c d e f g\"));\n// [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\"]\nconsole.log(splitSpace(\"'a,b' c 'd,e' f g\"));\n// [\"'a,b'\", \"c\", \"'d,e'\", \"f\", \"g\"]\n*/\nfunction splitSpace(text) {\n // divide comma(space)\n return splitText(text, \"\");\n}\n/**\n* divide text by comma.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {Array} divided texts\n* @example\nimport {splitComma} from \"@daybrush/utils\";\n\nconsole.log(splitComma(\"a,b,c,d,e,f,g\"));\n// [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\"]\nconsole.log(splitComma(\"'a,b',c,'d,e',f,g\"));\n// [\"'a,b'\", \"c\", \"'d,e'\", \"f\", \"g\"]\n*/\nfunction splitComma(text) {\n // divide comma(,)\n // \"[^\"]*\"|'[^']*'\n return splitText(text, \",\");\n}\n/**\n* divide text by bracket \"(\", \")\".\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {object} divided texts\n* @example\nimport {splitBracket} from \"@daybrush/utils\";\n\nconsole.log(splitBracket(\"a(1, 2)\"));\n// {prefix: \"a\", value: \"1, 2\", suffix: \"\"}\nconsole.log(splitBracket(\"a(1, 2)b\"));\n// {prefix: \"a\", value: \"1, 2\", suffix: \"b\"}\n*/\nfunction splitBracket(text) {\n var matches = /([^(]*)\\(([\\s\\S]*)\\)([\\s\\S]*)/g.exec(text);\n if (!matches || matches.length < 4) {\n return {};\n } else {\n return {\n prefix: matches[1],\n value: matches[2],\n suffix: matches[3]\n };\n }\n}\n/**\n* divide text by number and unit.\n* @memberof Utils\n* @param {string} text - text to divide\n* @return {} divided texts\n* @example\nimport {splitUnit} from \"@daybrush/utils\";\n\nconsole.log(splitUnit(\"10px\"));\n// {prefix: \"\", value: 10, unit: \"px\"}\nconsole.log(splitUnit(\"-10px\"));\n// {prefix: \"\", value: -10, unit: \"px\"}\nconsole.log(splitUnit(\"a10%\"));\n// {prefix: \"a\", value: 10, unit: \"%\"}\n*/\nfunction splitUnit(text) {\n var matches = /^([^\\d|e|\\-|\\+]*)((?:\\d|\\.|-|e-|e\\+)+)(\\S*)$/g.exec(text);\n if (!matches) {\n return {\n prefix: \"\",\n unit: \"\",\n value: NaN\n };\n }\n var prefix = matches[1];\n var value = matches[2];\n var unit = matches[3];\n return {\n prefix: prefix,\n unit: unit,\n value: parseFloat(value)\n };\n}\n/**\n* transform strings to camel-case\n* @memberof Utils\n* @param {String} text - string\n* @return {String} camel-case string\n* @example\nimport {camelize} from \"@daybrush/utils\";\n\nconsole.log(camelize(\"transform-origin\")); // transformOrigin\nconsole.log(camelize(\"abcd_efg\")); // abcdEfg\nconsole.log(camelize(\"abcd efg\")); // abcdEfg\n*/\nfunction camelize(str) {\n return str.replace(/[\\s-_]+([^\\s-_])/g, function (all, letter) {\n return letter.toUpperCase();\n });\n}\n/**\n* transform a camelized string into a lowercased string.\n* @memberof Utils\n* @param {string} text - a camel-cased string\n* @param {string} [separator=\"-\"] - a separator\n* @return {string} a lowercased string\n* @example\nimport {decamelize} from \"@daybrush/utils\";\n\nconsole.log(decamelize(\"transformOrigin\")); // transform-origin\nconsole.log(decamelize(\"abcdEfg\", \"_\")); // abcd_efg\n*/\nfunction decamelize(str, separator) {\n if (separator === void 0) {\n separator = \"-\";\n }\n return str.replace(/([a-z])([A-Z])/g, function (all, letter, letter2) {\n return \"\" + letter + separator + letter2.toLowerCase();\n });\n}\n/**\n* transforms something in an array into an array.\n* @memberof Utils\n* @param - Array form\n* @return an array\n* @example\nimport {toArray} from \"@daybrush/utils\";\n\nconst arr1 = toArray(document.querySelectorAll(\".a\")); // Element[]\nconst arr2 = toArray(document.querySelectorAll<HTMLElement>(\".a\")); // HTMLElement[]\n*/\nfunction toArray(value) {\n return [].slice.call(value);\n}\n/**\n* Date.now() method\n* @memberof CrossBrowser\n* @return {number} milliseconds\n* @example\nimport {now} from \"@daybrush/utils\";\n\nconsole.log(now()); // 12121324241(milliseconds)\n*/\nfunction now() {\n return Date.now ? Date.now() : new Date().getTime();\n}\n/**\n* Returns the index of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `findIndex` was called upon.\n* @param - A function to execute on each value in the array until the function returns true, indicating that the satisfying element was found.\n* @param - Returns defaultIndex if not found by the function.\n* @example\nimport { findIndex } from \"@daybrush/utils\";\n\nfindIndex([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // 1\n*/\nfunction findIndex(arr, callback, defaultIndex) {\n if (defaultIndex === void 0) {\n defaultIndex = -1;\n }\n var length = arr.length;\n for (var i = 0; i < length; ++i) {\n if (callback(arr[i], i, arr)) {\n return i;\n }\n }\n return defaultIndex;\n}\n/**\n* Returns the reverse direction index of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `findLastIndex` was called upon.\n* @param - A function to execute on each value in the array until the function returns true, indicating that the satisfying element was found.\n* @param - Returns defaultIndex if not found by the function.\n* @example\nimport { findLastIndex } from \"@daybrush/utils\";\n\nfindLastIndex([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // 1\n*/\nfunction findLastIndex(arr, callback, defaultIndex) {\n if (defaultIndex === void 0) {\n defaultIndex = -1;\n }\n var length = arr.length;\n for (var i = length - 1; i >= 0; --i) {\n if (callback(arr[i], i, arr)) {\n return i;\n }\n }\n return defaultIndex;\n}\n/**\n* Returns the value of the reverse direction element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `findLast` was called upon.\n* @param - A function to execute on each value in the array,\n* @param - Returns defalutValue if not found by the function.\n* @example\nimport { find } from \"@daybrush/utils\";\n\nfind([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // {a: 2}\n*/\nfunction findLast(arr, callback, defalutValue) {\n var index = findLastIndex(arr, callback);\n return index > -1 ? arr[index] : defalutValue;\n}\n/**\n* Returns the value of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `find` was called upon.\n* @param - A function to execute on each value in the array,\n* @param - Returns defalutValue if not found by the function.\n* @example\nimport { find } from \"@daybrush/utils\";\n\nfind([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // {a: 2}\n*/\nfunction find(arr, callback, defalutValue) {\n var index = findIndex(arr, callback);\n return index > -1 ? arr[index] : defalutValue;\n}\n/**\n* window.requestAnimationFrame() method with cross browser.\n* @function\n* @memberof CrossBrowser\n* @param {FrameRequestCallback} callback - The function to call when it's time to update your animation for the next repaint.\n* @return {number} id\n* @example\nimport {requestAnimationFrame} from \"@daybrush/utils\";\n\nrequestAnimationFrame((timestamp) => {\n console.log(timestamp);\n});\n*/\nvar requestAnimationFrame = /*#__PURE__*/function () {\n var firstTime = now();\n var raf = IS_WINDOW && (window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.msRequestAnimationFrame);\n return raf ? raf.bind(window) : function (callback) {\n var currTime = now();\n var id = setTimeout(function () {\n callback(currTime - firstTime);\n }, 1000 / 60);\n return id;\n };\n}();\n/**\n* window.cancelAnimationFrame() method with cross browser.\n* @function\n* @memberof CrossBrowser\n* @param {number} handle - the id obtained through requestAnimationFrame method\n* @return {void}\n* @example\nimport { requestAnimationFrame, cancelAnimationFrame } from \"@daybrush/utils\";\n\nconst id = requestAnimationFrame((timestamp) => {\n console.log(timestamp);\n});\n\ncancelAnimationFrame(id);\n*/\nvar cancelAnimationFrame = /*#__PURE__*/function () {\n var caf = IS_WINDOW && (window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.msCancelAnimationFrame);\n return caf ? caf.bind(window) : function (handle) {\n clearTimeout(handle);\n };\n}();\n/**\n* @function\n* @memberof Utils\n*/\nfunction getKeys(obj) {\n return Object.keys(obj);\n}\n/**\n* @function\n* @memberof Utils\n*/\nfunction getValues(obj) {\n var keys = getKeys(obj);\n return keys.map(function (key) {\n return obj[key];\n });\n}\n/**\n* @function\n* @memberof Utils\n*/\nfunction getEntries(obj) {\n var keys = getKeys(obj);\n return keys.map(function (key) {\n return [key, obj[key]];\n });\n}\n/**\n* @function\n* @memberof Utils\n*/\nfunction sortOrders(keys, orders) {\n if (orders === void 0) {\n orders = [];\n }\n keys.sort(function (a, b) {\n var index1 = orders.indexOf(a);\n var index2 = orders.indexOf(b);\n if (index2 === -1 && index1 === -1) {\n return 0;\n }\n if (index1 === -1) {\n return 1;\n }\n if (index2 === -1) {\n return -1;\n }\n return index1 - index2;\n });\n}\n/**\n* convert unit size to px size\n* @function\n* @memberof Utils\n*/\nfunction convertUnitSize(pos, size) {\n var _a = splitUnit(pos),\n value = _a.value,\n unit = _a.unit;\n if (isObject(size)) {\n var sizeFunction = size[unit];\n if (sizeFunction) {\n if (isFunction(sizeFunction)) {\n return sizeFunction(value);\n } else if (DEFAULT_UNIT_PRESETS[unit]) {\n return DEFAULT_UNIT_PRESETS[unit](value, sizeFunction);\n }\n }\n } else if (unit === \"%\") {\n return value * size / 100;\n }\n if (DEFAULT_UNIT_PRESETS[unit]) {\n return DEFAULT_UNIT_PRESETS[unit](value);\n }\n return value;\n}\n/**\n* calculate between min, max\n* @function\n* @memberof Utils\n*/\nfunction between(value, min, max) {\n return Math.max(min, Math.min(value, max));\n}\nfunction checkBoundSize(targetSize, compareSize, isMax, ratio) {\n if (ratio === void 0) {\n ratio = targetSize[0] / targetSize[1];\n }\n return [[throttle(compareSize[0], TINY_NUM), throttle(compareSize[0] / ratio, TINY_NUM)], [throttle(compareSize[1] * ratio, TINY_NUM), throttle(compareSize[1], TINY_NUM)]].filter(function (size) {\n return size.every(function (value, i) {\n var defaultSize = compareSize[i];\n var throttledSize = throttle(defaultSize, TINY_NUM);\n return isMax ? value <= defaultSize || value <= throttledSize : value >= defaultSize || value >= throttledSize;\n });\n })[0] || targetSize;\n}\n/**\n* calculate bound size\n* @function\n* @memberof Utils\n*/\nfunction calculateBoundSize(size, minSize, maxSize, keepRatio) {\n if (!keepRatio) {\n return size.map(function (value, i) {\n return between(value, minSize[i], maxSize[i]);\n });\n }\n var width = size[0],\n height = size[1];\n var ratio = keepRatio === true ? width / height : keepRatio;\n // width : height = minWidth : minHeight;\n var _a = checkBoundSize(size, minSize, false, ratio),\n minWidth = _a[0],\n minHeight = _a[1];\n var _b = checkBoundSize(size, maxSize, true, ratio),\n maxWidth = _b[0],\n maxHeight = _b[1];\n if (width < minWidth || height < minHeight) {\n width = minWidth;\n height = minHeight;\n } else if (width > maxWidth || height > maxHeight) {\n width = maxWidth;\n height = maxHeight;\n }\n return [width, height];\n}\n/**\n* Add all the numbers.\n* @function\n* @memberof Utils\n*/\nfunction sum(nums) {\n var length = nums.length;\n var total = 0;\n for (var i = length - 1; i >= 0; --i) {\n total += nums[i];\n }\n return total;\n}\n/**\n* Average all numbers.\n* @function\n* @memberof Utils\n*/\nfunction average(nums) {\n var length = nums.length;\n var total = 0;\n for (var i = length - 1; i >= 0; --i) {\n total += nums[i];\n }\n return length ? total / length : 0;\n}\n/**\n* Get the angle of two points. (0 <= rad < 359)\n* @function\n* @memberof Utils\n*/\nfunction getRad(pos1, pos2) {\n var distX = pos2[0] - pos1[0];\n var distY = pos2[1] - pos1[1];\n var rad = Math.atan2(distY, distX);\n return rad >= 0 ? rad : rad + Math.PI * 2;\n}\n/**\n* Get the average point of all points.\n* @function\n* @memberof Utils\n*/\nfunction getCenterPoint(points) {\n return [0, 1].map(function (i) {\n return average(points.map(function (pos) {\n return pos[i];\n }));\n });\n}\n/**\n* Gets the direction of the shape.\n* @function\n* @memberof Utils\n*/\nfunction getShapeDirection(points) {\n var center = getCenterPoint(points);\n var pos1Rad = getRad(center, points[0]);\n var pos2Rad = getRad(center, points[1]);\n return pos1Rad < pos2Rad && pos2Rad - pos1Rad < Math.PI || pos1Rad > pos2Rad && pos2Rad - pos1Rad < -Math.PI ? 1 : -1;\n}\n/**\n* Get the distance between two points.\n* @function\n* @memberof Utils\n*/\nfunction getDist(a, b) {\n return Math.sqrt(Math.pow((b ? b[0] : 0) - a[0], 2) + Math.pow((b ? b[1] : 0) - a[1], 2));\n}\n/**\n* throttle number depending on the unit.\n* @function\n* @memberof Utils\n*/\nfunction throttle(num, unit) {\n if (!unit) {\n return num;\n }\n var reverseUnit = 1 / unit;\n return Math.round(num / unit) / reverseUnit;\n}\n/**\n* throttle number array depending on the unit.\n* @function\n* @memberof Utils\n*/\nfunction throttleArray(nums, unit) {\n nums.forEach(function (_, i) {\n nums[i] = throttle(nums[i], unit);\n });\n return nums;\n}\n/**\n* @function\n* @memberof Utils\n*/\nfunction counter(num) {\n var nums = [];\n for (var i = 0; i < num; ++i) {\n nums.push(i);\n }\n return nums;\n}\n/**\n* @function\n* @memberof Utils\n*/\nfunction replaceOnce(text, fromText, toText) {\n var isOnce = false;\n return text.replace(fromText, function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (isOnce) {\n return args[0];\n }\n isOnce = true;\n return isString(toText) ? toText : toText.apply(void 0, args);\n });\n}\n/**\n* @function\n* @memberof Utils\n*/\nfunction flat(arr) {\n return arr.reduce(function (prev, cur) {\n return prev.concat(cur);\n }, []);\n}\n/**\n* @function\n* @memberof Utils\n*/\nfunction deepFlat(arr) {\n return arr.reduce(function (prev, cur) {\n if (isArray(cur)) {\n prev.push.apply(prev, deepFlat(cur));\n } else {\n prev.push(cur);\n }\n return prev;\n }, []);\n}\n/**\n * @function\n * @memberof Utils\n */\nfunction pushSet(elements, element) {\n if (elements.indexOf(element) === -1) {\n elements.push(element);\n }\n}\n\n/**\n* @namespace\n* @name Color\n*/\n/**\n* Remove the # from the hex color.\n* @memberof Color\n* @param {} hex - hex color\n* @return {} hex color\n* @example\nimport {cutHex} from \"@daybrush/utils\";\n\nconsole.log(cutHex(\"#000000\")) // \"000000\"\n*/\nfunction cutHex(hex) {\n return hex.replace(\"#\", \"\");\n}\n/**\n* convert hex color to rgb color.\n* @memberof Color\n* @param {} hex - hex color\n* @return {} rgb color\n* @example\nimport {hexToRGBA} from \"@daybrush/utils\";\n\nconsole.log(hexToRGBA(\"#00000005\"));\n// [0, 0, 0, 1]\nconsole.log(hexToRGBA(\"#201045\"));\n// [32, 16, 69, 1]\n*/\nfunction hexToRGBA(hex) {\n var h = cutHex(hex);\n var r = parseInt(h.substring(0, 2), 16);\n var g = parseInt(h.substring(2, 4), 16);\n var b = parseInt(h.substring(4, 6), 16);\n var a = parseInt(h.substring(6, 8), 16) / 255;\n if (isNaN(a)) {\n a = 1;\n }\n return [r, g, b, a];\n}\n/**\n* convert 3(or 4)-digit hex color to 6(or 8)-digit hex color.\n* @memberof Color\n* @param {} hex - 3(or 4)-digit hex color\n* @return {} 6(or 8)-digit hex color\n* @example\nimport {toFullHex} from \"@daybrush/utils\";\n\nconsole.log(toFullHex(\"#123\")); // \"#112233\"\nconsole.log(toFullHex(\"#123a\")); // \"#112233aa\"\n*/\nfunction toFullHex(h) {\n var r = h.charAt(1);\n var g = h.charAt(2);\n var b = h.charAt(3);\n var a = h.charAt(4);\n var arr = [\"#\", r, r, g, g, b, b, a, a];\n return arr.join(\"\");\n}\n/**\n* convert hsl color to rgba color.\n* @memberof Color\n* @param {} hsl - hsl color(hue: 0 ~ 360, saturation: 0 ~ 1, lightness: 0 ~ 1, alpha: 0 ~ 1)\n* @return {} rgba color\n* @example\nimport {hslToRGBA} from \"@daybrush/utils\";\n\nconsole.log(hslToRGBA([150, 0.5, 0.4]));\n// [51, 153, 102, 1]\n*/\nfunction hslToRGBA(hsl) {\n var _a;\n var h = hsl[0];\n var s = hsl[1];\n var l = hsl[2];\n if (h < 0) {\n h += Math.floor((Math.abs(h) + 360) / 360) * 360;\n }\n h %= 360;\n var c = (1 - Math.abs(2 * l - 1)) * s;\n var x = c * (1 - Math.abs(h / 60 % 2 - 1));\n var m = l - c / 2;\n var rgb;\n if (h < 60) {\n rgb = [c, x, 0];\n } else if (h < 120) {\n rgb = [x, c, 0];\n } else if (h < 180) {\n rgb = [0, c, x];\n } else if (h < 240) {\n rgb = [0, x, c];\n } else if (h < 300) {\n rgb = [x, 0, c];\n } else if (h < 360) {\n rgb = [c, 0, x];\n } else {\n rgb = [0, 0, 0];\n }\n return [Math.round((rgb[0] + m) * 255), Math.round((rgb[1] + m) * 255), Math.round((rgb[2] + m) * 255), (_a = hsl[3]) !== null && _a !== void 0 ? _a : 1];\n}\n/**\n* convert string to rgba color.\n* @memberof Color\n* @param {} - 3-hex(#000), 4-hex(#0000) 6-hex(#000000), 8-hex(#00000000) or RGB(A), or HSL(A)\n* @return {} rgba color\n* @example\nimport {stringToRGBA} from \"@daybrush/utils\";\n\nconsole.log(stringToRGBA(\"#000000\")); // [0, 0, 0, 1]\nconsole.log(stringToRGBA(\"rgb(100, 100, 100)\")); // [100, 100, 100, 1]\nconsole.log(stringToRGBA(\"hsl(150, 0.5, 0.4)\")); // [51, 153, 102, 1]\n*/\nfunction stringToRGBA(color) {\n if (color.charAt(0) === \"#\") {\n if (color.length === 4 || color.length === 5) {\n return hexToRGBA(toFullHex(color));\n } else {\n return hexToRGBA(color);\n }\n } else if (color.indexOf(\"(\") !== -1) {\n // in bracket.\n var _a = splitBracket(color),\n prefix = _a.prefix,\n value = _a.value;\n if (!prefix || !value) {\n return undefined;\n }\n var arr = splitComma(value);\n var colorArr = [0, 0, 0, 1];\n var length = arr.length;\n switch (prefix) {\n case RGB:\n case RGBA:\n for (var i = 0; i < length; ++i) {\n colorArr[i] = parseFloat(arr[i]);\n }\n return colorArr;\n case HSL:\n case HSLA:\n for (var i = 0; i < length; ++i) {\n if (arr[i].indexOf(\"%\") !== -1) {\n colorArr[i] = parseFloat(arr[i]) / 100;\n } else {\n colorArr[i] = parseFloat(arr[i]);\n }\n }\n // hsl, hsla to rgba\n return hslToRGBA(colorArr);\n }\n }\n return undefined;\n}\n\n/**\n * Returns all element descendants of node that\n * match selectors.\n */\n/**\n * Checks if the specified class value exists in the element's class attribute.\n * @memberof DOM\n * @param - A DOMString containing one or more selectors to match\n * @param - If multi is true, a DOMString containing one or more selectors to match against.\n * @example\nimport {$} from \"@daybrush/utils\";\n\nconsole.log($(\"div\")); // div element\nconsole.log($(\"div\", true)); // [div, div] elements\n*/\nfunction $(selectors, multi) {\n if (!doc) {\n return multi ? [] : null;\n }\n return multi ? doc.querySelectorAll(selectors) : doc.querySelector(selectors);\n}\n/**\n* Checks if the specified class value exists in the element's class attribute.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to search\n* @return {boolean} return false if the class is not found.\n* @example\nimport {hasClass} from \"@daybrush/utils\";\n\nconsole.log(hasClass(element, \"start\")); // true or false\n*/\nfunction hasClass(element, className) {\n if (element.classList) {\n return element.classList.contains(className);\n }\n return !!element.className.match(new RegExp(\"(\\\\s|^)\" + className + \"(\\\\s|$)\"));\n}\n/**\n* Add the specified class value. If these classe already exist in the element's class attribute they are ignored.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to add\n* @example\nimport {addClass} from \"@daybrush/utils\";\n\naddClass(element, \"start\");\n*/\nfunction addClass(element, className) {\n if (element.classList) {\n element.classList.add(className);\n } else {\n element.className += \" \" + className;\n }\n}\n/**\n* Removes the specified class value.\n* @memberof DOM\n* @param element - target\n* @param className - the class name to remove\n* @example\nimport {removeClass} from \"@daybrush/utils\";\n\nremoveClass(element, \"start\");\n*/\nfunction removeClass(element, className) {\n if (element.classList) {\n element.classList.remove(className);\n } else {\n var reg = new RegExp(\"(\\\\s|^)\" + className + \"(\\\\s|$)\");\n element.className = element.className.replace(reg, \" \");\n }\n}\n/**\n* Gets the CSS properties from the element.\n* @memberof DOM\n* @param elements - elements\n* @param properites - the CSS properties\n* @return returns CSS properties and values.\n* @example\nimport {fromCSS} from \"@daybrush/utils\";\n\nconsole.log(fromCSS(element, [\"left\", \"opacity\", \"top\"])); // {\"left\": \"10px\", \"opacity\": 1, \"top\": \"10px\"}\n*/\nfunction fromCSS(elements, properties) {\n if (!elements || !properties || !properties.length) {\n return {};\n }\n var element;\n if (elements instanceof Element) {\n element = elements;\n } else if (elements.length) {\n element = elements[0];\n } else {\n return {};\n }\n var cssObject = {};\n var styles = getWindow(element).getComputedStyle(element);\n var length = properties.length;\n for (var i = 0; i < length; ++i) {\n cssObject[properties[i]] = styles[properties[i]];\n }\n return cssObject;\n}\n/**\n* Sets up a function that will be called whenever the specified event is delivered to the target\n* @memberof DOM\n* @param - event target\n* @param - A case-sensitive string representing the event type to listen for.\n* @param - The object which receives a notification (an object that implements the Event interface) when an event of the specified type occurs\n* @param - An options object that specifies characteristics about the event listener.\n* @example\nimport {addEvent} from \"@daybrush/utils\";\n\naddEvent(el, \"click\", e => {\n console.log(e);\n});\n*/\nfunction addEvent(el, type, listener, options) {\n el.addEventListener(type, listener, options);\n}\n/**\n* removes from the EventTarget an event listener previously registered with EventTarget.addEventListener()\n* @memberof DOM\n* @param - event target\n* @param - A case-sensitive string representing the event type to listen for.\n* @param - The EventListener function of the event handler to remove from the event target.\n* @param - An options object that specifies characteristics about the event listener.\n* @example\nimport {addEvent, removeEvent} from \"@daybrush/utils\";\nconst listener = e => {\n console.log(e);\n};\naddEvent(el, \"click\", listener);\nremoveEvent(el, \"click\", listener);\n*/\nfunction removeEvent(el, type, listener, options) {\n el.removeEventListener(type, listener, options);\n}\nfunction getDocument(el) {\n return (el === null || el === void 0 ? void 0 : el.ownerDocument) || doc;\n}\nfunction getDocumentElement(el) {\n return getDocument(el).documentElement;\n}\nfunction getDocumentBody(el) {\n return getDocument(el).body;\n}\nfunction getWindow(el) {\n var _a;\n return ((_a = el === null || el === void 0 ? void 0 : el.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView) || window;\n}\nfunction isWindow(val) {\n return val && \"postMessage\" in val && \"blur\" in val && \"self\" in val;\n}\nfunction isNode(el) {\n return isObject(el) && el.nodeName && el.nodeType && \"ownerDocument\" in el;\n}\n\nexport { RGB, RGBA, HSL, HSLA, COLOR_MODELS, FUNCTION, PROPERTY, ARRAY, OBJECT, STRING, NUMBER, UNDEFINED, IS_WINDOW, doc as document, getCrossBrowserProperty, TRANSFORM, FILTER, ANIMATION, KEYFRAMES, OPEN_CLOSED_CHARACTERS, TINY_NUM, REVERSE_TINY_NUM, DEFAULT_UNIT_PRESETS, cutHex, hexToRGBA, toFullHex, hslToRGBA, stringToRGBA, dot, isUndefined, isObject, isArray, isString, isNumber, isFunction, splitText, splitSpace, splitComma, splitBracket, splitUnit, camelize, decamelize, toArray, now, findIndex, findLastIndex, findLast, find, requestAnimationFrame, cancelAnimationFrame, getKeys, getValues, getEntries, sortOrders, convertUnitSize, between, checkBoundSize, calculateBoundSize, sum, average, getRad, getCenterPoint, getShapeDirection, getDist, throttle, throttleArray, counter, replaceOnce, flat, deepFlat, pushSet, $, hasClass, addClass, removeClass, fromCSS, addEvent, removeEvent, getDocument, getDocumentElement, getDocumentBody, getWindow, isWindow, isNode };\n//# sourceMappingURL=utils.esm.js.map\n","/*\nCopyright (c) 2019 Daybrush\nname: @scena/event-emitter\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/gesture.git\nversion: 1.0.5\n*/\nimport { isObject, findIndex } from '@daybrush/utils';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\nvar __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j];\n\n return r;\n}\n\n/**\n * Implement EventEmitter on object or component.\n */\n\nvar EventEmitter =\n/*#__PURE__*/\nfunction () {\n function EventEmitter() {\n this._events = {};\n }\n /**\n * Add a listener to the registered event.\n * @param - Name of the event to be added\n * @param - listener function of the event to be added\n * @example\n * import EventEmitter from \"@scena/event-emitter\";\n * cosnt emitter = new EventEmitter();\n *\n * // Add listener in \"a\" event\n * emitter.on(\"a\", () => {\n * });\n * // Add listeners\n * emitter.on({\n * a: () => {},\n * b: () => {},\n * });\n */\n\n\n var __proto = EventEmitter.prototype;\n\n __proto.on = function (eventName, listener) {\n if (isObject(eventName)) {\n for (var name in eventName) {\n this.on(name, eventName[name]);\n }\n } else {\n this._addEvent(eventName, listener, {});\n }\n\n return this;\n };\n /**\n * Remove listeners registered in the event target.\n * @param - Name of the event to be removed\n * @param - listener function of the event to be removed\n * @example\n * import EventEmitter from \"@scena/event-emitter\";\n * cosnt emitter = new EventEmitter();\n *\n * // Remove all listeners.\n * emitter.off();\n *\n * // Remove all listeners in \"A\" event.\n * emitter.off(\"a\");\n *\n *\n * // Remove \"listener\" listener in \"a\" event.\n * emitter.off(\"a\", listener);\n */\n\n\n __proto.off = function (eventName, listener) {\n if (!eventName) {\n this._events = {};\n } else if (isObject(eventName)) {\n for (var name in eventName) {\n this.off(name);\n }\n } else if (!listener) {\n this._events[eventName] = [];\n } else {\n var events = this._events[eventName];\n\n if (events) {\n var index = findIndex(events, function (e) {\n return e.listener === listener;\n });\n\n if (index > -1) {\n events.splice(index, 1);\n }\n }\n }\n\n return this;\n };\n /**\n * Add a disposable listener and Use promise to the registered event.\n * @param - Name of the event to be added\n * @param - disposable listener function of the event to be added\n * @example\n * import EventEmitter from \"@scena/event-emitter\";\n * cosnt emitter = new EventEmitter();\n *\n * // Add a disposable listener in \"a\" event\n * emitter.once(\"a\", () => {\n * });\n *\n * // Use Promise\n * emitter.once(\"a\").then(e => {\n * });\n */\n\n\n __proto.once = function (eventName, listener) {\n var _this = this;\n\n if (listener) {\n this._addEvent(eventName, listener, {\n once: true\n });\n }\n\n return new Promise(function (resolve) {\n _this._addEvent(eventName, resolve, {\n once: true\n });\n });\n };\n /**\n * Fires an event to call listeners.\n * @param - Event name\n * @param - Event parameter\n * @return If false, stop the event.\n * @example\n *\n * import EventEmitter from \"@scena/event-emitter\";\n *\n *\n * const emitter = new EventEmitter();\n *\n * emitter.on(\"a\", e => {\n * });\n *\n *\n * emitter.emit(\"a\", {\n * a: 1,\n * });\n */\n\n\n __proto.emit = function (eventName, param) {\n var _this = this;\n\n if (param === void 0) {\n param = {};\n }\n\n var events = this._events[eventName];\n\n if (!eventName || !events) {\n return true;\n }\n\n var isStop = false;\n param.eventType = eventName;\n\n param.stop = function () {\n isStop = true;\n };\n\n param.currentTarget = this;\n\n __spreadArrays(events).forEach(function (info) {\n info.listener(param);\n\n if (info.once) {\n _this.off(eventName, info.listener);\n }\n });\n\n return !isStop;\n };\n /**\n * Fires an event to call listeners.\n * @param - Event name\n * @param - Event parameter\n * @return If false, stop the event.\n * @example\n *\n * import EventEmitter from \"@scena/event-emitter\";\n *\n *\n * const emitter = new EventEmitter();\n *\n * emitter.on(\"a\", e => {\n * });\n *\n *\n * emitter.emit(\"a\", {\n * a: 1,\n * });\n */\n\n /**\n * Fires an event to call listeners.\n * @param - Event name\n * @param - Event parameter\n * @return If false, stop the event.\n * @example\n *\n * import EventEmitter from \"@scena/event-emitter\";\n *\n *\n * const emitter = new EventEmitter();\n *\n * emitter.on(\"a\", e => {\n * });\n *\n * // emit\n * emitter.trigger(\"a\", {\n * a: 1,\n * });\n */\n\n\n __proto.trigger = function (eventName, param) {\n if (param === void 0) {\n param = {};\n }\n\n return this.emit(eventName, param);\n };\n\n __proto._addEvent = function (eventName, listener, options) {\n var events = this._events;\n events[eventName] = events[eventName] || [];\n var listeners = events[eventName];\n listeners.push(__assign({\n listener: listener\n }, options));\n };\n\n return EventEmitter;\n}();\n\nexport default EventEmitter;\n//# sourceMappingURL=event-emitter.esm.js.map\n","/*\nCopyright (c) 2019 Daybrush\nname: gesto\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/gesto.git\nversion: 1.19.4\n*/\nimport EventEmitter from '@scena/event-emitter';\nimport { removeEvent, addEvent, now, isWindow, getWindow } from '@daybrush/utils';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\n\nfunction getRad(pos1, pos2) {\n var distX = pos2[0] - pos1[0];\n var distY = pos2[1] - pos1[1];\n var rad = Math.atan2(distY, distX);\n return rad >= 0 ? rad : rad + Math.PI * 2;\n}\nfunction getRotatiion(touches) {\n return getRad([\n touches[0].clientX,\n touches[0].clientY,\n ], [\n touches[1].clientX,\n touches[1].clientY,\n ]) / Math.PI * 180;\n}\nfunction isMultiTouch(e) {\n return e.touches && e.touches.length >= 2;\n}\nfunction getEventClients(e) {\n if (!e) {\n return [];\n }\n if (e.touches) {\n return getClients(e.touches);\n }\n else {\n return [getClient(e)];\n }\n}\nfunction isMouseEvent(e) {\n return e && (e.type.indexOf(\"mouse\") > -1 || \"button\" in e);\n}\nfunction getPosition(clients, prevClients, startClients) {\n var length = startClients.length;\n var _a = getAverageClient(clients, length), clientX = _a.clientX, clientY = _a.clientY, originalClientX = _a.originalClientX, originalClientY = _a.originalClientY;\n var _b = getAverageClient(prevClients, length), prevX = _b.clientX, prevY = _b.clientY;\n var _c = getAverageClient(startClients, length), startX = _c.clientX, startY = _c.clientY;\n var deltaX = clientX - prevX;\n var deltaY = clientY - prevY;\n var distX = clientX - startX;\n var distY = clientY - startY;\n return {\n clientX: originalClientX,\n clientY: originalClientY,\n deltaX: deltaX,\n deltaY: deltaY,\n distX: distX,\n distY: distY,\n };\n}\nfunction getDist(clients) {\n return Math.sqrt(Math.pow(clients[0].clientX - clients[1].clientX, 2)\n + Math.pow(clients[0].clientY - clients[1].clientY, 2));\n}\nfunction getClients(touches) {\n var length = Math.min(touches.length, 2);\n var clients = [];\n for (var i = 0; i < length; ++i) {\n clients.push(getClient(touches[i]));\n }\n return clients;\n}\nfunction getClient(e) {\n return {\n clientX: e.clientX,\n clientY: e.clientY,\n };\n}\nfunction getAverageClient(clients, length) {\n if (length === void 0) { length = clients.length; }\n var sumClient = {\n clientX: 0,\n clientY: 0,\n originalClientX: 0,\n originalClientY: 0,\n };\n var minLength = Math.min(clients.length, length);\n for (var i = 0; i < minLength; ++i) {\n var client = clients[i];\n sumClient.originalClientX += \"originalClientX\" in client ? client.originalClientX : client.clientX;\n sumClient.originalClientY += \"originalClientY\" in client ? client.originalClientY : client.clientY;\n sumClient.clientX += client.clientX;\n sumClient.clientY += client.clientY;\n }\n if (!length) {\n return sumClient;\n }\n return {\n clientX: sumClient.clientX / length,\n clientY: sumClient.clientY / length,\n originalClientX: sumClient.originalClientX / length,\n originalClientY: sumClient.originalClientY / length,\n };\n}\n\nvar ClientStore = /*#__PURE__*/ (function () {\n function ClientStore(clients) {\n this.prevClients = [];\n this.startClients = [];\n this.movement = 0;\n this.length = 0;\n this.startClients = clients;\n this.prevClients = clients;\n this.length = clients.length;\n }\n ClientStore.prototype.getAngle = function (clients) {\n if (clients === void 0) { clients = this.prevClients; }\n return getRotatiion(clients);\n };\n ClientStore.prototype.getRotation = function (clients) {\n if (clients === void 0) { clients = this.prevClients; }\n return getRotatiion(clients) - getRotatiion(this.startClients);\n };\n ClientStore.prototype.getPosition = function (clients, isAdd) {\n if (clients === void 0) { clients = this.prevClients; }\n var position = getPosition(clients || this.prevClients, this.prevClients, this.startClients);\n var deltaX = position.deltaX, deltaY = position.deltaY;\n this.movement += Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n this.prevClients = clients;\n return position;\n };\n ClientStore.prototype.getPositions = function (clients) {\n if (clients === void 0) { clients = this.prevClients; }\n var prevClients = this.prevClients;\n var startClients = this.startClients;\n var minLength = Math.min(this.length, prevClients.length);\n var positions = [];\n for (var i = 0; i < minLength; ++i) {\n positions[i] = getPosition([clients[i]], [prevClients[i]], [startClients[i]]);\n }\n return positions;\n };\n ClientStore.prototype.getMovement = function (clients) {\n var movement = this.movement;\n if (!clients) {\n return movement;\n }\n var currentClient = getAverageClient(clients, this.length);\n var prevClient = getAverageClient(this.prevClients, this.length);\n var deltaX = currentClient.clientX - prevClient.clientX;\n var deltaY = currentClient.clientY - prevClient.clientY;\n return Math.sqrt(deltaX * deltaX + deltaY * deltaY) + movement;\n };\n ClientStore.prototype.getDistance = function (clients) {\n if (clients === void 0) { clients = this.prevClients; }\n return getDist(clients);\n };\n ClientStore.prototype.getScale = function (clients) {\n if (clients === void 0) { clients = this.prevClients; }\n return getDist(clients) / getDist(this.startClients);\n };\n ClientStore.prototype.move = function (deltaX, deltaY) {\n this.startClients.forEach(function (client) {\n client.clientX -= deltaX;\n client.clientY -= deltaY;\n });\n this.prevClients.forEach(function (client) {\n client.clientX -= deltaX;\n client.clientY -= deltaY;\n });\n };\n return ClientStore;\n}());\n\nvar INPUT_TAGNAMES = [\"textarea\", \"input\"];\n/**\n * You can set up drag, pinch events in any browser.\n */\nvar Gesto = /*#__PURE__*/ (function (_super) {\n __extends(Gesto, _super);\n /**\n *\n */\n function Gesto(targets, options) {\n if (options === void 0) { options = {}; }\n var _this = _super.call(this) || this;\n _this.options = {};\n _this.flag = false;\n _this.pinchFlag = false;\n _this.data = {};\n _this.isDrag = false;\n _this.isPinch = false;\n _this.clientStores = [];\n _this.targets = [];\n _this.prevTime = 0;\n _this.doubleFlag = false;\n _this._useMouse = false;\n _this._useTouch = false;\n _this._useDrag = false;\n _this._dragFlag = false;\n _this._isTrusted = false;\n _this._isMouseEvent = false;\n _this._isSecondaryButton = false;\n _this._preventMouseEvent = false;\n _this._prevInputEvent = null;\n _this._isDragAPI = false;\n _this._isIdle = true;\n _this._preventMouseEventId = 0;\n _this._window = window;\n _this.onDragStart = function (e, isTrusted) {\n if (isTrusted === void 0) { isTrusted = true; }\n if (!_this.flag && e.cancelable === false) {\n return;\n }\n var isDragAPI = e.type.indexOf(\"drag\") >= -1;\n if (_this.flag && isDragAPI) {\n return;\n }\n _this._isDragAPI = true;\n var _a = _this.options, container = _a.container, pinchOutside = _a.pinchOutside, preventWheelClick = _a.preventWheelClick, preventRightClick = _a.preventRightClick, preventDefault = _a.preventDefault, checkInput = _a.checkInput, dragFocusedInput = _a.dragFocusedInput, preventClickEventOnDragStart = _a.preventClickEventOnDragStart, preventClickEventOnDrag = _a.preventClickEventOnDrag, preventClickEventByCondition = _a.preventClickEventByCondition;\n var useTouch = _this._useTouch;\n var isDragStart = !_this.flag;\n _this._isSecondaryButton = e.which === 3 || e.button === 2;\n if ((preventWheelClick && (e.which === 2 || e.button === 1))\n || (preventRightClick && (e.which === 3 || e.button === 2))) {\n _this.stop();\n return false;\n }\n if (isDragStart) {\n var activeElement = _this._window.document.activeElement;\n var target = e.target;\n if (target) {\n var tagName = target.tagName.toLowerCase();\n var hasInput = INPUT_TAGNAMES.indexOf(tagName) > -1;\n var hasContentEditable = target.isContentEditable;\n if (hasInput || hasContentEditable) {\n if (checkInput || (!dragFocusedInput && activeElement === target)) {\n // force false or already focused.\n return false;\n }\n // no focus\n if (activeElement && (activeElement === target\n || (hasContentEditable && activeElement.isContentEditable && activeElement.contains(target)))) {\n if (dragFocusedInput) {\n target.blur();\n }\n else {\n return false;\n }\n }\n }\n else if ((preventDefault || e.type === \"touchstart\") && activeElement) {\n var activeTagName = activeElement.tagName.toLowerCase();\n if (activeElement.isContentEditable || INPUT_TAGNAMES.indexOf(activeTagName) > -1) {\n activeElement.blur();\n }\n }\n if (preventClickEventOnDragStart || preventClickEventOnDrag || preventClickEventByCondition) {\n addEvent(_this._window, \"click\", _this._onClick, true);\n }\n }\n _this.clientStores = [new ClientStore(getEventClients(e))];\n _this._isIdle = false;\n _this.flag = true;\n _this.isDrag = false;\n _this._isTrusted = isTrusted;\n _this._dragFlag = true;\n _this._prevInputEvent = e;\n _this.data = {};\n _this.doubleFlag = now() - _this.prevTime < 200;\n _this._isMouseEvent = isMouseEvent(e);\n if (!_this._isMouseEvent && _this._preventMouseEvent) {\n _this._allowMouseEvent();\n }\n var result = _this._preventMouseEvent || _this.emit(\"dragStart\", __assign(__assign({ data: _this.data, datas: _this.data, inputEvent: e, isMouseEvent: _this._isMouseEvent, isSecondaryButton: _this._isSecondaryButton, isTrusted: isTrusted, isDouble: _this.doubleFlag }, _this.getCurrentStore().getPosition()), { preventDefault: function () {\n e.preventDefault();\n }, preventDrag: function () {\n _this._dragFlag = false;\n } }));\n if (result === false) {\n _this.stop();\n }\n if (_this._isMouseEvent && _this.flag && preventDefault) {\n e.preventDefault();\n }\n }\n if (!_this.flag) {\n return false;\n }\n var timer = 0;\n if (isDragStart) {\n _this._attchDragEvent();\n // wait pinch\n if (useTouch && pinchOutside) {\n timer = setTimeout(function () {\n addEvent(container, \"touchstart\", _this.onDragStart, {\n passive: false\n });\n });\n }\n }\n else if (useTouch && pinchOutside) {\n // pinch is occured\n removeEvent(container, \"touchstart\", _this.onDragStart);\n }\n if (_this.flag && isMultiTouch(e)) {\n clearTimeout(timer);\n if (isDragStart && (e.touches.length !== e.changedTouches.length)) {\n return;\n }\n if (!_this.pinchFlag) {\n _this.onPinchStart(e);\n }\n }\n };\n _this.onDrag = function (e, isScroll) {\n if (!_this.flag) {\n return;\n }\n var preventDefault = _this.options.preventDefault;\n if (!_this._isMouseEvent && preventDefault) {\n e.preventDefault();\n }\n _this._prevInputEvent = e;\n var clients = getEventClients(e);\n var result = _this.moveClients(clients, e, false);\n if (_this._dragFlag) {\n if (_this.pinchFlag || result.deltaX || result.deltaY) {\n var dragResult = _this._preventMouseEvent || _this.emit(\"drag\", __assign(__assign({}, result), { isScroll: !!isScroll, inputEvent: e }));\n if (dragResult === false) {\n _this.stop();\n return;\n }\n }\n if (_this.pinchFlag) {\n _this.onPinch(e, clients);\n }\n }\n _this.getCurrentStore().getPosition(clients, true);\n };\n _this.onDragEnd = function (e) {\n if (!_this.flag) {\n return;\n }\n var _a = _this.options, pinchOutside = _a.pinchOutside, container = _a.container, preventClickEventOnDrag = _a.preventClickEventOnDrag, preventClickEventOnDragStart = _a.preventClickEventOnDragStart, preventClickEventByCondition = _a.preventClickEventByCondition;\n var isDrag = _this.isDrag;\n if (preventClickEventOnDrag || preventClickEventOnDragStart || preventClickEventByCondition) {\n requestAnimationFrame(function () {\n _this._allowClickEvent();\n });\n }\n if (!preventClickEventByCondition && !preventClickEventOnDragStart && preventClickEventOnDrag && !isDrag) {\n _this._allowClickEvent();\n }\n if (_this._useTouch && pinchOutside) {\n removeEvent(container, \"touchstart\", _this.onDragStart);\n }\n if (_this.pinchFlag) {\n _this.onPinchEnd(e);\n }\n var clients = (e === null || e === void 0 ? void 0 : e.touches) ? getEventClients(e) : [];\n var clientsLength = clients.length;\n if (clientsLength === 0 || !_this.options.keepDragging) {\n _this.flag = false;\n }\n else {\n _this._addStore(new ClientStore(clients));\n }\n var position = _this._getPosition();\n var currentTime = now();\n var isDouble = !isDrag && _this.doubleFlag;\n _this._prevInputEvent = null;\n _this.prevTime = isDrag || isDouble ? 0 : currentTime;\n if (!_this.flag) {\n _this._dettachDragEvent();\n _this._preventMouseEvent || _this.emit(\"dragEnd\", __assign({ data: _this.data, datas: _this.data, isDouble: isDouble, isDrag: isDrag, isClick: !isDrag, isMouseEvent: _this._isMouseEvent, isSecondaryButton: _this._isSecondaryButton, inputEvent: e, isTrusted: _this._isTrusted }, position));\n _this.clientStores = [];\n if (!_this._isMouseEvent) {\n _this._preventMouseEvent = true;\n // Prevent the problem of touch event and mouse event occurring simultaneously\n clearTimeout(_this._preventMouseEventId);\n _this._preventMouseEventId = setTimeout(function () {\n _this._preventMouseEvent = false;\n }, 200);\n }\n _this._isIdle = true;\n }\n };\n _this.onBlur = function () {\n _this.onDragEnd();\n };\n _this._allowClickEvent = function () {\n removeEvent(_this._window, \"click\", _this._onClick, true);\n };\n _this._onClick = function (e) {\n _this._allowClickEvent();\n _this._allowMouseEvent();\n var preventClickEventByCondition = _this.options.preventClickEventByCondition;\n if (preventClickEventByCondition === null || preventClickEventByCondition === void 0 ? void 0 : preventClickEventByCondition(e)) {\n return;\n }\n e.stopPropagation();\n e.preventDefault();\n };\n _this._onContextMenu = function (e) {\n var options = _this.options;\n if (!options.preventRightClick) {\n e.preventDefault();\n }\n else {\n _this.onDragEnd(e);\n }\n };\n _this._passCallback = function () { };\n var elements = [].concat(targets);\n var firstTarget = elements[0];\n _this._window = isWindow(firstTarget) ? firstTarget : getWindow(firstTarget);\n _this.options = __assign({ checkInput: false, container: firstTarget && !(\"document\" in firstTarget) ? getWindow(firstTarget) : firstTarget, preventRightClick: true, preventWheelClick: true, preventClickEventOnDragStart: false, preventClickEventOnDrag: false, preventClickEventByCondition: null, preventDefault: true, checkWindowBlur: false, keepDragging: false, pinchThreshold: 0, events: [\"touch\", \"mouse\"] }, options);\n var _a = _this.options, container = _a.container, events = _a.events, checkWindowBlur = _a.checkWindowBlur;\n _this._useDrag = events.indexOf(\"drag\") > -1;\n _this._useTouch = events.indexOf(\"touch\") > -1;\n _this._useMouse = events.indexOf(\"mouse\") > -1;\n _this.targets = elements;\n if (_this._useDrag) {\n elements.forEach(function (el) {\n addEvent(el, \"dragstart\", _this.onDragStart);\n });\n }\n if (_this._useMouse) {\n elements.forEach(function (el) {\n addEvent(el, \"mousedown\", _this.onDragStart);\n addEvent(el, \"mousemove\", _this._passCallback);\n });\n addEvent(container, \"contextmenu\", _this._onContextMenu);\n }\n if (checkWindowBlur) {\n addEvent(getWindow(), \"blur\", _this.onBlur);\n }\n if (_this._useTouch) {\n var passive_1 = {\n passive: false,\n };\n elements.forEach(function (el) {\n addEvent(el, \"touchstart\", _this.onDragStart, passive_1);\n addEvent(el, \"touchmove\", _this._passCallback, passive_1);\n });\n }\n return _this;\n }\n /**\n * Stop Gesto's drag events.\n */\n Gesto.prototype.stop = function () {\n this.isDrag = false;\n this.data = {};\n this.clientStores = [];\n this.pinchFlag = false;\n this.doubleFlag = false;\n this.prevTime = 0;\n this.flag = false;\n this._isIdle = true;\n this._allowClickEvent();\n this._dettachDragEvent();\n this._isDragAPI = false;\n };\n /**\n * The total moved distance\n */\n Gesto.prototype.getMovement = function (clients) {\n return this.getCurrentStore().getMovement(clients) + this.clientStores.slice(1).reduce(function (prev, cur) {\n return prev + cur.movement;\n }, 0);\n };\n /**\n * Whether to drag\n */\n Gesto.prototype.isDragging = function () {\n return this.isDrag;\n };\n /**\n * Whether the operation of gesto is finished and is in idle state\n */\n Gesto.prototype.isIdle = function () {\n return this._isIdle;\n };\n /**\n * Whether to start drag\n */\n Gesto.prototype.isFlag = function () {\n return this.flag;\n };\n /**\n * Whether to start pinch\n */\n Gesto.prototype.isPinchFlag = function () {\n return this.pinchFlag;\n };\n /**\n * Whether to start double click\n */\n Gesto.prototype.isDoubleFlag = function () {\n return this.doubleFlag;\n };\n /**\n * Whether to pinch\n */\n Gesto.prototype.isPinching = function () {\n return this.isPinch;\n };\n /**\n * If a scroll event occurs, it is corrected by the scroll distance.\n */\n Gesto.prototype.scrollBy = function (deltaX, deltaY, e, isCallDrag) {\n if (isCallDrag === void 0) { isCallDrag = true; }\n if (!this.flag) {\n return;\n }\n this.clientStores[0].move(deltaX, deltaY);\n isCallDrag && this.onDrag(e, true);\n };\n /**\n * Create a virtual drag event.\n */\n Gesto.prototype.move = function (_a, inputEvent) {\n var deltaX = _a[0], deltaY = _a[1];\n var store = this.getCurrentStore();\n var nextClients = store.prevClients;\n return this.moveClients(nextClients.map(function (_a) {\n var clientX = _a.clientX, clientY = _a.clientY;\n return {\n clientX: clientX + deltaX,\n clientY: clientY + deltaY,\n originalClientX: clientX,\n originalClientY: clientY,\n };\n }), inputEvent, true);\n };\n /**\n * The dragStart event is triggered by an external event.\n */\n Gesto.prototype.triggerDragStart = function (e) {\n this.onDragStart(e, false);\n };\n /**\n * Set the event data while dragging.\n */\n Gesto.prototype.setEventData = function (data) {\n var currentData = this.data;\n for (var name_1 in data) {\n currentData[name_1] = data[name_1];\n }\n return this;\n };\n /**\n * Set the event data while dragging.\n * Use `setEventData`\n * @deprecated\n */\n Gesto.prototype.setEventDatas = function (data) {\n return this.setEventData(data);\n };\n /**\n * Get the current event state while dragging.\n */\n Gesto.prototype.getCurrentEvent = function (inputEvent) {\n if (inputEvent === void 0) { inputEvent = this._prevInputEvent; }\n return __assign(__assign({ data: this.data, datas: this.data }, this._getPosition()), { movement: this.getMovement(), isDrag: this.isDrag, isPinch: this.isPinch, isScroll: false, inputEvent: inputEvent });\n };\n /**\n * Get & Set the event data while dragging.\n */\n Gesto.prototype.getEventData = function () {\n return this.data;\n };\n /**\n * Get & Set the event data while dragging.\n * Use getEventData method\n * @depreacated\n */\n Gesto.prototype.getEventDatas = function () {\n return this.data;\n };\n /**\n * Unset Gesto\n */\n Gesto.prototype.unset = function () {\n var _this = this;\n var targets = this.targets;\n var container = this.options.container;\n this.off();\n removeEvent(this._window, \"blur\", this.onBlur);\n if (this._useDrag) {\n targets.forEach(function (el) {\n removeEvent(el, \"dragstart\", _this.onDragStart);\n });\n }\n if (this._useMouse) {\n targets.forEach(function (target) {\n removeEvent(target, \"mousedown\", _this.onDragStart);\n });\n removeEvent(container, \"contextmenu\", this._onContextMenu);\n }\n if (this._useTouch) {\n targets.forEach(function (target) {\n removeEvent(target, \"touchstart\", _this.onDragStart);\n });\n removeEvent(container, \"touchstart\", this.onDragStart);\n }\n this._prevInputEvent = null;\n this._allowClickEvent();\n this._dettachDragEvent();\n };\n Gesto.prototype.onPinchStart = function (e) {\n var _this = this;\n var pinchThreshold = this.options.pinchThreshold;\n if (this.isDrag && this.getMovement() > pinchThreshold) {\n return;\n }\n var store = new ClientStore(getEventClients(e));\n this.pinchFlag = true;\n this._addStore(store);\n var result = this.emit(\"pinchStart\", __assign(__assign({ data: this.data, datas: this.data, angle: store.getAngle(), touches: this.getCurrentStore().getPositions() }, store.getPosition()), { inputEvent: e, isTrusted: this._isTrusted, preventDefault: function () {\n e.preventDefault();\n }, preventDrag: function () {\n _this._dragFlag = false;\n } }));\n if (result === false) {\n this.pinchFlag = false;\n }\n };\n Gesto.prototype.onPinch = function (e, clients) {\n if (!this.flag || !this.pinchFlag || clients.length < 2) {\n return;\n }\n var store = this.getCurrentStore();\n this.isPinch = true;\n this.emit(\"pinch\", __assign(__assign({ data: this.data, datas: this.data, movement: this.getMovement(clients), angle: store.getAngle(clients), rotation: store.getRotation(clients), touches: store.getPositions(clients), scale: store.getScale(clients), distance: store.getDistance(clients) }, store.getPosition(clients)), { inputEvent: e, isTrusted: this._isTrusted }));\n };\n Gesto.prototype.onPinchEnd = function (e) {\n if (!this.pinchFlag) {\n return;\n }\n var isPinch = this.isPinch;\n this.isPinch = false;\n this.pinchFlag = false;\n var store = this.getCurrentStore();\n this.emit(\"pinchEnd\", __assign(__assign({ data: this.data, datas: this.data, isPinch: isPinch, touches: store.getPositions() }, store.getPosition()), { inputEvent: e }));\n };\n Gesto.prototype.getCurrentStore = function () {\n return this.clientStores[0];\n };\n Gesto.prototype.moveClients = function (clients, inputEvent, isAdd) {\n var position = this._getPosition(clients, isAdd);\n var isPrevDrag = this.isDrag;\n if (position.deltaX || position.deltaY) {\n this.isDrag = true;\n }\n var isFirstDrag = false;\n if (!isPrevDrag && this.isDrag) {\n isFirstDrag = true;\n }\n return __assign(__assign({ data: this.data, datas: this.data }, position), { movement: this.getMovement(clients), isDrag: this.isDrag, isPinch: this.isPinch, isScroll: false, isMouseEvent: this._isMouseEvent, isSecondaryButton: this._isSecondaryButton, inputEvent: inputEvent, isTrusted: this._isTrusted, isFirstDrag: isFirstDrag });\n };\n Gesto.prototype._addStore = function (store) {\n this.clientStores.splice(0, 0, store);\n };\n Gesto.prototype._getPosition = function (clients, isAdd) {\n var store = this.getCurrentStore();\n var position = store.getPosition(clients, isAdd);\n var _a = this.clientStores.slice(1).reduce(function (prev, cur) {\n var storePosition = cur.getPosition();\n prev.distX += storePosition.distX;\n prev.distY += storePosition.distY;\n return prev;\n }, position), distX = _a.distX, distY = _a.distY;\n return __assign(__assign({}, position), { distX: distX, distY: distY });\n };\n Gesto.prototype._attchDragEvent = function () {\n var win = this._window;\n var container = this.options.container;\n var passive = {\n passive: false\n };\n if (this._isDragAPI) {\n addEvent(container, \"dragover\", this.onDrag, passive);\n addEvent(win, \"dragend\", this.onDragEnd);\n }\n if (this._useMouse) {\n addEvent(container, \"mousemove\", this.onDrag);\n addEvent(win, \"mouseup\", this.onDragEnd);\n }\n if (this._useTouch) {\n addEvent(container, \"touchmove\", this.onDrag, passive);\n addEvent(win, \"touchend\", this.onDragEnd, passive);\n addEvent(win, \"touchcancel\", this.onDragEnd, passive);\n }\n };\n Gesto.prototype._dettachDragEvent = function () {\n var win = this._window;\n var container = this.options.container;\n if (this._isDragAPI) {\n removeEvent(container, \"dragover\", this.onDrag);\n removeEvent(win, \"dragend\", this.onDragEnd);\n }\n if (this._useMouse) {\n removeEvent(container, \"mousemove\", this.onDrag);\n removeEvent(win, \"mouseup\", this.onDragEnd);\n }\n if (this._useTouch) {\n removeEvent(container, \"touchstart\", this.onDragStart);\n removeEvent(container, \"touchmove\", this.onDrag);\n removeEvent(win, \"touchend\", this.onDragEnd);\n removeEvent(win, \"touchcancel\", this.onDragEnd);\n }\n };\n Gesto.prototype._allowMouseEvent = function () {\n this._preventMouseEvent = false;\n clearTimeout(this._preventMouseEventId);\n };\n return Gesto;\n}(EventEmitter));\n\nexport { Gesto as default };\n//# sourceMappingURL=gesto.esm.js.map\n","/*\nCopyright (c) 2019 Daybrush\nname: framework-utils\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/framework-utils.git\nversion: 1.1.0\n*/\nfunction prefixNames(prefix) {\n var classNames = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n classNames[_i - 1] = arguments[_i];\n }\n\n return classNames.map(function (className) {\n return className.split(\" \").map(function (name) {\n return name ? \"\" + prefix + name : \"\";\n }).join(\" \");\n }).join(\" \");\n}\nfunction prefixCSS(prefix, css) {\n return css.replace(/([^}{]*){/gm, function (_, selector) {\n return selector.replace(/\\.([^{,\\s\\d.]+)/g, \".\" + prefix + \"$1\") + \"{\";\n });\n}\n/* react */\n\nfunction ref(target, name) {\n return function (e) {\n e && (target[name] = e);\n };\n}\nfunction refs(target, name, i) {\n return function (e) {\n e && (target[name][i] = e);\n };\n}\n/* Class Decorator */\n\nfunction Properties(properties, action) {\n return function (component) {\n var prototype = component.prototype;\n properties.forEach(function (property) {\n action(prototype, property);\n });\n };\n}\n/* Property Decorator */\n\nfunction withMethods(methods, duplicate) {\n if (duplicate === void 0) {\n duplicate = {};\n }\n\n return function (prototype, propertyName) {\n methods.forEach(function (name) {\n var methodName = duplicate[name] || name;\n\n if (methodName in prototype) {\n return;\n }\n\n prototype[methodName] = function () {\n var _a;\n\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var result = (_a = this[propertyName])[name].apply(_a, args);\n\n if (result === this[propertyName]) {\n return this;\n } else {\n return result;\n }\n };\n });\n };\n}\n\nexport { Properties, prefixCSS, prefixNames, ref, refs, withMethods };\n//# sourceMappingURL=utils.esm.js.map\n","/*\nCopyright (c) Daybrush\nname: css-styled\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/css-styled.git\nversion: 1.0.8\n*/\nimport { getDocument, splitComma } from '@daybrush/utils';\n\nfunction hash(str) {\n var hash = 5381,\n i = str.length;\n\n while(i) {\n hash = (hash * 33) ^ str.charCodeAt(--i);\n }\n\n /* JavaScript does bitwise operations (like XOR, above) on 32-bit signed\n * integers. Since we want the results to be always positive, convert the\n * signed int to an unsigned by doing an unsigned bitshift. */\n return hash >>> 0;\n}\n\nvar stringHash = hash;\n\nfunction getHash(str) {\n return stringHash(str).toString(36);\n}\nfunction getShadowRoot(parentElement) {\n if (parentElement && parentElement.getRootNode) {\n var rootNode = parentElement.getRootNode();\n if (rootNode.nodeType === 11) {\n return rootNode;\n }\n }\n return;\n}\nfunction replaceStyle(className, css, options) {\n if (options.original) {\n return css;\n }\n return css.replace(/([^};{\\s}][^};{]*|^\\s*){/mg, function (_, selector) {\n var trimmedSelector = selector.trim();\n return (trimmedSelector ? splitComma(trimmedSelector) : [\"\"]).map(function (subSelector) {\n var trimmedSubSelector = subSelector.trim();\n if (trimmedSubSelector.indexOf(\"@\") === 0) {\n return trimmedSubSelector;\n } else if (trimmedSubSelector.indexOf(\":global\") > -1) {\n return trimmedSubSelector.replace(/\\:global/g, \"\");\n } else if (trimmedSubSelector.indexOf(\":host\") > -1) {\n return \"\".concat(trimmedSubSelector.replace(/\\:host/g, \".\".concat(className)));\n } else if (trimmedSubSelector) {\n return \".\".concat(className, \" \").concat(trimmedSubSelector);\n } else {\n return \".\".concat(className);\n }\n }).join(\", \") + \" {\";\n });\n}\nfunction injectStyle(className, css, options, el, shadowRoot) {\n var doc = getDocument(el);\n var style = doc.createElement(\"style\");\n style.setAttribute(\"type\", \"text/css\");\n style.setAttribute(\"data-styled-id\", className);\n style.setAttribute(\"data-styled-count\", \"1\");\n if (options.nonce) {\n style.setAttribute(\"nonce\", options.nonce);\n }\n style.innerHTML = replaceStyle(className, css, options);\n (shadowRoot || doc.head || doc.body).appendChild(style);\n return style;\n}\n\n/**\n * Create an styled object that can be defined and inserted into the css.\n * @param - css styles\n */\nfunction styled(css) {\n var injectClassName = \"rCS\" + getHash(css);\n return {\n className: injectClassName,\n inject: function (el, options) {\n if (options === void 0) {\n options = {};\n }\n var shadowRoot = getShadowRoot(el);\n var styleElement = (shadowRoot || el.ownerDocument || document).querySelector(\"style[data-styled-id=\\\"\".concat(injectClassName, \"\\\"]\"));\n if (!styleElement) {\n styleElement = injectStyle(injectClassName, css, options, el, shadowRoot);\n } else {\n var count = parseFloat(styleElement.getAttribute(\"data-styled-count\")) || 0;\n styleElement.setAttribute(\"data-styled-count\", \"\".concat(count + 1));\n }\n return {\n destroy: function () {\n var _a;\n var injectCount = parseFloat(styleElement.getAttribute(\"data-styled-count\")) || 0;\n if (injectCount <= 1) {\n if (styleElement.remove) {\n styleElement.remove();\n } else {\n (_a = styleElement.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(styleElement);\n }\n styleElement = null;\n } else {\n styleElement.setAttribute(\"data-styled-count\", \"\".concat(injectCount - 1));\n }\n }\n };\n }\n };\n}\n\nexport default styled;\n//# sourceMappingURL=styled.esm.js.map\n","/*\nCopyright (c) 2015 NAVER Corp.\nname: @egjs/agent\nlicense: MIT\nauthor: NAVER Corp.\nrepository: git+https://github.com/naver/agent.git\nversion: 2.3.0\n*/\nfunction some(arr, callback) {\n var length = arr.length;\n\n for (var i = 0; i < length; ++i) {\n if (callback(arr[i], i)) {\n return true;\n }\n }\n\n return false;\n}\nfunction find(arr, callback) {\n var length = arr.length;\n\n for (var i = 0; i < length; ++i) {\n if (callback(arr[i], i)) {\n return arr[i];\n }\n }\n\n return null;\n}\nfunction getUserAgent(agent) {\n var userAgent = agent;\n\n if (typeof userAgent === \"undefined\") {\n if (typeof navigator === \"undefined\" || !navigator) {\n return \"\";\n }\n\n userAgent = navigator.userAgent || \"\";\n }\n\n return userAgent.toLowerCase();\n}\nfunction execRegExp(pattern, text) {\n try {\n return new RegExp(pattern, \"g\").exec(text);\n } catch (e) {\n return null;\n }\n}\nfunction hasUserAgentData() {\n if (typeof navigator === \"undefined\" || !navigator || !navigator.userAgentData) {\n return false;\n }\n\n var userAgentData = navigator.userAgentData;\n var brands = userAgentData.brands || userAgentData.uaList;\n return !!(brands && brands.length);\n}\nfunction findVersion(versionTest, userAgent) {\n var result = execRegExp(\"(\" + versionTest + \")((?:\\\\/|\\\\s|:)([0-9|\\\\.|_]+))\", userAgent);\n return result ? result[3] : \"\";\n}\nfunction convertVersion(text) {\n return text.replace(/_/g, \".\");\n}\nfunction findPreset(presets, userAgent) {\n var userPreset = null;\n var version = \"-1\";\n some(presets, function (preset) {\n var result = execRegExp(\"(\" + preset.test + \")((?:\\\\/|\\\\s|:)([0-9|\\\\.|_]+))?\", userAgent);\n\n if (!result || preset.brand) {\n return false;\n }\n\n userPreset = preset;\n version = result[3] || \"-1\";\n\n if (preset.versionAlias) {\n version = preset.versionAlias;\n } else if (preset.versionTest) {\n version = findVersion(preset.versionTest.toLowerCase(), userAgent) || version;\n }\n\n version = convertVersion(version);\n return true;\n });\n return {\n preset: userPreset,\n version: version\n };\n}\nfunction findPresetBrand(presets, brands) {\n var brandInfo = {\n brand: \"\",\n version: \"-1\"\n };\n some(presets, function (preset) {\n var result = findBrand(brands, preset);\n\n if (!result) {\n return false;\n }\n\n brandInfo.brand = preset.id;\n brandInfo.version = preset.versionAlias || result.version;\n return brandInfo.version !== \"-1\";\n });\n return brandInfo;\n}\nfunction findBrand(brands, preset) {\n return find(brands, function (_a) {\n var brand = _a.brand;\n return execRegExp(\"\" + preset.test, brand.toLowerCase());\n });\n}\n\nvar BROWSER_PRESETS = [{\n test: \"phantomjs\",\n id: \"phantomjs\"\n}, {\n test: \"whale\",\n id: \"whale\"\n}, {\n test: \"edgios|edge|edg\",\n id: \"edge\"\n}, {\n test: \"msie|trident|windows phone\",\n id: \"ie\",\n versionTest: \"iemobile|msie|rv\"\n}, {\n test: \"miuibrowser\",\n id: \"miui browser\"\n}, {\n test: \"samsungbrowser\",\n id: \"samsung internet\"\n}, {\n test: \"samsung\",\n id: \"samsung internet\",\n versionTest: \"version\"\n}, {\n test: \"chrome|crios\",\n id: \"chrome\"\n}, {\n test: \"firefox|fxios\",\n id: \"firefox\"\n}, {\n test: \"android\",\n id: \"android browser\",\n versionTest: \"version\"\n}, {\n test: \"safari|iphone|ipad|ipod\",\n id: \"safari\",\n versionTest: \"version\"\n}]; // chromium's engine(blink) is based on applewebkit 537.36.\n\nvar CHROMIUM_PRESETS = [{\n test: \"(?=.*applewebkit/(53[0-7]|5[0-2]|[0-4]))(?=.*\\\\schrome)\",\n id: \"chrome\",\n versionTest: \"chrome\"\n}, {\n test: \"chromium\",\n id: \"chrome\"\n}, {\n test: \"whale\",\n id: \"chrome\",\n versionAlias: \"-1\",\n brand: true\n}];\nvar WEBKIT_PRESETS = [{\n test: \"applewebkit\",\n id: \"webkit\",\n versionTest: \"applewebkit|safari\"\n}];\nvar WEBVIEW_PRESETS = [{\n test: \"(?=(iphone|ipad))(?!(.*version))\",\n id: \"webview\"\n}, {\n test: \"(?=(android|iphone|ipad))(?=.*(naver|daum|; wv))\",\n id: \"webview\"\n}, {\n // test webview\n test: \"webview\",\n id: \"webview\"\n}];\nvar OS_PRESETS = [{\n test: \"windows phone\",\n id: \"windows phone\"\n}, {\n test: \"windows 2000\",\n id: \"window\",\n versionAlias: \"5.0\"\n}, {\n test: \"windows nt\",\n id: \"window\"\n}, {\n test: \"iphone|ipad|ipod\",\n id: \"ios\",\n versionTest: \"iphone os|cpu os\"\n}, {\n test: \"mac os x\",\n id: \"mac\"\n}, {\n test: \"android\",\n id: \"android\"\n}, {\n test: \"tizen\",\n id: \"tizen\"\n}, {\n test: \"webos|web0s\",\n id: \"webos\"\n}];\n\nfunction parseUserAgentData(osData) {\n var userAgentData = navigator.userAgentData;\n var brands = (userAgentData.uaList || userAgentData.brands).slice();\n var isMobile = userAgentData.mobile || false;\n var firstBrand = brands[0];\n var browser = {\n name: firstBrand.brand,\n version: firstBrand.version,\n majorVersion: -1,\n webkit: false,\n webkitVersion: \"-1\",\n chromium: false,\n chromiumVersion: \"-1\",\n webview: !!findPresetBrand(WEBVIEW_PRESETS, brands).brand\n };\n var os = {\n name: \"unknown\",\n version: \"-1\",\n majorVersion: -1\n };\n browser.webkit = !browser.chromium && some(WEBKIT_PRESETS, function (preset) {\n return findBrand(brands, preset);\n });\n var chromiumBrand = findPresetBrand(CHROMIUM_PRESETS, brands);\n browser.chromium = !!chromiumBrand.brand;\n browser.chromiumVersion = chromiumBrand.version;\n\n if (!browser.chromium) {\n var webkitBrand = findPresetBrand(WEBKIT_PRESETS, brands);\n browser.webkit = !!webkitBrand.brand;\n browser.webkitVersion = webkitBrand.version;\n }\n\n if (osData) {\n var platform_1 = osData.platform.toLowerCase();\n var result = find(OS_PRESETS, function (preset) {\n return new RegExp(\"\" + preset.test, \"g\").exec(platform_1);\n });\n os.name = result ? result.id : platform_1;\n os.version = osData.platformVersion;\n }\n\n var browserBrand = findPresetBrand(BROWSER_PRESETS, brands);\n\n if (browserBrand.brand) {\n browser.name = browserBrand.brand;\n browser.version = osData ? osData.uaFullVersion : browserBrand.version;\n }\n\n if (navigator.platform === \"Linux armv8l\") {\n os.name = \"android\";\n } else if (browser.webkit) {\n os.name = isMobile ? \"ios\" : \"mac\";\n }\n\n if (os.name === \"ios\" && browser.webview) {\n browser.version = \"-1\";\n }\n\n os.version = convertVersion(os.version);\n browser.version = convertVersion(browser.version);\n os.majorVersion = parseInt(os.version, 10);\n browser.majorVersion = parseInt(browser.version, 10);\n return {\n browser: browser,\n os: os,\n isMobile: isMobile,\n isHints: true\n };\n}\n\nfunction parseUserAgent(userAgent) {\n var nextAgent = getUserAgent(userAgent);\n var isMobile = !!/mobi/g.exec(nextAgent);\n var browser = {\n name: \"unknown\",\n version: \"-1\",\n majorVersion: -1,\n webview: !!findPreset(WEBVIEW_PRESETS, nextAgent).preset,\n chromium: false,\n chromiumVersion: \"-1\",\n webkit: false,\n webkitVersion: \"-1\"\n };\n var os = {\n name: \"unknown\",\n version: \"-1\",\n majorVersion: -1\n };\n\n var _a = findPreset(BROWSER_PRESETS, nextAgent),\n browserPreset = _a.preset,\n browserVersion = _a.version;\n\n var _b = findPreset(OS_PRESETS, nextAgent),\n osPreset = _b.preset,\n osVersion = _b.version;\n\n var chromiumPreset = findPreset(CHROMIUM_PRESETS, nextAgent);\n browser.chromium = !!chromiumPreset.preset;\n browser.chromiumVersion = chromiumPreset.version;\n\n if (!browser.chromium) {\n var webkitPreset = findPreset(WEBKIT_PRESETS, nextAgent);\n browser.webkit = !!webkitPreset.preset;\n browser.webkitVersion = webkitPreset.version;\n }\n\n if (osPreset) {\n os.name = osPreset.id;\n os.version = osVersion;\n os.majorVersion = parseInt(osVersion, 10);\n }\n\n if (browserPreset) {\n browser.name = browserPreset.id;\n browser.version = browserVersion;\n\n if (browser.webview && os.name === \"ios\" && browser.name !== \"safari\") {\n browser.webview = false;\n }\n }\n\n browser.majorVersion = parseInt(browser.version, 10);\n return {\n browser: browser,\n os: os,\n isMobile: isMobile,\n isHints: false\n };\n}\n\n/**\n * @namespace eg.agent\n */\n\n/**\n* Extracts accuate browser and operating system information from the user agent string or client hints.\n* @ko 유저 에이전트 문자열 또는 client hints에서 정확한 브라우저와 운영체제 정보를 추출한다.\n* @function eg.agent#getAccurateAgent\n* @param - Callback function to get the accuate agent <ko>정확한 에이전트를 가져오기 위한 callback 함수</ko>\n* @return - get the accuate agent promise. If Promise are not supported, null is returned. <ko> 정확한 에이전트 promise를 가져온다. Promise를 지원 하지 않는 경우, null을 반환한다. </ko>\n* @example\nimport { getAccurateAgent } from \"@egjs/agent\";\n// eg.agent.getAccurateAgent()\ngetAccurateAgent().then(agent => {\n const { os, browser, isMobile } = agent;\n});\ngetAccurateAgent(agent => {\n const { os, browser, isMobile } = agent;\n});\n*/\n\nfunction getAccurateAgent(callback) {\n if (hasUserAgentData()) {\n return navigator.userAgentData.getHighEntropyValues([\"architecture\", \"model\", \"platform\", \"platformVersion\", \"uaFullVersion\"]).then(function (info) {\n var agentInfo = parseUserAgentData(info);\n callback && callback(agentInfo);\n return agentInfo;\n });\n }\n\n callback && callback(agent());\n\n if (typeof Promise === \"undefined\" || !Promise) {\n return null;\n }\n\n return Promise.resolve(agent());\n}\n/**\n * Extracts browser and operating system information from the user agent string.\n * @ko 유저 에이전트 문자열에서 브라우저와 운영체제 정보를 추출한다.\n * @function eg.agent#agent\n * @param - user agent string to parse <ko>파싱할 유저에이전트 문자열</ko>\n * @return - agent Info <ko> 에이전트 정보 </ko>\n * @example\nimport agent from \"@egjs/agent\";\n// eg.agent();\nconst { os, browser, isMobile } = agent();\n */\n\nfunction agent(userAgent) {\n if (typeof userAgent === \"undefined\" && hasUserAgentData()) {\n return parseUserAgentData();\n } else {\n return parseUserAgent(userAgent);\n }\n}\n\nexport default agent;\nexport { getAccurateAgent };\n//# sourceMappingURL=agent.esm.js.map\n","/*\nCopyright (c) Daybrush\nname: infinite-viewer\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/infinite-viewer.git\nversion: 0.29.1\n*/\nimport EventEmitter from '@scena/event-emitter';\nimport Gesto from 'gesto';\nimport { prefixCSS, Properties } from 'framework-utils';\nimport { getDocument, addClass, getWindow, addEvent, throttle, removeEvent, isNode, isObject, isArray, between, convertUnitSize, isString, camelize } from '@daybrush/utils';\nimport styled from 'css-styled';\nimport getAgent from '@egjs/agent';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n };\n\n return extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nvar __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\nfunction __decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nfunction __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nvar agent = getAgent();\nvar IS_SAFARI = agent.browser.name === \"safari\";\nvar PREFIX = \"infinite-viewer-\";\nvar WRAPPER_CLASS_NAME = \"\".concat(PREFIX, \"wrapper\");\nvar SCROLL_AREA_CLASS_NAME = \"\".concat(PREFIX, \"scroll-area\");\nvar SCROLL_BAR_CLASS_NAME = \"\".concat(PREFIX, \"scroll-bar\");\nvar HORIZONTAL_SCROLL_BAR_CLASS_NAME = \"\".concat(PREFIX, \"horizontal-scroll-bar\");\nvar VERTICAL_SCROLL_BAR_CLASS_NAME = \"\".concat(PREFIX, \"vertical-scroll-bar\");\nvar SCROLL_THUMB_CLASS_NAME = \"\".concat(PREFIX, \"scroll-thumb\");\nvar injector = styled(prefixCSS(PREFIX, \"\\n{\\n position: relative;\\n overscroll-behavior: none;\\n}\\n.wrapper {\\n position: absolute;\\n width: 100%;\\n height: 100%;\\n overflow: auto;\\n scrollbar-width: none;\\n top: 0;\\n left: 0;\\n will-change: scroll-position;\\n}\\n.restrict-wrapper {\\n position: absolute;\\n width: 100%;\\n height: 100%;\\n top: 0;\\n left: 0;\\n}\\n.wrapper::-webkit-scrollbar {\\n display: none;\\n}\\n.scroll-area {\\n position:absolute;\\n top:0;\\n left:0;\\n transform-origin: 0 0;\\n}\\n.scroll-bar {\\n position:absolute;\\n width: 10px;\\n height: 10px;\\n box-sizing: border-box;\\n right: 0;\\n bottom: 0;\\n overflow: hidden;\\n}\\n.horizontal-scroll-bar {\\n width: calc(100% - 20px);\\n right: 10px;\\n height: 14px;\\n}\\n.vertical-scroll-bar {\\n height: calc(100% - 20px);\\n bottom: 10px;\\n width: 14px;\\n}\\n.scroll-thumb {\\n position:relative;\\n opacity: 0.7;\\n background: #333;\\n border-radius: 3px;\\n left: 0px;\\n top: 0px;\\n z-index: 10;\\n width: 6px;\\n height: 6px;\\n transition: all ease 0.2s;\\n opacity: 0;\\n}\\n.scroll-bar:hover .scroll-thumb {\\n border-radius: 5px;\\n opacity: 1;\\n}\\n.horizontal-scroll-bar .scroll-thumb {\\n margin: 4px 0px;\\n transition-property: opacity, margin, height, border-radius;\\n}\\n.vertical-scroll-bar .scroll-thumb {\\n margin: 0px 4px;\\n transition-property: opacity, margin, width, border-radius;\\n}\\n.horizontal-scroll-bar:hover .scroll-thumb {\\n height: 10px;\\n margin: 2px 0px;\\n}\\n.vertical-scroll-bar:hover .scroll-thumb {\\n width: 10px;\\n margin: 0px 2px;\\n}\\n\"));\nvar DEFAULT_OPTIONS = {\n margin: 500,\n threshold: 100,\n zoom: 1,\n zoomX: 1,\n zoomY: 1,\n rangeX: [-Infinity, Infinity],\n rangeY: [-Infinity, Infinity],\n rangeOffsetX: [0, 0],\n rangeOffsetY: [0, 0],\n wrapperElement: null,\n scrollAreaElement: null,\n horizontalScrollElement: null,\n verticalScrollElement: null,\n usePinch: false,\n useAutoZoom: false,\n useMouseDrag: false,\n pinchThreshold: 30,\n cspNonce: \"\",\n maxPinchWheel: Infinity,\n wheelScale: 0.01,\n displayHorizontalScroll: true,\n displayVerticalScroll: true,\n useTransform: true,\n useWheelPinch: true,\n zoomRange: [0.001, Infinity],\n wheelPinchKey: \"ctrl\",\n useWheelScroll: IS_SAFARI,\n zoomOffsetX: \"50%\",\n zoomOffsetY: \"50%\",\n translateZ: 0,\n useGesture: true,\n useResizeObserver: false,\n pinchDirection: \"all\",\n preventWheelClick: true,\n useBounceScrollBar: false,\n useOverflowScroll: false\n};\nvar DEFAULT_EASING = function (x) {\n return 1 - Math.pow(1 - x, 3);\n};\nvar NAMES = {\n horizontal: {\n pos: \"Left\",\n coord: \"X\",\n size: \"Width\"\n },\n vertical: {\n pos: \"Top\",\n coord: \"Y\",\n size: \"Height\"\n }\n};\n/**\n * @memberof InfiniteViewer\n */\n\nvar CLASS_NAME = injector.className;\n/**\n * @memberof InfiniteViewer\n */\n\nvar PROPERTIES = [\"margin\", \"threshold\", \"zoomOffsetX\", \"zoomOffsetY\", \"zoom\", \"zoomX\", \"zoomY\", \"rangeX\", \"rangeY\", \"rangeOffsetX\", \"rangeOffsetY\", \"usePinch\", \"useMouseDrag\", \"pinchThreshold\", \"maxPinchWheel\", \"wheelScale\", \"displayVerticalScroll\", \"displayHorizontalScroll\", \"translateZ\", \"useAutoZoom\", \"wheelPinchKey\", \"zoomRange\", \"zoomRangeX\", \"zoomRangeY\", \"pinchDirection\", \"useOverflowScroll\"];\n/**\n * @memberof InfiniteViewer\n */\n\nvar OPTIONS = __spreadArray(__spreadArray([], PROPERTIES, true), [\"preventWheelClick\", \"useWheelPinch\", \"useWheelScroll\", \"useGesture\", \"cspNonce\", \"wrapperElement\", \"scrollAreaElement\", \"verticalScrollElement\", \"horizontalScrollElement\", \"useResizeObserver\", \"wheelContainer\", \"useBounceScrollBar\"], false);\n/**\n * @memberof InfiniteViewer\n */\n\nvar EVENTS = [\"scroll\", \"abortPinch\", \"dragStart\", \"dragEnd\", \"pinchStart\", \"pinch\"];\n/**\n * @memberof InfiniteViewer\n */\n\nvar METHODS = [\"getScrollLeft\", \"getScrollTop\", \"getScrollWidth\", \"getScrollHeight\", \"getContainerWidth\", \"getContainerHeight\", \"getViewportWidth\", \"getViewportHeight\", \"getViewportScrollWidth\", \"getViewportScrollHeight\", \"scrollTo\", \"scrollBy\", \"zoomBy\", \"scrollCenter\", \"getContainer\", \"getViewport\", \"getWrapper\", \"setZoom\", \"getRangeX\", \"getRangeY\", \"resize\", \"getZoom\", \"getZoomX\", \"getZoomY\", \"getWheelContainer\", \"setTo\", \"setBy\"];\nvar TINY_NUM = 0.000001;\n\nfunction measureSpeed(e) {\n var deltaX = e.deltaX,\n deltaY = e.deltaY,\n datas = e.datas;\n var time = Date.now();\n var prevSpeed = datas.speed;\n\n if (!prevSpeed) {\n datas.speed = [0, 0];\n datas.time = time;\n return;\n }\n\n var dt = time - datas.time;\n datas.speed = [prevSpeed[0] / 2 + deltaX / dt, prevSpeed[1] / 2 + deltaY / dt];\n}\nfunction getDuration(speed, a) {\n var normalSpeed = Math.sqrt(speed[0] * speed[0] + speed[1] * speed[1]);\n return Math.abs(normalSpeed / a);\n}\nfunction getDestPos(speed, a) {\n var duration = getDuration(speed, a);\n return [-speed[0] / 2 * duration, -speed[1] / 2 * duration];\n}\nfunction abs(v) {\n return Math.abs(v);\n}\nfunction getRange(pos, margin, range, threshold, isReal) {\n var min = isReal || isFinite(range[0]) ? range[0] : Math.min(-1, Math.floor(pos / margin)) * margin - threshold;\n var max = isReal || isFinite(range[1]) ? range[1] : Math.max(1, Math.ceil(pos / margin)) * margin + threshold;\n return [min, max];\n}\nfunction checkDefault(value, defaultValue) {\n return value != null ? value : defaultValue;\n}\nfunction startAnimation(callback, timerCallback, options) {\n var duration = options.duration;\n\n var easing = options.easing || function (x) {\n return 1 - Math.pow(1 - x, 3);\n };\n\n var startTime = Date.now();\n var prevTime = startTime;\n\n var next = function () {\n var now = Date.now();\n var t = now - startTime;\n\n if (duration < t) {\n t = duration;\n }\n\n var ratio = easing(t / duration);\n var prevRatio = easing((prevTime - startTime) / duration);\n prevTime = now;\n callback(ratio - prevRatio);\n\n if (t >= duration) {\n return;\n }\n\n timerCallback(next);\n };\n\n timerCallback(next);\n}\n\nvar ScrollBar =\n/*#__PURE__*/\nfunction (_super) {\n __extends(ScrollBar, _super);\n\n function ScrollBar(containerElement, type, container) {\n var _this = _super.call(this) || this;\n\n _this.type = type;\n _this.isAppend = false;\n _this.size = 0;\n _this.scrollSize = 0;\n _this.isHorizontal = false;\n\n _this._onDragStart = function (e) {\n var isHorizontal = _this.isHorizontal;\n var target = e.inputEvent.target;\n var datas = e.datas;\n var isThumb = _this.thumbElement === target;\n\n if (!isThumb) {\n setTimeout(function () {\n requestAnimationFrame(function () {\n var thumbRect = _this.thumbElement.getBoundingClientRect();\n\n var pos1 = thumbRect[isHorizontal ? \"left\" : \"top\"];\n var thumbSize = thumbRect[isHorizontal ? \"width\" : \"height\"];\n var pos2 = pos1 + thumbSize;\n var clientPos = e[isHorizontal ? \"clientX\" : \"clientY\"];\n\n if (pos1 <= clientPos && clientPos <= pos2) {\n return;\n }\n\n var size = _this.size;\n var delta = size * size / _this.scrollSize;\n\n _this.scrollBy(pos1 < clientPos ? delta : -delta);\n });\n }, 100);\n }\n\n datas.isThumb = isThumb;\n e.inputEvent.stopPropagation();\n e.inputEvent.preventDefault();\n };\n\n _this._onDrag = function (e) {\n if (!e.datas.isThumb) {\n return;\n }\n\n _this.scrollBy(_this.isHorizontal ? e.deltaX : e.deltaY);\n };\n\n _this._onWheel = function (e) {\n var delta = _this.isHorizontal ? e.deltaX : e.deltaY;\n\n if (delta) {\n e.preventDefault();\n }\n\n _this.trigger(\"scroll\", {\n delta: delta\n });\n };\n\n var isHorizontal = type === \"horizontal\";\n var doc = getDocument(containerElement);\n var thumbElement;\n var barElement = container;\n\n if (!container) {\n barElement = doc.createElement(\"div\");\n thumbElement = doc.createElement(\"div\");\n barElement.insertBefore(thumbElement, null);\n _this.isAppend = true;\n } else {\n thumbElement = container.querySelector(\".\".concat(SCROLL_THUMB_CLASS_NAME));\n }\n\n addClass(barElement, isHorizontal ? HORIZONTAL_SCROLL_BAR_CLASS_NAME : VERTICAL_SCROLL_BAR_CLASS_NAME);\n addClass(barElement, SCROLL_BAR_CLASS_NAME);\n addClass(thumbElement, SCROLL_THUMB_CLASS_NAME);\n _this.thumbElement = thumbElement;\n _this.barElement = barElement;\n _this.isHorizontal = isHorizontal;\n _this.gesto = new Gesto(barElement, {\n container: getWindow(doc)\n }).on(\"dragStart\", function (e) {\n return _this._onDragStart(e);\n }).on(\"drag\", function (e) {\n return _this._onDrag(e);\n });\n addEvent(_this.barElement, \"wheel\", _this._onWheel, {\n passive: false\n });\n return _this;\n }\n\n var __proto = ScrollBar.prototype;\n\n __proto.scrollBy = function (delta, isAbsolute) {\n var ratio = delta / this.size;\n this.trigger(\"scroll\", {\n delta: isAbsolute ? delta : this.scrollSize * ratio\n });\n };\n\n __proto.render = function (isDisplay, pos, size, scrollSize) {\n this.size = size;\n this.scrollSize = scrollSize;\n var opacity = isDisplay && throttle(scrollSize - size, 0.001) > 0 ? 1 : 0;\n\n var _a = this.isHorizontal ? [\"X\", \"width\"] : [\"Y\", \"height\"],\n dirName1 = _a[0],\n sizeName = _a[1];\n\n var sizeP = size / scrollSize * 100;\n var posP = Math.max(0, pos) / scrollSize * 100;\n this.thumbElement.style.cssText += \"\".concat(sizeName, \": \").concat(sizeP, \"%;opacity: \").concat(opacity, \";\") + \"transform: translate\".concat(dirName1, \"(\").concat(100 / sizeP * posP, \"%)\");\n };\n\n __proto.destroy = function () {\n removeEvent(this.barElement, \"wheel\", this._onWheel);\n this.gesto.off();\n this.off();\n };\n\n return ScrollBar;\n}(EventEmitter);\n\nvar InfiniteViewer =\n/*#__PURE__*/\nfunction (_super) {\n __extends(InfiniteViewer, _super);\n /**\n * @sort 1\n */\n\n\n function InfiniteViewer(_containerElement, viewportElement, options) {\n if (viewportElement === void 0) {\n viewportElement = {};\n }\n\n if (options === void 0) {\n options = {};\n }\n\n var _this = _super.call(this) || this;\n\n _this._containerElement = _containerElement;\n _this.offsetX = 0;\n _this.offsetY = 0;\n _this.containerWidth = 0;\n _this.containerHeight = 0;\n _this.viewportWidth = 0;\n _this.viewportHeight = 0;\n _this.viewportScrollWidth = 0;\n _this.viewportScrollHeight = 0;\n _this.scrollLeft = 0;\n _this.scrollTop = 0;\n _this._scrollTimer = 0;\n _this._zoomTimer = 0;\n _this._viewportElement = null;\n _this._wheelContainerElement = null;\n _this.dragFlag = false;\n _this.isLoop = false;\n _this._tempScale = [1, 1];\n _this._tempRect = null;\n _this._tempRectTimer = null;\n _this._onDestroys = [];\n _this._asLeft = 0;\n _this._asTop = 0;\n /**\n * Update Viewer Sizes\n * @method\n */\n\n _this.resize = function () {\n var _a = _this._containerElement,\n containerWidth = _a.offsetWidth,\n containerHeight = _a.offsetHeight;\n var _b = _this._viewportElement,\n viewportWidth = _b.offsetWidth,\n viewportHeight = _b.offsetHeight,\n viewportScrollWidth = _b.scrollWidth,\n viewportScrollHeight = _b.scrollHeight;\n _this.containerWidth = containerWidth;\n _this.containerHeight = containerHeight;\n _this.viewportWidth = viewportWidth;\n _this.viewportHeight = viewportHeight;\n _this.viewportScrollWidth = Math.max(viewportWidth, viewportScrollWidth);\n _this.viewportScrollHeight = Math.max(viewportHeight, viewportScrollHeight);\n\n _this.render();\n\n _this._scrollBy(0, 0);\n };\n\n _this._onScroll = function () {\n var _a = _this.wrapperElement,\n scrollLeft = _a.scrollLeft,\n scrollTop = _a.scrollTop;\n var _b = _this.zoom,\n zoom = _b === void 0 ? DEFAULT_OPTIONS.zoom : _b;\n var deltaX = scrollLeft - _this.scrollLeft;\n var deltaY = scrollTop - _this.scrollTop;\n\n var viewerScrollLeft = _this.getScrollLeft();\n\n var viewerScrollTop = _this.getScrollTop();\n\n if (_this.isLoop) {\n _this.isLoop = false;\n }\n\n _this.scrollLeft = scrollLeft;\n _this.scrollTop = scrollTop;\n\n _this.scrollTo(viewerScrollLeft + deltaX / zoom, viewerScrollTop + deltaY / zoom);\n };\n\n _this.onWheel = function (e) {\n var options = _this.options;\n var pinchDirection = options.pinchDirection;\n var maxPinchWheel = options.maxPinchWheel || Infinity;\n var isKeydown = e[\"\".concat(_this.wheelPinchKey, \"Key\")] || e.ctrlKey;\n\n if (options.useWheelPinch && isKeydown) {\n var deltaY = e.deltaY;\n var sign = deltaY >= 0 ? 1 : -1;\n var distance = Math.min(maxPinchWheel, Math.abs(deltaY));\n deltaY = sign * distance;\n var delta = -deltaY;\n var scale = Math.max(1 + delta * (options.wheelScale || 0.01), TINY_NUM);\n clearTimeout(_this._tempRectTimer);\n _this._tempRectTimer = window.setTimeout(function () {\n _this._tempRect = null;\n }, 100);\n\n _this._triggerPinch({\n distance: distance,\n scale: scale,\n rotation: 0,\n zoom: _this.zoom * scale,\n zoomX: _this.zoomX * (pinchDirection === \"vertical\" ? 1 : scale),\n zoomY: _this.zoomY * (pinchDirection === \"horizontal\" ? 1 : scale),\n inputEvent: e,\n isWheel: true,\n clientX: e.clientX,\n clientY: e.clientY,\n ratioX: 0,\n ratioY: 0\n });\n } else if (options.useWheelScroll) {\n var deltaX = e.deltaX;\n var deltaY = e.deltaY;\n\n if (e.shiftKey && !deltaX) {\n deltaX = deltaY;\n deltaY = 0;\n }\n\n _this.scrollBy(deltaX / _this.zoomX, deltaY / _this.zoomY);\n } else {\n return;\n }\n\n e.preventDefault();\n };\n\n _this.onGestureStart = function (e) {\n _this._tempScale = [_this.zoomX, _this.zoomY];\n\n _this._setClientRect();\n\n e.preventDefault();\n };\n\n _this.onGestureChange = function (e) {\n e.preventDefault();\n\n if (_this.gesto.isFlag() || !_this._tempScale) {\n _this._tempScale = [1, 1];\n return;\n }\n\n var scale = e.scale;\n var zoomX = _this._tempScale[0];\n var zoomY = _this._tempScale[1];\n var pinchDirection = _this.options.pinchDirection;\n\n _this._triggerPinch({\n distance: 0,\n scale: scale,\n rotation: e.rotation,\n inputEvent: e,\n isWheel: true,\n zoom: (zoomX + zoomY) * scale / 2,\n zoomX: zoomX * (pinchDirection === \"vertical\" ? 1 : scale),\n zoomY: zoomY * (pinchDirection === \"horizontal\" ? 1 : scale),\n clientX: e.clientX,\n clientY: e.clientY,\n ratioX: 0,\n ratioY: 0\n });\n };\n\n _this.onGestureEnd = function () {};\n\n if (isNode(viewportElement)) {\n _this._viewportElement = viewportElement;\n _this.options = __assign(__assign({}, DEFAULT_OPTIONS), options);\n } else {\n _this._viewportElement = _containerElement.children[0];\n _this.options = __assign(__assign({}, DEFAULT_OPTIONS), viewportElement);\n }\n\n _this.init();\n\n return _this;\n }\n /**\n * Get Container Element\n */\n\n\n var __proto = InfiniteViewer.prototype;\n\n __proto.getContainer = function () {\n return this._containerElement;\n };\n /**\n * Get Wheel Container Element\n */\n\n\n __proto.getWheelContainer = function () {\n return this._wheelContainerElement;\n };\n /**\n * Get Viewport Element\n */\n\n\n __proto.getViewport = function () {\n return this._viewportElement;\n };\n /**\n * Get Wrapper Element\n */\n\n\n __proto.getWrapper = function () {\n return this.wrapperElement;\n };\n /**\n * Get Scroll Area Element\n */\n\n\n __proto.geScrollArea = function () {\n return this.scrollAreaElement;\n };\n /**\n * Destroy elements, properties, and events.\n */\n\n\n __proto.destroy = function () {\n this.off();\n this.gesto.unset();\n this.verticalScrollbar.destroy();\n this.horizontalScrollbar.destroy();\n this.injectResult.destroy();\n var containerElement = this._containerElement;\n\n this._onDestroys.forEach(function (callback) {\n callback();\n });\n\n removeEvent(this.wrapperElement, \"scroll\", this._onScroll);\n removeEvent(this._wheelContainerElement, \"wheel\", this.onWheel);\n removeEvent(containerElement, \"gesturestart\", this.onGestureStart);\n removeEvent(containerElement, \"gesturechange\", this.onGestureChange);\n removeEvent(containerElement, \"gesturesend\", this.onGestureEnd);\n this.gesto = null;\n this.injectResult = null;\n this._containerElement = null;\n this._viewportElement = null;\n this.options = null;\n };\n /**\n * Gets the number of pixels that an element's content is scrolled vertically.\n */\n\n\n __proto.getScrollTop = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n var range = false;\n var absolute = false;\n\n if (isObject(options)) {\n range = options.range;\n absolute = options.absolute;\n } else {\n range = options;\n }\n\n var zoom = this.zoomY;\n var pos = this.scrollTop / zoom + this.offsetY + (range ? abs(this.getRangeY()[0]) : 0);\n return absolute ? pos * zoom : pos;\n };\n /**\n * Gets the number of pixels that an element's content is scrolled vertically.\n */\n\n\n __proto.getScrollLeft = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n var range = false;\n var absolute = false;\n\n if (isObject(options)) {\n range = options.range;\n absolute = options.absolute;\n } else {\n range = options;\n }\n\n var zoom = this.zoomX;\n var pos = this.scrollLeft / zoom + this.offsetX + (range ? abs(this.getRangeX()[0]) : 0);\n return absolute ? pos * zoom : pos;\n };\n /**\n * Gets measurement of the width of an element's content with overflow\n */\n\n\n __proto.getScrollWidth = function (isZoom) {\n var range = this._getScrollRangeX();\n\n var zoom = this.zoomX;\n var size = this.containerWidth / zoom + abs(range[0]) + range[1];\n return isZoom ? size : size * zoom;\n };\n /**\n * Gets measurement of the height of an element's content with overflow\n */\n\n\n __proto.getScrollHeight = function (isZoom) {\n var range = this._getScrollRangeY();\n\n var zoom = this.zoomY;\n var size = this.containerHeight / zoom + abs(range[0]) + range[1];\n return isZoom ? size : size * zoom;\n };\n /**\n * Scroll the element to the center\n */\n\n\n __proto.scrollCenter = function (options) {\n if (options === void 0) {\n options = {};\n }\n\n this.resize();\n var zoomX = this.zoomX;\n var zoomY = this.zoomY;\n var left = -(this.containerWidth / zoomX - this.viewportWidth) / 2;\n var top = -(this.containerHeight / zoomY - this.viewportHeight) / 2;\n\n if (options.absolute) {\n left *= zoomX;\n top *= zoomY;\n }\n\n if (options.horizontal === false) {\n left = this.getScrollLeft();\n }\n\n if (options.vertical === false) {\n top = this.getScrollTop();\n }\n\n return this.scrollTo(left, top, options);\n };\n /**\n * Move to that position or zoom.\n * @since 0.25.0\n */\n\n\n __proto.setTo = function (options) {\n var _a = options.x,\n x = _a === void 0 ? this.getScrollLeft() : _a,\n _b = options.y,\n y = _b === void 0 ? this.getScrollTop() : _b,\n _c = options.zoom,\n zoom = _c === void 0 ? [this.getZoomX(), this.getZoomY()] : _c,\n duration = options.duration;\n\n var _d = this,\n prevZoomX = _d.zoomX,\n prevZoomY = _d.zoomY,\n zoomRange = _d.zoomRange;\n\n var _e = this,\n _f = _e.zoomOffsetX,\n zoomOffsetX = _f === void 0 ? DEFAULT_OPTIONS.zoomOffsetX : _f,\n _g = _e.zoomOffsetY,\n zoomOffsetY = _g === void 0 ? DEFAULT_OPTIONS.zoomOffsetY : _g;\n\n if (\"zoomOffsetX\" in options) {\n zoomOffsetX = options.zoomOffsetX;\n }\n\n if (\"zoomOffsetY\" in options) {\n zoomOffsetY = options.zoomOffsetY;\n }\n\n var _h = isArray(zoom) ? zoom : [zoom, zoom],\n zoomX = _h[0],\n zoomY = _h[1];\n\n var zoomRangeX = this.zoomRangeX || zoomRange;\n var zoomRangeY = this.zoomRangeY || zoomRange;\n var nextZoomX = between(zoomX, zoomRangeX[0], zoomRangeX[1]);\n var nextZoomY = between(zoomY, zoomRangeY[0], zoomRangeY[1]);\n var zoomXPos = convertUnitSize(\"\".concat(zoomOffsetX), this.viewportWidth) * (1 / prevZoomX - 1 / nextZoomX);\n var zoomYPos = convertUnitSize(\"\".concat(zoomOffsetY), this.viewportHeight) * (1 / prevZoomY - 1 / nextZoomY);\n this.scrollTo(x - zoomXPos, y - zoomYPos, {\n duration: duration\n });\n this.setZoom(zoom, {\n zoomOffsetX: zoomOffsetX,\n zoomOffsetY: zoomOffsetY,\n duration: duration,\n zoomBase: \"fixed\"\n });\n };\n /**\n * Move by the position or zoom delta value.\n * @since 0.25.0\n */\n\n\n __proto.setBy = function (options) {\n var _a = options.x,\n x = _a === void 0 ? 0 : _a,\n _b = options.y,\n y = _b === void 0 ? 0 : _b,\n _c = options.zoom,\n zoom = _c === void 0 ? [0, 0] : _c;\n\n var _d = isArray(zoom) ? zoom : [zoom, zoom],\n zoomX = _d[0],\n zoomY = _d[1];\n\n this.setTo(__assign(__assign({}, options), {\n x: this.getScrollLeft() + x,\n y: this.getScrollTop() + y,\n zoom: [this.zoomX + zoomX, this.zoomY + zoomY]\n }));\n };\n /**\n * Scrolls the container by the given amount.\n */\n\n\n __proto.scrollBy = function (deltaX, deltaY, options) {\n this._pauseScrollAnimation();\n\n if (!options || !options.duration) {\n var scrollLeft = this.getScrollLeft();\n var scrollTop = this.getScrollTop();\n\n if (options === null || options === void 0 ? void 0 : options.absolute) {\n scrollLeft *= this.zoomX;\n scrollTop *= this.zoomY;\n }\n\n return this._scrollTo(scrollLeft + deltaX, scrollTop + deltaY, options);\n } else {\n this._startScrollAnimation([deltaX, deltaY], options);\n\n return true;\n }\n };\n /**\n * Scrolls the container to set of coordinates.\n * @param scrollLeft\n * @param scrollTop\n */\n\n\n __proto.scrollTo = function (x, y, options) {\n this._pauseScrollAnimation();\n\n if (!options || !options.duration) {\n return this._scrollTo(x, y, options);\n } else {\n var scrollLeft = this.getScrollLeft();\n var scrollTop = this.getScrollTop();\n\n if (options === null || options === void 0 ? void 0 : options.absolute) {\n scrollLeft *= this.zoomX;\n scrollTop *= this.zoomY;\n }\n\n return this.scrollBy(x - scrollLeft, y - scrollTop, options);\n }\n };\n /**\n * Set viewer zoom by the given amount\n */\n\n\n __proto.zoomBy = function (deltaZoom, options) {\n this._pauseZoomAnimation();\n\n var _a = isArray(deltaZoom) ? deltaZoom : [deltaZoom, deltaZoom],\n deltaX = _a[0],\n deltaY = _a[1];\n\n if (!options || !options.duration) {\n this._setZoom([this.zoomX + deltaX, this.zoomY + deltaY], options);\n } else {\n this._startZoomAnimation([deltaX, deltaY], options);\n }\n };\n /**\n * Set viewer zoom\n */\n\n\n __proto.setZoom = function (zoom, options) {\n this._pauseZoomAnimation();\n\n if (!options || !options.duration) {\n this._setZoom(zoom, options);\n } else {\n var _a = isArray(zoom) ? zoom : [zoom, zoom],\n zoomX = _a[0],\n zoomY = _a[1];\n\n this._startZoomAnimation([zoomX - this.zoomX, zoomY - this.zoomY], options);\n }\n };\n\n __proto.getViewportWidth = function () {\n return this.viewportWidth;\n };\n\n __proto.getViewportHeight = function () {\n return this.viewportWidth;\n };\n\n __proto.getViewportScrollWidth = function () {\n return this.viewportScrollWidth;\n };\n\n __proto.getViewportScrollHeight = function () {\n return this.viewportScrollHeight;\n };\n\n __proto.getContainerWidth = function () {\n return this.containerWidth;\n };\n\n __proto.getContainerHeight = function () {\n return this.containerHeight;\n };\n /**\n * Get viewer zoom\n */\n\n\n __proto.getZoom = function () {\n return (this.zoomX + this.zoomY) / 2;\n };\n /**\n * Get viewer zoomX\n * @since 0.20.0\n */\n\n\n __proto.getZoomX = function () {\n return this.zoomX;\n };\n /**\n * Get viewer zoom\n * @since 0.20.0\n */\n\n\n __proto.getZoomY = function () {\n return this.zoomY;\n };\n /**\n * get x ranges\n */\n\n\n __proto.getRangeX = function (isZoom, isReal) {\n return this._getRangeCoord(\"horizontal\", isZoom, isReal);\n };\n /**\n * get y ranges\n */\n\n\n __proto.getRangeY = function (isZoom, isReal) {\n return this._getRangeCoord(\"vertical\", isZoom, isReal);\n };\n\n __proto.init = function () {\n var _this = this;\n\n var _a; // infinite-viewer(container)\n // viewportㅌ\n // children\n\n\n var containerElement = this._containerElement;\n var options = this.options;\n var doc = getDocument(containerElement);\n var win = getWindow(containerElement); // vanilla\n\n var wrapperElement = options.wrapperElement || containerElement.querySelector(\".\".concat(WRAPPER_CLASS_NAME));\n var scrollAreaElement = options.scrollAreaElement || containerElement.querySelector(\".\".concat(SCROLL_AREA_CLASS_NAME));\n var horizontalScrollElement = options.horizontalScrollElement || containerElement.querySelector(\".\".concat(HORIZONTAL_SCROLL_BAR_CLASS_NAME));\n var verticalScrollElement = options.verticalScrollElement || containerElement.querySelector(\".\".concat(VERTICAL_SCROLL_BAR_CLASS_NAME));\n\n if (!wrapperElement) {\n wrapperElement = doc.createElement(\"div\");\n wrapperElement.insertBefore(this._viewportElement, null);\n containerElement.insertBefore(wrapperElement, null);\n }\n\n this.wrapperElement = wrapperElement;\n\n if (!scrollAreaElement) {\n scrollAreaElement = doc.createElement(\"div\");\n wrapperElement.insertBefore(scrollAreaElement, wrapperElement.firstChild);\n }\n\n this.scrollAreaElement = scrollAreaElement;\n addClass(containerElement, CLASS_NAME);\n addClass(wrapperElement, WRAPPER_CLASS_NAME); // addClass(restrictElement, RESTRICT_WRAPPER_CLASS_NAME);\n\n addClass(scrollAreaElement, SCROLL_AREA_CLASS_NAME);\n var horizontalBar = new ScrollBar(containerElement, \"horizontal\", horizontalScrollElement);\n var verticalBar = new ScrollBar(containerElement, \"vertical\", verticalScrollElement);\n this.horizontalScrollbar = horizontalBar;\n this.verticalScrollbar = verticalBar;\n horizontalBar.on(\"scroll\", function (e) {\n _this.scrollBy(e.delta / _this.zoomX, 0);\n });\n verticalBar.on(\"scroll\", function (e) {\n _this.scrollBy(0, e.delta / _this.zoomY);\n });\n\n if (horizontalBar.isAppend) {\n containerElement.insertBefore(horizontalBar.barElement, null);\n }\n\n if (verticalBar.isAppend) {\n containerElement.insertBefore(verticalBar.barElement, null);\n }\n\n this.injectResult = injector.inject(containerElement, {\n nonce: this.options.cspNonce\n });\n var wheelContainerOption = options.wheelContainer;\n var wheelContainerElement = null;\n\n if (wheelContainerOption) {\n if (isString(wheelContainerOption)) {\n wheelContainerElement = doc.querySelector(wheelContainerOption);\n } else if (isNode(wheelContainerOption)) {\n wheelContainerElement = wheelContainerOption;\n } else if (\"value\" in wheelContainerOption || \"current\" in wheelContainerOption) {\n wheelContainerElement = wheelContainerOption.current || wheelContainerOption.value;\n }\n }\n\n wheelContainerElement || (wheelContainerElement = containerElement);\n this._wheelContainerElement = wheelContainerElement;\n /**\n * the `dragStart` event fires when `touchstart` does occur.\n * @memberof InfiniteViewer\n * @event dragStart\n * @param {InfiniteViewer.OnDragStart} - Parameters for the `dragStart` event\n * @example\n * import InfiniteViewer from \"infinite-viewer\";\n *\n * const viewer = new InfiniteViewer(\n * document.querySelector(\".container\"),\n * document.querySelector(\".viewport\"),\n * ).on(\"dragStart\", e => {\n * console.log(e.inputEvent);\n * });\n */\n\n /**\n * the `drag` event fires when `touch` does occur.\n * @memberof InfiniteViewer\n * @event drag\n * @param {InfiniteViewer.OnDrag} - Parameters for the `drag` event\n * @example\n * import InfiniteViewer from \"infinite-viewer\";\n *\n * const viewer = new InfiniteViewer(\n * document.querySelector(\".container\"),\n * document.querySelector(\".viewport\"),\n * ).on(\"drag\", e => {\n * console.log(e.inputEvent);\n * });\n */\n\n /**\n * the `dragEnd` event fires when `touchend` does occur.\n * @memberof InfiniteViewer\n * @event dragEnd\n * @param {InfiniteViewer.OnDragEnd} - Parameters for the `dragEnd` event\n * @example\n * import InfiniteViewer from \"infinite-viewer\";\n *\n * const viewer = new InfiniteViewer(\n * document.querySelector(\".container\"),\n * document.querySelector(\".viewport\"),\n * ).on(\"dragEnd\", e => {\n * console.log(e.inputEvent);\n * });\n */\n\n /**\n * the `abortPinch` event fires when `pinch` event does not occur by dragging a certain area.\n * @memberof InfiniteViewer\n * @event abortPinch\n * @param {InfiniteViewer.OnAbortPinch} - Parameters for the abortPinch event\n * @example\n * import InfiniteViewer from \"infinite-viewer\";\n *\n * const viewer = new InfiniteViewer(\n * document.querySelector(\".container\"),\n * document.querySelector(\".viewport\"),\n * {\n * usePinch: true,\n * }\n * ).on(\"abortPinch\", e => {\n * console.log(e.inputEvent);\n * });\n */\n\n /**\n * the `pinch` event fires when two points pinch the viewer\n * The pinchStart and abortPinch events do not occur when pinching through the wheel.\n * @memberof InfiniteViewer\n * @event pinch\n * @param {InfiniteViewer.OnPinch} - Parameters for the `pinch` event\n * @example\n * import InfiniteViewer from \"infinite-viewer\";\n *\n * const viewer = new InfiniteViewer(\n * document.querySelector(\".container\"),\n * document.querySelector(\".viewport\"),\n * {\n * usePinch: true,\n * }\n * ).on(\"pinch\", e => {\n * console.log(e.zoom, e.inputEvent);\n * });\n */\n\n this.gesto = new Gesto(containerElement, {\n container: getWindow(containerElement),\n events: [\"touch\", \"mouse\"],\n preventWheelClick: (_a = this.options.preventWheelClick) !== null && _a !== void 0 ? _a : true\n }).on(\"dragStart\", function (e) {\n var inputEvent = e.inputEvent,\n stop = e.stop,\n datas = e.datas;\n\n if (!_this.useMouseDrag && e.isMouseEvent) {\n stop();\n return;\n }\n\n _this._pauseScrollAnimation();\n\n _this.dragFlag = false;\n\n var result = _this.trigger(\"dragStart\", e);\n\n if (result === false) {\n stop();\n return;\n }\n\n inputEvent.preventDefault();\n datas.startEvent = inputEvent;\n }).on(\"drag\", function (e) {\n if (!_this.options.usePinch || e.isPinch || _this.useMouseDrag && e.isMouseEvent) {\n _this.trigger(\"drag\", __assign(__assign({}, e), {\n inputEvent: e.inputEvent\n }));\n\n measureSpeed(e);\n\n _this.scrollBy(-e.deltaX / _this.zoomX, -e.deltaY / _this.zoomY);\n } else if (!_this.dragFlag && e.movement > options.pinchThreshold) {\n _this.dragFlag = true;\n\n _this.trigger(\"abortPinch\", {\n inputEvent: e.datas.startEvent || e.inputEvent\n });\n }\n }).on(\"dragEnd\", function (e) {\n _this.trigger(\"dragEnd\", {\n isDrag: e.isDrag,\n isDouble: e.isDouble,\n inputEvent: e.inputEvent\n });\n\n _this._startScrollAnimationBySpeed(e.datas.speed);\n }).on(\"pinchStart\", function (_a) {\n var inputEvent = _a.inputEvent,\n datas = _a.datas,\n stop = _a.stop;\n inputEvent.preventDefault();\n\n _this._pauseScrollAnimation();\n\n datas.startZoom = [_this.zoomX, _this.zoomY];\n\n var result = _this.trigger(\"pinchStart\", {\n inputEvent: inputEvent\n });\n\n if (result === false) {\n stop();\n }\n\n _this._setClientRect();\n }).on(\"pinch\", function (e) {\n var scale = e.scale;\n var pinchDirection = _this.options.pinchDirection;\n\n _this._triggerPinch({\n rotation: e.rotation,\n distance: e.distance,\n scale: e.scale,\n inputEvent: e.inputEvent,\n isWheel: false,\n zoom: e.datas.startZoom * scale,\n zoomX: _this.zoomX * (pinchDirection === \"vertical\" ? 1 : scale),\n zoomY: _this.zoomY * (pinchDirection === \"horizontal\" ? 1 : scale),\n clientX: e.clientX,\n clientY: e.clientY,\n ratioX: 0,\n ratioY: 0\n });\n }).on(\"pinchEnd\", function () {\n _this._tempRect = null;\n });\n addEvent(wrapperElement, \"scroll\", this._onScroll);\n\n if (options.useResizeObserver) {\n var observer_1 = new win.ResizeObserver(function () {\n _this.resize();\n });\n observer_1.observe(this._viewportElement);\n observer_1.observe(this._containerElement);\n\n this._onDestroys.push(function () {\n observer_1.disconnect();\n });\n } else {\n addEvent(win, \"resize\", this.resize);\n\n this._onDestroys.push(function () {\n removeEvent(win, \"resize\", _this.resize);\n });\n }\n\n if (options.useWheelPinch || options.useWheelScroll) {\n addEvent(wheelContainerElement, \"wheel\", this.onWheel, {\n passive: false\n });\n }\n\n if (options.useGesture) {\n addEvent(containerElement, \"gesturestart\", this.onGestureStart, {\n passive: false\n });\n addEvent(containerElement, \"gesturechange\", this.onGestureChange, {\n passive: false\n });\n }\n\n this.resize();\n };\n\n __proto.render = function () {\n var _a = this,\n offsetX = _a.offsetX,\n offsetY = _a.offsetY,\n _b = _a.zoomX,\n zoomX = _b === void 0 ? DEFAULT_OPTIONS.zoomX : _b,\n _c = _a.zoomY,\n zoomY = _c === void 0 ? DEFAULT_OPTIONS.zoomY : _c,\n _d = _a.translateZ,\n translateZ = _d === void 0 ? 0 : _d,\n rangeX = _a.rangeX,\n rangeY = _a.rangeY,\n containerWidth = _a.containerWidth,\n containerHeight = _a.containerHeight;\n\n var _e = this.options.useTransform,\n useTransform = _e === void 0 ? DEFAULT_OPTIONS.useTransform : _e;\n var nextOffsetX = -offsetX * zoomX;\n var nextOffsetY = -offsetY * zoomY;\n this.scrollAreaElement.style.cssText = \"width:calc(100% + \".concat(this.getScrollAreaWidth(), \"px);\") + \"height:calc(100% + \".concat(this.getScrollAreaHeight(), \"px);\");\n var viewportStyle = this._viewportElement.style;\n\n if (useTransform === false) {\n viewportStyle.cssText += \"position: relative; left: \".concat(nextOffsetX, \"px; top: \").concat(nextOffsetY, \"px; \"); // if (restrictOffsetX || restrictOffsetY) {\n // viewportStyle.cssText += `position: relative; left: ${restrictOffsetX}px; top: ${restrictOffsetY}px`;\n // }\n } else {\n viewportStyle.cssText += \"transform-origin: 0 0;\" + \"transform:translate3d(\".concat(nextOffsetX, \"px, \").concat(nextOffsetY, \"px, \").concat(translateZ, \"px) scale(\").concat(zoomX, \", \").concat(zoomY, \");\"); // if (restrictOffsetX || restrictOffsetY) {\n // viewportStyle.cssText += `transform:translate3d(${restrictOffsetX}px, ${restrictOffsetY}px, 0px)`;\n // }\n }\n\n this.renderScroll();\n };\n\n __proto.renderScroll = function () {\n var _a = this,\n zoomX = _a.zoomX,\n zoomY = _a.zoomY,\n containerWidth = _a.containerWidth,\n containerHeight = _a.containerHeight;\n\n var horizontalBar = this.horizontalScrollbar;\n var verticalBar = this.verticalScrollbar;\n\n if (this.options.useBounceScrollBar) {\n var scrollLeft = this.getScrollLeft(true) * zoomX;\n var rangeX = this.getRangeX(true);\n var scrollWidth = containerWidth + abs(rangeX[0]) + abs(rangeX[1]);\n var scrollTop = this.getScrollTop(true) * zoomY;\n var rangeY = this.getRangeY(true);\n var scrollHeight = containerHeight + abs(rangeY[0]) + abs(rangeY[1]);\n horizontalBar.render(this.displayHorizontalScroll, scrollLeft, containerWidth, scrollWidth);\n verticalBar.render(this.displayVerticalScroll, scrollTop, containerHeight, scrollHeight);\n } else {\n var scrollRangeX = this._getScrollRangeX();\n\n var scrollRangeY = this._getScrollRangeY();\n\n var scrollLeft = this.getScrollLeft();\n var scrollTop = this.getScrollTop();\n var scrollWidth = this.containerWidth + abs(scrollRangeX[0]) + scrollRangeX[1];\n var scrollHeight = this.containerHeight + abs(scrollRangeY[0]) + scrollRangeY[1];\n horizontalBar.render(this.displayHorizontalScroll, scrollLeft - scrollRangeX[0], containerWidth, scrollWidth);\n verticalBar.render(this.displayVerticalScroll, scrollTop - scrollRangeY[0], containerHeight, scrollHeight);\n }\n };\n\n __proto.move = function (scrollLeft, scrollTop) {\n var wrapperElement = this.wrapperElement;\n wrapperElement.scrollLeft = scrollLeft;\n wrapperElement.scrollTop = scrollTop;\n };\n\n __proto.setDisplayVerticalScroll = function (displayVerticalScroll) {\n this.options.displayVerticalScroll = displayVerticalScroll;\n this.renderScroll();\n };\n\n __proto.setDisplayHorizontalScroll = function (displayHorizontalScroll) {\n this.options.displayHorizontalScroll = displayHorizontalScroll;\n this.renderScroll();\n };\n\n __proto._startZoomAnimation = function (dest, options) {\n var _this = this;\n\n if (!dest) {\n return;\n }\n\n var duration = options.duration;\n var easing = options.easing || DEFAULT_EASING;\n startAnimation(function (distRatio) {\n return _this._setZoom([_this.zoomX + dest[0] * distRatio, _this.zoomY + dest[1] * distRatio], options);\n }, function (next) {\n _this._zoomTimer = requestAnimationFrame(next);\n }, {\n easing: easing,\n duration: duration\n });\n };\n\n __proto._startScrollAnimation = function (dest, options) {\n var _this = this;\n\n if (!dest[0] && !dest[1]) {\n return;\n }\n\n var duration = options.duration;\n var easing = options.easing || DEFAULT_EASING;\n startAnimation(function (distRatio) {\n return _this._scrollBy(dest[0] * distRatio, dest[1] * distRatio, options);\n }, function (next) {\n _this._scrollTimer = requestAnimationFrame(next);\n }, {\n easing: easing,\n duration: duration\n });\n };\n\n __proto._startScrollAnimationBySpeed = function (speed) {\n if (!speed || !speed[0] && !speed[1]) {\n return;\n }\n\n var a = -0.0006;\n var duration = getDuration(speed, a);\n var destPos = getDestPos(speed, a);\n return this._startScrollAnimation(destPos, {\n duration: duration\n });\n };\n\n __proto._pauseScrollAnimation = function () {\n cancelAnimationFrame(this._scrollTimer);\n this._scrollTimer = 0;\n };\n\n __proto._pauseZoomAnimation = function () {\n cancelAnimationFrame(this._zoomTimer);\n this._zoomTimer = 0;\n };\n\n __proto.getScrollAreaWidth = function () {\n var _a = this.getRangeX(true),\n min = _a[0],\n max = _a[1];\n\n return min || max ? this.margin * 2 : 0;\n };\n\n __proto.getScrollAreaHeight = function () {\n var _a = this.getRangeY(true),\n min = _a[0],\n max = _a[1];\n\n return min || max ? this.margin * 2 : 0;\n };\n\n __proto._triggerPinch = function (event) {\n var clientX = event.clientX,\n clientY = event.clientY,\n zoomX = event.zoomX,\n zoomY = event.zoomY;\n\n if (this.useAutoZoom) {\n this._zoomByClient([zoomX, zoomY], clientX, clientY);\n }\n\n if (!this._tempRect) {\n this._setClientRect();\n }\n\n var zoomRange = this.zoomRange;\n var zoomRangeX = this.zoomRangeX || zoomRange;\n var zoomRangeY = this.zoomRangeY || zoomRange;\n var _a = this._tempRect,\n left = _a.left,\n top = _a.top,\n width = _a.width,\n height = _a.height;\n var ratioX = (clientX - left) / width * 100;\n var ratioY = (clientY - top) / height * 100;\n this.trigger(\"pinch\", __assign(__assign({}, event), {\n zoom: between((zoomX + zoomY) / 2, zoomRange[0], zoomRange[1]),\n zoomX: between(zoomX, zoomRangeX[0], zoomRangeX[1]),\n zoomY: between(zoomY, zoomRangeY[0], zoomRangeY[1]),\n ratioX: ratioX,\n ratioY: ratioY\n }));\n };\n\n __proto._setClientRect = function () {\n var rect = this.getContainer().getBoundingClientRect();\n this._tempRect = {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height\n };\n };\n\n __proto._zoomByClient = function (zoom, clientX, clientY) {\n if (!this._tempRect) {\n this._setClientRect();\n }\n\n var _a = this._tempRect,\n left = _a.left,\n top = _a.top,\n width = _a.width,\n height = _a.height;\n var options = this.options;\n var originalZoomOffsetX = options.zoomOffsetX;\n var originalZoomOffsetY = options.zoomOffsetY;\n options.zoomOffsetX = \"\".concat((clientX - left) / width * 100, \"%\");\n options.zoomOffsetY = \"\".concat((clientY - top) / height * 100, \"%\");\n\n this._setZoom(zoom, {\n zoomBase: \"screen\"\n });\n\n options.zoomOffsetX = originalZoomOffsetX;\n options.zoomOffsetY = originalZoomOffsetY;\n };\n\n __proto._setZoom = function (zoom, zoomOptions) {\n if (zoomOptions === void 0) {\n zoomOptions = {};\n }\n\n var zoomBase = zoomOptions.zoomBase;\n\n var _a = this,\n containerWidth = _a.containerWidth,\n containerHeight = _a.containerHeight,\n prevZoomX = _a.zoomX,\n prevZoomY = _a.zoomY,\n zoomRange = _a.zoomRange;\n\n var _b = this,\n _c = _b.zoomOffsetX,\n zoomOffsetX = _c === void 0 ? DEFAULT_OPTIONS.zoomOffsetX : _c,\n _d = _b.zoomOffsetY,\n zoomOffsetY = _d === void 0 ? DEFAULT_OPTIONS.zoomOffsetY : _d;\n\n if (\"zoomOffsetX\" in zoomOptions) {\n zoomOffsetX = zoomOptions.zoomOffsetX;\n }\n\n if (\"zoomOffsetY\" in zoomOptions) {\n zoomOffsetY = zoomOptions.zoomOffsetY;\n }\n\n var scrollLeft = this.getScrollLeft();\n var scrollTop = this.getScrollTop();\n\n var _e = isArray(zoom) ? zoom : [zoom, zoom],\n zoomX = _e[0],\n zoomY = _e[1];\n\n var zoomRangeX = this.zoomRangeX || zoomRange;\n var zoomRangeY = this.zoomRangeY || zoomRange;\n var nextZoomX = between(zoomX, zoomRangeX[0], zoomRangeX[1]);\n var nextZoomY = between(zoomY, zoomRangeY[0], zoomRangeY[1]);\n var options = this.options;\n options.zoomX = nextZoomX;\n options.zoomY = nextZoomY;\n options.zoom = (nextZoomX + nextZoomY) / 2;\n var nextScrollLeft = this.getScrollLeft();\n var nextScrollTop = this.getScrollTop();\n var zoomXPos = 0;\n var zoomYPos = 0;\n\n if (zoomBase === \"fixed\") {\n zoomXPos = convertUnitSize(\"\".concat(zoomOffsetX), this.viewportWidth);\n zoomYPos = convertUnitSize(\"\".concat(zoomOffsetY), this.viewportHeight);\n } else if (zoomBase === \"viewport\") {\n zoomXPos = (-scrollLeft + convertUnitSize(\"\".concat(zoomOffsetX), this.viewportWidth)) * prevZoomX;\n zoomYPos = (-scrollTop + convertUnitSize(\"\".concat(zoomOffsetY), this.viewportHeight)) * prevZoomY;\n } else {\n zoomXPos = convertUnitSize(\"\".concat(zoomOffsetX), containerWidth);\n zoomYPos = convertUnitSize(\"\".concat(zoomOffsetY), containerHeight);\n }\n\n var centerX = scrollLeft + zoomXPos / prevZoomX;\n var centerY = scrollTop + zoomYPos / prevZoomY;\n var nextCenterX = nextScrollLeft + zoomXPos / nextZoomX;\n var nextCenterY = nextScrollTop + zoomYPos / nextZoomY;\n\n this._scrollBy(centerX - nextCenterX, centerY - nextCenterY, {\n zoom: !!(nextZoomX - prevZoomX || nextZoomY - prevZoomY)\n });\n\n this.render();\n };\n\n __proto._scrollBy = function (deltaX, deltaY, options) {\n var scrollLeft = this.getScrollLeft();\n var scrollTop = this.getScrollTop();\n\n if (options === null || options === void 0 ? void 0 : options.absolute) {\n scrollLeft *= this.zoomX;\n scrollTop *= this.zoomY;\n }\n\n return this._scrollTo(scrollLeft + deltaX, scrollTop + deltaY, options);\n };\n\n __proto._scrollTo = function (x, y, options) {\n var _this = this;\n\n var _a = this,\n prevScrollLeft = _a.scrollLeft,\n prevScrollTop = _a.scrollTop;\n\n var isAbsolute = options === null || options === void 0 ? void 0 : options.absolute;\n\n this._scrollToType(\"horizontal\", x, isAbsolute);\n\n this._scrollToType(\"vertical\", y, isAbsolute);\n\n var scrollLeft = this.scrollLeft;\n var scrollTop = this.scrollTop;\n this.render();\n var nextScrollAbsoluteLeft = this.getScrollLeft();\n var nextScrollAbsoluteTop = this.getScrollTop();\n\n this._emitScrollEvent(nextScrollAbsoluteLeft, nextScrollAbsoluteTop, options === null || options === void 0 ? void 0 : options.zoom);\n\n if (Math.round(prevScrollLeft) !== scrollLeft || Math.round(prevScrollTop) !== scrollTop) {\n this.isLoop = true;\n this.move(scrollLeft, scrollTop);\n requestAnimationFrame(function () {\n if (!_this.isLoop) {\n return;\n }\n\n _this.isLoop = false;\n var _a = _this.wrapperElement,\n requestScrollLeft = _a.scrollLeft,\n requestScrollTop = _a.scrollTop;\n _this.scrollLeft = requestScrollLeft;\n _this.scrollTop = requestScrollTop;\n\n if (scrollLeft !== Math.round(requestScrollLeft) || scrollTop !== Math.round(requestScrollTop)) {\n _this._scrollTo(nextScrollAbsoluteLeft, nextScrollAbsoluteTop);\n }\n });\n return false;\n }\n\n return true;\n };\n\n __proto._scrollToType = function (type, coord, isAbsolute) {\n var names = NAMES[type];\n\n var _a = this,\n _b = _a.margin,\n margin = _b === void 0 ? DEFAULT_OPTIONS.margin : _b,\n _c = _a.threshold,\n threshold = _c === void 0 ? DEFAULT_OPTIONS.threshold : _c;\n\n var prevScrollPos = this[\"scroll\".concat(names.pos)];\n\n var _d = this[\"getRange\".concat(names.coord)](true, true),\n minCoord = _d[0],\n maxCoord = _d[1];\n\n var scrollPos = Math.round(prevScrollPos);\n var scrollAreaSize = this[\"getScrollArea\".concat(names.size)]();\n var zoom = this[\"zoom\".concat(names.coord)];\n\n if (isAbsolute) {\n coord = coord / zoom;\n }\n\n var zoomCoord = coord * zoom;\n\n if (minCoord === maxCoord) {\n scrollPos = minCoord;\n coord = minCoord / zoom;\n } else if (zoomCoord - threshold <= minCoord) {\n var minThreshold = Math.max(0, zoomCoord - minCoord);\n scrollPos = minThreshold;\n coord = (minCoord + minThreshold) / zoom;\n } else if (zoomCoord + threshold >= maxCoord) {\n var maxThreshold = Math.max(0, maxCoord - zoomCoord);\n scrollPos = scrollAreaSize - maxThreshold;\n coord = (maxCoord - maxThreshold) / zoom;\n } else if (scrollPos < threshold) {\n scrollPos += margin;\n } else if (scrollPos > scrollAreaSize - threshold) {\n scrollPos -= margin;\n }\n\n scrollPos = Math.round(scrollPos);\n this[\"scroll\".concat(names.pos)] = scrollPos;\n this[\"offset\".concat(names.coord)] = coord - scrollPos / zoom;\n };\n\n __proto._getRangeCoord = function (type, isZoom, isReal) {\n var _a = this,\n _b = _a.margin,\n margin = _b === void 0 ? DEFAULT_OPTIONS.margin : _b,\n threshold = _a.threshold;\n\n var names = NAMES[type];\n var rangeCoord = checkDefault(this[\"range\".concat(names.coord)], DEFAULT_OPTIONS[\"range\".concat(names.coord)]);\n var rangeOffsetCoord = checkDefault(this[\"rangeOffset\".concat(names.coord)], DEFAULT_OPTIONS[\"rangeOffset\".concat(names.coord)]);\n var zoom = this[\"zoom\".concat(names.coord)];\n var range = getRange(this[\"getScroll\".concat(names.pos)](), margin, rangeCoord, threshold, isReal);\n\n if (!isZoom) {\n return [range[0] + rangeOffsetCoord[0], range[1] + rangeOffsetCoord[1]];\n }\n\n return [range[0] * zoom + rangeOffsetCoord[0], this.options.useOverflowScroll ? Math.max(this[\"viewport\".concat(names.size)] * zoom - this[\"container\".concat(names.size)], range[1] * zoom + rangeOffsetCoord[1]) : range[1] * zoom + rangeOffsetCoord[1]];\n };\n\n __proto._emitScrollEvent = function (scrollLeft, scrollTop, zoom) {\n var prevScrollLeft = this._asLeft;\n var prevScrollTop = this._asTop;\n\n if (!zoom && prevScrollLeft === scrollLeft && prevScrollTop === scrollTop) {\n return;\n }\n\n this._asLeft = scrollLeft;\n this._asTop = scrollTop;\n /**\n * The `scroll` event fires when the document view or an element has been scrolled.\n * @memberof InfiniteViewer\n * @event scroll\n * @param {InfiniteViewer.OnScroll} - Parameters for the scroll event\n * @example\n * import InfiniteViewer from \"infinite-viewer\";\n *\n * const viewer = new InfiniteViewer(\n * document.querySelector(\".container\"),\n * document.querySelector(\".viewport\"),\n * ).on(\"scroll\", () => {\n * console.log(viewer.getScrollLeft(), viewer.getScrollTop());\n * });\n */\n\n this.trigger(\"scroll\", {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n zoomX: this.zoomX,\n zoomY: this.zoomY\n });\n };\n\n __proto._getScrollRangeX = function () {\n var pos = this.getScrollLeft();\n var rangeX = this.rangeX;\n var startRange = rangeX[0];\n var endRange = rangeX[1];\n\n if (this.useOverflowScroll && isFinite(endRange)) {\n endRange = Math.max(endRange, this.viewportWidth - this.containerWidth / this.zoomX);\n }\n\n var startMargin = Math.min(0, isFinite(startRange) ? Math.min(startRange, pos) : pos);\n var endMargin = Math.max(0, isFinite(endRange) ? Math.max(endRange, pos) : pos);\n var viewportSize = this.viewportScrollWidth;\n var margin = Math.max(this.containerWidth / this.zoomX, viewportSize) - viewportSize;\n var startSizeOffset = Math.min(0, margin + startMargin);\n return [startSizeOffset, endMargin];\n };\n\n __proto._getScrollRangeY = function () {\n var pos = this.getScrollTop();\n var rangeY = this.rangeY;\n var startRange = rangeY[0];\n var endRange = rangeY[1];\n\n if (this.useOverflowScroll && isFinite(endRange)) {\n endRange = Math.max(endRange, this.viewportHeight - this.containerHeight / this.zoomY);\n }\n\n var startMargin = Math.min(0, isFinite(startRange) ? Math.min(startRange, pos) : pos);\n var endMargin = Math.max(0, isFinite(endRange) ? Math.max(endRange, pos) : pos);\n var viewportSize = this.viewportScrollHeight;\n var margin = Math.max(this.containerHeight / this.zoomY, viewportSize) - viewportSize;\n var startSizeOffset = Math.min(0, margin + startMargin);\n return [startSizeOffset, endMargin];\n };\n\n InfiniteViewer = __decorate([Properties(PROPERTIES, function (prototype, property) {\n var attributes = {\n enumerable: true,\n configurable: true,\n get: function () {\n return this.options[property];\n }\n };\n var setter = camelize(\"set \".concat(property));\n\n if (prototype[setter]) {\n attributes.set = function (value) {\n this[setter](value);\n };\n } else {\n attributes.set = function (value) {\n this.options[property] = value;\n };\n }\n\n Object.defineProperty(prototype, property, attributes);\n })\n /**\n * @sort 1\n */\n ], InfiniteViewer);\n return InfiniteViewer;\n}(EventEmitter);\n\nvar InfiniteViewer$1 =\n/*#__PURE__*/\nfunction (_super) {\n __extends(InfiniteViewer, _super);\n\n function InfiniteViewer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n return InfiniteViewer;\n}(InfiniteViewer);\n\nexport default InfiniteViewer$1;\nexport { CLASS_NAME, EVENTS, METHODS, OPTIONS, PROPERTIES };\n//# sourceMappingURL=infinite-viewer.esm.js.map\n","/*\nCopyright (c) 2019-present NAVER Corp.\nname: @egjs/list-differ\nlicense: MIT\nauthor: NAVER Corp.\nrepository: https://github.com/naver/egjs-list-differ\nversion: 1.0.0\n*/\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar PolyMap =\n/*#__PURE__*/\nfunction () {\n function PolyMap() {\n this.keys = [];\n this.values = [];\n }\n\n var __proto = PolyMap.prototype;\n\n __proto.get = function (key) {\n return this.values[this.keys.indexOf(key)];\n };\n\n __proto.set = function (key, value) {\n var keys = this.keys;\n var values = this.values;\n var prevIndex = keys.indexOf(key);\n var index = prevIndex === -1 ? keys.length : prevIndex;\n keys[index] = key;\n values[index] = value;\n };\n\n return PolyMap;\n}();\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar HashMap =\n/*#__PURE__*/\nfunction () {\n function HashMap() {\n this.object = {};\n }\n\n var __proto = HashMap.prototype;\n\n __proto.get = function (key) {\n return this.object[key];\n };\n\n __proto.set = function (key, value) {\n this.object[key] = value;\n };\n\n return HashMap;\n}();\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar SUPPORT_MAP = typeof Map === \"function\";\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar Link =\n/*#__PURE__*/\nfunction () {\n function Link() {}\n\n var __proto = Link.prototype;\n\n __proto.connect = function (prevLink, nextLink) {\n this.prev = prevLink;\n this.next = nextLink;\n prevLink && (prevLink.next = this);\n nextLink && (nextLink.prev = this);\n };\n\n __proto.disconnect = function () {\n // In double linked list, diconnect the interconnected relationship.\n var prevLink = this.prev;\n var nextLink = this.next;\n prevLink && (prevLink.next = nextLink);\n nextLink && (nextLink.prev = prevLink);\n };\n\n __proto.getIndex = function () {\n var link = this;\n var index = -1;\n\n while (link) {\n link = link.prev;\n ++index;\n }\n\n return index;\n };\n\n return Link;\n}();\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n\nfunction orderChanged(changed, fixed) {\n // It is roughly in the order of these examples.\n // 4, 6, 0, 2, 1, 3, 5, 7\n var fromLinks = []; // 0, 1, 2, 3, 4, 5, 6, 7\n\n var toLinks = [];\n changed.forEach(function (_a) {\n var from = _a[0],\n to = _a[1];\n var link = new Link();\n fromLinks[from] = link;\n toLinks[to] = link;\n }); // `fromLinks` are connected to each other by double linked list.\n\n fromLinks.forEach(function (link, i) {\n link.connect(fromLinks[i - 1]);\n });\n return changed.filter(function (_, i) {\n return !fixed[i];\n }).map(function (_a, i) {\n var from = _a[0],\n to = _a[1];\n\n if (from === to) {\n return [0, 0];\n }\n\n var fromLink = fromLinks[from];\n var toLink = toLinks[to - 1];\n var fromIndex = fromLink.getIndex(); // Disconnect the link connected to `fromLink`.\n\n fromLink.disconnect(); // Connect `fromLink` to the right of `toLink`.\n\n if (!toLink) {\n fromLink.connect(undefined, fromLinks[0]);\n } else {\n fromLink.connect(toLink, toLink.next);\n }\n\n var toIndex = fromLink.getIndex();\n return [fromIndex, toIndex];\n });\n}\n\nvar Result =\n/*#__PURE__*/\nfunction () {\n function Result(prevList, list, added, removed, changed, maintained, changedBeforeAdded, fixed) {\n this.prevList = prevList;\n this.list = list;\n this.added = added;\n this.removed = removed;\n this.changed = changed;\n this.maintained = maintained;\n this.changedBeforeAdded = changedBeforeAdded;\n this.fixed = fixed;\n }\n\n var __proto = Result.prototype;\n Object.defineProperty(__proto, \"ordered\", {\n get: function () {\n if (!this.cacheOrdered) {\n this.caculateOrdered();\n }\n\n return this.cacheOrdered;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(__proto, \"pureChanged\", {\n get: function () {\n if (!this.cachePureChanged) {\n this.caculateOrdered();\n }\n\n return this.cachePureChanged;\n },\n enumerable: true,\n configurable: true\n });\n\n __proto.caculateOrdered = function () {\n var ordered = orderChanged(this.changedBeforeAdded, this.fixed);\n var changed = this.changed;\n var pureChanged = [];\n this.cacheOrdered = ordered.filter(function (_a, i) {\n var from = _a[0],\n to = _a[1];\n var _b = changed[i],\n fromBefore = _b[0],\n toBefore = _b[1];\n\n if (from !== to) {\n pureChanged.push([fromBefore, toBefore]);\n return true;\n }\n });\n this.cachePureChanged = pureChanged;\n };\n\n return Result;\n}();\n\n/**\n *\n * @memberof eg.ListDiffer\n * @static\n * @function\n * @param - Previous List <ko> 이전 목록 </ko>\n * @param - List to Update <ko> 업데이트 할 목록 </ko>\n * @param - This callback function returns the key of the item. <ko> 아이템의 키를 반환하는 콜백 함수입니다.</ko>\n * @return - Returns the diff between `prevList` and `list` <ko> `prevList`와 `list`의 다른 점을 반환한다.</ko>\n * @example\n * import { diff } from \"@egjs/list-differ\";\n * // script => eg.ListDiffer.diff\n * const result = diff([0, 1, 2, 3, 4, 5], [7, 8, 0, 4, 3, 6, 2, 1], e => e);\n * // List before update\n * // [1, 2, 3, 4, 5]\n * console.log(result.prevList);\n * // Updated list\n * // [4, 3, 6, 2, 1]\n * console.log(result.list);\n * // Index array of values added to `list`\n * // [0, 1, 5]\n * console.log(result.added);\n * // Index array of values removed in `prevList`\n * // [5]\n * console.log(result.removed);\n * // An array of index pairs of `prevList` and `list` with different indexes from `prevList` and `list`\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.changed);\n * // The subset of `changed` and an array of index pairs that moved data directly. Indicate an array of absolute index pairs of `ordered`.(Formatted by: Array<[index of prevList, index of list]>)\n * // [[4, 3], [3, 4], [2, 6]]\n * console.log(result.pureChanged);\n * // An array of index pairs to be `ordered` that can synchronize `list` before adding data. (Formatted by: Array<[prevIndex, nextIndex]>)\n * // [[4, 1], [4, 2], [4, 3]]\n * console.log(result.ordered);\n * // An array of index pairs of `prevList` and `list` that have not been added/removed so data is preserved\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.maintained);\n */\n\nfunction diff(prevList, list, findKeyCallback) {\n var mapClass = SUPPORT_MAP ? Map : findKeyCallback ? HashMap : PolyMap;\n\n var callback = findKeyCallback || function (e) {\n return e;\n };\n\n var added = [];\n var removed = [];\n var maintained = [];\n var prevKeys = prevList.map(callback);\n var keys = list.map(callback);\n var prevKeyMap = new mapClass();\n var keyMap = new mapClass();\n var changedBeforeAdded = [];\n var fixed = [];\n var removedMap = {};\n var changed = [];\n var addedCount = 0;\n var removedCount = 0; // Add prevKeys and keys to the hashmap.\n\n prevKeys.forEach(function (key, prevListIndex) {\n prevKeyMap.set(key, prevListIndex);\n });\n keys.forEach(function (key, listIndex) {\n keyMap.set(key, listIndex);\n }); // Compare `prevKeys` and `keys` and add them to `removed` if they are not in `keys`.\n\n prevKeys.forEach(function (key, prevListIndex) {\n var listIndex = keyMap.get(key); // In prevList, but not in list, it is removed.\n\n if (typeof listIndex === \"undefined\") {\n ++removedCount;\n removed.push(prevListIndex);\n } else {\n removedMap[listIndex] = removedCount;\n }\n }); // Compare `prevKeys` and `keys` and add them to `added` if they are not in `prevKeys`.\n\n keys.forEach(function (key, listIndex) {\n var prevListIndex = prevKeyMap.get(key); // In list, but not in prevList, it is added.\n\n if (typeof prevListIndex === \"undefined\") {\n added.push(listIndex);\n ++addedCount;\n } else {\n maintained.push([prevListIndex, listIndex]);\n removedCount = removedMap[listIndex] || 0;\n changedBeforeAdded.push([prevListIndex - removedCount, listIndex - addedCount]);\n fixed.push(listIndex === prevListIndex);\n\n if (prevListIndex !== listIndex) {\n changed.push([prevListIndex, listIndex]);\n }\n }\n }); // Sort by ascending order of 'to(list's index).\n\n removed.reverse();\n return new Result(prevList, list, added, removed, changed, maintained, changedBeforeAdded, fixed);\n}\n\n/**\n * A module that checks diff when values are added, removed, or changed in an array.\n * @ko 배열 또는 오브젝트에서 값이 추가되거나 삭제되거나 순서가 변경사항을 체크하는 모듈입니다.\n * @memberof eg\n */\n\nvar ListDiffer =\n/*#__PURE__*/\nfunction () {\n /**\n * @param - Initializing Data Array. <ko> 초기 설정할 데이터 배열.</ko>\n * @param - This callback function returns the key of the item. <ko> 아이템의 키를 반환하는 콜백 함수입니다.</ko>\n * @example\n * import ListDiffer from \"@egjs/list-differ\";\n * // script => eg.ListDiffer\n * const differ = new ListDiffer([0, 1, 2, 3, 4, 5], e => e);\n * const result = differ.update([7, 8, 0, 4, 3, 6, 2, 1]);\n * // List before update\n * // [1, 2, 3, 4, 5]\n * console.log(result.prevList);\n * // Updated list\n * // [4, 3, 6, 2, 1]\n * console.log(result.list);\n * // Index array of values added to `list`.\n * // [0, 1, 5]\n * console.log(result.added);\n * // Index array of values removed in `prevList`.\n * // [5]\n * console.log(result.removed);\n * // An array of index pairs of `prevList` and `list` with different indexes from `prevList` and `list`.\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.changed);\n * // The subset of `changed` and an array of index pairs that moved data directly. Indicate an array of absolute index pairs of `ordered`.(Formatted by: Array<[index of prevList, index of list]>)\n * // [[4, 3], [3, 4], [2, 6]]\n * console.log(result.pureChanged);\n * // An array of index pairs to be `ordered` that can synchronize `list` before adding data. (Formatted by: Array<[prevIndex, nextIndex]>)\n * // [[4, 1], [4, 2], [4, 3]]\n * console.log(result.ordered);\n * // An array of index pairs of `prevList` and `list` that have not been added/removed so data is preserved.\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.maintained);\n */\n function ListDiffer(list, findKeyCallback) {\n if (list === void 0) {\n list = [];\n }\n\n this.findKeyCallback = findKeyCallback;\n this.list = [].slice.call(list);\n }\n /**\n * Update list.\n * @ko 리스트를 업데이트를 합니다.\n * @param - List to update <ko> 업데이트할 리스트 </ko>\n * @return - Returns the results of an update from `prevList` to `list`.<ko> `prevList`에서 `list`로 업데이트한 결과를 반환한다. </ko>\n */\n\n\n var __proto = ListDiffer.prototype;\n\n __proto.update = function (list) {\n var newData = [].slice.call(list);\n var result = diff(this.list, newData, this.findKeyCallback);\n this.list = newData;\n return result;\n };\n\n return ListDiffer;\n}();\n\n/*\negjs-list-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n\nexport default ListDiffer;\nexport { diff };\n//# sourceMappingURL=list-differ.esm.js.map\n","/*\nCopyright (c) Daybrush\nname: croact\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/croact.git\nversion: 1.0.4\n*/\nimport { isNode, isArray, isUndefined, getValues, find, isString, removeEvent, addEvent, getDocument, getKeys, decamelize, flat as flat$1, isNumber, pushSet, isFunction, getEntries } from '@daybrush/utils';\nimport { diff } from '@egjs/list-differ';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\n\nfunction fillKeys(keys) {\n var index = 0;\n return keys.map(function (key) {\n return key == null ? \"$compat\".concat(++index) : \"\".concat(key);\n });\n}\nfunction flat(arr) {\n var arr2 = [];\n arr.forEach(function (el) {\n arr2 = arr2.concat(isArray(el) ? flat(el) : el);\n });\n return arr2;\n}\nfunction fillProps(props, defaultProps) {\n if (!defaultProps) {\n return props;\n }\n for (var name_1 in defaultProps) {\n if (isUndefined(props[name_1])) {\n props[name_1] = defaultProps[name_1];\n }\n }\n return props;\n}\nfunction isDiff(a, b) {\n if (a === b) {\n return false;\n }\n for (var i in a) {\n if (!(i in b)) {\n return true;\n }\n }\n for (var i in b) {\n if (a[i] !== b[i]) {\n return true;\n }\n }\n return false;\n}\nfunction getAttributes(props) {\n var className = props.className,\n otherProps = __rest(props, [\"className\"]);\n if (className != null) {\n otherProps.class = className;\n }\n delete otherProps.style;\n delete otherProps.children;\n return otherProps;\n}\nfunction splitProps(props) {\n var attributes = {};\n var events = {};\n for (var name_2 in props) {\n if (name_2.indexOf(\"on\") === 0) {\n events[name_2] = props[name_2];\n } else {\n attributes[name_2] = props[name_2];\n }\n }\n return [attributes, events];\n}\nfunction findContainerNode(provider) {\n if (!provider) {\n return null;\n }\n var base = provider.b;\n if (isNode(base)) {\n return base;\n }\n return findContainerNode(provider.c);\n}\nfunction removeNode(node) {\n var parentNode = node.parentNode;\n if (parentNode) {\n parentNode.removeChild(node);\n }\n}\nfunction executeHooks(hooks) {\n hooks.forEach(function (hook) {\n hook();\n });\n}\nfunction renderFunctionComponent() {\n return this.constructor(this.props, this.context);\n}\n\nvar hooksIndex = 0;\nvar Provider = /*#__PURE__*/function () {\n function Provider(\n /**\n * Type\n */\n t,\n /**\n * Depth\n */\n d,\n /**\n * Key\n */\n k,\n /**\n * index\n */\n i,\n /**\n * Container\n */\n c,\n /**\n * Ref\n */\n ref,\n /**\n * Props\n */\n ps) {\n if (ps === void 0) {\n ps = {};\n }\n this.t = t;\n this.d = d;\n this.k = k;\n this.i = i;\n this.c = c;\n this.ref = ref;\n this.ps = ps;\n this.typ = \"prov\";\n /**\n * providers\n */\n this._ps = [];\n /**\n * Contexts\n */\n this._cs = {};\n /**\n * Whether to hydrate\n */\n this._hyd = null;\n /**\n * is self render\n */\n this._sel = false;\n }\n var __proto = Provider.prototype;\n __proto.s = function () {\n return true;\n };\n /**\n * Update\n */\n __proto.u = function (hooks, contexts, nextElement, nextState, isForceUpdate) {\n var self = this;\n var currentDepth = self.d;\n var scheduledContexts = getValues(contexts).filter(function (context) {\n return context.$_req;\n });\n var scheduledSubs = flat(scheduledContexts.map(function (context) {\n return context.$_subs;\n }));\n var isContextUpdate = find(scheduledSubs, function (provider) {\n return provider.d === currentDepth;\n });\n if (self.b && !isString(nextElement) && !isForceUpdate && !self.s(nextElement.props, nextState) && !isContextUpdate) {\n var nextChildSubs = scheduledSubs.reduce(function (childs, sub) {\n var depth = sub.d;\n if (childs[0]) {\n if (childs[0].d === depth) {\n childs.push(sub);\n }\n } else if (depth > currentDepth) {\n childs.push(sub);\n }\n return childs;\n }, []);\n nextChildSubs.forEach(function (child) {\n // provider.container!,\n // [provider],\n // [provider.original],\n // hooks,\n // provider._cs,\n // { ...self.state, ...self.$_state },\n // isForceUpdate,\n renderProviders(child, child._ps, [child.o], hooks, contexts, true);\n });\n return false;\n }\n self.o = nextElement;\n self.ss(nextState);\n // render\n var prevProps = self.ps;\n if (!isString(nextElement)) {\n self.ps = nextElement.props;\n self.ref = nextElement.ref;\n }\n setCurrentInstance(this);\n self.r(hooks, contexts, self.b ? prevProps : {}, nextState);\n return true;\n };\n __proto.md = function () {\n this.rr();\n };\n __proto.ss = function () {\n return;\n };\n __proto.ud = function () {\n this.rr();\n };\n /**\n * register refs\n */\n __proto.rr = function () {\n var self = this;\n var ref = self.ref;\n var fr = self.fr;\n ref && ref(fr ? fr.current : self.b);\n };\n return Provider;\n}();\nfunction getCurrentInstance() {\n return Object.__CROACT_CURRENT_INSTNACE__;\n}\nfunction getHooksIndex() {\n return hooksIndex;\n}\nfunction setHooksInex(nextHooksIndex) {\n hooksIndex = nextHooksIndex;\n}\nfunction setCurrentInstance(provider) {\n Object.__CROACT_CURRENT_INSTNACE__ = provider;\n hooksIndex = 0;\n return provider;\n}\n\nvar Component = /*#__PURE__*/function () {\n function Component(props, context) {\n if (props === void 0) {\n props = {};\n }\n this.props = props;\n this.context = context;\n this.state = {};\n this.$_timer = 0;\n this.$_state = {};\n this.$_subs = [];\n this.$_cs = {};\n }\n var __proto = Component.prototype;\n __proto.render = function () {\n return null;\n };\n __proto.shouldComponentUpdate = function (props, state) {\n return this.props !== props || this.state !== state;\n };\n __proto.setState = function (state, callback, isForceUpdate) {\n var self = this;\n if (!self.$_timer) {\n self.$_state = {};\n }\n clearTimeout(self.$_timer);\n self.$_timer = 0;\n self.$_state = __assign(__assign({}, self.$_state), state);\n if (!isForceUpdate) {\n self.$_timer = window.setTimeout(function () {\n self.$_timer = 0;\n self.$_setState(callback, isForceUpdate);\n });\n } else {\n self.$_setState(callback, isForceUpdate);\n }\n return;\n };\n __proto.forceUpdate = function (callback) {\n this.setState({}, callback, true);\n };\n __proto.componentDidMount = function () {};\n __proto.componentDidUpdate = function (prevProps, prevState) {};\n __proto.componentWillUnmount = function () {};\n __proto.$_setState = function (callback, isForceUpdate) {\n var hooks = [];\n var provider = this.$_p;\n var isUpdate = renderProviders(provider.c, [provider], [provider.o], hooks, provider._cs, __assign(__assign({}, this.state), this.$_state), isForceUpdate);\n if (isUpdate) {\n if (callback) {\n hooks.push(callback);\n }\n executeHooks(hooks);\n setCurrentInstance(null);\n }\n };\n return Component;\n}();\nvar PureComponent = /*#__PURE__*/function (_super) {\n __extends(PureComponent, _super);\n function PureComponent() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n var __proto = PureComponent.prototype;\n __proto.shouldComponentUpdate = function (props, state) {\n return isDiff(this.props, props) || isDiff(this.state, state);\n };\n return PureComponent;\n}(Component);\n\nfunction createRef(defaultValue) {\n var refCallback = function (e) {\n refCallback.current = e;\n };\n refCallback.current = defaultValue;\n return refCallback;\n}\nfunction forwardRef(func) {\n func._fr = true;\n return func;\n}\n\nfunction createComponent(type, props, contextValue, self) {\n var _a;\n var base;\n if ((_a = type === null || type === void 0 ? void 0 : type.prototype) === null || _a === void 0 ? void 0 : _a.render) {\n base = new type(props, contextValue);\n } else {\n base = new Component(props, contextValue);\n base.constructor = type;\n if (type._fr) {\n self.fr = createRef();\n base.render = function () {\n return this.constructor(this.props, self.fr);\n };\n } else {\n base.render = renderFunctionComponent;\n }\n }\n base.$_p = self;\n return base;\n}\nvar ComponentProvider = /*#__PURE__*/function (_super) {\n __extends(ComponentProvider, _super);\n function ComponentProvider(type, depth, key, index, container, ref, props) {\n if (props === void 0) {\n props = {};\n }\n var _this = _super.call(this, type, depth, key, index, container, ref, fillProps(props, type.defaultProps)) || this;\n _this.typ = \"comp\";\n /**\n * Update shift effects\n */\n _this._usefs = [];\n /**\n * Update effects\n */\n _this._uefs = [];\n /**\n * Destroy effects\n */\n _this._defs = [];\n return _this;\n }\n var __proto = ComponentProvider.prototype;\n __proto.s = function (nextProps, nextState) {\n var base = this.b;\n return base.shouldComponentUpdate(fillProps(nextProps, this.t.defaultProps), nextState || base.state) !== false;\n };\n __proto.r = function (hooks, contexts, prevProps) {\n var _a, _b;\n var self = this;\n var type = self.t;\n self.ps = fillProps(self.ps, self.t.defaultProps);\n var props = self.ps;\n var isMount = !self.b;\n var contextType = type.contextType;\n var base = self.b;\n var contextValue = contextType === null || contextType === void 0 ? void 0 : contextType.get(self);\n self._cs = contexts;\n if (isMount) {\n base = createComponent(type, props, contextValue, self);\n self.b = base;\n } else {\n base.props = props;\n base.context = contextValue;\n }\n var prevState = base.state;\n self._usefs = [];\n self._uefs = [];\n var template = base.render();\n if (((_b = (_a = template === null || template === void 0 ? void 0 : template.props) === null || _a === void 0 ? void 0 : _a.children) === null || _b === void 0 ? void 0 : _b.length) === 0) {\n template.props.children = self.ps.children;\n }\n var nextContexts = __assign(__assign({}, contexts), base.$_cs);\n renderProviders(self, self._ps, template ? [template] : [], hooks, nextContexts);\n if (isMount) {\n self._uefs.push(function () {\n contextType === null || contextType === void 0 ? void 0 : contextType.register(self);\n base.componentDidMount();\n });\n } else {\n self._uefs.push(function () {\n base.componentDidUpdate(prevProps, prevState);\n });\n }\n hooks.push(function () {\n self._usefs.forEach(function (ef) {\n ef();\n });\n if (isMount) {\n self.md();\n } else {\n self.ud();\n }\n self._defs = self._uefs.map(function (ef) {\n return ef();\n });\n });\n };\n __proto.ss = function (nextState) {\n var base = this.b;\n if (!base || !nextState) {\n return;\n }\n base.state = nextState;\n };\n __proto.un = function () {\n var _a;\n var self = this;\n self._ps.forEach(function (provider) {\n provider.un();\n });\n var type = self.t;\n (_a = type.contextType) === null || _a === void 0 ? void 0 : _a.unregister(self);\n clearTimeout(self.b.$_timer);\n self._defs.forEach(function (def) {\n def && def();\n });\n self.b.componentWillUnmount();\n };\n return ComponentProvider;\n}(Provider);\n\nfunction diffAttributes(attrs1, attrs2, el) {\n var _a = diffObject(getAttributes(attrs1), getAttributes(attrs2)),\n added = _a.added,\n removed = _a.removed,\n changed = _a.changed;\n for (var name_1 in added) {\n el.setAttribute(name_1, added[name_1]);\n }\n for (var name_2 in changed) {\n el.setAttribute(name_2, changed[name_2][1]);\n }\n for (var name_3 in removed) {\n el.removeAttribute(name_3);\n }\n}\nfunction diffEvents(events1, events2, provier) {\n var _a = diffObject(events1, events2),\n added = _a.added,\n removed = _a.removed;\n for (var name_4 in removed) {\n provier.e(name_4, true);\n }\n for (var name_5 in added) {\n provier.e(name_5);\n }\n}\nfunction diffObject(a, b) {\n var keys1 = getKeys(a);\n var keys2 = getKeys(b);\n var result = diff(keys1, keys2, function (key) {\n return key;\n });\n var added = {};\n var removed = {};\n var changed = {};\n result.added.forEach(function (index) {\n var name = keys2[index];\n added[name] = b[name];\n });\n result.removed.forEach(function (index) {\n var name = keys1[index];\n removed[name] = a[name];\n });\n result.maintained.forEach(function (_a) {\n var index = _a[0];\n var name = keys1[index];\n var values = [a[name], b[name]];\n if (a[name] !== b[name]) {\n changed[name] = values;\n }\n });\n return {\n added: added,\n removed: removed,\n changed: changed\n };\n}\nfunction diffStyle(style1, style2, el) {\n var style = el.style;\n var _a = diffObject(style1, style2),\n added = _a.added,\n removed = _a.removed,\n changed = _a.changed;\n for (var beforeName in added) {\n var name_6 = decamelize(beforeName, \"-\");\n style.setProperty(name_6, added[beforeName]);\n }\n for (var beforeName in changed) {\n var name_7 = decamelize(beforeName, \"-\");\n style.setProperty(name_7, changed[beforeName][1]);\n }\n for (var beforeName in removed) {\n var name_8 = decamelize(beforeName, \"-\");\n style.removeProperty(name_8);\n }\n}\nfunction getNativeEventName(name) {\n return name.replace(/^on/g, \"\").toLowerCase();\n}\nvar ElementProvider = /*#__PURE__*/function (_super) {\n __extends(ElementProvider, _super);\n function ElementProvider() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.typ = \"elem\";\n /**\n * Events\n */\n _this._es = {};\n /**\n * is svg\n */\n _this._svg = false;\n return _this;\n }\n var __proto = ElementProvider.prototype;\n __proto.e = function (name, isRemove) {\n var self = this;\n var events = self._es;\n var base = self.b;\n var eventName = getNativeEventName(name);\n if (isRemove) {\n removeEvent(base, eventName, events[name]);\n delete events[name];\n } else {\n events[name] = function (e) {\n var _a, _b;\n (_b = (_a = self.ps)[name]) === null || _b === void 0 ? void 0 : _b.call(_a, e);\n };\n addEvent(base, eventName, events[name]);\n }\n };\n __proto.s = function (nextProps) {\n return isDiff(this.ps, nextProps);\n };\n __proto.r = function (hooks, contextValues, prevProps) {\n var _a;\n var self = this;\n var isMount = !self.b;\n var nextProps = self.ps;\n if (isMount) {\n var containerNode = findContainerNode(self.c);\n var isSVG = false;\n if (self._svg || self.t === \"svg\") {\n isSVG = true;\n } else {\n isSVG = containerNode && containerNode.ownerSVGElement;\n }\n self._svg = isSVG;\n var element = (_a = self._hyd) === null || _a === void 0 ? void 0 : _a.splice(0, 1)[0];\n var type = self.t;\n if (element) {\n self._hyd = [].slice.call(element.children || []);\n } else {\n var doc = getDocument(containerNode);\n if (isSVG) {\n element = doc.createElementNS(\"http://www.w3.org/2000/svg\", type);\n } else {\n element = doc.createElement(type);\n }\n }\n self.b = element;\n }\n renderProviders(self, self._ps, nextProps.children, hooks, contextValues);\n var base = self.b;\n var _b = splitProps(prevProps),\n prevAttributes = _b[0],\n prevEvents = _b[1];\n var _c = splitProps(nextProps),\n nextAttributes = _c[0],\n nextEvents = _c[1];\n diffAttributes(prevAttributes, nextAttributes, base);\n diffEvents(prevEvents, nextEvents, self);\n diffStyle(prevProps.style || {}, nextProps.style || {}, base);\n hooks.push(function () {\n if (isMount) {\n self.md();\n } else {\n self.ud();\n }\n });\n return true;\n };\n __proto.un = function () {\n var self = this;\n var events = self._es;\n var base = self.b;\n for (var name_9 in events) {\n removeEvent(base, name_9, events[name_9]);\n }\n self._ps.forEach(function (provider) {\n provider.un();\n });\n self._es = {};\n if (!self._sel) {\n removeNode(base);\n }\n };\n return ElementProvider;\n}(Provider);\n\nfunction findDOMNode(comp) {\n if (!comp || isNode(comp)) {\n return comp;\n }\n var providers = comp.$_p._ps;\n if (!providers.length) {\n return null;\n }\n return findDOMNode(providers[0].b);\n}\nfunction findNodeProvider(provider) {\n if (!provider) {\n return;\n }\n if (provider.b && isNode(provider.b)) {\n return provider;\n }\n var providers = provider._ps;\n if (!providers.length) {\n return null;\n }\n return findNodeProvider(providers[0]);\n}\nfunction createElement(type, props) {\n var children = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n children[_i - 2] = arguments[_i];\n }\n var _a = props || {},\n key = _a.key,\n ref = _a.ref,\n otherProps = __rest(_a, [\"key\", \"ref\"]);\n return {\n type: type,\n key: key,\n ref: ref,\n props: __assign(__assign({}, otherProps), {\n children: flat$1(children).filter(function (child) {\n return child != null && child !== false;\n })\n })\n };\n}\n\nvar ContainerProvider = /*#__PURE__*/function (_super) {\n __extends(ContainerProvider, _super);\n function ContainerProvider(base, depth) {\n if (depth === void 0) {\n depth = 0;\n }\n var _this = _super.call(this, \"container\", depth, \"container\", 0, null) || this;\n _this.typ = \"container\";\n _this.b = base;\n return _this;\n }\n var __proto = ContainerProvider.prototype;\n __proto.r = function () {\n return true;\n };\n __proto.un = function () {\n return;\n };\n return ContainerProvider;\n}(Provider);\nvar TextProvider = /*#__PURE__*/function (_super) {\n __extends(TextProvider, _super);\n function TextProvider() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.typ = \"text\";\n return _this;\n }\n var __proto = TextProvider.prototype;\n __proto.r = function (hooks) {\n var _a;\n var self = this;\n var isMount = !self.b;\n if (isMount) {\n var containerNode = findContainerNode(self.c);\n var b = (_a = self._hyd) === null || _a === void 0 ? void 0 : _a.splice(0, 1)[0];\n self.b = b || getDocument(containerNode).createTextNode(self.t.replace(\"text_\", \"\"));\n }\n hooks.push(function () {\n if (isMount) {\n self.md();\n } else {\n self.ud();\n }\n });\n return true;\n };\n __proto.un = function () {\n removeNode(this.b);\n };\n return TextProvider;\n}(Provider);\nfunction diffProviders(containerProvider, providers, children) {\n var childrenKeys = children.map(function (p) {\n return isString(p) ? null : p.key;\n });\n var keys1 = fillKeys(providers.map(function (p) {\n return p.k;\n }));\n var keys2 = fillKeys(childrenKeys);\n var result = diff(keys1, keys2, function (key) {\n return key;\n });\n result.removed.forEach(function (index) {\n providers.splice(index, 1)[0].un();\n });\n result.ordered.forEach(function (_a) {\n var from = _a[0],\n to = _a[1];\n var childrenProvider = providers.splice(from, 1)[0];\n providers.splice(to, 0, childrenProvider);\n var el = findDOMNode(childrenProvider.b);\n var next = findDOMNode(providers[to + 1] && providers[to + 1].b);\n if (el) {\n el.parentNode.insertBefore(el, next);\n }\n });\n result.added.forEach(function (index) {\n providers.splice(index, 0, createProvider(children[index], childrenKeys[index], index, containerProvider));\n });\n var changed = result.maintained.filter(function (_a) {\n _a[0];\n var to = _a[1];\n var el = children[to];\n var childProvider = providers[to];\n var type = isString(el) ? \"text_\".concat(el) : el.type;\n if (type !== childProvider.t) {\n childProvider.un();\n providers.splice(to, 1, createProvider(el, childrenKeys[to], to, containerProvider));\n return true;\n }\n childProvider.i = to;\n return false;\n });\n return __spreadArray(__spreadArray([], result.added, true), changed.map(function (_a) {\n _a[0];\n var to = _a[1];\n return to;\n }), true);\n}\n\nfunction getNextSibiling(provider, childProvider) {\n var childProviders = provider._ps;\n var length = childProviders.length;\n for (var i = childProvider.i + 1; i < length; ++i) {\n var el = findDOMNode(childProviders[i].b);\n if (el) {\n return el;\n }\n }\n return null;\n}\nfunction createProvider(el, key, index, containerProvider) {\n var depth = containerProvider.d + 1;\n if (isString(el) || isNumber(el)) {\n return new TextProvider(\"text_\".concat(el), depth, key, index, containerProvider, null, {});\n }\n var type = el.type;\n var providerClass = typeof type === \"string\" ? ElementProvider : ComponentProvider;\n return new providerClass(type, depth, key, index, containerProvider, el.ref, el.props);\n}\nfunction renderProviders(containerProvider, providers, children, updatedHooks, nextContexts, nextState, isForceUpdate) {\n var result = diffProviders(containerProvider, providers, children);\n var hyd = containerProvider._hyd;\n var updated = providers.filter(function (childProvider, i) {\n childProvider._hyd = hyd;\n return childProvider.u(updatedHooks, nextContexts, children[i], nextState, isForceUpdate);\n });\n if (containerProvider.typ === \"container\" && containerProvider._sel) {\n providers.forEach(function (provider) {\n var nodeProvider = findNodeProvider(provider);\n if (nodeProvider) {\n nodeProvider._sel = true;\n }\n });\n }\n containerProvider._hyd = null;\n var containerNode = findContainerNode(containerProvider);\n if (containerNode) {\n result.reverse().forEach(function (index) {\n var childProvider = providers[index];\n var el = findDOMNode(childProvider.b);\n if (!el) {\n return;\n }\n if (containerNode !== el && !el.parentNode) {\n var nextElement = getNextSibiling(containerProvider, childProvider);\n containerNode.insertBefore(el, nextElement);\n }\n });\n }\n return updated.length > 0;\n}\nfunction renderProvider(element, container, provider, contexts) {\n if (provider === void 0) {\n provider = container.__CROACT__;\n }\n if (contexts === void 0) {\n contexts = {};\n }\n var isProvider = !!provider;\n if (!provider) {\n provider = new ContainerProvider(container);\n }\n var hooks = [];\n renderProviders(provider, provider._ps, element ? [element] : [], hooks, contexts, undefined, undefined);\n executeHooks(hooks);\n setCurrentInstance(null);\n if (!isProvider) {\n container.__CROACT__ = provider;\n }\n return provider;\n}\nfunction render(element, container, callback) {\n var provider = container.__CROACT__;\n if (element && !provider) {\n container.innerHTML = \"\";\n }\n renderProvider(element, container, provider);\n callback && callback();\n}\nfunction renderSelf(element, self, containerProvider) {\n if (!containerProvider && element) {\n containerProvider = new ContainerProvider(self.parentElement);\n containerProvider._hyd = [self];\n containerProvider._sel = true;\n }\n renderProvider(element, self, containerProvider);\n return containerProvider;\n}\n\nvar i = 0;\nfunction createContext(defaultValue) {\n var id = \"c\".concat(++i);\n function Provider(props) {\n var self = this;\n if (!self.$_cs[id]) {\n self.$_cs[id] = self;\n var $_subs = [];\n self.shouldComponentUpdate = function (nextProps) {\n if (nextProps.value !== self.props.value) {\n // request\n self.$_req = true;\n }\n };\n self.render = function () {\n return self.props.children[0];\n };\n self.$_subs = $_subs;\n }\n return props.children[0];\n }\n function Consumer(props, contextValue) {\n return props.children(contextValue);\n }\n function getContext(provider) {\n return provider._cs[id];\n }\n var context = {\n $_id: id,\n $_dv: defaultValue,\n Consumer: Consumer,\n Provider: Provider,\n get: function (provider) {\n var _a, _b;\n return (_b = (_a = getContext(provider)) === null || _a === void 0 ? void 0 : _a.props.value) !== null && _b !== void 0 ? _b : defaultValue;\n },\n register: function (provider) {\n var mainComponent = getContext(provider);\n if (mainComponent) {\n pushSet(mainComponent.$_subs, provider);\n }\n },\n unregister: function (provider) {\n var mainComponent = getContext(provider);\n if (mainComponent) {\n var subs = mainComponent.$_subs;\n var index = subs.indexOf(provider);\n if (index > -1) {\n subs.splice(index, 1);\n }\n }\n }\n };\n Consumer.contextType = context;\n return context;\n}\n\nvar Portal = /*#__PURE__*/function (_super) {\n __extends(Portal, _super);\n function Portal() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n var __proto = Portal.prototype;\n __proto.componentDidMount = function () {\n var self = this;\n var _a = self.props,\n element = _a.element,\n container = _a.container;\n var parentProvider = self.$_p;\n self._pp = new ContainerProvider(container, parentProvider.d + 1);\n renderProvider(element, container, self._pp, parentProvider._cs);\n };\n __proto.componentDidUpdate = function () {\n var self = this;\n var _a = self.props,\n element = _a.element,\n container = _a.container;\n renderProvider(element, container, self._pp, self.$_p._cs);\n };\n __proto.componentWillUnmount = function () {\n var self = this;\n var container = self.props.container;\n renderProvider(null, container, self._pp, self.$_p._cs);\n this._pp = null;\n };\n return Portal;\n}(PureComponent);\nfunction createPortal(el, container) {\n return createElement(Portal, {\n element: el,\n container: container\n });\n}\n\nfunction _renderToString(node, parentContexts, self) {\n if (node == null) {\n return \"\";\n }\n if (isString(node) || isNumber(node) || isFunction(node)) {\n return node;\n }\n var type = node.type,\n props = node.props;\n if (isString(type)) {\n var stringProps_1 = {};\n getEntries(props).forEach(function (_a) {\n var name = _a[0],\n value = _a[1];\n if (name === \"style\") {\n stringProps_1[name] = getEntries(value).map(function (_a) {\n var styleName = _a[0],\n styleValue = _a[1];\n return \"\".concat(decamelize(styleName), \": \").concat(styleValue, \";\");\n }).join(\"\");\n } else if (name === \"children\") {\n return;\n } else if (!name.match(/^on[^a-z]/g)) {\n stringProps_1[name] = \"\".concat(value);\n }\n });\n var children = props.children.map(function (child) {\n return _renderToString(child, parentContexts);\n }).join(\"\");\n if (self) {\n return {\n tagName: type,\n props: stringProps_1,\n children: children\n };\n }\n var strings = __spreadArray([type], getEntries(stringProps_1).map(function (_a) {\n var name = _a[0],\n value = _a[1];\n return \"\".concat(name, \"=\\\"\").concat(value.replace(/\"/g, \"\\\\\\\"\"), \"\\\"\");\n }), true);\n return \"<\".concat(strings.join(\" \"), \">\").concat(children, \"</\").concat(type, \">\");\n } else if (isFunction(type)) {\n var contextType = type.contextType;\n var provider = {\n b: null,\n _hs: [],\n _usefs: [],\n _uefs: [],\n _defs: [],\n _cs: parentContexts\n };\n setCurrentInstance(provider);\n var contextValue = contextType === null || contextType === void 0 ? void 0 : contextType.get(provider);\n var base = createComponent(type, props, contextValue, {});\n var nextContexts = __assign(__assign({}, parentContexts), base.$_cs);\n provider.b = base;\n return _renderToString(base.render(), nextContexts, self);\n }\n return \"\";\n}\nfunction renderToString(node) {\n return _renderToString(node, {});\n}\nfunction renderSelfToString(node) {\n return _renderToString(node, {}, true);\n}\n\nfunction checkHookInfo(info) {\n var inst = getCurrentInstance();\n var hooks = inst._hs || (inst._hs = []);\n var index = getHooksIndex();\n var prevHt = hooks[index];\n setHooksInex(index + 1);\n if (prevHt) {\n if (!isDiff(prevHt.deps, info.deps)) {\n prevHt.updated = false;\n return prevHt;\n }\n hooks[index] = info;\n } else {\n hooks.push(info);\n }\n info.value = info.func();\n info.updated = true;\n return info;\n}\nfunction useMemo(defaultFunction, deps) {\n var info = checkHookInfo({\n func: defaultFunction,\n deps: deps\n });\n return info.value;\n}\nfunction useRef(defaultValue) {\n return useMemo(function () {\n return createRef(defaultValue);\n }, []);\n}\nfunction useContext(context) {\n var inst = getCurrentInstance();\n var contextId = context.$_id;\n var contexts = inst._cs;\n var providerComponent;\n if (contextId in contexts) {\n providerComponent = contexts[contextId];\n providerComponent.props.value;\n } else {\n context.$_dv;\n }\n useEffect(function () {\n context.register(inst);\n return function () {\n context.unregister(inst);\n };\n }, []);\n return context.get(inst);\n}\nfunction useState(st) {\n var inst = getCurrentInstance();\n var index = getHooksIndex();\n var comp = inst.b;\n checkHookInfo({\n func: function () {\n comp.state[index] = isFunction(st) ? st() : st;\n },\n deps: []\n });\n return [comp.state[index], function (nextValue) {\n var _a;\n return comp.setState((_a = {}, _a[index] = nextValue, _a));\n }];\n}\nfunction useEffect(effect, deps, unshift) {\n var inst = getCurrentInstance();\n var info = checkHookInfo({\n func: function () {\n return effect;\n },\n deps: deps\n });\n var effects = unshift ? inst._usefs : inst._uefs;\n if (info.updated) {\n effects.push(function () {\n info.effect && info.effect();\n info.effect = effect();\n return info.effect;\n });\n } else {\n effects.push(function () {\n return info.effect;\n });\n }\n}\nfunction useImperativeHandle(ref, func, deps) {\n useEffect(function () {\n ref === null || ref === void 0 ? void 0 : ref(func());\n }, deps, true);\n}\n\nvar version = \"simple-1.0.0\";\n\nexport { Component, ContainerProvider, PureComponent, createContext, createElement, createPortal, createRef, findDOMNode, findNodeProvider, forwardRef, render, renderSelf, renderSelfToString, renderToString, useContext, useEffect, useImperativeHandle, useMemo, useRef, useState, version };\n//# sourceMappingURL=croact.esm.js.map\n","/*\nCopyright (c) 2020 Daybrush\nname: @scena/matrix\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/matrix\nversion: 1.1.1\n*/\nimport { throttle, TINY_NUM, average } from '@daybrush/utils';\n\nfunction add(matrix, inverseMatrix, startIndex, fromIndex, n, k) {\n for (var i = 0; i < n; ++i) {\n var x = startIndex + i * n;\n var fromX = fromIndex + i * n;\n matrix[x] += matrix[fromX] * k;\n inverseMatrix[x] += inverseMatrix[fromX] * k;\n }\n}\n\nfunction swap(matrix, inverseMatrix, startIndex, fromIndex, n) {\n for (var i = 0; i < n; ++i) {\n var x = startIndex + i * n;\n var fromX = fromIndex + i * n;\n var v = matrix[x];\n var iv = inverseMatrix[x];\n matrix[x] = matrix[fromX];\n matrix[fromX] = v;\n inverseMatrix[x] = inverseMatrix[fromX];\n inverseMatrix[fromX] = iv;\n }\n}\n\nfunction divide(matrix, inverseMatrix, startIndex, n, k) {\n for (var i = 0; i < n; ++i) {\n var x = startIndex + i * n;\n matrix[x] /= k;\n inverseMatrix[x] /= k;\n }\n}\n/**\n *\n * @namespace Matrix\n */\n\n/**\n * @memberof Matrix\n */\n\n\nfunction ignoreDimension(matrix, m, n) {\n if (n === void 0) {\n n = Math.sqrt(matrix.length);\n }\n\n var newMatrix = matrix.slice();\n\n for (var i = 0; i < n; ++i) {\n newMatrix[i * n + m - 1] = 0;\n newMatrix[(m - 1) * n + i] = 0;\n }\n\n newMatrix[(m - 1) * (n + 1)] = 1;\n return newMatrix;\n}\n/**\n * @memberof Matrix\n */\n\nfunction invert(matrix, n) {\n if (n === void 0) {\n n = Math.sqrt(matrix.length);\n }\n\n var newMatrix = matrix.slice();\n var inverseMatrix = createIdentityMatrix(n);\n\n for (var i = 0; i < n; ++i) {\n // diagonal\n var identityIndex = n * i + i;\n\n if (!throttle(newMatrix[identityIndex], TINY_NUM)) {\n // newMatrix[identityIndex] = 0;\n for (var j = i + 1; j < n; ++j) {\n if (newMatrix[n * i + j]) {\n swap(newMatrix, inverseMatrix, i, j, n);\n break;\n }\n }\n }\n\n if (!throttle(newMatrix[identityIndex], TINY_NUM)) {\n // no inverse matrix\n return [];\n }\n\n divide(newMatrix, inverseMatrix, i, n, newMatrix[identityIndex]);\n\n for (var j = 0; j < n; ++j) {\n var targetStartIndex = j;\n var targetIndex = j + i * n;\n var target = newMatrix[targetIndex];\n\n if (!throttle(target, TINY_NUM) || i === j) {\n continue;\n }\n\n add(newMatrix, inverseMatrix, targetStartIndex, i, n, -target);\n }\n }\n\n return inverseMatrix;\n}\n/**\n * @memberof Matrix\n */\n\nfunction transpose(matrix, n) {\n if (n === void 0) {\n n = Math.sqrt(matrix.length);\n }\n\n var newMatrix = [];\n\n for (var i = 0; i < n; ++i) {\n for (var j = 0; j < n; ++j) {\n newMatrix[j * n + i] = matrix[n * i + j];\n }\n }\n\n return newMatrix;\n}\n/**\n * @memberof Matrix\n */\n\nfunction getOrigin(matrix, n) {\n if (n === void 0) {\n n = Math.sqrt(matrix.length);\n }\n\n var originMatrix = [];\n var w = matrix[n * n - 1];\n\n for (var i = 0; i < n - 1; ++i) {\n originMatrix[i] = matrix[n * (n - 1) + i] / w;\n }\n\n originMatrix[n - 1] = 0;\n return originMatrix;\n}\n/**\n * @memberof Matrix\n */\n\nfunction fromTranslation(pos, n) {\n var newMatrix = createIdentityMatrix(n);\n\n for (var i = 0; i < n - 1; ++i) {\n newMatrix[n * (n - 1) + i] = pos[i] || 0;\n }\n\n return newMatrix;\n}\n/**\n * @memberof Matrix\n */\n\nfunction convertPositionMatrix(matrix, n) {\n var newMatrix = matrix.slice();\n\n for (var i = matrix.length; i < n - 1; ++i) {\n newMatrix[i] = 0;\n }\n\n newMatrix[n - 1] = 1;\n return newMatrix;\n}\n/**\n * @memberof Matrix\n */\n\nfunction convertDimension(matrix, n, m) {\n if (n === void 0) {\n n = Math.sqrt(matrix.length);\n } // n < m\n\n\n if (n === m) {\n return matrix;\n }\n\n var newMatrix = createIdentityMatrix(m);\n var length = Math.min(n, m);\n\n for (var i = 0; i < length - 1; ++i) {\n for (var j = 0; j < length - 1; ++j) {\n newMatrix[i * m + j] = matrix[i * n + j];\n }\n\n newMatrix[(i + 1) * m - 1] = matrix[(i + 1) * n - 1];\n newMatrix[(m - 1) * m + i] = matrix[(n - 1) * n + i];\n }\n\n newMatrix[m * m - 1] = matrix[n * n - 1];\n return newMatrix;\n}\n/**\n * @memberof Matrix\n */\n\nfunction multiplies(n) {\n var matrixes = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n matrixes[_i - 1] = arguments[_i];\n }\n\n var m = createIdentityMatrix(n);\n matrixes.forEach(function (matrix) {\n m = multiply(m, matrix, n);\n });\n return m;\n}\n/**\n * @memberof Matrix\n */\n\nfunction multiply(matrix, matrix2, n) {\n if (n === void 0) {\n n = Math.sqrt(matrix.length);\n }\n\n var newMatrix = []; // 1 y: n\n // 1 x: m\n // 2 x: m\n // 2 y: k\n // n * m X m * k\n\n var m = matrix.length / n;\n var k = matrix2.length / m;\n\n if (!m) {\n return matrix2;\n } else if (!k) {\n return matrix;\n }\n\n for (var i = 0; i < n; ++i) {\n for (var j = 0; j < k; ++j) {\n newMatrix[j * n + i] = 0;\n\n for (var l = 0; l < m; ++l) {\n // m1 x: m(l), y: n(i)\n // m2 x: k(j): y: m(l)\n // nw x: n(i), y: k(j)\n newMatrix[j * n + i] += matrix[l * n + i] * matrix2[j * m + l];\n }\n }\n } // n * k\n\n\n return newMatrix;\n}\n/**\n * @memberof Matrix\n */\n\nfunction plus(pos1, pos2) {\n var length = Math.min(pos1.length, pos2.length);\n var nextPos = pos1.slice();\n\n for (var i = 0; i < length; ++i) {\n nextPos[i] = nextPos[i] + pos2[i];\n }\n\n return nextPos;\n}\n/**\n * @memberof Matrix\n */\n\nfunction minus(pos1, pos2) {\n var length = Math.min(pos1.length, pos2.length);\n var nextPos = pos1.slice();\n\n for (var i = 0; i < length; ++i) {\n nextPos[i] = nextPos[i] - pos2[i];\n }\n\n return nextPos;\n}\n/**\n * @memberof Matrix\n */\n\nfunction convertCSStoMatrix(a, is2d) {\n if (is2d === void 0) {\n is2d = a.length === 6;\n }\n\n if (is2d) {\n return [a[0], a[1], 0, a[2], a[3], 0, a[4], a[5], 1];\n }\n\n return a;\n}\n/**\n * @memberof Matrix\n */\n\nfunction convertMatrixtoCSS(a, is2d) {\n if (is2d === void 0) {\n is2d = a.length === 9;\n }\n\n if (is2d) {\n return [a[0], a[1], a[3], a[4], a[6], a[7]];\n }\n\n return a;\n}\n/**\n * @memberof Matrix\n */\n\nfunction calculate(matrix, matrix2, n) {\n if (n === void 0) {\n n = matrix2.length;\n }\n\n var result = multiply(matrix, matrix2, n);\n var k = result[n - 1];\n return result.map(function (v) {\n return v / k;\n });\n}\n/**\n * @memberof Matrix\n */\n\nfunction rotateX3d(matrix, rad) {\n return multiply(matrix, [1, 0, 0, 0, 0, Math.cos(rad), Math.sin(rad), 0, 0, -Math.sin(rad), Math.cos(rad), 0, 0, 0, 0, 1], 4);\n}\n/**\n * @memberof Matrix\n */\n\nfunction rotateY3d(matrix, rad) {\n return multiply(matrix, [Math.cos(rad), 0, -Math.sin(rad), 0, 0, 1, 0, 0, Math.sin(rad), 0, Math.cos(rad), 0, 0, 0, 0, 1], 4);\n}\n/**\n * @memberof Matrix\n */\n\nfunction rotateZ3d(matrix, rad) {\n return multiply(matrix, createRotateMatrix(rad, 4));\n}\n/**\n * @memberof Matrix\n */\n\nfunction scale3d(matrix, _a) {\n var _b = _a[0],\n sx = _b === void 0 ? 1 : _b,\n _c = _a[1],\n sy = _c === void 0 ? 1 : _c,\n _d = _a[2],\n sz = _d === void 0 ? 1 : _d;\n return multiply(matrix, [sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1], 4);\n}\n/**\n * @memberof Matrix\n */\n\nfunction rotate(pos, rad) {\n return calculate(createRotateMatrix(rad, 3), convertPositionMatrix(pos, 3));\n}\n/**\n * @memberof Matrix\n */\n\nfunction translate3d(matrix, _a) {\n var _b = _a[0],\n tx = _b === void 0 ? 0 : _b,\n _c = _a[1],\n ty = _c === void 0 ? 0 : _c,\n _d = _a[2],\n tz = _d === void 0 ? 0 : _d;\n return multiply(matrix, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1], 4);\n}\n/**\n * @memberof Matrix\n */\n\nfunction matrix3d(matrix1, matrix2) {\n return multiply(matrix1, matrix2, 4);\n}\n/**\n * @memberof Matrix\n */\n\nfunction createRotateMatrix(rad, n) {\n var cos = Math.cos(rad);\n var sin = Math.sin(rad);\n var m = createIdentityMatrix(n); // cos -sin\n // sin cos\n\n m[0] = cos;\n m[1] = sin;\n m[n] = -sin;\n m[n + 1] = cos;\n return m;\n}\n/**\n * @memberof Matrix\n */\n\nfunction createIdentityMatrix(n) {\n var length = n * n;\n var matrix = [];\n\n for (var i = 0; i < length; ++i) {\n matrix[i] = i % (n + 1) ? 0 : 1;\n }\n\n return matrix;\n}\n/**\n * @memberof Matrix\n */\n\nfunction createScaleMatrix(scale, n) {\n var m = createIdentityMatrix(n);\n var length = Math.min(scale.length, n - 1);\n\n for (var i = 0; i < length; ++i) {\n m[(n + 1) * i] = scale[i];\n }\n\n return m;\n}\n/**\n * @memberof Matrix\n */\n\nfunction createOriginMatrix(origin, n) {\n var m = createIdentityMatrix(n);\n var length = Math.min(origin.length, n - 1);\n\n for (var i = 0; i < length; ++i) {\n m[n * (n - 1) + i] = origin[i];\n }\n\n return m;\n}\n/**\n * @memberof Matrix\n */\n\nfunction createWarpMatrix(pos0, pos1, pos2, pos3, nextPos0, nextPos1, nextPos2, nextPos3) {\n var x0 = pos0[0],\n y0 = pos0[1];\n var x1 = pos1[0],\n y1 = pos1[1];\n var x2 = pos2[0],\n y2 = pos2[1];\n var x3 = pos3[0],\n y3 = pos3[1];\n var u0 = nextPos0[0],\n v0 = nextPos0[1];\n var u1 = nextPos1[0],\n v1 = nextPos1[1];\n var u2 = nextPos2[0],\n v2 = nextPos2[1];\n var u3 = nextPos3[0],\n v3 = nextPos3[1];\n var matrix = [x0, 0, x1, 0, x2, 0, x3, 0, y0, 0, y1, 0, y2, 0, y3, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, x0, 0, x1, 0, x2, 0, x3, 0, y0, 0, y1, 0, y2, 0, y3, 0, 1, 0, 1, 0, 1, 0, 1, -u0 * x0, -v0 * x0, -u1 * x1, -v1 * x1, -u2 * x2, -v2 * x2, -u3 * x3, -v3 * x3, -u0 * y0, -v0 * y0, -u1 * y1, -v1 * y1, -u2 * y2, -v2 * y2, -u3 * y3, -v3 * y3];\n var inverseMatrix = invert(matrix, 8);\n\n if (!inverseMatrix.length) {\n return [];\n }\n\n var h = multiply(inverseMatrix, [u0, v0, u1, v1, u2, v2, u3, v3], 8);\n h[8] = 1;\n return convertDimension(transpose(h), 3, 4);\n}\n/**\n * @memberof Matrix\n */\n\nfunction getCenter(points) {\n return [0, 1].map(function (i) {\n return average(points.map(function (pos) {\n return pos[i];\n }));\n });\n}\n\nexport { calculate, convertCSStoMatrix, convertDimension, convertMatrixtoCSS, convertPositionMatrix, createIdentityMatrix, createOriginMatrix, createRotateMatrix, createScaleMatrix, createWarpMatrix, fromTranslation, getCenter, getOrigin, ignoreDimension, invert, matrix3d, minus, multiplies, multiply, plus, rotate, rotateX3d, rotateY3d, rotateZ3d, scale3d, translate3d, transpose };\n//# sourceMappingURL=matrix.esm.js.map\n","/*\nCopyright (c) 2019 Daybrush\nname: css-to-mat\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/css-to-mat.git\nversion: 1.1.0\n*/\nimport { isArray, splitSpace, splitBracket, isObject, splitComma, convertUnitSize, splitUnit } from '@daybrush/utils';\nimport { calculate, matrix3d, invert, translate3d, scale3d, rotateZ3d, rotateX3d, rotateY3d } from '@scena/matrix';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\n\nfunction createMatrix() {\n return [\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1,\n ];\n}\nfunction parseMat(transform, size) {\n if (size === void 0) { size = 0; }\n return toMat(parse(transform, size));\n}\nfunction getElementMatrix(el) {\n return parseMat(getComputedStyle(el).transform);\n}\nfunction calculateMatrixDist(matrix, pos) {\n var res = calculate(matrix, [pos[0], pos[1] || 0, pos[2] || 0, 1], 4);\n var w = res[3] || 1;\n return [\n res[0] / w,\n res[1] / w,\n res[2] / w,\n ];\n}\nfunction getDistElementMatrix(el, container) {\n if (container === void 0) { container = document.body; }\n var target = el;\n var matrix = createMatrix();\n while (target) {\n var transform = getComputedStyle(target).transform;\n matrix = matrix3d(parseMat(transform), matrix);\n if (target === container) {\n break;\n }\n target = target.parentElement;\n }\n matrix = invert(matrix, 4);\n matrix[12] = 0;\n matrix[13] = 0;\n matrix[14] = 0;\n return matrix;\n}\nfunction toMat(matrixInfos) {\n var target = createMatrix();\n matrixInfos.forEach(function (info) {\n var matrixFunction = info.matrixFunction, functionValue = info.functionValue;\n if (!matrixFunction) {\n return;\n }\n target = matrixFunction(target, functionValue);\n });\n return target;\n}\nfunction parse(transform, size) {\n if (size === void 0) { size = 0; }\n var transforms = isArray(transform) ? transform : splitSpace(transform);\n return transforms.map(function (t) {\n var _a = splitBracket(t), name = _a.prefix, value = _a.value;\n var matrixFunction = null;\n var functionName = name;\n var functionValue = \"\";\n if (name === \"translate\" || name === \"translateX\" || name === \"translate3d\") {\n var nextSize_1 = isObject(size) ? __assign(__assign({}, size), { \"o%\": size[\"%\"] }) : {\n \"%\": size,\n \"o%\": size,\n };\n var _b = splitComma(value).map(function (v, i) {\n if (i === 0 && \"x%\" in nextSize_1) {\n nextSize_1[\"%\"] = size[\"x%\"];\n }\n else if (i === 1 && \"y%\" in nextSize_1) {\n nextSize_1[\"%\"] = size[\"y%\"];\n }\n else {\n nextSize_1[\"%\"] = size[\"o%\"];\n }\n return convertUnitSize(v, nextSize_1);\n }), posX = _b[0], _c = _b[1], posY = _c === void 0 ? 0 : _c, _d = _b[2], posZ = _d === void 0 ? 0 : _d;\n matrixFunction = translate3d;\n functionValue = [posX, posY, posZ];\n }\n else if (name === \"translateY\") {\n var nextSize = isObject(size) ? __assign({ \"%\": size[\"y%\"] }, size) : {\n \"%\": size,\n };\n var posY = convertUnitSize(value, nextSize);\n matrixFunction = translate3d;\n functionValue = [0, posY, 0];\n }\n else if (name === \"translateZ\") {\n var posZ = parseFloat(value);\n matrixFunction = translate3d;\n functionValue = [0, 0, posZ];\n }\n else if (name === \"scale\" || name === \"scale3d\") {\n var _e = splitComma(value).map(function (v) { return parseFloat(v); }), sx = _e[0], _f = _e[1], sy = _f === void 0 ? sx : _f, _g = _e[2], sz = _g === void 0 ? 1 : _g;\n matrixFunction = scale3d;\n functionValue = [sx, sy, sz];\n }\n else if (name === \"scaleX\") {\n var sx = parseFloat(value);\n matrixFunction = scale3d;\n functionValue = [sx, 1, 1];\n }\n else if (name === \"scaleY\") {\n var sy = parseFloat(value);\n matrixFunction = scale3d;\n functionValue = [1, sy, 1];\n }\n else if (name === \"scaleZ\") {\n var sz = parseFloat(value);\n matrixFunction = scale3d;\n functionValue = [1, 1, sz];\n }\n else if (name === \"rotate\" || name === \"rotateZ\" || name === \"rotateX\" || name === \"rotateY\") {\n var _h = splitUnit(value), unit = _h.unit, unitValue = _h.value;\n var rad = unit === \"rad\" ? unitValue : unitValue * Math.PI / 180;\n if (name === \"rotate\" || name === \"rotateZ\") {\n functionName = \"rotateZ\";\n matrixFunction = rotateZ3d;\n }\n else if (name === \"rotateX\") {\n matrixFunction = rotateX3d;\n }\n else if (name === \"rotateY\") {\n matrixFunction = rotateY3d;\n }\n functionValue = rad;\n }\n else if (name === \"matrix3d\") {\n matrixFunction = matrix3d;\n functionValue = splitComma(value).map(function (v) { return parseFloat(v); });\n }\n else if (name === \"matrix\") {\n var m = splitComma(value).map(function (v) { return parseFloat(v); });\n matrixFunction = matrix3d;\n functionValue = [\n m[0], m[1], 0, 0,\n m[2], m[3], 0, 0,\n 0, 0, 1, 0,\n m[4], m[5], 0, 1,\n ];\n }\n else {\n functionName = \"\";\n }\n return {\n name: name,\n functionName: functionName,\n value: value,\n matrixFunction: matrixFunction,\n functionValue: functionValue,\n };\n });\n}\n\nexport { calculateMatrixDist, createMatrix, getDistElementMatrix, getElementMatrix, parse, parseMat, toMat };\n//# sourceMappingURL=css-to-mat.esm.js.map\n","/*\nCopyright (c) 2019-present NAVER Corp.\nname: @egjs/children-differ\nlicense: MIT\nauthor: NAVER Corp.\nrepository: https://github.com/naver/egjs-children-differ\nversion: 1.0.1\n*/\nimport ListDiffer, { diff as diff$1 } from '@egjs/list-differ';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n };\n\n return extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\n/*\negjs-children-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\nvar findKeyCallback = typeof Map === \"function\" ? undefined : function () {\n var childrenCount = 0;\n return function (el) {\n return el.__DIFF_KEY__ || (el.__DIFF_KEY__ = ++childrenCount);\n };\n}();\n\n/**\n * A module that checks diff when child are added, removed, or changed .\n * @ko 자식 노드들에서 자식 노드가 추가되거나 삭제되거나 순서가 변경된 사항을 체크하는 모듈입니다.\n * @memberof eg\n * @extends eg.ListDiffer\n */\n\nvar ChildrenDiffer =\n/*#__PURE__*/\nfunction (_super) {\n __extends(ChildrenDiffer, _super);\n /**\n * @param - Initializing Children <ko> 초기 설정할 자식 노드들</ko>\n */\n\n\n function ChildrenDiffer(list) {\n if (list === void 0) {\n list = [];\n }\n\n return _super.call(this, list, findKeyCallback) || this;\n }\n\n return ChildrenDiffer;\n}(ListDiffer);\n\n/*\negjs-children-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n/**\n *\n * @memberof eg.ChildrenDiffer\n * @static\n * @function\n * @param - Previous List <ko> 이전 목록 </ko>\n * @param - List to Update <ko> 업데이트 할 목록 </ko>\n * @return - Returns the diff between `prevList` and `list` <ko> `prevList`와 `list`의 다른 점을 반환한다.</ko>\n * @example\n * import { diff } from \"@egjs/children-differ\";\n * // script => eg.ChildrenDiffer.diff\n * const result = diff([0, 1, 2, 3, 4, 5], [7, 8, 0, 4, 3, 6, 2, 1]);\n * // List before update\n * // [1, 2, 3, 4, 5]\n * console.log(result.prevList);\n * // Updated list\n * // [4, 3, 6, 2, 1]\n * console.log(result.list);\n * // Index array of values added to `list`\n * // [0, 1, 5]\n * console.log(result.added);\n * // Index array of values removed in `prevList`\n * // [5]\n * console.log(result.removed);\n * // An array of index pairs of `prevList` and `list` with different indexes from `prevList` and `list`\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.changed);\n * // The subset of `changed` and an array of index pairs that moved data directly. Indicate an array of absolute index pairs of `ordered`.(Formatted by: Array<[index of prevList, index of list]>)\n * // [[4, 3], [3, 4], [2, 6]]\n * console.log(result.pureChanged);\n * // An array of index pairs to be `ordered` that can synchronize `list` before adding data. (Formatted by: Array<[prevIndex, nextIndex]>)\n * // [[4, 1], [4, 2], [4, 3]]\n * console.log(result.ordered);\n * // An array of index pairs of `prevList` and `list` that have not been added/removed so data is preserved\n * // [[0, 2], [4, 3], [3, 4], [2, 6], [1, 7]]\n * console.log(result.maintained);\n */\n\nfunction diff(prevList, list) {\n return diff$1(prevList, list, findKeyCallback);\n}\n\n/*\negjs-children-differ\nCopyright (c) 2019-present NAVER Corp.\nMIT license\n*/\n\nexport default ChildrenDiffer;\nexport { diff };\n//# sourceMappingURL=children-differ.esm.js.map\n","/*\nCopyright (c) 2019 Daybrush\nname: @scena/dragscroll\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/dragscroll.git\nversion: 1.4.0\n*/\nimport EventEmitter from '@scena/event-emitter';\nimport { now, isString, isFunction } from '@daybrush/utils';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n/* global Reflect, Promise */\n\nvar extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n };\n return extendStatics(d, b);\n};\nfunction __extends(d, b) {\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nvar __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n\nfunction getDefaultScrollPosition(e) {\n var container = e.container;\n if (container === document.body) {\n return [container.scrollLeft || document.documentElement.scrollLeft, container.scrollTop || document.documentElement.scrollTop];\n }\n return [container.scrollLeft, container.scrollTop];\n}\nfunction checkDefaultScrollEvent(container, callback) {\n container.addEventListener(\"scroll\", callback);\n return function () {\n container.removeEventListener(\"scroll\", callback);\n };\n}\nfunction getContainerElement(container) {\n if (!container) {\n return null;\n } else if (isString(container)) {\n return document.querySelector(container);\n }\n if (isFunction(container)) {\n return container();\n } else if (container instanceof Element) {\n return container;\n } else if (\"current\" in container) {\n return container.current;\n } else if (\"value\" in container) {\n return container.value;\n }\n}\n/**\n * @sort 1\n */\nvar DragScroll = /*#__PURE__*/function (_super) {\n __extends(DragScroll, _super);\n function DragScroll() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this._startRect = null;\n _this._startPos = [];\n _this._prevTime = 0;\n _this._timer = 0;\n _this._prevScrollPos = [0, 0];\n _this._isWait = false;\n _this._flag = false;\n _this._currentOptions = null;\n _this._lock = false;\n _this._unregister = null;\n _this._onScroll = function () {\n var options = _this._currentOptions;\n if (_this._lock || !options) {\n return;\n }\n _this.emit(\"scrollDrag\", {\n next: function (inputEvent) {\n _this.checkScroll({\n container: options.container,\n inputEvent: inputEvent\n });\n }\n });\n };\n return _this;\n }\n /**\n */\n var __proto = DragScroll.prototype;\n __proto.dragStart = function (e, options) {\n var container = getContainerElement(options.container);\n if (!container) {\n this._flag = false;\n return;\n }\n var top = 0;\n var left = 0;\n var width = 0;\n var height = 0;\n if (container === document.body) {\n width = window.innerWidth;\n height = window.innerHeight;\n } else {\n var rect = container.getBoundingClientRect();\n top = rect.top;\n left = rect.left;\n width = rect.width;\n height = rect.height;\n }\n this._flag = true;\n this._startPos = [e.clientX, e.clientY];\n this._startRect = {\n top: top,\n left: left,\n width: width,\n height: height\n };\n this._prevScrollPos = this._getScrollPosition([0, 0], options);\n this._currentOptions = options;\n this._registerScrollEvent(options);\n };\n __proto.drag = function (e, options) {\n clearTimeout(this._timer);\n if (!this._flag) {\n return;\n }\n var clientX = e.clientX,\n clientY = e.clientY;\n var _a = options.threshold,\n threshold = _a === void 0 ? 0 : _a;\n var _b = this,\n _startRect = _b._startRect,\n _startPos = _b._startPos;\n this._currentOptions = options;\n var direction = [0, 0];\n if (_startRect.top > clientY - threshold) {\n if (_startPos[1] > _startRect.top || clientY < _startPos[1]) {\n direction[1] = -1;\n }\n } else if (_startRect.top + _startRect.height < clientY + threshold) {\n if (_startPos[1] < _startRect.top + _startRect.height || clientY > _startPos[1]) {\n direction[1] = 1;\n }\n }\n if (_startRect.left > clientX - threshold) {\n if (_startPos[0] > _startRect.left || clientX < _startPos[0]) {\n direction[0] = -1;\n }\n } else if (_startRect.left + _startRect.width < clientX + threshold) {\n if (_startPos[0] < _startRect.left + _startRect.width || clientX > _startPos[0]) {\n direction[0] = 1;\n }\n }\n if (!direction[0] && !direction[1]) {\n return false;\n }\n return this._continueDrag(__assign(__assign({}, options), {\n direction: direction,\n inputEvent: e,\n isDrag: true\n }));\n };\n /**\n */\n __proto.checkScroll = function (options) {\n var _this = this;\n if (this._isWait) {\n return false;\n }\n var _a = options.prevScrollPos,\n prevScrollPos = _a === void 0 ? this._prevScrollPos : _a,\n direction = options.direction,\n _b = options.throttleTime,\n throttleTime = _b === void 0 ? 0 : _b,\n inputEvent = options.inputEvent,\n isDrag = options.isDrag;\n var nextScrollPos = this._getScrollPosition(direction || [0, 0], options);\n var offsetX = nextScrollPos[0] - prevScrollPos[0];\n var offsetY = nextScrollPos[1] - prevScrollPos[1];\n var nextDirection = direction || [offsetX ? Math.abs(offsetX) / offsetX : 0, offsetY ? Math.abs(offsetY) / offsetY : 0];\n this._prevScrollPos = nextScrollPos;\n this._lock = false;\n if (!offsetX && !offsetY) {\n return false;\n }\n /**\n * @event DragScroll#move\n */\n this.emit(\"move\", {\n offsetX: nextDirection[0] ? offsetX : 0,\n offsetY: nextDirection[1] ? offsetY : 0,\n inputEvent: inputEvent\n });\n if (throttleTime && isDrag) {\n clearTimeout(this._timer);\n this._timer = window.setTimeout(function () {\n _this._continueDrag(options);\n }, throttleTime);\n }\n return true;\n };\n /**\n *\n */\n __proto.dragEnd = function () {\n this._flag = false;\n this._lock = false;\n clearTimeout(this._timer);\n this._unregisterScrollEvent();\n };\n __proto._getScrollPosition = function (direction, options) {\n var container = options.container,\n _a = options.getScrollPosition,\n getScrollPosition = _a === void 0 ? getDefaultScrollPosition : _a;\n return getScrollPosition({\n container: getContainerElement(container),\n direction: direction\n });\n };\n __proto._continueDrag = function (options) {\n var _this = this;\n var _a;\n var container = options.container,\n direction = options.direction,\n throttleTime = options.throttleTime,\n useScroll = options.useScroll,\n isDrag = options.isDrag,\n inputEvent = options.inputEvent;\n if (!this._flag || isDrag && this._isWait) {\n return;\n }\n var nowTime = now();\n var distTime = Math.max(throttleTime + this._prevTime - nowTime, 0);\n if (distTime > 0) {\n clearTimeout(this._timer);\n this._timer = window.setTimeout(function () {\n _this._continueDrag(options);\n }, distTime);\n return false;\n }\n this._prevTime = nowTime;\n var prevScrollPos = this._getScrollPosition(direction, options);\n this._prevScrollPos = prevScrollPos;\n if (isDrag) {\n this._isWait = true;\n }\n // unregister native scroll event\n if (!useScroll) {\n this._lock = true;\n }\n var param = {\n container: getContainerElement(container),\n direction: direction,\n inputEvent: inputEvent\n };\n (_a = options.requestScroll) === null || _a === void 0 ? void 0 : _a.call(options, param);\n /**\n * @event DragScroll#scroll\n */\n this.emit(\"scroll\", param);\n this._isWait = false;\n return useScroll || this.checkScroll(__assign(__assign({}, options), {\n prevScrollPos: prevScrollPos,\n direction: direction,\n inputEvent: inputEvent\n }));\n };\n __proto._registerScrollEvent = function (options) {\n this._unregisterScrollEvent();\n var checkScrollEvent = options.checkScrollEvent;\n if (!checkScrollEvent) {\n return;\n }\n var callback = checkScrollEvent === true ? checkDefaultScrollEvent : checkScrollEvent;\n var container = getContainerElement(options.container);\n if (checkScrollEvent === true && (container === document.body || container === document.documentElement)) {\n this._unregister = checkDefaultScrollEvent(window, this._onScroll);\n } else {\n this._unregister = callback(container, this._onScroll);\n }\n };\n __proto._unregisterScrollEvent = function () {\n var _a;\n (_a = this._unregister) === null || _a === void 0 ? void 0 : _a.call(this);\n this._unregister = null;\n };\n return DragScroll;\n}(EventEmitter);\n\nexport default DragScroll;\n//# sourceMappingURL=dragscroll.esm.js.map\n","/*\nCopyright (c) 2020 Daybrush\nname: overlap-area\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/overlap-area.git\nversion: 1.1.0\n*/\nimport { throttle, TINY_NUM, sum, find, getDist, getShapeDirection, findIndex } from '@daybrush/utils';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j];\n\n return r;\n}\n\nfunction tinyThrottle(num) {\n return throttle(num, TINY_NUM);\n}\nfunction isSameConstants(linearConstants1, linearConstants2) {\n return linearConstants1.every(function (v, i) {\n return tinyThrottle(v - linearConstants2[i]) === 0;\n });\n}\nfunction isSamePoint(point1, point2) {\n return !tinyThrottle(point1[0] - point2[0]) && !tinyThrottle(point1[1] - point2[1]);\n}\nfunction flat(arr) {\n return arr.reduce(function (prev, current) {\n prev.push.apply(prev, current);\n return prev;\n }, []);\n}\n\n/**\n * @namespace OverlapArea\n */\n\n/**\n * Gets the size of a shape (polygon) made of points.\n * @memberof OverlapArea\n */\n\nfunction getAreaSize(points) {\n if (points.length < 3) {\n return 0;\n }\n\n return Math.abs(sum(points.map(function (point, i) {\n var nextPoint = points[i + 1] || points[0];\n return point[0] * nextPoint[1] - nextPoint[0] * point[1];\n }))) / 2;\n}\n/**\n * Get points that fit the rect,\n * @memberof OverlapArea\n */\n\nfunction fitPoints(points, rect) {\n var width = rect.width,\n height = rect.height,\n left = rect.left,\n top = rect.top;\n\n var _a = getMinMaxs(points),\n minX = _a.minX,\n minY = _a.minY,\n maxX = _a.maxX,\n maxY = _a.maxY;\n\n var ratioX = width / (maxX - minX);\n var ratioY = height / (maxY - minY);\n return points.map(function (point) {\n return [left + (point[0] - minX) * ratioX, top + (point[1] - minY) * ratioY];\n });\n}\n/**\n * Get the minimum and maximum points of the points.\n * @memberof OverlapArea\n */\n\nfunction getMinMaxs(points) {\n var xs = points.map(function (point) {\n return point[0];\n });\n var ys = points.map(function (point) {\n return point[1];\n });\n return {\n minX: Math.min.apply(Math, xs),\n minY: Math.min.apply(Math, ys),\n maxX: Math.max.apply(Math, xs),\n maxY: Math.max.apply(Math, ys)\n };\n}\n/**\n * Whether the point is in shape\n * @param - point pos\n * @param - shape points\n * @param - whether to check except line\n * @memberof OverlapArea\n */\n\nfunction isInside(pos, points, excludeLine) {\n var x = pos[0],\n y = pos[1];\n\n var _a = getMinMaxs(points),\n minX = _a.minX,\n maxX = _a.maxX;\n\n var xLine = [[minX, y], [maxX, y]];\n var xLinearConstants = getLinearConstants(xLine[0], xLine[1]);\n var lines = convertLines(points);\n var intersectionPosInfos = [];\n lines.forEach(function (line) {\n var linearConstants = getLinearConstants(line[0], line[1]);\n var standardPoint = line[0];\n\n if (isSameConstants(xLinearConstants, linearConstants)) {\n intersectionPosInfos.push({\n pos: pos,\n line: line,\n type: \"line\"\n });\n } else {\n var xPoints = getPointsOnLines(getIntersectionPointsByConstants(xLinearConstants, linearConstants), [xLine, line]);\n xPoints.forEach(function (point) {\n if (line.some(function (linePoint) {\n return isSamePoint(linePoint, point);\n })) {\n intersectionPosInfos.push({\n pos: point,\n line: line,\n type: \"point\"\n });\n } else if (tinyThrottle(standardPoint[1] - y) !== 0) {\n intersectionPosInfos.push({\n pos: point,\n line: line,\n type: \"intersection\"\n });\n }\n });\n }\n });\n\n if (!excludeLine) {\n // on line\n if (find(intersectionPosInfos, function (p) {\n return p[0] === x;\n })) {\n return true;\n }\n }\n\n var intersectionCount = 0;\n var xMap = {};\n intersectionPosInfos.forEach(function (_a) {\n var pos = _a.pos,\n type = _a.type,\n line = _a.line;\n\n if (pos[0] > x) {\n return;\n }\n\n if (type === \"intersection\") {\n ++intersectionCount;\n } else if (type === \"line\") {\n return;\n } else if (type === \"point\") {\n var point = find(line, function (linePoint) {\n return linePoint[1] !== y;\n });\n var prevValue = xMap[pos[0]];\n var nextValue = point[1] > y ? 1 : -1;\n\n if (!prevValue) {\n xMap[pos[0]] = nextValue;\n } else if (prevValue !== nextValue) {\n ++intersectionCount;\n }\n }\n });\n return intersectionCount % 2 === 1;\n}\n/**\n * Get distance from point to constants. [a, b, c] (ax + by + c = 0)\n * @return [a, b, c]\n * @memberof OverlapArea\n */\n\nfunction getDistanceFromPointToConstants(_a, pos) {\n var a = _a[0],\n b = _a[1],\n c = _a[2];\n return (a * pos[0] + b * pos[1] + c) / (a * a + b * b);\n}\n/**\n * Get the coefficient of the linear function. [a, b, c] (ax + by + c = 0)\n * @return [a, b, c]\n * @memberof OverlapArea\n */\n\nfunction getLinearConstants(point1, point2) {\n var x1 = point1[0],\n y1 = point1[1];\n var x2 = point2[0],\n y2 = point2[1]; // ax + by + c = 0\n // [a, b, c]\n\n var dx = x2 - x1;\n var dy = y2 - y1;\n\n if (Math.abs(dx) < TINY_NUM) {\n dx = 0;\n }\n\n if (Math.abs(dy) < TINY_NUM) {\n dy = 0;\n } // b > 0\n // ax + by + c = 0\n\n\n var a = 0;\n var b = 0;\n var c = 0;\n\n if (!dx) {\n if (dy) {\n // -x + 1 = 0\n a = -1;\n c = x1;\n }\n } else if (!dy) {\n // y - 1 = 0\n b = 1;\n c = -y1;\n } else {\n // y = -a(x - x1) + y1\n // ax + y + a * x1 - y1 = 0\n a = -dy / dx;\n b = 1;\n c = -a * x1 - y1;\n }\n\n return [a, b, c];\n}\n/**\n * Get intersection points with linear functions.\n * @memberof OverlapArea\n */\n\nfunction getIntersectionPointsByConstants(linearConstants1, linearConstants2) {\n var a1 = linearConstants1[0],\n b1 = linearConstants1[1],\n c1 = linearConstants1[2];\n var a2 = linearConstants2[0],\n b2 = linearConstants2[1],\n c2 = linearConstants2[2];\n var isZeroA = a1 === 0 && a2 === 0;\n var isZeroB = b1 === 0 && b2 === 0;\n var results = [];\n\n if (isZeroA && isZeroB) {\n return [];\n } else if (isZeroA) {\n // b1 * y + c1 = 0\n // b2 * y + c2 = 0\n var y1 = -c1 / b1;\n var y2 = -c2 / b2;\n\n if (y1 !== y2) {\n return [];\n } else {\n return [[-Infinity, y1], [Infinity, y1]];\n }\n } else if (isZeroB) {\n // a1 * x + c1 = 0\n // a2 * x + c2 = 0\n var x1 = -c1 / a1;\n var x2 = -c2 / a2;\n\n if (x1 !== x2) {\n return [];\n } else {\n return [[x1, -Infinity], [x1, Infinity]];\n }\n } else if (a1 === 0) {\n // b1 * y + c1 = 0\n // y = - c1 / b1;\n // a2 * x + b2 * y + c2 = 0\n var y = -c1 / b1;\n var x = -(b2 * y + c2) / a2;\n results = [[x, y]];\n } else if (a2 === 0) {\n // b2 * y + c2 = 0\n // y = - c2 / b2;\n // a1 * x + b1 * y + c1 = 0\n var y = -c2 / b2;\n var x = -(b1 * y + c1) / a1;\n results = [[x, y]];\n } else if (b1 === 0) {\n // a1 * x + c1 = 0\n // x = - c1 / a1;\n // a2 * x + b2 * y + c2 = 0\n var x = -c1 / a1;\n var y = -(a2 * x + c2) / b2;\n results = [[x, y]];\n } else if (b2 === 0) {\n // a2 * x + c2 = 0\n // x = - c2 / a2;\n // a1 * x + b1 * y + c1 = 0\n var x = -c2 / a2;\n var y = -(a1 * x + c1) / b1;\n results = [[x, y]];\n } else {\n // a1 * x + b1 * y + c1 = 0\n // a2 * x + b2 * y + c2 = 0\n // b2 * a1 * x + b2 * b1 * y + b2 * c1 = 0\n // b1 * a2 * x + b1 * b2 * y + b1 * c2 = 0\n // (b2 * a1 - b1 * a2) * x = (b1 * c2 - b2 * c1)\n var x = (b1 * c2 - b2 * c1) / (b2 * a1 - b1 * a2);\n var y = -(a1 * x + c1) / b1;\n results = [[x, y]];\n }\n\n return results.map(function (result) {\n return [result[0], result[1]];\n });\n}\n/**\n * Get intersection points to the two lines.\n * @memberof OverlapArea\n */\n\nfunction getIntersectionPoints(line1, line2, isLimit) {\n var points = getIntersectionPointsByConstants(getLinearConstants(line1[0], line1[1]), getLinearConstants(line2[0], line2[1]));\n\n if (isLimit) {\n return getPointsOnLines(points, [line1, line2]);\n }\n\n return points;\n}\nfunction isPointOnLine(pos, line) {\n var linearConstants = getLinearConstants(line[0], line[1]);\n return tinyThrottle(getDistanceFromPointToConstants(linearConstants, pos)) === 0;\n}\n/**\n * Get the points on the lines (between two points).\n * @memberof OverlapArea\n */\n\nfunction getPointsOnLines(points, lines) {\n var minMaxs = lines.map(function (line) {\n return [0, 1].map(function (order) {\n return [Math.min(line[0][order], line[1][order]), Math.max(line[0][order], line[1][order])];\n });\n });\n var results = [];\n\n if (points.length === 2) {\n var _a = points[0],\n x = _a[0],\n y = _a[1];\n\n if (!tinyThrottle(x - points[1][0])) {\n /// Math.max(minY1, minY2)\n var top = Math.max.apply(Math, minMaxs.map(function (minMax) {\n return minMax[1][0];\n })); /// Math.min(maxY1, miax2)\n\n var bottom = Math.min.apply(Math, minMaxs.map(function (minMax) {\n return minMax[1][1];\n }));\n\n if (tinyThrottle(top - bottom) > 0) {\n return [];\n }\n\n results = [[x, top], [x, bottom]];\n } else if (!tinyThrottle(y - points[1][1])) {\n /// Math.max(minY1, minY2)\n var left = Math.max.apply(Math, minMaxs.map(function (minMax) {\n return minMax[0][0];\n })); /// Math.min(maxY1, miax2)\n\n var right = Math.min.apply(Math, minMaxs.map(function (minMax) {\n return minMax[0][1];\n }));\n\n if (tinyThrottle(left - right) > 0) {\n return [];\n }\n\n results = [[left, y], [right, y]];\n }\n }\n\n if (!results.length) {\n results = points.filter(function (point) {\n var pointX = point[0],\n pointY = point[1];\n return minMaxs.every(function (minMax) {\n return 0 <= tinyThrottle(pointX - minMax[0][0]) && 0 <= tinyThrottle(minMax[0][1] - pointX) && 0 <= tinyThrottle(pointY - minMax[1][0]) && 0 <= tinyThrottle(minMax[1][1] - pointY);\n });\n });\n }\n\n return results.map(function (result) {\n return [tinyThrottle(result[0]), tinyThrottle(result[1])];\n });\n}\n/**\n* Convert two points into lines.\n* @function\n* @memberof OverlapArea\n*/\n\nfunction convertLines(points) {\n return __spreadArrays(points.slice(1), [points[0]]).map(function (point, i) {\n return [points[i], point];\n });\n}\n\nfunction getOverlapPointInfos(points1, points2) {\n var targetPoints1 = points1.slice();\n var targetPoints2 = points2.slice();\n\n if (getShapeDirection(targetPoints1) === -1) {\n targetPoints1.reverse();\n }\n\n if (getShapeDirection(targetPoints2) === -1) {\n targetPoints2.reverse();\n }\n\n var lines1 = convertLines(targetPoints1);\n var lines2 = convertLines(targetPoints2);\n var linearConstantsList1 = lines1.map(function (line1) {\n return getLinearConstants(line1[0], line1[1]);\n });\n var linearConstantsList2 = lines2.map(function (line2) {\n return getLinearConstants(line2[0], line2[1]);\n });\n var overlapInfos = [];\n linearConstantsList1.forEach(function (linearConstants1, i) {\n var line1 = lines1[i];\n var linePointInfos = [];\n linearConstantsList2.forEach(function (linearConstants2, j) {\n var intersectionPoints = getIntersectionPointsByConstants(linearConstants1, linearConstants2);\n var points = getPointsOnLines(intersectionPoints, [line1, lines2[j]]);\n linePointInfos.push.apply(linePointInfos, points.map(function (pos) {\n return {\n index1: i,\n index2: j,\n pos: pos,\n type: \"intersection\"\n };\n }));\n });\n linePointInfos.sort(function (a, b) {\n return getDist(line1[0], a.pos) - getDist(line1[0], b.pos);\n });\n overlapInfos.push.apply(overlapInfos, linePointInfos);\n\n if (isInside(line1[1], targetPoints2)) {\n overlapInfos.push({\n index1: i,\n index2: -1,\n pos: line1[1],\n type: \"inside\"\n });\n }\n });\n lines2.forEach(function (line2, i) {\n if (!isInside(line2[1], targetPoints1)) {\n return;\n }\n\n var isNext = false;\n var index = findIndex(overlapInfos, function (_a) {\n var index2 = _a.index2;\n\n if (index2 === i) {\n isNext = true;\n return false;\n }\n\n if (isNext) {\n return true;\n }\n\n return false;\n });\n\n if (index === -1) {\n isNext = false;\n index = findIndex(overlapInfos, function (_a) {\n var index1 = _a.index1,\n index2 = _a.index2;\n\n if (index1 === -1 && index2 + 1 === i) {\n isNext = true;\n return false;\n }\n\n if (isNext) {\n return true;\n }\n\n return false;\n });\n }\n\n if (index === -1) {\n overlapInfos.push({\n index1: -1,\n index2: i,\n pos: line2[1],\n type: \"inside\"\n });\n } else {\n overlapInfos.splice(index, 0, {\n index1: -1,\n index2: i,\n pos: line2[1],\n type: \"inside\"\n });\n }\n });\n var pointMap = {};\n return overlapInfos.filter(function (_a) {\n var pos = _a.pos;\n var key = pos[0] + \"x\" + pos[1];\n\n if (pointMap[key]) {\n return false;\n }\n\n pointMap[key] = true;\n return true;\n });\n}\n/**\n* Get the points of the overlapped part of two shapes.\n* @function\n* @memberof OverlapArea\n*/\n\n\nfunction getOverlapPoints(points1, points2) {\n var infos = getOverlapPointInfos(points1, points2);\n return infos.map(function (_a) {\n var pos = _a.pos;\n return pos;\n });\n}\n\nfunction isConnectedLine(line) {\n var _a = line[0],\n prevIndex1 = _a.index1,\n prevIndex2 = _a.index2,\n _b = line[1],\n nextIndex1 = _b.index1,\n nextIndex2 = _b.index2;\n\n if (prevIndex1 !== -1) {\n // same line\n if (prevIndex1 === nextIndex1) {\n return true;\n }\n\n if (prevIndex1 + 1 === nextIndex1) {\n return true;\n }\n }\n\n if (prevIndex2 !== -1) {\n // same line\n if (prevIndex2 === nextIndex2) {\n return true;\n }\n\n if (prevIndex2 + 1 === nextIndex2) {\n return true;\n }\n }\n\n return false;\n}\n/**\n* Get the areas of the overlapped part of two shapes.\n* @function\n* @memberof OverlapArea\n*/\n\n\nfunction getOverlapAreas(points1, points2) {\n var infos = getOverlapPointInfos(points1, points2);\n var areas = [];\n var area;\n getOverlapPointInfos(points1, points2).forEach(function (info, i, arr) {\n if (i === 0 || !isConnectedLine([arr[i - 1], info])) {\n area = [info];\n areas.push(area);\n } else {\n area.push(info);\n }\n });\n return areas.map(function (area) {\n return area.map(function (_a) {\n var pos = _a.pos;\n return pos;\n });\n });\n}\n\nfunction findReversedAreas(points1, points2, index, areas) {\n if (index === void 0) {\n index = 0;\n }\n\n if (areas === void 0) {\n areas = [];\n }\n\n var isFirst = areas.length === 0;\n var length = points1.length;\n var nextIndex = points1[index] ? index : 0;\n\n var nextPoints1 = __spreadArrays(points1.slice(nextIndex), points1.slice(0, nextIndex));\n\n var _loop_1 = function (i) {\n var point1 = nextPoints1[i];\n\n if (find(points2, function (point2) {\n return point2[0] === point1[0] && point2[1] === point1[1];\n })) {\n return \"continue\";\n }\n\n if (areas.some(function (nextArea) {\n return find(nextArea, function (areaPoint) {\n return areaPoint[0] === point1[0] && areaPoint[1] === point1[1];\n });\n })) {\n if (isFirst) {\n return \"continue\";\n } else {\n return \"break\";\n }\n }\n\n var nextArea = void 0;\n\n if (isFirst) {\n nextArea = [];\n areas.push(nextArea);\n } else {\n nextArea = areas[areas.length - 1];\n }\n\n nextArea.push(point1);\n var line = [point1, points1[index + 1] || points1[0]];\n var nextPoint2 = points2.filter(function (point2) {\n return isPointOnLine(point2, line);\n }).sort(function (a, b) {\n return getDist(point1, a) - getDist(point1, b);\n })[0];\n\n if (!nextPoint2) {\n findReversedAreas(nextPoints1, points2, i + 1, areas);\n return \"break\";\n } else {\n var point2Index = points2.indexOf(nextPoint2);\n findReversedAreas(points2, points1, point2Index, areas);\n\n if (!isFirst) {\n return \"break\";\n }\n }\n };\n\n for (var i = 0; i < length; ++i) {\n var state_1 = _loop_1(i);\n\n if (state_1 === \"break\") break;\n }\n\n return areas;\n}\n\nfunction findConnectedAreas(points1, points2) {\n return findReversedAreas(points1, __spreadArrays(points2).reverse());\n}\n/**\n* Get non-overlapping areas of two shapes based on points1.\n* @memberof OverlapArea\n*/\n\nfunction getUnoverlapAreas(points1, points2) {\n if (!points2.length) {\n return [__spreadArrays(points1)];\n }\n\n var overlapAreas = getOverlapAreas(points1, points2);\n var unoverlapAreas = [points1];\n overlapAreas.forEach(function (overlapArea) {\n var nextOverlapArea = __spreadArrays(overlapArea).reverse();\n\n unoverlapAreas = flat(unoverlapAreas.map(function (area) {\n var connectedAreas = findReversedAreas(area, nextOverlapArea);\n var firstConnectedArea = connectedAreas[0];\n\n if (connectedAreas.length === 1 && nextOverlapArea.every(function (point) {\n return firstConnectedArea.indexOf(point) === -1;\n })) {\n var lastPoint_1 = firstConnectedArea[firstConnectedArea.length - 1];\n\n var firstPoint = __spreadArrays(nextOverlapArea).sort(function (a, b) {\n return getDist(lastPoint_1, a) - getDist(lastPoint_1, b);\n })[0];\n\n var firstIndex = nextOverlapArea.indexOf(firstPoint);\n firstConnectedArea.push.apply(firstConnectedArea, __spreadArrays(nextOverlapArea.slice(firstIndex), nextOverlapArea.slice(0, firstIndex), [nextOverlapArea[firstIndex], lastPoint_1]));\n }\n\n return connectedAreas;\n }));\n });\n return unoverlapAreas;\n}\n/**\n* Gets the size of the overlapped part of two shapes.\n* @function\n* @memberof OverlapArea\n*/\n\nfunction getOverlapSize(points1, points2) {\n var points = getOverlapPoints(points1, points2);\n return getAreaSize(points);\n}\n\nexport { convertLines, findConnectedAreas, fitPoints, getAreaSize, getDistanceFromPointToConstants, getIntersectionPoints, getIntersectionPointsByConstants, getLinearConstants, getMinMaxs, getOverlapAreas, getOverlapPoints, getOverlapSize, getPointsOnLines, getUnoverlapAreas, isInside, isPointOnLine };\n//# sourceMappingURL=overlap-area.esm.js.map\n","/*\nCopyright (c) Daybrush\nname: croact-css-styled\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/css-styled.git\nversion: 1.1.9\n*/\nimport cssStyled from 'css-styled';\nimport { version, createElement, forwardRef, useRef, useImperativeHandle, useEffect, Component } from 'croact';\nimport { ref } from 'framework-utils';\n\n/*\nCopyright (c) 2019 Daybrush\nname: react-css-styled\nlicense: MIT\nauthor: Daybrush\nrepository: https://github.com/daybrush/css-styled/tree/master/packages/react-css-styled\nversion: 1.1.9\n*/\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n/* global Reflect, Promise */\n\nvar extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n };\n return extendStatics(d, b);\n};\nfunction __extends(d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() {\n this.constructor = d;\n }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nvar __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nfunction __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nvar StyledElement = /*#__PURE__*/function (_super) {\n __extends(StyledElement, _super);\n function StyledElement() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.injectResult = null;\n _this.tag = \"div\";\n return _this;\n }\n var __proto = StyledElement.prototype;\n __proto.render = function () {\n var _a = this.props,\n _b = _a.className,\n className = _b === void 0 ? \"\" : _b,\n cspNonce = _a.cspNonce,\n portalContainer = _a.portalContainer,\n attributes = __rest(_a, [\"className\", \"cspNonce\", \"portalContainer\"]);\n var cssId = this.injector.className;\n var Tag = this.tag;\n var portalAttributes = {};\n if ((version || \"\").indexOf(\"simple\") > -1 && portalContainer) {\n portalAttributes = {\n portalContainer: portalContainer\n };\n }\n return createElement(Tag, __assign(__assign({\n \"ref\": ref(this, \"element\"),\n \"data-styled-id\": cssId,\n \"className\": \"\".concat(className, \" \").concat(cssId)\n }, portalAttributes), attributes));\n };\n __proto.componentDidMount = function () {\n this.injectResult = this.injector.inject(this.element, {\n nonce: this.props.cspNonce\n });\n };\n __proto.componentWillUnmount = function () {\n this.injectResult.destroy();\n this.injectResult = null;\n };\n __proto.getElement = function () {\n return this.element;\n };\n return StyledElement;\n}(Component);\nfunction defaultStyled(tag, css) {\n var injector = cssStyled(css);\n return /*#__PURE__*/function (_super) {\n __extends(Styled, _super);\n function Styled() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.injector = injector;\n _this.tag = tag;\n return _this;\n }\n return Styled;\n }(StyledElement);\n}\nfunction styled(Tag, css) {\n var injector = cssStyled(css);\n var cssId = injector.className;\n return forwardRef(function (props, ref) {\n var _a = props.className,\n className = _a === void 0 ? \"\" : _a,\n cspNonce = props.cspNonce,\n attributes = __rest(props, [\"className\", \"cspNonce\"]);\n var targetRef = useRef();\n useImperativeHandle(ref, function () {\n return targetRef.current;\n }, []);\n useEffect(function () {\n var injectResult = injector.inject(targetRef.current, {\n nonce: props.cspNonce\n });\n return function () {\n injectResult.destroy();\n };\n }, []);\n return createElement(Tag, __assign({\n \"ref\": targetRef,\n \"data-styled-id\": cssId,\n \"className\": \"\".concat(className, \" \").concat(cssId)\n }, attributes));\n });\n}\n\nexport default defaultStyled;\nexport { StyledElement, styled };\n","/*\nCopyright (c) 2019 Daybrush\nname: croact-moveable\nlicense: MIT\nauthor: Daybrush\nrepository: https://github.com/daybrush/moveable/blob/master/packages/croact-moveable\nversion: 0.9.0\n*/\nimport getAgent from '@egjs/agent';\nimport { prefixNames, prefixCSS, ref, withMethods, refs } from 'framework-utils';\nimport { getRad, throttle, throttleArray, isString, calculateBoundSize, getKeys, isArray, hasClass, getDist as getDist$1, isObject, decamelize, convertUnitSize, pushSet, find, findIndex, splitSpace, isNumber, isNode, isFunction, isWindow, counter, dot, addClass, requestAnimationFrame, splitBracket, splitComma, splitUnit, cancelAnimationFrame, removeClass, getWindow, TINY_NUM as TINY_NUM$1, flat as flat$1, isUndefined, getDocumentBody, between, getDocumentElement, average } from '@daybrush/utils';\nimport { plus, minus, convertDimension, calculate, convertPositionMatrix, ignoreDimension, invert, createIdentityMatrix, createWarpMatrix, multiply, fromTranslation, createRotateMatrix, getOrigin, rotate, multiplies, createOriginMatrix, convertMatrixtoCSS, createScaleMatrix, convertCSStoMatrix } from '@scena/matrix';\nimport { parseMat, parse, toMat, calculateMatrixDist } from 'css-to-mat';\nimport ChildrenDiffer, { diff } from '@egjs/children-differ';\nimport DragScroll from '@scena/dragscroll';\nimport { getMinMaxs, fitPoints, getOverlapSize, getAreaSize, isInside, getIntersectionPointsByConstants } from 'overlap-area';\nimport * as React from 'croact';\nimport { createElement } from 'croact';\nimport Gesto from 'gesto';\nimport { styled } from 'croact-css-styled';\nimport EventEmitter from '@scena/event-emitter';\nimport { diff as diff$1 } from '@egjs/list-differ';\n\n/*\nCopyright (c) 2019 Daybrush\nname: react-moveable\nlicense: MIT\nauthor: Daybrush\nrepository: https://github.com/daybrush/moveable/blob/master/packages/react-moveable\nversion: 0.56.0\n*/\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nfunction __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\n\nfunction makeAble(name, able) {\r\n return __assign({ events: [], props: [], name: name }, able);\r\n}\n\nvar DIRECTIONS4 = [\"n\", \"w\", \"s\", \"e\"];\r\nvar DIRECTIONS = [\"n\", \"w\", \"s\", \"e\", \"nw\", \"ne\", \"sw\", \"se\"];\r\nfunction getSVGCursor(scale, degree) {\r\n return \"data:image/svg+xml;utf8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"\".concat(32 * scale, \"px\\\" height=\\\"\").concat(32 * scale, \"px\\\" viewBox=\\\"0 0 32 32\\\" ><path d=\\\"M 16,5 L 12,10 L 14.5,10 L 14.5,22 L 12,22 L 16,27 L 20,22 L 17.5,22 L 17.5,10 L 20, 10 L 16,5 Z\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"1.2\\\" fill=\\\"black\\\" stroke=\\\"white\\\" style=\\\"transform:rotate(\").concat(degree, \"deg);transform-origin: 16px 16px\\\"></path></svg>\");\r\n}\r\nfunction getCursorCSS(degree) {\r\n var x1 = getSVGCursor(1, degree);\r\n // const x2 = getSVGCursor(2, degree);\r\n var degree45 = (Math.round(degree / 45) * 45) % 180;\r\n var defaultCursor = \"ns-resize\";\r\n if (degree45 === 135) {\r\n defaultCursor = \"nwse-resize\";\r\n }\r\n else if (degree45 === 45) {\r\n defaultCursor = \"nesw-resize\";\r\n }\r\n else if (degree45 === 90) {\r\n defaultCursor = \"ew-resize\";\r\n }\r\n // tslint:disable-next-line: max-line-length\r\n return \"cursor:\".concat(defaultCursor, \";cursor: url('\").concat(x1, \"') 16 16, \").concat(defaultCursor, \";\");\r\n}\r\nvar agent = getAgent();\r\nvar IS_WEBKIT = agent.browser.webkit;\r\nvar IS_WEBKIT605 = IS_WEBKIT && (function () {\r\n var navi = typeof window === \"undefined\" ? { userAgent: \"\" } : window.navigator;\r\n var res = /applewebkit\\/([^\\s]+)/g.exec(navi.userAgent.toLowerCase());\r\n return res ? parseFloat(res[1]) < 605 : false;\r\n})();\r\nvar browserName = agent.browser.name;\r\nvar browserVersion = parseInt(agent.browser.version, 10);\r\nvar IS_CHROME = browserName === \"chrome\";\r\nvar IS_CHROMIUM = agent.browser.chromium;\r\nvar chromiumVersion = parseInt(agent.browser.chromiumVersion, 10) || 0;\r\nvar IS_CHROMIUM109 = (IS_CHROME && browserVersion >= 109)\r\n || (IS_CHROMIUM && chromiumVersion >= 109);\r\nvar IS_FIREFOX = browserName === \"firefox\";\r\nvar IS_SAFARI_ABOVE15 = parseInt(agent.browser.webkitVersion, 10) >= 612\r\n || browserVersion >= 15;\r\nvar PREFIX = \"moveable-\";\r\nvar directionCSS = DIRECTIONS.map(function (dir) {\r\n var top = \"\";\r\n var left = \"\";\r\n var originX = \"center\";\r\n var originY = \"center\";\r\n var offset = \"calc(var(--moveable-control-padding, 20) * -1px)\";\r\n if (dir.indexOf(\"n\") > -1) {\r\n top = \"top: \".concat(offset, \";\");\r\n originY = \"bottom\";\r\n }\r\n if (dir.indexOf(\"s\") > -1) {\r\n top = \"top: 0px;\";\r\n originY = \"top\";\r\n }\r\n if (dir.indexOf(\"w\") > -1) {\r\n left = \"left: \".concat(offset, \";\");\r\n originX = \"right\";\r\n }\r\n if (dir.indexOf(\"e\") > -1) {\r\n left = \"left: 0px;\";\r\n originX = \"left\";\r\n }\r\n return \".around-control[data-direction*=\\\"\".concat(dir, \"\\\"] {\\n \").concat(left).concat(top, \"\\n transform-origin: \").concat(originX, \" \").concat(originY, \";\\n }\");\r\n}).join(\"\\n\");\r\nvar MOVEABLE_CSS = \"\\n{\\nposition: absolute;\\nwidth: 1px;\\nheight: 1px;\\nleft: 0;\\ntop: 0;\\nz-index: 3000;\\n--moveable-color: #4af;\\n--zoom: 1;\\n--zoompx: 1px;\\n--moveable-line-padding: 0;\\n--moveable-control-padding: 0;\\nwill-change: transform;\\noutline: 1px solid transparent;\\n}\\n.control-box {\\nz-index: 0;\\n}\\n.line, .control {\\nposition: absolute;\\nleft: 0;\\ntop: 0;\\nwill-change: transform;\\n}\\n.control {\\nwidth: 14px;\\nheight: 14px;\\nborder-radius: 50%;\\nborder: 2px solid #fff;\\nbox-sizing: border-box;\\nbackground: #4af;\\nbackground: var(--moveable-color);\\nmargin-top: -7px;\\nmargin-left: -7px;\\nborder: 2px solid #fff;\\nz-index: 10;\\n}\\n.around-control {\\nposition: absolute;\\nwill-change: transform;\\nwidth: calc(var(--moveable-control-padding, 20) * 1px);\\nheight: calc(var(--moveable-control-padding, 20) * 1px);\\nleft: calc(var(--moveable-control-padding, 20) * -0.5px);\\ntop: calc(var(--moveable-control-padding, 20) * -0.5px);\\nbox-sizing: border-box;\\nbackground: transparent;\\nz-index: 8;\\ncursor: alias;\\ntransform-origin: center center;\\n}\\n\".concat(directionCSS, \"\\n.padding {\\nposition: absolute;\\ntop: 0px;\\nleft: 0px;\\nwidth: 100px;\\nheight: 100px;\\ntransform-origin: 0 0;\\n}\\n.line {\\nwidth: 1px;\\nheight: 1px;\\nbackground: #4af;\\nbackground: var(--moveable-color);\\ntransform-origin: 0px 50%;\\n}\\n.line.edge {\\nz-index: 1;\\nbackground: transparent;\\n}\\n.line.dashed {\\nbox-sizing: border-box;\\nbackground: transparent;\\n}\\n.line.dashed.horizontal {\\nborder-top: 1px dashed #4af;\\nborder-top-color: #4af;\\nborder-top-color: var(--moveable-color);\\n}\\n.line.dashed.vertical {\\nborder-left: 1px dashed #4af;\\nborder-left-color: #4af;\\nborder-left-color: var(--moveable-color);\\n}\\n.line.vertical {\\ntransform: translateX(-50%);\\n}\\n.line.horizontal {\\ntransform: translateY(-50%);\\n}\\n.line.vertical.bold {\\nwidth: 2px;\\n}\\n.line.horizontal.bold {\\nheight: 2px;\\n}\\n\\n.control.origin {\\nborder-color: #f55;\\nbackground: #fff;\\nwidth: 12px;\\nheight: 12px;\\nmargin-top: -6px;\\nmargin-left: -6px;\\npointer-events: none;\\n}\\n\").concat([0, 15, 30, 45, 60, 75, 90, 105, 120, 135, 150, 165].map(function (degree) { return \"\\n.direction[data-rotation=\\\"\".concat(degree, \"\\\"], :global .view-control-rotation\").concat(degree, \" {\\n\").concat(getCursorCSS(degree), \"\\n}\\n\"); }).join(\"\\n\"), \"\\n\\n.line.direction:before {\\ncontent: \\\"\\\";\\nposition: absolute;\\nwidth: 100%;\\nheight: calc(var(--moveable-line-padding, 0) * 1px);\\nbottom: 0;\\nleft: 0;\\n}\\n.group {\\nz-index: -1;\\n}\\n.area {\\nposition: absolute;\\n}\\n.area-pieces {\\nposition: absolute;\\ntop: 0;\\nleft: 0;\\ndisplay: none;\\n}\\n.area.avoid, .area.pass {\\npointer-events: none;\\n}\\n.area.avoid+.area-pieces {\\ndisplay: block;\\n}\\n.area-piece {\\nposition: absolute;\\n}\\n\\n\").concat(IS_WEBKIT605 ? \":global svg *:before {\\ncontent:\\\"\\\";\\ntransform-origin: inherit;\\n}\" : \"\", \"\\n\");\r\nvar NEARBY_POS = [\r\n [0, 1, 2],\r\n [1, 0, 3],\r\n [2, 0, 3],\r\n [3, 1, 2],\r\n];\r\nvar FLOAT_POINT_NUM = 0.0001;\r\nvar TINY_NUM = 0.0000001;\r\nvar MIN_SCALE = 0.000000001;\r\nvar MAX_NUM = Math.pow(10, 10);\r\nvar MIN_NUM = -MAX_NUM;\r\nvar DIRECTION_REGION_TO_DIRECTION = {\r\n n: [0, -1],\r\n e: [1, 0],\r\n s: [0, 1],\r\n w: [-1, 0],\r\n nw: [-1, -1],\r\n ne: [1, -1],\r\n sw: [-1, 1],\r\n se: [1, 1],\r\n};\r\nvar DIRECTION_INDEXES = {\r\n n: [0, 1],\r\n e: [1, 3],\r\n s: [3, 2],\r\n w: [2, 0],\r\n nw: [0],\r\n ne: [1],\r\n sw: [2],\r\n se: [3],\r\n};\r\nvar DIRECTION_ROTATIONS = {\r\n n: 0,\r\n s: 180,\r\n w: 270,\r\n e: 90,\r\n nw: 315,\r\n ne: 45,\r\n sw: 225,\r\n se: 135,\r\n};\r\nvar MOVEABLE_METHODS = [\r\n \"isMoveableElement\",\r\n \"updateRect\",\r\n \"updateTarget\",\r\n \"destroy\",\r\n \"dragStart\",\r\n \"isInside\",\r\n \"hitTest\",\r\n \"setState\",\r\n \"getRect\",\r\n \"request\",\r\n \"isDragging\",\r\n \"getManager\",\r\n \"forceUpdate\",\r\n \"waitToChangeTarget\",\r\n \"updateSelectors\",\r\n \"getTargets\",\r\n \"stopDrag\",\r\n \"getControlBoxElement\",\r\n \"getMoveables\",\r\n \"getDragElement\",\r\n];\n\nfunction setCustomDrag(e, state, delta, isPinch, isConvert, ableName) {\r\n var _a, _b;\r\n if (ableName === void 0) { ableName = \"draggable\"; }\r\n var result = (_b = (_a = state.gestos[ableName]) === null || _a === void 0 ? void 0 : _a.move(delta, e.inputEvent)) !== null && _b !== void 0 ? _b : {};\r\n var datas = result.originalDatas || result.datas;\r\n var ableDatas = datas[ableName] || (datas[ableName] = {});\r\n return __assign(__assign({}, (isConvert ? convertDragDist(state, result) : result)), { isPinch: !!isPinch, parentEvent: true, datas: ableDatas, originalDatas: e.originalDatas });\r\n}\r\nvar CustomGesto = /*#__PURE__*/ (function () {\r\n function CustomGesto(ableName) {\r\n var _a;\r\n if (ableName === void 0) { ableName = \"draggable\"; }\r\n this.ableName = ableName;\r\n this.prevX = 0;\r\n this.prevY = 0;\r\n this.startX = 0;\r\n this.startY = 0;\r\n this.isDrag = false;\r\n this.isFlag = false;\r\n this.datas = {\r\n draggable: {},\r\n };\r\n this.datas = (_a = {},\r\n _a[ableName] = {},\r\n _a);\r\n }\r\n CustomGesto.prototype.dragStart = function (client, e) {\r\n this.isDrag = false;\r\n this.isFlag = false;\r\n var originalDatas = e.originalDatas;\r\n this.datas = originalDatas;\r\n if (!originalDatas[this.ableName]) {\r\n originalDatas[this.ableName] = {};\r\n }\r\n return __assign(__assign({}, this.move(client, e.inputEvent)), { type: \"dragstart\" });\r\n };\r\n CustomGesto.prototype.drag = function (client, inputEvent) {\r\n return this.move([\r\n client[0] - this.prevX,\r\n client[1] - this.prevY,\r\n ], inputEvent);\r\n };\r\n CustomGesto.prototype.move = function (delta, inputEvent) {\r\n var clientX;\r\n var clientY;\r\n var isFirstDrag = false;\r\n if (!this.isFlag) {\r\n this.prevX = delta[0];\r\n this.prevY = delta[1];\r\n this.startX = delta[0];\r\n this.startY = delta[1];\r\n clientX = delta[0];\r\n clientY = delta[1];\r\n this.isFlag = true;\r\n }\r\n else {\r\n var isPrevDrag = this.isDrag;\r\n clientX = this.prevX + delta[0];\r\n clientY = this.prevY + delta[1];\r\n if (delta[0] || delta[1]) {\r\n this.isDrag = true;\r\n }\r\n if (!isPrevDrag && this.isDrag) {\r\n isFirstDrag = true;\r\n }\r\n }\r\n this.prevX = clientX;\r\n this.prevY = clientY;\r\n return {\r\n type: \"drag\",\r\n clientX: clientX,\r\n clientY: clientY,\r\n inputEvent: inputEvent,\r\n isFirstDrag: isFirstDrag,\r\n isDrag: this.isDrag,\r\n distX: clientX - this.startX,\r\n distY: clientY - this.startY,\r\n deltaX: delta[0],\r\n deltaY: delta[1],\r\n datas: this.datas[this.ableName],\r\n originalDatas: this.datas,\r\n parentEvent: true,\r\n parentGesto: this,\r\n };\r\n };\r\n return CustomGesto;\r\n}());\n\nfunction calculateElementPosition(matrix, origin, width, height) {\r\n var is3d = matrix.length === 16;\r\n var n = is3d ? 4 : 3;\r\n var poses = calculatePoses(matrix, width, height, n);\r\n var _a = __read(poses, 4), _b = __read(_a[0], 2), x1 = _b[0], y1 = _b[1], _c = __read(_a[1], 2), x2 = _c[0], y2 = _c[1], _d = __read(_a[2], 2), x3 = _d[0], y3 = _d[1], _e = __read(_a[3], 2), x4 = _e[0], y4 = _e[1];\r\n var _f = __read(calculatePosition(matrix, origin, n), 2), originX = _f[0], originY = _f[1];\r\n var left = Math.min(x1, x2, x3, x4);\r\n var top = Math.min(y1, y2, y3, y4);\r\n var right = Math.max(x1, x2, x3, x4);\r\n var bottom = Math.max(y1, y2, y3, y4);\r\n x1 = (x1 - left) || 0;\r\n x2 = (x2 - left) || 0;\r\n x3 = (x3 - left) || 0;\r\n x4 = (x4 - left) || 0;\r\n y1 = (y1 - top) || 0;\r\n y2 = (y2 - top) || 0;\r\n y3 = (y3 - top) || 0;\r\n y4 = (y4 - top) || 0;\r\n originX = (originX - left) || 0;\r\n originY = (originY - top) || 0;\r\n var sx = matrix[0];\r\n var sy = matrix[n + 1];\r\n var direction = sign(sx * sy);\r\n return {\r\n left: left,\r\n top: top,\r\n right: right,\r\n bottom: bottom,\r\n origin: [originX, originY],\r\n pos1: [x1, y1],\r\n pos2: [x2, y2],\r\n pos3: [x3, y3],\r\n pos4: [x4, y4],\r\n direction: direction,\r\n };\r\n}\n\nfunction calculatePointerDist(moveable, e) {\r\n var clientX = e.clientX, clientY = e.clientY, datas = e.datas;\r\n var _a = moveable.state, moveableClientRect = _a.moveableClientRect, rootMatrix = _a.rootMatrix, is3d = _a.is3d, pos1 = _a.pos1;\r\n var left = moveableClientRect.left, top = moveableClientRect.top;\r\n var n = is3d ? 4 : 3;\r\n var _b = __read(minus(calculateInversePosition(rootMatrix, [clientX - left, clientY - top], n), pos1), 2), posX = _b[0], posY = _b[1];\r\n var _c = __read(getDragDist({ datas: datas, distX: posX, distY: posY }), 2), distX = _c[0], distY = _c[1];\r\n return [distX, distY];\r\n}\r\nfunction setDragStart(moveable, _a) {\r\n var datas = _a.datas;\r\n var _b = moveable.state, allMatrix = _b.allMatrix, beforeMatrix = _b.beforeMatrix, is3d = _b.is3d, left = _b.left, top = _b.top, origin = _b.origin, offsetMatrix = _b.offsetMatrix, targetMatrix = _b.targetMatrix, transformOrigin = _b.transformOrigin;\r\n var n = is3d ? 4 : 3;\r\n datas.is3d = is3d;\r\n datas.matrix = allMatrix;\r\n datas.targetMatrix = targetMatrix;\r\n datas.beforeMatrix = beforeMatrix;\r\n datas.offsetMatrix = offsetMatrix;\r\n datas.transformOrigin = transformOrigin;\r\n datas.inverseMatrix = invert(allMatrix, n);\r\n datas.inverseBeforeMatrix = invert(beforeMatrix, n);\r\n datas.absoluteOrigin = convertPositionMatrix(plus([left, top], origin), n);\r\n datas.startDragBeforeDist = calculate(datas.inverseBeforeMatrix, datas.absoluteOrigin, n);\r\n datas.startDragDist = calculate(datas.inverseMatrix, datas.absoluteOrigin, n);\r\n}\r\nfunction getTransformDirection(e) {\r\n return calculateElementPosition(e.datas.beforeTransform, [50, 50], 100, 100).direction;\r\n}\r\nfunction resolveTransformEvent(moveable, event, functionName) {\r\n var datas = event.datas, originalDatas = event.originalDatas.beforeRenderable;\r\n var index = datas.transformIndex;\r\n var nextTransforms = originalDatas.nextTransforms;\r\n var length = nextTransforms.length;\r\n var nextTransformAppendedIndexes = originalDatas.nextTransformAppendedIndexes;\r\n var nextIndex = -1;\r\n if (index === -1) {\r\n // translate => rotate => scale\r\n if (functionName === \"translate\") {\r\n nextIndex = 0;\r\n }\r\n else if (functionName === \"rotate\") {\r\n nextIndex = findIndex(nextTransforms, function (text) { return text.match(/scale\\(/g); });\r\n }\r\n if (nextIndex === -1) {\r\n nextIndex = nextTransforms.length;\r\n }\r\n datas.transformIndex = nextIndex;\r\n }\r\n else if (find(nextTransformAppendedIndexes, function (info) { return info.index === index && info.functionName === functionName; })) {\r\n nextIndex = index;\r\n }\r\n else {\r\n nextIndex = index + nextTransformAppendedIndexes.filter(function (info) { return info.index < index; }).length;\r\n }\r\n var result = convertTransformInfo(nextTransforms, moveable.state, nextIndex);\r\n var targetFunction = result.targetFunction;\r\n var matFunctionName = functionName === \"rotate\" ? \"rotateZ\" : functionName;\r\n datas.beforeFunctionTexts = result.beforeFunctionTexts;\r\n datas.afterFunctionTexts = result.afterFunctionTexts;\r\n datas.beforeTransform = result.beforeFunctionMatrix;\r\n datas.beforeTransform2 = result.beforeFunctionMatrix2;\r\n datas.targetTansform = result.targetFunctionMatrix;\r\n datas.afterTransform = result.afterFunctionMatrix;\r\n datas.afterTransform2 = result.afterFunctionMatrix2;\r\n datas.targetAllTransform = result.allFunctionMatrix;\r\n if (targetFunction.functionName === matFunctionName) {\r\n datas.afterFunctionTexts.splice(0, 1);\r\n datas.isAppendTransform = false;\r\n }\r\n else if (length > nextIndex) {\r\n datas.isAppendTransform = true;\r\n originalDatas.nextTransformAppendedIndexes = __spreadArray(__spreadArray([], __read(nextTransformAppendedIndexes), false), [{\r\n functionName: functionName,\r\n index: nextIndex,\r\n isAppend: true,\r\n }], false);\r\n }\r\n}\r\nfunction convertTransformFormat(datas, value, dist) {\r\n return \"\".concat(datas.beforeFunctionTexts.join(\" \"), \" \").concat(datas.isAppendTransform ? dist : value, \" \").concat(datas.afterFunctionTexts.join(\" \"));\r\n}\r\nfunction getTransformDist(_a) {\r\n var datas = _a.datas, distX = _a.distX, distY = _a.distY;\r\n var _b = __read(getBeforeDragDist({ datas: datas, distX: distX, distY: distY }), 2), bx = _b[0], by = _b[1];\r\n // B * [tx, ty] * A = [bx, by] * targetMatrix;\r\n // [tx, ty] = B-1 * [bx, by] * targetMatrix * A-1 * [0, 0];\r\n var res = getTransfromMatrix(datas, fromTranslation([bx, by], 4));\r\n return calculate(res, convertPositionMatrix([0, 0, 0], 4), 4);\r\n}\r\nfunction getTransfromMatrix(datas, targetMatrix, isAfter) {\r\n var beforeTransform = datas.beforeTransform, afterTransform = datas.afterTransform, beforeTransform2 = datas.beforeTransform2, afterTransform2 = datas.afterTransform2, targetAllTransform = datas.targetAllTransform;\r\n // B * afterTargetMatrix * A = (targetMatrix * targetAllTransform)\r\n // afterTargetMatrix = B-1 * targetMatrix * targetAllTransform * A-1\r\n // nextTargetMatrix = (targetMatrix * targetAllTransform)\r\n var nextTargetMatrix = isAfter\r\n ? multiply(targetAllTransform, targetMatrix, 4)\r\n : multiply(targetMatrix, targetAllTransform, 4);\r\n // res1 = B-1 * nextTargetMatrix\r\n var res1 = multiply(invert(isAfter ? beforeTransform2 : beforeTransform, 4), nextTargetMatrix, 4);\r\n // res3 = res2 * A-1\r\n var afterTargetMatrix = multiply(res1, invert(isAfter ? afterTransform2 : afterTransform, 4), 4);\r\n return afterTargetMatrix;\r\n}\r\nfunction getBeforeDragDist(_a) {\r\n var datas = _a.datas, distX = _a.distX, distY = _a.distY;\r\n // TT = BT\r\n var inverseBeforeMatrix = datas.inverseBeforeMatrix, is3d = datas.is3d, startDragBeforeDist = datas.startDragBeforeDist, absoluteOrigin = datas.absoluteOrigin;\r\n var n = is3d ? 4 : 3;\r\n // ABS_ORIGIN * [distX, distY] = BM * (ORIGIN + [tx, ty])\r\n // BM -1 * ABS_ORIGIN * [distX, distY] - ORIGIN = [tx, ty]\r\n return minus(calculate(inverseBeforeMatrix, plus(absoluteOrigin, [distX, distY]), n), startDragBeforeDist);\r\n}\r\nfunction getDragDist(_a, isBefore) {\r\n var datas = _a.datas, distX = _a.distX, distY = _a.distY;\r\n var inverseBeforeMatrix = datas.inverseBeforeMatrix, inverseMatrix = datas.inverseMatrix, is3d = datas.is3d, startDragBeforeDist = datas.startDragBeforeDist, startDragDist = datas.startDragDist, absoluteOrigin = datas.absoluteOrigin;\r\n var n = is3d ? 4 : 3;\r\n return minus(calculate(isBefore ? inverseBeforeMatrix : inverseMatrix, plus(absoluteOrigin, [distX, distY]), n), isBefore ? startDragBeforeDist : startDragDist);\r\n}\r\nfunction getInverseDragDist(_a, isBefore) {\r\n var datas = _a.datas, distX = _a.distX, distY = _a.distY;\r\n var beforeMatrix = datas.beforeMatrix, matrix = datas.matrix, is3d = datas.is3d, startDragBeforeDist = datas.startDragBeforeDist, startDragDist = datas.startDragDist, absoluteOrigin = datas.absoluteOrigin;\r\n var n = is3d ? 4 : 3;\r\n return minus(calculate(isBefore ? beforeMatrix : matrix, plus(isBefore ? startDragBeforeDist : startDragDist, [distX, distY]), n), absoluteOrigin);\r\n}\r\nfunction calculateTransformOrigin(transformOrigin, width, height, prevWidth, prevHeight, prevOrigin) {\r\n if (prevWidth === void 0) { prevWidth = width; }\r\n if (prevHeight === void 0) { prevHeight = height; }\r\n if (prevOrigin === void 0) { prevOrigin = [0, 0]; }\r\n if (!transformOrigin) {\r\n return prevOrigin;\r\n }\r\n return transformOrigin.map(function (pos, i) {\r\n var _a = splitUnit(pos), value = _a.value, unit = _a.unit;\r\n var prevSize = (i ? prevHeight : prevWidth);\r\n var size = (i ? height : width);\r\n if (pos === \"%\" || isNaN(value)) {\r\n // no value but %\r\n var measureRatio = prevSize ? prevOrigin[i] / prevSize : 0;\r\n return size * measureRatio;\r\n }\r\n else if (unit !== \"%\") {\r\n return value;\r\n }\r\n return size * value / 100;\r\n });\r\n}\r\nfunction getPosIndexesByDirection(direction) {\r\n var indexes = [];\r\n if (direction[1] >= 0) {\r\n if (direction[0] >= 0) {\r\n indexes.push(3);\r\n }\r\n if (direction[0] <= 0) {\r\n indexes.push(2);\r\n }\r\n }\r\n if (direction[1] <= 0) {\r\n if (direction[0] >= 0) {\r\n indexes.push(1);\r\n }\r\n if (direction[0] <= 0) {\r\n indexes.push(0);\r\n }\r\n }\r\n return indexes;\r\n}\r\nfunction getPosesByDirection(poses, direction) {\r\n /*\r\n [-1, -1](pos1) [0, -1](pos1,pos2) [1, -1](pos2)\r\n [-1, 0](pos1, pos3) [1, 0](pos2, pos4)\r\n [-1, 1](pos3) [0, 1](pos3, pos4) [1, 1](pos4)\r\n */\r\n return getPosIndexesByDirection(direction).map(function (index) { return poses[index]; });\r\n}\r\nfunction getPosBySingleDirection(poses, direction) {\r\n var ratio = (direction + 1) / 2;\r\n return [\r\n dot(poses[0][0], poses[1][0], ratio, 1 - ratio),\r\n dot(poses[0][1], poses[1][1], ratio, 1 - ratio),\r\n ];\r\n}\r\nfunction getPosByDirection(poses, direction) {\r\n var top = getPosBySingleDirection([poses[0], poses[1]], direction[0]);\r\n var bottom = getPosBySingleDirection([poses[2], poses[3]], direction[0]);\r\n return getPosBySingleDirection([top, bottom], direction[1]);\r\n}\r\nfunction getDist(startPos, matrix, width, height, n, fixedDirection) {\r\n var poses = calculatePoses(matrix, width, height, n);\r\n var fixedPos = getPosByDirection(poses, fixedDirection);\r\n var distX = startPos[0] - fixedPos[0];\r\n var distY = startPos[1] - fixedPos[1];\r\n return [distX, distY];\r\n}\r\nfunction getNextMatrix(offsetMatrix, targetMatrix, origin, n) {\r\n return multiply(offsetMatrix, getAbsoluteMatrix(targetMatrix, n, origin), n);\r\n}\r\nfunction getNextTransformMatrix(state, datas, transform, isAllTransform) {\r\n var transformOrigin = state.transformOrigin, offsetMatrix = state.offsetMatrix, is3d = state.is3d;\r\n var n = is3d ? 4 : 3;\r\n var targetTransform;\r\n if (isString(transform)) {\r\n var beforeTransform = datas.beforeTransform, afterTransform = datas.afterTransform;\r\n if (isAllTransform) {\r\n targetTransform = convertDimension(parseMat(transform), 4, n);\r\n }\r\n else {\r\n targetTransform = convertDimension(multiply(multiply(beforeTransform, parseMat([transform]), 4), afterTransform, 4), 4, n);\r\n }\r\n }\r\n else {\r\n targetTransform = transform;\r\n }\r\n return getNextMatrix(offsetMatrix, targetTransform, transformOrigin, n);\r\n}\r\nfunction scaleMatrix(state, scale) {\r\n var transformOrigin = state.transformOrigin, offsetMatrix = state.offsetMatrix, is3d = state.is3d, targetMatrix = state.targetMatrix, targetAllTransform = state.targetAllTransform;\r\n var n = is3d ? 4 : 3;\r\n return getNextMatrix(offsetMatrix, multiply(targetAllTransform || targetMatrix, createScaleMatrix(scale, n), n), transformOrigin, n);\r\n}\r\nfunction fillTransformStartEvent(moveable, e) {\r\n var originalDatas = getBeforeRenderableDatas(e);\r\n return {\r\n setTransform: function (transform, index) {\r\n if (index === void 0) { index = -1; }\r\n originalDatas.startTransforms = isArray(transform) ? transform : splitSpace(transform);\r\n setTransformIndex(moveable, e, index);\r\n },\r\n setTransformIndex: function (index) {\r\n setTransformIndex(moveable, e, index);\r\n },\r\n };\r\n}\r\nfunction setDefaultTransformIndex(moveable, e, property) {\r\n var originalDatas = getBeforeRenderableDatas(e);\r\n var startTransforms = originalDatas.startTransforms;\r\n setTransformIndex(moveable, e, findIndex(startTransforms, function (func) { return func.indexOf(\"\".concat(property, \"(\")) === 0; }));\r\n}\r\nfunction setTransformIndex(moveable, e, index) {\r\n var originalDatas = getBeforeRenderableDatas(e);\r\n var datas = e.datas;\r\n datas.transformIndex = index;\r\n if (index === -1) {\r\n return;\r\n }\r\n var transform = originalDatas.startTransforms[index];\r\n if (!transform) {\r\n return;\r\n }\r\n var state = moveable.state;\r\n var info = parse([transform], {\r\n \"x%\": function (v) { return v / 100 * state.offsetWidth; },\r\n \"y%\": function (v) { return v / 100 * state.offsetHeight; },\r\n });\r\n datas.startValue = info[0].functionValue;\r\n}\r\nfunction fillOriginalTransform(e, transform) {\r\n var originalDatas = getBeforeRenderableDatas(e);\r\n originalDatas.nextTransforms = splitSpace(transform);\r\n // originalDatas.nextTargetMatrix = parseMat(transform);\r\n}\r\nfunction getBeforeRenderableDatas(e) {\r\n return e.originalDatas.beforeRenderable;\r\n}\r\nfunction getNextTransforms(e) {\r\n var originalDatas = e.originalDatas.beforeRenderable;\r\n return originalDatas.nextTransforms;\r\n}\r\nfunction getNextTransformText(e) {\r\n return (getNextTransforms(e) || []).join(\" \");\r\n}\r\nfunction getNextStyle(e) {\r\n return getBeforeRenderableDatas(e).nextStyle;\r\n}\r\nfunction fillTransformEvent(moveable, nextTransform, delta, isPinch, e) {\r\n fillOriginalTransform(e, nextTransform);\r\n var drag = Draggable.drag(moveable, setCustomDrag(e, moveable.state, delta, isPinch, false));\r\n var afterTransform = drag ? drag.transform : nextTransform;\r\n return __assign(__assign({ transform: nextTransform, drag: drag }, fillCSSObject({\r\n transform: afterTransform,\r\n }, e)), { afterTransform: afterTransform });\r\n}\r\nfunction getTranslateFixedPosition(moveable, transform, fixedDirection, fixedOffset, datas, isAllTransform) {\r\n var nextMatrix = getNextTransformMatrix(moveable.state, datas, transform, isAllTransform);\r\n var nextFixedPosition = getDirectionOffset(moveable, fixedDirection, fixedOffset, nextMatrix);\r\n return nextFixedPosition;\r\n}\r\nfunction getTranslateDist(moveable, transform, fixedDirection, fixedPosition, fixedOffset, datas, isAllTransform) {\r\n var nextFixedPosition = getTranslateFixedPosition(moveable, transform, fixedDirection, fixedOffset, datas, isAllTransform);\r\n var state = moveable.state;\r\n var left = state.left, top = state.top;\r\n var groupable = moveable.props.groupable;\r\n var groupLeft = groupable ? left : 0;\r\n var groupTop = groupable ? top : 0;\r\n var dist = minus(fixedPosition, nextFixedPosition);\r\n return minus(dist, [groupLeft, groupTop]);\r\n}\r\nfunction getScaleDist(moveable, transform, fixedDirection, fixedPosition, fixedOffset, datas, isAllTransform) {\r\n var dist = getTranslateDist(moveable, transform, fixedDirection, fixedPosition, fixedOffset, datas, isAllTransform);\r\n return dist;\r\n}\r\nfunction getDirectionByPos(pos, width, height) {\r\n return [\r\n width ? -1 + pos[0] / (width / 2) : 0,\r\n height ? -1 + pos[1] / (height / 2) : 0,\r\n ];\r\n}\r\nfunction getDirectionOffset(moveable, fixedDirection, fixedOffset, nextMatrix) {\r\n if (nextMatrix === void 0) { nextMatrix = moveable.state.allMatrix; }\r\n var _a = moveable.state, width = _a.width, height = _a.height, is3d = _a.is3d;\r\n var n = is3d ? 4 : 3;\r\n var fixedOffsetPosition = [\r\n width / 2 * (1 + fixedDirection[0]) + fixedOffset[0],\r\n height / 2 * (1 + fixedDirection[1]) + fixedOffset[1],\r\n ];\r\n return calculatePosition(nextMatrix, fixedOffsetPosition, n);\r\n}\r\nfunction getRotateDist(moveable, rotateDist, datas) {\r\n var fixedDirection = datas.fixedDirection;\r\n var fixedPosition = datas.fixedPosition;\r\n var fixedOffset = datas.fixedOffset;\r\n return getTranslateDist(moveable, \"rotate(\".concat(rotateDist, \"deg)\"), fixedDirection, fixedPosition, fixedOffset, datas);\r\n}\r\nfunction getResizeDist(moveable, width, height, fixedPosition, transformOrigin, datas) {\r\n var groupable = moveable.props.groupable;\r\n var state = moveable.state;\r\n var prevOrigin = state.transformOrigin, offsetMatrix = state.offsetMatrix, is3d = state.is3d, prevWidth = state.width, prevHeight = state.height, left = state.left, top = state.top;\r\n var fixedDirection = datas.fixedDirection;\r\n var targetMatrix = datas.nextTargetMatrix || state.targetMatrix;\r\n var n = is3d ? 4 : 3;\r\n var nextOrigin = calculateTransformOrigin(transformOrigin, width, height, prevWidth, prevHeight, prevOrigin);\r\n var groupLeft = groupable ? left : 0;\r\n var groupTop = groupable ? top : 0;\r\n var nextMatrix = getNextMatrix(offsetMatrix, targetMatrix, nextOrigin, n);\r\n var dist = getDist(fixedPosition, nextMatrix, width, height, n, fixedDirection);\r\n return minus(dist, [groupLeft, groupTop]);\r\n}\r\nfunction getAbsolutePosition(moveable, direction) {\r\n return getPosByDirection(getAbsolutePosesByState(moveable.state), direction);\r\n}\n\nfunction getGestoData(moveable, ableName) {\r\n var targetGesto = moveable.targetGesto;\r\n var controlGesto = moveable.controlGesto;\r\n var data;\r\n if (targetGesto === null || targetGesto === void 0 ? void 0 : targetGesto.isFlag()) {\r\n data = targetGesto.getEventData()[ableName];\r\n }\r\n if (!data && (controlGesto === null || controlGesto === void 0 ? void 0 : controlGesto.isFlag())) {\r\n data = controlGesto.getEventData()[ableName];\r\n }\r\n return data || {};\r\n}\n\nfunction getShadowRoot(parentElement) {\r\n if (parentElement && parentElement.getRootNode) {\r\n var rootNode = parentElement.getRootNode();\r\n if (rootNode.nodeType === 11) {\r\n return rootNode;\r\n }\r\n }\r\n return;\r\n}\r\nfunction getIndividualTransforms(getStyle) {\r\n var scale = getStyle(\"scale\");\r\n var rotate = getStyle(\"rotate\");\r\n var translate = getStyle(\"translate\");\r\n var individualTransforms = [];\r\n if (translate && translate !== \"0px\" && translate !== \"none\") {\r\n individualTransforms.push(\"translate(\".concat(translate.split(/\\s+/).join(\",\"), \")\"));\r\n }\r\n if (rotate && rotate !== \"1\" && rotate !== \"none\") {\r\n individualTransforms.push(\"rotate(\".concat(rotate, \")\"));\r\n }\r\n if (scale && scale !== \"1\" && scale !== \"none\") {\r\n individualTransforms.push(\"scale(\".concat(scale.split(/\\s+/).join(\",\"), \")\"));\r\n }\r\n return individualTransforms;\r\n}\r\nfunction getMatrixStackInfo(target, container, checkContainer) {\r\n var el = target;\r\n var matrixes = [];\r\n var documentElement = getDocumentElement(target) || getDocumentBody(target);\r\n var requestEnd = !checkContainer && target === container || target === documentElement;\r\n var isEnd = requestEnd;\r\n var is3d = false;\r\n var n = 3;\r\n var transformOrigin;\r\n var targetTransformOrigin;\r\n var targetMatrix;\r\n var hasFixed = false;\r\n var offsetContainer = getOffsetInfo(container, container, true).offsetParent;\r\n var zoom = 1;\r\n while (el && !isEnd) {\r\n isEnd = requestEnd;\r\n var getStyle = getCachedStyle(el);\r\n var position = getStyle(\"position\");\r\n var transform = getElementTransform(el);\r\n var isFixed = position === \"fixed\";\r\n var individualTransforms = getIndividualTransforms(getStyle);\r\n var matrix = convertCSStoMatrix(getTransformMatrix(transform));\r\n var offsetParent = void 0;\r\n var isOffsetEnd = false;\r\n var isStatic = false;\r\n var parentClientLeft = 0;\r\n var parentClientTop = 0;\r\n var fixedClientLeft = 0;\r\n var fixedClientTop = 0;\r\n var fixedInfo = {\r\n hasTransform: false,\r\n fixedContainer: null,\r\n };\r\n if (isFixed) {\r\n hasFixed = true;\r\n fixedInfo = getPositionFixedInfo(el);\r\n offsetContainer = fixedInfo.fixedContainer;\r\n }\r\n // convert 3 to 4\r\n var length_1 = matrix.length;\r\n if (!is3d && (length_1 === 16 || individualTransforms.length)) {\r\n is3d = true;\r\n n = 4;\r\n convert3DMatrixes(matrixes);\r\n if (targetMatrix) {\r\n targetMatrix = convertDimension(targetMatrix, 3, 4);\r\n }\r\n }\r\n if (is3d && length_1 === 9) {\r\n matrix = convertDimension(matrix, 3, 4);\r\n }\r\n var _a = getOffsetPosInfo(el, target), tagName = _a.tagName, hasOffset = _a.hasOffset, isSVG = _a.isSVG, origin_1 = _a.origin, targetOrigin = _a.targetOrigin, offsetPos = _a.offset;\r\n var _b = __read(offsetPos, 2), offsetLeft = _b[0], offsetTop = _b[1];\r\n // no target with svg\r\n if (tagName === \"svg\" && !el.ownerSVGElement && targetMatrix) {\r\n // scale matrix for svg's SVGElements.\r\n matrixes.push({\r\n type: \"target\",\r\n target: el,\r\n matrix: getSVGMatrix(el, n),\r\n });\r\n matrixes.push({\r\n type: \"offset\",\r\n target: el,\r\n matrix: createIdentityMatrix(n),\r\n });\r\n }\r\n var targetZoom = parseFloat(getStyle(\"zoom\")) || 1;\r\n if (isFixed) {\r\n offsetParent = fixedInfo.fixedContainer;\r\n isOffsetEnd = true;\r\n }\r\n else {\r\n var offsetInfo = getOffsetInfo(el, container, false, true, getStyle);\r\n var offsetZoom = offsetInfo.offsetZoom;\r\n offsetParent = offsetInfo.offsetParent;\r\n isOffsetEnd = offsetInfo.isEnd;\r\n isStatic = offsetInfo.isStatic;\r\n zoom *= offsetZoom;\r\n if ((offsetInfo.isCustomElement || offsetZoom !== 1) && isStatic) {\r\n offsetLeft -= offsetParent.offsetLeft;\r\n offsetTop -= offsetParent.offsetTop;\r\n }\r\n else if (IS_FIREFOX || IS_CHROMIUM109) {\r\n var parentSlotElement = offsetInfo.parentSlotElement;\r\n if (parentSlotElement) {\r\n var customOffsetParent = offsetParent;\r\n var customOffsetLeft = 0;\r\n var customOffsetTop = 0;\r\n while (customOffsetParent) {\r\n if (!getShadowRoot(customOffsetParent)) {\r\n break;\r\n }\r\n customOffsetLeft += customOffsetParent.offsetLeft;\r\n customOffsetTop += customOffsetParent.offsetTop;\r\n customOffsetParent = customOffsetParent.offsetParent;\r\n }\r\n offsetLeft -= customOffsetLeft;\r\n offsetTop -= customOffsetTop;\r\n }\r\n }\r\n }\r\n if (IS_WEBKIT && !IS_SAFARI_ABOVE15\r\n && hasOffset && !isSVG && isStatic\r\n && (position === \"relative\" || position === \"static\")) {\r\n offsetLeft -= offsetParent.offsetLeft;\r\n offsetTop -= offsetParent.offsetTop;\r\n requestEnd = requestEnd || isOffsetEnd;\r\n }\r\n if (isFixed) {\r\n if (hasOffset && fixedInfo.hasTransform) {\r\n // border\r\n fixedClientLeft = offsetParent.clientLeft;\r\n fixedClientTop = offsetParent.clientTop;\r\n }\r\n }\r\n else {\r\n if (hasOffset && offsetContainer !== offsetParent) {\r\n // border\r\n parentClientLeft = offsetParent.clientLeft;\r\n parentClientTop = offsetParent.clientTop;\r\n }\r\n if (hasOffset && offsetParent === documentElement) {\r\n var margin = getBodyOffset(el, false);\r\n offsetLeft += margin[0];\r\n offsetTop += margin[1];\r\n }\r\n }\r\n matrixes.push({\r\n type: \"target\",\r\n target: el,\r\n matrix: getAbsoluteMatrix(matrix, n, origin_1),\r\n });\r\n if (individualTransforms.length) {\r\n matrixes.push({\r\n type: \"offset\",\r\n target: el,\r\n matrix: createIdentityMatrix(n),\r\n });\r\n matrixes.push({\r\n type: \"target\",\r\n target: el,\r\n matrix: getAbsoluteMatrix(parseMat(individualTransforms), n, origin_1),\r\n });\r\n }\r\n if (hasOffset) {\r\n var isElementTarget = el === target;\r\n var scrollLeft = isElementTarget ? 0 : el.scrollLeft;\r\n var scrollTop = isElementTarget ? 0 : el.scrollTop;\r\n matrixes.push({\r\n type: \"offset\",\r\n target: el,\r\n matrix: createOriginMatrix([\r\n offsetLeft - scrollLeft + parentClientLeft - fixedClientLeft,\r\n offsetTop - scrollTop + parentClientTop - fixedClientTop,\r\n ], n),\r\n });\r\n }\r\n else {\r\n // svg\r\n matrixes.push({\r\n type: \"offset\",\r\n target: el,\r\n origin: origin_1,\r\n });\r\n }\r\n // transform으로 계산되지 않는 zoom을 위한 (0, 0) 을 기준 matrix 추가.\r\n if (targetZoom !== 1) {\r\n matrixes.push({\r\n type: \"zoom\",\r\n target: el,\r\n matrix: getAbsoluteMatrix(createScaleMatrix([targetZoom, targetZoom], n), n, [0, 0]),\r\n });\r\n }\r\n if (!targetMatrix) {\r\n targetMatrix = matrix;\r\n }\r\n if (!transformOrigin) {\r\n transformOrigin = origin_1;\r\n }\r\n if (!targetTransformOrigin) {\r\n targetTransformOrigin = targetOrigin;\r\n }\r\n if (isEnd || isFixed) {\r\n break;\r\n }\r\n else {\r\n el = offsetParent;\r\n requestEnd = isOffsetEnd;\r\n }\r\n if (!checkContainer || el === documentElement) {\r\n isEnd = requestEnd;\r\n }\r\n }\r\n if (!targetMatrix) {\r\n targetMatrix = createIdentityMatrix(n);\r\n }\r\n if (!transformOrigin) {\r\n transformOrigin = [0, 0];\r\n }\r\n if (!targetTransformOrigin) {\r\n targetTransformOrigin = [0, 0];\r\n }\r\n return {\r\n zoom: zoom,\r\n offsetContainer: offsetContainer,\r\n matrixes: matrixes,\r\n targetMatrix: targetMatrix,\r\n transformOrigin: transformOrigin,\r\n targetOrigin: targetTransformOrigin,\r\n is3d: is3d,\r\n hasFixed: hasFixed,\r\n };\r\n}\n\nvar cacheStyleMap = null;\r\nvar clientRectStyleMap = null;\r\nvar matrixContainerInfos = null;\r\nfunction setStoreCache(useCache) {\r\n if (useCache) {\r\n if (window.Map) {\r\n cacheStyleMap = new Map();\r\n clientRectStyleMap = new Map();\r\n }\r\n matrixContainerInfos = [];\r\n }\r\n else {\r\n cacheStyleMap = null;\r\n matrixContainerInfos = null;\r\n clientRectStyleMap = null;\r\n }\r\n}\r\nfunction getCachedClientRect(el) {\r\n var clientRect = clientRectStyleMap === null || clientRectStyleMap === void 0 ? void 0 : clientRectStyleMap.get(el);\r\n if (clientRect) {\r\n return clientRect;\r\n }\r\n var nextClientRect = getClientRect(el, true);\r\n if (clientRectStyleMap) {\r\n clientRectStyleMap.set(el, nextClientRect);\r\n }\r\n return nextClientRect;\r\n}\r\nfunction getCachedMatrixContainerInfo(target, container) {\r\n if (matrixContainerInfos) {\r\n var result_1 = find(matrixContainerInfos, function (info) { return info[0][0] == target && info[0][1] == container; });\r\n if (result_1) {\r\n return result_1[1];\r\n }\r\n }\r\n var result = getMatrixStackInfo(target, container, true);\r\n if (matrixContainerInfos) {\r\n matrixContainerInfos.push([[target, container], result]);\r\n }\r\n return result;\r\n}\r\nfunction getCachedStyle(element) {\r\n var cache = cacheStyleMap === null || cacheStyleMap === void 0 ? void 0 : cacheStyleMap.get(element);\r\n if (!cache) {\r\n var nextStyle_1 = getWindow(element).getComputedStyle(element);\r\n if (!cacheStyleMap) {\r\n return function (property) {\r\n return nextStyle_1[property];\r\n };\r\n }\r\n cache = {\r\n style: nextStyle_1,\r\n cached: {},\r\n };\r\n cacheStyleMap.set(element, cache);\r\n }\r\n var cached = cache.cached;\r\n var style = cache.style;\r\n return function (property) {\r\n if (!(property in cached)) {\r\n cached[property] = style[property];\r\n }\r\n return cached[property];\r\n };\r\n}\n\nfunction fillChildEvents(moveable, name, e) {\r\n var datas = e.originalDatas;\r\n datas.groupable = datas.groupable || {};\r\n var groupableDatas = datas.groupable;\r\n groupableDatas.childDatas = groupableDatas.childDatas || [];\r\n var childDatas = groupableDatas.childDatas;\r\n return moveable.moveables.map(function (_, i) {\r\n childDatas[i] = childDatas[i] || {};\r\n childDatas[i][name] = childDatas[i][name] || {};\r\n return __assign(__assign({}, e), { isRequestChild: true, datas: childDatas[i][name], originalDatas: childDatas[i] });\r\n });\r\n}\r\nfunction triggerChildGesto(moveable, able, type, delta, e, isConvert, ableName) {\r\n var isStart = !!type.match(/Start$/g);\r\n var isEnd = !!type.match(/End$/g);\r\n var isPinch = e.isPinch;\r\n var datas = e.datas;\r\n var events = fillChildEvents(moveable, able.name, e);\r\n var moveables = moveable.moveables;\r\n var childEvents = [];\r\n var eventParams = events.map(function (ev, i) {\r\n var childMoveable = moveables[i];\r\n var state = childMoveable.state;\r\n var gestos = state.gestos;\r\n var childEvent = ev;\r\n if (isStart) {\r\n childEvent = new CustomGesto(ableName).dragStart(delta, ev);\r\n childEvents.push(childEvent);\r\n }\r\n else {\r\n if (!gestos[ableName]) {\r\n gestos[ableName] = datas.childGestos[i];\r\n }\r\n if (!gestos[ableName]) {\r\n return;\r\n }\r\n childEvent = setCustomDrag(ev, state, delta, isPinch, isConvert, ableName);\r\n childEvents.push(childEvent);\r\n }\r\n var result = able[type](childMoveable, __assign(__assign({}, childEvent), { parentFlag: true }));\r\n if (isEnd) {\r\n gestos[ableName] = null;\r\n }\r\n return result;\r\n });\r\n if (isStart) {\r\n datas.childGestos = moveables.map(function (child) { return child.state.gestos[ableName]; });\r\n }\r\n return {\r\n eventParams: eventParams,\r\n childEvents: childEvents,\r\n };\r\n}\r\nfunction triggerChildAbles(moveable, able, type, e, eachEvent, callback) {\r\n if (eachEvent === void 0) { eachEvent = function (_, ev) { return ev; }; }\r\n var isEnd = !!type.match(/End$/g);\r\n var events = fillChildEvents(moveable, able.name, e);\r\n var moveables = moveable.moveables;\r\n var childs = events.map(function (ev, i) {\r\n var childMoveable = moveables[i];\r\n var childEvent = ev;\r\n childEvent = eachEvent(childMoveable, ev);\r\n var result = able[type](childMoveable, __assign(__assign({}, childEvent), { parentFlag: true }));\r\n result && callback && callback(childMoveable, ev, result, i);\r\n if (isEnd) {\r\n childMoveable.state.gestos = {};\r\n }\r\n return result;\r\n });\r\n return childs;\r\n}\r\nfunction startChildDist(moveable, child, parentDatas, childEvent) {\r\n var fixedDirection = parentDatas.fixedDirection;\r\n var fixedPosition = parentDatas.fixedPosition;\r\n var startPositions = childEvent.datas.startPositions || getAbsolutePosesByState(child.state);\r\n var pos = getPosByDirection(startPositions, fixedDirection);\r\n var _a = __read(calculate(createRotateMatrix(-moveable.rotation / 180 * Math.PI, 3), [pos[0] - fixedPosition[0], pos[1] - fixedPosition[1], 1], 3), 2), originalX = _a[0], originalY = _a[1];\r\n childEvent.datas.originalX = originalX;\r\n childEvent.datas.originalY = originalY;\r\n return childEvent;\r\n}\n\nfunction renderDirectionControlsByInfos(moveable, ableName, renderDirections, React) {\r\n var _a = moveable.getState(), renderPoses = _a.renderPoses, rotationRad = _a.rotation, direction = _a.direction;\r\n var zoom = getProps(moveable.props, ableName).zoom;\r\n var degRotation = absDegree(rotationRad / Math.PI * 180);\r\n var directionMap = {};\r\n var renderState = moveable.renderState;\r\n if (!renderState.renderDirectionMap) {\r\n renderState.renderDirectionMap = {};\r\n }\r\n var renderDirectionMap = renderState.renderDirectionMap;\r\n renderDirections.forEach(function (_a) {\r\n var dir = _a.dir;\r\n directionMap[dir] = true;\r\n });\r\n var directionSign = sign(direction);\r\n return renderDirections.map(function (_a) {\r\n var data = _a.data, classNames = _a.classNames, dir = _a.dir;\r\n var indexes = DIRECTION_INDEXES[dir];\r\n if (!indexes || !directionMap[dir]) {\r\n return null;\r\n }\r\n renderDirectionMap[dir] = true;\r\n var directionRotation = (throttle(degRotation, 15) + directionSign * DIRECTION_ROTATIONS[dir] + 720) % 180;\r\n var dataAttrs = {};\r\n getKeys(data).forEach(function (name) {\r\n dataAttrs[\"data-\".concat(name)] = data[name];\r\n });\r\n return (React.createElement(\"div\", __assign({ className: prefix.apply(void 0, __spreadArray([\"control\", \"direction\", dir, ableName], __read(classNames), false)), \"data-rotation\": directionRotation, \"data-direction\": dir }, dataAttrs, { key: \"direction-\".concat(dir), style: getControlTransform.apply(void 0, __spreadArray([rotationRad, zoom], __read(indexes.map(function (index) { return renderPoses[index]; })), false)) })));\r\n });\r\n}\r\nfunction renderDirectionControls(moveable, defaultDirections, ableName, React) {\r\n var _a = getProps(moveable.props, ableName), _b = _a.renderDirections, directions = _b === void 0 ? defaultDirections : _b, displayAroundControls = _a.displayAroundControls;\r\n if (!directions) {\r\n return [];\r\n }\r\n var renderDirections = directions === true ? DIRECTIONS : directions;\r\n return __spreadArray(__spreadArray([], __read((displayAroundControls ? renderAroundControls(moveable, React, ableName, renderDirections) : [])), false), __read(renderDirectionControlsByInfos(moveable, ableName, renderDirections.map(function (dir) {\r\n return {\r\n data: {},\r\n classNames: [],\r\n dir: dir,\r\n };\r\n }), React)), false);\r\n}\r\nfunction renderLine(React, direction, pos1, pos2, zoom, key) {\r\n var classNames = [];\r\n for (var _i = 6; _i < arguments.length; _i++) {\r\n classNames[_i - 6] = arguments[_i];\r\n }\r\n var rad = getRad(pos1, pos2);\r\n var rotation = direction ? (throttle(rad / Math.PI * 180, 15)) % 180 : -1;\r\n return React.createElement(\"div\", { key: \"line-\".concat(key), className: prefix.apply(void 0, __spreadArray([\"line\", \"direction\", direction ? \"edge\" : \"\", direction], __read(classNames), false)), \"data-rotation\": rotation, \"data-line-key\": key, \"data-direction\": direction, style: getLineStyle(pos1, pos2, zoom, rad) });\r\n}\r\nfunction renderEdgeLines(React, ableName, edge, poses, zoom) {\r\n var directions = edge === true ? DIRECTIONS4 : edge;\r\n return directions.map(function (direction, i) {\r\n var _a = __read(DIRECTION_INDEXES[direction], 2), index1 = _a[0], index2 = _a[1];\r\n if (index2 == null) {\r\n return;\r\n }\r\n return renderLine(React, direction, poses[index1], poses[index2], zoom, \"\".concat(ableName, \"Edge\").concat(i), ableName);\r\n }).filter(Boolean);\r\n}\r\nfunction getRenderDirections(ableName) {\r\n return function (moveable, React) {\r\n var edge = getProps(moveable.props, ableName).edge;\r\n if (edge && (edge === true || edge.length)) {\r\n return __spreadArray(__spreadArray([], __read(renderEdgeLines(React, ableName, edge, moveable.getState().renderPoses, moveable.props.zoom)), false), __read(renderDiagonalDirections(moveable, ableName, React)), false);\r\n }\r\n return renderAllDirections(moveable, ableName, React);\r\n };\r\n}\r\nfunction renderAllDirections(moveable, ableName, React) {\r\n return renderDirectionControls(moveable, DIRECTIONS, ableName, React);\r\n}\r\nfunction renderDiagonalDirections(moveable, ableName, React) {\r\n return renderDirectionControls(moveable, [\"nw\", \"ne\", \"sw\", \"se\"], ableName, React);\r\n}\r\nfunction renderAroundControls(moveable, React, ableName, renderDirections) {\r\n var renderState = moveable.renderState;\r\n if (!renderState.renderDirectionMap) {\r\n renderState.renderDirectionMap = {};\r\n }\r\n var _a = moveable.getState(), renderPoses = _a.renderPoses, rotationRad = _a.rotation, direction = _a.direction;\r\n var renderDirectionMap = renderState.renderDirectionMap;\r\n var zoom = moveable.props.zoom;\r\n var directionSign = sign(direction);\r\n var degRotation = rotationRad / Math.PI * 180;\r\n return (renderDirections || getKeys(renderDirectionMap)).map(function (dir) {\r\n var indexes = DIRECTION_INDEXES[dir];\r\n if (!indexes) {\r\n return null;\r\n }\r\n var directionRotation = (throttle(degRotation, 15) + directionSign * DIRECTION_ROTATIONS[dir] + 720) % 180;\r\n var classNames = [\"around-control\"];\r\n if (ableName) {\r\n classNames.push(\"direction\", ableName);\r\n }\r\n return (React.createElement(\"div\", { className: prefix.apply(void 0, __spreadArray([], __read(classNames), false)), \"data-rotation\": directionRotation, \"data-direction\": dir, key: \"direction-around-\".concat(dir), style: getControlTransform.apply(void 0, __spreadArray([rotationRad, zoom], __read(indexes.map(function (index) { return renderPoses[index]; })), false)) }));\r\n });\r\n}\n\nfunction checkBoundPoses(bounds, verticalPoses, horizontalPoses) {\r\n var _a = bounds || {}, _b = _a.position, position = _b === void 0 ? \"client\" : _b, _c = _a.left, left = _c === void 0 ? -Infinity : _c, _d = _a.top, top = _d === void 0 ? -Infinity : _d, _e = _a.right, right = _e === void 0 ? Infinity : _e, _f = _a.bottom, bottom = _f === void 0 ? Infinity : _f;\r\n var nextBounds = {\r\n position: position,\r\n left: left,\r\n top: top,\r\n right: right,\r\n bottom: bottom,\r\n };\r\n return {\r\n vertical: checkBounds(nextBounds, verticalPoses, true),\r\n horizontal: checkBounds(nextBounds, horizontalPoses, false),\r\n };\r\n}\r\nfunction getBounds(moveable, externalBounds) {\r\n var _a = moveable.state, _b = _a.containerClientRect, containerHeight = _b.clientHeight, containerWidth = _b.clientWidth, clientLeft = _b.clientLeft, clientTop = _b.clientTop, _c = _a.snapOffset, snapOffsetLeft = _c.left, snapOffsetTop = _c.top, snapOffsetRight = _c.right, snapOffsetBottom = _c.bottom;\r\n var bounds = externalBounds || moveable.props.bounds || {};\r\n var position = bounds.position || \"client\";\r\n var isCSS = position === \"css\";\r\n var _d = bounds.left, left = _d === void 0 ? -Infinity : _d, _e = bounds.top, top = _e === void 0 ? -Infinity : _e;\r\n var _f = bounds.right, right = _f === void 0 ? isCSS ? -Infinity : Infinity : _f, _g = bounds.bottom, bottom = _g === void 0 ? isCSS ? -Infinity : Infinity : _g;\r\n if (isCSS) {\r\n right = containerWidth + snapOffsetRight - snapOffsetLeft - right;\r\n bottom = containerHeight + snapOffsetBottom - snapOffsetTop - bottom;\r\n }\r\n return {\r\n left: left + snapOffsetLeft - clientLeft,\r\n right: right + snapOffsetLeft - clientLeft,\r\n top: top + snapOffsetTop - clientTop,\r\n bottom: bottom + snapOffsetTop - clientTop,\r\n };\r\n}\r\nfunction checkBoundKeepRatio(moveable, startPos, endPos) {\r\n var _a = getBounds(moveable), left = _a.left, top = _a.top, right = _a.right, bottom = _a.bottom;\r\n var _b = __read(endPos, 2), endX = _b[0], endY = _b[1];\r\n var _c = __read(minus(endPos, startPos), 2), dx = _c[0], dy = _c[1];\r\n if (abs(dx) < TINY_NUM) {\r\n dx = 0;\r\n }\r\n if (abs(dy) < TINY_NUM) {\r\n dy = 0;\r\n }\r\n var isBottom = dy > 0;\r\n var isRight = dx > 0;\r\n var verticalInfo = {\r\n isBound: false,\r\n offset: 0,\r\n pos: 0,\r\n };\r\n var horizontalInfo = {\r\n isBound: false,\r\n offset: 0,\r\n pos: 0,\r\n };\r\n if (dx === 0 && dy === 0) {\r\n return {\r\n vertical: verticalInfo,\r\n horizontal: horizontalInfo,\r\n };\r\n }\r\n else if (dx === 0) {\r\n if (isBottom) {\r\n if (bottom < endY) {\r\n horizontalInfo.pos = bottom;\r\n horizontalInfo.offset = endY - bottom;\r\n }\r\n }\r\n else {\r\n if (top > endY) {\r\n horizontalInfo.pos = top;\r\n horizontalInfo.offset = endY - top;\r\n }\r\n }\r\n }\r\n else if (dy === 0) {\r\n if (isRight) {\r\n if (right < endX) {\r\n verticalInfo.pos = right;\r\n verticalInfo.offset = endX - right;\r\n }\r\n }\r\n else {\r\n if (left > endX) {\r\n verticalInfo.pos = left;\r\n verticalInfo.offset = endX - left;\r\n }\r\n }\r\n }\r\n else {\r\n // y - y1 = a * (x - x1)\r\n var a = dy / dx;\r\n var b = endPos[1] - a * endX;\r\n var y = 0;\r\n var x = 0;\r\n var isBound = false;\r\n if (isRight && right <= endX) {\r\n y = a * right + b;\r\n x = right;\r\n isBound = true;\r\n }\r\n else if (!isRight && endX <= left) {\r\n y = a * left + b;\r\n x = left;\r\n isBound = true;\r\n }\r\n if (isBound) {\r\n if (y < top || y > bottom) {\r\n isBound = false;\r\n }\r\n }\r\n if (!isBound) {\r\n if (isBottom && bottom <= endY) {\r\n y = bottom;\r\n x = (y - b) / a;\r\n isBound = true;\r\n }\r\n else if (!isBottom && endY <= top) {\r\n y = top;\r\n x = (y - b) / a;\r\n isBound = true;\r\n }\r\n }\r\n if (isBound) {\r\n verticalInfo.isBound = true;\r\n verticalInfo.pos = x;\r\n verticalInfo.offset = endX - x;\r\n horizontalInfo.isBound = true;\r\n horizontalInfo.pos = y;\r\n horizontalInfo.offset = endY - y;\r\n }\r\n }\r\n return {\r\n vertical: verticalInfo,\r\n horizontal: horizontalInfo,\r\n };\r\n}\r\nfunction checkBounds(bounds, poses, isVertical) {\r\n // 0 [100 - 200] 300\r\n var startBoundPos = bounds[isVertical ? \"left\" : \"top\"];\r\n var endBoundPos = bounds[isVertical ? \"right\" : \"bottom\"];\r\n // 450\r\n var minPos = Math.min.apply(Math, __spreadArray([], __read(poses), false));\r\n var maxPos = Math.max.apply(Math, __spreadArray([], __read(poses), false));\r\n var boundInfos = [];\r\n if (startBoundPos + 1 > minPos) {\r\n boundInfos.push({\r\n direction: \"start\",\r\n isBound: true,\r\n offset: minPos - startBoundPos,\r\n pos: startBoundPos,\r\n });\r\n }\r\n if (endBoundPos - 1 < maxPos) {\r\n boundInfos.push({\r\n direction: \"end\",\r\n isBound: true,\r\n offset: maxPos - endBoundPos,\r\n pos: endBoundPos,\r\n });\r\n }\r\n if (!boundInfos.length) {\r\n boundInfos.push({\r\n isBound: false,\r\n offset: 0,\r\n pos: 0,\r\n });\r\n }\r\n return boundInfos.sort(function (a, b) { return abs(b.offset) - abs(a.offset); });\r\n}\r\nfunction isBoundRotate$1(relativePoses, boundRect, rad) {\r\n var nextPoses = rad ? relativePoses.map(function (pos) { return rotate(pos, rad); }) : relativePoses;\r\n return nextPoses.some(function (pos) {\r\n return (pos[0] < boundRect.left && abs(pos[0] - boundRect.left) > 0.1)\r\n || (pos[0] > boundRect.right && abs(pos[0] - boundRect.right) > 0.1)\r\n || (pos[1] < boundRect.top && abs(pos[1] - boundRect.top) > 0.1)\r\n || (pos[1] > boundRect.bottom && abs(pos[1] - boundRect.bottom) > 0.1);\r\n });\r\n}\r\nfunction boundRotate(vec, boundPos, index) {\r\n var r = getDistSize(vec);\r\n var nextPos = Math.sqrt(r * r - boundPos * boundPos) || 0;\r\n return [nextPos, -nextPos].sort(function (a, b) {\r\n return abs(a - vec[index ? 0 : 1]) - abs(b - vec[index ? 0 : 1]);\r\n }).map(function (pos) {\r\n return getRad([0, 0], index ? [pos, boundPos] : [boundPos, pos]);\r\n });\r\n}\r\nfunction checkRotateBounds(moveable, prevPoses, nextPoses, origin, rotation) {\r\n if (!moveable.props.bounds) {\r\n return [];\r\n }\r\n var rad = rotation * Math.PI / 180;\r\n var _a = getBounds(moveable), left = _a.left, top = _a.top, right = _a.right, bottom = _a.bottom;\r\n var relativeLeft = left - origin[0];\r\n var relativeRight = right - origin[0];\r\n var relativeTop = top - origin[1];\r\n var relativeBottom = bottom - origin[1];\r\n var boundRect = {\r\n left: relativeLeft,\r\n top: relativeTop,\r\n right: relativeRight,\r\n bottom: relativeBottom,\r\n };\r\n if (!isBoundRotate$1(nextPoses, boundRect, 0)) {\r\n return [];\r\n }\r\n var result = [];\r\n [\r\n [relativeLeft, 0],\r\n [relativeRight, 0],\r\n [relativeTop, 1],\r\n [relativeBottom, 1],\r\n ].forEach(function (_a) {\r\n var _b = __read(_a, 2), boundPos = _b[0], index = _b[1];\r\n nextPoses.forEach(function (nextPos) {\r\n var relativeRad1 = getRad([0, 0], nextPos);\r\n result.push.apply(result, __spreadArray([], __read(boundRotate(nextPos, boundPos, index)\r\n .map(function (relativeRad2) { return rad + relativeRad2 - relativeRad1; })\r\n .filter(function (nextRad) { return !isBoundRotate$1(prevPoses, boundRect, nextRad); })\r\n .map(function (nextRad) { return throttle(nextRad * 180 / Math.PI, TINY_NUM); })), false));\r\n });\r\n });\r\n return result;\r\n}\n\nvar VERTICAL_NAMES = [\"left\", \"right\", \"center\"];\r\nvar HORIZONTAL_NAMES = [\"top\", \"bottom\", \"middle\"];\r\nvar SNAP_SKIP_NAMES_MAP = {\r\n \"left\": \"start\",\r\n \"right\": \"end\",\r\n \"center\": \"center\",\r\n \"top\": \"start\",\r\n \"bottom\": \"end\",\r\n \"middle\": \"center\",\r\n};\r\nvar VERTICAL_NAMES_MAP = {\r\n start: \"left\",\r\n end: \"right\",\r\n center: \"center\",\r\n};\r\nvar HORIZONTAL_NAMES_MAP = {\r\n start: \"top\",\r\n end: \"bottom\",\r\n center: \"middle\",\r\n};\r\nfunction getInitialBounds() {\r\n return {\r\n left: false,\r\n top: false,\r\n right: false,\r\n bottom: false,\r\n };\r\n}\r\nfunction hasGuidelines(moveable, ableName) {\r\n var _a = moveable.props, snappable = _a.snappable, bounds = _a.bounds, innerBounds = _a.innerBounds, verticalGuidelines = _a.verticalGuidelines, horizontalGuidelines = _a.horizontalGuidelines, snapGridWidth = _a.snapGridWidth, snapGridHeight = _a.snapGridHeight, _b = moveable.state, guidelines = _b.guidelines, enableSnap = _b.enableSnap;\r\n if (!snappable ||\r\n !enableSnap ||\r\n (ableName && snappable !== true && snappable.indexOf(ableName) < 0)) {\r\n return false;\r\n }\r\n if (snapGridWidth ||\r\n snapGridHeight ||\r\n bounds ||\r\n innerBounds ||\r\n (guidelines && guidelines.length) ||\r\n (verticalGuidelines && verticalGuidelines.length) ||\r\n (horizontalGuidelines && horizontalGuidelines.length)) {\r\n return true;\r\n }\r\n return false;\r\n}\r\nfunction getSnapDirections(snapDirections) {\r\n if (snapDirections === false) {\r\n return {};\r\n }\r\n else if (snapDirections === true || !snapDirections) {\r\n return { left: true, right: true, top: true, bottom: true };\r\n }\r\n return snapDirections;\r\n}\r\nfunction mapSnapDirectionPoses(snapDirections, snapPoses) {\r\n var nextSnapDirections = getSnapDirections(snapDirections);\r\n var nextSnapPoses = {};\r\n for (var name_1 in nextSnapDirections) {\r\n if (name_1 in snapPoses && nextSnapDirections[name_1]) {\r\n nextSnapPoses[name_1] = snapPoses[name_1];\r\n }\r\n }\r\n return nextSnapPoses;\r\n}\r\nfunction splitSnapDirectionPoses(snapDirections, snapPoses) {\r\n var nextSnapPoses = mapSnapDirectionPoses(snapDirections, snapPoses);\r\n var horizontalNames = HORIZONTAL_NAMES.filter(function (name) { return name in nextSnapPoses; });\r\n var verticalNames = VERTICAL_NAMES.filter(function (name) { return name in nextSnapPoses; });\r\n return {\r\n horizontalNames: horizontalNames,\r\n verticalNames: verticalNames,\r\n horizontal: horizontalNames.map(function (name) { return nextSnapPoses[name]; }),\r\n vertical: verticalNames.map(function (name) { return nextSnapPoses[name]; }),\r\n };\r\n}\r\nfunction calculateContainerPos(rootMatrix, containerRect, n) {\r\n var clientPos = calculatePosition(rootMatrix, [containerRect.clientLeft, containerRect.clientTop], n);\r\n return [\r\n containerRect.left + clientPos[0],\r\n containerRect.top + clientPos[1],\r\n ];\r\n}\r\nfunction solveLineConstants(_a) {\r\n var _b = __read(_a, 2), point1 = _b[0], point2 = _b[1];\r\n var dx = point2[0] - point1[0];\r\n var dy = point2[1] - point1[1];\r\n if (Math.abs(dx) < TINY_NUM$1) {\r\n dx = 0;\r\n }\r\n if (Math.abs(dy) < TINY_NUM$1) {\r\n dy = 0;\r\n }\r\n // b > 0\r\n // ax + by + c = 0\r\n var a = 0;\r\n var b = 0;\r\n var c = 0;\r\n if (!dx) {\r\n // -x + 1 = 0\r\n a = -1;\r\n c = point1[0];\r\n }\r\n else if (!dy) {\r\n // y - 1 = 0\r\n b = 1;\r\n c = -point1[1];\r\n }\r\n else {\r\n // y = -a(x - x1) + y1\r\n // ax + y + a * x1 - y1 = 0\r\n a = -dy / dx;\r\n b = 1;\r\n c = a * point1[0] - point1[1];\r\n }\r\n return [a, b, c].map(function (v) { return throttle(v, TINY_NUM$1); });\r\n}\n\nvar NAME_snapRotationThreshold = \"snapRotationThreshold\";\r\nvar NAME_snapRotationDegrees = \"snapRotationDegrees\";\r\nvar NAME_snapHorizontalThreshold = \"snapHorizontalThreshold\";\r\nvar NAME_snapVerticalThreshold = \"snapVerticalThreshold\";\n\nfunction checkMoveableSnapPoses(moveable, posesX, posesY, dirXs, dirYs, customSnapVerticalThreshold, customSnapHorizontalThreshold) {\r\n var _a;\r\n if (dirXs === void 0) { dirXs = []; }\r\n if (dirYs === void 0) { dirYs = []; }\r\n var props = moveable.props;\r\n var snapThresholdMultiples = ((_a = moveable.state.snapThresholdInfo) === null || _a === void 0 ? void 0 : _a.multiples) || [1, 1];\r\n var snapHorizontalThreshold = selectValue(customSnapHorizontalThreshold, props[NAME_snapHorizontalThreshold], 5);\r\n var snapVerticalThreshold = selectValue(customSnapVerticalThreshold, props[NAME_snapVerticalThreshold], 5);\r\n return checkSnapPoses(moveable.state.guidelines, posesX, posesY, dirXs, dirYs, snapHorizontalThreshold, snapVerticalThreshold, snapThresholdMultiples);\r\n}\r\nfunction checkSnapPoses(guidelines, posesX, posesY, dirXs, dirYs, snapHorizontalThreshold, snapVerticalThreshold, multiples) {\r\n return {\r\n vertical: checkSnap(guidelines, \"vertical\", posesX, snapVerticalThreshold * multiples[0], dirXs),\r\n horizontal: checkSnap(guidelines, \"horizontal\", posesY, snapHorizontalThreshold * multiples[1], dirYs),\r\n };\r\n}\r\nfunction checkSnapKeepRatio(moveable, startPos, endPos) {\r\n var _a = __read(endPos, 2), endX = _a[0], endY = _a[1];\r\n var _b = __read(startPos, 2), startX = _b[0], startY = _b[1];\r\n var _c = __read(minus(endPos, startPos), 2), dx = _c[0], dy = _c[1];\r\n var isBottom = dy > 0;\r\n var isRight = dx > 0;\r\n dx = getTinyDist(dx);\r\n dy = getTinyDist(dy);\r\n var verticalInfo = {\r\n isSnap: false,\r\n offset: 0,\r\n pos: 0,\r\n };\r\n var horizontalInfo = {\r\n isSnap: false,\r\n offset: 0,\r\n pos: 0,\r\n };\r\n if (dx === 0 && dy === 0) {\r\n return {\r\n vertical: verticalInfo,\r\n horizontal: horizontalInfo,\r\n };\r\n }\r\n var _d = checkMoveableSnapPoses(moveable, dx ? [endX] : [], dy ? [endY] : [], [], [], undefined, undefined), verticalSnapInfo = _d.vertical, horizontalSnapInfo = _d.horizontal;\r\n verticalSnapInfo.posInfos.filter(function (_a) {\r\n var pos = _a.pos;\r\n return isRight ? pos >= startX : pos <= startX;\r\n });\r\n horizontalSnapInfo.posInfos.filter(function (_a) {\r\n var pos = _a.pos;\r\n return isBottom ? pos >= startY : pos <= startY;\r\n });\r\n verticalSnapInfo.isSnap = verticalSnapInfo.posInfos.length > 0;\r\n horizontalSnapInfo.isSnap = horizontalSnapInfo.posInfos.length > 0;\r\n var _e = getNearestSnapGuidelineInfo(verticalSnapInfo), isVerticalSnap = _e.isSnap, verticalGuideline = _e.guideline;\r\n var _f = getNearestSnapGuidelineInfo(horizontalSnapInfo), isHorizontalSnap = _f.isSnap, horizontalGuideline = _f.guideline;\r\n var horizontalPos = isHorizontalSnap ? horizontalGuideline.pos[1] : 0;\r\n var verticalPos = isVerticalSnap ? verticalGuideline.pos[0] : 0;\r\n if (dx === 0) {\r\n if (isHorizontalSnap) {\r\n horizontalInfo.isSnap = true;\r\n horizontalInfo.pos = horizontalGuideline.pos[1];\r\n horizontalInfo.offset = endY - horizontalInfo.pos;\r\n }\r\n }\r\n else if (dy === 0) {\r\n if (isVerticalSnap) {\r\n verticalInfo.isSnap = true;\r\n verticalInfo.pos = verticalPos;\r\n verticalInfo.offset = endX - verticalPos;\r\n }\r\n }\r\n else {\r\n // y - y1 = a * (x - x1)\r\n var a = dy / dx;\r\n var b = endPos[1] - a * endX;\r\n var y = 0;\r\n var x = 0;\r\n var isSnap = false;\r\n if (isVerticalSnap) {\r\n x = verticalPos;\r\n y = a * x + b;\r\n isSnap = true;\r\n }\r\n else if (isHorizontalSnap) {\r\n y = horizontalPos;\r\n x = (y - b) / a;\r\n isSnap = true;\r\n }\r\n if (isSnap) {\r\n verticalInfo.isSnap = true;\r\n verticalInfo.pos = x;\r\n verticalInfo.offset = endX - x;\r\n horizontalInfo.isSnap = true;\r\n horizontalInfo.pos = y;\r\n horizontalInfo.offset = endY - y;\r\n }\r\n }\r\n return {\r\n vertical: verticalInfo,\r\n horizontal: horizontalInfo,\r\n };\r\n}\r\nfunction getStringDirection(dir) {\r\n var stringDirection = \"\";\r\n if (dir === -1 || dir === \"top\" || dir === \"left\") {\r\n stringDirection = \"start\";\r\n }\r\n else if (dir === 0 || dir === \"center\" || dir === \"middle\") {\r\n stringDirection = \"center\";\r\n }\r\n else if (dir === 1 || dir === \"right\" || dir === \"bottom\") {\r\n stringDirection = \"end\";\r\n }\r\n return stringDirection;\r\n}\r\nfunction checkSnaps(moveable, rect, customSnapVerticalThreshold, customSnapHorizontalThreshold) {\r\n var poses = splitSnapDirectionPoses(moveable.props.snapDirections, rect);\r\n var result = checkMoveableSnapPoses(moveable, poses.vertical, poses.horizontal, poses.verticalNames.map(function (name) { return getStringDirection(name); }), poses.horizontalNames.map(function (name) { return getStringDirection(name); }), customSnapVerticalThreshold, customSnapHorizontalThreshold);\r\n var horizontalDirection = getStringDirection(poses.horizontalNames[result.horizontal.index]);\r\n var verticalDirection = getStringDirection(poses.verticalNames[result.vertical.index]);\r\n return {\r\n vertical: __assign(__assign({}, result.vertical), { direction: verticalDirection }),\r\n horizontal: __assign(__assign({}, result.horizontal), { direction: horizontalDirection }),\r\n };\r\n}\r\nfunction getNearestSnapGuidelineInfo(snapInfo) {\r\n var isSnap = snapInfo.isSnap;\r\n if (!isSnap) {\r\n return {\r\n isSnap: false,\r\n offset: 0,\r\n dist: -1,\r\n pos: 0,\r\n guideline: null,\r\n };\r\n }\r\n var posInfo = snapInfo.posInfos[0];\r\n var guidelineInfo = posInfo.guidelineInfos[0];\r\n var offset = guidelineInfo.offset;\r\n var dist = guidelineInfo.dist;\r\n var guideline = guidelineInfo.guideline;\r\n return {\r\n isSnap: isSnap,\r\n offset: offset,\r\n dist: dist,\r\n pos: posInfo.pos,\r\n guideline: guideline,\r\n };\r\n}\r\nfunction checkSnap(guidelines, targetType, targetPoses, snapThreshold, dirs) {\r\n var _a, _b;\r\n if (dirs === void 0) { dirs = []; }\r\n if (!guidelines || !guidelines.length) {\r\n return {\r\n isSnap: false,\r\n index: -1,\r\n direction: \"\",\r\n posInfos: [],\r\n };\r\n }\r\n var isVertical = targetType === \"vertical\";\r\n var posType = isVertical ? 0 : 1;\r\n var snapPosInfos = targetPoses.map(function (targetPos, index) {\r\n var direction = dirs[index] || \"\";\r\n var guidelineInfos = guidelines.map(function (guideline) {\r\n var pos = guideline.pos;\r\n var offset = targetPos - pos[posType];\r\n return {\r\n offset: offset,\r\n dist: abs(offset),\r\n guideline: guideline,\r\n direction: direction,\r\n };\r\n }).filter(function (_a) {\r\n var guideline = _a.guideline, dist = _a.dist;\r\n var type = guideline.type;\r\n if (type !== targetType\r\n || dist > snapThreshold) {\r\n return false;\r\n }\r\n return true;\r\n }).sort(function (a, b) { return a.dist - b.dist; });\r\n return {\r\n pos: targetPos,\r\n index: index,\r\n guidelineInfos: guidelineInfos,\r\n direction: direction,\r\n };\r\n }).filter(function (snapPosInfo) {\r\n return snapPosInfo.guidelineInfos.length > 0;\r\n }).sort(function (a, b) {\r\n return a.guidelineInfos[0].dist - b.guidelineInfos[0].dist;\r\n });\r\n var isSnap = snapPosInfos.length > 0;\r\n return {\r\n isSnap: isSnap,\r\n index: isSnap ? snapPosInfos[0].index : -1,\r\n direction: (_b = (_a = snapPosInfos[0]) === null || _a === void 0 ? void 0 : _a.direction) !== null && _b !== void 0 ? _b : \"\",\r\n posInfos: snapPosInfos,\r\n };\r\n}\r\nfunction getSnapInfosByDirection(moveable, \r\n// pos1 pos2 pos3 pos4\r\nposes, snapDirection, customSnapVerticalThreshold, customSnapHorizontalThreshold) {\r\n var dirs = [];\r\n if (snapDirection[0] && snapDirection[1]) {\r\n dirs = [\r\n snapDirection,\r\n [-snapDirection[0], snapDirection[1]],\r\n [snapDirection[0], -snapDirection[1]],\r\n ];\r\n }\r\n else if (!snapDirection[0] && !snapDirection[1]) {\r\n [\r\n [-1, -1],\r\n [1, -1],\r\n [1, 1],\r\n [-1, 1],\r\n ].forEach(function (dir, i, arr) {\r\n var nextDir = (arr[i + 1] || arr[0]);\r\n dirs.push(dir);\r\n dirs.push([\r\n (dir[0] + nextDir[0]) / 2,\r\n (dir[1] + nextDir[1]) / 2,\r\n ]);\r\n });\r\n }\r\n else {\r\n if (moveable.props.keepRatio) {\r\n dirs.push([-1, -1], [-1, 1], [1, -1], [1, 1], snapDirection);\r\n }\r\n else {\r\n dirs.push.apply(dirs, __spreadArray([], __read(getPosesByDirection([\r\n [-1, -1],\r\n [1, -1],\r\n [-1, -1],\r\n [1, 1],\r\n ], snapDirection)), false));\r\n if (dirs.length > 1) {\r\n dirs.push([\r\n (dirs[0][0] + dirs[1][0]) / 2,\r\n (dirs[0][1] + dirs[1][1]) / 2,\r\n ]);\r\n }\r\n }\r\n }\r\n var nextPoses = dirs.map(function (dir) { return getPosByDirection(poses, dir); });\r\n var xs = nextPoses.map(function (pos) { return pos[0]; });\r\n var ys = nextPoses.map(function (pos) { return pos[1]; });\r\n var result = checkMoveableSnapPoses(moveable, xs, ys, dirs.map(function (dir) { return getStringDirection(dir[0]); }), dirs.map(function (dir) { return getStringDirection(dir[1]); }), customSnapVerticalThreshold, customSnapHorizontalThreshold);\r\n var verticalDirection = getStringDirection(dirs.map(function (dir) { return dir[0]; })[result.vertical.index]);\r\n var horizontalDirection = getStringDirection(dirs.map(function (dir) { return dir[1]; })[result.horizontal.index]);\r\n return {\r\n vertical: __assign(__assign({}, result.vertical), { direction: verticalDirection }),\r\n horizontal: __assign(__assign({}, result.horizontal), { direction: horizontalDirection }),\r\n };\r\n}\r\nfunction checkSnapBoundPriority(a, b) {\r\n var aDist = abs(a.offset);\r\n var bDist = abs(b.offset);\r\n if (a.isBound && b.isBound) {\r\n return bDist - aDist;\r\n }\r\n else if (a.isBound) {\r\n return -1;\r\n }\r\n else if (b.isBound) {\r\n return 1;\r\n }\r\n else if (a.isSnap && b.isSnap) {\r\n return bDist - aDist;\r\n }\r\n else if (a.isSnap) {\r\n return -1;\r\n }\r\n else if (b.isSnap) {\r\n return 1;\r\n }\r\n else if (aDist < TINY_NUM) {\r\n return 1;\r\n }\r\n else if (bDist < TINY_NUM) {\r\n return -1;\r\n }\r\n return aDist - bDist;\r\n}\r\nfunction getNearOffsetInfo(offsets, index) {\r\n return offsets.slice().sort(function (a, b) {\r\n var aSign = a.sign[index];\r\n var bSign = b.sign[index];\r\n var aOffset = a.offset[index];\r\n var bOffset = b.offset[index];\r\n // -1 The positions of a and b do not change.\r\n // 1 The positions of a and b are reversed.\r\n if (!aSign) {\r\n return 1;\r\n }\r\n else if (!bSign) {\r\n return -1;\r\n }\r\n return checkSnapBoundPriority({ isBound: a.isBound, isSnap: a.isSnap, offset: aOffset }, { isBound: b.isBound, isSnap: b.isSnap, offset: bOffset });\r\n })[0];\r\n}\r\nfunction getCheckSnapDirections(direction, fixedDirection, keepRatio) {\r\n var directions = [];\r\n // const fixedDirection = [-direction[0], -direction[1]];\r\n if (keepRatio) {\r\n if (abs(fixedDirection[0]) !== 1 || abs(fixedDirection[1]) !== 1) {\r\n directions.push([fixedDirection, [-1, -1]], [fixedDirection, [-1, 1]], [fixedDirection, [1, -1]], [fixedDirection, [1, 1]]);\r\n }\r\n else {\r\n directions.push([fixedDirection, [direction[0], -direction[1]]], [fixedDirection, [-direction[0], direction[1]]]);\r\n }\r\n directions.push([fixedDirection, direction]);\r\n }\r\n else {\r\n if ((direction[0] && direction[1]) || (!direction[0] && !direction[1])) {\r\n var endDirection_1 = direction[0] ? direction : [1, 1];\r\n [1, -1].forEach(function (signX) {\r\n [1, -1].forEach(function (signY) {\r\n var nextDirection = [signX * endDirection_1[0], signY * endDirection_1[1]];\r\n if (fixedDirection[0] === nextDirection[0]\r\n && fixedDirection[1] === nextDirection[1]) {\r\n return;\r\n }\r\n directions.push([fixedDirection, nextDirection]);\r\n });\r\n });\r\n }\r\n else if (direction[0]) {\r\n var signs = abs(fixedDirection[0]) === 1 ? [1] : [1, -1];\r\n signs.forEach(function (sign) {\r\n directions.push([\r\n [fixedDirection[0], -1],\r\n [sign * direction[0], -1],\r\n ], [\r\n [fixedDirection[0], 0],\r\n [sign * direction[0], 0],\r\n ], [\r\n [fixedDirection[0], 1],\r\n [sign * direction[0], 1],\r\n ]);\r\n });\r\n }\r\n else if (direction[1]) {\r\n var signs = abs(fixedDirection[1]) === 1 ? [1] : [1, -1];\r\n signs.forEach(function (sign) {\r\n directions.push([\r\n [-1, fixedDirection[1]],\r\n [-1, sign * direction[1]],\r\n ], [\r\n [0, fixedDirection[1]],\r\n [0, sign * direction[1]],\r\n ], [\r\n [1, fixedDirection[1]],\r\n [1, sign * direction[1]],\r\n ]);\r\n });\r\n }\r\n }\r\n return directions;\r\n}\n\nfunction isStartLine(dot, line) {\r\n // l o => true\r\n // o l => false\r\n var cx = average([line[0][0], line[1][0]]);\r\n var cy = average([line[0][1], line[1][1]]);\r\n return {\r\n vertical: cx <= dot[0],\r\n horizontal: cy <= dot[1],\r\n };\r\n}\r\nfunction hitTestLine(dot, _a) {\r\n var _b = __read(_a, 2), pos1 = _b[0], pos2 = _b[1];\r\n var dx = pos2[0] - pos1[0];\r\n var dy = pos2[1] - pos1[1];\r\n if (abs(dx) < TINY_NUM) {\r\n dx = 0;\r\n }\r\n if (abs(dy) < TINY_NUM) {\r\n dy = 0;\r\n }\r\n var test1;\r\n var test2;\r\n if (!dx) {\r\n test1 = pos1[0];\r\n test2 = dot[0];\r\n }\r\n else if (!dy) {\r\n test1 = pos1[1];\r\n test2 = dot[1];\r\n }\r\n else {\r\n var a = dy / dx;\r\n // y = a * (x - pos1) + pos1\r\n test1 = a * (dot[0] - pos1[0]) + pos1[1];\r\n test2 = dot[1];\r\n }\r\n return test1 - test2;\r\n}\r\nfunction isSameStartLine(dots, line, centerSign, error) {\r\n if (error === void 0) { error = TINY_NUM; }\r\n return dots.every(function (dot) {\r\n var value = hitTestLine(dot, line);\r\n var sign = value <= 0;\r\n return sign === centerSign || abs(value) <= error;\r\n });\r\n}\r\nfunction checkInnerBoundDot(pos, start, end, isStart, threshold) {\r\n if (threshold === void 0) { threshold = 0; }\r\n if ((isStart && start - threshold <= pos)\r\n || (!isStart && pos <= end + threshold)) {\r\n // false 402 565 602 => 37 ([0, 37])\r\n // true 400 524.9712603540036 600 => 124 ([124, 0])\r\n // true 400 410 600 => 10 ([10, 0])\r\n return {\r\n isBound: true,\r\n offset: isStart ? start - pos : end - pos,\r\n };\r\n }\r\n return {\r\n isBound: false,\r\n offset: 0,\r\n };\r\n}\r\nfunction checkInnerBound(moveable, _a) {\r\n var line = _a.line, centerSign = _a.centerSign, verticalSign = _a.verticalSign, horizontalSign = _a.horizontalSign, lineConstants = _a.lineConstants;\r\n var bounds = moveable.props.innerBounds;\r\n if (!bounds) {\r\n return {\r\n isAllBound: false,\r\n isBound: false,\r\n isVerticalBound: false,\r\n isHorizontalBound: false,\r\n offset: [0, 0],\r\n };\r\n }\r\n var left = bounds.left, top = bounds.top, width = bounds.width, height = bounds.height;\r\n var leftLine = [[left, top], [left, top + height]];\r\n var topLine = [[left, top], [left + width, top]];\r\n var rightLine = [[left + width, top], [left + width, top + height]];\r\n var bottomLine = [[left, top + height], [left + width, top + height]];\r\n if (isSameStartLine([\r\n [left, top],\r\n [left + width, top],\r\n [left, top + height],\r\n [left + width, top + height],\r\n ], line, centerSign)) {\r\n return {\r\n isAllBound: false,\r\n isBound: false,\r\n isVerticalBound: false,\r\n isHorizontalBound: false,\r\n offset: [0, 0],\r\n };\r\n }\r\n // test vertical\r\n var topBoundInfo = checkLineBoundCollision(line, lineConstants, topLine, verticalSign);\r\n var bottomBoundInfo = checkLineBoundCollision(line, lineConstants, bottomLine, verticalSign);\r\n // test horizontal\r\n var leftBoundInfo = checkLineBoundCollision(line, lineConstants, leftLine, horizontalSign);\r\n var rightBoundInfo = checkLineBoundCollision(line, lineConstants, rightLine, horizontalSign);\r\n var isAllVerticalBound = topBoundInfo.isBound && bottomBoundInfo.isBound;\r\n var isVerticalBound = topBoundInfo.isBound || bottomBoundInfo.isBound;\r\n var isAllHorizontalBound = leftBoundInfo.isBound && rightBoundInfo.isBound;\r\n var isHorizontalBound = leftBoundInfo.isBound || rightBoundInfo.isBound;\r\n var verticalOffset = maxOffset(topBoundInfo.offset, bottomBoundInfo.offset);\r\n var horizontalOffset = maxOffset(leftBoundInfo.offset, rightBoundInfo.offset);\r\n var offset = [0, 0];\r\n var isBound = false;\r\n var isAllBound = false;\r\n if (abs(horizontalOffset) < abs(verticalOffset)) {\r\n offset = [verticalOffset, 0];\r\n isBound = isVerticalBound;\r\n isAllBound = isAllVerticalBound;\r\n }\r\n else {\r\n offset = [0, horizontalOffset];\r\n isBound = isHorizontalBound;\r\n isAllBound = isAllHorizontalBound;\r\n }\r\n return {\r\n isAllBound: isAllBound,\r\n isVerticalBound: isVerticalBound,\r\n isHorizontalBound: isHorizontalBound,\r\n isBound: isBound,\r\n offset: offset,\r\n };\r\n}\r\nfunction checkLineBoundCollision(line, _a, boundLine, isStart, threshold, isRender) {\r\n var _b = __read(_a, 2), a = _b[0], b = _b[1];\r\n var dot1 = line[0];\r\n // const dot2 = line[1];\r\n var boundDot1 = boundLine[0];\r\n var boundDot2 = boundLine[1];\r\n // const dy1 = getTinyDist(dot2[1] - dot1[1]);\r\n // const dx1 = getTinyDist(dot2[0] - dot1[0]);\r\n var dy2 = getTinyDist(boundDot2[1] - boundDot1[1]);\r\n var dx2 = getTinyDist(boundDot2[0] - boundDot1[0]);\r\n var hasDx = b;\r\n var hasDy = a;\r\n var slope = -a / b;\r\n // lineConstants\r\n // ax + by + c = 0\r\n // dx2 or dy2 is zero\r\n if (!dx2) {\r\n // vertical\r\n // by + c = 0\r\n if (isRender && !hasDy) {\r\n // 90deg\r\n return {\r\n isBound: false,\r\n offset: 0,\r\n };\r\n }\r\n else if (hasDx) {\r\n // ax + by + c = 0\r\n // const y = dy1 ? dy1 / dx1 * (boundDot1[0] - dot1[0]) + dot1[1] : dot1[1];\r\n var y = slope * (boundDot1[0] - dot1[0]) + dot1[1];\r\n // boundDot1[1] <= y <= boundDot2[1]\r\n return checkInnerBoundDot(y, boundDot1[1], boundDot2[1], isStart, threshold);\r\n }\r\n else {\r\n // ax + c = 0\r\n var offset = boundDot1[0] - dot1[0];\r\n var isBound = abs(offset) <= (threshold || 0);\r\n return {\r\n isBound: isBound,\r\n offset: isBound ? offset : 0,\r\n };\r\n }\r\n }\r\n else if (!dy2) {\r\n // horizontal\r\n if (isRender && !hasDx) {\r\n // 90deg\r\n return {\r\n isBound: false,\r\n offset: 0,\r\n };\r\n }\r\n else if (hasDy) {\r\n // y = a * (x - x1) + y1\r\n // x = (y - y1) / a + x1\r\n // const a = dy1 / dx1;\r\n // const x = dx1 ? (boundDot1[1] - dot1[1]) / a + dot1[0] : dot1[0];\r\n var x = (boundDot1[1] - dot1[1]) / slope + dot1[0];\r\n // boundDot1[0] <= x && x <= boundDot2[0]\r\n return checkInnerBoundDot(x, boundDot1[0], boundDot2[0], isStart, threshold);\r\n }\r\n else {\r\n var offset = boundDot1[1] - dot1[1];\r\n var isBound = abs(offset) <= (threshold || 0);\r\n return {\r\n isBound: isBound,\r\n offset: isBound ? offset : 0,\r\n };\r\n }\r\n }\r\n return {\r\n isBound: false,\r\n offset: 0,\r\n };\r\n}\r\nfunction getInnerBoundInfo(moveable, lineInfos, datas) {\r\n return lineInfos.map(function (info) {\r\n var _a = checkInnerBound(moveable, info), isBound = _a.isBound, offset = _a.offset, isVerticalBound = _a.isVerticalBound, isHorizontalBound = _a.isHorizontalBound;\r\n var multiple = info.multiple;\r\n var sizeOffset = getDragDist({\r\n datas: datas,\r\n distX: offset[0],\r\n distY: offset[1],\r\n }).map(function (size, i) { return size * (multiple[i] ? 2 / multiple[i] : 0); });\r\n return {\r\n sign: multiple,\r\n isBound: isBound,\r\n isVerticalBound: isVerticalBound,\r\n isHorizontalBound: isHorizontalBound,\r\n isSnap: false,\r\n offset: sizeOffset,\r\n };\r\n });\r\n}\r\nfunction getInnerBoundDragInfo(moveable, poses, datas) {\r\n var _a;\r\n var lines = getCheckInnerBoundLineInfos(moveable, poses, [0, 0], false).map(function (info) {\r\n return __assign(__assign({}, info), { multiple: info.multiple.map(function (dir) { return abs(dir) * 2; }) });\r\n });\r\n var innerBoundInfo = getInnerBoundInfo(moveable, lines, datas);\r\n var widthOffsetInfo = getNearOffsetInfo(innerBoundInfo, 0);\r\n var heightOffsetInfo = getNearOffsetInfo(innerBoundInfo, 1);\r\n var verticalOffset = 0;\r\n var horizontalOffset = 0;\r\n var isVerticalBound = widthOffsetInfo.isVerticalBound || heightOffsetInfo.isVerticalBound;\r\n var isHorizontalBound = widthOffsetInfo.isHorizontalBound || heightOffsetInfo.isHorizontalBound;\r\n if (isVerticalBound || isHorizontalBound) {\r\n _a = __read(getInverseDragDist({\r\n datas: datas,\r\n distX: -widthOffsetInfo.offset[0],\r\n distY: -heightOffsetInfo.offset[1],\r\n }), 2), verticalOffset = _a[0], horizontalOffset = _a[1];\r\n }\r\n return {\r\n vertical: {\r\n isBound: isVerticalBound,\r\n offset: verticalOffset,\r\n },\r\n horizontal: {\r\n isBound: isHorizontalBound,\r\n offset: horizontalOffset,\r\n },\r\n };\r\n}\r\nfunction getCheckSnapLineDirections(direction, keepRatio) {\r\n var lineDirections = [];\r\n var x = direction[0];\r\n var y = direction[1];\r\n if (x && y) {\r\n lineDirections.push([[0, y * 2], direction, [-x, y]], [[x * 2, 0], direction, [x, -y]]);\r\n }\r\n else if (x) {\r\n // vertcal\r\n lineDirections.push([[x * 2, 0], [x, 1], [x, -1]]);\r\n if (keepRatio) {\r\n lineDirections.push([[0, -1], [x, -1], [-x, -1]], [[0, 1], [x, 1], [-x, 1]]);\r\n }\r\n }\r\n else if (y) {\r\n // horizontal\r\n lineDirections.push([[0, y * 2], [1, y], [-1, y]]);\r\n if (keepRatio) {\r\n lineDirections.push([[-1, 0], [-1, y], [-1, -y]], [[1, 0], [1, y], [1, -y]]);\r\n }\r\n }\r\n else {\r\n // [0, 0] to all direction\r\n lineDirections.push([[-1, 0], [-1, -1], [-1, 1]], [[1, 0], [1, -1], [1, 1]], [[0, -1], [-1, -1], [1, -1]], [[0, 1], [-1, 1], [1, 1]]);\r\n }\r\n return lineDirections;\r\n}\r\nfunction getCheckInnerBoundLineInfos(moveable, poses, direction, keepRatio) {\r\n var _a = moveable.state, allMatrix = _a.allMatrix, is3d = _a.is3d;\r\n var virtualPoses = calculatePoses(allMatrix, 100, 100, is3d ? 4 : 3);\r\n var center = getPosByDirection(virtualPoses, [0, 0]);\r\n return getCheckSnapLineDirections(direction, keepRatio).map(function (_a) {\r\n var _b = __read(_a, 3), multiple = _b[0], dir1 = _b[1], dir2 = _b[2];\r\n var virtualLine = [\r\n getPosByDirection(virtualPoses, dir1),\r\n getPosByDirection(virtualPoses, dir2),\r\n ];\r\n var lineConstants = solveLineConstants(virtualLine);\r\n var _c = isStartLine(center, virtualLine), verticalSign = _c.vertical, horizontalSign = _c.horizontal;\r\n var centerSign = hitTestLine(center, virtualLine) <= 0;\r\n return {\r\n multiple: multiple,\r\n centerSign: centerSign,\r\n verticalSign: verticalSign,\r\n horizontalSign: horizontalSign,\r\n lineConstants: lineConstants,\r\n line: [\r\n getPosByDirection(poses, dir1),\r\n getPosByDirection(poses, dir2),\r\n ],\r\n };\r\n });\r\n}\r\nfunction isBoundRotate(relativePoses, boundDots, center, rad) {\r\n var nextPoses = rad ? relativePoses.map(function (pos) { return rotate(pos, rad); }) : relativePoses;\r\n return [\r\n [nextPoses[0], nextPoses[1]],\r\n [nextPoses[1], nextPoses[3]],\r\n [nextPoses[3], nextPoses[2]],\r\n [nextPoses[2], nextPoses[0]],\r\n ].some(function (line) {\r\n var centerSign = hitTestLine(center, line) <= 0;\r\n return !isSameStartLine(boundDots, line, centerSign);\r\n });\r\n}\r\nfunction getDistPointLine(_a) {\r\n // x = 0, y = 0\r\n // d = (ax + by + c) / root(a2 + b2)\r\n var _b = __read(_a, 2), pos1 = _b[0], pos2 = _b[1];\r\n var dx = pos2[0] - pos1[0];\r\n var dy = pos2[1] - pos1[1];\r\n if (!dx) {\r\n return abs(pos1[0]);\r\n }\r\n if (!dy) {\r\n return abs(pos1[1]);\r\n }\r\n // y - y1 = a(x - x1)\r\n // 0 = ax -y + -a * x1 + y1\r\n var a = dy / dx;\r\n return abs((-a * pos1[0] + pos1[1]) / Math.sqrt(Math.pow(a, 2) + 1));\r\n}\r\nfunction solveReverseLine(_a) {\r\n var _b = __read(_a, 2), pos1 = _b[0], pos2 = _b[1];\r\n var dx = pos2[0] - pos1[0];\r\n var dy = pos2[1] - pos1[1];\r\n if (!dx) {\r\n return [pos1[0], 0];\r\n }\r\n if (!dy) {\r\n return [0, pos1[1]];\r\n }\r\n var a = dy / dx;\r\n // y - y1 = a (x - x1)\r\n // y = ax - a * x1 + y1\r\n var b = -a * pos1[0] + pos1[1];\r\n // y = ax + b = -1/a x\r\n // x = -b / (a + 1 / a)\r\n // y = b / (1 + 1 / a^2)\r\n return [\r\n -b / (a + 1 / a),\r\n b / ((a * a) + 1),\r\n ];\r\n}\r\nfunction checkRotateInnerBounds(moveable, prevPoses, nextPoses, origin, rotation) {\r\n var bounds = moveable.props.innerBounds;\r\n var rad = rotation * Math.PI / 180;\r\n if (!bounds) {\r\n return [];\r\n }\r\n var left = bounds.left, top = bounds.top, width = bounds.width, height = bounds.height;\r\n var relativeLeft = left - origin[0];\r\n var relativeRight = left + width - origin[0];\r\n var relativeTop = top - origin[1];\r\n var relativeBottom = top + height - origin[1];\r\n var dots = [\r\n [relativeLeft, relativeTop],\r\n [relativeRight, relativeTop],\r\n [relativeLeft, relativeBottom],\r\n [relativeRight, relativeBottom],\r\n ];\r\n var center = getPosByDirection(nextPoses, [0, 0]);\r\n if (!isBoundRotate(nextPoses, dots, center, 0)) {\r\n return [];\r\n }\r\n var result = [];\r\n var dotInfos = dots.map(function (dot) { return [\r\n getDistSize(dot),\r\n getRad([0, 0], dot),\r\n ]; });\r\n [\r\n [nextPoses[0], nextPoses[1]],\r\n [nextPoses[1], nextPoses[3]],\r\n [nextPoses[3], nextPoses[2]],\r\n [nextPoses[2], nextPoses[0]],\r\n ].forEach(function (line) {\r\n var lineRad = getRad([0, 0], solveReverseLine(line));\r\n var lineDist = getDistPointLine(line);\r\n result.push.apply(result, __spreadArray([], __read(dotInfos\r\n .filter(function (_a) {\r\n var _b = __read(_a, 1), dotDist = _b[0];\r\n return dotDist && lineDist <= dotDist;\r\n })\r\n .map(function (_a) {\r\n var _b = __read(_a, 2), dotDist = _b[0], dotRad = _b[1];\r\n var distRad = Math.acos(dotDist ? lineDist / dotDist : 0);\r\n var nextRad1 = dotRad + distRad;\r\n var nextRad2 = dotRad - distRad;\r\n return [\r\n rad + nextRad1 - lineRad,\r\n rad + nextRad2 - lineRad,\r\n ];\r\n })\r\n .reduce(function (prev, cur) {\r\n prev.push.apply(prev, __spreadArray([], __read(cur), false));\r\n return prev;\r\n }, [])\r\n .filter(function (nextRad) { return !isBoundRotate(prevPoses, dots, center, nextRad); })\r\n .map(function (nextRad) { return throttle(nextRad * 180 / Math.PI, TINY_NUM); })), false));\r\n });\r\n return result;\r\n}\r\nfunction checkInnerBoundPoses(moveable) {\r\n var innerBounds = moveable.props.innerBounds;\r\n var boundMap = getInitialBounds();\r\n if (!innerBounds) {\r\n return {\r\n boundMap: boundMap,\r\n vertical: [],\r\n horizontal: [],\r\n };\r\n }\r\n var _a = moveable.getRect(), pos1 = _a.pos1, pos2 = _a.pos2, pos3 = _a.pos3, pos4 = _a.pos4;\r\n var poses = [pos1, pos2, pos3, pos4];\r\n var center = getPosByDirection(poses, [0, 0]);\r\n var left = innerBounds.left, top = innerBounds.top, width = innerBounds.width, height = innerBounds.height;\r\n var leftLine = [[left, top], [left, top + height]];\r\n var topLine = [[left, top], [left + width, top]];\r\n var rightLine = [[left + width, top], [left + width, top + height]];\r\n var bottomLine = [[left, top + height], [left + width, top + height]];\r\n var lineInfos = getCheckInnerBoundLineInfos(moveable, poses, [0, 0], false);\r\n var horizontalPoses = [];\r\n var verticalPoses = [];\r\n lineInfos.forEach(function (lineInfo) {\r\n var line = lineInfo.line, lineConstants = lineInfo.lineConstants;\r\n var _a = isStartLine(center, line), isHorizontalStart = _a.horizontal, isVerticalStart = _a.vertical;\r\n // test vertical\r\n var topBoundInfo = checkLineBoundCollision(line, lineConstants, topLine, isVerticalStart, 1, true);\r\n var bottomBoundInfo = checkLineBoundCollision(line, lineConstants, bottomLine, isVerticalStart, 1, true);\r\n // test horizontal\r\n var leftBoundInfo = checkLineBoundCollision(line, lineConstants, leftLine, isHorizontalStart, 1, true);\r\n var rightBoundInfo = checkLineBoundCollision(line, lineConstants, rightLine, isHorizontalStart, 1, true);\r\n if (topBoundInfo.isBound && !boundMap.top) {\r\n horizontalPoses.push(top);\r\n boundMap.top = true;\r\n }\r\n if (bottomBoundInfo.isBound && !boundMap.bottom) {\r\n horizontalPoses.push(top + height);\r\n boundMap.bottom = true;\r\n }\r\n if (leftBoundInfo.isBound && !boundMap.left) {\r\n verticalPoses.push(left);\r\n boundMap.left = true;\r\n }\r\n if (rightBoundInfo.isBound && !boundMap.right) {\r\n verticalPoses.push(left + width);\r\n boundMap.right = true;\r\n }\r\n });\r\n return {\r\n boundMap: boundMap,\r\n horizontal: horizontalPoses,\r\n vertical: verticalPoses,\r\n };\r\n}\n\nfunction solveEquation(pos1, pos2, snapOffset, isVertical) {\r\n var dx = pos2[0] - pos1[0];\r\n var dy = pos2[1] - pos1[1];\r\n if (abs(dx) < TINY_NUM$1) {\r\n dx = 0;\r\n }\r\n if (abs(dy) < TINY_NUM$1) {\r\n dy = 0;\r\n }\r\n if (!dx) {\r\n // y = 0 * x + b\r\n // only horizontal\r\n if (!isVertical) {\r\n return [0, snapOffset];\r\n }\r\n return [0, 0];\r\n }\r\n if (!dy) {\r\n // only vertical\r\n if (isVertical) {\r\n return [snapOffset, 0];\r\n }\r\n return [0, 0];\r\n }\r\n // y = ax + b\r\n var a = dy / dx;\r\n var b = pos1[1] - a * pos1[0];\r\n if (isVertical) {\r\n // y = a * x + b\r\n var y = a * (pos2[0] + snapOffset) + b;\r\n return [snapOffset, y - pos2[1]];\r\n }\r\n else {\r\n // x = (y - b) / a\r\n var x = (pos2[1] + snapOffset - b) / a;\r\n return [x - pos2[0], snapOffset];\r\n }\r\n}\r\nfunction solveNextOffset(pos1, pos2, offset, isVertical, datas) {\r\n var sizeOffset = solveEquation(pos1, pos2, offset, isVertical);\r\n if (!sizeOffset) {\r\n return {\r\n isOutside: false,\r\n offset: [0, 0],\r\n };\r\n }\r\n var size = getDist$1(pos1, pos2);\r\n var dist1 = getDist$1(sizeOffset, pos1);\r\n var dist2 = getDist$1(sizeOffset, pos2);\r\n var isOutside = dist1 > size || dist2 > size;\r\n var _a = __read(getDragDist({\r\n datas: datas,\r\n distX: sizeOffset[0],\r\n distY: sizeOffset[1],\r\n }), 2), widthOffset = _a[0], heightOffset = _a[1];\r\n return {\r\n offset: [widthOffset, heightOffset],\r\n isOutside: isOutside,\r\n };\r\n}\r\nfunction getSnapBound(boundInfo, snapInfo) {\r\n if (boundInfo.isBound) {\r\n return boundInfo.offset;\r\n }\r\n else if (snapInfo.isSnap) {\r\n return getNearestSnapGuidelineInfo(snapInfo).offset;\r\n }\r\n return 0;\r\n}\r\nfunction checkThrottleDragRotate(throttleDragRotate, _a, _b, _c, _d) {\r\n var _e = __read(_a, 2), distX = _e[0], distY = _e[1];\r\n var _f = __read(_b, 2), isVerticalBound = _f[0], isHorizontalBound = _f[1];\r\n var _g = __read(_c, 2), isVerticalSnap = _g[0], isHorizontalSnap = _g[1];\r\n var _h = __read(_d, 2), verticalOffset = _h[0], horizontalOffset = _h[1];\r\n var offsetX = -verticalOffset;\r\n var offsetY = -horizontalOffset;\r\n if (throttleDragRotate && distX && distY) {\r\n offsetX = 0;\r\n offsetY = 0;\r\n var adjustPoses = [];\r\n if (isVerticalBound && isHorizontalBound) {\r\n adjustPoses.push([0, horizontalOffset], [verticalOffset, 0]);\r\n }\r\n else if (isVerticalBound) {\r\n adjustPoses.push([verticalOffset, 0]);\r\n }\r\n else if (isHorizontalBound) {\r\n adjustPoses.push([0, horizontalOffset]);\r\n }\r\n else if (isVerticalSnap && isHorizontalSnap) {\r\n adjustPoses.push([0, horizontalOffset], [verticalOffset, 0]);\r\n }\r\n else if (isVerticalSnap) {\r\n adjustPoses.push([verticalOffset, 0]);\r\n }\r\n else if (isHorizontalSnap) {\r\n adjustPoses.push([0, horizontalOffset]);\r\n }\r\n if (adjustPoses.length) {\r\n adjustPoses.sort(function (a, b) {\r\n return (getDistSize(minus([distX, distY], a)) -\r\n getDistSize(minus([distX, distY], b)));\r\n });\r\n var adjustPos = adjustPoses[0];\r\n if (adjustPos[0] && abs(distX) > TINY_NUM$1) {\r\n offsetX = -adjustPos[0];\r\n offsetY =\r\n (distY * abs(distX + offsetX)) / abs(distX) -\r\n distY;\r\n }\r\n else if (adjustPos[1] && abs(distY) > TINY_NUM$1) {\r\n var prevDistY = distY;\r\n offsetY = -adjustPos[1];\r\n offsetX =\r\n (distX * abs(distY + offsetY)) / abs(prevDistY) -\r\n distX;\r\n }\r\n if (throttleDragRotate && isHorizontalBound && isVerticalBound) {\r\n if (abs(offsetX) > TINY_NUM$1 &&\r\n abs(offsetX) < abs(verticalOffset)) {\r\n var scale = abs(verticalOffset) / abs(offsetX);\r\n offsetX *= scale;\r\n offsetY *= scale;\r\n }\r\n else if (abs(offsetY) > TINY_NUM$1 &&\r\n abs(offsetY) < abs(horizontalOffset)) {\r\n var scale = abs(horizontalOffset) / abs(offsetY);\r\n offsetX *= scale;\r\n offsetY *= scale;\r\n }\r\n else {\r\n offsetX = maxOffset(-verticalOffset, offsetX);\r\n offsetY = maxOffset(-horizontalOffset, offsetY);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n offsetX = distX || isVerticalBound ? -verticalOffset : 0;\r\n offsetY = distY || isHorizontalBound ? -horizontalOffset : 0;\r\n }\r\n return [offsetX, offsetY];\r\n}\r\nfunction checkSnapBoundsDrag(moveable, distX, distY, throttleDragRotate, ignoreSnap, datas) {\r\n if (!hasGuidelines(moveable, \"draggable\")) {\r\n return [\r\n {\r\n isSnap: false,\r\n isBound: false,\r\n offset: 0,\r\n },\r\n {\r\n isSnap: false,\r\n isBound: false,\r\n offset: 0,\r\n },\r\n ];\r\n }\r\n var poses = getAbsolutePoses(datas.absolutePoses, [distX, distY]);\r\n var _a = getRect(poses), left = _a.left, right = _a.right, top = _a.top, bottom = _a.bottom;\r\n var boundPoses = {\r\n horizontal: poses.map(function (pos) { return pos[1]; }),\r\n vertical: poses.map(function (pos) { return pos[0]; }),\r\n };\r\n var snapDirections = getSnapDirections(moveable.props.snapDirections);\r\n var snapPoses = splitSnapDirectionPoses(snapDirections, {\r\n left: left,\r\n right: right,\r\n top: top,\r\n bottom: bottom,\r\n center: (left + right) / 2,\r\n middle: (top + bottom) / 2,\r\n });\r\n var _b = checkMoveableSnapBounds(moveable, ignoreSnap, snapPoses, boundPoses), verticalSnapBoundInfo = _b.vertical, horizontalSnapBoundInfo = _b.horizontal;\r\n var _c = getInnerBoundDragInfo(moveable, poses, datas), verticalInnerBoundInfo = _c.vertical, horizontalInnerBoundInfo = _c.horizontal;\r\n var isVerticalSnap = verticalSnapBoundInfo.isSnap;\r\n var isHorizontalSnap = horizontalSnapBoundInfo.isSnap;\r\n var isVerticalBound = verticalSnapBoundInfo.isBound || verticalInnerBoundInfo.isBound;\r\n var isHorizontalBound = horizontalSnapBoundInfo.isBound || horizontalInnerBoundInfo.isBound;\r\n var verticalOffset = maxOffset(verticalSnapBoundInfo.offset, verticalInnerBoundInfo.offset);\r\n var horizontalOffset = maxOffset(horizontalSnapBoundInfo.offset, horizontalInnerBoundInfo.offset);\r\n var _d = __read(checkThrottleDragRotate(throttleDragRotate, [distX, distY], [isVerticalBound, isHorizontalBound], [isVerticalSnap, isHorizontalSnap], [verticalOffset, horizontalOffset]), 2), offsetX = _d[0], offsetY = _d[1];\r\n return [\r\n {\r\n isBound: isVerticalBound,\r\n isSnap: isVerticalSnap,\r\n offset: offsetX,\r\n },\r\n {\r\n isBound: isHorizontalBound,\r\n isSnap: isHorizontalSnap,\r\n offset: offsetY,\r\n },\r\n ];\r\n}\r\nfunction checkMoveableSnapBounds(moveable, ignoreSnap, poses, boundPoses) {\r\n if (boundPoses === void 0) { boundPoses = poses; }\r\n var _a = checkBoundPoses(getBounds(moveable), boundPoses.vertical, boundPoses.horizontal), horizontalBoundInfos = _a.horizontal, verticalBoundInfos = _a.vertical;\r\n var _b = ignoreSnap ? {\r\n horizontal: { isSnap: false, index: -1 },\r\n vertical: { isSnap: false, index: -1 },\r\n } : checkMoveableSnapPoses(moveable, poses.vertical, poses.horizontal, undefined, undefined, undefined, undefined), horizontalSnapInfo = _b.horizontal, verticalSnapInfo = _b.vertical;\r\n var horizontalOffset = getSnapBound(horizontalBoundInfos[0], horizontalSnapInfo);\r\n var verticalOffset = getSnapBound(verticalBoundInfos[0], verticalSnapInfo);\r\n var horizontalDist = abs(horizontalOffset);\r\n var verticalDist = abs(verticalOffset);\r\n return {\r\n horizontal: {\r\n isBound: horizontalBoundInfos[0].isBound,\r\n isSnap: horizontalSnapInfo.isSnap,\r\n snapIndex: horizontalSnapInfo.index,\r\n offset: horizontalOffset,\r\n dist: horizontalDist,\r\n bounds: horizontalBoundInfos,\r\n snap: horizontalSnapInfo,\r\n },\r\n vertical: {\r\n isBound: verticalBoundInfos[0].isBound,\r\n isSnap: verticalSnapInfo.isSnap,\r\n snapIndex: verticalSnapInfo.index,\r\n offset: verticalOffset,\r\n dist: verticalDist,\r\n bounds: verticalBoundInfos,\r\n snap: verticalSnapInfo,\r\n },\r\n };\r\n}\r\nfunction checkSnapBounds(guideines, bounds, posesX, posesY, snapHorizontalThreshold, snapVerticalThreshold, multiples) {\r\n if (multiples === void 0) { multiples = [1, 1]; }\r\n var _a = checkBoundPoses(bounds, posesX, posesY), horizontalBoundInfos = _a.horizontal, verticalBoundInfos = _a.vertical;\r\n // options.isRequest ? {\r\n // horizontal: { isSnap: false, index: -1 } as SnapInfo,\r\n // vertical: { isSnap: false, index: -1 } as SnapInfo,\r\n // } :\r\n var _b = checkSnapPoses(guideines, posesX, posesY, [], [], snapHorizontalThreshold, snapVerticalThreshold, multiples), horizontalSnapInfo = _b.horizontal, verticalSnapInfo = _b.vertical;\r\n var horizontalOffset = getSnapBound(horizontalBoundInfos[0], horizontalSnapInfo);\r\n var verticalOffset = getSnapBound(verticalBoundInfos[0], verticalSnapInfo);\r\n var horizontalDist = abs(horizontalOffset);\r\n var verticalDist = abs(verticalOffset);\r\n return {\r\n horizontal: {\r\n isBound: horizontalBoundInfos[0].isBound,\r\n isSnap: horizontalSnapInfo.isSnap,\r\n snapIndex: horizontalSnapInfo.index,\r\n offset: horizontalOffset,\r\n dist: horizontalDist,\r\n bounds: horizontalBoundInfos,\r\n snap: horizontalSnapInfo,\r\n },\r\n vertical: {\r\n isBound: verticalBoundInfos[0].isBound,\r\n isSnap: verticalSnapInfo.isSnap,\r\n snapIndex: verticalSnapInfo.index,\r\n offset: verticalOffset,\r\n dist: verticalDist,\r\n bounds: verticalBoundInfos,\r\n snap: verticalSnapInfo,\r\n },\r\n };\r\n}\r\nfunction checkSnapRightLine(startPos, endPos, snapBoundInfo, keepRatio) {\r\n var rad = (getRad(startPos, endPos) / Math.PI) * 180;\r\n var _a = snapBoundInfo.vertical, isVerticalBound = _a.isBound, isVerticalSnap = _a.isSnap, verticalDist = _a.dist, _b = snapBoundInfo.horizontal, isHorizontalBound = _b.isBound, isHorizontalSnap = _b.isSnap, horizontalDist = _b.dist;\r\n var rad180 = rad % 180;\r\n var isHorizontalLine = rad180 < 3 || rad180 > 177;\r\n var isVerticalLine = rad180 > 87 && rad180 < 93;\r\n if (horizontalDist < verticalDist) {\r\n if (isVerticalBound ||\r\n (isVerticalSnap &&\r\n !isVerticalLine &&\r\n (!keepRatio || !isHorizontalLine))) {\r\n return \"vertical\";\r\n }\r\n }\r\n if (isHorizontalBound ||\r\n (isHorizontalSnap &&\r\n !isHorizontalLine &&\r\n (!keepRatio || !isVerticalLine))) {\r\n return \"horizontal\";\r\n }\r\n return \"\";\r\n}\r\nfunction getSnapBoundInfo(moveable, poses, directions, keepRatio, isRequest, datas) {\r\n return directions.map(function (_a) {\r\n var _b = __read(_a, 2), startDirection = _b[0], endDirection = _b[1];\r\n var otherStartPos = getPosByDirection(poses, startDirection);\r\n var otherEndPos = getPosByDirection(poses, endDirection);\r\n var snapBoundInfo = keepRatio\r\n ? checkSnapBoundsKeepRatio(moveable, otherStartPos, otherEndPos, isRequest)\r\n : checkMoveableSnapBounds(moveable, isRequest, {\r\n vertical: [otherEndPos[0]],\r\n horizontal: [otherEndPos[1]],\r\n });\r\n var _c = snapBoundInfo.horizontal, \r\n // dist: otherHorizontalDist,\r\n otherHorizontalOffset = _c.offset, isOtherHorizontalBound = _c.isBound, isOtherHorizontalSnap = _c.isSnap, _d = snapBoundInfo.vertical, \r\n // dist: otherVerticalDist,\r\n otherVerticalOffset = _d.offset, isOtherVerticalBound = _d.isBound, isOtherVerticalSnap = _d.isSnap;\r\n var multiple = minus(endDirection, startDirection);\r\n if (!otherVerticalOffset && !otherHorizontalOffset) {\r\n return {\r\n isBound: isOtherVerticalBound || isOtherHorizontalBound,\r\n isSnap: isOtherVerticalSnap || isOtherHorizontalSnap,\r\n sign: multiple,\r\n offset: [0, 0],\r\n };\r\n }\r\n var snapLine = checkSnapRightLine(otherStartPos, otherEndPos, snapBoundInfo, keepRatio);\r\n if (!snapLine) {\r\n return {\r\n sign: multiple,\r\n isBound: false,\r\n isSnap: false,\r\n offset: [0, 0],\r\n };\r\n }\r\n var isVertical = snapLine === \"vertical\";\r\n var sizeOffset = [0, 0];\r\n if (!keepRatio\r\n && abs(endDirection[0]) === 1\r\n && abs(endDirection[1]) === 1\r\n && startDirection[0] !== endDirection[0]\r\n && startDirection[1] !== endDirection[1]) {\r\n sizeOffset = getDragDist({\r\n datas: datas,\r\n distX: -otherVerticalOffset,\r\n distY: -otherHorizontalOffset,\r\n });\r\n }\r\n else {\r\n sizeOffset = solveNextOffset(otherStartPos, otherEndPos, -(isVertical ? otherVerticalOffset : otherHorizontalOffset), isVertical, datas).offset;\r\n }\r\n sizeOffset = sizeOffset.map(function (size, i) { return size * (multiple[i] ? 2 / multiple[i] : 0); });\r\n return {\r\n sign: multiple,\r\n isBound: isVertical ? isOtherVerticalBound : isOtherHorizontalBound,\r\n isSnap: isVertical ? isOtherVerticalSnap : isOtherHorizontalSnap,\r\n offset: sizeOffset,\r\n };\r\n });\r\n}\r\nfunction getSnapBoundOffset(boundInfo, snapInfo) {\r\n if (boundInfo.isBound) {\r\n return boundInfo.offset;\r\n }\r\n else if (snapInfo.isSnap) {\r\n return snapInfo.offset;\r\n }\r\n return 0;\r\n}\r\nfunction checkSnapBoundsKeepRatio(moveable, startPos, endPos, isRequest) {\r\n var _a = checkBoundKeepRatio(moveable, startPos, endPos), horizontalBoundInfo = _a.horizontal, verticalBoundInfo = _a.vertical;\r\n var _b = isRequest ? {\r\n horizontal: { isSnap: false },\r\n vertical: { isSnap: false },\r\n } : checkSnapKeepRatio(moveable, startPos, endPos), horizontalSnapInfo = _b.horizontal, verticalSnapInfo = _b.vertical;\r\n var horizontalOffset = getSnapBoundOffset(horizontalBoundInfo, horizontalSnapInfo);\r\n var verticalOffset = getSnapBoundOffset(verticalBoundInfo, verticalSnapInfo);\r\n var horizontalDist = abs(horizontalOffset);\r\n var verticalDist = abs(verticalOffset);\r\n return {\r\n horizontal: {\r\n isBound: horizontalBoundInfo.isBound,\r\n isSnap: horizontalSnapInfo.isSnap,\r\n offset: horizontalOffset,\r\n dist: horizontalDist,\r\n },\r\n vertical: {\r\n isBound: verticalBoundInfo.isBound,\r\n isSnap: verticalSnapInfo.isSnap,\r\n offset: verticalOffset,\r\n dist: verticalDist,\r\n },\r\n };\r\n}\r\nfunction checkMaxBounds(moveable, poses, direction, fixedPosition, datas) {\r\n var fixedDirection = [-direction[0], -direction[1]];\r\n var _a = moveable.state, width = _a.width, height = _a.height;\r\n var bounds = moveable.props.bounds;\r\n var maxWidth = Infinity;\r\n var maxHeight = Infinity;\r\n if (bounds) {\r\n var directions = [\r\n [direction[0], -direction[1]],\r\n [-direction[0], direction[1]],\r\n ];\r\n var _b = bounds.left, left_1 = _b === void 0 ? -Infinity : _b, _c = bounds.top, top_1 = _c === void 0 ? -Infinity : _c, _d = bounds.right, right_1 = _d === void 0 ? Infinity : _d, _e = bounds.bottom, bottom_1 = _e === void 0 ? Infinity : _e;\r\n directions.forEach(function (otherDirection) {\r\n var isCheckVertical = otherDirection[0] !== fixedDirection[0];\r\n var isCheckHorizontal = otherDirection[1] !== fixedDirection[1];\r\n var otherPos = getPosByDirection(poses, otherDirection);\r\n var deg = (getRad(fixedPosition, otherPos) * 360) / Math.PI;\r\n if (isCheckHorizontal) {\r\n var nextOtherPos = otherPos.slice();\r\n if (abs(deg - 360) < 2 || abs(deg - 180) < 2) {\r\n nextOtherPos[1] = fixedPosition[1];\r\n }\r\n var _a = solveNextOffset(fixedPosition, nextOtherPos, (fixedPosition[1] < otherPos[1] ? bottom_1 : top_1) -\r\n otherPos[1], false, datas), _b = __read(_a.offset, 2), heightOffset = _b[1], isHeightOutside = _a.isOutside;\r\n if (!isNaN(heightOffset)) {\r\n maxHeight = height + (isHeightOutside ? 1 : -1) * abs(heightOffset);\r\n }\r\n }\r\n if (isCheckVertical) {\r\n var nextOtherPos = otherPos.slice();\r\n if (abs(deg - 90) < 2 || abs(deg - 270) < 2) {\r\n nextOtherPos[0] = fixedPosition[0];\r\n }\r\n var _c = solveNextOffset(fixedPosition, nextOtherPos, (fixedPosition[0] < otherPos[0] ? right_1 : left_1) - otherPos[0], true, datas), _d = __read(_c.offset, 1), widthOffset = _d[0], isWidthOutside = _c.isOutside;\r\n if (!isNaN(widthOffset)) {\r\n maxWidth = width + (isWidthOutside ? 1 : -1) * abs(widthOffset);\r\n }\r\n }\r\n });\r\n }\r\n return {\r\n maxWidth: maxWidth,\r\n maxHeight: maxHeight,\r\n };\r\n}\n\n/**\r\n * @namespace Draggable\r\n * @memberof Moveable\r\n * @description Draggable refers to the ability to drag and move targets.\r\n */\r\nvar Draggable = {\r\n name: \"draggable\",\r\n props: [\r\n \"draggable\",\r\n \"throttleDrag\",\r\n \"throttleDragRotate\",\r\n \"hideThrottleDragRotateLine\",\r\n \"startDragRotate\",\r\n \"edgeDraggable\",\r\n ],\r\n events: [\r\n \"dragStart\",\r\n \"drag\",\r\n \"dragEnd\",\r\n \"dragGroupStart\",\r\n \"dragGroup\",\r\n \"dragGroupEnd\",\r\n ],\r\n requestStyle: function () {\r\n return [\"left\", \"top\", \"right\", \"bottom\"];\r\n },\r\n requestChildStyle: function () {\r\n return [\"left\", \"top\", \"right\", \"bottom\"];\r\n },\r\n render: function (moveable, React) {\r\n var _a = moveable.props, hideThrottleDragRotateLine = _a.hideThrottleDragRotateLine, throttleDragRotate = _a.throttleDragRotate, zoom = _a.zoom;\r\n var _b = moveable.getState(), dragInfo = _b.dragInfo, beforeOrigin = _b.beforeOrigin;\r\n if (hideThrottleDragRotateLine || !throttleDragRotate || !dragInfo) {\r\n return [];\r\n }\r\n var dist = dragInfo.dist;\r\n if (!dist[0] && !dist[1]) {\r\n return [];\r\n }\r\n var width = getDistSize(dist);\r\n var rad = getRad(dist, [0, 0]);\r\n return [React.createElement(\"div\", { className: prefix(\"line\", \"horizontal\", \"dragline\", \"dashed\"), key: \"dragRotateGuideline\", style: {\r\n width: \"\".concat(width, \"px\"),\r\n transform: \"translate(\".concat(beforeOrigin[0], \"px, \").concat(beforeOrigin[1], \"px) rotate(\").concat(rad, \"rad) scaleY(\").concat(zoom, \")\"),\r\n } })];\r\n },\r\n dragStart: function (moveable, e) {\r\n var datas = e.datas, parentEvent = e.parentEvent, parentGesto = e.parentGesto;\r\n var state = moveable.state;\r\n var gestos = state.gestos, style = state.style;\r\n if (gestos.draggable) {\r\n return false;\r\n }\r\n gestos.draggable = parentGesto || moveable.targetGesto;\r\n datas.datas = {};\r\n datas.left = parseFloat(style.left || \"\") || 0;\r\n datas.top = parseFloat(style.top || \"\") || 0;\r\n datas.bottom = parseFloat(style.bottom || \"\") || 0;\r\n datas.right = parseFloat(style.right || \"\") || 0;\r\n datas.startValue = [0, 0];\r\n setDragStart(moveable, e);\r\n setDefaultTransformIndex(moveable, e, \"translate\");\r\n startCheckSnapDrag(moveable, datas);\r\n datas.prevDist = [0, 0];\r\n datas.prevBeforeDist = [0, 0];\r\n datas.isDrag = false;\r\n datas.deltaOffset = [0, 0];\r\n var params = fillParams(moveable, e, __assign({ set: function (translate) {\r\n datas.startValue = translate;\r\n } }, fillTransformStartEvent(moveable, e)));\r\n var result = parentEvent || triggerEvent(moveable, \"onDragStart\", params);\r\n if (result !== false) {\r\n datas.isDrag = true;\r\n moveable.state.dragInfo = {\r\n startRect: moveable.getRect(),\r\n dist: [0, 0],\r\n };\r\n }\r\n else {\r\n gestos.draggable = null;\r\n datas.isPinch = false;\r\n }\r\n return datas.isDrag ? params : false;\r\n },\r\n drag: function (moveable, e) {\r\n if (!e) {\r\n return;\r\n }\r\n resolveTransformEvent(moveable, e, \"translate\");\r\n var datas = e.datas, parentEvent = e.parentEvent, parentFlag = e.parentFlag, isPinch = e.isPinch, deltaOffset = e.deltaOffset, useSnap = e.useSnap, isRequest = e.isRequest, isGroup = e.isGroup, parentThrottleDrag = e.parentThrottleDrag;\r\n var distX = e.distX, distY = e.distY;\r\n var isDrag = datas.isDrag, prevDist = datas.prevDist, prevBeforeDist = datas.prevBeforeDist, startValue = datas.startValue;\r\n if (!isDrag) {\r\n return;\r\n }\r\n if (deltaOffset) {\r\n distX += deltaOffset[0];\r\n distY += deltaOffset[1];\r\n }\r\n var props = moveable.props;\r\n var parentMoveable = props.parentMoveable;\r\n var throttleDrag = isGroup ? 0 : (props.throttleDrag || parentThrottleDrag || 0);\r\n var throttleDragRotate = parentEvent ? 0 : (props.throttleDragRotate || 0);\r\n var dragRotateRad = 0;\r\n var isVerticalSnap = false;\r\n var isVerticalBound = false;\r\n var isHorizontalSnap = false;\r\n var isHorizontalBound = false;\r\n if (!parentEvent && throttleDragRotate > 0 && (distX || distY)) {\r\n var startDragRotate = props.startDragRotate || 0;\r\n var deg = throttle(startDragRotate + getRad([0, 0], [distX, distY]) * 180 / Math.PI, throttleDragRotate)\r\n - startDragRotate;\r\n var ry = distY * Math.abs(Math.cos((deg - 90) / 180 * Math.PI));\r\n var rx = distX * Math.abs(Math.cos(deg / 180 * Math.PI));\r\n var r = getDistSize([rx, ry]);\r\n dragRotateRad = deg * Math.PI / 180;\r\n distX = r * Math.cos(dragRotateRad);\r\n distY = r * Math.sin(dragRotateRad);\r\n }\r\n if (!isPinch && !parentEvent && !parentFlag) {\r\n var _a = __read(checkSnapBoundsDrag(moveable, distX, distY, throttleDragRotate, (!useSnap && isRequest) || deltaOffset, datas), 2), verticalInfo = _a[0], horizontalInfo = _a[1];\r\n isVerticalSnap = verticalInfo.isSnap;\r\n isVerticalBound = verticalInfo.isBound;\r\n isHorizontalSnap = horizontalInfo.isSnap;\r\n isHorizontalBound = horizontalInfo.isBound;\r\n var verticalOffset = verticalInfo.offset;\r\n var horizontalOffset = horizontalInfo.offset;\r\n distX += verticalOffset;\r\n distY += horizontalOffset;\r\n }\r\n var beforeTranslate = plus(getBeforeDragDist({ datas: datas, distX: distX, distY: distY }), startValue);\r\n var translate = plus(getTransformDist({ datas: datas, distX: distX, distY: distY }), startValue);\r\n throttleArray(translate, TINY_NUM);\r\n throttleArray(beforeTranslate, TINY_NUM);\r\n if (!throttleDragRotate) {\r\n if (!isVerticalSnap && !isVerticalBound) {\r\n translate[0] = throttle(translate[0], throttleDrag);\r\n beforeTranslate[0] = throttle(beforeTranslate[0], throttleDrag);\r\n }\r\n if (!isHorizontalSnap && !isHorizontalBound) {\r\n translate[1] = throttle(translate[1], throttleDrag);\r\n beforeTranslate[1] = throttle(beforeTranslate[1], throttleDrag);\r\n }\r\n }\r\n var beforeDist = minus(beforeTranslate, startValue);\r\n var dist = minus(translate, startValue);\r\n var delta = minus(dist, prevDist);\r\n var beforeDelta = minus(beforeDist, prevBeforeDist);\r\n datas.prevDist = dist;\r\n datas.prevBeforeDist = beforeDist;\r\n datas.passDelta = delta; //distX - (datas.passDistX || 0);\r\n // datas.passDeltaY = distY - (datas.passDistY || 0);\r\n datas.passDist = dist; //distX;\r\n // datas.passDistY = distY;\r\n var left = datas.left + beforeDist[0];\r\n var top = datas.top + beforeDist[1];\r\n var right = datas.right - beforeDist[0];\r\n var bottom = datas.bottom - beforeDist[1];\r\n var nextTransform = convertTransformFormat(datas, \"translate(\".concat(translate[0], \"px, \").concat(translate[1], \"px)\"), \"translate(\".concat(dist[0], \"px, \").concat(dist[1], \"px)\"));\r\n fillOriginalTransform(e, nextTransform);\r\n moveable.state.dragInfo.dist = parentEvent ? [0, 0] : dist;\r\n if (!parentEvent && !parentMoveable && delta.every(function (num) { return !num; }) && beforeDelta.some(function (num) { return !num; })) {\r\n return;\r\n }\r\n var _b = moveable.state, width = _b.width, height = _b.height;\r\n var params = fillParams(moveable, e, __assign({ transform: nextTransform, dist: dist, delta: delta, translate: translate, beforeDist: beforeDist, beforeDelta: beforeDelta, beforeTranslate: beforeTranslate, left: left, top: top, right: right, bottom: bottom, width: width, height: height, isPinch: isPinch }, fillCSSObject({\r\n transform: nextTransform,\r\n }, e)));\r\n !parentEvent && triggerEvent(moveable, \"onDrag\", params);\r\n return params;\r\n },\r\n dragAfter: function (moveable, e) {\r\n var datas = e.datas;\r\n var deltaOffset = datas.deltaOffset;\r\n if (deltaOffset[0] || deltaOffset[1]) {\r\n datas.deltaOffset = [0, 0];\r\n return this.drag(moveable, __assign(__assign({}, e), { deltaOffset: deltaOffset }));\r\n }\r\n return false;\r\n },\r\n dragEnd: function (moveable, e) {\r\n var parentEvent = e.parentEvent, datas = e.datas;\r\n moveable.state.dragInfo = null;\r\n if (!datas.isDrag) {\r\n return;\r\n }\r\n datas.isDrag = false;\r\n var param = fillEndParams(moveable, e, {});\r\n !parentEvent && triggerEvent(moveable, \"onDragEnd\", param);\r\n return param;\r\n },\r\n dragGroupStart: function (moveable, e) {\r\n var _a, _b;\r\n var datas = e.datas, clientX = e.clientX, clientY = e.clientY;\r\n var params = this.dragStart(moveable, e);\r\n if (!params) {\r\n return false;\r\n }\r\n var _c = triggerChildGesto(moveable, this, \"dragStart\", [\r\n clientX || 0,\r\n clientY || 0,\r\n ], e, false, \"draggable\"), childEvents = _c.childEvents, eventParams = _c.eventParams;\r\n var nextParams = __assign(__assign({}, params), { targets: moveable.props.targets, events: eventParams });\r\n var result = triggerEvent(moveable, \"onDragGroupStart\", nextParams);\r\n datas.isDrag = result !== false;\r\n // find data.startValue and based on first child moveable\r\n var startValue = (_b = (_a = childEvents[0]) === null || _a === void 0 ? void 0 : _a.datas.startValue) !== null && _b !== void 0 ? _b : [0, 0];\r\n datas.throttleOffset = [startValue[0] % 1, startValue[1] % 1];\r\n return datas.isDrag ? params : false;\r\n },\r\n dragGroup: function (moveable, e) {\r\n var datas = e.datas;\r\n if (!datas.isDrag) {\r\n return;\r\n }\r\n var params = this.drag(moveable, __assign(__assign({}, e), { parentThrottleDrag: moveable.props.throttleDrag }));\r\n var passDelta = e.datas.passDelta;\r\n var eventParams = triggerChildGesto(moveable, this, \"drag\", passDelta, e, false, \"draggable\").eventParams;\r\n if (!params) {\r\n return;\r\n }\r\n var nextParams = __assign({ targets: moveable.props.targets, events: eventParams }, params);\r\n triggerEvent(moveable, \"onDragGroup\", nextParams);\r\n return nextParams;\r\n },\r\n dragGroupEnd: function (moveable, e) {\r\n var isDrag = e.isDrag, datas = e.datas;\r\n if (!datas.isDrag) {\r\n return;\r\n }\r\n this.dragEnd(moveable, e);\r\n var eventParams = triggerChildGesto(moveable, this, \"dragEnd\", [0, 0], e, false, \"draggable\").eventParams;\r\n triggerEvent(moveable, \"onDragGroupEnd\", fillEndParams(moveable, e, {\r\n targets: moveable.props.targets,\r\n events: eventParams,\r\n }));\r\n return isDrag;\r\n },\r\n /**\r\n * @method Moveable.Draggable#request\r\n * @param {object} [e] - the draggable's request parameter\r\n * @param {number} [e.x] - x position\r\n * @param {number} [e.y] - y position\r\n * @param {number} [e.deltaX] - X number to move\r\n * @param {number} [e.deltaY] - Y number to move\r\n * @return {Moveable.Requester} Moveable Requester\r\n * @example\r\n\n * // Instantly Request (requestStart - request - requestEnd)\r\n * // Use Relative Value\r\n * moveable.request(\"draggable\", { deltaX: 10, deltaY: 10 }, true);\r\n * // Use Absolute Value\r\n * moveable.request(\"draggable\", { x: 200, y: 100 }, true);\r\n *\r\n * // requestStart\r\n * const requester = moveable.request(\"draggable\");\r\n *\r\n * // request\r\n * // Use Relative Value\r\n * requester.request({ deltaX: 10, deltaY: 10 });\r\n * requester.request({ deltaX: 10, deltaY: 10 });\r\n * requester.request({ deltaX: 10, deltaY: 10 });\r\n * // Use Absolute Value\r\n * moveable.request(\"draggable\", { x: 200, y: 100 });\r\n * moveable.request(\"draggable\", { x: 220, y: 100 });\r\n * moveable.request(\"draggable\", { x: 240, y: 100 });\r\n *\r\n * // requestEnd\r\n * requester.requestEnd();\r\n */\r\n request: function (moveable) {\r\n var datas = {};\r\n var rect = moveable.getRect();\r\n var distX = 0;\r\n var distY = 0;\r\n var useSnap = false;\r\n return {\r\n isControl: false,\r\n requestStart: function (e) {\r\n useSnap = e.useSnap;\r\n return { datas: datas, useSnap: useSnap };\r\n },\r\n request: function (e) {\r\n if (\"x\" in e) {\r\n distX = e.x - rect.left;\r\n }\r\n else if (\"deltaX\" in e) {\r\n distX += e.deltaX;\r\n }\r\n if (\"y\" in e) {\r\n distY = e.y - rect.top;\r\n }\r\n else if (\"deltaY\" in e) {\r\n distY += e.deltaY;\r\n }\r\n return { datas: datas, distX: distX, distY: distY, useSnap: useSnap };\r\n },\r\n requestEnd: function () {\r\n return { datas: datas, isDrag: true, useSnap: useSnap };\r\n },\r\n };\r\n },\r\n unset: function (moveable) {\r\n moveable.state.gestos.draggable = null;\r\n moveable.state.dragInfo = null;\r\n },\r\n};\r\n/**\r\n * Whether or not target can be dragged. (default: false)\r\n * @name Moveable.Draggable#draggable\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.draggable = true;\r\n */\r\n/**\r\n * throttle of x, y when drag.\r\n * @name Moveable.Draggable#throttleDrag\r\n * @default 0\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.throttleDrag = 1;\r\n */\r\n/**\r\n* throttle of angle of x, y when drag.\r\n* @name Moveable.Draggable#throttleDragRotate\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body);\r\n*\r\n* moveable.throttleDragRotate = 45;\r\n*/\r\n/**\r\n* start angle of throttleDragRotate of x, y when drag.\r\n* @name Moveable.Draggable#startDragRotate\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body);\r\n*\r\n* // 45, 135, 225, 315\r\n* moveable.throttleDragRotate = 90;\r\n* moveable.startDragRotate = 45;\r\n*/\r\n/**\r\n * When the drag starts, the dragStart event is called.\r\n * @memberof Moveable.Draggable\r\n * @event dragStart\r\n * @param {Moveable.Draggable.OnDragStart} - Parameters for the dragStart event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { draggable: true });\r\n * moveable.on(\"dragStart\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n */\r\n/**\r\n * When dragging, the drag event is called.\r\n * @memberof Moveable.Draggable\r\n * @event drag\r\n * @param {Moveable.Draggable.OnDrag} - Parameters for the drag event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { draggable: true });\r\n * moveable.on(\"drag\", ({ target, transform }) => {\r\n * target.style.transform = transform;\r\n * });\r\n */\r\n/**\r\n * When the drag finishes, the dragEnd event is called.\r\n * @memberof Moveable.Draggable\r\n * @event dragEnd\r\n * @param {Moveable.Draggable.OnDragEnd} - Parameters for the dragEnd event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { draggable: true });\r\n * moveable.on(\"dragEnd\", ({ target, isDrag }) => {\r\n * console.log(target, isDrag);\r\n * });\r\n */\r\n/**\r\n* When the group drag starts, the `dragGroupStart` event is called.\r\n* @memberof Moveable.Draggable\r\n* @event dragGroupStart\r\n* @param {Moveable.Draggable.OnDragGroupStart} - Parameters for the `dragGroupStart` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* target: [].slice.call(document.querySelectorAll(\".target\")),\r\n* draggable: true\r\n* });\r\n* moveable.on(\"dragGroupStart\", ({ targets }) => {\r\n* console.log(\"onDragGroupStart\", targets);\r\n* });\r\n*/\r\n/**\r\n* When the group drag, the `dragGroup` event is called.\r\n* @memberof Moveable.Draggable\r\n* @event dragGroup\r\n* @param {Moveable.Draggable.OnDragGroup} - Parameters for the `dragGroup` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* target: [].slice.call(document.querySelectorAll(\".target\")),\r\n* draggable: true\r\n* });\r\n* moveable.on(\"dragGroup\", ({ targets, events }) => {\r\n* console.log(\"onDragGroup\", targets);\r\n* events.forEach(ev => {\r\n* // drag event\r\n* console.log(\"onDrag left, top\", ev.left, ev.top);\r\n* // ev.target!.style.left = `${ev.left}px`;\r\n* // ev.target!.style.top = `${ev.top}px`;\r\n* console.log(\"onDrag translate\", ev.dist);\r\n* ev.target!.style.transform = ev.transform;)\r\n* });\r\n* });\r\n*/\r\n/**\r\n * When the group drag finishes, the `dragGroupEnd` event is called.\r\n * @memberof Moveable.Draggable\r\n * @event dragGroupEnd\r\n * @param {Moveable.Draggable.OnDragGroupEnd} - Parameters for the `dragGroupEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * draggable: true\r\n * });\r\n * moveable.on(\"dragGroupEnd\", ({ targets, isDrag }) => {\r\n * console.log(\"onDragGroupEnd\", targets, isDrag);\r\n * });\r\n */\n\nfunction getFixedDirectionInfo(startPositions, fixedDirection) {\r\n var fixedPosition = getPosByDirection(startPositions, fixedDirection);\r\n var fixedOffset = [0, 0];\r\n return {\r\n fixedPosition: fixedPosition,\r\n fixedDirection: fixedDirection,\r\n fixedOffset: fixedOffset,\r\n };\r\n}\r\nfunction getOffsetFixedDirectionInfo(state, fixedDirection) {\r\n // for start\r\n var allMatrix = state.allMatrix, is3d = state.is3d, width = state.width, height = state.height;\r\n var n = is3d ? 4 : 3;\r\n var nextFixedOffset = [\r\n width / 2 * (1 + fixedDirection[0]),\r\n height / 2 * (1 + fixedDirection[1]),\r\n ];\r\n var fixedPosition = calculatePosition(allMatrix, nextFixedOffset, n);\r\n var fixedOffset = [0, 0];\r\n return {\r\n fixedPosition: fixedPosition,\r\n fixedDirection: fixedDirection,\r\n fixedOffset: fixedOffset,\r\n };\r\n}\r\nfunction getOffsetFixedPositionInfo(state, offsetFixedPosition) {\r\n // for start\r\n var allMatrix = state.allMatrix, is3d = state.is3d, width = state.width, height = state.height;\r\n var n = is3d ? 4 : 3;\r\n var fixedDirection = getDirectionByPos(offsetFixedPosition, width, height);\r\n var nextFixedPosition = calculatePosition(allMatrix, offsetFixedPosition, n);\r\n var fixedOffset = [\r\n width ? 0 : offsetFixedPosition[0],\r\n height ? 0 : offsetFixedPosition[1],\r\n ];\r\n return {\r\n fixedPosition: nextFixedPosition,\r\n fixedDirection: fixedDirection,\r\n fixedOffset: fixedOffset,\r\n };\r\n}\n\n/**\r\n * @namespace Resizable\r\n * @memberof Moveable\r\n * @description Resizable indicates whether the target's width and height can be increased or decreased.\r\n */\r\nvar directionCondition$2 = getDirectionCondition(\"resizable\");\r\nvar Resizable = {\r\n name: \"resizable\",\r\n ableGroup: \"size\",\r\n canPinch: true,\r\n props: [\r\n \"resizable\",\r\n \"throttleResize\",\r\n \"renderDirections\",\r\n \"displayAroundControls\",\r\n \"keepRatio\",\r\n \"resizeFormat\",\r\n \"keepRatioFinally\",\r\n \"edge\",\r\n \"checkResizableError\",\r\n ],\r\n events: [\r\n \"resizeStart\",\r\n \"beforeResize\",\r\n \"resize\",\r\n \"resizeEnd\",\r\n \"resizeGroupStart\",\r\n \"beforeResizeGroup\",\r\n \"resizeGroup\",\r\n \"resizeGroupEnd\",\r\n ],\r\n render: getRenderDirections(\"resizable\"),\r\n dragControlCondition: directionCondition$2,\r\n viewClassName: getDirectionViewClassName(\"resizable\"),\r\n dragControlStart: function (moveable, e) {\r\n var _a;\r\n var inputEvent = e.inputEvent, isPinch = e.isPinch, isGroup = e.isGroup, parentDirection = e.parentDirection, parentGesto = e.parentGesto, datas = e.datas, parentFixedDirection = e.parentFixedDirection, parentEvent = e.parentEvent;\r\n var direction = getTotalDirection(parentDirection, isPinch, inputEvent, datas);\r\n var state = moveable.state;\r\n var target = state.target, width = state.width, height = state.height, gestos = state.gestos;\r\n if (!direction || !target) {\r\n return false;\r\n }\r\n if (gestos.resizable) {\r\n return false;\r\n }\r\n gestos.resizable = parentGesto || moveable.controlGesto;\r\n !isPinch && setDragStart(moveable, e);\r\n datas.datas = {};\r\n datas.direction = direction;\r\n datas.startOffsetWidth = width;\r\n datas.startOffsetHeight = height;\r\n datas.prevWidth = 0;\r\n datas.prevHeight = 0;\r\n datas.minSize = [0, 0];\r\n datas.startWidth = state.inlineCSSWidth || state.cssWidth;\r\n datas.startHeight = state.inlineCSSHeight || state.cssHeight;\r\n datas.maxSize = [Infinity, Infinity];\r\n if (!isGroup) {\r\n datas.minSize = [\r\n state.minOffsetWidth,\r\n state.minOffsetHeight,\r\n ];\r\n datas.maxSize = [\r\n state.maxOffsetWidth,\r\n state.maxOffsetHeight,\r\n ];\r\n }\r\n var transformOrigin = moveable.props.transformOrigin || \"% %\";\r\n datas.transformOrigin = transformOrigin && isString(transformOrigin)\r\n ? transformOrigin.split(\" \")\r\n : transformOrigin;\r\n datas.startOffsetMatrix = state.offsetMatrix;\r\n datas.startTransformOrigin = state.transformOrigin;\r\n datas.isWidth = (_a = e === null || e === void 0 ? void 0 : e.parentIsWidth) !== null && _a !== void 0 ? _a : ((!direction[0] && !direction[1]) || direction[0] || !direction[1]);\r\n function setRatio(ratio) {\r\n datas.ratio = ratio && isFinite(ratio) ? ratio : 0;\r\n }\r\n datas.startPositions = getAbsolutePosesByState(moveable.state);\r\n function setFixedDirection(fixedDirection) {\r\n var result = getFixedDirectionInfo(datas.startPositions, fixedDirection);\r\n datas.fixedDirection = result.fixedDirection;\r\n datas.fixedPosition = result.fixedPosition;\r\n datas.fixedOffset = result.fixedOffset;\r\n }\r\n function setFixedPosition(fixedPosition) {\r\n var result = getOffsetFixedPositionInfo(moveable.state, fixedPosition);\r\n datas.fixedDirection = result.fixedDirection;\r\n datas.fixedPosition = result.fixedPosition;\r\n datas.fixedOffset = result.fixedOffset;\r\n }\r\n function setMin(minSize) {\r\n datas.minSize = [\r\n convertUnitSize(\"\".concat(minSize[0]), 0) || 0,\r\n convertUnitSize(\"\".concat(minSize[1]), 0) || 0,\r\n ];\r\n }\r\n function setMax(maxSize) {\r\n var nextMaxSize = [\r\n maxSize[0] || Infinity,\r\n maxSize[1] || Infinity,\r\n ];\r\n if (!isNumber(nextMaxSize[0]) || isFinite(nextMaxSize[0])) {\r\n nextMaxSize[0] = convertUnitSize(\"\".concat(nextMaxSize[0]), 0) || Infinity;\r\n }\r\n if (!isNumber(nextMaxSize[1]) || isFinite(nextMaxSize[1])) {\r\n nextMaxSize[1] = convertUnitSize(\"\".concat(nextMaxSize[1]), 0) || Infinity;\r\n }\r\n datas.maxSize = nextMaxSize;\r\n }\r\n setRatio(width / height);\r\n setFixedDirection(parentFixedDirection || [-direction[0], -direction[1]]);\r\n datas.setFixedDirection = setFixedDirection;\r\n datas.setFixedPosition = setFixedPosition;\r\n datas.setMin = setMin;\r\n datas.setMax = setMax;\r\n var params = fillParams(moveable, e, {\r\n direction: direction,\r\n startRatio: datas.ratio,\r\n set: function (_a) {\r\n var _b = __read(_a, 2), startWidth = _b[0], startHeight = _b[1];\r\n datas.startWidth = startWidth;\r\n datas.startHeight = startHeight;\r\n },\r\n setMin: setMin,\r\n setMax: setMax,\r\n setRatio: setRatio,\r\n setFixedDirection: setFixedDirection,\r\n setFixedPosition: setFixedPosition,\r\n setOrigin: function (origin) {\r\n datas.transformOrigin = origin;\r\n },\r\n dragStart: Draggable.dragStart(moveable, new CustomGesto().dragStart([0, 0], e)),\r\n });\r\n var result = parentEvent || triggerEvent(moveable, \"onResizeStart\", params);\r\n datas.startFixedDirection = datas.fixedDirection;\r\n datas.startFixedPosition = datas.fixedPosition;\r\n if (result !== false) {\r\n datas.isResize = true;\r\n moveable.state.snapRenderInfo = {\r\n request: e.isRequest,\r\n direction: direction,\r\n };\r\n }\r\n return datas.isResize ? params : false;\r\n },\r\n dragControl: function (moveable, e) {\r\n var _a;\r\n var datas = e.datas, parentFlag = e.parentFlag, isPinch = e.isPinch, parentKeepRatio = e.parentKeepRatio, dragClient = e.dragClient, parentDist = e.parentDist, useSnap = e.useSnap, isRequest = e.isRequest, isGroup = e.isGroup, parentEvent = e.parentEvent, resolveMatrix = e.resolveMatrix;\r\n var isResize = datas.isResize, transformOrigin = datas.transformOrigin, startWidth = datas.startWidth, startHeight = datas.startHeight, prevWidth = datas.prevWidth, prevHeight = datas.prevHeight, minSize = datas.minSize, maxSize = datas.maxSize, ratio = datas.ratio, startOffsetWidth = datas.startOffsetWidth, startOffsetHeight = datas.startOffsetHeight, isWidth = datas.isWidth;\r\n if (!isResize) {\r\n return;\r\n }\r\n if (resolveMatrix) {\r\n var is3d = moveable.state.is3d;\r\n var startOffsetMatrix = datas.startOffsetMatrix, startTransformOrigin = datas.startTransformOrigin;\r\n var n = is3d ? 4 : 3;\r\n var targetMatrix = parseMat(getNextTransforms(e));\r\n var targetN = Math.sqrt(targetMatrix.length);\r\n if (n !== targetN) {\r\n targetMatrix = convertDimension(targetMatrix, targetN, n);\r\n }\r\n var nextAllMatrix = getNextMatrix(startOffsetMatrix, targetMatrix, startTransformOrigin, n);\r\n var poses = calculatePoses(nextAllMatrix, startOffsetWidth, startOffsetHeight, n);\r\n datas.startPositions = poses;\r\n datas.nextTargetMatrix = targetMatrix;\r\n datas.nextAllMatrix = nextAllMatrix;\r\n }\r\n var props = getProps(moveable.props, \"resizable\");\r\n var resizeFormat = props.resizeFormat, _b = props.throttleResize, throttleResize = _b === void 0 ? parentFlag ? 0 : 1 : _b, parentMoveable = props.parentMoveable, keepRatioFinally = props.keepRatioFinally;\r\n var direction = datas.direction;\r\n var sizeDirection = direction;\r\n var distWidth = 0;\r\n var distHeight = 0;\r\n if (!direction[0] && !direction[1]) {\r\n sizeDirection = [1, 1];\r\n }\r\n var keepRatio = (ratio && (parentKeepRatio != null ? parentKeepRatio : props.keepRatio)) || false;\r\n function getNextBoundingSize() {\r\n var fixedDirection = datas.fixedDirection;\r\n var nextSize = getOffsetSizeDist(sizeDirection, keepRatio, datas, e);\r\n distWidth = nextSize.distWidth;\r\n distHeight = nextSize.distHeight;\r\n var nextWidth = (sizeDirection[0] - fixedDirection[0]) || keepRatio\r\n ? Math.max(startOffsetWidth + distWidth, TINY_NUM) : startOffsetWidth;\r\n var nextHeight = (sizeDirection[1] - fixedDirection[1]) || keepRatio\r\n ? Math.max(startOffsetHeight + distHeight, TINY_NUM) : startOffsetHeight;\r\n if (keepRatio && startOffsetWidth && startOffsetHeight) {\r\n // startOffsetWidth : startOffsetHeight = nextWidth : nextHeight\r\n if (isWidth) {\r\n nextHeight = nextWidth / ratio;\r\n }\r\n else {\r\n nextWidth = nextHeight * ratio;\r\n }\r\n }\r\n return [nextWidth, nextHeight];\r\n }\r\n var _c = __read(getNextBoundingSize(), 2), boundingWidth = _c[0], boundingHeight = _c[1];\r\n if (!parentEvent) {\r\n datas.setFixedDirection(datas.fixedDirection);\r\n triggerEvent(moveable, \"onBeforeResize\", fillParams(moveable, e, {\r\n startFixedDirection: datas.startFixedDirection,\r\n startFixedPosition: datas.startFixedPosition,\r\n setFixedDirection: function (nextFixedDirection) {\r\n var _a;\r\n datas.setFixedDirection(nextFixedDirection);\r\n _a = __read(getNextBoundingSize(), 2), boundingWidth = _a[0], boundingHeight = _a[1];\r\n return [boundingWidth, boundingHeight];\r\n },\r\n setFixedPosition: function (nextFixedPosition) {\r\n var _a;\r\n datas.setFixedPosition(nextFixedPosition);\r\n _a = __read(getNextBoundingSize(), 2), boundingWidth = _a[0], boundingHeight = _a[1];\r\n return [boundingWidth, boundingHeight];\r\n },\r\n boundingWidth: boundingWidth,\r\n boundingHeight: boundingHeight,\r\n setSize: function (size) {\r\n var _a;\r\n _a = __read(size, 2), boundingWidth = _a[0], boundingHeight = _a[1];\r\n },\r\n }, true));\r\n }\r\n var fixedPosition = dragClient;\r\n if (!dragClient) {\r\n if (!parentFlag && isPinch) {\r\n fixedPosition = getAbsolutePosition(moveable, [0, 0]);\r\n }\r\n else {\r\n fixedPosition = datas.fixedPosition;\r\n }\r\n }\r\n var snapDist = [0, 0];\r\n if (!isPinch) {\r\n snapDist = checkSnapResize(moveable, boundingWidth, boundingHeight, direction, fixedPosition, !useSnap && isRequest, datas);\r\n }\r\n if (parentDist) {\r\n !parentDist[0] && (snapDist[0] = 0);\r\n !parentDist[1] && (snapDist[1] = 0);\r\n }\r\n function computeSize() {\r\n var _a;\r\n if (resizeFormat) {\r\n _a = __read(resizeFormat([boundingWidth, boundingHeight]), 2), boundingWidth = _a[0], boundingHeight = _a[1];\r\n }\r\n boundingWidth = throttle(boundingWidth, throttleResize);\r\n boundingHeight = throttle(boundingHeight, throttleResize);\r\n }\r\n if (keepRatio) {\r\n if (sizeDirection[0] && sizeDirection[1] && snapDist[0] && snapDist[1]) {\r\n if (abs(snapDist[0]) > abs(snapDist[1])) {\r\n snapDist[1] = 0;\r\n }\r\n else {\r\n snapDist[0] = 0;\r\n }\r\n }\r\n var isNoSnap = !snapDist[0] && !snapDist[1];\r\n if (isNoSnap) {\r\n // pre-compute before maintaining the ratio\r\n computeSize();\r\n }\r\n if ((sizeDirection[0] && !sizeDirection[1])\r\n || (snapDist[0] && !snapDist[1])\r\n || (isNoSnap && isWidth)) {\r\n boundingWidth += snapDist[0];\r\n boundingHeight = boundingWidth / ratio;\r\n }\r\n else if ((!sizeDirection[0] && sizeDirection[1])\r\n || (!snapDist[0] && snapDist[1])\r\n || (isNoSnap && !isWidth)) {\r\n boundingHeight += snapDist[1];\r\n boundingWidth = boundingHeight * ratio;\r\n }\r\n }\r\n else {\r\n boundingWidth += snapDist[0];\r\n boundingHeight += snapDist[1];\r\n boundingWidth = Math.max(0, boundingWidth);\r\n boundingHeight = Math.max(0, boundingHeight);\r\n }\r\n _a = __read(calculateBoundSize([boundingWidth, boundingHeight], minSize, maxSize, keepRatio ? ratio : false), 2), boundingWidth = _a[0], boundingHeight = _a[1];\r\n computeSize();\r\n if (keepRatio && (isGroup || keepRatioFinally)) {\r\n if (isWidth) {\r\n boundingHeight = boundingWidth / ratio;\r\n }\r\n else {\r\n boundingWidth = boundingHeight * ratio;\r\n }\r\n }\r\n distWidth = boundingWidth - startOffsetWidth;\r\n distHeight = boundingHeight - startOffsetHeight;\r\n var delta = [distWidth - prevWidth, distHeight - prevHeight];\r\n datas.prevWidth = distWidth;\r\n datas.prevHeight = distHeight;\r\n var inverseDelta = getResizeDist(moveable, boundingWidth, boundingHeight, fixedPosition, transformOrigin, datas);\r\n if (!parentMoveable && delta.every(function (num) { return !num; }) && inverseDelta.every(function (num) { return !num; })) {\r\n return;\r\n }\r\n var drag = Draggable.drag(moveable, setCustomDrag(e, moveable.state, inverseDelta, !!isPinch, false, \"draggable\"));\r\n var transform = drag.transform;\r\n var nextWidth = startWidth + distWidth;\r\n var nextHeight = startHeight + distHeight;\r\n var params = fillParams(moveable, e, __assign({ width: nextWidth, height: nextHeight, offsetWidth: Math.round(boundingWidth), offsetHeight: Math.round(boundingHeight), startRatio: ratio, boundingWidth: boundingWidth, boundingHeight: boundingHeight, direction: direction, dist: [distWidth, distHeight], delta: delta, isPinch: !!isPinch, drag: drag }, fillAfterTransform({\r\n style: {\r\n width: \"\".concat(nextWidth, \"px\"),\r\n height: \"\".concat(nextHeight, \"px\"),\r\n },\r\n transform: transform,\r\n }, drag, e)));\r\n !parentEvent && triggerEvent(moveable, \"onResize\", params);\r\n return params;\r\n },\r\n dragControlAfter: function (moveable, e) {\r\n var datas = e.datas;\r\n var isResize = datas.isResize, startOffsetWidth = datas.startOffsetWidth, startOffsetHeight = datas.startOffsetHeight, prevWidth = datas.prevWidth, prevHeight = datas.prevHeight;\r\n if (!isResize || moveable.props.checkResizableError === false) {\r\n return;\r\n }\r\n var _a = moveable.state, width = _a.width, height = _a.height;\r\n var errorWidth = width - (startOffsetWidth + prevWidth);\r\n var errorHeight = height - (startOffsetHeight + prevHeight);\r\n var isErrorWidth = abs(errorWidth) > 3;\r\n var isErrorHeight = abs(errorHeight) > 3;\r\n if (isErrorWidth) {\r\n datas.startWidth += errorWidth;\r\n datas.startOffsetWidth += errorWidth;\r\n datas.prevWidth += errorWidth;\r\n }\r\n if (isErrorHeight) {\r\n datas.startHeight += errorHeight;\r\n datas.startOffsetHeight += errorHeight;\r\n datas.prevHeight += errorHeight;\r\n }\r\n if (isErrorWidth || isErrorHeight) {\r\n return this.dragControl(moveable, e);\r\n }\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n var datas = e.datas, parentEvent = e.parentEvent;\r\n if (!datas.isResize) {\r\n return;\r\n }\r\n datas.isResize = false;\r\n var params = fillEndParams(moveable, e, {});\r\n !parentEvent && triggerEvent(moveable, \"onResizeEnd\", params);\r\n return params;\r\n },\r\n dragGroupControlCondition: directionCondition$2,\r\n dragGroupControlStart: function (moveable, e) {\r\n var datas = e.datas;\r\n var params = this.dragControlStart(moveable, __assign(__assign({}, e), { isGroup: true }));\r\n if (!params) {\r\n return false;\r\n }\r\n var originalEvents = fillChildEvents(moveable, \"resizable\", e);\r\n var parentStartOffsetWidth = datas.startOffsetWidth, parentStartOffsetHeight = datas.startOffsetHeight;\r\n function updateGroupMin() {\r\n var originalMinSize = datas.minSize;\r\n originalEvents.forEach(function (ev) {\r\n var _a = ev.datas, childMinSize = _a.minSize, childStartOffsetWidth = _a.startOffsetWidth, childStartOffsetHeight = _a.startOffsetHeight;\r\n var parentMinWidth = parentStartOffsetWidth\r\n * (childStartOffsetWidth ? childMinSize[0] / childStartOffsetWidth : 0);\r\n var parentMinHeight = parentStartOffsetHeight\r\n * (childStartOffsetHeight ? childMinSize[1] / childStartOffsetHeight : 0);\r\n originalMinSize[0] = Math.max(originalMinSize[0], parentMinWidth);\r\n originalMinSize[1] = Math.max(originalMinSize[1], parentMinHeight);\r\n });\r\n }\r\n function updateGroupMax() {\r\n var originalMaxSize = datas.maxSize;\r\n originalEvents.forEach(function (ev) {\r\n var _a = ev.datas, childMaxSize = _a.maxSize, childStartOffsetWidth = _a.startOffsetWidth, childStartOffsetHeight = _a.startOffsetHeight;\r\n var parentMaxWidth = parentStartOffsetWidth\r\n * (childStartOffsetWidth ? childMaxSize[0] / childStartOffsetWidth : 0);\r\n var parentMaxHeight = parentStartOffsetHeight\r\n * (childStartOffsetHeight ? childMaxSize[1] / childStartOffsetHeight : 0);\r\n originalMaxSize[0] = Math.min(originalMaxSize[0], parentMaxWidth);\r\n originalMaxSize[1] = Math.min(originalMaxSize[1], parentMaxHeight);\r\n });\r\n }\r\n var events = triggerChildAbles(moveable, this, \"dragControlStart\", e, function (child, ev) {\r\n return startChildDist(moveable, child, datas, ev);\r\n });\r\n updateGroupMin();\r\n updateGroupMax();\r\n var setFixedDirection = function (fixedDirection) {\r\n params.setFixedDirection(fixedDirection);\r\n events.forEach(function (ev, i) {\r\n ev.setFixedDirection(fixedDirection);\r\n startChildDist(moveable, ev.moveable, datas, originalEvents[i]);\r\n });\r\n };\r\n datas.setFixedDirection = setFixedDirection;\r\n var nextParams = __assign(__assign({}, params), { targets: moveable.props.targets, events: events.map(function (ev) {\r\n return __assign(__assign({}, ev), { setMin: function (minSize) {\r\n ev.setMin(minSize);\r\n updateGroupMin();\r\n }, setMax: function (maxSize) {\r\n ev.setMax(maxSize);\r\n updateGroupMax();\r\n } });\r\n }), setFixedDirection: setFixedDirection, setMin: function (minSize) {\r\n params.setMin(minSize);\r\n updateGroupMin();\r\n }, setMax: function (maxSize) {\r\n params.setMax(maxSize);\r\n updateGroupMax();\r\n } });\r\n var result = triggerEvent(moveable, \"onResizeGroupStart\", nextParams);\r\n datas.isResize = result !== false;\r\n return datas.isResize ? params : false;\r\n },\r\n dragGroupControl: function (moveable, e) {\r\n var datas = e.datas;\r\n if (!datas.isResize) {\r\n return;\r\n }\r\n var props = getProps(moveable.props, \"resizable\");\r\n catchEvent(moveable, \"onBeforeResize\", function (parentEvent) {\r\n triggerEvent(moveable, \"onBeforeResizeGroup\", fillParams(moveable, e, __assign(__assign({}, parentEvent), { targets: props.targets }), true));\r\n });\r\n var params = this.dragControl(moveable, __assign(__assign({}, e), { isGroup: true }));\r\n if (!params) {\r\n return;\r\n }\r\n var boundingWidth = params.boundingWidth, boundingHeight = params.boundingHeight, dist = params.dist;\r\n var keepRatio = props.keepRatio;\r\n var parentScale = [\r\n boundingWidth / (boundingWidth - dist[0]),\r\n boundingHeight / (boundingHeight - dist[1]),\r\n ];\r\n var fixedPosition = datas.fixedPosition;\r\n var events = triggerChildAbles(moveable, this, \"dragControl\", e, function (_, ev) {\r\n var _a = __read(calculate(createRotateMatrix(moveable.rotation / 180 * Math.PI, 3), [\r\n ev.datas.originalX * parentScale[0],\r\n ev.datas.originalY * parentScale[1],\r\n 1,\r\n ], 3), 2), clientX = _a[0], clientY = _a[1];\r\n return __assign(__assign({}, ev), { parentDist: null, parentScale: parentScale, dragClient: plus(fixedPosition, [clientX, clientY]), parentKeepRatio: keepRatio });\r\n });\r\n var nextParams = __assign({ targets: props.targets, events: events }, params);\r\n triggerEvent(moveable, \"onResizeGroup\", nextParams);\r\n return nextParams;\r\n },\r\n dragGroupControlEnd: function (moveable, e) {\r\n var isDrag = e.isDrag, datas = e.datas;\r\n if (!datas.isResize) {\r\n return;\r\n }\r\n this.dragControlEnd(moveable, e);\r\n var events = triggerChildAbles(moveable, this, \"dragControlEnd\", e);\r\n var nextParams = fillEndParams(moveable, e, {\r\n targets: moveable.props.targets,\r\n events: events,\r\n });\r\n triggerEvent(moveable, \"onResizeGroupEnd\", nextParams);\r\n return isDrag;\r\n },\r\n /**\r\n * @method Moveable.Resizable#request\r\n * @param {Moveable.Resizable.ResizableRequestParam} e - the Resizable's request parameter\r\n * @return {Moveable.Requester} Moveable Requester\r\n * @example\r\n\n * // Instantly Request (requestStart - request - requestEnd)\r\n * // Use Relative Value\r\n * moveable.request(\"resizable\", { deltaWidth: 10, deltaHeight: 10 }, true);\r\n *\r\n * // Use Absolute Value\r\n * moveable.request(\"resizable\", { offsetWidth: 100, offsetHeight: 100 }, true);\r\n *\r\n * // requestStart\r\n * const requester = moveable.request(\"resizable\");\r\n *\r\n * // request\r\n * // Use Relative Value\r\n * requester.request({ deltaWidth: 10, deltaHeight: 10 });\r\n * requester.request({ deltaWidth: 10, deltaHeight: 10 });\r\n * requester.request({ deltaWidth: 10, deltaHeight: 10 });\r\n *\r\n * // Use Absolute Value\r\n * moveable.request(\"resizable\", { offsetWidth: 100, offsetHeight: 100 });\r\n * moveable.request(\"resizable\", { offsetWidth: 110, offsetHeight: 100 });\r\n * moveable.request(\"resizable\", { offsetWidth: 120, offsetHeight: 100 });\r\n *\r\n * // requestEnd\r\n * requester.requestEnd();\r\n */\r\n request: function (moveable) {\r\n var datas = {};\r\n var distWidth = 0;\r\n var distHeight = 0;\r\n var useSnap = false;\r\n var rect = moveable.getRect();\r\n return {\r\n isControl: true,\r\n requestStart: function (e) {\r\n var _a;\r\n useSnap = e.useSnap;\r\n return {\r\n datas: datas,\r\n parentDirection: e.direction || [1, 1],\r\n parentIsWidth: (_a = e === null || e === void 0 ? void 0 : e.horizontal) !== null && _a !== void 0 ? _a : true,\r\n useSnap: useSnap,\r\n };\r\n },\r\n request: function (e) {\r\n if (\"offsetWidth\" in e) {\r\n distWidth = e.offsetWidth - rect.offsetWidth;\r\n }\r\n else if (\"deltaWidth\" in e) {\r\n distWidth += e.deltaWidth;\r\n }\r\n if (\"offsetHeight\" in e) {\r\n distHeight = e.offsetHeight - rect.offsetHeight;\r\n }\r\n else if (\"deltaHeight\" in e) {\r\n distHeight += e.deltaHeight;\r\n }\r\n return {\r\n datas: datas,\r\n parentDist: [distWidth, distHeight],\r\n parentKeepRatio: e.keepRatio,\r\n useSnap: useSnap,\r\n };\r\n },\r\n requestEnd: function () {\r\n return { datas: datas, isDrag: true, useSnap: useSnap };\r\n },\r\n };\r\n },\r\n unset: function (moveable) {\r\n moveable.state.gestos.resizable = null;\r\n },\r\n};\r\n/**\r\n * Whether or not target can be resized.\r\n * @name Moveable.Resizable#resizable\r\n * @default false\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * resizable: false,\r\n * });\r\n *\r\n * moveable.resizable = true;\r\n */\r\n/**\r\n * throttle of width, height when resize. If throttleResize is set to less than 1, the target may shake.\r\n * @name Moveable.Resizable#throttleResize\r\n * @default 1\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * resizable: true,\r\n * throttleResize: 1,\r\n * });\r\n *\r\n * moveable.throttleResize = 0;\r\n */\r\n/**\r\n * When resize or scale, keeps a ratio of the width, height.\r\n * @name Moveable.Resizable#keepRatio\r\n * @default false\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * resizable: true,\r\n * });\r\n *\r\n * moveable.keepRatio = true;\r\n */\r\n/**\r\n * Set directions to show the control box.\r\n * @name Moveable.Resizable#renderDirections\r\n * @default [\"n\", \"nw\", \"ne\", \"s\", \"se\", \"sw\", \"e\", \"w\"]\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * resizable: true,\r\n * renderDirections: [\"n\", \"nw\", \"ne\", \"s\", \"se\", \"sw\", \"e\", \"w\"],\r\n * });\r\n *\r\n * moveable.renderDirections = [\"nw\", \"ne\", \"sw\", \"se\"];\r\n */\r\n/**\r\n * Function to convert size for resize\r\n * @name Moveable.Resizable#resizeFormat\r\n * @default oneself\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * resizable: true,\r\n * resizeFormat: v => v,\r\n * });\r\n *\r\n * moveable.resizeFormat = (size: number[]) => ([Math.trunc(size[0]), Math.trunc(size[1])];\r\n */\r\n/**\r\n * When the resize starts, the resizeStart event is called.\r\n * @memberof Moveable.Resizable\r\n * @event resizeStart\r\n * @param {Moveable.Resizable.OnResizeStart} - Parameters for the resizeStart event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { resizable: true });\r\n * moveable.on(\"resizeStart\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n */\r\n/**\r\n * When resizing, `beforeResize` is called before `resize` occurs. In `beforeResize`, you can get and set the pre-value before resizing.\r\n * @memberof Moveable.Resizable\r\n * @event beforeResize\r\n * @param {Moveable.Resizable.OnBeforeResize} - Parameters for the `beforeResize` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { resizable: true });\r\n * moveable.on(\"beforeResize\", ({ setFixedDirection }) => {\r\n * if (shiftKey) {\r\n * setFixedDirection([0, 0]);\r\n * }\r\n * });\r\n * moveable.on(\"resize\", ({ target, width, height, drag }) => {\r\n * target.style.width = `${width}px`;\r\n * target.style.height = `${height}px`;\r\n * target.style.transform = drag.transform;\r\n * });\r\n */\r\n/**\r\n * When resizing, the resize event is called.\r\n * @memberof Moveable.Resizable\r\n * @event resize\r\n * @param {Moveable.Resizable.OnResize} - Parameters for the resize event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { resizable: true });\r\n * moveable.on(\"resize\", ({ target, width, height }) => {\r\n * target.style.width = `${e.width}px`;\r\n * target.style.height = `${e.height}px`;\r\n * });\r\n */\r\n/**\r\n * When the resize finishes, the resizeEnd event is called.\r\n * @memberof Moveable.Resizable\r\n * @event resizeEnd\r\n * @param {Moveable.Resizable.OnResizeEnd} - Parameters for the resizeEnd event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { resizable: true });\r\n * moveable.on(\"resizeEnd\", ({ target, isDrag }) => {\r\n * console.log(target, isDrag);\r\n * });\r\n */\r\n/**\r\n* When the group resize starts, the `resizeGroupStart` event is called.\r\n* @memberof Moveable.Resizable\r\n* @event resizeGroupStart\r\n* @param {Moveable.Resizable.OnResizeGroupStart} - Parameters for the `resizeGroupStart` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* target: [].slice.call(document.querySelectorAll(\".target\")),\r\n* resizable: true\r\n* });\r\n* moveable.on(\"resizeGroupStart\", ({ targets }) => {\r\n* console.log(\"onResizeGroupStart\", targets);\r\n* });\r\n*/\r\n/**\r\n* When the group resize, the `resizeGroup` event is called.\r\n* @memberof Moveable.Resizable\r\n* @event resizeGroup\r\n* @param {Moveable.Resizable.onResizeGroup} - Parameters for the `resizeGroup` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* target: [].slice.call(document.querySelectorAll(\".target\")),\r\n* resizable: true\r\n* });\r\n* moveable.on(\"resizeGroup\", ({ targets, events }) => {\r\n* console.log(\"onResizeGroup\", targets);\r\n* events.forEach(ev => {\r\n* const offset = [\r\n* direction[0] < 0 ? -ev.delta[0] : 0,\r\n* direction[1] < 0 ? -ev.delta[1] : 0,\r\n* ];\r\n* // ev.drag is a drag event that occurs when the group resize.\r\n* const left = offset[0] + ev.drag.beforeDist[0];\r\n* const top = offset[1] + ev.drag.beforeDist[1];\r\n* const width = ev.width;\r\n* const top = ev.top;\r\n* });\r\n* });\r\n*/\r\n/**\r\n * When the group resize finishes, the `resizeGroupEnd` event is called.\r\n * @memberof Moveable.Resizable\r\n * @event resizeGroupEnd\r\n * @param {Moveable.Resizable.OnResizeGroupEnd} - Parameters for the `resizeGroupEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * resizable: true\r\n * });\r\n * moveable.on(\"resizeGroupEnd\", ({ targets, isDrag }) => {\r\n * console.log(\"onResizeGroupEnd\", targets, isDrag);\r\n * });\r\n */\n\n/**\r\n * @namespace Rotatable\r\n * @memberof Moveable\r\n * @description Rotatable indicates whether the target can be rotated.\r\n */\r\nfunction setRotateStartInfo(moveable, datas, clientX, clientY, rect) {\r\n var groupable = moveable.props.groupable;\r\n var state = moveable.state;\r\n var n = state.is3d ? 4 : 3;\r\n var origin = datas.origin;\r\n var nextOrigin = calculatePosition(moveable.state.rootMatrix, \r\n // TO-DO #710\r\n minus([origin[0], origin[1]], groupable ? [0, 0] : [state.left, state.top]), n);\r\n var startAbsoluteOrigin = plus([rect.left, rect.top], nextOrigin);\r\n datas.startAbsoluteOrigin = startAbsoluteOrigin;\r\n datas.prevDeg = getRad(startAbsoluteOrigin, [clientX, clientY]) / Math.PI * 180;\r\n datas.defaultDeg = datas.prevDeg;\r\n datas.prevSnapDeg = 0;\r\n datas.loop = 0;\r\n datas.startDist = getDist$1(startAbsoluteOrigin, [clientX, clientY]);\r\n}\r\nfunction getAbsoluteDist(deg, direction, datas) {\r\n var defaultDeg = datas.defaultDeg, prevDeg = datas.prevDeg;\r\n var normalizedPrevDeg = prevDeg % 360;\r\n var loop = Math.floor(prevDeg / 360);\r\n if (normalizedPrevDeg < 0) {\r\n normalizedPrevDeg += 360;\r\n }\r\n if (normalizedPrevDeg > deg && normalizedPrevDeg > 270 && deg < 90) {\r\n // 360 => 0\r\n ++loop;\r\n }\r\n else if (normalizedPrevDeg < deg && normalizedPrevDeg < 90 && deg > 270) {\r\n // 0 => 360\r\n --loop;\r\n }\r\n var dist = direction * (loop * 360 + deg - defaultDeg);\r\n datas.prevDeg = defaultDeg + dist;\r\n return dist;\r\n}\r\nfunction getAbsoluteDistByClient(clientX, clientY, direction, datas) {\r\n return getAbsoluteDist(getRad(datas.startAbsoluteOrigin, [clientX, clientY]) / Math.PI * 180, direction, datas);\r\n}\r\nfunction getRotateInfo(moveable, moveableRect, datas, dist, startValue, checkSnap) {\r\n var _a = moveable.props.throttleRotate, throttleRotate = _a === void 0 ? 0 : _a;\r\n var prevSnapDeg = datas.prevSnapDeg;\r\n var snapRotation = 0;\r\n var isSnap = false;\r\n if (checkSnap) {\r\n var result = checkSnapRotate(moveable, moveableRect, dist, startValue + dist);\r\n isSnap = result.isSnap;\r\n snapRotation = startValue + result.dist;\r\n }\r\n if (!isSnap) {\r\n snapRotation = throttle(startValue + dist, throttleRotate);\r\n }\r\n var snapDeg = snapRotation - startValue;\r\n datas.prevSnapDeg = snapDeg;\r\n return [snapDeg - prevSnapDeg, snapDeg, snapRotation];\r\n}\r\nfunction getRotationPositions(rotationPosition, _a, direction) {\r\n var _b = __read(_a, 4), pos1 = _b[0], pos2 = _b[1], pos3 = _b[2], pos4 = _b[3];\r\n if (rotationPosition === \"none\") {\r\n return [];\r\n }\r\n if (isArray(rotationPosition)) {\r\n return rotationPosition.map(function (child) { return getRotationPositions(child, [pos1, pos2, pos3, pos4], direction)[0]; });\r\n }\r\n var _c = __read((rotationPosition || \"top\").split(\"-\"), 2), dir1 = _c[0], dir2 = _c[1];\r\n var radPoses = [pos1, pos2];\r\n if (dir1 === \"left\") {\r\n radPoses = [pos3, pos1];\r\n }\r\n else if (dir1 === \"right\") {\r\n radPoses = [pos2, pos4];\r\n }\r\n else if (dir1 === \"bottom\") {\r\n radPoses = [pos4, pos3];\r\n }\r\n var pos = [\r\n (radPoses[0][0] + radPoses[1][0]) / 2,\r\n (radPoses[0][1] + radPoses[1][1]) / 2,\r\n ];\r\n var rad = getRotationRad(radPoses, direction);\r\n if (dir2) {\r\n var isStart = dir2 === \"top\" || dir2 === \"left\";\r\n var isReverse = dir1 === \"bottom\" || dir1 === \"left\";\r\n pos = radPoses[(isStart && !isReverse) || (!isStart && isReverse) ? 0 : 1];\r\n }\r\n return [[pos, rad]];\r\n}\r\nfunction dragControlCondition(moveable, e) {\r\n if (e.isRequest) {\r\n return e.requestAble === \"rotatable\";\r\n }\r\n var target = e.inputEvent.target;\r\n if (hasClass(target, prefix(\"rotation-control\"))\r\n || (moveable.props.rotateAroundControls && hasClass(target, prefix(\"around-control\")))\r\n || (hasClass(target, prefix(\"control\")) && hasClass(target, prefix(\"rotatable\")))) {\r\n return true;\r\n }\r\n var rotationTarget = moveable.props.rotationTarget;\r\n if (rotationTarget) {\r\n return getRefTargets(rotationTarget, true).some(function (element) {\r\n if (!element) {\r\n return false;\r\n }\r\n return target === element || target.contains(element);\r\n });\r\n }\r\n return false;\r\n}\r\nvar css = \".rotation {\\nposition: absolute;\\nheight: 40px;\\nwidth: 1px;\\ntransform-origin: 50% 100%;\\nheight: calc(40px * var(--zoom));\\ntop: auto;\\nleft: 0;\\nbottom: 100%;\\nwill-change: transform;\\n}\\n.rotation .rotation-line {\\ndisplay: block;\\nwidth: 100%;\\nheight: 100%;\\ntransform-origin: 50% 50%;\\n}\\n.rotation .rotation-control {\\nborder-color: #4af;\\nborder-color: var(--moveable-color);\\nbackground:#fff;\\ncursor: alias;\\n}\\n:global .view-rotation-dragging, .rotatable.direction.control {\\ncursor: alias;\\n}\\n.rotatable.direction.control.move {\\ncursor: move;\\n}\\n\";\r\nvar Rotatable = {\r\n name: \"rotatable\",\r\n canPinch: true,\r\n props: [\r\n \"rotatable\",\r\n \"rotationPosition\",\r\n \"throttleRotate\",\r\n \"renderDirections\",\r\n \"rotationTarget\",\r\n \"rotateAroundControls\",\r\n \"edge\",\r\n \"resolveAblesWithRotatable\",\r\n \"displayAroundControls\",\r\n ],\r\n events: [\r\n \"rotateStart\",\r\n \"beforeRotate\",\r\n \"rotate\",\r\n \"rotateEnd\",\r\n \"rotateGroupStart\",\r\n \"beforeRotateGroup\",\r\n \"rotateGroup\",\r\n \"rotateGroupEnd\",\r\n ],\r\n css: [css],\r\n viewClassName: function (moveable) {\r\n if (!moveable.isDragging(\"rotatable\")) {\r\n return \"\";\r\n }\r\n return prefix(\"view-rotation-dragging\");\r\n },\r\n render: function (moveable, React) {\r\n var _a = getProps(moveable.props, \"rotatable\"), rotatable = _a.rotatable, rotationPosition = _a.rotationPosition, zoom = _a.zoom, renderDirections = _a.renderDirections, rotateAroundControls = _a.rotateAroundControls, resolveAblesWithRotatable = _a.resolveAblesWithRotatable;\r\n var _b = moveable.getState(), renderPoses = _b.renderPoses, direction = _b.direction;\r\n if (!rotatable) {\r\n return null;\r\n }\r\n var positions = getRotationPositions(rotationPosition, renderPoses, direction);\r\n var jsxs = [];\r\n positions.forEach(function (_a, i) {\r\n var _b = __read(_a, 2), pos = _b[0], rad = _b[1];\r\n jsxs.push(React.createElement(\"div\", { key: \"rotation\".concat(i), className: prefix(\"rotation\"), style: {\r\n // tslint:disable-next-line: max-line-length\r\n transform: \"translate(-50%) translate(\".concat(pos[0], \"px, \").concat(pos[1], \"px) rotate(\").concat(rad, \"rad)\"),\r\n } },\r\n React.createElement(\"div\", { className: prefix(\"line rotation-line\"), style: {\r\n transform: \"scaleX(\".concat(zoom, \")\"),\r\n } }),\r\n React.createElement(\"div\", { className: prefix(\"control rotation-control\"), style: {\r\n transform: \"translate(0.5px) scale(\".concat(zoom, \")\"),\r\n } })));\r\n });\r\n if (renderDirections) {\r\n var ables = getKeys(resolveAblesWithRotatable || {});\r\n var resolveMap_1 = {};\r\n ables.forEach(function (name) {\r\n resolveAblesWithRotatable[name].forEach(function (direction) {\r\n resolveMap_1[direction] = name;\r\n });\r\n });\r\n var directionControlInfos = [];\r\n if (isArray(renderDirections)) {\r\n directionControlInfos = renderDirections.map(function (dir) {\r\n var able = resolveMap_1[dir];\r\n return {\r\n data: able ? { resolve: able } : {},\r\n classNames: able ? [\"move\"] : [],\r\n dir: dir,\r\n };\r\n });\r\n }\r\n jsxs.push.apply(jsxs, __spreadArray([], __read(renderDirectionControlsByInfos(moveable, \"rotatable\", directionControlInfos, React)), false));\r\n }\r\n if (rotateAroundControls) {\r\n jsxs.push.apply(jsxs, __spreadArray([], __read(renderAroundControls(moveable, React)), false));\r\n }\r\n return jsxs;\r\n },\r\n dragControlCondition: dragControlCondition,\r\n dragControlStart: function (moveable, e) {\r\n var _a;\r\n var _b;\r\n var datas = e.datas, clientX = e.clientX, clientY = e.clientY, parentRotate = e.parentRotate, parentFlag = e.parentFlag, isPinch = e.isPinch, isRequest = e.isRequest;\r\n var state = moveable.state;\r\n var target = state.target, left = state.left, top = state.top, direction = state.direction, beforeDirection = state.beforeDirection, targetTransform = state.targetTransform, moveableClientRect = state.moveableClientRect, offsetMatrix = state.offsetMatrix, targetMatrix = state.targetMatrix, allMatrix = state.allMatrix, width = state.width, height = state.height;\r\n if (!isRequest && !target) {\r\n return false;\r\n }\r\n var rect = moveable.getRect();\r\n datas.rect = rect;\r\n datas.transform = targetTransform;\r\n datas.left = left;\r\n datas.top = top;\r\n var setFixedPosition = function (fixedPosition) {\r\n var result = getOffsetFixedPositionInfo(moveable.state, fixedPosition);\r\n datas.fixedDirection = result.fixedDirection;\r\n datas.fixedOffset = result.fixedOffset;\r\n datas.fixedPosition = result.fixedPosition;\r\n if (resizeStart) {\r\n resizeStart.setFixedPosition(fixedPosition);\r\n }\r\n };\r\n var setFixedDirection = function (fixedDirection) {\r\n var result = getOffsetFixedDirectionInfo(moveable.state, fixedDirection);\r\n datas.fixedDirection = result.fixedDirection;\r\n datas.fixedOffset = result.fixedOffset;\r\n datas.fixedPosition = result.fixedPosition;\r\n if (resizeStart) {\r\n resizeStart.setFixedDirection(fixedDirection);\r\n }\r\n };\r\n var startClientX = clientX;\r\n var startClientY = clientY;\r\n if (isRequest || isPinch || parentFlag) {\r\n var externalRotate = parentRotate || 0;\r\n datas.beforeInfo = {\r\n origin: rect.beforeOrigin,\r\n prevDeg: externalRotate,\r\n defaultDeg: externalRotate,\r\n prevSnapDeg: 0,\r\n startDist: 0,\r\n };\r\n datas.afterInfo = __assign(__assign({}, datas.beforeInfo), { origin: rect.origin });\r\n datas.absoluteInfo = __assign(__assign({}, datas.beforeInfo), { origin: rect.origin, startValue: externalRotate });\r\n }\r\n else {\r\n var inputTarget = (_b = e.inputEvent) === null || _b === void 0 ? void 0 : _b.target;\r\n if (inputTarget) {\r\n var regionDirection = inputTarget.getAttribute(\"data-direction\") || \"\";\r\n var controlDirection = DIRECTION_REGION_TO_DIRECTION[regionDirection];\r\n if (controlDirection) {\r\n datas.isControl = true;\r\n datas.isAroundControl = hasClass(inputTarget, prefix(\"around-control\"));\r\n datas.controlDirection = controlDirection;\r\n var resolve = inputTarget.getAttribute(\"data-resolve\");\r\n if (resolve) {\r\n datas.resolveAble = resolve;\r\n }\r\n var clientPoses = calculateMoveableClientPositions(state.rootMatrix, state.renderPoses, moveableClientRect);\r\n _a = __read(getPosByDirection(clientPoses, controlDirection), 2), startClientX = _a[0], startClientY = _a[1];\r\n }\r\n }\r\n datas.beforeInfo = { origin: rect.beforeOrigin };\r\n datas.afterInfo = { origin: rect.origin };\r\n datas.absoluteInfo = {\r\n origin: rect.origin,\r\n startValue: rect.rotation,\r\n };\r\n var originalFixedPosition_1 = setFixedPosition;\r\n setFixedPosition = function (fixedPosition) {\r\n var n = state.is3d ? 4 : 3;\r\n var _a = __read(plus(getOrigin(targetMatrix, n), fixedPosition), 2), originX = _a[0], originY = _a[1];\r\n var fixedBeforeOrigin = calculate(offsetMatrix, convertPositionMatrix([originX, originY], n));\r\n var fixedAfterOrigin = calculate(allMatrix, convertPositionMatrix([fixedPosition[0], fixedPosition[1]], n));\r\n originalFixedPosition_1(fixedPosition);\r\n var posDelta = state.posDelta;\r\n datas.beforeInfo.origin = minus(fixedBeforeOrigin, posDelta);\r\n datas.afterInfo.origin = minus(fixedAfterOrigin, posDelta);\r\n datas.absoluteInfo.origin = minus(fixedAfterOrigin, posDelta);\r\n setRotateStartInfo(moveable, datas.beforeInfo, startClientX, startClientY, moveableClientRect);\r\n setRotateStartInfo(moveable, datas.afterInfo, startClientX, startClientY, moveableClientRect);\r\n setRotateStartInfo(moveable, datas.absoluteInfo, startClientX, startClientY, moveableClientRect);\r\n };\r\n setFixedDirection = function (fixedDirection) {\r\n var fixedPosition = getPosByDirection([\r\n [0, 0],\r\n [width, 0],\r\n [0, height],\r\n [width, height],\r\n ], fixedDirection);\r\n setFixedPosition(fixedPosition);\r\n };\r\n }\r\n datas.startClientX = startClientX;\r\n datas.startClientY = startClientY;\r\n datas.direction = direction;\r\n datas.beforeDirection = beforeDirection;\r\n datas.startValue = 0;\r\n datas.datas = {};\r\n setDefaultTransformIndex(moveable, e, \"rotate\");\r\n var dragStart = false;\r\n var resizeStart = false;\r\n if (datas.isControl && datas.resolveAble) {\r\n var resolveAble = datas.resolveAble;\r\n if (resolveAble === \"resizable\") {\r\n resizeStart = Resizable.dragControlStart(moveable, __assign(__assign({}, (new CustomGesto(\"resizable\").dragStart([0, 0], e))), { parentPosition: datas.controlPosition, parentFixedPosition: datas.fixedPosition }));\r\n }\r\n }\r\n if (!resizeStart) {\r\n dragStart = Draggable.dragStart(moveable, new CustomGesto().dragStart([0, 0], e));\r\n }\r\n setFixedPosition(getTotalOrigin(moveable));\r\n var params = fillParams(moveable, e, __assign(__assign({ set: function (rotatation) {\r\n datas.startValue = rotatation * Math.PI / 180;\r\n }, setFixedDirection: setFixedDirection, setFixedPosition: setFixedPosition }, fillTransformStartEvent(moveable, e)), { dragStart: dragStart, resizeStart: resizeStart }));\r\n var result = triggerEvent(moveable, \"onRotateStart\", params);\r\n datas.isRotate = result !== false;\r\n state.snapRenderInfo = {\r\n request: e.isRequest,\r\n };\r\n return datas.isRotate ? params : false;\r\n },\r\n dragControl: function (moveable, e) {\r\n var _a, _b, _c;\r\n var datas = e.datas, clientDistX = e.clientDistX, clientDistY = e.clientDistY, parentRotate = e.parentRotate, parentFlag = e.parentFlag, isPinch = e.isPinch, groupDelta = e.groupDelta, resolveMatrix = e.resolveMatrix;\r\n var beforeDirection = datas.beforeDirection, beforeInfo = datas.beforeInfo, afterInfo = datas.afterInfo, absoluteInfo = datas.absoluteInfo, isRotate = datas.isRotate, startValue = datas.startValue, rect = datas.rect, startClientX = datas.startClientX, startClientY = datas.startClientY;\r\n if (!isRotate) {\r\n return;\r\n }\r\n resolveTransformEvent(moveable, e, \"rotate\");\r\n var targetDirection = getTransformDirection(e);\r\n var direction = beforeDirection * targetDirection;\r\n var parentMoveable = moveable.props.parentMoveable;\r\n var beforeDelta = 0;\r\n var beforeDist;\r\n var beforeRotation;\r\n var delta = 0;\r\n var dist;\r\n var rotation;\r\n var absoluteDelta = 0;\r\n var absoluteDist;\r\n var absoluteRotation;\r\n var startRotation = 180 / Math.PI * startValue;\r\n var absoluteStartRotation = absoluteInfo.startValue;\r\n var isSnap = false;\r\n var nextClientX = startClientX + clientDistX;\r\n var nextClientY = startClientY + clientDistY;\r\n if (!parentFlag && \"parentDist\" in e) {\r\n var parentDist = e.parentDist;\r\n beforeDist = parentDist;\r\n dist = parentDist;\r\n absoluteDist = parentDist;\r\n }\r\n else if (isPinch || parentFlag) {\r\n beforeDist = getAbsoluteDist(parentRotate, beforeDirection, beforeInfo);\r\n dist = getAbsoluteDist(parentRotate, direction, afterInfo);\r\n absoluteDist = getAbsoluteDist(parentRotate, direction, absoluteInfo);\r\n }\r\n else {\r\n beforeDist = getAbsoluteDistByClient(nextClientX, nextClientY, beforeDirection, beforeInfo);\r\n dist = getAbsoluteDistByClient(nextClientX, nextClientY, direction, afterInfo);\r\n absoluteDist = getAbsoluteDistByClient(nextClientX, nextClientY, direction, absoluteInfo);\r\n isSnap = true;\r\n }\r\n beforeRotation = startRotation + beforeDist;\r\n rotation = startRotation + dist;\r\n absoluteRotation = absoluteStartRotation + absoluteDist;\r\n triggerEvent(moveable, \"onBeforeRotate\", fillParams(moveable, e, {\r\n beforeRotation: beforeRotation,\r\n rotation: rotation,\r\n absoluteRotation: absoluteRotation,\r\n setRotation: function (nextRotation) {\r\n dist = nextRotation - startRotation;\r\n beforeDist = dist;\r\n absoluteDist = dist;\r\n },\r\n }, true));\r\n _a = __read(getRotateInfo(moveable, rect, beforeInfo, beforeDist, startRotation, isSnap), 3), beforeDelta = _a[0], beforeDist = _a[1], beforeRotation = _a[2];\r\n _b = __read(getRotateInfo(moveable, rect, afterInfo, dist, startRotation, isSnap), 3), delta = _b[0], dist = _b[1], rotation = _b[2];\r\n _c = __read(getRotateInfo(moveable, rect, absoluteInfo, absoluteDist, absoluteStartRotation, isSnap), 3), absoluteDelta = _c[0], absoluteDist = _c[1], absoluteRotation = _c[2];\r\n if (!absoluteDelta && !delta && !beforeDelta && !parentMoveable && !resolveMatrix) {\r\n return;\r\n }\r\n var nextTransform = convertTransformFormat(datas, \"rotate(\".concat(rotation, \"deg)\"), \"rotate(\".concat(dist, \"deg)\"));\r\n if (resolveMatrix) {\r\n datas.fixedPosition = getTranslateFixedPosition(moveable, datas.targetAllTransform, datas.fixedDirection, datas.fixedOffset, datas);\r\n }\r\n var inverseDist = getRotateDist(moveable, dist, datas);\r\n var inverseDelta = minus(plus(groupDelta || [0, 0], inverseDist), datas.prevInverseDist || [0, 0]);\r\n datas.prevInverseDist = inverseDist;\r\n datas.requestValue = null;\r\n var dragEvent = fillTransformEvent(moveable, nextTransform, inverseDelta, isPinch, e);\r\n var transformEvent = dragEvent;\r\n var parentDistance = getDist$1([nextClientX, nextClientY], absoluteInfo.startAbsoluteOrigin) - absoluteInfo.startDist;\r\n var resize = undefined;\r\n if (datas.resolveAble === \"resizable\") {\r\n var resizeEvent = Resizable.dragControl(moveable, __assign(__assign({}, setCustomDrag(e, moveable.state, [e.deltaX, e.deltaY], !!isPinch, false, \"resizable\")), { resolveMatrix: true, parentDistance: parentDistance }));\r\n if (resizeEvent) {\r\n resize = resizeEvent;\r\n transformEvent = fillAfterTransform(transformEvent, resizeEvent, e);\r\n }\r\n }\r\n var params = fillParams(moveable, e, __assign(__assign({ delta: delta, dist: dist, rotate: rotation, rotation: rotation, beforeDist: beforeDist, beforeDelta: beforeDelta, beforeRotate: beforeRotation, beforeRotation: beforeRotation, absoluteDist: absoluteDist, absoluteDelta: absoluteDelta, absoluteRotate: absoluteRotation, absoluteRotation: absoluteRotation, isPinch: !!isPinch, resize: resize }, dragEvent), transformEvent));\r\n triggerEvent(moveable, \"onRotate\", params);\r\n return params;\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n var datas = e.datas;\r\n if (!datas.isRotate) {\r\n return;\r\n }\r\n datas.isRotate = false;\r\n var params = fillEndParams(moveable, e, {});\r\n triggerEvent(moveable, \"onRotateEnd\", params);\r\n return params;\r\n },\r\n dragGroupControlCondition: dragControlCondition,\r\n dragGroupControlStart: function (moveable, e) {\r\n var datas = e.datas;\r\n var _a = moveable.state, parentLeft = _a.left, parentTop = _a.top, parentBeforeOrigin = _a.beforeOrigin;\r\n var params = this.dragControlStart(moveable, e);\r\n if (!params) {\r\n return false;\r\n }\r\n params.set(datas.beforeDirection * moveable.rotation);\r\n var events = triggerChildAbles(moveable, this, \"dragControlStart\", e, function (child, ev) {\r\n var _a = child.state, left = _a.left, top = _a.top, beforeOrigin = _a.beforeOrigin;\r\n var childClient = plus(minus([left, top], [parentLeft, parentTop]), minus(beforeOrigin, parentBeforeOrigin));\r\n ev.datas.startGroupClient = childClient;\r\n ev.datas.groupClient = childClient;\r\n return __assign(__assign({}, ev), { parentRotate: 0 });\r\n });\r\n var nextParams = __assign(__assign({}, params), { targets: moveable.props.targets, events: events });\r\n var result = triggerEvent(moveable, \"onRotateGroupStart\", nextParams);\r\n datas.isRotate = result !== false;\r\n return datas.isRotate ? params : false;\r\n },\r\n dragGroupControl: function (moveable, e) {\r\n var datas = e.datas;\r\n if (!datas.isRotate) {\r\n return;\r\n }\r\n catchEvent(moveable, \"onBeforeRotate\", function (parentEvent) {\r\n triggerEvent(moveable, \"onBeforeRotateGroup\", fillParams(moveable, e, __assign(__assign({}, parentEvent), { targets: moveable.props.targets }), true));\r\n });\r\n var params = this.dragControl(moveable, e);\r\n if (!params) {\r\n return;\r\n }\r\n var direction = datas.beforeDirection;\r\n var parentRotate = params.beforeDist;\r\n var rad = parentRotate / 180 * Math.PI;\r\n var events = triggerChildAbles(moveable, this, \"dragControl\", e, function (_, ev) {\r\n var startGroupClient = ev.datas.startGroupClient;\r\n var _a = __read(ev.datas.groupClient, 2), prevClientX = _a[0], prevClientY = _a[1];\r\n var _b = __read(rotate(startGroupClient, rad * direction), 2), clientX = _b[0], clientY = _b[1];\r\n var delta = [clientX - prevClientX, clientY - prevClientY];\r\n ev.datas.groupClient = [clientX, clientY];\r\n return __assign(__assign({}, ev), { parentRotate: parentRotate, groupDelta: delta });\r\n });\r\n moveable.rotation = direction * params.beforeRotation;\r\n var nextParams = __assign({ targets: moveable.props.targets, events: events, set: function (rotation) {\r\n moveable.rotation = rotation;\r\n }, setGroupRotation: function (rotation) {\r\n moveable.rotation = rotation;\r\n } }, params);\r\n triggerEvent(moveable, \"onRotateGroup\", nextParams);\r\n return nextParams;\r\n },\r\n dragGroupControlEnd: function (moveable, e) {\r\n var isDrag = e.isDrag, datas = e.datas;\r\n if (!datas.isRotate) {\r\n return;\r\n }\r\n this.dragControlEnd(moveable, e);\r\n var events = triggerChildAbles(moveable, this, \"dragControlEnd\", e);\r\n var nextParams = fillEndParams(moveable, e, {\r\n targets: moveable.props.targets,\r\n events: events,\r\n });\r\n triggerEvent(moveable, \"onRotateGroupEnd\", nextParams);\r\n return isDrag;\r\n },\r\n /**\r\n * @method Moveable.Rotatable#request\r\n * @param {object} [e] - the Resizable's request parameter\r\n * @param {number} [e.deltaRotate=0] - delta number of rotation\r\n * @param {number} [e.rotate=0] - absolute number of moveable's rotation\r\n * @return {Moveable.Requester} Moveable Requester\r\n * @example\r\n\n * // Instantly Request (requestStart - request - requestEnd)\r\n * moveable.request(\"rotatable\", { deltaRotate: 10 }, true);\r\n *\r\n * * moveable.request(\"rotatable\", { rotate: 10 }, true);\r\n *\r\n * // requestStart\r\n * const requester = moveable.request(\"rotatable\");\r\n *\r\n * // request\r\n * requester.request({ deltaRotate: 10 });\r\n * requester.request({ deltaRotate: 10 });\r\n * requester.request({ deltaRotate: 10 });\r\n *\r\n * requester.request({ rotate: 10 });\r\n * requester.request({ rotate: 20 });\r\n * requester.request({ rotate: 30 });\r\n *\r\n * // requestEnd\r\n * requester.requestEnd();\r\n */\r\n request: function (moveable) {\r\n var datas = {};\r\n var distRotate = 0;\r\n var startRotation = moveable.getRotation();\r\n return {\r\n isControl: true,\r\n requestStart: function () {\r\n return { datas: datas };\r\n },\r\n request: function (e) {\r\n if (\"deltaRotate\" in e) {\r\n distRotate += e.deltaRotate;\r\n }\r\n else if (\"rotate\" in e) {\r\n distRotate = e.rotate - startRotation;\r\n }\r\n return { datas: datas, parentDist: distRotate };\r\n },\r\n requestEnd: function () {\r\n return { datas: datas, isDrag: true };\r\n },\r\n };\r\n },\r\n};\r\n/**\r\n * Whether or not target can be rotated. (default: false)\r\n * @name Moveable.Rotatable#rotatable\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.rotatable = true;\r\n */\r\n/**\r\n * You can specify the position of the rotation. (default: \"top\")\r\n * @name Moveable.Rotatable#rotationPosition\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * rotationPosition: \"top\",\r\n * });\r\n *\r\n * moveable.rotationPosition = \"bottom\"\r\n */\r\n/**\r\n * throttle of angle(degree) when rotate.\r\n * @name Moveable.Rotatable#throttleRotate\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.throttleRotate = 1;\r\n */\r\n/**\r\n * When the rotate starts, the rotateStart event is called.\r\n * @memberof Moveable.Rotatable\r\n * @event rotateStart\r\n * @param {Moveable.Rotatable.OnRotateStart} - Parameters for the rotateStart event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { rotatable: true });\r\n * moveable.on(\"rotateStart\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n */\r\n/**\r\n* When rotating, the rotate event is called.\r\n* @memberof Moveable.Rotatable\r\n* @event rotate\r\n* @param {Moveable.Rotatable.OnRotate} - Parameters for the rotate event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, { rotatable: true });\r\n* moveable.on(\"rotate\", ({ target, transform, dist }) => {\r\n* target.style.transform = transform;\r\n* });\r\n*/\r\n/**\r\n * When the rotate finishes, the rotateEnd event is called.\r\n * @memberof Moveable.Rotatable\r\n * @event rotateEnd\r\n * @param {Moveable.Rotatable.OnRotateEnd} - Parameters for the rotateEnd event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { rotatable: true });\r\n * moveable.on(\"rotateEnd\", ({ target, isDrag }) => {\r\n * console.log(target, isDrag);\r\n * });\r\n */\r\n/**\r\n * When the group rotate starts, the `rotateGroupStart` event is called.\r\n * @memberof Moveable.Rotatable\r\n * @event rotateGroupStart\r\n * @param {Moveable.Rotatable.OnRotateGroupStart} - Parameters for the `rotateGroupStart` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * rotatable: true\r\n * });\r\n * moveable.on(\"rotateGroupStart\", ({ targets }) => {\r\n * console.log(\"onRotateGroupStart\", targets);\r\n * });\r\n */\r\n/**\r\n* When the group rotate, the `rotateGroup` event is called.\r\n* @memberof Moveable.Rotatable\r\n* @event rotateGroup\r\n* @param {Moveable.Rotatable.OnRotateGroup} - Parameters for the `rotateGroup` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* target: [].slice.call(document.querySelectorAll(\".target\")),\r\n* rotatable: true\r\n* });\r\n* moveable.on(\"rotateGroup\", ({ targets, events }) => {\r\n* console.log(\"onRotateGroup\", targets);\r\n* events.forEach(ev => {\r\n* const target = ev.target;\r\n* // ev.drag is a drag event that occurs when the group rotate.\r\n* const left = ev.drag.beforeDist[0];\r\n* const top = ev.drag.beforeDist[1];\r\n* const deg = ev.beforeDist;\r\n* });\r\n* });\r\n*/\r\n/**\r\n * When the group rotate finishes, the `rotateGroupEnd` event is called.\r\n * @memberof Moveable.Rotatable\r\n * @event rotateGroupEnd\r\n * @param {Moveable.Rotatable.OnRotateGroupEnd} - Parameters for the `rotateGroupEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * rotatable: true\r\n * });\r\n * moveable.on(\"rotateGroupEnd\", ({ targets, isDrag }) => {\r\n * console.log(\"onRotateGroupEnd\", targets, isDrag);\r\n * });\r\n */\n\nfunction renderGuideline(info, React) {\r\n var _a;\r\n var direction = info.direction, classNames = info.classNames, size = info.size, pos = info.pos, zoom = info.zoom, key = info.key;\r\n var isHorizontal = direction === \"horizontal\";\r\n var scaleType = isHorizontal ? \"Y\" : \"X\";\r\n // const scaleType2 = isHorizontal ? \"Y\" : \"X\";\r\n return React.createElement(\"div\", {\r\n key: key,\r\n className: classNames.join(\" \"),\r\n style: (_a = {},\r\n _a[isHorizontal ? \"width\" : \"height\"] = \"\".concat(size),\r\n _a.transform = \"translate(\".concat(pos[0], \", \").concat(pos[1], \") translate\").concat(scaleType, \"(-50%) scale\").concat(scaleType, \"(\").concat(zoom, \")\"),\r\n _a),\r\n });\r\n}\r\nfunction renderInnerGuideline(info, React) {\r\n return renderGuideline(__assign(__assign({}, info), { classNames: __spreadArray([\r\n prefix(\"line\", \"guideline\", info.direction)\r\n ], __read(info.classNames), false).filter(function (className) { return className; }), size: info.size || \"\".concat(info.sizeValue, \"px\"), pos: info.pos || info.posValue.map(function (v) { return \"\".concat(throttle(v, 0.1), \"px\"); }) }), React);\r\n}\r\nfunction renderSnapPoses(moveable, direction, snapPoses, minPos, targetPos, size, index, React) {\r\n var zoom = moveable.props.zoom;\r\n return snapPoses.map(function (_a, i) {\r\n var type = _a.type, pos = _a.pos;\r\n var renderPos = [0, 0];\r\n renderPos[index] = minPos;\r\n renderPos[index ? 0 : 1] = -targetPos + pos;\r\n return renderInnerGuideline({\r\n key: \"\".concat(direction, \"TargetGuideline\").concat(i),\r\n classNames: [prefix(\"target\", \"bold\", type)],\r\n posValue: renderPos,\r\n sizeValue: size,\r\n zoom: zoom,\r\n direction: direction,\r\n }, React);\r\n });\r\n}\r\nfunction renderGuidelines(moveable, type, guidelines, targetPos, targetRect, React) {\r\n var _a = moveable.props, zoom = _a.zoom, isDisplayInnerSnapDigit = _a.isDisplayInnerSnapDigit;\r\n var mainNames = type === \"horizontal\" ? VERTICAL_NAMES_MAP : HORIZONTAL_NAMES_MAP;\r\n var targetStart = targetRect[mainNames.start];\r\n var targetEnd = targetRect[mainNames.end];\r\n return guidelines.filter(function (_a) {\r\n var hide = _a.hide, elementRect = _a.elementRect;\r\n if (hide) {\r\n return false;\r\n }\r\n if (isDisplayInnerSnapDigit && elementRect) {\r\n // inner\r\n var rect = elementRect.rect;\r\n if (rect[mainNames.start] <= targetStart && targetEnd <= rect[mainNames.end]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }).map(function (guideline, i) {\r\n var pos = guideline.pos, size = guideline.size, element = guideline.element, className = guideline.className;\r\n var renderPos = [\r\n -targetPos[0] + pos[0],\r\n -targetPos[1] + pos[1],\r\n ];\r\n return renderInnerGuideline({\r\n key: \"\".concat(type, \"-default-guideline-\").concat(i),\r\n classNames: element ? [prefix(\"bold\"), className] : [prefix(\"normal\"), className],\r\n direction: type,\r\n posValue: renderPos,\r\n sizeValue: size,\r\n zoom: zoom,\r\n }, React);\r\n });\r\n}\r\nfunction renderDigitLine(moveable, type, lineType, index, gap, renderPos, className, React) {\r\n var _a;\r\n var _b = moveable.props, _c = _b.snapDigit, snapDigit = _c === void 0 ? 0 : _c, _d = _b.isDisplaySnapDigit, isDisplaySnapDigit = _d === void 0 ? true : _d, _e = _b.snapDistFormat, snapDistFormat = _e === void 0 ? function (v, type) {\r\n // Type can be used render different values.\r\n if (type === 'vertical') {\r\n return v;\r\n }\r\n return v;\r\n } : _e, zoom = _b.zoom;\r\n var scaleType = type === \"horizontal\" ? \"X\" : \"Y\";\r\n var sizeName = type === \"vertical\" ? \"height\" : \"width\";\r\n var absGap = Math.abs(gap);\r\n var snapSize = isDisplaySnapDigit\r\n ? parseFloat(absGap.toFixed(snapDigit))\r\n : 0;\r\n return React.createElement(\"div\", { key: \"\".concat(type, \"-\").concat(lineType, \"-guideline-\").concat(index), className: prefix(\"guideline-group\", type), style: (_a = {\r\n left: \"\".concat(renderPos[0], \"px\"),\r\n top: \"\".concat(renderPos[1], \"px\")\r\n },\r\n _a[sizeName] = \"\".concat(absGap, \"px\"),\r\n _a) },\r\n renderInnerGuideline({\r\n direction: type,\r\n classNames: [prefix(lineType), className],\r\n size: \"100%\",\r\n posValue: [0, 0],\r\n sizeValue: absGap,\r\n zoom: zoom,\r\n }, React),\r\n React.createElement(\"div\", { className: prefix(\"size-value\", \"gap\"), style: {\r\n transform: \"translate\".concat(scaleType, \"(-50%) scale(\").concat(zoom, \")\"),\r\n } }, snapSize > 0 ? snapDistFormat(snapSize, type) : \"\"));\r\n}\r\nfunction groupByElementGuidelines(type, guidelines, targetRect, isDisplayInnerSnapDigit) {\r\n var index = type === \"vertical\" ? 0 : 1;\r\n var otherIndex = type === \"vertical\" ? 1 : 0;\r\n var names = index ? VERTICAL_NAMES_MAP : HORIZONTAL_NAMES_MAP;\r\n var targetStart = targetRect[names.start];\r\n var targetEnd = targetRect[names.end];\r\n return groupBy(guidelines, function (guideline) {\r\n return guideline.pos[index];\r\n }).map(function (nextGuidelines) {\r\n var start = [];\r\n var end = [];\r\n var inner = [];\r\n nextGuidelines.forEach(function (guideline) {\r\n var _a, _b;\r\n var element = guideline.element;\r\n var rect = guideline.elementRect.rect;\r\n if (rect[names.end] < targetStart) {\r\n start.push(guideline);\r\n }\r\n else if (targetEnd < rect[names.start]) {\r\n end.push(guideline);\r\n }\r\n else if (rect[names.start] <= targetStart && targetEnd <= rect[names.end] && isDisplayInnerSnapDigit) {\r\n var pos = guideline.pos;\r\n var elementRect1 = { element: element, rect: __assign(__assign({}, rect), (_a = {}, _a[names.end] = rect[names.start], _a)) };\r\n var elementRect2 = { element: element, rect: __assign(__assign({}, rect), (_b = {}, _b[names.start] = rect[names.end], _b)) };\r\n var nextPos1 = [0, 0];\r\n var nextPos2 = [0, 0];\r\n nextPos1[index] = pos[index];\r\n nextPos1[otherIndex] = pos[otherIndex];\r\n nextPos2[index] = pos[index];\r\n nextPos2[otherIndex] = pos[otherIndex] + guideline.size;\r\n start.push({\r\n type: type,\r\n pos: nextPos1,\r\n size: 0,\r\n elementRect: elementRect1,\r\n direction: \"\",\r\n elementDirection: \"end\",\r\n });\r\n end.push({\r\n type: type,\r\n pos: nextPos2,\r\n size: 0,\r\n elementRect: elementRect2,\r\n direction: \"\",\r\n elementDirection: \"start\",\r\n });\r\n // inner.push(guideline);\r\n }\r\n });\r\n start.sort(function (a, b) {\r\n return b.pos[otherIndex] - a.pos[otherIndex];\r\n });\r\n end.sort(function (a, b) {\r\n return a.pos[otherIndex] - b.pos[otherIndex];\r\n });\r\n return {\r\n total: nextGuidelines,\r\n start: start,\r\n end: end,\r\n inner: inner,\r\n };\r\n });\r\n}\r\nfunction renderDashedGuidelines(moveable, guidelines, targetPos, targetRect, React) {\r\n var isDisplayInnerSnapDigit = moveable.props.isDisplayInnerSnapDigit;\r\n var rendered = [];\r\n [\"vertical\", \"horizontal\"].forEach(function (type) {\r\n var nextGuidelines = guidelines.filter(function (guideline) { return guideline.type === type; });\r\n var index = type === \"vertical\" ? 1 : 0;\r\n var otherIndex = index ? 0 : 1;\r\n var groups = groupByElementGuidelines(type, nextGuidelines, targetRect, isDisplayInnerSnapDigit);\r\n var mainNames = index ? HORIZONTAL_NAMES_MAP : VERTICAL_NAMES_MAP;\r\n var sideNames = index ? VERTICAL_NAMES_MAP : HORIZONTAL_NAMES_MAP;\r\n var targetStart = targetRect[mainNames.start];\r\n var targetEnd = targetRect[mainNames.end];\r\n groups.forEach(function (_a) {\r\n var total = _a.total, start = _a.start, end = _a.end, inner = _a.inner;\r\n var sidePos = targetPos[otherIndex] + total[0].pos[otherIndex] - targetRect[sideNames.start];\r\n var prevRect = targetRect;\r\n start.forEach(function (guideline) {\r\n var nextRect = guideline.elementRect.rect;\r\n var size = prevRect[mainNames.start] - nextRect[mainNames.end];\r\n if (size > 0) {\r\n var renderPos = [0, 0];\r\n renderPos[index] = targetPos[index] + prevRect[mainNames.start] - targetStart - size;\r\n renderPos[otherIndex] = sidePos;\r\n rendered.push(renderDigitLine(moveable, type, \"dashed\", rendered.length, size, renderPos, guideline.className, React));\r\n }\r\n prevRect = nextRect;\r\n });\r\n prevRect = targetRect;\r\n end.forEach(function (guideline) {\r\n var nextRect = guideline.elementRect.rect;\r\n var size = nextRect[mainNames.start] - prevRect[mainNames.end];\r\n if (size > 0) {\r\n var renderPos = [0, 0];\r\n renderPos[index] = targetPos[index] + prevRect[mainNames.end] - targetStart;\r\n renderPos[otherIndex] = sidePos;\r\n rendered.push(renderDigitLine(moveable, type, \"dashed\", rendered.length, size, renderPos, guideline.className, React));\r\n }\r\n prevRect = nextRect;\r\n });\r\n inner.forEach(function (guideline) {\r\n var nextRect = guideline.elementRect.rect;\r\n var size1 = targetStart - nextRect[mainNames.start];\r\n var size2 = nextRect[mainNames.end] - targetEnd;\r\n var renderPos1 = [0, 0];\r\n var renderPos2 = [0, 0];\r\n renderPos1[index] = targetPos[index] - size1;\r\n renderPos1[otherIndex] = sidePos;\r\n renderPos2[index] = targetPos[index] + targetEnd - targetStart;\r\n renderPos2[otherIndex] = sidePos;\r\n rendered.push(renderDigitLine(moveable, type, \"dashed\", rendered.length, size1, renderPos1, guideline.className, React));\r\n rendered.push(renderDigitLine(moveable, type, \"dashed\", rendered.length, size2, renderPos2, guideline.className, React));\r\n });\r\n });\r\n });\r\n return rendered;\r\n}\r\nfunction renderGapGuidelines(moveable, guidelines, targetPos, targetRect, React) {\r\n var rendered = [];\r\n [\"horizontal\", \"vertical\"].forEach(function (type) {\r\n var nextGuidelines = guidelines.filter(function (guideline) { return guideline.type === type; }).slice(0, 1);\r\n var index = type === \"vertical\" ? 0 : 1;\r\n var otherIndex = index ? 0 : 1;\r\n var mainNames = index ? HORIZONTAL_NAMES_MAP : VERTICAL_NAMES_MAP;\r\n var sideNames = index ? VERTICAL_NAMES_MAP : HORIZONTAL_NAMES_MAP;\r\n var targetStart = targetRect[mainNames.start];\r\n var targetEnd = targetRect[mainNames.end];\r\n var targetSideStart = targetRect[sideNames.start];\r\n var targetSideEnd = targetRect[sideNames.end];\r\n nextGuidelines.forEach(function (_a) {\r\n var gap = _a.gap, gapRects = _a.gapRects;\r\n var sideStartPos = Math.max.apply(Math, __spreadArray([targetSideStart], __read(gapRects.map(function (_a) {\r\n var rect = _a.rect;\r\n return rect[sideNames.start];\r\n })), false));\r\n var sideEndPos = Math.min.apply(Math, __spreadArray([targetSideEnd], __read(gapRects.map(function (_a) {\r\n var rect = _a.rect;\r\n return rect[sideNames.end];\r\n })), false));\r\n var sideCenterPos = (sideStartPos + sideEndPos) / 2;\r\n if (sideStartPos === sideEndPos || sideCenterPos === (targetSideStart + targetSideEnd) / 2) {\r\n return;\r\n }\r\n gapRects.forEach(function (_a) {\r\n var rect = _a.rect, className = _a.className;\r\n var renderPos = [targetPos[0], targetPos[1]];\r\n if (rect[mainNames.end] < targetStart) {\r\n renderPos[index] += rect[mainNames.end] - targetStart;\r\n }\r\n else if (targetEnd < rect[mainNames.start]) {\r\n renderPos[index] += rect[mainNames.start] - targetStart - gap;\r\n }\r\n else {\r\n return;\r\n }\r\n renderPos[otherIndex] += sideCenterPos - targetSideStart;\r\n rendered.push(renderDigitLine(moveable, index ? \"vertical\" : \"horizontal\", \"gap\", rendered.length, gap, renderPos, className, React));\r\n });\r\n });\r\n });\r\n return rendered;\r\n}\n\nfunction getTotalGuidelines(moveable) {\r\n var _a, _b;\r\n var state = moveable.state;\r\n var containerClientRect = state.containerClientRect, hasFixed = state.hasFixed;\r\n var overflow = containerClientRect.overflow, containerHeight = containerClientRect.scrollHeight, containerWidth = containerClientRect.scrollWidth, containerClientHeight = containerClientRect.clientHeight, containerClientWidth = containerClientRect.clientWidth, clientLeft = containerClientRect.clientLeft, clientTop = containerClientRect.clientTop;\r\n var _c = moveable.props, _d = _c.snapGap, snapGap = _d === void 0 ? true : _d, verticalGuidelines = _c.verticalGuidelines, horizontalGuidelines = _c.horizontalGuidelines, _e = _c.snapThreshold, snapThreshold = _e === void 0 ? 5 : _e, _f = _c.maxSnapElementGuidelineDistance, maxSnapElementGuidelineDistance = _f === void 0 ? Infinity : _f, isDisplayGridGuidelines = _c.isDisplayGridGuidelines;\r\n var _g = getRect(getAbsolutePosesByState(moveable.state)), top = _g.top, left = _g.left, bottom = _g.bottom, right = _g.right;\r\n var targetRect = { top: top, left: left, bottom: bottom, right: right, center: (left + right) / 2, middle: (top + bottom) / 2 };\r\n var elementGuidelines = getElementGuidelines(moveable);\r\n var totalGuidelines = __spreadArray([], __read(elementGuidelines), false);\r\n var snapThresholdMultiples = ((_b = (_a = state.snapThresholdInfo) === null || _a === void 0 ? void 0 : _a.multiples) !== null && _b !== void 0 ? _b : [1, 1]).map(function (n) { return n * snapThreshold; });\r\n if (snapGap) {\r\n totalGuidelines.push.apply(totalGuidelines, __spreadArray([], __read(getGapGuidelines(moveable, targetRect, snapThresholdMultiples)), false));\r\n }\r\n var snapOffset = __assign({}, (state.snapOffset || {\r\n left: 0,\r\n top: 0,\r\n bottom: 0,\r\n right: 0,\r\n }));\r\n totalGuidelines.push.apply(totalGuidelines, __spreadArray([], __read(getGridGuidelines(moveable, overflow ? containerWidth : containerClientWidth, overflow ? containerHeight : containerClientHeight, clientLeft, clientTop, snapOffset, isDisplayGridGuidelines)), false));\r\n if (hasFixed) {\r\n var left_1 = containerClientRect.left, top_1 = containerClientRect.top;\r\n snapOffset.left += left_1;\r\n snapOffset.top += top_1;\r\n snapOffset.right += left_1;\r\n snapOffset.bottom += top_1;\r\n }\r\n totalGuidelines.push.apply(totalGuidelines, __spreadArray([], __read(getDefaultGuidelines(horizontalGuidelines || false, verticalGuidelines || false, overflow ? containerWidth : containerClientWidth, overflow ? containerHeight : containerClientHeight, clientLeft, clientTop, snapOffset)), false));\r\n totalGuidelines = totalGuidelines.filter(function (_a) {\r\n var element = _a.element, elementRect = _a.elementRect, type = _a.type;\r\n if (!element || !elementRect) {\r\n return true;\r\n }\r\n var rect = elementRect.rect;\r\n return checkBetweenRects(targetRect, rect, type, maxSnapElementGuidelineDistance);\r\n });\r\n return totalGuidelines;\r\n}\r\nfunction getGapGuidelines(moveable, targetRect, snapThresholds) {\r\n var _a = moveable.props, _b = _a.maxSnapElementGuidelineDistance, maxSnapElementGuidelineDistance = _b === void 0 ? Infinity : _b, _c = _a.maxSnapElementGapDistance, maxSnapElementGapDistance = _c === void 0 ? Infinity : _c;\r\n var elementRects = moveable.state.elementRects;\r\n var gapGuidelines = [];\r\n [\r\n [\"vertical\", VERTICAL_NAMES_MAP, HORIZONTAL_NAMES_MAP],\r\n [\"horizontal\", HORIZONTAL_NAMES_MAP, VERTICAL_NAMES_MAP],\r\n ].forEach(function (_a) {\r\n var _b = __read(_a, 3), type = _b[0], mainNames = _b[1], sideNames = _b[2];\r\n var targetStart = targetRect[mainNames.start];\r\n var targetEnd = targetRect[mainNames.end];\r\n var targetCenter = targetRect[mainNames.center];\r\n var targetStart2 = targetRect[sideNames.start];\r\n var targetEnd2 = targetRect[sideNames.end];\r\n // element : moveable\r\n var snapThresholdMap = {\r\n left: snapThresholds[0],\r\n top: snapThresholds[1],\r\n };\r\n function getDist(elementRect) {\r\n var rect = elementRect.rect;\r\n var snapThreshold = snapThresholdMap[mainNames.start];\r\n if (rect[mainNames.end] < targetStart + snapThreshold) {\r\n return targetStart - rect[mainNames.end];\r\n }\r\n else if (targetEnd - snapThreshold < rect[mainNames.start]) {\r\n return rect[mainNames.start] - targetEnd;\r\n }\r\n else {\r\n return -1;\r\n }\r\n }\r\n var nextElementRects = elementRects.filter(function (elementRect) {\r\n var rect = elementRect.rect;\r\n if (rect[sideNames.start] > targetEnd2 || rect[sideNames.end] < targetStart2) {\r\n return false;\r\n }\r\n return getDist(elementRect) > 0;\r\n }).sort(function (a, b) {\r\n return getDist(a) - getDist(b);\r\n });\r\n var groups = [];\r\n nextElementRects.forEach(function (snapRect1) {\r\n nextElementRects.forEach(function (snapRect2) {\r\n if (snapRect1 === snapRect2) {\r\n return;\r\n }\r\n var rect1 = snapRect1.rect;\r\n var rect2 = snapRect2.rect;\r\n var rect1Start = rect1[sideNames.start];\r\n var rect1End = rect1[sideNames.end];\r\n var rect2Start = rect2[sideNames.start];\r\n var rect2End = rect2[sideNames.end];\r\n if (rect1Start > rect2End || rect2Start > rect1End) {\r\n return;\r\n }\r\n groups.push([snapRect1, snapRect2]);\r\n });\r\n });\r\n groups.forEach(function (_a) {\r\n var _b = __read(_a, 2), snapRect1 = _b[0], snapRect2 = _b[1];\r\n var rect1 = snapRect1.rect;\r\n var rect2 = snapRect2.rect;\r\n var rect1Start = rect1[mainNames.start];\r\n var rect1End = rect1[mainNames.end];\r\n var rect2Start = rect2[mainNames.start];\r\n var rect2End = rect2[mainNames.end];\r\n var snapThreshold = snapThresholdMap[mainNames.start];\r\n var gap = 0;\r\n var pos = 0;\r\n var isStart = false;\r\n var isCenter = false;\r\n var isEnd = false;\r\n if (rect1End <= targetStart && targetEnd <= rect2Start) {\r\n // (l)element1(r) : (l)target(r) : (l)element2(r)\r\n isCenter = true;\r\n gap = ((rect2Start - rect1End) - (targetEnd - targetStart)) / 2;\r\n pos = rect1End + gap + (targetEnd - targetStart) / 2;\r\n if (abs(pos - targetCenter) > snapThreshold) {\r\n return;\r\n }\r\n }\r\n else if (rect1End < rect2Start && rect2End < targetStart + snapThreshold) {\r\n // (l)element1(r) : (l)element2(r) : (l)target\r\n isStart = true;\r\n gap = rect2Start - rect1End;\r\n pos = rect2End + gap;\r\n if (abs(pos - targetStart) > snapThreshold) {\r\n return;\r\n }\r\n }\r\n else if (rect1End < rect2Start && targetEnd - snapThreshold < rect1Start) {\r\n // target(r) : (l)element1(r) : (l)element2(r)\r\n isEnd = true;\r\n gap = rect2Start - rect1End;\r\n pos = rect1Start - gap;\r\n if (abs(pos - targetEnd) > snapThreshold) {\r\n return;\r\n }\r\n }\r\n else {\r\n return;\r\n }\r\n if (!gap) {\r\n return;\r\n }\r\n if (!checkBetweenRects(targetRect, rect2, type, maxSnapElementGuidelineDistance)) {\r\n return;\r\n }\r\n if (gap > maxSnapElementGapDistance) {\r\n return;\r\n }\r\n gapGuidelines.push({\r\n type: type,\r\n pos: type === \"vertical\" ? [pos, 0] : [0, pos],\r\n element: snapRect2.element,\r\n size: 0,\r\n className: snapRect2.className,\r\n isStart: isStart,\r\n isCenter: isCenter,\r\n isEnd: isEnd,\r\n gap: gap,\r\n hide: true,\r\n gapRects: [snapRect1, snapRect2],\r\n direction: \"\",\r\n elementDirection: \"\",\r\n });\r\n });\r\n });\r\n return gapGuidelines;\r\n}\r\nfunction startGridGroupGuidelines(moveable, clientLeft, clientTop, snapOffset) {\r\n var _a, _b;\r\n var props = moveable.props;\r\n var state = moveable.state;\r\n var snapGridAll = props.snapGridAll;\r\n var _c = props.snapGridWidth, snapGridWidth = _c === void 0 ? 0 : _c, _d = props.snapGridHeight, snapGridHeight = _d === void 0 ? 0 : _d;\r\n var snapRenderInfo = state.snapRenderInfo;\r\n var hasDirection = snapRenderInfo && (((_a = snapRenderInfo.direction) === null || _a === void 0 ? void 0 : _a[0]) || ((_b = snapRenderInfo.direction) === null || _b === void 0 ? void 0 : _b[1]));\r\n var moveables = moveable.moveables;\r\n // snap group's all child to grid.\r\n if (snapGridAll\r\n && moveables\r\n && hasDirection\r\n && (snapGridWidth || snapGridHeight)) {\r\n if (state.snapThresholdInfo) {\r\n return;\r\n }\r\n state.snapThresholdInfo = {\r\n multiples: [1, 1],\r\n offset: [0, 0],\r\n };\r\n var rect_1 = moveable.getRect();\r\n var children_1 = rect_1.children;\r\n var direction = snapRenderInfo.direction;\r\n if (children_1) {\r\n var result = direction.map(function (dir, i) {\r\n var _a = i === 0 ? {\r\n snapSize: snapGridWidth,\r\n posName: \"left\",\r\n sizeName: \"width\",\r\n clientOffset: snapOffset.left - clientLeft,\r\n } : {\r\n snapSize: snapGridHeight,\r\n posName: \"top\",\r\n sizeName: \"height\",\r\n clientOffset: snapOffset.top - clientTop,\r\n }, snapSize = _a.snapSize, posName = _a.posName, sizeName = _a.sizeName, clientOffset = _a.clientOffset;\r\n if (!snapSize) {\r\n return {\r\n dir: dir,\r\n multiple: 1,\r\n snapSize: snapSize,\r\n snapOffset: 0,\r\n };\r\n }\r\n var rectSize = rect_1[sizeName];\r\n var rectPos = rect_1[posName];\r\n // 사이즈보다 만약 작다면 어떻게 해야되죠?\r\n var childSizes = flat$1(children_1.map(function (child) {\r\n return [\r\n (child[posName] - rectPos),\r\n (child[sizeName]),\r\n (rectSize - child[sizeName] - child[posName] + rectPos),\r\n ];\r\n })).filter(function (v) { return v; }).sort(function (a, b) {\r\n return a - b;\r\n });\r\n var firstChildSize = childSizes[0];\r\n var childSnapSizes = childSizes.map(function (size) { return throttle(size / firstChildSize, 0.1) * snapSize; });\r\n var n = 1;\r\n var rectRatio = throttle(rectSize / firstChildSize, 0.1);\r\n for (n = 1; n <= 10; ++n) {\r\n if (childSnapSizes.every(function (childSize) {\r\n return childSize * n % 1 === 0;\r\n })) {\r\n break;\r\n }\r\n }\r\n // dir 1 (fixed -1)\r\n // dir 0 (fixed 0)\r\n // dir -1 (fixed 1)\r\n var ratio = (-dir + 1) / 2;\r\n var offsetPos = dot(rectPos - clientOffset, rectPos - clientOffset + rectSize, ratio, 1 - ratio);\r\n return {\r\n multiple: rectRatio * n,\r\n dir: dir,\r\n snapSize: snapSize,\r\n snapOffset: Math.round(offsetPos / snapSize),\r\n };\r\n });\r\n var multiples = result.map(function (r) { return r.multiple || 1; });\r\n state.snapThresholdInfo.multiples = multiples;\r\n state.snapThresholdInfo.offset = result.map(function (r) { return r.snapOffset; });\r\n result.forEach(function (r, i) {\r\n if (r.snapSize) ;\r\n });\r\n }\r\n }\r\n else {\r\n state.snapThresholdInfo = null;\r\n }\r\n}\r\nfunction getGridGuidelines(moveable, containerWidth, containerHeight, clientLeft, clientTop, snapOffset, isDisplayGridGuidelines) {\r\n if (clientLeft === void 0) { clientLeft = 0; }\r\n if (clientTop === void 0) { clientTop = 0; }\r\n var props = moveable.props;\r\n var state = moveable.state;\r\n var _a = props.snapGridWidth, snapGridWidth = _a === void 0 ? 0 : _a, _b = props.snapGridHeight, snapGridHeight = _b === void 0 ? 0 : _b;\r\n var guidelines = [];\r\n var snapOffsetLeft = snapOffset.left, snapOffsetTop = snapOffset.top;\r\n var startOffset = [0, 0];\r\n startGridGroupGuidelines(moveable, clientLeft, clientTop, snapOffset);\r\n var snapThresholdInfo = state.snapThresholdInfo;\r\n var defaultSnapGridWidth = snapGridWidth;\r\n var defaultSnapGridHeight = snapGridHeight;\r\n if (snapThresholdInfo) {\r\n snapGridWidth *= snapThresholdInfo.multiples[0] || 1;\r\n snapGridHeight *= snapThresholdInfo.multiples[1] || 1;\r\n startOffset = snapThresholdInfo.offset;\r\n }\r\n if (snapGridHeight) {\r\n var pushGuideline = function (pos) {\r\n guidelines.push({\r\n type: \"horizontal\",\r\n pos: [\r\n snapOffsetLeft,\r\n throttle(startOffset[1] * defaultSnapGridHeight + pos - clientTop + snapOffsetTop, 0.1),\r\n ],\r\n className: prefix(\"grid-guideline\"),\r\n size: containerWidth,\r\n hide: !isDisplayGridGuidelines,\r\n direction: \"\",\r\n grid: true,\r\n });\r\n };\r\n for (var pos = 0; pos <= containerHeight * 2; pos += snapGridHeight) {\r\n pushGuideline(pos);\r\n }\r\n for (var pos = -snapGridHeight; pos >= -containerHeight; pos -= snapGridHeight) {\r\n pushGuideline(pos);\r\n }\r\n }\r\n if (snapGridWidth) {\r\n var pushGuideline = function (pos) {\r\n guidelines.push({\r\n type: \"vertical\",\r\n pos: [\r\n throttle(startOffset[0] * defaultSnapGridWidth + pos - clientLeft + snapOffsetLeft, 0.1),\r\n snapOffsetTop,\r\n ],\r\n className: prefix(\"grid-guideline\"),\r\n size: containerHeight,\r\n hide: !isDisplayGridGuidelines,\r\n direction: \"\",\r\n grid: true,\r\n });\r\n };\r\n for (var pos = 0; pos <= containerWidth * 2; pos += snapGridWidth) {\r\n pushGuideline(pos);\r\n }\r\n for (var pos = -snapGridWidth; pos >= -containerWidth; pos -= snapGridWidth) {\r\n pushGuideline(pos);\r\n }\r\n }\r\n return guidelines;\r\n}\r\nfunction checkBetweenRects(rect1, rect2, type, distance) {\r\n if (type === \"horizontal\") {\r\n return abs(rect1.right - rect2.left) <= distance\r\n || abs(rect1.left - rect2.right) <= distance\r\n || rect1.left <= rect2.right && rect2.left <= rect1.right;\r\n }\r\n else if (type === \"vertical\") {\r\n return abs(rect1.bottom - rect2.top) <= distance\r\n || abs(rect1.top - rect2.bottom) <= distance\r\n || rect1.top <= rect2.bottom && rect2.top <= rect1.bottom;\r\n }\r\n return true;\r\n}\r\nfunction getElementGuidelines(moveable) {\r\n var state = moveable.state;\r\n var _a = moveable.props.elementGuidelines, elementGuidelines = _a === void 0 ? [] : _a;\r\n if (!elementGuidelines.length) {\r\n state.elementRects = [];\r\n return [];\r\n }\r\n var prevValues = (state.elementRects || []).filter(function (snapRect) { return !snapRect.refresh; });\r\n var nextElementGuidelines = elementGuidelines.map(function (el) {\r\n if (isObject(el) && \"element\" in el) {\r\n return __assign(__assign({}, el), { element: getRefTarget(el.element, true) });\r\n }\r\n return {\r\n element: getRefTarget(el, true),\r\n };\r\n }).filter(function (value) {\r\n return value.element;\r\n });\r\n var _b = diff(prevValues.map(function (v) { return v.element; }), nextElementGuidelines.map(function (v) { return v.element; })), maintained = _b.maintained, added = _b.added;\r\n var nextValues = [];\r\n maintained.forEach(function (_a) {\r\n var _b = __read(_a, 2), prevIndex = _b[0], nextIndex = _b[1];\r\n nextValues[nextIndex] = prevValues[prevIndex];\r\n });\r\n getSnapElementRects(moveable, added.map(function (index) { return nextElementGuidelines[index]; })).map(function (rect, i) {\r\n nextValues[added[i]] = rect;\r\n });\r\n state.elementRects = nextValues;\r\n var elementSnapDirections = getSnapDirections(moveable.props.elementSnapDirections);\r\n var nextGuidelines = [];\r\n nextValues.forEach(function (snapRect) {\r\n var element = snapRect.element, _a = snapRect.top, topValue = _a === void 0 ? elementSnapDirections.top : _a, _b = snapRect.left, leftValue = _b === void 0 ? elementSnapDirections.left : _b, _c = snapRect.right, rightValue = _c === void 0 ? elementSnapDirections.right : _c, _d = snapRect.bottom, bottomValue = _d === void 0 ? elementSnapDirections.bottom : _d, _e = snapRect.center, centerValue = _e === void 0 ? elementSnapDirections.center : _e, _f = snapRect.middle, middleValue = _f === void 0 ? elementSnapDirections.middle : _f, className = snapRect.className, rect = snapRect.rect;\r\n var _g = splitSnapDirectionPoses({\r\n top: topValue,\r\n right: rightValue,\r\n left: leftValue,\r\n bottom: bottomValue,\r\n center: centerValue,\r\n middle: middleValue,\r\n }, rect), horizontal = _g.horizontal, vertical = _g.vertical, horizontalNames = _g.horizontalNames, verticalNames = _g.verticalNames;\r\n var rectTop = rect.top;\r\n var rectLeft = rect.left;\r\n var width = rect.right - rectLeft;\r\n var height = rect.bottom - rectTop;\r\n var sizes = [width, height];\r\n vertical.forEach(function (pos, i) {\r\n nextGuidelines.push({\r\n type: \"vertical\",\r\n element: element,\r\n pos: [\r\n throttle(pos, 0.1),\r\n rectTop,\r\n ], size: height,\r\n sizes: sizes,\r\n className: className,\r\n elementRect: snapRect,\r\n elementDirection: SNAP_SKIP_NAMES_MAP[verticalNames[i]] || verticalNames[i],\r\n direction: \"\",\r\n });\r\n });\r\n horizontal.forEach(function (pos, i) {\r\n nextGuidelines.push({\r\n type: \"horizontal\",\r\n element: element,\r\n pos: [\r\n rectLeft,\r\n throttle(pos, 0.1),\r\n ],\r\n size: width,\r\n sizes: sizes,\r\n className: className,\r\n elementRect: snapRect,\r\n elementDirection: SNAP_SKIP_NAMES_MAP[horizontalNames[i]] || horizontalNames[i],\r\n direction: \"\",\r\n });\r\n });\r\n });\r\n return nextGuidelines;\r\n}\r\nfunction getObjectGuidelines(guidelines, containerSize) {\r\n return guidelines ? guidelines.map(function (info) {\r\n var posGuideline = isObject(info) ? info : { pos: info };\r\n var pos = posGuideline.pos;\r\n if (isNumber(pos)) {\r\n return posGuideline;\r\n }\r\n else {\r\n return __assign(__assign({}, posGuideline), { pos: convertUnitSize(pos, containerSize) });\r\n }\r\n }) : [];\r\n}\r\nfunction getDefaultGuidelines(horizontalGuidelines, verticalGuidelines, width, height, clientLeft, clientTop, snapOffset) {\r\n if (clientLeft === void 0) { clientLeft = 0; }\r\n if (clientTop === void 0) { clientTop = 0; }\r\n if (snapOffset === void 0) { snapOffset = { left: 0, top: 0, right: 0, bottom: 0 }; }\r\n var guidelines = [];\r\n var snapOffsetLeft = snapOffset.left, snapOffsetTop = snapOffset.top, snapOffsetBottom = snapOffset.bottom, snapOffsetRight = snapOffset.right;\r\n var snapWidth = width + snapOffsetRight - snapOffsetLeft;\r\n var snapHeight = height + snapOffsetBottom - snapOffsetTop;\r\n getObjectGuidelines(horizontalGuidelines, snapHeight).forEach(function (posInfo) {\r\n guidelines.push({\r\n type: \"horizontal\",\r\n pos: [\r\n snapOffsetLeft,\r\n throttle(posInfo.pos - clientTop + snapOffsetTop, 0.1),\r\n ],\r\n size: snapWidth,\r\n className: posInfo.className,\r\n direction: \"\",\r\n });\r\n });\r\n getObjectGuidelines(verticalGuidelines, snapWidth).forEach(function (posInfo) {\r\n guidelines.push({\r\n type: \"vertical\",\r\n pos: [\r\n throttle(posInfo.pos - clientLeft + snapOffsetLeft, 0.1),\r\n snapOffsetTop,\r\n ],\r\n size: snapHeight,\r\n className: posInfo.className,\r\n direction: \"\",\r\n });\r\n });\r\n return guidelines;\r\n}\r\nfunction getSnapElementRects(moveable, values) {\r\n if (!values.length) {\r\n return [];\r\n }\r\n var groupable = moveable.props.groupable;\r\n var state = moveable.state;\r\n var containerClientRect = state.containerClientRect, \r\n // targetClientRect: {\r\n // top: clientTop,\r\n // left: clientLeft,\r\n // },\r\n rootMatrix = state.rootMatrix, is3d = state.is3d, offsetDelta = state.offsetDelta;\r\n var n = is3d ? 4 : 3;\r\n var _a = __read(calculateContainerPos(rootMatrix, containerClientRect, n), 2), containerLeft = _a[0], containerTop = _a[1];\r\n // const poses = getAbsolutePosesByState(state);\r\n // const {\r\n // minX: targetLeft,\r\n // minY: targetTop,\r\n // } = getMinMaxs(poses);\r\n // const [distLeft, distTop] = minus([targetLeft, targetTop], calculateInversePosition(rootMatrix, [\r\n // clientLeft - containerLeft,\r\n // clientTop - containerTop,\r\n // ], n)).map(pos => roundSign(pos));\r\n var offsetLeft = groupable ? 0 : offsetDelta[0];\r\n var offsetTop = groupable ? 0 : offsetDelta[1];\r\n return values.map(function (value) {\r\n var rect = value.element.getBoundingClientRect();\r\n var left = rect.left - containerLeft - offsetLeft;\r\n var top = rect.top - containerTop - offsetTop;\r\n var bottom = top + rect.height;\r\n var right = left + rect.width;\r\n var _a = __read(calculateInversePosition(rootMatrix, [left, top], n), 2), elementLeft = _a[0], elementTop = _a[1];\r\n var _b = __read(calculateInversePosition(rootMatrix, [right, bottom], n), 2), elementRight = _b[0], elementBottom = _b[1];\r\n return __assign(__assign({}, value), { rect: {\r\n left: elementLeft,\r\n right: elementRight,\r\n top: elementTop,\r\n bottom: elementBottom,\r\n center: (elementLeft + elementRight) / 2,\r\n middle: (elementTop + elementBottom) / 2,\r\n } });\r\n });\r\n}\n\nfunction checkSnapInfo(moveable) {\r\n var state = moveable.state;\r\n var container = state.container;\r\n var snapContainer = moveable.props.snapContainer || container;\r\n if (state.snapContainer === snapContainer && state.guidelines && state.guidelines.length) {\r\n return false;\r\n }\r\n var containerClientRect = state.containerClientRect;\r\n var snapOffset = {\r\n left: 0,\r\n top: 0,\r\n bottom: 0,\r\n right: 0,\r\n };\r\n if (container !== snapContainer) {\r\n var snapContainerTarget = getRefTarget(snapContainer, true);\r\n if (snapContainerTarget) {\r\n var snapContainerRect = getClientRect(snapContainerTarget);\r\n var offset1 = getDragDistByState(state, [\r\n snapContainerRect.left - containerClientRect.left,\r\n snapContainerRect.top - containerClientRect.top,\r\n ]);\r\n var offset2 = getDragDistByState(state, [\r\n snapContainerRect.right - containerClientRect.right,\r\n snapContainerRect.bottom - containerClientRect.bottom,\r\n ]);\r\n snapOffset.left = throttle(offset1[0], 0.00001);\r\n snapOffset.top = throttle(offset1[1], 0.00001);\r\n snapOffset.right = throttle(offset2[0], 0.00001);\r\n snapOffset.bottom = throttle(offset2[1], 0.00001);\r\n }\r\n }\r\n state.snapContainer = snapContainer;\r\n state.snapOffset = snapOffset;\r\n state.guidelines = getTotalGuidelines(moveable);\r\n state.enableSnap = true;\r\n return true;\r\n}\r\nfunction getNextFixedPoses(matrix, width, height, fixedDirection, fixedPos, is3d) {\r\n var nextPoses = calculatePoses(matrix, width, height, is3d ? 4 : 3);\r\n var nextFixedPos = getPosByDirection(nextPoses, fixedDirection);\r\n return getAbsolutePoses(nextPoses, minus(fixedPos, nextFixedPos));\r\n}\r\nfunction normalized(value) {\r\n return value ? value / abs(value) : 0;\r\n}\r\nfunction getSizeOffsetInfo(moveable, poses, direction, keepRatio, isRequest, datas) {\r\n var fixedDirection = datas.fixedDirection;\r\n var directions = getCheckSnapDirections(direction, fixedDirection, keepRatio);\r\n var innerBoundLineInfos = getCheckInnerBoundLineInfos(moveable, poses, direction, keepRatio);\r\n var offsets = __spreadArray(__spreadArray([], __read(getSnapBoundInfo(moveable, poses, directions, keepRatio, isRequest, datas)), false), __read(getInnerBoundInfo(moveable, innerBoundLineInfos, datas)), false);\r\n var widthOffsetInfo = getNearOffsetInfo(offsets, 0);\r\n var heightOffsetInfo = getNearOffsetInfo(offsets, 1);\r\n return {\r\n width: {\r\n isBound: widthOffsetInfo.isBound,\r\n offset: widthOffsetInfo.offset[0],\r\n },\r\n height: {\r\n isBound: heightOffsetInfo.isBound,\r\n offset: heightOffsetInfo.offset[1],\r\n },\r\n };\r\n}\r\nfunction recheckSizeByTwoDirection(moveable, poses, width, height, maxWidth, maxHeight, direction, isRequest, datas) {\r\n var snapPos = getPosByDirection(poses, direction);\r\n var _a = checkMoveableSnapBounds(moveable, isRequest, {\r\n vertical: [snapPos[0]],\r\n horizontal: [snapPos[1]],\r\n }), horizontalOffset = _a.horizontal.offset, verticalOffset = _a.vertical.offset;\r\n if (throttle(verticalOffset, FLOAT_POINT_NUM) || throttle(horizontalOffset, FLOAT_POINT_NUM)) {\r\n var _b = __read(getDragDist({\r\n datas: datas,\r\n distX: -verticalOffset,\r\n distY: -horizontalOffset,\r\n }), 2), nextWidthOffset = _b[0], nextHeightOffset = _b[1];\r\n var nextWidth = Math.min(maxWidth || Infinity, width + direction[0] * nextWidthOffset);\r\n var nextHeight = Math.min(maxHeight || Infinity, height + direction[1] * nextHeightOffset);\r\n return [nextWidth - width, nextHeight - height];\r\n }\r\n return [0, 0];\r\n}\r\nfunction checkSizeDist(moveable, getNextPoses, width, height, direction, fixedPosition, isRequest, datas) {\r\n var poses = getAbsolutePosesByState(moveable.state);\r\n var keepRatio = moveable.props.keepRatio;\r\n var widthOffset = 0;\r\n var heightOffset = 0;\r\n for (var i = 0; i < 2; ++i) {\r\n var nextPoses = getNextPoses(widthOffset, heightOffset);\r\n var _a = getSizeOffsetInfo(moveable, nextPoses, direction, keepRatio, isRequest, datas), widthOffsetInfo = _a.width, heightOffsetInfo = _a.height;\r\n var isWidthBound = widthOffsetInfo.isBound;\r\n var isHeightBound = heightOffsetInfo.isBound;\r\n var nextWidthOffset = widthOffsetInfo.offset;\r\n var nextHeightOffset = heightOffsetInfo.offset;\r\n if (i === 1) {\r\n if (!isWidthBound) {\r\n nextWidthOffset = 0;\r\n }\r\n if (!isHeightBound) {\r\n nextHeightOffset = 0;\r\n }\r\n }\r\n if (i === 0 && isRequest && !isWidthBound && !isHeightBound) {\r\n return [0, 0];\r\n }\r\n if (keepRatio) {\r\n var widthDist = abs(nextWidthOffset) * (width ? 1 / width : 1);\r\n var heightDist = abs(nextHeightOffset) * (height ? 1 / height : 1);\r\n var isGetWidthOffset = isWidthBound && isHeightBound\r\n ? widthDist < heightDist\r\n : isHeightBound ||\r\n (!isWidthBound && widthDist < heightDist);\r\n if (isGetWidthOffset) {\r\n // width : height = ? : heightOffset\r\n nextWidthOffset = (width * nextHeightOffset) / height;\r\n }\r\n else {\r\n // width : height = widthOffset : ?\r\n nextHeightOffset = (height * nextWidthOffset) / width;\r\n }\r\n }\r\n widthOffset += nextWidthOffset;\r\n heightOffset += nextHeightOffset;\r\n }\r\n if (!keepRatio && direction[0] && direction[1]) {\r\n var _b = checkMaxBounds(moveable, poses, direction, fixedPosition, datas), maxWidth = _b.maxWidth, maxHeight = _b.maxHeight;\r\n var _c = __read(recheckSizeByTwoDirection(moveable, getNextPoses(widthOffset, heightOffset).map(function (pos) { return pos.map(function (p) { return throttle(p, FLOAT_POINT_NUM); }); }), width + widthOffset, height + heightOffset, maxWidth, maxHeight, direction, isRequest, datas), 2), nextWidthOffset = _c[0], nextHeightOffset = _c[1];\r\n widthOffset += nextWidthOffset;\r\n heightOffset += nextHeightOffset;\r\n }\r\n return [widthOffset, heightOffset];\r\n}\r\nfunction absDegree(deg) {\r\n if (deg < 0) {\r\n deg = deg % 360 + 360;\r\n }\r\n deg %= 360;\r\n return deg;\r\n}\r\nfunction bumpDegree(baseDeg, snapDeg) {\r\n // baseDeg -80\r\n // snapDeg 270\r\n // return -90\r\n snapDeg = absDegree(snapDeg);\r\n var count = Math.floor(baseDeg / 360);\r\n var deg1 = count * 360 + 360 - snapDeg;\r\n var deg2 = count * 360 + snapDeg;\r\n return abs(baseDeg - deg1) < abs(baseDeg - deg2) ? deg1 : deg2;\r\n}\r\nfunction getMinDegreeDistance(deg1, deg2) {\r\n deg1 = absDegree(deg1);\r\n deg2 = absDegree(deg2);\r\n var deg3 = absDegree(deg1 - deg2);\r\n return Math.min(deg3, 360 - deg3);\r\n}\r\nfunction checkSnapRotate(moveable, rect, dist, rotation) {\r\n var _a;\r\n var props = moveable.props;\r\n var snapRotationThreshold = (_a = props[NAME_snapRotationThreshold]) !== null && _a !== void 0 ? _a : 5;\r\n var snapRotationDegrees = props[NAME_snapRotationDegrees];\r\n if (hasGuidelines(moveable, \"rotatable\")) {\r\n var pos1 = rect.pos1, pos2 = rect.pos2, pos3 = rect.pos3, pos4 = rect.pos4, origin2_1 = rect.origin;\r\n var rad_1 = (dist * Math.PI) / 180;\r\n var prevPoses = [pos1, pos2, pos3, pos4].map(function (pos) { return minus(pos, origin2_1); });\r\n var nextPoses = prevPoses.map(function (pos) { return rotate(pos, rad_1); });\r\n // console.log(moveable.state.left, moveable.state.top, moveable.state.origin);\r\n // console.log(pos1, pos2, pos3, pos4, origin, rad, prevPoses, nextPoses);\r\n var result = __spreadArray(__spreadArray([], __read(checkRotateBounds(moveable, prevPoses, nextPoses, origin2_1, dist)), false), __read(checkRotateInnerBounds(moveable, prevPoses, nextPoses, origin2_1, dist)), false);\r\n result.sort(function (a, b) { return abs(a - dist) - abs(b - dist); });\r\n var isSnap = result.length > 0;\r\n if (isSnap) {\r\n return {\r\n isSnap: isSnap,\r\n dist: isSnap ? result[0] : dist,\r\n };\r\n }\r\n }\r\n if ((snapRotationDegrees === null || snapRotationDegrees === void 0 ? void 0 : snapRotationDegrees.length) && snapRotationThreshold) {\r\n var sorted = snapRotationDegrees.slice().sort(function (a, b) {\r\n return getMinDegreeDistance(a, rotation) - getMinDegreeDistance(b, rotation);\r\n });\r\n var firstDegree = sorted[0];\r\n if (getMinDegreeDistance(firstDegree, rotation) <= snapRotationThreshold) {\r\n return {\r\n isSnap: true,\r\n dist: dist + bumpDegree(rotation, firstDegree) - rotation,\r\n };\r\n }\r\n }\r\n return {\r\n isSnap: false,\r\n dist: dist,\r\n };\r\n}\r\nfunction checkSnapResize(moveable, width, height, direction, fixedPosition, isRequest, datas) {\r\n if (!hasGuidelines(moveable, \"resizable\")) {\r\n return [0, 0];\r\n }\r\n var fixedDirection = datas.fixedDirection, nextAllMatrix = datas.nextAllMatrix;\r\n var _a = moveable.state, allMatrix = _a.allMatrix, is3d = _a.is3d;\r\n return checkSizeDist(moveable, function (widthOffset, heightOffset) {\r\n return getNextFixedPoses(nextAllMatrix || allMatrix, width + widthOffset, height + heightOffset, fixedDirection, fixedPosition, is3d);\r\n }, width, height, direction, fixedPosition, isRequest, datas);\r\n}\r\nfunction checkSnapScale(moveable, scale, direction, isRequest, datas) {\r\n if (!hasGuidelines(moveable, \"scalable\")) {\r\n return [0, 0];\r\n }\r\n var startOffsetWidth = datas.startOffsetWidth, startOffsetHeight = datas.startOffsetHeight, fixedPosition = datas.fixedPosition, fixedDirection = datas.fixedDirection, is3d = datas.is3d;\r\n var sizeDist = checkSizeDist(moveable, function (widthOffset, heightOffset) {\r\n return getNextFixedPoses(scaleMatrix(datas, plus(scale, [widthOffset / startOffsetWidth, heightOffset / startOffsetHeight])), startOffsetWidth, startOffsetHeight, fixedDirection, fixedPosition, is3d);\r\n }, startOffsetWidth, startOffsetHeight, direction, fixedPosition, isRequest, datas);\r\n return [sizeDist[0] / startOffsetWidth, sizeDist[1] / startOffsetHeight];\r\n}\r\nfunction startCheckSnapDrag(moveable, datas) {\r\n datas.absolutePoses = getAbsolutePosesByState(moveable.state);\r\n}\r\nfunction getSnapGuidelines(posInfos) {\r\n var guidelines = [];\r\n posInfos.forEach(function (posInfo) {\r\n posInfo.guidelineInfos.forEach(function (_a) {\r\n var guideline = _a.guideline;\r\n if (find(guidelines, function (info) { return info.guideline === guideline; })) {\r\n return;\r\n }\r\n guideline.direction = \"\";\r\n guidelines.push({ guideline: guideline, posInfo: posInfo });\r\n });\r\n });\r\n return guidelines.map(function (_a) {\r\n var guideline = _a.guideline, posInfo = _a.posInfo;\r\n return __assign(__assign({}, guideline), { direction: posInfo.direction });\r\n });\r\n}\r\nfunction addBoundGuidelines(moveable, verticalPoses, horizontalPoses, verticalSnapPoses, horizontalSnapPoses, externalBounds) {\r\n var _a = checkBoundPoses(getBounds(moveable, externalBounds), verticalPoses, horizontalPoses), verticalBoundInfos = _a.vertical, horizontalBoundInfos = _a.horizontal;\r\n var boundMap = getInitialBounds();\r\n verticalBoundInfos.forEach(function (info) {\r\n if (info.isBound) {\r\n if (info.direction === \"start\") {\r\n boundMap.left = true;\r\n }\r\n if (info.direction === \"end\") {\r\n boundMap.right = true;\r\n }\r\n verticalSnapPoses.push({\r\n type: \"bounds\",\r\n pos: info.pos,\r\n });\r\n }\r\n });\r\n horizontalBoundInfos.forEach(function (info) {\r\n if (info.isBound) {\r\n if (info.direction === \"start\") {\r\n boundMap.top = true;\r\n }\r\n if (info.direction === \"end\") {\r\n boundMap.bottom = true;\r\n }\r\n horizontalSnapPoses.push({\r\n type: \"bounds\",\r\n pos: info.pos,\r\n });\r\n }\r\n });\r\n var _b = checkInnerBoundPoses(moveable), innerBoundMap = _b.boundMap, verticalInnerBoundPoses = _b.vertical, horizontalInnerBoundPoses = _b.horizontal;\r\n verticalInnerBoundPoses.forEach(function (innerPos) {\r\n if (findIndex(verticalSnapPoses, function (_a) {\r\n var type = _a.type, pos = _a.pos;\r\n return type === \"bounds\" && pos === innerPos;\r\n }) >= 0) {\r\n return;\r\n }\r\n verticalSnapPoses.push({\r\n type: \"bounds\",\r\n pos: innerPos,\r\n });\r\n });\r\n horizontalInnerBoundPoses.forEach(function (innerPos) {\r\n if (findIndex(horizontalSnapPoses, function (_a) {\r\n var type = _a.type, pos = _a.pos;\r\n return type === \"bounds\" && pos === innerPos;\r\n }) >= 0) {\r\n return;\r\n }\r\n horizontalSnapPoses.push({\r\n type: \"bounds\",\r\n pos: innerPos,\r\n });\r\n });\r\n return {\r\n boundMap: boundMap,\r\n innerBoundMap: innerBoundMap,\r\n };\r\n}\r\nvar directionCondition$1 = getDirectionCondition(\"\", [\"resizable\", \"scalable\"]);\r\n/**\r\n * @namespace Moveable.Snappable\r\n * @description Whether or not target can be snapped to the guideline. (default: false)\r\n * @sort 2\r\n */\r\nvar Snappable = {\r\n name: \"snappable\",\r\n dragRelation: \"strong\",\r\n props: [\r\n \"snappable\",\r\n \"snapContainer\",\r\n \"snapDirections\",\r\n \"elementSnapDirections\",\r\n \"snapGap\",\r\n \"snapGridWidth\",\r\n \"snapGridHeight\",\r\n \"isDisplaySnapDigit\",\r\n \"isDisplayInnerSnapDigit\",\r\n \"isDisplayGridGuidelines\",\r\n \"snapDigit\",\r\n \"snapThreshold\",\r\n \"snapRenderThreshold\",\r\n \"snapGridAll\",\r\n NAME_snapRotationThreshold,\r\n NAME_snapRotationDegrees,\r\n NAME_snapHorizontalThreshold,\r\n NAME_snapVerticalThreshold,\r\n \"horizontalGuidelines\",\r\n \"verticalGuidelines\",\r\n \"elementGuidelines\",\r\n \"bounds\",\r\n \"innerBounds\",\r\n \"snapDistFormat\",\r\n \"maxSnapElementGuidelineDistance\",\r\n \"maxSnapElementGapDistance\",\r\n ],\r\n events: [\"snap\", \"bound\"],\r\n css: [\r\n \":host {\\n--bounds-color: #d66;\\n}\\n.guideline {\\npointer-events: none;\\nz-index: 2;\\n}\\n.guideline.bounds {\\nbackground: #d66;\\nbackground: var(--bounds-color);\\n}\\n.guideline-group {\\nposition: absolute;\\ntop: 0;\\nleft: 0;\\n}\\n.guideline-group .size-value {\\nposition: absolute;\\ncolor: #f55;\\nfont-size: 12px;\\nfont-size: calc(12px * var(--zoom));\\nfont-weight: bold;\\n}\\n.guideline-group.horizontal .size-value {\\ntransform-origin: 50% 100%;\\ntransform: translateX(-50%);\\nleft: 50%;\\nbottom: 5px;\\nbottom: calc(2px + 3px * var(--zoom));\\n}\\n.guideline-group.vertical .size-value {\\ntransform-origin: 0% 50%;\\ntop: 50%;\\ntransform: translateY(-50%);\\nleft: 5px;\\nleft: calc(2px + 3px * var(--zoom));\\n}\\n.guideline.gap {\\nbackground: #f55;\\n}\\n.size-value.gap {\\ncolor: #f55;\\n}\\n\",\r\n ],\r\n render: function (moveable, React) {\r\n var state = moveable.state;\r\n var targetTop = state.top, targetLeft = state.left, pos1 = state.pos1, pos2 = state.pos2, pos3 = state.pos3, pos4 = state.pos4, snapRenderInfo = state.snapRenderInfo;\r\n var _a = moveable.props.snapRenderThreshold, snapRenderThreshold = _a === void 0 ? 1 : _a;\r\n if (!snapRenderInfo || !snapRenderInfo.render || !hasGuidelines(moveable, \"\")) {\r\n // reset store\r\n watchValue(moveable, \"boundMap\", getInitialBounds(), function (v) { return JSON.stringify(v); });\r\n watchValue(moveable, \"innerBoundMap\", getInitialBounds(), function (v) { return JSON.stringify(v); });\r\n return [];\r\n }\r\n state.guidelines = getTotalGuidelines(moveable);\r\n var minLeft = Math.min(pos1[0], pos2[0], pos3[0], pos4[0]);\r\n var minTop = Math.min(pos1[1], pos2[1], pos3[1], pos4[1]);\r\n var externalPoses = snapRenderInfo.externalPoses || [];\r\n var poses = getAbsolutePosesByState(moveable.state);\r\n var verticalSnapPoses = [];\r\n var horizontalSnapPoses = [];\r\n var verticalGuidelines = [];\r\n var horizontalGuidelines = [];\r\n var snapInfos = [];\r\n var _b = getRect(poses), width = _b.width, height = _b.height, top = _b.top, left = _b.left, bottom = _b.bottom, right = _b.right;\r\n var targetRect = { left: left, right: right, top: top, bottom: bottom, center: (left + right) / 2, middle: (top + bottom) / 2 };\r\n var hasExternalPoses = externalPoses.length > 0;\r\n var externalRect = hasExternalPoses\r\n ? getRect(externalPoses)\r\n : {};\r\n if (!snapRenderInfo.request) {\r\n if (snapRenderInfo.direction) {\r\n snapInfos.push(getSnapInfosByDirection(moveable, poses, snapRenderInfo.direction, snapRenderThreshold, snapRenderThreshold));\r\n }\r\n if (snapRenderInfo.snap) {\r\n var rect = getRect(poses);\r\n if (snapRenderInfo.center) {\r\n rect.middle = (rect.top + rect.bottom) / 2;\r\n rect.center = (rect.left + rect.right) / 2;\r\n }\r\n snapInfos.push(checkSnaps(moveable, rect, snapRenderThreshold, snapRenderThreshold));\r\n }\r\n if (hasExternalPoses) {\r\n if (snapRenderInfo.center) {\r\n externalRect.middle =\r\n (externalRect.top + externalRect.bottom) / 2;\r\n externalRect.center =\r\n (externalRect.left + externalRect.right) / 2;\r\n }\r\n snapInfos.push(checkSnaps(moveable, externalRect, snapRenderThreshold, snapRenderThreshold));\r\n }\r\n snapInfos.forEach(function (snapInfo) {\r\n var verticalPosInfos = snapInfo.vertical.posInfos, horizontalPosInfos = snapInfo.horizontal.posInfos;\r\n verticalSnapPoses.push.apply(verticalSnapPoses, __spreadArray([], __read(verticalPosInfos.filter(function (_a) {\r\n var guidelineInfos = _a.guidelineInfos;\r\n return guidelineInfos.some(function (_a) {\r\n var guideline = _a.guideline;\r\n return !guideline.hide;\r\n });\r\n }).map(function (posInfo) { return ({\r\n type: \"snap\",\r\n pos: posInfo.pos,\r\n }); })), false));\r\n horizontalSnapPoses.push.apply(horizontalSnapPoses, __spreadArray([], __read(horizontalPosInfos.filter(function (_a) {\r\n var guidelineInfos = _a.guidelineInfos;\r\n return guidelineInfos.some(function (_a) {\r\n var guideline = _a.guideline;\r\n return !guideline.hide;\r\n });\r\n }).map(function (posInfo) { return ({\r\n type: \"snap\",\r\n pos: posInfo.pos,\r\n }); })), false));\r\n verticalGuidelines.push.apply(verticalGuidelines, __spreadArray([], __read(getSnapGuidelines(verticalPosInfos)), false));\r\n horizontalGuidelines.push.apply(horizontalGuidelines, __spreadArray([], __read(getSnapGuidelines(horizontalPosInfos)), false));\r\n });\r\n }\r\n var _c = addBoundGuidelines(moveable, [left, right], [top, bottom], verticalSnapPoses, horizontalSnapPoses), boundMap = _c.boundMap, innerBoundMap = _c.innerBoundMap;\r\n if (hasExternalPoses) {\r\n addBoundGuidelines(moveable, [externalRect.left, externalRect.right], [externalRect.top, externalRect.bottom], verticalSnapPoses, horizontalSnapPoses, snapRenderInfo.externalBounds);\r\n }\r\n var allGuidelines = __spreadArray(__spreadArray([], __read(verticalGuidelines), false), __read(horizontalGuidelines), false);\r\n var elementGuidelines = allGuidelines.filter(function (guideline) { return guideline.element && !guideline.gapRects; });\r\n var gapGuidelines = allGuidelines.filter(function (guideline) { return guideline.gapRects; }).sort(function (a, b) {\r\n return a.gap - b.gap;\r\n });\r\n triggerEvent(moveable, \"onSnap\", {\r\n guidelines: allGuidelines.filter(function (_a) {\r\n var element = _a.element;\r\n return !element;\r\n }),\r\n elements: elementGuidelines,\r\n gaps: gapGuidelines,\r\n }, true);\r\n var nextBoundMap = watchValue(moveable, \"boundMap\", boundMap, function (v) { return JSON.stringify(v); }, getInitialBounds());\r\n var nextInnerBoundMap = watchValue(moveable, \"innerBoundMap\", innerBoundMap, function (v) { return JSON.stringify(v); }, getInitialBounds());\r\n if (boundMap === nextBoundMap || innerBoundMap === nextInnerBoundMap) {\r\n triggerEvent(moveable, \"onBound\", {\r\n bounds: boundMap,\r\n innerBounds: innerBoundMap,\r\n }, true);\r\n }\r\n // verticalSnapPoses.\r\n return __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(renderDashedGuidelines(moveable, elementGuidelines, [minLeft, minTop], targetRect, React)), false), __read(renderGapGuidelines(moveable, gapGuidelines, [minLeft, minTop], targetRect, React)), false), __read(renderGuidelines(moveable, \"horizontal\", horizontalGuidelines, [targetLeft, targetTop], targetRect, React)), false), __read(renderGuidelines(moveable, \"vertical\", verticalGuidelines, [targetLeft, targetTop], targetRect, React)), false), __read(renderSnapPoses(moveable, \"horizontal\", horizontalSnapPoses, minLeft, targetTop, width, 0, React)), false), __read(renderSnapPoses(moveable, \"vertical\", verticalSnapPoses, minTop, targetLeft, height, 1, React)), false);\r\n },\r\n dragStart: function (moveable, e) {\r\n moveable.state.snapRenderInfo = {\r\n request: e.isRequest,\r\n snap: true,\r\n center: true,\r\n };\r\n checkSnapInfo(moveable);\r\n },\r\n drag: function (moveable) {\r\n var state = moveable.state;\r\n if (!checkSnapInfo(moveable)) {\r\n state.guidelines = getTotalGuidelines(moveable);\r\n }\r\n if (state.snapRenderInfo) {\r\n state.snapRenderInfo.render = true;\r\n }\r\n },\r\n pinchStart: function (moveable) {\r\n this.unset(moveable);\r\n },\r\n dragEnd: function (moveable) {\r\n this.unset(moveable);\r\n },\r\n dragControlCondition: function (moveable, e) {\r\n if (directionCondition$1(moveable, e) || dragControlCondition(moveable, e)) {\r\n return true;\r\n }\r\n if (!e.isRequest && e.inputEvent) {\r\n return hasClass(e.inputEvent.target, prefix(\"snap-control\"));\r\n }\r\n },\r\n dragControlStart: function (moveable) {\r\n moveable.state.snapRenderInfo = null;\r\n checkSnapInfo(moveable);\r\n },\r\n dragControl: function (moveable) {\r\n this.drag(moveable);\r\n },\r\n dragControlEnd: function (moveable) {\r\n this.unset(moveable);\r\n },\r\n dragGroupStart: function (moveable, e) {\r\n this.dragStart(moveable, e);\r\n },\r\n dragGroup: function (moveable) {\r\n this.drag(moveable);\r\n },\r\n dragGroupEnd: function (moveable) {\r\n this.unset(moveable);\r\n },\r\n dragGroupControlStart: function (moveable) {\r\n moveable.state.snapRenderInfo = null;\r\n checkSnapInfo(moveable);\r\n },\r\n dragGroupControl: function (moveable) {\r\n this.drag(moveable);\r\n },\r\n dragGroupControlEnd: function (moveable) {\r\n this.unset(moveable);\r\n },\r\n unset: function (moveable) {\r\n var state = moveable.state;\r\n state.enableSnap = false;\r\n state.guidelines = [];\r\n state.snapRenderInfo = null;\r\n state.elementRects = [];\r\n },\r\n};\r\n/**\r\n * Whether or not target can be snapped to the guideline. (default: false)\r\n * @name Moveable.Snappable#snappable\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.snappable = true;\r\n */\r\n/**\r\n * A snap container that is the basis for snap, bounds, and innerBounds. (default: null = container)\r\n * @name Moveable.Snappable#snapContainer\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.querySelector(\".container\"));\r\n *\r\n * moveable.snapContainer = document.body;\r\n */\r\n/**\r\n * You can specify the directions to snap to the target. (default: { left: true, top: true, right: true, bottom: true })\r\n * @name Moveable.Snappable#snapDirections\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * snappable: true,\r\n * snapDirections: true,\r\n * });\r\n * // snap center\r\n * moveable.snapDirections = { left: true, top: true, right: true, bottom: true, center: true, middle: true };\r\n */\r\n/**\r\n * You can specify the snap directions of elements. (default: { left: true, ftrue, right: true, bottom: true })\r\n * @name Moveable.Snappable#elementSnapDirections\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * snappable: true,\r\n * elementSnapDirections: true,\r\n * });\r\n * // snap center\r\n * moveable.elementSnapDirections = { left: true, top: true, right: true, bottom: true, center: true, middle: true };\r\n */\r\n/**\r\n * When you drag, make the gap snap in the element guidelines. (default: true)\r\n * @name Moveable.Snappable#snapGap\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * snappable: true,\r\n * snapElement: true,\r\n * snapGap: true,\r\n * });\r\n *\r\n * moveable.snapGap = false;\r\n */\r\n/**\r\n * Distance value that can snap to guidelines. (default: 5)\r\n * @name Moveable.Snappable#snapThreshold\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.snapThreshold = 5;\r\n */\r\n/**\r\n * Add guidelines in the horizontal direction. (default: [])\r\n * @name Moveable.Snappable#horizontalGuidelines\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.horizontalGuidelines = [100, 200, 500];\r\n */\r\n/**\r\n * Add guidelines in the vertical direction. (default: [])\r\n * @name Moveable.Snappable#verticalGuidelines\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.verticalGuidelines = [100, 200, 500];\r\n */\r\n/**\r\n * Add guidelines for the element. (default: [])\r\n * @name Moveable.Snappable#elementGuidelines\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.elementGuidelines = [\r\n * document.querySelector(\".element\"),\r\n * ];\r\n */\r\n/**\r\n * You can set up boundaries.\r\n * @name Moveable.Snappable#bounds\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @default null\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.bounds = { left: 0, right: 1000, top: 0, bottom: 1000};\r\n */\r\n/**\r\n * You can set up inner boundaries.\r\n * @name Moveable.Snappable#innerBounds\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @default null\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.innerBounds = { left: 500, top: 500, width: 100, height: 100};\r\n */\r\n/**\r\n * snap distance digits (default: 0)\r\n * @name Moveable.Snappable#snapDigit\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.snapDigit = 0\r\n */\r\n/**\r\n * If width size is greater than 0, you can vertical snap to the grid. (default: 0)\r\n * @name Moveable.Snappable#snapGridWidth\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.snapGridWidth = 5;\r\n */\r\n/**\r\n * If height size is greater than 0, you can horizontal snap to the grid. (default: 0)\r\n * @name Moveable.Snappable#snapGridHeight\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.snapGridHeight = 5;\r\n */\r\n/**\r\n * Whether to show snap distance (default: true)\r\n * @name Moveable.Snappable#isDisplaySnapDigit\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.isDisplaySnapDigit = true;\r\n */\r\n/**\r\n * Whether to show element inner snap distance (default: false)\r\n * @name Moveable.Snappable#isDisplayInnerSnapDigit\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.isDisplayInnerSnapDigit = true;\r\n */\r\n/**\r\n * You can set the text format of the distance shown in the guidelines. (default: self)\r\n * @name Moveable.Snappable#snapDistFormat\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Snappable.html#.SnappableOptions}\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * snappable: true,\r\n * snapDistFormat: (v, type) => v,\r\n * });\r\n * moveable.snapDistFormat = (v, type) => `${v}px`;\r\n */\r\n/**\r\n * When you drag or dragControl, the `snap` event is called.\r\n * @memberof Moveable.Snappable\r\n * @event snap\r\n * @param {Moveable.Snappable.OnSnap} - Parameters for the `snap` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * snappable: true\r\n * });\r\n * moveable.on(\"snap\", e => {\r\n * console.log(\"onSnap\", e);\r\n * });\r\n */\n\nfunction multiply2(pos1, pos2) {\r\n return [\r\n pos1[0] * pos2[0],\r\n pos1[1] * pos2[1],\r\n ];\r\n}\r\nfunction prefix() {\r\n var classNames = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n classNames[_i] = arguments[_i];\r\n }\r\n return prefixNames.apply(void 0, __spreadArray([PREFIX], __read(classNames), false));\r\n}\r\nfunction defaultSync(fn) {\r\n fn();\r\n}\r\nfunction getTransformMatrix(transform) {\r\n if (!transform || transform === \"none\") {\r\n return [1, 0, 0, 1, 0, 0];\r\n }\r\n if (isObject(transform)) {\r\n return transform;\r\n }\r\n return parseMat(transform);\r\n}\r\nfunction getAbsoluteMatrix(matrix, n, origin) {\r\n return multiplies(n, createOriginMatrix(origin, n), matrix, createOriginMatrix(origin.map(function (a) { return -a; }), n));\r\n}\r\nfunction measureSVGSize(el, unit, isHorizontal) {\r\n if (unit === \"%\") {\r\n var viewBox = getSVGViewBox(el.ownerSVGElement);\r\n return viewBox[isHorizontal ? \"width\" : \"height\"] / 100;\r\n }\r\n return 1;\r\n}\r\nfunction getBeforeTransformOrigin(el) {\r\n var relativeOrigin = getTransformOrigin(getComputedStyle(el, \":before\"));\r\n return relativeOrigin.map(function (o, i) {\r\n var _a = splitUnit(o), value = _a.value, unit = _a.unit;\r\n return value * measureSVGSize(el, unit, i === 0);\r\n });\r\n}\r\nfunction getTransformOriginArray(transformOrigin) {\r\n return transformOrigin ? transformOrigin.split(\" \") : [\"0\", \"0\"];\r\n}\r\nfunction getTransformOrigin(style) {\r\n return getTransformOriginArray(style.transformOrigin);\r\n}\r\nfunction getElementTransform(target) {\r\n var getStyle = getCachedStyle(target);\r\n var computedTransform = getStyle(\"transform\");\r\n if (computedTransform && computedTransform !== \"none\") {\r\n return computedTransform;\r\n }\r\n if (\"transform\" in target) {\r\n var list = target.transform;\r\n var baseVal = list.baseVal;\r\n if (!baseVal) {\r\n return \"\";\r\n }\r\n var length_1 = baseVal.length;\r\n if (!length_1) {\r\n return \"\";\r\n }\r\n var matrixes = [];\r\n var _loop_1 = function (i) {\r\n var matrix = baseVal[i].matrix;\r\n matrixes.push(\"matrix(\".concat([\"a\", \"b\", \"c\", \"d\", \"e\", \"f\"].map(function (chr) { return matrix[chr]; }).join(\", \"), \")\"));\r\n };\r\n for (var i = 0; i < length_1; ++i) {\r\n _loop_1(i);\r\n }\r\n return matrixes.join(\" \");\r\n }\r\n return \"\";\r\n}\r\nfunction getOffsetInfo(el, lastParent, isParent, checkZoom, getTargetStyle) {\r\n var _a, _b;\r\n var documentElement = getDocumentElement(el) || getDocumentBody(el);\r\n var hasSlot = false;\r\n var target;\r\n var parentSlotElement;\r\n if (!el || isParent) {\r\n target = el;\r\n }\r\n else {\r\n var assignedSlotParentElement = (_a = el === null || el === void 0 ? void 0 : el.assignedSlot) === null || _a === void 0 ? void 0 : _a.parentElement;\r\n var parentElement = el.parentElement;\r\n if (assignedSlotParentElement) {\r\n hasSlot = true;\r\n parentSlotElement = parentElement;\r\n target = assignedSlotParentElement;\r\n }\r\n else {\r\n target = parentElement;\r\n }\r\n }\r\n var isCustomElement = false;\r\n var isEnd = el === lastParent || target === lastParent;\r\n var position = \"relative\";\r\n var offsetZoom = 1;\r\n var targetZoom = parseFloat(getTargetStyle === null || getTargetStyle === void 0 ? void 0 : getTargetStyle(\"zoom\")) || 1;\r\n var targetPosition = getTargetStyle === null || getTargetStyle === void 0 ? void 0 : getTargetStyle(\"position\");\r\n while (target && target !== documentElement) {\r\n if (lastParent === target) {\r\n isEnd = true;\r\n }\r\n var getStyle = getCachedStyle(target);\r\n var tagName = target.tagName.toLowerCase();\r\n var transform = getElementTransform(target);\r\n var willChange = getStyle(\"willChange\");\r\n var zoom = parseFloat(getStyle(\"zoom\")) || 1;\r\n position = getStyle(\"position\");\r\n if (checkZoom && zoom !== 1) {\r\n offsetZoom = zoom;\r\n break;\r\n }\r\n if (\r\n // offsetParent is the parentElement if the target's zoom is not 1 and not absolute.\r\n !isParent && checkZoom && targetZoom !== 1 && targetPosition && targetPosition !== \"absolute\"\r\n || tagName === \"svg\"\r\n || tagName === \"foreignobject\"\r\n || position !== \"static\"\r\n || (transform && transform !== \"none\")\r\n || willChange === \"transform\") {\r\n break;\r\n }\r\n var slotParentNode = (_b = el === null || el === void 0 ? void 0 : el.assignedSlot) === null || _b === void 0 ? void 0 : _b.parentNode;\r\n var targetParentNode = target.parentNode;\r\n if (slotParentNode) {\r\n hasSlot = true;\r\n parentSlotElement = targetParentNode;\r\n }\r\n var parentNode = targetParentNode;\r\n if (parentNode && parentNode.nodeType === 11) {\r\n // Shadow Root\r\n target = parentNode.host;\r\n isCustomElement = true;\r\n position = getCachedStyle(target)(\"position\");\r\n break;\r\n }\r\n target = parentNode;\r\n position = \"relative\";\r\n }\r\n return {\r\n offsetZoom: offsetZoom,\r\n hasSlot: hasSlot,\r\n parentSlotElement: parentSlotElement,\r\n isCustomElement: isCustomElement,\r\n isStatic: position === \"static\",\r\n isEnd: isEnd || !target || target === documentElement,\r\n offsetParent: target || documentElement,\r\n };\r\n}\r\nfunction getOffsetPosInfo(el, target) {\r\n var _a;\r\n var tagName = el.tagName.toLowerCase();\r\n var offsetLeft = el.offsetLeft;\r\n var offsetTop = el.offsetTop;\r\n var getStyle = getCachedStyle(el);\r\n // svg\r\n var isSVG = isUndefined(offsetLeft);\r\n var hasOffset = !isSVG;\r\n var origin;\r\n var targetOrigin;\r\n // inner svg element\r\n if (!hasOffset && (tagName !== \"svg\" || el.ownerSVGElement)) {\r\n origin = IS_WEBKIT605\r\n ? getBeforeTransformOrigin(el)\r\n : getTransformOriginArray(getStyle(\"transformOrigin\")).map(function (pos) { return parseFloat(pos); });\r\n targetOrigin = origin.slice();\r\n hasOffset = true;\r\n if (tagName === \"svg\") {\r\n offsetLeft = 0;\r\n offsetTop = 0;\r\n }\r\n else {\r\n _a = __read(getSVGGraphicsOffset(el, origin, el === target && target.tagName.toLowerCase() === \"g\"), 4), offsetLeft = _a[0], offsetTop = _a[1], origin[0] = _a[2], origin[1] = _a[3];\r\n }\r\n }\r\n else {\r\n origin = getTransformOriginArray(getStyle(\"transformOrigin\")).map(function (pos) { return parseFloat(pos); });\r\n targetOrigin = origin.slice();\r\n // console.log(getStyle(\"transformOrigin\"), targetOrigin);\r\n }\r\n return {\r\n tagName: tagName,\r\n isSVG: isSVG,\r\n hasOffset: hasOffset,\r\n offset: [offsetLeft || 0, offsetTop || 0],\r\n origin: origin,\r\n targetOrigin: targetOrigin,\r\n };\r\n}\r\nfunction getBodyOffset(el, isSVG) {\r\n var getStyle = getCachedStyle(el);\r\n var getBodyStyle = getCachedStyle(getDocumentBody(el));\r\n var bodyPosition = getBodyStyle(\"position\");\r\n if (!isSVG && (!bodyPosition || bodyPosition === \"static\")) {\r\n return [0, 0];\r\n }\r\n var marginLeft = parseInt(getBodyStyle(\"marginLeft\"), 10);\r\n var marginTop = parseInt(getBodyStyle(\"marginTop\"), 10);\r\n if (getStyle(\"position\") === \"absolute\") {\r\n if (getStyle(\"top\") !== \"auto\" || getStyle(\"bottom\") !== \"auto\") {\r\n marginTop = 0;\r\n }\r\n if (getStyle(\"left\") !== \"auto\" || getStyle(\"right\") !== \"auto\") {\r\n marginLeft = 0;\r\n }\r\n }\r\n return [marginLeft, marginTop];\r\n}\r\nfunction convert3DMatrixes(matrixes) {\r\n matrixes.forEach(function (info) {\r\n var matrix = info.matrix;\r\n if (matrix) {\r\n info.matrix = convertDimension(matrix, 3, 4);\r\n }\r\n });\r\n}\r\nfunction getPositionFixedInfo(el) {\r\n var fixedContainer = el.parentElement;\r\n var hasTransform = false;\r\n var body = getDocumentBody(el);\r\n while (fixedContainer) {\r\n var transform = getComputedStyle(fixedContainer).transform;\r\n if (transform && transform !== \"none\") {\r\n hasTransform = true;\r\n break;\r\n }\r\n if (fixedContainer === body) {\r\n break;\r\n }\r\n fixedContainer = fixedContainer.parentElement;\r\n }\r\n return {\r\n fixedContainer: fixedContainer || body,\r\n hasTransform: hasTransform,\r\n };\r\n}\r\nfunction makeMatrixCSS(matrix, is3d) {\r\n if (is3d === void 0) { is3d = matrix.length > 9; }\r\n return \"\".concat(is3d ? \"matrix3d\" : \"matrix\", \"(\").concat(convertMatrixtoCSS(matrix, !is3d).join(\",\"), \")\");\r\n}\r\nfunction getSVGViewBox(el) {\r\n var clientWidth = el.clientWidth;\r\n var clientHeight = el.clientHeight;\r\n if (!el) {\r\n return { x: 0, y: 0, width: 0, height: 0, clientWidth: clientWidth, clientHeight: clientHeight };\r\n }\r\n var viewBox = el.viewBox;\r\n var baseVal = (viewBox && viewBox.baseVal) || { x: 0, y: 0, width: 0, height: 0 };\r\n return {\r\n x: baseVal.x,\r\n y: baseVal.y,\r\n width: baseVal.width || clientWidth,\r\n height: baseVal.height || clientHeight,\r\n clientWidth: clientWidth,\r\n clientHeight: clientHeight,\r\n };\r\n}\r\nfunction getSVGMatrix(el, n) {\r\n var _a;\r\n var _b = getSVGViewBox(el), viewBoxWidth = _b.width, viewBoxHeight = _b.height, clientWidth = _b.clientWidth, clientHeight = _b.clientHeight;\r\n var scaleX = clientWidth / viewBoxWidth;\r\n var scaleY = clientHeight / viewBoxHeight;\r\n var preserveAspectRatio = el.preserveAspectRatio.baseVal;\r\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio\r\n var align = preserveAspectRatio.align;\r\n // 1 : meet 2: slice\r\n var meetOrSlice = preserveAspectRatio.meetOrSlice;\r\n var svgOrigin = [0, 0];\r\n var scale = [scaleX, scaleY];\r\n var translate = [0, 0];\r\n if (align !== 1) {\r\n var xAlign = (align - 2) % 3;\r\n var yAlign = Math.floor((align - 2) / 3);\r\n svgOrigin[0] = viewBoxWidth * xAlign / 2;\r\n svgOrigin[1] = viewBoxHeight * yAlign / 2;\r\n var scaleDimension = meetOrSlice === 2 ? Math.max(scaleY, scaleX) : Math.min(scaleX, scaleY);\r\n scale[0] = scaleDimension;\r\n scale[1] = scaleDimension;\r\n translate[0] = (clientWidth - viewBoxWidth) / 2 * xAlign;\r\n translate[1] = (clientHeight - viewBoxHeight) / 2 * yAlign;\r\n }\r\n var scaleMatrix = createScaleMatrix(scale, n);\r\n _a = __read(translate, 2), scaleMatrix[n * (n - 1)] = _a[0], scaleMatrix[n * (n - 1) + 1] = _a[1];\r\n return getAbsoluteMatrix(scaleMatrix, n, svgOrigin);\r\n}\r\nfunction getSVGGraphicsOffset(el, origin, isGTarget) {\r\n var tagName = el.tagName.toLowerCase();\r\n if (!el.getBBox || !isGTarget && tagName === \"g\") {\r\n return [0, 0, 0, 0];\r\n }\r\n var getStyle = getCachedStyle(el);\r\n var isFillBox = getStyle(\"transform-box\") === \"fill-box\";\r\n var bbox = el.getBBox();\r\n var viewBox = getSVGViewBox(el.ownerSVGElement);\r\n var x = bbox.x;\r\n var y = bbox.y;\r\n // x, y가 0으로 나타나는 버그\r\n if (tagName === \"foreignobject\" && (!x && !y)) {\r\n x = parseFloat(el.getAttribute(\"x\")) || 0;\r\n y = parseFloat(el.getAttribute(\"y\")) || 0;\r\n }\r\n var left = x - viewBox.x;\r\n var top = y - viewBox.y;\r\n var originX = isFillBox ? origin[0] : origin[0] - left;\r\n var originY = isFillBox ? origin[1] : origin[1] - top;\r\n // if (isFillBox) {\r\n // const bbox = (el as SVGGraphicsElement).getBBox();\r\n // const x = parseFloat(getStyle(\"x\")) || bbox.x;\r\n // const y = parseFloat(getStyle(\"y\")) || bbox.y;\r\n // const xScale = bbox.x / x;\r\n // const yScale = bbox.y / y;\r\n // console.log(x, y);\r\n // originX *= xScale;\r\n // originY *= yScale;\r\n // }\r\n return [left, top, originX, originY];\r\n}\r\nfunction calculatePosition(matrix, pos, n) {\r\n return calculate(matrix, convertPositionMatrix(pos, n), n);\r\n}\r\nfunction calculatePoses(matrix, width, height, n) {\r\n return [[0, 0], [width, 0], [0, height], [width, height]].map(function (pos) { return calculatePosition(matrix, pos, n); });\r\n}\r\nfunction getRect(poses) {\r\n var posesX = poses.map(function (pos) { return pos[0]; });\r\n var posesY = poses.map(function (pos) { return pos[1]; });\r\n var left = Math.min.apply(Math, __spreadArray([], __read(posesX), false));\r\n var top = Math.min.apply(Math, __spreadArray([], __read(posesY), false));\r\n var right = Math.max.apply(Math, __spreadArray([], __read(posesX), false));\r\n var bottom = Math.max.apply(Math, __spreadArray([], __read(posesY), false));\r\n var rectWidth = right - left;\r\n var rectHeight = bottom - top;\r\n return {\r\n left: left,\r\n top: top,\r\n right: right,\r\n bottom: bottom,\r\n width: rectWidth,\r\n height: rectHeight,\r\n };\r\n}\r\nfunction calculateRect(matrix, width, height, n) {\r\n var poses = calculatePoses(matrix, width, height, n);\r\n return getRect(poses);\r\n}\r\nfunction getSVGOffset(offsetInfo, targetInfo, container, n, beforeMatrix) {\r\n var _a;\r\n var target = offsetInfo.target;\r\n var origin = offsetInfo.origin;\r\n var targetMatrix = targetInfo.matrix;\r\n var _b = getSize(target), width = _b.offsetWidth, height = _b.offsetHeight;\r\n var containerClientRect = container.getBoundingClientRect();\r\n var margin = [0, 0];\r\n if (container === getDocumentBody(container)) {\r\n margin = getBodyOffset(target, true);\r\n }\r\n var rect = target.getBoundingClientRect();\r\n var rectLeft = rect.left - containerClientRect.left + container.scrollLeft\r\n - (container.clientLeft || 0) + margin[0];\r\n var rectTop = rect.top - containerClientRect.top + container.scrollTop\r\n - (container.clientTop || 0) + margin[1];\r\n var rectWidth = rect.width;\r\n var rectHeight = rect.height;\r\n var mat = multiplies(n, beforeMatrix, targetMatrix);\r\n var _c = calculateRect(mat, width, height, n), prevLeft = _c.left, prevTop = _c.top, prevWidth = _c.width, prevHeight = _c.height;\r\n var posOrigin = calculatePosition(mat, origin, n);\r\n var prevOrigin = minus(posOrigin, [prevLeft, prevTop]);\r\n var rectOrigin = [\r\n rectLeft + prevOrigin[0] * rectWidth / prevWidth,\r\n rectTop + prevOrigin[1] * rectHeight / prevHeight,\r\n ];\r\n var offset = [0, 0];\r\n var count = 0;\r\n while (++count < 10) {\r\n var inverseBeforeMatrix = invert(beforeMatrix, n);\r\n _a = __read(minus(calculatePosition(inverseBeforeMatrix, rectOrigin, n), calculatePosition(inverseBeforeMatrix, posOrigin, n)), 2), offset[0] = _a[0], offset[1] = _a[1];\r\n var mat2 = multiplies(n, beforeMatrix, createOriginMatrix(offset, n), targetMatrix);\r\n var _d = calculateRect(mat2, width, height, n), nextLeft = _d.left, nextTop = _d.top;\r\n var distLeft = nextLeft - rectLeft;\r\n var distTop = nextTop - rectTop;\r\n if (abs(distLeft) < 2 && abs(distTop) < 2) {\r\n break;\r\n }\r\n rectOrigin[0] -= distLeft;\r\n rectOrigin[1] -= distTop;\r\n }\r\n return offset.map(function (p) { return Math.round(p); });\r\n}\r\nfunction calculateMoveableClientPositions(rootMatrix, poses, rootClientRect) {\r\n var is3d = rootMatrix.length === 16;\r\n var n = is3d ? 4 : 3;\r\n var rootPoses = poses.map(function (pos) { return calculatePosition(rootMatrix, pos, n); });\r\n var left = rootClientRect.left, top = rootClientRect.top;\r\n return rootPoses.map(function (pos) {\r\n return [pos[0] + left, pos[1] + top];\r\n });\r\n}\r\nfunction getDistSize(vec) {\r\n return Math.sqrt(vec[0] * vec[0] + vec[1] * vec[1]);\r\n}\r\nfunction getDiagonalSize(pos1, pos2) {\r\n return getDistSize([\r\n pos2[0] - pos1[0],\r\n pos2[1] - pos1[1],\r\n ]);\r\n}\r\nfunction getLineStyle(pos1, pos2, zoom, rad) {\r\n if (zoom === void 0) { zoom = 1; }\r\n if (rad === void 0) { rad = getRad(pos1, pos2); }\r\n var width = getDiagonalSize(pos1, pos2);\r\n return {\r\n transform: \"translateY(-50%) translate(\".concat(pos1[0], \"px, \").concat(pos1[1], \"px) rotate(\").concat(rad, \"rad) scaleY(\").concat(zoom, \")\"),\r\n width: \"\".concat(width, \"px\"),\r\n };\r\n}\r\nfunction getControlTransform(rotation, zoom) {\r\n var poses = [];\r\n for (var _i = 2; _i < arguments.length; _i++) {\r\n poses[_i - 2] = arguments[_i];\r\n }\r\n var length = poses.length;\r\n var x = poses.reduce(function (prev, pos) { return prev + pos[0]; }, 0) / length;\r\n var y = poses.reduce(function (prev, pos) { return prev + pos[1]; }, 0) / length;\r\n return {\r\n transform: \"translateZ(0px) translate(\".concat(x, \"px, \").concat(y, \"px) rotate(\").concat(rotation, \"rad) scale(\").concat(zoom, \")\"),\r\n };\r\n}\r\nfunction getProps(props, ableName) {\r\n var self = props[ableName];\r\n if (isObject(self)) {\r\n return __assign(__assign({}, props), self);\r\n }\r\n return props;\r\n}\r\nfunction getSize(target) {\r\n var hasOffset = target && !isUndefined(target.offsetWidth);\r\n var offsetWidth = 0;\r\n var offsetHeight = 0;\r\n var clientWidth = 0;\r\n var clientHeight = 0;\r\n var cssWidth = 0;\r\n var cssHeight = 0;\r\n var contentWidth = 0;\r\n var contentHeight = 0;\r\n var minWidth = 0;\r\n var minHeight = 0;\r\n var minOffsetWidth = 0;\r\n var minOffsetHeight = 0;\r\n var maxWidth = Infinity;\r\n var maxHeight = Infinity;\r\n var maxOffsetWidth = Infinity;\r\n var maxOffsetHeight = Infinity;\r\n var inlineCSSWidth = 0;\r\n var inlineCSSHeight = 0;\r\n var svg = false;\r\n if (target) {\r\n if (!hasOffset && target.ownerSVGElement) {\r\n // check svg elements\r\n var bbox = target.getBBox();\r\n svg = true;\r\n offsetWidth = bbox.width;\r\n offsetHeight = bbox.height;\r\n cssWidth = offsetWidth;\r\n cssHeight = offsetHeight;\r\n contentWidth = offsetWidth;\r\n contentHeight = offsetHeight;\r\n clientWidth = offsetWidth;\r\n clientHeight = offsetHeight;\r\n }\r\n else {\r\n // check html elements\r\n var getStyle = getCachedStyle(target);\r\n var targetStyle = target.style;\r\n var boxSizing = getStyle(\"boxSizing\") === \"border-box\";\r\n var borderLeft = parseFloat(getStyle(\"borderLeftWidth\")) || 0;\r\n var borderRight = parseFloat(getStyle(\"borderRightWidth\")) || 0;\r\n var borderTop = parseFloat(getStyle(\"borderTopWidth\")) || 0;\r\n var borderBottom = parseFloat(getStyle(\"borderBottomWidth\")) || 0;\r\n var paddingLeft = parseFloat(getStyle(\"paddingLeft\")) || 0;\r\n var paddingRight = parseFloat(getStyle(\"paddingRight\")) || 0;\r\n var paddingTop = parseFloat(getStyle(\"paddingTop\")) || 0;\r\n var paddingBottom = parseFloat(getStyle(\"paddingBottom\")) || 0;\r\n var horizontalPadding = paddingLeft + paddingRight;\r\n var verticalPadding = paddingTop + paddingBottom;\r\n var horizontalBorder = borderLeft + borderRight;\r\n var verticalBorder = borderTop + borderBottom;\r\n var horizontalOffset = horizontalPadding + horizontalBorder;\r\n var verticalOffset = verticalPadding + verticalBorder;\r\n var position = getStyle(\"position\");\r\n var containerWidth = 0;\r\n var containerHeight = 0;\r\n // SVGSVGElement, HTMLElement\r\n if (\"clientLeft\" in target) {\r\n var parentElement = null;\r\n if (position === \"absolute\") {\r\n var offsetInfo = getOffsetInfo(target, getDocumentBody(target));\r\n parentElement = offsetInfo.offsetParent;\r\n }\r\n else {\r\n parentElement = target.parentElement;\r\n }\r\n if (parentElement) {\r\n var getParentStyle = getCachedStyle(parentElement);\r\n containerWidth = parseFloat(getParentStyle(\"width\"));\r\n containerHeight = parseFloat(getParentStyle(\"height\"));\r\n }\r\n }\r\n minWidth = Math.max(horizontalPadding, convertUnitSize(getStyle(\"minWidth\"), containerWidth) || 0);\r\n minHeight = Math.max(verticalPadding, convertUnitSize(getStyle(\"minHeight\"), containerHeight) || 0);\r\n maxWidth = convertUnitSize(getStyle(\"maxWidth\"), containerWidth);\r\n maxHeight = convertUnitSize(getStyle(\"maxHeight\"), containerHeight);\r\n if (isNaN(maxWidth)) {\r\n maxWidth = Infinity;\r\n }\r\n if (isNaN(maxHeight)) {\r\n maxHeight = Infinity;\r\n }\r\n inlineCSSWidth = convertUnitSize(targetStyle.width, 0) || 0;\r\n inlineCSSHeight = convertUnitSize(targetStyle.height, 0) || 0;\r\n cssWidth = parseFloat(getStyle(\"width\")) || 0;\r\n cssHeight = parseFloat(getStyle(\"height\")) || 0;\r\n contentWidth = abs(cssWidth - inlineCSSWidth) < 1\r\n ? between(minWidth, inlineCSSWidth || cssWidth, maxWidth)\r\n : cssWidth;\r\n contentHeight = abs(cssHeight - inlineCSSHeight) < 1\r\n ? between(minHeight, inlineCSSHeight || cssHeight, maxHeight)\r\n : cssHeight;\r\n offsetWidth = contentWidth;\r\n offsetHeight = contentHeight;\r\n clientWidth = contentWidth;\r\n clientHeight = contentHeight;\r\n if (boxSizing) {\r\n maxOffsetWidth = maxWidth;\r\n maxOffsetHeight = maxHeight;\r\n minOffsetWidth = minWidth;\r\n minOffsetHeight = minHeight;\r\n contentWidth = offsetWidth - horizontalOffset;\r\n contentHeight = offsetHeight - verticalOffset;\r\n }\r\n else {\r\n maxOffsetWidth = maxWidth + horizontalOffset;\r\n maxOffsetHeight = maxHeight + verticalOffset;\r\n minOffsetWidth = minWidth + horizontalOffset;\r\n minOffsetHeight = minHeight + verticalOffset;\r\n offsetWidth = contentWidth + horizontalOffset;\r\n offsetHeight = contentHeight + verticalOffset;\r\n }\r\n clientWidth = contentWidth + horizontalPadding;\r\n clientHeight = contentHeight + verticalPadding;\r\n }\r\n }\r\n return {\r\n svg: svg,\r\n offsetWidth: offsetWidth,\r\n offsetHeight: offsetHeight,\r\n clientWidth: clientWidth,\r\n clientHeight: clientHeight,\r\n contentWidth: contentWidth,\r\n contentHeight: contentHeight,\r\n inlineCSSWidth: inlineCSSWidth,\r\n inlineCSSHeight: inlineCSSHeight,\r\n cssWidth: cssWidth,\r\n cssHeight: cssHeight,\r\n minWidth: minWidth,\r\n minHeight: minHeight,\r\n maxWidth: maxWidth,\r\n maxHeight: maxHeight,\r\n minOffsetWidth: minOffsetWidth,\r\n minOffsetHeight: minOffsetHeight,\r\n maxOffsetWidth: maxOffsetWidth,\r\n maxOffsetHeight: maxOffsetHeight,\r\n };\r\n}\r\nfunction getRotationRad(poses, direction) {\r\n return getRad(direction > 0 ? poses[0] : poses[1], direction > 0 ? poses[1] : poses[0]);\r\n}\r\nfunction resetClientRect() {\r\n return {\r\n left: 0, top: 0,\r\n width: 0, height: 0,\r\n right: 0,\r\n bottom: 0,\r\n clientLeft: 0, clientTop: 0,\r\n clientWidth: 0, clientHeight: 0,\r\n scrollWidth: 0, scrollHeight: 0,\r\n };\r\n}\r\nfunction getExtendsRect(el, rect) {\r\n var isRoot = el === getDocumentBody(el) || el === getDocumentElement(el);\r\n var extendsRect = {\r\n clientLeft: el.clientLeft,\r\n clientTop: el.clientTop,\r\n clientWidth: el.clientWidth,\r\n clientHeight: el.clientHeight,\r\n scrollWidth: el.scrollWidth,\r\n scrollHeight: el.scrollHeight,\r\n overflow: false,\r\n };\r\n if (isRoot) {\r\n extendsRect.clientHeight = Math.max(rect.height, extendsRect.clientHeight);\r\n extendsRect.scrollHeight = Math.max(rect.height, extendsRect.scrollHeight);\r\n }\r\n extendsRect.overflow = getCachedStyle(el)(\"overflow\") !== \"visible\";\r\n return __assign(__assign({}, rect), extendsRect);\r\n}\r\nfunction getClientRectByPosition(position, base, el, isExtends) {\r\n var left = position.left, right = position.right, top = position.top, bottom = position.bottom;\r\n var baseTop = base.top;\r\n var baseLeft = base.left;\r\n var rect = {\r\n left: baseLeft + left,\r\n top: baseTop + top,\r\n right: baseLeft + right,\r\n bottom: baseTop + bottom,\r\n width: right - left,\r\n height: bottom - top,\r\n };\r\n if (el && isExtends) {\r\n return getExtendsRect(el, rect);\r\n }\r\n return rect;\r\n}\r\nfunction getClientRect(el, isExtends) {\r\n var left = 0;\r\n var top = 0;\r\n var width = 0;\r\n var height = 0;\r\n // let isRoot = false;\r\n if (el) {\r\n var clientRect = el.getBoundingClientRect();\r\n left = clientRect.left;\r\n top = clientRect.top;\r\n width = clientRect.width;\r\n height = clientRect.height;\r\n }\r\n var rect = {\r\n left: left,\r\n top: top,\r\n width: width,\r\n height: height,\r\n right: left + width,\r\n bottom: top + height,\r\n };\r\n if (el && isExtends) {\r\n return getExtendsRect(el, rect);\r\n }\r\n return rect;\r\n}\r\nfunction getTotalOrigin(moveable) {\r\n var _a = moveable.props, groupable = _a.groupable, svgOrigin = _a.svgOrigin;\r\n var _b = moveable.getState(), offsetWidth = _b.offsetWidth, offsetHeight = _b.offsetHeight, svg = _b.svg, transformOrigin = _b.transformOrigin;\r\n if (!groupable && svg && svgOrigin) {\r\n return convertTransformOriginArray(svgOrigin, offsetWidth, offsetHeight);\r\n }\r\n return transformOrigin;\r\n}\r\nfunction getTotalDirection(parentDirection, isPinch, inputEvent, datas) {\r\n var direction;\r\n if (parentDirection) {\r\n direction = parentDirection;\r\n }\r\n else if (isPinch) {\r\n direction = [0, 0];\r\n }\r\n else {\r\n var target = inputEvent.target;\r\n direction = getDirection(target, datas);\r\n }\r\n return direction;\r\n}\r\nfunction getDirection(target, datas) {\r\n if (!target) {\r\n return;\r\n }\r\n var deg = target.getAttribute(\"data-rotation\") || \"\";\r\n var direciton = target.getAttribute(\"data-direction\");\r\n datas.deg = deg;\r\n if (!direciton) {\r\n return;\r\n }\r\n var dir = [0, 0];\r\n (direciton.indexOf(\"w\") > -1) && (dir[0] = -1);\r\n (direciton.indexOf(\"e\") > -1) && (dir[0] = 1);\r\n (direciton.indexOf(\"n\") > -1) && (dir[1] = -1);\r\n (direciton.indexOf(\"s\") > -1) && (dir[1] = 1);\r\n return dir;\r\n}\r\nfunction getAbsolutePoses(poses, dist) {\r\n return [\r\n plus(dist, poses[0]),\r\n plus(dist, poses[1]),\r\n plus(dist, poses[2]),\r\n plus(dist, poses[3]),\r\n ];\r\n}\r\nfunction getAbsolutePosesByState(_a) {\r\n var left = _a.left, top = _a.top, pos1 = _a.pos1, pos2 = _a.pos2, pos3 = _a.pos3, pos4 = _a.pos4;\r\n return getAbsolutePoses([pos1, pos2, pos3, pos4], [left, top]);\r\n}\r\nfunction unsetAbles(self, isControl) {\r\n self[isControl ? \"controlAbles\" : \"targetAbles\"].forEach(function (able) {\r\n able.unset && able.unset(self);\r\n });\r\n}\r\nfunction unsetGesto(self, isControl) {\r\n var gestoName = isControl ? \"controlGesto\" : \"targetGesto\";\r\n var gesto = self[gestoName];\r\n if ((gesto === null || gesto === void 0 ? void 0 : gesto.isIdle()) === false) {\r\n unsetAbles(self, isControl);\r\n }\r\n gesto === null || gesto === void 0 ? void 0 : gesto.unset();\r\n self[gestoName] = null;\r\n}\r\nfunction fillCSSObject(style, resolvedEvent) {\r\n if (resolvedEvent) {\r\n var originalDatas = getBeforeRenderableDatas(resolvedEvent);\r\n originalDatas.nextStyle = __assign(__assign({}, originalDatas.nextStyle), style);\r\n }\r\n return {\r\n style: style,\r\n cssText: getKeys(style).map(function (name) { return \"\".concat(decamelize(name, \"-\"), \": \").concat(style[name], \";\"); }).join(\"\"),\r\n };\r\n}\r\nfunction fillAfterTransform(prevEvent, nextEvent, resolvedEvent) {\r\n var afterTransform = nextEvent.afterTransform || nextEvent.transform;\r\n return __assign(__assign({}, fillCSSObject(__assign(__assign(__assign({}, prevEvent.style), nextEvent.style), { transform: afterTransform }), resolvedEvent)), { afterTransform: afterTransform, transform: prevEvent.transform });\r\n}\r\nfunction fillParams(moveable, e, params, isBeforeEvent) {\r\n var datas = e.datas;\r\n if (!datas.datas) {\r\n datas.datas = {};\r\n }\r\n var nextParams = __assign(__assign({}, params), { target: moveable.state.target, clientX: e.clientX, clientY: e.clientY, inputEvent: e.inputEvent, currentTarget: moveable, moveable: moveable, datas: datas.datas, isRequest: e.isRequest, isRequestChild: e.isRequestChild, isFirstDrag: !!e.isFirstDrag, isTrusted: e.isTrusted !== false, stopAble: function () {\r\n datas.isEventStart = false;\r\n }, stopDrag: function () {\r\n var _a;\r\n (_a = e.stop) === null || _a === void 0 ? void 0 : _a.call(e);\r\n } });\r\n if (!datas.isStartEvent) {\r\n datas.isStartEvent = true;\r\n }\r\n else if (!isBeforeEvent) {\r\n datas.lastEvent = nextParams;\r\n }\r\n return nextParams;\r\n}\r\nfunction fillEndParams(moveable, e, params) {\r\n var datas = e.datas;\r\n var isDrag = \"isDrag\" in params ? params.isDrag : e.isDrag;\r\n if (!datas.datas) {\r\n datas.datas = {};\r\n }\r\n return __assign(__assign({ isDrag: isDrag }, params), { moveable: moveable, target: moveable.state.target, clientX: e.clientX, clientY: e.clientY, inputEvent: e.inputEvent, currentTarget: moveable, lastEvent: datas.lastEvent, isDouble: e.isDouble, datas: datas.datas, isFirstDrag: !!e.isFirstDrag });\r\n}\r\nfunction catchEvent(moveable, name, callback) {\r\n moveable._emitter.on(name, callback);\r\n}\r\nfunction triggerEvent(moveable, name, params, isManager, isRequest) {\r\n return moveable.triggerEvent(name, params, isManager, isRequest);\r\n}\r\nfunction getComputedStyle(el, pseudoElt) {\r\n return getWindow(el).getComputedStyle(el, pseudoElt);\r\n}\r\nfunction filterAbles(ables, methods, triggerAblesSimultaneously) {\r\n var enabledAbles = {};\r\n var ableGroups = {};\r\n return ables.filter(function (able) {\r\n var name = able.name;\r\n if (enabledAbles[name] || !methods.some(function (method) { return able[method]; })) {\r\n return false;\r\n }\r\n if (!triggerAblesSimultaneously && able.ableGroup) {\r\n if (ableGroups[able.ableGroup]) {\r\n return false;\r\n }\r\n ableGroups[able.ableGroup] = true;\r\n }\r\n enabledAbles[name] = true;\r\n return true;\r\n });\r\n}\r\nfunction equals(a1, a2) {\r\n return a1 === a2 || (a1 == null && a2 == null);\r\n}\r\nfunction selectValue() {\r\n var values = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n values[_i] = arguments[_i];\r\n }\r\n var length = values.length - 1;\r\n for (var i = 0; i < length; ++i) {\r\n var value = values[i];\r\n if (!isUndefined(value)) {\r\n return value;\r\n }\r\n }\r\n return values[length];\r\n}\r\nfunction groupBy(arr, func) {\r\n var groups = [];\r\n var groupKeys = [];\r\n arr.forEach(function (el, index) {\r\n var groupKey = func(el, index, arr);\r\n var keyIndex = groupKeys.indexOf(groupKey);\r\n var group = groups[keyIndex] || [];\r\n if (keyIndex === -1) {\r\n groupKeys.push(groupKey);\r\n groups.push(group);\r\n }\r\n group.push(el);\r\n });\r\n return groups;\r\n}\r\nfunction groupByMap(arr, func) {\r\n var groups = [];\r\n var groupKeys = {};\r\n arr.forEach(function (el, index) {\r\n var groupKey = func(el, index, arr);\r\n var group = groupKeys[groupKey];\r\n if (!group) {\r\n group = [];\r\n groupKeys[groupKey] = group;\r\n groups.push(group);\r\n }\r\n group.push(el);\r\n });\r\n return groups;\r\n}\r\nfunction flat(arr) {\r\n return arr.reduce(function (prev, cur) {\r\n return prev.concat(cur);\r\n }, []);\r\n}\r\nfunction maxOffset() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n args.sort(function (a, b) { return abs(b) - abs(a); });\r\n return args[0];\r\n}\r\nfunction calculateInversePosition(matrix, pos, n) {\r\n return calculate(invert(matrix, n), convertPositionMatrix(pos, n), n);\r\n}\r\nfunction convertDragDist(state, e) {\r\n var _a;\r\n var is3d = state.is3d, rootMatrix = state.rootMatrix;\r\n var n = is3d ? 4 : 3;\r\n _a = __read(calculateInversePosition(rootMatrix, [e.distX, e.distY], n), 2), e.distX = _a[0], e.distY = _a[1];\r\n return e;\r\n}\r\nfunction calculatePadding(matrix, pos, added, n) {\r\n if (!added[0] && !added[1]) {\r\n return pos;\r\n }\r\n var xAdded = calculatePosition(matrix, [normalized(added[0] || 1), 0], n);\r\n var yAdded = calculatePosition(matrix, [0, normalized(added[1] || 1)], n);\r\n var nextAdded = calculatePosition(matrix, [\r\n added[0] / getDistSize(xAdded),\r\n added[1] / getDistSize(yAdded),\r\n ], n);\r\n return plus(pos, nextAdded);\r\n}\r\nfunction convertCSSSize(value, size, isRelative) {\r\n return isRelative ? \"\".concat(value / size * 100, \"%\") : \"\".concat(value, \"px\");\r\n}\r\nfunction getTinyDist(v) {\r\n return abs(v) <= TINY_NUM ? 0 : v;\r\n}\r\nfunction getDirectionViewClassName(ableName) {\r\n return function (moveable) {\r\n if (!moveable.isDragging(ableName)) {\r\n return \"\";\r\n }\r\n var data = getGestoData(moveable, ableName);\r\n var deg = data.deg;\r\n if (!deg) {\r\n return \"\";\r\n }\r\n return prefix(\"view-control-rotation\".concat(deg));\r\n };\r\n}\r\nfunction getDirectionCondition(ableName, checkAbles) {\r\n if (checkAbles === void 0) { checkAbles = [ableName]; }\r\n return function (moveable, e) {\r\n if (e.isRequest) {\r\n if (checkAbles.some(function (name) { return e.requestAble === name; })) {\r\n return e.parentDirection;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n var target = e.inputEvent.target;\r\n return hasClass(target, prefix(\"direction\")) && (!ableName || hasClass(target, prefix(ableName)));\r\n };\r\n}\r\nfunction convertTransformInfo(transforms, state, index) {\r\n var _a;\r\n var matrixInfos = parse(transforms, {\r\n \"x%\": function (v) { return v / 100 * state.offsetWidth; },\r\n \"y%\": function (v) { return v / 100 * state.offsetHeight; },\r\n });\r\n var beforeFunctionTexts = transforms.slice(0, index < 0 ? undefined : index);\r\n var beforeFunctionTexts2 = transforms.slice(0, index < 0 ? undefined : index + 1);\r\n var targetFunctionText = transforms[index] || \"\";\r\n var afterFunctionTexts = index < 0 ? [] : transforms.slice(index);\r\n var afterFunctionTexts2 = index < 0 ? [] : transforms.slice(index + 1);\r\n var beforeFunctions = matrixInfos.slice(0, index < 0 ? undefined : index);\r\n var beforeFunctions2 = matrixInfos.slice(0, index < 0 ? undefined : index + 1);\r\n var targetFunction = (_a = matrixInfos[index]) !== null && _a !== void 0 ? _a : parse([\"\"])[0];\r\n var afterFunctions = index < 0 ? [] : matrixInfos.slice(index);\r\n var afterFunctions2 = index < 0 ? [] : matrixInfos.slice(index + 1);\r\n var targetFunctions = targetFunction ? [targetFunction] : [];\r\n var beforeFunctionMatrix = toMat(beforeFunctions);\r\n var beforeFunctionMatrix2 = toMat(beforeFunctions2);\r\n var afterFunctionMatrix = toMat(afterFunctions);\r\n var afterFunctionMatrix2 = toMat(afterFunctions2);\r\n var allFunctionMatrix = multiply(beforeFunctionMatrix, afterFunctionMatrix, 4);\r\n return {\r\n transforms: transforms,\r\n beforeFunctionMatrix: beforeFunctionMatrix,\r\n beforeFunctionMatrix2: beforeFunctionMatrix2,\r\n targetFunctionMatrix: toMat(targetFunctions),\r\n afterFunctionMatrix: afterFunctionMatrix,\r\n afterFunctionMatrix2: afterFunctionMatrix2,\r\n allFunctionMatrix: allFunctionMatrix,\r\n beforeFunctions: beforeFunctions,\r\n beforeFunctions2: beforeFunctions2,\r\n targetFunction: targetFunctions[0],\r\n afterFunctions: afterFunctions,\r\n afterFunctions2: afterFunctions2,\r\n beforeFunctionTexts: beforeFunctionTexts,\r\n beforeFunctionTexts2: beforeFunctionTexts2,\r\n targetFunctionText: targetFunctionText,\r\n afterFunctionTexts: afterFunctionTexts,\r\n afterFunctionTexts2: afterFunctionTexts2,\r\n };\r\n}\r\nfunction isArrayFormat(arr) {\r\n if (!arr || !isObject(arr)) {\r\n return false;\r\n }\r\n if (isNode(arr)) {\r\n return false;\r\n }\r\n return isArray(arr) || \"length\" in arr;\r\n}\r\nfunction getRefTarget(target, isSelector) {\r\n if (!target) {\r\n return null;\r\n }\r\n if (isNode(target)) {\r\n return target;\r\n }\r\n if (isString(target)) {\r\n if (isSelector) {\r\n return document.querySelector(target);\r\n }\r\n return target;\r\n }\r\n if (isFunction(target)) {\r\n return target();\r\n }\r\n if (isWindow(target)) {\r\n return target;\r\n }\r\n if (\"current\" in target) {\r\n return target.current;\r\n }\r\n return target;\r\n}\r\nfunction getRefTargets(targets, isSelector) {\r\n if (!targets) {\r\n return [];\r\n }\r\n var userTargets = isArrayFormat(targets) ? [].slice.call(targets) : [targets];\r\n return userTargets.reduce(function (prev, target) {\r\n if (isString(target) && isSelector) {\r\n return __spreadArray(__spreadArray([], __read(prev), false), __read([].slice.call(document.querySelectorAll(target))), false);\r\n }\r\n if (isArray(target)) {\r\n prev.push(getRefTargets(target, isSelector));\r\n }\r\n else {\r\n prev.push(getRefTarget(target, isSelector));\r\n }\r\n return prev;\r\n }, []);\r\n}\r\nfunction getAbsoluteRotation(pos1, pos2, direction) {\r\n var deg = getRad(pos1, pos2) / Math.PI * 180;\r\n deg = direction >= 0 ? deg : 180 - deg;\r\n deg = deg >= 0 ? deg : 360 + deg;\r\n return deg;\r\n}\r\nfunction getDragDistByState(state, dist) {\r\n var rootMatrix = state.rootMatrix, is3d = state.is3d;\r\n var n = is3d ? 4 : 3;\r\n var inverseMatrix = invert(rootMatrix, n);\r\n if (!is3d) {\r\n inverseMatrix = convertDimension(inverseMatrix, 3, 4);\r\n }\r\n inverseMatrix[12] = 0;\r\n inverseMatrix[13] = 0;\r\n inverseMatrix[14] = 0;\r\n return calculateMatrixDist(inverseMatrix, dist);\r\n}\r\nfunction getSizeDistByDist(startSize, dist, ratio, direction, keepRatio) {\r\n var _a = __read(startSize, 2), startOffsetWidth = _a[0], startOffsetHeight = _a[1];\r\n var distWidth = 0;\r\n var distHeight = 0;\r\n if (keepRatio && startOffsetWidth && startOffsetHeight) {\r\n var rad = getRad([0, 0], dist);\r\n var standardRad = getRad([0, 0], direction);\r\n var size = getDistSize(dist);\r\n var signSize = Math.cos(rad - standardRad) * size;\r\n if (!direction[0]) {\r\n // top, bottom\r\n distHeight = signSize;\r\n distWidth = distHeight * ratio;\r\n }\r\n else if (!direction[1]) {\r\n // left, right\r\n distWidth = signSize;\r\n distHeight = distWidth / ratio;\r\n }\r\n else {\r\n // two-way\r\n var startWidthSize = direction[0] * startOffsetWidth;\r\n var startHeightSize = direction[1] * startOffsetHeight;\r\n var secondRad = Math.atan2(startWidthSize + dist[0], startHeightSize + dist[1]);\r\n var firstRad = Math.atan2(startWidthSize, startHeightSize);\r\n if (secondRad < 0) {\r\n secondRad += Math.PI * 2;\r\n }\r\n if (firstRad < 0) {\r\n firstRad += Math.PI * 2;\r\n }\r\n var rad_1 = 0;\r\n if (abs(secondRad - firstRad) < Math.PI / 2 || abs(secondRad - firstRad) > Math.PI / 2 * 3) {\r\n rad_1 = secondRad - firstRad;\r\n }\r\n else {\r\n firstRad += Math.PI;\r\n rad_1 = secondRad - firstRad;\r\n }\r\n if (rad_1 > Math.PI * 2) {\r\n rad_1 -= Math.PI * 2;\r\n }\r\n else if (rad_1 > Math.PI) {\r\n rad_1 = 2 * Math.PI - rad_1;\r\n }\r\n else if (rad_1 < -Math.PI) {\r\n rad_1 = -2 * Math.PI - rad_1;\r\n }\r\n // 180\r\n // -1, -1, // 1, -1\r\n // 270 90\r\n // -1, 1 // 1, 1\r\n // 0\r\n var distSize = getDistSize([startWidthSize + dist[0], startHeightSize + dist[1]]) * Math.cos(rad_1);\r\n distWidth = distSize * Math.sin(firstRad) - startWidthSize;\r\n distHeight = distSize * Math.cos(firstRad) - startHeightSize;\r\n if (direction[0] < 0) {\r\n distWidth *= -1;\r\n }\r\n if (direction[1] < 0) {\r\n distHeight *= -1;\r\n }\r\n }\r\n }\r\n else {\r\n distWidth = direction[0] * dist[0];\r\n distHeight = direction[1] * dist[1];\r\n }\r\n return [distWidth, distHeight];\r\n}\r\nfunction getOffsetSizeDist(sizeDirection, keepRatio, datas, e) {\r\n var _a;\r\n var ratio = datas.ratio, startOffsetWidth = datas.startOffsetWidth, startOffsetHeight = datas.startOffsetHeight;\r\n var distWidth = 0;\r\n var distHeight = 0;\r\n var distX = e.distX, distY = e.distY, pinchScale = e.pinchScale, parentDistance = e.parentDistance, parentDist = e.parentDist, parentScale = e.parentScale;\r\n var startFixedDirection = datas.fixedDirection;\r\n var directionsDists = [0, 1].map(function (index) {\r\n return abs(sizeDirection[index] - startFixedDirection[index]);\r\n });\r\n var directionRatios = [0, 1].map(function (index) {\r\n var dist = directionsDists[index];\r\n if (dist !== 0) {\r\n dist = 2 / dist;\r\n }\r\n return dist;\r\n });\r\n if (parentDist) {\r\n distWidth = parentDist[0];\r\n distHeight = parentDist[1];\r\n if (keepRatio) {\r\n if (!distWidth) {\r\n distWidth = distHeight * ratio;\r\n }\r\n else if (!distHeight) {\r\n distHeight = distWidth / ratio;\r\n }\r\n }\r\n }\r\n else if (isNumber(pinchScale)) {\r\n distWidth = (pinchScale - 1) * startOffsetWidth;\r\n distHeight = (pinchScale - 1) * startOffsetHeight;\r\n }\r\n else if (parentScale) {\r\n distWidth = (parentScale[0] - 1) * startOffsetWidth;\r\n distHeight = (parentScale[1] - 1) * startOffsetHeight;\r\n }\r\n else if (parentDistance) {\r\n var scaleX = startOffsetWidth * directionsDists[0];\r\n var scaleY = startOffsetHeight * directionsDists[1];\r\n var ratioDistance = getDistSize([scaleX, scaleY]);\r\n distWidth = parentDistance / ratioDistance * scaleX * directionRatios[0];\r\n distHeight = parentDistance / ratioDistance * scaleY * directionRatios[1];\r\n }\r\n else {\r\n var dist_1 = getDragDist({ datas: datas, distX: distX, distY: distY });\r\n dist_1 = directionRatios.map(function (ratio, i) {\r\n return dist_1[i] * ratio;\r\n });\r\n _a = __read(getSizeDistByDist([startOffsetWidth, startOffsetHeight], dist_1, ratio, sizeDirection, keepRatio), 2), distWidth = _a[0], distHeight = _a[1];\r\n }\r\n return {\r\n // direction,\r\n // sizeDirection,\r\n distWidth: distWidth,\r\n distHeight: distHeight,\r\n };\r\n}\r\nfunction convertTransformUnit(origin, xy) {\r\n if (xy) {\r\n if (origin === \"left\") {\r\n return { x: \"0%\", y: \"50%\" };\r\n }\r\n else if (origin === \"top\") {\r\n return { x: \"50%\", y: \"50%\" };\r\n }\r\n else if (origin === \"center\") {\r\n return { x: \"50%\", y: \"50%\" };\r\n }\r\n else if (origin === \"right\") {\r\n return { x: \"100%\", y: \"50%\" };\r\n }\r\n else if (origin === \"bottom\") {\r\n return { x: \"50%\", y: \"100%\" };\r\n }\r\n var _a = __read(origin.split(\" \"), 2), left = _a[0], right = _a[1];\r\n var leftOrigin = convertTransformUnit(left || \"\");\r\n var rightOrigin = convertTransformUnit(right || \"\");\r\n var originObject = __assign(__assign({}, leftOrigin), rightOrigin);\r\n var nextOriginObject = {\r\n x: \"50%\",\r\n y: \"50%\",\r\n };\r\n if (originObject.x) {\r\n nextOriginObject.x = originObject.x;\r\n }\r\n if (originObject.y) {\r\n nextOriginObject.y = originObject.y;\r\n }\r\n if (originObject.value) {\r\n if (originObject.x && !originObject.y) {\r\n nextOriginObject.y = originObject.value;\r\n }\r\n if (!originObject.x && originObject.y) {\r\n nextOriginObject.x = originObject.value;\r\n }\r\n }\r\n return nextOriginObject;\r\n }\r\n if (origin === \"left\") {\r\n return { x: \"0%\" };\r\n }\r\n if (origin === \"right\") {\r\n return { x: \"100%\" };\r\n }\r\n if (origin === \"top\") {\r\n return { y: \"0%\" };\r\n }\r\n if (origin === \"bottom\") {\r\n return { y: \"100%\" };\r\n }\r\n if (!origin) {\r\n return {};\r\n }\r\n if (origin === \"center\") {\r\n return { value: \"50%\" };\r\n }\r\n return { value: origin };\r\n}\r\nfunction convertTransformOriginArray(transformOrigin, width, height) {\r\n var _a = convertTransformUnit(transformOrigin, true), x = _a.x, y = _a.y;\r\n return [\r\n convertUnitSize(x, width) || 0,\r\n convertUnitSize(y, height) || 0,\r\n ];\r\n}\r\nfunction rotatePosesInfo(poses, origin, rad) {\r\n var prevPoses = poses.map(function (pos) { return minus(pos, origin); });\r\n var nextPoses = prevPoses.map(function (pos) { return rotate(pos, rad); });\r\n return {\r\n prev: prevPoses,\r\n next: nextPoses,\r\n result: nextPoses.map(function (pos) { return plus(pos, origin); }),\r\n };\r\n}\r\nfunction isDeepArrayEquals(arr1, arr2) {\r\n return arr1.length === arr2.length && arr1.every(function (value1, i) {\r\n var value2 = arr2[i];\r\n var isArray1 = isArray(value1);\r\n var isArray2 = isArray(value2);\r\n if (isArray1 && isArray2) {\r\n return isDeepArrayEquals(value1, value2);\r\n }\r\n else if (!isArray1 && !isArray2) {\r\n return value1 === value2;\r\n }\r\n return false;\r\n });\r\n}\r\nfunction watchValue(moveable, property, nextValue, valueKey, defaultValue) {\r\n var store = moveable._store;\r\n var prevValue = store[property];\r\n if (!(property in store)) {\r\n if (defaultValue != null) {\r\n store[property] = defaultValue;\r\n prevValue = defaultValue;\r\n }\r\n else {\r\n store[property] = nextValue;\r\n return nextValue;\r\n }\r\n }\r\n if (prevValue === nextValue || valueKey(prevValue) === valueKey(nextValue)) {\r\n return prevValue;\r\n }\r\n store[property] = nextValue;\r\n return nextValue;\r\n}\r\nfunction sign(value) {\r\n return value >= 0 ? 1 : -1;\r\n}\r\nfunction abs(value) {\r\n return Math.abs(value);\r\n}\r\nfunction countEach(count, callback) {\r\n return counter(count).map(function (index) { return callback(index); });\r\n}\r\nfunction getPaddingBox(padding) {\r\n if (isNumber(padding)) {\r\n return {\r\n top: padding,\r\n left: padding,\r\n right: padding,\r\n bottom: padding,\r\n };\r\n }\r\n return {\r\n left: padding.left || 0,\r\n top: padding.top || 0,\r\n right: padding.right || 0,\r\n bottom: padding.bottom || 0,\r\n };\r\n}\n\n/**\r\n * @namespace Moveable.Pinchable\r\n * @description Whether or not target can be pinched with draggable, resizable, scalable, rotatable (default: false)\r\n */\r\nvar Pinchable = makeAble(\"pinchable\", {\r\n props: [\r\n \"pinchable\",\r\n ],\r\n events: [\r\n \"pinchStart\",\r\n \"pinch\",\r\n \"pinchEnd\",\r\n \"pinchGroupStart\",\r\n \"pinchGroup\",\r\n \"pinchGroupEnd\",\r\n ],\r\n dragStart: function () {\r\n return true;\r\n },\r\n pinchStart: function (moveable, e) {\r\n var datas = e.datas, targets = e.targets, angle = e.angle, originalDatas = e.originalDatas;\r\n var _a = moveable.props, pinchable = _a.pinchable, ables = _a.ables;\r\n if (!pinchable) {\r\n return false;\r\n }\r\n var eventName = \"onPinch\".concat(targets ? \"Group\" : \"\", \"Start\");\r\n var controlEventName = \"drag\".concat(targets ? \"Group\" : \"\", \"ControlStart\");\r\n var pinchAbles = (pinchable === true ? moveable.controlAbles : ables.filter(function (able) {\r\n return pinchable.indexOf(able.name) > -1;\r\n })).filter(function (able) { return able.canPinch && able[controlEventName]; });\r\n var params = fillParams(moveable, e, {});\r\n if (targets) {\r\n params.targets = targets;\r\n }\r\n var result = triggerEvent(moveable, eventName, params);\r\n datas.isPinch = result !== false;\r\n datas.ables = pinchAbles;\r\n var isPinch = datas.isPinch;\r\n if (!isPinch) {\r\n return false;\r\n }\r\n pinchAbles.forEach(function (able) {\r\n originalDatas[able.name] = originalDatas[able.name] || {};\r\n if (!able[controlEventName]) {\r\n return;\r\n }\r\n var ableEvent = __assign(__assign({}, e), { datas: originalDatas[able.name], parentRotate: angle, isPinch: true });\r\n able[controlEventName](moveable, ableEvent);\r\n });\r\n moveable.state.snapRenderInfo = {\r\n request: e.isRequest,\r\n direction: [0, 0],\r\n };\r\n return isPinch;\r\n },\r\n pinch: function (moveable, e) {\r\n var datas = e.datas, pinchScale = e.scale, distance = e.distance, originalDatas = e.originalDatas, inputEvent = e.inputEvent, targets = e.targets, angle = e.angle;\r\n if (!datas.isPinch) {\r\n return;\r\n }\r\n var parentDistance = distance * (1 - 1 / pinchScale);\r\n var params = fillParams(moveable, e, {});\r\n if (targets) {\r\n params.targets = targets;\r\n }\r\n var eventName = \"onPinch\".concat(targets ? \"Group\" : \"\");\r\n triggerEvent(moveable, eventName, params);\r\n var ables = datas.ables;\r\n var controlEventName = \"drag\".concat(targets ? \"Group\" : \"\", \"Control\");\r\n ables.forEach(function (able) {\r\n if (!able[controlEventName]) {\r\n return;\r\n }\r\n able[controlEventName](moveable, __assign(__assign({}, e), { datas: originalDatas[able.name], inputEvent: inputEvent, resolveMatrix: true, pinchScale: pinchScale, parentDistance: parentDistance, parentRotate: angle, isPinch: true }));\r\n });\r\n return params;\r\n },\r\n pinchEnd: function (moveable, e) {\r\n var datas = e.datas, isPinch = e.isPinch, inputEvent = e.inputEvent, targets = e.targets, originalDatas = e.originalDatas;\r\n if (!datas.isPinch) {\r\n return;\r\n }\r\n var eventName = \"onPinch\".concat(targets ? \"Group\" : \"\", \"End\");\r\n var params = fillEndParams(moveable, e, { isDrag: isPinch });\r\n if (targets) {\r\n params.targets = targets;\r\n }\r\n triggerEvent(moveable, eventName, params);\r\n var ables = datas.ables;\r\n var controlEventName = \"drag\".concat(targets ? \"Group\" : \"\", \"ControlEnd\");\r\n ables.forEach(function (able) {\r\n if (!able[controlEventName]) {\r\n return;\r\n }\r\n able[controlEventName](moveable, __assign(__assign({}, e), { isDrag: isPinch, datas: originalDatas[able.name], inputEvent: inputEvent, isPinch: true }));\r\n });\r\n return isPinch;\r\n },\r\n pinchGroupStart: function (moveable, e) {\r\n return this.pinchStart(moveable, __assign(__assign({}, e), { targets: moveable.props.targets }));\r\n },\r\n pinchGroup: function (moveable, e) {\r\n return this.pinch(moveable, __assign(__assign({}, e), { targets: moveable.props.targets }));\r\n },\r\n pinchGroupEnd: function (moveable, e) {\r\n return this.pinchEnd(moveable, __assign(__assign({}, e), { targets: moveable.props.targets }));\r\n },\r\n});\r\n/**\r\n * Whether or not target can be pinched with draggable, resizable, scalable, rotatable (default: false)\r\n * @name Moveable.Pinchable#pinchable\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.pinchable = true;\r\n */\r\n/**\r\n * When the pinch starts, the pinchStart event is called with part of scaleStart, rotateStart, resizeStart\r\n * @memberof Moveable.Pinchable\r\n * @event pinchStart\r\n * @param {Moveable.Pinchable.OnPinchStart} - Parameters for the pinchStart event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * rotatable: true,\r\n * scalable: true,\r\n * pinchable: true, // [\"rotatable\", \"scalable\"]\r\n * });\r\n * moveable.on(\"pinchStart\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n * moveable.on(\"rotateStart\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n * moveable.on(\"scaleStart\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n */\r\n/**\r\n * When pinching, the pinch event is called with part of scale, rotate, resize\r\n * @memberof Moveable.Pinchable\r\n * @event pinch\r\n * @param {Moveable.Pinchable.OnPinch} - Parameters for the pinch event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * rotatable: true,\r\n * scalable: true,\r\n * pinchable: true, // [\"rotatable\", \"scalable\"]\r\n * });\r\n * moveable.on(\"pinch\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n * moveable.on(\"rotate\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n * moveable.on(\"scale\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n */\r\n/**\r\n * When the pinch finishes, the pinchEnd event is called.\r\n * @memberof Moveable.Pinchable\r\n * @event pinchEnd\r\n * @param {Moveable.Pinchable.OnPinchEnd} - Parameters for the pinchEnd event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * rotatable: true,\r\n * scalable: true,\r\n * pinchable: true, // [\"rotatable\", \"scalable\"]\r\n * });\r\n * moveable.on(\"pinchEnd\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n * moveable.on(\"rotateEnd\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n * moveable.on(\"scaleEnd\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n */\r\n/**\r\n * When the group pinch starts, the `pinchGroupStart` event is called.\r\n * @memberof Moveable.Pinchable\r\n * @event pinchGroupStart\r\n * @param {Moveable.Pinchable.OnPinchGroupStart} - Parameters for the `pinchGroupStart` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * pinchable: true\r\n * });\r\n * moveable.on(\"pinchGroupStart\", ({ targets }) => {\r\n * console.log(\"onPinchGroupStart\", targets);\r\n * });\r\n */\r\n/**\r\n * When the group pinch, the `pinchGroup` event is called.\r\n * @memberof Moveable.Pinchable\r\n * @event pinchGroup\r\n * @param {Moveable.Pinchable.OnPinchGroup} - Parameters for the `pinchGroup` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * pinchable: true\r\n * });\r\n * moveable.on(\"pinchGroup\", ({ targets, events }) => {\r\n * console.log(\"onPinchGroup\", targets);\r\n * });\r\n */\r\n/**\r\n * When the group pinch finishes, the `pinchGroupEnd` event is called.\r\n * @memberof Moveable.Pinchable\r\n * @event pinchGroupEnd\r\n * @param {Moveable.Pinchable.OnPinchGroupEnd} - Parameters for the `pinchGroupEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * pinchable: true\r\n * });\r\n * moveable.on(\"pinchGroupEnd\", ({ targets, isDrag }) => {\r\n * console.log(\"onPinchGroupEnd\", targets, isDrag);\r\n * });\r\n */\n\nvar directionCondition = getDirectionCondition(\"scalable\");\r\n/**\r\n * @namespace Scalable\r\n * @memberof Moveable\r\n * @description Scalable indicates whether the target's x and y can be scale of transform.\r\n */\r\nvar Scalable = {\r\n name: \"scalable\",\r\n ableGroup: \"size\",\r\n canPinch: true,\r\n props: [\r\n \"scalable\",\r\n \"throttleScale\",\r\n \"renderDirections\",\r\n \"keepRatio\",\r\n \"edge\",\r\n \"displayAroundControls\",\r\n ],\r\n events: [\r\n \"scaleStart\",\r\n \"beforeScale\",\r\n \"scale\",\r\n \"scaleEnd\",\r\n \"scaleGroupStart\",\r\n \"beforeScaleGroup\",\r\n \"scaleGroup\",\r\n \"scaleGroupEnd\",\r\n ],\r\n render: getRenderDirections(\"scalable\"),\r\n dragControlCondition: directionCondition,\r\n viewClassName: getDirectionViewClassName(\"scalable\"),\r\n dragControlStart: function (moveable, e) {\r\n var datas = e.datas, isPinch = e.isPinch, inputEvent = e.inputEvent, parentDirection = e.parentDirection;\r\n var direction = getTotalDirection(parentDirection, isPinch, inputEvent, datas);\r\n var _a = moveable.state, width = _a.width, height = _a.height, targetTransform = _a.targetTransform, target = _a.target, pos1 = _a.pos1, pos2 = _a.pos2, pos4 = _a.pos4;\r\n if (!direction || !target) {\r\n return false;\r\n }\r\n if (!isPinch) {\r\n setDragStart(moveable, e);\r\n }\r\n datas.datas = {};\r\n datas.transform = targetTransform;\r\n datas.prevDist = [1, 1];\r\n datas.direction = direction;\r\n datas.startOffsetWidth = width;\r\n datas.startOffsetHeight = height;\r\n datas.startValue = [1, 1];\r\n // const scaleWidth = getDist(pos1, pos2);\r\n // const scaleHeight = getDist(pos2, pos4);\r\n var isWidth = (!direction[0] && !direction[1]) || direction[0] || !direction[1];\r\n // datas.scaleWidth = scaleWidth;\r\n // datas.scaleHeight = scaleHeight;\r\n // datas.scaleXRatio = scaleWidth / width;\r\n // datas.scaleYRatio = scaleHeight / height;\r\n setDefaultTransformIndex(moveable, e, \"scale\");\r\n datas.isWidth = isWidth;\r\n function setRatio(ratio) {\r\n datas.ratio = ratio && isFinite(ratio) ? ratio : 0;\r\n }\r\n datas.startPositions = getAbsolutePosesByState(moveable.state);\r\n function setFixedDirection(fixedDirection) {\r\n var result = getFixedDirectionInfo(datas.startPositions, fixedDirection);\r\n datas.fixedDirection = result.fixedDirection;\r\n datas.fixedPosition = result.fixedPosition;\r\n datas.fixedOffset = result.fixedOffset;\r\n }\r\n datas.setFixedDirection = setFixedDirection;\r\n setRatio(getDist$1(pos1, pos2) / getDist$1(pos2, pos4));\r\n setFixedDirection([-direction[0], -direction[1]]);\r\n var setMinScaleSize = function (min) {\r\n datas.minScaleSize = min;\r\n };\r\n var setMaxScaleSize = function (max) {\r\n datas.maxScaleSize = max;\r\n };\r\n // const setMinScale = (min: number[]) => {\r\n // };\r\n // const setMaxScale = (max: number[]) => {\r\n // };\r\n setMinScaleSize([-Infinity, -Infinity]);\r\n setMaxScaleSize([Infinity, Infinity]);\r\n var params = fillParams(moveable, e, __assign(__assign({ direction: direction, set: function (scale) {\r\n datas.startValue = scale;\r\n }, setRatio: setRatio, setFixedDirection: setFixedDirection, setMinScaleSize: setMinScaleSize, setMaxScaleSize: setMaxScaleSize }, fillTransformStartEvent(moveable, e)), { dragStart: Draggable.dragStart(moveable, new CustomGesto().dragStart([0, 0], e)) }));\r\n var result = triggerEvent(moveable, \"onScaleStart\", params);\r\n datas.startFixedDirection = datas.fixedDirection;\r\n if (result !== false) {\r\n datas.isScale = true;\r\n moveable.state.snapRenderInfo = {\r\n request: e.isRequest,\r\n direction: direction,\r\n };\r\n }\r\n return datas.isScale ? params : false;\r\n },\r\n dragControl: function (moveable, e) {\r\n resolveTransformEvent(moveable, e, \"scale\");\r\n var datas = e.datas, parentKeepRatio = e.parentKeepRatio, parentFlag = e.parentFlag, isPinch = e.isPinch, dragClient = e.dragClient, isRequest = e.isRequest, useSnap = e.useSnap, resolveMatrix = e.resolveMatrix;\r\n var prevDist = datas.prevDist, direction = datas.direction, startOffsetWidth = datas.startOffsetWidth, startOffsetHeight = datas.startOffsetHeight, isScale = datas.isScale, startValue = datas.startValue, isWidth = datas.isWidth, ratio = datas.ratio;\r\n if (!isScale) {\r\n return false;\r\n }\r\n var props = moveable.props;\r\n var throttleScale = props.throttleScale, parentMoveable = props.parentMoveable;\r\n var sizeDirection = direction;\r\n if (!direction[0] && !direction[1]) {\r\n sizeDirection = [1, 1];\r\n }\r\n var keepRatio = (ratio && (parentKeepRatio != null ? parentKeepRatio : props.keepRatio)) || false;\r\n var state = moveable.state;\r\n var tempScaleValue = [\r\n startValue[0],\r\n startValue[1],\r\n ];\r\n function getNextScale() {\r\n var _a = getOffsetSizeDist(sizeDirection, keepRatio, datas, e), distWidth = _a.distWidth, distHeight = _a.distHeight;\r\n var distX = startOffsetWidth ? (startOffsetWidth + distWidth) / startOffsetWidth : 1;\r\n var distY = startOffsetHeight ? (startOffsetHeight + distHeight) / startOffsetHeight : 1;\r\n if (!startValue[0]) {\r\n tempScaleValue[0] = distWidth / startOffsetWidth;\r\n }\r\n if (!startValue[1]) {\r\n tempScaleValue[1] = distHeight / startOffsetHeight;\r\n }\r\n var scaleX = (sizeDirection[0] || keepRatio ? distX : 1) * tempScaleValue[0];\r\n var scaleY = (sizeDirection[1] || keepRatio ? distY : 1) * tempScaleValue[1];\r\n if (scaleX === 0) {\r\n scaleX = sign(prevDist[0]) * MIN_SCALE;\r\n }\r\n if (scaleY === 0) {\r\n scaleY = sign(prevDist[1]) * MIN_SCALE;\r\n }\r\n return [scaleX, scaleY];\r\n }\r\n var scale = getNextScale();\r\n if (!isPinch && moveable.props.groupable) {\r\n var snapRenderInfo = state.snapRenderInfo || {};\r\n var stateDirection = snapRenderInfo.direction;\r\n if (isArray(stateDirection) && (stateDirection[0] || stateDirection[1])) {\r\n state.snapRenderInfo = { direction: direction, request: e.isRequest };\r\n }\r\n }\r\n triggerEvent(moveable, \"onBeforeScale\", fillParams(moveable, e, {\r\n scale: scale,\r\n setFixedDirection: function (nextFixedDirection) {\r\n datas.setFixedDirection(nextFixedDirection);\r\n scale = getNextScale();\r\n return scale;\r\n },\r\n startFixedDirection: datas.startFixedDirection,\r\n setScale: function (nextScale) {\r\n scale = nextScale;\r\n },\r\n }, true));\r\n var dist = [\r\n scale[0] / tempScaleValue[0],\r\n scale[1] / tempScaleValue[1],\r\n ];\r\n var fixedPosition = dragClient;\r\n var snapDist = [0, 0];\r\n var distSign = sign(dist[0] * dist[1]);\r\n var isSelfPinch = !dragClient && !parentFlag && isPinch;\r\n if (isSelfPinch || resolveMatrix) {\r\n fixedPosition = getTranslateFixedPosition(moveable, datas.targetAllTransform, [0, 0], [0, 0], datas);\r\n }\r\n else if (!dragClient) {\r\n fixedPosition = datas.fixedPosition;\r\n }\r\n if (!isPinch) {\r\n snapDist = checkSnapScale(moveable, dist, direction, !useSnap && isRequest, datas);\r\n }\r\n if (keepRatio) {\r\n if (sizeDirection[0] && sizeDirection[1] && snapDist[0] && snapDist[1]) {\r\n if (Math.abs(snapDist[0] * startOffsetWidth) > Math.abs(snapDist[1] * startOffsetHeight)) {\r\n snapDist[1] = 0;\r\n }\r\n else {\r\n snapDist[0] = 0;\r\n }\r\n }\r\n var isNoSnap = !snapDist[0] && !snapDist[1];\r\n if (isNoSnap) {\r\n // throttle scale value (not absolute scale size)\r\n if (isWidth) {\r\n dist[0] = throttle(dist[0] * tempScaleValue[0], throttleScale) / tempScaleValue[0];\r\n }\r\n else {\r\n dist[1] = throttle(dist[1] * tempScaleValue[1], throttleScale) / tempScaleValue[1];\r\n }\r\n }\r\n if ((sizeDirection[0] && !sizeDirection[1])\r\n || (snapDist[0] && !snapDist[1])\r\n || (isNoSnap && isWidth)) {\r\n dist[0] += snapDist[0];\r\n var snapHeight = startOffsetWidth * dist[0] * tempScaleValue[0] / ratio;\r\n dist[1] = sign(distSign * dist[0]) * abs(snapHeight / startOffsetHeight / tempScaleValue[1]);\r\n }\r\n else if ((!sizeDirection[0] && sizeDirection[1])\r\n || (!snapDist[0] && snapDist[1])\r\n || (isNoSnap && !isWidth)) {\r\n dist[1] += snapDist[1];\r\n var snapWidth = startOffsetHeight * dist[1] * tempScaleValue[1] * ratio;\r\n dist[0] = sign(distSign * dist[1]) * abs(snapWidth / startOffsetWidth / tempScaleValue[0]);\r\n }\r\n }\r\n else {\r\n dist[0] += snapDist[0];\r\n dist[1] += snapDist[1];\r\n if (!snapDist[0]) {\r\n dist[0] = throttle(dist[0] * tempScaleValue[0], throttleScale) / tempScaleValue[0];\r\n }\r\n if (!snapDist[1]) {\r\n dist[1] = throttle(dist[1] * tempScaleValue[1], throttleScale) / tempScaleValue[1];\r\n }\r\n }\r\n if (dist[0] === 0) {\r\n dist[0] = sign(prevDist[0]) * MIN_SCALE;\r\n }\r\n if (dist[1] === 0) {\r\n dist[1] = sign(prevDist[1]) * MIN_SCALE;\r\n }\r\n scale = multiply2(dist, [tempScaleValue[0], tempScaleValue[1]]);\r\n var startOffsetSize = [\r\n startOffsetWidth,\r\n startOffsetHeight,\r\n ];\r\n var scaleSize = [\r\n startOffsetWidth * scale[0],\r\n startOffsetHeight * scale[1],\r\n ];\r\n scaleSize = calculateBoundSize(scaleSize, datas.minScaleSize, datas.maxScaleSize, keepRatio ? ratio : false);\r\n // if (keepRatio && (isGroup || keepRatioFinally)) {\r\n // if (isWidth) {\r\n // boundingHeight = boundingWidth / ratio;\r\n // } else {\r\n // boundingWidth = boundingHeight * ratio;\r\n // }\r\n // }\r\n scale = countEach(2, function (i) {\r\n return startOffsetSize[i] ? scaleSize[i] / startOffsetSize[i] : scaleSize[i];\r\n });\r\n dist = countEach(2, function (i) {\r\n return scale[i] / tempScaleValue[i];\r\n });\r\n var delta = countEach(2, function (i) { return prevDist[i] ? dist[i] / prevDist[i] : dist[i]; });\r\n var distText = \"scale(\".concat(dist.join(\", \"), \")\");\r\n var scaleText = \"scale(\".concat(scale.join(\", \"), \")\");\r\n var nextTransform = convertTransformFormat(datas, scaleText, distText);\r\n var isZeroScale = !startValue[0] || !startValue[1];\r\n var inverseDist = getScaleDist(moveable, isZeroScale ? scaleText : distText, datas.fixedDirection, fixedPosition, datas.fixedOffset, datas, isZeroScale);\r\n var inverseDelta = isSelfPinch ? inverseDist : minus(inverseDist, datas.prevInverseDist || [0, 0]);\r\n datas.prevDist = dist;\r\n datas.prevInverseDist = inverseDist;\r\n if (scale[0] === prevDist[0] && scale[1] === prevDist[1]\r\n && inverseDelta.every(function (num) { return !num; })\r\n && !parentMoveable\r\n && !isSelfPinch) {\r\n return false;\r\n }\r\n var params = fillParams(moveable, e, __assign({ offsetWidth: startOffsetWidth, offsetHeight: startOffsetHeight, direction: direction, scale: scale, dist: dist, delta: delta, isPinch: !!isPinch }, fillTransformEvent(moveable, nextTransform, inverseDelta, isPinch, e)));\r\n triggerEvent(moveable, \"onScale\", params);\r\n return params;\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n var datas = e.datas;\r\n if (!datas.isScale) {\r\n return false;\r\n }\r\n datas.isScale = false;\r\n var scaleEndParam = fillEndParams(moveable, e, {});\r\n triggerEvent(moveable, \"onScaleEnd\", scaleEndParam);\r\n return scaleEndParam;\r\n },\r\n dragGroupControlCondition: directionCondition,\r\n dragGroupControlStart: function (moveable, e) {\r\n var datas = e.datas;\r\n var params = this.dragControlStart(moveable, e);\r\n if (!params) {\r\n return false;\r\n }\r\n var originalEvents = fillChildEvents(moveable, \"resizable\", e);\r\n datas.moveableScale = moveable.scale;\r\n var events = triggerChildAbles(moveable, this, \"dragControlStart\", e, function (child, ev) {\r\n return startChildDist(moveable, child, datas, ev);\r\n });\r\n var setFixedDirection = function (fixedDirection) {\r\n params.setFixedDirection(fixedDirection);\r\n events.forEach(function (ev, i) {\r\n ev.setFixedDirection(fixedDirection);\r\n startChildDist(moveable, ev.moveable, datas, originalEvents[i]);\r\n });\r\n };\r\n datas.setFixedDirection = setFixedDirection;\r\n var nextParams = __assign(__assign({}, params), { targets: moveable.props.targets, events: events, setFixedDirection: setFixedDirection });\r\n var result = triggerEvent(moveable, \"onScaleGroupStart\", nextParams);\r\n datas.isScale = result !== false;\r\n return datas.isScale ? nextParams : false;\r\n },\r\n dragGroupControl: function (moveable, e) {\r\n var datas = e.datas;\r\n if (!datas.isScale) {\r\n return;\r\n }\r\n catchEvent(moveable, \"onBeforeScale\", function (parentEvent) {\r\n triggerEvent(moveable, \"onBeforeScaleGroup\", fillParams(moveable, e, __assign(__assign({}, parentEvent), { targets: moveable.props.targets }), true));\r\n });\r\n var params = this.dragControl(moveable, e);\r\n if (!params) {\r\n return;\r\n }\r\n var dist = params.dist;\r\n var moveableScale = datas.moveableScale;\r\n moveable.scale = [\r\n dist[0] * moveableScale[0],\r\n dist[1] * moveableScale[1],\r\n ];\r\n var keepRatio = moveable.props.keepRatio;\r\n var fixedPosition = datas.fixedPosition;\r\n var events = triggerChildAbles(moveable, this, \"dragControl\", e, function (_, ev) {\r\n var _a = __read(calculate(createRotateMatrix(moveable.rotation / 180 * Math.PI, 3), [\r\n ev.datas.originalX * dist[0],\r\n ev.datas.originalY * dist[1],\r\n 1,\r\n ], 3), 2), clientX = _a[0], clientY = _a[1];\r\n return __assign(__assign({}, ev), { parentDist: null, parentScale: dist, parentKeepRatio: keepRatio, \r\n // recalculate child fixed position for parent group's dragging.\r\n dragClient: plus(fixedPosition, [clientX, clientY]) });\r\n });\r\n var nextParams = __assign({ targets: moveable.props.targets, events: events }, params);\r\n triggerEvent(moveable, \"onScaleGroup\", nextParams);\r\n return nextParams;\r\n },\r\n dragGroupControlEnd: function (moveable, e) {\r\n var isDrag = e.isDrag, datas = e.datas;\r\n if (!datas.isScale) {\r\n return;\r\n }\r\n this.dragControlEnd(moveable, e);\r\n var events = triggerChildAbles(moveable, this, \"dragControlEnd\", e);\r\n var nextParams = fillEndParams(moveable, e, {\r\n targets: moveable.props.targets,\r\n events: events,\r\n });\r\n triggerEvent(moveable, \"onScaleGroupEnd\", nextParams);\r\n return isDrag;\r\n },\r\n /**\r\n * @method Moveable.Scalable#request\r\n * @param {Moveable.Scalable.ScalableRequestParam} e - the Scalable's request parameter\r\n * @return {Moveable.Requester} Moveable Requester\r\n * @example\r\n\n * // Instantly Request (requestStart - request - requestEnd)\r\n * moveable.request(\"scalable\", { deltaWidth: 10, deltaHeight: 10 }, true);\r\n *\r\n * // requestStart\r\n * const requester = moveable.request(\"scalable\");\r\n *\r\n * // request\r\n * requester.request({ deltaWidth: 10, deltaHeight: 10 });\r\n * requester.request({ deltaWidth: 10, deltaHeight: 10 });\r\n * requester.request({ deltaWidth: 10, deltaHeight: 10 });\r\n *\r\n * // requestEnd\r\n * requester.requestEnd();\r\n */\r\n request: function () {\r\n var datas = {};\r\n var distWidth = 0;\r\n var distHeight = 0;\r\n var useSnap = false;\r\n return {\r\n isControl: true,\r\n requestStart: function (e) {\r\n useSnap = e.useSnap;\r\n return {\r\n datas: datas,\r\n parentDirection: e.direction || [1, 1],\r\n useSnap: useSnap,\r\n };\r\n },\r\n request: function (e) {\r\n distWidth += e.deltaWidth;\r\n distHeight += e.deltaHeight;\r\n return {\r\n datas: datas,\r\n parentDist: [distWidth, distHeight],\r\n parentKeepRatio: e.keepRatio,\r\n useSnap: useSnap,\r\n };\r\n },\r\n requestEnd: function () {\r\n return { datas: datas, isDrag: true, useSnap: useSnap };\r\n },\r\n };\r\n },\r\n};\r\n/**\r\n * Whether or not target can scaled.\r\n *\r\n * @name Moveable.Scalable#scalable\r\n * @default false\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.scalable = true;\r\n */\r\n/**\r\n * throttle of scaleX, scaleY when scale.\r\n * @name Moveable.Scalable#throttleScale\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.throttleScale = 0.1;\r\n */\r\n/**\r\n * Set directions to show the control box. (default: [\"n\", \"nw\", \"ne\", \"s\", \"se\", \"sw\", \"e\", \"w\"])\r\n * @name Moveable.Scalable#renderDirections\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * scalable: true,\r\n * renderDirections: [\"n\", \"nw\", \"ne\", \"s\", \"se\", \"sw\", \"e\", \"w\"],\r\n * });\r\n *\r\n * moveable.renderDirections = [\"nw\", \"ne\", \"sw\", \"se\"];\r\n */\r\n/**\r\n * When resize or scale, keeps a ratio of the width, height. (default: false)\r\n * @name Moveable.Scalable#keepRatio\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * scalable: true,\r\n * });\r\n *\r\n * moveable.keepRatio = true;\r\n */\r\n/**\r\n * When the scale starts, the scaleStart event is called.\r\n * @memberof Moveable.Scalable\r\n * @event scaleStart\r\n * @param {Moveable.Scalable.OnScaleStart} - Parameters for the scaleStart event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { scalable: true });\r\n * moveable.on(\"scaleStart\", ({ target }) => {\r\n * console.log(target);\r\n * });\r\n */\r\n/**\r\n * When scaling, `beforeScale` is called before `scale` occurs. In `beforeScale`, you can get and set the pre-value before scaling.\r\n * @memberof Moveable.Scalable\r\n * @event beforeScale\r\n * @param {Moveable.Scalable.OnBeforeScale} - Parameters for the `beforeScale` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { scalable: true });\r\n * moveable.on(\"beforeScale\", ({ setFixedDirection }) => {\r\n * if (shiftKey) {\r\n * setFixedDirection([0, 0]);\r\n * }\r\n * });\r\n * moveable.on(\"scale\", ({ target, transform, dist }) => {\r\n * target.style.transform = transform;\r\n * });\r\n */\r\n/**\r\n * When scaling, the `scale` event is called.\r\n * @memberof Moveable.Scalable\r\n * @event scale\r\n * @param {Moveable.Scalable.OnScale} - Parameters for the `scale` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { scalable: true });\r\n * moveable.on(\"scale\", ({ target, transform, dist }) => {\r\n * target.style.transform = transform;\r\n * });\r\n */\r\n/**\r\n * When the scale finishes, the `scaleEnd` event is called.\r\n * @memberof Moveable.Scalable\r\n * @event scaleEnd\r\n * @param {Moveable.Scalable.OnScaleEnd} - Parameters for the `scaleEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { scalable: true });\r\n * moveable.on(\"scaleEnd\", ({ target, isDrag }) => {\r\n * console.log(target, isDrag);\r\n * });\r\n */\r\n/**\r\n* When the group scale starts, the `scaleGroupStart` event is called.\r\n* @memberof Moveable.Scalable\r\n* @event scaleGroupStart\r\n* @param {Moveable.Scalable.OnScaleGroupStart} - Parameters for the `scaleGroupStart` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* target: [].slice.call(document.querySelectorAll(\".target\")),\r\n* scalable: true\r\n* });\r\n* moveable.on(\"scaleGroupStart\", ({ targets }) => {\r\n* console.log(\"onScaleGroupStart\", targets);\r\n* });\r\n*/\r\n/**\r\n* When the group scale, the `scaleGroup` event is called.\r\n* @memberof Moveable.Scalable\r\n* @event scaleGroup\r\n* @param {Moveable.Scalable.OnScaleGroup} - Parameters for the `scaleGroup` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* target: [].slice.call(document.querySelectorAll(\".target\")),\r\n* scalable: true\r\n* });\r\n* moveable.on(\"scaleGroup\", ({ targets, events }) => {\r\n* console.log(\"onScaleGroup\", targets);\r\n* events.forEach(ev => {\r\n* const target = ev.target;\r\n* // ev.drag is a drag event that occurs when the group scale.\r\n* const left = ev.drag.beforeDist[0];\r\n* const top = ev.drag.beforeDist[1];\r\n* const scaleX = ev.scale[0];\r\n* const scaleY = ev.scale[1];\r\n* });\r\n* });\r\n*/\r\n/**\r\n * When the group scale finishes, the `scaleGroupEnd` event is called.\r\n * @memberof Moveable.Scalable\r\n * @event scaleGroupEnd\r\n * @param {Moveable.Scalable.OnScaleGroupEnd} - Parameters for the `scaleGroupEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * scalable: true\r\n * });\r\n * moveable.on(\"scaleGroupEnd\", ({ targets, isDrag }) => {\r\n * console.log(\"onScaleGroupEnd\", targets, isDrag);\r\n * });\r\n */\n\nfunction getMiddleLinePos(pos1, pos2) {\r\n return pos1.map(function (pos, i) { return dot(pos, pos2[i], 1, 2); });\r\n}\r\nfunction getTriangleRad(pos1, pos2, pos3) {\r\n // pos1 Rad\r\n var rad1 = getRad(pos1, pos2);\r\n var rad2 = getRad(pos1, pos3);\r\n var rad = rad2 - rad1;\r\n return rad >= 0 ? rad : rad + 2 * Math.PI;\r\n}\r\nfunction isValidPos(poses1, poses2) {\r\n var rad1 = getTriangleRad(poses1[0], poses1[1], poses1[2]);\r\n var rad2 = getTriangleRad(poses2[0], poses2[1], poses2[2]);\r\n var pi = Math.PI;\r\n if ((rad1 >= pi && rad2 <= pi) || (rad1 <= pi && rad2 >= pi)) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n/**\r\n * @namespace Moveable.Warpable\r\n * @description Warpable indicates whether the target can be warped(distorted, bented).\r\n */\r\nvar Warpable = {\r\n name: \"warpable\",\r\n ableGroup: \"size\",\r\n props: [\r\n \"warpable\",\r\n \"renderDirections\",\r\n \"edge\",\r\n \"displayAroundControls\",\r\n ],\r\n events: [\r\n \"warpStart\",\r\n \"warp\",\r\n \"warpEnd\",\r\n ],\r\n viewClassName: getDirectionViewClassName(\"warpable\"),\r\n render: function (moveable, React) {\r\n var _a = moveable.props, resizable = _a.resizable, scalable = _a.scalable, warpable = _a.warpable, zoom = _a.zoom;\r\n if (resizable || scalable || !warpable) {\r\n return [];\r\n }\r\n var _b = moveable.state, pos1 = _b.pos1, pos2 = _b.pos2, pos3 = _b.pos3, pos4 = _b.pos4;\r\n var linePosFrom1 = getMiddleLinePos(pos1, pos2);\r\n var linePosFrom2 = getMiddleLinePos(pos2, pos1);\r\n var linePosFrom3 = getMiddleLinePos(pos1, pos3);\r\n var linePosFrom4 = getMiddleLinePos(pos3, pos1);\r\n var linePosTo1 = getMiddleLinePos(pos3, pos4);\r\n var linePosTo2 = getMiddleLinePos(pos4, pos3);\r\n var linePosTo3 = getMiddleLinePos(pos2, pos4);\r\n var linePosTo4 = getMiddleLinePos(pos4, pos2);\r\n return __spreadArray([\r\n React.createElement(\"div\", { className: prefix(\"line\"), key: \"middeLine1\", style: getLineStyle(linePosFrom1, linePosTo1, zoom) }),\r\n React.createElement(\"div\", { className: prefix(\"line\"), key: \"middeLine2\", style: getLineStyle(linePosFrom2, linePosTo2, zoom) }),\r\n React.createElement(\"div\", { className: prefix(\"line\"), key: \"middeLine3\", style: getLineStyle(linePosFrom3, linePosTo3, zoom) }),\r\n React.createElement(\"div\", { className: prefix(\"line\"), key: \"middeLine4\", style: getLineStyle(linePosFrom4, linePosTo4, zoom) })\r\n ], __read(renderAllDirections(moveable, \"warpable\", React)), false);\r\n },\r\n dragControlCondition: function (moveable, e) {\r\n if (e.isRequest) {\r\n return false;\r\n }\r\n var target = e.inputEvent.target;\r\n return hasClass(target, prefix(\"direction\")) && hasClass(target, prefix(\"warpable\"));\r\n },\r\n dragControlStart: function (moveable, e) {\r\n var datas = e.datas, inputEvent = e.inputEvent;\r\n var target = moveable.props.target;\r\n var inputTarget = inputEvent.target;\r\n var direction = getDirection(inputTarget, datas);\r\n if (!direction || !target) {\r\n return false;\r\n }\r\n var state = moveable.state;\r\n var transformOrigin = state.transformOrigin, is3d = state.is3d, targetTransform = state.targetTransform, targetMatrix = state.targetMatrix, width = state.width, height = state.height, left = state.left, top = state.top;\r\n datas.datas = {};\r\n datas.targetTransform = targetTransform;\r\n datas.warpTargetMatrix = is3d ? targetMatrix : convertDimension(targetMatrix, 3, 4);\r\n datas.targetInverseMatrix = ignoreDimension(invert(datas.warpTargetMatrix, 4), 3, 4);\r\n datas.direction = direction;\r\n datas.left = left;\r\n datas.top = top;\r\n datas.poses = [\r\n [0, 0],\r\n [width, 0],\r\n [0, height],\r\n [width, height],\r\n ].map(function (p) { return minus(p, transformOrigin); });\r\n datas.nextPoses = datas.poses.map(function (_a) {\r\n var _b = __read(_a, 2), x = _b[0], y = _b[1];\r\n return calculate(datas.warpTargetMatrix, [x, y, 0, 1], 4);\r\n });\r\n datas.startValue = createIdentityMatrix(4);\r\n datas.prevMatrix = createIdentityMatrix(4);\r\n datas.absolutePoses = getAbsolutePosesByState(state);\r\n datas.posIndexes = getPosIndexesByDirection(direction);\r\n setDragStart(moveable, e);\r\n setDefaultTransformIndex(moveable, e, \"matrix3d\");\r\n state.snapRenderInfo = {\r\n request: e.isRequest,\r\n direction: direction,\r\n };\r\n var params = fillParams(moveable, e, __assign({ set: function (matrix) {\r\n datas.startValue = matrix;\r\n } }, fillTransformStartEvent(moveable, e)));\r\n var result = triggerEvent(moveable, \"onWarpStart\", params);\r\n if (result !== false) {\r\n datas.isWarp = true;\r\n }\r\n return datas.isWarp;\r\n },\r\n dragControl: function (moveable, e) {\r\n var datas = e.datas, isRequest = e.isRequest;\r\n var distX = e.distX, distY = e.distY;\r\n var targetInverseMatrix = datas.targetInverseMatrix, prevMatrix = datas.prevMatrix, isWarp = datas.isWarp, startValue = datas.startValue, poses = datas.poses, posIndexes = datas.posIndexes, absolutePoses = datas.absolutePoses;\r\n if (!isWarp) {\r\n return false;\r\n }\r\n resolveTransformEvent(moveable, e, \"matrix3d\");\r\n if (hasGuidelines(moveable, \"warpable\")) {\r\n var selectedPoses = posIndexes.map(function (index) { return absolutePoses[index]; });\r\n if (selectedPoses.length > 1) {\r\n selectedPoses.push([\r\n (selectedPoses[0][0] + selectedPoses[1][0]) / 2,\r\n (selectedPoses[0][1] + selectedPoses[1][1]) / 2,\r\n ]);\r\n }\r\n var _a = checkMoveableSnapBounds(moveable, isRequest, {\r\n horizontal: selectedPoses.map(function (pos) { return pos[1] + distY; }),\r\n vertical: selectedPoses.map(function (pos) { return pos[0] + distX; }),\r\n }), horizontalSnapInfo = _a.horizontal, verticalSnapInfo = _a.vertical;\r\n distY -= horizontalSnapInfo.offset;\r\n distX -= verticalSnapInfo.offset;\r\n }\r\n var dist = getDragDist({ datas: datas, distX: distX, distY: distY }, true);\r\n var nextPoses = datas.nextPoses.slice();\r\n posIndexes.forEach(function (index) {\r\n nextPoses[index] = plus(nextPoses[index], dist);\r\n });\r\n if (!NEARBY_POS.every(function (nearByPoses) { return isValidPos(nearByPoses.map(function (i) { return poses[i]; }), nearByPoses.map(function (i) { return nextPoses[i]; })); })) {\r\n return false;\r\n }\r\n var h = createWarpMatrix(poses[0], poses[2], poses[1], poses[3], nextPoses[0], nextPoses[2], nextPoses[1], nextPoses[3]);\r\n if (!h.length) {\r\n return false;\r\n }\r\n // B * A * M\r\n var afterMatrix = multiply(targetInverseMatrix, h, 4);\r\n // B * M * A\r\n var matrix = getTransfromMatrix(datas, afterMatrix, true);\r\n var delta = multiply(invert(prevMatrix, 4), matrix, 4);\r\n datas.prevMatrix = matrix;\r\n var totalMatrix = multiply(startValue, matrix, 4);\r\n var nextTransform = convertTransformFormat(datas, \"matrix3d(\".concat(totalMatrix.join(\", \"), \")\"), \"matrix3d(\".concat(matrix.join(\", \"), \")\"));\r\n fillOriginalTransform(e, nextTransform);\r\n triggerEvent(moveable, \"onWarp\", fillParams(moveable, e, __assign({ delta: delta, matrix: totalMatrix, dist: matrix, multiply: multiply, transform: nextTransform }, fillCSSObject({\r\n transform: nextTransform,\r\n }, e))));\r\n return true;\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n var datas = e.datas, isDrag = e.isDrag;\r\n if (!datas.isWarp) {\r\n return false;\r\n }\r\n datas.isWarp = false;\r\n triggerEvent(moveable, \"onWarpEnd\", fillEndParams(moveable, e, {}));\r\n return isDrag;\r\n },\r\n};\r\n/**\r\n * Whether or not target can be warped. (default: false)\r\n * @name Moveable.Warpable#warpable\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.warpable = true;\r\n */\r\n/**\r\n* Set directions to show the control box. (default: [\"n\", \"nw\", \"ne\", \"s\", \"se\", \"sw\", \"e\", \"w\"])\r\n* @name Moveable.Warpable#renderDirections\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* warpable: true,\r\n* renderDirections: [\"n\", \"nw\", \"ne\", \"s\", \"se\", \"sw\", \"e\", \"w\"],\r\n* });\r\n*\r\n* moveable.renderDirections = [\"nw\", \"ne\", \"sw\", \"se\"];\r\n*/\r\n/**\r\n* When the warp starts, the warpStart event is called.\r\n* @memberof Moveable.Warpable\r\n* @event warpStart\r\n* @param {Moveable.Warpable.OnWarpStart} - Parameters for the warpStart event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, { warpable: true });\r\n* moveable.on(\"warpStart\", ({ target }) => {\r\n* console.log(target);\r\n* });\r\n*/\r\n/**\r\n * When warping, the warp event is called.\r\n * @memberof Moveable.Warpable\r\n * @event warp\r\n * @param {Moveable.Warpable.OnWarp} - Parameters for the warp event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n * let matrix = [\r\n * 1, 0, 0, 0,\r\n * 0, 1, 0, 0,\r\n * 0, 0, 1, 0,\r\n * 0, 0, 0, 1,\r\n * ];\r\n * const moveable = new Moveable(document.body, { warpable: true });\r\n * moveable.on(\"warp\", ({ target, transform, delta, multiply }) => {\r\n * // target.style.transform = transform;\r\n * matrix = multiply(matrix, delta);\r\n * target.style.transform = `matrix3d(${matrix.join(\",\")})`;\r\n * });\r\n */\r\n/**\r\n * When the warp finishes, the warpEnd event is called.\r\n * @memberof Moveable.Warpable\r\n * @event warpEnd\r\n * @param {Moveable.Warpable.OnWarpEnd} - Parameters for the warpEnd event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, { warpable: true });\r\n * moveable.on(\"warpEnd\", ({ target, isDrag }) => {\r\n * console.log(target, isDrag);\r\n * });\r\n */\n\nvar AREA_PIECES = /*#__PURE__*/ prefix(\"area-pieces\");\r\nvar AREA_PIECE = /*#__PURE__*/ prefix(\"area-piece\");\r\nvar AVOID = /*#__PURE__*/ prefix(\"avoid\");\r\nvar VIEW_DRAGGING = prefix(\"view-dragging\");\n\nfunction restoreStyle(moveable) {\r\n var el = moveable.areaElement;\r\n if (!el) {\r\n return;\r\n }\r\n var _a = moveable.state, width = _a.width, height = _a.height;\r\n removeClass(el, AVOID);\r\n el.style.cssText += \"left: 0px; top: 0px; width: \".concat(width, \"px; height: \").concat(height, \"px\");\r\n}\r\nfunction renderPieces(React) {\r\n return (React.createElement(\"div\", { key: \"area_pieces\", className: AREA_PIECES },\r\n React.createElement(\"div\", { className: AREA_PIECE }),\r\n React.createElement(\"div\", { className: AREA_PIECE }),\r\n React.createElement(\"div\", { className: AREA_PIECE }),\r\n React.createElement(\"div\", { className: AREA_PIECE })));\r\n}\r\nvar DragArea = {\r\n name: \"dragArea\",\r\n props: [\r\n \"dragArea\",\r\n \"passDragArea\",\r\n ],\r\n events: [\r\n \"click\",\r\n \"clickGroup\",\r\n ],\r\n render: function (moveable, React) {\r\n var _a = moveable.props, target = _a.target, dragArea = _a.dragArea, groupable = _a.groupable, passDragArea = _a.passDragArea;\r\n var _b = moveable.getState(), width = _b.width, height = _b.height, renderPoses = _b.renderPoses;\r\n var className = passDragArea ? prefix(\"area\", \"pass\") : prefix(\"area\");\r\n if (groupable) {\r\n return [\r\n React.createElement(\"div\", { key: \"area\", ref: ref(moveable, \"areaElement\"), className: className }),\r\n renderPieces(React),\r\n ];\r\n }\r\n if (!target || !dragArea) {\r\n return [];\r\n }\r\n var h = createWarpMatrix([0, 0], [width, 0], [0, height], [width, height], renderPoses[0], renderPoses[1], renderPoses[2], renderPoses[3]);\r\n var transform = h.length ? makeMatrixCSS(h, true) : \"none\";\r\n return [\r\n React.createElement(\"div\", { key: \"area\", ref: ref(moveable, \"areaElement\"), className: className, style: {\r\n top: \"0px\",\r\n left: \"0px\",\r\n width: \"\".concat(width, \"px\"),\r\n height: \"\".concat(height, \"px\"),\r\n transformOrigin: \"0 0\",\r\n transform: transform,\r\n } }),\r\n renderPieces(React),\r\n ];\r\n },\r\n dragStart: function (moveable, _a) {\r\n var datas = _a.datas, clientX = _a.clientX, clientY = _a.clientY, inputEvent = _a.inputEvent;\r\n if (!inputEvent) {\r\n return false;\r\n }\r\n datas.isDragArea = false;\r\n var areaElement = moveable.areaElement;\r\n var state = moveable.state;\r\n var moveableClientRect = state.moveableClientRect, renderPoses = state.renderPoses, rootMatrix = state.rootMatrix, is3d = state.is3d;\r\n var left = moveableClientRect.left, top = moveableClientRect.top;\r\n var _b = getRect(renderPoses), relativeLeft = _b.left, relativeTop = _b.top, width = _b.width, height = _b.height;\r\n var n = is3d ? 4 : 3;\r\n var _c = __read(calculateInversePosition(rootMatrix, [clientX - left, clientY - top], n), 2), posX = _c[0], posY = _c[1];\r\n posX -= relativeLeft;\r\n posY -= relativeTop;\r\n var rects = [\r\n { left: relativeLeft, top: relativeTop, width: width, height: posY - 10 },\r\n { left: relativeLeft, top: relativeTop, width: posX - 10, height: height },\r\n { left: relativeLeft, top: relativeTop + posY + 10, width: width, height: height - posY - 10 },\r\n { left: relativeLeft + posX + 10, top: relativeTop, width: width - posX - 10, height: height },\r\n ];\r\n var children = [].slice.call(areaElement.nextElementSibling.children);\r\n rects.forEach(function (rect, i) {\r\n children[i].style.cssText\r\n = \"left: \".concat(rect.left, \"px;top: \").concat(rect.top, \"px; width: \").concat(rect.width, \"px; height: \").concat(rect.height, \"px;\");\r\n });\r\n addClass(areaElement, AVOID);\r\n state.disableNativeEvent = true;\r\n return;\r\n },\r\n drag: function (moveable, _a) {\r\n var datas = _a.datas, inputEvent = _a.inputEvent;\r\n this.enableNativeEvent(moveable);\r\n if (!inputEvent) {\r\n return false;\r\n }\r\n if (!datas.isDragArea) {\r\n datas.isDragArea = true;\r\n restoreStyle(moveable);\r\n }\r\n },\r\n dragEnd: function (moveable, e) {\r\n this.enableNativeEvent(moveable);\r\n var inputEvent = e.inputEvent, datas = e.datas;\r\n if (!inputEvent) {\r\n return false;\r\n }\r\n if (!datas.isDragArea) {\r\n restoreStyle(moveable);\r\n }\r\n },\r\n dragGroupStart: function (moveable, e) {\r\n return this.dragStart(moveable, e);\r\n },\r\n dragGroup: function (moveable, e) {\r\n return this.drag(moveable, e);\r\n },\r\n dragGroupEnd: function (moveable, e) {\r\n return this.dragEnd(moveable, e);\r\n },\r\n unset: function (moveable) {\r\n restoreStyle(moveable);\r\n moveable.state.disableNativeEvent = false;\r\n },\r\n enableNativeEvent: function (moveable) {\r\n var state = moveable.state;\r\n if (state.disableNativeEvent) {\r\n requestAnimationFrame(function () {\r\n state.disableNativeEvent = false;\r\n });\r\n }\r\n },\r\n};\r\n/**\r\n * Add an event to the moveable area instead of the target for stopPropagation. (default: false, true in group)\r\n * @name Moveable#dragArea\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * dragArea: false,\r\n * });\r\n */\r\n/**\r\n * Set `pointerEvents: none;` css to pass events in dragArea. (default: false)\r\n * @name Moveable#passDragArea\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * dragArea: false,\r\n * });\r\n */\n\nvar Origin = makeAble(\"origin\", {\r\n props: [\"origin\", \"svgOrigin\"],\r\n render: function (moveable, React) {\r\n var _a = moveable.props, zoom = _a.zoom, svgOrigin = _a.svgOrigin, groupable = _a.groupable;\r\n var _b = moveable.getState(), beforeOrigin = _b.beforeOrigin, rotation = _b.rotation, svg = _b.svg, allMatrix = _b.allMatrix, is3d = _b.is3d, left = _b.left, top = _b.top, offsetWidth = _b.offsetWidth, offsetHeight = _b.offsetHeight;\r\n var originStyle;\r\n if (!groupable && svg && svgOrigin) {\r\n var _c = __read(convertTransformOriginArray(svgOrigin, offsetWidth, offsetHeight), 2), originX = _c[0], originY = _c[1];\r\n var n = is3d ? 4 : 3;\r\n var result = calculatePosition(allMatrix, [originX, originY], n);\r\n originStyle = getControlTransform(rotation, zoom, minus(result, [left, top]));\r\n }\r\n else {\r\n originStyle = getControlTransform(rotation, zoom, beforeOrigin);\r\n }\r\n return [\r\n React.createElement(\"div\", { className: prefix(\"control\", \"origin\"), style: originStyle, key: \"beforeOrigin\" }),\r\n ];\r\n },\r\n});\r\n/**\r\n * Whether or not the origin controlbox will be visible or not (default: true)\r\n * @name Moveable#origin\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.origin = true;\r\n */\n\nfunction getDefaultScrollPosition(e) {\r\n var scrollContainer = e.scrollContainer;\r\n return [\r\n scrollContainer.scrollLeft,\r\n scrollContainer.scrollTop,\r\n ];\r\n}\r\n/**\r\n * @namespace Moveable.Scrollable\r\n * @description Whether or not target can be scrolled to the scroll container (default: false)\r\n */\r\nvar Scrollable = {\r\n name: \"scrollable\",\r\n canPinch: true,\r\n props: [\r\n \"scrollable\",\r\n \"scrollContainer\",\r\n \"scrollThreshold\",\r\n \"scrollThrottleTime\",\r\n \"getScrollPosition\",\r\n \"scrollOptions\",\r\n ],\r\n events: [\r\n \"scroll\",\r\n \"scrollGroup\",\r\n ],\r\n dragRelation: \"strong\",\r\n dragStart: function (moveable, e) {\r\n var props = moveable.props;\r\n var _a = props.scrollContainer, scrollContainer = _a === void 0 ? moveable.getContainer() : _a, scrollOptions = props.scrollOptions;\r\n var dragScroll = new DragScroll();\r\n var scrollContainerElement = getRefTarget(scrollContainer, true);\r\n e.datas.dragScroll = dragScroll;\r\n moveable.state.dragScroll = dragScroll;\r\n var gestoName = e.isControl ? \"controlGesto\" : \"targetGesto\";\r\n var targets = e.targets;\r\n dragScroll.on(\"scroll\", function (_a) {\r\n var container = _a.container, direction = _a.direction;\r\n var params = fillParams(moveable, e, {\r\n scrollContainer: container,\r\n direction: direction,\r\n });\r\n var eventName = targets ? \"onScrollGroup\" : \"onScroll\";\r\n if (targets) {\r\n params.targets = targets;\r\n }\r\n triggerEvent(moveable, eventName, params);\r\n }).on(\"move\", function (_a) {\r\n var offsetX = _a.offsetX, offsetY = _a.offsetY, inputEvent = _a.inputEvent;\r\n moveable[gestoName].scrollBy(offsetX, offsetY, inputEvent.inputEvent, false);\r\n }).on(\"scrollDrag\", function (_a) {\r\n var next = _a.next;\r\n next(moveable[gestoName].getCurrentEvent());\r\n });\r\n dragScroll.dragStart(e, __assign({ container: scrollContainerElement }, scrollOptions));\r\n },\r\n checkScroll: function (moveable, e) {\r\n var dragScroll = e.datas.dragScroll;\r\n if (!dragScroll) {\r\n return;\r\n }\r\n var _a = moveable.props, _b = _a.scrollContainer, scrollContainer = _b === void 0 ? moveable.getContainer() : _b, _c = _a.scrollThreshold, scrollThreshold = _c === void 0 ? 0 : _c, _d = _a.scrollThrottleTime, scrollThrottleTime = _d === void 0 ? 0 : _d, _e = _a.getScrollPosition, getScrollPosition = _e === void 0 ? getDefaultScrollPosition : _e, scrollOptions = _a.scrollOptions;\r\n dragScroll.drag(e, __assign({ container: scrollContainer, threshold: scrollThreshold, throttleTime: scrollThrottleTime, getScrollPosition: function (ev) {\r\n return getScrollPosition({ scrollContainer: ev.container, direction: ev.direction });\r\n } }, scrollOptions));\r\n return true;\r\n },\r\n drag: function (moveable, e) {\r\n return this.checkScroll(moveable, e);\r\n },\r\n dragEnd: function (moveable, e) {\r\n e.datas.dragScroll.dragEnd();\r\n e.datas.dragScroll = null;\r\n },\r\n dragControlStart: function (moveable, e) {\r\n return this.dragStart(moveable, __assign(__assign({}, e), { isControl: true }));\r\n },\r\n dragControl: function (moveable, e) {\r\n return this.drag(moveable, e);\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n return this.dragEnd(moveable, e);\r\n },\r\n dragGroupStart: function (moveable, e) {\r\n return this.dragStart(moveable, __assign(__assign({}, e), { targets: moveable.props.targets }));\r\n },\r\n dragGroup: function (moveable, e) {\r\n return this.drag(moveable, __assign(__assign({}, e), { targets: moveable.props.targets }));\r\n },\r\n dragGroupEnd: function (moveable, e) {\r\n return this.dragEnd(moveable, __assign(__assign({}, e), { targets: moveable.props.targets }));\r\n },\r\n dragGroupControlStart: function (moveable, e) {\r\n return this.dragStart(moveable, __assign(__assign({}, e), { targets: moveable.props.targets, isControl: true }));\r\n },\r\n dragGroupControl: function (moveable, e) {\r\n return this.drag(moveable, __assign(__assign({}, e), { targets: moveable.props.targets }));\r\n },\r\n dragGroupControEnd: function (moveable, e) {\r\n return this.dragEnd(moveable, __assign(__assign({}, e), { targets: moveable.props.targets }));\r\n },\r\n unset: function (moveable) {\r\n var _a;\r\n var state = moveable.state;\r\n (_a = state.dragScroll) === null || _a === void 0 ? void 0 : _a.dragEnd();\r\n state.dragScroll = null;\r\n },\r\n};\r\n/**\r\n * When the drag cursor leaves the scrollContainer, the `scroll` event occur to scroll.\r\n * @memberof Moveable.Scrollable\r\n * @event scroll\r\n * @param {Moveable.Scrollable.OnScroll} - Parameters for the `scroll` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: document.querySelector(\".target\"),\r\n * });\r\n * moveable.on(\"scroll\", ({ scrollContainer, direction }) => {\r\n * scrollContainer.scrollLeft += direction[0] * 10;\r\n * scrollContainer.scrollTop += direction[1] * 10;\r\n * });\r\n */\r\n/**\r\n * When the drag cursor leaves the scrollContainer, the `scrollGroup` event occur to scroll in group.\r\n * @memberof Moveable.Scrollable\r\n * @event scrollGroup\r\n * @param {Moveable.Scrollable.OnScrollGroup} - Parameters for the `scrollGroup` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * });\r\n * moveable.on(\"scroll\", ({ scrollContainer, direction }) => {\r\n * scrollContainer.scrollLeft += direction[0] * 10;\r\n * scrollContainer.scrollTop += direction[1] * 10;\r\n * });\r\n */\n\nvar Default = {\r\n name: \"\",\r\n props: [\r\n \"target\",\r\n \"dragTargetSelf\",\r\n \"dragTarget\",\r\n \"dragContainer\",\r\n \"container\",\r\n \"warpSelf\",\r\n \"rootContainer\",\r\n \"useResizeObserver\",\r\n \"useMutationObserver\",\r\n \"zoom\",\r\n \"dragFocusedInput\",\r\n \"transformOrigin\",\r\n \"ables\",\r\n \"className\",\r\n \"pinchThreshold\",\r\n \"pinchOutside\",\r\n \"triggerAblesSimultaneously\",\r\n \"checkInput\",\r\n \"cspNonce\",\r\n \"translateZ\",\r\n \"hideDefaultLines\",\r\n \"props\",\r\n \"flushSync\",\r\n \"stopPropagation\",\r\n \"preventClickEventOnDrag\",\r\n \"preventClickDefault\",\r\n \"viewContainer\",\r\n \"persistData\",\r\n \"useAccuratePosition\",\r\n \"firstRenderState\",\r\n \"linePadding\",\r\n \"controlPadding\",\r\n \"preventDefault\",\r\n \"preventRightClick\",\r\n \"preventWheelClick\",\r\n \"requestStyles\",\r\n ],\r\n events: [\r\n \"changeTargets\",\r\n ],\r\n};\n\nvar Padding = makeAble(\"padding\", {\r\n props: [\"padding\"],\r\n render: function (moveable, React) {\r\n var props = moveable.props;\r\n if (props.dragArea) {\r\n return [];\r\n }\r\n var _a = getPaddingBox(props.padding || {}), left = _a.left, top = _a.top, right = _a.right, bottom = _a.bottom;\r\n var _b = moveable.getState(), renderPoses = _b.renderPoses, pos1 = _b.pos1, pos2 = _b.pos2, pos3 = _b.pos3, pos4 = _b.pos4;\r\n var poses = [pos1, pos2, pos3, pos4];\r\n var paddingDirections = [];\r\n if (left > 0) {\r\n paddingDirections.push([0, 2]);\r\n }\r\n if (top > 0) {\r\n paddingDirections.push([0, 1]);\r\n }\r\n if (right > 0) {\r\n paddingDirections.push([1, 3]);\r\n }\r\n if (bottom > 0) {\r\n paddingDirections.push([2, 3]);\r\n }\r\n return paddingDirections.map(function (_a, i) {\r\n var _b = __read(_a, 2), dir1 = _b[0], dir2 = _b[1];\r\n var paddingPos1 = poses[dir1];\r\n var paddingPos2 = poses[dir2];\r\n var paddingPos3 = renderPoses[dir1];\r\n var paddingPos4 = renderPoses[dir2];\r\n var h = createWarpMatrix([0, 0], [100, 0], [0, 100], [100, 100], paddingPos1, paddingPos2, paddingPos3, paddingPos4);\r\n if (!h.length) {\r\n return undefined;\r\n }\r\n return (React.createElement(\"div\", { key: \"padding\".concat(i), className: prefix(\"padding\"), style: {\r\n transform: makeMatrixCSS(h, true),\r\n } }));\r\n });\r\n },\r\n});\r\n/**\r\n * Add padding around the target to increase the drag area.\r\n * @name Moveable#padding\r\n * @default null\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: document.querySelector(\".target\"),\r\n * padding: { left: 0, top: 0, right: 0, bottom: 0 },\r\n * });\r\n * moveable.padding = { left: 10, top: 10, right: 10, bottom: 10 },\r\n * moveable.updateRect();\r\n */\n\nvar RADIUS_DIRECTIONS = [\"nw\", \"ne\", \"se\", \"sw\"];\r\nfunction calculateRatio(values, size) {\r\n var sumSize = values[0] + values[1];\r\n var sumRatio = sumSize > size ? size / sumSize : 1;\r\n values[0] *= sumRatio;\r\n values[1] = size - values[1] * sumRatio;\r\n return values;\r\n}\r\nvar HORIZONTAL_RADIUS_ORDER = [1, 2, 5, 6];\r\nvar VERTICAL_RADIUS_ORDER = [0, 3, 4, 7];\r\nvar HORIZONTAL_RADIUS_DIRECTIONS = [1, -1, -1, 1];\r\nvar VERTICAL_RADIUS_DIRECTIONS = [1, 1, -1, -1];\r\nfunction getRadiusStyles(nextPoses, isRelative, width, height, left, top, right, bottom) {\r\n if (left === void 0) { left = 0; }\r\n if (top === void 0) { top = 0; }\r\n if (right === void 0) { right = width; }\r\n if (bottom === void 0) { bottom = height; }\r\n var clipStyles = [];\r\n var isVertical = false;\r\n var radiusPoses = nextPoses.filter(function (pos) { return !pos.virtual; });\r\n var raws = radiusPoses.map(function (posInfo) {\r\n var horizontal = posInfo.horizontal, vertical = posInfo.vertical, pos = posInfo.pos;\r\n if (vertical && !isVertical) {\r\n isVertical = true;\r\n clipStyles.push(\"/\");\r\n }\r\n if (isVertical) {\r\n var rawPos = Math.max(0, vertical === 1 ? pos[1] - top : bottom - pos[1]);\r\n clipStyles.push(convertCSSSize(rawPos, height, isRelative));\r\n return rawPos;\r\n }\r\n else {\r\n var rawPos = Math.max(0, horizontal === 1 ? pos[0] - left : right - pos[0]);\r\n clipStyles.push(convertCSSSize(rawPos, width, isRelative));\r\n return rawPos;\r\n }\r\n });\r\n return {\r\n radiusPoses: radiusPoses,\r\n styles: clipStyles,\r\n raws: raws,\r\n };\r\n}\r\nfunction getRadiusRange(controlPoses) {\r\n // [start, length]\r\n var horizontalRange = [0, 0];\r\n var verticalRange = [0, 0];\r\n var length = controlPoses.length;\r\n for (var i = 0; i < length; ++i) {\r\n var clipPose = controlPoses[i];\r\n if (!clipPose.sub) {\r\n continue;\r\n }\r\n if (clipPose.horizontal) {\r\n if (horizontalRange[1] === 0) {\r\n horizontalRange[0] = i;\r\n }\r\n horizontalRange[1] = i - horizontalRange[0] + 1;\r\n verticalRange[0] = i + 1;\r\n }\r\n if (clipPose.vertical) {\r\n if (verticalRange[1] === 0) {\r\n verticalRange[0] = i;\r\n }\r\n verticalRange[1] = i - verticalRange[0] + 1;\r\n }\r\n }\r\n return {\r\n horizontalRange: horizontalRange,\r\n verticalRange: verticalRange,\r\n };\r\n}\r\nfunction getRadiusValues(values, width, height, left, top, minCounts, full) {\r\n var _a, _b, _c, _d;\r\n if (minCounts === void 0) { minCounts = [0, 0]; }\r\n if (full === void 0) { full = false; }\r\n var splitIndex = values.indexOf(\"/\");\r\n var splitLength = (splitIndex > -1 ? values.slice(0, splitIndex) : values).length;\r\n var horizontalValues = values.slice(0, splitLength);\r\n var verticalValues = values.slice(splitLength + 1);\r\n var horizontalValuesLength = horizontalValues.length;\r\n var verticalValuesLength = verticalValues.length;\r\n var hasVerticalValues = verticalValuesLength > 0;\r\n var _e = __read(horizontalValues, 4), _f = _e[0], nwValue = _f === void 0 ? \"0px\" : _f, _g = _e[1], neValue = _g === void 0 ? nwValue : _g, _h = _e[2], seValue = _h === void 0 ? nwValue : _h, _j = _e[3], swValue = _j === void 0 ? neValue : _j;\r\n var _k = __read(verticalValues, 4), _l = _k[0], wnValue = _l === void 0 ? nwValue : _l, _m = _k[1], enValue = _m === void 0 ? hasVerticalValues ? wnValue : neValue : _m, _o = _k[2], esValue = _o === void 0 ? hasVerticalValues ? wnValue : seValue : _o, _p = _k[3], wsValue = _p === void 0 ? hasVerticalValues ? enValue : swValue : _p;\r\n var horizontalRawPoses = [nwValue, neValue, seValue, swValue].map(function (pos) { return convertUnitSize(pos, width); });\r\n var verticalRawPoses = [wnValue, enValue, esValue, wsValue].map(function (pos) { return convertUnitSize(pos, height); });\r\n var horizontalPoses = horizontalRawPoses.slice();\r\n var verticalPoses = verticalRawPoses.slice();\r\n _a = __read(calculateRatio([horizontalPoses[0], horizontalPoses[1]], width), 2), horizontalPoses[0] = _a[0], horizontalPoses[1] = _a[1];\r\n _b = __read(calculateRatio([horizontalPoses[3], horizontalPoses[2]], width), 2), horizontalPoses[3] = _b[0], horizontalPoses[2] = _b[1];\r\n _c = __read(calculateRatio([verticalPoses[0], verticalPoses[3]], height), 2), verticalPoses[0] = _c[0], verticalPoses[3] = _c[1];\r\n _d = __read(calculateRatio([verticalPoses[1], verticalPoses[2]], height), 2), verticalPoses[1] = _d[0], verticalPoses[2] = _d[1];\r\n var nextHorizontalPoses = full\r\n ? horizontalPoses\r\n : horizontalPoses.slice(0, Math.max(minCounts[0], horizontalValuesLength));\r\n var nextVerticalPoses = full\r\n ? verticalPoses\r\n : verticalPoses.slice(0, Math.max(minCounts[1], verticalValuesLength));\r\n return __spreadArray(__spreadArray([], __read(nextHorizontalPoses.map(function (pos, i) {\r\n var direction = RADIUS_DIRECTIONS[i];\r\n return {\r\n virtual: i >= horizontalValuesLength,\r\n horizontal: HORIZONTAL_RADIUS_DIRECTIONS[i],\r\n vertical: 0,\r\n pos: [left + pos, top + (VERTICAL_RADIUS_DIRECTIONS[i] === -1 ? height : 0)],\r\n sub: true,\r\n raw: horizontalRawPoses[i],\r\n direction: direction,\r\n };\r\n })), false), __read(nextVerticalPoses.map(function (pos, i) {\r\n var direction = RADIUS_DIRECTIONS[i];\r\n return {\r\n virtual: i >= verticalValuesLength,\r\n horizontal: 0,\r\n vertical: VERTICAL_RADIUS_DIRECTIONS[i],\r\n pos: [left + (HORIZONTAL_RADIUS_DIRECTIONS[i] === -1 ? width : 0), top + pos],\r\n sub: true,\r\n raw: verticalRawPoses[i],\r\n direction: direction,\r\n };\r\n })), false);\r\n}\r\nfunction removeRadiusPos(controlPoses, poses, index, startIndex, length) {\r\n if (length === void 0) { length = poses.length; }\r\n var _a = getRadiusRange(controlPoses.slice(startIndex)), horizontalRange = _a.horizontalRange, verticalRange = _a.verticalRange;\r\n var radiuslIndex = index - startIndex;\r\n var deleteCount = 0;\r\n if (radiuslIndex === 0) {\r\n deleteCount = length;\r\n }\r\n else if (radiuslIndex > 0 && radiuslIndex < horizontalRange[1]) {\r\n deleteCount = horizontalRange[1] - radiuslIndex;\r\n }\r\n else if (radiuslIndex >= verticalRange[0]) {\r\n deleteCount = verticalRange[0] + verticalRange[1] - radiuslIndex;\r\n }\r\n else {\r\n return;\r\n }\r\n controlPoses.splice(index, deleteCount);\r\n poses.splice(index, deleteCount);\r\n}\r\nfunction addRadiusPos(controlPoses, poses, startIndex, horizontalIndex, verticalIndex, distX, distY, right, bottom, left, top) {\r\n if (left === void 0) { left = 0; }\r\n if (top === void 0) { top = 0; }\r\n var _a = getRadiusRange(controlPoses.slice(startIndex)), horizontalRange = _a.horizontalRange, verticalRange = _a.verticalRange;\r\n if (horizontalIndex > -1) {\r\n var radiusX = HORIZONTAL_RADIUS_DIRECTIONS[horizontalIndex] === 1\r\n ? distX - left\r\n : right - distX;\r\n for (var i = horizontalRange[1]; i <= horizontalIndex; ++i) {\r\n var y = VERTICAL_RADIUS_DIRECTIONS[i] === 1 ? top : bottom;\r\n var x = 0;\r\n if (horizontalIndex === i) {\r\n x = distX;\r\n }\r\n else if (i === 0) {\r\n x = left + radiusX;\r\n }\r\n else if (HORIZONTAL_RADIUS_DIRECTIONS[i] === -1) {\r\n x = right - (poses[startIndex][0] - left);\r\n }\r\n controlPoses.splice(startIndex + i, 0, {\r\n horizontal: HORIZONTAL_RADIUS_DIRECTIONS[i],\r\n vertical: 0,\r\n pos: [x, y],\r\n });\r\n poses.splice(startIndex + i, 0, [x, y]);\r\n if (i === 0) {\r\n break;\r\n }\r\n }\r\n }\r\n else if (verticalIndex > -1) {\r\n var radiusY = VERTICAL_RADIUS_DIRECTIONS[verticalIndex] === 1\r\n ? distY - top\r\n : bottom - distY;\r\n if (horizontalRange[1] === 0 && verticalRange[1] === 0) {\r\n var pos = [\r\n left + radiusY,\r\n top,\r\n ];\r\n controlPoses.push({\r\n horizontal: HORIZONTAL_RADIUS_DIRECTIONS[0],\r\n vertical: 0,\r\n pos: pos,\r\n });\r\n poses.push(pos);\r\n }\r\n var startVerticalIndex = verticalRange[0];\r\n for (var i = verticalRange[1]; i <= verticalIndex; ++i) {\r\n var x = HORIZONTAL_RADIUS_DIRECTIONS[i] === 1 ? left : right;\r\n var y = 0;\r\n if (verticalIndex === i) {\r\n y = distY;\r\n }\r\n else if (i === 0) {\r\n y = top + radiusY;\r\n }\r\n else if (VERTICAL_RADIUS_DIRECTIONS[i] === 1) {\r\n y = poses[startIndex + startVerticalIndex][1];\r\n }\r\n else if (VERTICAL_RADIUS_DIRECTIONS[i] === -1) {\r\n y = bottom - (poses[startIndex + startVerticalIndex][1] - top);\r\n }\r\n controlPoses.push({\r\n horizontal: 0,\r\n vertical: VERTICAL_RADIUS_DIRECTIONS[i],\r\n pos: [x, y],\r\n });\r\n poses.push([x, y]);\r\n if (i === 0) {\r\n break;\r\n }\r\n }\r\n }\r\n}\r\nfunction splitRadiusPoses(controlPoses, raws) {\r\n if (raws === void 0) { raws = controlPoses.map(function (pos) { return pos.raw; }); }\r\n var horizontals = controlPoses\r\n .map(function (pos, i) { return pos.horizontal ? raws[i] : null; }).filter(function (pos) { return pos != null; });\r\n var verticals = controlPoses\r\n .map(function (pos, i) { return pos.vertical ? raws[i] : null; }).filter(function (pos) { return pos != null; });\r\n return {\r\n horizontals: horizontals,\r\n verticals: verticals,\r\n };\r\n}\n\nvar CLIP_DIRECTIONS = [\r\n [0, -1, \"n\"],\r\n [1, 0, \"e\"],\r\n];\r\nvar CLIP_RECT_DIRECTIONS = [\r\n [-1, -1, \"nw\"],\r\n [0, -1, \"n\"],\r\n [1, -1, \"ne\"],\r\n [1, 0, \"e\"],\r\n [1, 1, \"se\"],\r\n [0, 1, \"s\"],\r\n [-1, 1, \"sw\"],\r\n [-1, 0, \"w\"],\r\n];\r\n// 1 2 5 6 0 3 4 7\r\n// 0 1 2 3 4 5 6 7\r\nfunction getClipStyles(moveable, clipPath, poses) {\r\n var clipRelative = moveable.props.clipRelative;\r\n var _a = moveable.state, width = _a.width, height = _a.height;\r\n var _b = clipPath, clipType = _b.type, clipPoses = _b.poses;\r\n var isRect = clipType === \"rect\";\r\n var isCircle = clipType === \"circle\";\r\n if (clipType === \"polygon\") {\r\n return poses.map(function (pos) { return \"\".concat(convertCSSSize(pos[0], width, clipRelative), \" \").concat(convertCSSSize(pos[1], height, clipRelative)); });\r\n }\r\n else if (isRect || clipType === \"inset\") {\r\n var top_1 = poses[1][1];\r\n var right = poses[3][0];\r\n var left = poses[7][0];\r\n var bottom = poses[5][1];\r\n if (isRect) {\r\n return [\r\n top_1,\r\n right,\r\n bottom,\r\n left,\r\n ].map(function (pos) { return \"\".concat(pos, \"px\"); });\r\n }\r\n var clipStyles = [top_1, width - right, height - bottom, left]\r\n .map(function (pos, i) { return convertCSSSize(pos, i % 2 ? width : height, clipRelative); });\r\n if (poses.length > 8) {\r\n var _c = __read(minus(poses[4], poses[0]), 2), subWidth = _c[0], subHeight = _c[1];\r\n clipStyles.push.apply(clipStyles, __spreadArray([\"round\"], __read(getRadiusStyles(clipPoses.slice(8).map(function (info, i) {\r\n return __assign(__assign({}, info), { pos: poses[i] });\r\n }), clipRelative, subWidth, subHeight, left, top_1, right, bottom).styles), false));\r\n }\r\n return clipStyles;\r\n }\r\n else if (isCircle || clipType === \"ellipse\") {\r\n var center = poses[0];\r\n var ry = convertCSSSize(abs(poses[1][1] - center[1]), isCircle ? Math.sqrt((width * width + height * height) / 2) : height, clipRelative);\r\n var clipStyles = isCircle ? [ry]\r\n : [convertCSSSize(abs(poses[2][0] - center[0]), width, clipRelative), ry];\r\n clipStyles.push(\"at\", convertCSSSize(center[0], width, clipRelative), convertCSSSize(center[1], height, clipRelative));\r\n return clipStyles;\r\n }\r\n}\r\nfunction getRectPoses(top, right, bottom, left) {\r\n var xs = [left, (left + right) / 2, right];\r\n var ys = [top, (top + bottom) / 2, bottom];\r\n return CLIP_RECT_DIRECTIONS.map(function (_a) {\r\n var _b = __read(_a, 3), dirx = _b[0], diry = _b[1], dir = _b[2];\r\n var x = xs[dirx + 1];\r\n var y = ys[diry + 1];\r\n return {\r\n vertical: abs(diry),\r\n horizontal: abs(dirx),\r\n direction: dir,\r\n pos: [x, y],\r\n };\r\n });\r\n}\r\nfunction getControlSize(controlPoses) {\r\n var xRange = [Infinity, -Infinity];\r\n var yRange = [Infinity, -Infinity];\r\n controlPoses.forEach(function (_a) {\r\n var pos = _a.pos;\r\n xRange[0] = Math.min(xRange[0], pos[0]);\r\n xRange[1] = Math.max(xRange[1], pos[0]);\r\n yRange[0] = Math.min(yRange[0], pos[1]);\r\n yRange[1] = Math.max(yRange[1], pos[1]);\r\n });\r\n return [\r\n abs(xRange[1] - xRange[0]),\r\n abs(yRange[1] - yRange[0]),\r\n ];\r\n}\r\nfunction getClipPath(target, width, height, defaultClip, customClip) {\r\n var _a, _b, _c, _d, _e, _f, _g, _h, _j;\r\n if (!target) {\r\n return;\r\n }\r\n var clipText = customClip;\r\n if (!clipText) {\r\n var getStyle = getCachedStyle(target);\r\n var clipPath = getStyle(\"clipPath\");\r\n clipText = clipPath !== \"none\" ? clipPath : getStyle(\"clip\");\r\n }\r\n if (!clipText || clipText === \"none\" || clipText === \"auto\") {\r\n clipText = defaultClip;\r\n if (!clipText) {\r\n return;\r\n }\r\n }\r\n var _k = splitBracket(clipText), _l = _k.prefix, clipPrefix = _l === void 0 ? clipText : _l, _m = _k.value, value = _m === void 0 ? \"\" : _m;\r\n var isCircle = clipPrefix === \"circle\";\r\n var splitter = \" \";\r\n if (clipPrefix === \"polygon\") {\r\n var values = splitComma(value || \"0% 0%, 100% 0%, 100% 100%, 0% 100%\");\r\n splitter = \",\";\r\n var poses = values.map(function (pos) {\r\n var _a = __read(pos.split(\" \"), 2), xPos = _a[0], yPos = _a[1];\r\n return {\r\n vertical: 1,\r\n horizontal: 1,\r\n pos: [\r\n convertUnitSize(xPos, width),\r\n convertUnitSize(yPos, height),\r\n ],\r\n };\r\n });\r\n var minMaxs = getMinMaxs(poses.map(function (pos) { return pos.pos; }));\r\n return {\r\n type: clipPrefix,\r\n clipText: clipText,\r\n poses: poses,\r\n splitter: splitter,\r\n left: minMaxs.minX,\r\n right: minMaxs.maxX,\r\n top: minMaxs.minY,\r\n bottom: minMaxs.maxY,\r\n };\r\n }\r\n else if (isCircle || clipPrefix === \"ellipse\") {\r\n var xPos = \"\";\r\n var yPos = \"\";\r\n var radiusX_1 = 0;\r\n var radiusY_1 = 0;\r\n var values = splitSpace(value);\r\n if (isCircle) {\r\n var radius = \"\";\r\n _a = __read(values, 4), _b = _a[0], radius = _b === void 0 ? \"50%\" : _b, _c = _a[2], xPos = _c === void 0 ? \"50%\" : _c, _d = _a[3], yPos = _d === void 0 ? \"50%\" : _d;\r\n radiusX_1 = convertUnitSize(radius, Math.sqrt((width * width + height * height) / 2));\r\n radiusY_1 = radiusX_1;\r\n }\r\n else {\r\n var xRadius = \"\";\r\n var yRadius = \"\";\r\n _e = __read(values, 5), _f = _e[0], xRadius = _f === void 0 ? \"50%\" : _f, _g = _e[1], yRadius = _g === void 0 ? \"50%\" : _g, _h = _e[3], xPos = _h === void 0 ? \"50%\" : _h, _j = _e[4], yPos = _j === void 0 ? \"50%\" : _j;\r\n radiusX_1 = convertUnitSize(xRadius, width);\r\n radiusY_1 = convertUnitSize(yRadius, height);\r\n }\r\n var centerPos_1 = [\r\n convertUnitSize(xPos, width),\r\n convertUnitSize(yPos, height),\r\n ];\r\n var poses = __spreadArray([\r\n {\r\n vertical: 1,\r\n horizontal: 1,\r\n pos: centerPos_1,\r\n direction: \"nesw\",\r\n }\r\n ], __read(CLIP_DIRECTIONS.slice(0, isCircle ? 1 : 2).map(function (dir) { return ({\r\n vertical: abs(dir[1]),\r\n horizontal: dir[0],\r\n direction: dir[2],\r\n sub: true,\r\n pos: [\r\n centerPos_1[0] + dir[0] * radiusX_1,\r\n centerPos_1[1] + dir[1] * radiusY_1,\r\n ],\r\n }); })), false);\r\n return {\r\n type: clipPrefix,\r\n clipText: clipText,\r\n radiusX: radiusX_1,\r\n radiusY: radiusY_1,\r\n left: centerPos_1[0] - radiusX_1,\r\n top: centerPos_1[1] - radiusY_1,\r\n right: centerPos_1[0] + radiusX_1,\r\n bottom: centerPos_1[1] + radiusY_1,\r\n poses: poses,\r\n splitter: splitter,\r\n };\r\n }\r\n else if (clipPrefix === \"inset\") {\r\n var values = splitSpace(value || \"0 0 0 0\");\r\n var roundIndex = values.indexOf(\"round\");\r\n var rectLength = (roundIndex > -1 ? values.slice(0, roundIndex) : values).length;\r\n var radiusValues = values.slice(rectLength + 1);\r\n var _o = __read(values.slice(0, rectLength), 4), topValue = _o[0], _p = _o[1], rightValue = _p === void 0 ? topValue : _p, _q = _o[2], bottomValue = _q === void 0 ? topValue : _q, _r = _o[3], leftValue = _r === void 0 ? rightValue : _r;\r\n var _s = __read([topValue, bottomValue].map(function (pos) { return convertUnitSize(pos, height); }), 2), top_2 = _s[0], bottom = _s[1];\r\n var _t = __read([leftValue, rightValue].map(function (pos) { return convertUnitSize(pos, width); }), 2), left = _t[0], right = _t[1];\r\n var nextRight = width - right;\r\n var nextBottom = height - bottom;\r\n var radiusPoses = getRadiusValues(radiusValues, nextRight - left, nextBottom - top_2, left, top_2);\r\n var poses = __spreadArray(__spreadArray([], __read(getRectPoses(top_2, nextRight, nextBottom, left)), false), __read(radiusPoses), false);\r\n return {\r\n type: \"inset\",\r\n clipText: clipText,\r\n poses: poses,\r\n top: top_2,\r\n left: left,\r\n right: nextRight,\r\n bottom: nextBottom,\r\n radius: radiusValues,\r\n splitter: splitter,\r\n };\r\n }\r\n else if (clipPrefix === \"rect\") {\r\n // top right bottom left\r\n var values = splitComma(value || \"0px, \".concat(width, \"px, \").concat(height, \"px, 0px\"));\r\n splitter = \",\";\r\n var _u = __read(values.map(function (pos) {\r\n var posValue = splitUnit(pos).value;\r\n return posValue;\r\n }), 4), top_3 = _u[0], right = _u[1], bottom = _u[2], left = _u[3];\r\n var poses = getRectPoses(top_3, right, bottom, left);\r\n return {\r\n type: \"rect\",\r\n clipText: clipText,\r\n poses: poses,\r\n top: top_3,\r\n right: right,\r\n bottom: bottom,\r\n left: left,\r\n values: values,\r\n splitter: splitter,\r\n };\r\n }\r\n return;\r\n}\n\nfunction moveControlPos(controlPoses, index, dist, isRect, keepRatio) {\r\n var _a = controlPoses[index], direction = _a.direction, sub = _a.sub;\r\n var dists = controlPoses.map(function () { return [0, 0]; });\r\n var directions = direction ? direction.split(\"\") : [];\r\n if (isRect && index < 8) {\r\n var verticalDirections = directions.filter(function (dir) { return dir === \"w\" || dir === \"e\"; });\r\n var horizontalDirections = directions.filter(function (dir) { return dir === \"n\" || dir === \"s\"; });\r\n var verticalDirection_1 = verticalDirections[0];\r\n var horizontalDirection_1 = horizontalDirections[0];\r\n dists[index] = dist;\r\n var _b = __read(getControlSize(controlPoses), 2), width = _b[0], height = _b[1];\r\n var ratio = width && height ? width / height : 0;\r\n if (ratio && keepRatio) {\r\n // 0 1 2\r\n // 7 3\r\n // 6 5 4\r\n var fixedIndex = (index + 4) % 8;\r\n var fixedPosition = controlPoses[fixedIndex].pos;\r\n var sizeDirection = [0, 0];\r\n if (direction.indexOf(\"w\") > -1) {\r\n sizeDirection[0] = -1;\r\n }\r\n else if (direction.indexOf(\"e\") > -1) {\r\n sizeDirection[0] = 1;\r\n }\r\n if (direction.indexOf(\"n\") > -1) {\r\n sizeDirection[1] = -1;\r\n }\r\n else if (direction.indexOf(\"s\") > -1) {\r\n sizeDirection[1] = 1;\r\n }\r\n var nextDist = getSizeDistByDist([width, height], dist, ratio, sizeDirection, true);\r\n var nextWidth = width + nextDist[0];\r\n var nextHeight = height + nextDist[1];\r\n var top_1 = fixedPosition[1];\r\n var bottom = fixedPosition[1];\r\n var left = fixedPosition[0];\r\n var right = fixedPosition[0];\r\n if (sizeDirection[0] === -1) {\r\n left = right - nextWidth;\r\n }\r\n else if (sizeDirection[0] === 1) {\r\n right = left + nextWidth;\r\n }\r\n else {\r\n left = left - nextWidth / 2;\r\n right = right + nextWidth / 2;\r\n }\r\n if (sizeDirection[1] === -1) {\r\n top_1 = bottom - nextHeight;\r\n }\r\n else if (sizeDirection[1] === 1) {\r\n bottom = top_1 + nextHeight;\r\n }\r\n else {\r\n top_1 = bottom - nextHeight / 2;\r\n bottom = top_1 + nextHeight;\r\n }\r\n var nextControlPoses_1 = getRectPoses(top_1, right, bottom, left);\r\n controlPoses.forEach(function (controlPose, i) {\r\n dists[i][0] = nextControlPoses_1[i].pos[0] - controlPose.pos[0];\r\n dists[i][1] = nextControlPoses_1[i].pos[1] - controlPose.pos[1];\r\n });\r\n }\r\n else {\r\n controlPoses.forEach(function (controlPose, i) {\r\n var controlDir = controlPose.direction;\r\n if (!controlDir) {\r\n return;\r\n }\r\n if (controlDir.indexOf(verticalDirection_1) > -1) {\r\n dists[i][0] = dist[0];\r\n }\r\n if (controlDir.indexOf(horizontalDirection_1) > -1) {\r\n dists[i][1] = dist[1];\r\n }\r\n });\r\n if (verticalDirection_1) {\r\n dists[1][0] = dist[0] / 2;\r\n dists[5][0] = dist[0] / 2;\r\n }\r\n if (horizontalDirection_1) {\r\n dists[3][1] = dist[1] / 2;\r\n dists[7][1] = dist[1] / 2;\r\n }\r\n }\r\n }\r\n else if (direction && !sub) {\r\n directions.forEach(function (dir) {\r\n var isVertical = dir === \"n\" || dir === \"s\";\r\n controlPoses.forEach(function (controlPose, i) {\r\n var dirDir = controlPose.direction, dirHorizontal = controlPose.horizontal, dirVertical = controlPose.vertical;\r\n if (!dirDir || dirDir.indexOf(dir) === -1) {\r\n return;\r\n }\r\n dists[i] = [\r\n isVertical || !dirHorizontal ? 0 : dist[0],\r\n !isVertical || !dirVertical ? 0 : dist[1],\r\n ];\r\n });\r\n });\r\n }\r\n else {\r\n dists[index] = dist;\r\n }\r\n return dists;\r\n}\r\nfunction addClipPath(moveable, e) {\r\n var _a = __read(calculatePointerDist(moveable, e), 2), distX = _a[0], distY = _a[1];\r\n var _b = e.datas, clipPath = _b.clipPath, clipIndex = _b.clipIndex;\r\n var _c = clipPath, clipType = _c.type, clipPoses = _c.poses, splitter = _c.splitter;\r\n var poses = clipPoses.map(function (pos) { return pos.pos; });\r\n if (clipType === \"polygon\") {\r\n poses.splice(clipIndex, 0, [distX, distY]);\r\n }\r\n else if (clipType === \"inset\") {\r\n var horizontalIndex = HORIZONTAL_RADIUS_ORDER.indexOf(clipIndex);\r\n var verticalIndex = VERTICAL_RADIUS_ORDER.indexOf(clipIndex);\r\n var length_1 = clipPoses.length;\r\n addRadiusPos(clipPoses, poses, 8, horizontalIndex, verticalIndex, distX, distY, poses[4][0], poses[4][1], poses[0][0], poses[0][1]);\r\n if (length_1 === clipPoses.length) {\r\n return;\r\n }\r\n }\r\n else {\r\n return;\r\n }\r\n var clipStyles = getClipStyles(moveable, clipPath, poses);\r\n var clipStyle = \"\".concat(clipType, \"(\").concat(clipStyles.join(splitter), \")\");\r\n triggerEvent(moveable, \"onClip\", fillParams(moveable, e, __assign({ clipEventType: \"added\", clipType: clipType, poses: poses, clipStyles: clipStyles, clipStyle: clipStyle, distX: 0, distY: 0 }, fillCSSObject({\r\n clipPath: clipStyle,\r\n }, e))));\r\n}\r\nfunction removeClipPath(moveable, e) {\r\n var _a = e.datas, clipPath = _a.clipPath, clipIndex = _a.clipIndex;\r\n var _b = clipPath, clipType = _b.type, clipPoses = _b.poses, splitter = _b.splitter;\r\n var poses = clipPoses.map(function (pos) { return pos.pos; });\r\n var length = poses.length;\r\n if (clipType === \"polygon\") {\r\n clipPoses.splice(clipIndex, 1);\r\n poses.splice(clipIndex, 1);\r\n }\r\n else if (clipType === \"inset\") {\r\n if (clipIndex < 8) {\r\n return;\r\n }\r\n removeRadiusPos(clipPoses, poses, clipIndex, 8, length);\r\n if (length === clipPoses.length) {\r\n return;\r\n }\r\n }\r\n else {\r\n return;\r\n }\r\n var clipStyles = getClipStyles(moveable, clipPath, poses);\r\n var clipStyle = \"\".concat(clipType, \"(\").concat(clipStyles.join(splitter), \")\");\r\n triggerEvent(moveable, \"onClip\", fillParams(moveable, e, __assign({ clipEventType: \"removed\", clipType: clipType, poses: poses, clipStyles: clipStyles, clipStyle: clipStyle, distX: 0, distY: 0 }, fillCSSObject({\r\n clipPath: clipStyle,\r\n }, e))));\r\n}\r\n/**\r\n * @namespace Moveable.Clippable\r\n * @description Whether to clip the target.\r\n */\r\nvar Clippable = {\r\n name: \"clippable\",\r\n props: [\r\n \"clippable\",\r\n \"defaultClipPath\",\r\n \"customClipPath\",\r\n \"keepRatio\",\r\n \"clipRelative\",\r\n \"clipArea\",\r\n \"dragWithClip\",\r\n \"clipTargetBounds\",\r\n \"clipVerticalGuidelines\",\r\n \"clipHorizontalGuidelines\",\r\n \"clipSnapThreshold\",\r\n ],\r\n events: [\r\n \"clipStart\",\r\n \"clip\",\r\n \"clipEnd\",\r\n ],\r\n css: [\r\n \".control.clip-control {\\nbackground: #6d6;\\ncursor: pointer;\\n}\\n.control.clip-control.clip-radius {\\nbackground: #d66;\\n}\\n.line.clip-line {\\nbackground: #6e6;\\ncursor: move;\\nz-index: 1;\\n}\\n.clip-area {\\nposition: absolute;\\ntop: 0;\\nleft: 0;\\n}\\n.clip-ellipse {\\nposition: absolute;\\ncursor: move;\\nborder: 1px solid #6d6;\\nborder: var(--zoompx) solid #6d6;\\nborder-radius: 50%;\\ntransform-origin: 0px 0px;\\n}\",\r\n \":host {\\n--bounds-color: #d66;\\n}\",\r\n \".guideline {\\npointer-events: none;\\nz-index: 2;\\n}\",\r\n \".line.guideline.bounds {\\nbackground: #d66;\\nbackground: var(--bounds-color);\\n}\",\r\n ],\r\n render: function (moveable, React) {\r\n var _a = moveable.props, customClipPath = _a.customClipPath, defaultClipPath = _a.defaultClipPath, clipArea = _a.clipArea, zoom = _a.zoom, groupable = _a.groupable;\r\n var _b = moveable.getState(), target = _b.target, width = _b.width, height = _b.height, allMatrix = _b.allMatrix, is3d = _b.is3d, left = _b.left, top = _b.top, pos1 = _b.pos1, pos2 = _b.pos2, pos3 = _b.pos3, pos4 = _b.pos4, clipPathState = _b.clipPathState, snapBoundInfos = _b.snapBoundInfos, rotationRad = _b.rotation;\r\n if (!target || groupable) {\r\n return [];\r\n }\r\n var clipPath = getClipPath(target, width, height, defaultClipPath || \"inset\", clipPathState || customClipPath);\r\n if (!clipPath) {\r\n return [];\r\n }\r\n var n = is3d ? 4 : 3;\r\n var type = clipPath.type;\r\n var clipPoses = clipPath.poses;\r\n var poses = clipPoses.map(function (pos) {\r\n // return [x, y];\r\n var calculatedPos = calculatePosition(allMatrix, pos.pos, n);\r\n return [\r\n calculatedPos[0] - left,\r\n calculatedPos[1] - top,\r\n ];\r\n });\r\n var controls = [];\r\n var lines = [];\r\n var isRect = type === \"rect\";\r\n var isInset = type === \"inset\";\r\n var isPolygon = type === \"polygon\";\r\n if (isRect || isInset || isPolygon) {\r\n var linePoses_1 = isInset ? poses.slice(0, 8) : poses;\r\n lines = linePoses_1.map(function (to, i) {\r\n var from = i === 0 ? linePoses_1[linePoses_1.length - 1] : linePoses_1[i - 1];\r\n var rad = getRad(from, to);\r\n var dist = getDiagonalSize(from, to);\r\n return React.createElement(\"div\", { key: \"clipLine\".concat(i), className: prefix(\"line\", \"clip-line\", \"snap-control\"), \"data-clip-index\": i, style: {\r\n width: \"\".concat(dist, \"px\"),\r\n transform: \"translate(\".concat(from[0], \"px, \").concat(from[1], \"px) rotate(\").concat(rad, \"rad) scaleY(\").concat(zoom, \")\"),\r\n } });\r\n });\r\n }\r\n controls = poses.map(function (pos, i) {\r\n return React.createElement(\"div\", { key: \"clipControl\".concat(i), className: prefix(\"control\", \"clip-control\", \"snap-control\"), \"data-clip-index\": i, style: {\r\n transform: \"translate(\".concat(pos[0], \"px, \").concat(pos[1], \"px) rotate(\").concat(rotationRad, \"rad) scale(\").concat(zoom, \")\"),\r\n } });\r\n });\r\n if (isInset) {\r\n controls.push.apply(controls, __spreadArray([], __read(poses.slice(8).map(function (pos, i) {\r\n return React.createElement(\"div\", { key: \"clipRadiusControl\".concat(i), className: prefix(\"control\", \"clip-control\", \"clip-radius\", \"snap-control\"), \"data-clip-index\": 8 + i, style: {\r\n transform: \"translate(\".concat(pos[0], \"px, \").concat(pos[1], \"px) rotate(\").concat(rotationRad, \"rad) scale(\").concat(zoom, \")\"),\r\n } });\r\n })), false));\r\n }\r\n if (type === \"circle\" || type === \"ellipse\") {\r\n var clipLeft = clipPath.left, clipTop = clipPath.top, radiusX = clipPath.radiusX, radiusY = clipPath.radiusY;\r\n var _c = __read(minus(calculatePosition(allMatrix, [clipLeft, clipTop], n), calculatePosition(allMatrix, [0, 0], n)), 2), distLeft = _c[0], distTop = _c[1];\r\n var ellipseClipPath = \"none\";\r\n if (!clipArea) {\r\n var piece = Math.max(10, radiusX / 5, radiusY / 5);\r\n var areaPoses = [];\r\n for (var i = 0; i <= piece; ++i) {\r\n var rad = Math.PI * 2 / piece * i;\r\n areaPoses.push([\r\n radiusX + (radiusX - zoom) * Math.cos(rad),\r\n radiusY + (radiusY - zoom) * Math.sin(rad),\r\n ]);\r\n }\r\n areaPoses.push([radiusX, -2]);\r\n areaPoses.push([-2, -2]);\r\n areaPoses.push([-2, radiusY * 2 + 2]);\r\n areaPoses.push([radiusX * 2 + 2, radiusY * 2 + 2]);\r\n areaPoses.push([radiusX * 2 + 2, -2]);\r\n areaPoses.push([radiusX, -2]);\r\n ellipseClipPath = \"polygon(\".concat(areaPoses.map(function (pos) { return \"\".concat(pos[0], \"px \").concat(pos[1], \"px\"); }).join(\", \"), \")\");\r\n }\r\n controls.push(React.createElement(\"div\", { key: \"clipEllipse\", className: prefix(\"clip-ellipse\", \"snap-control\"), style: {\r\n width: \"\".concat(radiusX * 2, \"px\"),\r\n height: \"\".concat(radiusY * 2, \"px\"),\r\n clipPath: ellipseClipPath,\r\n transform: \"translate(\".concat(-left + distLeft, \"px, \").concat(-top + distTop, \"px) \").concat(makeMatrixCSS(allMatrix)),\r\n } }));\r\n }\r\n if (clipArea) {\r\n var _d = getRect(__spreadArray([pos1, pos2, pos3, pos4], __read(poses), false)), allWidth = _d.width, allHeight = _d.height, allLeft_1 = _d.left, allTop_1 = _d.top;\r\n if (isPolygon || isRect || isInset) {\r\n var areaPoses = isInset ? poses.slice(0, 8) : poses;\r\n controls.push(React.createElement(\"div\", { key: \"clipArea\", className: prefix(\"clip-area\", \"snap-control\"), style: {\r\n width: \"\".concat(allWidth, \"px\"),\r\n height: \"\".concat(allHeight, \"px\"),\r\n transform: \"translate(\".concat(allLeft_1, \"px, \").concat(allTop_1, \"px)\"),\r\n clipPath: \"polygon(\".concat(areaPoses.map(function (pos) { return \"\".concat(pos[0] - allLeft_1, \"px \").concat(pos[1] - allTop_1, \"px\"); }).join(\", \"), \")\"),\r\n } }));\r\n }\r\n }\r\n if (snapBoundInfos) {\r\n [\"vertical\", \"horizontal\"].forEach(function (directionType) {\r\n var info = snapBoundInfos[directionType];\r\n var isHorizontal = directionType === \"horizontal\";\r\n if (info.isSnap) {\r\n lines.push.apply(lines, __spreadArray([], __read(info.snap.posInfos.map(function (_a, i) {\r\n var pos = _a.pos;\r\n var snapPos1 = minus(calculatePosition(allMatrix, isHorizontal ? [0, pos] : [pos, 0], n), [left, top]);\r\n var snapPos2 = minus(calculatePosition(allMatrix, isHorizontal ? [width, pos] : [pos, height], n), [left, top]);\r\n return renderLine(React, \"\", snapPos1, snapPos2, zoom, \"clip\".concat(directionType, \"snap\").concat(i), \"guideline\");\r\n })), false));\r\n }\r\n if (info.isBound) {\r\n lines.push.apply(lines, __spreadArray([], __read(info.bounds.map(function (_a, i) {\r\n var pos = _a.pos;\r\n var snapPos1 = minus(calculatePosition(allMatrix, isHorizontal ? [0, pos] : [pos, 0], n), [left, top]);\r\n var snapPos2 = minus(calculatePosition(allMatrix, isHorizontal ? [width, pos] : [pos, height], n), [left, top]);\r\n return renderLine(React, \"\", snapPos1, snapPos2, zoom, \"clip\".concat(directionType, \"bounds\").concat(i), \"guideline\", \"bounds\", \"bold\");\r\n })), false));\r\n }\r\n });\r\n }\r\n return __spreadArray(__spreadArray([], __read(controls), false), __read(lines), false);\r\n },\r\n dragControlCondition: function (moveable, e) {\r\n return e.inputEvent && (e.inputEvent.target.getAttribute(\"class\") || \"\").indexOf(\"clip\") > -1;\r\n },\r\n dragStart: function (moveable, e) {\r\n var props = moveable.props;\r\n var _a = props.dragWithClip, dragWithClip = _a === void 0 ? true : _a;\r\n if (dragWithClip) {\r\n return false;\r\n }\r\n return this.dragControlStart(moveable, e);\r\n },\r\n drag: function (moveable, e) {\r\n return this.dragControl(moveable, __assign(__assign({}, e), { isDragTarget: true }));\r\n },\r\n dragEnd: function (moveable, e) {\r\n return this.dragControlEnd(moveable, e);\r\n },\r\n dragControlStart: function (moveable, e) {\r\n var state = moveable.state;\r\n var _a = moveable.props, defaultClipPath = _a.defaultClipPath, customClipPath = _a.customClipPath;\r\n var target = state.target, width = state.width, height = state.height;\r\n var inputTarget = e.inputEvent ? e.inputEvent.target : null;\r\n var className = (inputTarget && inputTarget.getAttribute(\"class\")) || \"\";\r\n var datas = e.datas;\r\n var clipPath = getClipPath(target, width, height, defaultClipPath || \"inset\", customClipPath);\r\n if (!clipPath) {\r\n return false;\r\n }\r\n var clipText = clipPath.clipText, type = clipPath.type, poses = clipPath.poses;\r\n var result = triggerEvent(moveable, \"onClipStart\", fillParams(moveable, e, {\r\n clipType: type,\r\n clipStyle: clipText,\r\n poses: poses.map(function (pos) { return pos.pos; }),\r\n }));\r\n if (result === false) {\r\n datas.isClipStart = false;\r\n return false;\r\n }\r\n datas.isControl = className && className.indexOf(\"clip-control\") > -1;\r\n datas.isLine = className.indexOf(\"clip-line\") > -1;\r\n datas.isArea = className.indexOf(\"clip-area\") > -1 || className.indexOf(\"clip-ellipse\") > -1;\r\n datas.clipIndex = inputTarget ? parseInt(inputTarget.getAttribute(\"data-clip-index\"), 10) : -1;\r\n datas.clipPath = clipPath;\r\n datas.isClipStart = true;\r\n state.clipPathState = clipText;\r\n setDragStart(moveable, e);\r\n return true;\r\n },\r\n dragControl: function (moveable, e) {\r\n var _a, _b, _c;\r\n var datas = e.datas, originalDatas = e.originalDatas, isDragTarget = e.isDragTarget;\r\n if (!datas.isClipStart) {\r\n return false;\r\n }\r\n var _d = datas, isControl = _d.isControl, isLine = _d.isLine, isArea = _d.isArea, clipIndex = _d.clipIndex, clipPath = _d.clipPath;\r\n if (!clipPath) {\r\n return false;\r\n }\r\n var props = getProps(moveable.props, \"clippable\");\r\n var keepRatio = props.keepRatio;\r\n var distX = 0;\r\n var distY = 0;\r\n var originalDraggable = originalDatas.draggable;\r\n var originalDist = getDragDist(e);\r\n if (isDragTarget && originalDraggable) {\r\n _a = __read(originalDraggable.prevBeforeDist, 2), distX = _a[0], distY = _a[1];\r\n }\r\n else {\r\n _b = __read(originalDist, 2), distX = _b[0], distY = _b[1];\r\n }\r\n var firstDist = [distX, distY];\r\n var state = moveable.state;\r\n var width = state.width, height = state.height;\r\n var isDragWithTarget = !isArea && !isControl && !isLine;\r\n var clipType = clipPath.type, clipPoses = clipPath.poses, splitter = clipPath.splitter;\r\n var poses = clipPoses.map(function (pos) { return pos.pos; });\r\n if (isDragWithTarget) {\r\n distX = -distX;\r\n distY = -distY;\r\n }\r\n var isAll = !isControl || clipPoses[clipIndex].direction === \"nesw\";\r\n var isRect = clipType === \"inset\" || clipType === \"rect\";\r\n var dists = clipPoses.map(function () { return [0, 0]; });\r\n if (isControl && !isAll) {\r\n var _e = clipPoses[clipIndex], horizontal = _e.horizontal, vertical = _e.vertical;\r\n var dist = [\r\n distX * abs(horizontal),\r\n distY * abs(vertical),\r\n ];\r\n dists = moveControlPos(clipPoses, clipIndex, dist, isRect, keepRatio);\r\n }\r\n else if (isAll) {\r\n dists = poses.map(function () { return [distX, distY]; });\r\n }\r\n var nextPoses = poses.map(function (pos, i) { return plus(pos, dists[i]); });\r\n var guidePoses = __spreadArray([], __read(nextPoses), false);\r\n state.snapBoundInfos = null;\r\n var isCircle = clipPath.type === \"circle\";\r\n var isEllipse = clipPath.type === \"ellipse\";\r\n if (isCircle || isEllipse) {\r\n var guideRect = getRect(nextPoses);\r\n var ry = abs(guideRect.bottom - guideRect.top);\r\n var rx = abs(isEllipse ? guideRect.right - guideRect.left : ry);\r\n var bottom = nextPoses[0][1] + ry;\r\n var left = nextPoses[0][0] - rx;\r\n var right = nextPoses[0][0] + rx;\r\n // right\r\n if (isCircle) {\r\n guidePoses.push([right, guideRect.bottom]);\r\n dists.push([1, 0]);\r\n }\r\n // bottom\r\n guidePoses.push([guideRect.left, bottom]);\r\n dists.push([0, 1]);\r\n // left\r\n guidePoses.push([left, guideRect.bottom]);\r\n dists.push([1, 0]);\r\n }\r\n var guidelines = getDefaultGuidelines((props.clipHorizontalGuidelines || []).map(function (v) { return convertUnitSize(\"\".concat(v), height); }), (props.clipVerticalGuidelines || []).map(function (v) { return convertUnitSize(\"\".concat(v), width); }), width, height);\r\n var guideXPoses = [];\r\n var guideYPoses = [];\r\n if (isCircle || isEllipse) {\r\n guideXPoses = [guidePoses[4][0], guidePoses[2][0]];\r\n guideYPoses = [guidePoses[1][1], guidePoses[3][1]];\r\n }\r\n else if (isRect) {\r\n var rectPoses = [guidePoses[0], guidePoses[2], guidePoses[4], guidePoses[6]];\r\n var rectDists_1 = [dists[0], dists[2], dists[4], dists[6]];\r\n guideXPoses = rectPoses.filter(function (_, i) { return rectDists_1[i][0]; }).map(function (pos) { return pos[0]; });\r\n guideYPoses = rectPoses.filter(function (_, i) { return rectDists_1[i][1]; }).map(function (pos) { return pos[1]; });\r\n }\r\n else {\r\n guideXPoses = guidePoses.filter(function (_, i) { return dists[i][0]; }).map(function (pos) { return pos[0]; });\r\n guideYPoses = guidePoses.filter(function (_, i) { return dists[i][1]; }).map(function (pos) { return pos[1]; });\r\n }\r\n var boundDelta = [0, 0];\r\n var _f = checkSnapBounds(guidelines, props.clipTargetBounds && { left: 0, top: 0, right: width, bottom: height }, guideXPoses, guideYPoses, 5, 5), horizontalSnapInfo = _f.horizontal, verticalSnapInfo = _f.vertical;\r\n var snapOffsetY = horizontalSnapInfo.offset;\r\n var snapOffsetX = verticalSnapInfo.offset;\r\n if (horizontalSnapInfo.isBound) {\r\n boundDelta[1] += snapOffsetY;\r\n }\r\n if (verticalSnapInfo.isBound) {\r\n boundDelta[0] += snapOffsetX;\r\n }\r\n if ((isEllipse || isCircle) && dists[0][0] === 0 && dists[0][1] === 0) {\r\n var guideRect = getRect(nextPoses);\r\n var cy = guideRect.bottom - guideRect.top;\r\n var cx = isEllipse ? guideRect.right - guideRect.left : cy;\r\n var distSnapX = verticalSnapInfo.isBound\r\n ? abs(snapOffsetX)\r\n : (verticalSnapInfo.snapIndex === 0 ? -snapOffsetX : snapOffsetX);\r\n var distSnapY = horizontalSnapInfo.isBound\r\n ? abs(snapOffsetY)\r\n : (horizontalSnapInfo.snapIndex === 0 ? -snapOffsetY : snapOffsetY);\r\n cx -= distSnapX;\r\n cy -= distSnapY;\r\n if (isCircle) {\r\n cy = checkSnapBoundPriority(verticalSnapInfo, horizontalSnapInfo) > 0 ? cy : cx;\r\n cx = cy;\r\n }\r\n var center = guidePoses[0];\r\n guidePoses[1][1] = center[1] - cy;\r\n guidePoses[2][0] = center[0] + cx;\r\n guidePoses[3][1] = center[1] + cy;\r\n guidePoses[4][0] = center[0] - cx;\r\n }\r\n else if (isRect && keepRatio && isControl) {\r\n var _g = __read(getControlSize(clipPoses), 2), width_1 = _g[0], height_1 = _g[1];\r\n var ratio = width_1 && height_1 ? width_1 / height_1 : 0;\r\n var clipPose = clipPoses[clipIndex];\r\n var direction = clipPose.direction || \"\";\r\n var top_2 = guidePoses[1][1];\r\n var bottom = guidePoses[5][1];\r\n var left = guidePoses[7][0];\r\n var right = guidePoses[3][0];\r\n if (abs(snapOffsetY) <= abs(snapOffsetX)) {\r\n snapOffsetY = sign(snapOffsetY) * abs(snapOffsetX) / ratio;\r\n }\r\n else {\r\n snapOffsetX = sign(snapOffsetX) * abs(snapOffsetY) * ratio;\r\n }\r\n if (direction.indexOf(\"w\") > -1) {\r\n left -= snapOffsetX;\r\n }\r\n else if (direction.indexOf(\"e\") > -1) {\r\n right -= snapOffsetX;\r\n }\r\n else {\r\n left += snapOffsetX / 2;\r\n right -= snapOffsetX / 2;\r\n }\r\n if (direction.indexOf(\"n\") > -1) {\r\n top_2 -= snapOffsetY;\r\n }\r\n else if (direction.indexOf(\"s\") > -1) {\r\n bottom -= snapOffsetY;\r\n }\r\n else {\r\n top_2 += snapOffsetY / 2;\r\n bottom -= snapOffsetY / 2;\r\n }\r\n var nextControlPoses_2 = getRectPoses(top_2, right, bottom, left);\r\n guidePoses.forEach(function (pos, i) {\r\n var _a;\r\n _a = __read(nextControlPoses_2[i].pos, 2), pos[0] = _a[0], pos[1] = _a[1];\r\n });\r\n }\r\n else {\r\n guidePoses.forEach(function (pos, j) {\r\n var dist = dists[j];\r\n if (dist[0]) {\r\n pos[0] -= snapOffsetX;\r\n }\r\n if (dist[1]) {\r\n pos[1] -= snapOffsetY;\r\n }\r\n });\r\n }\r\n var nextClipStyles = getClipStyles(moveable, clipPath, nextPoses);\r\n var clipStyle = \"\".concat(clipType, \"(\").concat(nextClipStyles.join(splitter), \")\");\r\n state.clipPathState = clipStyle;\r\n if (isCircle || isEllipse) {\r\n guideXPoses = [guidePoses[4][0], guidePoses[2][0]];\r\n guideYPoses = [guidePoses[1][1], guidePoses[3][1]];\r\n }\r\n else if (isRect) {\r\n var rectPoses = [guidePoses[0], guidePoses[2], guidePoses[4], guidePoses[6]];\r\n guideXPoses = rectPoses.map(function (pos) { return pos[0]; });\r\n guideYPoses = rectPoses.map(function (pos) { return pos[1]; });\r\n }\r\n else {\r\n guideXPoses = guidePoses.map(function (pos) { return pos[0]; });\r\n guideYPoses = guidePoses.map(function (pos) { return pos[1]; });\r\n }\r\n state.snapBoundInfos = checkSnapBounds(guidelines, props.clipTargetBounds && { left: 0, top: 0, right: width, bottom: height }, guideXPoses, guideYPoses, 1, 1);\r\n if (originalDraggable) {\r\n var is3d = state.is3d, allMatrix = state.allMatrix;\r\n var n = is3d ? 4 : 3;\r\n var dragDist = boundDelta;\r\n if (isDragTarget) {\r\n dragDist = [\r\n firstDist[0] + boundDelta[0] - originalDist[0],\r\n firstDist[1] + boundDelta[1] - originalDist[1],\r\n ];\r\n }\r\n originalDraggable.deltaOffset = multiply(allMatrix, [dragDist[0], dragDist[1], 0, 0], n);\r\n }\r\n triggerEvent(moveable, \"onClip\", fillParams(moveable, e, __assign({ clipEventType: \"changed\", clipType: clipType, poses: nextPoses, clipStyle: clipStyle, clipStyles: nextClipStyles, distX: distX, distY: distY }, fillCSSObject((_c = {},\r\n _c[clipType === \"rect\" ? \"clip\" : \"clipPath\"] = clipStyle,\r\n _c), e))));\r\n return true;\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n this.unset(moveable);\r\n var isDrag = e.isDrag, datas = e.datas, isDouble = e.isDouble;\r\n var isLine = datas.isLine, isClipStart = datas.isClipStart, isControl = datas.isControl;\r\n if (!isClipStart) {\r\n return false;\r\n }\r\n triggerEvent(moveable, \"onClipEnd\", fillEndParams(moveable, e, {}));\r\n if (isDouble) {\r\n if (isControl) {\r\n removeClipPath(moveable, e);\r\n }\r\n else if (isLine) {\r\n // add\r\n addClipPath(moveable, e);\r\n }\r\n }\r\n return isDouble || isDrag;\r\n },\r\n unset: function (moveable) {\r\n moveable.state.clipPathState = \"\";\r\n moveable.state.snapBoundInfos = null;\r\n },\r\n};\r\n/**\r\n * Whether to clip the target. (default: false)\r\n * @name Moveable.Clippable#clippable\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * clippable: true,\r\n * defaultClipPath: \"inset\",\r\n * customClipPath: \"\",\r\n * clipRelative: false,\r\n * clipArea: false,\r\n * dragWithClip: true,\r\n * });\r\n * moveable.on(\"clipStart\", e => {\r\n * console.log(e);\r\n * }).on(\"clip\", e => {\r\n * if (e.clipType === \"rect\") {\r\n * e.target.style.clip = e.clipStyle;\r\n * } else {\r\n * e.target.style.clipPath = e.clipStyle;\r\n * }\r\n * }).on(\"clipEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * If clippath is not set, the default value can be set. (defaultClipPath < style < customClipPath < dragging clipPath)\r\n * @name Moveable.Clippable#defaultClipPath\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * clippable: true,\r\n * defaultClipPath: \"inset\",\r\n * customClipPath: \"\",\r\n * clipRelative: false,\r\n * clipArea: false,\r\n * dragWithClip: true,\r\n * });\r\n * moveable.on(\"clipStart\", e => {\r\n * console.log(e);\r\n * }).on(\"clip\", e => {\r\n * if (e.clipType === \"rect\") {\r\n * e.target.style.clip = e.clipStyle;\r\n * } else {\r\n * e.target.style.clipPath = e.clipStyle;\r\n * }\r\n * }).on(\"clipEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * % Can be used instead of the absolute px (`rect` not possible) (default: false)\r\n * @name Moveable.Clippable#clipRelative\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * clippable: true,\r\n * defaultClipPath: \"inset\",\r\n * customClipPath: \"\",\r\n * clipRelative: false,\r\n * clipArea: false,\r\n * dragWithClip: true,\r\n * });\r\n * moveable.on(\"clipStart\", e => {\r\n * console.log(e);\r\n * }).on(\"clip\", e => {\r\n * if (e.clipType === \"rect\") {\r\n * e.target.style.clip = e.clipStyle;\r\n * } else {\r\n * e.target.style.clipPath = e.clipStyle;\r\n * }\r\n * }).on(\"clipEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * You can force the custom clipPath. (defaultClipPath < style < customClipPath < dragging clipPath)\r\n * @name Moveable.Clippable#customClipPath\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * clippable: true,\r\n * defaultClipPath: \"inset\",\r\n * customClipPath: \"\",\r\n * clipRelative: false,\r\n * clipArea: false,\r\n * dragWithClip: true,\r\n * });\r\n * moveable.on(\"clipStart\", e => {\r\n * console.log(e);\r\n * }).on(\"clip\", e => {\r\n * if (e.clipType === \"rect\") {\r\n * e.target.style.clip = e.clipStyle;\r\n * } else {\r\n * e.target.style.clipPath = e.clipStyle;\r\n * }\r\n * }).on(\"clipEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * When dragging the target, the clip also moves. (default: true)\r\n * @name Moveable.Clippable#dragWithClip\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * clippable: true,\r\n * defaultClipPath: \"inset\",\r\n * customClipPath: \"\",\r\n * clipRelative: false,\r\n * clipArea: false,\r\n * dragWithClip: true,\r\n * });\r\n * moveable.on(\"clipStart\", e => {\r\n * console.log(e);\r\n * }).on(\"clip\", e => {\r\n * if (e.clipType === \"rect\") {\r\n * e.target.style.clip = e.clipStyle;\r\n * } else {\r\n * e.target.style.clipPath = e.clipStyle;\r\n * }\r\n * }).on(\"clipEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * You can drag the clip by setting clipArea.\r\n * @name Moveable.Clippable#clipArea\r\n * @default false\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * clippable: true,\r\n * defaultClipPath: \"inset\",\r\n * customClipPath: \"\",\r\n * clipRelative: false,\r\n * clipArea: false,\r\n * dragWithClip: true,\r\n * });\r\n * moveable.on(\"clipStart\", e => {\r\n * console.log(e);\r\n * }).on(\"clip\", e => {\r\n * if (e.clipType === \"rect\") {\r\n * e.target.style.clip = e.clipStyle;\r\n * } else {\r\n * e.target.style.clipPath = e.clipStyle;\r\n * }\r\n * }).on(\"clipEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n* Whether the clip is bound to the target.\r\n* @name Moveable.Clippable#clipTargetBounds\r\n* @default false\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* clippable: true,\r\n* defaultClipPath: \"inset\",\r\n* customClipPath: \"\",\r\n* clipRelative: false,\r\n* clipArea: false,\r\n* dragWithClip: true,\r\n* clipTargetBounds: true,\r\n* });\r\n* moveable.on(\"clipStart\", e => {\r\n* console.log(e);\r\n* }).on(\"clip\", e => {\r\n* if (e.clipType === \"rect\") {\r\n* e.target.style.clip = e.clipStyle;\r\n* } else {\r\n* e.target.style.clipPath = e.clipStyle;\r\n* }\r\n* }).on(\"clipEnd\", e => {\r\n* console.log(e);\r\n* });\r\n*/\r\n/**\r\n * Add clip guidelines in the vertical direction.\r\n * @name Moveable.Clippable#clipVerticalGuidelines\r\n * @default 0\r\n * @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* clippable: true,\r\n* defaultClipPath: \"inset\",\r\n* customClipPath: \"\",\r\n* clipRelative: false,\r\n* clipArea: false,\r\n* dragWithClip: true,\r\n* clipVerticalGuidelines: [0, 100, 200],\r\n* clipHorizontalGuidelines: [0, 100, 200],\r\n* clipSnapThreshold: 5,\r\n* });\r\n*/\r\n/**\r\n* Add clip guidelines in the horizontal direction.\r\n* @name Moveable.Clippable#clipHorizontalGuidelines\r\n* @default []\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* clippable: true,\r\n* defaultClipPath: \"inset\",\r\n* customClipPath: \"\",\r\n* clipRelative: false,\r\n* clipArea: false,\r\n* dragWithClip: true,\r\n* clipVerticalGuidelines: [0, 100, 200],\r\n* clipHorizontalGuidelines: [0, 100, 200],\r\n* clipSnapThreshold: 5,\r\n* });\r\n*/\r\n/**\r\n* istance value that can snap to clip guidelines.\r\n* @name Moveable.Clippable#clipSnapThreshold\r\n* @default 5\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* clippable: true,\r\n* defaultClipPath: \"inset\",\r\n* customClipPath: \"\",\r\n* clipRelative: false,\r\n* clipArea: false,\r\n* dragWithClip: true,\r\n* clipVerticalGuidelines: [0, 100, 200],\r\n* clipHorizontalGuidelines: [0, 100, 200],\r\n* clipSnapThreshold: 5,\r\n* });\r\n*/\r\n/**\r\n * When drag start the clip area or controls, the `clipStart` event is called.\r\n * @memberof Moveable.Clippable\r\n * @event clipStart\r\n * @param {Moveable.Clippable.OnClipStart} - Parameters for the `clipStart` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * clippable: true,\r\n * defaultClipPath: \"inset\",\r\n * customClipPath: \"\",\r\n * clipRelative: false,\r\n * clipArea: false,\r\n * dragWithClip: true,\r\n * });\r\n * moveable.on(\"clipStart\", e => {\r\n * console.log(e);\r\n * }).on(\"clip\", e => {\r\n * if (e.clipType === \"rect\") {\r\n * e.target.style.clip = e.clipStyle;\r\n * } else {\r\n * e.target.style.clipPath = e.clipStyle;\r\n * }\r\n * }).on(\"clipEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * When drag the clip area or controls, the `clip` event is called.\r\n * @memberof Moveable.Clippable\r\n * @event clip\r\n * @param {Moveable.Clippable.OnClip} - Parameters for the `clip` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * clippable: true,\r\n * defaultClipPath: \"inset\",\r\n * customClipPath: \"\",\r\n * clipRelative: false,\r\n * clipArea: false,\r\n * dragWithClip: true,\r\n * });\r\n * moveable.on(\"clipStart\", e => {\r\n * console.log(e);\r\n * }).on(\"clip\", e => {\r\n * if (e.clipType === \"rect\") {\r\n * e.target.style.clip = e.clipStyle;\r\n * } else {\r\n * e.target.style.clipPath = e.clipStyle;\r\n * }\r\n * }).on(\"clipEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * When drag end the clip area or controls, the `clipEnd` event is called.\r\n * @memberof Moveable.Clippable\r\n * @event clipEnd\r\n * @param {Moveable.Clippable.OnClipEnd} - Parameters for the `clipEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * clippable: true,\r\n * defaultClipPath: \"inset\",\r\n * customClipPath: \"\",\r\n * clipRelative: false,\r\n * clipArea: false,\r\n * dragWithClip: true,\r\n * });\r\n * moveable.on(\"clipStart\", e => {\r\n * console.log(e);\r\n * }).on(\"clip\", e => {\r\n * if (e.clipType === \"rect\") {\r\n * e.target.style.clip = e.clipStyle;\r\n * } else {\r\n * e.target.style.clipPath = e.clipStyle;\r\n * }\r\n * }).on(\"clipEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\n\n/**\r\n * @namespace OriginDraggable\r\n * @memberof Moveable\r\n * @description Whether to drag origin (default: false)\r\n */\r\nvar OriginDraggable = {\r\n name: \"originDraggable\",\r\n props: [\r\n \"originDraggable\",\r\n \"originRelative\",\r\n ],\r\n events: [\r\n \"dragOriginStart\",\r\n \"dragOrigin\",\r\n \"dragOriginEnd\",\r\n ],\r\n css: [\r\n \":host[data-able-origindraggable] .control.origin {\\npointer-events: auto;\\n}\",\r\n ],\r\n dragControlCondition: function (_, e) {\r\n if (e.isRequest) {\r\n return e.requestAble === \"originDraggable\";\r\n }\r\n return hasClass(e.inputEvent.target, prefix(\"origin\"));\r\n },\r\n dragControlStart: function (moveable, e) {\r\n var datas = e.datas;\r\n setDragStart(moveable, e);\r\n var params = fillParams(moveable, e, {\r\n dragStart: Draggable.dragStart(moveable, new CustomGesto().dragStart([0, 0], e)),\r\n });\r\n var result = triggerEvent(moveable, \"onDragOriginStart\", params);\r\n datas.startOrigin = moveable.state.transformOrigin;\r\n datas.startTargetOrigin = moveable.state.targetOrigin;\r\n datas.prevOrigin = [0, 0];\r\n datas.isDragOrigin = true;\r\n if (result === false) {\r\n datas.isDragOrigin = false;\r\n return false;\r\n }\r\n return params;\r\n },\r\n dragControl: function (moveable, e) {\r\n var datas = e.datas, isPinch = e.isPinch, isRequest = e.isRequest;\r\n if (!datas.isDragOrigin) {\r\n return false;\r\n }\r\n var _a = __read(getDragDist(e), 2), distX = _a[0], distY = _a[1];\r\n var state = moveable.state;\r\n var width = state.width, height = state.height, offsetMatrix = state.offsetMatrix, targetMatrix = state.targetMatrix, is3d = state.is3d;\r\n var _b = moveable.props.originRelative, originRelative = _b === void 0 ? true : _b;\r\n var n = is3d ? 4 : 3;\r\n var dist = [distX, distY];\r\n if (isRequest) {\r\n var distOrigin = e.distOrigin;\r\n if (distOrigin[0] || distOrigin[1]) {\r\n dist = distOrigin;\r\n }\r\n }\r\n var origin = plus(datas.startOrigin, dist);\r\n var targetOrigin = plus(datas.startTargetOrigin, dist);\r\n var delta = minus(dist, datas.prevOrigin);\r\n var nextMatrix = getNextMatrix(offsetMatrix, targetMatrix, origin, n);\r\n var rect = moveable.getRect();\r\n var nextRect = getRect(calculatePoses(nextMatrix, width, height, n));\r\n var dragDelta = [\r\n rect.left - nextRect.left,\r\n rect.top - nextRect.top,\r\n ];\r\n datas.prevOrigin = dist;\r\n var transformOrigin = [\r\n convertCSSSize(targetOrigin[0], width, originRelative),\r\n convertCSSSize(targetOrigin[1], height, originRelative),\r\n ].join(\" \");\r\n var result = Draggable.drag(moveable, setCustomDrag(e, moveable.state, dragDelta, !!isPinch, false));\r\n var params = fillParams(moveable, e, __assign(__assign({ width: width, height: height, origin: origin, dist: dist, delta: delta, transformOrigin: transformOrigin, drag: result }, fillCSSObject({\r\n transformOrigin: transformOrigin,\r\n transform: result.transform,\r\n }, e)), { afterTransform: result.transform }));\r\n triggerEvent(moveable, \"onDragOrigin\", params);\r\n return params;\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n var datas = e.datas;\r\n if (!datas.isDragOrigin) {\r\n return false;\r\n }\r\n triggerEvent(moveable, \"onDragOriginEnd\", fillEndParams(moveable, e, {}));\r\n return true;\r\n },\r\n dragGroupControlCondition: function (moveable, e) {\r\n return this.dragControlCondition(moveable, e);\r\n },\r\n dragGroupControlStart: function (moveable, e) {\r\n var params = this.dragControlStart(moveable, e);\r\n if (!params) {\r\n return false;\r\n }\r\n return true;\r\n },\r\n dragGroupControl: function (moveable, e) {\r\n var params = this.dragControl(moveable, e);\r\n if (!params) {\r\n return false;\r\n }\r\n moveable.transformOrigin = params.transformOrigin;\r\n return true;\r\n },\r\n /**\r\n * @method Moveable.OriginDraggable#request\r\n * @param {object} e - the OriginDraggable's request parameter\r\n * @param {number} [e.x] - x position\r\n * @param {number} [e.y] - y position\r\n * @param {number} [e.deltaX] - x number to move\r\n * @param {number} [e.deltaY] - y number to move\r\n * @param {array} [e.deltaOrigin] - left, top number to move transform-origin\r\n * @param {array} [e.origin] - transform-origin position\r\n * @param {number} [e.isInstant] - Whether to execute the request instantly\r\n * @return {Moveable.Requester} Moveable Requester\r\n * @example\r\n\n * // Instantly Request (requestStart - request - requestEnd)\r\n * // Use Relative Value\r\n * moveable.request(\"originDraggable\", { deltaX: 10, deltaY: 10 }, true);\r\n * // Use Absolute Value\r\n * moveable.request(\"originDraggable\", { x: 200, y: 100 }, true);\r\n * // Use Transform Value\r\n * moveable.request(\"originDraggable\", { deltaOrigin: [10, 0] }, true);\r\n * moveable.request(\"originDraggable\", { origin: [100, 0] }, true);\r\n * // requestStart\r\n * const requester = moveable.request(\"originDraggable\");\r\n *\r\n * // request\r\n * // Use Relative Value\r\n * requester.request({ deltaX: 10, deltaY: 10 });\r\n * requester.request({ deltaX: 10, deltaY: 10 });\r\n * requester.request({ deltaX: 10, deltaY: 10 });\r\n * // Use Absolute Value\r\n * moveable.request(\"originDraggable\", { x: 200, y: 100 });\r\n * moveable.request(\"originDraggable\", { x: 220, y: 100 });\r\n * moveable.request(\"originDraggable\", { x: 240, y: 100 });\r\n *\r\n * // requestEnd\r\n * requester.requestEnd();\r\n */\r\n request: function (moveable) {\r\n var datas = {};\r\n var rect = moveable.getRect();\r\n var distX = 0;\r\n var distY = 0;\r\n var transformOrigin = rect.transformOrigin;\r\n var distOrigin = [0, 0];\r\n return {\r\n isControl: true,\r\n requestStart: function () {\r\n return { datas: datas };\r\n },\r\n request: function (e) {\r\n if (\"deltaOrigin\" in e) {\r\n distOrigin[0] += e.deltaOrigin[0];\r\n distOrigin[1] += e.deltaOrigin[1];\r\n }\r\n else if (\"origin\" in e) {\r\n distOrigin[0] = e.origin[0] - transformOrigin[0];\r\n distOrigin[1] = e.origin[1] - transformOrigin[1];\r\n }\r\n else {\r\n if (\"x\" in e) {\r\n distX = e.x - rect.left;\r\n }\r\n else if (\"deltaX\" in e) {\r\n distX += e.deltaX;\r\n }\r\n if (\"y\" in e) {\r\n distY = e.y - rect.top;\r\n }\r\n else if (\"deltaY\" in e) {\r\n distY += e.deltaY;\r\n }\r\n }\r\n return { datas: datas, distX: distX, distY: distY, distOrigin: distOrigin };\r\n },\r\n requestEnd: function () {\r\n return { datas: datas, isDrag: true };\r\n },\r\n };\r\n },\r\n};\r\n/**\r\n * Whether to drag origin (default: false)\r\n * @name Moveable.OriginDraggable#originDraggable\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * originDraggable: true,\r\n * });\r\n * let translate = [0, 0];\r\n * moveable.on(\"dragOriginStart\", e => {\r\n * e.dragStart && e.dragStart.set(translate);\r\n * }).on(\"dragOrigin\", e => {\r\n * translate = e.drag.beforeTranslate;\r\n * e.target.style.cssText\r\n * = `transform-origin: ${e.transformOrigin};`\r\n * + `transform: translate(${translate[0]}px, ${translate[1]}px)`;\r\n * }).on(\"dragOriginEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * % Can be used instead of the absolute px (default: true)\r\n * @name Moveable.OriginDraggable#originRelative\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * originDraggable: true,\r\n * originRelative: false,\r\n * });\r\n * moveable.originRelative = true;\r\n */\r\n/**\r\n* When drag start the origin, the `dragOriginStart` event is called.\r\n* @memberof Moveable.OriginDraggable\r\n* @event dragOriginStart\r\n* @param {Moveable.OriginDraggable.OnDragOriginStart} - Parameters for the `dragOriginStart` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* originDraggable: true,\r\n* });\r\n* let translate = [0, 0];\r\n* moveable.on(\"dragOriginStart\", e => {\r\n* e.dragStart && e.dragStart.set(translate);\r\n* }).on(\"dragOrigin\", e => {\r\n* translate = e.drag.beforeTranslate;\r\n* e.target.style.cssText\r\n* = `transform-origin: ${e.transformOrigin};`\r\n* + `transform: translate(${translate[0]}px, ${translate[1]}px)`;\r\n* }).on(\"dragOriginEnd\", e => {\r\n* console.log(e);\r\n* });\r\n*/\r\n/**\r\n* When drag the origin, the `dragOrigin` event is called.\r\n* @memberof Moveable.OriginDraggable\r\n* @event dragOrigin\r\n* @param {Moveable.OriginDraggable.OnDragOrigin} - Parameters for the `dragOrigin` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* originDraggable: true,\r\n* });\r\n* let translate = [0, 0];\r\n* moveable.on(\"dragOriginStart\", e => {\r\n* e.dragStart && e.dragStart.set(translate);\r\n* }).on(\"dragOrigin\", e => {\r\n* translate = e.drag.beforeTranslate;\r\n* e.target.style.cssText\r\n* = `transform-origin: ${e.transformOrigin};`\r\n* + `transform: translate(${translate[0]}px, ${translate[1]}px)`;\r\n* }).on(\"dragOriginEnd\", e => {\r\n* console.log(e);\r\n* });\r\n*/\r\n/**\r\n* When drag end the origin, the `dragOriginEnd` event is called.\r\n* @memberof Moveable.OriginDraggable\r\n* @event dragOriginEnd\r\n* @param {Moveable.OriginDraggable.OnDragOriginEnd} - Parameters for the `dragOriginEnd` event\r\n* @example\r\n* import Moveable from \"moveable\";\r\n*\r\n* const moveable = new Moveable(document.body, {\r\n* originDraggable: true,\r\n* });\r\n* let translate = [0, 0];\r\n* moveable.on(\"dragOriginStart\", e => {\r\n* e.dragStart && e.dragStart.set(translate);\r\n* }).on(\"dragOrigin\", e => {\r\n* translate = e.drag.beforeTranslate;\r\n* e.target.style.cssText\r\n* = `transform-origin: ${e.transformOrigin};`\r\n* + `transform: translate(${translate[0]}px, ${translate[1]}px)`;\r\n* }).on(\"dragOriginEnd\", e => {\r\n* console.log(e);\r\n* });\r\n*/\n\nfunction addBorderRadiusByLine(controlPoses, lineIndex, distX, distY) {\r\n // lineIndex\r\n // 0 top\r\n // 1 right\r\n // 2 bottom\r\n // 3 left\r\n var horizontalsLength = controlPoses.filter(function (_a) {\r\n var virtual = _a.virtual, horizontal = _a.horizontal;\r\n return horizontal && !virtual;\r\n }).length;\r\n var verticalsLength = controlPoses.filter(function (_a) {\r\n var virtual = _a.virtual, vertical = _a.vertical;\r\n return vertical && !virtual;\r\n }).length;\r\n var controlIndex = -1;\r\n //top\r\n if (lineIndex === 0) {\r\n if (horizontalsLength === 0) {\r\n controlIndex = 0;\r\n }\r\n else if (horizontalsLength === 1) {\r\n controlIndex = 1;\r\n }\r\n }\r\n // bottom\r\n if (lineIndex === 2) {\r\n if (horizontalsLength <= 2) {\r\n controlIndex = 2;\r\n }\r\n else if (horizontalsLength <= 3) {\r\n controlIndex = 3;\r\n }\r\n }\r\n // left\r\n if (lineIndex === 3) {\r\n if (verticalsLength === 0) {\r\n controlIndex = 4;\r\n }\r\n else if (verticalsLength < 4) {\r\n controlIndex = 7;\r\n }\r\n }\r\n // right\r\n if (lineIndex === 1) {\r\n if (verticalsLength <= 1) {\r\n controlIndex = 5;\r\n }\r\n else if (verticalsLength <= 2) {\r\n controlIndex = 6;\r\n }\r\n }\r\n if (controlIndex === -1 || !controlPoses[controlIndex].virtual) {\r\n return;\r\n }\r\n var controlPoseInfo = controlPoses[controlIndex];\r\n addBorderRadius(controlPoses, controlIndex);\r\n if (controlIndex < 4) {\r\n controlPoseInfo.pos[0] = distX;\r\n }\r\n else {\r\n controlPoseInfo.pos[1] = distY;\r\n }\r\n}\r\nfunction addBorderRadius(controlPoses, index) {\r\n if (index < 4) {\r\n controlPoses.slice(0, index + 1).forEach(function (info) {\r\n info.virtual = false;\r\n });\r\n }\r\n else {\r\n if (controlPoses[0].virtual) {\r\n controlPoses[0].virtual = false;\r\n }\r\n controlPoses.slice(4, index + 1).forEach(function (info) {\r\n info.virtual = false;\r\n });\r\n }\r\n}\r\nfunction removeBorderRadius(controlPoses, index) {\r\n if (index < 4) {\r\n controlPoses.slice(index, 4).forEach(function (info) {\r\n info.virtual = true;\r\n });\r\n }\r\n else {\r\n controlPoses.slice(index).forEach(function (info) {\r\n info.virtual = true;\r\n });\r\n }\r\n}\r\nfunction getBorderRadius(borderRadius, width, height, minCounts, full) {\r\n if (minCounts === void 0) { minCounts = [0, 0]; }\r\n var values = [];\r\n if (!borderRadius || borderRadius === \"0px\") {\r\n values = [];\r\n }\r\n else {\r\n values = splitSpace(borderRadius);\r\n }\r\n return getRadiusValues(values, width, height, 0, 0, minCounts, full);\r\n}\r\nfunction triggerRoundEvent(moveable, e, dist, delta, nextPoses) {\r\n var state = moveable.state;\r\n var width = state.width, height = state.height;\r\n var _a = getRadiusStyles(nextPoses, moveable.props.roundRelative, width, height), raws = _a.raws, styles = _a.styles, radiusPoses = _a.radiusPoses;\r\n var _b = splitRadiusPoses(radiusPoses, raws), horizontals = _b.horizontals, verticals = _b.verticals;\r\n var borderRadius = styles.join(\" \");\r\n state.borderRadiusState = borderRadius;\r\n var params = fillParams(moveable, e, __assign({ horizontals: horizontals, verticals: verticals, borderRadius: borderRadius, width: width, height: height, delta: delta, dist: dist }, fillCSSObject({\r\n borderRadius: borderRadius,\r\n }, e)));\r\n triggerEvent(moveable, \"onRound\", params);\r\n return params;\r\n}\r\nfunction getStyleBorderRadius(moveable) {\r\n var _a, _b;\r\n var style = moveable.getState().style;\r\n var borderRadius = style.borderRadius || \"\";\r\n if (!borderRadius && moveable.props.groupable) {\r\n var firstMoveable = moveable.moveables[0];\r\n var firstTarget = moveable.getTargets()[0];\r\n if (firstTarget) {\r\n if ((firstMoveable === null || firstMoveable === void 0 ? void 0 : firstMoveable.props.target) === firstTarget) {\r\n borderRadius = (_b = (_a = moveable.moveables[0]) === null || _a === void 0 ? void 0 : _a.state.style.borderRadius) !== null && _b !== void 0 ? _b : \"\";\r\n style.borderRadius = borderRadius;\r\n }\r\n else {\r\n borderRadius = getComputedStyle(firstTarget).borderRadius;\r\n style.borderRadius = borderRadius;\r\n }\r\n }\r\n }\r\n return borderRadius;\r\n}\r\n/**\r\n * @namespace Moveable.Roundable\r\n * @description Whether to show and drag or double click border-radius\r\n */\r\nvar Roundable = {\r\n name: \"roundable\",\r\n props: [\r\n \"roundable\",\r\n \"roundRelative\",\r\n \"minRoundControls\",\r\n \"maxRoundControls\",\r\n \"roundClickable\",\r\n \"roundPadding\",\r\n \"isDisplayShadowRoundControls\",\r\n ],\r\n events: [\r\n \"roundStart\",\r\n \"round\",\r\n \"roundEnd\",\r\n \"roundGroupStart\",\r\n \"roundGroup\",\r\n \"roundGroupEnd\",\r\n ],\r\n css: [\r\n \".control.border-radius {\\nbackground: #d66;\\ncursor: pointer;\\nz-index: 3;\\n}\",\r\n \".control.border-radius.vertical {\\nbackground: #d6d;\\nz-index: 2;\\n}\",\r\n \".control.border-radius.virtual {\\nopacity: 0.5;\\nz-index: 1;\\n}\",\r\n \":host.round-line-clickable .line.direction {\\ncursor: pointer;\\n}\",\r\n ],\r\n className: function (moveable) {\r\n var roundClickable = moveable.props.roundClickable;\r\n return roundClickable === true || roundClickable === \"line\" ? prefix(\"round-line-clickable\") : \"\";\r\n },\r\n requestStyle: function () {\r\n return [\"borderRadius\"];\r\n },\r\n requestChildStyle: function () {\r\n return [\"borderRadius\"];\r\n },\r\n render: function (moveable, React) {\r\n var _a = moveable.getState(), target = _a.target, width = _a.width, height = _a.height, allMatrix = _a.allMatrix, is3d = _a.is3d, left = _a.left, top = _a.top, borderRadiusState = _a.borderRadiusState;\r\n var _b = moveable.props, _c = _b.minRoundControls, minRoundControls = _c === void 0 ? [0, 0] : _c, _d = _b.maxRoundControls, maxRoundControls = _d === void 0 ? [4, 4] : _d, zoom = _b.zoom, _e = _b.roundPadding, roundPadding = _e === void 0 ? 0 : _e, isDisplayShadowRoundControls = _b.isDisplayShadowRoundControls, groupable = _b.groupable;\r\n if (!target) {\r\n return null;\r\n }\r\n var borderRadius = borderRadiusState || getStyleBorderRadius(moveable);\r\n var n = is3d ? 4 : 3;\r\n var radiusValues = getBorderRadius(borderRadius, width, height, minRoundControls, true);\r\n if (!radiusValues) {\r\n return null;\r\n }\r\n var verticalCount = 0;\r\n var horizontalCount = 0;\r\n var basePos = groupable ? [0, 0] : [left, top];\r\n return radiusValues.map(function (v, i) {\r\n var horizontal = v.horizontal;\r\n var vertical = v.vertical;\r\n var direction = v.direction || \"\";\r\n var originalPos = __spreadArray([], __read(v.pos), false);\r\n horizontalCount += Math.abs(horizontal);\r\n verticalCount += Math.abs(vertical);\r\n if (horizontal && direction.indexOf(\"n\") > -1) {\r\n originalPos[1] -= roundPadding;\r\n }\r\n if (vertical && direction.indexOf(\"w\") > -1) {\r\n originalPos[0] -= roundPadding;\r\n }\r\n if (horizontal && direction.indexOf(\"s\") > -1) {\r\n originalPos[1] += roundPadding;\r\n }\r\n if (vertical && direction.indexOf(\"e\") > -1) {\r\n originalPos[0] += roundPadding;\r\n }\r\n var pos = minus(calculatePosition(allMatrix, originalPos, n), basePos);\r\n var isDisplayVerticalShadow = isDisplayShadowRoundControls\r\n && isDisplayShadowRoundControls !== \"horizontal\";\r\n var isDisplay = v.vertical\r\n ? verticalCount <= maxRoundControls[1] && (isDisplayVerticalShadow || !v.virtual)\r\n : horizontalCount <= maxRoundControls[0] && (isDisplayShadowRoundControls || !v.virtual);\r\n return React.createElement(\"div\", { key: \"borderRadiusControl\".concat(i), className: prefix(\"control\", \"border-radius\", v.vertical ? \"vertical\" : \"\", v.virtual ? \"virtual\" : \"\"), \"data-radius-index\": i, style: {\r\n display: isDisplay ? \"block\" : \"none\",\r\n transform: \"translate(\".concat(pos[0], \"px, \").concat(pos[1], \"px) scale(\").concat(zoom, \")\"),\r\n } });\r\n });\r\n },\r\n dragControlCondition: function (moveable, e) {\r\n if (!e.inputEvent || e.isRequest) {\r\n return false;\r\n }\r\n var className = (e.inputEvent.target.getAttribute(\"class\") || \"\");\r\n return className.indexOf(\"border-radius\") > -1\r\n || (className.indexOf(\"moveable-line\") > -1 && className.indexOf(\"moveable-direction\") > -1);\r\n },\r\n dragGroupControlCondition: function (moveable, e) {\r\n return this.dragControlCondition(moveable, e);\r\n },\r\n dragControlStart: function (moveable, e) {\r\n var inputEvent = e.inputEvent, datas = e.datas;\r\n var inputTarget = inputEvent.target;\r\n var className = (inputTarget.getAttribute(\"class\") || \"\");\r\n var isControl = className.indexOf(\"border-radius\") > -1;\r\n var isLine = className.indexOf(\"moveable-line\") > -1 && className.indexOf(\"moveable-direction\") > -1;\r\n var controlIndex = isControl ? parseInt(inputTarget.getAttribute(\"data-radius-index\"), 10) : -1;\r\n var lineIndex = -1;\r\n if (isLine) {\r\n var indexAttr = inputTarget.getAttribute(\"data-line-key\") || \"\";\r\n if (indexAttr) {\r\n lineIndex = parseInt(indexAttr.replace(/render-line-/g, \"\"), 10);\r\n if (isNaN(lineIndex)) {\r\n lineIndex = -1;\r\n }\r\n }\r\n }\r\n if (!isControl && !isLine) {\r\n return false;\r\n }\r\n var params = fillParams(moveable, e, {});\r\n var result = triggerEvent(moveable, \"onRoundStart\", params);\r\n if (result === false) {\r\n return false;\r\n }\r\n datas.lineIndex = lineIndex;\r\n datas.controlIndex = controlIndex;\r\n datas.isControl = isControl;\r\n datas.isLine = isLine;\r\n setDragStart(moveable, e);\r\n var _a = moveable.props, roundRelative = _a.roundRelative, _b = _a.minRoundControls, minRoundControls = _b === void 0 ? [0, 0] : _b;\r\n var state = moveable.state;\r\n var width = state.width, height = state.height;\r\n datas.isRound = true;\r\n datas.prevDist = [0, 0];\r\n var borderRadius = getStyleBorderRadius(moveable);\r\n var controlPoses = getBorderRadius(borderRadius || \"\", width, height, minRoundControls, true) || [];\r\n datas.controlPoses = controlPoses;\r\n state.borderRadiusState = getRadiusStyles(controlPoses, roundRelative, width, height).styles.join(\" \");\r\n return params;\r\n },\r\n dragControl: function (moveable, e) {\r\n var datas = e.datas;\r\n var controlPoses = datas.controlPoses;\r\n if (!datas.isRound || !datas.isControl || !controlPoses.length) {\r\n return false;\r\n }\r\n var index = datas.controlIndex;\r\n var _a = __read(getDragDist(e), 2), distX = _a[0], distY = _a[1];\r\n var dist = [distX, distY];\r\n var delta = minus(dist, datas.prevDist);\r\n var _b = moveable.props.maxRoundControls, maxRoundControls = _b === void 0 ? [4, 4] : _b;\r\n var _c = moveable.state, width = _c.width, height = _c.height;\r\n var selectedControlPose = controlPoses[index];\r\n var selectedVertical = selectedControlPose.vertical;\r\n var selectedHorizontal = selectedControlPose.horizontal;\r\n // 0: [0, 1, 2, 3] maxCount === 1\r\n // 0: [0, 2] maxCount === 2\r\n // 1: [1, 3] maxCount === 2\r\n // 0: [0] maxCount === 3\r\n // 1: [1, 3] maxCount === 3\r\n var dists = controlPoses.map(function (pose) {\r\n var horizontal = pose.horizontal, vertical = pose.vertical;\r\n var poseDist = [\r\n horizontal * selectedHorizontal * dist[0],\r\n vertical * selectedVertical * dist[1],\r\n ];\r\n if (horizontal) {\r\n if (maxRoundControls[0] === 1) {\r\n return poseDist;\r\n }\r\n else if (maxRoundControls[0] < 4 && horizontal !== selectedHorizontal) {\r\n return poseDist;\r\n }\r\n }\r\n else if (maxRoundControls[1] === 0) {\r\n poseDist[1] = vertical * selectedHorizontal * dist[0] / width * height;\r\n return poseDist;\r\n }\r\n else if (selectedVertical) {\r\n if (maxRoundControls[1] === 1) {\r\n return poseDist;\r\n }\r\n else if (maxRoundControls[1] < 4 && vertical !== selectedVertical) {\r\n return poseDist;\r\n }\r\n }\r\n return [0, 0];\r\n });\r\n dists[index] = dist;\r\n var nextPoses = controlPoses.map(function (info, i) {\r\n return __assign(__assign({}, info), { pos: plus(info.pos, dists[i]) });\r\n });\r\n if (index < 4) {\r\n nextPoses.slice(0, index + 1).forEach(function (info) {\r\n info.virtual = false;\r\n });\r\n }\r\n else {\r\n nextPoses.slice(4, index + 1).forEach(function (info) {\r\n info.virtual = false;\r\n });\r\n }\r\n datas.prevDist = [distX, distY];\r\n return triggerRoundEvent(moveable, e, dist, delta, nextPoses);\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n var state = moveable.state;\r\n state.borderRadiusState = \"\";\r\n var datas = e.datas, isDouble = e.isDouble;\r\n if (!datas.isRound) {\r\n return false;\r\n }\r\n var isControl = datas.isControl, controlIndex = datas.controlIndex, isLine = datas.isLine, lineIndex = datas.lineIndex;\r\n var controlPoses = datas.controlPoses;\r\n var length = controlPoses.filter(function (_a) {\r\n var virtual = _a.virtual;\r\n return virtual;\r\n }).length;\r\n var _a = moveable.props.roundClickable, roundClickable = _a === void 0 ? true : _a;\r\n if (isDouble && roundClickable) {\r\n if (isControl && (roundClickable === true || roundClickable === \"control\")) {\r\n removeBorderRadius(controlPoses, controlIndex);\r\n }\r\n else if (isLine && (roundClickable === true || roundClickable === \"line\")) {\r\n var _b = __read(calculatePointerDist(moveable, e), 2), distX = _b[0], distY = _b[1];\r\n addBorderRadiusByLine(controlPoses, lineIndex, distX, distY);\r\n }\r\n if (length !== controlPoses.filter(function (_a) {\r\n var virtual = _a.virtual;\r\n return virtual;\r\n }).length) {\r\n triggerRoundEvent(moveable, e, [0, 0], [0, 0], controlPoses);\r\n }\r\n }\r\n var params = fillEndParams(moveable, e, {});\r\n triggerEvent(moveable, \"onRoundEnd\", params);\r\n state.borderRadiusState = \"\";\r\n return params;\r\n },\r\n dragGroupControlStart: function (moveable, e) {\r\n var result = this.dragControlStart(moveable, e);\r\n if (!result) {\r\n return false;\r\n }\r\n var moveables = moveable.moveables;\r\n var targets = moveable.props.targets;\r\n var events = fillChildEvents(moveable, \"roundable\", e);\r\n var nextParams = __assign({ targets: moveable.props.targets, events: events.map(function (ev, i) {\r\n return __assign(__assign({}, ev), { target: targets[i], moveable: moveables[i], currentTarget: moveables[i] });\r\n }) }, result);\r\n triggerEvent(moveable, \"onRoundGroupStart\", nextParams);\r\n return result;\r\n },\r\n dragGroupControl: function (moveable, e) {\r\n var result = this.dragControl(moveable, e);\r\n if (!result) {\r\n return false;\r\n }\r\n var moveables = moveable.moveables;\r\n var targets = moveable.props.targets;\r\n var events = fillChildEvents(moveable, \"roundable\", e);\r\n var nextParams = __assign({ targets: moveable.props.targets, events: events.map(function (ev, i) {\r\n return __assign(__assign(__assign({}, ev), { target: targets[i], moveable: moveables[i], currentTarget: moveables[i] }), fillCSSObject({\r\n borderRadius: result.borderRadius,\r\n }, ev));\r\n }) }, result);\r\n triggerEvent(moveable, \"onRoundGroup\", nextParams);\r\n return nextParams;\r\n },\r\n dragGroupControlEnd: function (moveable, e) {\r\n var moveables = moveable.moveables;\r\n var targets = moveable.props.targets;\r\n var events = fillChildEvents(moveable, \"roundable\", e);\r\n catchEvent(moveable, \"onRound\", function (parentEvent) {\r\n var nextParams = __assign({ targets: moveable.props.targets, events: events.map(function (ev, i) {\r\n return __assign(__assign(__assign({}, ev), { target: targets[i], moveable: moveables[i], currentTarget: moveables[i] }), fillCSSObject({\r\n borderRadius: parentEvent.borderRadius,\r\n }, ev));\r\n }) }, parentEvent);\r\n triggerEvent(moveable, \"onRoundGroup\", nextParams);\r\n });\r\n var result = this.dragControlEnd(moveable, e);\r\n if (!result) {\r\n return false;\r\n }\r\n var nextParams = __assign({ targets: moveable.props.targets, events: events.map(function (ev, i) {\r\n var _a;\r\n return __assign(__assign({}, ev), { target: targets[i], moveable: moveables[i], currentTarget: moveables[i], lastEvent: (_a = ev.datas) === null || _a === void 0 ? void 0 : _a.lastEvent });\r\n }) }, result);\r\n triggerEvent(moveable, \"onRoundGroupEnd\", nextParams);\r\n return nextParams;\r\n },\r\n unset: function (moveable) {\r\n moveable.state.borderRadiusState = \"\";\r\n },\r\n};\r\n/**\r\n * Whether to show and drag or double click border-radius, (default: false)\r\n * @name Moveable.Roundable#roundable\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * roundRelative: false,\r\n * });\r\n * moveable.on(\"roundStart\", e => {\r\n * console.log(e);\r\n * }).on(\"round\", e => {\r\n * e.target.style.borderRadius = e.borderRadius;\r\n * }).on(\"roundEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * % Can be used instead of the absolute px\r\n * @name Moveable.Roundable#roundRelative\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * roundRelative: false,\r\n * });\r\n * moveable.on(\"roundStart\", e => {\r\n * console.log(e);\r\n * }).on(\"round\", e => {\r\n * e.target.style.borderRadius = e.borderRadius;\r\n * }).on(\"roundEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * Minimum number of round controls. It moves in proportion by control. [horizontal, vertical] (default: [0, 0])\r\n * @name Moveable.Roundable#minRoundControls\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * roundRelative: false,\r\n * minRoundControls: [0, 0],\r\n * });\r\n * moveable.minRoundControls = [1, 0];\r\n */\r\n/**\r\n * Maximum number of round controls. It moves in proportion by control. [horizontal, vertical] (default: [4, 4])\r\n * @name Moveable.Roundable#maxRoundControls\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * roundRelative: false,\r\n * maxRoundControls: [4, 4],\r\n * });\r\n * moveable.maxRoundControls = [1, 0];\r\n */\r\n/**\r\n * Whether you can add/delete round controls by double-clicking a line or control.\r\n * @name Moveable.Roundable#roundClickable\r\n * @default true\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * roundRelative: false,\r\n * roundClickable: true,\r\n * });\r\n * moveable.roundClickable = false;\r\n */\r\n/**\r\n * Whether to show a round control that does not actually exist as a shadow\r\n * @name Moveable.Roundable#isDisplayShadowRoundControls\r\n * @default false\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * isDisplayShadowRoundControls: false,\r\n * });\r\n * moveable.isDisplayShadowRoundControls = true;\r\n */\r\n/**\r\n * The padding value of the position of the round control\r\n * @name Moveable.Roundable#roundPadding\r\n * @default false\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * roundPadding: 0,\r\n * });\r\n * moveable.roundPadding = 15;\r\n */\r\n/**\r\n * When drag start the clip area or controls, the `roundStart` event is called.\r\n * @memberof Moveable.Roundable\r\n * @event roundStart\r\n * @param {Moveable.Roundable.OnRoundStart} - Parameters for the `roundStart` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * roundRelative: false,\r\n * });\r\n * moveable.on(\"roundStart\", e => {\r\n * console.log(e);\r\n * }).on(\"round\", e => {\r\n * e.target.style.borderRadius = e.borderRadius;\r\n * }).on(\"roundEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * When drag or double click the border area or controls, the `round` event is called.\r\n * @memberof Moveable.Roundable\r\n * @event round\r\n * @param {Moveable.Roundable.OnRound} - Parameters for the `round` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * roundRelative: false,\r\n * });\r\n * moveable.on(\"roundStart\", e => {\r\n * console.log(e);\r\n * }).on(\"round\", e => {\r\n * e.target.style.borderRadius = e.borderRadius;\r\n * }).on(\"roundEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * When drag end the border area or controls, the `roundEnd` event is called.\r\n * @memberof Moveable.Roundable\r\n * @event roundEnd\r\n * @param {Moveable.Roundable.onRoundEnd} - Parameters for the `roundEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * roundable: true,\r\n * roundRelative: false,\r\n * });\r\n * moveable.on(\"roundStart\", e => {\r\n * console.log(e);\r\n * }).on(\"round\", e => {\r\n * e.target.style.borderRadius = e.borderRadius;\r\n * }).on(\"roundEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * When drag start the clip area or controls, the `roundGroupStart` event is called.\r\n * @memberof Moveable.Roundable\r\n * @event roundGroupStart\r\n * @param {Moveable.Roundable.OnRoundGroupStart} - Parameters for the `roundGroupStart` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * targets: [target1, target2, target3],\r\n * roundable: true,\r\n * });\r\n * moveable.on(\"roundGroupStart\", e => {\r\n * console.log(e.targets);\r\n * }).on(\"roundGroup\", e => {\r\n * e.events.forEach(ev => {\r\n * ev.target.style.cssText += ev.cssText;\r\n * });\r\n * }).on(\"roundGroupEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * When drag or double click the border area or controls, the `roundGroup` event is called.\r\n * @memberof Moveable.Roundable\r\n * @event roundGroup\r\n * @param {Moveable.Roundable.OnRoundGroup} - Parameters for the `roundGroup` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * targets: [target1, target2, target3],\r\n * roundable: true,\r\n * });\r\n * moveable.on(\"roundGroupStart\", e => {\r\n * console.log(e.targets);\r\n * }).on(\"roundGroup\", e => {\r\n * e.events.forEach(ev => {\r\n * ev.target.style.cssText += ev.cssText;\r\n * });\r\n * }).on(\"roundGroupEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\r\n/**\r\n * When drag end the border area or controls, the `roundGroupEnd` event is called.\r\n * @memberof Moveable.Roundable\r\n * @event roundGroupEnd\r\n * @param {Moveable.Roundable.onRoundGroupEnd} - Parameters for the `roundGroupEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * targets: [target1, target2, target3],\r\n * roundable: true,\r\n * });\r\n * moveable.on(\"roundGroupStart\", e => {\r\n * console.log(e.targets);\r\n * }).on(\"roundGroup\", e => {\r\n * e.events.forEach(ev => {\r\n * ev.target.style.cssText += ev.cssText;\r\n * });\r\n * }).on(\"roundGroupEnd\", e => {\r\n * console.log(e);\r\n * });\r\n */\n\nfunction isIdentityMatrix(matrix, is3d) {\r\n var n = is3d ? 4 : 3;\r\n var identityMatrix = createIdentityMatrix(n);\r\n var value = \"matrix\".concat(is3d ? \"3d\" : \"\", \"(\").concat(identityMatrix.join(\",\"), \")\");\r\n return matrix === value || matrix === \"matrix(1,0,0,1,0,0)\";\r\n}\r\nvar BeforeRenderable = {\r\n isPinch: true,\r\n name: \"beforeRenderable\",\r\n props: [],\r\n events: [\r\n \"beforeRenderStart\",\r\n \"beforeRender\",\r\n \"beforeRenderEnd\",\r\n \"beforeRenderGroupStart\",\r\n \"beforeRenderGroup\",\r\n \"beforeRenderGroupEnd\",\r\n ],\r\n dragRelation: \"weak\",\r\n setTransform: function (moveable, e) {\r\n var _a = moveable.state, is3d = _a.is3d, targetMatrix = _a.targetMatrix, inlineTransform = _a.inlineTransform;\r\n var cssMatrix = is3d\r\n ? \"matrix3d(\".concat(targetMatrix.join(\",\"), \")\")\r\n : \"matrix(\".concat(convertMatrixtoCSS(targetMatrix, true), \")\");\r\n var startTransform = !inlineTransform || inlineTransform === \"none\" ? cssMatrix : inlineTransform;\r\n e.datas.startTransforms = isIdentityMatrix(startTransform, is3d) ? [] : splitSpace(startTransform);\r\n },\r\n resetStyle: function (e) {\r\n var datas = e.datas;\r\n datas.nextStyle = {};\r\n datas.nextTransforms = e.datas.startTransforms;\r\n datas.nextTransformAppendedIndexes = [];\r\n },\r\n fillDragStartParams: function (moveable, e) {\r\n return fillParams(moveable, e, {\r\n setTransform: function (transform) {\r\n e.datas.startTransforms = isArray(transform) ? transform : splitSpace(transform);\r\n },\r\n isPinch: !!e.isPinch,\r\n });\r\n },\r\n fillDragParams: function (moveable, e) {\r\n return fillParams(moveable, e, {\r\n isPinch: !!e.isPinch,\r\n });\r\n },\r\n dragStart: function (moveable, e) {\r\n this.setTransform(moveable, e);\r\n this.resetStyle(e);\r\n triggerEvent(moveable, \"onBeforeRenderStart\", this.fillDragStartParams(moveable, e));\r\n },\r\n drag: function (moveable, e) {\r\n if (!e.datas.startTransforms) {\r\n this.setTransform(moveable, e);\r\n }\r\n this.resetStyle(e);\r\n triggerEvent(moveable, \"onBeforeRender\", fillParams(moveable, e, {\r\n isPinch: !!e.isPinch,\r\n }));\r\n },\r\n dragEnd: function (moveable, e) {\r\n if (!e.datas.startTransforms) {\r\n this.setTransform(moveable, e);\r\n this.resetStyle(e);\r\n }\r\n triggerEvent(moveable, \"onBeforeRenderEnd\", fillParams(moveable, e, {\r\n isPinch: !!e.isPinch,\r\n isDrag: e.isDrag,\r\n }));\r\n },\r\n dragGroupStart: function (moveable, e) {\r\n var _this = this;\r\n this.dragStart(moveable, e);\r\n var events = fillChildEvents(moveable, \"beforeRenderable\", e);\r\n var moveables = moveable.moveables;\r\n var params = events.map(function (childEvent, i) {\r\n var childMoveable = moveables[i];\r\n _this.setTransform(childMoveable, childEvent);\r\n _this.resetStyle(childEvent);\r\n return _this.fillDragStartParams(childMoveable, childEvent);\r\n });\r\n triggerEvent(moveable, \"onBeforeRenderGroupStart\", fillParams(moveable, e, {\r\n isPinch: !!e.isPinch,\r\n targets: moveable.props.targets,\r\n setTransform: function () { },\r\n events: params,\r\n }));\r\n },\r\n dragGroup: function (moveable, e) {\r\n var _this = this;\r\n this.drag(moveable, e);\r\n var events = fillChildEvents(moveable, \"beforeRenderable\", e);\r\n var moveables = moveable.moveables;\r\n var params = events.map(function (childEvent, i) {\r\n var childMoveable = moveables[i];\r\n _this.resetStyle(childEvent);\r\n return _this.fillDragParams(childMoveable, childEvent);\r\n });\r\n triggerEvent(moveable, \"onBeforeRenderGroup\", fillParams(moveable, e, {\r\n isPinch: !!e.isPinch,\r\n targets: moveable.props.targets,\r\n events: params,\r\n }));\r\n },\r\n dragGroupEnd: function (moveable, e) {\r\n this.dragEnd(moveable, e);\r\n triggerEvent(moveable, \"onBeforeRenderGroupEnd\", fillParams(moveable, e, {\r\n isPinch: !!e.isPinch,\r\n isDrag: e.isDrag,\r\n targets: moveable.props.targets,\r\n }));\r\n },\r\n dragControlStart: function (moveable, e) {\r\n return this.dragStart(moveable, e);\r\n },\r\n dragControl: function (moveable, e) {\r\n return this.drag(moveable, e);\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n return this.dragEnd(moveable, e);\r\n },\r\n dragGroupControlStart: function (moveable, e) {\r\n return this.dragGroupStart(moveable, e);\r\n },\r\n dragGroupControl: function (moveable, e) {\r\n return this.dragGroup(moveable, e);\r\n },\r\n dragGroupControlEnd: function (moveable, e) {\r\n return this.dragGroupEnd(moveable, e);\r\n },\r\n};\n\nvar Renderable = {\r\n name: \"renderable\",\r\n props: [],\r\n events: [\r\n \"renderStart\",\r\n \"render\",\r\n \"renderEnd\",\r\n \"renderGroupStart\",\r\n \"renderGroup\",\r\n \"renderGroupEnd\",\r\n ],\r\n dragRelation: \"weak\",\r\n dragStart: function (moveable, e) {\r\n triggerEvent(moveable, \"onRenderStart\", fillParams(moveable, e, {\r\n isPinch: !!e.isPinch,\r\n }));\r\n },\r\n drag: function (moveable, e) {\r\n triggerEvent(moveable, \"onRender\", this.fillDragParams(moveable, e));\r\n },\r\n dragAfter: function (moveable, e) {\r\n return this.drag(moveable, e);\r\n },\r\n dragEnd: function (moveable, e) {\r\n triggerEvent(moveable, \"onRenderEnd\", this.fillDragEndParams(moveable, e));\r\n },\r\n dragGroupStart: function (moveable, e) {\r\n triggerEvent(moveable, \"onRenderGroupStart\", fillParams(moveable, e, {\r\n isPinch: !!e.isPinch,\r\n targets: moveable.props.targets,\r\n }));\r\n },\r\n dragGroup: function (moveable, e) {\r\n var _this = this;\r\n var events = fillChildEvents(moveable, \"beforeRenderable\", e);\r\n var moveables = moveable.moveables;\r\n var params = events.map(function (childEvent, i) {\r\n var childMoveable = moveables[i];\r\n return _this.fillDragParams(childMoveable, childEvent);\r\n });\r\n triggerEvent(moveable, \"onRenderGroup\", fillParams(moveable, e, __assign(__assign({ isPinch: !!e.isPinch, targets: moveable.props.targets, transform: getNextTransformText(e), transformObject: {} }, fillCSSObject(getNextStyle(e))), { events: params })));\r\n },\r\n dragGroupEnd: function (moveable, e) {\r\n var _this = this;\r\n var events = fillChildEvents(moveable, \"beforeRenderable\", e);\r\n var moveables = moveable.moveables;\r\n var params = events.map(function (childEvent, i) {\r\n var childMoveable = moveables[i];\r\n return _this.fillDragEndParams(childMoveable, childEvent);\r\n });\r\n triggerEvent(moveable, \"onRenderGroupEnd\", fillParams(moveable, e, __assign({ isPinch: !!e.isPinch, isDrag: e.isDrag, targets: moveable.props.targets, events: params, transformObject: {}, transform: getNextTransformText(e) }, fillCSSObject(getNextStyle(e)))));\r\n },\r\n dragControlStart: function (moveable, e) {\r\n return this.dragStart(moveable, e);\r\n },\r\n dragControl: function (moveable, e) {\r\n return this.drag(moveable, e);\r\n },\r\n dragControlAfter: function (moveable, e) {\r\n return this.dragAfter(moveable, e);\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n return this.dragEnd(moveable, e);\r\n },\r\n dragGroupControlStart: function (moveable, e) {\r\n return this.dragGroupStart(moveable, e);\r\n },\r\n dragGroupControl: function (moveable, e) {\r\n return this.dragGroup(moveable, e);\r\n },\r\n dragGroupControlEnd: function (moveable, e) {\r\n return this.dragGroupEnd(moveable, e);\r\n },\r\n fillDragParams: function (moveable, e) {\r\n var transformObject = {};\r\n parse(getNextTransforms(e) || []).forEach(function (matrixInfo) {\r\n transformObject[matrixInfo.name] = matrixInfo.functionValue;\r\n });\r\n return fillParams(moveable, e, __assign({ isPinch: !!e.isPinch, transformObject: transformObject, transform: getNextTransformText(e) }, fillCSSObject(getNextStyle(e))));\r\n },\r\n fillDragEndParams: function (moveable, e) {\r\n var transformObject = {};\r\n parse(getNextTransforms(e) || []).forEach(function (matrixInfo) {\r\n transformObject[matrixInfo.name] = matrixInfo.functionValue;\r\n });\r\n return fillParams(moveable, e, __assign({ isPinch: !!e.isPinch, isDrag: e.isDrag, transformObject: transformObject, transform: getNextTransformText(e) }, fillCSSObject(getNextStyle(e))));\r\n },\r\n};\n\nfunction triggerAble(moveable, moveableAbles, eventOperations, eventAffix, eventType, e, requestInstant) {\r\n // pre setting\r\n e.clientDistX = e.distX;\r\n e.clientDistY = e.distY;\r\n var isStart = eventType === \"Start\";\r\n var isEnd = eventType === \"End\";\r\n var isAfter = eventType === \"After\";\r\n var target = moveable.state.target;\r\n var isRequest = e.isRequest;\r\n var isControl = eventAffix.indexOf(\"Control\") > -1;\r\n if (!target\r\n || (isStart && isControl && !isRequest && moveable.areaElement === e.inputEvent.target)) {\r\n return false;\r\n }\r\n var ables = __spreadArray([], __read(moveableAbles), false);\r\n if (isRequest) {\r\n var requestAble_1 = e.requestAble;\r\n if (!ables.some(function (able) { return able.name === requestAble_1; })) {\r\n ables.push.apply(ables, __spreadArray([], __read(moveable.props.ables.filter(function (able) { return able.name === requestAble_1; })), false));\r\n }\r\n }\r\n if (!ables.length || ables.every(function (able) { return able.dragRelation; })) {\r\n return false;\r\n }\r\n // \"drag\" \"Control\" \"After\"\r\n var inputEvent = e.inputEvent;\r\n var inputTarget;\r\n if (isEnd && inputEvent) {\r\n inputTarget = document.elementFromPoint(e.clientX, e.clientY) || inputEvent.target;\r\n }\r\n var isDragStop = false;\r\n var stop = function () {\r\n var _a;\r\n isDragStop = true;\r\n (_a = e.stop) === null || _a === void 0 ? void 0 : _a.call(e);\r\n };\r\n var isFirstStart = isStart && (!moveable.targetGesto || !moveable.controlGesto\r\n || (!moveable.targetGesto.isFlag() || !moveable.controlGesto.isFlag()));\r\n if (isFirstStart) {\r\n moveable.updateRect(eventType, true, false);\r\n }\r\n // trigger ables\r\n var datas = e.datas;\r\n var gestoType = isControl ? \"controlGesto\" : \"targetGesto\";\r\n var prevGesto = moveable[gestoType];\r\n var trigger = function (able, eventName, conditionName) {\r\n if (!(eventName in able) || prevGesto !== moveable[gestoType]) {\r\n return false;\r\n }\r\n var ableName = able.name;\r\n var nextDatas = datas[ableName] || (datas[ableName] = {});\r\n if (isStart) {\r\n nextDatas.isEventStart = !conditionName\r\n || !able[conditionName] || able[conditionName](moveable, e);\r\n }\r\n if (!nextDatas.isEventStart) {\r\n return false;\r\n }\r\n var result = able[eventName](moveable, __assign(__assign({}, e), { stop: stop, datas: nextDatas, originalDatas: datas, inputTarget: inputTarget }));\r\n moveable._emitter.off();\r\n if (isStart && result === false) {\r\n nextDatas.isEventStart = false;\r\n }\r\n return result;\r\n };\r\n // unset ables for first drag start\r\n if (isFirstStart) {\r\n ables.forEach(function (able) {\r\n able.unset && able.unset(moveable);\r\n });\r\n }\r\n // BeforeRenderable\r\n trigger(BeforeRenderable, \"drag\".concat(eventAffix).concat(eventType));\r\n var forceEndedCount = 0;\r\n var updatedCount = 0;\r\n eventOperations.forEach(function (eventOperation) {\r\n if (isDragStop) {\r\n return false;\r\n }\r\n var eventName = \"\".concat(eventOperation).concat(eventAffix).concat(eventType);\r\n var conditionName = \"\".concat(eventOperation).concat(eventAffix, \"Condition\");\r\n if (eventType === \"\" && !isRequest) {\r\n // Convert distX, distY\r\n convertDragDist(moveable.state, e);\r\n }\r\n // const isGroup = eventAffix.indexOf(\"Group\") > -1;\r\n var eventAbles = ables.filter(function (able) { return able[eventName]; });\r\n eventAbles = eventAbles.filter(function (able, i) {\r\n return able.name && eventAbles.indexOf(able) === i;\r\n });\r\n var results = eventAbles.filter(function (able) { return trigger(able, eventName, conditionName); });\r\n var isUpdate = results.length;\r\n // end ables\r\n if (isDragStop) {\r\n ++forceEndedCount;\r\n }\r\n if (isUpdate) {\r\n ++updatedCount;\r\n }\r\n if (!isDragStop && isStart && eventAbles.length && !isUpdate) {\r\n forceEndedCount += eventAbles.filter(function (able) {\r\n var ableName = able.name;\r\n var nextDatas = datas[ableName];\r\n if (nextDatas.isEventStart) {\r\n if (able.dragRelation === \"strong\") {\r\n return false;\r\n }\r\n // stop drag\r\n return true;\r\n }\r\n // pre stop drag\r\n return false;\r\n }).length ? 1 : 0;\r\n }\r\n });\r\n if (!isAfter || updatedCount) {\r\n trigger(Renderable, \"drag\".concat(eventAffix).concat(eventType));\r\n }\r\n // stop gesto condition\r\n var isForceEnd = prevGesto !== moveable[gestoType] || forceEndedCount === eventOperations.length;\r\n if (isEnd || isDragStop || isForceEnd) {\r\n moveable.state.gestos = {};\r\n if (moveable.moveables) {\r\n moveable.moveables.forEach(function (childMoveable) {\r\n childMoveable.state.gestos = {};\r\n });\r\n }\r\n ables.forEach(function (able) {\r\n able.unset && able.unset(moveable);\r\n });\r\n }\r\n if (isStart && !isForceEnd && !isRequest && updatedCount && moveable.props.preventDefault) {\r\n e === null || e === void 0 ? void 0 : e.preventDefault();\r\n }\r\n if (moveable.isUnmounted || isForceEnd) {\r\n return false;\r\n }\r\n if ((!isStart && updatedCount && !requestInstant) || isEnd) {\r\n var flushSync = moveable.props.flushSync || defaultSync;\r\n flushSync(function () {\r\n moveable.updateRect(isEnd ? eventType : \"\", true, false);\r\n moveable.forceUpdate();\r\n });\r\n }\r\n if (!isStart && !isEnd && !isAfter && updatedCount && !requestInstant) {\r\n triggerAble(moveable, moveableAbles, eventOperations, eventAffix, eventType + \"After\", e);\r\n }\r\n return true;\r\n}\r\nfunction checkMoveableTarget(moveable, isControl) {\r\n return function (e, target) {\r\n var _a;\r\n if (target === void 0) { target = e.inputEvent.target; }\r\n var eventTarget = target;\r\n var areaElement = moveable.areaElement;\r\n var dragTargetElement = moveable._dragTarget;\r\n if (!dragTargetElement || (!isControl && ((_a = moveable.controlGesto) === null || _a === void 0 ? void 0 : _a.isFlag()))) {\r\n return false;\r\n }\r\n return eventTarget === dragTargetElement\r\n || dragTargetElement.contains(eventTarget)\r\n || eventTarget === areaElement\r\n || (!moveable.isMoveableElement(eventTarget) && !moveable.controlBox.contains(eventTarget))\r\n || hasClass(eventTarget, \"moveable-area\")\r\n || hasClass(eventTarget, \"moveable-padding\")\r\n || hasClass(eventTarget, \"moveable-edgeDraggable\");\r\n };\r\n}\r\nfunction getTargetAbleGesto(moveable, moveableTarget, eventAffix) {\r\n var controlBox = moveable.controlBox;\r\n var targets = [];\r\n var props = moveable.props;\r\n var dragArea = props.dragArea;\r\n var target = moveable.state.target;\r\n var dragTarget = props.dragTarget;\r\n targets.push(controlBox);\r\n if (!dragArea || dragTarget) {\r\n targets.push(moveableTarget);\r\n }\r\n if (!dragArea && dragTarget && target && moveableTarget !== target && props.dragTargetSelf) {\r\n targets.push(target);\r\n }\r\n var checkTarget = checkMoveableTarget(moveable);\r\n return getAbleGesto(moveable, targets, \"targetAbles\", eventAffix, {\r\n dragStart: checkTarget,\r\n pinchStart: checkTarget,\r\n });\r\n}\r\nfunction getControlAbleGesto(moveable, eventAffix) {\r\n var controlBox = moveable.controlBox;\r\n var targets = [];\r\n targets.push(controlBox);\r\n var checkTarget = checkMoveableTarget(moveable, true);\r\n var checkControlTarget = function (e, target) {\r\n if (target === void 0) { target = e.inputEvent.target; }\r\n if (target === controlBox) {\r\n return true;\r\n }\r\n var result = checkTarget(e, target);\r\n return !result;\r\n };\r\n return getAbleGesto(moveable, targets, \"controlAbles\", eventAffix, {\r\n dragStart: checkControlTarget,\r\n pinchStart: checkControlTarget,\r\n });\r\n}\r\nfunction getAbleGesto(moveable, target, ableType, eventAffix, conditionFunctions) {\r\n if (conditionFunctions === void 0) { conditionFunctions = {}; }\r\n var isTargetAbles = ableType === \"targetAbles\";\r\n var _a = moveable.props, pinchOutside = _a.pinchOutside, pinchThreshold = _a.pinchThreshold, preventClickEventOnDrag = _a.preventClickEventOnDrag, preventClickDefault = _a.preventClickDefault, checkInput = _a.checkInput, dragFocusedInput = _a.dragFocusedInput, _b = _a.preventDefault, preventDefault = _b === void 0 ? true : _b, _c = _a.preventRightClick, preventRightClick = _c === void 0 ? true : _c, _d = _a.preventWheelClick, preventWheelClick = _d === void 0 ? true : _d, dragContaienrOption = _a.dragContainer;\r\n var dragContainer = getRefTarget(dragContaienrOption, true);\r\n var options = {\r\n preventDefault: preventDefault,\r\n preventRightClick: preventRightClick,\r\n preventWheelClick: preventWheelClick,\r\n container: dragContainer || getWindow(moveable.getControlBoxElement()),\r\n pinchThreshold: pinchThreshold,\r\n pinchOutside: pinchOutside,\r\n preventClickEventOnDrag: isTargetAbles ? preventClickEventOnDrag : false,\r\n preventClickEventOnDragStart: isTargetAbles ? preventClickDefault : false,\r\n preventClickEventByCondition: isTargetAbles ? null : function (e) {\r\n return moveable.controlBox.contains(e.target);\r\n },\r\n checkInput: isTargetAbles ? checkInput : false,\r\n dragFocusedInput: dragFocusedInput,\r\n };\r\n var gesto = new Gesto(target, options);\r\n var isControl = eventAffix === \"Control\";\r\n [\"drag\", \"pinch\"].forEach(function (eventOperation) {\r\n [\"Start\", \"\", \"End\"].forEach(function (eventType) {\r\n gesto.on(\"\".concat(eventOperation).concat(eventType), function (e) {\r\n var _a;\r\n var eventName = e.eventType;\r\n var isPinchScheduled = eventOperation === \"drag\" && e.isPinch;\r\n if (conditionFunctions[eventName] && !conditionFunctions[eventName](e)) {\r\n e.stop();\r\n return;\r\n }\r\n if (isPinchScheduled) {\r\n return;\r\n }\r\n var eventOperations = eventOperation === \"drag\" ? [eventOperation] : [\"drag\", eventOperation];\r\n var moveableAbles = __spreadArray([], __read(moveable[ableType]), false);\r\n var result = triggerAble(moveable, moveableAbles, eventOperations, eventAffix, eventType, e);\r\n if (!result) {\r\n e.stop();\r\n }\r\n else if (moveable.props.stopPropagation || (eventType === \"Start\" && isControl)) {\r\n (_a = e === null || e === void 0 ? void 0 : e.inputEvent) === null || _a === void 0 ? void 0 : _a.stopPropagation();\r\n }\r\n });\r\n });\r\n });\r\n return gesto;\r\n}\n\nvar EventManager = /*#__PURE__*/ (function () {\r\n function EventManager(target, moveable, eventName) {\r\n var _this = this;\r\n this.target = target;\r\n this.moveable = moveable;\r\n this.eventName = eventName;\r\n this.ables = [];\r\n this._onEvent = function (e) {\r\n var eventName = _this.eventName;\r\n var moveable = _this.moveable;\r\n if (moveable.state.disableNativeEvent) {\r\n return;\r\n }\r\n _this.ables.forEach(function (able) {\r\n able[eventName](moveable, {\r\n inputEvent: e,\r\n });\r\n });\r\n };\r\n target.addEventListener(eventName.toLowerCase(), this._onEvent);\r\n }\r\n EventManager.prototype.setAbles = function (ables) {\r\n this.ables = ables;\r\n };\r\n EventManager.prototype.destroy = function () {\r\n this.target.removeEventListener(this.eventName.toLowerCase(), this._onEvent);\r\n this.target = null;\r\n this.moveable = null;\r\n };\r\n return EventManager;\r\n}());\n\nfunction calculateMatrixStack(target, container, rootContainer, isAbsolute3d) {\r\n var _a;\r\n if (rootContainer === void 0) { rootContainer = container; }\r\n var _b = getMatrixStackInfo(target, container), matrixes = _b.matrixes, is3d = _b.is3d, prevTargetMatrix = _b.targetMatrix, transformOrigin = _b.transformOrigin, targetOrigin = _b.targetOrigin, offsetContainer = _b.offsetContainer, hasFixed = _b.hasFixed, containerZoom = _b.zoom; // prevMatrix\r\n var _c = getCachedMatrixContainerInfo(offsetContainer, rootContainer), rootMatrixes = _c.matrixes, isRoot3d = _c.is3d, offsetRootContainer = _c.offsetContainer, rootZoom = _c.zoom; // prevRootMatrix\r\n // if (rootContainer === document.body) {\r\n // console.log(offsetContainer, rootContainer, rootMatrixes);\r\n // }\r\n var isNext3d = isAbsolute3d || isRoot3d || is3d;\r\n var n = isNext3d ? 4 : 3;\r\n var isSVGGraphicElement = target.tagName.toLowerCase() !== \"svg\" && \"ownerSVGElement\" in target;\r\n var targetMatrix = prevTargetMatrix;\r\n // let allMatrix = prevMatrix ? convertDimension(prevMatrix, prevN!, n) : createIdentityMatrix(n);\r\n // let rootMatrix = prevRootMatrix ? convertDimension(prevRootMatrix, prevN!, n) : createIdentityMatrix(n);\r\n // let beforeMatrix = prevMatrix ? convertDimension(prevMatrix, prevN!, n) : createIdentityMatrix(n);\r\n var allMatrix = createIdentityMatrix(n);\r\n var rootMatrix = createIdentityMatrix(n);\r\n var beforeMatrix = createIdentityMatrix(n);\r\n var offsetMatrix = createIdentityMatrix(n);\r\n var length = matrixes.length;\r\n var nextRootMatrixes = rootMatrixes.map(function (info) {\r\n return __assign(__assign({}, info), { matrix: info.matrix ? __spreadArray([], __read(info.matrix), false) : undefined });\r\n }).reverse();\r\n matrixes.reverse();\r\n if (!is3d && isNext3d) {\r\n targetMatrix = convertDimension(targetMatrix, 3, 4);\r\n convert3DMatrixes(matrixes);\r\n }\r\n if (!isRoot3d && isNext3d) {\r\n convert3DMatrixes(nextRootMatrixes);\r\n }\r\n // rootMatrix = (...) -> container -> offset -> absolute -> offset -> absolute(targetMatrix)\r\n // rootMatrixBeforeOffset = lastOffsetMatrix -> (...) -> container\r\n // beforeMatrix = (... -> container -> offset -> absolute) -> offset -> absolute(targetMatrix)\r\n // offsetMatrix = (... -> container -> offset -> absolute -> offset) -> absolute(targetMatrix)\r\n nextRootMatrixes.forEach(function (info) {\r\n rootMatrix = multiply(rootMatrix, info.matrix, n);\r\n });\r\n var originalRootContainer = rootContainer || getDocumentBody(target);\r\n var endContainer = ((_a = nextRootMatrixes[0]) === null || _a === void 0 ? void 0 : _a.target)\r\n || getOffsetInfo(originalRootContainer, originalRootContainer, true).offsetParent;\r\n var rootMatrixBeforeOffset = nextRootMatrixes.slice(1).reduce(function (matrix, info) {\r\n return multiply(matrix, info.matrix, n);\r\n }, createIdentityMatrix(n));\r\n matrixes.forEach(function (info, i) {\r\n if (length - 2 === i) {\r\n // length - 3\r\n beforeMatrix = allMatrix.slice();\r\n }\r\n if (length - 1 === i) {\r\n // length - 2\r\n offsetMatrix = allMatrix.slice();\r\n }\r\n // calculate for SVGElement\r\n if (!info.matrix) {\r\n var nextInfo = matrixes[i + 1];\r\n var offset = getSVGOffset(info, nextInfo, endContainer, n, multiply(rootMatrixBeforeOffset, allMatrix, n));\r\n info.matrix = createOriginMatrix(offset, n);\r\n }\r\n allMatrix = multiply(allMatrix, info.matrix, n);\r\n });\r\n var isMatrix3d = !isSVGGraphicElement && is3d;\r\n if (!targetMatrix) {\r\n targetMatrix = createIdentityMatrix(isMatrix3d ? 4 : 3);\r\n }\r\n var targetTransform = makeMatrixCSS(isSVGGraphicElement && targetMatrix.length === 16\r\n ? convertDimension(targetMatrix, 4, 3) : targetMatrix, isMatrix3d);\r\n var originalRootMatrix = rootMatrix;\r\n rootMatrix = ignoreDimension(rootMatrix, n, n);\r\n return {\r\n hasZoom: containerZoom !== 1 || rootZoom !== 1,\r\n hasFixed: hasFixed,\r\n matrixes: matrixes,\r\n rootMatrix: rootMatrix,\r\n originalRootMatrix: originalRootMatrix,\r\n beforeMatrix: beforeMatrix,\r\n offsetMatrix: offsetMatrix,\r\n allMatrix: allMatrix,\r\n targetMatrix: targetMatrix,\r\n targetTransform: targetTransform,\r\n inlineTransform: target.style.transform,\r\n transformOrigin: transformOrigin,\r\n targetOrigin: targetOrigin,\r\n is3d: isNext3d,\r\n offsetContainer: offsetContainer,\r\n offsetRootContainer: offsetRootContainer,\r\n };\r\n}\n\nfunction calculateElementInfo(target, container, rootContainer, isAbsolute3d) {\r\n if (rootContainer === void 0) { rootContainer = container; }\r\n var width = 0;\r\n var height = 0;\r\n var rotation = 0;\r\n var allResult = {};\r\n var sizes = getSize(target);\r\n if (target) {\r\n width = sizes.offsetWidth;\r\n height = sizes.offsetHeight;\r\n }\r\n if (target) {\r\n var result = calculateMatrixStack(target, container, rootContainer, isAbsolute3d);\r\n var position = calculateElementPosition(result.allMatrix, result.transformOrigin, width, height);\r\n allResult = __assign(__assign({}, result), position);\r\n var rotationPosition = calculateElementPosition(result.allMatrix, [50, 50], 100, 100);\r\n rotation = getRotationRad([rotationPosition.pos1, rotationPosition.pos2], rotationPosition.direction);\r\n }\r\n var n = isAbsolute3d ? 4 : 3;\r\n return __assign(__assign(__assign({ hasZoom: false, width: width, height: height, rotation: rotation }, sizes), { originalRootMatrix: createIdentityMatrix(n), rootMatrix: createIdentityMatrix(n), beforeMatrix: createIdentityMatrix(n), offsetMatrix: createIdentityMatrix(n), allMatrix: createIdentityMatrix(n), targetMatrix: createIdentityMatrix(n), targetTransform: \"\", inlineTransform: \"\", transformOrigin: [0, 0], targetOrigin: [0, 0], is3d: !!isAbsolute3d, left: 0, top: 0, right: 0, bottom: 0, origin: [0, 0], pos1: [0, 0], pos2: [0, 0], pos3: [0, 0], pos4: [0, 0], direction: 1, hasFixed: false, offsetContainer: null, offsetRootContainer: null, matrixes: [] }), allResult);\r\n}\r\nfunction getElementInfo(target, container, rootContainer) {\r\n if (rootContainer === void 0) { rootContainer = container; }\r\n return calculateElementInfo(target, container, rootContainer, true);\r\n}\n\nfunction getMoveableTargetInfo(moveableElement, target, container, parentContainer, rootContainer, requestStyles) {\r\n if (requestStyles === void 0) { requestStyles = []; }\r\n var beforeDirection = 1;\r\n var beforeOrigin = [0, 0];\r\n var targetClientRect = resetClientRect();\r\n var moveableClientRect = resetClientRect();\r\n var containerClientRect = resetClientRect();\r\n var rootContainerClientRect = resetClientRect();\r\n var offsetDelta = [0, 0];\r\n var style = {};\r\n var result = calculateElementInfo(target, container, rootContainer, true);\r\n if (target) {\r\n var getStyle_1 = getCachedStyle(target);\r\n requestStyles.forEach(function (name) {\r\n style[name] = getStyle_1(name);\r\n });\r\n var n = result.is3d ? 4 : 3;\r\n var beforePosition = calculateElementPosition(result.offsetMatrix, plus(result.transformOrigin, getOrigin(result.targetMatrix, n)), result.width, result.height);\r\n beforeDirection = beforePosition.direction;\r\n beforeOrigin = plus(beforePosition.origin, [beforePosition.left - result.left, beforePosition.top - result.top]);\r\n rootContainerClientRect = getClientRect(result.offsetRootContainer);\r\n var offsetContainer = getOffsetInfo(parentContainer, parentContainer, true).offsetParent\r\n || result.offsetRootContainer;\r\n if (result.hasZoom) {\r\n var absoluteTargetPosition = calculateElementPosition(multiply(result.originalRootMatrix, result.allMatrix), result.transformOrigin, result.width, result.height);\r\n var absoluteContainerPosition = calculateElementPosition(result.originalRootMatrix, getTransformOriginArray(getCachedStyle(offsetContainer)(\"transformOrigin\")).map(function (pos) { return parseFloat(pos); }), offsetContainer.offsetWidth, offsetContainer.offsetHeight);\r\n targetClientRect = getClientRectByPosition(absoluteTargetPosition, rootContainerClientRect);\r\n containerClientRect = getClientRectByPosition(absoluteContainerPosition, rootContainerClientRect, offsetContainer, true);\r\n if (moveableElement) {\r\n var left = absoluteTargetPosition.left;\r\n var top_1 = absoluteTargetPosition.top;\r\n moveableClientRect = getClientRectByPosition({\r\n left: left,\r\n top: top_1,\r\n bottom: top_1,\r\n right: top_1,\r\n }, rootContainerClientRect);\r\n }\r\n }\r\n else {\r\n targetClientRect = getClientRect(target);\r\n containerClientRect = getCachedClientRect(offsetContainer);\r\n if (moveableElement) {\r\n moveableClientRect = getClientRect(moveableElement);\r\n }\r\n var containerClientRectLeft = containerClientRect.left, containerClientRectTop = containerClientRect.top, containterClientLeft = containerClientRect.clientLeft, containerClientTop = containerClientRect.clientTop;\r\n var clientDelta = [\r\n targetClientRect.left - containerClientRectLeft,\r\n targetClientRect.top - containerClientRectTop,\r\n ];\r\n offsetDelta = minus(calculateInversePosition(result.rootMatrix, clientDelta, 4), [containterClientLeft + result.left, containerClientTop + result.top]);\r\n }\r\n }\r\n return __assign({ targetClientRect: targetClientRect, containerClientRect: containerClientRect, moveableClientRect: moveableClientRect, rootContainerClientRect: rootContainerClientRect, beforeDirection: beforeDirection, beforeOrigin: beforeOrigin, originalBeforeOrigin: beforeOrigin, target: target, style: style, offsetDelta: offsetDelta }, result);\r\n}\n\nfunction getPersistState(rect) {\r\n var pos1 = rect.pos1, pos2 = rect.pos2, pos3 = rect.pos3, pos4 = rect.pos4;\r\n if (!pos1 || !pos2 || !pos3 || !pos4) {\r\n return null;\r\n }\r\n var minPos = getMinMaxs([pos1, pos2, pos3, pos4]);\r\n var posDelta = [minPos.minX, minPos.minY];\r\n var origin = minus(rect.origin, posDelta);\r\n pos1 = minus(pos1, posDelta);\r\n pos2 = minus(pos2, posDelta);\r\n pos3 = minus(pos3, posDelta);\r\n pos4 = minus(pos4, posDelta);\r\n return __assign(__assign({}, rect), { left: rect.left, top: rect.top, posDelta: posDelta, pos1: pos1, pos2: pos2, pos3: pos3, pos4: pos4, origin: origin, beforeOrigin: origin, \r\n // originalBeforeOrigin: origin,\r\n isPersisted: true });\r\n}\n\nvar MoveableManager = /*#__PURE__*/ (function (_super) {\r\n __extends(MoveableManager, _super);\r\n function MoveableManager() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.state = __assign({ container: null, gestos: {}, renderLines: [\r\n [[0, 0], [0, 0]],\r\n [[0, 0], [0, 0]],\r\n [[0, 0], [0, 0]],\r\n [[0, 0], [0, 0]],\r\n ], renderPoses: [[0, 0], [0, 0], [0, 0], [0, 0]], disableNativeEvent: false, posDelta: [0, 0] }, getMoveableTargetInfo(null));\r\n _this.renderState = {};\r\n _this.enabledAbles = [];\r\n _this.targetAbles = [];\r\n _this.controlAbles = [];\r\n _this.rotation = 0;\r\n _this.scale = [1, 1];\r\n _this.isMoveableMounted = false;\r\n _this.isUnmounted = false;\r\n _this.events = {\r\n \"mouseEnter\": null,\r\n \"mouseLeave\": null,\r\n };\r\n _this._emitter = new EventEmitter();\r\n _this._prevOriginalDragTarget = null;\r\n _this._originalDragTarget = null;\r\n _this._prevDragTarget = null;\r\n _this._dragTarget = null;\r\n _this._prevPropTarget = null;\r\n _this._propTarget = null;\r\n _this._prevDragArea = false;\r\n _this._isPropTargetChanged = false;\r\n _this._hasFirstTarget = false;\r\n _this._reiszeObserver = null;\r\n _this._observerId = 0;\r\n _this._mutationObserver = null;\r\n _this._rootContainer = null;\r\n _this._viewContainer = null;\r\n _this._viewClassNames = [];\r\n _this._store = {};\r\n _this.checkUpdateRect = function () {\r\n if (_this.isDragging()) {\r\n return;\r\n }\r\n var parentMoveable = _this.props.parentMoveable;\r\n if (parentMoveable) {\r\n parentMoveable.checkUpdateRect();\r\n return;\r\n }\r\n cancelAnimationFrame(_this._observerId);\r\n _this._observerId = requestAnimationFrame(function () {\r\n if (_this.isDragging()) {\r\n return;\r\n }\r\n _this.updateRect();\r\n });\r\n };\r\n _this._onPreventClick = function (e) {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n // removeEvent(window, \"click\", this._onPreventClick, true);\r\n };\r\n return _this;\r\n }\r\n MoveableManager.prototype.render = function () {\r\n var props = this.props;\r\n var state = this.getState();\r\n var parentPosition = props.parentPosition, className = props.className, propsTarget = props.target, zoom = props.zoom, cspNonce = props.cspNonce, translateZ = props.translateZ, ControlBoxElement = props.cssStyled, groupable = props.groupable, linePadding = props.linePadding, controlPadding = props.controlPadding;\r\n this._checkUpdateRootContainer();\r\n this.checkUpdate();\r\n this.updateRenderPoses();\r\n var _a = __read(parentPosition || [0, 0], 2), parentLeft = _a[0], parentTop = _a[1];\r\n var left = state.left, top = state.top, stateTarget = state.target, direction = state.direction, hasFixed = state.hasFixed, offsetDelta = state.offsetDelta;\r\n var groupTargets = props.targets;\r\n var isDragging = this.isDragging();\r\n var ableAttributes = {};\r\n this.getEnabledAbles().forEach(function (able) {\r\n ableAttributes[\"data-able-\".concat(able.name.toLowerCase())] = true;\r\n });\r\n var ableClassName = this._getAbleClassName();\r\n var isDisplay = (groupTargets && groupTargets.length && (stateTarget || groupable))\r\n || propsTarget\r\n || (!this._hasFirstTarget && this.state.isPersisted);\r\n var isVisible = this.controlBox || this.props.firstRenderState || this.props.persistData;\r\n var translate = [left - parentLeft, top - parentTop];\r\n if (!groupable && props.useAccuratePosition) {\r\n translate[0] += offsetDelta[0];\r\n translate[1] += offsetDelta[1];\r\n }\r\n var style = {\r\n \"position\": hasFixed ? \"fixed\" : \"absolute\",\r\n \"display\": isDisplay ? \"block\" : \"none\",\r\n \"visibility\": isVisible ? \"visible\" : \"hidden\",\r\n \"transform\": \"translate3d(\".concat(translate[0], \"px, \").concat(translate[1], \"px, \").concat(translateZ, \")\"),\r\n \"--zoom\": zoom,\r\n \"--zoompx\": \"\".concat(zoom, \"px\"),\r\n };\r\n if (linePadding) {\r\n style[\"--moveable-line-padding\"] = linePadding;\r\n }\r\n if (controlPadding) {\r\n style[\"--moveable-control-padding\"] = controlPadding;\r\n }\r\n return (React.createElement(ControlBoxElement, __assign({ cspNonce: cspNonce, ref: ref(this, \"controlBox\"), className: \"\".concat(prefix(\"control-box\", direction === -1 ? \"reverse\" : \"\", isDragging ? \"dragging\" : \"\"), \" \").concat(ableClassName, \" \").concat(className) }, ableAttributes, { onClick: this._onPreventClick, style: style }),\r\n this.renderAbles(),\r\n this._renderLines()));\r\n };\r\n MoveableManager.prototype.componentDidMount = function () {\r\n this.isMoveableMounted = true;\r\n this.isUnmounted = false;\r\n var props = this.props;\r\n var parentMoveable = props.parentMoveable, container = props.container;\r\n this._checkUpdateRootContainer();\r\n this._checkUpdateViewContainer();\r\n this._updateTargets();\r\n this._updateNativeEvents();\r\n this._updateEvents();\r\n this.updateCheckInput();\r\n this._updateObserver(this.props);\r\n if (!container && !parentMoveable && !this.state.isPersisted) {\r\n this.updateRect(\"\", false, false);\r\n this.forceUpdate();\r\n }\r\n };\r\n MoveableManager.prototype.componentDidUpdate = function (prevProps) {\r\n this._checkUpdateRootContainer();\r\n this._checkUpdateViewContainer();\r\n this._updateNativeEvents();\r\n this._updateTargets();\r\n this._updateEvents();\r\n this.updateCheckInput();\r\n this._updateObserver(prevProps);\r\n };\r\n MoveableManager.prototype.componentWillUnmount = function () {\r\n var _a, _b;\r\n this.isMoveableMounted = false;\r\n this.isUnmounted = true;\r\n this._emitter.off();\r\n (_a = this._reiszeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\r\n (_b = this._mutationObserver) === null || _b === void 0 ? void 0 : _b.disconnect();\r\n var viewContainer = this._viewContainer;\r\n if (viewContainer) {\r\n this._changeAbleViewClassNames([]);\r\n }\r\n unsetGesto(this, false);\r\n unsetGesto(this, true);\r\n var events = this.events;\r\n for (var name_1 in events) {\r\n var manager = events[name_1];\r\n manager && manager.destroy();\r\n }\r\n };\r\n MoveableManager.prototype.getTargets = function () {\r\n var target = this.props.target;\r\n return target ? [target] : [];\r\n };\r\n /**\r\n * Get the able used in MoveableManager.\r\n * @method Moveable#getAble\r\n * @param - able name\r\n */\r\n MoveableManager.prototype.getAble = function (ableName) {\r\n var ables = this.props.ables || [];\r\n return find(ables, function (able) { return able.name === ableName; });\r\n };\r\n MoveableManager.prototype.getContainer = function () {\r\n var _a = this.props, parentMoveable = _a.parentMoveable, wrapperMoveable = _a.wrapperMoveable, container = _a.container;\r\n return container\r\n || (wrapperMoveable && wrapperMoveable.getContainer())\r\n || (parentMoveable && parentMoveable.getContainer())\r\n || this.controlBox.parentElement;\r\n };\r\n /**\r\n * Returns the element of the control box.\r\n * @method Moveable#getControlBoxElement\r\n */\r\n MoveableManager.prototype.getControlBoxElement = function () {\r\n return this.controlBox;\r\n };\r\n /**\r\n * Target element to be dragged in moveable\r\n * @method Moveable#getDragElement\r\n */\r\n MoveableManager.prototype.getDragElement = function () {\r\n return this._dragTarget;\r\n };\r\n /**\r\n * Check if the target is an element included in the moveable.\r\n * @method Moveable#isMoveableElement\r\n * @param - the target\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * window.addEventListener(\"click\", e => {\r\n * if (!moveable.isMoveableElement(e.target)) {\r\n * moveable.target = e.target;\r\n * }\r\n * });\r\n */\r\n MoveableManager.prototype.isMoveableElement = function (target) {\r\n var _a;\r\n return target && (((_a = target.getAttribute) === null || _a === void 0 ? void 0 : _a.call(target, \"class\")) || \"\").indexOf(PREFIX) > -1;\r\n };\r\n /**\r\n * You can drag start the Moveable through the external `MouseEvent`or `TouchEvent`. (Angular: ngDragStart)\r\n * @method Moveable#dragStart\r\n * @param - external `MouseEvent`or `TouchEvent`\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * document.body.addEventListener(\"mousedown\", e => {\r\n * if (!moveable.isMoveableElement(e.target)) {\r\n * moveable.dragStart(e);\r\n * }\r\n * });\r\n */\r\n MoveableManager.prototype.dragStart = function (e, target) {\r\n if (target === void 0) { target = e.target; }\r\n var targetGesto = this.targetGesto;\r\n var controlGesto = this.controlGesto;\r\n if (targetGesto && checkMoveableTarget(this)({ inputEvent: e }, target)) {\r\n if (!targetGesto.isFlag()) {\r\n targetGesto.triggerDragStart(e);\r\n }\r\n }\r\n else if (controlGesto && this.isMoveableElement(target)) {\r\n if (!controlGesto.isFlag()) {\r\n controlGesto.triggerDragStart(e);\r\n }\r\n }\r\n return this;\r\n };\r\n /**\r\n * Hit test an element or rect on a moveable target.\r\n * (100% = 100)\r\n * @method Moveable#hitTest\r\n * @param - element or rect to test\r\n * @return - Get hit test rate (rate > 0 is hitted)\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * document.body.addEventListener(\"mousedown\", e => {\r\n * if (moveable.hitTest(e.target) > 0) {\r\n * console.log(\"hiited\");\r\n * }\r\n * });\r\n */\r\n MoveableManager.prototype.hitTest = function (el) {\r\n var _a = this.state, target = _a.target, pos1 = _a.pos1, pos2 = _a.pos2, pos3 = _a.pos3, pos4 = _a.pos4, targetClientRect = _a.targetClientRect;\r\n if (!target) {\r\n return 0;\r\n }\r\n var rect;\r\n if (isNode(el)) {\r\n var clientRect = el.getBoundingClientRect();\r\n rect = {\r\n left: clientRect.left,\r\n top: clientRect.top,\r\n width: clientRect.width,\r\n height: clientRect.height,\r\n };\r\n }\r\n else {\r\n rect = __assign({ width: 0, height: 0 }, el);\r\n }\r\n var rectLeft = rect.left, rectTop = rect.top, rectWidth = rect.width, rectHeight = rect.height;\r\n var points = fitPoints([pos1, pos2, pos4, pos3], targetClientRect);\r\n var size = getOverlapSize(points, [\r\n [rectLeft, rectTop],\r\n [rectLeft + rectWidth, rectTop],\r\n [rectLeft + rectWidth, rectTop + rectHeight],\r\n [rectLeft, rectTop + rectHeight],\r\n ]);\r\n var totalSize = getAreaSize(points);\r\n if (!size || !totalSize) {\r\n return 0;\r\n }\r\n return Math.min(100, size / totalSize * 100);\r\n };\r\n /**\r\n * Whether the coordinates are inside Moveable\r\n * @method Moveable#isInside\r\n * @param - x coordinate\r\n * @param - y coordinate\r\n * @return - True if the coordinate is in moveable or false\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * document.body.addEventListener(\"mousedown\", e => {\r\n * if (moveable.isInside(e.clientX, e.clientY)) {\r\n * console.log(\"inside\");\r\n * }\r\n * });\r\n */\r\n MoveableManager.prototype.isInside = function (clientX, clientY) {\r\n var _a = this.state, target = _a.target, pos1 = _a.pos1, pos2 = _a.pos2, pos3 = _a.pos3, pos4 = _a.pos4, targetClientRect = _a.targetClientRect;\r\n if (!target) {\r\n return false;\r\n }\r\n return isInside([clientX, clientY], fitPoints([pos1, pos2, pos4, pos3], targetClientRect));\r\n };\r\n /**\r\n * If the width, height, left, and top of all elements change, update the shape of the moveable.\r\n * @method Moveable#updateRect\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * window.addEventListener(\"resize\", e => {\r\n * moveable.updateRect();\r\n * });\r\n */\r\n MoveableManager.prototype.updateRect = function (type, isTarget, isSetState) {\r\n if (isSetState === void 0) { isSetState = true; }\r\n var props = this.props;\r\n var isSingle = !props.parentPosition && !props.wrapperMoveable;\r\n if (isSingle) {\r\n setStoreCache(true);\r\n }\r\n var parentMoveable = props.parentMoveable;\r\n var state = this.state;\r\n var target = (state.target || props.target);\r\n var container = this.getContainer();\r\n var rootContainer = parentMoveable\r\n ? parentMoveable._rootContainer\r\n : this._rootContainer;\r\n var nextState = getMoveableTargetInfo(this.controlBox, target, container, container, rootContainer || container, this._getRequestStyles());\r\n if (!target && this._hasFirstTarget && props.persistData) {\r\n var persistState = getPersistState(props.persistData);\r\n for (var name_2 in persistState) {\r\n nextState[name_2] = persistState[name_2];\r\n }\r\n }\r\n if (isSingle) {\r\n setStoreCache();\r\n }\r\n this.updateState(nextState, parentMoveable ? false : isSetState);\r\n };\r\n /**\r\n * Check if the moveable state is being dragged.\r\n * @method Moveable#isDragging\r\n * @param - If you want to check if able is dragging, specify ableName.\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * // false\r\n * console.log(moveable.isDragging());\r\n *\r\n * moveable.on(\"drag\", () => {\r\n * // true\r\n * console.log(moveable.isDragging());\r\n * });\r\n */\r\n MoveableManager.prototype.isDragging = function (ableName) {\r\n var _a, _b;\r\n var targetGesto = this.targetGesto;\r\n var controlGesto = this.controlGesto;\r\n if (targetGesto === null || targetGesto === void 0 ? void 0 : targetGesto.isFlag()) {\r\n if (!ableName) {\r\n return true;\r\n }\r\n var data = targetGesto.getEventData();\r\n return !!((_a = data[ableName]) === null || _a === void 0 ? void 0 : _a.isEventStart);\r\n }\r\n if (controlGesto === null || controlGesto === void 0 ? void 0 : controlGesto.isFlag()) {\r\n if (!ableName) {\r\n return true;\r\n }\r\n var data = controlGesto.getEventData();\r\n return !!((_b = data[ableName]) === null || _b === void 0 ? void 0 : _b.isEventStart);\r\n }\r\n return false;\r\n };\r\n /**\r\n * If the width, height, left, and top of the only target change, update the shape of the moveable.\r\n * Use `.updateRect()` method\r\n * @method Moveable#updateTarget\r\n * @deprecated\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.updateTarget();\r\n */\r\n MoveableManager.prototype.updateTarget = function (type) {\r\n this.updateRect(type, true);\r\n };\r\n /**\r\n * You can get the vertex information, position and offset size information of the target based on the container.\r\n * @method Moveable#getRect\r\n * @return - The Rect Info\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * const rectInfo = moveable.getRect();\r\n */\r\n MoveableManager.prototype.getRect = function () {\r\n var state = this.state;\r\n var poses = getAbsolutePosesByState(this.state);\r\n var _a = __read(poses, 4), pos1 = _a[0], pos2 = _a[1], pos3 = _a[2], pos4 = _a[3];\r\n var rect = getRect(poses);\r\n var offsetWidth = state.width, offsetHeight = state.height;\r\n var width = rect.width, height = rect.height, left = rect.left, top = rect.top;\r\n var statePos = [state.left, state.top];\r\n var origin = plus(statePos, state.origin);\r\n var beforeOrigin = plus(statePos, state.beforeOrigin);\r\n var transformOrigin = state.transformOrigin;\r\n return {\r\n width: width,\r\n height: height,\r\n left: left,\r\n top: top,\r\n pos1: pos1,\r\n pos2: pos2,\r\n pos3: pos3,\r\n pos4: pos4,\r\n offsetWidth: offsetWidth,\r\n offsetHeight: offsetHeight,\r\n beforeOrigin: beforeOrigin,\r\n origin: origin,\r\n transformOrigin: transformOrigin,\r\n rotation: this.getRotation(),\r\n };\r\n };\r\n /**\r\n * Get a manager that manages the moveable's state and props.\r\n * @method Moveable#getManager\r\n * @return - The Rect Info\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * const manager = moveable.getManager(); // real moveable class instance\r\n */\r\n MoveableManager.prototype.getManager = function () {\r\n return this;\r\n };\r\n /**\r\n * You can stop the dragging currently in progress through a method from outside.\r\n * @method Moveable#stopDrag\r\n * @return - The Rect Info\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.stopDrag();\r\n */\r\n MoveableManager.prototype.stopDrag = function (type) {\r\n if (!type || type === \"target\") {\r\n var gesto = this.targetGesto;\r\n if ((gesto === null || gesto === void 0 ? void 0 : gesto.isIdle()) === false) {\r\n unsetAbles(this, false);\r\n }\r\n gesto === null || gesto === void 0 ? void 0 : gesto.stop();\r\n }\r\n if (!type || type === \"control\") {\r\n var gesto = this.controlGesto;\r\n if ((gesto === null || gesto === void 0 ? void 0 : gesto.isIdle()) === false) {\r\n unsetAbles(this, true);\r\n }\r\n gesto === null || gesto === void 0 ? void 0 : gesto.stop();\r\n }\r\n };\r\n MoveableManager.prototype.getRotation = function () {\r\n var _a = this.state, pos1 = _a.pos1, pos2 = _a.pos2, direction = _a.direction;\r\n return getAbsoluteRotation(pos1, pos2, direction);\r\n };\r\n /**\r\n * Request able through a method rather than an event.\r\n * At the moment of execution, requestStart is executed,\r\n * and then request and requestEnd can be executed through Requester.\r\n * @method Moveable#request\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Draggable.html#request|Draggable Requester}\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Resizable.html#request|Resizable Requester}\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Scalable.html#request|Scalable Requester}\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.Rotatable.html#request|Rotatable Requester}\r\n * @see {@link https://daybrush.com/moveable/release/latest/doc/Moveable.OriginDraggable.html#request|OriginDraggable Requester}\r\n * @param - ableName\r\n * @param - request to be able params.\r\n * @param - If isInstant is true, request and requestEnd are executed immediately.\r\n * @return - Able Requester. If there is no request in able, nothing will work.\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * // Instantly Request (requestStart - request - requestEnd)\r\n * moveable.request(\"draggable\", { deltaX: 10, deltaY: 10 }, true);\r\n *\r\n * // Start move\r\n * const requester = moveable.request(\"draggable\");\r\n * requester.request({ deltaX: 10, deltaY: 10 });\r\n * requester.request({ deltaX: 10, deltaY: 10 });\r\n * requester.request({ deltaX: 10, deltaY: 10 });\r\n * requester.requestEnd();\r\n */\r\n MoveableManager.prototype.request = function (ableName, param, isInstant) {\r\n if (param === void 0) { param = {}; }\r\n var self = this;\r\n var props = self.props;\r\n var manager = props.parentMoveable || props.wrapperMoveable || self;\r\n var allAbles = manager.props.ables;\r\n var groupable = props.groupable;\r\n var requsetAble = find(allAbles, function (able) { return able.name === ableName; });\r\n if (this.isDragging() || !requsetAble || !requsetAble.request) {\r\n return {\r\n request: function () {\r\n return this;\r\n },\r\n requestEnd: function () {\r\n return this;\r\n },\r\n };\r\n }\r\n var ableRequester = requsetAble.request(self);\r\n var requestInstant = isInstant || param.isInstant;\r\n var ableType = ableRequester.isControl ? \"controlAbles\" : \"targetAbles\";\r\n var eventAffix = \"\".concat((groupable ? \"Group\" : \"\")).concat(ableRequester.isControl ? \"Control\" : \"\");\r\n var moveableAbles = __spreadArray([], __read(manager[ableType]), false);\r\n var requester = {\r\n request: function (ableParam) {\r\n triggerAble(self, moveableAbles, [\"drag\"], eventAffix, \"\", __assign(__assign({}, ableRequester.request(ableParam)), { requestAble: ableName, isRequest: true }), requestInstant);\r\n return requester;\r\n },\r\n requestEnd: function () {\r\n triggerAble(self, moveableAbles, [\"drag\"], eventAffix, \"End\", __assign(__assign({}, ableRequester.requestEnd()), { requestAble: ableName, isRequest: true }), requestInstant);\r\n return requester;\r\n },\r\n };\r\n triggerAble(self, moveableAbles, [\"drag\"], eventAffix, \"Start\", __assign(__assign({}, ableRequester.requestStart(param)), { requestAble: ableName, isRequest: true }), requestInstant);\r\n return requestInstant ? requester.request(param).requestEnd() : requester;\r\n };\r\n /**\r\n * moveable is the top level that manages targets\r\n * `Single`: MoveableManager instance\r\n * `Group`: MoveableGroup instance\r\n * `IndividualGroup`: MoveableIndividaulGroup instance\r\n * Returns leaf target MoveableManagers.\r\n */\r\n MoveableManager.prototype.getMoveables = function () {\r\n return [this];\r\n };\r\n /**\r\n * Remove the Moveable object and the events.\r\n * @method Moveable#destroy\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n *\r\n * moveable.destroy();\r\n */\r\n MoveableManager.prototype.destroy = function () {\r\n this.componentWillUnmount();\r\n };\r\n MoveableManager.prototype.updateRenderPoses = function () {\r\n var state = this.getState();\r\n var props = this.props;\r\n var padding = props.padding;\r\n var originalBeforeOrigin = state.originalBeforeOrigin, transformOrigin = state.transformOrigin, allMatrix = state.allMatrix, is3d = state.is3d, pos1 = state.pos1, pos2 = state.pos2, pos3 = state.pos3, pos4 = state.pos4, stateLeft = state.left, stateTop = state.top, isPersisted = state.isPersisted;\r\n var zoom = props.zoom || 1;\r\n if (!padding && zoom <= 1) {\r\n state.renderPoses = [\r\n pos1,\r\n pos2,\r\n pos3,\r\n pos4,\r\n ];\r\n state.renderLines = [\r\n [pos1, pos2],\r\n [pos2, pos4],\r\n [pos4, pos3],\r\n [pos3, pos1],\r\n ];\r\n return;\r\n }\r\n var _a = getPaddingBox(padding || {}), left = _a.left, top = _a.top, bottom = _a.bottom, right = _a.right;\r\n var n = is3d ? 4 : 3;\r\n // const clipPathInfo = getClipPath(\r\n // props.target,\r\n // offsetWidth,\r\n // offsetHeight,\r\n // );\r\n // if (clipPathInfo) {\r\n // left -= Math.max(0, clipPathInfo.left);\r\n // top -= Math.max(0, clipPathInfo.top);\r\n // bottom -= Math.max(0, offsetHeight - clipPathInfo.bottom);\r\n // right -= Math.max(0, offsetWidth - clipPathInfo.right);\r\n // }\r\n var absoluteOrigin = [];\r\n if (isPersisted) {\r\n absoluteOrigin = transformOrigin;\r\n }\r\n else if (this.controlBox && props.groupable) {\r\n absoluteOrigin = originalBeforeOrigin;\r\n }\r\n else {\r\n absoluteOrigin = plus(originalBeforeOrigin, [stateLeft, stateTop]);\r\n }\r\n var nextMatrix = multiplies(n, createOriginMatrix(absoluteOrigin.map(function (v) { return -v; }), n), allMatrix, createOriginMatrix(transformOrigin, n));\r\n var renderPos1 = calculatePadding(nextMatrix, pos1, [-left, -top], n);\r\n var renderPos2 = calculatePadding(nextMatrix, pos2, [right, -top], n);\r\n var renderPos3 = calculatePadding(nextMatrix, pos3, [-left, bottom], n);\r\n var renderPos4 = calculatePadding(nextMatrix, pos4, [right, bottom], n);\r\n state.renderPoses = [\r\n renderPos1,\r\n renderPos2,\r\n renderPos3,\r\n renderPos4,\r\n ];\r\n state.renderLines = [\r\n [renderPos1, renderPos2],\r\n [renderPos2, renderPos4],\r\n [renderPos4, renderPos3],\r\n [renderPos3, renderPos1],\r\n ];\r\n if (zoom) {\r\n var zoomOffset = zoom / 2;\r\n state.renderLines = [\r\n [\r\n calculatePadding(nextMatrix, pos1, [-left - zoomOffset, -top], n),\r\n calculatePadding(nextMatrix, pos2, [right + zoomOffset, -top], n),\r\n ],\r\n [\r\n calculatePadding(nextMatrix, pos2, [right, -top - zoomOffset], n),\r\n calculatePadding(nextMatrix, pos4, [right, bottom + zoomOffset], n),\r\n ],\r\n [\r\n calculatePadding(nextMatrix, pos4, [right + zoomOffset, bottom], n),\r\n calculatePadding(nextMatrix, pos3, [-left - zoomOffset, bottom], n),\r\n ],\r\n [\r\n calculatePadding(nextMatrix, pos3, [-left, bottom + zoomOffset], n),\r\n calculatePadding(nextMatrix, pos1, [-left, -top - zoomOffset], n),\r\n ],\r\n ];\r\n }\r\n };\r\n MoveableManager.prototype.checkUpdate = function () {\r\n this._isPropTargetChanged = false;\r\n var _a = this.props, target = _a.target, container = _a.container, parentMoveable = _a.parentMoveable;\r\n var _b = this.state, stateTarget = _b.target, stateContainer = _b.container;\r\n if (!stateTarget && !target) {\r\n return;\r\n }\r\n this.updateAbles();\r\n var isTargetChanged = !equals(stateTarget, target);\r\n var isChanged = isTargetChanged || !equals(stateContainer, container);\r\n if (!isChanged) {\r\n return;\r\n }\r\n var moveableContainer = container || this.controlBox;\r\n if (moveableContainer) {\r\n this.unsetAbles();\r\n }\r\n this.updateState({ target: target, container: container });\r\n if (!parentMoveable && moveableContainer) {\r\n this.updateRect(\"End\", false, false);\r\n }\r\n this._isPropTargetChanged = isTargetChanged;\r\n };\r\n MoveableManager.prototype.waitToChangeTarget = function () {\r\n return new Promise(function () { });\r\n };\r\n MoveableManager.prototype.triggerEvent = function (name, e) {\r\n var props = this.props;\r\n this._emitter.trigger(name, e);\r\n if (props.parentMoveable && e.isRequest && !e.isRequestChild) {\r\n return props.parentMoveable.triggerEvent(name, e, true);\r\n }\r\n var callback = props[name];\r\n return callback && callback(e);\r\n };\r\n MoveableManager.prototype.useCSS = function (tag, css) {\r\n var customStyleMap = this.props.customStyledMap;\r\n var key = tag + css;\r\n if (!customStyleMap[key]) {\r\n customStyleMap[key] = styled(tag, css);\r\n }\r\n return customStyleMap[key];\r\n };\r\n MoveableManager.prototype.getState = function () {\r\n var _a;\r\n var props = this.props;\r\n if (props.target || ((_a = props.targets) === null || _a === void 0 ? void 0 : _a.length)) {\r\n this._hasFirstTarget = true;\r\n }\r\n var hasControlBox = this.controlBox;\r\n var persistData = props.persistData;\r\n var firstRenderState = props.firstRenderState;\r\n if (firstRenderState && !hasControlBox) {\r\n return firstRenderState;\r\n }\r\n if (!this._hasFirstTarget && persistData) {\r\n var persistState = getPersistState(persistData);\r\n if (persistState) {\r\n this.updateState(persistState, false);\r\n return this.state;\r\n }\r\n }\r\n this.state.isPersisted = false;\r\n return this.state;\r\n };\r\n MoveableManager.prototype.updateSelectors = function () { };\r\n MoveableManager.prototype.unsetAbles = function () {\r\n var _this = this;\r\n this.targetAbles.forEach(function (able) {\r\n if (able.unset) {\r\n able.unset(_this);\r\n }\r\n });\r\n };\r\n MoveableManager.prototype.updateAbles = function (ables, eventAffix) {\r\n if (ables === void 0) { ables = this.props.ables; }\r\n if (eventAffix === void 0) { eventAffix = \"\"; }\r\n var props = this.props;\r\n var triggerAblesSimultaneously = props.triggerAblesSimultaneously;\r\n var enabledAbles = this.getEnabledAbles(ables);\r\n var dragStart = \"drag\".concat(eventAffix, \"Start\");\r\n var pinchStart = \"pinch\".concat(eventAffix, \"Start\");\r\n var dragControlStart = \"drag\".concat(eventAffix, \"ControlStart\");\r\n var targetAbles = filterAbles(enabledAbles, [dragStart, pinchStart], triggerAblesSimultaneously);\r\n var controlAbles = filterAbles(enabledAbles, [dragControlStart], triggerAblesSimultaneously);\r\n this.enabledAbles = enabledAbles;\r\n this.targetAbles = targetAbles;\r\n this.controlAbles = controlAbles;\r\n };\r\n MoveableManager.prototype.updateState = function (nextState, isSetState) {\r\n if (isSetState) {\r\n if (this.isUnmounted) {\r\n return;\r\n }\r\n this.setState(nextState);\r\n }\r\n else {\r\n var state = this.state;\r\n for (var name_3 in nextState) {\r\n state[name_3] = nextState[name_3];\r\n }\r\n }\r\n };\r\n MoveableManager.prototype.getEnabledAbles = function (ables) {\r\n if (ables === void 0) { ables = this.props.ables; }\r\n var props = this.props;\r\n return ables.filter(function (able) { return able && ((able.always && props[able.name] !== false)\r\n || props[able.name]); });\r\n };\r\n MoveableManager.prototype.renderAbles = function () {\r\n var _this = this;\r\n var props = this.props;\r\n var triggerAblesSimultaneously = props.triggerAblesSimultaneously;\r\n var Renderer = {\r\n createElement: createElement,\r\n };\r\n this.renderState = {};\r\n return groupByMap(flat(filterAbles(this.getEnabledAbles(), [\"render\"], triggerAblesSimultaneously).map(function (_a) {\r\n var render = _a.render;\r\n return render(_this, Renderer) || [];\r\n })).filter(function (el) { return el; }), function (_a) {\r\n var key = _a.key;\r\n return key;\r\n }).map(function (group) { return group[0]; });\r\n };\r\n MoveableManager.prototype.updateCheckInput = function () {\r\n this.targetGesto && (this.targetGesto.options.checkInput = this.props.checkInput);\r\n };\r\n MoveableManager.prototype._getRequestStyles = function () {\r\n var styleNames = this.getEnabledAbles().reduce(function (names, able) {\r\n var _a, _b;\r\n var ableStyleNames = ((_b = (_a = able.requestStyle) === null || _a === void 0 ? void 0 : _a.call(able)) !== null && _b !== void 0 ? _b : []);\r\n return __spreadArray(__spreadArray([], __read(names), false), __read(ableStyleNames), false);\r\n }, __spreadArray([], __read((this.props.requestStyles || [])), false));\r\n return styleNames;\r\n };\r\n MoveableManager.prototype._updateObserver = function (prevProps) {\r\n this._updateResizeObserver(prevProps);\r\n this._updateMutationObserver(prevProps);\r\n };\r\n MoveableManager.prototype._updateEvents = function () {\r\n var hasTargetAble = this.targetAbles.length;\r\n var hasControlAble = this.controlAbles.length;\r\n var target = this._dragTarget;\r\n var isUnset = (!hasTargetAble && this.targetGesto)\r\n || this._isTargetChanged(true);\r\n if (isUnset) {\r\n unsetGesto(this, false);\r\n this.updateState({ gestos: {} });\r\n }\r\n if (!hasControlAble) {\r\n unsetGesto(this, true);\r\n }\r\n if (target && hasTargetAble && !this.targetGesto) {\r\n this.targetGesto = getTargetAbleGesto(this, target, \"\");\r\n }\r\n if (!this.controlGesto && hasControlAble) {\r\n this.controlGesto = getControlAbleGesto(this, \"Control\");\r\n }\r\n };\r\n MoveableManager.prototype._updateTargets = function () {\r\n var props = this.props;\r\n this._prevPropTarget = this._propTarget;\r\n this._prevDragTarget = this._dragTarget;\r\n this._prevOriginalDragTarget = this._originalDragTarget;\r\n this._prevDragArea = props.dragArea;\r\n this._propTarget = props.target;\r\n this._originalDragTarget = props.dragTarget || props.target;\r\n this._dragTarget = getRefTarget(this._originalDragTarget, true);\r\n };\r\n MoveableManager.prototype._renderLines = function () {\r\n var props = this.props;\r\n var _a = props, zoom = _a.zoom, hideDefaultLines = _a.hideDefaultLines, hideChildMoveableDefaultLines = _a.hideChildMoveableDefaultLines, parentMoveable = _a.parentMoveable;\r\n if (hideDefaultLines || (parentMoveable && hideChildMoveableDefaultLines)) {\r\n return [];\r\n }\r\n var state = this.getState();\r\n var Renderer = {\r\n createElement: createElement,\r\n };\r\n return state.renderLines.map(function (line, i) {\r\n return renderLine(Renderer, \"\", line[0], line[1], zoom, \"render-line-\".concat(i));\r\n });\r\n };\r\n MoveableManager.prototype._isTargetChanged = function (useDragArea) {\r\n var props = this.props;\r\n var nextTarget = props.dragTarget || props.target;\r\n var prevTarget = this._prevOriginalDragTarget;\r\n var prevDragArea = this._prevDragArea;\r\n var dragArea = props.dragArea;\r\n // check target without dragArea\r\n var isDragTargetChanged = !dragArea && prevTarget !== nextTarget;\r\n var isDragAreaChanged = (useDragArea || dragArea) && prevDragArea !== dragArea;\r\n return isDragTargetChanged || isDragAreaChanged || this._prevPropTarget != this._propTarget;\r\n };\r\n MoveableManager.prototype._updateNativeEvents = function () {\r\n var _this = this;\r\n var props = this.props;\r\n var target = props.dragArea ? this.areaElement : this.state.target;\r\n var events = this.events;\r\n var eventKeys = getKeys(events);\r\n if (this._isTargetChanged()) {\r\n for (var eventName in events) {\r\n var manager = events[eventName];\r\n manager && manager.destroy();\r\n events[eventName] = null;\r\n }\r\n }\r\n if (!target) {\r\n return;\r\n }\r\n var enabledAbles = this.enabledAbles;\r\n eventKeys.forEach(function (eventName) {\r\n var ables = filterAbles(enabledAbles, [eventName]);\r\n var hasAbles = ables.length > 0;\r\n var manager = events[eventName];\r\n if (!hasAbles) {\r\n if (manager) {\r\n manager.destroy();\r\n events[eventName] = null;\r\n }\r\n return;\r\n }\r\n if (!manager) {\r\n manager = new EventManager(target, _this, eventName);\r\n events[eventName] = manager;\r\n }\r\n manager.setAbles(ables);\r\n });\r\n };\r\n MoveableManager.prototype._checkUpdateRootContainer = function () {\r\n var rootContainer = this.props.rootContainer;\r\n if (!this._rootContainer && rootContainer) {\r\n this._rootContainer = getRefTarget(rootContainer, true);\r\n }\r\n };\r\n MoveableManager.prototype._checkUpdateViewContainer = function () {\r\n var viewContainerOption = this.props.viewContainer;\r\n if (!this._viewContainer && viewContainerOption) {\r\n this._viewContainer = getRefTarget(viewContainerOption, true);\r\n }\r\n var viewContainer = this._viewContainer;\r\n if (viewContainer) {\r\n this._changeAbleViewClassNames(__spreadArray(__spreadArray([], __read(this._getAbleViewClassNames()), false), [\r\n this.isDragging() ? VIEW_DRAGGING : \"\",\r\n ], false));\r\n }\r\n };\r\n MoveableManager.prototype._changeAbleViewClassNames = function (classNames) {\r\n var viewContainer = this._viewContainer;\r\n var nextClassNames = groupBy(classNames.filter(Boolean), function (el) { return el; }).map(function (_a) {\r\n var _b = __read(_a, 1), className = _b[0];\r\n return className;\r\n });\r\n var prevClassNames = this._viewClassNames;\r\n var _a = diff$1(prevClassNames, nextClassNames), removed = _a.removed, added = _a.added;\r\n removed.forEach(function (index) {\r\n removeClass(viewContainer, prevClassNames[index]);\r\n });\r\n added.forEach(function (index) {\r\n addClass(viewContainer, nextClassNames[index]);\r\n });\r\n this._viewClassNames = nextClassNames;\r\n };\r\n MoveableManager.prototype._getAbleViewClassNames = function () {\r\n var _this = this;\r\n return (this.getEnabledAbles().map(function (able) {\r\n var _a;\r\n return (((_a = able.viewClassName) === null || _a === void 0 ? void 0 : _a.call(able, _this)) || \"\");\r\n }).join(\" \") + \" \".concat(this._getAbleClassName(\"-view\"))).split(/\\s+/g);\r\n };\r\n MoveableManager.prototype._getAbleClassName = function (classPrefix) {\r\n var _this = this;\r\n if (classPrefix === void 0) { classPrefix = \"\"; }\r\n var ables = this.getEnabledAbles();\r\n var targetGesto = this.targetGesto;\r\n var controlGesto = this.controlGesto;\r\n var targetGestoData = (targetGesto === null || targetGesto === void 0 ? void 0 : targetGesto.isFlag())\r\n ? targetGesto.getEventData() : {};\r\n var controlGestoData = (controlGesto === null || controlGesto === void 0 ? void 0 : controlGesto.isFlag())\r\n ? controlGesto.getEventData() : {};\r\n return ables.map(function (able) {\r\n var _a, _b, _c;\r\n var name = able.name;\r\n var className = ((_a = able.className) === null || _a === void 0 ? void 0 : _a.call(able, _this)) || \"\";\r\n if (((_b = targetGestoData[name]) === null || _b === void 0 ? void 0 : _b.isEventStart)\r\n || ((_c = controlGestoData[name]) === null || _c === void 0 ? void 0 : _c.isEventStart)) {\r\n className += \" \".concat(prefix(\"\".concat(name).concat(classPrefix, \"-dragging\")));\r\n }\r\n return className.trim();\r\n }).filter(Boolean).join(\" \");\r\n };\r\n MoveableManager.prototype._updateResizeObserver = function (prevProps) {\r\n var _a;\r\n var props = this.props;\r\n var target = props.target;\r\n var win = getWindow(this.getControlBoxElement());\r\n if (!win.ResizeObserver || !target || !props.useResizeObserver) {\r\n (_a = this._reiszeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\r\n return;\r\n }\r\n if (prevProps.target === target && this._reiszeObserver) {\r\n return;\r\n }\r\n var observer = new win.ResizeObserver(this.checkUpdateRect);\r\n observer.observe(target, {\r\n box: \"border-box\",\r\n });\r\n this._reiszeObserver = observer;\r\n };\r\n MoveableManager.prototype._updateMutationObserver = function (prevProps) {\r\n var _this = this;\r\n var _a;\r\n var props = this.props;\r\n var target = props.target;\r\n var win = getWindow(this.getControlBoxElement());\r\n if (!win.MutationObserver || !target || !props.useMutationObserver) {\r\n (_a = this._mutationObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\r\n return;\r\n }\r\n if (prevProps.target === target && this._mutationObserver) {\r\n return;\r\n }\r\n var observer = new win.MutationObserver(function (records) {\r\n var e_1, _a;\r\n try {\r\n for (var records_1 = __values(records), records_1_1 = records_1.next(); !records_1_1.done; records_1_1 = records_1.next()) {\r\n var mutation = records_1_1.value;\r\n if (mutation.type === \"attributes\" && mutation.attributeName === \"style\") {\r\n _this.checkUpdateRect();\r\n }\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (records_1_1 && !records_1_1.done && (_a = records_1.return)) _a.call(records_1);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n });\r\n observer.observe(target, {\r\n attributes: true,\r\n });\r\n this._mutationObserver = observer;\r\n };\r\n MoveableManager.defaultProps = {\r\n dragTargetSelf: false,\r\n target: null,\r\n dragTarget: null,\r\n container: null,\r\n rootContainer: null,\r\n origin: true,\r\n parentMoveable: null,\r\n wrapperMoveable: null,\r\n isWrapperMounted: false,\r\n parentPosition: null,\r\n warpSelf: false,\r\n svgOrigin: \"\",\r\n dragContainer: null,\r\n useResizeObserver: false,\r\n useMutationObserver: false,\r\n preventDefault: true,\r\n preventRightClick: true,\r\n preventWheelClick: true,\r\n linePadding: 0,\r\n controlPadding: 0,\r\n ables: [],\r\n pinchThreshold: 20,\r\n dragArea: false,\r\n passDragArea: false,\r\n transformOrigin: \"\",\r\n className: \"\",\r\n zoom: 1,\r\n triggerAblesSimultaneously: false,\r\n padding: {},\r\n pinchOutside: true,\r\n checkInput: false,\r\n dragFocusedInput: false,\r\n groupable: false,\r\n hideDefaultLines: false,\r\n cspNonce: \"\",\r\n translateZ: 0,\r\n cssStyled: null,\r\n customStyledMap: {},\r\n props: {},\r\n stopPropagation: false,\r\n preventClickDefault: false,\r\n preventClickEventOnDrag: true,\r\n flushSync: defaultSync,\r\n firstRenderState: null,\r\n persistData: null,\r\n viewContainer: null,\r\n requestStyles: [],\r\n useAccuratePosition: false,\r\n };\r\n return MoveableManager;\r\n}(React.PureComponent));\r\n/**\r\n * The target to indicate Moveable Control Box.\r\n * @name Moveable#target\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n * moveable.target = document.querySelector(\".target\");\r\n */\r\n/**\r\n * Zooms in the elements of a moveable.\r\n * @name Moveable#zoom\r\n * @default 1\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n * moveable.zoom = 2;\r\n */\r\n/**\r\n * Whether the target size is detected and updated whenever it changes.\r\n * @name Moveable#useResizeObserver\r\n * @default false\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n * moveable.useResizeObserver = true;\r\n */\r\n/**\r\n * Resize, Scale Events at edges\r\n * @name Moveable#edge\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n * moveable.edge = true;\r\n */\r\n/**\r\n * You can specify the className of the moveable controlbox.\r\n * @name Moveable#className\r\n * @default \"\"\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * className: \"\",\r\n * });\r\n *\r\n * moveable.className = \"moveable1\";\r\n */\r\n/**\r\n * The target(s) to drag Moveable target(s)\r\n * @name Moveable#dragTarget\r\n * @default target\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body);\r\n * moveable.target = document.querySelector(\".target\");\r\n * moveable.dragTarget = document.querySelector(\".dragTarget\");\r\n */\r\n/**\r\n * `renderStart` event occurs at the first start of all events.\r\n * @memberof Moveable\r\n * @event renderStart\r\n * @param {Moveable.OnRenderStart} - Parameters for the `renderStart` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: document.querySelector(\".target\"),\r\n * });\r\n * moveable.on(\"renderStart\", ({ target }) => {\r\n * console.log(\"onRenderStart\", target);\r\n * });\r\n */\r\n/**\r\n * `render` event occurs before the target is drawn on the screen.\r\n * @memberof Moveable\r\n * @event render\r\n * @param {Moveable.OnRender} - Parameters for the `render` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: document.querySelector(\".target\"),\r\n * });\r\n * moveable.on(\"render\", ({ target }) => {\r\n * console.log(\"onRender\", target);\r\n * });\r\n */\r\n/**\r\n * `renderEnd` event occurs at the end of all events.\r\n * @memberof Moveable\r\n * @event renderEnd\r\n * @param {Moveable.OnRenderEnd} - Parameters for the `renderEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: document.querySelector(\".target\"),\r\n * });\r\n * moveable.on(\"renderEnd\", ({ target }) => {\r\n * console.log(\"onRenderEnd\", target);\r\n * });\r\n */\r\n/**\r\n * `renderGroupStart` event occurs at the first start of all events in group.\r\n * @memberof Moveable\r\n * @event renderGroupStart\r\n * @param {Moveable.OnRenderGroupStart} - Parameters for the `renderGroupStart` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * });\r\n * moveable.on(\"renderGroupStart\", ({ targets }) => {\r\n * console.log(\"onRenderGroupStart\", targets);\r\n * });\r\n */\r\n/**\r\n * `renderGroup` event occurs before the target is drawn on the screen in group.\r\n * @memberof Moveable\r\n * @event renderGroup\r\n * @param {Moveable.OnRenderGroup} - Parameters for the `renderGroup` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * });\r\n * moveable.on(\"renderGroup\", ({ targets }) => {\r\n * console.log(\"onRenderGroup\", targets);\r\n * });\r\n */\r\n/**\r\n * `renderGroupEnd` event occurs at the end of all events in group.\r\n * @memberof Moveable\r\n * @event renderGroupEnd\r\n * @param {Moveable.OnRenderGroupEnd} - Parameters for the `renderGroupEnd` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * });\r\n * moveable.on(\"renderGroupEnd\", ({ targets }) => {\r\n * console.log(\"onRenderGroupEnd\", targets);\r\n * });\r\n */\n\nvar Groupable = {\r\n name: \"groupable\",\r\n props: [\r\n \"defaultGroupRotate\",\r\n \"useDefaultGroupRotate\",\r\n \"defaultGroupOrigin\",\r\n \"groupable\",\r\n \"groupableProps\",\r\n \"targetGroups\",\r\n \"hideChildMoveableDefaultLines\",\r\n ],\r\n events: [],\r\n render: function (moveable, React) {\r\n var _a;\r\n var props = moveable.props;\r\n var targets = props.targets || [];\r\n var _b = moveable.getState(), left = _b.left, top = _b.top, isPersisted = _b.isPersisted;\r\n var zoom = props.zoom || 1;\r\n var renderGroupRects = moveable.renderGroupRects;\r\n var persistDatChildren = ((_a = props.persistData) === null || _a === void 0 ? void 0 : _a.children) || [];\r\n if (isPersisted) {\r\n targets = persistDatChildren.map(function () { return null; });\r\n }\r\n else {\r\n persistDatChildren = [];\r\n }\r\n var parentPosition = watchValue(moveable, \"parentPosition\", [left, top], function (styles) { return styles.join(\",\"); });\r\n var requestStyles = watchValue(moveable, \"requestStyles\", moveable.getRequestChildStyles(), function (styles) { return styles.join(\",\"); });\r\n moveable.moveables = moveable.moveables.slice(0, targets.length);\r\n return __spreadArray(__spreadArray([], __read(targets.map(function (target, i) {\r\n return React.createElement(MoveableManager, { key: \"moveable\" + i, ref: refs(moveable, \"moveables\", i), target: target, origin: false, requestStyles: requestStyles, cssStyled: props.cssStyled, customStyledMap: props.customStyledMap, useResizeObserver: props.useResizeObserver, useMutationObserver: props.useMutationObserver, hideChildMoveableDefaultLines: props.hideChildMoveableDefaultLines, parentMoveable: moveable, parentPosition: [left, top], persistData: persistDatChildren[i], zoom: zoom });\r\n })), false), __read(flat(renderGroupRects.map(function (_a, i) {\r\n var pos1 = _a.pos1, pos2 = _a.pos2, pos3 = _a.pos3, pos4 = _a.pos4;\r\n var poses = [pos1, pos2, pos3, pos4];\r\n return [\r\n [0, 1],\r\n [1, 3],\r\n [3, 2],\r\n [2, 0],\r\n ].map(function (_a, j) {\r\n var _b = __read(_a, 2), from = _b[0], to = _b[1];\r\n return renderLine(React, \"\", minus(poses[from], parentPosition), minus(poses[to], parentPosition), zoom, \"group-rect-\".concat(i, \"-\").concat(j));\r\n });\r\n }))), false);\r\n },\r\n};\n\nvar Clickable = makeAble(\"clickable\", {\r\n props: [\r\n \"clickable\",\r\n ],\r\n events: [\r\n \"click\",\r\n \"clickGroup\",\r\n ],\r\n always: true,\r\n dragRelation: \"weak\",\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n dragStart: function () {\r\n return;\r\n },\r\n dragControlStart: function () {\r\n return;\r\n },\r\n dragGroupStart: function (moveable, e) {\r\n e.datas.inputTarget = e.inputEvent && e.inputEvent.target;\r\n },\r\n dragEnd: function (moveable, e) {\r\n var target = moveable.props.target;\r\n var inputEvent = e.inputEvent;\r\n var inputTarget = e.inputTarget;\r\n var isMoveableElement = moveable.isMoveableElement(inputTarget);\r\n var containsElement = !isMoveableElement && moveable.controlBox.contains(inputTarget);\r\n if (!inputEvent || !inputTarget || e.isDrag\r\n || moveable.isMoveableElement(inputTarget)\r\n || containsElement\r\n // External event duplicate target or dragAreaElement\r\n ) {\r\n return;\r\n }\r\n var containsTarget = target.contains(inputTarget);\r\n triggerEvent(moveable, \"onClick\", fillParams(moveable, e, {\r\n isDouble: e.isDouble,\r\n inputTarget: inputTarget,\r\n isTarget: target === inputTarget,\r\n moveableTarget: moveable.props.target,\r\n containsTarget: containsTarget,\r\n }));\r\n },\r\n dragGroupEnd: function (moveable, e) {\r\n var inputEvent = e.inputEvent;\r\n var inputTarget = e.inputTarget;\r\n if (!inputEvent || !inputTarget || e.isDrag\r\n || moveable.isMoveableElement(inputTarget)\r\n // External event duplicate target or dragAreaElement\r\n || e.datas.inputTarget === inputTarget) {\r\n return;\r\n }\r\n var targets = moveable.props.targets;\r\n var targetIndex = targets.indexOf(inputTarget);\r\n var isTarget = targetIndex > -1;\r\n var containsTarget = false;\r\n if (targetIndex === -1) {\r\n targetIndex = findIndex(targets, function (parentTarget) { return parentTarget.contains(inputTarget); });\r\n containsTarget = targetIndex > -1;\r\n }\r\n triggerEvent(moveable, \"onClickGroup\", fillParams(moveable, e, {\r\n isDouble: e.isDouble,\r\n targets: targets,\r\n inputTarget: inputTarget,\r\n targetIndex: targetIndex,\r\n isTarget: isTarget,\r\n containsTarget: containsTarget,\r\n moveableTarget: targets[targetIndex],\r\n }));\r\n },\r\n dragControlEnd: function (moveable, e) {\r\n this.dragEnd(moveable, e);\r\n },\r\n dragGroupControlEnd: function (moveable, e) {\r\n this.dragEnd(moveable, e);\r\n },\r\n});\r\n/**\r\n * When you click on the element, the `click` event is called.\r\n * @memberof Moveable\r\n * @event click\r\n * @param {Moveable.OnClick} - Parameters for the `click` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: document.querySelector(\".target\"),\r\n * });\r\n * moveable.on(\"click\", ({ hasTarget, containsTarget, targetIndex }) => {\r\n * // If you click on an element other than the target and not included in the target, index is -1.\r\n * console.log(\"onClickGroup\", target, hasTarget, containsTarget, targetIndex);\r\n * });\r\n */\r\n/**\r\n * When you click on the element inside the group, the `clickGroup` event is called.\r\n * @memberof Moveable\r\n * @event clickGroup\r\n * @param {Moveable.OnClickGroup} - Parameters for the `clickGroup` event\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [].slice.call(document.querySelectorAll(\".target\")),\r\n * });\r\n * moveable.on(\"clickGroup\", ({ inputTarget, isTarget, containsTarget, targetIndex }) => {\r\n * // If you click on an element other than the target and not included in the target, index is -1.\r\n * console.log(\"onClickGroup\", inputTarget, isTarget, containsTarget, targetIndex);\r\n * });\r\n */\n\nfunction getDraggableEvent(e) {\r\n var datas = e.originalDatas.draggable;\r\n if (!datas) {\r\n e.originalDatas.draggable = {};\r\n datas = e.originalDatas.draggable;\r\n }\r\n return __assign(__assign({}, e), { datas: datas });\r\n}\r\nvar edgeDraggable = makeAble(\"edgeDraggable\", {\r\n css: [\r\n \".edge.edgeDraggable.line {\\ncursor: move;\\n}\",\r\n ],\r\n render: function (moveable, React) {\r\n var props = moveable.props;\r\n var edge = props.edgeDraggable;\r\n if (!edge) {\r\n return [];\r\n }\r\n return renderEdgeLines(React, \"edgeDraggable\", edge, moveable.getState().renderPoses, props.zoom);\r\n },\r\n dragCondition: function (moveable, e) {\r\n var _a;\r\n var props = moveable.props;\r\n var target = (_a = e.inputEvent) === null || _a === void 0 ? void 0 : _a.target;\r\n if (!props.edgeDraggable || !target) {\r\n return false;\r\n }\r\n return !props.draggable\r\n && hasClass(target, prefix(\"direction\"))\r\n && hasClass(target, prefix(\"edge\"))\r\n && hasClass(target, prefix(\"edgeDraggable\"));\r\n },\r\n dragStart: function (moveable, e) {\r\n return Draggable.dragStart(moveable, getDraggableEvent(e));\r\n },\r\n drag: function (moveable, e) {\r\n return Draggable.drag(moveable, getDraggableEvent(e));\r\n },\r\n dragEnd: function (moveable, e) {\r\n return Draggable.dragEnd(moveable, getDraggableEvent(e));\r\n },\r\n dragGroupCondition: function (moveable, e) {\r\n var _a;\r\n var props = moveable.props;\r\n var target = (_a = e.inputEvent) === null || _a === void 0 ? void 0 : _a.target;\r\n if (!props.edgeDraggable || !target) {\r\n return false;\r\n }\r\n return !props.draggable && hasClass(target, prefix(\"direction\")) && hasClass(target, prefix(\"line\"));\r\n },\r\n dragGroupStart: function (moveable, e) {\r\n return Draggable.dragGroupStart(moveable, getDraggableEvent(e));\r\n },\r\n dragGroup: function (moveable, e) {\r\n return Draggable.dragGroup(moveable, getDraggableEvent(e));\r\n },\r\n dragGroupEnd: function (moveable, e) {\r\n return Draggable.dragGroupEnd(moveable, getDraggableEvent(e));\r\n },\r\n unset: function (moveable) {\r\n return Draggable.unset(moveable);\r\n },\r\n});\r\n/**\r\n * Whether to move by dragging the edge line (default: false)\r\n * @name Moveable.Draggable#edgeDraggable\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * draggable: true,\r\n * edgeDraggable: false,\r\n * });\r\n *\r\n * moveable.edgeDraggable = true;\r\n */\n\nvar IndividualGroupable = {\r\n name: \"individualGroupable\",\r\n props: [\r\n \"individualGroupable\",\r\n \"individualGroupableProps\",\r\n ],\r\n events: [],\r\n};\n\nvar MOVEABLE_ABLES = [\r\n BeforeRenderable,\r\n Default, Snappable, Pinchable,\r\n Draggable, edgeDraggable,\r\n Resizable, Scalable, Warpable, Rotatable,\r\n Scrollable, Padding, Origin,\r\n OriginDraggable,\r\n Clippable, Roundable, Groupable, IndividualGroupable,\r\n Clickable,\r\n DragArea,\r\n Renderable,\r\n];\r\nvar MOVEABLE_EVENTS = /*#__PURE__*/ MOVEABLE_ABLES.reduce(function (current, able) {\r\n (able.events || []).forEach(function (name) {\r\n pushSet(current, name);\r\n });\r\n return current;\r\n}, []);\r\nvar MOVEABLE_PROPS = /*#__PURE__*/ MOVEABLE_ABLES.reduce(function (current, able) {\r\n (able.props || []).forEach(function (name) {\r\n pushSet(current, name);\r\n });\r\n return current;\r\n}, []);\n\nfunction solveConstantsDistance(_a, pos) {\r\n var _b = __read(_a, 3), a = _b[0], b = _b[1], c = _b[2];\r\n return (a * pos[0] + b * pos[1] + c) / Math.sqrt(a * a + b * b);\r\n}\r\nfunction solveC(_a, pos) {\r\n var _b = __read(_a, 2), a = _b[0], b = _b[1];\r\n // ax + by + c = 0\r\n // -ax -by;\r\n return -a * pos[0] - b * pos[1];\r\n}\n\nfunction getMaxPos(poses, index) {\r\n return Math.max.apply(Math, __spreadArray([], __read(poses.map(function (_a) {\r\n var _b = __read(_a, 4), pos1 = _b[0], pos2 = _b[1], pos3 = _b[2], pos4 = _b[3];\r\n return Math.max(pos1[index], pos2[index], pos3[index], pos4[index]);\r\n })), false));\r\n}\r\nfunction getMinPos(poses, index) {\r\n return Math.min.apply(Math, __spreadArray([], __read(poses.map(function (_a) {\r\n var _b = __read(_a, 4), pos1 = _b[0], pos2 = _b[1], pos3 = _b[2], pos4 = _b[3];\r\n return Math.min(pos1[index], pos2[index], pos3[index], pos4[index]);\r\n })), false));\r\n}\r\nfunction getGroupRect(parentPoses, rotation) {\r\n var _a, _b, _c;\r\n var pos1 = [0, 0];\r\n var pos2 = [0, 0];\r\n var pos3 = [0, 0];\r\n var pos4 = [0, 0];\r\n var width = 0;\r\n var height = 0;\r\n if (!parentPoses.length) {\r\n return {\r\n pos1: pos1,\r\n pos2: pos2,\r\n pos3: pos3,\r\n pos4: pos4,\r\n minX: 0,\r\n minY: 0,\r\n maxX: 0,\r\n maxY: 0,\r\n width: width,\r\n height: height,\r\n rotation: rotation,\r\n };\r\n }\r\n var fixedRotation = throttle(rotation, TINY_NUM);\r\n if (fixedRotation % 90) {\r\n var rad = fixedRotation / 180 * Math.PI;\r\n var a1_1 = Math.tan(rad);\r\n var a2_1 = -1 / a1_1;\r\n // ax = y // -ax + y = 0 // 0 => 1\r\n // -ax = y // ax + y = 0 // 0 => 3\r\n var a1MinMax_1 = [MAX_NUM, MIN_NUM];\r\n var a1MinMaxPos_1 = [[0, 0], [0, 0]];\r\n var a2MinMax_1 = [MAX_NUM, MIN_NUM];\r\n var a2MinMaxPos_1 = [[0, 0], [0, 0]];\r\n parentPoses.forEach(function (poses) {\r\n poses.forEach(function (pos) {\r\n // const b1 = pos[1] - a1 * pos[0];\r\n // const b2 = pos[1] - a2 * pos[0];\r\n var a1Dist = solveConstantsDistance([-a1_1, 1, 0], pos);\r\n var a2Dist = solveConstantsDistance([-a2_1, 1, 0], pos);\r\n if (a1MinMax_1[0] > a1Dist) {\r\n a1MinMaxPos_1[0] = pos;\r\n a1MinMax_1[0] = a1Dist;\r\n }\r\n if (a1MinMax_1[1] < a1Dist) {\r\n a1MinMaxPos_1[1] = pos;\r\n a1MinMax_1[1] = a1Dist;\r\n }\r\n if (a2MinMax_1[0] > a2Dist) {\r\n a2MinMaxPos_1[0] = pos;\r\n a2MinMax_1[0] = a2Dist;\r\n }\r\n if (a2MinMax_1[1] < a2Dist) {\r\n a2MinMaxPos_1[1] = pos;\r\n a2MinMax_1[1] = a2Dist;\r\n }\r\n });\r\n });\r\n var _d = __read(a1MinMaxPos_1, 2), a1MinPos = _d[0], a1MaxPos = _d[1];\r\n var _e = __read(a2MinMaxPos_1, 2), a2MinPos = _e[0], a2MaxPos = _e[1];\r\n var minHorizontalLine = [-a1_1, 1, solveC([-a1_1, 1], a1MinPos)];\r\n var maxHorizontalLine = [-a1_1, 1, solveC([-a1_1, 1], a1MaxPos)];\r\n var minVerticalLine = [-a2_1, 1, solveC([-a2_1, 1], a2MinPos)];\r\n var maxVerticalLine = [-a2_1, 1, solveC([-a2_1, 1], a2MaxPos)];\r\n _a = __read([\r\n [minHorizontalLine, minVerticalLine],\r\n [minHorizontalLine, maxVerticalLine],\r\n [maxHorizontalLine, minVerticalLine],\r\n [maxHorizontalLine, maxVerticalLine],\r\n ].map(function (_a) {\r\n var _b = __read(_a, 2), line1 = _b[0], line2 = _b[1];\r\n return getIntersectionPointsByConstants(line1, line2)[0];\r\n }), 4), pos1 = _a[0], pos2 = _a[1], pos3 = _a[2], pos4 = _a[3];\r\n width = a2MinMax_1[1] - a2MinMax_1[0];\r\n height = a1MinMax_1[1] - a1MinMax_1[0];\r\n }\r\n else {\r\n var minX_1 = getMinPos(parentPoses, 0);\r\n var minY_1 = getMinPos(parentPoses, 1);\r\n var maxX_1 = getMaxPos(parentPoses, 0);\r\n var maxY_1 = getMaxPos(parentPoses, 1);\r\n pos1 = [minX_1, minY_1];\r\n pos2 = [maxX_1, minY_1];\r\n pos3 = [minX_1, maxY_1];\r\n pos4 = [maxX_1, maxY_1];\r\n width = maxX_1 - minX_1;\r\n height = maxY_1 - minY_1;\r\n if (fixedRotation % 180) {\r\n // 0\r\n // 1 2\r\n // 3 4\r\n // 90\r\n // 3 1\r\n // 4 2\r\n // 180\r\n // 4 3\r\n // 2 1\r\n // 270\r\n // 2 4\r\n // 1 3\r\n // 1, 2, 3,4 = 3 1 4 2\r\n var changedX = [pos3, pos1, pos4, pos2];\r\n _b = __read(changedX, 4), pos1 = _b[0], pos2 = _b[1], pos3 = _b[2], pos4 = _b[3];\r\n width = maxY_1 - minY_1;\r\n height = maxX_1 - minX_1;\r\n }\r\n }\r\n if (fixedRotation % 360 > 180) {\r\n // 1 2 4 3\r\n // 3 4 2 1\r\n var changedX = [pos4, pos3, pos2, pos1];\r\n _c = __read(changedX, 4), pos1 = _c[0], pos2 = _c[1], pos3 = _c[2], pos4 = _c[3];\r\n }\r\n var _f = getMinMaxs([pos1, pos2, pos3, pos4]), minX = _f.minX, minY = _f.minY, maxX = _f.maxX, maxY = _f.maxY;\r\n return {\r\n pos1: pos1,\r\n pos2: pos2,\r\n pos3: pos3,\r\n pos4: pos4,\r\n width: width,\r\n height: height,\r\n minX: minX,\r\n minY: minY,\r\n maxX: maxX,\r\n maxY: maxY,\r\n rotation: rotation,\r\n };\r\n}\r\nfunction findMoveableGroups(moveables, childTargetGroups) {\r\n var groups = childTargetGroups.map(function (targetGroup) {\r\n if (isArray(targetGroup)) {\r\n var childMoveableGroups = findMoveableGroups(moveables, targetGroup);\r\n var length_1 = childMoveableGroups.length;\r\n if (length_1 > 1) {\r\n return childMoveableGroups;\r\n }\r\n else if (length_1 === 1) {\r\n return childMoveableGroups[0];\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n else {\r\n var checked = find(moveables, function (_a) {\r\n var manager = _a.manager;\r\n return manager.props.target === targetGroup;\r\n });\r\n if (checked) {\r\n checked.finded = true;\r\n return checked.manager;\r\n }\r\n return null;\r\n }\r\n }).filter(Boolean);\r\n if (groups.length === 1 && isArray(groups[0])) {\r\n return groups[0];\r\n }\r\n return groups;\r\n}\r\n/**\r\n * @namespace Moveable.Group\r\n * @description You can make targets moveable.\r\n */\r\nvar MoveableGroup = /*#__PURE__*/ (function (_super) {\r\n __extends(MoveableGroup, _super);\r\n function MoveableGroup() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.differ = new ChildrenDiffer();\r\n _this.moveables = [];\r\n _this.transformOrigin = \"50% 50%\";\r\n _this.renderGroupRects = [];\r\n _this._targetGroups = [];\r\n _this._hasFirstTargets = false;\r\n return _this;\r\n }\r\n MoveableGroup.prototype.componentDidMount = function () {\r\n _super.prototype.componentDidMount.call(this);\r\n };\r\n MoveableGroup.prototype.checkUpdate = function () {\r\n this._isPropTargetChanged = false;\r\n this.updateAbles();\r\n };\r\n MoveableGroup.prototype.getTargets = function () {\r\n return this.props.targets;\r\n };\r\n MoveableGroup.prototype.updateRect = function (type, isTarget, isSetState) {\r\n var _a;\r\n if (isSetState === void 0) { isSetState = true; }\r\n var state = this.state;\r\n if (!this.controlBox || state.isPersisted) {\r\n return;\r\n }\r\n setStoreCache(true);\r\n this.moveables.forEach(function (moveable) {\r\n moveable.updateRect(type, false, false);\r\n });\r\n var props = this.props;\r\n var moveables = this.moveables;\r\n var target = state.target || props.target;\r\n var checkeds = moveables.map(function (moveable) { return ({ finded: false, manager: moveable }); });\r\n var targetGroups = this.props.targetGroups || [];\r\n var moveableGroups = findMoveableGroups(checkeds, targetGroups);\r\n var useDefaultGroupRotate = props.useDefaultGroupRotate;\r\n moveableGroups.push.apply(moveableGroups, __spreadArray([], __read(checkeds.filter(function (_a) {\r\n var finded = _a.finded;\r\n return !finded;\r\n }).map(function (_a) {\r\n var manager = _a.manager;\r\n return manager;\r\n })), false));\r\n var renderGroupRects = [];\r\n var isReset = !isTarget || (type !== \"\" && props.updateGroup);\r\n var defaultGroupRotate = props.defaultGroupRotate || 0;\r\n if (!this._hasFirstTargets) {\r\n var persistedRoatation = (_a = props.persistData) === null || _a === void 0 ? void 0 : _a.rotation;\r\n if (persistedRoatation != null) {\r\n defaultGroupRotate = persistedRoatation;\r\n }\r\n }\r\n function getMoveableGroupRect(group, parentRotation, isRoot) {\r\n var posesRotations = group.map(function (moveable) {\r\n if (isArray(moveable)) {\r\n var rect = getMoveableGroupRect(moveable, parentRotation);\r\n var poses = [rect.pos1, rect.pos2, rect.pos3, rect.pos4];\r\n renderGroupRects.push(rect);\r\n return { poses: poses, rotation: rect.rotation };\r\n }\r\n else {\r\n return {\r\n poses: getAbsolutePosesByState(moveable.state),\r\n rotation: moveable.getRotation(),\r\n };\r\n }\r\n });\r\n var rotations = posesRotations.map(function (_a) {\r\n var rotation = _a.rotation;\r\n return rotation;\r\n });\r\n var groupRotation = 0;\r\n var firstRotation = rotations[0];\r\n var isSameRotation = rotations.every(function (nextRotation) {\r\n return Math.abs(firstRotation - nextRotation) < 0.1;\r\n });\r\n if (isReset) {\r\n groupRotation = !useDefaultGroupRotate && isSameRotation ? firstRotation : defaultGroupRotate;\r\n }\r\n else {\r\n groupRotation = !useDefaultGroupRotate && !isRoot && isSameRotation ? firstRotation : parentRotation;\r\n }\r\n var groupPoses = posesRotations.map(function (_a) {\r\n var poses = _a.poses;\r\n return poses;\r\n });\r\n var groupRect = getGroupRect(groupPoses, groupRotation);\r\n return groupRect;\r\n }\r\n var rootGroupRect = getMoveableGroupRect(moveableGroups, this.rotation, true);\r\n if (isReset) {\r\n // reset rotataion\r\n this.rotation = rootGroupRect.rotation;\r\n this.transformOrigin = props.defaultGroupOrigin || \"50% 50%\";\r\n this.scale = [1, 1];\r\n }\r\n this._targetGroups = targetGroups;\r\n this.renderGroupRects = renderGroupRects;\r\n var transformOrigin = this.transformOrigin;\r\n var rotation = this.rotation;\r\n var scale = this.scale;\r\n var width = rootGroupRect.width, height = rootGroupRect.height, minX = rootGroupRect.minX, minY = rootGroupRect.minY;\r\n var posesInfo = rotatePosesInfo([\r\n [0, 0],\r\n [width, 0],\r\n [0, height],\r\n [width, height],\r\n ], convertTransformOriginArray(transformOrigin, width, height), this.rotation / 180 * Math.PI);\r\n var _b = getMinMaxs(posesInfo.result), deltaX = _b.minX, deltaY = _b.minY;\r\n var rotateScale = \" rotate(\".concat(rotation, \"deg)\")\r\n + \" scale(\".concat(sign(scale[0]), \", \").concat(sign(scale[1]), \")\");\r\n var transform = \"translate(\".concat(-deltaX, \"px, \").concat(-deltaY, \"px)\").concat(rotateScale);\r\n this.controlBox.style.transform\r\n = \"translate3d(\".concat(minX, \"px, \").concat(minY, \"px, \").concat(this.props.translateZ || 0, \")\");\r\n target.style.cssText += \"left:0px;top:0px;\"\r\n + \"transform-origin:\".concat(transformOrigin, \";\")\r\n + \"width:\".concat(width, \"px;height:\").concat(height, \"px;\")\r\n + \"transform: \".concat(transform);\r\n state.width = width;\r\n state.height = height;\r\n var container = this.getContainer();\r\n var info = getMoveableTargetInfo(this.controlBox, target, this.controlBox, this.getContainer(), this._rootContainer || container, []);\r\n var pos = [info.left, info.top];\r\n var _c = __read(getAbsolutePosesByState(info), 4), pos1 = _c[0], pos2 = _c[1], pos3 = _c[2], pos4 = _c[3]; // info.left + info.pos(1 ~ 4)\r\n var minPos = getMinMaxs([pos1, pos2, pos3, pos4]);\r\n var delta = [minPos.minX, minPos.minY];\r\n var direction = sign(scale[0] * scale[1]);\r\n info.pos1 = minus(pos1, delta);\r\n info.pos2 = minus(pos2, delta);\r\n info.pos3 = minus(pos3, delta);\r\n info.pos4 = minus(pos4, delta);\r\n // info.left = info.left + delta[0];\r\n // info.top = info.top + delta[1];\r\n info.left = minX - info.left + delta[0];\r\n info.top = minY - info.top + delta[1];\r\n info.origin = minus(plus(pos, info.origin), delta);\r\n info.beforeOrigin = minus(plus(pos, info.beforeOrigin), delta);\r\n info.originalBeforeOrigin = plus(pos, info.originalBeforeOrigin);\r\n info.transformOrigin = minus(plus(pos, info.transformOrigin), delta);\r\n target.style.transform\r\n = \"translate(\".concat(-deltaX - delta[0], \"px, \").concat(-deltaY - delta[1], \"px)\")\r\n + rotateScale;\r\n setStoreCache();\r\n this.updateState(__assign(__assign({}, info), { posDelta: delta, direction: direction, beforeDirection: direction }), isSetState);\r\n };\r\n MoveableGroup.prototype.getRect = function () {\r\n return __assign(__assign({}, _super.prototype.getRect.call(this)), { children: this.moveables.map(function (child) { return child.getRect(); }) });\r\n };\r\n MoveableGroup.prototype.triggerEvent = function (name, e, isManager) {\r\n if (isManager || name.indexOf(\"Group\") > -1) {\r\n return _super.prototype.triggerEvent.call(this, name, e);\r\n }\r\n else {\r\n this._emitter.trigger(name, e);\r\n }\r\n };\r\n MoveableGroup.prototype.getRequestChildStyles = function () {\r\n var styleNames = this.getEnabledAbles().reduce(function (names, able) {\r\n var _a, _b;\r\n var ableStyleNames = ((_b = (_a = able.requestChildStyle) === null || _a === void 0 ? void 0 : _a.call(able)) !== null && _b !== void 0 ? _b : []);\r\n return __spreadArray(__spreadArray([], __read(names), false), __read(ableStyleNames), false);\r\n }, []);\r\n return styleNames;\r\n };\r\n MoveableGroup.prototype.getMoveables = function () {\r\n return __spreadArray([], __read(this.moveables), false);\r\n };\r\n MoveableGroup.prototype.updateAbles = function () {\r\n _super.prototype.updateAbles.call(this, __spreadArray(__spreadArray([], __read(this.props.ables), false), [Groupable], false), \"Group\");\r\n };\r\n MoveableGroup.prototype._updateTargets = function () {\r\n _super.prototype._updateTargets.call(this);\r\n this._originalDragTarget = this.props.dragTarget || this.areaElement;\r\n this._dragTarget = getRefTarget(this._originalDragTarget, true);\r\n };\r\n MoveableGroup.prototype._updateEvents = function () {\r\n var state = this.state;\r\n var props = this.props;\r\n var prevTarget = this._prevDragTarget;\r\n var nextTarget = props.dragTarget || this.areaElement;\r\n var targets = props.targets;\r\n var _a = this.differ.update(targets), added = _a.added, changed = _a.changed, removed = _a.removed;\r\n var isTargetChanged = added.length || removed.length;\r\n if (isTargetChanged || this._prevOriginalDragTarget !== this._originalDragTarget) {\r\n unsetGesto(this, false);\r\n unsetGesto(this, true);\r\n this.updateState({ gestos: {} });\r\n }\r\n if (prevTarget !== nextTarget) {\r\n state.target = null;\r\n }\r\n if (!state.target) {\r\n state.target = this.areaElement;\r\n this.controlBox.style.display = \"block\";\r\n }\r\n if (state.target) {\r\n if (!this.targetGesto) {\r\n this.targetGesto = getTargetAbleGesto(this, this._dragTarget, \"Group\");\r\n }\r\n if (!this.controlGesto) {\r\n this.controlGesto = getControlAbleGesto(this, \"GroupControl\");\r\n }\r\n }\r\n var isContainerChanged = !equals(state.container, props.container);\r\n if (isContainerChanged) {\r\n state.container = props.container;\r\n }\r\n if (isContainerChanged\r\n || isTargetChanged\r\n || this.transformOrigin !== (props.defaultGroupOrigin || \"50% 50%\")\r\n || changed.length\r\n || targets.length && !isDeepArrayEquals(this._targetGroups, props.targetGroups || [])) {\r\n this.updateRect();\r\n this._hasFirstTargets = true;\r\n }\r\n this._isPropTargetChanged = !!isTargetChanged;\r\n };\r\n MoveableGroup.prototype._updateObserver = function () { };\r\n MoveableGroup.defaultProps = __assign(__assign({}, MoveableManager.defaultProps), { transformOrigin: [\"50%\", \"50%\"], groupable: true, dragArea: true, keepRatio: true, targets: [], defaultGroupRotate: 0, defaultGroupOrigin: \"50% 50%\" });\r\n return MoveableGroup;\r\n}(MoveableManager));\n\n/**\r\n * @namespace Moveable.IndividualGroup\r\n * @description Create targets individually, not as a group.Create targets individually, not as a group.\r\n */\r\nvar MoveableIndividualGroup = /*#__PURE__*/ (function (_super) {\r\n __extends(MoveableIndividualGroup, _super);\r\n function MoveableIndividualGroup() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.moveables = [];\r\n return _this;\r\n }\r\n MoveableIndividualGroup.prototype.render = function () {\r\n var _this = this;\r\n var _a;\r\n var props = this.props;\r\n var cspNonce = props.cspNonce, ControlBoxElement = props.cssStyled, persistData = props.persistData;\r\n var targets = props.targets || [];\r\n var length = targets.length;\r\n var canPersist = this.isUnmounted || !length;\r\n var persistDatChildren = (_a = persistData === null || persistData === void 0 ? void 0 : persistData.children) !== null && _a !== void 0 ? _a : [];\r\n if (canPersist && !length && persistDatChildren.length) {\r\n targets = persistDatChildren.map(function () { return null; });\r\n }\r\n else if (!canPersist) {\r\n persistDatChildren = [];\r\n }\r\n return React.createElement(ControlBoxElement, { cspNonce: cspNonce, ref: ref(this, \"controlBox\"), className: prefix(\"control-box\") }, targets.map(function (target, i) {\r\n var _a, _b;\r\n var individualProps = (_b = (_a = props.individualGroupableProps) === null || _a === void 0 ? void 0 : _a.call(props, target, i)) !== null && _b !== void 0 ? _b : {};\r\n return React.createElement(MoveableManager, __assign({ key: \"moveable\" + i, ref: refs(_this, \"moveables\", i) }, props, individualProps, { target: target, wrapperMoveable: _this, isWrapperMounted: _this.isMoveableMounted, persistData: persistDatChildren[i] }));\r\n }));\r\n };\r\n MoveableIndividualGroup.prototype.componentDidMount = function () { };\r\n MoveableIndividualGroup.prototype.componentDidUpdate = function () { };\r\n MoveableIndividualGroup.prototype.getTargets = function () {\r\n return this.props.targets;\r\n };\r\n MoveableIndividualGroup.prototype.updateRect = function (type, isTarget, isSetState) {\r\n if (isSetState === void 0) { isSetState = true; }\r\n setStoreCache(true);\r\n this.moveables.forEach(function (moveable) {\r\n moveable.updateRect(type, isTarget, isSetState);\r\n });\r\n setStoreCache();\r\n };\r\n MoveableIndividualGroup.prototype.getRect = function () {\r\n return __assign(__assign({}, _super.prototype.getRect.call(this)), { children: this.moveables.map(function (child) { return child.getRect(); }) });\r\n };\r\n MoveableIndividualGroup.prototype.request = function (ableName, param, isInstant) {\r\n if (param === void 0) { param = {}; }\r\n var results = this.moveables.map(function (m) { return m.request(ableName, __assign(__assign({}, param), { isInstant: false }), false); });\r\n var requestInstant = isInstant || param.isInstant;\r\n var requester = {\r\n request: function (ableParam) {\r\n results.forEach(function (r) { return r.request(ableParam); });\r\n return this;\r\n },\r\n requestEnd: function () {\r\n results.forEach(function (r) { return r.requestEnd(); });\r\n return this;\r\n },\r\n };\r\n return requestInstant ? requester.request(param).requestEnd() : requester;\r\n };\r\n MoveableIndividualGroup.prototype.dragStart = function (e, target) {\r\n if (target === void 0) { target = e.target; }\r\n var inputTarget = target;\r\n var childMoveable = find(this.moveables, function (child) {\r\n var target = child.getTargets()[0];\r\n var controlBoxElement = child.getControlBoxElement();\r\n var dragElement = child.getDragElement();\r\n if (!target || !dragElement) {\r\n return false;\r\n }\r\n return dragElement === inputTarget || dragElement.contains(inputTarget)\r\n || (dragElement !== target && target === inputTarget || target.contains(inputTarget))\r\n || controlBoxElement === inputTarget || controlBoxElement.contains(inputTarget);\r\n });\r\n if (childMoveable) {\r\n childMoveable.dragStart(e, target);\r\n }\r\n return this;\r\n };\r\n MoveableIndividualGroup.prototype.hitTest = function () {\r\n return 0;\r\n };\r\n MoveableIndividualGroup.prototype.isInside = function () {\r\n return false;\r\n };\r\n MoveableIndividualGroup.prototype.isDragging = function () {\r\n return false;\r\n };\r\n MoveableIndividualGroup.prototype.getDragElement = function () {\r\n return null;\r\n };\r\n MoveableIndividualGroup.prototype.getMoveables = function () {\r\n return __spreadArray([], __read(this.moveables), false);\r\n };\r\n MoveableIndividualGroup.prototype.updateRenderPoses = function () { };\r\n MoveableIndividualGroup.prototype.checkUpdate = function () { };\r\n MoveableIndividualGroup.prototype.triggerEvent = function () { };\r\n MoveableIndividualGroup.prototype.updateAbles = function () { };\r\n MoveableIndividualGroup.prototype._updateEvents = function () { };\r\n MoveableIndividualGroup.prototype._updateObserver = function () { };\r\n return MoveableIndividualGroup;\r\n}(MoveableManager));\n\nfunction getElementTargets(refTargets, selectorMap) {\r\n var elementTargets = [];\r\n refTargets.forEach(function (target) {\r\n if (!target) {\r\n return;\r\n }\r\n if (isString(target)) {\r\n if (selectorMap[target]) {\r\n elementTargets.push.apply(elementTargets, __spreadArray([], __read(selectorMap[target]), false));\r\n }\r\n return;\r\n }\r\n if (isArray(target)) {\r\n elementTargets.push.apply(elementTargets, __spreadArray([], __read(getElementTargets(target, selectorMap)), false));\r\n }\r\n else {\r\n elementTargets.push(target);\r\n }\r\n });\r\n return elementTargets;\r\n}\r\nfunction getTargetGroups(refTargets, selectorMap) {\r\n var targetGroups = [];\r\n refTargets.forEach(function (target) {\r\n if (!target) {\r\n return;\r\n }\r\n if (isString(target)) {\r\n if (selectorMap[target]) {\r\n targetGroups.push.apply(targetGroups, __spreadArray([], __read(selectorMap[target]), false));\r\n }\r\n return;\r\n }\r\n if (isArray(target)) {\r\n targetGroups.push(getTargetGroups(target, selectorMap));\r\n }\r\n else {\r\n targetGroups.push(target);\r\n }\r\n });\r\n return targetGroups;\r\n}\r\nfunction compareRefTargets(prevRefTargets, nextRefTargets) {\r\n return (prevRefTargets.length !== nextRefTargets.length) || prevRefTargets.some(function (target, i) {\r\n var nextTarget = nextRefTargets[i];\r\n if (!target && !nextTarget) {\r\n return false;\r\n }\r\n else if (target != nextTarget) {\r\n if (isArray(target) && isArray(nextTarget)) {\r\n return compareRefTargets(target, nextTarget);\r\n }\r\n return true;\r\n }\r\n return false;\r\n });\r\n}\r\nvar InitialMoveable = /*#__PURE__*/ (function (_super) {\r\n __extends(InitialMoveable, _super);\r\n function InitialMoveable() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.refTargets = [];\r\n _this.selectorMap = {};\r\n _this._differ = new ChildrenDiffer();\r\n _this._elementTargets = [];\r\n _this._tmpRefTargets = [];\r\n _this._tmpSelectorMap = {};\r\n _this._onChangeTargets = null;\r\n return _this;\r\n }\r\n InitialMoveable.makeStyled = function () {\r\n var cssMap = {};\r\n var ables = this.getTotalAbles();\r\n ables.forEach(function (_a) {\r\n var css = _a.css;\r\n if (!css) {\r\n return;\r\n }\r\n css.forEach(function (text) {\r\n cssMap[text] = true;\r\n });\r\n });\r\n var style = getKeys(cssMap).join(\"\\n\");\r\n this.defaultStyled = styled(\"div\", prefixCSS(PREFIX, MOVEABLE_CSS + style));\r\n };\r\n InitialMoveable.getTotalAbles = function () {\r\n return __spreadArray([Default, Groupable, IndividualGroupable, DragArea], __read(this.defaultAbles), false);\r\n };\r\n InitialMoveable.prototype.render = function () {\r\n var _a;\r\n var moveableContructor = this.constructor;\r\n if (!moveableContructor.defaultStyled) {\r\n moveableContructor.makeStyled();\r\n }\r\n var _b = this.props, userAbles = _b.ables, userProps = _b.props, props = __rest(_b, [\"ables\", \"props\"]);\r\n var _c = __read(this._updateRefs(true), 2), refTargets = _c[0], nextSelectorMap = _c[1];\r\n var elementTargets = getElementTargets(refTargets, nextSelectorMap);\r\n var isGroup = elementTargets.length > 1;\r\n var totalAbles = moveableContructor.getTotalAbles();\r\n var ables = __spreadArray(__spreadArray([], __read(totalAbles), false), __read((userAbles || [])), false);\r\n var nextProps = __assign(__assign(__assign({}, props), (userProps || {})), { ables: ables, cssStyled: moveableContructor.defaultStyled, customStyledMap: moveableContructor.customStyledMap });\r\n this._elementTargets = elementTargets;\r\n var firstRenderState = null;\r\n var prevMoveable = this.moveable;\r\n var persistData = props.persistData;\r\n if (persistData === null || persistData === void 0 ? void 0 : persistData.children) {\r\n isGroup = true;\r\n }\r\n // Even one child is treated as a group if individualGroupable is enabled. #867\r\n if (props.individualGroupable) {\r\n return React.createElement(MoveableIndividualGroup, __assign({ key: \"individual-group\", ref: ref(this, \"moveable\") }, nextProps, { target: null, targets: elementTargets }));\r\n }\r\n if (isGroup) {\r\n var targetGroups = getTargetGroups(refTargets, nextSelectorMap);\r\n // manager\r\n if (prevMoveable && !prevMoveable.props.groupable && !prevMoveable.props.individualGroupable) {\r\n var target = prevMoveable.props.target;\r\n if (target && elementTargets.indexOf(target) > -1) {\r\n firstRenderState = __assign({}, prevMoveable.state);\r\n }\r\n }\r\n return React.createElement(MoveableGroup, __assign({ key: \"group\", ref: ref(this, \"moveable\") }, nextProps, (_a = props.groupableProps) !== null && _a !== void 0 ? _a : {}, { target: null, targets: elementTargets, targetGroups: targetGroups, firstRenderState: firstRenderState }));\r\n }\r\n else {\r\n var target_1 = elementTargets[0];\r\n // manager\r\n if (prevMoveable && (prevMoveable.props.groupable || prevMoveable.props.individualGroupable)) {\r\n var moveables = prevMoveable.moveables || [];\r\n var prevTargetMoveable = find(moveables, function (mv) { return mv.props.target === target_1; });\r\n if (prevTargetMoveable) {\r\n firstRenderState = __assign({}, prevTargetMoveable.state);\r\n }\r\n }\r\n return React.createElement(MoveableManager, __assign({ key: \"single\", ref: ref(this, \"moveable\") }, nextProps, { target: target_1, firstRenderState: firstRenderState }));\r\n }\r\n };\r\n InitialMoveable.prototype.componentDidMount = function () {\r\n this._checkChangeTargets();\r\n };\r\n InitialMoveable.prototype.componentDidUpdate = function () {\r\n this._checkChangeTargets();\r\n };\r\n InitialMoveable.prototype.componentWillUnmount = function () {\r\n this.selectorMap = {};\r\n this.refTargets = [];\r\n };\r\n /**\r\n * Get targets set in moveable through target or targets of props.\r\n * @method Moveable#getTargets\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: [targetRef, \".target\", document.querySelectorAll(\".target\")],\r\n * });\r\n *\r\n * console.log(moveable.getTargets());\r\n */\r\n InitialMoveable.prototype.getTargets = function () {\r\n var _a, _b;\r\n return (_b = (_a = this.moveable) === null || _a === void 0 ? void 0 : _a.getTargets()) !== null && _b !== void 0 ? _b : [];\r\n };\r\n /**\r\n * If the element list corresponding to the selector among the targets is changed, it is updated.\r\n * @method Moveable#updateSelectors\r\n * @example\r\n * import Moveable from \"moveable\";\r\n *\r\n * const moveable = new Moveable(document.body, {\r\n * target: \".target\",\r\n * });\r\n *\r\n * moveable.updateSelectors();\r\n */\r\n InitialMoveable.prototype.updateSelectors = function () {\r\n this.selectorMap = {};\r\n this._updateRefs();\r\n this.forceUpdate();\r\n };\r\n /**\r\n * User changes target and waits for target to change.\r\n * @method Moveable#waitToChangeTarget\r\n * @story combination-with-other-components--components-selecto\r\n * @example\r\n * document.querySelector(\".target\").addEventListener(\"mousedown\", e => {\r\n * moveable.waitToChangeTarget().then(() => {\r\n * moveable.dragStart(e, e.currentTarget);\r\n * });\r\n * moveable.target = e.currentTarget;\r\n * });\r\n */\r\n InitialMoveable.prototype.waitToChangeTarget = function () {\r\n // let resolvePromise: (e: OnChangeTarget) => void;\r\n var _this = this;\r\n // this._onChangeTargets = () => {\r\n // this._onChangeTargets = null;\r\n // resolvePromise({\r\n // moveable: this.getManager(),\r\n // targets: this._elementTargets,\r\n // });\r\n // };\r\n // return new Promise<OnChangeTarget>(resolve => {\r\n // resolvePromise = resolve;\r\n // });\r\n var resolvePromise;\r\n this._onChangeTargets = function () {\r\n _this._onChangeTargets = null;\r\n resolvePromise();\r\n };\r\n return new Promise(function (resolve) {\r\n resolvePromise = resolve;\r\n });\r\n };\r\n InitialMoveable.prototype.waitToChangeTargets = function () {\r\n return this.waitToChangeTarget();\r\n };\r\n InitialMoveable.prototype.getManager = function () {\r\n return this.moveable;\r\n };\r\n InitialMoveable.prototype.getMoveables = function () {\r\n return this.moveable.getMoveables();\r\n };\r\n InitialMoveable.prototype.getDragElement = function () {\r\n return this.moveable.getDragElement();\r\n };\r\n InitialMoveable.prototype._updateRefs = function (isRender) {\r\n var prevRefTargets = this.refTargets;\r\n var nextRefTargets = getRefTargets((this.props.target || this.props.targets));\r\n var isBrowser = typeof document !== \"undefined\";\r\n var isUpdate = compareRefTargets(prevRefTargets, nextRefTargets);\r\n var selectorMap = this.selectorMap;\r\n var nextSelectorMap = {};\r\n this.refTargets.forEach(function updateSelectorMap(target) {\r\n if (isString(target)) {\r\n var selectorTarget = selectorMap[target];\r\n if (selectorTarget) {\r\n nextSelectorMap[target] = selectorMap[target];\r\n }\r\n else if (isBrowser) {\r\n isUpdate = true;\r\n nextSelectorMap[target] = [].slice.call(document.querySelectorAll(target));\r\n }\r\n }\r\n else if (isArray(target)) {\r\n target.forEach(updateSelectorMap);\r\n }\r\n });\r\n this._tmpRefTargets = nextRefTargets;\r\n this._tmpSelectorMap = nextSelectorMap;\r\n return [\r\n nextRefTargets,\r\n nextSelectorMap,\r\n !isRender && isUpdate,\r\n ];\r\n };\r\n InitialMoveable.prototype._checkChangeTargets = function () {\r\n var _a, _b, _c;\r\n this.refTargets = this._tmpRefTargets;\r\n this.selectorMap = this._tmpSelectorMap;\r\n var _d = this._differ.update(this._elementTargets), added = _d.added, removed = _d.removed;\r\n var isTargetChanged = added.length || removed.length;\r\n if (isTargetChanged) {\r\n (_b = (_a = this.props).onChangeTargets) === null || _b === void 0 ? void 0 : _b.call(_a, {\r\n moveable: this.moveable,\r\n targets: this._elementTargets,\r\n });\r\n (_c = this._onChangeTargets) === null || _c === void 0 ? void 0 : _c.call(this);\r\n }\r\n var _e = __read(this._updateRefs(), 3), refTargets = _e[0], selectorMap = _e[1], isUpdate = _e[2];\r\n this.refTargets = refTargets;\r\n this.selectorMap = selectorMap;\r\n if (isUpdate) {\r\n this.forceUpdate();\r\n }\r\n };\r\n InitialMoveable.defaultAbles = [];\r\n InitialMoveable.customStyledMap = {};\r\n InitialMoveable.defaultStyled = null;\r\n __decorate([\r\n withMethods(MOVEABLE_METHODS)\r\n ], InitialMoveable.prototype, \"moveable\", void 0);\r\n return InitialMoveable;\r\n}(React.PureComponent));\n\nvar Moveable = /*#__PURE__*/ (function (_super) {\r\n __extends(Moveable, _super);\r\n function Moveable() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n Moveable.defaultAbles = MOVEABLE_ABLES;\r\n return Moveable;\r\n}(InitialMoveable));\n\nfunction makeMoveable(ables) {\r\n var _a;\r\n return _a = /*#__PURE__*/ (function (_super) {\r\n __extends(Moveable, _super);\r\n function Moveable() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n return Moveable;\r\n }(InitialMoveable)),\r\n _a.defaultAbles = ables,\r\n _a;\r\n}\n\nexport { Clippable, DIRECTIONS, Draggable, edgeDraggable as EdgeDraggable, InitialMoveable, MOVEABLE_ABLES, MOVEABLE_EVENTS, MOVEABLE_METHODS, MOVEABLE_PROPS, Pinchable, Resizable, Rotatable, Roundable, Scalable, Snappable, Warpable, calculateElementPosition, Moveable as default, getElementInfo, makeAble, makeMoveable };\n","/*\nCopyright (c) 2019 Daybrush\nname: moveable\nlicense: MIT\nauthor: Daybrush\nrepository: https://github.com/daybrush/moveable/blob/master/packages/moveable\nversion: 0.53.0\n*/\nimport { ref, Properties } from 'framework-utils';\nimport * as React from 'croact';\nimport { renderSelf } from 'croact';\nimport Moveable$1, { MOVEABLE_PROPS, MOVEABLE_METHODS, MOVEABLE_EVENTS, getElementInfo as getElementInfo$1, makeAble as makeAble$1 } from 'croact-moveable';\nimport { camelize, getDocument, isArray } from '@daybrush/utils';\nimport EventEmitter from '@scena/event-emitter';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\n\nvar InnerMoveable = /*#__PURE__*/function (_super) {\n __extends(InnerMoveable, _super);\n\n function InnerMoveable(props) {\n var _this = _super.call(this, props) || this;\n\n _this.state = {};\n _this.state = _this.props;\n return _this;\n }\n\n var __proto = InnerMoveable.prototype;\n\n __proto.render = function () {\n return React.createElement(Moveable$1, __assign({\n ref: ref(this, \"moveable\")\n }, this.state));\n };\n\n return InnerMoveable;\n}(React.Component);\n\nvar PROPERTIES = MOVEABLE_PROPS;\nvar METHODS = MOVEABLE_METHODS;\nvar EVENTS = MOVEABLE_EVENTS;\n\n/**\r\n * Moveable is Draggable! Resizable! Scalable! Rotatable!\r\n * @sort 1\r\n * @alias Moveable\r\n * @extends EventEmitter\r\n */\n\nvar MoveableManager = /*#__PURE__*/function (_super) {\n __extends(MoveableManager, _super);\n /**\r\n *\r\n */\n\n\n function MoveableManager(parentElement, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _this = _super.call(this) || this;\n\n _this.containerProvider = null;\n _this.selfElement = null;\n _this._warp = false;\n\n var nextOptions = __assign({}, options);\n\n var events = {};\n EVENTS.forEach(function (name) {\n events[camelize(\"on \".concat(name))] = function (e) {\n return _this.trigger(name, e);\n };\n });\n var selfElement;\n\n if (options.warpSelf) {\n delete options.warpSelf;\n _this._warp = true;\n selfElement = parentElement;\n } else {\n selfElement = getDocument(parentElement).createElement(\"div\");\n parentElement.appendChild(selfElement);\n }\n\n _this.containerProvider = renderSelf(React.createElement(InnerMoveable, __assign({\n ref: ref(_this, \"innerMoveable\")\n }, nextOptions, events)), selfElement);\n _this.selfElement = selfElement;\n var target = nextOptions.target;\n\n if (isArray(target) && target.length > 1) {\n _this.updateRect();\n }\n\n return _this;\n }\n\n var __proto = MoveableManager.prototype;\n\n __proto.setState = function (state, callback) {\n this.innerMoveable.setState(state, callback);\n };\n\n __proto.forceUpdate = function (callback) {\n this.innerMoveable.forceUpdate(callback);\n };\n\n __proto.dragStart = function (e, target) {\n if (target === void 0) {\n target = e.target;\n }\n\n var innerMoveable = this.innerMoveable;\n\n if (innerMoveable.$_timer) {\n this.forceUpdate();\n }\n\n this.getMoveable().dragStart(e, target);\n };\n\n __proto.destroy = function () {\n var _a;\n\n var selfElement = this.selfElement;\n renderSelf(null, selfElement, this.containerProvider);\n\n if (!this._warp) {\n (_a = selfElement === null || selfElement === void 0 ? void 0 : selfElement.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(selfElement);\n }\n\n this.containerProvider = null;\n this.off();\n this.selfElement = null;\n this.innerMoveable = null;\n };\n\n __proto.getMoveable = function () {\n return this.innerMoveable.moveable;\n };\n\n MoveableManager = __decorate([Properties(METHODS, function (prototype, property) {\n if (prototype[property]) {\n return;\n }\n\n prototype[property] = function () {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n var self = this.getMoveable();\n\n if (!self || !self[property]) {\n return;\n }\n\n return self[property].apply(self, args);\n };\n }), Properties(PROPERTIES, function (prototype, property) {\n Object.defineProperty(prototype, property, {\n get: function () {\n return this.getMoveable().props[property];\n },\n set: function (value) {\n var _a;\n\n this.setState((_a = {}, _a[property] = value, _a));\n },\n enumerable: true,\n configurable: true\n });\n })], MoveableManager);\n return MoveableManager;\n}(EventEmitter);\n\nvar Moveable = /*#__PURE__*/function (_super) {\n __extends(Moveable, _super);\n\n function Moveable() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n return Moveable;\n}(MoveableManager);\n\nfunction getElementInfo(target, container, rootContainer) {\n return getElementInfo$1(target, container, rootContainer);\n}\nfunction makeAble(name, able) {\n return makeAble$1(name, able);\n}\n\nexport { EVENTS, METHODS, PROPERTIES, Moveable as default, getElementInfo, makeAble };\n//# sourceMappingURL=moveable.esm.js.map\n","/*\nCopyright (c) Daybrush\nname: keycon\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/keycon.git\nversion: 1.2.2\n*/\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n };\n\n return extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\n/*\nCopyright (c) 2018 Daybrush\n@name: @daybrush/utils\nlicense: MIT\nauthor: Daybrush\nrepository: https://github.com/daybrush/utils\n@version 1.7.1\n*/\n/**\n* get string \"object\"\n* @memberof Consts\n* @example\nimport {OBJECT} from \"@daybrush/utils\";\n\nconsole.log(OBJECT); // \"object\"\n*/\n\nvar OBJECT = \"object\";\n/**\n* get string \"string\"\n* @memberof Consts\n* @example\nimport {STRING} from \"@daybrush/utils\";\n\nconsole.log(STRING); // \"string\"\n*/\n\nvar STRING = \"string\";\n/**\n* Check the type that the value is object.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isObject} from \"@daybrush/utils\";\n\nconsole.log(isObject({})); // true\nconsole.log(isObject(undefined)); // false\nconsole.log(isObject(\"\")); // false\nconsole.log(isObject(null)); // false\n*/\n\nfunction isObject(value) {\n return value && typeof value === OBJECT;\n}\n/**\n* Check the type that the value is isArray.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isArray} from \"@daybrush/utils\";\n\nconsole.log(isArray([])); // true\nconsole.log(isArray({})); // false\nconsole.log(isArray(undefined)); // false\nconsole.log(isArray(null)); // false\n*/\n\nfunction isArray(value) {\n return Array.isArray(value);\n}\n/**\n* Check the type that the value is string.\n* @memberof Utils\n* @param {string} value - Value to check the type\n* @return {} true if the type is correct, false otherwise\n* @example\nimport {isString} from \"@daybrush/utils\";\n\nconsole.log(isString(\"1234\")); // true\nconsole.log(isString(undefined)); // false\nconsole.log(isString(1)); // false\nconsole.log(isString(null)); // false\n*/\n\nfunction isString(value) {\n return typeof value === STRING;\n}\n/**\n* Returns the index of the first element in the array that satisfies the provided testing function.\n* @function\n* @memberof CrossBrowser\n* @param - The array `findIndex` was called upon.\n* @param - A function to execute on each value in the array until the function returns true, indicating that the satisfying element was found.\n* @param - Returns defaultIndex if not found by the function.\n* @example\nimport { findIndex } from \"@daybrush/utils\";\n\nfindIndex([{a: 1}, {a: 2}, {a: 3}, {a: 4}], ({ a }) => a === 2); // 1\n*/\n\nfunction findIndex(arr, callback, defaultIndex) {\n if (defaultIndex === void 0) {\n defaultIndex = -1;\n }\n\n var length = arr.length;\n\n for (var i = 0; i < length; ++i) {\n if (callback(arr[i], i, arr)) {\n return i;\n }\n }\n\n return defaultIndex;\n}\n/**\n* Sets up a function that will be called whenever the specified event is delivered to the target\n* @memberof DOM\n* @param - event target\n* @param - A case-sensitive string representing the event type to listen for.\n* @param - The object which receives a notification (an object that implements the Event interface) when an event of the specified type occurs\n* @param - An options object that specifies characteristics about the event listener.\n* @example\nimport {addEvent} from \"@daybrush/utils\";\n\naddEvent(el, \"click\", e => {\n console.log(e);\n});\n*/\n\nfunction addEvent(el, type, listener, options) {\n el.addEventListener(type, listener, options);\n}\n/**\n* removes from the EventTarget an event listener previously registered with EventTarget.addEventListener()\n* @memberof DOM\n* @param - event target\n* @param - A case-sensitive string representing the event type to listen for.\n* @param - The EventListener function of the event handler to remove from the event target.\n* @param - An options object that specifies characteristics about the event listener.\n* @example\nimport {addEvent, removeEvent} from \"@daybrush/utils\";\nconst listener = e => {\n console.log(e);\n};\naddEvent(el, \"click\", listener);\nremoveEvent(el, \"click\", listener);\n*/\n\nfunction removeEvent(el, type, listener, options) {\n el.removeEventListener(type, listener, options);\n}\n\n/*\nCopyright (c) 2019 Daybrush\nname: @scena/event-emitter\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/gesture.git\nversion: 1.0.5\n*/\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\nvar __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j];\n\n return r;\n}\n\n/**\n * Implement EventEmitter on object or component.\n */\n\nvar EventEmitter =\n/*#__PURE__*/\nfunction () {\n function EventEmitter() {\n this._events = {};\n }\n /**\n * Add a listener to the registered event.\n * @param - Name of the event to be added\n * @param - listener function of the event to be added\n * @example\n * import EventEmitter from \"@scena/event-emitter\";\n * cosnt emitter = new EventEmitter();\n *\n * // Add listener in \"a\" event\n * emitter.on(\"a\", () => {\n * });\n * // Add listeners\n * emitter.on({\n * a: () => {},\n * b: () => {},\n * });\n */\n\n\n var __proto = EventEmitter.prototype;\n\n __proto.on = function (eventName, listener) {\n if (isObject(eventName)) {\n for (var name in eventName) {\n this.on(name, eventName[name]);\n }\n } else {\n this._addEvent(eventName, listener, {});\n }\n\n return this;\n };\n /**\n * Remove listeners registered in the event target.\n * @param - Name of the event to be removed\n * @param - listener function of the event to be removed\n * @example\n * import EventEmitter from \"@scena/event-emitter\";\n * cosnt emitter = new EventEmitter();\n *\n * // Remove all listeners.\n * emitter.off();\n *\n * // Remove all listeners in \"A\" event.\n * emitter.off(\"a\");\n *\n *\n * // Remove \"listener\" listener in \"a\" event.\n * emitter.off(\"a\", listener);\n */\n\n\n __proto.off = function (eventName, listener) {\n if (!eventName) {\n this._events = {};\n } else if (isObject(eventName)) {\n for (var name in eventName) {\n this.off(name);\n }\n } else if (!listener) {\n this._events[eventName] = [];\n } else {\n var events = this._events[eventName];\n\n if (events) {\n var index = findIndex(events, function (e) {\n return e.listener === listener;\n });\n\n if (index > -1) {\n events.splice(index, 1);\n }\n }\n }\n\n return this;\n };\n /**\n * Add a disposable listener and Use promise to the registered event.\n * @param - Name of the event to be added\n * @param - disposable listener function of the event to be added\n * @example\n * import EventEmitter from \"@scena/event-emitter\";\n * cosnt emitter = new EventEmitter();\n *\n * // Add a disposable listener in \"a\" event\n * emitter.once(\"a\", () => {\n * });\n *\n * // Use Promise\n * emitter.once(\"a\").then(e => {\n * });\n */\n\n\n __proto.once = function (eventName, listener) {\n var _this = this;\n\n if (listener) {\n this._addEvent(eventName, listener, {\n once: true\n });\n }\n\n return new Promise(function (resolve) {\n _this._addEvent(eventName, resolve, {\n once: true\n });\n });\n };\n /**\n * Fires an event to call listeners.\n * @param - Event name\n * @param - Event parameter\n * @return If false, stop the event.\n * @example\n *\n * import EventEmitter from \"@scena/event-emitter\";\n *\n *\n * const emitter = new EventEmitter();\n *\n * emitter.on(\"a\", e => {\n * });\n *\n *\n * emitter.emit(\"a\", {\n * a: 1,\n * });\n */\n\n\n __proto.emit = function (eventName, param) {\n var _this = this;\n\n if (param === void 0) {\n param = {};\n }\n\n var events = this._events[eventName];\n\n if (!eventName || !events) {\n return true;\n }\n\n var isStop = false;\n param.eventType = eventName;\n\n param.stop = function () {\n isStop = true;\n };\n\n param.currentTarget = this;\n\n __spreadArrays(events).forEach(function (info) {\n info.listener(param);\n\n if (info.once) {\n _this.off(eventName, info.listener);\n }\n });\n\n return !isStop;\n };\n /**\n * Fires an event to call listeners.\n * @param - Event name\n * @param - Event parameter\n * @return If false, stop the event.\n * @example\n *\n * import EventEmitter from \"@scena/event-emitter\";\n *\n *\n * const emitter = new EventEmitter();\n *\n * emitter.on(\"a\", e => {\n * });\n *\n *\n * emitter.emit(\"a\", {\n * a: 1,\n * });\n */\n\n /**\n * Fires an event to call listeners.\n * @param - Event name\n * @param - Event parameter\n * @return If false, stop the event.\n * @example\n *\n * import EventEmitter from \"@scena/event-emitter\";\n *\n *\n * const emitter = new EventEmitter();\n *\n * emitter.on(\"a\", e => {\n * });\n *\n * // emit\n * emitter.trigger(\"a\", {\n * a: 1,\n * });\n */\n\n\n __proto.trigger = function (eventName, param) {\n if (param === void 0) {\n param = {};\n }\n\n return this.emit(eventName, param);\n };\n\n __proto._addEvent = function (eventName, listener, options) {\n var events = this._events;\n events[eventName] = events[eventName] || [];\n var listeners = events[eventName];\n listeners.push(__assign({\n listener: listener\n }, options));\n };\n\n return EventEmitter;\n}();\n\nfunction createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n}\n\nvar keycode = createCommonjsModule(function (module, exports) {\n// Source: http://jsfiddle.net/vWx8V/\n// http://stackoverflow.com/questions/5603195/full-list-of-javascript-keycodes\n\n/**\n * Conenience method returns corresponding value for given keyName or keyCode.\n *\n * @param {Mixed} keyCode {Number} or keyName {String}\n * @return {Mixed}\n * @api public\n */\n\nfunction keyCode(searchInput) {\n // Keyboard Events\n if (searchInput && 'object' === typeof searchInput) {\n var hasKeyCode = searchInput.which || searchInput.keyCode || searchInput.charCode;\n if (hasKeyCode) searchInput = hasKeyCode;\n }\n\n // Numbers\n if ('number' === typeof searchInput) return names[searchInput]\n\n // Everything else (cast to string)\n var search = String(searchInput);\n\n // check codes\n var foundNamedKey = codes[search.toLowerCase()];\n if (foundNamedKey) return foundNamedKey\n\n // check aliases\n var foundNamedKey = aliases[search.toLowerCase()];\n if (foundNamedKey) return foundNamedKey\n\n // weird character?\n if (search.length === 1) return search.charCodeAt(0)\n\n return undefined\n}\n\n/**\n * Compares a keyboard event with a given keyCode or keyName.\n *\n * @param {Event} event Keyboard event that should be tested\n * @param {Mixed} keyCode {Number} or keyName {String}\n * @return {Boolean}\n * @api public\n */\nkeyCode.isEventKey = function isEventKey(event, nameOrCode) {\n if (event && 'object' === typeof event) {\n var keyCode = event.which || event.keyCode || event.charCode;\n if (keyCode === null || keyCode === undefined) { return false; }\n if (typeof nameOrCode === 'string') {\n // check codes\n var foundNamedKey = codes[nameOrCode.toLowerCase()];\n if (foundNamedKey) { return foundNamedKey === keyCode; }\n \n // check aliases\n var foundNamedKey = aliases[nameOrCode.toLowerCase()];\n if (foundNamedKey) { return foundNamedKey === keyCode; }\n } else if (typeof nameOrCode === 'number') {\n return nameOrCode === keyCode;\n }\n return false;\n }\n};\n\nexports = module.exports = keyCode;\n\n/**\n * Get by name\n *\n * exports.code['enter'] // => 13\n */\n\nvar codes = exports.code = exports.codes = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'ctrl': 17,\n 'alt': 18,\n 'pause/break': 19,\n 'caps lock': 20,\n 'esc': 27,\n 'space': 32,\n 'page up': 33,\n 'page down': 34,\n 'end': 35,\n 'home': 36,\n 'left': 37,\n 'up': 38,\n 'right': 39,\n 'down': 40,\n 'insert': 45,\n 'delete': 46,\n 'command': 91,\n 'left command': 91,\n 'right command': 93,\n 'numpad *': 106,\n 'numpad +': 107,\n 'numpad -': 109,\n 'numpad .': 110,\n 'numpad /': 111,\n 'num lock': 144,\n 'scroll lock': 145,\n 'my computer': 182,\n 'my calculator': 183,\n ';': 186,\n '=': 187,\n ',': 188,\n '-': 189,\n '.': 190,\n '/': 191,\n '`': 192,\n '[': 219,\n '\\\\': 220,\n ']': 221,\n \"'\": 222\n};\n\n// Helper aliases\n\nvar aliases = exports.aliases = {\n 'windows': 91,\n '⇧': 16,\n '⌥': 18,\n '⌃': 17,\n '⌘': 91,\n 'ctl': 17,\n 'control': 17,\n 'option': 18,\n 'pause': 19,\n 'break': 19,\n 'caps': 20,\n 'return': 13,\n 'escape': 27,\n 'spc': 32,\n 'spacebar': 32,\n 'pgup': 33,\n 'pgdn': 34,\n 'ins': 45,\n 'del': 46,\n 'cmd': 91\n};\n\n/*!\n * Programatically add the following\n */\n\n// lower case chars\nfor (i = 97; i < 123; i++) codes[String.fromCharCode(i)] = i - 32;\n\n// numbers\nfor (var i = 48; i < 58; i++) codes[i - 48] = i;\n\n// function keys\nfor (i = 1; i < 13; i++) codes['f'+i] = i + 111;\n\n// numpad keys\nfor (i = 0; i < 10; i++) codes['numpad '+i] = i + 96;\n\n/**\n * Get by code\n *\n * exports.name[13] // => 'Enter'\n */\n\nvar names = exports.names = exports.title = {}; // title for backward compat\n\n// Create reverse mapping\nfor (i in codes) names[codes[i]] = i;\n\n// Add aliases\nfor (var alias in aliases) {\n codes[alias] = aliases[alias];\n}\n});\nvar keycode_1 = keycode.code;\nvar keycode_2 = keycode.codes;\nvar keycode_3 = keycode.aliases;\nvar keycode_4 = keycode.names;\nvar keycode_5 = keycode.title;\n\nvar codeData = {\n \"+\": \"plus\",\n \"left command\": \"meta\",\n \"right command\": \"meta\"\n};\nvar keysSort = {\n shift: 1,\n ctrl: 2,\n alt: 3,\n meta: 4\n};\n/**\n * @memberof KeyController\n */\n\nfunction getKey(keyCode, keyName) {\n var key = (keycode_4[keyCode] || keyName || \"\").toLowerCase();\n\n for (var name in codeData) {\n key = key.replace(name, codeData[name]);\n }\n\n return key.replace(/\\s/g, \"\");\n}\n/**\n * @memberof KeyController\n */\n\nfunction getCombi(e, key) {\n if (key === void 0) {\n key = getKey(e.keyCode, e.key);\n }\n\n var keys = getModifierCombi(e);\n keys.indexOf(key) === -1 && keys.push(key);\n return keys.filter(Boolean);\n}\n/**\n * @memberof KeyController\n */\n\nfunction getModifierCombi(e) {\n var keys = [e.shiftKey && \"shift\", e.ctrlKey && \"ctrl\", e.altKey && \"alt\", e.metaKey && \"meta\"];\n return keys.filter(Boolean);\n}\n\nfunction getArrangeCombi(keys) {\n var arrangeKeys = keys.slice();\n arrangeKeys.sort(function (prev, next) {\n var prevScore = keysSort[prev] || 5;\n var nextScore = keysSort[next] || 5;\n return prevScore - nextScore;\n });\n return arrangeKeys;\n}\n\nvar globalKeyController;\n/**\n */\n\nvar KeyController =\n/*#__PURE__*/\nfunction (_super) {\n __extends(KeyController, _super);\n /**\n *\n */\n\n\n function KeyController(container) {\n if (container === void 0) {\n container = window;\n }\n\n var _this = _super.call(this) || this;\n\n _this.container = container;\n /**\n */\n\n _this.ctrlKey = false;\n /**\n */\n\n _this.altKey = false;\n /**\n *\n */\n\n _this.shiftKey = false;\n /**\n *\n */\n\n _this.metaKey = false;\n\n _this.clear = function () {\n _this.ctrlKey = false;\n _this.altKey = false;\n _this.shiftKey = false;\n _this.metaKey = false;\n return _this;\n };\n\n _this.keydownEvent = function (e) {\n _this.triggerEvent(\"keydown\", e);\n };\n\n _this.keyupEvent = function (e) {\n _this.triggerEvent(\"keyup\", e);\n };\n\n _this.blur = function () {\n _this.clear();\n\n _this.trigger(\"blur\");\n };\n\n addEvent(container, \"blur\", _this.blur);\n addEvent(container, \"keydown\", _this.keydownEvent);\n addEvent(container, \"keyup\", _this.keyupEvent);\n return _this;\n }\n\n var __proto = KeyController.prototype;\n Object.defineProperty(KeyController, \"global\", {\n /**\n */\n get: function () {\n return globalKeyController || (globalKeyController = new KeyController());\n },\n enumerable: false,\n configurable: true\n });\n\n KeyController.setGlobal = function () {\n return this.global;\n };\n /**\n *\n */\n\n\n __proto.destroy = function () {\n var container = this.container;\n this.clear();\n this.off();\n removeEvent(container, \"blur\", this.blur);\n removeEvent(container, \"keydown\", this.keydownEvent);\n removeEvent(container, \"keyup\", this.keyupEvent);\n };\n /**\n *\n */\n\n\n __proto.keydown = function (comb, callback) {\n return this.addEvent(\"keydown\", comb, callback);\n };\n /**\n *\n */\n\n\n __proto.offKeydown = function (comb, callback) {\n return this.removeEvent(\"keydown\", comb, callback);\n };\n /**\n *\n */\n\n\n __proto.offKeyup = function (comb, callback) {\n return this.removeEvent(\"keyup\", comb, callback);\n };\n /**\n *\n */\n\n\n __proto.keyup = function (comb, callback) {\n return this.addEvent(\"keyup\", comb, callback);\n };\n\n __proto.addEvent = function (type, comb, callback) {\n if (isArray(comb)) {\n this.on(type + \".\" + getArrangeCombi(comb).join(\".\"), callback);\n } else if (isString(comb)) {\n this.on(type + \".\" + comb, callback);\n } else {\n this.on(type, comb);\n }\n\n return this;\n };\n\n __proto.removeEvent = function (type, comb, callback) {\n if (isArray(comb)) {\n this.off(type + \".\" + getArrangeCombi(comb).join(\".\"), callback);\n } else if (isString(comb)) {\n this.off(type + \".\" + comb, callback);\n } else {\n this.off(type, comb);\n }\n\n return this;\n };\n\n __proto.triggerEvent = function (type, e) {\n this.ctrlKey = e.ctrlKey;\n this.shiftKey = e.shiftKey;\n this.altKey = e.altKey;\n this.metaKey = e.metaKey;\n var key = getKey(e.keyCode, e.key);\n var isToggle = key === \"ctrl\" || key === \"shift\" || key === \"meta\" || key === \"alt\";\n var param = {\n key: key,\n isToggle: isToggle,\n inputEvent: e,\n keyCode: e.keyCode,\n ctrlKey: e.ctrlKey,\n altKey: e.altKey,\n shiftKey: e.shiftKey,\n metaKey: e.metaKey\n };\n this.trigger(type, param);\n this.trigger(type + \".\" + key, param);\n var combi = getCombi(e, key);\n combi.length > 1 && this.trigger(type + \".\" + combi.join(\".\"), param);\n };\n\n return KeyController;\n}(EventEmitter);\n\nexport default KeyController;\nexport { getCombi, getKey, getModifierCombi };\n//# sourceMappingURL=keycon.esm.js.map\n","/*\nCopyright (c) 2020 Daybrush\nname: selecto\nlicense: MIT\nauthor: Daybrush\nrepository: git+https://github.com/daybrush/selecto.git\nversion: 1.26.3\n*/\nimport EventEmitter from '@scena/event-emitter';\nimport Gesto from 'gesto';\nimport { Properties } from 'framework-utils';\nimport { getDocument, hasClass, addClass, calculateBoundSize, getDist, getWindow, isObject, isString, isNode, removeEvent, isFunction, addEvent, isArray, camelize, splitUnit, between } from '@daybrush/utils';\nimport { diff } from '@egjs/children-differ';\nimport DragScroll from '@scena/dragscroll';\nimport KeyController, { getCombi } from 'keycon';\nimport { fitPoints, getOverlapPoints, isInside, getAreaSize } from 'overlap-area';\nimport { createMatrix, getDistElementMatrix, calculateMatrixDist } from 'css-to-mat';\nimport styled from 'css-styled';\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\nvar extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n };\n\n return extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\nvar __assign = function () {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\nfunction __rest(s, e) {\n var t = {};\n\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n}\nfunction __decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,\n d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\nfunction __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nfunction getClient(e) {\n if (\"touches\" in e) {\n var touch = e.touches[0] || e.changedTouches[0];\n return {\n clientX: touch.clientX,\n clientY: touch.clientY\n };\n } else {\n return {\n clientX: e.clientX,\n clientY: e.clientY\n };\n }\n}\nfunction filterDuplicated(arr) {\n if (typeof Map === \"undefined\") {\n return arr.filter(function (value, index) {\n return arr.indexOf(value) === index;\n });\n }\n\n var map = new Map();\n return arr.filter(function (value) {\n if (map.has(value)) {\n return false;\n }\n\n map.set(value, true);\n return true;\n });\n}\nfunction elementFromPoint(baseNode, clientX, clientY) {\n var doc = getDocument(baseNode);\n return doc.elementFromPoint && doc.elementFromPoint(clientX, clientY) || null;\n}\nfunction createElement(jsx, prevTarget, container) {\n var tag = jsx.tag,\n children = jsx.children,\n attributes = jsx.attributes,\n className = jsx.className,\n style = jsx.style;\n var el = prevTarget || getDocument(container).createElement(tag);\n\n for (var name in attributes) {\n el.setAttribute(name, attributes[name]);\n }\n\n var elChildren = el.children;\n children.forEach(function (child, i) {\n createElement(child, elChildren[i], el);\n });\n\n if (className) {\n className.split(/\\s+/g).forEach(function (name) {\n if (name && !hasClass(el, name)) {\n addClass(el, name);\n }\n });\n }\n\n if (style) {\n var elStyle = el.style;\n\n for (var name in style) {\n elStyle[name] = style[name];\n }\n }\n\n if (!prevTarget && container) {\n container.appendChild(el);\n }\n\n return el;\n}\nfunction h(tag, attrs) {\n var children = [];\n\n for (var _i = 2; _i < arguments.length; _i++) {\n children[_i - 2] = arguments[_i];\n }\n\n var _a = attrs || {},\n _b = _a.className,\n className = _b === void 0 ? \"\" : _b,\n _c = _a.style,\n style = _c === void 0 ? {} : _c,\n attributes = __rest(_a, [\"className\", \"style\"]);\n\n return {\n tag: tag,\n className: className,\n style: style,\n attributes: attributes,\n children: children\n };\n}\nfunction diffValue(prev, cur, func) {\n if (prev !== cur) {\n func(prev, cur);\n }\n}\nfunction getRect(e, ratio, boundArea) {\n var _a;\n\n if (boundArea === void 0) {\n boundArea = e.data.boundArea;\n }\n\n var _b = e.distX,\n distX = _b === void 0 ? 0 : _b,\n _c = e.distY,\n distY = _c === void 0 ? 0 : _c;\n var _d = e.data,\n startX = _d.startX,\n startY = _d.startY;\n\n if (ratio > 0) {\n var nextHeight = Math.sqrt((distX * distX + distY * distY) / (1 + ratio * ratio));\n var nextWidth = ratio * nextHeight;\n distX = (distX >= 0 ? 1 : -1) * nextWidth;\n distY = (distY >= 0 ? 1 : -1) * nextHeight;\n }\n\n var width = Math.abs(distX);\n var height = Math.abs(distY);\n var maxWidth = distX < 0 ? startX - boundArea.left : boundArea.right - startX;\n var maxHeight = distY < 0 ? startY - boundArea.top : boundArea.bottom - startY;\n _a = calculateBoundSize([width, height], [0, 0], [maxWidth, maxHeight], !!ratio), width = _a[0], height = _a[1];\n distX = (distX >= 0 ? 1 : -1) * width;\n distY = (distY >= 0 ? 1 : -1) * height;\n var tx = Math.min(0, distX);\n var ty = Math.min(0, distY);\n var left = startX + tx;\n var top = startY + ty;\n return {\n left: left,\n top: top,\n right: left + width,\n bottom: top + height,\n width: width,\n height: height\n };\n}\nfunction getDefaultElementRect(el) {\n var rect = el.getBoundingClientRect();\n var left = rect.left,\n top = rect.top,\n width = rect.width,\n height = rect.height;\n return {\n pos1: [left, top],\n pos2: [left + width, top],\n pos3: [left, top + height],\n pos4: [left + width, top + height]\n };\n}\nfunction passTargets(beforeTargets, afterTargets, continueSelectWithoutDeselect) {\n var _a = diff(beforeTargets, afterTargets),\n list = _a.list,\n prevList = _a.prevList,\n added = _a.added,\n removed = _a.removed,\n maintained = _a.maintained;\n\n return __spreadArray(__spreadArray(__spreadArray([], added.map(function (index) {\n return list[index];\n }), true), removed.map(function (index) {\n return prevList[index];\n }), true), continueSelectWithoutDeselect ? maintained.map(function (_a) {\n var nextIndex = _a[1];\n return list[nextIndex];\n }) : [], true);\n}\nfunction getLineSize(points) {\n var size = 0;\n var length = points.length;\n\n for (var i = 1; i < length; ++i) {\n size = Math.max(getDist(points[i], points[i - 1]), size);\n }\n\n return size;\n}\n\nvar injector = styled(\"\\n:host {\\n position: fixed;\\n display: none;\\n border: 1px solid #4af;\\n background: rgba(68, 170, 255, 0.5);\\n pointer-events: none;\\n will-change: transform;\\n z-index: 100;\\n}\\n\");\n/**\n * @memberof Selecto\n */\n\nvar CLASS_NAME = \"selecto-selection \".concat(injector.className);\nvar PROPERTIES = [\"className\", \"boundContainer\", \"selectableTargets\", \"selectByClick\", \"selectFromInside\", \"continueSelect\", \"continueSelectWithoutDeselect\", \"toggleContinueSelect\", \"toggleContinueSelectWithoutDeselect\", \"keyContainer\", \"hitRate\", \"scrollOptions\", \"checkInput\", \"preventDefault\", \"ratio\", \"getElementRect\", \"preventDragFromInside\", \"rootContainer\", \"dragCondition\", \"clickBySelectEnd\", \"checkOverflow\", \"innerScrollOptions\"];\n/**\n * @memberof Selecto\n */\n\nvar OPTIONS = __spreadArray([// ignore target, container,\n\"dragContainer\", \"cspNonce\", \"preventClickEventOnDrag\", \"preventClickEventOnDragStart\", \"preventRightClick\"], PROPERTIES, true);\nvar OPTION_TYPES = {\n className: String,\n boundContainer: null,\n portalContainer: null,\n container: null,\n dragContainer: null,\n selectableTargets: Array,\n selectByClick: Boolean,\n selectFromInside: Boolean,\n continueSelect: Boolean,\n toggleContinueSelect: Array,\n toggleContinueSelectWithoutDeselect: Array,\n keyContainer: null,\n hitRate: Number,\n scrollOptions: Object,\n checkInput: Boolean,\n preventDefault: Boolean,\n cspNonce: String,\n ratio: Number,\n getElementRect: Function,\n preventDragFromInside: Boolean,\n rootContainer: Object,\n dragCondition: Function,\n clickBySelectEnd: Boolean,\n continueSelectWithoutDeselect: Boolean,\n preventClickEventOnDragStart: Boolean,\n preventClickEventOnDrag: Boolean,\n checkOverflow: Boolean,\n innerScrollOptions: Object\n};\n/**\n * @memberof Selecto\n */\n\nvar EVENTS = [\"dragStart\", \"drag\", \"dragEnd\", \"selectStart\", \"select\", \"selectEnd\", \"keydown\", \"keyup\", \"scroll\", \"innerScroll\"];\n/**\n * @memberof Selecto\n */\n\nvar METHODS = [\"clickTarget\", \"getSelectableElements\", \"setSelectedTargets\", \"getElementPoints\", \"getSelectedTargets\", \"findSelectableTargets\", \"triggerDragStart\", \"checkScroll\", \"selectTargetsByPoints\", \"setSelectedTargetsByPoints\"];\n\n/**\n * Selecto.js is a component that allows you to select elements in the drag area using the mouse or touch.\n * @sort 1\n * @extends EventEmitter\n */\n\nvar Selecto =\n/*#__PURE__*/\nfunction (_super) {\n __extends(Selecto, _super);\n /**\n *\n */\n\n\n function Selecto(options) {\n if (options === void 0) {\n options = {};\n }\n\n var _this = _super.call(this) || this;\n\n _this.selectedTargets = [];\n _this.dragScroll = new DragScroll();\n\n _this._onDragStart = function (e, clickedTarget) {\n var data = e.data,\n clientX = e.clientX,\n clientY = e.clientY,\n inputEvent = e.inputEvent;\n var _a = _this.options,\n selectFromInside = _a.selectFromInside,\n selectByClick = _a.selectByClick,\n rootContainer = _a.rootContainer,\n boundContainer = _a.boundContainer,\n _b = _a.preventDragFromInside,\n preventDragFromInside = _b === void 0 ? true : _b,\n clickBySelectEnd = _a.clickBySelectEnd,\n dragCondition = _a.dragCondition;\n\n if (dragCondition && !dragCondition(e)) {\n e.stop();\n return;\n }\n\n data.data = {};\n var win = getWindow(_this.container);\n data.innerWidth = win.innerWidth;\n data.innerHeight = win.innerHeight;\n\n _this.findSelectableTargets(data);\n\n data.startSelectedTargets = _this.selectedTargets;\n data.scaleMatrix = createMatrix();\n data.containerX = 0;\n data.containerY = 0;\n var container = _this.container;\n var boundArea = {\n left: -Infinity,\n top: -Infinity,\n right: Infinity,\n bottom: Infinity\n };\n\n if (rootContainer) {\n var containerRect = _this.container.getBoundingClientRect();\n\n data.containerX = containerRect.left;\n data.containerY = containerRect.top;\n data.scaleMatrix = getDistElementMatrix(_this.container, rootContainer);\n }\n\n if (boundContainer) {\n var boundInfo = isObject(boundContainer) && \"element\" in boundContainer ? __assign({\n left: true,\n top: true,\n bottom: true,\n right: true\n }, boundContainer) : {\n element: boundContainer,\n left: true,\n top: true,\n bottom: true,\n right: true\n };\n var boundElement = boundInfo.element;\n var rectElement = void 0;\n\n if (boundElement) {\n if (isString(boundElement)) {\n rectElement = getDocument(container).querySelector(boundElement);\n } else if (boundElement === true) {\n rectElement = _this.container;\n } else {\n rectElement = boundElement;\n }\n\n var rect = rectElement.getBoundingClientRect();\n\n if (boundInfo.left) {\n boundArea.left = rect.left;\n }\n\n if (boundInfo.top) {\n boundArea.top = rect.top;\n }\n\n if (boundInfo.right) {\n boundArea.right = rect.right;\n }\n\n if (boundInfo.bottom) {\n boundArea.bottom = rect.bottom;\n }\n }\n }\n\n data.boundArea = boundArea;\n var hitRect = {\n left: clientX,\n top: clientY,\n right: clientX,\n bottom: clientY,\n width: 0,\n height: 0\n };\n var firstPassedTargets = []; // allow click on select\n\n var allowClickBySelectEnd = selectByClick && !clickBySelectEnd;\n var hasInsideTargets = false;\n\n if (!selectFromInside || allowClickBySelectEnd) {\n var pointTarget = _this._findElement(clickedTarget || inputEvent.target, // elementFromPoint(clientX, clientY),\n data.selectableTargets);\n\n hasInsideTargets = !!pointTarget;\n\n if (allowClickBySelectEnd) {\n firstPassedTargets = pointTarget ? [pointTarget] : [];\n }\n }\n\n var isPreventSelect = !selectFromInside && hasInsideTargets; // prevent drag from inside when selectByClick is false\n\n if (isPreventSelect && !selectByClick) {\n e.stop();\n return false;\n }\n\n var type = inputEvent.type;\n var isTrusted = type === \"mousedown\" || type === \"touchstart\";\n /**\n * When the drag starts (triggers on mousedown or touchstart), the dragStart event is called.\n * Call the stop () function if you have a specific element or don't want to raise a select\n * @memberof Selecto\n * @event dragStart\n * @param {OnDragStart} - Parameters for the dragStart event\n * @example\n * import Selecto from \"selecto\";\n *\n * const selecto = new Selecto({\n * container: document.body,\n * selectByClick: true,\n * selectFromInside: false,\n * });\n *\n * selecto.on(\"dragStart\", e => {\n * if (e.inputEvent.target.tagName === \"SPAN\") {\n * e.stop();\n * }\n * }).on(\"select\", e => {\n * e.added.forEach(el => {\n * el.classList.add(\"selected\");\n * });\n * e.removed.forEach(el => {\n * el.classList.remove(\"selected\");\n * });\n * });\n */\n\n var result = !e.isClick && isTrusted ? _this.emit(\"dragStart\", __assign(__assign({}, e), {\n data: data.data\n })) : true;\n\n if (!result) {\n e.stop();\n return false;\n }\n\n if (_this.continueSelect) {\n firstPassedTargets = passTargets(_this.selectedTargets, firstPassedTargets, _this.continueSelectWithoutDeselect);\n data.startPassedTargets = _this.selectedTargets;\n } else {\n data.startPassedTargets = [];\n }\n\n _this._select(firstPassedTargets, hitRect, e, true, isPreventSelect && selectByClick && !clickBySelectEnd && preventDragFromInside);\n\n data.startX = clientX;\n data.startY = clientY;\n data.selectFlag = false;\n data.preventDragFromInside = false;\n\n if (inputEvent.target) {\n var offsetPos = calculateMatrixDist(data.scaleMatrix, [clientX - data.containerX, clientY - data.containerY]);\n _this.target.style.cssText += \"position: \".concat(rootContainer ? \"absolute\" : \"fixed\", \";\") + \"left:0px;top:0px;\" + \"transform: translate(\".concat(offsetPos[0], \"px, \").concat(offsetPos[1], \"px)\");\n }\n\n if (isPreventSelect && selectByClick && !clickBySelectEnd) {\n inputEvent.preventDefault(); // prevent drag from inside when selectByClick is true and force call `selectEnd`\n\n if (preventDragFromInside) {\n _this._selectEnd(data.startSelectedTargets, data.startPassedTargets, hitRect, e, true);\n\n data.preventDragFromInside = true;\n }\n } else {\n data.selectFlag = true; // why?\n // if (type === \"touchstart\") {\n // inputEvent.preventDefault();\n // }\n\n var _c = _this.options,\n scrollOptions = _c.scrollOptions,\n innerScrollOptions = _c.innerScrollOptions;\n var isInnerScroll = false;\n\n if (innerScrollOptions) {\n var inputEvent_1 = e.inputEvent;\n var target = inputEvent_1.target;\n var innerScrollElement = null;\n var parentElement = target;\n\n while (parentElement && parentElement !== getDocument(container).body) {\n var overflow = getComputedStyle(parentElement).overflow !== \"visible\";\n\n if (overflow) {\n innerScrollElement = parentElement;\n break;\n }\n\n parentElement = parentElement.parentElement;\n }\n\n if (innerScrollElement) {\n data.innerScrollOptions = __assign({\n container: innerScrollElement,\n checkScrollEvent: true\n }, innerScrollOptions === true ? {} : innerScrollOptions);\n\n _this.dragScroll.dragStart(e, data.innerScrollOptions);\n\n isInnerScroll = true;\n }\n }\n\n if (!isInnerScroll && scrollOptions && scrollOptions.container) {\n _this.dragScroll.dragStart(e, scrollOptions);\n }\n\n if (isPreventSelect && selectByClick && clickBySelectEnd) {\n data.selectFlag = false;\n e.preventDrag();\n }\n }\n\n return true;\n };\n\n _this._onDrag = function (e) {\n if (e.data.selectFlag) {\n var scrollOptions = _this.scrollOptions;\n var innerScrollOptions = e.data.innerScrollOptions;\n var hasScrollOptions = innerScrollOptions || (scrollOptions === null || scrollOptions === void 0 ? void 0 : scrollOptions.container); // If it is a scrolling position, pass drag\n\n if (hasScrollOptions && !e.isScroll && _this.dragScroll.drag(e, innerScrollOptions || scrollOptions)) {\n return;\n }\n }\n\n _this._checkSelected(e);\n };\n\n _this._onDragEnd = function (e) {\n var data = e.data,\n inputEvent = e.inputEvent;\n var rect = getRect(e, _this.options.ratio);\n var selectFlag = data.selectFlag;\n var container = _this.container;\n /**\n * When the drag ends (triggers on mouseup or touchend after drag), the dragEnd event is called.\n * @memberof Selecto\n * @event dragEnd\n * @param {OnDragEnd} - Parameters for the dragEnd event\n */\n\n if (inputEvent) {\n _this.emit(\"dragEnd\", __assign(__assign({\n isDouble: !!e.isDouble,\n isClick: !!e.isClick,\n isDrag: false,\n isSelect: selectFlag\n }, e), {\n data: data.data,\n rect: rect\n }));\n }\n\n _this.target.style.cssText += \"display: none;\";\n\n if (selectFlag) {\n data.selectFlag = false;\n\n _this.dragScroll.dragEnd();\n } else if (_this.selectByClick && _this.clickBySelectEnd) {\n // only clickBySelectEnd\n var pointTarget = _this._findElement((inputEvent === null || inputEvent === void 0 ? void 0 : inputEvent.target) || elementFromPoint(container, e.clientX, e.clientY), data.selectableTargets);\n\n _this._select(pointTarget ? [pointTarget] : [], rect, e);\n }\n\n if (!data.preventDragFromInside) {\n _this._selectEnd(data.startSelectedTargets, data.startPassedTargets, rect, e);\n }\n };\n\n _this._onKeyDown = function (e) {\n var options = _this.options;\n var isKeyDown = false;\n\n if (!_this._keydownContinueSelect) {\n var result = _this._sameCombiKey(e, options.toggleContinueSelect);\n\n _this._keydownContinueSelect = result;\n isKeyDown || (isKeyDown = result);\n }\n\n if (!_this._keydownContinueSelectWithoutDeselection) {\n var result = _this._sameCombiKey(e, options.toggleContinueSelectWithoutDeselect);\n\n _this._keydownContinueSelectWithoutDeselection = result;\n isKeyDown || (isKeyDown = result);\n }\n\n if (!isKeyDown) {\n return;\n }\n /**\n * When you keydown the key you specified in toggleContinueSelect, the keydown event is called.\n * @memberof Selecto\n * @event keydown\n * @example\n * import Selecto from \"selecto\";\n *\n * const selecto = new Selecto({\n * container: document.body,\n * toggleContinueSelect: \"shift\";\n * keyContainer: window,\n * });\n *\n * selecto.on(\"keydown\", () => {\n * document.querySelector(\".button\").classList.add(\"selected\");\n * }).on(\"keyup\", () => {\n * document.querySelector(\".button\").classList.remove(\"selected\");\n * }).on(\"select\", e => {\n * e.added.forEach(el => {\n * el.classList.add(\"selected\");\n * });\n * e.removed.forEach(el => {\n * el.classList.remove(\"selected\");\n * });\n * });\n */\n\n\n _this.emit(\"keydown\", {\n keydownContinueSelect: _this._keydownContinueSelect,\n keydownContinueSelectWithoutDeselection: _this._keydownContinueSelectWithoutDeselection\n });\n };\n\n _this._onKeyUp = function (e) {\n var options = _this.options;\n var isKeyUp = false;\n\n if (_this._keydownContinueSelect) {\n var result = _this._sameCombiKey(e, options.toggleContinueSelect, true);\n\n _this._keydownContinueSelect = !result;\n isKeyUp || (isKeyUp = result);\n }\n\n if (_this._keydownContinueSelectWithoutDeselection) {\n var result = _this._sameCombiKey(e, options.toggleContinueSelectWithoutDeselect, true);\n\n _this._keydownContinueSelectWithoutDeselection = !result;\n isKeyUp || (isKeyUp = result);\n }\n\n if (!isKeyUp) {\n return;\n }\n /**\n * When you keyup the key you specified in toggleContinueSelect, the keyup event is called.\n * @memberof Selecto\n * @event keyup\n * @example\n * import Selecto from \"selecto\";\n *\n * const selecto = new Selecto({\n * container: document.body,\n * toggleContinueSelect: \"shift\";\n * keyContainer: window,\n * });\n *\n * selecto.on(\"keydown\", () => {\n * document.querySelector(\".button\").classList.add(\"selected\");\n * }).on(\"keyup\", () => {\n * document.querySelector(\".button\").classList.remove(\"selected\");\n * }).on(\"select\", e => {\n * e.added.forEach(el => {\n * el.classList.add(\"selected\");\n * });\n * e.removed.forEach(el => {\n * el.classList.remove(\"selected\");\n * });\n * });\n */\n\n\n _this.emit(\"keyup\", {\n keydownContinueSelect: _this._keydownContinueSelect,\n keydownContinueSelectWithoutDeselection: _this._keydownContinueSelectWithoutDeselection\n });\n };\n\n _this._onBlur = function () {\n if (_this._keydownContinueSelect || _this._keydownContinueSelectWithoutDeselection) {\n _this._keydownContinueSelect = false;\n _this._keydownContinueSelectWithoutDeselection = false;\n\n _this.emit(\"keyup\", {\n keydownContinueSelect: _this._keydownContinueSelect,\n keydownContinueSelectWithoutDeselection: _this._keydownContinueSelectWithoutDeselection\n });\n }\n };\n\n _this._onDocumentSelectStart = function (e) {\n var doc = getDocument(_this.container);\n\n if (!_this.gesto.isFlag()) {\n return;\n }\n\n var dragContainer = _this.dragContainer;\n\n if (dragContainer === getWindow(_this.container)) {\n dragContainer = doc.documentElement;\n }\n\n var containers = isNode(dragContainer) ? [dragContainer] : [].slice.call(dragContainer);\n var target = e.target;\n containers.some(function (container) {\n if (container === target || container.contains(target)) {\n e.preventDefault();\n return true;\n }\n });\n };\n\n _this.target = options.portalContainer;\n var container = options.container;\n _this.options = __assign({\n className: \"\",\n portalContainer: null,\n container: null,\n dragContainer: null,\n selectableTargets: [],\n selectByClick: true,\n selectFromInside: true,\n clickBySelectEnd: false,\n hitRate: 100,\n continueSelect: false,\n continueSelectWithoutDeselect: false,\n toggleContinueSelect: null,\n toggleContinueSelectWithoutDeselect: null,\n keyContainer: null,\n scrollOptions: null,\n checkInput: false,\n preventDefault: false,\n boundContainer: false,\n preventDragFromInside: true,\n dragCondition: null,\n rootContainer: null,\n checkOverflow: false,\n innerScrollOptions: false,\n getElementRect: getDefaultElementRect,\n cspNonce: \"\",\n ratio: 0\n }, options);\n var portalContainer = _this.options.portalContainer;\n\n if (portalContainer) {\n container = portalContainer.parentElement;\n }\n\n _this.container = container || document.body;\n\n _this.initElement();\n\n _this.initDragScroll();\n\n _this.setKeyController();\n\n return _this;\n }\n /**\n * You can set the currently selected targets.\n * selectByClick, continueSelect, and continueSelectWithoutDeselect are not applied.\n */\n\n\n var __proto = Selecto.prototype;\n\n __proto.setSelectedTargets = function (selectedTargets) {\n var beforeSelected = this.selectedTargets;\n\n var _a = diff(beforeSelected, selectedTargets),\n added = _a.added,\n removed = _a.removed,\n prevList = _a.prevList,\n list = _a.list;\n\n this.selectedTargets = selectedTargets;\n return {\n added: added.map(function (index) {\n return list[index];\n }),\n removed: removed.map(function (index) {\n return prevList[index];\n }),\n beforeSelected: beforeSelected,\n selected: selectedTargets\n };\n };\n /**\n * You can set the currently selected targets by points\n * selectByClick, continueSelect, and continueSelectWithoutDeselect are not applied.\n */\n\n\n __proto.setSelectedTargetsByPoints = function (point1, point2) {\n var left = Math.min(point1[0], point2[0]);\n var top = Math.min(point1[1], point2[1]);\n var right = Math.max(point1[0], point2[0]);\n var bottom = Math.max(point1[1], point2[1]);\n var rect = {\n left: left,\n top: top,\n right: right,\n bottom: bottom,\n width: right - left,\n height: bottom - top\n };\n var data = {\n ignoreClick: true\n };\n this.findSelectableTargets(data);\n var selectedElements = this.hitTest(rect, data, true, null);\n var result = this.setSelectedTargets(selectedElements);\n return __assign(__assign({}, result), {\n rect: rect\n });\n };\n /**\n * Select target by virtual drag from startPoint to endPoint.\n * The target of inputEvent is null.\n */\n\n\n __proto.selectTargetsByPoints = function (startPoint, endPoint) {\n var mousedown = new MouseEvent(\"mousedown\", {\n clientX: startPoint[0],\n clientY: startPoint[1],\n cancelable: true,\n bubbles: true\n });\n var mousemove = new MouseEvent(\"mousemove\", {\n clientX: endPoint[0],\n clientY: endPoint[1],\n cancelable: true,\n bubbles: true\n });\n var mouseup = new MouseEvent(\"mousemove\", {\n clientX: endPoint[0],\n clientY: endPoint[1],\n cancelable: true,\n bubbles: true\n });\n var gesto = this.gesto;\n var result = gesto.onDragStart(mousedown);\n\n if (result !== false) {\n gesto.onDrag(mousemove);\n gesto.onDragEnd(mouseup);\n }\n };\n /**\n * You can get the currently selected targets.\n */\n\n\n __proto.getSelectedTargets = function () {\n return this.selectedTargets;\n };\n /**\n * `OnDragStart` is triggered by an external event.\n * @param - external event\n * @example\n * import Selecto from \"selecto\";\n *\n * const selecto = new Selecto();\n *\n * window.addEventListener(\"mousedown\", e => {\n * selecto.triggerDragStart(e);\n * });\n */\n\n\n __proto.triggerDragStart = function (e) {\n this.gesto.triggerDragStart(e);\n return this;\n };\n /**\n * Destroy elements, properties, and events.\n */\n\n\n __proto.destroy = function () {\n var _a;\n\n this.off();\n this.keycon && this.keycon.destroy();\n this.gesto.unset();\n this.injectResult.destroy();\n this.dragScroll.dragEnd();\n removeEvent(document, \"selectstart\", this._onDocumentSelectStart);\n\n if (!this.options.portalContainer) {\n (_a = this.target.parentElement) === null || _a === void 0 ? void 0 : _a.removeChild(this.target);\n }\n\n this.keycon = null;\n this.gesto = null;\n this.injectResult = null;\n this.target = null;\n this.container = null;\n this.options = null;\n };\n\n __proto.getElementPoints = function (target) {\n var getElementRect = this.getElementRect || getDefaultElementRect;\n var info = getElementRect(target);\n var points = [info.pos1, info.pos2, info.pos4, info.pos3];\n\n if (getElementRect !== getDefaultElementRect) {\n var rect = target.getBoundingClientRect();\n return fitPoints(points, rect);\n }\n\n return points;\n };\n /**\n * Get all elements set in `selectableTargets`.\n */\n\n\n __proto.getSelectableElements = function () {\n var container = this.container;\n var selectableElements = [];\n this.options.selectableTargets.forEach(function (target) {\n if (isFunction(target)) {\n var result = target();\n\n if (result) {\n selectableElements.push.apply(selectableElements, [].slice.call(result));\n }\n } else if (isNode(target)) {\n selectableElements.push(target);\n } else if (isObject(target)) {\n selectableElements.push(target.value || target.current);\n } else {\n var elements = [].slice.call(getDocument(container).querySelectorAll(target));\n selectableElements.push.apply(selectableElements, elements);\n }\n });\n return selectableElements;\n };\n /**\n * If scroll occurs during dragging, you can manually call this method to check the position again.\n */\n\n\n __proto.checkScroll = function () {\n if (!this.gesto.isFlag()) {\n return;\n }\n\n var scrollOptions = this.scrollOptions;\n var innerScrollOptions = this.gesto.getEventData().innerScrollOptions;\n var hasScrollOptions = innerScrollOptions || (scrollOptions === null || scrollOptions === void 0 ? void 0 : scrollOptions.container); // If it is a scrolling position, pass drag\n\n if (hasScrollOptions) {\n this.dragScroll.checkScroll(__assign({\n inputEvent: this.gesto.getCurrentEvent()\n }, innerScrollOptions || scrollOptions));\n }\n };\n /**\n * Find for selectableTargets again during drag event\n * You can update selectable targets during an event.\n */\n\n\n __proto.findSelectableTargets = function (data) {\n var _this = this;\n\n if (data === void 0) {\n data = this.gesto.getEventData();\n }\n\n var selectableTargets = this.getSelectableElements();\n var selectablePoints = selectableTargets.map(function (target) {\n return _this.getElementPoints(target);\n });\n data.selectableTargets = selectableTargets;\n data.selectablePoints = selectablePoints;\n data.selectableParentMap = null;\n var options = this.options;\n var hasIndexesMap = options.checkOverflow || options.innerScrollOptions;\n var doc = getDocument(this.container);\n\n if (hasIndexesMap) {\n var parentMap_1 = new Map();\n data.selectableInnerScrollParentMap = parentMap_1;\n data.selectableInnerScrollPathsList = selectableTargets.map(function (target, index) {\n var parentElement = target.parentElement;\n var parents = [];\n var paths = [];\n\n var _loop_1 = function () {\n var info = parentMap_1.get(parentElement);\n\n if (!info) {\n var overflow = getComputedStyle(parentElement).overflow !== \"visible\";\n\n if (overflow) {\n var rect = getDefaultElementRect(parentElement);\n info = {\n parentElement: parentElement,\n indexes: [],\n points: [rect.pos1, rect.pos2, rect.pos4, rect.pos3],\n paths: __spreadArray([], paths, true)\n };\n parents.push(parentElement);\n parents.forEach(function (prevParentElement) {\n parentMap_1.set(prevParentElement, info);\n });\n parents = [];\n }\n }\n\n if (info) {\n parentElement = info.parentElement;\n parentMap_1.get(parentElement).indexes.push(index);\n paths.push(parentElement);\n } else {\n parents.push(parentElement);\n }\n\n parentElement = parentElement.parentElement;\n };\n\n while (parentElement && parentElement !== doc.body) {\n _loop_1();\n }\n\n return paths;\n });\n }\n\n if (!options.checkOverflow) {\n data.selectableInners = selectableTargets.map(function () {\n return true;\n });\n }\n\n this._refreshGroups(data);\n\n return selectableTargets;\n };\n /**\n * External click or mouse events can be applied to the selecto.\n * @params - Extenal click or mouse event\n * @params - Specify the clicked target directly.\n */\n\n\n __proto.clickTarget = function (e, clickedTarget) {\n var _a = getClient(e),\n clientX = _a.clientX,\n clientY = _a.clientY;\n\n var dragEvent = {\n data: {\n selectFlag: false\n },\n clientX: clientX,\n clientY: clientY,\n inputEvent: e,\n isClick: true,\n isTrusted: false,\n stop: function () {\n return false;\n }\n };\n\n if (this._onDragStart(dragEvent, clickedTarget)) {\n this._onDragEnd(dragEvent);\n }\n\n return this;\n };\n\n __proto.setKeyController = function () {\n var _a = this.options,\n keyContainer = _a.keyContainer,\n toggleContinueSelect = _a.toggleContinueSelect,\n toggleContinueSelectWithoutDeselect = _a.toggleContinueSelectWithoutDeselect;\n\n if (this.keycon) {\n this.keycon.destroy();\n this.keycon = null;\n }\n\n if (toggleContinueSelect || toggleContinueSelectWithoutDeselect) {\n this.keycon = new KeyController(keyContainer || getWindow(this.container));\n this.keycon.keydown(this._onKeyDown).keyup(this._onKeyUp).on(\"blur\", this._onBlur);\n }\n };\n\n __proto.setClassName = function (nextClassName) {\n this.options.className = nextClassName;\n this.target.setAttribute(\"class\", \"\".concat(CLASS_NAME, \" \").concat(nextClassName || \"\"));\n };\n\n __proto.setKeyEvent = function () {\n var _a = this.options,\n toggleContinueSelect = _a.toggleContinueSelect,\n toggleContinueSelectWithoutDeselect = _a.toggleContinueSelectWithoutDeselect;\n\n if (!toggleContinueSelect && !toggleContinueSelectWithoutDeselect || this.keycon) {\n return;\n }\n\n this.setKeyController();\n }; // with getter, setter property\n\n\n __proto.setKeyContainer = function (keyContainer) {\n var _this = this;\n\n var options = this.options;\n diffValue(options.keyContainer, keyContainer, function () {\n options.keyContainer = keyContainer;\n\n _this.setKeyController();\n });\n };\n\n __proto.getContinueSelect = function () {\n var _a = this.options,\n continueSelect = _a.continueSelect,\n toggleContinueSelect = _a.toggleContinueSelect;\n\n if (!toggleContinueSelect || !this._keydownContinueSelect) {\n return continueSelect;\n }\n\n return !continueSelect;\n };\n\n __proto.getContinueSelectWithoutDeselect = function () {\n var _a = this.options,\n continueSelectWithoutDeselect = _a.continueSelectWithoutDeselect,\n toggleContinueSelectWithoutDeselect = _a.toggleContinueSelectWithoutDeselect;\n\n if (!toggleContinueSelectWithoutDeselect || !this._keydownContinueSelectWithoutDeselection) {\n return continueSelectWithoutDeselect;\n }\n\n return !continueSelectWithoutDeselect;\n };\n\n __proto.setToggleContinueSelect = function (toggleContinueSelect) {\n var _this = this;\n\n var options = this.options;\n diffValue(options.toggleContinueSelect, toggleContinueSelect, function () {\n options.toggleContinueSelect = toggleContinueSelect;\n\n _this.setKeyEvent();\n });\n };\n\n __proto.setToggleContinueSelectWithoutDeselect = function (toggleContinueSelectWithoutDeselect) {\n var _this = this;\n\n var options = this.options;\n diffValue(options.toggleContinueSelectWithoutDeselect, toggleContinueSelectWithoutDeselect, function () {\n options.toggleContinueSelectWithoutDeselect = toggleContinueSelectWithoutDeselect;\n\n _this.setKeyEvent();\n });\n };\n\n __proto.setPreventDefault = function (value) {\n this.gesto.options.preventDefault = value;\n };\n\n __proto.setCheckInput = function (value) {\n this.gesto.options.checkInput = value;\n };\n\n __proto.initElement = function () {\n var _a = this.options,\n dragContainer = _a.dragContainer,\n checkInput = _a.checkInput,\n preventDefault = _a.preventDefault,\n preventClickEventOnDragStart = _a.preventClickEventOnDragStart,\n preventClickEventOnDrag = _a.preventClickEventOnDrag,\n preventClickEventByCondition = _a.preventClickEventByCondition,\n _b = _a.preventRightClick,\n preventRightClick = _b === void 0 ? true : _b,\n className = _a.className;\n var container = this.container;\n this.target = createElement(h(\"div\", {\n className: \"\".concat(CLASS_NAME, \" \").concat(className || \"\")\n }), this.target, container);\n var target = this.target;\n this.dragContainer = typeof dragContainer === \"string\" ? [].slice.call(getDocument(container).querySelectorAll(dragContainer)) : dragContainer || this.target.parentNode;\n this.gesto = new Gesto(this.dragContainer, {\n checkWindowBlur: true,\n container: getWindow(container),\n checkInput: checkInput,\n preventDefault: preventDefault,\n preventClickEventOnDragStart: preventClickEventOnDragStart,\n preventClickEventOnDrag: preventClickEventOnDrag,\n preventClickEventByCondition: preventClickEventByCondition,\n preventRightClick: preventRightClick\n }).on({\n dragStart: this._onDragStart,\n drag: this._onDrag,\n dragEnd: this._onDragEnd\n });\n addEvent(document, \"selectstart\", this._onDocumentSelectStart);\n this.injectResult = injector.inject(target, {\n nonce: this.options.cspNonce\n });\n };\n\n __proto.hitTest = function (selectRect, data, isDrag, gestoEvent) {\n var _a = this.options,\n hitRate = _a.hitRate,\n selectByClick = _a.selectByClick;\n var left = selectRect.left,\n top = selectRect.top,\n right = selectRect.right,\n bottom = selectRect.bottom;\n var innerGroups = data.innerGroups;\n var innerWidth = data.innerWidth;\n var innerHeight = data.innerHeight;\n var clientX = gestoEvent === null || gestoEvent === void 0 ? void 0 : gestoEvent.clientX;\n var clientY = gestoEvent === null || gestoEvent === void 0 ? void 0 : gestoEvent.clientY;\n var ignoreClick = data.ignoreClick;\n var rectPoints = [[left, top], [right, top], [right, bottom], [left, bottom]];\n\n var isHit = function (points, el) {\n var hitRateValue = typeof hitRate === \"function\" ? splitUnit(\"\".concat(hitRate(el))) : splitUnit(\"\".concat(hitRate));\n var inArea = ignoreClick ? false : isInside([clientX, clientY], points);\n\n if (!isDrag && selectByClick && inArea) {\n return true;\n }\n\n var overlapPoints = getOverlapPoints(rectPoints, points);\n\n if (!overlapPoints.length) {\n return false;\n }\n\n var overlapSize = getAreaSize(overlapPoints); // Line\n\n var targetSize = 0;\n\n if (overlapSize === 0 && getAreaSize(points) === 0) {\n targetSize = getLineSize(points);\n overlapSize = getLineSize(overlapPoints);\n } else {\n targetSize = getAreaSize(points);\n }\n\n if (hitRateValue.unit === \"px\") {\n return overlapSize >= hitRateValue.value;\n } else {\n var rate = between(Math.round(overlapSize / targetSize * 100), 0, 100);\n return rate >= Math.min(100, hitRateValue.value);\n }\n };\n\n var selectableTargets = data.selectableTargets;\n var selectablePoints = data.selectablePoints;\n var selectableInners = data.selectableInners;\n\n if (!innerGroups) {\n return selectableTargets.filter(function (_, i) {\n if (!selectableInners[i]) {\n return false;\n }\n\n return isHit(selectablePoints[i], selectableTargets[i]);\n });\n }\n\n var selectedTargets = [];\n var minX = Math.floor(left / innerWidth);\n var maxX = Math.floor(right / innerWidth);\n var minY = Math.floor(top / innerHeight);\n var maxY = Math.floor(bottom / innerHeight);\n\n for (var x = minX; x <= maxX; ++x) {\n var yGroups = innerGroups[x];\n\n if (!yGroups) {\n continue;\n }\n\n for (var y = minY; y <= maxY; ++y) {\n var group = yGroups[y];\n\n if (!group) {\n continue;\n }\n\n group.forEach(function (index) {\n var points = selectablePoints[index];\n var inner = selectableInners[index];\n var target = selectableTargets[index];\n\n if (inner && isHit(points, target)) {\n selectedTargets.push(target);\n }\n });\n }\n }\n\n return filterDuplicated(selectedTargets);\n };\n\n __proto.initDragScroll = function () {\n var _this = this;\n\n this.dragScroll.on(\"scrollDrag\", function (_a) {\n var next = _a.next;\n next(_this.gesto.getCurrentEvent());\n }).on(\"scroll\", function (_a) {\n var container = _a.container,\n direction = _a.direction;\n\n var innerScrollOptions = _this.gesto.getEventData().innerScrollOptions;\n\n if (innerScrollOptions) {\n _this.emit(\"innerScroll\", {\n container: container,\n direction: direction\n });\n } else {\n _this.emit(\"scroll\", {\n container: container,\n direction: direction\n });\n }\n }).on(\"move\", function (_a) {\n var offsetX = _a.offsetX,\n offsetY = _a.offsetY,\n inputEvent = _a.inputEvent;\n var gesto = _this.gesto;\n\n if (!gesto || !gesto.isFlag()) {\n return;\n }\n\n var data = _this.gesto.getEventData();\n\n var boundArea = data.boundArea;\n data.startX -= offsetX;\n data.startY -= offsetY;\n\n var innerScrollOptions = _this.gesto.getEventData().innerScrollOptions;\n\n var container = innerScrollOptions === null || innerScrollOptions === void 0 ? void 0 : innerScrollOptions.container;\n var isMoveInnerScroll = false;\n\n if (container) {\n var parentMap_2 = data.selectableInnerScrollParentMap;\n var parentInfo = parentMap_2.get(container);\n\n if (parentInfo) {\n parentInfo.paths.forEach(function (scrollContainer) {\n var containerInfo = parentMap_2.get(scrollContainer);\n containerInfo.points.forEach(function (pos) {\n pos[0] -= offsetX;\n pos[1] -= offsetY;\n });\n });\n parentInfo.indexes.forEach(function (index) {\n data.selectablePoints[index].forEach(function (pos) {\n pos[0] -= offsetX;\n pos[1] -= offsetY;\n });\n });\n isMoveInnerScroll = true;\n }\n }\n\n if (!isMoveInnerScroll) {\n data.selectablePoints.forEach(function (points) {\n points.forEach(function (pos) {\n pos[0] -= offsetX;\n pos[1] -= offsetY;\n });\n });\n }\n\n _this._refreshGroups(data);\n\n boundArea.left -= offsetX;\n boundArea.right -= offsetX;\n boundArea.top -= offsetY;\n boundArea.bottom -= offsetY;\n\n _this.gesto.scrollBy(offsetX, offsetY, inputEvent.inputEvent);\n\n _this._checkSelected(_this.gesto.getCurrentEvent());\n });\n };\n\n __proto._select = function (selectedTargets, rect, e, isStart, isDragStartEnd) {\n if (isDragStartEnd === void 0) {\n isDragStartEnd = false;\n }\n\n var inputEvent = e.inputEvent;\n var data = e.data;\n var result = this.setSelectedTargets(selectedTargets);\n\n var _a = diff(data.startSelectedTargets, selectedTargets),\n added = _a.added,\n removed = _a.removed,\n prevList = _a.prevList,\n list = _a.list;\n\n var startResult = {\n startSelected: prevList,\n startAdded: added.map(function (i) {\n return list[i];\n }),\n startRemoved: removed.map(function (i) {\n return prevList[i];\n })\n };\n\n if (isStart) {\n /**\n * When the select(drag) starts, the selectStart event is called.\n * @memberof Selecto\n * @event selectStart\n * @param {Selecto.OnSelect} - Parameters for the selectStart event\n * @example\n * import Selecto from \"selecto\";\n *\n * const selecto = new Selecto({\n * container: document.body,\n * selectByClick: true,\n * selectFromInside: false,\n * });\n *\n * selecto.on(\"selectStart\", e => {\n * e.added.forEach(el => {\n * el.classList.add(\"selected\");\n * });\n * e.removed.forEach(el => {\n * el.classList.remove(\"selected\");\n * });\n * }).on(\"selectEnd\", e => {\n * e.afterAdded.forEach(el => {\n * el.classList.add(\"selected\");\n * });\n * e.afterRemoved.forEach(el => {\n * el.classList.remove(\"selected\");\n * });\n * });\n */\n this.emit(\"selectStart\", __assign(__assign(__assign({}, result), startResult), {\n rect: rect,\n inputEvent: inputEvent,\n data: data.data,\n isTrusted: e.isTrusted,\n isDragStartEnd: isDragStartEnd\n }));\n }\n\n if (result.added.length || result.removed.length) {\n /**\n * When the select in real time, the select event is called.\n * @memberof Selecto\n * @event select\n * @param {Selecto.OnSelect} - Parameters for the select event\n * @example\n * import Selecto from \"selecto\";\n *\n * const selecto = new Selecto({\n * container: document.body,\n * selectByClick: true,\n * selectFromInside: false,\n * });\n *\n * selecto.on(\"select\", e => {\n * e.added.forEach(el => {\n * el.classList.add(\"selected\");\n * });\n * e.removed.forEach(el => {\n * el.classList.remove(\"selected\");\n * });\n * });\n */\n this.emit(\"select\", __assign(__assign(__assign({}, result), startResult), {\n rect: rect,\n inputEvent: inputEvent,\n data: data.data,\n isTrusted: e.isTrusted,\n isDragStartEnd: isDragStartEnd\n }));\n }\n };\n\n __proto._selectEnd = function (startSelectedTargets, startPassedTargets, rect, e, isDragStartEnd) {\n if (isDragStartEnd === void 0) {\n isDragStartEnd = false;\n }\n\n var inputEvent = e.inputEvent,\n isDouble = e.isDouble,\n data = e.data;\n var type = inputEvent && inputEvent.type;\n var isDragStart = type === \"mousedown\" || type === \"touchstart\";\n\n var _a = diff(startSelectedTargets, this.selectedTargets),\n added = _a.added,\n removed = _a.removed,\n prevList = _a.prevList,\n list = _a.list;\n\n var _b = diff(startPassedTargets, this.selectedTargets),\n afterAdded = _b.added,\n afterRemoved = _b.removed,\n afterPrevList = _b.prevList,\n afterList = _b.list;\n /**\n * When the select(dragEnd or click) ends, the selectEnd event is called.\n * @memberof Selecto\n * @event selectEnd\n * @param {Selecto.OnSelectEnd} - Parameters for the selectEnd event\n * @example\n * import Selecto from \"selecto\";\n *\n * const selecto = new Selecto({\n * container: document.body,\n * selectByClick: true,\n * selectFromInside: false,\n * });\n *\n * selecto.on(\"selectStart\", e => {\n * e.added.forEach(el => {\n * el.classList.add(\"selected\");\n * });\n * e.removed.forEach(el => {\n * el.classList.remove(\"selected\");\n * });\n * }).on(\"selectEnd\", e => {\n * e.afterAdded.forEach(el => {\n * el.classList.add(\"selected\");\n * });\n * e.afterRemoved.forEach(el => {\n * el.classList.remove(\"selected\");\n * });\n * });\n */\n\n\n this.emit(\"selectEnd\", {\n startSelected: startSelectedTargets,\n beforeSelected: startPassedTargets,\n selected: this.selectedTargets,\n added: added.map(function (index) {\n return list[index];\n }),\n removed: removed.map(function (index) {\n return prevList[index];\n }),\n afterAdded: afterAdded.map(function (index) {\n return afterList[index];\n }),\n afterRemoved: afterRemoved.map(function (index) {\n return afterPrevList[index];\n }),\n isDragStart: isDragStart && isDragStartEnd,\n isDragStartEnd: isDragStart && isDragStartEnd,\n isClick: !!e.isClick,\n isDouble: !!isDouble,\n rect: rect,\n inputEvent: inputEvent,\n data: data.data,\n isTrusted: e.isTrusted\n });\n };\n\n __proto._checkSelected = function (e, rect) {\n if (rect === void 0) {\n rect = getRect(e, this.options.ratio);\n }\n\n var data = e.data;\n var top = rect.top,\n left = rect.left,\n width = rect.width,\n height = rect.height;\n var selectFlag = data.selectFlag;\n var containerX = data.containerX,\n containerY = data.containerY,\n scaleMatrix = data.scaleMatrix;\n var offsetPos = calculateMatrixDist(scaleMatrix, [left - containerX, top - containerY]);\n var offsetSize = calculateMatrixDist(scaleMatrix, [width, height]);\n var selectedTargets = [];\n\n if (selectFlag) {\n this.target.style.cssText += \"display: block;\" + \"left:0px;top:0px;\" + \"transform: translate(\".concat(offsetPos[0], \"px, \").concat(offsetPos[1], \"px);\") + \"width:\".concat(offsetSize[0], \"px;height:\").concat(offsetSize[1], \"px;\");\n var passedTargets = this.hitTest(rect, data, true, e);\n selectedTargets = passTargets(data.startPassedTargets, passedTargets, this.continueSelect && this.continueSelectWithoutDeselect);\n }\n /**\n * When the drag, the drag event is called.\n * Call the stop () function if you have a specific element or don't want to raise a select\n * @memberof Selecto\n * @event drag\n * @param {OnDrag} - Parameters for the drag event\n * @example\n * import Selecto from \"selecto\";\n *\n * const selecto = new Selecto({\n * container: document.body,\n * selectByClick: true,\n * selectFromInside: false,\n * });\n *\n * selecto.on(\"drag\", e => {\n * e.stop();\n * }).on(\"select\", e => {\n * e.added.forEach(el => {\n * el.classList.add(\"selected\");\n * });\n * e.removed.forEach(el => {\n * el.classList.remove(\"selected\");\n * });\n * });\n */\n\n\n var result = this.emit(\"drag\", __assign(__assign({}, e), {\n data: data.data,\n isSelect: selectFlag,\n rect: rect\n }));\n\n if (result === false) {\n this.target.style.cssText += \"display: none;\";\n e.stop();\n return;\n }\n\n if (selectFlag) {\n this._select(selectedTargets, rect, e);\n }\n };\n\n __proto._sameCombiKey = function (e, keys, isKeyup) {\n if (!keys) {\n return false;\n }\n\n var combi = getCombi(e.inputEvent, e.key);\n var nextKeys = [].concat(keys);\n var toggleKeys = isArray(nextKeys[0]) ? nextKeys : [nextKeys];\n\n if (isKeyup) {\n var singleKey_1 = e.key;\n return toggleKeys.some(function (keys) {\n return keys.some(function (key) {\n return key === singleKey_1;\n });\n });\n }\n\n return toggleKeys.some(function (keys) {\n return keys.every(function (key) {\n return combi.indexOf(key) > -1;\n });\n });\n };\n\n __proto._findElement = function (clickedTarget, selectableTargets) {\n var pointTarget = clickedTarget;\n\n while (pointTarget) {\n if (selectableTargets.indexOf(pointTarget) > -1) {\n break;\n }\n\n pointTarget = pointTarget.parentElement;\n }\n\n return pointTarget;\n };\n\n __proto._refreshGroups = function (data) {\n var _a;\n\n var innerWidth = data.innerWidth;\n var innerHeight = data.innerHeight;\n var selectablePoints = data.selectablePoints;\n\n if (this.options.checkOverflow) {\n var innerScrollContainer_1 = (_a = this.gesto.getEventData().innerScrollOptions) === null || _a === void 0 ? void 0 : _a.container;\n var parentMap_3 = data.selectableInnerScrollParentMap;\n var innerScrollPathsList = data.selectableInnerScrollPathsList;\n data.selectableInners = innerScrollPathsList.map(function (innerScrollPaths, i) {\n var isAlwaysTrue = false;\n return innerScrollPaths.every(function (target) {\n if (isAlwaysTrue) {\n return true;\n }\n\n if (target === innerScrollContainer_1) {\n isAlwaysTrue = true;\n return true;\n }\n\n var rect = parentMap_3.get(target);\n\n if (rect) {\n var points1 = selectablePoints[i];\n var points2 = rect.points;\n var overlapPoints = getOverlapPoints(points1, points2);\n\n if (!overlapPoints.length) {\n return false;\n }\n }\n\n return true;\n });\n });\n }\n\n if (!innerWidth || !innerHeight) {\n data.innerGroups = null;\n } else {\n var selectablePoints_1 = data.selectablePoints;\n var groups_1 = {};\n selectablePoints_1.forEach(function (points, i) {\n var minX = Infinity;\n var maxX = -Infinity;\n var minY = Infinity;\n var maxY = -Infinity;\n points.forEach(function (pos) {\n var x = Math.floor(pos[0] / innerWidth);\n var y = Math.floor(pos[1] / innerHeight);\n minX = Math.min(x, minX);\n maxX = Math.max(x, maxX);\n minY = Math.min(y, minY);\n maxY = Math.max(y, maxY);\n });\n\n for (var x = minX; x <= maxX; ++x) {\n for (var y = minY; y <= maxY; ++y) {\n groups_1[x] = groups_1[x] || {};\n groups_1[x][y] = groups_1[x][y] || [];\n groups_1[x][y].push(i);\n }\n }\n });\n data.innerGroups = groups_1;\n }\n };\n\n Selecto = __decorate([Properties(PROPERTIES, function (prototype, property) {\n var attributes = {\n enumerable: true,\n configurable: true,\n get: function () {\n return this.options[property];\n }\n };\n var getter = camelize(\"get \".concat(property));\n\n if (prototype[getter]) {\n attributes.get = function () {\n return this[getter]();\n };\n } else {\n attributes.get = function () {\n return this.options[property];\n };\n }\n\n var setter = camelize(\"set \".concat(property));\n\n if (prototype[setter]) {\n attributes.set = function (value) {\n this[setter](value);\n };\n } else {\n attributes.set = function (value) {\n this.options[property] = value;\n };\n }\n\n Object.defineProperty(prototype, property, attributes);\n })], Selecto);\n return Selecto;\n}(EventEmitter);\n\nvar Selecto$1 =\n/*#__PURE__*/\nfunction (_super) {\n __extends(Selecto, _super);\n\n function Selecto() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n return Selecto;\n}(Selecto);\n\nexport default Selecto$1;\nexport { CLASS_NAME, EVENTS, METHODS, OPTIONS, OPTION_TYPES, PROPERTIES };\n//# sourceMappingURL=selecto.esm.js.map\n","import { css } from '@emotion/css';\nimport { useRef } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport { ConnectionCoordinates } from 'app/features/canvas/element';\n\ntype Props = {\n setRef: (anchorElement: HTMLDivElement) => void;\n setAnchorsRef: (anchorsElement: HTMLDivElement) => void;\n handleMouseLeave: (\n event: React.MouseEvent<Element, MouseEvent> | React.FocusEvent<HTMLDivElement, Element>\n ) => boolean;\n};\n\nexport const CONNECTION_ANCHOR_DIV_ID = 'connectionControl';\nexport const CONNECTION_ANCHOR_ALT = 'connection anchor';\nexport const CONNECTION_ANCHOR_HIGHLIGHT_OFFSET = 8;\n// Unit is percentage from the middle of the element\n// 0, 0 middle; -1, -1 bottom left; 1, 1 top right\nexport const ANCHORS = [\n { x: -1, y: 1 },\n { x: -0.5, y: 1 },\n { x: 0, y: 1 },\n { x: 0.5, y: 1 },\n { x: 1, y: 1 },\n { x: 1, y: 0.5 },\n { x: 1, y: 0 },\n { x: 1, y: -0.5 },\n { x: 1, y: -1 },\n { x: 0.5, y: -1 },\n { x: 0, y: -1 },\n { x: -0.5, y: -1 },\n { x: -1, y: -1 },\n { x: -1, y: -0.5 },\n { x: -1, y: 0 },\n { x: -1, y: 0.5 },\n];\n\nexport const ANCHOR_PADDING = 3;\nexport const HALF_SIZE = 2.5;\n\nexport const ConnectionAnchors = ({ setRef, setAnchorsRef, handleMouseLeave }: Props) => {\n const highlightEllipseRef = useRef<HTMLDivElement>(null);\n const styles = useStyles2(getStyles);\n const halfSizeHighlightEllipse = 5.5;\n const anchorImage =\n 'data:image/svg+xml;base64,PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSI1cHgiIGhlaWdodD0iNXB4IiB2ZXJzaW9uPSIxLjEiPjxwYXRoIGQ9Im0gMCAwIEwgNSA1IE0gMCA1IEwgNSAwIiBzdHJva2Utd2lkdGg9IjIiIHN0eWxlPSJzdHJva2Utb3BhY2l0eTowLjQiIHN0cm9rZT0iI2ZmZmZmZiIvPjxwYXRoIGQ9Im0gMCAwIEwgNSA1IE0gMCA1IEwgNSAwIiBzdHJva2U9IiMyOWI2ZjIiLz48L3N2Zz4=';\n\n const onMouseEnterAnchor = (event: React.MouseEvent) => {\n if (!(event.target instanceof HTMLImageElement)) {\n return;\n }\n\n if (highlightEllipseRef.current && event.target.style) {\n highlightEllipseRef.current.style.display = 'block';\n highlightEllipseRef.current.style.top = `calc(${event.target.style.top} - ${halfSizeHighlightEllipse}px + ${ANCHOR_PADDING}px)`;\n highlightEllipseRef.current.style.left = `calc(${event.target.style.left} - ${halfSizeHighlightEllipse}px + ${ANCHOR_PADDING}px)`;\n }\n };\n\n const onMouseLeaveHighlightElement = () => {\n if (highlightEllipseRef.current) {\n highlightEllipseRef.current.style.display = 'none';\n }\n };\n\n const handleMouseLeaveAnchors = (\n event: React.MouseEvent<Element, MouseEvent> | React.FocusEvent<HTMLDivElement, Element>\n ) => {\n const didHideAnchors = handleMouseLeave(event);\n\n if (didHideAnchors) {\n onMouseLeaveHighlightElement();\n }\n };\n\n const generateAnchors = (anchors: ConnectionCoordinates[] = ANCHORS) => {\n return anchors.map((anchor) => {\n const id = `${anchor.x},${anchor.y}`;\n\n // Convert anchor coords to relative percentage\n const style = {\n top: `calc(${-anchor.y * 50 + 50}% - ${HALF_SIZE}px - ${ANCHOR_PADDING}px)`,\n left: `calc(${anchor.x * 50 + 50}% - ${HALF_SIZE}px - ${ANCHOR_PADDING}px)`,\n };\n\n return (\n <img\n id={id}\n ref={(element) => {\n if (element) {\n // After React 15+, inline styles no longer support !important\n element.style.setProperty('pointer-events', 'auto', 'important');\n }\n }}\n key={id}\n alt={CONNECTION_ANCHOR_ALT}\n className={styles.anchor}\n style={style}\n src={anchorImage}\n onMouseEnter={onMouseEnterAnchor}\n />\n );\n });\n };\n\n return (\n <div className={styles.root} ref={setRef}>\n <div className={styles.mouseoutDiv} onMouseOut={handleMouseLeaveAnchors} onBlur={handleMouseLeaveAnchors} />\n <div\n id={CONNECTION_ANCHOR_DIV_ID}\n ref={highlightEllipseRef}\n className={styles.highlightElement}\n onMouseLeave={onMouseLeaveHighlightElement}\n />\n <div ref={setAnchorsRef}>{generateAnchors()}</div>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n root: css({\n position: 'absolute',\n display: 'none',\n }),\n mouseoutDiv: css({\n position: 'absolute',\n margin: '-30px',\n width: 'calc(100% + 60px)',\n height: 'calc(100% + 60px)',\n }),\n anchor: css({\n padding: `${ANCHOR_PADDING}px`,\n position: 'absolute',\n cursor: 'cursor',\n width: `calc(5px + 2 * ${ANCHOR_PADDING}px)`,\n height: `calc(5px + 2 * ${ANCHOR_PADDING}px)`,\n zIndex: 100,\n }),\n highlightElement: css({\n backgroundColor: '#00ff00',\n opacity: 0.3,\n position: 'absolute',\n cursor: 'cursor',\n pointerEvents: 'auto',\n width: '16px',\n height: '16px',\n borderRadius: theme.shape.radius.circle,\n display: 'none',\n zIndex: 110,\n }),\n});\n","import { first } from 'rxjs/operators';\n\nimport { Placement } from 'app/plugins/panel/canvas/panelcfg.gen';\nimport { LayerActionID } from 'app/plugins/panel/canvas/types';\n\nimport { ElementState } from './element';\nimport { FrameState } from './frame';\nimport { RootElement } from './root';\nimport { Scene } from './scene';\n\n// TODO: Consider whether or not reorderElements + updateElements should be moved to TreeNavigationEditor\n// Reorder elements in the DOM when rearranging them in the tree navigation editor\nexport const reorderElements = (src: ElementState, dest: ElementState, dragToGap: boolean, destPosition: number) => {\n switch (dragToGap) {\n case true:\n switch (destPosition) {\n case -1:\n // top of the tree\n if (src.parent instanceof FrameState) {\n // move outside the frame\n if (dest.parent) {\n updateElements(src, dest.parent, dest.parent.elements.length);\n src.updateData(dest.parent.scene.context);\n }\n } else {\n dest.parent?.reorderTree(src, dest, true);\n }\n break;\n default:\n if (dest.parent) {\n updateElements(src, dest.parent, dest.parent.elements.indexOf(dest));\n src.updateData(dest.parent.scene.context);\n }\n break;\n }\n break;\n case false:\n if (dest instanceof FrameState) {\n if (src.parent === dest) {\n // same frame parent\n src.parent?.reorderTree(src, dest, true);\n } else {\n updateElements(src, dest);\n src.updateData(dest.scene.context);\n }\n } else if (src.parent === dest.parent) {\n src.parent?.reorderTree(src, dest);\n } else {\n if (dest.parent) {\n updateElements(src, dest.parent);\n src.updateData(dest.parent.scene.context);\n }\n }\n break;\n }\n};\n\n// Reorders canvas elements\nconst updateElements = (src: ElementState, dest: FrameState | RootElement, idx: number | null = null) => {\n src.parent?.doAction(LayerActionID.Delete, src);\n src.parent = dest;\n\n const elementContainer = src.div?.getBoundingClientRect();\n src.setPlacementFromConstraint(elementContainer, dest.div?.getBoundingClientRect());\n\n const destIndex = idx ?? dest.elements.length - 1;\n dest.elements.splice(destIndex, 0, src);\n dest.scene.save();\n\n dest.reinitializeMoveable();\n};\n\n// Finds the element state if it exists for a given DOM element\nexport const findElementByTarget = (target: Element, sceneElements: ElementState[]): ElementState | undefined => {\n // We will probably want to add memoization to this as we are calling on drag / resize\n\n const stack = [...sceneElements];\n while (stack.length > 0) {\n const currentElement = stack.shift();\n\n if (currentElement && currentElement.div && currentElement.div === target) {\n return currentElement;\n }\n\n const nestedElements = currentElement instanceof FrameState ? currentElement.elements : [];\n for (const nestedElement of nestedElements) {\n stack.unshift(nestedElement);\n }\n }\n\n return undefined;\n};\n\n// Nest selected elements into a frame object\nexport const frameSelection = (scene: Scene) => {\n scene.selection.pipe(first()).subscribe((currentSelectedElements) => {\n const currentLayer = currentSelectedElements[0].parent!;\n\n const newLayer = new FrameState(\n {\n type: 'frame',\n name: scene.getNextElementName(true),\n elements: [],\n },\n scene,\n currentSelectedElements[0].parent\n );\n\n const framePlacement = generateFrameContainer(currentSelectedElements);\n\n newLayer.options.placement = framePlacement;\n\n currentSelectedElements.forEach((element: ElementState) => {\n const elementContainer = element.div?.getBoundingClientRect();\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n element.setPlacementFromConstraint(elementContainer, framePlacement as DOMRect);\n currentLayer.doAction(LayerActionID.Delete, element);\n newLayer.doAction(LayerActionID.Duplicate, element, false, false);\n });\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n newLayer.setPlacementFromConstraint(framePlacement as DOMRect, currentLayer.div?.getBoundingClientRect());\n\n currentLayer.elements.push(newLayer);\n\n scene.byName.set(newLayer.getName(), newLayer);\n\n scene.save();\n });\n};\n\n// Helper function to generate the a frame object based on the selected elements' dimensions\nconst generateFrameContainer = (elements: ElementState[]): Placement => {\n let minTop = Infinity;\n let minLeft = Infinity;\n let maxRight = 0;\n let maxBottom = 0;\n\n elements.forEach((element: ElementState) => {\n const elementContainer = element.div?.getBoundingClientRect();\n\n if (!elementContainer) {\n return;\n }\n\n if (minTop > elementContainer.top) {\n minTop = elementContainer.top;\n }\n\n if (minLeft > elementContainer.left) {\n minLeft = elementContainer.left;\n }\n\n if (maxRight < elementContainer.right) {\n maxRight = elementContainer.right;\n }\n\n if (maxBottom < elementContainer.bottom) {\n maxBottom = elementContainer.bottom;\n }\n });\n\n return {\n top: minTop,\n left: minLeft,\n width: maxRight - minLeft,\n height: maxBottom - minTop,\n };\n};\n","import { css } from '@emotion/css';\nimport { useEffect, useMemo, useRef, useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { DirectionDimensionConfig, DirectionDimensionMode, ConnectionDirection } from '@grafana/schema';\nimport { useStyles2 } from '@grafana/ui';\nimport { config } from 'app/core/config';\nimport { Scene } from 'app/features/canvas/runtime/scene';\n\nimport { ConnectionCoordinates } from '../../panelcfg.gen';\nimport { ConnectionState } from '../../types';\nimport {\n calculateAngle,\n calculateCoordinates,\n calculateDistance,\n calculateMidpoint,\n getConnectionStyles,\n getParentBoundingClientRect,\n} from '../../utils';\n\nimport { CONNECTION_VERTEX_ADD_ID, CONNECTION_VERTEX_ID } from './Connections';\n\ntype Props = {\n setSVGRef: (anchorElement: SVGSVGElement) => void;\n setLineRef: (anchorElement: SVGLineElement) => void;\n setSVGVertexRef: (anchorElement: SVGSVGElement) => void;\n setVertexPathRef: (anchorElement: SVGPathElement) => void;\n setVertexRef: (anchorElement: SVGCircleElement) => void;\n scene: Scene;\n};\n\nlet idCounter = 0;\nconst htmlElementTypes = ['input', 'textarea'];\n\nexport const ConnectionSVG = ({\n setSVGRef,\n setLineRef,\n setSVGVertexRef,\n setVertexPathRef,\n setVertexRef,\n scene,\n}: Props) => {\n const styles = useStyles2(getStyles);\n\n const headId = Date.now() + '_' + idCounter++;\n const CONNECTION_LINE_ID = useMemo(() => `connectionLineId-${headId}`, [headId]);\n const EDITOR_HEAD_ID = useMemo(() => `editorHead-${headId}`, [headId]);\n const defaultArrowColor = config.theme2.colors.text.primary;\n const defaultArrowSize = 2;\n const defaultArrowDirection: DirectionDimensionConfig = {\n mode: DirectionDimensionMode.Fixed,\n fixed: ConnectionDirection.Forward,\n };\n const maximumVertices = 10;\n\n const [selectedConnection, setSelectedConnection] = useState<ConnectionState | undefined>(undefined);\n\n // Need to use ref to ensure state is not stale in event handler\n const selectedConnectionRef = useRef(selectedConnection);\n useEffect(() => {\n selectedConnectionRef.current = selectedConnection;\n });\n\n useEffect(() => {\n if (scene.panel.context.instanceState?.selectedConnection) {\n setSelectedConnection(scene.panel.context.instanceState?.selectedConnection);\n }\n }, [scene.panel.context.instanceState?.selectedConnection]);\n\n const onKeyUp = (e: KeyboardEvent) => {\n const target = e.target;\n\n if (!(target instanceof HTMLElement)) {\n return;\n }\n\n if (htmlElementTypes.indexOf(target.nodeName.toLowerCase()) > -1) {\n return;\n }\n\n // Backspace (8) or delete (46)\n if (e.keyCode === 8 || e.keyCode === 46) {\n if (selectedConnectionRef.current && selectedConnectionRef.current.source) {\n selectedConnectionRef.current.source.options.connections =\n selectedConnectionRef.current.source.options.connections?.filter(\n (connection) => connection !== selectedConnectionRef.current?.info\n );\n selectedConnectionRef.current.source.onChange(selectedConnectionRef.current.source.options);\n\n setSelectedConnection(undefined);\n scene.connections.select(undefined);\n scene.connections.updateState();\n scene.save();\n }\n } else {\n // Prevent removing event listener if key is not delete\n return;\n }\n\n document.removeEventListener('keyup', onKeyUp);\n scene.selecto!.rootContainer!.removeEventListener('click', clearSelectedConnection);\n };\n\n const clearSelectedConnection = (event: MouseEvent) => {\n const eventTarget = event.target;\n\n const shouldResetSelectedConnection = !(\n eventTarget instanceof SVGLineElement && eventTarget.id === CONNECTION_LINE_ID\n );\n\n if (shouldResetSelectedConnection) {\n setSelectedConnection(undefined);\n scene.connections.select(undefined);\n }\n };\n\n const selectConnection = (connection: ConnectionState) => {\n if (scene.isEditingEnabled) {\n setSelectedConnection(connection);\n scene.connections.select(connection);\n\n document.addEventListener('keyup', onKeyUp);\n scene.selecto!.rootContainer!.addEventListener('click', clearSelectedConnection);\n }\n };\n\n // Figure out target and then target's relative coordinates drawing (if no target do parent)\n const renderConnections = () => {\n return (\n scene.connections.state\n // Render selected connection last, ensuring it is above other connections\n .sort((_a, b) => (selectedConnection === b && scene.panel.context.instanceState.selectedConnection ? -1 : 0))\n .map((v, idx) => {\n const { source, target, info, vertices, index } = v;\n const sourceRect = source.div?.getBoundingClientRect();\n const parent = source.div?.parentElement;\n const transformScale = scene.scale;\n const parentRect = getParentBoundingClientRect(scene);\n\n if (!sourceRect || !parent || !parentRect) {\n return;\n }\n\n const { x1, y1, x2, y2 } = calculateCoordinates(sourceRect, parentRect, info, target, transformScale);\n\n let { xStart, yStart, xEnd, yEnd } = { xStart: x1, yStart: y1, xEnd: x2, yEnd: y2 };\n if (v.sourceOriginal && v.targetOriginal) {\n xStart = v.sourceOriginal.x;\n yStart = v.sourceOriginal.y;\n xEnd = v.targetOriginal.x;\n yEnd = v.targetOriginal.y;\n } else if (source.options.connections) {\n // If original source or target coordinates are not set for the current connection, set them\n if (\n !source.options.connections[index].sourceOriginal ||\n !source.options.connections[index].targetOriginal\n ) {\n source.options.connections[index].sourceOriginal = { x: x1, y: y1 };\n source.options.connections[index].targetOriginal = { x: x2, y: y2 };\n }\n }\n\n const midpoint = calculateMidpoint(x1, y1, x2, y2);\n const xDist = xEnd - xStart;\n const yDist = yEnd - yStart;\n\n const { strokeColor, strokeWidth, strokeRadius, arrowDirection, lineStyle, shouldAnimate } =\n getConnectionStyles(\n info,\n scene,\n defaultArrowSize,\n defaultArrowDirection.fixed ?? ConnectionDirection.Forward\n );\n\n const isSelected = selectedConnection === v && scene.panel.context.instanceState.selectedConnection;\n\n const connectionCursorStyle = scene.isEditingEnabled ? 'grab' : '';\n const selectedStyles = { stroke: '#44aaff', strokeOpacity: 0.6, strokeWidth: strokeWidth + 5 };\n\n const CONNECTION_HEAD_ID_START = `connectionHeadStart-${headId + Math.random()}`;\n const CONNECTION_HEAD_ID_END = `connectionHeadEnd-${headId + Math.random()}`;\n\n const radius = strokeRadius;\n // Create vertex path and populate array of add vertex controls\n const addVertices: ConnectionCoordinates[] = [];\n let pathString = `M${x1} ${y1} `;\n if (vertices?.length) {\n vertices.map((vertex, index) => {\n const x = vertex.x;\n const y = vertex.y;\n\n // Convert vertex relative coordinates to scene coordinates\n const X = x * xDist + xStart;\n const Y = y * yDist + yStart;\n\n // Initialize coordinates for first arc control point\n let xa = X;\n let ya = Y;\n\n // Initialize coordinates for second arc control point\n let xb = X;\n let yb = Y;\n\n // Initialize half arc distance and segment angles\n let lHalfArc = 0;\n let angle1 = 0;\n let angle2 = 0;\n\n // Only calculate arcs if there is a radius\n if (radius) {\n if (index < vertices.length - 1) {\n const Xn = vertices[index + 1].x * xDist + xStart;\n const Yn = vertices[index + 1].y * yDist + yStart;\n if (index === 0) {\n // First vertex\n angle1 = calculateAngle(x1, y1, X, Y);\n angle2 = calculateAngle(X, Y, Xn, Yn);\n } else {\n // All vertices\n const previousVertex = vertices[index - 1];\n const Xp = previousVertex.x * xDist + xStart;\n const Yp = previousVertex.y * yDist + yStart;\n angle1 = calculateAngle(Xp, Yp, X, Y);\n angle2 = calculateAngle(X, Y, Xn, Yn);\n }\n } else {\n // Last vertex\n if (index > 0) {\n // Not also the first vertex\n const previousVertex = vertices[index - 1];\n const Xp = previousVertex.x * xDist + xStart;\n const Yp = previousVertex.y * yDist + yStart;\n angle1 = calculateAngle(Xp, Yp, X, Y);\n } else {\n angle1 = calculateAngle(x1, y1, X, Y);\n }\n angle2 = calculateAngle(X, Y, x2, y2);\n }\n\n // Calculate angle between two segments where arc will be placed\n const theta = angle2 - angle1; //radians\n // Attempt to determine if arc is counter clockwise (ccw)\n const ccw = theta < 0;\n // Half arc is used for arc control points\n lHalfArc = radius * Math.tan(theta / 2);\n if (ccw) {\n lHalfArc *= -1;\n }\n }\n\n if (index === 0) {\n // For first vertex\n addVertices.push(\n calculateMidpoint((x1 - xStart) / (xEnd - xStart), (y1 - yStart) / (yEnd - yStart), x, y)\n );\n\n // Only calculate arcs if there is a radius\n if (radius) {\n // Length of segment\n const lSegment = calculateDistance(X, Y, x1, y1);\n if (Math.abs(lHalfArc) > 0.5 * Math.abs(lSegment)) {\n // Limit curve control points to mid segment\n lHalfArc = 0.5 * lSegment;\n }\n // Default next point to last point\n let Xn = x2;\n let Yn = y2;\n if (index < vertices.length - 1) {\n // Not also the last point\n const nextVertex = vertices[index + 1];\n Xn = nextVertex.x * xDist + xStart;\n Yn = nextVertex.y * yDist + yStart;\n }\n\n // Length of next segment\n const lSegmentNext = calculateDistance(X, Y, Xn, Yn);\n if (Math.abs(lHalfArc) > 0.5 * Math.abs(lSegmentNext)) {\n // Limit curve control points to mid segment\n lHalfArc = 0.5 * lSegmentNext;\n }\n // Calculate arc control points\n const lDelta = lSegment - lHalfArc;\n xa = Math.round(lDelta * Math.cos(angle1) + x1);\n ya = Math.round(lDelta * Math.sin(angle1) + y1);\n xb = Math.round(lHalfArc * Math.cos(angle2) + X);\n yb = Math.round(lHalfArc * Math.sin(angle2) + Y);\n\n // Check if arc control points are inside of segment, otherwise swap sign\n if ((xa > X && xa > x1) || (xa < X && xa < x1)) {\n xa = (lDelta + 2 * lHalfArc) * Math.cos(angle1) + x1;\n ya = (lDelta + 2 * lHalfArc) * Math.sin(angle1) + y1;\n xb = -lHalfArc * Math.cos(angle2) + X;\n yb = -lHalfArc * Math.sin(angle2) + Y;\n }\n }\n } else {\n // For all other vertices\n const previousVertex = vertices[index - 1];\n addVertices.push(calculateMidpoint(previousVertex.x, previousVertex.y, x, y));\n\n // Only calculate arcs if there is a radius\n if (radius) {\n // Convert previous vertex relative coorindates to scene coordinates\n const Xp = previousVertex.x * xDist + xStart;\n const Yp = previousVertex.y * yDist + yStart;\n\n // Length of segment\n const lSegment = calculateDistance(X, Y, Xp, Yp);\n if (Math.abs(lHalfArc) > 0.5 * Math.abs(lSegment)) {\n // Limit curve control points to mid segment\n lHalfArc = 0.5 * lSegment;\n }\n // Default next point to last point\n let Xn = x2;\n let Yn = y2;\n if (index < vertices.length - 1) {\n // Not also the last point\n const nextVertex = vertices[index + 1];\n Xn = nextVertex.x * xDist + xStart;\n Yn = nextVertex.y * yDist + yStart;\n }\n\n // Length of next segment\n const lSegmentNext = calculateDistance(X, Y, Xn, Yn);\n if (Math.abs(lHalfArc) > 0.5 * Math.abs(lSegmentNext)) {\n // Limit curve control points to mid segment\n lHalfArc = 0.5 * lSegmentNext;\n }\n\n // Calculate arc control points\n const lDelta = lSegment - lHalfArc;\n xa = Math.round(lDelta * Math.cos(angle1) + Xp);\n ya = Math.round(lDelta * Math.sin(angle1) + Yp);\n xb = Math.round(lHalfArc * Math.cos(angle2) + X);\n yb = Math.round(lHalfArc * Math.sin(angle2) + Y);\n\n // Check if arc control points are inside of segment, otherwise swap sign\n if ((xa > X && xa > Xp) || (xa < X && xa < Xp)) {\n xa = (lDelta + 2 * lHalfArc) * Math.cos(angle1) + Xp;\n ya = (lDelta + 2 * lHalfArc) * Math.sin(angle1) + Yp;\n xb = -lHalfArc * Math.cos(angle2) + X;\n yb = -lHalfArc * Math.sin(angle2) + Y;\n }\n }\n }\n if (index === vertices.length - 1) {\n // For last vertex only\n addVertices.push(\n calculateMidpoint((x2 - xStart) / (xEnd - xStart), (y2 - yStart) / (yEnd - yStart), x, y)\n );\n }\n // Add segment to path\n pathString += `L${xa} ${ya} `;\n\n if (lHalfArc !== 0) {\n // Add arc if applicable\n pathString += `Q ${X} ${Y} ${xb} ${yb} `;\n }\n });\n // Add last segment\n pathString += `L${x2} ${y2}`;\n }\n\n const markerStart =\n arrowDirection === ConnectionDirection.Reverse || arrowDirection === ConnectionDirection.Both\n ? `url(#${CONNECTION_HEAD_ID_START})`\n : undefined;\n\n const markerEnd =\n arrowDirection === ConnectionDirection.Forward || arrowDirection === ConnectionDirection.Both\n ? `url(#${CONNECTION_HEAD_ID_END})`\n : undefined;\n\n const getAnimationDirection = () => {\n let values = '100;0';\n\n if (arrowDirection === ConnectionDirection.Reverse) {\n values = '0;100';\n }\n\n return values;\n };\n\n return (\n <svg className={styles.connection} key={idx}>\n <g onClick={() => selectConnection(v)}>\n <defs>\n <marker\n id={CONNECTION_HEAD_ID_START}\n markerWidth=\"10\"\n markerHeight=\"7\"\n refX=\"0\"\n refY=\"3.5\"\n orient=\"auto\"\n stroke={strokeColor}\n >\n <polygon points=\"10 0, 0 3.5, 10 7\" fill={strokeColor} />\n </marker>\n <marker\n id={CONNECTION_HEAD_ID_END}\n markerWidth=\"10\"\n markerHeight=\"7\"\n refX=\"10\"\n refY=\"3.5\"\n orient=\"auto\"\n stroke={strokeColor}\n >\n <polygon points=\"0 0, 10 3.5, 0 7\" fill={strokeColor} />\n </marker>\n </defs>\n {vertices?.length ? (\n <g>\n <path\n id={`${CONNECTION_LINE_ID}_transparent`}\n d={pathString}\n cursor={connectionCursorStyle}\n pointerEvents=\"auto\"\n stroke=\"transparent\"\n strokeWidth={15}\n fill={'none'}\n style={isSelected ? selectedStyles : {}}\n />\n <path\n d={pathString}\n stroke={strokeColor}\n strokeWidth={strokeWidth}\n strokeDasharray={lineStyle}\n strokeDashoffset={1}\n fill={'none'}\n markerEnd={markerEnd}\n markerStart={markerStart}\n >\n {shouldAnimate && (\n <animate\n attributeName=\"stroke-dashoffset\"\n values={getAnimationDirection()}\n dur=\"5s\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\"\n fill={'freeze'}\n />\n )}\n </path>\n {isSelected && (\n <g>\n {vertices.map((value, index) => {\n return (\n <circle\n id={CONNECTION_VERTEX_ID}\n data-index={index}\n key={`${CONNECTION_VERTEX_ID}${index}_${idx}`}\n cx={value.x * xDist + xStart}\n cy={value.y * yDist + yStart}\n r={5}\n stroke={strokeColor}\n className={styles.vertex}\n cursor={'crosshair'}\n pointerEvents=\"auto\"\n />\n );\n })}\n {vertices.length < maximumVertices &&\n addVertices.map((value, index) => {\n return (\n <circle\n id={CONNECTION_VERTEX_ADD_ID}\n data-index={index}\n key={`${CONNECTION_VERTEX_ADD_ID}${index}_${idx}`}\n cx={value.x * xDist + xStart}\n cy={value.y * yDist + yStart}\n r={4}\n stroke={strokeColor}\n className={styles.addVertex}\n cursor={'crosshair'}\n pointerEvents=\"auto\"\n />\n );\n })}\n </g>\n )}\n </g>\n ) : (\n <g>\n <line\n id={`${CONNECTION_LINE_ID}_transparent`}\n cursor={connectionCursorStyle}\n pointerEvents=\"auto\"\n stroke=\"transparent\"\n strokeWidth={15}\n style={isSelected ? selectedStyles : {}}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n />\n <line\n id={CONNECTION_LINE_ID}\n stroke={strokeColor}\n pointerEvents=\"auto\"\n strokeWidth={strokeWidth}\n markerEnd={markerEnd}\n markerStart={markerStart}\n strokeDasharray={lineStyle}\n strokeDashoffset={1}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n cursor={connectionCursorStyle}\n >\n {shouldAnimate && (\n <animate\n attributeName=\"stroke-dashoffset\"\n values={getAnimationDirection()}\n dur=\"5s\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\"\n fill={'freeze'}\n />\n )}\n </line>\n {isSelected && (\n <circle\n id={CONNECTION_VERTEX_ADD_ID}\n data-index={0}\n cx={midpoint.x}\n cy={midpoint.y}\n r={4}\n stroke={strokeColor}\n className={styles.addVertex}\n cursor={'crosshair'}\n pointerEvents=\"auto\"\n />\n )}\n </g>\n )}\n </g>\n </svg>\n );\n })\n );\n };\n\n return (\n <>\n <svg ref={setSVGRef} className={styles.editorSVG}>\n <defs>\n <marker\n id={EDITOR_HEAD_ID}\n markerWidth=\"10\"\n markerHeight=\"7\"\n refX=\"10\"\n refY=\"3.5\"\n orient=\"auto\"\n stroke={defaultArrowColor}\n >\n <polygon points=\"0 0, 10 3.5, 0 7\" fill={defaultArrowColor} />\n </marker>\n </defs>\n <line ref={setLineRef} stroke={defaultArrowColor} strokeWidth={2} markerEnd={`url(#${EDITOR_HEAD_ID})`} />\n </svg>\n <svg ref={setSVGVertexRef} className={styles.editorSVG}>\n <path\n ref={setVertexPathRef}\n stroke={defaultArrowColor}\n strokeWidth={2}\n strokeDasharray={'5, 5'}\n fill={'none'}\n />\n <circle ref={setVertexRef} stroke={defaultArrowColor} r={4} className={styles.vertex} />\n </svg>\n {renderConnections()}\n </>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n editorSVG: css({\n position: 'absolute',\n pointerEvents: 'none',\n width: '100%',\n height: '100%',\n zIndex: 1000,\n display: 'none',\n }),\n connection: css({\n position: 'absolute',\n width: '100%',\n height: '100%',\n zIndex: 1000,\n pointerEvents: 'none',\n }),\n vertex: css({\n fill: '#44aaff',\n strokeWidth: 2,\n }),\n addVertex: css({\n fill: '#44aaff',\n opacity: 0.5,\n strokeWidth: 1,\n }),\n});\n","import * as React from 'react';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { config } from '@grafana/runtime';\nimport { CanvasConnection, ConnectionCoordinates, ConnectionPath } from 'app/features/canvas/element';\nimport { ElementState } from 'app/features/canvas/runtime/element';\nimport { Scene } from 'app/features/canvas/runtime/scene';\nimport { findElementByTarget } from 'app/features/canvas/runtime/sceneElementManagement';\n\nimport { ConnectionState } from '../../types';\nimport {\n calculateAngle,\n calculateCoordinates,\n getConnections,\n getParentBoundingClientRect,\n isConnectionSource,\n isConnectionTarget,\n} from '../../utils';\n\nimport {\n CONNECTION_ANCHOR_ALT,\n ConnectionAnchors,\n CONNECTION_ANCHOR_HIGHLIGHT_OFFSET,\n ANCHORS,\n ANCHOR_PADDING,\n HALF_SIZE,\n} from './ConnectionAnchors';\nimport { ConnectionSVG } from './ConnectionSVG';\n\nexport const CONNECTION_VERTEX_ID = 'vertex';\nexport const CONNECTION_VERTEX_ADD_ID = 'vertexAdd';\nconst CONNECTION_VERTEX_ORTHO_TOLERANCE = 0.05; // Cartesian ratio against vertical or horizontal tolerance\nconst CONNECTION_VERTEX_SNAP_TOLERANCE = (5 / 180) * Math.PI; // Multi-segment snapping angle in radians to trigger vertex removal\n\nexport class Connections {\n scene: Scene;\n connectionAnchorDiv?: HTMLDivElement;\n anchorsDiv?: HTMLDivElement;\n connectionSVG?: SVGElement;\n connectionLine?: SVGLineElement;\n connectionSVGVertex?: SVGElement;\n connectionVertexPath?: SVGPathElement;\n connectionVertex?: SVGCircleElement;\n connectionSource?: ElementState;\n connectionTarget?: ElementState;\n // for back compatibility with Connections2\n connectionsSVG?: SVGElement;\n isDrawingConnection?: boolean;\n selectedVertexIndex?: number;\n didConnectionLeaveHighlight?: boolean;\n state: ConnectionState[] = [];\n readonly selection = new BehaviorSubject<ConnectionState | undefined>(undefined);\n\n constructor(scene: Scene) {\n this.scene = scene;\n this.updateState();\n }\n\n select = (connection: ConnectionState | undefined) => {\n if (connection === this.selection.value) {\n return;\n }\n this.selection.next(connection);\n };\n\n updateState = () => {\n const s = this.selection.value;\n this.state = getConnections(this.scene.byName);\n\n if (s) {\n for (let c of this.state) {\n if (c.source === s.source && c.index === s.index) {\n this.selection.next(c);\n break;\n }\n }\n }\n };\n\n setConnectionAnchorRef = (anchorElement: HTMLDivElement) => {\n this.connectionAnchorDiv = anchorElement;\n };\n\n setAnchorsRef = (anchorsElement: HTMLDivElement) => {\n this.anchorsDiv = anchorsElement;\n };\n\n setConnectionSVGRef = (connectionSVG: SVGSVGElement) => {\n this.connectionSVG = connectionSVG;\n };\n\n setConnectionLineRef = (connectionLine: SVGLineElement) => {\n this.connectionLine = connectionLine;\n };\n\n setConnectionSVGVertexRef = (connectionSVG: SVGSVGElement) => {\n this.connectionSVGVertex = connectionSVG;\n };\n\n setConnectionVertexRef = (connectionVertex: SVGCircleElement) => {\n this.connectionVertex = connectionVertex;\n };\n\n setConnectionVertexPathRef = (connectionVertexPath: SVGPathElement) => {\n this.connectionVertexPath = connectionVertexPath;\n };\n\n // Recursively find the first parent that is a canvas element\n findElementTarget = (element: Element): ElementState | undefined => {\n let elementTarget = undefined;\n\n // Cap recursion at the scene level\n if (element === this.scene.div) {\n return undefined;\n }\n\n elementTarget = findElementByTarget(element, this.scene.root.elements);\n\n if (!elementTarget && element.parentElement) {\n elementTarget = this.findElementTarget(element.parentElement);\n }\n\n return elementTarget;\n };\n\n handleMouseEnter = (event: React.MouseEvent) => {\n if (!(event.target instanceof Element) || !this.scene.isEditingEnabled) {\n return;\n }\n\n let element: ElementState | undefined = this.findElementTarget(event.target);\n\n if (!element) {\n console.log('no element');\n return;\n }\n\n if (this.isDrawingConnection) {\n this.connectionTarget = element;\n } else {\n this.connectionSource = element;\n if (!this.connectionSource) {\n console.log('no connection source');\n return;\n }\n }\n\n const customElementAnchors = element?.item.customConnectionAnchors || ANCHORS;\n // This type cast is necessary as TS doesn't understand that `Element` is an `HTMLElement`\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const anchors = Array.from(this.anchorsDiv?.children as HTMLCollectionOf<HTMLElement>);\n const anchorsAmount = customElementAnchors.length;\n\n // re-calculate the position of the existing anchors on hover\n // and hide the rest of the anchors if there are more than the custom ones\n anchors.forEach((anchor, index) => {\n if (index >= anchorsAmount) {\n anchor.style.display = 'none';\n } else {\n const { x, y } = customElementAnchors[index];\n anchor.style.top = `calc(${-y * 50 + 50}% - ${HALF_SIZE}px - ${ANCHOR_PADDING}px)`;\n anchor.style.left = `calc(${x * 50 + 50}% - ${HALF_SIZE}px - ${ANCHOR_PADDING}px)`;\n anchor.style.display = 'block';\n }\n });\n\n const elementBoundingRect = element.div!.getBoundingClientRect();\n const transformScale = this.scene.scale;\n const parentBoundingRect = getParentBoundingClientRect(this.scene);\n\n const relativeTop = elementBoundingRect.top - (parentBoundingRect?.top ?? 0);\n const relativeLeft = elementBoundingRect.left - (parentBoundingRect?.left ?? 0);\n\n if (this.connectionAnchorDiv) {\n this.connectionAnchorDiv.style.display = 'none';\n this.connectionAnchorDiv.style.display = 'block';\n this.connectionAnchorDiv.style.top = `${relativeTop / transformScale}px`;\n this.connectionAnchorDiv.style.left = `${relativeLeft / transformScale}px`;\n this.connectionAnchorDiv.style.height = `${elementBoundingRect.height / transformScale}px`;\n this.connectionAnchorDiv.style.width = `${elementBoundingRect.width / transformScale}px`;\n }\n };\n\n // Return boolean indicates if connection anchors were hidden or not\n handleMouseLeave = (event: React.MouseEvent | React.FocusEvent): boolean => {\n // If mouse is leaving INTO the anchor image, don't remove div\n if (\n event.relatedTarget instanceof HTMLImageElement &&\n event.relatedTarget.getAttribute('alt') === CONNECTION_ANCHOR_ALT\n ) {\n return false;\n }\n\n this.connectionTarget = undefined;\n this.connectionAnchorDiv!.style.display = 'none';\n return true;\n };\n\n connectionListener = (event: MouseEvent) => {\n event.preventDefault();\n\n if (!(this.connectionLine && this.scene.div && this.scene.div.parentElement)) {\n return;\n }\n\n const transformScale = this.scene.scale;\n const parentBoundingRect = getParentBoundingClientRect(this.scene);\n\n if (!parentBoundingRect) {\n return;\n }\n\n const x = event.pageX - (parentBoundingRect.x ?? 0);\n const y = event.pageY - (parentBoundingRect.y ?? 0);\n\n this.connectionLine.setAttribute('x2', `${x / transformScale}`);\n this.connectionLine.setAttribute('y2', `${y / transformScale}`);\n\n const connectionLineX1 = this.connectionLine.x1.baseVal.value;\n const connectionLineY1 = this.connectionLine.y1.baseVal.value;\n if (!this.didConnectionLeaveHighlight) {\n const connectionLength = Math.hypot(x - connectionLineX1, y - connectionLineY1);\n if (connectionLength > CONNECTION_ANCHOR_HIGHLIGHT_OFFSET && this.connectionSVG) {\n this.didConnectionLeaveHighlight = true;\n this.connectionSVG.style.display = 'block';\n this.isDrawingConnection = true;\n }\n }\n\n if (!event.buttons) {\n if (this.connectionSource && this.connectionSource.div && this.connectionSource.div.parentElement) {\n const sourceRect = this.connectionSource.div.getBoundingClientRect();\n\n const transformScale = this.scene.scale;\n const parentRect = getParentBoundingClientRect(this.scene);\n\n if (!parentRect) {\n return;\n }\n\n const sourceVerticalCenter = (sourceRect.top - parentRect.top + sourceRect.height / 2) / transformScale;\n const sourceHorizontalCenter = (sourceRect.left - parentRect.left + sourceRect.width / 2) / transformScale;\n\n // Convert from DOM coords to connection coords\n // TODO: Break this out into util function and add tests\n const sourceX = (connectionLineX1 - sourceHorizontalCenter) / (sourceRect.width / 2 / transformScale);\n const sourceY = (sourceVerticalCenter - connectionLineY1) / (sourceRect.height / 2 / transformScale);\n\n let targetX;\n let targetY;\n let targetName;\n\n if (this.connectionTarget && this.connectionTarget.div) {\n const targetRect = this.connectionTarget.div.getBoundingClientRect();\n\n const targetVerticalCenter = targetRect.top - parentRect.top + targetRect.height / 2;\n const targetHorizontalCenter = targetRect.left - parentRect.left + targetRect.width / 2;\n\n targetX = (x - targetHorizontalCenter) / (targetRect.width / 2);\n targetY = (targetVerticalCenter - y) / (targetRect.height / 2);\n targetName = this.connectionTarget.options.name;\n } else {\n const parentVerticalCenter = parentRect.height / 2;\n const parentHorizontalCenter = parentRect.width / 2;\n\n targetX = (x - parentHorizontalCenter) / (parentRect.width / 2);\n targetY = (parentVerticalCenter - y) / (parentRect.height / 2);\n }\n\n const connection = {\n source: {\n x: sourceX,\n y: sourceY,\n },\n target: {\n x: targetX,\n y: targetY,\n },\n targetName: targetName,\n color: {\n fixed: config.theme2.colors.text.primary,\n },\n size: {\n fixed: 2,\n min: 1,\n max: 10,\n },\n path: ConnectionPath.Straight,\n };\n\n const { options } = this.connectionSource;\n if (!options.connections) {\n options.connections = [];\n }\n if (this.didConnectionLeaveHighlight) {\n this.connectionSource.options.connections = [...options.connections, connection];\n this.connectionSource.onChange(this.connectionSource.options);\n }\n }\n\n if (this.connectionSVG) {\n this.connectionSVG.style.display = 'none';\n }\n\n if (this.scene.selecto && this.scene.selecto.rootContainer) {\n this.scene.selecto.rootContainer.style.cursor = 'default';\n this.scene.selecto.rootContainer.removeEventListener('mousemove', this.connectionListener);\n }\n\n this.isDrawingConnection = false;\n this.updateState();\n this.scene.save();\n }\n };\n\n // Handles mousemove and mouseup events when dragging an existing vertex\n vertexListener = (event: MouseEvent) => {\n this.scene.selecto!.rootContainer!.style.cursor = 'crosshair';\n\n event.preventDefault();\n\n if (!(this.connectionVertex && this.scene.div && this.scene.div.parentElement)) {\n return;\n }\n\n const transformScale = this.scene.scale;\n const parentBoundingRect = getParentBoundingClientRect(this.scene);\n\n if (!parentBoundingRect) {\n return;\n }\n\n const x = (event.pageX - parentBoundingRect.x) / transformScale;\n const y = (event.pageY - parentBoundingRect.y) / transformScale;\n\n this.connectionVertex?.setAttribute('cx', `${x}`);\n this.connectionVertex?.setAttribute('cy', `${y}`);\n\n const selectedValue = this.selection.value;\n const sourceRect = selectedValue!.source.div!.getBoundingClientRect();\n\n // calculate relative coordinates based on source and target coorindates of connection\n const { x1, y1, x2, y2 } = calculateCoordinates(\n sourceRect,\n parentBoundingRect,\n selectedValue?.info!,\n selectedValue!.target,\n transformScale\n );\n\n let { xStart, yStart, xEnd, yEnd } = { xStart: x1, yStart: y1, xEnd: x2, yEnd: y2 };\n if (selectedValue?.sourceOriginal && selectedValue.targetOriginal) {\n xStart = selectedValue.sourceOriginal.x;\n yStart = selectedValue.sourceOriginal.y;\n xEnd = selectedValue.targetOriginal.x;\n yEnd = selectedValue.targetOriginal.y;\n }\n\n const xDist = xEnd - xStart;\n const yDist = yEnd - yStart;\n\n let vx1 = x1;\n let vy1 = y1;\n let vx2 = x2;\n let vy2 = y2;\n if (selectedValue && selectedValue.vertices) {\n if (this.selectedVertexIndex !== undefined && this.selectedVertexIndex > 0) {\n vx1 = selectedValue.vertices[this.selectedVertexIndex - 1].x * xDist + xStart;\n vy1 = selectedValue.vertices[this.selectedVertexIndex - 1].y * yDist + yStart;\n }\n if (this.selectedVertexIndex !== undefined && this.selectedVertexIndex < selectedValue.vertices.length - 1) {\n vx2 = selectedValue.vertices[this.selectedVertexIndex + 1].x * xDist + xStart;\n vy2 = selectedValue.vertices[this.selectedVertexIndex + 1].y * yDist + yStart;\n }\n }\n\n // Check if slope before vertex and after vertex is within snapping tolerance\n let xSnap = x;\n let ySnap = y;\n let deleteVertex = false;\n // Ignore if control key being held\n if (!event.ctrlKey) {\n // Check if segment before and after vertex are close to vertical or horizontal\n const verticalBefore = Math.abs((x - vx1) / (y - vy1)) < CONNECTION_VERTEX_ORTHO_TOLERANCE;\n const verticalAfter = Math.abs((x - vx2) / (y - vy2)) < CONNECTION_VERTEX_ORTHO_TOLERANCE;\n const horizontalBefore = Math.abs((y - vy1) / (x - vx1)) < CONNECTION_VERTEX_ORTHO_TOLERANCE;\n const horizontalAfter = Math.abs((y - vy2) / (x - vx2)) < CONNECTION_VERTEX_ORTHO_TOLERANCE;\n\n if (verticalBefore) {\n xSnap = vx1;\n } else if (verticalAfter) {\n xSnap = vx2;\n }\n if (horizontalBefore) {\n ySnap = vy1;\n } else if (horizontalAfter) {\n ySnap = vy2;\n }\n\n if ((verticalBefore || verticalAfter) && (horizontalBefore || horizontalAfter)) {\n this.scene.selecto!.rootContainer!.style.cursor = 'move';\n } else if (verticalBefore || verticalAfter) {\n this.scene.selecto!.rootContainer!.style.cursor = 'col-resize';\n } else if (horizontalBefore || horizontalAfter) {\n this.scene.selecto!.rootContainer!.style.cursor = 'row-resize';\n }\n\n const angleOverall = calculateAngle(vx1, vy1, vx2, vy2);\n const angleBefore = calculateAngle(vx1, vy1, x, y);\n deleteVertex = Math.abs(angleBefore - angleOverall) < CONNECTION_VERTEX_SNAP_TOLERANCE;\n }\n\n if (deleteVertex) {\n // Display temporary vertex removal\n this.connectionVertexPath?.setAttribute('d', `M${vx1} ${vy1} L${vx2} ${vy2}`);\n this.connectionSVGVertex!.style.display = 'block';\n this.connectionVertex.style.display = 'none';\n } else {\n // Display temporary vertex during drag\n this.connectionVertexPath?.setAttribute('d', `M${vx1} ${vy1} L${xSnap} ${ySnap} L${vx2} ${vy2}`);\n this.connectionSVGVertex!.style.display = 'block';\n this.connectionVertex.style.display = 'block';\n }\n\n // Handle mouseup\n if (!event.buttons) {\n // Remove existing event listener\n this.scene.selecto?.rootContainer?.removeEventListener('mousemove', this.vertexListener);\n this.scene.selecto?.rootContainer?.removeEventListener('mouseup', this.vertexListener);\n this.scene.selecto!.rootContainer!.style.cursor = 'auto';\n this.connectionSVGVertex!.style.display = 'none';\n\n // call onChange here and update appropriate index of connection vertices array\n const connectionIndex = selectedValue?.index;\n const vertexIndex = this.selectedVertexIndex;\n\n if (connectionIndex !== undefined && vertexIndex !== undefined) {\n const currentSource = selectedValue!.source;\n if (currentSource.options.connections) {\n const currentConnections = [...currentSource.options.connections];\n if (currentConnections[connectionIndex].vertices) {\n const currentVertices = [...currentConnections[connectionIndex].vertices!];\n\n // TODO for vertex removal, clear out originals?\n if (deleteVertex) {\n currentVertices.splice(vertexIndex, 1);\n } else {\n const currentVertex = { ...currentVertices[vertexIndex] };\n\n currentVertex.x = (xSnap - xStart) / xDist;\n currentVertex.y = (ySnap - yStart) / yDist;\n\n currentVertices[vertexIndex] = currentVertex;\n }\n\n currentConnections[connectionIndex] = {\n ...currentConnections[connectionIndex],\n vertices: currentVertices,\n };\n\n // Update save model\n currentSource.onChange({ ...currentSource.options, connections: currentConnections });\n this.updateState();\n this.scene.save();\n }\n }\n }\n }\n };\n\n // Handles mousemove and mouseup events when dragging a new vertex\n vertexAddListener = (event: MouseEvent) => {\n this.scene.selecto!.rootContainer!.style.cursor = 'crosshair';\n\n event.preventDefault();\n\n if (!(this.connectionVertex && this.scene.div && this.scene.div.parentElement)) {\n return;\n }\n\n const transformScale = this.scene.scale;\n const parentBoundingRect = getParentBoundingClientRect(this.scene);\n\n if (!parentBoundingRect) {\n return;\n }\n\n const x = (event.pageX - parentBoundingRect.x) / transformScale;\n const y = (event.pageY - parentBoundingRect.y) / transformScale;\n\n this.connectionVertex?.setAttribute('cx', `${x}`);\n this.connectionVertex?.setAttribute('cy', `${y}`);\n\n const selectedValue = this.selection.value;\n const sourceRect = selectedValue!.source.div!.getBoundingClientRect();\n\n // calculate relative coordinates based on source and target coorindates of connection\n const { x1, y1, x2, y2 } = calculateCoordinates(\n sourceRect,\n parentBoundingRect,\n selectedValue?.info!,\n selectedValue!.target,\n transformScale\n );\n\n let { xStart, yStart, xEnd, yEnd } = { xStart: x1, yStart: y1, xEnd: x2, yEnd: y2 };\n if (selectedValue?.sourceOriginal && selectedValue.targetOriginal) {\n xStart = selectedValue.sourceOriginal.x;\n yStart = selectedValue.sourceOriginal.y;\n xEnd = selectedValue.targetOriginal.x;\n yEnd = selectedValue.targetOriginal.y;\n }\n\n const xDist = xEnd - xStart;\n const yDist = yEnd - yStart;\n\n let vx1 = x1;\n let vy1 = y1;\n let vx2 = x2;\n let vy2 = y2;\n if (selectedValue && selectedValue.vertices) {\n if (this.selectedVertexIndex !== undefined && this.selectedVertexIndex > 0) {\n vx1 = selectedValue.vertices[this.selectedVertexIndex - 1].x * xDist + xStart;\n vy1 = selectedValue.vertices[this.selectedVertexIndex - 1].y * yDist + yStart;\n }\n if (this.selectedVertexIndex !== undefined && this.selectedVertexIndex < selectedValue.vertices.length) {\n vx2 = selectedValue.vertices[this.selectedVertexIndex].x * xDist + xStart;\n vy2 = selectedValue.vertices[this.selectedVertexIndex].y * yDist + yStart;\n }\n }\n\n // Check if slope before vertex and after vertex is within snapping tolerance\n let xSnap = x;\n let ySnap = y;\n // Ignore if control key being held\n if (!event.ctrlKey) {\n // Check if segment before and after vertex are close to vertical or horizontal\n const verticalBefore = Math.abs((x - vx1) / (y - vy1)) < CONNECTION_VERTEX_ORTHO_TOLERANCE;\n const verticalAfter = Math.abs((x - vx2) / (y - vy2)) < CONNECTION_VERTEX_ORTHO_TOLERANCE;\n const horizontalBefore = Math.abs((y - vy1) / (x - vx1)) < CONNECTION_VERTEX_ORTHO_TOLERANCE;\n const horizontalAfter = Math.abs((y - vy2) / (x - vx2)) < CONNECTION_VERTEX_ORTHO_TOLERANCE;\n\n if (verticalBefore) {\n xSnap = vx1;\n } else if (verticalAfter) {\n xSnap = vx2;\n }\n if (horizontalBefore) {\n ySnap = vy1;\n } else if (horizontalAfter) {\n ySnap = vy2;\n }\n\n if ((verticalBefore || verticalAfter) && (horizontalBefore || horizontalAfter)) {\n this.scene.selecto!.rootContainer!.style.cursor = 'move';\n } else if (verticalBefore || verticalAfter) {\n this.scene.selecto!.rootContainer!.style.cursor = 'col-resize';\n } else if (horizontalBefore || horizontalAfter) {\n this.scene.selecto!.rootContainer!.style.cursor = 'row-resize';\n }\n }\n\n this.connectionVertexPath?.setAttribute('d', `M${vx1} ${vy1} L${xSnap} ${ySnap} L${vx2} ${vy2}`);\n this.connectionSVGVertex!.style.display = 'block';\n this.connectionVertex.style.display = 'block';\n\n // Handle mouseup\n if (!event.buttons) {\n // Remove existing event listener\n this.scene.selecto?.rootContainer?.removeEventListener('mousemove', this.vertexAddListener);\n this.scene.selecto?.rootContainer?.removeEventListener('mouseup', this.vertexAddListener);\n this.scene.selecto!.rootContainer!.style.cursor = 'auto';\n this.connectionSVGVertex!.style.display = 'none';\n\n // call onChange here and insert new vertex at appropriate index of connection vertices array\n const connectionIndex = selectedValue?.index;\n const vertexIndex = this.selectedVertexIndex;\n\n if (connectionIndex !== undefined && vertexIndex !== undefined) {\n const currentSource = selectedValue!.source;\n if (currentSource.options.connections) {\n const currentConnections = [...currentSource.options.connections];\n const newVertex = { x: (x - xStart) / xDist, y: (y - yStart) / yDist };\n if (currentConnections[connectionIndex].vertices) {\n const currentVertices = [...currentConnections[connectionIndex].vertices!];\n currentVertices.splice(vertexIndex, 0, newVertex);\n currentConnections[connectionIndex] = {\n ...currentConnections[connectionIndex],\n vertices: currentVertices,\n };\n } else {\n // For first vertex creation\n const currentVertices: ConnectionCoordinates[] = [newVertex];\n currentConnections[connectionIndex] = {\n ...currentConnections[connectionIndex],\n vertices: currentVertices,\n };\n }\n\n // Check for original state\n if (\n !currentConnections[connectionIndex].sourceOriginal ||\n !currentConnections[connectionIndex].targetOriginal\n ) {\n currentConnections[connectionIndex] = {\n ...currentConnections[connectionIndex],\n sourceOriginal: { x: x1, y: y1 },\n targetOriginal: { x: x2, y: y2 },\n };\n }\n // Update save model\n currentSource.onChange({ ...currentSource.options, connections: currentConnections });\n this.updateState();\n this.scene.save();\n }\n }\n }\n };\n\n handleConnectionDragStart = (selectedTarget: HTMLElement, clientX: number, clientY: number) => {\n this.scene.selecto!.rootContainer!.style.cursor = 'crosshair';\n if (this.connectionSVG && this.connectionLine && this.scene.div && this.scene.div.parentElement) {\n const connectionStartTargetBox = selectedTarget.getBoundingClientRect();\n\n const transformScale = this.scene.scale;\n const parentBoundingRect = getParentBoundingClientRect(this.scene);\n\n if (!parentBoundingRect) {\n return;\n }\n\n // Multiply by transform scale to calculate the correct scaled offset\n const connectionAnchorOffsetX = CONNECTION_ANCHOR_HIGHLIGHT_OFFSET * transformScale;\n const connectionAnchorOffsetY = CONNECTION_ANCHOR_HIGHLIGHT_OFFSET * transformScale;\n\n const x = (connectionStartTargetBox.x - parentBoundingRect.x + connectionAnchorOffsetX) / transformScale;\n const y = (connectionStartTargetBox.y - parentBoundingRect.y + connectionAnchorOffsetY) / transformScale;\n\n const mouseX = clientX - parentBoundingRect.x;\n const mouseY = clientY - parentBoundingRect.y;\n\n this.connectionLine.setAttribute('x1', `${x}`);\n this.connectionLine.setAttribute('y1', `${y}`);\n this.connectionLine.setAttribute('x2', `${mouseX}`);\n this.connectionLine.setAttribute('y2', `${mouseY}`);\n this.didConnectionLeaveHighlight = false;\n }\n\n this.scene.selecto?.rootContainer?.addEventListener('mousemove', this.connectionListener);\n };\n\n // Add event listener at root container during existing vertex drag\n handleVertexDragStart = (selectedTarget: HTMLElement) => {\n // Get vertex index from selected target data\n this.selectedVertexIndex = Number(selectedTarget.getAttribute('data-index'));\n\n this.scene.selecto?.rootContainer?.addEventListener('mousemove', this.vertexListener);\n this.scene.selecto?.rootContainer?.addEventListener('mouseup', this.vertexListener);\n };\n\n // Add event listener at root container during creation of new vertex\n handleVertexAddDragStart = (selectedTarget: HTMLElement) => {\n // Get vertex index from selected target data\n this.selectedVertexIndex = Number(selectedTarget.getAttribute('data-index'));\n\n this.scene.selecto?.rootContainer?.addEventListener('mousemove', this.vertexAddListener);\n this.scene.selecto?.rootContainer?.addEventListener('mouseup', this.vertexAddListener);\n };\n\n onChange = (current: ConnectionState, update: CanvasConnection) => {\n const connections = current.source.options.connections?.splice(0) ?? [];\n connections[current.index] = update;\n current.source.onChange({ ...current.source.options, connections });\n this.updateState();\n };\n\n // used for moveable actions\n connectionsNeedUpdate = (element: ElementState): boolean => {\n return isConnectionSource(element) || isConnectionTarget(element, this.scene.byName);\n };\n\n render() {\n return (\n <>\n <ConnectionAnchors\n setRef={this.setConnectionAnchorRef}\n setAnchorsRef={this.setAnchorsRef}\n handleMouseLeave={this.handleMouseLeave}\n />\n <ConnectionSVG\n setSVGRef={this.setConnectionSVGRef}\n setLineRef={this.setConnectionLineRef}\n setSVGVertexRef={this.setConnectionSVGVertexRef}\n setVertexPathRef={this.setConnectionVertexPathRef}\n setVertexRef={this.setConnectionVertexRef}\n scene={this.scene}\n />\n </>\n );\n }\n}\n","import { MoveableManagerInterface, Renderer } from 'moveable';\n\nimport { VerticalConstraint, HorizontalConstraint } from 'app/plugins/panel/canvas/panelcfg.gen';\n\nimport { Scene } from './scene';\nimport { findElementByTarget } from './sceneElementManagement';\n\nexport const settingsViewable = (scene: Scene) => ({\n name: 'settingsViewable',\n props: [],\n events: [],\n render(moveable: MoveableManagerInterface<unknown, unknown>, React: Renderer) {\n // If selection is more than 1 element don't display settings button\n if (scene.selecto?.getSelectedTargets() && scene.selecto?.getSelectedTargets().length > 1) {\n return;\n }\n\n const openSettings = (x: number, y: number) => {\n const container = moveable.getContainer();\n const evt = new PointerEvent('contextmenu', { clientX: x, clientY: y });\n container.dispatchEvent(evt);\n };\n\n const onClick = (event: React.MouseEvent) => {\n openSettings(event.clientX, event.clientY);\n };\n\n const onKeyPress = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter') {\n const rect = event.currentTarget.getBoundingClientRect();\n openSettings(rect.x, rect.y);\n }\n };\n\n const rect = moveable.getRect();\n return (\n <div\n key={'settings-viewable'}\n className={'moveable-settings'}\n style={{\n position: 'absolute',\n left: `${rect.width + 18}px`,\n top: '0px',\n color: 'white',\n fontSize: '18px',\n cursor: 'pointer',\n userSelect: 'none',\n willChange: 'transform',\n transform: 'translate(-50%, 0px)',\n zIndex: 100,\n }}\n onClick={onClick}\n onKeyDown={onKeyPress}\n role=\"button\"\n tabIndex={0}\n >\n {``}\n ⚙️\n {``}\n </div>\n );\n },\n});\n\nexport const dimensionViewable = {\n name: 'dimensionViewable',\n props: [],\n events: [],\n render(moveable: MoveableManagerInterface<unknown, unknown>, React: Renderer) {\n const rect = moveable.getRect();\n return (\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n <div\n key={'dimension-viewable'}\n className={'moveable-dimension'}\n style={{\n position: 'absolute',\n left: `${rect.width / 2}px`,\n top: `${rect.height + 20}px`,\n background: '#4af',\n borderRadius: '2px',\n padding: '2px 4px',\n color: 'white',\n fontSize: '13px',\n whiteSpace: 'nowrap',\n fontWeight: 'bold',\n willChange: 'transform',\n transform: 'translate(-50%, 0px)',\n zIndex: 100,\n }}\n >\n {Math.round(rect.offsetWidth)} x {Math.round(rect.offsetHeight)}\n </div>\n );\n },\n};\n\nexport const constraintViewable = (scene: Scene) => ({\n name: 'constraintViewable',\n props: [],\n events: [],\n render(moveable: MoveableManagerInterface<unknown, unknown>, React: Renderer) {\n const rect = moveable.getRect();\n const targetElement = findElementByTarget(moveable.state.target!, scene.root.elements);\n\n // If selection is more than 1 element don't display constraint visualizations\n if (scene.selecto?.getSelectedTargets() && scene.selecto?.getSelectedTargets().length > 1) {\n return;\n }\n\n let verticalConstraintVisualization = null;\n let horizontalConstraintVisualization = null;\n\n const constraint = targetElement?.tempConstraint ?? targetElement?.options.constraint ?? {};\n\n const borderStyle = '1px dashed #4af';\n\n const centerIndicatorLineOne = React.createElement('div', {\n style: {\n position: 'absolute',\n left: `${rect.width / 2}px`,\n top: `${rect.height / 2 - rect.height / 16}px`,\n borderLeft: borderStyle,\n height: `${rect.height / 8}px`,\n transform: 'rotate(45deg)',\n },\n });\n\n const centerIndicatorLineTwo = React.createElement('div', {\n style: {\n position: 'absolute',\n left: `${rect.width / 2}px`,\n top: `${rect.height / 2 - rect.height / 16}px`,\n borderLeft: borderStyle,\n height: `${rect.height / 8}px`,\n transform: 'rotate(-45deg)',\n },\n });\n\n const centerIndicator = React.createElement('div', {}, [centerIndicatorLineOne, centerIndicatorLineTwo]);\n\n const verticalConstraintTop = React.createElement('div', {\n style: {\n position: 'absolute',\n left: `${rect.width / 2}px`,\n bottom: '0px',\n borderLeft: borderStyle,\n height: '100vh',\n },\n });\n\n const verticalConstraintBottom = React.createElement('div', {\n style: {\n position: 'absolute',\n left: `${rect.width / 2}px`,\n top: `${rect.height}px`,\n borderLeft: borderStyle,\n height: '100vh',\n },\n });\n\n const verticalConstraintTopBottom = React.createElement('div', {}, [\n verticalConstraintTop,\n verticalConstraintBottom,\n ]);\n\n const verticalConstraintCenterLine = React.createElement('div', {\n style: {\n position: 'absolute',\n left: `${rect.width / 2}px`,\n top: `${rect.height / 4}px`,\n borderLeft: borderStyle,\n height: `${rect.height / 2}px`,\n },\n });\n\n const verticalConstraintCenter = React.createElement('div', {}, [verticalConstraintCenterLine, centerIndicator]);\n\n switch (constraint.vertical) {\n case VerticalConstraint.Top:\n verticalConstraintVisualization = verticalConstraintTop;\n break;\n case VerticalConstraint.Bottom:\n verticalConstraintVisualization = verticalConstraintBottom;\n break;\n case VerticalConstraint.TopBottom:\n verticalConstraintVisualization = verticalConstraintTopBottom;\n break;\n case VerticalConstraint.Center:\n verticalConstraintVisualization = verticalConstraintCenter;\n break;\n }\n\n const horizontalConstraintLeft = React.createElement('div', {\n style: {\n position: 'absolute',\n right: '0px',\n top: `${rect.height / 2}px`,\n borderTop: borderStyle,\n width: '100vw',\n },\n });\n\n const horizontalConstraintRight = React.createElement('div', {\n style: {\n position: 'absolute',\n left: `${rect.width}px`,\n top: `${rect.height / 2}px`,\n borderTop: borderStyle,\n width: '100vw',\n },\n });\n\n const horizontalConstraintLeftRight = React.createElement('div', {}, [\n horizontalConstraintLeft,\n horizontalConstraintRight,\n ]);\n\n const horizontalConstraintCenterLine = React.createElement('div', {\n style: {\n position: 'absolute',\n left: `${rect.width / 4}px`,\n top: `${rect.height / 2}px`,\n borderTop: borderStyle,\n width: `${rect.width / 2}px`,\n },\n });\n\n const horizontalConstraintCenter = React.createElement('div', {}, [\n horizontalConstraintCenterLine,\n centerIndicator,\n ]);\n\n switch (constraint.horizontal) {\n case HorizontalConstraint.Left:\n horizontalConstraintVisualization = horizontalConstraintLeft;\n break;\n case HorizontalConstraint.Right:\n horizontalConstraintVisualization = horizontalConstraintRight;\n break;\n case HorizontalConstraint.LeftRight:\n horizontalConstraintVisualization = horizontalConstraintLeftRight;\n break;\n case HorizontalConstraint.Center:\n horizontalConstraintVisualization = horizontalConstraintCenter;\n break;\n }\n\n const constraintVisualization = React.createElement('div', {}, [\n verticalConstraintVisualization,\n horizontalConstraintVisualization,\n ]);\n\n return constraintVisualization;\n },\n});\n","import InfiniteViewer from 'infinite-viewer';\nimport Moveable from 'moveable';\nimport Selecto from 'selecto';\n\nimport { config } from 'app/core/config';\nimport { CONNECTION_ANCHOR_DIV_ID } from 'app/plugins/panel/canvas/components/connections/ConnectionAnchors';\nimport {\n CONNECTION_VERTEX_ID,\n CONNECTION_VERTEX_ADD_ID,\n} from 'app/plugins/panel/canvas/components/connections/Connections';\nimport { VerticalConstraint, HorizontalConstraint } from 'app/plugins/panel/canvas/panelcfg.gen';\n\nimport { dimensionViewable, constraintViewable, settingsViewable } from './ables';\nimport { ElementState } from './element';\nimport { FrameState } from './frame';\nimport { Scene } from './scene';\nimport { findElementByTarget } from './sceneElementManagement';\n\nconst ZOOM_RANGE = [0.1, 4]; // Minimum zoom 0.1x (10%), maximum zoom 4x (400%)\n\n// Helper function that disables custom able functionality\nconst disableCustomables = (moveable: Moveable) => {\n moveable!.props = {\n dimensionViewable: false,\n constraintViewable: false,\n settingsViewable: false,\n };\n};\n\n// Helper function that enables custom able functionality\nconst enableCustomables = (moveable: Moveable) => {\n moveable!.props = {\n dimensionViewable: true,\n constraintViewable: true,\n settingsViewable: true,\n };\n};\n\n/* \n Helper function that determines if the selected DOM target is currently selected in selecto state.\n\n For context canvas elements each have a different level of nesting.\n Given this, we need to traverse up the DOM tree from the selected target to find\n the element's registered selecto div to determine if the selected target is already selected in selecto state.\n See `initMoveable` and `generateTargetElements` for more context.\n*/\nconst isTargetAlreadySelected = (selectedTarget: HTMLElement, scene: Scene) => {\n let selectedTargetParent = selectedTarget.parentElement;\n let isTargetAlreadySelected = false;\n\n // Traverse up the DOM tree to check if the selected target is already selected\n while (selectedTargetParent) {\n // If the selected target is the scene's root element div, break the loop\n if (selectedTargetParent === scene.root.div) {\n break;\n }\n\n // Check if the selected target is already selected\n isTargetAlreadySelected = scene.selecto?.getSelectedTargets().includes(selectedTargetParent) ?? false;\n if (isTargetAlreadySelected) {\n break;\n }\n\n // Move up the DOM tree to the next parent element to check\n selectedTargetParent = selectedTargetParent.parentElement;\n }\n\n return isTargetAlreadySelected;\n};\n\n// Generate HTML element divs for every canvas element to configure selecto / moveable\nconst generateTargetElements = (rootElements: ElementState[]): HTMLDivElement[] => {\n let targetElements: HTMLDivElement[] = [];\n\n const stack = [...rootElements];\n while (stack.length > 0) {\n const currentElement = stack.shift();\n\n if (currentElement && currentElement.div) {\n targetElements.push(currentElement.div);\n }\n\n const nestedElements = currentElement instanceof FrameState ? currentElement.elements : [];\n for (const nestedElement of nestedElements) {\n stack.unshift(nestedElement);\n }\n }\n\n return targetElements;\n};\n\n// Main entry point for initializing / updating moveable and selecto configuration\nexport const initMoveable = (destroySelecto = false, allowChanges = true, scene: Scene) => {\n const targetElements = generateTargetElements(scene.root.elements);\n\n if (destroySelecto && scene.selecto) {\n scene.selecto.destroy();\n }\n\n scene.selecto = new Selecto({\n rootContainer: config.featureToggles.canvasPanelPanZoom ? scene.viewerDiv : scene.div,\n dragContainer: config.featureToggles.canvasPanelPanZoom ? scene.viewerDiv : scene.div,\n selectableTargets: targetElements,\n toggleContinueSelect: 'shift',\n selectFromInside: false,\n hitRate: 0,\n });\n\n const snapDirections = { top: true, left: true, bottom: true, right: true, center: true, middle: true };\n const elementSnapDirections = { top: true, left: true, bottom: true, right: true, center: true, middle: true };\n\n scene.moveable = new Moveable(config.featureToggles.canvasPanelPanZoom ? scene.viewerDiv! : scene.div!, {\n draggable: allowChanges && !scene.editModeEnabled.getValue(),\n resizable: allowChanges,\n\n // Setup rotatable\n rotatable: allowChanges,\n throttleRotate: 5,\n rotationPosition: ['top', 'right'],\n\n // Setup snappable\n snappable: allowChanges,\n snapDirections: snapDirections,\n elementSnapDirections: elementSnapDirections,\n elementGuidelines: targetElements,\n\n ables: [dimensionViewable, constraintViewable(scene), settingsViewable(scene)],\n props: {\n dimensionViewable: allowChanges,\n constraintViewable: allowChanges,\n settingsViewable: allowChanges,\n },\n origin: false,\n })\n .on('rotateStart', () => {\n disableCustomables(scene.moveable!);\n })\n .on('rotate', (event) => {\n const targetedElement = findElementByTarget(event.target, scene.root.elements);\n\n if (targetedElement) {\n targetedElement.applyRotate(event);\n\n if (config.featureToggles.canvasPanelPanZoom) {\n if (scene.connections.connectionsNeedUpdate(targetedElement) && scene.moveableActionCallback) {\n scene.moveableActionCallback(true);\n }\n }\n }\n })\n .on('rotateGroup', (e) => {\n for (let event of e.events) {\n const targetedElement = findElementByTarget(event.target, scene.root.elements);\n if (targetedElement) {\n targetedElement.applyRotate(event);\n }\n }\n })\n .on('rotateEnd', () => {\n enableCustomables(scene.moveable!);\n // Update the editor with the new rotation\n scene.moved.next(Date.now());\n })\n .on('click', (event) => {\n const targetedElement = findElementByTarget(event.target, scene.root.elements);\n let elementSupportsEditing = false;\n if (targetedElement) {\n elementSupportsEditing = targetedElement.item.hasEditMode ?? false;\n }\n\n if (event.isDouble && allowChanges && !scene.editModeEnabled.getValue() && elementSupportsEditing) {\n scene.editModeEnabled.next(true);\n }\n })\n .on('clickGroup', (event) => {\n scene.selecto!.clickTarget(event.inputEvent, event.inputTarget);\n })\n .on('dragStart', (event) => {\n scene.ignoreDataUpdate = true;\n scene.setNonTargetPointerEvents(event.target, true);\n\n // Remove the selected element from the snappable guidelines\n if (scene.moveable && scene.moveable.elementGuidelines) {\n const targetIndex = scene.moveable.elementGuidelines.indexOf(event.target);\n if (targetIndex > -1) {\n scene.moveable.elementGuidelines.splice(targetIndex, 1);\n }\n }\n })\n .on('dragGroupStart', (e) => {\n scene.ignoreDataUpdate = true;\n\n // Remove the selected elements from the snappable guidelines\n if (scene.moveable && scene.moveable.elementGuidelines) {\n for (let event of e.events) {\n const targetIndex = scene.moveable.elementGuidelines.indexOf(event.target);\n if (targetIndex > -1) {\n scene.moveable.elementGuidelines.splice(targetIndex, 1);\n }\n }\n }\n })\n .on('drag', (event) => {\n const targetedElement = findElementByTarget(event.target, scene.root.elements);\n if (targetedElement) {\n targetedElement.applyDrag(event);\n\n if (scene.connections.connectionsNeedUpdate(targetedElement) && scene.moveableActionCallback) {\n scene.moveableActionCallback(true);\n }\n }\n })\n .on('dragGroup', (e) => {\n let needsUpdate = false;\n for (let event of e.events) {\n const targetedElement = findElementByTarget(event.target, scene.root.elements);\n if (targetedElement) {\n targetedElement.applyDrag(event);\n if (!needsUpdate) {\n needsUpdate = scene.connections.connectionsNeedUpdate(targetedElement);\n }\n }\n }\n\n if (needsUpdate && scene.moveableActionCallback) {\n scene.moveableActionCallback(true);\n }\n })\n .on('dragGroupEnd', (e) => {\n e.events.forEach((event) => {\n const targetedElement = findElementByTarget(event.target, scene.root.elements);\n if (targetedElement) {\n targetedElement.setPlacementFromConstraint(undefined, undefined, scene.scale);\n\n // re-add the selected elements to the snappable guidelines\n if (scene.moveable && scene.moveable.elementGuidelines) {\n scene.moveable.elementGuidelines.push(event.target);\n }\n }\n });\n\n scene.moved.next(Date.now());\n scene.ignoreDataUpdate = false;\n })\n .on('dragEnd', (event) => {\n const targetedElement = findElementByTarget(event.target, scene.root.elements);\n if (targetedElement) {\n targetedElement.setPlacementFromConstraint(undefined, undefined, scene.scale);\n }\n\n scene.moved.next(Date.now());\n scene.ignoreDataUpdate = false;\n scene.setNonTargetPointerEvents(event.target, false);\n\n // re-add the selected element to the snappable guidelines\n if (scene.moveable && scene.moveable.elementGuidelines) {\n scene.moveable.elementGuidelines.push(event.target);\n }\n })\n .on('resizeStart', (event) => {\n const targetedElement = findElementByTarget(event.target, scene.root.elements);\n\n if (targetedElement) {\n // Remove the selected element from the snappable guidelines\n if (scene.moveable && scene.moveable.elementGuidelines) {\n const targetIndex = scene.moveable.elementGuidelines.indexOf(event.target);\n if (targetIndex > -1) {\n scene.moveable.elementGuidelines.splice(targetIndex, 1);\n }\n }\n\n targetedElement.tempConstraint = { ...targetedElement.options.constraint };\n targetedElement.options.constraint = {\n vertical: VerticalConstraint.Top,\n horizontal: HorizontalConstraint.Left,\n };\n targetedElement.setPlacementFromConstraint(undefined, undefined, scene.scale);\n }\n })\n .on('resizeGroupStart', (e) => {\n // Remove the selected elements from the snappable guidelines\n if (scene.moveable && scene.moveable.elementGuidelines) {\n for (let event of e.events) {\n const targetIndex = scene.moveable.elementGuidelines.indexOf(event.target);\n if (targetIndex > -1) {\n scene.moveable.elementGuidelines.splice(targetIndex, 1);\n }\n }\n }\n // Temporarily set Top-Left constraints on each group element for predictable resizing; restore originals on end.\n for (let event of e.events) {\n const targetedElement = findElementByTarget(event.target, scene.root.elements);\n if (targetedElement) {\n targetedElement.tempConstraint = { ...targetedElement.options.constraint };\n targetedElement.options.constraint = {\n vertical: VerticalConstraint.Top,\n horizontal: HorizontalConstraint.Left,\n };\n targetedElement.setPlacementFromConstraint(undefined, undefined, scene.scale);\n }\n }\n })\n .on('resize', (event) => {\n const targetedElement = findElementByTarget(event.target, scene.root.elements);\n if (targetedElement) {\n targetedElement.applyResize(event);\n\n if (scene.connections.connectionsNeedUpdate(targetedElement) && scene.moveableActionCallback) {\n scene.moveableActionCallback(true);\n }\n }\n scene.moved.next(Date.now()); // TODO only on end\n })\n .on('resizeGroup', (e) => {\n let needsUpdate = false;\n for (let event of e.events) {\n const targetedElement = findElementByTarget(event.target, scene.root.elements);\n if (targetedElement) {\n targetedElement.applyResize(event);\n\n if (!needsUpdate) {\n needsUpdate = scene.connections.connectionsNeedUpdate(targetedElement);\n }\n }\n }\n\n if (needsUpdate && scene.moveableActionCallback) {\n scene.moveableActionCallback(true);\n }\n\n scene.moved.next(Date.now()); // TODO only on end\n })\n .on('resizeEnd', (event) => {\n const targetedElement = findElementByTarget(event.target, scene.root.elements);\n\n if (targetedElement) {\n if (targetedElement.tempConstraint) {\n targetedElement.options.constraint = targetedElement.tempConstraint;\n targetedElement.tempConstraint = undefined;\n }\n targetedElement.setPlacementFromConstraint(undefined, undefined, scene.scale);\n\n // re-add the selected element to the snappable guidelines\n if (scene.moveable && scene.moveable.elementGuidelines) {\n scene.moveable.elementGuidelines.push(event.target);\n }\n }\n })\n .on('resizeGroupEnd', (e) => {\n // re-add the selected elements to the snappable guidelines\n if (scene.moveable && scene.moveable.elementGuidelines) {\n for (let event of e.events) {\n scene.moveable.elementGuidelines.push(event.target);\n }\n }\n });\n\n let targets: Array<HTMLElement | SVGElement> = [];\n scene\n .selecto!.on('dragStart', (event) => {\n const selectedTarget = event.inputEvent.target;\n\n // If selected target is a connection control, eject to handle connection event\n if (selectedTarget.id === CONNECTION_ANCHOR_DIV_ID) {\n scene.connections.handleConnectionDragStart(selectedTarget, event.inputEvent.clientX, event.inputEvent.clientY);\n event.stop();\n return;\n }\n\n // If selected target is a vertex, eject to handle vertex event\n if (selectedTarget.id === CONNECTION_VERTEX_ID) {\n scene.connections.handleVertexDragStart(selectedTarget);\n event.stop();\n return;\n }\n\n // If selected target is an add vertex point, eject to handle add vertex event\n if (selectedTarget.id === CONNECTION_VERTEX_ADD_ID) {\n scene.connections.handleVertexAddDragStart(selectedTarget);\n event.stop();\n return;\n }\n\n const isTargetMoveableElement =\n scene.moveable!.isMoveableElement(selectedTarget) ||\n targets.some((target) => target === selectedTarget || target.contains(selectedTarget));\n\n const isElementSelected = isTargetAlreadySelected(selectedTarget, scene);\n\n // Apply grabbing cursor while dragging, applyLayoutStylesToDiv() resets it to grab when done\n if (\n scene.isEditingEnabled &&\n !scene.editModeEnabled.getValue() &&\n isTargetMoveableElement &&\n scene.selecto?.getSelectedTargets().length\n ) {\n scene.selecto.getSelectedTargets()[0].style.cursor = 'grabbing';\n }\n\n if (isTargetMoveableElement || isElementSelected || !scene.isEditingEnabled) {\n // Prevent drawing selection box when selected target is a moveable element or already selected\n event.stop();\n }\n })\n .on('select', () => {\n scene.editModeEnabled.next(false);\n\n // Hide connection anchors on select\n if (scene.connections.connectionAnchorDiv) {\n scene.connections.connectionAnchorDiv.style.display = 'none';\n }\n })\n .on('selectEnd', (event) => {\n targets = event.selected;\n scene.updateSelection({ targets });\n\n if (event.isDragStart) {\n if (scene.isEditingEnabled && !scene.editModeEnabled.getValue() && scene.selecto?.getSelectedTargets().length) {\n scene.selecto.getSelectedTargets()[0].style.cursor = 'grabbing';\n }\n event.inputEvent.preventDefault();\n event.data.timer = setTimeout(() => {\n scene.moveable!.dragStart(event.inputEvent);\n });\n }\n })\n .on('dragEnd', (event) => {\n clearTimeout(event.data.timer);\n });\n\n if (config.featureToggles.canvasPanelPanZoom) {\n /******************/\n /* infiniteViewer */\n /******************/\n scene.infiniteViewer = new InfiniteViewer(scene.viewerDiv!, scene.viewportDiv!, {\n preventWheelClick: false,\n useAutoZoom: true,\n useMouseDrag: false, // `true` blocks metricValue dropdown\n useWheelScroll: scene.shouldPanZoom,\n displayHorizontalScroll: false,\n displayVerticalScroll: false,\n zoomRange: ZOOM_RANGE,\n });\n scene.infiniteViewer.setZoom(scene.scale);\n scene.infiniteViewer.scrollTo(scene.scrollLeft, scene.scrollTop);\n\n // Handles context menu activation\n // Uses openContextMenu with coordinates when available (after CanvasContextMenu mounts), but\n // uses the basic visibility toggle when openContextMenu isn't ready (as a fallback)\n const triggerContextMenu = (x: number, y: number) => {\n if (scene.openContextMenu) {\n scene.openContextMenu({ x, y });\n } else {\n scene.contextMenuOnVisibilityChange(true);\n }\n };\n\n /* ----------------------------- EVENT HANDLERS ----------------------------- */\n // Helper for panning with mouse drag (middle mouse or Ctrl+right-click)\n // TODO: It was implemented as a workaround to unblock left click metricsValue dropdown,\n // but it should be replaced with a more robust solution that doesn't interfere with left click interactions.\n function startPanning(e: MouseEvent) {\n e.preventDefault();\n\n const startX = e.clientX;\n const startY = e.clientY;\n const startScrollLeft = scene.infiniteViewer!.getScrollLeft();\n const startScrollTop = scene.infiniteViewer!.getScrollTop();\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n const deltaX = startX - moveEvent.clientX;\n const deltaY = startY - moveEvent.clientY;\n const scaleAdjustedDeltaX = deltaX / scene.scale;\n const scaleAdjustedDeltaY = deltaY / scene.scale;\n scene.infiniteViewer!.scrollTo(startScrollLeft + scaleAdjustedDeltaX, startScrollTop + scaleAdjustedDeltaY);\n moveEvent.preventDefault();\n };\n\n const handleMouseUp = () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n }\n\n // Right click\n scene.viewerDiv!.addEventListener('contextmenu', (e) => {\n if (e.ctrlKey && e.button === 2 && scene.shouldPanZoom) {\n // Enable panning with Ctrl+right-click\n startPanning(e);\n } else {\n // Prevent default browser context menu\n e.preventDefault();\n triggerContextMenu(e.pageX, e.pageY);\n }\n });\n\n // Enable panning with middle mouse button (wheel button)\n scene.viewerDiv!.addEventListener('mousedown', (e: MouseEvent) => {\n if (e.button === 1 && scene.shouldPanZoom) {\n // Middle mouse button\n startPanning(e);\n }\n });\n\n // Prevent wheel scrolling when pan/zoom is disabled\n scene.viewportDiv!.addEventListener(\n 'wheel',\n (e) => {\n if (!scene.shouldPanZoom) {\n e.stopImmediatePropagation();\n e.preventDefault();\n }\n },\n { passive: false }\n );\n\n // Reset zoom and scroll position on double click\n scene.viewerDiv!.addEventListener('dblclick', (e: MouseEvent) => {\n // Only reset if not in edit mode and pan/zoom is enabled\n if (!scene.editModeEnabled.getValue() && scene.shouldPanZoom && scene.infiniteViewer) {\n scene.infiniteViewer.setZoom(1);\n scene.infiniteViewer.scrollTo(0, 0);\n }\n });\n\n // Mouse scroll click\n // Only allow panning with middle mouse button (button 1)\n // Left click is reserved for selection/manipulation, right click for context menu\n scene.infiniteViewer!.on('dragStart', (e) => {\n if (e.inputEvent.button !== 1) {\n e.preventDefault();\n e.preventDrag();\n }\n });\n\n // Scroll\n scene.infiniteViewer!.on('scroll', () => {\n // TODO: clear current selection is default behaviour on zoom-in or zoom-out,\n // but looks like we prevented this event to trigger at some point\n scene.clearCurrentSelection(true);\n\n scene.updateConnectionsSize();\n scene.scale = scene.infiniteViewer!.getZoom();\n\n scene.scrollLeft = scene.infiniteViewer!.getScrollLeft();\n scene.scrollTop = scene.infiniteViewer!.getScrollTop();\n });\n }\n};\n\n// Zoom to content helper functions\nexport function calculateZoomToFitScale(elements: Element[], container: HTMLDivElement, paddingRatio = 0.05) {\n const bounds = calculateGroupBoundingBox(elements);\n const containerRect = container.getBoundingClientRect();\n const containerWidth = containerRect.width;\n const containerHeight = containerRect.height;\n\n const paddedWidth = containerWidth * (1 - 2 * paddingRatio);\n const paddedHeight = containerHeight * (1 - 2 * paddingRatio);\n\n const scaleX = paddedWidth / bounds.width;\n const scaleY = paddedHeight / bounds.height;\n\n // Use the smaller one to fit both horizontally and vertically\n const scale = Math.min(scaleX, scaleY);\n\n // calculate value to move to center\n const centerX = (bounds.centerX * scale - containerWidth / 2) / scale;\n const centerY = (bounds.centerY * scale - containerHeight / 2) / scale;\n\n return {\n scale,\n centerX,\n centerY,\n };\n}\n\nexport function extractTranslateFromTransform(transform: string) {\n const matrix = new DOMMatrix(transform);\n return { x: matrix.m41, y: matrix.m42 }; // m41 = translateX, m42 = translateY\n}\n\nexport function calculateGroupBoundingBox(elements: Element[]) {\n let minX = Infinity,\n minY = Infinity;\n let maxX = -Infinity,\n maxY = -Infinity;\n\n for (const el of elements) {\n const style = window.getComputedStyle(el);\n const { x: tx, y: ty } = extractTranslateFromTransform(style.transform || '');\n\n const width = parseFloat(style.width);\n const height = parseFloat(style.height);\n\n const left = tx;\n const top = ty;\n const right = tx + width;\n const bottom = ty + height;\n\n minX = Math.min(minX, left);\n minY = Math.min(minY, top);\n maxX = Math.max(maxX, right);\n maxY = Math.max(maxY, bottom);\n }\n\n return {\n left: minX,\n top: minY,\n right: maxX,\n bottom: maxY,\n width: maxX - minX,\n height: maxY - minY,\n centerX: (minX + maxX) / 2,\n centerY: (minY + maxY) / 2,\n };\n}\n","import { cloneDeep } from 'lodash';\n\nimport { notFoundItem } from 'app/features/canvas/elements/notFound';\nimport { DimensionContext } from 'app/features/dimensions/context';\nimport { HorizontalConstraint, Placement, VerticalConstraint } from 'app/plugins/panel/canvas/panelcfg.gen';\nimport { LayerActionID } from 'app/plugins/panel/canvas/types';\n\nimport { updateConnectionsForSource } from '../../../plugins/panel/canvas/utils';\nimport { CanvasElementItem } from '../element';\nimport { CanvasFrameOptions } from '../frame';\nimport { canvasElementRegistry } from '../registry';\n\nimport { ElementState } from './element';\nimport { RootElement } from './root';\nimport { Scene } from './scene';\nimport { initMoveable } from './sceneAbleManagement';\n\nconst DEFAULT_OFFSET = 10;\nconst HORIZONTAL_OFFSET = 50;\n\nexport const frameItemDummy: CanvasElementItem = {\n id: 'frame',\n name: 'Frame',\n description: 'Frame',\n\n getNewOptions: () => ({\n config: {},\n }),\n\n display: () => {\n // never shown to end user\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n return <div>FRAME!</div>;\n },\n};\n\nexport class FrameState extends ElementState {\n elements: ElementState[] = [];\n scene: Scene;\n\n constructor(\n public options: CanvasFrameOptions,\n scene: Scene,\n public parent?: FrameState\n ) {\n super(frameItemDummy, options, parent);\n\n this.scene = scene;\n\n // mutate options object\n let { elements } = this.options;\n if (!elements) {\n this.options.elements = elements = [];\n }\n\n for (const element of elements) {\n if (element.type === 'frame') {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n this.elements.push(new FrameState(element as CanvasFrameOptions, scene, this));\n } else {\n const item = canvasElementRegistry.getIfExists(element.type) ?? notFoundItem;\n this.elements.push(new ElementState(item, element, this));\n }\n }\n }\n\n isRoot(): this is RootElement {\n return false;\n }\n\n updateData(ctx: DimensionContext) {\n super.updateData(ctx);\n for (const elem of this.elements) {\n elem.updateData(ctx);\n }\n }\n\n // used in the layer editor\n reorder(startIndex: number, endIndex: number) {\n const result = Array.from(this.elements);\n const [removed] = result.splice(startIndex, 1);\n result.splice(endIndex, 0, removed);\n this.elements = result;\n\n this.reinitializeMoveable();\n }\n\n // used for tree view\n reorderTree(src: ElementState, dest: ElementState, firstPosition = false) {\n const result = Array.from(this.elements);\n const srcIndex = this.elements.indexOf(src);\n const destIndex = firstPosition ? this.elements.length - 1 : this.elements.indexOf(dest);\n\n const [removed] = result.splice(srcIndex, 1);\n result.splice(destIndex, 0, removed);\n this.elements = result;\n\n this.reinitializeMoveable();\n }\n\n doMove(child: ElementState, action: LayerActionID) {\n const vals = this.elements.filter((v) => v !== child);\n if (action === LayerActionID.MoveBottom) {\n vals.unshift(child);\n } else {\n vals.push(child);\n }\n this.elements = vals;\n this.scene.save();\n this.reinitializeMoveable();\n }\n\n reinitializeMoveable() {\n // Need to first clear current selection and then re-init moveable with slight delay\n this.scene.clearCurrentSelection();\n setTimeout(() => initMoveable(true, this.scene.isEditingEnabled, this.scene));\n }\n\n // ??? or should this be on the element directly?\n // are actions scoped to layers?\n doAction = (action: LayerActionID, element: ElementState, updateName = true, shiftItemsOnDuplicate = true) => {\n switch (action) {\n case LayerActionID.Delete:\n this.elements = this.elements.filter((e) => e !== element);\n updateConnectionsForSource(element, this.scene);\n this.scene.byName.delete(element.options.name);\n this.scene.save();\n this.reinitializeMoveable();\n break;\n case LayerActionID.Duplicate:\n if (element.item.id === 'frame') {\n console.log('Can not duplicate frames (yet)', action, element);\n return;\n }\n const opts = cloneDeep(element.options);\n\n if (shiftItemsOnDuplicate) {\n const { constraint, placement: oldPlacement } = element.options;\n const { vertical, horizontal } = constraint ?? {};\n const placement: Placement = { ...oldPlacement };\n\n switch (vertical) {\n case VerticalConstraint.Top:\n if (placement.top == null) {\n placement.top = 25;\n } else {\n placement.top += DEFAULT_OFFSET;\n }\n break;\n case VerticalConstraint.Bottom:\n if (placement.bottom == null) {\n placement.bottom = 100;\n } else {\n placement.bottom -= DEFAULT_OFFSET;\n }\n break;\n case VerticalConstraint.TopBottom:\n if (placement.top == null) {\n placement.top = 25;\n } else {\n placement.top += DEFAULT_OFFSET;\n }\n\n if (placement.bottom == null) {\n placement.bottom = 100;\n } else {\n placement.bottom -= DEFAULT_OFFSET;\n }\n break;\n case VerticalConstraint.Center:\n if (placement.top != null) {\n placement.top -= DEFAULT_OFFSET;\n }\n break;\n }\n\n switch (horizontal) {\n case HorizontalConstraint.Left:\n if (placement.left == null) {\n placement.left = HORIZONTAL_OFFSET;\n } else {\n placement.left += DEFAULT_OFFSET;\n }\n break;\n case HorizontalConstraint.Right:\n if (placement.right == null) {\n placement.right = HORIZONTAL_OFFSET;\n } else {\n placement.right -= DEFAULT_OFFSET;\n }\n break;\n case HorizontalConstraint.LeftRight:\n if (placement.left == null) {\n placement.left = HORIZONTAL_OFFSET;\n } else {\n placement.left += DEFAULT_OFFSET;\n }\n\n if (placement.right == null) {\n placement.right = HORIZONTAL_OFFSET;\n } else {\n placement.right -= DEFAULT_OFFSET;\n }\n break;\n case HorizontalConstraint.Center:\n if (placement.left != null) {\n placement.left -= DEFAULT_OFFSET;\n }\n break;\n }\n\n opts.placement = placement;\n }\n\n // Clear connections on duplicate\n opts.connections = undefined;\n\n const copy = new ElementState(element.item, opts, this);\n copy.updateData(this.scene.context);\n if (updateName) {\n copy.options.name = this.scene.getNextElementName();\n }\n this.elements.push(copy);\n this.scene.byName.set(copy.options.name, copy);\n\n // Update scene byName map for original element (to avoid stale references (e.g. for connections))\n this.scene.byName.set(element.options.name, element);\n\n this.scene.save();\n this.reinitializeMoveable();\n\n setTimeout(() => {\n this.scene.targetsToSelect.add(copy.div!);\n });\n break;\n case LayerActionID.MoveTop:\n case LayerActionID.MoveBottom:\n element.parent?.doMove(element, action);\n break;\n\n default:\n console.log('DO action', action, element);\n return;\n }\n };\n\n render() {\n return (\n <div key={this.UID} ref={this.initElement}>\n {this.elements.map((v) => v.render())}\n </div>\n );\n }\n\n /** Recursively visit all nodes */\n visit(visitor: (v: ElementState) => void) {\n super.visit(visitor);\n for (const e of this.elements) {\n visitor(e);\n }\n }\n\n getSaveModel() {\n return {\n ...this.options,\n elements: this.elements.map((v) => v.getSaveModel()),\n };\n }\n}\n","import { css } from '@emotion/css';\nimport { useCallback, useEffect, useState } from 'react';\nimport * as React from 'react';\nimport { first } from 'rxjs/operators';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { ContextMenu, MenuItem, MenuItemProps } from '@grafana/ui';\nimport { config } from 'app/core/config';\nimport { ElementState } from 'app/features/canvas/runtime/element';\nimport { FrameState } from 'app/features/canvas/runtime/frame';\nimport { Scene } from 'app/features/canvas/runtime/scene';\nimport { findElementByTarget } from 'app/features/canvas/runtime/sceneElementManagement';\n\nimport { CanvasPanel } from '../CanvasPanel';\nimport { AnchorPoint, LayerActionID } from '../types';\nimport { getElementTypes, onAddItem } from '../utils';\n\ntype Props = {\n scene: Scene;\n panel: CanvasPanel;\n onVisibilityChange: (v: boolean) => void;\n};\n\nexport const CanvasContextMenu = ({ scene, panel, onVisibilityChange }: Props) => {\n const inlineEditorOpen = panel.state.openInlineEdit;\n const [isMenuVisible, setIsMenuVisible] = useState<boolean>(false);\n const [anchorPoint, setAnchorPoint] = useState<AnchorPoint>({ x: 0, y: 0 });\n\n const styles = getStyles();\n\n const selectedElements = scene.selecto?.getSelectedTargets();\n const rootLayer: FrameState | undefined = panel.context?.instanceState?.layer;\n\n useEffect(() => {\n if (config.featureToggles.canvasPanelPanZoom) {\n scene.openContextMenu = (position: AnchorPoint) => {\n setAnchorPoint(position);\n setIsMenuVisible(true);\n onVisibilityChange(true);\n };\n\n // Clean up the openContextMenu on unmount\n return () => (scene.openContextMenu = undefined);\n }\n return undefined;\n }, [scene, onVisibilityChange]);\n\n const handleContextMenu = useCallback(\n (event: Event) => {\n if (!(event instanceof MouseEvent) || event.ctrlKey) {\n return;\n }\n\n event.preventDefault();\n panel.setActivePanel();\n\n const shouldSelectElement = config.featureToggles.canvasPanelPanZoom\n ? event.currentTarget !== scene.viewportDiv\n : event.currentTarget !== scene.div;\n if (\n shouldSelectElement &&\n (event.currentTarget instanceof HTMLElement || event.currentTarget instanceof SVGElement)\n ) {\n scene.select({ targets: [event.currentTarget] });\n }\n setAnchorPoint({ x: event.pageX, y: event.pageY });\n setIsMenuVisible(true);\n onVisibilityChange(true);\n },\n [scene, panel, onVisibilityChange]\n );\n\n useEffect(() => {\n if (scene.selecto) {\n scene.selecto.getSelectableElements().forEach((element) => {\n element.addEventListener('contextmenu', handleContextMenu);\n });\n }\n }, [handleContextMenu, scene.selecto]);\n\n useEffect(() => {\n if (scene.div) {\n scene.div.addEventListener('contextmenu', handleContextMenu);\n }\n }, [handleContextMenu, scene.div]);\n\n const closeContextMenu = () => {\n setIsMenuVisible(false);\n onVisibilityChange(false);\n };\n\n const renderMenuItems = () => {\n // This is disabled when panel is in edit mode because opening inline editor over panel editor is not ideal UX\n const openCloseEditorMenuItem = !scene.isPanelEditing && (\n <MenuItem\n label={\n inlineEditorOpen\n ? t('canvas.canvas-context-menu.close-editor', 'Close Editor')\n : t('canvas.canvas-context-menu.open-editor', 'Open Editor')\n }\n onClick={() => {\n if (scene.inlineEditingCallback) {\n if (inlineEditorOpen) {\n panel.closeInlineEdit();\n } else {\n scene.inlineEditingCallback();\n }\n }\n closeContextMenu();\n }}\n className={styles.menuItem}\n />\n );\n\n const editElementMenuItem = () => {\n if (selectedElements?.length === 1) {\n const onClickEditElementMenuItem = () => {\n scene.editModeEnabled.next(true);\n closeContextMenu();\n };\n\n const element = findElementByTarget(selectedElements[0], scene.root.elements);\n return (\n element &&\n element.item.hasEditMode && (\n <MenuItem\n label={t('canvas.canvas-context-menu.render-menu-items.edit-element-menu-item.label-edit', 'Edit')}\n onClick={onClickEditElementMenuItem}\n className={styles.menuItem}\n />\n )\n );\n }\n return null;\n };\n\n const typeOptions = getElementTypes(scene.shouldShowAdvancedTypes).options;\n\n const getTypeOptionsSubmenu = () => {\n const submenuItems: Array<\n React.ReactElement<MenuItemProps<unknown>, string | React.JSXElementConstructor<unknown>>\n > = [];\n\n const onClickItem = (option: SelectableValue<string>) => {\n let offsetY = anchorPoint.y;\n let offsetX = anchorPoint.x;\n if (scene.div) {\n const transformScale = scene.scale;\n const sceneContainerDimensions = scene.div.getBoundingClientRect();\n offsetY = (offsetY - sceneContainerDimensions.top) / transformScale;\n offsetX = (offsetX - sceneContainerDimensions.left) / transformScale;\n } else if (scene.viewportDiv) {\n const sceneContainerDimensions = scene.viewportDiv.getBoundingClientRect();\n offsetY -= sceneContainerDimensions.top;\n offsetX -= sceneContainerDimensions.left;\n }\n\n onAddItem(option, rootLayer, {\n ...anchorPoint,\n y: offsetY,\n x: offsetX,\n });\n };\n\n typeOptions.map((option) => {\n submenuItems.push(\n <MenuItem key={option.value} label={option.label ?? 'Canvas item'} onClick={() => onClickItem(option)} />\n );\n });\n\n return submenuItems;\n };\n\n const addItemMenuItem = (\n <MenuItem\n label={t('canvas.canvas-context-menu.render-menu-items.add-item-menu-item.label-add-item', 'Add item')}\n className={styles.menuItem}\n childItems={getTypeOptionsSubmenu()}\n customSubMenuContainerStyles={{ maxHeight: '150px', overflowY: 'auto' }}\n />\n );\n\n const setBackgroundMenuItem = (\n <MenuItem\n label={t(\n 'canvas.canvas-context-menu.render-menu-items.set-background-menu-item.label-set-background',\n 'Set background'\n )}\n onClick={() => {\n if (scene.setBackgroundCallback) {\n scene.setBackgroundCallback(anchorPoint);\n }\n closeContextMenu();\n }}\n className={styles.menuItem}\n />\n );\n\n if (selectedElements && selectedElements.length >= 1) {\n return (\n <>\n {editElementMenuItem()}\n <MenuItem\n label={t('canvas.canvas-context-menu.render-menu-items.label-delete', 'Delete')}\n onClick={() => {\n contextMenuAction(LayerActionID.Delete);\n closeContextMenu();\n }}\n className={styles.menuItem}\n />\n <MenuItem\n label={t('canvas.canvas-context-menu.render-menu-items.label-duplicate', 'Duplicate')}\n onClick={() => {\n contextMenuAction(LayerActionID.Duplicate);\n closeContextMenu();\n }}\n className={styles.menuItem}\n />\n <MenuItem\n label={t('canvas.canvas-context-menu.render-menu-items.label-bring-to-front', 'Bring to front')}\n onClick={() => {\n contextMenuAction(LayerActionID.MoveTop);\n closeContextMenu();\n }}\n className={styles.menuItem}\n />\n <MenuItem\n label={t('canvas.canvas-context-menu.render-menu-items.label-send-to-back', 'Send to back')}\n onClick={() => {\n contextMenuAction(LayerActionID.MoveBottom);\n closeContextMenu();\n }}\n className={styles.menuItem}\n />\n {openCloseEditorMenuItem}\n </>\n );\n } else {\n return (\n <>\n {openCloseEditorMenuItem}\n {setBackgroundMenuItem}\n {addItemMenuItem}\n </>\n );\n }\n };\n\n const contextMenuAction = (actionType: LayerActionID) => {\n scene.selection.pipe(first()).subscribe((currentSelectedElements) => {\n const currentLayer = currentSelectedElements[0].parent!;\n currentSelectedElements.forEach((currentSelectedElement: ElementState) => {\n currentLayer.doAction(actionType, currentSelectedElement);\n });\n });\n\n setTimeout(() => {\n scene.addToSelection();\n scene.targetsToSelect.clear();\n });\n };\n\n if (isMenuVisible) {\n return (\n <div\n onContextMenu={(event) => {\n event.preventDefault();\n closeContextMenu();\n }}\n >\n <ContextMenu\n x={anchorPoint.x}\n y={anchorPoint.y}\n onClose={closeContextMenu}\n renderMenuItems={renderMenuItems}\n focusOnOpen={false}\n />\n </div>\n );\n }\n\n return <></>;\n};\n\nconst getStyles = () => ({\n menuItem: css({\n maxWidth: '200px',\n }),\n});\n","import { css, cx } from '@emotion/css';\nimport { useDialog } from '@react-aria/dialog';\nimport { useOverlay } from '@react-aria/overlays';\nimport { createRef, useMemo } from 'react';\n\nimport {\n Field,\n LinkModel,\n FieldType,\n GrafanaTheme2,\n formattedValueToString,\n getFieldDisplayName,\n ScopedVars,\n ValueLinkConfig,\n ActionModel,\n} from '@grafana/data';\nimport { Portal, useStyles2, useTheme2, VizTooltipContainer, usePanelContext } from '@grafana/ui';\nimport {\n VizTooltipContent,\n VizTooltipFooter,\n VizTooltipHeader,\n VizTooltipItem,\n CloseButton,\n} from '@grafana/ui/internal';\nimport { getActions, getActionsDefaultField } from 'app/features/actions/utils';\nimport { Scene } from 'app/features/canvas/runtime/scene';\n\nimport { getDataLinks } from '../../status-history/utils';\nimport { getElementFields, getRowIndex } from '../utils';\n\ninterface Props {\n scene: Scene;\n}\n\nexport const CanvasTooltip = ({ scene }: Props) => {\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n const { canExecuteActions } = usePanelContext();\n const userCanExecuteActions = useMemo(() => canExecuteActions?.() ?? false, [canExecuteActions]);\n\n const onClose = () => {\n if (scene?.tooltipCallback && scene.tooltipPayload) {\n scene.tooltipCallback(undefined);\n }\n };\n\n const ref = createRef<HTMLElement>();\n const { overlayProps } = useOverlay({ onClose: onClose, isDismissable: true }, ref);\n const { dialogProps } = useDialog({}, ref);\n\n const element = scene.tooltipPayload?.element;\n if (!element) {\n return <></>;\n }\n\n // Retrieve timestamp of the last data point if available\n const timeField = scene.data?.series[0]?.fields?.find((field) => field.type === FieldType.time);\n const lastTimeValue = timeField?.values[timeField.values.length - 1];\n const shouldDisplayTimeContentItem =\n timeField && lastTimeValue && element.data.field && getFieldDisplayName(timeField) !== element.data.field;\n\n const headerItem: VizTooltipItem = {\n label: element.getName(),\n value: '',\n };\n\n const contentItems: VizTooltipItem[] = [\n {\n label: element.data.field ?? 'Fixed',\n value: element.data.text,\n },\n ...(shouldDisplayTimeContentItem\n ? [\n {\n label: 'Time',\n value: formattedValueToString(timeField?.display!(lastTimeValue)),\n },\n ]\n : []),\n ];\n\n // NOTE: almost identical to getDataLinks() helper\n const links: Array<LinkModel<Field>> = [];\n\n if ((element.options.links?.length ?? 0) > 0 && element.getLinks) {\n const linkLookup = new Set<string>();\n\n element.getLinks({ valueRowIndex: getRowIndex(element.data.field, scene) }).forEach((link) => {\n const key = `${link.title}/${link.href}`;\n if (!linkLookup.has(key)) {\n links.push(link);\n linkLookup.add(key);\n }\n });\n }\n\n if (scene.data?.series) {\n getElementFields(scene.data?.series, element.options).forEach((field) => {\n links.push(...getDataLinks(field, getRowIndex(element.data.field, scene)));\n });\n }\n\n const actions: Array<ActionModel<Field>> = [];\n const actionLookup = new Set<string>();\n\n const elementHasActions = (element.options.actions?.length ?? 0) > 0;\n const frames = scene.data?.series;\n\n if (elementHasActions && frames && userCanExecuteActions) {\n const defaultField = getActionsDefaultField(element.options.links ?? [], element.options.actions ?? []);\n const scopedVars: ScopedVars = {\n __dataContext: {\n value: {\n data: frames,\n field: defaultField,\n frame: frames[0],\n frameIndex: 0,\n },\n },\n };\n\n const config: ValueLinkConfig = { valueRowIndex: getRowIndex(element.data.field, scene) };\n\n const actionsModel = getActions(\n frames[0],\n defaultField,\n scopedVars,\n scene.panel.props.replaceVariables!,\n element.options.actions ?? [],\n config,\n 'canvas'\n );\n\n actionsModel.forEach((action) => {\n const key = `${action.title}/${Math.random()}`;\n if (!actionLookup.has(key)) {\n actions.push(action);\n actionLookup.add(key);\n }\n });\n }\n\n return (\n <>\n {scene.tooltipPayload?.element && scene.tooltipPayload.anchorPoint && (\n <Portal zIndex={theme.zIndex.tooltip}>\n <VizTooltipContainer\n className={cx(styles.tooltipWrapper, scene.tooltipPayload.isOpen && styles.pinned)}\n position={{ x: scene.tooltipPayload.anchorPoint.x, y: scene.tooltipPayload.anchorPoint.y }}\n offset={{ x: 5, y: 0 }}\n allowPointerEvents={scene.tooltipPayload.isOpen}\n >\n <section ref={ref} {...overlayProps} {...dialogProps}>\n {scene.tooltipPayload.isOpen && <CloseButton style={{ zIndex: 1 }} onClick={onClose} />}\n <VizTooltipHeader item={headerItem} isPinned={scene.tooltipPayload.isOpen!} />\n {element.data.text && <VizTooltipContent items={contentItems} isPinned={scene.tooltipPayload.isOpen!} />}\n {(links.length > 0 || actions.length > 0) && <VizTooltipFooter dataLinks={links} actions={actions} />}\n </section>\n </VizTooltipContainer>\n </Portal>\n )}\n </>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n marginTop: '20px',\n background: theme.colors.background.primary,\n }),\n tooltipWrapper: css({\n top: 0,\n left: 0,\n whiteSpace: 'pre',\n borderRadius: theme.shape.radius.default,\n position: 'fixed',\n background: theme.colors.background.primary,\n border: `1px solid ${theme.colors.border.weak}`,\n boxShadow: theme.shadows.z2,\n userSelect: 'text',\n padding: 0,\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n pinned: css({\n boxShadow: theme.shadows.z3,\n }),\n});\n","import { css } from '@emotion/css';\nimport { useRef } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\nimport { ConnectionCoordinates } from 'app/features/canvas/element';\n\ntype Props = {\n setRef: (anchorElement: HTMLDivElement) => void;\n setAnchorsRef: (anchorsElement: HTMLDivElement) => void;\n handleMouseLeave: (\n event: React.MouseEvent<Element, MouseEvent> | React.FocusEvent<HTMLDivElement, Element>\n ) => boolean;\n};\n\nexport const CONNECTION_ANCHOR_DIV_ID = 'connectionControl';\nexport const CONNECTION_ANCHOR_ALT = 'connection anchor';\nexport const CONNECTION_ANCHOR_HIGHLIGHT_OFFSET = 8;\n// Unit is percentage from the middle of the element\n// 0, 0 middle; -1, -1 bottom left; 1, 1 top right\nexport const ANCHORS = [\n { x: -1, y: 1 },\n { x: -0.5, y: 1 },\n { x: 0, y: 1 },\n { x: 0.5, y: 1 },\n { x: 1, y: 1 },\n { x: 1, y: 0.5 },\n { x: 1, y: 0 },\n { x: 1, y: -0.5 },\n { x: 1, y: -1 },\n { x: 0.5, y: -1 },\n { x: 0, y: -1 },\n { x: -0.5, y: -1 },\n { x: -1, y: -1 },\n { x: -1, y: -0.5 },\n { x: -1, y: 0 },\n { x: -1, y: 0.5 },\n];\nexport const ANCHOR_PADDING = 3;\nexport const HALF_SIZE = 2.5;\n\nconst zIndex = {\n ROOT: 1000,\n ANCHOR: 1001,\n HIGHLIGHT: 1002,\n};\n\nenum PointerEvents {\n ROOT = 'none',\n MOUSEOUT_DIV = 'none',\n ANCHOR = 'auto',\n HIGHLIGHT = 'auto',\n}\n\nexport const ConnectionAnchors = ({ setRef, setAnchorsRef, handleMouseLeave }: Props) => {\n const highlightEllipseRef = useRef<HTMLDivElement>(null);\n const styles = useStyles2(getStyles);\n const halfSizeHighlightEllipse = 5.5;\n const anchorImage =\n 'data:image/svg+xml;base64,PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSI1cHgiIGhlaWdodD0iNXB4IiB2ZXJzaW9uPSIxLjEiPjxwYXRoIGQ9Im0gMCAwIEwgNSA1IE0gMCA1IEwgNSAwIiBzdHJva2Utd2lkdGg9IjIiIHN0eWxlPSJzdHJva2Utb3BhY2l0eTowLjQiIHN0cm9rZT0iI2ZmZmZmZiIvPjxwYXRoIGQ9Im0gMCAwIEwgNSA1IE0gMCA1IEwgNSAwIiBzdHJva2U9IiMyOWI2ZjIiLz48L3N2Zz4=';\n\n const onMouseEnterAnchor = (event: React.MouseEvent) => {\n if (!(event.target instanceof HTMLImageElement)) {\n return;\n }\n\n if (highlightEllipseRef.current && event.target.style) {\n highlightEllipseRef.current.style.display = 'block';\n highlightEllipseRef.current.style.top = `calc(${event.target.style.top} - ${halfSizeHighlightEllipse}px + ${ANCHOR_PADDING}px)`;\n highlightEllipseRef.current.style.left = `calc(${event.target.style.left} - ${halfSizeHighlightEllipse}px + ${ANCHOR_PADDING}px)`;\n }\n };\n\n const onMouseLeaveHighlightElement = () => {\n if (highlightEllipseRef.current) {\n highlightEllipseRef.current.style.display = 'none';\n }\n };\n\n const handleMouseLeaveAnchors = (\n event: React.MouseEvent<Element, MouseEvent> | React.FocusEvent<HTMLDivElement, Element>\n ) => {\n const didHideAnchors = handleMouseLeave(event);\n\n if (didHideAnchors) {\n onMouseLeaveHighlightElement();\n }\n };\n\n const generateAnchors = (anchors: ConnectionCoordinates[] = ANCHORS) => {\n return anchors.map((anchor) => {\n const id = `${anchor.x},${anchor.y}`;\n\n // Convert anchor coords to relative percentage\n const style = {\n top: `calc(${-anchor.y * 50 + 50}% - ${HALF_SIZE}px - ${ANCHOR_PADDING}px)`,\n left: `calc(${anchor.x * 50 + 50}% - ${HALF_SIZE}px - ${ANCHOR_PADDING}px)`,\n };\n\n return (\n <img\n id={id}\n ref={(element) => {\n if (element) {\n // After React 15+, inline styles no longer support !important\n element.style.setProperty('pointer-events', PointerEvents.ANCHOR, 'important');\n }\n }}\n key={id}\n alt={CONNECTION_ANCHOR_ALT}\n className={styles.anchor}\n style={style}\n src={anchorImage}\n onMouseEnter={onMouseEnterAnchor}\n />\n );\n });\n };\n\n return (\n <div className={styles.root} ref={setRef}>\n <div className={styles.mouseoutDiv} onMouseOut={handleMouseLeaveAnchors} onBlur={handleMouseLeaveAnchors} />\n <div\n id={CONNECTION_ANCHOR_DIV_ID}\n ref={highlightEllipseRef}\n className={styles.highlightElement}\n onMouseLeave={onMouseLeaveHighlightElement}\n />\n <div ref={setAnchorsRef}>{generateAnchors()}</div>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n root: css({\n position: 'absolute',\n display: 'none',\n zIndex: `${zIndex.ROOT} !important`,\n pointerEvents: PointerEvents.ROOT,\n }),\n mouseoutDiv: css({\n position: 'absolute',\n margin: '-30px',\n width: 'calc(100% + 60px)',\n height: 'calc(100% + 60px)',\n pointerEvents: PointerEvents.MOUSEOUT_DIV,\n }),\n anchor: css({\n padding: `${ANCHOR_PADDING}px`,\n position: 'absolute',\n cursor: 'cursor',\n width: `calc(5px + 2 * ${ANCHOR_PADDING}px)`,\n height: `calc(5px + 2 * ${ANCHOR_PADDING}px)`,\n zIndex: `${zIndex.ANCHOR} !important`,\n pointerEvents: PointerEvents.ANCHOR,\n userSelect: 'none',\n }),\n highlightElement: css({\n backgroundColor: '#00ff00',\n opacity: 0.3,\n position: 'absolute',\n cursor: 'cursor',\n pointerEvents: PointerEvents.HIGHLIGHT,\n width: '16px',\n height: '16px',\n borderRadius: theme.shape.radius.circle,\n display: 'none',\n zIndex: `${zIndex.HIGHLIGHT} !important`,\n }),\n});\n","import { css } from '@emotion/css';\nimport { useEffect, useMemo, useRef, useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { DirectionDimensionConfig, DirectionDimensionMode, ConnectionDirection } from '@grafana/schema';\nimport { useStyles2 } from '@grafana/ui';\nimport { config } from 'app/core/config';\nimport { Scene } from 'app/features/canvas/runtime/scene';\n\nimport { ConnectionCoordinates } from '../../panelcfg.gen';\nimport { ConnectionState } from '../../types';\nimport {\n calculateAngle,\n calculateCoordinates2,\n calculateDistance,\n calculateMidpoint,\n getConnectionStyles,\n} from '../../utils';\n\nimport { CONNECTION_VERTEX_ADD_ID, CONNECTION_VERTEX_ID } from './Connections';\n\ntype Props = {\n setLineRef: (anchorElement: SVGLineElement) => void;\n setVertexPathRef: (anchorElement: SVGPathElement) => void;\n setVertexRef: (anchorElement: SVGCircleElement) => void;\n setConnectionsSVGRef: (anchorElement: SVGSVGElement) => void;\n scene: Scene;\n};\n\nlet idCounter = 0;\nconst htmlElementTypes = ['input', 'textarea'];\n\nexport const ConnectionSVG = ({ setLineRef, setVertexPathRef, setVertexRef, setConnectionsSVGRef, scene }: Props) => {\n const styles = useStyles2(getStyles);\n\n const headId = Date.now() + '_' + idCounter++;\n const CONNECTION_LINE_ID = useMemo(() => `connectionLineId-${headId}`, [headId]);\n const EDITOR_HEAD_ID = useMemo(() => `editorHead-${headId}`, [headId]);\n const defaultArrowColor = config.theme2.colors.text.primary;\n const defaultArrowSize = 2;\n const defaultArrowDirection: DirectionDimensionConfig = {\n mode: DirectionDimensionMode.Fixed,\n fixed: ConnectionDirection.Forward,\n };\n const maximumVertices = 10;\n\n const [selectedConnection, setSelectedConnection] = useState<ConnectionState | undefined>(undefined);\n\n // Need to use ref to ensure state is not stale in event handler\n const selectedConnectionRef = useRef(selectedConnection);\n useEffect(() => {\n selectedConnectionRef.current = selectedConnection;\n });\n\n useEffect(() => {\n if (scene.panel.context.instanceState?.selectedConnection) {\n setSelectedConnection(scene.panel.context.instanceState?.selectedConnection);\n }\n }, [scene.panel.context.instanceState?.selectedConnection]);\n\n const onKeyUp = (e: KeyboardEvent) => {\n const target = e.target;\n\n if (!(target instanceof HTMLElement)) {\n return;\n }\n\n if (htmlElementTypes.indexOf(target.nodeName.toLowerCase()) > -1) {\n return;\n }\n\n // Backspace (8) or delete (46)\n if (e.keyCode === 8 || e.keyCode === 46) {\n if (selectedConnectionRef.current && selectedConnectionRef.current.source) {\n selectedConnectionRef.current.source.options.connections =\n selectedConnectionRef.current.source.options.connections?.filter(\n (connection) => connection !== selectedConnectionRef.current?.info\n );\n selectedConnectionRef.current.source.onChange(selectedConnectionRef.current.source.options);\n\n setSelectedConnection(undefined);\n scene.connections.select(undefined);\n scene.connections.updateState();\n scene.save();\n }\n } else {\n // Prevent removing event listener if key is not delete\n return;\n }\n\n document.removeEventListener('keyup', onKeyUp);\n scene.selecto!.rootContainer!.removeEventListener('click', clearSelectedConnection);\n };\n\n const clearSelectedConnection = (event: MouseEvent) => {\n const eventTarget = event.target;\n\n const shouldResetSelectedConnection = !(\n eventTarget instanceof SVGLineElement && eventTarget.id === CONNECTION_LINE_ID\n );\n\n if (shouldResetSelectedConnection) {\n setSelectedConnection(undefined);\n scene.connections.select(undefined);\n }\n };\n\n const selectConnection = (connection: ConnectionState) => {\n if (scene.isEditingEnabled) {\n setSelectedConnection(connection);\n scene.connections.select(connection);\n\n document.addEventListener('keyup', onKeyUp);\n scene.selecto!.rootContainer!.addEventListener('click', clearSelectedConnection);\n }\n };\n\n // Figure out target and then target's relative coordinates drawing (if no target do parent)\n const renderConnections = () => {\n return (\n scene.connections.state\n // Render selected connection last, ensuring it is above other connections\n .sort((_a, b) => (selectedConnection === b && scene.panel.context.instanceState.selectedConnection ? -1 : 0))\n .map((v, idx) => {\n const { source, target, info, vertices, index } = v;\n const sourceRect = source.div;\n const parent = source.div?.parentElement;\n const parentRect = scene.viewportDiv;\n\n if (!sourceRect || !parent || !parentRect) {\n return;\n }\n\n let { x1, y1, x2, y2 } = calculateCoordinates2(source, target, info);\n\n let { xStart, yStart, xEnd, yEnd } = { xStart: x1, yStart: y1, xEnd: x2, yEnd: y2 };\n if (v.sourceOriginal && v.targetOriginal) {\n xStart = v.sourceOriginal.x;\n yStart = v.sourceOriginal.y;\n xEnd = v.targetOriginal.x;\n yEnd = v.targetOriginal.y;\n } else if (source.options.connections) {\n // If original source or target coordinates are not set for the current connection, set them\n if (\n !source.options.connections[index].sourceOriginal ||\n !source.options.connections[index].targetOriginal\n ) {\n source.options.connections[index].sourceOriginal = { x: x1, y: y1 };\n source.options.connections[index].targetOriginal = { x: x2, y: y2 };\n }\n }\n\n const midpoint = calculateMidpoint(x1, y1, x2, y2);\n const xDist = xEnd - xStart;\n const yDist = yEnd - yStart;\n\n const { strokeColor, strokeWidth, strokeRadius, arrowDirection, lineStyle, shouldAnimate } =\n getConnectionStyles(\n info,\n scene,\n defaultArrowSize,\n defaultArrowDirection.fixed ?? ConnectionDirection.Forward\n );\n\n const isSelected = selectedConnection === v && scene.panel.context.instanceState.selectedConnection;\n\n const connectionCursorStyle = scene.isEditingEnabled ? 'grab' : '';\n const selectedStyles = { stroke: '#44aaff', strokeOpacity: 0.6, strokeWidth: strokeWidth + 5 };\n\n const CONNECTION_HEAD_ID_START = `connectionHeadStart-${headId + Math.random()}`;\n const CONNECTION_HEAD_ID_END = `connectionHeadEnd-${headId + Math.random()}`;\n\n const radius = strokeRadius;\n // Create vertex path and populate array of add vertex controls\n const addVertices: ConnectionCoordinates[] = [];\n let pathString = `M${x1} ${y1} `;\n if (vertices?.length) {\n vertices.map((vertex, index) => {\n const { x, y } = vertex;\n\n // Convert vertex relative coordinates to scene coordinates\n const X = x * xDist + xStart;\n const Y = y * yDist + yStart;\n\n // Initialize coordinates for first arc control point\n let xa = X;\n let ya = Y;\n\n // Initialize coordinates for second arc control point\n let xb = X;\n let yb = Y;\n\n // Initialize half arc distance and segment angles\n let lHalfArc = 0;\n let angle1 = 0;\n let angle2 = 0;\n\n // Only calculate arcs if there is a radius\n if (radius) {\n if (index < vertices.length - 1) {\n const Xn = vertices[index + 1].x * xDist + xStart;\n const Yn = vertices[index + 1].y * yDist + yStart;\n if (index === 0) {\n // First vertex\n angle1 = calculateAngle(x1, y1, X, Y);\n angle2 = calculateAngle(X, Y, Xn, Yn);\n } else {\n // All vertices\n const previousVertex = vertices[index - 1];\n const Xp = previousVertex.x * xDist + xStart;\n const Yp = previousVertex.y * yDist + yStart;\n angle1 = calculateAngle(Xp, Yp, X, Y);\n angle2 = calculateAngle(X, Y, Xn, Yn);\n }\n } else {\n // Last vertex\n if (index > 0) {\n // Not also the first vertex\n const previousVertex = vertices[index - 1];\n const Xp = previousVertex.x * xDist + xStart;\n const Yp = previousVertex.y * yDist + yStart;\n angle1 = calculateAngle(Xp, Yp, X, Y);\n } else {\n angle1 = calculateAngle(x1, y1, X, Y);\n }\n angle2 = calculateAngle(X, Y, x2, y2);\n }\n\n // Calculate angle between two segments where arc will be placed\n const theta = angle2 - angle1; //radians\n // Attempt to determine if arc is counter clockwise (ccw)\n const ccw = theta < 0;\n // Half arc is used for arc control points\n lHalfArc = radius * Math.tan(theta / 2);\n if (ccw) {\n lHalfArc *= -1;\n }\n }\n\n if (index === 0) {\n // For first vertex\n addVertices.push(\n calculateMidpoint((x1 - xStart) / (xEnd - xStart), (y1 - yStart) / (yEnd - yStart), x, y)\n );\n\n // Only calculate arcs if there is a radius\n if (radius) {\n // Length of segment\n const lSegment = calculateDistance(X, Y, x1, y1);\n if (Math.abs(lHalfArc) > 0.5 * Math.abs(lSegment)) {\n // Limit curve control points to mid segment\n lHalfArc = 0.5 * lSegment;\n }\n // Default next point to last point\n let Xn = x2;\n let Yn = y2;\n if (index < vertices.length - 1) {\n // Not also the last point\n const nextVertex = vertices[index + 1];\n Xn = nextVertex.x * xDist + xStart;\n Yn = nextVertex.y * yDist + yStart;\n }\n\n // Length of next segment\n const lSegmentNext = calculateDistance(X, Y, Xn, Yn);\n if (Math.abs(lHalfArc) > 0.5 * Math.abs(lSegmentNext)) {\n // Limit curve control points to mid segment\n lHalfArc = 0.5 * lSegmentNext;\n }\n // Calculate arc control points\n const lDelta = lSegment - lHalfArc;\n xa = Math.round(lDelta * Math.cos(angle1) + x1);\n ya = Math.round(lDelta * Math.sin(angle1) + y1);\n xb = Math.round(lHalfArc * Math.cos(angle2) + X);\n yb = Math.round(lHalfArc * Math.sin(angle2) + Y);\n\n // Check if arc control points are inside of segment, otherwise swap sign\n if ((xa > X && xa > x1) || (xa < X && xa < x1)) {\n xa = (lDelta + 2 * lHalfArc) * Math.cos(angle1) + x1;\n ya = (lDelta + 2 * lHalfArc) * Math.sin(angle1) + y1;\n xb = -lHalfArc * Math.cos(angle2) + X;\n yb = -lHalfArc * Math.sin(angle2) + Y;\n }\n }\n } else {\n // For all other vertices\n const previousVertex = vertices[index - 1];\n addVertices.push(calculateMidpoint(previousVertex.x, previousVertex.y, x, y));\n\n // Only calculate arcs if there is a radius\n if (radius) {\n // Convert previous vertex relative coorindates to scene coordinates\n const Xp = previousVertex.x * xDist + xStart;\n const Yp = previousVertex.y * yDist + yStart;\n\n // Length of segment\n const lSegment = calculateDistance(X, Y, Xp, Yp);\n if (Math.abs(lHalfArc) > 0.5 * Math.abs(lSegment)) {\n // Limit curve control points to mid segment\n lHalfArc = 0.5 * lSegment;\n }\n // Default next point to last point\n let Xn = x2;\n let Yn = y2;\n if (index < vertices.length - 1) {\n // Not also the last point\n const nextVertex = vertices[index + 1];\n Xn = nextVertex.x * xDist + xStart;\n Yn = nextVertex.y * yDist + yStart;\n }\n\n // Length of next segment\n const lSegmentNext = calculateDistance(X, Y, Xn, Yn);\n if (Math.abs(lHalfArc) > 0.5 * Math.abs(lSegmentNext)) {\n // Limit curve control points to mid segment\n lHalfArc = 0.5 * lSegmentNext;\n }\n\n // Calculate arc control points\n const lDelta = lSegment - lHalfArc;\n xa = Math.round(lDelta * Math.cos(angle1) + Xp);\n ya = Math.round(lDelta * Math.sin(angle1) + Yp);\n xb = Math.round(lHalfArc * Math.cos(angle2) + X);\n yb = Math.round(lHalfArc * Math.sin(angle2) + Y);\n\n // Check if arc control points are inside of segment, otherwise swap sign\n if ((xa > X && xa > Xp) || (xa < X && xa < Xp)) {\n xa = (lDelta + 2 * lHalfArc) * Math.cos(angle1) + Xp;\n ya = (lDelta + 2 * lHalfArc) * Math.sin(angle1) + Yp;\n xb = -lHalfArc * Math.cos(angle2) + X;\n yb = -lHalfArc * Math.sin(angle2) + Y;\n }\n }\n }\n if (index === vertices.length - 1) {\n // For last vertex only\n addVertices.push(\n calculateMidpoint((x2 - xStart) / (xEnd - xStart), (y2 - yStart) / (yEnd - yStart), x, y)\n );\n }\n // Add segment to path\n pathString += `L${xa} ${ya} `;\n\n if (lHalfArc !== 0) {\n // Add arc if applicable\n pathString += `Q ${X} ${Y} ${xb} ${yb} `;\n }\n });\n // Add last segment\n pathString += `L${x2} ${y2}`;\n }\n\n const markerStart =\n arrowDirection === ConnectionDirection.Reverse || arrowDirection === ConnectionDirection.Both\n ? `url(#${CONNECTION_HEAD_ID_START})`\n : undefined;\n\n const markerEnd =\n arrowDirection === ConnectionDirection.Forward || arrowDirection === ConnectionDirection.Both\n ? `url(#${CONNECTION_HEAD_ID_END})`\n : undefined;\n\n const getAnimationDirection = () => {\n let values = '100;0';\n\n if (arrowDirection === ConnectionDirection.Reverse) {\n values = '0;100';\n }\n\n return values;\n };\n\n return (\n <g key={idx} onClick={() => selectConnection(v)}>\n <defs>\n <marker\n id={CONNECTION_HEAD_ID_START}\n markerWidth=\"10\"\n markerHeight=\"7\"\n refX=\"0\"\n refY=\"3.5\"\n orient=\"auto\"\n stroke={strokeColor}\n >\n <polygon points=\"10 0, 0 3.5, 10 7\" fill={strokeColor} />\n </marker>\n <marker\n id={CONNECTION_HEAD_ID_END}\n markerWidth=\"10\"\n markerHeight=\"7\"\n refX=\"10\"\n refY=\"3.5\"\n orient=\"auto\"\n stroke={strokeColor}\n >\n <polygon points=\"0 0, 10 3.5, 0 7\" fill={strokeColor} />\n </marker>\n </defs>\n {vertices?.length ? (\n // Render path with vertices\n <g>\n {/* heighlight line */}\n <path\n id={`${CONNECTION_LINE_ID}_transparent`}\n d={pathString}\n cursor={connectionCursorStyle}\n pointerEvents=\"auto\"\n stroke=\"transparent\"\n strokeWidth={15}\n fill={'none'}\n style={isSelected ? selectedStyles : {}}\n />\n {/* real line */}\n <path\n d={pathString}\n stroke={strokeColor}\n strokeWidth={strokeWidth}\n strokeDasharray={lineStyle}\n strokeDashoffset={1}\n fill={'none'}\n markerEnd={markerEnd}\n markerStart={markerStart}\n >\n {shouldAnimate && (\n <animate\n attributeName=\"stroke-dashoffset\"\n values={getAnimationDirection()}\n dur=\"5s\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\"\n fill={'freeze'}\n />\n )}\n </path>\n {isSelected && (\n <g>\n {/* vertices */}\n {vertices.map((value, index) => {\n return (\n <circle\n id={CONNECTION_VERTEX_ID}\n data-index={index}\n key={`${CONNECTION_VERTEX_ID}${index}_${idx}`}\n cx={value.x * xDist + xStart}\n cy={value.y * yDist + yStart}\n r={5}\n stroke={strokeColor}\n className={styles.vertex}\n cursor={'crosshair'}\n pointerEvents=\"auto\"\n />\n );\n })}\n {/* midpoints */}\n {vertices.length < maximumVertices &&\n addVertices.map((value, index) => {\n return (\n <circle\n id={CONNECTION_VERTEX_ADD_ID}\n data-index={index}\n key={`${CONNECTION_VERTEX_ADD_ID}${index}_${idx}`}\n cx={value.x * xDist + xStart}\n cy={value.y * yDist + yStart}\n r={4}\n stroke={strokeColor}\n className={styles.addVertex}\n cursor={'crosshair'}\n pointerEvents=\"auto\"\n />\n );\n })}\n </g>\n )}\n </g>\n ) : (\n // Render line without vertices\n <g>\n {/* heighlight line */}\n <line\n id={`${CONNECTION_LINE_ID}_transparent`}\n cursor={connectionCursorStyle}\n pointerEvents=\"auto\"\n stroke=\"transparent\"\n strokeWidth={15}\n style={isSelected ? selectedStyles : {}}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n />\n {/* real line */}\n <line\n id={CONNECTION_LINE_ID}\n stroke={strokeColor}\n pointerEvents=\"auto\"\n strokeWidth={strokeWidth}\n markerEnd={markerEnd}\n markerStart={markerStart}\n strokeDasharray={lineStyle}\n strokeDashoffset={1}\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n cursor={connectionCursorStyle}\n >\n {shouldAnimate && (\n <animate\n attributeName=\"stroke-dashoffset\"\n values={getAnimationDirection()}\n dur=\"5s\"\n calcMode=\"linear\"\n repeatCount=\"indefinite\"\n fill={'freeze'}\n />\n )}\n </line>\n {/* initial midpoint */}\n {isSelected && (\n <circle\n id={CONNECTION_VERTEX_ADD_ID}\n data-index={0}\n cx={midpoint.x}\n cy={midpoint.y}\n r={4}\n stroke={strokeColor}\n className={styles.addVertex}\n cursor={'crosshair'}\n pointerEvents=\"auto\"\n />\n )}\n </g>\n )}\n </g>\n );\n })\n );\n };\n\n return (\n <>\n <svg ref={setConnectionsSVGRef} className={styles.connection}>\n <defs>\n <marker\n id={EDITOR_HEAD_ID}\n markerWidth=\"10\"\n markerHeight=\"7\"\n refX=\"10\"\n refY=\"3.5\"\n orient=\"auto\"\n stroke={defaultArrowColor}\n >\n <polygon points=\"0 0, 10 3.5, 0 7\" fill={defaultArrowColor} />\n </marker>\n </defs>\n {/* svg line for connection creation */}\n <line\n ref={setLineRef}\n stroke={defaultArrowColor}\n strokeWidth={2}\n markerEnd={`url(#${EDITOR_HEAD_ID})`}\n style={{ display: 'none' }}\n />\n\n {/* svg circle for initial vertex?\n path? is it for the line drag handling? */}\n <path\n ref={setVertexPathRef}\n stroke={defaultArrowColor}\n strokeWidth={2}\n strokeDasharray={'5, 5'}\n fill={'none'}\n style={{ display: 'none' }}\n />\n <circle\n ref={setVertexRef}\n stroke={defaultArrowColor}\n r={4}\n className={styles.vertex}\n style={{ display: 'none' }}\n />\n\n {renderConnections()}\n </svg>\n </>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n connection: css({\n position: 'absolute',\n zIndex: 1000,\n pointerEvents: 'none',\n }),\n vertex: css({\n fill: '#44aaff',\n strokeWidth: 2,\n }),\n addVertex: css({\n fill: '#44aaff',\n opacity: 0.5,\n strokeWidth: 1,\n }),\n});\n","import * as React from 'react';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { config } from '@grafana/runtime';\nimport { CanvasConnection, ConnectionCoordinates, ConnectionPath } from 'app/features/canvas/element';\nimport { ElementState } from 'app/features/canvas/runtime/element';\nimport { Scene } from 'app/features/canvas/runtime/scene';\nimport { findElementByTarget } from 'app/features/canvas/runtime/sceneElementManagement';\n\nimport { ConnectionState } from '../../types';\nimport {\n calculateAngle,\n calculateCoordinates2,\n getConnections,\n getElementTransformAndDimensions,\n getNormalizedRotatedOffset,\n getParentBoundingClientRect,\n isConnectionSource,\n isConnectionTarget,\n} from '../../utils';\n\nimport {\n CONNECTION_ANCHOR_ALT,\n CONNECTION_ANCHOR_HIGHLIGHT_OFFSET,\n ANCHORS,\n ANCHOR_PADDING,\n HALF_SIZE,\n} from './ConnectionAnchors';\nimport { ConnectionAnchors } from './ConnectionAnchors2';\nimport { ConnectionSVG } from './ConnectionSVG2';\n\nexport const CONNECTION_VERTEX_ID = 'vertex';\nexport const CONNECTION_VERTEX_ADD_ID = 'vertexAdd';\nconst CONNECTION_VERTEX_ORTHO_TOLERANCE = 0.05; // Cartesian ratio against vertical or horizontal tolerance\nconst CONNECTION_VERTEX_SNAP_TOLERANCE = (5 / 180) * Math.PI; // Multi-segment snapping angle in radians to trigger vertex removal\n\nexport class Connections2 {\n scene: Scene;\n connectionAnchorDiv?: HTMLDivElement;\n anchorsDiv?: HTMLDivElement;\n connectionLine?: SVGLineElement;\n connectionVertexPath?: SVGPathElement;\n connectionVertex?: SVGCircleElement;\n connectionsSVG?: SVGElement;\n connectionSource?: ElementState;\n connectionTarget?: ElementState;\n isDrawingConnection?: boolean;\n selectedVertexIndex?: number;\n didConnectionLeaveHighlight?: boolean;\n state: ConnectionState[] = [];\n readonly selection = new BehaviorSubject<ConnectionState | undefined>(undefined);\n\n constructor(scene: Scene) {\n this.scene = scene;\n this.updateState();\n }\n\n select = (connection: ConnectionState | undefined) => {\n if (connection === this.selection.value) {\n return;\n }\n this.selection.next(connection);\n };\n\n updateState = () => {\n this.state = getConnections(this.scene.byName);\n\n const s = this.selection.value;\n if (s) {\n for (let c of this.state) {\n if (c.source === s.source && c.index === s.index) {\n this.selection.next(c);\n break;\n }\n }\n }\n };\n\n setConnectionAnchorRef = (anchorElement: HTMLDivElement) => {\n this.connectionAnchorDiv = anchorElement;\n };\n\n setAnchorsRef = (anchorsElement: HTMLDivElement) => {\n this.anchorsDiv = anchorsElement;\n };\n\n setConnectionsSVGRef = (connectionsSVG: SVGElement) => {\n this.connectionsSVG = connectionsSVG;\n };\n\n setConnectionLineRef = (connectionLine: SVGLineElement) => {\n this.connectionLine = connectionLine;\n };\n\n setConnectionVertexRef = (connectionVertex: SVGCircleElement) => {\n this.connectionVertex = connectionVertex;\n };\n\n setConnectionVertexPathRef = (connectionVertexPath: SVGPathElement) => {\n this.connectionVertexPath = connectionVertexPath;\n };\n\n // Recursively find the first parent that is a canvas element\n findElementTarget = (element: Element): ElementState | undefined => {\n let elementTarget = undefined;\n\n // Cap recursion at the scene level\n if (element === this.scene.viewportDiv) {\n return undefined;\n }\n\n elementTarget = findElementByTarget(element, this.scene.root.elements);\n\n if (!elementTarget && element.parentElement) {\n elementTarget = this.findElementTarget(element.parentElement);\n }\n\n return elementTarget;\n };\n\n handleMouseEnter = (event: React.MouseEvent) => {\n if (!(event.target instanceof Element) || !this.scene.isEditingEnabled) {\n return;\n }\n\n let element: ElementState | undefined = this.findElementTarget(event.target);\n\n if (!element) {\n console.log('no element');\n return;\n }\n\n if (this.isDrawingConnection) {\n this.connectionTarget = element;\n } else {\n this.connectionSource = element;\n if (!this.connectionSource) {\n console.log('no connection source');\n return;\n }\n }\n\n const customElementAnchors = element?.item.customConnectionAnchors || ANCHORS;\n // This type cast is necessary as TS doesn't understand that `Element` is an `HTMLElement`\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const anchors = Array.from(this.anchorsDiv?.children as HTMLCollectionOf<HTMLElement>);\n const anchorsAmount = customElementAnchors.length;\n\n // re-calculate the position of the existing anchors on hover\n // and hide the rest of the anchors if there are more than the custom ones\n anchors.forEach((anchor, index) => {\n if (index >= anchorsAmount) {\n anchor.style.display = 'none';\n } else {\n const { x, y } = customElementAnchors[index];\n anchor.style.top = `calc(${-y * 50 + 50}% - ${HALF_SIZE}px - ${ANCHOR_PADDING}px)`;\n anchor.style.left = `calc(${x * 50 + 50}% - ${HALF_SIZE}px - ${ANCHOR_PADDING}px)`;\n anchor.style.display = 'block';\n }\n });\n\n const { top, left, width, height, rotation } = getElementTransformAndDimensions(element.div!);\n\n if (this.connectionAnchorDiv) {\n this.connectionAnchorDiv.style.display = 'none';\n this.connectionAnchorDiv.style.display = 'block';\n this.connectionAnchorDiv.style.transform = `translate(${left}px, ${top}px) rotate(${rotation}deg)`;\n this.connectionAnchorDiv.style.height = `${height}px`;\n this.connectionAnchorDiv.style.width = `${width}px`;\n }\n };\n\n // Return boolean indicates if connection anchors were hidden or not\n handleMouseLeave = (event: React.MouseEvent | React.FocusEvent): boolean => {\n // If mouse is leaving INTO the anchor image, don't remove div\n if (\n event.relatedTarget instanceof HTMLImageElement &&\n event.relatedTarget.getAttribute('alt') === CONNECTION_ANCHOR_ALT\n ) {\n return false;\n }\n\n this.connectionTarget = undefined;\n this.connectionAnchorDiv!.style.display = 'none';\n return true;\n };\n\n connectionListener = (event: MouseEvent) => {\n event.preventDefault();\n\n if (!(this.connectionLine && this.scene.viewportDiv && this.scene.viewportDiv.parentElement)) {\n return;\n }\n const { scale } = this.scene;\n const parentBoundingRect = getParentBoundingClientRect(this.scene);\n\n if (!parentBoundingRect) {\n return;\n }\n\n const x = (event.pageX - parentBoundingRect.x) / scale;\n const y = (event.pageY - parentBoundingRect.y) / scale;\n\n this.connectionLine.setAttribute('x2', `${x}`);\n this.connectionLine.setAttribute('y2', `${y}`);\n\n const connectionLineX1 = this.connectionLine.x1.baseVal.value;\n const connectionLineY1 = this.connectionLine.y1.baseVal.value;\n\n if (!this.didConnectionLeaveHighlight) {\n const connectionLength = Math.hypot(x - connectionLineX1, y - connectionLineY1);\n if (connectionLength > CONNECTION_ANCHOR_HIGHLIGHT_OFFSET) {\n this.didConnectionLeaveHighlight = true;\n this.connectionLine.style.display = 'block';\n this.isDrawingConnection = true;\n }\n }\n\n //\n // SAVING CONNECTION\n //\n if (!event.buttons) {\n if (this.connectionSource && this.connectionSource.div && this.connectionSource.div.parentElement) {\n const { x: sourceX, y: sourceY } = getNormalizedRotatedOffset(\n this.connectionSource.div,\n connectionLineX1,\n connectionLineY1\n );\n\n let targetX;\n let targetY;\n let targetName;\n\n if (this.connectionTarget && this.connectionTarget.div) {\n ({ x: targetX, y: targetY } = getNormalizedRotatedOffset(this.connectionTarget.div, x, y));\n targetName = this.connectionTarget.options.name;\n } else {\n // if there is no target (open connection)\n targetX = x;\n targetY = y;\n }\n\n const connection = {\n source: {\n x: sourceX,\n y: sourceY,\n },\n target: {\n x: targetX,\n y: targetY,\n },\n targetName: targetName,\n color: {\n fixed: config.theme2.colors.text.primary,\n },\n size: {\n fixed: 2,\n min: 1,\n max: 10,\n },\n path: ConnectionPath.Straight,\n };\n\n const { options } = this.connectionSource;\n if (!options.connections) {\n options.connections = [];\n }\n if (this.didConnectionLeaveHighlight) {\n this.connectionSource.options.connections = [...options.connections, connection];\n this.connectionSource.onChange(this.connectionSource.options);\n }\n }\n\n if (this.connectionLine) {\n this.connectionLine.style.display = 'none';\n }\n\n if (this.scene.selecto && this.scene.selecto.rootContainer) {\n this.scene.selecto.rootContainer.style.cursor = 'default';\n this.scene.selecto.rootContainer.removeEventListener('mousemove', this.connectionListener);\n }\n\n this.isDrawingConnection = false;\n this.updateState();\n this.scene.save();\n }\n };\n\n // Handles mousemove and mouseup events when dragging an existing vertex\n vertexListener = (event: MouseEvent) => {\n this.scene.selecto!.rootContainer!.style.cursor = 'crosshair';\n\n event.preventDefault();\n\n if (!(this.connectionVertex && this.scene.viewportDiv && this.scene.viewportDiv.parentElement)) {\n return;\n }\n\n const parentBoundingRect = getParentBoundingClientRect(this.scene);\n\n if (!parentBoundingRect) {\n return;\n }\n\n const { scale } = this.scene;\n const x = (event.pageX - parentBoundingRect.x) / scale;\n const y = (event.pageY - parentBoundingRect.y) / scale;\n\n this.connectionVertex?.setAttribute('cx', `${x}`);\n this.connectionVertex?.setAttribute('cy', `${y}`);\n\n const selectedValue = this.selection.value;\n\n const { x1, y1, x2, y2 } = calculateCoordinates2(\n selectedValue!.source,\n selectedValue!.target,\n selectedValue?.info!\n );\n\n let { xStart, yStart, xEnd, yEnd } = { xStart: x1, yStart: y1, xEnd: x2, yEnd: y2 };\n if (selectedValue?.sourceOriginal && selectedValue.targetOriginal) {\n xStart = selectedValue.sourceOriginal.x;\n yStart = selectedValue.sourceOriginal.y;\n xEnd = selectedValue.targetOriginal.x;\n yEnd = selectedValue.targetOriginal.y;\n }\n\n const xDist = xEnd - xStart;\n const yDist = yEnd - yStart;\n\n let vx1 = x1;\n let vy1 = y1;\n let vx2 = x2;\n let vy2 = y2;\n if (selectedValue && selectedValue.vertices) {\n if (this.selectedVertexIndex !== undefined && this.selectedVertexIndex > 0) {\n vx1 = selectedValue.vertices[this.selectedVertexIndex - 1].x * xDist + xStart;\n vy1 = selectedValue.vertices[this.selectedVertexIndex - 1].y * yDist + yStart;\n }\n if (this.selectedVertexIndex !== undefined && this.selectedVertexIndex < selectedValue.vertices.length - 1) {\n vx2 = selectedValue.vertices[this.selectedVertexIndex + 1].x * xDist + xStart;\n vy2 = selectedValue.vertices[this.selectedVertexIndex + 1].y * yDist + yStart;\n }\n }\n\n // Check if slope before vertex and after vertex is within snapping tolerance\n let xSnap = x;\n let ySnap = y;\n let deleteVertex = false;\n // Ignore if control key being held\n if (!event.ctrlKey) {\n // Check if segment before and after vertex are close to vertical or horizontal\n const verticalBefore = Math.abs((xSnap - vx1) / (ySnap - vy1)) < CONNECTION_VERTEX_ORTHO_TOLERANCE;\n const verticalAfter = Math.abs((xSnap - vx2) / (ySnap - vy2)) < CONNECTION_VERTEX_ORTHO_TOLERANCE;\n const horizontalBefore = Math.abs((ySnap - vy1) / (xSnap - vx1)) < CONNECTION_VERTEX_ORTHO_TOLERANCE;\n const horizontalAfter = Math.abs((ySnap - vy2) / (xSnap - vx2)) < CONNECTION_VERTEX_ORTHO_TOLERANCE;\n\n if (verticalBefore) {\n xSnap = vx1;\n } else if (verticalAfter) {\n xSnap = vx2;\n }\n if (horizontalBefore) {\n ySnap = vy1;\n } else if (horizontalAfter) {\n ySnap = vy2;\n }\n\n if ((verticalBefore || verticalAfter) && (horizontalBefore || horizontalAfter)) {\n this.scene.selecto!.rootContainer!.style.cursor = 'move';\n } else if (verticalBefore || verticalAfter) {\n this.scene.selecto!.rootContainer!.style.cursor = 'col-resize';\n } else if (horizontalBefore || horizontalAfter) {\n this.scene.selecto!.rootContainer!.style.cursor = 'row-resize';\n }\n\n const angleOverall = calculateAngle(vx1, vy1, vx2, vy2);\n const angleBefore = calculateAngle(vx1, vy1, x, y);\n deleteVertex = Math.abs(angleBefore - angleOverall) < CONNECTION_VERTEX_SNAP_TOLERANCE;\n }\n\n if (deleteVertex) {\n // Display temporary vertex removal\n this.connectionVertexPath?.setAttribute('d', `M${vx1} ${vy1} L${vx2} ${vy2}`);\n this.connectionVertexPath!.style.display = 'block';\n this.connectionVertex.style.display = 'none';\n } else {\n // Display temporary vertex during drag\n this.connectionVertexPath?.setAttribute('d', `M${vx1} ${vy1} L${xSnap} ${ySnap} L${vx2} ${vy2}`);\n this.connectionVertexPath!.style.display = 'block';\n this.connectionVertex.style.display = 'block';\n }\n\n // Handle mouseup\n if (!event.buttons) {\n // Remove existing event listener\n this.scene.selecto?.rootContainer?.removeEventListener('mousemove', this.vertexListener);\n this.scene.selecto?.rootContainer?.removeEventListener('mouseup', this.vertexListener);\n this.scene.selecto!.rootContainer!.style.cursor = 'auto';\n this.connectionVertexPath!.style.display = 'none';\n this.connectionVertex.style.display = 'none';\n\n // call onChange here and update appropriate index of connection vertices array\n const connectionIndex = selectedValue?.index;\n const vertexIndex = this.selectedVertexIndex;\n\n if (connectionIndex !== undefined && vertexIndex !== undefined) {\n const currentSource = selectedValue!.source;\n if (currentSource.options.connections) {\n const currentConnections = [...currentSource.options.connections];\n if (currentConnections[connectionIndex].vertices) {\n const currentVertices = [...currentConnections[connectionIndex].vertices!];\n\n // TODO for vertex removal, clear out originals?\n if (deleteVertex) {\n currentVertices.splice(vertexIndex, 1);\n } else {\n const currentVertex = { ...currentVertices[vertexIndex] };\n\n currentVertex.x = (xSnap - xStart) / xDist;\n currentVertex.y = (ySnap - yStart) / yDist;\n\n currentVertices[vertexIndex] = currentVertex;\n }\n\n currentConnections[connectionIndex] = {\n ...currentConnections[connectionIndex],\n vertices: currentVertices,\n };\n\n // Update save model\n currentSource.onChange({ ...currentSource.options, connections: currentConnections });\n this.updateState();\n this.scene.save();\n }\n }\n }\n }\n };\n\n // Handles mousemove and mouseup events when dragging a new vertex\n vertexAddListener = (event: MouseEvent) => {\n this.scene.selecto!.rootContainer!.style.cursor = 'crosshair';\n\n event.preventDefault();\n\n if (!(this.connectionVertex && this.scene.viewportDiv && this.scene.viewportDiv.parentElement)) {\n return;\n }\n\n const parentBoundingRect = getParentBoundingClientRect(this.scene);\n\n if (!parentBoundingRect) {\n return;\n }\n\n const { scale } = this.scene;\n const x = (event.pageX - parentBoundingRect.x) / scale;\n const y = (event.pageY - parentBoundingRect.y) / scale;\n\n this.connectionVertex?.setAttribute('cx', `${x}`);\n this.connectionVertex?.setAttribute('cy', `${y}`);\n\n const selectedValue = this.selection.value;\n\n const { x1, y1, x2, y2 } = calculateCoordinates2(\n selectedValue!.source,\n selectedValue!.target,\n selectedValue?.info!\n );\n\n let { xStart, yStart, xEnd, yEnd } = { xStart: x1, yStart: y1, xEnd: x2, yEnd: y2 };\n if (selectedValue?.sourceOriginal && selectedValue.targetOriginal) {\n xStart = selectedValue.sourceOriginal.x;\n yStart = selectedValue.sourceOriginal.y;\n xEnd = selectedValue.targetOriginal.x;\n yEnd = selectedValue.targetOriginal.y;\n }\n\n const xDist = xEnd - xStart;\n const yDist = yEnd - yStart;\n\n let vx1 = x1;\n let vy1 = y1;\n let vx2 = x2;\n let vy2 = y2;\n if (selectedValue && selectedValue.vertices) {\n if (this.selectedVertexIndex !== undefined && this.selectedVertexIndex > 0) {\n vx1 = selectedValue.vertices[this.selectedVertexIndex - 1].x * xDist + xStart;\n vy1 = selectedValue.vertices[this.selectedVertexIndex - 1].y * yDist + yStart;\n }\n if (this.selectedVertexIndex !== undefined && this.selectedVertexIndex < selectedValue.vertices.length) {\n vx2 = selectedValue.vertices[this.selectedVertexIndex].x * xDist + xStart;\n vy2 = selectedValue.vertices[this.selectedVertexIndex].y * yDist + yStart;\n }\n }\n\n // Check if slope before vertex and after vertex is within snapping tolerance\n let xSnap = x;\n let ySnap = y;\n // Ignore if control key being held\n if (!event.ctrlKey) {\n // Check if segment before and after vertex are close to vertical or horizontal\n const verticalBefore = Math.abs((xSnap - vx1) / (ySnap - vy1)) < CONNECTION_VERTEX_ORTHO_TOLERANCE;\n const verticalAfter = Math.abs((xSnap - vx2) / (ySnap - vy2)) < CONNECTION_VERTEX_ORTHO_TOLERANCE;\n const horizontalBefore = Math.abs((ySnap - vy1) / (xSnap - vx1)) < CONNECTION_VERTEX_ORTHO_TOLERANCE;\n const horizontalAfter = Math.abs((ySnap - vy2) / (xSnap - vx2)) < CONNECTION_VERTEX_ORTHO_TOLERANCE;\n\n if (verticalBefore) {\n xSnap = vx1;\n } else if (verticalAfter) {\n xSnap = vx2;\n }\n if (horizontalBefore) {\n ySnap = vy1;\n } else if (horizontalAfter) {\n ySnap = vy2;\n }\n\n if ((verticalBefore || verticalAfter) && (horizontalBefore || horizontalAfter)) {\n this.scene.selecto!.rootContainer!.style.cursor = 'move';\n } else if (verticalBefore || verticalAfter) {\n this.scene.selecto!.rootContainer!.style.cursor = 'col-resize';\n } else if (horizontalBefore || horizontalAfter) {\n this.scene.selecto!.rootContainer!.style.cursor = 'row-resize';\n }\n }\n\n this.connectionVertexPath?.setAttribute('d', `M${vx1} ${vy1} L${xSnap} ${ySnap} L${vx2} ${vy2}`);\n this.connectionVertexPath!.style.display = 'block';\n this.connectionVertex.style.display = 'block';\n\n // Handle mouseup\n if (!event.buttons) {\n // Remove existing event listener\n this.scene.selecto?.rootContainer?.removeEventListener('mousemove', this.vertexAddListener);\n this.scene.selecto?.rootContainer?.removeEventListener('mouseup', this.vertexAddListener);\n this.scene.selecto!.rootContainer!.style.cursor = 'auto';\n this.connectionVertexPath!.style.display = 'none';\n this.connectionVertex.style.display = 'none';\n\n // call onChange here and insert new vertex at appropriate index of connection vertices array\n const connectionIndex = selectedValue?.index;\n const vertexIndex = this.selectedVertexIndex;\n\n if (connectionIndex !== undefined && vertexIndex !== undefined) {\n const currentSource = selectedValue!.source;\n if (currentSource.options.connections) {\n const currentConnections = [...currentSource.options.connections];\n // Calculate normalized coordinates for the new vertex, using rotatedX/Y\n const newVertex = { x: (xSnap - xStart) / xDist, y: (ySnap - yStart) / yDist };\n if (currentConnections[connectionIndex].vertices) {\n const currentVertices = [...currentConnections[connectionIndex].vertices!];\n currentVertices.splice(vertexIndex, 0, newVertex);\n currentConnections[connectionIndex] = {\n ...currentConnections[connectionIndex],\n vertices: currentVertices,\n };\n } else {\n // For first vertex creation\n const currentVertices: ConnectionCoordinates[] = [newVertex];\n currentConnections[connectionIndex] = {\n ...currentConnections[connectionIndex],\n vertices: currentVertices,\n };\n }\n\n // Check for original state\n if (\n !currentConnections[connectionIndex].sourceOriginal ||\n !currentConnections[connectionIndex].targetOriginal\n ) {\n currentConnections[connectionIndex] = {\n ...currentConnections[connectionIndex],\n sourceOriginal: { x: x1, y: y1 },\n targetOriginal: { x: x2, y: y2 },\n };\n }\n // Update save model\n currentSource.onChange({ ...currentSource.options, connections: currentConnections });\n this.updateState();\n this.scene.save();\n }\n }\n }\n };\n\n handleConnectionDragStart = (selectedTarget: HTMLElement, clientX: number, clientY: number) => {\n this.scene.selecto!.rootContainer!.style.cursor = 'crosshair';\n\n if (this.connectionLine && this.scene.viewportDiv && this.scene.viewportDiv.parentElement) {\n const connectionStartTargetBox = selectedTarget.getBoundingClientRect();\n\n const { scale } = this.scene;\n const parentBoundingRect = getParentBoundingClientRect(this.scene);\n\n if (!parentBoundingRect) {\n return;\n }\n\n // Multiply by transform scale to calculate the correct scaled offset\n const connectionAnchorOffsetX = CONNECTION_ANCHOR_HIGHLIGHT_OFFSET * scale;\n const connectionAnchorOffsetY = CONNECTION_ANCHOR_HIGHLIGHT_OFFSET * scale;\n\n const x = (connectionStartTargetBox.x - parentBoundingRect.x + connectionAnchorOffsetX) / scale;\n const y = (connectionStartTargetBox.y - parentBoundingRect.y + connectionAnchorOffsetY) / scale;\n\n const mouseX = clientX - parentBoundingRect.x;\n const mouseY = clientY - parentBoundingRect.y;\n\n this.connectionLine.setAttribute('x1', `${x}`);\n this.connectionLine.setAttribute('y1', `${y}`);\n this.connectionLine.setAttribute('x2', `${mouseX}`);\n this.connectionLine.setAttribute('y2', `${mouseY}`);\n this.didConnectionLeaveHighlight = false;\n }\n\n this.scene.selecto?.rootContainer?.addEventListener('mousemove', this.connectionListener);\n };\n\n // Add event listener at root container during existing vertex drag\n handleVertexDragStart = (selectedTarget: HTMLElement) => {\n // Get vertex index from selected target data\n this.selectedVertexIndex = Number(selectedTarget.getAttribute('data-index'));\n\n this.scene.selecto?.rootContainer?.addEventListener('mousemove', this.vertexListener);\n this.scene.selecto?.rootContainer?.addEventListener('mouseup', this.vertexListener);\n };\n\n // Add event listener at root container during creation of new vertex\n handleVertexAddDragStart = (selectedTarget: HTMLElement) => {\n // Get vertex index from selected target data\n this.selectedVertexIndex = Number(selectedTarget.getAttribute('data-index'));\n\n this.scene.selecto?.rootContainer?.addEventListener('mousemove', this.vertexAddListener);\n this.scene.selecto?.rootContainer?.addEventListener('mouseup', this.vertexAddListener);\n };\n\n onChange = (current: ConnectionState, update: CanvasConnection) => {\n const connections = current.source.options.connections?.splice(0) ?? [];\n connections[current.index] = update;\n current.source.onChange({ ...current.source.options, connections });\n this.updateState();\n };\n\n // used for moveable actions\n connectionsNeedUpdate = (element: ElementState): boolean => {\n return isConnectionSource(element) || isConnectionTarget(element, this.scene.byName);\n };\n\n render() {\n return (\n <>\n <ConnectionAnchors\n setRef={this.setConnectionAnchorRef}\n setAnchorsRef={this.setAnchorsRef}\n handleMouseLeave={this.handleMouseLeave}\n />\n <ConnectionSVG\n setLineRef={this.setConnectionLineRef}\n setVertexPathRef={this.setConnectionVertexPathRef}\n setVertexRef={this.setConnectionVertexRef}\n setConnectionsSVGRef={this.setConnectionsSVGRef}\n scene={this.scene}\n />\n </>\n );\n }\n}\n","import { Fragment } from 'react';\n\nimport { CanvasFrameOptions } from '../frame';\n\nimport { FrameState } from './frame';\nimport { Scene } from './scene';\n\nexport class RootElement extends FrameState {\n constructor(\n public options: CanvasFrameOptions,\n public scene: Scene,\n private changeCallback: () => void\n ) {\n super(options, scene);\n\n this.sizeStyle = {\n height: '100%',\n width: '100%',\n };\n }\n\n isRoot(): this is RootElement {\n return true;\n }\n\n // root type can not change\n onChange(options: CanvasFrameOptions) {\n this.revId++;\n this.options = { ...options };\n this.changeCallback();\n }\n\n getSaveModel(): CanvasFrameOptions {\n const { placement, constraint, ...rest } = this.options;\n\n return {\n ...rest, // everything except placement & constraint\n elements: this.elements.map((v) => v.getSaveModel()),\n };\n }\n\n setRootRef = (target: HTMLDivElement) => {\n this.div = target;\n };\n\n render() {\n return (\n <div\n onContextMenu={(event) => event.preventDefault()}\n key={this.UID}\n ref={this.setRootRef}\n style={{ ...this.sizeStyle, ...this.dataStyle }}\n >\n {this.elements.map((v) => (\n <Fragment key={v.UID}>{v.render()}</Fragment>\n ))}\n </div>\n );\n }\n}\n","import { css } from '@emotion/css';\nimport InfiniteViewer from 'infinite-viewer';\nimport Moveable from 'moveable';\nimport { CSSProperties } from 'react';\nimport { BehaviorSubject, ReplaySubject, Subject, Subscription } from 'rxjs';\nimport Selecto from 'selecto';\n\nimport { AppEvents, PanelData, OneClickMode, ActionType } from '@grafana/data';\nimport { locationService } from '@grafana/runtime';\nimport {\n ColorDimensionConfig,\n ResourceDimensionConfig,\n ScalarDimensionConfig,\n ScaleDimensionConfig,\n TextDimensionConfig,\n TooltipDisplayMode,\n DirectionDimensionConfig,\n} from '@grafana/schema';\nimport { Portal } from '@grafana/ui';\nimport { config } from 'app/core/config';\nimport { DimensionContext } from 'app/features/dimensions/context';\nimport {\n getColorDimensionFromData,\n getResourceDimensionFromData,\n getScalarDimensionFromData,\n getScaleDimensionFromData,\n getTextDimensionFromData,\n getDirectionDimensionFromData,\n} from 'app/features/dimensions/utils';\nimport { CanvasContextMenu } from 'app/plugins/panel/canvas/components/CanvasContextMenu';\nimport { CanvasTooltip } from 'app/plugins/panel/canvas/components/CanvasTooltip';\nimport { Connections } from 'app/plugins/panel/canvas/components/connections/Connections';\nimport { Connections2 } from 'app/plugins/panel/canvas/components/connections/Connections2';\nimport { Options } from 'app/plugins/panel/canvas/panelcfg.gen';\nimport { AnchorPoint, CanvasTooltipPayload } from 'app/plugins/panel/canvas/types';\n\nimport appEvents from '../../../core/app_events';\nimport { CanvasPanel } from '../../../plugins/panel/canvas/CanvasPanel';\nimport { isInfinityActionWithAuth } from '../../actions/utils';\nimport { getDashboardSrv } from '../../dashboard/services/DashboardSrv';\nimport { CanvasFrameOptions } from '../frame';\nimport { DEFAULT_CANVAS_ELEMENT_CONFIG } from '../registry';\n\nimport { ElementState } from './element';\nimport { FrameState } from './frame';\nimport { RootElement } from './root';\nimport { initMoveable, calculateZoomToFitScale } from './sceneAbleManagement';\nimport { findElementByTarget } from './sceneElementManagement';\n\nexport interface SelectionParams {\n targets: Array<HTMLElement | SVGElement>;\n frame?: FrameState;\n}\n\nexport class Scene {\n styles = getStyles();\n readonly selection = new ReplaySubject<ElementState[]>(1);\n readonly moved = new Subject<number>(); // called after resize/drag for editor updates\n readonly byName = new Map<string, ElementState>();\n\n root: RootElement;\n\n revId = 0;\n\n width = 0;\n height = 0;\n scale = 1;\n scrollLeft = 0;\n scrollTop = 0;\n style: CSSProperties = {};\n data?: PanelData;\n selecto?: Selecto;\n moveable?: Moveable;\n infiniteViewer?: InfiniteViewer;\n div?: HTMLDivElement;\n viewerDiv?: HTMLDivElement;\n viewportDiv?: HTMLDivElement;\n connections: Connections | Connections2;\n currentLayer?: FrameState;\n isEditingEnabled?: boolean;\n shouldShowAdvancedTypes?: boolean;\n shouldPanZoom?: boolean;\n zoomToContent?: boolean;\n tooltipMode?: TooltipDisplayMode;\n tooltipDisableForOneClick?: boolean;\n skipNextSelectionBroadcast = false;\n ignoreDataUpdate = false;\n panel: CanvasPanel;\n contextMenuVisible?: boolean;\n openContextMenu?: (position: AnchorPoint) => void;\n contextMenuOnVisibilityChange = (visible: boolean) => {\n this.contextMenuVisible = visible;\n };\n\n isPanelEditing = locationService.getSearchObject().editPanel !== undefined;\n\n inlineEditingCallback?: () => void;\n setBackgroundCallback?: (anchorPoint: AnchorPoint) => void;\n\n tooltipCallback?: (tooltip: CanvasTooltipPayload | undefined) => void;\n tooltipPayload?: CanvasTooltipPayload;\n\n moveableActionCallback?: (moved: boolean) => void;\n\n actionConfirmationCallback?: () => void;\n\n readonly editModeEnabled = new BehaviorSubject<boolean>(false);\n subscription: Subscription;\n\n targetsToSelect = new Set<HTMLDivElement>();\n\n constructor(\n options: Options,\n public onSave: (cfg: CanvasFrameOptions) => void,\n panel: CanvasPanel\n ) {\n // TODO: Will need to update this approach for dashboard scenes\n // migration (new dashboard edit experience)\n const dashboard = getDashboardSrv().getCurrent();\n const enableEditing = options.inlineEditing && dashboard?.editable;\n\n this.root = this.load(options, enableEditing);\n\n this.subscription = this.editModeEnabled.subscribe((open) => {\n if (!this.moveable || !this.isEditingEnabled) {\n return;\n }\n this.moveable.draggable = !open;\n });\n\n this.panel = panel;\n this.connections = config.featureToggles.canvasPanelPanZoom ? new Connections2(this) : new Connections(this);\n }\n\n getNextElementName = (isFrame = false) => {\n const label = isFrame ? 'Frame' : 'Element';\n let idx = this.byName.size + 1;\n\n const max = idx + 100;\n while (true && idx < max) {\n const name = `${label} ${idx++}`;\n if (!this.byName.has(name)) {\n return name;\n }\n }\n\n return `${label} ${Date.now()}`;\n };\n\n canRename = (v: string) => {\n return !this.byName.has(v);\n };\n\n load(options: Options, enableEditing: boolean) {\n const { root, showAdvancedTypes, panZoom, zoomToContent, tooltip } = options;\n const tooltipMode = tooltip?.mode ?? TooltipDisplayMode.Single;\n const tooltipDisableForOneClick = tooltip?.disableForOneClick ?? false;\n\n this.root = new RootElement(\n root ?? {\n type: 'frame',\n elements: [DEFAULT_CANVAS_ELEMENT_CONFIG],\n },\n this,\n this.save // callback when changes are made\n );\n\n this.isEditingEnabled = enableEditing;\n this.shouldShowAdvancedTypes = showAdvancedTypes;\n this.shouldPanZoom = panZoom;\n this.zoomToContent = zoomToContent;\n this.tooltipMode = tooltipMode;\n this.tooltipDisableForOneClick = tooltipDisableForOneClick;\n\n setTimeout(() => {\n if (config.featureToggles.canvasPanelPanZoom) {\n if (this.viewportDiv && this.viewerDiv) {\n if (!this.shouldPanZoom) {\n this.scale = 1;\n this.scrollLeft = 0;\n this.scrollTop = 0;\n }\n\n // If editing is enabled, clear selecto instance\n const destroySelecto = enableEditing;\n initMoveable(destroySelecto, enableEditing, this);\n this.currentLayer = this.root;\n this.selection.next([]);\n this.connections.select(undefined);\n this.connections.updateState();\n // update initial connections svg size\n this.updateConnectionsSize();\n this.fitContent(this, zoomToContent);\n }\n } else {\n if (this.div) {\n // If editing is enabled, clear selecto instance\n const destroySelecto = enableEditing;\n initMoveable(destroySelecto, enableEditing, this);\n this.currentLayer = this.root;\n this.selection.next([]);\n this.connections.select(undefined);\n this.connections.updateState();\n }\n }\n });\n return this.root;\n }\n\n context: DimensionContext = {\n getColor: (color: ColorDimensionConfig) => getColorDimensionFromData(this.data, color),\n getScale: (scale: ScaleDimensionConfig) => getScaleDimensionFromData(this.data, scale),\n getScalar: (scalar: ScalarDimensionConfig) => getScalarDimensionFromData(this.data, scalar),\n getText: (text: TextDimensionConfig) => getTextDimensionFromData(this.data, text),\n getResource: (res: ResourceDimensionConfig) => getResourceDimensionFromData(this.data, res),\n getDirection: (direction: DirectionDimensionConfig) => getDirectionDimensionFromData(this.data, direction),\n getPanelData: () => this.data,\n };\n\n updateData(data: PanelData) {\n this.data = data;\n this.root.updateData(this.context);\n }\n\n updateSize(width: number, height: number) {\n this.width = width;\n this.height = height;\n this.style = { width, height };\n\n if (config.featureToggles.canvasPanelPanZoom) {\n this.updateConnectionsSize();\n this.fitContent(this, this.zoomToContent!);\n\n // TODO: This is a workaround to apply styles to the elements after the size update.\n // It's a good to go approach used by movable creator, but maybe we can find a better way.\n this.root.elements.forEach((el) => {\n el.applyLayoutStylesToDiv(false);\n });\n // TODO: This is a workaround to apply styles to the elements after the size update.\n // Remove this after dealing with the connection anchors stacking context issue.\n if (this.connections.connectionAnchorDiv) {\n this.connections.connectionAnchorDiv.style.display = 'none';\n }\n }\n }\n\n updateConnectionsSize() {\n const svgConnections = this.connections.connectionsSVG;\n\n if (svgConnections) {\n const scale = this.infiniteViewer!.getZoom();\n // NOTE: sometimes getScrollLeft and getScrollTop return NaN,\n // so we use || 0 to ensure we have a valid number\n const left = this.infiniteViewer!.getScrollLeft() || 0;\n const top = this.infiniteViewer!.getScrollTop() || 0;\n const width = this.width;\n const height = this.height;\n\n svgConnections.style.left = `${left}px`;\n svgConnections.style.top = `${top}px`;\n svgConnections.style.width = `${width / scale}px`;\n svgConnections.style.height = `${height / scale}px`;\n\n svgConnections.setAttribute('viewBox', `${left} ${top} ${width / scale} ${height / scale}`);\n }\n }\n\n clearCurrentSelection(skipNextSelectionBroadcast = false) {\n this.skipNextSelectionBroadcast = skipNextSelectionBroadcast;\n let event: MouseEvent = new MouseEvent('click');\n if (config.featureToggles.canvasPanelPanZoom) {\n this.selecto?.clickTarget(event, this.viewportDiv);\n } else {\n this.selecto?.clickTarget(event, this.div);\n }\n }\n\n save = (updateMoveable = false) => {\n this.onSave(this.root.getSaveModel());\n\n if (updateMoveable) {\n setTimeout(() => {\n if (config.featureToggles.canvasPanelPanZoom) {\n if (this.viewportDiv && this.viewerDiv) {\n initMoveable(true, this.isEditingEnabled, this);\n this.updateConnectionsSize();\n }\n } else {\n if (this.div) {\n initMoveable(true, this.isEditingEnabled, this);\n }\n }\n });\n }\n };\n\n setNonTargetPointerEvents = (target: Element, disablePointerEvents: boolean) => {\n const stack = [...this.root.elements];\n while (stack.length > 0) {\n const currentElement = stack.shift();\n\n if (currentElement && currentElement.div && currentElement.div !== target) {\n currentElement.applyLayoutStylesToDiv(disablePointerEvents);\n }\n\n const nestedElements = currentElement instanceof FrameState ? currentElement.elements : [];\n for (const nestedElement of nestedElements) {\n stack.unshift(nestedElement);\n }\n }\n };\n\n setRef = (sceneContainer: HTMLDivElement) => {\n this.div = sceneContainer;\n };\n\n setViewerRef = (viewerContainer: HTMLDivElement) => {\n this.viewerDiv = viewerContainer;\n };\n\n setViewportRef = (viewportContainer: HTMLDivElement) => {\n this.viewportDiv = viewportContainer;\n };\n\n select = (selection: SelectionParams) => {\n if (this.selecto) {\n this.selecto.setSelectedTargets(selection.targets);\n this.updateSelection(selection);\n this.editModeEnabled.next(false);\n\n // Hide connection anchors on programmatic select\n if (this.connections.connectionAnchorDiv) {\n this.connections.connectionAnchorDiv.style.display = 'none';\n }\n }\n };\n\n updateSelection = (selection: SelectionParams) => {\n this.moveable!.target = selection.targets;\n if (this.skipNextSelectionBroadcast) {\n this.skipNextSelectionBroadcast = false;\n return;\n }\n\n if (selection.frame) {\n this.selection.next([selection.frame]);\n } else {\n const s = selection.targets.map((t) => findElementByTarget(t, this.root.elements)!);\n this.selection.next(s);\n }\n };\n\n addToSelection = () => {\n try {\n let selection: SelectionParams = { targets: [] };\n selection.targets = [...this.targetsToSelect];\n this.select(selection);\n } catch (error) {\n appEvents.emit(AppEvents.alertError, ['Unable to add to selection']);\n }\n };\n\n fitContent = (scene: Scene, zoomToContent: boolean) => {\n const { root, viewerDiv, infiniteViewer } = scene;\n if (zoomToContent && root.div && infiniteViewer && viewerDiv) {\n const dimentions = calculateZoomToFitScale(Array.from(root.div.children), viewerDiv);\n const { scale, centerX, centerY } = dimentions;\n infiniteViewer.setZoom(scale);\n infiniteViewer.scrollTo(centerX, centerY);\n }\n };\n\n render() {\n const hasDataLinks = this.tooltipPayload?.element?.getLinks && this.tooltipPayload.element.getLinks({}).length > 0;\n const hasActions =\n this.tooltipPayload?.element?.options.actions &&\n this.tooltipPayload.element.options.actions.filter(\n (action) => action.type === ActionType.Fetch || isInfinityActionWithAuth(action)\n ).length > 0;\n\n const isTooltipValid = hasDataLinks || hasActions || this.tooltipPayload?.element?.data?.field;\n const isCanvasTooltipEnabled = this.tooltipMode !== TooltipDisplayMode.None;\n\n const isTooltipDisabledForOneClick =\n this.tooltipDisableForOneClick && this.tooltipPayload?.element?.oneClickMode !== OneClickMode.Off;\n const shouldShowElementTooltip =\n !this.isEditingEnabled && isTooltipValid && isCanvasTooltipEnabled && !isTooltipDisabledForOneClick;\n\n const sceneDiv = (\n <>\n {this.connections.render()}\n {this.root.render()}\n {this.isEditingEnabled && (\n <Portal>\n <CanvasContextMenu\n scene={this}\n panel={this.panel}\n onVisibilityChange={this.contextMenuOnVisibilityChange}\n />\n </Portal>\n )}\n {shouldShowElementTooltip && (\n <Portal>\n <CanvasTooltip scene={this} />\n </Portal>\n )}\n </>\n );\n\n return config.featureToggles.canvasPanelPanZoom ? (\n <div className={this.styles.viewer} ref={this.setViewerRef} key={this.revId} data-testid=\"canvas-scene-wrapper\">\n <div\n className={this.styles.viewport}\n ref={this.setViewportRef}\n key={this.revId}\n data-testid=\"canvas-scene-pan-zoom\"\n >\n {sceneDiv}\n </div>\n </div>\n ) : (\n <div\n key={this.revId}\n className={this.styles.wrap}\n style={this.style}\n ref={this.setRef}\n data-testid=\"canvas-scene\"\n >\n {sceneDiv}\n </div>\n );\n }\n}\n\nconst getStyles = () => ({\n wrap: css({\n overflow: 'hidden',\n position: 'relative',\n }),\n selected: css({\n zIndex: '999 !important',\n }),\n viewer: css({\n overflow: 'hidden',\n width: '100%',\n height: '100%',\n }),\n viewport: css({\n width: '100%',\n height: '100%',\n }),\n});\n","import { css } from '@emotion/css';\nimport { useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { ResourceDimensionMode } from '@grafana/schema';\nimport { Portal, useTheme2 } from '@grafana/ui';\nimport { Scene } from 'app/features/canvas/runtime/scene';\nimport { ResourcePickerPopover } from 'app/features/dimensions/editors/ResourcePickerPopover';\nimport { MediaType, ResourceFolderName } from 'app/features/dimensions/types';\n\nimport { AnchorPoint } from '../types';\n\ntype Props = {\n onClose: () => void;\n scene: Scene;\n anchorPoint: AnchorPoint;\n};\n\nexport function SetBackground({ onClose, scene, anchorPoint }: Props) {\n const defaultValue = scene.root.options.background?.image?.fixed ?? '';\n\n const [bgImage, setBgImage] = useState(defaultValue);\n const theme = useTheme2();\n const styles = getStyles(theme, anchorPoint);\n\n const onChange = (value: string | undefined) => {\n if (value) {\n setBgImage(value);\n if (scene.root) {\n scene.root.options.background = {\n ...scene.root.options.background,\n image: { mode: ResourceDimensionMode.Fixed, fixed: value },\n };\n scene.revId++;\n scene.save();\n\n scene.root.reinitializeMoveable();\n }\n\n // Force a re-render (update scene data after config update)\n if (scene) {\n scene.updateData(scene.data!);\n }\n }\n\n onClose();\n };\n\n return (\n <Portal className={styles.portalWrapper}>\n <ResourcePickerPopover\n onChange={onChange}\n value={bgImage}\n mediaType={MediaType.Image}\n folderName={ResourceFolderName.IOT}\n />\n </Portal>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2, anchorPoint: AnchorPoint) => ({\n portalWrapper: css({\n width: '315px',\n height: '445px',\n transform: `translate(${anchorPoint.x}px, ${anchorPoint.y - 200}px)`,\n }),\n});\n","import { useCallback } from 'react';\n\nimport { SelectableValue, StandardEditorProps } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { InlineField, InlineFieldRow, RadioButtonGroup } from '@grafana/ui';\nimport { BackgroundImageSize } from 'app/plugins/panel/canvas/panelcfg.gen';\n\nexport const BackgroundSizeEditor = ({ value, onChange }: StandardEditorProps<string, undefined, undefined>) => {\n const options: Array<SelectableValue<BackgroundImageSize>> = [\n {\n value: BackgroundImageSize.Original,\n label: t('dimensions.background-size-editor.options.label-original', 'Original'),\n },\n {\n value: BackgroundImageSize.Contain,\n label: t('dimensions.background-size-editor.options.label-contain', 'Contain'),\n },\n { value: BackgroundImageSize.Cover, label: t('dimensions.background-size-editor.options.label-cover', 'Cover') },\n { value: BackgroundImageSize.Fill, label: t('dimensions.background-size-editor.options.label-fill', 'Fill') },\n { value: BackgroundImageSize.Tile, label: t('dimensions.background-size-editor.options.label-tile', 'Tile') },\n ];\n const imageSize = value ?? BackgroundImageSize.Cover;\n\n const onImageSizeChange = useCallback(\n (size: string) => {\n onChange(size);\n },\n [onChange]\n );\n\n return (\n <InlineFieldRow>\n <InlineField grow={true}>\n <RadioButtonGroup value={imageSize} options={options} onChange={onImageSizeChange} fullWidth />\n </InlineField>\n </InlineFieldRow>\n );\n};\n","import { useCallback } from 'react';\n\nimport {\n FieldNamePickerConfigSettings,\n SelectableValue,\n StandardEditorProps,\n StandardEditorsRegistryItem,\n} from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { DirectionDimensionMode, DirectionDimensionConfig, ConnectionDirection } from '@grafana/schema';\nimport { InlineField, InlineFieldRow, RadioButtonGroup, Select } from '@grafana/ui';\nimport { FieldNamePicker } from '@grafana/ui/internal';\n\nimport { DirectionDimensionOptions } from '../types';\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\nconst dummyFieldSettings = {\n settings: {},\n} as StandardEditorsRegistryItem<string, FieldNamePickerConfigSettings>;\n\ntype Props = StandardEditorProps<DirectionDimensionConfig, DirectionDimensionOptions>;\n\nexport const DirectionDimensionEditor = ({ value, context, onChange }: Props) => {\n const directionOptions = [\n {\n label: t('dimensions.direction-dimension-editor.label-fixed', 'Fixed'),\n value: DirectionDimensionMode.Fixed,\n description: t('dimensions.direction-dimension-editor.description-fixed', 'Fixed direction value'),\n },\n {\n label: t('dimensions.direction-dimension-editor.label-field', 'Field'),\n value: DirectionDimensionMode.Field,\n description: t('dimensions.direction-dimension-editor.description-field', 'Direction based on field value'),\n },\n ];\n\n const fixedDirectionOptions: Array<SelectableValue<ConnectionDirection>> = [\n { value: ConnectionDirection.Forward, label: t('canvas.connection.direction-options.label-forward', 'Forward') },\n { value: ConnectionDirection.Reverse, label: t('canvas.connection.direction-options.label-reverse', 'Reverse') },\n { value: ConnectionDirection.Both, label: t('canvas.connection.direction-options.label-both', 'Both') },\n { value: ConnectionDirection.None, label: t('canvas.connection.direction-options.label-none', 'None') },\n ];\n\n const labelWidth = 9;\n\n const onModeChange = useCallback(\n (mode: DirectionDimensionMode) => {\n onChange({\n ...value,\n mode,\n });\n },\n [onChange, value]\n );\n\n const onFieldChange = useCallback(\n (field?: string) => {\n onChange({\n ...value,\n field,\n });\n },\n [onChange, value]\n );\n\n const onFixedChange = useCallback(\n (selection: SelectableValue<ConnectionDirection>) => {\n onChange({\n ...value,\n field: undefined,\n fixed: selection.value ?? ConnectionDirection.Forward,\n });\n },\n [onChange, value]\n );\n\n const mode = value?.mode ?? DirectionDimensionMode.Fixed;\n const selectedDirection = fixedDirectionOptions.find((opt) => opt.value === value?.fixed) || fixedDirectionOptions[0];\n\n return (\n <>\n <InlineFieldRow>\n <InlineField\n label={t('dimensions.direction-dimension-editor.label-source', 'Source')}\n labelWidth={labelWidth}\n grow={true}\n >\n <RadioButtonGroup value={mode} options={directionOptions} onChange={onModeChange} fullWidth />\n </InlineField>\n </InlineFieldRow>\n\n {mode === DirectionDimensionMode.Field && (\n <InlineFieldRow>\n <InlineField\n label={t('dimensions.direction-dimension-editor.label-field', 'Field')}\n labelWidth={labelWidth}\n grow={true}\n >\n <FieldNamePicker\n context={context}\n value={value?.field ?? ''}\n onChange={onFieldChange}\n item={dummyFieldSettings}\n />\n </InlineField>\n </InlineFieldRow>\n )}\n\n {mode === DirectionDimensionMode.Fixed && (\n <InlineFieldRow>\n <InlineField\n label={t('dimensions.direction-dimension-editor.label-direction', 'Direction')}\n labelWidth={labelWidth}\n grow={true}\n >\n <Select value={selectedDirection} options={fixedDirectionOptions} onChange={onFixedChange} />\n </InlineField>\n </InlineFieldRow>\n )}\n </>\n );\n};\n","import { useCallback } from 'react';\n\nimport { SelectableValue, StandardEditorProps } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Field, RadioButtonGroup, Switch } from '@grafana/ui';\n\nimport { LineStyle } from '../types';\n\nconst options: Array<SelectableValue<LineStyle>> = [\n { value: LineStyle.Solid, label: 'Solid' },\n { value: LineStyle.Dashed, label: 'Dashed' },\n { value: LineStyle.Dotted, label: 'Dotted' },\n];\n\nexport interface LineStyleConfig {\n style: LineStyle;\n animate?: boolean;\n}\n\ntype Props = StandardEditorProps<LineStyleConfig>;\n\nexport const defaultLineStyleConfig: LineStyleConfig = {\n style: LineStyle.Solid,\n animate: false,\n};\n\nexport const LineStyleEditor = ({ value, onChange }: Props) => {\n if (!value) {\n value = defaultLineStyleConfig;\n } else if (typeof value !== 'object') {\n value = {\n style: value,\n animate: false,\n };\n }\n\n const onLineStyleChange = useCallback(\n (lineStyle: LineStyle) => {\n onChange({ ...value, style: lineStyle });\n },\n [onChange, value]\n );\n\n const onAnimateChange = useCallback(\n (animate: boolean) => {\n onChange({ ...value, animate });\n },\n [onChange, value]\n );\n\n return (\n <>\n <RadioButtonGroup value={value.style} options={options} onChange={onLineStyleChange} fullWidth />\n {value.style !== LineStyle.Solid && (\n <>\n <br />\n <Field label={t('canvas.line-style-editor.label-animate', 'Animate')}>\n <Switch value={value.animate} onChange={(e) => onAnimateChange(e.currentTarget.checked)} />\n </Field>\n </>\n )}\n </>\n );\n};\n","import { StandardEditorProps, Action, VariableSuggestionsScope } from '@grafana/data';\nimport { ActionsInlineEditor } from 'app/features/actions/ActionsInlineEditor';\nimport { CanvasElementOptions } from 'app/features/canvas/element';\n\ntype Props = StandardEditorProps<Action[], CanvasElementOptions>;\n\nexport function ActionsEditor({ value, onChange, item, context }: Props) {\n const dataLinks = item.settings?.links || [];\n\n return (\n <ActionsInlineEditor\n actions={value}\n onChange={(actions) => {\n if (actions.some(({ oneClick }) => oneClick === true)) {\n dataLinks.forEach((link) => {\n link.oneClick = false;\n });\n }\n onChange(actions);\n }}\n getSuggestions={() => (context.getSuggestions ? context.getSuggestions(VariableSuggestionsScope.Values) : [])}\n data={[]}\n showOneClick={true}\n />\n );\n}\n","import { StandardEditorProps, DataLink, VariableSuggestionsScope } from '@grafana/data';\nimport { DataLinksInlineEditor } from '@grafana/ui';\nimport { CanvasElementOptions } from 'app/features/canvas/element';\n\ntype Props = StandardEditorProps<DataLink[], CanvasElementOptions>;\n\nexport function DataLinksEditor({ value, onChange, item, context }: Props) {\n const actions = item.settings?.actions || [];\n\n return (\n <DataLinksInlineEditor\n links={value}\n onChange={(links) => {\n if (links.some(({ oneClick }) => oneClick === true)) {\n actions.forEach((action) => {\n action.oneClick = false;\n });\n }\n onChange(links);\n }}\n getSuggestions={() => (context.getSuggestions ? context.getSuggestions(VariableSuggestionsScope.Values) : [])}\n data={[]}\n showOneClick={true}\n />\n );\n}\n","import { FieldType } from '@grafana/data';\nimport { PanelOptionsSupplier } from '@grafana/data/internal';\nimport { t } from '@grafana/i18n';\nimport { ConnectionDirection, DirectionDimensionMode } from '@grafana/schema';\nimport { SVGElements } from 'app/features/canvas/runtime/element';\nimport { BackgroundSizeEditor } from 'app/features/dimensions/editors/BackgroundSizeEditor';\nimport { ColorDimensionEditor } from 'app/features/dimensions/editors/ColorDimensionEditor';\nimport { DirectionDimensionEditor } from 'app/features/dimensions/editors/DirectionDimensionEditor';\nimport { ResourceDimensionEditor } from 'app/features/dimensions/editors/ResourceDimensionEditor';\nimport { ScaleDimensionEditor } from 'app/features/dimensions/editors/ScaleDimensionEditor';\n\nimport { CanvasConnection, CanvasElementOptions } from '../panelcfg.gen';\nimport { LineStyle } from '../types';\n\nimport { LineStyleEditor } from './LineStyleEditor';\nimport { ActionsEditor } from './element/ActionsEditor';\nimport { DataLinksEditor } from './element/DataLinksEditor';\n\ninterface OptionSuppliers {\n addBackground: PanelOptionsSupplier<CanvasElementOptions>;\n addBorder: PanelOptionsSupplier<CanvasElementOptions>;\n addDataLinks: PanelOptionsSupplier<CanvasElementOptions>;\n addActions: PanelOptionsSupplier<CanvasElementOptions>;\n addColor: PanelOptionsSupplier<CanvasConnection>;\n addSize: PanelOptionsSupplier<CanvasConnection>;\n addRadius: PanelOptionsSupplier<CanvasConnection>;\n addDirection: PanelOptionsSupplier<CanvasConnection>;\n addLineStyle: PanelOptionsSupplier<CanvasConnection>;\n}\n\nconst getCategoryName = (str: string, type: string | undefined) => {\n if (type !== 'frame' && type !== undefined) {\n return [str + ` (${type})`];\n }\n return [str];\n};\n\nexport const optionBuilder: OptionSuppliers = {\n addBackground: (builder, context) => {\n const category = getCategoryName(t('canvas.category-background', 'Background'), context.options?.type);\n builder\n .addCustomEditor({\n category,\n id: 'background.color',\n path: 'background.color',\n name: t('canvas.label-color', 'Color'),\n editor: ColorDimensionEditor,\n settings: {},\n defaultValue: {\n // Configured values\n fixed: '',\n },\n })\n .addCustomEditor({\n category,\n id: 'background.image',\n path: 'background.image',\n name: t('canvas.label-image', 'Image'),\n editor: ResourceDimensionEditor,\n settings: {\n resourceType: 'image',\n },\n })\n .addCustomEditor({\n category,\n id: 'background.size',\n path: 'background.size',\n name: t('canvas.label-image-size', 'Image size'),\n editor: BackgroundSizeEditor,\n settings: {\n resourceType: 'image',\n },\n showIf: () => {\n // Do not show image size editor for SVG based elements\n // See https://github.com/grafana/grafana/issues/84843#issuecomment-2010921066 for additional context\n if (context.options?.type) {\n return !SVGElements.has(context.options.type);\n }\n\n return true;\n },\n });\n },\n\n addBorder: (builder, context) => {\n const category = getCategoryName(t('canvas.category-border', 'Border'), context.options?.type);\n builder.addSliderInput({\n category,\n path: 'border.width',\n name: t('canvas.label-width', 'Width'),\n defaultValue: 2,\n settings: {\n min: 0,\n max: 20,\n },\n });\n\n if (context.options?.border?.width) {\n builder.addCustomEditor({\n category,\n id: 'border.color',\n path: 'border.color',\n name: t('canvas.label-color', 'Color'),\n editor: ColorDimensionEditor,\n settings: {},\n defaultValue: {\n // Configured values\n fixed: '',\n },\n });\n }\n\n builder.addSliderInput({\n category,\n path: 'border.radius',\n name: t('canvas.label-radius', 'Radius'),\n defaultValue: 0,\n settings: {\n min: 0,\n max: 60,\n },\n });\n },\n\n addColor: (builder, context) => {\n const category = [t('canvas.category-color', 'Color')];\n builder.addCustomEditor({\n category,\n id: 'color',\n path: 'color',\n name: t('canvas.label-color', 'Color'),\n editor: ColorDimensionEditor,\n settings: {},\n defaultValue: {\n // Configured values\n fixed: '',\n },\n });\n },\n\n addSize: (builder, context) => {\n const category = [t('canvas.category-size', 'Size')];\n builder.addCustomEditor({\n category,\n id: 'size',\n path: 'size',\n name: t('canvas.label-size', 'Size'),\n editor: ScaleDimensionEditor,\n settings: {\n min: 1,\n max: 10,\n },\n defaultValue: {\n // Configured values\n fixed: 2,\n min: 1,\n max: 10,\n },\n });\n },\n\n addRadius: (builder, context) => {\n const category = [t('canvas.category-radius', 'Radius')];\n builder.addCustomEditor({\n category,\n id: 'radius',\n path: 'radius',\n name: t('canvas.label-radius', 'Radius'),\n editor: ScaleDimensionEditor,\n settings: {\n min: 0,\n max: 200,\n filteredFieldType: FieldType.number,\n },\n defaultValue: {\n // Configured values\n fixed: 0,\n min: 0,\n max: 100,\n },\n });\n },\n\n addDirection: (builder, context) => {\n const category = [t('canvas.category-arrow-direction', 'Direction')];\n builder.addCustomEditor({\n category,\n id: 'direction',\n path: 'direction',\n name: t('canvas.label-direction', 'Direction'),\n editor: DirectionDimensionEditor,\n settings: {},\n defaultValue: {\n mode: DirectionDimensionMode.Fixed,\n fixed: ConnectionDirection.Forward,\n },\n });\n },\n\n addLineStyle: (builder, context) => {\n const category = [t('canvas.category-line-style', 'Line style')];\n builder.addCustomEditor({\n category,\n id: 'lineStyle',\n path: 'lineStyle',\n name: t('canvas.label-line-style', 'Line style'),\n editor: LineStyleEditor,\n settings: {},\n defaultValue: { value: LineStyle.Solid, label: t('canvas.line-style-options.label-solid', 'Solid') },\n });\n },\n\n addDataLinks: (builder, context) => {\n builder.addCustomEditor({\n category: [t('canvas.category-data-links', 'Data links and actions')],\n id: 'dataLinks',\n path: 'links',\n name: t('canvas.label-links', 'Links'),\n editor: DataLinksEditor,\n settings: context.options,\n });\n },\n\n addActions: (builder, context) => {\n builder.addCustomEditor({\n category: [t('canvas.category-data-links', 'Data links and actions')],\n id: 'actions',\n path: 'actions',\n name: t('canvas.label-actions', 'Actions'),\n editor: ActionsEditor,\n settings: context.options,\n });\n },\n};\n","import { get as lodashGet } from 'lodash';\n\nimport { NestedPanelOptions, NestedValueAccess } from '@grafana/data/internal';\nimport { Scene } from 'app/features/canvas/runtime/scene';\nimport { setOptionImmutably } from 'app/features/dashboard/components/PanelEditor/utils';\n\nimport { CanvasConnection } from '../panelcfg.gen';\nimport { ConnectionState } from '../types';\n\nimport { optionBuilder } from './options';\n\nexport interface CanvasConnectionEditorOptions {\n connection: ConnectionState;\n scene: Scene;\n category?: string[];\n}\n\nexport function getConnectionEditor(opts: CanvasConnectionEditorOptions): NestedPanelOptions<CanvasConnection> {\n return {\n category: opts.category,\n path: '--', // not used!\n\n values: (parent: NestedValueAccess) => ({\n getValue: (path: string) => {\n return lodashGet(opts.connection.info, path);\n },\n // TODO: Fix this unknown (maybe a dimension supplier?)\n onChange: (path: string, value: unknown) => {\n let options = opts.connection.info;\n options = setOptionImmutably(options, path, value);\n opts.scene.connections.onChange(opts.connection, options);\n },\n }),\n\n build: (builder, context) => {\n const ctx = { ...context, options: opts.connection.info };\n optionBuilder.addColor(builder, ctx);\n optionBuilder.addSize(builder, ctx);\n optionBuilder.addRadius(builder, ctx);\n optionBuilder.addDirection(builder, ctx);\n optionBuilder.addLineStyle(builder, ctx);\n },\n };\n}\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { VerticalConstraint, HorizontalConstraint, Constraint } from '../../panelcfg.gen';\n\ninterface Props {\n onVerticalConstraintChange: (v: VerticalConstraint) => void;\n onHorizontalConstraintChange: (h: HorizontalConstraint) => void;\n currentConstraints: Constraint;\n}\n\nexport const ConstraintSelectionBox = ({\n onVerticalConstraintChange,\n onHorizontalConstraintChange,\n currentConstraints,\n}: Props) => {\n const styles = useStyles2(getStyles(currentConstraints));\n\n const onClickTopConstraint = () => {\n onVerticalConstraintChange(VerticalConstraint.Top);\n };\n\n const onClickBottomConstraint = () => {\n onVerticalConstraintChange(VerticalConstraint.Bottom);\n };\n\n const onClickVerticalCenterConstraint = () => {\n onVerticalConstraintChange(VerticalConstraint.Center);\n };\n\n const onClickLeftConstraint = () => {\n onHorizontalConstraintChange(HorizontalConstraint.Left);\n };\n\n const onClickRightConstraint = () => {\n onHorizontalConstraintChange(HorizontalConstraint.Right);\n };\n\n const onClickHorizontalCenterConstraint = () => {\n onHorizontalConstraintChange(HorizontalConstraint.Center);\n };\n\n return (\n <svg\n version=\"1.0\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"75.000000pt\"\n height=\"75.000000pt\"\n viewBox=\"0 0 228.000000 228.000000\"\n preserveAspectRatio=\"xMidYMid meet\"\n style={{ marginBottom: '4.8px' }}\n >\n <g transform=\"translate(0.000000,228.000000) scale(0.100000,-0.100000)\" fill=\"#000000\" stroke=\"none\">\n <path\n fill=\"#e5e5e5\"\n d=\"M198 2028 l-28 -32 0 -912 0 -912 31 -31 31 -31 915 0 915 0 29 29\n29 29 0 917 0 917 -27 29 -28 29 -920 0 -920 0 -27 -32z m1876 -17 c15 -16 16\n-98 16 -927 0 -860 -1 -909 -18 -926 -17 -17 -66 -18 -927 -18 -862 0 -910 1\n-927 18 -17 17 -18 65 -18 926 0 832 1 911 16 927 16 18 45 19 468 21 248 2\n659 2 912 0 431 -2 462 -4 478 -21z\"\n />\n <rect className={styles.topConstraint} height=\"228\" width=\"46\" y=\"1735\" x=\"1123\" />\n <rect\n className={styles.constraintHover}\n onClick={onClickTopConstraint}\n height=\"350\"\n width=\"300\"\n y=\"1680\"\n x=\"995\"\n fill=\"transparent\"\n />\n <rect className={styles.bottomConstraint} height=\"228\" width=\"46\" y=\"210\" x=\"1123\" />\n <rect\n className={styles.constraintHover}\n onClick={onClickBottomConstraint}\n height=\"350\"\n width=\"300\"\n y=\"135\"\n x=\"995\"\n fill=\"transparent\"\n />\n <rect className={styles.leftConstraint} height=\"46\" width=\"228\" y=\"1060\" x=\"265\" />\n <rect\n className={styles.constraintHover}\n onClick={onClickLeftConstraint}\n height=\"300\"\n width=\"350\"\n y=\"925\"\n x=\"200\"\n fill=\"transparent\"\n />\n <rect className={styles.rightConstraint} height=\"46\" width=\"228\" y=\"1060\" x=\"1795\" />\n <rect\n className={styles.constraintHover}\n onClick={onClickRightConstraint}\n height=\"300\"\n width=\"350\"\n y=\"925\"\n x=\"1730\"\n fill=\"transparent\"\n />\n <path\n className={styles.box}\n d=\"M568 1669 c-17 -9 -18 -48 -18 -584 0 -558 1 -575 19 -585 27 -14\n1125 -14 1152 0 18 10 19 27 19 580 0 504 -2 570 -16 584 -14 14 -80 16 -577\n16 -363 -1 -568 -4 -579 -11z m1119 -42 c4 -5 4 -1079 0 -1084 -5 -4 -1079 -4\n-1084 0 -5 6 -4 1077 1 1085 4 7 1076 6 1083 -1z\"\n />\n <rect className={styles.verticalCenterConstraint} height=\"456\" width=\"46\" y=\"855\" x=\"1123\" />\n <rect\n className={styles.constraintHover}\n onClick={onClickVerticalCenterConstraint}\n height=\"660\"\n width=\"300\"\n y=\"750\"\n x=\"995\"\n fill=\"transparent\"\n />\n <rect className={styles.horizontalCenterConstraint} height=\"46\" width=\"456\" y=\"1060\" x=\"918\" />\n <rect\n className={styles.constraintHover}\n onClick={onClickHorizontalCenterConstraint}\n height=\"300\"\n width=\"660\"\n y=\"925\"\n x=\"815\"\n fill=\"transparent\"\n />\n </g>\n </svg>\n );\n};\n\nconst getStyles = (currentConstraints: Constraint) => (theme: GrafanaTheme2) => {\n const HOVER_COLOR = '#daebf7';\n const HOVER_OPACITY = '0.6';\n const SELECTED_COLOR = '#0d99ff';\n\n const selectionBoxColor = theme.isDark ? '#ffffff' : '#000000';\n\n return {\n constraintHover: css({\n '&:hover': {\n fill: HOVER_COLOR,\n fillOpacity: HOVER_OPACITY,\n },\n }),\n topConstraint: css({\n ...(currentConstraints.vertical === VerticalConstraint.Top ||\n currentConstraints.vertical === VerticalConstraint.TopBottom\n ? {\n width: '92pt',\n x: '1085',\n fill: SELECTED_COLOR,\n }\n : {\n fill: selectionBoxColor,\n }),\n }),\n bottomConstraint: css({\n ...(currentConstraints.vertical === VerticalConstraint.Bottom ||\n currentConstraints.vertical === VerticalConstraint.TopBottom\n ? {\n width: '92pt',\n x: '1085',\n fill: SELECTED_COLOR,\n }\n : {\n fill: selectionBoxColor,\n }),\n }),\n leftConstraint: css({\n ...(currentConstraints.horizontal === HorizontalConstraint.Left ||\n currentConstraints.horizontal === HorizontalConstraint.LeftRight\n ? {\n height: '92pt',\n y: '1014',\n fill: SELECTED_COLOR,\n }\n : {\n fill: selectionBoxColor,\n }),\n }),\n rightConstraint: css({\n ...(currentConstraints.horizontal === HorizontalConstraint.Right ||\n currentConstraints.horizontal === HorizontalConstraint.LeftRight\n ? {\n height: '92pt',\n y: '1014',\n fill: SELECTED_COLOR,\n }\n : {\n fill: selectionBoxColor,\n }),\n }),\n horizontalCenterConstraint: css({\n ...(currentConstraints.horizontal === HorizontalConstraint.Center\n ? {\n height: '92pt',\n y: '1014',\n fill: SELECTED_COLOR,\n }\n : {\n fill: selectionBoxColor,\n }),\n }),\n verticalCenterConstraint: css({\n ...(currentConstraints.vertical === VerticalConstraint.Center\n ? {\n width: '92pt',\n x: '1085',\n fill: SELECTED_COLOR,\n }\n : {\n fill: selectionBoxColor,\n }),\n }),\n box: css({\n fill: selectionBoxColor,\n }),\n };\n};\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { IconButton, useStyles2 } from '@grafana/ui';\nimport { ElementState } from 'app/features/canvas/runtime/element';\nimport { QuickPlacement } from 'app/features/canvas/types';\n\nimport { HorizontalConstraint, VerticalConstraint, Placement } from '../../panelcfg.gen';\n\nimport { CanvasEditorOptions } from './elementEditor';\n\ntype Props = {\n onPositionChange: (value: number | undefined, placement: keyof Placement) => void;\n element: ElementState;\n settings: CanvasEditorOptions;\n};\n\nexport const QuickPositioning = ({ onPositionChange, element, settings }: Props) => {\n const styles = useStyles2(getStyles);\n\n const onQuickPositioningChange = (position: QuickPlacement) => {\n const defaultConstraint = { vertical: VerticalConstraint.Top, horizontal: HorizontalConstraint.Left };\n const originalConstraint = { ...element.options.constraint };\n\n element.options.constraint = defaultConstraint;\n element.setPlacementFromConstraint();\n\n switch (position) {\n case QuickPlacement.Top:\n onPositionChange(0, 'top');\n break;\n case QuickPlacement.Bottom:\n onPositionChange(getRightBottomPosition(element.options.placement?.height ?? 0, 'bottom'), 'top');\n break;\n case QuickPlacement.VerticalCenter:\n onPositionChange(getCenterPosition(element.options.placement?.height ?? 0, 'v'), 'top');\n break;\n case QuickPlacement.Left:\n onPositionChange(0, 'left');\n break;\n case QuickPlacement.Right:\n onPositionChange(getRightBottomPosition(element.options.placement?.width ?? 0, 'right'), 'left');\n break;\n case QuickPlacement.HorizontalCenter:\n onPositionChange(getCenterPosition(element.options.placement?.width ?? 0, 'h'), 'left');\n break;\n }\n\n element.options.constraint = originalConstraint;\n element.setPlacementFromConstraint();\n };\n\n // Basing this on scene will mean that center is based on root for the time being\n const getCenterPosition = (elementSize: number, align: 'h' | 'v') => {\n const sceneSize = align === 'h' ? settings.scene.width : settings.scene.height;\n\n return (sceneSize - elementSize) / 2;\n };\n\n const getRightBottomPosition = (elementSize: number, align: 'right' | 'bottom') => {\n const sceneSize = align === 'right' ? settings.scene.width : settings.scene.height;\n\n return sceneSize - elementSize;\n };\n\n return (\n <div className={styles.buttonGroup}>\n <IconButton\n name=\"horizontal-align-left\"\n onClick={() => onQuickPositioningChange(QuickPlacement.Left)}\n className={styles.button}\n size=\"lg\"\n tooltip={t('canvas.quick-positioning.tooltip-align-left', 'Align left')}\n />\n <IconButton\n name=\"horizontal-align-center\"\n onClick={() => onQuickPositioningChange(QuickPlacement.HorizontalCenter)}\n className={styles.button}\n size=\"lg\"\n tooltip={t('canvas.quick-positioning.tooltip-align-horizontal-centers', 'Align horizontal centers')}\n />\n <IconButton\n name=\"horizontal-align-right\"\n onClick={() => onQuickPositioningChange(QuickPlacement.Right)}\n className={styles.button}\n size=\"lg\"\n tooltip={t('canvas.quick-positioning.tooltip-align-right', 'Align right')}\n />\n <IconButton\n name=\"vertical-align-top\"\n onClick={() => onQuickPositioningChange(QuickPlacement.Top)}\n size=\"lg\"\n tooltip={t('canvas.quick-positioning.tooltip-align-top', 'Align top')}\n />\n <IconButton\n name=\"vertical-align-center\"\n onClick={() => onQuickPositioningChange(QuickPlacement.VerticalCenter)}\n className={styles.button}\n size=\"lg\"\n tooltip={t('canvas.quick-positioning.tooltip-align-vertical-centers', 'Align vertical centers')}\n />\n <IconButton\n name=\"vertical-align-bottom\"\n onClick={() => onQuickPositioningChange(QuickPlacement.Bottom)}\n className={styles.button}\n size=\"lg\"\n tooltip={t('canvas.quick-positioning.tooltip-align-bottom', 'Align bottom')}\n />\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n buttonGroup: css({\n display: 'flex',\n flexWrap: 'wrap',\n padding: '12px 0 12px 0',\n }),\n button: css({\n marginLeft: '5px',\n marginRight: '5px',\n }),\n});\n","import { useObservable } from 'react-use';\nimport { Subject } from 'rxjs';\n\nimport { SelectableValue, StandardEditorProps } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Field, Icon, InlineField, InlineFieldRow, Select, Stack } from '@grafana/ui';\nimport { NumberInput } from 'app/core/components/OptionsUI/NumberInput';\n\nimport { HorizontalConstraint, Options, Placement, VerticalConstraint } from '../../panelcfg.gen';\n\nimport { ConstraintSelectionBox } from './ConstraintSelectionBox';\nimport { QuickPositioning } from './QuickPositioning';\nimport { CanvasEditorOptions } from './elementEditor';\n\nconst places: Array<keyof Placement> = ['top', 'left', 'bottom', 'right', 'width', 'height', 'rotation'];\n\ntype Props = StandardEditorProps<unknown, CanvasEditorOptions, Options>;\n\nexport function PlacementEditor({ item }: Props) {\n const settings = item.settings;\n const horizontalOptions: Array<SelectableValue<HorizontalConstraint>> = [\n { label: t('canvas.placement-editor.horizontal-options.label-left', 'Left'), value: HorizontalConstraint.Left },\n { label: t('canvas.placement-editor.horizontal-options.label-right', 'Right'), value: HorizontalConstraint.Right },\n {\n label: t('canvas.placement-editor.horizontal-options.label-left-and-right', 'Left & right'),\n value: HorizontalConstraint.LeftRight,\n },\n {\n label: t('canvas.placement-editor.horizontal-options.label-center', 'Center'),\n value: HorizontalConstraint.Center,\n },\n { label: t('canvas.placement-editor.horizontal-options.label-scale', 'Scale'), value: HorizontalConstraint.Scale },\n ];\n\n const verticalOptions: Array<SelectableValue<VerticalConstraint>> = [\n { label: t('canvas.placement-editor.vertical-options.label-top', 'Top'), value: VerticalConstraint.Top },\n { label: t('canvas.placement-editor.vertical-options.label-bottom', 'Bottom'), value: VerticalConstraint.Bottom },\n {\n label: t('canvas.placement-editor.vertical-options.label-top-and-bottom', 'Top & bottom'),\n value: VerticalConstraint.TopBottom,\n },\n { label: t('canvas.placement-editor.vertical-options.label-center', 'Center'), value: VerticalConstraint.Center },\n { label: t('canvas.placement-editor.vertical-options.label-scale', 'Scale'), value: VerticalConstraint.Scale },\n ];\n\n // Will force a rerender whenever the subject changes\n useObservable(settings?.scene ? settings.scene.moved : new Subject());\n\n if (!settings) {\n return (\n <div>\n <Trans i18nKey=\"canvas.placement-editor.loading\">Loading...</Trans>\n </div>\n );\n }\n\n const element = settings.element;\n if (!element) {\n return <div>???</div>;\n }\n const { options } = element;\n const { placement, constraint: layout } = options;\n\n if (placement) {\n placement.rotation = placement?.rotation ?? 0;\n }\n\n const reselectElementAfterChange = () => {\n setTimeout(() => {\n settings.scene.select({ targets: [element.div!] });\n });\n };\n\n const onHorizontalConstraintSelect = (h: SelectableValue<HorizontalConstraint>) => {\n onHorizontalConstraintChange(h.value!);\n };\n\n const onHorizontalConstraintChange = (h: HorizontalConstraint) => {\n element.options.constraint!.horizontal = h;\n element.setPlacementFromConstraint(undefined, undefined, settings.scene.scale);\n settings.scene.revId++;\n settings.scene.save(true);\n reselectElementAfterChange();\n };\n\n const onVerticalConstraintSelect = (v: SelectableValue<VerticalConstraint>) => {\n onVerticalConstraintChange(v.value!);\n };\n\n const onVerticalConstraintChange = (v: VerticalConstraint) => {\n element.options.constraint!.vertical = v;\n element.setPlacementFromConstraint(undefined, undefined, settings.scene.scale);\n settings.scene.revId++;\n settings.scene.save(true);\n reselectElementAfterChange();\n };\n\n const onPositionChange = (value: number | undefined, placement: keyof Placement) => {\n element.options.placement![placement] = value ?? element.options.placement![placement];\n element.applyLayoutStylesToDiv();\n settings.scene.clearCurrentSelection(true);\n reselectElementAfterChange();\n };\n\n const constraint = element.tempConstraint ?? layout ?? {};\n\n return (\n <div>\n <QuickPositioning onPositionChange={onPositionChange} settings={settings} element={element} />\n <br />\n <Field label={t('canvas.placement-editor.label-constraints', 'Constraints')}>\n <Stack direction=\"row\">\n <ConstraintSelectionBox\n onVerticalConstraintChange={onVerticalConstraintChange}\n onHorizontalConstraintChange={onHorizontalConstraintChange}\n currentConstraints={constraint}\n />\n <Stack direction=\"column\">\n <Stack direction=\"row\">\n <Icon name=\"arrows-h\" />\n <Select\n options={horizontalOptions}\n onChange={onHorizontalConstraintSelect}\n value={constraint.horizontal}\n />\n </Stack>\n <Stack direction=\"row\">\n <Icon name=\"arrows-v\" />\n <Select options={verticalOptions} onChange={onVerticalConstraintSelect} value={constraint.vertical} />\n </Stack>\n </Stack>\n </Stack>\n </Field>\n\n <br />\n\n <Field label={t('canvas.placement-editor.label-position', 'Position')}>\n <>\n {places.map((p) => {\n const v = placement![p];\n if (v == null) {\n return null;\n }\n\n // Need to set explicit min/max for rotation as logic only can handle 0-360\n const min = p === 'rotation' ? 0 : undefined;\n const max = p === 'rotation' ? 360 : undefined;\n\n return (\n <InlineFieldRow key={p}>\n <InlineField label={p} labelWidth={8} grow={true}>\n <NumberInput min={min} max={max} value={v} onChange={(v) => onPositionChange(v, p)} />\n </InlineField>\n </InlineFieldRow>\n );\n })}\n </>\n </Field>\n </div>\n );\n}\n","import { get as lodashGet } from 'lodash';\n\nimport { NestedPanelOptions, NestedValueAccess } from '@grafana/data/internal';\nimport { t } from '@grafana/i18n';\nimport { CanvasElementOptions } from 'app/features/canvas/element';\nimport {\n canvasElementRegistry,\n DEFAULT_CANVAS_ELEMENT_CONFIG,\n defaultElementItems,\n} from 'app/features/canvas/registry';\nimport { ElementState } from 'app/features/canvas/runtime/element';\nimport { FrameState } from 'app/features/canvas/runtime/frame';\nimport { Scene } from 'app/features/canvas/runtime/scene';\nimport { setOptionImmutably } from 'app/features/dashboard/components/PanelEditor/utils';\n\nimport { getElementTypes } from '../../utils';\nimport { optionBuilder } from '../options';\n\nimport { PlacementEditor } from './PlacementEditor';\n\nexport interface CanvasEditorOptions {\n element: ElementState;\n scene: Scene;\n category?: string[];\n}\n\nexport interface TreeViewEditorProps {\n scene: Scene;\n layer: FrameState;\n selected: ElementState[];\n}\n\nexport function getElementEditor(opts: CanvasEditorOptions): NestedPanelOptions<CanvasElementOptions> {\n return {\n category: opts.category,\n path: '--', // not used!\n\n // Note that canvas editor writes things to the scene!\n values: (parent: NestedValueAccess) => ({\n getValue: (path) => {\n return lodashGet(opts.element.options, path);\n },\n onChange: (path, value) => {\n let options = opts.element.options;\n if (path === 'type' && value) {\n const layer = canvasElementRegistry.getIfExists(value);\n if (!layer) {\n console.warn('layer does not exist', value);\n return;\n }\n options = {\n ...options,\n ...layer.getNewOptions(options),\n type: layer.id,\n };\n } else {\n options = setOptionImmutably(options, path, value);\n }\n opts.element.onChange(options);\n opts.element.updateData(opts.scene.context);\n },\n }),\n\n // Dynamically fill the selected element\n build: (builder, context) => {\n const { options } = opts.element;\n const current = options?.type ? options.type : DEFAULT_CANVAS_ELEMENT_CONFIG.type;\n const layerTypes = getElementTypes(opts.scene.shouldShowAdvancedTypes, current).options;\n\n const isUnsupported =\n !opts.scene.shouldShowAdvancedTypes && !defaultElementItems.filter((item) => item.id === options?.type).length;\n\n builder.addSelect({\n path: 'type',\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/consistent-type-assertions\n name: undefined as any, // required, but hide space\n settings: {\n options: layerTypes,\n },\n description: isUnsupported\n ? t(\n 'canvas.element-editor.description-unsupported',\n 'Selected element type is not supported by current settings. Please enable advanced element types.'\n )\n : '',\n });\n\n // force clean layer configuration\n const layer = canvasElementRegistry.getIfExists(options?.type ?? DEFAULT_CANVAS_ELEMENT_CONFIG.type)!;\n let currentOptions = options;\n if (!currentOptions) {\n currentOptions = {\n ...layer.getNewOptions(options),\n type: layer.id,\n name: `Element ${Date.now()}.${Math.floor(Math.random() * 100)}`,\n };\n }\n const ctx = { ...context, options: currentOptions };\n\n if (layer?.registerOptionsUI) {\n layer.registerOptionsUI(builder, ctx);\n }\n\n const shouldAddLayoutEditor = opts.element.item.standardEditorConfig?.layout ?? true;\n if (shouldAddLayoutEditor) {\n builder.addCustomEditor({\n category: [t('canvas.element-editor.category-layout', 'Layout')],\n id: 'content',\n path: '__', // not used\n name: t('canvas.element-editor.name-quick-placement', 'Quick placement'),\n editor: PlacementEditor,\n settings: opts,\n });\n }\n\n const shouldAddBackgroundEditor = opts.element.item.standardEditorConfig?.background ?? true;\n if (shouldAddBackgroundEditor) {\n optionBuilder.addBackground(builder, ctx);\n }\n\n const shouldAddBorderEditor = opts.element.item.standardEditorConfig?.border ?? true;\n if (shouldAddBorderEditor) {\n optionBuilder.addBorder(builder, ctx);\n }\n\n optionBuilder.addDataLinks(builder, ctx);\n optionBuilder.addActions(builder, ctx);\n },\n };\n}\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _classCallCheck(a, n) {\n if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nexport { _classCallCheck as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(e, r) {\n for (var t = 0; t < r.length; t++) {\n var o = r[t];\n o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n }\n}\nfunction _createClass(e, r, t) {\n return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n writable: !1\n }), e;\n}\nexport { _createClass as default };","function _assertThisInitialized(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n}\nexport { _assertThisInitialized as default };","function _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inherits(t, e) {\n if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n t.prototype = Object.create(e && e.prototype, {\n constructor: {\n value: t,\n writable: !0,\n configurable: !0\n }\n }), Object.defineProperty(t, \"prototype\", {\n writable: !1\n }), e && setPrototypeOf(t, e);\n}\nexport { _inherits as default };","function _getPrototypeOf(t) {\n return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n return t.__proto__ || Object.getPrototypeOf(t);\n }, _getPrototypeOf(t);\n}\nexport { _getPrototypeOf as default };","function _isNativeReflectConstruct() {\n try {\n var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n } catch (t) {}\n return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {\n return !!t;\n })();\n}\nexport { _isNativeReflectConstruct as default };","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nfunction _possibleConstructorReturn(t, e) {\n if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n return assertThisInitialized(t);\n}\nexport { _possibleConstructorReturn as default };","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nfunction _createSuper(t) {\n var r = isNativeReflectConstruct();\n return function () {\n var e,\n o = getPrototypeOf(t);\n if (r) {\n var s = getPrototypeOf(this).constructor;\n e = Reflect.construct(o, arguments, s);\n } else e = o.apply(this, arguments);\n return possibleConstructorReturn(this, e);\n };\n}\nexport { _createSuper as default };","/**\n * Webpack has bug for import loop, which is not the same behavior as ES module.\n * When util.js imports the TreeNode for tree generate will cause treeContextTypes be empty.\n */\nimport * as React from 'react';\nexport var TreeContext = /*#__PURE__*/React.createContext(null);\n\n/** Internal usage, safe to remove. Do not use in prod */\nexport var UnstableContext = /*#__PURE__*/React.createContext({});","import React from 'react';\nvar DropIndicator = function DropIndicator(props) {\n var dropPosition = props.dropPosition,\n dropLevelOffset = props.dropLevelOffset,\n indent = props.indent;\n var style = {\n pointerEvents: 'none',\n position: 'absolute',\n right: 0,\n backgroundColor: 'red',\n height: 2\n };\n switch (dropPosition) {\n case -1:\n style.top = 0;\n style.left = -dropLevelOffset * indent;\n break;\n case 1:\n style.bottom = 0;\n style.left = -dropLevelOffset * indent;\n break;\n case 0:\n style.bottom = 0;\n style.left = indent;\n break;\n }\n return /*#__PURE__*/React.createElement(\"div\", {\n style: style\n });\n};\nif (process.env.NODE_ENV !== 'production') {\n DropIndicator.displayName = 'DropIndicator';\n}\nexport default DropIndicator;","function _objectDestructuringEmpty(t) {\n if (null == t) throw new TypeError(\"Cannot destructure \" + t);\n}\nexport { _objectDestructuringEmpty as default };","function _arrayWithHoles(r) {\n if (Array.isArray(r)) return r;\n}\nexport { _arrayWithHoles as default };","function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nexport { _iterableToArrayLimit as default };","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _nonIterableRest as default };","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nfunction _slicedToArray(r, e) {\n return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();\n}\nexport { _slicedToArray as default };","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport classNames from 'classnames';\nimport * as React from 'react';\nvar Indent = function Indent(_ref) {\n var prefixCls = _ref.prefixCls,\n level = _ref.level,\n isStart = _ref.isStart,\n isEnd = _ref.isEnd;\n var baseClassName = \"\".concat(prefixCls, \"-indent-unit\");\n var list = [];\n for (var i = 0; i < level; i += 1) {\n list.push( /*#__PURE__*/React.createElement(\"span\", {\n key: i,\n className: classNames(baseClassName, _defineProperty(_defineProperty({}, \"\".concat(baseClassName, \"-start\"), isStart[i]), \"\".concat(baseClassName, \"-end\"), isEnd[i]))\n }));\n }\n return /*#__PURE__*/React.createElement(\"span\", {\n \"aria-hidden\": \"true\",\n className: \"\".concat(prefixCls, \"-indent\")\n }, list);\n};\nexport default /*#__PURE__*/React.memo(Indent);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"eventKey\", \"className\", \"style\", \"dragOver\", \"dragOverGapTop\", \"dragOverGapBottom\", \"isLeaf\", \"isStart\", \"isEnd\", \"expanded\", \"selected\", \"checked\", \"halfChecked\", \"loading\", \"domRef\", \"active\", \"data\", \"onMouseMove\", \"selectable\"];\nimport React from 'react';\nimport classNames from 'classnames';\nimport pickAttrs from \"rc-util/es/pickAttrs\";\nimport { TreeContext, UnstableContext } from \"./contextTypes\";\nimport Indent from \"./Indent\";\nimport getEntity from \"./utils/keyUtil\";\nimport { convertNodePropsToEventData } from \"./utils/treeUtil\";\nvar ICON_OPEN = 'open';\nvar ICON_CLOSE = 'close';\nvar defaultTitle = '---';\nvar TreeNode = function TreeNode(props) {\n var _unstableContext$node, _context$filterTreeNo, _classNames4;\n var eventKey = props.eventKey,\n className = props.className,\n style = props.style,\n dragOver = props.dragOver,\n dragOverGapTop = props.dragOverGapTop,\n dragOverGapBottom = props.dragOverGapBottom,\n isLeaf = props.isLeaf,\n isStart = props.isStart,\n isEnd = props.isEnd,\n expanded = props.expanded,\n selected = props.selected,\n checked = props.checked,\n halfChecked = props.halfChecked,\n loading = props.loading,\n domRef = props.domRef,\n active = props.active,\n data = props.data,\n onMouseMove = props.onMouseMove,\n selectable = props.selectable,\n otherProps = _objectWithoutProperties(props, _excluded);\n var context = React.useContext(TreeContext);\n var unstableContext = React.useContext(UnstableContext);\n var selectHandleRef = React.useRef(null);\n var _React$useState = React.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n dragNodeHighlight = _React$useState2[0],\n setDragNodeHighlight = _React$useState2[1];\n\n // ======= State: Disabled State =======\n var isDisabled = !!(context.disabled || props.disabled || (_unstableContext$node = unstableContext.nodeDisabled) !== null && _unstableContext$node !== void 0 && _unstableContext$node.call(unstableContext, data));\n var isCheckable = React.useMemo(function () {\n // Return false if tree or treeNode is not checkable\n if (!context.checkable || props.checkable === false) {\n return false;\n }\n return context.checkable;\n }, [context.checkable, props.checkable]);\n\n // ======= Event Handlers: Selection and Check =======\n var onSelect = function onSelect(e) {\n if (isDisabled) {\n return;\n }\n context.onNodeSelect(e, convertNodePropsToEventData(props));\n };\n var onCheck = function onCheck(e) {\n if (isDisabled) {\n return;\n }\n if (!isCheckable || props.disableCheckbox) {\n return;\n }\n context.onNodeCheck(e, convertNodePropsToEventData(props), !checked);\n };\n\n // ======= State: Selectable Check =======\n var isSelectable = React.useMemo(function () {\n // Ignore when selectable is undefined or null\n if (typeof selectable === 'boolean') {\n return selectable;\n }\n return context.selectable;\n }, [selectable, context.selectable]);\n var onSelectorClick = function onSelectorClick(e) {\n // Click trigger before select/check operation\n context.onNodeClick(e, convertNodePropsToEventData(props));\n if (isSelectable) {\n onSelect(e);\n } else {\n onCheck(e);\n }\n };\n var onSelectorDoubleClick = function onSelectorDoubleClick(e) {\n context.onNodeDoubleClick(e, convertNodePropsToEventData(props));\n };\n var onMouseEnter = function onMouseEnter(e) {\n context.onNodeMouseEnter(e, convertNodePropsToEventData(props));\n };\n var onMouseLeave = function onMouseLeave(e) {\n context.onNodeMouseLeave(e, convertNodePropsToEventData(props));\n };\n var onContextMenu = function onContextMenu(e) {\n context.onNodeContextMenu(e, convertNodePropsToEventData(props));\n };\n\n // ======= Drag: Drag Enabled =======\n var isDraggable = React.useMemo(function () {\n return !!(context.draggable && (!context.draggable.nodeDraggable || context.draggable.nodeDraggable(data)));\n }, [context.draggable, data]);\n\n // ======= Drag: Drag Event Handlers =======\n var onDragStart = function onDragStart(e) {\n e.stopPropagation();\n setDragNodeHighlight(true);\n context.onNodeDragStart(e, props);\n try {\n // ie throw error\n // firefox-need-it\n e.dataTransfer.setData('text/plain', '');\n } catch (_unused) {\n // empty\n }\n };\n var onDragEnter = function onDragEnter(e) {\n e.preventDefault();\n e.stopPropagation();\n context.onNodeDragEnter(e, props);\n };\n var onDragOver = function onDragOver(e) {\n e.preventDefault();\n e.stopPropagation();\n context.onNodeDragOver(e, props);\n };\n var onDragLeave = function onDragLeave(e) {\n e.stopPropagation();\n context.onNodeDragLeave(e, props);\n };\n var onDragEnd = function onDragEnd(e) {\n e.stopPropagation();\n setDragNodeHighlight(false);\n context.onNodeDragEnd(e, props);\n };\n var onDrop = function onDrop(e) {\n e.preventDefault();\n e.stopPropagation();\n setDragNodeHighlight(false);\n context.onNodeDrop(e, props);\n };\n\n // ======= Expand: Node Expansion =======\n var onExpand = function onExpand(e) {\n if (loading) {\n return;\n }\n context.onNodeExpand(e, convertNodePropsToEventData(props));\n };\n\n // ======= State: Has Children =======\n var hasChildren = React.useMemo(function () {\n var _ref = getEntity(context.keyEntities, eventKey) || {},\n children = _ref.children;\n return Boolean((children || []).length);\n }, [context.keyEntities, eventKey]);\n\n // ======= State: Leaf Check =======\n var memoizedIsLeaf = React.useMemo(function () {\n if (isLeaf === false) {\n return false;\n }\n return isLeaf || !context.loadData && !hasChildren || context.loadData && props.loaded && !hasChildren;\n }, [isLeaf, context.loadData, hasChildren, props.loaded]);\n\n // ============== Effect ==============\n React.useEffect(function () {\n // Load data to avoid default expanded tree without data\n if (loading) {\n return;\n }\n // read from state to avoid loadData at same time\n if (typeof context.loadData === 'function' && expanded && !memoizedIsLeaf && !props.loaded) {\n // We needn't reload data when has children in sync logic\n // It's only needed in node expanded\n context.onNodeLoad(convertNodePropsToEventData(props));\n }\n }, [loading, context.loadData, context.onNodeLoad, expanded, memoizedIsLeaf, props]);\n\n // ==================== Render: Drag Handler ====================\n var dragHandlerNode = React.useMemo(function () {\n var _context$draggable;\n if (!((_context$draggable = context.draggable) !== null && _context$draggable !== void 0 && _context$draggable.icon)) {\n return null;\n }\n return /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(context.prefixCls, \"-draggable-icon\")\n }, context.draggable.icon);\n }, [context.draggable]);\n\n // ====================== Render: Switcher ======================\n var renderSwitcherIconDom = function renderSwitcherIconDom(isInternalLeaf) {\n var switcherIcon = props.switcherIcon || context.switcherIcon;\n // if switcherIconDom is null, no render switcher span\n if (typeof switcherIcon === 'function') {\n return switcherIcon(_objectSpread(_objectSpread({}, props), {}, {\n isLeaf: isInternalLeaf\n }));\n }\n return switcherIcon;\n };\n\n // Switcher\n var renderSwitcher = function renderSwitcher() {\n if (memoizedIsLeaf) {\n // if switcherIconDom is null, no render switcher span\n var _switcherIconDom = renderSwitcherIconDom(true);\n return _switcherIconDom !== false ? /*#__PURE__*/React.createElement(\"span\", {\n className: classNames(\"\".concat(context.prefixCls, \"-switcher\"), \"\".concat(context.prefixCls, \"-switcher-noop\"))\n }, _switcherIconDom) : null;\n }\n var switcherIconDom = renderSwitcherIconDom(false);\n return switcherIconDom !== false ? /*#__PURE__*/React.createElement(\"span\", {\n onClick: onExpand,\n className: classNames(\"\".concat(context.prefixCls, \"-switcher\"), \"\".concat(context.prefixCls, \"-switcher_\").concat(expanded ? ICON_OPEN : ICON_CLOSE))\n }, switcherIconDom) : null;\n };\n\n // ====================== Checkbox ======================\n var checkboxNode = React.useMemo(function () {\n if (!isCheckable) {\n return null;\n }\n\n // [Legacy] Custom element should be separate with `checkable` in future\n var $custom = typeof isCheckable !== 'boolean' ? isCheckable : null;\n return /*#__PURE__*/React.createElement(\"span\", {\n className: classNames(\"\".concat(context.prefixCls, \"-checkbox\"), _defineProperty(_defineProperty(_defineProperty({}, \"\".concat(context.prefixCls, \"-checkbox-checked\"), checked), \"\".concat(context.prefixCls, \"-checkbox-indeterminate\"), !checked && halfChecked), \"\".concat(context.prefixCls, \"-checkbox-disabled\"), isDisabled || props.disableCheckbox)),\n onClick: onCheck,\n role: \"checkbox\",\n \"aria-checked\": halfChecked ? 'mixed' : checked,\n \"aria-disabled\": isDisabled || props.disableCheckbox,\n \"aria-label\": \"Select \".concat(typeof props.title === 'string' ? props.title : 'tree node')\n }, $custom);\n }, [isCheckable, checked, halfChecked, isDisabled, props.disableCheckbox, props.title]);\n\n // ============== State: Node State (Open/Close) ==============\n var nodeState = React.useMemo(function () {\n if (memoizedIsLeaf) {\n return null;\n }\n return expanded ? ICON_OPEN : ICON_CLOSE;\n }, [memoizedIsLeaf, expanded]);\n\n // ==================== Render: Title + Icon ====================\n var iconNode = React.useMemo(function () {\n return /*#__PURE__*/React.createElement(\"span\", {\n className: classNames(\"\".concat(context.prefixCls, \"-iconEle\"), \"\".concat(context.prefixCls, \"-icon__\").concat(nodeState || 'docu'), _defineProperty({}, \"\".concat(context.prefixCls, \"-icon_loading\"), loading))\n });\n }, [context.prefixCls, nodeState, loading]);\n\n // =================== Drop Indicator ===================\n var dropIndicatorNode = React.useMemo(function () {\n var rootDraggable = Boolean(context.draggable);\n // allowDrop is calculated in Tree.tsx, there is no need for calc it here\n var showIndicator = !props.disabled && rootDraggable && context.dragOverNodeKey === eventKey;\n if (!showIndicator) {\n return null;\n }\n return context.dropIndicatorRender({\n dropPosition: context.dropPosition,\n dropLevelOffset: context.dropLevelOffset,\n indent: context.indent,\n prefixCls: context.prefixCls,\n direction: context.direction\n });\n }, [context.dropPosition, context.dropLevelOffset, context.indent, context.prefixCls, context.direction, context.draggable, context.dragOverNodeKey, context.dropIndicatorRender]);\n\n // Icon + Title\n var selectorNode = React.useMemo(function () {\n var _props$title = props.title,\n title = _props$title === void 0 ? defaultTitle : _props$title;\n var wrapClass = \"\".concat(context.prefixCls, \"-node-content-wrapper\");\n\n // Icon - Still show loading icon when loading without showIcon\n var $icon;\n if (context.showIcon) {\n var currentIcon = props.icon || context.icon;\n $icon = currentIcon ? /*#__PURE__*/React.createElement(\"span\", {\n className: classNames(\"\".concat(context.prefixCls, \"-iconEle\"), \"\".concat(context.prefixCls, \"-icon__customize\"))\n }, typeof currentIcon === 'function' ? currentIcon(props) : currentIcon) : iconNode;\n } else if (context.loadData && loading) {\n $icon = iconNode;\n }\n\n // Title\n var titleNode;\n if (typeof title === 'function') {\n titleNode = title(data);\n } else if (context.titleRender) {\n titleNode = context.titleRender(data);\n } else {\n titleNode = title;\n }\n return /*#__PURE__*/React.createElement(\"span\", {\n ref: selectHandleRef,\n title: typeof title === 'string' ? title : '',\n className: classNames(wrapClass, \"\".concat(wrapClass, \"-\").concat(nodeState || 'normal'), _defineProperty({}, \"\".concat(context.prefixCls, \"-node-selected\"), !isDisabled && (selected || dragNodeHighlight))),\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave,\n onContextMenu: onContextMenu,\n onClick: onSelectorClick,\n onDoubleClick: onSelectorDoubleClick\n }, $icon, /*#__PURE__*/React.createElement(\"span\", {\n className: \"\".concat(context.prefixCls, \"-title\")\n }, titleNode), dropIndicatorNode);\n }, [context.prefixCls, context.showIcon, props, context.icon, iconNode, context.titleRender, data, nodeState, onMouseEnter, onMouseLeave, onContextMenu, onSelectorClick, onSelectorDoubleClick]);\n var dataOrAriaAttributeProps = pickAttrs(otherProps, {\n aria: true,\n data: true\n });\n var _ref2 = getEntity(context.keyEntities, eventKey) || {},\n level = _ref2.level;\n var isEndNode = isEnd[isEnd.length - 1];\n var draggableWithoutDisabled = !isDisabled && isDraggable;\n var dragging = context.draggingNodeKey === eventKey;\n var ariaSelected = selectable !== undefined ? {\n 'aria-selected': !!selectable\n } : undefined;\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n ref: domRef,\n role: \"treeitem\",\n \"aria-expanded\": isLeaf ? undefined : expanded,\n className: classNames(className, \"\".concat(context.prefixCls, \"-treenode\"), (_classNames4 = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_classNames4, \"\".concat(context.prefixCls, \"-treenode-disabled\"), isDisabled), \"\".concat(context.prefixCls, \"-treenode-switcher-\").concat(expanded ? 'open' : 'close'), !isLeaf), \"\".concat(context.prefixCls, \"-treenode-checkbox-checked\"), checked), \"\".concat(context.prefixCls, \"-treenode-checkbox-indeterminate\"), halfChecked), \"\".concat(context.prefixCls, \"-treenode-selected\"), selected), \"\".concat(context.prefixCls, \"-treenode-loading\"), loading), \"\".concat(context.prefixCls, \"-treenode-active\"), active), \"\".concat(context.prefixCls, \"-treenode-leaf-last\"), isEndNode), \"\".concat(context.prefixCls, \"-treenode-draggable\"), isDraggable), \"dragging\", dragging), _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_classNames4, 'drop-target', context.dropTargetKey === eventKey), 'drop-container', context.dropContainerKey === eventKey), 'drag-over', !isDisabled && dragOver), 'drag-over-gap-top', !isDisabled && dragOverGapTop), 'drag-over-gap-bottom', !isDisabled && dragOverGapBottom), 'filter-node', (_context$filterTreeNo = context.filterTreeNode) === null || _context$filterTreeNo === void 0 ? void 0 : _context$filterTreeNo.call(context, convertNodePropsToEventData(props))), \"\".concat(context.prefixCls, \"-treenode-leaf\"), memoizedIsLeaf))),\n style: style\n // Draggable config\n ,\n draggable: draggableWithoutDisabled,\n onDragStart: draggableWithoutDisabled ? onDragStart : undefined\n // Drop config\n ,\n onDragEnter: isDraggable ? onDragEnter : undefined,\n onDragOver: isDraggable ? onDragOver : undefined,\n onDragLeave: isDraggable ? onDragLeave : undefined,\n onDrop: isDraggable ? onDrop : undefined,\n onDragEnd: isDraggable ? onDragEnd : undefined,\n onMouseMove: onMouseMove\n }, ariaSelected, dataOrAriaAttributeProps), /*#__PURE__*/React.createElement(Indent, {\n prefixCls: context.prefixCls,\n level: level,\n isStart: isStart,\n isEnd: isEnd\n }), dragHandlerNode, renderSwitcher(), checkboxNode, selectorNode);\n};\nTreeNode.isTreeNode = 1;\nif (process.env.NODE_ENV !== 'production') {\n TreeNode.displayName = 'TreeNode';\n}\nexport default TreeNode;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\n\n/**\n * Trigger only when component unmount\n */\nfunction useUnmount(triggerStart, triggerEnd) {\n var _React$useState = React.useState(false),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n firstMount = _React$useState2[0],\n setFirstMount = _React$useState2[1];\n useLayoutEffect(function () {\n if (firstMount) {\n triggerStart();\n return function () {\n triggerEnd();\n };\n }\n }, [firstMount]);\n useLayoutEffect(function () {\n setFirstMount(true);\n return function () {\n setFirstMount(false);\n };\n }, []);\n}\nexport default useUnmount;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectDestructuringEmpty from \"@babel/runtime/helpers/esm/objectDestructuringEmpty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"className\", \"style\", \"motion\", \"motionNodes\", \"motionType\", \"onMotionStart\", \"onMotionEnd\", \"active\", \"treeNodeRequiredProps\"];\nimport classNames from 'classnames';\nimport CSSMotion from 'rc-motion';\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport * as React from 'react';\nimport { TreeContext } from \"./contextTypes\";\nimport TreeNode from \"./TreeNode\";\nimport useUnmount from \"./useUnmount\";\nimport { getTreeNodeProps } from \"./utils/treeUtil\";\nvar MotionTreeNode = /*#__PURE__*/React.forwardRef(function (oriProps, ref) {\n var className = oriProps.className,\n style = oriProps.style,\n motion = oriProps.motion,\n motionNodes = oriProps.motionNodes,\n motionType = oriProps.motionType,\n onOriginMotionStart = oriProps.onMotionStart,\n onOriginMotionEnd = oriProps.onMotionEnd,\n active = oriProps.active,\n treeNodeRequiredProps = oriProps.treeNodeRequiredProps,\n props = _objectWithoutProperties(oriProps, _excluded);\n var _React$useState = React.useState(true),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n visible = _React$useState2[0],\n setVisible = _React$useState2[1];\n var _React$useContext = React.useContext(TreeContext),\n prefixCls = _React$useContext.prefixCls;\n\n // Calculate target visible here.\n // And apply in effect to make `leave` motion work.\n var targetVisible = motionNodes && motionType !== 'hide';\n useLayoutEffect(function () {\n if (motionNodes) {\n if (targetVisible !== visible) {\n setVisible(targetVisible);\n }\n }\n }, [motionNodes]);\n var triggerMotionStart = function triggerMotionStart() {\n if (motionNodes) {\n onOriginMotionStart();\n }\n };\n\n // Should only trigger once\n var triggerMotionEndRef = React.useRef(false);\n var triggerMotionEnd = function triggerMotionEnd() {\n if (motionNodes && !triggerMotionEndRef.current) {\n triggerMotionEndRef.current = true;\n onOriginMotionEnd();\n }\n };\n\n // Effect if unmount\n useUnmount(triggerMotionStart, triggerMotionEnd);\n\n // Motion end event\n var onVisibleChanged = function onVisibleChanged(nextVisible) {\n if (targetVisible === nextVisible) {\n triggerMotionEnd();\n }\n };\n if (motionNodes) {\n return /*#__PURE__*/React.createElement(CSSMotion, _extends({\n ref: ref,\n visible: visible\n }, motion, {\n motionAppear: motionType === 'show',\n onVisibleChanged: onVisibleChanged\n }), function (_ref, motionRef) {\n var motionClassName = _ref.className,\n motionStyle = _ref.style;\n return /*#__PURE__*/React.createElement(\"div\", {\n ref: motionRef,\n className: classNames(\"\".concat(prefixCls, \"-treenode-motion\"), motionClassName),\n style: motionStyle\n }, motionNodes.map(function (treeNode) {\n var restProps = Object.assign({}, (_objectDestructuringEmpty(treeNode.data), treeNode.data)),\n title = treeNode.title,\n key = treeNode.key,\n isStart = treeNode.isStart,\n isEnd = treeNode.isEnd;\n delete restProps.children;\n var treeNodeProps = getTreeNodeProps(key, treeNodeRequiredProps);\n return /*#__PURE__*/React.createElement(TreeNode, _extends({}, restProps, treeNodeProps, {\n title: title,\n active: active,\n data: treeNode.data,\n key: key,\n isStart: isStart,\n isEnd: isEnd\n }));\n }));\n });\n }\n return /*#__PURE__*/React.createElement(TreeNode, _extends({\n domRef: ref,\n className: className,\n style: style\n }, props, {\n active: active\n }));\n});\nif (process.env.NODE_ENV !== 'production') {\n MotionTreeNode.displayName = 'MotionTreeNode';\n}\nexport default MotionTreeNode;","export function findExpandedKeys() {\n var prev = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var next = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var prevLen = prev.length;\n var nextLen = next.length;\n if (Math.abs(prevLen - nextLen) !== 1) {\n return {\n add: false,\n key: null\n };\n }\n function find(shorter, longer) {\n var cache = new Map();\n shorter.forEach(function (key) {\n cache.set(key, true);\n });\n var keys = longer.filter(function (key) {\n return !cache.has(key);\n });\n return keys.length === 1 ? keys[0] : null;\n }\n if (prevLen < nextLen) {\n return {\n add: true,\n key: find(prev, next)\n };\n }\n return {\n add: false,\n key: find(next, prev)\n };\n}\nexport function getExpandRange(shorter, longer, key) {\n var shorterStartIndex = shorter.findIndex(function (data) {\n return data.key === key;\n });\n var shorterEndNode = shorter[shorterStartIndex + 1];\n var longerStartIndex = longer.findIndex(function (data) {\n return data.key === key;\n });\n if (shorterEndNode) {\n var longerEndIndex = longer.findIndex(function (data) {\n return data.key === shorterEndNode.key;\n });\n return longer.slice(longerStartIndex + 1, longerEndIndex);\n }\n return longer.slice(longerStartIndex + 1);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectDestructuringEmpty from \"@babel/runtime/helpers/esm/objectDestructuringEmpty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"prefixCls\", \"data\", \"selectable\", \"checkable\", \"expandedKeys\", \"selectedKeys\", \"checkedKeys\", \"loadedKeys\", \"loadingKeys\", \"halfCheckedKeys\", \"keyEntities\", \"disabled\", \"dragging\", \"dragOverNodeKey\", \"dropPosition\", \"motion\", \"height\", \"itemHeight\", \"virtual\", \"scrollWidth\", \"focusable\", \"activeItem\", \"focused\", \"tabIndex\", \"onKeyDown\", \"onFocus\", \"onBlur\", \"onActiveChange\", \"onListChangeStart\", \"onListChangeEnd\"];\n/**\n * Handle virtual list of the TreeNodes.\n */\n\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport VirtualList from 'rc-virtual-list';\nimport * as React from 'react';\nimport MotionTreeNode from \"./MotionTreeNode\";\nimport { findExpandedKeys, getExpandRange } from \"./utils/diffUtil\";\nimport { getKey, getTreeNodeProps } from \"./utils/treeUtil\";\nvar HIDDEN_STYLE = {\n width: 0,\n height: 0,\n display: 'flex',\n overflow: 'hidden',\n opacity: 0,\n border: 0,\n padding: 0,\n margin: 0\n};\nvar noop = function noop() {};\nexport var MOTION_KEY = \"RC_TREE_MOTION_\".concat(Math.random());\nvar MotionNode = {\n key: MOTION_KEY\n};\nexport var MotionEntity = {\n key: MOTION_KEY,\n level: 0,\n index: 0,\n pos: '0',\n node: MotionNode,\n nodes: [MotionNode]\n};\nvar MotionFlattenData = {\n parent: null,\n children: [],\n pos: MotionEntity.pos,\n data: MotionNode,\n title: null,\n key: MOTION_KEY,\n /** Hold empty list here since we do not use it */\n isStart: [],\n isEnd: []\n};\n/**\n * We only need get visible content items to play the animation.\n */\nexport function getMinimumRangeTransitionRange(list, virtual, height, itemHeight) {\n if (virtual === false || !height) {\n return list;\n }\n return list.slice(0, Math.ceil(height / itemHeight) + 1);\n}\nfunction itemKey(item) {\n var key = item.key,\n pos = item.pos;\n return getKey(key, pos);\n}\nfunction getAccessibilityPath(item) {\n var path = String(item.data.key);\n var current = item;\n while (current.parent) {\n current = current.parent;\n path = \"\".concat(current.data.key, \" > \").concat(path);\n }\n return path;\n}\nvar NodeList = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var prefixCls = props.prefixCls,\n data = props.data,\n selectable = props.selectable,\n checkable = props.checkable,\n expandedKeys = props.expandedKeys,\n selectedKeys = props.selectedKeys,\n checkedKeys = props.checkedKeys,\n loadedKeys = props.loadedKeys,\n loadingKeys = props.loadingKeys,\n halfCheckedKeys = props.halfCheckedKeys,\n keyEntities = props.keyEntities,\n disabled = props.disabled,\n dragging = props.dragging,\n dragOverNodeKey = props.dragOverNodeKey,\n dropPosition = props.dropPosition,\n motion = props.motion,\n height = props.height,\n itemHeight = props.itemHeight,\n virtual = props.virtual,\n scrollWidth = props.scrollWidth,\n focusable = props.focusable,\n activeItem = props.activeItem,\n focused = props.focused,\n tabIndex = props.tabIndex,\n onKeyDown = props.onKeyDown,\n onFocus = props.onFocus,\n onBlur = props.onBlur,\n onActiveChange = props.onActiveChange,\n onListChangeStart = props.onListChangeStart,\n onListChangeEnd = props.onListChangeEnd,\n domProps = _objectWithoutProperties(props, _excluded);\n\n // =============================== Ref ================================\n var listRef = React.useRef(null);\n var indentMeasurerRef = React.useRef(null);\n React.useImperativeHandle(ref, function () {\n return {\n scrollTo: function scrollTo(scroll) {\n listRef.current.scrollTo(scroll);\n },\n getIndentWidth: function getIndentWidth() {\n return indentMeasurerRef.current.offsetWidth;\n }\n };\n });\n\n // ============================== Motion ==============================\n var _React$useState = React.useState(expandedKeys),\n _React$useState2 = _slicedToArray(_React$useState, 2),\n prevExpandedKeys = _React$useState2[0],\n setPrevExpandedKeys = _React$useState2[1];\n var _React$useState3 = React.useState(data),\n _React$useState4 = _slicedToArray(_React$useState3, 2),\n prevData = _React$useState4[0],\n setPrevData = _React$useState4[1];\n var _React$useState5 = React.useState(data),\n _React$useState6 = _slicedToArray(_React$useState5, 2),\n transitionData = _React$useState6[0],\n setTransitionData = _React$useState6[1];\n var _React$useState7 = React.useState([]),\n _React$useState8 = _slicedToArray(_React$useState7, 2),\n transitionRange = _React$useState8[0],\n setTransitionRange = _React$useState8[1];\n var _React$useState9 = React.useState(null),\n _React$useState10 = _slicedToArray(_React$useState9, 2),\n motionType = _React$useState10[0],\n setMotionType = _React$useState10[1];\n\n // When motion end but data change, this will makes data back to previous one\n var dataRef = React.useRef(data);\n dataRef.current = data;\n function onMotionEnd() {\n var latestData = dataRef.current;\n setPrevData(latestData);\n setTransitionData(latestData);\n setTransitionRange([]);\n setMotionType(null);\n onListChangeEnd();\n }\n\n // Do animation if expanded keys changed\n // layoutEffect here to avoid blink of node removing\n useLayoutEffect(function () {\n setPrevExpandedKeys(expandedKeys);\n var diffExpanded = findExpandedKeys(prevExpandedKeys, expandedKeys);\n if (diffExpanded.key !== null) {\n if (diffExpanded.add) {\n var keyIndex = prevData.findIndex(function (_ref) {\n var key = _ref.key;\n return key === diffExpanded.key;\n });\n var rangeNodes = getMinimumRangeTransitionRange(getExpandRange(prevData, data, diffExpanded.key), virtual, height, itemHeight);\n var newTransitionData = prevData.slice();\n newTransitionData.splice(keyIndex + 1, 0, MotionFlattenData);\n setTransitionData(newTransitionData);\n setTransitionRange(rangeNodes);\n setMotionType('show');\n } else {\n var _keyIndex = data.findIndex(function (_ref2) {\n var key = _ref2.key;\n return key === diffExpanded.key;\n });\n var _rangeNodes = getMinimumRangeTransitionRange(getExpandRange(data, prevData, diffExpanded.key), virtual, height, itemHeight);\n var _newTransitionData = data.slice();\n _newTransitionData.splice(_keyIndex + 1, 0, MotionFlattenData);\n setTransitionData(_newTransitionData);\n setTransitionRange(_rangeNodes);\n setMotionType('hide');\n }\n } else if (prevData !== data) {\n // If whole data changed, we just refresh the list\n setPrevData(data);\n setTransitionData(data);\n }\n }, [expandedKeys, data]);\n\n // We should clean up motion if is changed by dragging\n React.useEffect(function () {\n if (!dragging) {\n onMotionEnd();\n }\n }, [dragging]);\n var mergedData = motion ? transitionData : data;\n var treeNodeRequiredProps = {\n expandedKeys: expandedKeys,\n selectedKeys: selectedKeys,\n loadedKeys: loadedKeys,\n loadingKeys: loadingKeys,\n checkedKeys: checkedKeys,\n halfCheckedKeys: halfCheckedKeys,\n dragOverNodeKey: dragOverNodeKey,\n dropPosition: dropPosition,\n keyEntities: keyEntities\n };\n return /*#__PURE__*/React.createElement(React.Fragment, null, focused && activeItem && /*#__PURE__*/React.createElement(\"span\", {\n style: HIDDEN_STYLE,\n \"aria-live\": \"assertive\"\n }, getAccessibilityPath(activeItem)), /*#__PURE__*/React.createElement(\"div\", null, /*#__PURE__*/React.createElement(\"input\", {\n style: HIDDEN_STYLE,\n disabled: focusable === false || disabled,\n tabIndex: focusable !== false ? tabIndex : null,\n onKeyDown: onKeyDown,\n onFocus: onFocus,\n onBlur: onBlur,\n value: \"\",\n onChange: noop,\n \"aria-label\": \"for screen reader\"\n })), /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-treenode\"),\n \"aria-hidden\": true,\n style: {\n position: 'absolute',\n pointerEvents: 'none',\n visibility: 'hidden',\n height: 0,\n overflow: 'hidden',\n border: 0,\n padding: 0\n }\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(prefixCls, \"-indent\")\n }, /*#__PURE__*/React.createElement(\"div\", {\n ref: indentMeasurerRef,\n className: \"\".concat(prefixCls, \"-indent-unit\")\n }))), /*#__PURE__*/React.createElement(VirtualList, _extends({}, domProps, {\n data: mergedData,\n itemKey: itemKey,\n height: height,\n fullHeight: false,\n virtual: virtual,\n itemHeight: itemHeight,\n scrollWidth: scrollWidth,\n prefixCls: \"\".concat(prefixCls, \"-list\"),\n ref: listRef,\n role: \"tree\",\n onVisibleChange: function onVisibleChange(originList) {\n // The best match is using `fullList` - `originList` = `restList`\n // and check the `restList` to see if has the MOTION_KEY node\n // but this will cause performance issue for long list compare\n // we just check `originList` and repeat trigger `onMotionEnd`\n if (originList.every(function (item) {\n return itemKey(item) !== MOTION_KEY;\n })) {\n onMotionEnd();\n }\n }\n }), function (treeNode) {\n var pos = treeNode.pos,\n restProps = Object.assign({}, (_objectDestructuringEmpty(treeNode.data), treeNode.data)),\n title = treeNode.title,\n key = treeNode.key,\n isStart = treeNode.isStart,\n isEnd = treeNode.isEnd;\n var mergedKey = getKey(key, pos);\n delete restProps.key;\n delete restProps.children;\n var treeNodeProps = getTreeNodeProps(mergedKey, treeNodeRequiredProps);\n return /*#__PURE__*/React.createElement(MotionTreeNode, _extends({}, restProps, treeNodeProps, {\n title: title,\n active: !!activeItem && key === activeItem.key,\n pos: pos,\n data: treeNode.data,\n isStart: isStart,\n isEnd: isEnd,\n motion: motion,\n motionNodes: key === MOTION_KEY ? transitionRange : null,\n motionType: motionType,\n onMotionStart: onListChangeStart,\n onMotionEnd: onMotionEnd,\n treeNodeRequiredProps: treeNodeRequiredProps,\n onMouseMove: function onMouseMove() {\n onActiveChange(null);\n }\n }));\n }));\n});\nif (process.env.NODE_ENV !== 'production') {\n NodeList.displayName = 'NodeList';\n}\nexport default NodeList;","import _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\"];\n/* eslint-disable no-lonely-if */\n/**\n * Legacy code. Should avoid to use if you are new to import these code.\n */\n\nimport warning from \"rc-util/es/warning\";\nimport React from 'react';\nimport TreeNode from \"./TreeNode\";\nimport getEntity from \"./utils/keyUtil\";\nexport { getPosition, isTreeNode } from \"./utils/treeUtil\";\nexport function arrDel(list, value) {\n if (!list) return [];\n var clone = list.slice();\n var index = clone.indexOf(value);\n if (index >= 0) {\n clone.splice(index, 1);\n }\n return clone;\n}\nexport function arrAdd(list, value) {\n var clone = (list || []).slice();\n if (clone.indexOf(value) === -1) {\n clone.push(value);\n }\n return clone;\n}\nexport function posToArr(pos) {\n return pos.split('-');\n}\nexport function getDragChildrenKeys(dragNodeKey, keyEntities) {\n // not contains self\n // self for left or right drag\n var dragChildrenKeys = [];\n var entity = getEntity(keyEntities, dragNodeKey);\n function dig() {\n var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n list.forEach(function (_ref) {\n var key = _ref.key,\n children = _ref.children;\n dragChildrenKeys.push(key);\n dig(children);\n });\n }\n dig(entity.children);\n return dragChildrenKeys;\n}\nexport function isLastChild(treeNodeEntity) {\n if (treeNodeEntity.parent) {\n var posArr = posToArr(treeNodeEntity.pos);\n return Number(posArr[posArr.length - 1]) === treeNodeEntity.parent.children.length - 1;\n }\n return false;\n}\nexport function isFirstChild(treeNodeEntity) {\n var posArr = posToArr(treeNodeEntity.pos);\n return Number(posArr[posArr.length - 1]) === 0;\n}\n\n// Only used when drag, not affect SSR.\nexport function calcDropPosition(event, dragNodeProps, targetNodeProps, indent, startMousePosition, allowDrop, flattenedNodes, keyEntities, expandKeys, direction) {\n var _abstractDropNodeEnti;\n var clientX = event.clientX,\n clientY = event.clientY;\n var _getBoundingClientRec = event.target.getBoundingClientRect(),\n top = _getBoundingClientRec.top,\n height = _getBoundingClientRec.height;\n // optional chain for testing\n var horizontalMouseOffset = (direction === 'rtl' ? -1 : 1) * (((startMousePosition === null || startMousePosition === void 0 ? void 0 : startMousePosition.x) || 0) - clientX);\n var rawDropLevelOffset = (horizontalMouseOffset - 12) / indent;\n\n // Filter the expanded keys to exclude the node that not has children currently (like async nodes).\n var filteredExpandKeys = expandKeys.filter(function (key) {\n var _keyEntities$key;\n return (_keyEntities$key = keyEntities[key]) === null || _keyEntities$key === void 0 || (_keyEntities$key = _keyEntities$key.children) === null || _keyEntities$key === void 0 ? void 0 : _keyEntities$key.length;\n });\n\n // find abstract drop node by horizontal offset\n var abstractDropNodeEntity = getEntity(keyEntities, targetNodeProps.eventKey);\n if (clientY < top + height / 2) {\n // first half, set abstract drop node to previous node\n var nodeIndex = flattenedNodes.findIndex(function (flattenedNode) {\n return flattenedNode.key === abstractDropNodeEntity.key;\n });\n var prevNodeIndex = nodeIndex <= 0 ? 0 : nodeIndex - 1;\n var prevNodeKey = flattenedNodes[prevNodeIndex].key;\n abstractDropNodeEntity = getEntity(keyEntities, prevNodeKey);\n }\n var initialAbstractDropNodeKey = abstractDropNodeEntity.key;\n var abstractDragOverEntity = abstractDropNodeEntity;\n var dragOverNodeKey = abstractDropNodeEntity.key;\n var dropPosition = 0;\n var dropLevelOffset = 0;\n\n // Only allow cross level drop when dragging on a non-expanded node\n if (!filteredExpandKeys.includes(initialAbstractDropNodeKey)) {\n for (var i = 0; i < rawDropLevelOffset; i += 1) {\n if (isLastChild(abstractDropNodeEntity)) {\n abstractDropNodeEntity = abstractDropNodeEntity.parent;\n dropLevelOffset += 1;\n } else {\n break;\n }\n }\n }\n var abstractDragDataNode = dragNodeProps.data;\n var abstractDropDataNode = abstractDropNodeEntity.node;\n var dropAllowed = true;\n if (isFirstChild(abstractDropNodeEntity) && abstractDropNodeEntity.level === 0 && clientY < top + height / 2 && allowDrop({\n dragNode: abstractDragDataNode,\n dropNode: abstractDropDataNode,\n dropPosition: -1\n }) && abstractDropNodeEntity.key === targetNodeProps.eventKey) {\n // first half of first node in first level\n dropPosition = -1;\n } else if ((abstractDragOverEntity.children || []).length && filteredExpandKeys.includes(dragOverNodeKey)) {\n // drop on expanded node\n // only allow drop inside\n if (allowDrop({\n dragNode: abstractDragDataNode,\n dropNode: abstractDropDataNode,\n dropPosition: 0\n })) {\n dropPosition = 0;\n } else {\n dropAllowed = false;\n }\n } else if (dropLevelOffset === 0) {\n if (rawDropLevelOffset > -1.5) {\n // | Node | <- abstractDropNode\n // | -^-===== | <- mousePosition\n // 1. try drop after\n // 2. do not allow drop\n if (allowDrop({\n dragNode: abstractDragDataNode,\n dropNode: abstractDropDataNode,\n dropPosition: 1\n })) {\n dropPosition = 1;\n } else {\n dropAllowed = false;\n }\n } else {\n // | Node | <- abstractDropNode\n // | ---==^== | <- mousePosition\n // whether it has children or doesn't has children\n // always\n // 1. try drop inside\n // 2. try drop after\n // 3. do not allow drop\n if (allowDrop({\n dragNode: abstractDragDataNode,\n dropNode: abstractDropDataNode,\n dropPosition: 0\n })) {\n dropPosition = 0;\n } else if (allowDrop({\n dragNode: abstractDragDataNode,\n dropNode: abstractDropDataNode,\n dropPosition: 1\n })) {\n dropPosition = 1;\n } else {\n dropAllowed = false;\n }\n }\n } else {\n // | Node1 | <- abstractDropNode\n // | Node2 |\n // --^--|----=====| <- mousePosition\n // 1. try insert after Node1\n // 2. do not allow drop\n if (allowDrop({\n dragNode: abstractDragDataNode,\n dropNode: abstractDropDataNode,\n dropPosition: 1\n })) {\n dropPosition = 1;\n } else {\n dropAllowed = false;\n }\n }\n return {\n dropPosition: dropPosition,\n dropLevelOffset: dropLevelOffset,\n dropTargetKey: abstractDropNodeEntity.key,\n dropTargetPos: abstractDropNodeEntity.pos,\n dragOverNodeKey: dragOverNodeKey,\n dropContainerKey: dropPosition === 0 ? null : ((_abstractDropNodeEnti = abstractDropNodeEntity.parent) === null || _abstractDropNodeEnti === void 0 ? void 0 : _abstractDropNodeEnti.key) || null,\n dropAllowed: dropAllowed\n };\n}\n\n/**\n * Return selectedKeys according with multiple prop\n * @param selectedKeys\n * @param props\n * @returns [string]\n */\nexport function calcSelectedKeys(selectedKeys, props) {\n if (!selectedKeys) return undefined;\n var multiple = props.multiple;\n if (multiple) {\n return selectedKeys.slice();\n }\n if (selectedKeys.length) {\n return [selectedKeys[0]];\n }\n return selectedKeys;\n}\nvar internalProcessProps = function internalProcessProps(props) {\n return props;\n};\nexport function convertDataToTree(treeData, processor) {\n if (!treeData) return [];\n var _ref2 = processor || {},\n _ref2$processProps = _ref2.processProps,\n processProps = _ref2$processProps === void 0 ? internalProcessProps : _ref2$processProps;\n var list = Array.isArray(treeData) ? treeData : [treeData];\n return list.map(function (_ref3) {\n var children = _ref3.children,\n props = _objectWithoutProperties(_ref3, _excluded);\n var childrenNodes = convertDataToTree(children, processor);\n return /*#__PURE__*/React.createElement(TreeNode, _extends({\n key: props.key\n }, processProps(props)), childrenNodes);\n });\n}\n\n/**\n * Parse `checkedKeys` to { checkedKeys, halfCheckedKeys } style\n */\nexport function parseCheckedKeys(keys) {\n if (!keys) {\n return null;\n }\n\n // Convert keys to object format\n var keyProps;\n if (Array.isArray(keys)) {\n // [Legacy] Follow the api doc\n keyProps = {\n checkedKeys: keys,\n halfCheckedKeys: undefined\n };\n } else if (_typeof(keys) === 'object') {\n keyProps = {\n checkedKeys: keys.checked || undefined,\n halfCheckedKeys: keys.halfChecked || undefined\n };\n } else {\n warning(false, '`checkedKeys` is not an array or an object');\n return null;\n }\n return keyProps;\n}\n\n/**\n * If user use `autoExpandParent` we should get the list of parent node\n * @param keyList\n * @param keyEntities\n */\nexport function conductExpandParent(keyList, keyEntities) {\n var expandedKeys = new Set();\n function conductUp(key) {\n if (expandedKeys.has(key)) return;\n var entity = getEntity(keyEntities, key);\n if (!entity) return;\n expandedKeys.add(key);\n var parent = entity.parent,\n node = entity.node;\n if (node.disabled) return;\n if (parent) {\n conductUp(parent.key);\n }\n }\n (keyList || []).forEach(function (key) {\n conductUp(key);\n });\n return _toConsumableArray(expandedKeys);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _toConsumableArray from \"@babel/runtime/helpers/esm/toConsumableArray\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n// TODO: https://www.w3.org/TR/2017/NOTE-wai-aria-practices-1.1-20171214/examples/treeview/treeview-2/treeview-2a.html\n// Fully accessibility support\n\nimport classNames from 'classnames';\nimport KeyCode from \"rc-util/es/KeyCode\";\nimport pickAttrs from \"rc-util/es/pickAttrs\";\nimport warning from \"rc-util/es/warning\";\nimport * as React from 'react';\nimport { TreeContext } from \"./contextTypes\";\nimport DropIndicator from \"./DropIndicator\";\nimport NodeList, { MOTION_KEY, MotionEntity } from \"./NodeList\";\nimport TreeNode from \"./TreeNode\";\nimport { arrAdd, arrDel, calcDropPosition, calcSelectedKeys, conductExpandParent, getDragChildrenKeys, parseCheckedKeys, posToArr } from \"./util\";\nimport { conductCheck } from \"./utils/conductUtil\";\nimport getEntity from \"./utils/keyUtil\";\nimport { convertDataToEntities, convertNodePropsToEventData, convertTreeToData, fillFieldNames, flattenTreeData, getTreeNodeProps, warningWithoutKey } from \"./utils/treeUtil\";\nvar MAX_RETRY_TIMES = 10;\nvar Tree = /*#__PURE__*/function (_React$Component) {\n _inherits(Tree, _React$Component);\n var _super = _createSuper(Tree);\n function Tree() {\n var _this;\n _classCallCheck(this, Tree);\n for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n _args[_key] = arguments[_key];\n }\n _this = _super.call.apply(_super, [this].concat(_args));\n _defineProperty(_assertThisInitialized(_this), \"destroyed\", false);\n _defineProperty(_assertThisInitialized(_this), \"delayedDragEnterLogic\", void 0);\n _defineProperty(_assertThisInitialized(_this), \"loadingRetryTimes\", {});\n _defineProperty(_assertThisInitialized(_this), \"state\", {\n keyEntities: {},\n indent: null,\n selectedKeys: [],\n checkedKeys: [],\n halfCheckedKeys: [],\n loadedKeys: [],\n loadingKeys: [],\n expandedKeys: [],\n draggingNodeKey: null,\n dragChildrenKeys: [],\n // dropTargetKey is the key of abstract-drop-node\n // the abstract-drop-node is the real drop node when drag and drop\n // not the DOM drag over node\n dropTargetKey: null,\n dropPosition: null,\n // the drop position of abstract-drop-node, inside 0, top -1, bottom 1\n dropContainerKey: null,\n // the container key of abstract-drop-node if dropPosition is -1 or 1\n dropLevelOffset: null,\n // the drop level offset of abstract-drag-over-node\n dropTargetPos: null,\n // the pos of abstract-drop-node\n dropAllowed: true,\n // if drop to abstract-drop-node is allowed\n // the abstract-drag-over-node\n // if mouse is on the bottom of top dom node or no the top of the bottom dom node\n // abstract-drag-over-node is the top node\n dragOverNodeKey: null,\n treeData: [],\n flattenNodes: [],\n focused: false,\n activeKey: null,\n listChanging: false,\n prevProps: null,\n fieldNames: fillFieldNames()\n });\n _defineProperty(_assertThisInitialized(_this), \"dragStartMousePosition\", null);\n _defineProperty(_assertThisInitialized(_this), \"dragNodeProps\", null);\n _defineProperty(_assertThisInitialized(_this), \"currentMouseOverDroppableNodeKey\", null);\n _defineProperty(_assertThisInitialized(_this), \"listRef\", /*#__PURE__*/React.createRef());\n _defineProperty(_assertThisInitialized(_this), \"onNodeDragStart\", function (event, nodeProps) {\n var _this$state = _this.state,\n expandedKeys = _this$state.expandedKeys,\n keyEntities = _this$state.keyEntities;\n var onDragStart = _this.props.onDragStart;\n var eventKey = nodeProps.eventKey;\n _this.dragNodeProps = nodeProps;\n _this.dragStartMousePosition = {\n x: event.clientX,\n y: event.clientY\n };\n var newExpandedKeys = arrDel(expandedKeys, eventKey);\n _this.setState({\n draggingNodeKey: eventKey,\n dragChildrenKeys: getDragChildrenKeys(eventKey, keyEntities),\n indent: _this.listRef.current.getIndentWidth()\n });\n _this.setExpandedKeys(newExpandedKeys);\n window.addEventListener('dragend', _this.onWindowDragEnd);\n onDragStart === null || onDragStart === void 0 || onDragStart({\n event: event,\n node: convertNodePropsToEventData(nodeProps)\n });\n });\n /**\n * [Legacy] Select handler is smaller than node,\n * so that this will trigger when drag enter node or select handler.\n * This is a little tricky if customize css without padding.\n * Better for use mouse move event to refresh drag state.\n * But let's just keep it to avoid event trigger logic change.\n */\n _defineProperty(_assertThisInitialized(_this), \"onNodeDragEnter\", function (event, nodeProps) {\n var _this$state2 = _this.state,\n expandedKeys = _this$state2.expandedKeys,\n keyEntities = _this$state2.keyEntities,\n dragChildrenKeys = _this$state2.dragChildrenKeys,\n flattenNodes = _this$state2.flattenNodes,\n indent = _this$state2.indent;\n var _this$props = _this.props,\n onDragEnter = _this$props.onDragEnter,\n onExpand = _this$props.onExpand,\n allowDrop = _this$props.allowDrop,\n direction = _this$props.direction;\n var pos = nodeProps.pos,\n eventKey = nodeProps.eventKey;\n\n // record the key of node which is latest entered, used in dragleave event.\n if (_this.currentMouseOverDroppableNodeKey !== eventKey) {\n _this.currentMouseOverDroppableNodeKey = eventKey;\n }\n if (!_this.dragNodeProps) {\n _this.resetDragState();\n return;\n }\n var _calcDropPosition = calcDropPosition(event, _this.dragNodeProps, nodeProps, indent, _this.dragStartMousePosition, allowDrop, flattenNodes, keyEntities, expandedKeys, direction),\n dropPosition = _calcDropPosition.dropPosition,\n dropLevelOffset = _calcDropPosition.dropLevelOffset,\n dropTargetKey = _calcDropPosition.dropTargetKey,\n dropContainerKey = _calcDropPosition.dropContainerKey,\n dropTargetPos = _calcDropPosition.dropTargetPos,\n dropAllowed = _calcDropPosition.dropAllowed,\n dragOverNodeKey = _calcDropPosition.dragOverNodeKey;\n if (\n // don't allow drop inside its children\n dragChildrenKeys.includes(dropTargetKey) ||\n // don't allow drop when drop is not allowed caculated by calcDropPosition\n !dropAllowed) {\n _this.resetDragState();\n return;\n }\n\n // Side effect for delay drag\n if (!_this.delayedDragEnterLogic) {\n _this.delayedDragEnterLogic = {};\n }\n Object.keys(_this.delayedDragEnterLogic).forEach(function (key) {\n clearTimeout(_this.delayedDragEnterLogic[key]);\n });\n if (_this.dragNodeProps.eventKey !== nodeProps.eventKey) {\n // hoist expand logic here\n // since if logic is on the bottom\n // it will be blocked by abstract dragover node check\n // => if you dragenter from top, you mouse will still be consider as in the top node\n event.persist();\n _this.delayedDragEnterLogic[pos] = window.setTimeout(function () {\n if (_this.state.draggingNodeKey === null) {\n return;\n }\n var newExpandedKeys = _toConsumableArray(expandedKeys);\n var entity = getEntity(keyEntities, nodeProps.eventKey);\n if (entity && (entity.children || []).length) {\n newExpandedKeys = arrAdd(expandedKeys, nodeProps.eventKey);\n }\n if (!_this.props.hasOwnProperty('expandedKeys')) {\n _this.setExpandedKeys(newExpandedKeys);\n }\n onExpand === null || onExpand === void 0 || onExpand(newExpandedKeys, {\n node: convertNodePropsToEventData(nodeProps),\n expanded: true,\n nativeEvent: event.nativeEvent\n });\n }, 800);\n }\n\n // Skip if drag node is self\n if (_this.dragNodeProps.eventKey === dropTargetKey && dropLevelOffset === 0) {\n _this.resetDragState();\n return;\n }\n\n // Update drag over node and drag state\n _this.setState({\n dragOverNodeKey: dragOverNodeKey,\n dropPosition: dropPosition,\n dropLevelOffset: dropLevelOffset,\n dropTargetKey: dropTargetKey,\n dropContainerKey: dropContainerKey,\n dropTargetPos: dropTargetPos,\n dropAllowed: dropAllowed\n });\n onDragEnter === null || onDragEnter === void 0 || onDragEnter({\n event: event,\n node: convertNodePropsToEventData(nodeProps),\n expandedKeys: expandedKeys\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeDragOver\", function (event, nodeProps) {\n var _this$state3 = _this.state,\n dragChildrenKeys = _this$state3.dragChildrenKeys,\n flattenNodes = _this$state3.flattenNodes,\n keyEntities = _this$state3.keyEntities,\n expandedKeys = _this$state3.expandedKeys,\n indent = _this$state3.indent;\n var _this$props2 = _this.props,\n onDragOver = _this$props2.onDragOver,\n allowDrop = _this$props2.allowDrop,\n direction = _this$props2.direction;\n if (!_this.dragNodeProps) {\n return;\n }\n var _calcDropPosition2 = calcDropPosition(event, _this.dragNodeProps, nodeProps, indent, _this.dragStartMousePosition, allowDrop, flattenNodes, keyEntities, expandedKeys, direction),\n dropPosition = _calcDropPosition2.dropPosition,\n dropLevelOffset = _calcDropPosition2.dropLevelOffset,\n dropTargetKey = _calcDropPosition2.dropTargetKey,\n dropContainerKey = _calcDropPosition2.dropContainerKey,\n dropTargetPos = _calcDropPosition2.dropTargetPos,\n dropAllowed = _calcDropPosition2.dropAllowed,\n dragOverNodeKey = _calcDropPosition2.dragOverNodeKey;\n if (dragChildrenKeys.includes(dropTargetKey) || !dropAllowed) {\n // don't allow drop inside its children\n // don't allow drop when drop is not allowed calculated by calcDropPosition\n return;\n }\n\n // Update drag position\n\n if (_this.dragNodeProps.eventKey === dropTargetKey && dropLevelOffset === 0) {\n if (!(_this.state.dropPosition === null && _this.state.dropLevelOffset === null && _this.state.dropTargetKey === null && _this.state.dropContainerKey === null && _this.state.dropTargetPos === null && _this.state.dropAllowed === false && _this.state.dragOverNodeKey === null)) {\n _this.resetDragState();\n }\n } else if (!(dropPosition === _this.state.dropPosition && dropLevelOffset === _this.state.dropLevelOffset && dropTargetKey === _this.state.dropTargetKey && dropContainerKey === _this.state.dropContainerKey && dropTargetPos === _this.state.dropTargetPos && dropAllowed === _this.state.dropAllowed && dragOverNodeKey === _this.state.dragOverNodeKey)) {\n _this.setState({\n dropPosition: dropPosition,\n dropLevelOffset: dropLevelOffset,\n dropTargetKey: dropTargetKey,\n dropContainerKey: dropContainerKey,\n dropTargetPos: dropTargetPos,\n dropAllowed: dropAllowed,\n dragOverNodeKey: dragOverNodeKey\n });\n }\n onDragOver === null || onDragOver === void 0 || onDragOver({\n event: event,\n node: convertNodePropsToEventData(nodeProps)\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeDragLeave\", function (event, nodeProps) {\n // if it is outside the droppable area\n // currentMouseOverDroppableNodeKey will be updated in dragenter event when into another droppable receiver.\n if (_this.currentMouseOverDroppableNodeKey === nodeProps.eventKey && !event.currentTarget.contains(event.relatedTarget)) {\n _this.resetDragState();\n _this.currentMouseOverDroppableNodeKey = null;\n }\n var onDragLeave = _this.props.onDragLeave;\n onDragLeave === null || onDragLeave === void 0 || onDragLeave({\n event: event,\n node: convertNodePropsToEventData(nodeProps)\n });\n });\n // since stopPropagation() is called in treeNode\n // if onWindowDrag is called, whice means state is keeped, drag state should be cleared\n _defineProperty(_assertThisInitialized(_this), \"onWindowDragEnd\", function (event) {\n _this.onNodeDragEnd(event, null, true);\n window.removeEventListener('dragend', _this.onWindowDragEnd);\n });\n // if onNodeDragEnd is called, onWindowDragEnd won't be called since stopPropagation() is called\n _defineProperty(_assertThisInitialized(_this), \"onNodeDragEnd\", function (event, nodeProps) {\n var onDragEnd = _this.props.onDragEnd;\n _this.setState({\n dragOverNodeKey: null\n });\n _this.cleanDragState();\n onDragEnd === null || onDragEnd === void 0 || onDragEnd({\n event: event,\n node: convertNodePropsToEventData(nodeProps)\n });\n _this.dragNodeProps = null;\n window.removeEventListener('dragend', _this.onWindowDragEnd);\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeDrop\", function (event, _) {\n var _this$getActiveItem;\n var outsideTree = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var _this$state4 = _this.state,\n dragChildrenKeys = _this$state4.dragChildrenKeys,\n dropPosition = _this$state4.dropPosition,\n dropTargetKey = _this$state4.dropTargetKey,\n dropTargetPos = _this$state4.dropTargetPos,\n dropAllowed = _this$state4.dropAllowed;\n if (!dropAllowed) {\n return;\n }\n var onDrop = _this.props.onDrop;\n _this.setState({\n dragOverNodeKey: null\n });\n _this.cleanDragState();\n if (dropTargetKey === null) return;\n var abstractDropNodeProps = _objectSpread(_objectSpread({}, getTreeNodeProps(dropTargetKey, _this.getTreeNodeRequiredProps())), {}, {\n active: ((_this$getActiveItem = _this.getActiveItem()) === null || _this$getActiveItem === void 0 ? void 0 : _this$getActiveItem.key) === dropTargetKey,\n data: getEntity(_this.state.keyEntities, dropTargetKey).node\n });\n var dropToChild = dragChildrenKeys.includes(dropTargetKey);\n warning(!dropToChild, \"Can not drop to dragNode's children node. This is a bug of rc-tree. Please report an issue.\");\n var posArr = posToArr(dropTargetPos);\n var dropResult = {\n event: event,\n node: convertNodePropsToEventData(abstractDropNodeProps),\n dragNode: _this.dragNodeProps ? convertNodePropsToEventData(_this.dragNodeProps) : null,\n dragNodesKeys: [_this.dragNodeProps.eventKey].concat(dragChildrenKeys),\n dropToGap: dropPosition !== 0,\n dropPosition: dropPosition + Number(posArr[posArr.length - 1])\n };\n if (!outsideTree) {\n onDrop === null || onDrop === void 0 || onDrop(dropResult);\n }\n _this.dragNodeProps = null;\n });\n _defineProperty(_assertThisInitialized(_this), \"cleanDragState\", function () {\n var draggingNodeKey = _this.state.draggingNodeKey;\n if (draggingNodeKey !== null) {\n _this.setState({\n draggingNodeKey: null,\n dropPosition: null,\n dropContainerKey: null,\n dropTargetKey: null,\n dropLevelOffset: null,\n dropAllowed: true,\n dragOverNodeKey: null\n });\n }\n _this.dragStartMousePosition = null;\n _this.currentMouseOverDroppableNodeKey = null;\n });\n _defineProperty(_assertThisInitialized(_this), \"triggerExpandActionExpand\", function (e, treeNode) {\n var _this$state5 = _this.state,\n expandedKeys = _this$state5.expandedKeys,\n flattenNodes = _this$state5.flattenNodes;\n var expanded = treeNode.expanded,\n key = treeNode.key,\n isLeaf = treeNode.isLeaf;\n if (isLeaf || e.shiftKey || e.metaKey || e.ctrlKey) {\n return;\n }\n var node = flattenNodes.filter(function (nodeItem) {\n return nodeItem.key === key;\n })[0];\n var eventNode = convertNodePropsToEventData(_objectSpread(_objectSpread({}, getTreeNodeProps(key, _this.getTreeNodeRequiredProps())), {}, {\n data: node.data\n }));\n _this.setExpandedKeys(expanded ? arrDel(expandedKeys, key) : arrAdd(expandedKeys, key));\n _this.onNodeExpand(e, eventNode);\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeClick\", function (e, treeNode) {\n var _this$props3 = _this.props,\n onClick = _this$props3.onClick,\n expandAction = _this$props3.expandAction;\n if (expandAction === 'click') {\n _this.triggerExpandActionExpand(e, treeNode);\n }\n onClick === null || onClick === void 0 || onClick(e, treeNode);\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeDoubleClick\", function (e, treeNode) {\n var _this$props4 = _this.props,\n onDoubleClick = _this$props4.onDoubleClick,\n expandAction = _this$props4.expandAction;\n if (expandAction === 'doubleClick') {\n _this.triggerExpandActionExpand(e, treeNode);\n }\n onDoubleClick === null || onDoubleClick === void 0 || onDoubleClick(e, treeNode);\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeSelect\", function (e, treeNode) {\n var selectedKeys = _this.state.selectedKeys;\n var _this$state6 = _this.state,\n keyEntities = _this$state6.keyEntities,\n fieldNames = _this$state6.fieldNames;\n var _this$props5 = _this.props,\n onSelect = _this$props5.onSelect,\n multiple = _this$props5.multiple;\n var selected = treeNode.selected;\n var key = treeNode[fieldNames.key];\n var targetSelected = !selected;\n\n // Update selected keys\n if (!targetSelected) {\n selectedKeys = arrDel(selectedKeys, key);\n } else if (!multiple) {\n selectedKeys = [key];\n } else {\n selectedKeys = arrAdd(selectedKeys, key);\n }\n\n // [Legacy] Not found related usage in doc or upper libs\n var selectedNodes = selectedKeys.map(function (selectedKey) {\n var entity = getEntity(keyEntities, selectedKey);\n return entity ? entity.node : null;\n }).filter(Boolean);\n _this.setUncontrolledState({\n selectedKeys: selectedKeys\n });\n onSelect === null || onSelect === void 0 || onSelect(selectedKeys, {\n event: 'select',\n selected: targetSelected,\n node: treeNode,\n selectedNodes: selectedNodes,\n nativeEvent: e.nativeEvent\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeCheck\", function (e, treeNode, checked) {\n var _this$state7 = _this.state,\n keyEntities = _this$state7.keyEntities,\n oriCheckedKeys = _this$state7.checkedKeys,\n oriHalfCheckedKeys = _this$state7.halfCheckedKeys;\n var _this$props6 = _this.props,\n checkStrictly = _this$props6.checkStrictly,\n onCheck = _this$props6.onCheck;\n var key = treeNode.key;\n\n // Prepare trigger arguments\n var checkedObj;\n var eventObj = {\n event: 'check',\n node: treeNode,\n checked: checked,\n nativeEvent: e.nativeEvent\n };\n if (checkStrictly) {\n var checkedKeys = checked ? arrAdd(oriCheckedKeys, key) : arrDel(oriCheckedKeys, key);\n var halfCheckedKeys = arrDel(oriHalfCheckedKeys, key);\n checkedObj = {\n checked: checkedKeys,\n halfChecked: halfCheckedKeys\n };\n eventObj.checkedNodes = checkedKeys.map(function (checkedKey) {\n return getEntity(keyEntities, checkedKey);\n }).filter(Boolean).map(function (entity) {\n return entity.node;\n });\n _this.setUncontrolledState({\n checkedKeys: checkedKeys\n });\n } else {\n // Always fill first\n var _conductCheck = conductCheck([].concat(_toConsumableArray(oriCheckedKeys), [key]), true, keyEntities),\n _checkedKeys = _conductCheck.checkedKeys,\n _halfCheckedKeys = _conductCheck.halfCheckedKeys;\n\n // If remove, we do it again to correction\n if (!checked) {\n var keySet = new Set(_checkedKeys);\n keySet.delete(key);\n var _conductCheck2 = conductCheck(Array.from(keySet), {\n checked: false,\n halfCheckedKeys: _halfCheckedKeys\n }, keyEntities);\n _checkedKeys = _conductCheck2.checkedKeys;\n _halfCheckedKeys = _conductCheck2.halfCheckedKeys;\n }\n checkedObj = _checkedKeys;\n\n // [Legacy] This is used for `rc-tree-select`\n eventObj.checkedNodes = [];\n eventObj.checkedNodesPositions = [];\n eventObj.halfCheckedKeys = _halfCheckedKeys;\n _checkedKeys.forEach(function (checkedKey) {\n var entity = getEntity(keyEntities, checkedKey);\n if (!entity) return;\n var node = entity.node,\n pos = entity.pos;\n eventObj.checkedNodes.push(node);\n eventObj.checkedNodesPositions.push({\n node: node,\n pos: pos\n });\n });\n _this.setUncontrolledState({\n checkedKeys: _checkedKeys\n }, false, {\n halfCheckedKeys: _halfCheckedKeys\n });\n }\n onCheck === null || onCheck === void 0 || onCheck(checkedObj, eventObj);\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeLoad\", function (treeNode) {\n var _entity$children;\n var key = treeNode.key;\n var keyEntities = _this.state.keyEntities;\n\n // Skip if has children already\n var entity = getEntity(keyEntities, key);\n if (entity !== null && entity !== void 0 && (_entity$children = entity.children) !== null && _entity$children !== void 0 && _entity$children.length) {\n return;\n }\n var loadPromise = new Promise(function (resolve, reject) {\n // We need to get the latest state of loading/loaded keys\n _this.setState(function (_ref) {\n var _ref$loadedKeys = _ref.loadedKeys,\n loadedKeys = _ref$loadedKeys === void 0 ? [] : _ref$loadedKeys,\n _ref$loadingKeys = _ref.loadingKeys,\n loadingKeys = _ref$loadingKeys === void 0 ? [] : _ref$loadingKeys;\n var _this$props7 = _this.props,\n loadData = _this$props7.loadData,\n onLoad = _this$props7.onLoad;\n if (!loadData || loadedKeys.includes(key) || loadingKeys.includes(key)) {\n return null;\n }\n\n // Process load data\n var promise = loadData(treeNode);\n promise.then(function () {\n var currentLoadedKeys = _this.state.loadedKeys;\n var newLoadedKeys = arrAdd(currentLoadedKeys, key);\n\n // onLoad should trigger before internal setState to avoid `loadData` trigger twice.\n // https://github.com/ant-design/ant-design/issues/12464\n onLoad === null || onLoad === void 0 || onLoad(newLoadedKeys, {\n event: 'load',\n node: treeNode\n });\n _this.setUncontrolledState({\n loadedKeys: newLoadedKeys\n });\n _this.setState(function (prevState) {\n return {\n loadingKeys: arrDel(prevState.loadingKeys, key)\n };\n });\n resolve();\n }).catch(function (e) {\n _this.setState(function (prevState) {\n return {\n loadingKeys: arrDel(prevState.loadingKeys, key)\n };\n });\n\n // If exceed max retry times, we give up retry\n _this.loadingRetryTimes[key] = (_this.loadingRetryTimes[key] || 0) + 1;\n if (_this.loadingRetryTimes[key] >= MAX_RETRY_TIMES) {\n var currentLoadedKeys = _this.state.loadedKeys;\n warning(false, 'Retry for `loadData` many times but still failed. No more retry.');\n _this.setUncontrolledState({\n loadedKeys: arrAdd(currentLoadedKeys, key)\n });\n resolve();\n }\n reject(e);\n });\n return {\n loadingKeys: arrAdd(loadingKeys, key)\n };\n });\n });\n\n // Not care warning if we ignore this\n loadPromise.catch(function () {});\n return loadPromise;\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeMouseEnter\", function (event, node) {\n var onMouseEnter = _this.props.onMouseEnter;\n onMouseEnter === null || onMouseEnter === void 0 || onMouseEnter({\n event: event,\n node: node\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeMouseLeave\", function (event, node) {\n var onMouseLeave = _this.props.onMouseLeave;\n onMouseLeave === null || onMouseLeave === void 0 || onMouseLeave({\n event: event,\n node: node\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeContextMenu\", function (event, node) {\n var onRightClick = _this.props.onRightClick;\n if (onRightClick) {\n event.preventDefault();\n onRightClick({\n event: event,\n node: node\n });\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"onFocus\", function () {\n var onFocus = _this.props.onFocus;\n _this.setState({\n focused: true\n });\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n onFocus === null || onFocus === void 0 || onFocus.apply(void 0, args);\n });\n _defineProperty(_assertThisInitialized(_this), \"onBlur\", function () {\n var onBlur = _this.props.onBlur;\n _this.setState({\n focused: false\n });\n _this.onActiveChange(null);\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n onBlur === null || onBlur === void 0 || onBlur.apply(void 0, args);\n });\n _defineProperty(_assertThisInitialized(_this), \"getTreeNodeRequiredProps\", function () {\n var _this$state8 = _this.state,\n expandedKeys = _this$state8.expandedKeys,\n selectedKeys = _this$state8.selectedKeys,\n loadedKeys = _this$state8.loadedKeys,\n loadingKeys = _this$state8.loadingKeys,\n checkedKeys = _this$state8.checkedKeys,\n halfCheckedKeys = _this$state8.halfCheckedKeys,\n dragOverNodeKey = _this$state8.dragOverNodeKey,\n dropPosition = _this$state8.dropPosition,\n keyEntities = _this$state8.keyEntities;\n return {\n expandedKeys: expandedKeys || [],\n selectedKeys: selectedKeys || [],\n loadedKeys: loadedKeys || [],\n loadingKeys: loadingKeys || [],\n checkedKeys: checkedKeys || [],\n halfCheckedKeys: halfCheckedKeys || [],\n dragOverNodeKey: dragOverNodeKey,\n dropPosition: dropPosition,\n keyEntities: keyEntities\n };\n });\n // =========================== Expanded ===========================\n /** Set uncontrolled `expandedKeys`. This will also auto update `flattenNodes`. */\n _defineProperty(_assertThisInitialized(_this), \"setExpandedKeys\", function (expandedKeys) {\n var _this$state9 = _this.state,\n treeData = _this$state9.treeData,\n fieldNames = _this$state9.fieldNames;\n var flattenNodes = flattenTreeData(treeData, expandedKeys, fieldNames);\n _this.setUncontrolledState({\n expandedKeys: expandedKeys,\n flattenNodes: flattenNodes\n }, true);\n });\n _defineProperty(_assertThisInitialized(_this), \"onNodeExpand\", function (e, treeNode) {\n var expandedKeys = _this.state.expandedKeys;\n var _this$state10 = _this.state,\n listChanging = _this$state10.listChanging,\n fieldNames = _this$state10.fieldNames;\n var _this$props8 = _this.props,\n onExpand = _this$props8.onExpand,\n loadData = _this$props8.loadData;\n var expanded = treeNode.expanded;\n var key = treeNode[fieldNames.key];\n\n // Do nothing when motion is in progress\n if (listChanging) {\n return;\n }\n\n // Update selected keys\n var certain = expandedKeys.includes(key);\n var targetExpanded = !expanded;\n warning(expanded && certain || !expanded && !certain, 'Expand state not sync with index check');\n expandedKeys = targetExpanded ? arrAdd(expandedKeys, key) : arrDel(expandedKeys, key);\n _this.setExpandedKeys(expandedKeys);\n onExpand === null || onExpand === void 0 || onExpand(expandedKeys, {\n node: treeNode,\n expanded: targetExpanded,\n nativeEvent: e.nativeEvent\n });\n\n // Async Load data\n if (targetExpanded && loadData) {\n var loadPromise = _this.onNodeLoad(treeNode);\n if (loadPromise) {\n loadPromise.then(function () {\n // [Legacy] Refresh logic\n var newFlattenTreeData = flattenTreeData(_this.state.treeData, expandedKeys, fieldNames);\n _this.setUncontrolledState({\n flattenNodes: newFlattenTreeData\n });\n }).catch(function () {\n var currentExpandedKeys = _this.state.expandedKeys;\n var expandedKeysToRestore = arrDel(currentExpandedKeys, key);\n _this.setExpandedKeys(expandedKeysToRestore);\n });\n }\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"onListChangeStart\", function () {\n _this.setUncontrolledState({\n listChanging: true\n });\n });\n _defineProperty(_assertThisInitialized(_this), \"onListChangeEnd\", function () {\n setTimeout(function () {\n _this.setUncontrolledState({\n listChanging: false\n });\n });\n });\n // =========================== Keyboard ===========================\n _defineProperty(_assertThisInitialized(_this), \"onActiveChange\", function (newActiveKey) {\n var activeKey = _this.state.activeKey;\n var _this$props9 = _this.props,\n onActiveChange = _this$props9.onActiveChange,\n _this$props9$itemScro = _this$props9.itemScrollOffset,\n itemScrollOffset = _this$props9$itemScro === void 0 ? 0 : _this$props9$itemScro;\n if (activeKey === newActiveKey) {\n return;\n }\n _this.setState({\n activeKey: newActiveKey\n });\n if (newActiveKey !== null) {\n _this.scrollTo({\n key: newActiveKey,\n offset: itemScrollOffset\n });\n }\n onActiveChange === null || onActiveChange === void 0 || onActiveChange(newActiveKey);\n });\n _defineProperty(_assertThisInitialized(_this), \"getActiveItem\", function () {\n var _this$state11 = _this.state,\n activeKey = _this$state11.activeKey,\n flattenNodes = _this$state11.flattenNodes;\n if (activeKey === null) {\n return null;\n }\n return flattenNodes.find(function (_ref2) {\n var key = _ref2.key;\n return key === activeKey;\n }) || null;\n });\n _defineProperty(_assertThisInitialized(_this), \"offsetActiveKey\", function (offset) {\n var _this$state12 = _this.state,\n flattenNodes = _this$state12.flattenNodes,\n activeKey = _this$state12.activeKey;\n var index = flattenNodes.findIndex(function (_ref3) {\n var key = _ref3.key;\n return key === activeKey;\n });\n\n // Align with index\n if (index === -1 && offset < 0) {\n index = flattenNodes.length;\n }\n index = (index + offset + flattenNodes.length) % flattenNodes.length;\n var item = flattenNodes[index];\n if (item) {\n var _key4 = item.key;\n _this.onActiveChange(_key4);\n } else {\n _this.onActiveChange(null);\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"onKeyDown\", function (event) {\n var _this$state13 = _this.state,\n activeKey = _this$state13.activeKey,\n expandedKeys = _this$state13.expandedKeys,\n checkedKeys = _this$state13.checkedKeys,\n fieldNames = _this$state13.fieldNames;\n var _this$props10 = _this.props,\n onKeyDown = _this$props10.onKeyDown,\n checkable = _this$props10.checkable,\n selectable = _this$props10.selectable;\n\n // >>>>>>>>>> Direction\n switch (event.which) {\n case KeyCode.UP:\n {\n _this.offsetActiveKey(-1);\n event.preventDefault();\n break;\n }\n case KeyCode.DOWN:\n {\n _this.offsetActiveKey(1);\n event.preventDefault();\n break;\n }\n }\n\n // >>>>>>>>>> Expand & Selection\n var activeItem = _this.getActiveItem();\n if (activeItem && activeItem.data) {\n var treeNodeRequiredProps = _this.getTreeNodeRequiredProps();\n var expandable = activeItem.data.isLeaf === false || !!(activeItem.data[fieldNames.children] || []).length;\n var eventNode = convertNodePropsToEventData(_objectSpread(_objectSpread({}, getTreeNodeProps(activeKey, treeNodeRequiredProps)), {}, {\n data: activeItem.data,\n active: true\n }));\n switch (event.which) {\n // >>> Expand\n case KeyCode.LEFT:\n {\n // Collapse if possible\n if (expandable && expandedKeys.includes(activeKey)) {\n _this.onNodeExpand({}, eventNode);\n } else if (activeItem.parent) {\n _this.onActiveChange(activeItem.parent.key);\n }\n event.preventDefault();\n break;\n }\n case KeyCode.RIGHT:\n {\n // Expand if possible\n if (expandable && !expandedKeys.includes(activeKey)) {\n _this.onNodeExpand({}, eventNode);\n } else if (activeItem.children && activeItem.children.length) {\n _this.onActiveChange(activeItem.children[0].key);\n }\n event.preventDefault();\n break;\n }\n\n // Selection\n case KeyCode.ENTER:\n case KeyCode.SPACE:\n {\n if (checkable && !eventNode.disabled && eventNode.checkable !== false && !eventNode.disableCheckbox) {\n _this.onNodeCheck({}, eventNode, !checkedKeys.includes(activeKey));\n } else if (!checkable && selectable && !eventNode.disabled && eventNode.selectable !== false) {\n _this.onNodeSelect({}, eventNode);\n }\n break;\n }\n }\n }\n onKeyDown === null || onKeyDown === void 0 || onKeyDown(event);\n });\n /**\n * Only update the value which is not in props\n */\n _defineProperty(_assertThisInitialized(_this), \"setUncontrolledState\", function (state) {\n var atomic = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var forceState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n if (!_this.destroyed) {\n var needSync = false;\n var allPassed = true;\n var newState = {};\n Object.keys(state).forEach(function (name) {\n if (_this.props.hasOwnProperty(name)) {\n allPassed = false;\n return;\n }\n needSync = true;\n newState[name] = state[name];\n });\n if (needSync && (!atomic || allPassed)) {\n _this.setState(_objectSpread(_objectSpread({}, newState), forceState));\n }\n }\n });\n _defineProperty(_assertThisInitialized(_this), \"scrollTo\", function (scroll) {\n _this.listRef.current.scrollTo(scroll);\n });\n return _this;\n }\n _createClass(Tree, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n this.destroyed = false;\n this.onUpdated();\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n this.onUpdated();\n }\n }, {\n key: \"onUpdated\",\n value: function onUpdated() {\n var _this$props11 = this.props,\n activeKey = _this$props11.activeKey,\n _this$props11$itemScr = _this$props11.itemScrollOffset,\n itemScrollOffset = _this$props11$itemScr === void 0 ? 0 : _this$props11$itemScr;\n if (activeKey !== undefined && activeKey !== this.state.activeKey) {\n this.setState({\n activeKey: activeKey\n });\n if (activeKey !== null) {\n this.scrollTo({\n key: activeKey,\n offset: itemScrollOffset\n });\n }\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n window.removeEventListener('dragend', this.onWindowDragEnd);\n this.destroyed = true;\n }\n }, {\n key: \"resetDragState\",\n value: function resetDragState() {\n this.setState({\n dragOverNodeKey: null,\n dropPosition: null,\n dropLevelOffset: null,\n dropTargetKey: null,\n dropContainerKey: null,\n dropTargetPos: null,\n dropAllowed: false\n });\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this$state14 = this.state,\n focused = _this$state14.focused,\n flattenNodes = _this$state14.flattenNodes,\n keyEntities = _this$state14.keyEntities,\n draggingNodeKey = _this$state14.draggingNodeKey,\n activeKey = _this$state14.activeKey,\n dropLevelOffset = _this$state14.dropLevelOffset,\n dropContainerKey = _this$state14.dropContainerKey,\n dropTargetKey = _this$state14.dropTargetKey,\n dropPosition = _this$state14.dropPosition,\n dragOverNodeKey = _this$state14.dragOverNodeKey,\n indent = _this$state14.indent;\n var _this$props12 = this.props,\n prefixCls = _this$props12.prefixCls,\n className = _this$props12.className,\n style = _this$props12.style,\n showLine = _this$props12.showLine,\n focusable = _this$props12.focusable,\n _this$props12$tabInde = _this$props12.tabIndex,\n tabIndex = _this$props12$tabInde === void 0 ? 0 : _this$props12$tabInde,\n selectable = _this$props12.selectable,\n showIcon = _this$props12.showIcon,\n icon = _this$props12.icon,\n switcherIcon = _this$props12.switcherIcon,\n draggable = _this$props12.draggable,\n checkable = _this$props12.checkable,\n checkStrictly = _this$props12.checkStrictly,\n disabled = _this$props12.disabled,\n motion = _this$props12.motion,\n loadData = _this$props12.loadData,\n filterTreeNode = _this$props12.filterTreeNode,\n height = _this$props12.height,\n itemHeight = _this$props12.itemHeight,\n scrollWidth = _this$props12.scrollWidth,\n virtual = _this$props12.virtual,\n titleRender = _this$props12.titleRender,\n dropIndicatorRender = _this$props12.dropIndicatorRender,\n onContextMenu = _this$props12.onContextMenu,\n onScroll = _this$props12.onScroll,\n direction = _this$props12.direction,\n rootClassName = _this$props12.rootClassName,\n rootStyle = _this$props12.rootStyle;\n var domProps = pickAttrs(this.props, {\n aria: true,\n data: true\n });\n\n // It's better move to hooks but we just simply keep here\n var draggableConfig;\n if (draggable) {\n if (_typeof(draggable) === 'object') {\n draggableConfig = draggable;\n } else if (typeof draggable === 'function') {\n draggableConfig = {\n nodeDraggable: draggable\n };\n } else {\n draggableConfig = {};\n }\n }\n var contextValue = {\n prefixCls: prefixCls,\n selectable: selectable,\n showIcon: showIcon,\n icon: icon,\n switcherIcon: switcherIcon,\n draggable: draggableConfig,\n draggingNodeKey: draggingNodeKey,\n checkable: checkable,\n checkStrictly: checkStrictly,\n disabled: disabled,\n keyEntities: keyEntities,\n dropLevelOffset: dropLevelOffset,\n dropContainerKey: dropContainerKey,\n dropTargetKey: dropTargetKey,\n dropPosition: dropPosition,\n dragOverNodeKey: dragOverNodeKey,\n indent: indent,\n direction: direction,\n dropIndicatorRender: dropIndicatorRender,\n loadData: loadData,\n filterTreeNode: filterTreeNode,\n titleRender: titleRender,\n onNodeClick: this.onNodeClick,\n onNodeDoubleClick: this.onNodeDoubleClick,\n onNodeExpand: this.onNodeExpand,\n onNodeSelect: this.onNodeSelect,\n onNodeCheck: this.onNodeCheck,\n onNodeLoad: this.onNodeLoad,\n onNodeMouseEnter: this.onNodeMouseEnter,\n onNodeMouseLeave: this.onNodeMouseLeave,\n onNodeContextMenu: this.onNodeContextMenu,\n onNodeDragStart: this.onNodeDragStart,\n onNodeDragEnter: this.onNodeDragEnter,\n onNodeDragOver: this.onNodeDragOver,\n onNodeDragLeave: this.onNodeDragLeave,\n onNodeDragEnd: this.onNodeDragEnd,\n onNodeDrop: this.onNodeDrop\n };\n return /*#__PURE__*/React.createElement(TreeContext.Provider, {\n value: contextValue\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: classNames(prefixCls, className, rootClassName, _defineProperty(_defineProperty(_defineProperty({}, \"\".concat(prefixCls, \"-show-line\"), showLine), \"\".concat(prefixCls, \"-focused\"), focused), \"\".concat(prefixCls, \"-active-focused\"), activeKey !== null)),\n style: rootStyle\n }, /*#__PURE__*/React.createElement(NodeList, _extends({\n ref: this.listRef,\n prefixCls: prefixCls,\n style: style,\n data: flattenNodes,\n disabled: disabled,\n selectable: selectable,\n checkable: !!checkable,\n motion: motion,\n dragging: draggingNodeKey !== null,\n height: height,\n itemHeight: itemHeight,\n virtual: virtual,\n focusable: focusable,\n focused: focused,\n tabIndex: tabIndex,\n activeItem: this.getActiveItem(),\n onFocus: this.onFocus,\n onBlur: this.onBlur,\n onKeyDown: this.onKeyDown,\n onActiveChange: this.onActiveChange,\n onListChangeStart: this.onListChangeStart,\n onListChangeEnd: this.onListChangeEnd,\n onContextMenu: onContextMenu,\n onScroll: onScroll,\n scrollWidth: scrollWidth\n }, this.getTreeNodeRequiredProps(), domProps))));\n }\n }], [{\n key: \"getDerivedStateFromProps\",\n value: function getDerivedStateFromProps(props, prevState) {\n var prevProps = prevState.prevProps;\n var newState = {\n prevProps: props\n };\n function needSync(name) {\n return !prevProps && props.hasOwnProperty(name) || prevProps && prevProps[name] !== props[name];\n }\n\n // ================== Tree Node ==================\n var treeData;\n\n // fieldNames\n var fieldNames = prevState.fieldNames;\n if (needSync('fieldNames')) {\n fieldNames = fillFieldNames(props.fieldNames);\n newState.fieldNames = fieldNames;\n }\n\n // Check if `treeData` or `children` changed and save into the state.\n if (needSync('treeData')) {\n treeData = props.treeData;\n } else if (needSync('children')) {\n warning(false, '`children` of Tree is deprecated. Please use `treeData` instead.');\n treeData = convertTreeToData(props.children);\n }\n\n // Save flatten nodes info and convert `treeData` into keyEntities\n if (treeData) {\n newState.treeData = treeData;\n var entitiesMap = convertDataToEntities(treeData, {\n fieldNames: fieldNames\n });\n newState.keyEntities = _objectSpread(_defineProperty({}, MOTION_KEY, MotionEntity), entitiesMap.keyEntities);\n\n // Warning if treeNode not provide key\n if (process.env.NODE_ENV !== 'production') {\n warningWithoutKey(treeData, fieldNames);\n }\n }\n var keyEntities = newState.keyEntities || prevState.keyEntities;\n\n // ================ expandedKeys =================\n if (needSync('expandedKeys') || prevProps && needSync('autoExpandParent')) {\n newState.expandedKeys = props.autoExpandParent || !prevProps && props.defaultExpandParent ? conductExpandParent(props.expandedKeys, keyEntities) : props.expandedKeys;\n } else if (!prevProps && props.defaultExpandAll) {\n var cloneKeyEntities = _objectSpread({}, keyEntities);\n delete cloneKeyEntities[MOTION_KEY];\n\n // Only take the key who has the children to enhance the performance\n var nextExpandedKeys = [];\n Object.keys(cloneKeyEntities).forEach(function (key) {\n var entity = cloneKeyEntities[key];\n if (entity.children && entity.children.length) {\n nextExpandedKeys.push(entity.key);\n }\n });\n newState.expandedKeys = nextExpandedKeys;\n } else if (!prevProps && props.defaultExpandedKeys) {\n newState.expandedKeys = props.autoExpandParent || props.defaultExpandParent ? conductExpandParent(props.defaultExpandedKeys, keyEntities) : props.defaultExpandedKeys;\n }\n if (!newState.expandedKeys) {\n delete newState.expandedKeys;\n }\n\n // ================ flattenNodes =================\n if (treeData || newState.expandedKeys) {\n var flattenNodes = flattenTreeData(treeData || prevState.treeData, newState.expandedKeys || prevState.expandedKeys, fieldNames);\n newState.flattenNodes = flattenNodes;\n }\n\n // ================ selectedKeys =================\n if (props.selectable) {\n if (needSync('selectedKeys')) {\n newState.selectedKeys = calcSelectedKeys(props.selectedKeys, props);\n } else if (!prevProps && props.defaultSelectedKeys) {\n newState.selectedKeys = calcSelectedKeys(props.defaultSelectedKeys, props);\n }\n }\n\n // ================= checkedKeys =================\n if (props.checkable) {\n var checkedKeyEntity;\n if (needSync('checkedKeys')) {\n checkedKeyEntity = parseCheckedKeys(props.checkedKeys) || {};\n } else if (!prevProps && props.defaultCheckedKeys) {\n checkedKeyEntity = parseCheckedKeys(props.defaultCheckedKeys) || {};\n } else if (treeData) {\n // If `treeData` changed, we also need check it\n checkedKeyEntity = parseCheckedKeys(props.checkedKeys) || {\n checkedKeys: prevState.checkedKeys,\n halfCheckedKeys: prevState.halfCheckedKeys\n };\n }\n if (checkedKeyEntity) {\n var _checkedKeyEntity = checkedKeyEntity,\n _checkedKeyEntity$che = _checkedKeyEntity.checkedKeys,\n checkedKeys = _checkedKeyEntity$che === void 0 ? [] : _checkedKeyEntity$che,\n _checkedKeyEntity$hal = _checkedKeyEntity.halfCheckedKeys,\n halfCheckedKeys = _checkedKeyEntity$hal === void 0 ? [] : _checkedKeyEntity$hal;\n if (!props.checkStrictly) {\n var conductKeys = conductCheck(checkedKeys, true, keyEntities);\n checkedKeys = conductKeys.checkedKeys;\n halfCheckedKeys = conductKeys.halfCheckedKeys;\n }\n newState.checkedKeys = checkedKeys;\n newState.halfCheckedKeys = halfCheckedKeys;\n }\n }\n\n // ================= loadedKeys ==================\n if (needSync('loadedKeys')) {\n newState.loadedKeys = props.loadedKeys;\n }\n return newState;\n }\n }]);\n return Tree;\n}(React.Component);\n_defineProperty(Tree, \"defaultProps\", {\n prefixCls: 'rc-tree',\n showLine: false,\n showIcon: true,\n selectable: true,\n multiple: false,\n checkable: false,\n disabled: false,\n checkStrictly: false,\n draggable: false,\n defaultExpandParent: true,\n autoExpandParent: false,\n defaultExpandAll: false,\n defaultExpandedKeys: [],\n defaultCheckedKeys: [],\n defaultSelectedKeys: [],\n dropIndicatorRender: DropIndicator,\n allowDrop: function allowDrop() {\n return true;\n },\n expandAction: false\n});\n_defineProperty(Tree, \"TreeNode\", TreeNode);\nexport default Tree;","import Tree from \"./Tree\";\nimport TreeNode from \"./TreeNode\";\nimport { UnstableContext } from \"./contextTypes\";\nexport { TreeNode, UnstableContext };\nexport default Tree;","import { css } from '@emotion/react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nexport function getGlobalStyles(theme: GrafanaTheme2) {\n return css({\n '.moveable-control-box': {\n zIndex: 999,\n },\n '.rc-tree': {\n margin: 0,\n marginBottom: '15px',\n border: '1px solid transparent',\n '&-focused:not(&-active-focused)': {\n borderColor: 'cyan',\n },\n '.rc-tree-title': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n width: '100%',\n },\n '.rc-tree-treenode': {\n margin: 0,\n padding: '1px',\n lineHeight: '24px',\n whiteSpace: 'nowrap',\n listStyle: 'none',\n outline: 0,\n display: 'flex',\n marginBottom: '3px',\n cursor: 'pointer',\n '.draggable': {\n color: '#333',\n MozUserSelect: 'none',\n KhtmlUserSelect: 'none',\n WebkitUserSelect: 'none',\n userSelect: 'none',\n },\n '&.drop-container': {\n '> .draggable::after': {\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n boxShadow: 'inset 0 0 0 2px blue',\n content: '\"\"',\n },\n '& ~ .rc-tree-treenode': {\n borderLeft: `2px solid ${theme.components.input.borderColor}`,\n },\n },\n '&.drop-target': {\n '& ~ .rc-tree-treenode': {\n borderLeft: 'none',\n },\n },\n '&.filter-node': {\n '> .rc-tree-node-content-wrapper': {\n color: '#a60000 !important',\n fontWeight: 'bold !important',\n },\n },\n ul: {\n margin: 0,\n padding: '0 0 0 18px',\n },\n '.rc-tree-node-content-wrapper': {\n position: 'relative',\n display: 'inline-block',\n height: '24px',\n margin: 0,\n padding: 0,\n textDecoration: 'none',\n verticalAlign: 'top',\n cursor: 'grab',\n flexGrow: 1,\n border: `1px solid ${theme.components.input.borderColor}`,\n borderRadius: `${theme.shape.radius.default}`,\n background: `${theme.colors.background.secondary}`,\n minHeight: `${theme.spacing.gridSize * 4}px`,\n '&:hover': {\n border: `1px solid ${theme.components.input.borderHover}`,\n },\n '&.rc-tree-node-selected': {\n border: `1px solid ${theme.colors.primary.border}`,\n opacity: 1,\n },\n },\n span: {\n height: '100%',\n '&.rc-tree-checkbox, &.rc-tree-iconEle': {\n display: 'inline-block',\n width: '16px',\n height: '16px',\n marginRight: '2px',\n lineHeight: '16px',\n verticalAlign: '-0.125em',\n backgroundColor: 'transparent',\n backgroundRepeat: 'no-repeat',\n backgroundAttachment: 'scroll',\n border: '0 none',\n outline: 'none',\n cursor: 'pointer',\n '&.rc-tree-icon__customize': {\n backgroundImage: 'none',\n },\n },\n '&.rc-tree-switcher': {\n display: 'flex',\n alignItems: 'center',\n width: '16px',\n height: 'auto',\n backgroundColor: 'transparent',\n backgroundRepeat: 'no-repeat',\n backgroundAttachment: 'scroll',\n border: '0 none',\n outline: 'none',\n cursor: 'pointer',\n '&.rc-tree-icon__customize': {\n backgroundImage: 'none',\n },\n '&.rc-tree-switcher-noop': {\n cursor: 'auto',\n },\n '&.rc-tree-switcher_open': {\n backgroundPosition: '-93px -56px',\n },\n '&.rc-tree-switcher_close': {\n backgroundPosition: '-75px -56px',\n },\n },\n '&.rc-tree-icon_loading': {\n marginRight: '2px',\n verticalAlign: 'top',\n background:\n \"url('data:image/gif;base64,R0lGODlhEAAQAKIGAMLY8YSx5HOm4Mjc88/g9Ofw+v///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAGACwAAAAAEAAQAAADMGi6RbUwGjKIXCAA016PgRBElAVlG/RdLOO0X9nK61W39qvqiwz5Ls/rRqrggsdkAgAh+QQFCgAGACwCAAAABwAFAAADD2hqELAmiFBIYY4MAutdCQAh+QQFCgAGACwGAAAABwAFAAADD1hU1kaDOKMYCGAGEeYFCQAh+QQFCgAGACwKAAIABQAHAAADEFhUZjSkKdZqBQG0IELDQAIAIfkEBQoABgAsCgAGAAUABwAAAxBoVlRKgyjmlAIBqCDCzUoCACH5BAUKAAYALAYACgAHAAUAAAMPaGpFtYYMAgJgLogA610JACH5BAUKAAYALAIACgAHAAUAAAMPCAHWFiI4o1ghZZJB5i0JACH5BAUKAAYALAAABgAFAAcAAAMQCAFmIaEp1motpDQySMNFAgA7') no-repeat scroll 0 0 transparent\",\n },\n '&.rc-tree-checkbox': {\n width: '13px',\n height: '13px',\n margin: '0 3px',\n backgroundPosition: '0 0',\n '&-checked': {\n backgroundPosition: '-14px 0',\n },\n '&-indeterminate': {\n backgroundPosition: '-14px -28px',\n },\n '&-disabled': {\n backgroundPosition: '0 -56px',\n },\n '&.rc-tree-checkbox-checked.rc-tree-checkbox-disabled': {\n backgroundPosition: '-14px -56px',\n },\n '&.rc-tree-checkbox-indeterminate.rc-tree-checkbox-disabled': {\n position: 'relative',\n background: '#ccc',\n borderRadius: theme.shape.radius.default,\n '&::after': {\n position: 'absolute',\n top: '5px',\n left: '3px',\n width: '5px',\n height: 0,\n border: '2px solid #fff',\n borderTop: 0,\n borderLeft: 0,\n WebkitTransform: 'scale(1)',\n transform: 'scale(1)',\n content: '\" \"',\n },\n },\n },\n },\n },\n '&:not(.rc-tree-show-line)': {\n '.rc-tree-treenode': {\n '.rc-tree-switcher-noop': {\n background: 'none',\n },\n },\n },\n '&.rc-tree-show-line': {\n '.rc-tree-treenode:not(:last-child)': {\n '> ul': {\n background:\n \"url('data:image/gif;base64,R0lGODlhCQACAIAAAMzMzP///yH5BAEAAAEALAAAAAAJAAIAAAIEjI9pUAA7') 0 0 repeat-y\",\n },\n '> .rc-tree-switcher-noop': {\n backgroundPosition: '-56px -18px',\n },\n },\n '.rc-tree-treenode:last-child': {\n '> .rc-tree-switcher-noop': {\n backgroundPosition: '-56px -36px',\n },\n },\n },\n '&-child-tree': {\n display: 'none',\n '&-open': {\n display: 'block',\n },\n },\n '&-treenode-disabled': {\n '> span:not(.rc-tree-switcher), > a, > a span': {\n color: '#767676',\n cursor: 'not-allowed',\n },\n },\n '&-treenode-active': {\n background: 'rgba(0, 0, 0, 0.1)',\n },\n '&-node-selected': {\n opacity: 0.8,\n },\n '&-icon__open': {\n marginRight: '2px',\n verticalAlign: 'top',\n backgroundPosition: '-110px -16px',\n },\n '&-icon__close': {\n marginRight: '2px',\n verticalAlign: 'top',\n backgroundPosition: '-110px 0',\n },\n '&-icon__docu': {\n marginRight: '2px',\n verticalAlign: 'top',\n backgroundPosition: '-110px -32px',\n },\n '&-icon__customize': {\n marginRight: '2px',\n verticalAlign: 'top',\n },\n '&-title': {\n display: 'inline-block',\n },\n '&-indent': {\n display: 'inline-block',\n height: 0,\n verticalAlign: 'bottom',\n },\n '&-indent-unit': {\n display: 'inline-block',\n width: '16px',\n },\n '&-draggable-icon': {\n display: 'inline-flex',\n justifyContent: 'center',\n width: '16px',\n },\n },\n });\n}\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { IconButton, useStyles2 } from '@grafana/ui';\nimport { LayerName } from 'app/core/components/Layers/LayerName';\nimport { ElementState } from 'app/features/canvas/runtime/element';\n\nimport { LayerActionID } from '../../types';\nimport { TreeViewEditorProps } from '../element/elementEditor';\n\nimport { TreeElement } from './tree';\n\ninterface Props {\n settings: TreeViewEditorProps;\n nodeData: TreeElement;\n setAllowSelection: (allow: boolean) => void;\n}\n\nexport const TreeNodeTitle = ({ settings, nodeData, setAllowSelection }: Props) => {\n const element = nodeData.dataRef;\n const name = nodeData.dataRef.getName();\n\n const styles = useStyles2(getStyles);\n\n const layer = settings.layer;\n\n const getScene = () => {\n if (!settings?.layer) {\n return;\n }\n\n return settings.layer.scene;\n };\n\n const onDelete = (element: ElementState) => {\n const elLayer = element.parent ?? layer;\n elLayer.doAction(LayerActionID.Delete, element);\n setAllowSelection(false);\n };\n\n const onDuplicate = (element: ElementState) => {\n const elLayer = element.parent ?? layer;\n elLayer.doAction(LayerActionID.Duplicate, element);\n setAllowSelection(false);\n };\n\n const onNameChange = (element: ElementState, name: string) => {\n element.onChange({ ...element.options, name });\n };\n\n const verifyLayerNameUniqueness = (nameToVerify: string) => {\n const scene = getScene();\n\n return Boolean(scene?.canRename(nameToVerify));\n };\n\n const getLayerInfo = (element: ElementState) => {\n return element.options.type;\n };\n\n return (\n <>\n <LayerName\n name={name}\n onChange={(v) => onNameChange(element, v)}\n verifyLayerNameUniqueness={verifyLayerNameUniqueness ?? undefined}\n />\n\n <div className={styles.textWrapper}> {getLayerInfo(element)}</div>\n\n {!nodeData.children && (\n <div className={styles.actionButtonsWrapper}>\n <IconButton\n name=\"copy\"\n title={t('canvas.tree-node-title.title-duplicate', 'Duplicate')}\n className={styles.actionIcon}\n onClick={() => onDuplicate(element)}\n tooltip={t('canvas.tree-node-title.tooltip-duplicate', 'Duplicate')}\n />\n <IconButton\n name=\"trash-alt\"\n title={t('canvas.tree-node-title.title-remove', 'Remove')}\n className={styles.actionIcon}\n onClick={() => onDelete(element)}\n tooltip={t('canvas.tree-node-title.tooltip-remove', 'Remove')}\n />\n </div>\n )}\n </>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n actionButtonsWrapper: css({\n display: 'flex',\n alignItems: 'flex-end',\n }),\n actionIcon: css({\n color: theme.colors.text.secondary,\n cursor: 'pointer',\n '&:hover': {\n color: theme.colors.text.primary,\n },\n }),\n textWrapper: css({\n display: 'flex',\n alignItems: 'center',\n flexGrow: 1,\n overflow: 'hidden',\n marginRight: theme.spacing(1),\n }),\n layerName: css({\n fontWeight: theme.typography.fontWeightMedium,\n color: theme.colors.primary.text,\n cursor: 'pointer',\n overflow: 'hidden',\n marginLeft: theme.spacing(0.5),\n }),\n});\n","import { CSSProperties } from 'react';\n\nimport { ElementState } from 'app/features/canvas/runtime/element';\nimport { FrameState } from 'app/features/canvas/runtime/frame';\nimport { RootElement } from 'app/features/canvas/runtime/root';\n\nimport { DragNode, DropNode } from '../../types';\n\nexport interface TreeElement {\n key: number;\n title: string;\n selectable?: boolean;\n children?: TreeElement[];\n dataRef: ElementState | FrameState;\n style?: CSSProperties;\n}\n\nexport function getTreeData(root?: RootElement | FrameState, selection?: string[], selectedColor?: string) {\n let elements: TreeElement[] = [];\n if (root) {\n for (let i = root.elements.length; i--; i >= 0) {\n const item = root.elements[i];\n const element: TreeElement = {\n key: item.UID,\n title: item.getName(),\n selectable: true,\n dataRef: item,\n };\n\n if (item instanceof FrameState) {\n element.children = getTreeData(item, selection, selectedColor);\n }\n elements.push(element);\n }\n }\n\n return elements;\n}\n\nexport function onNodeDrop(\n info: { node: DropNode; dragNode: DragNode; dropPosition: number; dropToGap: boolean },\n treeData: TreeElement[]\n) {\n const destKey = info.node.key;\n const srcKey = info.dragNode.key;\n const destPos = info.node.pos.split('-');\n const destPosition = info.dropPosition - Number(destPos[destPos.length - 1]);\n\n const loop = (\n data: TreeElement[],\n key: number,\n callback: { (item: TreeElement, index: number, arr: TreeElement[]): void }\n ) => {\n data.forEach((item, index, arr) => {\n if (item.key === key) {\n callback(item, index, arr);\n return;\n }\n if (item.children) {\n loop(item.children, key, callback);\n }\n });\n };\n const data = [...treeData];\n\n // Find dragObject\n let srcElement: TreeElement | undefined = undefined;\n loop(data, srcKey, (item: TreeElement, index: number, arr: TreeElement[]) => {\n arr.splice(index, 1);\n srcElement = item;\n });\n\n if (destPosition === 0) {\n // Drop on the content\n loop(data, destKey, (item: TreeElement) => {\n item.children = item.children || [];\n item.children.unshift(srcElement!);\n });\n } else {\n // Drop on the gap (insert before or insert after)\n let ar: TreeElement[] = [];\n let i = 0;\n loop(data, destKey, (item: TreeElement, index: number, arr: TreeElement[]) => {\n ar = arr;\n i = index;\n });\n\n if (destPosition === -1) {\n ar.splice(i, 0, srcElement!);\n } else {\n ar.splice(i + 1, 0, srcElement!);\n }\n }\n\n return data;\n}\n","import { css } from '@emotion/css';\nimport { Global } from '@emotion/react';\nimport Tree, { TreeNodeProps } from 'rc-tree';\nimport { Key, useEffect, useMemo, useState } from 'react';\n\nimport { GrafanaTheme2, StandardEditorProps } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { Button, Icon, Stack, useStyles2, useTheme2 } from '@grafana/ui';\nimport { AddLayerButton } from 'app/core/components/Layers/AddLayerButton';\nimport { ElementState } from 'app/features/canvas/runtime/element';\nimport { frameSelection, reorderElements } from 'app/features/canvas/runtime/sceneElementManagement';\n\nimport { getGlobalStyles } from '../../globalStyles';\nimport { Options } from '../../panelcfg.gen';\nimport { DragNode, DropNode } from '../../types';\nimport { doSelect, getElementTypes, onAddItem } from '../../utils';\nimport { TreeViewEditorProps } from '../element/elementEditor';\n\nimport { TreeNodeTitle } from './TreeNodeTitle';\nimport { getTreeData, onNodeDrop, TreeElement } from './tree';\n\nlet allowSelection = true;\n\nexport const TreeNavigationEditor = ({ item }: StandardEditorProps<unknown, TreeViewEditorProps, Options>) => {\n const [treeData, setTreeData] = useState(getTreeData(item?.settings?.scene.root));\n const [autoExpandParent, setAutoExpandParent] = useState(true);\n const [expandedKeys, setExpandedKeys] = useState<Key[]>([]);\n const [selectedKeys, setSelectedKeys] = useState<Key[]>([]);\n\n const theme = useTheme2();\n const globalCSS = getGlobalStyles(theme);\n const styles = useStyles2(getStyles);\n\n const selectedBgColor = theme.colors.primary.border;\n const { settings } = item;\n const selection = useMemo(\n () => (settings?.selected ? settings.selected.map((v) => v?.getName()) : []),\n [settings?.selected]\n );\n\n const selectionByUID = useMemo(\n () => (settings?.selected ? settings.selected.map((v) => v?.UID) : []),\n [settings?.selected]\n );\n\n useEffect(() => {\n setTreeData(getTreeData(item?.settings?.scene.root, selection, selectedBgColor));\n setSelectedKeys(selectionByUID);\n setAllowSelection();\n }, [item?.settings?.scene.root, selectedBgColor, selection, selectionByUID]);\n\n if (!settings) {\n return (\n <div>\n <Trans i18nKey=\"canvas.tree-navigation-editor.no-settings\">No settings</Trans>\n </div>\n );\n }\n\n const layer = settings.layer;\n if (!layer) {\n return (\n <div>\n <Trans i18nKey=\"canvas.tree-navigation-editor.missing-layer\">Missing layer?</Trans>\n </div>\n );\n }\n\n const onSelect = (selectedKeys: Key[], info: { node: { dataRef: ElementState } }) => {\n if (allowSelection && item.settings?.scene) {\n doSelect(item.settings.scene, info.node.dataRef);\n }\n };\n\n const allowDrop = () => {\n return true;\n };\n\n const onDrop = (info: { node: DropNode; dragNode: DragNode; dropPosition: number; dropToGap: boolean }) => {\n const destPos = info.node.pos.split('-');\n const destPosition = info.dropPosition - Number(destPos[destPos.length - 1]);\n\n const srcEl = info.dragNode.dataRef;\n const destEl = info.node.dataRef;\n\n const data = onNodeDrop(info, treeData);\n\n setTreeData(data);\n reorderElements(srcEl, destEl, info.dropToGap, destPosition);\n };\n\n const onExpand = (expandedKeys: Key[]) => {\n setExpandedKeys(expandedKeys);\n setAutoExpandParent(false);\n };\n\n const switcherIcon = (obj: TreeNodeProps) => {\n if (obj.isLeaf) {\n // TODO: Implement element specific icons\n return <></>;\n }\n\n return (\n <Icon\n name=\"angle-right\"\n title={t('canvas.tree-navigation-editor.switcher-icon.title-node-icon', 'Node Icon')}\n style={{\n transform: `rotate(${obj.expanded ? 90 : 0}deg)`,\n fill: theme.colors.text.primary,\n }}\n />\n );\n };\n\n const setAllowSelection = (allow = true) => {\n allowSelection = allow;\n };\n\n const onClearSelection = () => {\n layer.scene.clearCurrentSelection();\n };\n\n const onTitleRender = (nodeData: TreeElement) => {\n return <TreeNodeTitle nodeData={nodeData} setAllowSelection={setAllowSelection} settings={settings} />;\n };\n\n // TODO: This functionality is currently kinda broken / no way to decouple / delete created frames at this time\n const onFrameSelection = () => {\n if (layer.scene) {\n frameSelection(layer.scene);\n } else {\n console.warn('no scene!');\n }\n };\n\n const typeOptions = getElementTypes(settings.scene.shouldShowAdvancedTypes).options;\n\n return (\n <>\n <Global styles={globalCSS} />\n <Tree\n selectable={true}\n onSelect={onSelect}\n draggable={true}\n defaultExpandAll={true}\n autoExpandParent={autoExpandParent}\n showIcon={false}\n allowDrop={allowDrop}\n onDrop={onDrop}\n expandedKeys={expandedKeys}\n onExpand={onExpand}\n treeData={treeData}\n titleRender={onTitleRender}\n switcherIcon={switcherIcon}\n selectedKeys={selectedKeys}\n multiple={true}\n />\n\n <Stack justifyContent=\"space-between\" direction=\"row\">\n <div className={styles.addLayerButton}>\n <AddLayerButton\n onChange={(sel) => onAddItem(sel, layer)}\n options={typeOptions}\n label={t('canvas.tree-navigation-editor.label-add-item', 'Add item')}\n />\n </div>\n {selection.length > 0 && (\n <Button size=\"sm\" variant=\"secondary\" onClick={onClearSelection}>\n <Trans i18nKey=\"canvas.tree-navigation-editor.clear-selection\">Clear selection</Trans>\n </Button>\n )}\n {selection.length > 1 && config.featureToggles.canvasPanelNesting && (\n <Button size=\"sm\" variant=\"secondary\" onClick={onFrameSelection}>\n <Trans i18nKey=\"canvas.tree-navigation-editor.frame-selection\">Frame selection</Trans>\n </Button>\n )}\n </Stack>\n </>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n addLayerButton: css({\n marginLeft: '18px',\n minWidth: '150px',\n }),\n});\n","import { get as lodashGet } from 'lodash';\n\nimport { NestedPanelOptions, NestedValueAccess } from '@grafana/data/internal';\nimport { t } from '@grafana/i18n';\nimport { ElementState } from 'app/features/canvas/runtime/element';\nimport { FrameState } from 'app/features/canvas/runtime/frame';\nimport { Scene } from 'app/features/canvas/runtime/scene';\nimport { setOptionImmutably } from 'app/features/dashboard/components/PanelEditor/utils';\n\nimport { InstanceState } from '../../CanvasPanel';\nimport { PlacementEditor } from '../element/PlacementEditor';\nimport { optionBuilder } from '../options';\n\nimport { TreeNavigationEditor } from './TreeNavigationEditor';\n\nexport interface LayerEditorProps {\n scene: Scene;\n layer: FrameState;\n selected: ElementState[];\n}\n\nexport function getLayerEditor(opts: InstanceState): NestedPanelOptions<LayerEditorProps> {\n const { selected, scene } = opts;\n\n if (!scene.currentLayer) {\n scene.currentLayer = scene.root;\n }\n\n if (selected) {\n for (const element of selected) {\n if (element instanceof FrameState) {\n scene.currentLayer = element;\n break;\n }\n\n if (element && element.parent) {\n scene.currentLayer = element.parent;\n break;\n }\n }\n }\n\n const options = scene.currentLayer.options || { elements: [] };\n\n return {\n category: [t('canvas.layer-editor.category-layer', 'Layer')],\n path: '--', // not used!\n\n // Note that canvas editor writes things to the scene!\n values: (parent: NestedValueAccess) => ({\n getValue: (path) => {\n return lodashGet(options, path);\n },\n onChange: (path, value) => {\n if (path === 'type' && value) {\n console.warn('unable to change layer type');\n return;\n }\n const c = setOptionImmutably(options, path, value);\n scene.currentLayer?.onChange(c);\n scene.currentLayer?.updateData(scene.context);\n },\n }),\n\n // Dynamically fill the selected element\n build: (builder, context) => {\n const currentLayer = scene.currentLayer;\n if (currentLayer && !currentLayer.isRoot()) {\n // TODO: the non-root nav option\n }\n\n builder.addCustomEditor({\n id: 'content',\n path: 'root',\n name: t('canvas.layer-editor.name-elements', 'Elements'),\n editor: TreeNavigationEditor,\n settings: { scene, layer: scene.currentLayer, selected },\n });\n\n const ctx = { ...context, options };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/consistent-type-assertions\n optionBuilder.addBackground(builder as any, ctx);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/consistent-type-assertions\n optionBuilder.addBorder(builder as any, ctx);\n\n if (currentLayer && !currentLayer.isRoot()) {\n builder.addCustomEditor({\n category: [t('canvas.layer-editor.category-layout', 'Layout')],\n id: 'content',\n path: '__', // not used\n name: t('canvas.layer-editor.name-constraints', 'Constraints'),\n editor: PlacementEditor,\n settings: {\n scene: opts.scene,\n element: currentLayer,\n },\n });\n }\n },\n };\n}\n","import { useState } from 'react';\n\nimport { Tab, TabsBar } from '@grafana/ui';\n\nimport { InlineEditTabs } from '../../types';\n\ntype Props = {\n onTabChange: (v: string) => void;\n};\n\nexport const TabsEditor = ({ onTabChange }: Props) => {\n const [activeTab, setActiveTab] = useState<string>(InlineEditTabs.SelectedElement);\n\n const tabs = [\n { label: 'Selected Element', value: InlineEditTabs.SelectedElement },\n { label: 'Element Management', value: InlineEditTabs.ElementManagement },\n ];\n\n const onCurrentTabChange = (value: string) => {\n onTabChange(value);\n setActiveTab(value);\n };\n\n return (\n <>\n <TabsBar>\n {tabs.map((t, index) => (\n <Tab\n key={`${t.value}-${index}`}\n label={t.label}\n active={t.value === activeTab}\n onChangeTab={() => onCurrentTabChange(t.value!)}\n />\n ))}\n </TabsBar>\n </>\n );\n};\n","import { css } from '@emotion/css';\nimport { get as lodashGet } from 'lodash';\nimport { useMemo, useState } from 'react';\nimport { useObservable } from 'react-use';\n\nimport { DataFrame, GrafanaTheme2, PanelOptionsEditorBuilder, StandardEditorContext } from '@grafana/data';\nimport { NestedValueAccess, PanelOptionsSupplier } from '@grafana/data/internal';\nimport { Trans, t } from '@grafana/i18n';\nimport { useStyles2 } from '@grafana/ui';\nimport { AddLayerButton } from 'app/core/components/Layers/AddLayerButton';\nimport { FrameState } from 'app/features/canvas/runtime/frame';\nimport { OptionsPaneCategory } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategory';\nimport { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor';\nimport { fillOptionsPaneItems } from 'app/features/dashboard/components/PanelEditor/getVisualizationOptions';\nimport { setOptionImmutably } from 'app/features/dashboard/components/PanelEditor/utils';\n\nimport { activePanelSubject, InstanceState } from '../../CanvasPanel';\nimport { addStandardCanvasEditorOptions } from '../../module';\nimport { Options } from '../../panelcfg.gen';\nimport { InlineEditTabs } from '../../types';\nimport { getElementTypes, onAddItem } from '../../utils';\nimport { getConnectionEditor } from '../connectionEditor';\nimport { getElementEditor } from '../element/elementEditor';\nimport { getLayerEditor } from '../layer/layerEditor';\n\nimport { TabsEditor } from './TabsEditor';\n\nexport function InlineEditBody() {\n const activePanel = useObservable(activePanelSubject);\n const instanceState = activePanel?.panel.context?.instanceState;\n const styles = useStyles2(getStyles);\n\n const [activeTab, setActiveTab] = useState<string>(InlineEditTabs.SelectedElement);\n\n const pane = useMemo(() => {\n const p = activePanel?.panel;\n const state: InstanceState = instanceState;\n if (!(state && state.scene) || !p) {\n return new OptionsPaneCategoryDescriptor({ id: 'root', title: 'root' });\n }\n\n const supplier = (builder: PanelOptionsEditorBuilder<Options>) => {\n if (activeTab === InlineEditTabs.ElementManagement) {\n builder.addNestedOptions(getLayerEditor(instanceState));\n }\n\n const selectedConnection = state.selectedConnection;\n if (selectedConnection && activeTab === InlineEditTabs.SelectedElement) {\n builder.addNestedOptions(\n getConnectionEditor({\n category: [`Selected connection`],\n connection: selectedConnection,\n scene: state.scene,\n })\n );\n }\n\n const selection = state.selected;\n if (selection?.length === 1 && activeTab === InlineEditTabs.SelectedElement) {\n const element = selection[0];\n if (element && !(element instanceof FrameState)) {\n builder.addNestedOptions(\n getElementEditor({\n category: [\n t('canvas.inline-edit-body.category-selected-element', 'Selected element ({{element}})', {\n element: element.options.name,\n }),\n ],\n element,\n scene: state.scene,\n })\n );\n }\n }\n\n addStandardCanvasEditorOptions(builder);\n };\n\n return getOptionsPaneCategoryDescriptor(\n {\n options: p.props.options,\n onChange: p.props.onOptionsChange,\n data: p.props.data?.series,\n },\n supplier\n );\n }, [instanceState, activePanel, activeTab]);\n\n const topLevelItemsContainerStyle = {\n marginLeft: 15,\n marginTop: 10,\n };\n\n const onTabChange = (tab: string) => {\n setActiveTab(tab);\n };\n\n const typeOptions = getElementTypes(instanceState?.scene.shouldShowAdvancedTypes).options;\n const rootLayer: FrameState | undefined = instanceState?.layer;\n\n const noElementSelected =\n instanceState &&\n activeTab === InlineEditTabs.SelectedElement &&\n instanceState.selected.length === 0 &&\n instanceState.selectedConnection === undefined;\n\n return (\n <>\n <div style={topLevelItemsContainerStyle}>{pane.items.map((item) => item.render())}</div>\n <div style={topLevelItemsContainerStyle}>\n <AddLayerButton\n onChange={(sel) => onAddItem(sel, rootLayer)}\n options={typeOptions}\n label={t('canvas.inline-edit-body.label-add-item', 'Add item')}\n />\n </div>\n <div style={topLevelItemsContainerStyle}>\n <TabsEditor onTabChange={onTabChange} />\n {pane.categories.map((p) => renderOptionsPaneCategoryDescriptor(p))}\n {noElementSelected && (\n <div className={styles.selectElement}>\n <Trans i18nKey=\"canvas.inline-edit-body.please-select-an-element\">Please select an element</Trans>\n </div>\n )}\n </div>\n </>\n );\n}\n\n// Recursively render options\nfunction renderOptionsPaneCategoryDescriptor(pane: OptionsPaneCategoryDescriptor) {\n return (\n <OptionsPaneCategory {...pane.props} key={pane.props.id}>\n <div>{pane.items.map((v) => v.render())}</div>\n {pane.categories.map((c) => renderOptionsPaneCategoryDescriptor(c))}\n </OptionsPaneCategory>\n );\n}\n\ninterface EditorProps<T> {\n onChange: (v: T) => void;\n options: T;\n data?: DataFrame[];\n}\n\nfunction getOptionsPaneCategoryDescriptor<T extends object>(\n props: EditorProps<T>,\n supplier: PanelOptionsSupplier<T>\n): OptionsPaneCategoryDescriptor {\n const context: StandardEditorContext<unknown, unknown> = {\n data: props.data ?? [],\n options: props.options,\n };\n\n const root = new OptionsPaneCategoryDescriptor({ id: 'root', title: 'root' });\n const getOptionsPaneCategory = (categoryNames?: string[]): OptionsPaneCategoryDescriptor => {\n if (categoryNames?.length) {\n const key = categoryNames[0];\n let sub = root.categories.find((v) => v.props.id === key);\n if (!sub) {\n sub = new OptionsPaneCategoryDescriptor({ id: key, title: key });\n root.categories.push(sub);\n }\n return sub;\n }\n return root;\n };\n\n const access: NestedValueAccess = {\n getValue: (path) => lodashGet(props.options, path),\n onChange: (path, value) => {\n props.onChange(setOptionImmutably<T>(props.options, path, value));\n },\n };\n\n // Use the panel options loader\n fillOptionsPaneItems('canvas-inline', supplier, access, getOptionsPaneCategory, context);\n return root;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n selectElement: css({\n color: theme.colors.text.secondary,\n padding: theme.spacing(2),\n }),\n});\n","import { css } from '@emotion/css';\nimport { SyntheticEvent, useEffect, useRef, useState } from 'react';\nimport Draggable, { DraggableEventHandler } from 'react-draggable';\nimport { Resizable, ResizeCallbackData } from 'react-resizable';\n\nimport { Dimensions2D, GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { IconButton, Portal, useStyles2 } from '@grafana/ui';\nimport store from 'app/core/store';\nimport { Scene } from 'app/features/canvas/runtime/scene';\n\nimport { InlineEditBody } from './InlineEditBody';\n\ntype Props = {\n onClose?: () => void;\n id: number;\n scene: Scene;\n};\n\nconst OFFSET_X = 10;\nconst OFFSET_Y = 32;\n\nexport function InlineEdit({ onClose, id, scene }: Props) {\n const root = scene.root.div?.getBoundingClientRect();\n const windowHeight = window.innerHeight;\n const windowWidth = window.innerWidth;\n const ref = useRef<HTMLDivElement>(null);\n const styles = useStyles2(getStyles);\n const inlineEditKey = 'inlineEditPanel' + id.toString();\n\n const defaultMeasurements = { width: 400, height: 400 };\n const widthOffset = root?.width ?? defaultMeasurements.width + OFFSET_X * 2;\n const defaultX = root?.x ?? 0 + widthOffset - defaultMeasurements.width - OFFSET_X;\n const defaultY = root?.y ?? 0 + OFFSET_Y;\n\n const savedPlacement = store.getObject(inlineEditKey, {\n x: defaultX,\n y: defaultY,\n w: defaultMeasurements.width,\n h: defaultMeasurements.height,\n });\n const [measurements, setMeasurements] = useState<Dimensions2D>({ width: savedPlacement.w, height: savedPlacement.h });\n const [placement, setPlacement] = useState({ x: savedPlacement.x, y: savedPlacement.y });\n\n // Checks that placement is within browser window\n useEffect(() => {\n const minX = windowWidth - measurements.width - OFFSET_X;\n const minY = windowHeight - measurements.height - OFFSET_Y;\n if (minX < placement.x && minX > 0) {\n setPlacement({ ...placement, x: minX });\n }\n if (minY < placement.y && minY > 0) {\n setPlacement({ ...placement, y: minY });\n }\n }, [windowHeight, windowWidth, placement, measurements]);\n\n const onDragStop: DraggableEventHandler = (event, dragElement) => {\n let x = dragElement.x < 0 ? 0 : dragElement.x;\n let y = dragElement.y < 0 ? 0 : dragElement.y;\n\n setPlacement({ x: x, y: y });\n saveToStore(x, y, measurements.width, measurements.height);\n };\n\n const onResizeStop = (event: SyntheticEvent<Element, Event>, data: ResizeCallbackData) => {\n const { size } = data;\n setMeasurements({ width: size.width, height: size.height });\n saveToStore(placement.x, placement.y, size.width, size.height);\n };\n\n const saveToStore = (x: number, y: number, width: number, height: number) => {\n store.setObject(inlineEditKey, { x: x, y: y, w: width, h: height });\n };\n\n return (\n <Portal>\n <div className={styles.draggableWrapper}>\n <Draggable handle=\"strong\" onStop={onDragStop} position={{ x: placement.x, y: placement.y }}>\n <Resizable height={measurements.height} width={measurements.width} onResize={onResizeStop}>\n <div\n className={styles.inlineEditorContainer}\n style={{ height: `${measurements.height}px`, width: `${measurements.width}px` }}\n ref={ref}\n >\n <strong className={styles.inlineEditorHeader}>\n <div className={styles.placeholder} />\n <div>\n <Trans i18nKey=\"canvas.inline-edit.canvas-inline-editor\">Canvas Inline Editor</Trans>\n </div>\n <IconButton\n name=\"times\"\n size=\"xl\"\n className={styles.inlineEditorClose}\n onClick={onClose}\n tooltip={t('canvas.inline-edit.tooltip-close-inline-editor', 'Close inline editor')}\n />\n </strong>\n <div className={styles.inlineEditorContentWrapper}>\n <div className={styles.inlineEditorContent}>\n <InlineEditBody />\n </div>\n </div>\n </div>\n </Resizable>\n </Draggable>\n </div>\n </Portal>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n inlineEditorContainer: css({\n display: 'flex',\n flexDirection: 'column',\n background: theme.components.panel.background,\n border: `1px solid ${theme.colors.border.weak}`,\n boxShadow: theme.shadows.z3,\n zIndex: 1000,\n opacity: 1,\n minWidth: '400px',\n }),\n draggableWrapper: css({\n width: 0,\n height: 0,\n }),\n inlineEditorHeader: css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: theme.colors.background.canvas,\n borderBottom: `1px solid ${theme.colors.border.weak}`,\n height: '40px',\n cursor: 'move',\n }),\n inlineEditorContent: css({\n whiteSpace: 'pre-wrap',\n padding: '10px',\n }),\n inlineEditorClose: css({\n marginLeft: 'auto',\n }),\n placeholder: css({\n width: '24px',\n height: '24px',\n visibility: 'hidden',\n marginRight: 'auto',\n }),\n inlineEditorContentWrapper: css({\n overflow: 'scroll',\n }),\n});\n","import * as React from 'react';\nimport { Component } from 'react';\nimport { ReplaySubject, Subscription } from 'rxjs';\n\nimport { PanelProps } from '@grafana/data';\nimport { locationService } from '@grafana/runtime';\nimport { PanelContext, PanelContextRoot } from '@grafana/ui';\nimport { CanvasFrameOptions } from 'app/features/canvas/frame';\nimport { ElementState } from 'app/features/canvas/runtime/element';\nimport { Scene } from 'app/features/canvas/runtime/scene';\nimport { PanelEditEnteredEvent, PanelEditExitedEvent } from 'app/types/events';\n\nimport { SetBackground } from './components/SetBackground';\nimport { InlineEdit } from './editor/inline/InlineEdit';\nimport { Options } from './panelcfg.gen';\nimport { AnchorPoint, CanvasTooltipPayload, ConnectionState } from './types';\n\ninterface Props extends PanelProps<Options> {}\n\ninterface State {\n refresh: number;\n openInlineEdit: boolean;\n openSetBackground: boolean;\n contextMenuAnchorPoint: AnchorPoint;\n moveableAction: boolean;\n}\n\nexport interface InstanceState {\n scene: Scene;\n selected: ElementState[];\n selectedConnection?: ConnectionState;\n}\n\nexport interface SelectionAction {\n panel: CanvasPanel;\n}\n\nlet canvasInstances: CanvasPanel[] = [];\nlet activeCanvasPanel: CanvasPanel | undefined = undefined;\nlet isInlineEditOpen = false;\nlet isSetBackgroundOpen = false;\n\nexport const activePanelSubject = new ReplaySubject<SelectionAction>(1);\n\nexport class CanvasPanel extends Component<Props, State> {\n declare context: React.ContextType<typeof PanelContextRoot>;\n static contextType = PanelContextRoot;\n panelContext: PanelContext | undefined;\n\n readonly scene: Scene;\n private subs = new Subscription();\n private queryEditorLoaded = false;\n needsReload = false;\n isEditing = locationService.getSearchObject().editPanel !== undefined;\n\n constructor(props: Props) {\n super(props);\n this.state = {\n refresh: 0,\n openInlineEdit: false,\n openSetBackground: false,\n contextMenuAnchorPoint: { x: 0, y: 0 },\n moveableAction: false,\n };\n\n // Only the initial options are ever used.\n // later changes are all controlled by the scene\n this.scene = new Scene(this.props.options, this.onUpdateScene, this);\n this.scene.updateSize(props.width, props.height);\n this.scene.updateData(props.data);\n this.scene.inlineEditingCallback = this.openInlineEdit;\n this.scene.setBackgroundCallback = this.openSetBackground;\n this.scene.tooltipCallback = this.tooltipCallback;\n this.scene.moveableActionCallback = this.moveableActionCallback;\n this.scene.actionConfirmationCallback = this.actionConfirmationCallback;\n\n this.subs.add(\n this.props.eventBus.subscribe(PanelEditEnteredEvent, (evt: PanelEditEnteredEvent) => {\n // Remove current selection when entering edit mode for any panel in dashboard\n this.scene.clearCurrentSelection();\n this.closeInlineEdit();\n })\n );\n\n this.subs.add(\n this.props.eventBus.subscribe(PanelEditExitedEvent, (evt: PanelEditExitedEvent) => {\n if (this.props.id === evt.payload) {\n this.needsReload = true;\n this.scene.clearCurrentSelection();\n }\n })\n );\n }\n\n componentDidMount() {\n activeCanvasPanel = this;\n activePanelSubject.next({ panel: this });\n\n this.panelContext = this.context;\n\n if (this.scene.data) {\n this.scene.updateData(this.scene.data);\n }\n\n if (this.panelContext.onInstanceStateChange) {\n this.panelContext.onInstanceStateChange({ scene: this.scene, layer: this.scene.root });\n\n this.subs.add(\n this.scene.selection.subscribe({\n next: (v) => {\n if (v.length) {\n activeCanvasPanel = this;\n activePanelSubject.next({ panel: this });\n }\n\n canvasInstances.forEach((canvasInstance) => {\n if (canvasInstance !== activeCanvasPanel) {\n canvasInstance.scene.clearCurrentSelection(true);\n canvasInstance.scene.connections.select(undefined);\n }\n });\n\n this.panelContext?.onInstanceStateChange!({ scene: this.scene, selected: v, layer: this.scene.root });\n },\n })\n );\n\n this.subs.add(\n this.scene.connections.selection.subscribe({\n next: (v) => {\n if (!this.context.instanceState) {\n return;\n }\n\n this.panelContext?.onInstanceStateChange!({\n scene: this.scene,\n selected: this.context.instanceState.selected,\n selectedConnection: v,\n layer: this.scene.root,\n });\n\n if (v) {\n activeCanvasPanel = this;\n activePanelSubject.next({ panel: this });\n }\n\n canvasInstances.forEach((canvasInstance) => {\n if (canvasInstance !== activeCanvasPanel) {\n canvasInstance.scene.clearCurrentSelection(true);\n canvasInstance.scene.connections.select(undefined);\n }\n });\n\n setTimeout(() => {\n this.forceUpdate();\n });\n },\n })\n );\n }\n\n // Reset the size update flag when entering edit mode\n if (this.isEditing) {\n this.queryEditorLoaded = false;\n }\n\n canvasInstances.push(this);\n }\n\n componentDidUpdate(prevProps: Props) {\n // Check if we're in edit mode and dimensions have changed (indicating query editor loaded)\n if (this.isEditing && !this.queryEditorLoaded) {\n const dimensionsChanged = prevProps.width !== this.props.width || prevProps.height !== this.props.height;\n\n if (dimensionsChanged) {\n this.queryEditorLoaded = true;\n // Small delay to ensure layout is completely settled\n requestAnimationFrame(() => {\n this.scene.updateSize(this.props.width, this.props.height);\n });\n }\n }\n }\n\n componentWillUnmount() {\n this.scene.subscription.unsubscribe();\n this.subs.unsubscribe();\n isInlineEditOpen = false;\n isSetBackgroundOpen = false;\n canvasInstances = canvasInstances.filter((ci) => ci.props.id !== activeCanvasPanel?.props.id);\n }\n\n // NOTE, all changes to the scene flow through this function\n // even the editor gets current state from the same scene instance!\n onUpdateScene = (root: CanvasFrameOptions) => {\n const { onOptionsChange, options } = this.props;\n onOptionsChange({ ...options, root });\n\n this.setState({ refresh: this.state.refresh + 1 });\n activePanelSubject.next({ panel: this });\n };\n\n shouldComponentUpdate(nextProps: Props, nextState: State) {\n const { width, height, data, options } = this.props;\n let changed = false;\n\n if (width !== nextProps.width || height !== nextProps.height) {\n this.scene.updateSize(nextProps.width, nextProps.height);\n changed = true;\n }\n\n if (data !== nextProps.data && !this.scene.ignoreDataUpdate) {\n this.scene.updateData(nextProps.data);\n changed = true;\n }\n\n if (options !== nextProps.options && !this.scene.ignoreDataUpdate) {\n this.scene.updateData(nextProps.data);\n changed = true;\n }\n\n if (this.state.refresh !== nextState.refresh) {\n changed = true;\n }\n\n if (this.state.openInlineEdit !== nextState.openInlineEdit) {\n changed = true;\n }\n\n if (this.state.openSetBackground !== nextState.openSetBackground) {\n changed = true;\n }\n\n if (this.state.moveableAction !== nextState.moveableAction) {\n changed = true;\n }\n\n // After editing, the options are valid, but the scene was in a different panel or inline editing mode has changed\n const inlineEditingSwitched = this.props.options.inlineEditing !== nextProps.options.inlineEditing;\n const shouldShowAdvancedTypesSwitched =\n this.props.options.showAdvancedTypes !== nextProps.options.showAdvancedTypes;\n const panZoomSwitched = this.props.options.panZoom !== nextProps.options.panZoom;\n const zoomToContentSwitched = this.props.options.zoomToContent !== nextProps.options.zoomToContent;\n const tooltipModeSwitched = this.props.options.tooltip?.mode !== nextProps.options.tooltip?.mode;\n const tooltipDisableForOneClickSwitched =\n this.props.options.tooltip?.disableForOneClick !== nextProps.options.tooltip?.disableForOneClick;\n if (\n this.needsReload ||\n inlineEditingSwitched ||\n shouldShowAdvancedTypesSwitched ||\n panZoomSwitched ||\n zoomToContentSwitched ||\n tooltipModeSwitched ||\n tooltipDisableForOneClickSwitched\n ) {\n if (inlineEditingSwitched) {\n // Replace scene div to prevent selecto instance leaks\n this.scene.revId++;\n }\n\n this.needsReload = false;\n this.scene.load(nextProps.options, nextProps.options.inlineEditing);\n this.scene.updateSize(nextProps.width, nextProps.height);\n this.scene.updateData(nextProps.data);\n changed = true;\n }\n\n return changed;\n }\n\n openInlineEdit = () => {\n if (isInlineEditOpen) {\n this.forceUpdate();\n this.setActivePanel();\n return;\n }\n\n this.setActivePanel();\n this.setState({ openInlineEdit: true });\n isInlineEditOpen = true;\n };\n\n openSetBackground = (anchorPoint: AnchorPoint) => {\n if (isSetBackgroundOpen) {\n this.forceUpdate();\n this.setActivePanel();\n return;\n }\n\n this.setActivePanel();\n this.setState({ openSetBackground: true });\n this.setState({ contextMenuAnchorPoint: anchorPoint });\n\n isSetBackgroundOpen = true;\n };\n\n tooltipCallback = (tooltip: CanvasTooltipPayload | undefined) => {\n this.scene.tooltipPayload = tooltip;\n this.forceUpdate();\n };\n\n moveableActionCallback = (updated: boolean) => {\n this.setState({ moveableAction: updated });\n this.forceUpdate();\n };\n\n actionConfirmationCallback = () => {\n this.forceUpdate();\n };\n\n closeInlineEdit = () => {\n this.setState({ openInlineEdit: false });\n isInlineEditOpen = false;\n };\n\n closeSetBackground = () => {\n this.setState({ openSetBackground: false });\n isSetBackgroundOpen = false;\n };\n\n setActivePanel = () => {\n activeCanvasPanel = this;\n activePanelSubject.next({ panel: this });\n };\n\n renderInlineEdit = () => {\n return <InlineEdit onClose={() => this.closeInlineEdit()} id={this.props.id} scene={this.scene} />;\n };\n\n renderSetBackground = () => {\n return (\n <SetBackground\n onClose={() => this.closeSetBackground()}\n scene={this.scene}\n anchorPoint={this.state.contextMenuAnchorPoint}\n />\n );\n };\n\n render() {\n return (\n <>\n {this.scene.render()}\n {this.state.openInlineEdit && this.renderInlineEdit()}\n {this.state.openSetBackground && this.renderSetBackground()}\n </>\n );\n }\n}\n","import { css } from '@emotion/css';\n\nimport { StandardEditorProps, GrafanaTheme2 } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Alert, Icon, Stack, useStyles2 } from '@grafana/ui';\n\nconst helpUrl = 'https://grafana.com/docs/grafana/latest/panels-visualizations/visualizations/canvas/';\n\nexport const PanZoomHelp = ({}: StandardEditorProps<string, unknown, unknown, unknown>) => {\n const styles = useStyles2(getStyles);\n\n return (\n <>\n <Stack direction=\"row\">\n <Alert\n title={t('canvas.pan-zoom-help.title-pan-and-zoom-controls', 'Pan and zoom controls')}\n severity=\"info\"\n buttonContent={<Icon name=\"question-circle\" size=\"xl\" />}\n className={styles.alert}\n onRemove={() => {\n const newWindow = window.open(helpUrl, '_blank', 'noopener,noreferrer');\n if (newWindow) {\n newWindow.opener = null;\n }\n }}\n >\n <Stack direction=\"column\">\n <ul>\n <li>\n <Trans i18nKey=\"canvas.pan-zoom-help.pan-title\">Pan:</Trans>\n <ul>\n <li>\n <Trans i18nKey=\"canvas.pan-zoom-help.middle-mouse\">Middle mouse</Trans>\n </li>\n <li>\n <Trans i18nKey=\"canvas.pan-zoom-help.ctrl-right-mouse\">CTRL + right mouse</Trans>\n </li>\n </ul>\n </li>\n <li>\n <Trans i18nKey=\"canvas.pan-zoom-help.zoom-scroll-wheel\">Zoom: Scroll wheel</Trans>\n </li>\n <li>\n <Trans i18nKey=\"canvas.pan-zoom-help.reset-double-click\">Reset: Double click</Trans>\n </li>\n </ul>\n </Stack>\n </Alert>\n </Stack>\n </>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n alert: css({\n '& div': { padding: '4px', alignItems: 'start' },\n marginBottom: '0px',\n marginTop: '5px',\n padding: '2px',\n 'ul > li': { marginLeft: '10px' },\n }),\n});\n","import { PanelModel, OneClickMode } from '@grafana/data';\n\nimport { Options } from './panelcfg.gen';\n\nexport const canvasMigrationHandler = (panel: PanelModel): Partial<Options> => {\n const pluginVersion = panel?.pluginVersion ?? '';\n\n // Rename text-box to rectangle\n // Initial plugin version is empty string for first migration\n if (pluginVersion === '') {\n const root = panel.options?.root;\n if (root?.elements) {\n for (const element of root.elements) {\n if (element.type === 'text-box') {\n element.type = 'rectangle';\n }\n }\n }\n }\n\n if (pluginVersion.startsWith('11.0')) {\n // Migration for v11.0 for ellipse element refactor: https://github.com/grafana/grafana/pull/84205\n const root = panel.options?.root;\n if (root?.elements) {\n for (const element of root.elements) {\n if (element.type === 'ellipse') {\n // Take existing ellipse specific background and border config and apply it to the element's general background and border config\n if (element.config.backgroundColor) {\n element.background = element.config.backgroundColor;\n delete element.config.backgroundColor;\n }\n if (element.config.borderColor) {\n element.border.color = element.config.borderColor;\n delete element.config.borderColor;\n }\n if (element.config.width) {\n element.border.width = element.config.width;\n delete element.config.width;\n }\n }\n }\n }\n }\n\n if (parseFloat(pluginVersion) <= 11.3) {\n const root = panel.options?.root;\n if (root?.elements) {\n for (const element of root.elements) {\n // migrate action options to new format (fetch)\n if (element.actions) {\n for (const action of element.actions) {\n if (action.options) {\n action.fetch = { ...action.options };\n delete action.options;\n }\n }\n }\n }\n }\n }\n\n // migrate oneClickMode to first link/action oneClick\n if (parseFloat(pluginVersion) <= 11.6) {\n const root = panel.options?.root;\n if (root?.elements) {\n for (const element of root.elements) {\n if ((element.oneClickMode === OneClickMode.Link || element.oneClickLinks) && element.links?.length) {\n element.links[0].oneClick = true;\n } else if (element.oneClickMode === OneClickMode.Action && element.actions?.length) {\n element.actions[0].oneClick = true;\n }\n\n delete element.oneClickMode;\n delete element.oneClickLinks;\n }\n }\n }\n\n // migrate connection direction\n if (parseFloat(pluginVersion) <= 12.2) {\n const root = panel.options?.root;\n if (root?.elements) {\n for (const element of root.elements) {\n for (const connection of element.connections || []) {\n if (connection.direction && typeof connection.direction === 'string') {\n // convert old direction to new format\n connection.direction = {\n mode: 'fixed',\n fixed: connection.direction,\n };\n } else if (!connection.direction) {\n connection.direction = {\n mode: 'fixed',\n fixed: 'forward',\n };\n }\n }\n }\n }\n }\n\n return panel.options;\n};\n","import { FieldConfigProperty, PanelOptionsEditorBuilder, PanelPlugin } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { TooltipDisplayMode } from '@grafana/schema/dist/esm/common/common.gen';\nimport { FrameState } from 'app/features/canvas/runtime/frame';\n\nimport { CanvasPanel, InstanceState } from './CanvasPanel';\nimport { getConnectionEditor } from './editor/connectionEditor';\nimport { getElementEditor } from './editor/element/elementEditor';\nimport { getLayerEditor } from './editor/layer/layerEditor';\nimport { PanZoomHelp } from './editor/panZoomHelp';\nimport { canvasMigrationHandler } from './migrations';\nimport { Options } from './panelcfg.gen';\n\nexport const addStandardCanvasEditorOptions = (builder: PanelOptionsEditorBuilder<Options>) => {\n let category = [t('canvas.category-canvas', 'Canvas')];\n builder.addBooleanSwitch({\n path: 'inlineEditing',\n name: t('canvas.name-inline-editing', 'Inline editing'),\n category,\n description: t('canvas.description-inline-editing', 'Enable editing the panel directly'),\n defaultValue: true,\n });\n\n builder.addBooleanSwitch({\n path: 'showAdvancedTypes',\n name: t('canvas.name-experimental-types', 'Experimental element types'),\n category,\n description: t('canvas.description-experimental-types', 'Enable selection of experimental element types'),\n defaultValue: true,\n });\n\n builder.addBooleanSwitch({\n path: 'panZoom',\n name: t('canvas.name-pan-zoom', 'Pan and zoom'),\n category,\n description: t('canvas.description-pan-zoom', 'Enable pan and zoom'),\n defaultValue: false,\n showIf: () => config.featureToggles.canvasPanelPanZoom,\n });\n builder.addCustomEditor({\n id: 'panZoomHelp',\n path: 'panZoomHelp',\n name: '',\n category,\n editor: PanZoomHelp,\n showIf: (opts) => config.featureToggles.canvasPanelPanZoom && opts.panZoom,\n });\n builder.addBooleanSwitch({\n path: 'zoomToContent',\n name: 'Zoom to content',\n description: 'Automatically zoom to fit content',\n defaultValue: false,\n showIf: () => config.featureToggles.canvasPanelPanZoom,\n });\n\n category = [t('canvas.category-tooltip', 'Tooltip')];\n\n builder.addRadio({\n path: 'tooltip.mode',\n name: t('canvas.tooltip-options.name-tooltip-mode', 'Tooltip mode'),\n category,\n defaultValue: TooltipDisplayMode.Single,\n settings: {\n options: [\n {\n value: TooltipDisplayMode.Single,\n label: t('canvas.tooltip-options.tooltip-mode-options.label-enabled', 'Enabled'),\n },\n {\n value: TooltipDisplayMode.None,\n label: t('canvas.tooltip-options.tooltip-mode-options.label-disabled', 'Disabled'),\n },\n ],\n },\n });\n\n builder.addBooleanSwitch({\n path: 'tooltip.disableForOneClick',\n name: t('canvas.tooltip-options.label-disable-one-click', 'Disable for one-click elements'),\n category,\n defaultValue: false,\n showIf: (options) => options.tooltip?.mode !== TooltipDisplayMode.None,\n });\n};\n\nexport const plugin = new PanelPlugin<Options>(CanvasPanel)\n .setNoPadding() // extend to panel edges\n .useFieldConfig({\n standardOptions: {\n [FieldConfigProperty.Mappings]: {\n settings: {\n icon: true,\n },\n },\n [FieldConfigProperty.Links]: {\n settings: {\n showOneClick: false,\n },\n },\n [FieldConfigProperty.Actions]: {\n settings: {\n showOneClick: false,\n },\n },\n },\n })\n .setMigrationHandler(canvasMigrationHandler, (panel) => {\n const pluginVersion = panel?.pluginVersion ?? '';\n return parseFloat(pluginVersion) <= 12.2;\n })\n .setPanelOptions((builder, context) => {\n const state: InstanceState = context.instanceState;\n\n addStandardCanvasEditorOptions(builder);\n\n if (state && state.scene) {\n builder.addNestedOptions(getLayerEditor(state));\n\n const selection = state.selected;\n const connectionSelection = state.selectedConnection;\n\n if (selection?.length === 1) {\n const element = selection[0];\n if (!(element instanceof FrameState)) {\n builder.addNestedOptions(\n getElementEditor({\n category: [\n t('canvas.category-selected-element', 'Selected element ({{element}})', {\n element: element.options.name,\n }),\n ],\n element,\n scene: state.scene,\n })\n );\n }\n }\n\n if (connectionSelection) {\n builder.addNestedOptions(\n getConnectionEditor({\n category: [t('canvas.category-selected-connection', 'Selected connection')],\n connection: connectionSelection,\n scene: state.scene,\n })\n );\n }\n }\n });\n","import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nimport { VizTooltipRow } from './VizTooltipRow';\nimport { VizTooltipItem } from './types';\n\ninterface Props {\n item: VizTooltipItem;\n isPinned: boolean;\n}\n\nexport const VizTooltipHeader = ({ item: { label, value, color, colorIndicator }, isPinned }: Props) => {\n const styles = useStyles2(getStyles);\n return (\n <div className={styles}>\n <VizTooltipRow\n label={label}\n value={value}\n color={color}\n colorIndicator={colorIndicator}\n marginRight={'22px'}\n isPinned={isPinned}\n />\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) =>\n css({\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n padding: theme.spacing(1),\n lineHeight: 1,\n });\n","import { css } from '@emotion/css';\nimport { CSSProperties, ReactNode } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\n\nimport { VizTooltipRow } from './VizTooltipRow';\nimport { VizTooltipItem } from './types';\n\ninterface VizTooltipContentProps {\n items: VizTooltipItem[];\n children?: ReactNode;\n scrollable?: boolean;\n isPinned: boolean;\n maxHeight?: number;\n}\n\nexport const VizTooltipContent = ({\n items,\n children,\n isPinned,\n scrollable = false,\n maxHeight,\n}: VizTooltipContentProps) => {\n const styles = useStyles2(getStyles);\n\n const scrollableStyle: CSSProperties = scrollable\n ? {\n maxHeight: maxHeight,\n overflowY: 'auto',\n }\n : {};\n\n return (\n <div className={styles.wrapper} style={scrollableStyle}>\n {items.map(({ label, value, color, colorIndicator, colorPlacement, isActive, lineStyle, isHiddenFromViz }, i) => (\n <VizTooltipRow\n key={i}\n label={label}\n value={value}\n color={color}\n colorIndicator={colorIndicator}\n colorPlacement={colorPlacement}\n isActive={isActive}\n isPinned={isPinned}\n lineStyle={lineStyle}\n showValueScroll={!scrollable}\n isHiddenFromViz={isHiddenFromViz}\n />\n ))}\n {children}\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n gap: 2,\n borderTop: `1px solid ${theme.colors.border.weak}`,\n padding: theme.spacing(1),\n }),\n});\n","import { css, cx } from '@emotion/css';\n\nimport { FALLBACK_COLOR, GrafanaTheme2 } from '@grafana/data';\nimport { LineStyle } from '@grafana/schema';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { SeriesIcon } from '../VizLegend/SeriesIcon';\n\nimport { ColorIndicator, DEFAULT_COLOR_INDICATOR } from './types';\nimport { getColorIndicatorClass } from './utils';\n\nexport enum ColorIndicatorPosition {\n Leading,\n Trailing,\n}\n\ninterface Props {\n color?: string;\n colorIndicator?: ColorIndicator;\n position?: ColorIndicatorPosition;\n lineStyle?: LineStyle;\n isHollow?: boolean;\n}\n\nexport type ColorIndicatorStyles = ReturnType<typeof getStyles>;\n\nexport const VizTooltipColorIndicator = ({\n color = FALLBACK_COLOR,\n colorIndicator = DEFAULT_COLOR_INDICATOR,\n position = ColorIndicatorPosition.Leading,\n lineStyle,\n isHollow,\n}: Props) => {\n const styles = useStyles2(getStyles);\n\n if (colorIndicator === ColorIndicator.series && !isHollow) {\n return (\n <SeriesIcon\n color={color}\n lineStyle={lineStyle}\n noMargin\n className={cx(\n position === ColorIndicatorPosition.Leading ? styles.leading : styles.trailing,\n styles.seriesIndicator\n )}\n />\n );\n }\n\n return (\n <div\n style={isHollow ? { border: `1px solid ${color}` } : { backgroundColor: color }}\n className={cx(\n position === ColorIndicatorPosition.Leading ? styles.leading : styles.trailing,\n getColorIndicatorClass(colorIndicator, styles)\n )}\n />\n );\n};\n\n// @TODO Update classes/add svgs\nconst getStyles = (theme: GrafanaTheme2) => ({\n leading: css({\n marginRight: theme.spacing(0.5),\n }),\n trailing: css({\n marginLeft: theme.spacing(0.5),\n }),\n seriesIndicator: css({\n position: 'relative',\n top: -2, // half the height of the color indicator, since the top is aligned with flex center.\n }),\n series: css({\n width: '14px',\n height: '4px',\n borderRadius: theme.shape.radius.pill,\n minWidth: '14px',\n }),\n value: css({\n width: '12px',\n height: '12px',\n borderRadius: theme.shape.radius.default,\n fontWeight: 500,\n minWidth: '12px',\n }),\n hexagon: css({}),\n pie_1_4: css({}),\n pie_2_4: css({}),\n pie_3_4: css({}),\n marker_sm: css({\n width: '4px',\n height: '4px',\n borderRadius: theme.shape.radius.circle,\n minWidth: '4px',\n }),\n marker_md: css({\n width: '8px',\n height: '8px',\n borderRadius: theme.shape.radius.circle,\n minWidth: '8px',\n }),\n marker_lg: css({\n width: '12px',\n height: '12px',\n borderRadius: theme.shape.radius.circle,\n minWidth: '12px',\n }),\n});\n","import { css } from '@emotion/css';\nimport clsx from 'clsx';\nimport { CSSProperties, ReactNode, useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { InlineToast } from '../InlineToast/InlineToast';\nimport { Tooltip } from '../Tooltip/Tooltip';\n\nimport { ColorIndicatorPosition, VizTooltipColorIndicator } from './VizTooltipColorIndicator';\nimport { ColorPlacement, VizTooltipItem } from './types';\n\ninterface VizTooltipRowProps extends Omit<VizTooltipItem, 'value'> {\n value: string | number | null | ReactNode;\n justify?: string;\n isActive?: boolean; // for series list\n marginRight?: string;\n isPinned: boolean;\n showValueScroll?: boolean;\n isHiddenFromViz?: boolean;\n}\n\nenum LabelValueTypes {\n label = 'label',\n value = 'value',\n}\n\nconst SUCCESSFULLY_COPIED_TEXT = 'Copied to clipboard';\nconst SHOW_SUCCESS_DURATION = 2 * 1000;\nconst HORIZONTAL_PX_PER_CHAR = 7;\nconst CAN_COPY = Boolean(navigator.clipboard && window.isSecureContext);\n\nexport const VizTooltipRow = ({\n label,\n value,\n color,\n colorIndicator,\n colorPlacement = ColorPlacement.first,\n justify,\n isActive = false,\n marginRight,\n isPinned,\n lineStyle,\n showValueScroll,\n isHiddenFromViz,\n}: VizTooltipRowProps) => {\n const styles = useStyles2(getStyles, justify, marginRight);\n\n const innerValueScrollStyle: CSSProperties = showValueScroll\n ? {\n maxHeight: 55,\n whiteSpace: 'wrap',\n wordBreak: 'break-word',\n overflowY: 'auto',\n }\n : {\n whiteSpace: 'pre-line',\n wordBreak: 'break-word',\n lineHeight: 1.2,\n };\n\n const [showLabelTooltip, setShowLabelTooltip] = useState(false);\n\n const [copiedText, setCopiedText] = useState<Record<string, string> | null>(null);\n const [showCopySuccess, setShowCopySuccess] = useState(false);\n\n const labelRef = useRef<null | HTMLDivElement>(null);\n const valueRef = useRef<null | HTMLDivElement>(null);\n\n useEffect(() => {\n let timeoutId: ReturnType<typeof setTimeout>;\n\n if (showCopySuccess) {\n timeoutId = setTimeout(() => {\n setShowCopySuccess(false);\n }, SHOW_SUCCESS_DURATION);\n }\n\n return () => {\n window.clearTimeout(timeoutId);\n };\n }, [showCopySuccess]);\n\n const copyToClipboard = async (text: string, type: LabelValueTypes) => {\n if (!CAN_COPY) {\n fallbackCopyToClipboard(text, type);\n return;\n }\n\n try {\n await navigator.clipboard.writeText(text);\n setCopiedText({ [`${type}`]: text });\n setShowCopySuccess(true);\n } catch (error) {\n setCopiedText(null);\n }\n };\n\n const fallbackCopyToClipboard = (text: string, type: LabelValueTypes) => {\n // Use a fallback method for browsers/contexts that don't support the Clipboard API.\n const textarea = document.createElement('textarea');\n labelRef.current?.appendChild(textarea);\n textarea.value = text;\n textarea.focus();\n textarea.select();\n try {\n const successful = document.execCommand('copy');\n if (successful) {\n setCopiedText({ [`${type}`]: text });\n setShowCopySuccess(true);\n }\n } catch (err) {\n console.error('Unable to copy to clipboard', err);\n }\n\n textarea.remove();\n };\n\n const onMouseEnterLabel = (event: React.MouseEvent<HTMLDivElement>) => {\n if (event.currentTarget.offsetWidth < event.currentTarget.scrollWidth) {\n setShowLabelTooltip(true);\n }\n };\n\n const onMouseLeaveLabel = () => setShowLabelTooltip(false);\n\n // if label is > 50% window width, try to put label/value pairs on new lines\n if (label.length * HORIZONTAL_PX_PER_CHAR > window.innerWidth / 2) {\n label = label.replaceAll('{', '{\\n ').replaceAll('}', '\\n}').replaceAll(', ', ',\\n ');\n }\n\n return (\n <div className={styles.contentWrapper}>\n {color && colorPlacement === ColorPlacement.first && (\n <div className={styles.colorWrapper}>\n <VizTooltipColorIndicator\n color={color}\n colorIndicator={colorIndicator}\n lineStyle={lineStyle}\n isHollow={isHiddenFromViz}\n />\n </div>\n )}\n {label && (\n <div className={styles.labelWrapper}>\n {!isPinned ? (\n <div className={clsx(styles.label, isActive ? styles.activeSeries : '')}>{label}</div>\n ) : (\n <>\n <Tooltip content={label} interactive={false} show={showLabelTooltip}>\n <>\n {showCopySuccess && copiedText?.label && (\n <InlineToast placement=\"top\" referenceElement={labelRef.current}>\n {SUCCESSFULLY_COPIED_TEXT}\n </InlineToast>\n )}\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}\n <div\n className={clsx(styles.label, isActive ? styles.activeSeries : '', CAN_COPY ? styles.copy : '')}\n onMouseEnter={onMouseEnterLabel}\n onMouseLeave={onMouseLeaveLabel}\n onClick={() => copyToClipboard(label, LabelValueTypes.label)}\n ref={labelRef}\n >\n {label}\n </div>\n </>\n </Tooltip>\n </>\n )}\n </div>\n )}\n\n <div className={styles.valueWrapper}>\n {color && colorPlacement === ColorPlacement.leading && (\n <VizTooltipColorIndicator\n color={color}\n colorIndicator={colorIndicator}\n position={ColorIndicatorPosition.Leading}\n lineStyle={lineStyle}\n />\n )}\n\n {!isPinned ? (\n <div className={styles.value} style={innerValueScrollStyle}>\n {value}\n </div>\n ) : (\n <>\n {showCopySuccess && copiedText?.value && (\n <InlineToast placement=\"top\" referenceElement={valueRef.current}>\n {SUCCESSFULLY_COPIED_TEXT}\n </InlineToast>\n )}\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}\n <div\n className={clsx(styles.value, CAN_COPY ? styles.copy : '')}\n style={innerValueScrollStyle}\n onClick={() => copyToClipboard(value ? value.toString() : '', LabelValueTypes.value)}\n ref={valueRef}\n >\n {value}\n </div>\n </>\n )}\n\n {color && colorPlacement === ColorPlacement.trailing && (\n <VizTooltipColorIndicator\n color={color}\n colorIndicator={colorIndicator}\n position={ColorIndicatorPosition.Trailing}\n lineStyle={lineStyle}\n />\n )}\n </div>\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2, justify = 'start', marginRight?: string) => ({\n contentWrapper: css({\n display: 'flex',\n maxWidth: '100%',\n alignItems: 'start',\n justifyContent: justify,\n columnGap: theme.spacing(0.75),\n }),\n label: css({ display: 'inline' }),\n value: css({\n fontWeight: 500,\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n }),\n colorWrapper: css({\n alignSelf: 'center',\n flexShrink: 0,\n }),\n labelWrapper: css({\n flexGrow: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n color: theme.colors.text.secondary,\n fontWeight: 400,\n }),\n valueWrapper: css({\n display: 'flex',\n alignItems: 'center',\n flexShrink: 0,\n alignSelf: 'center',\n marginRight,\n }),\n activeSeries: css({\n fontWeight: theme.typography.fontWeightBold,\n color: theme.colors.text.maxContrast,\n }),\n copy: css({\n cursor: 'pointer',\n }),\n});\n"],"names":["NotFoundDisplay","config","notFoundItem","LayerActionID","InlineEditTabs","LineStyle","StrokeDasharray","ParamsEditor","value","onChange","paramName","setParamName","paramValue","setParamValue","changeParamValue","currentTarget","changeParamName","removeParam","key","updatedParams","param","addParam","newParams","e","a","b","isAddParamsDisabled","Stack","Input","IconButton","entry","callApi","api","updateLoadingStateCallback","request","getRequest","error","interpolateVariables","text","panel","endpoint","getEndpoint","url","requestHeaders","getData","name","data","sanitizedRelativeURL","dummyStringSettings","httpMethodOptions","contentTypeOptions","APIEditor","context","defaultApiConfig","onEndpointChange","onDataChange","onMethodChange","method","onContentTypeChange","contentType","formatCreateLabel","input","onQueryParamsChange","queryParams","onHeaderParamsChange","headerParams","renderJSON","json","JSONFormatter","renderTestAPIButton","Button","InlineFieldRow","InlineField","RadioButtonGroup","Select","Field","variantOptions","ButtonStyleEditor","defaultStyleConfig","onVariantChange","variant","ConnectionPath","ConnectionDirection","defaultBgColor","defaultTextColor","defaultLightTextColor","defaultThemeTextColor","QuickPlacement","Align","VAlign","ButtonDisplay","styles","getStyles","isLoading","setIsLoading","loading","onClick","Spinner","theme","buttonItem","options","dimensionContext","elementOptions","buttonConfig","getAPIConfig","builder","category","TextDimensionEditor","ColorDimensionEditor","cloudItem","props","uniqueId","textConfig","background","border","textTop","textLeft","textTransform","droneFrontItem","droneFrontTransformStyle","droneFrontConfig","ScalarDimensionEditor","droneSideItem","droneSidePitchTransformStyle","droneSideConfig","droneTopItem","fRightRotorAnimation","fLeftRotorAnimation","bRightRotorAnimation","bLeftRotorAnimation","droneTopTransformStyle","droneTopConfig","ellipseItem","svgStrokePathClass","IconDisplay","svgStyle","SanitizedSVG","iconItem","iconConfig","path","ResourceDimensionEditor","dummyFieldSettings","MetricValueDisplay","isSelected","scene","panelData","isEditMode","useObservable","of","getDisplayValue","fieldNotFound","fieldNames","MetricValueEdit","onFieldChange","field","selectedElement","FieldNamePicker","metricValueItem","parallelogramItem","RectangleDisplay","rectangleItem","ServerDatabase","getServerStyles","ServerSingle","ServerStack","ServerTerminal","ServerType","outlineColor","serverItem","serverConfig","TextDisplay","TextEdit","textRef","saveText","onKeyDown","event","onKeyUp","textValue","textItem","triangleItem","windTurbineItem","windTurbineAnimation","windTurbineConfig","DEFAULT_CANVAS_ELEMENT_CONFIG","defaultElementItems","advancedElementItems","canvasElementRegistry","Registry","counter","SVGElements","ElementState","item","parent","vars","target","hasHorizontalCenterConstraint","hasVerticalCenterConstraint","height","yOffset","rotationDelta","placement","calculatedRotation","style","deltaX","deltaY","dirLR","dirTB","rotationInRadians","originalDirLR","originalDirTB","primaryDataLink","primaryAction","getRowIndex","link","canExecuteActions","actionsDefaultFieldConfig","frames","defaultField","scopedVars","action","shouldDisableForOneClick","rect","ConfirmModal","onModalContinue","VariablesInputModal","fallbackName","newName","trav","disablePointerEvents","constraint","vertical","horizontal","translate","applyStyles","elementType","removeStyles","sceneWidth","sceneHeight","transformY","transformX","element","matrix","elementContainer","parentContainer","transformScale","parentBorderWidth","rotationTopOffset","rotationLeftOffset","rotationDegrees","rotationRadians","rotationOffset","calculateDelta","dimension1","dimension2","relativeTop","relativeBottom","relativeLeft","relativeRight","width","elementCenter","distanceFromCenter","elementRect","ctx","userCanExecuteActions","css","color","image","v","visitor","oldName","isConnectionTarget","getConnectionsByTarget","connection","div","doSelect","selection","FrameState","targetElements","getElementTypes","shouldShowAdvancedTypes","current","getElementTypesOptions","items","selectables","alpha","option","onAddItem","sel","rootLayer","anchorPoint","newItem","newElementOptions","newElement","isConnectionSource","sceneByName","getConnections","connections","c","index","updateConnectionsForSource","con","calculateCoordinates","sourceRect","parentRect","info","sourceHorizontalCenter","sourceVerticalCenter","x1","y1","x2","y2","targetRect","targetHorizontalCenter","targetVerticalCenter","parentHorizontalCenter","parentVerticalCenter","calculateCoordinates2","source","getRotatedConnectionPoint","targetDiv","getElementTransformAndDimensions","transform","x","y","rotation","getNormalizedRotatedOffset","left","top","centerX","centerY","dx","dy","rad","cos","sin","rotatedDx","rotatedDy","normalizedX","normalizedY","offsetX","offsetY","rotatedOffsetX","rotatedOffsetY","calculateMidpoint","calculateAbsoluteCoords","valueX","valueY","calculateAngle","calculateDistance","fieldName","getConnectionStyles","defaultArrowSize","defaultArrowDirection","defaultArrowColor","lastRowIndex","strokeColor","strokeWidth","strokeRadius","arrowDirection","lineStyle","getLineStyle","shouldAnimate","getParentBoundingClientRect","getElementFields","opts","fields","cfg","frame","RGB","RGBA","HSL","HSLA","COLOR_MODELS","FUNCTION","PROPERTY","ARRAY","OBJECT","STRING","NUMBER","UNDEFINED","IS_WINDOW","doc","prefixes","getCrossBrowserProperty","property","length","i","TRANSFORM","FILTER","ANIMATION","KEYFRAMES","OPEN_CLOSED_CHARACTERS","TINY_NUM","REVERSE_TINY_NUM","DEFAULT_UNIT_PRESETS","pos","size","__spreadArrays","s","il","k","j","jl","dot","a1","a2","b1","b2","isUndefined","isObject","isArray","isEqualSeparator","character","separator","isCharacterSpace","isSeparatorSpace","findOpen","openCharacter","texts","openCloseCharacters","isIgnore","findIgnore","findClose","otherText","closeCharacter","_loop_1","nextIndex","_a","open","out_i_1","state_1","splitText","splitOptions","_b","isSeparateFirst","isSeparateOnlyOpenClose","_c","isSeparateOpenClose","_d","openClosedText","close","regexText","regex","chr","values","tempValues","resetTemp","_loop_2","out_i_2","nextOpenCloseCharacters","state_2","splitSpace","splitComma","splitBracket","matches","splitUnit","prefix","unit","camelize","str","all","letter","letter2","toArray","now","findIndex","arr","callback","defaultIndex","findLastIndex","findLast","defalutValue","firstTime","raf","currTime","id","caf","handle","getKeys","obj","getValues","keys","sortOrders","orders","index1","index2","convertUnitSize","sizeFunction","between","min","max","checkBoundSize","targetSize","compareSize","isMax","ratio","throttle","defaultSize","throttledSize","calculateBoundSize","minSize","maxSize","keepRatio","minWidth","minHeight","maxWidth","maxHeight","sum","nums","total","getRad","pos1","pos2","distX","distY","getCenterPoint","points","getShapeDirection","center","pos1Rad","pos2Rad","num","reverseUnit","throttleArray","_","replaceOnce","fromText","toText","isOnce","args","_i","flat","prev","cur","deepFlat","elements","cutHex","hex","hexToRGBA","h","r","g","toFullHex","hslToRGBA","hsl","l","m","rgb","stringToRGBA","colorArr","$","selectors","multi","hasClass","className","addClass","removeClass","reg","fromCSS","properties","cssObject","getWindow","addEvent","el","type","listener","removeEvent","getDocument","getDocumentElement","getDocumentBody","isWindow","val","isNode","__assign","t","n","p","EventEmitter","__proto","eventName","events","_this","resolve","isStop","listeners","extendStatics","d","__extends","__","getRotatiion","touches","isMultiTouch","getEventClients","getClients","getClient","isMouseEvent","getPosition","clients","prevClients","startClients","getAverageClient","clientX","clientY","originalClientX","originalClientY","prevX","prevY","startX","startY","sumClient","minLength","client","ClientStore","isAdd","position","positions","movement","currentClient","prevClient","INPUT_TAGNAMES","Gesto","_super","targets","isTrusted","isDragAPI","container","pinchOutside","preventWheelClick","preventRightClick","preventDefault","checkInput","dragFocusedInput","preventClickEventOnDragStart","preventClickEventOnDrag","preventClickEventByCondition","useTouch","isDragStart","activeElement","tagName","hasInput","hasContentEditable","activeTagName","result","timer","isScroll","dragResult","isDrag","clientsLength","currentTime","isDouble","firstTarget","checkWindowBlur","passive_1","isCallDrag","inputEvent","store","nextClients","currentData","name_1","pinchThreshold","isPinch","isPrevDrag","isFirstDrag","storePosition","win","passive","prefixNames","classNames","prefixCSS","selector","refs","Properties","component","prototype","withMethods","methods","duplicate","propertyName","methodName","hash","stringHash","getHash","getShadowRoot","parentElement","rootNode","replaceStyle","trimmedSelector","subSelector","trimmedSubSelector","injectStyle","shadowRoot","styled","injectClassName","styleElement","count","injectCount","some","getUserAgent","agent","userAgent","execRegExp","pattern","hasUserAgentData","userAgentData","brands","findVersion","versionTest","convertVersion","findPreset","presets","userPreset","version","preset","findPresetBrand","brandInfo","findBrand","brand","BROWSER_PRESETS","CHROMIUM_PRESETS","WEBKIT_PRESETS","WEBVIEW_PRESETS","OS_PRESETS","parseUserAgentData","osData","isMobile","firstBrand","browser","os","chromiumBrand","webkitBrand","platform_1","browserBrand","parseUserAgent","nextAgent","browserPreset","browserVersion","osPreset","osVersion","chromiumPreset","webkitPreset","getAccurateAgent","agentInfo","__decorate","decorators","desc","__spreadArray","to","from","pack","ar","IS_SAFARI","PREFIX","WRAPPER_CLASS_NAME","SCROLL_AREA_CLASS_NAME","SCROLL_BAR_CLASS_NAME","HORIZONTAL_SCROLL_BAR_CLASS_NAME","VERTICAL_SCROLL_BAR_CLASS_NAME","SCROLL_THUMB_CLASS_NAME","injector","DEFAULT_OPTIONS","DEFAULT_EASING","NAMES","CLASS_NAME","PROPERTIES","OPTIONS","EVENTS","METHODS","measureSpeed","datas","time","prevSpeed","dt","getDuration","speed","normalSpeed","getDestPos","duration","abs","getRange","margin","range","threshold","isReal","checkDefault","defaultValue","startAnimation","timerCallback","easing","startTime","prevTime","next","prevRatio","ScrollBar","containerElement","isHorizontal","isThumb","thumbRect","thumbSize","clientPos","delta","thumbElement","barElement","isAbsolute","isDisplay","scrollSize","opacity","dirName1","sizeName","sizeP","posP","InfiniteViewer","_containerElement","viewportElement","containerWidth","containerHeight","viewportWidth","viewportHeight","viewportScrollWidth","viewportScrollHeight","scrollLeft","scrollTop","zoom","viewerScrollLeft","viewerScrollTop","pinchDirection","maxPinchWheel","isKeydown","sign","distance","scale","zoomX","zoomY","absolute","isZoom","prevZoomX","prevZoomY","zoomRange","_e","_f","zoomOffsetX","_g","zoomOffsetY","_h","zoomRangeX","zoomRangeY","nextZoomX","nextZoomY","zoomXPos","zoomYPos","deltaZoom","wrapperElement","scrollAreaElement","horizontalScrollElement","verticalScrollElement","horizontalBar","verticalBar","wheelContainerOption","wheelContainerElement","stop","observer_1","translateZ","rangeX","rangeY","useTransform","nextOffsetX","nextOffsetY","viewportStyle","scrollWidth","scrollHeight","scrollRangeX","scrollRangeY","displayVerticalScroll","displayHorizontalScroll","dest","distRatio","destPos","ratioX","ratioY","originalZoomOffsetX","originalZoomOffsetY","zoomOptions","zoomBase","nextScrollLeft","nextScrollTop","nextCenterX","nextCenterY","prevScrollLeft","prevScrollTop","nextScrollAbsoluteLeft","nextScrollAbsoluteTop","requestScrollLeft","requestScrollTop","coord","names","prevScrollPos","minCoord","maxCoord","scrollPos","scrollAreaSize","zoomCoord","minThreshold","maxThreshold","rangeCoord","rangeOffsetCoord","startRange","endRange","startMargin","endMargin","viewportSize","startSizeOffset","attributes","setter","InfiniteViewer$1","PolyMap","prevIndex","HashMap","SUPPORT_MAP","Link","prevLink","nextLink","orderChanged","changed","fixed","fromLinks","toLinks","fromLink","toLink","fromIndex","toIndex","Result","prevList","list","added","removed","maintained","changedBeforeAdded","ordered","pureChanged","fromBefore","toBefore","diff","findKeyCallback","mapClass","prevKeys","prevKeyMap","keyMap","removedMap","addedCount","removedCount","prevListIndex","listIndex","ListDiffer","newData","__rest","fillKeys","arr2","fillProps","defaultProps","isDiff","getAttributes","otherProps","splitProps","name_2","findContainerNode","provider","base","removeNode","node","parentNode","executeHooks","hooks","hook","renderFunctionComponent","hooksIndex","Provider","ref","ps","contexts","nextElement","nextState","isForceUpdate","self","currentDepth","scheduledContexts","scheduledSubs","isContextUpdate","nextChildSubs","childs","sub","depth","child","renderProviders","prevProps","setCurrentInstance","fr","getCurrentInstance","getHooksIndex","setHooksInex","nextHooksIndex","Component","state","prevState","isUpdate","PureComponent","createRef","refCallback","forwardRef","func","createComponent","contextValue","ComponentProvider","nextProps","isMount","contextType","template","nextContexts","ef","def","diffAttributes","attrs1","attrs2","diffObject","name_3","diffEvents","events1","events2","provier","name_4","name_5","keys1","keys2","diffStyle","style1","style2","beforeName","name_6","name_7","name_8","getNativeEventName","ElementProvider","isRemove","contextValues","containerNode","isSVG","prevAttributes","prevEvents","nextAttributes","nextEvents","name_9","findDOMNode","comp","providers","findNodeProvider","children","ContainerProvider","TextProvider","diffProviders","containerProvider","childrenKeys","childrenProvider","createProvider","childProvider","getNextSibiling","childProviders","providerClass","updatedHooks","hyd","updated","nodeProvider","renderProvider","isProvider","render","renderSelf","createContext","$_subs","Consumer","getContext","mainComponent","subs","Portal","createPortal","_renderToString","parentContexts","stringProps_1","styleName","styleValue","strings","renderToString","renderSelfToString","checkHookInfo","inst","prevHt","useMemo","defaultFunction","deps","useRef","useContext","contextId","providerComponent","useEffect","useState","st","nextValue","effect","unshift","effects","useImperativeHandle","add","inverseMatrix","startIndex","fromX","swap","iv","divide","ignoreDimension","newMatrix","invert","createIdentityMatrix","identityIndex","targetStartIndex","targetIndex","transpose","getOrigin","originMatrix","w","fromTranslation","convertPositionMatrix","convertDimension","multiplies","matrixes","multiply","matrix2","plus","nextPos","minus","convertCSStoMatrix","is2d","convertMatrixtoCSS","calculate","rotateX3d","rotateY3d","rotateZ3d","createRotateMatrix","scale3d","sx","sy","sz","rotate","translate3d","tx","ty","tz","matrix3d","matrix1","createScaleMatrix","createOriginMatrix","origin","createWarpMatrix","pos0","pos3","nextPos0","nextPos1","nextPos2","nextPos3","x0","y0","x3","y3","u0","v0","u1","v1","u2","v2","u3","v3","getCenter","createMatrix","parseMat","toMat","parse","getElementMatrix","calculateMatrixDist","res","getDistElementMatrix","matrixInfos","matrixFunction","functionValue","transforms","functionName","nextSize_1","posX","posY","posZ","nextSize","unitValue","childrenCount","ChildrenDiffer","getDefaultScrollPosition","checkDefaultScrollEvent","getContainerElement","DragScroll","_startRect","_startPos","direction","throttleTime","nextScrollPos","nextDirection","getScrollPosition","useScroll","nowTime","distTime","checkScrollEvent","tinyThrottle","isSameConstants","linearConstants1","linearConstants2","isSamePoint","point1","point2","getAreaSize","point","nextPoint","fitPoints","getMinMaxs","minX","minY","maxX","maxY","xs","ys","isInside","excludeLine","xLine","xLinearConstants","getLinearConstants","lines","convertLines","intersectionPosInfos","line","linearConstants","standardPoint","xPoints","getPointsOnLines","getIntersectionPointsByConstants","linePoint","intersectionCount","xMap","prevValue","getDistanceFromPointToConstants","c1","c2","isZeroA","isZeroB","results","getIntersectionPoints","line1","line2","isLimit","isPointOnLine","minMaxs","order","minMax","right","bottom","pointX","pointY","getOverlapPointInfos","points1","points2","targetPoints1","targetPoints2","lines1","lines2","linearConstantsList1","linearConstantsList2","overlapInfos","linePointInfos","intersectionPoints","isNext","pointMap","getOverlapPoints","infos","isConnectedLine","prevIndex1","prevIndex2","nextIndex1","nextIndex2","getOverlapAreas","areas","area","findReversedAreas","isFirst","nextPoints1","nextArea","areaPoint","nextPoint2","point2Index","findConnectedAreas","getUnoverlapAreas","overlapAreas","unoverlapAreas","overlapArea","nextOverlapArea","connectedAreas","firstConnectedArea","lastPoint_1","firstPoint","firstIndex","getOverlapSize","StyledElement","defaultStyled","tag","Styled","Tag","cssId","cspNonce","targetRef","injectResult","__values","o","__read","makeAble","able","DIRECTIONS4","DIRECTIONS","getSVGCursor","degree","getCursorCSS","degree45","defaultCursor","IS_WEBKIT","IS_WEBKIT605","navi","browserName","IS_CHROME","IS_CHROMIUM","chromiumVersion","IS_CHROMIUM109","IS_FIREFOX","IS_SAFARI_ABOVE15","directionCSS","dir","originX","originY","offset","MOVEABLE_CSS","NEARBY_POS","FLOAT_POINT_NUM","MIN_SCALE","MAX_NUM","MIN_NUM","DIRECTION_REGION_TO_DIRECTION","DIRECTION_INDEXES","DIRECTION_ROTATIONS","MOVEABLE_METHODS","setCustomDrag","isConvert","ableName","ableDatas","convertDragDist","CustomGesto","originalDatas","calculateElementPosition","is3d","poses","calculatePoses","x4","y4","calculatePosition","calculatePointerDist","moveable","moveableClientRect","rootMatrix","calculateInversePosition","getDragDist","setDragStart","allMatrix","beforeMatrix","offsetMatrix","targetMatrix","transformOrigin","getTransformDirection","resolveTransformEvent","nextTransforms","nextTransformAppendedIndexes","convertTransformInfo","targetFunction","matFunctionName","convertTransformFormat","dist","getTransformDist","getBeforeDragDist","bx","by","getTransfromMatrix","isAfter","beforeTransform","afterTransform","beforeTransform2","afterTransform2","targetAllTransform","nextTargetMatrix","res1","afterTargetMatrix","inverseBeforeMatrix","startDragBeforeDist","absoluteOrigin","isBefore","startDragDist","getInverseDragDist","calculateTransformOrigin","prevWidth","prevHeight","prevOrigin","prevSize","measureRatio","getPosIndexesByDirection","indexes","getPosesByDirection","getPosBySingleDirection","getPosByDirection","startPos","fixedDirection","fixedPos","getNextMatrix","getAbsoluteMatrix","getNextTransformMatrix","isAllTransform","targetTransform","scaleMatrix","fillTransformStartEvent","getBeforeRenderableDatas","setTransformIndex","setDefaultTransformIndex","startTransforms","fillOriginalTransform","getNextTransforms","getNextTransformText","getNextStyle","fillTransformEvent","nextTransform","drag","Draggable","fillCSSObject","getTranslateFixedPosition","fixedOffset","nextMatrix","nextFixedPosition","getDirectionOffset","getTranslateDist","fixedPosition","groupable","groupLeft","groupTop","getScaleDist","getDirectionByPos","fixedOffsetPosition","getRotateDist","rotateDist","getResizeDist","nextOrigin","getAbsolutePosition","getAbsolutePosesByState","getGestoData","targetGesto","controlGesto","getIndividualTransforms","getStyle","individualTransforms","getMatrixStackInfo","checkContainer","documentElement","requestEnd","isEnd","targetTransformOrigin","hasFixed","offsetContainer","getOffsetInfo","getCachedStyle","getElementTransform","isFixed","getTransformMatrix","offsetParent","isOffsetEnd","isStatic","parentClientLeft","parentClientTop","fixedClientLeft","fixedClientTop","fixedInfo","getPositionFixedInfo","length_1","convert3DMatrixes","getOffsetPosInfo","hasOffset","origin_1","targetOrigin","offsetPos","offsetLeft","offsetTop","getSVGMatrix","targetZoom","offsetInfo","offsetZoom","parentSlotElement","customOffsetParent","customOffsetLeft","customOffsetTop","getBodyOffset","isElementTarget","cacheStyleMap","clientRectStyleMap","matrixContainerInfos","setStoreCache","useCache","getCachedClientRect","clientRect","nextClientRect","getClientRect","getCachedMatrixContainerInfo","result_1","cache","nextStyle_1","cached","fillChildEvents","groupableDatas","childDatas","triggerChildGesto","isStart","moveables","childEvents","eventParams","ev","childMoveable","gestos","childEvent","triggerChildAbles","eachEvent","startChildDist","parentDatas","startPositions","originalX","originalY","renderDirectionControlsByInfos","renderDirections","React","renderPoses","rotationRad","getProps","degRotation","absDegree","directionMap","renderState","renderDirectionMap","directionSign","directionRotation","dataAttrs","getControlTransform","renderDirectionControls","defaultDirections","directions","displayAroundControls","renderAroundControls","renderLine","renderEdgeLines","edge","getRenderDirections","renderDiagonalDirections","renderAllDirections","checkBoundPoses","bounds","verticalPoses","horizontalPoses","nextBounds","checkBounds","getBounds","externalBounds","clientLeft","clientTop","snapOffsetLeft","snapOffsetTop","snapOffsetRight","snapOffsetBottom","isCSS","checkBoundKeepRatio","endPos","endX","endY","isBottom","isRight","verticalInfo","horizontalInfo","isBound","isVertical","startBoundPos","endBoundPos","minPos","maxPos","boundInfos","isBoundRotate$1","relativePoses","boundRect","nextPoses","boundRotate","vec","boundPos","getDistSize","checkRotateBounds","prevPoses","relativeRad1","relativeRad2","nextRad","VERTICAL_NAMES","HORIZONTAL_NAMES","SNAP_SKIP_NAMES_MAP","VERTICAL_NAMES_MAP","HORIZONTAL_NAMES_MAP","getInitialBounds","hasGuidelines","snappable","innerBounds","verticalGuidelines","horizontalGuidelines","snapGridWidth","snapGridHeight","guidelines","enableSnap","getSnapDirections","snapDirections","mapSnapDirectionPoses","snapPoses","nextSnapDirections","nextSnapPoses","splitSnapDirectionPoses","horizontalNames","verticalNames","calculateContainerPos","containerRect","solveLineConstants","NAME_snapRotationThreshold","NAME_snapRotationDegrees","NAME_snapHorizontalThreshold","NAME_snapVerticalThreshold","checkMoveableSnapPoses","posesX","posesY","dirXs","dirYs","customSnapVerticalThreshold","customSnapHorizontalThreshold","snapThresholdMultiples","snapHorizontalThreshold","selectValue","snapVerticalThreshold","checkSnapPoses","multiples","checkSnap","checkSnapKeepRatio","getTinyDist","verticalSnapInfo","horizontalSnapInfo","getNearestSnapGuidelineInfo","isVerticalSnap","verticalGuideline","isHorizontalSnap","horizontalGuideline","horizontalPos","verticalPos","isSnap","getStringDirection","stringDirection","checkSnaps","horizontalDirection","verticalDirection","snapInfo","posInfo","guidelineInfo","guideline","targetType","targetPoses","snapThreshold","dirs","posType","snapPosInfos","targetPos","guidelineInfos","snapPosInfo","getSnapInfosByDirection","snapDirection","nextDir","checkSnapBoundPriority","aDist","bDist","getNearOffsetInfo","offsets","aSign","bSign","aOffset","bOffset","getCheckSnapDirections","endDirection_1","signX","signY","signs","isStartLine","cx","cy","hitTestLine","test1","test2","isSameStartLine","dots","centerSign","checkInnerBoundDot","start","end","checkInnerBound","verticalSign","horizontalSign","lineConstants","leftLine","topLine","rightLine","bottomLine","topBoundInfo","checkLineBoundCollision","bottomBoundInfo","leftBoundInfo","rightBoundInfo","isAllVerticalBound","isVerticalBound","isAllHorizontalBound","isHorizontalBound","verticalOffset","maxOffset","horizontalOffset","isAllBound","boundLine","isRender","dot1","boundDot1","boundDot2","dy2","dx2","hasDx","hasDy","slope","getInnerBoundInfo","lineInfos","multiple","sizeOffset","getInnerBoundDragInfo","getCheckInnerBoundLineInfos","innerBoundInfo","widthOffsetInfo","heightOffsetInfo","getCheckSnapLineDirections","lineDirections","virtualPoses","dir1","dir2","virtualLine","isBoundRotate","boundDots","getDistPointLine","solveReverseLine","checkRotateInnerBounds","dotInfos","lineRad","lineDist","dotDist","dotRad","distRad","nextRad1","nextRad2","checkInnerBoundPoses","boundMap","pos4","lineInfo","isHorizontalStart","isVerticalStart","solveEquation","snapOffset","solveNextOffset","dist1","dist2","isOutside","widthOffset","heightOffset","getSnapBound","boundInfo","checkThrottleDragRotate","throttleDragRotate","adjustPoses","adjustPos","prevDistY","checkSnapBoundsDrag","ignoreSnap","getAbsolutePoses","getRect","boundPoses","checkMoveableSnapBounds","verticalSnapBoundInfo","horizontalSnapBoundInfo","verticalInnerBoundInfo","horizontalInnerBoundInfo","horizontalBoundInfos","verticalBoundInfos","horizontalDist","verticalDist","checkSnapBounds","guideines","checkSnapRightLine","snapBoundInfo","rad180","isHorizontalLine","isVerticalLine","getSnapBoundInfo","isRequest","startDirection","endDirection","otherStartPos","otherEndPos","checkSnapBoundsKeepRatio","otherHorizontalOffset","isOtherHorizontalBound","isOtherHorizontalSnap","otherVerticalOffset","isOtherVerticalBound","isOtherVerticalSnap","snapLine","getSnapBoundOffset","horizontalBoundInfo","verticalBoundInfo","checkMaxBounds","left_1","top_1","right_1","bottom_1","otherDirection","isCheckVertical","isCheckHorizontal","otherPos","deg","nextOtherPos","isHeightOutside","isWidthOutside","hideThrottleDragRotateLine","dragInfo","beforeOrigin","parentEvent","parentGesto","startCheckSnapDrag","params","fillParams","triggerEvent","parentFlag","deltaOffset","useSnap","isGroup","parentThrottleDrag","prevDist","prevBeforeDist","startValue","parentMoveable","throttleDrag","dragRotateRad","startDragRotate","ry","rx","beforeTranslate","beforeDist","beforeDelta","fillEndParams","nextParams","passDelta","getFixedDirectionInfo","getOffsetFixedDirectionInfo","nextFixedOffset","getOffsetFixedPositionInfo","offsetFixedPosition","directionCondition$2","getDirectionCondition","Resizable","getDirectionViewClassName","parentDirection","parentFixedDirection","getTotalDirection","setRatio","setFixedDirection","setFixedPosition","setMin","setMax","nextMaxSize","startWidth","startHeight","parentKeepRatio","dragClient","parentDist","resolveMatrix","isResize","startOffsetWidth","startOffsetHeight","isWidth","startOffsetMatrix","startTransformOrigin","targetN","nextAllMatrix","resizeFormat","throttleResize","keepRatioFinally","sizeDirection","distWidth","distHeight","getNextBoundingSize","getOffsetSizeDist","nextWidth","nextHeight","boundingWidth","boundingHeight","nextFixedDirection","snapDist","checkSnapResize","computeSize","isNoSnap","inverseDelta","fillAfterTransform","errorWidth","errorHeight","isErrorWidth","isErrorHeight","originalEvents","parentStartOffsetWidth","parentStartOffsetHeight","updateGroupMin","originalMinSize","childMinSize","childStartOffsetWidth","childStartOffsetHeight","parentMinWidth","parentMinHeight","updateGroupMax","originalMaxSize","childMaxSize","parentMaxWidth","parentMaxHeight","catchEvent","parentScale","setRotateStartInfo","startAbsoluteOrigin","getAbsoluteDist","defaultDeg","prevDeg","normalizedPrevDeg","loop","getAbsoluteDistByClient","getRotateInfo","moveableRect","throttleRotate","prevSnapDeg","snapRotation","checkSnapRotate","snapDeg","getRotationPositions","rotationPosition","radPoses","getRotationRad","isReverse","dragControlCondition","rotationTarget","getRefTargets","Rotatable","rotatable","rotateAroundControls","resolveAblesWithRotatable","jsxs","ables","resolveMap_1","directionControlInfos","parentRotate","beforeDirection","resizeStart","startClientX","startClientY","externalRotate","inputTarget","regionDirection","controlDirection","clientPoses","calculateMoveableClientPositions","originalFixedPosition_1","fixedBeforeOrigin","fixedAfterOrigin","posDelta","dragStart","resolveAble","getTotalOrigin","rotatation","clientDistX","clientDistY","groupDelta","beforeInfo","afterInfo","absoluteInfo","isRotate","targetDirection","beforeRotation","absoluteDelta","absoluteDist","absoluteRotation","startRotation","absoluteStartRotation","nextClientX","nextClientY","nextRotation","inverseDist","dragEvent","transformEvent","parentDistance","resize","resizeEvent","parentLeft","parentTop","parentBeforeOrigin","childClient","startGroupClient","prevClientX","prevClientY","distRotate","renderGuideline","scaleType","renderInnerGuideline","renderSnapPoses","renderPos","renderGuidelines","isDisplayInnerSnapDigit","mainNames","targetStart","targetEnd","hide","renderDigitLine","lineType","gap","snapDigit","isDisplaySnapDigit","snapDistFormat","absGap","snapSize","groupByElementGuidelines","otherIndex","groupBy","nextGuidelines","inner","elementRect1","elementRect2","renderDashedGuidelines","rendered","groups","sideNames","sidePos","prevRect","nextRect","size1","size2","renderPos1","renderPos2","renderGapGuidelines","targetSideStart","targetSideEnd","gapRects","sideStartPos","sideEndPos","sideCenterPos","getTotalGuidelines","containerClientRect","overflow","containerClientHeight","containerClientWidth","snapGap","maxSnapElementGuidelineDistance","isDisplayGridGuidelines","elementGuidelines","getElementGuidelines","totalGuidelines","getGapGuidelines","getGridGuidelines","getDefaultGuidelines","checkBetweenRects","snapThresholds","maxSnapElementGapDistance","elementRects","gapGuidelines","targetCenter","targetStart2","targetEnd2","snapThresholdMap","getDist","nextElementRects","snapRect1","snapRect2","rect1","rect2","rect1Start","rect1End","rect2Start","rect2End","isCenter","startGridGroupGuidelines","snapGridAll","snapRenderInfo","hasDirection","rect_1","children_1","posName","clientOffset","rectSize","rectPos","childSizes","firstChildSize","childSnapSizes","rectRatio","childSize","startOffset","snapThresholdInfo","defaultSnapGridWidth","defaultSnapGridHeight","pushGuideline","prevValues","snapRect","nextElementGuidelines","getRefTarget","nextValues","getSnapElementRects","elementSnapDirections","topValue","leftValue","rightValue","bottomValue","centerValue","middleValue","rectTop","rectLeft","sizes","getObjectGuidelines","containerSize","posGuideline","snapWidth","snapHeight","offsetDelta","containerLeft","containerTop","elementLeft","elementTop","elementRight","elementBottom","checkSnapInfo","snapContainer","snapContainerTarget","snapContainerRect","offset1","getDragDistByState","offset2","getNextFixedPoses","nextFixedPos","normalized","getSizeOffsetInfo","innerBoundLineInfos","recheckSizeByTwoDirection","snapPos","nextWidthOffset","nextHeightOffset","checkSizeDist","getNextPoses","isWidthBound","isHeightBound","widthDist","heightDist","isGetWidthOffset","bumpDegree","baseDeg","deg1","deg2","getMinDegreeDistance","deg3","snapRotationThreshold","snapRotationDegrees","origin2_1","rad_1","sorted","firstDegree","checkSnapScale","sizeDist","getSnapGuidelines","posInfos","addBoundGuidelines","verticalSnapPoses","horizontalSnapPoses","innerBoundMap","verticalInnerBoundPoses","horizontalInnerBoundPoses","innerPos","directionCondition$1","Snappable","targetTop","targetLeft","snapRenderThreshold","watchValue","minLeft","minTop","externalPoses","snapInfos","hasExternalPoses","externalRect","verticalPosInfos","horizontalPosInfos","allGuidelines","nextBoundMap","nextInnerBoundMap","multiply2","defaultSync","fn","measureSVGSize","viewBox","getSVGViewBox","getBeforeTransformOrigin","relativeOrigin","getTransformOrigin","getTransformOriginArray","computedTransform","baseVal","lastParent","isParent","checkZoom","getTargetStyle","hasSlot","assignedSlotParentElement","isCustomElement","targetPosition","willChange","slotParentNode","targetParentNode","getSVGGraphicsOffset","getBodyStyle","bodyPosition","marginLeft","marginTop","fixedContainer","hasTransform","body","makeMatrixCSS","clientWidth","clientHeight","viewBoxWidth","viewBoxHeight","scaleX","scaleY","preserveAspectRatio","align","meetOrSlice","svgOrigin","xAlign","yAlign","scaleDimension","isGTarget","isFillBox","bbox","rectWidth","rectHeight","calculateRect","getSVGOffset","targetInfo","getSize","mat","prevLeft","prevTop","posOrigin","rectOrigin","mat2","nextLeft","nextTop","distLeft","distTop","rootClientRect","rootPoses","getDiagonalSize","offsetWidth","offsetHeight","cssWidth","cssHeight","contentWidth","contentHeight","minOffsetWidth","minOffsetHeight","maxOffsetWidth","maxOffsetHeight","inlineCSSWidth","inlineCSSHeight","svg","targetStyle","boxSizing","borderLeft","borderRight","borderTop","borderBottom","paddingLeft","paddingRight","paddingTop","paddingBottom","horizontalPadding","verticalPadding","horizontalBorder","verticalBorder","getParentStyle","resetClientRect","getExtendsRect","isRoot","extendsRect","getClientRectByPosition","isExtends","baseTop","baseLeft","convertTransformOriginArray","getDirection","direciton","unsetAbles","isControl","unsetGesto","gestoName","gesto","resolvedEvent","prevEvent","nextEvent","isBeforeEvent","isManager","pseudoElt","filterAbles","triggerAblesSimultaneously","enabledAbles","ableGroups","equals","groupKeys","groupKey","keyIndex","group","groupByMap","calculatePadding","xAdded","yAdded","nextAdded","convertCSSSize","isRelative","checkAbles","beforeFunctionTexts","beforeFunctionTexts2","targetFunctionText","afterFunctionTexts","afterFunctionTexts2","beforeFunctions","beforeFunctions2","afterFunctions","afterFunctions2","targetFunctions","beforeFunctionMatrix","beforeFunctionMatrix2","afterFunctionMatrix","afterFunctionMatrix2","allFunctionMatrix","isArrayFormat","isSelector","userTargets","getAbsoluteRotation","getSizeDistByDist","startSize","standardRad","signSize","startWidthSize","startHeightSize","secondRad","firstRad","distSize","pinchScale","startFixedDirection","directionsDists","directionRatios","ratioDistance","dist_1","convertTransformUnit","xy","leftOrigin","rightOrigin","originObject","nextOriginObject","rotatePosesInfo","isDeepArrayEquals","arr1","value1","value2","isArray1","isArray2","valueKey","countEach","getPaddingBox","padding","Pinchable","angle","pinchable","controlEventName","pinchAbles","ableEvent","directionCondition","Scalable","setMinScaleSize","setMaxScaleSize","isScale","throttleScale","tempScaleValue","getNextScale","stateDirection","nextScale","distSign","isSelfPinch","startOffsetSize","scaleSize","distText","scaleText","isZeroScale","scaleEndParam","moveableScale","getMiddleLinePos","getTriangleRad","rad1","rad2","isValidPos","poses1","poses2","pi","Warpable","resizable","scalable","warpable","linePosFrom1","linePosFrom2","linePosFrom3","linePosFrom4","linePosTo1","linePosTo2","linePosTo3","linePosTo4","targetInverseMatrix","prevMatrix","isWarp","posIndexes","absolutePoses","selectedPoses","nearByPoses","afterMatrix","totalMatrix","AREA_PIECES","AREA_PIECE","AVOID","VIEW_DRAGGING","restoreStyle","renderPieces","DragArea","dragArea","passDragArea","areaElement","rects","Origin","originStyle","scrollContainer","Scrollable","scrollOptions","dragScroll","scrollContainerElement","scrollThreshold","scrollThrottleTime","Default","Padding","paddingDirections","paddingPos1","paddingPos2","paddingPos3","paddingPos4","RADIUS_DIRECTIONS","calculateRatio","sumSize","sumRatio","HORIZONTAL_RADIUS_ORDER","VERTICAL_RADIUS_ORDER","HORIZONTAL_RADIUS_DIRECTIONS","VERTICAL_RADIUS_DIRECTIONS","getRadiusStyles","clipStyles","radiusPoses","raws","rawPos","getRadiusRange","controlPoses","horizontalRange","verticalRange","clipPose","getRadiusValues","minCounts","full","splitIndex","splitLength","horizontalValues","verticalValues","horizontalValuesLength","verticalValuesLength","hasVerticalValues","nwValue","neValue","seValue","_j","swValue","_k","_l","wnValue","_m","enValue","_o","esValue","_p","wsValue","horizontalRawPoses","verticalRawPoses","nextHorizontalPoses","nextVerticalPoses","removeRadiusPos","radiuslIndex","deleteCount","addRadiusPos","horizontalIndex","verticalIndex","radiusX","radiusY","startVerticalIndex","splitRadiusPoses","horizontals","verticals","CLIP_DIRECTIONS","CLIP_RECT_DIRECTIONS","getClipStyles","clipPath","clipRelative","clipType","clipPoses","isRect","isCircle","subWidth","subHeight","getRectPoses","dirx","diry","getControlSize","xRange","yRange","getClipPath","defaultClip","customClip","clipText","clipPrefix","splitter","xPos","yPos","radiusX_1","radiusY_1","radius","xRadius","yRadius","centerPos_1","roundIndex","rectLength","radiusValues","_q","_r","_s","top_2","_t","nextRight","nextBottom","_u","posValue","top_3","moveControlPos","dists","verticalDirections","horizontalDirections","verticalDirection_1","horizontalDirection_1","fixedIndex","nextDist","nextControlPoses_1","controlPose","controlDir","dirDir","dirHorizontal","dirVertical","addClipPath","clipIndex","clipStyle","removeClipPath","Clippable","customClipPath","defaultClipPath","clipArea","clipPathState","snapBoundInfos","calculatedPos","controls","isInset","isPolygon","linePoses_1","clipLeft","clipTop","ellipseClipPath","piece","areaPoses","allWidth","allHeight","allLeft_1","allTop_1","directionType","snapPos1","snapPos2","dragWithClip","isDragTarget","isLine","isArea","originalDraggable","originalDist","firstDist","isDragWithTarget","isAll","guidePoses","isEllipse","guideRect","guideXPoses","guideYPoses","rectPoses","rectDists_1","boundDelta","snapOffsetY","snapOffsetX","distSnapX","distSnapY","width_1","height_1","nextControlPoses_2","nextClipStyles","dragDist","isClipStart","OriginDraggable","originRelative","distOrigin","dragDelta","addBorderRadiusByLine","lineIndex","horizontalsLength","virtual","verticalsLength","controlIndex","controlPoseInfo","addBorderRadius","removeBorderRadius","getBorderRadius","borderRadius","triggerRoundEvent","getStyleBorderRadius","firstMoveable","Roundable","roundClickable","borderRadiusState","minRoundControls","maxRoundControls","roundPadding","isDisplayShadowRoundControls","verticalCount","horizontalCount","basePos","originalPos","isDisplayVerticalShadow","indexAttr","roundRelative","selectedControlPose","selectedVertical","selectedHorizontal","pose","poseDist","isIdentityMatrix","identityMatrix","BeforeRenderable","inlineTransform","cssMatrix","startTransform","Renderable","transformObject","matrixInfo","triggerAble","moveableAbles","eventOperations","eventAffix","eventType","requestInstant","requestAble_1","isDragStop","isFirstStart","gestoType","prevGesto","trigger","conditionName","nextDatas","forceEndedCount","updatedCount","eventOperation","eventAbles","isForceEnd","flushSync","checkMoveableTarget","eventTarget","dragTargetElement","getTargetAbleGesto","moveableTarget","controlBox","dragTarget","checkTarget","getAbleGesto","getControlAbleGesto","checkControlTarget","ableType","conditionFunctions","isTargetAbles","preventClickDefault","dragContaienrOption","dragContainer","isPinchScheduled","EventManager","calculateMatrixStack","rootContainer","isAbsolute3d","prevTargetMatrix","containerZoom","rootMatrixes","isRoot3d","offsetRootContainer","rootZoom","isNext3d","isSVGGraphicElement","nextRootMatrixes","originalRootContainer","endContainer","rootMatrixBeforeOffset","nextInfo","isMatrix3d","originalRootMatrix","calculateElementInfo","allResult","getElementInfo","getMoveableTargetInfo","moveableElement","requestStyles","targetClientRect","rootContainerClientRect","getStyle_1","beforePosition","absoluteTargetPosition","absoluteContainerPosition","containerClientRectLeft","containerClientRectTop","containterClientLeft","containerClientTop","clientDelta","getPersistState","MoveableManager","parentPosition","propsTarget","ControlBoxElement","linePadding","controlPadding","stateTarget","groupTargets","isDragging","ableAttributes","ableClassName","isVisible","viewContainer","manager","wrapperMoveable","totalSize","isTarget","isSetState","isSingle","persistState","statePos","isInstant","allAbles","requsetAble","ableRequester","requester","ableParam","originalBeforeOrigin","stateLeft","stateTop","isPersisted","renderPos3","renderPos4","zoomOffset","stateContainer","isTargetChanged","isChanged","moveableContainer","customStyleMap","hasControlBox","persistData","firstRenderState","pinchStart","dragControlStart","targetAbles","controlAbles","Renderer","styleNames","ableStyleNames","hasTargetAble","hasControlAble","isUnset","hideDefaultLines","hideChildMoveableDefaultLines","useDragArea","nextTarget","prevTarget","prevDragArea","isDragTargetChanged","isDragAreaChanged","eventKeys","hasAbles","viewContainerOption","nextClassNames","prevClassNames","classPrefix","targetGestoData","controlGestoData","observer","records","e_1","records_1","records_1_1","mutation","e_1_1","Groupable","renderGroupRects","persistDatChildren","Clickable","isMoveableElement","containsElement","containsTarget","parentTarget","getDraggableEvent","edgeDraggable","IndividualGroupable","MOVEABLE_ABLES","MOVEABLE_EVENTS","MOVEABLE_PROPS","solveConstantsDistance","solveC","getMaxPos","getMinPos","getGroupRect","parentPoses","fixedRotation","a1_1","a2_1","a1MinMax_1","a1MinMaxPos_1","a2MinMax_1","a2MinMaxPos_1","a1Dist","a2Dist","a1MinPos","a1MaxPos","a2MinPos","a2MaxPos","minHorizontalLine","maxHorizontalLine","minVerticalLine","maxVerticalLine","minX_1","minY_1","maxX_1","maxY_1","changedX","findMoveableGroups","childTargetGroups","targetGroup","childMoveableGroups","checked","MoveableGroup","checkeds","targetGroups","moveableGroups","useDefaultGroupRotate","finded","isReset","defaultGroupRotate","persistedRoatation","getMoveableGroupRect","parentRotation","posesRotations","rotations","groupRotation","firstRotation","isSameRotation","groupPoses","groupRect","rootGroupRect","posesInfo","rotateScale","isContainerChanged","MoveableIndividualGroup","canPersist","individualProps","controlBoxElement","dragElement","getElementTargets","refTargets","selectorMap","elementTargets","getTargetGroups","compareRefTargets","prevRefTargets","nextRefTargets","InitialMoveable","cssMap","moveableContructor","userAbles","userProps","nextSelectorMap","totalAbles","prevMoveable","target_1","prevTargetMoveable","mv","resolvePromise","isBrowser","updateSelectorMap","selectorTarget","Moveable","makeMoveable","InnerMoveable","nextOptions","selfElement","innerMoveable","createCommonjsModule","module","keycode","exports","keyCode","searchInput","hasKeyCode","search","foundNamedKey","codes","aliases","nameOrCode","alias","keycode_1","keycode_2","keycode_3","keycode_4","keycode_5","codeData","keysSort","getKey","keyName","getCombi","getModifierCombi","getArrangeCombi","arrangeKeys","prevScore","nextScore","globalKeyController","KeyController","comb","isToggle","combi","touch","filterDuplicated","map","elementFromPoint","baseNode","jsx","elChildren","elStyle","attrs","diffValue","boundArea","getDefaultElementRect","passTargets","beforeTargets","afterTargets","continueSelectWithoutDeselect","getLineSize","OPTION_TYPES","Selecto","clickedTarget","selectFromInside","selectByClick","boundContainer","preventDragFromInside","clickBySelectEnd","dragCondition","boundElement","rectElement","hitRect","firstPassedTargets","allowClickBySelectEnd","hasInsideTargets","pointTarget","isPreventSelect","innerScrollOptions","isInnerScroll","inputEvent_1","innerScrollElement","hasScrollOptions","selectFlag","isKeyDown","isKeyUp","containers","portalContainer","selectedTargets","beforeSelected","selectedElements","startPoint","endPoint","mousedown","mousemove","mouseup","getElementRect","selectableElements","selectableTargets","selectablePoints","hasIndexesMap","parentMap_1","parents","paths","prevParentElement","keyContainer","toggleContinueSelect","toggleContinueSelectWithoutDeselect","nextClassName","continueSelect","selectRect","gestoEvent","hitRate","innerGroups","innerWidth","innerHeight","ignoreClick","rectPoints","isHit","hitRateValue","inArea","overlapPoints","overlapSize","rate","selectableInners","yGroups","isMoveInnerScroll","parentMap_2","parentInfo","containerInfo","isDragStartEnd","startResult","startSelectedTargets","startPassedTargets","afterAdded","afterRemoved","afterPrevList","afterList","containerX","containerY","offsetSize","passedTargets","isKeyup","nextKeys","toggleKeys","singleKey_1","innerScrollContainer_1","parentMap_3","innerScrollPathsList","innerScrollPaths","isAlwaysTrue","selectablePoints_1","groups_1","getter","Selecto$1","CONNECTION_ANCHOR_DIV_ID","CONNECTION_ANCHOR_ALT","CONNECTION_ANCHOR_HIGHLIGHT_OFFSET","ANCHORS","ANCHOR_PADDING","HALF_SIZE","ConnectionAnchors","setRef","setAnchorsRef","handleMouseLeave","highlightEllipseRef","halfSizeHighlightEllipse","anchorImage","onMouseEnterAnchor","onMouseLeaveHighlightElement","handleMouseLeaveAnchors","generateAnchors","anchors","anchor","reorderElements","src","dragToGap","destPosition","updateElements","idx","destIndex","findElementByTarget","sceneElements","stack","currentElement","nestedElements","nestedElement","frameSelection","first","currentSelectedElements","currentLayer","newLayer","framePlacement","generateFrameContainer","maxRight","maxBottom","idCounter","htmlElementTypes","ConnectionSVG","setSVGRef","setLineRef","setSVGVertexRef","setVertexPathRef","setVertexRef","headId","CONNECTION_LINE_ID","EDITOR_HEAD_ID","maximumVertices","selectedConnection","setSelectedConnection","selectedConnectionRef","clearSelectedConnection","selectConnection","renderConnections","vertices","xStart","yStart","xEnd","yEnd","midpoint","xDist","yDist","connectionCursorStyle","selectedStyles","CONNECTION_HEAD_ID_START","CONNECTION_HEAD_ID_END","addVertices","pathString","vertex","X","Y","xa","ya","xb","yb","lHalfArc","angle1","angle2","Xn","Yn","previousVertex","Xp","Yp","theta","ccw","lSegment","nextVertex","lSegmentNext","lDelta","markerStart","markerEnd","getAnimationDirection","CONNECTION_VERTEX_ID","CONNECTION_VERTEX_ADD_ID","CONNECTION_VERTEX_ORTHO_TOLERANCE","CONNECTION_VERTEX_SNAP_TOLERANCE","Connections","BehaviorSubject","anchorElement","anchorsElement","connectionSVG","connectionLine","connectionVertex","connectionVertexPath","elementTarget","customElementAnchors","anchorsAmount","elementBoundingRect","parentBoundingRect","connectionLineX1","connectionLineY1","sourceX","sourceY","targetX","targetY","targetName","selectedValue","vx1","vy1","vx2","vy2","xSnap","ySnap","deleteVertex","verticalBefore","verticalAfter","horizontalBefore","horizontalAfter","angleOverall","angleBefore","connectionIndex","vertexIndex","currentSource","currentConnections","currentVertices","currentVertex","newVertex","selectedTarget","connectionStartTargetBox","connectionAnchorOffsetX","connectionAnchorOffsetY","mouseX","mouseY","update","settingsViewable","openSettings","evt","onKeyPress","dimensionViewable","constraintViewable","targetElement","verticalConstraintVisualization","horizontalConstraintVisualization","borderStyle","centerIndicatorLineOne","centerIndicatorLineTwo","centerIndicator","verticalConstraintTop","verticalConstraintBottom","verticalConstraintTopBottom","verticalConstraintCenterLine","verticalConstraintCenter","horizontalConstraintLeft","horizontalConstraintRight","horizontalConstraintLeftRight","horizontalConstraintCenterLine","horizontalConstraintCenter","ZOOM_RANGE","disableCustomables","enableCustomables","isTargetAlreadySelected","selectedTargetParent","generateTargetElements","rootElements","initMoveable","destroySelecto","allowChanges","targetedElement","elementSupportsEditing","needsUpdate","isTargetMoveableElement","isElementSelected","startPanning","startScrollLeft","startScrollTop","handleMouseMove","moveEvent","scaleAdjustedDeltaX","scaleAdjustedDeltaY","handleMouseUp","triggerContextMenu","calculateZoomToFitScale","paddingRatio","calculateGroupBoundingBox","paddedWidth","paddedHeight","extractTranslateFromTransform","DEFAULT_OFFSET","HORIZONTAL_OFFSET","frameItemDummy","updateName","shiftItemsOnDuplicate","oldPlacement","copy","elem","endIndex","firstPosition","srcIndex","vals","CanvasContextMenu","onVisibilityChange","inlineEditorOpen","isMenuVisible","setIsMenuVisible","setAnchorPoint","handleContextMenu","closeContextMenu","renderMenuItems","openCloseEditorMenuItem","MenuItem","editElementMenuItem","onClickEditElementMenuItem","typeOptions","getTypeOptionsSubmenu","submenuItems","onClickItem","sceneContainerDimensions","addItemMenuItem","setBackgroundMenuItem","contextMenuAction","actionType","currentSelectedElement","ContextMenu","CanvasTooltip","onClose","overlayProps","useOverlay","dialogProps","useDialog","timeField","lastTimeValue","shouldDisplayTimeContentItem","headerItem","contentItems","links","linkLookup","actions","actionLookup","elementHasActions","VizTooltipContainer","CloseButton","VizTooltipHeader","VizTooltipContent","VizTooltipFooter","zIndex","PointerEvents","setConnectionsSVGRef","Connections2","connectionsSVG","RootElement","changeCallback","rest","Scene","onSave","ReplaySubject","Subject","visible","isFrame","label","scalar","updateMoveable","sceneContainer","viewerContainer","viewportContainer","zoomToContent","root","viewerDiv","infiniteViewer","dimentions","dashboard","enableEditing","showAdvancedTypes","panZoom","tooltip","tooltipMode","tooltipDisableForOneClick","svgConnections","skipNextSelectionBroadcast","hasDataLinks","hasActions","isTooltipValid","isCanvasTooltipEnabled","isTooltipDisabledForOneClick","shouldShowElementTooltip","sceneDiv","SetBackground","bgImage","setBgImage","ResourcePickerPopover","BackgroundSizeEditor","imageSize","onImageSizeChange","DirectionDimensionEditor","directionOptions","fixedDirectionOptions","labelWidth","onModeChange","mode","onFixedChange","selectedDirection","opt","defaultLineStyleConfig","LineStyleEditor","onLineStyleChange","onAnimateChange","animate","Switch","ActionsEditor","dataLinks","ActionsInlineEditor","oneClick","DataLinksEditor","DataLinksInlineEditor","getCategoryName","optionBuilder","ScaleDimensionEditor","getConnectionEditor","lodash","ConstraintSelectionBox","onVerticalConstraintChange","onHorizontalConstraintChange","currentConstraints","onClickTopConstraint","onClickBottomConstraint","onClickVerticalCenterConstraint","onClickLeftConstraint","onClickRightConstraint","onClickHorizontalCenterConstraint","HOVER_COLOR","SELECTED_COLOR","selectionBoxColor","QuickPositioning","onPositionChange","settings","onQuickPositioningChange","defaultConstraint","originalConstraint","getRightBottomPosition","getCenterPosition","elementSize","places","PlacementEditor","horizontalOptions","verticalOptions","layout","reselectElementAfterChange","onHorizontalConstraintSelect","onVerticalConstraintSelect","Icon","NumberInput","getElementEditor","layer","layerTypes","isUnsupported","currentOptions","_classCallCheck","_defineProperties","toPropertyKey","_createClass","_assertThisInitialized","_setPrototypeOf","_inherits","_getPrototypeOf","_isNativeReflectConstruct","_possibleConstructorReturn","_createSuper","TreeContext","UnstableContext","DropIndicator","dropPosition","dropLevelOffset","indent","_objectDestructuringEmpty","_arrayWithHoles","_iterableToArrayLimit","u","f","_nonIterableRest","_slicedToArray","unsupportedIterableToArray","Indent","_ref","prefixCls","level","baseClassName","_excluded","ICON_OPEN","ICON_CLOSE","defaultTitle","_unstableContext$node","_context$filterTreeNo","_classNames4","eventKey","dragOver","dragOverGapTop","dragOverGapBottom","isLeaf","expanded","selected","halfChecked","domRef","active","onMouseMove","selectable","unstableContext","selectHandleRef","_React$useState","_React$useState2","dragNodeHighlight","setDragNodeHighlight","isDisabled","isCheckable","onSelect","onCheck","isSelectable","onSelectorClick","onSelectorDoubleClick","onMouseEnter","onMouseLeave","onContextMenu","isDraggable","onDragStart","onDragEnter","onDragOver","onDragLeave","onDragEnd","onDrop","onExpand","hasChildren","memoizedIsLeaf","dragHandlerNode","_context$draggable","renderSwitcherIconDom","isInternalLeaf","switcherIcon","renderSwitcher","_switcherIconDom","switcherIconDom","checkboxNode","$custom","nodeState","iconNode","dropIndicatorNode","rootDraggable","showIndicator","selectorNode","_props$title","title","wrapClass","$icon","currentIcon","titleNode","dataOrAriaAttributeProps","pickAttrs","_ref2","isEndNode","draggableWithoutDisabled","dragging","ariaSelected","useUnmount","triggerStart","triggerEnd","firstMount","setFirstMount","useLayoutEffect","MotionTreeNode","oriProps","motion","motionNodes","motionType","onOriginMotionStart","onOriginMotionEnd","treeNodeRequiredProps","setVisible","_React$useContext","targetVisible","triggerMotionStart","triggerMotionEndRef","triggerMotionEnd","onVisibleChanged","nextVisible","motionRef","motionClassName","motionStyle","treeNode","restProps","treeNodeProps","findExpandedKeys","prevLen","nextLen","find","shorter","longer","getExpandRange","shorterStartIndex","shorterEndNode","longerStartIndex","longerEndIndex","HIDDEN_STYLE","noop","MOTION_KEY","MotionNode","MotionEntity","MotionFlattenData","getMinimumRangeTransitionRange","itemHeight","itemKey","getAccessibilityPath","NodeList","checkable","expandedKeys","selectedKeys","checkedKeys","loadedKeys","loadingKeys","halfCheckedKeys","keyEntities","disabled","dragOverNodeKey","focusable","activeItem","focused","tabIndex","onFocus","onBlur","onActiveChange","onListChangeStart","onListChangeEnd","domProps","listRef","indentMeasurerRef","scroll","prevExpandedKeys","setPrevExpandedKeys","_React$useState3","_React$useState4","prevData","setPrevData","_React$useState5","_React$useState6","transitionData","setTransitionData","_React$useState7","_React$useState8","transitionRange","setTransitionRange","_React$useState9","_React$useState10","setMotionType","dataRef","onMotionEnd","latestData","diffExpanded","rangeNodes","newTransitionData","_keyIndex","_rangeNodes","_newTransitionData","mergedData","originList","mergedKey","arrDel","clone","arrAdd","posToArr","getDragChildrenKeys","dragNodeKey","dragChildrenKeys","entity","dig","isLastChild","treeNodeEntity","posArr","isFirstChild","calcDropPosition","dragNodeProps","targetNodeProps","startMousePosition","allowDrop","flattenedNodes","expandKeys","_abstractDropNodeEnti","_getBoundingClientRec","horizontalMouseOffset","rawDropLevelOffset","filteredExpandKeys","_keyEntities$key","abstractDropNodeEntity","nodeIndex","flattenedNode","prevNodeIndex","prevNodeKey","initialAbstractDropNodeKey","abstractDragOverEntity","abstractDragDataNode","abstractDropDataNode","dropAllowed","calcSelectedKeys","internalProcessProps","convertDataToTree","treeData","processor","_ref2$processProps","processProps","_ref3","childrenNodes","parseCheckedKeys","keyProps","warning","conductExpandParent","keyList","conductUp","MAX_RETRY_TIMES","Tree","_React$Component","_len","_args","_key","nodeProps","_this$state","newExpandedKeys","_this$state2","flattenNodes","_this$props","_calcDropPosition","dropTargetKey","dropContainerKey","dropTargetPos","_this$state3","_this$props2","_calcDropPosition2","_this$getActiveItem","outsideTree","_this$state4","abstractDropNodeProps","dropToChild","dropResult","draggingNodeKey","_this$state5","nodeItem","eventNode","_this$props3","expandAction","_this$props4","onDoubleClick","_this$state6","_this$props5","targetSelected","selectedNodes","selectedKey","_this$state7","oriCheckedKeys","oriHalfCheckedKeys","_this$props6","checkStrictly","checkedObj","eventObj","checkedKey","_conductCheck","_checkedKeys","_halfCheckedKeys","keySet","_conductCheck2","_entity$children","loadPromise","reject","_ref$loadedKeys","_ref$loadingKeys","_this$props7","loadData","onLoad","promise","currentLoadedKeys","newLoadedKeys","onRightClick","_len2","_key2","_len3","_key3","_this$state8","_this$state9","_this$state10","listChanging","_this$props8","certain","targetExpanded","newFlattenTreeData","currentExpandedKeys","expandedKeysToRestore","newActiveKey","activeKey","_this$props9","_this$props9$itemScro","itemScrollOffset","_this$state11","_this$state12","_key4","_this$state13","_this$props10","KeyCode","expandable","atomic","forceState","needSync","allPassed","newState","_this$props11","_this$props11$itemScr","_this$state14","_this$props12","showLine","_this$props12$tabInde","showIcon","icon","draggable","filterTreeNode","titleRender","dropIndicatorRender","onScroll","rootClassName","rootStyle","draggableConfig","entitiesMap","cloneKeyEntities","nextExpandedKeys","checkedKeyEntity","_checkedKeyEntity","_checkedKeyEntity$che","_checkedKeyEntity$hal","conductKeys","getGlobalStyles","TreeNodeTitle","nodeData","setAllowSelection","getScene","onDelete","onDuplicate","onNameChange","verifyLayerNameUniqueness","nameToVerify","getLayerInfo","LayerName","getTreeData","selectedColor","onNodeDrop","destKey","srcKey","srcElement","allowSelection","TreeNavigationEditor","setTreeData","autoExpandParent","setAutoExpandParent","setExpandedKeys","setSelectedKeys","globalCSS","selectedBgColor","selectionByUID","srcEl","destEl","allow","onClearSelection","onTitleRender","onFrameSelection","AddLayerButton","getLayerEditor","TabsEditor","onTabChange","activeTab","setActiveTab","tabs","onCurrentTabChange","TabsBar","Tab","InlineEditBody","activePanel","activePanelSubject","instanceState","pane","OptionsPaneCategoryDescriptor","supplier","addStandardCanvasEditorOptions","getOptionsPaneCategoryDescriptor","topLevelItemsContainerStyle","tab","noElementSelected","renderOptionsPaneCategoryDescriptor","OptionsPaneCategory","getOptionsPaneCategory","categoryNames","access","OFFSET_X","OFFSET_Y","InlineEdit","windowHeight","windowWidth","inlineEditKey","defaultMeasurements","defaultX","defaultY","savedPlacement","measurements","setMeasurements","setPlacement","onDragStop","saveToStore","onResizeStop","canvasInstances","activeCanvasPanel","isInlineEditOpen","isSetBackgroundOpen","CanvasPanel","Subscription","onOptionsChange","PanelContext","canvasInstance","ci","inlineEditingSwitched","shouldShowAdvancedTypesSwitched","panZoomSwitched","zoomToContentSwitched","tooltipModeSwitched","tooltipDisableForOneClickSwitched","helpUrl","PanZoomHelp","Alert","newWindow","canvasMigrationHandler","pluginVersion","PanelPlugin","connectionSelection","colorIndicator","isPinned","scrollable","scrollableStyle","colorPlacement","isActive","isHiddenFromViz","ColorIndicatorPosition","VizTooltipColorIndicator","isHollow","SeriesIcon","LabelValueTypes","SUCCESSFULLY_COPIED_TEXT","SHOW_SUCCESS_DURATION","HORIZONTAL_PX_PER_CHAR","CAN_COPY","VizTooltipRow","justify","marginRight","showValueScroll","innerValueScrollStyle","showLabelTooltip","setShowLabelTooltip","copiedText","setCopiedText","showCopySuccess","setShowCopySuccess","labelRef","valueRef","timeoutId","copyToClipboard","fallbackCopyToClipboard","textarea","err","onMouseEnterLabel","onMouseLeaveLabel","Tooltip","InlineToast","clsx"],"sourceRoot":""}
.
Edit
..
Edit
1117.145ac642f59357bc40d8.js
Edit
1117.145ac642f59357bc40d8.js.map
Edit
1118.c684d1aadf16a6c70620.js
Edit
1118.c684d1aadf16a6c70620.js.map
Edit
1122.5fbf0d7cd148c610616d.js
Edit
1122.5fbf0d7cd148c610616d.js.map
Edit
1142.a4b35a0e8699cafd901e.js
Edit
1142.a4b35a0e8699cafd901e.js.map
Edit
1162.81868b3ac499fa5ea04b.js
Edit
1162.81868b3ac499fa5ea04b.js.map
Edit
1183.7444f51e5996a7f23c7d.js
Edit
1183.7444f51e5996a7f23c7d.js.map
Edit
1282.ae38cac1b732d8ac1d96.js
Edit
1282.ae38cac1b732d8ac1d96.js.map
Edit
130.a58aaeea748f37ee6482.js
Edit
130.a58aaeea748f37ee6482.js.map
Edit
1419.59f53ae25085b28e1e11.js
Edit
1419.59f53ae25085b28e1e11.js.map
Edit
1420.e63ce495727f83b8887d.js
Edit
1420.e63ce495727f83b8887d.js.map
Edit
1438.ccdd05d7188edf4191ff.js
Edit
1438.ccdd05d7188edf4191ff.js.map
Edit
1446.fe7b1f4563629b80793f.js
Edit
1446.fe7b1f4563629b80793f.js.map
Edit
1484.3da94e44ecdadcd342d4.js
Edit
1484.3da94e44ecdadcd342d4.js.map
Edit
1492.4026c6e7130c3afdae87.js
Edit
1494.ef220afb67ff6c52c7af.js
Edit
1494.ef220afb67ff6c52c7af.js.map
Edit
1560.538cd2395be11ba4e2c9.js
Edit
1560.538cd2395be11ba4e2c9.js.map
Edit
1579.c391ef869d4f7bfc0d1c.js
Edit
1579.c391ef869d4f7bfc0d1c.js.map
Edit
1646.d7d87a40853795910533.js
Edit
1646.d7d87a40853795910533.js.map
Edit
1710.7db3f56c6714c0c340e0.js
Edit
1710.7db3f56c6714c0c340e0.js.map
Edit
1716.f71f518289da5d2229bc.js
Edit
1716.f71f518289da5d2229bc.js.map
Edit
1740.baf38e7ee007e1a6935e.js
Edit
1740.baf38e7ee007e1a6935e.js.map
Edit
1821.c9a2456dc8d78cf6b02f.js
Edit
1821.c9a2456dc8d78cf6b02f.js.map
Edit
1888.d33142738af4fbf8a230.js
Edit
1888.d33142738af4fbf8a230.js.map
Edit
1914.5f33b3c2133b5bb7ea6e.js
Edit
1914.5f33b3c2133b5bb7ea6e.js.map
Edit
198.65a768ff6c601d19ea3f.js
Edit
198.65a768ff6c601d19ea3f.js.map
Edit
1990.9171129a8deabb59bf30.js
Edit
1990.9171129a8deabb59bf30.js.map
Edit
2018.5ff00ee0456301c1cf43.js
Edit
2018.5ff00ee0456301c1cf43.js.map
Edit
205.2eb73847215c8d021cc9.js
Edit
205.2eb73847215c8d021cc9.js.map
Edit
2077.a5848ca4b4b9fdebca17.js
Edit
2077.a5848ca4b4b9fdebca17.js.map
Edit
2094.97e7f0876201e76a77fd.js
Edit
2094.97e7f0876201e76a77fd.js.map
Edit
2150.7576285186c713978b39.js
Edit
2150.7576285186c713978b39.js.map
Edit
2152.b55841e6f422682a3891.js
Edit
2152.b55841e6f422682a3891.js.map
Edit
221.0fc4d14d0a67f3a25d64.js
Edit
221.0fc4d14d0a67f3a25d64.js.map
Edit
2218.623d73bd0985ddf5f8c4.js
Edit
2218.623d73bd0985ddf5f8c4.js.map
Edit
2223.e65417164a45701ed9dc.js
Edit
2223.e65417164a45701ed9dc.js.map
Edit
2244.70c156ada2487a05595c.js
Edit
2244.70c156ada2487a05595c.js.map
Edit
2278.f887de0a65e1b784ea9f.js
Edit
2278.f887de0a65e1b784ea9f.js.map
Edit
2288.6a65ba08c6c0f4f83435.js
Edit
2288.6a65ba08c6c0f4f83435.js.map
Edit
2311.73e1a2b949d289f5d6c9.js
Edit
2311.73e1a2b949d289f5d6c9.js.map
Edit
2398.d142e32be48079fc63c0.js
Edit
2398.d142e32be48079fc63c0.js.map
Edit
2405.c1b37a7cc8182472f6a6.js
Edit
2405.c1b37a7cc8182472f6a6.js.map
Edit
2446.0418c7ea000998178d8b.js
Edit
2446.0418c7ea000998178d8b.js.map
Edit
2450.d73c024ff7273aebf911.js
Edit
2450.d73c024ff7273aebf911.js.map
Edit
2586.668c65b61e9ea31b5bca.js
Edit
2586.668c65b61e9ea31b5bca.js.map
Edit
265.ed6933785cc750cbd9ed.js
Edit
265.ed6933785cc750cbd9ed.js.map
Edit
2658.7f70ebc378803654a814.js
Edit
2658.7f70ebc378803654a814.js.map
Edit
2686.ae267304ddd1380c30c7.js
Edit
2686.ae267304ddd1380c30c7.js.map
Edit
2692.fa24ada7d987a7ee05f1.js
Edit
2692.fa24ada7d987a7ee05f1.js.map
Edit
2699.b79e57051a1a63376320.js
Edit
2699.b79e57051a1a63376320.js.map
Edit
2710.e1ac8e57578a838f5bd8.js
Edit
2710.e1ac8e57578a838f5bd8.js.map
Edit
2744.d6b14bf01022bdb8eab5.js
Edit
2744.d6b14bf01022bdb8eab5.js.map
Edit
2745.8049d948cb362dfc6cb3.js
Edit
2745.8049d948cb362dfc6cb3.js.map
Edit
2835.01beb5b1a252d779aad7.js
Edit
2835.01beb5b1a252d779aad7.js.map
Edit
2961.4b27b21453fdbb115dd4.js
Edit
2961.4b27b21453fdbb115dd4.js.map
Edit
2962.85c9dc0cca68efab5e0c.js
Edit
2962.85c9dc0cca68efab5e0c.js.map
Edit
2975.e64aaea6ff35a7d3b3fd.js
Edit
2975.e64aaea6ff35a7d3b3fd.js.map
Edit
3003.f51365051eb27cf765d8.js
Edit
3003.f51365051eb27cf765d8.js.map
Edit
3042.44bad7d2d0536000b808.js
Edit
3042.44bad7d2d0536000b808.js.map
Edit
3062.ad5844391370fcc7525a.js
Edit
3062.ad5844391370fcc7525a.js.map
Edit
3082.704af6779ad700a5fa42.js
Edit
3082.704af6779ad700a5fa42.js.map
Edit
3096.aed61083f1ba4803ae84.js
Edit
3096.aed61083f1ba4803ae84.js.map
Edit
3126.10c85e1f02105e470a69.js
Edit
3126.10c85e1f02105e470a69.js.map
Edit
3169.0b88a5a2340f70961599.js
Edit
3169.0b88a5a2340f70961599.js.map
Edit
3171.c79c28e2611563e2dbcb.js
Edit
3171.c79c28e2611563e2dbcb.js.map
Edit
3182.831f754ed3b6f10441a0.js
Edit
3182.831f754ed3b6f10441a0.js.map
Edit
3192.2cb90eadf3399270363e.js
Edit
3192.2cb90eadf3399270363e.js.map
Edit
3217.c6faaa4f5637068f90f3.js
Edit
3217.c6faaa4f5637068f90f3.js.map
Edit
3259.c8e4d6ad93201a56e49f.js
Edit
3259.c8e4d6ad93201a56e49f.js.map
Edit
3284.79c2897655286b0c1f6d.js
Edit
3284.79c2897655286b0c1f6d.js.map
Edit
3303.225dae64cff0c2280c3b.js
Edit
3303.225dae64cff0c2280c3b.js.map
Edit
3326.cabc370d66d7ecfbd2c3.js
Edit
3326.cabc370d66d7ecfbd2c3.js.map
Edit
344.85cff3029cbbb5463c7e.js
Edit
344.85cff3029cbbb5463c7e.js.map
Edit
3466.fda7da0cb4150e59da98.js
Edit
3466.fda7da0cb4150e59da98.js.map
Edit
3474.74dfd856a9528c758a57.js
Edit
3474.74dfd856a9528c758a57.js.map
Edit
348.fd20e2547f12dbed76c7.js
Edit
348.fd20e2547f12dbed76c7.js.map
Edit
3495.9c1ae6f61edf7aef207b.js
Edit
3495.9c1ae6f61edf7aef207b.js.map
Edit
3501.a0ee7c2b24136aa91eb5.js
Edit
3501.a0ee7c2b24136aa91eb5.js.map
Edit
3520.a3c2b474e2dcaf9879fc.js
Edit
3520.a3c2b474e2dcaf9879fc.js.map
Edit
3605.41e3c44dfe2ca2966198.js
Edit
3605.41e3c44dfe2ca2966198.js.map
Edit
362.e5ce68af98ee6713a4e7.js
Edit
362.e5ce68af98ee6713a4e7.js.map
Edit
3622.0b196041f825b42c5233.js
Edit
3622.0b196041f825b42c5233.js.map
Edit
3630.1ffe9229d5c27fd0823a.js
Edit
3630.1ffe9229d5c27fd0823a.js.map
Edit
3659.f5dc1bb19d36546aadb8.js
Edit
3659.f5dc1bb19d36546aadb8.js.map
Edit
3688.ec5e74c60569e9498687.js
Edit
3688.ec5e74c60569e9498687.js.map
Edit
3718.b570aa4fa35f8dfc686e.js
Edit
3718.b570aa4fa35f8dfc686e.js.map
Edit
3726.84ef8bb1304f7adbc7f3.js
Edit
3726.84ef8bb1304f7adbc7f3.js.map
Edit
398.ceeafcf522343c717c4b.js
Edit
398.ceeafcf522343c717c4b.js.map
Edit
4064.e52eb763993ad947e4a1.js
Edit
4064.e52eb763993ad947e4a1.js.map
Edit
407.594046bd73cc88c29e80.js
Edit
407.594046bd73cc88c29e80.js.map
Edit
4113.3fa5432815c4662eb03e.js
Edit
4113.3fa5432815c4662eb03e.js.map
Edit
4114.c4741f0a73781d3f87dc.js
Edit
4114.c4741f0a73781d3f87dc.js.map
Edit
4120.968e1408d894f8515330.js
Edit
4120.968e1408d894f8515330.js.map
Edit
4162.8b8a683fa98d677f9137.js
Edit
4162.8b8a683fa98d677f9137.js.map
Edit
4209.de7f2b850ee1292a67e5.js
Edit
4209.de7f2b850ee1292a67e5.js.map
Edit
4224.cc13db0c6e3f7fdb05c9.js
Edit
4224.cc13db0c6e3f7fdb05c9.js.map
Edit
4251.28e90ad13c8fe749062c.js
Edit
4251.28e90ad13c8fe749062c.js.map
Edit
4334.396d65b7ba31733108e9.js
Edit
4334.396d65b7ba31733108e9.js.map
Edit
4350.6db49924324f8061d361.js
Edit
4350.6db49924324f8061d361.js.map
Edit
4463.24a3e34bed64cbbb8b99.js
Edit
4463.24a3e34bed64cbbb8b99.js.map
Edit
4514.03e966fee9064d7305dd.js
Edit
4514.03e966fee9064d7305dd.js.map
Edit
4564.ea4a09ba96ddbf74a0ee.js
Edit
4564.ea4a09ba96ddbf74a0ee.js.map
Edit
46.7809585ddbb4791e248a.js
Edit
46.7809585ddbb4791e248a.js.map
Edit
4630.54d7f3b9d384c6b95bbc.js
Edit
4630.54d7f3b9d384c6b95bbc.js.map
Edit
4656.a07d832134b096826a58.js
Edit
4656.a07d832134b096826a58.js.map
Edit
468.d3a2ba8b0d226ca1475b.js
Edit
468.d3a2ba8b0d226ca1475b.js.map
Edit
4680.abd86af55b75e75326ab.js
Edit
4680.abd86af55b75e75326ab.js.map
Edit
4691.2f69f76af87a66a1513c.js
Edit
4691.2f69f76af87a66a1513c.js.map
Edit
4698.c9a2c562b12da12dc66e.js
Edit
4698.c9a2c562b12da12dc66e.js.map
Edit
4791.fc3ef0337811ab73b164.js
Edit
4791.fc3ef0337811ab73b164.js.map
Edit
4814.2d8cb562606e508512d8.js
Edit
4814.2d8cb562606e508512d8.js.map
Edit
4824.2da8107f19d58bf153e0.js
Edit
4824.2da8107f19d58bf153e0.js.map
Edit
4839.f4d2edd5c2678ef2b624.js
Edit
4839.f4d2edd5c2678ef2b624.js.map
Edit
4857.4971a98037d2ec3b663d.js
Edit
4857.4971a98037d2ec3b663d.js.map
Edit
4865.be02c1283a83523c4414.js
Edit
4865.be02c1283a83523c4414.js.map
Edit
494.5463fc5a297eaedd150f.js
Edit
494.5463fc5a297eaedd150f.js.map
Edit
4958.226af5f19bf47305a407.js
Edit
4958.226af5f19bf47305a407.js.map
Edit
4962.bbff24c5a85e9314600a.js
Edit
4962.bbff24c5a85e9314600a.js.map
Edit
4964.1f2cc5acc0078feb7b08.js
Edit
4964.1f2cc5acc0078feb7b08.js.map
Edit
4965.ccdc00d808390be53820.js
Edit
4965.ccdc00d808390be53820.js.map
Edit
5065.a2c71dab50ccb4174ee2.js
Edit
5065.a2c71dab50ccb4174ee2.js.map
Edit
5074.92e2d1ae98dcd913506e.js
Edit
5074.92e2d1ae98dcd913506e.js.map
Edit
5091.987ffc33b70121541e5d.js
Edit
5091.987ffc33b70121541e5d.js.map
Edit
5106.581eaf66a6592320d97a.js
Edit
5106.581eaf66a6592320d97a.js.map
Edit
5110.96d49ea826be96c65045.js
Edit
5110.96d49ea826be96c65045.js.map
Edit
5130.cbdddcd716a093bdbaac.js
Edit
5130.cbdddcd716a093bdbaac.js.map
Edit
5196.9b7364caf64a8583ad01.js
Edit
5196.9b7364caf64a8583ad01.js.map
Edit
5198.2cd64d4e16a385dd9b91.js
Edit
5198.2cd64d4e16a385dd9b91.js.map
Edit
5280.2c29942977baa2dfbe0e.js
Edit
5280.2c29942977baa2dfbe0e.js.map
Edit
5364.0288d9c98f74f26b73e7.js
Edit
5364.0288d9c98f74f26b73e7.js.map
Edit
5446.ad01d0b233122dd49849.js
Edit
5446.ad01d0b233122dd49849.js.map
Edit
5550.5bf3e7d23d6b104740fd.js
Edit
5550.5bf3e7d23d6b104740fd.js.map
Edit
5618.909592bbe054b70f2377.js
Edit
5618.909592bbe054b70f2377.js.map
Edit
5648.a1fc2b0cbbca9bfa1d94.js
Edit
5648.a1fc2b0cbbca9bfa1d94.js.map
Edit
5664.c55be32f6d459ac3f3d8.js
Edit
5664.c55be32f6d459ac3f3d8.js.map
Edit
5671.e1e396b75d7b95ef461f.js
Edit
5671.e1e396b75d7b95ef461f.js.map
Edit
5742.117597ec799ab75cb2f4.js
Edit
5742.117597ec799ab75cb2f4.js.map
Edit
5747.b9389680058c12ffba68.js
Edit
5747.b9389680058c12ffba68.js.map
Edit
5757.5a4b7f2368dd09da42be.js
Edit
5786.c45dfaf9e1d969472e5e.js
Edit
5786.c45dfaf9e1d969472e5e.js.map
Edit
5790.29b0a5797fd46e9664f5.js
Edit
5790.29b0a5797fd46e9664f5.js.map
Edit
5923.b9c876b4bf528d8511cb.js
Edit
5923.b9c876b4bf528d8511cb.js.map
Edit
5984.1efdc4bb85100bd19ca9.js
Edit
5984.1efdc4bb85100bd19ca9.js.map
Edit
5995.5c7a375f33ea1cd16daa.js
Edit
5995.5c7a375f33ea1cd16daa.js.map
Edit
6018.befdd11bf701ea71f7bf.js
Edit
6018.befdd11bf701ea71f7bf.js.map
Edit
6029.bdcbf27bcdd36812f646.js
Edit
6029.bdcbf27bcdd36812f646.js.map
Edit
6088.7f526abfdb4003574c68.js
Edit
6088.7f526abfdb4003574c68.js.map
Edit
613.084d33252856771cf6e1.js
Edit
613.084d33252856771cf6e1.js.map
Edit
6185.2a7c893c6b3f2f0dadb8.js
Edit
6185.2a7c893c6b3f2f0dadb8.js.map
Edit
6208.571f272269524cfd14e7.js
Edit
6208.571f272269524cfd14e7.js.map
Edit
6236.30d1fa6aee173c946c50.js
Edit
6236.30d1fa6aee173c946c50.js.map
Edit
6244.64f83fc5d05560979c51.js
Edit
6244.64f83fc5d05560979c51.js.map
Edit
6260.b8be95165766a81dade2.js
Edit
6260.b8be95165766a81dade2.js.map
Edit
630.56b78dcdaeeb9d9c2967.js
Edit
630.56b78dcdaeeb9d9c2967.js.map
Edit
6302.a2ffa52069511df9772f.js
Edit
6302.a2ffa52069511df9772f.js.map
Edit
6315.f4d87fc6f8ae3cb40e38.js
Edit
6315.f4d87fc6f8ae3cb40e38.js.map
Edit
6414.7520859a2d9cc0a63d7f.js
Edit
6414.7520859a2d9cc0a63d7f.js.map
Edit
6446.1d75a8140260005fffbd.js
Edit
6446.1d75a8140260005fffbd.js.map
Edit
6743.67a52a99e2fdd1ae1e10.js
Edit
6743.67a52a99e2fdd1ae1e10.js.map
Edit
6759.0454d3c1e41385379bdc.js
Edit
6759.0454d3c1e41385379bdc.js.map
Edit
6772.0d4a074848bc323be8f8.js
Edit
6772.0d4a074848bc323be8f8.js.map
Edit
680.726adca366b4ecb272db.js
Edit
680.726adca366b4ecb272db.js.map
Edit
6830.a4b0ecf3a6d784ca7609.js
Edit
6830.a4b0ecf3a6d784ca7609.js.map
Edit
6834.0c9ef40e2f2b5428983d.js
Edit
6834.0c9ef40e2f2b5428983d.js.map
Edit
6857.252a60422ee275193aa7.js
Edit
6857.252a60422ee275193aa7.js.map
Edit
6940.b6c74df14413f0188f0d.js
Edit
6940.b6c74df14413f0188f0d.js.map
Edit
6990.d663924714fc213b17c6.js
Edit
6990.d663924714fc213b17c6.js.map
Edit
7018.5a037d2577fedc8d10f1.js
Edit
7018.5a037d2577fedc8d10f1.js.map
Edit
7031.047b15171c23b248efa0.js
Edit
7031.047b15171c23b248efa0.js.map
Edit
7033.141597840e42815ef6a4.js
Edit
7033.141597840e42815ef6a4.js.map
Edit
7048.3746fc9a274bf8ff72f1.js
Edit
7048.3746fc9a274bf8ff72f1.js.map
Edit
7051.604a402d305e093c00c2.js
Edit
7051.604a402d305e093c00c2.js.map
Edit
7061.f18464bcd6c6d7455662.js
Edit
7061.f18464bcd6c6d7455662.js.map
Edit
7080.9cdd1b7a0bf62b48e1fe.js
Edit
7080.9cdd1b7a0bf62b48e1fe.js.map
Edit
7200.d4425528f6cee80f9931.js
Edit
7200.d4425528f6cee80f9931.js.map
Edit
7235.46f071d3e4d0bb976223.js
Edit
7235.46f071d3e4d0bb976223.js.map
Edit
7246.03f5a8496e53f64602e2.js
Edit
7246.03f5a8496e53f64602e2.js.map
Edit
7249.3bea4aaf890f89fdad45.js
Edit
7249.3bea4aaf890f89fdad45.js.map
Edit
7299.cdff402b076dfea09ead.js
Edit
7299.cdff402b076dfea09ead.js.map
Edit
7348.6fd722455e8c7e077815.js
Edit
7348.6fd722455e8c7e077815.js.map
Edit
7396.ded473b7a47dc42fbb59.js
Edit
7396.ded473b7a47dc42fbb59.js.map
Edit
7466.b7c17c526c7b734dd5f7.js
Edit
7466.b7c17c526c7b734dd5f7.js.map
Edit
7539.5f405cae3b15e1e2f6fa.js
Edit
7539.5f405cae3b15e1e2f6fa.js.map
Edit
7585.084552e02c66201a55be.js
Edit
7585.084552e02c66201a55be.js.map
Edit
7626.38819cc0696f2d25cf99.js
Edit
7626.38819cc0696f2d25cf99.js.map
Edit
7651.5024ed8dd1beb08d01ab.js
Edit
7651.5024ed8dd1beb08d01ab.js.map
Edit
7681.7ef7b4f86e99abd7b7e1.js
Edit
7681.7ef7b4f86e99abd7b7e1.js.map
Edit
7691.0ad86f0c686b19ce829e.js
Edit
7691.0ad86f0c686b19ce829e.js.map
Edit
7790.4c141092868e7208a087.js
Edit
7790.4c141092868e7208a087.js.map
Edit
7806.dff3509790e494ca5a45.js
Edit
7806.dff3509790e494ca5a45.js.map
Edit
7836.afe37ef4be354f0a3b91.js
Edit
7836.afe37ef4be354f0a3b91.js.map
Edit
7882.e1721e9d6ac2d421bcda.js
Edit
7882.e1721e9d6ac2d421bcda.js.map
Edit
7886.8499ded396232466be7d.js
Edit
7886.8499ded396232466be7d.js.map
Edit
7887.a6dcfd824d57598ba1c3.js
Edit
7887.a6dcfd824d57598ba1c3.js.map
Edit
7969.a048d8060cabf1aede33.js
Edit
7969.a048d8060cabf1aede33.js.map
Edit
7996.bd232896e4559d37a26f.js
Edit
7996.bd232896e4559d37a26f.js.map
Edit
8016.8145cd87abcdd0646db2.js
Edit
8016.8145cd87abcdd0646db2.js.map
Edit
8018.c31846109f2dff21d8c4.js
Edit
8018.c31846109f2dff21d8c4.js.map
Edit
8056.4e8f71ed4d507f89b487.js
Edit
8056.4e8f71ed4d507f89b487.js.map
Edit
8177.52abd0953ac914f69e26.js
Edit
8177.52abd0953ac914f69e26.js.map
Edit
8220.aeea4a8f0893b3447b56.js
Edit
8220.aeea4a8f0893b3447b56.js.map
Edit
8224.75bd73bf51ff7a2fc4a0.js
Edit
8224.75bd73bf51ff7a2fc4a0.js.map
Edit
8230.d65bce2998eec95c6082.js
Edit
8230.d65bce2998eec95c6082.js.map
Edit
8260.c1da67af19b9259d5651.js
Edit
8260.c1da67af19b9259d5651.js.map
Edit
8271.0ee36e030014244adb47.js
Edit
8271.0ee36e030014244adb47.js.map
Edit
8332.a62e8632a336661f2969.js
Edit
8332.a62e8632a336661f2969.js.map
Edit
8334.1196f5ddcef25711fc25.js
Edit
8334.1196f5ddcef25711fc25.js.map
Edit
8347.de402f9280cd7a316c57.js
Edit
8347.de402f9280cd7a316c57.js.map
Edit
8390.9de755da2e214cc845a3.js
Edit
8390.9de755da2e214cc845a3.js.map
Edit
8393.30e95ae45cbe5455dcda.js
Edit
8393.30e95ae45cbe5455dcda.js.map
Edit
8477.4dad0537d13cf9315e86.js
Edit
8477.4dad0537d13cf9315e86.js.map
Edit
8494.659892f00c9d15ae441a.js
Edit
8494.659892f00c9d15ae441a.js.map
Edit
8530.0460c988ee4a40ce7769.js
Edit
8530.0460c988ee4a40ce7769.js.map
Edit
8542.317c15ed57f68fcf0c97.js
Edit
8542.317c15ed57f68fcf0c97.js.map
Edit
8547.390120a5caf7646e0e3e.js
Edit
8547.390120a5caf7646e0e3e.js.map
Edit
8566.5c8f392bb383ab92eed0.js
Edit
8566.5c8f392bb383ab92eed0.js.map
Edit
8622.5acf73c1485a11dfb0ab.js
Edit
8622.5acf73c1485a11dfb0ab.js.map
Edit
8706.f17afa6bcdfd511d5b03.js
Edit
8706.f17afa6bcdfd511d5b03.js.map
Edit
874.d24410518317d605c708.js
Edit
874.d24410518317d605c708.js.map
Edit
8813.e5137844631f6ddedbce.js
Edit
8813.e5137844631f6ddedbce.js.map
Edit
8856.2720526447b3adb5c75f.js
Edit
8856.2720526447b3adb5c75f.js.map
Edit
886.5f3383e84b10a6530b97.js
Edit
886.5f3383e84b10a6530b97.js.map
Edit
8864.2f4ee982114c25634e55.js
Edit
8864.2f4ee982114c25634e55.js.map
Edit
8902.71f14964ec6cea84dc8e.js
Edit
8902.71f14964ec6cea84dc8e.js.map
Edit
8932.e59e50ddb63414e0f2b9.js
Edit
8932.e59e50ddb63414e0f2b9.js.map
Edit
8990.665213a5c89afd6b2f83.js
Edit
8990.665213a5c89afd6b2f83.js.map
Edit
9034.a32e36472481cbe5d72d.js
Edit
9034.a32e36472481cbe5d72d.js.map
Edit
9038.f03b25f160057d4a0bf6.js
Edit
9038.f03b25f160057d4a0bf6.js.map
Edit
904.b68cd2a0cd6d68c5f1ae.js
Edit
904.b68cd2a0cd6d68c5f1ae.js.map
Edit
9044.441f64d6d946cc93be46.js
Edit
9044.441f64d6d946cc93be46.js.map
Edit
9147.8309cadbc384209d62e5.js
Edit
9147.8309cadbc384209d62e5.js.map
Edit
9150.38487365ffd149b730af.js
Edit
9150.38487365ffd149b730af.js.map
Edit
9292.e6befb57f8f116ad95a8.js
Edit
9292.e6befb57f8f116ad95a8.js.map
Edit
9355.95d7e1782f93f339549e.js
Edit
9355.95d7e1782f93f339549e.js.map
Edit
9388.88d95a230e9432e7037b.js
Edit
9388.88d95a230e9432e7037b.js.map
Edit
9390.c72fcd228017f7647b38.js
Edit
9390.c72fcd228017f7647b38.js.map
Edit
9414.642bfe0d5eb16efd0c16.js
Edit
9414.642bfe0d5eb16efd0c16.js.map
Edit
9449.502f2a824d0203e88d4d.js
Edit
9449.502f2a824d0203e88d4d.js.map
Edit
946.48c5e8c688cf29424295.js
Edit
946.48c5e8c688cf29424295.js.map
Edit
9473.e6fc327da88d88712828.js
Edit
9473.e6fc327da88d88712828.js.map
Edit
9510.1e255e96fe40aad2ed6f.js
Edit
9510.1e255e96fe40aad2ed6f.js.map
Edit
9521.e65411d726c29d77c526.js
Edit
9521.e65411d726c29d77c526.js.map
Edit
9538.a2289ff9ad06e24e391f.js
Edit
9538.a2289ff9ad06e24e391f.js.map
Edit
957.3c35d66aa698d8bdfe05.js
Edit
957.3c35d66aa698d8bdfe05.js.map
Edit
9571.41558d40bff9ea8c0726.js
Edit
9571.41558d40bff9ea8c0726.js.map
Edit
9578.9cfae16465bb9bc1f336.js
Edit
9578.9cfae16465bb9bc1f336.js.map
Edit
968.d4b150f9211c478b7b05.js
Edit
968.d4b150f9211c478b7b05.js.map
Edit
970.46f17b76711e4961a575.js
Edit
970.46f17b76711e4961a575.js.map
Edit
9700.02180b7a06c8a1f7606b.js
Edit
9700.02180b7a06c8a1f7606b.js.map
Edit
9744.aa6baaf988a68fa6a9ba.js
Edit
9744.aa6baaf988a68fa6a9ba.js.map
Edit
9820.6b462d83575efd05c883.js
Edit
9820.6b462d83575efd05c883.js.map
Edit
9838.06bd7dfd4290786f80e3.js
Edit
9838.06bd7dfd4290786f80e3.js.map
Edit
9992.fb08517d3ff77e887443.js
Edit
9992.fb08517d3ff77e887443.js.map
Edit
9996.21c451f22ff76b4bb683.js
Edit
9996.21c451f22ff76b4bb683.js.map
Edit
AdminAuthentication.076c98c6380fd1e42f7e.js
Edit
AdminAuthentication.076c98c6380fd1e42f7e.js.map
Edit
AdminEditOrgPage.8df8167ea6ff8f4803bd.js
Edit
AdminEditOrgPage.8df8167ea6ff8f4803bd.js.map
Edit
AdminListOrgsPage.176dac9ed391bda8952b.js
Edit
AdminListOrgsPage.176dac9ed391bda8952b.js.map
Edit
AdminSettings.7373ed8fa9b943bb2098.js
Edit
AdminSettings.7373ed8fa9b943bb2098.js.map
Edit
AlertGroups.81264e6e5009c36eed6e.js
Edit
AlertGroups.81264e6e5009c36eed6e.js.map
Edit
AlertRuleListIndex.98e7328feeaa2ffe67eb.js
Edit
AlertRuleListIndex.98e7328feeaa2ffe67eb.js.map
Edit
AlertingDisabled.b2c834be0ca4666dd793.js
Edit
AlertingDisabled.b2c834be0ca4666dd793.js.map
Edit
AlertingGroupDetails.3a2c6ef8085b505852e4.js
Edit
AlertingGroupDetails.3a2c6ef8085b505852e4.js.map
Edit
AlertingGroupEdit.69cfe9d5f37a1fc65326.js
Edit
AlertingGroupEdit.69cfe9d5f37a1fc65326.js.map
Edit
AlertingHome.06f307ab9a2a5d8b7f93.js
Edit
AlertingHome.06f307ab9a2a5d8b7f93.js.map
Edit
AlertingImportFromDSRules.f1224bcb622d25e2c94f.js
Edit
AlertingImportFromDSRules.f1224bcb622d25e2c94f.js.map
Edit
AlertingRedirectToRule.9ed1d16829d6833d2827.js
Edit
AlertingRedirectToRule.9ed1d16829d6833d2827.js.map
Edit
AlertingRuleForm.2e69d3f00eb6221e7355.js
Edit
AlertingRuleForm.2e69d3f00eb6221e7355.js.map
Edit
AlertingSettings.7a5f782f877cec4790cb.js
Edit
AlertingSettings.7a5f782f877cec4790cb.js.map
Edit
AlertingTriage.1174f36b4937ad0047c1.js
Edit
AlertingTriage.1174f36b4937ad0047c1.js.map
Edit
BenchmarksPage.ef387f4598ba2b2236ad.js
Edit
BenchmarksPage.ef387f4598ba2b2236ad.js.map
Edit
BookmarksPage.8fe93eb7377073f0c985.js
Edit
BookmarksPage.8fe93eb7377073f0c985.js.map
Edit
ChangePasswordPage.f21b0b1dd107ccd33c1a.js
Edit
ChangePasswordPage.f21b0b1dd107ccd33c1a.js.map
Edit
Connections.949b6389e73bcadb2109.js
Edit
Connections.949b6389e73bcadb2109.js.map
Edit
ContactPoints.9ae2d1927d60c6169b87.js
Edit
ContactPoints.9ae2d1927d60c6169b87.js.map
Edit
CorrelationsFeatureToggle.ec2f1aefce6b456e15eb.js
Edit
CorrelationsFeatureToggle.ec2f1aefce6b456e15eb.js.map
Edit
CorrelationsPage.bd7fcd24ed0b5fe8ac3e.js
Edit
CorrelationsPage.bd7fcd24ed0b5fe8ac3e.js.map
Edit
CreateTeam.429acf93986740280312.js
Edit
CreateTeam.429acf93986740280312.js.map
Edit
DashboardImport.3e9b6f980b81d6f1c755.js
Edit
DashboardImport.3e9b6f980b81d6f1c755.js.map
Edit
DashboardListPage.abeb0c29f072f888f9fb.js
Edit
DashboardListPage.abeb0c29f072f888f9fb.js.map
Edit
DashboardPage.72557fe6dd1a022b7d48.js
Edit
DashboardPage.72557fe6dd1a022b7d48.js.map
Edit
DashboardPageProxy.80adfefad8a885d8e2ef.js
Edit
DashboardPageProxy.80adfefad8a885d8e2ef.js.map
Edit
DashboardScenePage.83fe1fa9509b50120d65.js
Edit
DashboardScenePage.83fe1fa9509b50120d65.js.map
Edit
EditContactPoint.0c33428ddc8ba974d946.js
Edit
EditContactPoint.0c33428ddc8ba974d946.js.map
Edit
EditMuteTiming.8760cc9c77560acf0cd6.js
Edit
EditMuteTiming.8760cc9c77560acf0cd6.js.map
Edit
EditRepositoryPage.d71faaab1af2c8d70a22.js
Edit
EditRepositoryPage.d71faaab1af2c8d70a22.js.map
Edit
EmbeddedDashboard.57de550bce819e3d52e6.js
Edit
EmbeddedDashboard.57de550bce819e3d52e6.js.map
Edit
FileHistoryPage.154ab77c19bbe0ebed20.js
Edit
FileHistoryPage.154ab77c19bbe0ebed20.js.map
Edit
FileStatusPage.36f58cd61202ec603d22.js
Edit
FileStatusPage.36f58cd61202ec603d22.js.map
Edit
FolderAlerting.0b9acb6c42276aaee57d.js
Edit
FolderAlerting.0b9acb6c42276aaee57d.js.map
Edit
FolderLibraryPanelsPage.44f8cabf542ec314d176.js
Edit
FolderLibraryPanelsPage.44f8cabf542ec314d176.js.map
Edit
GettingStartedPage.4bea37f1c9bdcfd0f41b.js
Edit
GettingStartedPage.4bea37f1c9bdcfd0f41b.js.map
Edit
GlobalConfig.1377596507974d18caf6.js
Edit
GlobalConfig.1377596507974d18caf6.js.map
Edit
HistoryPage.4da98f4fa313ee3676ca.js
Edit
HistoryPage.4da98f4fa313ee3676ca.js.map
Edit
LdapSettingsPage.0e9f08d5e59150ecf466.js
Edit
LdapSettingsPage.0e9f08d5e59150ecf466.js.map
Edit
LibraryPanelsPage.824580d7751526c658e2.js
Edit
LibraryPanelsPage.824580d7751526c658e2.js.map
Edit
ListPublicDashboardPage.64c26ffd3ebe6c9076f3.js
Edit
ListPublicDashboardPage.64c26ffd3ebe6c9076f3.js.map
Edit
LoginPage.db48423ed1b455431daa.js
Edit
LoginPage.db48423ed1b455431daa.js.map
Edit
MetricsDrilldownRedirect.fcad4bdff346974952f4.js
Edit
MetricsDrilldownRedirect.fcad4bdff346974952f4.js.map
Edit
MigrateToCloud.5b474ad00e8a3d979750.js
Edit
MigrateToCloud.5b474ad00e8a3d979750.js.map
Edit
NewMuteTiming.2f6302420674f1c73aba.js
Edit
NewMuteTiming.2f6302420674f1c73aba.js.map
Edit
NewOrgPage.be31eaee06e2043d609b.js
Edit
NewOrgPage.be31eaee06e2043d609b.js.map
Edit
NewReceiverView.f1d83eb66a39882b8661.js
Edit
NewReceiverView.f1d83eb66a39882b8661.js.map
Edit
NewSilencePage.2643a48031f7e5d8f376.js
Edit
NewSilencePage.2643a48031f7e5d8f376.js.map
Edit
NotificationPoliciesPage.9333d10ecad1452ebf27.js
Edit
NotificationPoliciesPage.9333d10ecad1452ebf27.js.map
Edit
NotificationsPage.57df4ff5ba1433a4345d.js
Edit
NotificationsPage.57df4ff5ba1433a4345d.js.map
Edit
OrgDetailsPage.7b5835c30585aae81343.js
Edit
OrgDetailsPage.7b5835c30585aae81343.js.map
Edit
PlaylistEditPage.8310e384af659e40c313.js
Edit
PlaylistEditPage.8310e384af659e40c313.js.map
Edit
PlaylistNewPage.f45b642a98a747e28c0d.js
Edit
PlaylistNewPage.f45b642a98a747e28c0d.js.map
Edit
PlaylistPage.9af74957a1cdfb125338.js
Edit
PlaylistPage.9af74957a1cdfb125338.js.map
Edit
PlaylistStartPage.8011a98267ac64c7fa05.js
Edit
PlaylistStartPage.8011a98267ac64c7fa05.js.map
Edit
PluginExtensionsLog.54c02047d569b0c05823.js
Edit
PluginExtensionsLog.54c02047d569b0c05823.js.map
Edit
PluginListPage.e50c18fed21c23ca4ee8.js
Edit
PluginListPage.e50c18fed21c23ca4ee8.js.map
Edit
PluginPage.ae424531bce63dd4721e.js
Edit
PluginPage.ae424531bce63dd4721e.js.map
Edit
ProfileFeatureTogglePage.27378dcbb7520611348e.js
Edit
ProfileFeatureTogglePage.27378dcbb7520611348e.js.map
Edit
ProvisioningWizardPage.c4e4a8f431b4719b0e95.js
Edit
ProvisioningWizardPage.c4e4a8f431b4719b0e95.js.map
Edit
PublicDashboardPage.33d6ec8f685f1b70b9a6.js
Edit
PublicDashboardPage.33d6ec8f685f1b70b9a6.js.map
Edit
RecentlyDeleted.5e0ec16474d939fd9683.js
Edit
RecentlyDeleted.5e0ec16474d939fd9683.js.map
Edit
RecentlyDeletedPage.1dbc2b80b28204de8237.js
Edit
RecentlyDeletedPage.1dbc2b80b28204de8237.js.map
Edit
RepositoryListPage.ec3a0af1cbe2740800bf.js
Edit
RepositoryListPage.ec3a0af1cbe2740800bf.js.map
Edit
RepositoryStatusPage.9aee60589e35a4a19ec2.js
Edit
RepositoryStatusPage.9aee60589e35a4a19ec2.js.map
Edit
SelectOrgPage.910a8d842019a6d7fe93.js
Edit
SelectOrgPage.910a8d842019a6d7fe93.js.map
Edit
SendResetMailPage.513361d6980f98ff8139.js
Edit
SendResetMailPage.513361d6980f98ff8139.js.map
Edit
ServerStats.2830ca154f465dbdecea.js
Edit
ServerStats.2830ca154f465dbdecea.js.map
Edit
ServiceAccountCreatePage.80fcbdd2b7f5aa4e2da1.js
Edit
ServiceAccountCreatePage.80fcbdd2b7f5aa4e2da1.js.map
Edit
ServiceAccountPage.48944056459bb412ff33.js
Edit
ServiceAccountPage.48944056459bb412ff33.js.map
Edit
ServiceAccountsPage.d20b1eb9f87661f10b45.js
Edit
ServiceAccountsPage.d20b1eb9f87661f10b45.js.map
Edit
SignupInvited.fe2c29f380e9888c28cf.js
Edit
SignupInvited.fe2c29f380e9888c28cf.js.map
Edit
SilencesTablePage.b998fdbdcc3d60a81739.js
Edit
SilencesTablePage.b998fdbdcc3d60a81739.js.map
Edit
SnapshotListPage.6feaf24adb92e6a302ec.js
Edit
SnapshotListPage.6feaf24adb92e6a302ec.js.map
Edit
SoloPanelPage.7fc6a934aaadf4c1f84d.js
Edit
SoloPanelPage.7fc6a934aaadf4c1f84d.js.map
Edit
SoloPanelPageOld.bde57e000dd0a0108685.js
Edit
SoloPanelPageOld.bde57e000dd0a0108685.js.map
Edit
SupportBundles.1f46603ad3494624d67a.js
Edit
SupportBundles.1f46603ad3494624d67a.js.map
Edit
SupportBundlesCreate.5eaea61a9713f057277b.js
Edit
SupportBundlesCreate.5eaea61a9713f057277b.js.map
Edit
TeamList.6b088f83e6e8cb66b21d.js
Edit
TeamList.6b088f83e6e8cb66b21d.js.map
Edit
TeamPages.9d8b5dceef8be43c6923.js
Edit
TeamPages.9d8b5dceef8be43c6923.js.map
Edit
Templates.7a02a8497ebca052dcfb.js
Edit
Templates.7a02a8497ebca052dcfb.js.map
Edit
TestStuffPage.982c641592b2f7c9db40.js
Edit
TestStuffPage.982c641592b2f7c9db40.js.map
Edit
ThemePlayground.aeeec77fd8e9c1482f55.js
Edit
ThemePlayground.aeeec77fd8e9c1482f55.js.map
Edit
UserAdminPage.fc4d562eef05d9f59aca.js
Edit
UserAdminPage.fc4d562eef05d9f59aca.js.map
Edit
UserCreatePage.b7036214c66612fb31e9.js
Edit
UserCreatePage.b7036214c66612fb31e9.js.map
Edit
UserInvitePage.4a9bcd4084d7ae454c73.js
Edit
UserInvitePage.4a9bcd4084d7ae454c73.js.map
Edit
UserListPage.a452e1153ae820f58ac9.js
Edit
UserListPage.a452e1153ae820f58ac9.js.map
Edit
UserProfileEditPage.82c11690282e669eabb1.js
Edit
UserProfileEditPage.82c11690282e669eabb1.js.map
Edit
alert-rules-drawer-content.c95bb5ddd3fc813cae92.js
Edit
alert-rules-drawer-content.c95bb5ddd3fc813cae92.js.map
Edit
alert-rules-toolbar-button.0d86c1adae7edb55ff76.js
Edit
alert-rules-toolbar-button.0d86c1adae7edb55ff76.js.map
Edit
alertListPanel.0110106a8d1ab70d65d5.js
Edit
alertListPanel.0110106a8d1ab70d65d5.js.map
Edit
alertmanagerPlugin.2b59de5e7b7a556f87f1.js
Edit
alertmanagerPlugin.2b59de5e7b7a556f87f1.js.map
Edit
annoListPanel.0005a0eab0b05e24d970.js
Edit
annoListPanel.0005a0eab0b05e24d970.js.map
Edit
app.8385deda1df49aa75ec2.js
Edit
app.8385deda1df49aa75ec2.js.map
Edit
assets-manifest.json
Edit
barChartPanel.eecdaeab7d146d477721.js
Edit
barChartPanel.eecdaeab7d146d477721.js.map
Edit
barGaugePanel.6d9e94bbb72ba92a0e9b.js
Edit
barGaugePanel.6d9e94bbb72ba92a0e9b.js.map
Edit
candlestickPanel.af0e0decd06e7b7ab286.js
Edit
candlestickPanel.af0e0decd06e7b7ab286.js.map
Edit
canvasPanel.ddab72fab6e58c3419b2.js
Edit
canvasPanel.ddab72fab6e58c3419b2.js.map
Edit
cloudwatchPlugin.06ef34f60000c4f7ea37.js
Edit
cloudwatchPlugin.06ef34f60000c4f7ea37.js.map
Edit
dark.b66fa87185b9a313ec14.js
Edit
dashListPanel.23b954da0c4888602048.js
Edit
dashListPanel.23b954da0c4888602048.js.map
Edit
dataGridPanel.bb5d4b678cba38dd380b.js
Edit
debugPanel.fff63da32084d7a2e236.js
Edit
debugPanel.fff63da32084d7a2e236.js.map
Edit
elasticsearchPlugin.3f2edb012f5162b48903.js
Edit
elasticsearchPlugin.3f2edb012f5162b48903.js.map
Edit
explore-feature-toggle-page.3de03fa91c88d05cea1c.js
Edit
explore-feature-toggle-page.3de03fa91c88d05cea1c.js.map
Edit
explore.dd32637df83326225e0d.js
Edit
explore.dd32637df83326225e0d.js.map
Edit
flamegraphPanel.cc6c5b4bcd69e406fbb7.js
Edit
flamegraphPanel.cc6c5b4bcd69e406fbb7.js.map
Edit
gaugePanel.5da3c4e39a652e281cc4.js
Edit
gaugePanel.5da3c4e39a652e281cc4.js.map
Edit
gazetteer
Edit
geomapPanel.67ebb4567e9b5fa5074b.js
Edit
gettingStartedPanel.833059170dbbf8d5c4bf.js
Edit
gettingStartedPanel.833059170dbbf8d5c4bf.js.map
Edit
grafana.1492.25120d27db88f863e058.css
Edit
grafana.4350.a45e45977094df4a0bc9.css
Edit
grafana.5790.ffb3a9cd952d3cd7471b.css
Edit
grafana.DashboardPage.a66335f88cd003e4a44f.css
Edit
grafana.DashboardPageProxy.a66335f88cd003e4a44f.css
Edit
grafana.app.1f6473bb54b1e1647be8.css
Edit
grafana.dark.1e8d85816912aadbbba5.css
Edit
grafana.dataGridPanel.c1fc5db1829b1b31eb4d.css
Edit
grafana.geomapPanel.0057d964fa972bb207ec.css
Edit
grafana.light.111a5a99fcebc0962ddc.css
Edit
grafana.livePanel.25120d27db88f863e058.css
Edit
grafana.react-monaco-editor.ffb3a9cd952d3cd7471b.css
Edit
grafana.swagger.d0a2da197b9827204ac1.css
Edit
grafana.tablePanel.25120d27db88f863e058.css
Edit
grafanaPlugin.f21cdb4b84a732cc9dd8.js
Edit
grafanaPlugin.f21cdb4b84a732cc9dd8.js.map
Edit
heatmapPanel.7834b997bc573eddba88.js
Edit
heatmapPanel.7834b997bc573eddba88.js.map
Edit
histogramPanel.9953bfeccf8774500c0c.js
Edit
histogramPanel.9953bfeccf8774500c0c.js.map
Edit
img
Edit
influxdbPlugin.7a899e63be0a65d41e13.js
Edit
influxdbPlugin.7a899e63be0a65d41e13.js.map
Edit
light.827d442410485e491818.js
Edit
livePanel.2a43f499bc746d928d45.js
Edit
livePanel.2a43f499bc746d928d45.js.map
Edit
logsPanel.a328022d248508a083c1.js
Edit
logsPanel.a328022d248508a083c1.js.map
Edit
loki-query-field.f9a0b82b636d4821760c.js
Edit
loki-query-field.f9a0b82b636d4821760c.js.map
Edit
maps
Edit
mixedPlugin.3a69de93f366afbb2f85.js
Edit
newsPanel.c17f40f7c88ea14620e7.js
Edit
newsPanel.c17f40f7c88ea14620e7.js.map
Edit
nodeGraphPanel.f717a9075d994a9a8af4.js
Edit
nodeGraphPanel.f717a9075d994a9a8af4.js.map
Edit
opentsdbPlugin.1795eab1c223ea030c2e.js
Edit
opentsdbPlugin.1795eab1c223ea030c2e.js.map
Edit
pieChartPanel.45166aa6d57d163817ea.js
Edit
pieChartPanel.45166aa6d57d163817ea.js.map
Edit
prometheusPlugin.c3a55eb5353085fc3d2b.js
Edit
prometheusPlugin.c3a55eb5353085fc3d2b.js.map
Edit
radialBarPanel.294c52d497d8f5c2bebb.js
Edit
radialBarPanel.294c52d497d8f5c2bebb.js.map
Edit
runtime.a37cc2f12a959f33871a.js
Edit
runtime.a37cc2f12a959f33871a.js.map
Edit
sql-query-editor.e767d4a2aef360034bd9.js
Edit
sql-query-editor.e767d4a2aef360034bd9.js.map
Edit
statPanel.3a7f191bfb27fd320014.js
Edit
statPanel.3a7f191bfb27fd320014.js.map
Edit
stateTimelinePanel.08d857b143ef89dc195f.js
Edit
stateTimelinePanel.08d857b143ef89dc195f.js.map
Edit
static
Edit
statusHistoryPanel.29f7b8dc01039ba795af.js
Edit
statusHistoryPanel.29f7b8dc01039ba795af.js.map
Edit
swagger.06875a6266679f54141d.js
Edit
swagger.06875a6266679f54141d.js.map
Edit
tablePanel.43861ce2a60617dcd19d.js
Edit
tablePanel.43861ce2a60617dcd19d.js.map
Edit
textPanel.867ee60d01b2039aa159.js
Edit
textPanel.867ee60d01b2039aa159.js.map
Edit
timeseriesPanel.b4a947da450030262a31.js
Edit
timeseriesPanel.b4a947da450030262a31.js.map
Edit
tracesPanel.35bfc3e5ff6bea4212a3.js
Edit
tracesPanel.35bfc3e5ff6bea4212a3.js.map
Edit
trendPanel.001aff2bd153e737c464.js
Edit
trendPanel.001aff2bd153e737c464.js.map
Edit
vis-data.b34535ebabc0fcb91557.js
Edit
vis-data.b34535ebabc0fcb91557.js.map
Edit
vis-network.1b41caf21892c9525709.js
Edit
vis-network.1b41caf21892c9525709.js.map
Edit
welcomeBanner.1a693c9dc02006be4f0b.js
Edit
welcomeBanner.1a693c9dc02006be4f0b.js.map
Edit
xychart.cb20af67a6c495ba6ccd.js
Edit
xychart.cb20af67a6c495ba6ccd.js.map
Edit