{"version":3,"file":"main-bundle.js?h=8574f6c84a2692a32c3d","mappings":";;;;;;;;;AAAAA,MAAM,CAACC,kBAAkB,GAAG;EAC3B,eAAe,EAAE,SAAS;EAC1B,YAAY,EAAE,SAAS;EACvB,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,SAAS;EACtB,gBAAgB,EAAE,mCAAmC;EACrD,iBAAiB,EAAE,wEAAwE;EAC3F,oBAAoB,EAAE,sCAAsC;EAC5D,qBAAqB,EAAE,+BAA+B;EACtD,mBAAmB,EAAE,sCAAsC;EAC3D,qBAAqB,EAAE,MAAM;EAC7B,oBAAoB,EAAE,UAAU;EAChC,uBAAuB,EAAE,4BAA4B;EACrD,kBAAkB,EAAE,2EAA2E;EAC/F,UAAU,EAAE,sCAAsC;EAClD,aAAa,EAAE;AAChB,CAAC;AAACD,MAAM,CAACE,MAAM,GAAG,IAAI;AACtBC,MAAM,CAACC,OAAO,GAAGH,kBAAkB,C;;;;;;;;;;;;;;;;;;;;;ACjB5B,IAAMI,eAAe,gBAAAC,YAAA,CACxB,SAAAD,gBAAYE,EAAE,EAAE;EAAAC,eAAA,OAAAH,eAAA;EACZ,IAAI,CAACE,EAAE,GAAGA,EAAE;AAChB,CAAC,E;;;;;;;;;;;;;;;;;ACHLE,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,uBAAuB,EACxD,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,eAAe,EACxF,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,IAAI,EACxF,UAAUC,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAEC,YAAY,EAAEC,eAAe,EAAEC,aAAa,EACrFC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,cAAc,EAAEC,iBAAiB,EAAEC,EAAE,EAAE;EAEtEX,MAAM,CAACY,QAAQ,GAAG,IAAI;EACtBZ,MAAM,CAACa,UAAU,GAAG,IAAI;EACxBb,MAAM,CAACc,cAAc,GAAG,IAAI;EAC5Bd,MAAM,CAACe,kBAAkB,GAAG,EAAE;EAC9Bf,MAAM,CAACgB,eAAe,GAAG,KAAK;EAC9BhB,MAAM,CAACiB,WAAW,GAAGV,SAAS,CAACW,mBAAmB;EAClDlB,MAAM,CAACmB,IAAI,GAAG,QAAQ;EACtBnB,MAAM,CAACoB,aAAa,GAAGlB,aAAa,CAACkB,aAAa;EAClDpB,MAAM,CAACqB,QAAQ,GAAGnB,aAAa,CAACmB,QAAQ;EACxCrB,MAAM,CAACsB,uBAAuB,GAAGpB,aAAa,CAACoB,uBAAuB;EACtEtB,MAAM,CAACuB,iBAAiB,GAAGd,cAAc,CAACe,SAAS,CAAC,wDAAwD,EAAE;IAAEC,GAAG,EAAEzB,MAAM,CAACsB;EAAwB,CAAC,CAAC;EACtJtB,MAAM,CAAC0B,qBAAqB,GAAG,SAAS;EACxC1B,MAAM,CAAC2B,YAAY,GAAG,CAAC,CAAC,CAAC;EACzB3B,MAAM,CAAC4B,SAAS,GAAG,EAAE;EACrB5B,MAAM,CAAC6B,YAAY,GAAG,CAAC,CAAC;EACxB7B,MAAM,CAAC8B,gBAAgB,GAAG,CAAC,CAAC;EAE5B9B,MAAM,CAAC+B,IAAI,GAAG;IACVC,eAAe,EAAE,CAAC;IAClBC,eAAe,EAAE,CAAC;IAClBC,gBAAgB,EAAE;EACtB,CAAC;EAEDlC,MAAM,CAACmC,IAAI,GAAG;IAAE,QAAQ,EAAE9C,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAG;EAAK,CAAC;EAE3DpC,MAAM,CAACqC,GAAG,CAAC,+BAA+B,EAAE,UAAUC,KAAK,EAAEC,MAAM,EAAE;IACjEvC,MAAM,CAACqB,QAAQ,GAAGkB,MAAM;EAC5B,CAAC,CAAC;EAEFvC,MAAM,CAACwC,aAAa,GAAGnC,aAAa,CAACmC,aAAa;EAElDxC,MAAM,CAACyC,YAAY,GAAG,CACtB;IAAEC,IAAI,EAAE1C,MAAM,CAAC0B;EAAsB,CAAC,EACtC;IAAEgB,IAAI,EAAE;EAAU,CAAC,EACnB;IAAEA,IAAI,EAAE;EAAW,CAAC,EACpB;IAAEA,IAAI,EAAE;EAAW,CAAC,CAAC;EAErB1C,MAAM,CAAC2C,WAAW,GAAG;IACjBD,IAAI,EAAE,EAAE;IACRE,QAAQ,EAAE,CACN;MACIF,IAAI,EAAE,IAAI;MACVG,KAAK,EAAE,IAAI;MACXC,KAAK,EAAE,IAAI;MACXC,WAAW,EAAE;IACjB,CAAC,CACJ;IACDC,SAAS,EAAE,CACP;MACIC,KAAK,EAAE,IAAI;MACXC,IAAI,EAAE;IACV,CAAC,EACD;MACID,KAAK,EAAE,IAAI;MACXC,IAAI,EAAE;IACV,CAAC,CACJ;IACDC,OAAO,EAAE,CAAC;IACVC,EAAE,EAAE,CAAC;IACLC,MAAM,EAAE,QAAQ;IAChBC,QAAQ,EAAEpD,aAAa,CAACqD,QAAQ;IAChCC,mBAAmB,EAAE,IAAI;IACzBC,aAAa,EAAE,CAAC;IAChBC,YAAY,EAAE,CAAC;IACfC,iBAAiB,EAAE,KAAK;IACxBC,mBAAmB,EAAE;EACzB,CAAC,CAAC,CAAC;;EAEH5D,MAAM,CAAC6D,aAAa,GAAG,YAAW;IAC9BC,CAAC,CAACC,OAAO,CAAC,CAAC;IACX3D,eAAe,CAACyD,aAAa,CAAC,CAAC,CAACG,IAAI,CAAC,UAAAC,IAAI,EAAI;MACzCjE,MAAM,CAAC4B,SAAS,GAAG,CAAAqC,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEC,IAAI,KAAI,EAAE;IACvC,CAAC,CAAC,SAAM,CAAC,UAAAC,GAAG,EAAI;MACZhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC,WAAQ,CAAC,YAAM;MACbL,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACN,CAAC;EACDrE,MAAM,CAAC6D,aAAa,CAAC,CAAC;EAEtB,SAASS,gBAAgBA,CAAA,EAAG;IACxBtE,MAAM,CAACa,UAAU,GAAG,IAAI;IACxBb,MAAM,CAACc,cAAc,GAAG,IAAI;IAC5Bd,MAAM,CAAC2C,WAAW,GAAG;MACjBD,IAAI,EAAE,EAAE;MACRE,QAAQ,EAAE,CACN;QACIF,IAAI,EAAE,IAAI;QACVG,KAAK,EAAE,IAAI;QACXC,KAAK,EAAE,IAAI;QACXC,WAAW,EAAE,IAAI;QACjBwB,gBAAgB,EAAE;MACtB,CAAC,CACJ;MACDvB,SAAS,EAAE,CACP;QACIC,KAAK,EAAE,IAAI;QACXC,IAAI,EAAE;MACV,CAAC,EACD;QACID,KAAK,EAAE,IAAI;QACXC,IAAI,EAAE;MACV,CAAC,CACJ;MACDC,OAAO,EAAE,CAAC;MACVC,EAAE,EAAE,CAAC;MACLC,MAAM,EAAE,QAAQ;MAChBC,QAAQ,EAAEpD,aAAa,CAACqD,QAAQ;MAChCC,mBAAmB,EAAE,IAAI;MACzBC,aAAa,EAAE,CAAC;MAChBC,YAAY,EAAE,CAAC;MACfC,iBAAiB,EAAE,KAAK;MACxBC,mBAAmB,EAAE;IACzB,CAAC,CAAC,CAAC;;IAEHpD,QAAQ,CAAC,YAAW;MAChBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,EAAE,GAAG,CAAC;EACX;EAEAxE,MAAM,CAACyE,mBAAmB,GAAG,YAAU;IACnCzE,MAAM,CAAC0E,UAAU,GAAGtE,eAAe,CAACsE,UAAU,CAAC,CAAC;IAChD,IAAI1E,MAAM,CAAC0E,UAAU,EAAE;MACnB1E,MAAM,CAAC2B,YAAY,GAAG,GAAG;IAC7B;EACJ,CAAC;EAED3B,MAAM,CAACyE,mBAAmB,CAAC,CAAC;EAE5BzE,MAAM,CAACqC,GAAG,CAAC,kBAAkB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAClDlE,MAAM,CAACa,UAAU,GAAG,IAAI;IACxBb,MAAM,CAACc,cAAc,GAAG,IAAI;IAE5Bd,MAAM,CAAC2E,gBAAgB,GAAG,CAAC;IAC3B3E,MAAM,CAAC4E,aAAa,GAAG,CAAC;IAExB,IAAIV,IAAI,CAAC/C,IAAI,IAAI,KAAK,EAClBnB,MAAM,CAACmB,IAAI,GAAG,KAAK,CAAC,KACpB;MACAnB,MAAM,CAACmB,IAAI,GAAG,QAAQ;IAC1B;IACA,IAAI,OAAO+C,IAAI,CAACW,eAAe,KAAK,WAAW,EAC3C7E,MAAM,CAAC6E,eAAe,GAAGX,IAAI,CAACW,eAAe,CAAC,KAE9C7E,MAAM,CAAC6E,eAAe,GAAG,KAAK;IAClC7E,MAAM,CAACgB,eAAe,GAAGkD,IAAI,CAAClD,eAAe,IAAI,KAAK;IACtDhB,MAAM,CAACe,kBAAkB,GAAG,EAAE;IAC9Bf,MAAM,CAAC8E,eAAe,CAACC,YAAY,CAAC,CAAC;IACrCT,gBAAgB,CAAC,CAAC;IAClBU,OAAO,CAACC,GAAG,CAACjF,MAAM,CAAC2C,WAAW,CAACa,mBAAmB,CAAC;IACnDxD,MAAM,CAACkF,WAAW,CAAC,KAAK,CAAC;IACzB7E,aAAa,CAAC8E,UAAU,CAAC7E,QAAQ,EAAE,YAAW;MAC1C,IAAIN,MAAM,CAACmB,IAAI,IAAI,KAAK,EAAE;QACtB2C,CAAC,CAAC,uBAAuB,CAAC,CAACU,OAAO,CAAC,eAAe,CAAC;MACvD;MACA,IAAIxE,MAAM,CAACmB,IAAI,IAAI,QAAQ,EAAE;QACzB2C,CAAC,CAAC,qBAAqB,CAAC,CAACsB,KAAK,CAAC,CAAC;MACpC,CAAC,MACI;QACDtB,CAAC,CAAC,qBAAqB,CAAC,CAACU,OAAO,CAAC,eAAe,CAAC;MACrD;IACJ,CAAC,CAAC;EACN,CAAC,CAAC;EAEFxE,MAAM,CAACqF,uBAAuB,GAAG,UAASzE,QAAQ,EAAEO,IAAI,EAAC;IACrDnB,MAAM,CAACsF,YAAY,CAAC,IAAI,CAAC;IAEzBtF,MAAM,CAACmB,IAAI,GAAGA,IAAI;IAClBnB,MAAM,CAACuF,gBAAgB,GAAG,CAAC;IAC3BvF,MAAM,CAAC+B,IAAI,CAACC,eAAe,GAAG,CAAC;IAC/BhC,MAAM,CAAC+B,IAAI,CAACG,gBAAgB,GAAG,CAAC;IAChClC,MAAM,CAAC+B,IAAI,CAACE,eAAe,GAAG,CAAC;IAC/BjC,MAAM,CAACwF,UAAU,GAAG,CAAC;IACrBxF,MAAM,CAACyF,OAAO,GAAG,CAAC;IAElB,IAAIC,aAAa,GAAG,KAAK;IACzB,IAAIC,YAAY,GAAG,KAAK;IAExB3F,MAAM,CAAC4F,cAAc,GAAG,CAAC,CAAC;IAC1B9F,OAAO,CAAC+F,IAAI,CAACjF,QAAQ,EAAEZ,MAAM,CAAC4F,cAAc,CAAC;IAE7C,IAAME,YAAY,GAAGlF,QAAQ,CAACoC,SAAS,CAAC+C,MAAM,CAAC,UAAAC,CAAC;MAAA,OAAIA,CAAC,CAAC9C,IAAI,KAAK,UAAU;IAAA,EAAC;IAC1EY,CAAC,CAACmC,IAAI,CAACH,YAAY,EAAE,UAAUI,GAAG,EAAEtG,EAAE,EAAE;MACpCI,MAAM,CAAC+B,IAAI,CAACG,gBAAgB,GAAGgE,GAAG;MAClCR,aAAa,GAAG,IAAI;MACpB,OAAO,KAAK;IAChB,CAAC,CAAC;IAEF,IAAMS,WAAW,GAAGvF,QAAQ,CAACoC,SAAS,CAAC+C,MAAM,CAAC,UAAAC,CAAC;MAAA,OAAIA,CAAC,CAAC9C,IAAI,KAAK,SAAS;IAAA,EAAC;IACxEY,CAAC,CAACmC,IAAI,CAACE,WAAW,EAAE,UAAUD,GAAG,EAAEtG,EAAE,EAAE;MACnCI,MAAM,CAAC+B,IAAI,CAACE,eAAe,GAAGiE,GAAG;MACjCP,YAAY,GAAG,IAAI;MACnB,OAAO,KAAK;IAChB,CAAC,CAAC;IAEF,IAAI3F,MAAM,CAAC4F,cAAc,CAAChD,QAAQ,CAACwD,MAAM,KAAK,CAAC,EAAE;MAC7CpG,MAAM,CAAC4F,cAAc,CAAChD,QAAQ,CAACyD,IAAI,CAAC;QAAC9B,gBAAgB,EAAE;MAAG,CAAC,CAAC;IAChE;IAEA,IAAImB,aAAa,KAAK,KAAK,EAAE;MACzB1F,MAAM,CAAC4F,cAAc,CAAC5C,SAAS,CAACqD,IAAI,CAAC;QAAEnD,IAAI,EAAE,UAAU;QAAEoD,IAAI,EAAE;MAAK,CAAC,CAAC;MACtEtG,MAAM,CAAC+B,IAAI,CAACG,gBAAgB,GAAG,CAAC,CAAC;IACrC,CAAC,MAAM;MACH,IAAMqE,KAAK,GAAGvG,MAAM,CAAC4F,cAAc,CAAC5C,SAAS,CAACwD,SAAS,CAAC,UAAAC,IAAI;QAAA,IAAAC,cAAA;QAAA,OAAID,IAAI,CAACrD,EAAE,OAAAsD,cAAA,GAAKZ,YAAY,CAAC,CAAC,CAAC,cAAAY,cAAA,uBAAfA,cAAA,CAAiBtD,EAAE;MAAA,EAAC;MAChG,IAAImD,KAAK,GAAG,CAAC,CAAC,EAAE;QACZ,IAAMI,oBAAoB,GAAG3G,MAAM,CAAC4F,cAAc,CAAC5C,SAAS,CAACuD,KAAK,CAAC;QACnEvG,MAAM,CAAC4F,cAAc,CAAC5C,SAAS,CAACuD,KAAK,CAAC,GAAAK,aAAA,CAAAA,aAAA,KAAOD,oBAAoB;UAAEL,IAAI,EAAE;QAAI,EAAC;MAClF;IACJ;IAEA,IAAIX,YAAY,KAAK,KAAK,EAAE;MACxB3F,MAAM,CAAC4F,cAAc,CAAC5C,SAAS,CAACqD,IAAI,CAAC;QAAEnD,IAAI,EAAE,SAAS;QAAEoD,IAAI,EAAE;MAAK,CAAC,CAAC;MACrEtG,MAAM,CAAC+B,IAAI,CAACE,eAAe,GAAG,CAAC,CAAC;IACpC,CAAC,MAAM;MACH,IAAMsE,MAAK,GAAGvG,MAAM,CAAC4F,cAAc,CAAC5C,SAAS,CAACwD,SAAS,CAAC,UAAAC,IAAI;QAAA,IAAAI,aAAA;QAAA,OAAIJ,IAAI,CAACrD,EAAE,OAAAyD,aAAA,GAAKV,WAAW,CAAC,CAAC,CAAC,cAAAU,aAAA,uBAAdA,aAAA,CAAgBzD,EAAE;MAAA,EAAC;MAC/F,IAAImD,MAAK,GAAG,CAAC,CAAC,EAAE;QACZ,IAAMO,mBAAmB,GAAG9G,MAAM,CAAC4F,cAAc,CAAC5C,SAAS,CAACuD,MAAK,CAAC;QAClEvG,MAAM,CAAC4F,cAAc,CAAC5C,SAAS,CAACuD,MAAK,CAAC,GAAAK,aAAA,CAAAA,aAAA,KAAOE,mBAAmB;UAAER,IAAI,EAAE;QAAI,EAAC;MACjF;IACJ;IAEAtG,MAAM,CAAC+G,eAAe,GAAG,EAAE;IAC3B/G,MAAM,CAAC+G,eAAe,CAACV,IAAI,CAAC;MAAEW,SAAS,EAAE,UAAU;MAAEC,SAAS,EAAE,KAAK;MAAEC,OAAO,EAAE;IAAK,CAAC,CAAC;IACvFlH,MAAM,CAAC+G,eAAe,CAACV,IAAI,CAAC;MAAEW,SAAS,EAAE,UAAU;MAAEC,SAAS,EAAE,KAAK;MAAEC,OAAO,EAAE;IAAK,CAAC,CAAC;IACvFlH,MAAM,CAAC+G,eAAe,CAACV,IAAI,CAAC;MAAEW,SAAS,EAAE,UAAU;MAAEC,SAAS,EAAE,KAAK;MAAEC,OAAO,EAAE;IAAK,CAAC,CAAC;IACvFlH,MAAM,CAAC+G,eAAe,CAACV,IAAI,CAAC;MAAEW,SAAS,EAAE,SAAS;MAAEC,SAAS,EAAE,KAAK;MAAEC,OAAO,EAAE;IAAK,CAAC,CAAC;IAEtFlH,MAAM,CAACmH,gBAAgB,CAACpC,YAAY,CAAC,CAAC;IACtC,IAAIqC,KAAK,GAAGpH,MAAM;IAClBK,aAAa,CAAC8E,UAAU,CAAC7E,QAAQ,EAAE,YAAW;MAC1CwD,CAAC,CAAC,wBAAwB,CAAC,CAACU,OAAO,CAAC,eAAe,CAAC;MACpDhE,QAAQ,CAAC,YAAU;QACf4G,KAAK,CAACD,gBAAgB,CAACpC,YAAY,CAAC,CAAC;MACzC,CAAC,EAAC,CAAC,CAAC;IACR,CAAC,CAAC;IAEF/E,MAAM,CAACqH,aAAa,CAAC,CAAC;IACtBrH,MAAM,CAACkF,WAAW,CAAC,MAAM,CAAC;;IAE1B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA;;IAEA;EACJ,CAAC;EAEDlF,MAAM,CAACkF,WAAW,GAAG,UAASoC,QAAQ,EAAE;IACpC,IAAMC,OAAO,GAAG;MACZC,YAAY,EAAE,IAAI;MAClBC,oBAAoB,EAAE,kBAAkB;MACxCC,uBAAuB,EAAE;IAC7B,CAAC;IACD,IAAIJ,QAAQ,KAAK,KAAK,EAAE;MACpBxD,CAAC,CAAC,wBAAwB,CAAC,CAAC6D,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC;MAC5D7D,CAAC,CAAC,wBAAwB,CAAC,CAAC8D,MAAM,CAACL,OAAO,CAAC;IAC/C,CAAC,MAAM,IAAID,QAAQ,KAAK,MAAM,EAAE;MAC5B9G,QAAQ,CAAC,YAAW;QAChBsD,CAAC,CAAC,oDAAoD,CAAC,CAAC8D,MAAM,CAACL,OAAO,CAAC;MAC3E,CAAC,EAAE,CAAC,CAAC;IACT;EACJ,CAAC;EAEDvH,MAAM,CAACqC,GAAG,CAAC,mBAAmB,EAAE,UAAUC,KAAK,EAAE1B,QAAQ,EAAE;IACvDZ,MAAM,CAACqF,uBAAuB,CAACzE,QAAQ,EAAE,cAAc,CAAC;EAC5D,CAAC,CAAC;EAEFZ,MAAM,CAACqC,GAAG,CAAC,yBAAyB,EAAE,UAAUC,KAAK,EAAE1B,QAAQ,EAAE;IAC7DZ,MAAM,CAACqF,uBAAuB,CAACzE,QAAQ,EAAE,yBAAyB,CAAC;EACvE,CAAC,CAAC;EAEFZ,MAAM,CAAC6H,kBAAkB,GAAG,CAAC,IAAI,CAAC;EAElC7H,MAAM,CAACsF,YAAY,GAAG,UAASwC,SAAS,EAAE;IACtChE,CAAC,CAAC,iBAAiB,CAAC,CAACiE,WAAW,CAAC,gBAAgB,CAAC;IAClD,IAAID,SAAS,IAAI,IAAI,EAAE;MACnB,IAAIE,IAAI,GAAG,IAAI;MACf,IAAIhI,MAAM,CAAC6H,kBAAkB,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;QACtCG,IAAI,GAAGlE,CAAC,CAAC,eAAe,CAAC;QACzBkE,IAAI,CAACC,OAAO,CAAC,OAAO,CAAC;MACzB;IACJ;EACJ,CAAC;EAEDjI,MAAM,CAACqH,aAAa,GAAG,YAAW;IAC9B7G,QAAQ,CAAC,YAAY;MACjB,IAAI0F,GAAG,GAAGlG,MAAM,CAACwF,UAAU;MAC3B,IAAIwC,IAAI,GAAG,IAAI;MAEf,IAAI9B,GAAG,KAAK,CAAC,EAAE;QACX8B,IAAI,GAAGlE,CAAC,CAAC,eAAe,CAAC;MAC7B;MAEA,IAAG,CAAC,CAACkE,IAAI,EAAE;QACP,IAAIhI,MAAM,CAAC6H,kBAAkB,CAAC3B,GAAG,CAAC,KAAK,KAAK,EAAE;UAC1C8B,IAAI,CAACC,OAAO,CAAC,QAAQ,CAAC;QAC1B,CAAC,MACI;UACDD,IAAI,CAACC,OAAO,CAAC;YAACC,IAAI,EAAE;UAAwE,CAAC,CAAC;QAClG;MACJ;MAEAlI,MAAM,CAAC6H,kBAAkB,CAAC3B,GAAG,CAAC,GAAG,KAAK;IAE1C,CAAC,EAAE,GAAG,CAAC;EACX,CAAC;EAEDlG,MAAM,CAACqC,GAAG,CAAC,0BAA0B,EAAE,UAAUC,KAAK,EAAEC,MAAM,EAAE;IAC5DvC,MAAM,CAACmB,IAAI,GAAG,qBAAqB;IACnCnB,MAAM,CAACmI,qBAAqB,GAAG5F,MAAM,CAAC6F,OAAO;IAC7CpI,MAAM,CAACqI,2BAA2B,GAAG9F,MAAM;IAC3ClC,aAAa,CAAC8E,UAAU,CAAC7E,QAAQ,CAAC;IAClCE,QAAQ,CAAC,YAAY;MACjBsD,CAAC,CAAC,OAAO,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACjC,CAAC,EAAE,CAAC,CAAC;EACT,CAAC,CAAC;EAEFxE,MAAM,CAACqC,GAAG,CAAC,0BAA0B,EAAE,UAAUC,KAAK,EAAEC,MAAM,EAAE;IAC5DvC,MAAM,CAACmB,IAAI,GAAG,qBAAqB;IACnCnB,MAAM,CAACsI,qBAAqB,GAAG/F,MAAM,CAACgG,OAAO;IAC7CvI,MAAM,CAACwI,2BAA2B,GAAGjG,MAAM;IAC3ClC,aAAa,CAAC8E,UAAU,CAAC7E,QAAQ,CAAC;IAElCE,QAAQ,CAAC,YAAY;MACjBsD,CAAC,CAAC,OAAO,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACjC,CAAC,EAAE,CAAC,CAAC;EACT,CAAC,CAAC;;EAEF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACAxE,MAAM,CAACyI,gBAAgB,GAAG,KAAK;EAE/BzI,MAAM,CAAC0I,MAAM,CAAC,kBAAkB,EAC5B,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,EAAE;MACVnI,QAAQ,CAAC,YAAW;QAChBH,aAAa,CAACwI,kBAAkB,CAAC,GAAG,GAAG/E,CAAC,CAAC,qBAAqB,CAAC,CAAC6D,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,8BAA8B,CAAC;MAC5H,CAAC,EAAC,GAAG,CAAC;IACV;EACJ,CACJ,CAAC;;EAED;EACA3H,MAAM,CAAC8I,0BAA0B,GAAG,IAAI;EAExC9I,MAAM,CAAC+I,kBAAkB,GAAG,UAAUC,GAAG,EAAE;IACvChJ,MAAM,CAACa,UAAU,GAAGmI,GAAG;IACvB,IAAI9I,aAAa,CAAC+I,cAAc,EAAE;MAC9B,OAAO,EAAE;IACb;IAEAjJ,MAAM,CAACkJ,SAAS,GAAG,KAAK;IACxB,IAAI,CAAClJ,MAAM,CAAC0E,UAAU,EAAE;MACpB,OAAOhE,iBAAiB,CAACyI,kBAAkB,CAACH,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC,MAAM,IAAI9I,aAAa,CAACmB,QAAQ,EAAE;MAC/BrB,MAAM,CAACkJ,SAAS,GAAG,IAAI;MACvB,OAAO9I,eAAe,CAACgJ,aAAa,CAACJ,GAAG,EAAE,IAAI,EAAEhJ,MAAM,CAACiB,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAC1E+C,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjBrJ,MAAM,CAAC8I,0BAA0B,GAAG;UAACQ,SAAS,EAAED,GAAG,CAACC,SAAS;UAAEC,UAAU,EAAEP;QAAG,CAAC;QAC/E,IAAMQ,iBAAiB,GAAG9I,iBAAiB,CAAC+I,kBAAkB,CAACJ,GAAG,CAACC,SAAS,CAACI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAEV,GAAG,CAAC;QAC9FhJ,MAAM,CAACkJ,SAAS,GAAG,KAAK;QAExB,OAAOM,iBAAiB,CAACE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;MACxC,CAAC,CAAC;IAEV,CAAC,MAAM;MACH,OAAO,EAAE;IACb;EACJ,CAAC;EAED1J,MAAM,CAAC2J,kBAAkB,GAAG,UAAUX,GAAG,EAAE;IACvC,OAAO,CAAC,CAACA,GAAG,GAAGA,GAAG,CAACY,IAAI,GAAG,IAAI;EAClC,CAAC;EAED5J,MAAM,CAAC6J,kBAAkB,GAAG,UAAUC,IAAI,EAAEC,KAAK,EAAEC,KAAK,EAAE1H,KAAK,EAAE;IACzD;;IAEA,IAAGA,KAAK,IAAI2H,KAAK,CAACC,IAAI,CAAC5H,KAAK,CAAC6H,MAAM,CAACC,SAAS,CAAC,CAACC,QAAQ,CAAC,kBAAkB,CAAC,EAAC;MACxErK,MAAM,CAACsK,wBAAwB,CAACR,IAAI,CAAC;IACzC,CAAC,MACI;MACD9J,MAAM,CAACuK,gBAAgB,GAAGR,KAAK,CAACS,EAAE;MAClCxK,MAAM,CAACyK,mBAAmB,GAAGV,KAAK,CAACW,KAAK;MACxC1K,MAAM,CAAC2K,cAAc,CAAC,CAAC;IAC3B;EACR,CAAC;EAED3K,MAAM,CAACsK,wBAAwB,GAAG,UAAU1J,QAAQ,EAAE;IAClDkD,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX3D,eAAe,CAACgJ,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE;MAAEwB,UAAU,EAAEhK,QAAQ,CAAC4J,EAAE,IAAI5J,QAAQ,CAACwC;IAAG,CAAC,CAAC,CACnFY,IAAI,CAAC,UAAUC,IAAI,EAAE;MAClBH,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb,IAAI,CAAC,CAACJ,IAAI,CAACqF,SAAS,IAAIrF,IAAI,CAACqF,SAAS,CAAClD,MAAM,GAAG,CAAC,EAAE;QAC/C,IAAI,CAAClG,aAAa,CAACX,MAAM,EAAE;UACvBsL,QAAQ,CAACC,IAAI,CAAC,CAAC;QACnB,CAAC,MACI;UACDzK,aAAa,CAAC0K,YAAY,CAAC,CAAC;QAChC;QAEA,IAAInK,SAAQ,GAAGqD,IAAI,CAACqF,SAAS,CAAC,CAAC,CAAC;QAEhCrJ,UAAU,CAAC+K,UAAU,CAAC,yBAAyB,EAAEpK,SAAQ,CAAC;MAC9D;IACJ,CAAC,EACG,UAAUuD,GAAG,EAAE;MACXL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACd,CAAC;EAEDnE,MAAM,CAACiL,YAAY,GAAG,UAAU3I,KAAK,EAAE;IACnC,IAAIA,KAAK,CAAC4I,KAAK,KAAK,EAAE,EAAE;MACpBlL,MAAM,CAACuK,gBAAgB,GAAG,IAAI;MAC9BvK,MAAM,CAACyK,mBAAmB,GAAG,IAAI;MACjCzK,MAAM,CAAC2K,cAAc,CAAC,CAAC;IAC3B;EACJ,CAAC;EAGD3K,MAAM,CAACmL,aAAa,GAAG,KAAK;EAE5BnL,MAAM,CAACoL,2BAA2B,GAAG,UAAUvK,UAAU,EAAE2J,EAAE,EAAEa,WAAW,EAAE;IACxE,IAAIC,EAAE,GAAG,IAAI;IACb,IAAK,CAACtL,MAAM,CAAC8I,0BAA0B,IAAI9I,MAAM,CAAC8I,0BAA0B,CAACS,UAAU,KAAK1I,UAAU,IAAK2J,EAAE,EAAE;MAC3Gc,EAAE,GAAGlL,eAAe,CAACgJ,aAAa,CAACvI,UAAU,EAAE,IAAI,EAAEb,MAAM,CAACiB,WAAW,EAAG,CAAC,CAACuJ,EAAE,GAAG;QAAEI,UAAU,EAAEJ;MAAG,CAAC,GAAG,IAAI,EAAGa,WAAW,IAAIrL,MAAM,CAACoB,aAAa,KAAK,IAAI,CAAC;IAC9J,CAAC,MAAM;MACH,IAAMmK,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAC3BD,QAAQ,CAACE,OAAO,CAAC;QAACnC,SAAS,EAAEtJ,MAAM,CAAC8I,0BAA0B,CAACQ;MAAS,CAAC,CAAC;MAC1EgC,EAAE,GAAGC,QAAQ,CAACG,OAAO;IACzB;IAEAJ,EAAE,CAACtH,IAAI,CAAC,UAAUC,IAAI,EAAE;MACpB;MACAjE,MAAM,CAAC8I,0BAA0B,GAAG,IAAI;MACxC9I,MAAM,CAACe,kBAAkB,GAAGkD,IAAI,CAACqF,SAAS;MAE1CxF,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb,IAAI,CAAC,CAACJ,IAAI,CAACqF,SAAS,IAAIrF,IAAI,CAACqF,SAAS,CAAClD,MAAM,GAAG,CAAC,EAAE;QAC/C,IAAI,CAAClG,aAAa,CAACX,MAAM,EAAE;UACvBsL,QAAQ,CAACC,IAAI,CAAC,CAAC;QACnB,CAAC,MACI;UACDzK,aAAa,CAAC0K,YAAY,CAAC,CAAC;QAChC;;QAEA;QACA,IAAI,CAAC,CAACP,EAAE,IAAIvG,IAAI,CAACqF,SAAS,CAAClD,MAAM,IAAI,CAAC,EAAE;UACpCpG,MAAM,CAAC2L,cAAc,CAAC1H,IAAI,CAACqF,SAAS,CAAC,CAAC,CAAC,CAAC;UACxCtJ,MAAM,CAAC4L,WAAW,CAAC,CAAC;UACpB;QACJ;MACJ;MAEApL,QAAQ,CAAC,YAAY;QACjB,IAAI,CAAC,CAACR,MAAM,CAACe,kBAAkB,IAAIf,MAAM,CAACe,kBAAkB,CAACqF,MAAM,GAAG,CAAC,EAAE;UACrE,IAAIlG,aAAa,CAAC2L,QAAQ,EAAE;YACxBhB,QAAQ,CAACC,IAAI,CAAC,CAAC;UACnB,CAAC,MACI;YACDzK,aAAa,CAAC0K,YAAY,CAAC,CAAC;UAChC;QACJ;MACJ,CAAC,EAAE,CAAC,CAAC;IACT,CAAC,EACG,UAAU5G,GAAG,EAAE;MACXL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAAC2K,cAAc,GAAG,YAAY;IAChC3K,MAAM,CAACmL,aAAa,GAAGnL,MAAM,CAAC8L,kBAAkB,CAACC,QAAQ;IACzD,IAAIvB,EAAE,GAAGxK,MAAM,CAACuK,gBAAgB;IAEhCvK,MAAM,CAACuK,gBAAgB,GAAG,IAAI;IAE9B,IAAI1J,UAAU,GAAGiD,CAAC,CAAC,qBAAqB,CAAC,CAACkF,GAAG,CAAC,CAAC;IAE/C,IAAIhJ,MAAM,CAAC8L,kBAAkB,CAACE,kBAAkB,CAACD,QAAQ,EAAE;MACvD,OAAO,KAAK;IAChB;IAEA/L,MAAM,CAACmL,aAAa,GAAG,KAAK;IAC5BrH,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX/D,MAAM,CAACoL,2BAA2B,CAACvK,UAAU,EAAE2J,EAAE,CAAC;IAElD,OAAO,KAAK;EAChB,CAAC;EAEDxK,MAAM,CAACiM,YAAY,GAAG,YAAY;IAC9B,IAAIC,gBAAgB,GAAGlM,MAAM,CAACmB,IAAI;IAElC,IAAGnB,MAAM,CAACmB,IAAI,KAAK,yBAAyB,EAAC;MACzCnB,MAAM,CAACmM,6BAA6B,CAAC,CAAC;IAC1C,CAAC,MACI;MACD9L,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;IACvC;IAEA,IAAG4L,gBAAgB,KAAK,QAAQ,EAAC;MAC7BpI,CAAC,CAAC,qBAAqB,CAAC,CAACkF,GAAG,CAAC,IAAI,CAAC,CAACxE,OAAO,CAAC,OAAO,CAAC;IACvD;EACJ,CAAC;EAEDxE,MAAM,CAAC4L,WAAW,GAAG,YAAY;IAC7BvL,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;IACnC,IAAMoK,KAAK,GAAG1K,MAAM,CAACyK,mBAAmB;IACxCzK,MAAM,CAACyK,mBAAmB,GAAG,IAAI;IACjCxK,UAAU,CAAC+K,UAAU,CAAC,sBAAsB,EAAE;MAAEpK,QAAQ,EAAEZ,MAAM,CAACY,QAAQ;MAAEyL,MAAM,EAAE,QAAQ;MAAE3B,KAAK,EAAEA;IAAM,CAAC,CAAC;EAChH,CAAC;EAGD1K,MAAM,CAAC2L,cAAc,GAAG,UAAU7B,IAAI,EAAE;IACpC9J,MAAM,CAACY,QAAQ,GAAGkJ,IAAI;EAC1B,CAAC;EAED9J,MAAM,CAACsM,cAAc,GAAG,YAAY;IAChC,IAAIC,mBAAmB,CAACvM,MAAM,CAAC8E,eAAe,EAAE9E,MAAM,CAAC2E,gBAAgB,CAAC,EAAE;MACtE3E,MAAM,CAAC6B,YAAY,GAAG7B,MAAM,CAAC2E,gBAAgB;MAC7CxE,YAAY,CAACiE,SAAS,CAClB3D,cAAc,CAACe,SAAS,CAAC,mDAAmD,CAChF,CAAC;MACD;IACJ;IACAxB,MAAM,CAAC6B,YAAY,GAAG,CAAC,CAAC;IAExBiC,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAAC2C,WAAW,CAACC,QAAQ,CAAC,CAAC,CAAC,CAACF,IAAI,GAAG1C,MAAM,CAAC2C,WAAW,CAACD,IAAI;IAC7D,IAAI,CAAC,CAAC1C,MAAM,CAAC2C,WAAW,CAACK,SAAS,EAAE;MAChChD,MAAM,CAAC2C,WAAW,CAACK,SAAS,GAAGhD,MAAM,CAAC2C,WAAW,CAACK,SAAS,CAAC+C,MAAM,CAAC,UAAUyG,CAAC,EAAE;QAC3E,OAAO,CAAC,CAACA,CAAC,CAACvJ,KAAK,IAAI,CAAC,CAACuJ,CAAC,CAACC,IAAI;MAC7B,CAAC,CAAC;MAEN3M,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAAC2C,WAAW,CAACK,SAAS,EAAE,UAAUpD,EAAE,EAAE;QACxDA,EAAE,CAAC+M,KAAK,GAAG/M,EAAE,CAACgN,aAAa;QAC3BhN,EAAE,CAACiN,QAAQ,GAAGjN,EAAE,CAACkN,WAAW;QAE5B,IAAI,CAAClN,EAAE,CAACmN,cAAc,EAAE;UACpBnN,EAAE,CAACmN,cAAc,GAAG,KAAK;QAC7B;MACJ,CAAC,CAAC;MAEF,IAAG/M,MAAM,CAAC2C,WAAW,CAACgB,iBAAiB,EAAC;QACpC3D,MAAM,CAAC2C,WAAW,CAACK,SAAS,CAAC,CAAC,CAAC,GAAG;UAC9BC,KAAK,EAAEjD,MAAM,CAAC2C,WAAW,CAACK,SAAS,CAAC,CAAC,CAAC,CAACC,KAAK;UAC5C+J,KAAK,EAAEhN,MAAM,CAAC2C,WAAW,CAACK,SAAS,CAAC,CAAC,CAAC,CAACgK,KAAK;UAC5CP,IAAI,EAAEzM,MAAM,CAAC2C,WAAW,CAACK,SAAS,CAAC,CAAC,CAAC,CAACyJ,IAAI;UAC1CE,KAAK,EAAE3M,MAAM,CAAC2C,WAAW,CAACK,SAAS,CAAC,CAAC,CAAC,CAAC2J,KAAK;UAC5CM,OAAO,EAAEjN,MAAM,CAAC2C,WAAW,CAACK,SAAS,CAAC,CAAC,CAAC,CAACiK,OAAO;UAChDJ,QAAQ,EAAE7M,MAAM,CAAC2C,WAAW,CAACK,SAAS,CAAC,CAAC,CAAC,CAAC6J,QAAQ;UAClDE,cAAc,EAAE/M,MAAM,CAAC2C,WAAW,CAACK,SAAS,CAAC,CAAC,CAAC,CAAC+J,cAAc;UAC9D7J,IAAI,EAAE;QACV,CAAC;MACL;IACJ;IAEAlD,MAAM,CAAC2C,WAAW,CAACuK,UAAU,GAAIhN,aAAa,CAACiN,YAAY;IAE3D/M,eAAe,CAACkM,cAAc,CAACtM,MAAM,CAAC2C,WAAW,CAAC,CAACqB,IAAI,CAAC,UAAUC,IAAI,EAAE;MACpEH,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;MACnCN,MAAM,CAAC2C,WAAW,CAACS,EAAE,GAAGa,IAAI,CAAC2G,UAAU;MACvC,IAAG3G,IAAI,CAACjB,SAAS,EAAE;QACfiB,IAAI,CAACjB,SAAS,CAAC0J,OAAO,CAAC,UAASjG,IAAI,EAAE;UAClCA,IAAI,CAACrD,EAAE,GAAEqD,IAAI,CAAC2G,SAAS;UACvB3G,IAAI,CAACgG,IAAI,GAAGhG,IAAI,CAAC4G,UAAU;UAC3B,OAAO5G,IAAI,CAAC4G,UAAU;UACtB,OAAO5G,IAAI,CAACmE,UAAU;UACtBnE,IAAI,CAACkG,KAAK,GAAGlG,IAAI,CAACmG,aAAa;UAC/B,OAAOnG,IAAI,CAACmG,aAAa;UACzBnG,IAAI,CAACoG,QAAQ,GAAGpG,IAAI,CAACqG,WAAW;UAChC,OAAOrG,IAAI,CAACqG,WAAW;UACvB,OAAOrG,IAAI,CAACsG,cAAc;UAC1B,OAAOtG,IAAI,CAAC6G,sBAAsB;UAClC,OAAO7G,IAAI,CAAC8G,eAAe;UAC3B,OAAO9G,IAAI,CAAC+G,cAAc;QAC9B,CAAC,CAAC;QAEFxN,MAAM,CAAC2C,WAAW,CAACK,SAAS,GAAGiB,IAAI,CAACjB,SAAS;MACjD;MAEA,IAAGiB,IAAI,CAACrB,QAAQ,EAAE;QACdqB,IAAI,CAACrB,QAAQ,CAAC8J,OAAO,CAAC,UAASe,CAAC,EAAE;UAC9BA,CAAC,CAACrK,EAAE,GAAGqK,CAAC,CAACC,SAAS;UAClB,OAAOD,CAAC,CAACF,eAAe;UACxB,OAAOE,CAAC,CAACD,cAAc;UACvB,OAAOC,CAAC,CAAC7C,UAAU;UACnB,OAAO6C,CAAC,CAACE,OAAO;UAChB,OAAOF,CAAC,CAACG,cAAc;UACvB,OAAOH,CAAC,CAACI,GAAG;UACZ,OAAOJ,CAAC,CAACK,OAAO;UAChB,OAAOL,CAAC,CAACM,QAAQ;QACrB,CAAC,CAAC;QAEF/N,MAAM,CAAC2C,WAAW,CAACC,QAAQ,GAAGqB,IAAI,CAACrB,QAAQ;MAC/C;MAEA,IAAIqB,IAAI,CAAC+J,SAAS,EAAE;QAChBhO,MAAM,CAAC2C,WAAW,CAACqL,SAAS,GAAG/J,IAAI,CAAC+J,SAAS;QAC7ChO,MAAM,CAAC2C,WAAW,CAACsL,yBAAyB,GAAGhK,IAAI,CAACgK,yBAAyB;QAC7EjO,MAAM,CAAC2C,WAAW,CAACuL,yBAAyB,GAAGjK,IAAI,CAACiK,yBAAyB;MACjF;MAEAjO,UAAU,CAAC+K,UAAU,CAAC,sBAAsB,EAAE;QAAEpK,QAAQ,EAAEZ,MAAM,CAAC2C,WAAW;QAAE0J,MAAM,EAAE;MAAS,CAAC,CAAC;IACrG,CAAC,EAAE,UAAUlI,GAAG,EAAE;MACd,IAAGnE,MAAM,CAAC2C,WAAW,CAACK,SAAS,CAACoD,MAAM,KAAK,CAAC,EAAC;QACzC,IAAGpG,MAAM,CAAC2C,WAAW,CAACK,SAAS,CAACoD,MAAM,KAAK,CAAC,EAAC;UACvCpG,MAAM,CAAC2C,WAAW,CAACK,SAAS,GAAG,CAC7B;YACIC,KAAK,EAAE,IAAI;YACXC,IAAI,EAAE;UACV,CAAC,EACD;YACID,KAAK,EAAE,IAAI;YACXC,IAAI,EAAE;UACV,CAAC,CACJ;QACL,CAAC,MAAI;UACD,IAAGlD,MAAM,CAAC2C,WAAW,CAACK,SAAS,CAAC,CAAC,CAAC,CAACE,IAAI,KAAK,UAAU,EAAC;YACnDlD,MAAM,CAAC2C,WAAW,CAACK,SAAS,CAACqD,IAAI,CAAC;cAACpD,KAAK,EAAC,IAAI;cAAEC,IAAI,EAAE;YAAS,CAAC,CAAC;UACpE,CAAC,MAAI;YACDlD,MAAM,CAAC2C,WAAW,CAACK,SAAS,CAACmL,OAAO,CAAC;cAAClL,KAAK,EAAC,IAAI;cAAEC,IAAI,EAAE;YAAU,CAAC,CAAC;UACxE;QACJ;MACJ;MACAY,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EAEN,CAAC;EAEDnE,MAAM,CAACoO,oBAAoB,GAAG,UAAUC,IAAI,EAAEC,IAAI,EAAEC,OAAO,EAAE;IACzDvO,MAAM,CAACwO,YAAY,CAACH,IAAI,EAAEC,IAAI,CAAC;IAC/B;IACA,IAAIC,OAAO,CAACxB,cAAc,KAAK,KAAK,EAAE;MAClC;IACJ;IAEA,IAAIsB,IAAI,CAACI,KAAK,KAAK,kBAAkB,EAAE;MACnCzO,MAAM,CAAC4F,cAAc,CAAC5C,SAAS,CAAC0J,OAAO,CAAC,UAAAgC,EAAE,EAAI;QAC1C,IAAIH,OAAO,CAACxB,cAAc,IAAI2B,EAAE,CAACxL,IAAI,IAAIoL,IAAI,IAAII,EAAE,CAACtL,EAAE,KAAKmL,OAAO,CAACnL,EAAE,EAAE;UACnEsL,EAAE,CAAC3B,cAAc,GAAG,KAAK;QAC7B;MACJ,CAAC,CAAC;IACN;EACJ,CAAC;EAED/M,MAAM,CAAC2O,YAAY,GAAG,YAAY;IAC9B3O,MAAM,CAAC8B,gBAAgB,GAAG9B,MAAM,CAACwF,UAAU;IAC3C,IAAGoJ,aAAa,CAAC5O,MAAM,CAACmH,gBAAgB,CAAC,EAAE;MACvC;IACJ;IACAnH,MAAM,CAAC8B,gBAAgB,GAAG,CAAC,CAAC;IAE5BgC,CAAC,CAACC,OAAO,CAAC,CAAC;IACX;;IAEA,IAAI8K,YAAY,GAAG,KAAK;IACxB,IAAIC,YAAY,GAAG,KAAK;IACxB,IAAIC,YAAY,GAAG,KAAK;IACxB,IAAIC,WAAW,GAAG,KAAK;IACvB,IAAIC,iBAAiB,GAAG,KAAK;IAE7BnL,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC+G,eAAe,EAAE,UAASb,GAAG,EAAEtG,EAAE,EAAE;MAC7C,QAAQA,EAAE,CAACoH,SAAS;QAChB,KAAK,UAAU;UACX6H,YAAY,GAAGjP,EAAE,CAACqH,SAAS,IAAIrH,EAAE,CAACsH,OAAO;UACzC;QACJ,KAAK,UAAU;UACX4H,YAAY,GAAGlP,EAAE,CAACqH,SAAS,IAAIrH,EAAE,CAACsH,OAAO;UACzC+H,iBAAiB,GAAGrP,EAAE,CAACqH,SAAS;UAChC;QACJ,KAAK,UAAU;UACX8H,YAAY,GAAGnP,EAAE,CAACqH,SAAS,IAAIrH,EAAE,CAACsH,OAAO;UACzC;QACJ,KAAK,SAAS;UACV8H,WAAW,GAAGpP,EAAE,CAACqH,SAAS,IAAIrH,EAAE,CAACsH,OAAO;UACxC;MACR;IACA,CAAC,CAAC;IAEN,IAAIgI,cAAc,GAAG,CAAC,CAAC;IACvBpP,OAAO,CAAC+F,IAAI,CAAC7F,MAAM,CAAC4F,cAAc,EAAEsJ,cAAc,CAAC;IAEnD,IAAIC,gBAAgB,GAAG,EAAE;IACzB,IAAIC,iBAAiB,GAAG,EAAE;IAE1BtL,CAAC,CAACmC,IAAI,CAACiJ,cAAc,CAACtM,QAAQ,EAAE,UAAUsD,GAAG,EAAEtG,EAAE,EAAE;MAC/C,IAAI,CAACA,EAAE,CAACwD,EAAE,IAAI,CAACxD,EAAE,CAAC8C,IAAI,IAAI,CAAC9C,EAAE,CAACmD,WAAW,IAAI,CAACnD,EAAE,CAACkD,KAAK,IAAI,CAAClD,EAAE,CAACiD,KAAK,IAAI,CAACoM,iBAAiB,EAAE;QACvFE,gBAAgB,CAAC9I,IAAI,CAACzG,EAAE,CAAC;MAC7B;IACJ,CAAC,CAAC;IAEFkE,CAAC,CAACmC,IAAI,CAACiJ,cAAc,CAAClM,SAAS,CAAC+C,MAAM,CAAC,UAAAC,CAAC;MAAA,OAAIA,CAAC,CAAC9C,IAAI,KAAK,UAAU,IAAI8C,CAAC,CAAC9C,IAAI,KAAK,SAAS;IAAA,EAAC,EAAE,UAAUgD,GAAG,EAAEtG,EAAE,EAAE;MAC3G,IAAI,CAACA,EAAE,CAACwD,EAAE,IAAI,CAACxD,EAAE,CAACqD,KAAK,IAAI,CAACrD,EAAE,CAACoN,KAAK,IAAI,CAACpN,EAAE,CAAC6M,IAAI,IAAI,CAAC7M,EAAE,CAAC+M,KAAK,IAAI,CAAC/M,EAAE,CAACiN,QAAQ,IAAI,CAACjN,EAAE,CAACqN,OAAO,EAAE;QAC1FmC,iBAAiB,CAAC/I,IAAI,CAACzG,EAAE,CAAC;MAC9B,CAAC,MAAM;QACH,OAAOA,EAAE,CAAC0G,IAAI;QACd1G,EAAE,CAACmN,cAAc,GAAG,CAAC,CAACnN,EAAE,CAACmN,cAAc;MAC3C;IACJ,CAAC,CAAC;IAEFjJ,CAAC,CAACmC,IAAI,CAACkJ,gBAAgB,EAAE,UAAUjJ,GAAG,EAAEtG,EAAE,EAAE;MACxC,IAAI2G,KAAK,GAAG2I,cAAc,CAACtM,QAAQ,CAACyM,OAAO,CAACzP,EAAE,CAAC;MAC/CsP,cAAc,CAACtM,QAAQ,CAAC0M,MAAM,CAAC/I,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEFzC,CAAC,CAACmC,IAAI,CAACmJ,iBAAiB,EAAE,UAAUlJ,GAAG,EAAEtG,EAAE,EAAE;MACzC,IAAI2G,KAAK,GAAG2I,cAAc,CAAClM,SAAS,CAACqM,OAAO,CAACzP,EAAE,CAAC;MAChDsP,cAAc,CAAClM,SAAS,CAACsM,MAAM,CAAC/I,KAAK,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,IAAIgJ,UAAU,GAAG,EAAE;IACnB,IAAIV,YAAY,IAAII,iBAAiB,EACjCM,UAAU,IAAI,qBAAqB,CAAC,KAExC,IAAIV,YAAY,EACZU,UAAU,IAAI,YAAY;IAC9B,IAAIT,YAAY,EACZS,UAAU,IAAI,WAAW;IAC7B,IAAIR,YAAY,IAAIC,WAAW,EAC3BO,UAAU,IAAI,YAAY;IAG9B,IAAIC,CAAC,GAAG1P,OAAO,CAAC2P,MAAM,CAACP,cAAc,EAAE;MAAEK,UAAU,EAAEA;IAAW,CAAC,CAAC;IAElEnP,eAAe,CAACsP,cAAc,CAACF,CAAC,CAAC,CAACxL,IAAI,CAAC,UAAUC,IAAI,EAAE;MACnD7D,eAAe,CAACuP,iBAAiB,CAACH,CAAC,CAAChF,EAAE,IAAIgF,CAAC,CAACpM,EAAE,CAAC,WACnC,CAAC,YAAY;QACjB,IAAIpD,MAAM,CAACmB,IAAI,KAAK,yBAAyB,EAAE;UAE3C,IAAInB,MAAM,CAAC4P,WAAW,IAAI5P,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,IAAIZ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,KAAKpD,MAAM,CAAC4F,cAAc,CAACxC,EAAE,EAAE;YAClHpD,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,GAAGZ,MAAM,CAAC4F,cAAc;UACvD;UAEA,IAAI5F,MAAM,CAACe,kBAAkB,IAAIf,MAAM,CAACe,kBAAkB,CAACqF,MAAM,GAAG,CAAC,EACrE;YACIpG,MAAM,CAACoL,2BAA2B,CAACpL,MAAM,CAACa,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC;UACrE,CAAC,MAAM;YACHiD,CAAC,CAACO,SAAS,CAAC,CAAC;UACjB;UACArE,MAAM,CAAC6P,iBAAiB,CAACvP,QAAQ,CAAC;QACtC,CAAC,MACI;UACDwD,CAAC,CAACO,SAAS,CAAC,CAAC;UACbhE,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;UACnCL,UAAU,CAAC+K,UAAU,CAAC,sBAAsB,EAAE;YAAEpK,QAAQ,EAAEZ,MAAM,CAAC4F,cAAc;YAAEyG,MAAM,EAAE;UAAO,CAAC,CAAC;QACtG;MACJ,CAAC,CAAC;IAEV,CAAC,EAAE,UAAUlI,GAAG,EAAE;MACdL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAGDnE,MAAM,CAAC8P,mBAAmB,GAAG,YAAY;IACrChM,CAAC,CAACC,OAAO,CAAC,CAAC;IACXD,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAACqI,2BAA2B,CAAC0H,QAAQ,CAACnN,QAAQ,EAAE,UAAUsD,GAAG,EAAEtG,EAAE,EAAE;MAC5E,IAAIA,EAAE,CAACwD,EAAE,KAAKpD,MAAM,CAACmI,qBAAqB,CAAC/E,EAAE,EAAE;QAC3CxD,EAAE,CAAC8C,IAAI,GAAG1C,MAAM,CAACmI,qBAAqB,CAACzF,IAAI;QAC3C9C,EAAE,CAACmD,WAAW,GAAG/C,MAAM,CAACmI,qBAAqB,CAACpF,WAAW;QACzDnD,EAAE,CAACkD,KAAK,GAAG9C,MAAM,CAACmI,qBAAqB,CAACrF,KAAK;QAC7ClD,EAAE,CAACiD,KAAK,GAAG7C,MAAM,CAACmI,qBAAqB,CAACtF,KAAK;MACjD;IACJ,CAAC,CAAC;IAEF,IAAI2M,CAAC,GAAG1P,OAAO,CAAC2P,MAAM,CAACzP,MAAM,CAACqI,2BAA2B,CAAC0H,QAAQ,EAAE;MAAER,UAAU,EAAE;IAAW,CAAC,CAAC;IAC/FnP,eAAe,CAACsP,cAAc,CAACF,CAAC,CAAC,CAACxL,IAAI,CAAC,UAAUC,IAAI,EAAE;MACnDH,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;MACnCL,UAAU,CAAC+K,UAAU,CAAC,sBAAsB,EAAE;QAAEpK,QAAQ,EAAEZ,MAAM,CAACqI,2BAA2B,CAAC0H,QAAQ;QAAE1D,MAAM,EAAE;MAAO,CAAC,CAAC;IAC5H,CAAC,EAAE,UAAUlI,GAAG,EAAE;MACdL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAGDnE,MAAM,CAACgQ,mBAAmB,GAAG,YAAY;IACrClM,CAAC,CAACC,OAAO,CAAC,CAAC;IACXD,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAACwI,2BAA2B,CAACuH,QAAQ,CAAC/M,SAAS,EAAE,UAAUkD,GAAG,EAAEtG,EAAE,EAAE;MAC7E,IAAIA,EAAE,CAACwD,EAAE,KAAKpD,MAAM,CAACsI,qBAAqB,CAAClF,EAAE,EAAE;QAC3CxD,EAAE,CAACqD,KAAK,GAAGjD,MAAM,CAACsI,qBAAqB,CAACrF,KAAK;QAC7CrD,EAAE,CAACgN,aAAa,GAAG5M,MAAM,CAACsI,qBAAqB,CAACqE,KAAK;QACrD/M,EAAE,CAACkN,WAAW,GAAG9M,MAAM,CAACsI,qBAAqB,CAACuE,QAAQ;QACtDjN,EAAE,CAACqN,OAAO,GAAGjN,MAAM,CAACsI,qBAAqB,CAAC2E,OAAO;QACjDrN,EAAE,CAAC6M,IAAI,GAAGzM,MAAM,CAACsI,qBAAqB,CAACmE,IAAI;QAC3C7M,EAAE,CAACsD,IAAI,GAAGlD,MAAM,CAACsI,qBAAqB,CAACpF,IAAI;MAC/C;IACJ,CAAC,CAAC;IACF,IAAIsM,CAAC,GAAG1P,OAAO,CAAC2P,MAAM,CAACzP,MAAM,CAACwI,2BAA2B,CAACuH,QAAQ,EAAE;MAAER,UAAU,EAAE;IAAY,CAAC,CAAC;IAEhGnP,eAAe,CAACsP,cAAc,CAACF,CAAC,CAAC,CAACxL,IAAI,CAAC,UAAUC,IAAI,EAAE;MACnDH,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;MACnCL,UAAU,CAAC+K,UAAU,CAAC,sBAAsB,EAAE;QAAEpK,QAAQ,EAAEZ,MAAM,CAACwI,2BAA2B,CAACuH,QAAQ;QAAE1D,MAAM,EAAE;MAAO,CAAC,CAAC;IAC5H,CAAC,EAAE,UAAUlI,GAAG,EAAE;MACdL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAGDnE,MAAM,CAACiQ,UAAU,GAAG,UAAUC,SAAS,EAAE;IACrClQ,MAAM,CAACmB,IAAI,GAAG+O,SAAS,KAAK,IAAI,GAAG,KAAK,GAAG,QAAQ;IACnD,IAAIlQ,MAAM,CAACmB,IAAI,IAAI,KAAK,EAAE;MACtBX,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAACmQ,oBAAoB,CAAC,CAAC;MAEjC,CAAC,CAAC;IACN;IACA3P,QAAQ,CAAC,YAAU;MACfP,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;IACxC,CAAC,CAAC;IACF,OAAO,KAAK;EAChB,CAAC;EAEDhL,MAAM,CAACoQ,0BAA0B,GAAG,UAAU/B,IAAI,EAAEzE,IAAI,EAAE;IAEtD5J,MAAM,CAACqQ,mBAAmB,CAACC,sBAAsB,CAACjC,IAAI,CAAC;IACvDrO,MAAM,CAACqQ,mBAAmB,CAACE,qBAAqB,CAAClC,IAAI,CAAC;IAEtD,OAAOrO,MAAM,CAACwQ,aAAa,CAACnC,IAAI,EAAEzE,IAAI,CAAC;EAC3C,CAAC;EAED5J,MAAM,CAACwQ,aAAa,GAAG,UAAUnC,IAAI,EAAEzE,IAAI,EAAE6G,aAAa,EAAE;IACxD,IAAIC,KAAK,GAAGrC,IAAI,CAACzE,IAAI,CAAC;IAEtB,IAAG6G,aAAa,KAAKE,SAAS,EAC9B;MACIF,aAAa,GAAG,CAAC;IACrB;IAEA,IAAK,CAACC,KAAK,CAAC3E,QAAQ,IAAI2E,KAAK,CAACE,MAAM,IAAM,CAACF,KAAK,CAAC3E,QAAQ,IAAI2E,KAAK,CAACtK,MAAM,GAAGqK,aAAc,EACtF,OAAO,4BAA4B,CAAC,KACnC,IAAK,CAACC,KAAK,CAAC3E,QAAQ,IAAI2E,KAAK,CAACG,MAAM,CAACC,QAAQ,MAAMJ,KAAK,CAACE,MAAM,IAAIF,KAAK,CAACtK,MAAM,GAAGqK,aAAa,CAAC,EACjG,OAAO,0BAA0B;EACzC,CAAC;;EAED;;EAEAzQ,MAAM,CAAC+Q,aAAa,GAAG,UAAS1C,IAAI,EAAE2C,OAAO,EAAE;IAC3ClN,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC+G,eAAe,EAAE,UAAUb,GAAG,EAAEtG,EAAE,EAAE;MAC9C,IAAIA,EAAE,CAACoH,SAAS,KAAK,UAAU,EAAE;QAC7BpH,EAAE,CAACqH,SAAS,GAAGoH,IAAI,CAACzE,IAAI,CAACgH,MAAM,IAAIhR,EAAE,CAACqH,SAAS;QAC/C,IAAI+J,OAAO,EACPpR,EAAE,CAACqH,SAAS,GAAG,IAAI;QAEvBrH,EAAE,CAACsH,OAAO,GAAG,EAAE,CAACmH,IAAI,CAACzE,IAAI,CAACmC,QAAQ,IAAIsC,IAAI,CAACzE,IAAI,CAACiH,MAAM,CAACC,QAAQ,MAAMzC,IAAI,CAACzE,IAAI,CAACgH,MAAM,IAAIvC,IAAI,CAACzE,IAAI,CAACxD,MAAM,GAAG,CAAC,CAAC,CAAC;MACnH;IAEJ,CAAC,CAAC;EACN,CAAC;EAEDpG,MAAM,CAACiR,YAAY,GAAG,UAAU5C,IAAI,EAA8B;IAAA,IAA5B6C,kBAAkB,GAAAC,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,KAAK;IAC5D,IAAG,CAACnR,MAAM,CAAC+G,eAAe,EACtB;IAEJ,IAAIqK,YAAY,GAAGpR,MAAM,CAAC+G,eAAe,CAACsK,IAAI,CAAC,UAAArL,CAAC;MAAA,OAAIA,CAAC,CAACgB,SAAS,KAAK,UAAU;IAAA,EAAC;IAE/E,IAAIC,SAAS,GAAG,KAAK;MAAEC,OAAO,GAAG,IAAI;IAErC,IAAIkK,YAAY,EAAC;MACbtN,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4F,cAAc,CAAChD,QAAQ,EAAE,UAAC0O,QAAQ,EAAEC,GAAG,EAAK;QAEtD,IAAIC,WAAW,GAAGnD,IAAI,gBAAAoD,MAAA,CAAgBH,QAAQ,EAAG;QACjD,IAAII,KAAK,GAAGrD,IAAI,UAAAoD,MAAA,CAAUH,QAAQ,EAAG;QACrC,IAAIK,WAAW,GAAGtD,IAAI,gBAAAoD,MAAA,CAAgBH,QAAQ,EAAG;QACjD,IAAI5G,KAAK,GAAG2D,IAAI,UAAAoD,MAAA,CAAUH,QAAQ,EAAG;QAErC,IAAIM,YAAY,GAAGJ,WAAW,CAACZ,MAAM,IAAIc,KAAK,CAACd,MAAM,IAAIe,WAAW,CAACf,MAAM,IAAIlG,KAAK,CAACkG,MAAM,IAAIM,kBAAkB;QACjH,IAAIW,UAAU,GAAG,EAAE,CAACL,WAAW,CAACzF,QAAQ,IAAIyF,WAAW,CAACX,MAAM,CAACC,QAAQ,MAAMU,WAAW,CAACZ,MAAM,IAAIY,WAAW,CAACpL,MAAM,GAAG,CAAC,CAAC,CAAC,IACxH,EAAE,CAACsL,KAAK,CAAC3F,QAAQ,IAAI2F,KAAK,CAACb,MAAM,CAACC,QAAQ,MAAMY,KAAK,CAACd,MAAM,IAAIc,KAAK,CAACtL,MAAM,GAAG,CAAC,CAAC,CAAC,IAClF,EAAE,CAACuL,WAAW,CAAC5F,QAAQ,IAAI4F,WAAW,CAACd,MAAM,CAACC,QAAQ,MAAMa,WAAW,CAACf,MAAM,IAAIe,WAAW,CAACvL,MAAM,GAAG,CAAC,CAAC,CAAC,IACtG,EAAE,CAACsE,KAAK,CAACqB,QAAQ,IAAIrB,KAAK,CAACmG,MAAM,CAACC,QAAQ,MAAMpG,KAAK,CAACkG,MAAM,IAAIlG,KAAK,CAACtE,MAAM,GAAG,CAAC,CAAC,CAAC,KACjF,CAAC8K,kBAAkB,IAAKA,kBAAkB,IAAIM,WAAW,CAACM,MAAO,CAAC;QAE1E7K,SAAS,GAAGA,SAAS,IAAI2K,YAAY;QACrC1K,OAAO,GAAGA,OAAO,IAAI2K,UAAU;QAE/B,IAAID,YAAY,IAAIJ,WAAW,CAACX,MAAM,CAACC,QAAQ,EAAE;UAC7C;UACAU,WAAW,CAACO,SAAS,CAAC,CAAC;QAC3B;MACJ,CAAC,CAAC;MAEFX,YAAY,CAACnK,SAAS,GAAGA,SAAS;MAClCmK,YAAY,CAAClK,OAAO,GAAGA,OAAO;IAClC;EACJ,CAAC;EAEDlH,MAAM,CAACwO,YAAY,GAAG,UAAUH,IAAI,EAAEC,IAAI,EAAE;IACxC,IAAG,CAACtO,MAAM,CAAC+G,eAAe,EACtB;IAEJ,IAAIiL,KAAK,GAAGhS,MAAM,CAAC+G,eAAe,CAACsK,IAAI,CAAC,UAAArL,CAAC;MAAA,OAAIA,CAAC,CAACgB,SAAS,KAAKsH,IAAI;IAAA,EAAC;IAElE,IAAIrH,SAAS,GAAG,KAAK;MAAEC,OAAO,GAAG,IAAI;IAErC,IAAI8K,KAAK,EAAC;MACNlO,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4F,cAAc,CAAC5C,SAAS,CAAC+C,MAAM,CAAC,UAAAC,CAAC;QAAA,OAAIA,CAAC,CAAC9C,IAAI,KAAKoL,IAAI;MAAA,EAAC,EAAE,UAACgD,QAAQ,EAAEC,GAAG,EAAK;QAEpF,IAAIU,KAAK,GAAG5D,IAAI,SAAAoD,MAAA,CAASnD,IAAI,OAAAmD,MAAA,CAAIH,QAAQ,EAAG;QAC5C,IAAIY,KAAK,GAAG7D,IAAI,SAAAoD,MAAA,CAASnD,IAAI,OAAAmD,MAAA,CAAIH,QAAQ,EAAG;QAC5C,IAAIa,IAAI,GAAG9D,IAAI,QAAAoD,MAAA,CAAQnD,IAAI,OAAAmD,MAAA,CAAIH,QAAQ,EAAG;QAC1C,IAAIc,KAAK,GAAG/D,IAAI,SAAAoD,MAAA,CAASnD,IAAI,OAAAmD,MAAA,CAAIH,QAAQ,EAAG;QAC5C,IAAIe,OAAO,GAAGhE,IAAI,WAAAoD,MAAA,CAAWnD,IAAI,OAAAmD,MAAA,CAAIH,QAAQ,EAAG;QAChD,IAAIgB,OAAO,GAAGjE,IAAI,WAAAoD,MAAA,CAAWnD,IAAI,OAAAmD,MAAA,CAAIH,QAAQ,EAAG;QAChD,IAAIiB,cAAc,GAAGlE,IAAI,kBAAAoD,MAAA,CAAkBnD,IAAI,OAAAmD,MAAA,CAAIH,QAAQ,EAAG;QAE9D,IAAIM,YAAY,GAAGK,KAAK,CAACrB,MAAM,IAAIsB,KAAK,CAACtB,MAAM,IAAIuB,IAAI,CAACvB,MAAM,IAAIwB,KAAK,CAACxB,MAAM,IAAIyB,OAAO,CAACzB,MAAM,IAAI0B,OAAO,CAAC1B,MAAM,IAAI2B,cAAc,CAAC3B,MAAM;QAC3I,IAAIiB,UAAU,GACV,EAAE,CAACI,KAAK,CAAClG,QAAQ,IAAIkG,KAAK,CAACpB,MAAM,CAACC,QAAQ,MAAMmB,KAAK,CAACrB,MAAM,IAAIqB,KAAK,CAAC7L,MAAM,GAAG,CAAC,CAAC,CAAC,IAClF,EAAE,CAAC+L,IAAI,CAACpG,QAAQ,IAAIoG,IAAI,CAACtB,MAAM,CAACC,QAAQ,MAAMmB,KAAK,CAACrB,MAAM,IAAIuB,IAAI,CAACvB,MAAM,IAAIuB,IAAI,CAAC/L,MAAM,GAAG,CAAC,CAAC,CAAC;QAElGa,SAAS,GAAGA,SAAS,IAAI2K,YAAY;QACrC1K,OAAO,GAAGA,OAAO,IAAI2K,UAAU;QAE/B,IAAID,YAAY,EAAE;UACd,IAAGK,KAAK,CAACpB,MAAM,CAACC,QAAQ,EAAE;YACtBmB,KAAK,CAACF,SAAS,CAAC,CAAC;UACrB;UACA,IAAGI,IAAI,CAACtB,MAAM,CAACC,QAAQ,EAAE;YACrBqB,IAAI,CAACJ,SAAS,CAAC,CAAC;UACpB;QACJ;MACJ,CAAC,CAAC;MAEFC,KAAK,CAAC/K,SAAS,GAAGA,SAAS;MAC3B+K,KAAK,CAAC9K,OAAO,GAAGA,OAAO;IAC3B;EACJ,CAAC;EAEDlH,MAAM,CAACwS,YAAY,GAAG,UAAUnE,IAAI,EAAE;IACnC,IAAIA,IAAI,CAACtC,QAAQ,IAAI,CAACsC,IAAI,CAACuC,MAAM,EAAE;MAC9B,OAAO,KAAK;IAChB;IAEA,IAAI6B,KAAK,GAAG,IAAI;IAChB3O,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC+G,eAAe,EAAE,UAASb,GAAG,EAAEtG,EAAE,EAAE;MAC7C,IAAIA,EAAE,CAACsH,OAAO,KAAK,KAAK,EACpBuL,KAAK,GAAG,KAAK;IACrB,CAAC,CAAC;IACF,OAAO,CAACA,KAAK;EACjB,CAAC;EAEDzS,MAAM,CAACmQ,oBAAoB,GAAG,YAAY;IACtC,IAAInQ,MAAM,CAACmB,IAAI,IAAI,KAAK,EAAE;MACtB,IAAG,CAACjB,aAAa,CAAC2L,QAAQ,EACtB/H,CAAC,CAAC,OAAO,CAAC,CAACsB,KAAK,CAAC,CAAC;IAC1B,CAAC,MACI,IAAIpF,MAAM,CAACmB,IAAI,IAAI,qBAAqB,EAAE;MAC3C,IAAG,CAACjB,aAAa,CAAC2L,QAAQ,EACtB/H,CAAC,CAAC,kBAAkB,CAAC,CAACsB,KAAK,CAAC,CAAC;IACrC,CAAC,MACI,IAAIpF,MAAM,CAACmB,IAAI,IAAI,cAAc,IAAInB,MAAM,CAACmB,IAAI,IAAI,yBAAyB,EAAE;MAChF,IAAG,CAACjB,aAAa,CAAC2L,QAAQ,EACtB/H,CAAC,CAAC,WAAW,CAAC,CAACsB,KAAK,CAAC,CAAC;IAC9B,CAAC,MACI,IAAIpF,MAAM,CAACmB,IAAI,IAAI,qBAAqB,EAAE;MAC3C,IAAG,CAACjB,aAAa,CAAC2L,QAAQ,EACtB/H,CAAC,CAAC,SAAS,CAAC,CAACsB,KAAK,CAAC,CAAC;IAC5B;EACJ,CAAC;EAID,SAASsN,WAAWA,CAACpE,IAAI,EAAEqE,UAAU,EAAE;IACnC,OAAO3S,MAAM,CAAC4F,cAAc,IAAI5F,MAAM,CAAC4F,cAAc,CAAC5C,SAAS,CAAC4P,IAAI,CAAC,UAAC5M,CAAC,EAAEO,KAAK;MAAA,OAAKP,CAAC,CAAC9C,IAAI,KAAKoL,IAAI,IAAI/H,KAAK,GAAGoM,UAAU;IAAA,EAAC,GAAGA,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;EACnJ;EAEA,SAASE,WAAWA,CAACvE,IAAI,EAAEqE,UAAU,EAAE;IACnC,OAAO3S,MAAM,CAAC4F,cAAc,IAAI5F,MAAM,CAAC4F,cAAc,CAAC5C,SAAS,CAAC8P,OAAO,CAAC,CAAC,CAACF,IAAI,CAAC,UAAC5M,CAAC,EAAEO,KAAK;MAAA,OAAKP,CAAC,CAAC9C,IAAI,KAAKoL,IAAI,IAAI/H,KAAK,GAAGoM,UAAU;IAAA,EAAC,GAAGA,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;EAC7J;EAEA3S,MAAM,CAAC+S,eAAe,GAAG,YAAY;IACjC,QAAQ/S,MAAM,CAACwF,UAAU;MACzB,KAAK,CAAC;QACF,IAAIxF,MAAM,CAACuF,gBAAgB,KAAK,CAAC,EAC7B,OAAO,KAAK,CAAC,KAEb,OAAO,IAAI;QACf;AAAM;MACV,KAAK,CAAC;QACF,OAAOsN,WAAW,CAAC,UAAU,EAAE7S,MAAM,CAAC+B,IAAI,CAACG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACnE;AAAM;MACV,KAAK,CAAC;QACF,OAAO2Q,WAAW,CAAC,SAAS,EAAE7S,MAAM,CAAC+B,IAAI,CAACE,eAAe,CAAC,KAAK,CAAC,CAAC;QACjE;AAAM;MACV;QACI,OAAO,KAAK;IAChB;EACJ,CAAC;EAEDjC,MAAM,CAACgT,eAAe,GAAG,YAAW;IAChC,QAAQhT,MAAM,CAACwF,UAAU;MACrB,KAAK,CAAC;QACF,IAAIxF,MAAM,CAAC4F,cAAc,IAAI5F,MAAM,CAACuF,gBAAgB,KAAKvF,MAAM,CAAC4F,cAAc,CAAChD,QAAQ,CAACwD,MAAM,GAAG,CAAC,EAC9F,OAAO,KAAK,CAAC,KAEb,OAAO,IAAI;QACf;AAAM;MACV,KAAK,CAAC;QACF,OAAOsM,WAAW,CAAC,UAAU,EAAE1S,MAAM,CAAC+B,IAAI,CAACG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACnE;AAAM;MACV,KAAK,CAAC;QACF,OAAOwQ,WAAW,CAAC,SAAS,EAAE1S,MAAM,CAAC+B,IAAI,CAACE,eAAe,CAAC,KAAK,CAAC,CAAC;QACjE;AAAM;MACV;QACI,OAAO,KAAK;IACpB;EACJ,CAAC;EAEDjC,MAAM,CAACiT,SAAS,GAAG,UAAUC,SAAS,EAAE7E,IAAI,EAAE/L,KAAK,EAAE;IACjDtC,MAAM,CAAC8B,gBAAgB,GAAG9B,MAAM,CAACwF,UAAU;IAC3C,IAAIoJ,aAAa,CAACP,IAAI,CAAC,KAAK,KAAK,EAAE;MAC/BrO,MAAM,CAAC8B,gBAAgB,GAAG,CAAC,CAAC;MAC5B,IAAIoR,SAAS,KAAK,CAAC,EACf7E,IAAI,CAAC8E,OAAO,CAACpO,YAAY,CAAC,CAAC;MAC/B/E,MAAM,CAACyF,OAAO,GAAGyN,SAAS,KAAKlT,MAAM,CAACwF,UAAU,GAAGxF,MAAM,CAACwF,UAAU,GAAGxF,MAAM,CAACyF,OAAO;MACrFzF,MAAM,CAACwF,UAAU,GAAG0N,SAAS;IACjC,CAAC,MAAM;MACHlT,MAAM,CAACwF,UAAU,GAAGxF,MAAM,CAACyF,OAAO;IACtC;IAEAzF,MAAM,CAACsF,YAAY,CAAC,CAAC;IACrBtF,MAAM,CAACqH,aAAa,CAAC,CAAC;EAC1B,CAAC;EAEDrH,MAAM,CAACoT,eAAe,GAAG,UAAUF,SAAS,EAAE7E,IAAI,EAAE/L,KAAK,EAAC;IACtD,IAAIiK,mBAAmB,CAAC8B,IAAI,EAAErO,MAAM,CAAC4E,aAAa,CAAC,KAAK,KAAK,IAAI,CAAC5E,MAAM,CAAC2C,WAAW,CAACgB,iBAAiB,EAAE;MACpG3D,MAAM,CAAC4E,aAAa,GAAG5E,MAAM,CAAC2E,gBAAgB;MAC9C3E,MAAM,CAAC2E,gBAAgB,GAAGuO,SAAS;IACvC,CAAC,MAAM;MACHlT,MAAM,CAAC2E,gBAAgB,GAAG3E,MAAM,CAAC4E,aAAa;IAClD;EACJ,CAAC;EAED5E,MAAM,CAACqT,QAAQ,GAAG,UAAUhF,IAAI,EAAE;IAC9BrO,MAAM,CAAC8B,gBAAgB,GAAG9B,MAAM,CAACwF,UAAU;IAC3C,IAAIoJ,aAAa,CAACP,IAAI,CAAC,EAAE;MACrB;IACJ;IACArO,MAAM,CAAC8B,gBAAgB,GAAG,CAAC,CAAC;IAE5B,IAAI9B,MAAM,CAACwF,UAAU,KAAK,CAAC,EAAE;MACzB6I,IAAI,CAAC8E,OAAO,CAACpO,YAAY,CAAC,CAAC;MAC3B/E,MAAM,CAACuF,gBAAgB,IAAI,CAAC;IAChC;IACA,IAAIvF,MAAM,CAACwF,UAAU,KAAK,CAAC,EAAE;MACzBxF,MAAM,CAAC+B,IAAI,CAACG,gBAAgB,GAAG2Q,WAAW,CAAC,UAAU,EAAE7S,MAAM,CAAC+B,IAAI,CAACG,gBAAgB,CAAC;IACxF;IACA,IAAIlC,MAAM,CAACwF,UAAU,KAAK,CAAC,EAAE;MACzBxF,MAAM,CAAC+B,IAAI,CAACE,eAAe,GAAG4Q,WAAW,CAAC,SAAS,EAAE7S,MAAM,CAAC+B,IAAI,CAACE,eAAe,CAAC;IACrF;EACJ,CAAC;EAEDjC,MAAM,CAACsT,QAAQ,GAAG,UAAUjF,IAAI,EAAE;IAC9BrO,MAAM,CAAC8B,gBAAgB,GAAG9B,MAAM,CAACwF,UAAU;IAC3C,IAAIoJ,aAAa,CAACP,IAAI,CAAC,EAAE;MACrB;IACJ;IACArO,MAAM,CAAC8B,gBAAgB,GAAG,CAAC,CAAC;IAE5B,IAAI9B,MAAM,CAACwF,UAAU,KAAK,CAAC,EAAE;MACzB6I,IAAI,CAAC8E,OAAO,CAACpO,YAAY,CAAC,CAAC;MAC3B/E,MAAM,CAACuF,gBAAgB,IAAI,CAAC;IAChC;IACA,IAAIvF,MAAM,CAACwF,UAAU,KAAK,CAAC,EAAE;MACzBxF,MAAM,CAAC+B,IAAI,CAACG,gBAAgB,GAAGwQ,WAAW,CAAC,UAAU,EAAE1S,MAAM,CAAC+B,IAAI,CAACG,gBAAgB,CAAC;IACxF;IACA,IAAIlC,MAAM,CAACwF,UAAU,KAAK,CAAC,EAAE;MACzBxF,MAAM,CAAC+B,IAAI,CAACE,eAAe,GAAGyQ,WAAW,CAAC,SAAS,EAAE1S,MAAM,CAAC+B,IAAI,CAACE,eAAe,CAAC;IACrF;EACJ,CAAC;EAEAjC,MAAM,CAACuT,uBAAuB,GAAG,KAAK;EACtCvT,MAAM,CAACwT,sBAAsB,GAAG,KAAK;EAEtCxT,MAAM,CAACqQ,mBAAmB,GAAG,CAAC,CAAC;EAC/BrQ,MAAM,CAACqQ,mBAAmB,CAACC,sBAAsB,GAAI,UAASjC,IAAI,EAAC;IAC/D,IAAIA,IAAI,CAACoF,QAAQ,CAACC,UAAU,IAAKrF,IAAI,CAACoF,QAAQ,CAACC,UAAU,CAACtN,MAAM,GAAG,CAAC,IAChEiI,IAAI,CAACsF,OAAO,CAACD,UAAU,IAAIrF,IAAI,CAACsF,OAAO,CAACD,UAAU,CAACtN,MAAM,GAAG,CAAE,IAC/DiI,IAAI,CAACuF,SAAS,CAACF,UAAU,IAAKrF,IAAI,CAACuF,SAAS,CAACF,UAAU,CAACtN,MAAM,GAAG,CAAE,IAClEiI,IAAI,CAACwF,aAAa,CAACH,UAAU,IAAIrF,IAAI,CAACwF,aAAa,CAACH,UAAU,CAACtN,MAAM,GAAG,CAAE,IAC1EiI,IAAI,CAACyF,MAAM,CAACJ,UAAU,IAAIrF,IAAI,CAACyF,MAAM,CAACJ,UAAU,CAACtN,MAAM,GAAG,CAAE,IAC5DpG,MAAM,CAAC2C,WAAW,CAACgB,iBAAkB,EAAG;MACxC3D,MAAM,CAACuT,uBAAuB,GAAG,IAAI;IACzC,CAAC,MACG;MACAvT,MAAM,CAACuT,uBAAuB,GAAG,KAAK;IAC1C;IACA,OAAQvT,MAAM,CAACuT,uBAAuB;EAC1C,CAAC;EACDvT,MAAM,CAACqQ,mBAAmB,CAACE,qBAAqB,GAAI,UAASlC,IAAI,EAAC;IAC9D,IAAIA,IAAI,CAAC0F,QAAQ,CAACL,UAAU,IAAKrF,IAAI,CAAC0F,QAAQ,CAACL,UAAU,CAACtN,MAAM,GAAG,CAAC,IAChEiI,IAAI,CAAC2F,OAAO,CAACN,UAAU,IAAIrF,IAAI,CAAC2F,OAAO,CAACN,UAAU,CAACtN,MAAM,GAAG,CAAE,IAC/DiI,IAAI,CAAC4F,SAAS,CAACP,UAAU,IAAKrF,IAAI,CAAC4F,SAAS,CAACP,UAAU,CAACtN,MAAM,GAAG,CAAE,IAClEiI,IAAI,CAAC6F,aAAa,CAACR,UAAU,IAAIrF,IAAI,CAAC6F,aAAa,CAACR,UAAU,CAACtN,MAAM,GAAG,CAAE,IAC1EiI,IAAI,CAAC8F,MAAM,CAACT,UAAU,IAAIrF,IAAI,CAAC8F,MAAM,CAACT,UAAU,CAACtN,MAAM,GAAG,CAAE,EAAC;MAC7DpG,MAAM,CAACwT,sBAAsB,GAAG,IAAI;IACxC,CAAC,MACG;MACAxT,MAAM,CAACwT,sBAAsB,GAAG,KAAK;IACzC;IACA,OAAQxT,MAAM,CAACwT,sBAAsB;EACzC,CAAC;EAGD,SAASjH,mBAAmBA,CAAC8B,IAAI,EAACkD,GAAG,EAAC;IAClC,IAAI6C,KAAK,GAAG3T,cAAc,CAACe,SAAS,CAAC,OAAO,CAAC;IAC7C,IAAI2C,GAAG,GAAG,EAAE;IACZ,IAAIkQ,QAAQ,GAAG,KAAK;IAEpB,IAAG9C,GAAG,KAAK,CAAC,EAAC;MACT,IAAI+C,UAAU,GAAGtU,MAAM,CAACqQ,mBAAmB,CAACC,sBAAsB,CAACjC,IAAI,CAAC;MAExE,IAAIiG,UAAU,KAAMjG,IAAI,CAACoF,QAAQ,CAAC1H,QAAQ,IACnCsC,IAAI,CAACoF,QAAQ,CAAC5C,MAAM,CAACC,QAAQ,IAC/BzC,IAAI,CAACyF,MAAM,CAAC/H,QAAQ,IACdsC,IAAI,CAACyF,MAAM,CAACjD,MAAM,CAACC,QAAS,CACtC,EAAE;QACCuD,QAAQ,GAAG,IAAI;MACnB;IACJ,CAAC,MACI,IAAG9C,GAAG,KAAK,CAAC,EAAC;MACd,IAAI+C,UAAU,GAAGtU,MAAM,CAACqQ,mBAAmB,CAACE,qBAAqB,CAAClC,IAAI,CAAC;MAEvE,IAAIiG,UAAU,KAAMjG,IAAI,CAAC0F,QAAQ,CAAChI,QAAQ,IACnCsC,IAAI,CAAC0F,QAAQ,CAAClD,MAAM,CAACC,QAAQ,IAC/BzC,IAAI,CAAC8F,MAAM,CAACpI,QAAQ,IACdsC,IAAI,CAAC8F,MAAM,CAACtD,MAAM,CAACC,QAAS,CAAC,EAAE;QACtCuD,QAAQ,GAAG,IAAI;MACnB;IACJ;IAEA,OAAOA,QAAQ;EACnB;EAEA,SAASzF,aAAaA,CAACP,IAAI,EAAE;IACzB,IAAI+F,KAAK,GAAG3T,cAAc,CAACe,SAAS,CAAC,OAAO,CAAC;IAC7C,IAAI+S,MAAM,GAAG,EAAE;IACf,IAAIF,QAAQ,GAAG,KAAK;IAEpBvQ,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4F,cAAc,CAAC5C,SAAS,CAAC+C,MAAM,CAAC,UAAAC,CAAC;MAAA,OAAIA,CAAC,CAAC9C,IAAI,KAAK,UAAU,IAAI8C,CAAC,CAAC9C,IAAI,KAAK,SAAS;IAAA,EAAC,EAAE,UAACsR,CAAC,EAAEjG,OAAO,EAAK;MAE/G,IAAID,IAAI,GAAGC,OAAO,CAACrL,IAAI;MAEvB,IAAIoO,QAAQ,GAAGtR,MAAM,CAAC4F,cAAc,CAAC5C,SAAS,CAAC+C,MAAM,CAAC,UAAAC,CAAC;QAAA,OAAIA,CAAC,CAAC9C,IAAI,KAAKoL,IAAI;MAAA,EAAC,CAACe,OAAO,CAACd,OAAO,CAAC;MAE5F,IAAI0D,KAAK,GAAG5D,IAAI,SAAAoD,MAAA,CAASnD,IAAI,OAAAmD,MAAA,CAAIH,QAAQ,EAAG;MAC5C,IAAIa,IAAI,GAAG9D,IAAI,QAAAoD,MAAA,CAAQnD,IAAI,OAAAmD,MAAA,CAAIH,QAAQ,EAAG;MAC1C,IAAIc,KAAK,GAAG/D,IAAI,SAAAoD,MAAA,CAASnD,IAAI,OAAAmD,MAAA,CAAIH,QAAQ,EAAG;MAC5C,IAAIe,OAAO,GAAGhE,IAAI,WAAAoD,MAAA,CAAWnD,IAAI,OAAAmD,MAAA,CAAIH,QAAQ,EAAG;MAChD,IAAIgB,OAAO,GAAGjE,IAAI,WAAAoD,MAAA,CAAWnD,IAAI,OAAAmD,MAAA,CAAIH,QAAQ,EAAG;MAEhD,IAAK,CAACW,KAAK,CAAClG,QAAQ,IAAIkG,KAAK,CAACpB,MAAM,CAACC,QAAQ,MAAMmB,KAAK,CAACrB,MAAM,IAAIqB,KAAK,CAAC7L,MAAM,GAAG,CAAC,CAAC,EAAG;QACnFmO,MAAM,CAAClO,IAAI,CAAC5F,cAAc,CAACe,SAAS,aAAAiQ,MAAA,CAAaH,QAAQ,GAAG,CAAC,kCAA+B,CAAC,CAAC;QAC9F+C,QAAQ,GAAG,IAAI;MACnB;MAEA,IAAK,CAAClC,IAAI,CAACpG,QAAQ,IAAIoG,IAAI,CAACtB,MAAM,CAACC,QAAQ,MAAMqB,IAAI,CAACvB,MAAM,IAAIuB,IAAI,CAAC/L,MAAM,GAAG,CAAC,CAAC,EAAG;QAC/EmO,MAAM,CAAClO,IAAI,CAAC5F,cAAc,CAACe,SAAS,aAAAiQ,MAAA,CAAaH,QAAQ,GAAG,CAAC,0BAAuB,CAAC,CAAC;QACtF+C,QAAQ,GAAG,IAAI;MACnB;IACJ,CAAC,CAAC;IAEFvQ,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4F,cAAc,CAAChD,QAAQ,EAAE,UAAC0O,QAAQ,EAAEmD,OAAO,EAAK;MAE1D,IAAIjD,WAAW,GAAGnD,IAAI,gBAAAoD,MAAA,CAAgBH,QAAQ,EAAG;MACjD,IAAI5G,KAAK,GAAG2D,IAAI,UAAAoD,MAAA,CAAUH,QAAQ,EAAG;MAErC,IAAK,CAAC5G,KAAK,CAACqB,QAAQ,IAAIrB,KAAK,CAACmG,MAAM,CAACC,QAAQ,MAAMpG,KAAK,CAACkG,MAAM,IAAIlG,KAAK,CAACtE,MAAM,GAAG,CAAC,CAAC,EAAG;QACnFiO,QAAQ,GAAG,IAAI;QACfE,MAAM,CAAClO,IAAI,CAAC5F,cAAc,CAACe,SAAS,aAAAiQ,MAAA,CAAaH,QAAQ,GAAG,CAAC,kCAA+B,CAAC,CAAC;MAClG;MAEA,IAAK,CAACE,WAAW,CAACzF,QAAQ,IAAIyF,WAAW,CAACX,MAAM,CAACC,QAAQ,MAAMU,WAAW,CAACZ,MAAM,IAAIY,WAAW,CAACpL,MAAM,GAAG,CAAC,CAAC,EAAG;QAC3GiO,QAAQ,GAAG,IAAI;QACfE,MAAM,CAAClO,IAAI,CAAC5F,cAAc,CAACe,SAAS,aAAAiQ,MAAA,CAAaH,QAAQ,GAAG,CAAC,0BAAuB,CAAC,CAAC;MAC1F;IAEJ,CAAC,CAAC;IAEF,IAAI+C,QAAQ,EACRlU,YAAY,CAACiE,SAAS,CAACmQ,MAAM,CAACxO,MAAM,CAAC,UAAC2O,CAAC,EAAEF,CAAC,EAAEhI,CAAC;MAAA,OAAKA,CAAC,CAAC6C,OAAO,CAACqF,CAAC,CAAC,KAAKF,CAAC;IAAA,EAAC,CAACG,IAAI,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC,EAAEP,KAAK,CAAC;IAE5G,OAAOC,QAAQ;EACnB;EAAC;EAEDrU,MAAM,CAACmM,6BAA6B,GAAG,YAAY;IAC/CnM,MAAM,CAACmB,IAAI,GAAG,QAAQ;IAEtB,IAAGnB,MAAM,CAACa,UAAU,EAAC;MACjBiD,CAAC,CAAC,qBAAqB,CAAC,CAACkF,GAAG,CAAChJ,MAAM,CAACa,UAAU,CAAC,CAAC2D,OAAO,CAAC,OAAO,CAAC;IACpE;EACJ,CAAC;EAEDxE,MAAM,CAAC6P,iBAAiB,GAAG,UAAUxB,IAAI,EAAE;IACvC,IAAIA,IAAI,CAACuC,MAAM,EAAE;MACbpQ,QAAQ,CAAC,YAAW;QAChBP,UAAU,CAAC+K,UAAU,CAAC,4BAA4B,CAAC;MACvD,CAAC,CAAC;MAEF;IACJ;IAEA,IAAGhL,MAAM,CAACmB,IAAI,KAAK,yBAAyB,EAAC;MACzCnB,MAAM,CAACmM,6BAA6B,CAAC,CAAC;IAC1C,CAAC,MACI;MACDnM,MAAM,CAACiM,YAAY,CAAC,CAAC;IACzB;EACJ,CAAC;EAEDjM,MAAM,CAACqC,GAAG,CAAC,8BAA8B,EAAE,YAAY;IACnDrC,MAAM,CAACiM,YAAY,CAAC,CAAC;EACzB,CAAC,CAAC;EAEFjM,MAAM,CAAC0I,MAAM,CAAC,uBAAuB,EACjC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B5D,OAAO,CAACC,GAAG,CAAC,0BAA0B,GAAG0D,QAAQ,CAAC;EACtD,CACJ,CAAC;EAED3I,MAAM,CAAC0I,MAAM,CAAC,sBAAsB,EAChC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B5D,OAAO,CAACC,GAAG,CAAC,yBAAyB,GAAG0D,QAAQ,CAAC;EACrD,CACJ,CAAC;EAED3I,MAAM,CAAC0I,MAAM,CAAC,sBAAsB,EAChC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B5D,OAAO,CAACC,GAAG,CAAC,yBAAyB,GAAG0D,QAAQ,CAAC;EACrD,CACJ,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;AChvCH7I,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,kCAAkC,EACnE,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,uBAAuB,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EACpI,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAC3E,UAAUC,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAEC,YAAY,EAAEyU,qBAAqB,EAAEvU,aAAa,EAAEwU,eAAe,EAAEC,eAAe,EAC7HxU,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,cAAc,EAAEsU,UAAU,EAAE;EAE3D/U,MAAM,CAACgV,gBAAgB,GAAG9U,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,GAAGH,eAAe,GAAGD,eAAe;EAC5G7U,MAAM,CAACkV,+BAA+B,GAAG,KAAK;EAC9ClV,MAAM,CAACmV,mBAAmB,GAAG,IAAI;EACjCnV,MAAM,CAACa,UAAU,GAAG,IAAI;EACxBb,MAAM,CAACoV,6BAA6B,GAAG,EAAE;EACzCpV,MAAM,CAACiB,WAAW,GAAGV,SAAS,CAACW,mBAAmB;EAClDlB,MAAM,CAACmB,IAAI,GAAG,QAAQ;EACtBnB,MAAM,CAACqB,QAAQ,GAAGnB,aAAa,CAACmB,QAAQ;EACxCrB,MAAM,CAACsB,uBAAuB,GAAG,CAAC;EAClCtB,MAAM,CAACuB,iBAAiB,GAAGd,cAAc,CAACe,SAAS,CAAC,wDAAwD,EAAE;IAAEC,GAAG,EAAEzB,MAAM,CAACsB;EAAwB,CAAC,CAAC;EAEtJtB,MAAM,CAACqV,SAAS,GAAG,IAAI;EAEvBrV,MAAM,CAACmC,IAAI,GAAG;IAAE,QAAQ,EAAE9C,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAG;EAAK,CAAC;EAE3DpC,MAAM,CAACqC,GAAG,CAAC,+BAA+B,EAAE,UAAUC,KAAK,EAAEC,MAAM,EAAE;IACjEvC,MAAM,CAACqB,QAAQ,GAAGkB,MAAM;EAC5B,CAAC,CAAC;EAGFvC,MAAM,CAACqC,GAAG,CAAC,sBAAsB,EAAE,UAAUC,KAAK,EAAEC,MAAM,EAAE;IACxDvC,MAAM,CAACmV,mBAAmB,GAAG,IAAI;IACjCnV,MAAM,CAACa,UAAU,GAAG,IAAI;IACxBb,MAAM,CAACoV,6BAA6B,GAAG,EAAE;EAC7C,CAAC,CAAC;EAEFpV,MAAM,CAACsV,sCAAsC,GAAG,UAAUC,KAAK,EAC/D;IACIvV,MAAM,CAACgV,gBAAgB,CAACQ,kCAAkC,CAACD,KAAK,CAAC,CAACvR,IAAI,CAAC,UAAAqF,GAAG,EAAI;MAC1ErJ,MAAM,CAACyV,yBAAyB,CAAC,CAAC;IACtC,CAAC,CAAC;EACN,CAAC;EAEDjV,QAAQ,CAAC,YAAY;IACjB0E,WAAW,CAAC,CAAC;EACjB,CAAC,EAAE,CAAC,CAAC;EAGLlF,MAAM,CAACqC,GAAG,CAAC,6BAA6B,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAC7DlE,MAAM,CAACa,UAAU,GAAG,IAAI;IACxBb,MAAM,CAACmB,IAAI,GAAG,QAAQ;IAEtBnB,MAAM,CAACgV,gBAAgB,CAACU,kCAAkC,CAAC,CAAC,CAAC1R,IAAI,CAAC,UAAA2R,CAAC,EAAI;MACnE3V,MAAM,CAACkV,+BAA+B,GAAGS,CAAC,IAAIA,CAAC,CAACC,KAAK,KAAK,MAAM;MAEhE,IAAG5V,MAAM,CAACoV,6BAA6B,CAAChP,MAAM,KAAK,CAAC,EAAC;QACjDpG,MAAM,CAACyV,yBAAyB,CAAC,CAAC;MACtC;IACJ,CAAC,CAAC;IAEFpV,aAAa,CAAC8E,UAAU,CAAC7E,QAAQ,EAAE,YAAW;MAC1C,IAAIN,MAAM,CAACqV,SAAS,EAAE;QAClBrV,MAAM,CAACqV,SAAS,GAAG,KAAK;QACxBvR,CAAC,CAAC,sCAAsC,CAAC,CAAC+R,IAAI,CAAC,CAAC;MACpD;MAEA,IAAI7V,MAAM,CAACmB,IAAI,IAAI,QAAQ,EAAE;QACzB2C,CAAC,CAAC,gCAAgC,CAAC,CAACsB,KAAK,CAAC,CAAC;MAC/C;IACJ,CAAC,CAAC;EACN,CAAC,CAAC;EAGFpF,MAAM,CAACmL,aAAa,GAAG,KAAK;EAE5BnL,MAAM,CAACyV,yBAAyB,GAAG,YAAY;IAC3CzV,MAAM,CAACmL,aAAa,GAAGnL,MAAM,CAAC8V,6BAA6B,CAAC/J,QAAQ;IACpE,IAAIvB,EAAE,GAAGxK,MAAM,CAAC+V,2BAA2B;IAE3C/V,MAAM,CAAC+V,2BAA2B,GAAG,IAAI;IAEzC,IAAI/V,MAAM,CAAC8V,6BAA6B,CAAC/J,QAAQ,EAAE;MAC/C,OAAO,KAAK;IAChB;IAEA/L,MAAM,CAACmL,aAAa,GAAG,KAAK;IAC5BrH,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAIiS,OAAO,GAAI,CAAC,CAACxL,EAAE,GAAG;MAAEpH,EAAE,EAAEoH;IAAG,CAAC,GAAG;MAAC9H,IAAI,EAAE1C,MAAM,CAACa;IAAU,CAAE;IAE7D,IAAGb,MAAM,CAACkV,+BAA+B,EACzC;MACIc,OAAO,CAACC,gBAAgB,GAAG,IAAI;IACnC;IAEArB,qBAAqB,CAACsB,yBAAyB,CAAC,CAAC,EAAElW,MAAM,CAACiB,WAAW,EAAE+U,OAAO,CAAC,CAAChS,IAAI,CAAC,UAAUC,IAAI,EAAE;MACjGjE,MAAM,CAACoV,6BAA6B,GAAGnR,IAAI,CAACkS,mBAAmB;MAC/DrS,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAI,CAAC,CAACJ,IAAI,CAACkS,mBAAmB,IAAIlS,IAAI,CAACkS,mBAAmB,CAAC/P,MAAM,GAAG,CAAC,EAAE;QACnE,IAAI,CAAClG,aAAa,CAACX,MAAM,EAAE;UACvBsL,QAAQ,CAACC,IAAI,CAAC,CAAC;QACnB,CAAC,MACI;UACDzK,aAAa,CAAC0K,YAAY,CAAC,CAAC;QAChC;;QAEA;QACA,IAAI,CAAC,CAACP,EAAE,IAAIvG,IAAI,CAACkS,mBAAmB,CAAC/P,MAAM,IAAI,CAAC,EAAE;UAC9CpG,MAAM,CAACoW,yBAAyB,CAACnS,IAAI,CAACkS,mBAAmB,CAAC,CAAC,CAAC,CAAC;UAC7DnW,MAAM,CAACqW,sBAAsB,CAAC,CAAC;UAC/B;QACJ;MACJ;MAEA7V,QAAQ,CAAC,YAAY;QACjB,IAAI,CAAC,CAACR,MAAM,CAACoV,6BAA6B,IAAIpV,MAAM,CAACoV,6BAA6B,CAAChP,MAAM,GAAG,CAAC,EAAE;UAC3F,IAAIlG,aAAa,CAAC2L,QAAQ,EAAE;YACxBhB,QAAQ,CAACC,IAAI,CAAC,CAAC;UACnB,CAAC,MACI;YACDzK,aAAa,CAAC0K,YAAY,CAAC,CAAC;UAChC;QACJ;MACJ,CAAC,EAAE,CAAC,CAAC;IACT,CAAC,EACG,UAAU5G,GAAG,EAAE;MACXL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;IAEN,OAAO,KAAK;EAChB,CAAC;EAEDnE,MAAM,CAACiM,YAAY,GAAG,YAAY;IAC9B5L,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;EAEvC,CAAC;EAEDN,MAAM,CAACoW,yBAAyB,GAAG,UAAUtM,IAAI,EAAE;IAC/C9J,MAAM,CAACmV,mBAAmB,GAAGrL,IAAI;EACrC,CAAC;EAGD9J,MAAM,CAACqW,sBAAsB,GAAG,YAAY;IACxChW,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;IACnCL,UAAU,CAAC+K,UAAU,CAAC,iCAAiC,EAAE;MAAEmK,mBAAmB,EAAEnV,MAAM,CAACmV,mBAAmB;MAAE9I,MAAM,EAAE;IAAS,CAAC,CAAC;EACnI,CAAC;AAGL,CAAC,CAAC,CAAC,C;;;;;;;;;;;;;;;;ACjJHvM,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,mCAAmC,EACpE,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EACrD,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAChD,UAAUC,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAEG,aAAa,EACtDC,QAAQ,EAAGE,QAAQ,EAAEC,cAAc,EAAE;EAErCT,MAAM,CAACsW,yBAAyB,GAAG,EAAE;EACrCtW,MAAM,CAACuW,SAAS,GAAG,EAAE;EACrBvW,MAAM,CAACwW,WAAW,GAAG,CAAC;EACtBxW,MAAM,CAACa,UAAU,GAAG,IAAI;EACxBb,MAAM,CAACyW,oBAAoB,GAAG,IAAI;EAElCzW,MAAM,CAACqC,GAAG,CAAC,sBAAsB,EAAE,UAAUC,KAAK,EAAEC,MAAM,EAAE;IACxDvC,MAAM,CAACa,UAAU,GAAG,IAAI;IACxBb,MAAM,CAACwW,WAAW,GAAG,CAAC;IACtBxW,MAAM,CAACuW,SAAS,GAAG,EAAE;IACrBvW,MAAM,CAACsW,yBAAyB,GAAG,EAAE;EACzC,CAAC,CAAC;EAEF9V,QAAQ,CAAC,YAAY;IACjB0E,WAAW,CAAC,CAAC;EACjB,CAAC,EAAE,CAAC,CAAC;EAELlF,MAAM,CAACqC,GAAG,CAAC,yBAAyB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACzD,IAAMwS,mBAAmB,GAAGxS,IAAI,CAACwS,mBAAmB,IAAI,EAAE;IAE1D1W,MAAM,CAACyW,oBAAoB,GAAG,IAAI;IAClCzW,MAAM,CAACa,UAAU,GAAG,IAAI;IACxBb,MAAM,CAAC2W,mBAAmB,GAAGD,mBAAmB,CAAC3Q,MAAM,CAAC,UAAAwI,OAAO;MAAA,OAAIA,OAAO,CAACrL,IAAI,KAAK,UAAU;IAAA,EAAC;;IAE/F;IACA,IAAM0T,2BAA2B,GAAG5W,MAAM,CAAC2W,mBAAmB,CAACnQ,SAAS,CAAC,UAAAkI,EAAE;MAAA,OAAIA,EAAE,CAAC3B,cAAc;IAAA,EAAC;IACjG,IAAI6J,2BAA2B,GAAG,CAAC,EAAE;MACjC,IAAMhX,EAAE,GAAGI,MAAM,CAAC2W,mBAAmB,CAACrH,MAAM,CAACsH,2BAA2B,EAAE,CAAC,CAAC;MAC5E5W,MAAM,CAAC2W,mBAAmB,CAACxI,OAAO,CAACvO,EAAE,CAACiX,GAAG,CAAC,CAAC,CAAC;IAChD;IAEA7W,MAAM,CAACsW,yBAAyB,GAAGtW,MAAM,CAAC2W,mBAAmB,CAACG,GAAG,CAAC,UAAAvI,OAAO,EAAI;MACzE,OAAA3H,aAAA,CAAAA,aAAA,KACO2H,OAAO;QACVwI,WAAW,KAAAtF,MAAA,CAAKlD,OAAO,CAACtL,KAAK,OAAAwO,MAAA,CAAIlD,OAAO,CAACvB,KAAK,OAAAyE,MAAA,CAAIlD,OAAO,CAAC9B,IAAI,OAAAgF,MAAA,CAAIlD,OAAO,CAAC5B,KAAK,OAAA8E,MAAA,CAAIlD,OAAO,CAAC1B,QAAQ,OAAA4E,MAAA,CAAIlD,OAAO,CAACtB,OAAO,CAAE;QACxH+J,cAAc,EAAE;MAAI;IAE5B,CAAC,CAAC;IACFhX,MAAM,CAACwW,WAAW,GAAGxW,MAAM,CAACsW,yBAAyB,CAAClQ,MAAM;;IAE5D;IACA,IAAM6Q,sBAAsB,GAAG/S,IAAI,CAACgT,mBAAmB;IACvD,IAAID,sBAAsB,EAAE;MACxB,IAAME,eAAe,GAAGnX,MAAM,CAACsW,yBAAyB,CAACjF,IAAI,CAAC,UAAA9C,OAAO,EAAI;QACrE,OAAOA,OAAO,CAACtL,KAAK,KAAKgU,sBAAsB,CAAChU,KAAK,IACjDsL,OAAO,CAACvB,KAAK,KAAKiK,sBAAsB,CAACjK,KAAK,IAC9CuB,OAAO,CAAC9B,IAAI,KAAKwK,sBAAsB,CAACxK,IAAI,IAC5C8B,OAAO,CAAC5B,KAAK,KAAKsK,sBAAsB,CAACtK,KAAK,IAC9C4B,OAAO,CAAC1B,QAAQ,KAAKoK,sBAAsB,CAACpK,QAAQ,IACpD0B,OAAO,CAACtB,OAAO,KAAKgK,sBAAsB,CAAChK,OAAO;MAC1D,CAAC,CAAC;MAEF,IAAIkK,eAAe,EAAE;QACjBnX,MAAM,CAACyW,oBAAoB,GAAGU,eAAe;MACjD;IACJ;IAEA9W,aAAa,CAAC8E,UAAU,CAAC7E,QAAQ,EAAE,YAAW;MAC1CwD,CAAC,CAAC,iCAAiC,CAAC,CAACsB,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC;EACN,CAAC,CAAC;EAEFpF,MAAM,CAACoX,YAAY,GAAG,YAAW;IAC7B,OAAOpX,MAAM,CAACsW,yBAAyB,CAAClQ,MAAM,GAAG3F,cAAc,CAACe,SAAS,CAAC,kBAAkB,CAAC,GAAGf,cAAc,CAACe,SAAS,CAAC,+BAA+B,CAAC;EAC7J,CAAC;EAEDxB,MAAM,CAACqX,qBAAqB,GAAG,YAAY;IAEvCvT,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAMuT,UAAU,GAAGtX,MAAM,CAACa,UAAU,CAAC0W,WAAW,CAAC,CAAC;IAClDvX,MAAM,CAACwW,WAAW,GAAG,CAAC;IAEtBxW,MAAM,CAACsW,yBAAyB,CAAC5J,OAAO,CAAC,UAAA6B,OAAO,EAAI;MAChDA,OAAO,CAACyI,cAAc,GAAGzI,OAAO,CAACwI,WAAW,CAACQ,WAAW,CAAC,CAAC,CAAClI,OAAO,CAACiI,UAAU,CAAC,IAAI,CAAC;MAEnF,IAAI/I,OAAO,CAACyI,cAAc,EAAE;QACxBhX,MAAM,CAACwW,WAAW,EAAE;MACxB;IACJ,CAAC,CAAC;IAEF1S,CAAC,CAACO,SAAS,CAAC,CAAC;IAEb,IAAIrE,MAAM,CAACwW,WAAW,IAAIxW,MAAM,CAACsW,yBAAyB,CAAClQ,MAAM,GAAG,CAAC,EAAE;MACnEpG,MAAM,CAACwX,aAAa,CAAC,CAAC;IAC1B,CAAC,MAAM;MACHhX,QAAQ,CAACR,MAAM,CAACwX,aAAa,EAAE,CAAC,CAAC;IACrC;EACJ,CAAC;EAEDxX,MAAM,CAACwX,aAAa,GAAG,YAAY;IAC/B,IAAI,CAAC,CAACxX,MAAM,CAACsW,yBAAyB,IAAItW,MAAM,CAACsW,yBAAyB,CAAClQ,MAAM,GAAG,CAAC,EAAE;MACnF,IAAIlG,aAAa,CAAC2L,QAAQ,EAAE;QACxBhB,QAAQ,CAACC,IAAI,CAAC,CAAC;MACnB,CAAC,MACI;QACDzK,aAAa,CAAC0K,YAAY,CAAC,CAAC;MAChC;IACJ;EACJ,CAAC;EAED/K,MAAM,CAACiM,YAAY,GAAG,YAAY;IAC9B5L,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;EAEvC,CAAC;EAEDN,MAAM,CAACyX,0BAA0B,GAAG,UAAU3N,IAAI,EAAE;IAChD9J,MAAM,CAACyW,oBAAoB,GAAG3M,IAAI;EACtC,CAAC;EAED9J,MAAM,CAAC0X,uBAAuB,GAAG,YAAY;IACzCrX,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;IACnCL,UAAU,CAAC+K,UAAU,CAAC,kCAAkC,EAAE;MAAE2M,4BAA4B,EAAG3X,MAAM,CAACyW,oBAAoB;MAAEpK,MAAM,EAAE;IAAS,CAAC,CAAC;EAC/I,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;;ACxHHvM,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,6BAA6B,EAC9D,CAAC,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EACxC,eAAe,EAAE,UAAU,EAAE,eAAe,EACzC,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,EACvD,UAAUC,MAAM,EAAEC,UAAU,EAAEQ,cAAc,EAClCJ,aAAa,EAAEG,QAAQ,EAAEN,aAAa,EAC5C0X,YAAY,EAAEjX,EAAE,EAAEkX,YAAY,EAAE1X,YAAY,EAAE;EAEvC,IAAM2X,YAAY,GAAG,OAAO;EAC5B9X,MAAM,CAAC+X,gBAAgB,GAAG,kBAAkB;EAC5C/X,MAAM,CAACgY,eAAe,GAAG,IAAI;EAE7BhY,MAAM,CAACiY,iBAAiB,GAAG,EAAE;EAC7BjY,MAAM,CAACkY,wBAAwB,GAAG,EAAE;EACpClY,MAAM,CAACmY,wBAAwB,GAAG,EAAE;EACpCnY,MAAM,CAACoY,iBAAiB,GAAG,IAAI;EAE/BpY,MAAM,CAACqY,gBAAgB,GAAG,IAAI;EAC9BrY,MAAM,CAACsY,UAAU,GAAGjY,aAAa,CAACkY,6BAA6B,CAAC,CAAC;EACjEvY,MAAM,CAACqV,SAAS,GAAG,IAAI;EAEvBrV,MAAM,CAACwY,YAAY,GAAG,CAAC,CAAC;EAExBxY,MAAM,CAACyY,cAAc,GAAG,IAAI;EAC5BzY,MAAM,CAAC0Y,gBAAgB,GAAG,KAAK;EAC/B1Y,MAAM,CAACmC,IAAI,GAAG;IAAE,QAAQ,EAAG9C,MAAM,CAAC+C,WAAW,GAAC,IAAI,GAAG,GAAG,GAAK;EAAK,CAAC;EAEnEpC,MAAM,CAAC2Y,eAAe,GAAG,IAAI,CAAC,CAAC;EAC/B3Y,MAAM,CAAC4Y,cAAc,GAAG,CAAC,CAAC;EAE1B5Y,MAAM,CAAC6Y,gBAAgB,GAAG,EAAE;EAE5B7Y,MAAM,CAACqC,GAAG,CAAC,4BAA4B,EAAE,UAASC,KAAK,EAAE4B,IAAI,EAAE;IAC3DlE,MAAM,CAACwY,YAAY,GAAGtU,IAAI,CAACsU,YAAY;IACvCxY,MAAM,CAACiY,iBAAiB,GAAG/T,IAAI,CAAC+T,iBAAiB;IACjDjY,MAAM,CAACkY,wBAAwB,GAAGhU,IAAI,CAACgU,wBAAwB;IAC/DlY,MAAM,CAAC+X,gBAAgB,GAAG,kBAAkB;IAE5C/X,MAAM,CAAC8Y,sBAAsB,GAAG5U,IAAI,CAAC4U,sBAAsB;IAE3D9Y,MAAM,CAAC+Y,WAAW,CAAC,CAAC;EACxB,CAAC,CAAC;EAEF/Y,MAAM,CAACqC,GAAG,CAAC,uBAAuB,EAAE,UAASC,KAAK,EAAE4B,IAAI,EAAE;IACtDlE,MAAM,CAACwY,YAAY,GAAGtU,IAAI,CAACsU,YAAY;IACvCxY,MAAM,CAACiY,iBAAiB,GAAG/T,IAAI,CAAC+T,iBAAiB;IACjDjY,MAAM,CAACkY,wBAAwB,GAAGhU,IAAI,CAACgU,wBAAwB;IAC/DlY,MAAM,CAAC+X,gBAAgB,GAAG,UAAU;IAEpC/X,MAAM,CAAC8Y,sBAAsB,GAAG5U,IAAI,CAAC4U,sBAAsB;IAE3D9Y,MAAM,CAAC+Y,WAAW,CAAC,CAAC;EACxB,CAAC,CAAC;EAEF/Y,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,UAAU2W,GAAG,EAAE;IACrCxY,QAAQ,CAAC,YAAY;MACjB,IAAIR,MAAM,CAACqY,gBAAgB,EAAE;QACzBrY,MAAM,CAACqY,gBAAgB,GAAG,KAAK;QAC/BnT,WAAW,CAAC,CAAC;MACjB;MAEApB,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,CAAC;EACN,CAAC,CAAC;EAEFxE,MAAM,CAAC+Y,WAAW,GAAG,YAAY;IAC7B/Y,MAAM,CAACiZ,SAAS,GAAG,IAAI;IACvBjZ,MAAM,CAACkZ,WAAW,GAAG,IAAI;IACzBlZ,MAAM,CAAC4Y,cAAc,GAAG,CAAC,CAAC;IAC1B5Y,MAAM,CAACmZ,YAAY,CAAC,EAAE,CAAC;IACvBnZ,MAAM,CAACoZ,iBAAiB,GAAG,EAAE;;IAE7B;IACA;IACA;IACA;IACA;;IAEA;IACA,IAAIpZ,MAAM,CAACiY,iBAAiB,CAAC7R,MAAM,KAAK,CAAC,IAAIpG,MAAM,CAACqZ,UAAU,KAAK,CAAC,EAAE;MAClElZ,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,mDAAmD,CAAC,CAAC;MACrG;MACA;MACA;MACA;IACJ,CAAC;MAED;MACI,IAAIxB,MAAM,CAACiY,iBAAiB,CAAC7R,MAAM,GAAG,CAAC,IAAIpG,MAAM,CAACsZ,oBAAoB,GAAG,CAAC,EAAE;QACxEnZ,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,gFAAgF,CAAC,CAAC;QAClI;QACA;QACA;MACJ;IAGJnB,aAAa,CAAC8E,UAAU,CAAC,sBAAsB,EAAE,YAAY;MACzD,IAAInF,MAAM,CAACoY,iBAAiB,EAAE;QAC1BpY,MAAM,CAACoY,iBAAiB,GAAG,KAAK;QAChCtU,CAAC,CAAC,qCAAqC,CAAC,CAAC+R,IAAI,CAAC,CAAC;MACnD,CAAC,MAAM;QACH,IAAI3V,aAAa,CAAC+I,cAAc,EAAE;UAC9BjJ,MAAM,CAACoY,iBAAiB,GAAG,IAAI;QACnC;MACJ;MAEApY,MAAM,CAAC0Y,gBAAgB,GAAG,IAAI;IAClC,CAAC,CAAC;IAEFb,YAAY,CAAC0B,SAAS,CAAC,CAAC;IAExB,IAAIvZ,MAAM,CAACyY,cAAc,EAAE;MACvBzY,MAAM,CAACyY,cAAc,GAAG,KAAK;MAC7B3U,CAAC,CAAC,sBAAsB,CAAC,CAACuN,IAAI,CAAC,SAAS,CAAC,CAACmI,KAAK,CAAC,UAAUR,GAAG,EAAE;QAC3D,IAAItE,CAAC,GAAG+E,MAAM,CAAC3V,CAAC,CAAC,IAAI,CAAC,CAAC4V,MAAM,CAAC,CAAC,CAAC/R,IAAI,CAAC,OAAO,CAAC,CAAC;QAE9CnH,QAAQ,CAAC,YAAY;UACjBR,MAAM,CAAC2Z,sBAAsB,GAAGjF,CAAC;QACrC,CAAC,CAAC;MACN,CAAC,CAAC;IACN;IAEAlU,QAAQ,CAAC,YAAY;MAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IAAE,CAAC,CAAC;IAEhExE,MAAM,CAAC4Z,sBAAsB,GAAG,CAAC;IACjC5Z,MAAM,CAAC6Z,aAAa,CAAC,CAAC;EAC1B,CAAC;EAED7Z,MAAM,CAAC6Z,aAAa,GAAG,YAAY;IAC/B7Z,MAAM,CAACiZ,SAAS,GAAG,IAAI;IACvBjZ,MAAM,CAACkZ,WAAW,GAAG,IAAI;IACzBlZ,MAAM,CAAC4Y,cAAc,GAAG,CAAC,CAAC;IAC1B5Y,MAAM,CAAC6Y,gBAAgB,GAAG,EAAE;EAChC,CAAC;EAED7Y,MAAM,CAACmZ,YAAY,GAAG,UAAUzE,CAAC,EAAE;IAC/B1U,MAAM,CAAC8Z,aAAa,GAAGpF,CAAC;IACxB5Q,CAAC,CAAC,WAAW,CAAC,CAACkF,GAAG,CAAC0L,CAAC,CAAC;EACzB,CAAC;EAED1U,MAAM,CAAC+Z,YAAY,GAAG,YAAY;IAC9B/Z,MAAM,CAAC8Z,aAAa,GAAGhW,CAAC,CAAC,WAAW,CAAC,CAACkF,GAAG,CAAC,CAAC;IAC3C,OAAOhJ,MAAM,CAAC8Z,aAAa;EAC/B,CAAC;EAED9Z,MAAM,CAACga,WAAW,GAAG,YAAY;IAC7Bha,MAAM,CAAC0Y,gBAAgB,GAAG,KAAK;IAC/BrY,aAAa,CAAC+L,WAAW,CAAC,sBAAsB,CAAC;IACjDtI,CAAC,CAAC,kBAAkB,CAAC,CAACkF,GAAG,CAAC,EAAE,CAAC;EACjC,CAAC;EAEDhJ,MAAM,CAACia,kBAAkB,GAAG,UAAUC,GAAG,EAAEC,UAAU,EAAE;IACnD,IAAG,OAAOna,MAAM,CAAC8Y,sBAAsB,KAAK,UAAU,EAAC;MACnD9Y,MAAM,CAAC8Y,sBAAsB,CAACoB,GAAG,EAAEC,UAAU,EAAEna,MAAM,CAACwY,YAAY,EAAExY,MAAM,CAAC4Y,cAAc,EAAE5Y,MAAM,CAAC2Z,sBAAsB,KAAK,CAAC,CAAC;IACnI;EACJ,CAAC;EAED3Z,MAAM,CAACoa,WAAW,GAAG,UAAU9X,KAAK,EAAE;IAClC,IAAIA,KAAK,CAAC4I,KAAK,KAAK,EAAE,EAAE;MACpB,IAAIwJ,CAAC,GAAG5Q,CAAC,CAAC,kBAAkB,CAAC,CAACkF,GAAG,CAAC,CAAC;MACnC,IAAI,CAAC,CAAC0L,CAAC,IAAIA,CAAC,CAACtO,MAAM,GAAG,CAAC,EAAE;QACrBnG,UAAU,CAAC+K,UAAU,CAAC,cAAc,EAAE0J,CAAC,CAAC;MAC5C;IACJ;EACJ,CAAC;EAED1U,MAAM,CAACqa,UAAU,GAAG,UAAS7N,CAAC,EAAC8N,CAAC,EAAC;IAC7B,IAAI9N,CAAC,KAAK,IAAI,IAAI,OAAQA,CAAE,KAAK,QAAQ,EACrC,OAAO,KAAK;IAChB,IAAI8N,CAAC,KAAK,IAAI,IAAI,OAAQA,CAAE,KAAK,QAAQ,EACrC,OAAO,KAAK;IAEhB,OAAO9N,CAAC,CAAC+K,WAAW,CAAC,CAAC,KAAK+C,CAAC,CAAC/C,WAAW,CAAC,CAAC;EAC9C,CAAC;EAGDvX,MAAM,CAACua,iBAAiB,GAAG,UAAUrS,IAAI,EAAE;IACvC,OAAOlI,MAAM,CAACiY,iBAAiB,CAAClS,MAAM,CAAC,UAAUnG,EAAE,EAAE;MACjD,OAAOI,MAAM,CAACqa,UAAU,CAACza,EAAE,CAAC4a,OAAO,EAAEtS,IAAI,CAAC,IACnClI,MAAM,CAACqa,UAAU,CAACza,EAAE,CAAC6a,WAAW,EAAEvS,IAAI,CAAC;IAClD,CAAC,CAAC;EACN,CAAC;EAEDlI,MAAM,CAACqC,GAAG,CAAC,cAAc,EAAE,UAAUC,KAAK,EAAEoY,OAAO,EAAE;IACjD,IAAI1a,MAAM,CAAC2Z,sBAAsB,KAAK,CAAC,IAAI3Z,MAAM,CAAC2Z,sBAAsB,KAAK,CAAC,IAAI3Z,MAAM,CAAC0Y,gBAAgB,EAAE;MACvG1Y,MAAM,CAAC6Z,aAAa,CAAC,CAAC;MAEtB/V,CAAC,CAACC,OAAO,CAAC,CAAC;MACX,IAAI4W,IAAI,GAAG3a,MAAM,CAACua,iBAAiB,CAACG,OAAO,CAAC;MAC5C1a,MAAM,CAAC6Y,gBAAgB,GAAG/Y,OAAO,CAAC+F,IAAI,CAAC8U,IAAI,CAAC;MAC5C3a,MAAM,CAACgL,UAAU,CAAC,kBAAkB,CAAC;MACrClH,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb,IAAIsW,IAAI,CAACvU,MAAM,KAAK,CAAC,EAAE;QACnB;QACA,IAAIwU,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,kDAAkD,CAAC;QACtFvB,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;UACnC6P,OAAO,EAAED,GAAG;UACZtM,IAAI,EAAE;QACV,CAAC,CAAC;QAEF,OAAOsJ,YAAY,CAACkD,OAAO,CAAC,CAAC;MACjC,CAAC,MACI,IAAI9a,MAAM,CAAC2Z,sBAAsB,KAAK,CAAC,EAAE;QAC1C,IAAIgB,IAAI,CAACvU,MAAM,GAAG,CAAC,EAAE;UACjBpG,MAAM,CAACkZ,WAAW,GAAG,4DAA4D;UACjF,OAAOtB,YAAY,CAACkD,OAAO,CAAC,CAAC;QACjC,CAAC,MACI;UACD9a,MAAM,CAACkZ,WAAW,GAAG,UAAU,GAAGwB,OAAO,GAAG,iBAAiB;UAC7D1a,MAAM,CAACia,kBAAkB,CAACU,IAAI,CAAC,CAAC,CAAC,CAAC;UAClC,OAAO/C,YAAY,CAACmD,QAAQ,CAAC,CAAC;QAClC;MACJ,CAAC,MACI,IAAI/a,MAAM,CAAC2Z,sBAAsB,KAAK,CAAC,EAAE;QAC1C,IAAIgB,IAAI,CAACvU,MAAM,GAAG,CAAC,EAAE;UACjBpG,MAAM,CAACkZ,WAAW,GAAG,4DAA4D;UACjF,OAAOtB,YAAY,CAACkD,OAAO,CAAC,CAAC;QACjC,CAAC,MACI;UACD9a,MAAM,CAACkZ,WAAW,GAAG,UAAU,GAAGwB,OAAO,GAAG,iBAAiB;UAC7D1a,MAAM,CAACgb,kBAAkB,CAACL,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC;MAEJ;IACJ,CAAC,MACI,IAAI3a,MAAM,CAAC2Z,sBAAsB,KAAK,CAAC,IAAI3Z,MAAM,CAAC0Y,gBAAgB,EAAE;MACrElY,QAAQ,CAAC,YAAY;QACjB,IAAIkU,CAAC,GAAG1U,MAAM,CAAC+Z,YAAY,CAAC,CAAC;QAC7BjW,CAAC,CAAC,WAAW,CAAC,CAACsB,KAAK,CAAC,CAAC,CAAC4D,GAAG,CAAC,EAAE,CAAC,CAACA,GAAG,CAAC0L,CAAC,CAAC;QACrC1U,MAAM,CAACmZ,YAAY,CAACzE,CAAC,GAAGgG,OAAO,GAAGO,MAAM,CAACC,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;MAClE,CAAC,CAAC;IACN;EACJ,CAAC,CAAC;EAEFlb,MAAM,CAACmb,iBAAiB,GAAG,YAAY;IAEnC,IAAInb,MAAM,CAAC2Z,sBAAsB,KAAK,CAAC,IAAI3Z,MAAM,CAAC0Y,gBAAgB,IAC9D,CAAC,CAAC1Y,MAAM,CAAC+Z,YAAY,CAAC,CAAC,IAAI/Z,MAAM,CAAC+Z,YAAY,CAAC,CAAC,CAAC3T,MAAM,GAAG,CAAC,EAAE;MAE7D,IAAIgV,GAAG,GAAGpb,MAAM,CAAC+Z,YAAY,CAAC,CAAC,CAACsB,KAAK,CAACJ,MAAM,CAACC,YAAY,CAAC,EAAE,CAAC,CAAC;MAE9Dlb,MAAM,CAACmZ,YAAY,CAAC,EAAE,CAAC;MACvB,IAAIiC,GAAG,CAAChV,MAAM,GAAG,CAAC,EAAE;QAChBtC,CAAC,CAACC,OAAO,CAAC,CAAC;QAEXjE,OAAO,CAAC4M,OAAO,CAAC0O,GAAG,EAAE,UAAUE,EAAE,EAAE;UAC/BA,EAAE,GAAGA,EAAE,CAACC,IAAI,CAAC,CAAC;UACd,IAAI,CAAC,CAACD,EAAE,EAAE;YACN,IAAIX,IAAI,GAAG3a,MAAM,CAACiY,iBAAiB,CAAClS,MAAM,CAAC,UAAUnG,EAAE,EAAE;cACrD,IAAG,CAACA,EAAE,CAAC4a,OAAO,IAAI,CAACc,EAAE,EACjB,OAAO,KAAK;cAChB,OAAO1b,EAAE,CAAC4a,OAAO,CAACjD,WAAW,CAAC,CAAC,IAAI+D,EAAE,CAAC/D,WAAW,CAAC,CAAC;YACvD,CAAC,CAAC;YACF,IAAIoD,IAAI,CAACvU,MAAM,KAAK,CAAC,EAAE;cACnBpG,MAAM,CAACmZ,YAAY,CAACnZ,MAAM,CAAC+Z,YAAY,CAAC,CAAC,GAAGuB,EAAE,GAAGL,MAAM,CAACC,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACjF,CAAC,MACI;cACDlb,MAAM,CAACia,kBAAkB,CAACU,IAAI,CAAC,CAAC,CAAC,CAAC;YACtC;UAEJ;QAEJ,CAAC,CAAC;QAEF7W,CAAC,CAACO,SAAS,CAAC,CAAC;QAEb,IAAI,CAAC,CAACrE,MAAM,CAAC+Z,YAAY,CAAC,CAAC;UAAE;UAC7B;YACI;YACA,IAAIa,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,8KAA8K,CAAC;YAClNvB,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;cACnC6P,OAAO,EAAED,GAAG;cACZtM,IAAI,EAAE;YACV,CAAC,CAAC;YAEF,OAAOsJ,YAAY,CAACkD,OAAO,CAAC,CAAC;UACjC,CAAC,MACI;UACD9a,MAAM,CAACkZ,WAAW,GAAG,iHAAiH;UACtI,OAAOtB,YAAY,CAACmD,QAAQ,CAAC,CAAC;QAClC;MACJ;MAEA/a,MAAM,CAAC6Z,aAAa,CAAC,CAAC;IAC1B;EACJ,CAAC;EAED7Z,MAAM,CAACwb,kBAAkB,GAAG,UAAUtB,GAAG,EAAE;IACvC,IAAGla,MAAM,CAACwY,YAAY,CAACiD,UAAU,KAAK3D,YAAY,EAAE;MAChD9X,MAAM,CAACgb,kBAAkB,CAACd,GAAG,CAAC;MAC9Bla,MAAM,CAAC0b,mBAAmB,CAACxB,GAAG,CAACyB,KAAK,CAAC;IACzC;EACJ,CAAC;EAED3b,MAAM,CAACgb,kBAAkB,GAAG,UAAUd,GAAG,EAAE;IACvCla,MAAM,CAAC4Y,cAAc,GAAG,CAAC,CAAC;IAC1B9Y,OAAO,CAAC+F,IAAI,CAACqU,GAAG,EAAEla,MAAM,CAAC4Y,cAAc,CAAC;IACxC5Y,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,GAAG,CAAC,CAAC5b,MAAM,CAAC4Y,cAAc,CAAC5Y,MAAM,CAAC+X,gBAAgB,CAAC,GAAG/X,MAAM,CAAC4Y,cAAc,CAAC5Y,MAAM,CAAC+X,gBAAgB,CAAC,GAAG,CAAC;IACxI/X,MAAM,CAAC4Y,cAAc,CAACiD,cAAc,GAAG,CAAC,CAAC3B,GAAG,CAAC2B,cAAc,GAAG3B,GAAG,CAAC2B,cAAc,GAAG3B,GAAG,CAAC4B,MAAM;IAC7F9b,MAAM,CAAC4Y,cAAc,CAACmD,OAAO,GAAG,CAAC,CAAC7B,GAAG,CAAC6B,OAAO,GAAG7B,GAAG,CAAC6B,OAAO,GAAG7B,GAAG,CAAC6B,OAAO;IACzE/b,MAAM,CAAC4Y,cAAc,CAACoD,iBAAiB,GAAG,CAAC,CAAC9B,GAAG,CAAC8B,iBAAiB,GAAG9B,GAAG,CAAC8B,iBAAiB,GAAG9B,GAAG,CAAC+B,SAAS;IACzGjc,MAAM,CAAC4Y,cAAc,CAACsD,UAAU,GAAG,IAAI;IACvClc,MAAM,CAAC4Y,cAAc,CAACuD,WAAW,GAAG,IAAI;IACxCnc,MAAM,CAAC4Y,cAAc,CAACwD,QAAQ,GAAG,IAAI;IACrC,IAAI,CAACpc,MAAM,CAAC4Y,cAAc,CAACxV,EAAE,EAAE;MAC3BpD,MAAM,CAAC4Y,cAAc,CAACxV,EAAE,GAAG8W,GAAG,CAACmC,SAAS;IAC5C;EACJ,CAAC;EAEDrc,MAAM,CAAC0b,mBAAmB,GAAG,UAAUY,IAAI,EAAE;IACzCtc,MAAM,CAAC4Y,cAAc,CAACrD,KAAK,GAAGvV,MAAM,CAAC4Y,cAAc,CAACgD,UAAU;IAC9Dpb,QAAQ,CAAC,YAAY;MACbR,MAAM,CAAC2Y,eAAe,CAAC9C,IAAI,CAAC,CAACyG,IAAI,GAAG,iBAAiB,GAAG,GAAG,GAACA,IAAI,CAAC;IACzE,CAAC,CAAC;EACN,CAAC;;EAED;EACAtc,MAAM,CAACuc,WAAW,GAAG,UAAUC,GAAG,EAAEla,KAAK,EAAE;IAEvC9B,QAAQ,CAAC,YAAY;MAAER,MAAM,CAAC2Y,eAAe,CAAC7N,IAAI,CAAC,IAAI,CAAC;IAAE,CAAC,CAAC;IAE5D,IAAI0R,GAAG,KAAK,IAAI,EAAE;MACdhc,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAAC4Y,cAAc,CAACgD,UAAU,GAAG5b,MAAM,CAAC4Y,cAAc,CAACrD,KAAK;QAC9DvV,MAAM,CAACyc,mBAAmB,CAAC,CAAC;MAChC,CAAC,CAAC;IACN;EACJ,CAAC;EAEDzc,MAAM,CAACyc,mBAAmB,GAAG,YAAY;IACrC3c,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACwY,YAAY,CAACtU,IAAI,EAAE,UAAUtE,EAAE,EAAE;MACpD,IAAIA,EAAE,CAACwD,EAAE,KAAKpD,MAAM,CAAC4Y,cAAc,CAACxV,EAAE,EAAE;QACpCsZ,SAAS,GAAG,IAAI;QAChB9c,EAAE,CAACI,MAAM,CAAC+X,gBAAgB,CAAC,GAAG/X,MAAM,CAAC4Y,cAAc,CAACgD,UAAU;QAC9D,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;EACN,CAAC;;EAED;EACA5b,MAAM,CAACsB,uBAAuB,GAAGpB,aAAa,CAACoB,uBAAuB;EACtEtB,MAAM,CAACuB,iBAAiB,GAAGd,cAAc,CAACe,SAAS,CAAC,4CAA4C,EAAE;IAAEC,GAAG,EAAE;EAAE,CAAC,CAAC;EAC7GzB,MAAM,CAACyI,gBAAgB,GAAG,KAAK;EAC/BzI,MAAM,CAAC2c,UAAU,GAAG;IAChBlU,gBAAgB,EAAE;EACtB,CAAC;EACDzI,MAAM,CAAC4c,gCAAgC,GAAG,KAAK;EAC/C5c,MAAM,CAAC6c,eAAe,GAAG,IAAI;EAC7B7c,MAAM,CAAC+F,MAAM,GAAG,CAAC,CAAC;EAClB/F,MAAM,CAAC+F,MAAM,CAAC+W,kBAAkB,GAAG,IAAI;EAEvC9c,MAAM,CAAC0I,MAAM,CAAC,6BAA6B,EACvC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B5I,MAAM,CAAC+c,iCAAiC,CAAC,CAAC;IAC1C,IAAIpU,QAAQ,EAAE;MACVnI,QAAQ,CAAC,YAAW;QAChBH,aAAa,CAACwI,kBAAkB,CAAC,GAAG,GAAG/E,CAAC,CAAC,qBAAqB,CAAC,CAAC6D,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,mCAAmC,CAAC;MACjI,CAAC,EAAC,GAAG,CAAC;IACV;EACJ,CACJ,CAAC;EAGD3H,MAAM,CAAC+c,iCAAiC,GAAG,YAAY;IAC/C,IAAI/c,MAAM,CAAC4c,gCAAgC,IAAI5c,MAAM,CAACyI,gBAAgB,EAAE;MACpEjI,QAAQ,CAAC,YAAY;QACjB,IAAIwc,GAAG,GAAGlZ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAACmZ,qBAAqB,CAAC,CAAC;QAC7D,IAAID,GAAG,CAACE,KAAK,GAAG,CAAC,IAAIF,GAAG,CAACG,MAAM,GAAG,CAAC,EAAE;UACjCnY,OAAO,CAACC,GAAG,CAAC,OAAO,GAAG+X,GAAG,CAACE,KAAK,GAAG,GAAG,GAAGF,GAAG,CAACG,MAAM,CAAC;UACnDrZ,CAAC,CAAC,iBAAiB,CAAC,CAACsZ,GAAG,CAAC,MAAM,EAAEJ,GAAG,CAACK,IAAI,CAAC;UAC1CvZ,CAAC,CAAC,iBAAiB,CAAC,CAACsZ,GAAG,CAAC,KAAK,EAAEJ,GAAG,CAACM,MAAM,GAAG,EAAE,CAAC;UAChDxZ,CAAC,CAAC,iBAAiB,CAAC,CAAC+R,IAAI,CAAC,CAAC;QAC/B,CAAC,MAEG/R,CAAC,CAAC,iBAAiB,CAAC,CAACgH,IAAI,CAAC,CAAC;MAEnC,CAAC,CAAC;IACN,CAAC,MAEGhH,CAAC,CAAC,iBAAiB,CAAC,CAACgH,IAAI,CAAC,CAAC;EACnC,CAAC;EAGL9K,MAAM,CAAC2c,UAAU,GAAG,UAAU3T,GAAG,EAAE;IAC3BhJ,MAAM,CAACud,UAAU,GAAG,MAAM;IAC1Bvd,MAAM,CAAC+F,MAAM,CAAC+W,kBAAkB,GAAG9T,GAAG;IAEtC,IAAIjD,MAAM,GAAG/F,MAAM,CAAC+F,MAAM,CAAC+W,kBAAkB,GAAG9c,MAAM,CAAC+F,MAAM,CAAC+W,kBAAkB,CAACvF,WAAW,CAAC,CAAC,GAAG,EAAE;IACnG,IAAIiG,QAAQ,GAAGxd,MAAM,CAACkY,wBAAwB,CAACnS,MAAM,CAAC,UAAS+D,IAAI,EAAE;MACjE,OAAO,CAAC/D,MAAM,IAAK+D,IAAI,CAACpH,IAAI,IAAIoH,IAAI,CAACpH,IAAI,CAAC6U,WAAW,CAAC,CAAC,CAAClI,OAAO,CAACtJ,MAAM,CAAC,KAAK,CAAC,CAAE,IAC3E+D,IAAI,CAAC2Q,WAAW,IAAI3Q,IAAI,CAAC2Q,WAAW,CAAClD,WAAW,CAAC,CAAC,CAAClI,OAAO,CAACtJ,MAAM,CAAC,KAAK,CAAC,CAAE,IAC1E+D,IAAI,CAAC0Q,OAAO,IAAI1Q,IAAI,CAAC0Q,OAAO,CAACjD,WAAW,CAAC,CAAC,CAAClI,OAAO,CAACtJ,MAAM,CAAC,KAAK,CAAC,CAAE;IAC1E,CAAC,CAAC;IACF,IAAIsD,GAAG,GAAGmU,QAAQ,CAACpX,MAAM,GAAG,CAAC,GAAGoX,QAAQ,CAAC9T,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG8T,QAAQ;IAE/Dxd,MAAM,CAAC4c,gCAAgC,GAAG,CAAC,CAACvT,GAAG,IAAIA,GAAG,CAACjD,MAAM,GAAG,CAAC;IACjEpG,MAAM,CAAC+c,iCAAiC,CAAC,CAAC;IAE1C,OAAO1T,GAAG;EACd,CAAC;EAELrJ,MAAM,CAAC2J,kBAAkB,GAAG,UAAUX,GAAG,EAAE;IACnC,OAAO,CAAC,CAACA,GAAG,GAAGA,GAAG,CAACY,IAAI,GAAG,IAAI;EAClC,CAAC;EAEL5J,MAAM,CAAC6J,kBAAkB,GAAG,UAAUC,IAAI,EAAEC,KAAK,EAAEC,KAAK,EAAE1H,KAAK,EAAE;IAC7D;IACAtC,MAAM,CAAC6c,eAAe,GAAG9S,KAAK,CAACsS,SAAS;IACxCrc,MAAM,CAACyd,gBAAgB,GAAG1T,KAAK,CAAC2T,UAAU;IAC1C1d,MAAM,CAAC2d,gBAAgB,GAAG5T,KAAK,CAAC6T,UAAU;IAC1C5d,MAAM,CAAC6d,aAAa,GAAG9T,KAAK,CAAC+T,OAAO;IACpC9d,MAAM,CAAC+F,MAAM,CAAC+W,kBAAkB,GAAGhT,IAAI,CAACpH,IAAI;IAC5C1C,MAAM,CAAC+d,cAAc,CAAC,CAAC;EAC3B,CAAC;EAED/d,MAAM,CAACiL,YAAY,GAAG,UAAU3I,KAAK,EAAE;IACnC,IAAIA,KAAK,CAAC4I,KAAK,KAAK,EAAE,EAAE;MACpBlL,MAAM,CAAC6c,eAAe,GAAG,IAAI;MAC7B7c,MAAM,CAAC+d,cAAc,CAAC,CAAC;IAC3B;EACJ,CAAC;EAED/d,MAAM,CAAC+d,cAAc,GAAG,YAAY;IAC5B,IAAI7d,aAAa,CAAC2L,QAAQ,EACtBhB,QAAQ,CAACC,IAAI,CAAC,CAAC;IAEnBhH,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,IAAIgC,MAAM,GAAG/F,MAAM,CAAC+F,MAAM,CAAC+W,kBAAkB,GAAG9c,MAAM,CAAC+F,MAAM,CAAC+W,kBAAkB,CAACvF,WAAW,CAAC,CAAC,GAAG,EAAE;IACnG,IAAIiG,QAAQ,GAAGxd,MAAM,CAACkY,wBAAwB,CAACnS,MAAM,CAAC,UAAS+D,IAAI,EAAE;MACjE,OAAQ9J,MAAM,CAAC6c,eAAe,IAAI/S,IAAI,CAACuS,SAAS,KAAKrc,MAAM,CAAC6c,eAAe,IAC1E,CAAC7c,MAAM,CAAC6c,eAAe,KAAK,CAAC9W,MAAM,IAChC+D,IAAI,CAACpH,IAAI,IAAIoH,IAAI,CAACpH,IAAI,CAAC6U,WAAW,CAAC,CAAC,CAAClI,OAAO,CAACtJ,MAAM,CAAC,KAAK,CAAC,CAAE,IAC5D+D,IAAI,CAAC2Q,WAAW,IAAI3Q,IAAI,CAAC2Q,WAAW,CAAClD,WAAW,CAAC,CAAC,CAAClI,OAAO,CAACtJ,MAAM,CAAC,KAAK,CAAC,CAAE,IAC1E+D,IAAI,CAAC0Q,OAAO,IAAI1Q,IAAI,CAAC0Q,OAAO,CAACjD,WAAW,CAAC,CAAC,CAAClI,OAAO,CAACtJ,MAAM,CAAC,KAAK,CAAC,CAAE,CAAE;IAC5E,CAAC,CAAC;IAEF,IAAIyX,QAAQ,CAACpX,MAAM,GAAG,CAAC,KAAKpG,MAAM,CAAC6d,aAAa,IAAI7d,MAAM,CAACyd,gBAAgB,IAAIzd,MAAM,CAAC2d,gBAAgB,CAAC,EAAE;MACrGH,QAAQ,GAAGA,QAAQ,CAACzX,MAAM,CAAC,UAAU+D,IAAI,EAAE;QACvC,OAAO,CAAC,CAAC9J,MAAM,CAAC6d,aAAa,IAAI7d,MAAM,CAAC6d,aAAa,KAAK/T,IAAI,CAACgU,OAAO,MAC7D,CAAC9d,MAAM,CAACyd,gBAAgB,IAAIzd,MAAM,CAACyd,gBAAgB,KAAK3T,IAAI,CAAC4T,UAAU,CAAC,KACxE,CAAC1d,MAAM,CAAC2d,gBAAgB,IAAI3d,MAAM,CAAC2d,gBAAgB,KAAK7T,IAAI,CAAC8T,UAAU,CAAC;MACrF,CAAC,CAAC;IACN;IAEA,IAAGJ,QAAQ,CAACpX,MAAM,KAAK,CAAC,EAAE;MACtBpG,MAAM,CAACia,kBAAkB,CAACuD,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1C;IACAxd,MAAM,CAACmY,wBAAwB,GAAGqF,QAAQ;IAE1C,IAAIQ,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAC1BwS,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;IACvB3H,CAAC,CAACO,SAAS,CAAC,CAAC;IACb,OAAO2Z,SAAS,CAACtS,OAAO;EAC5B,CAAC;EAEL1L,MAAM,CAACie,wBAAwB,GAAG,YAAY;IACtCje,MAAM,CAAC6c,eAAe,GAAG,IAAI;IAC7B7c,MAAM,CAAC+F,MAAM,CAAC+W,kBAAkB,GAAG,IAAI;IACvC9c,MAAM,CAACmY,wBAAwB,GAAG,EAAE;EACxC,CAAC;AACrB,CAAC,CAAC,CAAC,C;;;;;;;;;;AC7cHrY,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,wBAAwB,EACzD,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EACrD,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,kBAAkB,EACzD,UAAUC,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAEG,aAAa,EACtDC,QAAQ,EAAEE,QAAQ,EAAE0d,WAAW,EAAEC,gBAAgB,EAAE;EAEnDne,MAAM,CAACqB,QAAQ,GAAGnB,aAAa,CAACmB,QAAQ;EACxCrB,MAAM,CAACoe,SAAS,GAAG,IAAI;EACvBpe,MAAM,CAACqe,UAAU,GAAG,EAAE;EACtBre,MAAM,CAACse,QAAQ,GAAG,KAAK;EACvBte,MAAM,CAACue,kBAAkB,GAAG,IAAI;EAC5C;;EAEYve,MAAM,CAACmC,IAAI,GAAG;IAAE,QAAQ,EAAE9C,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAG;EAAK,CAAC;EAE3DpC,MAAM,CAACqC,GAAG,CAAC,+BAA+B,EAAE,UAAUC,KAAK,EAAEC,MAAM,EAAE;IACjEvC,MAAM,CAACqB,QAAQ,GAAGkB,MAAM;EAC5B,CAAC,CAAC;EAGF/B,QAAQ,CAAC,YAAY;IACjB0E,WAAW,CAAC,CAAC;EACjB,CAAC,EAAE,CAAC,CAAC;EAELlF,MAAM,CAACqC,GAAG,CAAC,mBAAmB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAEnDlE,MAAM,CAACqe,UAAU,GAAG,EAAE,CAAC;IACvBre,MAAM,CAACwe,OAAO,GAAGta,IAAI,CAACsa,OAAO;IAC7Bxe,MAAM,CAACse,QAAQ,GAAGpa,IAAI,CAACoa,QAAQ,KAAK,IAAI;IACxCte,MAAM,CAACue,kBAAkB,GAAGra,IAAI,CAACqa,kBAAkB;IAEnDve,MAAM,CAACqe,UAAU,GAAGF,gBAAgB,CAACM,mBAAmB,CAACva,IAAI,CAAC;IAE9D7D,aAAa,CAAC8E,UAAU,CAAC7E,QAAQ,CAAC;EACtC,CAAC,CAAC;EAGFN,MAAM,CAACmL,aAAa,GAAG,KAAK;EAE5BnL,MAAM,CAACiM,YAAY,GAAG,YAAY;IAC9B5L,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;IACnCL,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;MAAEoT,SAAS,EAAE,IAAI;MAAE/R,MAAM,EAAE;IAAS,CAAC,CAAC;EACzF,CAAC;EAEDrM,MAAM,CAAC0e,eAAe,GAAG,UAAU5U,IAAI,EAAE;IACrC9J,MAAM,CAACoe,SAAS,GAAGtU,IAAI;EAC3B,CAAC;EAGD9J,MAAM,CAAC2e,YAAY,GAAG,YAAY;IAC9Bte,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;IACnC,IAAI,CAAC,CAACN,MAAM,CAACoe,SAAS,EAAE;MACpBpe,MAAM,CAACoe,SAAS,CAACQ,iBAAiB,GAAG5e,MAAM,CAACwe,OAAO;IACvD;IACAve,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EACzC;MACIsT,QAAQ,EAAEte,MAAM,CAACse,QAAQ;MACzBC,kBAAkB,EAAEve,MAAM,CAACue,kBAAkB;MAC7CH,SAAS,EAAEpe,MAAM,CAACoe,SAAS;MAC3B/R,MAAM,EAAE;IACZ,CAAC,CAAC;EACV,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;;AC9DX;AACA;AACA;AACA;;AAGAvM,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,gBAAgB,EAAE,CACjD,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAChE,UAAUle,EAAE,EAAEH,QAAQ,EAAEP,UAAU,EAAEC,aAAa,EAAEG,aAAa,EAAE;EAE9D,IAAI,CAACiO,IAAI,GAAG,SAAS,CAAC,CAAC;EACvB,IAAI,CAACwQ,UAAU,GAAG,IAAI;EACtB,IAAI,CAACC,MAAM,GAAG,CAAC;EACf,IAAI,CAACC,MAAM,GAAG,CAAC;EACf,IAAI,CAACC,QAAQ,GAAG,GAAG;EACnB,IAAI,CAACC,WAAW,GAAG,EAAE;EAGrB,IAAI,CAACC,aAAa,GAAG,YAAY;IAC7B,IAAI,CAACD,WAAW,GAAG,EAAE,CAAC;EAC1B,CAAC;EAED,IAAI,CAACE,WAAW,GAAG,UAAUC,MAAM,EAAE/Q,IAAI,EAAEpG,IAAI,EAAEoX,OAAO,EAAEC,IAAI,EAAER,MAAM,EAAE;IAEpE,IAAIS,MAAM,GAAG1b,CAAC,CAAC,mBAAmB,GAAGub,MAAM,CAAC;IAC5CG,MAAM,CAACC,IAAI,CAAC,EAAE,CAAC;IAEf,IAAI,CAAC,CAACvX,IAAI,EAAE;MACR,IAAIwX,WAAW,GAAGxX,IAAI,CAACyX,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;MAC9D,IAAIC,cAAc,GAAGF,WAAW;MAChC,IAAInY,OAAO,GAAGgY,IAAI;MAClB,IAAIR,MAAM,GAAGA,MAAM,GAAGA,MAAM,GAAG,IAAI,CAACA,MAAM;MAC1C,IAAIC,MAAM,GAAG,IAAI,CAACA,MAAM;MACxB,IAAIC,QAAQ,GAAG,IAAI,CAACA,QAAQ;MAC5B,IAAIH,UAAU,GAAG,IAAI,CAACA,UAAU;MAChC,IAAIe,OAAO,GAAG,IAAI,CAACX,WAAW;MAE9B,IAAIY,GAAG,GAAG;QAAEtV,EAAE,EAAE6U,MAAM;QAAEU,GAAG,EAAEzR,IAAI;QAAE0R,IAAI,EAAE1R,IAAI;QAAEpG,IAAI,EAAEwX,WAAW;QAAEJ,OAAO,EAAEM,cAAc;QAAEK,GAAG,EAAE1Y;MAAQ,CAAC;MAEzG,IAAI2Y,EAAE,GAAG,IAAIC,MAAM,CAACC,YAAY,EAAEtB,UAAU,CAAC;MAE7C,IAAIuB,MAAM,GAAGC,QAAQ,CAACC,cAAc,CAAClB,MAAM,CAAC;MAC5CgB,MAAM,CAAClD,MAAM,GAAG,CAAC;MACjBkD,MAAM,CAACnD,KAAK,GAAG,CAAC;MAChBmD,MAAM,CAACG,KAAK,CAACC,UAAU,GAAG,QAAQ;;MAElC;MACA;MACA,IAAIlB,IAAI,GAAGhY,OAAO;MAElB,IAAImZ,GAAG,GAAGnB,IAAI,CAAClE,KAAK,CAAC,GAAG,CAAC;MACzBkE,IAAI,GAAG,CAAC,CAAC;MACT,KAAK,IAAI/K,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGkM,GAAG,CAACta,MAAM,EAAEoO,CAAC,EAAE,EAAE;QACjC,IAAI,CAACkM,GAAG,CAAClM,CAAC,CAAC,EAAE;UACT;QACJ;QACA,IAAImM,EAAE,GAAGD,GAAG,CAAClM,CAAC,CAAC,CAACnF,OAAO,CAAC,GAAG,CAAC;QAC5B,IAAIsR,EAAE,IAAI,CAAC,CAAC,EAAE;UACVpB,IAAI,CAACmB,GAAG,CAAClM,CAAC,CAAC,CAAC,GAAG,IAAI;QACvB,CAAC,MAAM;UACH+K,IAAI,CAACmB,GAAG,CAAClM,CAAC,CAAC,CAACoM,MAAM,CAAC,CAAC,EAAED,EAAE,CAAC,CAAC,GAAGD,GAAG,CAAClM,CAAC,CAAC,CAACoM,MAAM,CAACD,EAAE,GAAG,CAAC,CAAC;QACtD;MACJ;;MAEA;MACA,IAAIf,cAAc,EAAE;QAChBL,IAAI,CAACsB,OAAO,GAAGjB,cAAc;QAC7BL,IAAI,CAACuB,WAAW,GAAG,IAAI;MAC3B;MACA;MACA;MACA,IAAI,CAACvB,IAAI,CAACpC,MAAM,IAAI2C,GAAG,CAACC,GAAG,IAAI,aAAa,EAAE;QAC1CR,IAAI,CAACpC,MAAM,GAAGoC,IAAI,CAACpC,MAAM,GAAG,IAAI,IAAI,GAAG;MAC3C;MACA;MACA,IAAI,CAACoC,IAAI,CAACrC,KAAK,EAAE;QACbqC,IAAI,CAACrC,KAAK,GAAGqC,IAAI,CAACrC,KAAK,GAAG,IAAI,IAAI,CAAC;MACvC;MACA;MACA;;MAEA,IAAIqC,IAAI,CAACwB,eAAe,EAAE;QACtBb,EAAE,CAACc,MAAM,CAAC,IAAIC,MAAM,CAACZ,MAAM,EAAEpB,QAAQ,EAAEM,IAAI,CAACwB,eAAe,CAAC,CAAC;QAC7D,OAAOxB,IAAI,CAACwB,eAAe;MAC/B,CAAC,MAAM;QACHb,EAAE,CAACc,MAAM,CAAC,IAAIC,MAAM,CAACZ,MAAM,EAAEpB,QAAQ,CAAC,CAAC;MAC3C;;MAEA;MACAiB,EAAE,CAACgB,KAAK,CAACnC,MAAM,EAAEC,MAAM,CAAC;;MAExB;MACAkB,EAAE,CAACc,MAAM,CAAC,CAAC,CAACG,GAAG,CAAC,CAAC5B,IAAI,CAAC6B,YAAY,GAAGrC,MAAM,IAAI,CAAC,EAC5C,CAACQ,IAAI,CAAC8B,aAAa,GAAGrC,MAAM,IAAI,CAAC,CAAC;MAEtC,IAAI;QACAsC,KAAK,CAAC,CAAC,CAACpB,EAAE,EAAEJ,GAAG,CAACC,GAAG,EAAE7X,IAAI,EAAEqX,IAAI,CAAC;MACpC,CAAC,CAAC,OAAOgC,CAAC,EAAE;QACR;QACAlB,MAAM,CAACG,KAAK,CAACgB,OAAO,GAAG,MAAM;QAC7BhC,MAAM,CAACpC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAACA,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC;QAC7D,IAAIxC,GAAG,GAAG,EAAE,GAAG2G,CAAC;QAChB,IAAI3G,GAAG,CAACvL,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;UAC5B,IAAIoS,SAAS,GAAG7G,GAAG,CAACS,KAAK,CAAC,GAAG,CAAC;UAC9BmE,MAAM,CAACC,IAAI,CAAC,uCAAuC,GAAGJ,MAAM,GAAG,yCAAyC,GAAGK,WAAW,GAAG,QAAQ,GAAG+B,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;QAChK,CAAC,MAAM,IAAIF,CAAC,CAACG,KAAK,EAAE;UAChB,IAAID,SAAS,GAAGF,CAAC,CAACG,KAAK,CAACrG,KAAK,CAAC,GAAG,CAAC;UAClCmE,MAAM,CAACC,IAAI,CAAC,uCAAuC,GAAGJ,MAAM,GAAG,yCAAyC,GAAGK,WAAW,GAAG,QAAQ,GAAG+B,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;QAChK,CAAC,MAAM;UACH,IAAIA,SAAS,GAAGF,CAAC,CAAClG,KAAK,CAAC,GAAG,CAAC;UAC5BmE,MAAM,CAACC,IAAI,CAAC,uCAAuC,GAAGJ,MAAM,GAAG,yCAAyC,GAAGK,WAAW,GAAG,QAAQ,GAAG+B,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;QAChK;QACA;MACJ;MACA5B,OAAO,CAACxZ,IAAI,CAAC;QAAEsb,GAAG,EAAEzB,EAAE;QAAEJ,GAAG,EAAEA,GAAG;QAAEP,IAAI,EAAEA,IAAI;QAAEc,MAAM,EAAEA;MAAO,CAAC,CAAC;MAE/D,IAAI,CAACnB,WAAW,GAAGW,OAAO;IAC9B,CAAC,MAAM;MACH,IAAIQ,MAAM,GAAGC,QAAQ,CAACC,cAAc,CAAClB,MAAM,CAAC,CAACmB,KAAK,CAACgB,OAAO,GAAG,MAAM;MACnEhC,MAAM,CAACC,IAAI,CAAC,uCAAuC,GAAGJ,MAAM,GAAG,yDAAyD,CAAC;IAC7H;EAEJ,CAAC;EAED,IAAI,CAACuC,cAAc,GAAG,YAAY;IAE9B,IAAIvC,MAAM,GAAG,EAAE;IACf,IAAIH,WAAW,GAAG,IAAI,CAACA,WAAW;IAClC,IAAIQ,WAAW,GAAG,EAAE;IAEpB,IAAI;MACA;MACA;MACAU,YAAY,CAACyB,SAAS,CAAC,UAAUN,CAAC,EAAE;QAChC,IAAIA,CAAC,EAAE;UACHzd,CAAC,CAAC,GAAG,GAAGub,MAAM,CAAC,CAACnX,IAAI,CAACqZ,CAAC,CAACG,KAAK,IAAK,EAAE,GAAGH,CAAE,CAAC;QAC7C,CAAC,MAAM;UACH,KAAK,IAAIhb,MAAK,GAAG,CAAC,EAAEub,GAAG,GAAG5C,WAAW,CAAC9Y,MAAM,EAAEG,MAAK,GAAGub,GAAG,EAAE,EAAEvb,MAAK,EAAE;YAChEmZ,WAAW,GAAGR,WAAW,CAAC3Y,MAAK,CAAC,CAACuZ,GAAG,CAAC5X,IAAI;YACzCmX,MAAM,GAAGH,WAAW,CAAC3Y,MAAK,CAAC,CAACuZ,GAAG,CAACtV,EAAE;YAElC0U,WAAW,CAAC3Y,MAAK,CAAC,CAACob,GAAG,CAACI,MAAM,CAAC,CAAC;;YAE/B;YACA7C,WAAW,CAAC3Y,MAAK,CAAC,CAAC8Z,MAAM,CAACG,KAAK,CAACgB,OAAO,GAAG,MAAM;YAEhD,IAAIQ,OAAO,GAAG9C,WAAW,CAAC3Y,MAAK,CAAC,CAAC8Z,MAAM,CAAC4B,SAAS,CAAC,CAAC;YAEnD,IAAIzC,MAAM,GAAG1b,CAAC,CAAC,mBAAmB,GAAGub,MAAM,CAAC;YAC5CG,MAAM,CAACC,IAAI,CAAC,YAAY,GAAGuC,OAAO,GAAG,yCAAyC,CAAC;UACnF;UACA;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;QACoB;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,OAAOT,CAAC,EAAE;MACRrC,WAAW,CAAC3Y,KAAK,CAAC,CAAC8Z,MAAM,CAACG,KAAK,CAACgB,OAAO,GAAG,MAAM;MAChD,IAAIhC,MAAM,GAAG1b,CAAC,CAAC,mBAAmB,GAAGub,MAAM,CAAC;MAC5CG,MAAM,CAACpC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAACA,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC;MAC7D;MACA,IAAIxC,GAAG,GAAG,EAAE,GAAG2G,CAAC;MAChB,IAAI3G,GAAG,CAACvL,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QAC5B,IAAIoS,SAAS,GAAG7G,GAAG,CAACS,KAAK,CAAC,GAAG,CAAC;QAC9BmE,MAAM,CAACC,IAAI,CAAC,uCAAuC,GAAGJ,MAAM,GAAG,yCAAyC,GAAGK,WAAW,GAAG,QAAQ,GAAG+B,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;MAChK,CAAC,MAAM,IAAIF,CAAC,CAACG,KAAK,EAAE;QAChB,IAAID,SAAS,GAAGF,CAAC,CAACG,KAAK,CAACrG,KAAK,CAAC,GAAG,CAAC;QAClCmE,MAAM,CAACC,IAAI,CAAC,uCAAuC,GAAGJ,MAAM,GAAG,yCAAyC,GAAGK,WAAW,GAAG,QAAQ,GAAG+B,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;MAChK,CAAC,MAAM;QACH,IAAIA,SAAS,GAAGF,CAAC,CAAClG,KAAK,CAAC,GAAG,CAAC;QAC5BmE,MAAM,CAACC,IAAI,CAAC,uCAAuC,GAAGJ,MAAM,GAAG,yCAAyC,GAAGK,WAAW,GAAG,QAAQ,GAAG+B,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;MAChK;MACA;IACJ;EACJ,CAAC;EAED,IAAI,CAACS,UAAU,GAAG,YAAY;IAC1Bpe,CAAC,CAACmC,IAAI,CAACma,YAAY,CAAC+B,QAAQ,EAAE,UAAUjc,GAAG,EAAEkc,CAAC,EAAE;MAC5CA,CAAC,CAACC,KAAK,GAAG,CAAC,CAAC;IAChB,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACC,YAAY,GAAG,YAAY;IAC5BlC,YAAY,CAACmC,SAAS,GAAG,IAAI;IAAC,IAAAC,KAAA,YAAAA,MAAAhO,CAAA,EAEyB;QAC/CiO,GAAG,GAAGrC,YAAY,CAAC+B,QAAQ,CAAC3N,CAAC,CAAC;QAClC1Q,CAAC,CAACmC,IAAI,CAACyc,MAAM,CAACC,mBAAmB,CAACF,GAAG,CAACG,KAAK,CAAC,EAAE,UAAUC,CAAC,EAAEC,EAAE,EAAE;UAC3D1C,YAAY,CAAC2C,QAAQ,CAACvO,CAAC,EAAEiO,GAAG,CAACO,OAAO,EAAEP,GAAG,CAACG,KAAK,CAACE,EAAE,CAAC,EAAEL,GAAG,CAACG,KAAK,CAACE,EAAE,CAAC,CAAC;QACvE,CAAC,CAAC;MACN,CAAC;MAAAL,GAAA;IALD,KAAK,IAAIjO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4L,YAAY,CAAC+B,QAAQ,CAAC/b,MAAM,EAAEoO,CAAC,EAAE;MAAAgO,KAAA,CAAAhO,CAAA;IAAA;IAOrD,IAAIjJ,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB4U,YAAY,CAACyB,SAAS,CAAC,YAAY;MAC/BtW,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,CAAC;IAEF,OAAOF,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACuX,wBAAwB,GAAG,KAAK,CAAC,CAAC;EACvC,IAAI,CAACC,cAAc,GAAG,UAAUC,gBAAgB,EAAE;IAC9Cne,OAAO,CAACC,GAAG,CAAC,kBAAkB,GAAC,IAAI,CAACge,wBAAwB,CAAC;IAC7D,IAAG,IAAI,CAACA,wBAAwB,EAAE;IAElC,IAAI,CAACA,wBAAwB,GAAG,IAAI;IACpCje,OAAO,CAACC,GAAG,CAAC,kBAAkB,GAAC,IAAI,CAACge,wBAAwB,CAAC;IAC7D,IAAI,CAAC9D,aAAa,CAAC,CAAC;IAEpB,IAAIrb,CAAC,CAAC,gBAAgB,CAAC,CAACsf,EAAE,CAAC,SAAS,CAAC,EAAE;MACnC,IAAI,CAAChE,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE+D,gBAAgB,CAAC3I,OAAO,CAAC6I,WAAW,CAAC,CAAC,EAAEF,gBAAgB,CAAC3I,OAAO,CAAC6I,WAAW,CAAC,CAAC,EAAE,0BAA0B,CAAC;IACpJ;IACA,IAAIvf,CAAC,CAAC,gBAAgB,CAAC,CAACsf,EAAE,CAAC,UAAU,CAAC,EAAE;MACpC,IAAI,CAAChE,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE+D,gBAAgB,CAAC3I,OAAO,EAAE2I,gBAAgB,CAAC3I,OAAO,EAAE,aAAa,CAAC;IAC7G;;IAEA;IACA,IAAI8I,IAAI,GAAG,IAAI;IACf9iB,QAAQ,CAAC,YAAY;MACjBP,UAAU,CAAC+K,UAAU,CAAC,kBAAkB,EAAElH,CAAC,CAAC,mBAAmB,CAAC,CAAC;MAEjE,IAAG;QACC;QACAA,CAAC,CAAC,wBAAwB,CAAC,CAACmC,IAAI,CAAC,UAAUuO,CAAC,EAAE+O,IAAI,EAAE;UAChD,IAAIjV,IAAI,GAAGxK,CAAC,CAAC,IAAI,CAAC,CAAC6D,IAAI,CAAC,MAAM,CAAC;UAC/B,IAAI6C,EAAE,GAAG1G,CAAC,CAAC,IAAI,CAAC,CAAC6D,IAAI,CAAC,IAAI,CAAC;UAC3B,IAAIO,IAAI,GAAGpE,CAAC,CAAC,IAAI,CAAC,CAAC6D,IAAI,CAAC,SAAS,CAAC;UAElC2b,IAAI,CAAClE,WAAW,CAAC5U,EAAE,EAAE8D,IAAI,EAAEpG,IAAI,EAAEA,IAAI,EAAE,aAAa,CAAC;QACzD,CAAC,CAAC;QACF;;QAEA;QACAob,IAAI,CAAC1B,cAAc,CAAC,CAAC;QACrB0B,IAAI,CAACL,wBAAwB,GAAG,KAAK;QACrCje,OAAO,CAACC,GAAG,CAAC,kBAAkB,GAACqe,IAAI,CAACL,wBAAwB,CAAC;MAEjE,CAAC,CAAC,OAAM1B,CAAC,EAAE;QACP+B,IAAI,CAACL,wBAAwB,GAAG,KAAK;QACrCje,OAAO,CAACC,GAAG,CAAC,kBAAkB,GAACqe,IAAI,CAACL,wBAAwB,CAAC;MACjE;IACJ,CAAC,CAAC;EACN,CAAC;;EAED;EACA;EACA,IAAI,CAACO,uBAAuB,GAAG,UAAU9I,OAAO,EAAE;IAC9C,IAAIrR,GAAG,GAAG;MACNoa,GAAG,EAAE,IAAI;MACT7N,KAAK,EAAE;IACX,CAAC;IAED,IAAI1V,aAAa,CAACwjB,mBAAmB,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC;;IAE1D,IAAIC,SAAS,GAAGzjB,aAAa,CAACwjB,mBAAmB,KAAK,CAAC;;IAEvD;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;IAEY,IAAI,CAAChJ,OAAO,IAAIA,OAAO,CAACtU,MAAM,GAAG,EAAE,IAAIsU,OAAO,CAACtU,MAAM,GAAG,EAAE,EAAE,OAAO,IAAI,CAAC,CAAC;IACzE,IAAIsU,OAAO,CAACtU,MAAM,KAAK,EAAE,IAAIsU,OAAO,CAACkG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,OAAO,IAAI,CAAC,CAAC;;IAExE,IAAIgD,YAAY,GAAG1jB,aAAa,CAAC2jB,gCAAgC;IAEjE,IAAI,CAACF,SAAS,EAAE;MACZ,IAAIjJ,OAAO,CAACtU,MAAM,KAAK,EAAE,IAAIsU,OAAO,CAACkG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,IAAIlG,OAAO,CAACkG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC;IAE9G,CAAC,MAAM;MACH;MACAvX,GAAG,CAACya,KAAK,GAAG,IAAI;MAEhB,IAAIC,MAAM,GAAGC,QAAQ,CAACtJ,OAAO,CAACkG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;MAC3C,IAAIlG,OAAO,CAACtU,MAAM,KAAK,EAAE,IAAK,CAAC2d,MAAM,GAAG,EAAE,IAAIA,MAAM,GAAG,EAAE,KAAKA,MAAM,IAAI,EAAG,EAAE,OAAO,IAAI,CAAC,CAAC;MAC1F,IAAIrJ,OAAO,CAACtU,MAAM,KAAK,EAAE,EAAE;QACvB,IAAI2d,MAAM,IAAI,EAAE,IAAIA,MAAM,IAAI,EAAE,EAAE;UAC9B1a,GAAG,CAAC4a,eAAe,GAAG,IAAI;UAC1BL,YAAY,GAAG,EAAE,GAAGG,MAAM;QAC9B,CAAC,MAAM,IAAIA,MAAM,IAAI,EAAE,IAAIA,MAAM,IAAI,EAAE,EAAE;UACrCH,YAAY,GAAG,EAAE,GAAGG,MAAM;QAC9B,CAAC,MACGH,YAAY,GAAG,CAAC;MACxB,CAAC,MACI;QACDva,GAAG,CAAC4a,eAAe,GAAG,IAAI;MAC9B;IACJ;;IAEA;IACA,IAAIvJ,OAAO,CAACtU,MAAM,KAAK,EAAE,EACrBsU,OAAO,GAAGA,OAAO,CAACkG,MAAM,CAAC,CAAC,EAAElG,OAAO,CAACtU,MAAM,GAAG,CAAC,CAAC,CAAC,KAEhDsU,OAAO,GAAGA,OAAO,CAACkG,MAAM,CAAC,CAAC,EAAElG,OAAO,CAACtU,MAAM,GAAG,CAAC,CAAC;;IAEnD;IACAiD,GAAG,CAACoa,GAAG,GAAG/I,OAAO,CAACkG,MAAM,CAAC,CAAC,EAAE1gB,aAAa,CAACgkB,wBAAwB,CAAC;IACnE,IAAI3O,KAAK,GAAGmF,OAAO,CAACkG,MAAM,CAAC,CAAC1gB,aAAa,CAACikB,0BAA0B,CAAC;IAErE5O,KAAK,GAAGyO,QAAQ,CAACzO,KAAK,CAAC;IACvB,IAAI6O,KAAK,CAAC7O,KAAK,CAAC,EAAE,OAAO,IAAI;IAC7B,IAAI8O,GAAG,GAAGL,QAAQ,CAAC,aAAa,CAACpD,MAAM,CAAC,CAAC,EAAEgD,YAAY,GAAG,CAAC,CAAC,CAAC;IAC7Dva,GAAG,CAACuM,KAAK,GAAGL,KAAK,GAAG8O,GAAG;IAEvBhb,GAAG,CAACib,YAAY,GAAGpkB,aAAa,CAACqkB,2BAA2B,KAAK,IAAI;IAErE,IAAIH,KAAK,CAAC/a,GAAG,CAACuM,KAAK,CAAC,EAAE,OAAO,IAAI;IAEjC,OAAOvM,GAAG;EACd,CAAC;EAED,IAAI,CAACmb,eAAe,GAAG,UAAU5kB,EAAE,EAAE6kB,MAAM,EAAE/J,OAAO,EAAE;IAClD,IAAIgK,UAAU,GAAG,CAACD,MAAM,GAAG,IAAI,GAAGE,UAAU,CAACF,MAAM,CAAC;IACpD,IAAIL,KAAK,CAACM,UAAU,CAAC,EACjBA,UAAU,GAAG,IAAI;IAErB,IAAIjjB,GAAG,GAAG,CAAC;IACX,IAAIijB,UAAU,EAAE;MACZ,IAAIxkB,aAAa,CAACwjB,mBAAmB,KAAK,CAAC,IACtChJ,OAAO,CAACoJ,KAAK,KAAK,IAAI,IAAIpJ,OAAO,CAACuJ,eAAe,KAAK,IAAK,EAAE;QAAE;QAChExiB,GAAG,GAAGijB,UAAU;MACpB;;MAEA;MACA;MACA;MACA;MACA;MACA;MACA;IACJ;IAEA,OAAOjjB,GAAG;EACd,CAAC;EAED,IAAI,CAACmjB,sBAAsB,GAAG,UAAUC,OAAO,EAAEJ,MAAM,EAAE;IACrD;IACA;IACA,IAAI,CAACI,OAAO,CAACC,eAAe,EAAE;MAC1BD,OAAO,CAACC,eAAe,GAAGD,OAAO,CAACE,MAAM,GAAGN,MAAM;IACrD,CAAC,MAAM;MACH;MACAI,OAAO,CAACC,eAAe,GAAGD,OAAO,CAACC,eAAe,GAAGL,MAAM;IAC9D;IACA;IACAI,OAAO,CAACG,KAAK,GAAG,CAAC;EACrB,CAAC;AAEL,CAAC,CAAC,CAAC,C;;;;;;;;;;;;;;;;ACjXiB;AACyB;AAEjDllB,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,cAAc,EAAE,CAC/C,IAAI,EAAE,OAAO,EAAE,eAAe,EAC9B,UAAUle,EAAE,EAAEwkB,KAAK,EAAEjlB,aAAa,EAAE;EAEhC;AACR;AACA;AACA;AACA;AACA;EACQ,IAAI,CAACklB,SAAS,GAAG,UAAUC,GAAG,EAAE;IAC5B,IAAIC,QAAQ,GAAGL,gDAAS,CAACO,MAAM,CAACD,IAAI,CAACF,GAAG,CAAC;IACzC,IAAII,QAAQ,GAAGR,iDAAU,CAACU,GAAG,CAACC,QAAQ,CAACN,QAAQ,CAAC;IAChD,IAAIO,SAAS,GAAG,IAAI;IACpB,IAAIvC,IAAI,GAAG,IAAI;IACf,IAAIja,GAAG,GAAG,IAAI,CAACyc,aAAa,CAAC,CAAC,CACjB9hB,IAAI,CAAC,UAAU+hB,EAAE,EAAE;MAChB,OAAOzC,IAAI,CAAC0C,OAAO,CAACD,EAAE,EAAEN,QAAQ,CAAC;IACrC,CAAC,CAAC,CACDzhB,IAAI,CAAC,UAAUiiB,EAAE,EAAE;MAChBJ,SAAS,GAAGI,EAAE;MACd,OAAO3C,IAAI,CAAC4C,QAAQ,CAACL,SAAS,CAAC;IACnC,CAAC,CAAC,CACD7hB,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAI,CAACA,GAAG,IAAIA,GAAG,CAACjD,MAAM,IAAI,CAAC,EAAE;QAEzB,IAAI+f,aAAa,GAAG;UAChBC,MAAM,EAAE,KAAK;UACbf,GAAG,EAAEA,GAAG;UACRgB,KAAK,EAAE;QACX,CAAC;QAEF,OAAOlB,KAAK,CAACgB,aAAa,CAAC,CACxBniB,IAAI,CAAC,UAAUqF,GAAG,EAAE;UACT,IAAIiF,IAAI,GAAGjF,GAAG,CAACnF,IAAI,CAACoiB,WAAW;UAC/B,IAAIf,IAAI,GAAGlc,GAAG,CAACnF,IAAI,CAACqiB,IAAI;UAExBvhB,OAAO,CAACC,GAAG,CAAC,UAAU,GAAGsgB,IAAI,GAAG,WAAW,GAAGF,GAAG,CAAC;UAElD,IAAImB,MAAM,GAAGtB,8DAAS,CAAC7b,GAAG,CAACnF,IAAI,CAACuiB,KAAK,CAAC;UAEtCD,MAAM,GAAG,OAAO,GAAGlY,IAAI,GAAG,UAAU,GAAGkY,MAAM;UAE7C,OAAOlD,IAAI,CAACoD,SAAS,CAACb,SAAS,EAAEW,MAAM,CAAC;QAE5C,CAAC,EACD,UAAUriB,GAAG,EAAE;UACXa,OAAO,CAACC,GAAG,CAAC,iBAAiB,GAAGogB,GAAG,CAAC;UACpC,IAAIsB,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzBmb,QAAQ,CAACC,MAAM,CAACziB,GAAG,CAAC;UACpB,OAAOwiB,QAAQ,CAACjb,OAAO;QAC3B,CACJ,CAAC;MAEV,CAAC,MAAM;QACH,IAAIib,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBmb,QAAQ,CAAClb,OAAO,CAACpC,GAAG,CAAC;QACrB,OAAOsd,QAAQ,CAACjb,OAAO;MAC3B;IACJ,CAAC,CAAC;IAEd,OAAOrC,GAAG;EACd,CAAC;EAED,IAAI,CAACyc,aAAa,GAAG,YAAY;IAC7B,IAAIa,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzBnM,MAAM,CAACwnB,yBAAyB,CAACC,OAAO,CAACC,IAAI,CAACC,cAAc,EACxD,UAAUC,MAAM,EAAE;MACdA,MAAM,CAACC,YAAY,CAAC,UAAU,EAAE;QAAEC,MAAM,EAAE;MAAK,CAAC,EAC5C,UAAUC,QAAQ,EAAE;QAChBT,QAAQ,CAAClb,OAAO,CAAC2b,QAAQ,CAAC;MAC9B,CAAC,EAAE,UAAUjjB,GAAG,EAAE;QACdwiB,QAAQ,CAACC,MAAM,CAACziB,GAAG,CAAC;MACxB,CAAC,CAAC;IACV,CAAC,CAAC;IAEN,OAAOwiB,QAAQ,CAACjb,OAAO;EAC3B,CAAC;EAED,IAAI,CAACsa,OAAO,GAAG,UAAUoB,QAAQ,EAAE3B,QAAQ,EAAE;IACzC,IAAIkB,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB4b,QAAQ,CAACpB,OAAO,CAACP,QAAQ,EAAE;MAAE0B,MAAM,EAAE,IAAI;MAAEE,SAAS,EAAE;IAAM,CAAC,EACzD,UAAUxB,SAAS,EAAE;MACjBc,QAAQ,CAAClb,OAAO,CAACoa,SAAS,CAAC;IAC/B,CAAC,EAAE,YAAY;MACXc,QAAQ,CAACC,MAAM,CAAC,CAAC;IACrB,CAAC,CAAC;IACN,OAAOD,QAAQ,CAACjb,OAAO;EAC3B,CAAC;EAED,IAAI,CAACwa,QAAQ,GAAG,UAAUL,SAAS,EAAE;IACjC,IAAIc,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBqa,SAAS,CAACkB,IAAI,CAAC,UAAUA,IAAI,EAAE;MAC3B,IAAIO,MAAM,GAAG,IAAIC,UAAU,CAAC,CAAC;MAE7BD,MAAM,CAACE,SAAS,GAAG,YAAY;QAC3Bb,QAAQ,CAAClb,OAAO,CAAC,IAAI,CAACgc,MAAM,CAAC;QAC7B;MACJ,CAAC;MAEDH,MAAM,CAACI,UAAU,CAACX,IAAI,CAAC;IAE3B,CAAC,EAAE,UAAU5iB,GAAG,EAAE;MACdwiB,QAAQ,CAACC,MAAM,CAACziB,GAAG,CAAC;IACxB,CAAC,CAAC;IAEF,OAAOwiB,QAAQ,CAACjb,OAAO;EAC3B,CAAC;EAED,IAAI,CAACgb,SAAS,GAAG,UAAUb,SAAS,EAAE8B,OAAO,EAAE;IAC3C,IAAIhB,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBqa,SAAS,CAAC+B,YAAY,CAAC,UAAUC,UAAU,EAAE;MAEzCA,UAAU,CAACC,UAAU,GAAG,YAAY;QAChC9iB,OAAO,CAACC,GAAG,CAAC,0BAA0B,CAAC;QACvC0hB,QAAQ,CAAClb,OAAO,CAACkc,OAAO,CAAC;MAC7B,CAAC;MAEDE,UAAU,CAACE,OAAO,GAAG,UAAUxG,CAAC,EAAE;QAC9Bvc,OAAO,CAACC,GAAG,CAAC,qBAAqB,GAAGsc,CAAC,CAACyG,QAAQ,CAAC,CAAC,CAAC;QACjDrB,QAAQ,CAAClb,OAAO,CAACkc,OAAO,CAAC;MAC7B,CAAC;;MAED;MACA;MACA,IAAIM,GAAG,GAAG,IAAIC,IAAI,CAAC,CAACP,OAAO,CAAC,EAAE;QAAErZ,IAAI,EAAE;MAAa,CAAC,CAAC;MACrDuZ,UAAU,CAACM,IAAI,CAAC,CAAC,CAAC;MAClBN,UAAU,CAACO,KAAK,CAACH,GAAG,CAAC;IACzB,CAAC,CAAC;IAEF,OAAOtB,QAAQ,CAACjb,OAAO;EAC3B,CAAC;;EAED;AACR;AACA;EACQ,IAAI,CAAC2c,UAAU,GAAG,YAAY;IAC1BhpB,MAAM,CAACwnB,yBAAyB,CAACC,OAAO,CAACC,IAAI,CAACC,cAAc,EACxD,UAAUC,MAAM,EAAE;MACdA,MAAM,CAACC,YAAY,CAAC,UAAU,EAAE;QAAEC,MAAM,EAAE;MAAK,CAAC,EAC5C,UAAUC,QAAQ,EAAE;QAChBA,QAAQ,CAACkB,iBAAiB,CAAC,YAAY;UACnCtjB,OAAO,CAACC,GAAG,CAAC,8BAA8B,CAAC;QAC/C,CAAC,CAAC;MACN,CAAC,EAAE,UAAUd,GAAG,EAAE;QACda,OAAO,CAACC,GAAG,CAAC,2BAA2B,CAAC;MAC5C,CAAC,CAAC;IACV,CAAC,CAAC;EACV,CAAC;AAEL,CAAC,CAAC,CAAC,C;;;;;;;;;;;AC1JPnF,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,sBAAsB,EACvD,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EACvG,UAAUC,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAEG,aAAa,EAAEC,QAAQ,EAAEH,YAAY,EAAEQ,EAAE,EAAEiX,YAAY,EAAE;EAElG5X,MAAM,CAACuoB,YAAY,GAAG,KAAK;EAC3BvoB,MAAM,CAACwoB,SAAS,GAAG,KAAK;EACxBxoB,MAAM,CAAC0a,OAAO,GAAG,EAAE;EAEnB1a,MAAM,CAACqC,GAAG,CAAC,iBAAiB,EAAE,UAAUomB,CAAC,EAAEvkB,IAAI,EAAE;IAE7ClE,MAAM,CAACuoB,YAAY,GAAGrkB,IAAI,CAACqkB,YAAY;IACvCvoB,MAAM,CAACwoB,SAAS,GAAGtkB,IAAI,CAACwkB,aAAa;IAErC,IAAI1oB,MAAM,CAACuoB,YAAY,KAAK,IAAI,EAAE;MAC9BloB,aAAa,CAAC8E,UAAU,CAAC7E,QAAQ,CAAC;IACtC;IAEA,OAAON,MAAM,CAAC2oB,KAAK,CAAC,CAAC;EACzB,CAAC,CAAC;EAEF3oB,MAAM,CAAC4oB,UAAU,GAAG,YAAY;IAC5BvoB,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;EACvC,CAAC;EAEDN,MAAM,CAAC6oB,QAAQ,GAAG,YAAY;IAC1B,OAAO7oB,MAAM,CAAC2oB,KAAK,CAAC,CAAC;EACzB,CAAC;EAED3oB,MAAM,CAAC2oB,KAAK,GAAG,YAAY;IACvB,IAAIvhB,KAAK,GAAGpH,MAAM;IAClB;;IAGA8D,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,OAAO/D,MAAM,CAAC8oB,IAAI,CAAC,CAAC,CAAC9kB,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACrCjC,KAAK,CAACsT,OAAO,GAAGrR,GAAG,CAACnB,IAAI;MACxBpE,CAAC,CAACO,SAAS,CAAC,CAAC;MACb;MACA,IAAG+C,KAAK,CAACohB,SAAS,EAAE;QAChBvoB,UAAU,CAAC+K,UAAU,CAAC,cAAc,EAAE5D,KAAK,CAACsT,OAAO,CAAC;MACxD,CAAC,MAAM;QACH,IAAG,CAAC,CAACrb,MAAM,CAAC0pB,kBAAkB,EAAE;UAC5B,IAAInpB,EAAE,GAAGkE,CAAC,CAACzE,MAAM,CAAC0pB,kBAAkB,CAAC;UACrCnpB,EAAE,CAACwF,KAAK,CAAC,CAAC;UACVxF,EAAE,CAACoJ,GAAG,CAAC5B,KAAK,CAACsT,OAAO,CAAC;QACzB;MACJ;IAEJ,CAAC,CAAC,SAAM,CAAC,UAAUvW,GAAG,EAAE;MACpBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAEDnE,MAAM,CAAC8oB,IAAI,GAAG,YAAY;IACtB,IAAIvd,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAItL,aAAa,CAACX,MAAM,IAAIW,aAAa,CAAC8oB,UAAU,EAAE;MAClD,IAAIvB,MAAM,GAAG;QACjC;QACwBvf,IAAI,EAAE,WAAW;QACjB+gB,MAAM,EAAE,QAAQ;QAChBC,SAAS,EAAE;MACf,CAAC;MAEDlkB,OAAO,CAACC,GAAG,CAAC,6BAA6B,GACzC,UAAU,GAAGwiB,MAAM,CAACvf,IAAI,GAAG,IAAI,GAC/B,UAAU,GAAGuf,MAAM,CAACwB,MAAM,GAAG,IAAI,GACjC,aAAa,GAAGxB,MAAM,CAACyB,SAAS,CAAC;MAEjC3d,QAAQ,CAACE,OAAO,CAACgc,MAAM,CAAC;IAC5B,CAAC,MACI;MACDX,OAAO,CAACqC,OAAO,CAACC,cAAc,CAACN,IAAI,CAC/B,UAAUrB,MAAM,EAAE;QACd7P,YAAY,CAACmD,QAAQ,CAAC,CAAC;QACvB/V,OAAO,CAACC,GAAG,CAAC,oBAAoB,GAC5B,UAAU,GAAGwiB,MAAM,CAACvf,IAAI,GAAG,IAAI,GAC/B,UAAU,GAAGuf,MAAM,CAACwB,MAAM,GAAG,IAAI,GACjC,aAAa,GAAGxB,MAAM,CAACyB,SAAS,CAAC;QACrC3d,QAAQ,CAACE,OAAO,CAACgc,MAAM,CAAC;MAC5B,CAAC,EACD,UAAU4B,KAAK,EAAE;QACbzR,YAAY,CAACkD,OAAO,CAAC,CAAC;QACtB9V,OAAO,CAACC,GAAG,CAAC,mBAAmB,GAAGokB,KAAK,CAAC;QACxC9d,QAAQ,CAACqb,MAAM,CAACyC,KAAK,CAAC;MAC1B,CAAC,EACD;QACIC,qBAAqB,EAAE,CAAC;QACxBC,kBAAkB,EAAE,IAAI,CAAC;MAC7B,CACJ,CAAC;IACL;IAEA,OAAOhe,QAAQ,CAACG,OAAO;EAC3B,CAAC;AACL,CAAC,CACJ,CAAC,C;;;;;;;;;;AChGN5L,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,0BAA0B,EAC3D,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EACjI,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,uBAAuB,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAE,IAAI,EAC7I,UAAUC,MAAM,EAAEC,UAAU,EAAEM,SAAS,EAAEipB,YAAY,EAAEhpB,QAAQ,EAAEL,YAAY,EAAED,aAAa,EAAEupB,eAAe,EAACC,aAAa,EACvHC,KAAK,EAAEC,SAAS,EAAEC,SAAS,EAAExpB,aAAa,EAAEypB,OAAO,EAAEC,qBAAqB,EAAElS,YAAY,EAAEpX,cAAc,EAAEupB,OAAO,EAAErpB,EAAE,EAAE;EAEvH;EACAV,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE1pB,SAAS,CAAC2pB;EAA4B,CAAC,CAAC,CAAC,CAAC;;EAErG,IAAI,CAACV,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;IACZ;EACQ;EAEApqB,MAAM,CAACqqB,WAAW,GAAG5pB,cAAc,CAACe,SAAS,CAAC,eAAe,CAAC;EAE9DxB,MAAM,CAACsqB,eAAe,GAAGjqB,aAAa,CAACiqB,eAAe;EACtDtqB,MAAM,CAACuqB,eAAe,GAAGlqB,aAAa,CAACmqB,2BAA2B;;EAElE;EACAxqB,MAAM,CAACyqB,gBAAgB,GAAG,CAAC,CAAC;EAC5BzqB,MAAM,CAACyqB,gBAAgB,CAACC,UAAU,GAAGxqB,aAAa,CAACyqB,UAAU;EAC7D3qB,MAAM,CAACyqB,gBAAgB,CAACG,cAAc,GAAG1qB,aAAa,CAAC2qB,YAAY;EACnE7qB,MAAM,CAACyqB,gBAAgB,CAACrnB,EAAE,GAAG,IAAI;EACjCpD,MAAM,CAAC8qB,QAAQ,GAAG;IACd/F,MAAM,EAAE,CAAC;IACTgG,WAAW,EAAE,CAAC;IACd7nB,IAAI,EAAE,KAAK;IACX8nB,YAAY,EAAE,IAAI;IAClBC,MAAM,EAAE;EACZ,CAAC;EAEDjrB,MAAM,CAACkrB,eAAe,GAAGpB,OAAO,CAACqB,cAAc,CAACC,YAAY;EAE5DprB,MAAM,CAACqrB,iBAAiB,GAAG,YAAY;IACnC,IAAIzrB,EAAE,GAAGkE,CAAC,CAAC,oCAAoC,CAAC;IAChD,IAAIwnB,GAAG,GAAG1rB,EAAE,CAAC2rB,MAAM,CAAC,CAAC;IACrB,IAAIC,GAAG,GAAG5rB,EAAE,CAAC6rB,OAAO,CAAC,gBAAgB,CAAC;IACtC,IAAID,GAAG,CAACplB,MAAM,GAAG,CAAC,EAAE;MAChB,IAAIslB,MAAM,GAAGF,GAAG,CAACD,MAAM,CAAC,CAAC;MACzB,IAAIpO,MAAM,GAAGqO,GAAG,CAACrO,MAAM,CAAC,CAAC;MACzB,IAAIwO,SAAS,GAAGxO,MAAM,IAAImO,GAAG,CAACM,GAAG,GAAGF,MAAM,CAACE,GAAG,CAAC;MAC/ChsB,EAAE,CAACyR,IAAI,CAAC,IAAI,CAAC,CAAC+L,GAAG,CAAC,QAAQ,EAAEuO,SAAS,GAAG,IAAI,CAAC;IACjD;EACJ,CAAC;EAED3rB,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB3mB,WAAW,CAAClF,MAAM,CAACqrB,iBAAiB,CAAC;IACrC7qB,QAAQ,CAAC,YAAY;MAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IAAE,CAAC,CAAC;;IAEhE;IACZ;IACYqT,YAAY,CAAC0B,SAAS,CAAC,IAAI,CAAC,CAACvV,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC7C,OAAOrJ,MAAM,CAAC8rB,mBAAmB,CAAC,CAAC;IACvC,CAAC,CAAC;IAEFhoB,CAAC,CAACC,OAAO,CAAC,CAAC;IACX0lB,eAAe,CAACsC,sBAAsB,CAAC7rB,aAAa,CAAC8rB,cAAc,EAAE9rB,aAAa,CAAC+rB,YAAY,CAAC,CAACjoB,IAAI,CAAC,UAAUC,IAAI,EAAE;MAClH,IAAIA,IAAI,CAAC,CAAC,CAAC,EAAE;QACT,IAAIioB,KAAK,GAAGjoB,IAAI,CAAC,CAAC,CAAC;QACnBjE,MAAM,CAACyqB,gBAAgB,GAAGyB,KAAK;QAC/BlsB,MAAM,CAACyqB,gBAAgB,CAACC,UAAU,GAAGxqB,aAAa,CAACyqB,UAAU;QAC7D3qB,MAAM,CAACyqB,gBAAgB,CAACG,cAAc,GAAG1qB,aAAa,CAAC2qB,YAAY;QACnE7qB,MAAM,CAACyqB,gBAAgB,CAAC0B,eAAe,GAAGnsB,MAAM,CAACyqB,gBAAgB,CAAC2B,gBAAgB;QAClFpsB,MAAM,CAACyqB,gBAAgB,CAAC4B,kBAAkB,GAAGrsB,MAAM,CAACyqB,gBAAgB,CAAC6B,mBAAmB;QACxFtsB,MAAM,CAACyqB,gBAAgB,CAAC8B,cAAc,GAAGvsB,MAAM,CAACyqB,gBAAgB,CAAC+B,eAAe;QAChFxsB,MAAM,CAACyqB,gBAAgB,CAACgC,iBAAiB,GAAGzsB,MAAM,CAACyqB,gBAAgB,CAACiC,kBAAkB;QACtF3C,qBAAqB,CAAC4C,gBAAgB,CAAC3sB,MAAM,CAACyqB,gBAAgB,CAACrnB,EAAE,CAAC,CAACY,IAAI,CAAC,UAAU4oB,UAAU,EAAE;UAE1F5sB,MAAM,CAAC4sB,UAAU,GAAGA,UAAU;UAC9B;UACA;UACA;;UAEA5sB,MAAM,CAAC8qB,QAAQ,CAACG,MAAM,GAAG,cAAc;UACvCzqB,QAAQ,CAAC,YAAY;YAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;UAAE,CAAC,CAAC;UAEhEV,CAAC,CAACO,SAAS,CAAC,CAAC;UAEbrE,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;QAC7B,CAAC,CAAC;MACN,CAAC,MAAM;QACH/oB,CAAC,CAACO,SAAS,CAAC,CAAC;QACbwlB,SAAS,CAACiD,IAAI,CAAC,oBAAoB,CAAC;QACpC9sB,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;MAC7B;IACJ,CAAC,EACD,UAAU1oB,GAAG,EAAE;MACXL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC3B,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAAC+sB,cAAc,GAAG,UAASC,KAAK,EAAEC,QAAQ,EAAE;IAC9C,IAAI,CAACD,KAAK,EAAE;MACR,OAAO,GAAG;IACd,CAAC,MAAM;MACH,OAAOA,KAAK,GAAGC,QAAQ;IAC3B;EACJ,CAAC;EAEDjtB,MAAM,CAACktB,UAAU,GAAG,YAAY;IAC5BltB,MAAM,CAAC8qB,QAAQ,GAAG;MAAE5nB,IAAI,EAAE,QAAQ;MAAEiqB,aAAa,EAAE;IAAW,CAAC;IAC/DntB,MAAM,CAAC8qB,QAAQ,CAACsC,UAAU,GAAG;MAAEC,cAAc,EAAE,IAAI;MAAEC,WAAW,EAAE;IAAM,CAAC;IACzEC,iBAAiB,CAAC,CAAC;EACvB,CAAC;EAEDvtB,MAAM,CAACwtB,OAAO,GAAG,YAAY;IACzBxtB,MAAM,CAAC8qB,QAAQ,GAAG;MAAE5nB,IAAI,EAAE,KAAK;MAAEiqB,aAAa,EAAE;IAAU,CAAC;IAC3DntB,MAAM,CAAC8qB,QAAQ,CAACsC,UAAU,GAAG;MAAEK,WAAW,EAAE,IAAI;MAAEC,QAAQ,EAAE;IAAM,CAAC;IACnEH,iBAAiB,CAAC,CAAC;EACvB,CAAC;EAEDvtB,MAAM,CAAC2tB,WAAW,GAAG,YAAY;IAC7B,IAAIC,MAAM,GAAG,CAAC5tB,MAAM,CAAC8qB,QAAQ,CAACE,YAAY,GAAGhrB,MAAM,CAAC8qB,QAAQ,CAACG,MAAM,GAAGjrB,MAAM,CAAC8qB,QAAQ,CAACE,YAAY;IAClG,IAAI7mB,GAAG,GAAG,IAAI;IACd,IAAIypB,MAAM,IAAIA,MAAM,CAACxnB,MAAM,GAAG,GAAG,EAAE;MAC/BjC,GAAG,GAAG1D,cAAc,CAACe,SAAS,CAAC,gDAAgD,CAAC;IACpF;IACA,IAAI2C,GAAG,EAAE;MACLhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC3B,OAAO,KAAK;IAChB;IAEA,OAAO,IAAI;EACf,CAAC;EAED,SAASopB,iBAAiBA,CAAA,EAAG;IACzBvtB,MAAM,CAAC8qB,QAAQ,CAAC/F,MAAM,GAAG,CAAC;IAC1B/kB,MAAM,CAAC8qB,QAAQ,CAACC,WAAW,GAAG,CAAC;IAE/B,IAAI8C,cAAc,GAAG/pB,CAAC,CAAC,oBAAoB,CAAC;IAC5CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,EAAE,YAAW,CAAE,CAAC,CAAC;EAC5D;EAEA7tB,MAAM,CAACiM,YAAY,GAAG,YAAY;IAC9B,IAAI4hB,cAAc,GAAG/pB,CAAC,CAAC,oBAAoB,CAAC;IAC5CzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAE7C,CAAC;EAED7tB,MAAM,CAAC8tB,OAAO,GAAG,YAAY;IACzB,IAAI9tB,MAAM,CAAC8qB,QAAQ,CAAC5nB,IAAI,KAAK,KAAK,EAAE;MAChC,IAAI,CAAClD,MAAM,CAAC8qB,QAAQ,CAAC/F,MAAM,EACvB/kB,MAAM,CAAC8qB,QAAQ,CAACqC,aAAa,GAAG,eAAe,CAAC,KAEhDntB,MAAM,CAAC8qB,QAAQ,CAACqC,aAAa,GAAG,SAAS;IACjD,CAAC,MAAM;MACH,IAAI,CAACntB,MAAM,CAAC8qB,QAAQ,CAAC/F,MAAM,EACvB/kB,MAAM,CAAC8qB,QAAQ,CAACqC,aAAa,GAAG,gBAAgB,CAAC,KAEjDntB,MAAM,CAAC8qB,QAAQ,CAACqC,aAAa,GAAG,UAAU;IAClD;EACJ,CAAC;EAEDntB,MAAM,CAAC+tB,WAAW,GAAG,YAAY;IAC7B,IAAI3mB,KAAK,GAAGpH,MAAM;IAElB,IAAIguB,UAAU,GAAGhuB,MAAM,CAAC8qB,QAAQ,CAAC/F,MAAM,IAAI,CAAC,GAAG/kB,MAAM,CAAC8qB,QAAQ,CAACC,WAAW,GAAG/qB,MAAM,CAAC8qB,QAAQ,CAAC/F,MAAM;IACnG,IAAI6I,MAAM,GAAG,CAAC5tB,MAAM,CAAC8qB,QAAQ,CAACE,YAAY,GAAGhrB,MAAM,CAAC8qB,QAAQ,CAACG,MAAM,GAAGjrB,MAAM,CAAC8qB,QAAQ,CAACE,YAAY;IAClGhrB,MAAM,CAAC8tB,OAAO,CAAC,CAAC;IAChB,IAAI,CAAC9tB,MAAM,CAAC2tB,WAAW,CAAC,CAAC,EACrB;IAEJ7pB,CAAC,CAACC,OAAO,CAAC,CAAC;IACXgmB,qBAAqB,CAACkE,eAAe,CAACtE,KAAK,CAACuE,OAAO,CAAC,CAAC,EAAEluB,MAAM,CAACyqB,gBAAgB,CAACrnB,EAAE,EAAElD,aAAa,CAAC8rB,cAAc,EAC3G9rB,aAAa,CAACiuB,QAAQ,EAAEH,UAAU,EAClCJ,MAAM,EACN5tB,MAAM,CAAC8qB,QAAQ,CAACqC,aAAa,CAAC,CAChCnpB,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAClB,IAAIob,MAAM,GAAGzkB,MAAM,CAAC8qB,QAAQ,CAAC5nB,IAAI,KAAK,KAAK,GAAG8qB,UAAU,GAAGA,UAAU,GAAG,CAAC,CAAC;MAC1E,OAAOvE,eAAe,CAAC2E,kBAAkB,CAACluB,aAAa,CAACmuB,eAAe,EAAE5J,MAAM,CAAC;IACnF,CAAC,CAAC,CACFzgB,IAAI,CAAC,YAAY;MACf;MACC,IAAI8mB,QAAQ,GAAG;QACXqC,aAAa,EAAE/lB,KAAK,CAAC0jB,QAAQ,CAACqC,aAAa;QAC3CpI,MAAM,EAAEiJ,UAAU;QAClBM,OAAO,EAAEV;MACb,CAAC;MACD5tB,MAAM,CAACiM,YAAY,CAAC,CAAC;MACrBjM,MAAM,CAAC6rB,MAAM,CAAC,CAAC;MACf/nB,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb,IAAIkH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACqf,QAAQ,CAAC;MAC1B,OAAOvf,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC,CACD1H,IAAI,CAAC,UAAUuqB,GAAG,EAAE;MACjB,OAAO7E,aAAa,CAAC8E,yBAAyB,CAACpnB,KAAK,EAAE,CAACmnB,GAAG,CAAC,CAAC;IAChE,CAAC,CAAC,SACI,CAAC,UAAUpqB,GAAG,EAAE;MAClBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC3BL,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACN,CAAC;EAED,SAASoqB,aAAaA,CAACC,UAAU,EAAE;IAC/B,IAAIC,SAAS,GAAG,IAAI;IACpB7qB,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4uB,OAAO,EAAE,UAAS1oB,GAAG,EAAEtG,EAAE,EAAE;MACrC,IAAIA,EAAE,KAAK8uB,UAAU,EAAE;QACnBC,SAAS,GAAG,KAAK;QACjB,OAAO,KAAK;MAChB;IAEJ,CAAC,CAAC;IAEF,IAAIA,SAAS,EAAE;MACXzuB,aAAa,CAAC2uB,8BAA8B,CAACxoB,IAAI,CAACqoB,UAAU,CAAC;IACjE;EACJ;EAEA1uB,MAAM,CAAC8uB,gBAAgB,GAAG,UAAUxgB,IAAI,EAAE;IACtC,OAAOyb,qBAAqB,CAAC+E,gBAAgB,CAACxgB,IAAI,CAAC;EACvD,CAAC;EAEDtO,MAAM,CAAC+uB,gBAAgB,GAAG,UAAUzgB,IAAI,EAAE;IACtC,OAAOyb,qBAAqB,CAACgF,gBAAgB,CAACzgB,IAAI,CAAC;EACvD,CAAC;EAEDtO,MAAM,CAACgvB,iBAAiB,GAAG,UAAU3gB,IAAI,EAAE;IACvC,IAAIrO,MAAM,CAACivB,sBAAsB,CAAC5gB,IAAI,CAAC,KAAK,IAAI,EAC5C,OAAO,4BAA4B,CAAC,KACnC,IAAIrO,MAAM,CAACivB,sBAAsB,CAAC5gB,IAAI,CAAC,KAAK,KAAK,EAClD,OAAO,0BAA0B;EACzC,CAAC;EAEDrO,MAAM,CAACivB,sBAAsB,GAAG,UAAU5gB,IAAI,EAAE;IAC5C,IAAIA,IAAI,EAAE;MAEN,IAAIoW,MAAM,GAAGzkB,MAAM,CAAC8qB,QAAQ,CAAC/F,MAAM,IAAI,CAAC,GAAG/kB,MAAM,CAAC8qB,QAAQ,CAACC,WAAW,GAAG/qB,MAAM,CAAC8qB,QAAQ,CAAC/F,MAAM;MAC/F,IAAIxP,KAAK,GAAGlV,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAACF,MAAM,CAAC,EAAE,CAAC,CAAC;MAE1D,IAAI0K,QAAQ,GAAG9uB,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAAC3kB,MAAM,CAACyqB,gBAAgB,CAAC2E,YAAY,CAAC,EAAE,CAAC,CAAC;MAC3F,IAAIC,aAAa,GAAGrvB,MAAM,CAAC8qB,QAAQ,CAAC5nB,IAAI,KAAK,QAAQ;MAErD,IAAI,CAAC,CAAClD,MAAM,CAAC8qB,QAAQ,CAACG,MAAM,IAAIjrB,MAAM,CAAC8qB,QAAQ,CAACG,MAAM,KAAK,cAAc,KAAK,CAACjrB,MAAM,CAAC8qB,QAAQ,CAACE,YAAY,EACvG,OAAO,KAAK;MAEhB,IAAIzV,KAAK,GAAG,CAAC,KAAM8Z,aAAa,KAAK,IAAI,IAAI9Z,KAAK,IAAI4Z,QAAQ,IAAKE,aAAa,KAAK,KAAK,CAAC,EACvF,OAAO,IAAI,CAAC,KAEX,IAAK9Z,KAAK,IAAI4Z,QAAQ,IAAIE,aAAa,KAAK,IAAI,IAAK9Z,KAAK,KAAK,CAAC,EACjE,OAAO,KAAK;IAEpB;EACJ,CAAC;EAGDvV,MAAM,CAAC6sB,gBAAgB,GAAG,YAAY;IAClC5sB,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;EACxC,CAAC;EAEDhL,MAAM,CAACsqB,eAAe,GAAGjqB,aAAa,CAACiqB,eAAe;EAGtDtqB,MAAM,CAACsvB,uBAAuB,GAAG,IAAI,CAAC,CAAC;EACvCtvB,MAAM,CAACuvB,4BAA4B,GAAG,IAAI,CAAC,CAAC;;EAE5CvvB,MAAM,CAACguB,UAAU,GAAG,CAAC;EACrBhuB,MAAM,CAACwvB,eAAe,GAAG,CAAC;EAE1BxvB,MAAM,CAACyvB,2BAA2B,GAAG,YAAY;IAC7CzvB,MAAM,CAACguB,UAAU,GAAGhuB,MAAM,CAAC8qB,QAAQ,CAAC/F,MAAM;IAC1C,IAAI,CAAC/kB,MAAM,CAACguB,UAAU,EAClBhuB,MAAM,CAACguB,UAAU,GAAG,CAAC;IACzBxtB,QAAQ,CAAC,YAAY;MACjBR,MAAM,CAACsvB,uBAAuB,CAACI,MAAM,CAAC,CAAC;IAC3C,CAAC,CAAC;EAEN,CAAC;EACD1vB,MAAM,CAAC2vB,gCAAgC,GAAG,YAAY;IAClD3vB,MAAM,CAACwvB,eAAe,GAAGxvB,MAAM,CAAC8qB,QAAQ,CAACC,WAAW;IACpD,IAAI,CAAC/qB,MAAM,CAACwvB,eAAe,EACvBxvB,MAAM,CAACwvB,eAAe,GAAG,CAAC;IAC9BhvB,QAAQ,CAAC,YAAY;MACjBR,MAAM,CAACuvB,4BAA4B,CAACG,MAAM,CAAC,CAAC;IAChD,CAAC,CAAC;EAEN,CAAC;;EAED;EACA1vB,MAAM,CAAC4vB,uBAAuB,GAAG,UAAUpT,GAAG,EAAE;IAC5Cxc,MAAM,CAACsvB,uBAAuB,CAACxkB,IAAI,CAAC,IAAI,CAAC;IACzCtK,QAAQ,CAAC,YAAY;MACjB,IAAIgc,GAAG,KAAK,IAAI,EAAE;QACdxc,MAAM,CAAC8qB,QAAQ,CAAC/F,MAAM,GAAG/kB,MAAM,CAACguB,UAAU;QAC1ChuB,MAAM,CAAC8qB,QAAQ,CAACC,WAAW,GAAG,CAAC;QAC/B,IAAI/qB,MAAM,CAAC8qB,QAAQ,CAAC5nB,IAAI,KAAK,KAAK,EAAE;UAChClD,MAAM,CAAC8qB,QAAQ,CAACsC,UAAU,CAACK,WAAW,GAAG,IAAI;UAC7CztB,MAAM,CAAC8qB,QAAQ,CAACsC,UAAU,CAACM,QAAQ,GAAG,KAAK;QAC/C,CAAC,MAAM,IAAI1tB,MAAM,CAAC8qB,QAAQ,CAAC5nB,IAAI,KAAK,QAAQ,EAAE;UAC1ClD,MAAM,CAAC8qB,QAAQ,CAACsC,UAAU,CAACC,cAAc,GAAG,IAAI;UAChDrtB,MAAM,CAAC8qB,QAAQ,CAACsC,UAAU,CAACE,WAAW,GAAG,KAAK;QAClD;MACJ;IACJ,CAAC,CAAC;EACN,CAAC;EAEDttB,MAAM,CAAC6vB,4BAA4B,GAAG,UAAUrT,GAAG,EAAE;IACjDxc,MAAM,CAACuvB,4BAA4B,CAACzkB,IAAI,CAAC,IAAI,CAAC;IAC9CtK,QAAQ,CAAC,YAAY;MACjB,IAAIgc,GAAG,KAAK,IAAI,EAAE;QACdxc,MAAM,CAAC8qB,QAAQ,CAAC/F,MAAM,GAAG,CAAC;QAC1B/kB,MAAM,CAAC8qB,QAAQ,CAACC,WAAW,GAAG/qB,MAAM,CAACwvB,eAAe;QACpD,IAAIxvB,MAAM,CAAC8qB,QAAQ,CAAC5nB,IAAI,KAAK,KAAK,EAAE;UAChClD,MAAM,CAAC8qB,QAAQ,CAACsC,UAAU,CAACK,WAAW,GAAG,KAAK;UAC9CztB,MAAM,CAAC8qB,QAAQ,CAACsC,UAAU,CAACM,QAAQ,GAAG,IAAI;QAC9C,CAAC,MAAM,IAAI1tB,MAAM,CAAC8qB,QAAQ,CAAC5nB,IAAI,KAAK,QAAQ,EAAE;UAC1ClD,MAAM,CAAC8qB,QAAQ,CAACsC,UAAU,CAACC,cAAc,GAAG,KAAK;UACjDrtB,MAAM,CAAC8qB,QAAQ,CAACsC,UAAU,CAACE,WAAW,GAAG,IAAI;QACjD;MACJ;IACJ,CAAC,CAAC;EACN,CAAC;EAEDttB,MAAM,CAAC8vB,gBAAgB,GAAG,YAAY;IAClC,IAAI9vB,MAAM,CAAC8qB,QAAQ,CAACsC,UAAU,CAACC,cAAc,KAAK,IAAI,EAAE;MACpDrtB,MAAM,CAAC8qB,QAAQ,CAACqC,aAAa,GAAG,UAAU;IAC9C;IACA,IAAIntB,MAAM,CAAC8qB,QAAQ,CAACsC,UAAU,CAACE,WAAW,KAAK,IAAI,EAAE;MACjDttB,MAAM,CAAC8qB,QAAQ,CAACqC,aAAa,GAAG,gBAAgB;IACpD;IACA,IAAIntB,MAAM,CAAC8qB,QAAQ,CAACsC,UAAU,CAACK,WAAW,KAAK,IAAI,EAAE;MACjDztB,MAAM,CAAC8qB,QAAQ,CAACqC,aAAa,GAAG,SAAS;IAC7C;IACA,IAAIntB,MAAM,CAAC8qB,QAAQ,CAACsC,UAAU,CAACM,QAAQ,KAAK,IAAI,EAAE;MAC9C1tB,MAAM,CAAC8qB,QAAQ,CAACqC,aAAa,GAAG,eAAe;IACnD;EACJ,CAAC;EAEDntB,MAAM,CAAC4uB,OAAO,GAAG1uB,aAAa,CAAC2uB,8BAA8B;EAE7D7uB,MAAM,CAAC+vB,UAAU,GAAG,UAAUlvB,UAAU,EAAE;IACtC,IAAI4mB,MAAM,GAAGuC,OAAO,CAAC,QAAQ,CAAC,CAAChqB,MAAM,CAAC4uB,OAAO,EAAE/tB,UAAU,CAAC;IAC1D,OAAO4mB,MAAM;EACjB,CAAC;EAEDznB,MAAM,CAACgwB,kBAAkB,GAAG,KAAK;EAEjChwB,MAAM,CAAC8rB,mBAAmB,GAAG,YAAY;IACrCjU,YAAY,CAACoY,aAAa,CAAC,CAAC,CAACjsB,IAAI,CAAC,UAAUksB,SAAS,EAAE;MACnDlwB,MAAM,CAACgwB,kBAAkB,GAAGE,SAAS;IACzC,CAAC,CAAC;EACN,CAAC;EAEDlwB,MAAM,CAACmwB,cAAc,GAAG,YAAY;IAChCrsB,CAAC,CAACC,OAAO,CAAC,CAAC;IACX8T,YAAY,CAACsY,cAAc,CAAC,CAAC,WACjB,CAAC,UAAU9mB,GAAG,EAAE;MACpBvF,CAAC,CAACO,SAAS,CAAC,CAAC;IACrB,CAAC,CAAC;EACN,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;AClWPvE,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,uBAAuB,EAAE,CACxD,IAAI,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAC,gBAAgB,EAAE,YAAY,EACpI,UAAUle,EAAE,EAAET,aAAa,EAAEkwB,qBAAqB,EAAEvb,eAAe,EAAEtU,SAAS,EAAE8vB,eAAe,EAAE5vB,cAAc,EAAEsU,UAAU,EAAE;EAGzH,IAAI,CAACkZ,eAAe,GAAG,UAAUzjB,EAAE,EAAE8lB,eAAe,EAAEC,UAAU,EAAEpC,QAAQ,EAAE1J,MAAM,EAAEmJ,MAAM,EAAE4C,aAAa,EAAE;IACvG,IAAIC,QAAQ,GAAGvwB,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,GAAGmb,qBAAqB,GAAGvb,eAAe;IAEvG,IAAI6b,MAAM,GAAG,CACT;MACIttB,EAAE,EAAEoH,EAAE;MACNmmB,eAAe,EAAEL,eAAe;MAChCM,UAAU,EAAEL,UAAU;MACtBM,aAAa,EAAEC,MAAM,CAACC,GAAG,CAAC,CAAC;MAC3BC,mBAAmB,EAAE7C,QAAQ;MAC7BhB,aAAa,EAAEqD,aAAa;MAC5BzL,MAAM,EAAEN,MAAM,GAAEA,MAAM,GAAG,CAAC;MAC1B6J,OAAO,EAAEV;IACb,CAAC,CACJ;IACD,IAAItiB,EAAE,GAAGpL,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,GAAGwb,QAAQ,CAACQ,gBAAgB,CAACP,MAAM,CAAC,GAAGD,QAAQ,CAACxC,eAAe,CAACzjB,EAAE,EAAE8lB,eAAe,EAAEC,UAAU,EAAEpC,QAAQ,EAAE1J,MAAM,EAAEmJ,MAAM,EAAE4C,aAAa,CAAC;IAChMllB,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACxB,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;MACrB,OAAOkC,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IACF,OAAOJ,EAAE;EACb,CAAC;EAED,IAAI,CAACqhB,gBAAgB,GAAG,UAAU2D,eAAe,EAAE;IAC/C,IAAIG,QAAQ,GAAGvwB,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,GAAGob,eAAe,GAAGxb,eAAe;IACjG,IAAIvJ,EAAE,GAAGmlB,QAAQ,CAAC9D,gBAAgB,CAAC2D,eAAe,CAAC,CAACtsB,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACpE,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;MACrB,OAAOkC,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IACF,OAAOJ,EAAE;EACb,CAAC;EAED,IAAI,CAACwjB,gBAAgB,GAAG,UAAUxgB,IAAI,EAAE;IACpC,QAAQA,IAAI;MACR,KAAK,SAAS;QACV,OAAO7N,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC;MAC9C,KAAK,eAAe;QAChB,OAAOf,cAAc,CAACe,SAAS,CAAC,eAAe,CAAC;MACpD,KAAK,UAAU;QACX,OAAOf,cAAc,CAACe,SAAS,CAAC,UAAU,CAAC;MAC/C,KAAK,eAAe;QAChB,OAAOf,cAAc,CAACe,SAAS,CAAC,eAAe,CAAC;MACpD,KAAK,gBAAgB;QACjB,OAAOf,cAAc,CAACe,SAAS,CAAC,gBAAgB,CAAC;IACzD;EACJ,CAAC;EAED,IAAI,CAACutB,gBAAgB,GAAG,UAAUzgB,IAAI,EAAE;IACpC,QAAQA,IAAI;MACR,KAAK,UAAU;MACf,KAAK,gBAAgB;QACjB,OAAO,GAAG;MAEd;QACI,OAAO,GAAG;IAClB;EACJ,CAAC;EAGD,IAAI,CAAC4iB,yBAAyB,GAAG,UAAUX,UAAU,EAAE;IACnD,OAAO1b,eAAe,CAACsc,sBAAsB,CAACZ,UAAU,CAAC,CAACvsB,IAAI,CAAC,UAAUE,IAAI,EAAE;MAC3E,IAAIkX,GAAG,GAAG,EAAE;MACZtX,CAAC,CAACmC,IAAI,CAAC/B,IAAI,EAAE,UAAUgC,GAAG,EAAEtG,EAAE,EAAE;QAC5B,IAAI8wB,MAAM,GAAG;UACTttB,EAAE,EAAExD,EAAE,CAACwD,EAAE;UACTutB,eAAe,EAAE/wB,EAAE,CAAC+wB,eAAe;UACnCC,UAAU,EAAEhxB,EAAE,CAACgxB,UAAU;UACzBC,aAAa,EAAEjxB,EAAE,CAACixB,aAAa;UAC/BG,mBAAmB,EAAEpxB,EAAE,CAACoxB,mBAAmB;UAC3C7D,aAAa,EAAEvtB,EAAE,CAACutB,aAAa;UAC/BpI,MAAM,EAAEnlB,EAAE,CAACmlB,MAAM,GAAGnlB,EAAE,CAACmlB,MAAM,GAAG,CAAC;UACjCuJ,OAAO,EAAE1uB,EAAE,CAAC0uB;QAChB,CAAC;QACDlT,GAAG,CAAC/U,IAAI,CAACqqB,MAAM,CAAC;MACpB,CAAC,CAAC;MAEF,IAAItV,GAAG,CAAChV,MAAM,GAAG,CAAC,EAAE;QAChB,OAAOgqB,qBAAqB,CAACa,gBAAgB,CAAC7V,GAAG,CAAC,CAC7CpX,IAAI,CAAC,UAAUC,IAAI,EAAE;UAClB,IAAImtB,QAAQ,GAAG,EAAE;UACjBttB,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAACC,IAAI,CAACmtB,OAAO,EAAE,UAAUnrB,GAAG,EAAEtG,EAAE,EAAE;YACzC,IAAI0xB,GAAG,GAAGzc,eAAe,CAAC0c,uBAAuB,CAAC3xB,EAAE,CAACwD,EAAE,CAAC;YACxDguB,QAAQ,CAAC/qB,IAAI,CAACirB,GAAG,CAAC;UACtB,CAAC,CAAC;UAEFxtB,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAACC,IAAI,CAACstB,MAAM,EAAE,UAAUtrB,GAAG,EAAEtG,EAAE,EAAE;YACxC,IAAIA,EAAE,CAAC6xB,KAAK,KAAK,IAAI,EAAE;cACnB,IAAIH,GAAG,GAAGzc,eAAe,CAAC0c,uBAAuB,CAAC3xB,EAAE,CAACwD,EAAE,CAAC;cACxDguB,QAAQ,CAAC/qB,IAAI,CAACirB,GAAG,CAAC;YACtB;UACJ,CAAC,CAAC;UAEF,OAAOI,OAAO,CAACC,GAAG,CAACP,QAAQ,CAAC;QAChC,CAAC,CAAC;MACV,CAAC,MACI;QACD,IAAI7lB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QACtB,OAAOF,QAAQ,CAACG,OAAO;MAC3B;IACJ,CAAC,CAAC;EACN,CAAC;EAED,IAAI4X,IAAI,GAAG,IAAI;EACf,IAAI,CAACsO,gCAAgC,GAAG,YAAW;IAC/C,OAAOtO,IAAI,CAAC4N,yBAAyB,CAAChxB,aAAa,CAAC8rB,cAAc,CAAC;EACvE,CAAC;EAED,IAAI,CAAC6F,WAAW,GAAG,YAAY;IAC3B,IAAI,EAAE3xB,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,CAAC,EAAE;MACnD/U,aAAa,CAAC4xB,mBAAmB,CAACxO,IAAI,CAACsO,gCAAgC,CAAC;IAC5E;EACJ,CAAC;AAEL,CAAC,CAAC,CAAC,C;;;;;;;;;;ACzHH9xB,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,0BAA0B,EAC3D,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EACzG,UAAUC,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAEI,QAAQ,EAAEkpB,YAAY,EAAErpB,YAAY,EAAEE,aAAa,EAAE;EAE9FL,MAAM,CAAC+xB,SAAS,GAAG,IAAI;EACvB/xB,MAAM,CAACgyB,SAAS,GAAG,IAAI;EACvBhyB,MAAM,CAACmuB,QAAQ,GAAG,IAAI;EACtBnuB,MAAM,CAACiyB,WAAW,GAAG,IAAI;EACzBjyB,MAAM,CAACkyB,MAAM,GAAG,IAAI;EACpBlyB,MAAM,CAACmyB,WAAW,GAAG,IAAI;EAEzBnyB,MAAM,CAACoyB,iBAAiB,GAAG;IACvBC,SAAS,EAAE,KAAK;IAChBC,SAAS,EAAE;EACf,CAAC;EAEDtyB,MAAM,CAACqC,GAAG,CAAC,qBAAqB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACrDlE,MAAM,CAACmuB,QAAQ,GAAGjqB,IAAI,CAACiqB,QAAQ;IAC/BnuB,MAAM,CAACiyB,WAAW,GAAG/tB,IAAI,CAAC+tB,WAAW;IACrCjyB,MAAM,CAACkyB,MAAM,GAAGhuB,IAAI,CAACguB,MAAM;IAC3BlyB,MAAM,CAACmyB,WAAW,GAAGjuB,IAAI,CAACquB,QAAQ;IAClCvyB,MAAM,CAACmF,UAAU,CAAC,CAAC;EACvB,CAAC,CAAC;EAEFnF,MAAM,CAACmF,UAAU,GAAG,YAAY;IAC5B9E,aAAa,CAAC8E,UAAU,CAAC7E,QAAQ,EAAE,YAAY;MAC3C,IAAG,CAACJ,aAAa,CAAC2L,QAAQ,EACtB/H,CAAC,CAAC,qBAAqB,CAAC,CAACsB,KAAK,CAAC,CAAC;IACxC,CAAC,CAAC;EACN,CAAC;EAEDpF,MAAM,CAACmL,aAAa,GAAG,KAAK;;EAE5B;EACAnL,MAAM,CAACwyB,OAAO,GAAG,YAAY;IAEzBxyB,MAAM,CAACoyB,iBAAiB,CAACE,SAAS,GAAG,KAAK;IAC1CtyB,MAAM,CAACoyB,iBAAiB,CAACC,SAAS,GAAG,KAAK;IAE1CryB,MAAM,CAACmL,aAAa,GAAG,CAAC,CAACnL,MAAM,CAACyyB,mBAAmB,CAAC1mB,QAAQ;IAC5D,IAAI/L,MAAM,CAACmL,aAAa,EACpB,OAAO,KAAK;IAEhBrH,CAAC,CAACC,OAAO,CAAC,CAAC;IACX1D,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;IAEnCkpB,YAAY,CAACkJ,cAAc,CAAC1yB,MAAM,CAACkyB,MAAM,EAAElyB,MAAM,CAACmyB,WAAW,EAAEnyB,MAAM,CAAC+xB,SAAS,CAAC,CAAC/tB,IAAI,CACrF,UAAUE,IAAI,EAAE;MACZ;MACAjE,UAAU,CAAC+K,UAAU,CAAC,cAAc,EAChC;QACIinB,WAAW,EAAEjyB,MAAM,CAACiyB,WAAW;QAC/B9D,QAAQ,EAAEnuB,MAAM,CAACmuB,QAAQ;QACzBoE,QAAQ,EAAEvyB,MAAM,CAAC+xB;MACrB,CAAC,CAAC;IACV,CAAC,EACG,UAAU5tB,GAAG,EAAE;MACX;MACAL,CAAC,CAACO,SAAS,CAAC,CAAC;;MAEb;MACAlE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,YAAY;QAAEnE,MAAM,CAACmF,UAAU,CAAC,CAAC;MAAE,CAAC,CAAC;IAErE,CAAC,CAAC;EACV,CAAC;EAEDnF,MAAM,CAAC2yB,oBAAoB,GAAG,YAAW;IACrC3yB,MAAM,CAACoyB,iBAAiB,CAACC,SAAS,GAAG,CAACryB,MAAM,CAACoyB,iBAAiB,CAACC,SAAS;IACxEryB,MAAM,CAACoyB,iBAAiB,CAACE,SAAS,GAAG,KAAK;EAC9C,CAAC;EAEDtyB,MAAM,CAAC4yB,oBAAoB,GAAG,YAAW;IACrC5yB,MAAM,CAACoyB,iBAAiB,CAACE,SAAS,GAAG,CAACtyB,MAAM,CAACoyB,iBAAiB,CAACE,SAAS;IACxEtyB,MAAM,CAACoyB,iBAAiB,CAACC,SAAS,GAAG,KAAK;EAC9C,CAAC;AAEL,CAAC,CAAC,CAAC,C;;;;;;;;;;AC5EHvyB,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,iCAAiC,EAClE,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,wBAAwB,EAAE,eAAe,EAC/F,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,SAAS,EAAE,iBAAiB,EAC3G,WAAW,EAAE,cAAc,EAAE,SAAS,EAC9C,UAAUC,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAEC,YAAY,EAAE0yB,sBAAsB,EAAExyB,aAAa,EAC5FC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,cAAc,EAAEqyB,oBAAoB,EAAE9I,OAAO,EAAE+I,eAAe,EAC7FlJ,SAAS,EAAEjS,YAAY,EAAEkS,OAAO,EAAE;EAElC9pB,MAAM,CAACgzB,WAAW,GAAG,CAAC,CAAC;EAEvBhzB,MAAM,CAACmC,IAAI,GAAG;IAAE,QAAQ,EAAE9C,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAG;EAAK,CAAC;EAE3DpC,MAAM,CAACqC,GAAG,CAAC,+BAA+B,EAAE,UAAUC,KAAK,EAAEC,MAAM,EAAE;IACjEvC,MAAM,CAACqB,QAAQ,GAAGkB,MAAM;EAC5B,CAAC,CAAC;EAEFvC,MAAM,CAACwC,aAAa,GAAGnC,aAAa,CAACmC,aAAa;EAClDxC,MAAM,CAACsY,UAAU,GAAGjY,aAAa,CAAC4yB,wBAAwB,CAAC,CAAC;EAC5DjzB,MAAM,CAACkrB,eAAe,GAAGpB,OAAO,CAACqB,cAAc,CAACC,YAAY;EAE5DprB,MAAM,CAACkzB,WAAW,GAAG,UAAUC,OAAO,EAAE;IACpC,IAAIA,OAAO,EAAE;MACT,IAAIC,MAAM,GAAG,iBAAiB;MAC9B,IAAIC,IAAI,GAAG,SAAS,GAAGnzB,aAAa,CAACozB,OAAO,GAAG,UAAU,GAAGpzB,aAAa,CAACqzB,OAAO;MACjF,OAAOrzB,aAAa,CAACszB,YAAY,GAAG,MAAM,GAAGL,OAAO,GAAGE,IAAI;IAE/D;IACA,OAAO,IAAI;EACf,CAAC;EAEDrzB,MAAM,CAACqC,GAAG,CAAC,4BAA4B,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAC5DJ,CAAC,CAACC,OAAO,CAAC,CAAC;IACX8uB,sBAAsB,CAACY,uBAAuB,CAACvvB,IAAI,CAACwvB,MAAM,EAAExvB,IAAI,CAACyvB,cAAc,CAAC,CAAC3vB,IAAI,CAAC,UAASC,IAAI,EAAC;MAChGjE,MAAM,CAACgzB,WAAW,GAAG/uB,IAAI;MACzBjE,MAAM,CAACgzB,WAAW,CAACY,WAAW,GAAG,EAAE;MACnC5zB,MAAM,CAACgzB,WAAW,CAACW,cAAc,GAAGzvB,IAAI,CAACyvB,cAAc;MAEvD3zB,MAAM,CAACgzB,WAAW,CAACa,mBAAmB,GAAG7zB,MAAM,CAACuqB,eAAe,CAACvqB,MAAM,CAACgzB,WAAW,CAACc,WAAW,EAAE9zB,MAAM,CAACsY,UAAU,CAAC;MAClHtY,MAAM,CAACgzB,WAAW,CAACe,eAAe,GAAG/zB,MAAM,CAACuqB,eAAe,CAACvqB,MAAM,CAACgzB,WAAW,CAACgB,OAAO,EAAEh0B,MAAM,CAACsY,UAAU,CAAC;MAE1GjY,aAAa,CAAC8E,UAAU,CAAC7E,QAAQ,EAAE,YAAW,CAAE,CAAC,CAAC;MAElDwD,CAAC,CAACO,SAAS,CAAC,CAAC;IAEjB,CAAC,EAAC,YAAU;MACRP,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb,IAAIglB,KAAK,GAAG5oB,cAAc,CAACe,SAAS,CAAC,iEAAiE,CAAC;MAEvGrB,YAAY,CAACiE,SAAS,CAACilB,KAAK,CAAC;IACjC,CAAC,CAAC;EACN,CAAC,CAAC;EAEFrpB,MAAM,CAAC6H,kBAAkB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;EAG9C7H,MAAM,CAACiM,YAAY,GAAG,YAAY;IAC9B5L,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;EACvC,CAAC;EAEDN,MAAM,CAACi0B,gBAAgB,GAAG,UAASnqB,IAAI,EAAC;IACpC,IAAGA,IAAI,CAACmS,SAAS,GAAGnS,IAAI,CAACoqB,QAAQ,EAAC;MAC9B,OAAO;QAAC,kBAAkB,EAAC;MAAkB,CAAC;IAClD;EACJ,CAAC;EAEDl0B,MAAM,CAACm0B,YAAY,GAAG,UAASrqB,IAAI,EAAEsqB,WAAW,EAAEC,SAAS,EAAEC,WAAW,EAAEC,sBAAsB,EAAC;IAC7F,IAAGzqB,IAAI,CAACmS,SAAS,IAAI,CAAC,EAClB;IAEJ,IAAGnS,IAAI,CAAC0qB,aAAa,KAAK,MAAM,IAAI1qB,IAAI,CAAC2qB,cAAc,KAAK,IAAI,EAAC;MAC7D,IAAIC,YAAY,GAAG,KAAK;MACxB,IAAIC,IAAI,GAAG,KAAK;MAEhB7wB,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAACgzB,WAAW,CAACY,WAAW,EAAE,UAAS1tB,GAAG,EAAEtG,EAAE,EAAC;QACpD,IAAGA,EAAE,CAACyc,SAAS,KAAKvS,IAAI,CAACuS,SAAS,IAAIzc,EAAE,CAACke,OAAO,KAAKsW,WAAW,EAAC;UAE7D,IAAGx0B,EAAE,CAAC40B,aAAa,KAAK,MAAM,IAAI50B,EAAE,CAAC40B,aAAa,KAAK,IAAI,IAAI50B,EAAE,CAAC40B,aAAa,KAAK,MAAM,EAAC;YACvFx0B,MAAM,CAAC40B,oBAAoB,CAAC,IAAI,CAAC;YACjCz0B,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,iEAAiE,CAAC,CAAC;YACnHmzB,IAAI,GAAG,IAAI;YACX;UACJ;UAEA,IAAG7qB,IAAI,CAAC2qB,cAAc,KAAK,IAAI,IAAIL,WAAW,IAAIA,WAAW,CAAChuB,MAAM,GAAE,CAAC,IAAI0D,IAAI,CAAC0qB,aAAa,KAAK,MAAM,EAAC;YACrG,IAAG50B,EAAE,CAACqc,SAAS,KAAK,CAAC,IAAKqY,WAAW,IAAK10B,EAAE,CAACqc,SAAS,GAAGrc,EAAE,CAACs0B,QAAQ,GAAGI,WAAW,GAAG,CAAE,EAAC;cACpFn0B,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,0CAA0C,CAAC,CAAC;cAC5FmzB,IAAI,GAAG,IAAI;cACX;YACJ,CAAC,MAAI;cACD/0B,EAAE,CAACqc,SAAS,IAAG,CAAC;YACpB;UACJ;UAEA,IAAGqY,WAAW,EAAC;YAEX,IAAGxqB,IAAI,CAACoqB,QAAQ,GAAGI,WAAW,GAAG10B,EAAE,CAACs0B,QAAQ,GAAG,CAAC,EAAC;cAC7C/zB,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,uCAAuC,CAAC,CAAC;cACzFmzB,IAAI,GAAG,IAAI;cACX;YACJ;YAEA7qB,IAAI,CAACoqB,QAAQ,IAAII,WAAW,GAAG10B,EAAE,CAACs0B,QAAQ;YAC1CpqB,IAAI,CAACmS,SAAS,IAAIqY,WAAW,GAAG10B,EAAE,CAACs0B,QAAQ;YAC3Ct0B,EAAE,CAACs0B,QAAQ,IAAII,WAAW,GAAG10B,EAAE,CAACs0B,QAAQ;UAC5C,CAAC,MAAI;YACDt0B,EAAE,CAACs0B,QAAQ,IAAI,CAAC;YAChBpqB,IAAI,CAACoqB,QAAQ,IAAI,CAAC;YAClBpqB,IAAI,CAACmS,SAAS,IAAI,CAAC;UACvB;UAEAyY,YAAY,GAAG,IAAI;UACnB;QACJ;MACJ,CAAC,CAAC;MAIF,IAAGC,IAAI,EAAC;QACJ,IAAG7qB,IAAI,CAAC2qB,cAAc,EAClB3qB,IAAI,CAAC2qB,cAAc,GAAG,KAAK;QAC/B;MACJ;MAGA,IAAG,CAACC,YAAY,EAAC;QACb,IAAIG,QAAQ,GAAG,CAAC,CAAC;QACjB/0B,OAAO,CAAC+F,IAAI,CAACiE,IAAI,EAAE+qB,QAAQ,CAAC;QAE5B,IAAGP,WAAW,EAAC;UACXxqB,IAAI,CAACoqB,QAAQ,IAAGI,WAAW;UAC3BxqB,IAAI,CAACmS,SAAS,IAAIqY,WAAW;UAC7BO,QAAQ,CAACX,QAAQ,GAAGI,WAAW;QACnC,CAAC,MAAI;UACDxqB,IAAI,CAACoqB,QAAQ,IAAG,CAAC;UACjBpqB,IAAI,CAACmS,SAAS,IAAI,CAAC;UACnB4Y,QAAQ,CAACX,QAAQ,GAAG,CAAC;QACzB;QAIA,IAAGpqB,IAAI,CAAC2qB,cAAc,KAAK,IAAI,IAAIL,WAAW,IAAIA,WAAW,CAAChuB,MAAM,GAAE,CAAC,IAAI0D,IAAI,CAAC0qB,aAAa,KAAK,MAAM,EAAC;UACrG,IAAG,CAACH,SAAS,EACTA,SAAS,GAAGQ,QAAQ,CAAC5Y,SAAS;UAElC,IAAGqY,WAAW,EAAC;YACXO,QAAQ,CAAC5Y,SAAS,GAAGoY,SAAS,GAAGC,WAAW;UAChD,CAAC,MAAI;YACDO,QAAQ,CAAC5Y,SAAS,GAAGoY,SAAS,GAAG,CAAC;UACtC;UAEAQ,QAAQ,CAAC/W,OAAO,GAAGsW,WAAW;UAC9BS,QAAQ,CAACC,sBAAsB,GAAGP,sBAAsB;QAC5D;QAEAv0B,MAAM,CAACgzB,WAAW,CAACY,WAAW,CAACvtB,IAAI,CAACwuB,QAAQ,CAAC;MACjD;MAEA,IAAG/qB,IAAI,CAAC2qB,cAAc,EAClB3qB,IAAI,CAAC2qB,cAAc,GAAG,KAAK;MAI/B,IAAG3qB,IAAI,CAACoqB,QAAQ,KAAK,CAAC,EAAC;QACnB,IAAI3tB,KAAK,GAAGvG,MAAM,CAACgzB,WAAW,CAAC+B,SAAS,CAAC1lB,OAAO,CAACvF,IAAI,CAAC;QACtD9J,MAAM,CAACgzB,WAAW,CAAC+B,SAAS,CAACzlB,MAAM,CAAC/I,KAAK,EAAE,CAAC,CAAC;MACjD;IACJ,CAAC,MAAI;MAEDuD,IAAI,CAAC2qB,cAAc,GAAG,IAAI;MAC1Bz0B,MAAM,CAACg1B,mBAAmB,CAAClrB,IAAI,CAAC;IACpC;EACJ,CAAC;EAED9J,MAAM,CAACi1B,oBAAoB,GAAG,UAASnrB,IAAI,EAAEwqB,WAAW,EAAC;IACrD,IAAII,YAAY,GAAG,KAAK;IAGxB5wB,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAACgzB,WAAW,CAAC+B,SAAS,EAAE,UAAS7uB,GAAG,EAAEtG,EAAE,EAAC;MAClD,IAAGA,EAAE,CAACyc,SAAS,KAAKvS,IAAI,CAACuS,SAAS,EAAC;QAC/B,IAAGiY,WAAW,EAAC;UACX10B,EAAE,CAACs0B,QAAQ,IAAIpqB,IAAI,CAACoqB,QAAQ,GAAGI,WAAW;UAC1C10B,EAAE,CAACqc,SAAS,IAAInS,IAAI,CAACoqB,QAAQ,GAAGI,WAAW;UAE3CxqB,IAAI,CAACmS,SAAS,IAAInS,IAAI,CAACoqB,QAAQ,GAAGI,WAAW;UAC7CxqB,IAAI,CAACoqB,QAAQ,GAAGI,WAAW;QAC/B,CAAC,MACG;UACA10B,EAAE,CAACs0B,QAAQ,IAAIpqB,IAAI,CAACoqB,QAAQ;UAC5Bt0B,EAAE,CAACqc,SAAS,IAAInS,IAAI,CAACoqB,QAAQ;UAC7BpqB,IAAI,CAACoqB,QAAQ,GAAG,CAAC;QACrB;QAEAQ,YAAY,GAAG,IAAI;QACnB;MACJ;IACJ,CAAC,CAAC;IAEF,IAAG,CAACA,YAAY,EAAC;MACb,IAAIG,QAAQ,GAAG,CAAC,CAAC;MACjB/0B,OAAO,CAAC+F,IAAI,CAACiE,IAAI,EAAE+qB,QAAQ,CAAC;MAE5B,IAAGP,WAAW,EAAC;QACXO,QAAQ,CAACX,QAAQ,GAAGpqB,IAAI,CAACoqB,QAAQ,GAAGI,WAAW;QAC/CO,QAAQ,CAAC5Y,SAAS,GAAGnS,IAAI,CAACmS,SAAS,GAAGqY,WAAW;QAEjDxqB,IAAI,CAACmS,SAAS,IAAInS,IAAI,CAACoqB,QAAQ,GAAGI,WAAW;QAC7CxqB,IAAI,CAACoqB,QAAQ,GAAGI,WAAW;MAC/B,CAAC,MAAI;QACDxqB,IAAI,CAACoqB,QAAQ,GAAG,CAAC;QACjBW,QAAQ,CAAC5Y,SAAS,GAAG4Y,QAAQ,CAACK,aAAa;MAC/C;MAGA,IAAGL,QAAQ,CAACJ,cAAc,EACtBI,QAAQ,CAACJ,cAAc,GAAG,KAAK;MAEnCz0B,MAAM,CAACgzB,WAAW,CAAC+B,SAAS,CAAC1uB,IAAI,CAACwuB,QAAQ,CAAC;IAC/C;IAEA,IAAG/qB,IAAI,CAACoqB,QAAQ,KAAK,CAAC,EAAC;MACnB,IAAI3tB,KAAK,GAAGvG,MAAM,CAACgzB,WAAW,CAACY,WAAW,CAACvkB,OAAO,CAACvF,IAAI,CAAC;MACxD9J,MAAM,CAACgzB,WAAW,CAACY,WAAW,CAACtkB,MAAM,CAAC/I,KAAK,EAAE,CAAC,CAAC;IACnD;EAEJ,CAAC;;EAKD;;EAEAvG,MAAM,CAACg1B,mBAAmB,GAAG,UAAUlrB,IAAI,EAAE;IACzC9J,MAAM,CAACm1B,WAAW,GAAG;MAAC5f,KAAK,EAAE;IAAE,CAAC;IAChCvV,MAAM,CAACo1B,qBAAqB,GAAGtrB,IAAI;IACnC,IAAI+jB,cAAc,GAAG/pB,CAAC,CAAC,yBAAyB,CAAC;IACjDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,EAAE,YAAU;MAC/C,IAAG,CAAC3tB,aAAa,CAAC2L,QAAQ,EACtB/H,CAAC,CAAC,iBAAiB,CAAC,CAACsB,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC;EACN,CAAC;EAEDpF,MAAM,CAAC40B,oBAAoB,GAAG,UAASS,aAAa,EAAC;IACjD,IAAIxH,cAAc,GAAG/pB,CAAC,CAAC,yBAAyB,CAAC;IACjDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;IAEzC,IAAGwH,aAAa,EAAC;MACbr1B,MAAM,CAACo1B,qBAAqB,CAACX,cAAc,GAAG,KAAK;MACnDz0B,MAAM,CAACm1B,WAAW,GAAG;QAAC5f,KAAK,EAAE;MAAE,CAAC;IACpC;EACJ,CAAC;EAGDvV,MAAM,CAACs1B,8BAA8B,GAAG,YAAU;IAC9C,IAAIzH,cAAc,GAAG/pB,CAAC,CAAC,oCAAoC,CAAC;IAC5DzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAED7tB,MAAM,CAACu1B,+BAA+B,GAAG,YAAU;IAC/C,IAAI1H,cAAc,GAAG/pB,CAAC,CAAC,oCAAoC,CAAC;IAC5DzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;IACzC7tB,MAAM,CAACiM,YAAY,CAAC,CAAC;EACzB,CAAC;EAIDjM,MAAM,CAACw1B,eAAe,GAAG,YAAU;IAC/B1xB,CAAC,CAACC,OAAO,CAAC,CAAC;IACXgvB,eAAe,CAAC0C,wBAAwB,CAACz1B,MAAM,CAACo1B,qBAAqB,CAAC/Y,SAAS,EAAEnc,aAAa,CAACiN,YAAY,EAAGnN,MAAM,CAACm1B,WAAW,CAAC5f,KAAK,CAAC,CAClIvR,IAAI,CAAC,UAASC,IAAI,EAAC;MAChB,IAAGA,IAAI,CAACyxB,KAAK,EAAC;QAEV,IAAInB,sBAAsB,GAAG,EAAE;QAC/BzwB,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAACC,IAAI,EAAC,UAASyxB,GAAG,EAACC,OAAO,EAAC;UAClCrB,sBAAsB,CAACluB,IAAI,CAAC;YAAC4V,SAAS,EAAE2Z,OAAO,CAAC1B,QAAQ;YAAEtW,UAAU,EAAEgY,OAAO,CAAChY;UAAU,CAAC,CAAC;QAC9F,CAAC,CAAC;;QAEtB;QACoB5d,MAAM,CAACm0B,YAAY,CAACn0B,MAAM,CAACo1B,qBAAqB,EAAEp1B,MAAM,CAACm1B,WAAW,CAAC5f,KAAK,EAAE,IAAI,EAAE,IAAI,EAAEgf,sBAAsB,CAAC;QAE/Gv0B,MAAM,CAAC40B,oBAAoB,CAAC,CAAC;MACjC,CAAC,MAAI;QACD,IAAIha,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,gCAAgC,CAAC;QACpEvB,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;UACnC6P,OAAO,EAAED,GAAG;UACZtM,IAAI,EAAE;QACV,CAAC,CAAC;QACFsJ,YAAY,CAACkD,OAAO,CAAC,CAAC;MAC1B;MACAhX,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,EAAE,YAAU;MACTP,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAIuW,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,gCAAgC,CAAC;MACpEvB,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;QACnC6P,OAAO,EAAED,GAAG;QACZtM,IAAI,EAAE;MACV,CAAC,CAAC;MACFsJ,YAAY,CAACkD,OAAO,CAAC,CAAC;IAC1B,CAAC,CAAC;EAEV,CAAC;;EAED;;EAGA;;EAEA9a,MAAM,CAAC2Y,eAAe,GAAG,IAAI,CAAC,CAAC;;EAE/B3Y,MAAM,CAAC0b,mBAAmB,GAAG,UAAU5R,IAAI,EAAElK,EAAE,EAAE;IAC7C,IAAIkK,IAAI,CAAC0qB,aAAa,KAAK,MAAM,IAAI1qB,IAAI,CAAC0qB,aAAa,KAAK,IAAI,IAAI1qB,IAAI,CAAC0qB,aAAa,KAAK,MAAM,EAAE;MAC/Fx0B,MAAM,CAAC61B,UAAU,GAAG,CAAC,CAAC;MACtB/1B,OAAO,CAAC+F,IAAI,CAACiE,IAAI,EAAE9J,MAAM,CAAC61B,UAAU,CAAC;MAErCr1B,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAAC2Y,eAAe,CAAC9C,IAAI,CAACjW,EAAE,CAAC;MACnC,CAAC,CAAC;IAEN;EAEJ,CAAC;;EAED;EACAI,MAAM,CAACuc,WAAW,GAAG,UAAUC,GAAG,EAAEla,KAAK,EAAE;IAEvC9B,QAAQ,CAAC,YAAY;MAAER,MAAM,CAAC2Y,eAAe,CAAC7N,IAAI,CAAC,IAAI,CAAC;IAAE,CAAC,CAAC;IAE5D,IAAI0R,GAAG,KAAK,IAAI,EAAE;MACdhc,QAAQ,CAAC,YAAY;QACjBsD,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAACgzB,WAAW,CAACY,WAAW,EAAE,UAAU1tB,GAAG,EAAEtG,EAAE,EAAE;UACtD,IAAIA,EAAE,CAACyc,SAAS,KAAKrc,MAAM,CAAC61B,UAAU,CAACxZ,SAAS,IAAIzc,EAAE,CAACke,OAAO,IAAI9d,MAAM,CAAC61B,UAAU,CAAC/X,OAAO,EAAE;YACzF,IAAI9d,MAAM,CAAC61B,UAAU,CAAC3B,QAAQ,GAAG,CAAC,EAAE;cAChCl0B,MAAM,CAAC81B,wBAAwB,CAACl2B,EAAE,EAAEI,MAAM,CAAC61B,UAAU,CAAC3B,QAAQ,CAAC;YACnE,CAAC,MACG;cACAl0B,MAAM,CAACi1B,oBAAoB,CAACr1B,EAAE,CAAC;YACnC;YACA,OAAO,KAAK;UAChB;QACJ,CAAC,CAAC;MACN,CAAC,CAAC;IACN,CAAC,MACI,IAAI,OAAQ4c,GAAI,IAAI,QAAQ,EAAE;MAC/B,IAAIA,GAAG,KAAK,OAAO,EAAE;QACjBxc,MAAM,CAACi1B,oBAAoB,CAACr1B,EAAE,CAAC;MACnC;IACJ;IAEA0C,KAAK,CAACyzB,eAAe,CAAC,CAAC;IACvBzzB,KAAK,CAAC0zB,cAAc,CAAC,CAAC;EAC1B,CAAC;EAEDh2B,MAAM,CAAC81B,wBAAwB,GAAG,UAASD,UAAU,EAAEvB,WAAW,EAAC;IAC/D,IAAIxqB,IAAI,GAAG,IAAI;IAEfmsB,gBAAgB,GAAGjS,QAAQ,CAACsQ,WAAW,CAAC;IAExCxwB,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAACgzB,WAAW,CAAC+B,SAAS,EAAE,UAAU7uB,GAAG,EAAEtG,EAAE,EAAE;MACpD,IAAGA,EAAE,CAACyc,SAAS,IAAIwZ,UAAU,CAACxZ,SAAS,EAAC;QACpCvS,IAAI,GAAGlK,EAAE;QACT;MACJ;IACJ,CAAC,CAAC;IAEF,IAAGkK,IAAI,EAAC;MACJ,IAAGmsB,gBAAgB,GAAGJ,UAAU,CAAC3B,QAAQ,EAAC;QACtCpqB,IAAI,CAAC2qB,cAAc,GAAG,IAAI;QAC1Bz0B,MAAM,CAACm0B,YAAY,CAACrqB,IAAI,EAAE+rB,UAAU,CAAC/X,OAAO,EAAE+X,UAAU,CAAC5Z,SAAS,EAAEga,gBAAgB,CAAC;MACzF,CAAC,MAEGj2B,MAAM,CAACi1B,oBAAoB,CAACY,UAAU,EAAEI,gBAAgB,CAAC;IACjE,CAAC,MAAK,IAAGA,gBAAgB,GAAGJ,UAAU,CAAC3B,QAAQ,EAC3Cl0B,MAAM,CAACi1B,oBAAoB,CAACY,UAAU,EAAEI,gBAAgB,CAAC;EACjE,CAAC;;EAGD;;EAEA;;EAEAj2B,MAAM,CAACqC,GAAG,CAAC,cAAc,EAAE,UAAUC,KAAK,EAAEoY,OAAO,EAAE;IACjD,IAAG5W,CAAC,CAAC,+BAA+B,CAAC,CAACsC,MAAM,IAAI,CAAC,EAC7C;IAEJ,IAAI8vB,wBAAwB,GAAGpyB,CAAC,CAAC,iCAAiC,CAAC,CAACsC,MAAM,GAAG,CAAC;IAE9E,IAAG8vB,wBAAwB,EAAC;MACxBl2B,MAAM,CAACm1B,WAAW,GAAG;QAAC5f,KAAK,EAAEmF;MAAO,CAAC;MACrC1a,MAAM,CAACw1B,eAAe,CAAC,CAAC;IAC5B,CAAC,MACG;MACA,IAAIE,KAAK,GAAG,KAAK;MACjB5xB,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAACgzB,WAAW,CAAC+B,SAAS,EAAE,UAAS7uB,GAAG,EAAEtG,EAAE,EAAC;QAClD,IAAGA,EAAE,CAAC4a,OAAO,IAAI5a,EAAE,CAAC4a,OAAO,CAACjD,WAAW,CAAC,CAAC,KAAKmD,OAAO,CAACnD,WAAW,CAAC,CAAC,EAAC;UAChEvX,MAAM,CAACm0B,YAAY,CAACv0B,EAAE,CAAC;UACvB81B,KAAK,GAAG,IAAI;UACZ;QACJ;MACJ,CAAC,CAAC;MACF,IAAG,CAACA,KAAK,EACL5xB,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAACgzB,WAAW,CAAC+B,SAAS,EAAE,UAAS7uB,GAAG,EAAEtG,EAAE,EAAC;QAClD,IAAGA,EAAE,CAAC6jB,GAAG,CAAClM,WAAW,CAAC,CAAC,KAAKmD,OAAO,CAACnD,WAAW,CAAC,CAAC,EAAC;UAC9CvX,MAAM,CAACm0B,YAAY,CAACv0B,EAAE,CAAC;UACvB81B,KAAK,GAAG,IAAI;UACZ;QACJ;MACJ,CAAC,CAAC;MAEF,IAAG,CAACA,KAAK,EAAC;QACN,IAAI9a,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,oCAAoC,CAAC;QACxEvB,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;UACnC6P,OAAO,EAAED,GAAG;UACZtM,IAAI,EAAE;QACV,CAAC,CAAC;QACFsJ,YAAY,CAACkD,OAAO,CAAC,CAAC;MAC1B;IACR;EACJ,CAAC,CAAC;;EAEF;;EAGA;;EAGA9a,MAAM,CAACm2B,QAAQ,GAAG,YAAU;IACxBryB,CAAC,CAACC,OAAO,CAAC,CAAC;IACX8uB,sBAAsB,CAACsD,QAAQ,CAACn2B,MAAM,CAACgzB,WAAW,CAACoD,MAAM,EAAEp2B,MAAM,CAACgzB,WAAW,CAACW,cAAc,CAAC,CAC5F3vB,IAAI,CAAC,UAASC,IAAI,EAAC;MAEhB,IAAIoyB,aAAa,GAAG,EAAE;MACtBv2B,OAAO,CAAC+F,IAAI,CAAC7F,MAAM,CAACgzB,WAAW,CAACY,WAAW,EAAEyC,aAAa,CAAC;MAE3DvyB,CAAC,CAACmC,IAAI,CAACowB,aAAa,EAAE,UAASnwB,GAAG,EAAEtG,EAAE,EAAC;QACnCI,MAAM,CAACi1B,oBAAoB,CAACr1B,EAAE,CAAC;MACnC,CAAC,CAAC;MAEF,IAAI02B,iBAAiB,GAAG,EAAE;MAC1BxyB,CAAC,CAACmC,IAAI,CAAChC,IAAI,EAAE,UAASiC,GAAG,EAAEtG,EAAE,EAAC;QAC1B,IAAG,CAAC02B,iBAAiB,CAAC12B,EAAE,CAACyc,SAAS,CAAC,EAAC;UAChCia,iBAAiB,CAAC12B,EAAE,CAACyc,SAAS,CAAC,GAAG,IAAI;UAEtC,IAAIvS,IAAI,GAAG9J,MAAM,CAACgzB,WAAW,CAAC+B,SAAS,CAAChvB,MAAM,CAAC,UAAS8uB,QAAQ,EAAC;YAAC,OAAOA,QAAQ,CAACxY,SAAS,KAAKzc,EAAE,CAACyc,SAAS;UAAA,CAAC,CAAC,CAAC,CAAC,CAAC;UAEjH,IAAIka,YAAY,GAAG,EAAE;UAErBzyB,CAAC,CAACmC,IAAI,CAAChC,IAAI,EAAE,UAASuG,EAAE,EAAEgsB,SAAS,EAAC;YAChC,IAAGA,SAAS,CAACna,SAAS,KAAKzc,EAAE,CAACyc,SAAS,EAAC;cACpC,IAAIqZ,KAAK,GAAG,KAAK;cACjB5xB,CAAC,CAACmC,IAAI,CAACswB,YAAY,EAAE,UAAS/hB,CAAC,EAAC8F,CAAC,EAAC;gBAC9B,IAAGA,CAAC,CAACwD,OAAO,KAAK0Y,SAAS,CAAC1Y,OAAO,EAAC;kBAC/BxD,CAAC,CAAC2B,SAAS,IAAIua,SAAS,CAACtC,QAAQ;kBACjC5Z,CAAC,CAACia,sBAAsB,CAACluB,IAAI,CAAC;oBAAC4V,SAAS,EAAEua,SAAS,CAACtC,QAAQ;oBAAEtW,UAAU,EAAE4Y,SAAS,CAAC5Y;kBAAU,CAAC,CAAC;kBAChG8X,KAAK,GAAG,IAAI;kBACZ;gBACJ;cACJ,CAAC,CAAC;cAEF,IAAG,CAACA,KAAK,EAAC;gBACN,IAAIe,KAAK,GAAG;kBAAC3Y,OAAO,EAAE0Y,SAAS,CAAC1Y,OAAO;kBAAE7B,SAAS,EAAEua,SAAS,CAACtC,QAAQ;kBAChEK,sBAAsB,EAAE,CAAC;oBAACtY,SAAS,EAAEua,SAAS,CAACtC,QAAQ;oBAAEtW,UAAU,EAAE4Y,SAAS,CAAC5Y;kBAAU,CAAC;gBAAC,CAAC;gBAClG2Y,YAAY,CAAClwB,IAAI,CAACowB,KAAK,CAAC;cAC5B;YACJ;UACJ,CAAC,CAAC;UAEF3yB,CAAC,CAACmC,IAAI,CAACswB,YAAY,EAAE,UAAS/hB,CAAC,EAAE8F,CAAC,EAAC;YAC/BxQ,IAAI,CAAC2qB,cAAc,GAAG,IAAI;YAClD;YACwBz0B,MAAM,CAACm0B,YAAY,CAACrqB,IAAI,EAAEwQ,CAAC,CAACwD,OAAO,EAAE,IAAI,EAAExD,CAAC,CAAC2B,SAAS,EAAE3B,CAAC,CAACia,sBAAsB,CAAC;UACrF,CAAC,CAAC;QAEN;MACJ,CAAC,CAAC;MAEFzwB,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,EAAE,YAAU;MACTP,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb,IAAIglB,KAAK,GAAG5oB,cAAc,CAACe,SAAS,CAAC,gFAAgF,CAAC;MAEtHrB,YAAY,CAACiE,SAAS,CAACilB,KAAK,CAAC;IACjC,CAAC,CAAC;EACN,CAAC;;EAED;;EAGA;EACArpB,MAAM,CAAC02B,mBAAmB,GAAG,YAAU;IAEnC,IAAG12B,MAAM,CAACgzB,WAAW,CAACY,WAAW,CAACxtB,MAAM,KAAK,CAAC,EAAC;MAC3C,IAAIijB,KAAK,GAAG5oB,cAAc,CAACe,SAAS,CAAC,yDAAyD,CAAC;MAC/FrB,YAAY,CAACiE,SAAS,CAACilB,KAAK,CAAC;IAGjC,CAAC,MACG;MACAvlB,CAAC,CAACC,OAAO,CAAC,CAAC;MAEX,IAAI4yB,OAAO,GAAG;QAACC,MAAM,EAAE52B,MAAM,CAACgzB,WAAW,CAAC4D,MAAM;QAAEC,KAAK,EAAE,EAAE;QAAEC,QAAQ,EAAE,OAAO,GAAG52B,aAAa,CAACiuB;MAAQ,CAAC;MAExG,IAAI4I,WAAW,GAAG,EAAE;MAEpBj3B,OAAO,CAAC+F,IAAI,CAAC7F,MAAM,CAACgzB,WAAW,CAACY,WAAW,EAAEmD,WAAW,CAAC;MAEzDjzB,CAAC,CAACmC,IAAI,CAAC8wB,WAAW,EAAE,UAASC,GAAG,EAAEC,KAAK,EAAC;QAEpC,IAAGA,KAAK,CAACnC,sBAAsB,IAAImC,KAAK,CAACnC,sBAAsB,CAAC1uB,MAAM,GAAG,CAAC,EAAC;UAEvEtC,CAAC,CAACmC,IAAI,CAACgxB,KAAK,CAACnC,sBAAsB,EAAE,UAASoC,GAAG,EAAEC,GAAG,EAAC;YAEnD,IAAGF,KAAK,CAAC/C,QAAQ,IAAI,CAAC,EAClB;YAEJ,IAAIkD,QAAQ,GAAGH,KAAK,CAAC/C,QAAQ,GAAGiD,GAAG,CAAClb,SAAS,GAAEkb,GAAG,CAAClb,SAAS,GAAGgb,KAAK,CAAC/C,QAAQ;YAE7E+C,KAAK,CAAC/C,QAAQ,IAAIiD,GAAG,CAAClb,SAAS;YAE/B,IAAI4Y,QAAQ,GAAG;cACXxY,SAAS,EAAE4a,KAAK,CAAC5a,SAAS;cAC1BoH,GAAG,EAAEwT,KAAK,CAACxT,GAAG;cACd/gB,IAAI,EAAEu0B,KAAK,CAACv0B,IAAI;cAChBgb,UAAU,EAAExd,aAAa,CAACiN,YAAY;cACtC+mB,QAAQ,EAAEkD,QAAQ;cAClBtZ,OAAO,EAAEmZ,KAAK,CAACnZ,OAAO;cACtBF,UAAU,EAAEuZ,GAAG,CAACvZ;YACpB,CAAC;YAED+Y,OAAO,CAACE,KAAK,CAACxwB,IAAI,CAACwuB,QAAQ,CAAC;UAEhC,CAAC,CAAC;QAEN,CAAC,MAAI;UACD,IAAIA,QAAQ,GAAG;YACXxY,SAAS,EAAE4a,KAAK,CAAC5a,SAAS;YAC1BoH,GAAG,EAAEwT,KAAK,CAACxT,GAAG;YACd/gB,IAAI,EAAEu0B,KAAK,CAACv0B,IAAI;YAChBgb,UAAU,EAAExd,aAAa,CAACiN,YAAY;YACtC+mB,QAAQ,EAAE+C,KAAK,CAAC/C,QAAQ;YACxBpW,OAAO,EAAEmZ,KAAK,CAACnZ;UACnB,CAAC;UAED,IAAGmZ,KAAK,CAACzC,aAAa,KAAK,MAAM,EAC7BK,QAAQ,CAAC/W,OAAO,GAAG,IAAI;UAE3B6Y,OAAO,CAACE,KAAK,CAACxwB,IAAI,CAACwuB,QAAQ,CAAC;QAChC;MAEJ,CAAC,CAAC;MAEFhC,sBAAsB,CAACwE,sBAAsB,CAACV,OAAO,CAAC,CACrD3yB,IAAI,CAAC,UAASC,IAAI,EAAC;QAEhB,IAAGA,IAAI,CAACotB,OAAO,IAAI,CAACrxB,MAAM,CAACgzB,WAAW,CAACW,cAAc,EAAC;UAClD,IAAG3zB,MAAM,CAACgzB,WAAW,CAACsE,UAAU,EAAC;YAE7BxzB,CAAC,CAACO,SAAS,CAAC,CAAC;YACb,IAAIkzB,gBAAgB,GAAG,IAAI;YAC3Bl4B,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAAC;cAAEC,MAAM,EAAE53B,MAAM,CAACgzB,WAAW,CAACsE,UAAU;cAAEhpB,IAAI,EAAE,UAAU;cAAEupB,OAAO,EAAEN,gBAAgB;cACvIO,aAAa,EAAE,IAAI;cACnBC,WAAW,EAAE/3B,MAAM,CAACgzB,WAAW,CAACgF;YACpC,CAAC,CAAC,CAAC;YACPnO,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;UAE3B,CAAC,MAAI;YACD,IAAImL,OAAO,GAAGpF,sBAAsB,CAACqF,0BAA0B,CAACl4B,MAAM,CAACgzB,WAAW,CAAC;YAEnF,IAAImF,iBAAiB,GAAGtF,sBAAsB,CAACuF,wBAAwB,CAACH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAEA,OAAO,CAACI,YAAY,CAAC;YAEtHF,iBAAiB,CAACG,WAAW,GAAGt4B,MAAM,CAACgzB,WAAW,CAACuF,aAAa;YAEhEJ,iBAAiB,CAACK,cAAc,GAAG,IAAI;YAEvC3F,sBAAsB,CAAC4F,QAAQ,CAACN,iBAAiB,EAAEF,OAAO,EAAE,IAAI,EAAG,IAAI,CAAC,CAC/Dj0B,IAAI,CAAC,UAASC,IAAI,EAAC;cAChB,IAAGA,IAAI,CAACutB,MAAM,IAAIvtB,IAAI,CAACutB,MAAM,CAACprB,MAAM,GAAG,CAAC,EAAC;gBACrC,IAAIsyB,YAAY,GAAG,EAAE;gBACrB50B,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAACutB,MAAM,EAAE,UAASmE,GAAG,EAACtM,KAAK,EAAC;kBACnCvlB,CAAC,CAACmC,IAAI,CAACojB,KAAK,CAACmI,MAAM,EAAE,UAASmE,GAAG,EAACgD,MAAM,EAAC;oBACrCD,YAAY,IAAIC,MAAM,CAACC,YAAY,GAAG,OAAO;kBACjD,CAAC,CAAC;gBACN,CAAC,CAAC;gBACF90B,CAAC,CAACO,SAAS,CAAC,CAAC;gBACblE,YAAY,CAACiE,SAAS,CAACs0B,YAAY,EAAE,YAAU;kBAAC14B,MAAM,CAACiM,YAAY,CAAC,CAAC;gBAAC,CAAC,CAAC;cAC5E,CAAC,MAAI;gBACD,IAAI4sB,UAAU,GAAG,CAAC;gBAClB/0B,CAAC,CAACmC,IAAI,CAACgyB,OAAO,CAACa,QAAQ,EAAC,UAAS5yB,GAAG,EAAEtG,EAAE,EAAC;kBACrCi5B,UAAU,IAAIj5B,EAAE,CAACmlB,MAAM;gBAC3B,CAAC,CAAC;gBAEFjhB,CAAC,CAACO,SAAS,CAAC,CAAC;gBAEb,IAAIkzB,gBAAgB,GAAG,IAAI;gBAC3Bl4B,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAAC;kBAAEC,MAAM,EAAEK,OAAO,CAAC70B,EAAE;kBAAEkL,IAAI,EAAE,UAAU;kBAAEupB,OAAO,EAAEN,gBAAgB;kBACpHO,aAAa,EAAE,IAAI;kBACnBC,WAAW,EAAE13B,aAAa,CAAC6uB,SAAS,CAAC+I,OAAO,CAACc,KAAK,EAAE,CAAC,CAAC,IAAI14B,aAAa,CAAC6uB,SAAS,CAAC2J,UAAU,EAAE,CAAC;gBACnG,CAAC,CAAC,CAAC;gBACPhP,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;cAC3B;YAEJ,CAAC,EAAC,UAAS3oB,GAAG,EAAC;cACXL,CAAC,CAACO,SAAS,CAAC,CAAC;cACb,IAAIglB,KAAK,GAAG5oB,cAAc,CAACe,SAAS,CAAC,4EAA4E,CAAC;cAClHrB,YAAY,CAACiE,SAAS,CAACilB,KAAK,EAAE,YAAU;gBAACrpB,MAAM,CAACiM,YAAY,CAAC,CAAC;cAAC,CAAC,CAAC;YACrE,CAAC,CAAC;UACd;QACJ,CAAC,MACI,IAAGhI,IAAI,CAACotB,OAAO,EAAC;UACjBvtB,CAAC,CAACO,SAAS,CAAC,CAAC;UACbrE,MAAM,CAACs1B,8BAA8B,CAAC,CAAC;QAC3C,CAAC,MACG;UACAxxB,CAAC,CAACO,SAAS,CAAC,CAAC;UACb,IAAIq0B,YAAY,GAAG,EAAE;UACrB50B,CAAC,CAACmC,IAAI,CAAChC,IAAI,EAAE,UAAS0xB,GAAG,EAACtM,KAAK,EAAC;YAC5BqP,YAAY,IAAIrP,KAAK,CAAC2P,SAAS,GAAG,OAAO;UAC7C,CAAC,CAAC;UACF74B,YAAY,CAACiE,SAAS,CAACs0B,YAAY,EAAE,YAAU;YAAC14B,MAAM,CAACiM,YAAY,CAAC,CAAC;UAAC,CAAC,CAAC;QAC5E;MAGJ,CAAC,EAAC,YAAU;QACRnI,CAAC,CAACO,SAAS,CAAC,CAAC;QACb,IAAIglB,KAAK,GAAG5oB,cAAc,CAACe,SAAS,CAAC,4EAA4E,CAAC;QAClHrB,YAAY,CAACiE,SAAS,CAACilB,KAAK,EAAE,YAAU;UAACrpB,MAAM,CAACiM,YAAY,CAAC,CAAC;QAAC,CAAC,CAAC;MACrE,CAAC,CAAC;IACN;EAEJ,CAAC;;EAGD;AAGJ,CAAC,CAAC,CAAC,C;;;;;;;;;;AC3nBHnM,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,+BAA+B,EAChE,CAAC,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAChD,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,wBAAwB,EAAE,WAAW,EACpG,SAAS,EACb,UAAUE,UAAU,EAAED,MAAM,EAAEO,SAAS,EAAEipB,YAAY,EACjDhpB,QAAQ,EAAEL,YAAY,EAAEM,cAAc,EAAEJ,aAAa,EAAEwyB,sBAAsB,EAAEhJ,SAAS,EACxFC,OAAO,EAAE;EAET7pB,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE1pB,SAAS,CAAC04B;EAA6B,CAAC,CAAC,CAAC,CAAC;;EAEtG,IAAI,CAACzP,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;IACZ;EACQ;EAEApqB,MAAM,CAACkrB,eAAe,GAAGpB,OAAO,CAACqB,cAAc,CAACC,YAAY;EAE5DprB,MAAM,CAACsY,UAAU,GAAGjY,aAAa,CAAC4yB,wBAAwB,CAAC,CAAC;EAE5DjzB,MAAM,CAACk5B,WAAW,GAAG,KAAK;EAC1Bl5B,MAAM,CAACgW,OAAO,GAAG;IAACmjB,cAAc,EAAE,IAAI;IAAEC,gBAAgB,EAAE;EAAI,CAAC;EAE/Dp5B,MAAM,CAACq5B,YAAY,GAAG,CAAC;EACvBr5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;EACrBt5B,MAAM,CAACu5B,WAAW,GAAG,EAAE;EACvBv5B,MAAM,CAACkJ,SAAS,GAAG,KAAK;EACxBlJ,MAAM,CAACw5B,YAAY,GAAG,IAAI;EAC1Bx5B,MAAM,CAACy5B,WAAW,GAAG,CAAC;EACtBz5B,MAAM,CAACa,UAAU,GAAG,IAAI;EACxBb,MAAM,CAAC05B,qBAAqB,GAAG,KAAK;EAEpC15B,MAAM,CAAC25B,WAAW,GAAG,IAAI;EAEzB35B,MAAM,CAACuqB,eAAe,GAAGlqB,aAAa,CAACmqB,2BAA2B;EAElExqB,MAAM,CAAC45B,GAAG,GAAG,UAAU5zB,CAAC,EAAE;IACtB,IAAIA,CAAC,EACD,OAAO3F,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAAC5zB,CAAC,CAAC,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC;EACZ,CAAC;;EAED;EACAhG,MAAM,CAACkE,IAAI,GAAG,EAAE;EAEhB,IAAM41B,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAA,EAAc;IACzC,IAAI,CAAC95B,MAAM,CAACkJ,SAAS,IAAIlJ,MAAM,CAACq5B,YAAY,GAAGr5B,MAAM,CAACs5B,UAAU,EAAE;MAC9Dx1B,CAAC,CAACC,OAAO,CAAC,CAAC;MACX/D,MAAM,CAACkJ,SAAS,GAAG,IAAI;MACvBlJ,MAAM,CAACq5B,YAAY,EAAG;MAEtBxG,sBAAsB,CAACkH,wBAAwB,CAC3C/5B,MAAM,CAACq5B,YAAY,EACnBr5B,MAAM,CAACu5B,WAAW,EAClBv5B,MAAM,CAACgW,OACX,CAAC,CAAChS,IAAI,CAAC,UAAUC,IAAI,EAAE;QACnBH,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAAC+1B,MAAM,EAAE,UAAS9zB,GAAG,EAACtG,EAAE,EAAC;UAChCA,EAAE,CAACq6B,iBAAiB,GAAGj6B,MAAM,CAACuqB,eAAe,CAAC3qB,EAAE,CAACs6B,aAAa,EAAE,IAAI,CAAC;UAErE,IAAG,CAACl6B,MAAM,CAACkE,IAAI,CAAC6B,MAAM,CAAC,UAASo0B,GAAG,EAAC;YAChC,OAAOA,GAAG,CAAC/D,MAAM,KAAKx2B,EAAE,CAACw2B,MAAM;UACnC,CAAC,CAAC,CAAChwB,MAAM,GAAG,CAAC,EAAC;YACVpG,MAAM,CAACkE,IAAI,CAACmC,IAAI,CAACzG,EAAE,CAAC;UACxB;QACJ,CAAC,CAAC;QAEFw6B,QAAQ,CAACn2B,IAAI,CAAC80B,KAAK,CAAC;QACpB/4B,MAAM,CAACkJ,SAAS,GAAG,KAAK;QACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,EAAE,UAASF,GAAG,EAAE;QACbnE,MAAM,CAACkJ,SAAS,GAAG,KAAK;QACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/B,CAAC,CAAC;IACN;EACJ,CAAC;EAEDk2B,iBAAiB,CAACP,yBAAyB,CAAC;;EAE5C;EACA95B,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB7rB,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;EAC7B,CAAC;EAED7sB,MAAM,CAACs6B,MAAM,GAAG,YAAY;IACxBt6B,MAAM,CAAC05B,qBAAqB,GAAC,IAAI;IACjC51B,CAAC,CAACC,OAAO,CAAC,CAAC;IACX8uB,sBAAsB,CAACkH,wBAAwB,CAAC,CAAC,EAAE/5B,MAAM,CAACu5B,WAAW,EAAEv5B,MAAM,CAACgW,OAAO,CAAC,CAAChS,IAAI,CAAC,UAAUC,IAAI,EAAE;MACxGH,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAAC+1B,MAAM,EAAE,UAAS9zB,GAAG,EAACtG,EAAE,EAAC;QAChCA,EAAE,CAACq6B,iBAAiB,GAAGj6B,MAAM,CAACuqB,eAAe,CAAC3qB,EAAE,CAACs6B,aAAa,EAAE,IAAI,CAAC;MACzE,CAAC,CAAC;MAEFl6B,MAAM,CAACkE,IAAI,GAAGD,IAAI,CAAC+1B,MAAM;MACzBh6B,MAAM,CAACq5B,YAAY,GAAG,CAAC;MAEvBe,QAAQ,CAACn2B,IAAI,CAAC80B,KAAK,CAAC;MAChBj1B,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,EACD,UAASF,GAAG,EAAE;MACVL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACV,CAAC;EAED,SAASi2B,QAAQA,CAAClO,KAAK,EAAE;IACrBlsB,MAAM,CAACy5B,WAAW,GAAGvN,KAAK;IAC1B,IAAIqO,IAAI,GAAGv6B,MAAM,CAACu5B,WAAW;IAC7Bv5B,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAC3Cv6B,MAAM,CAACw5B,YAAY,GAAGtN,KAAK;IAC3B,IAAIlsB,MAAM,CAACs5B,UAAU,KAAK,CAAC,EAAE;MACzBt5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;IACzB;EACJ;EAEAt5B,MAAM,CAACy6B,SAAS,GAAG,UAASvgB,GAAG,EAAC;IAC5B,IAAGA,GAAG,CAAC7W,MAAM,KAAK,uBAAuB,IAAI6W,GAAG,CAAC7W,MAAM,KAAK,qBAAqB,EAC7EpD,UAAU,CAAC+K,UAAU,CAAC,4BAA4B,EAAE;MAAE0oB,MAAM,EAAExZ,GAAG,CAACkc,MAAM;MAAEzC,cAAc,EAAE;IAAM,CAAC,CAAC,CAAC,KAClG,IAAGzZ,GAAG,CAAC7W,MAAM,KAAK,qBAAqB,EAAC;MAEzCrD,MAAM,CAAC25B,WAAW,GAAGzf,GAAG;MAExB7Z,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC9Df,cAAc,CAACe,SAAS,CAAC,2CAA2C,CAAC,EACrEf,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC,EAC/Bf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,MAAM,IAAG0Y,GAAG,CAAC7W,MAAM,KAAK,WAAW,EAAC;MACjCrD,MAAM,CAAC25B,WAAW,GAAGzf,GAAG;MAExB7Z,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC9Df,cAAc,CAACe,SAAS,CAAC,sDAAsD,CAAC,EAChFf,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC,EAC/Bf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,MACG;MACA,IAAI6nB,KAAK,GAAG5oB,cAAc,CAACe,SAAS,CAAC,uCAAuC,CAAC;MAC7ErB,YAAY,CAACiE,SAAS,CAACilB,KAAK,CAAC;IACjC;EACJ,CAAC;EAEDrpB,MAAM,CAAC26B,aAAa,GAAG,YAAY;IAC/B72B,CAAC,CAACC,OAAO,CAAC,CAAC;IACX8uB,sBAAsB,CAACY,uBAAuB,CAACzzB,MAAM,CAAC25B,WAAW,CAACvD,MAAM,EAAE,KAAK,CAAC,CAACpyB,IAAI,CAAC,UAASC,IAAI,EAAC;MAChG,IAAGA,IAAI,CAACqzB,UAAU,EAAC;QAEfxzB,CAAC,CAACO,SAAS,CAAC,CAAC;QACb,IAAIkzB,gBAAgB,GAAG,IAAI;QAC3Bl4B,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAAC;UAAEC,MAAM,EAAE3zB,IAAI,CAACqzB,UAAU;UAAEhpB,IAAI,EAAE,UAAU;UAAEupB,OAAO,EAAEN,gBAAgB;UAC7HO,aAAa,EAAE,IAAI;UACnBC,WAAW,EAAE9zB,IAAI,CAAC+zB;QACtB,CAAC,CAAC,CAAC;QACHnO,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;MAE3B,CAAC,MAAI;QACD9sB,MAAM,CAACgzB,WAAW,GAAG/uB,IAAI;QACzBjE,MAAM,CAACgzB,WAAW,CAACY,WAAW,GAAG,EAAE;QACnC5zB,MAAM,CAACgzB,WAAW,CAACW,cAAc,GAAG,KAAK;QAEzC3zB,MAAM,CAACgzB,WAAW,CAACa,mBAAmB,GAAG7zB,MAAM,CAACuqB,eAAe,CAACvqB,MAAM,CAACgzB,WAAW,CAACc,WAAW,EAAE9zB,MAAM,CAACsY,UAAU,CAAC;QAClHtY,MAAM,CAACgzB,WAAW,CAACe,eAAe,GAAG/zB,MAAM,CAACuqB,eAAe,CAACvqB,MAAM,CAACgzB,WAAW,CAACgB,OAAO,EAAEh0B,MAAM,CAACsY,UAAU,CAAC;QAE1G,IAAI2f,OAAO,GAAGpF,sBAAsB,CAACqF,0BAA0B,CAACl4B,MAAM,CAACgzB,WAAW,CAAC;QACnF;;QAEA,IAAImF,iBAAiB,GAAGtF,sBAAsB,CAACuF,wBAAwB,CAACH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAEA,OAAO,CAACI,YAAY,CAAC;QAEtHF,iBAAiB,CAACG,WAAW,GAAGt4B,MAAM,CAACgzB,WAAW,CAACuF,aAAa;QAEhEJ,iBAAiB,CAACK,cAAc,GAAG,IAAI;QAEvC3F,sBAAsB,CAAC4F,QAAQ,CAACN,iBAAiB,EAAEF,OAAO,EAAE,IAAI,EAAG,IAAI,CAAC,CAC/Dj0B,IAAI,CAAC,UAASC,IAAI,EAAC;UAChB,IAAGA,IAAI,CAACutB,MAAM,IAAIvtB,IAAI,CAACutB,MAAM,CAACprB,MAAM,GAAG,CAAC,EAAC;YACrC,IAAIsyB,YAAY,GAAG,EAAE;YACrB50B,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAACutB,MAAM,EAAE,UAASmE,GAAG,EAACtM,KAAK,EAAC;cACnCvlB,CAAC,CAACmC,IAAI,CAACojB,KAAK,CAACmI,MAAM,EAAE,UAASmE,GAAG,EAACgD,MAAM,EAAC;gBACrCD,YAAY,IAAIC,MAAM,CAACC,YAAY,GAAG,OAAO;cACjD,CAAC,CAAC;YACN,CAAC,CAAC;YACF90B,CAAC,CAACO,SAAS,CAAC,CAAC;YACblE,YAAY,CAACiE,SAAS,CAACs0B,YAAY,CAAC;UACxC,CAAC,MAAI;YACD,IAAIG,UAAU,GAAG,CAAC;YAClB/0B,CAAC,CAACmC,IAAI,CAACgyB,OAAO,CAACa,QAAQ,EAAC,UAAS5yB,GAAG,EAAEtG,EAAE,EAAC;cACrCi5B,UAAU,IAAIj5B,EAAE,CAACmlB,MAAM;YAC3B,CAAC,CAAC;YAEFjhB,CAAC,CAACO,SAAS,CAAC,CAAC;YAEb,IAAIkzB,gBAAgB,GAAG,IAAI;YAC3Bl4B,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAAC;cAAEC,MAAM,EAAEK,OAAO,CAAC70B,EAAE;cAAEkL,IAAI,EAAE,UAAU;cAAEupB,OAAO,EAAEN,gBAAgB;cACpHO,aAAa,EAAE,IAAI;cACnBC,WAAW,EAAE13B,aAAa,CAAC6uB,SAAS,CAAC+I,OAAO,CAACc,KAAK,EAAE,CAAC,CAAC,IAAI14B,aAAa,CAAC6uB,SAAS,CAAC2J,UAAU,EAAE,CAAC;YACnG,CAAC,CAAC,CAAC;YACPhP,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;UAC3B;QAEJ,CAAC,EAAC,UAAS3oB,GAAG,EAAC;UACXL,CAAC,CAACO,SAAS,CAAC,CAAC;UACb,IAAIglB,KAAK,GAAG5oB,cAAc,CAACe,SAAS,CAAC,oEAAoE,CAAC;UAC1GrB,YAAY,CAACiE,SAAS,CAACilB,KAAK,CAAC;QACjC,CAAC,CAAC;MACd;IACJ,CAAC,EAAC,YAAU;MACRvlB,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb,IAAIglB,KAAK,GAAG5oB,cAAc,CAACe,SAAS,CAAC,oEAAoE,CAAC;MAE1GrB,YAAY,CAACiE,SAAS,CAACilB,KAAK,CAAC;IACjC,CAAC,CAAC;EACN,CAAC;EAIDrpB,MAAM,CAAC6sB,gBAAgB,GAAG,YAAY;IAClC;IACArsB,QAAQ,CAAC,YAAY;MACjBP,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;IACxC,CAAC,CAAC;EACN,CAAC;EAEDhL,MAAM,CAAC46B,cAAc,GAAG,UAAS1gB,GAAG,EAAC;IACjC,IAAGA,GAAG,CAAC7W,MAAM,KAAK,WAAW,EAAC;MAC1B,OAAO;QAAC,kBAAkB,EAAC;MAAS,CAAC;IACzC,CAAC,MAAM,IAAG6W,GAAG,CAAC7W,MAAM,KAAK,qBAAqB,EAAC;MAC3C,OAAO;QAAC,kBAAkB,EAAC;MAAS,CAAC;IACzC,CAAC,MAAM,IAAG6W,GAAG,CAAC7W,MAAM,KAAK,uBAAuB,EAAC;MAC7C,OAAO;QAAC,kBAAkB,EAAC;MAAS,CAAC;IACzC,CAAC,MAAM,IAAG6W,GAAG,CAAC7W,MAAM,KAAK,qBAAqB,EAAC;MAC3C,OAAO;QAAC,kBAAkB,EAAC;MAAoB,CAAC;IACpD,CAAC,MAAM,IAAG6W,GAAG,CAAC7W,MAAM,KAAK,2BAA2B,EAAC;MACjD,OAAO;QAAC,kBAAkB,EAAC;MAAkB,CAAC;IAClD;EACJ,CAAC;AAGL,CAAC,CAAC,CAAC,C;;;;;;;;;;;;;;;;AC3OgE;AACgB;AACd;AAC3C;AAE9BvD,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,wBAAwB,EAAE,CACzD,IAAI,EAAE,eAAe,EAAE,uBAAuB,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,eAAe,EACxG,UAAUle,EAAE,EAAET,aAAa,EAAEkwB,qBAAqB,EAAE8K,SAAS,EAAEvR,KAAK,EAAEzL,WAAW,EAAE7d,aAAa,EAAE;EAG9F,IAAI,CAAC86B,aAAa,GAAG,IAAI;EACzB;EACA,IAAI,CAACpB,wBAAwB,GAAG,UAAUqB,IAAI,EAAEC,KAAK,EAAErlB,OAAO,EAAE;IAC5D,IAAIya,QAAQ,GAAGL,qBAAqB;IACpC,IAAI9kB,EAAE,GAAGmlB,QAAQ,CAACsJ,wBAAwB,CAAC75B,aAAa,CAACiN,YAAY,EAAEiuB,IAAI,EAAEC,KAAK,EAAErlB,OAAO,CAAC,CAAChS,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC7G,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;EAED,IAAI,CAACmoB,uBAAuB,GAAG,UAAUC,MAAM,EAAEC,cAAc,EAAE;IAC7D,IAAIlD,QAAQ,GAAGL,qBAAqB;IACpC,IAAI9kB,EAAE,GAAGmlB,QAAQ,CAACgD,uBAAuB,CAACvzB,aAAa,CAACiN,YAAY,EAAEumB,MAAM,EAAEC,cAAc,CAAC,CAAC3vB,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC9G,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;EAED,IAAI,CAAC6qB,QAAQ,GAAG,UAASzC,MAAM,EAAEC,cAAc,EAAC;IAC5C,IAAIlD,QAAQ,GAAGL,qBAAqB;IACpC,IAAI9kB,EAAE,GAAGmlB,QAAQ,CAAC6K,uBAAuB,CAACp7B,aAAa,CAACiN,YAAY,EAAEumB,MAAM,EAAEC,cAAc,CAAC,CAAC3vB,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC9G,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;EAED,IAAI,CAAC+rB,sBAAsB,GAAG,UAASV,OAAO,EAAC;IAC3C,IAAIlG,QAAQ,GAAGL,qBAAqB;IACpC,IAAI9kB,EAAE,GAAGmlB,QAAQ,CAAC4G,sBAAsB,CAACV,OAAO,CAAC,CAAC3yB,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAClE,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;EAED,IAAIiwB,YAAY,GAAGrd,WAAW,CAACqd,YAAY;EAC3C,IAAI,CAACrD,0BAA0B,GAAG,UAASsD,QAAQ,EAAC;IAChD,IAAIvD,OAAO,GAAG;MACV70B,EAAE,EAAEo4B,QAAQ,CAACpF,MAAM;MACnBqF,IAAI,EAAE,IAAIA,IAAI,CAAC,CAAC;MAChBC,QAAQ,EAAE,IAAI;MACdC,aAAa,EAAE,EAAE;MACjB7C,QAAQ,EAAE,EAAE;MAAE;MACd8C,iBAAiB,EAAE,KAAK;MACxBC,QAAQ,EAAE,CAAC;MACXC,WAAW,EAAE,CAAC;MACdC,OAAO,EAAEP,QAAQ,CAACQ,YAAY;MAC9BC,UAAU,EAAE,CAAC;MACbC,aAAa,EAAE,CAAC;MAChBt7B,QAAQ,EAAE;QACNwC,EAAE,EAAEo4B,QAAQ,CAAC5wB,UAAU;QACvBlI,IAAI,EAAE84B,QAAQ,CAACW,YAAY;QAC3B14B,aAAa,EAAE+3B,QAAQ,CAACY,qBAAqB;QAC7C14B,YAAY,EAAE83B,QAAQ,CAACa,oBAAoB;QAC3C74B,mBAAmB,EAAEg4B,QAAQ,CAACc;MAClC,CAAC;MACDC,iBAAiB,EAAE,CAAC;MACpBC,OAAO,EAAE,CAAC;MACV/4B,aAAa,EAAE,CAAC;MAChBg5B,kBAAkB,EAAE,CAAC;MACrBnE,WAAW,EAAEkD,QAAQ,CAACjD,aAAa;MACnCmE,gBAAgB,EAAE,IAAI;MACtBC,SAAS,EAAE,EAAE;MACbC,gBAAgB,EAAE,CAAC;MACnBC,YAAY,EAAE,CAAC;MACfC,cAAc,EAAE,IAAI;MACpBC,uBAAuB,EAAG,KAAK;MAC/B1E,YAAY,EAAEmD,QAAQ,CAACnD,YAAY;MACnCU,KAAK,EAAE,CAAC;MACR/H,mBAAmB,EAAGwK,QAAQ,CAACxK,mBAAmB;MAClDgM,YAAY,EAAE;IAClB,CAAC;IAED,IAAGxB,QAAQ,CAACyB,aAAa,EAAC;MACtBhF,OAAO,CAACr3B,QAAQ,CAACgC,QAAQ,GAAG,CAAC;QACzBC,KAAK,EAAE24B,QAAQ,CAACyB,aAAa;QAC7Bn6B,KAAK,EAAE04B,QAAQ,CAAC0B;MACpB,CAAC,CAAC;MACFjF,OAAO,CAACr3B,QAAQ,CAACu8B,kBAAkB,GAAG,IAAI;IAC9C;IAEA,IAAG3B,QAAQ,CAAC4B,eAAe,EAAC;MACxBnF,OAAO,CAACr3B,QAAQ,CAACoC,SAAS,GAAI,CAAC;QAC3ByJ,IAAI,EAAG+uB,QAAQ,CAAC4B,eAAe,CAAC3wB,IAAI;QACpCQ,OAAO,EAAIuuB,QAAQ,CAAC4B,eAAe,CAACnwB,OAAO;QAC3ChK,KAAK,EAAIu4B,QAAQ,CAAC4B,eAAe,CAACn6B,KAAK;QACvC+J,KAAK,EAAIwuB,QAAQ,CAAC4B,eAAe,CAACpwB,KAAK;QACvCH,QAAQ,EAAI2uB,QAAQ,CAAC4B,eAAe,CAACvwB,QAAQ;QAC7CF,KAAK,EAAI6uB,QAAQ,CAAC4B,eAAe,CAACzwB,KAAK;QACvCzJ,IAAI,EAAE63B,8DAAW,CAACsC;MACtB,CAAC,CAAC;MACFpF,OAAO,CAACr3B,QAAQ,CAAC08B,mBAAmB,GAAG,IAAI;IAC/C;IAEAx5B,CAAC,CAACmC,IAAI,CAACu1B,QAAQ,CAAC+B,SAAS,EAAE,UAASr3B,GAAG,EAAEtG,EAAE,EAAC;MACxC,IAAGA,EAAE,CAACyc,SAAS,KAAK,sCAAsC,EAAC;QAEvD,IAAImhB,SAAS,GAAG;UACZC,yBAAyB,EAAE79B,EAAE,CAAC89B,GAAG;UACjCC,yBAAyB,EAAE/9B,EAAE,CAAC89B,GAAG;UACjCE,MAAM,EAAEh+B,EAAE,CAACi+B;QACf,CAAC;QAED,IAAIC,KAAK,GAAGl+B,EAAE,CAACm+B,KAAK;QACpB,IAAIlB,YAAY,GAAGx8B,aAAa,CAAC6uB,SAAS,CAAC4O,KAAK,GAAC,GAAG,GAACl+B,EAAE,CAACi8B,QAAQ,EAAE,CAAC,CAAC;QACpE,IAAImC,iBAAiB,GAAGF,KAAK,GAAGjB,YAAY;QAC5C,IAAIoB,cAAc,GAAGtZ,UAAU,CAAC/kB,EAAE,CAACs+B,cAAc,CAAC;QAClD,IAAIC,UAAU,GAAG3C,QAAQ,CAACnD,YAAY,GAAG2F,iBAAiB,GAAGA,iBAAiB,GAAGzC,YAAY,CAACiC,SAAS,EAAEQ,iBAAiB,CAAC;QAI3H,IAAII,EAAE,GAAG;UACLh7B,EAAE,EAAEumB,KAAK,CAACuE,OAAO,CAAC,CAAC;UACnB7R,SAAS,EAAEzc,EAAE,CAACyc,SAAS;UACvBgiB,IAAI,EAAEz+B,EAAE,CAACy+B,IAAI;UACbC,OAAO,EAAE1+B,EAAE,CAAC0+B,OAAO;UACnBC,UAAU,EAAE3+B,EAAE,CAAC2+B,UAAU;UACzBC,QAAQ,EAAE5+B,EAAE,CAAC4+B,QAAQ;UACrB97B,IAAI,EAAE9C,EAAE,CAAC8C,IAAI;UACbsiB,KAAK,EAAEplB,EAAE,CAACs0B,QAAQ;UAClB6J,KAAK,EAAED,KAAK;UAAE;UACd/Y,MAAM,EAAEiZ,iBAAiB,GAAGp+B,EAAE,CAACs0B,QAAQ;UACvC2H,QAAQ,EAAE,IAAI;UAAE;UAChBgB,YAAY,EAAEA,YAAY;UAC1B4B,IAAI,EAAE,EAAE;UACRf,GAAG,EAAEnC,YAAY,CAACiC,SAAS,EAAEQ,iBAAiB,GAAGp+B,EAAE,CAACs0B,QAAQ,CAAC;UAC7DlmB,SAAS,EAAEwvB,SAAS,CAACI,MAAM;UAC3Bn6B,aAAa,EAAEw6B,cAAc,GAAIE,UAAU,GAAGv+B,EAAE,CAACs0B,QAAQ,GAAG+J,cAAc,GAAI,CAAC;UAC/ES,oBAAoB,EAAET,cAAc,GAAGA,cAAc,GAAG,CAAC;UACzDU,YAAY,EAAER,UAAU;UACxBS,OAAO,EAAE,KAAK;UACdC,SAAS,EAAE,KAAK;UAChBC,QAAQ,EAAE,MAAM;UAChBC,KAAK,EAAEvB,SAAS;UAChBU,cAAc,EAAEt+B,EAAE,CAACs+B,cAAc;UACjCc,SAAS,EAAElB,KAAK;UAChBmB,qBAAqB,EAAEjB,iBAAiB;UACxCkB,GAAG,EAAEt/B,EAAE,CAAC6jB,GAAG;UACX0b,OAAO,EAAEv/B,EAAE,CAAC4a,OAAO;UACnB4kB,OAAO,EAAEx/B,EAAE,CAACw/B,OAAO;UACnBC,SAAS,EAAE,IAAI;UACfC,OAAO,EAAE1/B,EAAE,CAAC0/B,OAAO;UACnBC,OAAO,EAAE3/B,EAAE,CAAC2/B,OAAO;UACnBC,OAAO,EAAE5/B,EAAE,CAAC4/B,OAAO;UACnBC,uBAAuB,EAAE7/B,EAAE,CAAC6/B,uBAAuB;UACnDC,WAAW,EAAE9/B,EAAE,CAAC8/B,WAAW;UAC3BC,YAAY,EAAE,CAAC//B,EAAE,CAAC+/B,YAAY,GAAG,IAAI,GAAG//B,EAAE,CAAC+/B,YAAY;UACvDC,GAAG,EAAEhgC,EAAE,CAACggC,GAAG;UACXC,GAAG,EAAEjgC,EAAE,CAACigC,GAAG;UACXC,GAAG,EAAElgC,EAAE,CAACkgC,GAAG;UACXC,GAAG,EAAEngC,EAAE,CAACmgC,GAAG;UACXC,GAAG,EAAEpgC,EAAE,CAACogC,GAAG;UACXC,GAAG,EAAErgC,EAAE,CAACqgC,GAAG;UACXC,GAAG,EAAEtgC,EAAE,CAACsgC,GAAG;UACXC,GAAG,EAAEvgC,EAAE,CAACugC,GAAG;UACXC,GAAG,EAAExgC,EAAE,CAACwgC,GAAG;UACXC,IAAI,EAAEzgC,EAAE,CAACygC,IAAI;UACbC,YAAY,EAAE1gC,EAAE,CAACk+B,KAAK;UACtByC,KAAK,EAAC;QACV,CAAC;QAEDtI,OAAO,CAAC0D,aAAa,CAACt1B,IAAI,CAAC+3B,EAAE,CAAC;MAElC,CAAC,MAAK,IAAGx+B,EAAE,CAACm+B,KAAK,IAAI,CAAC,EAAC;QAEnB,IAAIE,cAAc,GAAGtZ,UAAU,CAAC/kB,EAAE,CAACs+B,cAAc,CAAC;QAElD,IAAIV,SAAS,GAAG;UACZC,yBAAyB,EAAE79B,EAAE,CAAC89B,GAAG;UACjCC,yBAAyB,EAAE/9B,EAAE,CAAC89B,GAAG;UACjCE,MAAM,EAAEh+B,EAAE,CAACi+B;QACf,CAAC;QAED,IAAIC,KAAK,GAAGnZ,UAAU,CAAC/kB,EAAE,CAACm+B,KAAK,CAAC;QAChC,IAAIlB,YAAY,GAAGiB,KAAK,GAAC,GAAG,GAACl+B,EAAE,CAACi8B,QAAQ;QAExC,IAAImC,iBAAiB,GAAGF,KAAK,GAAGjB,YAAY;QAE5C,IAAI2D,YAAY,GAAGhF,QAAQ,CAACnD,YAAY,GAAG2F,iBAAiB,GAAGA,iBAAiB,GAAGzC,YAAY,CAACiC,SAAS,EAAEQ,iBAAiB,CAAC;QAG7H,IAAII,EAAE,GAAG;UACLh7B,EAAE,EAAEumB,KAAK,CAACuE,OAAO,CAAC,CAAC;UACnB7R,SAAS,EAAEsN,KAAK,CAACuE,OAAO,CAAC,CAAC;UAC1BxrB,IAAI,EAAE9C,EAAE,CAAC6jB,GAAG;UACZuB,KAAK,EAAEplB,EAAE,CAACs0B,QAAQ;UAClB6J,KAAK,EAAED,KAAK;UAAC;UACbkB,SAAS,EAAElB,KAAK;UAChB/Y,MAAM,EAAEnlB,EAAE,CAACs0B,QAAQ,GAAG8J,iBAAiB;UACvCnC,QAAQ,EAAE,IAAI;UAAC;UACfgB,YAAY,EAAEA,YAAY;UAC1B4B,IAAI,EAAE,EAAE;UACRf,GAAG,EAAEnC,YAAY,CAACiC,SAAS,EAAE7Y,UAAU,CAACqZ,iBAAiB,GAAGp+B,EAAE,CAACs0B,QAAQ,CAAC,CAAC;UACzElmB,SAAS,EAAEwvB,SAAS,CAACI,MAAM;UAC3BmB,KAAK,EAAEvB,SAAS;UAChB/5B,aAAa,EAAEw6B,cAAc,GAAIuC,YAAY,GAAGvC,cAAc,GAAI,CAAC;UACnES,oBAAoB,EAAET,cAAc,GAAGA,cAAc,GAAG,CAAC;UACzDC,cAAc,EAAED,cAAc,GAAGA,cAAc,GAAG,CAAC;UACnDU,YAAY,EAAE6B,YAAY;UAC1B5B,OAAO,EAAE,KAAK;UACdC,SAAS,EAAE,KAAK;UAChBC,QAAQ,EAAE,YAAY;UACtBG,qBAAqB,EAAEjB,iBAAiB;UACxCuC,KAAK,EAAC;QACV,CAAC;QAEDtI,OAAO,CAAC0D,aAAa,CAACt1B,IAAI,CAAC+3B,EAAE,CAAC;MAElC,CAAC,MACG;QACA,IAAIZ,SAAS,GAAG;UACZC,yBAAyB,EAAE79B,EAAE,CAAC89B,GAAG;UACjCC,yBAAyB,EAAE/9B,EAAE,CAAC89B,GAAG;UACjCE,MAAM,EAAEh+B,EAAE,CAACi+B;QACf,CAAC;QAED5F,OAAO,CAAC2D,iBAAiB,GAAG,KAAK;QAEjC,IAAG,CAAC3D,OAAO,CAAC4D,QAAQ,EAAC;UACjB5D,OAAO,CAAC4D,QAAQ,GAAG,CAAC;QACxB;QAEA,IAAIgB,YAAY,GAAIj9B,EAAE,CAACm+B,KAAK,GAAC,GAAG,GAAGn+B,EAAE,CAACi8B,QAAQ;QAC9C,IAAIiC,KAAK,GAAGl+B,EAAE,CAACm+B,KAAK,GAAGlB,YAAY;QAEnC,IAAI4D,QAAQ,GAAG3C,KAAK,GAAGl+B,EAAE,CAACs0B,QAAQ;QAElC+D,OAAO,CAAC4D,QAAQ,IAAIhC,IAAI,CAACD,GAAG,CAAC6G,QAAQ,CAAC;MAC1C;IAEJ,CAAC,CAAC;IAEF38B,CAAC,CAACmC,IAAI,CAACu1B,QAAQ,CAAC1C,QAAQ,EAAE,UAAS5yB,GAAG,EAAEtG,EAAE,EAAC;MAEvC,IAAI8gC,OAAO,GAAG;QACVt9B,EAAE,EAAExD,EAAE,CAACwD,EAAE;QACTu9B,kBAAkB,EAAE,mBAAmB;QACvC5b,MAAM,EAAEnlB,EAAE,CAACmlB,MAAM;QACjB0W,IAAI,EAAE77B,EAAE,CAACghC,QAAQ;QACjBC,SAAS,EAAE,oBAAoB;QAC/BC,eAAe,EAAE,SAAS;QAC1BC,OAAO,EAAE,CAAC;QACVC,SAAS,EAAE,IAAI;QACfC,SAAS,EAAE;MACf,CAAC;MACDhJ,OAAO,CAACa,QAAQ,CAACzyB,IAAI,CAACq6B,OAAO,CAAC;IAClC,CAAC,CAAC;IAGF,IAAIrgC,aAAa,CAAC6gC,iBAAiB,CAACjJ,OAAO,CAAC,EAAC;MACzCA,OAAO,GAAG4C,gFAAc,CAAC5C,OAAO,EAAEuD,QAAQ,CAACnD,YAAY,CAAC;MACxDyC,4FAAuB,CAACqG,iBAAiB,CAAClJ,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE+C,iEAAc,CAACjC,KAAK,CAAC;IACxF,CAAC,MAEGd,OAAO,CAACc,KAAK,GAAG7a,WAAW,CAACkjB,QAAQ,CAACnJ,OAAO,EAAEuD,QAAQ,CAACnD,YAAY,EAAE,IAAI,CAAC;IAE9EJ,OAAO,CAACc,KAAK,GAAG14B,aAAa,CAAC6uB,SAAS,CAAC+I,OAAO,CAACc,KAAK,EAAC,CAAC,CAAC;IAExD,OAAOd,OAAO;EAClB,CAAC;EAGD,IAAI,CAACoJ,qCAAqC,GAAG,UAAS7F,QAAQ,EAAC;IAC3D,IAAI8F,YAAY,GAAG,IAAI,CAACpJ,0BAA0B,CAACsD,QAAQ,CAAC;IAE5D8F,YAAY,CAACC,WAAW,GACxB;MACIC,cAAc,EAAE,CAAC;MAAE;MACnBC,cAAc,EAAE,CAAC;MACjBC,SAAS,EAAE,CAAC;MACZC,cAAc,EAAE,CAAC;MACjBC,WAAW,EAAE,CAAC,CAAC;MACfC,kBAAkB,EAAE,CAAC,CAAC;IAC1B,CAAC;IAEDP,YAAY,CAACQ,kBAAkB,GAAG,IAAI;IAEtC,IAAIra,MAAM,GAAG,EAAE;IACfA,MAAM,CAACphB,IAAI,CAAC;MAAC07B,IAAI,EAAET,YAAY;MAAEU,QAAQ,EAAE;IAAI,CAAC,CAAC;IAEjD,IAAIC,cAAc,GAAG,EAAE;IAEvBn+B,CAAC,CAACmC,IAAI,CAACu1B,QAAQ,CAAC0G,OAAO,EAAE,UAASC,QAAQ,EAAEC,MAAM,EAAC;MAC/C,IAAInK,OAAO,GAAG;QACV70B,EAAE,EAAEo4B,QAAQ,CAACpF,MAAM;QACnBqF,IAAI,EAAE,IAAIA,IAAI,CAAC,CAAC;QAChBC,QAAQ,EAAE/R,KAAK,CAACuE,OAAO,CAAC,CAAC;QACzByN,aAAa,EAAE,EAAE;QACjB7C,QAAQ,EAAE,EAAE;QAAE;QACd8C,iBAAiB,EAAE,KAAK;QACxBC,QAAQ,EAAE,CAAC;QACXC,WAAW,EAAE,CAAC;QACdC,OAAO,EAAEP,QAAQ,CAACQ,YAAY;QAC9BC,UAAU,EAAE,CAAC;QACbC,aAAa,EAAE,CAAC;QAChBt7B,QAAQ,EAAE;UACNwC,EAAE,EAAEo4B,QAAQ,CAAC5wB,UAAU;UACvBlI,IAAI,EAAE84B,QAAQ,CAACW,YAAY;UAC3B14B,aAAa,EAAE+3B,QAAQ,CAACY,qBAAqB;UAC7C14B,YAAY,EAAE83B,QAAQ,CAACa,oBAAoB;UAC3C74B,mBAAmB,EAAEg4B,QAAQ,CAACc;QAClC,CAAC;QACDC,iBAAiB,EAAE,CAAC;QACpBC,OAAO,EAAE,CAAC;QACV/4B,aAAa,EAAE,CAAC;QAChBg5B,kBAAkB,EAAE,CAAC;QACrBnE,WAAW,EAAEkD,QAAQ,CAACjD,aAAa;QACnCmE,gBAAgB,EAAE,IAAI;QACtBC,SAAS,EAAE,EAAE;QACbC,gBAAgB,EAAE,CAAC;QACnBC,YAAY,EAAE,CAAC;QACfC,cAAc,EAAE,IAAI;QACpBC,uBAAuB,EAAG,KAAK;QAC/B1E,YAAY,EAAEmD,QAAQ,CAACnD,YAAY;QACnCU,KAAK,EAAE,CAAC;QACR/H,mBAAmB,EAAGwK,QAAQ,CAACxK,mBAAmB;QAClDgM,YAAY,EAAE,CAAC;QACf8E,kBAAkB,EAAE,IAAI;QACxBO,aAAa,EAAED,MAAM,CAACE,eAAe;QACrCC,cAAc,EAAEH,MAAM,CAACI;MAC3B,CAAC;MAEDvK,OAAO,CAACsJ,WAAW,GACC;QACIC,cAAc,EAAE,CAAC;QAAE;QACnBC,cAAc,EAAE,CAAC;QACjBC,SAAS,EAAE,CAAC;QACZC,cAAc,EAAE,CAAC;QACjBC,WAAW,EAAE,CAAC,CAAC;QACfC,kBAAkB,EAAE,CAAC,CAAC;MAC1B,CAAC;MAErB,IAAGrG,QAAQ,CAACyB,aAAa,EAAC;QACtBhF,OAAO,CAACr3B,QAAQ,CAACgC,QAAQ,GAAG,CAAC;UACzBC,KAAK,EAAE24B,QAAQ,CAACyB,aAAa;UAC7Bn6B,KAAK,EAAE04B,QAAQ,CAAC0B;QACpB,CAAC,CAAC;QACFjF,OAAO,CAACr3B,QAAQ,CAACu8B,kBAAkB,GAAG,IAAI;MAC9C;MAEA,IAAG3B,QAAQ,CAAC4B,eAAe,EAAC;QACxBnF,OAAO,CAACr3B,QAAQ,CAACoC,SAAS,GAAI,CAAC;UAC3ByJ,IAAI,EAAG+uB,QAAQ,CAAC4B,eAAe,CAAC3wB,IAAI;UACpCQ,OAAO,EAAIuuB,QAAQ,CAAC4B,eAAe,CAACnwB,OAAO;UAC3ChK,KAAK,EAAIu4B,QAAQ,CAAC4B,eAAe,CAACn6B,KAAK;UACvC+J,KAAK,EAAIwuB,QAAQ,CAAC4B,eAAe,CAACpwB,KAAK;UACvCH,QAAQ,EAAI2uB,QAAQ,CAAC4B,eAAe,CAACvwB,QAAQ;UAC7CF,KAAK,EAAI6uB,QAAQ,CAAC4B,eAAe,CAACzwB,KAAK;UACvCzJ,IAAI,EAAE63B,8DAAW,CAACsC;QACtB,CAAC,CAAC;QACFpF,OAAO,CAACr3B,QAAQ,CAAC08B,mBAAmB,GAAG,IAAI;MAC/C;MAEAx5B,CAAC,CAACmC,IAAI,CAACm8B,MAAM,CAACK,WAAW,EAAE,UAASv8B,GAAG,EAAEtG,EAAE,EAAC;QACxC,IAAGA,EAAE,CAACyc,SAAS,KAAK,sCAAsC,EAAC;UAEvD,IAAImhB,SAAS,GAAG;YACZC,yBAAyB,EAAE79B,EAAE,CAAC89B,GAAG;YACjCC,yBAAyB,EAAE/9B,EAAE,CAAC89B,GAAG;YACjCE,MAAM,EAAEh+B,EAAE,CAACi+B;UACf,CAAC;UAED,IAAIC,KAAK,GAAGl+B,EAAE,CAACm+B,KAAK;UACpB,IAAIlB,YAAY,GAAGiB,KAAK,GAAC,GAAG,GAACl+B,EAAE,CAACi8B,QAAQ;UACxC,IAAImC,iBAAiB,GAAGF,KAAK,GAAGjB,YAAY;UAC5C,IAAIoB,cAAc,GAAGtZ,UAAU,CAAC/kB,EAAE,CAACs+B,cAAc,CAAC;UAClD,IAAIC,UAAU,GAAG3C,QAAQ,CAACnD,YAAY,GAAG2F,iBAAiB,GAAGA,iBAAiB,GAAGzC,YAAY,CAACiC,SAAS,EAAEQ,iBAAiB,CAAC;UAI3H,IAAII,EAAE,GAAG;YACLh7B,EAAE,EAAEumB,KAAK,CAACuE,OAAO,CAAC,CAAC;YACnB7R,SAAS,EAAEzc,EAAE,CAACyc,SAAS;YACvBgiB,IAAI,EAAEz+B,EAAE,CAACy+B,IAAI;YACbC,OAAO,EAAE1+B,EAAE,CAAC0+B,OAAO;YACnBC,UAAU,EAAE3+B,EAAE,CAAC2+B,UAAU;YACzBC,QAAQ,EAAE5+B,EAAE,CAAC4+B,QAAQ;YACrB97B,IAAI,EAAE9C,EAAE,CAAC8C,IAAI;YACbsiB,KAAK,EAAEplB,EAAE,CAACs0B,QAAQ;YAClB6J,KAAK,EAAED,KAAK;YAAE;YACd/Y,MAAM,EAAEiZ,iBAAiB,GAAGp+B,EAAE,CAACs0B,QAAQ;YACvC2H,QAAQ,EAAE,IAAI;YAAE;YAChBgB,YAAY,EAAEA,YAAY;YAC1B4B,IAAI,EAAE,EAAE;YACRf,GAAG,EAAEnC,YAAY,CAACiC,SAAS,EAAEQ,iBAAiB,GAAGp+B,EAAE,CAACs0B,QAAQ,CAAC;YAC7DlmB,SAAS,EAAEwvB,SAAS,CAACI,MAAM;YAC3Bn6B,aAAa,EAAEw6B,cAAc,GAAIE,UAAU,GAAGv+B,EAAE,CAACs0B,QAAQ,GAAG+J,cAAc,GAAI,CAAC;YAC/ES,oBAAoB,EAAET,cAAc,GAAGA,cAAc,GAAG,CAAC;YACzDU,YAAY,EAAER,UAAU;YACxBS,OAAO,EAAE,KAAK;YACdC,SAAS,EAAE,KAAK;YAChBC,QAAQ,EAAE,MAAM;YAChBC,KAAK,EAAEvB,SAAS;YAChBU,cAAc,EAAEt+B,EAAE,CAACs+B,cAAc;YACjCc,SAAS,EAAElB,KAAK;YAChBmB,qBAAqB,EAAEjB,iBAAiB;YACxC0E,iBAAiB,EAAE1E,iBAAiB;YACpCkB,GAAG,EAAEt/B,EAAE,CAAC6jB,GAAG;YACX0b,OAAO,EAAEv/B,EAAE,CAAC4a,OAAO;YACnB4kB,OAAO,EAAEx/B,EAAE,CAACw/B,OAAO;YACnBC,SAAS,EAAE,IAAI;YACfC,OAAO,EAAE1/B,EAAE,CAAC0/B,OAAO;YACnBC,OAAO,EAAE3/B,EAAE,CAAC2/B,OAAO;YACnBC,OAAO,EAAE5/B,EAAE,CAAC4/B,OAAO;YACnBC,uBAAuB,EAAE7/B,EAAE,CAAC6/B,uBAAuB;YACnDC,WAAW,EAAE9/B,EAAE,CAAC8/B,WAAW;YAC3BC,YAAY,EAAE,IAAI;YAClBC,GAAG,EAAEhgC,EAAE,CAACggC,GAAG;YACXC,GAAG,EAAEjgC,EAAE,CAACigC,GAAG;YACXC,GAAG,EAAElgC,EAAE,CAACkgC,GAAG;YACXC,GAAG,EAAEngC,EAAE,CAACmgC,GAAG;YACXC,GAAG,EAAEpgC,EAAE,CAACogC,GAAG;YACXC,GAAG,EAAErgC,EAAE,CAACqgC,GAAG;YACXC,GAAG,EAAEtgC,EAAE,CAACsgC,GAAG;YACXC,GAAG,EAAEvgC,EAAE,CAACugC,GAAG;YACXC,GAAG,EAAExgC,EAAE,CAACwgC,GAAG;YACXC,IAAI,EAAEzgC,EAAE,CAACygC,IAAI;YACbC,YAAY,EAAE1gC,EAAE,CAACk+B,KAAK;YACtByC,KAAK,EAAC,EAAE;YACRoC,gBAAgB,EAAE/iC,EAAE,CAAC+iC;UACzB,CAAC;UAED1K,OAAO,CAAC0D,aAAa,CAACt1B,IAAI,CAAC+3B,EAAE,CAAC;QAElC,CAAC,MAAK,IAAGx+B,EAAE,CAACm+B,KAAK,IAAI,CAAC,EAAC;UAEnB,IAAIE,cAAc,GAAGtZ,UAAU,CAAC/kB,EAAE,CAACs+B,cAAc,CAAC;UAElD,IAAIV,SAAS,GAAG;YACZC,yBAAyB,EAAE79B,EAAE,CAAC89B,GAAG;YACjCC,yBAAyB,EAAE/9B,EAAE,CAAC89B,GAAG;YACjCE,MAAM,EAAEh+B,EAAE,CAACi+B;UACf,CAAC;UAED,IAAIC,KAAK,GAAGnZ,UAAU,CAAC/kB,EAAE,CAACm+B,KAAK,CAAC;UAChC,IAAIlB,YAAY,GAAGiB,KAAK,GAAC,GAAG,GAACl+B,EAAE,CAACi8B,QAAQ;UAExC,IAAImC,iBAAiB,GAAGF,KAAK,GAAGjB,YAAY;UAE5C,IAAI2D,YAAY,GAAGhF,QAAQ,CAACnD,YAAY,GAAG2F,iBAAiB,GAAGA,iBAAiB,GAAGzC,YAAY,CAACiC,SAAS,EAAEQ,iBAAiB,CAAC;UAG7H,IAAII,EAAE,GAAG;YACLh7B,EAAE,EAAEumB,KAAK,CAACuE,OAAO,CAAC,CAAC;YACnB7R,SAAS,EAAEsN,KAAK,CAACuE,OAAO,CAAC,CAAC;YAC1BxrB,IAAI,EAAE9C,EAAE,CAAC6jB,GAAG;YACZuB,KAAK,EAAEplB,EAAE,CAACs0B,QAAQ;YAClB6J,KAAK,EAAED,KAAK;YAAC;YACbkB,SAAS,EAAElB,KAAK;YAChB/Y,MAAM,EAAEnlB,EAAE,CAACs0B,QAAQ,GAAG8J,iBAAiB;YACvCnC,QAAQ,EAAE,IAAI;YAAC;YACfgB,YAAY,EAAEA,YAAY;YAC1B4B,IAAI,EAAE,EAAE;YACRf,GAAG,EAAEnC,YAAY,CAACiC,SAAS,EAAE7Y,UAAU,CAACqZ,iBAAiB,GAAGp+B,EAAE,CAACs0B,QAAQ,CAAC,CAAC;YACzElmB,SAAS,EAAEwvB,SAAS,CAACI,MAAM;YAC3BmB,KAAK,EAAEvB,SAAS;YAChB/5B,aAAa,EAAEw6B,cAAc,GAAIuC,YAAY,GAAGvC,cAAc,GAAI,CAAC;YACnES,oBAAoB,EAAET,cAAc,GAAGA,cAAc,GAAG,CAAC;YACzDC,cAAc,EAAED,cAAc,GAAGA,cAAc,GAAG,CAAC;YACnDU,YAAY,EAAE6B,YAAY;YAC1B5B,OAAO,EAAE,KAAK;YACdC,SAAS,EAAE,KAAK;YAChBC,QAAQ,EAAE,YAAY;YACtBG,qBAAqB,EAAEjB,iBAAiB;YACxC0E,iBAAiB,EAAE1E,iBAAiB;YACpCuC,KAAK,EAAC,EAAE;YACRoC,gBAAgB,EAAE/iC,EAAE,CAAC+iC;UACzB,CAAC;UAED1K,OAAO,CAAC0D,aAAa,CAACt1B,IAAI,CAAC+3B,EAAE,CAAC;QAElC,CAAC,MACG;UACA,IAAIZ,SAAS,GAAG;YACZC,yBAAyB,EAAE79B,EAAE,CAAC89B,GAAG;YACjCC,yBAAyB,EAAE/9B,EAAE,CAAC89B,GAAG;YACjCE,MAAM,EAAEh+B,EAAE,CAACi+B;UACf,CAAC;UAED5F,OAAO,CAAC2D,iBAAiB,GAAG,KAAK;UAEjC,IAAG,CAAC3D,OAAO,CAAC4D,QAAQ,EAAC;YACjB5D,OAAO,CAAC4D,QAAQ,GAAG,CAAC;UACxB;UAEA,IAAIgB,YAAY,GAAIj9B,EAAE,CAACm+B,KAAK,GAAC,GAAG,GAAGn+B,EAAE,CAACi8B,QAAQ;UAC9C,IAAIiC,KAAK,GAAGl+B,EAAE,CAACm+B,KAAK,GAAGlB,YAAY;UAEnC,IAAI4D,QAAQ,GAAG3C,KAAK,GAAGl+B,EAAE,CAACs0B,QAAQ;UAElC+D,OAAO,CAAC4D,QAAQ,IAAIhC,IAAI,CAACD,GAAG,CAAC6G,QAAQ,CAAC;QAC1C;MAEJ,CAAC,CAAC;MAEF38B,CAAC,CAACmC,IAAI,CAACm8B,MAAM,CAACQ,cAAc,EAAE,UAAS18B,GAAG,EAAEtG,EAAE,EAAC;QAE3C,IAAI8gC,OAAO,GAAG;UACVt9B,EAAE,EAAExD,EAAE,CAACwD,EAAE;UACTu9B,kBAAkB,EAAE,mBAAmB;UACvC5b,MAAM,EAAEnlB,EAAE,CAACmlB,MAAM;UACjB0W,IAAI,EAAE77B,EAAE,CAACghC,QAAQ;UACjBC,SAAS,EAAE,oBAAoB;UAC/BC,eAAe,EAAE,SAAS;UAC1BC,OAAO,EAAE,CAAC;UACVC,SAAS,EAAE,IAAI;UACfC,SAAS,EAAE;QACf,CAAC;QACDhJ,OAAO,CAACa,QAAQ,CAACzyB,IAAI,CAACq6B,OAAO,CAAC;QAE9BuB,cAAc,CAAC57B,IAAI,CAACq6B,OAAO,CAAC;MAChC,CAAC,CAAC;MAEF,IAAIrgC,aAAa,CAAC6gC,iBAAiB,CAACjJ,OAAO,CAAC,EAAC;QACzCA,OAAO,GAAG4C,gFAAc,CAAC5C,OAAO,EAAEuD,QAAQ,CAACnD,YAAY,CAAC;QACxDyC,4FAAuB,CAACqG,iBAAiB,CAAClJ,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE+C,iEAAc,CAACjC,KAAK,CAAC;MACxF,CAAC,MAEGd,OAAO,CAACc,KAAK,GAAG7a,WAAW,CAACkjB,QAAQ,CAACnJ,OAAO,EAAEuD,QAAQ,CAACnD,YAAY,EAAE,IAAI,CAAC;MAE9EJ,OAAO,CAACc,KAAK,GAAG14B,aAAa,CAAC6uB,SAAS,CAAC+I,OAAO,CAACc,KAAK,EAAC,CAAC,CAAC;MAExDtR,MAAM,CAACphB,IAAI,CAAC;QAAC07B,IAAI,EAAE9J,OAAO;QAAE+J,QAAQ,EAAEI,MAAM,CAACI;MAAQ,CAAC,CAAC;IAC3D,CAAC,CAAC;IACF;IACA;IACA;IACA;IACA1+B,CAAC,CAACmC,IAAI,CAACwhB,MAAM,EAAE,UAASvhB,GAAG,EAACtG,EAAE,EAAC;MAC3B,IAAGA,EAAE,CAACoiC,QAAQ,EAAC;QACXpiC,EAAE,CAACmiC,IAAI,CAACE,cAAc,GAAGniC,OAAO,CAAC+F,IAAI,CAACy7B,YAAY,CAACxI,QAAQ,CAAC;QAE5Dh1B,CAAC,CAACmC,IAAI,CAACg8B,cAAc,EAAC,UAAStsB,CAAC,EAACktB,MAAM,EAAC;UACpC,IAAInN,KAAK,GAAG,KAAK;UACjB5xB,CAAC,CAACmC,IAAI,CAACrG,EAAE,CAACmiC,IAAI,CAACjJ,QAAQ,EAAC,UAASgK,EAAE,EAAEC,GAAG,EAAC;YACrC,IAAGA,GAAG,CAAC3/B,EAAE,KAAKy/B,MAAM,CAACz/B,EAAE,EAAC;cACpBsyB,KAAK,GAAG,IAAI;YAChB;UACJ,CAAC,CAAC;UAEF,IAAG,CAACA,KAAK,EAAC;YACN91B,EAAE,CAACmiC,IAAI,CAACE,cAAc,CAAC57B,IAAI,CAACw8B,MAAM,CAAC;UACvC;QACJ,CAAC,CAAC;QAEF,IAAIG,EAAE,GAAG/H,4CAAU,CAAC/wB,IAAI,CAACtK,EAAE,CAACmiC,IAAI,CAACE,cAAc,CAAC,CAACgB,GAAG,CAAC,UAAUC,CAAC,EAAE;UAAE,OAAOA,CAAC,CAACne,MAAM;QAAE,CAAC,CAAC;QACvF,IAAIoe,EAAE,GAAGlI,4CAAU,CAAC/wB,IAAI,CAACtK,EAAE,CAACmiC,IAAI,CAACjJ,QAAQ,CAAC,CAACmK,GAAG,CAAC,UAAUC,CAAC,EAAE;UAAE,OAAOA,CAAC,CAACne,MAAM;QAAE,CAAC,CAAC;QACjFnlB,EAAE,CAACmiC,IAAI,CAACvF,OAAO,GAAG,CAAC,CAACwG,EAAE,GAAG,CAAC,GAAGA,EAAE,KAAK,CAACG,EAAE,GAAG,CAAC,GAAGA,EAAE,CAAC;QACjD;QACA;;QAEAr/B,CAAC,CAACmC,IAAI,CAACrG,EAAE,CAACmiC,IAAI,CAACpG,aAAa,EAAE,UAASyH,KAAK,EAAEC,OAAO,EAAC;UAClDA,OAAO,CAACC,UAAU,GAAGzJ,IAAI,CAACD,GAAG,CAACyJ,OAAO,CAACC,UAAU,CAAC;UACjDD,OAAO,CAACE,WAAW,GAAG1J,IAAI,CAACD,GAAG,CAACyJ,OAAO,CAACE,WAAW,CAAC,GAAG,CAAC,CAAC;UACxDF,OAAO,CAACG,cAAc,GAAG3J,IAAI,CAACD,GAAG,CAACyJ,OAAO,CAACG,cAAc,CAAC,GAAG,CAAE,CAAC;QACnE,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;IAGF,OAAO/b,MAAM;EACjB,CAAC;EAED,IAAI,CAAC2Q,wBAAwB,GAAGla,WAAW,CAACka,wBAAwB;EACpE,IAAI,CAACK,QAAQ,GAAGva,WAAW,CAACua,QAAQ;AACxC,CAAC,CAAC,CAAC,C;;;;;;;;;;;AC1kBH34B,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,sBAAsB,EACrD,CAAC,IAAI,EACD,UAAUle,EAAE,EAAE;EAEV,IAAI,CAAC8iC,WAAW,GAAG,UAAUl8B,OAAO,EAAE;IAClC,IAAIgY,IAAI,GAAG;MACPmkB,QAAQ,EAAEn8B,OAAO,CAACm8B;IACtB,CAAC;IAED,IAAIn4B,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;;IAEzB;IACAnM,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAACC,aAAa,CAACr8B,OAAO,CAACkd,MAAM,GAAG,GAAG,EAAElF,IAAI,EAChE,UAAUpb,GAAG,EAAEkF,GAAG,EAAE;MAChB,IAAIlF,GAAG,EAAE;QACLa,OAAO,CAACC,GAAG,CAAC,SAAS,CAAC;QACtBD,OAAO,CAACC,GAAG,CAACd,GAAG,CAAC;QAChBoH,QAAQ,CAACqb,MAAM,CAAC;UACZid,QAAQ,EAAE;YACNC,gBAAgB,EAAE3/B;UACtB;QACJ,CAAC,CAAC;MACN,CAAC,MACI;QACDa,OAAO,CAACC,GAAG,CAAC,WAAW,GAACyyB,IAAI,CAACC,SAAS,CAACtuB,GAAG,CAAC,CAAC;QAC5CkC,QAAQ,CAACE,OAAO,CAAC;UACbo4B,QAAQ,EAAE;YACNE,mBAAmB,EAAE16B,GAAG,CAAC26B;UAC7B;QACJ,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;IAEL,OAAOz4B,QAAQ,CAACG,OAAO;EAC3B,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;;;;;;AClC0C;AACrD;AACA;AACA;AACA5L,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,eAAe,EAAE,CAAC,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAC5F,UAAU5e,UAAU,EAAEU,EAAE,EAAEH,QAAQ,EAAE06B,SAAS,EAAE;EAE3C,IAAI,CAAC+I,cAAc,GAAG,GAAG;EACzB,IAAI,CAACC,oBAAoB,GAAG,IAAI;EAChC,IAAI,CAACC,aAAa,GAAG,IAAI;EACzB,IAAI,CAACC,cAAc,GAAG,IAAI;EAC1B,IAAI,CAACC,WAAW,GAAG,IAAI;EACvB,IAAI,CAACC,QAAQ,GAAG,IAAI;EACpB,IAAI,CAACxN,QAAQ,GAAG,IAAI;EACpB,IAAI,CAACvE,QAAQ,GAAG,IAAI;EACpB,IAAI,CAACgS,OAAO,GAAG,IAAI;EACnB,IAAI,CAACC,IAAI,GAAG,IAAI;EAChB,IAAI,CAACC,oBAAoB,GAAG,IAAI;EAChC,IAAI,CAACC,YAAY,GAAG,IAAI;EACxB,IAAI,CAACC,aAAa,GAAG,IAAI;EACzB,IAAI,CAACC,qBAAqB,GAAG,IAAI;EACjC,IAAI,CAACrhC,QAAQ,GAAG,IAAI;EACpB,IAAI,CAACshC,iBAAiB,GAAG,IAAI;EAC7B,IAAI,CAACC,oBAAoB,GAAG,IAAI;EAChC,IAAI,CAAC1jC,aAAa,GAAG,KAAK;EAC1B,IAAI,CAACitB,eAAe,GAAG,IAAI;EAC3B,IAAI,CAAC0W,qBAAqB,GAAG,IAAI;EACjC,IAAI,CAACC,wCAAwC,GAAG,IAAI;EACpD,IAAIC,iBAAiB,GAAG,EAAE;EAC1B,IAAI,CAACC,aAAa,GAAG,EAAE;EACvB,IAAI,CAACC,gBAAgB,GAAG,KAAK;EAC7B,IAAI,CAACC,oBAAoB,GAAG,IAAI;EAChC,IAAI,CAACC,YAAY,GAAG,CAAC,CAAC;EACtB,IAAI,CAACC,aAAa,GAAG,MAAM;EAC3B,IAAI,CAACC,YAAY,GAAG,IAAI;EACxB,IAAI,CAACC,oBAAoB,GAAG,EAAE;EAC9B,IAAI,CAACC,iBAAiB,GAAG,CAAC;EAC1B,IAAI,CAACC,cAAc,GAAG,CAAC,CAAC;EAExB,IAAI,CAACC,YAAY,GAAG,CAAC,CAAC,CAAC;EACvB,IAAI,CAACC,eAAe,GAAG,CAAC,CAAC,CAAC;;EAE1B,IAAI,CAACC,qBAAqB,GAAG,OAAO;EACpC,IAAI,CAACtmC,MAAM,GAAG,CAACF,MAAM,CAACE,MAAM,GAAG,KAAK,GAAG,IAAI;EAC3C,IAAI,CAACsM,QAAQ,GAAG,KAAK,CAAC,CAAC;EACvB,IAAI,CAACmd,UAAU,GAAG,CAAC,IAAI,CAACzpB,MAAM,CAAC,CAAC;EAChC,IAAI,CAACumC,QAAQ,GAAG,KAAK;EACrB,IAAI,CAACC,OAAO,GAAG,CAAC;EAChB,IAAI,CAACC,UAAU,GAAG,KAAK;EACvB,IAAI,CAACC,QAAQ,GAAG,IAAI;EACpB,IAAI,CAACC,eAAe,GAAG,CAAC;EACxB,IAAI,CAACC,mCAAmC,GAAG,KAAK;EAChD,IAAI,CAACC,QAAQ,GAAG,IAAI;EACpB,IAAI,CAAC7B,OAAO,GAAG,eAAe;EAC9B,IAAI,CAAC8B,WAAW,GAAG,6CAA6C;EAChE,IAAI,CAACC,yCAAyC,GAAG,KAAK;EACtD,IAAI,CAACC,wBAAwB,GAAG,KAAK;EAErC,IAAI,CAACC,cAAc,GAAG,KAAK,CAAC,CAAC;;EAE7B,IAAI,CAACC,kBAAkB,GAAG,GAAG,CAAC,CAAC;EAC/B,IAAI,CAACnlC,uBAAuB,GAAG,CAAC,CAAC,CAAC;EAClC,IAAI,CAAColC,aAAa,GAAG,GAAG,CAAC,CAAC;;EAE1B,IAAI,CAACC,cAAc,GAAG,IAAI;EAC1B,IAAI,CAACC,cAAc,GAAG,IAAI;EAC1B,IAAI,CAACtuB,UAAU,GAAG,IAAI;EACtB,IAAI,CAACuuB,OAAO,GAAG,IAAI;EACnB,IAAI,CAACC,YAAY,GAAG,IAAI;EACxB,IAAI,CAAC7I,cAAc,GAAG,IAAI;EAC1B,IAAI,CAAC8I,eAAe,GAAG,IAAI;EAC3B,IAAI,CAACC,UAAU,GAAG,IAAI;EACtB,IAAI,CAACC,aAAa,GAAG,IAAI;EACzB,IAAI,CAACpY,8BAA8B,GAAG,EAAE;EACxC,IAAI,CAACyE,OAAO,GAAG,GAAG;EAClB,IAAI,CAACC,OAAO,GAAG,EAAE;EACjB,IAAI,CAAC2T,gBAAgB,GAAG,mBAAmB;EAC3C,IAAI,CAACC,mBAAmB,GAAG,kBAAkB;EAC7C,IAAI,CAACC,cAAc,GAAG,wBAAwB;EAC9C,IAAI,CAACC,OAAO,GAAG/nC,0EAAiC;EAChD,IAAI,CAACk0B,YAAY,GAAGl0B,2EAAkC;EACtD0F,OAAO,CAACC,GAAG,CAAC,UAAU,EAAE,IAAI,CAACoiC,OAAO,CAAC;EACrCriC,OAAO,CAACC,GAAG,CAAC,eAAe,EAAE,IAAI,CAACuuB,YAAY,CAAC;EAE/C,IAAI,CAACgU,aAAa,GAAG,KAAK;EAC1B;EACA,IAAI,CAACC,QAAQ,GAAG,KAAK;EACrB,IAAI,CAACC,aAAa,GAAG,CAAC;EACtB,IAAI,CAACC,SAAS,GAAG,IAAI;EAErB,IAAI,CAACC,qBAAqB,GAAG,IAAI;EACjC,IAAI,CAACC,oBAAoB,GAAG,KAAK;EACjC,IAAI,CAACC,aAAa,GAAG,IAAI;EAEzB,IAAI,CAACC,gBAAgB,GAAG,CAAC,CAAC;EAE1B,IAAI,CAACC,SAAS,GAAG,KAAK;EAGtB,IAAI1oC,yEAAgC,IAAI,OAAO,EAAE;IAC7C,IAAI,CAAC+nC,OAAO,GAAGhoC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,SAAS,CAAC;IAErD,IAAI,CAAC,IAAI,CAACb,OAAO,EACb,IAAI,CAACA,OAAO,GAAG,uBAAuB;EAC9C;EAGAriC,OAAO,CAACC,GAAG,CAAC,YAAY,GAAGyyB,IAAI,CAACC,SAAS,CAACr4B,2DAAkB,CAAC,CAAC;EAC9D0F,OAAO,CAACC,GAAG,CAAC,YAAY,GAAG,IAAI,CAACoiC,OAAO,CAAC;EAExC,IAAI,CAACc,aAAa,GAAG,IAAI,CAACd,OAAO,GAAG,IAAI,CAACH,gBAAgB;EACzD,IAAI,CAACkB,aAAa,GAAG,IAAI,CAACf,OAAO,GAAG,IAAI,CAACF,mBAAmB;;EAE5D;EACA;EACA;;EAEA,IAAI,CAACkB,UAAU,GAAG,UAAUC,MAAM,EAAE;IAChC,IAAIA,MAAM,EAAE;MACR,IAAI,CAACjB,OAAO,GAAGiB,MAAM;IACzB;IAEA,IAAIjjB,GAAG,GAAG,IAAI,CAACgiB,OAAO;IACtB,IAAIhiB,GAAG,CAACkjB,QAAQ,CAAC,GAAG,CAAC,EAAE;MACnBljB,GAAG,GAAGA,GAAG,CAAC3b,KAAK,CAAC,CAAC,EAAE2b,GAAG,CAACjf,MAAM,GAAG,CAAC,CAAC;IACtC;;IAEA;AACZ;AACA;;IAEY/G,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,SAAS,EAAEpS,GAAG,CAAC;IAC3C,IAAI,CAAC+iB,aAAa,GAAG/iB,GAAG;IACxB,IAAI,CAAC8iB,aAAa,GAAG,IAAI,CAACd,OAAO,GAAG,IAAI,CAACH,gBAAgB;IACzD,IAAI,CAACkB,aAAa,GAAG,IAAI,CAACf,OAAO,GAAG,IAAI,CAACF,mBAAmB;IAE5D,IAAI,OAAO,IAAI,CAAC9B,YAAY,KAAK,UAAU,EAAE;MACzC,IAAI,CAACA,YAAY,CAAC,CAAC;IACvB;EACJ,CAAC;EACD,IAAI,CAACmD,WAAW,GAAG,YAAY,CAE/B,CAAC;EAED,IAAI,CAACC,eAAe,GAAGppC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,iBAAiB,CAAC;EACrE,IAAI,CAACQ,kBAAkB,GAAG,UAAUC,CAAC,EAAE;IAEnCtpC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,iBAAiB,EAAEkR,CAAC,CAAC;IACjD,IAAI,CAACF,eAAe,GAAGE,CAAC;EAC5B,CAAC;EAED,IAAI,CAAC1c,YAAY,GAAG5sB,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,cAAc,CAAC;EAC/D,IAAI,CAACU,eAAe,GAAG,UAAUD,CAAC,EAAE;IAEhCtpC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAEkR,CAAC,CAAC;IAC9C,IAAI,CAAC1c,YAAY,GAAG0c,CAAC;EACzB,CAAC;EAED,IAAI,CAACE,mBAAmB,GAAGxpC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,qBAAqB,CAAC;EAC7E,IAAI,CAACY,sBAAsB,GAAG,UAAUH,CAAC,EAAE;IAEvCtpC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,qBAAqB,EAAEkR,CAAC,CAAC;IACrD,IAAI,CAACE,mBAAmB,GAAGF,CAAC;EAChC,CAAC;EAED,IAAI,CAACI,eAAe,GAAG,UAAUC,IAAI,EAAE;IACnC,IAAI,CAAC3D,YAAY,GAAG2D,IAAI;EAC5B,CAAC;EAED,IAAI,CAAC3nC,QAAQ,GAAG,IAAI;EAEpB,IAAI,CAAC4nC,cAAc,GAAG,UAAUC,SAAS,EAAEC,YAAY,EAAE;IACrD,IAAI,IAAI,CAAC5pC,MAAM,KAAK,IAAI,EAAE;MACtB,IAAI6pC,GAAG,GAAG,IAAI,CAAC/nC,QAAQ;MACvB,IAAI,CAACA,QAAQ,GAAG8nC,YAAY;MAC5B,IAAIC,GAAG,KAAK,IAAI,CAAC/nC,QAAQ,EACrBpB,UAAU,CAAC+K,UAAU,CAAC,+BAA+B,EAAE,IAAI,CAAC3J,QAAQ,CAAC;MAEzE2D,OAAO,CAACC,GAAG,CAAC,6BAA6B,EAAE,IAAI,CAAC5D,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;MAChF,IAAIiiB,IAAI,GAAG,IAAI;MACf,IAAI,CAAC,IAAI,CAACjiB,QAAQ,EACdb,QAAQ,CAAC,YAAY;QAAE8iB,IAAI,CAAC+hB,YAAY,CAAC,CAAC;MAAE,CAAC,EAAE,IAAI,CAAC;IAC5D,CAAC,MAAM;MACH,IAAI,CAACD,oBAAoB,GAAG8D,SAAS;MACrC,IAAI,OAAOC,YAAY,KAAK,WAAW,IAAID,SAAS,KAAK,IAAI,IAAI,OAAQ,IAAI,CAAC7D,YAAa,IAAI,UAAU,EAAE;QACvG,IAAI,CAACA,YAAY,CAAC,CAAC;MACvB,CAAC,MAAM;QACH,IAAIgE,WAAW,GAAG,IAAI,CAAChoC,QAAQ;QAC/B,IAAI,CAACA,QAAQ,GAAG6nC,SAAS,IAAIC,YAAY;QAEzCE,WAAW,GAAGA,WAAW,KAAK,IAAI,CAAChoC,QAAQ;QAC3C,IAAIgoC,WAAW,KAAK,IAAI,EAAE;UACtBppC,UAAU,CAAC+K,UAAU,CAAC,+BAA+B,EAAE,IAAI,CAAC3J,QAAQ,CAAC;UACrE2D,OAAO,CAACC,GAAG,CAAC,6BAA6B,EAAE,IAAI,CAAC5D,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;QACpF;QACA,IAAI,IAAI,CAACA,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC+iC,cAAc,EAAE;UAC/C;UACA;UACA,IAAI,CAACkF,qBAAqB,CAAC,IAAI,CAACpE,aAAa,CAAC;QAClD;MACJ;IACJ;EACJ,CAAC;EAED,IAAI,CAACpT,mBAAmB,GAAG,UAAUkX,IAAI,EAAE;IACvC/D,iBAAiB,CAAC5+B,IAAI,CAAC2iC,IAAI,CAAC;EAChC,CAAC;EAED,IAAI,CAACO,eAAe,GAAG,KAAK;EAC5B,IAAI,CAACC,qBAAqB,GAAG,IAAI;EAEjC,IAAI,CAACF,qBAAqB,GAAG,YAAY;IACrC,IAAIhmB,IAAI,GAAG,IAAI;IACf,IAAI,IAAI,CAACimB,eAAe,EAAE,OAAO,IAAI,CAACC,qBAAqB;IAE3D,IAAI,CAACD,eAAe,GAAG,IAAI;IAC3B;IACA;IACA,IAAI9hB,MAAM,GAAGgiB,qBAAqB,CAAC,IAAI,CAACvE,aAAa,CAAC;IAEtDzd,MAAM,WAAQ,CAAC,YAAY;MACvBnE,IAAI,CAACimB,eAAe,GAAG,KAAK;MAC5BjmB,IAAI,CAACkmB,qBAAqB,GAAG,IAAI;IACrC,CAAC,CAAC;IAEF,IAAI,CAACA,qBAAqB,GAAG/hB,MAAM;IACnC,OAAOA,MAAM;EACjB,CAAC;EAED,SAASgiB,qBAAqBA,CAACvE,aAAa,EAAE;IAC1C,IAAI35B,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IACtB,IAAIH,EAAE,GAAGC,QAAQ,CAACG,OAAO;IAEzB,IAAIu5B,iBAAiB,CAAC7+B,MAAM,GAAG,CAAC,EAAE;MAC9B5F,QAAQ,CAAC,YAAY;QACjBP,UAAU,CAAC+K,UAAU,CAAC,6BAA6B,EAAE,UAAU,CAAC;MACpE,CAAC,CAAC;MAEFlH,CAAC,CAACmC,IAAI,CAACg/B,iBAAiB,EAAE,UAAU/+B,GAAG,EAAEkc,CAAC,EAAE;QACxC9W,EAAE,GAAGA,EAAE,WAAQ,CAAC,UAAUjC,GAAG,EAAE;UAAE,OAAO+Y,CAAC,CAAC8iB,aAAa,CAAC;QAAE,CAAC,CAAC;MAChE,CAAC,CAAC;MAEF55B,EAAE,GAAGA,EAAE,WAAQ,CAAC,YAAY;QACxB9K,QAAQ,CAAC,YAAY;UACjBP,UAAU,CAAC+K,UAAU,CAAC,6BAA6B,EAAE,KAAK,CAAC;QAC/D,CAAC,CAAC;MACN,CAAC,CAAC;IACN;IAEA,OAAOM,EAAE;EACb;EAEA,IAAI,CAACo+B,8BAA8B,GAAG,UAAU/nB,GAAG,EAAE;IACjD,IAAI,IAAI,CAACgoB,OAAO,KAAK,IAAI,IAAIhoB,GAAG,CAACioB,cAAc,EAC3C,IAAI,CAACC,cAAc,GAAGloB,GAAG,CAACioB,cAAc;IAE5C,IAAI,IAAI,CAACE,SAAS,KAAK,IAAI,EAAE;MACzB,IAAInoB,GAAG,CAACooB,eAAe,EACnB,IAAI,CAACC,eAAe,GAAGroB,GAAG,CAACooB,eAAe;MAC9C,IAAIpoB,GAAG,CAACsoB,gBAAgB,EACpB,IAAI,CAACC,gBAAgB,GAAGvoB,GAAG,CAACsoB,gBAAgB;MAChD,IAAItoB,GAAG,CAACwoB,kBAAkB,EACtB,IAAI,CAACC,kBAAkB,GAAGzoB,GAAG,CAACwoB,kBAAkB;IACxD;IAEA,IAAI,IAAI,CAACE,SAAS,KAAK,IAAI,EAAE;MACzB,IAAI1oB,GAAG,CAAC2oB,cAAc,EAClB,IAAI,CAACC,cAAc,GAAG5oB,GAAG,CAAC2oB,cAAc;MAC5C,IAAI3oB,GAAG,CAAC6oB,cAAc,EAClB,IAAI,CAACC,cAAc,GAAG9oB,GAAG,CAAC6oB,cAAc;IAChD;IAEA,IAAI,IAAI,CAACE,WAAW,IAAI/oB,GAAG,CAACgpB,eAAe,EAAE;MACzC,IAAI,CAACC,eAAe,GAAGjpB,GAAG,CAACgpB,eAAe;IAC9C;EACJ,CAAC;EAED,IAAI,CAAChgB,UAAU,GAAGtrB,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,YAAY,CAAC;EAC3D,IAAI,CAAC/6B,YAAY,GAAG9N,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,cAAc,CAAC;EAC/D,IAAI,CAAC2C,sBAAsB,GAAGxrC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,wBAAwB,CAAC;EACnF,IAAI,CAAC4C,aAAa,GAAGzrC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,eAAe,CAAC;EACjE,IAAI,CAAC6C,oBAAoB,GAAG1rC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,sBAAsB,CAAC;EAC/E,IAAI,CAAC8C,uBAAuB,GAAG3rC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,yBAAyB,CAAC;EACrF,IAAI,CAAC+C,mBAAmB,GAAG5rC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,qBAAqB,CAAC;EAC7E,IAAI,CAACgD,sBAAsB,GAAG7rC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,wBAAwB,CAAC;EACnF,IAAI,CAACiD,gBAAgB,GAAG9rC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,kBAAkB,CAAC;EACvE,IAAIkD,IAAI,GAAG/rC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,gBAAgB,CAAC;EACxD,IAAIkD,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IAClC,IAAI,CAAC1F,cAAc,GAAGhO,IAAI,CAAC2T,KAAK,CAACD,IAAI,CAAC;EAC1C;EAEA,IAAI,CAACE,aAAa,GAAG,UAAUC,YAAY,EAAE;IACzC,IAAI,IAAI,CAAChG,YAAY,KAAK,MAAM,EAAE;MAC9B,IAAI,IAAI,CAACp4B,YAAY,KAAKo+B,YAAY,CAACC,WAAW,IAC9C,IAAI,CAACX,sBAAsB,KAAKU,YAAY,CAACE,oBAAoB,EACjE,IAAI,CAAClG,YAAY,GAAG,MAAM;IAClC;IAEA,IAAI,CAAC5a,UAAU,GAAG4gB,YAAY,CAAC7gB,UAAU;IACzC,IAAI,CAACvd,YAAY,GAAGo+B,YAAY,CAACC,WAAW;IAC5C,IAAI,CAACX,sBAAsB,GAAGU,YAAY,CAACE,oBAAoB;IAC/D,IAAI,CAACX,aAAa,GAAGpT,IAAI,CAACC,SAAS,CAAC4T,YAAY,CAAC7N,GAAG,CAAC;IACrD,IAAI,CAACqN,oBAAoB,GAAGQ,YAAY,CAACG,gBAAgB;IACzD,IAAI,CAACV,uBAAuB,GAAGO,YAAY,CAACI,mBAAmB;IAC/D,IAAI,CAACV,mBAAmB,GAAGM,YAAY,CAACK,eAAe;IACvD,IAAI,CAACV,sBAAsB,GAAGK,YAAY,CAACM,kBAAkB;IAC7D,IAAI,CAACV,gBAAgB,GAAGzT,IAAI,CAACC,SAAS,CAAC4T,YAAY,CAACO,YAAY,CAAC;IACjE,IAAI,CAACpG,cAAc,GAAG6F,YAAY,CAACQ,IAAI,GAAGR,YAAY,CAACQ,IAAI,GAAG,CAAC,CAAC;IAEhE,IAAI,CAACC,wBAAwB,GAAGT,YAAY,CAACU,2BAA2B;IACxE,IAAI,CAACC,sBAAsB,GAAGX,YAAY,CAACY,yBAAyB,GAAG,GAAG,GAAGZ,YAAY,CAACY,yBAAyB,GAAG,IAAI;IAC1H,IAAI,CAACC,mBAAmB,GAAIb,YAAY,CAACc,mBAAmB,MAAA56B,MAAA,CAAM,IAAI,CAAC41B,OAAO,gCAAA51B,MAAA,CAA6B85B,YAAY,CAACc,mBAAmB,IAAK,IAAI;IAEpJhtC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,YAAY,EAAE8T,YAAY,CAAC7gB,UAAU,CAAC;IAClErrB,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAE8T,YAAY,CAACC,WAAW,CAAC;IACrEnsC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,wBAAwB,EAAE8T,YAAY,CAACE,oBAAoB,CAAC;IACxFpsC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,eAAe,EAAE,IAAI,CAACqT,aAAa,CAAC;IAChEzrC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,sBAAsB,EAAE8T,YAAY,CAACG,gBAAgB,CAAC;IAClFrsC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,yBAAyB,EAAE8T,YAAY,CAACI,mBAAmB,CAAC;IACxFtsC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,qBAAqB,EAAE8T,YAAY,CAACK,eAAe,CAAC;IAChFvsC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,wBAAwB,EAAE8T,YAAY,CAACM,kBAAkB,CAAC;IACtFxsC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,kBAAkB,EAAE,IAAI,CAAC0T,gBAAgB,CAAC;IACtE9rC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,gBAAgB,EAAEC,IAAI,CAACC,SAAS,CAAC,IAAI,CAAC+N,cAAc,CAAC,CAAC;IAClFrmC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,8BAA8B,EAAE,IAAI,CAACuU,wBAAwB,CAAC;IAC1F3sC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,4BAA4B,EAAE,IAAI,CAACyU,sBAAsB,CAAC;IACtF7sC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,yBAAyB,EAAE,IAAI,CAAC2U,mBAAmB,CAAC;EACpF,CAAC;EAED,IAAI,CAACE,kBAAkB,GAAG,UAAUC,OAAO,EAAE;IACzCltC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,iBAAiB,EAAE8U,OAAO,CAAC;EAC3D,CAAC;EAED,IAAI,CAAC1hB,YAAY,GAAGxrB,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,cAAc,CAAC;EAC/D,IAAI,CAAClc,cAAc,GAAG3sB,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,gBAAgB,CAAC;EACnE,IAAI,CAACsE,8BAA8B,GAAGntC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,gCAAgC,CAAC;EACnG,IAAI,CAACuE,SAAS,GAAGptC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,WAAW,CAAC;EACzD,IAAI,CAACwE,OAAO,GAAGrtC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,SAAS,CAAC;EACrD,IAAI,CAACyE,kBAAkB,GAAGttC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,oBAAoB,CAAC;EAC3E,IAAI,CAAC0E,YAAY,GAAGvtC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,cAAc,CAAC;EAC/D,IAAI,CAAC2E,cAAc,GAAGxtC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,gBAAgB,CAAC;EACnE,IAAI,CAAC4E,YAAY,GAAGztC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,cAAc,CAAC;EAC/D,IAAI,CAAC6E,gBAAgB,GAAG1tC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,kBAAkB,CAAC;EACvE,IAAI,CAAC8E,sBAAsB,GAAG3tC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,wBAAwB,CAAC;EACnF,IAAI,CAAC+E,uBAAuB,GAAG5tC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,yBAAyB,CAAC;EACrF,IAAI,CAAC0C,eAAe,GAAGvrC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,iBAAiB,CAAC;EAErE,IAAI,CAACgF,mBAAmB,GAAG,UAAUC,GAAG,EAAE;IACtC9tC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,iBAAiB,EAAE0V,GAAG,CAAC;EACvD,CAAC;EAED,IAAI,CAACC,mBAAmB,GAAG,YAAY;IACnC,OAAO/tC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,iBAAiB,CAAC;EACzD,CAAC;EAED,IAAI,CAACmF,iBAAiB,GAAG,UAAUF,GAAG,EAAE;IACpC9tC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,eAAe,EAAE0V,GAAG,CAAC;EACrD,CAAC;EAED,IAAI,CAACG,iBAAiB,GAAG,YAAY;IACjC,OAAOjuC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,eAAe,CAAC;EACvD,CAAC;EAED,IAAI,CAACqF,gBAAgB,GAAG,UAAUb,OAAO,EAAE;IACvC,IAAI,CAACA,OAAO,GAAGA,OAAO;IACtBrtC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,SAAS,EAAEiV,OAAO,CAAC;EACnD,CAAC;EAED,IAAI,CAACc,eAAe,GAAG,UAAUC,YAAY,EAAEjjC,EAAE,EAAEkjC,8BAA8B,EAAEjB,SAAS,EAAE9F,cAAc,EAAEC,cAAc,EACxH+F,kBAAkB,EAAEC,YAAY,EAAEC,cAAc,EAAEC,YAAY,EAAEC,gBAAgB,EAAEC,sBAAsB,EACxGC,uBAAuB,EAAErC,eAAe,EAAE;IAC1C,IAAI,CAAC/f,YAAY,GAAG4iB,YAAY;IAChC,IAAI,CAACzhB,cAAc,GAAGxhB,EAAE;IACxB,IAAI,CAACgiC,8BAA8B,GAAGkB,8BAA8B;IACpE,IAAI,CAACjB,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAAC9F,cAAc,GAAGA,cAAc;IACpC,IAAI,CAACC,cAAc,GAAGA,cAAc;IACpC,IAAI,CAAC+F,kBAAkB,GAAGA,kBAAkB;IAC5C,IAAI,CAACC,YAAY,GAAGA,YAAY;IAChC,IAAI,CAACC,cAAc,GAAGA,cAAc;IACpC,IAAI,CAACC,YAAY,GAAGA,YAAY;IAChC,IAAI,CAACC,gBAAgB,GAAGA,gBAAgB;IACxC,IAAI,CAACC,sBAAsB,GAAGA,sBAAsB;IACpD,IAAI,CAACC,uBAAuB,GAAGA,uBAAuB;IACtD,IAAI,CAACrC,eAAe,GAAGA,eAAe;IACtCvrC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAEgW,YAAY,CAAC;IACzDpuC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,gBAAgB,EAAEjtB,EAAE,CAAC;IACjDnL,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,gCAAgC,EAAEiW,8BAA8B,CAAC;IAC7FruC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,WAAW,EAAEgV,SAAS,CAAC;IACnDptC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,oBAAoB,EAAEkV,kBAAkB,CAAC;IACrEttC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAEmV,YAAY,CAAC;IACzDvtC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,gBAAgB,EAAEoV,cAAc,CAAC;IAC7DxtC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAEqV,YAAY,CAAC;IACzDztC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,kBAAkB,EAAEsV,gBAAgB,CAAC;IACjE1tC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,wBAAwB,EAAEuV,sBAAsB,CAAC;IAC7E3tC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,yBAAyB,EAAEwV,uBAAuB,CAAC;IAC/E5tC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,iBAAiB,EAAEmT,eAAe,CAAC;EACnE,CAAC;EAED,IAAI,CAAC+C,kBAAkB,GAAG,UAAUniB,GAAG,EAAE;IACrCxmB,OAAO,CAACC,GAAG,CAACumB,GAAG,CAAC;IAChBnsB,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,iBAAiB,EAAEC,IAAI,CAACC,SAAS,CAACnM,GAAG,CAAC,CAAC;EACvE,CAAC;EAED,IAAI,CAACoiB,uBAAuB,GAAG,UAAUpiB,GAAG,EAAE;IAC1CxmB,OAAO,CAACC,GAAG,CAACumB,GAAG,CAAC;IAChBnsB,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,sBAAsB,EAAEC,IAAI,CAACC,SAAS,CAACnM,GAAG,CAAC,CAAC;EAC5E,CAAC;EAED,IAAI,CAACqiB,iBAAiB,GAAG,YAAY;IACjC,IAAIxkC,GAAG,GAAG,CAAC;MAAEO,IAAI,EAAE,gBAAgB;MAAE2L,KAAK,EAAE,MAAM;MAAEu4B,cAAc,EAAE,IAAI;MACxEC,WAAW,EAAE;IAAK,CAAC,CAAC;IACpB1kC,GAAG,CAAChD,IAAI,CAAC;MAAEuD,IAAI,EAAE,OAAO;MAAE2L,KAAK,EAAE,OAAO;MAAEu4B,cAAc,EAAE,KAAK;MAC/DC,WAAW,EAAE;IAAM,CAAC,CAAC;IACrB,IAAI,IAAI,CAACtG,QAAQ,KAAK,IAAI,EACtBp+B,GAAG,CAAChD,IAAI,CAAC;MAAEuD,IAAI,EAAE,QAAQ;MAAE2L,KAAK,EAAE,QAAQ;MAAEu4B,cAAc,EAAE,KAAK;MACjEC,WAAW,EAAE;IAAK,CAAC,CAAC;IAExB1kC,GAAG,CAAChD,IAAI,CAAC;MAAEuD,IAAI,EAAE,mBAAmB;MAAE2L,KAAK,EAAE,UAAU;MAAEu4B,cAAc,EAAE,KAAK;MAC9EC,WAAW,EAAE;IAAK,CAAC,CAAC;IACpB,OAAO1kC,GAAG;EACd,CAAC;EAED,IAAI,CAAC2kC,sBAAsB,GAAG,YAAY;IACtC,IAAI3kC,GAAG,GAAG,CAAC;MAAEO,IAAI,EAAE,MAAM;MAAE2L,KAAK,EAAE;IAAO,CAAC,CAAC;IAC3C;AACZ;AACA;AACA;IACY,OAAOlM,GAAG;EACd,CAAC;EAED,IAAI,CAAC4kC,kBAAkB,GAAG,UAAUC,KAAK,EAAE;IACvC,IAAIx5B,CAAC,GAAGrV,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,iBAAiB,CAAC;IACtD,IAAI7+B,GAAG,GAAG,CAAC,CAAC;IAEZ,IAAI,CAACqL,CAAC,EAAE;MACJ,IAAI,CAACw5B,KAAK,EACN,OAAO,IAAI;IACnB,CAAC,MAEG7kC,GAAG,GAAGquB,IAAI,CAAC2T,KAAK,CAAC32B,CAAC,CAAC;IAEvB,IAAI,CAACrL,GAAG,CAAC8kC,gBAAgB,EACrB9kC,GAAG,CAAC8kC,gBAAgB,GAAG,CAAC;IAE5B,IAAI,CAAC9kC,GAAG,CAAC+kC,kBAAkB,EACvB/kC,GAAG,CAAC+kC,kBAAkB,GAAG,GAAG;IAEhC,IAAI,CAAC/kC,GAAG,CAACglC,aAAa,EAClBhlC,GAAG,CAACglC,aAAa,GAAG,KAAK;IAE7B,IAAI,CAAChlC,GAAG,CAACilC,WAAW,EAChBjlC,GAAG,CAACilC,WAAW,GAAG,MAAM;IAE5B,IAAG,CAACjlC,GAAG,CAACklC,YAAY,EAAE;MAClBllC,GAAG,CAACklC,YAAY,GAAG,EAAE;IACzB;IAEA,IAAGllC,GAAG,CAACklC,YAAY,IAAIllC,GAAG,CAACklC,YAAY,KAAK,OAAO,IAAIllC,GAAG,CAACilC,WAAW,KAAK,MAAM,EAAE;MAC/EjlC,GAAG,CAAC+kC,kBAAkB,GAAG,GAAG,CAAC,CAAC;IAClC;IAEA,IAAI/kC,GAAG,CAACilC,WAAW,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC7G,QAAQ,EAAE;MAC/C;MACA;IAAA;IAGJ,IAAIp+B,GAAG,CAACilC,WAAW,KAAK,OAAO,EAAE;MAC7BjlC,GAAG,CAACilC,WAAW,GAAG,EAAE;MACpBjlC,GAAG,CAACmlC,WAAW,GAAG,EAAE;MACpBnlC,GAAG,CAACklC,YAAY,GAAG,EAAE;MACrB,IAAI,CAACZ,kBAAkB,CAACtkC,GAAG,CAAC;IAChC;IAEA,OAAOA,GAAG;EACd,CAAC;EAED,IAAI,CAAColC,uBAAuB,GAAG,UAAUP,KAAK,EAAE;IAC5C,IAAIx5B,CAAC,GAAGrV,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,sBAAsB,CAAC;IAC3D,IAAI7+B,GAAG,GAAG,CAAC,CAAC;IAEZ,IAAI,CAACqL,CAAC,EAAE;MACJ,IAAI,CAACw5B,KAAK,EACN,OAAO,IAAI;IACnB,CAAC,MAEG7kC,GAAG,GAAGquB,IAAI,CAAC2T,KAAK,CAAC32B,CAAC,CAAC;IAEvB,IAAI,CAACrL,GAAG,CAACqlC,qBAAqB,EAC1BrlC,GAAG,CAACqlC,qBAAqB,GAAG,CAAC;IAEjC,IAAI,CAACrlC,GAAG,CAACslC,wBAAwB,EAC7BtlC,GAAG,CAACslC,wBAAwB,GAAG,GAAG;IAEtC,IAAI,CAACtlC,GAAG,CAACulC,wBAAwB,EAC7BvlC,GAAG,CAACulC,wBAAwB,GAAG,GAAG;IAEtC,IAAI,CAACvlC,GAAG,CAACwlC,MAAM,EACXxlC,GAAG,CAACwlC,MAAM,GAAG,GAAG;IAEpB,IAAI,CAACxlC,GAAG,CAACylC,MAAM,EACXzlC,GAAG,CAACylC,MAAM,GAAG,GAAG;IAEpB,IAAI,CAACzlC,GAAG,CAACglC,aAAa,EAClBhlC,GAAG,CAACglC,aAAa,GAAG,KAAK;IAE7B,IAAIhlC,GAAG,CAAC0lC,gBAAgB,KAAK,OAAO,EAAE;MAClC1lC,GAAG,CAAC0lC,gBAAgB,GAAG,EAAE;MACzB1lC,GAAG,CAAC2lC,gBAAgB,GAAG,EAAE;MACzB,IAAI,CAACpB,uBAAuB,CAACvkC,GAAG,CAAC;IACrC;IACA;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;;IAGY,OAAOA,GAAG;EACd,CAAC;EAED,IAAI,CAAC4lC,kBAAkB,GAAG,YAAY;IAClC,IAAIv6B,CAAC,GAAGrV,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,iBAAiB,CAAC;IACtD,IAAI7+B,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,CAACqL,CAAC,EACFrL,GAAG,GAAG,CAAC,CAAC,CAAC,KAETA,GAAG,GAAGquB,IAAI,CAAC2T,KAAK,CAAC32B,CAAC,CAAC;;IAEvB;IACA,IAAI,CAACrL,GAAG,CAAC6lC,cAAc,CAAC,eAAe,CAAC;MACpC;MACA7lC,GAAG,CAACm+B,aAAa,GAAG,KAAK;IAE7B,IAAI,CAACn+B,GAAG,CAAC6lC,cAAc,CAAC,kBAAkB,CAAC,EACvC7lC,GAAG,CAAC8lC,gBAAgB,GAAG,IAAI;IAE/B,OAAO9lC,GAAG;EACd,CAAC;EAED,IAAI,CAAC+lC,kBAAkB,GAAG,UAAUC,GAAG,EAAE;IACrChwC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,iBAAiB,EAAEC,IAAI,CAACC,SAAS,CAAC0X,GAAG,CAAC,CAAC;EACvE,CAAC;EAED,IAAI,CAACC,sBAAsB,GAAG,UAAUD,GAAG,EAAE;IACzChwC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,qBAAqB,EAAEC,IAAI,CAACC,SAAS,CAAC0X,GAAG,CAAC,CAAC;EAC3E,CAAC;EAED,IAAI,CAACE,sBAAsB,GAAG,YAAY;IACtC,IAAI76B,CAAC,GAAGrV,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,qBAAqB,CAAC;IAC1D,IAAI7+B,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,CAACqL,CAAC,EACFrL,GAAG,GAAG,CAAC,CAAC,CAAC,KAETA,GAAG,GAAGquB,IAAI,CAAC2T,KAAK,CAAC32B,CAAC,CAAC;;IAEvB;IACA,IAAI,CAACrL,GAAG,CAAC6lC,cAAc,CAAC,aAAa,CAAC,EAAE;MACpC7lC,GAAG,CAACmmC,WAAW,GAAG,eAAe;IACrC;IAEA,OAAOnmC,GAAG;EACd,CAAC;EAED,IAAI,CAAComC,OAAO,GAAG,YAAY;IACvB,OAAO,IAAI,CAACjL,IAAI,IAAI,eAAe;EACvC,CAAC;EAED,IAAI,CAACkL,kBAAkB,GAAG,YAAY;IAClC,OAAO,IAAI,CAAClL,IAAI,IAAI,SAAS,IACzB,IAAI,CAACA,IAAI,IAAI,eAAe;EACpC,CAAC;EAED,IAAI,CAACmL,mBAAmB,GAAG,YAAY;IACnC,OAAO,IAAI,CAACF,OAAO,CAAC,CAAC,IAAI,IAAI,CAACpuC,QAAQ;EAC1C,CAAC;EAED,IAAI,CAACuuC,8BAA8B,GAAG,YAAY;IAC9C,OAAO,IAAI,CAACF,kBAAkB,CAAC,CAAC,IAAI,IAAI,CAACruC,QAAQ;EACrD,CAAC;EAED,IAAI,CAACwuC,uBAAuB,GAAG,YAAY;IACvC,IAAI7yB,GAAG,GAAG,IAAI,CAAC6nB,iBAAiB,CAAC9+B,MAAM,CAAC,UAAUnG,EAAE,EAAE;MAAE,OAAOA,EAAE,CAACkwC,wBAAwB,KAAK,aAAa;IAAE,CAAC,CAAC;IAChH,IAAI9yB,GAAG,CAAC5W,MAAM,GAAG,CAAC,EACd,OAAO4W,GAAG,CAAC,CAAC,CAAC;EACrB,CAAC;EACD,IAAI,CAAC+yB,iBAAiB,GAAG,UAAUC,SAAS,EAAE;IAC1CA,SAAS,CAACC,oBAAoB,GAAG,EAAE;IAEnCD,SAAS,CAACxD,8BAA8B,GAAG,IAAI,CAACA,8BAA8B;IAC9E1oC,CAAC,CAACmC,IAAI,CAAC,IAAI,CAAC4+B,iBAAiB,EAAE,UAAU3+B,GAAG,EAAEtG,EAAE,EAAE;MAC9C,QAAQA,EAAE,CAACkwC,wBAAwB;QAC/B,KAAK,eAAe;UAChBE,SAAS,CAACE,8BAA8B,GAAGtwC,EAAE,CAAC2e,kBAAkB;UAChE;QACJ,KAAK,aAAa;UACdyxB,SAAS,CAACG,4BAA4B,GAAGvwC,EAAE,CAAC2e,kBAAkB;UAC9D;QACJ,KAAK,OAAO;UACRyxB,SAAS,CAACI,uBAAuB,GAAGxwC,EAAE,CAAC2e,kBAAkB;UACzD;QACJ,KAAK,WAAW;UACZyxB,SAAS,CAACK,0BAA0B,GAAGzwC,EAAE,CAAC2e,kBAAkB;UAC5D;QACJ,KAAK,SAAS;UACVyxB,SAAS,CAACM,yBAAyB,GAAG1wC,EAAE,CAAC2e,kBAAkB;UAC3D;QAEJ;UACI,IAAI3e,EAAE,CAAC0e,QAAQ,KAAK,IAAI,EAAE;YACtB0xB,SAAS,CAACC,oBAAoB,CAAC5pC,IAAI,CAACzG,EAAE,CAAC;UAC3C;UACA;MACR;IACJ,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAAC2wC,iBAAiB,GAAG,YAAY;IACjC,OAAO,CAAC,CAAC,IAAI,CAACxI,gBAAgB,IAAI,IAAI,CAACA,gBAAgB,CAACyI,iBAAiB,KAAK,IAAI;EACtF,CAAC;EAED,IAAI,CAACC,+BAA+B,GAAG,YAAY;IAC/C,OAAO,IAAI,CAACF,iBAAiB,CAAC,CAAC,IAAI,IAAI,CAACxI,gBAAgB,CAAC2I,iBAAiB,KAAK,IAAI;EACvF,CAAC;EAED,IAAI,CAACC,oBAAoB,GAAG,YAAY;IACpC,OAAO,IAAI,CAACJ,iBAAiB,CAAC,CAAC,IAAI,IAAI,CAACxI,gBAAgB,CAAC6I,iBAAiB,KAAK,IAAI;EACvF,CAAC;EAED,IAAI,CAACC,kBAAkB,GAAG,YAAY;IAClC,IAAI,CAAC,CAAC,IAAI,CAAC9D,gBAAgB,IAAI,IAAI,CAACA,gBAAgB,CAAC3mC,MAAM,GAAG,CAAC,EAAE;MAC7D,IAAI88B,CAAC,GAAG,IAAI,CAAC6J,gBAAgB,CAAC1xB,KAAK,CAAC,GAAG,CAAC;MACxC,OAAO2I,QAAQ,CAACkf,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGlf,QAAQ,CAACkf,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,MACI;MACD,OAAO,CAAC;IACZ;EACJ,CAAC;EAED,IAAI,CAAC4N,kBAAkB,GAAG,YAAY;IAClC,IAAI,CAAC,CAAC,IAAI,CAAC/D,gBAAgB,IAAI,IAAI,CAACA,gBAAgB,CAAC3mC,MAAM,GAAG,CAAC,EAAE;MAC7D,IAAI88B,CAAC,GAAG,IAAI,CAAC6J,gBAAgB,CAAC1xB,KAAK,CAAC,GAAG,CAAC;MACxC,OAAO2I,QAAQ,CAACkf,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,MACI;MACD,OAAO,CAAC;IACZ;EACJ,CAAC;EACD,IAAI,CAAC6N,kBAAkB,GAAG,YAAY;IAClC,IAAI,CAAC,CAAC,IAAI,CAAChE,gBAAgB,IAAI,IAAI,CAACA,gBAAgB,CAAC3mC,MAAM,GAAG,CAAC,EAAE;MAC7D,IAAI88B,CAAC,GAAG,IAAI,CAAC6J,gBAAgB,CAAC1xB,KAAK,CAAC,GAAG,CAAC;MACxC,OAAO2I,QAAQ,CAACkf,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,MACI;MACD,OAAO,CAAC;IACZ;EACJ,CAAC;EACD,IAAI,CAAC8N,yBAAyB,GAAG,YAAY;IACzC,IAAI,CAAC,CAAC,IAAI,CAAChE,sBAAsB,IAAI,IAAI,CAACA,sBAAsB,CAAC5mC,MAAM,GAAG,CAAC,EAAE;MACzE,OAAO,IAAI,CAAC4mC,sBAAsB;IACtC,CAAC,MACI;MACD,OAAO,YAAY;IACvB;EACJ,CAAC;EACD,IAAI,CAACiE,0BAA0B,GAAG,YAAY;IAC1C,IAAI,IAAI,CAAChE,uBAAuB,IAAI,KAAK,EAAE;MACvC,OAAO,KAAK;IAChB,CAAC,MACI;MACD,OAAO,IAAI;IACf;EACJ,CAAC;;EAED;EACA;EACA,IAAI,CAACiE,qBAAqB,GAAG,UAAUx8B,CAAC,EAAE;IACtCrV,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,wBAAwB,EAAE/iB,CAAC,CAAC;EAC5D,CAAC;;EAED;EACA;EACA,IAAI,CAACy8B,qBAAqB,GAAG,UAAU9wC,aAAa,EAAE;IAClD,IAAIqU,CAAC,GAAGrV,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,wBAAwB,CAAC;IAC7D,IAAIkJ,IAAI,GAAGptB,QAAQ,CAACtP,CAAC,CAAC;IACtBrV,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,wBAAwB,EAAEp3B,aAAa,CAAC8gB,GAAG,CAACiwB,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACrF,OAAO18B,CAAC;EACZ,CAAC;EAED,IAAI,CAAC28B,YAAY,GAAG,YAAY;IAC5B,OAAO,IAAI,CAACvL,QAAQ,GAAG,sCAAsC,GAAG,kCAAkC;EACtG,CAAC;EAED,IAAI,CAACwL,gBAAgB,GAAG,YAAY;IAChC,OAAO,IAAI,CAACxL,QAAQ,GAAG,2CAA2C,GAAG,uCAAuC;EAChH,CAAC;EAED,IAAI,CAAC78B,cAAc,GAAG,KAAK;AAE/B,CAAC,CAAC,CAAC;AAEP,+DAAe,eAAe,E;;;;;;;;;;;;;AClsB9B;AACA;AACA;AAC0C;AAE1CnJ,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,WAAW,EAAE,CAAC,gBAAgB,EAAE,UAAUpe,cAAc,EAAE;EAEzF,IAAI+wC,cAAc,GAAG,SAAjBA,cAAcA,CAAA,EAAe;IAC7B,OAAO;MACHC,iBAAiB,EAAEhxC,cAAc,CAACe,SAAS,CAAC,MAAM,CAAC;MACnDkwC,iBAAiB,EAAEjxC,cAAc,CAACe,SAAS,CAAC,UAAU,CAAC;MACvDmwC,oBAAoB,EAAElxC,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC;MACzDowC,yBAAyB,EAAEnxC,cAAc,CAACe,SAAS,CAAC,eAAe,CAAC;MACpEqwC,yBAAyB,EAAEpxC,cAAc,CAACe,SAAS,CAAC,eAAe,CAAC;MACpEy3B,4BAA4B,EAAEx4B,cAAc,CAACe,SAAS,CAAC,iBAAiB,CAAC;MACzEswC,0BAA0B,EAAErxC,cAAc,CAACe,SAAS,CAAC,gBAAgB,CAAC;MACtE0oB,2BAA2B,EAAEzpB,cAAc,CAACe,SAAS,CAAC,iBAAiB,CAAC;MACxEuwC,wBAAwB,EAAEtxC,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC;MAClEwwC,qBAAqB,EAAEvxC,cAAc,CAACe,SAAS,CAAC,UAAU,CAAC;MAC3DywC,sBAAsB,EAAExxC,cAAc,CAACe,SAAS,CAAC,WAAW,CAAC;MAC7D0wC,2BAA2B,EAAEzxC,cAAc,CAACe,SAAS,CAAC,iBAAiB,CAAC;MACxE2wC,sBAAsB,EAAE1xC,cAAc,CAACe,SAAS,CAAC,WAAW,CAAC;MAC7D4wC,8BAA8B,EAAE3xC,cAAc,CAACe,SAAS,CAAC,oBAAoB,CAAC;MAC9E6wC,kBAAkB,EAAE5xC,cAAc,CAACe,SAAS,CAAC,OAAO,CAAC;MACrD8wC,yBAAyB,EAAE7xC,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC;MAC9D+wC,8BAA8B,EAAE9xC,cAAc,CAACe,SAAS,CAAC,eAAe,CAAC;MACzEgxC,sBAAsB,EAAE/xC,cAAc,CAACe,SAAS,CAAC,WAAW,CAAC;MAC7DixC,sBAAsB,EAAEhyC,cAAc,CAACe,SAAS,CAAC,YAAY,CAAC;MAC9DkxC,oBAAoB,EAAEjyC,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC;MACzDmxC,+BAA+B,EAAElyC,cAAc,CAACe,SAAS,CAAC,sBAAsB,CAAC;MACjFoxC,+BAA+B,EAAEnyC,cAAc,CAACe,SAAS,CAAC,qBAAqB,CAAC;MAChFqxC,yBAAyB,EAAEpyC,cAAc,CAACe,SAAS,CAAC,eAAe,CAAC;MACpEsxC,qBAAqB,EAAEryC,cAAc,CAACe,SAAS,CAAC,WAAW,CAAC;MAC5DuxC,qBAAqB,EAAEtyC,cAAc,CAACe,SAAS,CAAC,sBAAsB;IAC1E,CAAC;EACL,CAAC;EAED,OAAO;IACHwxC,sBAAsB,EAAExB,cAAc;IACtCC,iBAAiB,EAAEhxC,cAAc,CAACe,SAAS,CAAC,MAAM,CAAC;IACnDyxC,oBAAoB,EAAE,MAAM;IAE5BC,uBAAuB,EAAE,SAAS;IAClCvB,oBAAoB,EAAElxC,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC;IAEzD2xC,yBAAyB,EAAE,WAAW;IACtCX,sBAAsB,EAAE/xC,cAAc,CAACe,SAAS,CAAC,WAAW,CAAC;IAE7D4xC,uBAAuB,EAAE,SAAS;IAClCV,oBAAoB,EAAEjyC,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC;IAEzD6xC,oBAAoB,EAAE,OAAO;IAC7B3B,iBAAiB,EAAEjxC,cAAc,CAACe,SAAS,CAAC,UAAU,CAAC;IACvDowC,yBAAyB,EAAEnxC,cAAc,CAACe,SAAS,CAAC,eAAe,CAAC;IACpEqwC,yBAAyB,EAAEpxC,cAAc,CAACe,SAAS,CAAC,eAAe,CAAC;IACpEy3B,4BAA4B,EAAEx4B,cAAc,CAACe,SAAS,CAAC,iBAAiB,CAAC;IACzEuxC,qBAAqB,EAAEtyC,cAAc,CAACe,SAAS,CAAC,sBAAsB,CAAC;IACvEswC,0BAA0B,EAAErxC,cAAc,CAACe,SAAS,CAAC,gBAAgB,CAAC;IACtEuwC,wBAAwB,EAAEtxC,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC;IAElE8xC,wBAAwB,EAAE,UAAU;IACpCtB,qBAAqB,EAAEvxC,cAAc,CAACe,SAAS,CAAC,UAAU,CAAC;IAE3D+xC,yBAAyB,EAAE,WAAW;IACtCtB,sBAAsB,EAAExxC,cAAc,CAACe,SAAS,CAAC,WAAW,CAAC;IAE7DgyC,qBAAqB,EAAE,OAAO;IAC9BtB,2BAA2B,EAAEzxC,cAAc,CAACe,SAAS,CAAC,iBAAiB,CAAC;IAExEiyC,yBAAyB,EAAE,WAAW;IACtCtB,sBAAsB,EAAE1xC,cAAc,CAACe,SAAS,CAAC,WAAW,CAAC;IAE7DkyC,uBAAuB,EAAE,UAAU;IACnCtB,8BAA8B,EAAE3xC,cAAc,CAACe,SAAS,CAAC,oBAAoB,CAAC;IAE9EmyC,qBAAqB,EAAE,OAAO;IAC9BtB,kBAAkB,EAAE5xC,cAAc,CAACe,SAAS,CAAC,OAAO,CAAC;IACrD8wC,yBAAyB,EAAE7xC,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC;IAC9D+wC,8BAA8B,EAAE9xC,cAAc,CAACe,SAAS,CAAC,eAAe,CAAC;IAEzEoyC,QAAQ,EAAE,CAAC;IACX1yC,mBAAmB,EAAE,EAAE;IAEvB2yC,YAAY,EAAE;MACVC,MAAM,EAAE,QAAQ;MAChBC,KAAK,EAAE,OAAO;MACdC,SAAS,EAAE,YAAY;MACvBC,OAAO,EAAE;IACb,CAAC;IAEDC,eAAe,EAAE,GAAG;IACpBC,OAAO,EAAE,sCAAsC;IAC/CC,iBAAiB,EAAE,mBAAmB;IAEtCC,qBAAqB,EAAE,cAAc;IACrCC,gBAAgB,EAAE,SAAS;IAC3BC,qBAAqB,EAAE,eAAe;IAEtCC,qBAAqB,EAAE,cAAc;IACrCC,iBAAiB,EAAE,UAAU;IAC7BC,eAAe,EAAE,YAAY;IAC7BC,mBAAmB,EAAE,iBAAiB;IACtCC,eAAe,EAAE,aAAa;IAC9BC,iBAAiB,EAAE,eAAe;IAClCC,mBAAmB,EAAE,YAAY;IACjCC,eAAe,EAAE,YAAY;IAC7BC,oBAAoB,EAAE,iBAAiB;IACvCC,sBAAsB,EAAE,EAAE;IAC1BC,gBAAgB,EAAE,gDAAgD;IAClEC,iBAAiB,EAAE,6BAA6B;IAEhD;IACA5D,MAAM,EAAEA,mDAAMA;EAClB,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;;AClHHzxC,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,YAAY,EAAE,CAAC,YAAY,EAAE,IAAI,EAChE,UAAU5e,UAAU,EAAEU,EAAE,EAAE;EAEtB,IAAI,CAACy0C,YAAY,GAAG,UAAUC,CAAC,EAAE;IAC7B,IAAI,CAACA,CAAC,IAAI,OAAQA,CAAE,KAAK,QAAQ,IAAIA,CAAC,CAACjvC,MAAM,IAAI,CAAC,EAC9C,OAAOivC,CAAC;IAEZ,IAAI/6B,CAAC,GAAG+6B,CAAC,CAAC11B,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IAC7B,OAAOrF,CAAC;EACZ,CAAC;EAED,IAAI,CAACg7B,gBAAgB,GAAG,UAAUC,aAAa,EAAE;IAC7C,IAAIhqC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI8X,IAAI,GAAG,IAAI;IACf,IAAIkyB,GAAG,GAAG,EAAE;IACZ1xC,CAAC,CAACyxC,aAAa,CAAC,CAAClkC,IAAI,CAAC,IAAI,CAAC,CAACpL,IAAI,CAAC,YAAY;MACzC,IAAIiU,GAAG,GAAG,EAAE;MACZ,IAAIu7B,MAAM,GAAG3xC,CAAC,CAAC,IAAI,CAAC,CAAC6D,IAAI,CAAC,aAAa,CAAC;MACxC,IAAI8tC,MAAM,IAAI,IAAI,EAAE;QAChB3xC,CAAC,CAAC,IAAI,CAAC,CAACuN,IAAI,CAAC,QAAQ,CAAC,CAACpL,IAAI,CAAC,YAAY;UACpC,IAAIyvC,GAAG,GAAG5xC,CAAC,CAAC,IAAI,CAAC;UACjB,IAAIkF,GAAG,GAAG0sC,GAAG,CAAC/tC,IAAI,CAAC,YAAY,CAAC;UAEhC,IAAIguC,MAAM,GAAG3sC,GAAG,IAAI,IAAI,IAAIA,GAAG,IAAI2H,SAAS;UAC5C,IAAIilC,GAAG,GAAGD,MAAM,GAAG3sC,GAAG,GAAG0sC,GAAG,CAACxtC,IAAI,CAAC,CAAC;UACnC,IAAI,CAACytC,MAAM,IAAI,CAAC,CAACC,GAAG,EAChBA,GAAG,GAAG,GAAG,GAAGtyB,IAAI,CAAC8xB,YAAY,CAACQ,GAAG,CAACr6B,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG;UAEnDrB,GAAG,CAAC7T,IAAI,CAACuvC,GAAG,CAAC;QACjB,CAAC,CAAC;QAEFJ,GAAG,CAACnvC,IAAI,CAAC6T,GAAG,CAACvF,IAAI,CAAC,GAAG,CAAC,CAAC;MAC3B;IACJ,CAAC,CAAC;IAEFpJ,QAAQ,CAACE,OAAO,CAAC+pC,GAAG,CAAC7gC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,OAAOpJ,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACmqC,mBAAmB,GAAG,UAAUN,aAAa,EAAE;IAChD,IAAIhqC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI8X,IAAI,GAAG,IAAI;IACf,IAAIkyB,GAAG,GAAG,EAAE;IACZ1xC,CAAC,CAACyxC,aAAa,CAAC,CAAClkC,IAAI,CAAC,0BAA0B,CAAC,CAACpL,IAAI,CAAC,YAAY;MAC/D,IAAIiU,GAAG,GAAG,EAAE;MACZ,IAAIu7B,MAAM,GAAG3xC,CAAC,CAAC,IAAI,CAAC,CAAC6D,IAAI,CAAC,aAAa,CAAC;MACxC,IAAI8tC,MAAM,IAAI,IAAI,EAAE;QAChB3xC,CAAC,CAAC,IAAI,CAAC,CAACuN,IAAI,CAAC,0BAA0B,CAAC,CAACpL,IAAI,CAAC,YAAY;UACtD,IAAIyvC,GAAG,GAAG5xC,CAAC,CAAC,IAAI,CAAC;UACjB,IAAIkF,GAAG,GAAG0sC,GAAG,CAAC/tC,IAAI,CAAC,YAAY,CAAC;UAEhC,IAAIguC,MAAM,GAAG3sC,GAAG,IAAI,IAAI,IAAIA,GAAG,IAAI2H,SAAS;UAC5C,IAAIilC,GAAG,GAAGD,MAAM,GAAG3sC,GAAG,GAAG0sC,GAAG,CAACxtC,IAAI,CAAC,CAAC;UACnC,IAAI,CAACytC,MAAM,IAAI,CAAC,CAACC,GAAG,EAChBA,GAAG,GAAG,GAAG,GAAGtyB,IAAI,CAAC8xB,YAAY,CAACQ,GAAG,CAACr6B,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG;UAEnDrB,GAAG,CAAC7T,IAAI,CAACuvC,GAAG,CAAC;QACjB,CAAC,CAAC;QAEFJ,GAAG,CAACnvC,IAAI,CAAC6T,GAAG,CAACvF,IAAI,CAAC,GAAG,CAAC,CAAC;MAC3B;IACJ,CAAC,CAAC;IAEFpJ,QAAQ,CAACE,OAAO,CAAC+pC,GAAG,CAAC7gC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,OAAOpJ,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACoqC,WAAW,GAAG,UAAUN,GAAG,EAAEO,QAAQ,EAAE;IACxC,IAAIxqC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAIwqC,OAAO;IACX,IAAIC,YAAY;;IAEhB;IACAD,OAAO,GAAG,IAAI9tB,IAAI,CAAC,CAACstB,GAAG,CAAC,EAAE;MAAElnC,IAAI,EAAE;IAAa,CAAC,CAAC;;IAEjD;IACA,IAAI4nC,SAAS,CAACC,UAAU,EAAE;MACtBD,SAAS,CAACC,UAAU,CAACH,OAAO,EAAED,QAAQ,CAAC;IAC3C,CAAC,MAAI;MAED;MACAE,YAAY,GAAG31B,QAAQ,CAAC81B,aAAa,CAAC,GAAG,CAAC;;MAE1C;MACAH,YAAY,CAACI,QAAQ,GAAGN,QAAQ;;MAEhC;MACAE,YAAY,CAACK,IAAI,GAAGj3C,MAAM,CAACk3C,GAAG,CAACC,eAAe,CAACR,OAAO,CAAC;;MAEvD;MACAC,YAAY,CAACz1B,KAAK,CAACgB,OAAO,GAAG,MAAM;;MAEnC;MACAlB,QAAQ,CAACm2B,IAAI,CAACC,WAAW,CAACT,YAAY,CAAC;;MAEvC;MACAA,YAAY,CAACz8B,KAAK,CAAC,CAAC;IACxB;IAEAjO,QAAQ,CAACE,OAAO,CAACsqC,QAAQ,CAAC;IAC1B,OAAOxqC,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACirC,cAAc,GAAG,UAAUnB,GAAG,EAAEO,QAAQ,EAAE;IAC3C,IAAIxqC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI8X,IAAI,GAAG,IAAI;IACf,IAAIszB,SAAS,GAAG,IAAI;IACpBv3C,MAAM,CAACwnB,yBAAyB,CAACgwB,MAAM,CAACC,QAAQ,KAAK,SAAS,GAAGhwB,OAAO,CAACC,IAAI,CAACgwB,qBAAqB,GAAGjwB,OAAO,CAACC,IAAI,CAACiwB,kBAAkB,EACpI,UAAUC,GAAG,EAAE;MACXA,GAAG,CAACjxB,OAAO,CAAC+vB,QAAQ,EAAE;QAAE5uB,MAAM,EAAE,IAAI;QAAEE,SAAS,EAAE;MAAM,CAAC,EACtD,UAAUN,IAAI,EAAE;QACZ,IAAIA,IAAI,IAAI,IAAI,EAAE;UACdxb,QAAQ,CAACqb,MAAM,CAAC,mBAAmB,CAAC;QACxC;QAEAgwB,SAAS,GAAG7vB,IAAI,CAAC6vB,SAAS;QAE1B7vB,IAAI,CAACa,YAAY,CAAC,UAAUC,UAAU,EAAE;UACpCA,UAAU,CAACC,UAAU,GAAG,YAAY;YAChC9iB,OAAO,CAACC,GAAG,CAAC,0BAA0B,CAAC;YACvCsG,QAAQ,CAACE,OAAO,CAACmrC,SAAS,CAAC;UAC/B,CAAC;UAED/uB,UAAU,CAACE,OAAO,GAAG,UAAUxG,CAAC,EAAE;YAC9Bvc,OAAO,CAACC,GAAG,CAAC,qBAAqB,GAAGsc,CAAC,CAACyG,QAAQ,CAAC,CAAC,CAAC;YACjDzc,QAAQ,CAACqb,MAAM,CAACrF,CAAC,CAAC;UACtB,CAAC;UAEDsG,UAAU,CAACM,IAAI,CAAC,CAAC,CAAC;UAElB,IAAI+uB,IAAI,GAAG,IAAIhvB,IAAI,CAAC,CAACstB,GAAG,CAAC,EAAE;YAAElnC,IAAI,EAAE;UAAa,CAAC,CAAC;UAElDuZ,UAAU,CAACO,KAAK,CAAC8uB,IAAI,CAAC;QAC1B,CAAC,EACD,UAAU/yC,GAAG,EAAE;UACXoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;QACxB,CAAC,CAAC;MACN,CAAC,EACD,UAAUA,GAAG,EAAE;QACXoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACxB,CAAC,CAAC;IACR,CAAC,CAAC;IAEH,OAAOoH,QAAQ,CAACG,OAAO;EAC3B,CAAC;AAEL,CAAC,CAAC,CAAC,C;;;;;;;;;;;;ACnJP5L,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,iBAAiB,EAAE,CAClD,IAAI,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,WAAW,EAAE,mBAAmB,EAAE,iBAAiB,EAAC,eAAe,EAAC,UAAU,EAAE,YAAY,EAC/J,UAAUle,EAAE,EAAET,aAAa,EAAEkwB,qBAAqB,EAAEvb,eAAe,EAAEqmB,SAAS,EAAEx6B,iBAAiB,EAAEoU,eAAe,EAAEzU,aAAa,EAAEG,QAAQ,EAAEuU,UAAU,EAAE;EAErJ,IAAI,CAACoiC,oBAAoB,GAAG,KAAK;EAEjC,IAAI,CAAChc,aAAa,GAAG,IAAI;EACzB,IAAI,CAACic,wBAAwB,GAAG,YAAY;IAExC,IAAI,CAAC,IAAI,CAACjc,aAAa,EAAE;MACrB,IAAI,CAACA,aAAa,GAAGD,SAAS,CAAC,UAAUgI,CAAC,EAAE;QACxC,IAAIhjC,aAAa,CAACmB,QAAQ,EAAE;UACxB;UACA,IAAIg2C,QAAQ,GAAGv3C,OAAO,CAACw3C,OAAO,CAAC,MAAM,CAAC,CAACD,QAAQ,CAAC,CAAC;UACjD,IAAIE,EAAE,GAAGF,QAAQ,CAACG,GAAG,CAAC,iBAAiB,CAAC;;UAEzC;;UAEC,OAAOD,EAAE,CAACE,gBAAgB,CAAC,KAAK,CAAC;UAChC;QACL;MACJ,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;IACjB;IAEA,IAAIlsC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IACtB,OAAOF,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAChH,UAAU,GAAG,YAAY;IAC1B,OAAOxE,aAAa,CAACulC,iBAAiB,KAAK,CAAC,IACxCvlC,aAAa,CAACulC,iBAAiB,KAAK,CAAC,IAAI,IAAI,CAAC0R,oBAAoB,KAAK,IAAI;EACnF,CAAC;EAED,IAAI,CAACO,QAAQ,GAAG,YAAW;IACvB,OAAOx3C,aAAa,CAACulC,iBAAiB;EAC1C,CAAC;EAED,IAAI,CAACkS,wBAAwB,GAAG,UAAStsC,WAAW,EAAE;IAClD;IACA,IAAI,CAACnL,aAAa,CAACmB,QAAQ,KAAK,IAAI,CAACqD,UAAU,CAAC,CAAC,IAAI2G,WAAW,CAAC,EAAE;MAC/D,OAAO+kB,qBAAqB;IAChC;IACA,OAAQlwB,aAAa,CAACX,MAAM,IAAI,CAACF,MAAM,CAACu4C,WAAW,GAC7CxnB,qBAAqB,GACrBlwB,aAAa,CAACmB,QAAQ,GAClB+uB,qBAAqB,GACrBlwB,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,GAC1CH,eAAe,GACfD,eAAe;EACjC,CAAC;;EAED;EACA,IAAI,CAACzL,aAAa,GAAG,UAAUlB,IAAI,EAAEkzB,IAAI,EAAEC,KAAK,EAAErlB,OAAO,EAAuB;IAAA,IAArB3K,WAAW,GAAA8F,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,KAAK;IAC1E,IAAG6E,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC6hC,WAAW,EAAE;MAAE;MACnCxsC,WAAW,GAAG,IAAI;IACtB;IAEA,IAAIolB,QAAQ,GAAG,IAAI,CAACknB,wBAAwB,CAACtsC,WAAW,CAAC;IACzD,IAAIysC,eAAe,GAAI53C,aAAa,CAACX,MAAM,IAAI,CAACF,MAAM,CAACu4C,WAAW,GAAI,KAAK,GAAG13C,aAAa,CAACmB,QAAQ,IAAI,IAAI,CAACqD,UAAU,CAAC,CAAC;IAEzH,IAAI4G,EAAE,GAAGmlB,QAAQ,CAACrnB,aAAa,CAAClB,IAAI,EAAEkzB,IAAI,EAAEC,KAAK,EAAErlB,OAAO,CAAC,CAAChS,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC5ErE,OAAO,CAACC,GAAG,CAACwrB,QAAQ,KAAKL,qBAAqB,GAAG,qBAAqB,GAAG,sBAAsB,CAAC;MAChG,IAAI7kB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC,SAAM,CAAC,UAAUvH,GAAG,EAAE;MACpB,IAAI,CAAC2zC,eAAe,EAChB,MAAM3zC,GAAG;MAEb,IAAIA,GAAG,CAAC4zC,MAAM,KAAK,CAAC,CAAC,EACjB,MAAM5zC,GAAG,CAAC,KACT;QACD,IAAIssB,QAAQ,GAAGvwB,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,GAAGH,eAAe,GAAGD,eAAe;QACjG,OAAO4b,QAAQ,CAACrnB,aAAa,CAAClB,IAAI,EAAEkzB,IAAI,EAAEC,KAAK,EAAErlB,OAAO,CAAC,CAAChS,IAAI,CAAC,UAAUqF,GAAG,EAAE;UAC1E,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;UAC1B,OAAOqH,QAAQ,CAACG,OAAO;QAC3B,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;;EAED;EACA,IAAI,CAAC0sC,WAAW,GAAG,UAAUC,EAAE,EAAE;IAC7B;IACA,IAAIxnB,QAAQ,GAAGL,qBAAqB;IACpC,IAAI9kB,EAAE,GAAGmlB,QAAQ,CAACunB,WAAW,CAACC,EAAE,CAAC,CAACj0C,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAClD,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;EAED,IAAI,CAACgB,cAAc,GAAG,UAAU1L,QAAQ,EAAE;IAEtC,IAAI0K,EAAE,GAAG8kB,qBAAqB,CAAC9jB,cAAc,CAAC1L,QAAQ,CAAC,CAACoD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACxE,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;EAED,IAAI,CAACzH,aAAa,GAAG,YAAY;IAC7B,OAAOusB,qBAAqB,CAACvsB,aAAa,CAAC,CAAC,CAACG,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC7D,OAAOhJ,aAAa,CAAC63C,cAAc,CAAC7uC,GAAG,CAAC;IAC5C,CAAC,CAAC,SAAM,CAAC,UAAUlF,GAAG,EAAE;MACpB,OAAO9D,aAAa,CAAC83C,aAAa,CAACh0C,GAAG,CAAC;IAC3C,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACuL,cAAc,GAAG,UAAU9O,QAAQ,EAAE;IACtC;IACA,IAAIw3C,EAAE,GAAG1gB,IAAI,CAAC2T,KAAK,CAAC3T,IAAI,CAACC,SAAS,CAAC/2B,QAAQ,CAAC,CAAC;IAC7C,OAAOw3C,EAAE,CAAC10C,YAAY;IACtB,OAAO00C,EAAE,CAAC30C,aAAa;IACvB,OAAO20C,EAAE,CAAC90C,QAAQ;IAClB,OAAO80C,EAAE,CAACvc,QAAQ;IAClB,OAAOuc,EAAE,CAACva,OAAO;IACjB,OAAOua,EAAE,CAACC,iBAAiB;IAC3B,OAAOD,EAAE,CAACE,cAAc;IACxB,OAAOF,EAAE,CAACG,SAAS;IACnB,OAAOH,EAAE,CAACI,oBAAoB;IAC9B,OAAOJ,EAAE,CAACK,oBAAoB;IAC9B,OAAOL,EAAE,CAACM,oBAAoB;IAC9B,OAAON,EAAE,CAACO,oBAAoB;IAC9B,OAAOP,EAAE,CAACQ,oBAAoB;IAC9B,OAAOR,EAAE,CAACS,oBAAoB;IAC9B,OAAOT,EAAE,CAACU,oBAAoB;IAC9B,OAAOV,EAAE,CAACW,oBAAoB;IAC9B,OAAOX,EAAE,CAACY,oBAAoB;IAC9B,OAAOZ,EAAE,CAACa,qBAAqB;IAC/B,OAAOb,EAAE,CAAC/Z,IAAI;IACd,OAAO+Z,EAAE,CAACc,WAAW;IACrB,OAAOd,EAAE,CAACj1C,OAAO;IACjB,OAAOi1C,EAAE,CAACe,QAAQ;IAElB,IAAI7tC,EAAE,GAAG8kB,qBAAqB,CAAC1gB,cAAc,CAAC0oC,EAAE,CAAC,CAACp0C,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAClE,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;EAED,IAAI,CAAC8tC,cAAc,GAAG,UAAUC,UAAU,EAAE;IAExC,IAAI/tC,EAAE,GAAG8kB,qBAAqB,CAACgpB,cAAc,CAACC,UAAU,CAAC,CAACr1C,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC1E,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;;EAED;EACA,IAAI,CAACguC,mBAAmB,GAAG,KAAK;;EAEhC;AACR;AACA;EACQ,IAAI,CAACC,mBAAmB,GAAG,UAAUC,OAAO,EAAE;IAC1Cx0C,OAAO,CAACy0C,IAAI,CAAC,gBAAgB,CAAC;IAC9B,IAAInuC,EAAE,GAAG,IAAI,CAACmsC,gBAAgB,CAAC,IAAI,EAAE+B,OAAO,CAAC;IAC7C,IAAME,QAAQ,GAAG,CAAC,CAACx5C,aAAa,CAACX,MAAM,IAAIF,MAAM,CAACu4C,WAAW,MAAM,IAAI,CAACF,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAACA,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;IAClH,IAAIgC,QAAQ,EAAE;MACVpuC,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAE,UAAUqF,GAAG,EAAE;QACzBrE,OAAO,CAAC20C,OAAO,CAAC,gBAAgB,CAAC;QACjC,IAAIC,QAAQ;QACZ,IAAIvwC,GAAG,IAAIwwC,OAAA,CAAOxwC,GAAG,MAAK,QAAQ,IAAI,YAAY,IAAIA,GAAG,EAAE;UACvD,OAAOhJ,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;QAC7C,CAAC,MAAM;UACH0B,QAAQ,GAAG,IAAI,CAACxC,wBAAwB,CAAC,CAAC;QAC9C;QACAwC,QAAQ,GAAGA,QAAQ,CAAC51C,IAAI,CAAC,YAAY;UAAC,OAAQ3D,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;QAAA,CAAC,CAAC;QAClF,OAAO0B,QAAQ;MACnB,CAAC,CAAEE,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC,MAAM;MACHxuC,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;QACrBgB,OAAO,CAAC20C,OAAO,CAAC,gBAAgB,CAAC;QACjC,OAAOt5C,aAAa,CAAC63C,cAAc,CAAC,KAAK,CAAC;MAC9C,CAAC,CAAC;IACN;IAEA,OAAO5sC,EAAE;EACb,CAAC;EAED,IAAI,CAACmsC,gBAAgB,GAAG,UAAUvJ,KAAK,EAAEsL,OAAO,EAAE;IAC9C,IAAI,IAAI,CAACF,mBAAmB,EAAE;MAC1B,OAAOj5C,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;IAC7C;IAEA,IAAI,IAAI,CAACR,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;MACvB1yC,OAAO,CAACC,GAAG,CAAC,0CAA0C,CAAC;MACvD,OAAO5E,aAAa,CAAC63C,cAAc,CAAC,KAAK,CAAC;IAC9C;IACA,IAAM6B,cAAc,GAAG,IAAI,CAACrC,QAAQ,CAAC,CAAC,KAAK,CAAC;IAE5Cp0B,IAAI,GAAG,IAAI;IACX,IAAIhY,EAAE;IACN,IAAImlB,QAAQ,GAAGvwB,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,GAAGH,eAAe,GAAGD,eAAe;;IAEjG;IACA,IAAI3U,aAAa,CAACX,MAAM,IAAI,CAACF,MAAM,CAACu4C,WAAW,EAAE;MAC7CtsC,EAAE,GAAG8kB,qBAAqB,CAAC4pB,iBAAiB,CAACD,cAAc,CAAC,CACvD/1C,IAAI,CAAC,UAAUE,IAAI,EAAE;QAClB,IAAI61C,cAAc,IAAI71C,IAAI,CAAC+1C,UAAU,EAAE;UACnC32B,IAAI,CAAC6zB,oBAAoB,GAAG,IAAI;UAChCnyC,OAAO,CAACC,GAAG,CAAC,iDAAiD,CAAC;UAC9D,OAAO5E,aAAa,CAAC63C,cAAc,CAAC;YAAC+B,UAAU,EAAE;UAAI,CAAC,CAAC;QAC3D;QACA,OAAOv5C,iBAAiB,CAACw5C,iBAAiB,CAACh2C,IAAI,CAAC;MACpD,CAAC,CAAC;IACV,CAAC,MAAM;MACH,IAAIhE,aAAa,CAACX,MAAM,IAAIW,aAAa,CAACmB,QAAQ,EAAE;QAChDiK,EAAE,GAAGmlB,QAAQ,CAAC0pB,iBAAiB,CAACjM,KAAK,CAAC,CACjClqC,IAAI,CAAC,UAAUqF,GAAG,EAAE;UACjB,IAAIA,GAAG,EAAE;YACL,OAAOonB,QAAQ,CAAC2pB,gBAAgB,CAACZ,OAAO,KAAK,IAAI,GAAG,KAAK,GAAGtL,KAAK,CAAC,CAC7DlqC,IAAI,CAAC,UAAUuhB,IAAI,EAAE;cAClB,OAAO6K,qBAAqB,CAACiqB,gBAAgB,CAAC90B,IAAI,EAAEw0B,cAAc,CAAC,CAAC/1C,IAAI,CAAC,UAAUs2C,OAAO,EAAE;gBACxF,IAAIP,cAAc,IAAIO,OAAO,CAACp2C,IAAI,CAAC+1C,UAAU,EAAE;kBAC3C32B,IAAI,CAAC6zB,oBAAoB,GAAG,IAAI;kBAChCnyC,OAAO,CAACC,GAAG,CAAC,iDAAiD,CAAC;kBAC9D,OAAO5E,aAAa,CAAC63C,cAAc,CAAC;oBAAC+B,UAAU,EAAE;kBAAI,CAAC,CAAC;gBAC3D;gBACA,OAAO55C,aAAa,CAAC63C,cAAc,CAACoC,OAAO,CAAC;cAChD,CAAC,CAAC;YACN,CAAC,CAAC,CACDt2C,IAAI,CAAC,UAAUC,IAAI,EAAE;cAClB,IAAIA,IAAI,IAAIA,IAAI,CAACg2C,UAAU,EAAE;gBACzB,OAAO55C,aAAa,CAAC63C,cAAc,CAACj0C,IAAI,CAAC;cAC7C;cACA,IAAI,CAACA,IAAI,CAACC,IAAI,IAAID,IAAI,CAACC,IAAI,CAACq2C,aAAa,EACrC,OAAOl6C,aAAa,CAAC63C,cAAc,CAAC,KAAK,CAAC;cAG9C,OAAO73C,aAAa,CAACm6C,MAAM,CAACl3B,IAAI,EAAErf,IAAI,CAACC,IAAI,CAACoF,SAAS,CAAC,CACjDtF,IAAI,CAAC,UAAUy2C,QAAQ,EAAE;gBACtBx2C,IAAI,CAACC,IAAI,CAACoF,SAAS,GAAG,IAAI;gBAC1B,IAAMpF,IAAI,GAAG;kBACTqhB,IAAI,EAAEthB,IAAI,CAACC,IAAI,CAACw2C,YAAY;kBAC5Bt/B,GAAG,EAAEnR,KAAK,CAAC0wC,OAAO,CAACF,QAAQ,CAAC,GAAGA,QAAQ,GAAG;gBAC9C,CAAC;gBAED,OAAOhqB,QAAQ,CAACmqB,gBAAgB,CAAC12C,IAAI,CAAC;cAC1C,CAAC,CAAC;YACV,CAAC,CAAC;UACV;UAEA,OAAO7D,aAAa,CAAC63C,cAAc,CAAC,KAAK,CAAC;QAC9C,CAAC,CAAC;MACV,CAAC,MACI;QACD,IAAI3sC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAAC,KAAK,CAAC;QACvBH,EAAE,GAAGC,QAAQ,CAACG,OAAO;MACzB;;MAEA;MACAJ,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,UAAUE,IAAI,EAAE;QACzB,IAAI21C,OAAA,CAAO31C,IAAI,MAAK,QAAQ,IAAI,YAAY,IAAIA,IAAI,EAAE;UAClD,OAAO7D,aAAa,CAAC63C,cAAc,CAACh0C,IAAI,CAAC;QAC7C;QAEA,OAAOusB,QAAQ,CAACupB,iBAAiB,CAAC91C,IAAI,CAAC,CAACF,IAAI,CAAC,UAAUE,IAAI,EAAE;UACrD,OAAOxD,iBAAiB,CAACw5C,iBAAiB,CAACh2C,IAAI,CAAC;QACxD,CAAC,CAAC;MACN,CAAC,CAAC;IACN;IAEA,OAAOoH,EAAE,CAACtH,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC1Bia,IAAI,CAACg2B,mBAAmB,GAAG,KAAK;MAChC,OAAOj5C,aAAa,CAAC63C,cAAc,CAAC7uC,GAAG,CAAC;IAC5C,CAAC,CAAC,SAAM,CAAC,UAAUlF,GAAG,EAAE;MACpBmf,IAAI,CAACg2B,mBAAmB,GAAG,KAAK;MAChC,OAAOj5C,aAAa,CAAC83C,aAAa,CAACh0C,GAAG,CAAC;IAC3C,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACwL,iBAAiB,GAAG,UAAUnF,EAAE,EAAE;IACnC,IAAI;MACA,IAAI8Y,IAAI,GAAG,IAAI;MACf,IAAMo2B,QAAQ,GAAG,IAAI,CAACh1C,UAAU,CAAC,CAAC,IAAI,EAAExE,aAAa,CAACX,MAAM,IAAI,CAACF,MAAM,CAACu4C,WAAW,CAAC;MACpF,IAAInnB,QAAQ,GAAGvwB,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,GAAGH,eAAe,GAAGD,eAAe;MACjG,IAAI6kC,QAAQ,IAAI,CAAClvC,EAAE,EAAE;QACjB,OAAOnK,aAAa,CAAC63C,cAAc,CAAC,CAAC;MACzC;MACA,OAAO9nB,qBAAqB,CAAC4nB,WAAW,CAACxtC,EAAE,CAAC,CAACxG,IAAI,CAAC,UAAUC,IAAI,EAAE;QAC9D,IAAI42C,SAAS,GAAG52C,IAAI,CAACC,IAAI,CAACoF,SAAS,CAACwN,GAAG,CAAC,UAAUrJ,CAAC,EAAE;UACjD,IAAIgH,OAAO,GAAGhH,CAAC,CAAC7K,QAAQ,CAACyO,IAAI,CAAC,UAAArL,CAAC;YAAA,OAAI,CAAC,CAACA,CAAC,CAAC80C,OAAO;UAAA,EAAC;UAC/C,IAAI,CAACrmC,OAAO,EAAE;YACVA,OAAO,GAAGhH,CAAC,CAAC7K,QAAQ,CAACwD,MAAM,GAAGqH,CAAC,CAAC7K,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;UACpD;UACA,IAAIm4C,MAAM,GAAG16C,aAAa,CAAC26C,gBAAgB,CAACvtC,CAAC,CAAC;UAC9CstC,MAAM,CAACvwC,EAAE,GAAGiD,CAAC,CAACrK,EAAE;UAChB23C,MAAM,CAACrpC,KAAK,GAAG+C,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC3R,KAAK,GAAG2R,OAAO,CAAC3R,KAAK,GAAG,EAAE;UAC9Di4C,MAAM,CAACrwC,KAAK,GAAG+J,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC5R,KAAK,GAAG4R,OAAO,CAAC5R,KAAK,GAAG,EAAE;UAC9Dk4C,MAAM,CAACppC,WAAW,GAAG8C,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC1R,WAAW,GAAG0R,OAAO,CAAC1R,WAAW,GAAG,EAAE;UAChFg4C,MAAM,CAACE,SAAS,GAAG56C,aAAa,CAAC26C,gBAAgB,CAACvtC,CAAC,CAACzK,SAAS,CAAC;UAC9D+3C,MAAM,CAACG,gBAAgB,GAAG76C,aAAa,CAAC26C,gBAAgB,CAACvtC,CAAC,CAAC0tC,eAAe,CAAC;UAC3EJ,MAAM,CAACK,SAAS,GAAG/6C,aAAa,CAAC26C,gBAAgB,CAACvtC,CAAC,CAAC4xB,SAAS,CAAC;UAE9D,OAAO0b,MAAM;QACjB,CAAC,CAAC;QAEF,IAAM72C,IAAI,GAAG;UACTkX,GAAG,EAAEy/B;QACT,CAAC;;QAED;QACA,OAAOpqB,QAAQ,CAACmqB,gBAAgB,CAAC12C,IAAI,EAAE,IAAI,CAAC,CAACF,IAAI,CAAC,YAAY;UAC1D,OAAOysB,QAAQ,CAACupB,iBAAiB,CAAC,IAAI,EAAExvC,EAAE,CAAC,CAACxG,IAAI,CAAC,UAAUE,IAAI,EAAE;YAC7D,OAAOxD,iBAAiB,CAACw5C,iBAAiB,CAACh2C,IAAI,EAAE,IAAI,CAAC;UAC1D,CAAC,CAAC;QACN,CAAC,CAAC;MACN,CAAC,CAAC;IACN,CAAC,CAAC,OAAOqd,CAAC,EAAE;MACRvc,OAAO,CAACqkB,KAAK,CAAC9H,CAAC,CAAC;MAChB,OAAOlhB,aAAa,CAAC83C,aAAa,CAAC52B,CAAC,CAAC;IACzC;EACJ,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;AC1UPzhB,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,qBAAqB,EACtD,CAAC,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAChD,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EACrH,UAAUE,UAAU,EAAED,MAAM,EAAEO,SAAS,EAAEipB,YAAY,EACjDhpB,QAAQ,EAAEJ,eAAe,EAAED,YAAY,EAAEM,cAAc,EAAEJ,aAAa,EAAEH,aAAa,EAAE0X,YAAY,EAAE;EAErG;EACA3X,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE1pB,SAAS,CAAC0xC;EAAuB,CAAC,CAAC,CAAC,CAAC;;EAEhG,IAAI,CAACzoB,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;IACZ;EACQ;EAEApqB,MAAM,CAACk5B,WAAW,GAAG,KAAK;EAC1Bl5B,MAAM,CAACgW,OAAO,GAAG,CAAC,CAAC;EAEnBhW,MAAM,CAACq5B,YAAY,GAAG,CAAC;EACvBr5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;EACrBt5B,MAAM,CAACu5B,WAAW,GAAG,EAAE;EACvBv5B,MAAM,CAACw5B,YAAY,GAAG,IAAI;EAC1Bx5B,MAAM,CAACq7C,gBAAgB,GAAG,EAAE;EAC5Br7C,MAAM,CAACs7C,YAAY,GAAG,EAAE;EACxBt7C,MAAM,CAACu7C,cAAc,GAAG,CAAC;EACzB;EACA;EACAv7C,MAAM,CAACa,UAAU,GAAG,IAAI;EAExBb,MAAM,CAAC+B,IAAI,GAAG,CAAC;IAAEy5C,OAAO,EAAE/6C,cAAc,CAACe,SAAS,CAAC,WAAW;EAAE,CAAC,EAAE;IAAEg6C,OAAO,EAAE/6C,cAAc,CAACe,SAAS,CAAC,UAAU;EAAE,CAAC,CAAC;EAErHxB,MAAM,CAAC45B,GAAG,GAAG,UAAU5zB,CAAC,EAAE;IACtB,IAAIA,CAAC,EACD,OAAO3F,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAAC5zB,CAAC,CAAC,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC;EACZ,CAAC;;EAED;EACAhG,MAAM,CAACkE,IAAI,GAAG,EAAE;EAChBlE,MAAM,CAACkJ,SAAS,GAAG,KAAK;;EAExB;EACAlJ,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB/nB,CAAC,CAACC,OAAO,CAAC,CAAC;IACX3D,eAAe,CAACgJ,aAAa,CACzB,EAAE,EAAEpJ,MAAM,CAACq5B,YAAY,EAAEr5B,MAAM,CAACu5B,WACpC,CAAC,CAACv1B,IAAI,CAAC,UAAUC,IAAI,EAAE;MACnBjE,MAAM,CAACkE,IAAI,GAAGD,IAAI,CAACqF,SAAS;MAC5B8wB,QAAQ,CAACn2B,IAAI,CAAC80B,KAAK,CAAC;MACpBj1B,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAMy1B,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAA,EAAc;QACzC,IAAI,CAAC95B,MAAM,CAACkJ,SAAS,IAAIlJ,MAAM,CAACq5B,YAAY,GAAGr5B,MAAM,CAACs5B,UAAU,EAAE;UAC9Dx1B,CAAC,CAACC,OAAO,CAAC,CAAC;UACX/D,MAAM,CAACkJ,SAAS,GAAG,IAAI;UACvBlJ,MAAM,CAACq5B,YAAY,EAAG;UAEtBj5B,eAAe,CAACgJ,aAAa,CACzBpJ,MAAM,CAACa,UAAU,EACjBb,MAAM,CAACq5B,YAAY,EACnBr5B,MAAM,CAACu5B,WAAW,EAClBv5B,MAAM,CAACgW,OACX,CAAC,CAAChS,IAAI,CAAC,UAACC,IAAI,EAAK;YACbA,IAAI,CAACqF,SAAS,CAACoD,OAAO,CAAC,UAAC9M,EAAE,EAAK;cAC3B,IAAI,CAACI,MAAM,CAACkE,IAAI,CAAC6B,MAAM,CAAC,UAACo0B,GAAG;gBAAA,OAAKA,GAAG,CAAC/2B,EAAE,KAAKxD,EAAE,CAACwD,EAAE;cAAA,EAAC,CAACgD,MAAM,GAAG,CAAC,EAAE;gBAC3DpG,MAAM,CAACkE,IAAI,CAACmC,IAAI,CAACzG,EAAE,CAAC;cACxB;YACJ,CAAC,CAAC;YACFw6B,QAAQ,CAACn2B,IAAI,CAAC80B,KAAK,CAAC;YAEpB/4B,MAAM,CAACkJ,SAAS,GAAG,KAAK;YACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;UACjB,CAAC,EAAE,UAASF,GAAG,EAAE;YACbnE,MAAM,CAACkJ,SAAS,GAAG,KAAK;YACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;YACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;UAC/B,CAAC,CAAC;QACN;MACJ,CAAC;MAEDk2B,iBAAiB,CAACP,yBAAyB,CAAC;MAE5C95B,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;IAC7B,CAAC,EACD,UAAU1oB,GAAG,EAAE;MACXL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAEDnE,MAAM,CAACs6B,MAAM,GAAG,YAAY;IACxBx2B,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,IAAI/D,MAAM,CAACa,UAAU,EAAE;MACnBb,MAAM,CAACq7C,gBAAgB,GAAG56C,cAAc,CAACe,SAAS,CAAC,qBAAqB,CAAC,GAAG,GAAG,GAAGxB,MAAM,CAACa,UAAU,GAAG,GAAG;IAC7G,CAAC,MAAM;MACHb,MAAM,CAACq7C,gBAAgB,GAAGr7C,MAAM,CAACs7C,YAAY;IACjD;IACAl7C,eAAe,CAACgJ,aAAa,CACzBpJ,MAAM,CAACa,UAAU,EAAE,CAAC,EAAEb,MAAM,CAACu5B,WAAW,EAAEv5B,MAAM,CAACgW,OACrD,CAAC,CAAChS,IAAI,CAAC,UAAUC,IAAI,EAAE;MACnBjE,MAAM,CAACkE,IAAI,GAAGD,IAAI,CAACqF,SAAS;MAC5BtJ,MAAM,CAACq5B,YAAY,GAAG,CAAC;MAEvBe,QAAQ,CAACn2B,IAAI,CAAC80B,KAAK,CAAC;MACpBj1B,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb,IAAGJ,IAAI,CAAC80B,KAAK,IAAI,CAAC,EAAE;QAChB,IAAIne,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,qBAAqB,CAAC;QACzDvB,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;UACnC6P,OAAO,EAAED,GAAG;UACZtM,IAAI,EAAE;QACV,CAAC,CAAC;QAEFsJ,YAAY,CAACkD,OAAO,CAAC,CAAC;MAC1B;IAEJ,CAAC,EAAE,UAAS3W,GAAG,EAAE;MACbL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAED,SAASi2B,QAAQA,CAAClO,KAAK,EAAE;IACrBlsB,MAAM,CAACu7C,cAAc,GAAGrvB,KAAK;IAC7B,IAAIqO,IAAI,GAAGv6B,MAAM,CAACu5B,WAAW;IAC7Bv5B,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAC3Cv6B,MAAM,CAACw5B,YAAY,GAAGtN,KAAK;IAC3B,IAAIlsB,MAAM,CAACs5B,UAAU,KAAK,CAAC,EAAE;MACzBt5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;IACzB;EACJ;EAAC;EAGDt5B,MAAM,CAAC4L,WAAW,GAAG,YAAY;IAC7B3L,UAAU,CAAC+K,UAAU,CAAC,kBAAkB,EAAE;MAAE7J,IAAI,EAAE,KAAK;MAAE0D,eAAe,EAAG;IAAI,CAAC,CAAC;EACrF,CAAC;EAED7E,MAAM,CAAC2O,YAAY,GAAG,UAAU/N,QAAQ,EAAE;IACtCX,UAAU,CAAC+K,UAAU,CAAC,mBAAmB,EAAEpK,QAAQ,CAAC;EACxD,CAAC;EAEDZ,MAAM,CAAC8P,mBAAmB,GAAG,UAAUlP,QAAQ,EAAE;IAC7C;IACA,IAAI6T,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,CAAC7T,QAAQ,CAACgC,QAAQ,IAAIhC,QAAQ,CAACgC,QAAQ,CAACwD,MAAM,IAAI,CAAC,EAAE;MACrDqO,OAAO,GAAG;QACN/R,IAAI,EAAE9B,QAAQ,CAAC8B,IAAI;QACnBqL,QAAQ,EAAE,IAAI;QACdjL,KAAK,EAAE,IAAI;QACXC,WAAW,EAAE,IAAI;QACjB8K,GAAG,EAAE,IAAI;QACThL,KAAK,EAAE,IAAI;QACXi4C,OAAO,EAAE,IAAI;QACbltC,cAAc,EAAE,KAAK;QACrBxK,EAAE,EAAE;MACR,CAAC;MAEDxC,QAAQ,CAACgC,QAAQ,CAACyD,IAAI,CAACoO,OAAO,CAAC;IACnC;IAEAA,OAAO,GAAG7T,QAAQ,CAACgC,QAAQ,CAAC,CAAC,CAAC;IAC9B3C,UAAU,CAAC+K,UAAU,CAAC,0BAA0B,EAAE;MAAE+E,QAAQ,EAAEnP,QAAQ;MAAEwH,OAAO,EAAEqM;IAAQ,CAAC,CAAC;EAC/F,CAAC;EAEDzU,MAAM,CAACgQ,mBAAmB,GAAG,UAAUpP,QAAQ,EAAE0N,IAAI,EAAE;IACnD;IACA,IAAIC,OAAO,GAAG,IAAI;IAElB,IAAI,CAAC,CAAC3N,QAAQ,CAACoC,SAAS,EACpBuL,OAAO,GAAG3N,QAAQ,CAACoC,SAAS,CAAC+C,MAAM,CAAC,UAAUnG,EAAE,EAAE;MAAE,OAAOA,EAAE,CAACsD,IAAI,IAAIoL,IAAI;IAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAErF,IAAI,CAACC,OAAO,EAAE;MACVA,OAAO,GAAG;QACNtL,KAAK,EAAE,IAAI;QACX+J,KAAK,EAAE,IAAI;QACXP,IAAI,EAAE,IAAI;QACVE,KAAK,EAAE,IAAI;QACXE,QAAQ,EAAE,IAAI;QACdI,OAAO,EAAE,IAAI;QACb/J,IAAI,EAAEoL,IAAI;QACVvB,cAAc,EAAE,IAAI;QACpB3J,EAAE,EAAE;MACR,CAAC;MAEDxC,QAAQ,CAACoC,SAAS,CAACqD,IAAI,CAACkI,OAAO,CAAC;IACpC;IAEAA,OAAO,GAAG3N,QAAQ,CAACoC,SAAS,CAAC+C,MAAM,CAAC,UAAUnG,EAAE,EAAE;MAAE,OAAOA,EAAE,CAACsD,IAAI,IAAIoL,IAAI;IAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjFrO,UAAU,CAAC+K,UAAU,CAAC,0BAA0B,EAAE;MAAE+E,QAAQ,EAAEnP,QAAQ;MAAE2H,OAAO,EAAEgG;IAAQ,CAAC,CAAC;EAC/F,CAAC;EAEDvO,MAAM,CAAC6sB,gBAAgB,GAAG,YAAY;IAClC;IACArsB,QAAQ,CAAC,YAAY;MACjBP,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;IACxC,CAAC,CAAC;EACN,CAAC;EAEDhL,MAAM,CAACqC,GAAG,CAAC,sBAAsB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACtD9D,eAAe,CAACq3C,gBAAgB,CAAC,IAAI,CAAC,CAACzzC,IAAI,CAAC,UAAAqF,GAAG,EAAI;MAC/CrJ,MAAM,CAACs6B,MAAM,CAAC,CAAC;IACnB,CAAC,CAAC;EACN,CAAC,CAAC;EAEFt6B,MAAM,CAACy7C,cAAc,GAAG,CAAC,CAAC;EAE1Bz7C,MAAM,CAAC07C,YAAY,GAAG,UAAUp5C,KAAK,EAAE1C,EAAE,EAAE;IACvCI,MAAM,CAACy7C,cAAc,GAAG77C,EAAE,GAAG,GAAG,GAAG,IAAI67B,IAAI,CAAC,CAAC;IAE7C33B,CAAC,CAAC,SAAS,GAAGlE,EAAE,GAAG,IAAI,CAAC,CAAC+7C,QAAQ,CAAC,QAAQ,CAAC;IAC3C,OAAO,KAAK;EAChB,CAAC;EAED37C,MAAM,CAAC47C,gBAAgB,GAAG,UAASzpC,IAAI,EAAEG,OAAO,EAAEL,KAAK,EAAEC,KAAK,EAAE;IAC5D,OAAOpO,CAAC,CAAC+3C,IAAI,CAAC,CAAC1pC,IAAI,EAAEG,OAAO,EAAEL,KAAK,EAAEC,KAAK,CAAC,EAAE4pC,OAAO,CAAC,CAACnnC,IAAI,CAAC,IAAI,CAAC;EACpE,CAAC;EAED3U,MAAM,CAAC+7C,SAAS,GAAG,UAAUC,MAAM,EAAE;IACjC,IAAIA,MAAM,KAAK,IAAI,EAChB,OAAO,KAAK,CAAC,KAEd,OAAO,IAAI;EACjB,CAAC;EAEDh8C,MAAM,CAACi8C,UAAU,GAAG,KAAK;EAEzBj8C,MAAM,CAACqC,GAAG,CAAC,cAAc,EAAE,UAAUC,KAAK,EAAEoY,OAAO,EAAE;IACjD1a,MAAM,CAACk8C,kBAAkB,CAACxhC,OAAO,CAAC;EACtC,CAAC,CAAC;EAEF1a,MAAM,CAACk8C,kBAAkB,GAAG,UAAUxhC,OAAO,EAAE;IAC3C,IAAI1a,MAAM,CAACi8C,UAAU,EAAE;MACnBz7C,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAACk8C,kBAAkB,CAACxhC,OAAO,CAAC;MACtC,CAAC,EAAE,GAAG,CAAC;IACX,CAAC,MACI;MACD1a,MAAM,CAACm8C,oBAAoB,CAACzhC,OAAO,CAAC;IACxC;EACJ,CAAC;EAED1a,MAAM,CAACm8C,oBAAoB,GAAG,UAAUzhC,OAAO,EAAE;IAC7C5W,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX/D,MAAM,CAACi8C,UAAU,GAAG,IAAI;IACxBj8C,MAAM,CAACgW,OAAO,CAAC6hC,WAAW,GAAGn9B,OAAO;IACpC1a,MAAM,CAACq7C,gBAAgB,GAAG56C,cAAc,CAACe,SAAS,CAAC,6BAA6B,CAAC,GAAG,GAAG,GAAGxB,MAAM,CAACgW,OAAO,CAAC6hC,WAAW,GAAG,GAAG;IAE1H73C,MAAM,CAACa,UAAU,GAAG6Z,OAAO;IAC3B5W,CAAC,CAAC,qBAAqB,CAAC,CAACkF,GAAG,CAAC0R,OAAO,CAAC;IACrC,IAAI9a,EAAE,GAAGkE,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACpClE,EAAE,CAACw8C,aAAa,CAAC,IAAIC,KAAK,CAAC,OAAO,EAAE;MAAEC,OAAO,EAAE;IAAK,CAAC,CAAC,CAAC;IACvD18C,EAAE,CAACw8C,aAAa,CAAC,IAAIC,KAAK,CAAC,QAAQ,EAAE;MAAEC,OAAO,EAAE;IAAK,CAAC,CAAC,CAAC;IAExDt8C,MAAM,CAACs6B,MAAM,CAAC,CAAC;IAEft6B,MAAM,CAACgW,OAAO,CAAC6hC,WAAW,GAAG,EAAE;IAE/B73C,MAAM,CAACi8C,UAAU,GAAG,KAAK;EAC7B,CAAC;EAEDj8C,MAAM,CAACu8C,kBAAkB,GAAG,YAAW;IACnC,OAAOr8C,aAAa,CAAC+I,cAAc,GAAG,EAAE,GAAG,cAAc;EAC7D,CAAC;EAEDjJ,MAAM,CAACw8C,mBAAmB,GAAG,YAAW;IACpC,OAAOt8C,aAAa,CAAC+I,cAAc,GAAG,aAAa,GAAG,EAAE;EAC5D,CAAC;AAEL,CAAC,CAAC,CAAC,C;;;;;;;;;;;;;;;AC7QsB;AAE7BnJ,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,qBAAqB,EACtD,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAC5E,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,gBAAgB,EAC7H,SAAS,EAAE,SAAS,EACpB,UAAUC,MAAM,EAAEC,UAAU,EAAEM,SAAS,EAAEipB,YAAY,EAAEhpB,QAAQ,EAAEL,YAAY,EACzEypB,SAAS,EAAE8yB,aAAa,EAAEx8C,aAAa,EAAEG,aAAa,EAAE+vB,qBAAqB,EAAEusB,gBAAgB,EAAEl8C,cAAc,EAC/GupB,OAAO,EAAEF,OAAO,EAAE;EAElB9pB,MAAM,CAACqV,SAAS,GAAG,IAAI;EACvBrV,MAAM,CAACkrB,eAAe,GAAGpB,OAAO,CAACqB,cAAc,CAACC,YAAY;;EAE5D;EACAnrB,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE1pB,SAAS,CAAC4xC;EAAuB,CAAC,CAAC,CAAC,CAAC;;EAEhG,IAAI,CAAC3oB,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;EACJ;EAAC;;EAED;EACApqB,MAAM,CAAC48C,0BAA0B,GAAG18C,aAAa,CAAC28C,gBAAgB,KAAK,KAAK;EAG5E78C,MAAM,CAACmC,IAAI,GAAG;IAAE,QAAQ,EAAE9C,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAG;EAAK,CAAC;EAE3DpC,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB7rB,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;IAEzB7sB,MAAM,CAAC88C,QAAQ,GAAG,CAAC,CAAC;IAEpB98C,MAAM,CAACgW,OAAO,GAAG;MACb+mC,QAAQ,EAAE,MAAM;MAChBC,SAAS,EAAElsB,MAAM,CAAC,CAAC,CAACmsB,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAACC,OAAO,CAAC,KAAK,CAAC;MAClDC,OAAO,EAAErsB,MAAM,CAAC,CAAC,CAACosB,OAAO,CAAC,KAAK,CAAC;MAChCE,WAAW,EAAE,EAAE;MACfC,QAAQ,EAAE;IACd,CAAC;IAEDr9C,MAAM,CAACs9C,YAAY,GAAG;MAClBC,OAAO,EAAE,EAAE;MACXC,SAAS,EAAE,EAAE;MACbC,aAAa,EAAE,EAAE;MACjBC,WAAW,EAAE,EAAE;MACfC,aAAa,EAAE,EAAE;MACjBC,eAAe,EAAE,EAAE;MACnBC,WAAW,EAAE,EAAE;MACfC,UAAU,EAAE,EAAE;MACdC,WAAW,EAAE,EAAE;MACfC,IAAI,EAAE;IACV,CAAC;IAEDh+C,MAAM,CAACi+C,UAAU,GAAG;MAChBV,OAAO,EAAE,CAAC;MACVC,SAAS,EAAE,CAAC;MACZC,aAAa,EAAE,CAAC;MAChBC,WAAW,EAAE,CAAC;MACdC,aAAa,EAAE,CAAC;MAChBC,eAAe,EAAE,CAAC;MAClBC,WAAW,EAAE,CAAC;MACdC,UAAU,EAAE,CAAC;MACbC,WAAW,EAAE,CAAC;MACdC,IAAI,EAAE;IACV,CAAC;IAEDl6C,CAAC,CAACC,OAAO,CAAC,CAAC;IACX44C,gBAAgB,CAACuB,uCAAuC,CAAC,CAAC,CACrDl6C,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAEjB,IAAIA,GAAG,CAACnF,IAAI,CAACi6C,SAAS,CAAC/3C,MAAM,GAAG,CAAC,EAAE;QAC/B;QACApG,MAAM,CAACm+C,SAAS,GAAG90C,GAAG,CAACnF,IAAI,CAACi6C,SAAS;QACrCn+C,MAAM,CAACgW,OAAO,CAACooC,iBAAiB,GAAG,IAAI;MAC3C,CAAC,MACI;QACDp+C,MAAM,CAACm+C,SAAS,GAAG90C,GAAG,CAACnF,IAAI,CAACi6C,SAAS;QACrCn+C,MAAM,CAACgW,OAAO,CAACooC,iBAAiB,GAAG,KAAK;QACxC,IAAI/0C,GAAG,CAACnF,IAAI,CAACi6C,SAAS,CAAC/3C,MAAM,IAAI,CAAC,EAAE;UAChCpG,MAAM,CAACgW,OAAO,CAACqnC,QAAQ,GAAGh0C,GAAG,CAACnF,IAAI,CAACi6C,SAAS,CAAC,CAAC,CAAC,CAAC3S,WAAW;QAC/D;MACJ;;MAEA;MACA;MACAhrC,QAAQ,CAAC,YAAY;QAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAAE,CAAC,CAAC;MAEhE65C,UAAU,CAAC,CAAC;IAChB,CAAC,CAAC,SACI,CAAC,UAAUl6C,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;IAENi6C,iBAAiB,CAAC,CAAC;EACvB,CAAC;EAEDt+C,MAAM,CAAC0I,MAAM,CAAC,kBAAkB,EAAE,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC5D,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvBy1C,UAAU,CAAC,CAAC;IAChB;EACJ,CAAC,CAAC;EAEFr+C,MAAM,CAAC0I,MAAM,CAAC,kBAAkB,EAC5B,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAE1B5I,MAAM,CAACu+C,WAAW,CAAC51C,QAAQ,CAAC;EAChC,CACJ,CAAC;EAED3I,MAAM,CAACu+C,WAAW,GAAG,UAAUC,YAAY,EAAE;IAEzCx+C,MAAM,CAACgW,OAAO,CAAC+mC,QAAQ,GAAGyB,YAAY;IAEtC,IAAIC,WAAW,GAAG3tB,MAAM,CAAC,CAAC,CAACosB,OAAO,CAAC,KAAK,CAAC;IAEzC,QAAQl9C,MAAM,CAACgW,OAAO,CAAC+mC,QAAQ;MAC3B,KAAK,MAAM;QACP/8C,MAAM,CAACgW,OAAO,CAACmnC,OAAO,GAAGsB,WAAW;QACpCz+C,MAAM,CAACgW,OAAO,CAACgnC,SAAS,GAAGh9C,MAAM,CAACgW,OAAO,CAACmnC,OAAO,CAACuB,KAAK,CAAC,CAAC,CAACzB,GAAG,CAAC,CAAC,CAAC,EAAEj9C,MAAM,CAACgW,OAAO,CAAC+mC,QAAQ,CAAC,CAACG,OAAO,CAAC,KAAK,CAAC;QACzG;MACJ,KAAK,OAAO;QACR;QACA;QACAl9C,MAAM,CAACgW,OAAO,CAACgnC,SAAS,GAAGyB,WAAW,CAACC,KAAK,CAAC,CAAC,CAACxB,OAAO,CAAC,MAAM,CAAC,CAACD,GAAG,CAAC,CAAC,CAAC,EAAEj9C,MAAM,CAACgW,OAAO,CAAC+mC,QAAQ,CAAC,CAACG,OAAO,CAAC,KAAK,CAAC;QAC9Gl9C,MAAM,CAACgW,OAAO,CAACmnC,OAAO,GAAGsB,WAAW,CAACC,KAAK,CAAC,CAAC,CAACC,KAAK,CAAC,MAAM,CAAC,CAACzB,OAAO,CAAC,KAAK,CAAC;QACzE;MACJ,KAAK,QAAQ;QACTl9C,MAAM,CAACgW,OAAO,CAACgnC,SAAS,GAAGyB,WAAW,CAACC,KAAK,CAAC,CAAC,CAACxB,OAAO,CAAC,OAAO,CAAC,CAACD,GAAG,CAAC,CAAC,CAAC,EAAEj9C,MAAM,CAACgW,OAAO,CAAC+mC,QAAQ,CAAC,CAACG,OAAO,CAAC,KAAK,CAAC;QAC/Gl9C,MAAM,CAACgW,OAAO,CAACmnC,OAAO,GAAGsB,WAAW,CAACC,KAAK,CAAC,CAAC,CAACC,KAAK,CAAC,OAAO,CAAC,CAACzB,OAAO,CAAC,KAAK,CAAC;QAC1E;IACR;IAEAoB,iBAAiB,CAAC,CAAC;IAEnBD,UAAU,CAAC,CAAC;EAChB,CAAC;EAEDr+C,MAAM,CAAC4+C,UAAU,GAAG,YAAY;IAC5B5+C,MAAM,CAACgW,OAAO,CAACgnC,SAAS,GAAGh9C,MAAM,CAACgW,OAAO,CAACgnC,SAAS,CAAC0B,KAAK,CAAC,CAAC,CAACzB,GAAG,CAAC,CAAC,CAAC,EAAEj9C,MAAM,CAACgW,OAAO,CAAC+mC,QAAQ,CAAC,CAACG,OAAO,CAAC,KAAK,CAAC;IAE3G,QAAQl9C,MAAM,CAACgW,OAAO,CAAC+mC,QAAQ;MAC3B,KAAK,MAAM;QACP/8C,MAAM,CAACgW,OAAO,CAACmnC,OAAO,GAAGn9C,MAAM,CAACgW,OAAO,CAACgnC,SAAS,CAAC0B,KAAK,CAAC,CAAC,CAACzB,GAAG,CAAC,CAAC,EAAEj9C,MAAM,CAACgW,OAAO,CAAC+mC,QAAQ,CAAC,CAACG,OAAO,CAAC,KAAK,CAAC;QACxG;MACJ,KAAK,OAAO;QACRl9C,MAAM,CAACgW,OAAO,CAACmnC,OAAO,GAAGn9C,MAAM,CAACgW,OAAO,CAACgnC,SAAS,CAAC0B,KAAK,CAAC,CAAC,CAACzB,GAAG,CAAC,CAAC,EAAEj9C,MAAM,CAACgW,OAAO,CAAC+mC,QAAQ,CAAC,CAAC4B,KAAK,CAAC,MAAM,CAAC,CAACzB,OAAO,CAAC,KAAK,CAAC;QACtH;MACJ,KAAK,QAAQ;QACTl9C,MAAM,CAACgW,OAAO,CAACmnC,OAAO,GAAGn9C,MAAM,CAACgW,OAAO,CAACgnC,SAAS,CAAC0B,KAAK,CAAC,CAAC,CAACzB,GAAG,CAAC,CAAC,EAAEj9C,MAAM,CAACgW,OAAO,CAAC+mC,QAAQ,CAAC,CAAC4B,KAAK,CAAC,OAAO,CAAC,CAACzB,OAAO,CAAC,KAAK,CAAC;QACvH;IACR;IAGAoB,iBAAiB,CAAC,CAAC;IAEnBD,UAAU,CAAC,CAAC;EAChB,CAAC;EACDr+C,MAAM,CAAC6+C,UAAU,GAAG,YAAY;IAC5B,IAAIJ,WAAW,GAAG,IAAI;IAEtB,IAAIzB,SAAS,GAAGh9C,MAAM,CAACgW,OAAO,CAACgnC,SAAS,CAAC0B,KAAK,CAAC,CAAC,CAACzB,GAAG,CAAC,CAAC,EAAEj9C,MAAM,CAACgW,OAAO,CAAC+mC,QAAQ,CAAC;IAChF,IAAII,OAAO,GAAGH,SAAS,CAAC0B,KAAK,CAAC,CAAC,CAACzB,GAAG,CAAC,CAAC,EAAEj9C,MAAM,CAACgW,OAAO,CAAC+mC,QAAQ,CAAC;IAE/D,QAAQ/8C,MAAM,CAACgW,OAAO,CAAC+mC,QAAQ;MAC3B,KAAK,MAAM;QACPI,OAAO,GAAGA,OAAO,CAACD,OAAO,CAAC,KAAK,CAAC;QAChCuB,WAAW,GAAG3tB,MAAM,CAAC,CAAC,CAACosB,OAAO,CAAC,KAAK,CAAC;QACrC;MACJ,KAAK,OAAO;QACRC,OAAO,GAAGA,OAAO,CAACwB,KAAK,CAAC,MAAM,CAAC,CAACzB,OAAO,CAAC,KAAK,CAAC;QAC9CuB,WAAW,GAAG3tB,MAAM,CAAC,CAAC,CAAC6tB,KAAK,CAAC,MAAM,CAAC,CAACzB,OAAO,CAAC,KAAK,CAAC;QACnD;MACJ,KAAK,QAAQ;QACTC,OAAO,GAAGA,OAAO,CAACwB,KAAK,CAAC,OAAO,CAAC,CAACzB,OAAO,CAAC,KAAK,CAAC;QAC/CuB,WAAW,GAAG3tB,MAAM,CAAC,CAAC,CAAC6tB,KAAK,CAAC,OAAO,CAAC,CAACzB,OAAO,CAAC,KAAK,CAAC;QACpD;IACR;IAEA,IAAIC,OAAO,IAAIsB,WAAW,EAAE;MACxBz+C,MAAM,CAACgW,OAAO,CAACmnC,OAAO,GAAGA,OAAO;MAChCn9C,MAAM,CAACgW,OAAO,CAACgnC,SAAS,GAAGA,SAAS;MAEpCsB,iBAAiB,CAAC,CAAC;MAEnBD,UAAU,CAAC,CAAC;IAChB;EACJ,CAAC;EAEDr+C,MAAM,CAAC6sB,gBAAgB,GAAG,YAAY;IAClC5sB,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;EACxC,CAAC;EAEDhL,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,UAAU2W,GAAG,EAAE;IACrC,IAAIhZ,MAAM,CAACqV,SAAS,EAAE;MAClBrV,MAAM,CAACqV,SAAS,GAAG,KAAK;MACxB;;MAEA7U,QAAQ,CAAC,YAAY;QACjB0E,WAAW,CAAC,CAAC;QAEb1E,QAAQ,CAAC,YAAY;UAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;QAAE,CAAC,CAAC;MACpE,CAAC,CAAC;IACN;EACJ,CAAC,CAAC;EAEFxE,MAAM,CAAC8+C,WAAW,GAAG,UAAUC,SAAS,EAAE;IAEtC/+C,MAAM,CAACg/C,YAAY,GAAG,CAAC,CAAC;IACxB,QAAQD,SAAS;MACb,KAAK,SAAS;QACV/+C,MAAM,CAACg/C,YAAY,CAACC,KAAK,GAAGx+C,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC;QAC/DxB,MAAM,CAACg/C,YAAY,CAACf,UAAU,GAAGj0B,OAAO,CAAC,UAAU,CAAC,CAAChqB,MAAM,CAACi+C,UAAU,CAACc,SAAS,CAAC,CAAC;QAClF;MAEJ,KAAK,WAAW;QACZ/+C,MAAM,CAACg/C,YAAY,CAACC,KAAK,GAAGx+C,cAAc,CAACe,SAAS,CAAC,YAAY,CAAC;QAClExB,MAAM,CAACg/C,YAAY,CAACf,UAAU,GAAGj+C,MAAM,CAACi+C,UAAU,CAACc,SAAS,CAAC;QAC7D;MAEJ,KAAK,eAAe;QAChB/+C,MAAM,CAACg/C,YAAY,CAACC,KAAK,GAAGx+C,cAAc,CAACe,SAAS,CAAC,gBAAgB,CAAC;QACtExB,MAAM,CAACg/C,YAAY,CAACf,UAAU,GAAGj+C,MAAM,CAACi+C,UAAU,CAACc,SAAS,CAAC;QAC7D;MAEJ,KAAK,aAAa;QACd/+C,MAAM,CAACg/C,YAAY,CAACC,KAAK,GAAGx+C,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC;QACpExB,MAAM,CAACg/C,YAAY,CAACf,UAAU,GAAGj0B,OAAO,CAAC,UAAU,CAAC,CAAChqB,MAAM,CAACi+C,UAAU,CAACc,SAAS,CAAC,CAAC;QAClF;MAEJ,KAAK,eAAe;QAChB/+C,MAAM,CAACg/C,YAAY,CAACC,KAAK,GAAGx+C,cAAc,CAACe,SAAS,CAAC,gBAAgB,CAAC;QACtExB,MAAM,CAACg/C,YAAY,CAACf,UAAU,GAAGj0B,OAAO,CAAC,UAAU,CAAC,CAAChqB,MAAM,CAACi+C,UAAU,CAACc,SAAS,CAAC,CAAC;QAClF;MAEJ,KAAK,iBAAiB;QAClB/+C,MAAM,CAACg/C,YAAY,CAACC,KAAK,GAAGx+C,cAAc,CAACe,SAAS,CAAC,kBAAkB,CAAC,GAAG,IAAI;QAC/ExB,MAAM,CAACg/C,YAAY,CAACf,UAAU,GAAGj+C,MAAM,CAACi+C,UAAU,CAACc,SAAS,CAAC;QAC7D;MAEJ,KAAK,aAAa;QACd/+C,MAAM,CAACg/C,YAAY,CAACC,KAAK,GAAGx+C,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC;QACpExB,MAAM,CAACg/C,YAAY,CAACf,UAAU,GAAGj0B,OAAO,CAAC,UAAU,CAAC,CAAChqB,MAAM,CAACi+C,UAAU,CAACc,SAAS,CAAC,CAAC;QAClF;MAEJ,KAAK,YAAY;QACb/+C,MAAM,CAACg/C,YAAY,CAACC,KAAK,GAAGx+C,cAAc,CAACe,SAAS,CAAC,aAAa,CAAC;QACnExB,MAAM,CAACg/C,YAAY,CAACf,UAAU,GAAGj+C,MAAM,CAACi+C,UAAU,CAACc,SAAS,CAAC;QAC7D;MAEJ,KAAK,aAAa;QACd/+C,MAAM,CAACg/C,YAAY,CAACC,KAAK,GAAGx+C,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC;QACpExB,MAAM,CAACg/C,YAAY,CAACf,UAAU,GAAGj+C,MAAM,CAACi+C,UAAU,CAACc,SAAS,CAAC;QAC7D;MAEJ,KAAK,MAAM;QACP/+C,MAAM,CAACg/C,YAAY,CAACC,KAAK,GAAGx+C,cAAc,CAACe,SAAS,CAAC,MAAM,CAAC;QAC5DxB,MAAM,CAACg/C,YAAY,CAACf,UAAU,GAAGj0B,OAAO,CAAC,UAAU,CAAC,CAAChqB,MAAM,CAACi+C,UAAU,CAACc,SAAS,CAAC,CAAC;QAClF;IACR;IACA/+C,MAAM,CAACg/C,YAAY,CAACE,OAAO,GAAGl/C,MAAM,CAACs9C,YAAY,CAACyB,SAAS,CAAC;IAE5D/+C,MAAM,CAAC88C,QAAQ,CAACqC,OAAO,GAAGC,SAAS,CAAC,iBAAiB,EAAEp/C,MAAM,CAACq/C,SAAS,CAACC,MAAM,EAAEt/C,MAAM,CAACq/C,SAAS,CAACN,SAAS,CAAC,CAAC;;IAE5G;;IAEA1+C,aAAa,CAAC8E,UAAU,CAAC,gCAAgC,CAAC;EAC9D,CAAC;EAEDnF,MAAM,CAACu/C,2BAA2B,GAAG,YAAY;IAC7Cl/C,aAAa,CAAC+L,WAAW,CAAC,gCAAgC,CAAC;IAE3DpM,MAAM,CAAC88C,QAAQ,CAACqC,OAAO,CAACK,OAAO,CAAC,CAAC;IACjC,OAAOx/C,MAAM,CAAC88C,QAAQ,CAACqC,OAAO;EAClC,CAAC;EAED,SAASd,UAAUA,CAAA,EAAG;IAClBv6C,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAI07C,QAAQ,GAAGz/C,MAAM,CAACgW,OAAO,CAACqnC,QAAQ;IACtC,IAAIoC,QAAQ,KAAK,IAAI,EAAE;MACnBA,QAAQ,GAAG,GAAG;IAClB;IAEA,IAAIC,UAAU,GAAGr/C,aAAa,CAACs/C,yBAAyB,CAAC3/C,MAAM,CAACgW,OAAO,CAACgnC,SAAS,CAAC;IAClF,IAAI4C,QAAQ,GAAGv/C,aAAa,CAACs/C,yBAAyB,CAAC3/C,MAAM,CAACgW,OAAO,CAACmnC,OAAO,CAAC;IAE9E/sB,qBAAqB,CAACyvB,gBAAgB,CAACH,UAAU,EAAEE,QAAQ,EAAE5/C,MAAM,CAACgW,OAAO,CAAC+mC,QAAQ,EAAE0C,QAAQ,CAAC,CAC1Fz7C,IAAI,CAAC,UAAU6/B,QAAQ,EAAE;MACtB7+B,OAAO,CAACC,GAAG,CAAC4+B,QAAQ,CAAC3/B,IAAI,CAAC;MAE1B,IAAI47C,MAAM,GAAGjc,QAAQ,CAAC3/B,IAAI,CAAC67C,MAAM;MACjC,IAAIC,OAAO,GAAGnc,QAAQ,CAAC3/B,IAAI,CAACg7C,OAAO;MACnC,IAAIe,cAAc,GAAGpc,QAAQ,CAAC3/B,IAAI,CAACg8C,cAAc;MAEjDlgD,MAAM,CAACq/C,SAAS,GAAG,CAAC,CAAC;MACrBr/C,MAAM,CAACq/C,SAAS,CAACC,MAAM,GAAG,EAAE;MAC5Bt/C,MAAM,CAACq/C,SAAS,CAAC9B,OAAO,GAAG,EAAE;MAC7Bv9C,MAAM,CAACq/C,SAAS,CAAC7B,SAAS,GAAG,EAAE;MAC/Bx9C,MAAM,CAACq/C,SAAS,CAAC5B,aAAa,GAAG,EAAE;MACnCz9C,MAAM,CAACq/C,SAAS,CAAC3B,WAAW,GAAG,EAAE;MACjC19C,MAAM,CAACq/C,SAAS,CAAC1B,aAAa,GAAG,EAAE;MACnC39C,MAAM,CAACq/C,SAAS,CAACzB,eAAe,GAAG,EAAE;MACrC59C,MAAM,CAACq/C,SAAS,CAACxB,WAAW,GAAG,EAAE;MACjC79C,MAAM,CAACq/C,SAAS,CAACvB,UAAU,GAAG,EAAE;MAChC99C,MAAM,CAACq/C,SAAS,CAACtB,WAAW,GAAG,EAAE;MACjC/9C,MAAM,CAACq/C,SAAS,CAACrB,IAAI,GAAG,EAAE;MAE1B,KAAK,IAAIh0C,KAAK,IAAI81C,MAAM,EAAE;QACtB,IAAIxI,OAAO,GAAGwI,MAAM,CAAC91C,KAAK,CAAC;QAE3BhK,MAAM,CAACq/C,SAAS,CAACC,MAAM,CAACj5C,IAAI,CAAC2D,KAAK,CAAC;QAEnChK,MAAM,CAACq/C,SAAS,CAAC9B,OAAO,CAACl3C,IAAI,CAACixC,OAAO,CAAC6I,YAAY,CAAC;QACnDngD,MAAM,CAACq/C,SAAS,CAAC7B,SAAS,CAACn3C,IAAI,CAACixC,OAAO,CAAC8I,UAAU,CAAC;QACnDpgD,MAAM,CAACq/C,SAAS,CAAC5B,aAAa,CAACp3C,IAAI,CAACixC,OAAO,CAACmG,aAAa,CAAC;QAC1Dz9C,MAAM,CAACq/C,SAAS,CAAC3B,WAAW,CAACr3C,IAAI,CAACixC,OAAO,CAACoG,WAAW,CAAC;QACtD19C,MAAM,CAACq/C,SAAS,CAAC1B,aAAa,CAACt3C,IAAI,CAACixC,OAAO,CAACqG,aAAa,CAAC;QAC1D39C,MAAM,CAACq/C,SAAS,CAACzB,eAAe,CAACv3C,IAAI,CAACixC,OAAO,CAACsG,eAAe,CAAC;QAC9D59C,MAAM,CAACq/C,SAAS,CAACxB,WAAW,CAACx3C,IAAI,CAACixC,OAAO,CAACuG,WAAW,CAAC;QACtD79C,MAAM,CAACq/C,SAAS,CAACvB,UAAU,CAACz3C,IAAI,CAACixC,OAAO,CAACwG,UAAU,CAAC;QACpD99C,MAAM,CAACq/C,SAAS,CAACtB,WAAW,CAAC13C,IAAI,CAACixC,OAAO,CAACyG,WAAW,CAAC;QACtD/9C,MAAM,CAACq/C,SAAS,CAACrB,IAAI,CAAC33C,IAAI,CAACixC,OAAO,CAAC0G,IAAI,CAAC;MAC5C;MAEA,KAAK,IAAIqC,GAAG,IAAIrgD,MAAM,CAAC88C,QAAQ,EAAE;QAC7B,IAAI98C,MAAM,CAAC88C,QAAQ,CAAC5N,cAAc,CAACmR,GAAG,CAAC,EAAE;UACrCrgD,MAAM,CAAC88C,QAAQ,CAACuD,GAAG,CAAC,CAACb,OAAO,CAAC,CAAC;UAC9B,OAAOx/C,MAAM,CAAC88C,QAAQ,CAACuD,GAAG,CAAC;QAC/B;MACJ;MAEA,IAAIrgD,MAAM,CAAC48C,0BAA0B,EAAE;QACnC58C,MAAM,CAAC88C,QAAQ,CAAC,SAAS,CAAC,GAAGsC,SAAS,CAAC,iBAAiB,EAAEp/C,MAAM,CAACq/C,SAAS,CAACC,MAAM,EAAEt/C,MAAM,CAACq/C,SAAS,CAAC9B,OAAO,CAAC;MAChH;MACAv9C,MAAM,CAAC88C,QAAQ,CAAC,WAAW,CAAC,GAAGsC,SAAS,CAAC,mBAAmB,EAAEp/C,MAAM,CAACq/C,SAAS,CAACC,MAAM,EAAEt/C,MAAM,CAACq/C,SAAS,CAAC7B,SAAS,CAAC;MAClHx9C,MAAM,CAAC88C,QAAQ,CAAC,eAAe,CAAC,GAAGsC,SAAS,CAAC,kBAAkB,EAAEp/C,MAAM,CAACq/C,SAAS,CAACC,MAAM,EAAEt/C,MAAM,CAACq/C,SAAS,CAAC5B,aAAa,CAAC;MACzH,IAAIz9C,MAAM,CAAC48C,0BAA0B,EAAE;QACnC58C,MAAM,CAAC88C,QAAQ,CAAC,aAAa,CAAC,GAAGsC,SAAS,CAAC,qBAAqB,EAAEp/C,MAAM,CAACq/C,SAAS,CAACC,MAAM,EAAEt/C,MAAM,CAACq/C,SAAS,CAAC3B,WAAW,CAAC;MAC5H;MACA19C,MAAM,CAAC88C,QAAQ,CAAC,eAAe,CAAC,GAAGsC,SAAS,CAAC,uBAAuB,EAAEp/C,MAAM,CAACq/C,SAAS,CAACC,MAAM,EAAEt/C,MAAM,CAACq/C,SAAS,CAAC1B,aAAa,CAAC;MAC9H39C,MAAM,CAAC88C,QAAQ,CAAC,iBAAiB,CAAC,GAAGsC,SAAS,CAAC,yBAAyB,EAAEp/C,MAAM,CAACq/C,SAAS,CAACC,MAAM,EAAEt/C,MAAM,CAACq/C,SAAS,CAACzB,eAAe,CAAC;MACpI59C,MAAM,CAAC88C,QAAQ,CAAC,aAAa,CAAC,GAAGsC,SAAS,CAAC,qBAAqB,EAAEp/C,MAAM,CAACq/C,SAAS,CAACC,MAAM,EAAEt/C,MAAM,CAACq/C,SAAS,CAACxB,WAAW,CAAC;MACxH79C,MAAM,CAAC88C,QAAQ,CAAC,YAAY,CAAC,GAAGsC,SAAS,CAAC,oBAAoB,EAAEp/C,MAAM,CAACq/C,SAAS,CAACC,MAAM,EAAEt/C,MAAM,CAACq/C,SAAS,CAACvB,UAAU,CAAC;MACrH99C,MAAM,CAAC88C,QAAQ,CAAC,aAAa,CAAC,GAAGsC,SAAS,CAAC,qBAAqB,EAAEp/C,MAAM,CAACq/C,SAAS,CAACC,MAAM,EAAEt/C,MAAM,CAACq/C,SAAS,CAACtB,WAAW,CAAC;MACxH,IAAI/9C,MAAM,CAAC48C,0BAA0B,EAAE;QACnC58C,MAAM,CAAC88C,QAAQ,CAAC,MAAM,CAAC,GAAGsC,SAAS,CAAC,cAAc,EAAEp/C,MAAM,CAACq/C,SAAS,CAACC,MAAM,EAAEt/C,MAAM,CAACq/C,SAAS,CAACrB,IAAI,CAAC;MACvG;MAGAh+C,MAAM,CAACi+C,UAAU,CAACV,OAAO,GAAG0C,cAAc,CAACE,YAAY;MACvDngD,MAAM,CAACi+C,UAAU,CAACT,SAAS,GAAGyC,cAAc,CAACG,UAAU;MACvDpgD,MAAM,CAACi+C,UAAU,CAACR,aAAa,GAAGwC,cAAc,CAACxC,aAAa;MAC9Dz9C,MAAM,CAACi+C,UAAU,CAACP,WAAW,GAAGuC,cAAc,CAACvC,WAAW;MAC1D19C,MAAM,CAACi+C,UAAU,CAACN,aAAa,GAAGsC,cAAc,CAACtC,aAAa;MAC9D39C,MAAM,CAACi+C,UAAU,CAACL,eAAe,GAAGqC,cAAc,CAACrC,eAAe;MAClE59C,MAAM,CAACi+C,UAAU,CAACJ,WAAW,GAAGoC,cAAc,CAACpC,WAAW;MAC1D79C,MAAM,CAACi+C,UAAU,CAACH,UAAU,GAAGmC,cAAc,CAACnC,UAAU;MACxD99C,MAAM,CAACi+C,UAAU,CAACF,WAAW,GAAGkC,cAAc,CAAClC,WAAW;MAC1D/9C,MAAM,CAACi+C,UAAU,CAACD,IAAI,GAAGiC,cAAc,CAACjC,IAAI;MAG5Ch+C,MAAM,CAACs9C,YAAY,CAACC,OAAO,GAAG,EAAE;MAChCv9C,MAAM,CAACs9C,YAAY,CAACE,SAAS,GAAG,EAAE;MAClCx9C,MAAM,CAACs9C,YAAY,CAACG,aAAa,GAAG,EAAE;MACtCz9C,MAAM,CAACs9C,YAAY,CAACI,WAAW,GAAG,EAAE;MACpC19C,MAAM,CAACs9C,YAAY,CAACK,aAAa,GAAG,EAAE;MACtC39C,MAAM,CAACs9C,YAAY,CAACM,eAAe,GAAG,EAAE;MACxC59C,MAAM,CAACs9C,YAAY,CAACO,WAAW,GAAG,EAAE;MACpC79C,MAAM,CAACs9C,YAAY,CAACQ,UAAU,GAAG,EAAE;MACnC99C,MAAM,CAACs9C,YAAY,CAACS,WAAW,GAAG,EAAE;MACpC/9C,MAAM,CAACs9C,YAAY,CAACU,IAAI,GAAG,EAAE;MAE7B,IAAI,CAAC,CAACh+C,MAAM,CAACgW,OAAO,CAACqnC,QAAQ,IAAIr9C,MAAM,CAACgW,OAAO,CAACqnC,QAAQ,IAAI,GAAG,KAAK2C,OAAO,CAAC55C,MAAM,GAAG,CAAC,EAAE;QACpF,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGwrC,OAAO,CAAC55C,MAAM,EAAEoO,CAAC,EAAE,EAAE;UACrC,IAAI8rC,UAAU,GAAGN,OAAO,CAACxrC,CAAC,CAAC;UAE3BxU,MAAM,CAACs9C,YAAY,CAACC,OAAO,CAACl3C,IAAI,CAAC;YAC7B3D,IAAI,EAAE49C,UAAU,CAACC,eAAe;YAChC3qC,KAAK,EAAE0qC,UAAU,CAACH,YAAY;YAC9BK,OAAO,EAAEC,UAAU,CAACR,cAAc,CAACE,YAAY,EAAEG,UAAU,CAACH,YAAY;UAC5E,CAAC,CAAC;UACFngD,MAAM,CAACs9C,YAAY,CAACE,SAAS,CAACn3C,IAAI,CAAC;YAC/B3D,IAAI,EAAE49C,UAAU,CAACC,eAAe;YAChC3qC,KAAK,EAAE0qC,UAAU,CAACF,UAAU;YAC5BI,OAAO,EAAEC,UAAU,CAACR,cAAc,CAACG,UAAU,EAAEE,UAAU,CAACF,UAAU;UACxE,CAAC,CAAC;UACFpgD,MAAM,CAACs9C,YAAY,CAACG,aAAa,CAACp3C,IAAI,CAAC;YACnC3D,IAAI,EAAE49C,UAAU,CAACC,eAAe;YAChC3qC,KAAK,EAAE0qC,UAAU,CAAC7C,aAAa;YAC/B+C,OAAO,EAAEC,UAAU,CAACR,cAAc,CAACxC,aAAa,EAAE6C,UAAU,CAAC7C,aAAa;UAC9E,CAAC,CAAC;UACFz9C,MAAM,CAACs9C,YAAY,CAACI,WAAW,CAACr3C,IAAI,CAAC;YACjC3D,IAAI,EAAE49C,UAAU,CAACC,eAAe;YAChC3qC,KAAK,EAAE0qC,UAAU,CAAC5C,WAAW;YAC7B8C,OAAO,EAAEE,aAAa,CAACV,OAAO,EAAE,aAAa,EAAEM,UAAU,CAAC5C,WAAW;UACzE,CAAC,CAAC;UACF19C,MAAM,CAACs9C,YAAY,CAACK,aAAa,CAACt3C,IAAI,CAAC;YACnC3D,IAAI,EAAE49C,UAAU,CAACC,eAAe;YAChC3qC,KAAK,EAAE0qC,UAAU,CAAC3C,aAAa;YAC/B6C,OAAO,EAAEC,UAAU,CAACR,cAAc,CAACtC,aAAa,EAAE2C,UAAU,CAAC3C,aAAa;UAC9E,CAAC,CAAC;UACF39C,MAAM,CAACs9C,YAAY,CAACM,eAAe,CAACv3C,IAAI,CAAC;YACrC3D,IAAI,EAAE49C,UAAU,CAACC,eAAe;YAChC3qC,KAAK,EAAE0qC,UAAU,CAAC1C,eAAe;YACjC4C,OAAO,EAAEC,UAAU,CAACR,cAAc,CAACrC,eAAe,EAAE0C,UAAU,CAAC1C,eAAe;UAClF,CAAC,CAAC;UACF59C,MAAM,CAACs9C,YAAY,CAACO,WAAW,CAACx3C,IAAI,CAAC;YACjC3D,IAAI,EAAE49C,UAAU,CAACC,eAAe;YAChC3qC,KAAK,EAAE0qC,UAAU,CAACzC,WAAW;YAC7B2C,OAAO,EAAEE,aAAa,CAACV,OAAO,EAAE,aAAa,EAAEM,UAAU,CAACzC,WAAW;UACzE,CAAC,CAAC;UACF79C,MAAM,CAACs9C,YAAY,CAACQ,UAAU,CAACz3C,IAAI,CAAC;YAChC3D,IAAI,EAAE49C,UAAU,CAACC,eAAe;YAChC3qC,KAAK,EAAE0qC,UAAU,CAACxC,UAAU;YAC5B0C,OAAO,EAAEE,aAAa,CAACV,OAAO,EAAE,YAAY,EAAEM,UAAU,CAACxC,UAAU;UACvE,CAAC,CAAC;UACF99C,MAAM,CAACs9C,YAAY,CAACS,WAAW,CAAC13C,IAAI,CAAC;YACjC3D,IAAI,EAAE49C,UAAU,CAACC,eAAe;YAChC3qC,KAAK,EAAE0qC,UAAU,CAACvC,WAAW;YAC7ByC,OAAO,EAAEC,UAAU,CAACR,cAAc,CAAClC,WAAW,EAAEuC,UAAU,CAACvC,WAAW;UAC1E,CAAC,CAAC;UACF/9C,MAAM,CAACs9C,YAAY,CAACU,IAAI,CAAC33C,IAAI,CAAC;YAC1B3D,IAAI,EAAE49C,UAAU,CAACC,eAAe;YAChC3qC,KAAK,EAAE0qC,UAAU,CAACtC,IAAI;YACtBwC,OAAO,EAAEC,UAAU,CAACR,cAAc,CAACjC,IAAI,EAAEsC,UAAU,CAACtC,IAAI;UAC5D,CAAC,CAAC;QACN;MACJ;MAEAh+C,MAAM,CAACs9C,YAAY,CAACC,OAAO,CAACoD,IAAI,CAACC,cAAc,CAAC;MAChD5gD,MAAM,CAACs9C,YAAY,CAACE,SAAS,CAACmD,IAAI,CAACC,cAAc,CAAC;MAClD5gD,MAAM,CAACs9C,YAAY,CAACG,aAAa,CAACkD,IAAI,CAACC,cAAc,CAAC;MACtD5gD,MAAM,CAACs9C,YAAY,CAACI,WAAW,CAACiD,IAAI,CAACC,cAAc,CAAC;MACpD5gD,MAAM,CAACs9C,YAAY,CAACK,aAAa,CAACgD,IAAI,CAACC,cAAc,CAAC;MACtD5gD,MAAM,CAACs9C,YAAY,CAACM,eAAe,CAAC+C,IAAI,CAACC,cAAc,CAAC;MACxD5gD,MAAM,CAACs9C,YAAY,CAACO,WAAW,CAAC8C,IAAI,CAACC,cAAc,CAAC;MACpD5gD,MAAM,CAACs9C,YAAY,CAACQ,UAAU,CAAC6C,IAAI,CAACC,cAAc,CAAC;MACnD5gD,MAAM,CAACs9C,YAAY,CAACS,WAAW,CAAC4C,IAAI,CAACC,cAAc,CAAC;MACpD5gD,MAAM,CAACs9C,YAAY,CAACU,IAAI,CAAC2C,IAAI,CAACC,cAAc,CAAC;MAE7C98C,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,EAAE,UAAUF,GAAG,EAAE;MACd;MACAL,CAAC,CAACO,SAAS,CAAC,CAAC;MACb;MACAlE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACV;EAEA,SAASm6C,iBAAiBA,CAAA,EAAG;IACzBt+C,MAAM,CAACgW,OAAO,CAAConC,WAAW,GAAG,EAAE;IAE/B,IAAIn0B,MAAM,GAAG/oB,aAAa,CAACoY,UAAU;IACrC2Q,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACvCsJ,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IAEnC,QAAQ3f,MAAM,CAACgW,OAAO,CAAC+mC,QAAQ;MAC3B,KAAK,MAAM;QACP/8C,MAAM,CAACgW,OAAO,CAAConC,WAAW,GAAGp9C,MAAM,CAACgW,OAAO,CAACmnC,OAAO,CAACl0B,MAAM,CAACA,MAAM,CAAC;QAClE;MACJ,KAAK,OAAO;QACRjpB,MAAM,CAACgW,OAAO,CAAConC,WAAW,GAAGp9C,MAAM,CAACgW,OAAO,CAACmnC,OAAO,CAACuB,KAAK,CAAC,CAAC,CAACxB,OAAO,CAAC,MAAM,CAAC,CAACj0B,MAAM,CAACA,MAAM,CAAC,GAAG,GAAG,GAAGjpB,MAAM,CAACgW,OAAO,CAACmnC,OAAO,CAACuB,KAAK,CAAC,CAAC,CAACC,KAAK,CAAC,MAAM,CAAC,CAAC11B,MAAM,CAACA,MAAM,CAAC;QAC9J;MACJ,KAAK,QAAQ;QACTjpB,MAAM,CAACgW,OAAO,CAAConC,WAAW,GAAGp9C,MAAM,CAACgW,OAAO,CAACmnC,OAAO,CAACuB,KAAK,CAAC,CAAC,CAACxB,OAAO,CAAC,OAAO,CAAC,CAACj0B,MAAM,CAACA,MAAM,CAAC,GAAG,GAAG,GAAGjpB,MAAM,CAACgW,OAAO,CAACmnC,OAAO,CAACuB,KAAK,CAAC,CAAC,CAACC,KAAK,CAAC,OAAO,CAAC,CAAC11B,MAAM,CAACA,MAAM,CAAC;QAChK;IACR;EACJ;EAEA,SAASm2B,SAASA,CAACyB,QAAQ,EAAEC,MAAM,EAAEC,MAAM,EAAE;IACzCj9C,CAAC,CAAC,GAAG,GAAG+8C,QAAQ,CAAC,CAACG,KAAK,CAAC,CAAC;IAEzB,IAAIC,GAAG,GAAG3gC,QAAQ,CAACC,cAAc,CAACsgC,QAAQ,CAAC,CAACK,UAAU,CAAC,IAAI,CAAC;IAC5D,IAAIC,OAAO,GAAG,IAAI1E,iDAAK,CAACwE,GAAG,EAAE;MACzB3yC,IAAI,EAAE,MAAM;MACZpK,IAAI,EAAE;QACF48C,MAAM,EAAEA,MAAM;QACdM,QAAQ,EAAE,CAAC;UACPl9C,IAAI,EAAE68C,MAAM;UACZM,eAAe,EAAE,sBAAsB;UACvCC,WAAW,EAAE,kBAAkB;UAC/BC,IAAI,EAAE,IAAI;UACVC,WAAW,EAAE,CAAC;UACdC,WAAW,EAAE,CAAC;UACdC,oBAAoB,EAAE,kBAAkB;UACxCC,gBAAgB,EAAE,CAAC;UACnBC,gBAAgB,EAAE,oBAAoB;UACtCC,gBAAgB,EAAE,CAAC;UACnBC,yBAAyB,EAAE,kBAAkB;UAC7CC,qBAAqB,EAAE,CAAC;UACxBC,qBAAqB,EAAE;QAC3B,CAAC;MACL,CAAC;MACDz6C,OAAO,EAAE;QACL06C,UAAU,EAAE,IAAI;QAChBC,MAAM,EAAE;UACJ1gC,OAAO,EAAE;QACb,CAAC;QACDpN,KAAK,EAAE;UACHoN,OAAO,EAAE;QACb,CAAC;QACD2gC,QAAQ,EAAE;UACNC,OAAO,EAAE;QACb,CAAC;QACDC,QAAQ,EAAE;UACNC,KAAK,EAAE;YACHC,UAAU,EAAE;UAChB;QACJ,CAAC;QACDC,MAAM,EAAE;UACJC,KAAK,EAAE,CAAC;YACJjhC,OAAO,EAAE,IAAI;YACbkhC,SAAS,EAAE;cACPlhC,OAAO,EAAE;YACb,CAAC;YACDmhC,UAAU,EAAE;cACRnhC,OAAO,EAAE;YACb;UACJ,CAAC,CAAC;UACFohC,KAAK,EAAE,CAAC;YACJphC,OAAO,EAAE,IAAI;YACbmhC,UAAU,EAAE;cACRnhC,OAAO,EAAE;YACb,CAAC;YACDqhC,KAAK,EAAE;cACHC,YAAY,EAAE;YAClB;UACJ,CAAC;QACL;MACJ;IACJ,CAAC,CAAC;IAEF,OAAO3B,OAAO;EAClB;EAEA,SAASV,UAAUA,CAACv0B,KAAK,EAAE3W,KAAK,EAAE;IAC9B,IAAI2W,KAAK,GAAG,CAAC,EAAE;MACX,OAAO2N,IAAI,CAACkpB,KAAK,CAACxtC,KAAK,GAAG2W,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC;IAC7C;IACA,OAAO,CAAC;EACZ;EAEA,SAASw0B,aAAaA,CAACK,MAAM,EAAEiC,QAAQ,EAAEztC,KAAK,EAAE;IAE5C,IAAI2W,KAAK,GAAG,CAAC;IACb,KAAK,IAAI1X,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGusC,MAAM,CAAC36C,MAAM,EAAEoO,CAAC,EAAE,EAAE;MACpC0X,KAAK,IAAI2N,IAAI,CAACD,GAAG,CAACmnB,MAAM,CAACvsC,CAAC,CAAC,CAACwuC,QAAQ,CAAC,CAAC;IAC1C;IAEA,IAAI92B,KAAK,GAAG,CAAC,EAAE;MACX,OAAO2N,IAAI,CAACkpB,KAAK,CAAClpB,IAAI,CAACD,GAAG,CAACrkB,KAAK,CAAC,GAAG2W,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC;IACvD;IAEA,OAAO,CAAC;EACZ;EAEA,SAAS00B,cAAcA,CAACqC,OAAO,EAAEC,OAAO,EAAE;IACtC,OAAQD,OAAO,CAACrtC,KAAK,GAAGstC,OAAO,CAACttC,KAAK,GAAI,CAAC,CAAC,GAAKstC,OAAO,CAACttC,KAAK,GAAGqtC,OAAO,CAACrtC,KAAK,GAAI,CAAC,GAAG,CAAE;IAAC;AAAC;EAC7F;AACJ,CAAC,CAAC,CAAC,C;;;;;;;;;;AC/iBX9V,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAAC2jD,OAAO,CAAC,+BAA+B,EAC9D,CAAC,IAAI,EAAE,uBAAuB,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EACrE,UAAUxiD,EAAE,EAAEyvB,qBAAqB,EAAE8K,SAAS,EAAEj7B,UAAU,EAAEupB,YAAY,EAAE;EAEtE,IAAI45B,6BAA6B,GAAG,CAAC,CAAC;EAEtCA,6BAA6B,CAACC,UAAU,GAAG,IAAI;EAC/CD,6BAA6B,CAACE,KAAK,GAAC,IAAI;EACxCF,6BAA6B,CAACG,QAAQ,GAAG,KAAK;EAE9CH,6BAA6B,CAACI,IAAI,GAAG,YAAY;IAC7C,OAAOpzB,qBAAqB,CAACqzB,kBAAkB,CAAC,CAAC,CAC5Cz/C,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAIsd,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzB,IAAI,CAACnC,GAAG,EAAE;QACNsd,QAAQ,CAACC,MAAM,CAAC,mBAAmB,CAAC;MACxC,CAAC,MAAM;QACHw8B,6BAA6B,CAACC,UAAU,GAAGh6C,GAAG,CAACnF,IAAI;QACnDyiB,QAAQ,CAAClb,OAAO,CAAC,IAAI,CAAC;MAC1B;MAEA,OAAOkb,QAAQ,CAACjb,OAAO;IAC3B,CAAC,CAAC,SACI,CAAC,UAAUvH,GAAG,EAAE;MAClB,IAAIwiB,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBmb,QAAQ,CAAClb,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOkb,QAAQ,CAACjb,OAAO;IAC3B,CAAC,CAAC,WACM,CAAC,YAAY;MACjB,IAAI,CAAC03C,6BAA6B,CAACG,QAAQ,EAAE;QACzCH,6BAA6B,CAACG,QAAQ,GAAG,IAAI;QAE7CH,6BAA6B,CAACE,KAAK,GAAGpoB,SAAS,CAAC,YAAY;UACxD,IAAI1R,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;YAC3BiG,qBAAqB,CAACqzB,kBAAkB,CAAC,CAAC,CACrCz/C,IAAI,CAAC,UAAUqF,GAAG,EAAE;cACjB,IAAI+5C,6BAA6B,CAACC,UAAU,IAAI,IAAI,EAAE;gBAClDD,6BAA6B,CAACC,UAAU,GAAGh6C,GAAG,CAACnF,IAAI;cACvD,CAAC,MACI,IAAI,CAAC,CAACmF,GAAG,IAAI,CAAC,CAACA,GAAG,CAACnF,IAAI,EAAE;gBAC1B,IAAIw/C,EAAE,GAAG,CAAC,CAAC;gBACX5jD,OAAO,CAAC4M,OAAO,CAACrD,GAAG,CAACnF,IAAI,EAAE,UAAUtE,EAAE,EAAE;kBAAE8jD,EAAE,CAAC9jD,EAAE,CAACgK,IAAI,CAAC,GAAGhK,EAAE,CAAC+jD,UAAU;gBAAE,CAAC,CAAC;gBACzE7jD,OAAO,CAAC4M,OAAO,CAAC02C,6BAA6B,CAACC,UAAU,EACpD,UAAUzjD,EAAE,EAAE;kBACV,IAAI8jD,EAAE,CAAC9jD,EAAE,CAACgK,IAAI,CAAC,IAAIhK,EAAE,CAAC+jD,UAAU,EAAE;oBAC9B1jD,UAAU,CAAC+K,UAAU,CAAC,cAAc,GAAGpL,EAAE,CAACgK,IAAI,CAAC;kBACnD;gBACJ,CAAC,CAAC;gBACNw5C,6BAA6B,CAACC,UAAU,GAAGh6C,GAAG,CAACnF,IAAI;cACvD;YACJ,CAAC,CAAC;UACV;QACJ,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;QAEb,IAAIyiB,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBmb,QAAQ,CAAClb,OAAO,CAAC,IAAI,CAAC;QACtB,OAAOkb,QAAQ,CAACjb,OAAO;MAC3B;IACJ,CAAC,CAAC;EAEV,CAAC;EAED03C,6BAA6B,CAACQ,IAAI,GAAG,YAAY;IAC7C,IAAIR,6BAA6B,CAACG,QAAQ,EAAE;MACxCroB,SAAS,CAAC2oB,MAAM,CAACT,6BAA6B,CAACE,KAAK,CAAC;MACrDF,6BAA6B,CAACE,KAAK,GAAG,IAAI;MAC1CF,6BAA6B,CAACC,UAAU,GAAG,IAAI;MAC/CD,6BAA6B,CAACE,KAAK,GAAG,IAAI;MAC1CF,6BAA6B,CAACG,QAAQ,GAAG,KAAK;IAClD;EACJ,CAAC;EAED,OAAOH,6BAA6B;AACxC,CAAC,CAGJ,CAAC,C;;;;;;;;;;;;;;;;;;AC5EN,CAAmC;AAEnCtjD,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,kBAAkB,EAAE,CACnD,YAAY;EACR,IAAI,CAACklC,uBAAuB,GAAG,YAAY;IACvC,IAAIC,MAAM,GAAG,EAAE;IACfA,MAAM,CAAC39C,IAAI,CAAC,wKAAwK,CAAC;IACrL29C,MAAM,CAAC39C,IAAI,CAAC,qPAAqP,CAAC;IAClQ29C,MAAM,CAAC39C,IAAI,CAAC,gIAAgI,CAAC;IAC7I29C,MAAM,CAAC39C,IAAI,CAAC,iaAAia,CAAC;IAC9a29C,MAAM,CAAC39C,IAAI,CAAC,wKAAwK,CAAC;IACrL29C,MAAM,CAAC39C,IAAI,CAAC,6GAA6G,CAAC;IAC1H29C,MAAM,CAAC39C,IAAI,CAAC,0DAA0D,CAAC;IACvE29C,MAAM,CAAC39C,IAAI,CAAC,4CAA4C,CAAC;IACzD29C,MAAM,CAAC39C,IAAI,CAAC,gDAAgD,CAAC;IAC7D29C,MAAM,CAAC39C,IAAI,CAAC,kDAAkD,CAAC;;IAE/D;IACA29C,MAAM,CAAC39C,IAAI,CAAC,2aAA2a,CAAC;IACxb29C,MAAM,CAAC39C,IAAI,CAAC,wEAAwE,CAAC;IACrF29C,MAAM,CAAC39C,IAAI,CAAC,0DAA0D,CAAC;IACvE29C,MAAM,CAAC39C,IAAI,CAAC,gEAAgE,CAAC;IAC7E29C,MAAM,CAAC39C,IAAI,CAAC,8DAA8D,CAAC;;IAE3E;IACA29C,MAAM,CAAC39C,IAAI,CAAC,yNAAyN,CAAC;IAEtO29C,MAAM,CAAC39C,IAAI,CAAC,gmBAAgmB,CAAC;;IAE7mB;IACA29C,MAAM,CAAC39C,IAAI,CAAC,yLAAyL,CAAC;IAEtM29C,MAAM,CAAC39C,IAAI,CAAC,sGAAsG,CAAC;IACnH29C,MAAM,CAAC39C,IAAI,CAAC,0EAA0E,CAAC;IAEvF,OAAO29C,MAAM;EACjB,CAAC;EAED,IAAI,CAACC,OAAO,GAAG,UAAUC,EAAE,EAAE;IACzBA,EAAE,CAACC,UAAU,CAAC,uDAAuD,CAAC;IACtED,EAAE,CAACC,UAAU,CAAC,uDAAuD,CAAC;IACtED,EAAE,CAACC,UAAU,CAAC,uDAAuD,CAAC;IACtED,EAAE,CAACC,UAAU,CAAC,iEAAiE,CAAC;IAChFD,EAAE,CAACC,UAAU,CAAC,iEAAiE,CAAC;IAChFD,EAAE,CAACC,UAAU,CAAC,iEAAiE,CAAC;IAChF,OAAO,yBAAyB;EACpC,CAAC;EAED,IAAI,CAACC,OAAO,GAAG,UAAUF,EAAE,EAAE;IACzBA,EAAE,CAACC,UAAU,CAAC,mRAAmR,CAAC;IAClS,OAAO,2BAA2B;EACtC,CAAC;EAED,IAAI,CAACE,OAAO,GAAG,UAAUH,EAAE,EAAE;IACzBA,EAAE,CAACC,UAAU,CAAC,mDAAmD,CAAC;IAClED,EAAE,CAACC,UAAU,CAAC,yDAAyD,CAAC;IACxED,EAAE,CAACC,UAAU,CAAC,6DAA6D,CAAC;IAC5ED,EAAE,CAACC,UAAU,CAAC,mEAAmE,CAAC;IAElF,OAAO,0EAA0E;EACrF,CAAC;EACD,IAAI,CAACG,OAAO,GAAG,UAAUJ,EAAE,EAAE;IACzBA,EAAE,CAACC,UAAU,CAAC,gGAAgG,GAC1G,2OAA2O,CAAC;IAEhPD,EAAE,CAACC,UAAU,CAAC,gDAAgD,CAAC;IAC/DD,EAAE,CAACC,UAAU,CAAC,mDAAmD,CAAC;IAClED,EAAE,CAACC,UAAU,CAAC,sDAAsD,CAAC;IACrED,EAAE,CAACC,UAAU,CAAC,mCAAmC,CAAC;IAClDD,EAAE,CAACC,UAAU,CAAC,uGAAuG,GACjH,+MAA+M,GAC/M,qMAAqM,CAAC;IAE1MD,EAAE,CAACC,UAAU,CAAC,0DAA0D,CAAC;IACzED,EAAE,CAACC,UAAU,CAAC,6DAA6D,CAAC;IAE5ED,EAAE,CAACC,UAAU,CAAC,4DAA4D,CAAC;IAC3ED,EAAE,CAACC,UAAU,CAAC,8DAA8D,CAAC;IAE7E,OAAO,iCAAiC;EAC5C,CAAC;EAED,IAAI,CAACI,OAAO,GAAG,UAAUL,EAAE,EAAE;IACzBA,EAAE,CAACC,UAAU,CAAC,uDAAuD,CAAC;IAEtE,OAAO,iCAAiC;EAC5C,CAAC;EAED,IAAI,CAACK,OAAO,GAAG,UAAUvD,GAAG,EAAE;IAC1BA,GAAG,CAACkD,UAAU,CAAC,iDAAiD,CAAC;IACjElD,GAAG,CAACkD,UAAU,CAAC,2DAA2D,CAAC;IAE3E,OAAO,kEAAkE;EAC7E,CAAC;EAED,IAAI,CAACM,OAAO,GAAG,UAAUxD,GAAG,EAAE;IAC1BA,GAAG,CAACkD,UAAU,CAAC,sDAAsD,CAAC;IAEtE,OAAO,0CAA0C;EACrD,CAAC;EAED,IAAI,CAACO,OAAO,GAAG,UAAUzD,GAAG,EAAE;IAC1BA,GAAG,CAACkD,UAAU,CAAC,kDAAkD,CAAC;IAElE,OAAO,sCAAsC;EACjD,CAAC;EAED,IAAI,CAACQ,QAAQ,GAAG,UAAU1D,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,8CAA8C,CAAC;IAE9D,OAAO,kCAAkC;EAC7C,CAAC;EAED,IAAI,CAACS,QAAQ,GAAG,UAAU3D,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,mEAAmE,CAAC;IACnFlD,GAAG,CAACkD,UAAU,CAAC,6EAA6E,CAAC;IAC7FlD,GAAG,CAACkD,UAAU,CAAC,kEAAkE,CAAC;IAClFlD,GAAG,CAACkD,UAAU,CAAC,4EAA4E,CAAC;IAE5F,OAAO,6GAA6G;EACxH,CAAC;EAED,IAAI,CAACU,QAAQ,GAAG,UAAU5D,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,0DAA0D,CAAC;IAC1ElD,GAAG,CAACkD,UAAU,CAAC,oEAAoE,CAAC;IAEpF,OAAO,6GAA6G;EACxH,CAAC;EAED,IAAI,CAACW,QAAQ,GAAG,UAAU7D,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,+MAA+M,CAAC;IAC/N,OAAO,iDAAiD;EAC5D,CAAC;EAED,IAAI,CAACY,QAAQ,GAAG,UAAU9D,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,iFAAiF,CAAC;IACjG,OAAO,gDAAgD;EAC3D,CAAC;EAED,IAAI,CAACa,QAAQ,GAAG,UAAU/D,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,6EAA6E,CAAC;IAC7F,OAAO,4BAA4B;EACvC,CAAC;EAED,IAAI,CAACc,QAAQ,GAAG,UAAUhE,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,uDAAuD,CAAC;IACvE,OAAO,sBAAsB;EACjC,CAAC;EAED,IAAI,CAACe,QAAQ,GAAG,UAAUjE,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,iEAAiE,CAAC;IACjF,OAAO,gCAAgC;EAC3C,CAAC;EAED,IAAI,CAACgB,QAAQ,GAAG,UAAUlE,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,6GAA6G,CAAC;IAC7H,OAAO,yBAAyB;EACpC,CAAC;EAED,IAAI,CAACiB,QAAQ,GAAG,UAAUnE,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,mDAAmD,CAAC;IACnE,OAAO,0BAA0B;EACrC,CAAC;EAED,IAAI,CAACkB,QAAQ,GAAG,UAAUpE,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,uDAAuD,CAAC;IACvElD,GAAG,CAACkD,UAAU,CAAC,iEAAiE,CAAC;IAEjF,OAAO,2EAA2E;EACtF,CAAC;EAED,IAAI,CAACmB,QAAQ,GAAG,UAAUrE,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,kDAAkD,CAAC;IAElE,OAAO,yCAAyC;EACpD,CAAC;EAED,IAAI,CAACoB,QAAQ,GAAG,UAAUtE,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,yDAAyD,CAAC;IACzElD,GAAG,CAACkD,UAAU,CAAC,mEAAmE,CAAC;IAEnF,OAAO,6EAA6E;EACxF,CAAC;EAED,IAAI,CAACqB,QAAQ,GAAG,UAAUvE,GAAG,EAAE;IAC3B;IACAA,GAAG,CAACkD,UAAU,CAAC,+HAA+H,CAAC;IAC/I,OAAO,mCAAmC;EAC9C,CAAC;EAED,IAAI,CAACsB,QAAQ,GAAG,UAAUxE,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,6DAA6D,CAAC;IAC7ElD,GAAG,CAACkD,UAAU,CAAC,iEAAiE,CAAC;IACjFlD,GAAG,CAACkD,UAAU,CAAC,sDAAsD,CAAC;IACtElD,GAAG,CAACkD,UAAU,CAAC,6DAA6D,CAAC;IAE7E,OAAO,mCAAmC;EAC9C,CAAC;EAED,IAAI,CAACuB,QAAQ,GAAG,UAAUzE,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,qEAAqE,CAAC;IACrF,OAAO,wCAAwC;EACnD,CAAC;EAED,IAAI,CAACwB,QAAQ,GAAG,UAAU1E,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,qDAAqD,CAAC;IACrElD,GAAG,CAACkD,UAAU,CAAC,+DAA+D,CAAC;IAE/E,OAAO,yEAAyE;EACpF,CAAC;EAED,IAAI,CAACyB,QAAQ,GAAG,UAAU3E,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,qEAAqE,CAAC;IACrFlD,GAAG,CAACkD,UAAU,CAAC,sEAAsE,CAAC;IAEtF,OAAO,iEAAiE;EAC5E,CAAC;EAED,IAAI,CAAC0B,QAAQ,GAAG,UAAU5E,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,sIAAsI,CAAC;IAEtJ,OAAO,0EAA0E;EACrF,CAAC;EAED,IAAI,CAAC2B,QAAQ,GAAG,UAAU7E,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,4JAA4J,CAAC;IAC5K,OAAO,4BAA4B;EACvC,CAAC;EAED,IAAI,CAAC4B,QAAQ,GAAG,UAAU9E,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,sEAAsE,CAAC;IAEtF,OAAO,6CAA6C;EACxD,CAAC;EAED,IAAI,CAAC6B,QAAQ,GAAG,UAAU/E,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,wEAAwE,CAAC;IAExF,OAAO,sCAAsC;EACjD,CAAC;EAED,IAAI,CAAC8B,QAAQ,GAAG,UAAUhF,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,qDAAqD,CAAC;IACrElD,GAAG,CAACkD,UAAU,CAAC,+DAA+D,CAAC;IAE/E,OAAO,yEAAyE;EACpF,CAAC;EAED,IAAI,CAAC+B,QAAQ,GAAG,UAASjF,GAAG,EAAE;IAC1BA,GAAG,CAACkD,UAAU,CAAC,+CAA+C,CAAC;IAC/DlD,GAAG,CAACkD,UAAU,CAAC,+CAA+C,CAAC;IAC/DlD,GAAG,CAACkD,UAAU,CAAC,+CAA+C,CAAC;IAC/DlD,GAAG,CAACkD,UAAU,CAAC,+CAA+C,CAAC;IAC/DlD,GAAG,CAACkD,UAAU,CAAC,+CAA+C,CAAC;IAC/DlD,GAAG,CAACkD,UAAU,CAAC,+CAA+C,CAAC;IAC/DlD,GAAG,CAACkD,UAAU,CAAC,+CAA+C,CAAC;IAC/DlD,GAAG,CAACkD,UAAU,CAAC,+CAA+C,CAAC;IAC/DlD,GAAG,CAACkD,UAAU,CAAC,+CAA+C,CAAC;IAC/DlD,GAAG,CAACkD,UAAU,CAAC,gDAAgD,CAAC;IAChElD,GAAG,CAACkD,UAAU,CAAC,0CAA0C,CAAC;IAC1DlD,GAAG,CAACkD,UAAU,CAAC,0CAA0C,CAAC;IAC1DlD,GAAG,CAACkD,UAAU,CAAC,0CAA0C,CAAC;IAC1DlD,GAAG,CAACkD,UAAU,CAAC,0CAA0C,CAAC;IAC1DlD,GAAG,CAACkD,UAAU,CAAC,0CAA0C,CAAC;IAC1DlD,GAAG,CAACkD,UAAU,CAAC,0CAA0C,CAAC;IAC1DlD,GAAG,CAACkD,UAAU,CAAC,0CAA0C,CAAC;IAC1DlD,GAAG,CAACkD,UAAU,CAAC,0CAA0C,CAAC;IAC1DlD,GAAG,CAACkD,UAAU,CAAC,0CAA0C,CAAC;IAC1DlD,GAAG,CAACkD,UAAU,CAAC,4CAA4C,CAAC;IAE5D,OAAO,4CAA4C;EACvD,CAAC;EAED,IAAI,CAACgC,QAAQ,GAAG,UAASlF,GAAG,EAAE;IAC1BA,GAAG,CAACkD,UAAU,CAAC,yDAAyD,CAAC;IACzElD,GAAG,CAACkD,UAAU,CAAC,yDAAyD,CAAC;IACzElD,GAAG,CAACkD,UAAU,CAAC,yDAAyD,CAAC;IACzElD,GAAG,CAACkD,UAAU,CAAC,yDAAyD,CAAC;IACzElD,GAAG,CAACkD,UAAU,CAAC,yDAAyD,CAAC;IACzElD,GAAG,CAACkD,UAAU,CAAC,yDAAyD,CAAC;IACzElD,GAAG,CAACkD,UAAU,CAAC,yDAAyD,CAAC;IACzElD,GAAG,CAACkD,UAAU,CAAC,yDAAyD,CAAC;IACzElD,GAAG,CAACkD,UAAU,CAAC,yDAAyD,CAAC;IACzElD,GAAG,CAACkD,UAAU,CAAC,0DAA0D,CAAC;IAE1E,OAAO,uDAAuD;EAClE,CAAC;EAED,IAAI,CAACiC,QAAQ,GAAG,UAAUnF,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,qEAAqE,CAAC;IAErF,OAAO,4CAA4C;EACvD,CAAC;EAGD,IAAI,CAACkC,QAAQ,GAAG,UAAUpF,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,sDAAsD,CAAC;IAEtE,OAAO,kCAAkC;EAC7C,CAAC;EAED,IAAI,CAACmC,QAAQ,GAAG,UAAUrF,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,iEAAiE,CAAC;IACjFlD,GAAG,CAACkD,UAAU,CAAC,uEAAuE,CAAC;IACvFlD,GAAG,CAACkD,UAAU,CAAC,sEAAsE,CAAC;IAEtF,OAAO,4EAA4E;EACvF,CAAC;EAED,IAAI,CAACoC,QAAQ,GAAG,UAAUtF,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,qDAAqD,CAAC;IACrE,OAAO,oCAAoC;EAC/C,CAAC;EAED,IAAI,CAACqC,QAAQ,GAAG,UAAUvF,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,mEAAmE,CAAC;IAEnF,OAAO,2CAA2C;EACtD,CAAC;EAED,IAAI,CAACsC,QAAQ,GAAG,UAAUxF,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,iEAAiE,CAAC;IAEjF,OAAO,yCAAyC;EACpD,CAAC;EAED,IAAI,CAACuC,QAAQ,GAAG,UAAUzF,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,2EAA2E,CAAC;IAE3F,OAAO,kDAAkD;EAC7D,CAAC;EAED,IAAI,CAACwC,QAAQ,GAAG,UAAU1F,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,sJAAsJ,CAAC;IAEtK,OAAO,oDAAoD;EAC/D,CAAC;EAED,IAAI,CAACyC,QAAQ,GAAG,UAAU3F,GAAG,EAAE;IAC3BA,GAAG,CAACkD,UAAU,CAAC,6HAA6H,CAAC;IAE7I,OAAO,2DAA2D;EACtE,CAAC;;EAED;EACA,IAAI,CAAC0C,iBAAiB,GAAG;IACrB,CAAC,EAAE,IAAI,CAAC5C,OAAO;IACf,CAAC,EAAE,IAAI,CAACG,OAAO;IACf,CAAC,EAAE,IAAI,CAACC,OAAO;IACf,CAAC,EAAE,IAAI,CAACC,OAAO;IACf,CAAC,EAAE,IAAI,CAACC,OAAO;IACf,CAAC,EAAE,IAAI,CAACC,OAAO;IACf,CAAC,EAAE,IAAI,CAACC,OAAO;IACf,CAAC,EAAE,IAAI,CAACC,OAAO;IACf,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC,QAAQ;IACjB,EAAE,EAAE,IAAI,CAACC;EACb,CAAC;EAED,IAAI,CAACE,aAAa,GAAG,UAAUC,cAAc,EAAE7C,EAAE,EAAE;IAC/C,IAAI8C,OAAO,GAAGD,cAAc;IAC5B,IAAI,OAAO7C,EAAE,CAACC,UAAU,KAAK,UAAU,EAAE;MACrC,OAAO,IAAI,CAAC0C,iBAAiB,CAAC3X,cAAc,CAAC8X,OAAO,GAAG,CAAC,CAAC,EAAE;QAEvD,IAAIhnC,IAAI,GAAG,IAAI,CAAC6mC,iBAAiB,CAACG,OAAO,GAAG,CAAC,CAAC,CAAC9C,EAAE,CAAC;QAElD8C,OAAO,EAAE;QAET9C,EAAE,CAACC,UAAU,CAAC,qDAAqD,GAAG6C,OAAO,GAAG,IAAI,IAAI,CAAChnC,IAAI,GAAG,EAAE,GAAGA,IAAI,CAAC,GAAG,IAAI,CAAC;MACtH;IACJ;IAEA,OAAOgnC,OAAO;EAClB,CAAC;EAED,IAAI,CAACC,SAAS,GAAG,YAAY;IAEzB,IAAIC,aAAa,GAAG;MAChBt9C,IAAI,EAAE,UAAU;MAChBu9C,OAAO,EAAE,CACL;QACIv9C,IAAI,EAAE,MAAM;QACZw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCqsC,UAAU,EAAE;MAChB,CAAC,EACD;QACI19C,IAAI,EAAE,OAAO;QACbw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,cAAc;QACpBw9C,QAAQ,EAAEtD,8CAAiB,CAAC2D,QAAQ;QACpCF,OAAO,EAAE,IAAI;QACbC,YAAY,EAAE;MAClB,CAAC,CACJ;MACDR,OAAO,EAAE;IACb,CAAC;IAED,IAAIU,aAAa,GAAG;MAChB99C,IAAI,EAAE,UAAU;MAChBu9C,OAAO,EAAE,CACL;QACIv9C,IAAI,EAAE,WAAW;QACjBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCqsC,UAAU,EAAE,IAAI;QAChBK,UAAU,EAAE;MAChB,CAAC,EACD;QACI/9C,IAAI,EAAE,aAAa;QACnBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,IAAI;QACbC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,WAAW;QACjBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,MAAM;QACZw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,SAAS;QACfw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,QAAQ;QACdw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,UAAU;QAChBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE;MACb,CAAC,EACD;QACI39C,IAAI,EAAE,UAAU;QAChBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE;MACb,CAAC,EACD;QACI39C,IAAI,EAAE,YAAY;QAClBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,cAAc;QACpBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,YAAY;QAClBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,OAAO;QACbw9C,QAAQ,EAAEtD,8CAAiB,CAACrqC,MAAM;QAClC8tC,OAAO,EAAE,IAAI;QACbC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,SAAS;QACfw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,SAAS;QACfw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,SAAS;QACfw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,WAAW;QACjBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,OAAO;QACbw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,gBAAgB;QACtBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,aAAa;QACnBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,aAAa;QACnBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,aAAa;QACnBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,SAAS;QACfw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,eAAe;QACrBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,MAAM;QACZw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,SAAS;QACfw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,OAAO;QACbw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE;MACb,CAAC,EACD;QACI39C,IAAI,EAAE,yBAAyB;QAC/Bw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,wBAAwB;QAC9Bw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,iBAAiB;QACvBw9C,QAAQ,EAAEtD,8CAAiB,CAAChI,OAAO;QACnCyL,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,aAAa;QACnBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,eAAe;QACrBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,WAAW;QACjBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,CACJ;MACDR,OAAO,EAAE;IACb,CAAC;IAED,IAAIY,cAAc,GAAG;MACjBh+C,IAAI,EAAE,WAAW;MACjBu9C,OAAO,EAAE,CACL;QACIv9C,IAAI,EAAE,IAAI;QACVw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCqsC,UAAU,EAAE,IAAI;QAChBK,UAAU,EAAE;MAChB,CAAC,EACD;QACI/9C,IAAI,EAAE,MAAM;QACZw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE;MACb,CAAC,EACD;QACI39C,IAAI,EAAE,OAAO;QACbw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCusC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,aAAa;QACnBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCusC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,OAAO;QACbw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCusC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,qBAAqB;QAC3Bw9C,QAAQ,EAAEtD,8CAAiB,CAAChI,OAAO;QACnCyL,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,WAAW;QACjBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCusC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,iBAAiB;QACvBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCusC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,UAAU;QAChBw9C,QAAQ,EAAEtD,8CAAiB,CAACrqC,MAAM;QAClC+tC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,WAAW;QACjBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCusC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,OAAO;QACbw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCusC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,SAAS;QACfw9C,QAAQ,EAAEtD,8CAAiB,CAACrqC,MAAM;QAClC+tC,YAAY,EAAE;MAClB,CAAC,EACD;QACI59C,IAAI,EAAE,aAAa;QACnBw9C,QAAQ,EAAEtD,8CAAiB,CAACrqC,MAAM;QAClC+tC,YAAY,EAAE;MAClB,CAAC,CACJ;MACDR,OAAO,EAAE;IACb,CAAC;IAED,IAAIa,wBAAwB,GAAG;MAC3Bj+C,IAAI,EAAE,qBAAqB;MAC3Bu9C,OAAO,EAAE,CACL;QACIv9C,IAAI,EAAE,IAAI;QACVw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCqsC,UAAU,EAAE,IAAI,CAAC;QACjB;MACJ,CAAC,EACD;QACI19C,IAAI,EAAE,MAAM;QACZw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE;MACb,CAAC,EACD;QACI39C,IAAI,EAAE,aAAa;QACnBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE,KAAK;QACdC,YAAY,EAAE;MAClB,CAAC,CACJ;MACDR,OAAO,EAAE;IACb,CAAC;IACD,IAAIc,iBAAiB,GAAAC,eAAA;MACjBn+C,IAAI,EAAE,UAAU;MAChBo9C,OAAO,EAAE,CAAC;MACVG,OAAO,EAAE,CACL;QACIv9C,IAAI,EAAE,SAAS;QACfw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE;MACb,CAAC,EACD;QACI39C,IAAI,EAAE,QAAQ;QACdw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCqsC,UAAU,EAAE,IAAI;QAChBC,OAAO,EAAE;MACb,CAAC,EACD;QACI39C,IAAI,EAAE,UAAU;QAChBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE;MACb,CAAC,EACD;QACI39C,IAAI,EAAE,QAAQ;QACdw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE;MACb,CAAC,EACD;QACI39C,IAAI,EAAE,YAAY;QAClBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE;MACb,CAAC,EACD;QACI39C,IAAI,EAAE,cAAc;QACpBw9C,QAAQ,EAAEtD,8CAAiB,CAAC2D,QAAQ;QACpCF,OAAO,EAAE;MACb,CAAC,EACD;QACI39C,IAAI,EAAE,aAAa;QACnBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC;MAChC,CAAC,EACD;QACIrR,IAAI,EAAE,YAAY;QAClBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC;MAChC,CAAC,EACD;QACIrR,IAAI,EAAE,UAAU;QAChBw9C,QAAQ,EAAEtD,8CAAiB,CAACrqC;MAChC,CAAC,EACD;QACI7P,IAAI,EAAE,WAAW;QACjBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC;MAChC,CAAC;IACJ,cACQ,CAAC,CACb;IAED,IAAI+sC,uBAAuB,GAAGloD,OAAO,CAAC+F,IAAI,CAAC6hD,aAAa,CAAC;IACzDM,uBAAuB,CAACp+C,IAAI,GAAG,oBAAoB;IAEnD9J,OAAO,CAAC4M,OAAO,CAACs7C,uBAAuB,CAACb,OAAO,EAAE,UAAU15C,CAAC,EAAE;MAC1D,IAAIA,CAAC,CAAC7D,IAAI,KAAK,UAAU,IAAI6D,CAAC,CAAC7D,IAAI,KAAK,OAAO,EAAE;QAC7C6D,CAAC,CAAC+5C,YAAY,GAAG,KAAK;MAC1B;IACJ,CAAC,CAAC;IAEF,IAAIS,mBAAmB,GAAG;MACtBr+C,IAAI,EAAE,gBAAgB;MACtBu9C,OAAO,EAAE,CACL;QACIv9C,IAAI,EAAE,SAAS;QACfw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE;MACb,CAAC,EACD;QACI39C,IAAI,EAAE,iBAAiB;QACvBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE;MACb,CAAC,EACD;QACI39C,IAAI,EAAE,QAAQ;QACdw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE;MACb,CAAC,EACD;QACI39C,IAAI,EAAE,aAAa;QACnBw9C,QAAQ,EAAEtD,8CAAiB,CAAC2D,QAAQ;QACpCF,OAAO,EAAE;MACb,CAAC;IAET,CAAC;IAED,IAAIW,cAAc,GAAG;MACjBt+C,IAAI,EAAE,WAAW;MACjBu9C,OAAO,EAAE,CACL;QACIv9C,IAAI,EAAE,SAAS;QACfw9C,QAAQ,EAAEtD,8CAAiB,CAACrqC,MAAM;QAClC8tC,OAAO,EAAE;MACb,CAAC,CACJ;MACDP,OAAO,EAAE;IACb,CAAC;IAED,IAAImB,kBAAkB,GAAG;MACrBv+C,IAAI,EAAE,eAAe;MACrBu9C,OAAO,EAAE,CACL;QACIv9C,IAAI,EAAE,SAAS;QACfw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE;MACb,CAAC,EACD;QACI39C,IAAI,EAAE,SAAS;QACfw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE;MACb,CAAC,EACD;QACI39C,IAAI,EAAE,UAAU;QAChBw9C,QAAQ,EAAEtD,8CAAiB,CAAC7oC,MAAM;QAClCssC,OAAO,EAAE;MACb,CAAC,EACD;QACI39C,IAAI,EAAE,aAAa;QACnBw9C,QAAQ,EAAEtD,8CAAiB,CAAC2D,QAAQ;QACpCF,OAAO,EAAE;MACb,CAAC;IAET,CAAC;IAED,IAAIl+C,GAAG,GAAG;MACNO,IAAI,EAAE,OAAO;MACbw+C,MAAM,EACF,CACIlB,aAAa,EACbQ,aAAa,EACbE,cAAc,EACdC,wBAAwB,EACxBC,iBAAiB,EACjBG,mBAAmB,EACnBC,cAAc,EACdC,kBAAkB,CACrB;MACLnB,OAAO,EAAE,CAAC;MACVqB,cAAc,EAAE;IACpB,CAAC;IAED,OAAOh/C,GAAG;EACd,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;;;;;;ACx2BqE;AACjC;AACO;AAElDvJ,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,4BAA4B,EAC7D,CAAC,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAChD,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAC7D,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EACjF,UAAUE,UAAU,EAAED,MAAM,EAAEO,SAAS,EAAEipB,YAAY,EACjDhpB,QAAQ,EAAEL,YAAY,EAAEM,cAAc,EAAEJ,aAAa,EACrDypB,OAAO,EAAE5pB,aAAa,EAAE2pB,SAAS,EAAE4+B,cAAc,EAAEC,QAAQ,EAAEpoD,QAAQ,EAAE;EAEvEN,MAAM,CAAC2oD,aAAa,GAAG,IAAI;EAC3B3oD,MAAM,CAAC4oD,WAAW,GAAG,YAAW;IAC5B,OAAO5oD,MAAM,CAAC2oD,aAAa,GAAG,6BAA6B,GAAE,mBAAmB;EACpF,CAAC;EAED3oD,MAAM,CAAC6oD,YAAY,GAAG;IAClB9Q,MAAM,EAAE/3C,MAAM,CAAC4oD,WAAW,CAAC;EAC9B,CAAC;EAEF5oD,MAAM,CAAC0I,MAAM,CAAC,eAAe,EAAC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IACxD,IAAID,QAAQ,IAAIC,QAAQ,EAAE;MACtB5I,MAAM,CAAC8oD,QAAQ,CAACC,aAAa,CAAC,CAAC;IACnC;EACJ,CAAC,CAAC;EAEF/oD,MAAM,CAAC8oD,QAAQ,GAAG,IAAI;EAEtB9oD,MAAM,CAACgpD,cAAc,GAAGV,mFAAc,CAACW,oBAAoB,CAAC,CAAC,CAAC,CAAC;;EAE/DjpD,MAAM,CAACkpD,aAAa,GAAG,YAAW;IAC9B;IACA,IAAIC,EAAE,GAAG9pD,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,qBAAqB,CAAC;IAC3D7oC,MAAM,CAACm4B,YAAY,CAAC4xB,UAAU,CAAC,qBAAqB,CAAC;IACrDppD,MAAM,CAAC6oD,YAAY,GAAGM,EAAE,GAAGzxB,IAAI,CAAC2T,KAAK,CAAC8d,EAAE,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAG,CAACnpD,MAAM,CAAC6oD,YAAY,EACnB7oD,MAAM,CAAC6oD,YAAY,GAAG,CAAC,CAAC;;IAE5B;IACAxpD,MAAM,CAACm4B,YAAY,CAAC4xB,UAAU,CAAC,qBAAqB,CAAC;IAErD,IAAGppD,MAAM,CAAC6oD,YAAY,CAACQ,MAAM,EACzBrpD,MAAM,CAAC6oD,YAAY,CAACQ,MAAM,GAAG,IAAI5tB,IAAI,CAACz7B,MAAM,CAAC6oD,YAAY,CAACQ,MAAM,CAAC;IACrE,IAAGrpD,MAAM,CAAC6oD,YAAY,CAACS,QAAQ,EAC3BtpD,MAAM,CAAC6oD,YAAY,CAACS,QAAQ,GAAG,IAAI7tB,IAAI,CAACz7B,MAAM,CAAC6oD,YAAY,CAACS,QAAQ,CAAC;EAC7E,CAAC;EAEDtpD,MAAM,CAACupD,SAAS,GAAG,IAAI;EAEvBvpD,MAAM,CAACwpD,QAAQ,GAAG,YAAW;IACzBxpD,MAAM,CAACkpD,aAAa,CAAC,CAAC;IAEtB,IAAGlpD,MAAM,CAACupD,SAAS,EAAE;MACjBvpD,MAAM,CAACupD,SAAS,GAAG,KAAK;MACxB,IAAIniD,KAAK,GAAGpH,MAAM;MAClB,IAAIypD,UAAU,GAAGnpC,QAAQ,CAACC,cAAc,CAAC,cAAc,CAAC;MACxDvgB,MAAM,CAAC8oD,QAAQ,GAAG,IAAIP,wDAAQ,CAACkB,UAAU,EAAE;QACvCtgC,OAAO,EAAE,CAACq/B,6DAAa,CAAC;QACxBkB,WAAW,EAAE,cAAc;QAC3BC,QAAQ,EAAE,CAAC;QACXC,eAAe,EAAE,CAAC;QAClBrY,MAAM,EAAEvxC,MAAM,CAAC6pD,YAAY;QAC3BC,YAAY,EAAE;UACVC,KAAK,EAAE/pD,MAAM,CAAC6oD,YAAY,CAACS,QAAQ;UACnCU,GAAG,EAAEhqD,MAAM,CAAC6oD,YAAY,CAACQ;QAC7B,CAAC;QACDY,UAAU,EAAE,SAAZA,UAAUA,CAAW7e,IAAI,EAAE;UACvBhkC,KAAK,CAAC8iD,gBAAgB,CAAC9e,IAAI,CAAC;QAChC,CAAC;QACD+e,YAAY,EAAE,SAAdA,YAAYA,CAAWnxC,GAAG,EAAE;UACxB,IAAIoxC,OAAO,GAAGtmD,CAAC,CAAC,4CAA4C,CAAC;UAC7D,IAAIqpC,GAAG,GAAGsb,cAAc,CAACjR,GAAG,CAAC,iBAAiB,CAAC;UAC/C,IAAI53C,EAAE,GAAG8oD,QAAQ,CAACvb,GAAG,CAAC,CAAC/lC,KAAK,CAAC;UAC7BgjD,OAAO,CAACC,OAAO,CAACzqD,EAAE,CAAC;QACvB;MACJ,CAAC,CAAC;MAEFI,MAAM,CAAC8oD,QAAQ,CAAC/mC,MAAM,CAAC,CAAC;MAExB,IAAIje,CAAC,CAAC,8CAA8C,CAAC,CAACsC,MAAM,GAAG,CAAC,EAAE;QAC9DtC,CAAC,CAAC,8CAA8C,CAAC,CAACwmD,QAAQ,CAAC,mCAAmC,CAAC;MACnG;MAEA,IAAIxmD,CAAC,CAAC,6CAA6C,CAAC,CAACsC,MAAM,GAAG,CAAC,IAAItC,CAAC,CAAC,6CAA6C,CAAC,CAACsC,MAAM,GAAG,CAAC,EAAE;QAC5HtC,CAAC,CAAC,6CAA6C,CAAC,CAACwmD,QAAQ,CAAC,mCAAmC,CAAC;QAC9FxmD,CAAC,CAAC,6CAA6C,CAAC,CAACwmD,QAAQ,CAAC,mCAAmC,CAAC;MAClG;IAEJ,CAAC,MAAM;MACHtqD,MAAM,CAAC8oD,QAAQ,CAACC,aAAa,CAAC,CAAC;MAC/B/oD,MAAM,CAAC8oD,QAAQ,CAAC/mC,MAAM,CAAC,CAAC;IAC5B;EACJ,CAAC;EAED/hB,MAAM,CAACqC,GAAG,CAAC,uBAAuB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAEvD7D,aAAa,CAAC8E,UAAU,CAAC7E,QAAQ,EAAE,YAAY;MAC3CE,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAACwpD,QAAQ,CAAC,CAAC;MACrB,CAAC,EAAE,CAAC,CAAC;IACT,CAAC,CAAC;EACN,CAAC,CAAC;EAEFxpD,MAAM,CAACqC,GAAG,CAAC,UAAU,EAAE,YAAY;IAC/B,OAAOrC,MAAM,CAACgpD,cAAc;EAChC,CAAC,CAAC;EAEFhpD,MAAM,CAAC6pD,YAAY,GAAG,UAAUU,IAAI,EAAEC,eAAe,EAAEC,YAAY,EAAE;IAC9D;IACH,IAAIC,GAAG,GAAG5qD,OAAO,CAAC+F,IAAI,CAAC7F,MAAM,CAAC6oD,YAAY,CAAC;IACxC6B,GAAG,CAACpB,QAAQ,GAAGiB,IAAI,CAACR,KAAK;IACzBW,GAAG,CAACrB,MAAM,GAAGkB,IAAI,CAACP,GAAG;IACrBU,GAAG,CAAC3S,MAAM,GAAG/3C,MAAM,CAAC4oD,WAAW,CAAC,CAAC;IAEjC9kD,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACgpD,cAAc,CAAC2B,cAAc,CAAC,CAAC,EACzB,KAAK,EACLD,GAAG,CAAC,CACZ1mD,IAAI,CAAC,UAAUC,IAAI,EAAE;MAElBH,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,OAAOrE,MAAM,CAACgpD,cAAc,CAAC4B,mBAAmB,CAAC3mD,IAAI,CAAC4mD,IAAI,CAAC;IAC/D,CAAC,CAAC,CACD7mD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACpBmhD,eAAe,CAACnhD,GAAG,CAAC;IACrB,CAAC,CAAC,SACI,CAAC,UAAUlF,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACbomD,YAAY,CAAC,CAAC;MACdtqD,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACb,CAAC;EAEDnE,MAAM,CAACkqD,gBAAgB,GAAG,UAAS9e,IAAI,EAAE;IACrC/qC,aAAa,CAAC+L,WAAW,CAAC,uBAAuB,CAAC;IAClD/L,aAAa,CAAC+L,WAAW,CAAC,sBAAsB,CAAC;IAEjD5L,QAAQ,CAAC,YAAU;MACf,IAAIuF,MAAM,GAAG;QACTujD,QAAQ,EAAEle,IAAI,CAAC9oC,KAAK,CAACynD;MACzB,CAAC;;MAED;MACA1qD,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,iBAAiB,EAAEC,IAAI,CAACC,SAAS,CAAC5xB,MAAM,CAAC,CAAC;MACtE;MACA9F,UAAU,CAAC+K,UAAU,CAAC,iBAAiB,CAAC;IAC5C,CAAC,CAAC;EACN,CAAC;AACL,CAAC,CAET,CAAC,C;;;;;;;;;;;;;;;ACvJ2E;AAC9C;AAE9BlL,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,oBAAoB,EACrD,CAAC,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAChD,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAC7D,SAAS,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAC1D,UAAUE,UAAU,EAAED,MAAM,EAAEO,SAAS,EAAEipB,YAAY,EACjDhpB,QAAQ,EAAEL,YAAY,EAAEM,cAAc,EAAEJ,aAAa,EACrDypB,OAAO,EAAE6yB,gBAAgB,EAAE/kC,YAAY,EAAEiS,SAAS,EAAE;EAEpD7pB,MAAM,CAAC8qD,aAAa,GAAG;IACnBxB,QAAQ,EAAEjpD,aAAa,CAAC0qD,gBAAgB,CAAC,IAAItvB,IAAI,CAAC,CAAC,CAAC;IACpD4tB,MAAM,EAAEhpD,aAAa,CAAC0qD,gBAAgB,CAAC,IAAItvB,IAAI,CAAC,CAAC,CAAC;IAClDgkB,QAAQ,EAAE,GAAG;IACb1H,MAAM,EAAE,SAAS;IAAE;IACnBl3C,UAAU,EAAC;EACf,CAAC;EAEDb,MAAM,CAACq5B,YAAY,GAAG,CAAC;EACvBr5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;EACrBt5B,MAAM,CAACu5B,WAAW,GAAG,EAAE;EACvBv5B,MAAM,CAACw5B,YAAY,GAAG,CAAC;EACvBx5B,MAAM,CAACgrD,UAAU,GAAG,KAAK,CAAC,CAAC;EAC3BhrD,MAAM,CAACa,UAAU,GAAG,EAAE;EAEtBb,MAAM,CAACkE,IAAI,GAAG,EAAE;EAEhBlE,MAAM,CAACgpD,cAAc,GAAGV,mFAAc,CAACW,oBAAoB,CAAC,CAAC,CAAC,CAAC;;EAE/DhpD,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAC3Cif,QAAQ,EAAE1pB,SAAS,CAACwyC;EACxB,CAAC,CAAC,CAAC,CAAC;;EAEJ,IAAI,CAACvpB,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;EACJ;EAEApqB,MAAM,CAACkrB,eAAe,GAAGpB,OAAO,CAACqB,cAAc,CAACC,YAAY;EAC5DprB,MAAM,CAACuqB,eAAe,GAAGlqB,aAAa,CAACkqB,eAAe;EAEtDvqB,MAAM,CAAC6sB,gBAAgB,GAAG,YAAY;IAClCrsB,QAAQ,CAAC,YAAY;MACjBP,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;IACxC,CAAC,CAAC;EACN,CAAC;EAEDhL,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB7rB,MAAM,CAACirD,WAAW,CAAC,CAAC;IACpBjrD,MAAM,CAACkpD,aAAa,CAAC,CAAC;IACtBplD,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,OAAO1D,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC,CACpCl0C,IAAI,CAAC,YAAY;MACdkB,WAAW,CAAC,CAAC;MACb,OAAO7E,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;IAC7C,CAAC,CAAC,CACDl0C,IAAI,CAAC,YAAY;MACdF,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MACrC,OAAOnE,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;IAC7C,CAAC,CAAC,CACDl0C,IAAI,CAAC,YAAY;MACd,OAAO24C,gBAAgB,CAACuO,qCAAqC,CAAC,CAAC;IACnE,CAAC,CAAC,CACDlnD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAIA,GAAG,CAACnF,IAAI,CAACinD,cAAc,KAAK,IAAI,EAAE;QAClCnrD,MAAM,CAACm+C,SAAS,GAAG90C,GAAG,CAACnF,IAAI,CAACi6C,SAAS;QACrC,IAAIn+C,MAAM,CAACm+C,SAAS,CAAC/3C,MAAM,GAAG,CAAC,EAC3BpG,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,GAAGz/C,MAAM,CAACm+C,SAAS,CAAC,CAAC,CAAC,CAAC3S,WAAW;MACvE,CAAC,MAAM;QACHxrC,MAAM,CAACm+C,SAAS,GAAG,CAAC;UAChB3S,WAAW,EAAE,GAAG;UAChB9gB,UAAU,EAAEjqB,cAAc,CAACe,SAAS,CAAC,aAAa;QACtD,CAAC,CAAC,CAACiQ,MAAM,CAACpI,GAAG,CAACnF,IAAI,CAACi6C,SAAS,CAAC;MACjC;MACA,OAAO99C,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;IAC7C,CAAC,CAAC,CACDl0C,IAAI,CAAC,YAAY;MACd,OAAOhE,MAAM,CAACs6B,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,CACDt2B,IAAI,CAAC,YAAU;MACZF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACI,CAAC,UAAUF,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC,WACM,CAAC,YAAY;MACjB,IAAIiD,KAAK,GAAGpH,MAAM;MAClBQ,QAAQ,CAAC,YAAY;QACjBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MACzC,CAAC,CAAC;IACN,CAAC,CAAC;EACV,CAAC;EAEDxE,MAAM,CAACqC,GAAG,CAAC,iBAAiB,EAAE,YAAY;IACtCrC,MAAM,CAAC6rB,MAAM,CAAC,CAAC;EACnB,CAAC,CAAC;EAEF7rB,MAAM,CAAC0I,MAAM,CAAC,eAAe,EAAE,UAAU0iD,MAAM,EAAEC,MAAM,EAAE;IACrD,IAAIC,EAAE,GAAGxrD,OAAO,CAAC+F,IAAI,CAACulD,MAAM,CAAC;IAC7B,OAAOE,EAAE,CAACjwB,KAAK;IACf,OAAOiwB,EAAE,CAAClwB,IAAI;IACd,IAAImwB,EAAE,GAAGzrD,OAAO,CAAC+F,IAAI,CAACwlD,MAAM,CAAC;IAC7B,OAAOE,EAAE,CAAClwB,KAAK;IACf,OAAOkwB,EAAE,CAACnwB,IAAI;IACd,IAAIt7B,OAAO,CAAC0rD,MAAM,CAACF,EAAE,EAAEC,EAAE,CAAC,KAAK,IAAI,EAC/BvrD,MAAM,CAACs6B,MAAM,CAAC,CAAC;EACvB,CAAC,EAAE,IAAI,CAAC;EAERt6B,MAAM,CAACyrD,WAAW,GAAG,UAAUnpD,KAAK,EAAE;IAClC,IAAIA,KAAK,CAAC4I,KAAK,KAAK,EAAE,EAAE;MACpBlL,MAAM,CAAC8qD,aAAa,CAACjqD,UAAU,GAAGb,MAAM,CAACa,UAAU;IACvD;EACJ,CAAC;EAEDb,MAAM,CAAC0rD,IAAI,GAAG,YAAU;IACpB1rD,MAAM,CAAC8qD,aAAa,CAACjqD,UAAU,GAAGb,MAAM,CAACa,UAAU;EACvD,CAAC;EAEDb,MAAM,CAACqC,GAAG,CAAC,UAAU,EAAE,YAAY;IAC/B,OAAOrC,MAAM,CAACgpD,cAAc;EAChC,CAAC,CAAC;EAGFhpD,MAAM,CAAC85B,yBAAyB,GAAG,UAAU6xB,WAAW,EAAE;IACtD,IAAIvkD,KAAK,GAAGpH,MAAM;IAElB,IAAG,CAAC2rD,WAAW,EAAE;MACb,IAAI3rD,MAAM,CAACq5B,YAAY,GAAGr5B,MAAM,CAACs5B,UAAU,EAAE;QACzCt5B,MAAM,CAACq5B,YAAY,EAAE;MACzB,CAAC,MAAM;QACH,OAAOh5B,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;MAC7C;IACJ;IAEA,IAAI0T,GAAG,GAAG9rD,OAAO,CAAC+F,IAAI,CAAC7F,MAAM,CAAC8qD,aAAa,CAAC;;IAE5C;IACA,IAAG9qD,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,KAAK,GAAG,EAAE;MACtCmM,GAAG,CAACluC,UAAU,GAAG,GAAG;IACxB,CAAC,MAAM;MACHkuC,GAAG,CAACluC,UAAU,GAAG1d,MAAM,CAAC6rD,aAAa,CAAC7rD,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,CAAC;IACxE;IAEA37C,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,OAAO,IAAI,CAACilD,cAAc,CAAC2B,cAAc,CAC3BgB,WAAW,GAAG,CAAC,GAAG3rD,MAAM,CAACq5B,YAAY,EACtCr5B,MAAM,CAACu5B,WAAW,EAClBqyB,GAAG,CAAC,CACZ5nD,IAAI,CAAC,UAAUC,IAAI,EAAE;MAElB,IAAI0nD,WAAW,EAAE;QACbvkD,KAAK,CAACiyB,YAAY,GAAG,CAAC;QACtBjyB,KAAK,CAACkyB,UAAU,GAAG,CAAC;QACpBlyB,KAAK,CAACoyB,YAAY,GAAG,CAAC;QACtBpyB,KAAK,CAAClD,IAAI,GAAG,EAAE;MACnB;MAEAJ,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAAC4mD,IAAI,EAAE,UAAU3kD,GAAG,EAAEtG,EAAE,EAAE;QACjCwH,KAAK,CAAC0kD,SAAS,CAAClsD,EAAE,CAAC;QACnBwH,KAAK,CAAClD,IAAI,CAACmC,IAAI,CAACzG,EAAE,CAAC;MACvB,CAAC,CAAC;MAEFwH,KAAK,CAACgzB,QAAQ,CAACn2B,IAAI,CAAC80B,KAAK,CAAC;MAC1Bj1B,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,OAAOhE,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;IAC7C,CAAC,CAAC,SACI,CAAC,UAAU/zC,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAACo6B,QAAQ,GAAG,UAAUlO,KAAK,EAAE;IAC/BlsB,MAAM,CAACy5B,WAAW,GAAGvN,KAAK;IAC1B,IAAIqO,IAAI,GAAGv6B,MAAM,CAACu5B,WAAW;IAC7Bv5B,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAC3Cv6B,MAAM,CAACw5B,YAAY,GAAGtN,KAAK;IAC3B,IAAIlsB,MAAM,CAACs5B,UAAU,KAAK,CAAC,EAAE;MACzBt5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;IACzB;EACJ,CAAC;EAEDt5B,MAAM,CAAC6rD,aAAa,GAAG,UAASpM,QAAQ,EAAE;IACtC,IAAIjwC,CAAC,GAAGyrB,4CAAU,CAAC/wB,IAAI,CAAClK,MAAM,CAACm+C,SAAS,CAAC,CACxC4N,KAAK,CAAC,UAASv8C,CAAC,EAAE;MAAC,OAAOA,CAAC,CAACg8B,WAAW,KAAKiU,QAAQ;IAAC,CAAC,CAAC,CACvDuM,MAAM,CAAC,UAASx8C,CAAC,EAAE;MAAC,OAAOA,CAAC,CAACkO,UAAU;IAAC,CAAC,CAAC,CAC1CuuC,cAAc,CAAC,CAAC;IAEjB,OAAOz8C,CAAC;EACZ,CAAC;;EAED;EACAxP,MAAM,CAACs6B,MAAM,GAAG,YAAY;IACxB,OAAOt6B,MAAM,CAAC85B,yBAAyB,CAAC,IAAI,CAAC;EACjD,CAAC;EAED95B,MAAM,CAACksD,oBAAoB,GAAG,UAAUhiD,IAAI,EAAEiiD,EAAE,EAAE;IAC9CnsD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,GAAGp/C,IAAI;IACpClK,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,GAAG8C,EAAE;EACpC,CAAC;EAEDnsD,MAAM,CAAC8rD,SAAS,GAAG,UAAU5xC,GAAG,EAAE;IAC9B,IAAIkyC,GAAG,GAAG/rD,aAAa,CAACgsD,wBAAwB,CAACnyC,GAAG,CAACoyC,UAAU,CAAC;IAChEpyC,GAAG,CAACqyC,aAAa,GAAGH,GAAG,CAACI,IAAI;IAC5BtyC,GAAG,CAACuyC,aAAa,GAAGpsD,aAAa,CAACqsD,UAAU,CAACN,GAAG,CAAC3S,IAAI,CAAC;IACtD,IAAGv/B,GAAG,CAACyyC,QAAQ,EAAE;MACbP,GAAG,GAAG/rD,aAAa,CAACgsD,wBAAwB,CAACnyC,GAAG,CAACyyC,QAAQ,CAAC;MAC1DzyC,GAAG,CAAC0yC,iBAAiB,GAAGR,GAAG,CAACI,IAAI;IACpC;EACJ,CAAC;EAEDxsD,MAAM,CAAC6sD,kBAAkB,GAAG,UAAS3yC,GAAG,EAAE;IACtC;IACAla,MAAM,CAAC8sD,UAAU,GAAG,gBAAgB;IACpC9sD,MAAM,CAAC+sD,UAAU,GAAG7yC,GAAG;IAEvB7Z,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC1Df,cAAc,CAACe,SAAS,CAAC,8DAA8D,CAAC,EACxFf,cAAc,CAACe,SAAS,CAAC,aAAa,CAAC,EACvCf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,KAAK;EAChB,CAAC;EAEDxB,MAAM,CAACgtD,oBAAoB,GAAG,UAAS9yC,GAAG,EAAE;IACxC;IACAla,MAAM,CAAC8sD,UAAU,GAAG,kBAAkB;IACtC9sD,MAAM,CAAC+sD,UAAU,GAAG7yC,GAAG;IAEvB7Z,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC1Df,cAAc,CAACe,SAAS,CAAC,8DAA8D,CAAC,EACxFf,cAAc,CAACe,SAAS,CAAC,eAAe,CAAC,EACzCf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;IAEvC,OAAO,KAAK;EAChB,CAAC;;EAED;EACAxB,MAAM,CAACitD,OAAO,GAAG,UAAS/yC,GAAG,EAAC;IAC1Bja,UAAU,CAAC+K,UAAU,CAAC,qBAAqB,EAC3C;MACI+2B,IAAI,EAAE;QACF3+B,EAAE,EAAE8W,GAAG,CAACgzC;MACZ,CAAC;MACDC,MAAM,EAAE;IACZ,CAAC,CAAC;EACN,CAAC;EAEDntD,MAAM,CAACotD,KAAK,GAAG,YAAU;IACrBtpD,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,OAAO,IAAI,CAACilD,cAAc,CAACqE,eAAe,CAACrtD,MAAM,CAAC8qD,aAAa,CAAC,CAC3D9mD,IAAI,CAAC,UAAUC,IAAI,EAAE;MAClBH,CAAC,CAACO,SAAS,CAAC,CAAC;;MAEb;MACA,OAAOhE,aAAa,CAACitD,cAAc,CAACrpD,IAAI,EAAE,oBAAoB,CAAC;IACnE,CAAC,CAAC,SACI,CAAC,UAAUE,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAACutD,oBAAoB,GAAG,UAAS75B,MAAM,EAAE85B,UAAU,EAAE;IACvD1pD,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,OAAO,IAAI,CAACilD,cAAc,CAACyE,wBAAwB,CAAC/5B,MAAM,EAAE85B,UAAU,EAAE,WAAW,CAAC,CACnFxpD,IAAI,CAAC,YAAU;MACZF,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAIuW,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,8BAA8B,CAAC;MAClEvB,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;QACnC6P,OAAO,EAAED;MACb,CAAC,CAAC;MACFhD,YAAY,CAACmD,QAAQ,CAAC,CAAC;MACvB,OAAO/a,MAAM,CAACs6B,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,SACI,CAAC,UAAUn2B,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAEDnE,MAAM,CAAC0tD,kBAAkB,GAAG,UAASh6B,MAAM,EAAE85B,UAAU,EAAE;IACrD1pD,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,OAAO,IAAI,CAACilD,cAAc,CAACyE,wBAAwB,CAAC/5B,MAAM,EAAE85B,UAAU,EAAE,MAAM,CAAC,CAC9ExpD,IAAI,CAAC,YAAU;MACZF,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAIuW,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,8BAA8B,CAAC;MAClEvB,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;QACnC6P,OAAO,EAAED;MACb,CAAC,CAAC;MACFhD,YAAY,CAACmD,QAAQ,CAAC,CAAC;MACvB,OAAO/a,MAAM,CAACs6B,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,SACI,CAAC,UAAUn2B,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAEDnE,MAAM,CAACkpD,aAAa,GAAG,YAAW;IAC9B;IACA,IAAIC,EAAE,GAAG9pD,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,iBAAiB,CAAC;IACvD7oC,MAAM,CAACm4B,YAAY,CAAC4xB,UAAU,CAAC,iBAAiB,CAAC;IAEjD,IAAGD,EAAE,EAAE;MACH,IAAIuB,GAAG,GAAGhzB,IAAI,CAAC2T,KAAK,CAAC8d,EAAE,CAAC;MACxB,IAAGuB,GAAG,EAAC;QAEH,IAAGA,GAAG,CAACpB,QAAQ,EACXoB,GAAG,CAACpB,QAAQ,GAAG,IAAI7tB,IAAI,CAACivB,GAAG,CAACpB,QAAQ,CAAC,CAAC,KAEtCoB,GAAG,CAACpB,QAAQ,GAAG,IAAI7tB,IAAI,CAAC,CAAC;;QAE7B;QACAp8B,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;QAEpDz3B,MAAM,CAAC8qD,aAAa,GAAG;UACnBxB,QAAQ,EAAEjpD,aAAa,CAAC0qD,gBAAgB,CAACL,GAAG,CAACpB,QAAQ,CAAC;UACtDD,MAAM,EAAEhpD,aAAa,CAAC0qD,gBAAgB,CAACL,GAAG,CAACpB,QAAQ,CAAC;UACpD7J,QAAQ,EAAE,GAAG;UACb1H,MAAM,EAAE;QACZ,CAAC;MACL;IACJ;EACJ,CAAC;EAED/3C,MAAM,CAACirD,WAAW,GAAG,YAAW;IAC5B,IAAI7jD,KAAK,GAAGpH,MAAM;IAClB,IAAI2tD,KAAK,GAAG7tD,OAAO,CAACw3C,OAAO,CAACh3B,QAAQ,CAACstC,aAAa,CAAC,YAAY,CAAC,CAAC;IAC7DD,KAAK,CAAC7T,IAAI,CAAC,QAAQ,EAAE,YAAW;MAC5B,IAAG6T,KAAK,CAACE,SAAS,CAAC,CAAC,GAAGF,KAAK,CAACvrD,WAAW,CAAC,CAAC,IAAIurD,KAAK,CAAC,CAAC,CAAC,CAACG,YAAY,EAAE;QACjE9oD,OAAO,CAACC,GAAG,CAAC,aAAa,CAAC;QAC1BmC,KAAK,CAAC0yB,yBAAyB,CAAC,CAAC;MACrC;IACJ,CAAC,CAAC;EACV,CAAC;EAED95B,MAAM,CAAC8sD,UAAU,GAAG,EAAE;EACtB9sD,MAAM,CAAC+sD,UAAU,GAAG,IAAI;EACxB/sD,MAAM,CAAC26B,aAAa,GAAG,YAAY;IAC/B,IAAIx5B,IAAI,GAAGnB,MAAM,CAAC8sD,UAAU;IAC5B,IAAI5yC,GAAG,GAAIla,MAAM,CAAC+sD,UAAU;IAE5B/sD,MAAM,CAAC8sD,UAAU,GAAG,EAAE;IACtB9sD,MAAM,CAAC+sD,UAAU,GAAG,IAAI;IACxB,IAAI5rD,IAAI,KAAK,kBAAkB,EAAE;MAC7BnB,MAAM,CAACutD,oBAAoB,CAACrzC,GAAG,CAACkc,MAAM,EAAElc,GAAG,CAACwD,UAAU,CAAC;IAC3D,CAAC,MAAM,IAAGvc,IAAI,KAAK,gBAAgB,EAAE;MACjCnB,MAAM,CAAC0tD,kBAAkB,CAACxzC,GAAG,CAACkc,MAAM,EAAElc,GAAG,CAACwD,UAAU,CAAC;IACzD;EAEJ,CAAC;EAED1d,MAAM,CAAC+tD,YAAY,GAAG,YAAW;IAC7B;IACA,IAAIC,EAAE,GAAG,IAAIvyB,IAAI,CAAC,CAAC;IACnB,IAAIsuB,KAAK,GAAG,IAAItuB,IAAI,CAACuyB,EAAE,CAACC,WAAW,CAAC,CAAC,EAAED,EAAE,CAACE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjE,IAAIlE,GAAG,GAAG,IAAIvuB,IAAI,CAACuyB,EAAE,CAACC,WAAW,CAAC,CAAC,EAAED,EAAE,CAACE,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACtE,IAAInoD,MAAM,GAAG;MACTujD,QAAQ,EAAES,KAAK;MACfV,MAAM,EAAEW;IACZ,CAAC;IACD3qD,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,qBAAqB,EAAEC,IAAI,CAACC,SAAS,CAAC5xB,MAAM,CAAC,CAAC;IAE1E9F,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,CAAC;;IAE9C;IACA;EACJ,CAAC;AAEL,CAAC,CAET,CAAC,C;;;;;;;;;;;;;;ACtX2E;AAC9C;AAE9BlL,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,0BAA0B,EAC3D,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EACrE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,SAAS,EACxF,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,EAAE,OAAO,EACrF,UAAUC,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAEC,YAAY,EAAEE,aAAa,EACpEC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,cAAc,EAAEqyB,oBAAoB,EAAE9I,OAAO,EAAE+I,eAAe,EAC7FlJ,SAAS,EAAEjS,YAAY,EAAEkS,OAAO,EAAEuG,eAAe,EAAE89B,YAAY,EAAE;EAEjEnuD,MAAM,CAACsY,UAAU,GAAGjY,aAAa,CAAC4yB,wBAAwB,CAAC,CAAC;EAC5DjzB,MAAM,CAACkrB,eAAe,GAAGpB,OAAO,CAACqB,cAAc,CAACC,YAAY;EAE5DprB,MAAM,CAACouD,SAAS,GAAG,IAAI;EACvBpuD,MAAM,CAACmB,IAAI,GAAG,KAAK,CAAC,CAAC;EACrBnB,MAAM,CAACquD,OAAO,GAAG,EAAE;EACnBruD,MAAM,CAAC+hC,IAAI,GAAG,IAAI;EAClB/hC,MAAM,CAACY,QAAQ,GAAG,IAAI;EACtBZ,MAAM,CAACgpD,cAAc,GAAGV,mFAAc,CAACW,oBAAoB,CAAC,CAAC,CAAC,CAAC;EAC/DjpD,MAAM,CAACsuD,gBAAgB,GAAGpuD,aAAa,CAACslC,oBAAoB;EAC5DxlC,MAAM,CAACqY,gBAAgB,GAAG,IAAI;;EAE9B;EACArY,MAAM,CAACqO,IAAI,GAAG;IACVkgD,YAAY,EAAE,IAAI;IAClBlV,UAAU,EAAG,IAAI;IACjB7nC,WAAW,EAAE,IAAI;IACjBg9C,SAAS,EAAE,IAAI;IACf98C,KAAK,EAAE,IAAI;IACXC,WAAW,EAAE,IAAI;IACjBjH,KAAK,EAAE,IAAI;IACX+jD,SAAS,EAAE,IAAI;IACfC,YAAY,EAAE,IAAI;IAClBC,YAAY,EAAE,IAAI;IAClBx8C,IAAI,EAAE,IAAI;IACVC,KAAK,EAAE,IAAI;IACXE,OAAO,EAAE,IAAI;IACbs8C,QAAQ,EAAE,IAAI;IACdC,mBAAmB,EAAE,CAAC;IACtBC,kBAAkB,EAAE,IAAI;IACxBC,aAAa,EAAE;EACnB,CAAC;EAED/uD,MAAM,CAACgvD,aAAa,GAAG,YAAU;IAC7BhvD,MAAM,CAACqO,IAAI,CAACkgD,YAAY,GAAG,IAAI;IAC/BvuD,MAAM,CAACqO,IAAI,CAACgrC,UAAU,GAAI,IAAI;IAC9Br5C,MAAM,CAACqO,IAAI,CAAC0gD,aAAa,GAAG,EAAE;IAC9B/uD,MAAM,CAACivD,YAAY,CAAC,CAAC;IACrBjvD,MAAM,CAACkvD,YAAY,CAAC,CAAC;EACzB,CAAC;EAEDlvD,MAAM,CAACkvD,YAAY,GAAG,YAAW;IAC7BlvD,MAAM,CAACqO,IAAI,CAACogD,SAAS,GAAG,IAAI;IAC5BzuD,MAAM,CAACqO,IAAI,CAACqgD,YAAY,GAAG,IAAI;IAC/B1uD,MAAM,CAACqO,IAAI,CAACsgD,YAAY,GAAG,IAAI;IAC/B3uD,MAAM,CAACqO,IAAI,CAAC8D,IAAI,GAAG,IAAI;IACvBnS,MAAM,CAACqO,IAAI,CAAC+D,KAAK,GAAG,IAAI;IACxBpS,MAAM,CAACqO,IAAI,CAACiE,OAAO,GAAG,IAAI;IAC1BtS,MAAM,CAACqO,IAAI,CAACugD,QAAQ,GAAG,IAAI;EAC/B,CAAC;EAED5uD,MAAM,CAACivD,YAAY,GAAG,YAAW;IAC7BjvD,MAAM,CAACqO,IAAI,CAACmD,WAAW,GAAG,IAAI;IAC9BxR,MAAM,CAACqO,IAAI,CAACmgD,SAAS,GAAG,IAAI;IAC5BxuD,MAAM,CAACqO,IAAI,CAACqD,KAAK,GAAG,IAAI;IACxB1R,MAAM,CAACqO,IAAI,CAACsD,WAAW,GAAG,IAAI;IAC9B3R,MAAM,CAACqO,IAAI,CAAC3D,KAAK,GAAG,IAAI;EAC5B,CAAC;EAED1K,MAAM,CAACmvD,aAAa,GAAG,EAAE;EACzBnvD,MAAM,CAACovD,QAAQ,GAAG,EAAE;EACpBpvD,MAAM,CAACi7C,SAAS,GAAG,EAAE;EAErBj7C,MAAM,CAACqvD,YAAY,GAAG,UAASC,KAAK,EAAE;IAClCtvD,MAAM,CAACmvD,aAAa,GAAGnvD,MAAM,CAACgpD,cAAc,CAACqG,YAAY,CAACC,KAAK,CAAC;EACpE,CAAC;EAEDtvD,MAAM,CAACuvD,cAAc,GAAG,KAAK;EAC7BvvD,MAAM,CAACwvD,UAAU,GAAG,UAAShlD,EAAE,EAAE0P,GAAG,EAAE;IAClC,IAAGA,GAAG,CAACu1C,UAAU,KAAK,WAAW,IAAIv1C,GAAG,CAACu1C,UAAU,KAAK,MAAM,EAAE;IAEhE,IAAI7vD,EAAE,GAAGkE,CAAC,CAAC,GAAG,GAAC0G,EAAE,CAAC;IAClB1G,CAAC,CAAC,aAAa,CAAC,CAACsZ,GAAG,CAAC;MACjBwO,GAAG,EAAEhsB,EAAE,CAAC,CAAC,CAAC,CAAC8vD,SAAS,GAAG,GAAG;MAC1BryC,IAAI,EAAEzd,EAAE,CAAC,CAAC,CAAC,CAAC+vD;IAChB,CAAC,CAAC;IAEF,IAAI;MACA3vD,MAAM,CAACqO,IAAI,CAACwgD,mBAAmB,GAAG30C,GAAG,CAAC01C,YAAY;MAClD5vD,MAAM,CAACqO,IAAI,CAACygD,kBAAkB,GAAG50C,GAAG;MACpCla,MAAM,CAACqvD,YAAY,CAACn1C,GAAG,CAAC21C,YAAY,CAAC;MACrC,IAAG7vD,MAAM,CAACmvD,aAAa,CAAC/oD,MAAM,GAAG,CAAC,EAAE;QAChCpG,MAAM,CAACuvD,cAAc,GAAG,IAAI;MAChC;IACJ,CAAC,CAAC,OAAMO,EAAE,EAAC;MACP3vD,YAAY,CAACiE,SAAS,CAAC0rD,EAAE,CAAC;IAC9B;EACJ,CAAC;EAED9vD,MAAM,CAAC+vD,OAAO,GAAG,UAASx6C,KAAK,EAAE;IAC7B,IAAGA,KAAK,IAAEvV,MAAM,CAACqO,IAAI,CAACygD,kBAAkB,CAACc,YAAY,EAAE;MACnD5vD,MAAM,CAACqO,IAAI,CAACygD,kBAAkB,CAACc,YAAY,GAAGr6C,KAAK;MACnDvV,MAAM,CAACqO,IAAI,CAACygD,kBAAkB,CAACkB,mBAAmB,GAAG3vD,aAAa,CAACqsD,UAAU,CAACn3C,KAAK,CAAC;MACpFvV,MAAM,CAACqO,IAAI,CAACygD,kBAAkB,CAAC14B,MAAM,GAAG,IAAI;MAC5Cp2B,MAAM,CAACqO,IAAI,CAACygD,kBAAkB,CAACmB,cAAc,GAAG,IAAI;MACpDjwD,MAAM,CAACqO,IAAI,CAACygD,kBAAkB,GAAG,IAAI;IACzC;IAEA9uD,MAAM,CAACuvD,cAAc,GAAG,KAAK;EACjC,CAAC;EAEDvvD,MAAM,CAACqC,GAAG,CAAC,oBAAoB,EAAE,YAAY;IACzCrC,MAAM,CAACqO,IAAI,CAACygD,kBAAkB,GAAG,IAAI;IACrC9uD,MAAM,CAACuvD,cAAc,GAAG,KAAK;EACjC,CAAC,CAAC;;EAEF;EACAvvD,MAAM,CAACqC,GAAG,CAAC,qBAAqB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACrDlE,MAAM,CAAC+hC,IAAI,GAAG79B,IAAI,CAAC69B,IAAI;IACvB/hC,MAAM,CAACquD,OAAO,GAAG5tD,cAAc,CAACe,SAAS,CAAC,mBAAmB,CAAC;IAC9DxB,MAAM,CAACgvD,aAAa,CAAC,CAAC;IAEtB3uD,aAAa,CAAC8E,UAAU,CAAC7E,QAAQ,EAAE,YAAY;MAC3CE,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAACwpD,QAAQ,CAAC,CAAC;MACrB,CAAC,EAAE,CAAC,CAAC;IACT,CAAC,CAAC;IAEFxpD,MAAM,CAACqvD,YAAY,CAAC,CAAC;EACzB,CAAC,CAAC;EAEFrvD,MAAM,CAACqC,GAAG,CAAC,UAAU,EAAE,YAAY;IAC/B,OAAOrC,MAAM,CAACgpD,cAAc;EAChC,CAAC,CAAC;EAEFhpD,MAAM,CAACiM,YAAY,GAAG,YAAY;IAC9B5L,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;IACnC,IAAGN,MAAM,CAACkwD,QAAQ,EAAE;MAChBlwD,MAAM,CAACkwD,QAAQ,GAAG,KAAK;MAEvBjwD,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAC7C;QACI+2B,IAAI,EAAE/hC,MAAM,CAAC+hC,IAAI,CAAC3+B;MACtB,CAAC,CAAC;IACN;EACJ,CAAC;EAEDpD,MAAM,CAACwpD,QAAQ,GAAG,YAAU;IACxB1lD,CAAC,CAACC,OAAO,CAAC,CAAC;;IAEX;IACA,OAAO/D,MAAM,CAACgpD,cAAc,CAACmH,uBAAuB,CAACnwD,MAAM,CAAC+hC,IAAI,CAAC,CAChE/9B,IAAI,CAAC,UAASqF,GAAG,EAAE;MAEhBrJ,MAAM,CAACqO,IAAI,CAAC0gD,aAAa,GAAG1lD,GAAG,CAAC+mD,aAAa;;MAE7C;MACApwD,MAAM,CAACmB,IAAI,GAAGkI,GAAG,CAACgnD,KAAK,GAAG,KAAK,GAAG,MAAM;MACxC,IAAIC,mBAAmB,GAAG,mBAAmB;MAE7C,IAAG,CAACjnD,GAAG,CAACgnD,KAAK,EAAE;QACXrwD,MAAM,CAACqO,IAAI,CAACgrC,UAAU,GAAGhwC,GAAG,CAACuB,UAAU;QACvC5K,MAAM,CAACqO,IAAI,CAACkgD,YAAY,GAAGllD,GAAG,CAAC8yB,YAAY;QAC3Cn8B,MAAM,CAACuwD,iBAAiB,CAAClnD,GAAG,CAACmnD,cAAc,CAAC;QAC5CxwD,MAAM,CAACywD,iBAAiB,CAACpnD,GAAG,CAACqnD,kBAAkB,CAAC;QAEhDJ,mBAAmB,GAAG,wBAAwB,GAAGjnD,GAAG,CAAC8yB,YAAY;MACrE,CAAC,MAAM,IAAGn8B,MAAM,CAAC+hC,IAAI,CAACnhC,QAAQ,EAAC;QAC3BZ,MAAM,CAAC2wD,mBAAmB,CAAC3wD,MAAM,CAAC+hC,IAAI,CAACnhC,QAAQ,CAAC;MACpD;MAEAZ,MAAM,CAACquD,OAAO,GAAGhlD,GAAG,CAACgnD,KAAK,GACtB5vD,cAAc,CAACe,SAAS,CAAC,mBAAmB,CAAC,GAC7Cf,cAAc,CAACe,SAAS,CAAC8uD,mBAAmB,CAAC;MAEjDxsD,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAAC4wD,cAAc,CAAC,CAAC;IAC3B,CAAC,CAAC,CACD5sD,IAAI,CAAC,YAAU;MACZ,IAAI6sD,gBAAgB,GAAGxwD,aAAa,CAACkY,6BAA6B,CAAC,CAAC;MACpE,KAAI,IAAIrS,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAClG,MAAM,CAACqO,IAAI,CAAC0gD,aAAa,CAAC3oD,MAAM,EAAEF,GAAG,EAAE,EAAE;QAC1DlG,MAAM,CAACqO,IAAI,CAAC0gD,aAAa,CAAC7oD,GAAG,CAAC,CAAC4qD,eAAe,GAAG9wD,MAAM,CAACqO,IAAI,CAAC0gD,aAAa,CAAC7oD,GAAG,CAAC,CAAC2pD,YAAY;QAC5FxvD,aAAa,CAAC0wD,aAAa,CAACF,gBAAgB,EAAE,gBAAgB,GAAC3qD,GAAG,EAAE,IAAI,EAAE,CAAC,EAC/DlG,MAAM,CAACgxD,SAAS,EAAEhxD,MAAM,CAACqO,IAAI,CAAC0gD,aAAa,CAAC7oD,GAAG,CAAC,CAAC;MACjE;MAEApC,CAAC,CAAC,UAAU,CAAC,CAACsB,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC,SACI,CAAC,UAAUjB,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAEDnE,MAAM,CAACgxD,SAAS,GAAG,UAASrvC,GAAG,EAAE;IAC7B,IAAGA,GAAG,CAACmvC,eAAe,IAAInvC,GAAG,CAACkuC,YAAY,EAAE;MACxCrvD,QAAQ,CAAC,YAAU;QACfmhB,GAAG,CAACquC,mBAAmB,GAAG,IAAI;QAC9BruC,GAAG,CAACiuC,YAAY,GAAG,IAAI;QACvBjuC,GAAG,CAACsuC,cAAc,GAAG,IAAI;QACzBtuC,GAAG,CAACyU,MAAM,GAAG,IAAI;QACjBzU,GAAG,CAACmvC,eAAe,GAAGnvC,GAAG,CAACkuC,YAAY;MAC1C,CAAC,CAAC;IACN;EACJ,CAAC;EAED7vD,MAAM,CAAC4wD,cAAc,GAAG,YAAW;IAC/BpwD,QAAQ,CAAC,YAAW;MAChB,IAAIR,MAAM,CAACqY,gBAAgB,EAAE;QACzBrY,MAAM,CAACqY,gBAAgB,GAAG,KAAK;QAE/BnT,WAAW,CAAC,CAAC;MACjB,CAAC,MAAM;QACHpB,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MACzC;IACJ,CAAC,EAAE,CAAC,CAAC;EACT,CAAC;EAEDxE,MAAM,CAAC4L,WAAW,GAAG,YAAY;IAC7B,IAAI5L,MAAM,CAACmB,IAAI,KAAK,KAAK,EAAE;MACvB,IAAIP,QAAQ,GAAGZ,MAAM,CAACY,QAAQ;MAE9BX,UAAU,CAAC+K,UAAU,CAAC,kBAAkB,EAAE;QACtC7J,IAAI,EAAE;MACV,CAAC,CAAC;IACN;EACJ,CAAC;EAEDnB,MAAM,CAACuwD,iBAAiB,GAAG,UAAS97C,OAAO,EAAE;IACzC,IAAGA,OAAO,EAAE;MACRzU,MAAM,CAACqO,IAAI,CAACmD,WAAW,GAAGiD,OAAO,CAAC/R,IAAI;MACtC1C,MAAM,CAACqO,IAAI,CAACmgD,SAAS,GAAG,CAAC/5C,OAAO,CAACrR,EAAE,GAAGqR,OAAO,CAAC/G,SAAS,GAAG+G,OAAO,CAACrR,EAAE;MACpEpD,MAAM,CAACqO,IAAI,CAACqD,KAAK,GAAG+C,OAAO,CAAC3R,KAAK;MACjC9C,MAAM,CAACqO,IAAI,CAACsD,WAAW,GAAG8C,OAAO,CAAC1R,WAAW;MAC7C/C,MAAM,CAACqO,IAAI,CAAC3D,KAAK,GAAG+J,OAAO,CAAC5R,KAAK;IACrC;EACJ,CAAC;EAED7C,MAAM,CAACywD,iBAAiB,GAAG,UAASliD,OAAO,EAAE;IACzC,IAAGA,OAAO,EAAE;MACRvO,MAAM,CAACqO,IAAI,CAACogD,SAAS,GAAG,CAAClgD,OAAO,CAACnL,EAAE,GAAGmL,OAAO,CAACnB,SAAS,GAAGmB,OAAO,CAACnL,EAAE;MACpEpD,MAAM,CAACqO,IAAI,CAACqgD,YAAY,GAAGngD,OAAO,CAACtL,KAAK;MACxCjD,MAAM,CAACqO,IAAI,CAACsgD,YAAY,GAAGpgD,OAAO,CAACvB,KAAK;MACxChN,MAAM,CAACqO,IAAI,CAAC8D,IAAI,GAAG,CAAC5D,OAAO,CAAC9B,IAAI,GAAG8B,OAAO,CAAClB,UAAU,GAAGkB,OAAO,CAAC9B,IAAI;MACpEzM,MAAM,CAACqO,IAAI,CAAC+D,KAAK,GAAG,CAAC7D,OAAO,CAAC5B,KAAK,GAAG4B,OAAO,CAAC3B,aAAa,GAAE2B,OAAO,CAAC5B,KAAK;MACzE3M,MAAM,CAACqO,IAAI,CAACiE,OAAO,GAAG/D,OAAO,CAACtB,OAAO;MACrCjN,MAAM,CAACqO,IAAI,CAACugD,QAAQ,GAAG,CAACrgD,OAAO,CAAC1B,QAAQ,GAAG0B,OAAO,CAACzB,WAAW,GAAGyB,OAAO,CAAC1B,QAAQ;IACrF;EACJ,CAAC;EAED7M,MAAM,CAACixD,WAAW,GAAG,UAASzmD,EAAE,EAAE;IAC9B,IAAGxK,MAAM,CAACY,QAAQ,IAAIZ,MAAM,CAACmB,IAAI,KAAK,KAAK,EAAE;MACzC,IAAIoN,OAAO,GAAG0sB,4CAAU,CAAC/wB,IAAI,CAAClK,MAAM,CAACY,QAAQ,CAACoC,SAAS,CAAC,CACvD+oD,KAAK,CAAC,UAAS/lD,CAAC,EAAE;QAAC,OAAOA,CAAC,CAAC5C,EAAE,KAAKoH,EAAE;MAAC,CAAC,CAAC,CACxCyhD,cAAc,CAAC,CAAC;MAEjBjsD,MAAM,CAACkvD,YAAY,CAAC,CAAC;MACrBlvD,MAAM,CAACywD,iBAAiB,CAACliD,OAAO,CAAC;IACrC;EACJ,CAAC;EAEDvO,MAAM,CAACkxD,WAAW,GAAG,UAAS1mD,EAAE,EAAE;IAC9B,IAAGxK,MAAM,CAACY,QAAQ,IAAIZ,MAAM,CAACmB,IAAI,KAAK,KAAK,EAAE;MACzC,IAAIsT,OAAO,GAAGwmB,4CAAU,CAAC/wB,IAAI,CAAClK,MAAM,CAACY,QAAQ,CAACgC,QAAQ,CAAC,CACtDmpD,KAAK,CAAC,UAAS/lD,CAAC,EAAE;QAAC,OAAOA,CAAC,CAAC5C,EAAE,KAAKoH,EAAE;MAAC,CAAC,CAAC,CACxCyhD,cAAc,CAAC,CAAC;MAEjBjsD,MAAM,CAACivD,YAAY,CAAC,CAAC;MACrBjvD,MAAM,CAACuwD,iBAAiB,CAAC97C,OAAO,CAAC;IACrC;EACJ,CAAC;EAEDzU,MAAM,CAAC0I,MAAM,CAAC,gBAAgB,EAAE,UAAS0iD,MAAM,EAAEC,MAAM,EAAC;IACpD,IAAGD,MAAM,IAAIA,MAAM,IAAIC,MAAM,EAAE;MAC3BrrD,MAAM,CAACkxD,WAAW,CAAC9F,MAAM,CAAC;IAC9B;EACJ,CAAC,CAAC;EAGFprD,MAAM,CAAC0I,MAAM,CAAC,gBAAgB,EAAE,UAAS0iD,MAAM,EAAEC,MAAM,EAAC;IACpD,IAAGD,MAAM,IAAIA,MAAM,IAAIC,MAAM,EAAE;MAC3BrrD,MAAM,CAACixD,WAAW,CAAC7F,MAAM,CAAC;IAC9B;EACJ,CAAC,CAAC;EAEFprD,MAAM,CAAC2wD,mBAAmB,GAAG,UAAS/vD,QAAQ,EAAE;IAC5CZ,MAAM,CAACY,QAAQ,GAAGA,QAAQ;IAC1BZ,MAAM,CAACqO,IAAI,CAACgrC,UAAU,GAAGr5C,MAAM,CAACY,QAAQ,CAACwC,EAAE;IAC3CpD,MAAM,CAACqO,IAAI,CAACkgD,YAAY,GAAGvuD,MAAM,CAACY,QAAQ,CAAC8B,IAAI;;IAE/C;IACA1C,MAAM,CAACkvD,YAAY,CAAC,CAAC;IAErB,IAAGlvD,MAAM,CAACY,QAAQ,IAAIZ,MAAM,CAACY,QAAQ,CAACoC,SAAS,EAAE;MAC7ChD,MAAM,CAACi7C,SAAS,GAAGhgB,4CAAU,CAAC/wB,IAAI,CAAClK,MAAM,CAACY,QAAQ,CAACoC,SAAS,CAAC,CACnDmuD,OAAO,CAAC,UAAUnrD,CAAC,EAAE;QAClB,IAAIorD,KAAK,GAAG,CAAC;QACb,QAAOprD,CAAC,CAAC9C,IAAI;UACV,KAAK,UAAU;YACXkuD,KAAK,IAAE,EAAE;YACT;UACJ,KAAK,SAAS;YACVA,KAAK,IAAE,EAAE;YACT;UACJ,KAAK,UAAU;YACXA,KAAK,IAAE,EAAE;YACT;QACR;QAEA,IAAG,CAACprD,CAAC,CAAC+G,cAAc,EAAEqkD,KAAK,EAAE;QAC7B,OAAOA,KAAK;MACf,CAAC,CAAC,CAACD,OAAO,CAAC,UAASnrD,CAAC,EAAC;QAAC,OAAOA,CAAC,CAAC9C,IAAI;MAAC,CAAC,CAAC,CAACmuD,OAAO,CAAC,CAAC;MAE1D,IAAIj2C,GAAG,GAAGpb,MAAM,CAACi7C,SAAS,CAACl1C,MAAM,CAAC,UAASC,CAAC,EAAC;QAAC,OAAOA,CAAC,CAAC9C,IAAI,KAAK,UAAU;MAAC,CAAC,CAAC;MAE7E,IAAGkY,GAAG,CAAChV,MAAM,GAAG,CAAC,EACbpG,MAAM,CAACi7C,SAAS,GAAG7/B,GAAG;MAC1B,IAAGpb,MAAM,CAACi7C,SAAS,CAAC70C,MAAM,GAAG,CAAC,EAC1BpG,MAAM,CAACixD,WAAW,CAACjxD,MAAM,CAACi7C,SAAS,CAAC,CAAC,CAAC,CAAC73C,EAAE,CAAC;IAClD;IAEA,IAAGpD,MAAM,CAACY,QAAQ,IAAIZ,MAAM,CAACY,QAAQ,CAACgC,QAAQ,EAAE;MAC5C5C,MAAM,CAACivD,YAAY,CAAC,CAAC;MACrBjvD,MAAM,CAACovD,QAAQ,GAAGn0B,4CAAU,CAAC/wB,IAAI,CAAClK,MAAM,CAACY,QAAQ,CAACgC,QAAQ,CAAC,CACtC0uD,iBAAiB,CAAC,UAAUtrD,CAAC,EAAE;QAAE,OAAOA,CAAC,CAAC80C,OAAO;MAAC,CAAC,CAAC,CACpDkR,MAAM,CAAC,UAAShmD,CAAC,EAAE;QAAC,OAAQ;UAAEtD,IAAI,EAAEsD,CAAC,CAACtD,IAAI;UAAEU,EAAE,EAAE4C,CAAC,CAAC5C;QAAE,CAAC;MAAC,CAAC,CAAC,CACxDiuD,OAAO,CAAC,CAAC;MAE9B,IAAGrxD,MAAM,CAACovD,QAAQ,CAAChpD,MAAM,GAAG,CAAC,EAAE;QAC3B,IAAIpG,MAAM,CAACY,QAAQ,CAAC2wD,eAAe,EAC/BvxD,MAAM,CAACkxD,WAAW,CAAClxD,MAAM,CAACY,QAAQ,CAAC2wD,eAAe,CAACnuD,EAAE,CAAC,CAAC,KAEvDpD,MAAM,CAACkxD,WAAW,CAAClxD,MAAM,CAACovD,QAAQ,CAAC,CAAC,CAAC,CAAChsD,EAAE,CAAC;MACjD;IACJ;IAEApD,MAAM,CAAC4wD,cAAc,CAAC,CAAC;EAC3B,CAAC;EAED5wD,MAAM,CAACqC,GAAG,CAAC,sBAAsB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACtD,IAAItD,QAAQ,GAAGsD,IAAI,CAACtD,QAAQ;IAC5BA,QAAQ,CAAC2wD,eAAe,GAAG,IAAI;IAE/B,IAAIvlD,kBAAkB,GAAGlI,CAAC,CAAC,qBAAqB,CAAC,CAACkF,GAAG,CAAC,CAAC;IAEvD,IAAI9E,IAAI,CAACtD,QAAQ,IAAIsD,IAAI,CAACtD,QAAQ,CAACgC,QAAQ,IAAIsB,IAAI,CAACtD,QAAQ,CAACgC,QAAQ,CAACwD,MAAM,GAAG,CAAC,EAAE;MAC9E4F,kBAAkB,GAAG,CAAC,CAACA,kBAAkB,GAAGA,kBAAkB,CAACuL,WAAW,CAAC,CAAC,CAACgE,IAAI,CAAC,CAAC,GAAG,EAAE;MACxF,IAAM7Q,KAAK,GAAG,CAAC,CAACxG,IAAI,CAACwG,KAAK,GAAGxG,IAAI,CAACwG,KAAK,GAAG,EAAE;MAE5C,IAAM8mD,YAAY,GAAGttD,IAAI,CAACtD,QAAQ,CAACgC,QAAQ,CAACyO,IAAI,CAAC,UAAAogD,IAAI;QAAA,OAAK,CAAC,CAACA,IAAI,CAAC5uD,KAAK,IAAI4uD,IAAI,CAAC5uD,KAAK,CAAC0U,WAAW,CAAC,CAAC,KAAK7M,KAAK,IACvG,CAAC,CAAC+mD,IAAI,CAAC5uD,KAAK,IAAI4uD,IAAI,CAAC5uD,KAAK,CAAC0U,WAAW,CAAC,CAAC,KAAKvL,kBAAmB,IAChE,CAAC,CAACylD,IAAI,CAAC3uD,KAAK,IAAI2uD,IAAI,CAAC3uD,KAAK,CAACyU,WAAW,CAAC,CAAC,KAAKvL,kBAAmB,IAChE,CAAC,CAACylD,IAAI,CAAC1uD,WAAW,IAAI0uD,IAAI,CAAC1uD,WAAW,CAACwU,WAAW,CAAC,CAAC,KAAKvL,kBAAmB;MAAA,EAAC;MAElF,IAAIwlD,YAAY,EACZ5wD,QAAQ,CAAC2wD,eAAe,GAAGC,YAAY,CAAC,KACvC;QACD,IAAME,cAAc,GAAGxtD,IAAI,CAACtD,QAAQ,CAACgC,QAAQ,CAACyO,IAAI,CAAC,UAAAogD,IAAI;UAAA,OAAK,CAAC,CAACA,IAAI,CAAC5uD,KAAK,IAAI4uD,IAAI,CAAC7jD,cAAc;QAAA,CAAC,CAAC;QACjG,IAAI8jD,cAAc,EACd9wD,QAAQ,CAAC2wD,eAAe,GAAGG,cAAc,CAAC,KAE1C9wD,QAAQ,CAAC2wD,eAAe,GAAGrtD,IAAI,CAACtD,QAAQ,CAACgC,QAAQ,CAAC,CAAC,CAAC;MAC5D;IACJ;IACA5C,MAAM,CAAC2wD,mBAAmB,CAAC/vD,QAAQ,CAAC;IACpC,OAAOP,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;EAC7C,CAAC,CAAC;EAEFl4C,MAAM,CAAC2xD,IAAI,GAAG,YAAW;IACtB;IACA,IAAIC,QAAQ,GAAG5xD,MAAM,CAACgpD,cAAc,CAAC6I,eAAe;;IAEpD;IACA,IAAG,CAACD,QAAQ,CAACE,UAAU,EAAEF,QAAQ,CAACE,UAAU,GAAG3D,YAAY,CAACjgC,OAAO,CAAC,CAAC;IACrE0jC,QAAQ,CAAChnD,UAAU,GAAG5K,MAAM,CAACqO,IAAI,CAACgrC,UAAU;IAC5CuY,QAAQ,CAACz1B,YAAY,GAAGn8B,MAAM,CAACqO,IAAI,CAACkgD,YAAY;;IAEhD;IACAqD,QAAQ,CAACpB,cAAc,CAAC9iD,SAAS,GAAG1N,MAAM,CAACqO,IAAI,CAACmgD,SAAS;IACzD,IAAG,CAACoD,QAAQ,CAACpB,cAAc,CAAC9iD,SAAS,EAChCkkD,QAAQ,CAACpB,cAAc,CAAC9iD,SAAS,GAAG,sCAAsC;IAC/EkkD,QAAQ,CAACpB,cAAc,CAAC9tD,IAAI,GAAG1C,MAAM,CAACqO,IAAI,CAACmD,WAAW;IACtDogD,QAAQ,CAACpB,cAAc,CAAC3tD,KAAK,GAAG7C,MAAM,CAACqO,IAAI,CAAC3D,KAAK;IACjDknD,QAAQ,CAACpB,cAAc,CAAC1tD,KAAK,GAAG9C,MAAM,CAACqO,IAAI,CAACqD,KAAK;IACjDkgD,QAAQ,CAACpB,cAAc,CAACztD,WAAW,GAAG/C,MAAM,CAACqO,IAAI,CAACsD,WAAW;;IAE7D;IACAigD,QAAQ,CAAClB,kBAAkB,CAACtjD,SAAS,GAAGpN,MAAM,CAACqO,IAAI,CAACogD,SAAS;IAC7D,IAAG,CAACmD,QAAQ,CAAClB,kBAAkB,CAACtjD,SAAS,EACpCwkD,QAAQ,CAAClB,kBAAkB,CAACtjD,SAAS,GAAG,sCAAsC;IACnFwkD,QAAQ,CAAClB,kBAAkB,CAACztD,KAAK,GAAGjD,MAAM,CAACqO,IAAI,CAACqgD,YAAY;IAC5DkD,QAAQ,CAAClB,kBAAkB,CAAC1jD,KAAK,GAAGhN,MAAM,CAACqO,IAAI,CAACsgD,YAAY;IAC5DiD,QAAQ,CAAClB,kBAAkB,CAACrjD,UAAU,GAAGrN,MAAM,CAACqO,IAAI,CAAC8D,IAAI;IACzDy/C,QAAQ,CAAClB,kBAAkB,CAAC9jD,aAAa,GAAG5M,MAAM,CAACqO,IAAI,CAAC+D,KAAK;IAC7Dw/C,QAAQ,CAAClB,kBAAkB,CAAC5jD,WAAW,GAAG9M,MAAM,CAACqO,IAAI,CAACugD,QAAQ;IAC9DgD,QAAQ,CAAClB,kBAAkB,CAACzjD,OAAO,GAAGjN,MAAM,CAACqO,IAAI,CAACiE,OAAO;IAEzDs/C,QAAQ,CAACxB,aAAa,GAAGpwD,MAAM,CAACqO,IAAI,CAAC0gD,aAAa;IAElD6C,QAAQ,CAACxB,aAAa,CAAC1jD,OAAO,CAAC,UAAS8C,CAAC,EAAE;MACtC,IAAGA,CAAC,CAACqgD,YAAY,IAAIrgD,CAAC,CAACogD,YAAY,EAC/BpgD,CAAC,CAACuiD,eAAe,GAAG1xD,aAAa,CAAC2xD,6BAA6B,CAACxiD,CAAC,CAACqgD,YAAY,EAClDxvD,aAAa,CAACqsD,UAAU,CAACl9C,CAAC,CAACogD,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,KAC3E;QACDpgD,CAAC,CAACuiD,eAAe,GAAG,IAAI;QACxBviD,CAAC,CAACqgD,YAAY,GAAG,IAAI;QACrBrgD,CAAC,CAACogD,YAAY,GAAG,IAAI;MACzB;IACL,CAAC,CAAC;IAEF,IAAGgC,QAAQ,CAACxB,aAAa,CAACrqD,MAAM,CAAC,UAASqc,CAAC,EAAC;MAAE,OAAOA,CAAC,CAAC2vC,eAAe,IAAI,IAAI;IAAE,CAAC,CAAC,CAAC3rD,MAAM,KAAK,CAAC,EAAE;MAE5F,IAAGpG,MAAM,CAACmB,IAAI,KAAK,KAAK,EAAE;QACtBhB,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,yFAAyF,CAAC,CAAC;MAC/I,CAAC,MAAM;QACHxB,MAAM,CAAC8sD,UAAU,GAAG,gBAAgB;QAEpCzsD,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC1Df,cAAc,CAACe,SAAS,CAAC,qEAAqE,CAAC,EAC/Ff,cAAc,CAACe,SAAS,CAAC,sBAAsB,CAAC,EAChDf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;MAC3C;IACL,CAAC,MAAM;MACFxB,MAAM,CAACiyD,YAAY,CAAC,CAAC;IAC1B;EACH,CAAC;EAEDjyD,MAAM,CAACkwD,QAAQ,GAAG,KAAK;EAEvBlwD,MAAM,CAACiyD,YAAY,GAAG,UAASC,IAAI,EAAE;IACjCpuD,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,IAAIouD,GAAG,GAAGnyD,MAAM,CAACgpD,cAAc,CAACoJ,YAAY,CAAC,CAAC;IAC9C,IAAGF,IAAI,EAAE;MACLC,GAAG,GAAGA,GAAG,CAACnuD,IAAI,CAAC,YAAU;QACrBhE,MAAM,CAACkwD,QAAQ,GAAG,IAAI;QACtBpsD,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAACiM,YAAY,CAAC,CAAC;QACrB,IAAI2O,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,kCAAkC,CAAC;QACtEvB,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;UACnC6P,OAAO,EAAED;QACb,CAAC,CAAC;QACFhD,YAAY,CAACmD,QAAQ,CAAC,CAAC;MAE3B,CAAC,CAAC,SACI,CAAC,UAAU5W,GAAG,EAAE;QAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;QACb,IAAI,CAAC4H,YAAY,CAAC,CAAC;QACnBjM,MAAM,CAACoE,SAAS,CAACD,GAAG,CAAC;MACzB,CAAC,CAAC;IACN,CAAC,MAAM;MACHguD,GAAG,GAAGA,GAAG,CAACnuD,IAAI,CAAC,UAASqF,GAAG,EAAE;QACzBrJ,MAAM,CAACkwD,QAAQ,GAAG,IAAI;QACtBpsD,CAAC,CAACO,SAAS,CAAC,CAAC;QACb,IAAIuW,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,kCAAkC,CAAC;QACtEvB,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;UACnC6P,OAAO,EAAED;QACb,CAAC,CAAC;QACFhD,YAAY,CAACmD,QAAQ,CAAC,CAAC;QACvB,OAAO/a,MAAM,CAACwpD,QAAQ,CAAC,CAAC;MAC5B,CAAC,CAAC,SACI,CAAC,UAAUrlD,GAAG,EAAE;QAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/B,CAAC,CAAC;IACF;IAEJ,OAAOguD,GAAG;EACd,CAAC;EAEDnyD,MAAM,CAAC8sD,UAAU,GAAG,EAAE;EAEtB9sD,MAAM,CAAC26B,aAAa,GAAG,YAAY;IAC/B,IAAIx5B,IAAI,GAAGnB,MAAM,CAAC8sD,UAAU;IAC5B9sD,MAAM,CAAC8sD,UAAU,GAAG,EAAE;IACtB,IAAI3rD,IAAI,KAAK,gBAAgB,EAAE;MAC3BnB,MAAM,CAACiyD,YAAY,CAAC,IAAI,CAAC;IAC7B;EAEJ,CAAC;EAEDjyD,MAAM,CAAC+tD,YAAY,GAAG,YAAW;IAC7B;IACA,IAAIC,EAAE,GAAGhuD,MAAM,CAACgpD,cAAc,CAACqJ,qBAAqB,CAAC,CAAC;IACtD,IAAItI,KAAK,GAAG,IAAItuB,IAAI,CAACuyB,EAAE,CAACC,WAAW,CAAC,CAAC,EAAED,EAAE,CAACE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjE,IAAIlE,GAAG,GAAG,IAAIvuB,IAAI,CAACuyB,EAAE,CAACC,WAAW,CAAC,CAAC,EAAED,EAAE,CAACE,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IACtE,IAAInoD,MAAM,GAAG;MACTujD,QAAQ,EAAES,KAAK;MACfV,MAAM,EAAEW;IACZ,CAAC;;IAED;IACA3qD,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,qBAAqB,EAAEC,IAAI,CAACC,SAAS,CAAC5xB,MAAM,CAAC,CAAC;IAC1E9F,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,CAAC;;IAE9D;EACY,CAAC;EAEDhL,MAAM,CAAC46B,cAAc,GAAG,UAAS1gB,GAAG,EAAE;IAClC,IAAGA,GAAG,CAACu1C,UAAU,KAAK,WAAW,IAAIv1C,GAAG,CAACu1C,UAAU,KAAK,WAAW,EACnE;MACI,OAAO;QAAC,kBAAkB,EAAE;MAAS,CAAC;IAC1C,CAAC,MACI,IAAGv1C,GAAG,CAACu1C,UAAU,KAAK,MAAM,IAAIv1C,GAAG,CAACu1C,UAAU,KAAK,MAAM,EAC9D;MACI,OAAO;QAAC,kBAAkB,EAAE;MAAS,CAAC;IAC1C,CAAC,MACI,IAAGv1C,GAAG,CAACu1C,UAAU,KAAK,aAAa,IAAIv1C,GAAG,CAACu1C,UAAU,KAAK,aAAa,EAC5E;MACI,OAAO;QAAC,kBAAkB,EAAE;MAAS,CAAC;IAC1C;EACJ,CAAC;EAEDzvD,MAAM,CAACsyD,SAAS,GAAG,UAASp4C,GAAG,EAAE;IAC7B,IAAI8C,GAAG,GAAGhd,MAAM,CAACqO,IAAI,CAAC0gD,aAAa,CAAChpD,MAAM,CAAC,UAASyJ,CAAC,EAAC;MAAC,OAAOA,CAAC,CAAC6M,SAAS,KAAKnC,GAAG,CAACmC,SAAS;IAAC,CAAC,CAAC;IAC9FW,GAAG,CAACtQ,OAAO,CAAC,UAAS8C,CAAC,EAAE;MACpBA,CAAC,CAACwgD,mBAAmB,GAAG91C,GAAG,CAAC81C,mBAAmB;MAC/CxgD,CAAC,CAACogD,YAAY,GAAG11C,GAAG,CAAC01C,YAAY;MACjCpgD,CAAC,CAACqgD,YAAY,GAAG31C,GAAG,CAAC21C,YAAY;MACjCrgD,CAAC,CAACshD,eAAe,GAAG52C,GAAG,CAAC42C,eAAe;MACvCthD,CAAC,CAACuiD,eAAe,GAAG73C,GAAG,CAAC63C,eAAe;MACvCviD,CAAC,CAACygD,cAAc,GAAG,IAAI;MACvBzgD,CAAC,CAAC4mB,MAAM,GAAG,IAAI;IACvB,CAAC,CAAC;EACF,CAAC;AACL,CAAC,CACJ,CAAC,C;;;;;;;;;;;;;;;;AC9gBN;AACA;AACA;AACoD;AACiB;AACF;AAEnE,SAAS9nB,IAAIA,CAACmkD,OAAO,EAAE;EACnBA,OAAO,CAACC,WAAW,CAACC,SAAS,GAAGF,OAAO;EACvC,OAAOA,OAAO,CAACC,WAAW;AAC9B;AAEA5yD,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CACxBozD,SAAS,CAAC,iBAAiB,EAAE,YAAY;EACtC,OAAO,UAAUC,KAAK,EAAEtvC,IAAI,EAAEuvC,KAAK,EAAE;IAEjC;IACA,IAAIA,KAAK,CAACC,QAAQ,EAAE;MAChBC,UAAU,CAAC,YAAY;QACnBzvC,IAAI,CAAC0vC,MAAM,CAAC,QAAQ,CAAC,CAACC,MAAM,CAAC,UAAU3xC,CAAC,EAAE;UACtCA,CAAC,CAACyU,cAAc,CAAC,CAAC;UAClBzS,IAAI,CAAClS,IAAI,CAAC,yBAAyB,CAAC,CAAC7M,OAAO,CAAC,OAAO,CAAC,CAACA,OAAO,CAAC,QAAQ,CAAC,CAACA,OAAO,CAAC,SAAS,CAAC;UAC1FquD,KAAK,CAACM,MAAM,CAACL,KAAK,CAACC,QAAQ,CAAC;QAChC,CAAC,CAAC;MACN,CAAC,EAAE,CAAC,CAAC;IACT;EACJ,CAAC;AACL,CAAC,CAAC,CACDH,SAAS,CAAC,UAAU,6CAAE,UAAUlK,QAAQ,EAAEzoD,UAAU,EAAE4X,YAAY,EAAE;EACjE,OAAO;IACHg7C,KAAK,EAAE,IAAI;IACXO,IAAI,EAAE,SAANA,IAAIA,CAAYP,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAE;MACnCA,KAAK,CAACO,QAAQ,CAAC,UAAU,EAAE,UAAUlmB,GAAG,EAAE;QACtCt1B,YAAY,CAACy7C,oBAAoB,CAACT,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAE3lB,GAAG,CAAC;MACjE,CAAC,CAAC;IACN;EACJ,CAAC;AACL,CAAC,EAAC,CACDylB,SAAS,CAAC,UAAU,8BAAE,UAAU13B,SAAS,EAAEj7B,UAAU,EAAE;EACpD,OAAO;IACH4yD,KAAK,EAAE;MACHruD,OAAO,EAAE;IACb,CAAC;IACD4uD,IAAI,EAAE,SAANA,IAAIA,CAAYP,KAAK,EAAEvb,OAAO,EAAEic,UAAU,EAAE;MACxCV,KAAK,CAACnqD,MAAM,CAAC,SAAS,EAAE,UAAU6M,KAAK,EAAE;QACrC,IAAIA,KAAK,KAAK,MAAM,EAAE;UAClB,IAAIquC,IAAI,GAAG1oB,SAAS,CAAC,YAAY;YAC7B,IAAI5a,QAAQ,CAACkzC,aAAa,KAAKlc,OAAO,CAAC,CAAC,CAAC,EAAE;cACvC,IAAIx3C,OAAO,CAAC2zD,SAAS,CAAC7P,IAAI,CAAC,EAAE;gBACzB1oB,SAAS,CAAC2oB,MAAM,CAACD,IAAI,CAAC;gBACtBA,IAAI,GAAGjzC,SAAS;cACpB;cAEAkiD,KAAK,CAACa,KAAK,CAAC,gBAAgB,CAAC;cAC7BzzD,UAAU,CAAC+K,UAAU,CAAC,iBAAiB,CAAC;YAC5C,CAAC,MACI;cACDssC,OAAO,CAAC,CAAC,CAAC,CAAClyC,KAAK,CAAC,CAAC;cAClBtB,CAAC,CAACwzC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC0U,MAAM,CAAC,CAAC;cAEtB6G,KAAK,CAACruD,OAAO,GAAG,KAAK;YACzB;UACJ,CAAC,EAAE,GAAG,CAAC;QACX;MACJ,CAAC,CAAC;IACN;EACJ,CAAC;AACL,CAAC,EAAC,CACDouD,SAAS,CAAC,aAAa,gBAAE,UAAU13B,SAAS,EAAE;EAC3C,OAAO;IACHy4B,OAAO,EAAE,SAAS;IAClBP,IAAI,EAAE,SAANA,IAAIA,CAAYP,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAEc,OAAO,EAAE;MAC5Cf,KAAK,CAACxwD,GAAG,CAAC,iBAAiB,EAAE,YAAY;QAErC,IAAIuhD,IAAI,GAAG1oB,SAAS,CAAC,YAAY;UAC7B,IAAI,CAAC,CAACoc,OAAO,CAACtuC,GAAG,CAAC,CAAC,EAAE;YACjB,IAAIlJ,OAAO,CAAC2zD,SAAS,CAAC7P,IAAI,CAAC,EAAE;cACzB1oB,SAAS,CAAC2oB,MAAM,CAACD,IAAI,CAAC;cACtBA,IAAI,GAAGjzC,SAAS;YACpB;YACAijD,OAAO,CAACC,aAAa,CAACvc,OAAO,CAACtuC,GAAG,CAAC,CAAC,CAAC;UACxC;QACJ,CAAC,EAAE,GAAG,CAAC;MAEX,CAAC,CAAC;IACN;EACJ,CAAC;AACL,CAAC,EAAC,CACD4pD,SAAS,CAAC,UAAU,EAAE,YAAY;EAC/B,OAAO,UAAUC,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAE;IACpCxb,OAAO,CAACwC,IAAI,CAAC,kBAAkB,EAAE,UAAUx3C,KAAK,EAAE;MAC9C,IAAIA,KAAK,CAAC4I,KAAK,KAAK,EAAE,EAAE;QACpB2nD,KAAK,CAACM,MAAM,CAAC,YAAY;UACrBN,KAAK,CAACiB,KAAK,CAAChB,KAAK,CAACiB,QAAQ,CAAC;QAC/B,CAAC,CAAC;QAEFzxD,KAAK,CAAC0zB,cAAc,CAAC,CAAC;MAC1B;IACJ,CAAC,CAAC;EACN,CAAC;AACL,CAAC,CAAC,CACD48B,SAAS,CAAC,gBAAgB,EAAE,YAAY;EACrC,OAAO,UAAUC,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAE;IACpChvD,CAAC,CAACwzC,OAAO,CAAC,CAAC0c,EAAE,CAAC,mBAAmB,EAAE,UAAUh7C,GAAG,EAAE;MAC9C,IAAIpZ,EAAE,GAAGkE,CAAC,CAAC,IAAI,CAAC,CAAC2nB,OAAO,CAAC,aAAa,CAAC;MACvC,IAAIwoC,SAAS,GAAGnwD,CAAC,CAAC,WAAW,CAAC;MAE9B,IAAIowD,eAAe,GAAGD,SAAS,CAAC7xD,WAAW,CAAC,CAAC;MAC7C,IAAI+xD,QAAQ,GAAGv0D,EAAE,CAACw0D,WAAW,CAAC,CAAC;MAE/B,IAAIC,SAAS,GAAGJ,SAAS,CAACpG,SAAS,CAAC,CAAC;MACrC,IAAIjuD,EAAE,CAAC00D,QAAQ,CAAC,CAAC,EAAE;QACf,IAAIC,KAAK,GAAG30D,EAAE,CAAC00D,QAAQ,CAAC,CAAC,CAAC1oC,GAAG;QAC7B,IAAI4oC,UAAU,GAAGD,KAAK,GAAGJ,QAAQ;QACjC,IAAMI,KAAK,GAAGF,SAAS,GAAGF,QAAQ,GAAID,eAAe,IAC/CK,KAAK,GAAG,CAAC,GAAIF,SAAU,EAAE;UAC3B,IAAIF,QAAQ,IAAID,eAAe,EAAE;YAC7B;YACAD,SAAS,CAACpG,SAAS,CAAC0G,KAAK,GAAG,CAAC,CAAC;UAClC,CAAC,MACI;YACD,IAAKA,KAAK,GAAG,CAAC,GAAIF,SAAS,EAAE;cACzBJ,SAAS,CAACpG,SAAS,CAAC0G,KAAK,GAAG,CAAC,CAAC;YAClC,CAAC,MACI;cACD;cACAN,SAAS,CAACpG,SAAS,CAAC0G,KAAK,GAAG,CAAC,IAAIL,eAAe,GAAGC,QAAQ,CAAC,CAAC;YACjE;UACJ;QACJ;MACJ;IACJ,CAAC,CAAC;EACN,CAAC;AACL,CAAC,CAAC,CACDvB,SAAS,CAAC,kBAAkB,EAAE,YAAY;EACvC,OAAO;IACH6B,QAAQ,EAAE,GAAG;IACbrB,IAAI,EAAE,SAANA,IAAIA,CAAYP,KAAK,EAAEvb,OAAO,EAAE;MAC5B,IAAIod,cAAc;MAClBpd,OAAO,CAAC0c,EAAE,CAAC,OAAO,EAAE,YAAY;QAC5B,IAAIU,cAAc,IAAI,IAAI,EAAE;UACxB,IAAI,CAAC1I,MAAM,CAAC,CAAC;UACb0I,cAAc,GAAG,IAAI;QACzB;MACJ,CAAC,CAAC;MACFpd,OAAO,CAAC0c,EAAE,CAAC,MAAM,EAAE,YAAY;QAC3BU,cAAc,GAAG,IAAI;MACzB,CAAC,CAAC;IACN;EACJ,CAAC;AACL,CAAC,CAAC,CACD9B,SAAS,CAAC,WAAW,EAAE,YAAY;EAChC,OAAO,UAAUC,KAAK,EAAEtvC,IAAI,EAAEuvC,KAAK,EAAE;IACjC,IAAIlzD,EAAE,GAAGkE,CAAC,CAACgvD,KAAK,CAAC6B,SAAS,CAAC;IAC3B7wD,CAAC,CAACyf,IAAI,CAAC,CAACywC,EAAE,CAAC,mBAAmB,EAAE,UAAUh7C,GAAG,EAAE;MAC3CpZ,EAAE,CAACwF,KAAK,CAAC,CAAC;MACVxF,EAAE,CAACosD,MAAM,CAAC,CAAC;IACf,CAAC,CAAC;EACN,CAAC;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA,CACC4G,SAAS,CAAC,UAAU,EAAE,CAAC,eAAe,EAAE,UAAU1yD,aAAa,EAAE;EAC9D,OAAO,UAAU2yD,KAAK,EAAEtvC,IAAI,EAAEuvC,KAAK,EAAE;IACjC,IAAI5yD,aAAa,CAAC2L,QAAQ,EAAE;MACxB0X,IAAI,CAACu2B,IAAI,CAAC,YAAY,EAAE,UAAUv4B,CAAC,EAAE;QACjCA,CAAC,CAACyU,cAAc,CAAC,CAAC;QAClBlyB,CAAC,CAACyd,CAAC,CAACpX,MAAM,CAAC,CAACqP,KAAK,CAAC,CAAC;MACvB,CAAC,CAAC;IACN;EACJ,CAAC;AACL,CAAC,CAAC,CAAC,CACFo5C,SAAS,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,UAAUztC,KAAK,EAAEyvC,YAAY,EAAE;EAC3E,IAAIhC,SAAS,GAAG;IACZQ,IAAI,EAAEA,IAAI;IACVqB,QAAQ,EAAE,GAAG;IACb5B,KAAK,EAAE;MACHgC,OAAO,EAAE;IACb;EACJ,CAAC;EACD,OAAOjC,SAAS;EAEhB,SAASQ,IAAIA,CAACP,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAE;IACjC,SAASgC,SAASA,CAAA,EAAG;MACjB,IAAIhC,KAAK,CAAC+B,OAAO,IAAI/B,KAAK,CAACiC,cAAc,EAAE;QACvC,IAAIxxC,IAAI,GAAG+zB,OAAO,CAAC59B,MAAM,CAAC,CAAC;QAC3B,IAAIyD,MAAM,GAAG6G,QAAQ,CAACT,IAAI,CAACpG,MAAM,CAAC,CAAC,CAAC;QACpC,IAAID,KAAK,GAAG8G,QAAQ,CAACT,IAAI,CAACrG,KAAK,CAAC,CAAC,CAAC;QAElC,IAAIA,KAAK,IAAI,CAAC,IAAIC,MAAM,IAAI,CAAC,EACzB,OAAO,CAAC,CAAC;QAEb,IAAI63C,eAAe,GAAGlC,KAAK,CAAC+B,OAAO,CAACt9C,WAAW,CAAC,CAAC,CAAClI,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC;QACvF,IAAI,CAAC2lD,eAAe,EAChBlC,KAAK,CAAC+B,OAAO,IAAI,SAAS,GAAG33C,KAAK,GAAG,UAAU,GAAGC,MAAM,CAAC,KAEzD21C,KAAK,CAAC+B,OAAO,IAAI,SAAS,GAAG33C,KAAK,GAAG,UAAU,GAAGC,MAAM;MAChE;MACA,IAAI83C,UAAU,GAAGnC,KAAK,CAACoC,gBAAgB;MACvC,IAAI,CAAC,CAACD,UAAU,EACZnC,KAAK,CAACqC,IAAI,CAAC,KAAK,EAAEF,UAAU,CAAC;MAEjC,OAAO;QACH7uC,MAAM,EAAE,KAAK;QACbf,GAAG,EAAEytC,KAAK,CAAC+B,OAAO;QAClBxuC,KAAK,EAAE;MACX,CAAC;IACL;IAEA,SAAS+uC,QAAQA,CAAA,EAAG;MAChB,IAAIC,MAAM,GAAGP,SAAS,CAAC,CAAC;MACxB,IAAIhC,KAAK,CAAC+B,OAAO,EAAE;QACf/B,KAAK,CAACqC,IAAI,CAAC,KAAK,EAAEE,MAAM,CAAChwC,GAAG,CAAC;MACjC;IACJ;IAEA+vC,QAAQ,CAAC,CAAC;IAEVvC,KAAK,CAACxwD,GAAG,CAAC,kBAAkB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;MACjDkxD,QAAQ,CAAC,CAAC;IACd,CAAC,CAAC;IAEFvC,KAAK,CAACnqD,MAAM,CAAC,SAAS,EAAE,UAASM,GAAG,EAAEqiD,MAAM,EAAC;MACzC,IAAIA,MAAM,IAAIriD,GAAG,EAAE;QACfosD,QAAQ,CAAC,CAAC;MACd;IACJ,CAAC,CAAC;EACN;AACJ,CAAC,CAAC,CAAC,CACFxC,SAAS,CAAC,iBAAiB,EAAE,CAAC,eAAe,EAAE,UAAU1yD,aAAa,EAAE;EACrE,IAAI0yD,SAAS,GAAG;IACZQ,IAAI,EAAEA,IAAI;IACVqB,QAAQ,EAAE,GAAG;IACb5B,KAAK,EAAE;MACHyC,QAAQ,EAAE,GAAG;MACbC,OAAO,EAAE,GAAG;MACZC,YAAY,EAAE,GAAG;MACjBC,OAAO,EAAE,GAAG;MACZC,cAAc,EAAE;IACpB;EACJ,CAAC;EACD,OAAO9C,SAAS;EAGhB,SAASQ,IAAIA,CAACP,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAE;IACjC,SAASgC,SAASA,CAACv/C,KAAK,EAAE;MACtB,IAAIA,KAAK,IAAIu9C,KAAK,CAACiC,cAAc,EAAE;QAC/B,IAAIxxC,IAAI,GAAG+zB,OAAO,CAAC59B,MAAM,CAAC,CAAC;QAC3B,IAAIyD,MAAM,GAAG6G,QAAQ,CAACT,IAAI,CAACpG,MAAM,CAAC,CAAC,CAAC;QACpC,IAAID,KAAK,GAAG8G,QAAQ,CAACT,IAAI,CAACrG,KAAK,CAAC,CAAC,CAAC;QAElC,IAAIA,KAAK,IAAI,CAAC,EAAC;UACXA,KAAK,GAAGhd,aAAa,CAACozB,OAAO;QACjC;QACA,IAAInW,MAAM,IAAI,CAAC,EAAE;UACbA,MAAM,GAAGjd,aAAa,CAACqzB,OAAO;QAClC;QAEA,IAAIpW,MAAM,GAAG,CAAC,IAAID,KAAK,GAAG,CAAC,EAAE;UACzB,OAAO,CAAC,CAAC;QACb;QAEA,IAAI83C,eAAe,GAAGz/C,KAAK,CAACgC,WAAW,CAAC,CAAC,CAAClI,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC;QAC/E,IAAI,CAAC2lD,eAAe,EAChBz/C,KAAK,IAAI,SAAS,GAAG2H,KAAK,GAAG,UAAU,GAAGC,MAAM,CAAC,KAEjD5H,KAAK,IAAI,SAAS,GAAG2H,KAAK,GAAG,UAAU,GAAGC,MAAM;MACxD;MAEA,IAAI83C,UAAU,GAAGnC,KAAK,CAACoC,gBAAgB;MAEvC,IAAI,CAAC3/C,KAAK,IAAI,CAAC,CAAC0/C,UAAU,EAAE;QACxB,OAAO;UACH7uC,MAAM,EAAE,KAAK;UACbf,GAAG,EAAE4vC,UAAU;UACf5uC,KAAK,EAAE;QACX,CAAC;MACL;MAEA,OAAO;QACHD,MAAM,EAAE,KAAK;QACbf,GAAG,EAAE9P,KAAK;QACV8Q,KAAK,EAAE;MACX,CAAC;IACL;IAEA,SAAS6M,WAAWA,CAAA,EAAG;MACnB,IAAI2/B,KAAK,CAACyC,QAAQ,KAAKzC,KAAK,CAAC2C,YAAY,IAAI,CAAC,CAAC3C,KAAK,CAAC1/B,OAAO,EAAE;QAC1D,IAAI9N,GAAG,GAAG,IAAI;QAEd,IAAI,CAACwtC,KAAK,CAAC6C,cAAc,EAAE;UACvBrwC,GAAG,GAAG,CAAC/lB,kBAAkB,CAAC2oC,aAAa,KAAK,OAAO,GAAG/nC,aAAa,CAACmnC,OAAO,GAAG,wBAAwB,GAAGnnC,aAAa,CAACszB,YAAY,IAAI,MAAM,GAAGq/B,KAAK,CAAC1/B,OAAO;QACjK,CAAC,MAAM;UACH9N,GAAG,GAAGnlB,aAAa,CAACkoC,aAAa,GAAG,wBAAwB,GAAGyqB,KAAK,CAAC1/B,OAAO,GAAG,oBAAoB,GAAGwiC,kBAAkB,CAAC9C,KAAK,CAAC6C,cAAc,CAAC;QAClJ;QAEA,IAAI7C,KAAK,CAAC4C,OAAO,KAAK,IAAI,EAAE;UACxBpwC,GAAG,IAAI,SAAS,GAAGnlB,aAAa,CAACozB,OAAO,GAAG,UAAU,GAAGpzB,aAAa,CAACqzB,OAAO;QACjF;QAEA,OAAOlO,GAAG;MACd;MACA,OAAO,IAAI;IACf;IAAC;IAED,SAAS+vC,QAAQA,CAAA,EAAG;MAChB;MACAvC,KAAK,CAAC1/B,OAAO,GAAG0/B,KAAK,CAAC0C,OAAO;MAC7B,IAAMhgD,KAAK,GAAG2d,WAAW,CAAC,CAAC;MAC3B,IAAImiC,MAAM,GAAGP,SAAS,CAACv/C,KAAK,CAAC;MAC7B,IAAI8/C,MAAM,CAAChwC,GAAG,EAAE;QACZytC,KAAK,CAACqC,IAAI,CAAC,KAAK,EAAEE,MAAM,CAAChwC,GAAG,CAAC;MACjC;IACJ;IAAC;IAED+vC,QAAQ,CAAC,CAAC;IAEV,IAAIQ,QAAQ,GAAG,SAAXA,QAAQA,CAAY5sD,GAAG,EAAEqiD,MAAM,EAAC;MAChC;MACI+J,QAAQ,CAAC,CAAC;MACf;IACH,CAAC;IAEDvC,KAAK,CAACnqD,MAAM,CAAC,SAAS,EAAEktD,QAAQ,CAAC;IACjC/C,KAAK,CAACnqD,MAAM,CAAC,cAAc,EAAEktD,QAAQ,CAAC;IACtC;IACA/C,KAAK,CAACnqD,MAAM,CAAC,gBAAgB,EAAEktD,QAAQ,CAAC;IAExC/C,KAAK,CAACxwD,GAAG,CAAC,kBAAkB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;MACjDkxD,QAAQ,CAAC,CAAC;IACd,CAAC,CAAC;EACN;AACJ,CAAC,CAAC,CAAC,CACFxC,SAAS,CAAC,aAAa,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAC3F,UAAU5oC,OAAO,EAAE3pB,aAAa,EAAEH,aAAa,EAAEM,QAAQ,EAAED,SAAS,EAAE;EAClE,IAAIqyD,SAAS,GAAG;IACZQ,IAAI,EAAEA,IAAI;IACVyC,UAAU,EAAE,IAAI;IAChBpB,QAAQ,EAAE,GAAG;IACbqB,WAAW,EAAEvD,iEAAe;IAC5BM,KAAK,EAAE,CACP;EACJ,CAAC;EAED,OAAOD,SAAS;EAEhB,SAASQ,IAAIA,CAACP,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAE;IACjC,IAAI5yD,aAAa,CAAC2L,QAAQ,IAAIxL,aAAa,CAAC01D,kBAAkB,CAAC,CAAC,EAAE;MAC9D,IAAIC,KAAK,GAAG1e,OAAO,CAAC,CAAC,CAAC,CAAC2e,gBAAgB,CAAC,uBAAuB,CAAC;MAChEnyD,CAAC,CAACmC,IAAI,CAAC+vD,KAAK,EAAE,UAAUE,GAAG,EAAEt2D,EAAE,EAAE;QAC7B,IAAI2jB,IAAI,GAAGzjB,OAAO,CAACw3C,OAAO,CAAC13C,EAAE,CAAC;QAC9B2jB,IAAI,CAACywC,EAAE,CAAC,UAAU,EAAE,UAAUzyC,CAAC,EAAE;UAC7B;UACAA,CAAC,CAACyU,cAAc,CAAC,CAAC;UAClBzU,CAAC,CAACpX,MAAM,CAACqP,KAAK,CAAC,CAAC;QACpB,CAAC,CAAC;MACN,CAAC,CAAC;IACN;IAEAq5C,KAAK,CAAC9oD,KAAK,GAAG,CAAC;IACf,IAAIuE,IAAI,GAAGwkD,KAAK,CAACxkD,IAAI;IAErB,IAAI,CAAC,CAACwkD,KAAK,CAACqD,cAAc,EAAE;MACxB,IAAI3qC,GAAG,GAAGqnC,KAAK,CAACuD,OAAO;MACvB,OAAO5qC,GAAG,IAAI,IAAI,EAAE;QAChB,IAAIA,GAAG,CAAC0jB,cAAc,CAAC4jB,KAAK,CAACqD,cAAc,CAAC,EAAE;UAC1CtD,KAAK,CAACsD,cAAc,GAAG3qC,GAAG,CAACsnC,KAAK,CAACqD,cAAc,CAAC;UAChD;QACJ;QACA3qC,GAAG,GAAGA,GAAG,CAAC4qC,OAAO;MACrB;IACJ;IAEA,IAAI,CAACvD,KAAK,CAACsD,cAAc,EACrBtD,KAAK,CAACsD,cAAc,GAAG,CAAC;IAE5BtD,KAAK,CAACvkD,IAAI,GAAGA,IAAI;IACjBukD,KAAK,CAACx9C,SAAS,GAAG,IAAI;IACtBw9C,KAAK,CAACwD,WAAW,GAAG,IAAI;IACxBxD,KAAK,CAACyD,YAAY,GAAG,IAAI;IAEzB,IAAIhoD,IAAI,KAAK,SAAS,EAAE;MACpBukD,KAAK,CAAC0D,cAAc,GAAG1D,KAAK,CAAC9oD,KAAK;IACtC,CAAC,MAAM;MACH,IAAIuE,IAAI,KAAK,iBAAiB,EAAE;QAC5BukD,KAAK,CAAC0D,cAAc,GAAGvsC,OAAO,CAAC,QAAQ,CAAC,CAAC6oC,KAAK,CAAC9oD,KAAK,EAAE8oD,KAAK,CAACsD,cAAc,CAAC;MAC/E,CAAC,MACI;QACD,IAAIzhD,CAAC,GAAGm+C,KAAK,CAAC9oD,KAAK,GAAG,EAAE;QACxB,IAAI,CAAC2K,CAAC,EACFA,CAAC,GAAG,GAAG;QACXm+C,KAAK,CAAC0D,cAAc,GAAG7hD,CAAC;MAC5B;IACJ;IAEAm+C,KAAK,CAAC2D,SAAS,GAAG,YAAY;MAC1B,IAAI52D,EAAE,GAAG03C,OAAO,CAACjmC,IAAI,CAAC,uBAAuB,CAAC;MAE9C,IAAIolD,GAAG,GAAGn2C,QAAQ;QACZpY,IAAI,GAAGuuD,GAAG,CAAC7I,aAAa,CAAChuD,EAAE,CAAC;QAC5B82D,KAAK;QAAEC,SAAS;MAGtB,IAAI,OAAOF,GAAG,CAAChgB,IAAI,CAACmgB,eAAe,KAAK,UAAU,EAAE;QAChDF,KAAK,GAAGp2C,QAAQ,CAACm2B,IAAI,CAACmgB,eAAe,CAAC,CAAC;QACvCF,KAAK,CAACG,iBAAiB,CAAC3uD,IAAI,CAAC;QAC7BwuD,KAAK,CAAC1K,MAAM,CAAC,CAAC;MAClB,CAAC,MAAM,IAAI3sD,MAAM,CAACy3D,YAAY,EAAE;QAC5BH,SAAS,GAAGt3D,MAAM,CAACy3D,YAAY,CAAC,CAAC;QACjCJ,KAAK,GAAGp2C,QAAQ,CAACy2C,WAAW,CAAC,CAAC;QAC9BL,KAAK,CAACM,kBAAkB,CAAC9uD,IAAI,CAAC;QAC9ByuD,SAAS,CAACM,eAAe,CAAC,CAAC;QAC3BN,SAAS,CAACO,QAAQ,CAACR,KAAK,CAAC;MAC7B;IACJ,CAAC;IAED7D,KAAK,CAACnqD,MAAM,CAAC,OAAO,EAAE,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;MAChD,IAAI0F,IAAI,KAAK,SAAS,EAAE;QACpBukD,KAAK,CAAC0D,cAAc,GAAG1D,KAAK,CAAC9oD,KAAK;MACtC,CAAC,MAAM;QACH,IAAIuE,IAAI,KAAK,iBAAiB,EAC1BukD,KAAK,CAAC0D,cAAc,GAAGvsC,OAAO,CAAC,QAAQ,CAAC,CAAC6oC,KAAK,CAAC9oD,KAAK,EAAE8oD,KAAK,CAACsD,cAAc,CAAC,CAAC,KAC3E;UACD,IAAIzhD,CAAC,GAAGm+C,KAAK,CAAC9oD,KAAK,GAAG,EAAE;UACxB,IAAI,CAAC2K,CAAC,EAAE;YACJA,CAAC,GAAG,GAAG;UACX;UACA,IAAIA,CAAC,IAAE,GAAG,IAAIm+C,KAAK,CAAC0D,cAAc,KAAK7hD,CAAC,EAAE;YACtCm+C,KAAK,CAACsE,aAAa,CAAC,CAAC;UACzB;UACAtE,KAAK,CAAC0D,cAAc,GAAG7hD,CAAC;QAC5B;MACJ;IACJ,CAAC,CAAC;IAEFm+C,KAAK,CAACuE,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAExCvE,KAAK,CAACsE,aAAa,GAAG,YAAW;MAC7B,IAAIE,UAAU,GAAG,oBAAoB;MACrC,IAAIC,WAAW,GAAG,EAAE;MACpB,IAAIC,QAAQ,GAAGjgB,OAAO,CAACjmC,IAAI,CAAC,GAAG,GAAGgmD,UAAU,CAAC;MAC7CA,UAAU,IAAI,GAAG,GAAG,cAAc,GAAG,CAACC,WAAW,GAAG,EAAE,EAAE33C,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;MAEzE43C,QAAQ,CAAC/f,GAAG,CAAC,CAAC,CAAC,CAACggB,SAAS,GAAGH,UAAU;IAC1C,CAAC;IAEDxE,KAAK,CAAC4E,WAAW,GAAG,YAAW;MAC3B;MACA;MACA;;MAEI,IAAIJ,UAAU,GAAG,oBAAoB;MACrC,IAAIC,WAAW,GAAG,EAAE;MACpB,IAAIC,QAAQ,GAAGjgB,OAAO,CAACjmC,IAAI,CAAC,GAAG,GAAGgmD,UAAU,CAAC;MAE7C,IAAIK,QAAQ,GAAGH,QAAQ,CAACI,KAAK,CAAC,CAAC,CAAClsC,OAAO,CAAC,gBAAgB,CAAC,CAACvO,KAAK,CAAC,CAAC,GAAC,EAAE;MACpE;;MAEAq6C,QAAQ,CAACtxD,IAAI,CAAC,UAAUC,GAAG,EAAEtG,EAAE,EAAE;QAC7B,IAAIg2C,GAAG,GAAG,IAAI;QACd,KAAK,IAAIphC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGq+C,KAAK,CAACuE,WAAW,CAAChxD,MAAM,EAAEoO,CAAC,EAAE,EAAE;UAC/C,IAAIE,CAAC,GAAGm+C,KAAK,CAACuE,WAAW,CAAC5iD,CAAC,CAAC;UAC5B,IAAIE,CAAC,IAAI4iD,WAAW,EAAE;YAClB,IAAIE,SAAS,GAAGH,UAAU;YAC1B,IAAI3iD,CAAC,IAAI4iD,WAAW,EAChBE,SAAS,IAAI,GAAG,GAAG,cAAc,GAAG,CAAC9iD,CAAC,GAAG,EAAE,EAAEiL,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;YAClE,IAAIi2B,GAAG,CAAC4hB,SAAS,CAACj8C,IAAI,CAAC,CAAC,IAAIi8C,SAAS,EAAE;cACnC5hB,GAAG,CAAC4hB,SAAS,GAAGA,SAAS;YAC7B;YAEA,IAAII,OAAO,GAAGh4D,EAAE,CAACi4D,WAAW;YAC5B;YACA,IAAID,OAAO,GAAGF,QAAQ,CAAC,6BAA6B;cAChD;YACJ,CAAC,MACI;cACD1yD,OAAO,CAACC,GAAG,CAAC2yD,OAAO,CAAC,oBAAoB,CAAC;cACzC;YACJ;UACJ;QACJ;MACJ,CAAC,CAAC;MACN;IACJ,CAAC;IAED/E,KAAK,CAACiF,QAAQ,GAAG,YAAY;MACzBxgB,OAAO,CAACjmC,IAAI,CAAC,cAAc,CAAC,CAACjM,KAAK,CAAC,CAAC;IACxC,CAAC;IAEDytD,KAAK,CAACkF,QAAQ,GAAG,UAAUC,IAAI,EAAE;MAC7B,IAAI5wD,KAAK,GAAGyrD,KAAK;MACjBryD,QAAQ,CAAC,YAAY;QACjBwE,OAAO,CAACC,GAAG,CAAC,iBAAiB,CAAC;QAC9B,IAAIqJ,IAAI,KAAK,SAAS,EAAE;UACpB,IAAIoG,CAAC,GAAGtN,KAAK,CAAC2C,KAAK;UACnB,IAAI3C,KAAK,CAACiO,SAAS,EAAE;YACjBX,CAAC,GAAG,CAAC;YACLtN,KAAK,CAACiO,SAAS,GAAG,KAAK;UAC3B;UAEA,IAAI2iD,IAAI,IAAI,WAAW,EAAE;YACrBtjD,CAAC,GAAGmlB,IAAI,CAACo+B,KAAK,CAACj0C,QAAQ,CAACtP,CAAC,CAAC,GAAG,EAAE,CAAC;UACpC,CAAC,MAAM,IAAIsjD,IAAI,IAAI,IAAI,EAAE;YACrBtjD,CAAC,GAAGsP,QAAQ,CAACtP,CAAC,CAAC,GAAG,GAAG;UACzB,CAAC,MAAM;YACHA,CAAC,GAAGsP,QAAQ,CAACtP,CAAC,GAAG,EAAE,CAAC,GAAGsP,QAAQ,CAACg0C,IAAI,CAAC;UACzC;UACA5wD,KAAK,CAAC2C,KAAK,GAAG2K,CAAC;QACnB,CAAC,MAAM;UAEH,IAAIpG,IAAI,KAAK,iBAAiB,EAAE;YAC5B,IAAIoG,CAAC,GAAGiQ,UAAU,CAAC,GAAG,GAAGvd,KAAK,CAAC2C,KAAK,CAAC;YACrC,IAAI3C,KAAK,CAACiO,SAAS,EAAE;cACjBX,CAAC,GAAG,CAAC;cACLtN,KAAK,CAACiO,SAAS,GAAG,KAAK;YAC3B;YAEA,IAAI2iD,IAAI,IAAI,WAAW,EAAE;cACrBtjD,CAAC,GAAGmlB,IAAI,CAACo+B,KAAK,CAACvjD,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG;YAChC,CAAC,MAAM,IAAIsjD,IAAI,IAAI,IAAI,EAAE;cACrBtjD,CAAC,GAAGA,CAAC,GAAG,GAAG;YACf,CAAC,MACI;cACDA,CAAC,GAAGA,CAAC,GAAG,EAAE,GAAGiQ,UAAU,CAACqzC,IAAI,CAAC,GAAG,GAAG;YACvC;YAEA5wD,KAAK,CAAC2C,KAAK,GAAG8oD,KAAK,CAACqF,oBAAoB,CAACxjD,CAAC,GAAG,EAAE,CAAC;UACpD,CAAC,MACI;YACD,IAAIA,CAAC,GAAGtN,KAAK,CAAC2C,KAAK,GAAG,EAAE;YACxB,IAAI3C,KAAK,CAACiO,SAAS,EAAE;cACjBX,CAAC,GAAG,GAAG;cACPtN,KAAK,CAACiO,SAAS,GAAG,KAAK;YAC3B;YAEA,IAAI2iD,IAAI,IAAI,WAAW,EAAE;cACrBtjD,CAAC,GAAGA,CAAC,CAACkM,MAAM,CAAC,CAAC,EAAElM,CAAC,CAACtO,MAAM,GAAG,CAAC,CAAC;YACjC,CAAC,MACI,IAAI4xD,IAAI,IAAI,GAAG,EAAE;cAClB,IAAItjD,CAAC,CAACrF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAIqF,CAAC,CAACtO,MAAM,GAAG,CAAC,EAAE;gBACpCsO,CAAC,IAAI,GAAG;cACZ;YACJ,CAAC,MACI,IAAIsjD,IAAI,IAAI,GAAG,IAAIA,IAAI,IAAI,GAAG,EAAE;cACjCtjD,CAAC,GAAGA,CAAC,GAAGsjD,IAAI;YAChB;YAEA,IAAI,CAACtjD,CAAC,EACFA,CAAC,GAAG,GAAG,CAAC,KACP;cACD;;cAEA,OAAOA,CAAC,CAACtO,MAAM,GAAG,CAAC,IAAIsO,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAC9BA,CAAC,GAAGA,CAAC,CAACkM,MAAM,CAAC,CAAC,CAAC;cAEnB,IAAIlM,CAAC,CAACtO,MAAM,IAAI,CAAC,EACbsO,CAAC,GAAG,GAAG;cACX,IAAIA,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EACXA,CAAC,GAAG,GAAG,GAAGA,CAAC;YACnB;YAEA,IAAIyjD,QAAQ,GAAGtF,KAAK,CAACqF,oBAAoB,CAACxjD,CAAC,CAAC;YAC5C,IAAIyjD,QAAQ,CAAC/xD,MAAM,GAAG7F,SAAS,CAAC00C,sBAAsB,EAAE;cACpD;YACJ;YACA7tC,KAAK,CAAC2C,KAAK,GAAG8oD,KAAK,CAACqF,oBAAoB,CAACxjD,CAAC,CAAC;UAC/C;QACJ;QACAlU,QAAQ,CAAC,YAAU;UACf4G,KAAK,CAACqwD,WAAW,CAAC,CAAC;QACvB,CAAC,CAAC;MACN,CAAC,CAAC;IACN,CAAC;IAED5E,KAAK,CAACqF,oBAAoB,GAAG,UAAUlvD,GAAG,EAAE;MACxC,IAAI6pD,KAAK,CAACsD,cAAc,GAAG,CAAC,IAAI,CAACntD,GAAG,IAAIA,GAAG,CAAC5C,MAAM,GAAG,CAAC,EAAE;QACpD,IAAIgyD,QAAQ,GAAGpvD,GAAG,CAACqG,OAAO,CAAC,GAAG,CAAC;QAC/B,IAAI+oD,QAAQ,IAAI,CAAC,IAAKpvD,GAAG,CAAC5C,MAAM,GAAGgyD,QAAQ,GAAG,CAAC,GAAIvF,KAAK,CAACsD,cAAc,EAAE;UACrE,OAAOntD,GAAG,CAACqvD,SAAS,CAAC,CAAC,EAAED,QAAQ,GAAG,CAAC,GAAGvF,KAAK,CAACsD,cAAc,CAAC;QAChE;MACJ;MAEA,OAAOntD,GAAG;IACd,CAAC;IAED6pD,KAAK,CAACyF,QAAQ,GAAG,UAAUN,IAAI,EAAE;MAC7BnF,KAAK,CAACM,MAAM,CAAC,YAAY;QACrBN,KAAK,CAACkF,QAAQ,CAACC,IAAI,CAAC;MACxB,CAAC,CAAC;IACN,CAAC;IAEDl0D,CAAC,CAACzE,MAAM,CAAC,CAAC20D,EAAE,CAAC,QAAQ,EAAE,YAAY;MAC/BxzD,QAAQ,CAAC,YAAY;QACjBqyD,KAAK,CAAC4E,WAAW,CAAC,CAAC;MACvB,CAAC,CAAC;IACN,CAAC,CAAC;EACN;AACJ,CAAC,CACJ,CAAC,CACD7E,SAAS,CAAC,kBAAkB,EACzB,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAC/F,UAAUlK,QAAQ,EAAE1+B,OAAO,EAAE3pB,aAAa,EAAEG,QAAQ,EAAEN,aAAa,EAAE4pB,OAAO,EAAE3pB,YAAY,EAAE;EACxF,IAAIyyD,SAAS,GAAG;IACZQ,IAAI,EAAEA,IAAI;IACVqB,QAAQ,EAAE,GAAG;IACb5B,KAAK,EAAE;MACH;MACAe,OAAO,EAAE,GAAG;MACZ2E,kBAAkB,EAAE,GAAG;MACvBC,wBAAwB,EAAE;IAC9B;EACJ,CAAC;EAED,OAAO5F,SAAS;EAEhB,SAASQ,IAAIA,CAACP,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAE;IACjC,IAAI2F,EAAE,GAAGnhB,OAAO,CAAC73B,IAAI,CAAC,CAAC;IACvBozC,KAAK,CAAC6F,GAAG,GAAG50D,CAAC,CAACgvD,KAAK,CAAC6F,gBAAgB,CAAC;IACrC9F,KAAK,CAAC+F,MAAM,GAAG9F,KAAK,CAAC+F,mBAAmB;IACxChG,KAAK,CAACiG,QAAQ,GAAGhG,KAAK,CAACiG,YAAY;IACnClG,KAAK,CAACmG,gBAAgB,GAAGlG,KAAK,CAACmG,qBAAqB;IACpDpG,KAAK,CAACqG,QAAQ,GAAGpG,KAAK,CAACqG,oBAAoB;IAC3CtG,KAAK,CAACuG,oBAAoB,GAAGtG,KAAK,CAACsG,oBAAoB;IACvDvG,KAAK,CAACwG,mBAAmB,GAAGvG,KAAK,CAACwG,2BAA2B;IAC7DzG,KAAK,CAAC0G,gBAAgB,GAAGzG,KAAK,CAACyG,gBAAgB;IAC/C1G,KAAK,CAAC2G,wBAAwB,GAAG1G,KAAK,CAAC0G,wBAAwB;IAE/D3G,KAAK,CAAC4G,YAAY,GAAC,EAAE;IACrB5G,KAAK,CAAC6G,WAAW,GAAG,KAAK;IAEzB7G,KAAK,CAAC3nC,eAAe,GAAGpB,OAAO,CAACqB,cAAc,CAACC,YAAY;IAE3DynC,KAAK,CAAC8G,UAAU,GAAG,YAAY;MAC3B9G,KAAK,CAAC+G,WAAW,CAACC,cAAc,GAAGhH,KAAK,CAAC+G,WAAW,CAACC,cAAc,GAAG,KAAK,GAAG,IAAI;IACtF,CAAC;IAED,IAAIR,mBAAmB,GAAG,EAAE;IAC5B,IAAIS,aAAa,GAAC,EAAE;IACpB,IAAIC,MAAM,GAAGjH,KAAK,CAACkH,gBAAgB;IACnC,IAAI5lD,KAAK,GAAG0+C,KAAK,CAACmH,eAAe;IACjC,IAAIC,SAAS,GAAGpH,KAAK,CAACqH,YAAY;IAClC,IAAI,CAACD,SAAS,EACVA,SAAS,GAAG,WAAW;IAE3BrH,KAAK,CAACuH,WAAW,GAAGtH,KAAK,CAACuH,cAAc;IACxC,IAAI,CAACxH,KAAK,CAACuH,WAAW,EAClBvH,KAAK,CAACuH,WAAW,GAAG,SAAS;IAEjCvH,KAAK,CAACyH,MAAM,GAAG,KAAK;IACpBzH,KAAK,CAAC1tD,UAAU,GAAG,YAAY;MAC3B,IAAI,CAAC0tD,KAAK,CAACyH,MAAM,EAAE;QACfzH,KAAK,CAACyH,MAAM,GAAG,IAAI;QACnB,IAAIzH,KAAK,CAACuH,WAAW,IAAI,SAAS,EAAE;UAChCvH,KAAK,CAAC6F,GAAG,CAAC1E,EAAE,CAAC,iBAAiB,EAAE,UAAUzyC,CAAC,EAAE;YACzC,IAAIg5C,KAAK,GAAGz2D,CAAC,CAAC,MAAM,CAAC;YACrBy2D,KAAK,CAAClQ,OAAO,CAAC,kCAAkC,CAAC;YACjD,IAAIjjD,KAAK,GAAGyrD,KAAK;YACjB;YACA;YACA;UAEJ,CAAC,CAAC;UAEFA,KAAK,CAAC6F,GAAG,CAAC1E,EAAE,CAAC,iBAAiB,EAAE,UAAUzyC,CAAC,EAAE;YACzC,IAAIna,KAAK,GAAGyrD,KAAK;YACjBryD,QAAQ,CAAC,YAAY;cACjBsD,CAAC,CAAC,eAAe,CAAC,CAAC02D,MAAM,CAAC,CAAC;YAC/B,CAAC,EAAE,GAAG,CAAC;UACX,CAAC,CAAC;QACN;MACJ;MAEA,IAAIpzD,KAAK,GAAGyrD,KAAK;MAEjBryD,QAAQ,CAAC,YAAY;QACjB,IAAI,CAAC,CAAC4G,KAAK,CAAC8xD,QAAQ,EAAE;UAClB9kD,KAAK,GAAGy+C,KAAK,CAACuD,OAAO,CAACtC,KAAK,CAAC1sD,KAAK,CAAC8xD,QAAQ,CAAC;QAC/C;QACA,IAAI,CAAC,CAAC9xD,KAAK,CAACiyD,mBAAmB,EAAE;UAC7BA,mBAAmB,GAAGxG,KAAK,CAACuD,OAAO,CAACtC,KAAK,CAAC1sD,KAAK,CAACiyD,mBAAmB,CAAC;QACxE;QACA,IAAI,CAAC,CAACjyD,KAAK,CAACmyD,gBAAgB,EAAE;UAC1BO,aAAa,GAAGjH,KAAK,CAACuD,OAAO,CAACtC,KAAK,CAAC1sD,KAAK,CAACmyD,gBAAgB,CAAC;QAC/D;QAEA,IAAI,CAAC,CAACnyD,KAAK,CAAC4xD,gBAAgB,EACxBnG,KAAK,CAAC4H,aAAa,GAAG5H,KAAK,CAACuD,OAAO,CAACtC,KAAK,CAACjB,KAAK,CAACmG,gBAAgB,CAAC;QAErE,IAAI,CAAC,CAAC5xD,KAAK,CAACoyD,wBAAwB,EAAE;UAClC3G,KAAK,CAAC6H,cAAc,GAAG7H,KAAK,CAACuD,OAAO,CAACtC,KAAK,CAAC1sD,KAAK,CAACoyD,wBAAwB,CAAC;QAC9E;QAEA,IAAI3G,KAAK,CAACuH,WAAW,IAAI,SAAS,EAAE;UAChChzD,KAAK,CAACsxD,GAAG,CAACiC,OAAO,CACjB;YACIT,SAAS,EAAEA,SAAS;YACpBz6C,IAAI,EAAE,IAAI;YACVw0C,SAAS,EAAE,MAAM;YACjBzvD,OAAO,EAAE,QAAQ;YACjB4P,KAAK,EAAEA,KAAK;YACZwmD,QAAQ,EAAE,+NAA+N;YACzOC,OAAO,EAAEhI,KAAK,CAACiI;UACnB,CAAC,CAAC;QACN,CAAC,MACI,IAAIjI,KAAK,CAACuH,WAAW,IAAI,gBAAgB,EAAE;UAC5C,IAAI,CAAChzD,KAAK,CAAC2zD,MAAM,EAAE;YAEf,IAAIC,yBAAyB,qDAAAvpD,MAAA,CACX4nD,mBAAmB,wOAAA5nD,MAAA,CAGnBqoD,aAAa,0XAO9B;YAED,IAAImB,iBAAiB,GAAG,CAAC,CAAC5B,mBAAmB,GAAG2B,yBAAyB,GAAG,EAAE;YAE9E,IAAIJ,QAAQ,s9BAAAnpD,MAAA,CAQmF2C,KAAK,qIAAA3C,MAAA,CAEtEwpD,iBAAiB,opBAU9C;;YAED;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;;YAEA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;;YAEA,IAAI9tB,GAAG,GAAGub,QAAQ,CAAC5kD,CAAC,CAAC82D,QAAQ,CAAC,CAAC,CAACxzD,KAAK,CAAC;YACtCA,KAAK,CAAC2zD,MAAM,GAAG5tB,GAAG,CAAC;YACnB/lC,KAAK,CAAC2zD,MAAM,CAAC1pD,IAAI,CAAC,aAAa,CAAC,CAAC6pD,MAAM,CAACrI,KAAK,CAACiI,eAAe,CAAC;YAC9D,IAAIK,SAAS,GAAGzS,QAAQ,CAAC,gKAAgK,CAAC,CAACthD,KAAK,CAAC;YACjMA,KAAK,CAAC2zD,MAAM,CAAC1pD,IAAI,CAAC,6BAA6B,CAAC,CAAC6pD,MAAM,CAACC,SAAS,CAAC;UACtE;UACA;UACA;UACA/zD,KAAK,CAAC2zD,MAAM,CAACK,KAAK,CAAC,MAAM,CAAC;QAC9B;QAEA56D,QAAQ,CAAC,YAAY;UACjB4G,KAAK,CAACwyD,WAAW,CAACvkD,SAAS,GAAG,IAAI;UAClC,IAAIw9C,KAAK,CAACuH,WAAW,IAAI,SAAS,EAAE;YAChCvH,KAAK,CAAC6F,GAAG,CAACiC,OAAO,CAAC,MAAM,CAAC;UAC7B,CAAC,MACI,IAAI9H,KAAK,CAACuH,WAAW,IAAI,gBAAgB,EAAE;YAC5C,IAAIhzD,KAAK,CAAC2zD,MAAM,EAAE;cACd3zD,KAAK,CAAC2zD,MAAM,CAACK,KAAK,CAAC,MAAM,CAAC;YAC9B;UACJ;QACJ,CAAC,EAAE,CAAC,CAAC;MACT,CAAC,CAAC;IAEN,CAAC;IAEDvI,KAAK,CAACwI,UAAU,GAAG,UAAU95C,CAAC,EAAE;MAC5B,IAAIna,KAAK,GAAGyrD,KAAK;;MAEjB;MACA7tD,OAAO,CAACC,GAAG,CAAC,UAAU,GAAGsc,CAAC,CAAC+5C,OAAO,CAAC;MACnC,IAAK/5C,CAAC,CAAC+5C,OAAO,IAAI,EAAE,IAAI/5C,CAAC,CAAC+5C,OAAO,IAAI,EAAE,IAAM/5C,CAAC,CAAC+5C,OAAO,IAAI,EAAE,IAAI/5C,CAAC,CAAC+5C,OAAO,IAAI,GAAI,IAAI/5C,CAAC,CAAC+5C,OAAO,IAAI,GAAG,IAAI/5C,CAAC,CAAC+5C,OAAO,IAAI,GAAG,EAAE;QACvHl0D,KAAK,CAACwyD,WAAW,CAACtB,QAAQ,CAAC/2C,CAAC,CAAC8+B,GAAG,CAAC;MACrC,CAAC,MACI,IAAI9+B,CAAC,CAAC+5C,OAAO,IAAI,CAAC,EAAE;QACrBl0D,KAAK,CAACwyD,WAAW,CAACtB,QAAQ,CAAC,WAAW,CAAC;MAC3C,CAAC,MACI,IAAG/2C,CAAC,CAAC+5C,OAAO,KAAK,EAAE,EAAC;QACrB,IAAGzI,KAAK,CAACuG,oBAAoB,IAAI,MAAM,EAAC;UACpCvG,KAAK,CAAC0I,QAAQ,CAAC,IAAI,EAAEh6C,CAAC,CAAC;QAC3B;MACJ,CAAC,MAAK,IAAGA,CAAC,CAAC+5C,OAAO,KAAK,EAAE,EAAC;QACtBzI,KAAK,CAAC0I,QAAQ,CAAC,QAAQ,EAAEh6C,CAAC,CAAC;MAC/B;MAEAA,CAAC,CAACyU,cAAc,CAAC,CAAC;IACtB,CAAC;IAED68B,KAAK,CAACmH,gBAAgB,GAAG;MACrBtqC,MAAM,EAAE,SAARA,MAAMA,CAAYvlB,MAAM,EAAE;QAEtB,IAAI,IAAI,CAACqxD,OAAO,EACZ,IAAI,CAAC1wD,IAAI,CAAC,KAAK,CAAC,CAAC,KAEjB,IAAI,CAAC+K,IAAI,CAAC1L,MAAM,CAAC;MACzB,CAAC;MACDqxD,OAAO,EAAE,KAAK;MACd3lD,IAAI,EAAE,SAANA,IAAIA,CAAY1L,MAAM,EAAE;QACpB,IAAIsxD,OAAO,GAAG,CAAC;QACf,IAAI,IAAI,CAACD,OAAO,EAAE;UACdxI,UAAU,CAAC,YAAU;YACjB,IAAIH,KAAK,CAACuH,WAAW,IAAI,SAAS,EAAE;cAChCvH,KAAK,CAAC6F,GAAG,CAACiC,OAAO,CAAC,MAAM,CAAC;YAC7B,CAAC,MACI,IAAI9H,KAAK,CAACuH,WAAW,IAAI,gBAAgB,IAAIvH,KAAK,CAACkI,MAAM,EAAE;cAC5DlI,KAAK,CAACkI,MAAM,CAACK,KAAK,CAAC,MAAM,CAAC;YAC9B;UACJ,CAAC,CAAC;UACFK,OAAO,GAAG,GAAG;QACjB;QAEA,IAAIv7D,aAAa,CAAC2L,QAAQ,EAAE;UACxBhB,QAAQ,CAACC,IAAI,CAAC,CAAC;QACnB;QAEA+nD,KAAK,CAAC6I,YAAY,GAAG,CAAC,CAAC7I,KAAK,CAAC+F,MAAM,GAAG/F,KAAK,CAACuD,OAAO,CAACtC,KAAK,CAACjB,KAAK,CAAC+F,MAAM,CAAC,GAAG,IAAI;QAC9E/F,KAAK,CAAC8I,KAAK,GAAG,CAAC,CAAC9I,KAAK,CAACiG,QAAQ,GAAGjG,KAAK,CAACuD,OAAO,CAACtC,KAAK,CAACjB,KAAK,CAACiG,QAAQ,CAAC,GAAG,IAAI;QAE3E,IAAI,CAACjG,KAAK,CAACiI,eAAe,EAAE;UACxBjI,KAAK,CAACiI,eAAe,GAAGpS,QAAQ,CAAC+P,EAAE,CAAC,CAAC5F,KAAK,CAAC;QAC/C;QAGA,IAAI1oD,MAAM,EAAE;UACR0oD,KAAK,CAAC6F,GAAG,GAAG50D,CAAC,CAACqG,MAAM,CAAC;QACzB;QAEA3J,QAAQ,CAAC,YAAY;UACjBqyD,KAAK,CAAC+G,WAAW,CAAC7vD,KAAK,GAAG1J,aAAa,CAACu7D,iBAAiB,CAAC/hC,IAAI,CAACD,GAAG,CAACi5B,KAAK,CAACe,OAAO,CAAC,CAAC;UAClFf,KAAK,CAAC+G,WAAW,CAACC,cAAc,GAAGhH,KAAK,CAACe,OAAO,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI;QACvE,CAAC,CAAC;QAEF9vD,CAAC,CAACwc,QAAQ,CAAC,CAAC0zC,EAAE,CAAC,SAAS,EAAEnB,KAAK,CAACwI,UAAU,CAAC;QAE3CrI,UAAU,CAAC,YAAU;UACjBH,KAAK,CAAC1tD,UAAU,CAAC,CAAC;UAClBs2D,OAAO,GAAG,CAAC;QACf,CAAC,EAAEA,OAAO,CAAC;QACX,IAAI,CAACD,OAAO,GAAG,IAAI;MAEvB,CAAC;MACD1wD,IAAI,EAAE,SAANA,IAAIA,CAAY+wD,MAAM,EAAE;QACpB,IAAIA,MAAM,KAAK,IAAI,EACnBhJ,KAAK,CAACe,OAAO,GAAGf,KAAK,CAAC+G,WAAW,CAACC,cAAc,GAAGhH,KAAK,CAAC+G,WAAW,CAAC7vD,KAAK,GAAI,CAAC,CAAC,GAAG8oD,KAAK,CAAC+G,WAAW,CAAC7vD,KAAM;QAE3G,IAAI,CAACyxD,OAAO,GAAG,KAAK;QAEpB13D,CAAC,CAACwc,QAAQ,CAAC,CAACgL,GAAG,CAAC,SAAS,EAAEunC,KAAK,CAACwI,UAAU,CAAC;QAC5C,IAAIxI,KAAK,CAACuH,WAAW,IAAI,SAAS,EAAE;UAChCvH,KAAK,CAAC6F,GAAG,CAACiC,OAAO,CAAC,MAAM,CAAC;QAC7B,CAAC,MACI,IAAI9H,KAAK,CAACuH,WAAW,IAAI,gBAAgB,IAAIvH,KAAK,CAACkI,MAAM,EAAE;UAC5DlI,KAAK,CAACkI,MAAM,CAACK,KAAK,CAAC,MAAM,CAAC;QAC9B;MAEJ,CAAC;MACDU,aAAa,EAAE,SAAfA,aAAaA,CAAA,EAAa;QACtB,OAAOjJ,KAAK,CAAC+G,WAAW,CAACC,cAAc,GAAGhH,KAAK,CAAC+G,WAAW,CAAC7vD,KAAK,GAAI,CAAC,CAAC,GAAG8oD,KAAK,CAAC+G,WAAW,CAAC7vD,KAAM;MACtG,CAAC;MACDgyD,KAAK,EAAE,SAAPA,KAAKA,CAAA,EAAc;QACflJ,KAAK,CAAC+G,WAAW,CAAC7vD,KAAK,GAAG,CAAC;QAC3B8oD,KAAK,CAAC2F,wBAAwB,GAAG,IAAI;QACrC,IAAI,CAAC1tD,IAAI,CAAC,IAAI,CAAC;MACnB,CAAC;MACDkxD,QAAQ,EAAE,SAAVA,QAAQA,CAAA,EAAc;QAClB,OAAOnJ,KAAK;MAChB;IACJ,CAAC;IAEDA,KAAK,CAAC0I,QAAQ,GAAG,YAAY;MACzB1I,KAAK,CAAC0F,kBAAkB,CAAC,CAAC,CAAC0D,KAAK,CAAC,IAAI,EAAE9qD,SAAS,CAAC;IACrD,CAAC;IAED,IAAIqa,GAAG,GAAGqnC,KAAK,CAACuD,OAAO;IACvB,OAAO5qC,GAAG,IAAI,IAAI,EAAE;MAChB,IAAIA,GAAG,CAAC0jB,cAAc,CAAC6qB,MAAM,CAAC,EAAE;QAC5BvuC,GAAG,CAACuuC,MAAM,CAAC,GAAGlH,KAAK,CAACmH,gBAAgB;QACpC;MACJ;MACAxuC,GAAG,GAAGA,GAAG,CAAC4qC,OAAO;IACrB;EACJ;AACJ,CAAC,CACJ,CAAC,CACDxD,SAAS,CAAC,kBAAkB,EACrB,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EACpH,UAAUlK,QAAQ,EAAE1+B,OAAO,EAAE3pB,aAAa,EAAEG,QAAQ,EAAEioD,cAAc,EAAEyT,YAAY,EAAEj8D,UAAU,EAAEC,aAAa,EAAE;EAC3G,IAAI0yD,SAAS,GAAG;IACZQ,IAAI,EAAEA,IAAI;IACVqB,QAAQ,EAAE,GAAG;IACb5B,KAAK,EAAE;MACH;MACA;MACAsJ,kBAAkB,EAAE;IACxB;EACJ,CAAC;EAED,OAAOvJ,SAAS;EAEhB,SAASQ,IAAIA,CAACP,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAE;IACjC,IAAI2F,EAAE,GAAGhQ,cAAc,CAACjR,GAAG,CAACsb,KAAK,CAACsJ,WAAW,CAAC;IAC9C,IAAIrC,MAAM,GAAGjH,KAAK,CAACuJ,gBAAgB;IACnC,IAAIC,QAAQ,GAAGxJ,KAAK,CAACc,OAAO;IAC5B,IAAIx/C,KAAK,GAAGq0C,cAAc,CAACjR,GAAG,CAACsb,KAAK,CAACyJ,eAAe,CAAC;IACrD;IACA,IAAIC,cAAc,GAAG/T,cAAc,CAACjR,GAAG,CAACsb,KAAK,CAAC2J,iBAAiB,CAAC;IAEhE5J,KAAK,CAAC9oD,KAAK,GAAG,IAAI;IAClB8oD,KAAK,CAAC6J,YAAY,GAAG,CAAC;IACtB7J,KAAK,CAACtrD,OAAO,GAAG,IAAI;IACpBsrD,KAAK,CAAC8J,YAAY,GAAG,IAAI;IACzB9J,KAAK,CAAC+J,OAAO,GAAG,IAAI;IACpB/J,KAAK,CAACgK,OAAO,GAAG,IAAI;IACpBhK,KAAK,CAACiK,OAAO,GAAG,IAAI;IAEpBjK,KAAK,CAACiI,eAAe,GAAG,IAAI;IAC5BjI,KAAK,CAACkK,aAAa,GAAG,IAAI;IAE1BlK,KAAK,CAACxxD,QAAQ,GAAG,YAAY;MACzB,OAAOnB,aAAa,CAACmB,QAAQ,KAAK,IAAI;IAC1C,CAAC;IAEDwxD,KAAK,CAACmK,YAAY,GAAG,UAAUz7C,CAAC,EAAE8+B,GAAG,EAAE;MAEnCwS,KAAK,CAAC8J,YAAY,GAAG9J,KAAK,CAAC8J,YAAY,CAACtc,GAAG,CAAC;MAE5C,QAAQwS,KAAK,CAAC6J,YAAY;QACtB,KAAK,CAAC;UACF7J,KAAK,CAAC+J,OAAO,GAAGvc,GAAG;UACnB;QACJ,KAAK,CAAC;UACFwS,KAAK,CAACgK,OAAO,GAAGxc,GAAG;UACnB;QACJ,KAAK,CAAC;UACFwS,KAAK,CAACiK,OAAO,GAAGzc,GAAG;UACnB;MACR;;MAEA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;;MAGA,IAAI,CAAC,CAACwS,KAAK,CAAC8J,YAAY,IAAI,EAAE9J,KAAK,CAAC8J,YAAY,YAAYj9D,6DAAe,CAAC,EAAE;QAE1EmzD,KAAK,CAACtrD,OAAO,GAAGmb,MAAM,CAACu6C,IAAI,CAACpK,KAAK,CAAC8J,YAAY,CAAC;QAC/C9J,KAAK,CAAC6J,YAAY,EAAE;;QAEpB;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;MACJ,CAAC,MACI;QACD7J,KAAK,CAACsJ,kBAAkB,CAAC,CAAC,CAACe,IAAI,CAAC,IAAI,EAAErK,KAAK,CAAC8J,YAAY,CAAC;MAC7D;IACJ,CAAC;IAED9J,KAAK,CAAC1tD,UAAU,GAAG,YAAY;MAC3B;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;;MAEA;;MAEA,IAAI,CAAC0tD,KAAK,CAACkI,MAAM,EAAE;QACf,IAAIH,QAAQ,GACR,qLAAqL,GACrL,gEAAgE,GAChE,kEAAkE,GAClE,+CAA+C,GAC/C,oCAAoC,GACpC,yCAAyC,GACzC,aAAa,GACb,iFAAiF,GACjF,cAAc,GACd,6EAA6E,GAC7E,aAAa,GACb,YAAY,GACZ,WAAW,GACX,6BAA6B,GAC7B,WAAW,GACX,uDAAuD,GACvD,6DAA6D,GAC7D,uBAAuB,GACvB,mBAAmB,GACnB,gBAAgB,GAChB,YAAY,GACZ,QAAQ;QAEZ,IAAIuC,gBAAgB,GAAGzU,QAAQ,CAACkS,QAAQ,CAAC,CAAC/H,KAAK,CAAC;QAChDA,KAAK,CAACkI,MAAM,GAAGj3D,CAAC,CAACq5D,gBAAgB,CAAC;QAClCtK,KAAK,CAACkI,MAAM,CAAC1pD,IAAI,CAAC,aAAa,CAAC,CAAC6pD,MAAM,CAACrI,KAAK,CAACiI,eAAe,CAAC;QAC9D,IAAIK,SAAS,GAAGzS,QAAQ,CAAC,iGAAiG,CAAC,CAACmK,KAAK,CAAC;QAClIA,KAAK,CAACkI,MAAM,CAAC1pD,IAAI,CAAC,mCAAmC,CAAC,CAAC6pD,MAAM,CAACC,SAAS,CAAC;QAExE,IAAIiC,OAAO,GAAG1U,QAAQ,CAAC,mGAAmG,CAAC,CAACmK,KAAK,CAAC;QAClIA,KAAK,CAACkI,MAAM,CAAC1pD,IAAI,CAAC,iCAAiC,CAAC,CAAC6pD,MAAM,CAACkC,OAAO,CAAC;MACxE;MACAvK,KAAK,CAACkI,MAAM,CAAC1pD,IAAI,CAAC,yBAAyB,CAAC,CAACoO,IAAI,CAACozC,KAAK,CAACkK,aAAa,CAAC;MACtE;MACA;MACA;;MAEAlK,KAAK,CAACkI,MAAM,CAAC/G,EAAE,CAAC,eAAe,EAAE,YAAY,CAAE,CAAC,CAAC;MACjDnB,KAAK,CAACkI,MAAM,CAAC/G,EAAE,CAAC,gBAAgB,EAAE,YAAY;QAC1C/zD,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;MACxC,CAAC,CAAC;MAEF6nD,KAAK,CAACkI,MAAM,CAAC/G,EAAE,CAAC,iBAAiB,EAAE,YAAY;QAC3CnB,KAAK,CAACkI,MAAM,CAACzvC,GAAG,CAAC,iBAAiB,CAAC;MACvC,CAAC,CAAC;MAEF9qB,QAAQ,CAAC,YAAY;QACjBqyD,KAAK,CAACkI,MAAM,CAACK,KAAK,CAAC,MAAM,CAAC;MAC9B,CAAC,CAAC;IAEN,CAAC;IAEDvI,KAAK,CAACwK,UAAU,GAAG,YAAY;MAC3BxK,KAAK,CAACkI,MAAM,CAACzvC,GAAG,CAAC,eAAe,CAAC;MACjCunC,KAAK,CAACkI,MAAM,CAACzvC,GAAG,CAAC,gBAAgB,CAAC;MAClCunC,KAAK,CAACkI,MAAM,CAACK,KAAK,CAAC,MAAM,CAAC;IAC9B,CAAC;IAEDvI,KAAK,CAACyK,OAAO,GAAGzK,KAAK,CAAC0K,KAAK,CAACl7D,GAAG,CAAC,mBAAmB,EAAE,YAAY;MAC7DwwD,KAAK,CAACwJ,gBAAgB,CAACvxD,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF+nD,KAAK,CAACxwD,GAAG,CACN,UAAU,EACV,SAASm7D,kBAAkBA,CAAA,EAAG;MAC1B3K,KAAK,CAACyK,OAAO,CAAC,CAAC;IACnB,CACJ,CAAC;IAEAzK,KAAK,CAACwJ,gBAAgB,GAAG;MACrB3sC,MAAM,EAAE,SAARA,MAAMA,CAAA,EAAc;QAEhB,IAAI,IAAI,CAAC8rC,OAAO,EACZ,IAAI,CAAC1wD,IAAI,CAAC,KAAK,CAAC,CAAC,KAEjB,IAAI,CAAC+K,IAAI,CAAC,CAAC;MACnB,CAAC;MACD2lD,OAAO,EAAE,KAAK;MAEd3lD,IAAI,EAAE,SAANA,IAAIA,CAAY1L,MAAM,EAAE;QACpB,IAAI,CAAC,IAAI,CAACqxD,OAAO,EAAE;UAEf,IAAIhwC,GAAG,GAAGqnC,KAAK,CAACuD,OAAO;UACvB,OAAO5qC,GAAG,IAAI,IAAI,EAAE;YAChB,IAAIA,GAAG,CAAC0jB,cAAc,CAACotB,QAAQ,CAAC,EAAE;cAC9BzJ,KAAK,CAAC9oD,KAAK,GAAGyhB,GAAG,CAAC8wC,QAAQ,CAAC;cAC3B;YACJ;YACA9wC,GAAG,GAAGA,GAAG,CAAC4qC,OAAO;UACrB;UAEAvD,KAAK,CAAC8J,YAAY,GAAG9J,KAAK,CAAC9oD,KAAK,CAAC7F,IAAI;UACrC2uD,KAAK,CAACtrD,OAAO,GAAGmb,MAAM,CAACu6C,IAAI,CAACpK,KAAK,CAAC9oD,KAAK,CAAC7F,IAAI,CAAC;UAC7C2uD,KAAK,CAAC6J,YAAY,GAAG,CAAC;UACtB7J,KAAK,CAACiI,eAAe,GAAGpS,QAAQ,CAAC+P,EAAE,CAAC,CAAC5F,KAAK,CAAC;UAC3CA,KAAK,CAACkK,aAAa,GAAGrU,QAAQ,CAACt0C,KAAK,CAAC,CAACy+C,KAAK,CAAC;UAC5C;;UAEAA,KAAK,CAAC1tD,UAAU,CAAC,CAAC;UAClB,IAAI,CAACq2D,OAAO,GAAG,IAAI;QACvB;MACJ,CAAC;MACD1wD,IAAI,EAAE,SAANA,IAAIA,CAAA,EAAc;QACd,IAAI,IAAI,CAAC0wD,OAAO,EAAE;UACd3I,KAAK,CAACwK,UAAU,CAAC,CAAC;UAClB,IAAI,CAAC7B,OAAO,GAAG,KAAK;QACxB;MACJ;IACJ,CAAC;IAED3I,KAAK,CAACzmD,WAAW,GAAG,YAAY;MAC5B;MACAnM,UAAU,CAAC+K,UAAU,CAAC,mBAAmB,CAAC;MAC1C;IACJ,CAAC;IAED6nD,KAAK,CAAC0I,QAAQ,GAAG,YAAY;MACzB,IAAI1I,KAAK,CAAC6J,YAAY,GAAG,CAAC,EAAE;QAExB;;QAEA;;QAEA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;;QAEA;QACA;QACA;;QAEA;QACA;QACA;;QAEA;QACA;QACA;QACA;;QAEA;;QAEA,IAAI7J,KAAK,CAAC6J,YAAY,GAAG,CAAC,EAAE;UAExB,IAAIe,YAAY;UAEhB,KAAKjpD,CAAC,IAAIq+C,KAAK,CAAC8J,YAAY,EAAE;YAC1B,IAAI9J,KAAK,CAAC8J,YAAY,CAACnoD,CAAC,CAAC,CAAC06B,cAAc,CAAC,IAAI,CAAC,EAAE;cAC5CuuB,YAAY,GAAG5K,KAAK,CAAC8J,YAAY,CAACnoD,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;cACrD;YACJ,CAAC,MAAM;cACH,KAAKqO,CAAC,IAAIgwC,KAAK,CAAC8J,YAAY,CAACnoD,CAAC,CAAC,EAAE;gBAC7BipD,YAAY,GAAG5K,KAAK,CAAC8J,YAAY,CAACnoD,CAAC,CAAC,CAACqO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;gBACxD;cACJ;cACA;YACJ;UACJ;UAEAgwC,KAAK,CAAC8J,YAAY,GAAG9J,KAAK,CAAC9oD,KAAK,CAAC7F,IAAI,CAACu5D,YAAY,CAAC;UACnD5K,KAAK,CAACtrD,OAAO,GAAGmb,MAAM,CAACu6C,IAAI,CAACpK,KAAK,CAAC9oD,KAAK,CAAC7F,IAAI,CAACu5D,YAAY,CAAC,CAAC;QAC/D,CAAC,MAAM;UAEH5K,KAAK,CAAC8J,YAAY,GAAG9J,KAAK,CAAC9oD,KAAK,CAAC7F,IAAI;UACrC2uD,KAAK,CAACtrD,OAAO,GAAGmb,MAAM,CAACu6C,IAAI,CAACpK,KAAK,CAAC9oD,KAAK,CAAC7F,IAAI,CAAC;QACjD;QAEA2uD,KAAK,CAAC6J,YAAY,GAAG7J,KAAK,CAAC6J,YAAY,GAAG,CAAC;QAC3C7J,KAAK,CAACiI,eAAe,GAAGpS,QAAQ,CAAC+P,EAAE,CAAC,CAAC5F,KAAK,CAAC;QAC3CA,KAAK,CAACkK,aAAa,GAAGrU,QAAQ,CAACt0C,KAAK,CAAC,CAACy+C,KAAK,CAAC;MAEhD,CAAC,MAAM;QACHA,KAAK,CAACsJ,kBAAkB,CAAC,CAAC,CAACF,KAAK,CAAC,IAAI,EAAE9qD,SAAS,CAAC;MACrD;IACJ,CAAC;IAED,IAAIqa,GAAG,GAAGqnC,KAAK,CAACuD,OAAO;IACvB,OAAO5qC,GAAG,IAAI,IAAI,EAAE;MAChB,IAAIA,GAAG,CAAC0jB,cAAc,CAAC6qB,MAAM,CAAC,EAAE;QAC5BvuC,GAAG,CAACuuC,MAAM,CAAC,GAAGlH,KAAK,CAACwJ,gBAAgB;QACpC;MACJ;MACA7wC,GAAG,GAAGA,GAAG,CAAC4qC,OAAO;IACrB;EACJ;EAAC;AAAC;AACN,CAAC,CACA,CAAC,CACTxD,SAAS,CAAC,gBAAgB,EAAE,YAAY;EACrC,IAAI8K,YAAY,GAAG,wJAAwJ;EAE3K,OAAO;IACH/J,OAAO,EAAE,UAAU;IACnBP,IAAI,EAAE,SAANA,IAAIA,CAAYP,KAAK,EAAE8K,GAAG,EAAE7K,KAAK,EAAE9qD,IAAI,EAAE;MACrC;MACA,IAAIA,IAAI,IAAIA,IAAI,CAAC41D,WAAW,CAAClzD,KAAK,EAAE;QAEhC;QACA1C,IAAI,CAAC41D,WAAW,CAAClzD,KAAK,GAAG,UAAUmzD,UAAU,EAAE;UAC3C,OAAO71D,IAAI,CAAC81D,QAAQ,CAACD,UAAU,CAAC,IAAIH,YAAY,CAACK,IAAI,CAACF,UAAU,CAAC;QACrE,CAAC;MACL;IACJ;EACJ,CAAC;AACL,CAAC,CAAC,CACDjL,SAAS,CAAC,yBAAyB,EAAE,YAAU;EAC5C,OAAO;IACHe,OAAO,EAAG,SAAS;IACnBP,IAAI,EAAG,SAAPA,IAAIA,CAAYP,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAEc,OAAO,EAAE;MAC5CA,OAAO,CAACgK,WAAW,CAAC,OAAO,CAAC,GAAG,YAAY;QACvC,OAAO,IAAI;MACf,CAAC;IACL;EACJ,CAAC;AACL,CAAC,CAAC,CACDhL,SAAS,CAAC,gBAAgB,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,UAAU1yD,aAAa,EAAEM,QAAQ,EAAE;EAC1F,OAAO,UAAUqyD,KAAK,EAAEtvC,IAAI,EAAEuvC,KAAK,EAAE;IACjC,IAAI3oD,MAAM,GAAG,CAAC,CAAC2oD,KAAK,CAACkL,cAAc,GAAGl6D,CAAC,CAACgvD,KAAK,CAACkL,cAAc,CAAC,GAAGz6C,IAAI;IACpEve,OAAO,CAACC,GAAG,CAAC,kBAAkB,GAAG6tD,KAAK,CAACkL,cAAc,CAAC;IACtDh5D,OAAO,CAACC,GAAG,CAACkF,MAAM,CAAC;IAEnB,IAAI8zD,GAAG,GAAG,IAAI;IACd,IAAI,CAAC,CAAC16C,IAAI,CAACrf,IAAI,CAAC,CAAC,IAAI,CAAC,CAACqf,IAAI,CAACrf,IAAI,CAAC,CAAC,CAAClE,MAAM,EAAE;MACvCi+D,GAAG,GAAG16C,IAAI,CAACrf,IAAI,CAAC,CAAC,CAAClE,MAAM,CAAC8yD,KAAK,CAACkL,cAAc,CAAC;MAC9C,IAAI,OAAQC,GAAI,KAAK,UAAU,EAC3BA,GAAG,GAAG,IAAI;IAClB;IAEA16C,IAAI,CAACne,KAAK,CAAC,UAAUmc,CAAC,EAAE;MACpBvc,OAAO,CAACC,GAAG,CAAC,qBAAqB,CAAC;MAClCD,OAAO,CAACC,GAAG,CAACsc,CAAC,CAAC;MACdA,CAAC,CAACyU,cAAc,CAAC,CAAC;MAClB,IAAI,CAAC,CAACioC,GAAG,EAAE;QACPz9D,QAAQ,CAAC,YAAY;UACjBy9D,GAAG,CAAC18C,CAAC,CAAC;QACV,CAAC,EAAE,GAAG,CAAC;MACX,CAAC,MAEGpX,MAAM,CAAC/E,KAAK,CAAC,CAAC;;MAElB;MACA;MACA;IACJ,CAAC,CAAC;EACN,CAAC;AACL,CAAC,CAAC,CAAC,CACFwtD,SAAS,CAAC,kBAAkB,EAAE,YAAY;EACvC,OAAO;IACHe,OAAO,EAAE,SAAS;IAClBP,IAAI,EAAE,SAANA,IAAIA,CAAYP,KAAK,EAAE8K,GAAG,EAAE7K,KAAK,EAAEoL,WAAW,EAAE;MAE5CA,WAAW,CAACN,WAAW,CAACO,gBAAgB,GAAG,UAAUN,UAAU,EAAEO,SAAS,EAAE;QACxE,IAAIC,UAAU,GAAGvL,KAAK,CAACqL,gBAAgB;QACvC,IAAIG,YAAY,GAAGF,SAAS;QAE5B,IAAIE,YAAY,IAAID,UAAU,EAAE;UAC5B,OAAO,IAAI,CAAC,CAAC;QACjB,CAAC,MAAM;UACH,OAAO,KAAK;QAChB;MACJ,CAAC;IACL;EACJ,CAAC;AACL,CAAC,CAAC,CAACzL,SAAS,CAAC,oBAAoB,EAAE,YAAY;EAC3C,OAAO,UAAUC,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAE;IAEpCxb,OAAO,CAAC3vC,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC;IAE1C2vC,OAAO,CAACwC,IAAI,CAAC,kBAAkB,EAAE,UAAUx3C,KAAK,EAAE;MAC9C,IAAIi8D,cAAc,GAAGjnB,OAAO,CAAC3vC,IAAI,CAAC,mBAAmB,CAAC,KAAK,MAAM;MACjE3C,OAAO,CAACC,GAAG,CAAC,aAAa,GAAG3C,KAAK,CAAC4I,KAAK,CAAC;MAExC,IAAI5I,KAAK,CAAC4I,KAAK,KAAK,EAAE,EAAE;QACpBosC,OAAO,CAAC3vC,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC;MAC7C,CAAC,MACI,IAAI42D,cAAc,EAAE;QACrB,IAAIr4D,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAACmJ,OAAO,CAAC/M,KAAK,CAAC4I,KAAK,CAAC;QACzE,IAAIhF,GAAG,GAAG,CAAC,EAAE;UACToxC,OAAO,CAACtuC,GAAG,CAAC,EAAE,CAAC;QACnB;QAEAsuC,OAAO,CAAC3vC,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC;MAC9C;IACJ,CAAC,CAAC;EACN,CAAC;AACL,CAAC,CAAC,CAACirD,SAAS,CAAC,wBAAwB,EAAE,YAAY;EAC/C,OAAO,UAAUC,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAEtyD,QAAQ,EAAE;IAC9C,IAAI4G,KAAK,GAAGyrD,KAAK;IACjB,IAAI2L,GAAG,GAAG1L,KAAK,CAACc,OAAO;IACvB,IAAI52C,GAAG,GAAG61C,KAAK,CAACC,KAAK,CAAC2L,sBAAsB,CAAC;IAE7CnnB,OAAO,CAACwC,IAAI,CAAC,QAAQ,EAAE,UAAUx3C,KAAK,EAAE;MACpC0C,OAAO,CAACC,GAAG,CAAC,SAAS,CAAC;MACtB,IAAIiD,IAAI,GAAGovC,OAAO,CAAC59B,MAAM,CAAC,CAAC,CAACrI,IAAI,CAAC,+BAA+B,CAAC,CAACnJ,IAAI,CAAC,CAAC;MACxE,IAAIw2D,KAAK,GAAG1hD,GAAG,CAACjX,MAAM,CAAC,UAAUnG,EAAE,EAAE;QAAE,OAAOA,EAAE,CAACgK,IAAI,IAAI1B,IAAI;MAAE,CAAC,CAAC;MACjEd,KAAK,CAACo3D,GAAG,CAAC,GAAGE,KAAK,CAAC,CAAC,CAAC,CAACnpD,KAAK;MAC3B;IACJ,CAAC,CAAC;EACN,CAAC;AACL,CAAC,CAAC,CACDq9C,SAAS,CAAC,iBAAiB,EAAE,CAAC,UAAU,EAAE,UAAUpyD,QAAQ,EAAE;EAC3D,OAAO;IACHi0D,QAAQ,EAAE,GAAG;IACb5B,KAAK,EAAE;MACH9oD,KAAK,EAAE;IACX,CAAC;IACDqpD,IAAI,EAAEuL;EACV,CAAC;EAED,SAASA,MAAMA,CAAC9L,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAEc,OAAO,EAAE;IAE5CpzD,QAAQ,CAAC,YAAY;MACjB,IAAIkU,CAAC,GAAGm+C,KAAK,CAAC9oD,KAAK,IAAI,IAAI;MAC3ButC,OAAO,CAACsnB,eAAe,CAAC;QAAExsD,KAAK,EAAEsC;MAAE,CAAC,CAAC,CAAC,CAAC;MACvC4iC,OAAO,CAACsnB,eAAe,CAAC,OAAO,EAAElqD,CAAC,IAAI,IAAI,CAAC;MAE3C4iC,OAAO,CAAC0c,EAAE,CAAC,8BAA8B,EAAE,UAAU1xD,KAAK,EAAE8P,KAAK,EAAE;QAC/D5R,QAAQ,CAAC,YAAY;UACjBqyD,KAAK,CAAC9oD,KAAK,GAAGqI,KAAK;UACnB,IAAIysD,GAAG,GAAG/6D,CAAC,CAACwzC,OAAO,CAAC,CAAC7rB,OAAO,CAAC,MAAM,CAAC;UACpC,IAAIqzC,GAAG,GAAGxnB,OAAO,CAACub,KAAK,CAAC,CAAC;UACzB,IAAG,CAAC,CAACgM,GAAG,EAAE;YACN,IAAIl2B,CAAC,GAAGk2B,GAAG,CAACl3D,IAAI,CAAC,MAAM,CAAC;YACxB,IAAG,CAAC,CAACghC,CAAC,IAAI,OAAOm2B,GAAG,CAACn2B,CAAC,CAAC,CAAC52B,SAAU,KAAK,UAAU,EAC7C+sD,GAAG,CAACn2B,CAAC,CAAC,CAAC52B,SAAS,CAAC,CAAC;UAC1B;QACJ,CAAC,CAAC;QACF;QACA;QACA;MACJ,CAAC,CAAC;;MAEF;MACA;;MAEA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;;MAEA8gD,KAAK,CAACxwD,GAAG,CACL,UAAU,EACV,SAASm7D,kBAAkBA,CAAA,EAAG;QAC1B;MAAA,CAER,CAAC;MAED3K,KAAK,CAACnqD,MAAM,CAAC,OAAO,EAAE,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;QAChD,IAAID,QAAQ,IAAIC,QAAQ,EACpB0uC,OAAO,CAACsnB,eAAe,CAAC,OAAO,EAAEj2D,QAAQ,IAAI,IAAI,EAAE,KAAK,CAAC;MACjE,CAAC,CAAC;IACN,CAAC,CAAC;EAEN;AACJ,CAAC,CAAC,CAAC,CACFiqD,SAAS,CAAC,aAAa,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,UAAU3yD,UAAU,EAAEI,aAAa,EAAE;EAC3F,OAAO;IACHo0D,QAAQ,EAAE,GAAG;IACb5B,KAAK,EAAE;MACH9oD,KAAK,EAAE;IACX,CAAC;IACDqpD,IAAI,EAAEuL;EACV,CAAC;EAED,SAASA,MAAMA,CAAC9L,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAE;IACnCD,KAAK,CAACvvC,IAAI,GAAGuvC,KAAK;IAClBA,KAAK,CAACjzD,EAAE,GAAG03C,OAAO;IAClBub,KAAK,CAACkM,SAAS,GAAG,CAAC,CAACjM,KAAK,CAACkM,YAAY,GAAGlM,KAAK,CAACkM,YAAY,CAAC3jD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;IAC3Ew3C,KAAK,CAACoM,SAAS,GAAGnM,KAAK,CAACoM,YAAY,IAAI,MAAM;IAE9CrM,KAAK,CAAC75C,GAAG,GAAGlV,CAAC,CAACwzC,OAAO,CAAC,CAAC0c,EAAE,CAAC,kBAAkB,EAAE,UAAUh7C,GAAG,EAAE;MACzD,IAAI65C,KAAK,CAACoM,SAAS,EAAE;QACjB;QACAn7D,CAAC,CAACwzC,OAAO,CAAC,CAACjmC,IAAI,CAAC,oBAAoB,CAAC,CAACi5C,QAAQ,CAAC,6BAA6B,CAAC;MACjF;IACJ,CAAC,CAAC;IACFuI,KAAK,CAAC75C,GAAG,GAAGlV,CAAC,CAACwzC,OAAO,CAAC,CAAC0c,EAAE,CAAC,mBAAmB,EAAE,UAAUh7C,GAAG,EAAE;MAC1D/Y,UAAU,CAAC+K,UAAU,CAAC,aAAa,EAAE6nD,KAAK,CAAC9oD,KAAK,CAAC;IACrD,CAAC,CAAC;IAEF8oD,KAAK,CAAC75C,GAAG,GAAGlV,CAAC,CAACwzC,OAAO,CAAC,CAAC0c,EAAE,CAAC,oBAAoB,EAAE,UAAUh7C,GAAG,EAAE;MAC3D,IAAI65C,KAAK,CAACoM,SAAS,EAAE;QACjB;QACAn7D,CAAC,CAACwzC,OAAO,CAAC,CAACjmC,IAAI,CAAC,oBAAoB,CAAC,CAACtJ,WAAW,CAAC,6BAA6B,CAAC;MACpF;IACJ,CAAC,CAAC;IAEF8qD,KAAK,CAACxwD,GAAG,CACL,UAAU,EACV,SAASm7D,kBAAkBA,CAAA,EAAG;MAC1B3K,KAAK,CAAC75C,GAAG,CAACsS,GAAG,CAAC,CAAC;IACnB,CACJ,CAAC;IAEDunC,KAAK,CAACnqD,MAAM,CAAC,OAAO,EAAE,UAAU0iD,MAAM,EAAEC,MAAM,EAAE;MAC5C;;MAEA,IAAID,MAAM,IAAIC,MAAM,EAAE;QAElB,IAAIwH,KAAK,CAACkM,SAAS,CAAC1vD,OAAO,CAAC+7C,MAAM,CAAC,IAAI,CAAC,EAAE;UAAE;UACxCyH,KAAK,CAACjzD,EAAE,CAAC+7C,QAAQ,CAAC,MAAM,CAAC;QAC7B,CAAC,MACI;UAAE;UACHkX,KAAK,CAACjzD,EAAE,CAAC+7C,QAAQ,CAAC,MAAM,CAAC;QAC7B;MACJ;IACJ,CAAC,CAAC;EACN;AACJ,CAAC,CAAC,CAAC,CACFiX,SAAS,CAAC,cAAc,EAAE,YAAY;EACnC,OAAO;IACHe,OAAO,EAAE,SAAS;IAClBc,QAAQ,EAAE,GAAG;IACbrB,IAAI,EAAE,SAANA,IAAIA,CAAYP,KAAK,EAAEtvC,IAAI,EAAEuvC,KAAK,EAAEqM,KAAK,EAAE;MAEvC,IAAIC,OAAO,GAAG,CAAC,CAACtM,KAAK,CAACuM,YAAY,GAAGvM,KAAK,CAACuM,YAAY,GAAG,gBAAgB;MAE1ExM,KAAK,CAACxwD,GAAG,CAAC+8D,OAAO,EAAE,YAAY;QAC3BD,KAAK,CAACG,IAAI,CAACH,KAAK,CAACI,UAAU,CAAC,CAAC,CAAC;MAClC,CAAC,CAAC;IACN;EACJ,CAAC;AACL,CAAC,CAAC,CACA3M,SAAS,CAAC,eAAe,EAAE,CAAC,YAAY;EACrC,OAAO;IACH6B,QAAQ,EAAE,GAAG;IACbd,OAAO,EAAE,UAAU;IACnBd,KAAK,EAAE;MACHe,OAAO,EAAE,GAAG;MACZ4L,aAAa,EAAE;IACnB,CAAC;IACDpM,IAAI,EAAE,SAANA,IAAIA,CAAYP,KAAK,EAAEvb,OAAO,EAAE3vC,IAAI,EAAEw3D,KAAK,EAAE;MAGzCtM,KAAK,CAACnqD,MAAM,CAAC,SAAS,EAAE,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;QAElD,IAAID,QAAQ,IAAIC,QAAQ,EAAE;UACtB,IAAI62D,KAAK,GAAG,CAAC,CAAC;UACd,IAAI,CAAC,CAAC92D,QAAQ,EACV82D,KAAK,CAACC,QAAQ,GAAG/2D,QAAQ,CAAC,KAE1B82D,KAAK,CAACC,QAAQ,GAAG,IAAI;UAEzBP,KAAK,CAAC7kC,MAAM,CAACmlC,KAAK,EAAE5M,KAAK,CAAC2M,aAAa,CAAC;QAC5C;MACJ,CAAC,EAAE,IAAI,CAAC;IACZ;EACJ,CAAC;AACL,CAAC,CAAC,CAAC,CACF5M,SAAS,CAAC,gBAAgB,EAAE,CAAC,YAAY;EACtC,OAAO;IACH6B,QAAQ,EAAE,GAAG;IACbd,OAAO,EAAE,UAAU;IACnBd,KAAK,EAAE;MACH8M,cAAc,EAAE,GAAG;MACnB/rB,QAAQ,EAAE,GAAG;MACb1nB,KAAK,EAAE;IACX,CAAC;IACDknC,IAAI,EAAE,SAANA,IAAIA,CAAYP,KAAK,EAAEvb,OAAO,EAAE3vC,IAAI,EAAEw3D,KAAK,EAAE;MACzC,SAASS,MAAMA,CAACC,eAAe,EAAEzkC,IAAI,EAAE;QACnC,IAAI0kC,KAAK,GAAGjmC,IAAI,CAACo+B,KAAK,CAAC,CAAC4H,eAAe,CAACE,cAAc,GAAGlN,KAAK,CAACjf,QAAQ,GAAG,CAAC,IAAIif,KAAK,CAACjf,QAAQ,CAAC;QAE9F,IAAIxY,IAAI,GAAG,CAAC,IAAIA,IAAI,IAAI0kC,KAAK,EAAE;UAC3BX,KAAK,CAACz1D,KAAK,CAAC,CAAC0xB,IAAI,GAAG,CAAC,IAAIy3B,KAAK,CAACjf,QAAQ,EAAEif,KAAK,CAACjf,QAAQ,CAAC;QAC5D,CAAC,MACI;UACDurB,KAAK,CAACz1D,KAAK,CAAC,CAAC,EAAEmpD,KAAK,CAACjf,QAAQ,CAAC;QAClC;MACJ;MAAC;MAED,IAAIwrB,OAAO,GAAG,CAAC,CAACz3D,IAAI,CAACq4D,aAAa,GAAGr4D,IAAI,CAACq4D,aAAa,GAAG,eAAe;MAEzEnN,KAAK,CAACxwD,GAAG,CAAC+8D,OAAO,EAAE,YAAY;QAC3B,IAAIS,eAAe,GAAGV,KAAK,CAACI,UAAU,CAAC,CAAC,CAACU,UAAU;QACnDpN,KAAK,CAAC3mC,KAAK,GAAG2zC,eAAe,CAACE,cAAc;QAE5CH,MAAM,CAACC,eAAe,EAAEhN,KAAK,CAAC8M,cAAc,CAAC;MACjD,CAAC,CAAC;MAEF9M,KAAK,CAACnqD,MAAM,CAAC,gBAAgB,EAAE,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;QAEzD,IAAID,QAAQ,IAAIC,QAAQ,EAAE;UACtB,IAAIi3D,eAAe,GAAGV,KAAK,CAACI,UAAU,CAAC,CAAC,CAACU,UAAU;UACnDpN,KAAK,CAAC3mC,KAAK,GAAG2zC,eAAe,CAACE,cAAc;UAE5CH,MAAM,CAACC,eAAe,EAAEhN,KAAK,CAAC8M,cAAc,CAAC;QACjD;MACJ,CAAC,EAAE,IAAI,CAAC;IAEZ;EACJ,CAAC;AACL,CAAC,CAAC,CAAC,CACH/M,SAAS,CAAC,eAAe,EAAE,CAAC,WAAW,EAAE,UAAUryD,SAAS,EAAE;EAC3D,OAAO,UAAUsyD,KAAK,EAAEtvC,IAAI,EAAEuvC,KAAK,EAAE7yD,UAAU,EAAE;IAE7C4yD,KAAK,CAAC75C,GAAG,GAAG65C,KAAK,CAAC0K,KAAK,CAACl7D,GAAG,CAAC,YAAY,EAAE,UAAU2W,GAAG,EAAE;MACrDlV,CAAC,CAACyf,IAAI,CAAC,CAACxb,WAAW,CAAC,QAAQ,CAAC;IACjC,CAAC,CAAC;IAEF8qD,KAAK,CAACxwD,GAAG,CACL,UAAU,EACV,SAASm7D,kBAAkBA,CAAA,EAAG;MAC1B,IAAI,OAAQ3K,KAAK,CAAC75C,GAAI,IAAI,UAAU,EAChC65C,KAAK,CAAC75C,GAAG,CAAC,CAAC;IACnB,CACJ,CAAC;EACL,CAAC;AACL,CAAC,CAAC,CAAC,CACF45C,SAAS,CAAC,eAAe,EAAE,CAAC,WAAW,EAAC,UAAU,EAAC,QAAQ,EAAC,UAAU/oC,SAAS,EAACrpB,QAAQ,EAAC0/D,MAAM,EAAE;EAC9F,OAAO,UAAUrN,KAAK,EAAEtvC,IAAI,EAAEuvC,KAAK,EAAE;IACjCD,KAAK,CAACsN,YAAY,GAAG,KAAK;IAC1BtN,KAAK,CAACuN,WAAW,GAAG,KAAK;IACzBvN,KAAK,CAACwN,UAAU,GAAG,IAAI;IAEvB98C,IAAI,CAACu2B,IAAI,CAAC,YAAY,EAAE,UAAUv4B,CAAC,EAAE;MACjCsxC,KAAK,CAACuN,WAAW,GAAG,KAAK;MACzB/gE,MAAM,CAAC0pB,kBAAkB,GAAGzI,QAAQ,CAACkzC,aAAa;MAClD;MACA;MACA;IACJ,CAAC,CAAC;IAEFjwC,IAAI,CAACu2B,IAAI,CAAC,WAAW,EAAE,UAAUv4B,CAAC,EAAE;MAChCsxC,KAAK,CAACuN,WAAW,GAAG,IAAI;MAExB,IAAGvN,KAAK,CAACwN,UAAU,KAAK,IAAI,EACxBxN,KAAK,CAACwN,UAAU,GAAG9+C,CAAC,CAAC++C,SAAS;MAClC;MACA;MACA;IACJ,CAAC,CAAC;IAEF/8C,IAAI,CAACu2B,IAAI,CAAC,gBAAgB,EAAE,UAAUv4B,CAAC,EAAE;MACrC,IAAIA,CAAC,CAACg/C,UAAU,IAAI,IAAI,EAAE;QACtBh/C,CAAC,CAACyU,cAAc,CAAC,CAAC;QAClBzU,CAAC,CAACwU,eAAe,CAAC,CAAC;MACvB;MAEA,IAAG88B,KAAK,CAACuN,WAAW,IAAI7+C,CAAC,CAAC++C,SAAS,GAAGzN,KAAK,CAACwN,UAAU,GAAG,EAAE,EAAC;QACxDxN,KAAK,CAACuN,WAAW,GAAG,KAAK;MAC7B;MACAvN,KAAK,CAACwN,UAAU,GAAG,IAAI;MAEvB,IAAItqC,eAAe,GAAGjyB,CAAC,CAACyd,CAAC,CAACpX,MAAM,CAAC,CAACxC,IAAI,CAAC,iBAAiB,CAAC,KAAK,MAAM;MAGpE,IAAI64D,UAAU,GAAG18D,CAAC,CAACyd,CAAC,CAACk/C,aAAa,CAAC,CAACr9C,EAAE,CAAC,WAAW,CAAC;MACnD,IAAIo9C,UAAU,IAAI,IAAI,IAAI,CAACzqC,eAAe,EAAE;QACxC,IAAI2qC,EAAE,GAAGR,MAAM,CAACpN,KAAK,CAAC,eAAe,CAAC,CAAC;QAEvC,IAAIvxC,CAAC,CAACjT,IAAI,IAAI,UAAU,EAAE;UAEtB,IAAIukD,KAAK,CAACuN,WAAW,IAAI,KAAK,EAAE;YAC5BvN,KAAK,CAACsN,YAAY,GAAG,IAAI;YACzB3/D,QAAQ,CAAC,YAAY;cAEjBqyD,KAAK,CAACM,MAAM,CAAC,YAAW;gBACpBuN,EAAE,CAAC7N,KAAK,EAAE;kBAAC8N,MAAM,EAACp/C;gBAAC,CAAC,CAAC;cACzB,CAAC,CAAC;cAEF,IAAI+0B,IAAI,GAAGwc,KAAK,CAAC,MAAM,CAAC;cACxB,IAAIxc,IAAI,IAAIA,IAAI,IAAG,cAAc,EAAC;gBAC9BzsB,SAAS,CAACiD,IAAI,CAACwpB,IAAI,CAAC32B,OAAO,CAAC,GAAG,EAAC,GAAG,CAAC,CAAC;cACzC;YACJ,CAAC,EAAC,CAAC,CAAC;UACR;UAEAkzC,KAAK,CAACuN,WAAW,GAAG,KAAK;QAC7B,CAAC,MAAM,IAAI7+C,CAAC,CAACjT,IAAI,IAAI,OAAO,EAAE;UAC1B;UACA,IAAIukD,KAAK,CAACsN,YAAY,KAAK,IAAI,EAAE;YAC7B3/D,QAAQ,CAAC,YAAY;cACjBqyD,KAAK,CAACM,MAAM,CAAC,YAAW;gBACpBuN,EAAE,CAAC7N,KAAK,EAAE;kBAAC8N,MAAM,EAACp/C;gBAAC,CAAC,CAAC;cACzB,CAAC,CAAC;cACF,IAAI+0B,IAAI,GAAGwc,KAAK,CAAC,MAAM,CAAC;cACxB,IAAIxc,IAAI,IAAIA,IAAI,IAAI,cAAc,EAAC;gBAE3BzsB,SAAS,CAACiD,IAAI,CAACwpB,IAAI,CAAC32B,OAAO,CAAC,GAAG,EAAC,GAAG,CAAC,CAAC;cAE7C;YACJ,CAAC,EAAC,CAAC,CAAC;UACR;UAEAkzC,KAAK,CAACsN,YAAY,GAAG,KAAK;QAC9B;MACJ;MAEA,IAAI5+C,CAAC,CAACg/C,UAAU,IAAI,IAAI,EAAE;QACtB,OAAO,KAAK;MAChB,CAAC,MACI;QACD,OAAO,IAAI;MACf;IACJ,CAAC,CAAC;EACN,CAAC;AACL,CAAC,CAAC,CAAC,CACF3N,SAAS,CAAC,gBAAgB,EAAE,CAAC,YAAY,EAAE,UAAU3yD,UAAU,EAAE;EAC9D,OAAO,UAAU4yD,KAAK,EAAEtvC,IAAI,EAAEuvC,KAAK,EAAE;IACjCD,KAAK,CAAC+N,WAAW,GAAG,oBAAoB;IACxC/N,KAAK,CAACgO,IAAI,GAAG5gE,UAAU;IACvB4yD,KAAK,CAACiO,SAAS,GAAG,YAAY;MAC1BjO,KAAK,CAACgO,IAAI,CAAC71D,UAAU,CAAC6nD,KAAK,CAAC+N,WAAW,EAAE;QACrCtpB,OAAO,EAAE/zB;MACb,CAAC,CAAC;IACN,CAAC;IAEDA,IAAI,CAACw9C,MAAM,CAAClO,KAAK,CAACiO,SAAS,CAAC;IAE5BjO,KAAK,CAACxwD,GAAG,CAAC,UAAU,EAAE,SAASm7D,kBAAkBA,CAAA,EAAG;MAChDj6C,IAAI,CAACy9C,YAAY,CAACnO,KAAK,CAACiO,SAAS,CAAC;IACtC,CAAC,CAAC;EACN,CAAC;AACL,CAAC,CAAC,CAAC,CACFlO,SAAS,CAAC,sBAAsB,EAC7B,CAAC,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,cAAc,EAC1F,UAAU5oC,OAAO,EAAE3pB,aAAa,EAAEH,aAAa,EAAEM,QAAQ,EAAEC,cAAc,EAAEN,YAAY,EAAE;EACrF,IAAIyyD,SAAS,GAAG;IACZQ,IAAI,EAAEA,IAAI;IACVyC,UAAU,EAAE,IAAI;IAChBpB,QAAQ,EAAE,GAAG;IACbqB,WAAW,EAAEtD,6DAAiB;IAC9BK,KAAK,EAAE;MACHoO,QAAQ,EAAE,WAAW;MACrBC,MAAM,EAAE,SAAS;MACjBC,SAAS,EAAE,YAAY;MACvBjV,oBAAoB,EAAE;IAC1B;EACJ,CAAC;EAED,OAAO0G,SAAS;EAEhB,SAASQ,IAAIA,CAACP,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAE;IAEjCD,KAAK,CAAC78C,OAAO,GAAG;MACZorD,iBAAiB,EAAE,IAAI;MACvBC,QAAQ,EAAExO,KAAK,CAACoO,QAAQ;MACxBK,MAAM,EAAEzO,KAAK,CAACqO;IAClB,CAAC;IACLrO,KAAK,CAAC0O,UAAU,GAAG,KAAK;IACxB,IAAGzO,KAAK,CAACyO,UAAU,KAAK,MAAM,EAAE;MAC5B1O,KAAK,CAAC0O,UAAU,GAAG,IAAI;IAC3B;IAGI,SAASC,wBAAwBA,CAAA,EAAG;MAChC3O,KAAK,CAAC4O,kBAAkB,GAAG3O,KAAK,CAAC4O,iBAAiB,KAAK,MAAM,KAAK,OAAQ7O,KAAK,CAAC78C,OAAO,CAACsrD,MAAO,KAAK,WAAW,IAAI,OAAQzO,KAAK,CAAC78C,OAAO,CAACqrD,QAAS,KAAK,WAAW,CAAC;IACvK;IAEAG,wBAAwB,CAAC,CAAC;IAE1B3O,KAAK,CAACv6C,UAAU,GAAGjY,aAAa,CAAC4yB,wBAAwB,CAAC,CAAC;IAE3D4/B,KAAK,CAAC8O,6BAA6B,GAAG,YAAY;MAClD,IAAIt4D,GAAG;MAEP,IAAIypD,KAAK,CAAC8O,YAAY,KAAK,MAAM,EAAE;QAC/Bv4D,GAAG,GAAG,CACF;UACI3G,IAAI,EAAEjC,cAAc,CAACe,SAAS,CAAC,OAAO,CAAC;UACvCqgE,IAAI,EAAE,OAAO;UACbR,QAAQ,EAAEvwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAAC9H,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU,CAAC;UAC/CgpD,MAAM,EAAExwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAAC9H,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU;QAChD,CAAC,EACD;UACI5V,IAAI,EAAEjC,cAAc,CAACe,SAAS,CAAC,WAAW,CAAC;UAC3CqgE,IAAI,EAAE,WAAW;UACjBR,QAAQ,EAAEvwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACksB,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAACh0B,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU,CAAC;UAC5DgpD,MAAM,EAAExwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACksB,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAACh0B,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU;QAC7D,CAAC,EACD;UACI5V,IAAI,EAAEjC,cAAc,CAACe,SAAS,CAAC,aAAa,CAAC;UAC7CqgE,IAAI,EAAE,aAAa;UACnBR,QAAQ,EAAEvwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAAC9H,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU,CAAC;UAC/CgpD,MAAM,EAAExwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACksB,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAACh0B,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU;QAC5D,CAAC,EACD;UACI5V,IAAI,EAAEjC,cAAc,CAACe,SAAS,CAAC,aAAa,CAAC;UAC7CqgE,IAAI,EAAE,aAAa;UACnBR,QAAQ,EAAEvwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACksB,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAACh0B,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU,CAAC;UAC5DgpD,MAAM,EAAExwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAAC9H,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU;QAChD,CAAC,EACD;UACI5V,IAAI,EAAEjC,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC;UAC9CqgE,IAAI,EAAE,cAAc;UACpBR,QAAQ,EAAEvwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAAC9H,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU,CAAC;UAC/CgpD,MAAM,EAAExwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACksB,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAACh0B,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU;QAC7D,CAAC,EACD;UACI5V,IAAI,EAAEjC,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC;UAC9CqgE,IAAI,EAAE,cAAc;UACpBR,QAAQ,EAAEvwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACksB,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAACh0B,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU,CAAC;UAC7DgpD,MAAM,EAAExwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAAC9H,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU;QAChD,CAAC,CACJ;MACL,CAAC,MAAM;QACHjP,GAAG,GAAG,CACF;UACI3G,IAAI,EAAEjC,cAAc,CAACe,SAAS,CAAC,OAAO,CAAC;UACvCqgE,IAAI,EAAE,OAAO;UACbR,QAAQ,EAAEvwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAAC9H,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU,CAAC;UAC/CgpD,MAAM,EAAExwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAAC9H,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU;QAChD,CAAC,EACD;UACI5V,IAAI,EAAEjC,cAAc,CAACe,SAAS,CAAC,WAAW,CAAC;UAC3CqgE,IAAI,EAAE,WAAW;UACjBR,QAAQ,EAAEvwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACksB,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAACh0B,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU,CAAC;UAC5DgpD,MAAM,EAAExwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACksB,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAACh0B,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU;QAC7D,CAAC,EACD;UACI5V,IAAI,EAAEjC,cAAc,CAACe,SAAS,CAAC,aAAa,CAAC;UAC7CqgE,IAAI,EAAE,aAAa;UACnBR,QAAQ,EAAEvwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACksB,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAACh0B,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU,CAAC;UAC5DgpD,MAAM,EAAExwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAAC9H,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU;QAChD,CAAC,EACD;UACI5V,IAAI,EAAEjC,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC;UAC9CqgE,IAAI,EAAE,cAAc;UACpBR,QAAQ,EAAEvwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACksB,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAACh0B,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU,CAAC;UAC7DgpD,MAAM,EAAExwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAAC9H,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU;QAChD,CAAC,EACD;UACI5V,IAAI,EAAEjC,cAAc,CAACe,SAAS,CAAC,YAAY,CAAC;UAC5CqgE,IAAI,EAAE,YAAY;UAClBR,QAAQ,EAAEvwC,MAAM,CAAC,CAAC,CAACgxC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAACtV,IAAI,CAAC,CAAC,CAAC,CAACvjC,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU,CAAC;UACxEgpD,MAAM,EAAExwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACy7B,IAAI,CAAC,CAAC,CAAC,CAACsV,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC74C,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU;QAC3E,CAAC,EACD;UACI5V,IAAI,EAAEjC,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC;UAC9CqgE,IAAI,EAAE,cAAc;UACpBR,QAAQ,EAAEvwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACksB,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAACh0B,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU,CAAC;UAC7DgpD,MAAM,EAAExwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAAC9H,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU;QAChD,CAAC,EACD;UACI5V,IAAI,EAAEjC,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC;UAC9CqgE,IAAI,EAAE,cAAc;UACpBR,QAAQ,EAAEvwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACgxC,KAAK,CAACjxC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACgxC,KAAK,CAAC,CAAC,GAAIjxC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACgxC,KAAK,CAAC,CAAC,GAAG,CAAE,CAAC,CAACD,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAACtV,IAAI,CAAC,CAAC,CAAC,CAACvjC,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU,CAAC;UACrIgpD,MAAM,EAAExwC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACgxC,KAAK,CAACjxC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACgxC,KAAK,CAAC,CAAC,GAAIjxC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACgxC,KAAK,CAAC,CAAC,GAAG,CAAE,CAAC,CAACvV,IAAI,CAAC,CAAC,CAAC,CAACsV,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC74C,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU;QACpI,CAAC,EACD;UACI5V,IAAI,EAAEjC,cAAc,CAACe,SAAS,CAAC,qBAAqB,CAAC;UACrDqgE,IAAI,EAAE,qBAAqB;UAC3BR,QAAQ,EAAEvwC,MAAM,CAAC,CAAC,CAACkxC,IAAI,CAAClxC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACixC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAACD,KAAK,CAAC,CAAC,CAAC,CAACvV,IAAI,CAAC,CAAC,CAAC,CAACvjC,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU,CAAC;UAC1FgpD,MAAM,EAAExwC,MAAM,CAAC,CAAC,CAACkxC,IAAI,CAAClxC,MAAM,CAACC,GAAG,CAAC,CAAC,CAACixC,IAAI,CAAC,CAAC,CAAC,CAACD,KAAK,CAAC,CAAC,CAAC,CAACvV,IAAI,CAAC,CAAC,CAAC,CAACsV,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC74C,MAAM,CAAC4pC,KAAK,CAACv6C,UAAU;QAC1G,CAAC,CACJ;MACL;MAEI,IAAGu6C,KAAK,CAACsO,SAAS,EAAE;QAChB,IAAIc,IAAI,GAAG,EAAE;QAEb,IAAI/7D,GAAG,GAAG,CAAC;QAEX,OAAMA,GAAG,GAACmD,GAAG,CAACjD,MAAM,EAAE;UAClB67D,IAAI,CAAC57D,IAAI,CAACgD,GAAG,CAACnD,GAAG,CAAC,CAAC;UAEnB,IAAGmD,GAAG,CAACnD,GAAG,CAAC,CAAC27D,IAAI,IAAIhP,KAAK,CAACsO,SAAS,EACnC;UAEJj7D,GAAG,EAAE;QACL;QAEAmD,GAAG,GAAG44D,IAAI;MACd;MAEA,OAAO54D,GAAG;IACd,CAAC;IAEDwpD,KAAK,CAACxwD,GAAG,CAAC,gBAAgB,EAAE,UAAUC,KAAK,EAAE;MACzCuwD,KAAK,CAACqP,UAAU,GAAGrP,KAAK,CAAC8O,6BAA6B,CAAC,CAAC;IAC5D,CAAC,CAAC;IAEFnhE,QAAQ,CAAC,YAAY;MACjB,IAAIqwD,gBAAgB,GAAGxwD,aAAa,CAACkY,6BAA6B,CAAC,CAAC;MACpElY,aAAa,CAAC0wD,aAAa,CAACF,gBAAgB,EAAE,qBAAqB,EAAE,mBAAmB,CAAC;MACzFxwD,aAAa,CAAC0wD,aAAa,CAACF,gBAAgB,EAAE,mBAAmB,EAAE,mBAAmB,CAAC;IAC3F,CAAC,CAAC;IAEFgC,KAAK,CAACqP,UAAU,GAAGrP,KAAK,CAAC8O,6BAA6B,CAAC,CAAC;IAExD9O,KAAK,CAACsP,gBAAgB,GAAG,YAAY;MACjCr+D,CAAC,CAAC,gBAAgB,CAAC,CAAC+R,IAAI,CAAC,CAAC;MAC1B/R,CAAC,CAAC,yBAAyB,CAAC,CAACgH,IAAI,CAAC,CAAC;MACnChH,CAAC,CAAC,yBAAyB,CAAC,CAACsZ,GAAG,CAAC;QAAE,SAAS,EAAE;MAAO,CAAC,CAAC;IAC3D,CAAC;IAEDy1C,KAAK,CAACuP,YAAY,GAAG,UAAU1L,KAAK,EAAE;MAClC7D,KAAK,CAAC78C,OAAO,CAACqrD,QAAQ,GAAG3K,KAAK,CAAC2K,QAAQ;MACvCxO,KAAK,CAAC78C,OAAO,CAACsrD,MAAM,GAAG5K,KAAK,CAAC4K,MAAM;IACvC,CAAC;IAEDzO,KAAK,CAACwP,gBAAgB,GAAG,UAAUC,QAAQ,EAAE;MACzC,IAAI,CAACA,QAAQ,EAAE;QACXzP,KAAK,CAAC78C,OAAO,CAACqrD,QAAQ,GAAGxO,KAAK,CAACoO,QAAQ;QACvCpO,KAAK,CAAC78C,OAAO,CAACsrD,MAAM,GAAGzO,KAAK,CAACqO,MAAM;MACvC;MACAp9D,CAAC,CAAC,gBAAgB,CAAC,CAACgH,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED+nD,KAAK,CAACnqD,MAAM,CAAC,QAAQ,EACjB,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;MAC1BiqD,KAAK,CAAC78C,OAAO,CAACsrD,MAAM,GAAG34D,QAAQ;MAE/B45D,0BAA0B,CAAC,CAAC;IAChC,CACJ,CAAC;IAED1P,KAAK,CAACnqD,MAAM,CAAC,UAAU,EACnB,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;MAC1BiqD,KAAK,CAAC78C,OAAO,CAACqrD,QAAQ,GAAG14D,QAAQ;MAEjC45D,0BAA0B,CAAC,CAAC;IAChC,CACJ,CAAC;IAED1P,KAAK,CAACnqD,MAAM,CAAC,kBAAkB,EAC3B,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;MAC1B44D,wBAAwB,CAAC,CAAC;IAC9B,CACJ,CAAC;IAED3O,KAAK,CAACnqD,MAAM,CAAC,gBAAgB,EACzB,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;MAC1B44D,wBAAwB,CAAC,CAAC;IAC9B,CACJ,CAAC;IAED,SAASe,0BAA0BA,CAAA,EAAG;MAClC,IAAI1P,KAAK,CAAC78C,OAAO,CAACqrD,QAAQ,IAAIxO,KAAK,CAAC78C,OAAO,CAACsrD,MAAM,EAC9CzO,KAAK,CAAC78C,OAAO,CAACorD,iBAAiB,GAAGtwC,MAAM,CAAC+hC,KAAK,CAAC78C,OAAO,CAACqrD,QAAQ,EAAExO,KAAK,CAACv6C,UAAU,CAAC,CAAC2Q,MAAM,CAAC,QAAQ,CAAC,GACjG,KAAK,GAAG6H,MAAM,CAAC+hC,KAAK,CAAC78C,OAAO,CAACsrD,MAAM,EAAEzO,KAAK,CAACv6C,UAAU,CAAC,CAAC2Q,MAAM,CAAC,QAAQ,CAAC,CAAC,KACzE,IAAI4pC,KAAK,CAAC78C,OAAO,CAACsrD,MAAM,EACzBzO,KAAK,CAAC78C,OAAO,CAACorD,iBAAiB,GAAG,KAAK,GAAGtwC,MAAM,CAAC+hC,KAAK,CAAC78C,OAAO,CAACsrD,MAAM,EAAEzO,KAAK,CAACv6C,UAAU,CAAC,CAAC2Q,MAAM,CAAC,QAAQ,CAAC,CAAC,KACzG,IAAI4pC,KAAK,CAAC78C,OAAO,CAACqrD,QAAQ,EAC3BxO,KAAK,CAAC78C,OAAO,CAACorD,iBAAiB,GAAG,OAAO,GAAGtwC,MAAM,CAAC+hC,KAAK,CAAC78C,OAAO,CAACqrD,QAAQ,EAAExO,KAAK,CAACv6C,UAAU,CAAC,CAAC2Q,MAAM,CAAC,QAAQ,CAAC,CAAC,KAE9G4pC,KAAK,CAAC78C,OAAO,CAACorD,iBAAiB,GAAG,IAAI;IAC9C;IAEAvO,KAAK,CAACoJ,KAAK,GAAG,YAAY;MAC1B,IAAGpJ,KAAK,CAACsO,SAAS,EAAE;QAChB;QACA,IAAGtO,KAAK,CAACsO,SAAS,IAAI,YAAY,EAAE;UAChC,IAAIqB,IAAI,GAAGx+C,QAAQ,CAAC,CAAC8M,MAAM,CAAC+hC,KAAK,CAAC78C,OAAO,CAACsrD,MAAM,EAAEzO,KAAK,CAACv6C,UAAU,CAAC,GAACwY,MAAM,CAAC+hC,KAAK,CAAC78C,OAAO,CAACqrD,QAAQ,EAAExO,KAAK,CAACv6C,UAAU,CAAC,KAAG,EAAE,GAAC,IAAI,GAAC,IAAI,CAAC,CAAC;UACrI,IAAGkqD,IAAI,GAAC,EAAE,EAAE;YACRriE,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,yCAAyC,CAAC,CAAC;YAC3F;UACJ;QACJ;MACJ;MAEIhB,QAAQ,CAAC,YAAY;QACjBqyD,KAAK,CAACoO,QAAQ,GAAGpO,KAAK,CAAC78C,OAAO,CAACqrD,QAAQ;QACvCxO,KAAK,CAACqO,MAAM,GAAGrO,KAAK,CAAC78C,OAAO,CAACsrD,MAAM;QACnCzO,KAAK,CAAC3G,oBAAoB,CAAC;UAAEhiD,IAAI,EAAE2oD,KAAK,CAACoO,QAAQ;UAAE9U,EAAE,EAAE0G,KAAK,CAACqO;QAAO,CAAC,CAAC;MAC1E,CAAC,CAAC;MACFrO,KAAK,CAACwP,gBAAgB,CAAC,IAAI,CAAC;IAChC,CAAC;IAGDxP,KAAK,CAAC4P,KAAK,GAAG,YAAW;MACzBjiE,QAAQ,CAAC,YAAU;QACfqyD,KAAK,CAACoO,QAAQ,GAAG,IAAI;QACrBpO,KAAK,CAACqO,MAAM,GAAG,IAAI;QACnBrO,KAAK,CAAC3G,oBAAoB,CAAC;UAAChiD,IAAI,EAAE2oD,KAAK,CAACoO,QAAQ;UAAE9U,EAAE,EAAE0G,KAAK,CAACqO;QAAM,CAAC,CAAC;MACxE,CAAC,CAAC;MACFrO,KAAK,CAACwP,gBAAgB,CAAC,IAAI,CAAC;IAC5B,CAAC;IAEDxP,KAAK,CAAC6P,UAAU,GAAG,KAAK;IAExB7P,KAAK,CAAC8P,aAAa,GAAG,UAASC,MAAM,EAAE;MACvC/P,KAAK,CAAC6P,UAAU,GAAG,IAAI;IACvB,CAAC;EACL;EAAC;AAAC;AACN,CAAC,CACJ,CAAC,CACD9P,SAAS,CAAC,gBAAgB,EAAE,CAAC,eAAe,EAAC,UAAUvyD,aAAa,EAAE;EACnE,OAAO,UAAUwyD,KAAK,EAAEtvC,IAAI,EAAEuvC,KAAK,EAAE;IACjCD,KAAK,CAACsN,YAAY,GAAG,KAAK;IAE1B,IAAIvgE,EAAE,GAAG2jB,IAAI;IAEbA,IAAI,CAAClS,IAAI,CAAC,0BAA0B,CAAC,CAACyoC,IAAI,CAAC,gBAAgB,EAAE,UAAUv4B,CAAC,EAAE;MACtEA,CAAC,CAACyU,cAAc,CAAC,CAAC;MAClBzU,CAAC,CAACwU,eAAe,CAAC,CAAC;MAEnB,IAAIxU,CAAC,CAACjT,IAAI,IAAI,UAAU,EAAE;QACtBukD,KAAK,CAACsN,YAAY,GAAG,IAAI;QACzB58C,IAAI,CAACs/C,WAAW,CAAC,MAAM,CAAC;MAC5B,CAAC,MAAM,IAAIthD,CAAC,CAACjT,IAAI,IAAI,OAAO,EAAE;QAC1B;QACA,IAAIukD,KAAK,CAACsN,YAAY,KAAK,IAAI,EAAE;UAC7B58C,IAAI,CAACs/C,WAAW,CAAC,MAAM,CAAC;QAC5B;QAEAhQ,KAAK,CAACsN,YAAY,GAAG,KAAK;MAC9B;MAEA2C,mBAAmB,CAAC,CAAC;MAErB,OAAO,KAAK;IAChB,CAAC,CAAC;IAEFv/C,IAAI,CAAClS,IAAI,CAAC,2CAA2C,CAAC,CAACyoC,IAAI,CAAC,gBAAgB,EAAE,UAAUv4B,CAAC,EAAE;MACvFyxC,UAAU,CAAC,YAAU;QACjBzxC,CAAC,CAACyU,cAAc,CAAC,CAAC;QAClBzU,CAAC,CAACwU,eAAe,CAAC,CAAC;QAEnB,IAAIxU,CAAC,CAACjT,IAAI,IAAI,UAAU,EAAE;UACtBukD,KAAK,CAACsN,YAAY,GAAG,IAAI;UACzB58C,IAAI,CAACxb,WAAW,CAAC,MAAM,CAAC;QAC5B,CAAC,MAAM,IAAIwZ,CAAC,CAACjT,IAAI,IAAI,OAAO,EAAE;UAC1B;UACA,IAAIukD,KAAK,CAACsN,YAAY,KAAK,IAAI,EAAE;YAC7B58C,IAAI,CAACxb,WAAW,CAAC,MAAM,CAAC;UAC5B;UAEA8qD,KAAK,CAACsN,YAAY,GAAG,KAAK;QAC9B;QAEA,OAAO,KAAK;MAChB,CAAC,EAAE,CAAC,CAAC;IAET,CAAC,CAAC;IAEF58C,IAAI,CAAClS,IAAI,CAAC,2BAA2B,CAAC,CAACyoC,IAAI,CAAC,gBAAgB,EAAE,UAAUv4B,CAAC,EAAE;MACvEyxC,UAAU,CAAC,YAAU;QACjBzxC,CAAC,CAACyU,cAAc,CAAC,CAAC;QAClBzU,CAAC,CAACwU,eAAe,CAAC,CAAC;QACnB,OAAO,KAAK;MAChB,CAAC,EAAE,CAAC,CAAC;IACT,CAAC,CAAC;IAEF,SAAS+sC,mBAAmBA,CAAA,EAAG;MAC3B99D,OAAO,CAACC,GAAG,CAAC,uBAAuB,CAAC;MACpC;MACA,IAAI89D,QAAQ,GAAGj/D,CAAC,CAAC,mBAAmB,EAAElE,EAAE,CAAC;MACzC,IAAIojE,eAAe,GAAGl/D,CAAC,CAAC,2BAA2B,EAAElE,EAAE,CAAC;MACxD,IAAIqjE,UAAU,GAAGF,QAAQ,CAACx3C,MAAM,CAAC,CAAC,CAACK,GAAG;MACtC,IAAIs3C,aAAa,GAAGF,eAAe,CAAC5O,WAAW,CAAC,CAAC;MACjD,IAAI+O,YAAY,GAAG9jE,MAAM,CAAC+C,WAAW;MACrC,IAAIghE,YAAY,GAAG,CAAC;MAEpB,IAAIF,aAAa,GAAGD,UAAU,GAAGE,YAAY,EAAE;QAC3CJ,QAAQ,CAAC3O,WAAW,CAAC+O,YAAY,GAAGF,UAAU,GAAGG,YAAY,CAAC;MAClE,CAAC,MACI;QACDL,QAAQ,CAAC3lD,GAAG,CAAC,QAAQ,EAAC,EAAE,CAAC;MAC7B;IACJ;IAEAy1C,KAAK,CAACwQ,IAAI,GAAGv/D,CAAC,CAACzE,MAAM,CAAC,CAAC20D,EAAE,CAAC,QAAQ,EAAE8O,mBAAmB,CAAC;EAC5D,CAAC;AACL,CAAC,CAAC,CAAC,CACFlQ,SAAS,CAAC,YAAY,EAAE,CAAC,YAAY;EAClC,OAAO,UAAUC,KAAK,EAAEtvC,IAAI,EAAEuvC,KAAK,EAAE;IAEjC,IAAIlzD,EAAE,GAAG2jB,IAAI;IAEbsvC,KAAK,CAACwQ,IAAI,GAAGzjE,EAAE,CAACo0D,EAAE,CAAC,OAAO,EAAE,YAAY;MACtC;MACE,IAAI30D,MAAM,CAACikE,YAAY,KAAK,IAAI,EAC5B1jE,EAAE,CAAC,CAAC,CAAC,CAACwc,QAAQ,GAAG,IAAI;IAC7B,CAAC,CAAC;IAEFy2C,KAAK,CAAC0Q,IAAI,GAAG3jE,EAAE,CAACo0D,EAAE,CAAC,SAAS,EAAE,YAAY;MACzC;MACGhB,UAAU,CAAC,YAAY;QACnBpzD,EAAE,CAAC,CAAC,CAAC,CAACwc,QAAQ,GAAG,KAAK;QACtB/c,MAAM,CAACikE,YAAY,GAAG,KAAK;MAC/B,CAAC,EAAE,EAAE,CAAC;IACV,CAAC,CAAC;IAEFzQ,KAAK,CAAC2Q,IAAI,GAAG5jE,EAAE,CAACo0D,EAAE,CAAC,OAAO,EAAE,YAAY;MACvC;MACGp0D,EAAE,CAAC,CAAC,CAAC,CAACwc,QAAQ,GAAG,KAAK;IAC1B,CAAC,CAAC;;IAEF;IACA;IACA;IACA;IACA;IACA;;IAEAy2C,KAAK,CAACxwD,GAAG,CACL,UAAU,EACV,SAASm7D,kBAAkBA,CAAA,EAAG;MAC1B3K,KAAK,CAACwQ,IAAI,CAAC/3C,GAAG,CAAC,CAAC;MAChBunC,KAAK,CAAC0Q,IAAI,CAACj4C,GAAG,CAAC,CAAC;MAChB,IAAI,OAAOunC,KAAK,CAAC2Q,IAAI,CAACl4C,GAAI,KAAK,UAAU,EACrCunC,KAAK,CAAC2Q,IAAI,CAACl4C,GAAG,CAAC,CAAC;IACxB,CACJ,CAAC;EACL,CAAC;AACL,CAAC,CAAC,CAAC,CACFsnC,SAAS,CAAC,aAAa,EAAE,CAAC,UAAU,EAAE,UAAUpyD,QAAQ,EAAE;EACvD,IAAIijE,GAAG,GAAG;IACNhP,QAAQ,EAAE,GAAG;IACbiP,QAAQ,EAAE,IAAI;IACd7N,UAAU,EAAE,KAAK;IACjBzC,IAAI,EAAE,SAANA,IAAIA,CAAYP,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAE;MACrCtyD,QAAQ,CAACqyD,KAAK,CAACiB,KAAK,CAAChB,KAAK,CAAC6Q,WAAW,CAAC,EAAE,CAAC,CAAC;IAC7C;EACJ,CAAC;EACD,OAAOF,GAAG;AACd,CAAC,CAAC,CAAC,CACF7Q,SAAS,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,UAAUgR,OAAO,EAAE;EACtD,OAAO,UAAU/Q,KAAK,EAAEtvC,IAAI,EAAEuvC,KAAK,EAAE;IACjC,IAAI+Q,OAAO,GAAG,GAAG;IAEjBtgD,IAAI,CAACywC,EAAE,CAAC,OAAO,EAAE,YAAW;MACzB,IAAI8P,GAAG,GAAGhgE,CAAC,CAAC,MAAM,CAAC,CAACuN,IAAI,CAAC,SAAS,CAAC;MAClC,IAAI,CAAC,CAACyyD,GAAG,IAAIA,GAAG,CAAC19D,MAAM,EAAE;QACrB09D,GAAG,CAACtJ,MAAM,CAAC,CAAC;QACZsJ,GAAG,GAAG,IAAI;MACd;MACAA,GAAG,GAAGhgE,CAAC,CAAC,kGAAkG,GAAEyf,IAAI,CAAC5b,IAAI,CAAC,OAAO,CAAC,GAAE,cAAc,CAAC;MAE/IrH,QAAQ,GAAGwD,CAAC,CAACyf,IAAI,CAAC;MAClB,IAAI+H,GAAG,GAAGhrB,QAAQ,CAACirB,MAAM,CAAC,CAAC;MAE3Bu4C,GAAG,CAAC1mD,GAAG,CAAC;QAACqD,UAAU,EAAE;MAAQ,CAAC,CAAC;MAE/BqjD,GAAG,CAACC,QAAQ,CAACjgE,CAAC,CAAC,MAAM,CAAC,CAAC;MACvBggE,GAAG,CAAC1mD,GAAG,CAAC;QACJC,IAAI,EAAGiO,GAAG,CAACjO,IAAI,GAAI/c,QAAQ,CAAC4c,KAAK,CAAC,CAAC,GAAG,CAAE,GAAI4mD,GAAG,CAAC5mD,KAAK,CAAC,CAAC,GAAC,CAAE,GAAI,IAAI;QAClE0O,GAAG,EAAGN,GAAG,CAACM,GAAG,GAAGk4C,GAAG,CAAC3mD,MAAM,CAAC,CAAC,GAAG,CAAC,GAAI;MACxC,CAAC,CAAC;MACF2mD,GAAG,CAAC1mD,GAAG,CAAC;QAACymD,OAAO,EAAEA;MAAO,CAAC,CAAC;MAE3BC,GAAG,CAAC1mD,GAAG,CAAC;QAACqD,UAAU,EAAE;MAAS,CAAC,CAAC;IACpC,CAAC,CAAC;EACN,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;ACtjEH3gB,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,cAAc,EAAE,CAC/C,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAC1E,UAAUle,EAAE,EAAEwkB,KAAK,EAAEjlB,aAAa,EAAEkwB,qBAAqB,EAAEvb,eAAe,EAAE;EAExE,IAAI,CAACmvD,eAAe,GAAG,UAASjiC,IAAI,EAAE;IAClC,IAAI14B,GAAG,GAAG,CAAC,CAAC;IACZA,GAAG,CAAC46D,OAAO,GAAG,CAAC,CAACliC,IAAI,CAACQ,cAAc,GACnBR,IAAI,CAACQ,cAAc,GACnBR,IAAI,CAAC3+B,EAAE;IACvB;IACA;IACAiG,GAAG,CAAC66D,WAAW,GAAGniC,IAAI,CAACoiC,gBAAgB,KAAK,IAAI,GAAGpiC,IAAI,CAACQ,cAAc,GAAGR,IAAI,CAAC3+B,EAAE;IAEhF,OAAOiG,GAAG;EACd,CAAC;EAGD,IAAI,CAAC+6D,gBAAgB,GAAG,UAAUH,OAAO,EAAEC,WAAW,EAAEx5D,KAAK,EAAE25D,YAAY,EAAEC,SAAS,EAAEC,aAAa,EAAEC,UAAU,EAAEC,YAAY,EAAE;IAC7H,IAAI99C,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAIF,EAAE;IACN,IAAIpL,aAAa,CAACmB,QAAQ,IAAIkjE,aAAa,KAAG,IAAI,EAAE;MAChDj5D,EAAE,GAAG8kB,qBAAqB,CAACg0C,gBAAgB,CAACH,OAAO,EAAEC,WAAW,EAAEx5D,KAAK,EAAE25D,YAAY,EAAEC,SAAS,EAAEC,aAAa,EAAEC,UAAU,EAAEC,YAAY,CAAC;IAC9I,CAAC,MACI;MACDn5D,EAAE,GAAGuJ,eAAe,CAAC6vD,iBAAiB,CAACT,OAAO,EAAEC,WAAW,EAAEx5D,KAAK,EAAE25D,YAAY,EAAEC,SAAS,EAAEE,UAAU,CAAC;IAC5G;IAEAl5D,EAAE,CAACtH,IAAI,CAAC,UAAUyjB,MAAM,EAAE;MACtBd,QAAQ,CAAClb,OAAO,CAACgc,MAAM,CAACvjB,IAAI,CAAC;IACjC,CAAC,EAAE,UAAUC,GAAG,EAAE;MACdwiB,QAAQ,CAACC,MAAM,CAACziB,GAAG,CAAC;IACxB,CAAC,CAAC;IAEF,OAAOwiB,QAAQ,CAACjb,OAAO;EAC3B,CAAC;EAED,IAAI,CAACi5D,aAAa,GAAG,UAAU/J,QAAQ,EAAE;IACrC,IAAIgK,WAAW,GAAG9gE,CAAC,CAAC,8EAA8E,CAAC;IACnG,IAAI+gE,aAAa,GAAG/gE,CAAC,CAAC82D,QAAQ,CAAC;IAC/BgK,WAAW,CAACb,QAAQ,CAACc,aAAa,CAAC;IACnC,OAAOA,aAAa;EACxB,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3CiB;AAEQ;AACP;AACL;AAEK;AAEG;AACA;AACQ;AACN;AACA;AACgB;AACtB;;AAExB;AACAC,wDAAY,CAACC,eAAe,CAAC,CAAC;AACH;AACC;AACE;AACJ;AACG;AACC;AACA;AACG;AACN;AACA;AACK;AACI;AACG;AACZ;AACI;AACK;AACT;AACG;AACJ;AACS;AACA;AACF;AACE;AACO;AACD;AACN;AACH;AACD;AACJ;AACiB;AACV;AACN;AACK;AACC;AACL;AACA;AACA;AACG;AACD;AACF;AACQ;AACV;AACY;AACM;AACT;AACC;AACA;AACK;AACH;AACH;AACF;AACK;AACL;AACQ;AACZ;AACC;AACG;AACG;AACC;AACH;AACc;AACA;AACP;AACO;AACL;AACK;AACN;AACH;AACA;AACS;AACV;AACG;AACF;AACO;AACC;AACJ;AACP;AACS;AACZ;AACD;AACM;AACE;AACN;AACN;AACK;AACA;AAClC;;AAE4D;AACG;AAEI;AACb;AACO;AACJ;AACE;AACP;AACmC;AAE3D;AAG5B,SAASC,UAAUA,CAACrvD,CAAC,EAAE;EAAEA,CAAC,CAACsnD,IAAI,CAAC,CAAC,CAACvwD,OAAO,CAACiJ,CAAC,CAAC;AAAE;AAC9CqvD,UAAU,CAACrR,6DAAgD,CAAC;AAC5DqR,UAAU,CAACrR,2EAA0D,CAAC,C;;;;;;;;;;AC1HtE7zD,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAAC2jD,OAAO,CAAC,cAAc,EAAE,CAC/C,gBAAgB,EAAE,eAAe,EACjC,UAAU1iD,cAAc,EAAEJ,aAAa,EAAE;EAEzC,IAAIF,YAAY,GAAG,CAAC,CAAC;EAErBA,YAAY,CAACiE,SAAS,GAAG,UAAUyW,OAAO,EAAEqqD,eAAe,EAAE9wD,KAAK,EAAE+wD,eAAe,EAAEC,MAAM,EAAE;IACzF,IAAIA,MAAM,KAAKz0D,SAAS,IAAIy0D,MAAM,KAAK,IAAI,EACvCA,MAAM,GAAG,IAAI;IACjB,IAAIC,WAAW,GAAG,CAAC,CAAC;IACpB,IAAIjxD,KAAK,EACLixD,WAAW,CAACjxD,KAAK,GAAGA,KAAK,CAAC,KAE1BixD,WAAW,CAACjxD,KAAK,GAAG,OAAO;IAG/B,IAAI,OAAOyG,OAAO,KAAK,QAAQ,EAAE;MAC7BwqD,WAAW,CAAC5uB,IAAI,GAAG57B,OAAO;IAC9B,CAAC,MAAM;MACH,IAAI,CAAC,CAACA,OAAO,CAACw6C,MAAM,IAAIx6C,OAAO,CAACw6C,MAAM,CAACiQ,WAAW,KAAK,IAAI,EAAE;QACzDD,WAAW,CAAC5uB,IAAI,GAAGh2C,cAAc,CAACe,SAAS,CAAC,sCAAsC,CAAC;MACvF,CAAC,MACI,IAAIqZ,OAAO,CAAC3W,IAAI,EAAE;QACnB,IAAIqhE,GAAG,GAAG1qD,OAAO,CAAC3W,IAAI;QACtB,IAAI,OAAQ2W,OAAO,CAAC3W,IAAK,IAAI,QAAQ,EAAE;UACnC,IAAG;YACCqhE,GAAG,GAAG7tC,IAAI,CAAC2T,KAAK,CAACxwB,OAAO,CAAC3W,IAAI,CAAC;UAClC,CAAC,CACD,OAAOqd,CAAC,EAAE,CAEV;QACJ;QAEA,IAAI,CAAC,CAACgkD,GAAG,CAACzuD,GAAG,EACTuuD,WAAW,CAAC5uB,IAAI,GAAG8uB,GAAG,CAACzuD,GAAG,CAAC,UAAUyM,IAAI,EAAE;UAAE,OAAOA,IAAI,CAACyV,SAAS,KAAKroB,SAAS,GAAG4S,IAAI,CAACyV,SAAS,GAAGzV,IAAI;QAAC,CAAC,CAAC,CAAC5O,IAAI,CAAC,IAAI,CAAC,CAAC,KACtH,IAAI,CAAC,CAAC4wD,GAAG,CAACC,gBAAgB,EAC3BH,WAAW,CAAC5uB,IAAI,GAAG8uB,GAAG,CAACC,gBAAgB,CAAC,KACvC;UACD,IAAI,OAAQD,GAAI,IAAI,QAAQ,EACxBF,WAAW,CAAC5uB,IAAI,GAAG8uB,GAAG,CAAC,KAEvBF,WAAW,CAAC5uB,IAAI,GAAG/e,IAAI,CAACC,SAAS,CAAC9c,OAAO,CAAC3W,IAAI,CAAC;QACvD;MACJ,CAAC,MACI,IAAI,OAAO2W,OAAO,CAACA,OAAO,IAAI,QAAQ,EACvCwqD,WAAW,CAAC5uB,IAAI,GAAG57B,OAAO,CAACA,OAAO,CAAC,KAClC,IAAG,CAAC,CAACA,OAAO,CAAC/D,GAAG,EACjBuuD,WAAW,CAAC5uB,IAAI,GAAG57B,OAAO,CAAC/D,GAAG,CAAC,UAAUyM,IAAI,EAAE;QAAE,OAAOA,IAAI,CAACyV,SAAS;MAAC,CAAC,CAAC,CAACrkB,IAAI,CAAC,IAAI,CAAC,CAAC,KACpF,IAAI,CAAC,CAACkG,OAAO,IAAI,CAACA,OAAO,CAAC3W,IAAI,IAAI2W,OAAO,CAACk9B,MAAM,IAAI,CAAC,CAAC,IAAI,CAACl9B,OAAO,CAAC4qD,UAAU,EAAE;QAChFJ,WAAW,CAAC5uB,IAAI,GAAG,+FAA+F;QAClH2uB,MAAM,GAAG,IAAI;MACjB,CAAC,MACI,IAAIn7D,KAAK,CAAC0wC,OAAO,CAAC9/B,OAAO,CAAC,EAAE;QAC7B,IAAI3S,IAAI,GAAG,EAAE;QACbpI,OAAO,CAAC4M,OAAO,CAACmO,OAAO,EAAE,UAAUjb,EAAE,EAAE;UACnCsI,IAAI,IAAI,CAAC,CAAC,CAACA,IAAI,GAAG,OAAO,GAAG,EAAE,IAAItI,EAAE,CAACo5B,SAAS;QAClD,CAAC,CAAC;QAEFqsC,WAAW,CAAC5uB,IAAI,GAAGvuC,IAAI;QACvBk9D,MAAM,GAAG,IAAI;MACjB,CAAC,MACI,IAAI,CAAC,CAACvqD,OAAO,CAAC2W,MAAM,IAAIvnB,KAAK,CAAC0wC,OAAO,CAAC9/B,OAAO,CAAC2W,MAAM,CAAC,EAAE;QACxD,IAAItpB,IAAI,GAAG,EAAE;QACbpI,OAAO,CAAC4M,OAAO,CAACmO,OAAO,CAAC2W,MAAM,EAAE,UAAU5xB,EAAE,EAAE;UAC1CsI,IAAI,IAAI,CAAC,CAAC,CAACA,IAAI,GAAG,OAAO,GAAG,EAAE,IAAItI,EAAE,CAACg5B,YAAY;QACrD,CAAC,CAAC;QAEFysC,WAAW,CAAC5uB,IAAI,GAAGvuC,IAAI;QACvBk9D,MAAM,GAAG,IAAI;MACjB,CAAC,MAAM,IAAIvqD,OAAO,CAAC4M,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC5M,OAAO,CAACgpB,QAAQ,IAAI,CAAC,CAAChpB,OAAO,CAACgpB,QAAQ,CAACC,gBAAgB,EAAE;QAC9FuhC,WAAW,CAAC5uB,IAAI,GAAG57B,OAAO,CAACgpB,QAAQ,CAACC,gBAAgB;MACxD,CAAC,MAAM;QACH,IAAG,CAAC,CAACjpB,OAAO,IAAI,CAAC,CAACA,OAAO,CAACw6C,MAAM,IAAI,CAAC,CAAEx6C,OAAO,CAACw6C,MAAM,CAAChwC,GAAG,EAAC;UACtDggD,WAAW,CAAC5uB,IAAI,GAAG,WAAW,GAAG57B,OAAO,CAACw6C,MAAM,CAAChwC,GAAG,GAAG,eAAe,GAAGxK,OAAO,CAACk9B,MAAM;QAC1F,CAAC,MACI;UACDstB,WAAW,CAAC5uB,IAAI,GAAG,iBAAiB;QACxC;MACJ;IACJ;IACA,IAAI0uB,eAAe,EAAE;MACjBE,WAAW,CAACF,eAAe,GAAGA,eAAe;IACjD,CAAC,MAAM;MACHE,WAAW,CAACF,eAAe,GAAG,KAAK;IACvC;IAEA9kE,aAAa,CAACqlE,eAAe,CAACL,WAAW,EAAEH,eAAe,EAAEE,MAAM,CAAC;EACvE,CAAC;EAED,OAAOjlE,YAAY;AACvB,CAAC,CAAC,CAAC,C;;;;;;;;;;;;;;;AC1FH;AACA;AACA;AACA;AACO,IAAMoxC,MAAM,GAAG;EAClBo0B,wBAAwB,EAAE,mBAAmB;EAC7CC,0BAA0B,EAAE,kBAAkB;EAC9CC,uBAAuB,EAAE,gBAAgB;EACzCC,eAAe,EAAE,SAAS;EAC1BC,SAAS,EAAE;AACf,CAAC,C;;;;;;;;;;;ACVDjmE,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,qBAAqB,EAAE,CACtD,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,EAC/C,UAAUle,EAAE,EAAET,aAAa,EAAEilB,KAAK,EAAE9kB,aAAa,EAAE;EAE/C,IAAI,CAAC2lE,YAAY,GAAG,UAAU3gD,GAAG,EAAEI,QAAQ,EAAgC;IAAA,IAAAwgD,KAAA;IAAA,IAA9BC,QAAQ,GAAA/0D,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,iBAAiB;IACrE,IAAIkU,GAAG,CAAChW,OAAO,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,EAAE;MAC7CgW,GAAG,GAAGA,GAAG,CAAC1F,OAAO,CAAC,uBAAuB,EAAEzf,aAAa,CAACmnC,OAAO,CAAC;IACrE;IAEA,IAAInnC,aAAa,CAACX,MAAM,EAAE;MACtB,OAAO,IAAI,CAAC4mE,YAAY,CAAC9gD,GAAG,EAAEI,QAAQ,CAAC;IAC3C;IAEA,IAAIygD,QAAQ,KAAK,iBAAiB,EAAE;MAChC,IAAIE,GAAG,GAAGjhD,KAAK,CAAC;QACZiB,MAAM,EAAE,KAAK;QACbf,GAAG,EAAEA,GAAG;QACRghD,YAAY,EAAE;MAClB,CAAC,CAAC;MACF,IAAI96D,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzB46D,GAAG,CAACpiE,IAAI,CAAC,UAAAqF,GAAG,EAAI;QACZvF,CAAC,CAACO,SAAS,CAAC,CAAC;QACb,OAAO4hE,KAAI,CAACK,aAAa,CAACj9D,GAAG,CAACnF,IAAI,CAAC,CAACF,IAAI,CAAC,UAAA2R,CAAC,EAAK;UAC3C,OAAOtV,aAAa,CAACkmE,QAAQ,CAAC5wD,CAAC,EAAE8P,QAAQ,CAAC;QAC9C,CAAC,CAAC,CAACzhB,IAAI,CAAC,UAAA2R,CAAC,EAAI;UACTpK,QAAQ,CAACE,OAAO,CAACkK,CAAC,CAAC;QACvB,CAAC,CAAC,SAAM,CAAC,UAAAxR,GAAG,EAAI;UACZoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;QACxB,CAAC,CAAC;MACN,CAAC,CAAC,SAAM,CAAC,UAAAod,CAAC,EAAI;QACVzd,CAAC,CAACO,SAAS,CAAC,CAAC;QACbkH,QAAQ,CAACqb,MAAM,CAACrF,CAAC,CAAC;QAClB,OAAOhW,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC;MACF,OAAOH,QAAQ,CAACG,OAAO;IAC3B;IAEA,IAAImrC,MAAM,IAAIA,MAAM,CAACC,QAAQ,KAAK,KAAK,EAAE;MACrC,OAAO,IAAI,CAAC0vB,qBAAqB,CAACnhD,GAAG,EAAEI,QAAQ,CAAC;IACpD;IAEA,OAAO,IAAI,CAACghD,eAAe,CAACphD,GAAG,EAAEI,QAAQ,EAAEygD,QAAQ,CAAC;EACxD,CAAC;EAED,IAAI,CAACO,eAAe,GAAG,UAAUphD,GAAG,EAAEI,QAAQ,EAAEygD,QAAQ,EAAE;IAAA,IAAAQ,MAAA;IACtD5iE,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,IAAIqiE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEA,GAAG;MACRghD,YAAY,EAAE;IAClB,CAAC,CAAC;IACF,IAAI96D,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,OAAO46D,GAAG,CAACpiE,IAAI,CAAC,UAAAqF,GAAG,EAAI;MACnB,IAAI;QACA,IAAIs9D,eAAe,GAAGD,MAAI,CAACE,mBAAmB,CAAC,CAAC;QAChD,IAAIC,UAAU,GAAGF,eAAe,GAAG,UAAU;QAC7CtnE,MAAM,CAACwnB,yBAAyB,CAACggD,UAAU,EAAE,UAAU5vB,GAAG,EAAE;UACxDA,GAAG,CAACjxB,OAAO,CAACP,QAAQ,EAAE;YAClB0B,MAAM,EAAE;UACZ,CAAC,EAAE,UAAUJ,IAAI,EAAE;YACfA,IAAI,CAACa,YAAY,CAAC,UAAUC,UAAU,EAAE;cACpCA,UAAU,CAACO,KAAK,CAAC/e,GAAG,CAACnF,IAAI,CAAC;cAC1B2jB,UAAU,CAACC,UAAU,GAAG,YAAW;gBAC/B,IAAIzC,GAAG,GAAG0B,IAAI,CAAC+/C,KAAK,CAAC,CAAC;gBACtBhjE,CAAC,CAACO,SAAS,CAAC,CAAC;gBACbyiB,OAAO,CAACqC,OAAO,CAAC49C,WAAW,CAACzgE,IAAI,CAAC+e,GAAG,EAAE6gD,QAAQ,EAAE;kBAC9C78C,KAAK,EAAE,SAASA,KAAKA,CAACllB,GAAG,EAAE;oBACzBa,OAAO,CAACqkB,KAAK,CAACllB,GAAG,CAAC;oBAClBoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;kBACtB,CAAC;kBACD6iE,OAAO,EAAE,SAASA,OAAOA,CAAA,EAAG;oBAC1BhiE,OAAO,CAACC,GAAG,CAAC,+BAA+B,CAAC;oBAC5CsG,QAAQ,CAACE,OAAO,CAAC4Z,GAAG,CAAC;kBACvB;gBACF,CAAC,CAAC;cACN,CAAC;YACL,CAAC,EAAE,UAAUlhB,GAAG,EAAE;cACda,OAAO,CAACC,GAAG,CAACd,GAAG,CAAC;cAChBL,CAAC,CAACO,SAAS,CAAC,CAAC;cACbkH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;YACxB,CAAC,CAAC;UACN,CAAC,EAAG,UAAUA,GAAG,EAAE;YACfa,OAAO,CAACC,GAAG,CAACd,GAAG,CAAC;YAChBL,CAAC,CAACO,SAAS,CAAC,CAAC;YACbkH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;UACxB,CAAC,CAAC;QACN,CAAC,CAAC;MACN,CAAC,CAAC,OAAOod,CAAC,EAAE;QACRzd,CAAC,CAACO,SAAS,CAAC,CAAC;QACbkH,QAAQ,CAACqb,MAAM,CAACrF,CAAC,CAAC;MACtB;MAGA,OAAOhW,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC,SAAM,CAAC,UAAA6V,CAAC,EAAI;MACVzd,CAAC,CAACO,SAAS,CAAC,CAAC;MACbkH,QAAQ,CAACqb,MAAM,CAACrF,CAAC,CAAC;MAClB,OAAOhW,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACy6D,YAAY,GAAG,UAAU/S,IAAI,EAAErd,QAAQ,EAAE;IAC1C,IAAIxqC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAIyqC,YAAY,GAAG31B,QAAQ,CAAC81B,aAAa,CAAC,GAAG,CAAC;IAC9CH,YAAY,CAACI,QAAQ,GAAGN,QAAQ;IAChCE,YAAY,CAACK,IAAI,GAAG8c,IAAI;IACxBnd,YAAY,CAACz1B,KAAK,CAACgB,OAAO,GAAG,MAAM;IACnClB,QAAQ,CAACm2B,IAAI,CAACC,WAAW,CAACT,YAAY,CAAC;IACvCA,YAAY,CAACz8B,KAAK,CAAC,CAAC;IACpBy8B,YAAY,CAACukB,MAAM,CAAC,CAAC;IAErBjvD,QAAQ,CAACE,OAAO,CAACsqC,QAAQ,CAAC;IAC1B,OAAOxqC,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC86D,qBAAqB,GAAG,UAAUpT,IAAI,EAAErd,QAAQ,EAAE;IACnD,IAAIxqC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzBsb,OAAO,CAACmgD,YAAY,CAAC3gE,IAAI,CAAC8sD,IAAI,EAAE,QAAQ,EAAE,aAAa,CAAC;IAExD7nD,QAAQ,CAACE,OAAO,CAACsqC,QAAQ,CAAC;IAC1B,OAAOxqC,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACk7D,mBAAmB,GAAG,YAAY;IACnC,QAAQ/vB,MAAM,CAACC,QAAQ;MACnB,KAAK,SAAS;QACV,OAAO,6BAA6B;MACxC,KAAK,KAAK;QACN,OAAOhwB,OAAO,CAACC,IAAI,CAACiwB,kBAAkB;IAC9C;IAEA,MAAM,IAAIkwB,KAAK,CAAC,EAAE,CAAC;EACvB,CAAC;EAED,IAAI,CAACZ,aAAa,GAAG,UAASpvB,IAAI,EAAE;IAChC,OAAO,IAAIxlB,OAAO,CAAC,UAACjmB,OAAO,EAAEgd,CAAC,EAAK;MAC/B,IAAMnB,MAAM,GAAG,IAAIC,UAAU,CAAC,CAAC;MAC/BD,MAAM,CAACE,SAAS,GAAG;QAAA,OAAM/b,OAAO,CAAC6b,MAAM,CAACG,MAAM,CAAC;MAAA;MAC/CH,MAAM,CAAC6/C,aAAa,CAACjwB,IAAI,CAAC;IAC5B,CAAC,CAAC;EACR,CAAC;AACL,CAAC,CAEL,CAAC,C;;;;;;;;;;ACjJDp3C,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAAC2jD,OAAO,CAAC,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,EAClE,UAAUn5B,OAAO,EAAEo9C,IAAI,EAAE;EACrB,IAAIC,aAAa,GAAG,CAAC,CAAC;;EAEtB;EACA;EACAA,aAAa,CAACC,+BAA+B,GAAG,UAAUC,WAAW,EAAEjtC,MAAM,EAAEktC,CAAC,EAAEC,GAAG,EAAE;IAEnF,IAAIC,OAAO,GAAG,CAACptC,MAAM,GAAG,EAAE,GAAGA,MAAM,CAACjX,WAAW,CAAC,CAAC;IACjD,IAAIskD,YAAY,GAAG,CAACJ,WAAW,GAAG,EAAE,GAAGA,WAAW,CAAClkD,WAAW,CAAC,CAAC;;IAEhE;IACA,IAAIukD,SAAS,GAAGP,aAAa,CAACQ,eAAe,CAACH,OAAO,CAAC;;IAEtD;IACA,IAAII,aAAa,GAAGT,aAAa,CAACU,iBAAiB,CAACJ,YAAY,EAAEC,SAAS,CAAC;;IAE5E;IACAE,aAAa,GAAGT,aAAa,CAACW,iBAAiB,CAACF,aAAa,CAAC;;IAE9D;IACA,IAAIG,OAAO,GAAGZ,aAAa,CAACa,qBAAqB,CAACJ,aAAa,CAAC;IAChEz+D,GAAG,GAAGg+D,aAAa,CAACc,YAAY,CAACZ,WAAW,EAAEU,OAAO,CAAC,CAAC,CAAC;IACxD,IAAIT,CAAC,EAAE;MACH;MACAH,aAAa,CAACe,UAAU,CAACZ,CAAC,CAACh9D,EAAE,EAAEi9D,GAAG,CAAC;;MAEnC;MACA,IAAIY,GAAG,GAAGhB,aAAa,CAACiB,oBAAoB,CAACd,CAAC,CAACz9D,KAAK,EAAEk+D,OAAO,CAAC;MAC9D,IAAII,GAAG,EAAE;QACL,IAAIE,KAAK,GAAG,wCAAwC,GAChD,uEAAuE,GAAGF,GAAG,CAACh/D,GAAG,GAAG,QAAQ,GAC5F,uCAAuC,GAAGg/D,GAAG,CAACG,CAAC,GAAG,gCAAgC,GAAGH,GAAG,CAAChzB,CAAC,GAAG,QAAQ,GACrG,QAAQ;QAEZ,OAAO+xB,IAAI,CAACqB,WAAW,CAACF,KAAK,CAAC;MAClC;IACJ;IAEA,OAAOl/D,GAAG;EACd,CAAC;;EAGD;EACA;EACAg+D,aAAa,CAAChnD,MAAM,GAAG,IAAI;EAC3BgnD,aAAa,CAACpC,OAAO,GAAG,IAAI;EAC5BoC,aAAa,CAACqB,YAAY,GAAG,GAAG;EAEhCrB,aAAa,CAACsB,WAAW,GAAG,YAAY;IACpCtB,aAAa,CAAChnD,MAAM,GAAG,IAAI;IAC3BgnD,aAAa,CAACpC,OAAO,GAAG,IAAI;IAC5BoC,aAAa,CAACqB,YAAY,GAAG,GAAG;EACpC,CAAC;EAEDrB,aAAa,CAACe,UAAU,GAAG,UAAU59D,EAAE,EAAEi9D,GAAG,EAAE;IAC1C,IAAI,CAACJ,aAAa,CAAChnD,MAAM,EAAE;MACvB,IAAIzgB,EAAE,GAAGkE,CAAC,CAAC,GAAG,GAAG0G,EAAE,GAAG,GAAG,GAAGi9D,GAAG,CAAC;MAEhC,IAAI7nE,EAAE,CAACwG,MAAM,GAAG,CAAC,EAAE;QACfihE,aAAa,CAAChnD,MAAM,GAAGC,QAAQ,CAAC81B,aAAa,CAAC,QAAQ,CAAC;QACvDixB,aAAa,CAACpC,OAAO,GAAGoC,aAAa,CAAChnD,MAAM,CAAC6gC,UAAU,CAAC,IAAI,CAAC;QAC7D,IAAI0nB,EAAE,GAAGhpE,EAAE,CAACwd,GAAG,CAAC,aAAa,CAAC;QAC9B,IAAIyrD,EAAE,GAAGjpE,EAAE,CAACwd,GAAG,CAAC,WAAW,CAAC;QAC5B,IAAI0rD,EAAE,GAAGlpE,EAAE,CAACwd,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;QAChC,IAAI2rD,IAAI,GAAG,SAAS,GAAGD,EAAE,GAAG,GAAG,GAAGD,EAAE,GAAG,GAAG,GAAGD,EAAE;QAC/CvB,aAAa,CAACpC,OAAO,CAAC+D,IAAI,GAAGD,IAAI;QACjC1B,aAAa,CAACqB,YAAY,GAAG1kD,QAAQ,CAACpkB,EAAE,CAACwd,GAAG,CAAC,WAAW,CAAC,CAAC;MAC9D;IACJ;EACJ,CAAC;EAEDiqD,aAAa,CAACiB,oBAAoB,GAAG,UAAU1oE,EAAE,EAAEqoE,OAAO,EAAE;IACxD;IACA;IACA,IAAI//D,IAAI,GAAGtI,EAAE,CAACgK,IAAI;IAClB,IAAIsT,KAAK,GAAGmqD,aAAa,CAACpC,OAAO,CAACgE,WAAW,CAAC/gE,IAAI,CAAC,CAACgV,KAAK;IACzD,IAAIA,KAAK,IAAImqD,aAAa,CAACqB,YAAY,EAAE,OAAO,IAAI;IACpD,IAAI9+D,IAAI,GAAGhK,EAAE,CAACgK,IAAI;IAClB,IAAIs/D,aAAa,GAAG,EAAE;;IAEtB;IACA;IACA,IAAIhjE,GAAG,GAAGtG,EAAE,CAACupE,OAAO;IACpB,OAAOjjE,GAAG,GAAG,CAAC,IAAI0D,IAAI,CAAC1D,GAAG,CAAC,KAAK,GAAG,EAAEA,GAAG,EAAE;IAC1C,IAAIA,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAG,CAAC;IACpB,IAAI0D,IAAI,CAAC1D,GAAG,CAAC,KAAK,GAAG,EAAEA,GAAG,EAAE;;IAE5B;IACA,IAAIkjE,IAAI,GAAGxpE,EAAE,CAACupE,OAAO,GAAG,CAAC;IACzB,OAAOC,IAAI,GAAGx/D,IAAI,CAACxD,MAAM,IAAIwD,IAAI,CAACw/D,IAAI,CAAC,KAAK,GAAG,EAAEA,IAAI,EAAE;IACvD,IAAIA,IAAI,GAAGx/D,IAAI,CAACxD,MAAM,EAAEgjE,IAAI,GAAGx/D,IAAI,CAACxD,MAAM;;IAE1C;IACA,IAAIivC,CAAC,GAAGzrC,IAAI,CAACgX,MAAM,CAAC,CAAC,EAAEwoD,IAAI,CAAC;IAC5B,IAAI/B,aAAa,CAACpC,OAAO,CAACgE,WAAW,CAAC5zB,CAAC,CAAC,CAACn4B,KAAK,IAAImqD,aAAa,CAACqB,YAAY,EAAE;MAC1E,OAAO,IAAI,CAAC,CAAC;IACjB;IAEArzB,CAAC,GAAGzrC,IAAI,CAACgX,MAAM,CAAC1a,GAAG,EAAEkjE,IAAI,GAAGljE,GAAG,CAAC;IAEhCgX,KAAK,GAAGmqD,aAAa,CAACpC,OAAO,CAACgE,WAAW,CAAC5zB,CAAC,CAAC,CAACn4B,KAAK,GAAGgsD,aAAa,CAAC,CAAC;;IAEpE,IAAIhsD,KAAK,GAAGmqD,aAAa,CAACqB,YAAY,GAAG,CAAC,EAAE;MACxC,IAAInuC,IAAI,GAAGV,IAAI,CAACo+B,KAAK,CAAC,CAACr4D,EAAE,CAACupE,OAAO,GAAG,CAAC,GAAGjjE,GAAG,IAAI,CAAC,CAAC;MACjD,IAAImjE,QAAQ,GAAG,KAAK;MAEpB,OAAO9uC,IAAI,IAAI,CAAC,EAAE;QACd;QACA,IAAI,CAAC8uC,QAAQ,EACTnjE,GAAG,IAAIq0B,IAAI,CAAC,KAEZr0B,GAAG,IAAIq0B,IAAI;QAEf,IAAIr0B,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAG,CAAC;QACpB,IAAIA,GAAG,IAAIkjE,IAAI,EACXljE,GAAG,GAAGkjE,IAAI,GAAG,CAAC;QAElB/zB,CAAC,GAAGzrC,IAAI,CAACgX,MAAM,CAAC1a,GAAG,EAAEtG,EAAE,CAACupE,OAAO,GAAG,CAAC,GAAGjjE,GAAG,CAAC;QAC1CgX,KAAK,GAAGmqD,aAAa,CAACpC,OAAO,CAACgE,WAAW,CAAC5zB,CAAC,CAAC,CAACn4B,KAAK;QAClDmsD,QAAQ,GAAGnsD,KAAK,GAAImqD,aAAa,CAACqB,YAAY,GAAG,CAAE;QACnDnuC,IAAI,GAAGV,IAAI,CAACo+B,KAAK,CAAC19B,IAAI,GAAG,CAAC,CAAC;MAC/B;IACJ;IAEA,IAAIr0B,GAAG,IAAItG,EAAE,CAACupE,OAAO,EACjBjjE,GAAG,GAAGtG,EAAE,CAACupE,OAAO,GAAG,CAAC;IACxB,IAAIjjE,GAAG,GAAG,CAAC,EACPA,GAAG,GAAG,CAAC;IAEXmvC,CAAC,GAAGzrC,IAAI,CAACgX,MAAM,CAAC1a,GAAG,CAAC;IAEpBgX,KAAK,GAAGmqD,aAAa,CAACpC,OAAO,CAACgE,WAAW,CAAC5zB,CAAC,CAAC,CAACn4B,KAAK,GAAGgsD,aAAa;IAClE,IAAIhsD,KAAK,GAAGmqD,aAAa,CAACqB,YAAY,GAAG,CAAC,EACtCxrD,KAAK,GAAGmqD,aAAa,CAACqB,YAAY,GAAG,CAAC;IAE1CrzB,CAAC,GAAGgyB,aAAa,CAACc,YAAY,CAAC9yB,CAAC,EAAE4yB,OAAO,EAAE/hE,GAAG,CAAC;IAE/C,IAAI88B,EAAE,GAAGp5B,IAAI,CAACgX,MAAM,CAAC,CAAC,EAAE1a,GAAG,CAAC;IAC5B88B,EAAE,GAAGqkC,aAAa,CAACc,YAAY,CAACnlC,EAAE,EAAEilC,OAAO,CAAC;IAE5C,OAAO;MACHO,CAAC,EAAEtrD,KAAK;MACRm4B,CAAC,EAAEA,CAAC;MACJhsC,GAAG,EAAE25B,EAAE,GAAG;IACd,CAAC;EACL,CAAC;EAEDqkC,aAAa,CAACQ,eAAe,GAAG,UAAUyB,GAAG,EAAE;IAC3C,IAAI1B,SAAS,GAAG0B,GAAG,GAAGA,GAAG,CAACjuD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;IACzC,IAAIhS,GAAG,GAAG,EAAE;IACZvJ,OAAO,CAAC4M,OAAO,CAACk7D,SAAS,EAAE,UAAUvyB,CAAC,EAAE;MACpC,IAAIA,CAAC,IAAIA,CAAC,CAAC95B,IAAI,CAAC,CAAC,EACblS,GAAG,CAAChD,IAAI,CAACgvC,CAAC,CAAC95B,IAAI,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,OAAOlS,GAAG;EACd,CAAC;EAEDg+D,aAAa,CAACU,iBAAiB,GAAG,UAAUwB,GAAG,EAAEC,GAAG,EAAE;IAClD,IAAIngE,GAAG,GAAG,EAAE;IAEZ,IAAI,CAACmgE,GAAG,IAAI,CAACD,GAAG,EAAE,OAAOlgE,GAAG;;IAE5B;IACAvJ,OAAO,CAAC4M,OAAO,CAAC88D,GAAG,EAAE,UAAUtmC,CAAC,EAAE;MAC9B;MACA,IAAIh9B,GAAG,GAAG,CAAC;MACX,OAAO,CAACA,GAAG,GAAGqjE,GAAG,CAACl6D,OAAO,CAAC6zB,CAAC,EAAEh9B,GAAG,CAAC,KAAK,CAAC,EAAE;QACrCmD,GAAG,CAAChD,IAAI,CAAC;UACLojE,KAAK,EAAEvjE,GAAG;UAAE;UACZ8jD,GAAG,EAAE9jD,GAAG,GAAGg9B,CAAC,CAAC98B,MAAM,CAAC;QACxB,CAAC,CAAC;QAEFF,GAAG,IAAIg9B,CAAC,CAAC98B,MAAM;MACnB;IACJ,CAAC,CAAC;IAEF,OAAOiD,GAAG;EACd,CAAC;EAEDg+D,aAAa,CAACW,iBAAiB,GAAG,UAAU5sD,GAAG,EAAE;IAC7C,OAAOA,GAAG,CAACulC,IAAI,CAAC,UAAUn0C,CAAC,EAAE8N,CAAC,EAAE;MAC5B;MACA,IAAI9N,CAAC,CAACi9D,KAAK,GAAGnvD,CAAC,CAACmvD,KAAK,EAAE,OAAO,CAAC,CAAC;MAChC,IAAIj9D,CAAC,CAACi9D,KAAK,GAAGnvD,CAAC,CAACmvD,KAAK,EAAE,OAAO,CAAC;MAC/B,IAAIj9D,CAAC,CAACw9C,GAAG,GAAG1vC,CAAC,CAAC0vC,GAAG,EAAE,OAAO,CAAC,CAAC;MAC5B,IAAIx9C,CAAC,CAACw9C,GAAG,GAAG1vC,CAAC,CAAC0vC,GAAG,EAAE,OAAO,CAAC;MAC3B,OAAO,CAAC;IACZ,CAAC,CAAC;EACN,CAAC;;EAED;EACAqd,aAAa,CAACa,qBAAqB,GAAG,UAAUwB,SAAS,EAAE;IACvD,IAAIrgE,GAAG,GAAG,EAAE;IACZvJ,OAAO,CAAC4M,OAAO,CAACg9D,SAAS,EAAE,UAAU9pE,EAAE,EAAE;MACrC,IAAI+pE,CAAC,GAAGtgE,GAAG,CAACjD,MAAM,GAAG,CAAC;MAEtB,IAAIujE,CAAC,IAAI,CAAC,EAAE;QACR;QACA,IAAItC,aAAa,CAACuC,aAAa,CAACvgE,GAAG,CAACsgE,CAAC,CAAC,EAAE/pE,EAAE,CAAC,EAAE;UACzCyJ,GAAG,CAACsgE,CAAC,CAAC,GAAGtC,aAAa,CAACwC,kBAAkB,CAACxgE,GAAG,CAACsgE,CAAC,CAAC,EAAE/pE,EAAE,CAAC;QACzD,CAAC,MAAM;UAAE;UACLyJ,GAAG,CAAChD,IAAI,CAACzG,EAAE,CAAC;QAChB;MACJ,CAAC,MAAM;QAAE;QACLyJ,GAAG,CAAChD,IAAI,CAACzG,EAAE,CAAC;MAChB;IACJ,CAAC,CAAC;IAEF,OAAOyJ,GAAG;EACd,CAAC;;EAED;EACAg+D,aAAa,CAACuC,aAAa,GAAG,UAAUp9D,CAAC,EAAE8N,CAAC,EAAE;IAC1C,OAAO9N,CAAC,CAACi9D,KAAK,IAAInvD,CAAC,CAACmvD,KAAK,IAAInvD,CAAC,CAACmvD,KAAK,IAAIj9D,CAAC,CAACw9C,GAAG;EACjD,CAAC;EAEDqd,aAAa,CAACwC,kBAAkB,GAAG,UAAUr9D,CAAC,EAAE8N,CAAC,EAAE;IAC/C,IAAI1a,EAAE,GAAG;MACL6pE,KAAK,EAAEj9D,CAAC,CAACi9D,KAAK;MACdzf,GAAG,EAAE1vC,CAAC,CAAC0vC,GAAG,GAAGx9C,CAAC,CAACw9C,GAAG,GAAG1vC,CAAC,CAAC0vC,GAAG,GAAGx9C,CAAC,CAACw9C;IACnC,CAAC;IAED,OAAOpqD,EAAE;EACb,CAAC;EAEDynE,aAAa,CAACc,YAAY,GAAG,UAAUmB,GAAG,EAAErB,OAAO,EAAE6B,WAAW,EAAE;IAC9D,IAAIv+C,MAAM,GAAG,CAAC;IACd,IAAIw+C,EAAE,GAAG,0BAA0B;IACnC,IAAIC,EAAE,GAAG,SAAS;IAElBF,WAAW,GAAGA,WAAW,GAAGA,WAAW,GAAG,CAAC;IAE3C,IAAIG,QAAQ,GAAGF,EAAE,CAAC3jE,MAAM;IACxB,IAAI8jE,QAAQ,GAAGF,EAAE,CAAC5jE,MAAM;IAExBtG,OAAO,CAAC4M,OAAO,CAACu7D,OAAO,EAAE,UAAUtyD,CAAC,EAAE;MAClC,IAAIA,CAAC,CAAC8zD,KAAK,IAAIK,WAAW,IAAKA,WAAW,IAAIn0D,CAAC,CAACq0C,GAAG,IAAI8f,WAAW,GAAGn0D,CAAC,CAAC8zD,KAAM,EAAE;QAC3EH,GAAG,GAAGjC,aAAa,CAAC8C,SAAS,CAACb,GAAG,EAAEzvC,IAAI,CAACuwC,GAAG,CAACz0D,CAAC,CAAC8zD,KAAK,EAAEK,WAAW,CAAC,GAAGv+C,MAAM,GAAGu+C,WAAW,EAAEC,EAAE,CAAC;QAC7Fx+C,MAAM,IAAI0+C,QAAQ;QAElB,IAAII,IAAI,GAAG10D,CAAC,CAACq0C,GAAG,GAAGz+B,MAAM,GAAGu+C,WAAW;QACvC,IAAIO,IAAI,GAAGf,GAAG,CAACljE,MAAM,EACjBikE,IAAI,GAAGf,GAAG,CAACljE,MAAM;QAErBkjE,GAAG,GAAGjC,aAAa,CAAC8C,SAAS,CAACb,GAAG,EAAEe,IAAI,EAAEL,EAAE,CAAC;QAC5Cz+C,MAAM,IAAI2+C,QAAQ;MACtB;IACJ,CAAC,CAAC;IAEF,OAAOZ,GAAG;EACd,CAAC;EAEDjC,aAAa,CAAC8C,SAAS,GAAG,UAAUb,GAAG,EAAE/iE,KAAK,EAAEgP,KAAK,EAAE;IACnD,IAAIhP,KAAK,GAAG+iE,GAAG,CAACljE,MAAM,EAAE,OAAOkjE,GAAG;IAElC,OAAOA,GAAG,CAAC1oD,MAAM,CAAC,CAAC,EAAEra,KAAK,CAAC,GAAGgP,KAAK,GAAG+zD,GAAG,CAAC1oD,MAAM,CAACra,KAAK,CAAC;EAC3D,CAAC;EAED8gE,aAAa,CAACiD,2BAA2B,GAAG,UAAUhB,GAAG,EAAEluD,GAAG,EAAE;IAC5D,IAAI,CAACkuD,GAAG,IAAI,CAACluD,GAAG,IAAIA,GAAG,CAAChV,MAAM,KAAK,CAAC,EAAE,OAAO,KAAK;IAClD,IAAImkE,QAAQ,GAAG,IAAI;IAEnBzqE,OAAO,CAAC4M,OAAO,CAAC0O,GAAG,EAAE,UAAUi6B,CAAC,EAAE;MAC9B,IAAI,CAACk1B,QAAQ,EAAE,OAAO,KAAK,CAAC,KACvB;QACDA,QAAQ,GAAGjB,GAAG,CAACj6D,OAAO,CAACgmC,CAAC,CAAC,IAAI,CAAC;MAClC;IACJ,CAAC,CAAC;IAEF,OAAOk1B,QAAQ;EACnB,CAAC;EAEDlD,aAAa,CAACmD,aAAa,GAAG,UAAUpvD,GAAG,EAAE;IACzCtb,OAAO,CAAC4M,OAAO,CAAC0O,GAAG,EAAE,UAAUxb,EAAE,EAAE;MAC/B,IAAIA,EAAE,CAACupE,OAAO,EACV,OAAOvpE,EAAE,CAACupE,OAAO;IACzB,CAAC,CAAC;IAEF,IAAIsB,GAAG,GAAG,CAAC;MAAEC,IAAI,GAAG,CAAC;MAAEl2D,CAAC;MAAEqO,CAAC;IAC3B;IACA;;IAEA;IACA;IACA;IACA;;IAEA;IACA;IACA;IACA;;IAEA;IACA;IACA;IACA;IACA;;IAEA;;IAEA;IACA;IACA,IAAI8nD,MAAM,GAAG,CAAC;;IAEd;IACA,KAAKn2D,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4G,GAAG,CAAChV,MAAM,EAAEoO,CAAC,EAAE,EAAE;MAC7B,IAAI4G,GAAG,CAAC5G,CAAC,CAAC,CAAC5K,IAAI,CAACxD,MAAM,IAAKgV,GAAG,CAAC5G,CAAC,CAAC,CAAC5K,IAAI,CAACxD,MAAM,GAAG,CAAC,GAAIukE,MAAM,EACvDA,MAAM,GAAGvvD,GAAG,CAAC5G,CAAC,CAAC,CAAC5K,IAAI,CAACxD,MAAM,GAAG,CAAC;IACvC;IAEA,KAAKoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAI4G,GAAG,CAAChV,MAAM,GAAG,CAAE,EAAEoO,CAAC,EAAE,EAAE;MACnC,KAAKqO,CAAC,GAAGrO,CAAC,GAAG,CAAC,EAAEqO,CAAC,GAAGzH,GAAG,CAAChV,MAAM,EAAEyc,CAAC,EAAE,EAAE;QACjC4nD,GAAG,GAAGpD,aAAa,CAACuD,eAAe,CAACxvD,GAAG,CAAC5G,CAAC,CAAC,CAAC5K,IAAI,EAAEwR,GAAG,CAACyH,CAAC,CAAC,CAACjZ,IAAI,CAAC;QAC7D,IAAI6gE,GAAG,GAAGE,MAAM,EACZA,MAAM,GAAGF,GAAG;MACpB;IACJ;IAEA,KAAKj2D,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4G,GAAG,CAAChV,MAAM,EAAEoO,CAAC,EAAE,EAAE;MAC7B4G,GAAG,CAAC5G,CAAC,CAAC,CAAC20D,OAAO,GAAGwB,MAAM;IAC3B;EACJ,CAAC;EAEDtD,aAAa,CAACuD,eAAe,GAAG,UAAU5nC,EAAE,EAAEG,EAAE,EAAE;IAC9C,IAAK,CAACH,EAAE,IAAI,CAACG,EAAE,IAAM,CAACH,EAAE,IAAIG,EAAG,IAAKH,EAAE,IAAI,CAACG,EAAG,EAAE,OAAO,CAAC;IAExD,IAAI95B,GAAG,GAAGwwB,IAAI,CAACgxC,GAAG,CAAC7nC,EAAE,CAAC58B,MAAM,EAAE+8B,EAAE,CAAC/8B,MAAM,CAAC,CAAC,CAAC;IAC1C,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGqlB,IAAI,CAACgxC,GAAG,CAAC7nC,EAAE,CAAC58B,MAAM,EAAE+8B,EAAE,CAAC/8B,MAAM,CAAC,EAAEoO,CAAC,EAAE,EAAE;MACrD,IAAIwuB,EAAE,CAACxuB,CAAC,CAAC,KAAK2uB,EAAE,CAAC3uB,CAAC,CAAC,EAAE;QACjBnL,GAAG,GAAGmL,CAAC;QACP;MACJ;IACJ;IAEA,OAAOnL,GAAG;EACd,CAAC;EAED,OAAOg+D,aAAa;AACxB,CAAC,CACJ,CAAC;AAEFvnE,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CACrBuG,MAAM,CAAC,yBAAyB,oBAAE,UAAUshE,aAAa,EAAE;EACvD,OAAOA,aAAa,CAACC,+BAA+B;AACxD,CAAC,EAAC,C;;;;;;;;;;AC1VNxnE,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,oBAAoB,EAAE,CACrD,YAAY;EACR,IAAIisD,MAAM,GAAG,CAAC;EACd,IAAIC,YAAY,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EAElD,IAAIC,GAAG,GAAG,CAAC,CAAC;EAEZ,KAAK,IAAIx2D,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGu2D,YAAY,CAAC3kE,MAAM,EAAEoO,CAAC,EAAE,EAAE;IAC1C,IAAIE,CAAC,GAAGq2D,YAAY,CAACv2D,CAAC,CAAC;IACvBw2D,GAAG,CAAC,WAAW,GAAGt2D,CAAC,CAAC,GAAG,IAAIgO,MAAM,CAAC,CAAC;IACnCsoD,GAAG,CAAC,eAAe,GAAGt2D,CAAC,CAAC,GAAG,IAAIgO,MAAM,CAAC,CAAC;EAC3C;EAEA,SAASuoD,cAAcA,CAACC,WAAW,EAAEC,EAAE,EAAE;IACrC,IAAIC,aAAa,GAAGJ,GAAG,CAAC,WAAW,GAAGG,EAAE,CAAC;IACzC,IAAIjuD,KAAK,GAAGkuD,aAAa,CAACF,WAAW,CAAC;IACtC,IAAI,OAAQhuD,KAAM,IAAI,WAAW,EAAE;MAC/B,IAAImD,MAAM,GAAG4qD,cAAc,CAAC5qD,MAAM,KAAK4qD,cAAc,CAAC5qD,MAAM,GAAGC,QAAQ,CAAC81B,aAAa,CAAC,QAAQ,CAAC,CAAC;MAChG,IAAI6uB,OAAO,GAAG5kD,MAAM,CAAC6gC,UAAU,CAAC,IAAI,CAAC;MACrC+jB,OAAO,CAAC+D,IAAI,GAAGmC,EAAE,GAAG,gBAAgB;MACpC,IAAIE,MAAM,GAAGpG,OAAO,CAACgE,WAAW,CAACiC,WAAW,CAAC;MAC7ChuD,KAAK,GAAG+nD,OAAO,CAACgE,WAAW,CAACiC,WAAW,CAAC,CAAChuD,KAAK;MAC9CkuD,aAAa,CAACF,WAAW,CAAC,GAAGhuD,KAAK;IACtC;IACA,OAAOA,KAAK;EAChB;EAEA,SAASouD,gBAAgBA,CAAC/1D,KAAK,EAAEmiD,QAAQ,EAAEJ,WAAW,EAAE;IACpDI,QAAQ,GAAGA,QAAQ,GAAG,EAAE;IACxB,IAAI;MACA,KAAK,IAAIljD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGu2D,YAAY,CAAC3kE,MAAM,EAAEoO,CAAC,EAAE,EAAE;QAC1C,IAAIE,CAAC,GAAGq2D,YAAY,CAACv2D,CAAC,CAAC;QACvB,IAAIE,CAAC,IAAI4iD,WAAW,EAAE;UAClB,IAAI8T,aAAa,GAAGJ,GAAG,CAAC,eAAe,GAAGt2D,CAAC,CAAC;UAC5C,IAAIwI,KAAK,GAAGkuD,aAAa,CAAC71D,KAAK,CAAC;UAEhC,IAAI,OAAQ2H,KAAM,IAAI,WAAW,EAAE;YAC/BA,KAAK,GAAG,CAAC;YACT,KAAK,IAAI2F,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGtN,KAAK,CAACnP,MAAM,EAAEyc,CAAC,EAAE,EACjC3F,KAAK,IAAI+tD,cAAc,CAAC11D,KAAK,CAACg2D,MAAM,CAAC1oD,CAAC,CAAC,EAAEnO,CAAC,CAAC;YAC/CwI,KAAK,GAAG2c,IAAI,CAACo+B,KAAK,CAAC/6C,KAAK,CAAC,GAAG,CAAC;YAC7BkuD,aAAa,CAAC71D,KAAK,CAAC,GAAG2H,KAAK;UAChC;UAEA,IAAIA,KAAK,GAAGw6C,QAAQ,EAChB,OAAOhjD,CAAC;QAChB;MACJ;MACA,OAAOo2D,MAAM;IACjB,CAAC,CACD,OAAOvpD,CAAC,EAAE;MACN,OAAO+1C,WAAW;IACtB;EACJ;EAEA,SAASkU,iBAAiBA,CAACj2D,KAAK,EAAEk2D,SAAS,EAAEnU,WAAW,EAAE;IACtD,IAAI;MACA,KAAK,IAAI9iD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGu2D,YAAY,CAAC3kE,MAAM,EAAEoO,CAAC,EAAE,EAAE;QAC1C,IAAIE,CAAC,GAAGq2D,YAAY,CAACv2D,CAAC,CAAC;QACvB,IAAIE,CAAC,IAAI4iD,WAAW,EAAE;UAClB,IAAIn6C,MAAM,GAAGuuD,aAAa,CAACn2D,KAAK,EAAEb,CAAC,CAAC;UAEpC,IAAIyI,MAAM,GAAGsuD,SAAS,EAClB,OAAO/2D,CAAC;QAChB;MACJ;MACA,OAAOo2D,MAAM;IACjB,CAAC,CACD,OAAOvpD,CAAC,EAAE;MACN,OAAO+1C,WAAW;IACtB;EACJ;EAEA,SAASoU,aAAaA,CAACxjE,IAAI,EAAEijE,EAAE,EAAE;IAC7B,IAAI9qD,MAAM,GAAGqrD,aAAa,CAACrrD,MAAM,KAAKqrD,aAAa,CAACrrD,MAAM,GAAGC,QAAQ,CAAC81B,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC9F,IAAI6uB,OAAO,GAAG5kD,MAAM,CAAC6gC,UAAU,CAAC,IAAI,CAAC;IACrC+jB,OAAO,CAAC+D,IAAI,GAAGmC,EAAE,GAAG,gBAAgB;IAEpC,IAAIQ,WAAW,GAAGtrD,MAAM,CAACnD,KAAK;IAC9B,IAAI0uD,YAAY,GAAGvrD,MAAM,CAAClD,MAAM;;IAEhC;IACA8nD,OAAO,CAAC4G,SAAS,GAAG,MAAM;IAC1B5G,OAAO,CAAC6G,YAAY,GAAG,KAAK;IAC5B7G,OAAO,CAAC8G,QAAQ,CAAC7jE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;;IAE7B;IACA;IACA;IACA,IAAIhE,IAAI,GAAG+gE,OAAO,CAAC+G,YAAY,CAAC,CAAC,EAAE,CAAC,EAAEL,WAAW,EAAEC,YAAY,CAAC,CAAC1nE,IAAI;IAErE,IAAI+nE,MAAM,GAAG,CAAC,CAAC;IACf,IAAIC,KAAK,GAAG,CAAC,CAAC;;IAEd;IACA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGP,YAAY,EAAEO,CAAC,EAAE,EAAE;MACnC;MACA,KAAK,IAAInmE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG2lE,WAAW,EAAE3lE,CAAC,EAAE,EAAE;QAClC,IAAIomE,KAAK,GAAGloE,IAAI,CAAC,CAAEynE,WAAW,GAAGQ,CAAC,GAAInmE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEjD,IAAIomE,KAAK,GAAG,CAAC,EAAE;UACXH,MAAM,GAAGE,CAAC;UACV;UACA;QACJ;MACJ;MACA,IAAIF,MAAM,IAAI,CAAC,EAAE;QACb;QACA;MACJ;IAEJ;;IAEA;IACA,KAAK,IAAIE,CAAC,GAAGP,YAAY,EAAEO,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAAE;MACnC;MACA,KAAK,IAAInmE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG2lE,WAAW,EAAE3lE,CAAC,EAAE,EAAE;QAClC,IAAIomE,KAAK,GAAGloE,IAAI,CAAC,CAAEynE,WAAW,GAAGQ,CAAC,GAAInmE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjD,IAAIomE,KAAK,GAAG,CAAC,EAAE;UACXF,KAAK,GAAGC,CAAC;UACT;UACA;QACJ;MACJ;MACA,IAAID,KAAK,IAAI,CAAC,EAAE;QACZ;QACA;MACJ;IAEJ;IAEA,OAAOA,KAAK,GAAGD,MAAM;EACzB;EAEA,IAAI,CAACI,cAAc,GAAG,UAAU3yD,MAAM,EAAE4yD,KAAK,EAAEhV,WAAW,EAAEiV,OAAO,EAAEC,WAAW,EAAE;IAC9E,IAAIhhD,GAAG,GAAG1nB,CAAC,CAAC,GAAG,GAAG4V,MAAM,GAAG,UAAU,CAAC;IAEtC,IAAI8R,GAAG,CAACpI,EAAE,CAAC,UAAU,CAAC,EAAE;MACpB;;MAEA;MACA,IAAImpD,OAAO,IAAI,IAAI,IAAIA,OAAO,IAAI57D,SAAS,EAAE;QACzC47D,OAAO,GAAG,CAAC;MACf;MAEA,IAAIC,WAAW,IAAI,IAAI,IAAIA,WAAW,IAAI77D,SAAS,EAAE;QACjD67D,WAAW,GAAG,KAAK;MACvB;MAEA,IAAInV,UAAU,GAAGiV,KAAK,GAAG,UAAU;MACnC;MACA,IAAI/U,QAAQ,GAAGzzD,CAAC,CAAC,GAAG,GAAG4V,MAAM,GAAG,YAAY,GAAG29C,UAAU,CAAC;MAC1D,IAAIE,QAAQ,CAACnxD,MAAM,GAAG,CAAC,EAAE;QACrB,IAAIolB,GAAG,GAAG+rC,QAAQ,CAACI,KAAK,CAAC,CAAC,CAAClsC,OAAO,CAAC,GAAG,GAAG/R,MAAM,GAAG,UAAU,CAAC;QAC7D,IAAIg+C,QAAQ,GAAGlsC,GAAG,CAACtO,KAAK,CAAC,CAAC;QAC1B,IAAIuuD,SAAS,GAAGjgD,GAAG,CAACrO,MAAM,CAAC,CAAC;;QAE5B;QACA;;QAEAo6C,QAAQ,CAACtxD,IAAI,CAAC,YAAY;UACtB,IAAI2vC,GAAG,GAAG,IAAI;UACd,IAAI5sC,GAAG,GAAG4sC,GAAG,CAAC62B,SAAS;UACvB,IAAIzjE,GAAG,IAAI,IAAI,IAAIA,GAAG,IAAI,EAAE,EAAE;YAC1B,IAAI0jE,SAAS,GAAGpB,gBAAgB,CAACtiE,GAAG,EAAE0uD,QAAQ,EAAEJ,WAAW,CAAC;YAC5D,IAAIqV,UAAU,GAAG,CAAC;YAClB,IAAIt5C,IAAI,GAAG,CAAC;YACZ,IAAIm5C,WAAW,EAAE;cACbG,UAAU,GAAGnB,iBAAiB,CAACxiE,GAAG,EAAEyiE,SAAS,EAAEnU,WAAW,CAAC;cAC3DjkC,IAAI,GAAGwG,IAAI,CAACgxC,GAAG,CAAC6B,SAAS,EAAEC,UAAU,CAAC;YAC1C,CAAC,MACI;cACDt5C,IAAI,GAAGq5C,SAAS;YACpB;YAEAr5C,IAAI,GAAGwG,IAAI,CAACuwC,GAAG,CAAC/2C,IAAI,EAAEk5C,OAAO,CAAC;YAE9B,IAAI/U,SAAS,GAAG,cAAc,GAAG,CAACnkC,IAAI,GAAG,EAAE,EAAE1T,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;YAC9D,IAAIvE,GAAG,GAAGw6B,GAAG,CAAC4hB,SAAS,CAACj8C,IAAI,CAAC,CAAC,CAACF,KAAK,CAAC,GAAG,CAAC;YACzC,IAAIuxD,GAAG,GAAGxxD,GAAG,CAACrV,MAAM,CAAC,UAAUsvC,CAAC,EAAE;cAAE,OAAOA,CAAC,KAAKmiB,SAAS;YAAE,CAAC,CAAC;YAE9D,IAAIoV,GAAG,CAACxmE,MAAM,IAAI,CAAC,EAAE;cACjB,IAAIymE,IAAI,GAAGzxD,GAAG,CAACrV,MAAM,CAAC,UAAUsvC,CAAC,EAAE;gBAAE,OAAOA,CAAC,CAAChmC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC;cAAE,CAAC,CAAC;cAC9Ew9D,IAAI,CAACxmE,IAAI,CAACmxD,SAAS,CAAC;cACpB5hB,GAAG,CAAC4hB,SAAS,GAAGqV,IAAI,CAACl4D,IAAI,CAAC,GAAG,CAAC;YAClC;UACJ;QACJ,CAAC,CAAC;MACN;;MAEA;IACJ,CAAC,MAAM;MACJ;IAAA;EAEP,CAAC;EAED,IAAI,CAAC8iD,WAAW,GAAG,UAAU/9C,MAAM,EAAE4yD,KAAK,EAAEhV,WAAW,EAAE;IACrD,IAAID,UAAU,GAAGiV,KAAK,GAAG,UAAU;IACnC,IAAI/U,QAAQ,GAAGzzD,CAAC,CAAC,GAAG,GAAGuzD,UAAU,CAAC;IAClC,IAAIE,QAAQ,CAACnxD,MAAM,GAAG,CAAC,EAAE;MACrB,IAAIsxD,QAAQ,GAAGH,QAAQ,CAACI,KAAK,CAAC,CAAC,CAAClsC,OAAO,CAAC,GAAG,GAAG/R,MAAM,GAAG,UAAU,CAAC,CAACwD,KAAK,CAAC,CAAC;MAC1E,IAAIuuD,SAAS,GAAGlU,QAAQ,CAACI,KAAK,CAAC,CAAC,CAAClsC,OAAO,CAAC,GAAG,GAAG/R,MAAM,GAAG,UAAU,CAAC,CAACyD,MAAM,CAAC,CAAC;MAE5Eo6C,QAAQ,CAACtxD,IAAI,CAAC,UAAUC,GAAG,EAAEtG,EAAE,EAAE;QAC7B,IAAIg2C,GAAG,GAAG,IAAI;QACd,KAAK,IAAIphC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGu2D,YAAY,CAAC3kE,MAAM,EAAEoO,CAAC,EAAE,EAAE;UAC1C,IAAIE,CAAC,GAAGq2D,YAAY,CAACv2D,CAAC,CAAC;UACvB,IAAIE,CAAC,IAAI4iD,WAAW,EAAE;YAClB,IAAIE,SAAS,GAAGH,UAAU;YAC1B,IAAI3iD,CAAC,IAAI4iD,WAAW,EAChBE,SAAS,IAAI,GAAG,GAAG,cAAc,GAAG,CAAC9iD,CAAC,GAAG,EAAE,EAAEiL,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;YAClE,IAAIi2B,GAAG,CAAC4hB,SAAS,CAACj8C,IAAI,CAAC,CAAC,IAAIi8C,SAAS,EAAE;cACnC5hB,GAAG,CAAC4hB,SAAS,GAAGA,SAAS;YAC7B;YAEA,IAAII,OAAO,GAAGh4D,EAAE,CAACi4D,WAAW;YAC5B,IAAI1D,QAAQ,GAAGv0D,EAAE,CAACktE,YAAY;YAC9B,IAAIlV,OAAO,GAAGF,QAAQ,IAAIvD,QAAQ,GAAGsX,SAAS,EAAE;cAC5C;YACJ,CAAC,MACI;cACD;cACA;YACJ;UACJ;QACJ;MACJ,CAAC,CAAC;IACN;EACJ,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;;;;;;;;;ACnOP,SAASsB,0BAA0BA,CAAA,EAAE;EACjC,IAAGjpE,CAAC,CAAC,gBAAgB,CAAC,CAACsC,MAAM,GAAC,CAAC,EAAC;IAC5B,IAAI4mE,cAAc,GAAGlpE,CAAC,CAAC,gBAAgB,CAAC,CAACynB,MAAM,CAAC,CAAC,CAACK,GAAG;IACrD,IAAIqhD,eAAe,GAAGnpE,CAAC,CAAC,gBAAgB,CAAC,CAACynB,MAAM,CAAC,CAAC,CAAClO,IAAI;IACvD,IAAI6vD,SAAS,GAAGppE,CAAC,CAAC,gBAAgB,CAAC,CAACqZ,MAAM,CAAC,CAAC;IAC5C,IAAIgwD,UAAU,GAAGrpE,CAAC,CAAC,sCAAsC,CAAC,CAACoZ,KAAK,CAAC,CAAC;IAClE8vD,cAAc,GAAGA,cAAc,GAAIE,SAAS,GAAC,CAAE;IAC/C,IAAIE,qBAAqB,GAAGH,eAAe,GAAGE,UAAU;IACxDrpE,CAAC,CAAC,sCAAsC,CAAC,CAACynB,MAAM,CAAC;MAAClO,IAAI,EAAC+vD;IAAqB,CAAC,CAAC;IAC9EtpE,CAAC,CAAC,0BAA0B,CAAC,CAACynB,MAAM,CAAC;MAACK,GAAG,EAACohD,cAAc;MAAE3vD,IAAI,EAAC4vD;IAAe,CAAC,CAAC;EACpF;AACJ;AAEO,SAAS/nE,WAAWA,CAACmoE,cAAc,EAAEC,YAAY,EAAEC,cAAc,EAAE;EACtE;EACA;EACA;EACA,IAAM9F,GAAG,GAAG3jE,CAAC,CAAC,sCAAsC,CAAC;EACrD,IAAI2jE,GAAG,CAACrhE,MAAM,GAAG,CAAC,EAAE;IAChB,IAAI88B,CAAC,GAAG,CACR,CAAC;IACD,IAAI,OAAQmqC,cAAe,KAAK,UAAU,EACtCnqC,CAAC,CAACmqC,cAAc,GAAGA,cAAc;IACjC,IAAI,OAAQE,cAAe,KAAK,UAAU,EAC1CrqC,CAAC,CAACqqC,cAAc,GAAGA,cAAc;IACrC,IAAI,OAAQD,YAAa,KAAK,UAAU,EACpCpqC,CAAC,CAACoqC,YAAY,GAAGA,YAAY;IACjC7F,GAAG,CAAC7/D,MAAM,CAACs7B,CAAC,CAAC;EACjB;AACJ;AAEO,SAASsqC,YAAYA,CAAA,EAAG;EAC5B;AACH;AACA;AAFG;AAMI,SAASC,gBAAgBA,CAAA,EAAG;EAC/BV,0BAA0B,CAAC,CAAC;EAC5BjpE,CAAC,CAACzE,MAAM,CAAC,CAAC20D,EAAE,CAAC,QAAQ,EAAE,YAAY;IAAE+Y,0BAA0B,CAAC,CAAC;EAAC,CAAC,CAAC;EACpEjpE,CAAC,CAAC,qBAAqB,CAAC,CAACkwD,EAAE,CAAC,gBAAgB,EAAE,YAAY;IAAE+Y,0BAA0B,CAAC,CAAC;EAAC,CAAC,CAAC;EAE3FjpE,CAAC,CAAC,kCAAkC,CAAC,CAAC0V,KAAK,CAAC,YAAY;IACpD1V,CAAC,CAAC,IAAI,CAAC,CAAC2nB,OAAO,CAAC,2BAA2B,CAAC,CAACo3C,WAAW,CAAC,QAAQ,CAAC;EACtE,CAAC,CAAC;EAEF2K,YAAY,CAAC,CAAC;EAEdtoE,WAAW,CAAC,CAAC;AACjB;AAEO,SAASm1B,iBAAiBA,CAACqzC,2BAA2B,EAAEC,IAAI,EAAE;EACjE,IAAMC,KAAK,GAAGD,IAAI,IAAI7pE,CAAC,CAAC,2LAA2L,CAAC;EACpN,IAAM+pE,QAAQ,GAAG,SAAXA,QAAQA,CAAIC,UAAU,EAAK;IAC7B,IAAMC,WAAW,GAAGD,UAAU,CAACjgB,SAAS,CAAC,CAAC,IAAKigB,UAAU,CAACjgB,SAAS,CAAC,CAAC,GAAGigB,UAAU,CAAC,CAAC,CAAC,CAAChgB,YAAY,GAAGggB,UAAU,CAAC1Z,WAAW,CAAC,CAAC,GAAG,EAAG;IACnI,IAAI2Z,WAAW,EAAE;MACbL,2BAA2B,CAAC,CAAC;IACjC;EACJ,CAAC;EACDE,KAAK,CAAC5Z,EAAE,CAAC,QAAQ,EAAE,UAACzyC,CAAC;IAAA,OAAKssD,QAAQ,CAAC/pE,CAAC,CAACyd,CAAC,CAACpX,MAAM,CAAC,CAAC;EAAA,EAAC;;EAEhD;EACA,IAAMg1D,KAAK,GAAGr7D,CAAC,CAAC,eAAe,CAAC;EAChC,IAAIq7D,KAAK,CAAC/4D,MAAM,IAAK+4D,KAAK,CAAChiD,MAAM,CAAC,CAAC,GAAGgiD,KAAK,CAACzlD,MAAM,CAAC,CAAC,CAACyD,MAAM,CAAC,CAAE,EAAE;IACxDuwD,2BAA2B,CAAC,CAAC;EACrC;AACJ;AAEAruE,MAAM,CAAC6F,WAAW,GAAGA,WAAW;AAChC7F,MAAM,CAACg7B,iBAAiB,GAAGA,iBAAiB,C;;;;;;;;;;;;;;;;;ACxEN;AACI;AAEd;AAE5Bv6B,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,kBAAkB,EACnD,CAAC,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAC5G,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,gBAAgB,EAAE,qBAAqB,EACnF,UAAUC,MAAM,EAAEC,UAAU,EAAEupB,YAAY,EAAEK,SAAS,EAAEppB,cAAc,EAAEmpB,SAAS,EAAEvpB,aAAa,EAAEG,QAAQ,EACrGN,aAAa,EAAEC,YAAY,EAAEyjE,OAAO,EAAEoK,cAAc,EAAEC,mBAAmB,EAAE;EAC3EjuE,MAAM,CAACkuE,QAAQ,GAAG,IAAIC,QAAQ,CAAC,CAAC;EAEhCnuE,MAAM,CAACouE,QAAQ,GAAG,KAAK,CAAC,CAAC;EACzBpuE,MAAM,CAACquE,eAAe,GAAG,EAAE;EAC3BruE,MAAM,CAAColC,oBAAoB,GAAG,IAAI;EAClCplC,MAAM,CAACsuE,QAAQ,GAAG,KAAK;EACvBtuE,MAAM,CAACT,MAAM,GAAGW,aAAa,CAACX,MAAM;EACpCS,MAAM,CAACqB,QAAQ,GAAGnB,aAAa,CAACmB,QAAQ;EACxCrB,MAAM,CAACuuE,SAAS,GAAG,EAAE;EAErBvuE,MAAM,CAACwuE,WAAW,GAAG,IAAI;EACzBxuE,MAAM,CAACyuE,aAAa,GAAG,IAAI;EAC3BzuE,MAAM,CAAC0uE,eAAe,GAAG,IAAI;EAC7B1uE,MAAM,CAAC2uE,gBAAgB,GAAG,CAAC,CAAC;EAC5B3uE,MAAM,CAAC4uE,SAAS,GAAG,CACf;IACIC,IAAI,EAAE,yBAAyB;IAC/Bj5D,KAAK,EAAE;EACX,CAAC,EACD;IACIi5D,IAAI,EAAE,0BAA0B;IAChCj5D,KAAK,EAAE;EACX;EACD;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAXe,CAYF;EAED5V,MAAM,CAAC8uE,UAAU,GAAG,KAAK;EACzB9uE,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAC7ClE,MAAM,CAAC8uE,UAAU,GAAG5qE,IAAI,CAAC4qE,UAAU;IAEnC,IAAI9uE,MAAM,CAAC8uE,UAAU,IAAI,IAAI,EAAE;MAC3BC,gBAAgB,CAAC,CAAC;MAElBjrE,CAAC,CAACzE,MAAM,CAAC,CAAC20D,EAAE,CAAC,QAAQ,EAAE+a,gBAAgB,CAAC;IAC5C;EACJ,CAAC,CAAC;EAEF/uE,MAAM,CAAC0I,MAAM,CAAC,wBAAwB,EAClC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B5I,MAAM,CAACqB,QAAQ,GAAGsH,QAAQ;IAE1B3I,MAAM,CAACgvE,cAAc,GAAGhvE,MAAM,CAACqB,QAAQ,GAAG,EAAE,GAAGZ,cAAc,CAACe,SAAS,CAAC,kCAAkC,CAAC;IAE3G,IAAImH,QAAQ,IAAIC,QAAQ,IAAI5I,MAAM,CAACqB,QAAQ,EAAE;MACzC2sE,cAAc,CAAC9rD,UAAU,CAAC,CAAC;IAC/B;EACJ,CACJ,CAAC;EAED,SAAS6sD,gBAAgBA,CAAA,EAAG;IACxB,IAAIjrE,CAAC,CAAC,iBAAiB,CAAC,CAACsf,EAAE,CAAC,UAAU,CAAC,EAAE;MACrC,IAAIljB,aAAa,CAAC+I,cAAc,IAAI,KAAK,EAAE;QACvCjE,OAAO,CAACC,GAAG,CAAC,qBAAqB,CAAC;MACtC;MACA/E,aAAa,CAAC+I,cAAc,GAAG,KAAK;IACxC,CAAC,MACI;MACD,IAAI/I,aAAa,CAAC+I,cAAc,IAAI,IAAI,EAAE;QACtCjE,OAAO,CAACC,GAAG,CAAC,oBAAoB,CAAC;MACrC;MACA/E,aAAa,CAAC+I,cAAc,GAAG,IAAI;IACvC;EACJ;EAEAzI,QAAQ,CAAC,YAAY;IACjB0E,sDAAW,CAAC,CAAC;EACjB,CAAC,CAAC;EAEFlF,MAAM,CAACqC,GAAG,CAAC,oBAAoB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACpDlE,MAAM,CAACwuE,WAAW,GAAGtqE,IAAI,CAACsqE,WAAW;EACzC,CAAC,CAAC;EAEFxuE,MAAM,CAACqC,GAAG,CAAC,sBAAsB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACtDlE,MAAM,CAACyuE,aAAa,GAAGvqE,IAAI,CAAC+qE,UAAU;IACtCjvE,MAAM,CAAC0uE,eAAe,GAAGxqE,IAAI,CAACupC,YAAY;IAE1CztC,MAAM,CAACkvE,WAAW,CAAC,CAAC;EACxB,CAAC,CAAC;EAEFlvE,MAAM,CAACqC,GAAG,CAAC,uBAAuB,EAAE,UAAUC,KAAK,EAAE;IACjDtC,MAAM,CAACmvE,cAAc,CAAC,CAAC;EAC3B,CAAC,CAAC;EAEFnvE,MAAM,CAACmvE,cAAc,GAAG,YAAY;IAChCnvE,MAAM,CAAC2uE,gBAAgB,CAAC/4D,KAAK,GAAGnV,cAAc,CAAC2uE,kBAAkB,CAAC,CAAC;IACnE5uE,QAAQ,CAAC,YAAY;MACjBsD,CAAC,CAAC,iBAAiB,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IAC3C,CAAC,EAAE,CAAC,CAAC;IACL,IAAIqpB,cAAc,GAAG/pB,CAAC,CAAC,wBAAwB,CAAC;IAChDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;IACxCrtB,QAAQ,CAAC;MAAA,OAAM0E,qDAAW,CAAC,CAAC;IAAA,EAAC;EACjC,CAAC;EAGDlF,MAAM,CAACqvE,yBAAyB,GAAG,YAAY;IAC3C,IAAIxhD,cAAc,GAAG/pB,CAAC,CAAC,wBAAwB,CAAC;IAChDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAACsvE,2BAA2B,GAAG,YAAY;IAC7C,IAAItvE,MAAM,CAACuvE,2BAA2B,EAClCvvE,MAAM,CAACuvE,2BAA2B,CAACC,OAAO,CAAC,QAAQ,CAAC;EAC5D,CAAC;EAEDxvE,MAAM,CAACyvE,WAAW,GAAG,YAAY;IAC7BhvE,cAAc,CAACivE,kBAAkB,CAAC1vE,MAAM,CAAC2uE,gBAAgB,CAAC/4D,KAAK,CAAC;IAChEvW,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,iBAAiB,EAAEz3B,MAAM,CAAC2uE,gBAAgB,CAAC/4D,KAAK,CAAC;IAC7E3V,UAAU,CAAC+K,UAAU,CAAC,gBAAgB,CAAC;EAC3C,CAAC;EAEDhL,MAAM,CAACqC,GAAG,CAAC,uBAAuB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACvDlE,MAAM,CAACquE,eAAe,GAAGnqE,IAAI,CAAC+lB,QAAQ;EAC1C,CAAC,CAAC;;EAEF;EACAjqB,MAAM,CAACqC,GAAG,CAAC,+BAA+B,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAC/D1D,QAAQ,CAAC,YAAY;MACjBR,MAAM,CAAColC,oBAAoB,GAAGlhC,IAAI;IACtC,CAAC,CAAC;EACN,CAAC,CAAC;EAGFlE,MAAM,CAACqC,GAAG,CAAC,6BAA6B,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAC7D1D,QAAQ,CAAC,YAAY;MACjB,IAAI0D,IAAI,KAAK,UAAU,EAAE;QACrBlE,MAAM,CAACsuE,QAAQ,GAAG,IAAI;MAC1B,CAAC,MACI;QACDtuE,MAAM,CAACsuE,QAAQ,GAAG,KAAK;MAC3B;IACJ,CAAC,CAAC;EACN,CAAC,CAAC;EAEFtuE,MAAM,CAAC2vE,MAAM,GAAG,YAAY;IACxB3c,UAAU,CAAC,YAAY;MACnBlvD,CAAC,CAAC,eAAe,CAAC,CAAC8rE,QAAQ,CAAC,QAAQ,CAAC;IACzC,CAAC,CAAC;IAEF3vE,UAAU,CAAC+K,UAAU,CAAC,eAAe,CAAC;IAEtCijE,mBAAmB,CAAC4B,MAAM,CAAC,CAAC;EAEhC,CAAC;EAED7vE,MAAM,CAACqC,GAAG,CAAC,eAAe,EAAE,UAAUC,KAAK,EAAE;IACzCknB,YAAY,CAACmmD,MAAM,CAAC,CAAC;IACrB7rE,CAAC,CAACO,SAAS,CAAC,CAAC;IACb,IAAIyrE,GAAG,GAAGjmD,SAAS,CAACiD,IAAI,CAAC,CAAC;IAC1B,IAAIgjD,GAAG,IAAI,OAAO,EACdjmD,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC,CAAC,KAExB7sB,UAAU,CAAC+K,UAAU,CAAC,YAAY,CAAC;EAC3C,CAAC,CAAC;EAEFhL,MAAM,CAACqC,GAAG,CAAC,qBAAqB,EAAE,UAAUC,KAAK,EAAE;IAC/CtC,MAAM,CAAC+vE,YAAY,CAAC,CAAC;EACzB,CAAC,CAAC;EACF/vE,MAAM,CAAC+vE,YAAY,GAAG,YAAY;IAC9B7vE,aAAa,CAACgkC,oBAAoB,GAAG,KAAK;IAC1CjkC,UAAU,CAAC+K,UAAU,CAAC,eAAe,CAAC;EAC1C,CAAC;EAEDhL,MAAM,CAACgwE,UAAU,GAAG,UAAUh3D,GAAG,EAAE;IAC/B3Y,aAAa,CAAC0K,YAAY,CAAC,CAAC;IAC5B,IAAIjH,CAAC,CAAC,0BAA0B,CAAC,CAACsC,MAAM,IAAI,CAAC,EACzCnG,UAAU,CAAC+K,UAAU,CAAC,gBAAgB,CAAC;IAC3C,OAAO,KAAK;EAChB,CAAC;;EAED;EACAhL,MAAM,CAACqC,GAAG,CAAC,mBAAmB,EAAE,UAAUwwD,KAAK,EAAEod,IAAI,EAAEC,OAAO,EAAE;IAC5D,IAAI,CAAC,CAACA,OAAO,CAACC,OAAO,IAAI,CAAC,CAACF,IAAI,CAACE,OAAO,IACnCD,OAAO,CAACC,OAAO,CAACC,YAAY,IAAIH,IAAI,CAACE,OAAO,CAACC,YAAY,EAAE;MAC3DtsE,CAAC,CAACC,OAAO,CAAC,CAAC;MACXD,CAAC,CAAC,wBAAwB,CAAC,CAAC6D,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;IACzD;EACJ,CAAC,CAAC;;EAEF;EACA3H,MAAM,CAACqC,GAAG,CAAC,qBAAqB,EAAE,UAAUwwD,KAAK,EAAEod,IAAI,EAAEC,OAAO,EAAE;IAC9D,IAAI,CAAC,CAACA,OAAO,IAAI,CAAC,CAACA,OAAO,CAACC,OAAO,IAAI,CAAC,CAACF,IAAI,CAACE,OAAO,IAChDD,OAAO,CAACC,OAAO,CAACC,YAAY,IAAIH,IAAI,CAACE,OAAO,CAACC,YAAY,EAAE;MAC3DpwE,MAAM,CAACkvE,WAAW,CAAC,CAAC;IACxB;EACJ,CAAC,CAAC;EAEFlvE,MAAM,CAACkvE,WAAW,GAAG,YAAW;IAC5B,IAAImB,GAAG,GAAGvsE,CAAC,CAAC,wBAAwB,CAAC,CAAC6D,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI7D,CAAC,CAAC,wBAAwB,CAAC,CAAC6D,IAAI,CAAC,IAAI,CAAC,IAAI,aAAa,EAAE;MACzDnH,QAAQ,CAAC,YAAY;QACjBsD,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,EAAE,GAAG,CAAC;IACX;IAEArE,MAAM,CAACouE,QAAQ,GAAG,KAAK;IACvB,IAAIkC,GAAG,GAAGxsE,CAAC,CAAC,WAAW,CAAC;IACxB,IAAIwsE,GAAG,CAAClqE,MAAM,IAAI,CAAC,EAAE;MACjB,IAAIgO,KAAK,GAAGk8D,GAAG,CAACpoE,IAAI,CAAC,CAAC;MACtB,IAAIkM,KAAK,IAAI,YAAY,EAAE;QACvBpU,MAAM,CAACuuE,SAAS,GAAGvuE,MAAM,CAAC0uE,eAAe;QACzC1uE,MAAM,CAACouE,QAAQ,GAAG,IAAI;MAC1B,CAAC,MACI;QACDpuE,MAAM,CAACuuE,SAAS,GAAGn6D,KAAK;MAC5B;IACJ,CAAC,MACI;MACDpU,MAAM,CAACuuE,SAAS,GAAG,EAAE;IACzB;EACJ,CAAC;EAEDvuE,MAAM,CAACqC,GAAG,CAAC,mBAAmB,EAAE,UAAUwwD,KAAK,EAAEod,IAAI,EAAEC,OAAO,EAAE;IAC5DpsE,CAAC,CAACO,SAAS,CAAC,CAAC;EACjB,CAAC,CAAC;EAEFrE,MAAM,CAACuwE,UAAU,GAAG,IAAI;EAExBvwE,MAAM,CAACqC,GAAG,CAAC,mBAAmB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACnDlE,MAAM,CAACuwE,UAAU,GAAGrsE,IAAI;EAC5B,CAAC,CAAC;EAGFlE,MAAM,CAACqC,GAAG,CAAC,mBAAmB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACnD,IAAIkQ,KAAK,GAAG3T,cAAc,CAACe,SAAS,CAAC,OAAO,CAAC;IAC7C,IAAI2C,GAAG,GAAG1D,cAAc,CAACe,SAAS,CAAC,6OAA6O,CAAC;IACjRrB,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,YAAY;MACpC3D,QAAQ,CAAC,YAAY;QACjBP,UAAU,CAAC+K,UAAU,CAAC,eAAe,CAAC;QAEtCijE,mBAAmB,CAAC4B,MAAM,CAAC,CAAC;MAEhC,CAAC,CAAC;IACN,CAAC,EAAEz7D,KAAK,CAAC;EAEb,CAAC,CAAC;EAEF,IAAIo8D,mBAAmB;EACvBxwE,MAAM,CAACqC,GAAG,CAAC,gCAAgC,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAEhE,IAAI4oB,IAAI,GAAGjD,SAAS,CAACiD,IAAI,CAAC,CAAC;IAC3B,IAAIA,IAAI,KAAK,OAAO,EAAE;MAClBhpB,CAAC,CAACO,SAAS,CAAC,CAAC;MACbmsE,mBAAmB,CAACpV,KAAK,CAAC,MAAM,CAAC;MACjCoV,mBAAmB,GAAG,IAAI;IAC9B,CAAC,MAAM;MACHvwE,UAAU,CAAC+K,UAAU,CAAC,aAAa,EAAE;QAAEowD,KAAK,EAAEoV;MAAoB,CAAC,CAAC;IACxE;EAEJ,CAAC,CAAC;EAGVxwE,MAAM,CAACqC,GAAG,CAAC,uBAAuB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACvD,IAAI,CAACslB,YAAY,CAACW,UAAU,CAAC,CAAC,EAC1B;IAEL,IAAI/V,KAAK,GAAG3T,cAAc,CAACe,SAAS,CAAC,iBAAiB,CAAC;IACvDsC,CAAC,CAACC,OAAO,CAAC,CAAC;IAEFysE,mBAAmB,GAAGnwE,aAAa,CAACowE,cAAc,CAAC;MAC/Cr8D,KAAK,EAAE,EAAE;MACTqiC,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,uEAAuE;IAC1G,CAAC,CAAC;IAEFhB,QAAQ,CAAC,YAAY;MACjBP,UAAU,CAAC+K,UAAU,CAAC,cAAc,EAChC;QACIinB,WAAW,EAAE/xB,aAAa,CAACqkC,OAAO;QAClCpW,QAAQ,EAAEjuB,aAAa,CAACiuB,QAAQ;QAChCoE,QAAQ,EAAEryB,aAAa,CAACqyB,QAAQ;QAChCm+C,QAAQ,EAAE;MACd,CAAC,CAAC;IACV,CAAC,CAAC;EAEN,CAAC,CAAC;EAEF,IAAIC,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAAA,EAAe;IACpC,IAAIb,GAAG,GAAGjmD,SAAS,CAACiD,IAAI,CAAC,CAAC;IAC1B9nB,OAAO,CAACC,GAAG,CAAC6qE,GAAG,CAAC;IAChB,IAAIA,GAAG,KAAK,OAAO,EAAE;MACjBlM,OAAO,CAACgN,QAAQ,CAACC,MAAM,CAAC,CAAC;IAC7B,CAAC,MACI;MACD,IAAIhjD,cAAc,GAAG/pB,CAAC,CAAC,qBAAqB,CAAC;MAC7CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;IAC5C;EACJ,CAAC;EAED7tB,MAAM,CAACqC,GAAG,CAAC,kBAAkB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAClDysE,qBAAqB,CAAC,CAAC;EAC3B,CAAC,CAAC;EAGF3wE,MAAM,CAAC8wE,sBAAsB,GAAG,YAAY;IACxC,IAAIjjD,cAAc,GAAG/pB,CAAC,CAAC,qBAAqB,CAAC;IAC7CzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAGD7tB,MAAM,CAAC+wE,WAAW,GAAG,YAAY;IAC7BnN,OAAO,CAACgN,QAAQ,CAACC,MAAM,CAAC,CAAC;EAC7B,CAAC;EAED7wE,MAAM,CAACqC,GAAG,CAAC,4BAA4B,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAC5D,IAAI2pB,cAAc,GAAG/pB,CAAC,CAAC,6BAA6B,CAAC;IACrDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC,CAAC;EAEF7tB,MAAM,CAACgxE,4BAA4B,GAAG,YAAY;IAC9C,IAAInjD,cAAc,GAAG/pB,CAAC,CAAC,6BAA6B,CAAC;IACrDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAAC6P,iBAAiB,GAAG,YAAY;IACnCrP,QAAQ,CAAC,YAAY;MACjBP,UAAU,CAAC+K,UAAU,CAAC,8BAA8B,CAAC;IACzD,CAAC,CAAC;EACN,CAAC;;EAED;EACAhL,MAAM,CAACixE,UAAU,GAAG1/B,mDAAM,CAACw0B,SAAS;EACpC/lE,MAAM,CAACqC,GAAG,CAACkvC,mDAAM,CAACo0B,wBAAwB,EAAE,UAAUrjE,KAAK,EAAE4B,IAAI,EAAE;IAC/D,IAAIA,IAAI,KAAKlE,MAAM,CAACixE,UAAU,EAC9B;MACI,IAAI/sE,IAAI,KAAKqtC,mDAAM,CAACq0B,0BAA0B,IAAI5lE,MAAM,CAACixE,UAAU,KAAK1/B,mDAAM,CAACs0B,uBAAuB,EAAE;QACpG7lE,MAAM,CAACixE,UAAU,GAAG1/B,mDAAM,CAACw0B,SAAS;MACxC,CAAC,MAAM;QACH/lE,MAAM,CAACixE,UAAU,GAAG/sE,IAAI;MAC5B;IACJ;EACJ,CAAC,CAAC;EAEFlE,MAAM,CAACkxE,aAAa,GAAG,IAAI;EAC3BlxE,MAAM,CAACqC,GAAG,CAAC,sBAAsB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACtDc,OAAO,CAACC,GAAG,CAAC,wBAAwB,GAAGf,IAAI,CAAC;IAC5ClE,MAAM,CAACkxE,aAAa,GAAGhtE,IAAI;EAC/B,CAAC,CAAC;EAEFlE,MAAM,CAACmxE,aAAa,GAAG,IAAI;EAC3BnxE,MAAM,CAACqC,GAAG,CAAC,sBAAsB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACtDc,OAAO,CAACC,GAAG,CAAC,wBAAwB,GAAGf,IAAI,CAAC;IAC5ClE,MAAM,CAACmxE,aAAa,GAAGjtE,IAAI;EAC/B,CAAC,CAAC;EAEFlE,MAAM,CAACoxE,UAAU,GAAG,IAAI;EACxBpxE,MAAM,CAACqC,GAAG,CAAC,mBAAmB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACnDc,OAAO,CAACC,GAAG,CAAC,qBAAqB,GAAGf,IAAI,CAAC;IACzClE,MAAM,CAACoxE,UAAU,GAAGltE,IAAI;EAC5B,CAAC,CAAC;EAEFlE,MAAM,CAACqC,GAAG,CAAC,eAAe,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAC/C,IAAI0W,GAAG,GAAG1W,IAAI,CAAC2W,OAAO;IACtB,IAAIvM,IAAI,GAAGpK,IAAI,CAACoK,IAAI;IACpB,IAAG,CAACA,IAAI,EACJA,IAAI,GAAG,SAAS;IACpBtO,MAAM,CAACkuE,QAAQ,CAACmD,IAAI,CAAC/iE,IAAI,EAAE,CACvBsM,GAAG,EACH,IAAI,EACJ,KAAK,EACL,QAAQ,CACX,EAAE,IAAI,CAAC;EACZ,CAAC,CAAC;EAEF5a,MAAM,CAACqC,GAAG,CAAC,gBAAgB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAChDlE,MAAM,CAACkuE,QAAQ,CAACoD,KAAK,CAAC,CAAC;EAC3B,CAAC,CAAC;AAEN,CAAC,CAAC,CAAC,C;;;;;;;;;;;;;;;;;;AClYqC;AACqC;AACd;AAC1B;AACH;AAE1CxxE,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAAC2jD,OAAO,CAAC,eAAe,EAAE,CAChD,YAAY,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAC1H,UAAUljD,UAAU,EAAEC,aAAa,EAAEypB,KAAK,EAAEK,OAAO,EAAEJ,SAAS,EAAEnpB,cAAc,EAAED,QAAQ,EAAEqpB,SAAS,EAAElpB,EAAE,EAAEmpB,OAAO,EAAE;EAC9G,IAAIzpB,aAAa,GAAG,CAAC,CAAC;EAEtB,SAASoxE,qBAAqBA,CAAA,EAAG;IAC7B,IAAI,CAACvtE,IAAI,GAAG,IAAI;EACpB;EAEAutE,qBAAqB,CAAC9e,SAAS,CAAC+e,GAAG,GAAG,UAAUC,CAAC,EAAE;IAC/C,IAAI,CAACztE,IAAI,GAAGytE,CAAC;EACjB,CAAC;EAEDF,qBAAqB,CAAC9e,SAAS,CAACnb,GAAG,GAAG,YAAY;IAC9C,OAAO,IAAI,CAACtzC,IAAI;EACpB,CAAC;EAED7D,aAAa,CAACuxE,2BAA2B,GAAG,YAAY;IACpD,OAAO,IAAIH,qBAAqB,CAAC,CAAC;EACtC,CAAC;EAEDpxE,aAAa,CAACwxE,OAAO,GAAG,EAAE;EAE1BxxE,aAAa,CAACiqB,eAAe,GAAG,UAAUkiC,IAAI,EAAE;IAC5C,IAAIvjC,MAAM,GAAG/oB,aAAa,CAACoY,UAAU,GAAG,QAAQ;IAChD2Q,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACvCsJ,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,OAAOmR,MAAM,CAACC,GAAG,CAACy7B,IAAI,CAAC,CAACslB,KAAK,CAAC,CAAC,CAAC7oD,MAAM,CAACA,MAAM,CAAC;EAClD,CAAC;EAED5oB,aAAa,CAAC0xE,mBAAmB,GAAG,UAAUvlB,IAAI,EAAE;IAChD,IAAIvjC,MAAM,GAAG/oB,aAAa,CAACoY,UAAU,GAAG,UAAU;IAClD2Q,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACvCsJ,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,OAAOmR,MAAM,CAACC,GAAG,CAACy7B,IAAI,CAAC,CAACslB,KAAK,CAAC,CAAC,CAAC7oD,MAAM,CAACA,MAAM,CAAC;EAClD,CAAC;EAED5oB,aAAa,CAAC2xE,2BAA2B,GAAG,UAAUxlB,IAAI,EAAE;IACxD,IAAIvjC,MAAM,GAAG/oB,aAAa,CAACoY,UAAU,GAAG,QAAQ;IAChD2Q,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACvCsJ,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,OAAOmR,MAAM,CAAC07B,IAAI,CAAC,CAACvjC,MAAM,CAACA,MAAM,CAAC;EACtC,CAAC;EAED5oB,aAAa,CAACkqB,eAAe,GAAG,UAAUiiC,IAAI,EAAEvjC,MAAM,EAAE;IACpD,OAAO6H,MAAM,CAACC,GAAG,CAACy7B,IAAI,CAAC,CAACslB,KAAK,CAAC,CAAC,CAAC7oD,MAAM,CAACA,MAAM,CAAC;EAClD,CAAC;EAED5oB,aAAa,CAACmqB,2BAA2B,GAAG,UAAUgiC,IAAI,EAAEvjC,MAAM,EAAE;IAChE,OAAO6H,MAAM,CAAC07B,IAAI,CAAC,CAACvjC,MAAM,CAACA,MAAM,CAAC;EACtC,CAAC;EAED5oB,aAAa,CAAC4xE,aAAa,GAAG,YAAY;IACtC,IAAIhpD,MAAM,GAAG/oB,aAAa,CAACoY,UAAU;IACrC,OAAO2Q,MAAM;EACjB,CAAC;EAED5oB,aAAa,CAACkY,6BAA6B,GAAG,YAAY;IACtD,IAAI0Q,MAAM,GAAG/oB,aAAa,CAACoY,UAAU;IACrC2Q,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;IACrCsJ,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,OAAOsJ,MAAM;EACjB,CAAC;EAED5oB,aAAa,CAAC4yB,wBAAwB,GAAG,YAAY;IACjD,IAAIhK,MAAM,GAAG/oB,aAAa,CAACoY,UAAU;IACrC,IAAI2Q,MAAM,EAAE;MACRA,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;MACvCsJ,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IACvC;IACA,OAAOsJ,MAAM;EACjB,CAAC;EAED5oB,aAAa,CAAC0qD,gBAAgB,GAAG,UAAUyB,IAAI,EAAE;IAC7C,IAAG,CAACA,IAAI,EAAE,OAAOA,IAAI;IAErB,IAAG,OAAOA,IAAK,KAAK,QAAQ,EACxBA,IAAI,GAAGA,IAAI,CAAC7sC,OAAO,CAAC,GAAG,EAAC,GAAG,CAAC;IAEhC,IAAIsJ,MAAM,GAAG/oB,aAAa,CAACoY,UAAU;IACrC2Q,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACvCsJ,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,OAAOmR,MAAM,CAACC,GAAG,CAACy7B,IAAI,CAAC,CAACslB,KAAK,CAAC,CAAC,CAAC7oD,MAAM,CAACA,MAAM,CAAC;EAClD,CAAC;EAED5oB,aAAa,CAACgsD,wBAAwB,GAAG,UAAUG,IAAI,EAAE;IACrD,IAAG,CAACA,IAAI,EAAE,OAAOA,IAAI;IAErB,IAAG,OAAOA,IAAK,KAAK,QAAQ,EACxBA,IAAI,GAAGA,IAAI,CAAC7sC,OAAO,CAAC,GAAG,EAAC,GAAG,CAAC;IAEhC,IAAIsJ,MAAM,GAAG/oB,aAAa,CAACoY,UAAU;IACrC2Q,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACvCsJ,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,IAAIuyD,EAAE,GAAGphD,MAAM,CAACC,GAAG,CAACy7B,IAAI,CAAC,CAACslB,KAAK,CAAC,CAAC;IAEjC,OAAO;MACHtlB,IAAI,EAAE0lB,EAAE,CAACjpD,MAAM,CAACA,MAAM,CAAC;MACvBwwB,IAAI,EAAEy4B,EAAE,CAACC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAGD,EAAE,CAACE,OAAO,CAAC;IACvC,CAAC;EACL,CAAC;EAED/xE,aAAa,CAACgyE,6BAA6B,GAAG,UAAU7lB,IAAI,EAAE;IAC1D,IAAIvjC,MAAM,GAAG/oB,aAAa,CAACoY,UAAU;IACrC2Q,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACvCsJ,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,OAAOmR,MAAM,CAACC,GAAG,CAACy7B,IAAI,CAAC,CAACslB,KAAK,CAAC,CAAC,CAAC7oD,MAAM,CAACA,MAAM,GAAG,QAAQ,CAAC;EAC7D,CAAC;EAED5oB,aAAa,CAACiyE,mBAAmB,GAAG,UAAU9lB,IAAI,EAAE;IAChD,IAAIvjC,MAAM,GAAG/oB,aAAa,CAACoY,UAAU;IACrC2Q,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACvCsJ,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,OAAOmR,MAAM,CAAC07B,IAAI,CAAC,CAACvjC,MAAM,CAACA,MAAM,GAAG,QAAQ,CAAC;EACjD,CAAC;EAED5oB,aAAa,CAACkyE,uBAAuB,GAAG,UAAU/lB,IAAI,EAAE;IACpD,IAAIvjC,MAAM,GAAG/oB,aAAa,CAACoY,UAAU;IACrC2Q,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACvCsJ,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,OAAOmR,MAAM,CAAC07B,IAAI,CAAC,CAACvjC,MAAM,CAACA,MAAM,CAAC;EACtC,CAAC;EAED5oB,aAAa,CAACmyE,0BAA0B,GAAG,UAAUlJ,GAAG,EAAE;IACtD,IAAIrgD,MAAM,GAAG/oB,aAAa,CAACoY,UAAU;IACrC2Q,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACvCsJ,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,OAAOmR,MAAM,CAACw4C,GAAG,EAAErgD,MAAM,CAAC,CAACA,MAAM,CAAC,+BAA+B,CAAC;EACtE,CAAC;EAED5oB,aAAa,CAACoyE,gCAAgC,GAAG,UAAUnJ,GAAG,EAAE;IAC5D,IAAIrgD,MAAM,GAAG/oB,aAAa,CAACoY,UAAU;IACrC2Q,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACvCsJ,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,OAAOmR,MAAM,CAACw4C,GAAG,EAAErgD,MAAM,CAAC,CAACA,MAAM,CAAC,uBAAuB,CAAC;EAC9D,CAAC;EAED5oB,aAAa,CAACqyE,2BAA2B,GAAG,UAAUpJ,GAAG,EAAE;IACvD,IAAIrgD,MAAM,GAAG/oB,aAAa,CAACoY,UAAU;IACrC2Q,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACvCsJ,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,OAAOmR,MAAM,CAACw4C,GAAG,EAAErgD,MAAM,CAAC;EAC9B,CAAC;EAED5oB,aAAa,CAAC2xD,6BAA6B,GAAG,UAAUsX,GAAG,EAAEqJ,OAAO,EAAEC,WAAW,EAAE;IAC/E,IAAItJ,GAAG,KAAK,IAAI,IAAIA,GAAG,KAAK,EAAE,IAAI,OAAOA,GAAG,KAAK,WAAW,EAAE;MAC1D,OAAO,EAAE;IACb;IAEA,IAAIrgD,MAAM,GAAG/oB,aAAa,CAACoY,UAAU;IACrC2Q,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACvCsJ,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,IAAIgzD,OAAO,EAAE;MACT1pD,MAAM,IAAI,WAAW;MACrBqgD,GAAG,IAAI,GAAG,GAAGqJ,OAAO;IACxB;;IAEZ;IACY,IAAGC,WAAW,KAAG,IAAI,EACjB,OAAO9hD,MAAM,CAACw4C,GAAG,EAAErgD,MAAM,CAAC,CAACA,MAAM,CAAC,CAAC;IAEvC,IAAIzZ,CAAC,GAAGshB,MAAM,CAACw4C,GAAG,EAAErgD,MAAM,CAAC,CAACA,MAAM,CAAC,CAAC,CAACtJ,OAAO,CAAC,GAAG,EAAC,GAAG,CAAC,CAAC,CAAC;IACvD,OAAOnQ,CAAC;EACZ,CAAC;EAEDnP,aAAa,CAACwyE,gCAAgC,GAAG,UAAUvJ,GAAG,EAAEqJ,OAAO,EAAE;IACrE,IAAIrJ,GAAG,KAAK,IAAI,IAAIA,GAAG,KAAK,EAAE,IAAI,OAAOA,GAAG,KAAK,WAAW,EAAE;MAC1D,OAAO,EAAE;IACb;IAEA,IAAIrgD,MAAM,GAAG/oB,aAAa,CAACoY,UAAU;IACrC2Q,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACvCsJ,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,IAAIgzD,OAAO,EAAE;MACT1pD,MAAM,IAAI,WAAW;MACrBqgD,GAAG,IAAI,GAAG,GAAGqJ,OAAO;IACxB;IAEA,OAAO7hD,MAAM,CAACC,GAAG,CAACu4C,GAAG,EAAErgD,MAAM,CAAC,CAACA,MAAM,CAAC,uBAAuB,CAAC,GAAC,GAAG;EACtE,CAAC;EAED5oB,aAAa,CAACs/C,yBAAyB,GAAG,UAAUqO,EAAE,EAAE;IACpD,OAAOl9B,MAAM,CAACk9B,EAAE,CAAC,CAAC8kB,WAAW,CAAC,IAAI,CAAC,CAACnzD,OAAO,CAAC,GAAG,EAAC,GAAG,CAAC,CAAC;EACzD,CAAC;EAEDtf,aAAa,CAAC0yE,oBAAoB,GAAG,UAAUzJ,GAAG,EAAE;IAChD,IAAIrgD,MAAM,GAAG/oB,aAAa,CAACoY,UAAU;IACrC2Q,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC;IACvCsJ,MAAM,GAAGA,MAAM,CAACtJ,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IACnC,OAAOmR,MAAM,CAACw4C,GAAG,EAAErgD,MAAM,CAAC,CAAC6oD,KAAK,CAAC,CAAC,CAACkB,MAAM,CAAC,CAAC;EAC/C,CAAC;EAED3yE,aAAa,CAACqsD,UAAU,GAAG,UAAUumB,IAAI,EAAEC,UAAU,EAAE;IACnD,IAAIf,KAAK,GAAKt4C,IAAI,CAACo+B,KAAK,CAACgb,IAAI,GAAG,EAAE,CAAC;IACnC,IAAIb,OAAO,GAAG/xE,aAAa,CAAC6uB,SAAS,CAAC+jD,IAAI,GAAGd,KAAK,GAAG,EAAE,EAAE,CAAC,CAAC;IAE3D,IAAIA,KAAK,GAAK,EAAE,EAAE;MAACA,KAAK,GAAK,GAAG,GAACA,KAAK;IAAC;IACvC,IAAIC,OAAO,GAAG,EAAE,EAAE;MAACA,OAAO,GAAG,GAAG,GAACA,OAAO;IAAC;IACzC,OAAOD,KAAK,GAAC,GAAG,GAACC,OAAO,IAAIc,UAAU,KAAK,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;EACjE,CAAC;EAED7yE,aAAa,CAAC8yE,qBAAqB,GAAG,UAAUC,aAAa,EAAE;IAC3D,IAAIC,WAAW,GAAGvvE,CAAC,CAACsvE,aAAa,CAAC;IAElC,IAAI,CAACvB,OAAO,CAACxrE,IAAI,CAACgtE,WAAW,CAAC;;IAE9B;IACAA,WAAW,CAACrf,EAAE,CAAC,gBAAgB,EAAE,UAAU6K,GAAG,EAAE;MAC5Cx+D,aAAa,CAACizE,UAAU,CAACxvE,CAAC,CAAC+6D,GAAG,CAAC10D,MAAM,CAAC,CAAC;IAC3C,CAAC,CAAC;;IAEF;IACArG,CAAC,CAACzE,MAAM,CAAC,CAAC20D,EAAE,CAAC,QAAQ,EAAE,YAAY;MAC/BhvD,OAAO,CAACC,GAAG,CAAC,8BAA8B,CAAC;MAC3C5E,aAAa,CAACwxE,OAAO,CAACnlE,OAAO,CAAC,UAAU4qC,OAAO,EAAE/wC,KAAK,EAAEgtE,KAAK,EAAE;QAC3DlzE,aAAa,CAACizE,UAAU,CAACh8B,OAAO,CAAC;MACrC,CAAC,CAAC;IACN,CAAC,CAAC;EAEN,CAAC;EAEDj3C,aAAa,CAACq6B,gBAAgB,GAAG,UAAU2zB,OAAO,EAAEnmD,IAAI,EAAEsrE,YAAY,EAAEC,gBAAgB,EAAEC,UAAU,EAAE;IAClG,IAAI9zE,EAAE,GAAGkE,CAAC,CAAC,iBAAiB,CAAC;IAC7BlE,EAAE,CAACyR,IAAI,CAAC,wBAAwB,CAAC,CAACoO,IAAI,CAAC4uC,OAAO,CAAC;IAC/CzuD,EAAE,CAACyR,IAAI,CAAC,qBAAqB,CAAC,CAACoO,IAAI,CAACvX,IAAI,CAAC;IACzC,IAAI,CAAC,CAACsrE,YAAY,EAAE;MAChB5zE,EAAE,CAACyR,IAAI,CAAC,yBAAyB,CAAC,CAACoO,IAAI,CAAC+zD,YAAY,CAAC;IACzD;IACA,IAAI,CAAC,CAACC,gBAAgB,EAAE;MACpB7zE,EAAE,CAACyR,IAAI,CAAC,8BAA8B,CAAC,CAACoO,IAAI,CAACg0D,gBAAgB,CAAC;IAClE;IAEA,IAAIC,UAAU,KAAK,KAAK,EAAE;MACtB9zE,EAAE,CAACyR,IAAI,CAAC,8BAA8B,CAAC,CAACvG,IAAI,CAAC,CAAC;MAC9ClL,EAAE,CAACyR,IAAI,CAAC,8BAA8B,CAAC,CAACvG,IAAI,CAAC,CAAC;MAC9ClL,EAAE,CAACyR,IAAI,CAAC,oBAAoB,CAAC,CAACi5C,QAAQ,CAAC,iBAAiB,CAAC;IAC7D,CAAC,MACI;MACD1qD,EAAE,CAACyR,IAAI,CAAC,8BAA8B,CAAC,CAACwE,IAAI,CAAC,CAAC;MAC9CjW,EAAE,CAACyR,IAAI,CAAC,8BAA8B,CAAC,CAACwE,IAAI,CAAC,CAAC;MAC9CjW,EAAE,CAACyR,IAAI,CAAC,oBAAoB,CAAC,CAACtJ,WAAW,CAAC,iBAAiB,CAAC;IAChE;IAEA1H,aAAa,CAAC8E,UAAU,CAAC,iBAAiB,CAAC;EAC/C,CAAC;EAED9E,aAAa,CAACszE,iBAAiB,GAAG,UAAUtlB,OAAO,EAAEnmD,IAAI,EAAEsrE,YAAY,EAAEC,gBAAgB,EAAEC,UAAU,EAAEE,YAAY,EAAEC,aAAa,EAAEC,gBAAgB,EAAE;IAClJ,IAAIl0E,EAAE,GAAGkE,CAAC,CAAC,kBAAkB,CAAC;IAC9BlE,EAAE,CAACyR,IAAI,CAAC,yBAAyB,CAAC,CAACoO,IAAI,CAAC4uC,OAAO,CAAC;IAChDzuD,EAAE,CAACyR,IAAI,CAAC,sBAAsB,CAAC,CAACoO,IAAI,CAACvX,IAAI,CAAC;IAC1C,IAAI,CAAC,CAACsrE,YAAY,EAAE;MAChB5zE,EAAE,CAACyR,IAAI,CAAC,0BAA0B,CAAC,CAACoO,IAAI,CAAC+zD,YAAY,CAAC;IAC1D;IACA;IACA;IACA;IACA,IAAI,CAAC,CAACC,gBAAgB,EAAE;MACpB7zE,EAAE,CAACyR,IAAI,CAAC,+BAA+B,CAAC,CAACoO,IAAI,CAACg0D,gBAAgB,CAAC;IACnE;IAEA,IAAIC,UAAU,KAAK,KAAK,EAAE;MACtB9zE,EAAE,CAACyR,IAAI,CAAC,+BAA+B,CAAC,CAACvG,IAAI,CAAC,CAAC;MAC/ClL,EAAE,CAACyR,IAAI,CAAC,+BAA+B,CAAC,CAACvG,IAAI,CAAC,CAAC;IACnD,CAAC,MACI;MACDlL,EAAE,CAACyR,IAAI,CAAC,+BAA+B,CAAC,CAACwE,IAAI,CAAC,CAAC;MAC/CjW,EAAE,CAACyR,IAAI,CAAC,+BAA+B,CAAC,CAACwE,IAAI,CAAC,CAAC;IACnD;IAEA,IAAI+9D,YAAY,KAAK,IAAI,EAAE;MACvB1uE,WAAW,CAAC,CAAC;MACbtF,EAAE,CAACyR,IAAI,CAAC,+BAA+B,CAAC,CAACwE,IAAI,CAAC,CAAC;MAC/C,IAAIg9C,KAAK,GAAG/yD,OAAO,CAACw3C,OAAO,CAACh3B,QAAQ,CAACC,cAAc,CAAC,yBAAyB,CAAC,CAAC,CAACsyC,KAAK,CAAC,CAAC;MACvF,IAAIA,KAAK,EAAE;QACPA,KAAK,CAACkhB,aAAa,GAAGF,aAAa;MACvC;IACJ,CAAC,MACGj0E,EAAE,CAACyR,IAAI,CAAC,+BAA+B,CAAC,CAACvG,IAAI,CAAC,CAAC;IAGnDzK,aAAa,CAAC8E,UAAU,CAAC,kBAAkB,EAAE,YAAY;MACrD,IAAIyuE,YAAY,KAAK,IAAI,EAAE;QACvBpzE,QAAQ,CAAC,YAAY;UACjBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;QACzC,CAAC,CAAC;MACN;IACJ,CAAC,EAAE,IAAI,EAAE,YAAY;MACjB,IAAIovE,YAAY,KAAK,IAAI,EAAE;QACvB,IAAI/gB,KAAK,GAAG/yD,OAAO,CAACw3C,OAAO,CAACh3B,QAAQ,CAACC,cAAc,CAAC,yBAAyB,CAAC,CAAC,CAACsyC,KAAK,CAAC,CAAC;QACvF,IAAI,OAAQihB,gBAAiB,KAAK,UAAU,EACxCA,gBAAgB,CAACjhB,KAAK,CAACkhB,aAAa,CAAC;MAC7C;IACJ,CAAC,CAAC;EACN,CAAC;EAED1zE,aAAa,CAAC8E,UAAU,GAAG,UAAUiuE,aAAa,EAAE7X,QAAQ,EAAEyY,cAAc,EAAEC,aAAa,EAAE;IACzF,IAAIzL,CAAC,GAAG1kE,CAAC,CAACsvE,aAAa,CAAC;IAExB,IAAI/X,UAAU,GAAG,IAAI;IAErB76D,QAAQ,CAAC,YAAY;MACjB,IAAI,OAAQ+6D,QAAS,IAAI,UAAU,EAAE;QACjCA,QAAQ,CAACiN,CAAC,CAAC;MACf;IACJ,CAAC,EAAE,GAAG,CAAC;IAEPA,CAAC,CAAC0L,GAAG,CAAC,eAAe,EAAE,YAAY;MAC/Bj0E,UAAU,CAAC+K,UAAU,CAAC,YAAY,CAAC;MAEnC,IAAI,OAAQgpE,cAAe,IAAI,UAAU,EAAE;QACvCA,cAAc,CAACxL,CAAC,CAAC;MACrB;MAEA,IAAI2L,iBAAiB,GAAG3L,CAAC,CAACn3D,IAAI,CAAC,yBAAyB,CAAC;MACzD,IAAI+iE,kBAAkB,GAAG5L,CAAC,CAACn3D,IAAI,CAAC,0BAA0B,CAAC;MAG3D,IAAI8iE,iBAAiB,CAAC/tE,MAAM,GAAG,CAAC,IAAIguE,kBAAkB,CAAChuE,MAAM,GAAG,CAAC,EAAE;QAC/D5F,QAAQ,CAAC,YAAU;UACf,IAAM66D,UAAU,GAAG,SAAbA,UAAUA,CAAa95C,CAAC,EAAE;YAE5B,IAAIA,CAAC,CAAC+5C,OAAO,KAAK,EAAE,IAAI6Y,iBAAiB,CAAC/tE,MAAM,GAAG,CAAC,EAAE;cAElD,IAAIiuE,QAAQ,GAAG7L,CAAC,CAAC7gE,IAAI,CAAC,UAAU,CAAC;cACjC,IAAI0sE,QAAQ,KAAK,OAAO,EAAE;gBACtBF,iBAAiB,CAAC3vE,OAAO,CAAC,OAAO,CAAC;cACtC;YAEJ,CAAC,MAAM,IAAI+c,CAAC,CAAC+5C,OAAO,KAAK,EAAE,IAAI8Y,kBAAkB,CAAChuE,MAAM,GAAG,CAAC,EAAE;cAE1D,IAAIiuE,QAAQ,GAAG7L,CAAC,CAAC7gE,IAAI,CAAC,UAAU,CAAC;cACjC,IAAI0sE,QAAQ,KAAK,OAAO,EAAE;gBACtBD,kBAAkB,CAAC5vE,OAAO,CAAC,OAAO,CAAC;cACvC;YACJ;UACJ,CAAC;UAEDV,CAAC,CAACwc,QAAQ,CAAC,CAAC0zC,EAAE,CAAC,OAAO,EAAEqH,UAAU,CAAC;QACvC,CAAC,EAAC,GAAG,CAAC;MACV;IACJ,CAAC,CAAC;IAEFmN,CAAC,CAAC0L,GAAG,CAAC,gBAAgB,EAAE,YAAY;MAChC1zE,QAAQ,CAAC,YAAY;QACjBP,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;MACxC,CAAC,CAAC;IACN,CAAC,CAAC;IAGFw9D,CAAC,CAAC0L,GAAG,CAAC,eAAe,EAAE,YAAY;MAC/Bj0E,UAAU,CAAC+K,UAAU,CAAC,YAAY,CAAC;MAEnC,IAAI,OAAQipE,aAAc,IAAI,UAAU,EAAE;QACtCA,aAAa,CAACzL,CAAC,CAAC;MACpB;MAEA1kE,CAAC,CAACwc,QAAQ,CAAC,CAACgL,GAAG,CAAC,OAAO,EAAE+vC,UAAU,CAAC;IACxC,CAAC,CAAC;IAEFr2D,OAAO,CAACC,GAAG,CAAC,aAAa,CAAC;IAE1BujE,CAAC,CAACpN,KAAK,CAAC;MAAEvlD,IAAI,EAAE,IAAI;MAAEy+D,QAAQ,EAAE,QAAQ;MAAEC,QAAQ,EAAE;IAAM,CAAC,CAAC;EAChE,CAAC;EAEDl0E,aAAa,CAAC+L,WAAW,GAAG,UAAUgnE,aAAa,EAAE7X,QAAQ,EAAEiZ,SAAS,EAAE;IACtE,IAAIhM,CAAC,GAAG1kE,CAAC,CAACsvE,aAAa,CAAC;IACxB,IAAItU,GAAG,GAAGh7D,CAAC,CAAC,UAAU,CAAC;IAEvB,IAAI0kE,CAAC,CAACplD,EAAE,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;MAC3B,IAAI,OAAOm4C,QAAQ,KAAK,UAAU,EAAE;QAEhCiN,CAAC,CAAC0L,GAAG,CAAC,iBAAiB,EAAE,YAAY;UACjC3Y,QAAQ,CAAC,CAAC;QACd,CAAC,CAAC;MACN;MAEAv2D,OAAO,CAACC,GAAG,CAAC,aAAa,CAAC;MAC1BnB,CAAC,CAAC,gBAAgB,CAAC,CAACwnB,GAAG,CAAC,QAAQ,CAAC;MAEjC,IAAI,CAACvgB,YAAY,CAAC,CAAC;MAEnBy9D,CAAC,CAACpN,KAAK,CAAC,MAAM,CAAC;IACnB;IAEA,IAAG0D,GAAG,CAAC14D,MAAM,GAAC,CAAC,IAAIouE,SAAS,KAAK,IAAI,EAAE;MACnC,IAAIC,MAAM,GAAG30E,OAAO,CAACw3C,OAAO,CAACwnB,GAAG,CAAC,CAAC,CAAC,CAAC,CAACjM,KAAK,CAAC,CAAC;MAC5C,IAAG4hB,MAAM,IAAI,OAAOA,MAAM,CAAC95C,aAAc,KAAG,UAAU,EAC9C85C,MAAM,CAAC95C,aAAa,CAAC,CAAC;IAClC;EACJ,CAAC;EAEDt6B,aAAa,CAACizE,UAAU,GAAG,UAAU9nD,GAAG,EAAE;IACtC,IAAIktC,GAAG,GAAGltC,GAAG,CAACna,IAAI,CAAC,eAAe,CAAC;;IAEnC;IACAqnD,GAAG,CAACt7C,GAAG,CAAC,YAAY,EAAEyc,IAAI,CAACuwC,GAAG,CAAC,CAAC,EAAE,CAACtmE,CAAC,CAACzE,MAAM,CAAC,CAAC8d,MAAM,CAAC,CAAC,GAAGu7C,GAAG,CAACv7C,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EAC/E,CAAC;;EAED;EACA9c,aAAa,CAACq0E,aAAa,GAAG,UAAU/5D,IAAI,EAAE4gD,QAAQ,EAAE;IACpD,IAAIlyD,GAAG,GAAG,EAAE;IACZ,IAAI,CAAC,CAACsR,IAAI,CAAC7Q,IAAI,EAAE;MAEb,KAAK,IAAI0K,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmG,IAAI,CAACvU,MAAM,EAAEoO,CAAC,EAAE,EAAE;QAClC,IAAI,OAAQ+mD,QAAS,IAAI,UAAU,EAAE;UACjClyD,GAAG,CAAChD,IAAI,CAACk1D,QAAQ,CAAC5gD,IAAI,CAAC7Q,IAAI,CAAC0K,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,MAEGnL,GAAG,CAAChD,IAAI,CAACsU,IAAI,CAAC7Q,IAAI,CAAC0K,CAAC,CAAC,CAAC;MAC9B;IACJ;IAEA,OAAOnL,GAAG;EACd,CAAC;EAEDhJ,aAAa,CAAC6uB,SAAS,GAAG,UAAU3Z,KAAK,EAAEo/D,MAAM,EAAE;IAC/C,IAAI,CAACp/D,KAAK,EACN,OAAO,CAAC;IAEZ,IAAIo0D,CAAC,GAAG9vC,IAAI,CAAC+6C,GAAG,CAAC,EAAE,EAAED,MAAM,CAAC;IAC5B,IAAIE,EAAE,GAAGh7C,IAAI,CAACkpB,KAAK,CAAC,CAAClpB,IAAI,CAACD,GAAG,CAACrkB,KAAK,CAAC,GAAGo0D,CAAC,EAAEmL,OAAO,CAAC,CAAC,CAAC,CAAC;IACrD,IAAI,CAACD,EAAE,EACH,OAAO,CAAC;IAEZ,OAAO,CAACt/D,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAIs/D,EAAE,GAAGlL,CAAC;EACxC,CAAC;EAED1/D,KAAK,CAAC0oD,SAAS,CAAC1vB,GAAG,GAAG,UAAU8xC,IAAI,EAAE;IAClC,IAAI7oD,KAAK,GAAG,CAAC;IACb,KAAK,IAAI1X,CAAC,GAAG,CAAC,EAAEwgE,IAAI,GAAG,IAAI,CAAC5uE,MAAM,EAAEoO,CAAC,GAAGwgE,IAAI,EAAExgE,CAAC,EAAE,EAAE;MAC/C0X,KAAK,IAAI,IAAI,CAAC1X,CAAC,CAAC,CAACugE,IAAI,CAAC;IAC1B;IACA,OAAO7oD,KAAK;EAChB,CAAC;EAED7rB,aAAa,CAAC40E,iBAAiB,GAAG,YAAY;IAC1CnxE,CAAC,CAAC,cAAc,CAAC,CAACiE,WAAW,CAAC,aAAa,CAAC;EAChD,CAAC;EAED1H,aAAa,CAAC60E,aAAa,GAAG,UAAUC,MAAM,EAAE5xE,QAAQ,EAAE;IACtD,OAAOymB,OAAO,CAAC,UAAU,CAAC,CAACmrD,MAAM,EAAE5xE,QAAQ,EAAE,CAAC,CAAC;EACnD,CAAC;EAEDlD,aAAa,CAACu7D,iBAAiB,GAAG,UAAUjzB,CAAC,EAAE;IAC3C,IAAIj0B,CAAC,GAAGi0B,CAAC,GAAG,EAAE;IACdj0B,CAAC,GAAGA,CAAC,CAACiL,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;IAC7B;IACA;IACA,OAAOjL,CAAC;EACZ,CAAC;EAEDrU,aAAa,CAAC+0E,UAAU,GAAG,IAAI;EAE/B/0E,aAAa,CAACg1E,iBAAiB,GAAG,KAAK;EAEvCh1E,aAAa,CAACqlE,eAAe,GAAG,UAAUL,WAAW,EAAEH,eAAe,EAAEE,MAAM,EAAE;IAAA,IAAAkQ,gBAAA;IAC5Ej1E,aAAa,CAAC+0E,UAAU,GAAG90D,QAAQ,CAACkzC,aAAa;IACjDnzD,aAAa,CAACg1E,iBAAiB,GAAG,IAAI;IAEtC,IAAIxnD,cAAc,GAAG/pB,CAAC,CAAC,aAAa,CAAC;IACrC,IAAIzE,MAAM,GAAGwuB,cAAc,CAACutC,KAAK,CAAC;MAAEvlD,IAAI,EAAE,IAAI;MAAEy+D,QAAQ,EAAE,QAAQ;MAAEC,QAAQ,EAAE;IAAM,CAAC,CAAC;IACtFl1E,MAAM,CAACgS,IAAI,CAAC,kBAAkB,CAAC,CAACnJ,IAAI,CAACm9D,WAAW,CAACjxD,KAAK,CAAC;IACvD,IAAIgxD,MAAM,KAAK,IAAI,EACf/lE,MAAM,CAACgS,IAAI,CAAC,iBAAiB,CAAC,CAACoO,IAAI,CAAC4lD,WAAW,CAAC5uB,IAAI,CAAC,CAAC,KAEtDp3C,MAAM,CAACgS,IAAI,CAAC,iBAAiB,CAAC,CAACnJ,IAAI,CAACm9D,WAAW,CAAC5uB,IAAI,CAAC;IAEzDp3C,MAAM,CAAC60E,GAAG,CAAC,iBAAiB,EAAE,YAAY;MAAA,IAAAqB,GAAA;MACtC,CAAAA,GAAA,GAAAzxE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,cAAAyxE,GAAA,eAAnBA,GAAA,CAAqB/0D,KAAK,CAACg1D,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;MACtD,IAAI,OAAQtQ,eAAgB,IAAI,UAAU,EAAE;QACxCA,eAAe,CAAC,CAAC;MACrB;MACA7kE,aAAa,CAACg1E,iBAAiB,GAAG,KAAK;IAC3C,CAAC,CAAC;IAEF,IAAII,QAAQ,GAAG5nD,cAAc,CAACxc,IAAI,CAAC,yBAAyB,CAAC;IAC7Dwc,cAAc,CAACxc,IAAI,CAAC,iBAAiB,CAAC,CAAC1J,IAAI,CAAC,KAAK,EAAE,0BAA0B,CAAC;IAC9E8tE,QAAQ,CAAC5S,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC;IACzC4S,QAAQ,CAAC5S,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC;;IAEzC;IACA,CAAAyS,gBAAA,GAAAznD,cAAc,CAAC,CAAC,CAAC,cAAAynD,gBAAA,gBAAAA,gBAAA,GAAjBA,gBAAA,CAAmB90D,KAAK,cAAA80D,gBAAA,eAAxBA,gBAAA,CAA0BI,WAAW,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC;IAE3Er2E,MAAM,CAACgS,IAAI,CAAC,4CAA4C,CAAC,CAACmI,KAAK,CAAC,YAAY;MACxEqU,cAAc,CAACutC,KAAK,CAAC,MAAM,CAAC;MAC5B56D,QAAQ,CAAC,YAAY;QACjB,IAAI,CAACN,aAAa,CAAC2L,QAAQ,EACvBxL,aAAa,CAAC+0E,UAAU,CAAChwE,KAAK,CAAC,CAAC;MACxC,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAED/E,aAAa,CAACowE,cAAc,GAAG,UAAUkF,UAAU,EAAEzQ,eAAe,EAAE;IAClE7kE,aAAa,CAAC+0E,UAAU,GAAG90D,QAAQ,CAACkzC,aAAa;IAEjD,IAAI3lC,cAAc,GAAG/pB,CAAC,CAAC,aAAa,CAAC;IACrC,IAAIzE,MAAM,GAAGwuB,cAAc,CAACutC,KAAK,CAAC;MAAEvlD,IAAI,EAAE,IAAI;MAAEy+D,QAAQ,EAAE,QAAQ;MAAEC,QAAQ,EAAE;IAAM,CAAC,CAAC;IACtF1mD,cAAc,CAACxc,IAAI,CAAC,iBAAiB,CAAC,CAAC1J,IAAI,CAAC,KAAK,EAAEguE,UAAU,CAACC,SAAS,GAAG,oCAAoC,GAAG,wCAAwC,CAAC;IAC1Jv2E,MAAM,CAACgS,IAAI,CAAC,kBAAkB,CAAC,CAACnJ,IAAI,CAACytE,UAAU,CAACvhE,KAAK,CAAC;IACtD/U,MAAM,CAACgS,IAAI,CAAC,iBAAiB,CAAC,CAACnJ,IAAI,CAACytE,UAAU,CAACl/B,IAAI,CAAC;IAEpD,IAAI,CAAC,CAACk/B,UAAU,CAACE,WAAW,EAAE;MAC1BhoD,cAAc,CAAClmB,IAAI,CAAC,aAAa,EAAEguE,UAAU,CAACE,WAAW,CAAC;IAC9D,CAAC,MACI;MACDhoD,cAAc,CAAClmB,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;IAC1C;IAEA,IAAI,OAAQu9D,eAAgB,IAAI,UAAU,EAAE;MAExCr3C,cAAc,CAACqmD,GAAG,CAAC,iBAAiB,EAAE,YAAY;QAC9C,IAAI,OAAQhP,eAAgB,IAAI,UAAU,EACtCA,eAAe,CAAC,CAAC;MACzB,CAAC,CAAC;IACN;IAEA,IAAIuQ,QAAQ,GAAG5nD,cAAc,CAACxc,IAAI,CAAC,yBAAyB,CAAC;IAC7D,IAAIskE,UAAU,CAACC,SAAS,EAAE;MACtBH,QAAQ,CAAC5S,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC;MACxC4S,QAAQ,CAAC5S,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC;IAC9C,CAAC,MAAM;MACH4S,QAAQ,CAAC5S,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC;MACzC4S,QAAQ,CAAC5S,WAAW,CAAC,aAAa,EAAE,IAAI,CAAC;IAC7C;IAEAh1C,cAAc,CAACxc,IAAI,CAAC,4CAA4C,CAAC,CAACmI,KAAK,CAAC,YAAY;MAChFqU,cAAc,CAACutC,KAAK,CAAC,MAAM,CAAC;MAC5BvtC,cAAc,CAACxc,IAAI,CAAC,iBAAiB,CAAC,CAAC1J,IAAI,CAAC,KAAK,EAAE,0BAA0B,CAAC;IAClF,CAAC,CAAC;IAEF,OAAOkmB,cAAc;EACzB,CAAC;EAEDxtB,aAAa,CAACy1E,SAAS,GAAG,UAAUrxD,MAAM,EAAE;IACxC,IAAIsxD,IAAI,GAAG71E,aAAa,CAAC4mC,YAAY;IACrC,IAAID,OAAO,GAAG3mC,aAAa,CAAC2mC,OAAO;IAEnC,IAAImvC,SAAS,GAAGhyD,QAAQ,CAACS,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQoiB,OAAO;MACX,KAAK,MAAM;QACP;MACJ,KAAK,MAAM;QACP,IAAIovC,QAAQ,GAAGjyD,QAAQ,CAACgyD,SAAS,GAAG,GAAG,CAAC;QACxC,QAAQD,IAAI;UACR,KAAK,MAAM;YACP,IAAIE,QAAQ,IAAI,EAAE,EACdD,SAAS,GAAGA,SAAS,GAAGC,QAAQ,GAAG,EAAE,CAAC,KACrC,IAAIA,QAAQ,GAAG,CAAC,EACjBD,SAAS,IAAIC,QAAQ;YACzB;UACJ,KAAK,IAAI;YACL,IAAIA,QAAQ,GAAG,EAAE,EACbD,SAAS,GAAGA,SAAS,GAAGC,QAAQ,GAAG,GAAG,CAAC,KACtC,IAAIA,QAAQ,GAAG,CAAC,EACjBD,SAAS,GAAGA,SAAS,GAAGC,QAAQ,GAAG,EAAE;YACzC;UACJ,KAAK,eAAe;YAChB,IAAIA,QAAQ,IAAI,EAAE,EACdD,SAAS,GAAGA,SAAS,GAAGC,QAAQ,CAAC,KAChC,IAAIA,QAAQ,GAAG,EAAE,IAAIA,QAAQ,GAAG,EAAE,EACnCD,SAAS,GAAGA,SAAS,GAAGC,QAAQ,GAAG,EAAE,CAAC,KACrC,IAAIA,QAAQ,IAAI,EAAE,IAAIA,QAAQ,IAAI,EAAE,EACrCD,SAAS,GAAGA,SAAS,GAAGC,QAAQ,GAAG,EAAE,CAAC,KACrC,IAAIA,QAAQ,GAAG,EAAE,EAClBD,SAAS,GAAGA,SAAS,GAAGC,QAAQ,GAAG,GAAG;YAC1C;UACJ,KAAK,aAAa;YACd,IAAIA,QAAQ,GAAG,EAAE,EACbD,SAAS,GAAGA,SAAS,GAAGC,QAAQ,CAAC,KAChC,IAAIA,QAAQ,IAAI,EAAE,IAAIA,QAAQ,GAAG,EAAE,EACpCD,SAAS,GAAGA,SAAS,GAAGC,QAAQ,GAAG,EAAE,CAAC,KACrC,IAAIA,QAAQ,IAAI,EAAE,IAAIA,QAAQ,GAAG,EAAE,EACpCD,SAAS,GAAGA,SAAS,GAAGC,QAAQ,GAAG,EAAE,CAAC,KACrC,IAAIA,QAAQ,IAAI,EAAE,EACnBD,SAAS,GAAGA,SAAS,GAAGC,QAAQ,GAAG,GAAG;YAC1C;UACJ;YACI;QACR;QACA;MACJ,KAAK,MAAM;QACP,IAAIA,QAAQ,GAAGjyD,QAAQ,CAACgyD,SAAS,GAAG,GAAG,CAAC;QACxC,QAAQD,IAAI;UACR,KAAK,MAAM;YACPC,SAAS,IAAIC,QAAQ;YACrB;UACJ,KAAK,IAAI;YACL,IAAIA,QAAQ,KAAK,CAAC,EACdD,SAAS,GAAGA,SAAS,GAAGC,QAAQ,GAAG,GAAG;YAC1C;UACJ,KAAK,eAAe;YAChB,IAAIA,QAAQ,IAAI,EAAE,EACdD,SAAS,GAAGA,SAAS,GAAGC,QAAQ,CAAC,KAChC,IAAIA,QAAQ,GAAG,EAAE,EAClBD,SAAS,GAAGA,SAAS,GAAGC,QAAQ,GAAG,GAAG;YAC1C;UACJ,KAAK,aAAa;YACd,IAAIA,QAAQ,GAAG,EAAE,EACbD,SAAS,GAAGA,SAAS,GAAGC,QAAQ,CAAC,KAChC,IAAIA,QAAQ,IAAI,EAAE,EACnBD,SAAS,GAAGA,SAAS,GAAGC,QAAQ,GAAG,GAAG;YAC1C;UACJ;YACI;QACR;QACA;MACJ,KAAK,MAAM;QACP,IAAIC,SAAS,GAAGlyD,QAAQ,CAACgyD,SAAS,GAAG,IAAI,CAAC;QAC1C,QAAQD,IAAI;UACR,KAAK,MAAM;YACP,IAAIG,SAAS,IAAI,GAAG,EAChBF,SAAS,GAAGA,SAAS,GAAGE,SAAS,GAAG,GAAG,CAAC,KACvC,IAAIA,SAAS,GAAG,CAAC,EAClBF,SAAS,IAAIE,SAAS;YAC1B;UACJ,KAAK,IAAI;YACL,IAAIA,SAAS,GAAG,GAAG,EACfF,SAAS,GAAGA,SAAS,GAAGE,SAAS,GAAG,IAAI,CAAC,KACxC,IAAIA,SAAS,GAAG,CAAC,EAClBF,SAAS,GAAGA,SAAS,GAAGE,SAAS,GAAG,GAAG;YAC3C;UACJ,KAAK,eAAe;YAChB,IAAIA,SAAS,IAAI,GAAG,EAChBF,SAAS,GAAGA,SAAS,GAAGE,SAAS,CAAC,KACjC,IAAIA,SAAS,GAAG,GAAG,IAAIA,SAAS,GAAG,GAAG,EACvCF,SAAS,GAAGA,SAAS,GAAGE,SAAS,GAAG,GAAG,CAAC,KACvC,IAAIA,SAAS,IAAI,GAAG,IAAIA,SAAS,IAAI,GAAG,EACzCF,SAAS,GAAGA,SAAS,GAAGE,SAAS,GAAG,GAAG,CAAC,KACvC,IAAIA,SAAS,GAAG,GAAG,EACpBF,SAAS,GAAGA,SAAS,GAAGE,SAAS,GAAG,IAAI;YAC5C;UACJ,KAAK,aAAa;YACd,IAAIA,SAAS,GAAG,GAAG,EACfF,SAAS,GAAGA,SAAS,GAAGE,SAAS,CAAC,KACjC,IAAIA,SAAS,IAAI,GAAG,IAAIA,SAAS,GAAG,GAAG,EACxCF,SAAS,GAAGA,SAAS,GAAGE,SAAS,GAAG,GAAG,CAAC,KACvC,IAAIA,SAAS,IAAI,GAAG,IAAIA,SAAS,GAAG,GAAG,EACxCF,SAAS,GAAGA,SAAS,GAAGE,SAAS,GAAG,GAAG,CAAC,KACvC,IAAIA,SAAS,IAAI,GAAG,EACrBF,SAAS,GAAGA,SAAS,GAAGE,SAAS,GAAG,IAAI;YAC5C;UACJ;YACI;QACR;QACA;MACJ,KAAK,MAAM;QACP,IAAIA,SAAS,GAAGlyD,QAAQ,CAACgyD,SAAS,GAAG,IAAI,CAAC;QAC1C,QAAQD,IAAI;UACR,KAAK,MAAM;YACPC,SAAS,IAAIE,SAAS;YACtB;UACJ,KAAK,IAAI;YACL,IAAIA,SAAS,KAAK,CAAC,EACfF,SAAS,GAAGA,SAAS,GAAGE,SAAS,GAAG,IAAI;YAC5C;UACJ,KAAK,eAAe;YAChB,IAAIA,SAAS,IAAI,GAAG,EAChBF,SAAS,GAAGA,SAAS,GAAGE,SAAS,CAAC,KACjC,IAAIA,SAAS,GAAG,GAAG,EACpBF,SAAS,GAAGA,SAAS,GAAGE,SAAS,GAAG,IAAI;YAC5C;UACJ,KAAK,aAAa;YACd,IAAIA,SAAS,GAAG,GAAG,EACfF,SAAS,GAAGA,SAAS,GAAGE,SAAS,CAAC,KACjC,IAAIA,SAAS,IAAI,GAAG,EACrBF,SAAS,GAAGA,SAAS,GAAGE,SAAS,GAAG,IAAI;YAC5C;UACJ;YACI;QACR;QACA;MACJ;QACI;IACR;IAEA,OAAO71E,aAAa,CAAC6uB,SAAS,CAAC8mD,SAAS,GAAG,IAAI,EAAE,CAAC,CAAC;EACvD,CAAC;EAED31E,aAAa,CAACy3D,QAAQ,GAAG,UAAUqe,SAAS,EAAE;IAC1C31E,QAAQ,CAAC,YAAY;MACjB,IAAIZ,EAAE,GAAGkE,CAAC,CAAC,GAAG,GAAGqyE,SAAS,CAAC;MAC3B;;MAEA;MACAv2E,EAAE,CAACwF,KAAK,CAAC,CAAC;MACVxF,EAAE,CAACosD,MAAM,CAAC,CAAC;MAEX,IAAI9rD,aAAa,CAAC2L,QAAQ,EACtBhB,QAAQ,CAACgL,IAAI,CAAC,CAAC;MAEnBjW,EAAE,CAAC,CAAC,CAAC,CAACw2E,iBAAiB,CAAC,CAAC,EAAEx2E,EAAE,CAAC,CAAC,CAAC,CAAC2V,KAAK,CAACnP,MAAM,CAAC;IAClD,CAAC,CAAC;EACN,CAAC;EAED/F,aAAa,CAAC0K,YAAY,GAAG,YAAY;IACrC,IAAI;MACA/F,OAAO,CAACC,GAAG,CAAC,8BAA8B,CAAC;MAE3C,IAAIqb,QAAQ,CAACkzC,aAAa,EACtBlzC,QAAQ,CAACkzC,aAAa,CAAC9H,IAAI,CAAC,CAAC;MACjC,IAAI2qB,MAAM,GAAG/1D,QAAQ,CAAC21C,gBAAgB,CAAC,OAAO,CAAC;MAC/C,KAAK,IAAIzhD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6hE,MAAM,CAACjwE,MAAM,EAAEoO,CAAC,EAAE,EAAE;QACpC6hE,MAAM,CAAC7hE,CAAC,CAAC,CAACk3C,IAAI,CAAC,CAAC;MACpB;IACJ,CAAC,CACD,OAAO4qB,EAAE,EAAE;MACPC,KAAK,CAAC,QAAQ,GAAGD,EAAE,CAAC1sE,IAAI,GAAG,GAAG,GAAG0sE,EAAE,CAACz7D,OAAO,GAAG,IAAI,GAAGy7D,EAAE,CAAC50D,KAAK,CAAC;IAClE;EACJ,CAAC;EAEDrhB,aAAa,CAAC8gB,GAAG,GAAG,UAAUwnB,CAAC,EAAEzrB,KAAK,EAAEs5D,CAAC,EAAE;IACvCA,CAAC,GAAGA,CAAC,IAAI,GAAG;IACZ7tC,CAAC,GAAGA,CAAC,GAAG,EAAE;IACV,OAAOA,CAAC,CAACviC,MAAM,IAAI8W,KAAK,GAAGyrB,CAAC,GAAG,IAAI1+B,KAAK,CAACiT,KAAK,GAAGyrB,CAAC,CAACviC,MAAM,GAAG,CAAC,CAAC,CAACuO,IAAI,CAAC6hE,CAAC,CAAC,GAAG7tC,CAAC;EAC9E,CAAC;EAEDtoC,aAAa,CAAC01D,kBAAkB,GAAG,YAAY;IAC3C,IAAI71D,aAAa,CAACX,MAAM,EAAE;MACtB,OAAO,IAAI;IACf,CAAC,MAAM;MACH,OAASs3C,MAAM,CAACC,QAAQ,KAAK,SAAS,IAAMD,MAAM,CAACC,QAAQ,KAAK,SAAS,IAAID,MAAM,CAACmQ,OAAO,IAAI9mD,aAAa,CAAC2lC,qBAAsB;IACvI;EACJ,CAAC;EAEDxlC,aAAa,CAACo2E,gCAAgC,GAAG,YAAY;IACzD,IAAIv2E,aAAa,CAACX,MAAM,EAAE;MACtB,OAAO,KAAK;IAChB,CAAC,MAAM;MACH,OAAOs3C,MAAM,CAACC,QAAQ,KAAK,SAAS,IAAID,MAAM,CAACmQ,OAAO,GAAG9mD,aAAa,CAAC2lC,qBAAqB;IAChG;EACJ,CAAC;EAEDxlC,aAAa,CAACq2E,gBAAgB,GAAG,UAAUC,CAAC,EAAE;IAC1C,IAAIthC,CAAC,GAAGshC,CAAC,CAACh3D,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAACpI,WAAW,CAAC,CAAC;IAClD,OAAO89B,CAAC;EACZ,CAAC;EAEDh1C,aAAa,CAACu2E,QAAQ,GAAG,YAAY;IACjC9yE,CAAC,CAACC,OAAO,CAAC,CAAC;IACX1E,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;IACjD5N,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;IACvB,OAAO,KAAK;EAChB,CAAC;EAEDzsB,aAAa,CAACw2E,eAAe,GAAG,YAAY;IACxC/yE,CAAC,CAACC,OAAO,CAAC,CAAC;IACX8lB,SAAS,CAACiD,IAAI,CAAC,cAAc,CAAC;IAC9B,OAAO,KAAK;EAChB,CAAC;EAEDzsB,aAAa,CAACy2E,SAAS,GAAG,UAAU17D,GAAG,EAAE;IACrC,IAAI,CAACA,GAAG,EAAE,OAAO,IAAI;IAErB,IAAI/R,GAAG,GAAG,EAAE;IACZvJ,OAAO,CAAC4M,OAAO,CAAC0O,GAAG,EAAE,UAAUxb,EAAE,EAAE;MAC/ByJ,GAAG,CAAChD,IAAI,CAACzG,EAAE,CAAC2b,IAAI,CAAC,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,OAAOlS,GAAG;EACd,CAAC;EAEDhJ,aAAa,CAAC02E,0BAA0B,GAAG,UAAUC,IAAI,EAAE;IACvD,IAAI,CAAC92E,aAAa,CAACysC,kBAAkB,EACjC,OAAO,IAAI;IAEf,IAAIsqC,SAAS,GAAGv/C,IAAI,CAAC2T,KAAK,CAACnrC,aAAa,CAAC0sC,YAAY,CAAC;IACtD,IAAIsqC,KAAK,GAAG,IAAI;IAChB,IAAI,CAAC,CAACD,SAAS,EAAE;MAEb,IAAI,CAAC,CAACD,IAAI,EAAE;QACR,IAAIE,KAAK,GAAGD,SAAS,CAAClxE,MAAM,CAAC,UAAUnG,EAAE,EAAE;UAAE,OAAOA,EAAE,CAAC8sC,OAAO,IAAIsqC,IAAI;QAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,IAAI,CAACE,KAAK,EACN,OAAO,IAAI;QAEf,IAAI,CAAC,CAACA,KAAK,CAACC,MAAM,IAAID,KAAK,CAACC,MAAM,CAAC/wE,MAAM,GAAG,CAAC,EAAE;UAC3C8wE,KAAK,CAACC,MAAM,GAAG92E,aAAa,CAACy2E,SAAS,CAACI,KAAK,CAACC,MAAM,CAAC;QACxD;QACA,IAAI,CAAC,CAACD,KAAK,CAACE,UAAU,IAAIF,KAAK,CAACE,UAAU,CAAChxE,MAAM,GAAG,CAAC,EAAE;UACnD8wE,KAAK,CAACE,UAAU,GAAG/2E,aAAa,CAACy2E,SAAS,CAACI,KAAK,CAACE,UAAU,CAAC;QAChE;QACA,IAAI,CAAC,CAACF,KAAK,CAACG,IAAI,IAAIH,KAAK,CAACG,IAAI,CAACjxE,MAAM,GAAG,CAAC,EAAE;UACvC8wE,KAAK,CAACG,IAAI,GAAGh3E,aAAa,CAACy2E,SAAS,CAACI,KAAK,CAACG,IAAI,CAAC;QACpD;QAEA,IAAI,CAACH,KAAK,CAACI,gBAAgB,EACvBJ,KAAK,CAACI,gBAAgB,GAAG,IAAI;MACrC,CAAC,MACI;QAED,OAAOL,SAAS;MACpB;IACJ;IAEA,OAAOC,KAAK;EAChB,CAAC;EAED72E,aAAa,CAACk3E,mBAAmB,GAAG,UAAUh2D,CAAC,EAAE3X,IAAI,EAAE;IACnD,IAAI4tE,IAAI,GAAG1zE,CAAC,CAACwc,QAAQ,CAACm3D,gBAAgB,CAACl2D,CAAC,CAACm2D,KAAK,EAAEn2D,CAAC,CAACo2D,KAAK,CAAC,CAAC;IACzD,IAAIH,IAAI,CAAC7vE,IAAI,CAAC,MAAM,CAAC,IAAIiC,IAAI,IACzB4tE,IAAI,CAAC99D,MAAM,CAAC,CAAC,CAAC/R,IAAI,CAAC,MAAM,CAAC,IAAIiC,IAAI,EAAE;MACpC,OAAO,IAAI;IACf;IAEA,OAAO,KAAK;EAChB,CAAC;EAEDvJ,aAAa,CAACu3E,eAAe,GAAG,YAAY;IACxC,IAAIzuB,EAAE,GAAG9pD,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,cAAc,CAAC;IACpD,IAAI2vC,OAAO,GAAG1uB,EAAE,GAAGzxB,IAAI,CAAC2T,KAAK,CAAC8d,EAAE,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC0uB,OAAO,EACRA,OAAO,GAAG,CAAC,CAAC;IAEhB,OAAOA,OAAO;EAClB,CAAC;EAEDx3E,aAAa,CAACy3E,WAAW,GAAG,UAAUl9D,GAAG,EAAE2vC,IAAI,EAAE;IAC7CtqD,UAAU,CAAC+K,UAAU,CAAC4P,GAAG,EAAE2vC,IAAI,CAAC;EACpC,CAAC;EAEDlqD,aAAa,CAAC0wD,aAAa,GAAG,UAAUgnB,aAAa,EAAEtQ,GAAG,EAAEoO,WAAW,EAAEmC,cAAc,EAAE/Z,GAAG,EAAEt8C,GAAG,EAAE;IAC/FnhB,QAAQ,CAAC,YAAY;MACjB,IAAIy3E,YAAY,GAAG,EAAE;MACrB,IAAI,CAAC,CAACpC,WAAW,EAAE;QACfoC,YAAY,GAAGpC,WAAW;MAC9B;MACA,IAAIv9D,UAAU,GAAGy/D,aAAa;MAC9B,IAAG,CAACj0E,CAAC,CAAC2jE,GAAG,CAAC,CAACyQ,UAAU,IAAI,CAACp0E,CAAC,CAAC2jE,GAAG,CAAC,CAACrkD,EAAE,CAAC,gBAAgB,CAAC,EAAE;QACnDtf,CAAC,CAAC2jE,GAAG,CAAC,CAAC0Q,YAAY,GAAG,IAAI;QAC1B,IAAG,CAACH,cAAc,EACdA,cAAc,GAAG,GAAG;QAExB,IAAII,KAAK,GAAGtnD,MAAM,CAAC,CAAC,CAACkxC,IAAI,CAAClxC,MAAM,CAAC,CAAC,CAACkxC,IAAI,CAAC,CAAC,GAAGgW,cAAc,CAAC,CAACjW,KAAK,CAAC,CAAC,CAAC,CAACvV,IAAI,CAAC,CAAC,CAAC,CAAC6rB,IAAI,CAAC,CAAC,CAAC,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,MAAM,CAAC,CAAC,CAAC,CAAClvB,MAAM,CAAC,CAAC;QACjH,IAAImvB,KAAK,GAAG1nD,MAAM,CAAC,CAAC,CAACkxC,IAAI,CAAClxC,MAAM,CAAC,CAAC,CAACkxC,IAAI,CAAC,CAAC,GAAGgW,cAAc,CAAC,CAACjW,KAAK,CAAC,EAAE,CAAC,CAACvV,IAAI,CAAC,EAAE,CAAC,CAAC6rB,IAAI,CAAC,EAAE,CAAC,CAACC,MAAM,CAAC,EAAE,CAAC,CAACC,MAAM,CAAC,EAAE,CAAC,CAAClvB,MAAM,CAAC,CAAC;QAEtHvlD,CAAC,CAAC2jE,GAAG,CAAC,CAACyQ,UAAU,CAAC;UACV;UACAO,cAAc,EAAE,CAAC;UACjBC,OAAO,EAAEN,KAAK;UACdO,OAAO,EAAEH,KAAK;UACdlgE,UAAU,EAAEA,UAAU;UACtBsgE,eAAe,EAAE,IAAI;UACrBC,OAAO,EAAE,SAATA,OAAOA,CAAYC,QAAQ,EAAEC,QAAQ,EAAE;YACnC,IAAId,YAAY,IAAI,EAAE,EAAE;cACpBc,QAAQ,CAACC,KAAK,CAACjxE,WAAW,CAACkwE,YAAY,CAAC;YAC5C;YAEA,IAAGc,QAAQ,CAAC9a,GAAG,EACX8a,QAAQ,CAAC9a,GAAG,CAAC8a,QAAQ,CAACp3D,GAAG,CAAC;UAClC,CAAC;UACDs3D,UAAU,EAAE,SAAZA,UAAUA,CAAYC,KAAK,EAAEH,QAAQ,EAAE;YAEnC,IAAId,YAAY,IAAI,EAAE,EAAE;cACpBc,QAAQ,CAACC,KAAK,CAAC1uB,QAAQ,CAAC2tB,YAAY,CAAC;YACzC;YAEA,IAAG,OAAOha,GAAI,KAAK,UAAU,EAAE;cAC3B8a,QAAQ,CAAC9a,GAAG,GAAGA,GAAG;cAClB8a,QAAQ,CAACp3D,GAAG,GAAGA,GAAG;YACtB;YAEAqxC,UAAU,CAAC,YAAY;cACnB,IAAI1nC,GAAG,GAAGxnB,CAAC,CAACo1E,KAAK,CAAC,CAAC3tD,MAAM,CAAC,CAAC;cAC3B,IAAI4tD,MAAM,GAAGr1E,CAAC,CAACo1E,KAAK,CAAC,CAAChB,UAAU,CAAC,QAAQ,CAAC;cAC1C,IAAIkB,IAAI,GAAGD,MAAM,CAAC5tD,MAAM,CAAC,CAAC;cAC1B,IAAIrO,KAAK,GAAGi8D,MAAM,CAACj8D,KAAK,CAAC,CAAC;cAE1B,IAAIm8D,UAAU,GAAGv1E,CAAC,CAACo1E,KAAK,CAAC,CACpBhB,UAAU,CAAC,QAAQ,CAAC,CACpB7mE,IAAI,CAAC,2BAA2B,CAAC;cAEtCgoE,UAAU,CAACr4B,KAAK,CAAC,CAAC;cAClBl9C,CAAC,CAAC,UAAU,EAAE;gBACVoE,IAAI,EAAE,OAAO;gBACbsR,KAAK,EAAE,SAAPA,KAAKA,CAAA,EAAc;kBACf1V,CAAC,CAAC2jE,GAAG,CAAC,CAACyQ,UAAU,CAAC,SAAS,EAAE,IAAIz8C,IAAI,CAAC,CAAC,CAAC,CAACy8C,UAAU,CAAC,MAAM,CAAC,CAACxsB,IAAI,CAAC,CAAC,CAAC4tB,MAAM,CAAC,CAAC;gBAC/E;cACJ,CAAC,CAAC,CAACvV,QAAQ,CAACsV,UAAU,CAAC,CAAC/uB,QAAQ,CAAC,0EAA0E,CAAC;cAE5GxmD,CAAC,CAAC,UAAU,EAAE;gBACVoE,IAAI,EAAE,OAAO;gBACbsR,KAAK,EAAE,SAAPA,KAAKA,CAAA,EAAc;kBACf1V,CAAC,CAACo0E,UAAU,CAACqB,UAAU,CAACL,KAAK,CAAC;gBAClC;cACJ,CAAC,CAAC,CAACnV,QAAQ,CAACsV,UAAU,CAAC,CAAC/uB,QAAQ,CAAC,0EAA0E,CAAC;;cAE5G;cACA;cACA;YACJ,CAAC,EAAE,CAAC,CAAC;UACT;QACJ,CAAC,CAAC;QAENxmD,CAAC,CAACo0E,UAAU,CAACsB,UAAU,GAAG,UAAUhvE,EAAE,EAAE;UACpC1G,CAAC,CAAC0G,EAAE,CAAC,CAAC0tE,UAAU,CAAC,SAAS,EAAE,IAAIz8C,IAAI,CAAC,CAAC,CAAC,CAACy8C,UAAU,CAAC,MAAM,CAAC,CAACxsB,IAAI,CAAC,CAAC,CAAC4tB,MAAM,CAAC,CAAC;QAC9E,CAAC;MACL;IACJ,CAAC,CAAC;EACN,CAAC;EAEDj5E,aAAa,CAACo5E,cAAc,GAAG,UAAU1B,aAAa,EAAEtQ,GAAG,EAAEiS,SAAS,EAAEC,QAAQ,EAAE;IAC9En5E,QAAQ,CAAC,YAAY;MACjB,IAAI8X,UAAU,GAAGy/D,aAAa;QAC1BvrB,IAAI,GAAG1oD,CAAC,CAAC2jE,GAAG,CAAC,CAACyQ,UAAU,CAAC;UACrB0B,WAAW,EAAE,KAAK;UAClBnB,cAAc,EAAE,CAAC;UACjBngE,UAAU,EAAEA,UAAU;UACtBsgE,eAAe,EAAE,IAAI;UACrBiB,MAAM,EAAE,QAAQ;UAChBC,YAAY,EAAE,wBAAwB;UACtCjB,OAAO,EAAEc,QAAQ;UACjBV,UAAU,EAAES;QAChB,CAAC,CAAC;MACN51E,CAAC,CAACo0E,UAAU,CAACsB,UAAU,GAAG,UAAUhvE,EAAE,EAAE;QACpC1G,CAAC,CAAC0G,EAAE,CAAC,CAAC0tE,UAAU,CAAC,SAAS,EAAE,IAAIz8C,IAAI,CAAC,CAAC,CAAC,CAACy8C,UAAU,CAAC,MAAM,CAAC,CAACxsB,IAAI,CAAC,CAAC,CAAC4tB,MAAM,CAAC,CAAC;MAC9E,CAAC;IAEL,CAAC,CAAC;EACN,CAAC;EAEDj5E,aAAa,CAAC05E,aAAa,GAAG,UAAUC,WAAW,EAAE;IACjD,IAAK,CAACA,WAAW,CAACjuE,QAAQ,IAAIiuE,WAAW,CAACppE,MAAM,IAAM,CAACopE,WAAW,CAACjuE,QAAQ,IAAIiuE,WAAW,CAAC5zE,MAAM,GAAG,CAAE,EAClG,OAAO,4BAA4B,CAAC,KACnC,IAAK,CAAC4zE,WAAW,CAACjuE,QAAQ,IAAIiuE,WAAW,CAACnpE,MAAM,CAACC,QAAQ,IAAIkpE,WAAW,CAACnpE,MAAM,CAACnG,KAAK,MAAMsvE,WAAW,CAACppE,MAAM,IAAIopE,WAAW,CAAC5zE,MAAM,GAAG,CAAC,CAAC,EACzI,OAAO,0BAA0B;EACzC,CAAC;EAED/F,aAAa,CAAC+pB,YAAY,GAAG,YAAY;IACrCP,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;EAC3B,CAAC;EAEDzsB,aAAa,CAAC45E,gBAAgB,GAAG,YAAY;IACzC,OAAO/5E,aAAa,CAACkB,aAAa,KAAK,IAAI;EAC/C,CAAC;;EAED;EACA;EACA;;EAEA;EACAf,aAAa,CAAC65E,gBAAgB,GAAG,UAAUn4C,IAAI,EAAE8wB,KAAK,EAAEnyB,OAAO,EAAEy5C,WAAW,EAAE11D,MAAM,EAAE;IAClF,IAAI,CAAC,CAACsd,IAAI,IAAI,CAAC,CAACA,IAAI,CAACpG,aAAa,IAAIoG,IAAI,CAACpG,aAAa,CAACv1B,MAAM,GAAG,CAAC,EAAE;MACjE,IAAIub,GAAG,GAAG;QACNogB,IAAI,EAAEA,IAAI;QACV0d,QAAQ,EAAEv/C,aAAa,CAACiN,YAAY;QACpCitE,QAAQ,EAAEvnB,KAAK,CAACunB,QAAQ;QACxBC,aAAa,EAAExnB,KAAK,CAACwnB,aAAa;QAClC35C,OAAO,EAAEA,OAAO;QAChBy5C,WAAW,EAAEA,WAAW;QACxBhqC,4BAA4B,EAAE0iB,KAAK,CAAC1iB,4BAA4B;QAChE3xB,OAAO,EAAE,CAACiG,MAAM,GAAG,CAAC,GAAGA;MAC3B,CAAC;MAED+S,YAAY,CAACC,OAAO,CAAC,aAAa,EAAEC,IAAI,CAACC,SAAS,CAAChW,GAAG,CAAC,CAAC;MACxD3c,OAAO,CAACC,GAAG,CAAC,oBAAoB,CAAC;IACrC,CAAC,MAAM;MACHuyB,YAAY,CAAC4xB,UAAU,CAAC,aAAa,CAAC;MACtCpkD,OAAO,CAACC,GAAG,CAAC,oBAAoB,CAAC;IACrC;EACJ,CAAC;EAED5E,aAAa,CAACi6E,kBAAkB,GAAG,YAAY;IAC3C,IAAI34D,GAAG,GAAG6V,YAAY,CAAC0Q,OAAO,CAAC,aAAa,CAAC;IAC7C,IAAInG,IAAI,GAAG,IAAI;IACf,IAAIpgB,GAAG,EAAE;MACLA,GAAG,GAAG+V,IAAI,CAAC2T,KAAK,CAAC1pB,GAAG,CAAC;MACrB,IAAIA,GAAG,CAAC89B,QAAQ,KAAKv/C,aAAa,CAACiN,YAAY,IAAI,CAAC,CAACwU,GAAG,CAACogB,IAAI,EAAE;QAC3DA,IAAI,GAAGlH,gFAAc,CAAClZ,GAAG,CAACogB,IAAI,CAAC;QAC/BA,IAAI,CAACw4C,UAAU,GAAG,EAAE,CAAC,CAAC;MAC1B;MAEAv1E,OAAO,CAACC,GAAG,CAAC,sBAAsB,CAAC;MACnC,OAAO;QACH88B,IAAI,EAAElH,gFAAc,CAACkH,IAAI,CAAC;QAC1Bq4C,QAAQ,EAAEz4D,GAAG,CAACy4D,QAAQ;QACtBC,aAAa,EAAE14D,GAAG,CAAC04D,aAAa;QAChC35C,OAAO,EAAE,CAAC/e,GAAG,CAAC+e,OAAO,GAAG,IAAI,GAAG/e,GAAG,CAAC+e,OAAO;QAC1Cy5C,WAAW,EAAE,CAACx4D,GAAG,CAACw4D,WAAW,GAAG,IAAI,GAAGx4D,GAAG,CAACw4D,WAAW;QACtDhqC,4BAA4B,EAAExuB,GAAG,CAACwuB,4BAA4B;QAC9D3xB,OAAO,EAAEmD,GAAG,CAACnD;MACjB,CAAC;IACL;IAEA,OAAO,IAAI;EACf,CAAC;EAEDne,aAAa,CAACwI,kBAAkB,GAAG,UAAUg4C,QAAQ,EAAE25B,aAAa,EAAEC,YAAY,EAAE;IAChF,IAAInK,GAAG,GAAGxsE,CAAC,CAAC+8C,QAAQ,CAAC;IAErB,IAAI25B,aAAa,IAAI,IAAI,EAAE;MACvB,IAAIzX,QAAQ,GAAGj/D,CAAC,CAAC22E,YAAY,CAAC;MAE9B,IAAIC,KAAK,GAAGpK,GAAG,CAAC/kD,MAAM,CAAC,CAAC,CAACK,GAAG;MAC5B,IAAIq3C,UAAU,GAAGF,QAAQ,CAACx3C,MAAM,CAAC,CAAC,CAACK,GAAG;MAEtC,IAAIs3C,aAAa,GAAGH,QAAQ,CAAC5lD,MAAM,CAAC,CAAC;MAErC,IAAIw9D,eAAe,GAAGzX,aAAa,IAAIwX,KAAK,GAAGzX,UAAU,CAAC;MAE1DqN,GAAG,CAAClzD,GAAG,CAAC,YAAY,EAAEu9D,eAAe,CAAC;IAC1C,CAAC,MACI;MACD,IAAID,KAAK,GAAGpK,GAAG,CAAC/kD,MAAM,CAAC,CAAC,CAACK,GAAG;MAC5B,IAAI+uD,eAAe,GAAG72E,CAAC,CAACzE,MAAM,CAAC,CAAC+C,WAAW,CAAC,CAAC,GAAGs4E,KAAK,GAAG,EAAE;;MAE1D;MACI,IAAIE,cAAc,GAAG92E,CAAC,CAAC,yBAAyB,CAAC,CAACkF,GAAG,CAAC,CAAC;MACvD,IAAI4xE,cAAc,GAAG,CAAC,EAAE;QACpBD,eAAe,GAAGA,eAAe,GAAGC,cAAc;MACtD;MACJ;;MAGAtK,GAAG,CAAClzD,GAAG,CAAC,YAAY,EAAEu9D,eAAe,CAAC;IAC1C;EACJ,CAAC;EAEDt6E,aAAa,CAACw6E,oBAAoB,GAAG,UAAUh6B,QAAQ,EAAE45B,YAAY,EAAEK,MAAM,EAAE;IAC3E,IAAI56E,aAAa,CAAC2L,QAAQ,EAAE;MACxB,IAAIykE,GAAG,GAAGxsE,CAAC,CAAC+8C,QAAQ,CAAC;MACrB,IAAIk6B,QAAQ,GAAGj3E,CAAC,CAAC,GAAG,GAAGwsE,GAAG,CAAC3oE,IAAI,CAAC,WAAW,CAAC,CAAC;MAE7C,IAAIo7D,QAAQ,GAAGj/D,CAAC,CAAC22E,YAAY,CAAC;MAC9B,IAAIO,cAAc,GAAGjY,QAAQ,CAAC1xD,IAAI,CAAC,2BAA2B,CAAC;MAE/D,IAAIqpE,KAAK,GAAGK,QAAQ,CAACxvD,MAAM,CAAC,CAAC,CAACK,GAAG;MACjC,IAAIq3C,UAAU,GAAG+X,cAAc,CAACzvD,MAAM,CAAC,CAAC,CAACK,GAAG;MAE5C,IAAIs3C,aAAa,GAAG8X,cAAc,CAAC79D,MAAM,CAAC,CAAC;;MAE3C;AAChB;;MAGgB,IAAI89D,UAAU,GAAGF,QAAQ,CAAC59D,MAAM,CAAC,CAAC;MAElC,IAAI29D,MAAM,EAAE;QACR,IAAIG,UAAU,GAAGP,KAAK,GAAGxX,aAAa,EAAE;UACpC8X,cAAc,CAAC59D,GAAG,CAAC,QAAQ,EAAE69D,UAAU,GAAGP,KAAK,GAAG,EAAE,CAAC;UACrDpK,GAAG,CAAC3oE,IAAI,CAAC,aAAa,EAAEu7D,aAAa,CAAC;QAC1C;MACJ,CAAC,MACI;QACD,IAAI,CAAC,CAACoN,GAAG,CAAC3oE,IAAI,CAAC,aAAa,CAAC,EAAE;UAC3BqzE,cAAc,CAAC59D,GAAG,CAAC,QAAQ,EAAEkzD,GAAG,CAAC3oE,IAAI,CAAC,aAAa,CAAC,CAAC;UACrD2oE,GAAG,CAAC3oE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QAC/B;MACJ;IACJ;EACJ,CAAC;EAGDtH,aAAa,CAACmC,aAAa,GAAG,UAAU+S,KAAK,EAAE;IAC3C,IAAIA,KAAK,IAAI,CAAC,EAAE;MACZ,OAAOyU,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,MACI;MACD,IAAIkxD,QAAQ,GAAGrhD,IAAI,CAACD,GAAG,CAACrkB,KAAK,CAAC;MAC9B,IAAIA,KAAK,GAAG,CAAC,EAAE;QACX,OAAO,GAAG,GAAGyU,OAAO,CAAC,UAAU,CAAC,CAACkxD,QAAQ,CAAC;MAC9C,CAAC,MACI;QACD,OAAOlxD,OAAO,CAAC,UAAU,CAAC,CAACkxD,QAAQ,CAAC;MACxC;IACJ;EACJ,CAAC;EAED76E,aAAa,CAAC86E,qBAAqB,GAAG,YAAY;IAC9C,OAAO;MACHC,YAAY,EAAE,CAAC;MACf;MACAC,eAAe,EAAE,CAAC;MAClBC,kBAAkB,EAAE;IACxB,CAAC;EACL,CAAC;EAEDj7E,aAAa,CAACk7E,uBAAuB,GAAG,UAAU37E,EAAE,EAAE;IAClD,IAAI47E,cAAc,GAAGn7E,aAAa,CAAC86E,qBAAqB,CAAC,CAAC;IAE1D,IAAIM,iBAAiB,GAAG77E,EAAE,CAAC6rB,OAAO,CAAC,gBAAgB,CAAC,CAACpa,IAAI,CAAC,eAAe,CAAC,CAAC+iD,WAAW,CAAC,CAAC;IACxF,IAAIsnB,QAAQ,GAAGF,cAAc,CAACJ,YAAY,GAAGI,cAAc,CAACF,kBAAkB,GAAGG,iBAAiB,GAAGD,cAAc,CAACH,eAAe;IACnI,IAAIlY,YAAY,GAAG9jE,MAAM,CAAC+C,WAAW;IACrC,IAAIu5E,oBAAoB,GAAGxY,YAAY,GAAGuY,QAAQ;IAClD,OAAOC,oBAAoB;EAC/B,CAAC;EAEDt7E,aAAa,CAACu7E,OAAO,GAAG,YAAY;IAChC,SAASC,GAAGA,CAACxmC,CAAC,EAAE;MACZ,IAAInS,CAAC,GAAG,CAACrJ,IAAI,CAACiiD,MAAM,CAAC,CAAC,CAAC9zD,QAAQ,CAAC,EAAE,CAAC,GAAG,WAAW,EAAEpH,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;MAC/D,OAAOy0B,CAAC,GAAG,GAAG,GAAGnS,CAAC,CAACtiB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,GAAGsiB,CAAC,CAACtiB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAGsiB,CAAC;IAC9D;IACA,OAAO24C,GAAG,CAAC,CAAC,GAAGA,GAAG,CAAC,IAAI,CAAC,GAAGA,GAAG,CAAC,IAAI,CAAC,GAAGA,GAAG,CAAC,CAAC;EAChD,CAAC;EAEDx7E,aAAa,CAAC07E,QAAQ,GAAG,UAAUvvE,CAAC,EAAE6zC,GAAG,EAAE;IACvC,IAAI27B,SAAS,GAAG,CAAC,CAAC;IAElBl4E,CAAC,CAACmC,IAAI,CAACuG,CAAC,EAAE,UAAUtG,GAAG,EAAEtG,EAAE,EAAE;MACzB,IAAI,CAACo8E,SAAS,CAACp8E,EAAE,CAACygD,GAAG,CAAC,CAAC,EACnB27B,SAAS,CAACp8E,EAAE,CAACygD,GAAG,CAAC,CAAC,GAAGzgD,EAAE;IAC/B,CAAC,CAAC;IAEF,IAAI6nB,MAAM,GAAG,EAAE;IAEf,KAAK,IAAIjT,CAAC,IAAIwnE,SAAS,EAAE;MACrBv0D,MAAM,CAACphB,IAAI,CAAC21E,SAAS,CAACxnE,CAAC,CAAC,CAAC;IAC7B;IAEA,OAAOiT,MAAM;EACjB,CAAC;EAEDpnB,aAAa,CAAC+0C,YAAY,GAAG,UAAUC,CAAC,EAAE;IACtC,IAAI,CAACA,CAAC,IAAI,OAAQA,CAAE,KAAK,QAAQ,IAAIA,CAAC,CAACjvC,MAAM,IAAI,CAAC,EAC9C,OAAOivC,CAAC;IAEZ,IAAI/6B,CAAC,GAAG+6B,CAAC,CAAC11B,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;IAC7B,OAAOrF,CAAC;EACZ,CAAC;EAEDja,aAAa,CAAC63C,cAAc,GAAG,UAAU7uC,GAAG,EAAE;IAC1C,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;IACrB,OAAOkC,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAEDrL,aAAa,CAAC83C,aAAa,GAAG,UAAUh0C,GAAG,EAAE;IACzC,IAAIoH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBD,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;IACpB,OAAOoH,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAEDrL,aAAa,CAAC47E,kBAAkB,GAAG,KAAK;EAExC57E,aAAa,CAAC67E,YAAY,GAAG,YAAY;IACrC,IAAIC,KAAK,GAAG,IAAI;IAChB,IAAI;MACAA,KAAK,GAAGzkD,IAAI,CAAC2T,KAAK,CAAChsC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,aAAa,CAAC,CAAC;MAC9D,IAAI,CAAC,CAACi0C,KAAK,EAAE;QACTr4E,CAAC,CAACmC,IAAI,CAACk2E,KAAK,EAAE,UAAU3nE,CAAC,EAAE5U,EAAE,EAAE;UAC3B,IAAI,CAACA,EAAE,CAACw8E,WAAW,EACfx8E,EAAE,CAACw8E,WAAW,GAAG3gD,IAAI,CAAC4gD,GAAG,CAAC,CAAC;QACnC,CAAC,CAAC;MACN;IAEJ,CAAC,CAAC,OAAO96D,CAAC,EAAE;MACR46D,KAAK,GAAG,IAAI;IAChB;IAEA,OAAOA,KAAK;EAChB,CAAC;EAED97E,aAAa,CAACi8E,cAAc,GAAG,UAAUH,KAAK,EAAE;IAC5C98E,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,aAAa,EAAEC,IAAI,CAACC,SAAS,CAACwkD,KAAK,CAAC,CAAC;EACrE,CAAC;EAED97E,aAAa,CAACk8E,kBAAkB,GAAG,UAAUJ,KAAK,EAAE;IAChD,IAAI;MACA,IAAIK,YAAY,GAAG,KAAK;MACxB,IAAI,CAAC,CAACL,KAAK,EAAE;QAETr4E,CAAC,CAACmC,IAAI,CAACk2E,KAAK,EAAE,UAAU3nE,CAAC,EAAE5U,EAAE,EAAE;UAC3B,IAAI,CAAC48E,YAAY,EAAE;YACf,IAAMC,IAAI,GAAG,CAAChhD,IAAI,CAAC4gD,GAAG,CAAC,CAAC,GAAGz8E,EAAE,CAACw8E,WAAW,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;YACxD,IAAIK,IAAI,GAAG,CAAC,EACRD,YAAY,GAAG,IAAI;UAC3B;QACJ,CAAC,CAAC;MACN;MAEA,IAAIn8E,aAAa,CAAC47E,kBAAkB,KAAKO,YAAY,EAAE;QACnDn8E,aAAa,CAAC47E,kBAAkB,GAAGO,YAAY;QAC/Cv8E,UAAU,CAAC+K,UAAU,CAACumC,mDAAM,CAACo0B,wBAAwB,EAAE6W,YAAY,GAAGjrC,mDAAM,CAACu0B,eAAe,GAAGv0B,mDAAM,CAACw0B,SAAS,CAAC;MACpH;IACJ,CAAC,CAAC,OAAOxkD,CAAC,EAAE;MACRvc,OAAO,CAACqkB,KAAK,CAAC9H,CAAC,CAAC;IACpB;EACJ,CAAC;EAED,IAAMm7D,4BAA4B,GAAG,CAAC;EAEtCr8E,aAAa,CAACs8E,sBAAsB,GAAG,UAAUh7D,GAAG,EAAE;IAClD,IAAIw6D,KAAK,GAAG97E,aAAa,CAAC67E,YAAY,CAAC,CAAC;IACxC,IAAI,CAACC,KAAK,EACNA,KAAK,GAAG,EAAE;IAEd,IAAIx6D,GAAG,GAAGw6D,KAAK,CAAC/1E,MAAM,GAAG,CAAC,GAAG+1E,KAAK,CAAC,CAAC,CAAC,GAAGxrE,SAAS;IACjD,IAAIgR,GAAG,EAAE;MACL,IAAIA,GAAG,CAACi7D,WAAW,KAAKjsE,SAAS,EAAE;QAC/BgR,GAAG,CAACi7D,WAAW,IAAI,CAAC;MACxB,CAAC,MAAM;QACHj7D,GAAG,CAACi7D,WAAW,GAAG,CAAC;MACvB;;MAEA;MACA,IAAI18E,aAAa,CAACmB,QAAQ,IAAIsgB,GAAG,CAACi7D,WAAW,GAAGF,4BAA4B,EAAE;QAC1E/6D,GAAG,GAAGw6D,KAAK,CAACU,KAAK,CAAC,CAAC,EACnBl7D,GAAG,CAACi7D,WAAW,GAAG,CAAC;QACnBT,KAAK,CAAC91E,IAAI,CAACsb,GAAG,CAAC;MACnB;MAEAthB,aAAa,CAACi8E,cAAc,CAACH,KAAK,CAAC;IACvC;EACJ,CAAC;EAED97E,aAAa,CAACy8E,yBAAyB,GAAG,UAAUn7D,GAAG,EAAE;IACrD,IAAIw6D,KAAK,GAAG97E,aAAa,CAAC67E,YAAY,CAAC,CAAC;IACxC,IAAIv6D,GAAG,IAAIw6D,KAAK,IAAIA,KAAK,CAAC/1E,MAAM,GAAC,CAAC,EAAE;MAChC+1E,KAAK,GAAGA,KAAK,CAACp2E,MAAM,CAAC,UAAS4rE,CAAC,EAAE;QAAC,OAAOA,CAAC,CAAC5vC,IAAI,CAACg7C,WAAW,IAAIp7D,GAAG,CAACogB,IAAI,CAACg7C,WAAW;MAAC,CAAC,CAAC;MACtF18E,aAAa,CAACi8E,cAAc,CAACH,KAAK,CAAC;IACvC;EACJ,CAAC;EAED97E,aAAa,CAAC28E,kBAAkB,GAAG,UAAUC,SAAS,EAAE;IACpD,IAAId,KAAK,GAAG97E,aAAa,CAAC67E,YAAY,CAAC,CAAC;IACxC77E,aAAa,CAACk8E,kBAAkB,CAACJ,KAAK,CAAC;IAEvC,IAAI,CAACA,KAAK,EAAE,OAAO,IAAI;IAEvB,IAAIx6D,GAAG,GAAGw6D,KAAK,CAACU,KAAK,CAAC,CAAC;IACvB,IAAGI,SAAS,KAAK,IAAI;MAAE;MACnB58E,aAAa,CAACi8E,cAAc,CAACH,KAAK,CAAC;IAEvC,OAAOx6D,GAAG;EACd,CAAC;EAEDthB,aAAa,CAAC68E,cAAc,GAAG,UAAU1wE,CAAC,EAAE8N,CAAC,EAAE6iE,gBAAgB,EAAE;IAC7D,IAAI3wE,CAAC,IAAI,IAAI,IAAI8N,CAAC,IAAI,IAAI,EAAE,OAAQ6iE,gBAAgB,KAAK,IAAI,GAAG,IAAI,GAAG,KAAK;IAC5E,IAAK3wE,CAAC,IAAI,IAAI,IAAI8N,CAAC,IAAI,IAAI,IAAM9N,CAAC,IAAI,IAAI,IAAI8N,CAAC,IAAI,IAAK,EAAE,OAAO,KAAK;IACtE,OAAO9N,CAAC,CAAC6W,WAAW,CAAC,CAAC,KAAK/I,CAAC,CAAC+I,WAAW,CAAC,CAAC;EAC9C,CAAC;EAEDhjB,aAAa,CAAC+8E,SAAS,GAAG,UAAU5wE,CAAC,EAAE8N,CAAC,EAAE;IACtC,IAAI,CAAC9N,CAAC,EAAEA,CAAC,GAAG,CAAC;IACb,IAAI,CAAC8N,CAAC,EAAEA,CAAC,GAAG,CAAC;IACb,OAAOb,MAAM,CAACjN,CAAC,CAAC,GAAGiN,MAAM,CAACa,CAAC,CAAC;EAChC,CAAC;EAEDja,aAAa,CAACg9E,SAAS,GAAG,UAAUvmE,GAAG,EAAE;IACrC,IAAIzN,GAAG,GAAG,EAAE;IACZvF,CAAC,CAACmC,IAAI,CAACyc,MAAM,CAACu6C,IAAI,CAACnmD,GAAG,CAAC,EAAE,UAAUtC,CAAC,EAAEm1D,CAAC,EAAE;MACrCtgE,GAAG,CAAChD,IAAI,CAACyQ,GAAG,CAAC6yD,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,OAAOtgE,GAAG;EACd,CAAC;EAEDhJ,aAAa,CAACi9E,yBAAyB,GAAG,YAAY;IAClD,QAAQxzD,OAAO,CAACyzD,QAAQ;MACpB,KAAK,OAAO;QACRzzD,OAAO,CAACqB,cAAc,CAACqyD,SAAS,GAAG,GAAG;QACtC1zD,OAAO,CAACqB,cAAc,CAACsyD,WAAW,GAAC,GAAG;QACtC;MACJ,KAAK,OAAO;QACR3zD,OAAO,CAACqB,cAAc,CAACC,YAAY,GAAG,KAAK;QAC3C;MACJ,KAAK,OAAO;QACRtB,OAAO,CAACqB,cAAc,CAACC,YAAY,GAAG,KAAK;QAC3C;MACJ,KAAK,OAAO;QACR,IAAIlrB,aAAa,CAACqD,QAAQ,KAAK,KAAK,EAChCumB,OAAO,CAACqB,cAAc,CAACC,YAAY,GAAG,IAAI,CAAC,KAC1C,IAAIlrB,aAAa,CAACqD,QAAQ,KAAK,KAAK,EACrCumB,OAAO,CAACqB,cAAc,CAACC,YAAY,GAAG,KAAK,CAAC,KAC3C,IAAIlrB,aAAa,CAACqD,QAAQ,KAAK,KAAK,EACrCumB,OAAO,CAACqB,cAAc,CAACC,YAAY,GAAG,IAAI,CAAC,KAC1C,IAAIlrB,aAAa,CAACqD,QAAQ,KAAK,KAAK,EACrCumB,OAAO,CAACqB,cAAc,CAACC,YAAY,GAAG,KAAK;QAC/C;MACJ,KAAK,OAAO;QACRtB,OAAO,CAACqB,cAAc,CAACsyD,WAAW,GAAG,GAAG;QACxC3zD,OAAO,CAACqB,cAAc,CAACC,YAAY,GAAG,KAAK;QAC3C;MACJ,KAAK,OAAO;QACRtB,OAAO,CAACqB,cAAc,CAACC,YAAY,GAAG,KAAK;IACnD;EACJ,CAAC;EAED/qB,aAAa,CAACm6C,MAAM,GAAG,UAAUyqB,OAAO,EAAE/gE,IAAI,EAAE;IAC5C,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAInM,MAAM,CAACq+E,SAAS,EAAE;MAClB,IAAI;QACA,IAAI,CAACzY,OAAO,CAAC0Y,MAAM,EAAE;UACrB1Y,OAAO,CAAC0Y,MAAM,GAAG,IAAInM,wDAAY,CAAC,CAAC;QACnC;QAEJvM,OAAO,CAAC0Y,MAAM,CAACC,WAAW,CAAC15E,IAAI,CAAC;QAChC+gE,OAAO,CAAC0Y,MAAM,CAACE,SAAS,GAAG,UAAUt8D,CAAC,EAAE;UACpChW,QAAQ,CAACE,OAAO,CAAC8V,CAAC,CAACrd,IAAI,CAAC;QAC5B,CAAC;QACD+gE,OAAO,CAAC0Y,MAAM,CAAC51D,OAAO,GAAG,UAAUxG,CAAC,EAAE;UAClChW,QAAQ,CAACqb,MAAM,CAACrF,CAAC,CAACrd,IAAI,CAAC;QAC3B,CAAC;MACD,CAAC,CAAC,OAAOqd,CAAC,EAAE;QACRliB,MAAM,CAACq+E,SAAS,GAAG,KAAK;QACxB14E,OAAO,CAACqkB,KAAK,CAAC9H,CAAC,CAAC;QAChB,IAAIlY,GAAG,GAAGkoE,+DAAW,CAACrtE,IAAI,CAAC;QAC3BqH,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;MACzB;IACJ,CAAC,MAAM;MACH,IAAIA,GAAG,GAAGkoE,+DAAW,CAACrtE,IAAI,CAAC;MAC3BqH,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;IACzB;IAEA,OAAOkC,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAEDrL,aAAa,CAAC6gC,iBAAiB,GAAG,UAAUa,IAAI,EAAE;IAC9C,OAAOjH,4FAAuB,CAACgjD,iBAAiB,CAAC/7C,IAAI,CAAC;EAC1D,CAAC;EAED1hC,aAAa,CAAC09E,eAAe,GAAG,UAAUtW,GAAG,EAAE;IAC3C3jE,CAAC,CAAC2jE,GAAG,CAAC,CAACyQ,UAAU,CAAC,MAAM,CAAC;EAC7B,CAAC;EAED73E,aAAa,CAAC29E,SAAS,GAAG,UAASC,OAAO,EAAEC,WAAW,EAAE;IACrD,IAAIC,cAAc,GAAGC,IAAI,CAACH,OAAO,CAAC;IAElC,IAAII,UAAU,GAAG,EAAE;IAEnB,KAAK,IAAI9yD,MAAM,GAAG,CAAC,EAAEA,MAAM,GAAG4yD,cAAc,CAAC/3E,MAAM,EAAEmlB,MAAM,IAAI,GAAG,EAAE;MAChE,IAAI7hB,KAAK,GAAGy0E,cAAc,CAACz0E,KAAK,CAAC6hB,MAAM,EAAEA,MAAM,GAAG,GAAG,CAAC;QAClD+yD,WAAW,GAAG,IAAIr0E,KAAK,CAACP,KAAK,CAACtD,MAAM,CAAC;MACzC,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG9K,KAAK,CAACtD,MAAM,EAAEoO,CAAC,EAAE,EAAE;QACnC8pE,WAAW,CAAC9pE,CAAC,CAAC,GAAG9K,KAAK,CAAC60E,UAAU,CAAC/pE,CAAC,CAAC;MACxC;MACA,IAAIgqE,SAAS,GAAG,IAAIC,UAAU,CAACH,WAAW,CAAC;MAE3CD,UAAU,CAACh4E,IAAI,CAACm4E,SAAS,CAAC;IAC9B;IAEA,IAAItnC,IAAI,GAAG,IAAIhvB,IAAI,CAACm2D,UAAU,EAAE;MAAE/vE,IAAI,EAAE4vE;IAAY,CAAC,CAAC;IACtD,OAAOhnC,IAAI;EACf,CAAC;EAED72C,aAAa,CAACitD,cAAc,GAAG,UAAUic,GAAG,EAAE9jD,QAAQ,EAAE;IACpD;IACA;;IAEA;IACA;IACA;;IAEA;IACA;IACA;;IAEA,IAAGvlB,aAAa,CAAC2L,QAAQ,KAAK,IAAI,EAC9B,OAAOxL,aAAa,CAACkmE,QAAQ,CAACgD,GAAG,EAAE9jD,QAAQ,CAAC,CAAC,KAE7C,OAAOplB,aAAa,CAACq+E,iBAAiB,CAACnV,GAAG,EAAE9jD,QAAQ,CAAC;EAC7D,CAAC;EAEDplB,aAAa,CAACkmE,QAAQ,GAAG,UAAUoY,SAAS,EAAEl5D,QAAQ,EAAE;IACpD,IAAIk5D,SAAS,CAACC,UAAU,CAAC,8BAA8B,CAAC,EAAE;MACtDD,SAAS,GAAGA,SAAS,CAACh/D,OAAO,CAAC,8BAA8B,EAAE,EAAE,CAAC;IACrE;IAEA,IAAIpU,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB2d,OAAO,CAAC01D,QAAQ,CAACzxB,KAAK,CAAC;MACnBlpD,IAAI,EAAEy6E,SAAS;MACfrwE,IAAI,EAAE,MAAM;MACZ8F,KAAK,EAAE,gBAAgB;MACvB4yD,OAAO,EAAE,SAATA,OAAOA,CAAY39D,GAAG,EAAE;QACpBkC,QAAQ,CAACE,OAAO,CAACga,QAAQ,CAAC;MAC9B,CAAC;MACD4D,KAAK,EAAE,SAAPA,KAAKA,CAAYnlB,IAAI,EAAE;QACnB,IAAIC,GAAG,GAAGuzB,IAAI,CAAC2T,KAAK,CAACnnC,IAAI,CAAC;QAC1BqH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACxB;IACJ,CAAC,CAAC;IAEF,OAAOoH,QAAQ;EACnB,CAAC;EAEDlL,aAAa,CAACq+E,iBAAiB,GAAG,UAAUnV,GAAG,EAAE9jD,QAAQ,EAAE;IACvD,IAAIla,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI4nD,IAAI,GAAG7c,GAAG,CAACC,eAAe,CAACn2C,aAAa,CAAC29E,SAAS,CAACzU,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAC/E,IAAItzB,YAAY;;IAEhB;IACAnyC,CAAC,CAAC,aAAa,CAAC,CAAC02D,MAAM,CAAC,CAAC;IAAC;IAC1B,IAAIskB,GAAG,GAAGh7E,CAAC,CAAC,gEAAgE,GAAGsvD,IAAI,GAAG,OAAO,CAAC;IAC9Fnd,YAAY,GAAG6oC,GAAG,CAAC,CAAC,CAAC;IACrBx+D,QAAQ,CAACm2B,IAAI,CAACC,WAAW,CAACT,YAAY,CAAC;;IAEnD;IACY;IACZ;IACY;IACZ;IACY;IACZ;IACY;IACZ;;IAEY;IACAA,YAAY,CAACz8B,KAAK,CAAC,CAAC;IAEpBjO,QAAQ,CAACE,OAAO,CAACga,QAAQ,CAAC;IAC1B,OAAOla,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAEDrL,aAAa,CAAC0+E,UAAU,GAAG,UAAUC,QAAQ,EAAEx2D,SAAS,EAAE;IACtDvoB,UAAU,CAAC+K,UAAU,CAAC,iBAAiB,EAAE;MACrCud,YAAY,EAAEy2D,QAAQ,KAAK,IAAI;MAC/Bt2D,aAAa,EAAEF,SAAS,KAAK;IACjC,CAAC,CAAC;EACN,CAAC;EAEDnoB,aAAa,CAAC4+E,qBAAqB,GAAG,YAAW;IAC7C,IAAIC,IAAI,GAAGh/E,aAAa,CAAC+uC,kBAAkB,CAAC,CAAC;IAC7C,OAAO5uC,aAAa,CAAC8+E,qBAAqB,CAAC,CAAC,IAAID,IAAI,CAAC/vC,gBAAgB,KAAK,IAAI;EAClF,CAAC;EAED9uC,aAAa,CAAC8+E,qBAAqB,GAAG,YAAW;IAC7C,OAAOj/E,aAAa,CAAC8oB,UAAU,IAAI9oB,aAAa,CAAC2L,QAAQ,IAAI3L,aAAa,CAAC8nC,SAAS;EACxF,CAAC;EAED3nC,aAAa,CAAC++E,yBAAyB,GAAG,UAAUx/E,EAAE,EAAE;IAEpDA,EAAE,CAACyR,IAAI,CAAC,uCAAuC,CAAC,CAACpL,IAAI,CAAC,YAAY;MAC9D,IAAIggB,EAAE,GAAGniB,CAAC,CAAC,IAAI,CAAC;MAChB,IAAI0nB,GAAG,GAAG,OAAQvF,EAAE,CAACvM,MAAO,IAAI,UAAU,GAAGuM,EAAE,CAACvM,MAAM,CAAC,CAAC,GAAGuM,EAAE;MAC7DuF,GAAG,GAAG,OAAQA,GAAG,CAAC9R,MAAO,IAAI,UAAU,GAAG8R,GAAG,CAAC9R,MAAM,CAAC,CAAC,GAAG8R,GAAG;MAE5D,QAAQvF,EAAE,CAAC/d,IAAI,CAAC,CAAC;QACb,KAAK,iDAAiD;UAClDsjB,GAAG,CAAC0vC,MAAM,CAAC,uDAAuD,CAAC;UACnE;QAEJ,KAAK,yCAAyC;UAC1C1vC,GAAG,CAAC0vC,MAAM,CAAC,gDAAgD,CAAC;UAC5D;MACR;IACJ,CAAC,CAAC;EACN,CAAC;EAED76D,aAAa,CAACg/E,YAAY,GAAG,UAAUn7E,IAAI,EAAEo7E,SAAS,EAAEjzE,MAAM,EAAE;IAC5D,IAAIkzE,OAAM,GAAG,SAATA,MAAMA,CAAIr7E,IAAI,EAAK;MACnBc,OAAO,CAACC,GAAG,CAACf,IAAI,CAAC;MACnB,OAAOo7E,SAAS,CAACp7E,IAAI,CAAC,GACpBmI,MAAM,CAACnI,IAAI,CAAC,CAACF,IAAI,CAACu7E,OAAM,CAAC,GACzB7tD,OAAO,CAACjmB,OAAO,CAACvH,IAAI,CAAC;IACzB,CAAC;IACD,OAAOq7E,OAAM,CAACr7E,IAAI,CAAC;EACvB,CAAC;EAEF7D,aAAa,CAAC26C,gBAAgB,GAAG,UAASr5B,GAAG,EAAE;IAC1C,IAAI1X,KAAK,CAAC0wC,OAAO,CAACh5B,GAAG,CAAC,EAAE;MACpB,OAAOA,GAAG,CAAC7K,GAAG,CAAC,UAASlX,EAAE,EAAE;QACxB,OAAOS,aAAa,CAAC26C,gBAAgB,CAACp7C,EAAE,CAAC;MAC7C,CAAC,CAAC;IACN;IAEA,IAAI4/E,MAAM,GAAG,CAAC,CAAC;IACf98D,MAAM,CAACC,mBAAmB,CAAChB,GAAG,CAAC,CAACjV,OAAO,CAAC,UAASw2B,CAAC,EAAE;MAChD,IAAIA,CAAC,IAAI,IAAI,EAAE;QACXs8C,MAAM,CAAC,IAAI,CAAC,GAAG79D,GAAG,CAACuhB,CAAC,CAAC;MACzB,CAAC,MAAM,IAAIA,CAAC,CAAC,CAAC,CAAC,KAAKA,CAAC,CAAC,CAAC,CAAC,CAAC7f,WAAW,CAAC,CAAC,EAAE;QACpC,IAAMo8D,OAAO,GAAGv8C,CAAC,CAAC,CAAC,CAAC,CAAC3rB,WAAW,CAAC,CAAC,GAAG2rB,CAAC,CAACm1B,SAAS,CAAC,CAAC,EAAEn1B,CAAC,CAAC98B,MAAM,CAAC;QAC7Do5E,MAAM,CAACC,OAAO,CAAC,GAAG99D,GAAG,CAACuhB,CAAC,CAAC;MAC5B,CAAC,MAAM;QACHs8C,MAAM,CAACt8C,CAAC,CAAC,GAAGvhB,GAAG,CAACuhB,CAAC,CAAC;MACtB;IACJ,CAAC,CAAC;IAEF,OAAOs8C,MAAM;EACjB,CAAC;EAED,OAAOn/E,aAAa;AACxB,CAAC,CACJ,CAAC;AAEF,SAASq/E,YAAYA,CAAC9/E,EAAE,EAAE;EACtB,IAAI+/E,GAAG,GAAGtgF,MAAM,CAACiH,IAAI,CAAC,CAAC;EACvBq5E,GAAG,CAACr/D,QAAQ,CAAC8H,KAAK,CAACtkB,CAAC,CAAClE,EAAE,CAAC,CAACm1E,IAAI,CAAC,WAAW,CAAC,CAAC;EAC3C4K,GAAG,CAACvyB,KAAK,CAAC,CAAC;EACXuyB,GAAG,CAACrO,KAAK,CAAC,CAAC;AACf;AAEAxxE,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACO,UAAU,CAAC,wBAAwB,kCAAE,UAAUC,MAAM,EAAE4/E,iBAAiB,EAAE;EAEjG5/E,MAAM,CAAC6/E,gBAAgB,GAAG,YAAY;IAClCD,iBAAiB,CAACpQ,OAAO,CAAC,QAAQ,CAAC;EACvC,CAAC;EACDxvE,MAAM,CAAC8/E,sBAAsB,GAAG,YAAY;IACxCF,iBAAiB,CAACpQ,OAAO,CAAC,QAAQ,CAAC;EACvC,CAAC;AACL,CAAC,EAAC,C;;;;;;;;;;;ACz9CF1vE,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,gBAAgB,EACjD,CAAC,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAC,UAAU,EAChF,UAAUC,MAAM,EAAEC,UAAU,EAAEupB,YAAY,EAAEjpB,SAAS,EAAEL,aAAa,EAAEM,QAAQ,EAAE;EAC5ER,MAAM,CAAC+/E,aAAa,GAAG1gF,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,WAAW,CAAC,KAAK,OAAO;EAC3EjoC,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE;EAAG,CAAC,CAAC,CAAC,CAAC;EAClEjlB,OAAO,CAACC,GAAG,CAAC,uBAAuB,GAAGjF,MAAM,CAAC+/E,aAAa,CAAC;EAE3D,IAAI,CAACv2D,YAAY,CAACW,UAAU,CAAC,CAAC,IAAInqB,MAAM,CAAC+/E,aAAa,KAAK,KAAK,EAAE;IAC9Dv/E,QAAQ,CAAC,YAAY;MACjBP,UAAU,CAAC+K,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;IACzC,CAAC,EAAE,GAAG,CAAC;EACX;EAEA,IAAIhL,MAAM,CAAC+/E,aAAa,EAAE;IAEtBv/E,QAAQ,CAAC,YAAW;MAChBnB,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;IACnD,CAAC,EAAE,CAAC,CAAC;EACT;EAEA,IAAIye,SAAS,CAAC8pC,YAAY,IAAI,OAAO9pC,SAAS,CAAC8pC,YAAY,CAACl1E,IAAI,KAAK,UAAU,IAAI,CAAC5K,aAAa,CAACX,MAAM,EAAE;IACtGiB,QAAQ,CAAC,YAAY;MACjB01C,SAAS,CAAC8pC,YAAY,CAACl1E,IAAI,CAAC,CAAC;IACjC,CAAC,EAAE,GAAG,CAAC;EACX;EAEA9K,MAAM,CAACigF,SAAS,GAAG,YAAY;IAC3BjgF,MAAM,CAAC+/E,aAAa,GAAG,KAAK;IAC5B9/E,UAAU,CAAC+K,UAAU,CAAC,YAAY,CAAC;EACvC,CAAC;EAEDhL,MAAM,CAACkgF,cAAc,GAAG,YAAY;IAChCp8E,CAAC,CAACC,OAAO,CAAC,CAAC;IAEXvD,QAAQ,CAAE,YAAU;MAChB,IAAI8F,IAAI,GAAGjH,MAAM,CAACiH,IAAI;MACtB,IAAI,OAAOwgB,OAAO,KAAK,WAAW,IAAIA,OAAO,CAACmgD,YAAY,EAAE;QACxD3gE,IAAI,GAAGwgB,OAAO,CAACmgD,YAAY,CAAC3gE,IAAI;MACpC;MACAA,IAAI,CAACpG,aAAa,CAACioC,aAAa,EAAE,OAAO,EAAC,+BAA+B,CAAC;IAC9E,CAAC,CAAC;EAEN,CAAC;AAEL,CAAC,CAAC,CAAC,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3CP,CAAuB;AACC;AACK;AACc;AACH;AACE;AACb;AACsC;AACnEwrB,mBAAO,CAAC,oEAAgB,CAAC;AACK;AACM;AACoC;AACxE;AACA;AACA;AACA;AACmB;AACS;AACA;AACwB;AAGpDt0D,MAAM,CAACyxB,MAAM,GAAGA,gDAAM;;AAEtB;AACAhtB,CAAC,CAAC,YAAY;EACVA,CAAC,CAAC48E,OAAO,CAACC,UAAU,GAAG,KAAK;AAChC,CAAC,CAAC;;AAEF;AACA;AACA;AACA;AACA,IAAIthF,MAAM,CAAC62C,SAAS,CAAC0qC,SAAS,CAACvxE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;EACjD,IAAIwxE,OAAO,GAAGvgE,QAAQ,CAAC81B,aAAa,CAAC,QAAQ,CAAC;EAC9CyqC,OAAO,CAACC,YAAY,CAAC,MAAM,EAAE,iBAAiB,CAAC;EAC/CD,OAAO,CAACC,YAAY,CAAC,KAAK,EAAE,qBAAqB,CAAC;EAClDxgE,QAAQ,CAACygE,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAACrqC,WAAW,CAACmqC,OAAO,CAAC;AACjE;AAEAxhF,MAAM,CAACq+E,SAAS,GAAG,IAAI;AACvB;AACA,IAAIr+E,MAAM,CAACE,MAAM,EAAE;EACfyhF,cAAc,CAACC,YAAY,GAAG,IAAI;EAClC,IAAMC,OAAO,GAAGT,wDAAgB,CAACphF,MAAM,CAAC62C,SAAS,CAAC0qC,SAAS,CAAC;EAC5D,IAAMQ,QAAQ,GAAGF,OAAO,CAACG,SAAS,CAAC,QAAQ,CAAC;EAC5C,IAAMC,KAAK,GAAGJ,OAAO,CAACK,YAAY,CAAC,CAAC;EACpC,IAAMC,KAAK,GAAI,CAAC,CAACF,KAAK,IAAIA,KAAK,CAACjyE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAC5CiyE,KAAK,CAACjpB,SAAS,CAAC,CAAC,EAAEipB,KAAK,CAACjyE,OAAO,CAAC,GAAG,CAAC,CAAC,GACtCiyE,KAAK;EAET,IAAMG,UAAU,GAAGP,OAAO,CAACQ,SAAS,CAAC;IACjCC,KAAK,EAAE;MACHC,MAAM,EAAE;IACZ,CAAC;IACDC,MAAM,EAAE;MACJD,MAAM,EAAE;IACZ;EACJ,CAAC,CAAC;EAEF,IAAME,SAAS,GAAGZ,OAAO,CAACQ,SAAS,CAAC;IAChCC,KAAK,EAAE;MACHC,MAAM,EAAE;IACZ,CAAC;IACDC,MAAM,EAAE;MACJD,MAAM,EAAE;IACZ;EACJ,CAAC,CAAC;;EAEF;EACAviF,MAAM,CAACq+E,SAAS,GAAG,CAAC0D,QAAQ,IAAIK,UAAU;EAC9C;;EAEI,IAAMM,IAAI,GAAGb,OAAO,CAACG,SAAS,CAAC,mBAAmB,CAAC;EACnD;EACAhiF,MAAM,CAACu4C,WAAW,GAAG,EAAEmqC,IAAI,KAAK,IAAI,IAAKX,QAAQ,IAAIU,SAAU,CAAC;EAChEziF,MAAM,CAAC2iF,KAAK,GAAGd,OAAO,CAACe,SAAS,CAAC,CAAC,KAAK,KAAK,IAAIT,KAAK,GAAG,EAAE;EAE1D,IAAIniF,MAAM,CAACu4C,WAAW,IAAI,CAACv4C,MAAM,CAACq+E,SAAS,EAAE;IACzC;AACR;AACA;AACA;EAHQ;AAKR;AAEA,IAAI,CAACziE,MAAM,CAAC03C,SAAS,CAACpqB,QAAQ,EAAE;EAC5BttB,MAAM,CAAC03C,SAAS,CAACpqB,QAAQ,GAAG,UAAU25C,YAAY,EAAE5tB,QAAQ,EAAE;IAC1D,IAAI6tB,aAAa,GAAG,IAAI,CAACn6D,QAAQ,CAAC,CAAC;IACnC,IAAI,OAAOssC,QAAQ,KAAK,QAAQ,IAAI,CAAC8tB,QAAQ,CAAC9tB,QAAQ,CAAC,IAAIz6B,IAAI,CAACo+B,KAAK,CAAC3D,QAAQ,CAAC,KAAKA,QAAQ,IAAIA,QAAQ,GAAG6tB,aAAa,CAAC/7E,MAAM,EAAE;MAC7HkuD,QAAQ,GAAG6tB,aAAa,CAAC/7E,MAAM;IACnC;IACAkuD,QAAQ,IAAI4tB,YAAY,CAAC97E,MAAM;IAC/B,IAAIi8E,SAAS,GAAGF,aAAa,CAAC9yE,OAAO,CAAC6yE,YAAY,EAAE5tB,QAAQ,CAAC;IAC7D,OAAO+tB,SAAS,KAAK,CAAC,CAAC,IAAIA,SAAS,KAAK/tB,QAAQ;EACrD,CAAC;AACL;AAEA,SAAShmD,IAAIA,CAACmkD,OAAO,EAAE;EACnBA,OAAO,CAACC,WAAW,CAACC,SAAS,GAAGF,OAAO;EACvC,OAAOA,OAAO,CAACC,WAAW;AAC9B;AAEA5uD,CAAC,CAAC48D,EAAE,CAAC4hB,WAAW,GAAG,UAAUv4B,KAAK,EAAEC,GAAG,EAAE;EACrC,OAAO,IAAI,CAAC/jD,IAAI,CAAC,YAAY;IACzB,IAAI,IAAI,CAACmwE,iBAAiB,EAAE;MACxB,IAAI,CAAChxE,KAAK,CAAC,CAAC;MACZ,IAAI,CAACgxE,iBAAiB,CAACrsB,KAAK,EAAEC,GAAG,CAAC;IACtC,CAAC,MAAM,IAAI,IAAI,CAAC4M,eAAe,EAAE;MAC7B,IAAIF,KAAK,GAAG,IAAI,CAACE,eAAe,CAAC,CAAC;MAClCF,KAAK,CAAC/a,QAAQ,CAAC,IAAI,CAAC;MACpB+a,KAAK,CAAC6rB,OAAO,CAAC,WAAW,EAAEv4B,GAAG,CAAC;MAC/B0M,KAAK,CAAC8rB,SAAS,CAAC,WAAW,EAAEz4B,KAAK,CAAC;MACnC2M,KAAK,CAAC1K,MAAM,CAAC,CAAC;IAClB;EACJ,CAAC,CAAC;AACN,CAAC;AAED,SAASy2B,aAAaA,CAAClhE,CAAC,EAAE;EACtBA,CAAC,CAACyU,cAAc,CAAC,CAAC;EAClB,OAAO,KAAK;AAChB;AAGA,IAAMgxB,OAAO,GAAG,CAAA07B,qBAAA,GAAArjF,MAAM,CAACC,kBAAkB,cAAAojF,qBAAA,eAAzBA,qBAAA,CAA2BC,UAAU,GAAGtjF,MAAM,CAACC,kBAAkB,CAACqjF,UAAU,CAAChjE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE;AACpH,SAASijE,cAAcA,CAAC77D,IAAI,EAAE;EAC1B,UAAAtV,MAAA,CAAUsV,IAAI,SAAAtV,MAAA,CAAMu1C,OAAO;AAC/B;AAEIlnD,OAAO,CAACN,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;AAE9B,IAAIqjF,GAAG,GAAG/iF,OAAO,CAACN,MAAM,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,gBAAiB,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAChH,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,sBAAsB,EAAE,SAAS,EAChF,mBAAmB,EAAE,gBAAgB,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,CAC1E61D,MAAM,CAAC,CAAC,gBAAgB,EAAE,0BAA0B,EACjD,UAAUytB,cAAc,EAAEC,wBAAwB,EAAE;EAEhDD,cAAc,CACTE,IAAI,CAAC,OAAO,EAAE;IACXltB,WAAW,EAAE8sB,cAAc,CAAC,2BAA2B,CAAC;IACxD7iF,UAAU,EAAE,gBAAgB;IAC5BkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,eAAe,EAAE;IACnBltB,WAAW,EAAE8sB,cAAc,CAAC,4BAA4B,CAAC;IACzD7iF,UAAU,EAAE,wBAAwB;IACpCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,eAAe,EAAE;IACnBltB,WAAW,EAAE8sB,cAAc,CAAC,mCAAmC,CAAC;IAChE7iF,UAAU,EAAE,wBAAwB;IACpCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,eAAe,EAAE;IACnBltB,WAAW,EAAE8sB,cAAc,CAAC,mCAAmC,CAAC;IAChE7iF,UAAU,EAAE,wBAAwB;IACpCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,WAAW,EAAE;IACfltB,WAAW,EAAE8sB,cAAc,CAAC,+BAA+B,CAAC;IAC5D7iF,UAAU,EAAE,oBAAoB;IAChCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,cAAc,EAAE;IAClBltB,WAAW,EAAE8sB,cAAc,CAAC,kCAAkC,CAAC;IAC/D7iF,UAAU,EAAE,uBAAuB;IACnCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,YAAY,EAAE;IAChBltB,WAAW,EAAE8sB,cAAc,CAAC,gCAAgC,CAAC;IAC7D7iF,UAAU,EAAE,qBAAqB;IACjCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,oBAAoB,EAAE;IACxBltB,WAAW,EAAE8sB,cAAc,CAAC,wCAAwC,CAAC;IACrE7iF,UAAU,EAAE,6BAA6B;IACzCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,iBAAiB,EAAE;IACrBltB,WAAW,EAAE8sB,cAAc,CAAC,qCAAqC,CAAC;IAClE7iF,UAAU,EAAE,0BAA0B;IACtCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,iBAAiB,EAAE;IACrBltB,WAAW,EAAE8sB,cAAc,CAAC,qCAAqC,CAAC;IAClE7iF,UAAU,EAAE,0BAA0B;IACtCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,YAAY,EAAE;IAChBltB,WAAW,EAAE8sB,cAAc,CAAC,gCAAgC,CAAC;IAC7D7iF,UAAU,EAAE,qBAAqB;IACjCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,oBAAoB,EAAE;IACxBltB,WAAW,EAAE8sB,cAAc,CAAC,wCAAwC,CAAC;IACrE7iF,UAAU,EAAE,6BAA6B;IACzCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,QAAQ,EAAE;IACZltB,WAAW,EAAE8sB,cAAc,CAAC,4BAA4B,CAAC;IACzD7iF,UAAU,EAAE,iBAAiB;IAC7BkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,eAAe,EAAE;IACnBltB,WAAW,EAAE8sB,cAAc,CAAC,mCAAmC,CAAC;IAChE7iF,UAAU,EAAE,kBAAkB;IAC9BkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,YAAY,EAAE;IAChBltB,WAAW,EAAE8sB,cAAc,CAAC,gCAAgC,CAAC;IAC7D7iF,UAAU,EAAE,qBAAqB;IACjCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,gBAAgB,EAAE;IACpBltB,WAAW,EAAE8sB,cAAc,CAAC,oCAAoC,CAAC;IACjE7iF,UAAU,EAAE,yBAAyB;IACrCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,gBAAgB,EAAE;IACpBltB,WAAW,EAAE8sB,cAAc,CAAC,oCAAoC,CAAC;IACjE7iF,UAAU,EAAE,yBAAyB;IACrCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,wBAAwB,EAAE;IAC5BltB,WAAW,EAAE8sB,cAAc,CAAC,0CAA0C,CAAC;IACvE7iF,UAAU,EAAE,+BAA+B;IAC3CkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,qBAAqB,EAAE;IACzBltB,WAAW,EAAE8sB,cAAc,CAAC,yCAAyC,CAAC;IACtE7iF,UAAU,EAAE,8BAA8B;IAC1CkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,kBAAkB,EAAE;IACtBltB,WAAW,EAAE8sB,cAAc,CAAC,sCAAsC,CAAC;IACnE7iF,UAAU,EAAE,2BAA2B;IACvCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,kBAAkB,EAAE;IACtBltB,WAAW,EAAE8sB,cAAc,CAAC,sCAAsC,CAAC;IACnE7iF,UAAU,EAAE,2BAA2B;IACvCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,2BAA2B,EAAE;IAC/BltB,WAAW,EAAE8sB,cAAc,CAAC,+CAA+C,CAAC;IAC5E7iF,UAAU,EAAE,oCAAoC;IAChDkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,iBAAiB,EAAE;IACrBltB,WAAW,EAAE8sB,cAAc,CAAC,qCAAqC,CAAC;IAClE7iF,UAAU,EAAE,0BAA0B;IACtCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,kBAAkB,EAAE;IACtBltB,WAAW,EAAE8sB,cAAc,CAAC,sCAAsC,CAAC;IACnE7iF,UAAU,EAAE,2BAA2B;IACvCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,2BAA2B,EAAE;IAC/BltB,WAAW,EAAE8sB,cAAc,CAAC,+CAA+C,CAAC;IAC5E7iF,UAAU,EAAE,oCAAoC;IAChDkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,oBAAoB,EAAE;IACxBltB,WAAW,EAAE8sB,cAAc,CAAC,wCAAwC,CAAC;IACrE7iF,UAAU,EAAE,6BAA6B;IACzCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,sBAAsB,EAAE;IAC1BltB,WAAW,EAAE8sB,cAAc,CAAC,0CAA0C,CAAC;IACvE7iF,UAAU,EAAE,+BAA+B;IAC3CkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,GAAG,EAAE;IACPE,UAAU,EAAE;EAChB,CAAC,CAAC,CACDF,IAAI,CAAC,OAAO,EAAE;IACXltB,WAAW,EAAE8sB,cAAc,CAAC,2BAA2B,CAAC;IACxD7iF,UAAU,EAAE,gBAAgB;IAC5BkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC,CACDD,IAAI,CAAC,oBAAoB,EAAE;IACxBltB,WAAW,EAAE8sB,cAAc,CAAC,2CAA2C,CAAC;IACxE7iF,UAAU,EAAE,2BAA2B;IACvCkjF,oBAAoB,EAAE;EAC1B,CAAC,CAAC;EACF;EACA;EACA;EACA;EACA;;EAEJH,cAAc,CAACK,SAAS,CAAC;IACrBD,UAAU,EAAE;EAChB,CAAC,CAAC;EAEF7jF,MAAM,CAACm4B,YAAY,CAAC4xB,UAAU,CAAC,oBAAoB,CAAC;EACpD/pD,MAAM,CAACm4B,YAAY,CAAC4xB,UAAU,CAAC,uBAAuB,CAAC;EAEvD25B,wBAAwB,CAACK,qBAAqB,CAAC,2CAA2C,CAAC;EAC3Fp+E,OAAO,CAACC,GAAG,CAAC,wBAAwB,CAAC;AAEzC,CAAC,CAAC,CAAC,CACNo+E,GAAG,qNAAC,UAAUpjF,UAAU,EAAEI,aAAa,EAAEH,aAAa,EAAEypB,KAAK,EAAEppB,SAAS,EAAEE,cAAc,EACrFutE,cAAc,EAAEsV,cAAc,EAAEC,cAAc,EAAErlE,WAAW,EAAEslE,cAAc,EAAEnzD,eAAe,EAAEqsB,aAAa,EAAE;EACzG;EACA;EACAz8C,UAAU,CAACoC,GAAG,CAAC,sBAAsB,EAAE,UAASC,KAAK,EAAE2tE,IAAI,EAAEC,OAAO,EAAE;IAClElrE,OAAO,CAACC,GAAG,CAAC,uBAAuB,GAAGgrE,IAAI,CAAC;IAC3C,IAAGA,IAAI,IAAIC,OAAO,IAAID,IAAI,CAAC7pE,MAAM,GAAG8pE,OAAO,CAAC9pE,MAAM,EAAE;MAChD,IAAI04D,GAAG,GAAGoR,OAAO,CAACtvD,MAAM,CAACqvD,IAAI,CAAC7pE,MAAM,CAAC;MACrC,IAAG04D,GAAG,KAAK,QAAQ,EAAE;QACjBx8D,KAAK,CAAC0zB,cAAc,CAAC,CAAC;MAC1B;IACJ;IAEA,IAAI43C,KAAK,GAAG9pE,CAAC,CAAC,+HAA+H,CAAC;IAC9I8pE,KAAK,CAACtiD,GAAG,CAAC,QAAQ,CAAC;EACvB,CAAC,CAAC;;EAEN;EACArrB,UAAU,CAACI,aAAa,GAAGA,aAAa;EACxCJ,UAAU,CAACC,aAAa,GAAGA,aAAa;EACxC8E,OAAO,CAACC,GAAG,CAAC,2BAA2B,CAAC;EACxCu7E,4EAAoB,CAACngF,aAAa,EAAEH,aAAa,EAAEypB,KAAK,EAAEppB,SAAS,EAAEE,cAAc,EAC/EutE,cAAc,EAAEsV,cAAc,EAAEC,cAAc,EAAErlE,WAAW,EAAEslE,cAAc,EAAEnzD,eAAe,EAAEqsB,aAAa,CAAC;AACpH,CAAC,EAAC;AAEN58C,OAAO,CACNN,MAAM,CAAC,UAAU,EAAC,EAAE,CAAC,CACrB6jF,GAAG,CAAC,CAAC,gBAAgB,EAAE,UAAS56B,cAAc,EAAE;EAC7C,IAAIpjC,GAAG,GAAG,kCAAkC;EAC5CojC,cAAc,CAACg7B,GAAG,CAACp+D,GAAG,EAAEsuC,mBAAO,CAAC,mFAAqC,CAAC,CAAC;AAC3E,CAAC,CAAC,CAAC;AAEH,SAAS+vB,QAAQA,CAAA,EAAG;EAChB;EACA,IAAI,CAAC,CAACrkF,MAAM,CAACynB,OAAO,EAAE;IAElB;IACA;IACAxG,QAAQ,CAACqjE,gBAAgB,CAAC,aAAa,EAAE,YAAY;MACjD3+E,OAAO,CAACC,GAAG,CAAC,mBAAmB,CAAC;;MAEhC;MACAqb,QAAQ,CAACqjE,gBAAgB,CAAC,YAAY,EAAElB,aAAa,EAAE,KAAK,CAAC;MAE7DmB,gBAAgB,CAACC,UAAU,CAAC;IAEhC,CAAC,EAAE,KAAK,CAAC;EACb,CAAC,MACI;IACD7wB,UAAU,CAAC,YAAW;MAClB,IAAI3b,QAAQ,GAAGv3C,OAAO,CAACw3C,OAAO,CAAC,MAAM,CAAC,CAACD,QAAQ,CAAC,CAAC;MACjD,IAAIu5B,QAAQ,GAAGv5B,QAAQ,CAACG,GAAG,CAAC,WAAW,CAAC;MACxC,IAAIssC,cAAc,GAAGlT,QAAQ,CAACmT,MAAM,CAACxsE,WAAW,CAAC,CAAC,KAAK,eAAe;MAEtE,IAAI,CAACusE,cAAc,EAAE;QAEjB,IAAIE,YAAY,GAAG3sC,QAAQ,CAACG,GAAG,CAAC,iBAAiB,CAAC;QAElDwsC,YAAY,CAACxgC,IAAI,CAAC,UAAUr/C,GAAG,EAAE;UAC7BL,CAAC,CAAC,oBAAoB,CAAC,CAACiE,WAAW,CAAC,mBAAmB,CAAC;QAC5D,CAAC,CAAC;QAEF,IAAIk8E,qBAAqB,GAAG5sC,QAAQ,CAACG,GAAG,CAAC,uBAAuB,CAAC;QACjEysC,qBAAqB,CAACzgC,IAAI,CAAC,CAAC;MAChC,CAAC,MAAM;QACH1/C,CAAC,CAAC,oBAAoB,CAAC,CAACiE,WAAW,CAAC,mBAAmB,CAAC;MAC5D;IACJ,CAAC,EAAE,GAAG,CAAC;EACX;AACJ;AAEA,SAAS87E,UAAUA,CAAA,EAAG;EAClBxkF,MAAM,CAAC2zD,UAAU,CAAC,YAAY;IAE1B,IAAI3b,QAAQ,GAAGv3C,OAAO,CAACw3C,OAAO,CAAC,MAAM,CAAC,CAACD,QAAQ,CAAC,CAAC;IAEjD,IAAIn3C,aAAa,GAAGm3C,QAAQ,CAACG,GAAG,CAAC,eAAe,CAAC;IACjD,IAAI0sC,iBAAiB,GAAG7sC,QAAQ,CAACG,GAAG,CAAC,YAAY,CAAC;IAClD,IAAI3/B,YAAY,GAAGw/B,QAAQ,CAACG,GAAG,CAAC,cAAc,CAAC;IAC/C,IAAI3iC,eAAe,GAAGwiC,QAAQ,CAACG,GAAG,CAAC,iBAAiB,CAAC;IACrD,IAAIysC,qBAAqB,GAAG5sC,QAAQ,CAACG,GAAG,CAAC,uBAAuB,CAAC;IACjE,IAAIo5B,QAAQ,GAAGv5B,QAAQ,CAACG,GAAG,CAAC,WAAW,CAAC;IACxC,IAAIv3C,UAAU,GAAGo3C,QAAQ,CAACG,GAAG,CAAC,YAAY,CAAC;IAC3C,SAAS2sC,YAAYA,CAAA,EAAG;MACpBlkF,UAAU,CAACmkF,UAAU,CAAC,YAAY;QAC9BtgF,CAAC,CAAC,oBAAoB,CAAC,CAACiE,WAAW,CAAC,mBAAmB,CAAC;QACxD6oE,QAAQ,CAAC9jD,IAAI,CAAC,OAAO,CAAC;MAC1B,CAAC,CAAC;IACN;IACA,IAAIg3D,cAAc,GAAGlT,QAAQ,CAACmT,MAAM,CAACxsE,WAAW,CAAC,CAAC,KAAK,eAAe;IACtE,IAAM2G,WAAW,GAAGm5B,QAAQ,CAACG,GAAG,CAAC,aAAa,CAAC;IAC/C,IAAMztB,qBAAqB,GAAGstB,QAAQ,CAACG,GAAG,CAAC,uBAAuB,CAAC;IACnE,IAAM/tB,eAAe,GAAG4tB,QAAQ,CAACG,GAAG,CAAC,iBAAiB,CAAC;IAEvD,IAAM6sC,sBAAsB,GAAG,CAACnmE,WAAW,EAAE6L,qBAAqB,EAAEN,eAAe,CAAC;IAEpFzkB,OAAO,CAACC,GAAG,CAAC,gCAAgC,CAAC;IAC7C/E,aAAa,CAAC2L,QAAQ,GAAGxM,MAAM,CAACw3C,MAAM,KAAKx3C,MAAM,CAACw3C,MAAM,CAACytC,SAAS,KAAK,IAAI,IAAIjlF,MAAM,CAACw3C,MAAM,CAACC,QAAQ,KAAK,KAAK,CAAC;IAChH52C,aAAa,CAAC8oB,UAAU,GAAG3pB,MAAM,CAACw3C,MAAM,CAACytC,SAAS,KAAK,IAAI,IAAIjlF,MAAM,CAACw3C,MAAM,CAACC,QAAQ,KAAK,KAAK;IAE/F,IAAI52C,aAAa,CAAC8oB,UAAU,EACxB9oB,aAAa,CAAC4lC,QAAQ,GAAG,IAAI;;IAEjC;;IAEA,IAAI5lC,aAAa,CAAC2L,QAAQ,EAAE;MACxB7G,OAAO,CAACC,GAAG,CAAC,yBAAyB,CAAC;MACtCqb,QAAQ,CAACqjE,gBAAgB,CAAC,OAAO,EAAE,YAAY;QAC3C3+E,OAAO,CAACC,GAAG,CAAC,uBAAuB,CAAC;MACxC,CAAC,EAAE,KAAK,CAAC;MAETqb,QAAQ,CAACqjE,gBAAgB,CAAC,QAAQ,EAAE,YAAY;QAC5C3+E,OAAO,CAACC,GAAG,CAAC,wBAAwB,CAAC;QACrC+tD,UAAU,CAAC,YAAY;UACnBn7C,YAAY,CAAC0sE,aAAa,CAAC,CAAC;QAChC,CAAC,EAAE,GAAG,CAAC;MACX,CAAC,EAAE,KAAK,CAAC;IACb;IAGA,IAAIrkF,aAAa,CAAC2L,QAAQ,EAAE;MACxB7G,OAAO,CAACC,GAAG,CAAC,WAAW,GAAG5F,MAAM,CAACw3C,MAAM,CAACC,QAAQ,GAAG,IAAI,GAAGz3C,MAAM,CAACw3C,MAAM,CAACmQ,OAAO,CAAC;MAChF9mD,aAAa,CAACskF,WAAW,GAAGC,SAAS,CAACC,WAAW;MACjD1/E,OAAO,CAACC,GAAG,CAAC,kBAAkB,GAAG/E,aAAa,CAACskF,WAAW,CAAC;MAC3DtkF,aAAa,CAAC4lC,QAAQ,GAAG5lC,aAAa,CAACskF,WAAW,CAACn1E,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC;;MAE9E;MACA;MACIhQ,MAAM,CAACskF,gBAAgB,CAAC,iBAAiB,EAAEgB,cAAc,CAAC;MAC1DtlF,MAAM,CAACskF,gBAAgB,CAAC,iBAAiB,EAAEiB,cAAc,CAAC;MAC9D;;MAEAvlF,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAACkhD,OAAO,CAAC,UAAU1gF,GAAG,EAAEsjB,MAAM,EAAE;QACtD,IAAItjB,GAAG,EAAE;UACLa,OAAO,CAACC,GAAG,CAAC,gBAAgB,CAAC;QACjC,CAAC,MACI;UACDD,OAAO,CAACC,GAAG,CAAC,iBAAiB,CAAC;QAClC;MACJ,CAAC,CAAC;MAEFD,OAAO,CAACC,GAAG,CAAC,2BAA2B,CAAC;MAGxC5F,MAAM,CAACskF,gBAAgB,CAAC,cAAc,EAAE,UAAUhiE,GAAG,EAAE;QACnD;QACAqxC,UAAU,CAAC,YAAY;UACnB,IAAIzxC,CAAC,GAAGujE,MAAM,CAACzoC,KAAK,CAAC,2BAA2B,CAAC;UACjD96B,CAAC,CAACrW,KAAK,GAAGyW,GAAG,CAACojE,MAAM;UACpBjhF,CAAC,CAACwc,QAAQ,CAAC,CAAC9b,OAAO,CAAC+c,CAAC,CAAC;QAC1B,CAAC,EAAE,CAAC,CAAC;MACT,CAAC,CAAC;;MAEF;;MAEA;MACA,IAAIyjE,MAAM,GAAG9kF,aAAa,CAAC+uC,kBAAkB,CAAC,CAAC;;MAE/C;MACA+1C,MAAM,CAACx9C,aAAa,GAAG,KAAK;MAC5B;;MAEAtnC,aAAa,CAACkvC,kBAAkB,CAAC41C,MAAM,CAAC;MAExC,IAAI;QACA9uC,SAAS,CAAC+uC,YAAY,CAACC,gBAAgB,CAAC,CAAC,CACxClhF,IAAI,CAAC,UAASmhF,OAAO,EAAC;UACnBA,OAAO,CAACz4E,OAAO,CAAC,UAAS8C,CAAC,EAAE;YACxB,IAAI,CAACtP,aAAa,CAAC8nC,SAAS,KAAKx4B,CAAC,CAAC41E,IAAI,KAAK,YAAY,IAAI51E,CAAC,CAAC41E,IAAI,KAAK,OAAO,CAAC,EAAE;cAC7EllF,aAAa,CAAC8nC,SAAS,GAAG,IAAI;YAClC;UACJ,CAAC,CAAC;QACN,CAAC,CAAC;MACN,CAAC,CAAC,OAAOzmB,CAAC,EAAE;QACRvc,OAAO,CAACC,GAAG,CAAC,0CAA0C,CAAC;QACvD,IAAIixC,SAAS,CAAC0qC,SAAS,KAAK1qC,SAAS,CAAC0qC,SAAS,CAACvxE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI6mC,SAAS,CAAC0qC,SAAS,CAACvxE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;UACjHnP,aAAa,CAAC8nC,SAAS,GAAG,IAAI;QAClC;MACJ;MAGA,IAAI1oC,qEAA2B,IAAI,SAAS,EAAE;QAE1C0F,OAAO,CAACC,GAAG,CAAC,gBAAgB,GAAG/E,aAAa,CAAC2L,QAAQ,CAAC;QACtDxM,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAAC8D,QAAQ,CAAC,UAAUtjC,GAAG,EAAEsjB,MAAM,EAAE;UACvD,IAAItjB,GAAG,EAAE;YACLa,OAAO,CAACC,GAAG,CAAC,iBAAiB,CAAC;YAC9B/E,aAAa,CAACunC,QAAQ,GAAG,KAAK;UAClC,CAAC,MACI;YACDvnC,aAAa,CAACunC,QAAQ,GAAGhgB,MAAM,CAACggB,QAAQ,KAAK,IAAI;YACjDziC,OAAO,CAACC,GAAG,CAAC,oBAAoB,GAAG/E,aAAa,CAACunC,QAAQ,CAAC;UAC9D;QACJ,CAAC,CAAC;MACN;IACJ;IAEA,IAAI,CAACq8C,cAAc,EAAE;MACjBG,qBAAqB,CAACzgC,IAAI,CAAC,CAAC;IAChC;IAEAtjD,aAAa,CAAC+oC,cAAc,CAACiN,SAAS,CAACmvC,UAAU,CAAC/2E,IAAI,MAAM,OAAOg3E,UAAU,KAAK,WAAW,GAAGA,UAAU,CAACC,IAAI,GAAG,MAAM,CAAC,CAAC;IAE1H,IAAI,CAACzB,cAAc,EAAE;MACjB,IAAIzkF,MAAM,CAACu4C,WAAW,IAAIv4C,MAAM,CAACE,MAAM,IAAI2kF,iBAAiB,CAACjvE,WAAW,EAAE;QACtE,IAAI+uE,YAAY,GAAG3sC,QAAQ,CAACG,GAAG,CAAC,iBAAiB,CAAC;QAClDn4C,MAAM,CAACu4C,WAAW,GAAG,IAAI;QACzBosC,YAAY,CAACxgC,IAAI,CAAC,UAAUr/C,GAAG,EAAE;UAC7B,IAAIA,GAAG,EAAE;YACL,IAAIhE,YAAY,GAAGk3C,QAAQ,CAACG,GAAG,CAAC,cAAc,CAAC;YAC/Cr3C,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;YAC3B;UACJ;UACAggF,YAAY,CAAC,CAAC;QAClB,CAAC,CAAC;MACN,CAAC,MAAM;QACPtvE,eAAe,CAAC2uC,IAAI,CAAC,UAAUr/C,GAAG,EAAE;UAChC,IAAIA,GAAG,EAAE;YACL,IAAIhE,YAAY,GAAGk3C,QAAQ,CAACG,GAAG,CAAC,cAAc,CAAC;YAC/Cr3C,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;YAC3B;UACJ;UACA,IAAI7E,qEAA2B,KAAK,SAAS,EAAE;YAC3CD,MAAM,CAACu4C,WAAW,GAAG,IAAI;YACzB,IAAIosC,YAAY,GAAG3sC,QAAQ,CAACG,GAAG,CAAC,iBAAiB,CAAC;YAClDwsC,YAAY,CAACxgC,IAAI,CAAC,UAAUgiC,IAAI,EAAE;cAC9B,IAAIA,IAAI,EAAE;gBACN,IAAIrlF,YAAY,GAAGk3C,QAAQ,CAACG,GAAG,CAAC,cAAc,CAAC;gBAC/Cr3C,YAAY,CAACiE,SAAS,CAACohF,IAAI,CAAC;cAChC;cACArB,YAAY,CAAC,CAAC;YAClB,CAAC,CAAC;UACN,CAAC,MAAM;YACHA,YAAY,CAAC,CAAC;UAClB;QACJ,CAAC,CAAC;MACF;MAEAnxB,UAAU,CAAC,YAAY;QAAA,IAAAyyB,SAAA,GAAAC,0BAAA,CACGrB,sBAAsB;UAAAsB,KAAA;QAAA;UAA5C,KAAAF,SAAA,CAAApwC,CAAA,MAAAswC,KAAA,GAAAF,SAAA,CAAA98C,CAAA,IAAAi9C,IAAA,GAA8C;YAAA,IAAnC/mE,OAAO,GAAA8mE,KAAA,CAAApwE,KAAA;YACd,IAAI;cACAsJ,OAAO,CAACgT,WAAW,CAAC,CAAC;cACrB7sB,OAAO,CAACC,GAAG,CAAC,kBAAkB,GAAG4Z,OAAO,CAACgT,WAAW,CAAC;YACzD,CAAC,CAAC,OAAOtQ,CAAC,EAAE;cACRvc,OAAO,CAACqkB,KAAK,CAAC9H,CAAC,CAAC;YACpB;UACJ;QAAC,SAAApd,GAAA;UAAAshF,SAAA,CAAAlkE,CAAA,CAAApd,GAAA;QAAA;UAAAshF,SAAA,CAAArjE,CAAA;QAAA;MACL,CAAC,EAAE,GAAG,CAAC;IACX,CAAC,MAAM;MACHte,CAAC,CAAC,oBAAoB,CAAC,CAACiE,WAAW,CAAC,mBAAmB,CAAC;IAC5D;EAEJ,CAAC,EAAE,GAAG,CAAC;AACX;AAEA,SAAS67E,gBAAgBA,CAACiC,WAAW,EAAE;EACnC;AACR;AACA;AACA;AACA;;EAEQ,IAAIC,WAAW,GAAGh/D,OAAO,CAACqC,OAAO,CAAC28D,WAAW;EAE7C,IAAMC,IAAI,GAAG,CACTD,WAAW,CAACE,sBAAsB,EAClCF,WAAW,CAACG,sBAAsB,EAClCH,WAAW,CAACI,oBAAoB,EAChCJ,WAAW,CAACK,MAAM,EAClBL,WAAW,CAACM,iBAAiB,EAC7BN,WAAW,CAACO,cAAc,CAC7B;EAEDP,WAAW,CAACQ,eAAe,CAACP,IAAI,EAAE,UAAUhuC,MAAM,EAAE;IAChD,IAAIA,MAAM,IAAI,CAACA,MAAM,CAACwuC,aAAa,EAAE;MACjCvhF,OAAO,CAACC,GAAG,CAAC,qBAAqB,CAAC;MAClC6gF,WAAW,CAACU,kBAAkB,CAC1BT,IAAI,EACJ,UAAUhuC,MAAM,EAAE;QACd,IAAI,CAACA,MAAM,CAACwuC,aAAa,EAAEvhF,OAAO,CAACC,GAAG,CAAC,gBAAgB,CAAC,CAAC,KACpD;UACDD,OAAO,CAACC,GAAG,CAAC,iBAAiB,CAAC;QAClC;QAEA4gF,WAAW,CAAC,CAAC;MACjB,CAAC,CAAC;IACV,CAAC,MACI;MACD7gF,OAAO,CAACC,GAAG,CAAC,gBAAgB,CAAC;MAC7B4gF,WAAW,CAAC,CAAC;IACjB;EACJ,CAAC,CAAC;AACN;AAEA,SAASlB,cAAcA,CAACriF,KAAK,EAAE;EAC3B,IAAImkF,CAAC,GAAGpnF,MAAM,CAAC+C,WAAW,GAAGE,KAAK,CAACs4E,cAAc;EAEjD92E,CAAC,CAAC,yBAAyB,CAAC,CAACkF,GAAG,CAAC1G,KAAK,CAACs4E,cAAc,CAAC;EAEtD92E,CAAC,CAAC,qBAAqB,CAAC,CAACmC,IAAI,CAAC,UAAUC,GAAG,EAAEtG,EAAE,EAAE;IAC7C,IAAI,CAACkE,CAAC,CAAClE,EAAE,CAAC,CAAC8mF,QAAQ,CAAC,iBAAiB,CAAC,EAAE;MACpC,IAAI5iF,CAAC,CAAClE,EAAE,CAAC,CAACm1E,IAAI,CAAC,SAAS,CAAC,KAAK,MAAM,EAAE;QAClCjxE,CAAC,CAAClE,EAAE,CAAC,CAAC6rB,OAAO,CAAC,kBAAkB,CAAC,CAAC6+B,QAAQ,CAAC,uBAAuB,CAAC;MACvE;MACA,IAAMq8B,EAAE,GAAG3iE,QAAQ,CAAClgB,CAAC,CAAClE,EAAE,CAAC,CAACwd,GAAG,CAAC,QAAQ,CAAC,CAAC;MACxC,IAAIupE,EAAE,EAAE;QACJF,CAAC,GAAGE,EAAE,GAAGrkF,KAAK,CAACs4E,cAAc;MACjC;MACA92E,CAAC,CAAClE,EAAE,CAAC,CAACwd,GAAG,CAAC,YAAY,EAAEqpE,CAAC,GAAG,IAAI,CAAC;MACjC3iF,CAAC,CAAClE,EAAE,CAAC,CAAC0qD,QAAQ,CAAC,iBAAiB,CAAC;IACrC;EACJ,CAAC,CAAC;EAEF,IAAIxmD,CAAC,CAAC,iBAAiB,CAAC,CAACsf,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,EAAE;IAE9C,IAAIktD,GAAG,GAAGxsE,CAAC,CAAC,gBAAgB,CAAC,CAACuN,IAAI,CAAC,mBAAmB,CAAC,CAACA,IAAI,CAAC,2BAA2B,CAAC;IACzF,IAAIi/D,GAAG,CAAClqE,MAAM,GAAG,CAAC,EAAE;MAChBkqE,GAAG,CAAClzD,GAAG,CAAC,YAAY,EAAEqpE,CAAC,GAAG,IAAI,CAAC;MAC/BnW,GAAG,CAAClzD,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC;MAC/BkzD,GAAG,CAAClzD,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;MACtBkzD,GAAG,CAAClzD,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;MACpBkzD,GAAG,CAAClzD,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;MACnBkzD,GAAG,CAAClzD,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC;MACrBkzD,GAAG,CAAClzD,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC;MAC/BkzD,GAAG,CAAChmB,QAAQ,CAAC,iBAAiB,CAAC;IACnC;EACJ;EAEA,IAAIs8B,KAAK,GAAGtmE,QAAQ,CAACkzC,aAAa,CAAC;;EAEnC,IAAI,CAAC,CAACozB,KAAK,EAAE;IACT,IAAIvnF,MAAM,CAACw3C,MAAM,CAACC,QAAQ,KAAK,KAAK,IAAI9yB,QAAQ,CAAC3kB,MAAM,CAACw3C,MAAM,CAACmQ,OAAO,CAAC,IAAI,EAAE,EACzE4/B,KAAK,CAACC,cAAc,CAAC;MAAEC,QAAQ,EAAE,MAAM;MAAEC,KAAK,EAAE,QAAQ;MAAEC,MAAM,EAAE;IAAU,CAAC,CAAC,CAAC,KAC9E;MACD,IAAIpnF,EAAE,GAAGkE,CAAC,CAAC8iF,KAAK,CAAC;MACjB,IAAIt7D,GAAG,GAAG1rB,EAAE,CAAC2rB,MAAM,CAAC,CAAC;MACrB,IAAI07D,IAAI,GAAG37D,GAAG,CAACM,GAAG,GAAGhsB,EAAE,CAACud,MAAM,CAAC,CAAC;MAChC,IAAI8pE,IAAI,GAAIR,CAAC,GAAG,EAAG,EAAE;QACjB,IAAIj7D,GAAG,GAAG,IAAI;QACd,IAAI1nB,CAAC,CAAC,gBAAgB,CAAC,CAACsC,MAAM,GAAG,CAAC,EAAE;UAChColB,GAAG,GAAG5rB,EAAE,CAAC6rB,OAAO,CAAC,2BAA2B,CAAC;QACjD,CAAC,MACI;UACDD,GAAG,GAAG5rB,EAAE,CAAC6rB,OAAO,CAAC,qBAAqB,CAAC;QAC3C;QACA,IAAID,GAAG,CAACplB,MAAM,GAAG,CAAC,EAAE;UAChBolB,GAAG,CAAC,CAAC,CAAC,CAAC07D,QAAQ,CAAC,CAAC,EAAGD,IAAI,GAAGR,CAAC,GAAG,EAAG,CAAC;QACvC;MACJ;IACJ;EACJ;EAEAzzB,UAAU,CAAC,YAAY;IACnB,IAAIzvC,IAAI,GAAGzjB,OAAO,CAACw3C,OAAO,CAACh3B,QAAQ,CAACstC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC9D,IAAIvW,QAAQ,GAAG9zB,IAAI,CAAC8zB,QAAQ,CAAC,CAAC;IAC9B,IAAIp3C,UAAU,GAAGo3C,QAAQ,CAACG,GAAG,CAAC,YAAY,CAAC;IAC3Cv3C,UAAU,CAACkzD,MAAM,CAAC,YAAY;MAC1BlzD,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC;IAChD,CAAC,CAAC;EACN,CAAC,CAAC;AACN;AAEA,SAAS45E,cAAcA,CAAA,EAAG;EACtB9gF,CAAC,CAAC,yBAAyB,CAAC,CAACkF,GAAG,CAAC,CAAC,CAAC;EAEnClF,CAAC,CAAC,qBAAqB,CAAC,CAACmC,IAAI,CAAC,UAAUC,GAAG,EAAEtG,EAAE,EAAE;IAC7CkE,CAAC,CAAClE,EAAE,CAAC,CAACwd,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC;IAC3BtZ,CAAC,CAAClE,EAAE,CAAC,CAACmI,WAAW,CAAC,iBAAiB,CAAC;IACpC,IAAIjE,CAAC,CAAClE,EAAE,CAAC,CAACm1E,IAAI,CAAC,SAAS,CAAC,KAAK,MAAM,EAAE;MAClCjxE,CAAC,CAAClE,EAAE,CAAC,CAAC6rB,OAAO,CAAC,kBAAkB,CAAC,CAAC1jB,WAAW,CAAC,uBAAuB,CAAC;IAC1E;EACJ,CAAC,CAAC;EAEF,IAAIjE,CAAC,CAAC,iBAAiB,CAAC,CAACsf,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,EAAE;IAC9C,IAAIktD,GAAG,GAAGxsE,CAAC,CAAC,gBAAgB,CAAC,CAACuN,IAAI,CAAC,mBAAmB,CAAC,CAACA,IAAI,CAAC,2BAA2B,CAAC;IACzF,IAAIi/D,GAAG,CAAClqE,MAAM,GAAG,CAAC,EAAE;MAChBkqE,GAAG,CAAClzD,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC;MACzBkzD,GAAG,CAAClzD,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC;MACzBkzD,GAAG,CAAClzD,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;MACrBkzD,GAAG,CAAClzD,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;MACnBkzD,GAAG,CAAClzD,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;MAClBkzD,GAAG,CAAClzD,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;MACpBkzD,GAAG,CAAClzD,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;MACvBkzD,GAAG,CAACvoE,WAAW,CAAC,iBAAiB,CAAC;IACtC;EACJ;EAEAirD,UAAU,CAAC,YAAY;IACnB,IAAIzvC,IAAI,GAAGzjB,OAAO,CAACw3C,OAAO,CAACh3B,QAAQ,CAACstC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC9D,IAAIvW,QAAQ,GAAG9zB,IAAI,CAAC8zB,QAAQ,CAAC,CAAC;IAC9B,IAAIp3C,UAAU,GAAGo3C,QAAQ,CAACG,GAAG,CAAC,YAAY,CAAC;IAC3Cv3C,UAAU,CAACkzD,MAAM,CAAC,YAAY;MAC1BlzD,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC;IAChD,CAAC,CAAC;EACN,CAAC,CAAC;AACL;AAED63E,GAAG,CAACQ,GAAG,CAAC,CAAC,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EACpG,UAAUnjF,aAAa,EAAE2X,YAAY,EAAEpX,cAAc,EAAE4vB,eAAe,EAAExG,SAAS,EAAE5pB,UAAU,EAAE;EAC3F,IAAIZ,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,WAAW,CAAC,KAAK,OAAO,EAAE;IACtD7oC,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;EAClD;EAEA,IAAI,CAACv3B,aAAa,CAACX,MAAM,EAAE;IACvB+gB,QAAQ,CAACqjE,gBAAgB,CAAC,SAAS,EAAE,YAAY;MAAEzjF,aAAa,CAAC+oC,cAAc,CAAC,KAAK,CAAC;IAAE,CAAC,EAAE,KAAK,CAAC;IACjG3oB,QAAQ,CAACqjE,gBAAgB,CAAC,QAAQ,EAAE,YAAY;MAAEzjF,aAAa,CAAC+oC,cAAc,CAAC,IAAI,CAAC;IAAE,CAAC,EAAE,KAAK,CAAC;EACnG;EAEA,IAAI/oC,aAAa,CAACX,MAAM,EAAE;IACtBW,aAAa,CAACmoC,UAAU,CAAC,CAAC;IAC1BnoC,aAAa,CAAC4lC,QAAQ,GAAG5lC,aAAa,CAACmnC,OAAO,CAACh4B,OAAO,CAAC,mCAAmC,CAAC,GAAG,CAAC;IAG/F,IAAIyd,IAAI,GAAGjD,SAAS,CAACiD,IAAI,CAAC,CAAC;IAC3B,IAAI,CAAC5sB,aAAa,CAACmkC,WAAW,IAAIvX,IAAI,KAAK,OAAO,IAAIA,IAAI,CAACvV,WAAW,CAAC,CAAC,KAAK,eAAe,EAAE;MAC1FsS,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;IAC3B;EACJ;EAEA,IAAIq6D,eAAe,GAAG9nF,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,iBAAiB,CAAC;EACpE,IAAI,CAACi/C,eAAe,EAChBA,eAAe,GAAG,IAAI;EAC1B1mF,cAAc,CAACivE,kBAAkB,CAACyX,eAAe,CAAC;EAClD1mF,cAAc,CAAC2mF,KAAK,GAAG,KAAK;;EAE5B;EACA;EACAtjF,CAAC,CAACC,OAAO,CAACsjF,QAAQ,CAACxsE,OAAO,GAAG,iGAAiG;EAC9H/W,CAAC,CAACC,OAAO,CAACsjF,QAAQ,CAACC,UAAU,GAAG;IAC5BC,UAAU,EAAE;EAChB,CAAC;EAEDzjF,CAAC,CAACC,OAAO,CAACsjF,QAAQ,CAACjqE,GAAG,GAAG;IACrBikC,eAAe,EAAE,aAAa;IAC9BmmC,MAAM,EAAE,MAAM;IACdC,OAAO,EAAE,CAAC;IACVC,MAAM,EAAE,CAAC;IACTxqE,KAAK,EAAE,KAAK;IACZ0O,GAAG,EAAE,KAAK;IACVvO,IAAI,EAAE,KAAK;IACXwuD,SAAS,EAAE,QAAQ;IACnB8b,KAAK,EAAE,aAAa;IACpBC,MAAM,EAAE;EACZ,CAAC;EAED9jF,CAAC,CAACC,OAAO,CAACsjF,QAAQ,CAACQ,KAAK,GAAG,MAAM;EAEjC/jF,CAAC,CAACC,OAAO,CAACsjF,QAAQ,CAACS,OAAO,GAAG,UAAUxwC,OAAO,EAAE/vC,OAAO,EAAE;IACrDtH,UAAU,CAAC8nF,gBAAgB,GAAG,IAAI;EACtC,CAAC;EAEDjkF,CAAC,CAACC,OAAO,CAACsjF,QAAQ,CAACW,SAAS,GAAG,UAAU1wC,OAAO,EAAE/vC,OAAO,EAAE;IACvDtH,UAAU,CAAC8nF,gBAAgB,GAAG,KAAK;EACvC,CAAC;EAED/iF,OAAO,CAACC,GAAG,CAAC,4BAA4B,CAAC;EAEzCy+E,QAAQ,CAAC,CAAC;AACd,CAAC,CACJ,CAAC;AAEFb,GAAG,CAAC1/B,OAAO,CAAC,cAAc,EAAE,CAAC,UAAU,EAAE,UAAU3iD,QAAQ,EAAE;EACzD,IAAIynF,YAAY,GAAG,CAAC,CAAC;EACrBA,YAAY,CAACxgE,MAAM,GAAG,CAAC,CAAC;EAExBjnB,QAAQ,CAAC,YAAY;IACjBynF,YAAY,CAACxgE,MAAM,GAAG,IAAI;EAC9B,CAAC,CAAC;EACF,OAAOwgE,YAAY;AACvB,CAAC,CAAC,CAAC;AAEHpF,GAAG,CAAC98E,MAAM,CAAC,UAAU,EAAE,YAAY;EAC/B,OAAO,UAAU+D,IAAI,EAAE;IACnB,IAAI,CAACA,IAAI,EACL,OAAOA,IAAI;IAEfA,IAAI,GAAGA,IAAI,GAAG,EAAE;IAEhB,IAAIA,IAAI,CAAC1D,MAAM,IAAI,CAAC,EAChB,OAAO0D,IAAI;IAEf,IAAIo+E,UAAU,GAAI,CAACp+E,IAAI,GAAI,CAAC;IAC5B,IAAId,GAAG,GAAG6wB,IAAI,CAACkpB,KAAK,CAAClpB,IAAI,CAACD,GAAG,CAAC,CAAC9vB,IAAI,CAAC,CAAC;IACrC,IAAId,GAAG,GAAG,CAAC,EAAEA,GAAG,GAAG,CAAC;IAEpB,OAAO,CAACk/E,UAAU,GAAG,CAACl/E,GAAG,GAAGA,GAAG,IAAI,EAAE;EACzC,CAAC;AACL,CAAC,CAAC;AAEF65E,GAAG,CAAC98E,MAAM,CAAC,WAAW,EAAE,CAAC,gBAAgB,EAAC,UAAStF,cAAc,EAAE;EAC/D,OAAO,UAAUqJ,IAAI,EAAE;IACnB,IAAG,CAACA,IAAI,IAAIA,IAAI,CAAC1D,MAAM,KAAK,CAAC,EAAE,OAAO3F,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC;IAErE,OAAOsI,IAAI;EACf,CAAC;AACL,CAAC,CAAC,CAAC;AAEP,+DAAe+4E,GAAG,EAAC;;AAEnB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,4D;;;;;;;;;;;;;;;;ACpzBmC;AACnC;AAC8B;AAE9B/iF,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,iBAAiB,EAAE,CAClD,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,IAAI,EAAE,YAAY,EACvH,UAAU,EAAE,eAAe,EAC3B,UAAU3e,aAAa,EAAEC,YAAY,EAAEE,aAAa,EAAEE,SAAS,EAAEE,cAAc,EAAE0nF,gBAAgB,EAAExnF,EAAE,EAAEV,UAAU,EAC7GO,QAAQ,EAAE6mE,aAAa,EAAE;EAEzB,IAAI,CAACzvB,WAAW,GAAG,KAAK;EACxB,IAAI,CAACwwC,EAAE,GAAG,IAAI;EACd,IAAI,CAACC,gBAAgB,GAAG,EAAE;EAC1B,IAAI,CAACC,SAAS,GAAG,CAAC;EAElB,IAAI,CAACC,aAAa,GAAG,UAAUC,MAAM,EAAE3tE,OAAO,EAAE;IAC5C,IAAIyI,IAAI,GAAG,IAAI;IACf,OAAOA,IAAI,CAAC+hE,UAAU,CAACoD,SAAS,CAAC,OAAO,CAAC,CAACzkF,IAAI,CAAC,UAAS0kF,MAAM,EAAE;MAC5D,IAAIA,MAAM,EAAE;QACR1jF,OAAO,CAAComC,IAAI,CAAC,sBAAsB,CAAC;QACpC,OAAO9nB,IAAI,CAAC+hE,UAAU,CAACsD,MAAM,CAAC,CAAC;MACnC;MACA3jF,OAAO,CAAComC,IAAI,CAAC,kCAAkC,CAAC;IACpD,CAAC,CAAC,SAAM,CAAC,UAASjnC,GAAG,EAAE;MACnBa,OAAO,CAAComC,IAAI,CAAC,8BAA8B,EAAEjnC,GAAG,CAAC;IACrD,CAAC,CAAC,CAACH,IAAI,CAAC,YAAW;MACfgB,OAAO,CAAComC,IAAI,CAAC,2BAA2B,EAAEo9C,MAAM,CAACxhC,OAAO,CAAC;MAEzD,IAAI4hC,WAAW,GAAG;QACdh/E,IAAI,EAAE4+E,MAAM,CAAC5+E,IAAI;QACjBw+C,MAAM,EAAEogC,MAAM,CAACpgC,MAAM;QACrBpB,OAAO,EAAEwhC,MAAM,CAACxhC;MACpB,CAAC;MAED,OAAO1jC,IAAI,CAAC+hE,UAAU,CAACwD,QAAQ,CAACD,WAAW,CAAC;IAChD,CAAC,CAAC,CAAC5kF,IAAI,CAAC,YAAW;MACf,OAAOsf,IAAI,CAAC+hE,UAAU,CAACyD,MAAM,CAAC,OAAO,CAAC;IAC1C,CAAC,CAAC,CAAC9kF,IAAI,CAAC,YAAW;MACf,OAAOsf,IAAI,CAAC+hE,UAAU,CAAC0D,MAAM,CAAC;QAC1BC,IAAI,EAAE,WAAW;QACjBjoC,MAAM,EAAE,CAAC;UAAEiG,OAAO,EAAEwhC,MAAM,CAACxhC;QAAQ,CAAC;MACxC,CAAC,CAAC;IACN,CAAC,CAAC,CAAChjD,IAAI,CAAC,YAAW;MACfgB,OAAO,CAAComC,IAAI,CAAC,yCAAyC,EAAEo9C,MAAM,CAACxhC,OAAO,CAAC;MACvE,IAAInsC,OAAO,EAAE;QACT7V,OAAO,CAAComC,IAAI,CAACvwB,OAAO,CAAC;MACzB;IACJ,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACouE,WAAW,GAAG,UAAST,MAAM,EAAEU,aAAa,EAAE;IAC/C,IAAI5lE,IAAI,GAAG,IAAI;IAEfte,OAAO,CAAComC,IAAI,CAAC,+BAA+B,CAAC;IAE7C,IAAI+9C,kBAAkB,GAAGD,aAAa,CAAC9gC,MAAM,CAACtxC,GAAG,CAAC,UAASsyE,CAAC,EAAE;MAAE,OAAOA,CAAC,CAACx/E,IAAI;IAAE,CAAC,CAAC;IAEjF5E,OAAO,CAAComC,IAAI,CAAC,oBAAoB,CAAC;IAClC,IAAIi+C,UAAU,GAAG,CAAC,CAAC;IACnB,IAAIC,cAAc,GAAG,EAAE;IAEvBxlF,CAAC,CAACmC,IAAI,CAACkjF,kBAAkB,EAAE,UAAS5iF,KAAK,EAAEgjF,SAAS,EAAE;MAClDD,cAAc,CAACjjF,IAAI,CACfid,IAAI,CAAC+hE,UAAU,CAACr5B,MAAM,CAAC;QAAE9hD,IAAI,EAAEq/E;MAAU,CAAC,CAAC,CAACvlF,IAAI,CAAC,UAASE,IAAI,EAAE;QAC5DmlF,UAAU,CAACE,SAAS,CAAC,GAAGrlF,IAAI;QAC5Bc,OAAO,CAAComC,IAAI,CAAC,YAAY,GAAGm+C,SAAS,GAAG,EAAE,CAAC;MAC/C,CAAC,CACL,CAAC;IACL,CAAC,CAAC;IAEF,OAAO5oF,EAAE,CAACgxB,GAAG,CAAC23D,cAAc,CAAC,CAACtlF,IAAI,CAAC,YAAW;MAC1C,OAAOsf,IAAI,CAACilE,aAAa,CAACC,MAAM,CAAC;IACrC,CAAC,CAAC,CAACxkF,IAAI,CAAC,YAAW;MACfgB,OAAO,CAAComC,IAAI,CAAC,mBAAmB,CAAC;MACjC,IAAIo+C,eAAe,GAAG,EAAE;MAExB1lF,CAAC,CAACmC,IAAI,CAACkjF,kBAAkB,EAAE,UAAS5iF,KAAK,EAAEgjF,SAAS,EAAE;QAClD,IAAIF,UAAU,CAACE,SAAS,CAAC,IAAIF,UAAU,CAACE,SAAS,CAAC,CAACnjF,MAAM,GAAG,CAAC,EAAE;UAC3DojF,eAAe,CAACnjF,IAAI,CAChBid,IAAI,CAAC+hE,UAAU,CAAC0D,MAAM,CAAC;YACnBC,IAAI,EAAEO,SAAS;YACfxoC,MAAM,EAAEsoC,UAAU,CAACE,SAAS,CAAC;YAC7BE,aAAa,EAAE;UACnB,CAAC,CAAC,CAACzlF,IAAI,CAAC,YAAW;YACfgB,OAAO,CAAComC,IAAI,CAAC,WAAW,GAAGm+C,SAAS,GAAG,IAAI,GAAGF,UAAU,CAACE,SAAS,CAAC,CAACnjF,MAAM,GAAG,UAAU,CAAC;UAC5F,CAAC,CACL,CAAC;QACL;MACJ,CAAC,CAAC;MAEF,OAAOzF,EAAE,CAACgxB,GAAG,CAAC63D,eAAe,CAAC;IAClC,CAAC,CAAC,CAACxlF,IAAI,CAAC,YAAW;MACf,OAAOsf,IAAI,CAAC+hE,UAAU,CAACyD,MAAM,CAAC,OAAO,CAAC;IAC1C,CAAC,CAAC,CAAC9kF,IAAI,CAAC,YAAW;MACf,OAAOsf,IAAI,CAAComE,mBAAmB,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC1lF,IAAI,CAAC,UAASgjD,OAAO,EAAE;MACtBhiD,OAAO,CAAComC,IAAI,CAAC,0BAA0B,GAAG4b,OAAO,CAAC;MAClD,IAAIA,OAAO,KAAKwhC,MAAM,CAACxhC,OAAO,EAAE;QAC5BhiD,OAAO,CAACqkB,KAAK,CAAC,qCAAqC,GAAGm/D,MAAM,CAACxhC,OAAO,GAAG,QAAQ,GAAGA,OAAO,CAAC;MAC9F;MACAhiD,OAAO,CAAComC,IAAI,CAAC,6BAA6B,CAAC;IAC/C,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACs+C,mBAAmB,GAAG,YAAW;IAClC,IAAIpmE,IAAI,GAAG,IAAI;IACf,OAAOA,IAAI,CAAC+hE,UAAU,CAACr5B,MAAM,CAAC;MAC1B9hD,IAAI,EAAE;IACV,CAAC,CAAC,CAAClG,IAAI,CAAC,UAAS2W,IAAI,EAAE;MACnB,IAAIA,IAAI,IAAIA,IAAI,CAACvU,MAAM,GAAG,CAAC,EAAE;QACzB,OAAOuU,IAAI,CAAC,CAAC,CAAC,CAACqsC,OAAO;MAC1B;MACA,OAAO,IAAI;IACf,CAAC,CAAC,SAAM,CAAC,UAAS7iD,GAAG,EAAE;MACnBa,OAAO,CAAComC,IAAI,CAAC,oCAAoC,CAAC;MAClD,OAAO,IAAI;IACf,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACu+C,UAAU,GAAG,UAAUnB,MAAM,EAAEjtB,QAAQ,EAAE;IAC1C,IAAIj4C,IAAI,GAAG,IAAI;IAEf,OAAOA,IAAI,CAAC+hE,UAAU,CAACoD,SAAS,CAAC,OAAO,CAAC,CACpCzkF,IAAI,CAAC,UAAS0kF,MAAM,EAAE;MACnB,IAAI,CAACA,MAAM,EAAE;QACT,OAAOplE,IAAI,CAACilE,aAAa,CAACC,MAAM,EAAE,YAAY,CAAC,CAC1CxkF,IAAI,CAAC,YAAW;UACb,OAAO,KAAK;QAChB,CAAC,CAAC;MACV;MACA,OAAOsf,IAAI,CAAC+hE,UAAU,CAACyD,MAAM,CAAC,OAAO,CAAC,CACjC9kF,IAAI,CAAC,YAAW;QACb,OAAO,IAAI;MACf,CAAC,CAAC;IACV,CAAC,CAAC,CACDA,IAAI,CAAC,UAAS4lF,aAAa,EAAE;MAC1B,IAAIA,aAAa,KAAK,KAAK,EAAE;QACzB,OAAO,KAAK;MAChB;MACA,OAAOtmE,IAAI,CAAComE,mBAAmB,CAAC,CAAC;IACrC,CAAC,CAAC,CACD1lF,IAAI,CAAC,UAAS0Q,CAAC,EAAE;MACd,IAAIA,CAAC,KAAK,KAAK,EAAE;QACb,OAAO,KAAK;MAChB;MAEA,IAAIA,CAAC,KAAK,IAAI,EAAE;QACZ1P,OAAO,CAAComC,IAAI,CAAC,+BAA+B,CAAC;QAC7C,OAAO,IAAI;MACf;MAEApmC,OAAO,CAAComC,IAAI,CAAC,cAAc,GAAG12B,CAAC,GAAG,oBAAoB,GAAG8zE,MAAM,CAACxhC,OAAO,CAAC;MACxE,IAAItyC,CAAC,KAAK8zE,MAAM,CAACxhC,OAAO,EAAE;QACtB,OAAO,KAAK,CAAC,CAAC;MAClB;;MAEA;MACAhiD,OAAO,CAAComC,IAAI,CAAC,kBAAkB,CAAC;MAChC,OAAO,IAAI;IACf,CAAC,CAAC,CACDpnC,IAAI,CAAC,UAAS6lF,aAAa,EAAE;MAC1B,IAAIA,aAAa,KAAK,KAAK,EAAE;QACzB,OAAO,KAAK,CAAC,CAAC;MAClB;MACA7kF,OAAO,CAAComC,IAAI,CAAC,gBAAgB,CAAC;MAC9B,OAAO9nB,IAAI,CAAC+hE,UAAU,CAACyE,WAAW,CAAC,OAAO,CAAC,SAAM,CAAC,UAAS3lF,GAAG,EAAE;QAC5Da,OAAO,CAAComC,IAAI,CAAC,uBAAuB,EAAEjnC,GAAG,CAAC;QAC1C,OAAO,IAAI;MACf,CAAC,CAAC;IACN,CAAC,CAAC,CACDH,IAAI,CAAC,UAASklF,aAAa,EAAE;MAC1B,IAAIA,aAAa,KAAK,KAAK,EAAE;QACzB,OAAO,CAAC;MACZ;MAEAlkF,OAAO,CAAComC,IAAI,CAAC,SAAS,EAAE89C,aAAa,CAAC;;MAEtC;MACA,IAAI,CAACA,aAAa,IAAI,CAACA,aAAa,CAAC9gC,MAAM,IACvC8gC,aAAa,CAAC9gC,MAAM,CAAChiD,MAAM,KAAK,CAAC,IAAIoiF,MAAM,CAACngC,cAAc,KAAK,KAAK,EAAE;QACtE,OAAO/kC,IAAI,CAACilE,aAAa,CAACC,MAAM,EAAE,cAAc,CAAC;MACrD;MAEA,OAAOllE,IAAI,CAAC2lE,WAAW,CAACT,MAAM,EAAEU,aAAa,CAAC;IAClD,CAAC,CAAC,SACI,CAAC,UAAU/kF,GAAG,EAAE;MAClBa,OAAO,CAACqkB,KAAK,CAAC,WAAW,EAAEllB,GAAG,CAAC;MAC/Ba,OAAO,CAAComC,IAAI,CAAC,eAAe,CAAC;MAC7B,OAAO9nB,IAAI,CAACilE,aAAa,CAACC,MAAM,EAAE,0BAA0B,CAAC;IACjE,CAAC,CAAC,CACDxkF,IAAI,CAAC,YAAY;MACdgB,OAAO,CAAComC,IAAI,CAAC,UAAU,CAAC;MACxBmwB,QAAQ,CAAC,CAAC;MACV,OAAO,IAAI;IACf,CAAC,CAAC;EACV,CAAC;EAED,IAAI,CAAC/X,IAAI,GAAG,UAAU+X,QAAQ,EAAE;IAC5B,IAAI,CAACr7D,aAAa,CAACX,MAAM,IAAID,kBAAkB,CAACw3C,QAAQ,KAAK,SAAS,EAAE;MACpEz3C,MAAM,CAAC0qF,iBAAiB,GAAG,KAAK;MAChCxuB,QAAQ,CAAC,CAAC;MACV;IACJ;IAEA,IAAI,CAAC3jB,WAAW,GAAGv4C,MAAM,CAACu4C,WAAW,IACjC,CAAC,EAAEv4C,MAAM,CAAC2qF,SAAS,IAAI3qF,MAAM,CAAC4qF,YAAY,IAAI5qF,MAAM,CAAC6qF,eAAe,IAAI7qF,MAAM,CAAC8qF,WAAW,CAAC;IAE/F,IAAI,CAAC,IAAI,CAACvyC,WAAW,EAAE;MACnBv4C,MAAM,CAAC0qF,iBAAiB,GAAG,KAAK;MAChC1qF,MAAM,CAACu4C,WAAW,GAAG,KAAK;MAC1B2jB,QAAQ,CAAC,CAAC;MACV;IACJ;IAEA,IAAIj4C,IAAI,GAAG,IAAI;IAEf,OAAO,IAAI,CAAC8mE,mBAAmB,CAAC,CAAC,CAC5BpmF,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBhK,MAAM,CAACgrF,eAAe,GAAG,IAAI;MAC7BpqF,UAAU,CAAC+K,UAAU,CAAC,YAAY,CAAC;MAEnCsY,IAAI,CAAC+hE,UAAU,GAAGhmF,MAAM,CAACq+E,SAAS,GAC9B,IAAI55B,6CAAgB,CAAC,IAAIymC,MAAM,CAAC,IAAIh0C,GAAG,CAAC,2FAAqD,CAAC,CAAC,CAAC,GAChG,IAAIuN,6CAAgB,CAAC,CAAC;MAC1B,IAAI0kC,MAAM,GAAGL,gBAAgB,CAAClhC,SAAS,CAAC,CAAC;MACzCjiD,OAAO,CAAComC,IAAI,CAAC,SAAS,CAAC;MAEvB,OAAO9nB,IAAI,CAACqmE,UAAU,CAACnB,MAAM,EAAEjtB,QAAQ,CAAC,CACnCv3D,IAAI,CAAC,YAAY;QACd3E,MAAM,CAACgrF,eAAe,GAAG,KAAK;QAC9BhrF,MAAM,CAACqrF,eAAe,GAAG,KAAK;QAC9BzqF,UAAU,CAAC+K,UAAU,CAAC,YAAY,CAAC;MACvC,CAAC,CAAC,SACI,CAAC,UAAU7G,GAAG,EAAE;QAClBmf,IAAI,CAACs0B,WAAW,GAAG,KAAK;QACxBv4C,MAAM,CAACgrF,eAAe,GAAG,KAAK;QAC9BhrF,MAAM,CAACqrF,eAAe,GAAG,KAAK;QAC9BzqF,UAAU,CAAC+K,UAAU,CAAC,YAAY,CAAC;QACnChG,OAAO,CAAComC,IAAI,CAAC,oBAAoB,CAAC;QAClCpmC,OAAO,CAAComC,IAAI,CAACjnC,GAAG,CAAC;QACjBo3D,QAAQ,CAACp3D,GAAG,CAAC;QACbhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/B,CAAC,CAAC;IACV,CAAC,CAAC,SACI,CAAC,UAAUkF,GAAG,EAAE;MAClBia,IAAI,CAACs0B,WAAW,GAAG,KAAK;MACxBv4C,MAAM,CAACqrF,eAAe,GAAG,KAAK;MAC9BzqF,UAAU,CAAC+K,UAAU,CAAC,YAAY,CAAC;MACnChG,OAAO,CAAComC,IAAI,CAAC,kBAAkB,CAAC;MAChCmwB,QAAQ,CAAC,CAAC;IACd,CAAC,CAAC;EACV,CAAC;EAED,IAAI,CAACovB,SAAS,GAAG,IAAI;EACrB,IAAI,CAACP,mBAAmB,GAAG,YAAY;IACnC,IAAI7+E,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAIo/E,GAAG,GAAG,IAAInvD,IAAI,CAAC,CAAC,CAACovD,OAAO,CAAC,CAAC;IAC9B,IAAIvnE,IAAI,GAAG,IAAI;IAEf,IAAIwnE,IAAI,GAAGzrF,MAAM,CAAC2qF,SAAS,CAACe,cAAc,CAAC,SAAS,CAAC;IACrD,IAAIC,GAAG,GAAGxqF,QAAQ,CAAC,YAAY;MAC3BnB,MAAM,CAACqrF,eAAe,GAAG,IAAI;MAC7BzqF,UAAU,CAAC+K,UAAU,CAAC,YAAY,CAAC;MACnClH,CAAC,CAAC,oBAAoB,CAAC,CAACiE,WAAW,CAAC,mBAAmB,CAAC;IAC5D,CAAC,EAAE,IAAI,CAAC;IAER+iF,IAAI,CAAC/iE,OAAO,GAAG,UAAUzlB,KAAK,EAAE;MAC5B0C,OAAO,CAACqkB,KAAK,CAAC,yBAAyB,CAAC;MACxC7oB,QAAQ,CAACqjD,MAAM,CAACmnC,GAAG,CAAC;MACpB3rF,MAAM,CAACqrF,eAAe,GAAG,KAAK;MAC9BzqF,UAAU,CAAC+K,UAAU,CAAC,YAAY,CAAC;MACnCO,QAAQ,CAACqb,MAAM,CAAC,KAAK,CAAC;IAC1B,CAAC;IAEDkkE,IAAI,CAACG,SAAS,GAAG,YAAY;MACzBzqF,QAAQ,CAACqjD,MAAM,CAACmnC,GAAG,CAAC;MAEpB,IAAI5kB,GAAG,GAAG/mE,MAAM,CAAC2qF,SAAS,CAAC1jF,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;;MAE7C;MACA8/D,GAAG,CAACr+C,OAAO,GAAG,UAAUzlB,KAAK,EAAE;QAC3B0C,OAAO,CAACqkB,KAAK,CAAC,yBAAyB,CAAC;QACxC9d,QAAQ,CAACqb,MAAM,CAAC,KAAK,CAAC;MAC1B,CAAC;MAEDw/C,GAAG,CAAC6kB,SAAS,GAAG,UAAU3oF,KAAK,EAAE;QAC7B0C,OAAO,CAAComC,IAAI,CAAC,kBAAkB,CAAC;QAChC9nB,IAAI,CAACqnE,SAAS,GAAGroF,KAAK,CAAC6H,MAAM,CAACsd,MAAM;QACpClc,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MAC1B,CAAC;IACL,CAAC;IAEDq/E,IAAI,CAACI,SAAS,GAAG,UAAU5oF,KAAK,EAAE;MAC9BjD,MAAM,CAACqrF,eAAe,GAAG,IAAI;MAC7BzqF,UAAU,CAAC+K,UAAU,CAAC,YAAY,CAAC;MACnClH,CAAC,CAAC,oBAAoB,CAAC,CAACiE,WAAW,CAAC,mBAAmB,CAAC;IAC5D,CAAC;IAED,OAAOwD,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACy/E,WAAW,GAAG,UAAUvrF,EAAE,EAAE;IAC7B,IAAI,CAACA,EAAE,CAACwrF,SAAS,EAAE;MACf,IAAI9/E,EAAE,GAAGosB,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACyrF,SAAS,CAAC;MACjC,IAAI,CAAChD,gBAAgB,CAAChiF,IAAI,CAAC;QACvBgW,SAAS,EAAEzc,EAAE,CAACyc,SAAS;QACvB5B,WAAW,EAAE,CAAC,CAAC7a,EAAE,CAAC6a,WAAW,GAAG7a,EAAE,CAAC6a,WAAW,CAAC4I,WAAW,CAAC,CAAC,GAAGzjB,EAAE,CAAC6a,WAAW;QAC7E6wE,SAAS,EAAE,CAAC,CAAC1rF,EAAE,CAAC0rF,SAAS,GAAG1rF,EAAE,CAAC0rF,SAAS,CAACjoE,WAAW,CAAC,CAAC,GAAGzjB,EAAE,CAAC0rF,SAAS;QACrE5oF,IAAI,EAAE,CAAC,CAAC9C,EAAE,CAAC8C,IAAI,GAAG9C,EAAE,CAAC8C,IAAI,CAAC2gB,WAAW,CAAC,CAAC,GAAGzjB,EAAE,CAAC8C,IAAI;QACjD6oF,MAAM,EAAE,CAAC,CAAC3rF,EAAE,CAAC4rF,iBAAiB,GAAG5rF,EAAE,CAAC4rF,iBAAiB,CAACnoE,WAAW,CAAC,CAAC,GAAGzjB,EAAE,CAAC4rF,iBAAiB;QAC1FntD,IAAI,EAAE,CAAC,CAACz+B,EAAE,CAACy+B,IAAI,GAAGz+B,EAAE,CAACy+B,IAAI,CAAChb,WAAW,CAAC,CAAC,GAAGzjB,EAAE,CAACy+B,IAAI;QACjD7jB,OAAO,EAAE5a,EAAE,CAAC4a,OAAO;QACnBolB,GAAG,EAAEt0B,EAAE,CAACs0B,GAAG;QACXC,GAAG,EAAEv0B,EAAE,CAACu0B,GAAG;QACXC,GAAG,EAAEx0B,EAAE,CAACw0B,GAAG;QACXC,GAAG,EAAEz0B,EAAE,CAACy0B,GAAG;QACXC,GAAG,EAAE10B,EAAE,CAAC00B,GAAG;QACXC,GAAG,EAAE30B,EAAE,CAAC20B,GAAG;QACXC,GAAG,EAAE50B,EAAE,CAAC40B,GAAG;QACXC,GAAG,EAAE70B,EAAE,CAAC60B,GAAG;QACXC,GAAG,EAAE90B,EAAE,CAAC80B,GAAG;QACXC,IAAI,EAAE/0B,EAAE,CAAC+0B;MACb,CAAC,CAAC;IACN,CAAC,MAAM;MACH,IAAI,CAACgoD,gBAAgB,CAAChiF,IAAI,CAAC;QACvBgW,SAAS,EAAEzc,EAAE,CAACwrF,SAAS;QACvB3wE,WAAW,EAAE,CAAC,CAAC7a,EAAE,CAAC6rF,WAAW,GAAG7rF,EAAE,CAAC6rF,WAAW,CAACpoE,WAAW,CAAC,CAAC,GAAGzjB,EAAE,CAAC6rF,WAAW;QAC7EH,SAAS,EAAE,CAAC,CAAC1rF,EAAE,CAAC8rF,SAAS,GAAG9rF,EAAE,CAAC8rF,SAAS,CAACroE,WAAW,CAAC,CAAC,GAAGzjB,EAAE,CAAC8rF,SAAS;QACrEhpF,IAAI,EAAE,CAAC,CAAC9C,EAAE,CAACgK,IAAI,GAAGhK,EAAE,CAACgK,IAAI,CAACyZ,WAAW,CAAC,CAAC,GAAGzjB,EAAE,CAACgK,IAAI;QACjD2hF,MAAM,EAAE,CAAC,CAAC3rF,EAAE,CAAC+rF,iBAAiB,GAAG/rF,EAAE,CAAC+rF,iBAAiB,CAACtoE,WAAW,CAAC,CAAC,GAAGzjB,EAAE,CAAC+rF,iBAAiB;QAC1FttD,IAAI,EAAE,CAAC,CAACz+B,EAAE,CAACy3E,IAAI,GAAGz3E,EAAE,CAACy3E,IAAI,CAACh0D,WAAW,CAAC,CAAC,GAAGzjB,EAAE,CAACy3E,IAAI;QACjD78D,OAAO,EAAE5a,EAAE,CAAC8a,OAAO;QACnBklB,GAAG,EAAEhgC,EAAE,CAACgsF,GAAG;QACX/rD,GAAG,EAAEjgC,EAAE,CAACisF,GAAG;QACX/rD,GAAG,EAAElgC,EAAE,CAACksF,GAAG;QACX/rD,GAAG,EAAEngC,EAAE,CAACmsF,GAAG;QACX/rD,GAAG,EAAEpgC,EAAE,CAACosF,GAAG;QACX/rD,GAAG,EAAErgC,EAAE,CAACqsF,GAAG;QACX/rD,GAAG,EAAEtgC,EAAE,CAACssF,GAAG;QACX/rD,GAAG,EAAEvgC,EAAE,CAACusF,GAAG;QACX/rD,GAAG,EAAExgC,EAAE,CAACwsF,GAAG;QACX/rD,IAAI,EAAEzgC,EAAE,CAACysF;MACb,CAAC,CAAC;IACN;EACJ,CAAC;EAED,IAAI,CAACC,YAAY,GAAG,YAAY;IAC5B,IAAIhpE,IAAI,GAAG,IAAI;IACf,IAAIA,IAAI,CAAC+kE,gBAAgB,IAAI/kE,IAAI,CAAC+kE,gBAAgB,CAACjiF,MAAM,GAAG,CAAC,EACzD,OAAO/F,aAAa,CAAC63C,cAAc,CAAC,KAAK,CAAC;IAE9C,IAAI5sC,EAAE,GAAG,IAAI,CAAC+5E,UAAU,CAACr5B,MAAM,CAAC;MAC5B9hD,IAAI,EAAE;IACV,CAAC,CAAC,CAAClG,IAAI,CAAC,UAAUE,IAAI,EAAE;MACpBof,IAAI,CAAC+kE,gBAAgB,GAAG,EAAE;MAC1BvoF,OAAO,CAAC4M,OAAO,CAACxI,IAAI,EAAE,UAAUtE,EAAE,EAAE;QAChC0jB,IAAI,CAAC6nE,WAAW,CAACvrF,EAAE,CAAC;MACxB,CAAC,CAAC;MAEF,OAAOS,aAAa,CAAC63C,cAAc,CAAC,KAAK,CAAC;IAC9C,CAAC,CAAC;IAEF,OAAO5sC,EAAE;EACb,CAAC;EAED,IAAI,CAACihF,eAAe,GAAG,UAAUroF,IAAI,EAAE;IACnC;IACA;IACA,IAAIof,IAAI,GAAG,IAAI;IACjB;;IAEE,OAAO,IAAI,CAAC+hE,UAAU,CAACmH,KAAK,CAAC,UAAU,CAAC,CACnCxoF,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACzB;MACIia,IAAI,CAAC+kE,gBAAgB,GAAG,EAAE;MAC5B;MACE,OAAO/kE,IAAI,CAAC+hE,UAAU,CAAC7qB,MAAM,CAAC;QAC1BtwD,IAAI,EAAE,UAAU;QAChB6hD,KAAK,EAAE;UACHrpD,IAAI,EAAE;YACF,MAAI,CAAC,iBAAiB,EAAE,cAAc;UAC1C;QACJ;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,CAACsB,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACnB;MACA,IAAIojF,IAAI,GAAG,CACP;QACI/pF,IAAI,EAAE,iBAAiB;QACvBkT,KAAK,EAAE1V,aAAa,CAACuoC,eAAe;QACpCikD,YAAY,EAAE,IAAIjxD,IAAI,CAAC;MAC3B,CAAC,EACD;QACI/4B,IAAI,EAAE,cAAc;QACpBkT,KAAK,EAAE1R,IAAI,CAACqhB,IAAI;QAChBmnE,YAAY,EAAE,IAAIjxD,IAAI,CAAC;MAC3B,CAAC,CACJ;MACD;;MAEA,OAAOnY,IAAI,CAAC+hE,UAAU,CAAC0D,MAAM,CAAC;QAC1BC,IAAI,EAAE,UAAU;QAChBjoC,MAAM,EAAE0rC;MACZ,CAAC,CAAC;IACN,CAAC,CAAC,CAACzoF,IAAI,CAAC,YAAY;MAChB;MACA;MACAE,IAAI,CAACkX,GAAG,GAAG/a,aAAa,CAAC07E,QAAQ,CAAC73E,IAAI,CAACkX,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;MAC1D,IAAI1G,CAAC,GAAG,EAAE;MACV4O,IAAI,CAAC+kE,gBAAgB,GAAG,EAAE;MAC1BvkF,CAAC,CAACmC,IAAI,CAAC/B,IAAI,CAACkX,GAAG,EAAE,UAAUlV,GAAG,EAAEtG,EAAE,EAAE;QAEhC;QACA,IAAGA,EAAE,CAACy3E,IAAI,EAAE;UACR,IAAIsV,EAAE,GAAG/sF,EAAE,CAACy3E,IAAI,CAACh8D,KAAK,CAAC,GAAG,CAAC,CAACvE,GAAG,CAAC,UAASsyE,CAAC,EAAE;YACxC,OAAOA,CAAC,CAAC7tE,IAAI,CAAC,CAAC;UACf,CAAC,CAAC;UAEN3b,EAAE,CAACy3E,IAAI,GAAGsV,EAAE,CAACh4E,IAAI,CAAC,GAAG,CAAC;QAC1B;QAEA2O,IAAI,CAAC6nE,WAAW,CAACvrF,EAAE,CAAC;QAEpB,IAAI2hB,CAAC,GAAG;UACJlF,SAAS,EAAEzc,EAAE,CAACwrF,SAAS;UACvB3wE,WAAW,EAAE7a,EAAE,CAAC6rF,WAAW;UAC3BH,SAAS,EAAE1rF,EAAE,CAAC8rF,SAAS;UACvBhpF,IAAI,EAAE9C,EAAE,CAACgK,IAAI;UACb4Q,OAAO,EAAE5a,EAAE,CAAC8a,OAAO;UACnB6wE,MAAM,EAAE3rF,EAAE,CAAC+rF,iBAAiB;UAC5BntD,QAAQ,EAAE5+B,EAAE,CAACgtF,eAAe;UAC5BC,QAAQ,EAAEjtF,EAAE,CAACktF,QAAQ;UACrBvuD,UAAU,EAAE3+B,EAAE,CAACmtF,UAAU;UACzBC,YAAY,EAAEptF,EAAE,CAACqtF,YAAY;UAC7BC,UAAU,EAAEttF,EAAE,CAACutF,UAAU;UACzBpvD,KAAK,EAAEn+B,EAAE,CAACk+B,KAAK,IAAI,CAAC;UACpBwB,OAAO,EAAE1/B,EAAE,CAACg9D,OAAO;UACnBr9B,OAAO,EAAE3/B,EAAE,CAACi9D,OAAO;UACnBr9B,OAAO,EAAE5/B,EAAE,CAACk9D,OAAO;UACnBz9B,SAAS,EAAE3H,IAAI,CAACC,SAAS,CAAC/3B,EAAE,CAACwtF,aAAa,CAAC;UAC3CruD,KAAK,EAAErH,IAAI,CAACC,SAAS,CAAC/3B,EAAE,CAACytF,GAAG,CAAC;UAC7BnvD,cAAc,EAAEt+B,EAAE,CAACq+B,cAAc;UACjCqvD,WAAW,EAAE1tF,EAAE,CAAC2tF,wBAAwB;UACxCC,WAAW,EAAE5tF,EAAE,CAAC6tF,wBAAwB;UACxCC,WAAW,EAAE9tF,EAAE,CAAC+tF,wBAAwB;UACxCvuD,OAAO,EAAEx/B,EAAE,CAACuzB,OAAO;UACnBy6D,aAAa,EAAEhuF,EAAE,CAACiuF,aAAa;UAC/BxvD,IAAI,EAAEz+B,EAAE,CAACy3E,IAAI;UACb/4C,OAAO,EAAE1+B,EAAE,CAACkuF,OAAO;UACnBC,KAAK,EAAEnuF,EAAE,CAACouF,KAAK;UACfvuD,uBAAuB,EAAE7/B,EAAE,CAACquF,uBAAuB;UACnDC,sBAAsB,EAAEtuF,EAAE,CAACuuF,sBAAsB;UACjDC,eAAe,EAAExuF,EAAE,CAACyuF,eAAe;UACnC3uD,WAAW,EAAE9/B,EAAE,CAAC0uF,WAAW;UAC3B95D,aAAa,EAAE50B,EAAE,CAAC2uF,aAAa;UAC/BlD,SAAS,EAAE3zD,IAAI,CAACC,SAAS,CAAC;YACtBiI,GAAG,EAAEhgC,EAAE,CAACgsF,GAAG;YACX/rD,GAAG,EAAEjgC,EAAE,CAACisF,GAAG;YACX/rD,GAAG,EAAElgC,EAAE,CAACksF,GAAG;YACX/rD,GAAG,EAAEngC,EAAE,CAACmsF,GAAG;YACX/rD,GAAG,EAAEpgC,EAAE,CAACosF,GAAG;YACX/rD,GAAG,EAAErgC,EAAE,CAACqsF,GAAG;YACX/rD,GAAG,EAAEtgC,EAAE,CAACssF,GAAG;YACX/rD,GAAG,EAAEvgC,EAAE,CAACusF,GAAG;YACX/rD,GAAG,EAAExgC,EAAE,CAACwsF,GAAG;YACX/rD,IAAI,EAAEzgC,EAAE,CAACysF,IAAI;YACbmC,MAAM,EAAE5uF,EAAE,CAAC6uF,MAAM,IAAI,CAAC;YACtBC,MAAM,EAAE9uF,EAAE,CAAC+uF,MAAM,IAAI,CAAC;YACtBC,MAAM,EAAEhvF,EAAE,CAACivF,MAAM,IAAI,CAAC;YACtBC,MAAM,EAAElvF,EAAE,CAACmvF,MAAM,IAAI,CAAC;YACtBC,MAAM,EAAEpvF,EAAE,CAACqvF,MAAM,IAAI,CAAC;YACtBC,MAAM,EAAEtvF,EAAE,CAACuvF,MAAM,IAAI,CAAC;YACtBC,MAAM,EAAExvF,EAAE,CAACyvF,MAAM,IAAI,CAAC;YACtBC,MAAM,EAAE1vF,EAAE,CAAC2vF,MAAM,IAAI,CAAC;YACtBC,MAAM,EAAE5vF,EAAE,CAAC6vF,MAAM,IAAI,CAAC;YACtBC,OAAO,EAAE9vF,EAAE,CAAC+vF,OAAO,IAAI;UAC3B,CAAC;QACL,CAAC;QACDj7E,CAAC,CAACrO,IAAI,CAACkb,CAAC,CAAC;MACb,CAAC,CAAC;MACF;;MAEA;MACA;;MAEA,IAAI+B,IAAI,CAACglE,SAAS,GAAG,CAAC,EAAE;QACpB,OAAOhlE,IAAI,CAACssE,kBAAkB,CAACl7E,CAAC,EAAE4O,IAAI,CAACglE,SAAS,EAAE,UAAUhuE,CAAC,EAAE;UAC3D,OAAOgJ,IAAI,CAAC+hE,UAAU,CAACwK,UAAU,CAAC;YAC9B7G,IAAI,EAAE,UAAU;YAChBjoC,MAAM,EAAEzmC,CAAC;YACTw1E,MAAM,EAAE,KAAK;YACbrG,aAAa,EAAE;UACnB,CAAC,CAAC;QACN,CAAC,CAAC;MACN,CAAC,MAAM;QACH,OAAOnmE,IAAI,CAAC+hE,UAAU,CAACwK,UAAU,CAAC;UAC9B7G,IAAI,EAAE,UAAU;UAChBjoC,MAAM,EAAErsC,CAAC;UACTo7E,MAAM,EAAE,KAAK;UACbrG,aAAa,EAAE;QACnB,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACmG,kBAAkB,GAAG,UAAUl7E,CAAC,EAAE4zE,SAAS,EAAE/sB,QAAQ,EAAE;IACxD,IAAIw0B,KAAK,GAAG9lF,KAAK,CAAC4vB,IAAI,CAACW,IAAI,CAAC9lB,CAAC,CAACtO,MAAM,GAAGkiF,SAAS,CAAC,CAAC,CAAC/mC,IAAI,CAAC5wC,SAAS,CAAC,CAACmG,GAAG,CAAC,UAAU2R,CAAC,EAAEjU,CAAC,EAAE;MACnF,OAAOE,CAAC,CAAChL,KAAK,CAAC8K,CAAC,GAAG8zE,SAAS,EAAE9zE,CAAC,GAAG8zE,SAAS,GAAGA,SAAS,CAAC;IAC5D,CAAC,CAAC;IAEF,IAAI/9B,IAAI,GAAG,EAAE;IAEbzmD,CAAC,CAACmC,IAAI,CAAC8pF,KAAK,EAAE,UAAUtnE,CAAC,EAAEnO,CAAC,EAAE;MAC1BiwC,IAAI,CAAClkD,IAAI,CAACk1D,QAAQ,CAACjhD,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,OAAO3Z,EAAE,CAACgxB,GAAG,CAAC44B,IAAI,CAAC;EACvB,CAAC;EAED,IAAI,CAACylC,cAAc,GAAG,UAAU5E,SAAS,EAAE;IACvC,OAAO,IAAI,CAAC/F,UAAU,CAACr5B,MAAM,CAAC;MAC1B9hD,IAAI,EAAE,UAAU;MAChB6hD,KAAK,EAAE;QACH1vC,SAAS,EAAE+uE;MACf;IACJ,CAAC,CAAC,CAACpnF,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACnB,IAAI2U,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAE1B,IAAImc,OAAO,GAAG,CAAC,CAAC;MAChB,IAAIte,GAAG,IAAIA,GAAG,CAACjD,MAAM,GAAG,CAAC,EAAE;QACvBuhB,OAAO,CAACzjB,IAAI,GAAGmF,GAAG;MACtB,CAAC,MAAM;QACH2U,SAAS,CAAC9Z,IAAI,GAAG,EAAE;MACvB;MAEA8Z,SAAS,CAACvS,OAAO,CAACkc,OAAO,CAAC;MAC1B,OAAO3J,SAAS,CAACtS,OAAO;IAC5B,CAAC,CAAC;EACN,CAAC;;EAED;EACA,IAAI,CAAC4uB,MAAM,GAAG,UAAU5f,OAAO,EAAExS,IAAI,EAAE+nF,YAAY,EAAEjZ,IAAI,EAAEoU,SAAS,EAAE;IAClEpmF,OAAO,CAACy0C,IAAI,CAAC,cAAc,CAAC;IAC5Bz0C,OAAO,CAACy0C,IAAI,CAAC,mBAAmB,CAAC;IACjC,IAAIn2B,IAAI,GAAG,IAAI;IACf,IAAI/X,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACrC;IACY,OAAO8X,IAAI,CAAC4sE,SAAS,CAAC,CAAC,CAClBlsF,IAAI,CAAC,YAAY;MAClBgB,OAAO,CAAC20C,OAAO,CAAC,mBAAmB,CAAC;MACpC30C,OAAO,CAACy0C,IAAI,CAAC,QAAQ,CAAC;MACtB,IAAI02C,OAAO,GAAG,IAAI;MAClB,IAAI1iF,CAAC;MACL,IAAInC,EAAE;MAEN,IAAI,CAAC,CAACpL,aAAa,CAACysC,kBAAkB,IAAIsjD,YAAY,KAAK/vF,aAAa,CAACysC,kBAAkB,EAAE;QACzF,IAAIuqC,KAAK,GAAG72E,aAAa,CAAC02E,0BAA0B,CAACC,IAAI,CAAC;QAC1D,IAAI,CAACE,KAAK,EAAE;UACR3rE,QAAQ,CAACqb,MAAM,CAAC,uBAAuB,CAAC;UACxC,OAAOrb,QAAQ,CAACG,OAAO;QAC3B,CAAC,MACI;UACDykF,OAAO,GAAG;YACNjmF,IAAI,EAAE;UACV,CAAC;UAED,IAAIkmF,mBAAmB,GAAGlZ,KAAK,CAACI,gBAAgB,KAAK,KAAK;UAE1D,IAAI+Y,cAAc,GAAG,KAAK;UAE1B,IAAI,CAAC,CAACnZ,KAAK,CAACC,MAAM,IAAID,KAAK,CAACC,MAAM,CAAC/wE,MAAM,GAAG,CAAC,EAAE;YAC3C,IAAI+wE,MAAM,GAAG,EAAE;YACfr3E,OAAO,CAAC4M,OAAO,CAACwqE,KAAK,CAACC,MAAM,EAAE,UAAUv3E,EAAE,EAAE;cACxCu3E,MAAM,CAAC9wE,IAAI,CAAChG,aAAa,CAAC+0C,YAAY,CAACx1C,EAAE,CAAC,CAAC;YAC/C,CAAC,CAAC;YAEF,IAAI,CAACywF,cAAc,EAAE;cACjBF,OAAO,CAACpkC,KAAK,GAAG;gBACZgiC,KAAK,EAAE;kBAAE,MAAI5W;gBAAO;cACxB,CAAC;YACL,CAAC,MACI;cACD,IAAI,CAACiZ,mBAAmB,EAAE;gBACtB,IAAI,CAACD,OAAO,CAACpkC,KAAK,CAACukC,EAAE,EACjBH,OAAO,CAACpkC,KAAK,CAACukC,EAAE,GAAG,CAAC,CAAC;gBACzBH,OAAO,CAACpkC,KAAK,CAACukC,EAAE,CAACvC,KAAK,GAAG;kBAAE,MAAI5W;gBAAO,CAAC;cAC3C,CAAC,MAAM;gBACHgZ,OAAO,CAACpkC,KAAK,CAACgiC,KAAK,GAAG;kBAAE,MAAI5W;gBAAO,CAAC;cACxC;YACJ;YACAkZ,cAAc,GAAG,IAAI;UACzB;UACA,IAAI,CAAC,CAACnZ,KAAK,CAACE,UAAU,IAAIF,KAAK,CAACE,UAAU,CAAChxE,MAAM,GAAG,CAAC,EAAE;YACnD,IAAIgxE,UAAU,GAAG,EAAE;YACnBt3E,OAAO,CAAC4M,OAAO,CAACwqE,KAAK,CAACE,UAAU,EAAE,UAAUx3E,EAAE,EAAE;cAC5Cw3E,UAAU,CAAC/wE,IAAI,CAAChG,aAAa,CAAC+0C,YAAY,CAACx1C,EAAE,CAAC,CAAC;YACnD,CAAC,CAAC;YAEF,IAAI,CAACywF,cAAc,EAAE;cACjBF,OAAO,CAACpkC,KAAK,GAAG;gBACZ8gC,QAAQ,EAAE;kBAAE,MAAIzV;gBAAW;cAC/B,CAAC;YACL,CAAC,MACI;cACD,IAAI,CAACgZ,mBAAmB,EAAE;gBACtB,IAAI,CAACD,OAAO,CAACpkC,KAAK,CAACukC,EAAE,EACjBH,OAAO,CAACpkC,KAAK,CAACukC,EAAE,GAAG,CAAC,CAAC;gBACzBH,OAAO,CAACpkC,KAAK,CAACukC,EAAE,CAACzD,QAAQ,GAAG;kBAAE,MAAIzV;gBAAW,CAAC;cAClD,CAAC,MAAM;gBACH+Y,OAAO,CAACpkC,KAAK,CAAC8gC,QAAQ,GAAG;kBAAE,MAAIzV;gBAAW,CAAC;cAC/C;YACJ;YAEAiZ,cAAc,GAAG,IAAI;UACzB;UACA,IAAI,CAAC,CAACnZ,KAAK,CAACG,IAAI,IAAIH,KAAK,CAACG,IAAI,CAACjxE,MAAM,GAAG,CAAC,EAAE;YACvCqH,CAAC,GAAG,EAAE;YAEN,IAAI8iF,IAAI,GAAG,EAAE;YACb,IAAIC,KAAK,GAAG,EAAE;YACd1sF,CAAC,CAACmC,IAAI,CAACixE,KAAK,CAACG,IAAI,EAAE,UAAUx0D,CAAC,EAAEumE,CAAC,EAAE;cAC/B,IAAI,CAAC,CAACA,CAAC,EACHoH,KAAK,CAACnqF,IAAI,CAAC+iF,CAAC,CAAC7tE,IAAI,CAAC,CAAC,CAAC8H,WAAW,CAAC,CAAC,CAAC;YAC1C,CAAC,CAAC;YAEFvf,CAAC,CAACmC,IAAI,CAACqd,IAAI,CAAC+kE,gBAAgB,EAAE,UAAU7zE,CAAC,EAAE+M,CAAC,EAAE;cAC1C,IAAImU,KAAK,GAAG,KAAK;cAEjB,IAAI,CAAC,CAACnU,CAAC,CAAC8c,IAAI,EAAE;gBACV,IAAIgX,CAAC,GAAG9zB,CAAC,CAAC8c,IAAI,CAAChb,WAAW,CAAC,CAAC;gBAC5B,IAAIg0D,IAAI,GAAGhiC,CAAC,CAACh6B,KAAK,CAAC,GAAG,CAAC;gBACvBvX,CAAC,CAACmC,IAAI,CAACuqF,KAAK,EAAE,UAAU3tE,CAAC,EAAEumE,CAAC,EAAE;kBAC1B,IAAI1+B,GAAG,GAAG2sB,IAAI,CAACtxE,MAAM,CAAC,UAAS0qF,EAAE,EAAE;oBAAC,OAAOA,EAAE,IAAIrH,CAAC;kBAAE,CAAC,CAAC;kBACtD,IAAI1+B,GAAG,CAACtkD,MAAM,GAAG,CAAC,EAAE;oBAChBsvB,KAAK,GAAG,IAAI;oBACZ,OAAO,KAAK;kBAChB;gBACJ,CAAC,CAAC;gBAEF,IAAIA,KAAK,EACL66D,IAAI,CAAClqF,IAAI,CAACkb,CAAC,CAAClF,SAAS,CAAC;cAC9B;YACJ,CAAC,CAAC;YAEF,IAAI,CAACg0E,cAAc,EAAE;cACjBF,OAAO,CAACpkC,KAAK,GAAG;gBACZ1vC,SAAS,EAAE;kBAAE,MAAIk0E;gBAAK;cAC1B,CAAC;YACL,CAAC,MACI;cACD,IAAI,CAACH,mBAAmB,EAAE;gBACtB,IAAI,CAACD,OAAO,CAACpkC,KAAK,CAACukC,EAAE,EACjBH,OAAO,CAACpkC,KAAK,CAACukC,EAAE,GAAG,CAAC,CAAC;gBACzBH,OAAO,CAACpkC,KAAK,CAACukC,EAAE,CAACj0E,SAAS,GAAG;kBAAE,MAAIk0E;gBAAK,CAAC;cAC7C,CAAC,MAAM;gBACHJ,OAAO,CAACpkC,KAAK,CAAC1vC,SAAS,GAAG;kBAAE,MAAIk0E;gBAAK,CAAC;cAC1C;YACJ;YAEAF,cAAc,GAAG,IAAI;UACzB;UAEA/kF,EAAE,GAAGgY,IAAI,CAAC+hE,UAAU,CAACr5B,MAAM,CAACmkC,OAAO,CAAC;QACxC;MACJ,CAAC,MAAM;QACH,IAAI,CAAC,CAAC/E,SAAS,EAAE;UAEb9/E,EAAE,GAAGgY,IAAI,CAAC+hE,UAAU,CAACr5B,MAAM,CAAC;YACxB9hD,IAAI,EAAE,UAAU;YAChB6hD,KAAK,EAAE;cACH1vC,SAAS,EAAE+uE;YACf;UACJ,CAAC,CAAC,CACGpnF,IAAI,CAAC,UAAUqF,GAAG,EAAE;YACjB,IAAI2T,GAAG,GAAG3T,GAAG,CAACtD,MAAM,CAAC,UAAUm9B,CAAC,EAAE;cAAE,OAAO,CAACA,CAAC,CAAC1E,QAAQ,IAAI0E,CAAC,CAAC1E,QAAQ,IAAI4sD,SAAS;YAAE,CAAC,CAAC;YAErF,IAAIptE,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;YAC1BwS,SAAS,CAACvS,OAAO,CAACuR,GAAG,CAAC;YACtB,OAAOgB,SAAS,CAACtS,OAAO;UAC5B,CAAC,CAAC;QACV,CAAC,MAAM;UACHxD,IAAI,GAAGA,IAAI,CAACyX,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;UAE7B,IAAI4wE,IAAI,GAAG,EAAE;UACb,IAAIC,KAAK,GAAGtoF,IAAI,CAACmb,WAAW,CAAC,CAAC;UAC9B;UACA,IAAIqtE,oBAAoB,GAAG,KAAK;UAChC,IAAIC,YAAY,GAAG,KAAK;UACxB,IAAIjF,SAAS,GAAG,IAAI;UACpB,IAAIhxE,OAAO,IAAI,OAAQA,OAAQ,KAAK,QAAQ,EAAE;YAC1Ci2E,YAAY,GAAGj2E,OAAO,CAAC4J,YAAY;YACnCosE,oBAAoB,GAAG,IAAI;YAC3BhF,SAAS,GAAGhxE,OAAO,CAAC+I,GAAG;UAC3B;;UAEC;UACD,IAAImkD,SAAS,GAAGP,aAAa,CAACQ,eAAe,CAAC2oB,KAAK,CAAC;UAEpD1sF,CAAC,CAACmC,IAAI,CAACqd,IAAI,CAAC+kE,gBAAgB,EAAE,UAAU7zE,CAAC,EAAE+M,CAAC,EAAE;YAC1C,IAAI,CAACmvE,oBAAoB,EAAE;cACvB,IAAK,CAAC,CAACnvE,CAAC,CAAC9G,WAAW,IAAI4sD,aAAa,CAACiD,2BAA2B,CAAC/oD,CAAC,CAAC9G,WAAW,CAAC4I,WAAW,CAAC,CAAC,EAAEukD,SAAS,CAAC,IACpG,CAAC,CAACrmD,CAAC,CAAC7e,IAAI,IAAI2kE,aAAa,CAACiD,2BAA2B,CAAC/oD,CAAC,CAAC7e,IAAI,CAAC2gB,WAAW,CAAC,CAAC,EAAEukD,SAAS,CAAE,IACvF,CAAC,CAACrmD,CAAC,CAACgqE,MAAM,IAAIlkB,aAAa,CAACiD,2BAA2B,CAAC/oD,CAAC,CAACgqE,MAAM,CAACloE,WAAW,CAAC,CAAC,EAAEukD,SAAS,CAAE,IAC5FrmD,CAAC,CAAC/G,OAAO,KAAKE,OAAO,IACrB6G,CAAC,CAACqe,GAAG,KAAKllB,OAAO,IACjB6G,CAAC,CAACse,GAAG,KAAKnlB,OAAO,IACjB6G,CAAC,CAACue,GAAG,KAAKplB,OAAO,IACjB6G,CAAC,CAACwe,GAAG,KAAKrlB,OAAO,IACjB6G,CAAC,CAACye,GAAG,KAAKtlB,OAAO,IACjB6G,CAAC,CAAC0e,GAAG,KAAKvlB,OAAO,IACjB6G,CAAC,CAAC2e,GAAG,KAAKxlB,OAAO,IACjB6G,CAAC,CAAC4e,GAAG,KAAKzlB,OAAO,IACjB6G,CAAC,CAAC6e,GAAG,KAAK1lB,OAAO,IACjB6G,CAAC,CAAC8e,IAAI,KAAK3lB,OAAO,EAElB61E,IAAI,CAAClqF,IAAI,CAACkb,CAAC,CAAClF,SAAS,CAAC;YAC9B,CAAC,MAAM;cACH,IAAKs0E,YAAY,IAAIpvE,CAAC,CAAC+pE,SAAS,KAAKI,SAAS,IACzC,CAACiF,YAAY,IAAIpvE,CAAC,CAAC9G,WAAW,KAAKixE,SAAU,EAC9C6E,IAAI,CAAClqF,IAAI,CAACkb,CAAC,CAAClF,SAAS,CAAC;YAC9B;UACJ,CAAC,CAAC;UAEF/Q,EAAE,GAAGgY,IAAI,CAAC+hE,UAAU,CAACr5B,MAAM,CAAC;YACxB9hD,IAAI,EAAE,UAAU;YAChB6hD,KAAK,EAAE;cACH1vC,SAAS,EAAE;gBACP,MAAIk0E;cACR;YACJ,CAAC;YACDl1D,KAAK,EAAE;UACX,CAAC,CAAC;QACN;MACJ;MAEA/vB,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,UAAUqF,GAAG,EAAE;QAExBrE,OAAO,CAAC20C,OAAO,CAAC,QAAQ,CAAC;QACzB30C,OAAO,CAACy0C,IAAI,CAAC,sBAAsB,CAAC;QACpC,IAAIh4C,GAAG,GAAG4H,GAAG,CAACjD,MAAM;QACpB,OAAOkd,IAAI,CAACstE,cAAc,CAACvnF,GAAG;QAC9B;QACA;QACA;QACA;QACA;QACA;QAAA,CACKrF,IAAI,CAAC,YAAY;UAClBuH,QAAQ,CAACE,OAAO,CAAChK,GAAG,CAAC;UACrBuD,OAAO,CAAC20C,OAAO,CAAC,sBAAsB,CAAC;UACvC30C,OAAO,CAAC20C,OAAO,CAAC,cAAc,CAAC;UAC/B,OAAOpuC,QAAQ,CAACG,OAAO;QAC3B,CAAC,CAAC;MACN,CAAC,CAAC;MAEF,OAAOJ,EAAE;IACb,CAAC,CAAC,SAAM,CAAC,UAAUnH,GAAG,EAAE;MACpBoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;EAEN,CAAC;;EAED;EACA,IAAI,CAACg2E,cAAc,GAAG,YAAY;IAC9B;IACA;IACA;IACA,OAAO,IAAI,CAACC,aAAa,CAAC,CAAC,CACtB9sF,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACrB,IAAI0nF,EAAE,GAAG91D,4CAAU,CAAC/wB,IAAI,CAACb,GAAG,CAAC;MAE7B,IAAI2nF,EAAE,GAAGD,EAAE,CAAChlC,KAAK,CAAC,UAAU/lD,CAAC,EAAE;QAAE,OAAO,CAAC,CAACA,CAAC,CAACulF,MAAM;MAAE,CAAC,CAAC,CACjD0F,OAAO,CACJ,UAAUjrF,CAAC,EAAE;QAAE,OAAOA,CAAC,CAACulF,MAAM;MAAE,CAAC,EACjC,UAAUvlF,CAAC,EAAE;QAAE,OAAOA,CAAC,CAACulF,MAAM;MAAE,CAAC,EACjC,UAAUlrC,GAAG,EAAE6wC,QAAQ,EAAE;QACrB,OAAOA,QAAQ,CAAClkE,KAAK,CAAC,CAAC,CAAC,CAAC;MAC7B,CACJ,CAAC,CACAg/B,MAAM,CAAC,UAAUhmD,CAAC,EAAE;QAAE,OAAOA,CAAC;MAAE,CAAC,CAAC,CAClCqrD,OAAO,CAAC,CAAC,CAAC,CAAC;MAChB,IAAI8/B,GAAG,GAAGJ,EAAE,CAAChlC,KAAK,CAAC,UAAU/lD,CAAC,EAAE;QAAE,OAAO,CAACA,CAAC,CAACulF,MAAM;MAAE,CAAC,CAAC,CAACv/B,MAAM,CAAC,UAAUhmD,CAAC,EAAE;QAAE,OAAO,CAAC;MAAE,CAAC,CAAC,CAACqrD,OAAO,CAAC,CAAC,CAAC,CAAC;;MAErG,IAAI5vD,GAAG,GAAGuvF,EAAE,CAAC5qF,MAAM,GAAG+qF,GAAG,CAAC/qF,MAAM;MAEhC,IAAImF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAChK,GAAG,CAAC;MACrB,OAAO8J,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAAC0lF,aAAa,GAAG,UAAUh2D,IAAI,EAAEwY,QAAQ,EAAEw3C,SAAS,EAAE;IACtD,IAAI9/E,EAAE;IACN,IAAI,CAAC,CAAC8/E,SAAS,EAAE;MACb;MACA;MACA;MACA;MACA;MACA;MACA9/E,EAAE,GAAG,IAAI,CAAC+lF,eAAe,CAACjG,SAAS,CAAC,CAC/BpnF,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjB,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzB,IAAInC,GAAG,CAACjD,MAAM,GAAG,CAAC,EAAE;UAChBiD,GAAG,CAAC,CAAC,CAAC,CAAC5H,GAAG,GAAG,CAAC;UACd4H,GAAG,CAAC,CAAC,CAAC,CAACisD,QAAQ,GAAG,CAAC;QACvB;QAEA/pD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;QACrB,OAAOkC,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC;IACV,CAAC,MAAM;MACH;MACA;MACA;MACAJ,EAAE,GAAG,IAAI,CAACwlF,aAAa,CAAC,CAAC,CACpB9sF,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACrB,IAAI0nF,EAAE,GAAG91D,4CAAU,CAAC/wB,IAAI,CAACb,GAAG,CAAC;QAE7B,IAAI2nF,EAAE,GAAGD,EAAE,CAAChlC,KAAK,CAAC,UAAU/lD,CAAC,EAAE;UAAE,OAAO,CAAC,CAACA,CAAC,CAACulF,MAAM;QAAE,CAAC,CAAC,CACjD0F,OAAO,CACJ,UAAUjrF,CAAC,EAAE;UAAE,OAAOA,CAAC,CAACulF,MAAM;QAAE,CAAC,EACjC,UAAUvlF,CAAC,EAAE;UAAE,OAAOA,CAAC;QAAE,CAAC,EAC1B,UAAUq6C,GAAG,EAAE6wC,QAAQ,EAAE;UACrB,IAAM9qF,MAAM,GAAG8qF,QAAQ,CAAClkE,KAAK,CAAC,CAAC;UAC/B,OAAOlpB,CAAC,CAAC2L,MAAM,CAAC;YAAEhO,GAAG,EAAE2E,MAAM;YAAEkvD,QAAQ,EAAE;UAAE,CAAC,EACxClvD,MAAM,GAAG,CAAC,GAAG8qF,QAAQ,CAACv5B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3C,CACJ,CAAC,CACAtG,OAAO,CAAC,CAAC;QAEd,IAAI8/B,GAAG,GAAGJ,EAAE,CAAChlC,KAAK,CAAC,UAAU/lD,CAAC,EAAE;UAAE,OAAO,CAACA,CAAC,CAACulF,MAAM;QAAE,CAAC,CAAC,CAACv/B,MAAM,CAAC,UAAUhmD,CAAC,EAAE;UACvE,OAAOlC,CAAC,CAAC2L,MAAM,CAACzJ,CAAC,EAAE;YAAEvE,GAAG,EAAE,CAAC;YAAE6zD,QAAQ,EAAE;UAAE,CAAC,CAAC;QAC/C,CAAC,CAAC,CAACjE,OAAO,CAAC,CAAC;QAEZ,IAAIntD,IAAI,GAAG8sF,EAAE,CAACv/E,MAAM,CAAC0/E,GAAG,CAAC;QAEzB,IAAI5lF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;QACtB,OAAOqH,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC;IACN;IAEA,OAAOJ,EAAE,CAACtH,IAAI,CAAC,UAAUE,IAAI,EAAE;MACzB;MACFpE,OAAO,CAAC4M,OAAO,CAACxI,IAAI,EAAE,UAAUtE,EAAE,EAAE;QAChC,IAAIA,EAAE,CAAC01D,QAAQ,IAAI,CAAC,EAAE;UAClB,IAAI11D,EAAE,CAAC6B,GAAG,IAAI,CAAC,EAAE;YACb7B,EAAE,CAAC8C,IAAI,GAAG9C,EAAE,CAAC2rF,MAAM;YACnB3rF,EAAE,CAAC6/B,uBAAuB,GAAG7/B,EAAE,CAACsuF,sBAAsB;YACtDtuF,EAAE,CAACyc,SAAS,GAAGzc,EAAE,CAAC4+B,QAAQ;UAC9B,CAAC,MAAM;YACH5+B,EAAE,CAAC01D,QAAQ,GAAG,CAAC,CAAC,CAAC;UACrB;QACJ;MACJ,CAAC,CAAC;MAEF,IAAI3tC,OAAO,GAAG,CAAC,CAAC;MAChBA,OAAO,CAACyT,IAAI,GAAGA,IAAI;MACnBzT,OAAO,CAACzjB,IAAI,GAAG+2B,4CAAU,CAAC/wB,IAAI,CAAChG,IAAI,CAAC,CAACitD,OAAO,CAAC,UAAUnrD,CAAC,EAAE;QAAE,OAAOA,CAAC,CAACtD,IAAI;MAAE,CAAC,CAAC,CAAC2uD,OAAO,CAAC,CAAC;MACvF1pC,OAAO,CAACzjB,IAAI,GAAGyjB,OAAO,CAACzjB,IAAI,CAACwF,KAAK,CAAC0xB,IAAI,GAAGwY,QAAQ,EAAEA,QAAQ,IAAIxY,IAAI,GAAG,CAAC,CAAC,CAAC;MAEzE,IAAI7vB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACkc,OAAO,CAAC;MACzB,OAAOpc,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAAC4lF,oBAAoB,GAAG,UAAUptF,IAAI,EAAE;IACxC,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAItH,IAAI,IAAIA,IAAI,CAACkC,MAAM,GAAG,CAAC,EAAE;MACzBmF,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MACtB,OAAOqH,QAAQ,CAACG,OAAO;IAC3B;;IAEA;IACA,OAAO,IAAI,CAAC25E,UAAU,CAACr5B,MAAM,CAAC;MAC1B9hD,IAAI,EAAE;IACV,CAAC,CAAC,CAAClG,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACnB,IAAI2T,GAAG,GAAGie,4CAAU,CAAC/wB,IAAI,CAACb,GAAG,CAAC,CACzB0iD,KAAK,CAAC,UAAU7oB,CAAC,EAAE;QAAE,OAAO,CAACA,CAAC,CAAC1E,QAAQ,IAAI0E,CAAC,CAAC1E,QAAQ,IAAI0E,CAAC,CAAC7mB,SAAS;MAAE,CAAC,CAAC,CACxE2vC,MAAM,CAAC,UAAU9oB,CAAC,EAAE;QACjB,OAAO;UACHkoD,SAAS,EAAEloD,CAAC,CAAC7mB,SAAS;UACtBovE,WAAW,EAAEvoD,CAAC,CAACzoB,WAAW;UAC1B7Q,IAAI,EAAEs5B,CAAC,CAACxgC,IAAI;UACZo7B,KAAK,EAAEoF,CAAC,CAACnF;QACb,CAAC;MACL,CAAC,CAAC,CAACszB,OAAO,CAAC,CAAC;MAEhB,IAAIrzC,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAC1BwS,SAAS,CAACvS,OAAO,CAACuR,GAAG,CAAC;MACtB,OAAOgB,SAAS,CAACtS,OAAO;IAC5B,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAAC6lF,gBAAgB,GAAG,UAAUrjD,KAAK,EAAE;IACrC,IAAIA,KAAK,KAAK,IAAI,EAAE;MAChB,IAAI3iC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B;IACA,IAAI4X,IAAI,GAAG,IAAI;IAEf,OAAO,IAAI,CAAC+hE,UAAU,CAACr5B,MAAM,CAAC;MAC1B9hD,IAAI,EAAE,UAAU;MAChB6hD,KAAK,EAAE;QACHrpD,IAAI,EAAE;MACV;IACJ,CAAC,CAAC,CAACsB,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACnB,IAAIA,GAAG,CAACjD,MAAM,KAAK,CAAC,IAChBiD,GAAG,CAAC,CAAC,CAAC,CAACuM,KAAK,KAAK1V,aAAa,CAACuoC,eAAe,EAAE;QAChD,IAAIl9B,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QACtB,OAAOF,QAAQ,CAACG,OAAO;MAC3B,CAAC,MAAM;QACH,OAAO4X,IAAI,CAAC+hE,UAAU,CAACr5B,MAAM,CAAC;UAC1B9hD,IAAI,EAAE,UAAU;UAChB6hD,KAAK,EAAE;YACHrpD,IAAI,EAAE;UACV;QACJ,CAAC,CAAC,CACGsB,IAAI,CAAC,UAAUqF,GAAG,EAAE;UACjB,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzB,IAAInC,GAAG,CAACjD,MAAM,KAAK,CAAC,EAChBmF,QAAQ,CAACE,OAAO,CAAC,KAAK,CAAC,CAAC,KACvB;YACD,IAAIyO,GAAG,GAAG7Q,GAAG,CAAC,CAAC,CAAC;YAEhB,IAAI8oE,KAAK,GAAG,CAAE,IAAI12C,IAAI,CAAC,CAAC,CAACovD,OAAO,CAAC,CAAC,GAAK3wE,GAAG,CAACwyE,YAAY,CAAC7B,OAAO,CAAC,CAAE,IAAI,MAAM,GAAG,IAAI,GAAG,IAAI;YAC1F,IAAI1Y,KAAK,GAAG,CAAC;cAAE;cACX5mE,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC,CAAC,KAEvBF,QAAQ,CAACE,OAAO,CAAC,KAAK,CAAC;UAC/B;UAEA,OAAOF,QAAQ,CAACG,OAAO;QAC3B,CAAC,CAAC;MACV;IACJ,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAAC8lF,eAAe,GAAG,UAAUtjD,KAAK,EAAE;IAEpC,IAAIA,KAAK,KAAK,IAAI,EAAE;MAChB,IAAI3iC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B,CAAC,MACI;MACD,OAAO,IAAI,CAAC25E,UAAU,CAACr5B,MAAM,CAAC;QAC1B9hD,IAAI,EAAE,UAAU;QAChB6hD,KAAK,EAAE;UACHrpD,IAAI,EAAE;QACV;MACJ,CAAC,CAAC,CAACsB,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACnB,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAEzB,IAAInC,GAAG,CAACjD,MAAM,GAAG,CAAC,EACdmF,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC,CAAC,CAAC,CAACuM,KAAK,CAAC,CAAC,KAE/BrK,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAE1B,OAAOF,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC;IACN;EACJ,CAAC;EAED,IAAI,CAACgK,kCAAkC,GAAG,YAAY;IAClD,IAAI4N,IAAI,GAAG,IAAI;IACf,OAAOA,IAAI,CAAC+hE,UAAU,CAACr5B,MAAM,CAAC;MAC1B9hD,IAAI,EAAE,UAAU;MAChB6hD,KAAK,EAAE;QACHrpD,IAAI,EAAE;MACV;IAAC,CAAC,CAAC,CAACsB,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACpB,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAEzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC,CAAC,CAAC,CAAC;MAExB,OAAOkC,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;EACV,CAAC;EAED,IAAI,CAAC8J,kCAAkC,GAAG,UAAUD,KAAK,EAAE;IACvD,IAAI+N,IAAI,GAAG,IAAI;IACf,OAAOA,IAAI,CAAC+hE,UAAU,CACrB7qB,MAAM,CAAC;MACJtwD,IAAI,EAAE,UAAU;MAChB6hD,KAAK,EAAE;QACHrpD,IAAI,EAAE;MACV;IACJ,CAAC,CAAC,CACDsB,IAAI,CAAC,UAAAqF,GAAG,EAAI;MACT,OAAOia,IAAI,CAAC+hE,UAAU,CAAC0D,MAAM,CAAC;QAC1BC,IAAI,EAAE,UAAU;QAChBjoC,MAAM,EAAE,CAAC;UACLr+C,IAAI,EAAE,iCAAiC;UACvCkT,KAAK,EAAEL,KAAK,CAACyS,QAAQ,CAAC,CAAC;UACvB0kE,YAAY,EAAE,IAAIjxD,IAAI,CAAC;QAC3B,CAAC;MACL,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACg2D,YAAY,GAAG,UAAUC,QAAQ,EAAE;IACpC;IACA;IACA;IACA;IACA;IACA;;IAEA,OAAO,IAAI,CAACC,oBAAoB,CAACD,QAAQ,CAAC;EAC9C,CAAC;EAED,IAAI,CAACE,oBAAoB,GAAG,UAAUF,QAAQ,EAAE;IAC5C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA,OAAO,IAAI,CAACG,yBAAyB,CAACH,QAAQ,CAAC;EACnD,CAAC;EAED,IAAI,CAACI,mBAAmB,GAAG,UAAU12D,IAAI,EAAEwY,QAAQ,EAAE;IAC7D;IACY,OAAO,IAAI,CAACk9C,aAAa,CAAC,CAAC,CACtB9sF,IAAI,CAAC,UAAUE,IAAI,EAAE;MAClB,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzB1H,CAAC,CAACmC,IAAI,CAAC/B,IAAI,EAAE,UAAUsQ,CAAC,EAAE5U,EAAE,EAAE;QAC1BA,EAAE,CAAC6B,GAAG,GAAG,CAAC;QACV7B,EAAE,CAAC01D,QAAQ,GAAG,CAAC;MACnB,CAAC,CAAC;MAEF,IAAI3tC,OAAO,GAAG,CAAC,CAAC;MAChBA,OAAO,CAACyT,IAAI,GAAGA,IAAI;MACnBzT,OAAO,CAACzjB,IAAI,GAAGitD,OAAO,CAACjtD,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;MAC3CyjB,OAAO,CAACzjB,IAAI,GAAGyjB,OAAO,CAACzjB,IAAI,CAACwF,KAAK,CAAC0xB,IAAI,GAAGwY,QAAQ,EAAEA,QAAQ,IAAIxY,IAAI,GAAG,CAAC,CAAC,CAAC;MACzE7vB,QAAQ,CAACE,OAAO,CAACkc,OAAO,CAAC;IAC7B,CAAC,CAAC;EACV,CAAC;EAED,IAAI,CAACoqE,iBAAiB,GAAG,EAAE;EAC3B,IAAI,CAACn3C,gBAAgB,GAAG,UAAU12C,IAAI,EAAqB;IAAA,IAAnB8tF,SAAS,GAAA7gF,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,KAAK;IACrD,IAAImS,IAAI,GAAG,IAAI;IACf,IAAI2uE,cAAc;IAClB,IAAI,CAACD,SAAS,EAAE;MACZC,cAAc,GAAG,IAAI,CAAC5M,UAAU,CAACmH,KAAK,CAAC,WAAW,CAAC,CAACxoF,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACpEia,IAAI,CAACyuE,iBAAiB,GAAG,EAAE;QAC3B,OAAOzuE,IAAI,CAAC+hE,UAAU,CAAC7qB,MAAM,CAAC;UAC1BtwD,IAAI,EAAE,UAAU;UAChB6hD,KAAK,EAAE;YACHrpD,IAAI,EAAE;cACF,MAAI,CAAC,kBAAkB,EAAE,cAAc;YAC3C;UACJ;QACJ,CAAC,CAAC;MACN,CAAC,CAAC,CAACsB,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACnB,IAAI6oF,GAAG,GAAG,CACN;UACIxvF,IAAI,EAAE,kBAAkB;UACxBkT,KAAK,EAAE1V,aAAa,CAACuoC,eAAe;UACpCikD,YAAY,EAAE,IAAIjxD,IAAI,CAAC;QAC3B,CAAC,EACD;UACI/4B,IAAI,EAAE,cAAc;UACpBkT,KAAK,EAAE1R,IAAI,CAACqhB,IAAI;UAChBmnE,YAAY,EAAE,IAAIjxD,IAAI,CAAC;QAC3B,CAAC,CACJ;QAED,OAAOnY,IAAI,CAAC+hE,UAAU,CAAC0D,MAAM,CAAC;UAC1BC,IAAI,EAAE,UAAU;UAChBjoC,MAAM,EAAEmxC;QACZ,CAAC,CAAC;MACN,CAAC,CAAC;IACN,CAAC,MAAM;MACH,IAAIv8D,GAAG,GAAGzxB,IAAI,CAACkX,GAAG,CAACtE,GAAG,CAAC,UAAS9Q,CAAC,EAAE;QAAE,OAAOA,CAAC,CAACwE,EAAE;MAAC,CAAC,CAAC;MACnDynF,cAAc,GAAG,IAAI,CAAC5M,UAAU,CAAC7qB,MAAM,CAAC;QACpCtwD,IAAI,EAAE,WAAW;QACjB6hD,KAAK,EAAE;UACH3oD,EAAE,EAAE;YACA,MAAIuyB;UACR;QACJ;MACJ,CAAC,CAAC;IACN;IAEA,OAAOs8D,cAAc,CAChBjuF,IAAI,CAAC,YAAY;MACd,IAAI0Q,CAAC,GAAG,EAAE;MACV4O,IAAI,CAACyuE,iBAAiB,GAAG,EAAE;MAC3B7tF,IAAI,CAACkX,GAAG,GAAG/a,aAAa,CAAC07E,QAAQ,CAAC73E,IAAI,CAACkX,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;;MAEnDtX,CAAC,CAACmC,IAAI,CAAC/B,IAAI,CAACkX,GAAG,EAAE,UAAUlV,GAAG,EAAEtG,EAAE,EAAE;QAChC0jB,IAAI,CAACyuE,iBAAiB,CAAC1rF,IAAI,CAAC;UACxBjD,EAAE,EAAExD,EAAE,CAAC4K,EAAE;UACT9H,IAAI,EAAE,CAAC9C,EAAE,CAACgK,IAAI,GAAGhK,EAAE,CAACgK,IAAI,GAAGhK,EAAE,CAACgK,IAAI,CAACyZ,WAAW,CAAC,CAAC;UAChDvgB,KAAK,EAAE,CAAClD,EAAE,CAAC8R,KAAK,GAAG9R,EAAE,CAAC8R,KAAK,GAAG9R,EAAE,CAAC8R,KAAK,CAAC2R,WAAW,CAAC,CAAC;UACpDxgB,KAAK,EAAE,CAACjD,EAAE,CAAC8K,KAAK,GAAG9K,EAAE,CAAC8K,KAAK,GAAG9K,EAAE,CAAC8K,KAAK,CAAC2Y,WAAW,CAAC,CAAC;UACpDtgB,WAAW,EAAE,CAACnD,EAAE,CAAC+R,WAAW,GAAG/R,EAAE,CAAC+R,WAAW,GAAG/R,EAAE,CAAC+R,WAAW,CAAC0R,WAAW,CAAC;QAC/E,CAAC,CAAC;QAEF,IAAI9B,CAAC,GAAG;UACJne,EAAE,EAAExD,EAAE,CAAC4K,EAAE;UACT9H,IAAI,EAAE9C,EAAE,CAACgK,IAAI;UACb9G,KAAK,EAAElD,EAAE,CAAC8R,KAAK;UACf3O,WAAW,EAAEnD,EAAE,CAAC+R,WAAW;UAC3B9O,KAAK,EAAEjD,EAAE,CAAC8K,KAAK;UACflH,mBAAmB,EAAE5D,EAAE,CAACuyF,mBAAmB;UAC3C9yD,SAAS,EAAE3H,IAAI,CAACC,SAAS,CAAC/3B,EAAE,CAACw7C,SAAS,CAAC;UACvCD,eAAe,EAAEzjB,IAAI,CAACC,SAAS,CAAC/3B,EAAE,CAACwyF,eAAe,CAAC;UACnDv2D,QAAQ,EAAEj8B,EAAE,CAAC6gC,QAAQ;UACrBz9B,SAAS,EAAE00B,IAAI,CAACC,SAAS,CAAC/3B,EAAE,CAACq7C,SAAS,CAAC;UACvClc,KAAK,EAAErH,IAAI,CAACC,SAAS,CAAC;YAClBgG,yBAAyB,EAAE/9B,EAAE,CAAC+9B,yBAAyB;YACvDF,yBAAyB,EAAE79B,EAAE,CAAC69B,yBAAyB;YACvDG,MAAM,EAAEh+B,EAAE,CAACyyF;UACf,CAAC,CAAC;UACF95C,SAAS,EAAE34C,EAAE,CAAC0yF,SAAS;UACvBnvF,OAAO,EAAE,CAACvD,EAAE,CAAC2yF,OAAO,GAAG,CAAC,GAAG3yF,EAAE,CAAC2yF,OAAO;UACrCr5C,WAAW,EAAE,CAACt5C,EAAE,CAAC4yF,WAAW,GAAG,CAAC,GAAG5yF,EAAE,CAAC4yF;QAC1C,CAAC;QAED,IAAG5yF,EAAE,CAAC8R,KAAK,IAAI9R,EAAE,CAAC8K,KAAK,IAAG9K,EAAE,CAAC+R,WAAW,EACpC/R,EAAE,CAACgD,QAAQ,GAAG,CAAC;UACXE,KAAK,EAAClD,EAAE,CAACkD,KAAK;UACdD,KAAK,EAAEjD,EAAE,CAACiD,KAAK;UACfE,WAAW,EAAEnD,EAAE,CAACmD;QACpB,CAAC,CAAC;QAEN2R,CAAC,CAACrO,IAAI,CAACkb,CAAC,CAAC;MACb,CAAC,CAAC;MAEF,IAAI+B,IAAI,CAACglE,SAAS,GAAG,CAAC,EAAE;QACpB,OAAOhlE,IAAI,CAACssE,kBAAkB,CAACl7E,CAAC,EAAE4O,IAAI,CAACglE,SAAS,EAAE,UAAUhuE,CAAC,EAAE;UAC3D,OAAOgJ,IAAI,CAAC+hE,UAAU,CAACwK,UAAU,CAAC;YAC9B7G,IAAI,EAAE,WAAW;YACjBjoC,MAAM,EAAEzmC,CAAC;YACTw1E,MAAM,EAAE,KAAK;YACbrG,aAAa,EAAE;UACnB,CAAC,CAAC;QACN,CAAC,CAAC;MACN,CAAC,MAAM;QACH,OAAOnmE,IAAI,CAAC+hE,UAAU,CAACwK,UAAU,CAAC;UAC9B7G,IAAI,EAAE,WAAW;UACjBjoC,MAAM,EAAErsC,CAAC;UACTo7E,MAAM,EAAE,KAAK;UACbrG,aAAa,EAAE;QACnB,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;EACV,CAAC;EAED,IAAI,CAACtvC,iBAAiB,GAAG,UAAUjM,KAAK,EAAE;IACtC,IAAIA,KAAK,KAAK,IAAI,EAAE;MAChB,IAAI3iC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B;IACA,IAAI4X,IAAI,GAAG,IAAI;IAEf,OAAO,IAAI,CAAC+hE,UAAU,CAACr5B,MAAM,CAAC;MAC1B9hD,IAAI,EAAE,UAAU;MAChB6hD,KAAK,EAAE;QACHrpD,IAAI,EAAE;MACV;IACJ,CAAC,CAAC,CAACsB,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACnB,IAAIA,GAAG,CAACjD,MAAM,KAAK,CAAC,IAChBiD,GAAG,CAAC,CAAC,CAAC,CAACuM,KAAK,KAAK1V,aAAa,CAACuoC,eAAe,EAAE;QAChD,IAAIl9B,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QACtB,OAAOF,QAAQ,CAACG,OAAO;MAC3B,CAAC,MACI;QACD,OAAO4X,IAAI,CAAC+hE,UAAU,CAACr5B,MAAM,CAAC;UAC1B9hD,IAAI,EAAE,UAAU;UAChB6hD,KAAK,EAAE;YACHrpD,IAAI,EAAE;UACV;QACJ,CAAC,CAAC,CACGsB,IAAI,CAAC,UAAUqF,GAAG,EAAE;UACjB,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzB,IAAInC,GAAG,CAACjD,MAAM,KAAK,CAAC,EAChBmF,QAAQ,CAACE,OAAO,CAAC,KAAK,CAAC,CAAC,KACvB;YACD,IAAIyO,GAAG,GAAG7Q,GAAG,CAAC,CAAC,CAAC;YAEhB,IAAI8oE,KAAK,GAAG,CAAE,IAAI12C,IAAI,CAAC,CAAC,CAACovD,OAAO,CAAC,CAAC,GAAK3wE,GAAG,CAACwyE,YAAY,CAAC7B,OAAO,CAAC,CAAE,IAAI,MAAM,GAAG,IAAI,GAAG,IAAI;YAC1F,IAAI1Y,KAAK,GAAG,CAAC;cAAE;cACX5mE,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC,CAAC,KAEvBF,QAAQ,CAACE,OAAO,CAAC,KAAK,CAAC;UAC/B;UAEA,OAAOF,QAAQ,CAACG,OAAO;QAC3B,CAAC,CAAC;MACV;IACJ,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAAC0uC,gBAAgB,GAAG,UAAUlM,KAAK,EAAE;IAErC,IAAIA,KAAK,KAAK,IAAI,EAAE;MAChB,IAAI3iC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B,CAAC,MACI;MACD,OAAO,IAAI,CAAC25E,UAAU,CAACr5B,MAAM,CAAC;QAC1B9hD,IAAI,EAAE,UAAU;QAChB6hD,KAAK,EAAE;UACHrpD,IAAI,EAAE;QACV;MACJ,CAAC,CAAC,CAACsB,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACnB,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAEzB,IAAInC,GAAG,CAACjD,MAAM,GAAG,CAAC,EACdmF,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC,CAAC,CAAC,CAACuM,KAAK,CAAC,CAAC,KAE/BrK,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAE1B,OAAOF,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC;IACN;EACJ,CAAC;EAED,IAAI,CAACsuC,iBAAiB,GAAG,UAAU91C,IAAI,EAAEsG,EAAE,EAAE;IACzC,IAAIe,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAItH,IAAI,IAAIA,IAAI,CAACkC,MAAM,GAAG,CAAC,EAAE;MACzBmF,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MACtB,OAAOqH,QAAQ,CAACG,OAAO;IAC3B;IAEA,OAAO,IAAI,CAAC25E,UAAU,CAACr5B,MAAM,CAAC;MAAE9hD,IAAI,EAAE,WAAW;MAC7C6hD,KAAK,EAAE,CAAC,CAACvhD,EAAE,GAAG;QAACpH,EAAE,EAAGoH;MAAE,CAAC,GAAGmG;IAC9B,CAAC,CAAC,CAAC3M,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACf,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzB,IAAI4P,GAAG,GAAG,EAAE;MACZtX,CAAC,CAACmC,IAAI,CAACoD,GAAG,EAAE,UAAUmL,CAAC,EAAE5U,EAAE,EAAE;QACzB,IAAI6yF,KAAK,GAAG,CAAC,CAAC7yF,EAAE,CAACm/B,KAAK,GAAGrH,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACm/B,KAAK,CAAC,GAAG,CAAC,CAAC;QAElD,IAAIvyB,CAAC,GAAG;UACJhC,EAAE,EAAE5K,EAAE,CAACwD,EAAE;UACTwG,IAAI,EAAEhK,EAAE,CAAC8C,IAAI;UACbgP,KAAK,EAAE9R,EAAE,CAACkD,KAAK;UACf4H,KAAK,EAAE9K,EAAE,CAACiD,KAAK;UACf8O,WAAW,EAAE/R,EAAE,CAACmD,WAAW;UAC3Bk4C,SAAS,EAAEvjB,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACoD,SAAS,CAAC;UACnC46B,MAAM,EAAE60D,KAAK,CAACC,MAAM;UACpB/0D,yBAAyB,EAAE80D,KAAK,CAACxkF,yBAAyB;UAC1DwvB,yBAAyB,EAAEg1D,KAAK,CAACvkF;QACrC,CAAC;QACDkN,GAAG,CAAC/U,IAAI,CAACmG,CAAC,CAAC;MACf,CAAC,CAAC;MAEFjB,QAAQ,CAACE,OAAO,CAAC2P,GAAG,CAAC;MAErB,OAAO7P,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;EACV,CAAC;EAED,IAAI,CAACtC,aAAa,GAAG,UAAUlB,IAAI,EAAEkzB,IAAI,EAAEC,KAAK,EAAErlB,OAAO,EAAE;IACvDolB,IAAI,GAAG,CAACA,IAAI,GAAG,CAAC,GAAGA,IAAI;IACvBC,KAAK,GAAG,CAACA,KAAK,GAAG,EAAE,GAAGA,KAAK;IAC3B,IAAI/vB,EAAE;IACN,IAAI+tC,UAAU,GAAI,CAAC,CAACrjC,OAAO,IAAI,CAAC,CAACA,OAAO,CAACpL,UAAU,GAAIoL,OAAO,CAACpL,UAAU,GAAG,IAAI;IAEhF,IAAI,CAACyuC,UAAU,EAAE;MACb,IAAI,CAACnxC,IAAI,EAAE;QACPoD,EAAE,GAAG,IAAI,CAAC+5E,UAAU,CAACr5B,MAAM,CAAC;UAAE9hD,IAAI,EAAE;QAAY,CAAC,CAAC;MACtD,CAAC,MAAM;QACH,IAAImrC,CAAC,GAAGntC,IAAI,CAACmb,WAAW,CAAC,CAAC;QAC1B,IAAIktE,IAAI,GAAG,EAAE;QACbzsF,CAAC,CAACmC,IAAI,CAAC,IAAI,CAAC8rF,iBAAiB,EAAE,UAAUv9E,CAAC,EAAEE,CAAC,EAAE;UAC3C,IAAKA,CAAC,CAAChS,IAAI,IAAIgS,CAAC,CAAChS,IAAI,CAAC2M,OAAO,CAACgmC,CAAC,CAAC,IAAI,CAAC,IAChC3gC,CAAC,CAAC5R,KAAK,IAAI4R,CAAC,CAAC5R,KAAK,CAACuM,OAAO,CAACgmC,CAAC,CAAC,IAAI,CAAE,IACnC3gC,CAAC,CAAC7R,KAAK,IAAI6R,CAAC,CAAC7R,KAAK,CAACwM,OAAO,CAACgmC,CAAC,CAAC,IAAI,CAAE,IACnC3gC,CAAC,CAAC3R,WAAW,IAAI2R,CAAC,CAAC3R,WAAW,CAACsM,OAAO,CAACgmC,CAAC,CAAC,IAAI,CAAE,EAAE;YAClDk7C,IAAI,CAAClqF,IAAI,CAACqO,CAAC,CAACtR,EAAE,CAAC;UACnB;QACJ,CAAC,CAAC;QAEFkI,EAAE,GAAG,IAAI,CAAC+5E,UAAU,CAACr5B,MAAM,CAAC;UACxB9hD,IAAI,EAAE,WAAW;UACjB6hD,KAAK,EAAE;YACH3oD,EAAE,EAAE;cACA,MAAImtF;YACR;UACJ;QACJ,CAAC,CAAC;MACN;IACJ,CAAC,MACI;MACDjlF,EAAE,GAAG,IAAI,CAAC+5E,UAAU,CAACr5B,MAAM,CAAC;QACxB9hD,IAAI,EAAE,WAAW;QACjB6hD,KAAK,EAAE;UACH3oD,EAAE,EAAEi2C;QACR;MACJ,CAAC,CAAC;IACN;IAEA,OAAO/tC,EAAE,CAACtH,IAAI,CAAC,UAAUE,IAAI,EAAE;MAC3B,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzB1H,CAAC,CAACmC,IAAI,CAAC/B,IAAI,EAAE,UAAUgC,GAAG,EAAEtG,EAAE,EAAE;QAE5BA,EAAE,CAAC4D,mBAAmB,GAAG5D,EAAE,CAAC4D,mBAAmB,KAAK,IAAI,IAAI5D,EAAE,CAAC4D,mBAAmB,KAAK,MAAM;QAC7F5D,EAAE,CAAC+yF,iBAAiB,GAAG,IAAI;QAC3B/yF,EAAE,CAACy/B,SAAS,GAAGz/B,EAAE,CAACy/B,SAAS,GAAG3H,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACy/B,SAAS,CAAC,GAAGz/B,EAAE,CAACy/B,SAAS;QACrEz/B,EAAE,CAACu7C,eAAe,GAAGv7C,EAAE,CAACu7C,eAAe,GAAGzjB,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACu7C,eAAe,CAAC,GAAGv7C,EAAE,CAACu7C,eAAe;;QAE7F;QACAv7C,EAAE,CAACuD,OAAO,GAAG,CAAC;QACdvD,EAAE,CAACs5C,WAAW,GAAG,CAAC;QAElB,IAAGt5C,EAAE,CAACkD,KAAK,IAAIlD,EAAE,CAACiD,KAAK,IAAGjD,EAAE,CAACmD,WAAW,EACpCnD,EAAE,CAACgD,QAAQ,GAAG,CAAC;UACXE,KAAK,EAAClD,EAAE,CAACkD,KAAK;UACdD,KAAK,EAAEjD,EAAE,CAACiD,KAAK;UACfE,WAAW,EAAEnD,EAAE,CAACmD;QACpB,CAAC,CAAC;QAENnD,EAAE,CAACoD,SAAS,GAAGpD,EAAE,CAACoD,SAAS,IAAIpD,EAAE,CAACoD,SAAS,KAAK,WAAW,GAAE00B,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACoD,SAAS,CAAC,GAAEpD,EAAE,CAACoD,SAAS;MAEvG,CAAC,CAAC;MACF,IAAMuoB,MAAM,GAAG6P,IAAI,KAAK,CAAC,IAAIA,IAAI,KAAK,IAAI,IAAIA,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAACA,IAAI,GAAG,CAAC,IAAIC,KAAK;MACjF9vB,QAAQ,CAACE,OAAO,CAAC;QAAEvH,IAAI,EAAE;UAAEoF,SAAS,EAAEpF,IAAI,CAACwF,KAAK,CAAC6hB,MAAM,EAAEA,MAAM,GAAG8P,KAAK,CAAC;UAAEtC,KAAK,EAAE70B,IAAI,CAACkC;QAAO;MAAE,CAAC,CAAC;MACjG,OAAOmF,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC,SAAM,CAAC,UAAUvH,GAAG,EAAE;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAAC3E,yBAAyB,GAAG,UAAUklB,IAAI,EAAEC,KAAK,EAAEokB,QAAQ,EAAEzpC,OAAO,EAAE;IACvEolB,IAAI,GAAG,CAACA,IAAI,GAAG,CAAC,GAAGA,IAAI,GAAG,CAAC;IAC3BC,KAAK,GAAG,CAACA,KAAK,GAAG,EAAE,GAAGA,KAAK;IAE3B,IAAIj4B,EAAE,GAAI,CAAC,CAAC4S,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC5S,EAAE,GAAI4S,OAAO,CAAC5S,EAAE,GAAG,IAAI;IACxD,IAAIV,IAAI,GAAI,CAAC,CAACsT,OAAO,IAAI,CAAC,CAACA,OAAO,CAACtT,IAAI,GAAIsT,OAAO,CAACtT,IAAI,CAAC2gB,WAAW,CAAC,CAAC,GAAG,IAAI;IAE5E,OAAO,IAAI,CAACgiE,UAAU,CAACr5B,MAAM,CAAC;MAAE9hD,IAAI,EAAE;IAAsB,CAAC,CAAC,CACzDlG,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAI+R,GAAG,GAAG,EAAE;MAEZtX,CAAC,CAACmC,IAAI,CAACoD,GAAG,EAAE,UAAUmL,CAAC,EAAExO,CAAC,EAAE;QACxB,IAAI4sF,GAAG,GAAG,CAAC5sF,CAAC,CAACwlC,WAAW,IAAIxlC,CAAC,CAACwlC,WAAW,IAAIiU,QAAQ;QACrD,IAAImzC,GAAG,IAAI,CAAC,CAACxvF,EAAE,EACXwvF,GAAG,GAAG5sF,CAAC,CAAC5C,EAAE,IAAIA,EAAE;QACpB,IAAIwvF,GAAG,IAAI,CAAC,CAAClwF,IAAI,EACbkwF,GAAG,GAAG5sF,CAAC,CAACtD,IAAI,CAAC2gB,WAAW,CAAC,CAAC,CAAChU,OAAO,CAAC3M,IAAI,CAAC,IAAI,CAAC;QACjD,IAAIkwF,GAAG,EAAE;UACL5sF,CAAC,CAAC2sF,iBAAiB,GAAG,IAAI;UAC1Bv3E,GAAG,CAAC/U,IAAI,CAACL,CAAC,CAAC;QACf;MACJ,CAAC,CAAC;MAEF,IAAIuF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC;QAAEvH,IAAI,EAAE;UAAEiS,mBAAmB,EAAEiF,GAAG,CAAC1R,KAAK,CAAC0xB,IAAI,GAAGC,KAAK,EAAEA,KAAK,IAAID,IAAI,GAAG,CAAC,CAAC;QAAE;MAAE,CAAC,CAAC;MAChG,OAAO7vB,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;EACV,CAAC;EAED,IAAI,CAACmnF,0BAA0B,GAAG,UAAU3uF,IAAI,EAAE;IAE9C,IAAIof,IAAI,GAAG,IAAI;IACf,OAAO,IAAI,CAAC+hE,UAAU,CAACmH,KAAK,CAAC,qBAAqB,CAAC,CAC9CxoF,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBia,IAAI,CAACyuE,iBAAiB,GAAG,EAAE;MAC3B,OAAOzuE,IAAI,CAAC+hE,UAAU,CAAC7qB,MAAM,CAAC;QAC1BtwD,IAAI,EAAE,UAAU;QAChB6hD,KAAK,EAAE;UACHrpD,IAAI,EAAE;YACF,MAAI,CAAC,4BAA4B,EAAE,yBAAyB;UAChE;QACJ;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,CAACsB,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACnB,IAAIypF,GAAG,GAAG,CACN;QACIpwF,IAAI,EAAE,4BAA4B;QAClCkT,KAAK,EAAE1V,aAAa,CAACuoC,eAAe;QACpCikD,YAAY,EAAE,IAAIjxD,IAAI,CAAC;MAC3B,CAAC,EACD;QACI/4B,IAAI,EAAE,yBAAyB;QAC/BkT,KAAK,EAAE1R,IAAI,CAACqhB,IAAI;QAChBmnE,YAAY,EAAE,IAAIjxD,IAAI,CAAC;MAC3B,CAAC,CACJ;MAED,OAAOnY,IAAI,CAAC+hE,UAAU,CAAC0D,MAAM,CAAC;QAC1BC,IAAI,EAAE,UAAU;QAChBjoC,MAAM,EAAE+xC;MACZ,CAAC,CAAC;IACN,CAAC,CAAC,CAAC9uF,IAAI,CAAC,YAAY;MAChB,IAAI0Q,CAAC,GAAG,EAAE;MAEV5Q,CAAC,CAACmC,IAAI,CAAC/B,IAAI,CAACkX,GAAG,EAAE,UAAUlV,GAAG,EAAEtG,EAAE,EAAE;QAChC0jB,IAAI,CAACyuE,iBAAiB,CAAC1rF,IAAI,CAAC;UACxBjD,EAAE,EAAExD,EAAE,CAAC4K,EAAE;UACT9H,IAAI,EAAE,CAAC9C,EAAE,CAACgK,IAAI,GAAGhK,EAAE,CAACgK,IAAI,GAAGhK,EAAE,CAACgK,IAAI,CAACyZ,WAAW,CAAC,CAAC;UAChDvgB,KAAK,EAAE,CAAClD,EAAE,CAAC8R,KAAK,GAAG9R,EAAE,CAAC8R,KAAK,GAAG9R,EAAE,CAAC8R,KAAK,CAAC2R,WAAW,CAAC,CAAC;UACpDxgB,KAAK,EAAE,CAACjD,EAAE,CAAC8K,KAAK,GAAG9K,EAAE,CAAC8K,KAAK,GAAG9K,EAAE,CAAC8K,KAAK,CAAC2Y,WAAW,CAAC,CAAC;UACpDtgB,WAAW,EAAE,CAACnD,EAAE,CAAC+R,WAAW,GAAG/R,EAAE,CAAC+R,WAAW,GAAG/R,EAAE,CAAC+R,WAAW,CAAC0R,WAAW,CAAC;QAC/E,CAAC,CAAC;QACF,IAAI9B,CAAC,GAAG;UACJne,EAAE,EAAExD,EAAE,CAAC4K,EAAE;UACT9H,IAAI,EAAE9C,EAAE,CAACgK,IAAI;UACb4hC,WAAW,EAAE5rC,EAAE,CAACmzF;QACpB,CAAC;QACDr+E,CAAC,CAACrO,IAAI,CAACkb,CAAC,CAAC;MACb,CAAC,CAAC;MAEF,OAAO+B,IAAI,CAAC+hE,UAAU,CAACwK,UAAU,CAAC;QAC9B7G,IAAI,EAAE,qBAAqB;QAC3BjoC,MAAM,EAAErsC,CAAC;QACTo7E,MAAM,EAAE,KAAK;QACbrG,aAAa,EAAE;MACnB,CAAC,CAAC;IACN,CAAC,CAAC;EACV,CAAC;EAED,IAAI,CAACuJ,2BAA2B,GAAG,UAAU9kD,KAAK,EAAE;IAChD,IAAIA,KAAK,KAAK,IAAI,EAAE;MAChB,IAAI3iC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B;IACA,IAAI4X,IAAI,GAAG,IAAI;IAEf,OAAO,IAAI,CAAC+hE,UAAU,CAACr5B,MAAM,CAAC;MAC1B9hD,IAAI,EAAE,UAAU;MAChB6hD,KAAK,EAAE;QACHrpD,IAAI,EAAE;MACV;IACJ,CAAC,CAAC,CAACsB,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACnB,IAAIA,GAAG,CAACjD,MAAM,KAAK,CAAC,IAChBiD,GAAG,CAAC,CAAC,CAAC,CAACuM,KAAK,KAAK1V,aAAa,CAACuoC,eAAe,EAAE;QAChD,IAAIl9B,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QACtB,OAAOF,QAAQ,CAACG,OAAO;MAC3B,CAAC,MACI;QACD,OAAO4X,IAAI,CAAC+hE,UAAU,CAACr5B,MAAM,CAAC;UAC1B9hD,IAAI,EAAE,UAAU;UAChB6hD,KAAK,EAAE;YACHrpD,IAAI,EAAE;UACV;QACJ,CAAC,CAAC,CAACsB,IAAI,CAAC,UAAUqF,GAAG,EAAE;UACnB,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzB,IAAInC,GAAG,CAACjD,MAAM,KAAK,CAAC,EAChBmF,QAAQ,CAACE,OAAO,CAAC,KAAK,CAAC,CAAC,KACvB;YACD,IAAIyO,GAAG,GAAG7Q,GAAG,CAAC,CAAC,CAAC;YAEhB,IAAI8oE,KAAK,GAAG,CAAE,IAAI12C,IAAI,CAAC,CAAC,CAACovD,OAAO,CAAC,CAAC,GAAK3wE,GAAG,CAACwyE,YAAY,CAAC7B,OAAO,CAAC,CAAE,IAAI,MAAM,GAAG,IAAI,GAAG,IAAI;YAC1F,IAAI1Y,KAAK,GAAG,CAAC;cAAE;cACX5mE,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC,CAAC,KAEvBF,QAAQ,CAACE,OAAO,CAAC,KAAK,CAAC;UAC/B;UAEA,OAAOF,QAAQ,CAACG,OAAO;QAC3B,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACunF,0BAA0B,GAAG,UAAU/kD,KAAK,EAAE;IAC/C,IAAIA,KAAK,KAAK,IAAI,EAAE;MAChB,IAAI3iC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B,CAAC,MACI;MACD,OAAO,IAAI,CAAC25E,UAAU,CAACr5B,MAAM,CAAC;QAC1B9hD,IAAI,EAAE,UAAU;QAChB6hD,KAAK,EAAE;UACHrpD,IAAI,EAAE;QACV;MACJ,CAAC,CAAC,CAACsB,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACnB,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAEzB,IAAInC,GAAG,CAACjD,MAAM,GAAG,CAAC,EACdmF,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC,CAAC,CAAC,CAACuM,KAAK,CAAC,CAAC,KAE/BrK,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAE1B,OAAOF,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC;IACN;EACJ,CAAC;EAED,IAAI,CAACwnF,eAAe,GAAG,UAAU93D,IAAI,EAAEC,KAAK,EAAEokB,QAAQ,EAAEzpC,OAAO,EAAE;IAC7D,IAAImmE,KAAK,GAAG97E,aAAa,CAAC67E,YAAY,CAAC,CAAC;IACxC,IAAI,CAACC,KAAK,EACNA,KAAK,GAAG,EAAE;IAEd,IAAI4U,EAAE,GAAG91D,4CAAU,CAAC/wB,IAAI,CAACiyE,KAAK,CAAC;IAE/B,IAAI6U,EAAE,GAAGD,EAAE,CAAChlC,KAAK,CAAC,UAAU/lD,CAAC,EAAE;MAC3B,OAAOA,CAAC,CAAC+7B,IAAI,CAAC1+B,MAAM,KAAK,QAAQ,KAAK,CAAC2S,OAAO,CAAC4gB,MAAM,IAAI7wB,MAAM,CAAC6wB,MAAM,KAAK5wB,CAAC,CAAC+7B,IAAI,CAAC3+B,EAAE,CAAC;IACzF,CAAC,CAAC,CAACuxB,IAAI,CAACyG,IAAI,GAAGC,KAAK,CAAC,CAChB83D,IAAI,CAAC93D,KAAK,CAAC,CACXg2B,OAAO,CAAC,CAAC;IAEd,IAAI9lD,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBD,QAAQ,CAACE,OAAO,CAACulF,EAAE,CAAC;IACpB,OAAOzlF,QAAQ,CAACG,OAAO;EAC3B,CAAC;;EAED;EACA,IAAI,CAAC0nF,kBAAkB,GAAG,EAAE;EAC5B,IAAI,CAACC,cAAc,GAAG,CAAC,CAAC;EAExB,IAAI,CAACnD,SAAS,GAAG,YAAY;IACzB,IAAI3kF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC4nF,kBAAkB,GAAG,EAAE;IAC5B,IAAI,CAACC,cAAc,GAAG,CAAC,CAAC;IACxB9nF,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IACtB,OAAOF,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACklF,cAAc,GAAG,UAAUx1E,GAAG,EAAE;IACjC,IAAI7P,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI8X,IAAI,GAAG,IAAI;IACfxjB,OAAO,CAAC4M,OAAO,CAAC0O,GAAG,EAAE,UAAUxb,EAAE,EAAE;MAC/B0jB,IAAI,CAAC+vE,cAAc,CAACzzF,EAAE,CAACyc,SAAS,CAAC,GAAGzc,EAAE;MACtC0jB,IAAI,CAAC8vE,kBAAkB,CAAC/sF,IAAI,CAACzG,EAAE,CAAC;IACpC,CAAC,CAAC;IACF2L,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IACtB,OAAOF,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAColF,aAAa,GAAG,YAAY;IAC7B,IAAIvlF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC2nF,kBAAkB,CAAC;IACzC,OAAO7nF,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC2lF,eAAe,GAAG,UAAUhxC,GAAG,EAAE;IAClC,IAAI90C,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAInC,GAAG,GAAG,IAAI,CAACgqF,cAAc,CAAChzC,GAAG,CAAC;IAClC,IAAIjlC,GAAG,GAAG,EAAE;IACZ,IAAI/R,GAAG,EAAE+R,GAAG,CAAC/U,IAAI,CAACgD,GAAG,CAAC;IACtBkC,QAAQ,CAACE,OAAO,CAAC2P,GAAG,CAAC;IACrB,OAAO7P,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACimF,oBAAoB,GAAG,UAAUD,QAAQ,EAAE;IAC5C,IAAInmF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAInC,GAAG,GAAG4xB,4CAAU,CAAC/wB,IAAI,CAAC,IAAI,CAACkpF,kBAAkB,CAAC,CAC7CrnC,KAAK,CAAC,UAAUnsD,EAAE,EAAE;MAAE,OAAOA,EAAE,CAAC4+B,QAAQ,IAAIkzD,QAAQ;IAAE,CAAC,CAAC,CACxD1lC,MAAM,CAAC,CAAC,CACRqF,OAAO,CAAC,CAAC;IACd9lD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;IACrB,OAAOkC,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACmmF,yBAAyB,GAAG,UAAUH,QAAQ,EAAE;IACjD,IAAInmF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAInC,GAAG,GAAG4xB,4CAAU,CAAC/wB,IAAI,CAAC,IAAI,CAACkpF,kBAAkB,CAAC,CAC7CrnC,KAAK,CAAC,UAAUnsD,EAAE,EAAE;MAAE,OAAOA,EAAE,CAAC4+B,QAAQ,IAAIkzD,QAAQ;IAAE,CAAC,CAAC,CACxD1kE,KAAK,CAAC,CAAC;IACZzhB,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;IACrB,OAAOkC,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC4nF,cAAc,GAAG,UAAUvxD,IAAI,EAAEqJ,IAAI,EAAE3pB,SAAS,EAAE;IACnD,OAAO,IAAI,CAAC4jE,UAAU,CAAC0D,MAAM,CAAC;MAC1BC,IAAI,EAAE,UAAU;MAChBjoC,MAAM,EAAE,CACJ;QACIwyC,OAAO,EAAErzF,aAAa,CAACuoC,eAAe;QACtC7R,MAAM,EAAEmL,IAAI,CAAC3+B,EAAE;QACfowF,QAAQ,EAAEpoD,IAAI,CAACqoD,QAAQ,IAAIroD,IAAI,CAACooD,QAAQ,IAAI,EAAE;QAC9CE,MAAM,EAAEh8D,IAAI,CAACC,SAAS,CAACoK,IAAI,CAAC;QAC5B4xD,UAAU,EAAEj8D,IAAI,CAACC,SAAS,CAACyT,IAAI,CAAC;QAChCshD,YAAY,EAAE,IAAIjxD,IAAI,CAAC,CAAC;QACxBshD,WAAW,EAAEh7C,IAAI,CAACg7C,WAAW;QAC7B6W,SAAS,EAAEnyE;MACf,CAAC;IAET,CAAC,CAAC;EACN,CAAC;;EAED;AACR;AACA;EACQ,IAAI,CAACoyE,UAAU,GAAG,UAAU5vB,OAAO,EAAE6vB,eAAe,EAAE/7C,MAAM,EAAE;IAC1D,OAAO,IAAI,CAACstC,UAAU,CAAC0D,MAAM,CAAC;MAC1BC,IAAI,EAAE,gBAAgB;MACtBjoC,MAAM,EAAE,CACJ;QACIgzC,OAAO,EAAE9vB,OAAO;QAChB+vB,eAAe,EAAEF,eAAe;QAChCzwF,MAAM,EAAE00C,MAAM;QACdk8C,WAAW,EAAE,IAAIx4D,IAAI,CAAC;MAC1B,CAAC;IAET,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACy4D,kBAAkB,GAAG,UAAUjwB,OAAO,EAAEkwB,SAAS,EAAEC,UAAU,EAAE;IAChE,IAAIC,WAAW,GAAGF,SAAS,IAAIA,SAAS,CAAC/tF,MAAM,GAAG,CAAC,GAAGsxB,IAAI,CAACC,SAAS,CAACw8D,SAAS,CAAC,GAAG,IAAI;IACtF,IAAIG,YAAY,GAAGF,UAAU,IAAIA,UAAU,CAAChuF,MAAM,GAAG,CAAC,GAAGsxB,IAAI,CAACC,SAAS,CAACy8D,UAAU,CAAC,GAAG,IAAI;IAE1F,OAAO,IAAI,CAAC/O,UAAU,CAAC0D,MAAM,CAAC;MAC1BC,IAAI,EAAE,eAAe;MACrBjoC,MAAM,EAAE,CACJ;QACIgzC,OAAO,EAAE9vB,OAAO;QAChB/hC,OAAO,EAAEmyD,WAAW;QACpBv7D,QAAQ,EAAEw7D,YAAY;QACtBL,WAAW,EAAE,IAAIx4D,IAAI,CAAC;MAC1B,CAAC;IAET,CAAC,CAAC;EACN,CAAC;;EAED;AACR;AACA;AACA;EACQ,IAAI,CAAC84D,yBAAyB,GAAG,UAAUjkE,eAAe,EAAE;IACxD,OAAO,IAAI,CAAC+0D,UAAU,CAACr5B,MAAM,CAAC;MAC1B9hD,IAAI,EAAE,gBAAgB;MACtB6hD,KAAK,EAAE;QACHioC,eAAe,EAAE1jE;MACrB,CAAC;MACD8gC,KAAK,EAAE;QACHojC,EAAE,EAAE,aAAa;QACjBlmF,IAAI,EAAE;MACV;IACJ,CAAC,CAAC;EACN,CAAC;;EAED;AACR;AACA;AACA;EACQ,IAAI,CAACmmF,eAAe,GAAG,YAAY;IAC/B;IACA,OAAO,IAAI,CAACF,yBAAyB,CAAC,sCAAsC,CAAC;EACjF,CAAC;;EAED;AACR;AACA;AACA;EACQ,IAAI,CAACG,gCAAgC,GAAG,UAAUpkE,eAAe,EAAE;IAC/D,IAAIhN,IAAI,GAAG,IAAI;IACf;IACA,OAAO,IAAI,CAAC+hE,UAAU,CAACr5B,MAAM,CAAC;MAC1B9hD,IAAI,EAAE,gBAAgB;MACtB6hD,KAAK,EAAE;QACHioC,eAAe,EAAE1jE;MACrB;IACJ,CAAC,CAAC,CAACtsB,IAAI,CAAC,UAAU2wF,MAAM,EAAE;MACtB,IAAI,CAACA,MAAM,IAAIA,MAAM,CAACvuF,MAAM,KAAK,CAAC,EAAE;QAChC,OAAO,EAAE;MACb;MAEA,IAAIwuF,QAAQ,GAAGD,MAAM,CAAC79E,GAAG,CAAC,UAASs6C,KAAK,EAAE;QAAE,OAAOA,KAAK,CAAC2iC,OAAO;MAAE,CAAC,CAAC;;MAEpE;MACA,OAAOzwE,IAAI,CAAC+hE,UAAU,CAACr5B,MAAM,CAAC;QAC1B9hD,IAAI,EAAE,eAAe;QACrB6hD,KAAK,EAAE;UACHgoC,OAAO,EAAE;YAAE,MAAIa;UAAS;QAC5B,CAAC;QACDxjC,KAAK,EAAE;UACHojC,EAAE,EAAE,aAAa;UACjBlmF,IAAI,EAAE;QACV;MACJ,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACumF,UAAU,GAAG,UAAUj9D,MAAM,EAAE67D,QAAQ,EAAEqB,WAAW,EAAE;IACvD,IAAI/oC,KAAK,GAAG;MACRynC,QAAQ,EAAE;IACd,CAAC;IACD,IAAI,CAACsB,WAAW,EAAE;MACd/oC,KAAK,CAACn1B,MAAM,GAAGgB,MAAM;IACzB,CAAC,MACI;MACDm0B,KAAK,CAACgxB,WAAW,GAAG+X,WAAW;IACnC;IACA,IAAIrB,QAAQ,EAAE;MACV1nC,KAAK,CAACynC,QAAQ,GAAGC,QAAQ;IAC7B;IACA,OAAO,IAAI,CAACpO,UAAU,CAAC7qB,MAAM,CAAC;MAC1BtwD,IAAI,EAAE,UAAU;MAChB6hD,KAAK,EAAEA;IAEX,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACgpC,4BAA4B,GAAG,UAASxwD,OAAO,EAAE;IAClD,OAAO,IAAI,CAAC8gD,UAAU,CAACr5B,MAAM,CAAC;MAC1B9hD,IAAI,EAAE,UAAU;MAChB6hD,KAAK,EAAE;QACHwnC,OAAO,EAAEhvD,OAAO;QAChBivD,QAAQ,EAAE;MACd,CAAC;MACDpiC,KAAK,EAAE;QACHojC,EAAE,EAAE,cAAc;QAClBlmF,IAAI,EAAE;MACV;IACJ,CAAC,CAAC;EACN,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;;ACvrDPxO,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAAC2jD,OAAO,CAAC,sBAAsB,EAAE,CAAC,UAAU,EAAE,eAAe,EACnF,UAAU3iD,QAAQ,EAAEN,aAAa,EAAE;EAC/B,IAAI4yB,oBAAoB,GAAG,CAAC,CAAC;EAE7BA,oBAAoB,CAACkiE,QAAQ,GAAG,IAAI;EACpCliE,oBAAoB,CAACmiE,OAAO,GAAG,IAAI;EAEnC,IAAI3xE,IAAI,GAAGwP,oBAAoB;EAE/BA,oBAAoB,CAACoiE,mBAAmB,GAAG,UAAUF,QAAQ,EAAEz5B,QAAQ,EAAE;IACrEj4C,IAAI,CAAC0xE,QAAQ,GAAGA,QAAQ,CAAC,CAAC;IAC1B,IAAIG,SAAS,GAAGj1F,aAAa,CAACwmC,aAAa;IAC3C,IAAI0uD,iBAAiB,GAAGl1F,aAAa,CAACoB,uBAAuB;IAE7D,IAAIgiB,IAAI,CAAC2xE,OAAO,IAAI,IAAI,EAAE;MACtBjwF,OAAO,CAACC,GAAG,CAAC,qBAAqB,CAAC;MAClCzE,QAAQ,CAACqjD,MAAM,CAACvgC,IAAI,CAAC2xE,OAAO,CAAC;MAC7B3xE,IAAI,CAAC2xE,OAAO,GAAG,IAAI;IACvB;IAEA3xE,IAAI,CAAC2xE,OAAO,GAAGz0F,QAAQ,CAAC,YAAY;MAChCwE,OAAO,CAACC,GAAG,CAAC,oBAAoB,CAAC;MACjC,IAAI,CAAC,CAAC+vF,QAAQ,IAAIA,QAAQ,CAAC5uF,MAAM,IAAIgvF,iBAAiB,EAAE;QACpD75B,QAAQ,CAACj4C,IAAI,CAAC0xE,QAAQ,CAAC;MAC3B;IACJ,CAAC,EAAEG,SAAS,CAAC;EAEjB,CAAC;EAED,OAAOriE,oBAAoB;AAC/B,CAAC,CACJ,CAAC,C;;;;;;;;;;;;;;;AChCoC;AAEtChzB,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,mBAAmB,EAAE,CACpD,IAAI,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAClD,eAAe,EAAE,gBAAgB,EAAE,OAAO,EAAE,YAAY,EACxD,UAAU,EAAE,MAAM,EACtB,UAAUle,EAAE,EAAEN,aAAa,EAAEF,YAAY,EAAEI,SAAS,EAAEL,aAAa,EAC/DO,cAAc,EAAE0kB,KAAK,EAAEllB,UAAU,EAAEO,QAAQ,EAAE4mE,IAAI,EAAE;EAEnD,IAAI,CAACp4B,gBAAgB,GAAG,IAAI;EAC5B,IAAI,CAACsmD,mBAAmB,GAAG,CAAC,CAAC,CAAC;EAC9B,IAAI,CAACjnD,aAAa,GAAG,KAAK;EAC1B,IAAI,CAACU,gBAAgB,GAAG,MAAM;EAC9B,IAAI,CAACwmD,eAAe,GAAG,KAAK,CAAC,CAAC;;EAE9B;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAOI,IAAI,CAACC,kBAAkB,GAAG,KAAK;EAC/B,IAAI,CAACC,0BAA0B,GAAG,KAAK;EACvC,IAAI,CAACC,sBAAsB,GAAG,KAAK;EACnC,IAAI,CAACC,qBAAqB,GAAG,KAAK;EAClC,IAAI,CAACC,eAAe,GAAG,CAAC,CAAC;EAEzB,IAAItyE,IAAI,GAAG,IAAI;EACf,IAAI,CAACuyE,sBAAsB,GAAG,UAAU78E,GAAG,EAAE;IACzChU,OAAO,CAACC,GAAG,CAAC,0BAA0B,GAAGyyB,IAAI,CAACC,SAAS,CAAC3e,GAAG,CAAC,CAAC;IAC7D,IAAI,CAACsK,IAAI,CAACiyE,eAAe,EAAE;IAE3B,IAAIO,UAAU,GAAG,IAAI;IAErB,QAAQ98E,GAAG,CAACouC,QAAQ;MAChB,KAAK,wBAAwB;MAC7B,KAAK,qBAAqB;QACtB,IAAI,CAACouC,kBAAkB,GAAG,KAAK;QAC/B;MACJ,KAAK,oBAAoB;QACrB,IAAI,CAACA,kBAAkB,GAAG,IAAI;QAC9B;MAEJ,KAAK,wBAAwB;QACzB,IAAI,CAACC,0BAA0B,GAAG,KAAK;QACvC,IAAI,CAACC,sBAAsB,GAAG,KAAK;QACnC;MAEJ,KAAK,4BAA4B;QAC7B,IAAI,CAACD,0BAA0B,GAAG,IAAI;QACtC,IAAI,CAACC,sBAAsB,GAAG,KAAK;QACnC;MAEJ,KAAK,wBAAwB;QACzB,IAAI,CAACD,0BAA0B,GAAG,KAAK;QACvC,IAAI,CAACC,sBAAsB,GAAG,IAAI;QAClC;MAEJ,KAAK,uBAAuB;QACxB,IAAI,CAACC,qBAAqB,GAAG,IAAI;QACjC;MAEJ,KAAK,wBAAwB;QACzB,IAAI,CAACA,qBAAqB,GAAG,KAAK;QAClC;MACJ,KAAK,cAAc;QACfG,UAAU,GAAG,KAAK;QAClB;MAEJ;QACIA,UAAU,GAAG,KAAK;IAC1B;IAEA,IAAIA,UAAU,EAAE;MACZ,IAAI/9C,MAAM,GAAI,CAAC,IAAI,CAACy9C,kBAAkB,IAAI,IAAI,CAACG,qBAAqB,IAAI,IAAI,CAACD,sBAAsB,GAAI,OAAO,GACjG,IAAI,CAACD,0BAA0B,GAAG,SAAS,GAAG,IAAK;MAChEj1F,QAAQ,CAAC,YAAY;QACjBP,UAAU,CAAC+K,UAAU,CAAC,2BAA2B,EAAE+sC,MAAM,CAAC;MAC9D,CAAC,CAAC;IACN;EACJ,CAAC;EAED14C,MAAM,CAACskF,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAACkS,sBAAsB,CAAC;;EAExE;EACA,IAAI,CAACE,UAAU,GAAG,YAAY;IAC1B/wF,OAAO,CAACC,GAAG,CAAC,8BAA8B,CAAC;IAC3C,IAAIqe,IAAI,GAAG,IAAI;IAEf,OAAO,IAAI,CAAC0yE,yBAAyB,CAAC,CAAC,CAAChyF,IAAI,CAAC,UAAUiyF,QAAQ,EAAE;MAC7D,OAAO3yE,IAAI,CAAC4yE,kBAAkB,CAACD,QAAQ,CAAC;IAC5C,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACC,kBAAkB,GAAG,UAAUD,QAAQ,EAAE;IAC1C,IAAI3yE,IAAI,GAAG,IAAI;IACf,IAAIqD,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC,IAAI,CAAC+pF,eAAe,EAAE;MACvB5uE,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACrBmb,QAAQ,CAAClb,OAAO,CAACwqF,QAAQ,CAAC;MAC1B,OAAOtvE,QAAQ,CAACjb,OAAO;IAC3B;IAEA,IAAI,CAAC4X,IAAI,CAAC+qB,aAAa,IAAInuC,aAAa,CAAC2L,QAAQ,EAAE;MAC/C7G,OAAO,CAACC,GAAG,CAAC,0BAA0B,CAAC;MACvC,IAAI,CAACswF,eAAe,GAAG,KAAK;MAC5B5uE,QAAQ,CAAClb,OAAO,CAACwqF,QAAQ,CAAC;MAE1B,OAAOtvE,QAAQ,CAACjb,OAAO;IAC3B,CAAC,MACI;MACD1G,OAAO,CAACC,GAAG,CAAC,kCAAkC,CAAC;MAC/C0hB,QAAQ,CAAClb,OAAO,CAACwqF,QAAQ,CAAC;IAC9B;IAEA,OAAOtvE,QAAQ,CAACjb,OAAO;EAC3B,CAAC;EAED,IAAI,CAACyqF,eAAe,GAAG,UAAUF,QAAQ,EAAE;IACvC,IAAItvE,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI8X,IAAI,CAACiyE,eAAe,EAAE;MACtB5uE,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACrBmb,QAAQ,CAAClb,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOkb,QAAQ,CAACjb,OAAO;IAC3B;IAEA,IAAI,CAAC4X,IAAI,CAAC+qB,aAAa,IAAInuC,aAAa,CAAC2L,QAAQ,EAAE;MAC/C7G,OAAO,CAACC,GAAG,CAAC,0BAA0B,CAAC;MACvC,IAAI,CAACswF,eAAe,GAAG,IAAI;MAC3B5uE,QAAQ,CAAClb,OAAO,CAAC;QAAEssC,MAAM,EAAE;MAAU,CAAC,CAAC;MAEvC,OAAOpxB,QAAQ,CAACjb,OAAO;IAC3B,CAAC,MACI;MACD1G,OAAO,CAACC,GAAG,CAAC,2CAA2C,CAAC;MACxD0hB,QAAQ,CAAClb,OAAO,CAAC,IAAI,CAAC;IAC1B;IAEA,OAAOkb,QAAQ,CAACjb,OAAO;EAC3B,CAAC;;EAED;EACA;EACA,IAAI,CAAC0qF,OAAO,GAAG,YAAY;IACvBpxF,OAAO,CAACC,GAAG,CAAC,2BAA2B,CAAC;IAExC,OAAO,IAAI,CAAC+wF,yBAAyB,CAAC,CAAC,CAAChyF,IAAI,CAAC,UAAUiyF,QAAQ,EAAE;MAC7D,OAAO3yE,IAAI,CAAC6yE,eAAe,CAACF,QAAQ,CAAC;IACzC,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACI,8BAA8B,GAAG,UAAUC,kBAAkB,EAAE;IAChEhzE,IAAI,GAAG,IAAI;IACX,IAAIja,GAAG,GAAG,EAAE;IACZ,IAAIsd,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAGzB,IAAI,CAACtL,aAAa,CAAC2L,QAAQ,EAAE;MACzB8a,QAAQ,CAAClb,OAAO,CAACpC,GAAG,CAAC;IACzB,CAAC,MACI;MACD;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IAjBY;IAqBJ,OAAOsd,QAAQ,CAACjb,OAAO;EAC3B,CAAC;EAED,IAAI,CAACsqF,yBAAyB,GAAG,YAAY;IAEzC,IAAIC,QAAQ,GAAG/1F,aAAa,CAACuuC,uBAAuB,CAAC,IAAI,CAAC;IAC1D,IAAI,CAACmnD,eAAe,GAAGK,QAAQ;IAE/B,IAAI,CAACA,QAAQ,EAAE;MACX,IAAItvE,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBmb,QAAQ,CAACC,MAAM,CAAC,gCAAgC,CAAC;MACjD,OAAOD,QAAQ,CAACjb,OAAO;IAC3B;IAEA,IAAI,CAAC6qF,cAAc,GAAGN,QAAQ,CAACvnD,qBAAqB;IACpD,IAAI,CAACC,wBAAwB,GAAGsnD,QAAQ,CAACtnD,wBAAwB;IACjE,IAAI,CAACC,wBAAwB,GAAGqnD,QAAQ,CAACrnD,wBAAwB;IACjE,IAAI,CAACP,aAAa,GAAG4nD,QAAQ,CAAC5nD,aAAa;IAC3C,IAAI,CAACU,gBAAgB,GAAGknD,QAAQ,CAAClnD,gBAAgB;IACjD,IAAI,CAACynD,cAAc,GAAGP,QAAQ,CAACQ,QAAQ,KAAK,IAAI,GAAG,UAAU,GAAG,UAAU;IAE1EzxF,OAAO,CAACC,GAAG,CAAC,WAAW,GAAGyyB,IAAI,CAACC,SAAS,CAACs+D,QAAQ,CAAC,CAAC;IAEnD,IAAIh4B,GAAG,GAAG,IAAI,CAACy4B,gBAAgB;IAE/B,OAAOz4B,GAAG,CAAC,IAAI,EAAEg4B,QAAQ,CAAC;EAC9B,CAAC;EAED,IAAI,CAACU,2BAA2B,GAAG,YAAY;IAC3C,IAAIrzE,IAAI,GAAG,IAAI;IAEf,OAAO,IAAI,CAAC0yE,yBAAyB,CAAC,CAAC,CAClChyF,IAAI,CAAC,UAAUiyF,QAAQ,EAAE;MACtB,IAAItvE,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAEzB,IAAI,CAAC8X,IAAI,CAAC+qB,aAAa,IAAInuC,aAAa,CAAC2L,QAAQ,EAAE;QAC/C;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MAxBoB,CA0BH,MACI;QACD7G,OAAO,CAACC,GAAG,CAAC,sCAAsC,CAAC;QACnD0hB,QAAQ,CAAClb,OAAO,CAAC,IAAI,CAAC;MAC1B;MAEA,OAAOkb,QAAQ,CAACjb,OAAO;IAE3B,CAAC,CAAC;EACV,CAAC;EAED,IAAI,CAACkrF,cAAc,GAAG,YAAY;IAC9B,IAAItzE,IAAI,GAAG,IAAI;IACf,IAAIm1C,EAAE,GAAG,gCAAgC;IACzC,OAAO,IAAI,CAACo+B,mBAAmB,CAAC/yF,CAAC,CAAC20D,EAAE,CAAC,CAAC;EAC1C,CAAC;EAED,IAAI,CAACo+B,mBAAmB,GAAG,UAAUj3F,EAAE,EAAEsd,KAAK,EAAE;IAC5C,IAAIoG,IAAI,GAAG,IAAI;IACfte,OAAO,CAACC,GAAG,CAAC,2BAA2B,CAAC;IACxC;IACA,OAAO,IAAI,CAAC+wF,yBAAyB,CAAC,CAAC,CAClChyF,IAAI,CAAC,YAAY;MACdgB,OAAO,CAACC,GAAG,CAAC,6EAA6E,GAAGqe,IAAI,CAAC0rB,gBAAgB,CAAC;MAElH,IAAI9uC,aAAa,CAACX,MAAM,IAAI,CAAC+jB,IAAI,CAAC+qB,aAAa,EAAE;QAC7C,IAAIyoD,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAClB1H,CAAC,CAAClE,EAAE,CAAC,CAACm3F,SAAS,CAAC,CAAC;QACjBD,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;QACf,OAAOqrF,CAAC,CAACprF,OAAO;MACpB,CAAC,MAAM,IAAI,CAACxL,aAAa,CAACX,MAAM,IAAI,CAAC+jB,IAAI,CAAC+qB,aAAa,EAAE;QACrD,IAAIyoD,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;;QAElB;QACA,IAAIqvD,OAAO,GAAG/2D,CAAC,CAAClE,EAAE,CAAC,CAAC6f,IAAI,CAAC,CAAC,CAACE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAACpE,IAAI,CAAC,CAAC;QAEpD,IAAIlc,MAAM,CAACw3C,MAAM,CAACC,QAAQ,KAAK,KAAK,EAAE;UAClC,IAAMugC,IAAI,GAAG,CACT,kBAAkB,EAAE,aAAa,CACpC;UACD,IAAI2f,GAAG,GAAG,IAAIC,MAAM,CAAC,GAAG,GAAE5f,IAAI,CAACvgE,GAAG,CAAC,UAAA9Q,CAAC;YAAA,WAAAyL,MAAA,CAAQzL,CAAC;UAAA,CAAG,CAAC,CAAC2O,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,uBAAuB,EAAE,GAAG,CAAC;UACjGkmD,OAAO,GAAGA,OAAO,CAACl7C,OAAO,CAACq3E,GAAG,EAAE,EAAE,CAAC;QACtC;QAEAlwE,OAAO,CAACqC,OAAO,CAAC+tE,OAAO,CAAC9pC,KAAK,CAACyN,OAAO,EAAE;UAAEs8B,SAAS,EAAE,IAAI;UAAE3P,MAAM,EAAE;QAAM,CAAC,EAAE,UAAUn+E,GAAG,EAAE;UACtF,IAAIA,GAAG,IAAI,UAAU,EACjBlJ,YAAY,CAACiE,SAAS,CAAC,iCAAiC,CAAC;UAC7D;;UAEA0yF,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;UACf,OAAOqrF,CAAC,CAACprF,OAAO;QACpB,CAAC,CAAC;MACN;MAEA,IAAI6V,CAAC,GAAGzd,CAAC,CAAClE,EAAE,CAAC;MAEb,IAAI6B,GAAG,GAAG6hB,IAAI,CAAC8zE,yBAAyB,CAAC71E,CAAC,EAAE+B,IAAI,CAACqrB,wBAAwB,EAAErrB,IAAI,CAACsrB,wBAAwB,CAAC;MACzGrtB,CAAC,GAAGzd,CAAC,CAACrC,GAAG,CAAC41F,eAAe,CAAC92E,cAAc,CAAC,oBAAoB,CAAC,CAAC;MAC/D,IAAI+2E,GAAG,GAAG/1E,CAAC,CAACg2C,QAAQ,CAAC,CAAC,CAACA,QAAQ,CAAC,CAAC,CAACn6C,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,CAACA,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC;MAClFpY,OAAO,CAACC,GAAG,CAAC,wDAAwD,CAAC;;MAErE;MACA;MACA;MACA;;MAEA;;MAEA;MACA;;MAEA;MACA;;MAEA,IAAI/E,aAAa,CAAC8oB,UAAU,IAAI1F,IAAI,CAAC+qB,aAAa,EAAE;QAChD,OAAOgnD,kDAAW,CAAC9zE,CAAC,CAAC,CAAC,CAAC,CAAC;MAC5B;MACA,IAAIu1E,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAElB,IAAI6pC,CAAC,GAAG9zB,CAAC,CAAC7H,MAAM,CAAC,CAAC,CAACA,MAAM,CAAC,CAAC,CAAC+F,IAAI,CAAC,CAAC,CAACE,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;MAC/Dm3E,CAAC,CAACrrF,OAAO,CAAC;QACNujC,gBAAgB,EAAE1rB,IAAI,CAAC0rB,gBAAgB;QACvC9xB,KAAK,EAAEqE,CAAC,CAACg2E,UAAU,CAAC,CAAC;QACrBp6E,MAAM,EAAEoE,CAAC,CAAC6yC,WAAW,CAAC,CAAC;QACvB30C,IAAI,EAAE,6GAA6G,GAAG41B,CAAC,GAAG;MAC9H,CAAC,CAAC;MACF,OAAOyhD,CAAC,CAACprF,OAAO;IACpB,CAAC,CAAC,CACL1H,IAAI,CAAC,UAAUE,IAAI,EAAE;MAClBc,OAAO,CAACC,GAAG,CAAC,0CAA0C,CAAC;MAEvD,IAAIob,MAAM,GAAGnc,IAAI;MAEjB,IAAI4yF,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAElB,IAAItH,IAAI,IAAI,IAAI,EAAE;QACd4yF,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;QACf,OAAOqrF,CAAC,CAACprF,OAAO;MACpB;MAEA,IAAI,OAAQ2U,MAAO,IAAI,QAAQ,EAAE;QAC7By2E,CAAC,CAACrrF,OAAO,CAAC4U,MAAM,CAAC;MACrB,CAAC,MACI,IAAI,CAAC,CAACnc,IAAI,CAACub,IAAI,EAAE;QAClBvb,IAAI,CAAC/C,IAAI,GAAGmiB,IAAI,CAACkzE,cAAc;QAC/BM,CAAC,CAACrrF,OAAO,CAACvH,IAAI,CAAC;MACnB,CAAC,MACI;QACD4yF,CAAC,CAACrrF,OAAO,CAAC;UACNujC,gBAAgB,EAAE1rB,IAAI,CAAC0rB,gBAAgB;UACvC9xB,KAAK,EAAEoG,IAAI,CAACqrB,wBAAwB;UACpCtuB,MAAM,EAAEA,MAAM;UACdlf,IAAI,EAAEmiB,IAAI,CAACkzE;QACf,CAAC,CAAC;MACN;MAEA,OAAOM,CAAC,CAACprF,OAAO;IAEpB,CAAC,CAAC,CAAC1H,IAAI,CAAC,UAAUwzF,GAAG,EAAE;MACnB,IAAIV,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAClB,IAAI,CAAC8X,IAAI,CAAC+qB,aAAa,IAAInuC,aAAa,CAAC2L,QAAQ,EAAE;QAC/C;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;QAOgBirF,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;MACnB,CAAC,MACI;QACD,IAAI+rF,GAAG,IAAI,IAAI,KAAKt3F,aAAa,CAAC8oB,UAAU,IAAI1F,IAAI,CAAC+qB,aAAa,CAAC,EAAE;UACjE/qB,IAAI,CAACm0E,mBAAmB,CAACD,GAAG,CAACn3E,MAAM,EAAEm3E,GAAG,CAACn3E,MAAM,CAACnD,KAAK,EAAEs6E,GAAG,CAACn3E,MAAM,CAAClD,MAAM,EACxE,YAAY;YACRnY,OAAO,CAACC,GAAG,CAAC,iCAAiC,CAAC;YAC9C6xF,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;UACnB,CAAC,CAAC;QACN,CAAC,MACI;UACDzG,OAAO,CAACC,GAAG,CAAC,qBAAqB,CAAC;UAClC6xF,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;QACnB;;QAEA;MACJ;MAEA,OAAOqrF,CAAC,CAACprF,OAAO;IACpB,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAAC+rF,mBAAmB,GAAG,UAAUp3E,MAAM,EAAEnD,KAAK,EAAEC,MAAM,EAAEo+C,QAAQ,EAAE;IAClE,IAAIm8B,MAAM,GAAGr3E,MAAM,CAAC4B,SAAS,CAAC,WAAW,CAAC;IAE1C,IAAI01E,QAAQ,GAAG,6EAA6E,GACxF,2DAA2D,IAAIz6E,KAAK,GAAG,EAAE,CAAC,GAAE,OAAO,GACnF,iCAAiC,GACjC,kCAAkC,GAClC,sIAAsI,GACtI,kCAAkC,GAAGzc,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC,GAAG,OAAO,GACjF,cAAc,GACd,yCAAyC,GAAGsC,CAAC,CAACzE,MAAM,CAAC,CAAC8d,MAAM,CAAC,CAAC,GAAG,GAAG,GAAG,4FAA4F,IAAID,KAAK,GAAG,EAAE,CAAC,GAAG,YAAY,GAAGC,MAAM,GAAG,OAAO,GACpN,oBAAoB,GACpB,kCAAkC,GAClC,6EAA6E,GAAG1c,cAAc,CAACe,SAAS,CAAC,OAAO,CAAC,GAAG,WAAW,GAC/H,cAAc,GACd,YAAY,GACZ,UAAU,GACV,QAAQ;IAEZ,IAAIo2F,EAAE,GAAG9zF,CAAC,CAAC6zF,QAAQ,CAAC;IACpBC,EAAE,CAACvmF,IAAI,CAAC,aAAa,CAAC,CAAC6pD,MAAM,CAAC,YAAY,GAAGw8B,MAAM,GAAG,KAAK,CAAC;IAC5D5zF,CAAC,CAAC,MAAM,CAAC,CAACo3D,MAAM,CAAC08B,EAAE,CAAC;IAEpB,IAAI,OAAOr8B,QAAQ,IAAI,UAAU,EAAE;MAC/Bz3D,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC8E,UAAU,CAACyyF,EAAE,EAAE,UAAUC,GAAG,EAAE;QACxCA,GAAG,CAAC7jC,EAAE,CAAC,iBAAiB,EAAE,UAAUzyC,CAAC,EAAE;UACnCg6C,QAAQ,CAAC,CAAC;UACVz3D,CAAC,CAACC,OAAO,CAAC,CAAC;QACf,CAAC,CAAC;MACN,CAAC,CAAC;IACN,CAAC,MACI;MACD1D,aAAa,CAAC8E,UAAU,CAACyyF,EAAE,CAAC;IAChC;EACJ,CAAC;EAED,IAAI,CAACR,yBAAyB,GAAG,UAAUx3F,EAAE,EAAEsd,KAAK,EAAEC,MAAM,EAAE;IAC1DnY,OAAO,CAACC,GAAG,CAAC,iCAAiC,CAAC;IAC9CnB,CAAC,CAAC,uBAAuB,CAAC,CAAC02D,MAAM,CAAC,CAAC;;IAEnC;IACA;;IAEA,IAAIvG,SAAS,GAAG3zC,QAAQ,CAAC81B,aAAa,CAAC,QAAQ,CAAC;IAChD6d,SAAS,CAACuD,SAAS,GAAG,sBAAsB;IAC5CvD,SAAS,CAACzzC,KAAK,CAACC,UAAU,GAAG,QAAQ;IACrCwzC,SAAS,CAACzzC,KAAK,CAAC8zC,QAAQ,GAAG,OAAO;IAClCL,SAAS,CAACzzC,KAAK,CAACnD,IAAI,GAAG,UAAU;IACjC42C,SAAS,CAACzzC,KAAK,CAACoL,GAAG,GAAG,KAAK;IAC3BqoC,SAAS,CAACzzC,KAAK,CAACgnE,MAAM,GAAG,GAAG;IAC5BvzB,SAAS,CAAC/2C,KAAK,GAAGA,KAAK;IACvB;IACA+2C,SAAS,CAAC6jC,SAAS,GAAG,IAAI,CAAC,CAAC;;IAE5Bx3E,QAAQ,CAACm2B,IAAI,CAACC,WAAW,CAACud,SAAS,CAAC;IACpC,IAAI8jC,EAAE,GAAGn4F,EAAE,CAAC8+C,KAAK,CAAC,CAAC;IACnBq5C,EAAE,CAAC36E,GAAG,CAAC;MAAE,kBAAkB,EAAE,OAAO;MAAE,UAAU,EAAE,UAAU;MAAE,MAAM,EAAE,GAAG;MAAE,KAAK,EAAE,GAAG;MAAE,OAAO,EAAEF,KAAK,GAAG;IAAK,CAAC,CAAC;IAC/G66E,EAAE,CAACpwF,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACnCowF,EAAE,CAACC,UAAU,CAAC,UAAU,CAAC;IAEzBl0F,CAAC,CAACmwD,SAAS,CAACojC,eAAe,CAAC5gD,IAAI,CAAC,CAACykB,MAAM,CAAC68B,EAAE,CAAC;IAE5C,IAAIpmB,CAAC,GAAG;MACJx0D,MAAM,EAAE82C,SAAS,CAAC92C,MAAM;MACxBD,KAAK,EAAE+2C,SAAS,CAAC/2C;IACrB,CAAC;IACDlY,OAAO,CAACC,GAAG,CAAC,mCAAmC,GAAGyyB,IAAI,CAACC,SAAS,CAACg6C,CAAC,CAAC,CAAC;IAEpE,OAAO1d,SAAS;EACpB,CAAC;EAED,IAAI,CAACyiC,gBAAgB,GAAG,UAAUpzE,IAAI,EAAE2yE,QAAQ,EAAE;IAC9C3yE,IAAI,CAAC0rB,gBAAgB,GAAGinD,QAAQ,CAACjnD,gBAAgB;IACjD,IAAIroB,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBmb,QAAQ,CAAClb,OAAO,CAACwqF,QAAQ,CAAC;IAC1B,OAAOtvE,QAAQ,CAACjb,OAAO;EAC3B,CAAC;EAED,IAAI,CAACusF,WAAW,GAAG,UAAUC,YAAY,EAAEC,mBAAmB,EAAE;IAC5Dr0F,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,IAAIq0F,YAAY,GAAG,CAAC,CAACF,YAAY,GAAGA,YAAY,CAAC1gD,GAAG,CAAC,CAAC,CAAC,GAAG1zC,CAAC,CAAC,iCAAiC,CAAC,CAAC0zC,GAAG,CAAC,CAAC,CAAC;IAErG,IAAI,CAAC,CAAC4gD,YAAY,CAACC,SAAS,EAAE;MAC1B,IAAIC,GAAG,GAAGx0F,CAAC,CAACs0F,YAAY,CAACC,SAAS,CAAC;MAEnCC,GAAG,CAACN,UAAU,CAAC,UAAU,CAAC;MAE1BM,GAAG,CAACjnF,IAAI,CAAC,iBAAiB,CAAC,CAACpL,IAAI,CAAC,YAAY;QACzC,IAAI6c,EAAE,GAAGhf,CAAC,CAAC,IAAI,CAAC,CAAC6D,IAAI,CAAC,eAAe,CAAC;QACtC7D,CAAC,CAAC,IAAI,CAAC,CAACsZ,GAAG,CAAC,WAAW,EAAE0F,EAAE,CAAC;QAC5Bhf,CAAC,CAAC,IAAI,CAAC,CAACk0F,UAAU,CAAC,eAAe,CAAC;MACvC,CAAC,CAAC;MAEF,IAAIG,mBAAmB,KAAK,IAAI,EAC5BG,GAAG,CAACjnF,IAAI,CAAC,aAAa,CAAC,CAACmpD,MAAM,CAAC,CAAC;MAEpC,OAAO,IAAI,CAACq8B,mBAAmB,CAACyB,GAAG,CAAC,CAAC,CAAC,CAAC,CAClCt0F,IAAI,CAAC,YAAY;QACdF,CAAC,CAACO,SAAS,CAAC,CAAC;QACbW,OAAO,CAACC,GAAG,CAAC,kBAAkB,CAAC;QAC/B,IAAI6xF,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAClBsrF,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;QACf,OAAOqrF,CAAC,CAACprF,OAAO;MACpB,CAAC,CAAC,SACA,CAAC,UAAUvH,GAAG,EAAE;QAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;QACbW,OAAO,CAACC,GAAG,CAAC,mBAAmB,CAAC;QAChC9E,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;QAC3B,IAAI2yF,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAClBsrF,CAAC,CAAClwE,MAAM,CAAC,IAAI,CAAC;QACd,OAAOkwE,CAAC,CAACprF,OAAO;MACpB,CAAC,CAAC;IACN,CAAC,MACI;MACD,IAAIorF,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAClBsrF,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;MACf,OAAOqrF,CAAC,CAACprF,OAAO;IACpB;EACJ,CAAC;AAEL,CAAC,CAAC,CAAC,C;;;;;;;;;;ACxkBH5L,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,cAAc,EAAE,CAC/C,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,YAAY,EACxF,UAAUle,EAAE,EAAEwkB,KAAK,EAAEjlB,aAAa,EAAEkwB,qBAAqB,EAAEvb,eAAe,EAAEE,UAAU,EAAE;EAEpF,IAAI,CAACwjF,iBAAiB,GAAG,UAAUC,UAAU,EAAE;IAC3C,OAAO,CACP;MAAEtwF,IAAI,EAAE,wBAAwB;MAAEqN,KAAK,EAAE,EAAE;MAAEkjF,OAAO,EAAE,GAAG;MAAEC,OAAO,EAAE,EAAE;MAAE7pD,MAAM,EAAE,GAAG;MAAEC,MAAM,EAAE;IAAG,CAAC,EACjG;MAAE5mC,IAAI,EAAE,wBAAwB;MAAEqN,KAAK,EAAE,EAAE;MAAEkjF,OAAO,EAAE,GAAG;MAAEC,OAAO,EAAE,EAAE;MAAE7pD,MAAM,EAAE,GAAG;MAAEC,MAAM,EAAE;IAAG,CAAC,EACjG;MAAE5mC,IAAI,EAAE,uBAAuB;MAAEqN,KAAK,EAAE,EAAE;MAAEkjF,OAAO,EAAE,GAAG;MAAEC,OAAO,EAAE,EAAE;MAAE7pD,MAAM,EAAE,GAAG;MAAEC,MAAM,EAAE;IAAG,CAAC,EAEhG;MAAE5mC,IAAI,EAAE,uBAAuB;MAAEqN,KAAK,EAAE,GAAG;MAAEkjF,OAAO,EAAE,GAAG;MAAEC,OAAO,EAAE,IAAI;MAAE7pD,MAAM,EAAE,GAAG;MAAEC,MAAM,EAAE,GAAG;MAAE6pD,MAAM,EAAE,CAAC;MAAEh+E,IAAI,EAAE;IAAG,CAAC,EACzH;MAAEzS,IAAI,EAAE,uBAAuB;MAAEqN,KAAK,EAAE,GAAG;MAAEkjF,OAAO,EAAE,GAAG;MAAEC,OAAO,EAAE,IAAI;MAAE7pD,MAAM,EAAE,KAAK;MAAEC,MAAM,EAAE,EAAE;MAAE6pD,MAAM,EAAE,CAAC;MAAEh+E,IAAI,EAAE,EAAE;MAAEi+E,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE;IAAE,CAAC,EACpJ;MAAE1wF,IAAI,EAAE,2BAA2B;MAAEqN,KAAK,EAAE,GAAG;MAAEkjF,OAAO,EAAE,GAAG;MAAEC,OAAO,EAAE,IAAI;MAAE7pD,MAAM,EAAE,GAAG;MAAEC,MAAM,EAAE,GAAG;MAAE6pD,MAAM,EAAE,CAAC;MAAEh+E,IAAI,EAAE;IAAG,CAAC,EAC7H;MAAEzS,IAAI,EAAE,iBAAiB;MAAEqN,KAAK,EAAE,GAAG;MAAEkjF,OAAO,EAAE,GAAG;MAAEC,OAAO,EAAE,IAAI;MAAE7pD,MAAM,EAAE,GAAG;MAAEC,MAAM,EAAE,EAAE;MAAE6pD,MAAM,EAAE,CAAC;MAAEh+E,IAAI,EAAE;IAAG,CAAC,CACjH;EACL,CAAC;EACD,IAAI,CAACk+E,WAAW,GAAG,UAAUL,UAAU,EAAE;IAErC,IAAI/nE,QAAQ,GAAGvwB,aAAa,CAACmB,QAAQ,IAAIm3F,UAAU,KAAG,IAAI,GAAGpoE,qBAAqB,GAAGvb,eAAe;IACpG,IAAInJ,OAAO,GAAG,IAAI;IAElB,IAAIxL,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,EAAE;MAEhD,IAAIP,CAAC,GAAG8jF,UAAU,KAAK,IAAI,GAAG,IAAI,GAAGt4F,aAAa,CAACotC,iBAAiB,CAAC,CAAC;MAEtE,IAAI,CAAC,CAAC54B,CAAC,EAAE;QACL,IAAIiS,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBmb,QAAQ,CAAClb,OAAO,CAACisB,IAAI,CAAC2T,KAAK,CAAC32B,CAAC,CAAC,CAAC;QAC/BhJ,OAAO,GAAGib,QAAQ,CAACjb,OAAO;MAC9B,CAAC,MACI;QACDA,OAAO,GAAG0kB,qBAAqB,CAAC0oE,gBAAgB,CAAC54F,aAAa,CAACwsC,OAAO,CAAC;MAC3E;IACJ,CAAC,MACI;MACDhhC,OAAO,GAAG+kB,QAAQ,CAACqoE,gBAAgB,CAAC54F,aAAa,CAACwsC,OAAO,CAAC;IAC9D;IAEAhhC,OAAO,GAAGA,OAAO,CAAC1H,IAAI,CAAC,UAAU+0F,OAAO,EAAE;MACtC,IAAIpyE,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAEzB,IAAIgtF,UAAU,KAAK,IAAI,IAAIt4F,aAAa,CAACmB,QAAQ,IAAInB,aAAa,CAACX,MAAM,KAAK,KAAK,IAAI,CAACwV,UAAU,CAACE,WAAW,EAAE;QAC5GJ,eAAe,CAACw4B,iBAAiB,CAACntC,aAAa,CAACwsC,OAAO,EAAEqsD,OAAO,CAAC70F,IAAI,CAAC;MAC1E;MAEA,IAAIhE,aAAa,CAACX,MAAM,KAAK,IAAI,EAAE;QAC/BW,aAAa,CAACmtC,iBAAiB,CAAC3V,IAAI,CAACC,SAAS,CAACohE,OAAO,CAAC,CAAC;MAC5D;MAEA,IAAIn5F,EAAE,GAAGkE,CAAC,CAAC,iBAAiB,GAAGi1F,OAAO,CAAC70F,IAAI,CAAC80F,QAAQ,GAAG,QAAQ,CAAC;MAEhE,IAAIC,EAAE,GAAGr5F,EAAE,CAACyR,IAAI,CAAC,oBAAoB,CAAC;MACtC,IAAI4nF,EAAE,CAAC7yF,MAAM,GAAG,CAAC,EAAE;QACf6yF,EAAE,CAAC77E,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;QACzB67E,EAAE,CAACx5E,IAAI,CAAC,EAAE,CAAC;MACf;MAGA,IAAIw5E,EAAE,GAAGr5F,EAAE,CAACyR,IAAI,CAAC,qDAAqD,CAAC;;MAEvE;AAChB;AACA;AACA;AACA;;MAGgB,IAAI4nF,EAAE,GAAGr5F,EAAE,CAACyR,IAAI,CAAC,6CAA6C,CAAC;;MAE/D;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;;MAIgB,IAAI4nF,EAAE,GAAGr5F,EAAE,CAACyR,IAAI,CAAC,oDAAoD,CAAC;;MAEtE;AAChB;AACA;AACA;AACA;AACA;AACA;;MAGgB0nF,OAAO,CAAC70F,IAAI,CAAC80F,QAAQ,GAAGp5F,EAAE,CAAC6f,IAAI,CAAC,CAAC;MAEjCkH,QAAQ,CAAClb,OAAO,CAACstF,OAAO,CAAC70F,IAAI,CAAC;MAC9B,OAAOyiB,QAAQ,CAACjb,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOA,OAAO;EAClB,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;;ACnGP5L,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,6BAA6B,EAC5D,CAAC,IAAI,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAE1G,UAAUle,EAAE,EAAET,aAAa,EAAEO,cAAc,EAAE4vB,eAAe,EAAEhwB,aAAa,EAAEG,QAAQ,EAAEmpB,KAAK,EAAEuR,SAAS,EAAE;EACrG,IAAI,CAACg+D,KAAK,GAAG55F,kBAAkB,CAAC65F,0BAA0B;EAC1D,IAAI,CAACC,SAAS,GAAG,IAAI,CAAC,CAAC;;EAEvB,IAAI,CAACC,eAAe,GAAG,CAAC,CAAC;EACzB,IAAI,CAACC,WAAW,GAAG,IAAI;EAEvB,IAAI,CAAC98E,GAAG,GAAGnc,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;EAC7C,IAAI,CAACqhD,sBAAsB,GAAG,GAAG;EAEjC,IAAI,CAACC,OAAO,GAAG,IAAI;EACnB,IAAI,CAACC,wBAAwB,GAAG,EAAE;EAClC,IAAI,CAACC,qBAAqB,GAAG,KAAK;EAElC,IAAI,CAACC,OAAO,GAAG,YAAY;IACvB,OAAOz5F,aAAa,CAACqqC,cAAc,GAAG,GAAG,GAAGrqC,aAAa,CAACuqC,cAAc;EAC5E,CAAC;EAED,IAAI,CAAC+Y,IAAI,GAAG,UAAUtV,KAAK,EAAE+nD,QAAQ,EAAE;IAAA,IAAAhwB,KAAA;IACnC,IAAI16D,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC0iC,KAAK,EAAE;MACR3iC,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B;IAEA,IAAI,CAAC2tF,eAAe,GAAG,IAAI,CAACO,kBAAkB,CAAC,8BAA8B,CAAC;IAE9E,IAAI,IAAI,CAACP,eAAe,IAAI,IAAI,EAC5B,IAAI,CAACA,eAAe,GAAG,CAAC,CAAC;IAE7B,IAAIpD,QAAQ,GAAG/1F,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;IAErDsqD,uBAAuB,GAAG35F,aAAa,CAAC4lC,QAAQ,GAC5C,6DAA6D;IAAG;IAChE,qDAAqD;IAEzD,IAAIxiB,IAAI,GAAG,IAAI;IACf,IAAIw2E,qBAAqB,GAAGh2F,CAAC,CAAC,wBAAwB,CAAC,CAACkF,GAAG,CAAC,CAAC;IAE7D,IAAI,CAAC8wF,qBAAqB,EAC1B;MACIvuF,QAAQ,CAACqb,MAAM,CAAC;QACZa,MAAM,EAAE,KAAK;QACboc,QAAQ,EAAE;UACNC,gBAAgB,EAAErjC,cAAc,CAACe,SAAS,CAAC,+BAA+B;QAC9E;MACJ,CAAC,CAAC;MACF,OAAO+J,QAAQ,CAACG,OAAO;IAC3B;IAEA,IAAG,CAACxL,aAAa,CAACqqC,cAAc,IAAI,CAACrqC,aAAa,CAACuqC,cAAc,EACjE;MACIl/B,QAAQ,CAACqb,MAAM,CAAC;QACZa,MAAM,EAAE,KAAK;QACboc,QAAQ,EAAE;UACNC,gBAAgB,EAAErjC,cAAc,CAACe,SAAS,CAAC,+FAA+F;QAC9I;MACJ,CAAC,CAAC;MACF,OAAO+J,QAAQ,CAACG,OAAO;IAC3B;IAEA2kB,eAAe,CAAC0pE,uBAAuB,CAACF,uBAAuB,EAAEC,qBAAqB,EAAE55F,aAAa,CAACqqC,cAAc,EAAErqC,aAAa,CAACuqC,cAAc,CAAC,CAC9IzmC,IAAI,CAAC,UAAC6/B,QAAQ,EAAK;MAEhBvgB,IAAI,CAAC+1E,eAAe,CAAC/1E,IAAI,CAACq2E,OAAO,CAAC,CAAC,CAAC,GAAG91D,QAAQ,CAAC3/B,IAAI,CAAC81F,MAAM;MAC3D/zB,KAAI,CAACg0B,eAAe,CAAC,8BAA8B,EAAE32E,IAAI,CAAC+1E,eAAe,CAAC;MAC1EpzB,KAAI,CAACg0B,eAAe,CAAC,QAAQ,EAAEp2D,QAAQ,CAAC3/B,IAAI,CAAC81F,MAAM,CAAC;MAEpDE,eAAe,GAAGh6F,aAAa,CAAC4lC,QAAQ,GACpC,4DAA4D;MAAG;MAC/D,oDAAoD;MAExD,IAAIvB,OAAO,GAAGrkC,aAAa,CAACqkC,OAAO;MACnC,IAAI41D,UAAU,GAAG76F,kBAAkB,CAACqjF,UAAU;MAC9C,IAAIyX,KAAK,GAAGl6F,aAAa,CAAC8rB,cAAc;MACxC,IAAIqa,WAAW,GAAGnmC,aAAa,CAACmmC,WAAW;MAE3ChW,eAAe,CAACgqE,uBAAuB,CAACH,eAAe,EAAEr2D,QAAQ,CAAC3/B,IAAI,CAAC81F,MAAM,EAAEz1D,OAAO,EAAE41D,UAAU,EAAEC,KAAK,EAAE/zD,WAAW,CAAC,CAClHriC,IAAI,CAAC,UAACqF,GAAG,EAAK;QAEX48D,KAAI,CAACg0B,eAAe,CAAC,OAAO,EAAE5wF,GAAG,CAACnF,IAAI,CAACo2F,KAAK,CAAC;QAC7C,IAAIC,oBAAoB,GAAGlxF,GAAG,CAACnF,IAAI,CAACs2F,aAAa,GAAG,GAAG;QACvDv0B,KAAI,CAACg0B,eAAe,CAAC,cAAc,EAAEx+D,IAAI,CAAC4gD,GAAG,CAAC,CAAC,GAAGke,oBAAoB,GAAG,IAAI,CAAC;QAE9Et0B,KAAI,CAACw0B,YAAY,CAAC,CAAC;QAEnBlvF,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAACo2F,KAAK,CAAC;MAEpC,CAAC,CAAC,SACI,CAAC,UAACjxE,KAAK,EAAK;QAEd,IAAIA,KAAK,CAAC0uB,MAAM,IAAI,GAAG,EACnBrf,YAAY,GAAGj4B,cAAc,CAACe,SAAS,CAAC,+FAA+F,CAAC,MAExIk3B,YAAY,GAAGpV,IAAI,CAACo3E,YAAY,CAACrxE,KAAK,CAACo8C,UAAU,CAAC;QAEtDl6D,QAAQ,CAACqb,MAAM,CAAC;UACZa,MAAM,EAAE,KAAK;UACboc,QAAQ,EAAE;YACNC,gBAAgB,EAAEpL;UACtB;QACJ,CAAC,CAAC;MAEN,CAAC,CAAC;IAEV,CAAC,CAAC,SACI,CAAC,UAACrP,KAAK,EAAK;MAEd,IAAIA,KAAK,CAAC0uB,MAAM,IAAI,GAAG,EACnBrf,YAAY,GAAGj4B,cAAc,CAACe,SAAS,CAAC,+FAA+F,CAAC,MAExIk3B,YAAY,GAAGpV,IAAI,CAACo3E,YAAY,CAACrxE,KAAK,CAACo8C,UAAU,CAAC;MAEtDl6D,QAAQ,CAACqb,MAAM,CAAC;QACZa,MAAM,EAAE,KAAK;QACboc,QAAQ,EAAE;UACNC,gBAAgB,EAAEpL;QACtB;MACJ,CAAC,CAAC;IAEN,CAAC,CAAC;IAEN,OAAOntB,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACivF,MAAM,GAAG,UAAU1E,QAAQ,EAAE;IAE9B,IAAI1qF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAACovF,gBAAgB,CAAC,eAAe,CAAC;IACtC,IAAI,CAACA,gBAAgB,CAAC,eAAe,CAAC;IACtC,IAAI,CAACA,gBAAgB,CAAC,OAAO,CAAC;IAC9B,IAAI,CAACA,gBAAgB,CAAC,QAAQ,CAAC;IAC/B,IAAI,CAACA,gBAAgB,CAAC,8BAA8B,CAAC;IAErD,IAAI,CAACC,WAAW,CAAC,CAAC;IAElBtvF,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC4tF,eAAe,CAAC,IAAI,CAACM,OAAO,CAAC,CAAC,CAAC,CAAC;IACtD,OAAOpuF,QAAQ,CAACG,OAAO;EAE3B,CAAC;EAED,IAAI,CAACovF,QAAQ,GAAG,YAAY;IAAA,IAAAp0B,MAAA;IAExB,IAAIn7D,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB0uF,eAAe,GAAGh6F,aAAa,CAAC4lC,QAAQ,GACpC,4DAA4D;IAAG;IAC/D,oDAAoD;IAExD,IAAIk0D,MAAM,GAAG,IAAI,CAACJ,kBAAkB,CAAC,QAAQ,CAAC;IAC9C,IAAIr1D,OAAO,GAAGrkC,aAAa,CAACqkC,OAAO;IACnC,IAAI41D,UAAU,GAAG76F,kBAAkB,CAACqjF,UAAU;IAC9C,IAAIyX,KAAK,GAAGl6F,aAAa,CAAC8rB,cAAc;IACxC,IAAIqa,WAAW,GAAGnmC,aAAa,CAACmmC,WAAW;IAE3ChW,eAAe,CAACgqE,uBAAuB,CAACH,eAAe,EAAEF,MAAM,EAAEz1D,OAAO,EAAE41D,UAAU,EAAEC,KAAK,EAAE/zD,WAAW,CAAC,CACpGriC,IAAI,CAAC,UAACqF,GAAG,EAAK;MAEXq9D,MAAI,CAACuzB,eAAe,CAAC,OAAO,EAAE5wF,GAAG,CAACnF,IAAI,CAACo2F,KAAK,CAAC;MAC7C,IAAIC,oBAAoB,GAAGlxF,GAAG,CAACnF,IAAI,CAACs2F,aAAa,GAAG,GAAG;MACvD9zB,MAAI,CAACuzB,eAAe,CAAC,cAAc,EAAEx+D,IAAI,CAAC4gD,GAAG,CAAC,CAAC,GAAGke,oBAAoB,GAAG,IAAI,CAAC;MAE9EhvF,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAACo2F,KAAK,CAAC;IAEpC,CAAC,CAAC,SACI,CAAC,UAACjxE,KAAK,EAAK;MACd,IAAI5H,SAAS,GAAG6B,IAAI,CAACo3E,YAAY,CAACrxE,KAAK,CAACo8C,UAAU,CAAC;MAEnDl6D,QAAQ,CAACqb,MAAM,CAAC;QACZa,MAAM,EAAE,KAAK;QACboc,QAAQ,EAAE;UACNC,gBAAgB,EAAEriB;QACtB;MACJ,CAAC,CAAC;IAEN,CAAC,CAAC;IACN,OAAOlW,QAAQ,CAACG,OAAO;EAE3B,CAAC;EAED,IAAI,CAACqvF,YAAY,GAAG,EAAE;EACtB,IAAI,CAACC,eAAe,GAAG,KAAK;EAC5B,IAAI,CAACC,WAAW,GAAG,KAAK;EACxB,IAAI,CAACC,kBAAkB,GAAG,YAAY;IAClC,IAAI53E,IAAI,GAAG,IAAI;IACf,IAAI,CAAC,IAAI,CAAC03E,eAAe,EAAE;MAEvB,IAAI,CAAC1B,WAAW,CAAC6B,sBAAsB,GAAG,uBAAuB;MACjE,IAAI,CAAC7B,WAAW,CAAC8B,mBAAmB,GAAG,IAAI,CAACL,YAAY;MACxD,IAAI,CAAC,IAAI,CAACE,WAAW,EAAE;QACnB,IAAI,CAAC3B,WAAW,CAAC+B,sBAAsB,GAAG,CAAC;UACvCzxF,IAAI,EAAEnJ,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC;UACxC+T,KAAK,EAAE;QACX,CAAC,CAAC;MACN,CAAC,MACI;QACD,IAAI,CAAC+jF,WAAW,CAAC+B,sBAAsB,GAAG,EAAE;MAChD;MAEA,IAAI,CAAC/B,WAAW,CAACgC,cAAc,GAAG,UAAUC,IAAI,EAAE;QAC9Cv2F,OAAO,CAACC,GAAG,CAAC,uBAAuB,CAAC;QACpCqe,IAAI,CAACk4E,wBAAwB,CAAC,CAAC;QAC/B,OAAO,IAAI;MACf,CAAC;MAEDh7F,QAAQ,CAAC,YAAY;QACjB,IAAI,CAACw6F,eAAe,GAAG,IAAI;QAC3B36F,aAAa,CAAC8E,UAAU,CAAC,kBAAkB,CAAC;MAChD,CAAC,CAAC;IACN;EACJ,CAAC;EAED,IAAI,CAACs2F,kBAAkB,GAAG,UAAUvtD,KAAK,EAAE;IACvC,IAAI,IAAI,CAAC8sD,eAAe,IAAI9sD,KAAK,EAAE;MAC/B1tC,QAAQ,CAAC,YAAY;QACjBH,aAAa,CAAC+L,WAAW,CAAC,kBAAkB,CAAC;QAC7C,IAAI,CAAC4uF,eAAe,GAAG,KAAK;MAChC,CAAC,CAAC;IAEN;EACJ,CAAC;EAED,IAAI,CAACU,YAAY,GAAG,KAAK;EACzB,IAAI,CAACC,YAAY,GAAG,IAAI;EACxB,IAAI,CAACC,YAAY,GAAG,IAAI;EAExB,IAAI,CAACn4D,WAAW,GAAG,UAAUl8B,OAAO,EAAE;IAClC,IAAI,CAAC0zF,WAAW,GAAG,KAAK;IACxB,IAAI33E,IAAI,GAAG,IAAI;IACf,IAAI,CAACo4E,YAAY,GAAG,KAAK;IACzB,IAAI,CAACV,eAAe,GAAG,KAAK;IAC5B,IAAIa,cAAc,GAAG,KAAK;IAC1B,IAAI,CAACnC,qBAAqB,GAAG,IAAI;IAEjC,IAAIzD,QAAQ,GAAG/1F,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;IAErD,IAAIusD,EAAE,GAAGn7F,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEnB,IAAIwuF,MAAM,GAAG,IAAI,CAACJ,kBAAkB,CAAC,QAAQ,CAAC;IAC9C,IAAIU,KAAK,GAAG,IAAI,CAACV,kBAAkB,CAAC,OAAO,CAAC;IAC5C,IAAItuF,EAAE,GAAG,IAAI,CAACkR,GAAG;IAEjB,IAAIw9E,MAAM,EAAE;MAER,IAAI+B,WAAW,GAAG,IAAI,CAACnC,kBAAkB,CAAC,cAAc,CAAC;MAEzD,IAAI,CAACU,KAAK,IAAIyB,WAAW,IAAItgE,IAAI,CAAC4gD,GAAG,CAAC,CAAC,EAAE;QAErCwf,cAAc,GAAG,IAAI;QACrBvwF,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;UACrB,OAAOsf,IAAI,CAACw3E,QAAQ,CAAC,CAAC,CAAC92F,IAAI,CAAC,YAAY;YACpCs2F,KAAK,GAAGh3E,IAAI,CAACs2E,kBAAkB,CAAC,OAAO,CAAC;UAC5C,CAAC,CAAC;QACN,CAAC,CAAC;MACN;IACJ,CAAC,MACI;MACDkC,EAAE,CAACl1E,MAAM,CAAC;QACN/L,OAAO,EAAEpa,cAAc,CAACe,SAAS,CAAC,oDAAoD;MAC1F,CAAC,CAAC;MACF,OAAOs6F,EAAE,CAACpwF,OAAO;IACrB;IAEA,IAAIuqF,QAAQ,CAAC+F,mCAAmC,KAAK,IAAI,IACrD,CAAC97F,aAAa,CAAComC,yCAAyC,EAAE;MAC1Dw1D,EAAE,CAACl1E,MAAM,CAAC;QACN/L,OAAO,EAAEpa,cAAc,CAACe,SAAS,CAAC,0MAA0M;MAChP,CAAC,CAAC;MACF,OAAOs6F,EAAE,CAACpwF,OAAO;IACrB;IAEA4X,IAAI,CAACy3E,YAAY,GAAGt6F,cAAc,CAACe,SAAS,CAAC,4BAA4B,CAAC;IAC1E8hB,IAAI,CAAC43E,kBAAkB,CAAC,CAAC;IAEzB,OAAO5vF,EAAE,CAACtH,IAAI,CAAC,YAAY;MAEvBi4F,qBAAqB,GAAG/7F,aAAa,CAAC4lC,QAAQ,GAC1C,0DAA0D;MAAG;MAC7D,kDAAkD;MAEtDg2D,EAAE,CAACrwF,OAAO,CAAC,IAAI,CAAC;MAEhB,IAAIF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAEzB,IAAI0wF,WAAW,GAAG,0BAA0B;MAE5C,IAAIC,kBAAkB,GAAGlG,QAAQ,CAAC+F,mCAAmC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;MACtF,IAAII,cAAc,GAAGnG,QAAQ,CAACoG,sCAAsC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;MAErF,IAAIC,aAAa,GAAG3yE,KAAK,CAACuE,OAAO,CAAC,CAAC;MAEnC5K,IAAI,CAAC22E,eAAe,CAAC,eAAe,EAAEqC,aAAa,CAAC;MAEpD,IAAI73E,MAAM,GAAGoV,IAAI,CAACkpB,KAAK,CAACx7C,OAAO,CAACkd,MAAM,GAAG,GAAG,CAAC,CAACuD,QAAQ,CAAC,CAAC;MAExDqI,eAAe,CAACksE,sBAAsB,CAACN,qBAAqB,EAAEK,aAAa,EAAEhC,KAAK,EAAE4B,WAAW,EAAEz3E,MAAM,EAAEld,OAAO,CAAC+wB,WAAW,EAAE8jE,cAAc,EAAED,kBAAkB,CAAC,CAC5Jn4F,IAAI,CAAC,UAACw4F,eAAe,EAAK;QAEvB,IAAIA,eAAe,CAACt4F,IAAI,CAAC2/B,QAAQ,CAACmjC,OAAO,EAAE;UAEvC1jD,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;UAC7B,IAAIgB,uBAAuB,GAAGD,eAAe,CAACt4F,IAAI,CAAC2/B,QAAQ;UAC3D44D,uBAAuB,CAAChsE,QAAQ,GAAG,6BAA6B;UAEhEnN,IAAI,CAAC22E,eAAe,CAAC,eAAe,EAAEqC,aAAa,CAAC;UAEpD,IAAI9/E,GAAG,GAAG8G,IAAI,CAAC9G,GAAG;UAElB,IAAI2/E,kBAAkB,IAAI,CAAC,EAAE;YACzB,IAAIK,eAAe,CAACt4F,IAAI,CAAC2/B,QAAQ,CAAC64D,QAAQ,CAACt2F,MAAM,GAAG,CAAC,IAAIo2F,eAAe,CAACt4F,IAAI,CAAC2/B,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,IAAIhsF,SAAS,IAAI6rF,eAAe,CAACt4F,IAAI,CAAC2/B,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,IAAI,IAAI,EAAE;cAC1LF,uBAAuB,CAACG,eAAe,GAAGJ,eAAe,CAACt4F,IAAI,CAAC2/B,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC30E,QAAQ,CAAC,CAAC;cAC1Gy0E,uBAAuB,CAACI,eAAe,GAAGL,eAAe,CAACt4F,IAAI,CAAC2/B,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC30E,QAAQ,CAAC,CAAC;YAC9G,CAAC,MAAM;cAEHxL,GAAG,GAAGA,GAAG,CAACxY,IAAI,CAAC,YAAY;gBACvB,OAAOsf,IAAI,CAACw5E,iBAAiB,CAAC,CAAC,CAAC94F,IAAI,CAAC,UAAU+4F,YAAY,EAAE;kBACzD,IAAIA,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,IAAIpsF,SAAS,IAAIosF,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,IAAI,IAAI,EAAE;oBAC/FN,uBAAuB,CAACG,eAAe,GAAGG,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,CAAC/0E,QAAQ,CAAC,CAAC;oBACvFy0E,uBAAuB,CAACI,eAAe,GAAGE,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,CAAC/0E,QAAQ,CAAC,CAAC;kBAC3F;gBACJ,CAAC,CAAC;cACN,CAAC,CAAC;YACN;UACJ;UAEA,OAAOxL,GAAG,CAACxY,IAAI,CAAC,YAAY;YAExB;YACA,IAAIw4F,eAAe,CAACt4F,IAAI,CAAC2/B,QAAQ,CAACm5D,YAAY,CAACzhF,IAAI,CAAC,CAAC,CAAChE,WAAW,CAAC,CAAC,IAAI,UAAU,IAAIhQ,OAAO,CAAC01F,IAAI,CAACzgE,OAAO,IAAI,CAAC,EAAE;cAC5G14B,CAAC,CAACO,SAAS,CAAC,CAAC;cACb;cACA,IAAIuxC,GAAG,GAAGn1C,cAAc,CAACe,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,GAAGnB,aAAa,CAAC60E,aAAa,CAAC3tE,OAAO,CAACkd,MAAM,EAAEnB,IAAI,CAAC4H,eAAe,CAAC,GAAG,GAAG,GAAGzqB,cAAc,CAACe,SAAS,CAAC,kEAAkE,CAAC;cAEzNnB,aAAa,CAACowE,cAAc,CAAC;gBAAEr8D,KAAK,EAAE,EAAE;gBAAEqiC,IAAI,EAAEb;cAAI,CAAC,EAAE,YAAY;gBAE/DrqC,QAAQ,CAACE,OAAO,CAAC;kBACbgc,MAAM,EAAE,IAAI;kBACZoc,QAAQ,EAAE;oBACNE,mBAAmB,EAAEu4D,aAAa;oBAClCY,mBAAmB,EAAET;kBACzB;gBACJ,CAAC,CAAC;cACN,CAAC,CAAC;YACN,CAAC,MACI;cAEDlxF,QAAQ,CAACE,OAAO,CAAC;gBACbgc,MAAM,EAAE,IAAI;gBACZoc,QAAQ,EAAE;kBACNE,mBAAmB,EAAEu4D,aAAa;kBAClCY,mBAAmB,EAAET;gBACzB;cACJ,CAAC,CAAC;YAEN;UACJ,CAAC,CAAC;QACN,CAAC,MACI;UAEDn5E,IAAI,CAAC22E,eAAe,CAAC,sBAAsB,EAAEx+D,IAAI,CAAC4gD,GAAG,CAAC,CAAC,GAAG/4D,IAAI,CAACi2E,sBAAsB,GAAG,IAAI,CAAC;UAC7F,OAAOj2E,IAAI,CAAC65E,aAAa,CAAC,CAAC,CAACn5F,IAAI,CAAC,UAAUm5F,aAAa,EAAE;YAEtD,IAAIA,aAAa,CAACt5D,QAAQ,CAACmjC,OAAO,EAAE;cAEhC1jD,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;cAC7B,IAAIgB,uBAAuB,GAAGU,aAAa,CAACt5D,QAAQ;cACpD44D,uBAAuB,CAAChsE,QAAQ,GAAG,6BAA6B;cAEhE,IAAIjU,GAAG,GAAG8G,IAAI,CAAC9G,GAAG;cAElB,IAAI2/E,kBAAkB,IAAI,CAAC,EAAE;gBACzB,IAAIgB,aAAa,CAACt5D,QAAQ,CAAC64D,QAAQ,CAACt2F,MAAM,GAAG,CAAC,IAAI+2F,aAAa,CAACt5D,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,IAAIhsF,SAAS,IAAIwsF,aAAa,CAACt5D,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,IAAI,IAAI,EAAE;kBACrKF,uBAAuB,CAACG,eAAe,GAAGO,aAAa,CAACt5D,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC30E,QAAQ,CAAC,CAAC;kBACnGy0E,uBAAuB,CAACI,eAAe,GAAGM,aAAa,CAACt5D,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC30E,QAAQ,CAAC,CAAC;gBACvG,CAAC,MAAM;kBACHxL,GAAG,GAAGA,GAAG,CAACxY,IAAI,CAAC,YAAY;oBACvB,OAAOsf,IAAI,CAACw5E,iBAAiB,CAAC,CAAC,CAAC94F,IAAI,CAAC,UAAU+4F,YAAY,EAAE;sBACzD,IAAIA,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,IAAIpsF,SAAS,IAAIosF,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,IAAI,IAAI,EAAE;wBAC/FN,uBAAuB,CAACG,eAAe,GAAGG,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,CAAC/0E,QAAQ,CAAC,CAAC;wBACvFy0E,uBAAuB,CAACI,eAAe,GAAGE,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,CAAC/0E,QAAQ,CAAC,CAAC;sBAC3F;oBACJ,CAAC,CAAC;kBACN,CAAC,CAAC;gBACN;cACJ;cAEA,OAAOxL,GAAG,CAACxY,IAAI,CAAC,YAAY;gBAExBuH,QAAQ,CAACE,OAAO,CAAC;kBACbgc,MAAM,EAAE,IAAI;kBACZoc,QAAQ,EAAE;oBACNE,mBAAmB,EAAEu4D,aAAa;oBAClCY,mBAAmB,EAAET;kBACzB;gBACJ,CAAC,CAAC;cAEN,CAAC,CAAC;YAEN,CAAC,MACI;cACD,IAAIh7E,SAAS,GAAG6B,IAAI,CAACo3E,YAAY,CAACyC,aAAa,CAAC13B,UAAU,CAAC;cAE3DniD,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;cAC7BlwF,QAAQ,CAACqb,MAAM,CAAC;gBACZa,MAAM,EAAE,KAAK;gBACboc,QAAQ,EAAE;kBACNC,gBAAgB,EAAEriB;gBACtB;cACJ,CAAC,CAAC;YAEN;UAEJ,CAAC,CAAC,SAAM,CAAC,UAACtd,GAAG,EAAK;YACd,IAAIsd,SAAS,GAAG6B,IAAI,CAACo3E,YAAY,CAACv2F,GAAG,CAAC2/B,gBAAgB,CAAC;YAEvDxgB,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;YAC7BlwF,QAAQ,CAACqb,MAAM,CAAC;cACZa,MAAM,EAAE,KAAK;cACboc,QAAQ,EAAE;gBACNC,gBAAgB,EAAEriB;cACtB;YACJ,CAAC,CAAC;UAEN,CAAC,CAAC;QACN;MACJ,CAAC,CAAC,SACI,CAAC,UAAC4H,KAAK,EAAK;QAEd,IAAIA,KAAK,CAAC0uB,MAAM,IAAI,GAAG,IAAI8jD,cAAc,IAAI,KAAK,EAAE;UAEhDv4E,IAAI,CAAC22E,eAAe,CAAC,cAAc,EAAEx+D,IAAI,CAAC4gD,GAAG,CAAC,CAAC,CAAC;UAChD,OAAO/4D,IAAI,CAACmgB,WAAW,CAACl8B,OAAO,CAAC,CAACvD,IAAI,CAAC,UAAUqF,GAAG,EAAE;YAEjDkC,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;UAEzB,CAAC,CAAC,SAAM,CAAC,UAAClF,GAAG,EAAK;YACd,IAAIsd,SAAS,GAAG6B,IAAI,CAACo3E,YAAY,CAACv2F,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,CAAC;YAEhEv4B,QAAQ,CAACqb,MAAM,CAAC;cACZa,MAAM,EAAE,KAAK;cACboc,QAAQ,EAAE;gBACNC,gBAAgB,EAAEriB;cACtB;YACJ,CAAC,CAAC;UAEN,CAAC,CAAC;QACN,CAAC,MACI,IAAI4H,KAAK,CAAC0uB,MAAM,IAAI,GAAG,IAAK1uB,KAAK,CAAC0uB,MAAM,IAAI,GAAG,IAAI1uB,KAAK,CAAC0uB,MAAM,IAAI,GAAI,EAAE;UAE1Ez0B,IAAI,CAAC22E,eAAe,CAAC,sBAAsB,EAAEx+D,IAAI,CAAC4gD,GAAG,CAAC,CAAC,GAAG/4D,IAAI,CAACi2E,sBAAsB,GAAG,IAAI,CAAC;UAC7F,OAAOj2E,IAAI,CAAC65E,aAAa,CAAC,CAAC,CAACn5F,IAAI,CAAC,UAAUw4F,eAAe,EAAE;YAExDl5E,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;YAC7B,IAAIgB,uBAAuB,GAAGD,eAAe,CAAC34D,QAAQ;YACtD44D,uBAAuB,CAAChsE,QAAQ,GAAG,6BAA6B;YAEhE,IAAI+rE,eAAe,CAAC34D,QAAQ,CAACkU,MAAM,IAAI,GAAG,EAAE;cAExC,IAAIv7B,GAAG,GAAG8G,IAAI,CAAC9G,GAAG;cAElB,IAAI2/E,kBAAkB,IAAI,CAAC,EAAE;gBACzB,IAAIK,eAAe,CAAC34D,QAAQ,CAAC64D,QAAQ,CAACt2F,MAAM,GAAG,CAAC,IAAIo2F,eAAe,CAAC34D,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,IAAIhsF,SAAS,IAAI6rF,eAAe,CAAC34D,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,IAAI,IAAI,EAAE;kBAC3KF,uBAAuB,CAACG,eAAe,GAAGJ,eAAe,CAAC34D,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC30E,QAAQ,CAAC,CAAC;kBACrGy0E,uBAAuB,CAACI,eAAe,GAAGL,eAAe,CAAC34D,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC30E,QAAQ,CAAC,CAAC;gBACzG,CAAC,MAAM;kBACHxL,GAAG,GAAGA,GAAG,CAACxY,IAAI,CAAC,YAAY;oBACvB,OAAOsf,IAAI,CAACw5E,iBAAiB,CAAC,CAAC,CAAC94F,IAAI,CAAC,UAAU+4F,YAAY,EAAE;sBACzD,IAAIA,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,IAAIpsF,SAAS,IAAIosF,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,IAAI,IAAI,EAAE;wBAC/FN,uBAAuB,CAACG,eAAe,GAAGG,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,CAAC/0E,QAAQ,CAAC,CAAC;wBACvFy0E,uBAAuB,CAACI,eAAe,GAAGE,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,CAAC/0E,QAAQ,CAAC,CAAC;sBAC3F;oBACJ,CAAC,CAAC;kBACN,CAAC,CAAC;gBACN;cACJ;cAEA,OAAOxL,GAAG,CAACxY,IAAI,CAAC,YAAY;gBAExBuH,QAAQ,CAACE,OAAO,CAAC;kBACbgc,MAAM,EAAE,IAAI;kBACZoc,QAAQ,EAAE;oBACNE,mBAAmB,EAAEu4D,aAAa;oBAClCY,mBAAmB,EAAET;kBACzB;gBACJ,CAAC,CAAC;cACN,CAAC,CAAC;YAEN,CAAC,MACI;cAED,IAAIh7E,SAAS,GAAG6B,IAAI,CAACo3E,YAAY,CAACrxE,KAAK,CAACo8C,UAAU,CAAC;cAEnDl6D,QAAQ,CAACqb,MAAM,CAAC;gBACZa,MAAM,EAAE,KAAK;gBACboc,QAAQ,EAAE;kBACNC,gBAAgB,EAAEriB;gBACtB;cACJ,CAAC,CAAC;YAEN;UAEJ,CAAC,CAAC,SAAM,CAAC,UAACtd,GAAG,EAAK;YAEd,IAAIsd,SAAS,GAAG6B,IAAI,CAACo3E,YAAY,CAACv2F,GAAG,CAAC2/B,gBAAgB,CAAC;YAEvDxgB,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;YAC7BlwF,QAAQ,CAACqb,MAAM,CAAC;cACZa,MAAM,EAAE,KAAK;cACboc,QAAQ,EAAE;gBACNC,gBAAgB,EAAEriB;cACtB;YACJ,CAAC,CAAC;UAEN,CAAC,CAAC;QACN,CAAC,MACI;UAED,IAAIA,SAAS,GAAG6B,IAAI,CAACo3E,YAAY,CAACrxE,KAAK,CAACo8C,UAAU,CAAC;UAEnDniD,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;UAC7BlwF,QAAQ,CAACqb,MAAM,CAAC;YACZa,MAAM,EAAE,KAAK;YACboc,QAAQ,EAAE;cACNC,gBAAgB,EAAEriB,SAAS,IAAI9Q,SAAS,GAAG0Y,KAAK,CAACwa,QAAQ,CAACC,gBAAgB,GAAGriB;YACjF;UACJ,CAAC,CAAC;QAEN;MAEJ,CAAC,CAAC;MAEN,OAAOlW,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAAC02B,MAAM,GAAG,UAAUxiC,EAAE,EAAEw9F,SAAS,EAAE71F,OAAO,EAAE;IAE5C,IAAI,CAAC0zF,WAAW,GAAG,KAAK;IACxB,IAAI33E,IAAI,GAAG,IAAI;IACf,IAAI,CAACo4E,YAAY,GAAG,KAAK;IACzB,IAAI,CAACV,eAAe,GAAG,KAAK;IAC5B,IAAIa,cAAc,GAAG,KAAK;IAC1B,IAAI,CAACnC,qBAAqB,GAAG,KAAK;IAElC,IAAIzD,QAAQ,GAAG/1F,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;IAErD,IAAIusD,EAAE,GAAGn7F,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEnB,IAAIwuF,MAAM,GAAG12E,IAAI,CAACs2E,kBAAkB,CAAC,QAAQ,CAAC;IAC9C,IAAIU,KAAK,GAAGh3E,IAAI,CAACs2E,kBAAkB,CAAC,OAAO,CAAC;IAC5C,IAAItuF,EAAE,GAAGgY,IAAI,CAAC9G,GAAG;IAEjB,IAAIw9E,MAAM,EAAE;MAER,IAAI+B,WAAW,GAAGz4E,IAAI,CAACs2E,kBAAkB,CAAC,cAAc,CAAC;MAEzD,IAAI,CAACU,KAAK,IAAIyB,WAAW,IAAItgE,IAAI,CAAC4gD,GAAG,CAAC,CAAC,EAAE;QAErCwf,cAAc,GAAG,IAAI;QACrBvwF,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;UACrB,OAAOsf,IAAI,CAACw3E,QAAQ,CAAC,CAAC,CAAC92F,IAAI,CAAC,YAAY;YACpCs2F,KAAK,GAAGh3E,IAAI,CAACs2E,kBAAkB,CAAC,OAAO,CAAC;UAC5C,CAAC,CAAC;QACN,CAAC,CAAC;MACN;IACJ,CAAC,MACI;MACDkC,EAAE,CAACl1E,MAAM,CAAC;QACN/L,OAAO,EAAEpa,cAAc,CAACe,SAAS,CAAC,uGAAuG;MAC7I,CAAC,CAAC;MACF,OAAOs6F,EAAE,CAACpwF,OAAO;IACrB;IAEA,IAAIuqF,QAAQ,CAAC+F,mCAAmC,KAAK,IAAI,IACrD,CAAC97F,aAAa,CAAComC,yCAAyC,EAAE;MAC1Dw1D,EAAE,CAACl1E,MAAM,CAAC;QACN/L,OAAO,EAAEpa,cAAc,CAACe,SAAS,CAAC,0MAA0M;MAChP,CAAC,CAAC;MACF,OAAOs6F,EAAE,CAACpwF,OAAO;IACrB;IAEA4X,IAAI,CAACy3E,YAAY,GAAGt6F,cAAc,CAACe,SAAS,CAAC,4BAA4B,CAAC;IAC1E8hB,IAAI,CAAC43E,kBAAkB,CAAC,CAAC;IAEzB,OAAO5vF,EAAE,CAACtH,IAAI,CAAC,YAAY;MAEvBi4F,qBAAqB,GAAG/7F,aAAa,CAAC4lC,QAAQ,GAC1C,0DAA0D;MAAG;MAC7D,kDAAkD;MAEtDg2D,EAAE,CAACrwF,OAAO,CAAC,IAAI,CAAC;MAEhB,IAAIF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAEzB,IAAI0wF,WAAW,GAAG,0BAA0B;MAE5C,IAAIC,kBAAkB,GAAGlG,QAAQ,CAAC+F,mCAAmC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;MACtF,IAAII,cAAc,GAAGnG,QAAQ,CAACoG,sCAAsC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;MAErF,IAAIgB,GAAG,GAAGz9F,EAAE,CAACs9F,mBAAmB,IAAIt9F,EAAE,CAACs9F,mBAAmB,CAACI,oBAAoB,IAAI19F,EAAE,CAACs9F,mBAAmB,CAACI,oBAAoB,CAACC,GAAG,GAAG39F,EAAE,CAACs9F,mBAAmB,CAACI,oBAAoB,CAACC,GAAG,GAAG39F,EAAE,CAACs9F,mBAAmB,IAAIt9F,EAAE,CAACs9F,mBAAmB,CAACM,MAAM,GAAG59F,EAAE,CAACs9F,mBAAmB,CAACM,MAAM,CAACjiF,IAAI,CAAC,CAAC,GAAGhU,OAAO,CAAC+wB,WAAW;MAE3S,IAAIgkE,aAAa,GAAG3yE,KAAK,CAACuE,OAAO,CAAC,CAAC;MAEnC5K,IAAI,CAAC22E,eAAe,CAAC,eAAe,EAAEqC,aAAa,CAAC;MAEpDjsE,eAAe,CAACotE,4BAA4B,CAACxB,qBAAqB,EAAEK,aAAa,EAAEhC,KAAK,EAAE4B,WAAW,EAAEriE,IAAI,CAACkpB,KAAK,CAACq6C,SAAS,GAAG,GAAG,CAAC,EAAE71F,OAAO,CAAC+wB,WAAW,EAAE8jE,cAAc,EAAED,kBAAkB,EAAEkB,GAAG,CAAC,CAC5Lr5F,IAAI,CAAC,UAACw4F,eAAe,EAAK;QAEvB,IAAIA,eAAe,CAACt4F,IAAI,CAAC2/B,QAAQ,CAACmjC,OAAO,EAAE;UAEvC1jD,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;UAC7B,IAAIgB,uBAAuB,GAAGD,eAAe,CAACt4F,IAAI,CAAC2/B,QAAQ;UAC3D44D,uBAAuB,CAAChsE,QAAQ,GAAG,6BAA6B;UAEhE,IAAIjU,GAAG,GAAG8G,IAAI,CAAC9G,GAAG;UAElB,IAAI2/E,kBAAkB,IAAI,CAAC,EAAE;YACzB,IAAIK,eAAe,CAACt4F,IAAI,CAAC2/B,QAAQ,CAAC64D,QAAQ,CAACt2F,MAAM,GAAG,CAAC,IAAIo2F,eAAe,CAACt4F,IAAI,CAAC2/B,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,IAAIhsF,SAAS,IAAI6rF,eAAe,CAACt4F,IAAI,CAAC2/B,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,IAAI,IAAI,EAAE;cAC1LF,uBAAuB,CAACG,eAAe,GAAGJ,eAAe,CAACt4F,IAAI,CAAC2/B,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC30E,QAAQ,CAAC,CAAC;cAC1Gy0E,uBAAuB,CAACI,eAAe,GAAGL,eAAe,CAACt4F,IAAI,CAAC2/B,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC30E,QAAQ,CAAC,CAAC;YAC9G,CAAC,MAAM;cACHxL,GAAG,GAAGA,GAAG,CAACxY,IAAI,CAAC,YAAY;gBACvB,OAAOsf,IAAI,CAACw5E,iBAAiB,CAAC,CAAC,CAAC94F,IAAI,CAAC,UAAU+4F,YAAY,EAAE;kBACzD,IAAIA,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,IAAIpsF,SAAS,IAAIosF,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,IAAI,IAAI,EAAE;oBAC/FN,uBAAuB,CAACG,eAAe,GAAGG,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,CAAC/0E,QAAQ,CAAC,CAAC;oBACvFy0E,uBAAuB,CAACI,eAAe,GAAGE,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,CAAC/0E,QAAQ,CAAC,CAAC;kBAC3F;gBACJ,CAAC,CAAC;cACN,CAAC,CAAC;YACN;UACJ;UAEA,OAAOxL,GAAG,CAACxY,IAAI,CAAC,YAAY;YAExBuH,QAAQ,CAACE,OAAO,CAAC;cACbgc,MAAM,EAAE,IAAI;cACZhD,MAAM,EAAE24E,SAAS;cACjBr5D,mBAAmB,EAAEu4D,aAAa;cAClCY,mBAAmB,EAAET;YACzB,CAAC,CAAC;UACN,CAAC,CAAC;QAEN,CAAC,MACI;UAEDn5E,IAAI,CAAC22E,eAAe,CAAC,sBAAsB,EAAEx+D,IAAI,CAAC4gD,GAAG,CAAC,CAAC,GAAG/4D,IAAI,CAACi2E,sBAAsB,GAAG,IAAI,CAAC;UAC7F,OAAOj2E,IAAI,CAAC65E,aAAa,CAAC,CAAC,CAACn5F,IAAI,CAAC,UAAUm5F,aAAa,EAAE;YAEtD,IAAIA,aAAa,CAACt5D,QAAQ,CAACmjC,OAAO,EAAE;cAEhC1jD,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;cAC7B,IAAIgB,uBAAuB,GAAGU,aAAa,CAACt5D,QAAQ;cACpD44D,uBAAuB,CAAChsE,QAAQ,GAAG,6BAA6B;cAEhE,IAAIjU,GAAG,GAAG8G,IAAI,CAAC9G,GAAG;cAElB,IAAI2/E,kBAAkB,IAAI,CAAC,EAAE;gBACzB,IAAIgB,aAAa,CAACt5D,QAAQ,CAAC64D,QAAQ,CAACt2F,MAAM,GAAG,CAAC,IAAI+2F,aAAa,CAACt5D,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,IAAIhsF,SAAS,IAAIwsF,aAAa,CAACt5D,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,IAAI,IAAI,EAAE;kBACrKF,uBAAuB,CAACG,eAAe,GAAGO,aAAa,CAACt5D,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC30E,QAAQ,CAAC,CAAC;kBACnGy0E,uBAAuB,CAACI,eAAe,GAAGM,aAAa,CAACt5D,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC30E,QAAQ,CAAC,CAAC;gBACvG,CAAC,MAAM;kBACHxL,GAAG,GAAGA,GAAG,CAACxY,IAAI,CAAC,YAAY;oBACvB,OAAOsf,IAAI,CAACw5E,iBAAiB,CAAC,CAAC,CAAC94F,IAAI,CAAC,UAAU+4F,YAAY,EAAE;sBACzD,IAAIA,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,IAAIpsF,SAAS,IAAIosF,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,IAAI,IAAI,EAAE;wBAC/FN,uBAAuB,CAACG,eAAe,GAAGG,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,CAAC/0E,QAAQ,CAAC,CAAC;wBACvFy0E,uBAAuB,CAACI,eAAe,GAAGE,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,CAAC/0E,QAAQ,CAAC,CAAC;sBAC3F;oBACJ,CAAC,CAAC;kBACN,CAAC,CAAC;gBACN;cACJ;cAEA,OAAOxL,GAAG,CAACxY,IAAI,CAAC,YAAY;gBAExBuH,QAAQ,CAACE,OAAO,CAAC;kBACbgc,MAAM,EAAE,IAAI;kBACZhD,MAAM,EAAE24E,SAAS;kBACjBr5D,mBAAmB,EAAEu4D,aAAa;kBAClCY,mBAAmB,EAAET;gBACzB,CAAC,CAAC;cAEN,CAAC,CAAC;YAEN,CAAC,MACI;cAED,IAAIh7E,SAAS,GAAG6B,IAAI,CAACo3E,YAAY,CAACyC,aAAa,CAAC13B,UAAU,CAAC;cAE3DniD,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;cAC7BlwF,QAAQ,CAACqb,MAAM,CAAC;gBACZa,MAAM,EAAE,KAAK;gBACboc,QAAQ,EAAE;kBACNC,gBAAgB,EAAEriB;gBACtB;cACJ,CAAC,CAAC;YAEN;UAEJ,CAAC,CAAC,SAAM,CAAC,UAACtd,GAAG,EAAK;YAEd,IAAIsd,SAAS,GAAG6B,IAAI,CAACo3E,YAAY,CAACv2F,GAAG,CAAC2/B,gBAAgB,CAAC;YAEvDxgB,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;YAC7BlwF,QAAQ,CAACqb,MAAM,CAAC;cACZa,MAAM,EAAE,KAAK;cACboc,QAAQ,EAAE;gBACNC,gBAAgB,EAAEriB;cACtB;YACJ,CAAC,CAAC;UAEN,CAAC,CAAC;QACN;MAEJ,CAAC,CAAC,SACI,CAAC,UAAC4H,KAAK,EAAK;QAEd,IAAIA,KAAK,CAAC0uB,MAAM,IAAI,GAAG,IAAI8jD,cAAc,IAAI,KAAK,EAAE;UAEhDv4E,IAAI,CAAC22E,eAAe,CAAC,cAAc,EAAEx+D,IAAI,CAAC4gD,GAAG,CAAC,CAAC,CAAC;UAChD,OAAO/4D,IAAI,CAAC8e,MAAM,CAACxiC,EAAE,EAAEw9F,SAAS,EAAE71F,OAAO,CAAC,CAACvD,IAAI,CAAC,UAAUqF,GAAG,EAAE;YAE3DkC,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;UAEzB,CAAC,CAAC,SAAM,CAAC,UAAClF,GAAG,EAAK;YAEd,IAAIsd,SAAS,GAAG6B,IAAI,CAACo3E,YAAY,CAACv2F,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,CAAC;YAEhEv4B,QAAQ,CAACqb,MAAM,CAAC;cACZa,MAAM,EAAE,KAAK;cACboc,QAAQ,EAAE;gBACNC,gBAAgB,EAAEriB;cACtB;YACJ,CAAC,CAAC;UAEN,CAAC,CAAC;QACN,CAAC,MACI,IAAI4H,KAAK,CAAC0uB,MAAM,IAAI,GAAG,IAAK1uB,KAAK,CAAC0uB,MAAM,IAAI,GAAG,IAAI1uB,KAAK,CAAC0uB,MAAM,IAAI,GAAI,EAAE;UAE1Ez0B,IAAI,CAAC22E,eAAe,CAAC,sBAAsB,EAAEx+D,IAAI,CAAC4gD,GAAG,CAAC,CAAC,GAAG/4D,IAAI,CAACi2E,sBAAsB,GAAG,IAAI,CAAC;UAC7F,OAAOj2E,IAAI,CAAC65E,aAAa,CAAC,CAAC,CAACn5F,IAAI,CAAC,UAAUw4F,eAAe,EAAE;YAExDl5E,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;YAE7B,IAAIgB,uBAAuB,GAAGD,eAAe,CAAC34D,QAAQ;YACtD44D,uBAAuB,CAAChsE,QAAQ,GAAG,6BAA6B;YAEhE,IAAI+rE,eAAe,CAAC34D,QAAQ,CAACkU,MAAM,IAAI,GAAG,EAAE;cAExC,IAAIv7B,GAAG,GAAG8G,IAAI,CAAC9G,GAAG;cAElB,IAAI2/E,kBAAkB,IAAI,CAAC,EAAE;gBACzB,IAAIK,eAAe,CAAC34D,QAAQ,CAAC64D,QAAQ,CAACt2F,MAAM,GAAG,CAAC,IAAIo2F,eAAe,CAAC34D,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,IAAIhsF,SAAS,IAAI6rF,eAAe,CAAC34D,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,IAAI,IAAI,EAAE;kBAC3KF,uBAAuB,CAACG,eAAe,GAAGJ,eAAe,CAAC34D,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC30E,QAAQ,CAAC,CAAC;kBACrGy0E,uBAAuB,CAACI,eAAe,GAAGL,eAAe,CAAC34D,QAAQ,CAAC64D,QAAQ,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC30E,QAAQ,CAAC,CAAC;gBACzG,CAAC,MAAM;kBACHxL,GAAG,GAAGA,GAAG,CAACxY,IAAI,CAAC,YAAY;oBACvB,OAAOsf,IAAI,CAACw5E,iBAAiB,CAAC,CAAC,CAAC94F,IAAI,CAAC,UAAU+4F,YAAY,EAAE;sBACzD,IAAIA,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,IAAIpsF,SAAS,IAAIosF,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,IAAI,IAAI,EAAE;wBAC/FN,uBAAuB,CAACG,eAAe,GAAGG,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,CAAC/0E,QAAQ,CAAC,CAAC;wBACvFy0E,uBAAuB,CAACI,eAAe,GAAGE,YAAY,CAACl5D,QAAQ,CAACk5D,YAAY,CAAC/0E,QAAQ,CAAC,CAAC;sBAC3F;oBACJ,CAAC,CAAC;kBACN,CAAC,CAAC;gBACN;cACJ;cAEA,OAAOxL,GAAG,CAACxY,IAAI,CAAC,YAAY;gBAExBuH,QAAQ,CAACE,OAAO,CAAC;kBACbgc,MAAM,EAAE,IAAI;kBACZoc,QAAQ,EAAE;oBACNE,mBAAmB,EAAEu4D,aAAa;oBAClCY,mBAAmB,EAAET;kBACzB;gBACJ,CAAC,CAAC;cACN,CAAC,CAAC;YAEN,CAAC,MACI;cAED,IAAIh7E,SAAS,GAAG6B,IAAI,CAACo3E,YAAY,CAACrxE,KAAK,CAACo8C,UAAU,CAAC;cAEnDl6D,QAAQ,CAACqb,MAAM,CAAC;gBACZa,MAAM,EAAE,KAAK;gBACboc,QAAQ,EAAE;kBACNC,gBAAgB,EAAEriB;gBACtB;cACJ,CAAC,CAAC;YAEN;UAEJ,CAAC,CAAC,SAAM,CAAC,UAACtd,GAAG,EAAK;YAEd,IAAIsd,SAAS,GAAG6B,IAAI,CAACo3E,YAAY,CAACv2F,GAAG,CAAC2/B,gBAAgB,CAAC;YAEvDxgB,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;YAC7BlwF,QAAQ,CAACqb,MAAM,CAAC;cACZa,MAAM,EAAE,KAAK;cACboc,QAAQ,EAAE;gBACNC,gBAAgB,EAAEriB;cACtB;YACJ,CAAC,CAAC;UAEN,CAAC,CAAC;QACN,CAAC,MACI;UAED,IAAIA,SAAS,GAAG6B,IAAI,CAACo3E,YAAY,CAACrxE,KAAK,CAACo8C,UAAU,CAAC;UAEnDniD,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;UAC7BlwF,QAAQ,CAACqb,MAAM,CAAC;YACZa,MAAM,EAAE,KAAK;YACboc,QAAQ,EAAE;cACNC,gBAAgB,EAAEriB,SAAS,IAAI9Q,SAAS,GAAG0Y,KAAK,CAACwa,QAAQ,CAACC,gBAAgB,GAAGriB;YACjF;UACJ,CAAC,CAAC;QAEN;MAEJ,CAAC,CAAC;MAEN,OAAOlW,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;EAEN,CAAC;EAED,IAAI,CAAC8vF,wBAAwB,GAAG,YAAY;IAExC,IAAIM,EAAE,GAAGn7F,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACnB,IAAI8X,IAAI,GAAG,IAAI;IACf,IAAIu4E,cAAc,GAAG,KAAK;IAE1B,IAAI7B,MAAM,GAAG12E,IAAI,CAACs2E,kBAAkB,CAAC,QAAQ,CAAC;IAC9C,IAAIU,KAAK,GAAGh3E,IAAI,CAACs2E,kBAAkB,CAAC,OAAO,CAAC;IAC5C,IAAItuF,EAAE,GAAGgY,IAAI,CAAC9G,GAAG;IAEjB,IAAIw9E,MAAM,EAAE;MAER,IAAI+B,WAAW,GAAGz4E,IAAI,CAACs2E,kBAAkB,CAAC,cAAc,CAAC;MAEzD,IAAI,CAACU,KAAK,IAAIyB,WAAW,IAAItgE,IAAI,CAAC4gD,GAAG,CAAC,CAAC,EAAE;QAErCwf,cAAc,GAAG,IAAI;QACrBvwF,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;UACrB,OAAOsf,IAAI,CAACw3E,QAAQ,CAAC,CAAC,CAAC92F,IAAI,CAAC,YAAY;YACpCs2F,KAAK,GAAGh3E,IAAI,CAACs2E,kBAAkB,CAAC,OAAO,CAAC;UAC5C,CAAC,CAAC;QACN,CAAC,CAAC;MACN;IACJ,CAAC,MACI;MACDkC,EAAE,CAACl1E,MAAM,CAAC;QACN/L,OAAO,EAAEpa,cAAc,CAACe,SAAS,CAAC,oDAAoD;MAC1F,CAAC,CAAC;MACF,OAAOs6F,EAAE,CAACpwF,OAAO;IACrB;IAEA4X,IAAI,CAACo6E,oBAAoB,GAAG,EAAE;IAC9Bp6E,IAAI,CAAC83E,mBAAmB,GAAG36F,cAAc,CAACe,SAAS,CAAC,2BAA2B,CAAC;IAEhF,OAAO8J,EAAE,CAACtH,IAAI,CAAC,YAAY;MAEvBi4F,qBAAqB,GAAG/7F,aAAa,CAAC4lC,QAAQ,GAC1C,0DAA0D;MAAG;MAC7D,kDAAkD;MAEtDg2D,EAAE,CAACrwF,OAAO,CAAC,IAAI,CAAC;MAEhB,IAAIkyF,YAAY,GAAG7B,EAAE,CAACpwF,OAAO;MAE7B,IAAIH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAEzB,IAAI0wF,WAAW,GAAG,sBAAsB;MAExC,IAAII,aAAa,GAAGh5E,IAAI,CAACs2E,kBAAkB,CAAC,eAAe,CAAC;MAE5DvpE,eAAe,CAACutE,mCAAmC,CAAC3B,qBAAqB,EAAEK,aAAa,EAAEhC,KAAK,EAAE4B,WAAW,CAAC,CACxGl4F,IAAI,CAAC,UAACw4F,eAAe,EAAK;QAEvB,IAAIA,eAAe,CAACzkD,MAAM,GAAG,GAAG,EAAE;UAE9BxsC,QAAQ,CAACE,OAAO,CAAC;YACbgc,MAAM,EAAE,IAAI;YACZoc,QAAQ,EAAE;cACNq5D,mBAAmB,EAAEV;YACzB;UACJ,CAAC,CAAC;QAEN,CAAC,MACI;UAED,IAAIQ,YAAY,GAAG15E,IAAI,CAACo3E,YAAY,CAAC8B,eAAe,CAACt4F,IAAI,CAAC2/B,QAAQ,CAACm5D,YAAY,CAAC;UAEhF,IAAI3zF,GAAG,GAAG;YACNoe,MAAM,EAAE,KAAK;YACboc,QAAQ,EAAE;cACNC,gBAAgB,EAAEk5D;YACtB;UACJ,CAAC;UAEDzxF,QAAQ,CAACqb,MAAM,CAACvd,GAAG,CAAC;QAExB;MAEJ,CAAC,CAAC,SACI,CAAC,UAACggB,KAAK,EAAK;QAEd,IAAIA,KAAK,CAAC0uB,MAAM,IAAI,GAAG,IAAI8jD,cAAc,IAAI,KAAK,EAAE;UAEhDv4E,IAAI,CAAC22E,eAAe,CAAC,cAAc,EAAEx+D,IAAI,CAAC4gD,GAAG,CAAC,CAAC,CAAC;UAChD,OAAO/4D,IAAI,CAACk4E,wBAAwB,CAAC,CAAC,CAACx3F,IAAI,CAAC,UAAUqF,GAAG,EAAE;YAEvDkC,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;UAEzB,CAAC,CAAC,SAAM,CAAC,UAAClF,GAAG,EAAK;YAEd,IAAIsd,SAAS,GAAG6B,IAAI,CAACo3E,YAAY,CAACv2F,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,CAAC;YAEhEv4B,QAAQ,CAACqb,MAAM,CAAC;cACZa,MAAM,EAAE,KAAK;cACboc,QAAQ,EAAE;gBACNC,gBAAgB,EAAEriB;cACtB;YACJ,CAAC,CAAC;UAEN,CAAC,CAAC;QACN,CAAC,MACI;UAED,IAAIA,SAAS,GAAG6B,IAAI,CAACo3E,YAAY,CAACrxE,KAAK,CAACo8C,UAAU,CAAC;UAEnDl6D,QAAQ,CAACqb,MAAM,CAAC;YACZa,MAAM,EAAE,KAAK;YACboc,QAAQ,EAAE;cACNC,gBAAgB,EAAEriB;YACtB;UACJ,CAAC,CAAC;QACN;MAEJ,CAAC,CAAC;MAEN,OAAOlW,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;EAEN,CAAC;EAED,IAAI,CAACyxF,aAAa,GAAG,YAAY;IAE7B,IAAI75E,IAAI,GAAG,IAAI;IACf,IAAIu4E,cAAc,GAAG,KAAK;IAC1B,IAAItwF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBywF,qBAAqB,GAAG/7F,aAAa,CAAC4lC,QAAQ,GAC1C,0DAA0D;IAAG;IAC7D,kDAAkD;IAEtD,IAAIw2D,aAAa,GAAGh5E,IAAI,CAACs2E,kBAAkB,CAAC,eAAe,CAAC;IAC5D,IAAIsC,WAAW,GAAG,0BAA0B;IAE5C,IAAIlC,MAAM,GAAG12E,IAAI,CAACs2E,kBAAkB,CAAC,QAAQ,CAAC;IAC9C,IAAIU,KAAK,GAAGh3E,IAAI,CAACs2E,kBAAkB,CAAC,OAAO,CAAC;IAC5C,IAAItuF,EAAE,GAAGgY,IAAI,CAAC9G,GAAG;IACjB,IAAMs/E,EAAE,GAAGn7F,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAErB,IAAIwuF,MAAM,EAAE;MAER,IAAI+B,WAAW,GAAGz4E,IAAI,CAACs2E,kBAAkB,CAAC,cAAc,CAAC;MAEzD,IAAI,CAACU,KAAK,IAAIyB,WAAW,IAAItgE,IAAI,CAAC4gD,GAAG,CAAC,CAAC,EAAE;QAErCwf,cAAc,GAAG,IAAI;QACrBvwF,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;UACrB,OAAOsf,IAAI,CAACw3E,QAAQ,CAAC,CAAC,CAAC92F,IAAI,CAAC,YAAY;YACpCs2F,KAAK,GAAGh3E,IAAI,CAACs2E,kBAAkB,CAAC,OAAO,CAAC;UAC5C,CAAC,CAAC;QACN,CAAC,CAAC;MACN;IACJ,CAAC,MACI;MACD,IAAIlhE,YAAY,GAAG,IAAI,CAACghE,qBAAqB,GAAG,oDAAoD,GAAG,uGAAuG;MAC9MoC,EAAE,CAACl1E,MAAM,CAAC;QACN/L,OAAO,EAAEpa,cAAc,CAACe,SAAS,CAACk3B,YAAY;MAClD,CAAC,CAAC;MACF,OAAOojE,EAAE,CAACpwF,OAAO;IACrB;IAEA,OAAOJ,EAAE,CAACtH,IAAI,CAAC,YAAY;MAEvB,IAAI65F,mBAAmB,GAAGv6E,IAAI,CAACs2E,kBAAkB,CAAC,sBAAsB,CAAC;MAEzEvpE,eAAe,CAACytE,4BAA4B,CAAC7B,qBAAqB,EAAEK,aAAa,EAAEhC,KAAK,EAAE4B,WAAW,CAAC,CACjGl4F,IAAI,CAAC,UAAC+5F,WAAW,EAAK;QAEnB,IAAIA,WAAW,CAAC75F,IAAI,CAAC2/B,QAAQ,CAACmjC,OAAO,EAAE;UACnCz7D,QAAQ,CAACE,OAAO,CAAC;YACbo4B,QAAQ,EAAEk6D,WAAW,CAAC75F,IAAI,CAAC2/B;UAC/B,CAAC,CAAC;QACN,CAAC,MACI,IAAIk6D,WAAW,CAAChmD,MAAM,IAAI,GAAG,IAAIgmD,WAAW,CAAChmD,MAAM,IAAI,GAAG,IAAIgmD,WAAW,CAAChmD,MAAM,IAAI,GAAG,EAAE;UAE1F,IAAIilD,YAAY,GAAG15E,IAAI,CAACo3E,YAAY,CAACqD,WAAW,CAAC75F,IAAI,CAAC2/B,QAAQ,CAACm5D,YAAY,CAAC;UAE5EzxF,QAAQ,CAACqb,MAAM,CAAC;YACZa,MAAM,EAAE,KAAK;YACbqc,gBAAgB,EAAEk5D;UACtB,CAAC,CAAC;QACN,CAAC,MACI,IAAIa,mBAAmB,GAAGpiE,IAAI,CAAC4gD,GAAG,CAAC,CAAC,EAAE;UAEvC,OAAO/4D,IAAI,CAAC65E,aAAa,CAAC,CAAC,CAACn5F,IAAI,CAAC,UAAUg6F,IAAI,EAAE;YAE7CzyF,QAAQ,CAACE,OAAO,CAAC;cACbo4B,QAAQ,EAAEm6D,IAAI,CAAC95F,IAAI,CAAC2/B;YACxB,CAAC,CAAC;UAEN,CAAC,CAAC;QACN,CAAC,MACI;UAED,IAAIm5D,YAAY,GAAG15E,IAAI,CAACo3E,YAAY,CAACqD,WAAW,CAAC75F,IAAI,CAAC2/B,QAAQ,CAACm5D,YAAY,CAAC;UAE5EzxF,QAAQ,CAACqb,MAAM,CAAC;YACZa,MAAM,EAAE,KAAK;YACbqc,gBAAgB,EAAEk5D;UACtB,CAAC,CAAC;QAEN;MAEJ,CAAC,CAAC,SACI,CAAC,UAAC3zE,KAAK,EAAK;QAEd,IAAIA,KAAK,CAAC0uB,MAAM,IAAI,GAAG,IAAI1uB,KAAK,CAAC0uB,MAAM,IAAI,GAAG,IAAI1uB,KAAK,CAAC0uB,MAAM,IAAI,GAAG,EAAE;UAEnE,IAAI0tB,UAAU,GAAGniD,IAAI,CAACo3E,YAAY,CAACrxE,KAAK,CAACo8C,UAAU,CAAC;UAEpDl6D,QAAQ,CAACqb,MAAM,CAAC;YACZa,MAAM,EAAE,KAAK;YACbqc,gBAAgB,EAAEza,KAAK,CAACo8C,UAAU,IAAI90D,SAAS,GAAG0Y,KAAK,CAACya,gBAAgB,GAAG2hC;UAC/E,CAAC,CAAC;QAEN,CAAC,MACI,IAAIp8C,KAAK,CAAC0uB,MAAM,IAAI,GAAG,IAAI8jD,cAAc,IAAI,KAAK,EAAE;UAErDv4E,IAAI,CAAC22E,eAAe,CAAC,cAAc,EAAEx+D,IAAI,CAAC4gD,GAAG,CAAC,CAAC,CAAC;UAChD,OAAO/4D,IAAI,CAAC65E,aAAa,CAAC,CAAC,CAACn5F,IAAI,CAAC,UAAUg6F,IAAI,EAAE;YAE7CzyF,QAAQ,CAACE,OAAO,CAAC;cACbo4B,QAAQ,EAAEm6D,IAAI,CAAC95F,IAAI,CAAC2/B;YACxB,CAAC,CAAC;UAEN,CAAC,CAAC,SAAM,CAAC,UAAC1/B,GAAG,EAAK;YAEd,IAAIsd,SAAS,GAAG6B,IAAI,CAACo3E,YAAY,CAACv2F,GAAG,CAAC2/B,gBAAgB,CAAC;YAEvDv4B,QAAQ,CAACqb,MAAM,CAAC;cACZa,MAAM,EAAE,KAAK;cACbqc,gBAAgB,EAAEriB;YACtB,CAAC,CAAC;UAEN,CAAC,CAAC;QACN,CAAC,MACI,IAAIo8E,mBAAmB,IAAIpiE,IAAI,CAAC4gD,GAAG,CAAC,CAAC,EAAE;UAExC,OAAO/4D,IAAI,CAAC65E,aAAa,CAAC,CAAC,CAACn5F,IAAI,CAAC,UAAUg6F,IAAI,EAAE;YAE7CzyF,QAAQ,CAACE,OAAO,CAAC;cACbo4B,QAAQ,EAAEm6D,IAAI,CAAC95F,IAAI,CAAC2/B;YACxB,CAAC,CAAC;UAEN,CAAC,CAAC,SAAM,CAAC,UAACxa,KAAK,EAAK;YAEhB,IAAI5H,SAAS,GAAG6B,IAAI,CAACo3E,YAAY,CAACrxE,KAAK,CAACya,gBAAgB,CAAC;YAEzDv4B,QAAQ,CAACqb,MAAM,CAAC;cACZa,MAAM,EAAE,KAAK;cACbqc,gBAAgB,EAAEriB;YACtB,CAAC,CAAC;UAEN,CAAC,CAAC;QACN,CAAC,MACI;UACD,IAAIgkD,UAAU,GAAGniD,IAAI,CAACo3E,YAAY,CAACrxE,KAAK,CAACo8C,UAAU,CAAC;UAEpDl6D,QAAQ,CAACqb,MAAM,CAAC;YACZa,MAAM,EAAE,KAAK;YACbqc,gBAAgB,EAAEza,KAAK,CAACo8C,UAAU,IAAI90D,SAAS,GAAG0Y,KAAK,CAACya,gBAAgB,GAAG2hC;UAC/E,CAAC,CAAC;QACN;MAEJ,CAAC,CAAC;MACN,OAAOl6D,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACoxF,iBAAiB,GAAG,YAAY;IAEjC,IAAIx5E,IAAI,GAAG,IAAI;IACf,IAAI/X,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBywF,qBAAqB,GAAG/7F,aAAa,CAAC4lC,QAAQ,GAC1C,0DAA0D;IAAG;IAC7D,kDAAkD;IAEtD,IAAIk0D,MAAM,GAAG,IAAI,CAACJ,kBAAkB,CAAC,QAAQ,CAAC;IAC9C,IAAIU,KAAK,GAAG,IAAI,CAACV,kBAAkB,CAAC,OAAO,CAAC;IAC5C,IAAItuF,EAAE,GAAGjL,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;IAE3C,IAAI8hD,MAAM,EAAE;MAER,IAAI+B,WAAW,GAAG,IAAI,CAACnC,kBAAkB,CAAC,cAAc,CAAC;MAEzD,IAAI,CAACU,KAAK,IAAIyB,WAAW,IAAItgE,IAAI,CAAC4gD,GAAG,CAAC,CAAC,EAAE;QAErC/wE,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;UACrB,OAAOsf,IAAI,CAACw3E,QAAQ,CAAC,CAAC,CAAC92F,IAAI,CAAC,YAAY;YACpCs2F,KAAK,GAAGh3E,IAAI,CAACs2E,kBAAkB,CAAC,OAAO,CAAC;UAC5C,CAAC,CAAC;QACN,CAAC,CAAC;MACN;IACJ,CAAC,MACI;MACD,IAAMkC,EAAE,GAAGn7F,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACrB,IAAIktB,YAAY,GAAG,IAAI,CAACghE,qBAAqB,GAAG,oDAAoD,GAAG,uGAAuG;MAC9MoC,EAAE,CAACl1E,MAAM,CAAC;QACN/L,OAAO,EAAEpa,cAAc,CAACe,SAAS,CAACk3B,YAAY;MAClD,CAAC,CAAC;MACF,OAAOojE,EAAE,CAACpwF,OAAO;IACrB;IAEA,IAAI4wF,aAAa,GAAG3yE,KAAK,CAACuE,OAAO,CAAC,CAAC;IACnC,IAAIguE,WAAW,GAAG,6BAA6B;IAE/C,IAAIjG,QAAQ,GAAG/1F,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;IACrD,IAAI4sD,kBAAkB,GAAGlG,QAAQ,CAAC+F,mCAAmC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;IACtF,IAAII,cAAc,GAAGnG,QAAQ,CAACoG,sCAAsC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;IAErF,OAAO/wF,EAAE,CAACtH,IAAI,CAAC,YAAY;MAEvBqsB,eAAe,CAAC4tE,yBAAyB,CAAChC,qBAAqB,EAAEK,aAAa,EAAEhC,KAAK,EAAE4B,WAAW,EAAEE,cAAc,EAAED,kBAAkB,CAAC,CAClIn4F,IAAI,CAAC,UAAC6/B,QAAQ,EAAK;QAEhBt4B,QAAQ,CAACE,OAAO,CAAC;UACbgc,MAAM,EAAE,IAAI;UACZoc,QAAQ,EAAE;YACNk5D,YAAY,EAAEl5D,QAAQ,CAAC3/B,IAAI,CAAC2/B,QAAQ,CAAC84D;UACzC;QAEJ,CAAC,CAAC;MAEN,CAAC,CAAC,SACI,CAAC,UAACtzE,KAAK,EAAK;QACd,IAAIo8C,UAAU,GAAGniD,IAAI,CAACo3E,YAAY,CAACrxE,KAAK,CAACo8C,UAAU,CAAC;QAEpDl6D,QAAQ,CAACqb,MAAM,CAAC;UACZa,MAAM,EAAE,KAAK;UACboc,QAAQ,EAAE;YACNC,gBAAgB,EAAE2hC;UACtB;QAEJ,CAAC,CAAC;MAEN,CAAC,CAAC;MACN,OAAOl6D,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAAC+uF,YAAY,GAAG,YAAY;IAE5B,IAAI,CAACf,qBAAqB,GAAG,KAAK;IAClC,IAAIp2E,IAAI,GAAG,IAAI;IAEf,IAAI,CAACA,IAAI,CAACk2E,OAAO,EAAE;MACfl2E,IAAI,CAACk2E,OAAO,GAAGt+D,SAAS,CAAC,YAAY;QAEjC+gE,qBAAqB,GAAG/7F,aAAa,CAAC4lC,QAAQ,GAC1C,0DAA0D;QAAG;QAC7D,kDAAkD;QAEtD,IAAIk0D,MAAM,GAAG12E,IAAI,CAACs2E,kBAAkB,CAAC,QAAQ,CAAC;QAC9C,IAAIU,KAAK,GAAGh3E,IAAI,CAACs2E,kBAAkB,CAAC,OAAO,CAAC;QAC5C,IAAItuF,EAAE,GAAGgY,IAAI,CAAC9G,GAAG;QAEjB,IAAIw9E,MAAM,EAAE;UAER,IAAI+B,WAAW,GAAGz4E,IAAI,CAACs2E,kBAAkB,CAAC,cAAc,CAAC;UAEzD,IAAI,CAACU,KAAK,IAAIyB,WAAW,IAAItgE,IAAI,CAAC4gD,GAAG,CAAC,CAAC,EAAE;YAErC/wE,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;cACrB,OAAOsf,IAAI,CAACw3E,QAAQ,CAAC,CAAC,CAAC92F,IAAI,CAAC,YAAY;gBACpCs2F,KAAK,GAAGh3E,IAAI,CAACs2E,kBAAkB,CAAC,OAAO,CAAC;cAC5C,CAAC,CAAC;YACN,CAAC,CAAC;UACN;QACJ,CAAC,MACI;UACD,IAAIsE,QAAQ,GAAGz9F,cAAc,CAACe,SAAS,CAAC,uGAAuG,CAAC;UAEhJ8hB,IAAI,CAACu3E,WAAW,CAACqD,QAAQ,CAAC;UAC1B;QACJ;QAEA,OAAO5yF,EAAE,CAACtH,IAAI,CAAC,YAAY;UAEvBqsB,eAAe,CAAC8tE,yBAAyB,CAAClC,qBAAqB,EAAEtyE,KAAK,CAACuE,OAAO,CAAC,CAAC,EAAEosE,KAAK,CAAC,CACnFt2F,IAAI,CAAC,UAAC6/B,QAAQ,EAAK;YAEhB,IAAIm5D,YAAY,GAAG15E,IAAI,CAACo3E,YAAY,CAAC72D,QAAQ,CAAC3/B,IAAI,CAAC2/B,QAAQ,CAACm5D,YAAY,CAAC;YAEzE,IAAIA,YAAY,KAAK,qBAAqB,EACtC15E,IAAI,CAACu3E,WAAW,CAACmC,YAAY,CAAC;UAEtC,CAAC,CAAC,SAAM,CAAC,UAAC3zE,KAAK,EAAK;YAChB,IAAI60E,QAAQ,GAAG56E,IAAI,CAACo3E,YAAY,CAACrxE,KAAK,CAACo8C,UAAU,CAAC;YAElDniD,IAAI,CAACu3E,WAAW,CAACqD,QAAQ,CAAC;UAE9B,CAAC,CAAC;QACV,CAAC,CAAC;MAEN,CAAC,EAAE56E,IAAI,CAACm2E,wBAAwB,GAAG,IAAI,CAAC;IAC5C;EACJ,CAAC;EAED,IAAI,CAACoB,WAAW,GAAG,UAAUqD,QAAQ,EAAE;IAEnC,IAAI,IAAI,CAAC1E,OAAO,EAAE;MACd,IAAI;QACAt+D,SAAS,CAAC2oB,MAAM,CAAC,IAAI,CAAC21C,OAAO,CAAC;QAC9B,IAAI,CAACA,OAAO,GAAG,IAAI;QAEnB,IAAI,CAAC,CAAC0E,QAAQ,EACV79F,aAAa,CAACqlE,eAAe,CAAC;UAAEtxD,KAAK,EAAE,OAAO;UAAEqiC,IAAI,EAAEynD;QAAS,CAAC,CAAC;MACzE,CAAC,CACD,OAAO38E,CAAC,EAAE,CACV;IAEJ;EAEJ,CAAC;EAED,IAAI,CAAC04E,eAAe,GAAG,UAAU55C,GAAG,EAAEn8C,IAAI,EAAE;IAExC7E,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC4oB,GAAG,EAAE3oB,IAAI,CAACC,SAAS,CAACzzB,IAAI,CAAC,CAAC;EAE1D,CAAC;EAED,IAAI,CAAC01F,kBAAkB,GAAG,UAAUv5C,GAAG,EAAE;IAErC,IAAIn8C,IAAI,GAAG7E,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAACmY,GAAG,CAAC;IAC3C,IAAIn8C,IAAI,EAAE;MACN,OAAOwzB,IAAI,CAAC2T,KAAK,CAACnnC,IAAI,CAAC;IAC3B,CAAC,MAEG,OAAO,IAAI;EAEnB,CAAC;EAED,IAAI,CAAC02F,gBAAgB,GAAG,UAAUv6C,GAAG,EAAE;IAEnChhD,MAAM,CAACm4B,YAAY,CAAC4xB,UAAU,CAAC/I,GAAG,CAAC;EAEvC,CAAC;EAED,IAAI,CAACq6C,YAAY,GAAG,UAAUj5E,SAAS,EAAE;IAErCA,SAAS,GAAIA,SAAS,IAAI9Q,SAAS,IAAI8Q,SAAS,IAAI,IAAI,GAAIA,SAAS,CAAClG,IAAI,CAAC,CAAC,GAAGkG,SAAS;IAExF,QAAQA,SAAS;MACb,KAAK,oBAAoB;QACrBA,SAAS,GAAG,2CAA2C;QACvD;MACJ,KAAK,kBAAkB;QACnBA,SAAS,GAAG,UAAU;QACtB;MACJ,KAAK,aAAa;QACdA,SAAS,GAAG,4BAA4B;QACxC;MACJ,KAAK,gBAAgB;QACjBA,SAAS,GAAG,qBAAqB;QACjC;MACJ,KAAK,WAAW;QACZA,SAAS,GAAG,2BAA2B;QACvC;MACJ,KAAK,aAAa;QACdA,SAAS,GAAG,IAAI,CAACi4E,qBAAqB,GAAG,oDAAoD,GAAG,uGAAuG;QACvM;MACJ,KAAK,qBAAqB;QACtBj4E,SAAS,GAAG,6FAA6F;QACzG;MACJ,KAAK,cAAc;QACfA,SAAS,GAAG,IAAI,CAACi4E,qBAAqB,GAAG,uFAAuF,GAAG,wDAAwD;QAC3L;IACR;IAEA,OAAOj5F,cAAc,CAACe,SAAS,CAACigB,SAAS,CAAC;EAE9C,CAAC;AAEL,CAAC,CAEJ,CAAC,C;;;;;;;;;;;ACvxCN3hB,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAAC2jD,OAAO,CAAC,mBAAmB,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,eAAe,EAC3F,UAAUxiD,EAAE,EAAET,aAAa,EAAEmnE,aAAa,EAAE;EACxC,IAAI3mE,iBAAiB,GAAG,CAAC,CAAC;;EAE1B;EACAA,iBAAiB,CAACwD,IAAI,GAAG,EAAE;;EAE3B;EACAxD,iBAAiB,CAAC09F,aAAa,GAAG,EAAE;EACpC19F,iBAAiB,CAAC29F,kBAAkB,GAAG,KAAK;;EAE5C;EACA39F,iBAAiB,CAAC49F,QAAQ,GAAG,UAAUC,QAAQ,EAAE;IAC7C,IAAIhzF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB9K,iBAAiB,CAACwD,IAAI,GAAG,EAAE;IAC3Bc,OAAO,CAACy0C,IAAI,CAAC,UAAU,CAAC;IACxB;IACA35C,OAAO,CAAC4M,OAAO,CAAC6xF,QAAQ,EAAE,UAAUr7D,CAAC,EAAE;MACnC,IAAI,CAACA,CAAC,CAACoyB,QAAQ,EAAE;QACb50D,iBAAiB,CAACwD,IAAI,CAACmC,IAAI,CAAC;UACxBuD,IAAI,EAAEs5B,CAAC,CAACt5B,IAAI,CAAC2N,WAAW,CAAC,CAAC;UAC1B/M,EAAE,EAAE04B,CAAC,CAACkoD,SAAS;UACfoT,GAAG,EAAEt7D,CAAC,CAACuoD,WAAW,CAACl0E,WAAW,CAAC,CAAC;UAChCumB,KAAK,EAAEoF,CAAC,CAACpF;QACb,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;IACF94B,OAAO,CAAC20C,OAAO,CAAC,UAAU,CAAC;IAE3B30C,OAAO,CAACy0C,IAAI,CAAC,gBAAgB,CAAC;IAC9B/4C,iBAAiB,CAACwD,IAAI,CAACy8C,IAAI,CAAC,UAAUn0C,CAAC,EAAE8N,CAAC,EAAE;MACxC;AAChB;AACA;AACA;;MAEgB,IAAI9N,CAAC,CAAC5C,IAAI,GAAG0Q,CAAC,CAAC1Q,IAAI,EAAE,OAAO,CAAC,CAAC;MAC9B,IAAI4C,CAAC,CAAC5C,IAAI,GAAG0Q,CAAC,CAAC1Q,IAAI,EAAE,OAAO,CAAC;MAC7B,OAAO,CAAC;IACZ,CAAC,CAAC;IAEF5E,OAAO,CAAC20C,OAAO,CAAC,gBAAgB,CAAC;IACjC;IACA;IACApuC,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IACtB,OAAOF,QAAQ,CAACG,OAAO;EAC3B,CAAC;;EAED;EACAhL,iBAAiB,CAAC+9F,UAAU,GAAG,UAAUv2F,IAAI,EAAEmzB,KAAK,EAAE;IAClD,IAAI,CAACnzB,IAAI,IAAIA,IAAI,CAAC9B,MAAM,IAAI,CAAC,EACzB,OAAO1F,iBAAiB,CAACwD,IAAI;IAEjC,IAAI,CAACm3B,KAAK,EAAEA,KAAK,GAAG,GAAG;;IAEvB;IACA;;IAEAnzB,IAAI,GAAGA,IAAI,CAACqP,WAAW,CAAC,CAAC;IACzB,IAAImnF,OAAO,GAAG,CAAC;IACf,IAAIC,EAAE,GAAG,EAAE;;IAEX;IACA,IAAI/2B,SAAS,GAAGP,aAAa,CAACQ,eAAe,CAAC3/D,IAAI,CAAC;IAEnD,KAAK,IAAIsM,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG9T,iBAAiB,CAACwD,IAAI,CAACkC,MAAM,EAAEoO,CAAC,EAAE,EAAE;MACpD,IAAI5U,EAAE,GAAGc,iBAAiB,CAACwD,IAAI,CAACsQ,CAAC,CAAC;MAElC,IAAIkqF,OAAO,IAAIrjE,KAAK,EAChB;;MAEJ;MACA;MACA;MACA,IAAIujE,GAAG,GAAGF,OAAO,GAAGrjE,KAAK,KACpBgsC,aAAa,CAACiD,2BAA2B,CAAC1qE,EAAE,CAACgK,IAAI,EAAEg+D,SAAS,CAAC,IAC1DP,aAAa,CAACiD,2BAA2B,CAAC1qE,EAAE,CAAC4+F,GAAG,EAAE52B,SAAS,CAAC,CAAC;MAGrE,IAAIg3B,GAAG,KAAK,IAAI,EAAE;QACdF,OAAO,EAAE;QACTC,EAAE,CAACt4F,IAAI,CAACzG,EAAE,CAAC;MACf;IACJ;;IAEA;IACA,OAAO++F,EAAE;EACb,CAAC;EAEDj+F,iBAAiB,CAACm+F,iBAAiB,GAAG,UAAU37D,CAAC,EAAE;IAC/C,IAAMzuB,OAAO,GAAGyuB,CAAC,CAACtgC,QAAQ,CAACwD,MAAM,GAAG,CAAC,GAAG88B,CAAC,CAACtgC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI;IAC5D,IAAMhD,EAAE,GAAG;MACPgK,IAAI,EAAE,CAAC,CAACs5B,CAAC,CAACxgC,IAAI,GAAGwgC,CAAC,CAACxgC,IAAI,CAAC6U,WAAW,CAAC,CAAC,GAAG,EAAE;MAC1C/M,EAAE,EAAE04B,CAAC,CAAC9/B,EAAE;MACRsH,KAAK,EAAE+J,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC5R,KAAK,GAAG4R,OAAO,CAAC5R,KAAK,CAAC0U,WAAW,CAAC,CAAC,GAAG,EAAE;MACpE7F,KAAK,EAAE+C,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC3R,KAAK,GAAG2R,OAAO,CAAC3R,KAAK,GAAG,EAAE;MACtD++E,MAAM,EAAEptE,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC1R,WAAW,GAAG0R,OAAO,CAAC1R,WAAW,GAAG,EAAE;MACnEk4C,SAAS,EAAE,CAAC,CAAC/X,CAAC,CAAClgC,SAAS,GAAGkgC,CAAC,CAAClgC,SAAS,CAAC8T,GAAG,CAAC,UAAAtK,CAAC,EAAI;QAC5C,OAAO;UACH2F,IAAI,EAAE,CAAC,CAAC3F,CAAC,CAACC,IAAI,GAAGD,CAAC,CAACC,IAAI,CAAC8K,WAAW,CAAC,CAAC,GAAG,EAAE;UAC1CunF,QAAQ,EAAEtyF,CAAC,CAACK;QAChB,CAAC;MACL,CAAC,CAAC,GAAG,EAAE;MACP+wB,MAAM,EAAEsF,CAAC,CAACl1B,SAAS;MACnB2vB,yBAAyB,EAAEuF,CAAC,CAACj1B,yBAAyB;MACtDwvB,yBAAyB,EAAEyF,CAAC,CAACh1B;IACjC,CAAC;IACDtO,EAAE,CAACm/F,SAAS,GAAGn/F,EAAE,CAACgK,IAAI;IACtB,IAAI,CAAC,CAAChK,EAAE,CAACiiF,MAAM,EACXjiF,EAAE,CAACm/F,SAAS,IAAI,IAAI,GAAGn/F,EAAE,CAACiiF,MAAM;IACpC,IAAI,CAAC,CAACjiF,EAAE,CAAC8R,KAAK,EACV9R,EAAE,CAACm/F,SAAS,IAAI,IAAI,GAAGn/F,EAAE,CAAC8R,KAAK;IACnC,IAAI,CAAC,CAAC9R,EAAE,CAAC8K,KAAK,EACV9K,EAAE,CAACm/F,SAAS,IAAI,IAAI,GAAGn/F,EAAE,CAAC8K,KAAK;IAEnC,OAAO9K,EAAE;EACb,CAAC;EAEDc,iBAAiB,CAAC+I,kBAAkB,GAAG,UAAUoxC,SAAS,EAAEh6C,UAAU,EAAE;IACpE,IAAI4mB,MAAM,GAAG,EAAE;IACf3nB,OAAO,CAAC4M,OAAO,CAACmuC,SAAS,EAAE,UAAUj6C,QAAQ,EAAE;MAC3C,IAAI,CAACA,QAAQ,CAACgC,QAAQ,CAACwD,MAAM,EACzBqhB,MAAM,CAACphB,IAAI,CAAC3F,iBAAiB,CAACm+F,iBAAiB,CAACj+F,QAAQ,CAAC,CAAC,CAAC,KAC1D;QACDd,OAAO,CAAC4M,OAAO,CAAC9L,QAAQ,CAACgC,QAAQ,EAAE,UAAU6R,OAAO,EAAE;UAClD,IAAIuqF,YAAY,GAAGp+F,QAAQ;UAC3Bo+F,YAAY,CAACp8F,QAAQ,CAAC,CAAC,CAAC,GAAG6R,OAAO;UAClC,IAAMwqF,cAAc,GAAGv+F,iBAAiB,CAACm+F,iBAAiB,CAACG,YAAY,CAAC;UACxE,IAAMzwF,OAAO,GAAG,CAAC,CAAC0wF,cAAc,CAAChkD,SAAS,GAAGgkD,cAAc,CAAChkD,SAAS,CAACnkC,GAAG,CAAC,UAAAtK,CAAC,EAAI;YAC3E,IAAM2F,IAAI,GAAG,CAAC,CAAC3F,CAAC,CAAC2F,IAAI,GAAG3F,CAAC,CAAC2F,IAAI,CAACoF,WAAW,CAAC,CAAC,GAAG,EAAE;YACjD,IAAMunF,QAAQ,GAAG,CAAC,CAACtyF,CAAC,CAACsyF,QAAQ,GAAGtyF,CAAC,CAACsyF,QAAQ,CAACvnF,WAAW,CAAC,CAAC,GAAG,EAAE;YAC7D,UAAA9F,MAAA,CAAUU,IAAI,OAAAV,MAAA,CAAIqtF,QAAQ;UAC9B,CAAC,CAAC,CAACnqF,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;UACjB,IAAKsqF,cAAc,CAACF,SAAS,IAAIE,cAAc,CAACF,SAAS,CAAC1vF,OAAO,CAACxO,UAAU,CAAC,IAAI,CAAC,CAAC,IAC9E0N,OAAO,CAACc,OAAO,CAACxO,UAAU,CAAC,IAAI,CAAC,CAAE,EAC/B4mB,MAAM,CAACphB,IAAI,CAAC44F,cAAc,CAAC;QACvC,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;IACF,OAAOx3E,MAAM;EACjB,CAAC;EAED/mB,iBAAiB,CAACw+F,WAAW,GAAG,UAAUh8D,CAAC,EAAE;IACzC,OAAO;MACHt5B,IAAI,EAAE,CAAC,CAACs5B,CAAC,CAACt5B,IAAI,GAAGs5B,CAAC,CAACt5B,IAAI,CAAC2N,WAAW,CAAC,CAAC,GAAG,EAAE;MAC1C/M,EAAE,EAAE04B,CAAC,CAAC14B,EAAE;MACRE,KAAK,EAAE,CAAC,CAACw4B,CAAC,CAACx4B,KAAK,GAAGw4B,CAAC,CAACx4B,KAAK,CAAC6M,WAAW,CAAC,CAAC,GAAG,EAAE;MAC7C7F,KAAK,EAAE,CAAC,CAACwxB,CAAC,CAACxxB,KAAK,GAAGwxB,CAAC,CAACxxB,KAAK,GAAG,EAAE;MAC/BmwE,MAAM,EAAE,CAAC,CAAC3+C,CAAC,CAACvxB,WAAW,GAAGuxB,CAAC,CAACvxB,WAAW,GAAG,EAAE;MAC5CspC,SAAS,EAAE,CAAC,CAAC/X,CAAC,CAAC+X,SAAS,GAAG/X,CAAC,CAAC+X,SAAS,CAACnkC,GAAG,CAAC,UAAAtK,CAAC,EAAI;QAC5C,OAAO;UACH2F,IAAI,EAAE,CAAC,CAAC3F,CAAC,CAAC2F,IAAI,GAAG3F,CAAC,CAAC2F,IAAI,CAACoF,WAAW,CAAC,CAAC,GAAG,EAAE;UAC1CunF,QAAQ,EAAEtyF,CAAC,CAACsyF;QAChB,CAAC;MACL,CAAC,CAAC,GAAG,EAAE;MACPlhE,MAAM,EAAEsF,CAAC,CAACtF,MAAM;MAChBD,yBAAyB,EAAEuF,CAAC,CAACvF,yBAAyB;MACtDF,yBAAyB,EAAEyF,CAAC,CAACzF;IACjC,CAAC;EACL,CAAC;;EAGD;EACA/8B,iBAAiB,CAACw5C,iBAAiB,GAAG,UAAUW,SAAS,EAAqB;IAAA,IAAnBm3C,SAAS,GAAA7gF,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,KAAK;IACxE,IAAI5F,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI,CAACwmF,SAAS,EAAE;MACZtxF,iBAAiB,CAAC09F,aAAa,GAAGn0F,KAAK,CAACC,IAAI,CAAC;QAAE9D,MAAM,EAAEy0C,SAAS,CAACz0C;MAAO,CAAC,CAAC;MAC1EpB,OAAO,CAACy0C,IAAI,CAAC,kBAAkB,CAAC;MAChC;;MAEA35C,OAAO,CAAC4M,OAAO,CAACmuC,SAAS,EAAE,UAAU3X,CAAC,EAAE1uB,CAAC,EAAE;QACvC9T,iBAAiB,CAAC09F,aAAa,CAAC5pF,CAAC,CAAC,GAAG9T,iBAAiB,CAACw+F,WAAW,CAACh8D,CAAC,CAAC;MACzE,CAAC,CAAC;MACFl+B,OAAO,CAAC20C,OAAO,CAAC,kBAAkB,CAAC;MAEnC30C,OAAO,CAACy0C,IAAI,CAAC,wBAAwB,CAAC;MACtC/4C,iBAAiB,CAAC09F,aAAa,CAACz9C,IAAI,CAAC,UAAUn0C,CAAC,EAAE8N,CAAC,EAAE;QACjD,IAAI6kF,EAAE,GAAG3yF,CAAC,CAAC5C,IAAI;QACf,IAAIw1F,EAAE,GAAG9kF,CAAC,CAAC1Q,IAAI;QAEf,IAAIu1F,EAAE,GAAGC,EAAE,EAAE,OAAO,CAAC,CAAC;QACtB,IAAID,EAAE,GAAGC,EAAE,EAAE,OAAO,CAAC;QACrB,OAAO,CAAC;MACZ,CAAC,CAAC;MACFp6F,OAAO,CAAC20C,OAAO,CAAC,wBAAwB,CAAC;MAEzC,IAAI,CAAC0kD,kBAAkB,GAAG,IAAI;IAClC,CAAC,MAAM;MACHv+F,OAAO,CAAC4M,OAAO,CAACmuC,SAAS,EAAE,UAAU3X,CAAC,EAAE1uB,CAAC,EAAE;QACvC,IAAIjO,KAAK,GAAG7F,iBAAiB,CAAC09F,aAAa,CAAC53F,SAAS,CAAC,UAAAR,CAAC;UAAA,OAAIA,CAAC,CAACwE,EAAE,IAAI04B,CAAC,CAAC14B,EAAE;QAAA,EAAC;QACxE,IAAIjE,KAAK,KAAK,CAAC,CAAC,EAAE;UACd7F,iBAAiB,CAAC09F,aAAa,CAAC73F,KAAK,CAAC,GAAG7F,iBAAiB,CAACw+F,WAAW,CAACh8D,CAAC,CAAC;QAC7E,CAAC,MAAM;UACHxiC,iBAAiB,CAAC09F,aAAa,CAAC/3F,IAAI,CAAC3F,iBAAiB,CAACw+F,WAAW,CAACh8D,CAAC,CAAC,CAAC;QAC1E;MAEJ,CAAC,CAAC;IACN;IAEA33B,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IACtB,OAAOF,QAAQ,CAACG,OAAO;EAC3B,CAAC;;EAED;EACAhL,iBAAiB,CAACyI,kBAAkB,GAAG,UAAUjB,IAAI,EAAc;IAAA,IAAZmzB,KAAK,GAAAlqB,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,EAAE;IAC7D,IAAI,CAAC,IAAI,CAACktF,kBAAkB,EACxB,OAAO,IAAI;IACf,IAAI,CAACn2F,IAAI,IAAIA,IAAI,CAAC9B,MAAM,KAAK,CAAC,EAC1B,OAAO1F,iBAAiB,CAAC09F,aAAa;IAE1Cl2F,IAAI,GAAGA,IAAI,CAACqP,WAAW,CAAC,CAAC;IACzB,IAAImnF,OAAO,GAAG,CAAC;IACf,IAAIC,EAAE,GAAG,EAAE;IAEX,KAAK,IAAInqF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG9T,iBAAiB,CAAC09F,aAAa,CAACh4F,MAAM,EAAEoO,CAAC,EAAE,EAAE;MAC7D,IAAI5U,EAAE,GAAGc,iBAAiB,CAAC09F,aAAa,CAAC5pF,CAAC,CAAC;MAE3C,IAAIkqF,OAAO,IAAIrjE,KAAK,EAChB;MAEJ,IAAIujE,GAAG,GAAGF,OAAO,GAAGrjE,KAAK,KACpBz7B,EAAE,CAACgK,IAAI,CAACyF,OAAO,CAACnH,IAAI,CAAC,IAAI,CAAC,IACtB,CAAC,CAACtI,EAAE,CAAC8K,KAAK,IAAI9K,EAAE,CAAC8K,KAAK,CAAC2E,OAAO,CAACnH,IAAI,CAAC,IAAI,CAAE,IAC1C,CAAC,CAACtI,EAAE,CAAC8R,KAAK,IAAI9R,EAAE,CAAC8R,KAAK,CAACrC,OAAO,CAACnH,IAAI,CAAC,IAAI,CAAE,IAC1C,CAAC,CAACtI,EAAE,CAACiiF,MAAM,IAAIjiF,EAAE,CAACiiF,MAAM,CAACxyE,OAAO,CAACnH,IAAI,CAAC,IAAI,CAAE,CAAC;MAEtD,IAAI,CAAC02F,GAAG,EAAE;QACN9+F,OAAO,CAAC4M,OAAO,CAAC9M,EAAE,CAACq7C,SAAS,EAAE,UAAUokD,GAAG,EAAE;UACzC,IAAI,CAACT,GAAG,KACH,CAAC,CAACS,GAAG,CAACltF,IAAI,IAAIktF,GAAG,CAACltF,IAAI,CAAC9C,OAAO,CAACnH,IAAI,CAAC,IAAI,CAAC,IACzC,CAAC,CAACm3F,GAAG,CAACP,QAAQ,IAAIO,GAAG,CAACP,QAAQ,CAACzvF,OAAO,CAACnH,IAAI,CAAC,IAAI,CAAE,CAAC,EACpD02F,GAAG,GAAG,IAAI;QAClB,CAAC,CAAC;MACN;MAEA,IAAIA,GAAG,IAAI,IAAI,EAAE;QACbF,OAAO,EAAE;QAET9+F,EAAE,CAACm/F,SAAS,GAAGn/F,EAAE,CAACgK,IAAI;QACtB,IAAI,CAAC,CAAChK,EAAE,CAACiiF,MAAM,EACXjiF,EAAE,CAACm/F,SAAS,IAAI,IAAI,GAAGn/F,EAAE,CAACiiF,MAAM;QACpC,IAAI,CAAC,CAACjiF,EAAE,CAAC8R,KAAK,EACV9R,EAAE,CAACm/F,SAAS,IAAI,IAAI,GAAGn/F,EAAE,CAAC8R,KAAK;QACnC,IAAI,CAAC,CAAC9R,EAAE,CAAC8K,KAAK,EACV9K,EAAE,CAACm/F,SAAS,IAAI,IAAI,GAAGn/F,EAAE,CAAC8K,KAAK;QAEnCi0F,EAAE,CAACt4F,IAAI,CAACzG,EAAE,CAAC;MACf;IACJ;IAEA,OAAO++F,EAAE;EACb,CAAC;;EAED;EACA;EACAj+F,iBAAiB,CAAC2f,MAAM,GAAG,IAAI;EAC/B3f,iBAAiB,CAACukE,OAAO,GAAG,IAAI;EAChCvkE,iBAAiB,CAAC4+F,eAAe,GAAG,UAAUlkF,GAAG,EAAEqsD,GAAG,EAAE;IACpD,IAAIrsD,GAAG,EAAE;MACLA,GAAG,GAAGA,GAAG,CAACulC,IAAI,CAAC,UAAUn0C,CAAC,EAAE8N,CAAC,EAAE;QAC3B,IAAI9N,CAAC,GAAG8N,CAAC,EAAE,OAAO,CAAC,CAAC;QACpB,IAAI9N,CAAC,GAAG8N,CAAC,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC;MACZ,CAAC,CAAC;IACN;IAEA,IAAI,CAAC5Z,iBAAiB,CAAC2f,MAAM,EAAE;MAC3B,IAAIrD,GAAG,GAAGlZ,CAAC,CAAC2jE,GAAG,CAAC;MAEhB,IAAIzqD,GAAG,CAAC5W,MAAM,GAAG,CAAC,EAAE;QAChB1F,iBAAiB,CAAC2f,MAAM,GAAGC,QAAQ,CAAC81B,aAAa,CAAC,QAAQ,CAAC;QAC3D11C,iBAAiB,CAACukE,OAAO,GAAGvkE,iBAAiB,CAAC2f,MAAM,CAAC6gC,UAAU,CAAC,IAAI,CAAC;QACrE,IAAI0nB,EAAE,GAAG5rD,GAAG,CAACI,GAAG,CAAC,aAAa,CAAC;QAC/B,IAAIyrD,EAAE,GAAG7rD,GAAG,CAACI,GAAG,CAAC,WAAW,CAAC;QAC7B,IAAI0rD,EAAE,GAAG9rD,GAAG,CAACI,GAAG,CAAC,aAAa,CAAC;QAC/B1c,iBAAiB,CAACukE,OAAO,CAAC+D,IAAI,GAAG,SAAS,GAAGF,EAAE,GAAG,GAAG,GAAGD,EAAE,GAAG,GAAG,GAAGD,EAAE;MACzE;IACJ;IAEA,IAAIloE,iBAAiB,CAAC2f,MAAM,IAAIjF,GAAG,IAAIA,GAAG,CAAChV,MAAM,GAAG,CAAC,EAAE;MACnDtG,OAAO,CAAC4M,OAAO,CAAC0O,GAAG,EAAE,UAAUxb,EAAE,EAAE;QAC/Bsd,KAAK,GAAGxc,iBAAiB,CAACukE,OAAO,CAACgE,WAAW,CAACrpE,EAAE,CAACgK,IAAI,CAAC,CAACsT,KAAK;MAChE,CAAC,CAAC;IACN;EACJ,CAAC;;EAED;EACA,OAAOxc,iBAAiB;AAC5B,CAAC,CACJ,CAAC,C;;;;;;;;;;;;;;;ACjSsB;AAExBZ,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,iBAAiB,EAAE,CAClD,eAAe,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EACtG,kBAAkB,EAAE,eAAe,EACnC,UAAU3e,aAAa,EAAEC,YAAY,EAAEQ,EAAE,EAAEN,aAAa,EAAEE,SAAS,EAAEE,cAAc,EAAE0wD,OAAO,EACxFg3B,gBAAgB,EAAE9gB,aAAa,EAAE;EAEjC,IAAI,CAAC+gB,EAAE,GAAG,IAAI;EAEd,IAAI,CAAC5kC,IAAI,GAAG,UAAU+X,QAAQ,EAAE;IAC5B,IAAI,CAACl8D,MAAM,CAACynB,OAAO,EAAE;MACjBy0C,QAAQ,CAAC,CAAC;MACV;IACJ;IAEA,IAAI,CAACr7D,aAAa,CAAC8oB,UAAU,EAAE;MAC3B,IAAI1F,IAAI,GAAG,IAAI;MACf,IAAMi8E,IAAI,GAAG;QAAE31F,IAAI,EAAE,UAAU;QAAEgnE,QAAQ,EAAE;MAAU,CAAC;MACtD,IAAI/5B,MAAM,IAAIA,MAAM,CAACC,QAAQ,KAAK,SAAS,EAAE;QACzC,IAAMkQ,OAAO,GAAGvtC,MAAM,CAACuK,QAAQ,CAAC6yB,MAAM,CAACmQ,OAAO,CAAC;QAC/C,IAAIA,OAAO,IAAIA,OAAO,IAAIw4C,GAAG,IAAIx4C,OAAO,IAAI,EAAE,EAAE;UAC5Cu4C,IAAI,CAACE,uBAAuB,GAAG,QAAQ;QAC3C;MACJ;MACA,IAAI,CAACrX,EAAE,GAAG/oF,MAAM,CAACqgG,YAAY,CAACC,YAAY,CAACJ,IAAI,EAAE,UAAUnX,EAAE,EAAE;QAC3DpjF,OAAO,CAACC,GAAG,CAAC,YAAY,CAAC;QACzBqe,IAAI,CAACs8E,cAAc,CAACrkC,QAAQ,CAAC;MACjC,CAAC,EAAE,UAAUp3D,GAAG,EAAE;QACda,OAAO,CAACC,GAAG,CAAC,0BAA0B,GAAGd,GAAG,CAAC0W,OAAO,CAAC;QACrD7V,OAAO,CAACC,GAAG,CAACyyB,IAAI,CAACC,SAAS,CAACxzB,GAAG,CAAC,CAAC;QAChCo3D,QAAQ,CAACp3D,GAAG,CAAC;MACjB,CAAC,CAAC;IACN,CAAC,MACI;MACD,IAAI,CAACikF,EAAE,GAAG/oF,MAAM,CAACsgG,YAAY,CAAC,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC;MACnE36F,OAAO,CAACC,GAAG,CAAC,YAAY,CAAC;MACzB,IAAI,CAAC26F,cAAc,CAACrkC,QAAQ,CAAC;IACjC;EACJ,CAAC;;EAED;EACA,IAAI,CAACqkC,cAAc,GAAG,UAAUrkC,QAAQ,EAAE;IACtC,IAAI,CAAC6sB,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,2EAA2E,EAAE,EAAE,EACzF,UAAUD,EAAE,EAAE27C,SAAS,EAAE;QACrB,IAAIA,SAAS,CAACllF,IAAI,CAACvU,MAAM,KAAK,CAAC,EAAE;UAC7BtC,CAAC,CAACmC,IAAI,CAACkiF,gBAAgB,CAACpkC,uBAAuB,CAAC,CAAC,EAAE,UAAU79C,GAAG,EAAEmvC,CAAC,EAAE;YACjE6O,EAAE,CAACC,UAAU,CAAC9O,CAAC,CAAC;UACpB,CAAC,CAAC;UACFrwC,OAAO,CAACC,GAAG,CAAC,yBAAyB,CAAC;QAC1C;QAEAi/C,EAAE,CAACC,UAAU,CAAC,4DAA4D,EAAE,EAAE,EAAE,UAAUD,EAAE,EAAE47C,OAAO,EAAE;UACnG,IAAIlV,GAAG,GAAGkV,OAAO,CAACnlF,IAAI,CAAC7Q,IAAI,CAAC,CAAC,CAAC,CAACi2F,OAAO;UACtC5X,gBAAgB,CAACrhC,aAAa,CAAC8jC,GAAG,EAAE1mC,EAAE,CAAC;QAC3C,CAAC,CAAC;MAEN,CAAC,CAAC;MAEN,IAAI,CAAChkD,aAAa,CAAC8oB,UAAU,EAAE;QAC3BhkB,OAAO,CAACC,GAAG,CAAC,aAAa,CAAC;QAC1Bi/C,EAAE,CAACC,UAAU,CAAC,4FAA4F,CAAC;MAC/G;IAEJ,CAAC,EAAE,UAAUhgD,GAAG,EAAE;MACdo3D,QAAQ,CAAC,CAAC;MACVv2D,OAAO,CAACC,GAAG,CAACd,GAAG,CAAC;MAChBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,EAAE,YAAY;MACX0gD,QAAQ,CAAC,CAAC;IACd,CAAC,CAAC;IAEF,IAAI,CAAC6sB,EAAE,CAAC4X,SAAS,CAACC,YAAY,GAAG,UAAUC,UAAU,EAAE9kF,GAAG,EAAE4tB,IAAI,EAAE;MAC9D,IAAMm3D,MAAM,GAAG,IAAI;MACnB,OAAOC,GAAG,CAAC//F,aAAa,CAACg/E,YAAY,CAAC,CAAC,EAAE,UAAA7qE,CAAC;QAAA,OAAIA,CAAC,GAAG4G,GAAG,CAAChV,MAAM;MAAA,GAAE,UAAUqH,CAAC,EAAE;QACvE,OAAO,IAAIikB,OAAO,CAAC,UAAUjmB,OAAO,EAAEmb,MAAM,EAAE;UAC1C,IAAMy5E,gBAAgB,GAAG5yF,CAAC,GAAGyyF,UAAU;UACvCC,MAAM,CAACpC,WAAW,CAAC,UAAU75C,EAAE,EAAE;YAC7B,KAAK,IAAI1vC,CAAC,GAAG/G,CAAC,EAAE+G,CAAC,GAAG4G,GAAG,CAAChV,MAAM,IAAIoO,CAAC,GAAG6rF,gBAAgB,EAAE7rF,CAAC,EAAE,EAAE;cACzD,IAAM5U,EAAE,GAAGwb,GAAG,CAAC5G,CAAC,CAAC;cACjBw0B,IAAI,CAACkb,EAAE,EAAEtkD,EAAE,CAAC;YAChB;YACA6N,CAAC,GAAG4yF,gBAAgB;YACpB50F,OAAO,CAACgC,CAAC,CAAC;UACd,CAAC,EAAE,UAAUtJ,GAAG,EAAE;YACdyiB,MAAM,CAACziB,GAAG,CAAC;UACf,CAAC,CAAC;QACN,CAAC,CAAC;MACN,CAAC,CAAC;IACN,CAAC;IAGD,IAAI,CAACikF,EAAE,CAAC4X,SAAS,CAACM,iBAAiB,GAAG,UAAUJ,UAAU,EAAEK,WAAW,EAAE;MACrE,IAAMJ,MAAM,GAAG,IAAI;MACnB,OAAOC,GAAG,CAAC//F,aAAa,CAACg/E,YAAY,CAAC,CAAC,EAAE,UAAA7qE,CAAC;QAAA,OAAIA,CAAC,GAAG+rF,WAAW,CAACn6F,MAAM;MAAA,GAAE,UAAUqH,CAAC,EAAE;QAC/E,OAAO,IAAIikB,OAAO,CAAC,UAAUjmB,OAAO,EAAEmb,MAAM,EAAE;UAC1C,IAAMy5E,gBAAgB,GAAG5yF,CAAC,GAAGyyF,UAAU;UACvCC,MAAM,CAACK,QAAQ,CAACD,WAAW,CAAC72F,KAAK,CAAC+D,CAAC,EAAE4yF,gBAAgB,CAAC,EAAE,UAAUn8C,EAAE,EAAE;YAClEz2C,CAAC,GAAG4yF,gBAAgB;YACpB50F,OAAO,CAACgC,CAAC,CAAC;UACd,CAAC,EAAE,UAAUtJ,GAAG,EAAE;YACdyiB,MAAM,CAACziB,GAAG,CAAC;YACXa,OAAO,CAACC,GAAG,CAACyyB,IAAI,CAACC,SAAS,CAACxzB,GAAG,CAAC,CAAC;UACpC,CAAC,CAAC;QACN,CAAC,CAAC;MACN,CAAC,CAAC;IACN,CAAC;EAEL,CAAC;EAED,IAAI,CAACs8F,QAAQ,GAAG,UAAUxuE,WAAW,EAAEyuE,GAAG,EAAEz6D,QAAQ,EAAE;IAClD,IAAI16B,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAAC,kEAAkE,EAAE,CAAClyB,WAAW,EAAEgU,QAAQ,CAAC,EAAE,UAAUie,EAAE,EAAE27C,SAAS,EAAE;QAChI,IAAIe,GAAG,GAAGf,SAAS,CAACllF,IAAI;QACxB,IAAIkmF,KAAK,GAAG,KAAK;QACjB,IAAID,GAAG,CAACx6F,MAAM,KAAK,CAAC,EAAE;UAClBy6F,KAAK,GAAG,IAAI;QAChB,CAAC,MACI;UACD,IAAIC,YAAY,GAAG,EAAE;UAErB,KAAK,IAAItsF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGosF,GAAG,CAACx6F,MAAM,EAAEoO,CAAC,EAAE,EAAE;YACjC,IAAI;cACAyQ,mDAAY,CAACy7E,GAAG,EAAEE,GAAG,CAAC92F,IAAI,CAAC0K,CAAC,CAAC,CAACwsF,QAAQ,CAAC,CAAC,CAAC;cACzC,IAAI98F,IAAI,GAAGwzB,IAAI,CAAC2T,KAAK,CAACu1D,GAAG,CAAC92F,IAAI,CAAC0K,CAAC,CAAC,CAACu3B,IAAI,CAAC;cAEvC,OAAO7nC,IAAI,CAAC+8F,QAAQ;cACpB,OAAO/8F,IAAI,CAACqvF,OAAO;cACnBuN,YAAY,CAACz6F,IAAI,CAACnC,IAAI,CAAC;YAC3B,CAAC,CACD,OAAO4rD,EAAE,EAAE;cACP;YAAA;UAER;UAEA,IAAIgxC,YAAY,CAAC16F,MAAM,IAAI,CAAC,EACxBy6F,KAAK,GAAG,IAAI,CAAC,KACZ,IAAIC,YAAY,CAAC16F,MAAM,KAAK,CAAC,EAAE;YAChC06F,YAAY,CAAC,CAAC,CAAC,CAACI,kBAAkB,GAAG,CAAC;YACtC31F,QAAQ,CAACE,OAAO,CAAC;cAAEvH,IAAI,EAAE48F,YAAY,CAAC,CAAC;YAAE,CAAC,CAAC;UAC/C,CAAC,MAAM;YAAE;YACL,IAAIK,QAAQ,GAAGL,YAAY,CAAC/6F,MAAM,CAAC,UAAUq7F,CAAC,EAAE;cAC5C,OAAO/gG,aAAa,CAAC68E,cAAc,CAACkkB,CAAC,CAACtqE,QAAQ,EAAE52B,aAAa,CAAC+rB,YAAY,CAAC;YAC/E,CAAC,CAAC;YAEF,IAAIk1E,QAAQ,CAAC/6F,MAAM,GAAG,CAAC,EAAE;cACrB+6F,QAAQ,CAAC,CAAC,CAAC,CAACD,kBAAkB,GAAGN,GAAG,CAACx6F,MAAM;cAC3CmF,QAAQ,CAACE,OAAO,CAAC;gBAAEvH,IAAI,EAAEi9F,QAAQ,CAAC,CAAC;cAAE,CAAC,CAAC;YAC3C,CAAC,MAAM;cACHL,YAAY,CAAC,CAAC,CAAC,CAACI,kBAAkB,GAAGN,GAAG,CAACx6F,MAAM;cAC/CmF,QAAQ,CAACE,OAAO,CAAC;gBAAEvH,IAAI,EAAE48F,YAAY,CAAC,CAAC;cAAE,CAAC,CAAC;YAC/C;UACJ;QAEJ;QAEA,IAAID,KAAK,EAAE;UACPt1F,QAAQ,CAACqb,MAAM,CACXnmB,cAAc,CAACe,SAAS,CAAC,wBAAwB,IAC5C,CAACtB,aAAa,CAACmB,QAAQ,GAAGZ,cAAc,CAACe,SAAS,CAAC,uCAAuC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAChH;MAEJ,CAAC,CAAC;IACN,CAAC,EAAE,UAAU2C,GAAG,EAAE;MACdhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC21F,KAAK,GAAG,UAAUpvE,WAAW,EAAE9D,QAAQ,EAAEoE,QAAQ,EAAEmuE,GAAG,EAAEz6D,QAAQ,EAAExd,CAAC,EAAE64E,EAAE,EAAEC,SAAS,EAAE;IACrF,IAAI,CAAC,CAACt7D,QAAQ,IAAI,CAAC,CAACy6D,GAAG,EACnB,OAAO,IAAI,CAACD,QAAQ,CAACxuE,WAAW,EAAEyuE,GAAG,EAAEz6D,QAAQ,CAAC;IAEpD,IAAI16B,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAAC,+DAA+D,EAAE,CAAClyB,WAAW,EAAE9D,QAAQ,CAAC,EAAE,UAAU+1B,EAAE,EAAE27C,SAAS,EAAE;QAC7H,IAAIe,GAAG,GAAGf,SAAS,CAACllF,IAAI;QACxB,IAAIkmF,KAAK,GAAG,KAAK;QACjB,IAAID,GAAG,CAACx6F,MAAM,KAAK,CAAC,EAAE;UAClBy6F,KAAK,GAAG,IAAI;QAChB,CAAC,MACI,IAAIU,SAAS,EAAE;UAChB,IAAI,CAAC,CAACX,GAAG,CAAC92F,IAAI,CAAC,CAAC,CAAC,CAACiiC,IAAI,EAAE;YACpB,IAAM7nC,KAAI,GAAGwzB,IAAI,CAAC2T,KAAK,CAACu1D,GAAG,CAAC92F,IAAI,CAAC,CAAC,CAAC,CAACiiC,IAAI,CAAC;YACzC,OAAO7nC,KAAI,CAAC+8F,QAAQ;YACpB,OAAO/8F,KAAI,CAACqvF,OAAO;YAEnBhoF,QAAQ,CAACE,OAAO,CAAC;cAAEvH,IAAI,EAAEA;YAAK,CAAC,CAAC;UACpC,CAAC,MACI;YACDqH,QAAQ,CAACqb,MAAM,CAACnmB,cAAc,CAACe,SAAS,CAAC,uCAAuC,CAAC,CAAC;UACtF;QACJ,CAAC,MACI;UACD,IAAI;YACA,IAAI0C,IAAI,GAAGwzB,IAAI,CAAC2T,KAAK,CAACpmB,mDAAY,CAACsN,QAAQ,EAAEquE,GAAG,CAAC92F,IAAI,CAAC,CAAC,CAAC,CAAC03F,KAAK,CAAC,CAAC;YAEhE,IAAI,CAAC,CAACZ,GAAG,CAAC92F,IAAI,CAAC,CAAC,CAAC,CAACiiC,IAAI,EAClB7nC,IAAI,GAAGwzB,IAAI,CAAC2T,KAAK,CAACu1D,GAAG,CAAC92F,IAAI,CAAC,CAAC,CAAC,CAACiiC,IAAI,CAAC;YAEvC,OAAO7nC,IAAI,CAAC+8F,QAAQ;YACpB,OAAO/8F,IAAI,CAACqvF,OAAO;YAEnBhoF,QAAQ,CAACE,OAAO,CAAC;cAAEvH,IAAI,EAAEA;YAAK,CAAC,CAAC;UACpC,CAAC,CACD,OAAO4rD,EAAE,EAAE;YACP+wC,KAAK,GAAG,IAAI;UAChB;QACJ;QAEA,IAAIA,KAAK,EACLt1F,QAAQ,CAACqb,MAAM,CAACnmB,cAAc,CAACe,SAAS,CAAC,qLAAqL,CAAC,IAAI,CAACtB,aAAa,CAACmB,QAAQ,GAAGZ,cAAc,CAACe,SAAS,CAAC,uCAAuC,CAAC,GAAG,EAAE,CAAC,CAAC;MAE7U,CAAC,CAAC;IACN,CAAC,EAAE,UAAU2C,GAAG,EAAE;MACdhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;;EAED;EACA,IAAI,CAAC+1F,SAAS,GAAG,UAAUv9F,IAAI,EAAE;IAC7B,IAAIquB,QAAQ,GAAGruB,IAAI,CAAC+8F,QAAQ;IAC5B,IAAIh7D,QAAQ,GAAG/hC,IAAI,CAAC88F,QAAQ;IAC5B,OAAO98F,IAAI,CAAC88F,QAAQ;IACpB,OAAO98F,IAAI,CAAC+8F,QAAQ;IACpB,IAAIS,UAAU,GAAGz8E,mDAAY,CAACsN,QAAQ,EAAEmF,IAAI,CAACC,SAAS,CAACzzB,IAAI,CAAC,CAAC;IAC7D,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,kHAAkH,EAC5H,CAACjgD,IAAI,CAACqvF,OAAO,EAAErvF,IAAI,CAAC4yB,QAAQ,EAAE4qE,UAAU,EAAEz7D,QAAQ,EAAEvO,IAAI,CAACC,SAAS,CAACzzB,IAAI,CAAC,CAAC,CAAC;IAClF,CAAC,EAAE,UAAUC,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;IACxB,CAAC,EAAE,YAAY;MACXoH,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;IAC1B,CAAC,CAAC;IAEF,OAAOqH,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACk2F,OAAO,GAAG,UAAU37D,QAAQ,EAAE;IAC/B,IAAI16B,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,sFAAsF,EAChG,CAACle,QAAQ,EAAE/lC,aAAa,CAACqkC,OAAO,EAAErkC,aAAa,CAACiuB,QAAQ,CAAC,CAAC;IAClE,CAAC,EAAE,UAAUhqB,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;IACxB,CAAC,EAAE,YAAY;MACXoH,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,CAAC;IAEF,OAAOF,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACm2F,eAAe,GAAG,UAAU39F,IAAI,EAAE;IACnC,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,kDAAkD,EAAE,CAACjkD,aAAa,CAACuoC,eAAe,EAAEvoC,aAAa,CAACmkC,WAAW,CAAC,EACxH,UAAU6f,EAAE,EAAE47C,OAAO,EAAE;QACnBh8F,CAAC,CAACmC,IAAI,CAAC/B,IAAI,CAACg7C,OAAO,EAAE,UAAUh5C,GAAG,EAAEtG,EAAE,EAAE;UAEpC,IAAIkiG,MAAM,GAAGpqE,IAAI,CAACC,SAAS,CAAC/3B,EAAE,CAAC;UAC/BskD,EAAE,CAACC,UAAU,CAAC,oHAAoH,EAC9H,CAACjkD,aAAa,CAACuoC,eAAe,EAAEvoC,aAAa,CAACmkC,WAAW,EAAEzkC,EAAE,CAAC8qB,UAAU,EAAE9qB,EAAE,CAAC4rC,WAAW,EAAEs2D,MAAM,EAAEpqE,IAAI,CAACC,SAAS,CAAC/3B,EAAE,CAACytF,GAAG,CAAC,CAAC,CAAC;QAClI,CAAC,CAAC;MACN,CAAC,CAAC;IACV,CAAC,EAAE,UAAUlpF,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,EAAE,YAAY;MACXtP,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;IAC1B,CAAC,CAAC;IAEF,OAAOqH,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACq2F,yBAAyB,GAAG,UAAU7vE,MAAM,EAAE;IAC/C,IAAI3mB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAAC,yDAAyD,EAAE,CAACjkD,aAAa,CAACuoC,eAAe,EAAEvW,MAAM,CAAC,EAC5G,UAAUgyB,EAAE,EAAE27C,SAAS,EAAE;QACrB,IAAIzkF,GAAG,GAAG,EAAE;QACZtX,CAAC,CAACmC,IAAI,CAAC5F,aAAa,CAACq0E,aAAa,CAACmrB,SAAS,CAACllF,IAAI,CAAC,EAAE,UAAUzU,GAAG,EAAEtG,EAAE,EAAE;UACnEwb,GAAG,CAAC/U,IAAI,CAACqxB,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAAC8zF,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC;QAEFnoF,QAAQ,CAACE,OAAO,CAAC;UAAEyzC,OAAO,EAAE9jC;QAAI,CAAC,CAAC;MACtC,CAAC,CAAC;IACV,CAAC,EAAE,UAAUjX,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACs2F,YAAY,GAAG,UAAUjP,WAAW,EAAE;IACvC,IAAIxnF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAAC,wEAAwE,EAClF,CAACjkD,aAAa,CAACuoC,eAAe,EAAEsqD,WAAW,EAAE7yF,aAAa,CAACmkC,WAAW,CAAC,EACvE,UAAU6f,EAAE,EAAE27C,SAAS,EAAE;QACrB,IAAIzkF,GAAG,GAAG,EAAE;QACZtX,CAAC,CAACmC,IAAI,CAAC5F,aAAa,CAACq0E,aAAa,CAACmrB,SAAS,CAACllF,IAAI,CAAC,EAAE,UAAUzU,GAAG,EAAEtG,EAAE,EAAE;UACnEwb,GAAG,CAAC/U,IAAI,CAACqxB,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAAC8zF,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC;QAEFnoF,QAAQ,CAACE,OAAO,CAAC;UAAEyzC,OAAO,EAAE9jC;QAAI,CAAC,CAAC;MACtC,CAAC,CAAC;IACV,CAAC,EAAE,UAAUjX,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACu2F,kBAAkB,GAAG,UAAUC,MAAM,EAAE;IACxC,IAAI32F,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B,IAAI49C,MAAM,GAAGpqE,IAAI,CAACC,SAAS,CAACuqE,MAAM,CAAC;MACnCh+C,EAAE,CAACC,UAAU,CAAC,+DAA+D,EACzE,CAAC29C,MAAM,EAAE5hG,aAAa,CAACuoC,eAAe,EAAEy5D,MAAM,CAAC12D,WAAW,CAAC,CAAC;IAEpE,CAAC,EAAE,UAAUrnC,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,EAAE,YAAY;MACXtP,QAAQ,CAACE,OAAO,CAACy2F,MAAM,CAAC;IAC5B,CAAC,CAAC;IACF,OAAO32F,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACy2F,eAAe,GAAG,UAAUpP,WAAW,EAAEqP,aAAa,EAAE;IACzD,IAAI9+E,IAAI,GAAG,IAAI;IACf,IAAI++E,aAAa,GAAG,QAAQ;IAC5B,IAAI7lF,GAAG,GAAG8G,IAAI,CAAC0+E,YAAY,CAACjP,WAAW,CAAC,CACpC/uF,IAAI,CAAC,UAAUE,IAAI,EAAE;MACjB,IAAIg+F,MAAM,GAAGh+F,IAAI,CAACg7C,OAAO,CAAC,CAAC,CAAC;MAC5B,IAAI9jC,GAAG,GAAG8mF,MAAM,CAACI,UAAU;MAC3Bx+F,CAAC,CAACmC,IAAI,CAACmV,GAAG,EAAE,UAAUlV,GAAG,EAAEtG,EAAE,EAAE;QAC3B,IAAIA,EAAE,CAAC2iG,aAAa,KAAKH,aAAa,EAAE;UAEpCC,aAAa,GAAGziG,EAAE,CAAC4iG,oBAAoB;UAEvC,IAAIC,MAAM,GAAGz+E,QAAQ,CAACq+E,aAAa,CAAC;UACpCziG,EAAE,CAAC4iG,oBAAoB,GAAGniG,aAAa,CAAC8gB,GAAG,CAACshF,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;UAE1D,OAAO,KAAK;QAChB;MACJ,CAAC,CAAC;MACF,OAAOn/E,IAAI,CAAC2+E,kBAAkB,CAACC,MAAM,CAAC,CAACl+F,IAAI,CAAC,YAAY;QACpD,OAAOq+F,aAAa;MACxB,CAAC,CAAC;IACN,CAAC,CAAC;IACN,OAAO7lF,GAAG;EACd,CAAC;EAED,IAAI,CAACkmF,eAAe,GAAG,UAAU3P,WAAW,EAAEqP,aAAa,EAAE7sF,KAAK,EAAE;IAChE,IAAI+N,IAAI,GAAG,IAAI;IACf;IACA,IAAI9G,GAAG,GAAG8G,IAAI,CAAC0+E,YAAY,CAACjP,WAAW,CAAC,CACpC/uF,IAAI,CAAC,UAAUE,IAAI,EAAE;MACjB,IAAIg+F,MAAM,GAAGh+F,IAAI,CAACg7C,OAAO,CAAC,CAAC,CAAC;MAC5B,IAAI9jC,GAAG,GAAG8mF,MAAM,CAACI,UAAU;MAC3Bx+F,CAAC,CAACmC,IAAI,CAACmV,GAAG,EAAE,UAAUlV,GAAG,EAAEtG,EAAE,EAAE;QAC3B,IAAIA,EAAE,CAAC2iG,aAAa,KAAKH,aAAa,EAAE;UACpCxiG,EAAE,CAAC4iG,oBAAoB,GAAGjtF,KAAK;UAC/B,OAAO,KAAK;QAChB;MACJ,CAAC,CAAC;MACF,OAAO+N,IAAI,CAAC2+E,kBAAkB,CAACC,MAAM,CAAC,CAACl+F,IAAI,CAAC,YAAY;QACpD,OAAO,IAAI;MACf,CAAC,CAAC;IACN,CAAC,CAAC;IACN,OAAOwY,GAAG;EACd,CAAC;EAED,IAAI,CAAC9G,kCAAkC,GAAG,YAAY;IAClD,IAAInK,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CACT,wCAAwC,EACxC,CAAC,iCAAiC,CAAC,EAAE,UAAUD,EAAE,EAAE76C,GAAG,EAAE;QACpD,IAAIsM,CAAC,GAAGtV,aAAa,CAACq0E,aAAa,CAACrrE,GAAG,CAACsR,IAAI,CAAC,CAAC,CAAC,CAAC;QAChDpP,QAAQ,CAACE,OAAO,CAACkK,CAAC,CAAC;MACvB,CAAC,CAAC;IACV,CAAC,EAAE,UAAUxR,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC8J,kCAAkC,GAAG,UAAUD,KAAK,EAAE;IACvD,IAAIhK,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,kHAAkH,EAC5H,CAAC5uC,KAAK,CAAC,CAAC;MACZhK,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC6gF,eAAe,GAAG,UAAUroF,IAAI,EAAE;IACnC,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBxG,OAAO,CAACy0C,IAAI,CAAC,oCAAoC,CAAC;IAElD,IAAI,CAAC2uC,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9C;MACgB;MAChB;MACgBA,EAAE,CAACC,UAAU,CAAC,sBAAsB,CAAC;MACrD;;MAEgB;MACAD,EAAE,CAACC,UAAU,CAAC,kFAAkF,EAC5F,CAAC,iBAAiB,EAAEjkD,aAAa,CAACuoC,eAAe,CAAC,CAAC;MACvDyb,EAAE,CAACC,UAAU,CAAC,kFAAkF,EAC5F,CAAC,gBAAgB,EAAEjkD,aAAa,CAACkkC,cAAc,CAAC,CAAC;MACrD8f,EAAE,CAACC,UAAU,CAAC,kFAAkF,EAC5F,CAAC,cAAc,EAAEjgD,IAAI,CAACqhB,IAAI,CAAC,CAAC;;MAEpC;;MAEIrhB,IAAI,CAACkX,GAAG,GAAG/a,aAAa,CAAC07E,QAAQ,CAAC73E,IAAI,CAACkX,GAAG,EAAE,WAAW,CAAC;MAC5D;;MAEA;;MAEItX,CAAC,CAACmC,IAAI,CAAC/B,IAAI,CAACkX,GAAG,EAAE,UAAUlV,GAAG,EAAEtG,EAAE,EAAE;QAChC;QACA,IAAGA,EAAE,CAACy3E,IAAI,EAAE;UACR,IAAIsV,EAAE,GAAG/sF,EAAE,CAACy3E,IAAI,CAACh8D,KAAK,CAAC,GAAG,CAAC,CAACvE,GAAG,CAAC,UAASsyE,CAAC,EAAE;YACxC,OAAOA,CAAC,CAAC7tE,IAAI,CAAC,CAAC;UACjB,CAAC,CAAC;UAEJ3b,EAAE,CAACy3E,IAAI,GAAGsV,EAAE,CAACh4E,IAAI,CAAC,GAAG,CAAC;QAC1B;QAEAuvC,EAAE,CAACC,UAAU,CAAC,qGAAqG,GAC/G,4FAA4F,GAC5F,8FAA8F,GAC9F,sGAAsG,GACtG,uEAAuE,GACvE,wFAAwF,EACxF,CAACvkD,EAAE,CAACwrF,SAAS,IAAI,IAAI,EAAExrF,EAAE,CAAC6rF,WAAW,IAAI,IAAI,GAAG,EAAE,GAAG7rF,EAAE,CAAC6rF,WAAW,EAAE7rF,EAAE,CAAC8rF,SAAS,IAAI,IAAI,EAAE9rF,EAAE,CAACgK,IAAI,IAAI,IAAI,EAAEhK,EAAE,CAAC8a,OAAO,IAAI,IAAI,EAAE9a,EAAE,CAAC+rF,iBAAiB,IAAI,IAAI,EAAE/rF,EAAE,CAACgtF,eAAe,IAAI,IAAI,EAAEhtF,EAAE,CAACktF,QAAQ,IAAI,IAAI,EAAEltF,EAAE,CAACmtF,UAAU,IAAI,IAAI,EACpOntF,EAAE,CAACqtF,YAAY,IAAI,IAAI,EAAErtF,EAAE,CAACutF,UAAU,IAAI,IAAI,EAAEvtF,EAAE,CAACk+B,KAAK,IAAI,CAAC,EAAEl+B,EAAE,CAACg9D,OAAO,IAAI,IAAI,EAAEh9D,EAAE,CAACi9D,OAAO,IAAI,IAAI,EAAEj9D,EAAE,CAACk9D,OAAO,IAAI,IAAI,EAAEplC,IAAI,CAACC,SAAS,CAAC/3B,EAAE,CAACwtF,aAAa,CAAC,EAAE11D,IAAI,CAACC,SAAS,CAAC/3B,EAAE,CAACytF,GAAG,IAAI,IAAI,CAAC,EAC3LztF,EAAE,CAACq+B,cAAc,EAAEr+B,EAAE,CAAC2tF,wBAAwB,IAAI,IAAI,EAAE3tF,EAAE,CAAC6tF,wBAAwB,IAAI,IAAI,EAAE7tF,EAAE,CAAC+tF,wBAAwB,IAAI,IAAI,EAChI/tF,EAAE,CAACuzB,OAAO,IAAI,IAAI,EAAEvzB,EAAE,CAACiuF,aAAa,IAAI,IAAI,EAAEjuF,EAAE,CAACy3E,IAAI,IAAI,IAAI,EAAEz3E,EAAE,CAACkuF,OAAO,IAAI,IAAI,EAAEluF,EAAE,CAACouF,KAAK,IAAI,IAAI,EAAEpuF,EAAE,CAACquF,uBAAuB,IAAI,IAAI,EAAEruF,EAAE,CAACuuF,sBAAsB,IAAI,IAAI,EAC1KvuF,EAAE,CAACyuF,eAAe,IAAI,IAAI,EAAEzuF,EAAE,CAAC0uF,WAAW,IAAI,IAAI,EAAE1uF,EAAE,CAAC2uF,aAAa,IAAI,IAAI,EAC5E3uF,EAAE,CAACgsF,GAAG,IAAI,IAAI,EAAEhsF,EAAE,CAACisF,GAAG,IAAI,IAAI,EAAEjsF,EAAE,CAACksF,GAAG,IAAI,IAAI,EAAElsF,EAAE,CAACmsF,GAAG,IAAI,IAAI,EAAEnsF,EAAE,CAACosF,GAAG,IAAI,IAAI,EAAEpsF,EAAE,CAACqsF,GAAG,IAAI,IAAI,EAAErsF,EAAE,CAACssF,GAAG,IAAI,IAAI,EAAEtsF,EAAE,CAACusF,GAAG,IAAI,IAAI,EAAEvsF,EAAE,CAACwsF,GAAG,IAAI,IAAI,EAAExsF,EAAE,CAACysF,IAAI,IAAI,IAAI,EAC/J30D,IAAI,CAACC,SAAS,CAAC;UACX62D,MAAM,EAAE5uF,EAAE,CAAC6uF,MAAM,IAAI,CAAC;UACtBC,MAAM,EAAE9uF,EAAE,CAAC+uF,MAAM,IAAI,CAAC;UACtBC,MAAM,EAAEhvF,EAAE,CAACivF,MAAM,IAAI,CAAC;UACtBC,MAAM,EAAElvF,EAAE,CAACmvF,MAAM,IAAI,CAAC;UACtBC,MAAM,EAAEpvF,EAAE,CAACqvF,MAAM,IAAI,CAAC;UACtBC,MAAM,EAAEtvF,EAAE,CAACuvF,MAAM,IAAI,CAAC;UACtBC,MAAM,EAAExvF,EAAE,CAACyvF,MAAM,IAAI,CAAC;UACtBC,MAAM,EAAE1vF,EAAE,CAAC2vF,MAAM,IAAI,CAAC;UACtBC,MAAM,EAAE5vF,EAAE,CAAC6vF,MAAM,IAAI,CAAC;UACtBC,OAAO,EAAE9vF,EAAE,CAAC+vF,OAAO,IAAI;QAC3B,CAAC,CAAC,CAAC,CAAC;MACZ,CAAC,CAAC;MAEFpkF,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAACkX,GAAG,CAAC;IAC9B,CAAC,EAAE,UAAUjX,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAMi3F,WAAW,GAAG,GAAG;EAEvB,IAAI,CAAC/nD,gBAAgB,GAAG,UAAU12C,IAAI,EAAqB;IAAA,IAAnB8tF,SAAS,GAAA7gF,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,KAAK;IACrD,IAAI5F,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI8X,IAAI,GAAG,IAAI;IAEf,IAAM2uE,cAAc,GAAGtxF,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACjC,IAAI,CAACwmF,SAAS,EAAE;MACZ,IAAI,CAAC5J,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;QAC9B;QACAl/C,OAAO,CAACy0C,IAAI,CAAC,qCAAqC,CAAC;QACnDyK,EAAE,CAACC,UAAU,CAAC,uBAAuB,CAAC;;QAEtC;QACAD,EAAE,CAACC,UAAU,CAAC,kFAAkF,EAC5F,CAAC,kBAAkB,EAAEjkD,aAAa,CAACuoC,eAAe,CAAC,CAAC;QACxDyb,EAAE,CAACC,UAAU,CAAC,kFAAkF,EAC5F,CAAC,gBAAgB,EAAEjkD,aAAa,CAACkkC,cAAc,CAAC,CAAC;QACrD8f,EAAE,CAACC,UAAU,CAAC,kFAAkF,EAC5F,CAAC,cAAc,EAAEjgD,IAAI,CAACqhB,IAAI,CAAC,CAAC;QAC5BvgB,OAAO,CAAC20C,OAAO,CAAC,qCAAqC,CAAC;QAC1Ds4C,cAAc,CAACxmF,OAAO,CAAC,CAAC;MAC5B,CAAC,EAAE,UAAUtH,GAAG,EAAE;QACd8tF,cAAc,CAACrrE,MAAM,CAACziB,GAAG,CAAC;MAC9B,CAAC,CAAC;IACN,CAAC,MAAM;MACH,IAAI,CAACikF,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;QAC9B;QACAl/C,OAAO,CAACy0C,IAAI,CAAC,qCAAqC,CAAC;QACnD,IAAI9jB,GAAG,GAAGzxB,IAAI,CAACkX,GAAG,CAACtE,GAAG,CAAC,UAASlX,EAAE,EAAE;UAChC,OAAOA,EAAE,CAAC4K,EAAE;QAChB,CAAC,CAAC;QACF,IAAIo4F,YAAY,GAAGjtE,GAAG,CAAC7e,GAAG,CAAC,YAAY;UACnC,OAAO,GAAG;QACd,CAAC,CAAC,CAACnC,IAAI,CAAC,GAAG,CAAC;QACZuvC,EAAE,CAACC,UAAU,CAAC,qCAAqC,GAAGy+C,YAAY,GAAG,GAAG,EAAEjtE,GAAG,CAAC;QAC9E3wB,OAAO,CAAC20C,OAAO,CAAC,qCAAqC,CAAC;QACtDs4C,cAAc,CAACxmF,OAAO,CAAC,CAAC;MAC5B,CAAC,EAAE,UAAUtH,GAAG,EAAE;QACd8tF,cAAc,CAACrrE,MAAM,CAACziB,GAAG,CAAC;MAC9B,CAAC,CAAC;IACN;IAEA8tF,cAAc,CAACvmF,OAAO,CAAC1H,IAAI,CAAC,YAAY;MACpCgB,OAAO,CAACy0C,IAAI,CAAC,6BAA6B,CAAC;MAC3C,OAAOn2B,IAAI,CAAC8kE,EAAE,CAAC6X,YAAY,CAAC0C,WAAW,EAAEz+F,IAAI,CAACkX,GAAG,EAAE,UAAU8oC,EAAE,EAAEtkD,EAAE,EAAE;QACjEskD,EAAE,CAACC,UAAU,CAAC,+NAA+N,EAC7O,CAACvkD,EAAE,CAAC4K,EAAE,EAAE5K,EAAE,CAACgK,IAAI,EAAEhK,EAAE,CAAC8R,KAAK,EAAE9R,EAAE,CAAC+R,WAAW,EAAE/R,EAAE,CAAC8K,KAAK,EAAE9K,EAAE,CAACuyF,mBAAmB,EAAEz6D,IAAI,CAACC,SAAS,CAAC/3B,EAAE,CAACw7C,SAAS,CAAC,EAAE1jB,IAAI,CAACC,SAAS,CAAC/3B,EAAE,CAACwyF,eAAe,CAAC,EAAExyF,EAAE,CAAC6gC,QAAQ,EAC1J/I,IAAI,CAACC,SAAS,CAAC/3B,EAAE,CAACq7C,SAAS,CAAC,EAC5BvjB,IAAI,CAACC,SAAS,CAAC;UACXgG,yBAAyB,EAAE/9B,EAAE,CAAC+9B,yBAAyB;UACvDF,yBAAyB,EAAE79B,EAAE,CAAC69B,yBAAyB;UACvDG,MAAM,EAAEh+B,EAAE,CAACyyF;QACf,CAAC,CAAC,EACF,CAAC,CAACzyF,EAAE,CAAC2yF,OAAO,GAAG3yF,EAAE,CAAC2yF,OAAO,GAAG,CAAC,EAC7B,CAAC,CAAC3yF,EAAE,CAAC4yF,WAAW,GAAG5yF,EAAE,CAAC4yF,WAAW,GAAG,CAAC,EACjC5yF,EAAE,CAACijG,cAAc,EACrBjjG,EAAE,CAAC0yF,SAAS,CAAC,CAAC;MAClB,CAAC,CAAC,CAACtuF,IAAI,CAAC,YAAY;QAChBgB,OAAO,CAAC20C,OAAO,CAAC,6BAA6B,CAAC;QAC9CpuC,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAACkX,GAAG,CAAC;MAC9B,CAAC,CAAC,SAAM,CAAC,UAAUjX,GAAG,EAAE;QACpBoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;QACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;MACvC,CAAC,CAAC;IACN,CAAC,CAAC,SAAM,CAAC,UAAU1W,GAAG,EAAE;MACpBoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC6lF,gBAAgB,GAAG,UAAUrjD,KAAK,EAAE;IACrC,IAAI3iC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI0iC,KAAK,KAAK,IAAI,EAAE;MAChB3iC,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B;IAEA,IAAI,CAAC08E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAAC,yDAAyD,EAAE,EAAE,EACvE,UAAUD,EAAE,EAAE27C,SAAS,EAAE;QACrB,IAAIA,SAAS,CAACllF,IAAI,CAACvU,MAAM,KAAK,CAAC,IAC3By5F,SAAS,CAACllF,IAAI,CAAC7Q,IAAI,CAAC,CAAC,CAAC,CAAC8L,KAAK,KAAK1V,aAAa,CAACuoC,eAAe,EAAE;UAChEl9B,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAC1B,CAAC,MACI;UACDy4C,EAAE,CAACC,UAAU,CAAC,8HAA8H,EAAE,EAAE,EAC5I,UAAUD,EAAE,EAAE27C,SAAS,EAAE;YACrB,IAAIA,SAAS,CAACllF,IAAI,CAACvU,MAAM,KAAK,CAAC,IAC3ByzB,IAAI,CAACo+B,KAAK,CAAC4nC,SAAS,CAACllF,IAAI,CAAC7Q,IAAI,CAAC,CAAC,CAAC,CAAC04D,IAAI,CAAC,GAAG,CAAC,EAC3Cj3D,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC,CAAC,KAEvBF,QAAQ,CAACE,OAAO,CAAC,KAAK,CAAC;UAC/B,CAAC,CAAC;QACV;MACJ,CAAC,CAAC;IAGV,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACyuC,iBAAiB,GAAG,UAAUjM,KAAK,EAAE;IACtC,IAAI3iC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI0iC,KAAK,KAAK,IAAI,EAAE;MAChB3iC,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B;IAEA,IAAI,CAAC08E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAAC,0DAA0D,EAAE,EAAE,EACxE,UAAUD,EAAE,EAAE27C,SAAS,EAAE;QACrB,IAAIA,SAAS,CAACllF,IAAI,CAACvU,MAAM,KAAK,CAAC,IAC3By5F,SAAS,CAACllF,IAAI,CAAC7Q,IAAI,CAAC,CAAC,CAAC,CAAC8L,KAAK,KAAK1V,aAAa,CAACuoC,eAAe,EAAE;UAChEl9B,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAC1B,CAAC,MACI;UACDy4C,EAAE,CAACC,UAAU,CAAC,8HAA8H,EAAE,EAAE,EAC5I,UAAUD,EAAE,EAAE27C,SAAS,EAAE;YACrB,IAAIA,SAAS,CAACllF,IAAI,CAACvU,MAAM,KAAK,CAAC,IAC3ByzB,IAAI,CAACo+B,KAAK,CAAC4nC,SAAS,CAACllF,IAAI,CAAC7Q,IAAI,CAAC,CAAC,CAAC,CAAC04D,IAAI,CAAC,GAAG,CAAC,EAC3Cj3D,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC,CAAC,KAEvBF,QAAQ,CAACE,OAAO,CAAC,KAAK,CAAC;UAC/B,CAAC,CAAC;QACV;MACJ,CAAC,CAAC;IAGV,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC8lF,eAAe,GAAG,UAAUtjD,KAAK,EAAE;IACpC,IAAI3iC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI0iC,KAAK,KAAK,IAAI,EAAE;MAChB3iC,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,MACI;MACD,IAAI,CAAC28E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;QAClCA,EAAE,CAACC,UAAU,CAAC,8DAA8D,EAAE,EAAE,EAC5E,UAAUD,EAAE,EAAE27C,SAAS,EAAE;UACrB,IAAIA,SAAS,CAACllF,IAAI,CAACvU,MAAM,GAAG,CAAC,EACzBmF,QAAQ,CAACE,OAAO,CAACo0F,SAAS,CAACllF,IAAI,CAAC7Q,IAAI,CAAC,CAAC,CAAC,CAACyb,IAAI,CAAC,CAAC,KAE9Cha,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAC9B,CAAC,CAAC;MACV,CAAC,EAAE,UAAUtH,GAAG,EAAE;QACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;QACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;MACvC,CAAC,CAAC;IACN;IAEA,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC0uC,gBAAgB,GAAG,UAAUlM,KAAK,EAAE;IACrC,IAAI3iC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI0iC,KAAK,KAAK,IAAI,EAAE;MAChB3iC,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,MACI;MACD,IAAI,CAAC28E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;QAClCA,EAAE,CAACC,UAAU,CAAC,8DAA8D,EAAE,EAAE,EAC5E,UAAUD,EAAE,EAAE27C,SAAS,EAAE;UACrB,IAAIA,SAAS,CAACllF,IAAI,CAACvU,MAAM,GAAG,CAAC,EACzBmF,QAAQ,CAACE,OAAO,CAACo0F,SAAS,CAACllF,IAAI,CAAC7Q,IAAI,CAAC,CAAC,CAAC,CAACyb,IAAI,CAAC,CAAC,KAE9Cha,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAC9B,CAAC,CAAC;MACV,CAAC,EAAE,UAAUtH,GAAG,EAAE;QACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;QACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;MACvC,CAAC,CAAC;IACN;IAEA,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACqrE,0BAA0B,GAAG,UAAUC,IAAI,EAAE;IAC9C,IAAI,CAAC92E,aAAa,CAACysC,kBAAkB,EACjC,OAAO,IAAI;IAEf,IAAIsqC,SAAS,GAAGv/C,IAAI,CAAC2T,KAAK,CAACnrC,aAAa,CAAC0sC,YAAY,CAAC;IACtD,IAAIsqC,KAAK,GAAG,IAAI;IAChB,IAAI,CAAC,CAACD,SAAS,EAAE;MAEb,IAAI,CAACD,IAAI,EAAE;QACPE,KAAK,GAAGD,SAAS,CAAClxE,MAAM,CAAC,UAAUnG,EAAE,EAAE;UAAE,OAAOA,EAAE,CAAC8sC,OAAO,KAAKsqC,IAAI;QAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,IAAI,CAACE,KAAK,EACN,OAAO,IAAI;QAEf,IAAI,CAAC,CAACA,KAAK,CAACC,MAAM,IAAID,KAAK,CAACC,MAAM,CAAC/wE,MAAM,GAAG,CAAC,EAAE;UAC3C8wE,KAAK,CAACC,MAAM,GAAG92E,aAAa,CAACy2E,SAAS,CAACI,KAAK,CAACC,MAAM,CAAC;QACxD;QACA,IAAI,CAAC,CAACD,KAAK,CAACE,UAAU,IAAIF,KAAK,CAACE,UAAU,CAAChxE,MAAM,GAAG,CAAC,EAAE;UACnD8wE,KAAK,CAACE,UAAU,GAAG/2E,aAAa,CAACy2E,SAAS,CAACI,KAAK,CAACE,UAAU,CAAC;QAChE;QACA,IAAI,CAAC,CAACF,KAAK,CAACG,IAAI,IAAIH,KAAK,CAACG,IAAI,CAACjxE,MAAM,GAAG,CAAC,EAAE;UACvC8wE,KAAK,CAACG,IAAI,GAAGh3E,aAAa,CAACy2E,SAAS,CAACI,KAAK,CAACG,IAAI,CAAC;QACpD;QAEA,IAAI,CAACH,KAAK,CAACI,gBAAgB,EACvBJ,KAAK,CAACI,gBAAgB,GAAG,IAAI;MACrC;IACJ;IAEA,OAAOJ,KAAK;EAChB,CAAC;EAED,IAAI,CAACoa,oBAAoB,GAAG,UAAUptF,IAAI,EAAE;IACxC,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAItH,IAAI,IAAIA,IAAI,CAACkC,MAAM,GAAG,CAAC,EAAE;MACzBmF,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MACtB,OAAOqH,QAAQ,CAACG,OAAO;IAC3B;IAEA1G,OAAO,CAACy0C,IAAI,CAAC,yCAAyC,CAAC;IAEvD,IAAI,CAAC2uC,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAAC,+KAA+K,EAAE,EAAE,EAC7L,UAAUD,EAAE,EAAE76C,GAAG,EAAE;QACfkC,QAAQ,CAACE,OAAO,CAACpL,aAAa,CAACq0E,aAAa,CAACrrE,GAAG,CAACsR,IAAI,CAAC,CAAC;MAC3D,CAAC,CAAC;IACV,CAAC,EAAE,UAAUxW,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;;EAED;EACA,IAAI,CAAC4uB,MAAM,GAAG,UAAU5f,OAAO,EAAExS,IAAI,EAAE+nF,YAAY,EAAEjZ,IAAI,EAAEoU,SAAS,EAAE;IAClE,IAAI7/E,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI8X,IAAI,GAAG,IAAI;IACf,IAAI,CAAC8kE,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,gCAAgC,CAAC;MAE/C,IAAIgsC,OAAO,GAAG,IAAI;MAClB,IAAI1iF,CAAC;MACL,IAAI,CAAC,CAACvN,aAAa,CAACysC,kBAAkB,IAAIsjD,YAAY,IAAI/vF,aAAa,CAACysC,kBAAkB,EAAE;QACxF,IAAIuqC,KAAK,GAAG72E,aAAa,CAAC02E,0BAA0B,CAACC,IAAI,CAAC;QAC1D,IAAI,CAACE,KAAK,EAAE;UACR3rE,QAAQ,CAACqb,MAAM,CAAC,uBAAuB,CAAC;UACxC;QACJ,CAAC,MACI;UACD,IAAI0wD,gBAAgB,GAAI,CAACJ,KAAK,IAAIA,KAAK,CAACI,gBAAgB,KAAK,IAAI,GAAI,IAAI,GAAG,KAAK;UACjF,IAAGA,gBAAgB,KAAK,KAAK,EACzB6Y,OAAO,GAAG,iEAAiE,CAAC,KAE5EA,OAAO,GAAG,iEAAiE;UAE/E,IAAI,CAAC,CAACjZ,KAAK,CAACC,MAAM,IAAID,KAAK,CAACC,MAAM,CAAC/wE,MAAM,GAAG,CAAC,EAAE;YAC3C,IAAI+wE,MAAM,GAAG,EAAE;YACfr3E,OAAO,CAAC4M,OAAO,CAACwqE,KAAK,CAACC,MAAM,EAAE,UAAUv3E,EAAE,EAAE;cACxCu3E,MAAM,CAAC9wE,IAAI,CAAChG,aAAa,CAAC+0C,YAAY,CAACx1C,EAAE,CAAC,CAAC;YAC/C,CAAC,CAAC;YAEF6N,CAAC,GAAG,YAAY,GAAG0pE,MAAM,CAACxiE,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;YAC5Cw7E,OAAO,IAAI,GAAG,GAAG7Y,gBAAgB,GAAG,IAAI,GAAG7pE,CAAC,GAAG,GAAG;UACtD;UACA,IAAI,CAAC,CAACypE,KAAK,CAACE,UAAU,IAAIF,KAAK,CAACE,UAAU,CAAChxE,MAAM,GAAG,CAAC,EAAE;YACnD,IAAIgxE,UAAU,GAAG,EAAE;YACnBt3E,OAAO,CAAC4M,OAAO,CAACwqE,KAAK,CAACE,UAAU,EAAE,UAAUx3E,EAAE,EAAE;cAC5Cw3E,UAAU,CAAC/wE,IAAI,CAAChG,aAAa,CAAC+0C,YAAY,CAACx1C,EAAE,CAAC,CAAC;YACnD,CAAC,CAAC;YAEF6N,CAAC,GAAG,eAAe,GAAG2pE,UAAU,CAACziE,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;YACnDw7E,OAAO,IAAI,GAAG,GAAG7Y,gBAAgB,GAAG,IAAI,GAAG7pE,CAAC,GAAG,GAAG;UACtD;UACA,IAAI,CAAC,CAACypE,KAAK,CAACG,IAAI,IAAIH,KAAK,CAACG,IAAI,CAACjxE,MAAM,GAAG,CAAC,EAAE;YACvCqH,CAAC,GAAG,EAAE;YACN3N,OAAO,CAAC4M,OAAO,CAACwqE,KAAK,CAACG,IAAI,EAAE,UAAUz3E,EAAE,EAAE;cACtC,IAAIkjG,GAAG,GAAGljG,EAAE,CAAC2b,IAAI,CAAC,CAAC;cACnB,IAAI9N,CAAC,CAACrH,MAAM,GAAG,CAAC,EACZqH,CAAC,IAAI,MAAM;cAC/C;cACoCA,CAAC,IAAI,cAAc,GAAGpN,aAAa,CAAC+0C,YAAY,CAAC0tD,GAAG,CAAC,GAAG,GAAG;cAC3Dr1F,CAAC,IAAI,mBAAmB,GAAGpN,aAAa,CAAC+0C,YAAY,CAAC0tD,GAAG,CAAC,GAAG,GAAG;cAChEr1F,CAAC,IAAI,iBAAiB,GAAGpN,aAAa,CAAC+0C,YAAY,CAAC0tD,GAAG,CAAC,GAAG,KAAK;cAChEr1F,CAAC,IAAI,mBAAmB,GAAGpN,aAAa,CAAC+0C,YAAY,CAAC0tD,GAAG,CAAC,GAAG,KAAK;YAC1E,CAAC,CAAC;YAEF3S,OAAO,IAAI,GAAG,GAAG7Y,gBAAgB,GAAG,IAAI,GAAG7pE,CAAC,GAAG,GAAG;UACtD;UAEAy2C,EAAE,CAACC,UAAU,CAACgsC,OAAO,EAAE,EAAE,EACrB,UAAUjsC,EAAE,EAAE76C,GAAG,EAAE;YACfkC,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC05F,YAAY,CAAC;UACtC,CAAC,CAAC;QACV;MACJ,CAAC,MACI;QACD,IAAI,CAAC,CAAC3X,SAAS,EAAE;UACb+E,OAAO,GAAG,mHAAmH;UAC7HjsC,EAAE,CAACC,UAAU,CAACgsC,OAAO,EACjB,CAAC/E,SAAS,EAAEA,SAAS,CAAC,EAAE,UAAUlnC,EAAE,EAAE76C,GAAG,EAAE;YACvCkC,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC05F,YAAY,CAAC;UACtC,CAAC,CAAC;QACV,CAAC,MACI;UACD;UACA,IAAIn7B,SAAS,GAAGP,aAAa,CAACQ,eAAe,CAAC3/D,IAAI,CAAC;;UAEnD;UACA,IAAIwoF,oBAAoB,GAAG,KAAK;UAChC,IAAIC,YAAY,GAAG,KAAK;UACxB,IAAIjF,SAAS,GAAG,IAAI;UACpB,IAAIhxE,OAAO,IAAI,OAAQA,OAAQ,KAAK,QAAQ,EAAE;YAC1Ci2E,YAAY,GAAGj2E,OAAO,CAAC4J,YAAY;YACnCosE,oBAAoB,GAAG,IAAI;YAC3BhF,SAAS,GAAGhxE,OAAO,CAAC+I,GAAG;UAC3B;UAEA,IAAI,CAACitE,oBAAoB,EAAE;YAE3BP,OAAO,GAAG,6DAA6D,GAC7D,iBAAiB,GAAGjoF,IAAI,GAAG,GAAG;YACpC,IAAGwS,OAAO,EAAE;cACRy1E,OAAO,IAAK,aAAa,GAAGz1E,OAAO,GAAG,GAAG,GAC7B,aAAa,GAAGA,OAAO,GAAG,GAAG,GAC7B,aAAa,GAAGA,OAAO,GAAG,GAAG,GAC7B,aAAa,GAAGA,OAAO,GAAG,GAAG,GAC7B,aAAa,GAAGA,OAAO,GAAG,GAAG,GAC7B,aAAa,GAAGA,OAAO,GAAG,GAAG,GAC7B,aAAa,GAAGA,OAAO,GAAG,GAAG,GAC7B,aAAa,GAAGA,OAAO,GAAG,GAAG,GAC7B,aAAa,GAAGA,OAAO,GAAG,GAAG,GAC7B,cAAc,GAAGA,OAAO,GAAG,GAAG;YAC9C;YAEAy1E,OAAO,IAAI7sE,IAAI,CAAC0/E,cAAc,CAAC,aAAa,EAAEp7B,SAAS,CAAC,GACxDtkD,IAAI,CAAC0/E,cAAc,CAAC,MAAM,EAAEp7B,SAAS,CAAC,GACtCtkD,IAAI,CAAC0/E,cAAc,CAAC,QAAQ,EAAEp7B,SAAS,CAAC;UAC5C,CAAC,MAAM;YACHuoB,OAAO,GAAG,6DAA6D,GACvE,GAAG,IAAEQ,YAAY,GAAG,WAAW,GAAG,aAAa,CAAC,GAAC,SAAS,GAAGjF,SAAS,GAAG,GAAG;UAChF;UAEAxnC,EAAE,CAACC,UAAU,CAACgsC,OAAO,EAChB,EAAE,EAAC,UAAUjsC,EAAE,EAAE76C,GAAG,EAAE;YACnBkC,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC05F,YAAY,CAAC;UACtC,CAAC,CAAC;QACV;MACJ;IAEJ,CAAC,EAAE,UAAU5+F,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACs3F,cAAc,GAAG,UAAUtyF,KAAK,EAAEuyF,WAAW,EAAE;IAChD,IAAI55F,GAAG,GAAG,MAAM;IAChB,IAAI45F,WAAW,CAAC78F,MAAM,KAAK,CAAC,EAAEiD,GAAG,GAAG,GAAG,CAAC,KACnC,IAAI45F,WAAW,CAAC78F,MAAM,KAAK,CAAC,EAAEiD,GAAG,IAAIqH,KAAK,GAAG,UAAU,GAAGuyF,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAChF;MACD55F,GAAG,IAAI,IAAI;MACX,IAAIsuD,KAAK,GAAG,IAAI;MAEhB73D,OAAO,CAAC4M,OAAO,CAACu2F,WAAW,EAAE,UAAUrjG,EAAE,EAAE;QACvC,IAAI,CAAC+3D,KAAK,EAAEtuD,GAAG,IAAI,OAAO,CAAC,KACtBsuD,KAAK,GAAG,KAAK;QAClBtuD,GAAG,IAAIqH,KAAK,GAAG,UAAU,GAAG9Q,EAAE,GAAG,IAAI;MACzC,CAAC,CAAC;MAEFyJ,GAAG,IAAI,IAAI;IACf;IAEA,OAAOA,GAAG;EACd,CAAC;EAED,IAAI,CAAC2mF,cAAc,GAAG,UAAU5E,SAAS,EAAE;IACvC,IAAI7/E,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CACT,iBAAiB,GACjB,mKAAmK,GACnK,+HAA+H,GAC/H,KAAK,EACL,CAACinC,SAAS,CAAC,EAAE,UAAUlnC,EAAE,EAAE76C,GAAG,EAAE;QAC5B;QACA,IAAInF,IAAI,GAAG7D,aAAa,CAACq0E,aAAa,CAACrrE,GAAG,CAACsR,IAAI,CAAC;QAChD,IAAIgN,OAAO,GAAG,CAAC,CAAC;QAChBA,OAAO,CAACzjB,IAAI,GAAGitD,OAAO,CAACjtD,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;QAC3CqH,QAAQ,CAACE,OAAO,CAACkc,OAAO,CAAC;MAC7B,CAAC,CAAC;IAEV,CAAC,EAAE,UAAUxjB,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC+lF,YAAY,GAAG,UAAUC,QAAQ,EAAE;IACpC,IAAInmF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CACT,sDAAsD,EACtD,CAACutC,QAAQ,CAAC,EAAE,UAAUxtC,EAAE,EAAE76C,GAAG,EAAE;QAC3B,IAAIsM,CAAC,GAAGtV,aAAa,CAACq0E,aAAa,CAACrrE,GAAG,CAACsR,IAAI,CAAC;QAC7CpP,QAAQ,CAACE,OAAO,CAACkK,CAAC,CAAC;MACvB,CAAC,CAAC;IACV,CAAC,EAAE,UAAUxR,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;;IAEvB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA;EACJ,CAAC;;EAED;EACA,IAAI,CAACmlF,cAAc,GAAG,YAAY;IAC9B,IAAItlF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CACT,+BAA+B,GAC/B,yOAAyO,GACzO,6KAA6K,GAC7K,IAAI,EACJ,EAAE,EAAE,UAAUD,EAAE,EAAE76C,GAAG,EAAE;QACnBkC,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACsR,IAAI,CAAC7Q,IAAI,CAAC,CAAC,CAAC,CAACrI,GAAG,CAAC;MAC1C,CAAC,CAAC;IACV,CAAC,EAAE,UAAU0C,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC0lF,aAAa,GAAG,UAAUh2D,IAAI,EAAEwY,QAAQ,EAAEw3C,SAAS,EAAE;IACtD,IAAI7/E,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClC,IAAI4yC,CAAC,GAAG,EAAE;MAEV,IAAI,CAAC,CAAC1L,SAAS,EAAE;QACb0L,CAAC,GAAG,gjBAAgjB,GAAG1L,SAAS,GAAG,GAAG;MAC1kB,CAAC,MACI;QACD;QACA;QACA;QACA;;QAEA0L,CAAC,GAAG,iBAAiB,GACjB,wlCAAwlC,GACxlC,okCAAokC,GACpkC,KAAK;MAEb;MAEA5yC,EAAE,CAACC,UAAU,CACT2yC,CAAC,EACD,EAAE,EAAE,UAAU5yC,EAAE,EAAE76C,GAAG,EAAE;QACnB;QACA,IAAInF,IAAI,GAAG7D,aAAa,CAACq0E,aAAa,CAACrrE,GAAG,CAACsR,IAAI,CAAC;;QAEhD;QACA7a,OAAO,CAAC4M,OAAO,CAACxI,IAAI,EAAE,UAAUtE,EAAE,EAAE;UAChC,IAAIA,EAAE,CAAC01D,QAAQ,IAAI,CAAC,EAAE;YAClB,IAAI11D,EAAE,CAAC6B,GAAG,IAAI,CAAC,EAAE;cACb7B,EAAE,CAAC8C,IAAI,GAAG9C,EAAE,CAAC2rF,MAAM;cACnB3rF,EAAE,CAAC6/B,uBAAuB,GAAG7/B,EAAE,CAACsuF,sBAAsB;cACtDtuF,EAAE,CAACyc,SAAS,GAAGzc,EAAE,CAAC4+B,QAAQ;YAC9B,CAAC,MAAM;cACH5+B,EAAE,CAAC01D,QAAQ,GAAG,CAAC,CAAC,CAAC;YACrB;UACJ;QACJ,CAAC,CAAC;QAEF,IAAI3tC,OAAO,GAAG,CAAC,CAAC;QAChBA,OAAO,CAACyT,IAAI,GAAGA,IAAI;QACnBzT,OAAO,CAACzjB,IAAI,GAAGitD,OAAO,CAACjtD,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;QAC3CyjB,OAAO,CAACzjB,IAAI,GAAGyjB,OAAO,CAACzjB,IAAI,CAACwF,KAAK,CAAC0xB,IAAI,GAAGwY,QAAQ,EAAEA,QAAQ,IAAIxY,IAAI,GAAG,CAAC,CAAC,CAAC;QACzEt7B,OAAO,CAAC4M,OAAO,CAACib,OAAO,CAACzjB,IAAI,EAAE,UAAStE,EAAE,EAAE;UACvC,IAAGA,EAAE,CAACyrF,SAAS,EAAE;YACb,IAAIh2C,CAAC,GAAG3d,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACyrF,SAAS,CAAC;YAChCh2C,CAAC,CAACzV,GAAG,GAAGhgC,EAAE,CAACggC,GAAG;YACdyV,CAAC,CAACxV,GAAG,GAAGjgC,EAAE,CAACigC,GAAG;YACdwV,CAAC,CAACvV,GAAG,GAAGlgC,EAAE,CAACkgC,GAAG;YACduV,CAAC,CAACtV,GAAG,GAAGngC,EAAE,CAACmgC,GAAG;YACdsV,CAAC,CAACrV,GAAG,GAAGpgC,EAAE,CAACogC,GAAG;YACdqV,CAAC,CAACpV,GAAG,GAAGrgC,EAAE,CAACqgC,GAAG;YACdoV,CAAC,CAACnV,GAAG,GAAGtgC,EAAE,CAACsgC,GAAG;YACdmV,CAAC,CAAClV,GAAG,GAAGvgC,EAAE,CAACugC,GAAG;YACdkV,CAAC,CAACjV,GAAG,GAAGxgC,EAAE,CAACwgC,GAAG;YACdiV,CAAC,CAAChV,IAAI,GAAGzgC,EAAE,CAACygC,IAAI;YAChBzgC,EAAE,CAACyrF,SAAS,GAAG3zD,IAAI,CAACC,SAAS,CAAC0d,CAAC,CAAC;UACpC;QACJ,CAAC,CAAC;QAEF9pC,QAAQ,CAACE,OAAO,CAACkc,OAAO,CAAC;MAC7B,CAAC,CAAC;IACV,CAAC,EAAE,UAAUxjB,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACkmF,oBAAoB,GAAG,YAAY;IACpC,IAAIrmF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CACT,iDAAiD,EACjD,EAAE,EAAE,UAAUD,EAAE,EAAE76C,GAAG,EAAE;QACnBkC,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACsR,IAAI,CAAC7Q,IAAI,CAAC,CAAC,CAAC,CAACrI,GAAG,CAAC;MAC1C,CAAC,CAAC;IACV,CAAC,EAAE,UAAU0C,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAComF,mBAAmB,GAAG,UAAU12D,IAAI,EAAEwY,QAAQ,EAAE;IACjD,IAAIroC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CACT,mNAAmN,EACnN,EAAE,EAAE,UAAUD,EAAE,EAAE76C,GAAG,EAAE;QACnB;QACA,IAAInF,IAAI,GAAG7D,aAAa,CAACq0E,aAAa,CAACrrE,GAAG,CAACsR,IAAI,CAAC,CAAC,CAAC;QAClD,IAAIgN,OAAO,GAAG,CAAC,CAAC;QAChBA,OAAO,CAACyT,IAAI,GAAGA,IAAI;QACnBzT,OAAO,CAACzjB,IAAI,GAAGitD,OAAO,CAACjtD,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;QAC3CyjB,OAAO,CAACzjB,IAAI,GAAGyjB,OAAO,CAACzjB,IAAI,CAACwF,KAAK,CAAC0xB,IAAI,GAAGwY,QAAQ,EAAEA,QAAQ,IAAIxY,IAAI,GAAG,CAAC,CAAC,CAAC;QACzE7vB,QAAQ,CAACE,OAAO,CAACkc,OAAO,CAAC;MAC7B,CAAC,CAAC;IACV,CAAC,EAAE,UAAUxjB,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC4nF,cAAc,GAAG,UAAUvxD,IAAI,EAAEqJ,IAAI,EAAE;IACxC,IAAI7/B,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B;MACAA,EAAE,CAACC,UAAU,CAAC,uIAAuI,EACjJ,CAACjkD,aAAa,CAACuoC,eAAe,EAAE1G,IAAI,CAAC3+B,EAAE,EAAEgoC,IAAI,CAACqoD,QAAQ,EAAE/7D,IAAI,CAACC,SAAS,CAACoK,IAAI,CAAC,EAAErK,IAAI,CAACC,SAAS,CAACyT,IAAI,CAAC,EAAErJ,IAAI,CAACg7C,WAAW,CAAC,CAAC;;MAE1H;MACA,IAAIh7C,IAAI,CAACmhE,gBAAgB,EAAE;QACvBh/C,EAAE,CAACC,UAAU,CAAC,0EAA0E,EACpF,CAACpiB,IAAI,CAACmhE,gBAAgB,EAAEnhE,IAAI,CAACohE,oBAAoB,EAAEphE,IAAI,CAACjF,cAAc,CAAC,CAAC;MAChF;MAEAvxB,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACmpF,UAAU,GAAG,UAAUj9D,MAAM,EAAE67D,QAAQ,EAAEqB,WAAW,EAAE;IACvD,IAAIvpF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B,IAAI,CAAC4wC,WAAW,EAAE;QACd5wC,EAAE,CAACC,UAAU,CAAC,qCAAqC,IAAK,CAAC,CAACsvC,QAAQ,IAAIA,QAAQ,CAACrtF,MAAM,GAAG,CAAC,GAAI,iBAAiB,GAAGqtF,QAAQ,GAAG,GAAG,GAAG,EAAE,CAAC,EACjI,CAAC77D,MAAM,CAAC,CAAC;MACjB,CAAC,MACI;QACDssB,EAAE,CAACC,UAAU,CAAC,0CAA0C,IAAK,CAAC,CAACsvC,QAAQ,IAAIA,QAAQ,CAACrtF,MAAM,GAAG,CAAC,GAAI,iBAAiB,GAAGqtF,QAAQ,GAAG,GAAG,GAAG,EAAE,CAAC,EACtI,CAACqB,WAAW,CAAC,CAAC;MACtB;MAEAvpF,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC03F,WAAW,GAAG,UAAU7+D,OAAO,EAAmD;IAAA,IAAjDkvD,QAAQ,GAAAtiF,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAGR,SAAS;IAAA,IAAE0yF,aAAa,GAAAlyF,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAGR,SAAS;IACjF,IAAIpF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,sCAAsC,GAAG5f,OAAO,IACzD,CAAC,CAACkvD,QAAQ,IAAIA,QAAQ,CAACrtF,MAAM,GAAG,kBAAkB,GAAGqtF,QAAQ,GAAG,EAAE,CAAC,IACnE,CAAC,CAAC4P,aAAa,IAAIA,aAAa,CAACj9F,MAAM,GAAG,oBAAoB,GAAG,GAAG,GAAGi9F,aAAa,GAAG,GAAG,GAAE,EAAE,CAAC,CAAC;MACrG93F,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC43F,4BAA4B,GAAG,UAAU/+D,OAAO,EAAE3M,MAAM,EAAE67D,QAAQ,EAAE4P,aAAa,EAAEr2E,KAAK,EAAE;IAC3F,IAAIqoB,CAAC,GAAG,qCAAqC,IACvC,CAAC,CAAC9Q,OAAO,IAAIA,OAAO,CAACn+B,MAAM,GAAG,CAAC,GAAI,gBAAgB,GAAGm+B,OAAO,GAAG,GAAG,GAAG,EAAE,CAAC,IACzE,CAAC,CAAC3M,MAAM,IAAIA,MAAM,CAACxxB,MAAM,GAAG,CAAC,GAAI,eAAe,GAAGwxB,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,IACrE,CAAC,CAAC67D,QAAQ,IAAIA,QAAQ,CAACrtF,MAAM,GAAG,CAAC,GAAI,iBAAiB,GAAGqtF,QAAQ,GAAG,GAAG,GAAG,EAAE,CAAC,IAC7E,CAAC,CAAC4P,aAAa,IAAIA,aAAa,CAACj9F,MAAM,GAAG,CAAC,GAAI,kBAAkB,GAAGi9F,aAAa,GAAG,GAAG,GAAG,EAAE,CAAC,GAC/F,6BAA6B,IAC5B,CAAC,CAACr2E,KAAK,GAAG,SAAS,GAAGA,KAAK,GAAG,EAAE,CAAC;IAEtC,OAAOqoB,CAAC;EACZ,CAAC;EAED,IAAI,CAACkuD,qBAAqB,GAAG,UAAUh/D,OAAO,EAAE3M,MAAM,EAAE67D,QAAQ,EAAE4P,aAAa,EAAE;IAC7E,IAAI93F,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAIi0D,KAAK,GAAG,uCAAuC,GAAG,IAAI,CAAC6jC,4BAA4B,CAAC/+D,OAAO,EAAE3M,MAAM,EAAE67D,QAAQ,EAAE4P,aAAa,CAAC;IACjI,IAAI,CAACjb,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAACsb,KAAK,EACf,EAAE,EAAE,UAAUvb,EAAE,EAAE76C,GAAG,EAAE;QACnB,IAAInF,IAAI,GAAG7D,aAAa,CAACq0E,aAAa,CAACrrE,GAAG,CAACsR,IAAI,CAAC;QAChDpP,QAAQ,CAACE,OAAO,CAAC,CAAC,CAACvH,IAAI,IAAIA,IAAI,CAACkC,MAAM,GAAG,CAAC,GAAGlC,IAAI,CAAC,CAAC,CAAC,CAACzC,GAAG,GAAG,CAAC,CAAC;MACjE,CAAC,CAAC;IACV,CAAC,EAAE,UAAU0C,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;;EAED;EACA,IAAI,CAAC83F,gBAAgB,GAAG,UAAUj/D,OAAO,EAAE3M,MAAM,EAAE67D,QAAQ,EAAE4P,aAAa,EAAEr2E,KAAK,EAAE;IAC/E,IAAIzhB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAIi0D,KAAK,GAAG,yBAAyB,GAAG,IAAI,CAAC6jC,4BAA4B,CAAC/+D,OAAO,EAAE3M,MAAM,EAAE67D,QAAQ,EAAE4P,aAAa,EAAEr2E,KAAK,CAAC;IAC1H,IAAI,CAACo7D,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAACsb,KAAK,EACf,EAAE,EAAE,UAAUvb,EAAE,EAAE76C,GAAG,EAAE;QACnB;QACA,IAAInF,IAAI,GAAG7D,aAAa,CAACq0E,aAAa,CAACrrE,GAAG,CAACsR,IAAI,CAAC,CAAC,CAAC;QAClDpP,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MAC1B,CAAC,CAAC;IACV,CAAC,EAAE,UAAUC,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACqpF,4BAA4B,GAAG,UAAUxwD,OAAO,EAAE;IACnD,IAAIh5B,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAIi0D,KAAK,GAAG,yBAAyB,GAAG,GAAG,GAC3C,kCAAkC,IAChC,CAAC,CAACl7B,OAAO,IAAIA,OAAO,CAACn+B,MAAM,GAAG,CAAC,GAAI,gBAAgB,GAAGm+B,OAAO,GAAG,GAAG,GAAG,EAAE,CAAC,GAC3E,6BAA6B;IAC7B,IAAI,CAAC6jD,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAACsb,KAAK,EACf,EAAE,EAAE,UAAUvb,EAAE,EAAE76C,GAAG,EAAE;QACnB;QACA,IAAInF,IAAI,GAAG7D,aAAa,CAACq0E,aAAa,CAACrrE,GAAG,CAACsR,IAAI,CAAC,CAAC,CAAC;QAClDpP,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MAC1B,CAAC,CAAC;IACV,CAAC,EAAE,UAAUC,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;;EAED;AACR;AACA;EACQ,IAAI,CAACmoF,UAAU,GAAG,UAAU5vB,OAAO,EAAE6vB,eAAe,EAAE/7C,MAAM,EAAE;IAC1D,IAAIxsC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,qGAAqG,EAC/G,CAAC8f,OAAO,EAAE6vB,eAAe,EAAE/7C,MAAM,CAAC,EAClC,UAAUmM,EAAE,EAAE76C,GAAG,EAAE;QACfkC,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MAC1B,CAAC,CAAC;IACV,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACwoF,kBAAkB,GAAG,UAAUjwB,OAAO,EAAEkwB,SAAS,EAAEC,UAAU,EAAE;IAChE,IAAI7oF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI6oF,WAAW,GAAGF,SAAS,IAAIA,SAAS,CAAC/tF,MAAM,GAAG,CAAC,GAAGsxB,IAAI,CAACC,SAAS,CAACw8D,SAAS,CAAC,GAAG,IAAI;IACtF,IAAIG,YAAY,GAAGF,UAAU,IAAIA,UAAU,CAAChuF,MAAM,GAAG,CAAC,GAAGsxB,IAAI,CAACC,SAAS,CAACy8D,UAAU,CAAC,GAAG,IAAI;IAE1F,IAAI,CAAChM,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,8FAA8F,EACxG,CAAC8f,OAAO,EAAEowB,WAAW,EAAEC,YAAY,CAAC,EACpC,UAAUpwC,EAAE,EAAE76C,GAAG,EAAE;QACfkC,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MAC1B,CAAC,CAAC;IACV,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;;EAED;AACR;AACA;AACA;EACQ,IAAI,CAAC6oF,yBAAyB,GAAG,UAAUjkE,eAAe,EAAE;IACxD,IAAI/kB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAIi0D,KAAK,GAAG,4GAA4G;IAExH,IAAI,CAAC2oB,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAACsb,KAAK,EACf,CAACnvC,eAAe,CAAC,EACjB,UAAU4zB,EAAE,EAAE76C,GAAG,EAAE;QACf,IAAIy2F,OAAO,GAAG,EAAE;QAChB,KAAK,IAAItrF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGnL,GAAG,CAACsR,IAAI,CAACvU,MAAM,EAAEoO,CAAC,EAAE,EAAE;UACtCsrF,OAAO,CAACz5F,IAAI,CAACgD,GAAG,CAACsR,IAAI,CAAC7Q,IAAI,CAAC0K,CAAC,CAAC,CAAC;QAClC;QACAjJ,QAAQ,CAACE,OAAO,CAACq0F,OAAO,CAAC;MAC7B,CAAC,CAAC;IACV,CAAC,EAAE,UAAU37F,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;;EAED;AACR;AACA;AACA;EACQ,IAAI,CAAC+oF,eAAe,GAAG,YAAY;IAC/B;IACA,OAAO,IAAI,CAACF,yBAAyB,CAAC,sCAAsC,CAAC;EACjF,CAAC;;EAED;AACR;AACA;AACA;EACQ,IAAI,CAACG,gCAAgC,GAAG,UAAUpkE,eAAe,EAAE;IAC/D,IAAI/kB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAIi0D,KAAK,GAAG,6DAA6D,GAC9D,wBAAwB,GACxB,0DAA0D,GAC1D,+BAA+B,GAC/B,6BAA6B;IAExC,IAAI,CAAC2oB,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAACsb,KAAK,EACf,CAACnvC,eAAe,CAAC,EACjB,UAAU4zB,EAAE,EAAE76C,GAAG,EAAE;QACf,IAAIy2F,OAAO,GAAG,EAAE;QAChB,KAAK,IAAItrF,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGnL,GAAG,CAACsR,IAAI,CAACvU,MAAM,EAAEoO,CAAC,EAAE,EAAE;UACtCsrF,OAAO,CAACz5F,IAAI,CAACgD,GAAG,CAACsR,IAAI,CAAC7Q,IAAI,CAAC0K,CAAC,CAAC,CAAC;QAClC;QACAjJ,QAAQ,CAACE,OAAO,CAACq0F,OAAO,CAAC;MAC7B,CAAC,CAAC;IACV,CAAC,EAAE,UAAU37F,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC+3F,kBAAkB,GAAG,UAAUh3D,SAAS,EAAE;IAC3C,IAAIlhC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAAC,8EAA8E,EAAE,CAAC1X,SAAS,CAAC,EACrG,UAAUyX,EAAE,EAAE27C,SAAS,EAAE;QACrB,IAAIA,SAAS,CAACllF,IAAI,CAACvU,MAAM,KAAK,CAAC,EAAE;UAC7BmF,QAAQ,CAACqb,MAAM,CAACnmB,cAAc,CAACe,SAAS,CAAC,6BAA6B,CAAC,CAAC;QAC5E,CAAC,MACI;UACD,IAAImZ,IAAI,GAAGta,aAAa,CAACq0E,aAAa,CAACmrB,SAAS,CAACllF,IAAI,CAAC;UACtD,IAAIigD,QAAQ,GAAGjgD,IAAI,CAAC,CAAC,CAAC,CAACq+E,QAAQ;UAC/B,IAAIn0B,aAAa,GAAGlqD,IAAI,CAAC,CAAC,CAAC,CAAC+oF,aAAa;UACzC,IAAIr/B,YAAY,GAAG1pD,IAAI,CAAC,CAAC,CAAC,CAACgpF,YAAY;UACvCp4F,QAAQ,CAACE,OAAO,CAAC;YAAEvH,IAAI,EAAE;cAAE80F,QAAQ,EAAEp+B,QAAQ;cAAE8oC,aAAa,EAAE7+B,aAAa;cAAE8+B,YAAY,EAAEt/B,YAAY;cAAEu/B,UAAU,EAAEn3D;YAAU;UAAE,CAAC,CAAC;QACvI;MACJ,CAAC,CAAC;IACV,CAAC,EAAE,UAAUtoC,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACnmB,cAAc,CAACe,SAAS,CAAC,6BAA6B,CAAC,CAAC;IAC5E,CAAC,CAAC;IAEF,OAAO+J,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACwhC,mBAAmB,GAAG,UAAUT,SAAS,EAAEvoC,IAAI,EAAE;IAClD,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,oGAAoG,EAAE,CAAC1X,SAAS,EAAEvoC,IAAI,CAAC80F,QAAQ,EAAE90F,IAAI,CAACw/F,aAAa,EAAEx/F,IAAI,CAACy/F,YAAY,CAAC,CAAC;IAC1L,CAAC,EAAE,UAAUx/F,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;IACxB,CAAC,EAAE,YAAY;MACXoH,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;IAC1B,CAAC,CAAC;IAEF,OAAOqH,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACotF,gBAAgB,GAAG,UAAUrsD,SAAS,EAAE;IACzC,IAAIlhC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAAC,+CAA+C,EAAE,CAAC1X,SAAS,CAAC,EACtE,UAAUyX,EAAE,EAAE27C,SAAS,EAAE;QACrB,IAAIA,SAAS,CAACllF,IAAI,CAACvU,MAAM,KAAK,CAAC,EAAE;UAC7BmF,QAAQ,CAACqb,MAAM,CAACnmB,cAAc,CAACe,SAAS,CAAC,6BAA6B,CAAC,CAAC;QAC5E,CAAC,MACI;UACD,IAAImZ,IAAI,GAAGta,aAAa,CAACq0E,aAAa,CAACmrB,SAAS,CAACllF,IAAI,CAAC;UACtD,IAAIigD,QAAQ,GAAGjgD,IAAI,CAAC,CAAC,CAAC,CAACq+E,QAAQ;UAC/BztF,QAAQ,CAACE,OAAO,CAAC;YAAEvH,IAAI,EAAE;cAAE80F,QAAQ,EAAEp+B;YAAS;UAAE,CAAC,CAAC;QACtD;MACJ,CAAC,CAAC;IACV,CAAC,EAAE,UAAUz2D,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACnmB,cAAc,CAACe,SAAS,CAAC,6BAA6B,CAAC,CAAC;IAC5E,CAAC,CAAC;IAEF,OAAO+J,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC2hC,iBAAiB,GAAG,UAAUZ,SAAS,EAAEvoC,IAAI,EAAE;IAChD,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,iEAAiE,EAAE,CAAC1X,SAAS,EAAEvoC,IAAI,CAAC80F,QAAQ,CAAC,CAAC;IAChH,CAAC,EAAE,UAAU70F,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;IACxB,CAAC,EAAE,YAAY;MACXoH,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;IAC1B,CAAC,CAAC;IAEF,OAAOqH,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACm4F,WAAW,GAAG,UAAUpkD,QAAQ,EAAElvB,UAAU,EAAE;IAC/C,IAAIhlB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAAC,2DAA2D,EAAE,CAACjkD,aAAa,CAACuoC,eAAe,EAAEgX,QAAQ,CAAC,EAChH,UAAUyE,EAAE,EAAE27C,SAAS,EAAE;QACrB,IAAI7I,GAAG,GAAG,IAAI;QACdlzF,CAAC,CAACmC,IAAI,CAAC5F,aAAa,CAACq0E,aAAa,CAACmrB,SAAS,CAACllF,IAAI,CAAC,EAAE,UAAUzU,GAAG,EAAEtG,EAAE,EAAE;UACnE,IAAIsiG,MAAM,GAAGxqE,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAAC8zF,MAAM,CAAC;UAElC,KAAK,IAAIl/E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG0tF,MAAM,CAACI,UAAU,CAACl8F,MAAM,EAAEoO,CAAC,EAAE,EAAE;YAC/C,IAAIsvF,QAAQ,GAAG5B,MAAM,CAACI,UAAU,CAAC9tF,CAAC,CAAC;YACnC,IAAIsvF,QAAQ,CAACvB,aAAa,KAAKhyE,UAAU,EAAE;cACvChlB,QAAQ,CAACE,OAAO,CAACq4F,QAAQ,CAAC;YAC9B;UACJ;QACJ,CAAC,CAAC;QAEFv4F,QAAQ,CAACqb,MAAM,CAAC;UAAE/L,OAAO,EAAEpa,cAAc,CAACe,SAAS,CAAC,6BAA6B;QAAE,CAAC,CAAC;MACzF,CAAC,CAAC;IACV,CAAC,EAAE,UAAU2C,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACg5D,iBAAiB,GAAG,UAAUT,OAAO,EAAEC,WAAW,EAAEx5D,KAAK,EAAE25D,YAAY,EAAEC,SAAS,EAAEE,UAAU,EAAE;IACjG,IAAIj5D,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAAC,WAAW,EAAE,EAAE,EAAE,UAAUD,EAAE,EAAE27C,SAAS,EAAE;QACpDt0F,QAAQ,CAACE,OAAO,CAAC;UAAEvH,IAAI,EAAE;YAAE6/F,MAAM,EAAE;UAAK;QAAE,CAAC,CAAC;MAChD,CAAC,CAAC;IACN,CAAC,EAAE,UAAU5/F,GAAG,EAAE,CAAE,CAAC,CAAC;IAEtB,OAAOoH,QAAQ,CAACG,OAAO;EAE3B,CAAC;EAED,IAAI,CAACs4F,YAAY,GAAG,UAAU5gG,EAAE,EAAEmtB,UAAU,EAAEpC,QAAQ,EAAE;IACpD,IAAI5iB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B;MACAA,EAAE,CAACC,UAAU,CAAC,kGAAkG,GAC5G,mGAAmG,GACnG,yIAAyI,EACzI,CAAC/gD,EAAE,EAAEmtB,UAAU,EAAEpC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;MAEnE5iB,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAGD,IAAI,CAACu4F,aAAa,GAAG,UAAU7gG,EAAE,EAAE8gG,WAAW,EAAEC,iBAAiB,EAAEC,eAAe,EAAEC,cAAc,EAAEC,kBAAkB,EAAEC,IAAI,EAAEC,WAAW,EAAEC,MAAM,EAAE;IAC/I,IAAIl5F,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B;MACAA,EAAE,CAACC,UAAU,CAAC,2HAA2H,GACrI,wGAAwG,EACxG,CAAC+/C,WAAW,EAAEC,iBAAiB,EAAEC,eAAe,EAAEC,cAAc,EAAEC,kBAAkB,EAAEC,IAAI,EACtF,CAAC,CAACC,WAAW,GAAG9sE,IAAI,CAACC,SAAS,CAAC6sE,WAAW,CAAC,GAAG,IAAI,EAAEC,MAAM,EAC1DrhG,EAAE,CAAC,CAAC;MACZmI,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACg5F,kBAAkB,GAAG,UAAUthG,EAAE,EAAE;IACpC,IAAImI,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B;MACAA,EAAE,CAACC,UAAU,CAAC,8DAA8D,EACxE,CAAC/gD,EAAE,CAAC,CAAC;MACTmI,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACi5F,iBAAiB,GAAG,UAAUvhG,EAAE,EAAE;IACnC,IAAImI,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B;MACAA,EAAE,CAACC,UAAU,CAAC,8DAA8D,EACxE,CAAC/gD,EAAE,CAAC,CAAC;MACTmI,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACk5F,mBAAmB,GAAG,UAAUxhG,EAAE,EAAEyhG,YAAY,EAAEC,kBAAkB,EAAEC,gBAAgB,EAAEC,eAAe,EAAEC,mBAAmB,EAAE16C,IAAI,EAAE;IACrI,IAAIjnC,IAAI,GAAG,IAAI;IACf,IAAI/X,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB;IACA;IACA,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B;MACA;MACA;MACA;MACA;MACAA,EAAE,CAACC,UAAU,CAAC,4EAA4E,EACtF,CAAC0gD,YAAY,EAAEzhG,EAAE,CAAC,CAAC;MACvBmI,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;IACxB,CAAC,CAAC;IAEF,OAAOoH,QAAQ,CAACG,OAAO;;IAEvB;IACA;IACA;IACA;IACA;IACA;IACA;EACJ,CAAC;EAED,IAAI,CAACqgB,sBAAsB,GAAG,UAAUwE,UAAU,EAAEpC,QAAQ,EAAE;IAC1D,IAAI5iB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI8X,IAAI,GAAG,IAAI;IACf,IAAI,CAAC8kE,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B5gC,IAAI,CAAC4hF,eAAe,CAAChhD,EAAE,CAAC;MACxB;MACA;MACA;MACAA,EAAE,CAACC,UAAU,CAAC,kGAAkG,EAC5G,CAAC5zB,UAAU,CAAC,EACZ,UAAU2zB,EAAE,EAAE27C,SAAS,EAAE;QACrB,IAAI37F,IAAI,GAAG7D,aAAa,CAACq0E,aAAa,CAACmrB,SAAS,CAACllF,IAAI,CAAC;QACtDpP,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MAC1B,CAAC,CAAC;IACV,CAAC,EAAE,UAAUC,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACy5F,mBAAmB,GAAG,UAAU50E,UAAU,EAAEpC,QAAQ,EAAE;IACvD,IAAI5iB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI8X,IAAI,GAAG,IAAI;IACf,IAAI,CAAC8kE,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B5gC,IAAI,CAAC4hF,eAAe,CAAChhD,EAAE,CAAC;MACxB;MACA;MACA;MACAA,EAAE,CAACC,UAAU,CAAC,kGAAkG,EAC5G,CAAC5zB,UAAU,CAAC,EACZ,UAAU2zB,EAAE,EAAE27C,SAAS,EAAE;QACrB,IAAI37F,IAAI,GAAG7D,aAAa,CAACq0E,aAAa,CAACmrB,SAAS,CAACllF,IAAI,CAAC;QACtDpP,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MAC1B,CAAC,CAAC;IACV,CAAC,EAAE,UAAUC,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC05F,6BAA6B,GAAG,UAAUp4E,KAAK,EAAEq4E,SAAS,EAAE;IAC7D,IAAI95F,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B;MACAA,EAAE,CAACC,UAAU,CAAC,4DAA4D,IACvE,CAAC,CAACkhD,SAAS,GAAG,YAAY,GAAGA,SAAS,GAAG,GAAG,GAAG,EAAE,CAAC,GACnD,4BAA4B,IACzB,CAAC,CAACr4E,KAAK,GAAG,SAAS,GAAGA,KAAK,GAAG,EAAE,CAAC,EAAE,EAAE,EACtC,UAAUk3B,EAAE,EAAE27C,SAAS,EAAE;QACrB,IAAI37F,IAAI,GAAG7D,aAAa,CAACq0E,aAAa,CAACmrB,SAAS,CAACllF,IAAI,CAAC;QACtDpP,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MAC1B,CAAC,CAAC;IACV,CAAC,EAAE,UAAUC,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC45F,0BAA0B,GAAG,UAAUliG,EAAE,EAAEmtB,UAAU,EAAE;IACxD,IAAIhlB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAE9BA,EAAE,CAACC,UAAU,CAAC,4JAA4J,EACtK,EAAE,CAAC;MAEPD,EAAE,CAACC,UAAU,CAAC,mIAAmI,EAC7I,EAAE,CAAC;;MAEP;MACAD,EAAE,CAACC,UAAU,CAAC,2FAA2F,EACrG,EAAE,CAAC;MAEPD,EAAE,CAACC,UAAU,CAAC,0EAA0E,EACpF,EAAE,CAAC;MACP54C,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACuiB,eAAe,GAAG,UAAUzjB,EAAE,EAAE8lB,eAAe,EAAEC,UAAU,EAAEpC,QAAQ,EAAE1J,MAAM,EAAEmJ,MAAM,EAAE4C,aAAa,EAAE;IACvG,IAAIjlB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B;MACA,IAAI,CAACt2B,MAAM,EAAE;QACTA,MAAM,GAAG,EAAE;MACf;MACAs2B,EAAE,CAACC,UAAU,CAAC,+GAA+G,GACzH,8EAA8E,EAC9E,CAAC35C,EAAE,EAAE8lB,eAAe,EAAEC,UAAU,EAAEpC,QAAQ,EAAEP,MAAM,EAAE4C,aAAa,EAAE/L,MAAM,CAAC,CAAC;MAE/ElZ,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IACF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACihB,gBAAgB,GAAG,UAAU2D,eAAe,EAAEi1E,SAAS,EAAE;IAC1D,IAAIh6F,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B;MACAA,EAAE,CAACC,UAAU,CAAC,yDAAyD,IAAIohD,SAAS,KAAK,IAAI,GAAG,uBAAuB,GAAG,EAAE,CAAC,GAAG,8BAA8B,EAC1J,CAACj1E,eAAe,CAAC,EACjB,UAAU4zB,EAAE,EAAE27C,SAAS,EAAE;QACrB,IAAI37F,IAAI,GAAG7D,aAAa,CAACq0E,aAAa,CAACmrB,SAAS,CAACllF,IAAI,CAAC;QACtDpP,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MAC1B,CAAC,CAAC;IACV,CAAC,EAAE,UAAUC,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACylB,sBAAsB,GAAG,UAAUZ,UAAU,EAAE;IAChD,IAAIhlB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B;MACAA,EAAE,CAACC,UAAU,CAAC,yEAAyE,EACnF,CAAC5zB,UAAU,CAAC,EACZ,UAAU2zB,EAAE,EAAE27C,SAAS,EAAE;QACrB,IAAI37F,IAAI,GAAG7D,aAAa,CAACq0E,aAAa,CAACmrB,SAAS,CAACllF,IAAI,CAAC;QACtDpP,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MAC1B,CAAC,CAAC;IACV,CAAC,EAAE,UAAUC,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC85F,mBAAmB,GAAG,UAAUl1E,eAAe,EAAE;IAClD,IAAI/kB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,sDAAsD,EAChE,CAAC7zB,eAAe,CAAC,CAAC;MACtB/kB,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IACF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC6lB,uBAAuB,GAAG,UAAU0mB,EAAE,EAAE;IACzC,IAAI1sC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,2DAA2D,EACrE,CAAClM,EAAE,CAAC,CAAC;MACT1sC,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IACF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACtC,aAAa,GAAG,UAAUlB,IAAI,EAAEkzB,IAAI,EAAEC,KAAK,EAAErlB,OAAO,EAAE;IACvD,IAAIzK,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB4vB,IAAI,GAAG,CAACA,IAAI,GAAG,CAAC,GAAGA,IAAI;IACvBC,KAAK,GAAG,CAACA,KAAK,GAAG,EAAE,GAAGA,KAAK;IAE3B,IAAIge,UAAU,GAAI,CAAC,CAACrjC,OAAO,IAAI,CAAC,CAACA,OAAO,CAACpL,UAAU,GAAIoL,OAAO,CAACpL,UAAU,GAAG,IAAI;IAEhF,IAAI,CAACw9E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,yBAAyB,IAAI,CAAC,CAAC9K,UAAU,GAAG,aAAa,GAAGA,UAAU,GAAG,GAAG,GAAG,EAAE,CAAC,EAC5F,EAAE,EAAE,UAAU6K,EAAE,EAAE76C,GAAG,EAAE;QACnB,IAAInF,IAAI,GAAG7D,aAAa,CAACq0E,aAAa,CAACrrE,GAAG,CAACsR,IAAI,CAAC;QAChD,IAAIS,GAAG,GAAG,EAAE;QACZtX,CAAC,CAACmC,IAAI,CAAC/B,IAAI,EAAE,UAAUgC,GAAG,EAAEtG,EAAE,EAAE;UAC5B,IAAI6lG,UAAU,GAAG7lG,EAAE,CAAC8C,IAAI;UACxB+iG,UAAU,IAAI,GAAG,IACZ7lG,EAAE,CAACkD,KAAK,GAAGlD,EAAE,CAACkD,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC,IAC/BlD,EAAE,CAACiD,KAAK,GAAGjD,EAAE,CAACiD,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC,IAC/BjD,EAAE,CAACmD,WAAW,GAAGnD,EAAE,CAACmD,WAAW,GAAG,EAAE,CAAC;UAE1CnD,EAAE,CAAC4D,mBAAmB,GAAG5D,EAAE,CAAC4D,mBAAmB,KAAK,MAAM;UAC1D5D,EAAE,CAAC+yF,iBAAiB,GAAG,IAAI;UAC3B,IAAIzqF,IAAI,EAAE;YACN,IAAIu9F,UAAU,CAACluF,WAAW,CAAC,CAAC,CAAClI,OAAO,CAACnH,IAAI,CAACqP,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;cAC7D3X,EAAE,CAACy/B,SAAS,GAAGz/B,EAAE,CAACy/B,SAAS,GAAG3H,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACy/B,SAAS,CAAC,GAAGz/B,EAAE,CAACy/B,SAAS;cACrEz/B,EAAE,CAACu7C,eAAe,GAAGv7C,EAAE,CAACu7C,eAAe,GAAGzjB,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACu7C,eAAe,CAAC,GAAGv7C,EAAE,CAACu7C,eAAe;cAC7F//B,GAAG,CAAC/U,IAAI,CAACzG,EAAE,CAAC;YAChB;UACJ,CAAC,MAAM;YACHA,EAAE,CAACy/B,SAAS,GAAGz/B,EAAE,CAACy/B,SAAS,GAAG3H,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACy/B,SAAS,CAAC,GAAGz/B,EAAE,CAACy/B,SAAS;YACrEz/B,EAAE,CAACu7C,eAAe,GAAGv7C,EAAE,CAACu7C,eAAe,GAAGzjB,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACu7C,eAAe,CAAC,GAAGv7C,EAAE,CAACu7C,eAAe;YAC7F//B,GAAG,CAAC/U,IAAI,CAACzG,EAAE,CAAC;UAChB;;UAEA;UACAA,EAAE,CAACuD,OAAO,GAAG,CAAC;UACdvD,EAAE,CAACs5C,WAAW,GAAG,CAAC;UAClBt5C,EAAE,CAAC8lG,cAAc,GAAG9lG,EAAE,CAAC8lG,cAAc,KAAK,MAAM;UAEhD9lG,EAAE,CAACoD,SAAS,GAAGpD,EAAE,CAACoD,SAAS,IAAIpD,EAAE,CAACoD,SAAS,KAAK,WAAW,GAAG00B,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACoD,SAAS,CAAC,GAAGpD,EAAE,CAACoD,SAAS;UAErG,IAAGpD,EAAE,CAACkD,KAAK,IAAIlD,EAAE,CAACkD,KAAK,IAAGlD,EAAE,CAACkD,KAAK,EAC9BlD,EAAE,CAACgD,QAAQ,GAAG,CAAC;YACXE,KAAK,EAAClD,EAAE,CAACkD,KAAK;YACdD,KAAK,EAAEjD,EAAE,CAACiD,KAAK;YACfE,WAAW,EAAEnD,EAAE,CAACmD;UACpB,CAAC,CAAC;QAEV,CAAC,CAAC;QACF,IAAMwoB,MAAM,GAAG6P,IAAI,KAAK,CAAC,IAAIA,IAAI,KAAK,IAAI,IAAIA,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAACA,IAAI,GAAG,CAAC,IAAIC,KAAK;QACjF9vB,QAAQ,CAACE,OAAO,CAAC;UAAEvH,IAAI,EAAE;YAAEoF,SAAS,EAAE8R,GAAG,CAAC1R,KAAK,CAAC6hB,MAAM,EAAEA,MAAM,GAAG8P,KAAK,CAAC;YAAEtC,KAAK,EAAE70B,IAAI,CAACkC;UAAO;QAAE,CAAC,CAAC;MACpG,CAAC,CAAC;IACV,CAAC,EAAE,UAAUjC,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACi6F,cAAc,GAAG,UAAUC,OAAO,EAAE;IACrC,IAAIr6F,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B;MACAA,EAAE,CAACC,UAAU,CAAC,yDAAyD,EACnE,CAACyhD,OAAO,CAAC,CAAC;MACdr6F,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAE3B,CAAC;EAED,IAAI,CAACm6F,qBAAqB,GAAG,UAAUD,OAAO,EAAEzhG,GAAG,EAAE;IACjD,IAAIoH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B;MACAA,EAAE,CAACC,UAAU,CAAC,+EAA+E,EACzF,CAAChgD,GAAG,EAAEyhG,OAAO,CAAC,CAAC;MACnBr6F,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAE3B,CAAC;EAED,IAAI,CAACo6F,eAAe,GAAG,YAAY;IAC/B,IAAIv6F,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,2JAA2J,EACrK,CAACjkD,aAAa,CAACuoC,eAAe,CAAC,EAC/B,UAAUyb,EAAE,EAAE27C,SAAS,EAAE;QACrB,IAAI37F,IAAI,GAAG7D,aAAa,CAACq0E,aAAa,CAACmrB,SAAS,CAACllF,IAAI,CAAC;QACtD7W,CAAC,CAACmC,IAAI,CAAC/B,IAAI,EAAE,UAAUgC,GAAG,EAAEtG,EAAE,EAAE;UAC5BA,EAAE,CAACmmG,OAAO,GAAGruE,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACmmG,OAAO,CAAC;UACnCnmG,EAAE,CAAC01D,QAAQ,GAAG11D,EAAE,CAAC01D,QAAQ,KAAK,MAAM;UACpC11D,EAAE,CAAComG,OAAO,GAAGpmG,EAAE,CAAComG,OAAO,KAAK,MAAM;UAClCpmG,EAAE,GAAGkE,CAAC,CAAC2L,MAAM,CAAC7P,EAAE,EAAE83B,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACwgG,GAAG,CAAC,CAAC;UACrC,OAAOxgG,EAAE,CAACwgG,GAAG;QACjB,CAAC,CAAC;QACF70F,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MAC1B,CAAC,CAAC;IACV,CAAC,EAAE,UAAUC,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IACF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACu6F,mBAAmB,GAAG,UAAUC,YAAY,EAAE;IAC/C,IAAI36F,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B;MACAA,EAAE,CAACC,UAAU,CAAC,0CAA0C,EAAE,CAACjkD,aAAa,CAACuoC,eAAe,CAAC,CAAC;MAE1F3kC,CAAC,CAACmC,IAAI,CAACigG,YAAY,EAAE,UAAUhgG,GAAG,EAAEtG,EAAE,EAAE;QACpC,IAAIwgG,GAAG,GAAG;UACN+F,YAAY,EAAEvmG,EAAE,CAACumG,YAAY;UAC7BC,qBAAqB,EAAExmG,EAAE,CAACwmG,qBAAqB;UAC/CC,OAAO,EAAEzmG,EAAE,CAACymG;QAChB,CAAC;QAEDniD,EAAE,CAACC,UAAU,CAAC,0PAA0P,GACpQ,uDAAuD,EACvD,CAACjkD,aAAa,CAACuoC,eAAe,EAAE7oC,EAAE,CAACwrF,SAAS,EAAExrF,EAAE,CAAC01D,QAAQ,EAAE11D,EAAE,CAAC0mG,OAAO,EAAE1mG,EAAE,CAACkuF,OAAO,EAAEluF,EAAE,CAACmtF,UAAU,EAAEntF,EAAE,CAAC2mG,cAAc,EAAE3mG,EAAE,CAACutF,UAAU,EAAEvtF,EAAE,CAAComG,OAAO,EAC9IpmG,EAAE,CAAC4mG,cAAc,EAAE5mG,EAAE,CAAC6mG,MAAM,EAAE7mG,EAAE,CAAC8mG,QAAQ,EAAE9mG,EAAE,CAAC+mG,QAAQ,EAAE/mG,EAAE,CAACqhE,QAAQ,EAAErhE,EAAE,CAACshE,MAAM,EAAEthE,EAAE,CAACgnG,QAAQ,EAC3FhnG,EAAE,CAACuvB,QAAQ,EAAEvvB,EAAE,CAACinG,gBAAgB,EAAEjnG,EAAE,CAAC6kB,MAAM,EAAEiT,IAAI,CAACC,SAAS,CAAC/3B,EAAE,CAACmmG,OAAO,CAAC,EAAEnmG,EAAE,CAAC0O,IAAI,EAAEopB,IAAI,CAACC,SAAS,CAACyoE,GAAG,CAAC,CAAC,CAAC;MAC/G,CAAC,CAAC;MAEF70F,QAAQ,CAACE,OAAO,CAACy6F,YAAY,CAAC;IAClC,CAAC,EAAE,UAAU/hG,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACsuC,iBAAiB,GAAG,UAAU91C,IAAI,EAAEsG,EAAE,EAAE;IACzC,IAAIe,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAItH,IAAI,IAAIA,IAAI,CAACkC,MAAM,GAAG,CAAC,EAAE;MACzBmF,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MACtB,OAAOqH,QAAQ,CAACG,OAAO;IAC3B;IAEA1G,OAAO,CAACy0C,IAAI,CAAC,wDAAwD,CAAC;IAEtE,IAAI,CAAC2uC,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCl/C,OAAO,CAAC20C,OAAO,CAAC,wDAAwD,CAAC;MACzE30C,OAAO,CAACy0C,IAAI,CAAC,kDAAkD,CAAC;MAChE,IAAIqtD,UAAU,GAAG,EAAE;MACnB,IAAIrnC,KAAK,GAAG,kJAAkJ;MAC9J,IAAIj1D,EAAE,EAAE;QACJi1D,KAAK,GAAGA,KAAK,GAAG,eAAe;QAC/BqnC,UAAU,GAAG,CAACt8F,EAAE,CAAC;MACrB;MACA05C,EAAE,CAACC,UAAU,CAACsb,KAAK,EAAEqnC,UAAU,EAAE,UAAU5iD,EAAE,EAAE76C,GAAG,EAAE;QAC5CrE,OAAO,CAAC20C,OAAO,CAAC,kDAAkD,CAAC;QACnE,IAAIz1C,IAAI,GAAG7D,aAAa,CAACq0E,aAAa,CAACrrE,GAAG,CAACsR,IAAI,EAAE,UAAU/a,EAAE,EAAE;UAC3DA,EAAE,CAACq7C,SAAS,GAAGvjB,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACq7C,SAAS,CAAC;UACvC,IAAIw3C,KAAK,GAAG,CAAC,CAAC7yF,EAAE,CAAC6yF,KAAK,GAAG/6D,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAAC6yF,KAAK,CAAC,GAAG,CAAC,CAAC;UAClD7yF,EAAE,CAACg+B,MAAM,GAAG60D,KAAK,CAAC70D,MAAM;UACxBh+B,EAAE,CAAC+9B,yBAAyB,GAAG80D,KAAK,CAAC90D,yBAAyB;UAC9D/9B,EAAE,CAAC69B,yBAAyB,GAAGg1D,KAAK,CAACh1D,yBAAyB;UAC9D,OAAO79B,EAAE,CAAC6yF,KAAK;UAEf,IAAG7yF,EAAE,CAAC8R,KAAK,IAAI9R,EAAE,CAAC8K,KAAK,IAAG9K,EAAE,CAAC+R,WAAW,EACpC/R,EAAE,CAACgD,QAAQ,GAAG,CAAC;YACXE,KAAK,EAAClD,EAAE,CAAC8R,KAAK;YACd7O,KAAK,EAAEjD,EAAE,CAAC8K,KAAK;YACf3H,WAAW,EAAEnD,EAAE,CAAC+R;UACpB,CAAC,CAAC;UAEN,OAAO/R,EAAE;QACb,CAAC,CAAC;QACF2L,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MAC1B,CAAC,CAAC;IAET,CAAC,EAAE,UAAUC,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEH,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;;EAED;EACA,IAAI,CAACw5F,eAAe,GAAG,UAAUhhD,EAAE,EAAE;IACjCA,EAAE,CAACC,UAAU,CAAC,4JAA4J,CAAC;IAC3KD,EAAE,CAACC,UAAU,CAAC,wJAAwJ,CAAC;IACvKD,EAAE,CAACC,UAAU,CAAC,mIAAmI,CAAC;IAClJD,EAAE,CAACC,UAAU,CAAC,sEAAsE,GAChF,8GAA8G,GAC9G,2JACJ,CAAC;EACL,CAAC;EAED,IAAI,CAAC4iD,cAAc,GAAG,UAAUC,UAAU,EAAE;IACxC,IAAIz7F,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAAC,8DAA8D,EACxE,CAAC6iD,UAAU,CAAC,EACZ,UAAU9iD,EAAE,EAAE27C,SAAS,EAAE;QACrB,IAAI37F,IAAI,GAAG7D,aAAa,CAACq0E,aAAa,CAACmrB,SAAS,CAACllF,IAAI,CAAC;QACtDpP,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MAC1B,CAAC,CAAC;IACV,CAAC,EAAE,UAAUC,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;IACxB,CAAC,CAAC;IAEF,OAAOoH,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACu7F,aAAa,GAAG,UAAUz8F,EAAE,EAAEi8F,MAAM,EAAEO,UAAU,EAAE;IACnD,IAAIz7F,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,0EAA0E,EACpF,CAAC35C,EAAE,EAAEi8F,MAAM,EAAEO,UAAU,CAAC,CAAC;MAE7Bz7F,QAAQ,CAACE,OAAO,CAACu7F,UAAU,CAAC;IAChC,CAAC,EAAE,UAAU7iG,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;IACxB,CAAC,CAAC;IAEF,OAAOoH,QAAQ,CAACG,OAAO;EAC3B,CAAC;;EAED;EACA,IAAI,CAACw7F,YAAY,GAAG,YAAY;IAC5B,IAAI37F,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,wBAAwB,EAClC,EAAE,CAAC;MAEP54C,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;IACxB,CAAC,CAAC;IAEF,OAAOoH,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACy7F,mBAAmB,GAAG,YAAY;IACnC,IAAI57F,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAAC,2CAA2C,EACrD,CAAC,kBAAkB,CAAC,EACpB,UAAUD,EAAE,EAAE27C,SAAS,EAAE;QACrB,IAAIx2F,GAAG,GAAG,CAAC,CAAC;QACZ,IAAIw2F,SAAS,CAACllF,IAAI,CAACvU,MAAM,GAAG,CAAC,EACzBiD,GAAG,GAAGquB,IAAI,CAAC2T,KAAK,CAACw0D,SAAS,CAACllF,IAAI,CAAC7Q,IAAI,CAAC,CAAC,CAAC,CAAC8L,KAAK,CAAC;QAClDrK,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;MACzB,CAAC,CAAC;IACV,CAAC,EAAE,UAAUlF,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;IACxB,CAAC,CAAC;IAEF,OAAOoH,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC07F,mBAAmB,GAAG,UAAUnR,QAAQ,EAAE;IAC3C,IAAI,CAACA,QAAQ,EACTA,QAAQ,GAAG,CAAC,CAAC;IAEjB,IAAI1qF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,kFAAkF,EAC5F,CAAC,kBAAkB,EAAEzsB,IAAI,CAACC,SAAS,CAACs+D,QAAQ,CAAC,CAAC,CAAC;MAEnD1qF,QAAQ,CAACE,OAAO,CAACwqF,QAAQ,CAAC;IAC9B,CAAC,EAAE,UAAU9xF,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;IACxB,CAAC,CAAC;IAEF,OAAOoH,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACwK,yBAAyB,GAAG,UAAUklB,IAAI,EAAEC,KAAK,EAAEokB,QAAQ,EAAEzpC,OAAO,EAAE;IACvE,IAAIzK,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB4vB,IAAI,GAAG,CAACA,IAAI,GAAG,CAAC,GAAGA,IAAI,GAAG,CAAC;IAC3BC,KAAK,GAAG,CAACA,KAAK,GAAG,EAAE,GAAGA,KAAK;IAE3B,IAAIj4B,EAAE,GAAI,CAAC,CAAC4S,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC5S,EAAE,GAAI4S,OAAO,CAAC5S,EAAE,GAAG,IAAI;IACxD,IAAIV,IAAI,GAAI,CAAC,CAACsT,OAAO,IAAI,CAAC,CAACA,OAAO,CAACtT,IAAI,GAAIsT,OAAO,CAACtT,IAAI,GAAG,IAAI;IAE9D,IAAI,CAAC0lF,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9BA,EAAE,CAACC,UAAU,CAAC,wDAAwD,GAAG1E,QAAQ,GAAG,2BAA2B,IAAI,CAAC,CAACr8C,EAAE,GAAG,WAAW,GAAGA,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,IACjJ,CAAC,CAACV,IAAI,GAAG,mBAAmB,GAAGA,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC,GAAG,gBAAgB,EACpE,EAAE,EAAE,UAAUwhD,EAAE,EAAE76C,GAAG,EAAE;QACnB,IAAInF,IAAI,GAAG7D,aAAa,CAACq0E,aAAa,CAACrrE,GAAG,CAACsR,IAAI,CAAC;QAChD,IAAIS,GAAG,GAAG,EAAE;QACZtX,CAAC,CAACmC,IAAI,CAAC/B,IAAI,EAAE,UAAUgC,GAAG,EAAEtG,EAAE,EAAE;UAC5BA,EAAE,CAAC+yF,iBAAiB,GAAG,IAAI;UAC3Bv3E,GAAG,CAAC/U,IAAI,CAACzG,EAAE,CAAC;QAEhB,CAAC,CAAC;QACF2L,QAAQ,CAACE,OAAO,CAAC;UAAEvH,IAAI,EAAE;YAAEiS,mBAAmB,EAAEiF,GAAG,CAAC1R,KAAK,CAAC0xB,IAAI,GAAGC,KAAK,EAAEA,KAAK,IAAID,IAAI,GAAG,CAAC,CAAC;UAAE;QAAE,CAAC,CAAC;MACpG,CAAC,CAAC;IACV,CAAC,EAAE,UAAUj3B,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACmnF,0BAA0B,GAAG,UAAU3uF,IAAI,EAAE;IAC9C,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B;MACAA,EAAE,CAACC,UAAU,CAAC,iCAAiC,CAAC;;MAEhD;MACAD,EAAE,CAACC,UAAU,CAAC,kFAAkF,EAC5F,CAAC,4BAA4B,EAAEjkD,aAAa,CAACuoC,eAAe,CAAC,CAAC;MAClEyb,EAAE,CAACC,UAAU,CAAC,kFAAkF,EAC5F,CAAC,gBAAgB,EAAEjkD,aAAa,CAACkkC,cAAc,CAAC,CAAC;MACrD8f,EAAE,CAACC,UAAU,CAAC,kFAAkF,EAC5F,CAAC,yBAAyB,EAAEjgD,IAAI,CAACqhB,IAAI,CAAC,CAAC;MAE3CzhB,CAAC,CAACmC,IAAI,CAAC/B,IAAI,CAACkX,GAAG,EAAE,UAAUlV,GAAG,EAAEtG,EAAE,EAAE;QAChCskD,EAAE,CAACC,UAAU,CAAC,uEAAuE,EACjF,CAACvkD,EAAE,CAAC4K,EAAE,EAAE5K,EAAE,CAACgK,IAAI,EAAEhK,EAAE,CAACmzF,WAAW,CAAC,CAAC;MACzC,CAAC,CAAC;MAEFxnF,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUC,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACsnF,2BAA2B,GAAG,UAAU9kD,KAAK,EAAE;IAChD,IAAI3iC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI0iC,KAAK,KAAK,IAAI,EAAE;MAChB3iC,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B;IAEA,IAAI,CAAC08E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAAC,oEAAoE,EAAE,EAAE,EAClF,UAAUD,EAAE,EAAE27C,SAAS,EAAE;QACrB,IAAIA,SAAS,CAACllF,IAAI,CAACvU,MAAM,KAAK,CAAC,IAC3By5F,SAAS,CAACllF,IAAI,CAAC7Q,IAAI,CAAC,CAAC,CAAC,CAAC8L,KAAK,KAAK1V,aAAa,CAACuoC,eAAe,EAAE;UAChEl9B,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAC1B,CAAC,MACI;UACDy4C,EAAE,CAACC,UAAU,CAAC,yIAAyI,EAAE,EAAE,EACvJ,UAAUD,EAAE,EAAE27C,SAAS,EAAE;YACrB,IAAIA,SAAS,CAACllF,IAAI,CAACvU,MAAM,KAAK,CAAC,IAC3ByzB,IAAI,CAACo+B,KAAK,CAAC4nC,SAAS,CAACllF,IAAI,CAAC7Q,IAAI,CAAC,CAAC,CAAC,CAAC04D,IAAI,CAAC,GAAG,CAAC,EAC3Cj3D,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC,CAAC,KAEvBF,QAAQ,CAACE,OAAO,CAAC,KAAK,CAAC;UAC/B,CAAC,CAAC;QACV;MACJ,CAAC,CAAC;IAGV,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACunF,0BAA0B,GAAG,UAAU/kD,KAAK,EAAE;IAC/C,IAAI3iC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAI0iC,KAAK,KAAK,IAAI,EAAE;MAChB3iC,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAC1B,CAAC,MACI;MACD,IAAI,CAAC28E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;QAClCA,EAAE,CAACC,UAAU,CAAC,yEAAyE,EAAE,EAAE,EACvF,UAAUD,EAAE,EAAE27C,SAAS,EAAE;UACrB,IAAIA,SAAS,CAACllF,IAAI,CAACvU,MAAM,GAAG,CAAC,EACzBmF,QAAQ,CAACE,OAAO,CAACo0F,SAAS,CAACllF,IAAI,CAAC7Q,IAAI,CAAC,CAAC,CAAC,CAACyb,IAAI,CAAC,CAAC,KAE9Cha,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAC9B,CAAC,CAAC;MACV,CAAC,EAAE,UAAUtH,GAAG,EAAE;QACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;QACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;MACvC,CAAC,CAAC;IACN;IAEA,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC27F,WAAW,GAAG,UAAUC,KAAK,EAAEjnD,GAAG,EAAEn8C,IAAI,EAAE;IAC3C,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B;MACAA,EAAE,CAACC,UAAU,CAAC,yEAAyE,EACnF,CAACmjD,KAAK,EAAEjnD,GAAG,EAAEn8C,IAAI,CAAC,CAAC;MACvBqH,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUC,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;IACxB,CAAC,CAAC;IAEF,OAAOoH,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC67F,UAAU,GAAG,UAAUD,KAAK,EAAEjnD,GAAG,EAAE;IACpC,IAAI90C,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAAC,0DAA0D,EAAE,CAACmjD,KAAK,EAAEjnD,GAAG,CAAC,EAClF,UAAU6D,EAAE,EAAE27C,SAAS,EAAE;QACrB,IAAIA,SAAS,CAACllF,IAAI,CAACvU,MAAM,GAAG,CAAC,EACzBmF,QAAQ,CAACE,OAAO,CAACo0F,SAAS,CAACllF,IAAI,CAAC7Q,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAEzCyB,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MAC9B,CAAC,CAAC;IACV,CAAC,EAAE,UAAUtH,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;IACxB,CAAC,CAAC;IAEF,OAAOoH,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC87F,eAAe,GAAG,UAAUtjG,IAAI,EAAE;IACnC,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAAC2V,WAAW,CAAC,UAAU75C,EAAE,EAAE;MAC9B;MACAA,EAAE,CAACC,UAAU,CAAC,0BAA0B,CAAC;MAEzC,IAAI,CAAC,CAACjgD,IAAI,IAAI,CAAC,CAACA,IAAI,CAACA,IAAI,IAAIA,IAAI,CAACA,IAAI,CAACkC,MAAM,GAAG,CAAC,EAAE;QAC/CtC,CAAC,CAACmC,IAAI,CAAC/B,IAAI,CAACA,IAAI,EAAE,UAAUgC,GAAG,EAAEtG,EAAE,EAAE;UACjCskD,EAAE,CAACC,UAAU,CAAC,gFAAgF,EAC1F,CAACjkD,aAAa,CAACokC,QAAQ,EAAE1kC,EAAE,CAAC8yF,MAAM,EAAE9yF,EAAE,CAAC6nG,WAAW,EAAE/vE,IAAI,CAACC,SAAS,CAAC/3B,EAAE,CAAC,CAAC,CAAC;QAChF,CAAC,CAAC;MACN;MAEA2L,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;IAC1B,CAAC,EAAE,UAAUC,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC;IACvC,CAAC,CAAC;IAEF,OAAOtP,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAACg8F,YAAY,GAAG,YAAY;IAC5B,IAAIn8F,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC48E,EAAE,CAACuY,eAAe,CAAC,UAAUz8C,EAAE,EAAE;MAClCA,EAAE,CAACC,UAAU,CAAC,6CAA6C,EACvD,CAACjkD,aAAa,CAACokC,QAAQ,CAAC,EAAE,UAAU4f,EAAE,EAAE76C,GAAG,EAAE;QACzC,IAAInF,IAAI,GAAG7D,aAAa,CAACq0E,aAAa,CAACrrE,GAAG,CAACsR,IAAI,EAAE,UAAU/a,EAAE,EAAE;UAC3D,OAAO83B,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAAC+nG,IAAI,CAAC;QAC9B,CAAC,CAAC;QACFp8F,QAAQ,CAACE,OAAO,CAAC;UAAEvH,IAAI,EAAEA;QAAK,CAAC,CAAC;MACpC,CAAC,CAAC;IAEV,CAAC,EAAE,UAAUC,GAAG,EAAE;MACdoH,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;IACxB,CAAC,CAAC;IAEF,OAAOoH,QAAQ,CAACG,OAAO;EAC3B,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;AClnEP5L,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,qBAAqB,EACpD,CAAC,IAAI,EACD,UAAUle,EAAE,EAAE;EAEV,IAAI,CAACinG,OAAO,GAAG,YAAY;IACvB,OAAOvnG,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;EAC7C,CAAC;AAEL,CAAC,CACJ,CAAC,C;;;;;;;;;;;;;;;;;ICTA2vD,mBAAmB;EACrB,SAAAA,oBAAYlnG,EAAE,EAAEN,aAAa,EAAE66B,SAAS,EAAEz6B,cAAc,EAAE;IAAAZ,eAAA,OAAAgoG,mBAAA;IACtD,IAAI,CAACvN,KAAK,GAAG,IAAI;IACjB,IAAI,CAACwN,oBAAoB,GAAG,IAAI;IAChC,IAAI,CAACnnG,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACN,aAAa,GAAGA,aAAa;IAClC,IAAI,CAAC66B,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACz6B,cAAc,GAAGA,cAAc;IACpC,IAAI,CAACsnG,SAAS,GAAG,KAAK;IACtB,IAAI,CAACC,eAAe,GAAG,IAAI;EAC/B;EAAC,OAAAroG,YAAA,CAAAkoG,mBAAA;IAAAxnD,GAAA;IAAA9qC,KAAA,EACD,SAAAqyF,OAAOA,CAAA,EAAG;MAAA,IAAA3hC,KAAA;MACN,IAAM36D,EAAE,GAAG,IAAI,CAACjL,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;MAClD,OAAO5sC,EAAE,CAACtH,IAAI,CAAC,YAAM;QACjB,IAAI;UACAiiE,KAAI,CAACgiC,SAAS,CAAC,CAAC;UAChB,IAAI5oG,MAAM,CAAC6oG,WAAW,IAAI,CAAC7oG,MAAM,CAAC6oG,WAAW,CAACC,SAAS,EAAE;YACrD9oG,MAAM,CAAC6oG,WAAW,CAAC1kD,IAAI,CAAC;cAAE82C,KAAK,EAAEr0B,KAAI,CAACq0B;YAAM,CAAC,CAAC;UAClD;UACA;UACAr0B,KAAI,CAACmiC,kBAAkB,CAAC,CAAC,SAAM,CAAC,UAACjkG,GAAG,EAAK;YACrCa,OAAO,CAACC,GAAG,CAAC,8CAA8C,EAAEd,GAAG,CAAC;UACpE,CAAC,CAAC;UACF,OAAO8hE,KAAI,CAAC5lE,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;QAClD,CAAC,CAAC,OAAO/zC,GAAG,EAAE;UACV,OAAO8hE,KAAI,CAAC5lE,aAAa,CAAC83C,aAAa,CAACh0C,GAAG,CAAC;QAChD;MACJ,CAAC,CAAC;IACN;;IAEA;EAAA;IAAAk8C,GAAA;IAAA9qC,KAAA,EACI,SAAA6yF,kBAAkBA,CAAA,EAAG;MAAA,IAAA1hC,MAAA;MACrB,IAAI,IAAI,CAACshC,eAAe,EAAE;QACtB,OAAO,IAAI,CAACA,eAAe;MAC/B;MAEA,IAAMK,OAAO,GAAG,GAAG;MACnB,IAAMC,UAAU,GAAG,GAAG,CAAC,CAAC;;MAExB,IAAMC,IAAI,GAAG,IAAI,CAACrtE,SAAS,CAAC,YAAM;QAC9B,IAAI77B,MAAM,CAAC6oG,WAAW,IAAI7oG,MAAM,CAAC6oG,WAAW,CAACM,IAAI,EAAE;UAC/C9hC,MAAI,CAACxrC,SAAS,CAAC2oB,MAAM,CAAC0kD,IAAI,CAAC;QAC/B;MACJ,CAAC,EAAEF,OAAO,EAAEC,UAAU,EAAE,KAAK,CAAC;MAE9B,IAAI,CAACN,eAAe,GAAGO,IAAI,CAACvkG,IAAI,CAC5B,YAAM;QACF0iE,MAAI,CAACqhC,SAAS,GAAG,IAAI;QACrB,OAAOrhC,MAAI,CAAC/lE,EAAE,CAACimB,MAAM,CAAC;UAAE6hF,IAAI,EAAE;QAAK,CAAC,CAAC;MACzC,CAAC,EACD,YAAM;QACF/hC,MAAI,CAACqhC,SAAS,GAAG,KAAK;QACtB,OAAO,IAAI;MACf,CACJ,CAAC,WAAQ,CAAC,YAAM;QACZrhC,MAAI,CAACshC,eAAe,GAAG,IAAI;MAC/B,CAAC,CAAC;MAEF,OAAO,IAAI,CAACA,eAAe;IAC/B;EAAC;IAAA3nD,GAAA;IAAA9qC,KAAA,EAED,SAAAmzF,UAAUA,CAAC9tF,GAAG,EAAE;MACZ,OAAO,IAAI,CAACva,aAAa,CAAC83C,aAAa,CAAC;QAAEv9B,GAAG,EAAEA,GAAG;QAAE6tF,IAAI,EAAE;MAAK,CAAC,CAAC;IACrE;EAAC;IAAApoD,GAAA;IAAA9qC,KAAA,EAED,SAAAozF,YAAYA,CAAC/nG,QAAQ,EAAE;MAAA,IAAAgoG,MAAA;MACnB;MACA;MACA,IAAIhoG,QAAQ,CAACioG,cAAc,KAAK,aAAa,EAAE;QAC3C,OAAO,IAAI,CAACxoG,aAAa,CAAC83C,aAAa,CAAC;UAAE2wD,MAAM,EAAE;QAAK,CAAC,CAAC;MAC7D;MACA,IAAIloG,QAAQ,CAACmoG,OAAO,EAAE;QAClB,OAAO,IAAI,CAAC1oG,aAAa,CAAC83C,aAAa,CAAC;UAAEv9B,GAAG,EAAEha,QAAQ,CAACmoG,OAAO;UAAEC,OAAO,EAAE;QAAK,CAAC,CAAC;MACrF;MACA,IAAI,CAACpoG,QAAQ,CAACqoG,OAAO,EAAE;QACnB,OAAO,IAAI,CAACP,UAAU,CAAC,IAAI,CAACjoG,cAAc,CAACe,SAAS,CAAC,6EAA6E,CAAC,CAAC;MACxI;MACA,IAAI,CAACZ,QAAQ,CAACsoG,YAAY,IAAItoG,QAAQ,CAACsoG,YAAY,KAAK,GAAG,IAAItoG,QAAQ,CAACsoG,YAAY,KAAK,CAAC,EAAE;QACxF,OAAO,IAAI,CAAC7oG,aAAa,CAAC83C,aAAa,CAAC;UAAE2wD,MAAM,EAAE;QAAK,CAAC,CAAC;MAC7D;MACA,IAAI,CAACloG,QAAQ,CAACuoG,aAAa,EAAE;QACzB,OAAO,IAAI,CAACT,UAAU,CAAC,IAAI,CAACjoG,cAAc,CAACe,SAAS,CAAC,oFAAoF,CAAC,CAAC;MAC/I;MACA,IAAI,CAACZ,QAAQ,CAACwoG,WAAW,EAAE;QACvB,OAAO,IAAI,CAACV,UAAU,CAAC,IAAI,CAACjoG,cAAc,CAACe,SAAS,CAAC,gFAAgF,CAAC,CAAC;MAC3I;MAEA,IAAInC,MAAM,CAAC6oG,WAAW,IAAI7oG,MAAM,CAAC6oG,WAAW,CAACM,IAAI,EAAE;QAC/C,IAAI,CAACT,SAAS,GAAG,KAAK;MAC1B,CAAC,MAAM,IAAI,IAAI,CAACA,SAAS,EAAE;QACvB,OAAO,IAAI,CAACW,UAAU,CAAC,IAAI,CAACjoG,cAAc,CAACe,SAAS,CAAC,6BAA6B,CAAC,CAAC;MACxF;MAEA,IAAI,OAAO0mG,WAAW,KAAK,WAAW,IAAI,OAAOA,WAAW,CAACmB,oBAAoB,KAAK,UAAU,EAAE;QAC9F,OAAO,IAAI,CAACX,UAAU,CAAC,IAAI,CAACjoG,cAAc,CAACe,SAAS,CAAC,6BAA6B,CAAC,CAAC;MACxF;MAEA,IAAM8J,EAAE,GAAG48F,WAAW,CAACmB,oBAAoB,CAAC;QACxCzoG,QAAQ,EAAE;UACN4J,EAAE,EAAE5J,QAAQ,CAACsoG,YAAY;UACzBx+F,KAAK,EAAE9J,QAAQ,CAACqoG;QACpB,CAAC;QACDK,IAAI,EAAE;UACF98C,IAAI,EAAE5rD,QAAQ,CAACwoG,WAAW;UAC1B9O,KAAK,EAAE15F,QAAQ,CAACuoG;QACpB;MACJ,CAAC,CAAC;;MAEF;MACA,IAAI,CAAC79F,EAAE,IAAI,OAAOA,EAAE,CAACtH,IAAI,KAAK,UAAU,EAAE;QACtC,OAAO,IAAI,CAAC3D,aAAa,CAAC63C,cAAc,CAAC;UAAEqxD,QAAQ,EAAE;QAAK,CAAC,CAAC;MAChE;MAEA,OAAOj+F,EAAE,CAACtH,IAAI,CACV;QAAA,OAAM4kG,MAAI,CAACvoG,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;MAAA,CACjD,CAAC,SACK,CAAC,UAAC/zC,GAAG,EAAK;QACZ,IAAIqlG,QAAQ,GAAGZ,MAAI,CAACnoG,cAAc,CAACe,SAAS,CAAC,0CAA0C,CAAC;QACxF,IAAIoZ,GAAG,GAAIzW,GAAG,KAAKA,GAAG,CAACyW,GAAG,IAAIzW,GAAG,CAAC0W,OAAO,CAAC,IAAK1W,GAAG,IAAIqlG,QAAQ;QAC9D,IAAI,OAAO5uF,GAAG,KAAK,QAAQ,EAAE;UACzBA,GAAG,GAAG4uF,QAAQ;QAClB;QACA,OAAOZ,MAAI,CAACF,UAAU,CAAC9tF,GAAG,CAAC;MAC/B,CAAC,CAAC;IACN;EAAC;IAAAylC,GAAA;IAAA9qC,KAAA,EAED,SAAAk0F,aAAaA,CAAA,EAAG;MACZ,OAAO,IAAI,CAACppG,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;IAClD;EAAC;IAAAmI,GAAA;IAAA9qC,KAAA,EAED,SAAAm0F,kBAAkBA,CAAC9oG,QAAQ,EAAE;MACzB,IAAM+oG,OAAO,GAAG7lG,CAAC,CAAC,wBAAwB,CAAC,CAAC6zD,KAAK,CAAC,CAAC,CAACzvD,IAAI,CAAC,CAAC,CAACyX,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;MAC5F,OAAO,IAAI,CAACtf,aAAa,CAAC63C,cAAc,CAACyxD,OAAO,CAAC;IACrD;;IAEA;IACA;EAAA;IAAAtpD,GAAA;IAAA9qC,KAAA,EACA,SAAA0yF,SAASA,CAAA,EAAI;MAET;MACA,IAAIC,WAAW,GAAG7oG,MAAM,CAAC6oG,WAAW,IAAI,EAAE;MAC1C,SAAS0B,YAAYA,CAACrgC,GAAG,EAAE;QACvB,IAAMsgC,WAAW,GAAGvpF,QAAQ,CAACygE,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAM/8B,MAAM,GAAG1jC,QAAQ,CAAC81B,aAAa,CAAC,QAAQ,CAAC;QAC/C4N,MAAM,CAACulB,GAAG,GAAGA,GAAG;QAChBvlB,MAAM,CAAC8lD,WAAW,GAAG,EAAE;QACvBD,WAAW,CAACE,UAAU,CAACC,YAAY,CAAChmD,MAAM,EAAE6lD,WAAW,CAAC;MAC5D;MAEA,IAAI,CAAC3B,WAAW,CAAC+B,aAAa,EAAE;QAC5B5qG,MAAM,CAAC6oG,WAAW,GAAGA,WAAW;QAChC,IAAI,OAAO7oG,MAAM,CAAC6qG,IAAI,KAAK,WAAW,EAAE7qG,MAAM,CAAC6qG,IAAI,GAAGhC,WAAW;QACjEA,WAAW,CAAClhD,OAAO,GAAG,CAAC;QACvBkhD,WAAW,CAAC+B,aAAa,GAAG,IAAI;QAEhC,IAAM5tB,GAAG,GAAG,IAAI5gD,IAAI,CAAC,CAAC;QACtB,IAAM0uE,UAAU,GAAG9tB,GAAG,CAACpuB,WAAW,CAAC,CAAC,CAACjmC,QAAQ,CAAC,CAAC,GAAGq0D,GAAG,CAACnuB,QAAQ,CAAC,CAAC,CAAClmC,QAAQ,CAAC,CAAC,GAAGq0D,GAAG,CAAC+tB,OAAO,CAAC,CAAC,CAACpiF,QAAQ,CAAC,CAAC;QACtG4hF,YAAY,CAAC,mDAAmD,GAAGO,UAAU,CAAC;QAC9E,IAAIE,WAAW,GAAG,KAAK;QACvBnC,WAAW,CAAC1kD,IAAI,GAAG,UAAU4lC,CAAC,EAAE;UAC5B,IAAIihB,WAAW,EAAE,MAAM,IAAInjC,KAAK,CAAC,6CAA6C,CAAC;UAC/EmjC,WAAW,GAAG,IAAI;UAClB,IAAI/P,KAAK,GAAG4N,WAAW,CAACoC,MAAM,GAAGlhB,CAAC,CAACkR,KAAK;UACxC,IAAI,CAACA,KAAK,EAAE,MAAM,IAAIpzB,KAAK,CAAC,4CAA4C,CAAC;UAEzE,KAAK,IAAIk6B,CAAC,GAAG,EAAE,EAAEmJ,QAAQ,GAAG,2EAA2E,CAAClvF,KAAK,CAAC,GAAG,CAAC,EACjH5N,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG88F,QAAQ,CAACnkG,MAAM,EAAEqH,CAAC,IAAI,CAAC,EACnC,CAAE,UAAU27E,CAAC,EAAEzgD,CAAC,EAAE;YACdygD,CAAC,CAACzgD,CAAC,CAAC,GAAG,YAAY;cACfy4D,CAAC,CAAC/6F,IAAI,CAAC,CAACsiC,CAAC,EAAE1+B,KAAK,CAAC0oD,SAAS,CAACjpD,KAAK,CAACwzD,IAAI,CAAC/rD,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC;UACL,CAAC,CAAC+2F,WAAW,EAAEqC,QAAQ,CAAC98F,CAAC,CAAC,CAAC;UAI3Bm8F,YAAY,CAAC,wCAAwC,GAAGtP,KAAK,GAAG,QAAQ,GAAG6P,UAAU,GAAG9tB,GAAG,CAACmuB,QAAQ,CAAC,CAAC,CAACxiF,QAAQ,CAAC,CAAC,CAAC;UAClHkgF,WAAW,CAACC,SAAS,GAAG/e,CAAC;UACzB8e,WAAW,CAACuC,OAAO,GAAGrJ,CAAC;QAC3B,CAAC;MACL;IAEJ;EAAC;IAAA/gD,GAAA;IAAA9qC,KAAA,EAID,SAAAm1F,SAASA,CAAA,EAAG;MACR,IAAI,OAAOxC,WAAW,KAAK,WAAW,IAAIA,WAAW,IAAIA,WAAW,CAACM,IAAI,IAAIN,WAAW,CAACM,IAAI,CAACmC,MAAM,IAAIzC,WAAW,CAACM,IAAI,CAACmC,MAAM,KAAK,sBAAsB,EAAE;QACxJ,OAAO,KAAK;MAChB;MACA,OAAO,IAAI,CAAC7C,oBAAoB,IAAI,OAAOI,WAAW,KAAK,WAAW,IAAIA,WAAW,IAAIA,WAAW,CAACM,IAAI,IAAIN,WAAW,CAACM,IAAI,CAACvS,QAAQ,IAAIiS,WAAW,CAACM,IAAI,CAACvS,QAAQ,CAAC2U,aAAa,IAC7K1C,WAAW,CAACM,IAAI,CAACvS,QAAQ,CAAC2U,aAAa,CAACxoD,OAAO;IACvD;EAAC;IAAA/B,GAAA;IAAA9qC,KAAA,EAED,SAAAs1F,UAAUA,CAAA,EAAG;MACT,IAAI,IAAI,CAACH,SAAS,CAAC,CAAC,EAAE;QAClB5mG,CAAC,CAAC,sBAAsB,CAAC,CAAC+R,IAAI,CAAC,CAAC;MACpC,CAAC,MAAM;QACH/R,CAAC,CAAC,2BAA2B,CAAC,CAAC+R,IAAI,CAAC,CAAC;MACzC;MACA/R,CAAC,CAAC,UAAU,CAAC,CAAC+R,IAAI,CAAC,CAAC;IACxB;EAAC;IAAAwqC,GAAA;IAAA9qC,KAAA,EAED,SAAAu1F,UAAUA,CAAA,EAAG;MACT,IAAI,IAAI,CAACJ,SAAS,CAAC,CAAC,EAAE;QAClB5mG,CAAC,CAAC,sBAAsB,CAAC,CAACgH,IAAI,CAAC,CAAC;MACpC,CAAC,MAAM;QACHhH,CAAC,CAAC,2BAA2B,CAAC,CAACgH,IAAI,CAAC,CAAC;MACzC;MACAhH,CAAC,CAAC,UAAU,CAAC,CAACgH,IAAI,CAAC,CAAC;IACxB;EAAC;AAAA;AAKLhL,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,qBAAqB,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAEgpF,mBAAmB,CAAC,CAAC,C;;;;;;;;;;;;;;;;;ACrN/H,SAASkD,2BAA2BA,CAACxpF,CAAC,EAAEthB,UAAU,EAAE;EACvD,IAAI+qG,cAAc,GAAG,KAAK;EAE1B,IAAIzpF,CAAC,IAAIA,CAAC,CAACpX,MAAM,EAAE;IACf,IAAI8gG,OAAO,GAAGnnG,CAAC,CAACyd,CAAC,CAACpX,MAAM,CAAC,CAACshB,OAAO,CAAC,gCAAgC,CAAC;IACnE,IAAIw/E,OAAO,CAAC7kG,MAAM,GAAG,CAAC,EAAE;MACpB4kG,cAAc,GAAG,IAAI;MACrB,IAAIzP,IAAI,GAAG0P,OAAO,CAACvxF,MAAM,CAAC,CAAC,CAACrI,IAAI,CAAC,yBAAyB,CAAC,CAACnJ,IAAI,CAAC,CAAC;MAClE,IAAIgjG,QAAQ,GAAGD,OAAO,CAAC,CAAC,CAAC;MACzB,IAAI72F,KAAK,GAAG82F,QAAQ,CAACC,YAAY,IAAID,QAAQ,CAACC,YAAY,CAACC,aAAa,CAAC,CAAC,GACpEtnG,CAAC,CAAConG,QAAQ,CAACC,YAAY,CAACE,UAAU,CAAC,CAACh6F,IAAI,CAAC,oBAAoB,CAAC,CAACnJ,IAAI,CAAC,CAAC,GACrE,IAAI;MACV,IAAIqb,IAAI,GAAGzjB,OAAO,CAACw3C,OAAO,CAACh3B,QAAQ,CAACstC,aAAa,CAAC,UAAU,CAAC,CAAC;MAC9D,IAAIvW,QAAQ,GAAG9zB,IAAI,CAAC8zB,QAAQ,CAAC,CAAC;MAC9B,IAAI,CAACp3C,UAAU,EAAE;QACbA,UAAU,GAAGo3C,QAAQ,CAACG,GAAG,CAAC,YAAY,CAAC;MAC3C;MACAv3C,UAAU,CAACkzD,MAAM,CAAC,YAAY;QAC1BlzD,UAAU,CAAC+K,UAAU,CAAC,wBAAwB,EAAE;UAAEuwF,IAAI,EAAEA,IAAI;UAAEnnF,KAAK,EAAEA;QAAM,CAAC,CAAC;MACjF,CAAC,CAAC;IACN;EACJ;EACA,OAAO42F,cAAc;AACzB;AAGO,SAASM,uCAAuCA,CAAC/pF,CAAC,EAAEthB,UAAU,EAAE;EACnE,IAAI;IACA,IAAIL,EAAE,GAAGkE,CAAC,CAACyd,CAAC,CAACgqF,SAAS,GAAGhqF,CAAC,CAACgqF,SAAS,GAAGhqF,CAAC,CAACpX,MAAM,CAAC;IAEhD,IAAIvK,EAAE,CAAC6rB,OAAO,CAAC,mBAAmB,CAAC,CAACrlB,MAAM,GAAG,CAAC,EAAE;MAC5C,IAAIolG,SAAS,GAAG,CAAC,EAAEnsG,MAAM,CAACynB,OAAO,IAAIznB,MAAM,CAACynB,OAAO,CAACqC,OAAO,IAAI9pB,MAAM,CAACynB,OAAO,CAACqC,OAAO,CAACsiF,SAAS,CAAC;MAChG,IAAMC,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAYvnG,GAAG,EAAE;QACrC,IAAIof,IAAI,GAAGzjB,OAAO,CAACw3C,OAAO,CAACh3B,QAAQ,CAACstC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC9D,IAAIvW,QAAQ,GAAG9zB,IAAI,CAAC8zB,QAAQ,CAAC,CAAC;QAC9B,IAAI,CAACp3C,UAAU,EAAE;UACbA,UAAU,GAAGo3C,QAAQ,CAACG,GAAG,CAAC,YAAY,CAAC;QAC3C;QACA,IAAI/2C,cAAc,GAAG42C,QAAQ,CAACG,GAAG,CAAC,gBAAgB,CAAC;QACnD,IAAIm0D,eAAe,GAAGlrG,cAAc,CAACe,SAAS,CAAC,uEAAuE,CAAC;QACvH,IAAI2C,GAAG,EAAE;UACLa,OAAO,CAACqkB,KAAK,CAAC,2CAA2C,EAAEllB,GAAG,CAAC;QACnE;QACAlE,UAAU,CAAC2rG,WAAW,CAAC,YAAY;UAC/B3rG,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;YACnC6P,OAAO,EAAE8wF,eAAe;YACxBr9F,IAAI,EAAE;UACV,CAAC,CAAC;QACN,CAAC,CAAC;MACN,CAAC;MAED,IAAMu9F,aAAa,GAAG,SAAhBA,aAAaA,CAAY3jG,IAAI,EAAE;QACjC,IAAIA,IAAI,EAAE;UACN,IAAI,CAACjI,UAAU,EAAE;YACb,IAAIsjB,IAAI,GAAGzjB,OAAO,CAACw3C,OAAO,CAACh3B,QAAQ,CAACstC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC9D3tD,UAAU,GAAGsjB,IAAI,CAAC8zB,QAAQ,CAAC,CAAC,CAACG,GAAG,CAAC,YAAY,CAAC;UAClD;UAEAv3C,UAAU,CAACkzD,MAAM,CAAC,YAAY;YAC1BnuD,OAAO,CAACC,GAAG,CAAC,yBAAyB,CAAC;YACtChF,UAAU,CAAC+K,UAAU,CAAC,wBAAwB,EAAE;cAACuwF,IAAI,EAAErzF,IAAI;cAAEkM,KAAK,EAAE;YAAI,CAAC,CAAC;UAC9E,CAAC,CAAC;QACN;MACJ,CAAC;MAED,IAAIo3F,SAAS,EAAE;QACXnsG,MAAM,CAACynB,OAAO,CAACqC,OAAO,CAACsiF,SAAS,CAACK,KAAK,CAAC,UAAU5jG,IAAI,EAAE;UACnD2jG,aAAa,CAAC3jG,IAAI,CAAC;UACnB7I,MAAM,CAACynB,OAAO,CAACqC,OAAO,CAACsiF,SAAS,CAAC5lG,IAAI,CAAC,EAAE,CAAC;QAC7C,CAAC,EAAE6lG,kBAAkB,CAAC;MAC1B,CAAC,MAAM,IAAIx1D,SAAS,IAAIA,SAAS,CAACu1D,SAAS,IAAIv1D,SAAS,CAACu1D,SAAS,CAACM,QAAQ,EAAE;QACzE71D,SAAS,CAACu1D,SAAS,CAACM,QAAQ,CAAC,CAAC,CACzB/nG,IAAI,CAAC,UAAUkE,IAAI,EAAE;UAClB2jG,aAAa,CAAC3jG,IAAI,CAAC;QACvB,CAAC,CAAC,CACDlE,IAAI,CAAC,YAAY;UACdgvD,UAAU,CAAC,YAAM;YACb9c,SAAS,CAACu1D,SAAS,CAACO,SAAS,CAAC,EAAE,CAAC;UACrC,CAAC,EAAE,GAAG,CAAC;QACX,CAAC,CAAC,SACI,CAAC,UAAA7nG,GAAG,EAAI;UACVunG,kBAAkB,CAACvnG,GAAG,CAAC;QAC3B,CAAC,CAAC;MACV,CAAC,MAAM;QACHunG,kBAAkB,CAAC,CAAC;MACxB;MACA,OAAO,IAAI;IACf;EACJ,CAAC,CAAC,OAAOnqF,CAAC,EAAE;IACR;EAAA;EAEJ,OAAO,KAAK;AAChB,C;;;;;;;;;;;AC7FAzhB,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,gBAAgB,EAC/C,CACI,eAAe,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,eAAe,EAAE,gBAAgB,EAChG,UAAU3e,aAAa,EAAE+rG,mBAAmB,EAAEC,mBAAmB,EAAE7rG,aAAa,EAAEI,cAAc,EAAE;EAE9F,IAAI,CAAC0rG,YAAY,GAAG;IAChB5Q,IAAI,EAAE,IAAI;IACV3xF,IAAI,EAAE;EACV,CAAC;EAED,IAAI,CAAC6mB,QAAQ,GAAG,IAAI;EACpB,IAAI,CAAC27E,MAAM,GAAG,KAAK;EAEnB,IAAI,CAACC,cAAc,GAAG,KAAK;EAE3B,IAAI/oF,IAAI,GAAG,IAAI;EACf,IAAIgpF,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAA,EAAe;IACjC,IAAIhpF,IAAI,CAAC6oF,YAAY,CAAC5Q,IAAI,KAAK,aAAa,IAAI,CAACr7F,aAAa,CAACmB,QAAQ,EAAE;MACrE2D,OAAO,CAACC,GAAG,CAAC,2CAA2C,CAAC;MACxD,OAAO5E,aAAa,CAAC63C,cAAc,CAAC,KAAK,CAAC;IAC9C;IACA;IACA,OAAO73C,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC,CAACl0C,IAAI,CAAC,YAAY;MACvD,OAAOsf,IAAI,CAACmN,QAAQ,CAACm3E,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC5jG,IAAI,CAAC,UAAUuoG,UAAU,EAAE;MAC1B,IAAIA,UAAU,EAAE;QACZjpF,IAAI,CAAC8oF,MAAM,GAAG,IAAI;MACtB;MACA,OAAOG,UAAU;IACrB,CAAC,CAAC,SAAM,CAAC,UAAUpoG,GAAG,EAAE;MACpB;MACAa,OAAO,CAACC,GAAG,CAAC,kCAAkC,EAAEd,GAAG,CAAC;MACpD,OAAO,KAAK;IAChB,CAAC,CAAC;EACN,CAAC;;EAED;EACA;EACA;EACA,IAAI,CAACyjG,OAAO,GAAG,UAAUv+F,GAAG,EAAE;IAC1B,IAAInJ,aAAa,CAACssG,gBAAgB,EAAE;MAChC,IAAI,CAACL,YAAY,CAAC5Q,IAAI,GAAG,aAAa;MACtC,IAAI,CAAC4Q,YAAY,CAACviG,IAAI,GAAG,aAAa;MACtC,IAAI,CAACyiG,cAAc,GAAG,IAAI;MAC1BnsG,aAAa,CAACkB,aAAa,GAAG,IAAI;MAClC,IAAI,CAACqvB,QAAQ,GAAGy7E,mBAAmB;MACnC,IAAI,CAACz7E,QAAQ,CAAC6pE,KAAK,GAAGp6F,aAAa,CAACssG,gBAAgB;IACxD,CAAC,MAAM;MACH,IAAItsG,aAAa,CAACmsG,cAAc,EAAE;QAC9B,IAAI,CAACF,YAAY,CAAC5Q,IAAI,GAAG,MAAM;QAC/B,IAAI,CAAC4Q,YAAY,CAACviG,IAAI,GAAG,MAAM;QAC/B,IAAI,CAAC6mB,QAAQ,GAAGw7E,mBAAmB;MACvC;IACJ;IAEA,IAAI3gG,EAAE,GAAGjL,aAAa,CAAC63C,cAAc,CAAC7uC,GAAG,CAAC;IAE1C,IAAI,CAAC,IAAI,CAAC+iG,MAAM,IAAI,IAAI,CAAC37E,QAAQ,IAAI,OAAO,IAAI,CAACA,QAAQ,CAACm3E,OAAO,KAAK,UAAU,EAAE;MAC9Et8F,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;QACrB,OAAOsoG,kBAAkB,CAAC,CAAC;MAC/B,CAAC,CAAC;IACN;IACA,OAAOhhG,EAAE,CAACtH,IAAI,CAAC,YAAY;MACvB,OAAO3D,aAAa,CAAC63C,cAAc,CAAC7uC,GAAG,CAAC;IAC5C,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAAC4wE,gBAAgB,GAAG,YAAY;IAChC,OAAO,IAAI,CAACoyB,cAAc;EAC9B,CAAC;EAED,IAAI,CAACI,mBAAmB,GAAG,YAAY;IACnC,OAAO,IAAI,CAACN,YAAY;EAC5B,CAAC;;EAED;EACA,IAAI,CAACxD,YAAY,GAAG,UAAU/nG,QAAQ,EAAE;IACpC,IAAI0K,EAAE,GAAGjL,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;IAE3C,IAAI,IAAI,CAACm0D,cAAc,IAAI,CAAC,IAAI,CAACD,MAAM,IAAI,IAAI,CAAC37E,QAAQ,IAAI,OAAO,IAAI,CAACA,QAAQ,CAACm3E,OAAO,KAAK,UAAU,EAAE;MACrGt8F,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;QACrB,OAAOsoG,kBAAkB,CAAC,CAAC;MAC/B,CAAC,CAAC;IACN;IAEA,IAAI,IAAI,CAACD,cAAc,IAAI,IAAI,CAAC57E,QAAQ,IAAI,OAAO,IAAI,CAACA,QAAQ,CAACk4E,YAAY,KAAK,UAAU,EAAE;MAC1Fr9F,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;QACrB,IAAI,CAACsf,IAAI,CAAC8oF,MAAM,EAAE;UACd,OAAO/rG,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;QAC7C;QACA,OAAO50B,IAAI,CAACmN,QAAQ,CAACk4E,YAAY,CAAC/nG,QAAQ,CAAC;MAC/C,CAAC,CAAC,SAAM,CAAC,UAAUyI,GAAG,EAAE;QACpB,IAAIA,GAAG,IAAIA,GAAG,CAAC2/F,OAAO,KAAK,IAAI,EAAE;UAC7B3oG,aAAa,CAACowE,cAAc,CAAC;YACzBr8D,KAAK,EAAE3T,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC;YAC1Ci1C,IAAI,EAAEptC,GAAG,CAACuR,GAAG;YACbg7D,SAAS,EAAE;UACf,CAAC,CAAC;QACN,CAAC,MAAM;UACH,MAAMvsE,GAAG;QACb;MACJ,CAAC,CAAC;IACN;IAEA,OAAOiC,EAAE;EACb,CAAC;;EAED;EACA,IAAI,CAACm+F,aAAa,GAAG,YAAY;IAC7B,IAAIn+F,EAAE,GAAGjL,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;IAC1C,IAAI50B,IAAI,GAAG,IAAI;IAEf,IAAI,IAAI,CAAC+oF,cAAc,IAAI,IAAI,CAACD,MAAM,IAAI,OAAO,IAAI,CAAC37E,QAAQ,CAACk4E,YAAY,KAAK,UAAU,EAAE;MACvFr9F,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAU;QACrB,OAAOsf,IAAI,CAACmN,QAAQ,CAACg5E,aAAa,CAAC,CAAC;MACtC,CAAC,CAAC;MACR;MACA;MACA;MACA;MACA;IACC;IAED,OAAOn+F,EAAE;EACb,CAAC;EAED,IAAI,CAACo+F,kBAAkB,GAAG,UAAS9oG,QAAQ,EAAE;IACzC,IAAI0K,EAAE,GAAGjL,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;IAC3C,IAAI50B,IAAI,GAAG,IAAI;IAEf,IAAI,IAAI,CAAC+oF,cAAc,IAAI,IAAI,CAACD,MAAM,IAAI,OAAO,IAAI,CAAC37E,QAAQ,CAACi5E,kBAAkB,KAAK,UAAU,EAAE;MAC9Fp+F,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;QACrB,OAAOsf,IAAI,CAACmN,QAAQ,CAACi5E,kBAAkB,CAAC9oG,QAAQ,CAAC;MACrD,CAAC,CAAC,CAACoD,IAAI,CAAC,UAAS0oG,GAAG,EAAC;QACjB9rG,QAAQ,CAAC+rG,gBAAgB,GAAGD,GAAG;MACnC,CAAC,CAAC;IACN;IAEA,OAAOphG,EAAE;EACb,CAAC;AACL,CAAC,CAEJ,CAAC,C;;;;;;;;;;;;;;;;AC9I+C;AAC8D;AAEnH,SAASshG,eAAeA,CAAA,EAAG;EACvB,IAAIrpF,IAAI,GAAGzjB,OAAO,CAACw3C,OAAO,CAACh3B,QAAQ,CAACstC,aAAa,CAAC,UAAU,CAAC,CAAC;EAC9D,IAAIvW,QAAQ,GAAG9zB,IAAI,CAAC8zB,QAAQ,CAAC,CAAC;EAC9B,OAAOA,QAAQ;AACnB;AAEA,SAASw1D,iBAAiBA,CAACjjG,IAAI,EAAE;EAC7B,OAAOgjG,eAAe,CAAC,CAAC,CAACp1D,GAAG,CAAC5tC,IAAI,CAAC;AACtC;AAEA,SAASkjG,aAAaA,CAACpyF,OAAO,EAAE;EAC5Bs4C,UAAU,CAAC,YAAY;IACnB,IAAI/yD,UAAU,GAAG2sG,eAAe,CAAC,CAAC,CAACp1D,GAAG,CAAC,YAAY,CAAC;IACpDv3C,UAAU,CAACkzD,MAAM,CAAC,YAAY;MAC1BlzD,UAAU,CAAC+K,UAAU,CAAC,cAAc,EAAE0P,OAAO,CAAC;IAClD,CAAC,CAAC;EACN,CAAC,EAAE,CAAC,CAAC;AACT;AAEA5W,CAAC,CAACwc,QAAQ,CAAC,CAACysF,gBAAgB,CAAC;EACzBC,aAAa,EAAE,GAAG;EAClB;EACAC,eAAe,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;EACtCC,SAAS,EAAE,CAAC;EACZC,UAAU,EAAE,SAAZA,UAAUA,CAAYzyF,OAAO,EAAE0yF,GAAG,EAAE;IAChC1yF,OAAO,GAAGA,OAAO,CAACiF,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;IAC/C3a,OAAO,CAACC,GAAG,CAAC,oBAAoB,GAAGyV,OAAO,CAAC;IAC3CoyF,aAAa,CAACpyF,OAAO,CAAC;EAC1B,CAAC,CAAC;AACN,CAAC,CAAC;AAIF,SAAS2yF,kBAAkBA,CAAC9rF,CAAC,EAAE;EAC3Bvc,OAAO,CAACC,GAAG,CAAC,4BAA4B,CAAC;EACzC,IAAMqoG,OAAO,GAAGxpG,CAAC,CAAC,4BAA4B,CAAC;EAE/C,IAAIwpG,OAAO,CAAClnG,MAAM,GAAG,CAAC,EAAE;IACpB,IAAMmnG,MAAM,GAAGzpG,CAAC,CAACyd,CAAC,CAACpX,MAAM,CAAC,CAACshB,OAAO,CAAC,4BAA4B,CAAC;IAChE,IAAI8hF,MAAM,CAACnnG,MAAM,IAAI,CAAC,EAAE;MACpB;MACA,IAAMmd,IAAI,GAAGzjB,OAAO,CAACw3C,OAAO,CAACh3B,QAAQ,CAACstC,aAAa,CAAC,UAAU,CAAC,CAAC;MAChE,IAAMvW,QAAQ,GAAG9zB,IAAI,CAAC8zB,QAAQ,CAAC,CAAC;MAChC,IAAMp3C,UAAU,GAAGo3C,QAAQ,CAACG,GAAG,CAAC,YAAY,CAAC;MAC7Cv3C,UAAU,CAACkzD,MAAM,CAAC,YAAY;QAC1BnuD,OAAO,CAACC,GAAG,CAAC,yCAAyC,CAAC;QACtDhF,UAAU,CAAC+K,UAAU,CAAC,qBAAqB,CAAC;MAChD,CAAC,CAAC;MACF,OAAO,IAAI;IACf;EACJ;EACA,OAAO,KAAK;AAChB;AAEA,SAASwiG,uBAAuBA,CAAA,EAAG;EAC/B,IAAI1pG,CAAC,CAAC,gBAAgB,CAAC,CAACsf,EAAE,CAAC,UAAU,CAAC,IAClC,CAACtf,CAAC,CAAC,oBAAoB,CAAC,CAACsf,EAAE,CAAC,UAAU,CAAC,EAAE;IACzCtf,CAAC,CAAC,gBAAgB,CAAC,CAACkwD,EAAE,CAAC,OAAO,EAAE,YAAY;MAAE,OAAO,KAAK;IAAE,CAAC,CAAC;IAC9DlwD,CAAC,CAAC,4BAA4B,CAAC,CAACkwD,EAAE,CAAC,OAAO,EAAE,YAAY;MAAE,OAAO,KAAK;IAAE,CAAC,CAAC;IAE1ElwD,CAAC,CAAC,gBAAgB,CAAC,CAACgH,IAAI,CAAC,CAAC;IAC1B,OAAO,IAAI;EACf;EACA,OAAO,KAAK;AAChB;AAEA,SAAS2iG,uBAAuBA,CAAClsF,CAAC,EAAE;EAChC,IAAIzd,CAAC,CAAC,gBAAgB,CAAC,CAACsf,EAAE,CAAC,UAAU,CAAC,EAAE;IACpC,IAAMsqF,IAAI,GAAG5pG,CAAC,CAACyd,CAAC,CAACpX,MAAM,CAAC,CAACshB,OAAO,CAAC,gBAAgB,CAAC;IAClD,IAAIiiF,IAAI,CAACtnG,MAAM,KAAK,CAAC,EAAE;MACnB,IAAMmd,IAAI,GAAGzjB,OAAO,CAACw3C,OAAO,CAACh3B,QAAQ,CAACstC,aAAa,CAAC,UAAU,CAAC,CAAC;MAChE,IAAMvW,QAAQ,GAAG9zB,IAAI,CAAC8zB,QAAQ,CAAC,CAAC;MAChC,IAAMp3C,UAAU,GAAGo3C,QAAQ,CAACG,GAAG,CAAC,YAAY,CAAC;MAC7Cv3C,UAAU,CAACkzD,MAAM,CAAC,YAAY;QAC1BlzD,UAAU,CAAC+K,UAAU,CAAC,oBAAoB,CAAC;MAC/C,CAAC,CAAC;MACF,OAAO,IAAI;IACf;EACJ;EACA,OAAO,KAAK;AAChB;AAEA,SAAS2iG,mBAAmBA,CAAA,EAAG;EAC3B,IAAMC,KAAK,GAAG9pG,CAAC,CAAC,uBAAuB,CAAC;EACxC,IAAM+pG,SAAS,GAAGjB,eAAe,CAAC,CAAC,CAACp1D,GAAG,CAAC,YAAY,CAAC;EAErD,IAAIo2D,KAAK,CAACxnG,MAAM,GAAG,CAAC,EAAE;IAClB,IAAM0nG,SAAS,GAAGF,KAAK,CAACriF,MAAM,CAAC,CAAC,CAACK,GAAG,IAAI9nB,CAAC,CAAC,MAAM,CAAC,CAACqZ,MAAM,CAAC,CAAC,IAAIywF,KAAK,CAACriF,MAAM,CAAC,CAAC,CAACK,GAAG,GAAG,CAAC;IAEpF,IAAIkiF,SAAS,EAAE;MACXD,SAAS,CAAC16C,MAAM,CAAC,YAAY;QACzBnuD,OAAO,CAACC,GAAG,CAAC,gBAAgB,CAAC;QAC7B4oG,SAAS,CAAC7iG,UAAU,CAAC,gBAAgB,CAAC;MAC1C,CAAC,CAAC;IACN;IACA,OAAO,IAAI;EACf;EACA,OAAO,KAAK;AAChB;AAEA,SAAS+iG,0BAA0BA,CAACxsF,CAAC,EAAE;EACnC,IAAMssF,SAAS,GAAGjB,eAAe,CAAC,CAAC,CAACp1D,GAAG,CAAC,YAAY,CAAC;EACrD,IAAMwzD,cAAc,GAAGD,uFAA2B,CAACxpF,CAAC,EAAEssF,SAAS,CAAC;EAEhE,IAAI,CAAC7C,cAAc,EAAE;IACjB,OAAOM,mGAAuC,CAAC/pF,CAAC,EAAEssF,SAAS,CAAC;EAChE;EACA,OAAO7C,cAAc;AACzB;AAEA,SAASgD,aAAaA,CAACzsF,CAAC,EAAE;EACtB,OAAO8rF,kBAAkB,CAAC9rF,CAAC,CAAC,IAC5BisF,uBAAuB,CAAC,CAAC,IACzBC,uBAAuB,CAAClsF,CAAC,CAAC,IAC1BosF,mBAAmB,CAAC,CAAC,IACrBI,0BAA0B,CAACxsF,CAAC,CAAC;AACjC;AAEAzd,CAAC,CAACwc,QAAQ,CAAC,CAAC0zC,EAAE,CAAC,OAAO,EAAE,UAAUzyC,CAAC,EAAE;EACjCysF,aAAa,CAACzsF,CAAC,CAAC;AACpB,CAAC,CAAC;AAEFzd,CAAC,CAAC,YAAY;EACV,IAAIzE,MAAM,CAACE,MAAM,EAAE;IACfuE,CAAC,CAACwc,QAAQ,CAACm2B,IAAI,CAAC,CAAC1uC,WAAW,CAAC,WAAW,CAAC;IACzCjE,CAAC,CAACwc,QAAQ,CAAC,CAAC2tF,KAAK,CAAC,YAAY;MAC1BnqG,CAAC,CAACwc,QAAQ,CAAC,CAAC0zC,EAAE,CAAC,SAAS,EAAEk6C,SAAS,CAAC;IACxC,CAAC,CAAC;EACN;AAEJ,CAAC,CAAC;AAEF,SAASA,SAASA,CAAC3sF,CAAC,EAAE;EAClB,IAAI,CAACA,CAAC,CAACrW,KAAK,IAAIqW,CAAC,CAAC+5C,OAAO,KAAK,GAAG,EAAE;IAC/B/5C,CAAC,CAACyU,cAAc,CAAC,CAAC;IAElBg9B,UAAU,CAAC,YAAY;MACnB,IAAIzvC,IAAI,GAAGzjB,OAAO,CAACw3C,OAAO,CAACh3B,QAAQ,CAACstC,aAAa,CAAC,UAAU,CAAC,CAAC;MAC9D,IAAIvW,QAAQ,GAAG9zB,IAAI,CAAC8zB,QAAQ,CAAC,CAAC;MAC9B,IAAIp3C,UAAU,GAAGo3C,QAAQ,CAACG,GAAG,CAAC,YAAY,CAAC;MAC3Cv3C,UAAU,CAACkzD,MAAM,CAAC,YAAY;QAC1BlzD,UAAU,CAAC+K,UAAU,CAAC,kBAAkB,EAAEuW,CAAC,CAAC;MAChD,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,CAAC;EACT;AACJ;AAAC;AAGD,IAAI4sF,cAAc,GAAG,EAAE;AAEvB,IAAI9uG,MAAM,CAACE,MAAM,KAAK,IAAI,IAAKD,oEAA2B,IAAI,KAAK,IAC/DA,oEAA2B,IAAI,SAAU,EAAE;EAE3C;EACA6uG,cAAc,GACV,yBAAyB,GACzB,iBAAiB,GACjB,MAAM,GACN,+BAA+B,GAC/B,qEAAqE,GACrE,6DAA6D,GAC7D,oCAAoC,GACpC,0CAA0C,GAC1C,aAAa,GACb,+BAA+B,GAC/B,oCAAoC,GACpC,qEAAqE,GACrE,8DAA8D,GAC9D,0CAA0C;AAClD;AAGA,IAAI,CAAC,CAACA,cAAc,EAAE;EAClB,IAAIC,QAAQ,GAAGtqG,CAAC,CAAC,wCAAwC,GAAGqqG,cAAc,GAAG,UAAU,CAAC;EACxFrqG,CAAC,CAAC,aAAa,CAAC,CAACo3D,MAAM,CAACkzC,QAAQ,CAAC;AACrC,C;;;;;;;;;;;AClLAtuG,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,wBAAwB,EACzD,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAC9I,eAAe,EAAE,eAAe,EAAE,oBAAoB,EAAE,gBAAgB,EACxE,UAAUC,MAAM,EAAEC,UAAU,EAAEM,SAAS,EAAEipB,YAAY,EAAEhpB,QAAQ,EAAE0d,WAAW,EAAE2L,SAAS,EAAE6yB,aAAa,EAAEx8C,aAAa,EAAEC,YAAY,EAAEE,aAAa,EAAE8wD,OAAO,EAAEk9C,kBAAkB,EAAE5tG,cAAc,EAAE;EAE7L;EACAR,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE1pB,SAAS,CAACqxC;EAA0B,CAAC,CAAC,CAAC,CAAC;;EAEnG,IAAI,CAACpoB,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;IACZ;EACQ;EAAC;EAEDpqB,MAAM,CAACk5B,WAAW,GAAG,KAAK;EAC1Bl5B,MAAM,CAACkE,IAAI,GAAG,EAAE;EAChBlE,MAAM,CAACsuG,QAAQ,GAAG/tG,SAAS,CAACszC,YAAY;EACxC7zC,MAAM,CAACuuG,yBAAyB,GAAG,IAAI;EACvCvuG,MAAM,CAACgW,OAAO,GAAG;IACbqnC,QAAQ,EAAE,GAAG;IACbgkB,QAAQ,EAAE,IAAI;IACdC,MAAM,EAAE;EACZ,CAAC;EACDthE,MAAM,CAACwuG,eAAe,GAAG,CAAC,CAAC;EAC3BxuG,MAAM,CAACyuG,WAAW,GAAG,IAAI;EAEzBzuG,MAAM,CAACqB,QAAQ,GAAGnB,aAAa,CAACmB,QAAQ;EACxCrB,MAAM,CAAC0uG,oBAAoB,GAAGxuG,aAAa,CAACwuG,oBAAoB;EAEhE1uG,MAAM,CAAC2uG,YAAY,GAAG,IAAI;EAC1B3uG,MAAM,CAACyhB,SAAS,GAAG,IAAI;EAEvBzhB,MAAM,CAACksD,oBAAoB,GAAG,UAAShiD,IAAI,EAAEiiD,EAAE,EAAC;IAC5CnsD,MAAM,CAACgW,OAAO,CAACqrD,QAAQ,GAAGn3D,IAAI;IAC9BlK,MAAM,CAACgW,OAAO,CAACsrD,MAAM,GAAGnV,EAAE;IAC1BnsD,MAAM,CAACs6B,MAAM,CAAC,CAAC;EACnB,CAAC;EAEDt6B,MAAM,CAAC0I,MAAM,CAAC,kBAAkB,EAAE,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAExD,IAAG5I,MAAM,CAACuuG,yBAAyB,EAAC;MAChCvuG,MAAM,CAACs6B,MAAM,CAAC,CAAC;IACnB;IAEAt6B,MAAM,CAACuuG,yBAAyB,GAAG,IAAI;EAC3C,CACJ,CAAC;EAEDvuG,MAAM,CAAC4uG,YAAY,GAAG,CAAC;EAEvB5uG,MAAM,CAAC6uG,iBAAiB,GAAG,YAAY;IACnCR,kBAAkB,CAACQ,iBAAiB,CAAC,CAAC,CAAC7qG,IAAI,CAAC,YAAM;MAC9ChE,MAAM,CAAC8uG,cAAc,CAAC,CAAC,CAAC9qG,IAAI,CAAC,YAAM;QAC/BhE,MAAM,CAACs6B,MAAM,CAAC,CAAC;MACnB,CAAC,CAAC;IACN,CAAC,CAAC,SAAM,CAAC,UAAAn2B,GAAG,EAAI;MACZhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAEDnE,MAAM,CAAC8uG,cAAc,GAAG,YAAY;IAChC,OAAOT,kBAAkB,CAACU,QAAQ,CAAC,CAAC,CAAC/qG,IAAI,CAAC,UAAAqF,GAAG,EAAI;MAC7CrJ,MAAM,CAAC4uG,YAAY,GAAGvlG,GAAG;IAC7B,CAAC,CAAC;EACN,CAAC;EAEDrJ,MAAM,CAACwsF,KAAK,GAAG,YAAY;IACvBxsF,MAAM,CAACuuG,yBAAyB,GAAG,KAAK;IACxCvuG,MAAM,CAACgW,OAAO,CAACqnC,QAAQ,GAAG,GAAG;IAC7Br9C,MAAM,CAACgW,OAAO,CAACqrD,QAAQ,GAAG,IAAI;IAC9BrhE,MAAM,CAACgW,OAAO,CAACsrD,MAAM,GAAG,IAAI;IAC5BthE,MAAM,CAACyuG,WAAW,GAAG,IAAI;IAEzBjuG,QAAQ,CAAC,YAAY;MACjBA,QAAQ,CAAC,YAAY;QAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAAE,CAAC,CAAC;IAEpE,CAAC,CAAC;IAEFxE,MAAM,CAACs6B,MAAM,CAAC,CAAC;EACnB,CAAC;EAED,SAAS00E,WAAWA,CAAA,EAAG;IACnB,OAAOtyD,aAAa,CAACuyD,aAAa,CAAC/uG,aAAa,CAACmkC,WAAW,CAAC,CAACrgC,IAAI,CAAC,UAAUC,IAAI,EAAE;MAC/EjE,MAAM,CAACwuG,eAAe,CAACxuD,OAAO,GAAG,EAAE;MACnCl8C,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAACi7C,OAAO,EAAE,UAAUh5C,GAAG,EAAEtG,EAAE,EAAE;QACpCI,MAAM,CAACwuG,eAAe,CAACxuD,OAAO,CAAC35C,IAAI,CAAC;UAAEqkB,UAAU,EAAE9qB,EAAE,CAAC8qB,UAAU;UAAE2yB,QAAQ,EAAEz9C,EAAE,CAAC4rC;QAAY,CAAC,CAAC;MAChG,CAAC,CAAC;MACFhrC,QAAQ,CAAC,YAAY;QACjB0E,WAAW,CAAC,CAAC;MACjB,CAAC,CAAC;IACN,CAAC,EACD,UAAUf,GAAG,EAAE;MACXhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN;;EAEA;EACAnE,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB/nB,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACwpD,QAAQ,CAAC,CAAC;EACrB,CAAC;EAEDxpD,MAAM,CAACwpD,QAAQ,GAAG,YAAY;IAC1BtrC,WAAW,CAACslF,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAACx/F,IAAI,CAAC,UAAUkrG,KAAK,EAAE;MACrEb,kBAAkB,CAACtZ,4BAA4B,CAAC,CAAC,CAAC/wF,IAAI,CAAC,UAAUC,IAAI,EAAE;QACnE,IAAIA,IAAI,IAAIA,IAAI,CAACmC,MAAM,EAAE;UACrBpG,MAAM,CAACkE,IAAI,GAAGD,IAAI,CAACwN,MAAM,CAACy9F,KAAK,CAAC;QACpC,CAAC,MAAM;UACHlvG,MAAM,CAACkE,IAAI,GAAGgrG,KAAK;QACvB;MACJ,CAAC,CAAC,SAAM,CAAC,YAAW;QAChBlvG,MAAM,CAACkE,IAAI,GAAGgrG,KAAK;MACvB,CAAC,CAAC,WAAQ,CAAC,YAAW;QAClBF,WAAW,CAAC,CAAC,CAAChrG,IAAI,CAAC,YAAU;UACzBxD,QAAQ,CAAC,YAAU;YACfR,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;UAC7B,CAAC,CAAC;UACF/oB,CAAC,CAACO,SAAS,CAAC,CAAC;QACjB,CAAC,CAAC;MACN,CAAC,CAAC;MACFrE,MAAM,CAAC8uG,cAAc,CAAC,CAAC;IAC3B,CAAC,CAAC;EACN,CAAC;EAED9uG,MAAM,CAACs6B,MAAM,GAAG,YAAY;IACxBx2B,CAAC,CAACC,OAAO,CAAC,CAAC;IACXma,WAAW,CAACslF,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAACx/F,IAAI,CAAC,UAAUC,IAAI,EAAE;MACpE,IAAI6O,OAAO,GAAG9S,MAAM,CAACmvG,iBAAiB,KAAK,MAAM;MACjD;MACA,IAAIC,YAAY,GAAG,EAAE;MACrBf,kBAAkB,CAACtZ,4BAA4B,CAAC,CAAC,CAAC/wF,IAAI,CAAC,UAAUqrG,KAAK,EAAE;QACpE,IAAIA,KAAK,IAAIA,KAAK,CAACjpG,MAAM,EAAE;UACvBgpG,YAAY,GAAGC,KAAK;QACxB;MACJ,CAAC,CAAC,WAAQ,CAAC,YAAY;QACnBrvG,MAAM,CAACkE,IAAI,GAAGitD,OAAO,CAACi+C,YAAY,CAAC39F,MAAM,CAACxN,IAAI,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC;QACtEjE,MAAM,CAACwd,QAAQ,GAAG1d,OAAO,CAAC+F,IAAI,CAAC7F,MAAM,CAACkE,IAAI,CAAC;QAC3C,IAAIorG,WAAW,GAAGjvG,aAAa,CAAC4yB,wBAAwB,CAAC,CAAC;QAE1D,IAAIs8E,SAAS,GAAGz+E,MAAM,CAAC9wB,MAAM,CAACgW,OAAO,CAACqrD,QAAQ,EAAEiuC,WAAW,CAAC,CAACjmD,MAAM,CAAC,CAAC;QACrE,IAAImmD,cAAc,GAAG,SAAjBA,cAAcA,CAAY1lG,IAAI,EAAE;UAChC,IAAI9J,MAAM,CAACgW,OAAO,CAACqrD,QAAQ,EAAE;YACzB,IAAIv3D,IAAI,CAAC4iF,YAAY,EAAE;cACnB,IAAI+iB,QAAQ,GAAG3+E,MAAM,CAAChnB,IAAI,CAAC4iF,YAAY,CAAC,CAAC37D,GAAG,CAAC,CAAC,CAACksB,GAAG,CAACnsB,MAAM,CAAC,CAAC,CAAC4+E,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAACrmD,MAAM,CAAC,CAAC;cAClF,IAAIomD,QAAQ,CAAC5kB,OAAO,CAAC,CAAC,IAAI0kB,SAAS,CAAC1kB,OAAO,CAAC,CAAC,EAAE;gBAC3C,OAAO,IAAI;cACf;YACR;YACA,OAAO,KAAK;UAChB;UACA,OAAO,IAAI;QACf,CAAC;QAED,IAAI8kB,OAAO,GAAG7+E,MAAM,CAAC9wB,MAAM,CAACgW,OAAO,CAACsrD,MAAM,EAAEguC,WAAW,CAAC,CAACjmD,MAAM,CAAC,CAAC;QACjE,IAAIumD,YAAY,GAAG,SAAfA,YAAYA,CAAY9lG,IAAI,EAAE;UAC9B,IAAI9J,MAAM,CAACgW,OAAO,CAACsrD,MAAM,EAAE;YACvB,IAAIx3D,IAAI,CAAC4iF,YAAY,EAAE;cACnB,IAAI+iB,QAAQ,GAAG3+E,MAAM,CAAChnB,IAAI,CAAC4iF,YAAY,CAAC,CAAC37D,GAAG,CAAC,CAAC,CAACksB,GAAG,CAACnsB,MAAM,CAAC,CAAC,CAAC4+E,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAACrmD,MAAM,CAAC,CAAC;cACtF,IAAIomD,QAAQ,CAAC5kB,OAAO,CAAC,CAAC,IAAI8kB,OAAO,CAACE,QAAQ,CAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,CAAC,EAAE;gBACtD,OAAO,IAAI;cACf;YACJ;YACA,OAAO,KAAK;UAChB;UACA,OAAO,IAAI;QACf,CAAC;QAED,IAAIhnD,YAAY,GAAG,SAAfA,YAAYA,CAAY/+C,IAAI,EAAEjJ,UAAU,EAAE;UAC1C,IAAIb,MAAM,CAACyuG,WAAW,EAAE;YACpB,IAAI3kG,IAAI,CAACi4B,IAAI,CAACnhC,QAAQ,CAAC8B,IAAI,IACpBoH,IAAI,CAACi4B,IAAI,CAACnhC,QAAQ,CAAC8B,IAAI,CAAC6U,WAAW,CAAC,CAAC,CAAClI,OAAO,CAACxO,UAAU,CAAC,IAAI,CAAC,EAAE;cAC/D,OAAO,IAAI;YACnB,CAAC,MAAM,IAAIiJ,IAAI,CAACshC,IAAI,CAAC0kE,UAAU,CAACx3E,WAAW,IACpCxuB,IAAI,CAACshC,IAAI,CAAC0kE,UAAU,CAACx3E,WAAW,CAACjpB,OAAO,CAACxO,UAAU,CAAC,IAAI,CAAC,EAAE;cAC1D,OAAO,IAAI;YACnB;YACA,OAAO,KAAK;UAChB;UACA,OAAO,IAAI;QACf,CAAC;QAED,IAAImV,OAAO,GAAG,CAACw5F,cAAc,EAAEI,YAAY,EAAE/mD,YAAY,CAAC;QAE1D7oD,MAAM,CAACwd,QAAQ,GAAGxd,MAAM,CAACwd,QAAQ,CAACzX,MAAM,CAAC,UAAA+D,IAAI;UAAA,OAAIkM,OAAO,CAAC+5F,KAAK,CAAC,UAAA3tF,CAAC;YAAA,OAAIA,CAAC,CAACtY,IAAI,EAAE9J,MAAM,CAACyuG,WAAW,CAAC;UAAA,EAAC;QAAA,EAAC;QACjGzuG,MAAM,CAACkE,IAAI,GAAGlE,MAAM,CAACwd,QAAQ;QAC7B1Z,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAEDrE,MAAM,CAACgwG,IAAI,GAAG,YAAY;IACtB,IAAI9vG,aAAa,CAACX,MAAM,EAAE;MACtB;IACJ;IACAuE,CAAC,CAACC,OAAO,CAAC,CAAC;IACX;IACAma,WAAW,CAAC+xF,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,SAC7B,CAAC,UAAU9rG,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC,WACM,CAAC,YAAY;MACjBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAACs6B,MAAM,CAAC,CAAC;IACnB,CAAC,CAAC;EACV,CAAC;EAEDt6B,MAAM,CAACkwG,QAAQ,GAAG,UAAStwG,EAAE,EAAE;IAC3BoF,OAAO,CAACC,GAAG,CAACrF,EAAE,CAAC;IACfI,MAAM,CAAC2uG,YAAY,GAAG/uG,EAAE,CAACwrC,IAAI,CAAC0kE,UAAU;IACxC9vG,MAAM,CAACyhB,SAAS,GAAG7hB,EAAE,CAACg0F,SAAS;IAC/BvzF,aAAa,CAAC8E,UAAU,CAACrB,CAAC,CAAC,yBAAyB,CAAC,CAAC;EAC1D,CAAC;EAED9D,MAAM,CAACmwG,iBAAiB,GAAG,UAASvwG,EAAE,EAAE;IACpC,IAAIA,EAAE,CAAC4zF,QAAQ,KAAKt1E,WAAW,CAACkyF,aAAa,CAACC,YAAY,EAAE;MACxD;IACJ;IAEArwG,MAAM,CAAC8sD,UAAU,GAAG,mBAAmB;IACvC9sD,MAAM,CAAC+sD,UAAU,GAAGntD,EAAE;IACtBS,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC9Df,cAAc,CAACe,SAAS,CAAC,uEAAuE,CAAC,EACjGf,cAAc,CAACe,SAAS,CAAC,aAAa,CAAC,EACvCf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;EACvC,CAAC;EAEAxB,MAAM,CAACswG,oBAAoB,GAAG,UAAS1wG,EAAE,EAAE;IACxCI,MAAM,CAAC8sD,UAAU,GAAG,mBAAmB;IACvC9sD,MAAM,CAAC+sD,UAAU,GAAGntD,EAAE;IACtBS,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC9Df,cAAc,CAACe,SAAS,CAAC,0FAA0F,CAAC,EACpHf,cAAc,CAACe,SAAS,CAAC,aAAa,CAAC,EACvCf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;EACvC,CAAC;EAGDxB,MAAM,CAAC26B,aAAa,GAAG,YAAY;IAC/B,IAAIx5B,IAAI,GAAGnB,MAAM,CAAC8sD,UAAU;IAC5B,IAAI5yC,GAAG,GAAIla,MAAM,CAAC+sD,UAAU;IAC5B/sD,MAAM,CAAC8sD,UAAU,GAAG,EAAE;IACtB9sD,MAAM,CAAC+sD,UAAU,GAAG,IAAI;IACxB,QAAQ5rD,IAAI;MACR,KAAK,mBAAmB;QACpBktG,kBAAkB,CAAC8B,iBAAiB,CAACj2F,GAAG,CAAC0c,MAAM,EAAE1c,GAAG,CAAC6iE,WAAW,CAAC,CAAC/4E,IAAI,CAAC,YAAY;UAC/EhE,MAAM,CAACs6B,MAAM,CAAC,CAAC;QACnB,CAAC,CAAC;QACN;MACA,KAAK,mBAAmB;QACpBt6B,MAAM,CAAC6uG,iBAAiB,CAAC,CAAC;QAC9B;MACA;QACI7pG,OAAO,CAACqkB,KAAK,CAAC,uBAAuB,GAAGloB,IAAI,CAAC;IACrD;EAEJ,CAAC;EAEDnB,MAAM,CAACuwG,QAAQ,GAAG,YAAW;IACzB,IAAIC,MAAM,GAAG94E,IAAI,CAACC,SAAS,CAAC,IAAI,CAACg3E,YAAY,CAAC;IAC9C37C,UAAU,CAAC,YAAM;MACb9c,SAAS,CAACu1D,SAAS,CAACO,SAAS,CAACwE,MAAM,CAAC;IACzC,CAAC,CAAC;IACF,IAAI51F,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,oCAAoC,CAAC;IACxEvB,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;MACnC6P,OAAO,EAAED;IACb,CAAC,CAAC;EACN,CAAC;EAED5a,MAAM,CAACqC,GAAG,CAAC,+BAA+B,EAAE,UAAUC,KAAK,EAAEC,MAAM,EAAE;IACjEvC,MAAM,CAACqB,QAAQ,GAAGkB,MAAM;EAC5B,CAAC,CAAC;EAEFvC,MAAM,CAACywG,YAAY,GAAG,UAAU74E,MAAM,EAAE;IACpC;IACAv4B,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAAC;MAAEC,MAAM,EAAEA,MAAM;MAAEtpB,IAAI,EAAE;IAAW,CAAC,CAAC,CAAC;IACjGub,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;EAC3B,CAAC;EAED9sB,MAAM,CAAC6sB,gBAAgB,GAAG,YAAY;IAClC5sB,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;EACxC,CAAC;EAGDhL,MAAM,CAACsqB,eAAe,GAAGjqB,aAAa,CAACiqB,eAAe;EAGtDtqB,MAAM,CAACmvG,iBAAiB,GAAG,MAAM;EACjCnvG,MAAM,CAAC0wG,aAAa,GAAG,KAAK;EAC5B1wG,MAAM,CAAC2wG,gBAAgB,GAAG,EAAE;EAE5B3wG,MAAM,CAAC4wG,WAAW,GAAG,UAAUlgG,KAAK,EAAEmgG,SAAS,EAAE;IAC7C7wG,MAAM,CAACmvG,iBAAiB,GAAG0B,SAAS;IACpC7wG,MAAM,CAAC2wG,gBAAgB,GAAGjgG,KAAK;IAC/B1Q,MAAM,CAACs6B,MAAM,CAAC,CAAC;IAEf,IAAIt6B,MAAM,CAAC0wG,aAAa,KAAK,MAAM,EAAE;MACjC1wG,MAAM,CAAC0wG,aAAa,GAAG,KAAK;IAChC,CAAC,MAAM;MACH1wG,MAAM,CAAC0wG,aAAa,GAAG,MAAM;IACjC;EACJ,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;AC7SP5wG,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,6BAA6B,EAC9D,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EACnJ,eAAe,EAAE,SAAS,EAAE,uBAAuB,EAAC,IAAI,EAAC,gBAAgB,EAAC,cAAc,EAAC,eAAe,EAAC,gBAAgB,EAAE,SAAS,EACxI,UAAUC,MAAM,EAAEC,UAAU,EAAEM,SAAS,EAAEipB,YAAY,EAAEhpB,QAAQ,EAAEL,YAAY,EAAED,aAAa,EAAEupB,eAAe,EAAEE,KAAK,EAAEC,SAAS,EAAEC,SAAS,EACtIxpB,aAAa,EAAEypB,OAAO,EAAEC,qBAAqB,EAAEppB,EAAE,EAAE4iF,cAAc,EAAE1rE,YAAY,EAAC6R,aAAa,EAAEjpB,cAAc,EAAEupB,OAAO,EAAE;EAEpH;EACA3pB,aAAa,CAACi9E,yBAAyB,CAAC,CAAC;EAEzCr9E,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE1pB,SAAS,CAACuxC;EAA2B,CAAC,CAAC,CAAC,CAAC;;EAEpG,IAAI,CAACtoB,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;EACJ;EAEApqB,MAAM,CAACkrB,eAAe,GAAGpB,OAAO,CAACqB,cAAc,CAACC,YAAY;;EAE5D;EACAprB,MAAM,CAAC8wG,oBAAoB,GAAG,CAAC,CAAC;EAChC;EACA9wG,MAAM,CAACyqB,gBAAgB,GAAG,CAAC,CAAC;EAC5BzqB,MAAM,CAACyqB,gBAAgB,CAACC,UAAU,GAAGxqB,aAAa,CAACyqB,UAAU;EAC7D3qB,MAAM,CAACyqB,gBAAgB,CAACG,cAAc,GAAG1qB,aAAa,CAAC2qB,YAAY;EACnE7qB,MAAM,CAACyqB,gBAAgB,CAACrnB,EAAE,GAAG,IAAI;EACjCpD,MAAM,CAACosG,MAAM,GAAG,KAAK;EACrBpsG,MAAM,CAAC+wG,kBAAkB,GAAG,EAAE;EAC9B/wG,MAAM,CAACgxG,iBAAiB,GAAG,EAAE;EAE7BhxG,MAAM,CAACqB,QAAQ,GAAG,YAAY;IAC1B,OAAOnB,aAAa,CAACmB,QAAQ;EACjC,CAAC;EAEDrB,MAAM,CAACixG,iBAAiB,GAAG,IAAI;;EAE/B;EACAjxG,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IAExB7rB,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;IACzB/oB,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAIwmD,IAAI,GAAGlrD,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,oBAAoB,CAAC;IAC5D;IACA7oC,MAAM,CAACm4B,YAAY,CAAC4xB,UAAU,CAAC,oBAAoB,CAAC;IAEpD,IAAI/Z,GAAG,GAAG;MACNrjB,cAAc,EAAE9rB,aAAa,CAAC8rB,cAAc;MAC5CnB,YAAY,EAAE3qB,aAAa,CAAC2qB,YAAY;MACxCF,UAAU,EAAEzqB,aAAa,CAACyqB,UAAU;MACpCvnB,EAAE,EAAE;IACR,CAAC;IACDpD,MAAM,CAACixG,iBAAiB,GAAG,IAAI;IAE/B,IAAIC,YAAY,GAAG,KAAK;IACxB;IACA,IAAI3mD,IAAI,EAAE;MACNA,IAAI,GAAG7yB,IAAI,CAAC2T,KAAK,CAACkf,IAAI,CAAC;MACvB2mD,YAAY,GAAG,IAAI;MACnB7hE,GAAG,CAACrjB,cAAc,GAAGu+B,IAAI,CAAC35B,UAAU;MACpCye,GAAG,CAAC1kB,UAAU,GAAG4/B,IAAI,CAAC4mD,aAAa;MACnC9hE,GAAG,CAACxkB,YAAY,GAAG0/B,IAAI,CAAC6mD,YAAY;MACpC/hE,GAAG,CAACjsC,EAAE,GAAGmnD,IAAI,CAACnnD,EAAE;MAChBisC,GAAG,CAACgiE,SAAS,GAAG9mD,IAAI,CAAC+mD,QAAQ;MAC7BtxG,MAAM,CAACixG,iBAAiB,GAAG1mD,IAAI,CAACgnD,aAAa;IACjD;IAEA9nF,eAAe,CAACsC,sBAAsB,CAACsjB,GAAG,CAACrjB,cAAc,EAAE9rB,aAAa,CAAC+rB,YAAY,EAAEilF,YAAY,EAAE,IAAI,EAAEA,YAAY,GAAG7hE,GAAG,CAACjsC,EAAE,GAAE,IAAI,CAAC,CACtIY,IAAI,CAAC,UAAUC,IAAI,EAAE;MAClB,IAAIutG,+BAA+B;MACnC,IAAIvtG,IAAI,CAAC,CAAC,CAAC,EAAE;QACT,IAAIioB,KAAK,GAAGjoB,IAAI,CAAC,CAAC,CAAC;QACnButG,+BAA+B,GAAGtxG,aAAa,CAACX,MAAM,GAAG,IAAI,GAAG2sB,KAAK,CAAC9oB,EAAE;QACxEpD,MAAM,CAACyqB,gBAAgB,GAAGyB,KAAK;QAC/BlsB,MAAM,CAACyqB,gBAAgB,CAACC,UAAU,GAAG2kB,GAAG,CAAC1kB,UAAU;QACnD3qB,MAAM,CAACyqB,gBAAgB,CAACG,cAAc,GAAGykB,GAAG,CAACxkB,YAAY;QACzD7qB,MAAM,CAACyqB,gBAAgB,CAAC0B,eAAe,GAAGnsB,MAAM,CAACyqB,gBAAgB,CAAC2B,gBAAgB;QAClFpsB,MAAM,CAACyqB,gBAAgB,CAAC4B,kBAAkB,GAAGrsB,MAAM,CAACyqB,gBAAgB,CAAC6B,mBAAmB;QACxFtsB,MAAM,CAACyqB,gBAAgB,CAAC8B,cAAc,GAAGvsB,MAAM,CAACyqB,gBAAgB,CAAC+B,eAAe;QAChFxsB,MAAM,CAACyqB,gBAAgB,CAACgC,iBAAiB,GAAGzsB,MAAM,CAACyqB,gBAAgB,CAACiC,kBAAkB;QACtF,IAAI2iB,GAAG,CAACgiE,SAAS,EACbrxG,MAAM,CAACyqB,gBAAgB,CAACgnF,WAAW,GAAGpiE,GAAG,CAACgiE,SAAS;MAC3D,CAAC,MACI;QACDG,+BAA+B,GAAG,IAAI;QACtCxxG,MAAM,CAACyqB,gBAAgB,CAACC,UAAU,GAAG2kB,GAAG,CAAC1kB,UAAU;QACnD3qB,MAAM,CAACyqB,gBAAgB,CAACG,cAAc,GAAGykB,GAAG,CAACxkB,YAAY;MAC7D;MAEA,IAAI,CAAC3qB,aAAa,CAACX,MAAM,EAAE;QACvB,OAAOkqB,eAAe,CAACsC,sBAAsB,CAACsjB,GAAG,CAACrjB,cAAc,EAAE9rB,aAAa,CAAC+rB,YAAY,EACxFilF,YAAY,IAAIlxG,MAAM,CAACqB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE6vG,YAAY,GAAG7hE,GAAG,CAACjsC,EAAE,GAAGouG,+BAA+B,CAAC,CACrGxtG,IAAI,CAAC,UAAUC,IAAI,EAAE;UACjB,IAAIA,IAAI,CAAC,CAAC,CAAC,EAAE;YACTjE,MAAM,CAACyqB,gBAAgB,CAAC2B,gBAAgB,GAAGpsB,MAAM,CAACyqB,gBAAgB,CAAC0B,eAAe,GAAGloB,IAAI,CAAC,CAAC,CAAC,CAACmoB,gBAAgB;YAC7GpsB,MAAM,CAACyqB,gBAAgB,CAAC6B,mBAAmB,GAAGtsB,MAAM,CAACyqB,gBAAgB,CAAC4B,kBAAkB,GAAGpoB,IAAI,CAAC,CAAC,CAAC,CAACqoB,mBAAmB;YACtHtsB,MAAM,CAACyqB,gBAAgB,CAAC+B,eAAe,GAAGxsB,MAAM,CAACyqB,gBAAgB,CAAC8B,cAAc,GAAGtoB,IAAI,CAAC,CAAC,CAAC,CAACuoB,eAAe;YAC1GxsB,MAAM,CAACyqB,gBAAgB,CAACiC,kBAAkB,GAAG1sB,MAAM,CAACyqB,gBAAgB,CAACgC,iBAAiB,GAAGxoB,IAAI,CAAC,CAAC,CAAC,CAACyoB,kBAAkB;YACnH1sB,MAAM,CAACyqB,gBAAgB,CAACinF,cAAc,GAAG,EAAE;YAC3C1xG,MAAM,CAACyqB,gBAAgB,CAAC8vD,UAAU,GAAGt2E,IAAI,CAAC,CAAC,CAAC,CAACs2E,UAAU;YACvD,IAAIlrC,GAAG,CAACgiE,SAAS,EACbrxG,MAAM,CAACyqB,gBAAgB,CAACgnF,WAAW,GAAGpiE,GAAG,CAACgiE,SAAS;YAEvD,IAAI,CAAC,CAACptG,IAAI,CAAC,CAAC,CAAC,CAAC0tG,kBAAkB,EAAE;cAC9B3xG,MAAM,CAACyqB,gBAAgB,CAACinF,cAAc,GAClCztG,IAAI,CAAC,CAAC,CAAC,CAAC0tG,kBAAkB,CAAC5rG,MAAM,CAAC,UAAUnG,EAAE,EAAE;gBAC5C,IAAIA,EAAE,CAACgyG,WAAW,IAAI,gBAAgB,EAAE;kBACpChyG,EAAE,CAACiyG,OAAO,GAAGjyG,EAAE,CAACkyG,OAAO;kBACvB,OAAOlyG,EAAE,CAACgyG,WAAW,IAAI,gBAAgB;gBAC7C;cACJ,CAAC,CAAC,CAACjxD,IAAI,CAAC,UAAUn0C,CAAC,EAAE8N,CAAC,EAAE;gBACpB,OAAO9N,CAAC,CAACulG,iBAAiB,GAAGz3F,CAAC,CAACy3F,iBAAiB,GAAG,CAAC,CAAC,GAC7CvlG,CAAC,CAACulG,iBAAiB,GAAGz3F,CAAC,CAACy3F,iBAAiB,GAAG,CAAC,GAAG,CAAC;cAC7D,CAAC,CAAC;YACV;UACJ;UAEA,IAAIxmG,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzBD,QAAQ,CAACE,OAAO,CAACzL,MAAM,CAACyqB,gBAAgB,CAACrnB,EAAE,CAAC;UAC5C,OAAOmI,QAAQ,CAACG,OAAO;QAC3B,CAAC,CAAC;MACN,CAAC,MACI;QACD1L,MAAM,CAACyqB,gBAAgB,CAACinF,cAAc,GAAG,EAAE;QAE3C,IAAIztG,IAAI,CAAC,CAAC,CAAC,EAAE;UAET,IAAI,CAAC,CAACA,IAAI,CAAC,CAAC,CAAC,CAAC0tG,kBAAkB,EAAE;YAC9B3xG,MAAM,CAACyqB,gBAAgB,CAACinF,cAAc,GAClCztG,IAAI,CAAC,CAAC,CAAC,CAAC0tG,kBAAkB,CAAC5rG,MAAM,CAAC,UAAUnG,EAAE,EAAE;cAC5C,IAAIA,EAAE,CAACgyG,WAAW,IAAI,gBAAgB,EAAE;gBACpChyG,EAAE,CAACiyG,OAAO,GAAGjyG,EAAE,CAACkyG,OAAO;gBACvB,OAAOlyG,EAAE,CAACgyG,WAAW,IAAI,gBAAgB;cAC7C;YACJ,CAAC,CAAC,CAACjxD,IAAI,CAAC,UAAUn0C,CAAC,EAAE8N,CAAC,EAAE;cACpB,OAAO9N,CAAC,CAACulG,iBAAiB,GAAGz3F,CAAC,CAACy3F,iBAAiB,GAAG,CAAC,CAAC,GACjDvlG,CAAC,CAACulG,iBAAiB,GAAGz3F,CAAC,CAACy3F,iBAAiB,GAAG,CAAC,GAAG,CAAC;YACzD,CAAC,CAAC;UACV;QACJ;MACJ;MAEA,IAAIxmG,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACzL,MAAM,CAACyqB,gBAAgB,CAACrnB,EAAE,CAAC;MAC5C,OAAOmI,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC,CACD1H,IAAI,CAAC,UAAUwG,EAAE,EAAE;MAChB,IAAI,CAAC,CAACA,EAAE,EAAE;QACN,OAAOuf,qBAAqB,CAAC4C,gBAAgB,CAACniB,EAAE,CAAC,CAACxG,IAAI,CAAC,UAAU4oB,UAAU,EAAE;UACzE5sB,MAAM,CAAC4sB,UAAU,GAAGA,UAAU;UAC9B5sB,MAAM,CAACosG,MAAM,GAAG,IAAI;UACpBtoG,CAAC,CAACO,SAAS,CAAC,CAAC;QACjB,CAAC,CAAC;MACN,CAAC,MACI;QACDrE,MAAM,CAAC4sB,UAAU,GAAG,EAAE;QACtB5sB,MAAM,CAACosG,MAAM,GAAG,IAAI;QACpBpsG,MAAM,CAACgyG,sBAAsB,CAAC,CAAC;QAC/BluG,CAAC,CAACO,SAAS,CAAC,CAAC;QACb,IAAIkH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QACtB,OAAOF,QAAQ,CAACG,OAAO;MAC3B;IACJ,CAAC,CAAC,SACI,CAAC,UAAUvH,GAAG,EAAE;MAClBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC3BL,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,WACM,CAAC,YAAY;MACjB7D,QAAQ,CAAC,YAAY;QACjBP,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;MACxC,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAELhL,MAAM,CAACgyG,sBAAsB,GAAG,YAAY;IAExCvoF,eAAe,CAAC07E,mBAAmB,CAACjlG,aAAa,CAAC8rB,cAAc,EAAE9rB,aAAa,CAAC+rB,YAAY,CAAC,CACxFjoB,IAAI,CAAC,UAAUC,IAAI,EAAE;MAClB,IAAIA,IAAI,CAAC,CAAC,CAAC,EAAE;QACT,IAAIioB,KAAK,GAAGjoB,IAAI,CAAC,CAAC,CAAC;QACnBjE,MAAM,CAAC8wG,oBAAoB,GAAG5kF,KAAK;MACvC;MAEA,IAAI3gB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACzL,MAAM,CAAC8wG,oBAAoB,CAAC1tG,EAAE,CAAC;MAChD,OAAOmI,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC,SACI,CAAC,UAAUvH,GAAG,EAAE;MAClBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC3BL,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACV,CAAC;EAEDrE,MAAM,CAAC+sB,cAAc,GAAG,UAAUC,KAAK,EAAEC,QAAQ,EAAE;IAC/C,IAAI,CAACD,KAAK,IAAIA,KAAK,KAAK,CAAC,EAAE;MACvB,OAAO,GAAG;IACd,CAAC,MAAM;MACH,OAAOA,KAAK,GAAGC,QAAQ;IAC3B;EACJ,CAAC;;EAED;EACAjtB,MAAM,CAACikG,aAAa,GAAG,UAAUgO,QAAQ,EAAE;IACvC,IAAIA,QAAQ,KAAK,IAAI,EAAE;MACnBC,oBAAoB,CAAC,CAAC;IAC1B,CAAC,MAAM;MACHpuG,CAAC,CAACC,OAAO,CAAC,CAAC;MACX;MACA,IAAI4d,GAAG,GAAG3hB,MAAM,CAACyqB,gBAAgB;MACjChB,eAAe,CAACw6E,aAAa,CAACtiF,GAAG,CAAC,CAC9B3d,IAAI,CAAC,YAAY;QACdhE,MAAM,CAACyqB,gBAAgB,CAACrnB,EAAE,GAAG,IAAI;QACjC,IAAIpD,MAAM,CAACixG,iBAAiB,EAAE;UAE1B5xG,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,uBAAuB,EAAEC,IAAI,CAACC,SAAS,CAAC33B,MAAM,CAACixG,iBAAiB,CAAC,CAAC;UAC9FpnF,SAAS,CAACiD,IAAI,CAAC,wBAAwB,CAAC;QAC5C;QAEAtsB,QAAQ,CAAC,YAAU;UACfP,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,CAAC;QACjD,CAAC,CAAC;QACHlH,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAACgyG,sBAAsB,CAAC,CAAC;MACnC,CAAC,CAAC,SACI,CAAC,UAAU7tG,GAAG,EAAE;QAClBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;QAC3BL,CAAC,CAACO,SAAS,CAAC,CAAC;MAChB,CAAC,CAAC;IACV;EACJ,CAAC;EAEDrE,MAAM,CAACgkG,YAAY,GAAG,YAAY;IAC9BlgG,CAAC,CAAC,eAAe,CAAC,CAACixE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;IACzCjxE,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAIyG,EAAE,GAAGmf,KAAK,CAACuE,OAAO,CAAC,CAAC;IACxB,IAAI9mB,KAAK,GAAGpH,MAAM;IAClBA,MAAM,CAACmyG,gBAAgB,GAAG,KAAK;IAC/B1oF,eAAe,CAACu6E,YAAY,CAACx5F,EAAE,EAAEtK,aAAa,CAAC8rB,cAAc,EAAE9rB,aAAa,CAAC+rB,YAAY,CAAC,CACrFjoB,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,OAAO0gB,qBAAqB,CAACkE,eAAe,CAACtE,KAAK,CAACuE,OAAO,CAAC,CAAC,EAAE1jB,EAAE,EAAEtK,aAAa,CAAC8rB,cAAc,EACjD9rB,aAAa,CAACiuB,QAAQ,EAAEnuB,MAAM,CAAC+wG,kBAAkB,EAAE/wG,MAAM,CAACgxG,iBAAiB,EAC3E,eAAe,CAAC;IACjE,CAAC,CAAC,CACDhtG,IAAI,CAAC,YAAY;MACd,OAAOylB,eAAe,CAAC2E,kBAAkB,CAAC5jB,EAAE,EAAExK,MAAM,CAAC+wG,kBAAkB,CAAC;IAC5E,CAAC,CAAC,CACD/sG,IAAI,CAAC,YAAY;MACdoD,KAAK,CAAC+qG,gBAAgB,GAAG,IAAI;MAE7B,OAAOzoF,aAAa,CAAC8E,yBAAyB,CAACpnB,KAAK,EAChD,CAAC;QACG+lB,aAAa,EAAE,eAAe;QAC9BpI,MAAM,EAAE3d,KAAK,CAAC2pG,kBAAkB;QAChCziF,OAAO,EAAElnB,KAAK,CAAC4pG;MACnB,CAAC,CAAC,CAAC;IACX,CAAC,CAAC,SACA,CAAC,UAAU7sG,GAAG,EAAE;MAClBL,CAAC,CAAC,eAAe,CAAC,CAACixE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;MAC1CjxE,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb,IAAI,CAAC,CAACF,GAAG,IAAI,CAAC,CAACA,GAAG,CAACD,IAAI,IAAIC,GAAG,CAACD,IAAI,CAACkC,MAAM,IAAI,CAAC,IAAIjC,GAAG,CAACD,IAAI,CAAC,CAAC,CAAC,CAACkuG,eAAe,KAAK,IAAI,EAAE;QACrF;QACA;QACAjyG,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,2CAA2C,CAAC,EACxF,YAAY;UACRsC,CAAC,CAACC,OAAO,CAAC,CAAC;UACX1E,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;UACjD5N,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;QAE3B,CAAC,CAAC;MACV,CAAC,MACI,IAAI3oB,GAAG,KAAK1D,cAAc,CAACe,SAAS,CAAC,6BAA6B,CAAC,EACpErB,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IACnC,CAAC,CAAC,WACM,CAAC,YAAY;MACjB,IAAInE,MAAM,CAACmyG,gBAAgB,KAAK,IAAI,EAAE;QAClC9yG,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;QACjD5N,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;MAC3B;IACJ,CAAC,CAAC;EACN,CAAC;EAED,SAASolF,oBAAoBA,CAAA,EAAG;IAC5B,IAAIrkF,cAAc,GAAG/pB,CAAC,CAAC,8BAA8B,CAAC;IACtDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C;EAEA7tB,MAAM,CAACoM,WAAW,GAAG,YAAY;IAC7B,IAAIyhB,cAAc,GAAG/pB,CAAC,CAAC,8BAA8B,CAAC;IACtDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAAC6sB,gBAAgB,GAAG,YAAY;IAClC5sB,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;EACxC,CAAC;EAEDhL,MAAM,CAAC8uB,gBAAgB,GAAG,UAAUxgB,IAAI,EAAE;IACtC,OAAOyb,qBAAqB,CAAC+E,gBAAgB,CAACxgB,IAAI,CAAC;EACvD,CAAC;EAEDtO,MAAM,CAAC+uB,gBAAgB,GAAG,UAAUzgB,IAAI,EAAE;IACtC,OAAOyb,qBAAqB,CAACgF,gBAAgB,CAACzgB,IAAI,CAAC;EACvD,CAAC;EAEDtO,MAAM,CAACsqB,eAAe,GAAGjqB,aAAa,CAACiqB,eAAe;EAEtDtqB,MAAM,CAACqyG,aAAa,GAAG,IAAI,CAAC,CAAC;EAC7BryG,MAAM,CAACsyG,WAAW,GAAG,CAAC;EACtBtyG,MAAM,CAACuyG,eAAe,GAAG,IAAI;EAC7BvyG,MAAM,CAACwyG,aAAa,GAAG,QAAQ;EAC/BxyG,MAAM,CAACyyG,gBAAgB,GAAG,IAAI;EAE9BzyG,MAAM,CAAC0yG,aAAa,GAAG,UAAUp2F,IAAI,EAAEq2F,OAAO,EAAE;IAC5C3yG,MAAM,CAACsyG,WAAW,GAAG,CAAC;IACtBtyG,MAAM,CAACuyG,eAAe,GAAGI,OAAO;IAChC3yG,MAAM,CAACyyG,gBAAgB,GAAG,IAAI;IAC9BzyG,MAAM,CAACwyG,aAAa,GAAG,gBAAgB;IAEvC,QAAQG,OAAO;MACX,KAAK,MAAM;QACP3yG,MAAM,CAACsyG,WAAW,GAAGtyG,MAAM,CAACyqB,gBAAgB,CAACmoF,WAAW;QACxD;MACJ,KAAK,SAAS;QACV5yG,MAAM,CAACsyG,WAAW,GAAGtyG,MAAM,CAACyqB,gBAAgB,CAACgC,iBAAiB;QAC9D;MACJ,KAAK,aAAa;QACdzsB,MAAM,CAACyyG,gBAAgB,GAAG,KAAK;QAC/BzyG,MAAM,CAACwyG,aAAa,GAAG,sBAAsB;QAC7CxyG,MAAM,CAACsyG,WAAW,GAAGtyG,MAAM,CAAC+wG,kBAAkB;QAC9C;MACJ;QACI,IAAIpvF,GAAG,GAAG3hB,MAAM,CAACyqB,gBAAgB,CAACinF,cAAc,CAAC3rG,MAAM,CAAC,UAAUnG,EAAE,EAAE;UAAE,OAAOA,EAAE,CAACizG,WAAW,IAAIF,OAAO;QAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/G3yG,MAAM,CAACsyG,WAAW,GAAG3wF,GAAG,CAACkwF,OAAO;QAChC;IACR;IAEArxG,QAAQ,CAAC,YAAY;MACjBR,MAAM,CAACqyG,aAAa,CAACx8F,IAAI,CAACyG,IAAI,CAAC;IACnC,CAAC,CAAC;EACN,CAAC;;EAED;EACAtc,MAAM,CAAC8yG,SAAS,GAAG,UAAUt2F,GAAG,EAAE;IAC9Bhc,QAAQ,CAAC,YAAY;MACjB,IAAIyiC,GAAG,GAAG,CAAC;MACX,IAAI8vE,WAAW,GAAG,KAAK;MAEvB,IAAI,OAAQv2F,GAAI,KAAK,SAAS,EAAE;QAC5B,IAAIA,GAAG,KAAK,IAAI,EAAE;UACdymB,GAAG,GAAGte,UAAU,CAAC3kB,MAAM,CAACsyG,WAAW,CAAC;UACpCS,WAAW,GAAG,IAAI;QACtB;MACJ,CAAC,MACI,IAAI,OAAQv2F,GAAI,IAAI,QAAQ,EAAE;QAC/B,IAAIA,GAAG,KAAK,OAAO,EAAE;UACjBymB,GAAG,GAAG,CAAC;UACP8vE,WAAW,GAAG,IAAI;QACtB;MACJ;MAEA,IAAIA,WAAW,EAAE;QACb,QAAQ/yG,MAAM,CAACuyG,eAAe;UAC1B,KAAK,MAAM;YACPvyG,MAAM,CAACyqB,gBAAgB,CAACmoF,WAAW,GAAGvyG,aAAa,CAAC6uB,SAAS,CAAC+T,GAAG,EAAE,CAAC,CAAC;YACrE;UACJ,KAAK,SAAS;YACVjjC,MAAM,CAACyqB,gBAAgB,CAACgC,iBAAiB,GAAGpsB,aAAa,CAAC6uB,SAAS,CAAC+T,GAAG,EAAE,CAAC,CAAC;YAC3E;UACJ,KAAK,aAAa;YACdjjC,MAAM,CAAC+wG,kBAAkB,GAAG1wG,aAAa,CAAC6uB,SAAS,CAAC+T,GAAG,EAAE,CAAC,CAAC;YAC3D;UACJ;YACI,IAAIthB,GAAG,GAAG3hB,MAAM,CAACyqB,gBAAgB,CAACinF,cAAc,CAAC3rG,MAAM,CAAC,UAAUnG,EAAE,EAAE;cAAE,OAAOA,EAAE,CAACizG,WAAW,IAAI7yG,MAAM,CAACuyG,eAAe;YAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9H5wF,GAAG,CAACkwF,OAAO,GAAGxxG,aAAa,CAAC6uB,SAAS,CAAC+T,GAAG,EAAE,CAAC,CAAC;YAC7C;QACR;MACJ;IAEJ,CAAC,CAAC;IAEFjjC,MAAM,CAACqyG,aAAa,CAACvnG,IAAI,CAAC,IAAI,CAAC;EACnC,CAAC;EAED9K,MAAM,CAACgzG,gBAAgB,GAAG,UAAS50F,SAAS,EAAE;IAC1C,IAAIA,SAAS,CAAC60F,iBAAiB,IAAI,YAAY,EAAE;MAC7C,OAAO70F,SAAS,CAAC80F,aAAa,GAAG,IAAI;IACzC,CAAC,MACI;MACD,OAAOlpF,OAAO,CAAC,UAAU,CAAC,CAAC5L,SAAS,CAAC80F,aAAa,CAAC;IACvD;EACJ,CAAC;EAEDlzG,MAAM,CAACmzG,aAAa,GAAG,YAAU;IAC7B,IAAGtoG,QAAQ,IAAI,OAAOA,QAAQ,CAACymE,KAAM,KAAK,UAAU,EAChDzmE,QAAQ,CAACymE,KAAK,CAAC,CAAC;EACxB,CAAC;AAEL,CAAC,CAAC,CAAC,C;;;;;;;;;;;AC9YPxxE,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,oBAAoB,EAAE,CACrD,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EACnE,UAAU3e,aAAa,EAAE2U,eAAe,EAAEC,eAAe,EAAEC,UAAU,EAAE;EACnE,IAAIq+F,IAAI,GAAG,IAAI;;EAEf;AACR;AACA;AACA;EACQ,IAAIC,WAAW,GAAG,SAAdA,WAAWA,CAAA,EAAe;IAC1B,OAAQnzG,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,GAAIH,eAAe,GAAGD,eAAe;EAC/F,CAAC;EAED,IAAI,CAACy+F,iBAAiB,GAAG,YAA8B;IAAA,IAApBC,UAAU,GAAApiG,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,KAAK;IACjD,OAAOoiG,UAAU,KAAK,IAAI,GACpBrzG,aAAa,CAACszG,yBAAyB,GACtCtzG,aAAa,CAACszG,yBAAyB,IAAIz+F,UAAU,CAACE,WAAY;EAC7E,CAAC;;EAED;AACR;AACA;AACA;EACQ,IAAIw+F,eAAe,GAAG,SAAlBA,eAAeA,CAAa3T,OAAO,EAAE;IACrC,IAAI4T,SAAS,GAAG,CAAC,CAAC;;IAElB;IACA,KAAK,IAAIl/F,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGsrF,OAAO,CAAC15F,MAAM,EAAEoO,CAAC,EAAE,EAAE;MACrC,IAAI0F,GAAG,GAAG4lF,OAAO,CAACtrF,CAAC,CAAC;MACpB,IAAI,CAACk/F,SAAS,CAACx5F,GAAG,CAAC65E,OAAO,CAAC,EAAE;QACzB2f,SAAS,CAACx5F,GAAG,CAAC65E,OAAO,CAAC,GAAG;UACrBA,OAAO,EAAE75E,GAAG,CAAC65E,OAAO;UACpB4f,aAAa,EAAE;QACnB,CAAC;MACL;MACAD,SAAS,CAACx5F,GAAG,CAAC65E,OAAO,CAAC,CAAC4f,aAAa,CAACttG,IAAI,CAAC;QACtChD,MAAM,EAAE6W,GAAG,CAAC7W,MAAM;QAClBuwG,UAAU,EAAE15F,GAAG,CAAC+5E;MACpB,CAAC,CAAC;IACN;;IAEA;IACA,IAAIU,MAAM,GAAG,EAAE;IACf,KAAK,IAAI1wB,OAAO,IAAIyvC,SAAS,EAAE;MAC3B,IAAIA,SAAS,CAACxkE,cAAc,CAAC+0B,OAAO,CAAC,EAAE;QACnC0wB,MAAM,CAACtuF,IAAI,CAACqtG,SAAS,CAACzvC,OAAO,CAAC,CAAC;MACnC;IACJ;IAEA,OAAO0wB,MAAM;EACjB,CAAC;EAED,IAAIkf,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAaC,QAAQ,EAAE/xE,IAAI,EAAEgyE,OAAO,EAAEC,mBAAmB,EAAE;IAC/E,IAAIF,QAAQ,CAACrgB,QAAQ,KAAKugB,mBAAmB,EAAE;MAC3C,OAAO,QAAQ;IACnB;IAEA,QAAQF,QAAQ,CAACrgB,QAAQ;MACrB,KAAK,SAAS;MACd,KAAK,QAAQ;QACT;QACA,IAAI1xD,IAAI,CAACkyE,eAAe,KAAK,QAAQ,IAAIF,OAAO,CAACr4E,QAAQ,EAAE;UACvD,OAAO,QAAQ;QACnB;QACA,IAAIiuE,OAAO,GAAG5nE,IAAI,CAACvF,OAAO,IAAI,CAAC;QAC/B,IAAI03E,WAAW,GAAGnyE,IAAI,CAACjJ,QAAQ,IAAIiJ,IAAI,CAACjJ,QAAQ,CAAC1yB,MAAM,GAAG,CAAC;QAC3D,IAAI8tG,WAAW,IAAIvK,OAAO,GAAG,CAAC,EAAE;UAC5B,OAAO,gBAAgB;QAC3B,CAAC,MAAM,IAAIuK,WAAW,IAAIvK,OAAO,IAAI,CAAC,EAAE;UACpC,OAAO,WAAW;QACtB,CAAC,MAAM;UACH,OAAO,SAAS;QACpB;MACJ,KAAK,OAAO;MACZ,KAAK,cAAc;QACf,OAAO,SAAS;MACpB,KAAK,OAAO;QACR,OAAO,OAAO;MAClB,KAAK,cAAc;QACf,OAAO,cAAc;MACzB,KAAK,WAAW;QACZ,OAAO,WAAW;MACtB,KAAK,kBAAkB;QACnB,OAAO,kBAAkB;MAC7B;QACI,OAAO,aAAa;IAC5B;EACJ,CAAC;;EAED;AACR;AACA;AACA;EACQ,IAAIwK,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAapyE,IAAI,EAAE;IAC5C,IAAIoyD,SAAS,GAAG,EAAE;IAClB,IAAIC,UAAU,GAAG,EAAE;IAEnB,IAAI,CAACryD,IAAI,EAAE;MACP,OAAO;QAAEoyD,SAAS,EAAEA,SAAS;QAAEC,UAAU,EAAEA;MAAW,CAAC;IAC3D;;IAEA;IACA,IAAIryD,IAAI,CAACG,OAAO,IAAIj4B,KAAK,CAAC0wC,OAAO,CAAC5Y,IAAI,CAACG,OAAO,CAAC,EAAE;MAC7CiyD,SAAS,GAAGpyD,IAAI,CAACG,OAAO,CAACprB,GAAG,CAAC,UAASsrB,MAAM,EAAE;QAC1C,OAAOA,MAAM,CAACI,QAAQ;MAC1B,CAAC,CAAC,CAACz8B,MAAM,CAAC,UAASyE,EAAE,EAAE;QAAE,OAAOA,EAAE;MAAE,CAAC,CAAC;IAC1C;;IAEA;IACA,IAAIu3B,IAAI,CAACjJ,QAAQ,IAAI7uB,KAAK,CAAC0wC,OAAO,CAAC5Y,IAAI,CAACjJ,QAAQ,CAAC,EAAE;MAC/Cs7D,UAAU,GAAGryD,IAAI,CAACjJ,QAAQ,CAAChiB,GAAG,CAAC,UAAS4pB,OAAO,EAAE;QAC7C,OAAOA,OAAO,CAACt9B,EAAE;MACrB,CAAC,CAAC,CAAC2C,MAAM,CAAC,UAASyE,EAAE,EAAE;QAAE,OAAOA,EAAE;MAAE,CAAC,CAAC;IAC1C;IAEA,OAAO;MAAE2pF,SAAS,EAAEA,SAAS;MAAEC,UAAU,EAAEA;IAAW,CAAC;EAC3D,CAAC;;EAED;AACR;AACA;AACA;AACA;AACA;EACQ,IAAIggB,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAaC,aAAa,EAAEC,YAAY,EAAE;IAC1D,KAAK,IAAI9/F,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG6/F,aAAa,CAACjuG,MAAM,EAAEoO,CAAC,EAAE,EAAE;MAC3C,IAAI48C,KAAK,GAAGijD,aAAa,CAAC7/F,CAAC,CAAC;MAC5B48C,KAAK,CAAClvB,OAAO,GAAG,EAAE;MAClBkvB,KAAK,CAACt4B,QAAQ,GAAG,EAAE;;MAEnB;MACA,KAAK,IAAIjW,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyxF,YAAY,CAACluG,MAAM,EAAEyc,CAAC,EAAE,EAAE;QAC1C,IAAI0xF,aAAa,GAAGD,YAAY,CAACzxF,CAAC,CAAC;QACnC,IAAI0xF,aAAa,CAACxgB,OAAO,KAAK3iC,KAAK,CAAC2iC,OAAO,EAAE;UACzC;UACA,IAAIwgB,aAAa,CAACryE,OAAO,EAAE;YACvB,IAAI;cACA,IAAIsyE,OAAO,GAAG98E,IAAI,CAAC2T,KAAK,CAACkpE,aAAa,CAACryE,OAAO,CAAC;cAC/CkvB,KAAK,CAAClvB,OAAO,GAAGkvB,KAAK,CAAClvB,OAAO,CAACzwB,MAAM,CAAC+iG,OAAO,CAAC;YACjD,CAAC,CAAC,OAAOjzF,CAAC,EAAE;cACRvc,OAAO,CAACqkB,KAAK,CAAC,oCAAoC,EAAE+nC,KAAK,CAAC2iC,OAAO,EAAExyE,CAAC,CAAC;YACzE;UACJ;UACA,IAAIgzF,aAAa,CAACz7E,QAAQ,EAAE;YACxB,IAAI;cACA,IAAI27E,QAAQ,GAAG/8E,IAAI,CAAC2T,KAAK,CAACkpE,aAAa,CAACz7E,QAAQ,CAAC;cACjDs4B,KAAK,CAACt4B,QAAQ,GAAGs4B,KAAK,CAACt4B,QAAQ,CAACrnB,MAAM,CAACgjG,QAAQ,CAAC;YACpD,CAAC,CAAC,OAAOlzF,CAAC,EAAE;cACRvc,OAAO,CAACqkB,KAAK,CAAC,qCAAqC,EAAE+nC,KAAK,CAAC2iC,OAAO,EAAExyE,CAAC,CAAC;YAC1E;UACJ;QACJ;MACJ;IACJ;IAEA,OAAO8yF,aAAa;EACxB,CAAC;;EAED;AACR;AACA;EACQ,IAAI,CAACxgB,UAAU,GAAG,UAAU5vB,OAAO,EAAE6vB,eAAe,EAAE4gB,gBAAgB,EAAEC,mBAAmB,EAAE;IAEzF;IACA,IAAG,CAAC,IAAI,CAACrB,iBAAiB,CAAC,CAAC,EAAE;MAC1B,OAAO5hF,OAAO,CAACjmB,OAAO,CAAC,CAAC;IAC5B;IACA,IAAIssC,MAAM;IACV,IAAIo8C,SAAS,GAAG,EAAE;IAClB,IAAIC,UAAU,GAAG,EAAE;IAEnB,IAAI,OAAOsgB,gBAAgB,KAAK,QAAQ,EAAE;MACtC38D,MAAM,GAAG28D,gBAAgB;IAC7B,CAAC,MAAM;MACH38D,MAAM,GAAG87D,oBAAoB,CACzBa,gBAAgB,CAACZ,QAAQ,EACzBY,gBAAgB,CAAC3yE,IAAI,EACrB2yE,gBAAgB,CAACX,OAAO,EACxBW,gBAAgB,CAACV,mBACrB,CAAC;;MAED;MACA,IAAIY,SAAS,GAAGT,yBAAyB,CAACO,gBAAgB,CAAC3yE,IAAI,CAAC;MAChEoyD,SAAS,GAAGygB,SAAS,CAACzgB,SAAS;MAC/BC,UAAU,GAAGwgB,SAAS,CAACxgB,UAAU;IACrC;;IAEA;IACA,IAAI,CAACnwB,OAAO,EAAE;MACVj/D,OAAO,CAAC6vG,IAAI,CAAC,8DAA8D,CAAC;MAC5E5wC,OAAO,GAAG,sCAAsC;IACpD;;IAEA;IACA,IAAI,CAAC6vB,eAAe,IAAI6gB,mBAAmB,EAAE;MACzC7gB,eAAe,GAAG6gB,mBAAmB;IACzC;;IAEA;IACA,IAAI,CAAC7gB,eAAe,EAAE;MAClB9uF,OAAO,CAAC6vG,IAAI,CAAC,uEAAuE,EAAE5wC,OAAO,CAAC;MAC9F6vB,eAAe,GAAG,sCAAsC;IAC5D;;IAEA;IACA,IAAI/+E,UAAU,CAACE,WAAW,EAAE;MACxBjQ,OAAO,CAACC,GAAG,CAAC,yBAAyB,EAAE;QACnCg/D,OAAO,EAAEA,OAAO;QAChB6vB,eAAe,EAAEA,eAAe;QAChC/7C,MAAM,EAAEA,MAAM;QACdo8C,SAAS,EAAEA,SAAS;QACpBC,UAAU,EAAEA,UAAU;QACtB0gB,SAAS,EAAE,IAAIr5E,IAAI,CAAC,CAAC,CAACq3C,WAAW,CAAC;MACtC,CAAC,CAAC;IACN;;IAEA;IACA,IAAG,CAAC,IAAI,CAACwgC,iBAAiB,CAAC,IAAI,CAAC,EAAE;MAC9B,OAAO5hF,OAAO,CAACjmB,OAAO,CAAC,CAAC;IAC5B;IAEA,IAAIglB,QAAQ,GAAG4iF,WAAW,CAAC,CAAC;IAC5B,OAAO5iF,QAAQ,CAACojE,UAAU,CAAC5vB,OAAO,EAAE6vB,eAAe,EAAE/7C,MAAM,CAAC,CACvD/zC,IAAI,CAAC,YAAW;MACb;MACA,OAAOysB,QAAQ,CAACyjE,kBAAkB,CAACjwB,OAAO,EAAEkwB,SAAS,EAAEC,UAAU,CAAC;IACtE,CAAC,CAAC;EACV,CAAC;;EAED;AACR;AACA;AACA;EACQ,IAAI,CAACK,eAAe,GAAG,YAAY;IAC/B,IAAG,CAAC,IAAI,CAAC6e,iBAAiB,CAAC,CAAC,EAAE;MAC1B,OAAO5hF,OAAO,CAACjmB,OAAO,CAAC,EAAE,CAAC;IAC9B;IACA,OAAO4nG,WAAW,CAAC,CAAC,CAAC5e,eAAe,CAAC,CAAC;EAC1C,CAAC;;EAED;AACR;AACA;AACA;EACQ,IAAI,CAACF,yBAAyB,GAAG,UAAUjkE,eAAe,EAAE;IACxD,IAAG,CAAC,IAAI,CAACgjF,iBAAiB,CAAC,CAAC,EAAE;MAC1B,OAAO5hF,OAAO,CAACjmB,OAAO,CAAC,EAAE,CAAC;IAC9B;IACA,IAAI6X,IAAI,GAAG,IAAI;IACf,IAAImN,QAAQ,GAAG4iF,WAAW,CAAC,CAAC;;IAE5B;IACA,OAAO5iF,QAAQ,CAAC8jE,yBAAyB,CAACjkE,eAAe,CAAC,CAACtsB,IAAI,CAAC,UAAU+wG,aAAa,EAAE;MACrF,OAAOzxF,IAAI,CAACmxE,eAAe,CAAC,CAAC,CAACzwF,IAAI,CAAC,UAAUgxG,YAAY,EAAE;QACvD;QACA,IAAIC,SAAS,GAAGF,aAAa,CAACtjG,MAAM,CAACujG,YAAY,CAAC;QAClD,IAAIX,aAAa,GAAGZ,eAAe,CAACwB,SAAS,CAAC;;QAE9C;QACA,OAAOxkF,QAAQ,CAACikE,gCAAgC,CAACpkE,eAAe,CAAC,CAACtsB,IAAI,CAAC,UAAUswG,YAAY,EAAE;UAC3F,OAAOF,gBAAgB,CAACC,aAAa,EAAEC,YAAY,CAAC;QACxD,CAAC,CAAC;MACN,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;AACL,CAAC,CACJ,CAAC,C;;;;;;;;;;AC1QFx0G,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,eAAe,EAAE,CAChD,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,YAAY,EACxF,UAAUle,EAAE,EAAEwkB,KAAK,EAAEjlB,aAAa,EAAEkwB,qBAAqB,EAAEvb,eAAe,EAAEE,UAAU,EAAE;EAEpF,IAAI,CAACk6F,aAAa,GAAG,UAAU/8E,MAAM,EAAEgjF,aAAa,EAAE;IAClD,IAAIzkF,QAAQ,GAAIvwB,aAAa,CAACmB,QAAQ,IAAI6zG,aAAa,KAAK,IAAI,GAAI9kF,qBAAqB,GAAGvb,eAAe;IAC3G,IAAIvJ,EAAE,GAAGmlB,QAAQ,CAACsxE,yBAAyB,CAAC7vE,MAAM,CAAC;IAEnD,IAAIhyB,aAAa,CAACmB,QAAQ,IAAInB,aAAa,CAACX,MAAM,KAAK,KAAK,IAAI,CAACwV,UAAU,CAACE,WAAW,EAAE;MACrF3J,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,UAAUC,IAAI,EAAE;QACzB,OAAO4Q,eAAe,CAACgtF,eAAe,CAAC59F,IAAI,CAACC,IAAI,CAAC;MACrD,CAAC,CAAC;IACN,CAAC,MAAM,IAAIhE,aAAa,CAACX,MAAM,KAAK,IAAI,IAAIwV,UAAU,CAACE,WAAW,EAAE;MAChE3J,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,UAAUC,IAAI,EAAE;QACzB,IAAIsH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAAC;UAAEyzC,OAAO,EAAEj7C,IAAI,CAACC,IAAI,CAACg7C;QAAQ,CAAC,CAAC;QAChD,OAAO3zC,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC;IACN;IAEA,OAAOJ,EAAE;EACb,CAAC;;EAED;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA,IAAI,CAAC6pG,6BAA6B,GAAG,UAAUjT,MAAM,EAAE;IACnDhiG,aAAa,CAAC2kC,iBAAiB,GAAG,EAAE;IAEpC,IAAI/tB,GAAG,GAAG,CAAC,CAAC;IACZhX,OAAO,CAAC4M,OAAO,CAACxM,aAAa,CAAC4kC,oBAAoB,EAAE,UAAUllC,EAAE,EAAE;MAC9DkX,GAAG,CAAClX,EAAE,CAACw1G,iBAAiB,CAAC79F,WAAW,CAAC,CAAC,CAAC,GAAG3X,EAAE;IAChD,CAAC,CAAC;IAEF,IAAIsiG,MAAM,IAAIA,MAAM,CAACmT,iBAAiB,IAAInT,MAAM,CAACmT,iBAAiB,CAACjvG,MAAM,EAAE;MACvEtG,OAAO,CAAC4M,OAAO,CAACw1F,MAAM,CAACmT,iBAAiB,EAAE,UAAUnyE,CAAC,EAAE;QACnD,IAAIoyE,EAAE,GAAGx1G,OAAO,CAAC+F,IAAI,CAACq9B,CAAC,CAAC;QACxB,IAAIqyE,EAAE,GAAGD,EAAE,CAACF,iBAAiB,CAAC79F,WAAW,CAAC,CAAC;QAC3C,IAAG+9F,EAAE,CAACh3F,QAAQ,EAAE;UACZ,QAAQi3F,EAAE;YACN,KAAK,MAAM;YACX,KAAK,eAAe;YACpB,KAAK,aAAa;YAClB,KAAK,OAAO;YACZ,KAAK,WAAW;YAChB,KAAK,SAAS;cACVD,EAAE,CAACh3F,QAAQ,GAAG,KAAK,CAAC,CAAC;cACrBg3F,EAAE,CAACxlE,wBAAwB,GAAGylE,EAAE;cAChC;UACR;QACJ;QAEAz+F,GAAG,CAACy+F,EAAE,CAAC,GAAGD,EAAE;MAChB,CAAC,CAAC;IACN;IAEAx1G,OAAO,CAAC4M,OAAO,CAACgW,MAAM,CAACC,mBAAmB,CAAC7L,GAAG,CAAC,EAAE,UAAUupC,GAAG,EAAE;MAC5DngD,aAAa,CAAC2kC,iBAAiB,CAACx+B,IAAI,CAACyQ,GAAG,CAACupC,GAAG,CAAC,CAAC;IAClD,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAAC2hD,YAAY,GAAG,UAASjP,WAAW,EAAE;IACtC,IAAItiE,QAAQ,GAAGvwB,aAAa,CAACmB,QAAQ,GAAG+uB,qBAAqB,GAAGvb,eAAe;IAE/E,OAAO4b,QAAQ,CAACuxE,YAAY,CAACjP,WAAW,CAAC,CACxC/uF,IAAI,CAAC,UAASC,IAAI,EAAE;MACjB,IAAIC,IAAI,GAAGD,IAAI,CAACC,IAAI,IAAID,IAAI;MAC5B,IAAInE,OAAO,CAAC66C,OAAO,CAACz2C,IAAI,CAACg7C,OAAO,CAAC,EAAE;QAC/B,OAAOh7C,IAAI,CAACg7C,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI;MAClC;MACA,OAAOh7C,IAAI,IAAI,IAAI;IACvB,CAAC,CAAC,SACI,CAAC,YAAW;MACd,OAAO,IAAI;IACf,CAAC,CAAC;EACN,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;;ACrFPpE,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,4BAA4B,EAC3D,CAAC,IAAI,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,UAAU,EACxF,UAAUle,EAAE,EAAET,aAAa,EAAEO,cAAc,EAAE4vB,eAAe,EAAEhwB,aAAa,EAAEG,QAAQ,EAAE;EAEnF,IAAI,CAAC84F,WAAW,GAAG,IAAI;EACvB,IAAI,CAACkc,MAAM,GAAG,IAAI;EAElB,IAAI,CAACC,aAAa,GAAG,YAAW;IAC5B,OAAO,CAAC,CAAC,IAAI,CAACD,MAAM,IACX,IAAI,CAACA,MAAM,CAACE,UAAU,KAAK,IAAI,CAACF,MAAM,CAACG,MAAM,IAC7C,IAAI,CAACH,MAAM,CAACE,UAAU,KAAK,IAAI,CAACF,MAAM,CAACI,OAAO;EAC3D,CAAC;EAED,IAAI,CAACprG,EAAE,GAAG,CAAC;EAEX,IAAI,CAACg5C,IAAI,GAAG,UAAUtV,KAAK,EAAE+nD,QAAQ,EAAE;IACnC,IAAIA,QAAQ,GAAG/1F,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;IAErD,IAAI76B,CAAC,GAAG,CAAC,CAACuhF,QAAQ,GAAGA,QAAQ,CAAC4f,sBAAsB,GAAG,IAAI;IAC3D,IAAIvyF,IAAI,GAAG,IAAI;IACf,IAAI4f,CAAC,GAAG,IAAI,CAAC4yE,WAAW,CAAC,CAAC,CAAC9xG,IAAI,CAAC,YAAU;MAAC,OAAOsf,IAAI,CAACyyF,aAAa,CAAC,CAAC;IAAC,CAAC,CAAC;IAEzE,IAAI7nE,KAAK,KAAK,IAAI,EAAE;MAChB,IAAI,CAACx5B,CAAC,EAAE;QACJ,IAAIiS,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBmb,QAAQ,CAACC,MAAM,CAAC,qCAAqC,CAAC;QACtD,OAAOD,QAAQ,CAACjb,OAAO;MAC3B;MAEA,OAAOw3B,CAAC;IACZ;;IAEA;IACA,OAAOA,CAAC,CAACl/B,IAAI,CAAC,YAAW;MACrB,OAAOsf,IAAI,CAAC0yF,WAAW,CAAC,oBAAoB,EAAE,IAAI,CAAC;IACvD,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACrb,MAAM,GAAG,UAAU1E,QAAQ,EAAE;IAC9B,IAAIA,QAAQ,GAAG/1F,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;IACrD,IAAG,CAAC,CAAC0mD,QAAQ,EACTA,QAAQ,CAAC4f,sBAAsB,GAAG,IAAI;IAC1C,IAAIlvF,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBmb,QAAQ,CAAClb,OAAO,CAAC,IAAI,CAAC;IACtB,OAAOkb,QAAQ,CAACjb,OAAO;EAE3B,CAAC;EAED,IAAI,CAAC+3B,WAAW,GAAG,UAAUl8B,OAAO,EAAE;IAClC,IAAI,CAAC0zF,WAAW,GAAG,IAAI;IACvB,IAAI33E,IAAI,GAAG,IAAI;IAEf,IAAI2yE,QAAQ,GAAG/1F,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;IACrD,IAAIgb,IAAI,GAAG;MACP,KAAK,EAAE0rC,QAAQ,CAAC4f,sBAAsB;MACtC,UAAU,EAAEtuG,OAAO,CAAChE,QAAQ;MAC5B,QAAQ,EAAEs2B,IAAI,CAACkpB,KAAK,CAACx7C,OAAO,CAACkd,MAAM,GAAG,GAAG;IAC7C,CAAC;IAED,IAAIwxF,SAAS,GAAGt1G,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAC1ByqG,SAAS,CAACxqG,OAAO,CAAC,IAAI,CAAC;IAEvB,IAAIC,OAAO,GAAGuqG,SAAS,CAACvqG,OAAO,CAC1B1H,IAAI,CAAC,YAAY;MACdsf,IAAI,CAACy3E,YAAY,GAAG,eAAe;MACnCz3E,IAAI,CAAC43E,kBAAkB,CAAC,CAAC;MACzB,IAAIgb,SAAS,GAAGv1G,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAC1B0qG,SAAS,CAACzqG,OAAO,CAAC,IAAI,CAAC;MACvB,OAAOyqG,SAAS,CAACxqG,OAAO;IAC5B,CAAC,CAAC,CACD1H,IAAI,CAAC,YAAY;MAAE,OAAOsf,IAAI,CAAC0yF,WAAW,CAAC,MAAM,EAAEzrD,IAAI,CAAC;IAAE,CAAC,CAAC,CAC5DvmD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAI65B,CAAC;MAEL,IAAI,CAAC,CAAC5f,IAAI,CAAC6yF,iBAAiB,EAAE;QAC1BjzE,CAAC,GAAG5f,IAAI,CAAC6yF,iBAAiB,CAACzqG,OAAO;MACtC,CAAC,MAAM;QACH,IAAI0qG,SAAS,GAAGz1G,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAC1B4qG,SAAS,CAAC3qG,OAAO,CAAC,IAAI,CAAC;QACvBy3B,CAAC,GAAGkzE,SAAS,CAAC1qG,OAAO;MACzB;;MAEJ;MACIw3B,CAAC,CAACl/B,IAAI,CAAC,YAAY;QACf,IAAI2iB,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzB8X,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;QAC7B90E,QAAQ,CAAClb,OAAO,CAACpC,GAAG,CAAC;QACrB,OAAOsd,QAAQ,CAACjb,OAAO;MAC3B,CAAC,CAAC;MAEF,OAAOw3B,CAAC;IACZ,CAAC,EACD,UAAU/+B,GAAG,EAAE;MACX,IAAIwiB,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzB8X,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;MAC7B90E,QAAQ,CAACC,MAAM,CAACziB,GAAG,CAAC;MACpB,OAAOwiB,QAAQ,CAACjb,OAAO;IAC3B,CAAC,CAAC;IAEN,OAAOA,OAAO;EAClB,CAAC;EAED,IAAI,CAAC02B,MAAM,GAAG,UAAUxiC,EAAE,EAAEw9F,SAAS,EAAE71F,OAAO,EAAE;IAC5C,IAAI,CAAC0zF,WAAW,GAAG,IAAI;IACvB,IAAI33E,IAAI,GAAG,IAAI;IAEf,IAAI2yE,QAAQ,GAAG/1F,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;IACrD,IAAIgb,IAAI,GAAG;MACP,KAAK,EAAE0rC,QAAQ,CAAC4f,sBAAsB;MACtC,UAAU,EAAEtuG,OAAO,CAAChE,QAAQ;MAC5B,QAAQ,EAAEs2B,IAAI,CAACkpB,KAAK,CAACq6C,SAAS,GAAG,GAAG;IACxC,CAAC;IACD,IAAI6Y,SAAS,GAAGt1G,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAC1ByqG,SAAS,CAACxqG,OAAO,CAAC,IAAI,CAAC;IAEvB,IAAIC,OAAO,GAAGuqG,SAAS,CAACvqG,OAAO,CAC1B1H,IAAI,CAAC,YAAY;MACdsf,IAAI,CAACy3E,YAAY,GAAG,eAAe;MACnCz3E,IAAI,CAAC43E,kBAAkB,CAAC,CAAC;MACzB,IAAIgb,SAAS,GAAGv1G,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAC1B0qG,SAAS,CAACzqG,OAAO,CAAC,IAAI,CAAC;MACvB,OAAOyqG,SAAS,CAACxqG,OAAO;IAC5B,CAAC,CAAC,CACD1H,IAAI,CAAC,YAAY;MAAE,OAAOsf,IAAI,CAAC0yF,WAAW,CAAC,QAAQ,EAAEzrD,IAAI,CAAC;IAAE,CAAC,CAAC,CAC9DvmD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAI65B,CAAC;MAEL,IAAI,CAAC,CAAC5f,IAAI,CAAC6yF,iBAAiB,EAAE;QAC1BjzE,CAAC,GAAG5f,IAAI,CAAC6yF,iBAAiB,CAACzqG,OAAO;MACtC,CAAC,MAAM;QACH,IAAI0qG,SAAS,GAAGz1G,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAC1B4qG,SAAS,CAAC3qG,OAAO,CAACpC,GAAG,CAAC;QACtB65B,CAAC,GAAGkzE,SAAS,CAAC1qG,OAAO;MACzB;;MAEA;MACAw3B,CAAC,CAACl/B,IAAI,CAAC,YAAY;QACf,IAAI2iB,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzB8X,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;QAC7B90E,QAAQ,CAAClb,OAAO,CAACpC,GAAG,CAAC;QACrB,OAAOsd,QAAQ,CAACjb,OAAO;MAC3B,CAAC,CAAC;MAEF,OAAOw3B,CAAC;IACZ,CAAC,EACD,UAAU/+B,GAAG,EAAE;MACX,IAAIwiB,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzB8X,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;MAC7B90E,QAAQ,CAACC,MAAM,CAACziB,GAAG,CAAC;MACpB,OAAOwiB,QAAQ,CAACjb,OAAO;IAC3B,CAAC,CAAC;IAEN,OAAOA,OAAO;EAClB,CAAC;EAED,IAAI,CAAC2qG,eAAe,GAAG,YAAY;IAC/B,IAAI,CAACC,eAAe,CAAC,CAAC;EAC1B,CAAC;EAED,IAAI,CAACC,YAAY,GAAG,IAAI;EACxB,IAAI,CAACC,YAAY,GAAG,IAAI;;EAExB;AACR;AACA;AACA;AACA;AACA;AACA;EACQ,IAAI,CAACC,iBAAiB,GAAG,UAASC,eAAe,EAAE;IAE/C,IAAIzgB,QAAQ,GAAG/1F,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;IACrD,IAAIgb,IAAI,GAAG;MACP,KAAK,EAAE0rC,QAAQ,CAAC4f;IACpB,CAAC;IAED,IAAIc,MAAM,GAAG;MACTC,eAAe,EAAEF;IACrB,CAAC;IAED,IAAI/vF,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBmb,QAAQ,CAAClb,OAAO,CAACkrG,MAAM,CAAC;IACxB,IAAIjrG,OAAO,GAAGib,QAAQ,CAACjb,OAAO;IAC1C;IACA;IACY,IAAI4X,IAAI,GAAG,IAAI;IAEf5X,OAAO;IACP;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACAA,OAAO,CACN1H,IAAI,CAAC,UAASqF,GAAG,EAAE;MAChBstG,MAAM,GAAGttG,GAAG;MACZ,OAAOia,IAAI,CAAC0yF,WAAW,CAAC,gBAAgB,EAAEzrD,IAAI,CAAC,CAC9CvmD,IAAI,CAAC,UAAUqF,GAAG,EAAE;QAEjB;QACA;QACA;QACA;QACA;QACA;QACA,IAAIsd,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBmb,QAAQ,CAAClb,OAAO,CAACpC,GAAG,CAACoe,MAAM,CAAC;QAC5B,OAAOd,QAAQ,CAACjb,OAAO;MACvB,CAAC,CAAC;IACV,CAAC,CAAC;IAEF,OAAOA,OAAO;EAClB,CAAC;EAED,IAAI,CAACmrG,cAAc,GAAG,IAAI;EAC1B,IAAI,CAACV,iBAAiB,GAAG,IAAI;EAE7B,IAAI,CAACJ,aAAa,GAAG,YAAY;IAC7B,IAAI,CAACc,cAAc,GAAG,IAAI;IAC1B,IAAI,CAACV,iBAAiB,GAAG,IAAI;IAC7B,IAAI,CAACU,cAAc,GAAGl2G,EAAE,CAAC6K,KAAK,CAAC,CAAC;;IAEhC;IACA,IAAI,IAAI,CAACiqG,aAAa,CAAC,CAAC,EAAE;MACtB,IAAI,CAACoB,cAAc,CAACprG,OAAO,CAAC,IAAI,CAAC+pG,MAAM,CAAC;MACxC,OAAO,IAAI,CAACqB,cAAc,CAACnrG,OAAO;IACtC;IAEA,IAAI2Z,GAAG,GAAG,QAAQ,GAAGnlB,aAAa,CAAC+qC,mBAAmB,GAAG,aAAa,GAClE/qC,aAAa,CAACgrC,sBAAsB,GAClC,iBAAiB;;IAEvB;IACA,IAAI5nB,IAAI,GAAG,IAAI;IACf,IAAI,CAACkyF,MAAM,GAAG,IAAIsB,SAAS,CAACzxF,GAAG,CAAC;IAEhC,IAAI,CAACmwF,MAAM,CAACuB,MAAM,GAAG,YAAY;MAC7B,IAAG,CAAC,CAACzzF,IAAI,CAACuzF,cAAc,EAAE;QACtBvzF,IAAI,CAACuzF,cAAc,CAACprG,OAAO,CAAC,IAAI,CAAC;MACrC;MAEA6X,IAAI,CAAC0zF,SAAS,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,CAACxB,MAAM,CAACyB,OAAO,GAAG,UAAU30G,KAAK,EAAE;MACnC,IAAG,CAAC,CAACghB,IAAI,CAACuzF,cAAc,EAAE;QACtB,IAAI,CAAC,CAACv0G,KAAK,CAACsrB,MAAM,EACd,IAAIhT,GAAG,GAAGtY,KAAK,CAACi5F,IAAI,KAAK,IAAI,GAAG,uJAAuJ,GAAGj5F,KAAK,CAACsrB,MAAM;QACtMtK,IAAI,CAACuzF,cAAc,CAACjwF,MAAM,CAAChM,GAAG,CAAC;QACnC0I,IAAI,CAACuzF,cAAc,GAAG,IAAI;MAC9B;MAEAvzF,IAAI,CAACgzF,eAAe,CAAC,CAAC;MACtB,IAAI,CAACO,cAAc,GAAG,IAAI;MAC1B,IAAI,CAACV,iBAAiB,GAAG,IAAI;IACjC,CAAC;IAED,IAAI,CAACX,MAAM,CAAC33B,SAAS,GAAG,UAASv7E,KAAK,EAAE;MACpC,IAAG,CAACA,KAAK,CAAC4B,IAAI,EAAE;MAEhB,IAAIA,IAAI,GAAGwzB,IAAI,CAAC2T,KAAK,CAAC/oC,KAAK,CAAC4B,IAAI,CAAC;MACjC,IAAGA,IAAI,CAACkiB,MAAM,KAAK,8BAA8B,EAAC;QAC9C9C,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;QAC7Bn4E,IAAI,CAAC23E,WAAW,GAAG,KAAK;QACxB33E,IAAI,CAACg2E,WAAW,CAAC+B,sBAAsB,GAAG,CAAC;UACvCzxF,IAAI,EAAEnJ,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC;UACrC+T,KAAK,EAAE;QACX,CAAC,EACD;UACI3L,IAAI,EAAEnJ,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC;UACpC+T,KAAK,EAAE;QACX,CAAC,CAAC;QAEF+N,IAAI,CAACg2E,WAAW,CAAC6B,sBAAsB,GAAG,6BAA6B;QACvE73E,IAAI,CAACg2E,WAAW,CAAC8B,mBAAmB,GAAG,8DAA8D;QACrG93E,IAAI,CAACg2E,WAAW,CAACoE,oBAAoB,GAAG,EAAE;QAE1Cp6E,IAAI,CAACg2E,WAAW,CAACgC,cAAc,GAAG,UAAUC,IAAI,EAAE;UAC9C,IAAIn1B,GAAG,GAAG;YACN8wC,OAAO,EAAE,KAAK;YACd1sG,EAAE,EAAE,CAAC;YACL,QAAQ,EAAE;cAAE,UAAU,EAAE+wF,IAAI,IAAE,KAAK,GAAG,IAAI,GAAG;YAAM;UACvD,CAAC;UACDj4E,IAAI,CAACkyF,MAAM,CAAC2B,IAAI,CAACz/E,IAAI,CAACC,SAAS,CAACyuC,GAAG,CAAC,CAAC;UACrC/lE,aAAa,CAAC+L,WAAW,CAAC,kBAAkB,CAAC;UAC7CkX,IAAI,CAAC03E,eAAe,GAAG,KAAK;UAC5B13E,IAAI,CAAC43E,kBAAkB,CAAC,CAAC;UACzB,OAAO,IAAI;QACf,CAAC;QAED16F,QAAQ,CAAC,YAAY;UAAEH,aAAa,CAAC8E,UAAU,CAAC,kBAAkB,CAAC;QAAE,CAAC,CAAC;MAE3E,CAAC,MAAM,IAAGjB,IAAI,CAACkiB,MAAM,KAAK,sBAAsB,EAAE;QAC9C;QACA,IAAIvL,OAAO,GAAG3W,IAAI,CAACkzG,MAAM,CAACC,iBAAiB;QAE3C,QAAOnzG,IAAI,CAACkzG,MAAM,CAACC,iBAAiB;UAChC,KAAK,cAAc;YACfx8F,OAAO,GAAG,cAAc;YACxByI,IAAI,CAAC23E,WAAW,GAAG,KAAK;YACxB33E,IAAI,CAACg2E,WAAW,CAAC+B,sBAAsB,GAAG,CAAC;cACvCzxF,IAAI,EAAEnJ,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC;cACxC+T,KAAK,EAAE;YACX,CAAC,CAAC;YAEF;UACJ,KAAK,WAAW;YACZsF,OAAO,GAAG,WAAW;YACrB;UACJ,KAAK,YAAY;YACbA,OAAO,GAAG,YAAY;YACtB;UACJ,KAAK,iBAAiB;YAClBA,OAAO,GAAG,WAAW;YACrB;UACJ,KAAK,UAAU;YACXA,OAAO,GAAG,UAAU;YACpB;UACJ,KAAK,aAAa;YACdA,OAAO,GAAG,aAAa;YACvB;UACJ,KAAK,UAAU;YACXA,OAAO,GAAG,UAAU;YACpB;UACJ,KAAK,aAAa;YACdA,OAAO,GAAG,qBAAqB;YAC/B;UACJ,KAAK,aAAa;YACdA,OAAO,GAAG,iBAAiB;YAC3B;UACJ,KAAK,kBAAkB;YACnBA,OAAO,GAAG,kBAAkB;YAC5B;UACJ,KAAK,YAAY;YACbA,OAAO,GAAG,qBAAqB;YAC/B;UACJ,KAAK,0CAA0C;YAC3CA,OAAO,GAAG,mDAAmD;YAC7D;UAEJ;YACA;QACJ;QAEAyI,IAAI,CAACy3E,YAAY,GAAGlgF,OAAO;QAC3B,IAAIyI,IAAI,CAAC03E,eAAe,EAAE;UACtBx6F,QAAQ,CAAC,YAAY;YACjB8iB,IAAI,CAACg2E,WAAW,CAAC8B,mBAAmB,GAAGvgF,OAAO;YAC9CyI,IAAI,CAACg2E,WAAW,CAACoE,oBAAoB,GAAG,EAAE;UAC9C,CAAC,CAAC;QACN;MACJ,CAAC,MAAM,IAAI,CAACx5F,IAAI,CAACkiB,MAAM,IAAIliB,IAAI,CAACujB,MAAM,KAAK,EAAE,EAAE;QAC3C;MAAA,CACH,MAAM,IAAI,CAAC,CAACnE,IAAI,CAACuzF,cAAc,EAAE;QAC9B,IAAIS,cAAc,GAAI,CAAC,CAACpzG,IAAI,CAACmlB,KAAK,IAAInlB,IAAI,CAACmlB,KAAK,CAACkyE,IAAI,KAAK,CAAC,KAAK,IAC3D,CAAC,CAACr3F,IAAI,CAACujB,MAAM,IAAIvjB,IAAI,CAACujB,MAAM,CAAC8vF,iBAAiB,KAAK,WAAY;QACpE,IAAIC,gBAAgB,GAAG,CAAC,CAACtzG,IAAI,CAACmlB,KAAK,IAAInlB,IAAI,CAACmlB,KAAK,CAACkyE,IAAI,KAAK,CAAC,KAAK;QAEjE,IAAI,CAAC+b,cAAc,IAAI,CAAC,CAACpzG,IAAI,CAACmlB,KAAK,EAAE;UACjC/F,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;UAE7B,IAAIpyF,GAAG,GAAG;YACNoe,MAAM,EAAE,KAAK;YACboc,QAAQ,EAAE;cACNC,gBAAgB,EAAE5/B,IAAI,CAACmlB,KAAK,CAACxO;YACjC;UACJ,CAAC;UAEDyI,IAAI,CAACuzF,cAAc,CAACjwF,MAAM,CAACvd,GAAG,CAAC;UAC/Bia,IAAI,CAACuzF,cAAc,GAAG,IAAI;QAC9B,CAAC,MACI,IAAIS,cAAc,IAAK,CAAC,CAACpzG,IAAI,CAACujB,MAAM,IAAI,CAAC,CAACvjB,IAAI,CAACujB,MAAM,CAACgwF,aAAc,EAAE;UACvE,IAAI,CAACn0F,IAAI,CAAC6yF,iBAAiB,EACvB91G,aAAa,CAAC+L,WAAW,CAAC,kBAAkB,CAAC;UAEjD,IAAIkrG,cAAc,EAAE;YAEhBh0F,IAAI,CAACg2E,WAAW,CAAC+B,sBAAsB,GAAG,CAAC;cACvCzxF,IAAI,EAAEnJ,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC;cACrC+T,KAAK,EAAE;YACX,CAAC,EACD;cACI3L,IAAI,EAAEnJ,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC;cACpC+T,KAAK,EAAE;YACP,CAAC,CAAC;YAEN,IAAIiiG,gBAAgB,EAAE;cAClBl0F,IAAI,CAACg2E,WAAW,CAAC+B,sBAAsB,GAAG,CAAC;gBACvCzxF,IAAI,EAAEnJ,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC;gBACrC+T,KAAK,EAAE;cACX,CAAC,CAAC;cAEF+N,IAAI,CAAC6yF,iBAAiB,GAAGx1G,EAAE,CAAC6K,KAAK,CAAC,CAAC;YACvC;YAEA8X,IAAI,CAACg2E,WAAW,CAAC6B,sBAAsB,GAAG,6BAA6B;YACvE73E,IAAI,CAACg2E,WAAW,CAAC8B,mBAAmB,GAAG,EAAE;YACzC93E,IAAI,CAACg2E,WAAW,CAACoE,oBAAoB,GAAG,uJAAuJ;YAE/L,IAAI,CAAC8Z,gBAAgB,EACjBl0F,IAAI,CAACg2E,WAAW,CAACoE,oBAAoB,IAAI,sCAAsC;YAEnFp6E,IAAI,CAACg2E,WAAW,CAACgC,cAAc,GAAG,UAAUC,IAAI,EAAE;cAC9Cl7F,aAAa,CAAC+L,WAAW,CAAC,kBAAkB,CAAC;cAC7C,IAAIorG,gBAAgB,EAAE;gBAClBl0F,IAAI,CAAC6yF,iBAAiB,CAAC1qG,OAAO,CAAC,IAAI,CAAC;cACxC,CAAC,MAAM,IAAI8vF,IAAI,IAAI,KAAK,EAAE;gBACtBj4E,IAAI,CAACuzF,cAAc,CAACprG,OAAO,CAAC;kBACxBgc,MAAM,EAAE,IAAI;kBACZoc,QAAQ,EAAE;oBACNE,mBAAmB,EAAE,CAAC,CAAC7/B,IAAI,CAACujB,MAAM,GAC5B,CAAC,CAACvjB,IAAI,CAACujB,MAAM,CAACgwF,aAAa,GAAGvzG,IAAI,CAACujB,MAAM,CAACgwF,aAAa,GAAGvzG,IAAI,CAACujB,MAAM,CAACiwF,GAAG,GAC3E,IAAI;oBACRxa,mBAAmB,EAAE,CAAC,CAACh5F,IAAI,CAACujB,MAAM,GAAGvjB,IAAI,CAACujB,MAAM,GAAG;kBACvD;gBACJ,CAAC,CAAC;cACN,CAAC,MAAM;gBACH,IAAIpe,GAAG,GAAG;kBACNoe,MAAM,EAAE,KAAK;kBACboc,QAAQ,EAAE;oBACNC,gBAAgB,EAAE;kBACtB;gBACJ,CAAC;gBAEDxgB,IAAI,CAACuzF,cAAc,CAACjwF,MAAM,CAACvd,GAAG,CAAC;cACnC;cAEA,OAAO,IAAI;YACf,CAAC;YAED7I,QAAQ,CAAC,YAAY;cAAEH,aAAa,CAAC8E,UAAU,CAAC,kBAAkB,CAAC;YAAE,CAAC,CAAC;YACvE;UAEJ,CAAC,MAAM,IAAGjB,IAAI,CAACujB,MAAM,CAAC8vF,iBAAiB,KAAK,MAAM,EAAE;YAChDj0F,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;YAE7B,IAAIpyF,GAAG,GAAG;cACNoe,MAAM,EAAE,KAAK;cACboc,QAAQ,EAAE;gBACNC,gBAAgB,EAAE;cACtB;YACJ,CAAC;YAEDxgB,IAAI,CAACuzF,cAAc,CAACjwF,MAAM,CAACvd,GAAG,CAAC;UAEnC,CAAC,MAAM,IAAGnF,IAAI,CAACujB,MAAM,CAACkwF,eAAe,KAAK,QAAQ,EAAE;YAChDr0F,IAAI,CAACuzF,cAAc,CAACprG,OAAO,CAAC;cACxBgc,MAAM,EAAE,IAAI;cACZhD,MAAM,EAAEpkB,aAAa,CAAC6uB,SAAS,CAAChrB,IAAI,CAACujB,MAAM,CAACmwF,WAAW,GAAC,GAAG,EAAE,CAAC,CAAC;cAC/D7zE,mBAAmB,EAAE7/B,IAAI,CAACujB,MAAM,CAACgwF,aAAa;cAC9Cva,mBAAmB,EAAEh5F,IAAI,CAACujB;YAC9B,CAAC,CAAC;UACN,CAAC,MAAM,IAAGvjB,IAAI,CAACujB,MAAM,CAAC8vF,iBAAiB,KAAK,YAAY,EAAC;YACrDj0F,IAAI,CAACuzF,cAAc,CAACprG,OAAO,CAAC;cACxBgc,MAAM,EAAE,IAAI;cACZoc,QAAQ,EAAE;gBACNE,mBAAmB,EAAE7/B,IAAI,CAACujB,MAAM,CAACgwF,aAAa;gBAC9Cva,mBAAmB,EAAEh5F,IAAI,CAACujB;cAC9B;YACJ,CAAC,CAAC;UACN,CAAC,MAAM;YACHnE,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;YAE7B,IAAIpyF,GAAG,GAAG;cACNoe,MAAM,EAAE,KAAK;cACboc,QAAQ,EAAE;gBACNC,gBAAgB,EAAE;cACtB;YACJ,CAAC;YAEDxgB,IAAI,CAACuzF,cAAc,CAACjwF,MAAM,CAACvd,GAAG,CAAC;UACnC;UAEAia,IAAI,CAACuzF,cAAc,GAAG,IAAI;QAE9B,CAAC,MAAM,IAAG,CAAC,CAAC3yG,IAAI,CAACujB,MAAM,IAAIvjB,IAAI,CAACujB,MAAM,CAACyB,SAAS,KAAK,IAAI,EAAE;UACvD5F,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;UAE7B,IAAIpyF,GAAG,GAAG;YACNoe,MAAM,EAAE,KAAK;YACboc,QAAQ,EAAE;cACNC,gBAAgB,EAAE;YACtB;UACJ,CAAC;UAEDxgB,IAAI,CAACuzF,cAAc,CAACjwF,MAAM,CAACvd,GAAG,CAAC;QAEnC,CAAC,MAAM,IAAG,CAAC,CAACnF,IAAI,CAACujB,MAAM,IAAIvjB,IAAI,CAACujB,MAAM,CAACyB,SAAS,KAAK,KAAK,EAAE;UACxD5F,IAAI,CAACy3E,YAAY,GAAG,iCAAiC;UACrDv6F,QAAQ,CAAC,YAAY;YACjB8iB,IAAI,CAACg2E,WAAW,CAACoE,oBAAoB,GAAG,EAAE;YAC1Cp6E,IAAI,CAACg2E,WAAW,CAAC8B,mBAAmB,GAAG,iCAAiC;UAC5E,CAAC,CAAC;QACN,CAAC,MAAM,IAAGl3F,IAAI,CAACujB,MAAM,CAAC8vF,iBAAiB,IAAI,WAAW,EAAE;UACpDj0F,IAAI,CAACm4E,kBAAkB,CAAC,IAAI,CAAC;UAE7B,IAAIpyF,GAAG,GAAG;YACNoe,MAAM,EAAE,KAAK;YACboc,QAAQ,EAAE;cACNC,gBAAgB,EAAE;YACtB;UACJ,CAAC;UAEDxgB,IAAI,CAACuzF,cAAc,CAACjwF,MAAM,CAACvd,GAAG,CAAC;UAC/Bia,IAAI,CAACuzF,cAAc,GAAG,IAAI;QAC9B,CAAC,MACI,IAAG,CAAC,CAAC3yG,IAAI,CAACujB,MAAM,CAACowF,YAAY,EAAC;UAE/B,IAAG3zG,IAAI,CAACujB,MAAM,CAACqwF,UAAU,KAAK,WAAW,EAAE;YACvCx0F,IAAI,CAACizF,YAAY,CAAC9qG,OAAO,CAACvH,IAAI,CAAC;YAC/Bof,IAAI,CAACizF,YAAY,GAAG,IAAI;UAC5B,CAAC,MAAM,IAAGryG,IAAI,CAACujB,MAAM,CAACqwF,UAAU,KAAK,SAAS,EAAE;YAC5Cx0F,IAAI,CAACkzF,YAAY,CAAC/qG,OAAO,CAACvH,IAAI,CAAC;YAC/Bof,IAAI,CAACkzF,YAAY,GAAG,IAAI;UAC5B,CAAC,MAAM,IAAGtyG,IAAI,CAACujB,MAAM,CAACqwF,UAAU,KAAK,YAAY,EAAE;YAC/Cx0F,IAAI,CAACuzF,cAAc,CAACprG,OAAO,CAACvH,IAAI,CAAC;UACrC;QACJ,CAAC,MACIof,IAAI,CAACuzF,cAAc,CAACprG,OAAO,CAACvH,IAAI,CAAC;MAC1C;IACJ,CAAC;IAED,IAAI,CAACsxG,MAAM,CAACztF,OAAO,GAAG,UAAUsB,KAAK,EAAE;MACnC/F,IAAI,CAACm4E,kBAAkB,CAAC,CAAC;MAEzB,IAAG,CAAC,CAACn4E,IAAI,CAACuzF,cAAc,EAAE;QACtB,IAAG,CAAC,CAACxtF,KAAK,CAACxO,OAAO,EAAE;UAChByI,IAAI,CAACuzF,cAAc,CAACjwF,MAAM,CAACyC,KAAK,CAACxO,OAAO,CAAC;QAC7C,CAAC,MAAM;UACHyI,IAAI,CAACuzF,cAAc,CAACjwF,MAAM,CAAC,oIAAoI,CAAC;UAChKtD,IAAI,CAACkyF,MAAM,GAAG,IAAI;QACtB;;QAEA;MACJ;IACJ,CAAC;IAED,OAAOlyF,IAAI,CAACuzF,cAAc,CAACnrG,OAAO;EACtC,CAAC;EAED,IAAI,CAACoqG,WAAW,GAAG,YAAY;IAC3B,IAAInvF,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAG,IAAI,CAACiqG,aAAa,CAAC,CAAC,EAAE;MACrB,IAAI,CAACD,MAAM,CAACyB,OAAO,GAAG,IAAI;MAC1B,IAAI,CAACzB,MAAM,CAAClkC,KAAK,CAAC,CAAC;IACvB;IACA,IAAI,CAACkkC,MAAM,GAAG,IAAI;IAClB7uF,QAAQ,CAAClb,OAAO,CAAC,IAAI,CAAC;IACtB,OAAOkb,QAAQ,CAACjb,OAAO;EAC3B,CAAC;EAED,IAAI,CAACsqG,WAAW,GAAG,UAAU5vF,MAAM,EAAEmkC,IAAI,EAAEwtD,EAAE,EAAE;IAC3C,IAAI3xC,GAAG,GAAG;MACN8wC,OAAO,EAAE,KAAK;MACd1sG,EAAE,EAAE,IAAI,CAACA,EAAE,EAAE;MACb4b,MAAM,EAAEA;IACZ,CAAC;IAED,IAAG,CAAC,CAACmkC,IAAI,EACL6b,GAAG,CAACgxC,MAAM,GAAG7sD,IAAI;IAErB,IAAIytD,QAAQ,GAAG5xF,MAAM,KAAK,mBAAmB;IAC7C,IAAG,CAAC4xF,QAAQ,EAAE;MACV,IAAG,CAACD,EAAE,EACF,IAAI,CAAClB,cAAc,GAAGl2G,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACxC;IAEA,IAAI,CAACgqG,MAAM,CAAC2B,IAAI,CAACz/E,IAAI,CAACC,SAAS,CAACyuC,GAAG,CAAC,CAAC;IAErC,IAAG,CAAC4xC,QAAQ,EAAE;MACV,IAAG,CAAC,CAACD,EAAE,EAAE,OAAOA,EAAE,CAACrsG,OAAO;MAC1B,OAAO,IAAI,CAACmrG,cAAc,CAACnrG,OAAO;IACtC;EACJ,CAAC;EAED,IAAI,CAACqvF,YAAY,GAAG,EAAE;EACtB,IAAI,CAACC,eAAe,GAAG,KAAK;EAC5B,IAAI,CAACC,WAAW,GAAG,KAAK;EACxB,IAAI,CAACC,kBAAkB,GAAG,YAAY;IAClC,IAAI53E,IAAI,GAAG,IAAI;IACf,IAAI,CAAC,IAAI,CAAC03E,eAAe,EAAE;MACvB,IAAI,CAACA,eAAe,GAAG,IAAI;MAE3B,IAAI,CAAC1B,WAAW,CAACoE,oBAAoB,GAAG,EAAE;MAC1C,IAAI,CAACpE,WAAW,CAAC6B,sBAAsB,GAAG,6BAA6B;MACvE,IAAI,CAAC7B,WAAW,CAAC8B,mBAAmB,GAAG,IAAI,CAACL,YAAY;MACxD,IAAI,CAAC,IAAI,CAACE,WAAW,EAAE;QACnB,IAAI,CAAC3B,WAAW,CAAC+B,sBAAsB,GAAG,CAAC;UACvCzxF,IAAI,EAAEnJ,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC;UACxC+T,KAAK,EAAE;QACX,CAAC,CAAC;MACN,CAAC,MACI;QACD,IAAI,CAAC+jF,WAAW,CAAC+B,sBAAsB,GAAG,EAAE;MAChD;MAEA,IAAI,CAAC/B,WAAW,CAACgC,cAAc,GAAG,UAAUC,IAAI,EAAE;QAC9Cv2F,OAAO,CAACC,GAAG,CAAC,uBAAuB,CAAC;QACpCqe,IAAI,CAAC23E,WAAW,GAAG,IAAI;QACvB33E,IAAI,CAAC03E,eAAe,GAAG,KAAK;QAC5B13E,IAAI,CAAC43E,kBAAkB,CAAC,CAAC;QACzB53E,IAAI,CAACk4E,wBAAwB,CAAC,CAAC;QAC/B,OAAO,IAAI;MACf,CAAC;MAEDh7F,QAAQ,CAAC,YAAY;QAAEH,aAAa,CAAC8E,UAAU,CAAC,kBAAkB,CAAC;MAAE,CAAC,CAAC;IAC3E;EACJ,CAAC;EAED,IAAI,CAACs2F,kBAAkB,GAAG,UAAUvtD,KAAK,EAAE;IACvC,IAAI,IAAI,CAAC8sD,eAAe,IAAI9sD,KAAK,EAAE;MAC/B,IAAI,CAAC8sD,eAAe,GAAG,KAAK;MAE5Bx6F,QAAQ,CAAC,YAAY;QACjBH,aAAa,CAAC+L,WAAW,CAAC,kBAAkB,CAAC;MACjD,CAAC,CAAC;IACN;EACJ,CAAC;EAED,IAAI,CAACovF,wBAAwB,GAAG,YAAY;IACxC,IAAIvF,QAAQ,GAAG/1F,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;IAErD,IAAI,IAAI,CAACkmE,aAAa,CAAC,CAAC,EAAE;MAEtB,IAAI,CAAC/X,oBAAoB,GAAG,EAAE;MAC9B,IAAI,CAACtC,mBAAmB,GAAG,2BAA2B;IAC1D;IAEA,OAAO,IAAI,CAAC4a,WAAW,CAAC,mBAAmB,EAAE;MAAE,KAAK,EAAE/f,QAAQ,CAAC4f;IAAuB,CAAC,CAAC;EAC5F,CAAC;EAED,IAAI,CAACoC,OAAO,GAAG,CAAC;EAChB,IAAI30F,IAAI,GAAG,IAAI;EACf,IAAI,CAAC0zF,SAAS,GAAG,YAAW;IACxB,IAAIv7C,OAAO,GAAG,KAAK;IACnB,IAAIn4C,IAAI,CAACmyF,aAAa,CAAC,CAAC,EAAE;MACtB,IAAI2B,MAAM,GAAG;QACTF,OAAO,EAAE,KAAK;QACd9wF,MAAM,EAAE,MAAM;QACd5b,EAAE,EAAE;MACR,CAAC;MACD8Y,IAAI,CAACkyF,MAAM,CAAC2B,IAAI,CAACz/E,IAAI,CAACC,SAAS,CAACy/E,MAAM,CAAC,CAAC;IAC5C;IACA9zF,IAAI,CAAC40F,OAAO,GAAGllD,UAAU,CAAC1vC,IAAI,CAAC0zF,SAAS,EAAEv7C,OAAO,CAAC;EACtD,CAAC;EAED,IAAI,CAAC66C,eAAe,GAAG,YAAW;IAC9B,IAAIhzF,IAAI,CAAC40F,OAAO,EAAE;MACdC,YAAY,CAAC70F,IAAI,CAAC40F,OAAO,CAAC;IAC9B;EACJ,CAAC;AACL,CAAC,CACJ,CAAC,C;;;;;;;;;;ACrrBFp4G,OAAO,CACLN,MAAM,CAAC,SAAS,CAAC,CACjBuG,MAAM,CAAC,iBAAiB,oBAAE,UAAS1F,aAAa,EAAE;EAChD,OAAO,UAAS64E,KAAK,EAAEjwD,MAAM,EAAE;IAC7B,OAAO5oB,aAAa,CAACmqB,2BAA2B,CAAC0uD,KAAK,EAAEjwD,MAAM,CAAC;EACjE,CAAC;AACH,CAAC,EAAC,C;;;;;;;;;;;;;;;ACNkC;AAEtCnpB,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,cAAc,EAAE,CAC/C,IAAI,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAC,OAAO,EACxJ,UAAUle,EAAE,EAAEN,aAAa,EAAEF,YAAY,EAAEI,SAAS,EAAEL,aAAa,EAAEO,cAAc,EAAE0kB,KAAK,EAAEllB,UAAU,EAAEO,QAAQ,EAAE4mE,IAAI,EAAE1e,QAAQ,EAAC/+B,KAAK,EAAE;EAEpI,IAAI,CAAC6kB,WAAW,GAAG,IAAI;EACvB,IAAI,CAAC+nD,cAAc,GAAG,CAAC,CAAC,CAAC;EACzB,IAAI,CAACloD,aAAa,GAAG,KAAK;EAC1B,IAAI,CAACC,WAAW,GAAG,MAAM;EACzB,IAAI,CAAC8pE,eAAe,GAAG,KAAK;EAC5B,IAAI,CAAC7iB,eAAe,GAAG,KAAK,CAAC,CAAC;EAC9B,IAAI,CAAC8iB,gBAAgB,GAAG,KAAK;EAE7B,IAAI,CAAC/kD,oBAAoB,GAAG,UAAUT,KAAK,EAAEvb,OAAO,EAAEwb,KAAK,EAAE3lB,GAAG,EAAE;IAC9D,IAAIrtC,OAAO,CAAC2zD,SAAS,CAACtmB,GAAG,CAAC,EAAE;MAExB;;MAEA;MACA;MACO;MACP,IAAIvtC,EAAE,GAAG,IAAI;MACb,IAAI,OAAQutC,GAAI,IAAI,QAAQ,IAAIA,GAAG,CAAC/mC,MAAM,GAAG,CAAC,EAAE;QAC5C,IAAIkyF,GAAG,GAAGx0F,CAAC,CAACqpC,GAAG,CAAC;QAChB,IAAI2lB,KAAK,CAACwlD,YAAY,IAAI,KAAK,EAAE;UAC7BhgB,GAAG,CAACjnF,IAAI,CAAC,sBAAsB,CAAC,CAACpL,IAAI,CAAC,YAAY;YAC9C,IAAI6c,EAAE,GAAGhf,CAAC,CAAC,IAAI,CAAC,CAACsZ,GAAG,CAAC,WAAW,CAAC;YACjCtZ,CAAC,CAAC,IAAI,CAAC,CAACsZ,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;YAC5BtZ,CAAC,CAAC,IAAI,CAAC,CAAC6D,IAAI,CAAC,eAAe,EAAEmb,EAAE,CAAC;UACrC,CAAC,CAAC;QACN;QAEA,IAAI,CAACy1F,6BAA6B,CAACjgB,GAAG,CAAC;QACvC,IAAI,CAACkgB,yBAAyB,CAAClgB,GAAG,CAAC;QACnC,IAAI,CAACmgB,WAAW,CAACngB,GAAG,CAAC;QAErBj4F,aAAa,CAAC++E,yBAAyB,CAACkZ,GAAG,CAAC;QAC5C,IAAI,CAACogB,iBAAiB,CAACpgB,GAAG,CAAC;QAE3B14F,EAAE,GAAG8oD,QAAQ,CAAC4vC,GAAG,CAAC74E,IAAI,CAAC,CAAC,CAAC,CAACozC,KAAK,CAAC;MACpC,CAAC,MACI;QACD,IAAI1lB,GAAG,KAAK,EAAE,EAAE;UACZ9sC,aAAa,CAAC++E,yBAAyB,CAACjyC,GAAG,CAAC;UAC5C,IAAI,CAACurE,iBAAiB,CAACvrE,GAAG,CAAC;QAC/B;QAEAvtC,EAAE,GAAG8oD,QAAQ,CAACvb,GAAG,CAAC,CAAC0lB,KAAK,CAAC;MAC7B;MAEAvb,OAAO,CAAC73B,IAAI,CAAC,EAAE,CAAC;MAChB63B,OAAO,CAAC4jB,MAAM,CAACt7D,EAAE,CAAC;IACtB;EACJ,CAAC;EAED,IAAM+4G,UAAU,GAAG,SAAbA,UAAUA,CAAargB,GAAG,EAA4B;IAAA,IAA1BsgB,OAAO,GAAAznG,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,cAAc;IACtD,OAAQ,YAAY;MAChB,IAAI0nG,EAAE,GAAG/0G,CAAC,SAAA2N,MAAA,CAASmnG,OAAO,kCAA+B,CAAC;MAC1D,IAAIE,QAAQ,GAAGh1G,CAAC,CAAC,IAAI,CAAC;;MAEtB;MACAA,CAAC,CAAC,IAAI,CAAC,CAACi1G,SAAS,CAAC,iBAAiB,CAAC,CAAC9yG,IAAI,CAAC,YAAY;QAClD,IAAIqxC,OAAO,GAAGxzC,CAAC,CAAC,IAAI,CAAC,CAACk1G,MAAM,CAAC,CAAC;QAC9B,IAAIC,GAAG,GAAG,IAAI;QACd3hE,OAAO,CAACjmC,IAAI,CAAC,iBAAiB,CAAC,CAACpL,IAAI,CAAC,YAAY;UAC7CnC,CAAC,CAAC,IAAI,CAAC,CAACsZ,GAAG,CAAC,WAAW,EAAEtZ,CAAC,CAAC,IAAI,CAAC,CAAC6D,IAAI,CAAC,eAAe,CAAC,CAAC;QAC3D,CAAC,CAAC;QACFsxG,GAAG,GAAGn1G,CAAC,CAAC,IAAI,CAAC,CAAC6D,IAAI,CAAC,OAAO,CAAC;QAC3B,IAAIuxG,EAAE,GAAGp1G,CAAC,CAAC,cAAc,IAAE,CAAC,CAACm1G,GAAG,GAAGA,GAAG,GAAG,EAAE,CAAC,GAAC,UAAU,CAAC;QACxDC,EAAE,CAACh+C,MAAM,CAAC5jB,OAAO,CAAC;QAClBuhE,EAAE,CAAC39C,MAAM,CAACg+C,EAAE,CAAC;QACbA,EAAE,CAACrjG,IAAI,CAAC,CAAC,CAAC,CAAC;MACf,CAAC,CAAC;MAEFgjG,EAAE,CAAC39C,MAAM,CAACo9B,GAAG,CAACjnF,IAAI,CAAC,iBAAiB,CAAC,CAAC;MAEtCynG,QAAQ,CAACK,KAAK,CAACN,EAAE,CAAC;IACtB,CAAC;EACL,CAAC;;EAED;EACA,IAAI,CAACN,6BAA6B,GAAG,UAAUjgB,GAAG,EAAE;IAChDA,GAAG,CAACjnF,IAAI,CAAC,2FAA2F,CAAC,CAACpL,IAAI,CAAC,YAAY;MACnH,IAAI4yG,EAAE,GAAG/0G,CAAC,CAAC,+CAA+C,CAAC;MAC3D,IAAIg1G,QAAQ,GAAGh1G,CAAC,CAAC,IAAI,CAAC;;MAEtB;MACAA,CAAC,CAAC,IAAI,CAAC,CAACi1G,SAAS,CAAC,iBAAiB,CAAC,CAAC9yG,IAAI,CAAC,YAAY;QAClD,IAAIqxC,OAAO,GAAGxzC,CAAC,CAAC,IAAI,CAAC,CAACk1G,MAAM,CAAC,CAAC;QAC9BH,EAAE,CAAC39C,MAAM,CAAC5jB,OAAO,CAAC;MACtB,CAAC,CAAC;MAEFwhE,QAAQ,CAACK,KAAK,CAACN,EAAE,CAAC;IACtB,CAAC,CAAC;IAEFvgB,GAAG,CAACjnF,IAAI,CAAC,iEAAiE,CAAC,CAACpL,IAAI,CAAC,YAAY;MACzF,IAAInC,CAAC,CAAC,IAAI,CAAC,CAACoE,IAAI,CAAC,CAAC,KAAK,gDAAgD,EAAE;QACrEpE,CAAC,CAAC,IAAI,CAAC,CAACs1G,WAAW,CAAC,uHAAuH,CAAC;MAChJ;IACJ,CAAC,CAAC;IAGF9gB,GAAG,CAACjnF,IAAI,CAAC,8FAA8F,CAAC,CAACpL,IAAI,CAAC,YAAY;MACtHnC,CAAC,CAAC,IAAI,CAAC,CAAC6D,IAAI,CAAC,iBAAiB,EAAE,yDAAyD,CAAC;IAC9F,CAAC,CAAC;IAEF2wF,GAAG,CAACjnF,IAAI,CAAC,uDAAuD,CAAC,CAACpL,IAAI,CAAC,YAAY;MAC/E,IAAInC,CAAC,CAAC,IAAI,CAAC,CAACoE,IAAI,CAAC,CAAC,CAACmH,OAAO,CAAC,sCAAsC,CAAC,IAAI,CAAC,EAAE;QACrE,IAAIumC,GAAG,GAAG9xC,CAAC,CAAC,IAAI,CAAC,CAACoE,IAAI,CAAC,CAAC;QACxB0tC,GAAG,GAAGA,GAAG,CAACj2B,OAAO,CAAC,sCAAsC,EAAE,qBAAqB,CAAC;QAChF7b,CAAC,CAAC,IAAI,CAAC,CAACoE,IAAI,CAAC0tC,GAAG,CAAC;MACrB;IACJ,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAAC6iE,WAAW,GAAG,UAASngB,GAAG,EAAE;IAC7B,IAAM+gB,IAAI,GAAG,CAAC,sBAAsB,EAAE,wBAAwB,EAAE,kBAAkB,CAAC;IACnFA,IAAI,CAAC3sG,OAAO,CAAC,UAAAgI,CAAC,EAAI;MACd4jF,GAAG,CAACjnF,IAAI,2BAAAI,MAAA,CAA0BiD,CAAC,2BAAAjD,MAAA,CAAwBiD,CAAC,QAAI,CAAC,CAACzO,IAAI,CAAC0yG,UAAU,CAACrgB,GAAG,CAAC,CAAC;IAC3F,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACkgB,yBAAyB,GAAG,UAAUlgB,GAAG,EAAE;IAC5CA,GAAG,CAACjnF,IAAI,CAAC,2FAA2F,CAAC,CAACpL,IAAI,CAAC0yG,UAAU,CAACrgB,GAAG,EAAE,oBAAoB,CAAC,CAAC;IAEjJA,GAAG,CAACjnF,IAAI,CAAC,uDAAuD,CAAC,CAACpL,IAAI,CAAC,YAAY;MAC/E,IAAInC,CAAC,CAAC,IAAI,CAAC,CAACoE,IAAI,CAAC,CAAC,CAACmH,OAAO,CAAC,sCAAsC,CAAC,IAAI,CAAC,EAAE;QACrE,IAAIumC,GAAG,GAAG9xC,CAAC,CAAC,IAAI,CAAC,CAACoE,IAAI,CAAC,CAAC;QACxB0tC,GAAG,GAAGA,GAAG,CAACj2B,OAAO,CAAC,sCAAsC,EAAE,qBAAqB,CAAC;QAChF7b,CAAC,CAAC,IAAI,CAAC,CAACoE,IAAI,CAAC0tC,GAAG,CAAC;MACrB;IACJ,CAAC,CAAC;EAEN,CAAC;;EAED;EACA,IAAI,CAAC0jE,mBAAmB,GAAG,UAAUhrE,WAAW,EAAE1kC,IAAI,EAAE2vG,SAAS,EAAEC,UAAU,EAAE;IAC3E,IAAInwG,GAAG,GAAG;MACNmwG,UAAU,EAAEA,UAAU;MACtBC,QAAQ,EAAE7vG,IAAI;MACd2vG,SAAS,EAAEA,SAAS;MACpBprE,gBAAgB,EAAE,CAAC;MACnBle,aAAa,EAAE,IAAI;MACnBypF,kBAAkB,EAAE;IACxB,CAAC;IAED,IAAIprE,WAAW,IAAI,MAAM,IAAIA,WAAW,IAAI,OAAO,EAAE;MAAA,IAAAqrE,KAAA;MACjDtwG,GAAG,CAACilC,WAAW,GAAGA,WAAW;MAE7B,IAAI1kC,IAAI,EAAE;QACN,IAAIA,IAAI,CAACyF,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;UAC1BhG,GAAG,aAAU,GAAG,WAAW;UAC3BO,IAAI,GAAGA,IAAI,CAACgX,MAAM,CAAC,CAAC,CAAC;QACzB,CAAC,MACI,IAAIhX,IAAI,CAACyF,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;UAChChG,GAAG,aAAU,GAAG,SAAS;UACzBO,IAAI,GAAGA,IAAI,CAACgX,MAAM,CAAC,CAAC,CAAC;QACzB,CAAC,MACI,IAAIhX,IAAI,CAACyF,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;UAChChG,GAAG,aAAU,GAAG,KAAK;UACrBO,IAAI,GAAGA,IAAI,CAACgX,MAAM,CAAC,CAAC,CAAC;QACzB,CAAC,MAEG,MAAM,IAAIsmD,KAAK,CAAC,sBAAsB,CAAC;MAC/C;MAEA,IAAI54B,WAAW,IAAI,OAAO,EAAE;QACxB1kC,IAAI,GAAG2vG,SAAS,IAAI3vG,IAAI;MAC5B;MAEAP,GAAG,CAACotF,QAAQ,GAAG,KAAK;MACpBptF,GAAG,CAACmlC,WAAW,GAAG5kC,IAAI;MAEtB,IAAI,EAAA+vG,KAAA,GAAA/vG,IAAI,cAAA+vG,KAAA,uBAAJA,KAAA,CAAMtqG,OAAO,CAAC,MAAM,CAAC,KAAI,CAAC,EAAE;QAC5BhG,GAAG,CAACotF,QAAQ,GAAG,IAAI;QACnBptF,GAAG,CAAC8kC,gBAAgB,GAAG,CAAC;QACxB9kC,GAAG,CAAC4mB,aAAa,GAAG,IAAI;QACxB5mB,GAAG,CAACqwG,kBAAkB,GAAG,IAAI;MACjC;IACJ;IACA10G,OAAO,CAACC,GAAG,CAAC,2BAA2B,CAAC;IACxCD,OAAO,CAACC,GAAG,CAACoE,GAAG,CAAC;IAEhB,OAAOA,GAAG;EACd,CAAC;EAED,IAAI,CAACuwG,aAAa,GAAG,KAAK;EAC1B,IAAI,CAACC,qBAAqB,GAAG,KAAK;EAClC,IAAI,CAACC,iBAAiB,GAAG,KAAK;EAC9B,IAAI,CAACC,gBAAgB,GAAG,KAAK;EAC7B,IAAI,CAACC,oBAAoB,GAAG,KAAK;EACjC,IAAI,CAACC,cAAc,GAAG,KAAK;EAC3B,IAAI,CAACrkB,eAAe,GAAG,CAAC,CAAC;EAEzB,IAAItyE,IAAI,GAAG,IAAI;EACf,IAAI,CAACuyE,sBAAsB,GAAG,UAAU78E,GAAG,EAAE;IACzChU,OAAO,CAACC,GAAG,CAAC,0BAA0B,GAAGyyB,IAAI,CAACC,SAAS,CAAC3e,GAAG,CAAC,CAAC;IAC7D,IAAI,CAACsK,IAAI,CAACiyE,eAAe,IAAIjyE,IAAI,CAACgrB,WAAW,IAAI,MAAM,EAAE;IACzD,IAAI,CAAChrB,IAAI,CAACiyE,eAAe,IAAIjyE,IAAI,CAACgrB,WAAW,IAAI,OAAO,IACrDt1B,GAAG,CAACouC,QAAQ,IAAI,eAAe,IAC/BpuC,GAAG,CAACouC,QAAQ,IAAI,mBAAmB,IACnCpuC,GAAG,CAACouC,QAAQ,IAAI,mBAAmB,EAAE;IAExC,IAAI0uC,UAAU,GAAG,IAAI;IACrB,IAAIj7E,OAAO,GAAG,EAAE;IAEhB,QAAQ7B,GAAG,CAACouC,QAAQ;MAChB,KAAK,mBAAmB;MACxB,KAAK,gBAAgB;QACjB,IAAI,CAACwyD,aAAa,GAAG,KAAK;QAC1B,IAAGt2F,IAAI,CAACgrB,WAAW,IAAI,OAAO,EAAE;UAC5BhrB,IAAI,CAACiyE,eAAe,GAAG,KAAK;QAChC;QACA16E,OAAO,GAAGpa,cAAc,CAACe,SAAS,CAAC,qBAAqB,CAAC;QACzD;MACJ,KAAK,eAAe;QAChB,IAAI,CAACo4G,aAAa,GAAG,IAAI;QACzB,IAAGt2F,IAAI,CAACgrB,WAAW,IAAI,OAAO,EAAE;UAC5BhrB,IAAI,CAACiyE,eAAe,GAAG,IAAI;QAC/B;QACA;MACJ,KAAK,mBAAmB;QACpB,IAAI,CAACskB,qBAAqB,GAAG,KAAK;QAClC,IAAI,CAACC,iBAAiB,GAAG,KAAK;QAC9B,IAAGx2F,IAAI,CAACgrB,WAAW,IAAI,OAAO,EAAE;UAC5BhrB,IAAI,CAACiyE,eAAe,GAAG,IAAI;QAC/B;QACA;MAEJ,KAAK,uBAAuB;QACxB,IAAI,CAACskB,qBAAqB,GAAG,IAAI;QACjC,IAAI,CAACC,iBAAiB,GAAG,KAAK;QAC9B;MAEJ,KAAK,mBAAmB;QACpB,IAAI,CAACD,qBAAqB,GAAG,KAAK;QAClC,IAAI,CAACC,iBAAiB,GAAG,IAAI;QAC7Bj/F,OAAO,GAAGpa,cAAc,CAACe,SAAS,CAAC,gDAAgD,CAAC;QACpF;MAEJ,KAAK,kBAAkB;QACnB,IAAI,CAACu4G,gBAAgB,GAAG,IAAI;QAC5Bl/F,OAAO,GAAGpa,cAAc,CAACe,SAAS,CAAC,wBAAwB,CAAC;QAC5D;MAEJ,KAAK,mBAAmB;QACpB,IAAI,CAACu4G,gBAAgB,GAAG,KAAK;QAC7B,IAAGz2F,IAAI,CAACgrB,WAAW,IAAI,OAAO,EAAE;UAC5BhrB,IAAI,CAACiyE,eAAe,GAAG,IAAI;QAC/B;QACA;MAEJ,KAAK,yBAAyB;MAC9B,KAAK,yBAAyB;QAC1B;UACI,IAAI,CAACykB,oBAAoB,GAAG,KAAK;UACjC,IAAIjiE,MAAM,GAAG,IAAI,CAACiiE,oBAAoB,KAAK,IAAI,GAAG,IAAI,GAAG,OAAO;UAChEx5G,QAAQ,CAAC,YAAY;YACjBP,UAAU,CAAC+K,UAAU,CAAC,sBAAsB,EAAE+sC,MAAM,CAAC;UACzD,CAAC,CAAC;QACN;QACA;MAEJ,KAAK,sBAAsB;QACvB;UACI,IAAI,CAACiiE,oBAAoB,GAAG,IAAI;UAChC,IAAIjiE,MAAM,GAAG,IAAI,CAACiiE,oBAAoB,KAAK,IAAI,GAAG,IAAI,GAAG,OAAO;UAChEx5G,QAAQ,CAAC,YAAY;YACjBP,UAAU,CAAC+K,UAAU,CAAC,sBAAsB,EAAE+sC,MAAM,CAAC;UACzD,CAAC,CAAC;QACN;QACA;MAEJ,KAAK,oBAAoB;QACrB;UACI,IAAImiE,EAAE,GAAGlhG,GAAG,CAAC9U,IAAI;UACjB,IAAI,CAAC,CAAC8U,GAAG,CAAC9U,IAAI,EAAE;YACZg2G,EAAE,GAAGA,EAAE,CAACv6F,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACzBu6F,EAAE,GAAGA,EAAE,CAACv6F,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACzBu6F,EAAE,GAAGA,EAAE,CAAC3+F,IAAI,CAAC,CAAC;UAClB;UAEA/a,QAAQ,CAAC,YAAY;YACjBP,UAAU,CAAC+K,UAAU,CAAC,cAAc,EAAEkvG,EAAE,CAAC;UAC7C,CAAC,CAAC;QACN;QACA;MAEJ,KAAK,gBAAgB;QACjB;UACI,IAAI,CAACD,cAAc,GAAG,IAAI;UAE1B,IAAIliE,MAAM,GAAG,IAAI,CAACkiE,cAAc,KAAK,KAAK,GAAG,IAAI,GAAG,OAAO;UAC3Dz5G,QAAQ,CAAC,YAAY;YACjBP,UAAU,CAAC+K,UAAU,CAAC,mBAAmB,EAAE+sC,MAAM,CAAC;UACtD,CAAC,CAAC;QACN;QACA+9C,UAAU,GAAG,KAAK;QAClB;MAEJ,KAAK,iBAAiB;QAClB;UACI,IAAI,CAACmkB,cAAc,GAAG,KAAK;UAE3B,IAAIliE,MAAM,GAAG,IAAI,CAACkiE,cAAc,KAAK,KAAK,GAAG,IAAI,GAAG,OAAO;UAC3Dz5G,QAAQ,CAAC,YAAY;YACjBP,UAAU,CAAC+K,UAAU,CAAC,mBAAmB,EAAE+sC,MAAM,CAAC;UACtD,CAAC,CAAC;QACN;QACA+9C,UAAU,GAAG,KAAK;QAClB;MAEJ,KAAK,cAAc;QACfA,UAAU,GAAG,KAAK;QAClB;MAEJ;QACIA,UAAU,GAAG,KAAK;IAC1B;IAEA,IAAIA,UAAU,EAAE;MACZ,IAAI/9C,MAAM,GAAI,CAAC,IAAI,CAAC6hE,aAAa,IAAI,IAAI,CAACG,gBAAgB,IAAI,IAAI,CAACD,iBAAiB,GAAI,OAAO,GAClF,IAAI,CAACD,qBAAqB,GAAG,SAAS,GAAG,IAAK;MAE3D,IAAI9hE,MAAM,KAAK,OAAO,IAAIl9B,OAAO,EAAE;QAC/B1a,YAAY,CAACiE,SAAS,CAACyW,OAAO,CAAC;MACnC;MAEAra,QAAQ,CAAC,YAAY;QACjBP,UAAU,CAAC+K,UAAU,CAAC,sBAAsB,EAAE+sC,MAAM,CAAC;MACzD,CAAC,CAAC;IACN;EACJ,CAAC;EAED14C,MAAM,CAACskF,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAACkS,sBAAsB,CAAC;EAExE,IAAI,CAAC5lE,aAAa,GAAG,YAAY;IAC7B,IAAI3M,IAAI,GAAG,IAAI;IACf,OAAO,IAAI,CAAC62F,oBAAoB,CAAC,CAAC,CAACn2G,IAAI,CAAC,UAAUiyF,QAAQ,EAAE;MACxD,IAAItvE,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBmb,QAAQ,CAAClb,OAAO,CAAC6X,IAAI,CAACsyE,eAAe,CAAC3lE,aAAa,CAAC;MACpD,OAAOtJ,QAAQ,CAACjb,OAAO;IAC3B,CAAC,CAAC;EACN,CAAC;;EAED;EACA,IAAI,CAACqqF,UAAU,GAAG,YAAY;IAC1B/wF,OAAO,CAACC,GAAG,CAAC,yBAAyB,CAAC;IACtC,IAAIqe,IAAI,GAAG,IAAI;IAEf,IAAIqD,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,OAAO,IAAI,CAAC2uG,oBAAoB,CAAC,CAAC,CAACn2G,IAAI,CAAC,UAAUiyF,QAAQ,EAAE;MACxD,OAAO3yE,IAAI,CAAC4yE,kBAAkB,CAACD,QAAQ,CAAC;IAC5C,CAAC,CAAC,CACDjyF,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBsd,QAAQ,CAAClb,OAAO,CAACpC,GAAG,CAAC;IACzB,CAAC,EACD,UAAUlF,GAAG,EAAE;MACXwiB,QAAQ,CAACC,MAAM,CAACziB,GAAG,CAAC;IACxB,CAAC,CAAC;IAEF;AAAwB;EAC5B,CAAC;EAED,IAAI,CAAC+xF,kBAAkB,GAAG,UAAUD,QAAQ,EAAE;IAC1C,IAAI3yE,IAAI,GAAG,IAAI;IACf,IAAIqD,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAAC,IAAI,CAAC+pF,eAAe,EAAE;MACvB5uE,QAAQ,CAAClb,OAAO,CAACwqF,QAAQ,CAAC;MAC1B,OAAOtvE,QAAQ,CAACjb,OAAO;IAC3B;IAEA,IAAI,CAAC4X,IAAI,CAAC+qB,aAAa,IAAInuC,aAAa,CAAC2L,QAAQ,EAAE;MAC/C,IAAIoqF,QAAQ,CAAC3nD,WAAW,IAAI,MAAM,IAAI2nD,QAAQ,CAAC3nD,WAAW,IAAI,OAAO,EAAE;QACnEtpC,OAAO,CAACC,GAAG,CAAC,0BAA0B,CAAC;QACvC,IAAI,CAACswF,eAAe,GAAG,KAAK;QAC5B5uE,QAAQ,CAAClb,OAAO,CAACwqF,QAAQ,CAAC;MAC9B,CAAC,MACI,IAAGA,QAAQ,CAAC3nD,WAAW,IAAI,OAAO,EAAE;QACrCtpC,OAAO,CAACC,GAAG,CAAC,sBAAsB,CAAC;QACnC5F,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAACy2E,eAAe,CACtC,UAAUj2G,GAAG,EAAEsjB,MAAM,EAAE;UACnB,IAAItjB,GAAG,EAAE;YACLa,OAAO,CAACC,GAAG,CAAC,gBAAgB,CAAC;YAC7B0hB,QAAQ,CAACC,MAAM,CAACziB,GAAG,CAAC;UACxB,CAAC,MACI;YACDa,OAAO,CAACC,GAAG,CAAC,wBAAwB,CAAC;YACrCqe,IAAI,CAACiyE,eAAe,GAAG,KAAK;YAC5B5uE,QAAQ,CAAClb,OAAO,CAACwqF,QAAQ,CAAC;UAC9B;QACJ,CAAC,CAAC;MACV,CAAC,MACI,IAAGA,QAAQ,CAAC3nD,WAAW,IAAI,MAAM,EAAE;QACpCtpC,OAAO,CAACC,GAAG,CAAC,sBAAsB,CAAC;QACnC5F,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAACoyD,UAAU,CACjC,UAAU5xF,GAAG,EAAEsjB,MAAM,EAAE;UAEnB,IAAItjB,GAAG,EAAE;YACLa,OAAO,CAACC,GAAG,CAAC,gBAAgB,CAAC;YAC7B0hB,QAAQ,CAACC,MAAM,CAACziB,GAAG,CAAC;UACxB,CAAC,MACI;YACDa,OAAO,CAACC,GAAG,CAAC,wBAAwB,CAAC;YACrCqe,IAAI,CAACiyE,eAAe,GAAG,KAAK;YAC5B5uE,QAAQ,CAAClb,OAAO,CAACwqF,QAAQ,CAAC;UAC9B;QACJ,CAAC,CAAC;MACV;MAEA,OAAOtvE,QAAQ,CAACjb,OAAO;IAC3B,CAAC,MACI;MACD1G,OAAO,CAACC,GAAG,CAAC,qCAAqC,CAAC;MAClD0hB,QAAQ,CAAClb,OAAO,CAACwqF,QAAQ,CAAC;IAC9B;IAEA,OAAOtvE,QAAQ,CAACjb,OAAO;EAC3B,CAAC;EAED,IAAI,CAACyqF,eAAe,GAAG,UAAUF,QAAQ,EAAE;IACvC,IAAItvE,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI8X,IAAI,CAACiyE,eAAe,EAAE;MACtB5uE,QAAQ,CAAClb,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOkb,QAAQ,CAACjb,OAAO;IAC3B;IAEA,IAAI,CAAC4X,IAAI,CAAC+qB,aAAa,IAAInuC,aAAa,CAAC2L,QAAQ,EAAE;MAC/C,IAAIoqF,QAAQ,CAAC3nD,WAAW,IAAI,MAAM,IAAI2nD,QAAQ,CAAC3nD,WAAW,IAAI,OAAO,EAAE;QACnEtpC,OAAO,CAACC,GAAG,CAAC,0BAA0B,CAAC;QACvCqe,IAAI,CAACiyE,eAAe,GAAG,IAAI;QAC3B5uE,QAAQ,CAAClb,OAAO,CAAC;UAAEssC,MAAM,EAAE;QAAU,CAAC,CAAC;MAC3C,CAAC,MACI,IAAGk+C,QAAQ,CAAC3nD,WAAW,IAAI,MAAM,EAAE;QACpC,IAAG,CAAC2nD,QAAQ,CAACznD,WAAW,EAAE;UACtBlrB,IAAI,CAACiyE,eAAe,GAAG,KAAK;UAC5B5uE,QAAQ,CAACC,MAAM,CAAC,yBAAyB,CAAC;UAC1C,OAAOD,QAAQ,CAACjb,OAAO;QAC3B;QACA1G,OAAO,CAACC,GAAG,CAAC,mBAAmB,CAAC;QAChCqe,IAAI,CAACiyE,eAAe,GAAG,IAAI,CAAC,CAAC;QAC7Bl2F,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAACyyD,OAAO,CAAC9yE,IAAI,CAACkrB,WAAW,EAC/CynD,QAAQ,CAACyjB,kBAAkB,KAAK,IAAI,EACpCp2F,IAAI,CAAC+2F,SAAS,EACd/2F,IAAI,CAACsyE,eAAe,CAAC0kB,YAAY;QACrD;QACoB,UAAUn2G,GAAG,EAAEsjB,MAAM,EAAE;UACnB,IAAItjB,GAAG,EAAE;YACLa,OAAO,CAACC,GAAG,CAAC,yBAAyB,CAAC;YACtCqe,IAAI,CAACiyE,eAAe,GAAG,KAAK;YAE5B5uE,QAAQ,CAACC,MAAM,CAACziB,GAAG,CAAC;UACxB,CAAC,MACI;YACD,IAAIsjB,MAAM,KAAK,IAAI,IAAK,CAAC,CAACA,MAAM,IAAI,OAAQA,MAAM,CAAC2/B,QAAS,IAAI,QAAS,EAAE;cACvEpiD,OAAO,CAACC,GAAG,CAAC,qBAAqB,CAAC;cAClCqe,IAAI,CAACiyE,eAAe,GAAG,IAAI;cAC3B5uE,QAAQ,CAAClb,OAAO,CAACgc,MAAM,CAAC;YAC5B,CAAC,MACI;cACDziB,OAAO,CAACC,GAAG,CAAC,yBAAyB,CAAC;cACtCqe,IAAI,CAACiyE,eAAe,GAAG,KAAK;cAE5B5uE,QAAQ,CAACC,MAAM,CAAC,SAAS,CAAC;YAC9B;UACJ;QACJ,CAAC,CAAC;MACV,CAAC,MACI,IAAGqvE,QAAQ,CAAC3nD,WAAW,IAAI,OAAO,EAAE;QACrC,IAAG,CAAC2nD,QAAQ,CAACznD,WAAW,EAAE;UACtBlrB,IAAI,CAACiyE,eAAe,GAAG,KAAK;UAC5B5uE,QAAQ,CAACC,MAAM,CAAC,yBAAyB,CAAC;UAC1C,OAAOD,QAAQ,CAACjb,OAAO;QAC3B;QACA,IAAI,CAAC4X,IAAI,CAACkrB,WAAW,EAAE;UACnBlrB,IAAI,CAACiyE,eAAe,GAAG,KAAK;UAC5B5uE,QAAQ,CAACC,MAAM,CAAC,8BAA8B,CAAC;UAC/C,OAAOD,QAAQ,CAACjb,OAAO;QAC3B;QACA4X,IAAI,CAACiyE,eAAe,GAAG,IAAI,CAAC,CAAC;QAC7Bl2F,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAAC42E,YAAY,CAACj3F,IAAI,CAACkrB,WAAW,EACpDlrB,IAAI,CAACsyE,eAAe,CAACrnD,YAAY,EACjC,UAAUpqC,GAAG,EAAEsjB,MAAM,EAAE;UACnB,IAAItjB,GAAG,EAAE;YACLa,OAAO,CAACC,GAAG,CAAC,yBAAyB,CAAC;YACtCqe,IAAI,CAACiyE,eAAe,GAAG,KAAK;YAC5B5uE,QAAQ,CAACC,MAAM,CAACziB,GAAG,CAAC;UACxB,CAAC,MACI;YACD,IAAIsjB,MAAM,KAAK,IAAI,IAAK,CAAC,CAACA,MAAM,IAAI,OAAQA,MAAM,CAAC2/B,QAAS,IAAI,QAAS,EAAE;cACvEpiD,OAAO,CAACC,GAAG,CAAC,qBAAqB,CAAC;cAClCqe,IAAI,CAACiyE,eAAe,GAAG,IAAI;cAC3B5uE,QAAQ,CAAClb,OAAO,CAACgc,MAAM,CAAC;YAC5B,CAAC,MACI;cACDziB,OAAO,CAACC,GAAG,CAAC,yBAAyB,CAAC;cACtCqe,IAAI,CAACiyE,eAAe,GAAG,KAAK;cAC5B5uE,QAAQ,CAACC,MAAM,CAAC,SAAS,CAAC;YAC9B;UACJ;QACJ,CAAC,CAAC;MACV;MAEA,OAAOD,QAAQ,CAACjb,OAAO;IAC3B,CAAC,MACI;MACD1G,OAAO,CAACC,GAAG,CAAC,kCAAkC,CAAC;MAC/C0hB,QAAQ,CAAClb,OAAO,CAAC,IAAI,CAAC;IAC1B;IAEA,OAAOkb,QAAQ,CAACjb,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC6N,SAAS,GAAG,UAAUihG,SAAS,EAAE;IAClC,OAAO,IAAI,CAACL,oBAAoB,CAAC,CAAC,CAACn2G,IAAI,CAAC,UAAUiyF,QAAQ,EAAE;MACxD,IAAIA,QAAQ,CAACyjB,kBAAkB,KAAK,IAAI,IAAIzjB,QAAQ,CAACoiB,gBAAgB,KAAK,IAAI,EAAE;QAC5E,OAAO/0F,IAAI,CAACyyE,UAAU,CAAC,CAAC,CAAC/xF,IAAI,CAAC,UAAUqF,GAAG,EAAE;UAAE,OAAOia,IAAI,CAAC8yE,OAAO,CAACokB,SAAS,CAAC;QAAE,CAAC,CAAC;MACrF,CAAC,MAEG,OAAOl3F,IAAI,CAAC8yE,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC;EACN,CAAC;;EAGD;EACA;EACA,IAAI,CAACA,OAAO,GAAG,UAAUokB,SAAS,EAAE;IAChC,IAAI7zF,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBxG,OAAO,CAACC,GAAG,CAAC,sBAAsB,CAAC;IAEnC,IAAI,CAACk1G,oBAAoB,CAACK,SAAS,CAAC,CAACx2G,IAAI,CAAC,UAAUiyF,QAAQ,EAAE;MAC1DjxF,OAAO,CAACC,GAAG,CAAC,oCAAoC,CAAC;MACjD,OAAOqe,IAAI,CAAC6yE,eAAe,CAACF,QAAQ,CAAC;IACzC,CAAC,CAAC,CAACjyF,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACnBsd,QAAQ,CAAClb,OAAO,CAACpC,GAAG,CAAC;IACzB,CAAC,EACD,UAAUlF,GAAG,EAAE;MACXa,OAAO,CAACC,GAAG,CAAC,qCAAqC,CAAC;MAClD0hB,QAAQ,CAACC,MAAM,CAAC,KAAK,CAAC;;MAEtB;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;IACJ,CAAC,CAAC;IAEF,OAAOD,QAAQ,CAACjb,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC+uG,yBAAyB,GAAG,UAAUC,aAAa,EAAE;IACtDp3F,IAAI,GAAG,IAAI;IACX,IAAIja,GAAG,GAAG,EAAE;IACZ,IAAIsd,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAGzB,IAAI,CAACtL,aAAa,CAAC2L,QAAQ,EAAE;MACzB8a,QAAQ,CAAClb,OAAO,CAACpC,GAAG,CAAC;IACzB,CAAC,MACI,IAAIqxG,aAAa,KAAK,OAAO,EAAE;MAChCr7G,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAACg3E,kBAAkB,CAAC,UAAUx2G,GAAG,EAAEsjB,MAAM,EAAE;QACjE,IAAItjB,GAAG,EAAE;UACLa,OAAO,CAACC,GAAG,CAAC,4BAA4B,GAAGd,GAAG,CAAC;UAC/CwiB,QAAQ,CAAClb,OAAO,CAACpC,GAAG,CAAC;QACzB,CAAC,MACI;UACDrE,OAAO,CAACC,GAAG,CAAC,6BAA6B,GAAGyyB,IAAI,CAACC,SAAS,CAAClQ,MAAM,CAAC,CAAC;UACnE,IAAIA,MAAM,EAAE;YACR3jB,CAAC,CAACmC,IAAI,CAACwhB,MAAM,EAAE,UAAUjT,CAAC,EAAE+M,CAAC,EAAE;cAC3BlY,GAAG,CAAChD,IAAI,CAACid,IAAI,CAACg2F,mBAAmB,CAACoB,aAAa,EACZ,CAAC,CAACn5F,CAAC,CAACpX,MAAM,GAAGoX,CAAC,CAACpX,MAAM,GAAGoX,CAAC,CAACq5F,UAAU,EACpC,CAAC,CAACr5F,CAAC,CAACq5F,UAAU,GAAGr5F,CAAC,CAACq5F,UAAU,GAAG,IAAI,EAAGr5F,CAAC,CAACi4F,UAAU,CAAC,CAAC;YAC5F,CAAC,CAAC;UACN;UAEA7yF,QAAQ,CAAClb,OAAO,CAACpC,GAAG,CAAC;UACrBrE,OAAO,CAACC,GAAG,CAAC,uBAAuB,GAAGyyB,IAAI,CAACC,SAAS,CAACtuB,GAAG,CAAC,CAAC;QAC9D;MACJ,CAAC,CAAC;IACN,CAAC,MACI;MACDhK,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAACk3E,aAAa,CAAC,KAAK,EAAE,UAAU12G,GAAG,EAAEsjB,MAAM,EAAE;QACnE,IAAItjB,GAAG,EAAE;UACLa,OAAO,CAACC,GAAG,CAAC,uBAAuB,GAAGd,GAAG,CAAC;UAC1CwiB,QAAQ,CAAClb,OAAO,CAACpC,GAAG,CAAC;QACzB,CAAC,MACI;UACDrE,OAAO,CAACC,GAAG,CAAC,wBAAwB,GAAGyyB,IAAI,CAACC,SAAS,CAAClQ,MAAM,CAAC,CAAC;UAC9D,IAAIA,MAAM,EAAE;YACR3jB,CAAC,CAACmC,IAAI,CAACwhB,MAAM,EAAE,UAAUjT,CAAC,EAAE+M,CAAC,EAAE;cAC3BlY,GAAG,CAAChD,IAAI,CAACid,IAAI,CAACg2F,mBAAmB,CAACoB,aAAa,EACZ,CAAC,CAACn5F,CAAC,CAAC3X,IAAI,GAAG2X,CAAC,CAAC3X,IAAI,GAAG2X,CAAC,CAACk4F,QAAQ,EAC9B,CAAC,CAACl4F,CAAC,CAACg4F,SAAS,GAAGh4F,CAAC,CAACg4F,SAAS,GAAG,IAAI,EAAGh4F,CAAC,CAACi4F,UAAU,CAAC,CAAC;YAC1F,CAAC,CAAC;UACN;UAEA7yF,QAAQ,CAAClb,OAAO,CAACpC,GAAG,CAAC;UACrBrE,OAAO,CAACC,GAAG,CAAC,uBAAuB,GAAGyyB,IAAI,CAACC,SAAS,CAACtuB,GAAG,CAAC,CAAC;QAC9D;MACJ,CAAC,CAAC;IACN;IAEA,OAAOsd,QAAQ,CAACjb,OAAO;EAC3B,CAAC;EAED,IAAI,CAACyuG,oBAAoB,GAAG,UAAUW,cAAc,EAAE;IAE1D;IACQ,IAAI7kB,QAAQ,GAAG/1F,aAAa,CAAC+tC,kBAAkB,CAAC,IAAI,CAAC;IAErD,IAAI,CAACoqE,gBAAgB,GAAG,KAAK,CAAC;IAC9BpiB,QAAQ,CAACoiB,gBAAgB,GAAG,IAAI,CAACA,gBAAgB;IAEjD,IAAIyC,cAAc,KAAK,IAAI,EACvB7kB,QAAQ,CAACyjB,kBAAkB,GAAG,KAAK;IAEvC,IAAI,CAAC9jB,eAAe,GAAGK,QAAQ;IAE/B,IAAI/1F,aAAa,CAACX,MAAM,IAAI,IAAI,CAAC8uC,aAAa,IAAInuC,aAAa,CAAC8oB,UAAU,EAAE;MACxE,IAAI,CAACusE,eAAe,GAAG,IAAI;IAC/B;IAEA,IAAI,CAACU,QAAQ,EAAE;MACX,IAAItvE,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBmb,QAAQ,CAACC,MAAM,CAAC,0BAA0B,CAAC;MAC3C,OAAOD,QAAQ,CAACjb,OAAO;IAC3B;IAEA,IAAI,CAAC6qF,cAAc,GAAGN,QAAQ,CAAC9nD,gBAAgB;IAC/C,IAAI,CAACC,kBAAkB,GAAG6nD,QAAQ,CAAC7nD,kBAAkB;IACrD,IAAI,CAACC,aAAa,GAAG4nD,QAAQ,CAAC5nD,aAAa;IAC3C,IAAI,CAACC,WAAW,GAAG2nD,QAAQ,CAAC3nD,WAAW;IACvC,IAAI,CAAC+rE,SAAS,GAAGpkB,QAAQ,CAACQ,QAAQ,KAAK,IAAI,GAAG,UAAU,GAAG,UAAU;IAErEzxF,OAAO,CAACC,GAAG,CAAC,WAAW,GAAGyyB,IAAI,CAACC,SAAS,CAACs+D,QAAQ,CAAC,CAAC;IAEnD,IAAIh4B,GAAG,GAAG,IAAI,CAAC88C,WAAW;IAE1B,IAAI,CAAC76G,aAAa,CAACX,MAAM,EAAE;MAEvB,IAAIW,aAAa,CAACunC,QAAQ,IAAInkB,IAAI,CAACgrB,WAAW,IAAI,QAAQ,EACtD2vB,GAAG,GAAG,IAAI,CAAC+8C,iBAAiB,CAAC,KAE7B,IAAI13F,IAAI,CAACgrB,WAAW,IAAI,MAAM,EAC1B2vB,GAAG,GAAG,IAAI,CAACg9C,eAAe;MAC9B,IAAI33F,IAAI,CAACgrB,WAAW,IAAI,OAAO,EAC3B2vB,GAAG,GAAG,IAAI,CAACi9C,gBAAgB;IACvC;IAGA,OAAOj9C,GAAG,CAAC,IAAI,EAAEg4B,QAAQ,CAAC;EAC9B,CAAC;EAED,IAAI,CAAC9lE,cAAc,GAAG,YAAY;IAC9B,IAAI7M,IAAI,GAAG,IAAI;IACf,IAAI,CAACA,IAAI,CAACsyE,eAAe,IAAI,CAACtyE,IAAI,CAACsyE,eAAe,CAACpnD,WAAW,EAAE;MAC5D,IAAI7nB,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBxG,OAAO,CAACC,GAAG,CAAC,yBAAyB,CAAC;MACtC0hB,QAAQ,CAAClb,OAAO,CAAC;QAAEssC,MAAM,EAAE;MAAU,CAAC,CAAC;MACvC,OAAOpxB,QAAQ,CAACjb,OAAO;IAC3B;IAEA,OAAO,IAAI,CAACyuG,oBAAoB,CAAC,CAAC,CACjCn2G,IAAI,CAAC,YAAY;MACd,IAAI2iB,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAEzB,IAAI,CAAC8X,IAAI,CAAC+qB,aAAa,IAAInuC,aAAa,CAAC2L,QAAQ,EAAE;QAC/C,IAAI,CAACyX,IAAI,CAACsyE,eAAe,CAAC3lE,aAAa,IAAK/vB,aAAa,CAACunC,QAAQ,IAAInkB,IAAI,CAACgrB,WAAW,IAAI,QAAS,EAAE;UACjGtpC,OAAO,CAACC,GAAG,CAAC,yBAAyB,CAAC;UACtC0hB,QAAQ,CAAClb,OAAO,CAAC;YAAEssC,MAAM,EAAE;UAAU,CAAC,CAAC;QAC3C,CAAC,MACI;UACD,IAAIz0B,IAAI,CAACgrB,WAAW,IAAI,MAAM,EAAE;YAC5BjvC,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAACxT,cAAc,CAAC7M,IAAI,CAACkrB,WAAW,EACtDlrB,IAAI,CAACsyE,eAAe,CAAC0kB,YAAY,EACjCh3F,IAAI,CAACsyE,eAAe,CAACulB,SAAS,EAC9B,UAAUh3G,GAAG,EAAEsjB,MAAM,EAAE;cACnB,IAAItjB,GAAG,EAAE;gBACLa,OAAO,CAACC,GAAG,CAAC,4BAA4B,GAAGyyB,IAAI,CAACC,SAAS,CAACxzB,GAAG,CAAC,CAAC;gBAC/DL,CAAC,CAACO,SAAS,CAAC,CAAC;gBACblE,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,wCAAwC,CAAC,GAAG2C,GAAG,EAAE,YAAY;kBACzGL,CAAC,CAACC,OAAO,CAAC,CAAC;kBACX4iB,QAAQ,CAAClb,OAAO,CAACtH,GAAG,CAAC;gBACzB,CAAC,CAAC;cACN,CAAC,MACI;gBACDa,OAAO,CAACC,GAAG,CAAC,qBAAqB,CAAC;gBAClC0hB,QAAQ,CAAClb,OAAO,CAACgc,MAAM,CAAC;cAC5B;YACJ,CAAC,CAAC;UACV,CAAC,MACI,IAAInE,IAAI,CAACgrB,WAAW,IAAI,OAAO,EAAE;YAClCjvC,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAACy3E,mBAAmB,CAAC93F,IAAI,CAACkrB,WAAW,EAC3DlrB,IAAI,CAACsyE,eAAe,CAACrnD,YAAY,EACjC,UAAUpqC,GAAG,EAAEsjB,MAAM,EAAE;cACnB,IAAItjB,GAAG,EAAE;gBACLa,OAAO,CAACC,GAAG,CAAC,4BAA4B,GAAGyyB,IAAI,CAACC,SAAS,CAACxzB,GAAG,CAAC,CAAC;gBAC/DL,CAAC,CAACO,SAAS,CAAC,CAAC;gBACblE,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,wCAAwC,CAAC,GAAG2C,GAAG,EAAE,YAAY;kBACzGL,CAAC,CAACC,OAAO,CAAC,CAAC;kBACX4iB,QAAQ,CAAClb,OAAO,CAACtH,GAAG,CAAC;gBACzB,CAAC,CAAC;cACN,CAAC,MACI;gBACDa,OAAO,CAACC,GAAG,CAAC,qBAAqB,CAAC;gBAClC0hB,QAAQ,CAAClb,OAAO,CAACgc,MAAM,CAAC;cAC5B;YACJ,CAAC,CAAC;UACV;QACJ;QAEA,OAAOd,QAAQ,CAACjb,OAAO;MAC3B,CAAC,MACI;QACD1G,OAAO,CAACC,GAAG,CAAC,iCAAiC,CAAC;QAC9C0hB,QAAQ,CAAClb,OAAO,CAAC,IAAI,CAAC;MAC1B;MAEA,OAAOkb,QAAQ,CAACjb,OAAO;IAE3B,CAAC,CAAC;EAEN,CAAC;EAED,IAAI,CAAC2vG,sBAAsB,GAAG,YAAY;IACtC,IAAI/3F,IAAI,GAAG,IAAI;IAEf,OAAO,IAAI,CAAC62F,oBAAoB,CAAC,CAAC,CAC7Bn2G,IAAI,CAAC,UAAUiyF,QAAQ,EAAE;MACtB,IAAItvE,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAEzB,IAAI,CAAC8X,IAAI,CAAC+qB,aAAa,IAAInuC,aAAa,CAAC2L,QAAQ,EAAE;QAC/C,IAAI3L,aAAa,CAACunC,QAAQ,IAAIwuD,QAAQ,CAAC3nD,WAAW,IAAI,QAAQ,EAAE;UAC5DtpC,OAAO,CAACC,GAAG,CAAC,0BAA0B,CAAC;UACvC0hB,QAAQ,CAAClb,OAAO,CAAC;YAAEssC,MAAM,EAAE;UAAU,CAAC,CAAC;QAC3C,CAAC,MAEG,IAAIk+C,QAAQ,CAAC3nD,WAAW,IAAI,OAAO,EAAE;UACjCjvC,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAAC23E,gBAAgB,CAACh4F,IAAI,CAACkrB,WAAW,EAAElrB,IAAI,CAACirB,YAAY,EAC3E,UAAUpqC,GAAG,EAAEsjB,MAAM,EAAE;YACnB,IAAItjB,GAAG,EAAE;cACLa,OAAO,CAACC,GAAG,CAAC,0BAA0B,CAAC;cACvC0hB,QAAQ,CAACC,MAAM,CAACziB,GAAG,CAAC;YACxB,CAAC,MACI;cACDa,OAAO,CAACC,GAAG,CAAC,4BAA4B,CAAC;cACzC0hB,QAAQ,CAAClb,OAAO,CAACgc,MAAM,CAAC;YAC5B;UACJ,CAAC,CAAC;QACV,CAAC,MACI;UACDpoB,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAAC43E,WAAW,CAACj4F,IAAI,CAACkrB,WAAW,EAAElrB,IAAI,CAAC+2F,SAAS,EACnE,UAAUl2G,GAAG,EAAEsjB,MAAM,EAAE;YACnB,IAAItjB,GAAG,EAAE;cACLa,OAAO,CAACC,GAAG,CAAC,wBAAwB,CAAC;cACrC0hB,QAAQ,CAACC,MAAM,CAACziB,GAAG,CAAC;YACxB,CAAC,MACI;cACDa,OAAO,CAACC,GAAG,CAAC,0BAA0B,CAAC;cACvC0hB,QAAQ,CAAClb,OAAO,CAACgc,MAAM,CAAC;YAC5B;UACJ,CAAC,CAAC;QACV;QAEJ,OAAOd,QAAQ,CAACjb,OAAO;MAC3B,CAAC,MACI;QACD1G,OAAO,CAACC,GAAG,CAAC,sCAAsC,CAAC;QACnD0hB,QAAQ,CAAClb,OAAO,CAAC,IAAI,CAAC;MAC1B;MAEA,OAAOkb,QAAQ,CAACjb,OAAO;IAE3B,CAAC,CAAC;EACV,CAAC;EAED,IAAI,CAAC8vG,SAAS,GAAG,YAAY;IACzB,IAAIl4F,IAAI,GAAG,IAAI;IACf,IAAIm1C,EAAE,GAAG,wCAAwC;IACjD,OAAO,IAAI,CAACgjD,oBAAoB,CAAC33G,CAAC,CAAC20D,EAAE,CAAC,CAAC;EAC3C,CAAC;;EAED;;EAEA,IAAI,CAACijD,kBAAkB,GAAG,EAAE;;EAE5B;EACA;EACA;EACA,IAAI,CAACC,WAAW,GAAG,IAAI;EAEvB,IAAI,CAACC,oBAAoB,GAAG,YAAY;IACpC,IAAI,CAACF,kBAAkB,GAAG,EAAE;IAC5B,IAAI,CAACC,WAAW,GAAG,CAAC;EACxB,CAAC;EAED,IAAI,CAACE,sBAAsB,GAAG,YAAY;IACtC,IAAI,CAACF,WAAW,GAAG,CAAC;EACxB,CAAC;EAED,IAAI,CAACG,qBAAqB,GAAG,YAAY;IACrC,IAAI,CAACH,WAAW,GAAG,IAAI;IACvB,IAAI,CAACD,kBAAkB,GAAG,EAAE;EAChC,CAAC;EAED,IAAI,CAACD,oBAAoB,GAAG,UAAU77G,EAAE,EAAEsd,KAAK,EAAE;IAC7C,IAAI,IAAI,CAACy+F,WAAW,KAAK,CAAC,IAAI,EAAEz7G,aAAa,CAACX,MAAM,IAAI,CAAC,IAAI,CAAC8uC,aAAa,CAAC,EAAE;MAC1E;MACA;MACA,IAAIyoD,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAClBsrF,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;MACf,IAAIH,EAAE,GAAGwrF,CAAC,CAACprF,OAAO;MAClB,IAAI4X,IAAI,GAAG,IAAI;MAEfxjB,OAAO,CAAC4M,OAAO,CAAC,IAAI,CAACgvG,kBAAkB,EAAE,UAAUn6F,CAAC,EAAE;QAClD,IAAI,CAAC,CAACA,CAAC,IAAI,CAAC,CAACA,CAAC,CAACrd,IAAI,IAAIqd,CAAC,CAACrd,IAAI,CAACkC,MAAM,GAAG,CAAC,EAAE;UACtCkF,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,UAASqF,GAAG,EAAC;YACtB,OAAOia,IAAI,CAACy4F,4BAA4B,CAACx6F,CAAC,CAACrd,IAAI,CAAC,CAAC,CAAC,EAAEqd,CAAC,CAACrE,KAAK,CAAC;UAChE,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;MAEF,OAAO5R,EAAE;IACb,CAAC,MAEG,OAAO,IAAI,CAACywG,4BAA4B,CAACn8G,EAAE,EAAEsd,KAAK,CAAC;EAC3D,CAAC;EAED,IAAI,CAACw7F,iBAAiB,GAAG,UAAU94G,EAAE,EAAEsd,KAAK,EAAE;IAC1C,IAAI8+F,QAAQ,GAAG,IAAI;IACnB;IACA,IAAI/lB,QAAQ,GAAG,CAAC,CAAC;IACjBr2F,EAAE,CAACyR,IAAI,CAAC,oBAAoB,CAAC,CAACpL,IAAI,CAAC,YAAY;MAC3C,IAAIsb,CAAC,GAAGzd,CAAC,CAAC,IAAI,CAAC;MACf,IAAI8xC,GAAG,GAAGr0B,CAAC,CAAC5Z,IAAI,CAAC,eAAe,CAAC;MACjC,IAAI,CAAC,CAACiuC,GAAG,EACLqgD,QAAQ,CAACrgD,GAAG,CAAC,GAAG,IAAI;IAC5B,CAAC,CAAC;IAEF,IAAIqgD,QAAQ,CAACgmB,wBAAwB,KAAK,IAAI,IAAI,CAAC,CAAC/+F,KAAK,EAAE;MACvD,IAAIg/F,KAAK,GAAGh/F,KAAK,GAAG,GAAG;MAEvBtd,EAAE,CAACyR,IAAI,CAAC,mBAAmB,CAAC,CAACpL,IAAI,CAAC,YAAY;QAC1C,IAAIsb,CAAC,GAAGzd,CAAC,CAAC,IAAI,CAAC;QACf,IAAI,CAAC,CAACyd,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAACA,CAAC,CAAC,CAAC,CAAC,CAACf,KAAK,CAAC,OAAO,CAAC,EAAE;UACjC,IAAIgoD,CAAC,GAAGjnD,CAAC,CAACnE,GAAG,CAAC,OAAO,CAAC;UAEtB,IAAIuE,GAAG,GAAG2B,IAAI,CAAC64F,YAAY,CAAC3zC,CAAC,CAAC;UAC9B,IAAI,CAAC,CAAC7mD,GAAG,EACLJ,CAAC,CAACnE,GAAG,CAAC,OAAO,EAAGuE,GAAG,CAACjN,CAAC,GAAGwnG,KAAK,GAAIv6F,GAAG,CAACy+E,GAAG,CAAC;QACjD;MACJ,CAAC,CAAC;MAEFxgG,EAAE,CAACyR,IAAI,CAAC,uBAAuB,CAAC,CAACpL,IAAI,CAAC,YAAY;QAC9C,IAAIsb,CAAC,GAAGzd,CAAC,CAAC,IAAI,CAAC;QACf,IAAI,CAAC,CAACyd,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAACA,CAAC,CAAC,CAAC,CAAC,CAACf,KAAK,CAAC,WAAW,CAAC,EAAE;UACrC,IAAIsC,EAAE,GAAGvB,CAAC,CAACnE,GAAG,CAAC,WAAW,CAAC;UAC3B,IAAIuE,GAAG,GAAG2B,IAAI,CAAC64F,YAAY,CAACr5F,EAAE,CAAC;UAC/B,IAAI,CAAC,CAACnB,GAAG,EACLJ,CAAC,CAACnE,GAAG,CAAC,WAAW,EAAGuE,GAAG,CAACjN,CAAC,GAAGwnG,KAAK,GAAIv6F,GAAG,CAACy+E,GAAG,CAAC;QACrD;MACJ,CAAC,CAAC;IACN;IAEA,IAAI,CAAC4b,QAAQ,CAAC3tE,aAAa,IAAI,CAACnuC,aAAa,CAAC8oB,UAAU,IAAI,CAAC9oB,aAAa,CAACX,MAAM,EAAC;MAC9EK,EAAE,CAACyR,IAAI,CAAC,KAAK,CAAC,CAACpL,IAAI,CAAC,YAAW;QAC3B,IAAIsb,CAAC,GAAGzd,CAAC,CAAC,IAAI,CAAC;QACf,IAAI,CAAC,CAACyd,CAAC,CAAC,CAAC,CAAC,IAAI,CAACA,CAAC,CAAC,CAAC,CAAC,CAACf,KAAK,CAAC,aAAa,CAAC,EAAE;UACtC,IAAI8oD,GAAG,GAAGr/D,KAAK,CAAC0oD,SAAS,CAACjpD,KAAK,CAACwzD,IAAI,CAAC37C,CAAC,CAAC,CAAC,CAAC,CAAC8pF,UAAU,CAAC,CAACh6F,IAAI,CAAC,UAAArL,CAAC;YAAA,OAAI,CAAC,CAACA,CAAC,CAAC9B,IAAI;UAAA,EAAC,CAACA,IAAI;UAC9E,IAAI2B,IAAI,GAAG0b,CAAC,CAACm9B,KAAK,CAAC,CAAC;UACpB74C,IAAI,CAACuX,GAAG,CAAC;YAAC,YAAY,EAAE;UAAQ,CAAC,CAAC;UAClCvX,IAAI,CAACuX,GAAG,CAAC;YAAC,OAAO,EAAE;UAAM,CAAC,CAAC;UAC3B,IAAIg/F,MAAM,GAAGv2G,IAAI,CAACk+D,QAAQ,CAAC,MAAM,CAAC;UAClC,IAAIs4C,WAAW,GAAGD,MAAM,CAACl/F,KAAK,CAAC,CAAC;UAChC,IAAIo/F,YAAY,GAAGD,WAAW,IAAI/yC,GAAG,CAACljE,MAAM,IAAI,CAAC,GAAG,CAAC,GAAGkjE,GAAG,CAACljE,MAAM,CAAC;UACnEg2G,MAAM,CAAC5hD,MAAM,CAAC,CAAC;UAEf,IAAI+hD,cAAc,GAAGr/F,KAAK;UAC1B,IAAIysD,CAAC,GAAG4yC,cAAc,IAAIF,WAAW,GAAG,IAAI,CAAC;UAC7C,IAAIG,QAAQ,GAAG7yC,CAAC,GAAG2yC,YAAY;UAE/B/6F,CAAC,CAACnE,GAAG,CAAC;YAAC,UAAU,EAAEo/F,QAAQ,GAAC;UAAI,CAAC,CAAC;QACtC;MACJ,CAAC,CAAC;IACN;IAEA,IAAIvmB,QAAQ,CAACwmB,iBAAiB,KAAK,IAAI,EAAE;MACrC78G,EAAE,CAACyR,IAAI,CAAC,OAAO,CAAC,CAACpL,IAAI,CAAC,YAAY;QAC9B,IAAIsb,CAAC,GAAGzd,CAAC,CAAC,IAAI,CAAC;QACfyd,CAAC,CAACnE,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC;QAChCmE,CAAC,CAACnE,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC;MACpC,CAAC,CAAC;IACN;EACJ,CAAC;EAED,IAAI,CAAC++F,YAAY,GAAG,UAAUnzG,GAAG,EAAE;IAE/B,IAAIo3F,GAAG,GAAG,EAAE;IACZ,IAAI1rF,CAAC,GAAG,CAAC;IAET,IAAI,CAAC,CAAC1L,GAAG,EAAE;MACP0L,CAAC,GAAGiQ,UAAU,CAAC3b,GAAG,CAAC;MACnBo3F,GAAG,GAAGp3F,GAAG,CAAC2W,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;MAEjC,IAAIygF,GAAG,IAAI,IAAI,IACXA,GAAG,IAAI,IAAI,IACX,CAACA,GAAG,EAAE;QACN,OAAO;UAAEA,GAAG,EAAEA,GAAG;UAAE1rF,CAAC,EAAEA;QAAE,CAAC;MAC7B;IACJ;IAEA,OAAO,IAAI;EACf,CAAC;EAED,IAAI,CAACqnG,4BAA4B,GAAG,UAAUn8G,EAAE,EAAEsd,KAAK,EAAE;IACrD,IAAIoG,IAAI,GAAG,IAAI;IACf,IAAIo5F,uBAAuB,GAAG,EAAE;IAChC,IAAIC,gBAAgB,GAAG,IAAI,CAAChB,WAAW;IAEvC,IAAIgB,gBAAgB,KAAK,CAAC,EAAE;MACxBD,uBAAuB,GAAG,IAAI,CAAChB,kBAAkB;IACrD;IAEA12G,OAAO,CAACC,GAAG,CAAC,4BAA4B,CAAC;IACzC;IACA,OAAO,IAAI,CAACk1G,oBAAoB,CAAC,CAAC,CACjCn2G,IAAI,CAAC,YAAY;MACVgB,OAAO,CAACC,GAAG,CAAC,mEAAmE,GAAGqe,IAAI,CAACkrB,WAAW,CAAC;MAEnG,IAAImuE,gBAAgB,KAAK,CAAC,EAAE;QACxB;QACA,IAAI7lB,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAClB,IAAIoxG,GAAG,GAAG94G,CAAC,CAAClE,EAAE,CAAC,CAAC8+C,KAAK,CAAC,CAAC;QACvB;QACAp7B,IAAI,CAACo4F,kBAAkB,CAACr1G,IAAI,CAAC;UAAEnC,IAAI,EAAE04G,GAAG;UAAE1/F,KAAK,EAAEA;QAAM,CAAC,CAAC;QACzD45E,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;QACf,OAAOqrF,CAAC,CAACprF,OAAO;MACpB;MAEA,IAAIxL,aAAa,CAACX,MAAM,IAAI,CAAC+jB,IAAI,CAAC+qB,aAAa,EAAE;QAE7C;QACA;QACA;QACA;QACA;QACA;QACA,IAAIsuE,gBAAgB,KAAK,CAAC,EAAE;UACxB;UACA,IAAI7lB,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;UAElB,IAAI,CAAC,CAACkxG,uBAAuB,IAAIA,uBAAuB,CAACt2G,MAAM,GAAG,CAAC,EAAE;YACjE;YACA,IAAIqZ,IAAI,GAAG3b,CAAC,CAAC,QAAQ,CAAC;YAEtB,IAAI+4G,OAAO,GAAG,IAAI;YAClB/8G,OAAO,CAAC4M,OAAO,CAACgwG,uBAAuB,EAAE,UAAU98G,EAAE,EAAE;cACnD,IAAI,CAACi9G,OAAO,EAAE;gBACVp9F,IAAI,GAAGA,IAAI,CAACy7C,MAAM,CAAC,2CAA2C,CAAC;cACnE;cAEAz7C,IAAI,GAAGA,IAAI,CAACy7C,MAAM,CAACt7D,EAAE,CAACsE,IAAI,CAAC;cAC3B24G,OAAO,GAAG,KAAK;YACnB,CAAC,CAAC;YAEFp9F,IAAI,CAACs3E,SAAS,CAAC,CAAC;YAChBv2F,QAAQ,CAAC,YAAY;cAAEs2F,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;YAAE,CAAC,EAAE,GAAG,CAAC;UACnD,CAAC,MACI;YACDqrF,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;UACnB;QAEJ,CAAC,MACI;UACD;UACA,IAAIqrF,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;UAClB1H,CAAC,CAAClE,EAAE,CAAC,CAACm3F,SAAS,CAAC,CAAC;UACjBD,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;QACnB;QAEA,OAAOqrF,CAAC,CAACprF,OAAO;MACpB;MAEA,IAAI6V,CAAC,GAAGzd,CAAC,CAAClE,EAAE,CAAC;;MAEb;MACA2hB,CAAC,CAAClQ,IAAI,CAAC,KAAK,CAAC,CAACpL,IAAI,CAAC,YAAY;QAC3BnC,CAAC,CAAC,IAAI,CAAC,CAACsZ,GAAG,CAAC,WAAW,EAAGkG,IAAI,CAAC8qB,kBAAkB,GAAC,EAAE,GAAI,IAAI,CAAC;MACjE,CAAC,CAAC;MAEF,IAAI3sC,GAAG,GAAG6hB,IAAI,CAACw5F,oBAAoB,CAACv7F,CAAC,EAAE+B,IAAI,CAAC8qB,kBAAkB,CAAC;MAC/D7sB,CAAC,GAAGzd,CAAC,CAACrC,GAAG,CAAC41F,eAAe,CAAC92E,cAAc,CAAC,eAAe,CAAC,CAAC;MAC1Dvb,OAAO,CAACC,GAAG,CAAC,oDAAoD,CAAC;MAGrE,IAAI/E,aAAa,CAAC8oB,UAAU,IAAI1F,IAAI,CAAC+qB,aAAa,EAAE;QAChD,IAAIyoD,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAClB6pF,kDAAW,CAAC9zE,CAAC,CAAC,CAAC,CAAC,CAAC,CACZvd,IAAI,CAAC,UAAUqF,GAAG,EAAE;UACjBytF,CAAC,CAACrrF,OAAO,CAACpC,GAAG,CAAC;QAClB,CAAC,CAAC,SACI,CAAC,UAAUymD,EAAE,EAAE;UACjBgnC,CAAC,CAAClwE,MAAM,CAACkpC,EAAE,CAAC;QAChB,CAAC,CAAC;QACN,OAAOgnC,CAAC,CAACprF,OAAO;MACpB;MAEA,IAAIorF,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAClB,IAAI6pC,CAAC,GAAG9zB,CAAC,CAAC7H,MAAM,CAAC,CAAC,CAACA,MAAM,CAAC,CAAC,CAAC+F,IAAI,CAAC,CAAC,CAACE,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;MAC/Dm3E,CAAC,CAACrrF,OAAO,CAAC;QACN+iC,WAAW,EAAElrB,IAAI,CAACkrB,WAAW;QAC7BtxB,KAAK,EAAEqE,CAAC,CAACg2E,UAAU,CAAC,CAAC;QACrBp6E,MAAM,EAAEoE,CAAC,CAAC6yC,WAAW,CAAC,CAAC;QACvB30C,IAAI,EAAE,8GAA8G,GAAG41B,CAAC,GAAG;MAC/H,CAAC,CAAC;MACF,OAAOyhD,CAAC,CAACprF,OAAO;IACpB,CAAC,CAAC,CACG1H,IAAI,CAAC,UAAUE,IAAI,EAAE;MACtBc,OAAO,CAACC,GAAG,CAAC,2CAA2C,CAAC;MAExD,IAAIob,MAAM,GAAGnc,IAAI;MAEjB,IAAI4yF,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAElB,IAAItH,IAAI,IAAI,IAAI,EAAE;QACd4yF,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;QACf,OAAOqrF,CAAC,CAACprF,OAAO;MACpB;MAEA,IAAI,OAAQ2U,MAAO,IAAI,QAAQ,EAAE;QAC7By2E,CAAC,CAACrrF,OAAO,CAAC4U,MAAM,CAAC;MACrB,CAAC,MACI,IAAI,CAAC,CAACnc,IAAI,CAACub,IAAI,EAAE;QAClBvb,IAAI,CAAC/C,IAAI,GAAGmiB,IAAI,CAAC+2F,SAAS;QAC1BvjB,CAAC,CAACrrF,OAAO,CAACvH,IAAI,CAAC;MACnB,CAAC,MACI;QACD4yF,CAAC,CAACrrF,OAAO,CAAC;UACN+iC,WAAW,EAAElrB,IAAI,CAACkrB,WAAW;UAC7BtxB,KAAK,EAAEoG,IAAI,CAAC8qB,kBAAkB;UAC9B/tB,MAAM,EAAEA,MAAM;UACdlf,IAAI,EAAEmiB,IAAI,CAAC+2F;QACf,CAAC,CAAC;MACN;MAEA,OAAOvjB,CAAC,CAACprF,OAAO;IAEpB,CAAC,CAAC,CACD1H,IAAI,CAAC,UAAUwzF,GAAG,EAAE;MACjB,IAAIV,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAElB,IAAIgsF,GAAG,IAAI,IAAI,EAAE;QACbV,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;QACf,OAAOqrF,CAAC,CAACprF,OAAO;MACpB;MAEA,IAAI,CAAC4X,IAAI,CAAC+qB,aAAa,IAAInuC,aAAa,CAAC2L,QAAQ,EAAE;QAC/C7G,OAAO,CAACC,GAAG,CAAC,+CAA+C,CAAC;QAC5D,IAAIg5D,GAAG,GAAG,IAAI;QACd,IAAI/9D,aAAa,CAACunC,QAAQ,IAAInkB,IAAI,CAACgrB,WAAW,IAAI,QAAQ,EACtD2vB,GAAG,GAAG5+D,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAACo5E,mBAAmB,CAAC,KACpD,IAAGz5F,IAAI,CAACgrB,WAAW,IAAI,UAAU,EAClC2vB,GAAG,GAAG36C,IAAI,CAAC05F,wBAAwB,CAAC,KACnC,IAAG15F,IAAI,CAACgrB,WAAW,IAAI,OAAO,EAC/B2vB,GAAG,GAAG5+D,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAACs5E,kBAAkB,CAAC,KAEpDh/C,GAAG,GAAG5+D,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAACu5E,aAAa;QAGlD,IAAG55F,IAAI,CAACgrB,WAAW,IAAI,OAAO,EAAE;UAC5B2vB,GAAG,CAACu5B,GAAG,CAAChpD,WAAW,EACflrB,IAAI,CAACsyE,eAAe,CAACrnD,YAAY,EACjCipD,GAAG,CAACt6E,KAAK,EACTs6E,GAAG,CAACr6E,MAAM,EACVq6E,GAAG,CAAC/3E,IAAI,EACR,CAACpf,aAAa,CAAC01D,kBAAkB,CAAC,CAAC,EAEnC,UAAU5xD,GAAG,EAAEsjB,MAAM,EAAE;YACnBziB,OAAO,CAACC,GAAG,CAAC,wCAAwC,CAAC;YAErD,IAAId,GAAG,EAAE;cACLa,OAAO,CAACC,GAAG,CAAC,kBAAkB,GAAGd,GAAG,CAAC;cAErC,IAAIA,GAAG,CAACkL,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE;gBAC5ClL,GAAG,GAAG,8DAA8D;cACxE;cACA2yF,CAAC,CAAClwE,MAAM,CAACziB,GAAG,CAAC;YACjB,CAAC,MACI;cACDa,OAAO,CAACC,GAAG,CAAC,eAAe,CAAC;cAC5B6xF,CAAC,CAACrrF,OAAO,CAACgc,MAAM,CAAC;YACrB;UACJ,CACJ,CAAC;QACL,CAAC,MAAM;UACHw2C,GAAG,CAACu5B,GAAG,CAAChpD,WAAW,EACfgpD,GAAG,CAACt6E,KAAK,EACTs6E,GAAG,CAACr6E,MAAM,EACVq6E,GAAG,CAAC/3E,IAAI,EACR,CAACpf,aAAa,CAAC01D,kBAAkB,CAAC,CAAC,EACnCyhC,GAAG,CAACr2F,IAAI,EACRmiB,IAAI,CAACsyE,eAAe,CAAC0kB,YAAY,EACjCh3F,IAAI,CAACsyE,eAAe,CAACulB,SAAS,EAC9B,UAAUh3G,GAAG,EAAEsjB,MAAM,EAAE;YACnBziB,OAAO,CAACC,GAAG,CAAC,wCAAwC,CAAC;YAErD,IAAId,GAAG,EAAE;cACLa,OAAO,CAACC,GAAG,CAAC,kBAAkB,GAAGd,GAAG,CAAC;cAErC,IAAIA,GAAG,CAACkL,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE;gBAC5ClL,GAAG,GAAG,8DAA8D;cACxE;cACA2yF,CAAC,CAAClwE,MAAM,CAACziB,GAAG,CAAC;YACjB,CAAC,MACI;cACDa,OAAO,CAACC,GAAG,CAAC,eAAe,CAAC;cAC5B6xF,CAAC,CAACrrF,OAAO,CAACgc,MAAM,CAAC;YACrB;UACJ,CACJ,CAAC;QACL;MACJ,CAAC,MACI;QACD,IAAI+vE,GAAG,IAAI,IAAI,KAAKt3F,aAAa,CAAC8oB,UAAU,IAAI1F,IAAI,CAAC+qB,aAAa,CAAC,EAAE;UACjE/qB,IAAI,CAAC65F,cAAc,CAAC3lB,GAAG,CAACn3E,MAAM,EAAEm3E,GAAG,CAACn3E,MAAM,CAACnD,KAAK,EAAEs6E,GAAG,CAACn3E,MAAM,CAAClD,MAAM,EACnE,YAAY;YACRnY,OAAO,CAACC,GAAG,CAAC,2BAA2B,CAAC;YACxC6xF,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;UACnB,CAAC,CAAC;QACN,CAAC,MACI;UACDzG,OAAO,CAACC,GAAG,CAAC,eAAe,CAAC;UAC5B6xF,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;QACnB;MACJ;MAEA,OAAOqrF,CAAC,CAACprF,OAAO;IACpB,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACyxG,cAAc,GAAG,UAAU98F,MAAM,EAAEnD,KAAK,EAAEC,MAAM,EAAEo+C,QAAQ,EAAE;IAC7D,IAAIm8B,MAAM,GAAGr3E,MAAM,CAAC4B,SAAS,CAAC,WAAW,CAAC;IAC1Cne,CAAC,CAAC,MAAM,CAAC,CAACuN,IAAI,CAAC,uBAAuB,CAAC,CAACmpD,MAAM,CAAC,CAAC;IAEhD,IAAIm9B,QAAQ,oqBAAAlmF,MAAA,CAQ0ChR,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,sLAAAiQ,MAAA,CAK5B3N,CAAC,CAACzE,MAAM,CAAC,CAAC8d,MAAM,CAAC,CAAC,GAAG,GAAG,4FAAA1L,MAAA,CAAmF0L,MAAM,GAAG,EAAE,yFAI5K;IAEP,IAAIy6E,EAAE,GAAG9zF,CAAC,CAAC6zF,QAAQ,CAAC;IACpBC,EAAE,CAACvmF,IAAI,CAAC,aAAa,CAAC,CAAC6pD,MAAM,CAAC,YAAY,GAAGw8B,MAAM,GAAG,sCAAsC,CAAC;IAC7F5zF,CAAC,CAAC,MAAM,CAAC,CAACo3D,MAAM,CAAC08B,EAAE,CAAC;IAEpB,SAASwlB,oBAAoBA,CAAA,EAAG;MAC5B,IAAIl9G,aAAa,CAAC+I,cAAc,IAAI,IAAI,EAAE;QACtC,IAAI0yE,oBAAoB,GAAGt7E,aAAa,CAACk7E,uBAAuB,CAACz3E,CAAC,CAAC,mBAAmB,CAAC,CAAC;QACxFA,CAAC,CAAC,mBAAmB,CAAC,CAACswD,WAAW,CAACunB,oBAAoB,CAAC;MAC5D;IACJ;IAEAic,EAAE,CAAC5jC,EAAE,CAAC,gBAAgB,EAAEopD,oBAAoB,CAAC;IAC7Ct5G,CAAC,CAACzE,MAAM,CAAC,CAAC20D,EAAE,CAAC,QAAQ,EAAEopD,oBAAoB,CAAC;IAE5C,IAAI,OAAO7hD,QAAQ,IAAI,UAAU,EAAE;MAC/Bz3D,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC8E,UAAU,CAACyyF,EAAE,EAAE,UAAUC,GAAG,EAAE;QACxCA,GAAG,CAAC7jC,EAAE,CAAC,iBAAiB,EAAE,UAAUzyC,CAAC,EAAE;UACnCg6C,QAAQ,CAAC,CAAC;UACVz3D,CAAC,CAACC,OAAO,CAAC,CAAC;UAEXD,CAAC,CAACzE,MAAM,CAAC,CAACisB,GAAG,CAAC,QAAQ,EAAE8xF,oBAAoB,CAAC;QACjD,CAAC,CAAC;MAEN,CAAC,CAAC;IACN,CAAC,MACI;MACD/8G,aAAa,CAAC8E,UAAU,CAACyyF,EAAE,EAAE,UAASC,GAAG,EAAC;QACtCA,GAAG,CAAC7jC,EAAE,CAAC,iBAAiB,EAAE,UAAUzyC,CAAC,EAAE;UACnCzd,CAAC,CAACzE,MAAM,CAAC,CAACisB,GAAG,CAAC,QAAQ,EAAE8xF,oBAAoB,CAAC;QACjD,CAAC,CAAC;MACN,CAAC,CAAC;IACN;EACJ,CAAC;EAED,IAAI,CAACN,oBAAoB,GAAG,UAAUl9G,EAAE,EAAEsd,KAAK,EAAE;IAC7ClY,OAAO,CAACC,GAAG,CAAC,4BAA4B,CAAC;IACzCnB,CAAC,CAAC,kBAAkB,CAAC,CAAC02D,MAAM,CAAC,CAAC;;IAE9B;IACA;;IAEA,IAAIvG,SAAS,GAAG3zC,QAAQ,CAAC81B,aAAa,CAAC,QAAQ,CAAC;IAChD6d,SAAS,CAACuD,SAAS,GAAG,iBAAiB;IACvCvD,SAAS,CAACzzC,KAAK,CAACC,UAAU,GAAG,QAAQ;IACrCwzC,SAAS,CAACzzC,KAAK,CAAC8zC,QAAQ,GAAG,OAAO;IAClCL,SAAS,CAACzzC,KAAK,CAACnD,IAAI,GAAG,UAAU;IACjC42C,SAAS,CAACzzC,KAAK,CAACoL,GAAG,GAAG,KAAK;IAC3BqoC,SAAS,CAACzzC,KAAK,CAACgnE,MAAM,GAAG,GAAG;IAC5BvzB,SAAS,CAAC/2C,KAAK,GAAGA,KAAK;IACvB;IACA+2C,SAAS,CAAC6jC,SAAS,GAAG,IAAI,CAAC,CAAC;;IAE5B;IACA;IACA;IACA;IACA;;IAEAx3E,QAAQ,CAACm2B,IAAI,CAACC,WAAW,CAACud,SAAS,CAAC;IACpC,IAAI8jC,EAAE,GAAGn4F,EAAE,CAAC8+C,KAAK,CAAC,CAAC;IACnBq5C,EAAE,CAAC36E,GAAG,CAAC;MAAE,kBAAkB,EAAE,OAAO;MAAE,UAAU,EAAE,UAAU;MAAE,MAAM,EAAE,GAAG;MAAE,KAAK,EAAE,GAAG;MAAE,OAAO,EAAEF,KAAK,GAAG;IAAK,CAAC,CAAC;IAC/G66E,EAAE,CAACpwF,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC;IAC9BowF,EAAE,CAACC,UAAU,CAAC,UAAU,CAAC;IAGzBl0F,CAAC,CAACmwD,SAAS,CAACojC,eAAe,CAAC5gD,IAAI,CAAC,CAACykB,MAAM,CAAC68B,EAAE,CAAC;IAE5C,IAAIpmB,CAAC,GAAG;MACJx0D,MAAM,EAAE82C,SAAS,CAAC92C,MAAM;MACxBD,KAAK,EAAE+2C,SAAS,CAAC/2C;IACrB,CAAC;IACDlY,OAAO,CAACC,GAAG,CAAC,8BAA8B,GAAGyyB,IAAI,CAACC,SAAS,CAACg6C,CAAC,CAAC,CAAC;IAE/D,OAAO1d,SAAS;EACpB,CAAC;EAED,IAAI,CAACgnD,eAAe,GAAG,UAAU33F,IAAI,EAAE2yE,QAAQ,EAAE;IAC7C,IAAIonB,mBAAmB,GAAG,KAAK;IAC/B,IAAGpnB,QAAQ,aAAU,IAAIA,QAAQ,aAAU,IAAI,SAAS,EAAE;MACtDonB,mBAAmB,GAAG,MAAM;IAChC,CAAC,MAAM,IAAG,CAAC,CAACpnB,QAAQ,aAAU,IAAIA,QAAQ,aAAU,KAAK,WAAW,KACjE3yE,IAAI,CAACg6F,iBAAiB,CAACrnB,QAAQ,CAACznD,WAAW,CAAC,EAAE;MAC7C6uE,mBAAmB,GAAG,MAAM;IAChC;IAEA,IAAI,CAAC,CAACpnB,QAAQ,CAACujB,UAAU,IAAI6D,mBAAmB,KAAK,KAAK,EACtD/5F,IAAI,CAACkrB,WAAW,GAAG6uE,mBAAmB,GAAGpnB,QAAQ,CAACujB,UAAU,CAAC,KAC5D,IAAI,CAAC,CAACvjB,QAAQ,CAACwjB,QAAQ,EACxBn2F,IAAI,CAACkrB,WAAW,GAAGynD,QAAQ,CAACwjB,QAAQ,CAAC,KAErCn2F,IAAI,CAACkrB,WAAW,GAAG6uE,mBAAmB,GAAGpnB,QAAQ,CAACznD,WAAW;IAEjE,IAAI+qE,SAAS,GAAGtjB,QAAQ,CAAC1nD,YAAY;IACrC,IAAIgvE,UAAU,GAAG,KAAK;IACtB,IAAGhE,SAAS,EAAE;MACV;MACA,IAAIxvG,KAAK,GAAG,IAAI;MAChByzG,iBAAiB,CAAC9wG,OAAO,CAAC,UAAU6U,CAAC,EAAErb,GAAG,EAAE;QACxC,IAAIqb,CAAC,CAACk8F,UAAU,IAAIlE,SAAS,EAAE;UAC3BxvG,KAAK,GAAGwX,CAAC;UACTg8F,UAAU,GAAG,IAAI;UACjB,OAAO,KAAK;QAChB;MACJ,CAAC,CAAC;MACF;MACA,IAAGxzG,KAAK,EAAE;QACNuZ,IAAI,CAACsyE,eAAe,CAAC0kB,YAAY,GAAGvwG,KAAK,CAACuwG,YAAY;QACtDh3F,IAAI,CAACsyE,eAAe,CAACulB,SAAS,GAAGpxG,KAAK,CAACoxG,SAAS;QAChD73F,IAAI,CAACsyE,eAAe,CAAC3lE,aAAa,GAAGlmB,KAAK,CAAC2zG,gBAAgB;MAC/D;IACJ;IAEA,IAAG,CAACH,UAAU,EAAC;MACXj6F,IAAI,CAACsyE,eAAe,CAAC3lE,aAAa,GAAG,IAAI,CAAC,CAAC;MAC3C3M,IAAI,CAACsyE,eAAe,CAAC0kB,YAAY,GAAG,EAAE;MACtCh3F,IAAI,CAACsyE,eAAe,CAACulB,SAAS,GAAG,UAAU;IAC/C;IAEA,IAAIx0F,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAACyqF,QAAQ,CAACznD,WAAW,IAAI,CAACynD,QAAQ,CAAC5nD,aAAa,EAAE;MAClD1nB,QAAQ,CAACC,MAAM,CAACnmB,cAAc,CAACe,SAAS,CAAC,6BAA6B,CAAC,CAAC;IAC5E,CAAC,MAEG,IAAI,CAACy0F,QAAQ,CAAC9nD,gBAAgB,IAAI8nD,QAAQ,CAAC9nD,gBAAgB,GAAG,CAAC,EAAE;MAC7DxnB,QAAQ,CAACC,MAAM,CAACnmB,cAAc,CAACe,SAAS,CAAC,gCAAgC,CAAC,CAAC;IAC/E,CAAC,MAEGmlB,QAAQ,CAAClb,OAAO,CAACwqF,QAAQ,CAAC;IAElC,OAAOtvE,QAAQ,CAACjb,OAAO;;IAEvB;IACA;IACA;EACJ,CAAC;EAED,IAAI,CAACwvG,gBAAgB,GAAG,UAAU53F,IAAI,EAAE2yE,QAAQ,EAAE;IAC9C3yE,IAAI,CAACkrB,WAAW,GAAGynD,QAAQ,CAACwjB,QAAQ,GAAGxjB,QAAQ,CAACwjB,QAAQ,GAAGxjB,QAAQ,CAACznD,WAAW;IAC/ElrB,IAAI,CAACirB,YAAY,GAAG0nD,QAAQ,CAAC1nD,YAAY;IACzCjrB,IAAI,CAACsyE,eAAe,CAAC3lE,aAAa,GAAG,IAAI;IAEzC,IAAItJ,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAACyqF,QAAQ,CAACznD,WAAW,IAAI,CAACynD,QAAQ,CAAC5nD,aAAa,EAAE;MAClD1nB,QAAQ,CAACC,MAAM,CAACnmB,cAAc,CAACe,SAAS,CAAC,6BAA6B,CAAC,CAAC;IAC5E,CAAC,MAEG,IAAI,CAACy0F,QAAQ,CAAC9nD,gBAAgB,IAAI8nD,QAAQ,CAAC9nD,gBAAgB,GAAG,CAAC,EAAE;MAC7DxnB,QAAQ,CAACC,MAAM,CAACnmB,cAAc,CAACe,SAAS,CAAC,gCAAgC,CAAC,CAAC;IAC/E,CAAC,MAEGmlB,QAAQ,CAAClb,OAAO,CAACwqF,QAAQ,CAAC;IAElC,OAAOtvE,QAAQ,CAACjb,OAAO;EAC3B,CAAC;EAED,IAAI,CAACqvG,WAAW,GAAG,UAAUz3F,IAAI,EAAE2yE,QAAQ,EAAE;IACzC3yE,IAAI,CAACkrB,WAAW,GAAGynD,QAAQ,CAACznD,WAAW;IAEvC,IAAI7nB,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBmb,QAAQ,CAAClb,OAAO,CAACwqF,QAAQ,CAAC;IAC1B,OAAOtvE,QAAQ,CAACjb,OAAO;EAC3B,CAAC;EAED,IAAI,CAACsvG,iBAAiB,GAAG,UAAU13F,IAAI,EAAE2yE,QAAQ,EAAE;IAC/C3yE,IAAI,CAACkrB,WAAW,GAAGynD,QAAQ,CAACznD,WAAW;IACvC,IAAI7nB,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI,CAACyqF,QAAQ,CAACznD,WAAW,EAAE;MACvB7nB,QAAQ,CAACC,MAAM,CAACnmB,cAAc,CAACe,SAAS,CAAC,wBAAwB,CAAC,CAAC;IACvE,CAAC,MAEG,IAAI,CAACy0F,QAAQ,CAAC9nD,gBAAgB,IAAI8nD,QAAQ,CAAC9nD,gBAAgB,GAAG,CAAC,EAAE;MAC7DxnB,QAAQ,CAACC,MAAM,CAACnmB,cAAc,CAACe,SAAS,CAAC,gCAAgC,CAAC,CAAC;IAC/E,CAAC,MACI;MACDnC,MAAM,CAAC8pB,OAAO,CAACwa,WAAW,CAACg6E,iBAAiB,CAAC,UAAUx5G,GAAG,EAAEsjB,MAAM,EAAE;QAChE,IAAItjB,GAAG,EAAE;UACLa,OAAO,CAACC,GAAG,CAAC,0BAA0B,CAAC;UACvC0hB,QAAQ,CAACC,MAAM,CAACnmB,cAAc,CAACe,SAAS,CAAC,iCAAiC,CAAC,CAAC;QAChF,CAAC,MACI;UACDwD,OAAO,CAACC,GAAG,CAAC,6BAA6B,GAAGyyB,IAAI,CAACC,SAAS,CAAClQ,MAAM,CAAC,CAAC;UACnE,IAAIA,MAAM,CAACrhB,MAAM,GAAG,CAAC,EAAE;YACnBugB,QAAQ,CAACC,MAAM,CAACnmB,cAAc,CAACe,SAAS,CAAC,iCAAiC,CAAC,CAAC;UAChF,CAAC,MACI;YACDwD,OAAO,CAACC,GAAG,CAAC,2CAA2C,GAAGwiB,MAAM,CAAC,CAAC,CAAC,CAACm2F,IAAI,CAAC;YACzEt6F,IAAI,CAACkrB,WAAW,GAAG/mB,MAAM,CAAC,CAAC,CAAC,CAACm2F,IAAI;YACjCj3F,QAAQ,CAAClb,OAAO,CAACwqF,QAAQ,CAAC;UAC9B;QACJ;MACJ,CAAC,CAAC;IACN;IACJ;IACA,OAAOtvE,QAAQ,CAACjb,OAAO;EAC3B,CAAC;EAED,IAAI,CAACmyG,8BAA8B,GAAG,UAAUz2G,KAAK,EAAEm0F,IAAI,EAAErzF,IAAI,EAAE;IAC/D,IAAMg7B,CAAC,GAAGviC,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACpB03B,CAAC,CAACz3B,OAAO,CAAC,CAAC;IACX,OAAO,IAAI,CAACqyG,uBAAuB,CAAC12G,KAAK,EAAEm0F,IAAI,EAAErzF,IAAI,EAAEg7B,CAAC,CAACx3B,OAAO,CAAC;EACrE,CAAC;EAED,IAAI,CAACoyG,uBAAuB,GAAG,UAAU12G,KAAK,EAAEm0F,IAAI,EAAErzF,IAAI,EAAEg7B,CAAC,EAAE;IAC3D97B,KAAK,CAAC+rD,MAAM,CAAC,YAAY;MACrB,IAAIooC,IAAI,IAAI,UAAU,EAAE;QACpBn0F,KAAK,CAAC+b,gBAAgB,CAAC46F,eAAe,GAAG32C,IAAI,CAACqB,WAAW,CAACvgE,IAAI,CAAC;MACnE,CAAC,MACI,IAAIqzF,IAAI,IAAI,UAAU,EAAE;QACzBn0F,KAAK,CAAC+b,gBAAgB,CAAC66F,eAAe,GAAG52C,IAAI,CAACqB,WAAW,CAACvgE,IAAI,CAAC;MACnE;IACJ,CAAC,CAAC;IAEF,IAAIob,IAAI,GAAG,IAAI;IACf,IAAIi4E,IAAI,IAAI,UAAU,EAAE;MACpB,OAAOr4D,CAAC,CAACl/B,IAAI,CAAC,YAAY;QACtB,IAAIyb,IAAI,GAAG3b,CAAC,CAAC,uDAAuD,CAAC;QACrE,IAAI2b,IAAI,CAACrZ,MAAM,GAAG,CAAC,EAAE;UACjBqZ,IAAI,GAAGA,IAAI,CAACi/B,KAAK,CAAC,CAAC;UACnBj/B,IAAI,CAAC5J,IAAI,CAAC,CAAC;UAEX4J,IAAI,GAAG3b,CAAC,CAAC,QAAQ,CAAC,CAACo3D,MAAM,CAACz7C,IAAI,CAAC;UAE/Bza,OAAO,CAACC,GAAG,CAAC,wCAAwC,CAAC;UACrD,OAAOqe,IAAI,CAACy5E,YAAY,CAACt9E,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC9C,CAAC,MACI;UACD,IAAIlU,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzBrL,YAAY,CAACiE,SAAS,CAAC,4CAA4C,EAC/D,YAAY;YACRmH,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;UAC1B,CAAC,CAAC;UACN,OAAOF,QAAQ,CAACG,OAAO;QAC3B;MACJ,CAAC,CAAC;IACN,CAAC,MACI,IAAI6vF,IAAI,IAAI,UAAU,EAAE;MACzB,OAAOr4D,CAAC,CAACl/B,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACzB,IAAIoW,IAAI,GAAG3b,CAAC,CAAC,uDAAuD,CAAC;QACrE,IAAI2b,IAAI,CAACrZ,MAAM,GAAG,CAAC,EAAE;UACjBqZ,IAAI,GAAGA,IAAI,CAACi/B,KAAK,CAAC,CAAC;UACnBj/B,IAAI,CAAC5J,IAAI,CAAC,CAAC;UACX4J,IAAI,GAAG3b,CAAC,CAAC,QAAQ,CAAC,CAACo3D,MAAM,CAACz7C,IAAI,CAAC;UAC/Bza,OAAO,CAACC,GAAG,CAAC,wCAAwC,CAAC;UACrD,OAAOqe,IAAI,CAACy5E,YAAY,CAACt9E,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC9C,CAAC,MACI;UACD,IAAIlU,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzBrL,YAAY,CAACiE,SAAS,CAAC,4CAA4C,EAC/D,YAAY;YACRmH,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;UAC1B,CAAC,CAAC;UACN,OAAOF,QAAQ,CAACG,OAAO;QAC3B;MACJ,CAAC,CAAC;IACN,CAAC,MACI;MACD,OAAOw3B,CAAC;IACZ;EACJ,CAAC;EAED,IAAI,CAAC+6E,mBAAmB,GAAG,UAAUC,OAAO,EAAEC,SAAS,EAAE;IACrD,IAAI90G,GAAG,GAAG,KAAK;IAEf,IAAI+0G,OAAO,GAAGD,SAAS,KAAK,IAAI,GAAGD,OAAO,CAAC1mE,GAAG,CAAC,CAAC,CAAC,GAAI,CAAC,CAAC0mE,OAAO,GAAGA,OAAO,CAAC1mE,GAAG,CAAC,CAAC,CAAC,GAAG1zC,CAAC,CAAC,mCAAmC,CAAC,CAAC0zC,GAAG,CAAC,CAAC,CAAE;IAChI,IAAI,CAAC4mE,OAAO,IAAI,CAACD,SAAS,IAAI,CAACD,OAAO,EAAE;MACpC;IAAA;IAEJ,IAAI,CAAC,CAACE,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC/lB,SAAS,EAAE;MAClC,IAAMC,GAAG,GAAGx0F,CAAC,CAACs6G,OAAO,CAAC/lB,SAAS,CAAC;MAChChvF,GAAG,GAAGivF,GAAG,CAACjnF,IAAI,CAAC,mBAAmB,CAAC,CAACjL,MAAM,GAAG,CAAC;IAClD;IAEA,OAAOiD,GAAG;EACd,CAAC;EAED,IAAI,CAAC0zF,YAAY,GAAG,UAAUmhB,OAAO,EAAEG,cAAc,EAAEF,SAAS,EAAEG,sBAAsB,EAAEC,uBAAuB,EAAE;IAC/Gz6G,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAI;MACA,IAAIq6G,OAAO,GAAGD,SAAS,KAAK,IAAI,GAAGD,OAAO,CAAC1mE,GAAG,CAAC,CAAC,CAAC,GAAI,CAAC,CAAC0mE,OAAO,GAAGA,OAAO,CAAC1mE,GAAG,CAAC,CAAC,CAAC,GAAG1zC,CAAC,CAAC,mCAAmC,CAAC,CAAC0zC,GAAG,CAAC,CAAC,CAAE;MAChI,IAAI,CAAC4mE,OAAO,IAAI,CAACD,SAAS,IAAI,CAACD,OAAO,EAAE;QACrC;MAAA;MAGH,IAAI,CAACE,OAAO,EAAE;QACV,IAAMtnB,EAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACpBsrF,EAAC,CAAClwE,MAAM,CAAC,2BAA2B,CAAC;QACrC,OAAOkwE,EAAC,CAACprF,OAAO;MACpB;;MAEA;MACA,IAAI,CAAC,CAAC0yG,OAAO,CAAC/lB,SAAS,EAAE;QAErB,IAAI,CAACujB,oBAAoB,CAAC,CAAC;QAE3B,IAAItjB,GAAG,GAAGx0F,CAAC,CAACs6G,OAAO,CAAC/lB,SAAS,CAAC;QAE9BC,GAAG,CAACN,UAAU,CAAC,UAAU,CAAC;QAE1BM,GAAG,CAACjnF,IAAI,CAAC,iBAAiB,CAAC,CAACpL,IAAI,CAAC,YAAY;UACzC,IAAI6c,EAAE,GAAGhf,CAAC,CAAC,IAAI,CAAC,CAAC6D,IAAI,CAAC,eAAe,CAAC;UACtC7D,CAAC,CAAC,IAAI,CAAC,CAACsZ,GAAG,CAAC,WAAW,EAAE0F,EAAE,CAAC;UAC5Bhf,CAAC,CAAC,IAAI,CAAC,CAACk0F,UAAU,CAAC,eAAe,CAAC;QACvC,CAAC,CAAC;QAEF,IAAIqmB,cAAc,KAAK,IAAI,EACvB/lB,GAAG,CAACjnF,IAAI,CAAC,aAAa,CAAC,CAACmpD,MAAM,CAAC,CAAC;QAEpC,IAAIgkD,EAAE,GAAG79G,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACnBgzG,EAAE,CAAC/yG,OAAO,CAAC,IAAI,CAAC;QAEhB,IAAI6X,IAAI,GAAG,IAAI;QAEf,IAAIg7F,sBAAsB,KAAK,IAAI,EAAE;UACjC;UACAhmB,GAAG,CAACjnF,IAAI,CAAC,mBAAmB,CAAC,CAACpL,IAAI,CAAC,YAAY;YAC3C,IAAIw4G,IAAI,GAAG36G,CAAC,CAAC,IAAI,CAAC;YAElB06G,EAAE,CAAC9yG,OAAO,GAAG8yG,EAAE,CAAC9yG,OAAO,CAAC1H,IAAI,CAAC,UAAUqF,GAAG,EAAE;cACxC,IAAIoW,IAAI,GAAGg/F,IAAI,CAAC//D,KAAK,CAAC,CAAC;cACvBj/B,IAAI,CAAC5J,IAAI,CAAC,CAAC;cACX,OAAOyN,IAAI,CAACm4F,oBAAoB,CAACh8F,IAAI,CAAC;YAC1C,CAAC,CAAC;UACN,CAAC,CAAC;QACN;QAEA,OAAO++F,EAAE,CAAC9yG,OAAO,CAAC1H,IAAI,CAAC,UAAUqF,GAAG,EAAE;UAClC,OAAOia,IAAI,CAACm4F,oBAAoB,CAACnjB,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CACGt0F,IAAI,CAAC,UAAUqF,GAAG,EAAE;UACjBia,IAAI,CAACu4F,sBAAsB,CAAC,CAAC;UAC7B,OAAOv4F,IAAI,CAACm4F,oBAAoB,CAAC,CAAC;QACtC,CAAC,CAAC,CACDz3G,IAAI,CAAC,YAAY;UACdF,CAAC,CAACO,SAAS,CAAC,CAAC;UACbW,OAAO,CAACC,GAAG,CAAC,oBAAoB,CAAC;UACjC,IAAI6xF,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;UAClBsrF,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;UACf,OAAOqrF,CAAC,CAACprF,OAAO;QACpB,CAAC,CAAC,SACI,CAAC,UAAUvH,GAAG,EAAE;UAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;UACbW,OAAO,CAACC,GAAG,CAAC,qBAAqB,CAAC;UAClC9E,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;UAC3B,IAAI2yF,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;UAClBsrF,CAAC,CAAClwE,MAAM,CAACziB,GAAG,CAAC;UACb,OAAO2yF,CAAC,CAACprF,OAAO;QACpB,CAAC,CAAC,WACM,CAAC,YAAY;UACjB4X,IAAI,CAACw4F,qBAAqB,CAAC,CAAC;QAChC,CAAC,CAAC;MACV,CAAC,MACI;QACD,IAAIhlB,CAAC,GAAGn2F,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAClBsrF,CAAC,CAACrrF,OAAO,CAAC,IAAI,CAAC;QACf,OAAOqrF,CAAC,CAACprF,OAAO;MACpB;IACJ,CAAC,CACD,OAAO6V,CAAC,EAAE;MACNzd,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACmd,CAAC,CAAC;IAC7B;EACJ,CAAC;EAGD,IAAI,CAACgjE,aAAa,GAAG,YAAY;IAC7BzgF,CAAC,CAACC,OAAO,CAAC,CAAC;IACXiB,OAAO,CAACC,GAAG,CAAC,mBAAmB,CAAC;IAChC,OAAO,IAAI,CAACk1G,oBAAoB,CAAC,CAAC,CAACn2G,IAAI,CAAC,UAAUiyF,QAAQ,EAAE;MACxD,OAAO3yE,IAAI,CAACyyE,UAAU,CAAC,CAAC,CACnB/xF,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjBrE,OAAO,CAACC,GAAG,CAAC,sBAAsB,CAAC;QACnC,OAAOqe,IAAI,CAAC8yE,OAAO,CAAC,CAAC;MACzB,CAAC,CAAC;IACV,CAAC,CAAC,WACM,CAAC,YAAY;MACjBpxF,OAAO,CAACC,GAAG,CAAC,mBAAmB,CAAC;MAChCnB,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAAC24G,wBAAwB,GAAG,UAASxuE,WAAW,EAChDtxB,KAAK,EACLC,MAAM,EACNsC,IAAI,EACJi/F,SAAS,EACTv9G,IAAI,EACJm5G,YAAY,EACZa,SAAS,EACT5/C,QAAQ,EAAE;IACNz0C,OAAO,CAACqC,OAAO,CAAC+tE,OAAO,CAAC9pC,KAAK,CAAC3tC,IAAI,EAC9B;MACI7V,IAAI,EAAE,SAAS;MAAE;MACjButF,SAAS,EAAE,KAAK;MAChB3P,MAAM,EAAE;IACZ,CAAC,EACD,UAAUn+E,GAAG,EAAE;MACX,IAAIA,GAAG,KAAK,UAAU,IAAI,CAACA,GAAG,EAAE;QAC5BkyD,QAAQ,CAAC,yBAAyB,CAAC;MACvC,CAAC,MAAM;QACHA,QAAQ,CAAC,IAAI,EAAElyD,GAAG,CAAC;MACvB;IACR,CAAC,CAAC;EACN,CAAC;EAEL,IAAI,CAACs1G,gBAAgB,GAAG,UAASC,MAAM,EAAE;IACrC,OAAOA,MAAM,IAAI,OAAO,GAAGC,kBAAkB,GAAGrB,iBAAiB;EACrE,CAAC;EAED,IAAI,CAACF,iBAAiB,GAAG,UAASh0C,GAAG,EAAE;IACnC,IAAG,CAACA,GAAG,EAAE;MACL,OAAO,KAAK;IAChB;IACA,IAAI,kKAAkK,CAACvL,IAAI,CAACuL,GAAG,CAAC,EAAE;MAC9K,OAAO,IAAI;IACf;IAEA,OAAO,KAAK;EAChB,CAAC;EAED,IAAIu1C,kBAAkB,GAAG,CAAC;IACtBC,OAAO,EAAE,QAAQ;IACjBrB,UAAU,EAAE,QAAQ;IACpBj8F,OAAO,EAAE,QAAQ;IACjBu9F,UAAU,EAAE;EAChB,CAAC,EACD;IACID,OAAO,EAAE,QAAQ;IACjBrB,UAAU,EAAE,QAAQ;IACpBj8F,OAAO,EAAE,QAAQ;IACjBu9F,UAAU,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW;EAChE,CAAC,EACD;IACID,OAAO,EAAE,QAAQ;IACjBrB,UAAU,EAAE,QAAQ;IACpBj8F,OAAO,EAAE,QAAQ;IACjBu9F,UAAU,EAAE,CAAC,QAAQ,EAAE,UAAU;EACrC,CAAC,EACD;IACID,OAAO,EAAE,QAAQ;IACjBrB,UAAU,EAAE,QAAQ;IACpBj8F,OAAO,EAAE,QAAQ;IACjBu9F,UAAU,EAAE,CAAC,QAAQ,EAAE,UAAU;EACrC,CAAC,EACD;IACID,OAAO,EAAE,QAAQ;IACjBrB,UAAU,EAAE,QAAQ;IACpBj8F,OAAO,EAAE,yBAAyB;IAClCu9F,UAAU,EAAE;EAChB,CAAC,EAAC;IACED,OAAO,EAAE,UAAU;IACnBrB,UAAU,EAAE,UAAU;IACtBj8F,OAAO,EAAE,2BAA2B;IACpCu9F,UAAU,EAAE;EAChB,CAAC,EACD;IACID,OAAO,EAAE,QAAQ;IACjBrB,UAAU,EAAE,QAAQ;IACpBj8F,OAAO,EAAE,QAAQ;IACjBu9F,UAAU,EAAE,CAAC,QAAQ,EAAE,UAAU;EACrC,CAAC,EACD;IACID,OAAO,EAAE,QAAQ;IACjBrB,UAAU,EAAE,QAAQ;IACpBj8F,OAAO,EAAE,QAAQ;IACjBu9F,UAAU,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW;EAC9E,CAAC,EACD;IACID,OAAO,EAAE,QAAQ;IACjBrB,UAAU,EAAE,QAAQ;IACpBj8F,OAAO,EAAE,QAAQ;IACjBu9F,UAAU,EAAE;EAChB,CAAC,EACD;IACID,OAAO,EAAE,QAAQ;IACjBrB,UAAU,EAAE,QAAQ;IACpBj8F,OAAO,EAAE,QAAQ;IACjBu9F,UAAU,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa;EAChE,CAAC,EACD;IACID,OAAO,EAAE,QAAQ;IACjBrB,UAAU,EAAE,QAAQ;IACpBj8F,OAAO,EAAE,UAAU;IACnBu9F,UAAU,EAAE;EAChB,CAAC,EACD;IACID,OAAO,EAAE,QAAQ;IACjBrB,UAAU,EAAE,QAAQ;IACpBj8F,OAAO,EAAE,QAAQ;IACjBu9F,UAAU,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY;EACnD,CAAC,EACD;IACID,OAAO,EAAE,QAAQ;IACjBrB,UAAU,EAAE,QAAQ;IACpBj8F,OAAO,EAAE,UAAU;IACnBu9F,UAAU,EAAE,CAAC,UAAU,EAAE,YAAY;EACzC,CAAC,EACD;IACID,OAAO,EAAE,QAAQ;IACjBrB,UAAU,EAAE,QAAQ;IACpBj8F,OAAO,EAAE,QAAQ;IACjBu9F,UAAU,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW;EAC1G,CAAC,EACD;IACID,OAAO,EAAE,QAAQ;IACjBrB,UAAU,EAAE,QAAQ;IACpBj8F,OAAO,EAAE,QAAQ;IACjBu9F,UAAU,EAAE;EAChB,CAAC,EACD;IACID,OAAO,EAAE,SAAS;IAClBrB,UAAU,EAAE,SAAS;IACrBj8F,OAAO,EAAE,SAAS;IAClBu9F,UAAU,EAAE,CAAC,SAAS,EAAE,WAAW;EACvC,CAAC,EACD;IACID,OAAO,EAAE,SAAS;IAClBrB,UAAU,EAAE,SAAS;IACrBj8F,OAAO,EAAE,SAAS;IAClBu9F,UAAU,EAAE;EAChB,CAAC,EACD;IACID,OAAO,EAAE,QAAQ;IACjBrB,UAAU,EAAE,QAAQ;IACpBj8F,OAAO,EAAE,QAAQ;IACjBu9F,UAAU,EAAE;EAChB,CAAC,EACD;IACID,OAAO,EAAE,SAAS;IAClBrB,UAAU,EAAE,SAAS;IACrBj8F,OAAO,EAAE,SAAS;IAClBu9F,UAAU,EAAE;EAChB,CAAC,EACD;IACID,OAAO,EAAE,UAAU;IACnBrB,UAAU,EAAE,UAAU;IACtBj8F,OAAO,EAAE,UAAU;IACnBu9F,UAAU,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,eAAe;EAC3D,CAAC,CAAC;EAEE,IAAIvB,iBAAiB,GAAG,CAAC;IACzBsB,OAAO,EAAE,UAAU;IACnBrB,UAAU,EAAE,WAAW;IACvBj8F,OAAO,EAAE,WAAW;IACpBu9F,UAAU,EAAE,CACJ,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,CAAC;IACpB5D,SAAS,EAAE,UAAU;IACrBb,YAAY,EAAE,EAAE;IAChB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,IAAI;IAC5BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,IAAI;IAC7BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,IAAI;IACjBC,eAAe,EAAE,KAAK;IACtBC,wBAAwB,EAAE,KAAK;IAC/BC,cAAc,EAAE,IAAI;IACpB9B,gBAAgB,EAAE,IAAI;IACtB+B,mBAAmB,EAAE,IAAI;IACzBC,qBAAqB,EAAE,IAAI;IAC3BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,IAAI;IAC/BC,6BAA6B,EAAE,EAAE;IACjCC,iCAAiC,EAAE;EAAI,CAAC,EAC5C;IACIhB,OAAO,EAAE,UAAU;IACnBrB,UAAU,EAAE,WAAW;IACvBj8F,OAAO,EAAE,WAAW;IACxBu9F,UAAU,EAAE,CACJ,iBAAiB,EACjB,WAAW,CAAC;IACpB5D,SAAS,EAAE,UAAU;IACrBb,YAAY,EAAE,EAAE;IAChB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,IAAI;IAC5BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,IAAI;IAC7BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,IAAI;IACjBC,eAAe,EAAE,KAAK;IACtBC,wBAAwB,EAAE,KAAK;IAC/BC,cAAc,EAAE,IAAI;IACpB9B,gBAAgB,EAAE,IAAI;IACtB+B,mBAAmB,EAAE,IAAI;IACzBC,qBAAqB,EAAE,IAAI;IAC3BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,IAAI;IAC/BC,6BAA6B,EAAE,EAAE;IACjCC,iCAAiC,EAAE;EAAI,CAAC,EACxC;IACIhB,OAAO,EAAE,MAAM;IACfrB,UAAU,EAAE,MAAM;IAClBj8F,OAAO,EAAE,MAAM;IACnBu9F,UAAU,EAAE,CACR,WAAW,EACX,MAAM,CAAC;IACX5D,SAAS,EAAE,UAAU;IACrBb,YAAY,EAAE,EAAE;IAChB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,KAAK;IAC7BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,IAAI;IAC7BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,KAAK;IAClBC,eAAe,EAAE,KAAK;IACtBC,wBAAwB,EAAE,KAAK;IAC/BC,cAAc,EAAE,IAAI;IACpB9B,gBAAgB,EAAE,IAAI;IACtB+B,mBAAmB,EAAE,IAAI;IACzBC,qBAAqB,EAAE,IAAI;IAC3BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,IAAI;IAC/BC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,EACzC;IACIhB,OAAO,EAAE,OAAO;IAChBrB,UAAU,EAAE,OAAO;IACnBj8F,OAAO,EAAE,OAAO;IACpBu9F,UAAU,EAAE,CACR,mBAAmB,EACnB,YAAY,CAAC;IACjB5D,SAAS,EAAE,UAAU;IACrBb,YAAY,EAAE,EAAE;IAChB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,IAAI;IAC5BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,IAAI;IAC7BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,KAAK;IAClBC,eAAe,EAAE,IAAI;IACrBC,wBAAwB,EAAE,IAAI;IAC9BC,cAAc,EAAE,IAAI;IACpB9B,gBAAgB,EAAE,IAAI;IACtB+B,mBAAmB,EAAE,KAAK;IAC1BC,qBAAqB,EAAE,KAAK;IAC5BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,KAAK;IAChCC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,EACzC;IACIhB,OAAO,EAAE,QAAQ;IACjBrB,UAAU,EAAE,QAAQ;IACpBj8F,OAAO,EAAE,QAAQ;IACrBu9F,UAAU,EAAE,CACR,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EACR,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,CAAC;IAC1E5D,SAAS,EAAE,aAAa;IACxBb,YAAY,EAAE,EAAE;IAChB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,IAAI;IAC5BC,yBAAyB,EAAE,KAAK;IAChCC,uBAAuB,EAAE,KAAK;IAC9BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,KAAK;IAClBC,eAAe,EAAE,KAAK;IACtBC,wBAAwB,EAAE,KAAK;IAC/BC,cAAc,EAAE,KAAK;IACrB9B,gBAAgB,EAAE,IAAI;IACtB+B,mBAAmB,EAAE,KAAK;IAC1BC,qBAAqB,EAAE,IAAI;IAC3BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,IAAI;IAC/BC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,EACzC;IACIhB,OAAO,EAAE,UAAU;IACnBrB,UAAU,EAAE,UAAU;IACtBj8F,OAAO,EAAE,UAAU;IACvBu9F,UAAU,EAAE,CACR,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,CAAC;IACzB5D,SAAS,EAAE,UAAU;IACrBb,YAAY,EAAE,EAAE;IAChB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,IAAI;IAC5BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,IAAI;IAC7BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,IAAI;IACjBC,eAAe,EAAE,KAAK;IACtBC,wBAAwB,EAAE,KAAK;IAC/BC,cAAc,EAAE,IAAI;IACpB9B,gBAAgB,EAAE,IAAI;IACtB+B,mBAAmB,EAAE,KAAK;IAC1BC,qBAAqB,EAAE,KAAK;IAC5BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,KAAK;IAChCC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,EACzC;IACIhB,OAAO,EAAE,UAAU;IACnBrB,UAAU,EAAE,UAAU;IACtBj8F,OAAO,EAAE,UAAU;IACvBu9F,UAAU,EAAE,CACR,sBAAsB,EACtB,oBAAoB,CAAC;IACzB5D,SAAS,EAAE,UAAU;IACrBb,YAAY,EAAE,EAAE;IAChB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,IAAI;IAC5BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,IAAI;IAC7BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,KAAK;IAClBC,eAAe,EAAE,IAAI;IACrBC,wBAAwB,EAAE,IAAI;IAC9BC,cAAc,EAAE,KAAK;IACrB9B,gBAAgB,EAAE,IAAI;IACtB+B,mBAAmB,EAAE,KAAK;IAC1BC,qBAAqB,EAAE,KAAK;IAC5BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,KAAK;IAChCC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,EACzC;IACIhB,OAAO,EAAE,UAAU;IACnBrB,UAAU,EAAE,UAAU;IACtBj8F,OAAO,EAAE,UAAU;IACvBu9F,UAAU,EAAE,CACR,sBAAsB,EACtB,oBAAoB,CAAC;IACzB5D,SAAS,EAAE,UAAU;IACrBb,YAAY,EAAE,EAAE;IAChB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,IAAI;IAC5BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,IAAI;IAC7BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,KAAK;IAClBC,eAAe,EAAE,IAAI;IACrBC,wBAAwB,EAAE,IAAI;IAC9BC,cAAc,EAAE,KAAK;IACrB9B,gBAAgB,EAAE,IAAI;IACtB+B,mBAAmB,EAAE,KAAK;IAC1BC,qBAAqB,EAAE,KAAK;IAC5BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,KAAK;IAChCC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,EACzC;IACIhB,OAAO,EAAE,SAAS;IAClBrB,UAAU,EAAE,UAAU;IACtBj8F,OAAO,EAAE,UAAU;IACvBu9F,UAAU,EAAE,EAAE;IACd5D,SAAS,EAAE,cAAc;IACzBb,YAAY,EAAE,MAAM;IACpB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,KAAK;IAC7BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,KAAK;IAC9BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,KAAK;IAClBC,eAAe,EAAE,IAAI;IACrBC,wBAAwB,EAAE,KAAK;IAC/BC,cAAc,EAAE,IAAI;IACpB9B,gBAAgB,EAAE,KAAK;IACvB+B,mBAAmB,EAAE,KAAK;IAC1BC,qBAAqB,EAAE,KAAK;IAC5BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,KAAK;IAChCC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,EACzC;IACIhB,OAAO,EAAE,SAAS;IAClBrB,UAAU,EAAE,UAAU;IACtBj8F,OAAO,EAAE,UAAU;IACvBu9F,UAAU,EAAE,EAAE;IACd5D,SAAS,EAAE,cAAc;IACzBb,YAAY,EAAE,MAAM;IACpB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,KAAK;IAC7BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,KAAK;IAC9BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,KAAK;IAClBC,eAAe,EAAE,IAAI;IACrBC,wBAAwB,EAAE,KAAK;IAC/BC,cAAc,EAAE,IAAI;IACpB9B,gBAAgB,EAAE,KAAK;IACvB+B,mBAAmB,EAAE,KAAK;IAC1BC,qBAAqB,EAAE,KAAK;IAC5BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,KAAK;IAChCC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,EACzC;IACIhB,OAAO,EAAE,SAAS;IAClBrB,UAAU,EAAE,UAAU;IACtBj8F,OAAO,EAAE,UAAU;IACvBu9F,UAAU,EAAE,EAAE;IACd5D,SAAS,EAAE,cAAc;IACzBb,YAAY,EAAE,MAAM;IACpB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,KAAK;IAC7BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,KAAK;IAC9BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,KAAK;IAClBC,eAAe,EAAE,IAAI;IACrBC,wBAAwB,EAAE,KAAK;IAC/BC,cAAc,EAAE,IAAI;IACpB9B,gBAAgB,EAAE,KAAK;IACvB+B,mBAAmB,EAAE,KAAK;IAC1BC,qBAAqB,EAAE,KAAK;IAC5BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,KAAK;IAChCC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,EACzC;IACIhB,OAAO,EAAE,aAAa;IACtBrB,UAAU,EAAE,eAAe;IAC3Bj8F,OAAO,EAAE,eAAe;IAC5Bu9F,UAAU,EAAE,EAAE;IACd5D,SAAS,EAAE,cAAc;IACzBb,YAAY,EAAE,MAAM;IACpB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,KAAK;IAC7BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,KAAK;IAC9BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,KAAK;IAClBC,eAAe,EAAE,IAAI;IACrBC,wBAAwB,EAAE,KAAK;IAC/BC,cAAc,EAAE,IAAI;IACpB9B,gBAAgB,EAAE,KAAK;IACvB+B,mBAAmB,EAAE,KAAK;IAC1BC,qBAAqB,EAAE,KAAK;IAC5BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,KAAK;IAChCC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,EACzC;IACIhB,OAAO,EAAE,SAAS;IAClBrB,UAAU,EAAE,UAAU;IACtBj8F,OAAO,EAAE,UAAU;IACvBu9F,UAAU,EAAE,EAAE;IACd5D,SAAS,EAAE,cAAc;IACzBb,YAAY,EAAE,MAAM;IACpB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,KAAK;IAC7BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,KAAK;IAC9BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,KAAK;IAClBC,eAAe,EAAE,IAAI;IACrBC,wBAAwB,EAAE,KAAK;IAC/BC,cAAc,EAAE,IAAI;IACpB9B,gBAAgB,EAAE,KAAK;IACvB+B,mBAAmB,EAAE,KAAK;IAC1BC,qBAAqB,EAAE,KAAK;IAC5BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,KAAK;IAChCC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,EACzC;IACIhB,OAAO,EAAE,QAAQ;IACjBrB,UAAU,EAAE,SAAS;IACrBj8F,OAAO,EAAE,SAAS;IACtBu9F,UAAU,EAAE,CAAC,WAAW,EACxB,WAAW,CAAC;IACZ5D,SAAS,EAAE,UAAU;IACrBb,YAAY,EAAE,UAAU;IACxB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,KAAK;IAC7BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,KAAK;IAC9BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,KAAK;IAClBC,eAAe,EAAE,IAAI;IACrBC,wBAAwB,EAAE,KAAK;IAC/BC,cAAc,EAAE,IAAI;IACpB9B,gBAAgB,EAAE,KAAK;IACvB+B,mBAAmB,EAAE,KAAK;IAC1BC,qBAAqB,EAAE,KAAK;IAC5BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,KAAK;IAChCC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,EACzC;IACIhB,OAAO,EAAE,QAAQ;IACjBrB,UAAU,EAAE,SAAS;IACrBj8F,OAAO,EAAE,SAAS;IACtBu9F,UAAU,EAAE,CAAC,WAAW,EACxB,WAAW,CAAC;IACZ5D,SAAS,EAAE,UAAU;IACrBb,YAAY,EAAE,UAAU;IACxB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,KAAK;IAC7BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,KAAK;IAC9BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,KAAK;IAClBC,eAAe,EAAE,IAAI;IACrBC,wBAAwB,EAAE,KAAK;IAC/BC,cAAc,EAAE,IAAI;IACpB9B,gBAAgB,EAAE,KAAK;IACvB+B,mBAAmB,EAAE,KAAK;IAC1BC,qBAAqB,EAAE,KAAK;IAC5BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,KAAK;IAChCC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,EACzC;IACIhB,OAAO,EAAE,OAAO;IAChBrB,UAAU,EAAE,OAAO;IACnBj8F,OAAO,EAAE,OAAO;IACpBu9F,UAAU,EAAE,EAAE;IACd5D,SAAS,EAAE,QAAQ;IACnBb,YAAY,EAAE,QAAQ;IACtB0E,SAAS,EAAE,CAAC;IAAE;IACdC,sBAAsB,EAAE,IAAI;IAC5BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,KAAK;IAC9BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,KAAK;IAClBC,eAAe,EAAE,KAAK;IACtBC,wBAAwB,EAAE,KAAK;IAC/BC,cAAc,EAAE,IAAI;IACpB9B,gBAAgB,EAAE,IAAI;IACtB+B,mBAAmB,EAAE,KAAK;IAC1BC,qBAAqB,EAAE,KAAK;IAC5BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,KAAK;IAChCC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,EACzC;IACIhB,OAAO,EAAE,WAAW;IACpBrB,UAAU,EAAE,mBAAmB;IAC/Bj8F,OAAO,EAAE,mBAAmB;IAChCu9F,UAAU,EAAE,EAAE;IACd5D,SAAS,EAAE,UAAU;IACrBb,YAAY,EAAE,UAAU;IACxB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,KAAK;IAC7BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,KAAK;IAC9BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,KAAK;IAClBC,eAAe,EAAE,IAAI;IACrBC,wBAAwB,EAAE,KAAK;IAC/BC,cAAc,EAAE,IAAI;IACpB9B,gBAAgB,EAAE,KAAK;IACvB+B,mBAAmB,EAAE,KAAK;IAC1BC,qBAAqB,EAAE,KAAK;IAC5BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,KAAK;IAChCC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,EACzC;IACIhB,OAAO,EAAE,WAAW;IACpBrB,UAAU,EAAE,mBAAmB;IAC/Bj8F,OAAO,EAAE,mBAAmB;IAChCu9F,UAAU,EAAE,EAAE;IACd5D,SAAS,EAAE,UAAU;IACrBb,YAAY,EAAE,UAAU;IACxB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,KAAK;IAC7BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,KAAK;IAC9BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,KAAK;IAClBC,eAAe,EAAE,IAAI;IACrBC,wBAAwB,EAAE,KAAK;IAC/BC,cAAc,EAAE,IAAI;IACpB9B,gBAAgB,EAAE,KAAK;IACvB+B,mBAAmB,EAAE,KAAK;IAC1BC,qBAAqB,EAAE,KAAK;IAC5BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,KAAK;IAChCC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,EACzC;IACIhB,OAAO,EAAE,WAAW;IACpBrB,UAAU,EAAE,mBAAmB;IAC/Bj8F,OAAO,EAAE,mBAAmB;IAChCu9F,UAAU,EAAE,EAAE;IACd5D,SAAS,EAAE,UAAU;IACrBb,YAAY,EAAE,UAAU;IACxB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,KAAK;IAC7BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,KAAK;IAC9BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,KAAK;IAClBC,eAAe,EAAE,IAAI;IACrBC,wBAAwB,EAAE,KAAK;IAC/BC,cAAc,EAAE,IAAI;IACpB9B,gBAAgB,EAAE,KAAK;IACvB+B,mBAAmB,EAAE,KAAK;IAC1BC,qBAAqB,EAAE,KAAK;IAC5BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,KAAK;IAChCC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,EACzC;IACIhB,OAAO,EAAE,WAAW;IACpBrB,UAAU,EAAE,mBAAmB;IAC/Bj8F,OAAO,EAAE,mBAAmB;IAChCu9F,UAAU,EAAE,EAAE;IACd5D,SAAS,EAAE,UAAU;IACrBb,YAAY,EAAE,UAAU;IACxB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,KAAK;IAC7BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,KAAK;IAC9BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,KAAK;IAClBC,eAAe,EAAE,IAAI;IACrBC,wBAAwB,EAAE,KAAK;IAC/BC,cAAc,EAAE,IAAI;IACpB9B,gBAAgB,EAAE,KAAK;IACvB+B,mBAAmB,EAAE,KAAK;IAC1BC,qBAAqB,EAAE,KAAK;IAC5BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,KAAK;IAChCC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,EACzC;IACIhB,OAAO,EAAE,WAAW;IACpBrB,UAAU,EAAE,mBAAmB;IAC/Bj8F,OAAO,EAAE,mBAAmB;IAChCu9F,UAAU,EAAE,EAAE;IACd5D,SAAS,EAAE,UAAU;IACrBb,YAAY,EAAE,UAAU;IACxB0E,SAAS,EAAE,CAAC;IACZC,sBAAsB,EAAE,KAAK;IAC7BC,yBAAyB,EAAE,IAAI;IAC/BC,uBAAuB,EAAE,KAAK;IAC9BC,2BAA2B,EAAE,IAAI;IACjCC,WAAW,EAAE,KAAK;IAClBC,eAAe,EAAE,IAAI;IACrBC,wBAAwB,EAAE,KAAK;IAC/BC,cAAc,EAAE,IAAI;IACpB9B,gBAAgB,EAAE,KAAK;IACvB+B,mBAAmB,EAAE,KAAK;IAC1BC,qBAAqB,EAAE,KAAK;IAC5BC,gBAAgB,EAAE,IAAI;IACtBC,yBAAyB,EAAE,KAAK;IAChCC,6BAA6B,EAAE,CAAC;IAChCC,iCAAiC,EAAE;EAAK,CAAC,CAAC;AAE9C,CAAC,CAAC,CAAC,C;;;;;;;;;;;ACzrEHhgH,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,6BAA6B,EAAE,CAChE,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,eAAe,EACf,cAAc,EACd,eAAe,EACf,IAAI,EACJ,0BAA0B,EAC1B,UAAU,EACV,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,UAASC,MAAM,EAAEC,UAAU,EAAEupB,YAAY,EAAE/oB,cAAc,EAAEJ,aAAa,EAAEG,QAAQ,EAAEN,aAAa,EAAEC,YAAY,EAAEu8C,aAAa,EAAE/7C,EAAE,EAAEo/G,wBAAwB,EAAEr3D,QAAQ,EAAEs3D,iBAAiB,EAAEC,YAAY,EAAEv2F,aAAa,EAAE;EACpN,IAAI,CAACF,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;IACA;EACJ;EAEA,IAAI81F,mBAAmB,GAAG,KAAK;EAE/BlgH,MAAM,CAACmC,IAAI,GAAG;IAAEgb,MAAM,EAAE9d,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAG;EAAK,CAAC;EACzDpC,MAAM,CAACmgH,KAAK,GAAG;IAAEhjG,MAAM,EAAE9d,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAG;EAAK,CAAC;EAC1DpC,MAAM,CAAC2wF,YAAY,GAAGzwF,aAAa,CAACqkB,2BAA2B,KAAK,IAAI;EAExEvkB,MAAM,CAACogH,kBAAkB,GAAG,EAAE;EAC9BpgH,MAAM,CAACmB,IAAI,GAAG,EAAE;EAChBnB,MAAM,CAACqgH,SAAS,GAAG,CAAC;EACpBrgH,MAAM,CAACsgH,QAAQ,GAAG,CAAC;EACnBtgH,MAAM,CAACugH,eAAe,GAAG,CAAC;EAC1BvgH,MAAM,CAACu5B,WAAW,GAAG,GAAG,CAAC;EACzBv5B,MAAM,CAACkJ,SAAS,GAAG,KAAK;EACxBlJ,MAAM,CAACs5B,UAAU,GAAG,CAAC;EACrBt5B,MAAM,CAACw5B,YAAY,GAAG,IAAI;EAE1Bx5B,MAAM,CAACwgH,WAAW,GAAG,EAAE;EACvBxgH,MAAM,CAACwgH,WAAW,CAACC,MAAM,GAAG,CAAC;EAC7BzgH,MAAM,CAACgW,OAAO,GAAG,CAAC,CAAC;EACnBhW,MAAM,CAACggD,OAAO,GAAG,EAAE;EACnBhgD,MAAM,CAAC0gH,YAAY,GAAG,EAAE;EACxB1gH,MAAM,CAAC2gH,cAAc,GAAG,EAAE;EAC1B3gH,MAAM,CAAC4gH,aAAa,GAAG,EAAE;EACzB5gH,MAAM,CAAC6gH,UAAU,GAAG,EAAE;EACtB7gH,MAAM,CAAC8gH,OAAO,GAAG,EAAE;EACnB9gH,MAAM,CAACT,MAAM,GAAGW,aAAa,CAACX,MAAM;EAEpCS,MAAM,CAAC+gH,UAAU,GAAG,CAAC;EACrB/gH,MAAM,CAACghH,WAAW,GAAG,CAAC;EACtBhhH,MAAM,CAACihH,MAAM,GAAE,CACf,CAAC;EAEDjhH,MAAM,CAACkhH,cAAc,GAAGhhH,aAAa,CAACghH,cAAc;EACpDlhH,MAAM,CAACmhH,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAACrqG,GAAG,CAAC,UAAS9Q,CAAC,EAAE;IAChE,OAAO;MACH2iC,CAAC,EAAE3iC,CAAC;MACJ4D,IAAI,EAAE,WAAW,GAAG5D,CAAC,CAAC;IAC1B,CAAC;EACL,CAAC,CAAC;EACFhG,MAAM,CAACohH,cAAc,GAAGnB,YAAY,CAAC1nB,iBAAiB,CAAC,CAAC;EAExDv4F,MAAM,CAAC0I,MAAM,CAAC,oBAAoB,EAAE,UAASC,QAAQ,EAAEC,QAAQ,EAAE;IAC7D,IAAID,QAAQ,IAAIC,QAAQ,EAAE;MACtB5I,MAAM,CAACqhH,kBAAkB,CAAC,CAAC;MAC3B,OAAO14G,QAAQ;IACnB;EACJ,CAAC,CAAC;EAEF3I,MAAM,CAAC0I,MAAM,CAAC,MAAM,EAAE,UAAU0iD,MAAM,EAAEC,MAAM,EAAE;IAC5C7qD,QAAQ,CAAC,YAAU;MACfP,UAAU,CAAC+K,UAAU,CAAC,aAAa,EAAEogD,MAAM,CAAC;IAChD,CAAC,CAAC;EACN,CAAC,CAAC;EAEFprD,MAAM,CAAC0I,MAAM,CAAC,iBAAiB,EAAE,UAAS0iD,MAAM,EAAEC,MAAM,EAAC;IACrD7qD,QAAQ,CAAC,YAAU;MACf,IAAG4qD,MAAM,KAAKC,MAAM,KAAKD,MAAM,KAAK,eAAe,IAAIC,MAAM,KAAK,eAAe,CAAC,EAC9EnmD,WAAW,CAAC,CAAC;IACrB,CAAC,CAAC;EACN,CAAC,CAAC;EAEFlF,MAAM,CAACwpD,QAAQ,GAAG,YAAW;IACzBxpD,MAAM,CAACqgH,SAAS,GAAG,CAAC;IACpBrgH,MAAM,CAACugH,eAAe,GAAG,CAAC;IAC1BvgH,MAAM,CAACsgH,QAAQ,GAAG,CAAC;IACnBtgH,MAAM,CAACshH,oBAAoB,GAAGphH,aAAa,CAACuuC,uBAAuB,CAAC,IAAI,CAAC;IAEzE,IAAIvL,CAAC,GAAGwZ,aAAa,CAACuyD,aAAa,CAAC/uG,aAAa,CAACmkC,WAAW,EAAE,IAAI,CAAC,CAACrgC,IAAI,CAAC,UAASE,IAAI,EAAE;MACrF,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzB;MACA1L,OAAO,CAAC4M,OAAO,CAACxI,IAAI,CAACg7C,OAAO,EAAE,UAASt/C,EAAE,EAAE;QACvCI,MAAM,CAACggD,OAAO,CAAC35C,IAAI,CAAC;UAChBuD,IAAI,EAAEhK,EAAE,CAAC8qB,UAAU;UACnBlgB,EAAE,EAAE5K,EAAE,CAAC6rC;QACX,CAAC,CAAC;MACN,CAAC,CAAC;MACFlgC,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MACtB,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,IAAIsR,GAAG,GAAG+iG,wBAAwB,CAACwB,OAAO,CAAC,CAAC,CAACv9G,IAAI,CAAC,UAASE,IAAI,EAAE;MAC7D,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzB;MACAxL,MAAM,CAACm3E,MAAM,GAAGjzE,IAAI,CAACA,IAAI,CAACizE,MAAM;MAChCn3E,MAAM,CAACo3E,UAAU,GAAGlzE,IAAI,CAACA,IAAI,CAACkzE,UAAU;MACxCp3E,MAAM,CAACwhH,KAAK,GAAGt9G,IAAI,CAACA,IAAI,CAACs9G,KAAK;MAC9BxhH,MAAM,CAACm+C,SAAS,GAAGj6C,IAAI,CAACA,IAAI,CAACi6C,SAAS;MACtCn+C,MAAM,CAACyhH,eAAe,GAAGv9G,IAAI,CAACA,IAAI,CAACu9G,eAAe;MAClDzhH,MAAM,CAAC0hH,cAAc,GAAGx9G,IAAI,CAACA,IAAI,CAACw9G,cAAc;MAChD1hH,MAAM,CAAC2hH,KAAK,GAAGz9G,IAAI,CAACA,IAAI,CAACy9G,KAAK;MAC9B3hH,MAAM,CAAC4hH,eAAe,GAAG19G,IAAI,CAACA,IAAI,CAAC09G,eAAe;MAElD99G,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAACyhH,eAAe,EAAE,UAASjtG,CAAC,EAAE1K,IAAI,EAAE;QAC7CA,IAAI,CAAC+3G,KAAK,GAAG,sBAAsB,GAAG/3G,IAAI,CAAC+3D,IAAI;MACnD,CAAC,CAAC;MACFt2D,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MACtB,OAAOqH,QAAQ,CAACG,OAAO;MACvB;IACJ,CAAC,CAAC;IAEF,IAAIo2G,KAAK,GAAG/B,wBAAwB,CAACgC,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC/9G,IAAI,CAAC,UAASE,IAAI,EAAE;MAC5F,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBxL,MAAM,CAAC2gH,cAAc,GAAGz8G,IAAI,CAACA,IAAI,CAACyW,IAAI;;MAEtC;MACApP,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MACtB,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAO/K,EAAE,CAACgxB,GAAG,CAAC,CAACuR,CAAC,EAAElmB,GAAG,EAAE8kG,KAAK,CAAC,CAAC;EAClC,CAAC;EAED9hH,MAAM,CAACgiH,QAAQ,GAAG,UAASC,OAAO,EAAE;IAChC,IAAI//B,YAAY,GAAG,EAAE;IAErB,IAAIliF,MAAM,CAACgW,OAAO,CAACksG,WAAW,EAAE;MAC5BhgC,YAAY,GAAGliF,MAAM,CAACgW,OAAO,CAACksG,WAAW;IAC7C;IAEApiH,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAAC8gH,OAAO,EAAE,UAASqB,OAAO,EAAE9hE,GAAG,EAAE;MACnD8hE,OAAO,CAAC,CAAC;IACb,CAAC,CAAC;IAEFniH,MAAM,CAAC8gH,OAAO,GAAG,EAAE;IAEnB,IAAIp1G,OAAO,GAAGq0G,wBAAwB,CAACqC,eAAe,CAACpiH,MAAM,CAACsgH,QAAQ,EAAEtgH,MAAM,CAACu5B,WAAW,EAAE2oD,YAAY,EAAE+/B,OAAO,CAAC,CAACj+G,IAAI,CAAC,UAASE,IAAI,EAAE;MACnI,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBxL,MAAM,CAAC0gH,YAAY,GAAG,EAAE;MACxB;MACA1gH,MAAM,CAACqgH,SAAS,GAAGn8G,IAAI,CAACA,IAAI,CAAC60B,KAAK;MAClC/4B,MAAM,CAACsgH,QAAQ,GAAGp8G,IAAI,CAACA,IAAI,CAACm+G,IAAI;MAChCriH,MAAM,CAACugH,eAAe,GAAGr8G,IAAI,CAACA,IAAI,CAACm+G,IAAI;MAEvCviH,OAAO,CAAC4M,OAAO,CAACxI,IAAI,CAACA,IAAI,CAAC2mD,IAAI,EAAE,UAASjrD,EAAE,EAAE;QACzCA,EAAE,CAACy0E,QAAQ,GAAG,KAAK;QACnBz0E,EAAE,CAAC0iH,UAAU,GAAG,KAAK;QACrB1iH,EAAE,CAAC6a,WAAW,GAAG7a,EAAE,CAACiiE,IAAI;QACxB7hE,MAAM,CAAC0gH,YAAY,CAACr6G,IAAI,CAACzG,EAAE,CAAC;MAChC,CAAC,CAAC;MAEFE,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAAC0gH,YAAY,EAAE,UAAS6B,OAAO,EAAEliE,GAAG,EAAE;QACxD,IAAI8hE,OAAO,GAAGniH,MAAM,CAAC0I,MAAM,CAAC,eAAe,GAAG23C,GAAG,GAAG,cAAc,EAAE,UAAS13C,QAAQ,EAAEC,QAAQ,EAAE;UAC7F,IAAID,QAAQ,IAAI,IAAI,IAAI,CAAC45G,OAAO,CAAC/nG,OAAO,EAAE;YACtC+nG,OAAO,CAACD,UAAU,GAAG,KAAK;YAC1Bx+G,CAAC,CAAC,cAAc,GAAGy+G,OAAO,CAACn/G,EAAE,GAAG,IAAI,CAAC,CAACw7D,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;YAC3Ez+D,YAAY,CAACiE,SAAS,CAAC,+BAA+B,CAAC;UAC3D,CAAC,MAAM,CACP;UACA;QACJ,CAAC,CAAC;QAEFpE,MAAM,CAAC8gH,OAAO,CAACz6G,IAAI,CAAC87G,OAAO,CAAC;MAChC,CAAC,CAAC;MAEF/nF,QAAQ,CAACl2B,IAAI,CAACA,IAAI,CAAC60B,KAAK,CAAC;MAEzBxtB,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MACtB,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOA,OAAO;EAClB,CAAC;EAED,SAAS0uB,QAAQA,CAAClO,KAAK,EAAE;IACrB,IAAIqO,IAAI,GAAGv6B,MAAM,CAACu5B,WAAW;IAC7Bv5B,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAC3Cv6B,MAAM,CAACw5B,YAAY,GAAGtN,KAAK;IAC3B,IAAIlsB,MAAM,CAACs5B,UAAU,KAAK,CAAC,EAAE;MACzBt5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;IACzB;EACJ;EAEAt5B,MAAM,CAACs6B,MAAM,GAAG,YAAW;IACvBx2B,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX/D,MAAM,CAACsgH,QAAQ,GAAG,CAAC;IACnBtgH,MAAM,CAACugH,eAAe,GAAG,CAAC;IAE1B,IAAI5/D,IAAI,GAAG,CAAC,CAAC;IAEb3gD,MAAM,CAACgiH,QAAQ,CAACrhE,IAAI,CAAC,WAAQ,CAAC,YAAW;MACrC78C,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACN,CAAC;EAEDrE,MAAM,CAAC6rB,MAAM,GAAG,YAAW;IACvB/nB,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX/D,MAAM,CAACwpD,QAAQ,CAAC,CAAC;IAEjB,IAAI7I,IAAI,GAAG,CAAC,CAAC;IAEb3gD,MAAM,CAACgiH,QAAQ,CAACrhE,IAAI,CAAC,WAAQ,CAAC,YAAW;MACrC78C,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACN,CAAC;EAED,IAAMy1B,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAA,EAAc;IACzC,IAAI,CAAC95B,MAAM,CAACkJ,SAAS,IAAIlJ,MAAM,CAACsgH,QAAQ,GAAGtgH,MAAM,CAACs5B,UAAU,EAAE;MAC1Dx1B,CAAC,CAACC,OAAO,CAAC,CAAC;MACX/D,MAAM,CAACkJ,SAAS,GAAG,IAAI;MACvBlJ,MAAM,CAACsgH,QAAQ,EAAE;MAEjB,IAAI3/D,IAAI,GAAG,CAAC,CAAC;MAEb,IAAIuhC,YAAY,GAAG,EAAE;MAErB,IAAIliF,MAAM,CAACgW,OAAO,CAACksG,WAAW,EAAE;QAC5BhgC,YAAY,GAAGliF,MAAM,CAACgW,OAAO,CAACksG,WAAW;MAC7C;MAEAnC,wBAAwB,CAACqC,eAAe,CAACpiH,MAAM,CAACsgH,QAAQ,EAAEtgH,MAAM,CAACu5B,WAAW,EAAE2oD,YAAY,EAAEvhC,IAAI,CAAC,CAAC38C,IAAI,CAClG,UAASE,IAAI,EAAE;QACXJ,CAAC,CAACmC,IAAI,CAAC/B,IAAI,CAACA,IAAI,CAAC2mD,IAAI,EAAE,UAAS3kD,GAAG,EAAEtG,EAAE,EAAE;UACrC,IACII,MAAM,CAAC0gH,YAAY,CAAC36G,MAAM,CAAC,UAASo0B,GAAG,EAAE;YACrC,OAAOA,GAAG,CAAC/2B,EAAE,KAAKxD,EAAE,CAACwD,EAAE;UAC3B,CAAC,CAAC,CAACgD,MAAM,KAAK,CAAC,EACjB;YACExG,EAAE,CAACy0E,QAAQ,GAAG,KAAK;YACnBz0E,EAAE,CAAC0iH,UAAU,GAAG,KAAK;YACrB1iH,EAAE,CAAC6a,WAAW,GAAG7a,EAAE,CAACiiE,IAAI;YACxB7hE,MAAM,CAAC0gH,YAAY,CAACr6G,IAAI,CAACzG,EAAE,CAAC;UAChC;QACJ,CAAC,CAAC;QACFI,MAAM,CAACkJ,SAAS,GAAG,KAAK;QACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,EACD,UAASF,GAAG,EAAE;QACVnE,MAAM,CAACkJ,SAAS,GAAG,KAAK;QACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/B,CACJ,CAAC;IACL;EACJ,CAAC;EAEDk2B,iBAAiB,CAACP,yBAAyB,CAAC;EAE5C95B,MAAM,CAACqC,GAAG,CAAC,UAAU,EAAE,YAAW;IAC9B,IAAI69G,mBAAmB,EAAE;MACrBjgH,UAAU,CAAC+K,UAAU,CAAC,wBAAwB,CAAC;MAC/Ck1G,mBAAmB,GAAG,KAAK;IAC/B;EACJ,CAAC,CAAC;;EAEF;EACA1/G,QAAQ,CAAC,YAAW;IAChBR,MAAM,CAACmB,IAAI,GAAG,YAAY;EAC9B,CAAC,CAAC;EAEFnB,MAAM,CAACwiH,aAAa,GAAG,IAAI;EAE3BxiH,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,UAAS2W,GAAG,EAAE;IACpCxY,QAAQ,CAAC,YAAW;MAChB,IAAIR,MAAM,CAACwiH,aAAa,EAAE;QACtBxiH,MAAM,CAACwiH,aAAa,GAAG,KAAK;QAE5B1+G,CAAC,CAAC,6BAA6B,CAAC,CAAC8D,MAAM,CAAC;UACpCJ,YAAY,EAAE,IAAI;UAClBC,oBAAoB,EAAE,kBAAkB;UACxCC,uBAAuB,EAAE;QAC7B,CAAC,CAAC;QACFxC,WAAW,CAAC,CAAC;MACjB,CAAC,MAAM;QACHpB,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MACzC;IACJ,CAAC,EAAE,CAAC,CAAC;IAEL,IAAIxE,MAAM,CAACmB,IAAI,KAAK,QAAQ,EAAE;MAC1BnB,MAAM,CAACyiH,cAAc,CAAC,CAAC;IAC3B;EACJ,CAAC,CAAC;EAEFziH,MAAM,CAAC0iH,UAAU,GAAG,UAAStnF,IAAI,EAAE;IAC/Bt3B,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACsgH,QAAQ,GAAGllF,IAAI;IACtBp7B,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;EACvC,CAAC;EAEDhL,MAAM,CAAC2iH,MAAM,GAAG,YAAW;IACvB7+G,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAI/D,MAAM,CAACmB,IAAI,KAAK,KAAK,IAAInB,MAAM,CAACmB,IAAI,KAAK,MAAM,IAAInB,MAAM,CAACmB,IAAI,KAAK,QAAQ,EAAE;MAC7EnB,MAAM,CAACgL,UAAU,CAAC,gBAAgB,CAAC;IACvC;IAEAhL,MAAM,CAACmB,IAAI,GAAG,YAAY;IAC1BnB,MAAM,CAACiM,YAAY,CAAC,CAAC;IACrB;EACJ,CAAC;EAEDjM,MAAM,CAACiM,YAAY,GAAG,YAAW;IAC7B,IAAI4hB,cAAc,GAAG/pB,CAAC,CAAC,kBAAkB,CAAC;IAC1CzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAACqY,gBAAgB,GAAG,IAAI;EAE9B,SAASuqG,iBAAiBA,CAACC,aAAa,EAAE;IACtC,IAAIh1F,cAAc,GAAG/pB,CAAC,CAAC,kBAAkB,CAAC;IAC1CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,EAAE,YAAW;MAChD,IAAI7tB,MAAM,CAACqY,gBAAgB,EAAE;QACzBrY,MAAM,CAACqY,gBAAgB,GAAG,KAAK;QAE/BnT,WAAW,CAAC,CAAC;MACjB,CAAC,MAAM;QACHpB,CAAC,CAAC,yBAAyB,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MACnD;MAEA,IAAG,CAACtE,aAAa,CAAC2L,QAAQ,EAC1B;QACI,IAAIg3G,aAAa,EAAEA,aAAa,CAACz9G,KAAK,CAAC,CAAC,CAAC,KACpCtB,CAAC,CAAC,OAAO,CAAC,CAACsB,KAAK,CAAC,CAAC;MAC3B;IACJ,CAAC,CAAC;EACN;EAEApF,MAAM,CAAC8iH,WAAW,GAAG,UAAS5oG,GAAG,EAAE;IAC/B;IACA0oG,iBAAiB,CAAC,CAAC;IACnB5iH,MAAM,CAAC+iH,WAAW,CAAC7oG,GAAG,CAAC;IACvBla,MAAM,CAACmB,IAAI,GAAG,MAAM;IACpBX,QAAQ,CAAC,YAAW;MAChBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,EAAE,GAAG,CAAC;EACX,CAAC;EAEDxE,MAAM,CAACgjH,aAAa,GAAG,YAAW;IAC9BJ,iBAAiB,CAAC,CAAC;IACnB5iH,MAAM,CAACijH,aAAa,CAAC,CAAC;IACtBjjH,MAAM,CAACmB,IAAI,GAAG,KAAK;IACnBX,QAAQ,CAAC,YAAW;MAChBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,EAAE,GAAG,CAAC;EACX,CAAC;EAEDxE,MAAM,CAACijH,aAAa,GAAG,YAAW;IAC9BjjH,MAAM,CAACkjH,UAAU,GAAG;MAChBC,kBAAkB,EAAE,CAAC;MACrBC,4BAA4B,EAAE,GAAG;MACjCC,WAAW,EAAE,CAAC;MACd7oG,OAAO,EAAE,EAAE;MACX8jB,OAAO,EAAE,EAAE;MACXuuD,QAAQ,EAAE,EAAE;MACZr4D,aAAa,EAAE,EAAE;MACjB8uF,eAAe,EAAE,EAAE;MACnBC,oBAAoB,EAAE,EAAE;MACxB9b,WAAW,EAAE,EAAE;MACf+b,YAAY,EAAE,GAAG;MACjB9gH,IAAI,EAAE,EAAE;MACR+gH,WAAW,EAAE,OAAO;MACpBnkF,OAAO,EAAE,EAAE;MACXC,OAAO,EAAE,EAAE;MACXC,OAAO,EAAE,EAAE;MACXkkF,UAAU,EAAE,CAAC;MACbC,UAAU,EAAE,CAAC;MACbC,UAAU,EAAE,CAAC;MACbC,UAAU,EAAE,CAAC;MACbC,UAAU,EAAE,CAAC;MACbC,UAAU,EAAE,CAAC;MACbC,UAAU,EAAE,CAAC;MACbC,UAAU,EAAE,CAAC;MACbC,UAAU,EAAE,CAAC;MACbC,WAAW,EAAE,CAAC;MACd1pG,WAAW,EAAE,EAAE;MACf4B,SAAS,EAAE,sCAAsC;MACjDhZ,MAAM,EAAE,GAAG;MACX+gH,gBAAgB,EAAE,EAAE;MACpB/lF,IAAI,EAAE,EAAE;MACRn7B,IAAI,EAAE,EAAE;MACRmhH,cAAc,EAAE,EAAE;MAClB/4B,SAAS,EAAE;IACf,CAAC;;IAED;IACAxrF,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACggD,OAAO,EAAE,UAASpgD,EAAE,EAAE;MACzC,IAAIA,EAAE,CAAC4K,EAAE,KAAKtK,aAAa,CAAC2qC,sBAAsB,EAAE;QAChD7qC,MAAM,CAACkjH,UAAU,CAACzjE,QAAQ,GAAGv/C,aAAa,CAAC2qC,sBAAsB;QACjE,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;EACN,CAAC;EAED7qC,MAAM,CAACskH,aAAa,GAAG,YAAW;IAC9B,IAAIC,KAAK,GAAGvkH,MAAM,CAACmB,IAAI,KAAK,KAAK;IACjC;IACA,IAAGjB,aAAa,CAACgkB,wBAAwB,IAAIlkB,MAAM,CAAC2wF,YAAY,IAC5D3wF,MAAM,CAACkjH,UAAU,CAAC53B,SAAS,IAAItrF,MAAM,CAACkjH,UAAU,CAAC53B,SAAS,CAACllF,MAAM,KAAKlG,aAAa,CAACgkB,wBAAwB,EAAE;MAC1G,IAAI0xB,GAAG,GAAGn1C,cAAc,CAACe,SAAS,CAAC,kEAAkE,EAAE;QAAEC,GAAG,EAAEvB,aAAa,CAACgkB;MAAyB,CAAC,CAAC;MACvJ/jB,YAAY,CAACiE,SAAS,CAACwxC,GAAG,CAAC;MAC3B;IACR;IAEA9xC,CAAC,CAACC,OAAO,CAAC,CAAC;IACXg8G,wBAAwB,CACnBuE,aAAa,CAACtkH,MAAM,CAACkjH,UAAU,EAAEqB,KAAK,CAAC,CACvCvgH,IAAI,CAAC,UAASqF,GAAG,EAAE;MAChBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAAC2iH,MAAM,CAAC,CAAC;MACfzC,mBAAmB,GAAG,IAAI;MAC1B;AACpB;;MAEoB;MACAp8G,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACI,CAAC,UAASF,GAAG,EAAE;MACjBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAAC+iH,WAAW,GAAG,UAAS7oG,GAAG,EAAE;IAC/B;IACA,IAAI6iC,QAAQ,GAAG,OAAO;IACtB,IAAI7iC,GAAG,CAACutF,WAAW,IAAI,IAAI,IAAIvtF,GAAG,CAACutF,WAAW,CAACp4F,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI6K,GAAG,CAACutF,WAAW,CAACp4F,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK6K,GAAG,CAACutF,WAAW,CAACp4F,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI6K,GAAG,CAACutF,WAAW,CAACp4F,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;MACrL0tC,QAAQ,GAAG,MAAM;IACrB;IACA/8C,MAAM,CAACkjH,UAAU,GAAG;MAChBC,kBAAkB,EAAEjpG,GAAG,CAACipG,kBAAkB;MAC1C3oG,OAAO,EAAEN,GAAG,CAACM,OAAO;MACpB8jB,OAAO,EAAEpkB,GAAG,CAACokB,OAAO;MACpBuuD,QAAQ,EAAE3yE,GAAG,CAACqkB,UAAU;MACxB/J,aAAa,EAAEta,GAAG,CAACsa,aAAa;MAChC8uF,eAAe,EAAEppG,GAAG,CAACopG,eAAe;MACpCC,oBAAoB,EAAErpG,GAAG,CAACqpG,oBAAoB;MAC9C9b,WAAW,EAAEvtF,GAAG,CAACutF,WAAW;MAC5B+b,YAAY,EAAEtpG,GAAG,CAACspG,YAAY;MAC9B9gH,IAAI,EAAEwX,GAAG,CAACxX,IAAI;MACdghH,UAAU,EAAExpG,GAAG,CAACwpG,UAAU;MAC1BC,UAAU,EAAEzpG,GAAG,CAACypG,UAAU;MAC1BC,UAAU,EAAE1pG,GAAG,CAAC0pG,UAAU;MAC1BC,UAAU,EAAE3pG,GAAG,CAAC2pG,UAAU;MAC1BC,UAAU,EAAE5pG,GAAG,CAAC4pG,UAAU;MAC1BC,UAAU,EAAE7pG,GAAG,CAAC6pG,UAAU;MAC1BC,UAAU,EAAE9pG,GAAG,CAAC8pG,UAAU;MAC1BC,UAAU,EAAE/pG,GAAG,CAAC+pG,UAAU;MAC1BC,UAAU,EAAEhqG,GAAG,CAACgqG,UAAU;MAC1BC,WAAW,EAAEjqG,GAAG,CAACiqG,WAAW;MAC5BK,aAAa,EAAEtqG,GAAG,CAACsqG,aAAa;MAChCC,aAAa,EAAEvqG,GAAG,CAACuqG,aAAa;MAChCC,aAAa,EAAExqG,GAAG,CAACwqG,aAAa;MAChCC,aAAa,EAAEzqG,GAAG,CAACyqG,aAAa;MAChCC,aAAa,EAAE1qG,GAAG,CAAC0qG,aAAa;MAChCC,aAAa,EAAE3qG,GAAG,CAAC2qG,aAAa;MAChCC,aAAa,EAAE5qG,GAAG,CAAC4qG,aAAa;MAChCC,aAAa,EAAE7qG,GAAG,CAAC6qG,aAAa;MAChCC,aAAa,EAAE9qG,GAAG,CAAC8qG,aAAa;MAChCC,cAAc,EAAE/qG,GAAG,CAAC+qG,cAAc;MAClCxqG,WAAW,EAAEP,GAAG,CAAC2nD,IAAI;MACrBxlD,SAAS,EAAEnC,GAAG,CAAC9W,EAAE;MACjBC,MAAM,EAAE6W,GAAG,CAAC7W,MAAM;MAClB+gH,gBAAgB,EAAElqG,GAAG,CAACkqG,gBAAgB;MACtC/lF,IAAI,EAAEnkB,GAAG,CAACmkB,IAAI;MACdn7B,IAAI,EAAEgX,GAAG,CAAChX,IAAI;MACdmhH,cAAc,EAAEnqG,GAAG,CAACmqG,cAAc;MAClCtnE,QAAQ,EAAEA,QAAQ;MAClBuuC,SAAS,EAAEpxE,GAAG,CAACoxE;IACnB,CAAC;IACDtmF,OAAO,CAACC,GAAG,CAACjF,MAAM,CAACkjH,UAAU,CAAC;EAClC,CAAC;EAEDljH,MAAM,CAAC+7C,SAAS,GAAG,UAAUmpE,SAAS,EAAElsG,GAAG,EAAE;IACzC,IAAIA,GAAG,IAAIA,GAAG,CAACynD,aAAa,EACxBznD,GAAG,CAACynD,aAAa,CAACr7D,KAAK,CAAC,CAAC;IAE7B,IAAImG,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAI05G,SAAS,CAAC7wC,QAAQ,KAAK,IAAI,EAAE;MAC7B6wC,SAAS,CAAC7wC,QAAQ,GAAG,KAAK;MAE1B9oE,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B,CAAC,MAAM;MACHw5G,SAAS,CAAC7wC,QAAQ,GAAG,IAAI;MAEzB,IAAI,OAAO6wC,SAAS,CAACC,QAAQ,KAAK,WAAW,IAAID,SAAS,CAACC,QAAQ,CAAC/+G,MAAM,KAAK,CAAC,EAAE;QAC9EtC,CAAC,CAACC,OAAO,CAAC,CAAC;QAEX,IAAI2H,OAAO,GAAG1L,MAAM,CACfolH,qBAAqB,CAACF,SAAS,CAAC9hH,EAAE,CAAC,CACnCY,IAAI,CAAC,UAASE,IAAI,EAAE;UACjB,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UAEzB05G,SAAS,CAACC,QAAQ,GAAG,EAAE;UACvBrlH,OAAO,CAAC4M,OAAO,CAACxI,IAAI,CAACA,IAAI,CAAC2mD,IAAI,EAAE,UAASjrD,EAAE,EAAE;YACzCA,EAAE,CAACy0E,QAAQ,GAAG,KAAK;YACnBz0E,EAAE,CAAC6a,WAAW,GAAG7a,EAAE,CAACiiE,IAAI;YACxBqjD,SAAS,CAACC,QAAQ,CAAC9+G,IAAI,CAACzG,EAAE,CAAC;UAC/B,CAAC,CAAC;UACF2L,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;UACtB,OAAOqH,QAAQ,CAACG,OAAO;QAC3B,CAAC,CAAC,WACM,CAAC,YAAW;UAChB5H,CAAC,CAACO,SAAS,CAAC,CAAC;QACjB,CAAC,CAAC;QAEN,OAAOqH,OAAO;MAClB,CAAC,MAAM;QACHH,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QACtB,OAAOF,QAAQ,CAACG,OAAO;MAC3B;IACJ;EACJ,CAAC;EAED1L,MAAM,CAAColH,qBAAqB,GAAG,UAAS1zB,QAAQ,EAAE;IAC9C,IAAIxP,YAAY,GAAG,EAAE;IAErB,IAAIliF,MAAM,CAACgW,OAAO,CAACksG,WAAW,EAAE;MAC5BhgC,YAAY,GAAGliF,MAAM,CAACgW,OAAO,CAACksG,WAAW;IAC7C;IACA,OAAOnC,wBAAwB,CAACqF,qBAAqB,CAACljC,YAAY,EAAEwP,QAAQ,CAAC;EACjF,CAAC;EAED1xF,MAAM,CAACqC,GAAG,CAAC,gBAAgB,EAAE,YAAW;IACpCrC,MAAM,CAACgiH,QAAQ,CAAC,CAAC,WAAQ,CAAC,YAAW;MACjCl+G,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACN,CAAC,CAAC;EAEFrE,MAAM,CAACqlH,YAAY,GAAG,CAAC,CAAC;EACxBrlH,MAAM,CAACslH,eAAe,GAAG,IAAI,CAAC,CAAC;;EAE/BtlH,MAAM,CAACulH,YAAY,GAAG,UAASC,SAAS,EAAE;IACtCxlH,MAAM,CAACqlH,YAAY,CAAC9vG,KAAK,GAAGvV,MAAM,CAACkjH,UAAU,CAACsC,SAAS,CAAC;IACxDxlH,MAAM,CAACqlH,YAAY,CAACI,IAAI,GAAGD,SAAS;IACpChlH,QAAQ,CAAC,YAAW;MAChBR,MAAM,CAACslH,eAAe,CAACzvG,IAAI,CAAC,GAAG,GAAG2vG,SAAS,CAAC;IAChD,CAAC,CAAC;EACN,CAAC;;EAED;EACAxlH,MAAM,CAAC0lH,QAAQ,GAAG,UAASlpG,GAAG,EAAEla,KAAK,EAAE;IACnC9B,QAAQ,CAAC,YAAW;MAChBR,MAAM,CAACslH,eAAe,CAACx6G,IAAI,CAAC,IAAI,CAAC;IACrC,CAAC,CAAC;IAEF,IAAI0R,GAAG,KAAK,IAAI,EAAE;MACdhc,QAAQ,CAAC,YAAW;QAChBR,MAAM,CAACkjH,UAAU,CAACljH,MAAM,CAACqlH,YAAY,CAACI,IAAI,CAAC,GAAGzlH,MAAM,CAACqlH,YAAY,CAAC9vG,KAAK;MAC3E,CAAC,CAAC;IACN,CAAC,MAAM,IAAI,OAAOiH,GAAG,KAAK,QAAQ,EAAE;MAChC;AAChB;IADgB;IAIJla,KAAK,CAACyzB,eAAe,CAAC,CAAC;IACvBzzB,KAAK,CAAC0zB,cAAc,CAAC,CAAC;EAC1B,CAAC;EAEDh2B,MAAM,CAACkzB,WAAW,GAAG,UAASoiC,QAAQ,EAAEniC,OAAO,EAAEqiC,YAAY,EAAEC,OAAO,EAAEC,cAAc,EAAE;IACpF,IAAI,CAACJ,QAAQ,EAAE;MACXA,QAAQ,GAAG,KAAK;IACpB;IACA,IAAI,CAACniC,OAAO,EAAE;MACVA,OAAO,GAAG,sCAAsC;IACpD;IAEA,IAAImiC,QAAQ,KAAKE,YAAY,IAAI,CAAC,CAACriC,OAAO,EAAE;MACxC,IAAIE,IAAI,GAAG,EAAE;MAEb,IAAIhO,GAAG,GAAG,IAAI;MACd,IAAI,CAACqwC,cAAc,EAAE;QACjBrwC,GAAG,GAAGnlB,aAAa,CAACszB,YAAY,GAAG,MAAM,GAAGL,OAAO;QACnD,IAAIsiC,OAAO,KAAK,IAAI,EAAE;UAClBpiC,IAAI,GAAG,SAAS,GAAGnzB,aAAa,CAACozB,OAAO,GAAG,UAAU,GAAGpzB,aAAa,CAACqzB,OAAO;QACjF;MACJ,CAAC,MAAM;QACHlO,GAAG,GAAGnlB,aAAa,CAACkoC,aAAa,GAAG,wBAAwB,GAAGjV,OAAO,GAAG,oBAAoB,GAAGwiC,kBAAkB,CAACD,cAAc,CAAC;QAClI,IAAID,OAAO,KAAK,IAAI,EAAE;UAClBpiC,IAAI,GAAG,SAAS,GAAGnzB,aAAa,CAACozB,OAAO,GAAG,UAAU,GAAGpzB,aAAa,CAACqzB,OAAO;QACjF;MACJ;MAEAlO,GAAG,IAAIgO,IAAI;MACX,OAAOhO,GAAG;IACd;IACA,OAAO,IAAI;EACf,CAAC;EAEDrlB,MAAM,CAAC2lH,aAAa,GAAG,YAAW;IAC9B7hH,CAAC,CAAC,WAAW,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;EACrC,CAAC;EAEDxE,MAAM,CAAC4lH,mBAAmB,GAAG,IAAI,CAAC,CAAC;;EAEnC5lH,MAAM,CAAC6lH,UAAU,GAAG,EAAE;EAEtB7lH,MAAM,CAAC8lH,uBAAuB,GAAG,YAAW;IACxC9lH,MAAM,CAAC6lH,UAAU,CAACtwG,KAAK,GAAGvV,MAAM,CAACwgH,WAAW,CAACC,MAAM;;IAEnD;IACA,IAAI,CAACzgH,MAAM,CAAC6lH,UAAU,CAACtwG,KAAK,EAAEvV,MAAM,CAAC6lH,UAAU,CAACtwG,KAAK,GAAG,CAAC;IAEzD/U,QAAQ,CAAC,YAAW;MAChBR,MAAM,CAAC4lH,mBAAmB,CAAC/vG,IAAI,CAAC,YAAY,CAAC;IACjD,CAAC,CAAC;EACN,CAAC;;EAED;EACA7V,MAAM,CAAC+lH,SAAS,GAAG,UAASvpG,GAAG,EAAE;IAC7Bxc,MAAM,CAAC4lH,mBAAmB,CAAC96G,IAAI,CAAC,IAAI,CAAC;IACrCtK,QAAQ,CAAC,YAAW;MAChB,IAAIgc,GAAG,KAAK,IAAI,EAAE;QACd,IAAGxc,MAAM,CAAC6lH,UAAU,CAACtwG,KAAK,GAAC,KAAK,IAAKvV,MAAM,CAAC6lH,UAAU,CAACtwG,KAAK,GAAC,CAAC,EAAE;UAC5DpV,YAAY,CAACiE,SAAS,CAClB3D,cAAc,CAACe,SAAS,CAAC,sGAAsG,CAAC,EAChI,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;UAC3BxB,MAAM,CAAC6lH,UAAU,CAACtwG,KAAK,GAAG,CAAC;QAC/B;QAEAvV,MAAM,CAACwgH,WAAW,CAACC,MAAM,GAAGzgH,MAAM,CAAC6lH,UAAU,CAACtwG,KAAK;MACvD;IACJ,CAAC,CAAC;EACN,CAAC;EAED,SAASywG,YAAYA,CAACziG,IAAI,EAAE;IACxB,IAAIvjB,MAAM,CAACwgH,WAAW,CAACyF,iBAAiB,KAAKt1G,SAAS,IAAI,CAAC3Q,MAAM,CAACwgH,WAAW,CAACyF,iBAAiB,CAAC52G,OAAO,CAAC,OAAO,CAAC,EAAE;MAC9G,IAAIkU,IAAI,CAACrgB,IAAI,IAAI,mBAAmB,EAAE,OAAO,IAAI;IACrD,CAAC,MAAM;MACH,QAAQlD,MAAM,CAACwgH,WAAW,CAACyF,iBAAiB;QACxC,KAAK,wBAAwB;UACzB,OAAO1iG,IAAI,CAACrgB,IAAI,IAAI,oBAAoB;QAC5C,KAAK,wBAAwB;UACzB,OAAOqgB,IAAI,CAACrgB,IAAI,IAAI,oBAAoB;QAC5C,KAAK,uBAAuB;UACxB,OAAOqgB,IAAI,CAACrgB,IAAI,IAAI,mBAAmB;QAC3C;UACI,OAAOqgB,IAAI,CAACrgB,IAAI,IAAI,oBAAoB;MAChD;IACJ;EACJ;EAEAlD,MAAM,CAACqhH,kBAAkB,GAAG,YAAW;IACnCv9G,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAI,CAAC/D,MAAM,CAACwgH,WAAW,CAACC,MAAM,EAAEzgH,MAAM,CAACwgH,WAAW,CAACC,MAAM,GAAG,CAAC;IAE7Dz7G,OAAO,CAACC,GAAG,CAAC,aAAa,EAAEjF,MAAM,CAACwgH,WAAW,CAAC;IAE9C,IAAI5lD,QAAQ,GAAG56D,MAAM,CAAC2gH,cAAc,CAACtvG,IAAI,CAAC20G,YAAY,CAAC;IAEvD,IAAIprD,QAAQ,EAAE;MACV16D,aAAa,CAACqtC,gBAAgB,CAACqtB,QAAQ,CAACgpC,UAAU,CAAC;IACvD;IAEA,IAAI5jG,MAAM,CAACwgH,WAAW,CAACyF,iBAAiB,KAAKt1G,SAAS,EAAE;MACpD3Q,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,GAAGlmH,MAAM,CAACohH,cAAc,CAAC,CAAC,CAAC;MACrEphH,MAAM,CAACwgH,WAAW,CAACyF,iBAAiB,GAAGjmH,MAAM,CAACohH,cAAc,CAAC,CAAC,CAAC,CAACl5G,IAAI;IACxE,CAAC,MAAM;MACHpE,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAACohH,cAAc,EAAE,UAASl7G,GAAG,EAAEtG,EAAE,EAAE;QAC5C,IAAIA,EAAE,CAACsI,IAAI,KAAKlI,MAAM,CAACwgH,WAAW,CAACyF,iBAAiB,EAAE;UAClDjmH,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,GAAGtmH,EAAE;QACnD;MACJ,CAAC,CAAC;IACN;IAEAqgH,YAAY,CAACpnB,WAAW,CAAC,CAAC,CAAC70F,IAAI,CAC3B,UAASC,IAAI,EAAE;MACX,IAAIwjB,MAAM,GAAGiC,aAAa,CAACy8F,wBAAwB,CAACliH,IAAI,CAAC+0F,QAAQ,EAAE,CAAC,gCAAgC,CAAC,EAAE,UAAU,CAAC;MAElH,IAAIotB,KAAK,GAAG,EAAE;MACd,IAAIpmH,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,EAAE;QAC5CE,KAAK,GAAGpmH,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,CAAC3wG,KAAK,GAAGvV,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,CAAC3wG,KAAK,GAAGvV,MAAM,CAACshH,oBAAoB,CAAC5yE,qBAAqB;MACnK;MAEA1uC,MAAM,CAACogH,kBAAkB,GAAG,OAAO,GAAGgG,KAAK;MAE3C,IAAIC,cAAc,GACd,0TAA0T;MAC9T5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,2CAA2C,EAAE0mG,cAAc,CAAC;MACpFA,cAAc,GACV,8TAA8T;MAClU5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,4CAA4C,EAAE0mG,cAAc,CAAC;MACrFA,cAAc,GACV,yVAAyV;MAC7V5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,qDAAqD,EAAE0mG,cAAc,CAAC;MAC9FA,cAAc,GACV,2TAA2T;MAC/T5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,2CAA2C,EAAE0mG,cAAc,CAAC;MACpFA,cAAc,GACV,2TAA2T;MAC/T5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,2CAA2C,EAAE0mG,cAAc,CAAC;MACpFA,cAAc,GACV,oUAAoU;MACxU5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,8CAA8C,EAAE0mG,cAAc,CAAC;MAEvF5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,4BAA4B,EAAE,iEAAiE,CAAC;MACxH8H,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,4BAA4B,EAAE,iEAAiE,CAAC;MACxH8H,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,mCAAmC,EAAE,wEAAwE,CAAC;MAEtI7b,CAAC,CAAC,kBAAkB,CAAC,CAAC02D,MAAM,CAAC,CAAC;MAC9Bx6D,MAAM,CAACsmH,aAAa,GAAG7+F,MAAM;MAE7B8+F,oBAAoB,CAAC,CAAC;MAEtB,IAAIvmH,MAAM,CAACmB,IAAI,IAAI,QAAQ,EAAEnB,MAAM,CAACmB,IAAI,GAAG,QAAQ,CAAC,KAEhDX,QAAQ,CAAC,YAAW;QAChBR,MAAM,CAACyiH,cAAc,CAAC,CAAC;MAC3B,CAAC,EAAE,GAAG,CAAC;MAEX3+G,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb7D,QAAQ,CAAC,YAAW;QAChBsD,CAAC,CAAC,oBAAoB,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAC9C,CAAC,EAAE,GAAG,CAAC;IACX,CAAC,EACD,UAASL,GAAG,EAAE;MACV;MACAL,CAAC,CAACO,SAAS,CAAC,CAAC;MACbnE,aAAa,CAACgkC,oBAAoB,GAAG,KAAK;MAC1C/jC,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CACJ,CAAC;EACL,CAAC;EAED,SAASoiH,oBAAoBA,CAAA,EAAG;IAC5BvmH,MAAM,CAAC4gH,aAAa,GAAG,EAAE;IAEzB98G,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC0gH,YAAY,EAAE,UAASx6G,GAAG,EAAEtG,EAAE,EAAE;MAC1C,IAAIA,EAAE,CAAC4mH,QAAQ,IAAI,CAAC,IAAI5mH,EAAE,CAAC4mH,QAAQ,KAAK,IAAI,EAAE;QAC1C1iH,CAAC,CAACmC,IAAI,CAACrG,EAAE,CAACulH,QAAQ,EAAE,UAASsB,IAAI,EAAEC,IAAI,EAAE;UACrC,IAAIA,IAAI,CAACpE,UAAU,KAAK,IAAI,IAAIoE,IAAI,CAACpE,UAAU,IAAI,CAAC,EAAE;YAClDtiH,MAAM,CAAC2mH,YAAY,CAACD,IAAI,CAAClsG,OAAO,EAAEksG,IAAI,CAAChkH,IAAI,EAAEgkH,IAAI,CAAC3oF,KAAK,GAAE2oF,IAAI,CAAC3oF,KAAK,GAAE2oF,IAAI,CAAChD,UAAU,EAAEgD,IAAI,CAACtjH,EAAE,EAAEsjH,IAAI,CAAC7kD,IAAI,CAAC;UAC7G;QACJ,CAAC,CAAC;MACN,CAAC,MAAM;QACH,IAAIjiE,EAAE,CAAC0iH,UAAU,KAAK,IAAI,IAAI1iH,EAAE,CAAC0iH,UAAU,IAAI,CAAC,EAAE;UAC9CtiH,MAAM,CAAC2mH,YAAY,CAAC/mH,EAAE,CAAC4a,OAAO,EAAE5a,EAAE,CAAC8C,IAAI,EAAE9C,EAAE,CAACm+B,KAAK,GAAEn+B,EAAE,CAACm+B,KAAK,GAAGn+B,EAAE,CAAC8jH,UAAU,EAAE9jH,EAAE,CAACwD,EAAE,EAAExD,EAAE,CAACiiE,IAAI,CAAC;QAChG;MACJ;IACJ,CAAC,CAAC;IAEF78D,OAAO,CAACC,GAAG,CAAC,aAAa,EAAEjF,MAAM,CAAC4gH,aAAa,CAAC;IAEhD,IAAIwF,KAAK,GAAG,CAAC;IACb,IAAIpmH,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,EAAE;MAC5CE,KAAK,GAAGpmH,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,CAAC3wG,KAAK,GAAGvV,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,CAAC3wG,KAAK,GAAGvV,MAAM,CAACshH,oBAAoB,CAAC5yE,qBAAqB;IACnK;IACAqxE,wBAAwB,CAACwG,oBAAoB,CAACvmH,MAAM,CAAC4gH,aAAa,EAAE5gH,MAAM,CAAC6gH,UAAU,EAAE7gH,MAAM,CAACuD,QAAQ,EAAE6iH,KAAK,IAAI,GAAG,IAAIA,KAAK,IAAI,GAAG,CAAC;EACzI;EAEApmH,MAAM,CAACi4F,WAAW,GAAG,YAAW;IAC5B,IAAI51C,QAAQ,GAAGv+C,CAAC,CAAC,6BAA6B,CAAC,CAC1C4V,MAAM,CAAC,CAAC;IACb2oC,QAAQ,CAACjlC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC9BilC,QAAQ,CAACp8C,IAAI,CAAC,UAAUwiB,CAAC,EAAEm+F,GAAG,EAAE;MAC5B,IAAIhnH,EAAE,GAAGkE,CAAC,CAAC8iH,GAAG,CAAC;MACf,IAAIC,EAAE,GAAGjnH,EAAE,CAAC6rB,OAAO,CAAC,IAAI,CAAC;MAEzB,IAAI,CAACo7F,EAAE,CAACzjG,EAAE,CAAC,cAAc,CAAC,EAAE;QACxBxjB,EAAE,CAACwd,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC;MAChC;MACA,IAAI,CAACxd,EAAE,CAACwjB,EAAE,CAAC,aAAa,CAAC,EAAE;QACvBxjB,EAAE,CAACwd,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC;MACnC;IACJ,CAAC,CAAC;;IAEF;;IAEA,IAAIk6B,OAAO,GAAGxzC,CAAC,CAAC,2CAA2C,CAAC;IAE5D,OAAOk8G,iBAAiB,CAAC/nB,WAAW,CAAC3gD,OAAO,CAAC;EACjD,CAAC;EAEDt3C,MAAM,CAACyiH,cAAc,GAAG,YAAW;IAC/B,IAAIqE,EAAE,GAAGhjH,CAAC,CAAC,uBAAuB,CAAC,CAACyzD,QAAQ,CAAC,CAAC;IAE9C,IAAIkhC,OAAO,GAAG,EAAE;IAChB,IAAIC,OAAO,GAAG,EAAE;IAChB,IAAI7pD,MAAM,GAAG,EAAE;IACf,IAAIC,MAAM,GAAG,EAAE;IAEfi4E,SAAS,GAAG,MAAM;IAElB,IAAI/mH,MAAM,CAACT,MAAM,EAAE;MACfk5F,OAAO,GAAGz4F,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,CAACztB,OAAO,GAAGz4F,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,CAACztB,OAAO,GAAGz4F,MAAM,CAACshH,oBAAoB,CAAC3yE,wBAAwB;MACxK+pD,OAAO,GAAG14F,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,CAACxtB,OAAO,GAAG14F,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,CAACxtB,OAAO,GAAG14F,MAAM,CAACshH,oBAAoB,CAAC1yE,wBAAwB;MACxKC,MAAM,GAAG7uC,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,CAACr3E,MAAM,GAAG7uC,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,CAACr3E,MAAM,GAAG7uC,MAAM,CAACshH,oBAAoB,CAACzyE,MAAM;MAEnJC,MAAM,GAAG9uC,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,CAACp3E,MAAM,GAAG9uC,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,CAACp3E,MAAM,GAAG9uC,MAAM,CAACshH,oBAAoB,CAACxyE,MAAM;MACnJ,IAAI6pD,MAAM,GAAG34F,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,CAACvtB,MAAM,GAAG34F,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,CAACvtB,MAAM,GAAG34F,MAAM,CAACshH,oBAAoB,CAAC3oB,MAAM;MACvJ,IAAIh+E,IAAI,GAAG3a,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,CAACvrG,IAAI,GAAG3a,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,CAACvrG,IAAI,GAAG3a,MAAM,CAACshH,oBAAoB,CAAC3mG,IAAI;MAE/I3a,MAAM,CAAC+gH,UAAU,GAAGpoB,MAAM,KAAKhoF,SAAS,GAAGgoF,MAAM,GAAG9+D,IAAI,CAACo+B,KAAK,CAACwgC,OAAO,GAAG5pD,MAAM,CAAC;MAChF7uC,MAAM,CAACghH,WAAW,GAAGrmG,IAAI,KAAKhK,SAAS,GAAI3Q,MAAM,CAAC+gH,UAAU,GAAGpmG,IAAI,GAAG3a,MAAM,CAAC+gH,UAAU,GAAGlnF,IAAI,CAACo+B,KAAK,CAACygC,OAAO,GAAG5pD,MAAM,CAAC;IAC1H,CAAC,MAAM;MACHD,MAAM,GAAG,GAAG;MACZC,MAAM,GAAG,EAAE;MACX9uC,MAAM,CAAC+gH,UAAU,GAAG,CAAC;MACrB/gH,MAAM,CAACghH,WAAW,GAAG,CAAC;IAC1B;IAEA8F,EAAE,CAACvvD,QAAQ,CAAC,CAAC,CACRA,QAAQ,CAAC,GAAG,CAAC,CACbiD,MAAM,CAAC,CAAC;IAEbssD,EAAE,CAACz1G,IAAI,CAAC,iBAAiB,CAAC,CAACpL,IAAI,CAAC,YAAW;MACvC,IAAI6c,EAAE,GAAGhf,CAAC,CAAC,IAAI,CAAC,CAAC6D,IAAI,CAAC,eAAe,CAAC;MACtC7D,CAAC,CAAC,IAAI,CAAC,CAACsZ,GAAG,CAAC,WAAW,EAAE0F,EAAE,CAAC;IAChC,CAAC,CAAC;IAEFgkG,EAAE,CAAC1pG,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC;IAE5B0pG,EAAE,CAACz1G,IAAI,CAAC,OAAO,CAAC,CACX+L,GAAG,CAAC,UAAU,EAAC,QAAQ,CAAC;IAE7B0pG,EAAE,CAACz1G,IAAI,CAAC,UAAU,CAAC,CAAC+L,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;IACxC0pG,EAAE,CAACz1G,IAAI,CAAC,YAAY,CAAC,CAChB+L,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CACpBA,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CACvBA,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CACnBA,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CACzBA,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAC5BA,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC;IAErC,IAAI4pG,YAAY,GAAGF,EAAE,CAACz1G,IAAI,CAAC,OAAO,CAAC,CAACsmD,KAAK,CAAC,CAAC,CAACtmD,IAAI,CAAC,IAAI,CAAC,CAACsmD,KAAK,CAAC,CAAC,CAACtmD,IAAI,CAAC,IAAI,CAAC,CAACjL,MAAM;IAEhF,IAAG,CAAC4gH,YAAY,EACZA,YAAY,GAAG,CAAC;IAEpB,IAAIhnH,MAAM,CAAC+gH,UAAU,GAAG,CAAC,EAAE;MAEvB+F,EAAE,CAACz1G,IAAI,CAAC,OAAO;MACX;MAAA,CACC+L,GAAG,CAAC,OAAO,EAAEyxB,MAAM,CAAC,CACpBzxB,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CACzBA,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC;;MAE/B;;MAEA0pG,EAAE,CAACz1G,IAAI,CAAC,OAAO;MACX;MAAA,CACC+L,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CACzBA,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC;MAE/B0pG,EAAE,CAACz1G,IAAI,CAAC,YAAY,CAAC,CAChB+L,GAAG,CAAC,OAAO,EAAEyxB,MAAM,GAAGm4E,YAAY,CAAC,CACnC5pG,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;MAEvB0pG,EAAE,CAACz1G,IAAI,CAAC,MAAM,CAAC,CACV+L,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CACzBA,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CACzBA,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAC5BA,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC,CAChCA,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;IAChC,CAAC,MAAM;MACH0pG,EAAE,CAACz1G,IAAI,CAAC,OAAO;MACX;MAAA,CACC+L,GAAG,CAAC,OAAO,EAAEyxB,MAAM;MACpB;MAAA,CACCzxB,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC;MAE/B0pG,EAAE,CAACz1G,IAAI,CAAC,YAAY,CAAC,CAChB+L,GAAG,CAAC,OAAO,EAAEyxB,MAAM,GAAEm4E,YAAY,CAAC,CAClC5pG,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;MAEvB0pG,EAAE,CAACz1G,IAAI,CAAC,oCAAoC,CAAC,CACxC+L,GAAG,CAAC,WAAW,EAAEyxB,MAAM,GAACm4E,YAAY,CAAC,CACrC5pG,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CACzBA,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAC5BA,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC,CAChCA,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;IAChC;IAEA,IAAIpd,MAAM,CAAC+gH,UAAU,GAAG,CAAC,EAAE;MACvB+F,EAAE,CAACz1G,IAAI,CAAC,OAAO,CAAC,CAAC+L,GAAG,CAAC,WAAW,EAAEyxB,MAAM,CAAC;MACzCi4E,EAAE,CAACz1G,IAAI,CAAC,OAAO,CAAC,CAAC+L,GAAG,CAAC,QAAQ,EAAE0xB,MAAM,CAAC;MACtCg4E,EAAE,CAACz1G,IAAI,CAAC,OAAO,CAAC,CACXqI,MAAM,CAAC,CAAC,CACR0D,GAAG,CAAC,QAAQ,EAAE0xB,MAAM,CAAC;MAC1Bg4E,EAAE,CAACz1G,IAAI,CAAC,cAAc,CAAC,CAClB+L,GAAG,CAAC,QAAQ,EAAE0xB,MAAM,GAAG,CAAC,CAAC,CACzB1xB,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC;MAC9B0pG,EAAE,CAACz1G,IAAI,CAAC,KAAK,CAAC,CAAC+L,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;IACxC,CAAC,MAAM;MACH,IAAIpd,MAAM,CAAC+gH,UAAU,GAAG,CAAC,EAAE;QACvB,IAAG/gH,MAAM,CAACT,MAAM,EAAC;UACbunH,EAAE,CAACz1G,IAAI,CAAC,OAAO,CAAC,CAAC+L,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/C;QACA0pG,EAAE,CAACz1G,IAAI,CAAC,cAAc,CAAC,CAAC+L,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;MACjD,CAAC,MAAM;QACH0pG,EAAE,CAACz1G,IAAI,CAAC,cAAc,CAAC,CAAC+L,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;MACjD;MACA0pG,EAAE,CAACz1G,IAAI,CAAC,KAAK,CAAC,CAAC+L,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;IACxC;IAEA,IAAIpd,MAAM,CAAC+gH,UAAU,KAAK,CAAC,EAAE;MACzB+F,EAAE,CAACz1G,IAAI,CAAC,OAAO;MACX;MAAA,CACC+L,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAC;IAC1C;IAEA5c,QAAQ,CAAC,YAAW;MAChB,IAAIR,MAAM,CAAC+gH,UAAU,GAAG,CAAC,IAAI/gH,MAAM,CAACghH,WAAW,GAAG,CAAC,EAAE;QACjDjB,wBAAwB,CAACkH,qBAAqB,CAACjnH,MAAM,CAAC+gH,UAAU,EAAE/gH,MAAM,CAACghH,WAAW,EAAEnyE,MAAM,CAAC;QAC7F,IAAIq4E,GAAG,GAAGpjH,CAAC,CAAC,uBAAuB,CAAC,CAACyzD,QAAQ,CAAC,CAAC;QAC/C,IAAI4vD,MAAM,GAAGD,GAAG,CAAC71G,IAAI,CAAC,eAAe,CAAC,CAACA,IAAI,CAAC,eAAe,CAAC;QAC5D,IAAI81G,MAAM,IAAIA,MAAM,CAAC/gH,MAAM,EAAE;UACzB+gH,MAAM,CAACx/G,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;UACxB,IAAIixF,OAAO,GAAG54F,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,CAACttB,OAAO,GAAG54F,MAAM,CAACwgH,WAAW,CAAC0F,uBAAuB,CAACttB,OAAO,GAAG54F,MAAM,CAACshH,oBAAoB,CAAC1oB,OAAO;UAC3J,IAAI,OAAOA,OAAO,KAAK,WAAW,IAAI3uF,KAAK,CAAC0wC,OAAO,CAACi+C,OAAO,CAAC,EAAE;YAC1DuuB,MAAM,CAACx/G,IAAI,CAAC,OAAO,EAAE,UAAU,GAAGixF,OAAO,CAAC9hF,GAAG,CAAC,UAAU9Q,CAAC,EAAE;cAAC,OAAOA,CAAC,GAAG,IAAI;YAAA,CAAC,CAAC,CAAC2O,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;UAClG;QACJ;MACJ;IACJ,CAAC,CAAC;EACN,CAAC;EAED3U,MAAM,CAAC2mH,YAAY,GAAG,UAASnsG,OAAO,EAAE9X,IAAI,EAAEghH,UAAU,EAAEtgH,EAAE,EAAEy+D,IAAI,EAAE;IAChE,IAAI7hE,MAAM,CAACwgH,WAAW,CAACC,MAAM,GAAG,CAAC,EAAE;MAC/B,KAAKhzG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGzN,MAAM,CAACwgH,WAAW,CAACC,MAAM,EAAEhzG,CAAC,EAAE,EAAE;QAC5CzN,MAAM,CAAC4gH,aAAa,CAACv6G,IAAI,CAAC;UACtBmU,OAAO,EAAEA,OAAO;UAChB9X,IAAI,EAAEA,IAAI;UACV0kH,YAAY,EAAE1D,UAAU;UACxBtgH,EAAE,EAAEA,EAAE,GAAG,GAAG,GAAGqK,CAAC;UAChBo0D,IAAI,EAAEA,IAAI;UACVpnD,WAAW,EAAEonD;QACjB,CAAC,CAAC;MACN;IACJ;EACJ,CAAC;EAED7hE,MAAM,CAACqnH,eAAe,GAAG,UAASntG,GAAG,EAAE;IACnC,IAAIA,GAAG,CAACssG,QAAQ,EAAE;MACd,IAAItsG,GAAG,CAACm6D,QAAQ,EAAE;QACd,IAAI5yE,GAAG,GAAG,CAAC;QACXqC,CAAC,CAACmC,IAAI,CAACiU,GAAG,CAACirG,QAAQ,EAAE,UAASj/G,GAAG,EAAEtG,EAAE,EAAE;UACnC,IAAI,CAACA,EAAE,CAAC4a,OAAO,EAAE;YACb/Y,GAAG,EAAE;YACL7B,EAAE,CAAC0iH,UAAU,GAAG,KAAK;UACzB,CAAC,MAAM;YACH,IAAI,CAAC1iH,EAAE,CAAC0iH,UAAU,EAAE1iH,EAAE,CAAC0iH,UAAU,GAAG,IAAI;UAC5C;QACJ,CAAC,CAAC;QAEF,IAAG7gH,GAAG,GAAC,CAAC,EACJtB,YAAY,CAACiE,SAAS,CAAC3C,GAAG,GAAG,kCAAkC,CAAC,CAAC,KAChE,IAAGA,GAAG,KAAG,CAAC,EACXtB,YAAY,CAACiE,SAAS,CAAC,iCAAiC,CAAC;MACjE,CAAC,MAAM;QACHpE,MAAM,CAAC+7C,SAAS,CAAC7hC,GAAG,CAAC,CAAClW,IAAI,CAAC,YAAW;UAClC,IAAIvC,GAAG,GAAG,CAAC;UACXqC,CAAC,CAACmC,IAAI,CAACiU,GAAG,CAACirG,QAAQ,EAAE,UAASj/G,GAAG,EAAEtG,EAAE,EAAE;YACnC,IAAI,CAACA,EAAE,CAAC4a,OAAO,EAAE;cACb/Y,GAAG,EAAE;cACL7B,EAAE,CAAC0iH,UAAU,GAAG,KAAK;YACzB,CAAC,MAAM;cACH,IAAI1iH,EAAE,CAAC0iH,UAAU,EAAE1iH,EAAE,CAAC0iH,UAAU,GAAG,KAAK,CAAC,KACpC1iH,EAAE,CAAC0iH,UAAU,GAAG,IAAI;YAC7B;UACJ,CAAC,CAAC;UAEF,IAAG7gH,GAAG,GAAC,CAAC,EACJtB,YAAY,CAACiE,SAAS,CAAC3C,GAAG,GAAG,kCAAkC,CAAC,CAAC,KAChE,IAAGA,GAAG,KAAG,CAAC,EACXtB,YAAY,CAACiE,SAAS,CAAC,iCAAiC,CAAC;QACjE,CAAC,CAAC;MACN;IACJ,CAAC,MAAM;MACH,IAAI,CAAC8V,GAAG,CAACM,OAAO,EAAE;QACdN,GAAG,CAACooG,UAAU,GAAG,KAAK;QACtBniH,YAAY,CAACiE,SAAS,CAAC,+BAA+B,CAAC;MAC3D,CAAC,MAAM;QACH,IAAI8V,GAAG,CAACooG,UAAU,EAAEpoG,GAAG,CAACooG,UAAU,GAAG,KAAK,CAAC,KACtCpoG,GAAG,CAACooG,UAAU,GAAG,IAAI;MAC9B;IACJ;IAEAt9G,OAAO,CAACC,GAAG,CAACiV,GAAG,CAACxX,IAAI,GAAG,KAAK,GAAGwX,GAAG,CAACooG,UAAU,CAAC;EAClD,CAAC;AACL,CAAC,CACJ,CAAC,C;;;;;;;;;;ACt+BFxiH,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAAC2jD,OAAO,CAAC,0BAA0B,EACzD,CAAC,SAAS,EAAE,eAAe,EAAE,uBAAuB,EAAE,eAAe,EACpE,IAAI,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,EAAE,gBAAgB,EACzE,UAAU1iD,cAAc,EAAEJ,aAAa,EAAE+vB,qBAAqB,EAAElwB,aAAa,EAC5ES,EAAE,EAAEoyB,eAAe,EAAE1C,eAAe,EAAE7vB,QAAQ,EAAEwtE,cAAc,EAAE;EAGzD,IAAI+xC,wBAAwB,GAAG,CAAC,CAAC;EAEjCA,wBAAwB,CAACwB,OAAO,GAAG,YAAY;IAC3C,OAAOlxF,eAAe,CAACi3F,cAAc,CAAC,CAAC;EAC3C,CAAC;EAEDvH,wBAAwB,CAACgC,YAAY,GAAG,UAAUwF,OAAO,EAAErkH,IAAI,EAAER,IAAI,EAAE;IACnE,OAAO2tB,eAAe,CAAC0xF,YAAY,CAACwF,OAAO,EAAErkH,IAAI,EAAER,IAAI,CAAC;EAC5D,CAAC;EAEDq9G,wBAAwB,CAACqC,eAAe,GAAG,UAAUhnF,IAAI,EAAEC,KAAK,EAAEf,MAAM,EAAE2nF,OAAO,EAAE;IAE/E,OAAO5xF,eAAe,CAAC+xF,eAAe,CAAC,IAAI,EAAEhnF,IAAI,EAAEC,KAAK,EAAE,EAAE,EAAEf,MAAM,EAAE2nF,OAAO,CAAC;EAClF,CAAC;EAEDlC,wBAAwB,CAACqF,qBAAqB,GAAG,UAAU9qF,MAAM,EAAEo3D,QAAQ,EAAE;IAEzE,OAAOrhE,eAAe,CAAC+xF,eAAe,CAAC1wB,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAEp3D,MAAM,EAAE,IAAI,CAAC;EACjF,CAAC;EAGDylF,wBAAwB,CAACzlF,MAAM,GAAG,UAAUl3B,EAAE,EAAE8E,IAAI,EAAE;IAClD,OAAOmoB,eAAe,CAAC+xF,eAAe,CAAC,CAAC,EAAE,EAAE,EAAEh/G,EAAE,EAAE8E,IAAI,EAAE,IAAI,CAAC;EACjE,CAAC;EAED63G,wBAAwB,CAACuE,aAAa,GAAG,UAAUpgH,IAAI,EAAEqgH,KAAK,EAAE;IAC5DrgH,IAAI,CAACsjH,uBAAuB,GAAGtnH,aAAa,CAAC2qC,sBAAsB;IAEnE,IAAI05E,KAAK,EACL,OAAOl0F,eAAe,CAACo3F,cAAc,CAACvjH,IAAI,CAAC,CAAC,KAE5C,OAAOmsB,eAAe,CAACq3F,aAAa,CAACxjH,IAAI,CAAC;EAClD,CAAC;;EAEL;AACR;AACA;AACA;AACA;AACA;AACA;EACY67G,wBAAwB,CAACwG,oBAAoB,GAAG,UAAU3F,aAAa,EAAEC,UAAU,EAAEt9G,QAAQ,EAAEokH,UAAU,EAAE;IAEvG9G,UAAU,CAAC+G,aAAa,GAAG,EAAE;IAC7B9jH,CAAC,CAACmC,IAAI,CAAC26G,aAAa,EAAE,UAAU16G,GAAG,EAAEtG,EAAE,EAAE;MACrC;MACAihH,UAAU,CAAC+G,aAAa,CAACvhH,IAAI,CAACzG,EAAE,CAAC;IACrC,CAAC,CAAC;;IAEF;;IAEAouE,cAAc,CAAC7uD,aAAa,CAAC,CAAC;IAE9B3e,QAAQ,CAAC,YAAY;MAEjBsD,CAAC,CAAC,wBAAwB,CAAC,CAACmC,IAAI,CAAC,UAAUuO,CAAC,EAAE+O,IAAI,EAAE;QAChD,IAAIjV,IAAI,GAAGxK,CAAC,CAAC,IAAI,CAAC,CAAC6D,IAAI,CAAC,MAAM,CAAC;QAC/B,IAAI6C,EAAE,GAAG1G,CAAC,CAAC,IAAI,CAAC,CAAC6D,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAIO,IAAI,GAAGpE,CAAC,CAAC,IAAI,CAAC,CAAC6D,IAAI,CAAC,SAAS,CAAC;QAElCqmE,cAAc,CAAC5uD,WAAW,CAAC5U,EAAE,EAAE8D,IAAI,EAAEpG,IAAI,EAAEA,IAAI,EAAE,EAAE,EAAEy/G,UAAU,GAAG,CAAC,GAAGh3G,SAAS,CAAC;MACpF,CAAC,CAAC;MAEFq9D,cAAc,CAACpsD,cAAc,CAAC,CAAC;IACnC,CAAC,CAAC;EAEN,CAAC;;EAEL;AACR;AACA;AACA;AACA;AACA;EACQm+F,wBAAwB,CAACkH,qBAAqB,GAAG,UAAUlG,UAAU,EAAEC,WAAW,EAAEnyE,MAAM,EAAE;IAExF/qC,CAAC,CAAC,uBAAuB,CAAC,CAAC+jH,IAAI,CAAC,mBAAmB,GAAGh5E,MAAM,GAAG,YAAY,CAAC;IAExEkxE,wBAAwB,CAAC+H,SAAS,CAAChkH,CAAC,CAAC,uBAAuB,CAAC,CAAC4V,MAAM,CAAC,CAAC,EAAEqnG,UAAU,EAAE,QAAQ,CAAC;IAC7FhB,wBAAwB,CAAC+H,SAAS,CAAChkH,CAAC,CAAC,uBAAuB,CAAC,CAAC4V,MAAM,CAAC,CAAC,CAACA,MAAM,CAAC,CAAC,EAAEsnG,WAAW,GAAGD,UAAU,EAAE,yFAAyF,CAAC;;IAEzM;IACAj9G,CAAC,CAAC,6BAA6B,CAAC,CAACmC,IAAI,CAAC,UAAUwiB,CAAC,EAAE7oB,EAAE,EAAE;MACnD,IAAIkE,CAAC,CAAClE,EAAE,CAAC,CAAC23D,QAAQ,CAAC,CAAC,CAACnxD,MAAM,KAAK,CAAC,EAAE;QAC/BtC,CAAC,CAAClE,EAAE,CAAC,CAAC46D,MAAM,CAAC,CAAC;MAClB;IACJ,CAAC,CAAC;IAEF12D,CAAC,CAAC,kCAAkC,CAAC,CAAC4V,MAAM,CAAC,CAAC,CAAC0D,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC;EACzE,CAAC;;EAED;AACR;AACA;AACA;AACA;AACA;AACA;EACY2iG,wBAAwB,CAAC+H,SAAS,GAAG,UAAUjnE,QAAQ,EAAE7zB,KAAK,EAAE+6F,MAAM,EAAE;IAEpE,IAAIC,KAAK,GAAGnnE,QAAQ;IACpB,IAAIonE,QAAQ,GAAGD,KAAK,CAACxwE,GAAG,CAAC,CAAC;IAC1B,KAAK,IAAIhjC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGwzG,KAAK,CAAC5hH,MAAM,EAAEoO,CAAC,IAAIwY,KAAK,EAAE;MAC1ClpB,CAAC,CAACmkH,QAAQ,CAACv+G,KAAK,CAAC8K,CAAC,EAAEA,CAAC,GAAGwY,KAAK,CAAC,CAAC,CAACk7F,OAAO,CAACH,MAAM,CAAC;IACnD;EAEJ,CAAC;EAED,OAAOhI,wBAAwB;AACnC,CAAC,CAGJ,CAAC,C;;;;;;;;;;;;;;ACvH2C;AAEjDjgH,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,iBAAiB,EAAE,CAClD,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAC3H,mBAAmB,EAAE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EACxF,UAAUle,EAAE,EAAEwkB,KAAK,EAAEjlB,aAAa,EAAEkwB,qBAAqB,EAAEvb,eAAe,EAAEqmB,SAAS,EAAE7K,eAAe,EAAEhwB,aAAa,EACjHK,iBAAiB,EAAET,UAAU,EAAE6U,eAAe,EAAEk5D,cAAc,EAAEj5D,UAAU,EAAE;EAE5E9U,UAAU,CAACoC,GAAG,CAAC,2BAA2B,EAAE,UAAUC,KAAK,EAAE;IACzD;IACA;IACA;IACA;EAAA,CACH,CAAC;EAEF,IAAM6lH,MAAM,GAAG3wF,YAAY,CAAC0Q,OAAO,CAAC,WAAW,CAAC;EAChD,IAAI,CAACkgF,SAAS,GAAGD,MAAM,KAAK,IAAI,GAAG,IAAI,GAAGA,MAAM,KAAK,MAAM;EAE3D,IAAI,CAAChtF,aAAa,GAAG,IAAI;EACzB,IAAI,CAACktF,uBAAuB,GAAG,YAAY;IAEvC,IAAI,CAAC,IAAI,CAACltF,aAAa,EAAE;MACrB,IAAI,CAACA,aAAa,GAAGD,SAAS,CAAC,UAAUgI,CAAC,EAAE;QACxC,IAAIhjC,aAAa,CAACmB,QAAQ,EAAE;UACxB;UACA,IAAIg2C,QAAQ,GAAGv3C,OAAO,CAACw3C,OAAO,CAAC,MAAM,CAAC,CAACD,QAAQ,CAAC,CAAC;UACjD,IAAIE,EAAE,GAAGF,QAAQ,CAACG,GAAG,CAAC,iBAAiB,CAAC;UACxC,IAAI,CAAC,CAACD,EAAE,CAACpc,aAAa,EAClB,OAAOoc,EAAE,CAAC+wE,YAAY,CAAC,KAAK,CAAC;QACrC;MACJ,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;IACjB;IAEA,IAAI/8G,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IACtB,OAAOF,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED,IAAI,CAAC68G,sBAAsB,GAAG,YAAY;IACtC,IAAI,IAAI,CAACptF,aAAa,EAAE;MACpB,IAAI;QACAD,SAAS,CAAC2oB,MAAM,CAAC,IAAI,CAAC1oB,aAAa,CAAC;QACpC,IAAI,CAACA,aAAa,GAAG,IAAI;MAC7B,CAAC,CACD,OAAO5Z,CAAC,EAAE,CACV;IAEJ;EACJ,CAAC;EAED,IAAI,CAACinG,uBAAuB,GAAG,YAAY;IACvC;IACA;IACA;IACA;IACA;IACA;IACA,OAAO,IAAI,CAACF,YAAY,CAAC,IAAI,CAAC;IAC9B;EACJ,CAAC;;EAED;EACA,IAAI,CAACG,kBAAkB,GAAG,KAAK;EAE/B,IAAI,CAACpV,WAAW,GAAG,YAAY;IAC3B,IAAInzG,aAAa,CAACX,MAAM,IAAI,CAACF,MAAM,CAACu4C,WAAW,EAAE,OAAOvnB,eAAe;IACvE,OAAOnwB,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,IAAK3V,kBAAkB,CAACw3C,QAAQ,IAAI,SAAS,IAAI,CAAC,IAAI,CAACsxE,SAAU,GAAItzG,eAAe,GAAGD,eAAe;EAC/J,CAAC;EAED,IAAI,CAACyzG,YAAY,GAAG,UAAUp6E,KAAK,EAAEsL,OAAO,EAAE;IAC1C,IAAI,IAAI,CAACivE,kBAAkB,EAAE;MACzB,OAAOpoH,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;IAC7C;IAEA,IAAI,CAACuwE,kBAAkB,GAAG,IAAI;IAC9B,IAAInlG,IAAI,GAAG,IAAI;IACfte,OAAO,CAACC,GAAG,CAAC,aAAa,GAAG,IAAI,CAACmjH,SAAS,CAAC;IAC3C,IAAI33F,QAAQ,GAAG,IAAI,CAAC4iF,WAAW,CAAC,CAAC;IACjC,IAAIqV,OAAO,GAAGx6E,KAAK,KAAK,OAAO,IAAIA,KAAK,KAAK,IAAI;IACjD,IAAI5iC,EAAE;IAEN,IAAMuxG,OAAO,GAAGrlF,YAAY,CAAC0Q,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI;IAE1D,IAAIhoC,aAAa,CAACX,MAAM,IAAI,CAACF,MAAM,CAACu4C,WAAW,EAAE;MAC7CtsC,EAAE,GAAG8kB,qBAAqB,CAACkhE,oBAAoB,CAAC,CAAC,CAC5CttF,IAAI,CAAC,UAAUE,IAAI,EAAE;QAClB,OAAOxD,iBAAiB,CAAC49F,QAAQ,CAACp6F,IAAI,CAACihH,QAAQ,CAAC;MACpD,CAAC,CAAC;IACV,CAAC,MAAM,IAAIjlH,aAAa,CAACX,MAAM,IAAIW,aAAa,CAACmB,QAAQ,EAAE;MACvD2D,OAAO,CAACy0C,IAAI,CAAC,kBAAkB,CAAC;MAEhCnuC,EAAE,GAAGmlB,QAAQ,CAAC8gE,gBAAgB,CAACm3B,OAAO,CAAC,CAClC1kH,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjBrE,OAAO,CAAC20C,OAAO,CAAC,kBAAkB,CAAC;QACnC,IAAItwC,GAAG,EAAE;UACLrE,OAAO,CAACy0C,IAAI,CAAC,iBAAiB,CAAC;UAC/B,OAAOhpB,QAAQ,CAAC+gE,eAAe,CAACh4C,OAAO,GAAG,KAAK,GAAGkvE,OAAO,CAAC,CACrD1kH,IAAI,CAAC,UAAUuhB,IAAI,EAAE;YAClBvgB,OAAO,CAAC20C,OAAO,CAAC,iBAAiB,CAAC;YAClC30C,OAAO,CAACy0C,IAAI,CAAC,sBAAsB,CAAC;YACpC,OAAOrpB,qBAAqB,CAACk4F,YAAY,CAAC/iG,IAAI,CAAC;UACnD,CAAC,CAAC,CACDvhB,IAAI,CAAC,UAACC,IAAI,EAAK;YACZ;YACA;YACA,IAAI,OAAOA,IAAI,CAACC,IAAI,CAACihH,QAAQ,KAAK,QAAQ,EAAE;cACxClhH,IAAI,CAACC,IAAI,CAACihH,QAAQ,GAAGztF,IAAI,CAAC2T,KAAK,CAACpnC,IAAI,CAACC,IAAI,CAACihH,QAAQ,CAAC;YACvD;YACA,IAAIjhH,IAAI,GAAG;cACPqhB,IAAI,EAAEthB,IAAI,CAACC,IAAI,CAACykH,WAAW;cAC3BvtG,GAAG,EAAEnR,KAAK,CAAC0wC,OAAO,CAAC12C,IAAI,CAACC,IAAI,CAACihH,QAAQ,CAAC,GAAGlhH,IAAI,CAACC,IAAI,CAACihH,QAAQ,GAAG;YAClE,CAAC;YAGD,IAAI,CAAClhH,IAAI,CAACC,IAAI,CAACq2C,aAAa,EAAE;cAC1B,IAAIr2C,IAAI,CAACkX,GAAG,CAAChV,MAAM,GAAG,KAAK,EAAE;gBACzBoxB,YAAY,CAACC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC;gBAC1CnU,IAAI,CAAC8kG,SAAS,GAAG,KAAK;cAC1B,CAAC,MAAM;gBACH5wF,YAAY,CAACC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;gBACzCnU,IAAI,CAAC8kG,SAAS,GAAG,IAAI;cACzB;cACA33F,QAAQ,GAAGnN,IAAI,CAAC+vF,WAAW,CAAC,CAAC;YACjC;YAEAruG,OAAO,CAAC20C,OAAO,CAAC,sBAAsB,CAAC;YACvC,IAAI,CAAC11C,IAAI,CAACC,IAAI,IAAID,IAAI,CAACC,IAAI,CAACq2C,aAAa,EAAE;cACvC,IAAI,OAAQ9pB,QAAQ,CAAC67D,YAAa,KAAK,UAAU,EAC7C,OAAO77D,QAAQ,CAAC67D,YAAY,CAAC,CAAC,CAAC,KAE/B,OAAOjsF,aAAa,CAAC63C,cAAc,CAAC,KAAK,CAAC;YAClD;YAEAlzC,OAAO,CAACy0C,IAAI,CAAC,gBAAgB,CAAC;YAC9Bz0C,OAAO,CAAC20C,OAAO,CAAC,gBAAgB,CAAC;YACjC30C,OAAO,CAACy0C,IAAI,CAAC,iBAAiB,CAAC;YAE/B,OAAOhpB,QAAQ,CAAC87D,eAAe,CAACroF,IAAI,CAAC;UACzC,CAAC,CAAC,CACDF,IAAI,CAAC,UAAUE,IAAI,EAAE;YAClBc,OAAO,CAAC20C,OAAO,CAAC,iBAAiB,CAAC;YAClC30C,OAAO,CAACy0C,IAAI,CAAC,sBAAsB,CAAC;YACpC,OAAOhpB,QAAQ,CAAC6gE,oBAAoB,CAACptF,IAAI,CAAC;UAC9C,CAAC,CAAC,CACDF,IAAI,CAAC,UAAUE,IAAI,EAAE;YAClBc,OAAO,CAAC20C,OAAO,CAAC,sBAAsB,CAAC;YACvC30C,OAAO,CAACy0C,IAAI,CAAC,sBAAsB,CAAC;YACpC,OAAO/4C,iBAAiB,CAAC49F,QAAQ,CAACp6F,IAAI,CAAC;UAC3C,CAAC,CAAC,CACDF,IAAI,CAAC,UAAUqF,GAAG,EAAE;YACjBrE,OAAO,CAAC20C,OAAO,CAAC,sBAAsB,CAAC;YACvC15C,UAAU,CAAC+K,UAAU,CAAC,mBAAmB,CAAC;YAC1C,IAAIgT,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;YAC1BwS,SAAS,CAACvS,OAAO,CAACpC,GAAG,CAAC;YACtB,OAAO2U,SAAS,CAACtS,OAAO;UAC5B,CAAC,CAAC;QACV,CAAC,MAAM;UACH,OAAO+kB,QAAQ,CAAC6gE,oBAAoB,CAAC,CAAC,CACrCttF,IAAI,CAAC,UAAUE,IAAI,EAAE;YAClB,OAAOxD,iBAAiB,CAAC49F,QAAQ,CAACp6F,IAAI,CAAC;UAC3C,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;IACV,CAAC,MAAM;MACHoH,EAAE,GAAGmlB,QAAQ,CAAC6gE,oBAAoB,CAAC,CAAC,CAC/BttF,IAAI,CAAC,UAAUE,IAAI,EAAE;QAClB,OAAOxD,iBAAiB,CAAC49F,QAAQ,CAACp6F,IAAI,CAAC;MAC3C,CAAC,CAAC;IACV;IAEA,OAAOoH,EAAE,CAACtH,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC1Bia,IAAI,CAACmlG,kBAAkB,GAAG,KAAK;MAC/B,OAAOpoH,aAAa,CAAC63C,cAAc,CAAC7uC,GAAG,CAAC;IAC5C,CAAC,CAAC,SAAM,CAAC,UAAUlF,GAAG,EAAE;MACpBmf,IAAI,CAACmlG,kBAAkB,GAAG,KAAK;MAC/B,OAAOpoH,aAAa,CAAC83C,aAAa,CAACh0C,GAAG,CAAC;IAC3C,CAAC,CAAC;EACN,CAAC;;EAED;EACA,IAAI,CAACm2B,MAAM,GAAG,UAAUpyB,IAAI,EAAE0gH,cAAc,EAAEC,QAAQ,EAAEz9B,SAAS,EAAE;IAC/D,IAAI,CAAC09B,kBAAkB,GAAG,IAAI;IAC9B,IAAIxlG,IAAI,GAAG,IAAI;IACf,IAAIylG,YAAY,GAAG,IAAI;IACvB,IAAIruG,OAAO,GAAG,IAAI;IAClB,IAAIouG,kBAAkB,GAAG,IAAI;IAE7B,IAAIF,cAAc,KAAK,IAAI,EAAE;MACzBG,YAAY,GAAG7oH,aAAa,CAACysC,kBAAkB;MAE/C,IAAI,CAACo8E,YAAY,EAAE;QACf,IAAIx9G,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAAC,CAAC,CAAC;QACnB,OAAOF,QAAQ,CAACG,OAAO;MAC3B;MAEAgP,OAAO,GAAG,IAAI;MACdxS,IAAI,GAAG,IAAI;MACXkjF,SAAS,GAAG,IAAI;MAEhB,IAAI,CAACy9B,QAAQ,EAAE;QACX;QACA,IAAIG,SAAS,GAAG3oH,aAAa,CAAC02E,0BAA0B,CAAC,CAAC;QAC1D,IAAIxrE,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAAC,CAACu9G,SAAS,GAAG,CAAC,GAAGA,SAAS,CAAC5iH,MAAM,CAAC;QACnD,OAAOmF,QAAQ,CAACG,OAAO;MAC3B;IACJ,CAAC,MACI,IAAI,CAAC,CAAC0/E,SAAS,EAAE;MAClB1wE,OAAO,GAAG,IAAI;MACdxS,IAAI,GAAG,IAAI;IACf,CAAC,MACI;MACDwS,OAAO,GAAGxS,IAAI;MACd,IAAI,CAAC,CAACA,IAAI,EAAE;QACRA,IAAI,IAAI,GAAG;MACf;;MAEA;MACA4gH,kBAAkB,GAAG96C,cAAc,CAACxqD,uBAAuB,CAAC9I,OAAO,CAAC;IACxE;IAEA,IAAI+V,QAAQ,GAAIvwB,aAAa,CAACX,MAAM,IAAI,CAACF,MAAM,CAACu4C,WAAW,GAAIvnB,eAAe,GAAG,IAAI,CAACgjF,WAAW,CAAC,CAAC;IAEnG,IAAI/nG,EAAE,GAAGjL,aAAa,CAAC63C,cAAc,CAAC,CAAC,CAAC;IAExC,IAAI4wE,kBAAkB,EAAE;MACpB;MACAx9G,EAAE,GAAGmlB,QAAQ,CAAC6J,MAAM,CAACwuF,kBAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CACzD9kH,IAAI,CAAC,YAAY;QAAE,OAAOysB,QAAQ,CAACogE,cAAc,CAAC,CAAC;MAAE,CAAC,CAAC;IAChE;IAEAvlF,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,UAAUvC,GAAG,EAAE;MACxB,IAAI,CAACA,GAAG,EAAE;QACN6hB,IAAI,CAACwlG,kBAAkB,GAAG,IAAI;QAC9B,OAAOr4F,QAAQ,CAAC6J,MAAM,CAAC5f,OAAO,EAAExS,IAAI,EAAE6gH,YAAY,EAAEF,QAAQ,EAAEz9B,SAAS,CAAC,CACpEpnF,IAAI,CAAC,YAAY;UAAE,OAAOysB,QAAQ,CAACogE,cAAc,CAAC,CAAC;QAAE,CAAC,CAAC;MAC/D,CAAC,MAAM;QACHvtE,IAAI,CAACwlG,kBAAkB,GAAGA,kBAAkB;QAC5C,OAAOzoH,aAAa,CAAC63C,cAAc,CAACz2C,GAAG,CAAC;MAC5C;IACJ,CAAC,CAAC;;IAEF;IACA;IACA,OAAO6J,EAAE;EACb,CAAC;EAED,IAAI,CAAC0kF,cAAc,GAAG,UAAU5E,SAAS,EAAE;IACvC,IAAI36D,QAAQ,GAAIvwB,aAAa,CAACX,MAAM,IAAI,CAACF,MAAM,CAACu4C,WAAW,GAAIvnB,eAAe,GAAG,IAAI,CAACgjF,WAAW,CAAC,CAAC;IAEnG,IAAI/nG,EAAE,GAAGmlB,QAAQ,CAACu/D,cAAc,CAAC5E,SAAS,CAAC;IAC3C,OAAO9/E,EAAE;EACb,CAAC;EAED,IAAI,CAAC8lF,aAAa,GAAG,UAAUh2D,IAAI,EAAEwY,QAAQ,EAAEg1E,cAAc,EAAEC,QAAQ,EAAEz9B,SAAS,EAAE;IAEhF,IAAIw9B,cAAc,KAAG,IAAI,IAAIC,QAAQ,IAAI,IAAI,EAAE;MAC3C,IAAIp4F,QAAQ,GAAIvwB,aAAa,CAACX,MAAM,IAAI,CAACF,MAAM,CAACu4C,WAAW,GAAIvnB,eAAe,GAAG,IAAI,CAACgjF,WAAW,CAAC,CAAC;MACnG,OAAO5iF,QAAQ,CAAC2gE,aAAa,CAACh2D,IAAI,EAAEwY,QAAQ,EAAEw3C,SAAS,CAAC;IAC5D,CAAC,MACI;MACD,IAAI69B,EAAE,GAAG5oH,aAAa,CAAC02E,0BAA0B,CAAC,CAAC;MACnD,IAAIhtB,KAAK,GAAG3uB,IAAI,GAAGwY,QAAQ;QAAEgQ,IAAI,GAAGxoB,IAAI,GAAGwY,QAAQ,GAAGA,QAAQ;MAC9D,IAAIx4B,GAAG,GAAG,CAAC,CAAC6tG,EAAE,GAAG5oH,aAAa,CAAC02E,0BAA0B,CAAC,CAAC,CAACrtE,KAAK,CAACqgD,KAAK,EAAEnG,IAAI,CAAC,GAAG,EAAE;MACnF,IAAIv6C,GAAG,GAAC,EAAE;MACVvJ,OAAO,CAAC4M,OAAO,CAAC0O,GAAG,EAAE,UAAUxb,EAAE,EAAE;QAC/B,IAAI+hB,GAAG,GAAG;UACN4pE,MAAM,EAAE3rF,EAAE,CAACoK,KAAK;UAChBw0B,QAAQ,EAAE5+B,EAAE,CAAC8sC,OAAO;UACpBkhD,aAAa,EAAEhuF,EAAE,CAACuzB,OAAO;UACzBzwB,IAAI,EAAC9C,EAAE,CAACoK,KAAK;UACbqS,SAAS,EAAEzc,EAAE,CAAC8sC,OAAO;UACrBjrC,GAAG,EAAC,CAAC;UACL6zD,QAAQ,EAAE,CAAC;UACX4zD,kBAAkB,EAAEhpH,aAAa,CAACysC,kBAAkB;UACpDw8E,UAAU,EAAEvpH,EAAE,CAAC8sC,OAAO;UACtB08E,SAAS,EAAExpH,EAAE,CAACypH;QAClB,CAAC;QACDhgH,GAAG,CAAChD,IAAI,CAACsb,GAAG,CAAC;MACjB,CAAC,CAAC;MAEF,IAAIpW,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC;QAACvH,IAAI,EAACmF,GAAG;QAAE+xB,IAAI,EAACA;MAAI,CAAC,CAAC;MACvC,OAAO7vB,QAAQ,CAACG,OAAO;IAC3B;EACJ,CAAC;EAED,IAAI,CAAC+lF,YAAY,GAAG,UAAUC,QAAQ,EAAE;IACpC,IAAMjhE,QAAQ,GAAG,IAAI,CAAC4iF,WAAW,CAAC,CAAC;IAEnC,IAAI/nG,EAAE,GAAGmlB,QAAQ,CAACghE,YAAY,CAACC,QAAQ,CAAC,CACxC1tF,IAAI,CAAC,YAAY;MAAE,OAAOysB,QAAQ,CAACmhE,oBAAoB,CAAC,CAAC;IAAE,CAAC,CAAC;IAE7D,OAAOtmF,EAAE;EACb,CAAC;EAED,IAAI,CAACwmF,mBAAmB,GAAG,UAAU12D,IAAI,EAAEwY,QAAQ,EAAE;IACjD,IAAMnjB,QAAQ,GAAG,IAAI,CAAC4iF,WAAW,CAAC,CAAC;IAEnC,OAAO5iF,QAAQ,CAACqhE,mBAAmB,CAAC12D,IAAI,EAAEwY,QAAQ,CAAC;EACvD,CAAC;EAED,IAAI,CAAC01E,mBAAmB,GAAG,UAAU53B,QAAQ,EAAE;IAC3C,IAAMjhE,QAAQ,GAAG,IAAI,CAAC4iF,WAAW,CAAC,CAAC;IAEnC,OAAO5iF,QAAQ,CAACghE,YAAY,CAACC,QAAQ,CAAC;EAC1C,CAAC;;EAED;EACA,IAAI,CAAC63B,gBAAgB,GAAG,UAAUC,SAAS,EAACC,UAAU,EAAEluD,QAAQ,EAAE;IAC9Dz3D,CAAC,CAACmC,IAAI,CAACwjH,UAAU,EAAE,UAAUvjH,GAAG,EAAEklF,SAAS,EAAE;MACzC,IAAIntB,GAAG,GAAGurD,SAAS,GAAGp5F,qBAAqB,CAACs5F,SAAS,GAAGt5F,qBAAqB,CAACu5F,eAAe;MAE7F,IAAIvnG,CAAC,GAAG67C,GAAG,CAACmtB,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAC1BpnF,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjB,IAAIiF,IAAI,GAAGjF,GAAG,CAACnF,IAAI,CAACoiB,WAAW;QAC/B,IAAME,MAAM,GAAGtB,8DAAS,CAAC7b,GAAG,CAACnF,IAAI,CAACuiB,KAAK,CAAC;QAExC80C,QAAQ,CAAC6vB,SAAS,EAAE,OAAO,GAAG98E,IAAI,GAAG,UAAU,GAAGkY,MAAM,CAAC;MAC7D,CAAC,EACD,UAAUriB,GAAG,EAAE,CACf,CAAC,CAAC;IACV,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACgjG,mBAAmB,GAAG,YAAY;IAEnC,IAAIjnG,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,EAAE;MAChD,OAAOmb,qBAAqB,CAAC+2E,mBAAmB,CAAC,CAAC,CACjDnjG,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjB,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBtL,aAAa,CAAC6nC,gBAAgB,GAAG1+B,GAAG,CAACnF,IAAI,CAAC0lH,eAAe;QACzDr+G,QAAQ,CAACE,OAAO,CAACvL,aAAa,CAAC6nC,gBAAgB,CAAC;QAChD,OAAOx8B,QAAQ;MACnB,CAAC,CAAC;IACN,CAAC,MACI;MACD,IAAIrL,aAAa,CAACmB,QAAQ,EAAE;QACxB,OAAO+uB,qBAAqB,CAAC+2E,mBAAmB,CAAC,CAAC,CACzCnjG,IAAI,CAAC,UAAUqF,GAAG,EAAE;UACjBnJ,aAAa,CAAC6nC,gBAAgB,GAAG1+B,GAAG,CAACnF,IAAI,CAAC0lH,eAAe;UACzD,OAAO/0G,eAAe,CAACuyF,mBAAmB,CAAClnG,aAAa,CAAC6nC,gBAAgB,CAAC;QAC9E,CAAC,CAAC;MACd,CAAC,MACI;QACD,OAAOlzB,eAAe,CAACsyF,mBAAmB,CAAC,CAAC,CAC3CnjG,IAAI,CAAC,UAAUqF,GAAG,EAAE;UACjB,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzBtL,aAAa,CAAC6nC,gBAAgB,GAAG1+B,GAAG;UACpCkC,QAAQ,CAACE,OAAO,CAACvL,aAAa,CAAC6nC,gBAAgB,CAAC;UAChD,OAAOx8B,QAAQ;QACnB,CAAC,CAAC;MACN;IACJ;EACJ,CAAC;EAED,IAAI,CAACkqB,wBAAwB,GAAG,UAAS21D,SAAS,EAAE3rC,QAAQ,EAAEoqE,YAAY,EAAC;IAEvE,IAAG3pH,aAAa,CAACmB,QAAQ,EAAC;MAEtB,IAAGwoH,YAAY,CAACzjH,MAAM,KAAK,CAAC,EAAC;QACzB,IAAImF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAAC;UAACiqB,KAAK,EAAE;QAAK,CAAC,CAAC;QAChC,OAAOnqB,QAAQ,CAACG,OAAO;MAC3B;MACA,IAAI+kB,QAAQ,GAAGL,qBAAqB;MACpC,IAAI9kB,EAAE,GAAGmlB,QAAQ,CAACq5F,iBAAiB,CAAC1+B,SAAS,EAAE3rC,QAAQ,EAAEoqE,YAAY,CAAC,CACrE7lH,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjB,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAEzB,IAAIic,MAAM,GAAG;UAACiO,KAAK,EAAE;QAAK,CAAC;QAC3B,IAAGrsB,GAAG,CAACnF,IAAI,CAACkC,MAAM,GAAG,CAAC,EAAC;UACnBqhB,MAAM,CAACiO,KAAK,GAAG,IAAI;UACnBjO,MAAM,CAACvjB,IAAI,GAAGmF,GAAG,CAACnF,IAAI;QAC1B;QAGAqH,QAAQ,CAACE,OAAO,CAACgc,MAAM,CAAC;QACxB,OAAOlc,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC;MAEF,OAAOJ,EAAE;IACb,CAAC,MACG;MACA,IAAIC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC;QAACiqB,KAAK,EAAE;MAAK,CAAC,CAAC;MAChC,OAAOnqB,QAAQ,CAACG,OAAO;IAC3B;EAEJ,CAAC;;EAED;EACA;EACA,IAAI,CAACq+G,QAAQ,GAAG,EAAE;EAClB,IAAI,CAACriB,YAAY,GAAG,YAAY;IAC5B,IAAIpkF,IAAI,GAAG,IAAI;IACf,IAAI,CAACpjB,aAAa,CAACX,MAAM,IAAI,CAACW,aAAa,CAACmB,QAAQ,IAAI,CAAC0T,UAAU,CAACE,WAAW,EAAC;MAC5E,OAAOJ,eAAe,CAAC6yF,YAAY,CAAC,CAAC,CACpC1jG,IAAI,CAAC,UAAUE,IAAI,EAAE;QAClBof,IAAI,CAACymG,QAAQ,GAAG7lH,IAAI,CAACA,IAAI;QACzB,OAAO7D,aAAa,CAAC63C,cAAc,CAACh0C,IAAI,CAAC;MAC7C,CAAC,CAAC;IACN;IAEA,IAAIoH,EAAE,GAAG8kB,qBAAqB,CAACs3E,YAAY,CAAC,CAAC,SACvC,CAAC,UAAUvjG,GAAG,EAAE;MAClB,IAAIjE,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,EAC9C,MAAM9Q,GAAG;MAEb,IAAIA,GAAG,CAAC4zC,MAAM,KAAK,CAAC,CAAC,EACjB,MAAM5zC,GAAG,CAAC,KACT;QACD,OAAO0Q,eAAe,CAAC6yF,YAAY,CAAC,CAAC;MACzC;IACJ,CAAC,CAAC,CAAC1jG,IAAI,CAAC,UAAUE,IAAI,EAAE;MAChBof,IAAI,CAACymG,QAAQ,GAAG,CAAC7lH,IAAI,IAAI,CAACA,IAAI,CAACA,IAAI,GAAG,EAAE,GAAIA,IAAI,CAACA,IAAI;MACrD,OAAO7D,aAAa,CAAC63C,cAAc,CAACh0C,IAAI,CAAC;IAC7C,CAAC,CAAC;IAEN,IAAI,CAAChE,aAAa,CAACX,MAAM,IAAI,CAACwV,UAAU,CAACE,WAAW,EAAE;MAClD3J,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,UAAUE,IAAI,EAAE;QACzB,OAAO2Q,eAAe,CAAC2yF,eAAe,CAACtjG,IAAI,CAAC;MAChD,CAAC,CAAC;IACN;IAEA,OAAOoH,EAAE;EACb,CAAC;EAED,IAAI,CAAC0+G,iCAAiC,GAAG,UAASC,SAAS,EAAExqE,QAAQ,EAAE;IACnE,IAAGv/C,aAAa,CAACmB,QAAQ,EAAC;MACtB,IAAIk9F,QAAQ,GAAG0rB,SAAS,CAAClkH,MAAM,CAAC,UAASm9B,CAAC,EAAE;QACxB,OAAOA,CAAC,CAACxD,WAAW,KAAK,OAAO;MACpC,CAAC,CAAC;MAElB,IAAG6+D,QAAQ,CAACn4F,MAAM,KAAK,CAAC,EAAC;QACrB,IAAImF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAAC;UAACy+G,YAAY,EAAG;QAAK,CAAC,CAAC;QACxC,OAAO3+G,QAAQ,CAACG,OAAO;MAC3B;MAEA,IAAIy+G,OAAO,GAAG,EAAE;MAEhBrqH,OAAO,CAAC4M,OAAO,CAAC6xF,QAAQ,EAAE,UAAU3+F,EAAE,EAAE;QACpC,IAAGA,EAAE,CAACg/B,OAAO,IAAIh/B,EAAE,CAACi/B,SAAS,IAAIj/B,EAAE,CAACk/B,QAAQ,KAAK,MAAM,EAAC;UACpD,IAAIsrF,IAAI,GAAG;YACP/tG,SAAS,EAAEzc,EAAE,CAACyc,SAAS;YACvB6X,QAAQ,EAAEt0B,EAAE,CAAColB,KAAK;YAClBka,GAAG,EAAEt/B,EAAE,CAACs/B;UACZ,CAAC;UACDirF,OAAO,CAAC9jH,IAAI,CAAC+jH,IAAI,CAAC;QACtB;MACJ,CAAC,CAAC;MAEF,IAAGD,OAAO,CAAC/jH,MAAM,KAAK,CAAC,EAAC;QACpB,IAAImF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAAC;UAACy+G,YAAY,EAAG;QAAK,CAAC,CAAC;QACxC,OAAO3+G,QAAQ,CAACG,OAAO;MAC3B;MAGA,IAAI+kB,QAAQ,GAAGL,qBAAqB;MACpC,IAAI9kB,EAAE,GAAGmlB,QAAQ,CAACu5F,iCAAiC,CAACG,OAAO,EAAE1qE,QAAQ,CAAC,CACrEz7C,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjB,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAEzB,IAAIic,MAAM,GAAG;UAACyiG,YAAY,EAAE;QAAK,CAAC;QAClC,IAAG7gH,GAAG,CAACnF,IAAI,EAAC;UACRujB,MAAM,CAACyiG,YAAY,GAAG7gH,GAAG,CAACnF,IAAI,CAACgmH,YAAY;UAC3CziG,MAAM,CAAC4iG,oBAAoB,GAAGhhH,GAAG,CAACnF,IAAI,CAACmmH,oBAAoB;UAC3D5iG,MAAM,CAAC6iG,wBAAwB,GAAGjhH,GAAG,CAACnF,IAAI,CAAComH,wBAAwB;QACvE;QAEA/+G,QAAQ,CAACE,OAAO,CAACgc,MAAM,CAAC;QACxB,OAAOlc,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC;MAEF,OAAOJ,EAAE;IACb,CAAC,MACG;MACA,IAAIC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC;QAACy+G,YAAY,EAAE;MAAK,CAAC,CAAC;MACvC,OAAO3+G,QAAQ,CAACG,OAAO;IAC3B;EACJ,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;;ACreH5L,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,gBAAgB,EAAE,CACjD,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EACzG,UAAUle,EAAE,EAAEwkB,KAAK,EAAEjlB,aAAa,EAAEkwB,qBAAqB,EAAEvb,eAAe,EAAExU,aAAa,EAAE0U,UAAU,EAAE;EAEnG,IAAI,CAACw1G,kBAAkB,GAAG,UAAStkG,EAAE,EAAEte,IAAI,EAAEiC,IAAI,EAAE;IAC/Cqc,EAAE,CAACte,IAAI,CAACA,IAAI,CAAC;IACbse,EAAE,CAAC7I,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;IACzB6I,EAAE,CAACte,IAAI,CAAC,cAAc,EAAEiC,IAAI,CAAC;IAC7Bqc,EAAE,CAACxG,IAAI,CAAC,EAAE,CAAC;IACXwG,EAAE,CAACvM,MAAM,CAAC,CAAC,CAAC/R,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;EACrC,CAAC;EAED,IAAI,CAAC87F,kBAAkB,GAAG,UAAUjL,UAAU,EAAEgyB,YAAY,EAAEC,eAAe,EAAE;IAAA,IAAAxkD,KAAA;IAC3EjhE,OAAO,CAACy0C,IAAI,CAAC,wBAAwB,CAAC;IACtC,IAAIhpB,QAAQ,GAAIvwB,aAAa,CAACmB,QAAQ,IAAIm3F,UAAU,KAAK,IAAI,IAAKA,UAAU,KAAK,QAAQ,IAAKzjF,UAAU,CAACE,WAAW,GAAGmb,qBAAqB,GAAGvb,eAAe;IAC9J,IAAInJ,OAAO,GAAG,IAAI;IAElB,IAAIxL,aAAa,CAACX,MAAM,IAAIi5F,UAAU,KAAK,QAAQ,EAAE;MAEjD,IAAI9jF,CAAC,GAAG8jF,UAAU,KAAK,IAAI,GAAG,IAAI,GAAGt4F,aAAa,CAACktC,mBAAmB,CAAC,CAAC;MAExE,IAAI,CAAC,CAAC14B,CAAC,EAAE;QACL,IAAIiS,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBmb,QAAQ,CAAClb,OAAO,CAACisB,IAAI,CAAC2T,KAAK,CAAC32B,CAAC,CAAC,CAAC;QAC/BhJ,OAAO,GAAGib,QAAQ,CAACjb,OAAO;MAC9B,CAAC,MACI;QACD,IAAI,CAAC,CAAC8+G,YAAY,EACd9+G,OAAO,GAAG0kB,qBAAqB,CAACs6F,wBAAwB,CAACF,YAAY,EAAEC,eAAe,CAAC,CAAC,KAExF/+G,OAAO,GAAG0kB,qBAAqB,CAACqzE,kBAAkB,CAACvjG,aAAa,CAACusC,SAAS,CAAC;MACnF;IACJ,CAAC,MACI;MACD/gC,OAAO,GAAG+kB,QAAQ,CAACgzE,kBAAkB,CAACvjG,aAAa,CAACusC,SAAS,CAAC;IAClE;IAEA/gC,OAAO,GAAGA,OAAO,CAAC1H,IAAI,CAAC,UAAC+0F,OAAO,EAAK;MAChC,IAAMpyE,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAC3BxG,OAAO,CAAC20C,OAAO,CAAC,wBAAwB,CAAC;MACzC30C,OAAO,CAACy0C,IAAI,CAAC,4BAA4B,CAAC;;MAE1C;MACA,IAAI,CAACs/C,OAAO,CAAC70F,IAAI,CAACy/F,YAAY,EAC1B5K,OAAO,CAAC70F,IAAI,CAACy/F,YAAY,GAAG,EAAE;MAClC,IAAI,CAAC5K,OAAO,CAAC70F,IAAI,CAACw/F,aAAa,EAC3B3K,OAAO,CAAC70F,IAAI,CAACw/F,aAAa,GAAG3K,OAAO,CAAC70F,IAAI,CAAC80F,QAAQ;MAEtD,IAAIR,UAAU,KAAK,QAAQ,IAAIA,UAAU,KAAK,IAAI,IAAIt4F,aAAa,CAACmB,QAAQ,IAAInB,aAAa,CAACX,MAAM,KAAK,KAAK,IAAI,CAACwV,UAAU,CAACE,WAAW,EAAE;QACvIJ,eAAe,CAACq4B,mBAAmB,CAAChtC,aAAa,CAACusC,SAAS,EAAEssD,OAAO,CAAC70F,IAAI,CAAC;MAC9E;MAEA,IAAIs0F,UAAU,KAAK,QAAQ,IAAIt4F,aAAa,CAACX,MAAM,KAAK,IAAI,EAAE;QAC1DW,aAAa,CAACgtC,mBAAmB,CAACxV,IAAI,CAACC,SAAS,CAACohE,OAAO,CAAC,CAAC;MAC9D;;MAEA;MACA,IAAI5yD,mCAAmC,GAAG,IAAI;MAC9C,IAAIG,yCAAyC,GAAG,IAAI;MAEpD,IAAM1mC,EAAE,GAAGkE,CAAC,CAAC,iBAAiB,GAAGi1F,OAAO,CAAC70F,IAAI,CAAC80F,QAAQ,GAAG,QAAQ,CAAC;MAClE,IAAI/yE,EAAE,GAAGrmB,EAAE,CAACyR,IAAI,CAAC,+DAA+D,CAAC;MACjF,IAAI4U,EAAE,CAAC7f,MAAM,GAAG,CAAC,EAAE;QACf6/D,KAAI,CAACskD,kBAAkB,CAACtkG,EAAE,EAAE,kBAAkB,EAAE,0CAA0C,CAAC;MAC/F,CAAC,MACI;QACDkgB,mCAAmC,GAAGvmC,EAAE,CAACyR,IAAI,CAAC,2DAA2D,CAAC,CAACjL,MAAM,GAAG,CAAC;MACzH;MAEA6f,EAAE,GAAGrmB,EAAE,CAACyR,IAAI,CAAC,iEAAiE,CAAC;MAC/E,IAAI4U,EAAE,CAAC7f,MAAM,GAAG,CAAC,EAAE;QACf6/D,KAAI,CAACskD,kBAAkB,CAACtkG,EAAE,EAAE,kBAAkB,EAAE,4CAA4C,CAAC;MACjG,CAAC,MACI;QACDqgB,yCAAyC,GAAG1mC,EAAE,CAACyR,IAAI,CAAC,6DAA6D,CAAC,CAACjL,MAAM,GAAG,CAAC;MACjI;MAEA6f,EAAE,GAAGrmB,EAAE,CAACyR,IAAI,CAAC,+DAA+D,CAAC;MAE7E,IAAI4U,EAAE,CAAC7f,MAAM,GAAG,CAAC,EAAE;QACf6/D,KAAI,CAACskD,kBAAkB,CAACtkG,EAAE,EAAE,kBAAkB,EAAE,0CAA0C,CAAC;MAC/F,CAAC,MAEGkgB,mCAAmC,GAAGvmC,EAAE,CAACyR,IAAI,CAAC,2DAA2D,CAAC,CAACjL,MAAM,GAAG,CAAC;MAEzH6f,EAAE,GAAGrmB,EAAE,CAACyR,IAAI,CAAC,iEAAiE,CAAC;MAE/E,IAAI4U,EAAE,CAAC7f,MAAM,GAAG,CAAC,EAAE;QACf6/D,KAAI,CAACskD,kBAAkB,CAACtkG,EAAE,EAAE,kBAAkB,EAAE,4CAA4C,CAAC;MACjG,CAAC,MAEGqgB,yCAAyC,GAAG1mC,EAAE,CAACyR,IAAI,CAAC,6DAA6D,CAAC,CAACjL,MAAM,GAAG,CAAC;MAEjI6f,EAAE,GAAGrmB,EAAE,CAACyR,IAAI,CAAC,2DAA2D,CAAC;MACzE,IAAI4U,EAAE,CAAC7f,MAAM,GAAG,CAAC,EAAE;QACf6/D,KAAI,CAACskD,kBAAkB,CAACtkG,EAAE,EAAE,kBAAkB,EAAE,sCAAsC,CAAC;MAC3F;MACAA,EAAE,GAAGrmB,EAAE,CAACyR,IAAI,CAAC,2DAA2D,CAAC;MACzE,IAAI4U,EAAE,CAAC7f,MAAM,GAAG,CAAC,EAAE;QACf6/D,KAAI,CAACskD,kBAAkB,CAACtkG,EAAE,EAAE,kBAAkB,EAAE,sCAAsC,CAAC;MAC3F;MAEA5lB,aAAa,CAAC++E,yBAAyB,CAACx/E,EAAE,CAAC;MAE3Cm5F,OAAO,CAAC70F,IAAI,CAAC80F,QAAQ,GAAGp5F,EAAE,CAAC6f,IAAI,CAAC,CAAC;MACjCvf,aAAa,CAACimC,mCAAmC,GAAGA,mCAAmC;MACvFjmC,aAAa,CAAComC,yCAAyC,GAAGA,yCAAyC;MAEnGthC,OAAO,CAAC20C,OAAO,CAAC,4BAA4B,CAAC;MAC7ChzB,QAAQ,CAAClb,OAAO,CAACstF,OAAO,CAAC70F,IAAI,CAAC;MAC9B,OAAOyiB,QAAQ,CAACjb,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOA,OAAO;EAClB,CAAC;EAED,IAAI,CAACi/G,qCAAqC,GAAG,UAAU93D,KAAK,EAAElxC,GAAG,EAAE;IAC/DkxC,KAAK,CAAC1vC,gBAAgB,GAAG,CAAC,CAAC;IAC3B0vC,KAAK,CAAC1vC,gBAAgB,CAACsY,IAAI,GAAI,IAAIA,IAAI,CAAC,CAAC,CAAEmvF,YAAY,CAAC,CAAC;IACzD/3D,KAAK,CAAC1vC,gBAAgB,CAAC0nG,IAAI,GAAG,EAAE;IAChCh4D,KAAK,CAAC1vC,gBAAgB,CAACuH,UAAU,GAAGxqB,aAAa,CAACyqB,UAAU;IAC5DkoC,KAAK,CAAC1vC,gBAAgB,CAACiuF,YAAY,GAAGlxG,aAAa,CAAC2qB,YAAY;IAChEgoC,KAAK,CAAC1vC,gBAAgB,CAAC2T,QAAQ,GAAG52B,aAAa,CAACiuB,QAAQ;IACxD0kC,KAAK,CAAC1vC,gBAAgB,CAAC2nG,sBAAsB,GAAG,EAAE;IAElDhrH,OAAO,CAAC4M,OAAO,CAACiV,GAAG,EAAE,UAAU/hB,EAAE,EAAE;MAC/BizD,KAAK,CAAC1vC,gBAAgB,CAAC2nG,sBAAsB,CAACzkH,IAAI,CAAC;QAC/C0kH,uBAAuB,EAAEnrH,EAAE,CAACutB,aAAa;QACzC69F,oBAAoB,EAAEprH,EAAE,CAACmlB,MAAM;QAC/BkmG,mBAAmB,EAAErrH,EAAE,CAAC0uB;MAC5B,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAAC48F,oCAAoC,GAAG,UAAUr4D,KAAK,EAAElxC,GAAG,EAAEpe,QAAQ,EAAE;IACxEsvD,KAAK,CAAC1vC,gBAAgB,GAAG,CAAC,CAAC;IAC3B0vC,KAAK,CAAC1vC,gBAAgB,CAACgoG,sBAAsB,GAAG,EAAE;IAClDt4D,KAAK,CAAC1vC,gBAAgB,CAACsY,IAAI,GAAI,IAAIA,IAAI,CAAC,CAAC,CAAEmvF,YAAY,CAAC,CAAC;IACzD/3D,KAAK,CAAC1vC,gBAAgB,CAAC0nG,IAAI,GAAG,EAAE;IAChCh4D,KAAK,CAAC1vC,gBAAgB,CAACuH,UAAU,GAAGxqB,aAAa,CAACyqB,UAAU;IAC5DkoC,KAAK,CAAC1vC,gBAAgB,CAACiuF,YAAY,GAAGlxG,aAAa,CAAC2qB,YAAY;IAChEgoC,KAAK,CAAC1vC,gBAAgB,CAAC2T,QAAQ,GAAG52B,aAAa,CAACiuB,QAAQ;IACxD0kC,KAAK,CAAC1vC,gBAAgB,CAACgoG,sBAAsB,CAAC9kH,IAAI,CAAC,IAAI,CAAC+kH,yBAAyB,CAACzpG,GAAG,EAAEpe,QAAQ,CAAC,CAAC;EACrG,CAAC;EAED,IAAI,CAAC6nH,yBAAyB,GAAG,UAAU5uB,eAAe,EAAEj5F,QAAQ,EAAE;IAClE,IAAI8zE,IAAI,GAAG,EAAE;IACb,IAAI,CAAC,CAACmlB,eAAe,CAAC6uB,GAAG,EAAE;MACvBvrH,OAAO,CAAC4M,OAAO,CAAC8vF,eAAe,CAAC6uB,GAAG,CAACh0C,IAAI,EAAE,UAAU+R,CAAC,EAAE;QACnD/R,IAAI,CAAChxE,IAAI,CAAC;UAAEg6C,GAAG,EAAE+oC,CAAC,CAAC/oC,GAAG;UAAE9qC,KAAK,EAAE6zE,CAAC,CAAC7zE;QAAM,CAAC,CAAC;MAC7C,CAAC,CAAC;IACN;;IAEA;IACA;IACA;;IAEA,OAAO;MACH+1G,gBAAgB,EAAE9uB,eAAe,CAAC+uB,UAAU;MAC5CC,gBAAgB,EAAEhvB,eAAe,CAACivB,UAAU;MAC5CC,iBAAiB,EAAElvB,eAAe,CAACmvB,UAAU,CAACC,wBAAwB;MACtEC,eAAe,EAAErvB,eAAe,CAACsvB,aAAa;MAC9CC,UAAU,EAAEvvB,eAAe,CAACwvB,QAAQ;MACpCC,WAAW,EAAEzvB,eAAe,CAAC0vB,SAAS;MACtCC,mBAAmB,EAAE3vB,eAAe,CAACib,aAAa;MAClD2U,kBAAkB,EAAE5vB,eAAe,CAAC6vB,cAAc;MAClDC,kBAAkB,EAAE9vB,eAAe,CAACmvB,UAAU,CAACY,qBAAqB;MACpEC,yBAAyB,EAAEhwB,eAAe,CAACmvB,UAAU,CAACc,gBAAgB;MACtEC,oBAAoB,EAAErsH,aAAa,CAAC60E,aAAa,CAACsnB,eAAe,CAACmwB,KAAK,KAAK,gBAAgB,GAAG,CAACnwB,eAAe,CAACowB,WAAW,GAAGpwB,eAAe,CAACqwB,cAAc,EAAEtpH,QAAQ,CAAC;MACvKupH,eAAe,EAAEtwB,eAAe,CAACuwB,cAAc;MAC/CC,mBAAmB,EAAE,CAAC,CAACxwB,eAAe,CAAC6uB,GAAG,GAAG7uB,eAAe,CAAC6uB,GAAG,CAAC4B,qBAAqB,GAAG,IAAI;MAC7FC,gBAAgB,EAAE,CAAC,CAAC1wB,eAAe,CAAC6uB,GAAG,GAAG7uB,eAAe,CAAC6uB,GAAG,CAAC8B,UAAU,GAAG,IAAI;MAC/EC,UAAU,EAAE/1C;IAChB,CAAC;EACL,CAAC;AAEL,CAAC,CAAC,CAAC,C;;;;;;;;;;;AChLPv3E,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,iBAAiB,EAAE,CAClD,IAAI,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,uBAAuB,EAC7G,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EACxG,UAAUle,EAAE,EAAET,aAAa,EAAEkwB,qBAAqB,EAAEvb,eAAe,EAAEwb,eAAe,EAAEtG,qBAAqB,EAAExpB,SAAS,EAAE+iF,cAAc,EAAEnjF,YAAY,EAAE4U,UAAU,EAAED,eAAe,EAAEu4G,kBAAkB,EAAE;EACnM,IAAI,CAACC,0BAA0B,GAAG,IAAI;EAEtC,IAAI,CAACtpB,YAAY,GAAG,UAAU5gG,EAAE,EAAEmtB,UAAU,EAAEpC,QAAQ,EAAE;IACpD,IAAIsC,QAAQ,GAAGvwB,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,GAAGob,eAAe,GAAGxb,eAAe;IAEjG,IAAIvJ,EAAE,GAAGmlB,QAAQ,CAACuzE,YAAY,CAAC5gG,EAAE,EAAEmtB,UAAU,EAAEpC,QAAQ,EAAE,CAACjuB,aAAa,CAACX,MAAM,CAAC,CAACyE,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAChG,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;MACrB,OAAOkC,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IACF,OAAOJ,EAAE;EACb,CAAC;;EAED;AACJ;AACA;EACI,IAAI,CAAC24F,aAAa,GAAG,UAAUtiF,GAAG,EAAE;IAChC,IAAIyxF,IAAI,GAAG,IAAI;IACf,IAAI3iF,QAAQ,GAAG5b,eAAe;IAC9B,IAAI,CAAC8M,GAAG,CAAC8c,IAAI,EAAE;MACX9c,GAAG,CAAC8c,IAAI,GAAG,EAAE;IACjB;IAEA20E,IAAI,CAACka,0BAA0B,GAAG,IAAI;IAEtC,IAAIptH,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,EAAE;MAChD0M,GAAG,CAAC4rG,QAAQ,GAAG,CAAC;MAChB5rG,GAAG,CAAC6rG,QAAQ,GAAG,CAACttH,aAAa,CAACX,MAAM;MAEpC,IAAIkuH,aAAa,GAAGC,2BAA2B,CAAC/rG,GAAG,CAACve,EAAE,EAAEue,GAAG,CAAC;MAE5D,IAAIgsG,eAAe,GAAGrqC,cAAc,CAACmzB,iBAAiB,CAAC,IAAI,EAAE90F,GAAG,CAACve,EAAE,CAAC,CAC/DY,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjBsY,GAAG,CAACisG,cAAc,GAAG,CAAC,CAACvkH,GAAG,GAAGquB,IAAI,CAACC,SAAS,CAACtuB,GAAG,CAAC,GAAG,IAAI;MAC3D,CAAC,CAAC;MAEN,OAAO1I,EAAE,CAACgxB,GAAG,CAAC,CAAC87F,aAAa,EAAEE,eAAe,CAAC,CAAC,CAC1C3pH,IAAI,CAAC,YAAY;QACd,OAAOosB,qBAAqB,CAAC6zE,aAAa,CAAC,CAACtiF,GAAG,CAAC,CAAC;MACrD,CAAC,CAAC;IACV,CAAC,MAAM;MACH,IAAIrW,EAAE,GAAGuiH,4BAA4B,CAAC,GAAG,CAAC,CACxC7pH,IAAI,CAAC,YAAY;QACX,IAAIypH,aAAa,GAAGC,2BAA2B,CAAC/rG,GAAG,CAACve,EAAE,EAAEue,GAAG,CAAC;QAE5D,IAAIgsG,eAAe,GAAGrqC,cAAc,CAACmzB,iBAAiB,CAAC,IAAI,EAAE90F,GAAG,CAACve,EAAE,CAAC,CAC/DY,IAAI,CAAC,UAAU8pH,cAAc,EAAE;UAC5BnsG,GAAG,CAACisG,cAAc,GAAG,CAAC,CAACE,cAAc,GAAGp2F,IAAI,CAACC,SAAS,CAACm2F,cAAc,CAAC,GAAG,IAAI;QACjF,CAAC,CAAC,SACI,CAAC,UAAU3pH,GAAG,EAAE;UAClBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;UAC3Bwd,GAAG,CAACisG,cAAc,GAAG,IAAI;QAC7B,CAAC,CAAC;QAEN,OAAOjtH,EAAE,CAACgxB,GAAG,CAAC,CAAC87F,aAAa,EAAEE,eAAe,CAAC,CAAC;MACnD,CAAC,CAAC,CACD3pH,IAAI,CAAC,YAAY;QACfovG,IAAI,CAACka,0BAA0B,GAAG3rG,GAAG,CAACve,EAAE;QACxC,OAAOqtB,QAAQ,CAACwzE,aAAa,CAACtiF,GAAG,CAACve,EAAE,EAAEue,GAAG,CAACixF,WAAW,EAAEjxF,GAAG,CAAC8K,iBAAiB,EAAE9K,GAAG,CAACwK,eAAe,EAChGxK,GAAG,CAAC4K,cAAc,EAAE5K,GAAG,CAAC0K,kBAAkB,EAAE1K,GAAG,CAAC8c,IAAI,EAAE9c,GAAG,CAAC+vF,cAAc,EAAE/vF,GAAG,CAACisG,cAAc,CAAC,CAC5F5pH,IAAI,CAAC,UAAUqF,GAAG,EAAE;UACrB,IAAInJ,aAAa,CAACmB,QAAQ,EAAE;YACxBsgB,GAAG,CAAC4rG,QAAQ,GAAG,CAAC;YAChB5rG,GAAG,CAAC6rG,QAAQ,GAAG,CAACttH,aAAa,CAACX,MAAM;YACpC,OAAO6wB,qBAAqB,CAAC6zE,aAAa,CAAC,CAACtiF,GAAG,CAAC;YAChD;YACA;YACA;YACA;YAAA,CACC3d,IAAI,CAAC,UAAUqF,GAAG,EAAE;cAAE,OAAO0gB,qBAAqB,CAACmH,yBAAyB,CAACvP,GAAG,CAACiP,UAAU,CAAC;YAAE,CAAC,CAAC,CAChG5sB,IAAI,CAAC,UAAUqF,GAAG,EAAE;cAAE,OAAOwL,eAAe,CAAC6vF,kBAAkB,CAAC/iF,GAAG,CAACve,EAAE,CAAC;YAAE,CAAC,CAAC,CAC3EY,IAAI,CAAC,UAAUqF,GAAG,EAAE;cAAE,OAAOwL,eAAe,CAAC2wF,mBAAmB,CAAC7jF,GAAG,CAACve,EAAE,CAAC;YAAE,CAAC,CAAC,CAC5EY,IAAI,CAAC,UAAUqF,GAAG,EAAE;cAAE,OAAOwL,eAAe,CAACywF,0BAA0B,CAAC3jF,GAAG,CAACve,EAAE,EAAEue,GAAG,CAACiP,UAAU,CAAC;YAAE,CAAC,CAAC,CACnG5sB,IAAI,CAAC,YAAY;cAAEovG,IAAI,CAACka,0BAA0B,GAAG,IAAI;YAAE,CAAC,CAAC;UAClE,CAAC,MACI;YACDla,IAAI,CAACka,0BAA0B,GAAG,IAAI;YACtC,IAAI/hH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;YACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC,CAAC,CAAC;YACvB,OAAOkC,QAAQ,CAACG,OAAO;UAC3B;QACJ,CAAC,CAAC;MACN,CAAC,CAAC,WAAQ,CAAC,YAAY;QACnB0nG,IAAI,CAACka,0BAA0B,GAAG,IAAI;MAC1C,CAAC,CAAC;MAGF,OAAOhiH,EAAE;IACb;EACJ,CAAC;EAGD,IAAI,CAAC8iB,kBAAkB,GAAG,UAAUhrB,EAAE,EAAEqhB,MAAM,EAAE;IAC5C,IAAIvkB,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,EAAE;MAChD,IAAI1J,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B;IAEA,IAAI+kB,QAAQ,GAAG5b,eAAe;IAC9B,IAAIvJ,EAAE,GAAGmlB,QAAQ,CAACm0E,mBAAmB,CAACxhG,EAAE,EAAEqhB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAACzgB,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC9E,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;MACrB,OAAOkC,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IACF,OAAOJ,EAAE;EACb,CAAC;EAED,IAAI,CAACyiH,oBAAoB,GAAG,IAAI;EAChC,IAAI,CAAChiG,sBAAsB,GAAG,UAAUwE,UAAU,EAAEpC,QAAQ,EAAE6/F,YAAY,EAAE7sH,IAAI,EAAEmvB,eAAe,EAAE;IAC/F,IAAG,IAAI,CAACy9F,oBAAoB,EAAE;MAC1B,IAAIxiH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAACsiH,oBAAoB,CAAC;MAC3C,IAAI,CAACA,oBAAoB,GAAG,IAAI;MAChC,OAAOxiH,QAAQ,CAACG,OAAO;IAC3B;IACA1G,OAAO,CAACy0C,IAAI,CAAC,4BAA4B,CAAC;IAC1C,IAAIhpB,QAAQ,GAAIvwB,aAAa,CAACX,MAAM,IAAIyuH,YAAY,IAAIj5G,UAAU,CAACE,WAAW,GAAIob,eAAe,GAAGxb,eAAe;IACnH,OAAO4b,QAAQ,CAAC1E,sBAAsB,CAACwE,UAAU,EAAEpC,QAAQ,EAAEhtB,IAAI,EAAEmvB,eAAe,CAAC,CAClFtsB,IAAI,CAAC,UAASqF,GAAG,EAAE;MAChBrE,OAAO,CAAC20C,OAAO,CAAC,4BAA4B,CAAC;MAC7C,IAAIpuC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;MACrB,OAAOkC,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAACy5F,mBAAmB,GAAG,UAAU50E,UAAU,EAAEpC,QAAQ,EAAE6/F,YAAY,EAAE;IACrE,IAAIv9F,QAAQ,GAAIvwB,aAAa,CAACX,MAAM,IAAIyuH,YAAY,IAAIj5G,UAAU,CAACE,WAAW,GAAIob,eAAe,GAAGxb,eAAe;IACnH,OAAO4b,QAAQ,CAAC00E,mBAAmB,CAAC50E,UAAU,EAAEpC,QAAQ,CAAC;EAC7D,CAAC;EAED,IAAI1E,eAAe,GAAG,IAAI;EAE1B,SAASikG,2BAA2BA,CAACp9F,eAAe,EAAE3O,GAAG,EAAE;IACvD,IAAI0rG,kBAAkB,CAAC/Z,iBAAiB,CAAC,IAAI,CAAC,EAAE;MAC5C,OAAO+Z,kBAAkB,CAAC94B,yBAAyB,CAACjkE,eAAe,CAAC,CAC/DtsB,IAAI,CAAC,UAAS2wF,MAAM,EAAE;QACnBhzE,GAAG,CAACssG,mBAAmB,GAAGt5B,MAAM;MACpC,CAAC,CAAC,SACI,CAAC,UAASxwF,GAAG,EAAE;QACjBa,OAAO,CAACqkB,KAAK,CAAC,uCAAuC,EAAEllB,GAAG,CAAC;MAC/D,CAAC,CAAC;IACV,CAAC,MAAM;MACH,OAAOxD,EAAE,CAAC8K,OAAO,CAAC,CAAC;IACvB;EACJ;EAEA,SAASoiH,4BAA4BA,CAAC7gG,KAAK,EAAE;IACzC,IAAI1hB,EAAE,GAAGuJ,eAAe,CAACuwF,6BAA6B,CAACp4E,KAAK,EAAEvD,eAAe,CAAC6jG,0BAA0B,CAAC,CAACtpH,IAAI,CAAC,UAAUE,IAAI,EAAE;MAC3H,IAAIkX,GAAG,GAAG,EAAE;MAEZtX,CAAC,CAACmC,IAAI,CAAC/B,IAAI,EAAE,UAAUgC,GAAG,EAAEtG,EAAE,EAAE;QAC5B,IAAI+hB,GAAG,GAAG/hB,EAAE;QACZ+hB,GAAG,CAAC6rG,QAAQ,GAAG,CAACttH,aAAa,CAACX,MAAM;QACpC6b,GAAG,CAAC/U,IAAI,CAACsb,GAAG,CAAC;MACjB,CAAC,CAAC;MAEF,IAAIvG,GAAG,CAAChV,MAAM,GAAG,CAAC,EAAE;QAChB,IAAI8nH,aAAa,GAAG9yG,GAAG,CAACtE,GAAG,CAAC,UAAS6K,GAAG,EAAE;UACtC,OAAO+rG,2BAA2B,CAAC/rG,GAAG,CAACve,EAAE,EAAEue,GAAG,CAAC,CAC1C3d,IAAI,CAAC,YAAW;YACb,OAAO2d,GAAG;UACd,CAAC,CAAC;QACV,CAAC,CAAC;QAEF,OAAOhhB,EAAE,CAACgxB,GAAG,CAACu8F,aAAa,CAAC,CACvBlqH,IAAI,CAAC,YAAW;UACb,OAAOosB,qBAAqB,CAAC6zE,aAAa,CAAC7oF,GAAG,CAAC;QACnD,CAAC,CAAC,CACDpX,IAAI,CAAC,YAAY;UACd,IAAIotB,QAAQ,GAAG,EAAE;UACjBttB,CAAC,CAACmC,IAAI,CAACmV,GAAG,EAAE,UAAUlV,GAAG,EAAEtG,EAAE,EAAE;YAC3B,IAAI0xB,GAAG,GAAGvH,qBAAqB,CAACmH,yBAAyB,CAACtxB,EAAE,CAACgxB,UAAU,CAAC,CAAC5sB,IAAI,CAAC,YAAY;cACtF,OAAO6Q,eAAe,CAAC6vF,kBAAkB,CAAC9kG,EAAE,CAACwD,EAAE,CAAC;YACpD,CAAC,CAAC;YACFguB,QAAQ,CAAC/qB,IAAI,CAACirB,GAAG,CAAC;UACtB,CAAC,CAAC;UACF,OAAO3wB,EAAE,CAACgxB,GAAG,CAACP,QAAQ,CAAC;QAC3B,CAAC,EACD,UAAUjtB,GAAG,EAAE;UACX;UACA,IAAIoH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzBD,QAAQ,CAACE,OAAO,CAAC,KAAK,CAAC;UACvB,OAAOF,QAAQ,CAACG,OAAO;QAC3B,CAAC,CAAC;MACV;IACJ,CAAC,CAAC;IAEF,OAAOJ,EAAE,CAACtH,IAAI,CAAC,YAAY;MACvB,OAAO6Q,eAAe,CAACuwF,6BAA6B,CAAC,CAAC,CAACphG,IAAI,CAAC,UAAUC,IAAI,EAAE;QACxE,IAAIA,IAAI,CAACmC,MAAM,GAAG,CAAC,IAAIlG,aAAa,CAACmB,QAAQ,KAAK,IAAI,EAAE;UACpD,OAAO,IAAI;QACf,CAAC,MAAM;UACH,OAAO,KAAK;QAChB;MACJ,CAAC,CAAC;IACN,CAAC,CAAC;EACN;EAEA,IAAI,CAACwwB,WAAW,GAAG,YAAY;IAC3B,IAAI,EAAE3xB,aAAa,CAACX,MAAM,IAAKwV,UAAU,CAACE,WAAW,CAAC,EAAE;MACpD/U,aAAa,CAAC4xB,mBAAmB,CAAC+7F,4BAA4B,CAAC;IACnE;EACJ,CAAC;AACL,CAAC,CAAC,CAAC,C;;;;;;;;;;;;;;;;ACjN4C;AACM;AAErD/tH,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,uBAAuB,EACtD,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAClE,UAAUle,EAAE,EAAEwkB,KAAK,EAAEjlB,aAAa,EAAEM,QAAQ,EAAE06B,SAAS,EAAEj7B,UAAU,EAAE;EAEjE,IAAI,CAACohG,KAAK,GAAG,UAAUpvE,WAAW,EAAE9D,QAAQ,EAAEoE,QAAQ,EAAEmuE,GAAG,EAAEz6D,QAAQ,EAA4D;IAAA,IAA1DkoF,aAAa,GAAAh9G,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,IAAI;IAAA,IAAEi9G,SAAS,GAAAj9G,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,IAAI;IAAA,IAAEowF,SAAS,GAAApwF,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,IAAI;IAC3H;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA,IAAMi1D,GAAG,GAAG;MACRtvC,QAAQ,EAAE3I,QAAQ;MAClB8yE,QAAQ,EAAE1uE,QAAQ;MAClB87F,kBAAkB,EAAEp8F,WAAW;MAC/B+uE,QAAQ,EAAE/6D,QAAQ;MAClBqoF,GAAG,EAAE5tB,GAAG;MACR6tB,UAAU,EAAEjvH,sEAA6B;MACzCkvH,aAAa,EAAEL,aAAa;MAC5BM,SAAS,EAAEL,SAAS;MACpBM,QAAQ,EAAEpvH,oEAA2B;MACrCqvH,SAAS,EAAE;IACf,CAAC;IAED,IAAIptB,SAAS,EAAE;MACXn7B,GAAG,CAAC66B,QAAQ,GAAG,IAAI;MACnB76B,GAAG,CAACwoD,MAAM,GAAGrtB,SAAS,CAACqtB,MAAM;MAC7BxoD,GAAG,CAACuoD,SAAS,GAAG,IAAI;MACpBvoD,GAAG,CAACyoD,cAAc,GAAGttB,SAAS,CAACstB,cAAc;IACjD;IACA,OAAO1pG,KAAK,CAAC;MACTiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,aAAa;MAChDlkC,IAAI,EAAEkiE;IACV,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAAC1zC,cAAc,GAAG,UAAUR,MAAM,EAAE48F,WAAW,EAAEC,WAAW,EAAE;IAC9D,IAAI3oD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,cAAc,GAAGlW,MAAM;MAC1DhuB,IAAI,EAAE;QACF8qH,WAAW,EAAEF,WAAW;QACxBG,WAAW,EAAEF;MACjB;IACJ,CAAC,CAAC;IAEF,OAAO3oD,GAAG;EACd,CAAC;EAED,IAAI,CAAC27B,yBAAyB,GAAG,UAAU7vE,MAAM,EAAE;IAC/C,IAAIk0C,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,oBAAoB,GAAGlW;IAC9D,CAAC,CAAC;IAEF,OAAOk0C,GAAG;EACd,CAAC;EAED,IAAI,CAAC+7B,eAAe,GAAG,UAAUpP,WAAW,EAAEqP,aAAa,EAAE;IACzD,IAAIh8B,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,uCAAuC,GAAGg6D;IACjF,CAAC,CAAC;IAEF,OAAOh8B,GAAG;EACd,CAAC;EAED,IAAI,CAAC8oD,kBAAkB,GAAG,UAAUn8B,WAAW,EAAEqP,aAAa,EAAE;IAC5D,IAAIh8B,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,qDAAqD,GAAGg6D;IAC/F,CAAC,CAAC;IAEF,OAAOh8B,GAAG;EACd,CAAC;EAED,IAAI,CAAC47B,YAAY,GAAG,UAAUjP,WAAW,EAAE;IACvC,IAAI3sB,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,gBAAgB,GAAG2qD;IAC1D,CAAC,CAAC;IAEF,OAAO3sB,GAAG;EACd,CAAC;EAED,IAAI,CAAC+oD,qBAAqB,GAAG,YAAY;IACrC,IAAI/oD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG;IACvC,CAAC,CAAC;IAEF,OAAOg+B,GAAG;EACd,CAAC;EAED,IAAI,CAACkiD,YAAY,GAAG,UAAU/iG,IAAI,EAAE;IAChC,IAAI6gD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,cAAc;MACjDgvE,MAAM,EAAE;QACJuR,WAAW,EAAE,CAAC,CAACpjG,IAAI,GAAGA,IAAI,GAAG,IAAI;QACjC6pG,uBAAuB,EAAElvH,aAAa,CAAC2qC,sBAAsB;QAC7DwkF,gBAAgB,EAAE;MACtB;IAEJ,CAAC,CAAC;IAEF,OAAOjpD,GAAG;EACd,CAAC;EAED,IAAI,CAACsjD,SAAS,GAAG,UAAUt+B,SAAS,EAAEkkC,EAAE,EAAEC,EAAE,EAAE;IAC1C,IAAInpD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACb;MACAf,GAAG,EAAEnlB,aAAa,CAACszB,YAAY,GAAG,sBAAsB,GAAG43D,SAAS,GAAG,SAAS,GAAGkkC,EAAE,GAAG,UAAU,GAAGC;IACzG,CAAC,CAAC;IAEF,OAAOnpD,GAAG;EACd,CAAC;EAED,IAAI,CAACujD,eAAe,GAAG,UAAUv+B,SAAS,EAAEkkC,EAAE,EAAEC,EAAE,EAAE;IAChD,IAAInpD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACb;MACAf,GAAG,EAAEnlB,aAAa,CAACszB,YAAY,GAAG,4BAA4B,GAAG43D,SAAS,GAAG,SAAS,GAAGkkC,EAAE,GAAG,UAAU,GAAGC;IAC/G,CAAC,CAAC;IACF,OAAOnpD,GAAG;EACd,CAAC;EAGD,IAAI,CAAC/rB,gBAAgB,GAAG,UAAU90B,IAAI,EAAsB;IAAA,IAApBiqG,UAAU,GAAAr+G,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,KAAK;IACtD,IAAIi1D,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACjC;MACoBf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,mBAAmB;MACtDgvE,MAAM,EAAE;QACJ18D,YAAY,EAAEn1B,IAAI;QAClBiqG,UAAU,EAAEA;MAChB;IACJ,CAAC,CAAC;IAEF,OAAOppD,GAAG;EACd,CAAC;EAED,IAAI,CAACh9D,aAAa,GAAG,UAAUlB,IAAI,EAAEkzB,IAAI,EAAEC,KAAK,EAAErlB,OAAO,EAAE;IACvD,IAAI,CAACA,OAAO,EAAE;MACVA,OAAO,GAAG,CAAC,CAAC;IAChB;IACA,IAAI,CAAC9V,aAAa,CAACmB,QAAQ,EAAE;MACzB,IAAIkK,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACqb,MAAM,CAAC,oCAAoC,CAAC;MACrD,OAAOrb,QAAQ,CAACG,OAAO;IAC3B;IACA,IAAI06D,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,eAAe;MAClDgvE,MAAM,EAAE;QACJ10G,IAAI,EAAEsT,OAAO,CAACmmB,YAAY,GAAGnmB,OAAO,CAACmmB,YAAY,GAAG,IAAI;QACxDr5B,KAAK,EAAEkT,OAAO,CAACknB,aAAa,GAAGlnB,OAAO,CAACknB,aAAa,GAAG,IAAI;QAC3Dr6B,KAAK,EAAEmT,OAAO,CAACinB,aAAa,GAAGjnB,OAAO,CAACinB,aAAa,GAAG,IAAI;QAC3DwyF,IAAI,EAAEvnH,IAAI,GAAGytD,kBAAkB,CAACztD,IAAI,CAAC,GAAG,IAAI;QAC5C9E,EAAE,EAAE4S,OAAO,CAACpL,UAAU,GAAGoL,OAAO,CAACpL,UAAU,GAAG,IAAI;QAClDy3G,IAAI,EAAEjnF,IAAI,GAAGA,IAAI,GAAG,IAAI;QACxBs0F,KAAK,EAAEr0F,KAAK,GAAGA,KAAK,GAAG,IAAI;QAC3Bwc,WAAW,EAAE7hC,OAAO,CAAC6hC,WAAW,GAAG7hC,OAAO,CAAC6hC,WAAW,GAAG;MAC7D;IACJ,CAAC,CAAC;IAEF,OAAOuuB,GAAG,CAACpiE,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC3B,IAAIA,GAAG,CAACnF,IAAI,IAAImF,GAAG,CAACnF,IAAI,CAACoF,SAAS,EAAE;QAChCD,GAAG,CAACnF,IAAI,CAACoF,SAAS,GAAGD,GAAG,CAACnF,IAAI,CAACoF,SAAS,CAACwN,GAAG,CAAC,UAAUrJ,CAAC,EAAE;UACrD,IAAI7M,QAAQ,GAAG8hB,MAAM,CAACitG,MAAM,CAAC,CAAC,CAAC,EAAEliH,CAAC,CAAC;UACnC7M,QAAQ,CAACgvH,UAAU,GAAG,EAAE;UACxB,IAAIniH,CAAC,CAACmiH,UAAU,IAAIniH,CAAC,CAACmiH,UAAU,KAAK,EAAE,EAAE;YACrC,IAAMx0G,GAAG,GAAG3N,CAAC,CAACmiH,UAAU,CAACv0G,KAAK,CAAC,GAAG,CAAC;YACnC,KAAK,IAAI7G,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4G,GAAG,CAAChV,MAAM,EAAEoO,CAAC,EAAE,EAAE;cACjC,IAAIe,KAAK,GAAG9H,CAAC,CAAC,qBAAqB,IAAI+G,CAAC,GAAG,CAAC,CAAC,CAAC;cAC9C,IAAIe,KAAK,EAAE;gBACP3U,QAAQ,CAACgvH,UAAU,CAACvpH,IAAI,CAAC;kBAAC3D,IAAI,EAAE0Y,GAAG,CAAC5G,CAAC,CAAC;kBAAEoB,KAAK,EAAEL;gBAAK,CAAC,CAAC;cAC1D;YACJ;UACJ;UACA,OAAO3U,QAAQ;QACnB,CAAC,CAAC;MACN;MACA,OAAOyI,GAAG;IACd,CAAC,CAAC;EACN,CAAC;EAGD,IAAI,CAACwmH,gBAAgB,GAAG,UAAUnlH,KAAK,EAAEF,EAAE,EAAE;IACzC,IAAI47D,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,eAAe;MAClDgvE,MAAM,EAAE;QACJv0G,KAAK,EAAE6H,KAAK;QACZolH,aAAa,EAAEtlH;MACnB;IACJ,CAAC,CAAC;IAEF,OAAO47D,GAAG;EACd,CAAC;EAED,IAAI,CAACpuB,WAAW,GAAG,UAAUC,EAAE,EAAE;IAC7B,IAAImuB,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,eAAe;MAClDgvE,MAAM,EAAE;QACJh0G,EAAE,EAAE60C;MACR;IACJ,CAAC,CAAC;IAEF,OAAOmuB,GAAG;EACd,CAAC;EAGD,IAAI,CAAC95D,cAAc,GAAG,UAAU1L,QAAQ,EAAE;IACtC,IAAIwlE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,cAAc;MACjDlkC,IAAI,EAAEtD;IACV,CAAC,CAAC;IAEF,OAAOwlE,GAAG;EACd,CAAC;EAED,IAAI,CAACviE,aAAa,GAAG,YAAY;IAC7B,IAAIuiE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG;IACvC,CAAC,CAAC;IAEF,OAAOg+B,GAAG;EACd,CAAC;EAED,IAAI,CAAC12D,cAAc,GAAG,UAAU9O,QAAQ,EAAE;IACtCd,OAAO,CAAC2P,MAAM,CAAC7O,QAAQ,EAAE;MAAEutB,QAAQ,EAAEjuB,aAAa,CAACiuB;IAAS,CAAC,CAAC;IAC9D,IAAIi4C,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,cAAc;MACjDlkC,IAAI,EAAEtD;IACV,CAAC,CAAC;IAEF,OAAOwlE,GAAG;EACd,CAAC;EAED,IAAI,CAAChtB,cAAc,GAAG,UAAUC,UAAU,EAAE;IACxC,IAAI+sB,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,QAAQ;MAChBf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,iBAAiB,GAAGiR;IAC3D,CAAC,CAAC;IAEF,OAAO+sB,GAAG;EACd,CAAC;EAED,IAAI,CAAC2pD,WAAW,GAAG,UAAUhuF,IAAI,EAAE;IAE/B,IAAIqkC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,WAAW;MAC9ClkC,IAAI,EAAE;QAAE8rH,IAAI,EAAEjuF;MAAK;IACvB,CAAC,CAAC;IAEF,OAAOqkC,GAAG;EACd,CAAC;EAED,IAAI,CAACq9B,kBAAkB,GAAG,UAAUh3D,SAAS,EAAE;IAC3C,IAAI25B,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,iBAAiB,GAAGqE,SAAS,GAAG,+CAA+C;MAClHpmB,KAAK,EAAE;IACX,CAAC,CAAC;IAEF,OAAO+/C,GAAG;EACd,CAAC;EAED,IAAI,CAAC0yB,gBAAgB,GAAG,UAAUrsD,SAAS,EAAE;IACzC,IAAI25B,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,iBAAiB,GAAGqE,SAAS,GAAG,yCAAyC;MAC5GpmB,KAAK,EAAE;IACX,CAAC,CAAC;IAEF,OAAO+/C,GAAG;EACd,CAAC;EAED,IAAI,CAACskD,wBAAwB,GAAG,UAAUuF,WAAW,EAAEC,kBAAkB,EAAE;IACvE,IAAI9pD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,8BAA8B,GAAG6nF,WAAW,GAAG,+BAA+B,GAAGC,kBAAkB;MACtI7pG,KAAK,EAAE;IACX,CAAC,CAAC;IAEF,OAAO+/C,GAAG;EACd,CAAC;EAED,IAAI,CAAC+pD,gBAAgB,GAAG,UAAU/0F,IAAI,EAAEC,KAAK,EAAErlB,OAAO,EAAEisG,OAAO,EAAEphH,UAAU,EAAE;IAEzE,IAAI,CAACmV,OAAO,EAAE;MACVA,OAAO,GAAG,CAAC,CAAC;IAChB;IACA,IAAI,CAACisG,OAAO,EAAE;MACVA,OAAO,GAAG,CAAC,CAAC;IAChB;IACA,IAAImO,aAAa,GAAG,KAAK;IACzB,IAAIC,SAAS,GAAG,IAAI;IACpB,IAAIr6G,OAAO,CAACw9E,QAAQ,IAAI,OAAOx9E,OAAO,CAACw9E,QAAQ,KAAK,QAAQ,EAAE;MAC1D,IAAI;QACA68B,SAAS,GAAG34F,IAAI,CAAC2T,KAAK,CAACr1B,OAAO,CAACw9E,QAAQ,CAAC;QACxC,IAAI68B,SAAS,IAAIpmH,KAAK,CAAC0wC,OAAO,CAAC01E,SAAS,CAAC,EAAE;UACvCD,aAAa,GAAG,IAAI;QACxB;MACJ,CAAC,CAAC,OAAO7uG,CAAC,EAAE;QACR6uG,aAAa,GAAG,KAAK;MACzB;IACJ;IAEA,IAAIhqD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,eAAe;MAClDgvE,MAAM,EAAE;QACJ/1C,QAAQ,EAAErrD,OAAO,CAACqrD,QAAQ,GAAGrrD,OAAO,CAACqrD,QAAQ,GAAG,IAAI;QACpDC,MAAM,EAAEtrD,OAAO,CAACsrD,MAAM,GAAGtrD,OAAO,CAACsrD,MAAM,GAAG,IAAI;QAC9CgvD,UAAU,EAAE,IAAI70F,IAAI,CAAC,CAAC,CAAC80F,iBAAiB,CAAC,CAAC;QAC1CntH,EAAE,EAAE4S,OAAO,CAAC4gB,MAAM,GAAG5gB,OAAO,CAAC4gB,MAAM,GAAG,IAAI;QAC1CuF,YAAY,EAAEnmB,OAAO,CAACjG,QAAQ,GAAGiG,OAAO,CAACjG,QAAQ,GAAG,IAAI;QACxDuoB,WAAW,EAAEtiB,OAAO,CAACw6G,aAAa,GAAGx6G,OAAO,CAACw6G,aAAa,GAAG,IAAI;QACjEnzE,QAAQ,EAAErnC,OAAO,CAACqnC,QAAQ,IAAIrnC,OAAO,CAACqnC,QAAQ,IAAI,GAAG,GAAGrnC,OAAO,CAACqnC,QAAQ,GAAG,IAAI;QAC/EvmB,QAAQ,EAAE9gB,OAAO,CAAC8gB,QAAQ,GAAG9gB,OAAO,CAAC8gB,QAAQ,GAAG,IAAI;QACpDzzB,MAAM,EAAE2S,OAAO,CAACw9E,QAAQ,IAAIx9E,OAAO,CAACw9E,QAAQ,IAAI,GAAG,IAAI,OAAOx9E,OAAO,CAACw9E,QAAQ,KAAK,QAAQ,IAAI,CAAC48B,aAAa,GAAGp6G,OAAO,CAACw9E,QAAQ,GAAG,IAAI;QACvIjqF,UAAU,EAAE1I,UAAU,GAAGA,UAAU,GAAG,IAAI;QAC1CwhH,IAAI,EAAEjnF,IAAI,GAAGA,IAAI,GAAG,IAAI;QACxBs0F,KAAK,EAAEr0F,KAAK,GAAGA,KAAK,GAAG,IAAI;QAC3Bo1F,SAAS,EAAExO,OAAO,CAACyO,SAAS,GAAGzO,OAAO,CAACyO,SAAS,GAAG,IAAI;QACvDC,aAAa,EAAE1O,OAAO,CAAC2O,SAAS,GAAG3O,OAAO,CAAC2O,SAAS,GAAG,IAAI;QAC3DC,aAAa,EAAE3wH,aAAa,CAACikC,aAAa;QAC1C2sF,eAAe,EAAE96G,OAAO,CAAC86G,eAAe,GAAG96G,OAAO,CAAC86G,eAAe,GAAG,IAAI;QACzEC,QAAQ,EAAE/6G,OAAO,CAACw9E,QAAQ,IAAI48B,aAAa,IAAIC,SAAS,CAACjqH,MAAM,GAAGiqH,SAAS,GAAG;MAClF;IACJ,CAAC,CAAC;IAEF,OAAOjqD,GAAG;EACd,CAAC;EAED,IAAI,CAAC4qD,QAAQ,GAAG,UAAUjvF,IAAI,EAAEqJ,IAAI,EAAE;IAClC,IAAIzpB,GAAG,GAAG;MACNogB,IAAI,EAAEA,IAAI;MACVqJ,IAAI,EAAEA,IAAI;MACV3P,IAAI,EAAE,IAAIA,IAAI,CAAC,CAAC;MAChBs4D,OAAO,EAAEhyD,IAAI,CAAC3+B,EAAE;MAChBk1B,WAAW,EAAEyJ,IAAI,CAACzJ,WAAW;MAC7BtH,mBAAmB,EAAEoa,IAAI,CAACjd,QAAQ;MAClCyC,UAAU,EAAEwa,IAAI,CAAC7a;IACrB,CAAC;IAED,IAAI61C,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,WAAW;MAC9ClkC,IAAI,EAAE;QAAE8rH,IAAI,EAAE,CAACruG,GAAG;MAAE;IACxB,CAAC,CAAC;IAEF,OAAOykD,GAAG;EACd,CAAC;EAED,IAAI,CAAC8sB,eAAe,GAAG,UAAU93D,IAAI,EAAEC,KAAK,EAAEokB,QAAQ,EAAEzpC,OAAO,EAAE;IAC7D,IAAI,CAACA,OAAO,EAAE;MACVA,OAAO,GAAG,CAAC,CAAC;IAChB;IACA,IAAIowD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,eAAe;MAClDgvE,MAAM,EAAE;QACJh0G,EAAE,EAAE4S,OAAO,CAAC4gB,MAAM,GAAG5gB,OAAO,CAAC4gB,MAAM,GAAG,IAAI;QAC1CymB,QAAQ,EAAEoC,QAAQ;QAClBp8C,MAAM,EAAE,QAAQ;QAChBg/G,IAAI,EAAEjnF,IAAI;QACVs0F,KAAK,EAAEr0F,KAAK;QACZw1F,aAAa,EAAE3wH,aAAa,CAACikC;MACjC;IACJ,CAAC,CAAC;IAEF,OAAOiiC,GAAG;EACd,CAAC;EAED,IAAI,CAAC6qD,YAAY,GAAG,YAAY;IAC5B,IAAI7qD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG;IACvC,CAAC,CAAC;IAEF,OAAOg+B,GAAG;EACd,CAAC;EAED,IAAI,CAAChC,gBAAgB,GAAG,UAAUH,OAAO,EAAEC,WAAW,EAAEx5D,KAAK,EAAE25D,YAAY,EAAEC,SAAS,EAAEC,aAAa,EAAEC,UAAU,EAAEC,YAAY,EAAE;IAC7H,IAAI2B,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,kBAAkB;MACrDlkC,IAAI,EAAE;QACF6vF,OAAO,EAAE9vB,OAAO;QAChBitD,WAAW,EAAEhtD,WAAW;QACxBy/B,YAAY,EAAEt/B,YAAY;QAC1B8sD,SAAS,EAAE7sD,SAAS;QACpBzhE,KAAK,EAAE6H,KAAK;QACZ0mH,aAAa,EAAE7sD,aAAa,KAAK,IAAI;QACrCq/B,UAAU,EAAEp/B,UAAU;QACtB6sD,YAAY,EAAE5sD;MAClB;IACJ,CAAC,CAAC;IAEF,OAAO2B,GAAG;EACd,CAAC;;EAGD;AACZ;AACA;EACY,IAAI,CAAC69B,aAAa,GAAG,UAAUvzE,MAAM,EAAE;IAEnC,IAAI01C,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,mBAAmB;MACtDlkC,IAAI,EAAE;QAAE8rH,IAAI,EAAEt/F;MAAO;IACzB,CAAC,CAAC;IAEF,OAAO01C,GAAG;EACd,CAAC;EAED,IAAI,CAACkrD,WAAW,GAAG,UAAUC,eAAe,EAAEn2F,IAAI,EAAEC,KAAK,EAAErlB,OAAO,EAAE;IAChE,IAAI,CAACA,OAAO,EAAE;MACVA,OAAO,GAAG,CAAC,CAAC;IAChB;IACA,IAAIowD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,oBAAoB;MACvDgvE,MAAM,EAAE;QACJoa,eAAe,EAAED,eAAe;QAChClP,IAAI,EAAEjnF,IAAI,GAAGA,IAAI,GAAG,IAAI;QACxBs0F,KAAK,EAAEr0F,KAAK,GAAGA,KAAK,GAAG,IAAI;QAC3Bj4B,EAAE,EAAE4S,OAAO,CAAC5S,EAAE,GAAG4S,OAAO,CAAC5S,EAAE,GAAG,IAAI;QAClC0zB,QAAQ,EAAE9gB,OAAO,CAAC8gB,QAAQ,GAAG9gB,OAAO,CAAC8gB,QAAQ,GAAG,IAAI;QACpD26F,QAAQ,EAAEz7G,OAAO,CAACy7G,QAAQ,IAAIz7G,OAAO,CAACy7G,QAAQ,IAAI,GAAG,GAAGz7G,OAAO,CAACy7G,QAAQ,GAAG,IAAI;QAC/Ep0E,QAAQ,EAAErnC,OAAO,CAACqnC,QAAQ,IAAIrnC,OAAO,CAACqnC,QAAQ,IAAI,GAAG,GAAGrnC,OAAO,CAACqnC,QAAQ,GAAG;MAC/E;IACJ,CAAC,CAAC;IAEF,OAAO+oB,GAAG;EACd,CAAC;EAED,IAAI,CAAClwD,yBAAyB,GAAG,UAAUklB,IAAI,EAAEC,KAAK,EAAEokB,QAAQ,EAAEzpC,OAAO,EAAE;IACvE,IAAI,CAACA,OAAO,EAAE;MACVA,OAAO,GAAG,CAAC,CAAC;IAChB;IACA,IAAIowD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,+BAA+B;MAClEgvE,MAAM,EAAE;QACJiL,IAAI,EAAEjnF,IAAI,GAAGA,IAAI,GAAG,IAAI;QACxBs0F,KAAK,EAAEr0F,KAAK,GAAGA,KAAK,GAAG,IAAI;QAC3BgiB,QAAQ,EAAEoC,QAAQ,GAAEA,QAAQ,GAAE,IAAI;QAClCr8C,EAAE,EAAE4S,OAAO,CAAC5S,EAAE,GAAG4S,OAAO,CAAC5S,EAAE,GAAG,IAAI;QAClCV,IAAI,EAAEsT,OAAO,CAACtT,IAAI,GAAGsT,OAAO,CAACtT,IAAI,GAAG,IAAI;QACxCuT,gBAAgB,EAAED,OAAO,CAACC,gBAAgB,GAAGD,OAAO,CAACC,gBAAgB,GAAG;MAC5E;IACJ,CAAC,CAAC;IAEF,OAAOmwD,GAAG;EACd,CAAC;EAED,IAAI,CAACsrD,0BAA0B,GAAG,UAAUnsG,IAAI,EAAE;IAC9C,IAAI6gD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,6BAA6B,IAAI,CAAC,CAAC7iB,IAAI,GAAI,2BAA2B,GAAGA,IAAI,GAAI,EAAE;IAC1H,CAAC,CAAC;IAEF,OAAO6gD,GAAG;EACd,CAAC;EAGD,IAAI,CAACurD,aAAa,GAAG,UAAUC,IAAI,EAAE;IACjC,IAAIxrD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,oBAAoB;MACvDlkC,IAAI,EAAE;QACF4yB,QAAQ,EAAE86F,IAAI,CAAC96F,QAAQ;QACvBp0B,IAAI,EAAEkvH,IAAI,CAAClvH,IAAI;QACf+uH,QAAQ,EAAEG,IAAI,CAACC,YAAY;QAC3Bx0E,QAAQ,EAAEu0E,IAAI,CAACpmF,WAAW;QAC1BsmF,WAAW,EAAE5xH,aAAa,CAAC+rB;MAC/B;IACJ,CAAC,CAAC;IAEF,OAAOm6C,GAAG;EACd,CAAC;EAED,IAAI,CAAC2rD,aAAa,GAAG,UAAUH,IAAI,EAAE;IACjC,IAAIxrD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,oBAAoB;MACvDlkC,IAAI,EAAE;QACFd,EAAE,EAAEwuH,IAAI,CAACI,MAAM;QACftvH,IAAI,EAAEkvH,IAAI,CAAClvH,IAAI;QACf+uH,QAAQ,EAAEG,IAAI,CAACC,YAAY;QAC3Bx0E,QAAQ,EAAEu0E,IAAI,CAACpmF,WAAW;QAC1BsmF,WAAW,EAAE5xH,aAAa,CAAC+rB;MAC/B;IACJ,CAAC,CAAC;IAEF,OAAOm6C,GAAG;EACd,CAAC;EAED,IAAI,CAAC6rD,aAAa,GAAG,UAAU7uH,EAAE,EAAE;IAC/B,IAAIgjE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,QAAQ;MAChBf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,oBAAoB;MACvDgvE,MAAM,EAAE;QACJh0G,EAAE,EAAEA,EAAE;QACN0uH,WAAW,EAAE5xH,aAAa,CAAC+rB;MAC/B;IACJ,CAAC,CAAC;IAEF,OAAOm6C,GAAG;EACd,CAAC;EAED,IAAI,CAAC8rD,YAAY,GAAG,UAAU9uH,EAAE,EAAE;IAC9B,IAAIgjE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,oBAAoB;MACvDlkC,IAAI,EAAE;QACFd,EAAE,EAAEA,EAAE;QACN+uH,QAAQ,EAAE;MACd;IACJ,CAAC,CAAC;IAEF,OAAO/rD,GAAG;EACd,CAAC;EAED,IAAI,CAACgsD,cAAc,GAAG,UAAUhvH,EAAE,EAAE;IAChC,IAAIgjE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,oBAAoB;MACvDlkC,IAAI,EAAE;QACFd,EAAE,EAAEA,EAAE;QACN+uH,QAAQ,EAAE;MACd;IACJ,CAAC,CAAC;IAEF,OAAO/rD,GAAG;EACd,CAAC;EAED,IAAI,CAACisD,iBAAiB,GAAG,UAAUjvH,EAAE,EAAE;IACnC,IAAIgjE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,QAAQ;MAChBf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,WAAW;MAC9CgvE,MAAM,EAAE;QACJh0G,EAAE,EAAEA;MACR;IACJ,CAAC,CAAC;IAEF,OAAOgjE,GAAG;EACd,CAAC;EAED,SAASksD,eAAeA,CAAA,EAAG;IAEvB,IAAI,CAACpyH,aAAa,CAACikC,aAAa,IAAI,CAACjkC,aAAa,CAACokC,QAAQ,EAAE;MACzD,IAAI/4B,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B,CAAC,MACI;MACD,IAAI06D,GAAG,GAAGjhD,KAAK,CAAC;QACZiB,MAAM,EAAE,KAAK;QACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,UAAU;QAC7CgvE,MAAM,EAAE;UACJmb,QAAQ,EAAEryH,aAAa,CAACikC,aAAa;UACrCG,QAAQ,EAAEpkC,aAAa,CAACokC;QAC5B,CAAC;QACDkuF,kBAAkB,EAAE;MACxB,CAAC,CAAC;MAEF,OAAOpsD,GAAG;IACd;EACJ;EAEAlmE,aAAa,CAAC6oC,eAAe,CAAC0pF,IAAI,CAAC;EAEnCv3F,SAAS,CAAC,YAAY;IAClBu3F,IAAI,CAAC,CAAC;EACV,CAAC,EAAEvyH,aAAa,CAAColC,aAAa,CAAC;EAE/B,SAASmtF,IAAIA,CAAA,EAAG;IACZ,IAAIC,UAAU,GAAI74F,IAAI,CAACo+B,KAAK,CAACx8B,IAAI,CAAC4gD,GAAG,CAAC,CAAC,GAAC,IAAI,CAAC,GAAGn8E,aAAa,CAACylC,YAAY,GAAIzlC,aAAa,CAAC0lC,eAAe;IAC3G,IAAI,CAAC8sF,UAAU,EAAE;IAEjBxyH,aAAa,CAACylC,YAAY,GAAG9L,IAAI,CAACo+B,KAAK,CAACx8B,IAAI,CAAC4gD,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;IAC1D,IAAIn8E,aAAa,CAACklC,oBAAoB,KAAK,IAAI,IAAIllC,aAAa,CAACX,MAAM,KAAK,IAAI,EAAE;MAC9E+yH,eAAe,CAAC,CAAC,CAACtuH,IAAI,CAAC,UAAUC,IAAI,EAAE;QACnCzD,QAAQ,CAAC,YAAY;UACjBN,aAAa,CAAC+oC,cAAc,CAAC/oC,aAAa,CAACklC,oBAAoB,EAAE,IAAI,CAAC;QAC1E,CAAC,CAAC;QACF,IAAI,CAAC,CAACnhC,IAAI,IAAI,CAAC,CAACA,IAAI,CAACC,IAAI,EAAE;UACvB,IAAID,IAAI,CAACC,IAAI,CAACyuH,UAAU,KAAK,IAAI,EAAE;YAC/BnyH,QAAQ,CAAC,YAAY;cACjBP,UAAU,CAAC+K,UAAU,CAAC,mBAAmB,CAAC;YAC9C,CAAC,CAAC;UACN,CAAC,MAAM,IAAI/G,IAAI,CAACC,IAAI,CAAC0uH,aAAa,IAAI3uH,IAAI,CAACC,IAAI,CAAC0uH,aAAa,KAAK1yH,aAAa,CAAC+mC,aAAa,EAAE;YAC3FzmC,QAAQ,CAAC,YAAY;cACjBP,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,CAAC;YAClD,CAAC,CAAC;UACN;QACJ;MAEJ,CAAC,EAAE,UAAU7G,GAAG,EAAE;QACda,OAAO,CAACC,GAAG,CAAC,QAAQ,EAAEd,GAAG,CAAC;QAC1B,IAAI,CAAC,CAACA,GAAG,IAAIA,GAAG,CAAC+qC,cAAc,CAAC,SAAS,CAAC,EAAE;UACxC/qC,GAAG,GAAGA,GAAG,CAACD,IAAI;QAClB;QACA1D,QAAQ,CAAC,YAAY;UACjBN,aAAa,CAAC+oC,cAAc,CAAC/oC,aAAa,CAACklC,oBAAoB,EAAE,KAAK,CAAC;QAC3E,CAAC,CAAC;MACN,CAAC,CAAC;IACN,CAAC,MAAM;MACH5kC,QAAQ,CAAC,YAAY;QACjBN,aAAa,CAAC+oC,cAAc,CAAC/oC,aAAa,CAACklC,oBAAoB,EAAE,KAAK,CAAC;MAC3E,CAAC,CAAC;IACN;EACJ;EAEA,IAAI,CAACnU,gBAAgB,GAAG,UAAUP,MAAM,EAAE;IAEtC,IAAI01C,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,oBAAoB;MACvDlkC,IAAI,EAAE;QAAE8rH,IAAI,EAAEt/F;MAAO;IACzB,CAAC,CAAC;IAEF,OAAO01C,GAAG;EACd,CAAC;EAED,IAAI,CAACysD,eAAe,GAAG,UAAUtuF,OAAO,EAAEpW,QAAQ,EAAE;IAChD,IAAIi4C,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,sBAAsB;MACzDlkC,IAAI,EAAE;QACFmqH,kBAAkB,EAAE9pF,OAAO;QAC3BzN,QAAQ,EAAE3I;MACd;IACJ,CAAC,CAAC;IAEF,OAAOi4C,GAAG;EACd,CAAC;EAED,IAAI,CAAC0/B,eAAe,GAAG,YAAY;IAC/B,IAAI1/B,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG;IACvC,CAAC,CAAC;IAEF,OAAOg+B,GAAG;EACd,CAAC;EAED,IAAI,CAACkrB,oBAAoB,GAAG,YAAY;IACpC,IAAIlrB,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,cAAc;MACjDgvE,MAAM,EAAE;QACJ0b,iBAAiB,EAAE,IAAI;QACvB1D,uBAAuB,EAAElvH,aAAa,CAAC2qC;MAC3C;IACJ,CAAC,CAAC;IAEFu7B,GAAG,GAAGA,GAAG,CAACpiE,IAAI,CAAC,UAAUC,IAAI,EAAE;MAC3B,IAAIsH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAEzB,IAAMivC,QAAQ,GAAG82B,+DAAW,CAACttE,IAAI,CAACC,IAAI,CAACihH,QAAQ,CAAC;MAEhD,IAAI/pG,GAAG,GAAGnR,KAAK,CAAC0wC,OAAO,CAACF,QAAQ,CAAC,GAAGA,QAAQ,GAAG,EAAE;MAEjDlvC,QAAQ,CAACE,OAAO,CAAC2P,GAAG,CAAC;MACrB,OAAO7P,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAO06D,GAAG;EACd,CAAC;EAED,IAAI,CAACpsB,iBAAiB,GAAG,YAA8B;IAAA,IAApBw1E,UAAU,GAAAr+G,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,KAAK;IACjD,IAAIi1D,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,mBAAmB;MACtDgvE,MAAM,EAAE;QACJ0b,iBAAiB,EAAE,IAAI;QACvBtD,UAAU,EAAEA;MAChB;IACJ,CAAC,CAAC;IAEFppD,GAAG,GAAGA,GAAG,CAACpiE,IAAI,CAAC,UAAUC,IAAI,EAAE;MAC3B,IAAIsH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAEzB,IAAMivC,QAAQ,GAAG82B,+DAAW,CAACttE,IAAI,CAACC,IAAI,CAACoF,SAAS,CAAC;MAEjD,IAAI8R,GAAG,GAAGnR,KAAK,CAAC0wC,OAAO,CAACF,QAAQ,CAAC,GAAGA,QAAQ,GAAG,EAAE;MAEjDlvC,QAAQ,CAACE,OAAO,CAAC2P,GAAG,CAAC;MACrB,OAAO7P,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAO06D,GAAG;EACd,CAAC;EAED,IAAI,CAACw7B,OAAO,GAAG,UAAU37D,QAAQ,EAAE;IAC/B,IAAImgC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,aAAa;MAChDlkC,IAAI,EAAE;QACF88F,QAAQ,EAAE/6D,QAAQ;QAClB2oF,MAAM,EAAE1uH,aAAa,CAACmkC;MAC1B;IACJ,CAAC,CAAC;IAEF,OAAO+hC,GAAG;EACd,CAAC;EAGD,IAAI,CAAC2sD,gBAAgB,GAAG,UAAUxoE,IAAI,EAAE;IACpC,IAAI6b,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,YAAY;MAC/CgvE,MAAM,EAAE7sD;IACZ,CAAC,CAAC;IAEF,OAAO6b,GAAG;EACd,CAAC;EAED,IAAI,CAAC4sD,gBAAgB,GAAG,UAAU9uH,IAAI,EAAE;IACpC,IAAIkiE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,gBAAgB;MACnDlkC,IAAI,EAAEA;IACV,CAAC,CAAC;IAEF,OAAOkiE,GAAG;EACd,CAAC;EAED,IAAI,CAAC6sD,eAAe,GAAG,UAAU/uH,IAAI,EAAE;IACnC,IAAIkiE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,gBAAgB;MACnDlkC,IAAI,EAAEA;IACV,CAAC,CAAC;IAEF,OAAOkiE,GAAG;EACd,CAAC;EAED,IAAI,CAAC8sD,iBAAiB,GAAG,UAAU93F,IAAI,EAAEC,KAAK,EAAE0c,MAAM,EAAEkqE,OAAO,EAAE;IAC7D,IAAI77C,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,gBAAgB;MACnDgvE,MAAM,EAAE;QACJiL,IAAI,EAAEjnF,IAAI,GAAGA,IAAI,GAAG,IAAI;QACxBs0F,KAAK,EAAEr0F,KAAK,GAAGA,KAAK,GAAG,IAAI;QAC3Bh4B,MAAM,EAAE00C,MAAM;QACd04E,SAAS,EAAG,CAAC,CAACxO,OAAO,IAAI,CAAC,CAACA,OAAO,CAACyO,SAAS,GAAIzO,OAAO,CAACyO,SAAS,GAAG,IAAI;QACxEC,aAAa,EAAG,CAAC,CAAC1O,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC2O,SAAS,GAAI3O,OAAO,CAAC2O,SAAS,GAAG;MAC5E;IACJ,CAAC,CAAC;IAEF,OAAOxqD,GAAG;EACd,CAAC;EAED,IAAI,CAAC+sD,eAAe,GAAG,UAAUz/F,MAAM,EAAE;IACrC,IAAI0yC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,QAAQ;MAChBf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,gBAAgB;MACnDgvE,MAAM,EAAE;QACJhhF,MAAM,EAAE1C;MACZ;IACJ,CAAC,CAAC;IAEF,OAAO0yC,GAAG;EACd,CAAC;EAED,IAAI,CAACgtD,cAAc,GAAG,UAAU1/F,MAAM,EAAE;IACpC,IAAI0yC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,YAAY;MAC/ClkC,IAAI,EAAE;QACFwvB,MAAM,EAAEA,MAAM;QACdqkB,MAAM,EAAE,aAAa;QACrB5pB,QAAQ,EAAEjuB,aAAa,CAAC+rB;MAC5B;IACJ,CAAC,CAAC;IAEF,OAAOm6C,GAAG;EACd,CAAC;EAED,IAAI,CAACitD,aAAa,GAAG,UAAU3/F,MAAM,EAAE0H,IAAI,EAAEC,KAAK,EAAE4mF,OAAO,EAAE/5G,IAAI,EAAE/G,IAAI,EAAE;IACrE,IAAIilE,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,mBAAmB;MACtDgvE,MAAM,EAAE;QACJiL,IAAI,EAAEjnF,IAAI,GAAGA,IAAI,GAAG,IAAI;QACxBs0F,KAAK,EAAEr0F,KAAK,GAAGA,KAAK,GAAG,IAAI;QAC3BjF,MAAM,EAAE1C,MAAM;QACd+8F,SAAS,EAAG,CAAC,CAACxO,OAAO,IAAI,CAAC,CAACA,OAAO,CAACyO,SAAS,GAAIzO,OAAO,CAACyO,SAAS,GAAG,IAAI;QACxEC,aAAa,EAAG,CAAC,CAAC1O,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC2O,SAAS,GAAI3O,OAAO,CAAC2O,SAAS,GAAG,IAAI;QAC5E1uC,YAAY,EAAEh6E,IAAI;QAClBorH,UAAU,EAAEnyH;MAChB;IACJ,CAAC,CAAC;IAEF,OAAOilE,GAAG;EACd,CAAC;EAED,IAAI,CAACmtD,mBAAmB,GAAG,UAAU7/F,MAAM,EAAE8/F,MAAM,EAAEr5G,UAAU,EAAE5E,KAAK,EAAEi4C,UAAU,EAAEimE,OAAO,EAAEC,UAAU,EAAEtoC,SAAS,EAAEuoC,YAAY,EAAE;IAC9H,IAAIvtD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,mBAAmB;MACtDlkC,IAAI,EAAE;QACFwvB,MAAM,EAAEA,MAAM;QACd8/F,MAAM,EAAEA,MAAM;QACdr5G,UAAU,EAAEA,UAAU;QACtB5E,KAAK,EAAEA,KAAK;QACZi4C,UAAU,EAAEA,UAAU;QACtBimE,OAAO,EAAEA,OAAO;QAChBC,UAAU,EAAEA,UAAU;QACtBtoC,SAAS,EAAEA,SAAS;QACpBuoC,YAAY,EAAEA;MAClB;IACJ,CAAC,CAAC;IAEF,OAAOvtD,GAAG;EACd,CAAC;EAED,IAAI,CAACwtD,iBAAiB,GAAG,UAAUlgG,MAAM,EAAEmgG,SAAS,EAAE;IAClD,IAAIztD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,YAAY;MAC/ClkC,IAAI,EAAE;QACFwvB,MAAM,EAAEA,MAAM;QACdqkB,MAAM,EAAE,WAAW;QACnB5pB,QAAQ,EAAEjuB,aAAa,CAAC+rB,YAAY;QACpC4nG,SAAS,EAAEA;MACf;IACJ,CAAC,CAAC;IAEF,OAAOztD,GAAG;EACd,CAAC;EAED,IAAI,CAAC0tD,eAAe,GAAG,UAAUpgG,MAAM,EAAE;IACrC,IAAI0yC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,YAAY;MAC/ClkC,IAAI,EAAE;QACFwvB,MAAM,EAAEA,MAAM;QACdqkB,MAAM,EAAE,QAAQ;QAChB5pB,QAAQ,EAAEjuB,aAAa,CAAC+rB;MAC5B;IACJ,CAAC,CAAC;IAEF,OAAOm6C,GAAG;EACd,CAAC;EAED,IAAI,CAAC2tD,aAAa,GAAG,UAAUrgG,MAAM,EAAE;IACnC,IAAI0yC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,YAAY;MAC/ClkC,IAAI,EAAE;QACFwvB,MAAM,EAAEA,MAAM;QACdqkB,MAAM,EAAE,MAAM;QACd5pB,QAAQ,EAAEjuB,aAAa,CAAC+rB;MAC5B;IACJ,CAAC,CAAC;IAEF,OAAOm6C,GAAG;EACd,CAAC;EAED,IAAI,CAAC3iB,kBAAkB,GAAG,YAAY;IAClC,IAAI2iB,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,iBAAiB;MACpD/hB,KAAK,EAAE,KAAK;MACZmsG,kBAAkB,EAAE;IACxB,CAAC,CAAC;IAEF,OAAOpsD,GAAG;EACd,CAAC;EAED,IAAI,CAAC2gC,cAAc,GAAG,UAAUC,UAAU,EAAE;IACxC,IAAI5gC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,YAAY;MAC/CgvE,MAAM,EAAE;QACJ4c,UAAU,EAAEhtB;MAChB;IACJ,CAAC,CAAC;IAEF,OAAO5gC,GAAG;EACd,CAAC;EAED,IAAI,CAAC+gC,mBAAmB,GAAG,YAAY;IACnC,IAAI/gC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,cAAc;MACjDlkC,IAAI,EAAEwzB,IAAI,CAACC,SAAS,CAAC;QACjBs8F,UAAU,EAAE;MAChB,CAAC;IACL,CAAC,CAAC;IAEF,OAAO7tD,GAAG;EACd,CAAC;EAGD,IAAI,CAAC0jD,iBAAiB,GAAG,UAAU1+B,SAAS,EAAE3rC,QAAQ,EAAEoqE,YAAY,EAAE;IAElE,IAAIzjD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,uBAAuB;MAC1DgvE,MAAM,EAAE;QACJ/6F,SAAS,EAAE+uE,SAAS;QACpB/tC,QAAQ,EAAEoC,QAAQ;QAClB9f,YAAY,EAAEkqF;MAClB;IACJ,CAAC,CAAC;IAEF,OAAOzjD,GAAG;EACd,CAAC;EAED,IAAI,CAACvmB,gBAAgB,GAAG,UAAS7C,SAAS,EAAEG,OAAO,EAAEJ,QAAQ,EAAE0C,QAAQ,EAAE;IACrE,IAAI2mB,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,eAAe;MAClDgvE,MAAM,EAAE;QACJyZ,aAAa,EAAE3wH,aAAa,CAACikC,aAAa;QAC1Ck9B,QAAQ,EAAErkB,SAAS;QACnBskB,MAAM,EAAEnkB,OAAO;QACf+2E,QAAQ,EAAEn3E,QAAQ;QAClB6xE,MAAM,EAAE1uH,aAAa,CAACmkC,WAAW;QACjCgZ,QAAQ,EAAE,CAAC,CAACoC,QAAQ,IAAIA,QAAQ,KAAG,GAAG,GAAGA,QAAQ,GAAG;MACxD;IACJ,CAAC,CAAC;IAEF,OAAO2mB,GAAG;EACd,CAAC;EAED,IAAI,CAACrsC,wBAAwB,GAAG,UAAS0lB,QAAQ,EAAErkB,IAAI,EAAEC,KAAK,EAAErlB,OAAO,EAAC;IACpE,IAAIowD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,qBAAqB;MACxDgvE,MAAM,EAAE;QACJ/5D,QAAQ,EAAEoC,QAAQ;QAClB4iE,IAAI,EAAEjnF,IAAI,GAAGA,IAAI,GAAG,IAAI;QACxBs0F,KAAK,EAAEr0F,KAAK,GAAGA,KAAK,GAAG,IAAI;QAC3BlC,cAAc,EAAEnjB,OAAO,CAACmjB,cAAc,GAAEnjB,OAAO,CAACmjB,cAAc,GAAE,IAAI;QACpEC,gBAAgB,EAAEpjB,OAAO,CAACojB,gBAAgB,GAAEpjB,OAAO,CAACojB,gBAAgB,GAAE;MAC1E;IACJ,CAAC,CAAC;IAEF,OAAOgtC,GAAG;EACd,CAAC;EAED,IAAI,CAAC3yC,uBAAuB,GAAG,UAASgsB,QAAQ,EAAE/rB,MAAM,EAAEC,cAAc,EAAC;IACrE,IAAIyyC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,qBAAqB;MACxDgvE,MAAM,EAAE;QACJ/5D,QAAQ,EAAEoC,QAAQ;QAClBrpB,MAAM,EAAE1C,MAAM;QACdygG,cAAc,EAAExgG;MACpB;IACJ,CAAC,CAAC;IAEF,OAAOyyC,GAAG;EACd,CAAC;EAED,IAAI,CAAC9qC,uBAAuB,GAAG,UAASmkB,QAAQ,EAAE/rB,MAAM,EAAEC,cAAc,EAAC;IACrE,IAAIyyC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,6BAA6B;MAChEgvE,MAAM,EAAE;QACJ/5D,QAAQ,EAAEoC,QAAQ;QAClBrpB,MAAM,EAAE1C,MAAM;QACdygG,cAAc,EAAExgG;MACpB;IACJ,CAAC,CAAC;IAEF,OAAOyyC,GAAG;EACd,CAAC;EAED,IAAI,CAAC/uC,sBAAsB,GAAG,UAAUV,OAAO,EAAE;IAC7C,IAAIyvC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,+BAA+B;MAClElkC,IAAI,EAAEwzB,IAAI,CAACC,SAAS,CAAChB,OAAO;IAChC,CAAC,CAAC;IAEF,OAAOyvC,GAAG;EACd,CAAC;EAED,IAAI,CAACshC,YAAY,GAAG,YAAY;IAC5B,IAAIthC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG;IACvC,CAAC,CAAC;IAEF,OAAOg+B,GAAG;EACd,CAAC;EAED,IAAI,CAAC4jD,iCAAiC,GAAG,UAAUzrB,QAAQ,EAAE9+C,QAAQ,EAAE;IAEnE,IAAI2mB,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,kCAAkC;MACrElkC,IAAI,EAAEwzB,IAAI,CAACC,SAAS,CAAC;QAACq4F,IAAI,EAAEzxB;MAAQ,CAAC,CAAC;MACtC6Y,MAAM,EAAE;QACJ/5D,QAAQ,EAAEoC;MACd;IACJ,CAAC,CAAC;IAEF,OAAO2mB,GAAG;EACd,CAAC;EAED,IAAI,CAACguD,mBAAmB,GAAG,UAAU74B,IAAI,EAAE;IAEvC,IAAIn1B,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,eAAe;MAClDlkC,IAAI,EAAEwzB,IAAI,CAACC,SAAS,CAAC;QACjBs8F,UAAU,EAAE,gBAAgB;QAC5BI,aAAa,EAAE,CAAC94B,IAAI;MACxB,CAAC;IACL,CAAC,CAAC;IAEF,OAAOn1B,GAAG;EACd,CAAC;EAED,IAAI,CAACkuD,aAAa,GAAI,UAASl5F,IAAI,EAAEC,KAAK,EAAErlB,OAAO,EAAC;IAChD,IAAIowD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,wBAAwB;MAC3DgvE,MAAM,EAAE;QACJiL,IAAI,EAAEjnF,IAAI,GAAGA,IAAI,GAAG,IAAI;QACxBs0F,KAAK,EAAEr0F,KAAK,GAAGA,KAAK,GAAG,IAAI;QAC3BgmC,QAAQ,EAAErrD,OAAO,CAACqrD,QAAQ,GAAGrrD,OAAO,CAACqrD,QAAQ,GAAG,IAAI;QACpDC,MAAM,EAAEtrD,OAAO,CAACsrD,MAAM,GAAGtrD,OAAO,CAACsrD,MAAM,GAAG,IAAI;QAC9C/3D,UAAU,EAAEyM,OAAO,CAACnV,UAAU,GAAEmV,OAAO,CAACnV,UAAU,GAAE,IAAI;QACxDyvH,UAAU,EAAE,IAAI70F,IAAI,CAAC,CAAC,CAAC80F,iBAAiB,CAAC;MAC7C;IACJ,CAAC,CAAC;IAEF,OAAOnqD,GAAG;EACd,CAAC;EAED,IAAI,CAACmuD,YAAY,GAAI,UAAS7gG,MAAM,EAAC;IACjC,IAAI0yC,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,wBAAwB;MAC3DgvE,MAAM,EAAE;QACJhhF,MAAM,EAAE1C;MACZ;IACJ,CAAC,CAAC;IAEF,OAAO0yC,GAAG;EACd,CAAC;EAED,IAAI,CAACouD,eAAe,GAAG,UAAUjwF,OAAO,EAAEpW,QAAQ,EAAEoE,QAAQ,EAAE+nE,KAAK,EAAE8zB,SAAS,EAAE;IAC5E,OAAOjpG,KAAK,CAAC;MACTiB,MAAM,EAAE,MAAM;MACdf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,kBAAkB;MACrDlkC,IAAI,EAAE;QACFmqH,kBAAkB,EAAE9pF,OAAO;QAC3BzN,QAAQ,EAAE3I,QAAQ;QAClB8yE,QAAQ,EAAE1uE,QAAQ;QAClBi8F,aAAa,EAAEl0B,KAAK;QACpBm0B,SAAS,EAAEL,SAAS;QACpBM,QAAQ,EAAEpvH,oEAA2Bw3C;MACzC;IACJ,CAAC,CAAC;EACN,CAAC;EAED,IAAI,CAAC29E,oBAAoB,GAAG,UAAUC,YAAY,EAAE;IAChD,IAAItuD,GAAG,GAAGjhD,KAAK,CAAC;MACZiB,MAAM,EAAE,KAAK;MACbf,GAAG,EAAEnlB,aAAa,CAACkoC,aAAa,GAAG,gCAAgC;MACnEgvE,MAAM,EAAE;QACJud,UAAU,EAAED;MAChB;IACJ,CAAC,CAAC;IACF,OAAOtuD,GAAG;EACd,CAAC;AAEL,CAAC,CAAC,CAAC,C;;;;;;;;;;ACxkCXtmE,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,+BAA+B,EAChE,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAC7H,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EACpI,UAAUC,MAAM,EAAEC,UAAU,EAAEM,SAAS,EAAEipB,YAAY,EAAEhpB,QAAQ,EAAEL,YAAY,EAAED,aAAa,EAAEupB,eAAe,EAAEG,SAAS,EACpHvpB,aAAa,EAAEqpB,aAAa,EAAEizB,gBAAgB,EAAEl8C,cAAc,EAAEoX,YAAY,EAAElX,EAAE,EAAEi0H,YAAY,EAAE5qG,OAAO,EAAEH,SAAS,EAAE;EAEpH5pB,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE1pB,SAAS,CAACuxC;EAA2B,CAAC,CAAC,CAAC,CAAC;;EAEpG,IAAI,CAACtoB,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;EACJ;EAEApqB,MAAM,CAACm+C,SAAS,GAAG,EAAE;EACrBn+C,MAAM,CAAC60H,UAAU,GAAG,EAAE;EACtB70H,MAAM,CAACmB,IAAI,GAAG,EAAE;EAChBnB,MAAM,CAACsY,UAAU,GAAGjY,aAAa,CAACkY,6BAA6B,CAAC,CAAC;EAEjEvY,MAAM,CAACsgH,QAAQ,GAAG,CAAC;EACnBtgH,MAAM,CAACugH,eAAe;EACtBvgH,MAAM,CAACu5B,WAAW,GAAG,EAAE;EACvBv5B,MAAM,CAACkJ,SAAS,GAAG,KAAK;EAExBlJ,MAAM,CAACuuG,yBAAyB,GAAG,IAAI;EACvCvuG,MAAM,CAAC80H,2BAA2B,GAAG,IAAI;EACzC90H,MAAM,CAACmC,IAAI,GAAG;IAAE,QAAQ,EAAE9C,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAG;EAAK,CAAC;EAC3DpC,MAAM,CAACmgH,KAAK,GAAG;IAAE,QAAQ,EAAG9gH,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAI,GAAG,GAAG;EAAK,CAAC;EAEpEpC,MAAM,CAAC8qD,aAAa,GAAG;IACnBxB,QAAQ,EAAEjpD,aAAa,CAAC0qD,gBAAgB,CAAC,IAAItvB,IAAI,CAAC,CAAC,CAAC;IACpD4tB,MAAM,EAAEhpD,aAAa,CAAC0qD,gBAAgB,CAAC,IAAItvB,IAAI,CAAC,CAAC,CAAC;IAClDo5F,UAAU,EAAE,EAAE;IACdp1E,QAAQ,EAAE,GAAG;IACblvB,UAAU,EAAE;EAChB,CAAC;EAEDvwB,MAAM,CAAC+0H,wBAAwB,GAAG;IAC9B5zH,IAAI,EAAE,SAAS;IACf6zH,WAAW,EAAE;EACjB,CAAC;EAEDh1H,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB/nB,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,IAAIkxH,UAAU,GAAG51H,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,uBAAuB,CAAC;IACrE,IAAI+sF,UAAU,EAAE;MACZ51H,MAAM,CAACm4B,YAAY,CAAC4xB,UAAU,CAAC,uBAAuB,CAAC;MACvD6rE,UAAU,GAAGv9F,IAAI,CAAC2T,KAAK,CAAC4pF,UAAU,CAAC;MACnCj1H,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,GAAG2rE,UAAU,CAAC3rE,QAAQ;MACnDtpD,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,GAAG4rE,UAAU,CAAC5rE,MAAM;MAC/C;MACA;IACJ;IAEA1M,gBAAgB,CAACuO,qCAAqC,CAAC,CAAC,CACnDlnD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBrJ,MAAM,CAACm+C,SAAS,GAAG90C,GAAG,CAACnF,IAAI,CAACi6C,SAAS;MACrCn+C,MAAM,CAAC60H,UAAU,GAAGxrH,GAAG,CAACnF,IAAI,CAAC2wH,UAAU;MACvC70H,MAAM,CAAC8qD,aAAa,CAAC+pE,UAAU,GAAGxrH,GAAG,CAACnF,IAAI,CAAC2wH,UAAU;MAErD,IAAI70H,MAAM,CAACm+C,SAAS,CAAC/3C,MAAM,IAAI,CAAC,EAAE;QAC9BpG,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,GAAGz/C,MAAM,CAACm+C,SAAS,CAAC,CAAC,CAAC,CAAC3S,WAAW;MACnE;MAEAhrC,QAAQ,CAAC,YAAY;QACjBA,QAAQ,CAAC,YAAY;UAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;QAAE,CAAC,CAAC;MACpE,CAAC,CAAC;MAEF,IAAIywH,UAAU,EAAE;QACZz0H,QAAQ,CAAC,YAAY;UACjB;UACAR,MAAM,CAACgiH,QAAQ,CAAC,CAAC;QACrB,CAAC,CAAC;MACN;MAEAl+G,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACI,CAAC,UAAUF,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACV,CAAC;EAIDrE,MAAM,CAAC0I,MAAM,CAAC,0BAA0B,EACpC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAE1B,IAAI5I,MAAM,CAAC80H,2BAA2B,EAAE;MACpC90H,MAAM,CAACk1H,UAAU,CAAC,CAAC;IACvB;IAEAl1H,MAAM,CAAC80H,2BAA2B,GAAG,IAAI;EAC7C,CACJ,CAAC;EAED90H,MAAM,CAACm1H,qBAAqB,GAAG,UAAU11E,QAAQ,EAAE;IAE/Cz/C,MAAM,CAAC8qD,aAAa,CAACv6B,UAAU,GAAG,GAAG;IACrC/vB,QAAQ,CAAC,YAAY;MACjBR,MAAM,CAAC8qD,aAAa,CAAC+pE,UAAU,GAAG,EAAE,CAC/BpjH,MAAM,CAACzR,MAAM,CAAC60H,UAAU,CAAC9uH,MAAM,CAAC,UAAU2O,CAAC,EAAE;QAC1C,OAAOA,CAAC,CAAC82B,WAAW,IAAIiU,QAAQ;MACpC,CAAC,CAAC,CAAC;MAEP,IAAI,CAACA,QAAQ,IAAIA,QAAQ,IAAI,GAAG,EAC5Bz/C,MAAM,CAAC8qD,aAAa,CAAC+pE,UAAU,GAAG70H,MAAM,CAAC60H,UAAU;MAEvDr0H,QAAQ,CAAC,YAAY;QACjBsD,CAAC,CAAC,sCAAsC,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAChE,CAAC,EAAE,EAAE,CAAC;IACV,CAAC,CAAC;EAEN,CAAC;EAGDxE,MAAM,CAAC0I,MAAM,CAAC,wBAAwB,EAClC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAE1B5I,MAAM,CAACm1H,qBAAqB,CAACxsH,QAAQ,CAAC;IAEtC,IAAI3I,MAAM,CAACuuG,yBAAyB,EAAE;MAClCvuG,MAAM,CAACk1H,UAAU,CAAC,CAAC;IACvB;IAEAl1H,MAAM,CAACuuG,yBAAyB,GAAG,IAAI;EAC3C,CACJ,CAAC;EAEDvuG,MAAM,CAACksD,oBAAoB,GAAG,UAAUhiD,IAAI,EAAEiiD,EAAE,EAAE;IAC9CnsD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,GAAGp/C,IAAI;IACpClK,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,GAAG8C,EAAE;IAChCnsD,MAAM,CAACk1H,UAAU,CAAC,CAAC;EACvB,CAAC;EAED,IAAMp7F,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAA,EAAe;IAC1C,IAAI,CAAC95B,MAAM,CAACkJ,SAAS,IAAIlJ,MAAM,CAACsgH,QAAQ,GAAGtgH,MAAM,CAACs5B,UAAU,EAAE;MAC1Dt5B,MAAM,CAAC0iH,UAAU,CAAC1iH,MAAM,CAACsgH,QAAQ,GAAG,CAAC,CAAC;IAC1C;EACJ,CAAC;EAEDjmF,iBAAiB,CAACP,yBAAyB,CAAC;EAE5C,SAASM,QAAQA,CAAClO,KAAK,EAAE;IACrB,IAAIqO,IAAI,GAAGv6B,MAAM,CAACu5B,WAAW;IAC7Bv5B,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAC3Cv6B,MAAM,CAACw5B,YAAY,GAAGtN,KAAK;IAC3B,IAAIlsB,MAAM,CAACs5B,UAAU,KAAK,CAAC,EAAE;MACzBt5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;IACzB;EACJ;EAAC;EAGDt5B,MAAM,CAACwsF,KAAK,GAAG,YAAY;IACvBxsF,MAAM,CAACuuG,yBAAyB,GAAG,KAAK;IACxCvuG,MAAM,CAAC80H,2BAA2B,GAAG,KAAK;IAC1C90H,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,GAAG,GAAG;IACnCz/C,MAAM,CAAC8qD,aAAa,CAACv6B,UAAU,GAAG,GAAG;IACrCvwB,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,GAAGjpD,aAAa,CAAC0qD,gBAAgB,CAAC,IAAItvB,IAAI,CAAC,CAAC,CAAC;IAC1Ez7B,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,GAAGhpD,aAAa,CAAC0qD,gBAAgB,CAAC,IAAItvB,IAAI,CAAC,CAAC,CAAC;IAExEj7B,QAAQ,CAAC,YAAY;MACjBA,QAAQ,CAAC,YAAY;QAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAAE,CAAC,CAAC;IAEpE,CAAC,CAAC;IAEFxE,MAAM,CAACk1H,UAAU,CAAC,CAAC;EACvB,CAAC;;EAID;EACAl1H,MAAM,CAACo1H,WAAW,GAAG,UAAU71D,UAAU,EAAE;IACvC,IAAI5e,IAAI,GAAG,CAAC,CAAC;IAEb,IAAI,CAAC,CAAC4e,UAAU,CAAC5e,IAAI,CAAC00E,SAAS,EAAE;MAC7B10E,IAAI,CAAC+vE,SAAS,GAAGnxD,UAAU,CAAC5e,IAAI,CAAC00E,SAAS;MAC1C10E,IAAI,CAACiwE,SAAS,GAAGrxD,UAAU,CAAC5e,IAAI,CAAC7tC,OAAO,GAAG,MAAM,GAAG,KAAK;IAC7D;IAEAhP,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACgiH,QAAQ,CAACrhE,IAAI,CAAC,CAChB38C,IAAI,CAAC,YAAY;MACdF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SAAM,CAAC,UAAUF,GAAG,EAAE;MACpBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAACs1H,uBAAuB,GAAG,EAAE;EAEnCt1H,MAAM,CAACgiH,QAAQ,GAAG,UAAU1/C,QAAQ,EAAE2/C,OAAO,EAAE;IAC3CjiH,MAAM,CAACkJ,SAAS,GAAG,IAAI;IACvB,IAAI8T,GAAG,GAAG0M,aAAa,CAAC6rG,qBAAqB,CACrCv1H,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,EAC7BtpD,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,EAC3BrpD,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,EAC7Bz/C,MAAM,CAAC8qD,aAAa,CAACv6B,UAAU,EAC/BvwB,MAAM,CAACsgH,QAAQ,EACftgH,MAAM,CAACu5B,WAAW,EAClB0oF,OACJ,CAAC,CAACj+G,IAAI,CAAC,UAAUE,IAAI,EAAE;MACnB,IAAI,CAACo+D,QAAQ,EACTtiE,MAAM,CAACs1H,uBAAuB,GAAG,EAAE;MAEvCt1H,MAAM,CAACsgH,QAAQ,GAAGp8G,IAAI,CAACA,IAAI,CAACm+G,IAAI;MAEhCjoF,QAAQ,CAACl2B,IAAI,CAACA,IAAI,CAAC60B,KAAK,CAAC;MAEzBj5B,OAAO,CAAC4M,OAAO,CAACxI,IAAI,CAACA,IAAI,CAAC2mD,IAAI,EAAE,UAAUjrD,EAAE,EAAE;QAC1CA,EAAE,CAAC41H,WAAW,GAAGn1H,aAAa,CAACgyE,6BAA6B,CAACzyE,EAAE,CAAC41H,WAAW,CAAC;QAC5E,IAAI51H,EAAE,CAAC2tH,QAAQ,IAAI,KAAK,EACpB3tH,EAAE,CAAC6xG,WAAW,GAAG,CAAC,CAAC7xG,EAAE,CAAC6xG,WAAW,GAAGpxG,aAAa,CAACgyE,6BAA6B,CAACzyE,EAAE,CAAC6xG,WAAW,CAAC,GAAG,EAAE,CAAC,KAErG7xG,EAAE,CAAC6xG,WAAW,GAAGhxG,cAAc,CAACe,SAAS,CAAC,aAAa,CAAC;QAC5DxB,MAAM,CAACs1H,uBAAuB,CAACjvH,IAAI,CAACzG,EAAE,CAAC;MAC3C,CAAC,CAAC;MAEFY,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;MAC7B,CAAC,CAAC;MAEF7sB,MAAM,CAACkJ,SAAS,GAAG,KAAK;IAC5B,CAAC,CAAC;IAEN,OAAO8T,GAAG;EACd,CAAC;EAEDxc,QAAQ,CAAC,YAAY;IACjBR,MAAM,CAACmB,IAAI,GAAG,QAAQ;IACtB+D,WAAW,CAAC,CAAC;EACjB,CAAC,CAAC;EAEFlF,MAAM,CAACk1H,UAAU,GAAG,YAAY;IAC5Bl1H,MAAM,CAACsgH,QAAQ,GAAG,CAAC;IACnBtgH,MAAM,CAACgiH,QAAQ,CAAC,CAAC;EACrB,CAAC;EAEDhiH,MAAM,CAAC0iH,UAAU,GAAG,UAAUtnF,IAAI,EAAE;IAChCp7B,MAAM,CAACsgH,QAAQ,GAAGllF,IAAI;IACtBp7B,MAAM,CAACgiH,QAAQ,CAAC,IAAI,CAAC;EACzB,CAAC;EAEDhiH,MAAM,CAACy1H,aAAa,GAAG,CAAC,CAAC;EAEzBz1H,MAAM,CAAC8+C,WAAW,GAAG,UAAU5kC,GAAG,EAAE;IAChCla,MAAM,CAACy1H,aAAa,GAAG3xH,CAAC,CAAC2L,MAAM,CAACzP,MAAM,CAACy1H,aAAa,EAAEv7G,GAAG,CAAC;IAE1DpW,CAAC,CAACC,OAAO,CAAC,CAAC;IACX2lB,aAAa,CAACgsG,0BAA0B,CAACx7G,GAAG,CAAC9W,EAAE,CAAC,CAC3CY,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAACy1H,aAAa,GAAG3xH,CAAC,CAAC2L,MAAM,CAACzP,MAAM,CAACy1H,aAAa,EAAEpsH,GAAG,CAAC;MAE1D7I,QAAQ,CAAC,YAAY;QACjBm1H,oCAAoC,CAAC,CAAC;MAC1C,CAAC,CAAC;MAEFn1H,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;MAC7B,CAAC,CAAC;IACN,CAAC,CAAC,SACI,CAAC,UAAU1oB,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACV,CAAC;EACDnE,MAAM,CAAC41H,gBAAgB,GAAG,IAAI;EAC9B,SAASD,oCAAoCA,CAAA,EAAG;IAC5C,IAAI9nG,cAAc,GAAG/pB,CAAC,CAAC,0CAA0C,CAAC;IAClEzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,EAAE,YAAY,CAAE,CAAC,CAAC;IAEzDrtB,QAAQ,CAAC,YAAY;MACjBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MACrC,IAAIxE,MAAM,CAAC41H,gBAAgB,EAAE;QACzB51H,MAAM,CAAC41H,gBAAgB,GAAG,KAAK;MACnC;IACJ,CAAC,CAAC;EACN;EAEA51H,MAAM,CAAC61H,qCAAqC,GAAG,YAAY;IACvD,IAAIhoG,cAAc,GAAG/pB,CAAC,CAAC,0CAA0C,CAAC;IAClEzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;IACzC7tB,MAAM,CAACy1H,aAAa,GAAG,CAAC,CAAC;IACzBz1H,MAAM,CAACmB,IAAI,GAAG,QAAQ;EAC1B,CAAC;EAEDnB,MAAM,CAAC6sB,gBAAgB,GAAG,YAAY;IAClC5sB,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;EACxC,CAAC;EAEDhL,MAAM,CAAC81H,eAAe,GAAG,IAAI;EAC7B91H,MAAM,CAAC+1H,oBAAoB,GAAG,IAAI;EAClC/1H,MAAM,CAACg2H,mBAAmB,GAAG,IAAI;EACjCh2H,MAAM,CAACi2H,aAAa,GAAG,UAAU9oF,GAAG,EAAE;IAClC,OAAOzjB,aAAa,CAACy8F,wBAAwB,CAACh5E,GAAG,EAC7C,CAAC,4BAA4B,EACzB,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,6BAA6B,EAC7B,4BAA4B,EAC5B,iCAAiC,EACjC,0BAA0B,EAC1B,kCAAkC,EAClC,iCAAiC,CACpC,EAAE,eAAe,CAAC;EAC3B,CAAC;EAEDntC,MAAM,CAACk2H,WAAW,GAAG,YAAY;IAC7BpyH,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,OAAO2lB,aAAa,CAACysG,iBAAiB,CAAC,uBAAuB,EAAE,eAAe,CAAC,CAC3EnyH,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB;MACA;MACA;MACAA,GAAG,CAAC2vF,QAAQ,GAAGh5F,MAAM,CAACi2H,aAAa,CAAC5sH,GAAG,CAAC2vF,QAAQ,CAAC;MAGjDnhF,YAAY,CAACy7C,oBAAoB,CAACtzD,MAAM,EAAE8D,CAAC,CAAC,sBAAsB,CAAC,EAAE;QAAEw0G,YAAY,EAAE;MAAM,CAAC,EAAEjvG,GAAG,CAAC2vF,QAAQ,CAAC;MAC3G;MACA,IAAIryE,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAEzBhL,QAAQ,CAAC,YAAY;QACjBmmB,QAAQ,CAAClb,OAAO,CAAC,IAAI,CAAC;MAC1B,CAAC,CAAC;MAEF,OAAOkb,QAAQ,CAACjb,OAAO;IAC3B,CAAC,CAAC,CACD1H,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,OAAOwO,YAAY,CAACklF,YAAY,CAACj5F,CAAC,CAAC,0BAA0B,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;IAChF,CAAC,CAAC,SACI,CAAC,UAAUK,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACV,CAAC;;EAED;EACAnE,MAAM,CAACo2H,WAAW,GAAG,UAAUC,SAAS,EAAE;IACtCvyH,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,OAAO2lB,aAAa,CAACysG,iBAAiB,CAAC,uBAAuB,EAAE,eAAe,CAAC,CAC3EnyH,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBrJ,MAAM,CAACg2H,mBAAmB,GAAG3sH,GAAG,CAACs6F,YAAY;MAC7Ct6F,GAAG,CAACq6F,aAAa,GAAG1jG,MAAM,CAACi2H,aAAa,CAAC5sH,GAAG,CAACq6F,aAAa,CAAC;MAC3D7rF,YAAY,CAACy7C,oBAAoB,CAACtzD,MAAM,EAAE8D,CAAC,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC,EAAEuF,GAAG,CAACq6F,aAAa,CAAC;MACjG,IAAI/8E,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAEzBhL,QAAQ,CAAC,YAAY;QACjBmmB,QAAQ,CAAClb,OAAO,CAAC,IAAI,CAAC;MAC1B,CAAC,CAAC;MAEF,OAAOkb,QAAQ,CAACjb,OAAO;IAC3B,CAAC,CAAC,CACD1H,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAIi7D,SAAS,GAAGswD,YAAY,CAACjwD,aAAa,CAAC,4BAA4B,CAAC,CAACllD,IAAI,CAAC,CAAC;MAC/E,IAAI/U,KAAK,GAAG2rH,SAAS,CAAC3iH,UAAU;MAChC,IAAI2wD,YAAY,GAAG36C,aAAa,CAAC4sG,kBAAkB,CAACt2H,MAAM,CAACg2H,mBAAmB,EAAE,CAC5E;QAAE31E,GAAG,EAAE,aAAa;QAAE9qC,KAAK,EAAErV,aAAa,CAACiuB;MAAS,CAAC,EACrD;QAAEkyB,GAAG,EAAE,SAAS;QAAE9qC,KAAK,EAAErV,aAAa,CAACqkC;MAAQ,CAAC,EAChD;QAAE8b,GAAG,EAAE,YAAY;QAAE9qC,KAAK,EAAEvV,MAAM,CAACy1H,aAAa,CAAC/qG;MAAW,CAAC,EAC7D;QAAE21B,GAAG,EAAE,cAAc;QAAE9qC,KAAK,EAAEvV,MAAM,CAACy1H,aAAa,CAACrkB;MAAa,CAAC,EACjE;QAAE/wD,GAAG,EAAE,aAAa;QAAE9qC,KAAK,EAAEvV,MAAM,CAACy1H,aAAa,CAACD;MAAY,CAAC,EAC/D;QAAEn1E,GAAG,EAAE,aAAa;QAAE9qC,KAAK,EAAEvV,MAAM,CAACy1H,aAAa,CAAChkB;MAAY,CAAC,CAClE,CAAC;MAEF,OAAOmjB,YAAY,CAACxwD,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE15D,KAAK,EAAE25D,YAAY,EAAEC,SAAS,EAAE,IAAI,CAAC;IAC1F,CAAC,CAAC,CACDtgE,IAAI,CAAC,UAAUyjB,MAAM,EAAE;MACpB3jB,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC+L,WAAW,CAAC,2BAA2B,CAAC;;MAEtD;MACApM,MAAM,CAACu2H,qBAAqB,GAAG9uG,MAAM,CAACs8E,MAAM,IAAI,IAAI;MACpD1jG,aAAa,CAAC8E,UAAU,CAAC,wBAAwB,CAAC;IACtD,CAAC,CAAC,SACI,CAAC,UAAUhB,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAI,CAAC,CAACF,GAAG,IAAIA,GAAG,CAAC4zC,MAAM,KAAK,GAAG,EAC3B53C,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC,CAAC,KAC3B,IAAI,CAAC,CAACA,GAAG,IAAIA,GAAG,CAAC4zC,MAAM,KAAK,CAAC,CAAC,EAAE;QACjC,IAAIl9B,OAAO,GAAGpa,cAAc,CAACe,SAAS,CAAC,sBAAsB,CAAC,GAAG,OAAO,GAAGf,cAAc,CAACe,SAAS,CAAC,sBAAsB,CAAC;QAC3HrB,YAAY,CAACiE,SAAS,CAACyW,OAAO,CAAC;MACnC,CAAC,MAEG1a,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAChF,CAAC,CAAC;EACV,CAAC;EAGDxB,MAAM,CAACgzG,gBAAgB,GAAG,UAAU50F,SAAS,EAAE;IAC3C,IAAIA,SAAS,CAAC60F,iBAAiB,IAAI,YAAY,EAAE;MAC7C,OAAO70F,SAAS,CAAC80F,aAAa,GAAG,IAAI;IACzC,CAAC,MACI;MACD,OAAOlpF,OAAO,CAAC,UAAU,CAAC,CAAC5L,SAAS,CAAC80F,aAAa,CAAC;IACvD;EACJ,CAAC;EAEDlzG,MAAM,CAAC+7C,SAAS,GAAG,UAAU7hC,GAAG,EAAE;IAC9B,IAAIA,GAAG,CAACm6D,QAAQ,KAAK,IAAI,EAAE;MACvBn6D,GAAG,CAACm6D,QAAQ,GAAG,KAAK;IACxB,CAAC,MAAM;MACHn6D,GAAG,CAACm6D,QAAQ,GAAG,IAAI;IACvB;EACJ,CAAC;EAEDr0E,MAAM,CAACw2H,kCAAkC,GAAG,IAAI;EAChDx2H,MAAM,CAACy2H,qBAAqB,GAAG,YAAY;IACvCz2H,MAAM,CAAC+0H,wBAAwB,CAAC5zH,IAAI,GAAG,SAAS;IAChDnB,MAAM,CAAC+0H,wBAAwB,CAACC,WAAW,GAAG,IAAI;IAElD,IAAInnG,cAAc,GAAG/pB,CAAC,CAAC,4BAA4B,CAAC;IACpDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;IAExCrtB,QAAQ,CAAC,YAAY;MACjB,IAAIR,MAAM,CAACw2H,kCAAkC,EAAE;QAC3Cx2H,MAAM,CAACw2H,kCAAkC,GAAG,KAAK;QACjDn2H,aAAa,CAAC0wD,aAAa,CAAC/wD,MAAM,CAACsY,UAAU,EAAE,cAAc,CAAC;MAClE;MAEAxU,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,CAAC;EACN,CAAC;EAEDxE,MAAM,CAAC02H,yBAAyB,GAAG,YAAY;IAC3C,IAAI7oG,cAAc,GAAG/pB,CAAC,CAAC,4BAA4B,CAAC;IACpDzD,aAAa,CAAC09E,eAAe,CAAC,cAAc,CAAC;IAC7C19E,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAAC22H,oBAAoB,GAAG,YAAY;IACtC32H,MAAM,CAAC02H,yBAAyB,CAAC,CAAC;;IAElC;IACAr3H,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,oBAAoB,EAAEC,IAAI,CAACC,SAAS,CAAC;MAC7D25E,QAAQ,EAAEjxG,aAAa,CAACwyE,gCAAgC,CAAC7yE,MAAM,CAAC+0H,wBAAwB,CAACC,WAAW,EAAE,UAAU,CAAC;MACjH5xH,EAAE,EAAEpD,MAAM,CAACy1H,aAAa,CAACryH,EAAE;MAC3BwtB,UAAU,EAAE5wB,MAAM,CAACy1H,aAAa,CAAC7kG,UAAU;MAC3CwgF,YAAY,EAAEpxG,MAAM,CAACy1H,aAAa,CAACrkB,YAAY;MAC/C5lE,WAAW,EAAExrC,MAAM,CAACy1H,aAAa,CAACjqF,WAAW;MAC7C2lE,aAAa,EAAEnxG,MAAM,CAACy1H,aAAa,CAAC/qG,UAAU;MAC9C6mF,aAAa,EAAE;QACXjoD,QAAQ,EAAEtpD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ;QACvCD,MAAM,EAAErpD,MAAM,CAAC8qD,aAAa,CAACzB,MAAM;QACnC5J,QAAQ,EAAEz/C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;QACvClvB,UAAU,EAAEvwB,MAAM,CAAC8qD,aAAa,CAACv6B,UAAU;QAC3C+vF,QAAQ,EAAEtgH,MAAM,CAACsgH;MACrB;IACJ,CAAC,CAAC,CAAC;IAEHz2F,SAAS,CAACiD,IAAI,CAAC,oBAAoB,CAAC;EACxC,CAAC;AACL,CAAC,CACJ,CAAC,C;;;;;;;;;;ACrcNhtB,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,0BAA0B,EAC3D,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAC1G,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAC9H,UAAUC,MAAM,EAAEC,UAAU,EAAEM,SAAS,EAAEipB,YAAY,EAAEhpB,QAAQ,EAAEL,YAAY,EAAED,aAAa,EAAE0pB,SAAS,EACnGvpB,aAAa,EAAEqpB,aAAa,EAAEizB,gBAAgB,EAAEl8C,cAAc,EAAEoX,YAAY,EAAElX,EAAE,EAAEi0H,YAAY,EAAEgC,UAAU,EAAE;EAE5G32H,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE1pB,SAAS,CAACuyC;EAAsB,CAAC,CAAC,CAAC,CAAC;;EAE/F,IAAI,CAACtpB,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;EACJ;EAEApqB,MAAM,CAACuqB,eAAe,GAAGlqB,aAAa,CAACmqB,2BAA2B;EAClExqB,MAAM,CAAC62H,cAAc,GAAG,CAAC;EACzB72H,MAAM,CAAC82H,kBAAkB,GAAG,CAAC;EAC7B92H,MAAM,CAAC+2H,uBAAuB,GAAG,CAAC;EAClC/2H,MAAM,CAACg3H,mBAAmB,GAAG,CAAC;EAC9Bh3H,MAAM,CAACkE,IAAI,GAAG,EAAE;EAChBlE,MAAM,CAACyyD,OAAO,GAAG,EAAE;EACnBzyD,MAAM,CAACi3H,aAAa,GAAG,EAAE;EACzBj3H,MAAM,CAACk3H,iBAAiB,GAAG,EAAE;EAC7Bl3H,MAAM,CAACsgH,QAAQ,GAAG,CAAC;EACnBtgH,MAAM,CAACugH,eAAe;EACtBvgH,MAAM,CAACu5B,WAAW,GAAG,EAAE;EACvBv5B,MAAM,CAACkJ,SAAS,GAAG,KAAK;EAExBlJ,MAAM,CAACgrD,UAAU,GAAG1rD,kBAAkB,CAACw3C,QAAQ,IAAI,KAAK;EAExD92C,MAAM,CAAC8qD,aAAa,GAAG;IACnBqsE,eAAe,EAAE,CAAC;IAClBC,SAAS,EAAE;EACf,CAAC;EAEDp3H,MAAM,CAACmB,IAAI,GAAG,EAAE;EAChBnB,MAAM,CAACq3H,cAAc,GAAG,EAAE;EAE1Br3H,MAAM,CAACs3H,eAAe,GAAG,EAAE;EAC3Bt3H,MAAM,CAACu3H,mBAAmB,GAAG,UAAUn0H,EAAE,EAAG;IACxC,IAAG,CAACA,EAAE,EAAC;MACH;IACJ;IACApD,MAAM,CAACs3H,eAAe,GAAG,EAAE;IACvB,IAAIl2B,CAAC,GAAGphG,MAAM,CAACyyD,OAAO,CAACrsD,MAAM;IAC7B,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;MACxB,IAAIxU,MAAM,CAACyyD,OAAO,CAACj+C,CAAC,CAAC,CAACpR,EAAE,IAAIA,EAAE,EAAE;QAC5BpD,MAAM,CAACs3H,eAAe,CAACjxH,IAAI,CAACrG,MAAM,CAACyyD,OAAO,CAACj+C,CAAC,CAAC,CAAC;MAClD;IACJ;IACAnU,aAAa,CAAC8E,UAAU,CAAC,wBAAwB,EAAE,YAAW;MAC1D3E,QAAQ,CAAC,YAAU;QACfsD,CAAC,CAAC,2BAA2B,CAAC,CAACU,OAAO,CAAC,gBAAgB,CAAC;MAC5D,CAAC,CAAC;IACN,CAAC,CAAC;EACR,CAAC;EAEHhE,QAAQ,CAAC,YAAY;IACjBR,MAAM,CAACmB,IAAI,GAAG,QAAQ;EAC1B,CAAC,CAAC;EAEF,IAAM24B,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAA,EAAc;IACzC,IAAI,CAAC95B,MAAM,CAACkJ,SAAS,IAAIlJ,MAAM,CAACsgH,QAAQ,GAAGtgH,MAAM,CAACs5B,UAAU,EAAE;MAC1Dt5B,MAAM,CAAC0iH,UAAU,CAAC1iH,MAAM,CAACsgH,QAAQ,GAAG,CAAC,CAAC;IAC1C;EACJ,CAAC;EAEDjmF,iBAAiB,CAACP,yBAAyB,CAAC;EAE5C,SAASM,QAAQA,CAAClO,KAAK,EAAE;IACrB,IAAIqO,IAAI,GAAGv6B,MAAM,CAACu5B,WAAW;IAC7Bv5B,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAC3Cv6B,MAAM,CAACw5B,YAAY,GAAGtN,KAAK;IAC3B,IAAIlsB,MAAM,CAACs5B,UAAU,KAAK,CAAC,EAAE;MACzBt5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;IACzB;EACJ;EAAC;EAGDt5B,MAAM,CAACw3H,SAAS,GAAG,YAAY;IAC3Bx3H,MAAM,CAACsgH,QAAQ,GAAG,CAAC;IACnBtgH,MAAM,CAACgiH,QAAQ,CAAC,CAAC;EACrB,CAAC;EAEDhiH,MAAM,CAAC0iH,UAAU,GAAG,UAAUtnF,IAAI,EAAE;IAChCp7B,MAAM,CAACsgH,QAAQ,GAAGllF,IAAI;IACtBp7B,MAAM,CAACgiH,QAAQ,CAAC,IAAI,CAAC;EACzB,CAAC;EAEDhiH,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB7rB,MAAM,CAACw3H,SAAS,CAAC,CAAC;EACtB,CAAC;EAEDx3H,MAAM,CAACqV,SAAS,GAAG,IAAI;EACvBrV,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,UAAU2W,GAAG,EAAE;IAErC,IAAIhZ,MAAM,CAACqV,SAAS,EAAE;MAClBrV,MAAM,CAACqV,SAAS,GAAG,KAAK;IAC5B;EACJ,CAAC,CAAC;EAEFrV,MAAM,CAACgiH,QAAQ,GAAG,UAAU1/C,QAAQ,EAAE2/C,OAAO,EAAE;IAC3Cn+G,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACkJ,SAAS,GAAG,IAAI;IAEvB,IAAIqhD,IAAI,GAAG;MACP4sE,eAAe,EAAEn3H,MAAM,CAAC8qD,aAAa,CAACqsE,eAAe;MACrDC,SAAS,EAAEp3H,MAAM,CAAC8qD,aAAa,CAACssE,SAAS;MACzCv2H,UAAU,EAAEb,MAAM,CAACq3H,cAAc;MACjC1iG,IAAI,EAAE,CAAC30B,MAAM,CAACsgH,QAAQ,GAAG,CAAC,IAAItgH,MAAM,CAACu5B,WAAW;MAChD45D,IAAI,EAAEnzF,MAAM,CAACu5B;IACjB,CAAC;IAED,OAAO7P,aAAa,CAAC+tG,kBAAkB,CAACltE,IAAI,CAAC,CAACvmD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC9D,IAAI,CAACi5D,QAAQ,EAAE;QACXtiE,MAAM,CAACkE,IAAI,GAAG,EAAE;QAChBlE,MAAM,CAACyyD,OAAO,GAAG,EAAE;MACvB;MACAr4B,QAAQ,CAAC/wB,GAAG,CAACnF,IAAI,CAACwzH,OAAO,CAAC;MAE1B13H,MAAM,CAACi3H,aAAa,GAAG5tH,GAAG,CAACnF,IAAI,CAACyzH,OAAO;MACvC33H,MAAM,CAACk3H,iBAAiB,GAAG7tH,GAAG,CAACnF,IAAI,CAAC0zH,iBAAiB;MACrD,IAAI,CAACt1D,QAAQ,EAAE;QACXtiE,MAAM,CAACkE,IAAI,GAAGmF,GAAG,CAACnF,IAAI,CAAC2zH,MAAM;QAC7B73H,MAAM,CAACyyD,OAAO,GAAGppD,GAAG,CAACnF,IAAI,CAACi7C,OAAO;QAEjCn/C,MAAM,CAACkE,IAAI,CAACiK,OAAO,CAAC;UAChB2pH,YAAY,EAAE,SAAS;UACvBC,cAAc,EAAE1uH,GAAG,CAACnF,IAAI,CAAC8zH,cAAc;UACvCC,cAAc,EAAE5uH,GAAG,CAACnF,IAAI,CAACg0H;QAC7B,CAAC,CAAC;MACN,CAAC,MAAM;QACHl4H,MAAM,CAACkE,IAAI,GAAGlE,MAAM,CAACkE,IAAI,CAACuN,MAAM,CAACpI,GAAG,CAACnF,IAAI,CAAC2zH,MAAM,CAAC;QACjD73H,MAAM,CAACyyD,OAAO,GAAGzyD,MAAM,CAACyyD,OAAO,CAAChhD,MAAM,CAACpI,GAAG,CAACnF,IAAI,CAACi7C,OAAO,CAAC;MAC5D;MACAn/C,MAAM,CAACg3H,mBAAmB,GAAG3tH,GAAG,CAACnF,IAAI,CAACi0H,gBAAgB;MAEtDn4H,MAAM,CAACo4H,UAAU,CAACrzH,YAAY,CAAC,CAAC;MAEhC/E,MAAM,CAACkJ,SAAS,GAAG,KAAK;MACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SAAM,CAAC,UAAUF,GAAG,EAAE;MACpBnE,MAAM,CAACkJ,SAAS,GAAG,KAAK;MACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;;EAED;EACAnE,MAAM,CAACq4H,iBAAiB,GAAG,YAAY;IACnC,OAAO,IAAI;EACf,CAAC;EAEDr4H,MAAM,CAACo2H,WAAW,GAAG,UAAUC,SAAS,EAAEhyD,YAAY,EAAE;IACpDvgE,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAI2G,KAAK,GAAG2rH,SAAS,CAAC3iH,UAAU;IAChC,IAAI2wD,YAAY,GAAGA,YAAY,CAAC3wD,UAAU;IAE1C,IAAI4kH,MAAM,GAAG,EAAE;IACf,KAAK,IAAI9jH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACi3H,aAAa,CAAC7wH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MAClD8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACi3H,aAAa,CAACziH,CAAC,CAAC,CAAChK,EAAE,CAAC;IAC3C;IACA,IAAI+/C,IAAI,GAAG;MACP4sE,eAAe,EAAEn3H,MAAM,CAAC8qD,aAAa,CAACqsE,eAAe;MACrDC,SAAS,EAAEp3H,MAAM,CAAC8qD,aAAa,CAACssE,SAAS;MACzCv2H,UAAU,EAAEb,MAAM,CAACq3H,cAAc;MACjCkB,UAAU,EAAED,MAAM;MAClBE,OAAO,EAAE9tH,KAAK;MACd+tH,OAAO,EAAEp0D;IACb,CAAC;IAED,OAAO36C,aAAa,CAACgvG,uBAAuB,CAACnuE,IAAI,CAAC,CAChDvmD,IAAI,CAAC,UAAUyjB,MAAM,EAAE;MACpB3jB,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC+L,WAAW,CAAC,2BAA2B,CAAC;;MAEtD;MACApM,MAAM,CAACu2H,qBAAqB,GAAG,IAAI;MACnCl2H,aAAa,CAAC8E,UAAU,CAAC,wBAAwB,CAAC;IACtD,CAAC,CAAC,SACI,CAAC,UAAUhB,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAC5E,CAAC,CAAC;EACP,CAAC;EAEDxB,MAAM,CAAC24H,YAAY,GAAG,YAAY;IAC9B70H,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAIu0H,MAAM,GAAG,EAAE;IACf,KAAK,IAAI9jH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACi3H,aAAa,CAAC7wH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MAClD8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACi3H,aAAa,CAACziH,CAAC,CAAC,CAAChK,EAAE,CAAC;IAC3C;IACA,IAAI+/C,IAAI,GAAG;MACP4sE,eAAe,EAAEn3H,MAAM,CAAC8qD,aAAa,CAACqsE,eAAe;MACrDC,SAAS,EAAEp3H,MAAM,CAAC8qD,aAAa,CAACssE,SAAS;MACzCv2H,UAAU,EAAEb,MAAM,CAACq3H,cAAc;MACjCkB,UAAU,EAAED;IAChB,CAAC;IAED,OAAO5uG,aAAa,CAACkvG,qBAAqB,CAACruE,IAAI,CAAC,CAC/CvmD,IAAI,CAAC,UAAUwxC,GAAG,EAAE;MACjB,IAAIt1C,aAAa,CAAC2L,QAAQ,EACtB,OAAO+qH,UAAU,CAACjgF,cAAc,CAACnB,GAAG,CAACtxC,IAAI,EAAE,oBAAoB,CAAC,CAC/DF,IAAI,CAAC,UAAU8oB,IAAI,EAAE;QAClB,IAAIvhB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzB1H,CAAC,CAACO,SAAS,CAAC,CAAC;QAEbhE,aAAa,CAACowE,cAAc,CAAC;UACzBr8D,KAAK,EAAE,EAAE;UACTqiC,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,wBAAwB,GAAGsrB,IAAI;QAClE,CAAC,EAAE,YAAY;UACXvhB,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAC1B,CAAC,CAAC;QAGF,OAAOF,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC,CAAC,KAEH,OAAOkrH,UAAU,CAAC9gF,WAAW,CAACN,GAAG,CAACtxC,IAAI,EAAE,oBAAoB,CAAC;IACrE,CAAC,CAAC,CACDF,IAAI,CAAC,YAAY;MACdF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACI,CAAC,UAAUF,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EAEN,CAAC;AAEL,CAAC,CAEA,CAAC,C;;;;;;;;;;ACzONrE,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,2BAA2B,EAC5D,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAC1G,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAC,YAAY,EAC7H,UAAUC,MAAM,EAAEC,UAAU,EAAEM,SAAS,EAAEipB,YAAY,EAAEhpB,QAAQ,EAAEL,YAAY,EAAED,aAAa,EAAE0pB,SAAS,EACnGvpB,aAAa,EAAEqpB,aAAa,EAAEizB,gBAAgB,EAAEl8C,cAAc,EAAEoX,YAAY,EAAElX,EAAE,EAAEi0H,YAAY,EAAEgC,UAAU,EAAE;EAE5G32H,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE1pB,SAAS,CAACkyC;EAAuB,CAAC,CAAC,CAAC,CAAC;;EAEhG,IAAI,CAACjpB,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;EACJ;EAEApqB,MAAM,CAAC64H,UAAU,GAAG,2CAA2C;EAE/D74H,MAAM,CAACmB,IAAI,GAAG,EAAE;EAChBnB,MAAM,CAACkE,IAAI,GAAG,EAAE;EAChBlE,MAAM,CAAC84H,MAAM,GAAG,EAAE;EAClB94H,MAAM,CAAC+4H,OAAO,GAAG,EAAE;EACnB/4H,MAAM,CAACi3H,aAAa,GAAG,EAAE;EACzBj3H,MAAM,CAACg5H,eAAe,GAAG,EAAE;EAC3Bh5H,MAAM,CAACk3H,iBAAiB,GAAG,EAAE;EAC7Bl3H,MAAM,CAACi5H,yBAAyB,GAAG,EAAE;EAErCj5H,MAAM,CAACsgH,QAAQ,GAAG,CAAC;EACnBtgH,MAAM,CAACugH,eAAe;EACtBvgH,MAAM,CAACu5B,WAAW,GAAG,GAAG;EAExBv5B,MAAM,CAACgrD,UAAU,GAAG1rD,kBAAkB,CAACw3C,QAAQ,IAAI,KAAK;EAExD92C,MAAM,CAAC02D,KAAK,GAAG,UAAS/tB,CAAC,EAAE;IACvB,OAAO,IAAI1+B,KAAK,CAAC0+B,CAAC,CAAC;EACvB,CAAC;EAED3oC,MAAM,CAACk5H,cAAc,GAAG,YAAU;IAC9B74H,aAAa,CAAC8E,UAAU,CAACrB,CAAC,CAAC,gCAAgC,CAAC,EAAE,YAAW,CAAE,CAAC,CAAC;EACjF,CAAC;EAED9D,MAAM,CAACm5H,eAAe,GAAG,YAAU;IAC/B94H,aAAa,CAAC+L,WAAW,CAACtI,CAAC,CAAC,gCAAgC,CAAC,CAAC;EAClE,CAAC;EAED9D,MAAM,CAACo5H,YAAY,GAAG,UAASh+G,GAAG,EAAEs6B,GAAG,EAAE;IACrC,IAAIhgB,KAAK,GAAG,KAAK;IACb,IAAI0rE,CAAC,GAAGhmF,GAAG,CAAChV,MAAM;IAClB,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;MACxB,IAAI4G,GAAG,CAAC5G,CAAC,CAAC,CAAChK,EAAE,IAAIkrC,GAAG,CAAClrC,EAAE,EAAE;QACrBkrB,KAAK,GAAG,IAAI;QACZta,GAAG,CAAC9L,MAAM,CAACkF,CAAC,EAAE,CAAC,CAAC;QAChB;MACJ;IACJ;IACJ,IAAI,CAACkhB,KAAK,EAAE;MACRta,GAAG,CAAC/U,IAAI,CAACqvC,GAAG,CAAC;IACjB;EACJ,CAAC;EAED11C,MAAM,CAACq5H,gBAAgB,GAAG,UAAUj+G,GAAG,EAAE1G,CAAC,EAAG;IACrC,IAAIghB,KAAK,GAAG,KAAK;IACjB,IAAI0rE,CAAC,GAAGhmF,GAAG,CAAChV,MAAM;IAClB,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;MACxB,IAAI4G,GAAG,CAAC5G,CAAC,CAAC,CAAChK,EAAE,IAAIkK,CAAC,CAAClK,EAAE,EAAE;QACnBkrB,KAAK,GAAG,IAAI;QACZ;MACJ;IACJ;IACF,OAAOA,KAAK;EAChB,CAAC;EAEH11B,MAAM,CAACs5H,YAAY,GAAG,UAAU5kH,CAAC,EAAG;IAChC,OAAO,UAAUA,CAAC,EAAG;MACjB,IAAIghB,KAAK,GAAG,KAAK;MACjB,IAAI0rE,CAAC,GAAGphG,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM;MACrC,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;QACxB,IAAIxU,MAAM,CAACg5H,eAAe,CAACxkH,CAAC,CAAC,CAAChK,EAAE,IAAIkK,CAAC,CAAC6kH,QAAQ,EAAE;UAC5C7jG,KAAK,GAAG,IAAI;UACZ;QACJ;MACJ;MACF,OAAOA,KAAK;IACd,CAAC;EACH,CAAC;EAED11B,MAAM,CAACw5H,sBAAsB,GAAG,UAAU9kH,CAAC,EAAG;IAC5C,OAAO,UAAUA,CAAC,EAAG;MACjB,IAAIghB,KAAK,GAAG,KAAK;MACjB,IAAI0rE,CAAC,GAAGphG,MAAM,CAACi5H,yBAAyB,CAAC7yH,MAAM;MAC/C,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;QACxB,IAAIxU,MAAM,CAACi5H,yBAAyB,CAACzkH,CAAC,CAAC,CAAChK,EAAE,IAAIkK,CAAC,CAAC6kH,QAAQ,EAAE;UACtD7jG,KAAK,GAAG,IAAI;UACZ;QACJ;MACJ;MACF,OAAOA,KAAK;IACd,CAAC;EACH,CAAC;EAED11B,MAAM,CAACy5H,kBAAkB,GAAG,UAAU/kH,CAAC,EAAG;IACxC,OAAO,UAAUA,CAAC,EAAG;MACjB,IAAIghB,KAAK,GAAG,KAAK;MACjB,IAAI0rE,CAAC,GAAGphG,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM;MACrC,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;QACxB,IAAIxU,MAAM,CAACg5H,eAAe,CAACxkH,CAAC,CAAC,CAAChK,EAAE,IAAIkK,CAAC,CAAClK,EAAE,EAAE;UACtCkrB,KAAK,GAAG,IAAI;UACZ;QACJ;MACJ;MACF,OAAOA,KAAK;IACd,CAAC;EACH,CAAC;EAEH,IAAMoE,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAA,EAAc;IACzC,IAAI,CAAC95B,MAAM,CAACkJ,SAAS,IAAIlJ,MAAM,CAACsgH,QAAQ,GAAGtgH,MAAM,CAACs5B,UAAU,EAAE;MAC1Dt5B,MAAM,CAAC0iH,UAAU,CAAC1iH,MAAM,CAACsgH,QAAQ,GAAG,CAAC,CAAC;IAC1C;EACJ,CAAC;EAEDjmF,iBAAiB,CAACP,yBAAyB,CAAC;EAE5C,SAASM,QAAQA,CAAClO,KAAK,EAAE;IACrB,IAAIqO,IAAI,GAAGv6B,MAAM,CAACu5B,WAAW;IAC7Bv5B,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAC3Cv6B,MAAM,CAACw5B,YAAY,GAAGtN,KAAK;IAC3B,IAAIlsB,MAAM,CAACs5B,UAAU,KAAK,CAAC,EAAE;MACzBt5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;IACzB;EACJ;EAAC;EAEDt5B,MAAM,CAAC0iH,UAAU,GAAG,UAAUtnF,IAAI,EAAE;IAChCp7B,MAAM,CAACsgH,QAAQ,GAAGllF,IAAI;IACtBp7B,MAAM,CAACw3H,SAAS,CAAC,KAAK,CAAC;EAC3B,CAAC;EAGDx3H,MAAM,CAAC8qD,aAAa,GAAG;IACnBrL,QAAQ,EAAE,GAAG;IACbi6E,aAAa,EAAE,KAAK;IACpBvC,eAAe,EAAE,CAAC,CAAC;IACnBC,SAAS,EAAE,KAAK;IAChBv2H,UAAU,EAAE;EAChB,CAAC;EAEDL,QAAQ,CAAC,YAAY;IACjBR,MAAM,CAACmB,IAAI,GAAG,QAAQ;;IAEtB;;IAEAX,QAAQ,CAAC,YAAY;MACjB0E,WAAW,CAAC,YAAY;QACpB,IAAItF,EAAE,GAAGkE,CAAC,CAAC,IAAI,CAAC;QAChB,IAAIlE,EAAE,CAAC,CAAC,CAAC,CAAC4K,EAAE,IAAI,gBAAgB,EAAE;UAC9B;UACA1K,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACm+C,SAAS,EAAE,UAAUijD,CAAC,EAAE;YAC3C,IAAIl+D,CAAC,GAAG,wBAAwB,IAAI,CAAC,CAACk+D,CAAC,CAACu4B,kBAAkB,GAAGv4B,CAAC,CAACu4B,kBAAkB,GAAGl5H,cAAc,CAACe,SAAS,CAAC,aAAa,CAAC,CAAC,GAAG,QAAQ,GAC/H,+CAA+C,IAAI,CAAC,CAAC4/F,CAAC,CAACw4B,eAAe,GAAGx4B,CAAC,CAACw4B,eAAe,GAAG,QAAQ,CAAC,GACtG,QAAQ;YAChB,IAAIC,EAAE,GAAGj6H,EAAE,CAACyR,IAAI,CAAC,SAAS,GAAG+vF,CAAC,CAAC51D,WAAW,CAAC;YAE3CquF,EAAE,CAACp6G,IAAI,CAACyjB,CAAC,CAAC;UACd,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;MAEF1iC,QAAQ,CAAC,YAAY;QAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAAE,CAAC,CAAC;IACpE,CAAC,CAAC;EACN,CAAC,CAAC;EAEFxE,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB/nB,CAAC,CAACC,OAAO,CAAC,CAAC;IACX44C,gBAAgB,CAACuO,qCAAqC,CAAC,CAAC,CACvDlnD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAIA,GAAG,CAACnF,IAAI,CAACinD,cAAc,KAAK,IAAI,EAAE;QAClCnrD,MAAM,CAACm+C,SAAS,GAAG90C,GAAG,CAACnF,IAAI,CAACi6C,SAAS;QACrC,IAAIn+C,MAAM,CAACm+C,SAAS,CAAC/3C,MAAM,GAAG,CAAC,EAC3BpG,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,GAAGz/C,MAAM,CAACm+C,SAAS,CAAC,CAAC,CAAC,CAAC3S,WAAW;MACvE,CAAC,MAEGxrC,MAAM,CAACm+C,SAAS,GAAG,CAAC;QAAE3S,WAAW,EAAE,GAAG;QAAE9gB,UAAU,EAAEjqB,cAAc,CAACe,SAAS,CAAC,aAAa;MAAE,CAAC,CAAC,CAACiQ,MAAM,CAACpI,GAAG,CAACnF,IAAI,CAACi6C,SAAS,CAAC;MAC7Hn+C,MAAM,CAACw3H,SAAS,CAAC,CAAC;IACtB,CAAC,CAAC,SACI,CAAC,UAAUrzH,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC,WACM,CAAC,YAAY;MACjB3D,QAAQ,CAAC,YAAY;QAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAAE,CAAC,CAAC;IACpE,CAAC,CAAC;EACN,CAAC;EAEDxE,MAAM,CAAC0I,MAAM,CAAC,wBAAwB,EACtC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IAC1B;EACJ,CAAC,CAAC;EAEFx3H,MAAM,CAAC0I,MAAM,CAAC,+BAA+B,EAC7C,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IACxB,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACzB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IACxB;EACN,CAAC,CAAC;EAEFx3H,MAAM,CAAC0I,MAAM,CAAC,yBAAyB,EACvC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IAC1B;EACJ,CAAC,CAAC;EAGFx3H,MAAM,CAAC0I,MAAM,CAAC,6BAA6B,EAC3C,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IAC1B;EACJ,CAAC,CAAC;EAEFx3H,MAAM,CAACqV,SAAS,GAAG,IAAI;EACvBrV,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,UAAU2W,GAAG,EAAE;IACrC,IAAIhZ,MAAM,CAACqV,SAAS,EAAE;MAClBrV,MAAM,CAACqV,SAAS,GAAG,KAAK;IAC5B;EACJ,CAAC,CAAC;EAEFrV,MAAM,CAACw3H,SAAS,GAAG,UAAUsC,SAAS,EAAE;IACpC,IAAGA,SAAS,EAAE;MACV95H,MAAM,CAACsgH,QAAQ,GAAG,CAAC;MACnBtgH,MAAM,CAACkE,IAAI,GAAG,EAAE;IACpB;IAEA,IAAIqmD,IAAI,GAAG;MACPlN,QAAQ,EAAEr9C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;MACvCi6E,aAAa,EAAE15H,MAAM,CAAC8qD,aAAa,CAAC4uE,aAAa;MACjDvC,eAAe,EAAEn3H,MAAM,CAAC8qD,aAAa,CAACqsE,eAAe;MACrDC,SAAS,EAAEp3H,MAAM,CAAC8qD,aAAa,CAACssE,SAAS;MACzCv2H,UAAU,EAAEb,MAAM,CAAC8qD,aAAa,CAACjqD,UAAU;MAC3C8zB,IAAI,EAAE,CAAC30B,MAAM,CAACsgH,QAAQ,GAAG,CAAC,IAAItgH,MAAM,CAACu5B,WAAW;MAChD45D,IAAI,EAAEnzF,MAAM,CAACu5B;IACjB,CAAC;IAEDz1B,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACkJ,SAAS,GAAG,IAAI;IACvBlJ,MAAM,CAAC+5H,OAAO,GAAG,EAAE;IACnB/5H,MAAM,CAAC84H,MAAM,GAAG,EAAE;IAClB94H,MAAM,CAACk3H,iBAAiB,GAAG,EAAE;IAE7B,OAAOxtG,aAAa,CAACswG,mBAAmB,CAACzvE,IAAI,CAAC,CAACvmD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC/DrJ,MAAM,CAACi3H,aAAa,GAAG5tH,GAAG,CAACnF,IAAI,CAACyzH,OAAO;MACvC33H,MAAM,CAACkE,IAAI,GAAGlE,MAAM,CAACkE,IAAI,CAACuN,MAAM,CAACpI,GAAG,CAACnF,IAAI,CAAC2zH,MAAM,CAAC;MACjD73H,MAAM,CAAC84H,MAAM,GAAGzvH,GAAG,CAACnF,IAAI,CAAC+1H,MAAM;MAC/Bj6H,MAAM,CAACk3H,iBAAiB,GAAG7tH,GAAG,CAACnF,IAAI,CAAC0zH,iBAAiB;MACrDx9F,QAAQ,CAAC/wB,GAAG,CAACnF,IAAI,CAACwzH,OAAO,CAAC;MAE1B,IAAI13H,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM,IAAI,CAAC,EAAE;QACpC,IAAIg7F,CAAC,GAAGphG,MAAM,CAACi3H,aAAa,CAAC7wH,MAAM;QACnC,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;UACxB,IAAIxU,MAAM,CAACi3H,aAAa,CAACziH,CAAC,CAAC,CAAC0lH,SAAS,KAAK,IAAI,EAAE;YAC5Cl6H,MAAM,CAACg5H,eAAe,CAAC3yH,IAAI,CAACrG,MAAM,CAACi3H,aAAa,CAACziH,CAAC,CAAC,CAAC;UACxD;QACJ;MACJ;MAEAxU,MAAM,CAACo4H,UAAU,CAACrzH,YAAY,CAAC,CAAC;MAEhC/E,MAAM,CAACkJ,SAAS,GAAG,KAAK;MACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SAAM,CAAC,UAAUF,GAAG,EAAE;MACpBnE,MAAM,CAACkJ,SAAS,GAAG,KAAK;MACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;;EAED;EACAnE,MAAM,CAACq4H,iBAAiB,GAAG,YAAY;IACnC,OAAO,IAAI;EACf,CAAC;EAEDr4H,MAAM,CAACo2H,WAAW,GAAG,UAAUC,SAAS,EAAEhyD,YAAY,EAAE;IACpDvgE,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAI2G,KAAK,GAAG2rH,SAAS,CAAC3iH,UAAU;IAChC,IAAI2wD,YAAY,GAAGA,YAAY,CAAC3wD,UAAU;IAE1C,IAAI4kH,MAAM,GAAG,EAAE;IACf,KAAK,IAAI9jH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MACpD8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACg5H,eAAe,CAACxkH,CAAC,CAAC,CAAChK,EAAE,CAAC;IAC7C;IAEA,KAAK,IAAIgK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACi5H,yBAAyB,CAAC7yH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MAC9D8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACi5H,yBAAyB,CAACzkH,CAAC,CAAC,CAAChK,EAAE,CAAC;IACvD;IAEA,IAAI+/C,IAAI,GAAG;MACPlN,QAAQ,EAAEr9C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;MACvCi6E,aAAa,EAAE15H,MAAM,CAAC8qD,aAAa,CAAC4uE,aAAa;MACjD74H,UAAU,EAAEb,MAAM,CAAC8qD,aAAa,CAACjqD,UAAU;MAC3C03H,UAAU,EAAED,MAAM;MAClBE,OAAO,EAAE9tH,KAAK;MACd+tH,OAAO,EAAEp0D;IACb,CAAC;IAED,OAAO36C,aAAa,CAACywG,wBAAwB,CAAC5vE,IAAI,CAAC,CAClDvmD,IAAI,CAAC,UAAUyjB,MAAM,EAAE;MACpB3jB,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC+L,WAAW,CAAC,2BAA2B,CAAC;MACtD;MACApM,MAAM,CAACu2H,qBAAqB,GAAG,IAAI;MACnCl2H,aAAa,CAAC8E,UAAU,CAAC,wBAAwB,CAAC;IACtD,CAAC,CAAC,SACI,CAAC,UAAUhB,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAC5E,CAAC,CAAC;EACN,CAAC;EAEDxB,MAAM,CAAC24H,YAAY,GAAG,YAAY;IAC9B70H,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAIu0H,MAAM,GAAG,EAAE;IACf,KAAK,IAAI9jH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MACpD8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACg5H,eAAe,CAACxkH,CAAC,CAAC,CAAChK,EAAE,CAAC;IAC7C;IAEA,KAAK,IAAIgK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACi5H,yBAAyB,CAAC7yH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MAC9D8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACi5H,yBAAyB,CAACzkH,CAAC,CAAC,CAAChK,EAAE,CAAC;IACvD;IAEA,IAAI+/C,IAAI,GAAG;MACPlN,QAAQ,EAAEr9C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;MACvCi6E,aAAa,EAAE15H,MAAM,CAAC8qD,aAAa,CAAC4uE,aAAa;MACjD74H,UAAU,EAAEb,MAAM,CAAC8qD,aAAa,CAACjqD,UAAU;MAC3C03H,UAAU,EAAED;IAChB,CAAC;IAED,OAAO5uG,aAAa,CAAC0wG,sBAAsB,CAAC7vE,IAAI,CAAC,CAChDvmD,IAAI,CAAC,UAAUwxC,GAAG,EAAE;MACjB,IAAIt1C,aAAa,CAAC2L,QAAQ,EACtB,OAAO+qH,UAAU,CAACjgF,cAAc,CAACnB,GAAG,CAACtxC,IAAI,EAAE,qBAAqB,CAAC,CAChEF,IAAI,CAAC,UAAU8oB,IAAI,EAAE;QAClB,IAAIvhB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzB1H,CAAC,CAACO,SAAS,CAAC,CAAC;QAEbhE,aAAa,CAACowE,cAAc,CAAC;UACzBr8D,KAAK,EAAE,EAAE;UACTqiC,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,wBAAwB,GAACsrB,IAAI;QAChE,CAAC,EAAE,YAAY;UACXvhB,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAC1B,CAAC,CAAC;QAEF,OAAOF,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC,CAAC,KAEH,OAAOkrH,UAAU,CAAC9gF,WAAW,CAACN,GAAG,CAACtxC,IAAI,EAAE,qBAAqB,CAAC;IACtE,CAAC,CAAC,CACDF,IAAI,CAAC,YAAY;MACdF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACI,CAAC,UAAUF,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EAEN,CAAC;AAEL,CAAC,CACJ,CAAC,C;;;;;;;;;;;;;;AC/WFrE,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,2BAA2B,EAC5D,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAC1G,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAC,YAAY,EAC7H,UAAUC,MAAM,EAAEC,UAAU,EAAEM,SAAS,EAAEipB,YAAY,EAAEhpB,QAAQ,EAAEL,YAAY,EAAED,aAAa,EAAE0pB,SAAS,EACnGvpB,aAAa,EAAEqpB,aAAa,EAAEizB,gBAAgB,EAAEl8C,cAAc,EAAEoX,YAAY,EAAElX,EAAE,EAAEi0H,YAAY,EAAEgC,UAAU,EAAE;EAE5G32H,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE1pB,SAAS,CAACiyC;EAAuB,CAAC,CAAC,CAAC,CAAC;;EAEhG,IAAI,CAAChpB,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;EACJ;EAEApqB,MAAM,CAAC64H,UAAU,GAAG,2CAA2C;EAE/D74H,MAAM,CAACmB,IAAI,GAAG,EAAE;EAChBnB,MAAM,CAACkE,IAAI,GAAG,EAAE;EAChBlE,MAAM,CAAC84H,MAAM,GAAG,EAAE;EAClB94H,MAAM,CAAC+4H,OAAO,GAAG,EAAE;EACnB/4H,MAAM,CAACi3H,aAAa,GAAG,EAAE;EACzBj3H,MAAM,CAACg5H,eAAe,GAAG,EAAE;EAC3Bh5H,MAAM,CAACk3H,iBAAiB,GAAG,EAAE;EAC7Bl3H,MAAM,CAACi5H,yBAAyB,GAAG,EAAE;EAErCj5H,MAAM,CAACsgH,QAAQ,GAAG,CAAC;EACnBtgH,MAAM,CAACugH,eAAe;EACtBvgH,MAAM,CAACu5B,WAAW,GAAG,GAAG;EACxBv5B,MAAM,CAACkJ,SAAS,GAAG,KAAK;EAExBlJ,MAAM,CAACgrD,UAAU,GAAG1rD,kBAAkB,CAACw3C,QAAQ,IAAI,KAAK;EAExD92C,MAAM,CAAC02D,KAAK,GAAG,UAAS/tB,CAAC,EAAE;IACvB,OAAO,IAAI1+B,KAAK,CAAC0+B,CAAC,CAAC;EACvB,CAAC;EAED3oC,MAAM,CAACk5H,cAAc,GAAG,YAAU;IAC9B74H,aAAa,CAAC8E,UAAU,CAACrB,CAAC,CAAC,gCAAgC,CAAC,EAAE,YAAW,CAAE,CAAC,CAAC;EACjF,CAAC;EAED9D,MAAM,CAACm5H,eAAe,GAAG,YAAU;IAC/B94H,aAAa,CAAC+L,WAAW,CAACtI,CAAC,CAAC,gCAAgC,CAAC,CAAC;EAClE,CAAC;EAED9D,MAAM,CAACo5H,YAAY,GAAG,UAASh+G,GAAG,EAAEs6B,GAAG,EAAE;IACrC,IAAIhgB,KAAK,GAAG,KAAK;IACb,IAAI0rE,CAAC,GAAGhmF,GAAG,CAAChV,MAAM;IAClB,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;MACxB,IAAI4G,GAAG,CAAC5G,CAAC,CAAC,CAAChK,EAAE,IAAIkrC,GAAG,CAAClrC,EAAE,EAAE;QACrBkrB,KAAK,GAAG,IAAI;QACZta,GAAG,CAAC9L,MAAM,CAACkF,CAAC,EAAE,CAAC,CAAC;QAChB;MACJ;IACJ;IACJ,IAAI,CAACkhB,KAAK,EAAE;MACRta,GAAG,CAAC/U,IAAI,CAACqvC,GAAG,CAAC;IACjB;EACJ,CAAC;EAED11C,MAAM,CAACq5H,gBAAgB,GAAG,UAAUj+G,GAAG,EAAE1G,CAAC,EAAG;IACrC,IAAIghB,KAAK,GAAG,KAAK;IACjB,IAAI0rE,CAAC,GAAGhmF,GAAG,CAAChV,MAAM;IAClB,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;MACxB,IAAI4G,GAAG,CAAC5G,CAAC,CAAC,CAAChK,EAAE,IAAIkK,CAAC,CAAClK,EAAE,EAAE;QACnBkrB,KAAK,GAAG,IAAI;QACZ;MACJ;IACJ;IACF,OAAOA,KAAK;EAChB,CAAC;EAEH11B,MAAM,CAACs5H,YAAY,GAAG,UAAU5kH,CAAC,EAAG;IAChC,OAAO,UAAUA,CAAC,EAAG;MACjB,IAAIghB,KAAK,GAAG,KAAK;MACjB,IAAI0rE,CAAC,GAAGphG,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM;MACrC,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;QACxB,IAAIxU,MAAM,CAACg5H,eAAe,CAACxkH,CAAC,CAAC,CAAChK,EAAE,IAAIkK,CAAC,CAAC6kH,QAAQ,EAAE;UAC5C7jG,KAAK,GAAG,IAAI;UACZ;QACJ;MACJ;MACF,OAAOA,KAAK;IACd,CAAC;EACH,CAAC;EAED11B,MAAM,CAACw5H,sBAAsB,GAAG,UAAU9kH,CAAC,EAAG;IAC5C,OAAO,UAAUA,CAAC,EAAG;MACjB,IAAIghB,KAAK,GAAG,KAAK;MACjB,IAAI0rE,CAAC,GAAGphG,MAAM,CAACi5H,yBAAyB,CAAC7yH,MAAM;MAC/C,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;QACxB,IAAIxU,MAAM,CAACi5H,yBAAyB,CAACzkH,CAAC,CAAC,CAAChK,EAAE,IAAIkK,CAAC,CAAC6kH,QAAQ,EAAE;UACtD7jG,KAAK,GAAG,IAAI;UACZ;QACJ;MACJ;MACF,OAAOA,KAAK;IACd,CAAC;EACH,CAAC;EAED11B,MAAM,CAACy5H,kBAAkB,GAAG,UAAU/kH,CAAC,EAAG;IACxC,OAAO,UAAUA,CAAC,EAAG;MACjB,IAAIghB,KAAK,GAAG,KAAK;MACjB,IAAI0rE,CAAC,GAAGphG,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM;MACrC,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;QACxB,IAAIxU,MAAM,CAACg5H,eAAe,CAACxkH,CAAC,CAAC,CAAChK,EAAE,IAAIkK,CAAC,CAAClK,EAAE,EAAE;UACtCkrB,KAAK,GAAG,IAAI;UACZ;QACJ;MACJ;MACF,OAAOA,KAAK;IACd,CAAC;EACH,CAAC;EAEH,IAAMoE,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAA,EAAc;IACzC,IAAI,CAAC95B,MAAM,CAACkJ,SAAS,IAAIlJ,MAAM,CAACsgH,QAAQ,GAAGtgH,MAAM,CAACs5B,UAAU,EAAE;MAC1Dt5B,MAAM,CAAC0iH,UAAU,CAAC1iH,MAAM,CAACsgH,QAAQ,GAAG,CAAC,CAAC;IAC1C;EACJ,CAAC;EAEDjmF,iBAAiB,CAACP,yBAAyB,CAAC;EAE5C,SAASM,QAAQA,CAAClO,KAAK,EAAE;IACrB,IAAIqO,IAAI,GAAGv6B,MAAM,CAACu5B,WAAW;IAC7Bv5B,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAC3Cv6B,MAAM,CAACw5B,YAAY,GAAGtN,KAAK;IAC3B,IAAIlsB,MAAM,CAACs5B,UAAU,KAAK,CAAC,EAAE;MACzBt5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;IACzB;EACJ;EAAC;EAEDt5B,MAAM,CAAC0iH,UAAU,GAAG,UAAUtnF,IAAI,EAAE;IAChCp7B,MAAM,CAACsgH,QAAQ,GAAGllF,IAAI;IACtBp7B,MAAM,CAACw3H,SAAS,CAAC,KAAK,CAAC;EAC3B,CAAC;EAEDx3H,MAAM,CAAC83G,UAAU,GAAG,QAAQ;EAC5B93G,MAAM,CAACq6H,WAAW,GAAG,CACjB;IAACn3H,IAAI,EAAE,QAAQ;IAAE2rE,IAAI,EAAE,mBAAmB;IAAEyrD,oBAAoB,EAAE;EAAI,CAAC,EACvE;IAACp3H,IAAI,EAAE,UAAU;IAAE2rE,IAAI,EAAE,WAAW;IAAEyrD,oBAAoB,EAAE;EAAI,CAAC,EACjE;IAACp3H,IAAI,EAAE,QAAQ;IAAE2rE,IAAI,EAAE,sBAAsB;IAAGyrD,oBAAoB,EAAE;EAAI,CAAC,CAC9E;EAGDt6H,MAAM,CAACu6H,oBAAoB,GAAG,YAAW;IACrC,IAAIn5B,CAAC,GAAGphG,MAAM,CAACq6H,WAAW,CAACj0H,MAAM;IACjC,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;MACxB,IAAIxU,MAAM,CAACq6H,WAAW,CAAC7lH,CAAC,CAAC,CAACtR,IAAI,KAAKlD,MAAM,CAAC83G,UAAU,EAAE;QAClD,OAAO93G,MAAM,CAACq6H,WAAW,CAAC7lH,CAAC,CAAC;MAChC;IACJ;EACJ,CAAC;EAEDxU,MAAM,CAAC8qD,aAAa,GAAG;IACnBgtD,UAAU,EAAE,QAAQ;IACpBr4D,QAAQ,EAAE,GAAG;IACbi6E,aAAa,EAAE,KAAK;IACpBvC,eAAe,EAAE,CAAC,CAAC;IACnBC,SAAS,EAAE,KAAK;IAChBv2H,UAAU,EAAE;EAChB,CAAC;EAEDL,QAAQ,CAAC,YAAY;IACjBR,MAAM,CAACmB,IAAI,GAAG,QAAQ;IAEtBX,QAAQ,CAAC,YAAY;MACjB0E,WAAW,CAAC,YAAY;QACpB,IAAItF,EAAE,GAAGkE,CAAC,CAAC,IAAI,CAAC;QAChB,IAAIlE,EAAE,CAAC,CAAC,CAAC,CAAC4K,EAAE,IAAI,gBAAgB,EAAE;UAC9B;UACA1K,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACm+C,SAAS,EAAE,UAAUijD,CAAC,EAAE;YAC3C,IAAIl+D,CAAC,GAAG,wBAAwB,IAAI,CAAC,CAACk+D,CAAC,CAACu4B,kBAAkB,GAAGv4B,CAAC,CAACu4B,kBAAkB,GAAGl5H,cAAc,CAACe,SAAS,CAAC,aAAa,CAAC,CAAC,GAAG,QAAQ,GAC/H,+CAA+C,IAAI,CAAC,CAAC4/F,CAAC,CAACw4B,eAAe,GAAGx4B,CAAC,CAACw4B,eAAe,GAAG,QAAQ,CAAC,GACtG,QAAQ;YAChB,IAAIC,EAAE,GAAGj6H,EAAE,CAACyR,IAAI,CAAC,SAAS,GAAG+vF,CAAC,CAAC51D,WAAW,CAAC;YAE3CquF,EAAE,CAACp6G,IAAI,CAACyjB,CAAC,CAAC;UACd,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;MAEF1iC,QAAQ,CAAC,YAAY;QAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAAE,CAAC,CAAC;IACpE,CAAC,CAAC;EACN,CAAC,CAAC;EAEFxE,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB/nB,CAAC,CAACC,OAAO,CAAC,CAAC;IACX44C,gBAAgB,CAACuO,qCAAqC,CAAC,CAAC,CACvDlnD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAIA,GAAG,CAACnF,IAAI,CAACinD,cAAc,KAAK,IAAI,EAAE;QAClCnrD,MAAM,CAACm+C,SAAS,GAAG90C,GAAG,CAACnF,IAAI,CAACi6C,SAAS;QACrC,IAAIn+C,MAAM,CAACm+C,SAAS,CAAC/3C,MAAM,GAAG,CAAC,EAC3BpG,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,GAAGz/C,MAAM,CAACm+C,SAAS,CAAC,CAAC,CAAC,CAAC3S,WAAW;MACvE,CAAC,MAEGxrC,MAAM,CAACm+C,SAAS,GAAG,CAAC;QAAE3S,WAAW,EAAE,GAAG;QAAE9gB,UAAU,EAAEjqB,cAAc,CAACe,SAAS,CAAC,aAAa;MAAE,CAAC,CAAC,CAACiQ,MAAM,CAACpI,GAAG,CAACnF,IAAI,CAACi6C,SAAS,CAAC;MAC7Hn+C,MAAM,CAACw3H,SAAS,CAAC,CAAC;IACtB,CAAC,CAAC,SACI,CAAC,UAAUrzH,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC,WACM,CAAC,YAAY;MACjB3D,QAAQ,CAAC,YAAY;QAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAAE,CAAC,CAAC;IACpE,CAAC,CAAC;EACN,CAAC;EAEDxE,MAAM,CAAC0I,MAAM,CAAC,YAAY,EAC1B,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IAC1B;EACJ,CAAC,CAAC;EAEFx3H,MAAM,CAAC0I,MAAM,CAAC,wBAAwB,EACtC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IAC1B;EACJ,CAAC,CAAC;EAEFx3H,MAAM,CAAC0I,MAAM,CAAC,+BAA+B,EAC7C,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IACxB,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACzB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IACxB;EACN,CAAC,CAAC;EAEFx3H,MAAM,CAAC0I,MAAM,CAAC,yBAAyB,EACvC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IAC1B;EACJ,CAAC,CAAC;EAGFx3H,MAAM,CAAC0I,MAAM,CAAC,6BAA6B,EAC3C,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IAC1B;EACJ,CAAC,CAAC;EAEFx3H,MAAM,CAACqV,SAAS,GAAG,IAAI;EACvBrV,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,UAAU2W,GAAG,EAAE;IACrC,IAAIhZ,MAAM,CAACqV,SAAS,EAAE;MAClBrV,MAAM,CAACqV,SAAS,GAAG,KAAK;IAC5B;EACJ,CAAC,CAAC;EAEFrV,MAAM,CAACw3H,SAAS,GAAG,UAAUsC,SAAS,EAAE;IACpC,IAAGA,SAAS,EAAE;MACV95H,MAAM,CAACsgH,QAAQ,GAAG,CAAC;MACnBtgH,MAAM,CAACkE,IAAI,GAAG,EAAE;IACpB;IAEA,IAAIqmD,IAAI,GAAG;MACPiwE,UAAU,EAAEx6H,MAAM,CAAC83G,UAAU;MAC7Bz6D,QAAQ,EAAEr9C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;MACvCi6E,aAAa,EAAE15H,MAAM,CAAC8qD,aAAa,CAAC4uE,aAAa,IAAI15H,MAAM,CAACu6H,oBAAoB,CAAC,CAAC,CAACD,oBAAoB;MACvGnD,eAAe,EAAEn3H,MAAM,CAAC8qD,aAAa,CAACqsE,eAAe;MACrDC,SAAS,EAAEp3H,MAAM,CAAC8qD,aAAa,CAACssE,SAAS;MACzCv2H,UAAU,EAAEb,MAAM,CAAC8qD,aAAa,CAACjqD,UAAU;MAC3C8zB,IAAI,EAAE,CAAC30B,MAAM,CAACsgH,QAAQ,GAAG,CAAC,IAAItgH,MAAM,CAACu5B,WAAW;MAChD45D,IAAI,EAAEnzF,MAAM,CAACu5B;IACjB,CAAC;IAEDz1B,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACkJ,SAAS,GAAG,IAAI;IACvBlJ,MAAM,CAAC+5H,OAAO,GAAG,EAAE;IACnB/5H,MAAM,CAAC84H,MAAM,GAAG,EAAE;IAClB94H,MAAM,CAACk3H,iBAAiB,GAAG,EAAE;IAE7B,OAAOxtG,aAAa,CAAC+wG,mBAAmB,CAAClwE,IAAI,CAAC,CAC7CvmD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBrJ,MAAM,CAACi3H,aAAa,GAAG5tH,GAAG,CAACnF,IAAI,CAACyzH,OAAO;MACvC33H,MAAM,CAACkE,IAAI,GAAGlE,MAAM,CAACkE,IAAI,CAACuN,MAAM,CAACpI,GAAG,CAACnF,IAAI,CAAC2zH,MAAM,CAAC;MACjD73H,MAAM,CAAC84H,MAAM,GAAGzvH,GAAG,CAACnF,IAAI,CAAC+1H,MAAM;MAC/Bj6H,MAAM,CAACk3H,iBAAiB,GAAG7tH,GAAG,CAACnF,IAAI,CAAC0zH,iBAAiB;MACrDx9F,QAAQ,CAAC/wB,GAAG,CAACnF,IAAI,CAACwzH,OAAO,CAAC;MAE1B,IAAI13H,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM,IAAI,CAAC,EAAE;QACpC,IAAIg7F,CAAC,GAAGphG,MAAM,CAACi3H,aAAa,CAAC7wH,MAAM;QACnC,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;UACxB,IAAIxU,MAAM,CAACi3H,aAAa,CAACziH,CAAC,CAAC,CAAC0lH,SAAS,KAAK,IAAI,EAAE;YAC5Cl6H,MAAM,CAACg5H,eAAe,CAAC3yH,IAAI,CAACrG,MAAM,CAACi3H,aAAa,CAACziH,CAAC,CAAC,CAAC;UACxD;QACJ;MACJ;MAEAxU,MAAM,CAACo4H,UAAU,CAACrzH,YAAY,CAAC,CAAC;MAEhC/E,MAAM,CAACkJ,SAAS,GAAG,KAAK;MACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SAAM,CAAC,UAAUF,GAAG,EAAE;MACpBnE,MAAM,CAACkJ,SAAS,GAAG,KAAK;MACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;;EAED;EACAnE,MAAM,CAACq4H,iBAAiB,GAAG,YAAY;IACnC,OAAO,IAAI;EACf,CAAC;EAEDr4H,MAAM,CAACo2H,WAAW,GAAG,UAAUC,SAAS,EAAEhyD,YAAY,EAAE;IACpDvgE,CAAC,CAACC,OAAO,CAAC,CAAC;IAEZ,IAAI2G,KAAK,GAAG2rH,SAAS,CAAC3iH,UAAU;IAChC,IAAI2wD,YAAY,GAAGA,YAAY,CAAC3wD,UAAU;IAE1C,IAAI4kH,MAAM,GAAG,EAAE;IACd,KAAK,IAAI9jH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MACpD8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACg5H,eAAe,CAACxkH,CAAC,CAAC,CAAChK,EAAE,CAAC;IAC7C;IAEA,KAAK,IAAIgK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACi5H,yBAAyB,CAAC7yH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MAC9D8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACi5H,yBAAyB,CAACzkH,CAAC,CAAC,CAAChK,EAAE,CAAC;IACvD;IAEA,IAAI+/C,IAAI,GAAAxC,eAAA,CAAAA,eAAA;MACJyyE,UAAU,EAAEx6H,MAAM,CAAC83G,UAAU;MAC7Bz6D,QAAQ,EAAEr9C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;MACvCi6E,aAAa,EAAE15H,MAAM,CAAC8qD,aAAa,CAAC4uE,aAAa,IAAI15H,MAAM,CAACu6H,oBAAoB,CAAC,CAAC,CAACD,oBAAoB;MACvGz5H,UAAU,EAAEb,MAAM,CAAC8qD,aAAa,CAACjqD,UAAU;MAC3C03H,UAAU,EAAED,MAAM;MAClBE,OAAO,EAAE9tH,KAAK;MACd+tH,OAAO,EAAEp0D;IAAY,cACZ35D,KAAK,cACL25D,YAAY,CACxB;IAED,OAAO36C,aAAa,CAACgxG,wBAAwB,CAACnwE,IAAI,CAAC,CAClDvmD,IAAI,CAAC,UAAUyjB,MAAM,EAAE;MACpB3jB,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC+L,WAAW,CAAC,2BAA2B,CAAC;;MAEtD;MACApM,MAAM,CAACu2H,qBAAqB,GAAG,IAAI;MACnCl2H,aAAa,CAAC8E,UAAU,CAAC,wBAAwB,CAAC;IACtD,CAAC,CAAC,SACI,CAAC,UAAUhB,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAC5E,CAAC,CAAC;EACN,CAAC;EAEDxB,MAAM,CAAC24H,YAAY,GAAG,YAAY;IAC9B70H,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAIu0H,MAAM,GAAG,EAAE;IACf,KAAK,IAAI9jH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MACpD8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACg5H,eAAe,CAACxkH,CAAC,CAAC,CAAChK,EAAE,CAAC;IAC7C;IAEA,KAAK,IAAIgK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACi5H,yBAAyB,CAAC7yH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MAC9D8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACi5H,yBAAyB,CAACzkH,CAAC,CAAC,CAAChK,EAAE,CAAC;IACvD;IAEA,IAAI+/C,IAAI,GAAG;MACPiwE,UAAU,EAAEx6H,MAAM,CAAC83G,UAAU;MAC7Bz6D,QAAQ,EAAEr9C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;MACvCi6E,aAAa,EAAE15H,MAAM,CAAC8qD,aAAa,CAAC4uE,aAAa,IAAI15H,MAAM,CAACu6H,oBAAoB,CAAC,CAAC,CAACD,oBAAoB;MACxG;MACA;MACCz5H,UAAU,EAAEb,MAAM,CAAC8qD,aAAa,CAACjqD,UAAU;MAC3C03H,UAAU,EAAED;IAChB,CAAC;IAED,OAAO5uG,aAAa,CAACixG,sBAAsB,CAACpwE,IAAI,CAAC,CAChDvmD,IAAI,CAAC,UAAUwxC,GAAG,EAAE;MACjB,IAAIt1C,aAAa,CAAC2L,QAAQ,EACtB,OAAO+qH,UAAU,CAACjgF,cAAc,CAACnB,GAAG,CAACtxC,IAAI,EAAE,qBAAqB,CAAC,CAChEF,IAAI,CAAC,UAAU8oB,IAAI,EAAE;QAClB,IAAIvhB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzB1H,CAAC,CAACO,SAAS,CAAC,CAAC;QAEbhE,aAAa,CAACowE,cAAc,CAAC;UACzBr8D,KAAK,EAAE,EAAE;UACTqiC,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,wBAAwB,GAACsrB,IAAI;QAChE,CAAC,EAAE,YAAY;UACXvhB,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAC1B,CAAC,CAAC;QAGF,OAAOF,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC,CAAC,KAEH,OAAOkrH,UAAU,CAAC9gF,WAAW,CAACN,GAAG,CAACtxC,IAAI,EAAE,qBAAqB,CAAC;IACtE,CAAC,CAAC,CACDF,IAAI,CAAC,YAAY;MACdF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACI,CAAC,UAAUF,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EAEN,CAAC;AAEL,CAAC,CACJ,CAAC,C;;;;;;;;;;;AChZFrE,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,oCAAoC,EACrE,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAC1G,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAC,YAAY,EAAE,WAAW,EAC1I,UAAUC,MAAM,EAAEC,UAAU,EAAEM,SAAS,EAAEipB,YAAY,EAAEhpB,QAAQ,EAAEL,YAAY,EAAED,aAAa,EAAE0pB,SAAS,EACnGvpB,aAAa,EAAEqpB,aAAa,EAAEizB,gBAAgB,EAAEl8C,cAAc,EAAEoX,YAAY,EAAElX,EAAE,EAAEi0H,YAAY,EAAEgC,UAAU,EAAE17F,SAAS,EAAE;EAEvHj7B,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE1pB,SAAS,CAACoyC;EAAgC,CAAC,CAAC,CAAC,CAAC;;EAEzG,IAAI,CAACnpB,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;EACJ;EAEApqB,MAAM,CAACi/D,SAAS,GAAG,KAAK;EACxBj/D,MAAM,CAACkE,IAAI,GAAG,EAAE;EAChBlE,MAAM,CAAC+5H,OAAO,GAAG,EAAE;EACnB/5H,MAAM,CAAC46H,OAAO,GAAG,EAAE;EACnB56H,MAAM,CAAC+4H,OAAO,GAAG,EAAE;EACnB/4H,MAAM,CAAC60H,UAAU,GAAG,EAAE;EACtB70H,MAAM,CAAC66H,KAAK,GAAG,EAAE;EACjB76H,MAAM,CAACmB,IAAI,GAAG,EAAE;EAChBnB,MAAM,CAACsY,UAAU,GAAGjY,aAAa,CAACkY,6BAA6B,CAAC,CAAC;EAEjEvY,MAAM,CAACgrD,UAAU,GAAG1rD,kBAAkB,CAACw3C,QAAQ,IAAI,KAAK;EAExD92C,MAAM,CAACuuG,yBAAyB,GAAG,IAAI;EACvCvuG,MAAM,CAAC80H,2BAA2B,GAAG,IAAI;EACzC90H,MAAM,CAAC86H,uBAAuB,GAAG,IAAI;EAErC96H,MAAM,CAAC8qD,aAAa,GAAG;IACnBxB,QAAQ,EAAEjpD,aAAa,CAAC0qD,gBAAgB,CAAC,IAAItvB,IAAI,CAAC,CAAC,CAAC;IACpD4tB,MAAM,EAAEhpD,aAAa,CAAC0qD,gBAAgB,CAAC,IAAItvB,IAAI,CAAC,CAAC,CAAC;IAClDo5F,UAAU,EAAE,EAAE;IACdp1E,QAAQ,EAAE,GAAG;IACblvB,UAAU,EAAE,GAAG;IACf2B,MAAM,EAAE;EACZ,CAAC;EACDlyB,MAAM,CAAC+6H,IAAI,GAAG;IACVC,iBAAiB,EAAE,GAAG;IACtBC,SAAS,EAAE,EAAE;IACbC,iBAAiB,EAAE,KAAK;IACxBC,eAAe,EAAE,KAAK;IACtBC,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,EAAE;IACdC,aAAa,EAAC,EAAE;IACjB;IACCC,UAAU,EAAE,EACX;IACDC,aAAa,EAAE,SAAfA,aAAaA,CAAWC,OAAO,EAAE;MAC7Bz7H,MAAM,CAACy7H,OAAO,GAAGA,OAAO;IAC5B,CAAC;IACDC,cAAc,EAAE,SAASC,WAAWA,CAACC,cAAc,EAAEC,aAAa,EAAE;MAChED,cAAc,CAAC5nE,EAAE,CAAC,QAAQ,EAAE,SAAS8nE,mBAAmBA,CAACx5H,KAAK,EAAE;QAC5DwB,CAAC,CAAC,MAAM,CAAC,CAACuN,IAAI,CAAC,UAAU,CAAC,CAACmpD,MAAM,CAAC,CAAC;QACnCqhE,aAAa,CAACv5H,KAAK,CAAC;MACxB,CAAC,CAAC;IACN;EACJ,CAAC;EAEDtC,MAAM,CAAC+7H,QAAQ,GAAG,EAAE;EAEpB/7H,MAAM,CAAC+7C,SAAS,GAAG,UAAU7hC,GAAG,EAAE1F,CAAC,EAAE;IAEjC0F,GAAG,CAACm6D,QAAQ,GAAG,IAAI;IACnBvwE,CAAC,CAACC,OAAO,CAAC;MAACi4H,MAAM,EAAE;IAAC,CAAC,CAAC;IAEtBx7H,QAAQ,CAAC,YAAW;MAChBR,MAAM,CAAC+7H,QAAQ,GAAG/7H,MAAM,CAACkE,IAAI,CAACsQ,CAAC,CAAC,CAAC2qC,OAAO;MACxCn/C,MAAM,CAACi8H,YAAY,GAAGj8H,MAAM,CAACkE,IAAI,CAACsQ,CAAC,CAAC;MACpCxU,MAAM,CAAC+6H,IAAI,CAAC72H,IAAI,GAAGlE,MAAM,CAACkE,IAAI,CAACsQ,CAAC,CAAC,CAAC2qC,OAAO;MACzC;MACAn/C,MAAM,CAACi/D,SAAS,GAAG,IAAI;MACvB,IAAI3nB,OAAO,GAAGxzC,CAAC,CAAC,eAAe,CAAC;MAChC,IAAIwzC,OAAO,EAAE;QACTj3C,aAAa,CAAC8E,UAAU,CAACmyC,OAAO,EAAE,YAAW;UACzCxzC,CAAC,CAACO,SAAS,CAAC,CAAC;QACjB,CAAC,EACD,YAAW;UACP62B,SAAS,CAAC,YAAW;YACjBl7B,MAAM,CAACy7H,OAAO,CAACS,IAAI,CAACC,kBAAkB,CAAC,CAAC;YACxCr4H,CAAC,CAAC,mBAAmB,CAAC,CAAC0zC,GAAG,CAAC,CAAC,CAAC,CAAC0vC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;UAChD,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACd,CAAC,EACD,YAAW;UACPlnF,MAAM,CAACi/D,SAAS,GAAG,KAAK;UACxBj/D,MAAM,CAACkE,IAAI,CAACwI,OAAO,CAAC,UAAS1G,CAAC,EAAE;YAC5BA,CAAC,CAACquE,QAAQ,GAAG,KAAK;UACtB,CAAC,CAAC;UACFvwE,CAAC,CAACO,SAAS,CAAC,CAAC;QACjB,CAAC,CAAC;MACN,CAAC,MAAM;QACHW,OAAO,CAACC,GAAG,CAAC,mBAAmB,CAAC;MACpC;IACJ,CAAC,EAAE,GAAG,CAAC;EACX,CAAC;EAEDjF,MAAM,CAAC2iH,MAAM,GAAG,YAAY;IACxB,IAAIrrE,OAAO,GAAGxzC,CAAC,CAAC,eAAe,CAAC;IAChCA,CAAC,CAACC,OAAO,CAAC,CAAC;IACX1D,aAAa,CAAC+L,WAAW,CAACkrC,OAAO,CAAC;EACtC,CAAC;EAEDt3C,MAAM,CAACo8H,eAAe,GAAG,YAAY;IAClCt4H,CAAC,CAACO,SAAS,CAAC,CAAC;EAChB,CAAC;EAED7D,QAAQ,CAAC,YAAY;IACjBR,MAAM,CAACmB,IAAI,GAAG,QAAQ;IACtB+D,WAAW,CAAC,CAAC;EACjB,CAAC,CAAC;EAGFlF,MAAM,CAACwsF,KAAK,GAAG,YAAY;IACvBxsF,MAAM,CAACuuG,yBAAyB,GAAG,KAAK;IACxCvuG,MAAM,CAAC80H,2BAA2B,GAAG,KAAK;IAC1C90H,MAAM,CAAC86H,uBAAuB,GAAG,KAAK;IACtC96H,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,GAAG,GAAG;IACnCz/C,MAAM,CAAC8qD,aAAa,CAAC54B,MAAM,GAAG,GAAG;IACjClyB,MAAM,CAAC8qD,aAAa,CAACv6B,UAAU,GAAG,GAAG;IACrCvwB,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,GAAGjpD,aAAa,CAAC0qD,gBAAgB,CAAC,IAAItvB,IAAI,CAAC,CAAC,CAAC;IAC1Ez7B,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,GAAGhpD,aAAa,CAAC0qD,gBAAgB,CAAC,IAAItvB,IAAI,CAAC,CAAC,CAAC;IAExEj7B,QAAQ,CAAC,YAAY;MACjBA,QAAQ,CAAC,YAAY;QAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAAE,CAAC,CAAC;IAEpE,CAAC,CAAC;IAEFxE,MAAM,CAACw3H,SAAS,CAAC,CAAC;EACtB,CAAC;EAGDx3H,MAAM,CAACksD,oBAAoB,GAAG,UAAShiD,IAAI,EAAEiiD,EAAE,EAAC;IAC5CnsD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,GAAGp/C,IAAI;IACpClK,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,GAAG8C,EAAE;IAEhCnsD,MAAM,CAACw3H,SAAS,CAAC,CAAC;EACtB,CAAC;EAGDx3H,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB/nB,CAAC,CAACC,OAAO,CAAC,CAAC;IACX44C,gBAAgB,CAACuO,qCAAqC,CAAC,CAAC,CACvDlnD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBrJ,MAAM,CAACm+C,SAAS,GAAG90C,GAAG,CAACnF,IAAI,CAACi6C,SAAS;MAErC,IAAI90C,GAAG,CAACnF,IAAI,CAACinD,cAAc,KAAK,IAAI,EAAE;QAClC,IAAInrD,MAAM,CAACm+C,SAAS,CAAC/3C,MAAM,GAAG,CAAC,EAC3BpG,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,GAAGz/C,MAAM,CAACm+C,SAAS,CAAC,CAAC,CAAC,CAAC3S,WAAW;MACvE,CAAC,MACI;QACD,IAAIxrC,MAAM,CAACm+C,SAAS,CAAC/3C,MAAM,KAAK,CAAC,EAC7BpG,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,GAAGz/C,MAAM,CAACm+C,SAAS,CAAC,CAAC,CAAC,CAAC3S,WAAW;MACvE;MAEAxrC,MAAM,CAAC60H,UAAU,GAAGxrH,GAAG,CAACnF,IAAI,CAAC2wH,UAAU;MACvC70H,MAAM,CAAC8qD,aAAa,CAAC+pE,UAAU,GAAGxrH,GAAG,CAACnF,IAAI,CAAC2wH,UAAU;MAErD,OAAOnrG,aAAa,CAAC2yG,sBAAsB,CAAC,CAAC;IACjD,CAAC,CAAC,CACDr4H,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBrJ,MAAM,CAAC66H,KAAK,GAAGxxH,GAAG,CAACnF,IAAI,CAAC22H,KAAK;;MAE7B;MACA;MACA/2H,CAAC,CAACO,SAAS,CAAC,CAAC;MAEbrE,MAAM,CAACw3H,SAAS,CAAC,CAAC;IAEtB,CAAC,CAAC,SACI,CAAC,UAAUrzH,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC,WACM,CAAC,YAAY;MACjB3D,QAAQ,CAAC,YAAY;QAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAAE,CAAC,CAAC;IACpE,CAAC,CAAC;EACN,CAAC;EAEDxE,MAAM,CAAC0I,MAAM,CAAC,wBAAwB,EACpC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAE5B5I,MAAM,CAACm1H,qBAAqB,CAACxsH,QAAQ,CAAC;IAItC,IAAG3I,MAAM,CAACuuG,yBAAyB,EAC/BvuG,MAAM,CAACw3H,SAAS,CAAC,CAAC;IAEtBx3H,MAAM,CAACuuG,yBAAyB,GAAG,IAAI;EACzC,CAAC,CAAC;EAEFvuG,MAAM,CAAC0I,MAAM,CAAC,0BAA0B,EACxC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAE5B,IAAG5I,MAAM,CAAC80H,2BAA2B,EACnC90H,MAAM,CAACw3H,SAAS,CAAC,CAAC;IAEpBx3H,MAAM,CAAC80H,2BAA2B,GAAG,IAAI;EAE3C,CAAC,CAAC;EAEF90H,MAAM,CAAC0I,MAAM,CAAC,sBAAsB,EACpC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAE5B,IAAG5I,MAAM,CAAC86H,uBAAuB,EAC/B96H,MAAM,CAACw3H,SAAS,CAAC,CAAC;IAEpBx3H,MAAM,CAAC86H,uBAAuB,GAAG,IAAI;EAEvC,CAAC,CAAC;EAGJ96H,MAAM,CAACm1H,qBAAqB,GAAG,UAAU11E,QAAQ,EAAE;IAC/Cz/C,MAAM,CAAC8qD,aAAa,CAACv6B,UAAU,GAAG,GAAG;IACrC/vB,QAAQ,CAAC,YAAY;MACjBR,MAAM,CAAC80H,2BAA2B,GAAG,KAAK;MAE1C90H,MAAM,CAAC8qD,aAAa,CAAC+pE,UAAU,GAAG,EAAE,CAACpjH,MAAM,CAACzR,MAAM,CAAC60H,UAAU,CAAC9uH,MAAM,CAAC,UAAU2O,CAAC,EAAE;QAC1E,OAAOA,CAAC,CAAC82B,WAAW,IAAIiU,QAAQ;MACpC,CAAC,CAAC,CAAC;MAEP,IAAGA,QAAQ,IAAI,IAAI,IAAIA,QAAQ,IAAI,GAAG,EAClCz/C,MAAM,CAAC8qD,aAAa,CAAC+pE,UAAU,GAAG70H,MAAM,CAAC60H,UAAU;MAGvDr0H,QAAQ,CAAC,YAAY;QACjBsD,CAAC,CAAC,yCAAyC,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MACnE,CAAC,EAAE,EAAE,CAAC;IACV,CAAC,CAAC;EAEN,CAAC;EAEDxE,MAAM,CAACqV,SAAS,GAAG,IAAI;EACvBrV,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,UAAU2W,GAAG,EAAE;IAErC,IAAIhZ,MAAM,CAACqV,SAAS,EAAE;MAClBrV,MAAM,CAACqV,SAAS,GAAG,KAAK;MACxB;;MAEA7U,QAAQ,CAAC,YAAY;QACjBA,QAAQ,CAAC,YAAY;UAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;QAAE,CAAC,CAAC;MACpE,CAAC,CAAC;IACN;EACJ,CAAC,CAAC;EAEFxE,MAAM,CAACs8H,WAAW,GAAG,YAAY;IAC7B,OAAO,IAAI;EACf,CAAC;EAEDt8H,MAAM,CAACw3H,SAAS,GAAG,YAAY;IAC3B,IAAIjtE,IAAI,GAAG;MACPgyE,SAAS,EAAEl8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,CAAC;MACrFkzE,OAAO,EAAEn8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACzB,MAAM;IACpF,CAAC;IAED,IAAIkB,IAAI,CAACgyE,SAAS,GAAGhyE,IAAI,CAACiyE,OAAO,EAAE;MAC/Br8H,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,gEAAgE,CAAC,CAAC;MAClH;IACJ;IAEA,IAAI,CAACxB,MAAM,CAAC8qD,aAAa,CAAC54B,MAAM,IAAIlyB,MAAM,CAAC8qD,aAAa,CAAC54B,MAAM,IAAI,GAAG,EAClEq4B,IAAI,CAACzzB,QAAQ,GAAG,IAAI,CAAC,KAErByzB,IAAI,CAACzzB,QAAQ,GAAG92B,MAAM,CAAC66H,KAAK,CAAC90H,MAAM,CAAC,UAAU02H,CAAC,EAAE;MAAE,OAAOA,CAAC,CAAC7N,MAAM,IAAI5uH,MAAM,CAAC8qD,aAAa,CAAC54B,MAAM;IAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC4E,QAAQ;IAErH,IAAI,CAAC92B,MAAM,CAAC8qD,aAAa,CAACv6B,UAAU,IAAIvwB,MAAM,CAAC8qD,aAAa,CAACv6B,UAAU,IAAI,GAAG,EAC1Eg6B,IAAI,CAAC35B,UAAU,GAAG,IAAI,CAAC,KAEvB25B,IAAI,CAAC35B,UAAU,GAAG5wB,MAAM,CAAC8qD,aAAa,CAACv6B,UAAU;IAErD,IAAI,CAACvwB,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,IAAIz/C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,IAAI,GAAG,EACtE8K,IAAI,CAAC/e,WAAW,GAAG,IAAI,CAAC,KAExB+e,IAAI,CAAC/e,WAAW,GAAGxrC,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;IAEpD37C,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACkE,IAAI,GAAG,EAAE;IAChBlE,MAAM,CAAC+5H,OAAO,GAAG,EAAE;IAEnB,OAAOrwG,aAAa,CAACgzG,sBAAsB,CAACnyE,IAAI,CAAC,CAChDvmD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBrJ,MAAM,CAACkE,IAAI,GAAGmF,GAAG,CAACnF,IAAI,CAAC2zH,MAAM;MAE7B/3H,OAAO,CAAC4M,OAAO,CAACrD,GAAG,CAACnF,IAAI,CAACy4H,KAAK,EAAE,UAAU/8H,EAAE,EAAE;QAC1C,IAAGI,MAAM,CAAC+5H,OAAO,CAAC1qH,OAAO,CAAChP,aAAa,CAACkyE,uBAAuB,CAAC3yE,EAAE,CAAC,CAAC,GAAG,CAAC,EACpEI,MAAM,CAAC+5H,OAAO,CAAC1zH,IAAI,CAAChG,aAAa,CAACkyE,uBAAuB,CAAC3yE,EAAE,CAAC,CAAC;MACtE,CAAC,CAAC;MAEFI,MAAM,CAACo4H,UAAU,CAACrzH,YAAY,CAAC,CAAC;MAEhC/E,MAAM,CAAC48H,UAAU,CAAC,CAAC;MAEnB94H,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACI,CAAC,UAAUF,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAED,IAAI04H,iBAAiB,GAAG,QAAQ,GAChC,qCAAqC,GACrC,2BAA2B,GAC3B,6DAA6D;EAC7D;EACA,QAAQ;EAER,IAAIC,mBAAmB,GAAG,QAAQ,GAClC,qCAAqC,GACrC,iIAAiI,GACjI,uBAAuB,GACvB,QAAQ;EAER98H,MAAM,CAAC48H,UAAU,GAAG,YAAY;IAC5B,IAAIxhH,GAAG,GAAG,IAAInR,KAAK,CAAC,CAAC,GAAGjK,MAAM,CAAC+5H,OAAO,CAAC3zH,MAAM,CAAC;IAC9CgV,GAAG,CAAC/U,IAAI,CACJ;MAACuD,IAAI,EAAE,cAAc;MAAE8G,KAAK,EAAE,aAAa;MAAEqsH,WAAW,EAAE,IAAI;MAAEC,YAAY,EAAEF,mBAAmB;MAAE1B,aAAa,EAAE,KAAK;MAAE6B,SAAS,EAAE,aAAa;MAAEC,eAAe,EAAE,oBAAoB;MAACC,QAAQ,EAAE;IAAG,CAAC,EACvM;MAACvzH,IAAI,EAAE,UAAU;MAAE8G,KAAK,EAAE,UAAU;MAAGqsH,WAAW,EAAE,IAAI;MAAEC,YAAY,EAAEF,mBAAmB;MAAE1B,aAAa,EAAE,KAAK;MAAE6B,SAAS,EAAE,aAAa;MAAEC,eAAe,EAAE,oBAAoB;MAAEC,QAAQ,EAAE;IAAG,CAAC,EAClM;MAACvzH,IAAI,EAAE,iBAAiB;MAAE8G,KAAK,EAAE,OAAO;MAAE0qH,aAAa,EAAE,KAAK;MAAE6B,SAAS,EAAE,aAAa;MAAEC,eAAe,EAAE,oBAAoB;MAAEC,QAAQ,EAAE;IAAI,CACnJ,CAAC;IACDn9H,MAAM,CAAC+5H,OAAO,CAACrtH,OAAO,CAAC,UAAS1G,CAAC,EAACwO,CAAC,EAAC;MAChC4G,GAAG,CAAC/U,IAAI,CAAC;QAACqK,KAAK,EAAE,SAAS,GAAC8D,CAAC,GAAE,GAAG;QAAE5K,IAAI,EAAE5D,CAAC;QAAEg3H,YAAY,EAAEH,iBAAiB;QAAEzB,aAAa,EAAE,KAAK;QAAE6B,SAAS,EAAE,aAAa;QAAEC,eAAe,EAAE;MAAsB,CAAC,CAAC;IAC1K,CAAC,CAAC;IAEFl9H,MAAM,CAAC+6H,IAAI,CAACQ,UAAU,GAAGngH,GAAG;IAC5Bpb,MAAM,CAAC+6H,IAAI,CAAC72H,IAAI,GAAG,iBAAiB;EAExC,CAAC;;EAED;EACAlE,MAAM,CAACq4H,iBAAiB,GAAG,YAAY;IACnC,OAAO,IAAI;EACf,CAAC;EAEDr4H,MAAM,CAACo2H,WAAW,GAAG,UAAUC,SAAS,EAAEhyD,YAAY,EAAE;IACpDvgE,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAIwmD,IAAI,GAAG;MACPgyE,SAAS,EAAEl8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,CAAC;MACrFkzE,OAAO,EAAEn8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACzB,MAAM;IACpF,CAAC;IAED,IAAIkB,IAAI,CAACgyE,SAAS,GAAGhyE,IAAI,CAACiyE,OAAO,EAAE;MAC/Br8H,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,gEAAgE,CAAC,CAAC;MAClH;IACJ;IAEA,IAAI,CAACxB,MAAM,CAAC8qD,aAAa,CAAC54B,MAAM,IAAIlyB,MAAM,CAAC8qD,aAAa,CAAC54B,MAAM,IAAI,GAAG,EAClEq4B,IAAI,CAACzzB,QAAQ,GAAG,IAAI,CAAC,KAErByzB,IAAI,CAACzzB,QAAQ,GAAG92B,MAAM,CAAC66H,KAAK,CAAC90H,MAAM,CAAC,UAAU02H,CAAC,EAAE;MAAE,OAAOA,CAAC,CAAC7N,MAAM,IAAI5uH,MAAM,CAAC8qD,aAAa,CAAC54B,MAAM;IAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC4E,QAAQ;IAErH,IAAI,CAAC92B,MAAM,CAAC8qD,aAAa,CAACv6B,UAAU,IAAIvwB,MAAM,CAAC8qD,aAAa,CAACv6B,UAAU,IAAI,GAAG,EAC1Eg6B,IAAI,CAAC35B,UAAU,GAAG,IAAI,CAAC,KAEvB25B,IAAI,CAAC35B,UAAU,GAAG5wB,MAAM,CAAC8qD,aAAa,CAACv6B,UAAU;IAErD,IAAI,CAACvwB,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,IAAIz/C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,IAAI,GAAG,EACtE8K,IAAI,CAAC/e,WAAW,GAAG,IAAI,CAAC,KAExB+e,IAAI,CAAC/e,WAAW,GAAGxrC,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;IAIrD,IAAI/0C,KAAK,GAAG2rH,SAAS,CAAC3iH,UAAU;IAChC,IAAI0pH,SAAS,GAAG/4D,YAAY,CAAC3wD,UAAU;IAEvC62C,IAAI,CAACiuE,OAAO,GAAG9tH,KAAK;IACpB6/C,IAAI,CAACkuE,OAAO,GAAG2E,SAAS;IAEvB,OAAO1zG,aAAa,CAAC2zG,iCAAiC,CAAC9yE,IAAI,CAAC,CAC3DvmD,IAAI,CAAC,UAAUyjB,MAAM,EAAE;MACpB3jB,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC+L,WAAW,CAAC,2BAA2B,CAAC;;MAEtD;MACApM,MAAM,CAACu2H,qBAAqB,GAAG,IAAI;MACnCl2H,aAAa,CAAC8E,UAAU,CAAC,wBAAwB,CAAC;IACtD,CAAC,CAAC,SACI,CAAC,UAAUhB,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAC5E,CAAC,CAAC;EACN,CAAC;EAGDxB,MAAM,CAAC24H,YAAY,GAAG,YAAY;IAC9B70H,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAIwmD,IAAI,GAAG;MACPgyE,SAAS,EAAEl8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,CAAC;MACrFkzE,OAAO,EAAEn8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACzB,MAAM;IACpF,CAAC;IAED,IAAIkB,IAAI,CAACgyE,SAAS,GAAGhyE,IAAI,CAACiyE,OAAO,EAAE;MAC/Br8H,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,gEAAgE,CAAC,CAAC;MAClH;IACJ;IAEA,IAAI,CAACxB,MAAM,CAAC8qD,aAAa,CAAC54B,MAAM,IAAIlyB,MAAM,CAAC8qD,aAAa,CAAC54B,MAAM,IAAI,GAAG,EAClEq4B,IAAI,CAACzzB,QAAQ,GAAG,IAAI,CAAC,KAErByzB,IAAI,CAACzzB,QAAQ,GAAG92B,MAAM,CAAC66H,KAAK,CAAC90H,MAAM,CAAC,UAAU02H,CAAC,EAAE;MAAE,OAAOA,CAAC,CAAC7N,MAAM,IAAI5uH,MAAM,CAAC8qD,aAAa,CAAC54B,MAAM;IAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC4E,QAAQ;IAErH,IAAI,CAAC92B,MAAM,CAAC8qD,aAAa,CAACv6B,UAAU,IAAIvwB,MAAM,CAAC8qD,aAAa,CAACv6B,UAAU,IAAI,GAAG,EAC1Eg6B,IAAI,CAAC35B,UAAU,GAAG,IAAI,CAAC,KAEvB25B,IAAI,CAAC35B,UAAU,GAAG5wB,MAAM,CAAC8qD,aAAa,CAACv6B,UAAU;IAErD,IAAI,CAACvwB,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,IAAIz/C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,IAAI,GAAG,EACtE8K,IAAI,CAAC/e,WAAW,GAAG,IAAI,CAAC,KAExB+e,IAAI,CAAC/e,WAAW,GAAGxrC,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;IAEpD,OAAO/1B,aAAa,CAAC4zG,+BAA+B,CAAC/yE,IAAI,CAAC,CACzDvmD,IAAI,CAAC,UAAUwxC,GAAG,EAAE;MACjB,IAAIt1C,aAAa,CAAC2L,QAAQ,EACtB,OAAO+qH,UAAU,CAACjgF,cAAc,CAACnB,GAAG,CAACtxC,IAAI,EAAE,8BAA8B,CAAC,CACzEF,IAAI,CAAC,UAAU8oB,IAAI,EAAE;QAClB,IAAIvhB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzB1H,CAAC,CAACO,SAAS,CAAC,CAAC;QAEbhE,aAAa,CAACowE,cAAc,CAAC;UACzBr8D,KAAK,EAAE,EAAE;UACTqiC,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,wBAAwB,GAACsrB,IAAI;QAChE,CAAC,EAAE,YAAY;UACXvhB,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAC1B,CAAC,CAAC;QAGF,OAAOF,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC,CAAC,KAEH,OAAOkrH,UAAU,CAAC9gF,WAAW,CAACN,GAAG,CAACtxC,IAAI,EAAE,8BAA8B,CAAC;IAC/E,CAAC,CAAC,CACDF,IAAI,CAAC,YAAY;MACdF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACI,CAAC,UAAUF,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EAEN,CAAC;AAEL,CAAC,CAEA,CAAC,C;;;;;;;;;;AC/bNrE,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,oCAAoC,EACrE,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAC1G,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAC,YAAY,EAC7H,UAAUC,MAAM,EAAEC,UAAU,EAAEM,SAAS,EAAEipB,YAAY,EAAEhpB,QAAQ,EAAEL,YAAY,EAAED,aAAa,EAAE0pB,SAAS,EACnGvpB,aAAa,EAAEqpB,aAAa,EAAEizB,gBAAgB,EAAEl8C,cAAc,EAAEoX,YAAY,EAAElX,EAAE,EAAEi0H,YAAY,EAAEgC,UAAU,EAAE;EAE5G32H,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE1pB,SAAS,CAACqyC;EAAgC,CAAC,CAAC,CAAC,CAAC;;EAEzG,IAAI,CAACppB,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;EACJ;EAEApqB,MAAM,CAAC64H,UAAU,GAAG,oDAAoD;EAExE74H,MAAM,CAACmB,IAAI,GAAG,EAAE;EAChBnB,MAAM,CAACkE,IAAI,GAAG,EAAE;EAChBlE,MAAM,CAAC+4H,OAAO,GAAG,EAAE;EACnB/4H,MAAM,CAACi3H,aAAa,GAAG,EAAE;EACzBj3H,MAAM,CAACg5H,eAAe,GAAG,EAAE;EAC3Bh5H,MAAM,CAACk3H,iBAAiB,GAAG,EAAE;EAC7Bl3H,MAAM,CAACi5H,yBAAyB,GAAG,EAAE;EACrCj5H,MAAM,CAACsgH,QAAQ,GAAG,CAAC;EACnBtgH,MAAM,CAACugH,eAAe;EACtBvgH,MAAM,CAACu5B,WAAW,GAAG,GAAG;EACxBv5B,MAAM,CAACkJ,SAAS,GAAG,KAAK;EAExBlJ,MAAM,CAACgrD,UAAU,GAAG1rD,kBAAkB,CAACw3C,QAAQ,IAAI,KAAK;EAExD92C,MAAM,CAACk5H,cAAc,GAAG,YAAU;IAC9B74H,aAAa,CAAC8E,UAAU,CAACrB,CAAC,CAAC,+BAA+B,CAAC,EAAE,YAAU,CAAE,CAAC,CAAC;EAC/E,CAAC;EAED9D,MAAM,CAACm5H,eAAe,GAAG,YAAU;IAC/B94H,aAAa,CAAC+L,WAAW,CAACtI,CAAC,CAAC,+BAA+B,CAAC,CAAC;EACjE,CAAC;EAED9D,MAAM,CAACo5H,YAAY,GAAG,UAASh+G,GAAG,EAAEs6B,GAAG,EAAE;IACrC,IAAIhgB,KAAK,GAAG,KAAK;IACb,IAAI0rE,CAAC,GAAGhmF,GAAG,CAAChV,MAAM;IAClB,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;MACxB,IAAI4G,GAAG,CAAC5G,CAAC,CAAC,CAAChK,EAAE,IAAIkrC,GAAG,CAAClrC,EAAE,EAAE;QACrBkrB,KAAK,GAAG,IAAI;QACZta,GAAG,CAAC9L,MAAM,CAACkF,CAAC,EAAE,CAAC,CAAC;QAChB;MACJ;IACJ;IACJ,IAAI,CAACkhB,KAAK,EAAE;MACRta,GAAG,CAAC/U,IAAI,CAACqvC,GAAG,CAAC;IACjB;EACJ,CAAC;EAED11C,MAAM,CAACu9H,KAAK,GAAG,UAASniH,GAAG,EAAEiY,IAAI,EAAE;IAC/B,IAAImqG,MAAM,GAAG,EAAE;IACf,KAAK,IAAIhpH,CAAC,GAAC,CAAC,EAAEA,CAAC,GAAC4G,GAAG,CAAChV,MAAM,EAAEoO,CAAC,IAAE6e,IAAI,EAAE;MACnCmqG,MAAM,CAACn3H,IAAI,CAAC+U,GAAG,CAAC1R,KAAK,CAAC8K,CAAC,EAAEA,CAAC,GAAC6e,IAAI,CAAC,CAAC;IACnC;IACA,OAAOmqG,MAAM;EACf,CAAC;EAEHx9H,MAAM,CAACy9H,kBAAkB,GAAGz9H,MAAM,CAACu9H,KAAK,CAACv9H,MAAM,CAACi3H,aAAa,EAAE,CAAC,CAAC;EAEjEj3H,MAAM,CAACq5H,gBAAgB,GAAG,UAAUj+G,GAAG,EAAE1G,CAAC,EAAG;IACrC,IAAIghB,KAAK,GAAG,KAAK;IACjB,IAAI0rE,CAAC,GAAGhmF,GAAG,CAAChV,MAAM;IAClB,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;MACxB,IAAI4G,GAAG,CAAC5G,CAAC,CAAC,CAAChK,EAAE,IAAIkK,CAAC,CAAClK,EAAE,EAAE;QACnBkrB,KAAK,GAAG,IAAI;QACZ;MACJ;IACJ;IACF,OAAOA,KAAK;EAChB,CAAC;EAEH11B,MAAM,CAACs5H,YAAY,GAAG,UAAU5kH,CAAC,EAAG;IAChC,OAAO,UAAUA,CAAC,EAAG;MACjB,IAAIghB,KAAK,GAAG,KAAK;MACjB,IAAI0rE,CAAC,GAAGphG,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM;MACrC,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;QACxB,IAAIxU,MAAM,CAACg5H,eAAe,CAACxkH,CAAC,CAAC,CAAChK,EAAE,IAAIkK,CAAC,CAAC6kH,QAAQ,EAAE;UAC5C7jG,KAAK,GAAG,IAAI;UACZ;QACJ;MACJ;MACF,OAAOA,KAAK;IACd,CAAC;EACH,CAAC;EAED11B,MAAM,CAACw5H,sBAAsB,GAAG,UAAU9kH,CAAC,EAAG;IAC5C,OAAO,UAAUA,CAAC,EAAG;MACjB,IAAIghB,KAAK,GAAG,KAAK;MACjB,IAAI0rE,CAAC,GAAGphG,MAAM,CAACi5H,yBAAyB,CAAC7yH,MAAM;MAC/C,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;QACxB,IAAIxU,MAAM,CAACi5H,yBAAyB,CAACzkH,CAAC,CAAC,CAAChK,EAAE,IAAIkK,CAAC,CAAC6kH,QAAQ,EAAE;UACtD7jG,KAAK,GAAG,IAAI;UACZ;QACJ;MACJ;MACF,OAAOA,KAAK;IACd,CAAC;EACH,CAAC;EAED11B,MAAM,CAACy5H,kBAAkB,GAAG,UAAU/kH,CAAC,EAAG;IACxC,OAAO,UAAUA,CAAC,EAAG;MACjB,IAAIghB,KAAK,GAAG,KAAK;MACjB,IAAI0rE,CAAC,GAAGphG,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM;MACrC,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;QACxB,IAAIxU,MAAM,CAACg5H,eAAe,CAACxkH,CAAC,CAAC,CAAChK,EAAE,IAAIkK,CAAC,CAAClK,EAAE,EAAE;UACtCkrB,KAAK,GAAG,IAAI;UACZ;QACJ;MACJ;MACF,OAAOA,KAAK;IACd,CAAC;EACH,CAAC;EAGH11B,MAAM,CAACu6H,oBAAoB,GAAG,YAAW;IACrC,IAAIn5B,CAAC,GAAGphG,MAAM,CAACq6H,WAAW,CAACj0H,MAAM;IACjC,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;MACxB,IAAIxU,MAAM,CAACq6H,WAAW,CAAC7lH,CAAC,CAAC,CAACtR,IAAI,KAAKlD,MAAM,CAAC83G,UAAU,EAAE;QAClD,OAAO93G,MAAM,CAACq6H,WAAW,CAAC7lH,CAAC,CAAC;MAChC;IACJ;EACJ,CAAC;EAED,IAAMslB,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAA,EAAc;IACzC,IAAI,CAAC95B,MAAM,CAACkJ,SAAS,IAAIlJ,MAAM,CAACsgH,QAAQ,GAAGtgH,MAAM,CAACs5B,UAAU,EAAE;MAC1Dt5B,MAAM,CAAC0iH,UAAU,CAAC1iH,MAAM,CAACsgH,QAAQ,GAAG,CAAC,CAAC;IAC1C;EACJ,CAAC;EAEDjmF,iBAAiB,CAACP,yBAAyB,CAAC;EAE5C95B,MAAM,CAACksD,oBAAoB,GAAG,UAAShiD,IAAI,EAAEiiD,EAAE,EAAC;IAC5CnsD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,GAAGp/C,IAAI;IACpClK,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,GAAG8C,EAAE;IAChCnsD,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;EAC1B,CAAC;EAED,SAASp9F,QAAQA,CAAClO,KAAK,EAAE;IACrB,IAAIqO,IAAI,GAAGv6B,MAAM,CAACu5B,WAAW;IAC7Bv5B,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAC3Cv6B,MAAM,CAACw5B,YAAY,GAAGtN,KAAK;IAC3B,IAAIlsB,MAAM,CAACs5B,UAAU,KAAK,CAAC,EAAE;MACzBt5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;IACzB;EACJ;EAAC;EAEDt5B,MAAM,CAAC0iH,UAAU,GAAG,UAAUtnF,IAAI,EAAE;IAChCp7B,MAAM,CAACsgH,QAAQ,GAAGllF,IAAI;IACtBp7B,MAAM,CAACw3H,SAAS,CAAC,KAAK,CAAC;EAC3B,CAAC;EAEDx3H,MAAM,CAACsY,UAAU,GAAGjY,aAAa,CAACkY,6BAA6B,CAAC,CAAC;EAEjEvY,MAAM,CAAC8qD,aAAa,GAAG;IACnBrL,QAAQ,EAAE,GAAG;IACb6J,QAAQ,EAAE,IAAI;IACdD,MAAM,EAAE,IAAI;IACZqwE,aAAa,EAAE,KAAK;IACpBvC,eAAe,EAAE,CAAC;IAClBC,SAAS,EAAE,KAAK;IAChBv2H,UAAU,EAAE;EAChB,CAAC;EAEDL,QAAQ,CAAC,YAAY;IACjBR,MAAM,CAACmB,IAAI,GAAG,QAAQ;IAEtBX,QAAQ,CAAC,YAAY;MACjB0E,WAAW,CAAC,YAAY;QACpB,IAAItF,EAAE,GAAGkE,CAAC,CAAC,IAAI,CAAC;QAChB,IAAIlE,EAAE,CAAC,CAAC,CAAC,CAAC4K,EAAE,IAAI,gBAAgB,EAAE;UAC9B;UACA1K,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACm+C,SAAS,EAAE,UAAUijD,CAAC,EAAE;YAC3C,IAAIl+D,CAAC,GAAG,wBAAwB,IAAI,CAAC,CAACk+D,CAAC,CAACu4B,kBAAkB,GAAGv4B,CAAC,CAACu4B,kBAAkB,GAAGl5H,cAAc,CAACe,SAAS,CAAC,aAAa,CAAC,CAAC,GAAG,QAAQ,GAC/H,+CAA+C,IAAI,CAAC,CAAC4/F,CAAC,CAACw4B,eAAe,GAAGx4B,CAAC,CAACw4B,eAAe,GAAG,QAAQ,CAAC,GACtG,QAAQ;YAChB,IAAIC,EAAE,GAAGj6H,EAAE,CAACyR,IAAI,CAAC,SAAS,GAAG+vF,CAAC,CAAC51D,WAAW,CAAC;YAE3CquF,EAAE,CAACp6G,IAAI,CAACyjB,CAAC,CAAC;UACd,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;MAEF1iC,QAAQ,CAAC,YAAY;QAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAAE,CAAC,CAAC;IACpE,CAAC,CAAC;EACN,CAAC,CAAC;EAEFxE,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB/nB,CAAC,CAACC,OAAO,CAAC,CAAC;IACX44C,gBAAgB,CAACuO,qCAAqC,CAAC,CAAC,CACvDlnD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAIA,GAAG,CAACnF,IAAI,CAACinD,cAAc,KAAK,IAAI,EAAE;QAClCnrD,MAAM,CAACm+C,SAAS,GAAG90C,GAAG,CAACnF,IAAI,CAACi6C,SAAS;QACrC,IAAIn+C,MAAM,CAACm+C,SAAS,CAAC/3C,MAAM,GAAG,CAAC,EAC3BpG,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,GAAGz/C,MAAM,CAACm+C,SAAS,CAAC,CAAC,CAAC,CAAC3S,WAAW;MACvE,CAAC,MAEGxrC,MAAM,CAACm+C,SAAS,GAAG,CAAC;QAAE3S,WAAW,EAAE,GAAG;QAAE9gB,UAAU,EAAEjqB,cAAc,CAACe,SAAS,CAAC,aAAa;MAAE,CAAC,CAAC,CAACiQ,MAAM,CAACpI,GAAG,CAACnF,IAAI,CAACi6C,SAAS,CAAC;MAC7Hn+C,MAAM,CAACw3H,SAAS,CAAC,CAAC;IACtB,CAAC,CAAC,SACI,CAAC,UAAUrzH,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC,WACM,CAAC,YAAY;MACjB3D,QAAQ,CAAC,YAAY;QAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAAE,CAAC,CAAC;IACpE,CAAC,CAAC;EACN,CAAC;EAEDxE,MAAM,CAAC0I,MAAM,CAAC,wBAAwB,EACtC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IAC1B;EACJ,CAAC,CAAC;EAEFx3H,MAAM,CAAC0I,MAAM,CAAC,+BAA+B,EAC7C,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IACxB,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACzB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IACxB;EACN,CAAC,CAAC;EAEFx3H,MAAM,CAAC0I,MAAM,CAAC,yBAAyB,EACvC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IAC1B;EACJ,CAAC,CAAC;EAGFx3H,MAAM,CAAC0I,MAAM,CAAC,6BAA6B,EAC3C,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IAC1B;EACJ,CAAC,CAAC;EAEFx3H,MAAM,CAACqV,SAAS,GAAG,IAAI;EACvBrV,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,UAAU2W,GAAG,EAAE;IACrC,IAAIhZ,MAAM,CAACqV,SAAS,EAAE;MAClBrV,MAAM,CAACqV,SAAS,GAAG,KAAK;IAC5B;EACJ,CAAC,CAAC;EAEFrV,MAAM,CAACw3H,SAAS,GAAG,UAAUsC,SAAS,EAAE;IACpC,IAAGA,SAAS,EAAE;MACV95H,MAAM,CAACsgH,QAAQ,GAAG,CAAC;MACnBtgH,MAAM,CAACkE,IAAI,GAAG,EAAE;IACpB;IAEA,IAAIqmD,IAAI,GAAG;MACPlN,QAAQ,EAAEr9C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;MACvC88E,SAAS,EAAEl8H,aAAa,CAAC2xD,6BAA6B,CAAC,CAAChyD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,GAAG,IAAI7tB,IAAI,CAAC,CAAC,GAAGz7B,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,CAAC;MACnIkzE,OAAO,EAAEn8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,CAAC;MACjFqwE,aAAa,EAAE15H,MAAM,CAAC8qD,aAAa,CAAC4uE,aAAa;MACjDvC,eAAe,EAAEn3H,MAAM,CAAC8qD,aAAa,CAACqsE,eAAe;MACrDC,SAAS,EAAEp3H,MAAM,CAAC8qD,aAAa,CAACssE,SAAS;MACzCv2H,UAAU,EAAEb,MAAM,CAAC8qD,aAAa,CAACjqD,UAAU;MAC3C8zB,IAAI,EAAE,CAAC30B,MAAM,CAACsgH,QAAQ,GAAG,CAAC,IAAItgH,MAAM,CAACu5B,WAAW;MAChD45D,IAAI,EAAEnzF,MAAM,CAACu5B;IACjB,CAAC;IAEDz1B,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACkJ,SAAS,GAAG,IAAI;IACvBlJ,MAAM,CAAC+5H,OAAO,GAAG,EAAE;IACnB/5H,MAAM,CAACk3H,iBAAiB,GAAG,EAAE;IAE7B,OAAOxtG,aAAa,CAACg0G,4BAA4B,CAACnzE,IAAI,CAAC,CACtDvmD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBrJ,MAAM,CAACi3H,aAAa,GAAG5tH,GAAG,CAACnF,IAAI,CAACyzH,OAAO;MACvC33H,MAAM,CAACy9H,kBAAkB,GAAGz9H,MAAM,CAACu9H,KAAK,CAACv9H,MAAM,CAACi3H,aAAa,EAAE,CAAC,CAAC;MACjEj3H,MAAM,CAACkE,IAAI,GAAGlE,MAAM,CAACkE,IAAI,CAACuN,MAAM,CAACpI,GAAG,CAACnF,IAAI,CAAC2zH,MAAM,CAAC;MACjD73H,MAAM,CAACk3H,iBAAiB,GAAG7tH,GAAG,CAACnF,IAAI,CAAC0zH,iBAAiB;MACrDx9F,QAAQ,CAAC/wB,GAAG,CAACnF,IAAI,CAACwzH,OAAO,CAAC;MAE1B,IAAI13H,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM,IAAI,CAAC,EAAE;QACpC,IAAIg7F,CAAC,GAAGphG,MAAM,CAACi3H,aAAa,CAAC7wH,MAAM;QACnC,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;UACxB,IAAIxU,MAAM,CAACi3H,aAAa,CAACziH,CAAC,CAAC,CAAC0lH,SAAS,KAAK,IAAI,EAAE;YAC5Cl6H,MAAM,CAACg5H,eAAe,CAAC3yH,IAAI,CAACrG,MAAM,CAACi3H,aAAa,CAACziH,CAAC,CAAC,CAAC;UACxD;QACJ;MACJ;MAEAxU,MAAM,CAACo4H,UAAU,CAACrzH,YAAY,CAAC,CAAC;MAEhC/E,MAAM,CAACkJ,SAAS,GAAG,KAAK;MACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SAAM,CAAC,UAAUF,GAAG,EAAE;MACpBnE,MAAM,CAACkJ,SAAS,GAAG,KAAK;MACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;;EAED;EACAnE,MAAM,CAACq4H,iBAAiB,GAAG,YAAY;IACnC,OAAO,IAAI;EACf,CAAC;EAEDr4H,MAAM,CAACo2H,WAAW,GAAG,UAAUC,SAAS,EAAEhyD,YAAY,EAAE;IACpDvgE,CAAC,CAACC,OAAO,CAAC,CAAC;IAEZ,IAAI2G,KAAK,GAAG2rH,SAAS,CAAC3iH,UAAU;IAChC,IAAI2wD,YAAY,GAAGA,YAAY,CAAC3wD,UAAU;IAE1C,IAAI4kH,MAAM,GAAG,EAAE;IACd,KAAK,IAAI9jH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MACpD8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACg5H,eAAe,CAACxkH,CAAC,CAAC,CAAChK,EAAE,CAAC;IAC7C;IAEA,KAAK,IAAIgK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACi5H,yBAAyB,CAAC7yH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MAC9D8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACi5H,yBAAyB,CAACzkH,CAAC,CAAC,CAAChK,EAAE,CAAC;IACvD;IAEA,IAAI+/C,IAAI,GAAG;MACPlN,QAAQ,EAAEr9C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;MACvC88E,SAAS,EAAEl8H,aAAa,CAAC2xD,6BAA6B,CAAC,CAAChyD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,GAAG,IAAI7tB,IAAI,CAAC,CAAC,GAAGz7B,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,CAAC;MACnIkzE,OAAO,EAAEn8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,CAAC;MACjFqwE,aAAa,EAAE15H,MAAM,CAAC8qD,aAAa,CAAC4uE,aAAa;MACjD74H,UAAU,EAAEb,MAAM,CAAC8qD,aAAa,CAACjqD,UAAU;MAC3C03H,UAAU,EAAED,MAAM;MAClBE,OAAO,EAAE9tH,KAAK;MACd+tH,OAAO,EAAEp0D;IACb,CAAC;IAED,OAAO36C,aAAa,CAACi0G,iCAAiC,CAACpzE,IAAI,CAAC,CAC3DvmD,IAAI,CAAC,UAAUyjB,MAAM,EAAE;MACpB3jB,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC+L,WAAW,CAAC,2BAA2B,CAAC;;MAEtD;MACApM,MAAM,CAACu2H,qBAAqB,GAAG,IAAI;MACnCl2H,aAAa,CAAC8E,UAAU,CAAC,wBAAwB,CAAC;IACtD,CAAC,CAAC,SACI,CAAC,UAAUhB,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAC5E,CAAC,CAAC;EACN,CAAC;EAEDxB,MAAM,CAAC24H,YAAY,GAAG,YAAY;IAC9B70H,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAIu0H,MAAM,GAAG,EAAE;IACf,KAAK,IAAI9jH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MACpD8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACg5H,eAAe,CAACxkH,CAAC,CAAC,CAAChK,EAAE,CAAC;IAC7C;IAEA,KAAK,IAAIgK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACi5H,yBAAyB,CAAC7yH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MAC9D8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACi5H,yBAAyB,CAACzkH,CAAC,CAAC,CAAChK,EAAE,CAAC;IACvD;IAEA,IAAI+/C,IAAI,GAAG;MACPlN,QAAQ,EAAEr9C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;MACvC88E,SAAS,EAAEl8H,aAAa,CAAC2xD,6BAA6B,CAAC,CAAChyD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,GAAG,IAAI7tB,IAAI,CAAC,CAAC,GAAGz7B,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,CAAC;MACnIkzE,OAAO,EAAEn8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,CAAC;MACjFqwE,aAAa,EAAE15H,MAAM,CAAC8qD,aAAa,CAAC4uE,aAAa;MACjD74H,UAAU,EAAEb,MAAM,CAAC8qD,aAAa,CAACjqD,UAAU;MAC3C03H,UAAU,EAAED;IAChB,CAAC;IAED,OAAO5uG,aAAa,CAACk0G,+BAA+B,CAACrzE,IAAI,CAAC,CACzDvmD,IAAI,CAAC,UAAUwxC,GAAG,EAAE;MACjB,IAAIt1C,aAAa,CAAC2L,QAAQ,EACtB,OAAO+qH,UAAU,CAACjgF,cAAc,CAACnB,GAAG,CAACtxC,IAAI,EAAE,8BAA8B,CAAC,CACzEF,IAAI,CAAC,UAAU8oB,IAAI,EAAE;QAClB,IAAIvhB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzB1H,CAAC,CAACO,SAAS,CAAC,CAAC;QAEbhE,aAAa,CAACowE,cAAc,CAAC;UACzBr8D,KAAK,EAAE,EAAE;UACTqiC,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,wBAAwB,GAACsrB,IAAI;QAChE,CAAC,EAAE,YAAY;UACXvhB,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAC1B,CAAC,CAAC;QAGF,OAAOF,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC,CAAC,KAEH,OAAOkrH,UAAU,CAAC9gF,WAAW,CAACN,GAAG,CAACtxC,IAAI,EAAE,8BAA8B,CAAC;IAC/E,CAAC,CAAC,CACDF,IAAI,CAAC,YAAY;MACdF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACI,CAAC,UAAUF,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EAEN,CAAC;AAEL,CAAC,CACJ,CAAC,C;;;;;;;;;;AC7YFrE,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,8BAA8B,EAC/D,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAC1G,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAC,YAAY,EAC7H,UAAUC,MAAM,EAAEC,UAAU,EAAEM,SAAS,EAAEipB,YAAY,EAAEhpB,QAAQ,EAAEL,YAAY,EAAED,aAAa,EAAE0pB,SAAS,EACnGvpB,aAAa,EAAEqpB,aAAa,EAAEizB,gBAAgB,EAAEl8C,cAAc,EAAEoX,YAAY,EAAElX,EAAE,EAAEi0H,YAAY,EAAEgC,UAAU,EAAE;EAE5G32H,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE1pB,SAAS,CAACsyC;EAA0B,CAAC,CAAC,CAAC,CAAC;;EAEnG,IAAI,CAACrpB,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;EACJ;EAEApqB,MAAM,CAAC64H,UAAU,GAAG,8CAA8C;EAElE74H,MAAM,CAACmB,IAAI,GAAG,EAAE;EAChBnB,MAAM,CAACkE,IAAI,GAAG,EAAE;EAChBlE,MAAM,CAAC84H,MAAM,GAAG,EAAE;EAClB94H,MAAM,CAAC+4H,OAAO,GAAG,EAAE;EACnB/4H,MAAM,CAACi3H,aAAa,GAAG,EAAE;EACzBj3H,MAAM,CAACg5H,eAAe,GAAG,EAAE;EAC3Bh5H,MAAM,CAACk3H,iBAAiB,GAAG,EAAE;EAC7Bl3H,MAAM,CAACi5H,yBAAyB,GAAG,EAAE;EAErCj5H,MAAM,CAACsgH,QAAQ,GAAG,CAAC;EACnBtgH,MAAM,CAACugH,eAAe;EACtBvgH,MAAM,CAACu5B,WAAW,GAAG,GAAG;EACxBv5B,MAAM,CAACkJ,SAAS,GAAG,KAAK;EAExBlJ,MAAM,CAACgrD,UAAU,GAAG1rD,kBAAkB,CAACw3C,QAAQ,IAAI,KAAK;EAExD92C,MAAM,CAACu9H,KAAK,GAAG,UAASniH,GAAG,EAAEiY,IAAI,EAAE;IAC/B,IAAImqG,MAAM,GAAG,EAAE;IACf,KAAK,IAAIhpH,CAAC,GAAC,CAAC,EAAEA,CAAC,GAAC4G,GAAG,CAAChV,MAAM,EAAEoO,CAAC,IAAE6e,IAAI,EAAE;MACnCmqG,MAAM,CAACn3H,IAAI,CAAC+U,GAAG,CAAC1R,KAAK,CAAC8K,CAAC,EAAEA,CAAC,GAAC6e,IAAI,CAAC,CAAC;IACnC;IACA,OAAOmqG,MAAM;EACf,CAAC;EAEHx9H,MAAM,CAACk5H,cAAc,GAAG,YAAU;IAC9B74H,aAAa,CAAC8E,UAAU,CAACrB,CAAC,CAAC,mCAAmC,CAAC,EAAE,YAAU,CAAE,CAAC,CAAC;EACnF,CAAC;EAED9D,MAAM,CAACm5H,eAAe,GAAG,YAAU;IAC/B94H,aAAa,CAAC+L,WAAW,CAACtI,CAAC,CAAC,mCAAmC,CAAC,CAAC;EACrE,CAAC;EAED9D,MAAM,CAACy9H,kBAAkB,GAAGz9H,MAAM,CAACu9H,KAAK,CAACv9H,MAAM,CAACi3H,aAAa,EAAE,CAAC,CAAC;EACjEj3H,MAAM,CAACo5H,YAAY,GAAG,UAASh+G,GAAG,EAAEs6B,GAAG,EAAE;IACrC,IAAIhgB,KAAK,GAAG,KAAK;IACb,IAAI0rE,CAAC,GAAGhmF,GAAG,CAAChV,MAAM;IAClB,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;MACxB,IAAI4G,GAAG,CAAC5G,CAAC,CAAC,CAAChK,EAAE,IAAIkrC,GAAG,CAAClrC,EAAE,EAAE;QACrBkrB,KAAK,GAAG,IAAI;QACZta,GAAG,CAAC9L,MAAM,CAACkF,CAAC,EAAE,CAAC,CAAC;QAChB;MACJ;IACJ;IACJ,IAAI,CAACkhB,KAAK,EAAE;MACRta,GAAG,CAAC/U,IAAI,CAACqvC,GAAG,CAAC;IACjB;EACJ,CAAC;EAED11C,MAAM,CAACq5H,gBAAgB,GAAG,UAAUj+G,GAAG,EAAE1G,CAAC,EAAG;IACrC,IAAIghB,KAAK,GAAG,KAAK;IACjB,IAAI0rE,CAAC,GAAGhmF,GAAG,CAAChV,MAAM;IAClB,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;MACxB,IAAI4G,GAAG,CAAC5G,CAAC,CAAC,CAAChK,EAAE,IAAIkK,CAAC,CAAClK,EAAE,EAAE;QACnBkrB,KAAK,GAAG,IAAI;QACZ;MACJ;IACJ;IACF,OAAOA,KAAK;EAChB,CAAC;EAEH11B,MAAM,CAACs5H,YAAY,GAAG,UAAU5kH,CAAC,EAAG;IAChC,OAAO,UAAUA,CAAC,EAAG;MACjB,IAAIghB,KAAK,GAAG,KAAK;MACjB,IAAI0rE,CAAC,GAAGphG,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM;MACrC,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;QACxB,IAAIxU,MAAM,CAACg5H,eAAe,CAACxkH,CAAC,CAAC,CAAChK,EAAE,IAAIkK,CAAC,CAAC6kH,QAAQ,EAAE;UAC5C7jG,KAAK,GAAG,IAAI;UACZ;QACJ;MACJ;MACF,OAAOA,KAAK;IACd,CAAC;EACH,CAAC;EAED11B,MAAM,CAACw5H,sBAAsB,GAAG,UAAU9kH,CAAC,EAAG;IAC5C,OAAO,UAAUA,CAAC,EAAG;MACjB,IAAIghB,KAAK,GAAG,KAAK;MACjB,IAAI0rE,CAAC,GAAGphG,MAAM,CAACi5H,yBAAyB,CAAC7yH,MAAM;MAC/C,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;QACxB,IAAIxU,MAAM,CAACi5H,yBAAyB,CAACzkH,CAAC,CAAC,CAAChK,EAAE,IAAIkK,CAAC,CAAC6kH,QAAQ,EAAE;UACtD7jG,KAAK,GAAG,IAAI;UACZ;QACJ;MACJ;MACF,OAAOA,KAAK;IACd,CAAC;EACH,CAAC;EAED11B,MAAM,CAACy5H,kBAAkB,GAAG,UAAU/kH,CAAC,EAAG;IACxC,OAAO,UAAUA,CAAC,EAAG;MACjB,IAAIghB,KAAK,GAAG,KAAK;MACjB,IAAI0rE,CAAC,GAAGphG,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM;MACrC,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;QACxB,IAAIxU,MAAM,CAACg5H,eAAe,CAACxkH,CAAC,CAAC,CAAChK,EAAE,IAAIkK,CAAC,CAAClK,EAAE,EAAE;UACtCkrB,KAAK,GAAG,IAAI;UACZ;QACJ;MACJ;MACF,OAAOA,KAAK;IACd,CAAC;EACH,CAAC;EAEH,IAAMoE,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAA,EAAc;IACzC,IAAI,CAAC95B,MAAM,CAACkJ,SAAS,IAAIlJ,MAAM,CAACsgH,QAAQ,GAAGtgH,MAAM,CAACs5B,UAAU,EAAE;MAC1Dt5B,MAAM,CAAC0iH,UAAU,CAAC1iH,MAAM,CAACsgH,QAAQ,GAAG,CAAC,CAAC;IAC1C;EACJ,CAAC;EAEDjmF,iBAAiB,CAACP,yBAAyB,CAAC;EAE5C95B,MAAM,CAACksD,oBAAoB,GAAG,UAAShiD,IAAI,EAAEiiD,EAAE,EAAC;IAC5CnsD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,GAAGp/C,IAAI;IACpClK,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,GAAG8C,EAAE;IAChCnsD,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;EAC1B,CAAC;EAED,SAASp9F,QAAQA,CAAClO,KAAK,EAAE;IACrB,IAAIqO,IAAI,GAAGv6B,MAAM,CAACu5B,WAAW;IAC7Bv5B,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAC3Cv6B,MAAM,CAACw5B,YAAY,GAAGtN,KAAK;IAC3B,IAAIlsB,MAAM,CAACs5B,UAAU,KAAK,CAAC,EAAE;MACzBt5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;IACzB;EACJ;EAAC;EAEDt5B,MAAM,CAAC0iH,UAAU,GAAG,UAAUtnF,IAAI,EAAE;IAChCp7B,MAAM,CAACsgH,QAAQ,GAAGllF,IAAI;IACtBp7B,MAAM,CAACw3H,SAAS,CAAC,KAAK,CAAC;EAC3B,CAAC;EAEDx3H,MAAM,CAAC83G,UAAU,GAAG,SAAS;EAC7B93G,MAAM,CAACq6H,WAAW,GAAG,CACjB;IAACn3H,IAAI,EAAE,SAAS;IAAE2rE,IAAI,EAAE,SAAS;IAAEyrD,oBAAoB,EAAE,KAAK;IAAEuD,kBAAkB,EAAE;EAAK,CAAC,EAC1F;IAAC36H,IAAI,EAAE,QAAQ;IAAE2rE,IAAI,EAAE,QAAQ;IAAEyrD,oBAAoB,EAAE,IAAI;IAAEuD,kBAAkB,EAAE;EAAI,CAAC,EACtF;IAAC36H,IAAI,EAAE,UAAU;IAAE2rE,IAAI,EAAE,UAAU;IAAGyrD,oBAAoB,EAAE,IAAI;IAAEuD,kBAAkB,EAAE;EAAI,CAAC,EAC3F;IAAC36H,IAAI,EAAE,MAAM;IAAE2rE,IAAI,EAAE,MAAM;IAAGyrD,oBAAoB,EAAE,IAAI;IAAEuD,kBAAkB,EAAE;EAAI,CAAC,EACnF;IAAC36H,IAAI,EAAE,SAAS;IAAE2rE,IAAI,EAAE,sBAAsB;IAAGyrD,oBAAoB,EAAE,IAAI;IAAEuD,kBAAkB,EAAE;EAAI,CAAC,EACtG;IAAC36H,IAAI,EAAE,UAAU;IAAE2rE,IAAI,EAAE,UAAU;IAAGyrD,oBAAoB,EAAE,IAAI;IAAEuD,kBAAkB,EAAE;EAAI,CAAC,EAC3F;IAAC36H,IAAI,EAAE,SAAS;IAAE2rE,IAAI,EAAE,SAAS;IAAEyrD,oBAAoB,EAAE,IAAI;IAAEuD,kBAAkB,EAAE;EAAK,CAAC,EACzF;IAAC36H,IAAI,EAAE,OAAO;IAAE2rE,IAAI,EAAE,OAAO;IAAEyrD,oBAAoB,EAAE,IAAI;IAAEuD,kBAAkB,EAAE;EAAI,CAAC,EACpF;IAAC36H,IAAI,EAAE,UAAU;IAAE2rE,IAAI,EAAE,kBAAkB;IAAEyrD,oBAAoB,EAAE,IAAI;IAAEuD,kBAAkB,EAAE;EAAI,CAAC,EAClG;IAAC36H,IAAI,EAAE,KAAK;IAAE2rE,IAAI,EAAE,aAAa;IAAEyrD,oBAAoB,EAAE,IAAI;IAAEuD,kBAAkB,EAAE;EAAI,CAAC,CAC3F;EAGD79H,MAAM,CAACu6H,oBAAoB,GAAG,YAAW;IACrC,IAAIn5B,CAAC,GAAGphG,MAAM,CAACq6H,WAAW,CAACj0H,MAAM;IACjC,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;MACxB,IAAIxU,MAAM,CAACq6H,WAAW,CAAC7lH,CAAC,CAAC,CAACtR,IAAI,KAAKlD,MAAM,CAAC83G,UAAU,EAAE;QAClD,OAAO93G,MAAM,CAACq6H,WAAW,CAAC7lH,CAAC,CAAC;MAChC;IACJ;EACJ,CAAC;EACDxU,MAAM,CAACsY,UAAU,GAAGjY,aAAa,CAACkY,6BAA6B,CAAC,CAAC;EAEjEvY,MAAM,CAAC8qD,aAAa,GAAG;IACnBxB,QAAQ,EAAEjpD,aAAa,CAAC0qD,gBAAgB,CAAC,IAAItvB,IAAI,CAAC,CAAC,CAAC;IACpD4tB,MAAM,EAAEhpD,aAAa,CAAC0qD,gBAAgB,CAAC,IAAItvB,IAAI,CAAC,CAAC,CAAC;IAClDq8E,UAAU,EAAE,SAAS;IACrBr4D,QAAQ,EAAE,GAAG;IACbq+E,YAAY,EAAE,KAAK;IACnBpE,aAAa,EAAE,KAAK;IACpBvC,eAAe,EAAE,CAAC;IAClBC,SAAS,EAAE,KAAK;IAChBv2H,UAAU,EAAE,EAAE;IACdk9H,UAAU,EAAE;EAChB,CAAC;EAEDv9H,QAAQ,CAAC,YAAY;IACjBR,MAAM,CAACmB,IAAI,GAAG,QAAQ;IAEtBX,QAAQ,CAAC,YAAY;MACjB0E,WAAW,CAAC,YAAY;QACpB,IAAItF,EAAE,GAAGkE,CAAC,CAAC,IAAI,CAAC;QAChB,IAAIlE,EAAE,CAAC,CAAC,CAAC,CAAC4K,EAAE,IAAI,gBAAgB,EAAE;UAC9B;UACA1K,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACm+C,SAAS,EAAE,UAAUijD,CAAC,EAAE;YAC3C,IAAIl+D,CAAC,GAAG,wBAAwB,IAAI,CAAC,CAACk+D,CAAC,CAACu4B,kBAAkB,GAAGv4B,CAAC,CAACu4B,kBAAkB,GAAGl5H,cAAc,CAACe,SAAS,CAAC,aAAa,CAAC,CAAC,GAAG,QAAQ,GAC/H,+CAA+C,IAAI,CAAC,CAAC4/F,CAAC,CAACw4B,eAAe,GAAGx4B,CAAC,CAACw4B,eAAe,GAAG,QAAQ,CAAC,GACtG,QAAQ;YAChB,IAAIC,EAAE,GAAGj6H,EAAE,CAACyR,IAAI,CAAC,SAAS,GAAG+vF,CAAC,CAAC51D,WAAW,CAAC;YAE3CquF,EAAE,CAACp6G,IAAI,CAACyjB,CAAC,CAAC;UACd,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;MAEF1iC,QAAQ,CAAC,YAAY;QAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAAE,CAAC,CAAC;IACpE,CAAC,CAAC;EACN,CAAC,CAAC;EAEFxE,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB/nB,CAAC,CAACC,OAAO,CAAC,CAAC;IACX44C,gBAAgB,CAACuO,qCAAqC,CAAC,CAAC,CACvDlnD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAIA,GAAG,CAACnF,IAAI,CAACinD,cAAc,KAAK,IAAI,EAAE;QAClCnrD,MAAM,CAACm+C,SAAS,GAAG90C,GAAG,CAACnF,IAAI,CAACi6C,SAAS;QACrC,IAAIn+C,MAAM,CAACm+C,SAAS,CAAC/3C,MAAM,GAAG,CAAC,EAC3BpG,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,GAAGz/C,MAAM,CAACm+C,SAAS,CAAC,CAAC,CAAC,CAAC3S,WAAW;MACvE,CAAC,MAEGxrC,MAAM,CAACm+C,SAAS,GAAG,CAAC;QAAE3S,WAAW,EAAE,GAAG;QAAE9gB,UAAU,EAAEjqB,cAAc,CAACe,SAAS,CAAC,aAAa;MAAE,CAAC,CAAC,CAACiQ,MAAM,CAACpI,GAAG,CAACnF,IAAI,CAACi6C,SAAS,CAAC;MAC7Hn+C,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IAC1B,CAAC,CAAC,SACI,CAAC,UAAUrzH,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC,WACM,CAAC,YAAY;MACjB3D,QAAQ,CAAC,YAAY;QAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAAE,CAAC,CAAC;IACpE,CAAC,CAAC;EACN,CAAC;EAEDxE,MAAM,CAAC0I,MAAM,CAAC,YAAY,EAC1B,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IAC1B;EACJ,CAAC,CAAC;EAEFx3H,MAAM,CAAC0I,MAAM,CAAC,wBAAwB,EACtC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACvB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IAC1B;EACJ,CAAC,CAAC;EAEFx3H,MAAM,CAAC0I,MAAM,CAAC,+BAA+B,EAC7C,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IACxB,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACzB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IACxB;EACN,CAAC,CAAC;EAEFx3H,MAAM,CAAC0I,MAAM,CAAC,yBAAyB,EACvC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACzB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IACxB;EACJ,CAAC,CAAC;EAEFx3H,MAAM,CAAC0I,MAAM,CAAC,4BAA4B,EAC1C,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACzB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IACxB;EACJ,CAAC,CAAC;EAEFx3H,MAAM,CAAC0I,MAAM,CAAC,6BAA6B,EAC3C,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACzB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IACxB;EACJ,CAAC,CAAC;EAEFx3H,MAAM,CAACqV,SAAS,GAAG,IAAI;EACvBrV,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,UAAU2W,GAAG,EAAE;IACrC,IAAIhZ,MAAM,CAACqV,SAAS,EAAE;MAClBrV,MAAM,CAACqV,SAAS,GAAG,KAAK;MACxB;IACJ;EACJ,CAAC,CAAC;EAEFrV,MAAM,CAACw3H,SAAS,GAAG,UAAUsC,SAAS,EAAE;IACpC,IAAGA,SAAS,EAAE;MACV95H,MAAM,CAACsgH,QAAQ,GAAG,CAAC;MACnBtgH,MAAM,CAACkE,IAAI,GAAG,EAAE;IACpB;IAEA,IAAIqmD,IAAI,GAAG;MACPgyE,SAAS,EAAEl8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,CAAC;MACrFkzE,OAAO,EAAEn8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,CAAC;MACjFmxE,UAAU,EAAEx6H,MAAM,CAAC83G,UAAU;MAC7Bz6D,QAAQ,EAAEr9C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;MACvCq+E,YAAY,EAAE99H,MAAM,CAAC8qD,aAAa,CAACgzE,YAAY,IAAI99H,MAAM,CAACu6H,oBAAoB,CAAC,CAAC,CAACsD,kBAAkB;MACnGnE,aAAa,EAAE15H,MAAM,CAAC8qD,aAAa,CAAC4uE,aAAa,IAAI15H,MAAM,CAACu6H,oBAAoB,CAAC,CAAC,CAACD,oBAAoB;MACvGnD,eAAe,EAAEn3H,MAAM,CAAC8qD,aAAa,CAACqsE,eAAe;MACrDC,SAAS,EAAEp3H,MAAM,CAAC8qD,aAAa,CAACssE,SAAS;MACzCv2H,UAAU,EAAEb,MAAM,CAAC8qD,aAAa,CAACjqD,UAAU;MAC3C8zB,IAAI,EAAE,CAAC30B,MAAM,CAACsgH,QAAQ,GAAG,CAAC,IAAItgH,MAAM,CAACu5B,WAAW;MAChD45D,IAAI,EAAEnzF,MAAM,CAACu5B;IACjB,CAAC;IAED,IAAIgxB,IAAI,CAACgyE,SAAS,GAAGhyE,IAAI,CAACiyE,OAAO,EAAE;MAC/Br8H,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,gEAAgE,CAAC,CAAC;MAClH;IACJ;IAEA,IAAI+oD,IAAI,CAACgyE,SAAS,IAAIhyE,IAAI,CAACiyE,OAAO,EAAE;MAChC,IAAIx/E,SAAS,GAAGlsB,MAAM,CAACy5B,IAAI,CAACgyE,SAAS,CAAC;MACtC,IAAIp/E,OAAO,GAAGrsB,MAAM,CAACy5B,IAAI,CAACiyE,OAAO,CAAC;MAClC,IAAI3iG,IAAI,CAACD,GAAG,CAACojB,SAAS,CAACghF,IAAI,CAAC7gF,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;QACtDh9C,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,wDAAwD,CAAC,CAAC;QAC1G;MACJ;IACJ;IAEAsC,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACkJ,SAAS,GAAG,IAAI;IACvBlJ,MAAM,CAAC+5H,OAAO,GAAG,EAAE;IACnB/5H,MAAM,CAAC84H,MAAM,GAAG,EAAE;IAClB94H,MAAM,CAACk3H,iBAAiB,GAAG,EAAE;IAE7B,OAAOxtG,aAAa,CAACu0G,gBAAgB,CAAC1zE,IAAI,CAAC,CAACvmD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAE5D,IAAIvF,CAAC,CAACyX,IAAI,CAACvb,MAAM,CAAC8qD,aAAa,CAACjqD,UAAU,CAAC,KAAK,EAAE,EAAE;QAChDb,MAAM,CAAC8qD,aAAa,CAACizE,UAAU,GAAG,IAAI;MAC1C,CAAC,MACI;QACD/9H,MAAM,CAAC8qD,aAAa,CAACizE,UAAU,GAAG,KAAK;MAC3C;MAEA/9H,MAAM,CAACi3H,aAAa,GAAG5tH,GAAG,CAACnF,IAAI,CAACyzH,OAAO;MACvC33H,MAAM,CAACy9H,kBAAkB,GAAGz9H,MAAM,CAACu9H,KAAK,CAACv9H,MAAM,CAACi3H,aAAa,EAAE,CAAC,CAAC;MACjEj3H,MAAM,CAACkE,IAAI,GAAGlE,MAAM,CAACkE,IAAI,CAACuN,MAAM,CAACpI,GAAG,CAACnF,IAAI,CAAC2zH,MAAM,CAAC;MACjD73H,MAAM,CAAC84H,MAAM,GAAGzvH,GAAG,CAACnF,IAAI,CAAC+1H,MAAM;MAC/Bj6H,MAAM,CAACk3H,iBAAiB,GAAG7tH,GAAG,CAACnF,IAAI,CAAC0zH,iBAAiB;MACrDx9F,QAAQ,CAAC/wB,GAAG,CAACnF,IAAI,CAACwzH,OAAO,CAAC;MAE1B,IAAI13H,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM,IAAI,CAAC,EAAE;QACpC,IAAIg7F,CAAC,GAAGphG,MAAM,CAACi3H,aAAa,CAAC7wH,MAAM;QACnC,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4sF,CAAC,EAAE5sF,CAAC,EAAE,EAAE;UACxB,IAAIxU,MAAM,CAACi3H,aAAa,CAACziH,CAAC,CAAC,CAAC0lH,SAAS,KAAK,IAAI,EAAE;YAC5Cl6H,MAAM,CAACg5H,eAAe,CAAC3yH,IAAI,CAACrG,MAAM,CAACi3H,aAAa,CAACziH,CAAC,CAAC,CAAC;UACxD;QACJ;MACJ;MAEAxU,MAAM,CAACo4H,UAAU,CAACrzH,YAAY,CAAC,CAAC;MAEhC/E,MAAM,CAACkJ,SAAS,GAAG,KAAK;MACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SAAM,CAAC,UAAUF,GAAG,EAAE;MACpBnE,MAAM,CAACkJ,SAAS,GAAG,KAAK;MACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;;EAED;EACAnE,MAAM,CAACq4H,iBAAiB,GAAG,YAAY;IACnC,OAAO,IAAI;EACf,CAAC;EAEDr4H,MAAM,CAACo2H,WAAW,GAAG,UAAUC,SAAS,EAAEhyD,YAAY,EAAE;IACpDvgE,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAI2G,KAAK,GAAG2rH,SAAS,CAAC3iH,UAAU;IACjC,IAAI2wD,YAAY,GAAGA,YAAY,CAAC3wD,UAAU;IAEzC,IAAI4kH,MAAM,GAAG,EAAE;IACf,KAAK,IAAI9jH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MACpD8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACg5H,eAAe,CAACxkH,CAAC,CAAC,CAAChK,EAAE,CAAC;IAC7C;IAEA,KAAK,IAAIgK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACi5H,yBAAyB,CAAC7yH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MAC9D8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACi5H,yBAAyB,CAACzkH,CAAC,CAAC,CAAChK,EAAE,CAAC;IACvD;IAEA,IAAI+/C,IAAI,GAAG;MACPgyE,SAAS,EAAEl8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,CAAC;MACrFkzE,OAAO,EAAEn8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,CAAC;MACjFmxE,UAAU,EAAEx6H,MAAM,CAAC83G,UAAU;MAC7Bz6D,QAAQ,EAAEr9C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;MACvCq+E,YAAY,EAAE99H,MAAM,CAAC8qD,aAAa,CAACgzE,YAAY,IAAI99H,MAAM,CAACu6H,oBAAoB,CAAC,CAAC,CAACsD,kBAAkB;MACnGnE,aAAa,EAAE15H,MAAM,CAAC8qD,aAAa,CAAC4uE,aAAa,IAAI15H,MAAM,CAACu6H,oBAAoB,CAAC,CAAC,CAACD,oBAAoB;MACvGz5H,UAAU,EAAEb,MAAM,CAAC8qD,aAAa,CAACjqD,UAAU;MAC3C03H,UAAU,EAAED,MAAM;MAClBE,OAAO,EAAE9tH,KAAK;MACd+tH,OAAO,EAAEp0D;IACb,CAAC;IAED,IAAI9Z,IAAI,CAACgyE,SAAS,GAAGhyE,IAAI,CAACiyE,OAAO,EAAE;MAC/Br8H,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,gEAAgE,CAAC,CAAC;MAClH;IACJ;IAEAkoB,aAAa,CAACw0G,qBAAqB,CAAC3zE,IAAI,CAAC,CACxCvmD,IAAI,CAAC,UAAUyjB,MAAM,EAAE;MACpB3jB,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC+L,WAAW,CAAC,2BAA2B,CAAC;;MAEtD;MACApM,MAAM,CAACu2H,qBAAqB,GAAG,IAAI;MACnCl2H,aAAa,CAAC8E,UAAU,CAAC,wBAAwB,CAAC;IACtD,CAAC,CAAC,SACI,CAAC,UAAUhB,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAC5E,CAAC,CAAC;EACN,CAAC;EAEDxB,MAAM,CAAC24H,YAAY,GAAG,YAAY;IAC9B70H,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAIu0H,MAAM,GAAG,EAAE;IACf,KAAK,IAAI9jH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACg5H,eAAe,CAAC5yH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MACpD8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACg5H,eAAe,CAACxkH,CAAC,CAAC,CAAChK,EAAE,CAAC;IAC7C;IAEA,KAAK,IAAIgK,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACi5H,yBAAyB,CAAC7yH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MAC9D8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACi5H,yBAAyB,CAACzkH,CAAC,CAAC,CAAChK,EAAE,CAAC;IACvD;IAEA,IAAI+/C,IAAI,GAAG;MACPgyE,SAAS,EAAEl8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,CAAC;MACrFkzE,OAAO,EAAEn8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,CAAC;MACjFmxE,UAAU,EAAEx6H,MAAM,CAAC83G,UAAU;MAC7Bz6D,QAAQ,EAAEr9C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;MACvCq+E,YAAY,EAAE99H,MAAM,CAAC8qD,aAAa,CAACgzE,YAAY,IAAI99H,MAAM,CAACu6H,oBAAoB,CAAC,CAAC,CAACsD,kBAAkB;MACnGnE,aAAa,EAAE15H,MAAM,CAAC8qD,aAAa,CAAC4uE,aAAa,IAAI15H,MAAM,CAACu6H,oBAAoB,CAAC,CAAC,CAACD,oBAAoB;MACvGz5H,UAAU,EAAEb,MAAM,CAAC8qD,aAAa,CAACjqD,UAAU;MAC3C03H,UAAU,EAAED;IAChB,CAAC;IAED,IAAI/tE,IAAI,CAACgyE,SAAS,GAAGhyE,IAAI,CAACiyE,OAAO,EAAE;MAC/Br8H,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,gEAAgE,CAAC,CAAC;MAClH;IACJ;IAEA,OAAOkoB,aAAa,CAACy0G,mBAAmB,CAAC5zE,IAAI,CAAC,CAC7CvmD,IAAI,CAAC,UAAUwxC,GAAG,EAAE;MACjB,IAAIt1C,aAAa,CAAC2L,QAAQ,EACtB,OAAO+qH,UAAU,CAACjgF,cAAc,CAACnB,GAAG,CAACtxC,IAAI,EAAE,wBAAwB,CAAC,CACnEF,IAAI,CAAC,UAAU8oB,IAAI,EAAE;QAClB,IAAIvhB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzB1H,CAAC,CAACO,SAAS,CAAC,CAAC;QAEbhE,aAAa,CAACowE,cAAc,CAAC;UACzBr8D,KAAK,EAAE,EAAE;UACTqiC,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,wBAAwB,GAAEsrB,IAAI,GAAGA,IAAI,CAACnN,OAAO,CAAC,uBAAuB,EAAE,SAAS,CAAC,GAAE,CAAE,CAAC;UACrHk2D,WAAW,EAAE;QACjB,CAAC,EAAE,YAAY;UACXtqE,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAC1B,CAAC,CAAC;QAGF,OAAOF,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC,CAAC,KAEH,OAAOkrH,UAAU,CAAC9gF,WAAW,CAACN,GAAG,CAACtxC,IAAI,EAAE,wBAAwB,CAAC;IACzE,CAAC,CAAC,CACDF,IAAI,CAAC,YAAY;MACdF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACI,CAAC,UAAUF,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EAEN,CAAC;AAEL,CAAC,CACJ,CAAC,C;;;;;;;;;;ACpdFrE,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAAC2jD,OAAO,CAAC,eAAe,EAC9C,CAAC,eAAe,EAAE,eAAe,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,gBAAgB,EACrF,uBAAuB,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAC,MAAM,EAC5E,UAAU9iD,aAAa,EAAEH,aAAa,EAAES,EAAE,EAAE0vB,eAAe,EAAE9vB,SAAS,EAAEE,cAAc,EACrF2vB,qBAAqB,EAAEmzD,cAAc,EAAE1rE,YAAY,EAAErX,QAAQ,EAAE4mE,IAAI,EAAE;EAElE,IAAI19C,aAAa,GAAG,CAAC,CAAC;EAEtBA,aAAa,CAACysG,iBAAiB,GAAG,UAAUiI,UAAU,EAAEC,qBAAqB,EAAE;IAC3E,OAAO96C,cAAc,CAACkgB,kBAAkB,CAAC,QAAQ,EAAE26B,UAAU,EAAEC,qBAAqB,CAAC;EACzF,CAAC;EAED30G,aAAa,CAAC6rG,qBAAqB,GAAG,UACVjsE,QAAQ,EACRD,MAAM,EACN5J,QAAQ,EACRlvB,UAAU,EACV6K,IAAI,EAAEC,KAAK,EAAE4mF,OAAO,EAAE;IAG9C,IAAIzlG,GAAG,GAAG;MACN+/G,SAAS,EAAE,CAAC,CAACjzE,QAAQ,GAAGjpD,aAAa,CAAC2xD,6BAA6B,CAAC1I,QAAQ,CAAC,GAAG,IAAI;MACpFkzE,OAAO,EAAE,CAAC,CAACnzE,MAAM,GAAGhpD,aAAa,CAAC2xD,6BAA6B,CAAC3I,MAAM,CAAC,GAAG,IAAI;MAC9Ez4B,UAAU,EAAG,CAACL,UAAU,IAAIA,UAAU,IAAI,GAAG,GAAI,IAAI,GAAGA,UAAU;MAClE8sB,QAAQ,EAAG,CAACoC,QAAQ,IAAIA,QAAQ,IAAI,GAAG,GAAI,IAAI,GAAGA,QAAQ;MAC1DgxE,SAAS,EAAG,CAAC,CAACxO,OAAO,IAAI,CAAC,CAACA,OAAO,CAACyO,SAAS,GAAIzO,OAAO,CAACyO,SAAS,GAAG,IAAI;MACxEC,aAAa,EAAG,CAAC,CAAC1O,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC2O,SAAS,GAAI3O,OAAO,CAAC2O,SAAS,GAAG,IAAI;MAC5EvO,IAAI,EAAEjnF,IAAI,GAAGA,IAAI,GAAG,IAAI;MACxBs0F,KAAK,EAAEr0F,KAAK,GAAGA,KAAK,GAAG,IAAI;MAC3BuzF,MAAM,EAAE1uH,aAAa,CAACmkC;IAC1B,CAAC;IAED,OAAOhU,eAAe,CAACklG,qBAAqB,CAAC/4G,GAAG,CAAC;EACrD,CAAC;EAEDkN,aAAa,CAAC40G,kBAAkB,GAAG,UAAUC,KAAK,EAAE;IAChD,IAAIC,KAAK,GAAGD,KAAK;IACjB,QAAQA,KAAK;MACT,KAAK,aAAa;MAClB,KAAK,MAAM;QACPC,KAAK,GAAG/9H,cAAc,CAACe,SAAS,CAAC,MAAM,CAAC;QACxC;MACJ,KAAK,mBAAmB;MACxB,KAAK,aAAa;QACdg9H,KAAK,GAAG/9H,cAAc,CAACe,SAAS,CAAC,aAAa,CAAC;QAC/C;MACJ,KAAK,iBAAiB;MACtB,KAAK,WAAW;QACZg9H,KAAK,GAAG/9H,cAAc,CAACe,SAAS,CAAC,WAAW,CAAC;QAC7C;MACJ,KAAK,gBAAgB;MACrB,KAAK,SAAS;QACVg9H,KAAK,GAAG/9H,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC;QAC3C;MACJ,KAAK,oBAAoB;MACzB,KAAK,eAAe;QAChBg9H,KAAK,GAAG/9H,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC;QAChD;MACJ,KAAK,UAAU;QACXg9H,KAAK,GAAG/9H,cAAc,CAACe,SAAS,CAAC,eAAe,CAAC;QACjD;IACR;IAEA,OAAOg9H,KAAK;EAChB,CAAC;EAED90G,aAAa,CAACgsG,0BAA0B,GAAG,UAAU5hC,eAAe,EAAE;IAClE,OAAOzjE,eAAe,CAACqlG,0BAA0B,CAAC5hC,eAAe,CAAC,CACjE9vF,IAAI,CAAC,UAAUE,IAAI,EAAE;MAClB,IAAImF,GAAG,GAAG,CAAC,CAAC;MACZA,GAAG,CAACo1H,YAAY,GAAG,CAAC;MACpBp1H,GAAG,CAACq1H,UAAU,GAAG,CAAC;MAClBr1H,GAAG,CAACorG,QAAQ,GAAG,EAAE;MACjBprG,GAAG,CAACs1H,cAAc,GAAG,EAAE;MACvBt1H,GAAG,CAACu1H,UAAU,GAAG,CAAC;MAClBv1H,GAAG,CAAC0qC,KAAK,GAAG,EAAE;MACd1qC,GAAG,CAACw1H,gBAAgB,GAAG,CAAC;MACxBx1H,GAAG,CAACy1H,WAAW,GAAG,EAAE;MACpBz1H,GAAG,CAAC01H,cAAc,GAAG,CAAC;MACtB11H,GAAG,CAAC2qC,SAAS,GAAG,EAAE;MAClB3qC,GAAG,CAAC21H,oBAAoB,GAAG,CAAC;MAC5B31H,GAAG,CAAC41H,eAAe,GAAG,EAAE;MACxB51H,GAAG,CAAC61H,YAAY,GAAG,CAAC;MACpB71H,GAAG,CAAC81H,OAAO,GAAG,EAAE;MAChB91H,GAAG,CAAC+lB,YAAY,GAAG,CAAC;MACpB/lB,GAAG,CAACupG,WAAW,GAAG,CAAC;MACnBvpG,GAAG,CAAC+1H,YAAY,GAAG,CAAC;MACpB/1H,GAAG,CAACg2H,aAAa,GAAG,EAAE;MACtBh2H,GAAG,CAACi2H,oBAAoB,GAAG,CAAC,CAAC,CAAC;MAC9Bj2H,GAAG,CAACk2H,eAAe,GAAG,EAAE;MACxBl2H,GAAG,CAACm2H,aAAa,GAAG,CAAC;MACrBn2H,GAAG,CAACo2H,YAAY,GAAG,CAAC;MACpBp2H,GAAG,CAACkkH,QAAQ,GAAGrpH,IAAI,CAACA,IAAI,CAACqpH,QAAQ;MACjClkH,GAAG,CAACq2H,aAAa,GAAG,CAAC;MACrBr2H,GAAG,CAACs2H,SAAS,GAAGz7H,IAAI,CAACA,IAAI,CAACy7H,SAAS;MACnCt2H,GAAG,CAACu2H,QAAQ,GAAG17H,IAAI,CAACA,IAAI,CAAC07H,QAAQ;MACjCv2H,GAAG,CAACw2H,QAAQ,GAAG37H,IAAI,CAACA,IAAI,CAAC27H,QAAQ;;MAEjC;MACA//H,OAAO,CAAC4M,OAAO,CAACxI,IAAI,CAACA,IAAI,CAAC47H,cAAc,EAAE,UAAUlgI,EAAE,EAAE;QACpDA,EAAE,CAACixB,aAAa,GAAGxwB,aAAa,CAACgyE,6BAA6B,CAACzyE,EAAE,CAACixB,aAAa,CAAC;QAChF,IAAIjxB,EAAE,CAACutB,aAAa,IAAI,UAAU,IAAIvtB,EAAE,CAACutB,aAAa,IAAI,gBAAgB,EACtEvtB,EAAE,CAACmlB,MAAM,GAAG,CAACnlB,EAAE,CAACmlB,MAAM;QAE1B1b,GAAG,CAACs1H,cAAc,CAACt4H,IAAI,CAACzG,EAAE,CAAC;QAC3B,IAAImgI,EAAE,GAAG;UACLjpG,QAAQ,EAAEl3B,EAAE,CAACoxB,mBAAmB;UAChCjM,MAAM,EAAEnlB,EAAE,CAACmlB,MAAM;UACjB7hB,IAAI,EAAEtD,EAAE,CAACutB;QACb,CAAC;;QAED;QACA9jB,GAAG,CAACi2H,oBAAoB,IAAI1/H,EAAE,CAACmlB,MAAM;QAErC1b,GAAG,CAACg2H,aAAa,CAACh5H,IAAI,CAAC05H,EAAE,CAAC;MAC9B,CAAC,CAAC;;MAEF;MACA12H,GAAG,CAACkxE,UAAU,GAAEr2E,IAAI,CAACA,IAAI,CAACq2E,UAAU;;MAEpC;MACAz6E,OAAO,CAAC4M,OAAO,CAACxI,IAAI,CAACA,IAAI,CAAC40B,QAAQ,EAAE,UAAUl5B,EAAE,EAAE;QAC9C,IAAI4+H,KAAK,GAAG90G,aAAa,CAAC40G,kBAAkB,CAAC1+H,EAAE,CAACizG,WAAW,CAAC;QAC5D,IAAImtB,OAAO,GAAGpgI,EAAE,CAACkyG,OAAO;QAExBzoG,GAAG,CAACm2H,aAAa,IAAI5/H,EAAE,CAACkyG,OAAO;QAE/B,IAAI,CAAC,CAAClyG,EAAE,CAACiyG,OAAO,EACZmuB,OAAO,GAAGpgI,EAAE,CAACiyG,OAAO;QAExB,IAAIjyG,EAAE,CAACizG,WAAW,IAAI,aAAa,EAAE;UACjCxpG,GAAG,CAAC+lB,YAAY,IAAIxvB,EAAE,CAACkyG,OAAO;UAC9BzoG,GAAG,CAACupG,WAAW,IAAIhzG,EAAE,CAACiyG,OAAO;UAC7BmuB,OAAO,GAAGpgI,EAAE,CAACiyG,OAAO;QACxB;QAEAxoG,GAAG,CAACo2H,YAAY,IAAIO,OAAO;QAE3B,IAAIpgI,EAAE,CAACkyG,OAAO,IAAI,CAAC,IAAIkuB,OAAO,IAAI,CAAC,EAAE;UAEjC32H,GAAG,CAACorG,QAAQ,CAACpuG,IAAI,CAAC;YACdwsG,WAAW,EAAE2rB,KAAK;YAClB1sB,OAAO,EAAElyG,EAAE,CAACkyG,OAAO;YACnBD,OAAO,EAAEmuB,OAAO;YAChBC,IAAI,EAAErgI,EAAE,CAACkyG,OAAO,GAAGkuB,OAAO;YAC1BE,QAAQ,EAAEtgI,EAAE,CAACsgI,QAAQ;YACrBC,WAAW,EAAEvgI,EAAE,CAACugI,WAAW,CAACrpH,GAAG,CAAC,UAASosB,CAAC,EAAC;cACvCA,CAAC,CAACk9F,YAAY,GAAG//H,aAAa,CAACiqB,eAAe,CAAC4Y,CAAC,CAACm9F,WAAW,CAAC;cAC7D,OAAOn9F,CAAC;YACZ,CAAC;UACL,CAAC,CAAC;UAEF,IAAItjC,EAAE,CAACizG,WAAW,IAAI,aAAa,EAAE;YACjCxpG,GAAG,CAACk2H,eAAe,CAACl5H,IAAI,CAAC;cACrBy6B,eAAe,EAAE09F,KAAK;cACtBpvG,YAAY,EAAExvB,EAAE,CAACkyG,OAAO;cACxBc,WAAW,EAAEotB;YACjB,CAAC,CAAC;UACN;QACJ;MACJ,CAAC,CAAC;MAEF32H,GAAG,CAACi3H,qBAAqB,GAAG,CAAC;MAC7Bj3H,GAAG,CAACk3H,iBAAiB,GAAG,CAAC;MAEzBzgI,OAAO,CAAC4M,OAAO,CAACxI,IAAI,CAACA,IAAI,CAACytG,kBAAkB,EAAE,UAAU/xG,EAAE,EAAE;QACxD,IAAIA,EAAE,CAACgyG,WAAW,IAAI,MAAM,EAAE;UAC1B,QAAQhyG,EAAE,CAACizG,WAAW;YAClB,KAAKtyG,SAAS,CAAC8zC,qBAAqB;cAChChrC,GAAG,CAACm3H,cAAc,GAAG5gI,EAAE,CAACkyG,OAAO;cAC/B;YACJ,KAAKvxG,SAAS,CAAC+zC,gBAAgB;cAC3BjrC,GAAG,CAACo3H,SAAS,GAAG7gI,EAAE,CAACkyG,OAAO;cAC1B;YACJ,KAAKvxG,SAAS,CAACi0C,qBAAqB;cAChCnrC,GAAG,CAACq3H,cAAc,GAAG9gI,EAAE,CAACkyG,OAAO;cAC/B;YACJ,KAAKvxG,SAAS,CAACk0C,iBAAiB;cAC5BprC,GAAG,CAACs3H,UAAU,GAAG/gI,EAAE,CAACkyG,OAAO;cAC3B;YACJ,KAAKvxG,SAAS,CAACm0C,eAAe;cAC1BrrC,GAAG,CAACu3H,QAAQ,GAAGhhI,EAAE,CAACkyG,OAAO;cACzB;YACJ,KAAKvxG,SAAS,CAACo0C,mBAAmB;cAC9BtrC,GAAG,CAACw3H,aAAa,GAAGjhI,EAAE,CAACkyG,OAAO;cAC9B;YACJ,KAAKvxG,SAAS,CAACg0C,qBAAqB;cAChClrC,GAAG,CAACq2H,aAAa,GAAG9/H,EAAE,CAACkyG,OAAO;cAC9B;UACR;QACJ,CAAC,MAEG,IAAIlyG,EAAE,CAACgyG,WAAW,IAAI,SAAS,EAAE;UAC7B,QAAQhyG,EAAE,CAACizG,WAAW;YAClB,KAAKtyG,SAAS,CAACu0C,mBAAmB;cAC9BzrC,GAAG,CAACq1H,UAAU,GAAG9+H,EAAE,CAACkyG,OAAO;cAC3B;YACJ,KAAKvxG,SAAS,CAACi0C,qBAAqB;cAChCnrC,GAAG,CAACi3H,qBAAqB,GAAG1gI,EAAE,CAACkyG,OAAO;cACtC;YACJ,KAAKvxG,SAAS,CAACk0C,iBAAiB;cAC5BprC,GAAG,CAACk3H,iBAAiB,GAAG3gI,EAAE,CAACkyG,OAAO;cAClC;YACJ,KAAKvxG,SAAS,CAACs0C,iBAAiB;cAC5BxrC,GAAG,CAACorG,QAAQ,CAACpuG,IAAI,CAAC;gBACdwsG,WAAW,EAAEpyG,cAAc,CAACe,SAAS,CAAC,eAAe,CAAC;gBACtDswG,OAAO,EAAElyG,EAAE,CAACkyG,OAAO;gBACnBD,OAAO,EAAEjyG,EAAE,CAACkyG,OAAO;gBACnBmuB,IAAI,EAAE,CAAC;gBACPE,WAAW,EAAEj8H,IAAI,CAACA,IAAI,CAAC48H,uBAAuB,CAAChqH,GAAG,CAAC,UAASosB,CAAC,EAAC;kBAC1DA,CAAC,CAACk9F,YAAY,GAAG//H,aAAa,CAACiqB,eAAe,CAAC4Y,CAAC,CAACm9F,WAAW,CAAC;kBAC7D,OAAOn9F,CAAC;gBACZ,CAAC;cAEL,CAAC,CAAC;cAEF75B,GAAG,CAACk2H,eAAe,CAACl5H,IAAI,CAAC;gBACrBy6B,eAAe,EAAErgC,cAAc,CAACe,SAAS,CAAC,eAAe,CAAC;gBAC1D4tB,YAAY,EAAExvB,EAAE,CAACkyG,OAAO;gBACxBc,WAAW,EAAEhzG,EAAE,CAACkyG;cACpB,CAAC,CAAC;cAEF;UACR;QACJ,CAAC,MAEG,IAAIlyG,EAAE,CAACgyG,WAAW,IAAI,QAAQ,EAAE;UAC5B,QAAQhyG,EAAE,CAACizG,WAAW;YAClB,KAAKtyG,SAAS,CAACq0C,eAAe;cAC1BvrC,GAAG,CAAC03H,WAAW,GAAGnhI,EAAE,CAACkyG,OAAO;cAC5B;UACR;QAEJ;MAEZ,CAAC,CAAC;MAEFzoG,GAAG,CAACo1H,YAAY,IAAIp1H,GAAG,CAACq1H,UAAU,GAAGr1H,GAAG,CAACi3H,qBAAqB,GAAGj3H,GAAG,CAACk3H,iBAAiB;MAEtF,IAAIl3H,GAAG,CAACkkH,QAAQ,EAAE;QACdlkH,GAAG,CAAC+lB,YAAY,IAAI/lB,GAAG,CAACi2H,oBAAoB;MAChD,CAAC,MACI;QACDx/H,OAAO,CAAC4M,OAAO,CAACrD,GAAG,CAACorG,QAAQ,EAAE,UAAU70G,EAAE,EAAE;UACxC,IAAIA,EAAE,CAACizG,WAAW,CAACt7F,WAAW,CAAC,CAAC,IAAI,MAAM,EAAE;YACxC;YACA3X,EAAE,CAACiyG,OAAO,IAAIxoG,GAAG,CAACi2H,oBAAoB;YACtC1/H,EAAE,CAACqgI,IAAI,GAAGrgI,EAAE,CAACkyG,OAAO,GAAGlyG,EAAE,CAACiyG,OAAO;UACrC;QACJ,CAAC,CAAC;MACN;MAEA,IAAI,CAACxoG,GAAG,CAACkkH,QAAQ,EAAE;QACflkH,GAAG,CAAC+lB,YAAY,IAAI/lB,GAAG,CAACi2H,oBAAoB;MAChD;MAEAj2H,GAAG,CAAC+1H,YAAY,GAAG/1H,GAAG,CAAC+lB,YAAY,GAAG/lB,GAAG,CAACi2H,oBAAoB;MAE9Dj2H,GAAG,CAACm2H,aAAa,GAAGn2H,GAAG,CAAC+lB,YAAY;MACpC/lB,GAAG,CAACo2H,YAAY,GAAGp2H,GAAG,CAACupG,WAAW;MAClCvpG,GAAG,CAAC23H,iBAAiB,GAAG33H,GAAG,CAACupG,WAAW;MAEvC,IAAI,CAACvpG,GAAG,CAACkkH,QAAQ,EAAE;QACflkH,GAAG,CAAC23H,iBAAiB,IAAI33H,GAAG,CAACi2H,oBAAoB;MACrD;MAEAx/H,OAAO,CAAC4M,OAAO,CAACrD,GAAG,CAACk2H,eAAe,EAAE,UAAU3/H,EAAE,EAAE;QAC/CyJ,GAAG,CAACm2H,aAAa,IAAI5/H,EAAE,CAACwvB,YAAY;QACpC/lB,GAAG,CAACo2H,YAAY,IAAI7/H,EAAE,CAACgzG,WAAW;MACtC,CAAC,CAAC;MAEFvpG,GAAG,CAAC43H,eAAe,GAAG,EAAE;MACxBnhI,OAAO,CAAC4M,OAAO,CAACxI,IAAI,CAACA,IAAI,CAACg9H,WAAW,EAAE,UAAUthI,EAAE,EAAE;QACjDA,EAAE,CAACkhC,eAAe,GAAGpX,aAAa,CAAC40G,kBAAkB,CAAC1+H,EAAE,CAACuhI,WAAW,CAAC;QACrEvhI,EAAE,CAACwhI,KAAK,GAAG/gI,aAAa,CAACiyE,mBAAmB,CAAC1yE,EAAE,CAAC67B,IAAI,CAAC;QACrDpyB,GAAG,CAAC43H,eAAe,CAAC56H,IAAI,CAACzG,EAAE,CAAC;QAC5B,QAAQA,EAAE,CAACyD,MAAM;UACb,KAAK,OAAO;YACRgG,GAAG,CAAC0qC,KAAK,CAAC1tC,IAAI,CAACzG,EAAE,CAAC;YAClByJ,GAAG,CAACu1H,UAAU,IAAIh/H,EAAE,CAACmlB,MAAM;YAC3B;UACJ,KAAK,cAAc;YACf1b,GAAG,CAACy1H,WAAW,CAACz4H,IAAI,CAACzG,EAAE,CAAC;YACxByJ,GAAG,CAACw1H,gBAAgB,IAAIj/H,EAAE,CAACmlB,MAAM;YACjC;UACJ,KAAK,WAAW;YACZ1b,GAAG,CAAC2qC,SAAS,CAAC3tC,IAAI,CAACzG,EAAE,CAAC;YACtByJ,GAAG,CAAC01H,cAAc,IAAIn/H,EAAE,CAACmlB,MAAM;YAC/B;UACJ,KAAK,kBAAkB;YACnB1b,GAAG,CAAC41H,eAAe,CAAC54H,IAAI,CAACzG,EAAE,CAAC;YAC5ByJ,GAAG,CAAC21H,oBAAoB,IAAIp/H,EAAE,CAACmlB,MAAM;YACrC;UACJ,KAAK,QAAQ;YACT,IAAInlB,EAAE,CAACmlB,MAAM,GAAG,CAAC,EACbnlB,EAAE,CAACmlB,MAAM,GAAG,CAACnlB,EAAE,CAACmlB,MAAM;YAC1B1b,GAAG,CAAC81H,OAAO,CAAC94H,IAAI,CAACzG,EAAE,CAAC;YACpByJ,GAAG,CAAC61H,YAAY,IAAIt/H,EAAE,CAACmlB,MAAM;YAC7B;QACR;MACJ,CAAC,CAAC;;MAEF;MACA,IAAIs8G,EAAE,GAAGh4H,GAAG,CAACorG,QAAQ,CAAC1uG,MAAM,CAAC,UAAUnG,EAAE,EAAE;QAAE,OAAOA,EAAE,CAACsgI,QAAQ,KAAK,IAAI;MAAC,CAAC,CAAC;MAC3E,IAAIoB,EAAE,GAAGj4H,GAAG,CAACorG,QAAQ,CAAC1uG,MAAM,CAAC,UAAUnG,EAAE,EAAE;QAAE,OAAOA,EAAE,CAACsgI,QAAQ,KAAK,IAAI;MAAC,CAAC,CAAC,CAACv/E,IAAI,CAAC,UAAUn0C,CAAC,EAAE8N,CAAC,EAAE;QAC7F,OAAO9N,CAAC,CAACqmG,WAAW,GAAGv4F,CAAC,CAACu4F,WAAW,GAAG,CAAC,CAAC,GAClCrmG,CAAC,CAACqmG,WAAW,GAAGv4F,CAAC,CAACu4F,WAAW,GAAG,CAAC,GAAG,CAAC;MAChD,CAAC,CAAC;MAEFxpG,GAAG,CAACorG,QAAQ,GAAG4sB,EAAE,CAAC5vH,MAAM,CAAC6vH,EAAE,CAAC;;MAE5B;MACA,IAAIC,KAAK,GAAGlhI,aAAa,CAAC6uB,SAAS,CAAC7lB,GAAG,CAACupG,WAAW,GAAGvpG,GAAG,CAAC+lB,YAAY,EAAE,CAAC,CAAC;MAC1E,IAAIoyG,SAAS,GAAG,CAAC,CAACn4H,GAAG,CAACs2H,SAAS,GAAGt/H,aAAa,CAACgyE,6BAA6B,CAAChpE,GAAG,CAACs2H,SAAS,CAAC,GAAG,EAAE;MAEjG,IAAI4B,KAAK,IAAI,CAAC,EAAE;QACZ,IAAIxB,EAAE,GAAG;UACLlvG,aAAa,EAAE2wG,SAAS;UACxBz8G,MAAM,EAAEw8G,KAAK;UACbp0G,aAAa,EAAEo0G,KAAK,GAAG,CAAC,GAAG,wBAAwB,GAAG;QAC1D,CAAC;QACDl4H,GAAG,CAACs1H,cAAc,CAACxwH,OAAO,CAAC4xH,EAAE,CAAC;MAClC;MAEA,IAAI,CAAC,CAACyB,SAAS,EAAE;QACb,IAAIzB,EAAE,GAAG;UACLh7G,MAAM,EAAE1b,GAAG,CAACupG,WAAW;UACvBzlF,aAAa,EAAE,sBAAsB;UACrC0D,aAAa,EAAE2wG;QACnB,CAAC;QACDn4H,GAAG,CAACs1H,cAAc,CAACxwH,OAAO,CAAC4xH,EAAE,CAAC;MAClC;;MAEA;MACA,IAAG,CAAC,CAAC77H,IAAI,CAACA,IAAI,CAACu9H,WAAW,EAAE;QACxBp4H,GAAG,CAACq4H,oBAAoB,GAAGt6D,IAAI,CAACqB,WAAW,CAAC/+C,aAAa,CAACi4G,2BAA2B,CAACz9H,IAAI,CAACA,IAAI,CAACu9H,WAAW,CAAC,CAAC;MACjH;MAEA,IAAI96G,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBmb,QAAQ,CAAClb,OAAO,CAACpC,GAAG,CAAC;MACrB,OAAOsd,QAAQ,CAACjb,OAAO;IAC3B,CAAC,CAAC;EACN,CAAC;EAEDge,aAAa,CAACk4G,sBAAsB,GAAG,UAAUjgH,GAAG,EAAEkgH,MAAM,EAAE;IAC1D/hI,OAAO,CAAC4M,OAAO,CAACm1H,MAAM,EAAE,UAAUz/G,CAAC,EAAE;MACjC,IAAI,CAAC,CAACT,GAAG,CAACS,CAAC,CAAC,EAAE;QACVT,GAAG,CAACS,CAAC,CAAC,GAAG4H,OAAO,CAAC,UAAU,CAAC,CAACrI,GAAG,CAACS,CAAC,CAAC,EAAE,EAAE,CAAC;MAC5C,CAAC,MAEGT,GAAG,CAACS,CAAC,CAAC,GAAG4H,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC3C,CAAC,CAAC;EACN,CAAC;EAEDN,aAAa,CAACy8F,wBAAwB,GAAG,UAAUh5E,GAAG,EAAE00F,MAAM,EAAE97H,MAAM,EAAE;IACpEjG,OAAO,CAAC4M,OAAO,CAACm1H,MAAM,EAAE,UAAUz/G,CAAC,EAAE;MACjC,IAAI0mD,EAAE,GAAG,IAAI,GAAG1mD,CAAC,GAAG,IAAI;MACxB,IAAI0/G,GAAG,GAAG,IAAI,GAAG1/G,CAAC,GAAG,KAAK,GAAGrc,MAAM,GAAG,IAAI;MAC1C,OAAOonC,GAAG,CAAC99B,OAAO,CAACy5D,EAAE,CAAC,IAAI,CAAC,EAAE;QACzB37B,GAAG,GAAGA,GAAG,CAACxtB,OAAO,CAACmpD,EAAE,EAAEg5D,GAAG,CAAC;MAC9B;IACJ,CAAC,CAAC;IAEF,OAAO30F,GAAG;EACd,CAAC;EAEDzjB,aAAa,CAAC4sG,kBAAkB,GAAG,UAAUyL,IAAI,EAAEF,MAAM,EAAE;IACvD/hI,OAAO,CAAC4M,OAAO,CAACm1H,MAAM,EAAE,UAAUz/G,CAAC,EAAE;MACjC,IAAI0mD,EAAE,GAAG,GAAG,GAAG1mD,CAAC,CAACi+B,GAAG,GAAG,GAAG;MAC1B,IAAIyhF,GAAG,GAAG1/G,CAAC,CAAC7M,KAAK;MACjB,OAAOwsH,IAAI,CAAC1yH,OAAO,CAACy5D,EAAE,CAAC,IAAI,CAAC,EAAE;QAC1Bi5D,IAAI,GAAGA,IAAI,CAACpiH,OAAO,CAACmpD,EAAE,EAAEg5D,GAAG,CAAC;MAChC;IACJ,CAAC,CAAC;IAEF,OAAOC,IAAI;EACf,CAAC;EAEDr4G,aAAa,CAAC8E,yBAAyB,GAAG,UAAUqkC,KAAK,EAAElxC,GAAG,EAAE;IAC5D,OAAO4hE,cAAc,CAACkgB,kBAAkB,CAAC,IAAI,CAAC,CAC7Cz/F,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAEjBk6E,cAAc,CAAConC,qCAAqC,CAAC93D,KAAK,EAAElxC,GAAG,CAAC;MAChE,IAAIwrB,GAAG,GAAGzjB,aAAa,CAACy8F,wBAAwB,CAAC98G,GAAG,CAAC2vF,QAAQ,EAAE,CAAC,iDAAiD,CAAC,EAAE,UAAU,CAAC;MAC/HnhF,YAAY,CAACy7C,oBAAoB,CAACT,KAAK,EAAE/uD,CAAC,CAAC,sBAAsB,CAAC,EAAE;QAAEw0G,YAAY,EAAE;MAAM,CAAC,EAAEnrE,GAAG,CAAC;MACjG,IAAIxmB,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAEzBhL,QAAQ,CAAC,YAAY;QACjBmmB,QAAQ,CAAClb,OAAO,CAAC,IAAI,CAAC;MAC1B,CAAC,CAAC;MAEF,OAAOkb,QAAQ,CAACjb,OAAO;IAC3B,CAAC,CAAC,CACD1H,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBvF,CAAC,CAAC,yBAAyB,CAAC,CAAC+R,IAAI,CAAC,CAAC;MACnC,OAAOgC,YAAY,CAACklF,YAAY,CAACj5F,CAAC,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;IAC/E,CAAC,CAAC;EACN,CAAC;EAED4lB,aAAa,CAACs4G,yBAAyB,GAAG,UAAUnvE,KAAK,EAAElxC,GAAG,EAAEpe,QAAQ,EAAE;IACtE,OAAOggF,cAAc,CAACkgB,kBAAkB,CAAC,IAAI,CAAC,CAC7Cz/F,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAEjBk6E,cAAc,CAAC2nC,oCAAoC,CAACr4D,KAAK,EAAElxC,GAAG,EAAEpe,QAAQ,CAAC;MACzEsU,YAAY,CAACy7C,oBAAoB,CAACT,KAAK,EAAE/uD,CAAC,CAAC,qCAAqC,CAAC,EAAE;QAAEw0G,YAAY,EAAE;MAAM,CAAC,EAAEjvG,GAAG,CAAC2vF,QAAQ,CAAC;MACzH,IAAIryE,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAEzBhL,QAAQ,CAAC,YAAY;QACjBmmB,QAAQ,CAAClb,OAAO,CAAC,IAAI,CAAC;MAC1B,CAAC,CAAC;MAEF,OAAOkb,QAAQ,CAACjb,OAAO;IAC3B,CAAC,CAAC,CACD1H,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBvF,CAAC,CAAC,uDAAuD,CAAC,CAAC+R,IAAI,CAAC,CAAC;MACjE,OAAOgC,YAAY,CAACklF,YAAY,CAACj5F,CAAC,CAAC,uDAAuD,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;IAC7G,CAAC,CAAC;EACN,CAAC;EAED4lB,aAAa,CAAC2yG,sBAAsB,GAAG,YAAY;IAC/C,IAAI9xE,IAAI,GAAG;MACPr4B,MAAM,EAAEhyB,aAAa,CAACmkC,WAAW;MACjC49F,QAAQ,EAAE;IACd,CAAC;IAED,OAAO5xG,eAAe,CAAC6xG,8BAA8B,CAAC33E,IAAI,CAAC;EAC/D,CAAC;EAED7gC,aAAa,CAACgzG,sBAAsB,GAAG,UAAUnyE,IAAI,EAAE;IACnD,OAAOl6B,eAAe,CAACqsG,sBAAsB,CAACnyE,IAAI,CAAC;EACvD,CAAC;EAED7gC,aAAa,CAACu0G,gBAAgB,GAAE,UAAU1zE,IAAI,EAAE;IAC5C,OAAOl6B,eAAe,CAAC4tG,gBAAgB,CAAC1zE,IAAI,CAAC;EACjD,CAAC;EAED7gC,aAAa,CAACy0G,mBAAmB,GAAE,UAAU5zE,IAAI,EAAE;IAC/C,OAAOl6B,eAAe,CAAC8tG,mBAAmB,CAAC5zE,IAAI,CAAC;EACpD,CAAC;EAED7gC,aAAa,CAACw0G,qBAAqB,GAAE,UAAU3zE,IAAI,EAAE;IACjD,OAAOl6B,eAAe,CAAC6tG,qBAAqB,CAAC3zE,IAAI,CAAC;EACtD,CAAC;EAED7gC,aAAa,CAACg0G,4BAA4B,GAAE,UAAUnzE,IAAI,EAAE;IACxD,OAAOl6B,eAAe,CAACqtG,4BAA4B,CAACnzE,IAAI,CAAC;EAC7D,CAAC;EAED7gC,aAAa,CAACk0G,+BAA+B,GAAE,UAAUrzE,IAAI,EAAE;IAC3D,OAAOl6B,eAAe,CAACutG,+BAA+B,CAACrzE,IAAI,CAAC;EAChE,CAAC;EAED7gC,aAAa,CAACi0G,iCAAiC,GAAE,UAAUpzE,IAAI,EAAE;IAC7D,OAAOl6B,eAAe,CAACstG,iCAAiC,CAACpzE,IAAI,CAAC;EAClE,CAAC;EAED7gC,aAAa,CAAC+wG,mBAAmB,GAAG,UAAUlwE,IAAI,EAAE;IAChD,OAAOl6B,eAAe,CAACoqG,mBAAmB,CAAClwE,IAAI,CAAC;EACpD,CAAC;EAED7gC,aAAa,CAACixG,sBAAsB,GAAG,UAAUpwE,IAAI,EAAE;IACnD,OAAOl6B,eAAe,CAACsqG,sBAAsB,CAACpwE,IAAI,CAAC;EACvD,CAAC;EAED7gC,aAAa,CAACgxG,wBAAwB,GAAG,UAAUnwE,IAAI,EAAE;IACrD,OAAOl6B,eAAe,CAACqqG,wBAAwB,CAACnwE,IAAI,CAAC;EACzD,CAAC;EAED7gC,aAAa,CAACswG,mBAAmB,GAAG,UAAUzvE,IAAI,EAAE;IAChD,OAAOl6B,eAAe,CAAC2pG,mBAAmB,CAACzvE,IAAI,CAAC;EACpD,CAAC;EAED7gC,aAAa,CAACywG,wBAAwB,GAAG,UAAU5vE,IAAI,EAAE;IACrD,OAAOl6B,eAAe,CAAC8pG,wBAAwB,CAAC5vE,IAAI,CAAC;EACzD,CAAC;EAED7gC,aAAa,CAAC0wG,sBAAsB,GAAG,UAAU7vE,IAAI,EAAE;IACnD,OAAOl6B,eAAe,CAAC+pG,sBAAsB,CAAC7vE,IAAI,CAAC;EACvD,CAAC;EAED7gC,aAAa,CAAC+tG,kBAAkB,GAAG,UAAUltE,IAAI,EAAE;IAC/C,OAAOl6B,eAAe,CAAConG,kBAAkB,CAACltE,IAAI,CAAC;EACnD,CAAC;EAED7gC,aAAa,CAACkvG,qBAAqB,GAAG,UAAUruE,IAAI,EAAE;IAClD,OAAOl6B,eAAe,CAACuoG,qBAAqB,CAACruE,IAAI,CAAC;EACtD,CAAC;EAED7gC,aAAa,CAACgvG,uBAAuB,GAAG,UAAUnuE,IAAI,EAAE;IACpD,OAAOl6B,eAAe,CAACqoG,uBAAuB,CAACnuE,IAAI,CAAC;EACxD,CAAC;EAED7gC,aAAa,CAACy4G,mBAAmB,GAAG,UAAU53E,IAAI,EAAE;IAChD,OAAOl6B,eAAe,CAAC8xG,mBAAmB,CAAC53E,IAAI,CAAC;EACpD,CAAC;EAED7gC,aAAa,CAAC04G,sBAAsB,GAAG,UAAU73E,IAAI,EAAE;IACnD,OAAOl6B,eAAe,CAAC+xG,sBAAsB,CAAC73E,IAAI,CAAC;EACvD,CAAC;EAED7gC,aAAa,CAAC24G,wBAAwB,GAAG,UAAU93E,IAAI,EAAE;IACrD,OAAOl6B,eAAe,CAACgyG,wBAAwB,CAAC93E,IAAI,CAAC;EACzD,CAAC;EAED7gC,aAAa,CAAC4zG,+BAA+B,GAAG,UAAU/yE,IAAI,EAAE;IAC5D,OAAOl6B,eAAe,CAACitG,+BAA+B,CAAC/yE,IAAI,CAAC;EAChE,CAAC;EAED7gC,aAAa,CAAC2zG,iCAAiC,GAAG,UAAU9yE,IAAI,EAAE;IAC9D,OAAOl6B,eAAe,CAACgtG,iCAAiC,CAAC9yE,IAAI,CAAC;EAClE,CAAC;EAED7gC,aAAa,CAAC44G,eAAe,GAAG,UAAU/3E,IAAI,EAAE;IAC5C,OAAOl6B,eAAe,CAACiyG,eAAe,CAAC/3E,IAAI,CAAC,CAC3CvmD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAIk5H,WAAW,GAAG,CAAC;MACnB,IAAIC,aAAa,GAAG,CAAC;MACrB,IAAIC,YAAY,GAAG,CAAC;MACpB,IAAIC,mBAAmB,GAAG,CAAC;MAC3B5iI,OAAO,CAAC4M,OAAO,CAACrD,GAAG,CAACnF,IAAI,EAAE,UAAUtE,EAAE,EAAE;QACpC2iI,WAAW,IAAI3iI,EAAE,CAAC+iI,YAAY;QAC9BH,aAAa,IAAI5iI,EAAE,CAACgjI,cAAc;QAClCH,YAAY,IAAI7iI,EAAE,CAAC8D,YAAY;QAC/Bg/H,mBAAmB,IAAI9iI,EAAE,CAACijI,cAAc;MAC5C,CAAC,CAAC;MAEF,IAAIl8G,QAAQ,GAAGhmB,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBmb,QAAQ,CAAClb,OAAO,CAAC;QACbvH,IAAI,EAAEmF,GAAG,CAACnF,IAAI;QACdq+H,WAAW,EAAEA,WAAW;QACxBC,aAAa,EAAEA,aAAa;QAC5BC,YAAY,EAAEA,YAAY;QAC1BC,mBAAmB,EAAEA;MACzB,CAAC,CAAC;MACF,OAAO/7G,QAAQ,CAACjb,OAAO;IAC3B,CAAC,CAAC;EACN,CAAC;EAEDge,aAAa,CAACi4G,2BAA2B,GAAG,UAASl9B,MAAM,EAAE;IACzD,IAAI9iF,GAAG,GAAG+V,IAAI,CAAC2T,KAAK,CAACo5D,MAAM,CAAC;IAC5B,IAAIj5E,GAAG,GAAG1nB,CAAC,CAAC,aAAa,CAAC;IAE1BhE,OAAO,CAAC4M,OAAO,CAACiV,GAAG,CAACmhH,WAAW,EAAE,UAASC,IAAI,EAAC;MAC3C,IAAIC,OAAO,GAAGD,IAAI,CAAC95G,MAAM;MACzB,IAAI3a,IAAI,GAACy0H,IAAI,CAACz0H,IAAI;MAClB,IAAIiH,KAAK,GAAGwtH,IAAI,CAACxtH,KAAK;MAEtB,IAAI3V,EAAE,GAAGkE,CAAC,CAAC,aAAa,CAAC;MAEzB,IAAGwK,IAAI,IAAE,MAAM,EAAE;QACb,IAAG00H,OAAO,CAAC3zH,OAAO,CAAC,MAAM,CAAC,IAAE,CAAC,EACzBzP,EAAE,CAACwd,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC;QACjC,IAAG4lH,OAAO,CAAC3zH,OAAO,CAAC,cAAc,CAAC,IAAE,CAAC,EACjCzP,EAAE,CAACwd,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC;QAC/B,IAAG4lH,OAAO,CAAC3zH,OAAO,CAAC,eAAe,CAAC,IAAE,CAAC,EAClCzP,EAAE,CAACwd,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC;QAC/Bxd,EAAE,CAACsI,IAAI,CAACqN,KAAK,CAAC;MAClB,CAAC,MAAM,IAAGjH,IAAI,IAAE,aAAa,EAAE;QAC3B,IAAI1O,EAAE,GAAGkE,CAAC,CAAC,OAAO,GAACyR,KAAK,CAACoK,OAAO,CAAC,IAAIs3E,MAAM,CAAC,IAAI,EAAC,GAAG,CAAC,EAAE,OAAO,CAAC,GAAC,QAAQ,CAAC;MAC7E,CAAC,MAAM,IAAG3oF,IAAI,IAAE,uBAAuB,EAAE;QACrC,IAAI1O,EAAE,GAAGkE,CAAC,CAAC,kFAAkF,CAAC;MAClG;MAEA0nB,GAAG,CAAC0vC,MAAM,CAACt7D,EAAE,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO4rB,GAAG,CAAC/L,IAAI,CAAC,CAAC;EACrB,CAAC;EAEDiK,aAAa,CAACu5G,kBAAkB,GAAG,UAAU14E,IAAI,EAAE;IAC/C,OAAOl6B,eAAe,CAAC4yG,kBAAkB,CAAC14E,IAAI,CAAC;EACnD,CAAC;EAED7gC,aAAa,CAACw5G,oBAAoB,GAAG,UAAU34E,IAAI,EAAE;IACjD,OAAOl6B,eAAe,CAAC6yG,oBAAoB,CAAC34E,IAAI,CAAC;EACrD,CAAC;EAED,OAAO7gC,aAAa;AACxB,CAAC,CACJ,CAAC,C;;;;;;;;;;ACnkBN5pB,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,6BAA6B,EAC9D,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAC1G,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAC9H,UAAUC,MAAM,EAAEC,UAAU,EAAEM,SAAS,EAAEipB,YAAY,EAAEhpB,QAAQ,EAAEL,YAAY,EAAED,aAAa,EAAE0pB,SAAS,EACnGvpB,aAAa,EAAEqpB,aAAa,EAAEizB,gBAAgB,EAAEl8C,cAAc,EAAEoX,YAAY,EAAElX,EAAE,EAAEi0H,YAAY,EAAEgC,UAAU,EAAE;EAE5G32H,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE1pB,SAAS,CAACoyC;EAAgC,CAAC,CAAC,CAAC,CAAC;;EAEzG,IAAI,CAACnpB,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;EACJ;EAEApqB,MAAM,CAAC82H,kBAAkB,GAAG,CAAC;EAC7B92H,MAAM,CAAC+2H,uBAAuB,GAAG,CAAC;EAClC/2H,MAAM,CAACmjI,gBAAgB,GAAG,CAAC;EAC3BnjI,MAAM,CAACkE,IAAI,GAAG,EAAE;EAEhBlE,MAAM,CAACmB,IAAI,GAAG,EAAE;EAChBnB,MAAM,CAACsY,UAAU,GAAGjY,aAAa,CAACkY,6BAA6B,CAAC,CAAC;EAEjEvY,MAAM,CAACgrD,UAAU,GAAG1rD,kBAAkB,CAACw3C,QAAQ,IAAI,KAAK;EAExD92C,MAAM,CAACojI,WAAW,GAAG,CAAC;IAClB54H,EAAE,EAAE,UAAU;IACdZ,IAAI,EAAE;EACV,CAAC,EACD;IACIY,EAAE,EAAE,MAAM;IACVZ,IAAI,EAAE;EACV,CAAC,CAAC;EAEF5J,MAAM,CAAC8qD,aAAa,GAAG;IACnBxB,QAAQ,EAAEjpD,aAAa,CAAC0qD,gBAAgB,CAAC,IAAItvB,IAAI,CAAC,CAAC,CAAC;IACpD4tB,MAAM,EAAEhpD,aAAa,CAAC0qD,gBAAgB,CAAC,IAAItvB,IAAI,CAAC,CAAC,CAAC;IAClDgkB,QAAQ,EAAE,IAAI;IACdnxC,IAAI,EAAE;EACV,CAAC;EAEDtO,MAAM,CAACksD,oBAAoB,GAAG,UAAShiD,IAAI,EAAEiiD,EAAE,EAAC;IAC5CnsD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,GAAGp/C,IAAI;IACpClK,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,GAAG8C,EAAE;IAChCnsD,MAAM,CAACw3H,SAAS,CAAC,CAAC;EACtB,CAAC;EAEDh3H,QAAQ,CAAC,YAAY;IACjBR,MAAM,CAACmB,IAAI,GAAG,QAAQ;IAEtBX,QAAQ,CAAC,YAAY;MACjB0E,WAAW,CAAC,CAAC;MACb1E,QAAQ,CAAC,YAAY;QAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAAE,CAAC,CAAC;IACpE,CAAC,CAAC;IAEFxE,MAAM,CAACw3H,SAAS,CAAC,CAAC;EACtB,CAAC,CAAC;EAEFx3H,MAAM,CAACqV,SAAS,GAAG,IAAI;EACvBrV,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,UAAU2W,GAAG,EAAE;IAErC,IAAIhZ,MAAM,CAACqV,SAAS,EAAE;MAClBrV,MAAM,CAACqV,SAAS,GAAG,KAAK;IAC5B;EACJ,CAAC,CAAC;EAEFrV,MAAM,CAAC0I,MAAM,CAAC,oBAAoB,EAAE,UAASE,QAAQ,EAAED,QAAQ,EAAE;IAC7D,IAAGC,QAAQ,IAAID,QAAQ,EAAE;MACrB3I,MAAM,CAACw3H,SAAS,CAAC,CAAC;IACtB;EACJ,CAAC,CAAC;EAEFx3H,MAAM,CAACs8H,WAAW,GAAG,YAAY;IAC7B,OAAOt8H,MAAM,CAACo4H,UAAU,CAACxnH,MAAM,KAAK,KAAK;EAC7C,CAAC;EAED5Q,MAAM,CAACw3H,SAAS,GAAG,YAAY;IAC3B,IAAIjtE,IAAI,GAAG;MACPgyE,SAAS,EAAEl8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,CAAC;MACrFkzE,OAAO,EAAEn8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,CAAC;MACjFnmD,IAAI,EAAElD,MAAM,CAAC8qD,aAAa,CAACx8C;IAC/B,CAAC;IAED,IAAIi8C,IAAI,CAACgyE,SAAS,GAAGhyE,IAAI,CAACiyE,OAAO,EAAE;MAC/Br8H,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,gEAAgE,CAAC,CAAC;MAClH;IACJ;IAEAsC,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACkE,IAAI,GAAG,EAAE;IAChBlE,MAAM,CAAC82H,kBAAkB,GAAG,CAAC;IAC7B92H,MAAM,CAAC+2H,uBAAuB,GAAG,CAAC;IAClC/2H,MAAM,CAACmjI,gBAAgB,GAAG,CAAC;IAE3BnjI,MAAM,CAACuqB,eAAe,GAAGlqB,aAAa,CAACmqB,2BAA2B;IAElE,OAAOd,aAAa,CAAC44G,eAAe,CAAC/3E,IAAI,CAAC,CACzCvmD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBrJ,MAAM,CAACkE,IAAI,GAAGmF,GAAG,CAACnF,IAAI;MAEtBJ,CAAC,CAACmC,IAAI,CAACoD,GAAG,CAACnF,IAAI,EAAE,UAASgC,GAAG,EAAEtG,EAAE,EAAE;QAC/BA,EAAE,CAACyjI,YAAY,GAAGzjI,EAAE,CAAC67B,IAAI,GAAGz7B,MAAM,CAACuqB,eAAe,CAAC3qB,EAAE,CAAC67B,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;MAC1E,CAAC,CAAC;MAEFz7B,MAAM,CAACkE,IAAI,CAACiK,OAAO,CAAC;QAChBzL,IAAI,EAAE,QAAQ;QACdigI,YAAY,EAAEt5H,GAAG,CAACk5H,WAAW;QAC7BK,cAAc,EAAE,CAACv5H,GAAG,CAACm5H,aAAa;QAClC9+H,YAAY,EAAE2F,GAAG,CAACo5H,YAAY;QAC9BI,cAAc,EAAEx5H,GAAG,CAACq5H;MACxB,CAAC,CAAC;MAEF1iI,MAAM,CAACo4H,UAAU,CAACrzH,YAAY,CAAC,CAAC;MAEhCjB,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACI,CAAC,UAAUF,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;;EAED;EACAnE,MAAM,CAACq4H,iBAAiB,GAAG,YAAY;IACnC,OAAO,IAAI;EACf,CAAC;EAEDr4H,MAAM,CAACo2H,WAAW,GAAG,UAAUC,SAAS,EAAEhyD,YAAY,EAAE;IACpDvgE,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAIwmD,IAAI,GAAG;MACPgyE,SAAS,EAAEl8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,CAAC;MACrFkzE,OAAO,EAAEn8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,CAAC;MACjFnmD,IAAI,EAAElD,MAAM,CAAC8qD,aAAa,CAACx8C;IAC/B,CAAC;IAED,IAAIi8C,IAAI,CAACgyE,SAAS,GAAGhyE,IAAI,CAACiyE,OAAO,EAAE;MAC/Br8H,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,gEAAgE,CAAC,CAAC;MAClH;IACJ;IAEA,IAAIkJ,KAAK,GAAG2rH,SAAS,CAAC3iH,UAAU;IAChC,IAAI2wD,YAAY,GAAGA,YAAY,CAAC3wD,UAAU;IAE1C62C,IAAI,CAACiuE,OAAO,GAAG9tH,KAAK;IACpB6/C,IAAI,CAACkuE,OAAO,GAAGp0D,YAAY;IAEvB,OAAO36C,aAAa,CAACw5G,oBAAoB,CAAC34E,IAAI,CAAC,CAC9CvmD,IAAI,CAAC,UAAUyjB,MAAM,EAAE;MACpB3jB,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC+L,WAAW,CAAC,2BAA2B,CAAC;;MAEtD;MACApM,MAAM,CAACu2H,qBAAqB,GAAG,IAAI;MACnCl2H,aAAa,CAAC8E,UAAU,CAAC,wBAAwB,CAAC;IACtD,CAAC,CAAC,SACI,CAAC,UAAUhB,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC+L,WAAW,CAAC,2BAA2B,CAAC;MACtDpM,MAAM,CAACu2H,qBAAqB,GAAG,KAAK;MACpCl2H,aAAa,CAAC8E,UAAU,CAAC,wBAAwB,CAAC;IACtD,CAAC,CAAC;EACV,CAAC;EAEDnF,MAAM,CAAC24H,YAAY,GAAG,YAAY;IAC9B70H,CAAC,CAACC,OAAO,CAAC,CAAC;IACX;IACA,IAAIu/H,KAAK,GAAGtjI,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,CAAC3pC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;IAC7D,IAAI4jH,GAAG,GAAGvjI,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,CAAC1pC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;IAEzD7b,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAIwmD,IAAI,GAAG;MACPgyE,SAAS,EAAEl8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,CAAC;MACrFkzE,OAAO,EAAEn8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,CAAC;MACjFnmD,IAAI,EAAElD,MAAM,CAAC8qD,aAAa,CAACx8C;IAC/B,CAAC;IAED,IAAIi8C,IAAI,CAACgyE,SAAS,GAAGhyE,IAAI,CAACiyE,OAAO,EAAE;MAC/Br8H,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,gEAAgE,CAAC,CAAC;MAClH;IACJ;IAEA,OAAOkoB,aAAa,CAACu5G,kBAAkB,CAAC14E,IAAI,CAAC,CAC5CvmD,IAAI,CAAC,UAAUwxC,GAAG,EAAE;MACjB,IAAIt1C,aAAa,CAAC2L,QAAQ,EACtB,OAAO+qH,UAAU,CAACjgF,cAAc,CAACnB,GAAG,CAACtxC,IAAI,EAAE,oBAAoB,GAACo/H,KAAK,GAAG,GAAG,GAAGC,GAAG,GAAE,MAAM,CAAC,CACzFv/H,IAAI,CAAC,UAAU8oB,IAAI,EAAE;QAClB,IAAIvhB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzB1H,CAAC,CAACO,SAAS,CAAC,CAAC;QAEbhE,aAAa,CAACowE,cAAc,CAAC;UACzBr8D,KAAK,EAAE,EAAE;UACTqiC,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,wBAAwB,GAACsrB,IAAI;QAChE,CAAC,EAAE,YAAY;UACXvhB,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAC1B,CAAC,CAAC;QAGF,OAAOF,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC,CAAC,KAEH,OAAOkrH,UAAU,CAAC9gF,WAAW,CAACN,GAAG,CAACtxC,IAAI,EAAE,oBAAoB,GAACo/H,KAAK,GAAG,GAAG,GAAGC,GAAG,GAAE,MAAM,CAAC;IAC/F,CAAC,CAAC,CACDv/H,IAAI,CAAC,YAAY;MACdF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACI,CAAC,UAAUF,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;AAEL,CAAC,CAEA,CAAC,C;;;;;;;;;;ACrNNrE,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,2BAA2B,EAC5D,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAC1G,eAAe,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAC,YAAY,EAC7H,UAAUC,MAAM,EAAEC,UAAU,EAAEM,SAAS,EAAEipB,YAAY,EAAEhpB,QAAQ,EAAEL,YAAY,EAAED,aAAa,EAAE0pB,SAAS,EACnGvpB,aAAa,EAAEqpB,aAAa,EAAEizB,gBAAgB,EAAEl8C,cAAc,EAAEoX,YAAY,EAAElX,EAAE,EAAEi0H,YAAY,EAAEgC,UAAU,EAAE;EAE5G32H,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE1pB,SAAS,CAACijI;EAAuB,CAAC,CAAC,CAAC,CAAC;;EAEhG,IAAI,CAACh6G,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;EACJ;EAEApqB,MAAM,CAACmB,IAAI,GAAG,EAAE;EAChBnB,MAAM,CAACkE,IAAI,GAAG,EAAE;EAChBlE,MAAM,CAAC+4H,OAAO,GAAG,EAAE;EACnB/4H,MAAM,CAACi3H,aAAa,GAAG,EAAE;EACzBj3H,MAAM,CAACyjI,aAAa,GAAG,KAAK;EAE5BzjI,MAAM,CAACsgH,QAAQ,GAAG,CAAC;EACnBtgH,MAAM,CAACugH,eAAe;EACtBvgH,MAAM,CAACu5B,WAAW,GAAG,GAAG;EACxBv5B,MAAM,CAACkJ,SAAS,GAAG,KAAK;EAExBlJ,MAAM,CAACsY,UAAU,GAAGjY,aAAa,CAACkY,6BAA6B,CAAC,CAAC;EAEjEvY,MAAM,CAACgrD,UAAU,GAAG1rD,kBAAkB,CAACw3C,QAAQ,IAAI,KAAK;EAExD92C,MAAM,CAAC8qD,aAAa,GAAG;IACnBxB,QAAQ,EAAEjpD,aAAa,CAAC0qD,gBAAgB,CAAC,IAAItvB,IAAI,CAAC,CAAC,CAAC;IACpD4tB,MAAM,EAAEhpD,aAAa,CAAC0qD,gBAAgB,CAAC,IAAItvB,IAAI,CAAC,CAAC,CAAC;IAClDgkB,QAAQ,EAAE,GAAG;IACbgkF,aAAa,EAAE,KAAK;IACpB5iI,UAAU,EAAE;EAChB,CAAC;EAED,IAAMi5B,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAA,EAAc;IACzC,IAAI,CAAC95B,MAAM,CAACkJ,SAAS,IAAIlJ,MAAM,CAACsgH,QAAQ,GAAGtgH,MAAM,CAACs5B,UAAU,EAAE;MAC1Dt5B,MAAM,CAAC0iH,UAAU,CAAC1iH,MAAM,CAACsgH,QAAQ,GAAG,CAAC,CAAC;IAC1C;EACJ,CAAC;EAEDjmF,iBAAiB,CAACP,yBAAyB,CAAC;EAE5C,SAASM,QAAQA,CAAClO,KAAK,EAAE;IACrB,IAAIqO,IAAI,GAAGv6B,MAAM,CAACu5B,WAAW;IAC7Bv5B,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAC3Cv6B,MAAM,CAACw5B,YAAY,GAAGtN,KAAK;IAC3B,IAAIlsB,MAAM,CAACs5B,UAAU,KAAK,CAAC,EAAE;MACzBt5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;IACzB;EACJ;EAAC;EAEDt5B,MAAM,CAAC0iH,UAAU,GAAG,UAAUtnF,IAAI,EAAE;IAChCp7B,MAAM,CAACsgH,QAAQ,GAAGllF,IAAI;IACtBp7B,MAAM,CAACw3H,SAAS,CAAC,KAAK,CAAC;EAC3B,CAAC;EAEDh3H,QAAQ,CAAC,YAAY;IACjBR,MAAM,CAACmB,IAAI,GAAG,QAAQ;;IAEtB;;IAEAX,QAAQ,CAAC,YAAY;MACjB0E,WAAW,CAAC,YAAY;QACpB,IAAItF,EAAE,GAAGkE,CAAC,CAAC,IAAI,CAAC;QAChB,IAAIlE,EAAE,CAAC,CAAC,CAAC,CAAC4K,EAAE,IAAI,gBAAgB,EAAE;UAC9B;UACA1K,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACm+C,SAAS,EAAE,UAAUijD,CAAC,EAAE;YAC3C,IAAIl+D,CAAC,GAAG,wBAAwB,IAAI,CAAC,CAACk+D,CAAC,CAACu4B,kBAAkB,GAAGv4B,CAAC,CAACu4B,kBAAkB,GAAGl5H,cAAc,CAACe,SAAS,CAAC,aAAa,CAAC,CAAC,GAAG,QAAQ,GAC/H,+CAA+C,IAAI,CAAC,CAAC4/F,CAAC,CAACw4B,eAAe,GAAGx4B,CAAC,CAACw4B,eAAe,GAAG,QAAQ,CAAC,GACtG,QAAQ;YAChB,IAAIC,EAAE,GAAGj6H,EAAE,CAACyR,IAAI,CAAC,SAAS,GAAG+vF,CAAC,CAAC51D,WAAW,CAAC;YAE3CquF,EAAE,CAACp6G,IAAI,CAACyjB,CAAC,CAAC;UACd,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;MAEF1iC,QAAQ,CAAC,YAAY;QAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAAE,CAAC,CAAC;IACpE,CAAC,CAAC;EACN,CAAC,CAAC;EAEFxE,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB/nB,CAAC,CAACC,OAAO,CAAC,CAAC;IACX44C,gBAAgB,CAACuO,qCAAqC,CAAC,CAAC,CACvDlnD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAIA,GAAG,CAACnF,IAAI,CAACinD,cAAc,KAAK,IAAI,EAAE;QAClCnrD,MAAM,CAACm+C,SAAS,GAAG90C,GAAG,CAACnF,IAAI,CAACi6C,SAAS;QACrC,IAAIn+C,MAAM,CAACm+C,SAAS,CAAC/3C,MAAM,GAAG,CAAC,EAC3BpG,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ,GAAGz/C,MAAM,CAACm+C,SAAS,CAAC,CAAC,CAAC,CAAC3S,WAAW;MACvE,CAAC,MAEGxrC,MAAM,CAACm+C,SAAS,GAAG,CAAC;QAAE3S,WAAW,EAAE,GAAG;QAAE9gB,UAAU,EAAEjqB,cAAc,CAACe,SAAS,CAAC,aAAa;MAAE,CAAC,CAAC,CAACiQ,MAAM,CAACpI,GAAG,CAACnF,IAAI,CAACi6C,SAAS,CAAC;MAE7Hn+C,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IAC1B,CAAC,CAAC,SACI,CAAC,UAAUrzH,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC,WACM,CAAC,YAAY;MACjB3D,QAAQ,CAAC,YAAY;QAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAAE,CAAC,CAAC;IACpE,CAAC,CAAC;EACN,CAAC;EAEDxE,MAAM,CAAC0I,MAAM,CAAC,wBAAwB,EACpC,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACzB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IACxB;EACJ,CAAC,CAAC;EAEFx3H,MAAM,CAAC0I,MAAM,CAAC,eAAe,EAC7B,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MACzB5I,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;IACxB;EACJ,CAAC,CAAC;EAEFx3H,MAAM,CAACksD,oBAAoB,GAAG,UAAShiD,IAAI,EAAEiiD,EAAE,EAAC;IAC9CnsD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,GAAGp/C,IAAI;IACpClK,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,GAAG8C,EAAE;IAChCnsD,MAAM,CAACw3H,SAAS,CAAC,IAAI,CAAC;EAC1B,CAAC;EAEDx3H,MAAM,CAACqV,SAAS,GAAG,IAAI;EACvBrV,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,UAAU2W,GAAG,EAAE;IAErC,IAAIhZ,MAAM,CAACqV,SAAS,EAAE;MAClBrV,MAAM,CAACqV,SAAS,GAAG,KAAK;IAC5B;EACJ,CAAC,CAAC;EAGFrV,MAAM,CAACw3H,SAAS,GAAG,UAAUsC,SAAS,EAAE;IACpC,IAAGA,SAAS,EAAE;MACV95H,MAAM,CAACsgH,QAAQ,GAAG,CAAC;MACnBtgH,MAAM,CAACkE,IAAI,GAAG,EAAE;IACpB;IAEA,IAAIqmD,IAAI,GAAG;MACPlN,QAAQ,EAAEr9C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;MACvC88E,SAAS,EAAEl8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,CAAC;MACrFkzE,OAAO,EAAEn8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,CAAC;MACjFo6E,aAAa,EAAEzjI,MAAM,CAACyjI,aAAa;MACnC5iI,UAAU,EAAEb,MAAM,CAAC8qD,aAAa,CAACjqD,UAAU;MAC3C8zB,IAAI,EAAE,CAAC30B,MAAM,CAACsgH,QAAQ,GAAG,CAAC,IAAItgH,MAAM,CAACu5B,WAAW;MAChD45D,IAAI,EAAEnzF,MAAM,CAACu5B;IACjB,CAAC;IAGD,IAAIgxB,IAAI,CAACgyE,SAAS,GAAGhyE,IAAI,CAACiyE,OAAO,EAAE;MAC/Br8H,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,gEAAgE,CAAC,CAAC;MAClH;IACJ;IAEAsC,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACkJ,SAAS,GAAG,IAAI;IACvBlJ,MAAM,CAAC+5H,OAAO,GAAG,EAAE;IACnB/5H,MAAM,CAAC84H,MAAM,GAAG,EAAE;IAClB94H,MAAM,CAACk3H,iBAAiB,GAAG,EAAE;IAE7B,OAAOxtG,aAAa,CAACy4G,mBAAmB,CAAC53E,IAAI,CAAC,CAC7CvmD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBrJ,MAAM,CAACi3H,aAAa,GAAG5tH,GAAG,CAACnF,IAAI,CAACyzH,OAAO;MACvC33H,MAAM,CAACkE,IAAI,GAAGlE,MAAM,CAACkE,IAAI,CAACuN,MAAM,CAACpI,GAAG,CAACnF,IAAI,CAAC2zH,MAAM,CAAC;MACjD73H,MAAM,CAAC84H,MAAM,GAAGzvH,GAAG,CAACnF,IAAI,CAAC+1H,MAAM;MAC/Bj6H,MAAM,CAACk3H,iBAAiB,GAAG7tH,GAAG,CAACnF,IAAI,CAAC0zH,iBAAiB;MACrDx9F,QAAQ,CAAC/wB,GAAG,CAACnF,IAAI,CAACwzH,OAAO,CAAC;MAE1B13H,MAAM,CAACo4H,UAAU,CAACrzH,YAAY,CAAC,CAAC;MAEhC/E,MAAM,CAACkJ,SAAS,GAAG,KAAK;MACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SAAM,CAAC,UAAUF,GAAG,EAAE;MACpBnE,MAAM,CAACkJ,SAAS,GAAG,KAAK;MACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;;EAED;EACAnE,MAAM,CAACq4H,iBAAiB,GAAG,YAAY;IACnC,OAAO,IAAI;EACf,CAAC;EAEDr4H,MAAM,CAACo2H,WAAW,GAAG,UAAUC,SAAS,EAAEhyD,YAAY,EAAE;IACpDvgE,CAAC,CAACC,OAAO,CAAC,CAAC;IAEZ,IAAI2G,KAAK,GAAG2rH,SAAS,CAAC3iH,UAAU;IAChC,IAAI2wD,YAAY,GAAGA,YAAY,CAAC3wD,UAAU;IAE1C,IAAI4kH,MAAM,GAAG,EAAE;IACd,KAAK,IAAI9jH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACi3H,aAAa,CAAC7wH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MAClD8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACi3H,aAAa,CAACziH,CAAC,CAAC,CAAChK,EAAE,CAAC;IAC3C;IAEA,IAAI+/C,IAAI,GAAG;MACPlN,QAAQ,EAAEr9C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;MACvC88E,SAAS,EAAEl8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,CAAC;MACrFkzE,OAAO,EAAEn8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,CAAC;MACjFo6E,aAAa,EAAEzjI,MAAM,CAACyjI,aAAa;MACnC5iI,UAAU,EAAEb,MAAM,CAAC8qD,aAAa,CAACjqD,UAAU;MAC3C03H,UAAU,EAAED,MAAM;MAClBE,OAAO,EAAE9tH,KAAK;MACd+tH,OAAO,EAAEp0D;IACb,CAAC;IAGD,IAAI9Z,IAAI,CAACgyE,SAAS,GAAGhyE,IAAI,CAACiyE,OAAO,EAAE;MAC/Br8H,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,gEAAgE,CAAC,CAAC;MAClH;IACJ;IAEA,OAAOkoB,aAAa,CAAC24G,wBAAwB,CAAC93E,IAAI,CAAC,CAClDvmD,IAAI,CAAC,UAAUyjB,MAAM,EAAE;MACpB3jB,CAAC,CAACO,SAAS,CAAC,CAAC;MACbhE,aAAa,CAAC+L,WAAW,CAAC,2BAA2B,CAAC;;MAEtD;MACApM,MAAM,CAACu2H,qBAAqB,GAAG,IAAI;MACnCl2H,aAAa,CAAC8E,UAAU,CAAC,wBAAwB,CAAC;IACtD,CAAC,CAAC,SACI,CAAC,UAAUhB,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAC5E,CAAC,CAAC;EACN,CAAC;EAEDxB,MAAM,CAAC24H,YAAY,GAAG,YAAY;IAC9B70H,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAIu0H,MAAM,GAAG,EAAE;IACf,KAAK,IAAI9jH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAACi3H,aAAa,CAAC7wH,MAAM,EAAEoO,CAAC,EAAE,EAAE;MAClD8jH,MAAM,CAACjyH,IAAI,CAACrG,MAAM,CAACi3H,aAAa,CAACziH,CAAC,CAAC,CAAChK,EAAE,CAAC;IAC3C;IAEA,IAAI+/C,IAAI,GAAG;MACPlN,QAAQ,EAAEr9C,MAAM,CAAC8qD,aAAa,CAACrL,QAAQ;MACvC88E,SAAS,EAAEl8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACxB,QAAQ,CAAC;MACrFkzE,OAAO,EAAEn8H,aAAa,CAAC2xD,6BAA6B,CAAChyD,MAAM,CAAC8qD,aAAa,CAACzB,MAAM,CAAC;MACjFo6E,aAAa,EAAEzjI,MAAM,CAACyjI,aAAa;MACnC5iI,UAAU,EAAEb,MAAM,CAAC8qD,aAAa,CAACjqD,UAAU;MAC3C03H,UAAU,EAAED;IAChB,CAAC;IAGD,IAAI/tE,IAAI,CAACgyE,SAAS,GAAGhyE,IAAI,CAACiyE,OAAO,EAAE;MAC/Br8H,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,gEAAgE,CAAC,CAAC;MAClH;IACJ;IAEA,OAAOkoB,aAAa,CAAC04G,sBAAsB,CAAC73E,IAAI,CAAC,CAChDvmD,IAAI,CAAC,UAAUwxC,GAAG,EAAE;MACjB,IAAIt1C,aAAa,CAAC2L,QAAQ,EACtB,OAAO+qH,UAAU,CAACjgF,cAAc,CAACnB,GAAG,CAACtxC,IAAI,EAAE,qBAAqB,CAAC,CAChEF,IAAI,CAAC,UAAU8oB,IAAI,EAAE;QAClB,IAAIvhB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzB1H,CAAC,CAACO,SAAS,CAAC,CAAC;QAEbhE,aAAa,CAACowE,cAAc,CAAC;UACzBr8D,KAAK,EAAE,EAAE;UACTqiC,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,wBAAwB,GAACsrB,IAAI;QAChE,CAAC,EAAE,YAAY;UACXvhB,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QAC1B,CAAC,CAAC;QAGF,OAAOF,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC,CAAC,KAEH,OAAOkrH,UAAU,CAAC9gF,WAAW,CAACN,GAAG,CAACtxC,IAAI,EAAE,qBAAqB,CAAC;IACtE,CAAC,CAAC,CACDF,IAAI,CAAC,YAAY;MACdF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACI,CAAC,UAAUF,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EAEN,CAAC;AAEL,CAAC,CAEA,CAAC,C;;;;;;;;;;;;;;;AC9R+C;AAErDrE,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAAC2jD,OAAO,CAAC,wBAAwB,EACvD,CAAC,eAAe,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,qBAAqB,EACzF,UAAUjjD,aAAa,EAAEM,QAAQ,EAAEG,EAAE,EAAEgpB,KAAK,EAAE1pB,UAAU,EAAEyjI,SAAS,EAAEz1D,mBAAmB,EAAE;EAC9F,OAAO;IACHk8C,OAAO,EAAE,SAATA,OAAOA,CAAY90D,MAAM,EAAE;MACvB,IAAIyhC,CAAC,GAAG,OAAQzhC,MAAM,CAAChwC,GAAI,IAAI,QAAQ,GAAGgwC,MAAM,CAAChwC,GAAG,CAAC9N,WAAW,CAAC,CAAC,GAAG,IAAI;MACzE,IAAIosH,UAAU,GAAG7sC,CAAC,IAAE,IAAI,KACPA,CAAC,CAACznF,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IACzBynF,CAAC,CAACznF,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAC3BynF,CAAC,CAACznF,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC;;MAInD;;MAEA,IAAIs0H,UAAU,IAAI,CAACzjI,aAAa,CAACX,MAAM,EAAE;QAErC,IAAIizH,kBAAkB,GAAGn9D,MAAM,CAACm9D,kBAAkB,KAAK,IAAI;QAE3D,IAAI17B,CAAC,CAACznF,OAAO,CAAC,wBAAwB,CAAC,GAAG,CAAC,EACvCmjH,kBAAkB,GAAG,IAAI;QAE7B,IAAI,CAACA,kBAAkB,EAAE;UACrB,IAAIoR,SAAS,GAAGjjI,EAAE,CAAC6K,KAAK,CAAC,CAAC;UAC1B6pD,MAAM,CAACoG,OAAO,GAAGmoE,SAAS,CAACl4H,OAAO;UAClC2pD,MAAM,CAACwuE,GAAG,GAAGl6G,KAAK,CAACuE,OAAO,CAAC,CAAC;UAE5BjuB,UAAU,CAAC6jI,eAAe,CAACzuE,MAAM,CAACwuE,GAAG,CAAC,GAAG;YACrCE,GAAG,EAAEvjI,QAAQ,CAAC,YAAY;cACtB,IAAIP,UAAU,CAAC8nF,gBAAgB,EAAE;gBAC7B9nF,UAAU,CAAC+jI,gBAAgB,CAAC,CAAC;cACjC;YACJ,CAAC,EAAE9jI,aAAa,CAACsmC,cAAc,CAAC;YAChCo9F,SAAS,EAAEA,SAAS;YACpBvuE,MAAM,EAAEA;UACZ,CAAC;QACL;MACJ;MAEA,IAAIA,MAAM,CAACjvC,MAAM,IAAI,SAAS,IAAIivC,MAAM,CAAChwC,GAAG,CAAChW,OAAO,CAACnP,aAAa,CAACmnC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;QAChF,IAAI,CAAC,CAACnnC,aAAa,CAACkkC,cAAc,EAAE;UAChCixB,MAAM,CAAC0kE,OAAO,CAAC,yBAAyB,CAAC,GAAG75H,aAAa,CAACkkC,cAAc;QAC5E;QAEA,IAAI,CAAC,CAAClkC,aAAa,CAACokC,QAAQ,EAAE;UAC1B+wB,MAAM,CAAC0kE,OAAO,CAAC,oBAAoB,CAAC,GAAG75H,aAAa,CAACokC,QAAQ;QACjE;QAEA,IAAI,CAAC,CAACpkC,aAAa,CAACmkC,WAAW,EAAE;UAC7BgxB,MAAM,CAAC0kE,OAAO,CAAC,iBAAiB,CAAC,GAAG75H,aAAa,CAACmkC,WAAW;QACjE;MACJ;MAEA,IAAI/kC,yEAAgC,KAAK,OAAO,IAAIw3F,CAAC,IAAE,IAAI,KAAKA,CAAC,CAACznF,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAIynF,CAAC,CAACznF,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE;QACnHgmD,MAAM,CAAC0kE,OAAO,CAAC,4BAA4B,CAAC,GAAG,MAAM;MACzD;MAEA,IAAIkK,GAAG,GAAG,EAAE;MACZ,KAAK,IAAI5jF,GAAG,IAAIgV,MAAM,CAAC0kE,OAAO,EAAE;QAC5B,IAAI1kE,MAAM,CAAC0kE,OAAO,CAAC7qF,cAAc,CAACmR,GAAG,CAAC,EAAE;UACpC4jF,GAAG,CAAC59H,IAAI,CAACg6C,GAAG,GAAG,GAAG,GAAGgV,MAAM,CAAC0kE,OAAO,CAAC15E,GAAG,CAAC,CAAC;QAC7C;MACJ;;MAEA;MACA;MACA;MACA;MACA,OAAOgV,MAAM;IACjB,CAAC;IACD6uE,aAAa,EAAE,SAAfA,aAAaA,CAAYrgG,QAAQ,EAAE;MAC/B,IAAIwxB,MAAM,GAAGxxB,QAAQ,CAACwxB,MAAM;MAC5B,IAAIsuE,UAAU,GAAG,OAAQtuE,MAAM,CAAChwC,GAAI,IAAI,QAAQ,KAAKgwC,MAAM,CAAChwC,GAAG,CAAChW,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAIgmD,MAAM,CAAChwC,GAAG,CAAChW,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;MAC/H,IAAI80H,MAAM,GAAG9uE,MAAM,CAAChwC,GAAG,CAAChW,OAAO,CAAC,yBAAyB,CAAC,GAAG,CAAC;MAC9D,IAAI+0H,eAAe,GAAGT,UAAU,IAAItuE,MAAM,CAACjvC,MAAM,KAAK,MAAM,IAAIivC,MAAM,CAAChwC,GAAG,CAAChW,OAAO,CAAC,0BAA0B,CAAC,GAAG,CAAC;MAElH,IAAIs0H,UAAU,EAAE;QACZ,IAAII,GAAG,GAAG9jI,UAAU,CAAC6jI,eAAe,CAACzuE,MAAM,CAACwuE,GAAG,CAAC;QAEhD,IAAI,CAAC,CAACE,GAAG,EAAE;UACPA,GAAG,CAACH,SAAS,CAACn4H,OAAO,CAAC,IAAI,CAAC;UAC3BjL,QAAQ,CAACqjD,MAAM,CAACkgF,GAAG,CAACA,GAAG,CAAC;UACxB,OAAO9jI,UAAU,CAAC6jI,eAAe,CAACzuE,MAAM,CAACwuE,GAAG,CAAC;UAC7C5jI,UAAU,CAACokI,gBAAgB,CAAC,CAAC;QACjC;MACJ;;MAGA;MACA;MACA,IAAIC,aAAa,GAAGF,eAAe,GAAG,CAAC,GAAG,EAAE,CAAC,CAAG;MAChD,IAAIG,YAAY,GAAG,IAAI,CAAC,CAAC;;MAEzB,IAAI1gG,QAAQ,CAACkU,MAAM,KAAK,GAAG,EAAE;QACzB93C,UAAU,CAACukI,UAAU,CAAC3gG,QAAQ,CAAC3/B,IAAI,CAAC;QACpC,OAAOvD,EAAE,CAACimB,MAAM,CAACid,QAAQ,CAAC;MAC9B;MAEA,IAAIA,QAAQ,CAACkU,MAAM,KAAK,CAAC,CAAC,KAAK,CAACsd,MAAM,CAACovE,YAAY,IAAIpvE,MAAM,CAACovE,YAAY,GAAGH,aAAa,CAAC,IAAI,CAACjvE,MAAM,CAACqvE,WAAW,EAAE;QAEhH,IAAI,CAACrvE,MAAM,CAACovE,YAAY,EACpBpvE,MAAM,CAACovE,YAAY,GAAG,CAAC,CAAC,KAExBpvE,MAAM,CAACovE,YAAY,EAAE;QAEzB,OAAOjkI,QAAQ,CAAC,YAAY;UACxBwE,OAAO,CAACC,GAAG,CAAC,mBAAmB,GAAGowD,MAAM,CAAChwC,GAAG,GAAG,aAAa,IAAIgwC,MAAM,CAACovE,YAAY,GAAG,CAAC,CAAC,CAAC;UACzF,IAAIt/G,KAAK,GAAGu+G,SAAS,CAAClsF,GAAG,CAAC,OAAO,CAAC;UAClC,OAAOryB,KAAK,CAACkwC,MAAM,CAAC;QACxB,CAAC,EAAEkvE,YAAY,CAAC;MACpB;MAEA,IAAI1gG,QAAQ,CAACkU,MAAM,KAAK,CAAC,CAAC,IAAI,CAACosF,MAAM,EAAE;QACnC3jI,QAAQ,CAAC,YAAY;UACjBN,aAAa,CAAC+oC,cAAc,CAAC/oC,aAAa,CAACklC,oBAAoB,EAAE,KAAK,CAAC;QAC3E,CAAC,CAAC;MACN;MAEA,OAAOzkC,EAAE,CAACimB,MAAM,CAACid,QAAQ,CAAC;IAC9B,CAAC;IACDA,QAAQ,EAAE,SAAVA,QAAQA,CAAYA,SAAQ,EAAE;MAC1B,IAAIwxB,MAAM,GAAGxxB,SAAQ,CAACwxB,MAAM;MAE5B,IAAIsuE,UAAU,GAAG,OAAQtuE,MAAM,CAAChwC,GAAI,IAAI,QAAQ,KAAKgwC,MAAM,CAAChwC,GAAG,CAAChW,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAIgmD,MAAM,CAAChwC,GAAG,CAAChW,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;MAE/H,IAAIs0H,UAAU,EAAE;QACZ,IAAII,GAAG,GAAG9jI,UAAU,CAAC6jI,eAAe,CAACzuE,MAAM,CAACwuE,GAAG,CAAC;QAEhD,IAAI,CAAC,CAACE,GAAG,EAAE;UACPA,GAAG,CAACH,SAAS,CAACn4H,OAAO,CAAC,IAAI,CAAC;UAC3BjL,QAAQ,CAACqjD,MAAM,CAACkgF,GAAG,CAACA,GAAG,CAAC;UACxB,OAAO9jI,UAAU,CAAC6jI,eAAe,CAACzuE,MAAM,CAACwuE,GAAG,CAAC;UAC7C5jI,UAAU,CAACokI,gBAAgB,CAAC,CAAC;QACjC;MACJ;MAEA,IAAIV,UAAU,IAAI,CAACzjI,aAAa,CAACmB,QAAQ,IAAIwiC,SAAQ,CAACkU,MAAM,IAAI,GAAG,EAAE;QAEjE,IAAIxsC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QACtB,IAAIy3B,CAAC,GAAG33B,QAAQ,CAACG,OAAO,CAAC1H,IAAI,CAAC,YAAY;UACtC9D,aAAa,CAAC+oC,cAAc,CAAC,IAAI,CAAC;QACtC,CAAC,CAAC,WACM,CAAC,YAAY;UACjB19B,QAAQ,CAACE,OAAO,CAACo4B,SAAQ,CAAC;QAC9B,CAAC,CAAC;QAEF,OAAOX,CAAC;MACZ;MAEA,OAAOW,SAAQ;IACnB;EACJ,CAAC;AACD,CAAC,CAAC,CAAC,CACNw/C,GAAG,CAAC,CAAC,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,qBAAqB,EAClG,UAAUpjF,UAAU,EAAEI,aAAa,EAAEG,QAAQ,EAAEgpB,YAAY,EAAErpB,YAAY,EAAE8tE,mBAAmB,EAAE;EAC5FhuE,UAAU,CAAC6jI,eAAe,GAAG,CAAC,CAAC;EAC/B7jI,UAAU,CAAC0kI,qBAAqB,GAAG,KAAK;EACxC1kI,UAAU,CAAC8nF,gBAAgB,GAAG,KAAK;EAEnC9nF,UAAU,CAAC+jI,gBAAgB,GAAG,YAAY;IACtC,IAAIthH,MAAM,CAACu6C,IAAI,CAACh9D,UAAU,CAAC6jI,eAAe,CAAC,CAAC19H,MAAM,GAAG,CAAC,IAAI,CAACnG,UAAU,CAAC0kI,qBAAqB,EAAE;MACzF1kI,UAAU,CAAC0kI,qBAAqB,GAAG,IAAI;;MAEvC;MACAtkI,aAAa,CAAC8E,UAAU,CAAC,wBAAwB,CAAC;IACtD;EACJ,CAAC;EAEDlF,UAAU,CAACokI,gBAAgB,GAAG,YAAY;IACtC,IAAI3hH,MAAM,CAACu6C,IAAI,CAACh9D,UAAU,CAAC6jI,eAAe,CAAC,CAAC19H,MAAM,IAAI,CAAC,IAAInG,UAAU,CAAC0kI,qBAAqB,EAAE;MACzF;MACAtkI,aAAa,CAAC+L,WAAW,CAAC,wBAAwB,CAAC;MAEnDnM,UAAU,CAAC0kI,qBAAqB,GAAG,KAAK;IAC5C;EACJ,CAAC;EAED1kI,UAAU,CAAC2kI,iBAAiB,GAAG,YAAY;IACvC,IAAIC,UAAU,GAAGr7G,YAAY,CAACW,UAAU,CAAC,CAAC;IAE1C9pB,aAAa,CAAC+L,WAAW,CAAC,wBAAwB,CAAC;IACnDnM,UAAU,CAAC0kI,qBAAqB,GAAG,KAAK;IAExC,IAAIG,SAAS,GAAG,KAAK;IAErBpiH,MAAM,CAACu6C,IAAI,CAACh9D,UAAU,CAAC6jI,eAAe,CAAC,CAACp3H,OAAO,CAAC,UAAU2zC,GAAG,EAAE;MAC3D,IAAI0jF,GAAG,GAAG9jI,UAAU,CAAC6jI,eAAe,CAACzjF,GAAG,CAAC;MACzD;MACA;MACgB;MACA;MACAykF,SAAS,GAAG,IAAI;MAEhBf,GAAG,CAAC1uE,MAAM,CAACiQ,WAAW,GAAG,IAAI;MAC7By+D,GAAG,CAACH,SAAS,CAACn4H,OAAO,CAAC,IAAI,CAAC;MAC3BjL,QAAQ,CAACqjD,MAAM,CAACkgF,GAAG,CAACA,GAAG,CAAC;MACxB,OAAO9jI,UAAU,CAAC6jI,eAAe,CAACzjF,GAAG,CAAC;IAC1C,CAAC,CAAC;IAEF,IAAGykF,SAAS,EACZ;MACI7kI,UAAU,CAAC+K,UAAU,CAAC,eAAe,CAAC;MAEtCijE,mBAAmB,CAAC4B,MAAM,CAAC,CAAC;IAEhC;EACJ,CAAC;EAGD5vE,UAAU,CAACukI,UAAU,GAAG,UAAUn7G,KAAK,EAAE;IACrChpB,aAAa,CAAC+L,WAAW,CAAC,wBAAwB,CAAC;IACnDnM,UAAU,CAAC0kI,qBAAqB,GAAG,KAAK;IAExC,IAAIt7G,KAAK,EAAE;MACPlpB,YAAY,CAACiE,SAAS,CAACilB,KAAK,CAAC;IACjC;IACAppB,UAAU,CAAC+K,UAAU,CAAC,eAAe,CAAC;IAEtCijE,mBAAmB,CAAC4B,MAAM,CAAC,CAAC;EAChC,CAAC;AACL,CAAC,CAAC,CAAC;AAEP/vE,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAAC61D,MAAM,mBAC7B,UAAU0vE,aAAa,EAAE;EACrBA,aAAa,CAACC,YAAY,CAAC3+H,IAAI,CAAC,wBAAwB,CAAC;EACzD0+H,aAAa,CAAC19C,QAAQ,CAAC5rB,OAAO,GAAG,KAAK,CAAC,CAAC;AAE5C,CAAC,EAAC,C;;;;;;;;;;;;;;;;;;ACtO+E;AACtC;AACsC;AACvD;AAC2C;AAGzE37D,OAAO,CAACN,MAAM,CAAC,UAAU,CAAC,CAACqf,OAAO,CAAC,aAAa,EAAE,CAC9C,IAAI,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,WAAW,EAC9E,gBAAgB,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EACxG,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EACpG,gBAAgB,EAAE,iBAAiB,EAAE,YAAY,EAAE,oBAAoB,EACvE,UAAUle,EAAE,EAAET,aAAa,EAAEkwB,qBAAqB,EAAEvb,eAAe,EAAEtU,SAAS,EAC1EE,cAAc,EAAEJ,aAAa,EAAEspB,KAAK,EAAEwnC,OAAO,EAAE3wD,QAAQ,EAAEP,UAAU,EAAEowB,eAAe,EACpF29C,cAAc,EAAEsV,cAAc,EAAElc,IAAI,EAAEmc,cAAc,EAAEroD,SAAS,EAAElR,OAAO,EAAE7pB,YAAY,EACtFqjF,cAAc,EAAE1uE,eAAe,EAAEC,UAAU,EAAEs4G,kBAAkB,EAAE;EAEjE,IAAInvG,WAAW,GAAG,CAAC,CAAC;EAEpBA,WAAW,CAACgnH,wBAAwB,GAAG,KAAK;EAE5ChnH,WAAW,CAACkyF,aAAa,GAAG;IACxBlpC,KAAK,EAAE,OAAO;IACdmpC,YAAY,EAAE,cAAc;IAC5B80B,MAAM,EAAE;EACZ,CAAC;;EAED;EACAjnH,WAAW,CAACikF,eAAe,GAAG,UAAUpP,WAAW,EAAEqP,aAAa,EAAE;IAChE;;IAEA,IAAIliG,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,EAAE;MAChD,IAAIP,CAAC,GAAGxU,aAAa,CAACixC,qBAAqB,CAAC9wC,aAAa,CAAC;MAE1D,IAAIkL,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACiJ,CAAC,CAAC;MACnB,OAAOnJ,QAAQ,CAACG,OAAO;IAC3B,CAAC,MAAM;MACH,IAAI+kB,QAAQ,GAAG5b,eAAe;MAE9B,IAAIvJ,EAAE,GAAGmlB,QAAQ,CAAC0xE,eAAe,CAACpP,WAAW,EAAEqP,aAAa,CAAC;MAE7D92F,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,UAAUC,IAAI,EAAE;QACzB,IAAIA,IAAI,CAACC,IAAI,EAAE;UACX,OAAOD,IAAI,CAACC,IAAI;QACpB,CAAC,MAAM;UACH,OAAOD,IAAI;QACf;MACJ,CAAC,CAAC;MAEF,OAAOqH,EAAE;IACb;EACJ,CAAC;;EAED;AACR;AACA;AACA;EACQ4S,WAAW,CAACknH,wBAAwB,GAAG,UAAUC,WAAW,EAAE;IAC1D,IAAItyC,WAAW,GAAG7yF,aAAa,CAACiN,YAAY;IAC5C,IAAIi1F,aAAa,GAAGliG,aAAa,CAAC8rB,cAAc;IAEhD,IAAI1gB,EAAE,GAAG,IAAI;IAEb,IAAIpL,aAAa,CAACX,MAAM,IAAI,IAAI,IAAIwV,UAAU,CAACE,WAAW,EAAE;MACxD3J,EAAE,GAAG3K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACfF,EAAE,CAACG,OAAO,CAAC,CAAC,CAAC;MACbH,EAAE,GAAGA,EAAE,CAACI,OAAO;IACnB,CAAC,MAAM;MACHJ,EAAE,GAAGuJ,eAAe,CAAC0uF,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACtE;IAEA,OAAOj4F,EAAE,CAACtH,IAAI,CAAC,UAAUshI,SAAS,EAAE;MAEhC,IAAIA,SAAS,IAAI,CAAC,IAAIplI,aAAa,CAACmB,QAAQ,EAAE;QAE1C,IAAIovB,QAAQ,GAAGL,qBAAqB;QACpC,IAAI9kB,EAAE,GAAGmlB,QAAQ,CAACy+F,kBAAkB,CAACn8B,WAAW,EAAEqP,aAAa,CAAC;QAEhE92F,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,UAAUC,IAAI,EAAE;UAEzB,IAAI/D,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,EAAE;YAEhD,IAAIhR,IAAI,EAAE;cACN,IAAIyQ,CAAC,GAAGzQ,IAAI,CAACC,IAAI;cACjB,IAAI8f,QAAQ,CAACtP,CAAC,CAAC,KAAK,CAAC,EAAE;gBACnBA,CAAC,GAAGrU,aAAa,CAAC8gB,GAAG,CAAC6C,QAAQ,CAACtP,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;cAC7C;cACAxU,aAAa,CAACgxC,qBAAqB,CAACx8B,CAAC,CAAC;YAC1C;YAEA,IAAInJ,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;YACzBD,QAAQ,CAACE,OAAO,CAAC,CAAC;YAClB,OAAOF,QAAQ,CAACG,OAAO;UAC3B,CAAC,MAAM;YACH,OAAOmJ,eAAe,CAAC6tF,eAAe,CAAC3P,WAAW,EAAEqP,aAAa,EAAEn+F,IAAI,CAACC,IAAI,CAAC;UACjF;QACJ,CAAC,CAAC;QAEF,OAAOoH,EAAE;MACb,CAAC,MAAM;QAAE;QACL,IAAIoJ,CAAC,GAAG,CAAC;QAET,IAAI2wH,WAAW,KAAK,IAAI,EAAE;UACtB,IAAInlI,aAAa,CAACX,MAAM,EAAE;YACtB;YACAmV,CAAC,GAAGxU,aAAa,CAACixC,qBAAqB,CAAC9wC,aAAa,CAAC;UAE1D,CAAC,MAAM;YACH;YACA,OAAOwU,eAAe,CAACstF,eAAe,CAACpP,WAAW,EAAEqP,aAAa,CAAC;UACtE;QACJ;QAEA,IAAI72F,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAACiJ,CAAC,CAAC;QACnB,OAAOnJ,QAAQ,CAACG,OAAO;MAC3B;IACJ,CAAC,CAAC;EACN,CAAC;EAGDwS,WAAW,CAACid,aAAa,GAAG,IAAI;EAChCjd,WAAW,CAACqnH,uBAAuB,GAAG,YAAY;IAE9C,IAAI,CAAC,IAAI,CAACpqG,aAAa,EAAE;MACrB,IAAI,CAACA,aAAa,GAAGD,SAAS,CAAC,UAAUgI,CAAC,EAAE;QAExC,IAAI6vD,WAAW,GAAG7yF,aAAa,CAACiN,YAAY;QAC5C,IAAIi1F,aAAa,GAAGliG,aAAa,CAAC8rB,cAAc;QAEhD,IAAI9rB,aAAa,CAACmB,QAAQ,IAAI+gG,aAAa,IAAI,IAAI,EAAE;UAEjD,IAAI92F,EAAE,GAAG,IAAI;UAEb,IAAIpL,aAAa,CAACX,MAAM,IAAI,IAAI,IAAIwV,UAAU,CAACE,WAAW,EAAE;YACxD3J,EAAE,GAAG3K,EAAE,CAAC6K,KAAK,CAAC,CAAC;YACfF,EAAE,CAACG,OAAO,CAAC,CAAC,CAAC;YAEbH,EAAE,GAAGA,EAAE,CAACI,OAAO;UACnB,CAAC,MAAM;YACHJ,EAAE,GAAGuJ,eAAe,CAAC0uF,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;UACtE;UAEAj4F,EAAE,CAACtH,IAAI,CAAC,UAAUvC,GAAG,EAAE;YACnB,IAAIA,GAAG,IAAI,CAAC,EAAE;cACV;cACA,IAAI41C,QAAQ,GAAGv3C,OAAO,CAACw3C,OAAO,CAAC,MAAM,CAAC,CAACD,QAAQ,CAAC,CAAC;cACjD,IAAIE,EAAE,GAAGF,QAAQ,CAACG,GAAG,CAAC,aAAa,CAAC;cAEpC,IAAIjsC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;cACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;cACtBF,QAAQ,CAACG,OAAO,CAAC1H,IAAI,CAAC,YAAY;gBAC9BuzC,EAAE,CAAC6tF,wBAAwB,CAAC,CAAC;cACjC,CAAC,CAAC;cACF,OAAO75H,QAAQ,CAACG,OAAO;YAC3B;UACJ,CAAC,CAAC;UAEF;QACJ;MACJ,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC;IACjB;IAEA,IAAIH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IACtB,OAAOF,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAEDwS,WAAW,CAACsnH,sBAAsB,GAAG,YAAY;IAC7C,IAAItnH,WAAW,CAACid,aAAa,IAAI,IAAI,EAAE;MACnC,IAAI;QACAD,SAAS,CAAC2oB,MAAM,CAAC3lC,WAAW,CAACid,aAAa,CAAC;QAC3Cjd,WAAW,CAACid,aAAa,GAAG,IAAI;MACpC,CAAC,CAAC,OAAO5Z,CAAC,EAAE,CAAC;IACjB;EACJ,CAAC;EAEDrD,WAAW,CAACunH,qBAAqB,GAAG,UAAUC,gBAAgB,EAAE;IAC5D,IAAI,CAACA,gBAAgB,IAAI,OAAQA,gBAAiB,IAAI,QAAQ,EAAE,OAAO,KAAK;IAE5E,QAAQA,gBAAgB,CAACnuH,WAAW,CAAC,CAAC;MAClC,KAAK,MAAM;MACX,KAAK,aAAa;MAClB,KAAK,WAAW;MAChB,KAAK,SAAS;MACd,KAAK,eAAe;MACpB,KAAK,UAAU;QACX,OAAO,IAAI;MACX;IACR;IAEA,OAAO,KAAK;EAChB,CAAC;;EAED;AACR;AACA;AACA;AACA;AACA;EACQ2G,WAAW,CAAC6xG,WAAW,GAAG,UAAUhuF,IAAI,EAAEgyE,OAAO,EAAE3oE,IAAI,EAAEu6F,eAAe,EAAE;IACtE,IAAIC,gBAAgB,GAAI7xB,OAAO,CAACjyE,kBAAkB,KAAK,IAAI,IAAI5hC,aAAa,CAACX,MAAM,KAAK,KAAK,IAAI,CAACwV,UAAU,CAACE,WAAY;IACzH8+F,OAAO,CAACh3B,WAAW,GAAGh7C,IAAI,CAACg7C,WAAW;IACtC,IAAI8oD,gBAAgB,GAAG3lI,aAAa,CAACX,MAAM,IAAKW,aAAa,CAACmB,QAAQ,IAAIukI,gBAAgB,KAAK,KAAM;IACrG,IAAIn1G,QAAQ,GAAGo1G,gBAAgB,GAAGz1G,qBAAqB,GAAGvb,eAAe;IACzE,IAAIvJ,EAAE,GAAG4S,WAAW,CAAC0mF,mBAAmB,CAAC1kG,aAAa,CAACmuB,eAAe,EAAE0T,IAAI,EAAEgyE,OAAO,CAAC;IAEtF,IAAID,QAAQ,GAAG1oE,IAAI;IAEnB,IAAI,CAAC0oE,QAAQ,CAACrgB,QAAQ,EAAE;MACpBqgB,QAAQ,CAACrgB,QAAQ,GAAG,SAAS;MAC7BqgB,QAAQ,CAAC/7D,MAAM,GAAGx3C,SAAS,CAACszC,YAAY,CAAC,SAAS,CAAC;IACvD;IACA,IAAI7vB,QAAQ,CAAC+d,IAAI,CAACrF,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAACq3E,OAAO,CAACv7E,cAAc,EAAE;MAClE,OAAOltB,EAAE,CAACtH,IAAI,CAAC,YAAY;QACnB,OAAOka,WAAW,CAACikF,eAAe,CAACjiG,aAAa,CAACiN,YAAY,EAAEjN,aAAa,CAAC8rB,cAAc,CAAC;MAChG,CAAC,CAAC,CACDhoB,IAAI,CAAC,UAAUE,IAAI,EAAE;QAClB,IAAI,CAACyhI,eAAe,EAAE;UAClB5jG,IAAI,CAACzJ,WAAW,GAAG,CAACp4B,aAAa,CAACymC,cAAc,GAAGzmC,aAAa,CAACymC,cAAc,GAAG,EAAE,IAChFziC,IAAI,IAAIhE,aAAa,CAAC0mC,cAAc,GAAG1mC,aAAa,CAAC0mC,cAAc,GAAG,EAAE,CAAC;UAC7EmtE,OAAO,CAACz7E,WAAW,GAAG,CAACp4B,aAAa,CAACymC,cAAc,GAAGzmC,aAAa,CAACymC,cAAc,GAAG,EAAE,IACnFziC,IAAI,IAAIhE,aAAa,CAAC0mC,cAAc,GAAG1mC,aAAa,CAAC0mC,cAAc,GAAG,EAAE,CAAC;QACjF;QACA7E,IAAI,CAACrF,gBAAgB,GAAGx4B,IAAI;QAC5B6vG,OAAO,CAACr3E,gBAAgB,GAAGx4B,IAAI;QAE/B4vG,QAAQ,CAAChE,UAAU,GAAG/tE,IAAI;QAC1B,IAAIz2B,EAAE,GAAGu6H,gBAAgB,GAAGp1G,QAAQ,CAACs/F,WAAW,CAAC,CAAChuF,IAAI,CAAC,CAAC,GAAGtR,QAAQ,CAAC6iE,cAAc,CAACygB,OAAO,EAAED,QAAQ,CAAC;QACrGxoG,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,UAAUC,IAAI,EAAE;UACzB;UACAopH,kBAAkB,CAACx5B,UAAU,CAAC9xD,IAAI,CAACgyD,OAAO,EAAE7zF,aAAa,CAACmuB,eAAe,EAAE;YACvEylF,QAAQ,EAAEA,QAAQ;YAClB/xE,IAAI,EAAEA,IAAI;YACVgyE,OAAO,EAAEA,OAAO;YAChBC,mBAAmB,EAAE91F,WAAW,CAACkyF,aAAa,CAAC+0B;UACnD,CAAC,CAAC,SAAM,CAAC,UAAShhI,GAAG,EAAE;YACnBa,OAAO,CAACqkB,KAAK,CAAC,wBAAwB,EAAEllB,GAAG,CAAC;UAChD,CAAC,CAAC;UAEF,IAAIjE,aAAa,CAACmB,QAAQ,IAAIukI,gBAAgB,KAAK,IAAI,EAAE;YACrD,OAAO1nH,WAAW,CAAC+xF,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAEluE,IAAI,EAAEgyE,OAAO,CAAC,CACxD/vG,IAAI,CAAC,YAAY;cACd,IAAIuH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;cACzBD,QAAQ,CAACE,OAAO,CAAC;gBACb4lB,OAAO,EAAE;cACb,CAAC,CAAC;cACF,OAAO9lB,QAAQ,CAACG,OAAO;YAC3B,CAAC,CAAC;UACV,CAAC,MAAM,IAAIxL,aAAa,CAACX,MAAM,EAAE;YAC7B,IAAI,CAAC,CAAC0E,IAAI,IAAI,CAAC,CAACA,IAAI,CAACC,IAAI,IAAI,CAAC,CAACD,IAAI,CAACC,IAAI,CAACstB,MAAM,IAAIvtB,IAAI,CAACC,IAAI,CAACstB,MAAM,CAACprB,MAAM,GAAG,CAAC,EAAE;cAC5E,OAAO8X,WAAW,CAAC4nH,aAAa,CAAC7hI,IAAI,CAACC,IAAI,CAACstB,MAAM,CAAC,CAAC,CAAC,EAAEuQ,IAAI,CAACzJ,WAAW,CAAC;YAC3E;YAEA,IAAIytG,SAAS,GAAG9hI,IAAI,CAACC,IAAI,CAACmtB,OAAO,IAAIptB,IAAI,CAACC,IAAI,CAACmtB,OAAO,CAACjrB,MAAM,GAAG,CAAC,IAAInC,IAAI,CAACC,IAAI,CAAC8hI,SAAS,IAAI/hI,IAAI,CAACC,IAAI,CAAC8hI,SAAS,CAAC5/H,MAAM,GAAG,CAAC;YAE1H,IAAI,CAAC2/H,SAAS,EAAE;cACZ,IAAIx6H,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;cACzBD,QAAQ,CAACqb,MAAM,CAAC3iB,IAAI,CAAC;cACrB,OAAOsH,QAAQ,CAACG,OAAO;YAC3B;YAEA,IAAI,CAAC,CAACzH,IAAI,CAACC,IAAI,IAAI,CAAC,CAACD,IAAI,CAACC,IAAI,CAAC+hI,aAAa,EACxC/lI,aAAa,CAAC8rB,cAAc,GAAG/nB,IAAI,CAACC,IAAI,CAAC+hI,aAAa;YAE1D/nH,WAAW,CAACgoH,mCAAmC,CAACjiI,IAAI,EAAE89B,IAAI,EAAEgyE,OAAO,CAAC;YACpE71F,WAAW,CAACknH,wBAAwB,CAAC,IAAI,CAAC;UAC9C,CAAC,MAAM;YACH,IAAI,CAAC,CAACnhI,IAAI,IAAI,CAAC,CAACA,IAAI,CAACC,IAAI,IAAI,CAAC,CAACD,IAAI,CAACC,IAAI,CAACstB,MAAM,IAAIvtB,IAAI,CAACC,IAAI,CAACstB,MAAM,CAACprB,MAAM,GAAG,CAAC,EAAE;cAC5E,OAAO8X,WAAW,CAAC4nH,aAAa,CAAC7hI,IAAI,CAACC,IAAI,CAACstB,MAAM,CAAC,CAAC,CAAC,EAAEuQ,IAAI,CAACzJ,WAAW,CAAC;YAC3E;UACJ;UAEA,IAAI/sB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzBD,QAAQ,CAACE,OAAO,CAAC;YACb4lB,OAAO,EAAE;UACb,CAAC,CAAC;UACF,OAAO9lB,QAAQ,CAACG,OAAO;QAC3B,CAAC,EAAE,UAAUvH,GAAG,EAAE;UACda,OAAO,CAACC,GAAG,CAAC,QAAQ,EAAEd,GAAG,CAAC;UAC1B,IAAI,CAAC,CAACA,GAAG,IAAIA,GAAG,CAAC+qC,cAAc,CAAC,SAAS,CAAC,EAAE;YACxC/qC,GAAG,GAAGA,GAAG,CAACD,IAAI;UAClB;UACA,IAAI,CAACC,GAAG,EAAE;YACNA,GAAG,GAAG;cACF0W,OAAO,EAAEpa,cAAc,CAACe,SAAS,CAAC,0FAA0F,CAAC;cAC7Hu2C,MAAM,EAAE,CAAC;YACb,CAAC;UACL;UACA,IAAIxsC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzB;UACAD,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;UACpB,OAAOoH,QAAQ,CAACG,OAAO;QAC3B,CAAC,CAAC;QAEF,IAAIxL,aAAa,CAACX,MAAM,EAAE;UACtB+L,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,UAASqF,GAAG,EAAE;YACvB,IAAIA,GAAG,IAAI,OAAOA,GAAG,CAAC0uC,MAAM,KAAK,WAAW,IAAI1uC,GAAG,CAAC0uC,MAAM,KAAK,CAAC,CAAC,EAAE;cAC/D,IAAI3M,IAAI,GAAGtrC,OAAO,CAAC+F,IAAI,CAACiuG,QAAQ,CAAC;cACjC1oE,IAAI,CAACqoD,QAAQ,GAAGv1E,WAAW,CAACkyF,aAAa,CAACC,YAAY;cACtD,IAAI81B,aAAa,GAAGjmI,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,GAAGH,eAAe,GAAGD,eAAe;cACtGsxH,aAAa,CAAC7yC,cAAc,CAACygB,OAAO,EAAE3oE,IAAI,EAAElrC,aAAa,CAACX,MAAM,GAAG8J,GAAG,CAACwR,OAAO,GAAGlK,SAAS,CAAC;YAC/F;YAEA,OAAOtH,GAAG;UACd,CAAC,CAAC;QACN;QAEA,OAAOiC,EAAE;MACb,CAAC,CAAC;IACV,CAAC,MAAM;MACHwoG,QAAQ,CAAChE,UAAU,GAAG/tE,IAAI;MAC1Bz2B,EAAE,GAAGA,EAAE,CACFtH,IAAI,CAAC,YAAY;QACd,OAAO6hI,gBAAgB,GAAGp1G,QAAQ,CAACs/F,WAAW,CAAC,CAAChuF,IAAI,CAAC,CAAC,GAAGtR,QAAQ,CAAC6iE,cAAc,CAACygB,OAAO,EAAED,QAAQ,CAAC;MACvG,CAAC,CAAC;MAENxoG,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,UAAUC,IAAI,EAAE;QACzB;QACAopH,kBAAkB,CAACx5B,UAAU,CAAC9xD,IAAI,CAACgyD,OAAO,EAAE7zF,aAAa,CAACmuB,eAAe,EAAE;UACvEylF,QAAQ,EAAEA,QAAQ;UAClB/xE,IAAI,EAAEA,IAAI;UACVgyE,OAAO,EAAEA,OAAO;UAChBC,mBAAmB,EAAE91F,WAAW,CAACkyF,aAAa,CAAC+0B;QACnD,CAAC,CAAC,SAAM,CAAC,UAAShhI,GAAG,EAAE;UACnBa,OAAO,CAACqkB,KAAK,CAAC,wBAAwB,EAAEllB,GAAG,CAAC;QAChD,CAAC,CAAC;QACF,IAAIjE,aAAa,CAACmB,QAAQ,IAAIukI,gBAAgB,KAAK,IAAI,EAAE;UACrD,OAAO1nH,WAAW,CAAC+xF,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAEluE,IAAI,EAAEgyE,OAAO,CAAC,CACxD/vG,IAAI,CAAC,YAAY;YACd,IAAIuH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;YACzBD,QAAQ,CAACE,OAAO,CAAC;cACb4lB,OAAO,EAAE;YACb,CAAC,CAAC;YACF,OAAO9lB,QAAQ,CAACG,OAAO;UAC3B,CAAC,CAAC;QACV,CAAC,MAAM,IAAIxL,aAAa,CAACX,MAAM,EAAE;UAC7B,IAAI,CAAC,CAAC0E,IAAI,IAAI,CAAC,CAACA,IAAI,CAACC,IAAI,IAAI,CAAC,CAACD,IAAI,CAACC,IAAI,CAACstB,MAAM,IAAIvtB,IAAI,CAACC,IAAI,CAACstB,MAAM,CAACprB,MAAM,GAAG,CAAC,EAAE;YAC5E,OAAO8X,WAAW,CAAC4nH,aAAa,CAAC7hI,IAAI,CAACC,IAAI,CAACstB,MAAM,CAAC,CAAC,CAAC,EAAEuQ,IAAI,CAACzJ,WAAW,CAAC;UAC3E;UAEA,IAAIytG,SAAS,GAAG9hI,IAAI,CAACC,IAAI,CAACmtB,OAAO,IAAIptB,IAAI,CAACC,IAAI,CAACmtB,OAAO,CAACjrB,MAAM,GAAG,CAAC,IAAInC,IAAI,CAACC,IAAI,CAAC8hI,SAAS,IAAI/hI,IAAI,CAACC,IAAI,CAAC8hI,SAAS,CAAC5/H,MAAM,GAAG,CAAC;UAE1H,IAAI,CAAC2/H,SAAS,EAAE;YACZ,IAAIx6H,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;YACzBD,QAAQ,CAACqb,MAAM,CAAC3iB,IAAI,CAAC;YACrB,OAAOsH,QAAQ,CAACG,OAAO;UAC3B;UAEA,IAAI,CAAC,CAACzH,IAAI,CAACC,IAAI,IAAI,CAAC,CAACD,IAAI,CAACC,IAAI,CAAC+hI,aAAa,EACxC/lI,aAAa,CAACmuB,eAAe,GAAGpqB,IAAI,CAACC,IAAI,CAAC+hI,aAAa;UAE3D/nH,WAAW,CAACgoH,mCAAmC,CAACjiI,IAAI,EAAE89B,IAAI,EAAEgyE,OAAO,CAAC;UACpE71F,WAAW,CAACknH,wBAAwB,CAAC,CAAC;QAC1C,CAAC,MAAM;UACH,IAAI,CAAC,CAACnhI,IAAI,IAAI,CAAC,CAACA,IAAI,CAACC,IAAI,IAAI,CAAC,CAACD,IAAI,CAACC,IAAI,CAACstB,MAAM,IAAIvtB,IAAI,CAACC,IAAI,CAACstB,MAAM,CAACprB,MAAM,GAAG,CAAC,EAAE;YAC5E,OAAO8X,WAAW,CAAC4nH,aAAa,CAAC7hI,IAAI,CAACC,IAAI,CAACstB,MAAM,CAAC,CAAC,CAAC,EAAEuQ,IAAI,CAACzJ,WAAW,CAAC;UAC3E;QACJ;QACA,IAAI/sB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAAC;UACb4lB,OAAO,EAAE;QACb,CAAC,CAAC;QACF,OAAO9lB,QAAQ,CAACG,OAAO;MAC3B,CAAC,EAAE,UAAUvH,GAAG,EAAE;QACda,OAAO,CAACC,GAAG,CAAC,QAAQ,EAAEd,GAAG,CAAC;QAC1B,IAAI,CAAC,CAACA,GAAG,IAAIA,GAAG,CAAC+qC,cAAc,CAAC,SAAS,CAAC,EAAE;UACxC/qC,GAAG,GAAGA,GAAG,CAACD,IAAI;QAClB;QACA,IAAI,CAACC,GAAG,EAAE;UACNA,GAAG,GAAG;YACF0W,OAAO,EAAEpa,cAAc,CAACe,SAAS,CAAC,0FAA0F,CAAC;YAC7Hu2C,MAAM,EAAE,CAAC;UACb,CAAC;QACL;QACA,IAAIxsC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzB;QACAD,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;QACpB,OAAOoH,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC;MAEF,IAAIxL,aAAa,CAACX,MAAM,EAAE;QACtB+L,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,UAASqF,GAAG,EAAE;UACvB,IAAIA,GAAG,IAAI,OAAOA,GAAG,CAAC0uC,MAAM,KAAK,WAAW,IAAI1uC,GAAG,CAAC0uC,MAAM,KAAK,CAAC,CAAC,EAAE;YAC/D,IAAI3M,IAAI,GAAGtrC,OAAO,CAAC+F,IAAI,CAACiuG,QAAQ,CAAC;YACjC1oE,IAAI,CAACqoD,QAAQ,GAAGv1E,WAAW,CAACkyF,aAAa,CAACC,YAAY;YACtD,IAAI81B,aAAa,GAAGjmI,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,GAAGH,eAAe,GAAGD,eAAe;YACtGsxH,aAAa,CAAC7yC,cAAc,CAACygB,OAAO,EAAE3oE,IAAI,EAAElrC,aAAa,CAACX,MAAM,GAAG8J,GAAG,CAACwR,OAAO,GAAGlK,SAAS,CAAC;UAC/F;UAEA,OAAOtH,GAAG;QACd,CAAC,CAAC;MACN;MAEA,OAAOiC,EAAE;IACb;EACJ,CAAC;EAED4S,WAAW,CAAC4nH,aAAa,GAAG,UAASM,SAAS,EAAEC,WAAW,EAAsB;IAAA,IAApBC,UAAU,GAAAn1H,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,KAAK;IAC3E,IAAIi1H,SAAS,EAAE;MACX,IAAI/8G,KAAK,GAAG+8G,SAAS,CAAC50G,MAAM,CAACprB,MAAM,GAAG,CAAC,IAAIggI,SAAS,CAAC50G,MAAM,CAAC,CAAC,CAAC,IAAI40G,SAAS,CAAC50G,MAAM,CAAC,CAAC,CAAC,GAC/E40G,SAAS,CAAC50G,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;MAChC,IAAInI,KAAK,IAAIA,KAAK,CAACuP,YAAY,IAAIvP,KAAK,CAACuP,YAAY,CAACgmD,UAAU,CAAC,mBAAmB,CAAC,IAC9Ev1D,KAAK,IAAIA,KAAK,CAACk9G,WAAW,EAAE;QAC/B,IAAIh7H,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzB,IAAIqP,OAAO,GAAGwO,KAAK,CAACuP,YAAY;QAChC,IAAIvP,KAAK,CAACuP,YAAY,CAACgmD,UAAU,CAAC,mBAAmB,CAAC,EAAE;UACpD/jE,OAAO,GAAGpa,cAAc,CAACe,SAAS,CAAC,oFAAoF,EAAE;YAAC6kI,WAAW,EAAEA;UAAW,CAAC,CAAC;QACxJ;QACD,IAAIliI,GAAG,GAAG;UACLktB,OAAO,EAAE,KAAK;UACdxW,OAAO,EAAEA,OAAO;UAChBk9B,MAAM,EAAE,CAAC;QACb,CAAC;QACDxsC,QAAQ,CAACE,OAAO,CAACtH,GAAG,CAAC;QACrB,OAAOmiI,UAAU,GAAGniI,GAAG,GAAGoH,QAAQ,CAACG,OAAO;MAC9C;MAEA,IAAIH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACqb,MAAM,CAACw/G,SAAS,CAAC;MAC1B,OAAOE,UAAU,GAAG,KAAK,GAAG/6H,QAAQ,CAACG,OAAO;IAChD;IAEA,OAAO,IAAI;EACf,CAAC;EAEDwS,WAAW,CAACua,QAAQ,GAAG,UAAUsJ,IAAI,EAAEgyE,OAAO,EAAE35B,QAAQ,EAAEosD,gBAAgB,EAAE;IACxE,IAAIC,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAC6yE,OAAO,CAAC;IAExDhyE,IAAI,GAAGjiC,OAAO,CAAC2P,MAAM,CAACsyB,IAAI,EAAE;MACxBkC,cAAc,EAAE,CAACwiG,SAAS,GAAGvmI,aAAa,CAAC+jC,cAAc,GAAG8vE,OAAO,CAAC2yB;IACxE,CAAC,CAAC;IACF3kG,IAAI,CAACvnB,OAAO,GAAGu5F,OAAO,CAACv5F,OAAO;IAC9Bu5F,OAAO,CAAC12D,QAAQ,GAAGtb,IAAI,CAACsb,QAAQ;IAChC02D,OAAO,CAACrpF,UAAU,GAAGqX,IAAI,CAACrX,UAAU;IACpCqpF,OAAO,CAACnjF,UAAU,GAAGmR,IAAI,CAACnR,UAAU;IACpCmjF,OAAO,CAACj9E,QAAQ,GAAGiL,IAAI,CAACjL,QAAQ;IAChCiL,IAAI,CAAC4kG,aAAa,GAAGjvG,IAAI,CAACC,SAAS,CAAC73B,OAAO,CAAC2P,MAAM,CAACskG,OAAO,EAAE;MACxD9vE,cAAc,EAAE,CAACwiG,SAAS,GAAGvmI,aAAa,CAAC+jC,cAAc,GAAG8vE,OAAO,CAAC2yB;IACxE,CAAC,CAAC,CAAC;IACH3kG,IAAI,CAAC6kG,sBAAsB,GAAGJ,gBAAgB,KAAK,IAAI,GAAG,IAAI,GAAGK,qBAAqB,CAAC9kG,IAAI,EAAEgyE,OAAO,CAAC;IACrGhyE,IAAI,CAAC+kG,SAAS,GAAG,MAAM,GAAGzmI,aAAa,CAACs/C,yBAAyB,CAAC,IAAIlkB,IAAI,CAAC,CAAC,CAAC;IAC7E;IACA,IAAIs4E,OAAO,CAAC7Q,gBAAgB,EAAE;MAC1BnhE,IAAI,CAACjF,cAAc,GAAGi3E,OAAO,CAACj3E,cAAc;MAC5CiF,IAAI,CAACmhE,gBAAgB,GAAG6Q,OAAO,CAAC7Q,gBAAgB;MAChDnhE,IAAI,CAACohE,oBAAoB,GAAG4Q,OAAO,CAAC5Q,oBAAoB;IAC5D,CAAC,MAAM;MACH,OAAOphE,IAAI,CAACjF,cAAc;MAC1B,OAAOiF,IAAI,CAACmhE,gBAAgB;MAC5B,OAAOnhE,IAAI,CAACohE,oBAAoB;IACpC;IAEA,IAAG4Q,OAAO,IAAIA,OAAO,CAACgzB,QAAQ,KAAK,IAAI,EAAC;MACpChlG,IAAI,CAACilG,iCAAiC,GAAG,KAAK;IAClD;IAEA,IAAIC,EAAE,GAAG;MACLxzC,QAAQ,EAAErZ,QAAQ;MAClBriC,MAAM,EAAEx3C,SAAS,CAACszC,YAAY,CAACumC,QAAQ,CAAC;MACxCjsD,QAAQ,EAAEjuB,aAAa,CAAC+rB,YAAY;MACpCsE,UAAU,EAAErwB,aAAa,CAAC8rB,cAAc;MACxCyhB,YAAY,EAAEvtC,aAAa,CAAC2qB,YAAY;MACxC40B,QAAQ,EAAEv/C,aAAa,CAACiN;IAC5B,CAAC;IAED,IAAIqP,GAAG,GAAG0B,WAAW,CAAC6xG,WAAW,CAAChuF,IAAI,EAAEgyE,OAAO,EAAEkzB,EAAE,EAAET,gBAAgB,CAAC;IACtE,IAAIU,UAAU,GACT,CAAC,CAACnlG,IAAI,CAACjJ,QAAQ,IACZiJ,IAAI,CAACjJ,QAAQ,CAAC1yB,MAAM,GAAG,CAAC,IACxB27B,IAAI,CAACjJ,QAAQ,CAACiJ,IAAI,CAACjJ,QAAQ,CAAC1yB,MAAM,GAAG,CAAC,CAAC,CAACy6B,SAAS,KAAK,WAAW;IAAK;IAC1Eu5C,QAAQ,KAAK,QAAQ;IAAI;IACzBA,QAAQ,KAAK,WAAW,IACxBA,QAAQ,KAAK,OAAO;IAExB,IAAIl6E,aAAa,CAACX,MAAM,IAAI2nI,UAAU,EAAE;MACpC;MACA1qH,GAAG,GAAGA,GAAG,CAACxY,IAAI,CACV,UAAUqF,GAAG,EAAE;QACX,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;QACrB,OAAOkC,QAAQ,CAACG,OAAO;MAC3B,CAAC,EACD,UAAUvH,GAAG,EAAE;QACX;QACA,IAAIinC,IAAI,GAAGtnC,CAAC,CAAC2L,MAAM,CAACw3H,EAAE,EAAE;UACpB9iG,aAAa,EAAEjkC,aAAa,CAACikC,aAAa;UAC1CC,cAAc,EAAElkC,aAAa,CAACkkC,cAAc;UAC5CE,QAAQ,EAAEpkC,aAAa,CAACokC;QAC5B,CAAC,CAAC;QAEFpmB,WAAW,CAACipH,cAAc,CAACplG,IAAI,EAAEgyE,OAAO,EAAE3oE,IAAI,CAAC;QAC/C,IAAI7/B,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAACtH,GAAG,CAAC;QACrB,OAAOoH,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC;IACV;IAEA,OAAO8Q,GAAG;EACd,CAAC;EAED0B,WAAW,CAAC8yG,QAAQ,GAAG,UAAUjvF,IAAI,EAAEgyE,OAAO,EAAE;IAC5C,OAAO71F,WAAW,CAACua,QAAQ,CAACsJ,IAAI,EAAEgyE,OAAO,EAAE71F,WAAW,CAACkyF,aAAa,CAAC+0B,MAAM,CAAC;EAChF,CAAC;EAEDjnH,WAAW,CAACm0G,iBAAiB,GAAG,UAAUz6F,MAAM,EAAE;IAC9C;IACA,IAAIwvG,YAAY,GAAG/Z,kBAAkB,CAACx5B,UAAU,CAACj8D,MAAM,EAAE13B,aAAa,CAACmuB,eAAe,EAAE,QAAQ,CAAC,SACvF,CAAC,UAASlqB,GAAG,EAAE;MACjBa,OAAO,CAACqkB,KAAK,CAAC,iCAAiC,EAAEllB,GAAG,CAAC;IACzD,CAAC,CAAC;IAEN,IAAI,CAACjE,aAAa,CAACX,MAAM,IAAI,CAACwV,UAAU,CAACE,WAAW,EAAE;MAClD,OAAOmyH,YAAY,CAACpjI,IAAI,CAAC,YAAW;QAChC,OAAO6Q,eAAe,CAACggF,UAAU,CAACj9D,MAAM,EAAE1Z,WAAW,CAACkyF,aAAa,CAAC+0B,MAAM,CAAC;MAC/E,CAAC,CAAC,CAACnhI,IAAI,CAAC,YAAY;QAChB,OAAOosB,qBAAqB,CAACiiG,iBAAiB,CAACz6F,MAAM,CAAC;MAC1D,CAAC,CAAC;IACN,CAAC,MAAM;MACH,OAAOwvG,YAAY,CAACpjI,IAAI,CAAC,YAAW;QAChC,OAAOosB,qBAAqB,CAACiiG,iBAAiB,CAACz6F,MAAM,CAAC;MAC1D,CAAC,CAAC;IACN;EACJ,CAAC;EAED1Z,WAAW,CAACmpH,SAAS,GAAG,UAAUtlG,IAAI,EAAEgyE,OAAO,EAAE;IAC7CA,OAAO,CAACp3E,SAAS,GAAG,OAAO;IAC3B,OAAOze,WAAW,CAACua,QAAQ,CAACsJ,IAAI,EAAEgyE,OAAO,EAAE,OAAO,CAAC;EACvD,CAAC;EAED71F,WAAW,CAACopH,aAAa,GAAG,UAAUvlG,IAAI,EAAEgyE,OAAO,EAAE;IACjDA,OAAO,CAACp3E,SAAS,GAAG,WAAW;IAC/B;IACA,IAAI/7B,QAAQ,GAAGmzG,OAAO,CAACnzG,QAAQ;IAC/B,IAAI,CAAC,CAACA,QAAQ,EAAE;MACZ,IAAIA,QAAQ,CAAC8kG,cAAc,EAAE;QACzB,IAAIn6F,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzB,IAAIktB,YAAY,GAAGj4B,cAAc,CAACe,SAAS,CAAC,6BAA6B,CAAC;QAC1E+J,QAAQ,CAACqb,MAAM,CAAC8R,YAAY,CAAC;QAC7B,OAAOntB,QAAQ,CAACG,OAAO;MAC3B,CAAC,MAAM,IAAI9K,QAAQ,CAACs4C,WAAW,GAAG,CAAC,EAAE;QACjC,IAAIquF,YAAY,GAAGlnI,aAAa,CAAC6uB,SAAS,CAAC6kF,OAAO,CAACv3E,OAAO,EAAE,CAAC,CAAC;QAC9D,IAAIgrG,WAAW,GAAGnnI,aAAa,CAAC6uB,SAAS,CAACtuB,QAAQ,CAACuC,OAAO,EAAE,CAAC,CAAC;QAC9D,IAAIk4B,KAAK,GAAGh7B,aAAa,CAAC6uB,SAAS,CAACtuB,QAAQ,CAACs4C,WAAW,EAAE,CAAC,CAAC;QAC5D,IAAKquF,YAAY,GAAGC,WAAW,GAAInsG,KAAK,EAAE;UACtC,IAAI9vB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzB,IAAIktB,YAAY,GAAGj4B,cAAc,CAACe,SAAS,CAAC,wBAAwB,CAAC,GACjE,OAAO,GACPf,cAAc,CAACe,SAAS,CAAC,uDAAuD,CAAC,GACjFwoB,OAAO,CAAC,UAAU,CAAC,CAACu9G,YAAY,GAAGC,WAAW,CAAC,GAC/C,IAAI,GACJ/mI,cAAc,CAACe,SAAS,CAAC,uCAAuC,CAAC,GAAGwoB,OAAO,CAAC,UAAU,CAAC,CAACqR,KAAK,CAAC;UAClG9vB,QAAQ,CAACqb,MAAM,CAAC8R,YAAY,CAAC;UAC7B,OAAOntB,QAAQ,CAACG,OAAO;QAC3B;MACJ;IAEJ;IAEA,OAAOwS,WAAW,CAACua,QAAQ,CAACsJ,IAAI,EAAEgyE,OAAO,EAAE,WAAW,CAAC;EAC3D,CAAC;EAED71F,WAAW,CAACupH,gBAAgB,GAAG,UAAU7vG,MAAM,EAAE67D,QAAQ,EAAE;IACvD,IAAIhjE,QAAQ,GAAG5b,eAAe;IAC9B,IAAIvJ,EAAE,GAAGmlB,QAAQ,CAACokE,UAAU,CAACj9D,MAAM,EAAE67D,QAAQ,CAAC;IAC9C,OAAOnoF,EAAE;EACb,CAAC;EAED4S,WAAW,CAACslF,gBAAgB,GAAG,UAAU5rE,MAAM,EAAE67D,QAAQ,EAAE4P,aAAa,EAAE;IACtE,IAAI93F,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAItL,aAAa,CAACX,MAAM,KAAK,KAAK,IAAI,CAACwV,UAAU,CAACE,WAAW,EAAE;MAC3D,IAAIwb,QAAQ,GAAG5b,eAAe;MAC9B,IAAIvJ,EAAE,GAAGmlB,QAAQ,CAAC+yE,gBAAgB,CAACtjG,aAAa,CAACuoC,eAAe,EAAE7Q,MAAM,EAAE67D,QAAQ,EAAE4P,aAAa,CAAC,CAC7Fr/F,IAAI,CAAC,UAAUE,IAAI,EAAE;QAClB,IAAIkX,GAAG,GAAG,EAAE;QACZtX,CAAC,CAACmC,IAAI,CAAC/B,IAAI,EAAE,UAAUgC,GAAG,EAAEtG,EAAE,EAAE;UAC5BA,EAAE,CAACmiC,IAAI,GAAGrK,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAAC8zF,MAAM,CAAC;UAE/B9zF,EAAE,CAACmiC,IAAI,GAAGlH,gFAAc,CAACj7B,EAAE,CAACmiC,IAAI,CAAC;UACjCniC,EAAE,CAACwrC,IAAI,GAAG1T,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAAC+zF,UAAU,CAAC;UACnC/zF,EAAE,CAACyD,MAAM,GAAGzD,EAAE,CAAC4zF,QAAQ;UACvB,OAAO5zF,EAAE,CAAC8zF,MAAM;UAChB,OAAO9zF,EAAE,CAAC+zF,UAAU;UACpBv4E,GAAG,CAAC/U,IAAI,CAACzG,EAAE,CAAC;QAChB,CAAC,CAAC;QAEF2L,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACrBD,QAAQ,CAACE,OAAO,CAAC2P,GAAG,CAAC;QACrB,OAAO7P,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC;MACN,OAAOJ,EAAE;IACb,CAAC,MAAM;MACHC,QAAQ,CAACE,OAAO,CAAC,EAAE,CAAC;MACpB,OAAOF,QAAQ,CAACG,OAAO;IAC3B;EAEJ,CAAC;EAGDwS,WAAW,CAACwpH,qBAAqB,GAAG,UAAUtsG,IAAI,EAAEC,KAAK,EAAEokB,QAAQ,EAAEzpC,OAAO,EAAE;IAC1E,IAAIya,QAAQ,GAAGL,qBAAqB;IACpC,IAAI9kB,EAAE,GAAGmlB,QAAQ,CAACyiE,eAAe,CAAC93D,IAAI,EAAEC,KAAK,EAAEokB,QAAQ,EAAEzpC,OAAO,CAAC,SACvD,CAAC,UAAU7R,GAAG,EAAE;MAClB,IAAIA,GAAG,CAAC4zC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC73C,aAAa,CAACX,MAAM,EAC1C,MAAM4E,GAAG,CAAC,KACT;QACD,IAAIssB,QAAQ,GAAG3b,eAAe;QAC9B,OAAO2b,QAAQ,CAACyiE,eAAe,CAAC93D,IAAI,EAAEC,KAAK,EAAEokB,QAAQ,EAAEzpC,OAAO,CAAC,CAC1DhS,IAAI,CAAC,UAAUqF,GAAG,EAAE;UACjB,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;UAC1B,OAAOqH,QAAQ,CAACG,OAAO;QAC3B,CAAC,CAAC;MACV;IACJ,CAAC,CAAC;IAEN,OAAOJ,EAAE;EACb,CAAC;EAED4S,WAAW,CAACiyG,gBAAgB,GAAG,UAAU/0F,IAAI,EAAEC,KAAK,EAAErlB,OAAO,EAAEisG,OAAO,EAAEphH,UAAU,EAAE;IAChF,IAAI4vB,QAAQ,GAAGL,qBAAqB;IACpC,IAAI9kB,EAAE,GAAGmlB,QAAQ,CAAC0/F,gBAAgB,CAAC/0F,IAAI,EAAEC,KAAK,EAAErlB,OAAO,EAAEisG,OAAO,EAAEphH,UAAU,CAAC,CAACmD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC9F,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAEzB1H,CAAC,CAACmC,IAAI,CAACoD,GAAG,CAACnF,IAAI,CAAC81B,MAAM,EAAE,UAAU9zB,GAAG,EAAEtG,EAAE,EAAE;QACvCA,EAAE,CAAC+nI,SAAS,GAAG72G,MAAM,CAACC,GAAG,CAACnxB,EAAE,CAACgoI,YAAY,CAAC,CAAC91D,KAAK,CAAC,CAAC,CAAC7oD,MAAM,CAAC,uBAAuB,CAAC;QAClF,IAAG,CAACrpB,EAAE,CAACioI,aAAa,EAAE;UAClBjoI,EAAE,CAACioI,aAAa,GAAGpnI,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC;UAClD5B,EAAE,CAACkoI,YAAY,GAAG,IAAI;QAC1B,CAAC,MAAM;UACH,IAAI9qH,GAAG,GAAGpd,EAAE,CAACioI,aAAa,CAACxsH,KAAK,CAAC,IAAI,CAAC;UACtC,IAAI+lF,CAAC,GAAGnmE,4CAAU,CAAC/wB,IAAI,CAAC8S,GAAG,CAAC,CAC3BgvC,MAAM,CAAC,CAAC,CACR0T,QAAQ,CAAC,CAAC,CACVvO,OAAO,CAAC,UAASz8C,CAAC,EAAC;YAAE,OAAO+E,MAAM,CAAC/E,CAAC,CAACkM,MAAM,CAAC,CAAC,CAAC,CAAC;UAAC,CAAC,CAAC,CAClDywC,OAAO,CAAC,CAAC,CAAC18C,IAAI,CAAC,IAAI,CAAC;UACrB/U,EAAE,CAACioI,aAAa,GAAGzmC,CAAC;QACxB;QAEA,IAAGxhG,EAAE,CAACmoI,aAAa,EAAE;UACjB,IAAG;YACC,IAAIC,KAAK,GAAGtwG,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACmoI,aAAa,CAAC;YACxC,IAAGC,KAAK,IAAIA,KAAK,CAACC,GAAG,KAAK,MAAM,EAAE;cAC9BroI,EAAE,CAACsoI,iBAAiB,GAAG,IAAI;YAC/B;UACJ,CAAC,CAAC,OAAM3mH,CAAC,EAAE,CAEX;QACJ;MACJ,CAAC,CAAC;MAEFhW,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EAEb,CAAC;EAED4S,WAAW,CAAC+yG,YAAY,GAAG,YAAY;IACnC,IAAIxgG,QAAQ,GAAGL,qBAAqB;IACpC,IAAI9kB,EAAE,GAAGmlB,QAAQ,CAACwgG,YAAY,CAAC,CAAC,CAACjtH,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjD,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;EAED4S,WAAW,CAACiqH,gBAAgB,GAAG,KAAK;EACpCjqH,WAAW,CAAC+xF,gBAAgB,GAAG,UAAUjjF,KAAK,EAAEo7G,aAAa,EAAErmG,IAAI,EAAEgyE,OAAO,EAAE;IAC1E,IAAI71F,WAAW,CAACiqH,gBAAgB,EAAE;MAC9BnjI,OAAO,CAACC,GAAG,CAAC,0BAA0B,CAAC;MACvC,OAAOysB,OAAO,CAACjmB,OAAO,CAAC,KAAK,CAAC;IACjC;IAEAyS,WAAW,CAACiqH,gBAAgB,GAAG,IAAI;IACnC,IAAI;MACA,IAAI78H,EAAE,GAAGuJ,eAAe,CAAC2uF,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE4kC,aAAa,KAAK,IAAI,GAAG,IAAI,GAAGlqH,WAAW,CAACkyF,aAAa,CAAClpC,KAAK,EAAEl6C,KAAK,CAAC,CAClIhpB,IAAI,CAAC,UAAUE,IAAI,EAAE;QAClB,IAAImkI,KAAK,GAAG,EAAE;QACd,IAAIC,GAAG,GAAG,EAAE;QACZxkI,CAAC,CAACmC,IAAI,CAAC/B,IAAI,EAAE,UAAUgC,GAAG,EAAEtG,EAAE,EAAE;UAC5B,IAAI2oI,WAAW,GAAG7wG,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAAC+zF,UAAU,CAAC,CAACmc,UAAU;UACtDu4B,KAAK,CAAChiI,IAAI,CAACkiI,WAAW,CAAC;UACvB,IAAI/7E,IAAI,GAAG,IAAI/wB,IAAI,CAAC,CAAC;UACrB,IAAI;YACA+wB,IAAI,GAAG17B,MAAM,CAACy3G,WAAW,CAAC9sG,IAAI,CAAC,CAAC4tB,MAAM,CAAC,CAAC;UAC5C,CAAC,CAAC,OAAO9nC,CAAC,EAAE;YACRvc,OAAO,CAACqkB,KAAK,CAAC9H,CAAC,CAAC;UACpB;UACA+mH,GAAG,CAACjiI,IAAI,CAAC;YACL+1E,WAAW,EAAE5vB;UACjB,CAAC,CAAC;QACN,CAAC,CAAC;QAENnsD,aAAa,CAACk8E,kBAAkB,CAAC+rD,GAAG,CAAC;QAEjC,IAAID,KAAK,CAACjiI,MAAM,GAAG,CAAC,EAAE;UAClB,OAAOgqB,qBAAqB,CAAC2/F,WAAW,CAACsY,KAAK,CAAC,CAC1CrkI,IAAI,CAAC,UAAUC,IAAI,EAAE;YAElB,IAAImtB,QAAQ,GAAG,EAAE;YAEjB,IAAI,CAACntB,IAAI,EAAE;cACP,IAAIsH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;cACzBD,QAAQ,CAACqb,MAAM,CAAC,kBAAkB,CAAC;cACnCwK,QAAQ,CAAC/qB,IAAI,CAACkF,QAAQ,CAACG,OAAO,CAAC;YACnC,CAAC,MAAM;cACH,IAAIzH,IAAI,CAACC,IAAI,CAAC8hI,SAAS,IAAI/hI,IAAI,CAACC,IAAI,CAAC8hI,SAAS,CAAC5/H,MAAM,GAAG,CAAC,EAAE;gBACvDtC,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAACC,IAAI,CAAC8hI,SAAS,EAAE,UAAU9/H,GAAG,EAAEtG,EAAE,EAAE;kBAC3C,IAAI0xB,GAAG,GAAGzc,eAAe,CAACggF,UAAU,CAACj1F,EAAE,CAACm0F,OAAO,EAAE,IAAI,EAAEn0F,EAAE,CAACm9E,WAAW,CAAC;kBACtE3rD,QAAQ,CAAC/qB,IAAI,CAACirB,GAAG,CAAC;gBACtB,CAAC,CAAC;cACN;cAEA,IAAIrtB,IAAI,CAACC,IAAI,CAACmtB,OAAO,IAAIptB,IAAI,CAACC,IAAI,CAACmtB,OAAO,CAACjrB,MAAM,GAAG,CAAC,EAAE;gBACnDtC,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAACC,IAAI,CAACmtB,OAAO,EAAE,UAAUnrB,GAAG,EAAEtG,EAAE,EAAE;kBACzC,IAAI0xB,GAAG,GAAGzc,eAAe,CAACggF,UAAU,CAACj1F,EAAE,CAACm0F,OAAO,EAAE,IAAI,EAAEn0F,EAAE,CAACm9E,WAAW,CAAC;kBACtE3rD,QAAQ,CAAC/qB,IAAI,CAACirB,GAAG,CAAC;gBACtB,CAAC,CAAC;gBAEFpT,WAAW,CAACgnH,wBAAwB,GAAG,IAAI;cAC/C;cAEAhnH,WAAW,CAACgoH,mCAAmC,CAACjiI,IAAI,EAAE89B,IAAI,EAAEgyE,OAAO,CAAC;cAEpE,IAAI9vG,IAAI,CAACC,IAAI,CAACstB,MAAM,IAAIvtB,IAAI,CAACC,IAAI,CAACstB,MAAM,CAACprB,MAAM,GAAG,CAAC,EAAE;gBACjDtC,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAACC,IAAI,CAACstB,MAAM,EAAE,UAAUtrB,GAAG,EAAEtG,EAAE,EAAE;kBACxC,IAAIymI,WAAW,GAAGgC,KAAK,CAACh3H,IAAI,CAAC,UAAArL,CAAC;oBAAA,OAAIA,CAAC,CAAC+tF,OAAO,KAAKn0F,EAAE,CAACm0F,OAAO;kBAAA,EAAC,CAACz7D,WAAW;kBACvE,IAAIkwG,WAAW,GAAGtqH,WAAW,CAAC4nH,aAAa,CAAClmI,EAAE,EAAEymI,WAAW,EAAE,IAAI,CAAC;kBAClE,IAAImC,WAAW,IAAI,CAACA,WAAW,CAACn3G,OAAO,IAAIm3G,WAAW,CAAC3tH,OAAO,EAAE;oBAC5D1a,YAAY,CAACiE,SAAS,CAACokI,WAAW,CAAC3tH,OAAO,CAAC;kBAC/C;kBACA,IAAIyW,GAAG,GAAG,CAACk3G,WAAW,GAChB3zH,eAAe,CAAC8wF,cAAc,CAAC/lG,EAAE,CAACm0F,OAAO,EAAE,IAAI,EAAEn0F,EAAE,CAACm9E,WAAW,CAAC,GAChEloE,eAAe,CAACgxF,qBAAqB,CAACjmG,EAAE,CAACm0F,OAAO,EAAEy0C,WAAW,CAAC3tH,OAAO,CAAC;kBAC5EuW,QAAQ,CAAC/qB,IAAI,CAACirB,GAAG,CAAC;gBACtB,CAAC,CAAC;cACN;YACJ;YAEA,OAAOI,OAAO,CAACC,GAAG,CAACP,QAAQ,CAAC;UAChC,CAAC,CAAC,CACDptB,IAAI,CAAC,UAAUC,IAAI,EAAE;YAClB,OAAO4Q,eAAe,CAAC0uF,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE6kC,aAAa,KAAK,IAAI,GAAG,IAAI,GAAGlqH,WAAW,CAACkyF,aAAa,CAAClpC,KAAK,CAAC,CAC1HljE,IAAI,CAAC,UAAUvC,GAAG,EAAE;cACjB;cACA,IAAIA,GAAG,IAAI,CAAC,EAAE;gBAEV,OAAOoT,eAAe,CAACqyF,YAAY,CAAC,CAAC,CAChCljG,IAAI,CAAC,YAAY;kBACd,OAAOka,WAAW,CAAC4nF,eAAe,CAAC,CAAC;gBACxC,CAAC,CAAC,CACD9hG,IAAI,CAAC,YAAY;kBACd,IAAIka,WAAW,CAACgnH,wBAAwB,EAAE;oBACtC,OAAOhnH,WAAW,CAACknH,wBAAwB,CAAC,CAAC,CACxCphI,IAAI,CAAC,YAAY;sBACdka,WAAW,CAACgnH,wBAAwB,GAAG,KAAK;sBAC5C,OAAO,KAAK;oBAChB,CAAC,CAAC;kBACV;gBACJ,CAAC,CAAC;cACV,CAAC,MAAM;gBACH,IAAI35H,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;gBACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;gBACtB,OAAOF,QAAQ,CAACG,OAAO;cAC3B;YACJ,CAAC,CAAC;UACV,CAAC,CAAC;QACV,CAAC,MAAM;UACHwS,WAAW,CAACiqH,gBAAgB,GAAG,KAAK;UACpC,OAAO,KAAK;QAChB;MACJ,CAAC,CAAC,WACM,CAAC,YAAM;QACXjqH,WAAW,CAACiqH,gBAAgB,GAAG,KAAK;MACxC,CAAC,CAAC;IACN,CAAC,CACD,OAAO5mH,CAAC,EAAE;MACNrD,WAAW,CAACiqH,gBAAgB,GAAG,KAAK;MACpC,MAAM5mH,CAAC;IACX;IAEA,OAAOjW,EAAE,CAACtH,IAAI,CAAC,YAAY;MACvB,OAAO6Q,eAAe,CAAC2uF,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAEtlF,WAAW,CAACkyF,aAAa,CAAClpC,KAAK,CAAC,CACrFljE,IAAI,CAAC,UAAUC,IAAI,EAAE;QAClB,IAAIA,IAAI,CAACmC,MAAM,GAAG,CAAC,IAAIlG,aAAa,CAACmB,QAAQ,KAAK,IAAI,EAAE;UACpD,OAAO,IAAI;QACf,CAAC,MAAM;UACH,OAAO,KAAK;QAChB;MACJ,CAAC,CAAC;IACV,CAAC,CAAC;EACN,CAAC;EAGD6c,WAAW,CAAC2T,WAAW,GAAG,YAAY;IAClC,IAAI,EAAE3xB,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,CAAC,EACjD/U,aAAa,CAAC4xB,mBAAmB,CAAC5T,WAAW,CAAC+xF,gBAAgB,CAAC;EACvE,CAAC;;EAED;AACR;AACA;EACQ/xF,WAAW,CAACuqH,kBAAkB,GAAG,UAAU74H,WAAW,EAAE84H,cAAc,EAAE;IACpE,IAAIC,kBAAkB,GAAG/4H,WAAW,CAACu0D,gBAAgB,KAAK,IAAI;IAC9D,IAAIykE,oBAAoB,GAAGh5H,WAAW,CAACi5H,kBAAkB,KAAK,IAAI;IAElE/kI,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;MACjD,IAAIkpI,IAAI,GAAGlpI,EAAE,CAACm+B,KAAK,GAAG,CAAC,IAAI4qG,kBAAkB,IAAIC,oBAAoB,GAAG,CAAC,CAAC,GAAG,CAAC;MAE9E,IAAIE,IAAI,GAAG,CAAC,EAAE;QACVlpI,EAAE,CAAC++B,YAAY,GAAG+pG,cAAc,GAAG9oI,EAAE,CAACq/B,qBAAqB,GACvDr/B,EAAE,CAACq/B,qBAAqB,GAAG/gB,WAAW,CAACqd,YAAY,CAAC37B,EAAE,CAACm/B,KAAK,EAAEn/B,EAAE,CAACq/B,qBAAqB,CAAC;MAC/F;IACJ,CAAC,CAAC;EACN,CAAC;EAED/gB,WAAW,CAAC6qH,2BAA2B,GAAG,UAAUn5H,WAAW,EAAE;IAE7D,IAAI+4H,kBAAkB,GAAG/4H,WAAW,CAACu0D,gBAAgB,KAAK,IAAI;IAC9D,IAAIykE,oBAAoB,GAAGh5H,WAAW,CAACi5H,kBAAkB,KAAK,IAAI;IAClE,IAAIG,eAAe,GAAGp5H,WAAW;IAEjC9L,CAAC,CAACmC,IAAI,CAAC+iI,eAAe,CAACrtG,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;MACrD,IAAIkpI,IAAI,GAAGlpI,EAAE,CAACm+B,KAAK,GAAG,CAAC,IAAI4qG,kBAAkB,IAAIC,oBAAoB,GAAG,CAAC,CAAC,GAAG,CAAC;MAC9E,IAAI9qG,KAAK,GAAGl+B,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAACi9B,YAAY,GAAGisG,IAAI;MAEjD,IAAIA,IAAI,GAAG,CAAC,EAAE;QAEVlpI,EAAE,CAACq/B,qBAAqB,GAAGr/B,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAACi9B,YAAY,GAAGisG,IAAI;;QAEhE;QACA;QACA;QACA;QACA;QACA;MACJ;IACJ,CAAC,CAAC;EACN,CAAC;;EAED;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACQ5qH,WAAW,CAACka,wBAAwB,GAAG,UAAUxoB,WAAW,EAAEmoC,MAAM,EAAEkxF,UAAU,EAAEC,iBAAiB,EAAEC,YAAY,EAAEC,eAAe,EAAEC,cAAc,EAAE;IAChJ,IAAI5C,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAACtxB,WAAW,CAAC;IAE5D,IAAI62H,SAAS,EACT,OAAOxB,8EAAY,CAACr1H,WAAW,EAAEmoC,MAAM,EAAEkxF,UAAU,EAAEE,YAAY,EAAEC,eAAe,CAAC;IAEvF,IAAIT,kBAAkB,GAAG/4H,WAAW,CAACu0D,gBAAgB,KAAK,IAAI;IAC9D,IAAIykE,oBAAoB,GAAGh5H,WAAW,CAACi5H,kBAAkB,KAAK,IAAI;IAClE,IAAIS,QAAQ,GAAG15H,WAAW,CAACm3H,QAAQ,KAAK,IAAI;IAE5C,IAAIiC,eAAe,GAAGp5H,WAAW,CAAC,CAAC;;IAEnC;IACAo5H,eAAe,CAACO,iBAAiB,GAAG,GAAG;IAEvC,IAAIC,IAAI,GAAGnpI,aAAa;IACxB,IAAIopI,gBAAgB,GAAG,KAAK;IAC5B,IAAIC,YAAY,GAAIxpI,aAAa,CAACukC,oBAAoB,IAAI,WAAW,GAAG,CAAC,GAAG,CAAE;IAE9E,IAAIukG,eAAe,CAACrsG,SAAS,KAAK,WAAW,IAAIob,MAAM,KAAK,QAAQ,EAAE;MAClE,IAAIqxF,eAAe,EAAE;QACjBrxF,MAAM,GAAG,WAAW;MACxB,CAAC,MAAM;QACHA,MAAM,GAAG,kBAAkB;MAC/B;IACJ;IAEA,IAAIixF,eAAe,CAACrsG,SAAS,KAAK,OAAO,IAAIob,MAAM,KAAK,QAAQ,EAAE;MAC9D,IAAIqxF,eAAe,EAAE;QACjBrxF,MAAM,GAAG,OAAO;MACpB,CAAC,MAAM;QACHA,MAAM,GAAG,cAAc;MAC3B;IACJ;IAEA,IAAI4xF,YAAY,GAAG5xF,MAAM,IAAI,QAAQ,IAAKA,MAAM,CAAC1oC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAK0oC,MAAM,CAAC3xC,MAAM;IAEzF,QAAQ2xC,MAAM;MACV,KAAK,MAAM;MACX,KAAK,QAAQ;MACb,KAAK,QAAQ;MACb,KAAK,OAAO;QACR0xF,gBAAgB,GAAG,KAAK;QACxB;MACJ,KAAK,OAAO;MACZ,KAAK,cAAc;MACnB,KAAK,WAAW;MAChB,KAAK,kBAAkB;QACnBA,gBAAgB,GAAG,IAAI;QACvB;IACR;IAEA,IAAId,kBAAkB,IAAIC,oBAAoB,EAC1Ca,gBAAgB,GAAG,IAAI;IAE3B,IAAIG,YAAY,GAAG1pI,aAAa,CAACwkC,YAAY,KAAK,MAAM;IACxD,IAAIwkG,iBAAiB,IAAI,IAAI,IAAIA,iBAAiB,IAAIv4H,SAAS,EAAE;MAC7Di5H,YAAY,GAAGV,iBAAiB;IACpC;IAEA,IAAI/wG,iBAAiB,GAAG;MACpB47D,OAAO,EAAEi1C,eAAe,CAAC5lI,EAAE;MAC3B25E,WAAW,EAAE,CAACisD,eAAe,CAACjsD,WAAW,GAAGpzD,KAAK,CAACuE,OAAO,CAAC,CAAC,GAAG86G,eAAe,CAACjsD,WAAW;MACzFthD,IAAI,EAAE3K,MAAM,CAACC,GAAG,CAAC,CAAC;MAClB84G,SAAS,EAAEb,eAAe,CAACa,SAAS;MACpCj5G,UAAU,EAAE04G,QAAQ,GAAGN,eAAe,CAACp4G,UAAU,GAAG1wB,aAAa,CAAC8rB,cAAc;MAChF1oB,QAAQ,EAAEpD,aAAa,CAACqD,QAAQ;MAChC80B,YAAY,EAAEuxG,YAAY;MAC1BE,gBAAgB,EAAEL,gBAAgB;MAClCx1B,eAAe,EAAE20B,oBAAoB,GAAG,QAAQ,GAAG7wF,MAAM;MACzD/mB,mBAAmB,EAAEg4G,eAAe,CAAC7zH,mBAAmB,GAAG6zH,eAAe,CAAC7zH,mBAAmB,CAACzS,IAAI,GAAG,EAAE;MACxGo0B,QAAQ,EAAEwyG,QAAQ,GAAGvnG,IAAI,CAACjL,QAAQ,IAAI,EAAE,GAAG52B,aAAa,CAACiuB,QAAQ;MACjEvjB,UAAU,EAAEo+H,eAAe,CAACpoI,QAAQ,CAACwC,EAAE;MACvC+4B,YAAY,EAAE6sG,eAAe,CAACpoI,QAAQ,CAAC8B,IAAI;MAC3Cm0B,KAAK,EAAE,EAAE;MACTiC,QAAQ,EAAE,EAAE;MACZyhD,UAAU,EAAE,EAAE;MACdjiD,WAAW,EAAEgxG,QAAQ,GAAGN,eAAe,CAAC1wG,WAAW,GAAG,CAACp4B,aAAa,CAACymC,cAAc,GAAGzmC,aAAa,CAACymC,cAAc,GAAG,EAAE,KAClHqiG,eAAe,CAACtsG,gBAAgB,GAAGssG,eAAe,CAACtsG,gBAAgB,GAAG,QAAQ,CAAC,IAC/Ex8B,aAAa,CAAC0mC,cAAc,GAAG1mC,aAAa,CAAC0mC,cAAc,GAAG,EAAE,CAAC;MACtElK,gBAAgB,EAAEssG,eAAe,CAACtsG,gBAAgB,GAAGssG,eAAe,CAACtsG,gBAAgB,GAAG,QAAQ;MAChGV,YAAY,EAAEgtG,eAAe,CAACjtG,OAAO;MACrChD,KAAK,EAAEtf,MAAM,CAACuvH,eAAe,CAACjwG,KAAK,CAAC;MACpCi7D,eAAe,EAAE9zF,aAAa,CAACmuB,eAAe;MAC9C07G,kBAAkB,EAAE,QAAQ;MAC5BC,gBAAgB,EAAErB,kBAAkB;MACpCsB,kBAAkB,EAAErB,oBAAoB;MACxCsB,aAAa,EAAElB,eAAe,CAACmB,aAAa;MAC5CC,aAAa,EAAEpB,eAAe,CAACoB,aAAa;MAC5CC,iBAAiB,EAAE,KAAK;MACxBrD,iCAAiC,EAAE,CAACsC,QAAQ;MAC5C5+G,UAAU,EAAExqB,aAAa,CAACyqB,UAAU;MACpC0yB,QAAQ,EAAEn9C,aAAa,CAAC2qC;IAC5B,CAAC;IAED,IAAI89F,kBAAkB,IAAIsB,kBAAkB,EAAE;MAC1C9xG,iBAAiB,CAACG,WAAW,GAAG0wG,eAAe,CAACtsG,gBAAgB;MAChEvE,iBAAiB,CAACuE,gBAAgB,GAAGssG,eAAe,CAACtsG,gBAAgB;MACrEvE,iBAAiB,CAACmyG,aAAa,GAAGtB,eAAe,CAACsB,aAAa;MAC/D,IAAIvH,IAAI,GAAG;QACP1mH,SAAS,EAAE,IAAI;QACf6lG,WAAW,EAAEymB,kBAAkB,GAAG,mBAAmB,GAAG,qBAAqB;QAC7EllH,GAAG,EAAEklH,kBAAkB,GAAG,mBAAmB,GAAG,qBAAqB;QACrEz0G,QAAQ,EAAE,CAAC;QACX6J,KAAK,EAAE,CAAC;QACRwsG,YAAY,EAAE,CAAC;QACf7sG,GAAG,EAAE,CAAC;QACN1vB,SAAS,EAAE,IAAI;QACfw8H,YAAY,EAAE,KAAK;QACnBprG,OAAO,EAAE,IAAI;QACbM,WAAW,EAAE;MACjB,CAAC;MAEDvH,iBAAiB,CAACtB,KAAK,CAACxwB,IAAI,CAAC08H,IAAI,CAAC;IACtC;;IAEA;IACA;IACAj/H,CAAC,CAACmC,IAAI,CAAC+iI,eAAe,CAACrtG,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;MACrD,IAAIkpI,IAAI,GAAGlpI,EAAE,CAACm+B,KAAK,GAAG,CAAC,IAAI4qG,kBAAkB,IAAIC,oBAAoB,GAAG,CAAC,CAAC,GAAG,CAAC;MAC9E;MACA;MACA;MACA;MACA;;MAEA,IAAI,OAAQhpI,EAAE,CAACkpI,IAAK,KAAK,WAAW,EAChCA,IAAI,GAAGlpI,EAAE,CAACkpI,IAAI;MAElB,IAAIhrG,KAAK,GAAGl+B,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAACi9B,YAAY,IAAKisG,IAAI,GAAG,CAAC,IAAIc,YAAY,KAAK,IAAI,GAAI,CAAC,GAAGJ,IAAI,CAACt6G,SAAS,CAAChR,WAAW,CAACqd,YAAY,CAAC37B,EAAE,CAACm/B,KAAK,EAAEn/B,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAACi9B,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;MAE9K,IAAIisG,IAAI,GAAG,CAAC,EAAE;QACVlpI,EAAE,CAAC8iC,iBAAiB,GAAG9iC,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAACi9B,YAAY,GAAGisG,IAAI;QAE5D,IAAIA,IAAI,GAAG,CAAC,EACRlpI,EAAE,CAAC6qI,aAAa,GAAG,CAAC;QAExB7qI,EAAE,CAACq/B,qBAAqB,GAAGr/B,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAACi9B,YAAY,GAAGisG,IAAI;;QAEhE;QACA,IAAIE,eAAe,CAAC0B,aAAa,GAAG,CAAC,IAAI1B,eAAe,CAACttG,QAAQ,IAAI,IAAI,EAAE;UAEvE,IAAIivG,cAAc,GAAGzsH,WAAW,CAAC0sH,YAAY,CAACh7H,WAAW,CAAC,GAAGsO,WAAW,CAAC2sH,eAAe,CAACj7H,WAAW,CAAC;UAErG,IAAIk7H,aAAa,GAAGhC,IAAI,GAAG,CAAC,GAAG,CAACE,eAAe,CAACjwG,KAAK,GAAG4xG,cAAc,IAAK3B,eAAe,CAAC+B,SAAU,GAAGnrI,EAAE,CAAC6qI,aAAa;UAExH7qI,EAAE,CAACq/B,qBAAqB,GAAGuqG,IAAI,CAACt6G,SAAS,CAAC,CAACtvB,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAACi9B,YAAY,GAAGisG,IAAI,IAAIgC,aAAa,EAAE,CAAC,CAAC;UAErGlrI,EAAE,CAAC8iC,iBAAiB,GAAG8mG,IAAI,CAACt6G,SAAS,CAAC4O,KAAK,GAAGgtG,aAAa,EAAE,CAAC,CAAC;UAC/DlrI,EAAE,CAAC6qI,aAAa,GAAGK,aAAa,CAAC,CAAC;QAEtC;MACJ;MAEAlrI,EAAE,CAACm+B,KAAK,GAAGyrG,IAAI,CAACt6G,SAAS,CAAC4O,KAAK,EAAE,CAAC,CAAC;MACnCl+B,EAAE,CAACmlB,MAAM,GAAGykH,IAAI,CAACt6G,SAAS,CAAC4O,KAAK,GAAGl+B,EAAE,CAAColB,KAAK,EAAE,CAAC,CAAC;MAE/C,IAAI8Y,KAAK,IAAI,CAAC,IAAI,CAAC6qG,kBAAkB,IAAIC,oBAAoB,MAAM,IAAI,EAAE;QAErE;QACA;;QAEA,IAAII,eAAe,CAACttG,QAAQ,IAAI,IAAI,EAAE;UAClC,IAAIqnG,IAAI,GAAG;YACP1mH,SAAS,EAAEzc,EAAE,CAACk/B,QAAQ,KAAK,YAAY,GAAG,IAAI,GAAGl/B,EAAE,CAACyc,SAAS;YAC7D6X,QAAQ,EAAEt0B,EAAE,CAAColB,KAAK;YAClB+Y,KAAK,EAAEyrG,IAAI,CAACt6G,SAAS,CAAC4O,KAAK,EAAE,CAAC,CAAC;YAC/BysG,YAAY,EAAEf,IAAI,CAACt6G,SAAS,CAAC4O,KAAK,GAAGl+B,EAAE,CAAColB,KAAK,EAAE,CAAC,CAAC;YACjD0Y,GAAG,EAAE8rG,IAAI,CAACt6G,SAAS,CAACtvB,EAAE,CAAC89B,GAAG,EAAEgsG,YAAY,CAAC;YACzC17H,SAAS,EAAEpO,EAAE,CAACoO,SAAS;YACvBw8H,YAAY,EAAE,KAAK;YACnBprG,OAAO,EAAEx/B,EAAE,CAACw/B,OAAO;YACnBM,WAAW,EAAE9/B,EAAE,CAAC8/B,WAAW;YAC3BC,YAAY,EAAE//B,EAAE,CAAC+/B;UACrB,CAAC;UACD,IAAI//B,EAAE,CAACk/B,QAAQ,KAAK,YAAY,EAAE;YAC9BikG,IAAI,CAAC7gB,WAAW,GAAGtiH,EAAE,CAAC8C,IAAI;UAC9B;UAEA,IAAI,CAAC,CAAC9C,EAAE,CAACk4H,YAAY,EACjBiL,IAAI,CAACjL,YAAY,GAAGl4H,EAAE,CAACk4H,YAAY;UAEvC,IAAI,CAAC,CAACl4H,EAAE,CAACorI,sBAAsB,EAC3BjI,IAAI,CAACiI,sBAAsB,GAAG3qI,aAAa,CAAC2xD,6BAA6B,CAACpyD,EAAE,CAACorI,sBAAsB,CAAC;UAExG7yG,iBAAiB,CAACtB,KAAK,CAACxwB,IAAI,CAAC08H,IAAI,CAAC;QACtC;QACAnjI,EAAE,CAACqrI,mBAAmB,GAAGrrI,EAAE,CAACi9B,YAAY;MAC5C;IACJ,CAAC,CAAC;IAEF,IAAI,CAAC,CAACjtB,WAAW,CAAC2qE,UAAU,IAAI3qE,WAAW,CAAC2qE,UAAU,CAACn0E,MAAM,GAAG,CAAC,EAAE;MAE/DtC,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC2qE,UAAU,EAAE,UAAUr0E,GAAG,EAAEkY,SAAS,EAAE;QAErD,IAAI2kH,IAAI,GAAG;UACPhqG,KAAK,EAAE3a,SAAS,CAAC8sH,eAAe;UAChCxtG,GAAG,EAAEtf,SAAS,CAACsf,GAAG;UAClBh7B,IAAI,EAAE0b,SAAS,CAAC1b,IAAI;UACpBQ,IAAI,EAAEkb,SAAS,CAAClb,IAAI;UACpB0S,KAAK,EAAEwI,SAAS,CAACxI,KAAK;UACtBu1H,WAAW,EAAE/sH,SAAS,CAAC+sH,WAAW;UAClCn9H,SAAS,EAAEoQ,SAAS,CAACpQ,SAAS;UAC9B4Q,iBAAiB,EAAER,SAAS,CAACQ;QACjC,CAAC;QAED,IAAIR,SAAS,CAACgtH,SAAS,EACnBrI,IAAI,CAACqI,SAAS,GAAGhtH,SAAS,CAACgtH,SAAS;QAExC,IAAIhtH,SAAS,CAACitH,gBAAgB,EAC1BtI,IAAI,CAACsI,gBAAgB,GAAGjtH,SAAS,CAACitH,gBAAgB;QAEtDlzG,iBAAiB,CAACoiD,UAAU,CAACl0E,IAAI,CAAC08H,IAAI,CAAC;MAC3C,CAAC,CAAC;IACN;;IAEA;IACA,IAAIiG,eAAe,CAAC0B,aAAa,GAAG,CAAC,EAAE;MACnC,IAAIY,mBAAmB,GAAG;QACtBloI,EAAE,EAAEumB,KAAK,CAACuE,OAAO,CAAC,CAAC;QACnByS,kBAAkB,EAAE,IAAI;QACxB5b,MAAM,EAAEikH,eAAe,CAAC0B,aAAa;QACrCjvG,IAAI,EAAE3K,MAAM,CAACC,GAAG,CAAC,CAAC;QAClB8P,SAAS,EAAE;MACf,CAAC;MACD1I,iBAAiB,CAACW,QAAQ,CAACzyB,IAAI,CAACilI,mBAAmB,CAAC;IACxD;IAEAxnI,CAAC,CAACmC,IAAI,CAAC+iI,eAAe,CAAClwG,QAAQ,EAAE,UAAU5yB,GAAG,EAAEtG,EAAE,EAAE;MAChD,IAAIA,EAAE,CAACmlB,MAAM,IAAI,CAAC,IAAIikH,eAAe,CAACttG,QAAQ,IAAI,IAAI,EAAE;QACpD,IAAIwH,CAAC,GAAG;UACJ9/B,EAAE,EAAExD,EAAE,CAACwD,EAAE;UACTu9B,kBAAkB,EAAE/gC,EAAE,CAAC+gC,kBAAkB;UACzC5b,MAAM,EAAEnlB,EAAE,CAACmlB,MAAM;UACjB0W,IAAI,EAAE77B,EAAE,CAAC67B,IAAI;UACboF,SAAS,EAAEjhC,EAAE,CAACihC,SAAS;UACvBE,OAAO,EAAGioG,eAAe,CAACpoI,QAAQ,CAACwC,EAAE,IAAI,IAAI,GAAGxD,EAAE,CAACmhC,OAAO,GAAG,CAAE;UAC/DgD,mBAAmB,EAAEnkC,EAAE,CAACmkC,mBAAmB;UAAE;UAC7CwnG,mBAAmB,EAAE3rI,EAAE,CAAC2rI,mBAAmB;UAAE;UAC7CvqG,SAAS,EAAEphC,EAAE,CAACohC;QAClB,CAAC;QAED,IAAI,CAAC,CAACphC,EAAE,CAAC4rI,UAAU,EAAE;UACjBtoG,CAAC,CAACsoG,UAAU,GAAG5rI,EAAE,CAAC4rI,UAAU;QAChC;QAEA,IAAI,CAAC,CAAC5rI,EAAE,CAACqhC,SAAS,EAAE;UAChBiC,CAAC,CAACjC,SAAS,GAAGrhC,EAAE,CAACqhC,SAAS;QAC9B;QAEA9I,iBAAiB,CAACW,QAAQ,CAACzyB,IAAI,CAAC68B,CAAC,CAAC;MACtC;IACJ,CAAC,CAAC;;IAEF;IACA,IAAI8lG,eAAe,CAAChsG,YAAY,IAAIgsG,eAAe,CAAChsG,YAAY,KAAK,CAAC,IAClE7E,iBAAiB,CAACW,QAAQ,CAAC1yB,MAAM,GAAG,CAAC,IAAI4iI,eAAe,CAACttG,QAAQ,IAAI,IAAI,EAAE;MAC3E,IAAI+vG,mBAAmB,GAAG;QACtBroI,EAAE,EAAEumB,KAAK,CAACuE,OAAO,CAAC,CAAC;QACnByS,kBAAkB,EAAE,IAAI;QACxB5b,MAAM,EAAE1kB,aAAa,CAAC6uB,SAAS,CAAC85G,eAAe,CAAChsG,YAAY,EAAE,CAAC,CAAC;QAChEvB,IAAI,EAAE3K,MAAM,CAACC,GAAG,CAAC,CAAC;QAClB8P,SAAS,EAAE;MACf,CAAC;MACD1I,iBAAiB,CAACW,QAAQ,CAACzyB,IAAI,CAAColI,mBAAmB,CAAC;IACxD;;IAEA;IACA,IAAIzC,eAAe,CAACttG,QAAQ,KAAK,IAAI,IAAIitG,kBAAkB,IAAIC,oBAAoB,EAAE;MACjF;MACA;MACAzwG,iBAAiB,CAACuzG,gBAAgB,GAAG1C,eAAe,CAAC5lI,EAAE;MACvD+0B,iBAAiB,CAAC87E,eAAe,GAAG,QAAQ;MAC5C97E,iBAAiB,CAAC4kD,WAAW,GAAGpzD,KAAK,CAACuE,OAAO,CAAC,CAAC;MAE/C,IAAI+6G,UAAU,KAAK,IAAI,EAAE;QACrB;QACA9wG,iBAAiB,CAAC47D,OAAO,GAAG,CAAC,CAACi1C,eAAe,CAACzmG,cAAc,GAAGymG,eAAe,CAACzmG,cAAc,GAAG5Y,KAAK,CAACuE,OAAO,CAAC,CAAC;MACnH,CAAC,MAAM;QACHiK,iBAAiB,CAAC47D,OAAO,GAAGi1C,eAAe,CAAC1xG,UAAU,CAAC,CAAC;QACxD,IAAIqxG,kBAAkB,IAAIC,oBAAoB,EAC1CzwG,iBAAiB,CAACuzG,gBAAgB,GAAG1C,eAAe,CAAC1xG,UAAU;MACvE;MAEA,IAAIq0G,WAAW,GAAG,CAAC,CAAC3C,eAAe,CAAC9mG,OAAO,IAAI8mG,eAAe,CAAC9mG,OAAO,CAAC97B,MAAM,GAAG,CAAC,GAC7E4iI,eAAe,CAAC9mG,OAAO,CAAC,CAAC,CAAC,CAACM,QAAQ,GAAG,IAAI;MAE9C,IAAIR,QAAQ,GAAG,CAACinG,UAAU,KAAK,IAAI,IAAIN,kBAAkB,KAAK,IAAI,IAAIC,oBAAoB,KAAK,IAAI,IAAIS,cAAc,KAAK,IAAI,KAAK,CAAC,CAACsC,WAAW,GAAGA,WAAW,GAAI,CAAC,CAACxC,YAAY,GAAGA,YAAY,GAAGx/G,KAAK,CAACuE,OAAO,CAAC,CAAE;MAElNkU,MAAM,GAAG;QACLI,QAAQ,EAAER,QAAQ;QAClBvG,IAAI,EAAE3K,MAAM,CAACC,GAAG,CAAC,CAAC;QAClB0N,IAAI,EAAEuqG,eAAe,CAACvqG,IAAI;QAC1B5H,KAAK,EAAE,EAAE;QACTiC,QAAQ,EAAE,EAAE;QACZyhD,UAAU,EAAE;MAChB,CAAC;MAED,IAAIouD,kBAAkB,IAAIC,oBAAoB,EAAE;QAC5CxmG,MAAM,CAAC3D,IAAI,GAAG,yBAAyB;MAC3C;;MAEA;MACA,IAAIwqG,UAAU,KAAK,IAAI,IAAI,CAACD,eAAe,CAAC9mG,OAAO,IAAI8mG,eAAe,CAAC9mG,OAAO,CAAC97B,MAAM,IAAI,CAAC,EAAE;QACxF4iI,eAAe,CAAC9mG,OAAO,GAAG,CAAC;UACvBM,QAAQ,EAAEJ,MAAM,CAACI;QACrB,CAAC,CAAC,CAAC,CAAC;MACR;;MAEA;MACA;;MAEA1+B,CAAC,CAACmC,IAAI,CAAC+iI,eAAe,CAACrtG,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;QAErD,IAAImjI,IAAI,GAAG;UACP1mH,SAAS,EAAEzc,EAAE,CAACk/B,QAAQ,KAAK,YAAY,GAAG,IAAI,GAAGl/B,EAAE,CAACyc,SAAS;UAC7D6X,QAAQ,EAAEt0B,EAAE,UAAO,IAAI+oI,kBAAkB,IAAIC,oBAAoB,GAAG/uG,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAAColB,KAAK,CAAC,GAAGplB,EAAE,CAAColB,KAAK,GAAG,CAAC,CAAC;UACtG+Y,KAAK,EAAElE,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAAC8iC,iBAAiB,CAAC;UACrC6nG,YAAY,EAAEf,IAAI,CAACt6G,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAAC8iC,iBAAiB,GAAG9iC,EAAE,CAAColB,KAAK,CAAC,EAAE,CAAC,CAAC;UAC1E;UACA;UACA0Y,GAAG,EAAE7D,IAAI,CAACD,GAAG,CAAC4vG,IAAI,CAACt6G,SAAS,CAACtvB,EAAE,CAAC89B,GAAG,EAAEgsG,YAAY,CAAC,CAAC;UACnD17H,SAAS,EAAEpO,EAAE,CAACoO,SAAS;UACvBw8H,YAAY,EAAE,KAAK;UACnBprG,OAAO,EAAEx/B,EAAE,CAACw/B,OAAO;UACnBM,WAAW,EAAE9/B,EAAE,CAAC8/B,WAAW;UAC3BC,YAAY,EAAE//B,EAAE,CAAC+/B,YAAY;UAC7BisG,eAAe,EAAE/xG,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAACm+B,KAAK,CAAC;UACnC4E,gBAAgB,EAAE/iC,EAAE,CAAC+iC;QACzB,CAAC;QAGD,IAAI,CAAC,CAAC/iC,EAAE,CAACk4H,YAAY,EACjBiL,IAAI,CAACjL,YAAY,GAAGl4H,EAAE,CAACk4H,YAAY;QAEvC,IAAI,CAAC,CAACl4H,EAAE,CAACorI,sBAAsB,EAC3BjI,IAAI,CAACiI,sBAAsB,GAAG3qI,aAAa,CAAC2xD,6BAA6B,CAACpyD,EAAE,CAACorI,sBAAsB,CAAC;QAExG,IAAIprI,EAAE,CAACk/B,QAAQ,KAAK,YAAY,EAAE;UAC9BikG,IAAI,CAAC7gB,WAAW,GAAGtiH,EAAE,CAAC8C,IAAI;QAC9B;QAEA0/B,MAAM,CAACvL,KAAK,CAACxwB,IAAI,CAAC08H,IAAI,CAAC;MAC3B,CAAC,CAAC;MAGF,IAAI,CAAC,CAACiG,eAAe,CAACzuD,UAAU,IAAIyuD,eAAe,CAACzuD,UAAU,CAACn0E,MAAM,GAAG,CAAC,EAAE;QAEvEtC,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC2qE,UAAU,EAAE,UAAUr0E,GAAG,EAAEkY,SAAS,EAAE;UACrD,IAAI2kH,IAAI,GAAG;YACPhqG,KAAK,EAAE,CAAC,CAAC,GAAG3a,SAAS,CAAC8sH,eAAe;YACrCxtG,GAAG,EAAE,CAAC,CAAC,GAAGtf,SAAS,CAACsf,GAAG;YACvBh7B,IAAI,EAAE0b,SAAS,CAAC1b,IAAI;YACpBQ,IAAI,EAAEkb,SAAS,CAAClb,IAAI;YACpB0S,KAAK,EAAEwI,SAAS,CAACxI,KAAK;YACtBu1H,WAAW,EAAE/sH,SAAS,CAAC+sH,WAAW;YAClCn9H,SAAS,EAAEoQ,SAAS,CAACpQ,SAAS;YAC9B4Q,iBAAiB,EAAER,SAAS,CAACQ,iBAAiB;YAC9CmlB,mBAAmB,EAAE3lB,SAAS,CAAC2lB,mBAAmB;YAClDwnG,mBAAmB,EAAEntH,SAAS,CAACmtH,mBAAmB;YAClDM,uBAAuB,EAAEztH,SAAS,CAACytH;UACvC,CAAC;UAED,IAAIztH,SAAS,CAACgtH,SAAS,EACnBrI,IAAI,CAACqI,SAAS,GAAGhtH,SAAS,CAACgtH,SAAS;UAExC,IAAIhtH,SAAS,CAACitH,gBAAgB,EAC1BtI,IAAI,CAACsI,gBAAgB,GAAGjtH,SAAS,CAACitH,gBAAgB;UAEtDjpG,MAAM,CAACm4C,UAAU,CAACl0E,IAAI,CAAC08H,IAAI,CAAC;QAChC,CAAC,CAAC;QAEF5qG,iBAAiB,CAACoiD,UAAU,GAAG,EAAE,CAAC,CAAC;MACvC;;MAEA;MACA,IAAIuxD,GAAG,GAAG,EAAE,CAACr6H,MAAM,CAACu3H,eAAe,CAAClwG,QAAQ,EAAEX,iBAAiB,CAACW,QAAQ,CAAC;MAEzEh1B,CAAC,CAACmC,IAAI,CAAC6lI,GAAG,EAAE,UAAU5lI,GAAG,EAAEtG,EAAE,EAAE;QAC3B;QACA,IAAI8gC,OAAO,GAAG;UACVt9B,EAAE,EAAExD,EAAE,CAACwD,EAAE;UACTu9B,kBAAkB,EAAE/gC,EAAE,CAAC+gC,kBAAkB;UACzC5b,MAAM,EAAEnlB,EAAE,CAACmlB,MAAM,GAAG,CAAC,IAAInlB,EAAE,CAACihC,SAAS,KAAK,UAAU,GAAGhH,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAACmlB,MAAM,CAAC,GAAG8U,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAACmlB,MAAM,CAAC,GAAG,CAAC,CAAC;UACrG0W,IAAI,EAAE77B,EAAE,CAAC67B,IAAI;UACboF,SAAS,EAAEjhC,EAAE,CAACihC,SAAS;UACvBE,OAAO,EAAElH,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAACmhC,OAAO,CAAC;UAC7BgD,mBAAmB,EAAEnkC,EAAE,CAACmkC,mBAAmB;UAAE;UAC7CwnG,mBAAmB,EAAE3rI,EAAE,CAAC2rI,mBAAmB;UAAE;UAC7CM,uBAAuB,EAAEjsI,EAAE,CAACisI,uBAAuB;UACnD7qG,SAAS,EAAEphC,EAAE,CAACohC;QAClB,CAAC;QAED,IAAI,CAAC,CAACphC,EAAE,CAACqhC,SAAS,EAAE;UAChBP,OAAO,CAACO,SAAS,GAAGnhC,OAAO,CAAC+F,IAAI,CAACjG,EAAE,CAACqhC,SAAS,CAAC;UAC9CP,OAAO,CAACO,SAAS,CAACiqG,eAAe,IAAI,CAAC,CAAC;UACvCxqG,OAAO,CAACO,SAAS,CAAC8qG,sBAAsB,IAAI,CAAC,CAAC;UAC9CrrG,OAAO,CAACO,SAAS,CAACvD,GAAG,IAAI,CAAC,CAAC;QAC/B;QAEA0E,MAAM,CAACtJ,QAAQ,CAACzyB,IAAI,CAACq6B,OAAO,CAAC;MACjC,CAAC,CAAC;MAEFvI,iBAAiB,CAACW,QAAQ,GAAGX,iBAAiB,CAACW,QAAQ,CAAC/yB,MAAM,CAAC,UAAUnG,EAAE,EAAE;QACzE,OAAOA,EAAE,CAACihC,SAAS,KAAK,UAAU;MACtC,CAAC,CAAC;;MAEF;MACA,IAAImrG,WAAW,GAAG,CAAC;MACnBloI,CAAC,CAACmC,IAAI,CAAC+iI,eAAe,CAAClwG,QAAQ,EAAE,UAAU5yB,GAAG,EAAEtG,EAAE,EAAE;QAChDosI,WAAW,IAAIvyH,MAAM,CAAC7Z,EAAE,CAACmlB,MAAM,CAAC;MACpC,CAAC,CAAC;MAEF,IAAIikH,eAAe,CAAChsG,YAAY,IAAIgsG,eAAe,CAAChsG,YAAY,KAAK,CAAC,IAAIoF,MAAM,CAACtJ,QAAQ,CAAC1yB,MAAM,GAAG,CAAC,EAAE;QAClG,IAAIqlI,mBAAmB,GAAG;UACtBroI,EAAE,EAAEumB,KAAK,CAACuE,OAAO,CAAC,CAAC;UACnByS,kBAAkB,EAAE,IAAI;UACxB5b,MAAM,EAAEinH,WAAW,GAAG,CAAC,GAAI3rI,aAAa,CAAC6uB,SAAS,CAAC85G,eAAe,CAAChsG,YAAY,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAI38B,aAAa,CAAC6uB,SAAS,CAAC85G,eAAe,CAAChsG,YAAY,EAAE,CAAC,CAAC;UACpJvB,IAAI,EAAE3K,MAAM,CAACC,GAAG,CAAC,CAAC;UAClB8P,SAAS,EAAE;QACf,CAAC;;QAED;QACA;QACA;;QAEAuB,MAAM,CAACtJ,QAAQ,CAACzyB,IAAI,CAAColI,mBAAmB,CAAC;MAC7C;MAEAtzG,iBAAiB,CAAC+J,OAAO,GAAG,CAACE,MAAM,CAAC;IACxC;;IAEA;IACA;IACA;IACA;;IAEA;IACA;IACA;IACA;IACA;;IAEA;IACA;IACA;IACA;IACA;IACA;;IAEA,OAAOjK,iBAAiB;EAC5B,CAAC;;EAED;AACR;AACA;AACA;AACA;AACA;EACQja,WAAW,CAACqd,YAAY,GAAG,UAAUiC,SAAS,EAAEtR,KAAK,EAAEw8G,cAAc,EAAE;IACnE,IAAIr7C,GAAG,GAAG,CAAC;IACX,IAAIq8C,YAAY,GAAGxpI,aAAa,CAACukC,oBAAoB,IAAI,WAAW,GAAG,CAAC,GAAG,CAAC;IAC5E,IAAIwnG,gBAAgB,GAAGvD,cAAc,KAAK,IAAI,GAAG,IAAI,GACjDA,cAAc,KAAK,KAAK,GAAG,KAAK,GAChCxoI,aAAa,CAACwkC,YAAY,KAAK,MAAM,GAAG,IAAI,GAC5C,KAAK;IAET,IAAIunG,gBAAgB,IAAItnH,UAAU,CAAC6Y,SAAS,CAACG,yBAAyB,CAAC,GAAG,CAAC,EAAE;MACzE,IAAIuuG,OAAO,GAAG,CAAC;MACfA,OAAO,GAAGvnH,UAAU,CAAC6Y,SAAS,CAACG,yBAAyB,CAAC;MACzD0vD,GAAG,GAAGnhE,KAAK,GAAGggH,OAAO,GAAG,GAAG;IAC/B,CAAC,MAAM,IAAIvnH,UAAU,CAAC6Y,SAAS,CAACC,yBAAyB,CAAC,GAAG,CAAC,EAAE;MAC5D,IAAIyuG,OAAO,GAAG,CAAC;MACfA,OAAO,GAAGvnH,UAAU,CAAC6Y,SAAS,CAACC,yBAAyB,CAAC;MACzD4vD,GAAG,GAAGnhE,KAAK,GAAGggH,OAAO,GAAG,GAAG;IAC/B;IACA7+C,GAAG,GAAGhtF,aAAa,CAAC6uB,SAAS,CAACm+D,GAAG,EAAEq8C,YAAY,CAAC;IAChD,OAAOr8C,GAAG;EACd,CAAC;EAEDnvE,WAAW,CAACiuH,aAAa,GAAG,UAAU3uG,SAAS,EAAEkrG,cAAc,EAAE;IAC7D,IAAMuD,gBAAgB,GAAGvD,cAAc,KAAK,IAAI,GAAG,IAAI,GACnDA,cAAc,KAAK,KAAK,GAAG,KAAK,GAChCxoI,aAAa,CAACwkC,YAAY,KAAK,MAAM,GAAG,IAAI,GAC5C,KAAK;IACT,IAAIunG,gBAAgB,IAAItnH,UAAU,CAAC6Y,SAAS,CAACG,yBAAyB,CAAC,GAAG,CAAC,EAAE;MACzE,OAAQhZ,UAAU,CAAC6Y,SAAS,CAACG,yBAAyB,CAAC;IAC3D,CAAC,MAAM,IAAIhZ,UAAU,CAAC6Y,SAAS,CAACC,yBAAyB,CAAC,GAAG,CAAC,EAAE;MAC5D,OAAO9Y,UAAU,CAAC6Y,SAAS,CAACC,yBAAyB,CAAC;IAC1D,CAAC,MAAM;MACH,OAAO,CAAC;IACZ;EACJ,CAAC;;EAGD;AACR;AACA;AACA;AACA;EACQvf,WAAW,CAACkuH,WAAW,GAAG,UAAUhxH,GAAG,EAAE2mB,IAAI,EAAE;IAC3C,IAAIkB,GAAG,GAAG,CAAC;IACX,IAAIkhC,gBAAgB,GAAG,CAAC,CAACpiC,IAAI,IAAIA,IAAI,CAACoiC,gBAAgB,KAAK,IAAI;IAE/D,IAAI/oD,GAAG,EACHtX,CAAC,CAACmC,IAAI,CAACmV,GAAG,EAAE,UAAUlV,GAAG,EAAEtG,EAAE,EAAE;MAC3B,IAAIsoF,UAAU,GAAGtoF,EAAE,CAACm+B,KAAK,GAAG,CAAC;MAC7B,IAAIomC,gBAAgB,EAAE;QAClB;QACAvkE,EAAE,CAACkpI,IAAI,GAAG,CAAC,CAAC;QACZlpI,EAAE,CAACi9B,YAAY,GAAG,CAAC;QACnBj9B,EAAE,CAACq/B,qBAAqB,GAAGr/B,EAAE,CAACo/B,SAAS;MAC3C;MAEA,IAAIkpD,UAAU,KAAK,KAAK,EAAE;QACtB,IAAItoF,EAAE,CAACi9B,YAAY,IAAI,IAAI,IAAIj9B,EAAE,CAACi9B,YAAY,IAAIlsB,SAAS,EACvD/Q,EAAE,CAACi9B,YAAY,GAAG,CAAC;QAEvB,IAAIj9B,EAAE,CAAColB,KAAK,GAAG,CAAC,EAAE;UACdie,GAAG,IAAI5iC,aAAa,CAAC6uB,SAAS,CAACtvB,EAAE,CAACmlB,MAAM,EAAE,CAAC,CAAC;QAChD;MACJ,CAAC,MAAM;QACH;QACA;QACA;QACA;QACAke,GAAG,IAAI5iC,aAAa,CAAC6uB,SAAS,CAAC,CAACtvB,EAAE,CAAColB,KAAK,IAAIplB,EAAE,CAACq/B,qBAAqB,IAAIr/B,EAAE,CAACkpI,IAAI,IAAIlpI,EAAE,CAACq/B,qBAAqB,GAAG,CAAC,GAAGr/B,EAAE,CAACkpI,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;MACvI;IACJ,CAAC,CAAC;IAEN,OAAO7lG,GAAG;EACd,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;;EAEA;AACR;AACA;AACA;AACA;EACQ/kB,WAAW,CAACmuH,kBAAkB,GAAG,UAAUjxH,GAAG,EAAE;IAC5C,IAAI6nB,GAAG,GAAG,CAAC;IACX,IAAI7nB,GAAG,EACHtX,CAAC,CAACmC,IAAI,CAACmV,GAAG,EAAE,UAAUlV,GAAG,EAAEtG,EAAE,EAAE;MAC3B,IAAIA,EAAE,CAAColB,KAAK,GAAG,CAAC,EAAE;QACdie,GAAG,IAAIrjC,EAAE,CAAColB,KAAK,GAAIplB,EAAE,CAACi9B,YAAa;MACvC;IACJ,CAAC,CAAC;IACN,OAAOoG,GAAG;EACd,CAAC;;EAED;AACR;AACA;AACA;AACA;AACA;EACQ/kB,WAAW,CAACouH,iBAAiB,GAAG,UAAUxiI,IAAI,EAAEsR,GAAG,EAAEstH,cAAc,EAAE;IACjE,IAAIgB,YAAY,GAAGxpI,aAAa,CAACukC,oBAAoB,IAAI,WAAW,GAAG,CAAC,GAAG,CAAC;IAC5E,IAAI4oD,GAAG,GAAG,CAAC;IACX,IAAIvjF,IAAI,EACJhG,CAAC,CAACmC,IAAI,CAACmV,GAAG,EAAE,UAAUlV,GAAG,EAAEtG,EAAE,EAAE;MAC3B,IAAIA,EAAE,CAAColB,KAAK,GAAG,CAAC,EAAE;QACd,IAAIkjE,UAAU,GAAGtoF,EAAE,CAACm+B,KAAK,GAAG,CAAC;QAC7B,IAAIP,SAAS,GAAG59B,EAAE,CAACm/B,KAAK;QACxB,IAAIj1B,IAAI,CAACq6D,gBAAgB,KAAK,IAAI,EAAE;UAChC+jB,UAAU,GAAG,KAAK;UAClBtoF,EAAE,CAACi9B,YAAY,GAAG,CAAC;UACnBj9B,EAAE,CAACq/B,qBAAqB,GAAGr/B,EAAE,CAACo/B,SAAS;QAC3C;QAEA,IAAIkpD,UAAU,KAAK,KAAK,EACpBmF,GAAG,IAAIhtF,aAAa,CAAC6uB,SAAS,CAAChR,WAAW,CAACqd,YAAY,CAACiC,SAAS,EAAE59B,EAAE,CAAColB,KAAK,IAAIplB,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAACi9B,YAAY,CAAC,EAAE6rG,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzI;QAAA,KAEIr7C,GAAG,IAAIhtF,aAAa,CAAC6uB,SAAS,CAAChR,WAAW,CAACqd,YAAY,CAACiC,SAAS,EAAE,CAAC59B,EAAE,CAAColB,KAAK,GAAGplB,EAAE,CAACq/B,qBAAqB,EAAEypG,cAAc,CAAC,EAAE,CAAC,CAAC;QAChI;MACJ;IACJ,CAAC,CAAC;IACN5+H,IAAI,CAACoyB,aAAa,GAAG77B,aAAa,CAAC6uB,SAAS,CAACm+D,GAAG,EAAEq8C,YAAY,CAAC;EACnE,CAAC;EAGDxrH,WAAW,CAACquH,iBAAiB,GAAG,KAAK;EACrC;AACR;AACA;AACA;AACA;AACA;EACQruH,WAAW,CAACkjB,QAAQ,GAAG,UAAUt3B,IAAI,EAAE4+H,cAAc,EAAE8D,2BAA2B,EAAE;IAChF,IAAInsI,aAAa,CAAC6gC,iBAAiB,CAACp3B,IAAI,CAAC,EAAE,OAAO,CAAC;IAEnDoU,WAAW,CAACquH,iBAAiB,GAAG,KAAK;;IAErC;IACA,IAAIE,eAAe,GAAG/D,cAAc,KAAK,IAAI,GAAG,IAAI,GAChDA,cAAc,KAAK,KAAK,GAAG,KAAK,GAChCxoI,aAAa,CAACwkC,YAAY,KAAK,MAAM,GAAG,IAAI,GAC5C,KAAK;IAGT,IAAI56B,IAAI,EAAE;MACN,IAAI4/H,YAAY,GAAGxpI,aAAa,CAACukC,oBAAoB,IAAI,WAAW,GAAG,CAAC,GAAG,CAAC;MAC5E,IAAIhE,QAAQ,GAAG32B,IAAI,CAAC+xB,QAAQ;MAC5B3d,WAAW,CAACouH,iBAAiB,CAACxiI,IAAI,EAAEA,IAAI,CAAC6xB,aAAa,EAAE8wG,eAAe,CAAC;;MAExE;MACA,IAAIvgH,KAAK,GAAGhO,WAAW,CAACkuH,WAAW,CAACtiI,IAAI,CAAC6xB,aAAa,EAAE7xB,IAAI,CAAC;MAE7D,IAAI4iI,MAAM,GAAGD,eAAe,GAAIvgH,KAAK,GAAGpiB,IAAI,CAACoyB,aAAa,GAAIhQ,KAAK;MACnE;MACA;MACA;;MAEA;MACApiB,IAAI,CAACihI,SAAS,GAAG7+G,KAAK,IAAIugH,eAAe,GAAG,CAAC,GAAG3iI,IAAI,CAACoyB,aAAa,CAAC;MAEnE,IAAIpyB,IAAI,CAAC8xB,iBAAiB,EAAE;QACxB6E,QAAQ,GAAGpgC,aAAa,CAAC6uB,SAAS,CAAChD,KAAK,GAAG,GAAG,GAAGpiB,IAAI,CAAC+xB,QAAQ,EAAE,CAAC,CAAC;MACtE,CAAC,MAAM;QACH4E,QAAQ,GAAGpgC,aAAa,CAAC6uB,SAAS,CAACplB,IAAI,CAAC+xB,QAAQ,EAAE,CAAC,CAAC;MACxD;MAEA,IAAI3P,KAAK,IAAI,CAAC,EACVuU,QAAQ,GAAG,CAAC;MAEhB32B,IAAI,CAAC4gI,aAAa,GAAGjqG,QAAQ;MAC7B32B,IAAI,CAACgyB,WAAW,GAAGz7B,aAAa,CAAC6uB,SAAS,CAACplB,IAAI,CAACoyB,aAAa,GAAGhQ,KAAK,GAAGuU,QAAQ,GAAG,CAAC,CAAC,EAAEipG,YAAY,CAAC;MACpG,IAAI,CAAC5/H,IAAI,CAACgyB,WAAW,EACjBhyB,IAAI,CAACgyB,WAAW,GAAG,CAAC;MACxB;;MAEA,IAAI2wG,eAAe,EAAE;QACjB3iI,IAAI,CAAC6iI,cAAc,GAAGzgH,KAAK;QAC3B;;QAEA;QACA;;QAEA;QACA,IAAI0gH,IAAI,GAAGJ,2BAA2B,KAAK,IAAI,IAAK,CAAC,CAAC1iI,IAAI,CAACywE,UAAU,IAAIzwE,IAAI,CAACywE,UAAU,CAACn0E,MAAM,GAAG,CAAE,GAChG8X,WAAW,CAAC2sH,eAAe,CAAC/gI,IAAI,CAAC,GAChC,CAAC,CAACA,IAAI,CAAC+iI,iBAAiB,IAAI3gH,KAAK,GAAG,CAAC,GAAI,CAACpiB,IAAI,CAACgjI,oBAAoB,GAAG,CAAC;QAE5EhjI,IAAI,CAACoyB,aAAa,GAAG77B,aAAa,CAAC6uB,SAAS,CAACplB,IAAI,CAACoyB,aAAa,GAAGpyB,IAAI,CAACgyB,WAAW,GAAG8wG,IAAI,EAAElD,YAAY,CAAC;QAExG,IAAI,CAAC5/H,IAAI,CAAC6iI,cAAc,EACpB7iI,IAAI,CAAC6iI,cAAc,GAAG,CAAC,CAAC,KAExB7iI,IAAI,CAAC6iI,cAAc,GAAG,CAACzgH,KAAK,GAAGuU,QAAQ,IAAI32B,IAAI,CAAC6iI,cAAc;QAElE,IAAI,CAAC7iI,IAAI,CAACoyB,aAAa,EAAE;UACrBpyB,IAAI,CAAC6iI,cAAc,GAAG,CAAC;UACvB7iI,IAAI,CAACoyB,aAAa,GAAG,CAAC;QAC1B;;QAEA;QACA,IAAI,CAAC,CAACuE,QAAQ,IAAKpgC,aAAa,CAAC6uB,SAAS,CAAChD,KAAK,EAAE,CAAC,CAAC,GAAGuU,QAAQ,GAAI,CAAC,EAChEviB,WAAW,CAACquH,iBAAiB,GAAG,IAAI;QAExC,IAAIQ,IAAI,GAAGP,2BAA2B,KAAK,IAAI,IAAK,CAAC,CAAC1iI,IAAI,CAACywE,UAAU,IAAIzwE,IAAI,CAACywE,UAAU,CAACn0E,MAAM,GAAG,CAAE,GAChG8X,WAAW,CAAC0sH,YAAY,CAAC9gI,IAAI,CAAC,GAC7B,CAAC,CAACA,IAAI,CAAC+iI,iBAAiB,IAAI3gH,KAAK,GAAG,CAAC,GAAI,CAACpiB,IAAI,CAAC+iI,iBAAiB,GAAG,CAAC;QAEzE,OAAOxsI,aAAa,CAAC6uB,SAAS,CAAChD,KAAK,EAAE,CAAC,CAAC,GAAGuU,QAAQ,GAAGpgC,aAAa,CAAC6uB,SAAS,CAAC69G,IAAI,EAAE,CAAC,CAAC;MAC1F,CAAC,MAAM;QACH;QACA;QACA;QACAjjI,IAAI,CAAC6iI,cAAc,GAAGzgH,KAAK,GAAGpiB,IAAI,CAACoyB,aAAa;;QAEhD;QACA;QACA;QACA,IAAI0wG,IAAI,GAAGJ,2BAA2B,KAAK,IAAI,IAAK,CAAC,CAAC1iI,IAAI,CAACywE,UAAU,IAAIzwE,IAAI,CAACywE,UAAU,CAACn0E,MAAM,GAAG,CAAE,GAChG8X,WAAW,CAAC2sH,eAAe,CAAC/gI,IAAI,CAAC,GAChC,CAAC,CAACA,IAAI,CAAC+iI,iBAAiB,IAAI3gH,KAAK,GAAG,CAAC,GAAI,CAACpiB,IAAI,CAACgjI,oBAAoB,GAAG,CAAC;QAE5EhjI,IAAI,CAACoyB,aAAa,GAAG77B,aAAa,CAAC6uB,SAAS,CAACplB,IAAI,CAACoyB,aAAa,GAAGpyB,IAAI,CAACgyB,WAAW,GAAG8wG,IAAI,EAAElD,YAAY,CAAC;QAExG,IAAI,CAAC5/H,IAAI,CAAC6iI,cAAc,EACpB7iI,IAAI,CAAC6iI,cAAc,GAAG,CAAC,CAAC,KAExB7iI,IAAI,CAAC6iI,cAAc,GAAG,CAACzgH,KAAK,GAAGuU,QAAQ,GAAG32B,IAAI,CAACoyB,aAAa,IAAIpyB,IAAI,CAAC6iI,cAAc;QAEvF,IAAI,CAAC7iI,IAAI,CAAC6iI,cAAc,EAAE;UACtB7iI,IAAI,CAAC6iI,cAAc,GAAG,CAAC;QAC3B;;QAEA;QACA,IAAI,CAAC,CAAClsG,QAAQ,IAAKpgC,aAAa,CAAC6uB,SAAS,CAAChD,KAAK,EAAE,CAAC,CAAC,GAAGuU,QAAQ,GAAGpgC,aAAa,CAAC6uB,SAAS,CAACplB,IAAI,CAACoyB,aAAa,EAAE,CAAC,CAAC,GAAI,CAAC,EACjHhe,WAAW,CAACquH,iBAAiB,GAAG,IAAI;QAExC,IAAIQ,IAAI,GAAGP,2BAA2B,KAAK,IAAI,IAAK,CAAC,CAAC1iI,IAAI,CAACywE,UAAU,IAAIzwE,IAAI,CAACywE,UAAU,CAACn0E,MAAM,GAAG,CAAE,GAChG8X,WAAW,CAAC0sH,YAAY,CAAC9gI,IAAI,CAAC,GAC7B,CAAC,CAACA,IAAI,CAAC+iI,iBAAiB,IAAI3gH,KAAK,GAAG,CAAC,GAAI,CAACpiB,IAAI,CAAC+iI,iBAAiB,GAAG,CAAC;;QAEzE;QACA;;QAEA,OAAOxsI,aAAa,CAAC6uB,SAAS,CAAChD,KAAK,EAAE,CAAC,CAAC,GAAGuU,QAAQ,GAC/CpgC,aAAa,CAAC6uB,SAAS,CAACplB,IAAI,CAACoyB,aAAa,EAAE,CAAC,CAAC,GAC9C77B,aAAa,CAAC6uB,SAAS,CAAC69G,IAAI,EAAE,CAAC,CAAC;MACxC;IACJ;IACA,OAAO,CAAC;EACZ,CAAC;;EAED;AACR;AACA;AACA;AACA;EACQ7uH,WAAW,CAAC8uH,eAAe,GAAG,UAAU5xH,GAAG,EAAE;IACzC,IAAI7F,KAAK,GAAG,CAAC;IACbzR,CAAC,CAACmC,IAAI,CAACmV,GAAG,EAAE,UAAUlV,GAAG,EAAEtG,EAAE,EAAE;MAC3B,IAAIA,EAAE,CAAColB,KAAK,GAAG,CAAC,EAAE;QACdzP,KAAK,IAAI3V,EAAE,CAAC++B,YAAY,GAAG/+B,EAAE,CAAColB,KAAK;MACvC;IACJ,CAAC,CAAC;IACF,OAAOzP,KAAK;EAChB,CAAC;;EAED;AACR;AACA;EACQ2I,WAAW,CAAC+uH,qBAAqB,GAAG,UAAUlrG,IAAI,EAAE;IAChD,IAAI,CAAC1hC,aAAa,CAAC6gC,iBAAiB,CAACa,IAAI,CAAC,EAAE;MACxC,OAAO1hC,aAAa,CAAC6uB,SAAS,CAAChR,WAAW,CAACkjB,QAAQ,CAACW,IAAI,EAAEA,IAAI,CAAC1J,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1F;IAEA,IAAI60G,UAAU,GAAG7sI,aAAa,CAAC6uB,SAAS,CAAE6S,IAAI,CAAChJ,KAAK,IAAI,CAAC,EAAG,CAAC,CAAC;IAC9D,IAAI3a,SAAS,GAAG,CAAC;MAAE+uH,YAAY,GAAG,CAAC;IACnC,IAAI14B,QAAQ,GAAI1yE,IAAI,IAAIA,IAAI,CAACjJ,QAAQ,IAAK,EAAE;IAC5C,KAAK,IAAItkB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGigG,QAAQ,CAACruG,MAAM,EAAEoO,CAAC,EAAE,EAAE;MACtC,IAAI44H,UAAU,GAAG34B,QAAQ,CAACjgG,CAAC,CAAC,KAAKigG,QAAQ,CAACjgG,CAAC,CAAC,CAAC64H,gBAAgB,IAAI54B,QAAQ,CAACjgG,CAAC,CAAC,CAACysB,SAAS,CAAC;MACvF,IAAImsG,UAAU,EAAE;QACZhvH,SAAS,IAAQgvH,UAAU,CAAClC,eAAe,IAAI,CAAE;QACjDiC,YAAY,IAAKC,UAAU,CAAC1vG,GAAG,IAAI,CAAE;MACzC;IACJ;IAEA,IAAI4vG,SAAS,GAAGjtI,aAAa,CAAC6uB,SAAS,CAACg+G,UAAU,GAAG9uH,SAAS,IAAI2jB,IAAI,CAAC1J,YAAY,GAAG,CAAC,GAAG80G,YAAY,CAAC,EAAE,CAAC,CAAC;IAC3G,OAAOtzG,IAAI,CAACD,GAAG,CAAC0zG,SAAS,CAAC,GAAG,KAAK,GAAG,CAAC,GAAGA,SAAS;EACtD,CAAC;;EAED;AACR;AACA;EACQ,SAASC,sBAAsBA,CAAC94B,QAAQ,EAAE;IACtCA,QAAQ,GAAGA,QAAQ,IAAI,EAAE;IACzB,IAAIxxE,GAAG,GAAG,CAAC;IACX,KAAK,IAAIzuB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGigG,QAAQ,CAACruG,MAAM,EAAEoO,CAAC,EAAE,EAAE;MACtCyuB,GAAG,IAAI/kB,WAAW,CAACsvH,yBAAyB,CAAC/4B,QAAQ,CAACjgG,CAAC,CAAC,CAAC;IAC7D;IACA,OAAOyuB,GAAG;EACd;;EAEA;AACR;AACA;AACA;EACQ/kB,WAAW,CAACuvH,gBAAgB,GAAG,UAAU1rG,IAAI,EAAE;IAC3C,IAAIimF,KAAK,GAAG9pG,WAAW,CAAC+uH,qBAAqB,CAAClrG,IAAI,CAAC;IACnD,IAAI2rG,MAAM,GAAGrtI,aAAa,CAAC6uB,SAAS,CAACq+G,sBAAsB,CAACxrG,IAAI,CAACjJ,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACpF,IAAI60G,SAAS,GAAGttI,aAAa,CAAC6uB,SAAS,CAAC84F,KAAK,GAAG0lB,MAAM,EAAE,CAAC,CAAC;IAC1D,OAAO7zG,IAAI,CAACD,GAAG,CAAC+zG,SAAS,CAAC,GAAG,KAAK,GAAG,CAAC,GAAGA,SAAS;EACtD,CAAC;;EAED;AACR;AACA;AACA;AACA;EACQzvH,WAAW,CAAC0vH,kBAAkB,GAAG,UAAUxyH,GAAG,EAAE;IAC5C,IAAI7F,KAAK,GAAG,CAAC;IACbzR,CAAC,CAACmC,IAAI,CAACmV,GAAG,EAAE,UAAUlV,GAAG,EAAEtG,EAAE,EAAE;MAC3B,IAAIA,EAAE,CAAColB,KAAK,GAAG,CAAC,EAAE;QACdzP,KAAK,IAAI3V,EAAE,CAAC6D,aAAa;MAC7B;IACJ,CAAC,CAAC;IACF,OAAO8R,KAAK;EAChB,CAAC;EAED2I,WAAW,CAAC2vH,0BAA0B,GAAG,UAAU9rG,IAAI,EAAE;IACrD,IAAIxsB,KAAK,GAAG,CAAC;IACbzR,CAAC,CAACmC,IAAI,CAAC87B,IAAI,CAACjJ,QAAQ,EAAE,UAAU5yB,GAAG,EAAEtG,EAAE,EAAE;MACrC,IAAI,CAAC,CAACA,EAAE,CAACmhC,OAAO,IAAI,CAAC,CAACnhC,EAAE,CAACmlB,MAAM,EAC3BxP,KAAK,IAAI3V,EAAE,CAACmhC,OAAO;IAC3B,CAAC,CAAC;IACF,OAAOxrB,KAAK;EAChB,CAAC;;EAED;AACR;AACA;AACA;AACA;AACA;AACA;EACQ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;;EAEA;AACR;AACA;AACA;AACA;AACA;EACQ2I,WAAW,CAAC4vH,kBAAkB,GAAG,UAAU/rG,IAAI,EAAEhd,MAAM,EAAE;IACrD,IAAI7kB,aAAa,CAACkB,aAAa,KAAK,IAAI,EAAE,OAAO,CAAC;IAElD,IAAI2sI,aAAa,GAAGhsG,IAAI,CAACpG,aAAa;;IAEtC;IACA;IACA;IACA;IACA;IACA;IACA,IAAIzP,KAAK,GAAGnH,MAAM;;IAElB;IACA;IACA;;IAEA,IAAIipH,SAAS,GAAG,CAAC;IACjB,IAAIC,OAAO,GAAG,CAAC;;IAEf;IACA;IACAnqI,CAAC,CAACmC,IAAI,CAAC8nI,aAAa,EAAE,UAAU7nI,GAAG,EAAEtG,EAAE,EAAE;MACrC,IAAIA,EAAE,CAACmlB,MAAM,GAAG,CAAC,EAAEkpH,OAAO,IAAIruI,EAAE,CAACmlB,MAAM,CAAC,KACnC,IAAInlB,EAAE,CAACmlB,MAAM,GAAG,CAAC,EAAEipH,SAAS,IAAIpuI,EAAE,CAACmlB,MAAM;IAClD,CAAC,CAAC;;IAEF;IACAjhB,CAAC,CAACmC,IAAI,CAAC8nI,aAAa,EAAE,UAAU7nI,GAAG,EAAEtG,EAAE,EAAE;MACrC,IAAIA,EAAE,CAACmlB,MAAM,GAAG,CAAC,IAAIkpH,OAAO,IAAI,CAAC,EAC7BruI,EAAE,CAACsuI,YAAY,GAAGr0G,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAAC8+B,oBAAoB,GAAG9+B,EAAE,CAACmlB,MAAM,GAAGnlB,EAAE,CAAColB,KAAK,GAAGipH,OAAO,CAAC,CAAC,CAAC;MAAA,KACrF,IAAIruI,EAAE,CAACmlB,MAAM,GAAG,CAAC,IAAIipH,SAAS,IAAI,CAAC,EACpCpuI,EAAE,CAACsuI,YAAY,GAAGr0G,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAAC8+B,oBAAoB,GAAG9+B,EAAE,CAACmlB,MAAM,GAAGnlB,EAAE,CAAColB,KAAK,GAAGgpH,SAAS,CAAC,CAAC,CAAC;MAAA,KACvFpuI,EAAE,CAACsuI,YAAY,GAAG,CAAC;IAC5B,CAAC,CAAC;IAEF,IAAIC,iBAAiB,GAAG,CAAC;;IAEzB;IACA,IAAIC,cAAc,GAAG,CAAC;IACtB,IAAIC,iBAAiB,GAAG,CAAC;IACzBvqI,CAAC,CAACmC,IAAI,CAAC8nI,aAAa,EAAE,UAAU7nI,GAAG,EAAEtG,EAAE,EAAE;MACrC,IAAIA,EAAE,CAACmlB,MAAM,GAAG,CAAC,EAAEqpH,cAAc,IAAIv0G,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAACmlB,MAAM,CAAC,CAAC,KACpD,IAAInlB,EAAE,CAACmlB,MAAM,GAAG,CAAC,EAAE;QACpBspH,iBAAiB,IAAIx0G,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAACmlB,MAAM,CAAC;MAC5C;IACJ,CAAC,CAAC;;IAEF;IACA;IACA,IAAImH,KAAK,IAAI,CAAC,EAAE;MAEZ;MACApoB,CAAC,CAACmC,IAAI,CAAC8nI,aAAa,EAAE,UAAU7nI,GAAG,EAAEtG,EAAE,EAAE;QACrC,IAAIA,EAAE,CAACmlB,MAAM,GAAG,CAAC;UAAE;UACfopH,iBAAiB,IAAIvuI,EAAE,CAACsuI,YAAY,GAAGtuI,EAAE,CAAColB,KAAK,IAAIqpH,iBAAiB,GAAGniH,KAAK,CAAC,CAAC,KAC7E,IAAItsB,EAAE,CAACmlB,MAAM,GAAG,CAAC;UAAE;UACpBopH,iBAAiB,IAAIvuI,EAAE,CAACsuI,YAAY,GAAGtuI,EAAE,CAAColB,KAAK,GAAGqpH,iBAAiB;MAC3E,CAAC,CAAC;IACN,CAAC,MAAM;MACH;MACA;MACAvqI,CAAC,CAACmC,IAAI,CAAC8nI,aAAa,EAAE,UAAU7nI,GAAG,EAAEtG,EAAE,EAAE;QACrC,IAAIA,EAAE,CAACmlB,MAAM,GAAG,CAAC;UAAE;UACfopH,iBAAiB,IAAIvuI,EAAE,CAACsuI,YAAY,GAAGtuI,EAAE,CAAColB,KAAK,GAAGopH,cAAc,CAAC,KAChE,IAAIxuI,EAAE,CAACmlB,MAAM,GAAG,CAAC;UAAE;UACpBopH,iBAAiB,IAAIt0G,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAACsuI,YAAY,GAAGtuI,EAAE,CAAColB,KAAK,IAAIopH,cAAc,GAAGv0G,IAAI,CAACD,GAAG,CAAC1N,KAAK,CAAC,CAAC,CAAC;MACtG,CAAC,CAAC;IACN;IAEA,OAAOiiH,iBAAiB;EAC5B,CAAC;EAGDjwH,WAAW,CAACowH,mBAAmB,GAAG,UAAUvsG,IAAI,EAAE;IAC9C,IAAIxsB,KAAK,GAAG,CAAC;IAEb,IAAIwsB,IAAI,CAACG,OAAO,IAAIH,IAAI,CAACG,OAAO,CAAC,CAAC,CAAC,CAACpJ,QAAQ,EAAE;MAC1Ch1B,CAAC,CAACmC,IAAI,CAAC87B,IAAI,CAACG,OAAO,CAAC,CAAC,CAAC,CAACpJ,QAAQ,EAAE,UAAU5yB,GAAG,EAAEtG,EAAE,EAAE;QAChD,IAAIA,EAAE,CAACihC,SAAS,KAAK,SAAS,IAAI,CAAC,CAACjhC,EAAE,CAACmlB,MAAM,EACzCxP,KAAK,IAAI3V,EAAE,CAACmlB,MAAM;MAC1B,CAAC,CAAC;IACN;IAEA,OAAOxP,KAAK;EAChB,CAAC;;EAED;AACR;AACA;AACA;AACA;AACA;AACA;AACA;EACQ2I,WAAW,CAACqwH,aAAa,GAAG,UAAU3+H,WAAW,EAAEuT,gBAAgB,EAAEqrH,YAAY,EAAEjrI,QAAQ,EAAEqmI,YAAY,EAAE;IACvG,IAAIjB,kBAAkB,GAAG/4H,WAAW,CAACu0D,gBAAgB,KAAK,IAAI;IAC9D,IAAIykE,oBAAoB,GAAGh5H,WAAW,CAACi5H,kBAAkB,KAAK,IAAI;IAClE,IAAI4F,QAAQ,GAAG,CAAC,CAAC7+H,WAAW,CAACsyB,OAAO,IAAItyB,WAAW,CAACsyB,OAAO,CAAC97B,MAAM,GAAG,CAAC;IACtE,IAAI8lB,KAAK,GAAGhO,WAAW,CAACkjB,QAAQ,CAACxxB,WAAW,EAAEg6H,YAAY,CAAC,GAAG,CAAC;IAE/D,IAAIh6H,WAAW,CAAChP,QAAQ,CAACwC,EAAE,IAAI,IAAI,EAAE;MACjC+f,gBAAgB,CAACpT,QAAQ,GAAG,EAAE;IAClC,CAAC,MAAM;MAEH,IAAIH,WAAW,CAAC8+H,mBAAmB,KAAK,KAAK,EAAE;QAE3CvrH,gBAAgB,CAACpT,QAAQ,GAAG,CAAC;UACzBosB,YAAY,EAAEvsB,WAAW,CAAChP,QAAQ,CAAC8B,IAAI;UACvC05B,qBAAqB,EAAE/7B,aAAa,CAAC60E,aAAa,CAACtlE,WAAW,CAACwsB,qBAAqB,EAAE74B,QAAQ,CAAC;UAC/ForI,iBAAiB,EAAE,CAAC;UACpBC,yBAAyB,EAAE,CAAC;UAC5BC,kBAAkB,EAAExuI,aAAa,CAAC60E,aAAa,CAACtlE,WAAW,CAACwsB,qBAAqB,EAAE74B,QAAQ;QAC/F,CAAC,CAAC;;QAEF;QACA,IAAIqM,WAAW,CAACG,QAAQ,CAACk5F,OAAO,IAAIzlB,cAAc,CAAC6oB,cAAc,EAAE;UAC/D,IAAIz8F,WAAW,CAACG,QAAQ,CAACm5F,YAAY,IAAI,GAAG,IAAI,CAAC,CAACt5F,WAAW,CAACG,QAAQ,CAACm5F,YAAY,EAAE;YACjF/lF,gBAAgB,CAACpT,QAAQ,CAACqsB,qBAAqB,GAAGxsB,WAAW,CAACG,QAAQ,CAAC48F,gBAAgB;YACvFxpF,gBAAgB,CAACpT,QAAQ,CAAC8+H,kBAAkB,GAAGj/H,WAAW,CAACG,QAAQ,CAAC48F,gBAAgB;YACpFxpF,gBAAgB,CAACpT,QAAQ,CAAC++H,cAAc,GAAGl/H,WAAW,CAACG,QAAQ,CAAC++H,cAAc;UAClF,CAAC,MAAM;YACH3rH,gBAAgB,CAACpT,QAAQ,CAACqsB,qBAAqB,GAAG,EAAE;YACpDjZ,gBAAgB,CAACpT,QAAQ,CAAC8+H,kBAAkB,GAAG,EAAE;YACjD1rH,gBAAgB,CAACpT,QAAQ,CAAC++H,cAAc,GAAG,EAAE;UACjD;QACJ;MACJ,CAAC,MAAM;QAEH,IAAIC,KAAK,GAAGn/H,WAAW,CAACnM,aAAa;QACrC,IAAIgrI,QAAQ,EACRM,KAAK,GAAG7wH,WAAW,CAAC2vH,0BAA0B,CAACj+H,WAAW,CAAC;QAE/D,IAAIo/H,KAAK,GAAGP,QAAQ,GAAG,CAACvwH,WAAW,CAACowH,mBAAmB,CAAC1+H,WAAW,CAAC,GAAGA,WAAW,CAACg/H,yBAAyB;QAC5G,IAAIK,yBAAyB,GAAGr/H,WAAW,CAACwsB,qBAAqB,CAAC,CAAC;QACnEjZ,gBAAgB,CAACpT,QAAQ,GAAG,CAAC;UACzBosB,YAAY,EAAEvsB,WAAW,CAAChP,QAAQ,CAAC8B,IAAI;UACvC05B,qBAAqB,EAAE/7B,aAAa,CAAC60E,aAAa,CAAC+5D,yBAAyB,EAAE1rI,QAAQ,CAAC;UACvForI,iBAAiB,EAAEtuI,aAAa,CAAC60E,aAAa,CAAC65D,KAAK,EAAExrI,QAAQ,CAAC;UAC/DqrI,yBAAyB,EAAEvuI,aAAa,CAAC60E,aAAa,CAAC85D,KAAK,EAAEzrI,QAAQ,CAAC;UACvEsrI,kBAAkB,EAAExuI,aAAa,CAAC60E,aAAa,CAAC+5D,yBAAyB,GAAGD,KAAK,GAAGD,KAAK,EAAExrI,QAAQ;QACvG,CAAC,CAAC;;QAEF;QACA,IAAIqM,WAAW,CAAChP,QAAQ,IAAI,CAACgP,WAAW,CAACG,QAAQ,EAAE;UAC/CH,WAAW,CAACG,QAAQ,GAAGH,WAAW,CAAChP,QAAQ;QAC/C;QAEA,IAAIgP,WAAW,CAACG,QAAQ,CAACk5F,OAAO,IAAIzlB,cAAc,CAAC6oB,cAAc,EAAE;UAC/D,IAAIz8F,WAAW,CAACG,QAAQ,CAACm5F,YAAY,IAAI,GAAG,IAAI,CAAC,CAACt5F,WAAW,CAACG,QAAQ,CAACm5F,YAAY,EAAE;YACjF/lF,gBAAgB,CAACpT,QAAQ,CAACqsB,qBAAqB,GAAGxsB,WAAW,CAACG,QAAQ,CAAC48F,gBAAgB;YACvFxpF,gBAAgB,CAACpT,QAAQ,CAAC8+H,kBAAkB,GAAGj/H,WAAW,CAACG,QAAQ,CAAC48F,gBAAgB;YACpFxpF,gBAAgB,CAACpT,QAAQ,CAAC++H,cAAc,GAAGl/H,WAAW,CAACG,QAAQ,CAAC++H,cAAc;UAClF,CAAC,MAAM;YACH3rH,gBAAgB,CAACpT,QAAQ,CAACqsB,qBAAqB,GAAG,EAAE;YACpDjZ,gBAAgB,CAACpT,QAAQ,CAAC8+H,kBAAkB,GAAG,EAAE;YACjD1rH,gBAAgB,CAACpT,QAAQ,CAAC++H,cAAc,GAAG,EAAE;UACjD;QACJ;MAEJ;;MAEA;MACA,IAAI,CAAC,CAACl/H,WAAW,CAAChP,QAAQ,CAACgC,QAAQ,IAAIgN,WAAW,CAAChP,QAAQ,CAACgC,QAAQ,CAACwD,MAAM,GAAG,CAAC,EAAE;QAC7E,IAAI8oI,IAAI,GAAGt/H,WAAW,CAAChP,QAAQ,CAACgC,QAAQ,CAACmD,MAAM,CAAC,UAAU0H,CAAC,EAAE;UACzD,OAAOA,CAAC,CAACqtC,OAAO,KAAK,IAAI;QAC7B,CAAC,CAAC;QACF,IAAIo0F,IAAI,CAAC9oI,MAAM,KAAK,CAAC,EACjB8oI,IAAI,GAAGt/H,WAAW,CAAChP,QAAQ,CAACgC,QAAQ;QACxC,IAAInB,GAAG,GAAGytI,IAAI,CAAC,CAAC,CAAC;QACjB/rH,gBAAgB,CAACpT,QAAQ,CAAC,CAAC,CAAC,CAAClN,KAAK,GAAGpB,GAAG,CAACoB,KAAK;QAC9CsgB,gBAAgB,CAACpT,QAAQ,CAAC,CAAC,CAAC,CAACjN,KAAK,GAAGrB,GAAG,CAACqB,KAAK;QAC9CqgB,gBAAgB,CAACpT,QAAQ,CAAC,CAAC,CAAC,CAAChN,WAAW,GAAGtB,GAAG,CAACsB,WAAW;MAC9D;;MAEA;MACA;MACA,IAAIg/B,IAAI,CAACotG,4BAA4B,EAAE;QACnChsH,gBAAgB,CAACpT,QAAQ,CAAC,CAAC,CAAC,CAACtD,IAAI,GAAGs1B,IAAI,CAACqtG,oBAAoB;QAC7DjsH,gBAAgB,CAACpT,QAAQ,CAAC,CAAC,CAAC,CAAC9C,OAAO,GAAG80B,IAAI,CAACstG,uBAAuB;QACnElsH,gBAAgB,CAACpT,QAAQ,CAAC,CAAC,CAAC,CAAC9M,KAAK,GAAG8+B,IAAI,CAACotG,4BAA4B;QACtEhsH,gBAAgB,CAACpT,QAAQ,CAAC,CAAC,CAAC,CAAC/C,KAAK,GAAG+0B,IAAI,CAACutG,4BAA4B;QACtEnsH,gBAAgB,CAACpT,QAAQ,CAAC,CAAC,CAAC,CAAClD,QAAQ,GAAGk1B,IAAI,CAACwtG,mBAAmB;QAChEpsH,gBAAgB,CAACpT,QAAQ,CAAC,CAAC,CAAC,CAACpD,KAAK,GAAGo1B,IAAI,CAACytG,wBAAwB;MACtE,CAAC,MAAM,IAAI,CAAC,CAAC5/H,WAAW,CAAChP,QAAQ,CAACoC,SAAS,IAAI4M,WAAW,CAAChP,QAAQ,CAACoC,SAAS,CAACoD,MAAM,GAAG,CAAC,EAAE;QACtF,IAAIqpI,MAAM,GAAGx0G,4CAAU,CAAC/wB,IAAI,CAAC0F,WAAW,CAAChP,QAAQ,CAACoC,SAAS,CAAC,CAAC+oD,KAAK,CAAC,UAAU/lD,CAAC,EAAE;UACxE,OAAOA,CAAC,CAAC9C,IAAI,KAAK63B,8DAAW,CAACsC,QAAQ;QAC1C,CAAC,CAAC,CACDi0B,iBAAiB,CAAC,UAAUtrD,CAAC,EAAE;UAC5B,OAAOA,CAAC,CAAC+G,cAAc;QAC3B,CAAC,CAAC,CAACskD,OAAO,CAAC,CAAC;QAChB,IAAIo+E,MAAM,CAACrpI,MAAM,KAAK,CAAC,EACnBqpI,MAAM,GAAG7/H,WAAW,CAAChP,QAAQ,CAACoC,SAAS;QAC3C,IAAI0sI,KAAK,GAAGD,MAAM,CAAC,CAAC,CAAC;QAErB,IAAI,CAAC,CAACC,KAAK,CAACjjI,IAAI,IAAI,CAAC,CAACijI,KAAK,CAACziI,OAAO,IAAI,CAAC,CAACyiI,KAAK,CAACzsI,KAAK,IAAI,CAAC,CAACysI,KAAK,CAAC1iI,KAAK,IAAI,CAAC,CAAC0iI,KAAK,CAAC7iI,QAAQ,IAAI,CAAC,CAAC6iI,KAAK,CAAC/iI,KAAK,EAAE;UAExGwW,gBAAgB,CAACpT,QAAQ,CAAC,CAAC,CAAC,CAACtD,IAAI,GAAGijI,KAAK,CAACjjI,IAAI;UAC9C0W,gBAAgB,CAACpT,QAAQ,CAAC,CAAC,CAAC,CAAC9C,OAAO,GAAGyiI,KAAK,CAACziI,OAAO;UACpDkW,gBAAgB,CAACpT,QAAQ,CAAC,CAAC,CAAC,CAAC9M,KAAK,GAAGysI,KAAK,CAACzsI,KAAK;UAChDkgB,gBAAgB,CAACpT,QAAQ,CAAC,CAAC,CAAC,CAAC/C,KAAK,GAAG0iI,KAAK,CAAC1iI,KAAK;UAChDmW,gBAAgB,CAACpT,QAAQ,CAAC,CAAC,CAAC,CAAClD,QAAQ,GAAG6iI,KAAK,CAAC7iI,QAAQ;UACtDsW,gBAAgB,CAACpT,QAAQ,CAAC,CAAC,CAAC,CAACpD,KAAK,GAAG+iI,KAAK,CAAC/iI,KAAK;QACpD;MACJ;IACJ;IAEA,IAAI,OAAOiD,WAAW,CAACuF,mBAAmB,KAAK,WAAW,IACtDvF,WAAW,CAACuF,mBAAmB,KAAK,IAAI,IACxCvF,WAAW,CAACuF,mBAAmB,CAAC/R,EAAE,IAAI,IAAI,EAAE;MAC5C+f,gBAAgB,CAAC6N,mBAAmB,GAAG,EAAE;IAC7C,CAAC,MAAM;MACH7N,gBAAgB,CAAC6N,mBAAmB,GAAG,CAAC;QACpC2+G,uBAAuB,EAAE//H,WAAW,CAACuF,mBAAmB,CAACzS;MAC7D,CAAC,CAAC;IACN;IAGA,IAAIktI,aAAa,GACbhgI,WAAW,CAAC0oB,WAAW;IAE3BnV,gBAAgB,CAACqtG,aAAa,GAAGof,aAAa;IAC9CzsH,gBAAgB,CAAC3I,OAAO,GAAG5K,WAAW,CAAC4K,OAAO;IAE9C2I,gBAAgB,CAAC0sH,oBAAoB,GAAGjgI,WAAW,CAAC+rB,aAAa,CAACv1B,MAAM;IACxE+c,gBAAgB,CAACsY,IAAI,GAAG7rB,WAAW,CAAC6rB,IAAI;IACxCtY,gBAAgB,CAAC0nG,IAAI,GAAG,EAAE;IAC1B1nG,gBAAgB,CAACuH,UAAU,GAAGxqB,aAAa,CAACyqB,UAAU;IACtDxH,gBAAgB,CAACiuF,YAAY,GAAGlxG,aAAa,CAAC2qB,YAAY;IAC1D1H,gBAAgB,CAAC2sH,QAAQ,GAAGzvI,aAAa,CAAC60E,aAAa,CAACh3D,WAAW,CAACkuH,WAAW,CAACx8H,WAAW,CAAC+rB,aAAa,EAAE/rB,WAAW,CAAC,EAAErM,QAAQ,CAAC;IAClI4f,gBAAgB,CAAC0Y,QAAQ,GAAGx7B,aAAa,CAAC60E,aAAa,CAACtlE,WAAW,CAAC86H,aAAa,EAAEnnI,QAAQ,CAAC;IAC5F4f,gBAAgB,CAAC4V,KAAK,GAAG14B,aAAa,CAAC60E,aAAa,CAACh3D,WAAW,CAACkjB,QAAQ,CAACxxB,WAAW,EAAEg6H,YAAY,CAAC,EAAErmI,QAAQ,CAAC;IAC/G4f,gBAAgB,CAAC4sH,kBAAkB,MAAAt+H,MAAA,CAAMpR,aAAa,CAAC6uB,SAAS,CAAE6S,IAAI,CAAC4b,aAAa,GAAG5b,IAAI,CAAC+tG,QAAQ,GAAI,GAAG,EAAE,CAAC,CAAC,CAACh7D,OAAO,CAAC,CAAC,CAAC,MAAG;IAC7H;IACA3xD,gBAAgB,CAACqZ,OAAO,GAAGn8B,aAAa,CAAC60E,aAAa,CAACtlE,WAAW,CAAC4sB,OAAO,EAAEj5B,QAAQ,CAAC;IAErF,IAAIysI,QAAQ,GAAGpgI,WAAW,CAACssB,aAAa;IACxC;;IAEA/Y,gBAAgB,CAAC+Y,aAAa,GAAG77B,aAAa,CAAC60E,aAAa,CAAC86D,QAAQ,EAAEzsI,QAAQ,CAAC;IAEhF4f,gBAAgB,CAAC8sH,MAAM,GAAG5vI,aAAa,CAAC60E,aAAa,CAAC70E,aAAa,CAAC6uB,SAAS,CAACtf,WAAW,CAACgtB,gBAAgB,EAAE,CAAC,CAAC,EAAEr5B,QAAQ,CAAC;IACzH,IAAIqM,WAAW,CAACmsB,OAAO,EAAE;MACrB5Y,gBAAgB,CAAC+sH,KAAK,GAAG,CAAC;QACtBC,SAAS,EAAEvgI,WAAW,CAACmsB;MAC3B,CAAC,CAAC;IACN,CAAC,MAAM;MACH5Y,gBAAgB,CAAC+sH,KAAK,GAAG,EAAE;IAC/B;IAGA/sH,gBAAgB,CAACitH,gBAAgB,GAAG,EAAE;IACtCtsI,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;MACjD,IAAIsoF,UAAU,GAAGtoF,EAAE,CAACo/B,SAAS,GAAG,CAAC;MACjC,IAAIlB,KAAK,GAAG,CAAC;MACb,IAAIrZ,MAAM,GAAG,CAAC;MAEd,IAAIyjE,UAAU,IAAI,KAAK,EAAE;QACrB,IAAItoF,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAACq/B,qBAAqB,IAAIr/B,EAAE,CAACo/B,SAAS,KAAK,CAAC,EAAE;UAC/DlB,KAAK,GAAGl+B,EAAE,CAACq/B,qBAAqB;UAChCxa,MAAM,GAAGpkB,aAAa,CAAC6uB,SAAS,CAACtvB,EAAE,CAACq/B,qBAAqB,GAAGr/B,EAAE,CAAColB,KAAK,EAAE,CAAC,CAAC;QAC5E,CAAC,MAAM;UACH8Y,KAAK,GAAGl+B,EAAE,CAACo/B,SAAS;UACpBva,MAAM,GAAGpkB,aAAa,CAAC6uB,SAAS,CAACtvB,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAAColB,KAAK,EAAE,CAAC,CAAC;QAChE;MACJ,CAAC,MAAM;QACH,IAAI2jH,kBAAkB,KAAK,IAAI,IAAIC,oBAAoB,KAAK,IAAI,EAAE;UAC9D9qG,KAAK,GAAG,CAACl+B,EAAE,CAACq/B,qBAAqB;UACjCxa,MAAM,GAAG,CAAC7kB,EAAE,CAAColB,KAAK,GAAGplB,EAAE,CAACq/B,qBAAqB;QACjD,CAAC,MAAM;UACHnB,KAAK,GAAGl+B,EAAE,CAACq/B,qBAAqB;UAChCxa,MAAM,GAAG7kB,EAAE,CAAColB,KAAK,GAAGplB,EAAE,CAACq/B,qBAAqB;QAChD;MACJ;MAEAnB,KAAK,GAAGz9B,aAAa,CAAC60E,aAAa,CAACp3C,KAAK,EAAEv6B,QAAQ,CAAC;MACpDkhB,MAAM,GAAGpkB,aAAa,CAAC60E,aAAa,CAACzwD,MAAM,EAAElhB,QAAQ,CAAC;MAEtD4f,gBAAgB,CAACitH,gBAAgB,CAAC/pI,IAAI,CAAC;QACnCgqI,YAAY,EAAEzwI,EAAE,CAAColB,KAAK;QACtBk9F,WAAW,EAAEtiH,EAAE,CAAC8C,IAAI;QACpB4tI,aAAa,EAAE1wI,EAAE,CAACo/B,SAAS,GAAG,CAAC,IAAIp/B,EAAE,CAACmlB,MAAM,IAAI,CAAC,GAAG,GAAG,GAAGN,MAAM,GAAGA,MAAM;QACzE2iG,YAAY,EAAExnH,EAAE,CAACo/B,SAAS,GAAG,CAAC,IAAIp/B,EAAE,CAACm+B,KAAK,IAAI,CAAC,GAAG,GAAG,GAAGD,KAAK,GAAGA,KAAK;QACrEyyG,UAAU,EAAE3wI,EAAE,CAACs/B,GAAG;QAClB7iB,SAAS,EAAEzc,EAAE,CAACyc,SAAS;QACvBm0H,cAAc,EAAE5wI,EAAE,CAACu/B,OAAO;QAC1BsxG,eAAe,EAAE7wI,EAAE,CAACm+B,KAAK,IAAI,CAAC,GAAIn+B,EAAE,CAACi9B,YAAY,GAAG,CAAC,GAAG,GAAG,GAAGx8B,aAAa,CAAC60E,aAAa,CAACt1E,EAAE,CAACi9B,YAAY,GAAGj9B,EAAE,CAAColB,KAAK,EAAEzhB,QAAQ,CAAC,GAC3H3D,EAAE,CAACqrI,mBAAmB,IAAIrrI,EAAE,CAACqrI,mBAAmB,GAAG,CAAC,GAAG,GAAG,GAAG5qI,aAAa,CAAC60E,aAAa,CAACt1E,EAAE,CAACqrI,mBAAmB,GAAGrrI,EAAE,CAAColB,KAAK,EAAEzhB,QAAQ,CAAC,GAAG,IAAI,GAAI,IAAI;QACxJk8B,uBAAuB,EAAE7/B,EAAE,CAAC6/B,uBAAuB;QACnDixG,mBAAmB,EAAE9wI,EAAE,CAAC+/B,YAAY;QACpC6Y,oBAAoB,EAAE54C,EAAE,CAACggC,GAAG;QAC5B6Y,oBAAoB,EAAE74C,EAAE,CAACigC,GAAG;QAC5B6Y,oBAAoB,EAAE94C,EAAE,CAACkgC,GAAG;QAC5B6Y,oBAAoB,EAAE/4C,EAAE,CAACmgC,GAAG;QAC5B6Y,oBAAoB,EAAEh5C,EAAE,CAACogC,GAAG;QAC5B6Y,oBAAoB,EAAEj5C,EAAE,CAACqgC,GAAG;QAC5B6Y,oBAAoB,EAAEl5C,EAAE,CAACsgC,GAAG;QAC5B6Y,oBAAoB,EAAEn5C,EAAE,CAACugC,GAAG;QAC5B6Y,oBAAoB,EAAEp5C,EAAE,CAACwgC,GAAG;QAC5B6Y,qBAAqB,EAAEr5C,EAAE,CAACygC,IAAI;QAC9BswG,yBAAyB,EAAI/wI,EAAE,CAACgxI,YAAY,IAAIhxI,EAAE,CAACgxI,YAAY,GAAG,CAAC,IAAI9yG,KAAK,GAAG,CAAC,MAAArsB,MAAA,CAAOpR,aAAa,CAAC6uB,SAAS,CAAEtvB,EAAE,CAACgxI,YAAY,GAAG9yG,KAAK,GAAI,GAAG,EAAE,CAAC,CAAC,CAACg3C,OAAO,CAAC,CAAC,CAAC,SAAM;MACvK,CAAC,CAAC;IACN,CAAC,CAAC;IAEF3xD,gBAAgB,CAAC2V,QAAQ,GAAG,EAAE;;IAE9B;IACA,IAAIlpB,WAAW,CAACotB,YAAY,IAAIptB,WAAW,CAACotB,YAAY,KAAK,CAAC,EAAE;MAC5D,IAAI6zG,QAAQ,GAAG;QACX/vG,eAAe,EAAErgC,cAAc,CAACe,SAAS,CAAC,yBAAyB,CAAC;QACpEsvI,aAAa,EAAEzwI,aAAa,CAAC60E,aAAa,CAACtlE,WAAW,CAACotB,YAAY,EAAEz5B,QAAQ;MACjF,CAAC;MACD4f,gBAAgB,CAAC2V,QAAQ,CAACzyB,IAAI,CAACwqI,QAAQ,CAAC;IAC5C;IAEA,IAAI3kH,KAAK,GAAG,CAAC;IACbpoB,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAACkpB,QAAQ,EAAE,UAAU5yB,GAAG,EAAEtG,EAAE,EAAE;MAC5C,IAAI,CAAC,CAACA,EAAE,CAACmlB,MAAM,EAAE;QAAE;QACfmH,KAAK,IAAItsB,EAAE,CAACmlB,MAAM;QAClB5B,gBAAgB,CAAC2V,QAAQ,CAACzyB,IAAI,CAAC;UAC3By6B,eAAe,EAAElhC,EAAE,CAACkhC,eAAe;UACnCgwG,aAAa,EAAEzwI,aAAa,CAAC60E,aAAa,CAACt1E,EAAE,CAACmlB,MAAM,EAAExhB,QAAQ,CAAC;UAC/D88H,WAAW,EAAE,CAAC,CAACzgI,EAAE,CAAC67B,IAAI,GAAGp7B,aAAa,CAACiqB,eAAe,CAAC1qB,EAAE,CAAC67B,IAAI,CAAC,GAAG;QACtE,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;IAEFtY,gBAAgB,CAACo3D,UAAU,GAAG,EAAE;IAChC,IAAI,CAAC,CAAC3qE,WAAW,CAAC2qE,UAAU,IAAI3qE,WAAW,CAAC2qE,UAAU,CAACn0E,MAAM,GAAG,CAAC,EAAE;MAC/D+c,gBAAgB,CAACo3D,UAAU,CAACl0E,IAAI,CAAC;QAC7B46B,SAAS,EAAE5gC,aAAa,CAAC60E,aAAa,CAAC70E,aAAa,CAAC6uB,SAAS,CAAChR,WAAW,CAAC0sH,YAAY,CAACh7H,WAAW,CAAC,EAAE,CAAC,CAAC,EAAErM,QAAQ;MACtH,CAAC,CAAC;IACN;IAEA4f,gBAAgB,CAAC4tH,QAAQ,GAAG1wI,aAAa,CAAC60E,aAAa,CAAC70E,aAAa,CAAC6uB,SAAS,CAACtf,WAAW,CAACgtB,gBAAgB,GAAG1Q,KAAK,EAAE,CAAC,CAAC,EAAE3oB,QAAQ,CAAC;IAEnIyqE,cAAc,CAAC7uD,aAAa,CAAC,CAAC;IAE9B,IAAIrb,CAAC,CAAC,gBAAgB,CAAC,CAACsf,EAAE,CAAC,SAAS,CAAC,EAAE;MACnC4qD,cAAc,CAAC5uD,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE+D,gBAAgB,CAAC3I,OAAO,CAAC6I,WAAW,CAAC,CAAC,EAAEF,gBAAgB,CAAC3I,OAAO,CAAC6I,WAAW,CAAC,CAAC,EAAE,0BAA0B,CAAC;IAC9J;IACA,IAAIvf,CAAC,CAAC,gBAAgB,CAAC,CAACsf,EAAE,CAAC,UAAU,CAAC,EAAE;MACpC4qD,cAAc,CAAC5uD,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE+D,gBAAgB,CAAC3I,OAAO,EAAE2I,gBAAgB,CAAC3I,OAAO,EAAE,aAAa,CAAC;IACvH;;IAEA;;IAEAha,QAAQ,CAAC,YAAY;MACjBP,UAAU,CAAC+K,UAAU,CAAC,kBAAkB,EAAElH,CAAC,CAAC,mBAAmB,CAAC,CAAC;;MAEjE;MACAA,CAAC,CAAC,wBAAwB,CAAC,CAACmC,IAAI,CAAC,UAAUuO,CAAC,EAAE+O,IAAI,EAAE;QAChD,IAAIjV,IAAI,GAAGxK,CAAC,CAAC,IAAI,CAAC,CAAC6D,IAAI,CAAC,MAAM,CAAC;QAC/B,IAAI6C,EAAE,GAAG1G,CAAC,CAAC,IAAI,CAAC,CAAC6D,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAIO,IAAI,GAAGpE,CAAC,CAAC,IAAI,CAAC,CAAC6D,IAAI,CAAC,SAAS,CAAC;QAElCqmE,cAAc,CAAC5uD,WAAW,CAAC5U,EAAE,EAAE8D,IAAI,EAAEpG,IAAI,EAAEA,IAAI,EAAE,aAAa,CAAC;MACnE,CAAC,CAAC;MACF;;MAEA;MACA8lE,cAAc,CAACpsD,cAAc,CAAC,CAAC;IACnC,CAAC,CAAC;;IAEF;IACAuB,gBAAgB,CAACgoG,sBAAsB,GAAG,EAAE;IAC5ChoG,gBAAgB,CAAC6tH,oBAAoB,GAAG,EAAE;IAC1C7tH,gBAAgB,CAAC8tH,sBAAsB,GAAG,EAAE;IAE5C/yH,WAAW,CAACgzH,mBAAmB,CAACthI,WAAW,EAAEuT,gBAAgB,EAAE5f,QAAQ,CAAC;EAC5E,CAAC;EAED2a,WAAW,CAACgzH,mBAAmB,GAAG,UAAUthI,WAAW,EAAEuT,gBAAgB,EAAE5f,QAAQ,EAAE;IACjF,IAAI8rC,GAAG,GAAGnvC,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;IAEhD,IAAI4hG,iBAAiB,GAAG,CAAC,CAAC9hG,GAAG,IAAIA,GAAG,CAAC+hG,0BAA0B,KAAK,IAAI;;IAExE;IACAtxI,OAAO,CAAC4M,OAAO,CAACkD,WAAW,CAACkpB,QAAQ,EAAE,UAAUoK,CAAC,EAAE;MAC/C,IAAI,CAAC,CAACA,CAAC,CAACg6D,mBAAmB,EAAE;QAEzB,QAAQ5Z,cAAc,CAAC+tD,cAAc,CAACnuG,CAAC,CAACg6D,mBAAmB,CAAC;UACxD,KAAK,sBAAsB;YACvB,IAAIxoF,CAAC,GAAG6uE,cAAc,CAAC6nC,yBAAyB,CAACloF,CAAC,CAACg6D,mBAAmB,EAAE35F,QAAQ,CAAC;YACjF,IAAI,CAAC,CAACmR,CAAC,EAAE;cACLyO,gBAAgB,CAACgoG,sBAAsB,CAAC9kH,IAAI,CAACqO,CAAC,CAAC;cAC/C,IAAIy8H,iBAAiB,KAAK,IAAI;gBAC1B;gBACAhuH,gBAAgB,CAACgoG,sBAAsB,CAAC9kH,IAAI,CACxCk9E,cAAc,CAAC6nC,yBAAyB,CAACloF,CAAC,CAACg6D,mBAAmB,EAAE35F,QAAQ,CAAC,CAAC;YACtF;YACA;UAEJ,KAAK,oBAAoB;YACrB,IAAImR,CAAC,GAAGwJ,WAAW,CAACozH,uBAAuB,CAACpuG,CAAC,CAACg6D,mBAAmB,EAAE,IAAI,CAAC;YACxE,IAAI,CAAC,CAACxoF,CAAC,EAAE;cACLyO,gBAAgB,CAAC6tH,oBAAoB,CAAC3qI,IAAI,CAACqO,CAAC,CAAC;YACjD;YACA,IAAIA,CAAC,GAAGwJ,WAAW,CAACozH,uBAAuB,CAACpuG,CAAC,CAACg6D,mBAAmB,EAAE,KAAK,CAAC;YACzE,IAAI,CAAC,CAACxoF,CAAC,EAAE;cACLyO,gBAAgB,CAAC6tH,oBAAoB,CAAC3qI,IAAI,CAACqO,CAAC,CAAC;YACjD;YAEA;UACJ,KAAK,6BAA6B;YAC9B,IAAIA,CAAC,GAAGwJ,WAAW,CAACqzH,gCAAgC,CAACruG,CAAC,CAACg6D,mBAAmB,EAAE,IAAI,CAAC;YACjF,IAAI,CAAC,CAACxoF,CAAC,EAAE;cACLyO,gBAAgB,CAAC8tH,sBAAsB,CAAC5qI,IAAI,CAACqO,CAAC,CAAC;YACnD;YACA,IAAIA,CAAC,GAAGwJ,WAAW,CAACqzH,gCAAgC,CAACruG,CAAC,CAACg6D,mBAAmB,EAAE,KAAK,CAAC;YAClF,IAAI,CAAC,CAACxoF,CAAC,EAAE;cACLyO,gBAAgB,CAAC8tH,sBAAsB,CAAC5qI,IAAI,CAACqO,CAAC,CAAC;YACnD;YAEA;QACR;MACJ;IACJ,CAAC,CAAC;EACN,CAAC;EAEDwJ,WAAW,CAACozH,uBAAuB,GAAG,UAAU90C,eAAe,EAAEg1C,UAAU,EAAE;IACzE,IAAIn8F,CAAC,GAAG,CAAC,CAACmnD,eAAe,CAACI,eAAe,IAAI40C,UAAU,GAAGh1C,eAAe,CAACI,eAAe,CAACj9E,OAAO,CAAC,iBAAiB,EAAE,QAAQ,CAAC,GAC1H,CAAC,CAAC68E,eAAe,CAACK,eAAe,IAAI,CAAC20C,UAAU,GAAGh1C,eAAe,CAACK,eAAe,CAACl9E,OAAO,CAAC,iBAAiB,EAAE,QAAQ,CAAC,GAAG,IAAI;IAClI,IAAI,CAAC01B,CAAC,EACF,OAAO,IAAI;IAEf,IAAIm8F,UAAU,EACV,OAAO;MACHzzB,eAAe,EAAE32C,IAAI,CAACqB,WAAW,CAAC,qDAAqD,GAAGpzB,CAAC,GAAG,QAAQ;IAC1G,CAAC,CAAC,KAEF,OAAO;MACH2oE,eAAe,EAAE52C,IAAI,CAACqB,WAAW,CAAC,qDAAqD,GAAGpzB,CAAC,GAAG,QAAQ;IAC1G,CAAC;EACT,CAAC;EAEDn3B,WAAW,CAACqzH,gCAAgC,GAAG,UAAU/0C,eAAe,EAAEg1C,UAAU,EAAE;IAClF,IAAIn8F,CAAC,GAAG,CAAC,CAACmnD,eAAe,CAACI,eAAe,IAAI40C,UAAU,GAAGh1C,eAAe,CAACI,eAAe,CAAC60C,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,GAC/G,CAAC,CAACj1C,eAAe,CAACK,eAAe,IAAI,CAAC20C,UAAU,GAAGh1C,eAAe,CAACK,eAAe,CAAC40C,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,IAAI;IACvH,IAAI,CAACp8F,CAAC,EACF,OAAO,IAAI;IAEf,IAAIm8F,UAAU,EACV,OAAO;MACHzzB,eAAe,EAAE32C,IAAI,CAACqB,WAAW,CAAC,qDAAqD,GAAGpzB,CAAC,GAAG,QAAQ;IAC1G,CAAC,CAAC,KAEF,OAAO;MACH2oE,eAAe,EAAE52C,IAAI,CAACqB,WAAW,CAAC,qDAAqD,GAAGpzB,CAAC,GAAG,QAAQ;IAC1G,CAAC;EACT,CAAC;;EAED;AACR;AACA;AACA;;EAEQ,IAAIq8F,YAAY,GAAG,EAAE;EACrBxzH,WAAW,CAAC4nF,eAAe,GAAG,YAAY;IACtC,IAAIr1E,QAAQ,GAAGvwB,aAAa,CAACmB,QAAQ,GAAG+uB,qBAAqB,GAAGvb,eAAe;IAC/E,IAAIvJ,EAAE,GAAGmlB,QAAQ,CAACq1E,eAAe,CAAC,CAAC;IAEnC,IAAI5lG,aAAa,CAACmB,QAAQ,IAAInB,aAAa,CAACX,MAAM,KAAK,KAAK,IAAI,CAACwV,UAAU,CAACE,WAAW,EAAE;MACrF3J,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,UAAUC,IAAI,EAAE;QAEzB;;QAEA;QACA;;QAEA;;QAEA,OAAO5D,aAAa,CAACm6C,MAAM,CAACt8B,WAAW,EAAEja,IAAI,CAACC,IAAI,CAACm7B,SAAS,CAAC,CACxDr7B,IAAI,CAAC,UAAUy2C,QAAQ,EAAE;UACtBi3F,YAAY,GAAGj3F,QAAQ;UACvBi3F,YAAY,GAAGC,gBAAgB,CAAC,CAAC;UACjC,OAAO98H,eAAe,CAACoxF,mBAAmB,CAACxrD,QAAQ,CAAC;QACxD,CAAC,CAAC;;QAEN;QACA;QACA;MACJ,CAAC,CAAC;IACN,CAAC,MAAM;MACHnvC,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,UAAUC,IAAI,EAAE;QACzB,IAAIA,IAAI,CAACC,IAAI,EAAE;UACX,IAAMu2C,QAAQ,GAAG82B,+DAAW,CAACttE,IAAI,CAACC,IAAI,CAACm7B,SAAS,CAAC;UAEjDqyG,YAAY,GAAGj3F,QAAQ;UACvBi3F,YAAY,GAAGC,gBAAgB,CAAC,CAAC;UACjC,OAAO1tI,IAAI,CAACC,IAAI;QACpB,CAAC,MAAM;UACHwtI,YAAY,GAAGztI,IAAI;UACnBytI,YAAY,GAAGC,gBAAgB,CAAC,CAAC;UACjC,OAAO1tI,IAAI;QACf;MACJ,CAAC,CAAC;IACN;IACA,OAAOqH,EAAE;EACb,CAAC;;EAED;AACR;AACA;AACA;AACA;AACA;EACQ,SAASsmI,QAAQA,CAACv6D,IAAI,EAAEw6D,GAAG,EAAE;IACzB,IAAIC,MAAM,GAAG,KAAK;IAClB,IAAID,GAAG,IAAIx6D,IAAI,IAAI,OAAQA,IAAK,IAAI,QAAQ,EAAE;MAC1C,IAAI5vD,MAAM,GAAG4vD,IAAI,CAACh8D,KAAK,CAAC,GAAG,CAAC;MAC5BvX,CAAC,CAACmC,IAAI,CAACwhB,MAAM,EAAE,UAAUvhB,GAAG,EAAEtG,EAAE,EAAE;QAC9B,IAAIiyI,GAAG,KAAKjyI,EAAE,EAAE;UACZkyI,MAAM,GAAG,IAAI;UACb,OAAO,KAAK;QAChB;MACJ,CAAC,CAAC;IACN;IAEA,OAAOA,MAAM;EACjB;;EAEA;AACR;AACA;AACA;AACA;AACA;EACQ,SAASC,WAAWA,CAACxxG,KAAK,EAAEgmE,cAAc,EAAE;IACxC,IAAI9+E,MAAM,GAAG8Y,KAAK,CAACx6B,MAAM,CAAC,UAAUisI,IAAI,EAAE;MACtC,OAAOA,IAAI,CAACzrC,cAAc,KAAKA,cAAc;IACjD,CAAC,CAAC;IACF,OAAO9+E,MAAM,CAACrhB,MAAM,GAAG,CAAC;EAC5B;;EAEA;AACR;AACA;AACA;AACA;AACA;EACQ,SAAS6rI,mBAAmBA,CAACC,aAAa,EAAEzrC,MAAM,EAAE;IAChD,IAAI0rC,GAAG,GAAG,KAAK;IACfruI,CAAC,CAACmC,IAAI,CAACisI,aAAa,EAAE,UAAUhsI,GAAG,EAAEtG,EAAE,EAAE;MACrC,IAAIA,EAAE,CAACwyI,MAAM,KAAK3rC,MAAM,IAAI7mG,EAAE,CAAC6mG,MAAM,KAAKA,MAAM,EAAE;QAC9C0rC,GAAG,GAAG,IAAI;QACV,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;IACF,OAAOA,GAAG;EACd;;EAEA;EACAj0H,WAAW,CAACm0H,mBAAmB,GAAG,UAAUziI,WAAW,EAAE;IACrD,IAAI6uC,WAAW,GAAG,IAAIhjB,IAAI,CAAC,CAAC;IAE5B,IAAIy2G,aAAa,GAAGtiI,WAAW,CAACyvB,SAAS;IAEzC,IAAIgzG,mBAAmB,GAAG,KAAK;IAC/B,IAAIC,GAAG,GAAGZ,YAAY,CAAC3rI,MAAM,CAAC,UAAUyJ,CAAC,EAAE;MACvC,OAAOA,CAAC,CAAC22F,YAAY,KAAK,IAAI;IAClC,CAAC,CAAC;IAEFriG,CAAC,CAACmC,IAAI,CAACqsI,GAAG,EAAE,UAAUC,MAAM,EAAEC,IAAI,EAAE;MAChC,IAAIP,mBAAmB,CAACC,aAAa,EAAEM,IAAI,CAAC/rC,MAAM,CAAC,IAAI+rC,IAAI,CAAChsC,cAAc,KAAK,KAAK,IAAIgsC,IAAI,CAAChsC,cAAc,KAAK,KAAK,EAAE;QAEnH1iG,CAAC,CAACmC,IAAI,CAACusI,IAAI,CAACC,QAAQ,EAAE,UAAUC,IAAI,EAAEC,QAAQ,EAAE;UAC5C7uI,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;YACjD,IAAIA,EAAE,CAACg/B,OAAO,IACT,CAAEh/B,EAAE,CAACyc,SAAS,KAAKs2H,QAAQ,CAACvnD,SAAS,IAAIunD,QAAQ,CAACvnD,SAAS,IAAI,CAACunD,QAAQ,CAACr9E,QAAQ,IAAMq9E,QAAQ,CAACvnD,SAAS,IAAIunD,QAAQ,CAACr9E,QAAQ,IAAI11D,EAAE,CAAC4+B,QAAQ,KAAKm0G,QAAQ,CAACvnD,SAAU,IAAI,CAACunD,QAAQ,CAACvnD,SAAS,IAAIunD,QAAQ,CAACvnD,SAAS,KAAKj3C,OAAO,MAAOv0C,EAAE,CAAC2+B,UAAU,KAAKo0G,QAAQ,CAAC5lD,UAAU,IAAI4lD,QAAQ,CAAC5lD,UAAU,IAAK,CAAC4lD,QAAQ,CAAC5lD,UAAU,CAAC,KACtTntF,EAAE,CAAC0+B,OAAO,KAAKq0G,QAAQ,CAAC7kD,OAAO,IAAI6kD,QAAQ,CAAC7kD,OAAO,IAAK,CAAC6kD,QAAQ,CAAC7kD,OAAO,CAAC,KAC3E8jD,QAAQ,CAAChyI,EAAE,CAACy+B,IAAI,EAAEs0G,QAAQ,CAACrsC,OAAO,CAAC,IAAI,CAACqsC,QAAQ,CAACrsC,OAAO,CAAE,KAC9DksC,IAAI,CAACtxE,MAAM,IAAI,IAAI,IAAI,IAAIzlC,IAAI,CAAC+2G,IAAI,CAACtxE,MAAM,CAAC,IAAIziB,WAAW,CAAC,KAC5D+zF,IAAI,CAACvxE,QAAQ,IAAI,IAAI,IAAI,IAAIxlC,IAAI,CAAC+2G,IAAI,CAACvxE,QAAQ,CAAC,IAAIxiB,WAAW,CAAC,EAAE;cACnE4zF,mBAAmB,GAAG,IAAI;cAC1B,OAAO,KAAK;YAChB;UACJ,CAAC,CAAC;UAEF,IAAIA,mBAAmB,EACnB,OAAO,KAAK;QACpB,CAAC,CAAC;QAEF,IAAIA,mBAAmB,EACnB,OAAO,KAAK;MACpB;IACJ,CAAC,CAAC;IAEF,OAAOA,mBAAmB;EAC9B,CAAC;;EAED;EACAn0H,WAAW,CAAC00H,kBAAkB,GAAG,UAAUhjI,WAAW,EAAE;IACpD,IAAIijI,QAAQ,GAAGjjI,WAAW,CAACszF,gBAAgB;IAC3C,IAAI4vC,oBAAoB,GAAGpB,YAAY,CAAC3rI,MAAM,CAAC,UAAUyJ,CAAC,EAAE;MACxD,IAAIA,CAAC,CAAC22F,YAAY,KAAK,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC;MAC1C,IAAI,CAAC32F,CAAC,CAAC62F,OAAO,EAAE,OAAO,KAAK;MAC5B,IAAI,CAAC,CAAC72F,CAAC,CAAC62F,OAAO,IAAI,CAACwsC,QAAQ,EAAE,OAAO,KAAK;MAE1C,IAAIE,KAAK,GAAGvjI,CAAC,CAAC62F,OAAO,CAACtgG,MAAM,CAAC,UAAU0H,CAAC,EAAE;QACtC,OAAOA,CAAC,CAACrK,EAAE,KAAKyvI,QAAQ;MAC5B,CAAC,CAAC;MAIF,OAAOE,KAAK,CAAC3sI,MAAM,GAAG,CAAC;IAC3B,CAAC,CAAC;IAEF,OAAO0sI,oBAAoB;EAC/B,CAAC;;EAED;EACA50H,WAAW,CAAC80H,YAAY,GAAG,UAAUpjI,WAAW,EAAEhQ,EAAE,EAAE;IAClD,IAAIqzI,SAAS,GAAG/yI,aAAa,CAACykC,aAAa;IAC3C,IAAIuuG,SAAS,GAAGhzI,aAAa,CAAC4qC,aAAa;IAC3C,IAAIqoG,iBAAiB,GAAG,IAAI;IAE5B,IAAI,CAACjzI,aAAa,CAAC0kC,qBAAqB,IAAI,CAAC,CAACh1B,WAAW,CAAChP,QAAQ,IAAI,CAAC,CAACgP,WAAW,CAAChP,QAAQ,CAACoN,SAAS,EAAE;MACpGmlI,iBAAiB,GAAG;QAChBv1G,MAAM,EAAEhuB,WAAW,CAAChP,QAAQ,CAACoN,SAAS;QACtC2vB,yBAAyB,EAAE/tB,WAAW,CAAChP,QAAQ,CAACqN,yBAAyB;QACzEwvB,yBAAyB,EAAE7tB,WAAW,CAAChP,QAAQ,CAACsN;MACpD,CAAC;IACL;IAEA,IAAIsvB,SAAS,GAAI,CAAC,CAAC59B,EAAE,IAAIA,EAAE,CAACm/B,KAAK,KAAK,MAAM,IAAIn/B,EAAE,CAACm/B,KAAK,IAAI,OAAOn/B,EAAE,CAACm/B,KAAK,KAAK,QAAQ,GAAIrH,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACm/B,KAAK,CAAC,GAC5G,CAAC,CAACo0G,iBAAiB,GAAGA,iBAAiB,GACvCD,SAAS,KAAK,MAAM,GAAGx7G,IAAI,CAAC2T,KAAK,CAAC6nG,SAAS,CAAC,GAC5Cx7G,IAAI,CAAC2T,KAAK,CAAC4nG,SAAS,CAAC;IAEzB,IAAI,CAAC,CAACrzI,EAAE,IAAIA,EAAE,CAACm/B,KAAK,KAAK,MAAM,EAC3BvB,SAAS,CAAC41G,YAAY,GAAG,IAAI;IAEjC,OAAO51G,SAAS;EACpB,CAAC;EAEDtf,WAAW,CAACm1H,gBAAgB,GAAG,UAAUzjI,WAAW,EAAE0jI,YAAY,EAAE;IAChE,IAAIC,YAAY,GAAGrzI,aAAa,CAACwkC,YAAY,KAAK,MAAM;IACxD,IAAI+tD,KAAK,GAAGv0E,WAAW,CAAC80H,YAAY,CAACpjI,WAAW,CAAC;IACjD9L,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;MACjD,IAAIA,EAAE,CAACm/B,KAAK,CAACq0G,YAAY,KAAK,IAAI,IAAIxzI,EAAE,CAACg/B,OAAO,IAAI,IAAI,EAAE;QACtD40G,0BAA0B,CAAC5zI,EAAE,EAAE6yF,KAAK,EAAE8gD,YAAY,EAAED,YAAY,CAAC;MACrE;IACJ,CAAC,CAAC;EACN,CAAC;EAGD,SAASE,0BAA0BA,CAAC5zI,EAAE,EAAE6yF,KAAK,EAAE8gD,YAAY,EAAED,YAAY,EAAE;IACvE,IAAIr1G,cAAc,GAAGtZ,UAAU,CAAC/kB,EAAE,CAACs+B,cAAc,CAAC;IAClD,IAAIo1G,YAAY,KAAK,IAAI,IAAI,CAAC1zI,EAAE,CAACm/B,KAAK,EAAE;MACpCn/B,EAAE,CAACm/B,KAAK,GAAG0zD,KAAK;IACpB;IAEA,IAAIjyD,YAAY,GAAG+yG,YAAY,GAAG3zI,EAAE,CAACm+B,KAAK,GAAGn+B,EAAE,CAACm+B,KAAK,GAAG7f,WAAW,CAACqd,YAAY,CAAC37B,EAAE,CAACm/B,KAAK,EAAEn/B,EAAE,CAACm+B,KAAK,CAAC;IACpGn+B,EAAE,CAAC89B,GAAG,GAAGxf,WAAW,CAACqd,YAAY,CAAC37B,EAAE,CAACm/B,KAAK,EAAEn/B,EAAE,CAACm+B,KAAK,GAAGn+B,EAAE,CAAColB,KAAK,CAAC;IAChEplB,EAAE,CAACoO,SAAS,GAAGpO,EAAE,CAACm/B,KAAK,CAACnB,MAAM;IAC9Bh+B,EAAE,CAAC6D,aAAa,GAAGw6B,cAAc,GAAIuC,YAAY,GAAGvC,cAAc,GAAGr+B,EAAE,CAAColB,KAAK,GAAI,CAAC;IAClFplB,EAAE,CAAC++B,YAAY,GAAG6B,YAAY;EAClC;EAEA,SAASizG,0BAA0BA,CAAC7zI,EAAE,EAAE;IACpC,IAAI2zI,YAAY,GAAGrzI,aAAa,CAACwkC,YAAY,KAAK,MAAM;IACxD,IAAIzG,cAAc,GAAGtZ,UAAU,CAAC/kB,EAAE,CAACs+B,cAAc,CAAC;IAElD,IAAIw1G,aAAa,GAAGH,YAAY,GAAG3zI,EAAE,CAACmlB,MAAM,GAAGnlB,EAAE,CAACmlB,MAAM,GAAGnlB,EAAE,CAAC89B,GAAG;IAEjE99B,EAAE,CAAC6D,aAAa,GAAGw6B,cAAc,GAAIy1G,aAAa,GAAGz1G,cAAc,GAAI,CAAC;IAExE,IAAIr+B,EAAE,CAAColB,KAAK,IAAI,CAAC,EAAE;MACfplB,EAAE,CAAC++B,YAAY,GAAGt+B,aAAa,CAAC6uB,SAAS,CAACwkH,aAAa,GAAG9zI,EAAE,CAAColB,KAAK,EAAE,CAAC,CAAC;IAC1E;EACJ;;EAEA;AACR;AACA;AACA;AACA;AACA;EACQ,IAAImvB,OAAO,GAAG5zC,SAAS,CAAC4zC,OAAO;EAC/Bj2B,WAAW,CAACy1H,gBAAgB,GAAG,UAAU/jI,WAAW,EAAEg6H,YAAY,EAAE/2E,KAAK,EAAEygF,YAAY,EAAE;IACrF;IACA;;IAEA,IAAI3K,kBAAkB,GAAG,CAAC,CAAC/4H,WAAW,IAAIA,WAAW,CAACu0D,gBAAgB,KAAK,IAAI;IAC/E,IAAIykE,oBAAoB,GAAG,CAAC,CAACh5H,WAAW,IAAIA,WAAW,CAACi5H,kBAAkB,KAAK,IAAI;IAEnF,IAAIF,kBAAkB,IAAIC,oBAAoB,EAAE;MAC5C1qH,WAAW,CAACkjB,QAAQ,CAACxxB,WAAW,EAAEg6H,YAAY,EAAE,IAAI,CAAC;MACrDvpI,aAAa,CAAC65E,gBAAgB,CAACtqE,WAAW,EAAEijD,KAAK,CAAC;MAClD;IACJ;IAEA,IAAIq/E,aAAa,GAAGtiI,WAAW,CAAChP,QAAQ,CAACy+B,SAAS;IAClD,IAAIhJ,aAAa,GAAG,EAAE;IACtB,IAAIu9G,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC;;IAE1B11H,WAAW,CAACm1H,gBAAgB,CAACzjI,WAAW,EAAE0jI,YAAY,CAAC;IAEvDxvI,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;MACjD,IAAIA,EAAE,CAACg/B,OAAO,EAAE;QACZh/B,EAAE,CAAC2gC,KAAK,GAAG,EAAE;QACb3gC,EAAE,CAACi9B,YAAY,GAAG,CAAC;MACvB;MAEA,IAAIj9B,EAAE,CAACi0I,eAAe,IAAIj0I,EAAE,CAACg/B,OAAO,EAAE;QAClC96B,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC+rB,aAAa,EAAE,UAAUnxB,EAAE,EAAEspI,QAAQ,EAAE;UACtD,IAAIA,QAAQ,CAAC1wI,EAAE,KAAKxD,EAAE,CAACi0I,eAAe,EAAE;YACpCC,QAAQ,CAAC9uH,KAAK,GAAGL,UAAU,CAACmvH,QAAQ,CAAC9uH,KAAK,CAAC,GAAGL,UAAU,CAAC/kB,EAAE,CAAColB,KAAK,CAAC;YAClEqR,aAAa,CAAChwB,IAAI,CAACH,GAAG,CAAC;YACvB0tI,eAAe,CAACh0I,EAAE,CAACm0I,sBAAsB,CAAC,GAAGn0I,EAAE;YAC/C,OAAO,KAAK;UAChB;QACJ,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;IAEFkE,CAAC,CAACmC,IAAI,CAACyrI,YAAY,EAAE,UAAUxrI,GAAG,EAAEtG,EAAE,EAAE;MACpCA,EAAE,CAACo0I,gBAAgB,GAAG,EAAE;IAC5B,CAAC,CAAC;;IAEF;IACA;IACA;IACA,IAAIlB,oBAAoB,GAAG50H,WAAW,CAAC00H,kBAAkB,CAAChjI,WAAW,CAAC;IAEtE9L,CAAC,CAACmC,IAAI,CAACkrD,OAAO,CAAC96B,aAAa,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,UAAU7hB,CAAC,EAAE23D,CAAC,EAAE;MACrDv8D,WAAW,CAAC+rB,aAAa,CAACrsB,MAAM,CAAC68D,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,IAAI1tB,WAAW,GAAG,IAAIhjB,IAAI,CAAC,CAAC;;IAG5B;IACAvd,WAAW,CAACkjB,QAAQ,CAACxxB,WAAW,EAAEg6H,YAAY,EAAE,IAAI,CAAC;IACrD,IAAI19G,KAAK,GAAGtc,WAAW,CAACm7H,SAAS;IACjC,IAAIkJ,cAAc,GAAG,EAAE;IACvBnwI,CAAC,CAACmC,IAAI,CAACkrD,OAAO,CAAC2hF,oBAAoB,EAAE,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC,EAAE,UAAU5sI,GAAG,EAAEssI,IAAI,EAAE;MAClF,IAAI,CAACA,IAAI,CAACtxE,MAAM,IAAI,IAAI,IAAI,IAAIzlC,IAAI,CAAC+2G,IAAI,CAACtxE,MAAM,CAAC,IAAIziB,WAAW,MAC3D+zF,IAAI,CAACvxE,QAAQ,IAAI,IAAI,IAAI,IAAIxlC,IAAI,CAAC+2G,IAAI,CAACvxE,QAAQ,CAAC,IAAIxiB,WAAW,CAAC,KAAK+zF,IAAI,CAACC,QAAQ,CAAC,CAAC,CAAC,CAACrnD,SAAS,KAAKj3C,OAAO,IAAKq+F,IAAI,CAACzsC,OAAO,CAAC,CAAC,CAAC,IAAIysC,IAAI,CAACzsC,OAAO,CAAC,CAAC,CAAC,CAAC3a,SAAS,KAAKj3C,OAAQ,CAAC,KAC1K89F,mBAAmB,CAACC,aAAa,EAAEM,IAAI,CAAC/rC,MAAM,CAAC,IAAI+rC,IAAI,CAAChsC,cAAc,KAAK,KAAK,IAAIgsC,IAAI,CAAChsC,cAAc,KAAK,KAAK,CAAC,EAAE;QACrH,IAAI/+E,MAAM,GAAGysH,sBAAsB,CAAC1B,IAAI,EAAEtmH,KAAK,EAAEtc,WAAW,CAAC+rB,aAAa,CAAC;QAC3E,IAAIlU,MAAM,CAACgZ,QAAQ,EACfwzG,cAAc,CAAC5tI,IAAI,CAACohB,MAAM,CAAC;MACnC;IACJ,CAAC,CAAC;IAEF,IAAIq4E,OAAO,GAAG,EAAE;IAChBh8F,CAAC,CAACmC,IAAI,CAACguI,cAAc,EAAE,UAAU/tI,GAAG,EAAEtG,EAAE,EAAE;MACtC,IAAIu0I,YAAY,GAAG,IAAI;MACvBrwI,CAAC,CAACmC,IAAI,CAAC65F,OAAO,EAAE,UAAUs0C,IAAI,EAAEz+H,CAAC,EAAE;QAC/B,IAAIA,CAAC,CAAC4wF,cAAc,KAAK3mG,EAAE,CAAC4yI,IAAI,CAACjsC,cAAc,EAAE;UAC7C5wF,CAAC,CAAC8qB,QAAQ,IAAI7gC,EAAE,CAAC6gC,QAAQ;UACzB0zG,YAAY,GAAG,KAAK;UACpB,OAAO,KAAK;QAChB;MACJ,CAAC,CAAC;MACF,IAAIA,YAAY,EAAE;QACdr0C,OAAO,CAACz5F,IAAI,CAAC;UACTkgG,cAAc,EAAE3mG,EAAE,CAAC4yI,IAAI,CAACjsC,cAAc;UACtC9lE,QAAQ,EAAE7gC,EAAE,CAAC6gC;QACjB,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;;IAEF;IACA;IACA38B,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;MACjD,IAAIgQ,WAAW,CAAChP,QAAQ,IAAIgP,WAAW,CAAChP,QAAQ,CAACi7B,QAAQ,IAAIjsB,WAAW,CAAChP,QAAQ,CAACi7B,QAAQ,GAAG,CAAC,IAC1F37B,aAAa,CAAC8kC,wCAAwC,KAAK,IAAI,EACjE;QACE,IAAIqvG,gBAAgB,GAAGzkI,WAAW,CAAChP,QAAQ,CAACi7B,QAAQ;QAEpD,IAAI22G,IAAI,GAAG;UACP3rC,gBAAgB,EAAE,YAAY;UAC9BpiF,MAAM,EAAE4vH;QACZ,CAAC;QAED,IAAI5sH,MAAM,GAAG6sH,qBAAqB,CAAC9B,IAAI,EAAE5yI,EAAE,EAAE,IAAI,CAAC;QAClD,IAAI6gC,QAAQ,GAAG;UACX8zG,aAAa,EAAE9sH,MAAM,CAAC8sH,aAAa;UACnC9zG,QAAQ,EAAE+xG,IAAI;UACdgC,aAAa,EAAE/sH,MAAM,CAAC+sH,aAAa;UACnC33G,YAAY,EAAEpV,MAAM,CAACgZ,QAAQ;UAC7Bg0G,eAAe,EAAEhtH,MAAM,CAACgtH,eAAe;UACvCluC,cAAc,EAAE;QACpB,CAAC;QACD3mG,EAAE,CAAC2gC,KAAK,CAACl6B,IAAI,CAACo6B,QAAQ,CAAC;MAC3B;MACA,IAAIi0G,eAAe,GAAG,KAAK;MAC3B,IAAIC,YAAY,GAAG,KAAK;MACxB,IAAIC,WAAW,GAAG,KAAK;MACvB,IAAIhlI,WAAW,CAAChP,QAAQ,CAACu6C,eAAe,EAAE;QACtCr3C,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAChP,QAAQ,CAACu6C,eAAe,EAAE,UAAU05F,IAAI,EAAEC,WAAW,EAAE;UACtE,IAAKl1I,EAAE,CAACyc,SAAS,KAAKy4H,WAAW,CAACz4H,SAAS,KAClCy4H,WAAW,CAAC5xI,IAAI,KAAK,QAAQ,IACzB4xI,WAAW,CAAC5xI,IAAI,KAAK,gBAAgB,IAAI4xI,WAAW,CAACC,QAAQ,IAAIn1I,EAAE,CAAColB,KAAK,IAAI8vH,WAAW,CAACE,QAAQ,IAAIp1I,EAAE,CAAColB,KAAM,CAAC,KACtH4vH,WAAW,KAAK,IAAI,IAAIE,WAAW,CAACG,KAAK,KAAK,KAAK,IAAMN,YAAY,KAAK,IAAI,IAAIG,WAAW,CAACG,KAAK,KAAK,IAAK,IAAIP,eAAe,KAAK,KAAK,CAAC,EAC/I;YAEEA,eAAe,GAAG,IAAI;YAEtB,IAAII,WAAW,CAACG,KAAK,EAAE;cACnBN,YAAY,GAAG,IAAI;YACvB,CAAC,MAAM;cACHC,WAAW,GAAG,IAAI;YACtB;YAEA,IAAIpC,IAAI,GAAG;cACP3rC,gBAAgB,EAAEiuC,WAAW,CAACI,gBAAgB;cAC9CzwH,MAAM,EAAEqwH,WAAW,CAAC/vH;YACxB,CAAC;YAED,IAAI0C,MAAM,GAAG6sH,qBAAqB,CAAC9B,IAAI,EAAE5yI,EAAE,EAAE,IAAI,CAAC;YAClD,IAAI6gC,QAAQ,GAAG;cACX8zG,aAAa,EAAE9sH,MAAM,CAAC8sH,aAAa;cACnC9zG,QAAQ,EAAE+xG,IAAI;cACdgC,aAAa,EAAE/sH,MAAM,CAAC+sH,aAAa;cACnC33G,YAAY,EAAEpV,MAAM,CAACgZ,QAAQ;cAC7Bg0G,eAAe,EAAEhtH,MAAM,CAACgtH,eAAe;cACvCluC,cAAc,EAAE;YACpB,CAAC;YACD3mG,EAAE,CAAC2gC,KAAK,CAACl6B,IAAI,CAACo6B,QAAQ,CAAC;UAC3B;QACJ,CAAC,CAAC;MACN;MACA,IAAI7gC,EAAE,CAACy/B,SAAS,IAAIq1G,eAAe,KAAK,KAAK,EAAE;QAC3C5wI,CAAC,CAACmC,IAAI,CAACrG,EAAE,CAACy/B,SAAS,EAAE,UAAU81G,KAAK,EAAEC,MAAM,EAAE;UAC1C,IAAKA,MAAM,CAAC9mI,IAAI,KAAK,QAAQ,IACpB8mI,MAAM,CAAC9mI,IAAI,KAAK,gBAAgB,IAAI8mI,MAAM,CAACxuC,QAAQ,IAAIhnG,EAAE,CAAColB,KAAK,IAAIowH,MAAM,CAACjmH,QAAQ,IAAIvvB,EAAE,CAAColB,KAAM,EAAG;YAEvG,IAAIwtH,IAAI,GAAG;cACP3rC,gBAAgB,EAAEuuC,MAAM,CAACvuC,gBAAgB;cACzCpiF,MAAM,EAAE2wH,MAAM,CAAC3wH;YACnB,CAAC;YAED,IAAIgD,MAAM,GAAG6sH,qBAAqB,CAAC9B,IAAI,EAAE5yI,EAAE,EAAE,IAAI,CAAC;YAClD,IAAI6gC,QAAQ,GAAG;cACX8zG,aAAa,EAAE9sH,MAAM,CAAC8sH,aAAa;cACnC9zG,QAAQ,EAAE+xG,IAAI;cACdgC,aAAa,EAAE/sH,MAAM,CAAC+sH,aAAa;cACnC33G,YAAY,EAAEpV,MAAM,CAACgZ,QAAQ;cAC7Bg0G,eAAe,EAAEhtH,MAAM,CAACgtH,eAAe;cACvCluC,cAAc,EAAE;YACpB,CAAC;YACD3mG,EAAE,CAAC2gC,KAAK,CAACl6B,IAAI,CAACo6B,QAAQ,CAAC;UAC3B;QACJ,CAAC,CAAC;MACN;IAGJ,CAAC,CAAC;;IAEF;IACA38B,CAAC,CAACmC,IAAI,CAACkrD,OAAO,CAAC2hF,oBAAoB,EAAE,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC,EAAE,UAAUP,MAAM,EAAEC,IAAI,EAAE;MACrF,IAAIP,mBAAmB,CAACC,aAAa,EAAEM,IAAI,CAAC/rC,MAAM,CAAC,IAAI+rC,IAAI,CAAChsC,cAAc,KAAK,KAAK,IAAIgsC,IAAI,CAAChsC,cAAc,KAAK,KAAK,EAAE;QACnH,IAAI6uC,eAAe,GAAG,CAAC;QACvB,IAAIC,cAAc,GAAG,EAAE;QAEvBxxI,CAAC,CAACmC,IAAI,CAACusI,IAAI,CAACC,QAAQ,EAAE,UAAUC,IAAI,EAAEC,QAAQ,EAAE;UAC5C7uI,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;YACjD,IAAIA,EAAE,CAACg/B,OAAO,IACT,CAAEh/B,EAAE,CAACyc,SAAS,KAAKs2H,QAAQ,CAACvnD,SAAS,IAAIunD,QAAQ,CAACvnD,SAAS,IAAI,CAACunD,QAAQ,CAACr9E,QAAQ,IAAMq9E,QAAQ,CAACvnD,SAAS,IAAIunD,QAAQ,CAACr9E,QAAQ,IAAI11D,EAAE,CAAC4+B,QAAQ,KAAKm0G,QAAQ,CAACvnD,SAAU,IAAI,CAACunD,QAAQ,CAACvnD,SAAS,IAAIunD,QAAQ,CAACvnD,SAAS,KAAKj3C,OAAO,MAAOv0C,EAAE,CAAC2+B,UAAU,KAAKo0G,QAAQ,CAAC5lD,UAAU,IAAI4lD,QAAQ,CAAC5lD,UAAU,IAAK,CAAC4lD,QAAQ,CAAC5lD,UAAU,CAAC,KACtTntF,EAAE,CAAC0+B,OAAO,KAAKq0G,QAAQ,CAAC7kD,OAAO,IAAI6kD,QAAQ,CAAC7kD,OAAO,IAAK,CAAC6kD,QAAQ,CAAC7kD,OAAO,CAAC,KAC3E8jD,QAAQ,CAAChyI,EAAE,CAACy+B,IAAI,EAAEs0G,QAAQ,CAACrsC,OAAO,CAAC,IAAI,CAACqsC,QAAQ,CAACrsC,OAAO,CAAE,KAC9DksC,IAAI,CAACtxE,MAAM,IAAI,IAAI,IAAI,IAAIzlC,IAAI,CAAC+2G,IAAI,CAACtxE,MAAM,CAAC,IAAIziB,WAAW,CAAC,KAC5D+zF,IAAI,CAACvxE,QAAQ,IAAI,IAAI,IAAI,IAAIxlC,IAAI,CAAC+2G,IAAI,CAACvxE,QAAQ,CAAC,IAAIxiB,WAAW,CAAC,EAAE;cACnE42F,eAAe,IAAIz1I,EAAE,CAAColB,KAAK;cAC3BswH,cAAc,CAACjvI,IAAI,CAACzG,EAAE,CAACyc,SAAS,CAAC;YACrC;UACJ,CAAC,CAAC;QACN,CAAC,CAAC;QAGF,IAAIg5H,eAAe,IAAI7C,IAAI,CAAC9rC,QAAQ,IAAI8rC,IAAI,CAAC9rC,QAAQ,IAAI,IAAI,EAAE;UAE3D5iG,CAAC,CAACmC,IAAI,CAACusI,IAAI,CAACzsC,OAAO,EAAE,UAAUwvC,aAAa,EAAEC,UAAU,EAAE;YACtD1xI,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC+rB,aAAa,EAAE,UAAU85G,aAAa,EAAEC,UAAU,EAAE;cACnE,IAAIA,UAAU,CAAC92G,OAAO,KACjB4zG,IAAI,CAACtxE,MAAM,IAAI,IAAI,IAAI,IAAIzlC,IAAI,CAAC+2G,IAAI,CAACtxE,MAAM,CAAC,IAAIziB,WAAW,CAAC,KAC5D+zF,IAAI,CAACvxE,QAAQ,IAAI,IAAI,IAAI,IAAIxlC,IAAI,CAAC+2G,IAAI,CAACvxE,QAAQ,CAAC,IAAIxiB,WAAW,CAAC,IAChE,CAAEi3F,UAAU,CAACr5H,SAAS,KAAKm5H,UAAU,CAACpqD,SAAS,IAAIoqD,UAAU,CAACpqD,SAAS,IAAI,CAACoqD,UAAU,CAAClgF,QAAQ,IAAMkgF,UAAU,CAACpqD,SAAS,IAAIoqD,UAAU,CAAClgF,QAAQ,IAAIogF,UAAU,CAACl3G,QAAQ,KAAKg3G,UAAU,CAACpqD,SAAU,IAAI,CAACoqD,UAAU,CAACpqD,SAAS,MACrNsqD,UAAU,CAACn3G,UAAU,KAAKi3G,UAAU,CAACzoD,UAAU,IAAIyoD,UAAU,CAACzoD,UAAU,IAAK,CAACyoD,UAAU,CAACzoD,UAAU,CAAC,KACpG2oD,UAAU,CAACp3G,OAAO,KAAKk3G,UAAU,CAAC1nD,OAAO,IAAI0nD,UAAU,CAAC1nD,OAAO,IAAK,CAAC0nD,UAAU,CAAC1nD,OAAO,CAAC,KACzF8jD,QAAQ,CAAC8D,UAAU,CAACr3G,IAAI,EAAEm3G,UAAU,CAAClvC,OAAO,CAAC,IAAI,CAACkvC,UAAU,CAAClvC,OAAO,CAAE,KAC1EksC,IAAI,CAAClkI,IAAI,KAAK,QAAQ,IAClBkkI,IAAI,CAAClkI,IAAI,KAAK,gBAAgB,IAAIkkI,IAAI,CAAC5rC,QAAQ,IAAI8uC,UAAU,CAAC1wH,KAAK,IAAIwtH,IAAI,CAACrjH,QAAQ,IAAIumH,UAAU,CAAC1wH,KAAM,CAAC,IAAI0wH,UAAU,CAAC92G,OAAO,KACpI,CAACmzG,WAAW,CAAC2D,UAAU,CAACn1G,KAAK,EAAEiyG,IAAI,CAACjsC,cAAc,CAAC,IAAKmvC,UAAU,CAACjB,eAAe,GAAG,CAAC,IAAIiB,UAAU,CAACjB,eAAe,KAAKiB,UAAU,CAAC1wH,KAAM,CAAC,EAAE;gBAC9IwtH,IAAI,CAACwB,gBAAgB,CAAC3tI,IAAI,CAAC;kBACvB+kF,SAAS,EAAEsqD,UAAU,CAACr5H,SAAS;kBAC/ByhB,KAAK,EAAE43G,UAAU,CAAC33G;gBACtB,CAAC,CAAC;cACN;YACJ,CAAC,CAAC;UACN,CAAC,CAAC;UAEF,IAAIy0G,IAAI,CAACzsC,OAAO,CAAC3/F,MAAM,KAAK,CAAC,EAAE;YAC3BtC,CAAC,CAACmC,IAAI,CAACusI,IAAI,CAACC,QAAQ,EAAE,UAAUC,IAAI,EAAEC,QAAQ,EAAE;cAE5C7uI,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC+rB,aAAa,EAAE,UAAU85G,aAAa,EAAEC,UAAU,EAAE;gBACnE,IAAIA,UAAU,CAAC92G,OAAO,KACjB4zG,IAAI,CAACtxE,MAAM,IAAI,IAAI,IAAI,IAAIzlC,IAAI,CAAC+2G,IAAI,CAACtxE,MAAM,CAAC,IAAIziB,WAAW,CAAC,KAC5D+zF,IAAI,CAACvxE,QAAQ,IAAI,IAAI,IAAI,IAAIxlC,IAAI,CAAC+2G,IAAI,CAACvxE,QAAQ,CAAC,IAAIxiB,WAAW,CAAC,IAEhE,CAAEi3F,UAAU,CAACr5H,SAAS,KAAKs2H,QAAQ,CAACvnD,SAAS,IAAIunD,QAAQ,CAACvnD,SAAS,IAAI,CAACunD,QAAQ,CAACr9E,QAAQ,IAAMogF,UAAU,CAACl3G,QAAQ,KAAKm0G,QAAQ,CAACvnD,SAAS,IAAIunD,QAAQ,CAACvnD,SAAS,IAAIunD,QAAQ,CAACr9E,QAAS,IAAI,CAACq9E,QAAQ,CAACvnD,SAAS,IAAIunD,QAAQ,CAACvnD,SAAS,KAAKj3C,OAAO,MACzOuhG,UAAU,CAACn3G,UAAU,KAAKo0G,QAAQ,CAAC5lD,UAAU,IAAI4lD,QAAQ,CAAC5lD,UAAU,IAAK,CAAC4lD,QAAQ,CAAC5lD,UAAU,CAAC,KAC9F2oD,UAAU,CAACp3G,OAAO,KAAKq0G,QAAQ,CAAC7kD,OAAO,IAAI6kD,QAAQ,CAAC7kD,OAAO,IAAK,CAAC6kD,QAAQ,CAAC7kD,OAAO,CAAC,KACnF8jD,QAAQ,CAAC8D,UAAU,CAACr3G,IAAI,EAAEs0G,QAAQ,CAACrsC,OAAO,CAAC,IAAI,CAACqsC,QAAQ,CAACrsC,OAAO,CAAE,KACtEksC,IAAI,CAAClkI,IAAI,KAAK,QAAQ,IAClBkkI,IAAI,CAAClkI,IAAI,KAAK,gBAAgB,IAAIqkI,QAAQ,CAAC/rC,QAAQ,IAAI8uC,UAAU,CAAC1wH,KAAK,IAAI2tH,QAAQ,CAACxjH,QAAQ,IAAIumH,UAAU,CAAC1wH,KAAM,CAAC,IAAI0wH,UAAU,CAAC92G,OAAO,KAC5I,CAACmzG,WAAW,CAAC2D,UAAU,CAACn1G,KAAK,EAAEiyG,IAAI,CAACjsC,cAAc,CAAC,IAAKmvC,UAAU,CAACjB,eAAe,GAAG,CAAC,IAAIiB,UAAU,CAACjB,eAAe,KAAKiB,UAAU,CAAC1wH,KAAM,CAAC,EAAE;kBAE9I,IAAIwtH,IAAI,CAAClkI,IAAI,KAAK,gBAAgB,IAAIqkI,QAAQ,CAAC/rC,QAAQ,IAAI8uC,UAAU,CAAC1wH,KAAK,IAAI2tH,QAAQ,CAACxjH,QAAQ,IAAIumH,UAAU,CAAC1wH,KAAK,EAAE;oBAClHwtH,IAAI,CAAC/tH,MAAM,GAAGkuH,QAAQ,CAACluH,MAAM;oBAC7B+tH,IAAI,CAAC3rC,gBAAgB,GAAG8rC,QAAQ,CAAC9rC,gBAAgB;kBACrD;kBAEA2rC,IAAI,CAACwB,gBAAgB,CAAC3tI,IAAI,CAAC;oBACvB+kF,SAAS,EAAEsqD,UAAU,CAACr5H,SAAS;oBAC/ByhB,KAAK,EAAE43G,UAAU,CAAC33G;kBACtB,CAAC,CAAC;gBACN;cACJ,CAAC,CAAC;YACN,CAAC,CAAC;UAEN;UAEA,IAAI43G,aAAa,GAAG,CAAC;UAErB,IAAIC,wBAAwB,CAACpD,IAAI,CAACjsC,cAAc,CAAC,KAAK,IAAI,EAAE;YACxDovC,aAAa,GAAGnD,IAAI,CAACxsC,OAAO,KAAK,KAAK,GAAGwsC,IAAI,CAAC7rC,QAAQ,GAAG9sE,IAAI,CAACo+B,KAAK,CAACo9E,eAAe,GAAG7C,IAAI,CAAC9rC,QAAQ,CAAC,GAAG8rC,IAAI,CAAC7rC,QAAQ;UACxH,CAAC,MAAM;YACHgvC,aAAa,GAAGnD,IAAI,CAAC7rC,QAAQ,GAAG9sE,IAAI,CAACo+B,KAAK,CAACo9E,eAAe,IAAI7C,IAAI,CAAC9rC,QAAQ,GAAG8rC,IAAI,CAAC7rC,QAAQ,CAAC,CAAC;YAC7FgvC,aAAa,GAAIA,aAAa,GAAGnD,IAAI,CAAC7rC,QAAQ,IAAI6rC,IAAI,CAACxsC,OAAO,KAAK,IAAI,GAAIwsC,IAAI,CAAC7rC,QAAQ,GAAGgvC,aAAa;UAC5G;UAMA7xI,CAAC,CAACmC,IAAI,CAACkrD,OAAO,CAACqhF,IAAI,CAACwB,gBAAgB,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,UAAUuB,aAAa,EAAEM,eAAe,EAAE;YAC/F/xI,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC+rB,aAAa,EAAE,UAAU85G,aAAa,EAAEC,UAAU,EAAE;cACnE,IAAIA,UAAU,CAAC92G,OAAO,IAClB82G,UAAU,CAACr5H,SAAS,KAAKw5H,eAAe,CAACzqD,SAAS,KACjDuqD,aAAa,GAAG,CAAC,IAAK,CAACA,aAAa,IAAIA,aAAa,KAAK,CAAE,CAAC,EAAE;gBAEhE,IAAI5D,WAAW,CAAC2D,UAAU,CAACn1G,KAAK,EAAEiyG,IAAI,CAACjsC,cAAc,CAAC,EAAE;kBACpD,IAAIuvC,SAAS,GAAGC,qCAAqC,CAACnmI,WAAW,CAAC+rB,aAAa,EAAE+5G,UAAU,CAACr5H,SAAS,EAAEm2H,IAAI,CAACjsC,cAAc,CAAC;kBAC3H,IAAIuvC,SAAS,IAAI,IAAI,EAAE;oBACnB,IAAIvgI,KAAK,GAAGogI,aAAa,GAAGG,SAAS,CAAC9wH,KAAK,GAAG8wH,SAAS,CAAC9wH,KAAK,GAAG2wH,aAAa,GAAGA,aAAa,GAAG,IAAI;oBACpG,IAAIluH,MAAM,GAAG6sH,qBAAqB,CAAC9B,IAAI,EAAEsD,SAAS,EAAEvgI,KAAK,CAAC;oBAC1D,IAAIkrB,QAAQ,GAAG;sBACX8zG,aAAa,EAAE9sH,MAAM,CAAC8sH,aAAa;sBACnC9zG,QAAQ,EAAE+xG,IAAI;sBACdgC,aAAa,EAAE/sH,MAAM,CAAC+sH,aAAa;sBACnC33G,YAAY,EAAEpV,MAAM,CAACgZ,QAAQ;sBAC7Bg0G,eAAe,EAAEhtH,MAAM,CAACgtH,eAAe;sBACvCluC,cAAc,EAAEisC,IAAI,CAACjsC;oBACzB,CAAC;oBACDuvC,SAAS,CAACv1G,KAAK,CAACl6B,IAAI,CAACo6B,QAAQ,CAAC;oBAC9Bk1G,aAAa,IAAIpgI,KAAK;oBACtB,OAAO,KAAK;kBAChB,CAAC,MAAM;oBACHzR,CAAC,CAACmC,IAAI,CAACyvI,UAAU,CAACn1G,KAAK,EAAE,UAAUy1G,IAAI,EAAExmI,CAAC,EAAE;sBACxC,IAAIA,CAAC,CAAC+2F,cAAc,KAAKisC,IAAI,CAACjsC,cAAc,EAAE;wBAE1C,IAAIhxF,KAAK,GAAGogI,aAAa,GAAGnmI,CAAC,CAACilI,eAAe,GAAGiB,UAAU,CAAC1wH,KAAK,GAAG0wH,UAAU,CAAC1wH,KAAK,GAAG2wH,aAAa,GAAGnmI,CAAC,CAACilI,eAAe;wBACvH,IAAIhtH,MAAM,GAAG6sH,qBAAqB,CAAC9B,IAAI,EAAEkD,UAAU,EAAEngI,KAAK,CAAC;wBAC3D/F,CAAC,CAACilI,eAAe,GAAGhtH,MAAM,CAACgtH,eAAe;wBAC1CjlI,CAAC,CAACglI,aAAa,GAAG/sH,MAAM,CAAC+sH,aAAa;wBACtCmB,aAAa,IAAIpgI,KAAK;wBACtB,OAAO,KAAK;sBAChB;oBACJ,CAAC,CAAC;kBACN;gBACJ,CAAC,MAAM;kBACH,IAAIA,KAAK,GAAGogI,aAAa,GAAGD,UAAU,CAAC1wH,KAAK,GAAG0wH,UAAU,CAAC1wH,KAAK,GAAG2wH,aAAa,GAAGA,aAAa,GAAG,IAAI;kBACtG,IAAIluH,MAAM,GAAG6sH,qBAAqB,CAAC9B,IAAI,EAAEkD,UAAU,EAAEngI,KAAK,CAAC;kBAC3D,IAAIkrB,QAAQ,GAAG;oBACX8zG,aAAa,EAAE9sH,MAAM,CAAC8sH,aAAa;oBACnC9zG,QAAQ,EAAE+xG,IAAI;oBACdgC,aAAa,EAAE/sH,MAAM,CAAC+sH,aAAa;oBACnC33G,YAAY,EAAEpV,MAAM,CAACgZ,QAAQ;oBAC7Bg0G,eAAe,EAAEhtH,MAAM,CAACgtH,eAAe;oBACvCluC,cAAc,EAAEisC,IAAI,CAACjsC;kBACzB,CAAC;kBACDmvC,UAAU,CAACn1G,KAAK,CAACl6B,IAAI,CAACo6B,QAAQ,CAAC;kBAC/Bk1G,aAAa,IAAIpgI,KAAK;kBACtB,OAAO,KAAK;gBAChB;cACJ;YACJ,CAAC,CAAC;UACN,CAAC,CAAC;QACN;MACJ;IACJ,CAAC,CAAC;;IAEF;IACA,IAAI0gI,UAAU,GAAG,EAAE;IACnBnyI,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;MACjD,IAAIs2I,oBAAoB,GAAGt2I,EAAE,CAACg/B,OAAO,GAAGh/B,EAAE,CAAColB,KAAK,GAAG,CAAC;MAEpD,IAAIub,KAAK,GAAG4wB,OAAO,CAACvxD,EAAE,CAAC2gC,KAAK,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC;MACvE,KAAK,IAAI/rB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG+rB,KAAK,CAACn6B,MAAM,IAAI8vI,oBAAoB,GAAG,CAAC,EAAE1hI,CAAC,EAAE,EAAE;QAC/D,IAAI2hI,YAAY,GAAG51G,KAAK,CAAC/rB,CAAC,CAAC;QAE3B,IAAI2hI,YAAY,IAAIv2I,EAAE,CAACg/B,OAAO,EAAE;UAC5B,IAAIu3G,YAAY,CAAC1B,eAAe,IAAI0B,YAAY,CAAC1B,eAAe,GAAG70I,EAAE,CAAColB,KAAK,EAAE;YACzE,IAAIoxH,OAAO,GAAG,CAAC,CAAC;YAChBt2I,OAAO,CAAC+F,IAAI,CAACjG,EAAE,EAAEw2I,OAAO,CAAC;YACzBx2I,EAAE,CAAColB,KAAK,IAAImxH,YAAY,CAAC1B,eAAe;YACxC2B,OAAO,CAACpxH,KAAK,GAAGmxH,YAAY,CAAC1B,eAAe;YAC5C2B,OAAO,CAAChzI,EAAE,GAAGumB,KAAK,CAACuE,OAAO,CAAC,CAAC;YAE5BkoH,OAAO,CAACv5G,YAAY,GAAGx8B,aAAa,CAAC6uB,SAAS,CAACinH,YAAY,CAACt5G,YAAY,EAAE,CAAC,CAAC;YAE5Eu5G,OAAO,CAACvC,eAAe,GAAGj0I,EAAE,CAACwD,EAAE;YAC/BgzI,OAAO,CAACrC,sBAAsB,GAAGn0I,EAAE,CAACwD,EAAE,GAAG,IAAI,GAAG+yI,YAAY,CAAC5vC,cAAc;YAC3E6vC,OAAO,CAACrxH,MAAM,GAAG,CAACqxH,OAAO,CAACp3G,SAAS,GAAGm3G,YAAY,CAACt5G,YAAY,IAAIu5G,OAAO,CAACpxH,KAAK;YAChFplB,EAAE,CAACmlB,MAAM,GAAGnlB,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAAColB,KAAK;YACnCplB,EAAE,CAAC89B,GAAG,GAAGxf,WAAW,CAACqd,YAAY,CAAC66G,OAAO,CAACr3G,KAAK,EAAEn/B,EAAE,CAACmlB,MAAM,CAAC;YAC3DqxH,OAAO,CAAC14G,GAAG,GAAGxf,WAAW,CAACqd,YAAY,CAAC66G,OAAO,CAACr3G,KAAK,EAAEq3G,OAAO,CAACrxH,MAAM,CAAC;YACrEmxH,oBAAoB,IAAIC,YAAY,CAAC1B,eAAe;;YAEpD;YACA,IAAI7K,YAAY,EAAE;cACd,IAAI9rG,KAAK,GAAGl+B,EAAE,CAACo/B,SAAS,GAAG9gB,WAAW,CAACqd,YAAY,CAAC37B,EAAE,CAACm/B,KAAK,EAAEn/B,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAACi9B,YAAY,CAAC;cAC7Fj9B,EAAE,CAACm+B,KAAK,GAAGn+B,EAAE,CAACo/B,SAAS;cACvBp/B,EAAE,CAAC++B,YAAY,GAAG/+B,EAAE,CAACo/B,SAAS;cAC9Bp/B,EAAE,CAAC89B,GAAG,GAAGxf,WAAW,CAACqd,YAAY,CAAC37B,EAAE,CAACm/B,KAAK,EAAE,CAACn/B,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAACi9B,YAAY,IAAIj9B,EAAE,CAAColB,KAAK,CAAC;cACxFplB,EAAE,CAACmlB,MAAM,GAAGnlB,EAAE,CAACm+B,KAAK,GAAGn+B,EAAE,CAAColB,KAAK;cAE/B,IAAIie,GAAG,GAAG,CAACmzG,OAAO,CAACp3G,SAAS,GAAGo3G,OAAO,CAACv5G,YAAY,IAAIu5G,OAAO,CAACpxH,KAAK;cACpE,IAAIoxH,OAAO,CAACr4G,KAAK,KAAKq4G,OAAO,CAACv5G,YAAY,EAAE;gBACxCoG,GAAG,GAAG,CAAC;gBACPmzG,OAAO,CAACv5G,YAAY,GAAGx8B,aAAa,CAAC6uB,SAAS,CAACknH,OAAO,CAACp3G,SAAS,EAAE,CAAC,CAAC;cACxE;cACAlB,KAAK,GAAGs4G,OAAO,CAACp3G,SAAS,GAAG9gB,WAAW,CAACqd,YAAY,CAAC66G,OAAO,CAACr3G,KAAK,EAAEkE,GAAG,CAAC;cACxEmzG,OAAO,CAACr4G,KAAK,GAAGq4G,OAAO,CAACp3G,SAAS;cACjCo3G,OAAO,CAACz3G,YAAY,GAAGy3G,OAAO,CAACp3G,SAAS;cACxCo3G,OAAO,CAAC14G,GAAG,GAAGxf,WAAW,CAACqd,YAAY,CAAC66G,OAAO,CAACr3G,KAAK,EAAEkE,GAAG,CAAC;YAC9D;YACAgzG,UAAU,CAAC5vI,IAAI,CAAC+vI,OAAO,CAAC;UAC5B,CAAC,MAAM;YAEHx2I,EAAE,CAACi9B,YAAY,GAAGx8B,aAAa,CAAC6uB,SAAS,CAACinH,YAAY,CAACt5G,YAAY,EAAE,CAAC,CAAC;YAEvEj9B,EAAE,CAACmlB,MAAM,GAAG,CAACnlB,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAACi9B,YAAY,IAAIj9B,EAAE,CAAColB,KAAK;YACvDplB,EAAE,CAAC89B,GAAG,GAAGxf,WAAW,CAACqd,YAAY,CAAC37B,EAAE,CAACm/B,KAAK,EAAEn/B,EAAE,CAACmlB,MAAM,CAAC;YACtDmxH,oBAAoB,GAAG,CAAC;;YAExB;YACA,IAAItM,YAAY,EAAE;cACd,IAAI3mG,GAAG,GAAG,CAACrjC,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAACi9B,YAAY,IAAIj9B,EAAE,CAAColB,KAAK;cACrD,IAAIplB,EAAE,CAACo/B,SAAS,KAAKp/B,EAAE,CAACi9B,YAAY,EAAE;gBAClCoG,GAAG,GAAG,CAAC;gBACPrjC,EAAE,CAACi9B,YAAY,GAAGx8B,aAAa,CAAC6uB,SAAS,CAACtvB,EAAE,CAACo/B,SAAS,EAAE,CAAC,CAAC;cAC9D;cACA;cACAp/B,EAAE,CAACm+B,KAAK,GAAGn+B,EAAE,CAACo/B,SAAS;cACvBp/B,EAAE,CAAC++B,YAAY,GAAG/+B,EAAE,CAACo/B,SAAS;cAC9Bp/B,EAAE,CAAC89B,GAAG,GAAGxf,WAAW,CAACqd,YAAY,CAAC37B,EAAE,CAACm/B,KAAK,EAAEkE,GAAG,CAAC;YACpD;UAGJ;QACJ;MACJ;IACJ,CAAC,CAAC;IAEFn/B,CAAC,CAACmC,IAAI,CAACgwI,UAAU,EAAE,UAAU/vI,GAAG,EAAEtG,EAAE,EAAE;MAClC,IAAI,CAAC,CAACA,EAAE,CAACm0I,sBAAsB,IAAI,CAAC,CAACH,eAAe,CAACh0I,EAAE,CAACm0I,sBAAsB,CAAC,EAAE;QAC7E,IAAIsC,KAAK,GAAGzC,eAAe,CAACh0I,EAAE,CAACm0I,sBAAsB,CAAC;QACtDn0I,EAAE,CAACi8B,QAAQ,GAAGw6G,KAAK,CAACx6G,QAAQ;QAC5Bj8B,EAAE,CAAC02I,kBAAkB,GAAGD,KAAK,CAACC,kBAAkB;MACpD;MACA1mI,WAAW,CAAC+rB,aAAa,CAACt1B,IAAI,CAACzG,EAAE,CAAC;IACtC,CAAC,CAAC;;IAEF;IACA,IAAIgQ,WAAW,CAAChP,QAAQ,IAAIgP,WAAW,CAAChP,QAAQ,CAACi7B,QAAQ,IAAIjsB,WAAW,CAAChP,QAAQ,CAACi7B,QAAQ,GAAG,CAAC,IAC1F37B,aAAa,CAAC8kC,wCAAwC,KAAK,IAAI,EAAE;MAEjElhC,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;QACjD,IAAI22I,kBAAkB,GAAG3mI,WAAW,CAAChP,QAAQ,CAACi7B,QAAQ,GAAG,GAAG;QAC5D,IAAIj8B,EAAE,CAACg/B,OAAO,EAAE;UACZh/B,EAAE,CAACi9B,YAAY,GAAGj9B,EAAE,CAACi9B,YAAY,GAAGx8B,aAAa,CAAC6uB,SAAS,CAAE,CAACtvB,EAAE,CAACm+B,KAAK,GAAGn+B,EAAE,CAACi9B,YAAY,IAAI05G,kBAAkB,EAAG,CAAC,CAAC;UACnH32I,EAAE,CAACmlB,MAAM,GAAG,CAACnlB,EAAE,CAACm+B,KAAK,GAAGn+B,EAAE,CAACi9B,YAAY,IAAIj9B,EAAE,CAAColB,KAAK;UACnDplB,EAAE,CAAC89B,GAAG,GAAGxf,WAAW,CAACqd,YAAY,CAAC37B,EAAE,CAACm/B,KAAK,EAAEn/B,EAAE,CAACmlB,MAAM,CAAC;;UAEtD;UACA,IAAI6kH,YAAY,EAAE;YACd,IAAI3mG,GAAG,GAAG,CAACrjC,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAACi9B,YAAY,IAAIj9B,EAAE,CAAColB,KAAK;YACrD,IAAIplB,EAAE,CAACm+B,KAAK,KAAKn+B,EAAE,CAACi9B,YAAY,EAAE;cAC9BoG,GAAG,GAAG,CAAC;cACPrjC,EAAE,CAACi9B,YAAY,GAAGx8B,aAAa,CAAC6uB,SAAS,CAACtvB,EAAE,CAACo/B,SAAS,EAAE,CAAC,CAAC;YAC9D;YACA;YACAp/B,EAAE,CAACm+B,KAAK,GAAGn+B,EAAE,CAACo/B,SAAS;YACvBp/B,EAAE,CAAC++B,YAAY,GAAG/+B,EAAE,CAACo/B,SAAS;YAC9Bp/B,EAAE,CAAC89B,GAAG,GAAGxf,WAAW,CAACqd,YAAY,CAAC37B,EAAE,CAACm/B,KAAK,EAAEkE,GAAG,CAAC;UACpD;QACJ;MACJ,CAAC,CAAC;IACN;;IAEA;IACAn/B,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;MACjD,IAAIA,EAAE,CAACg/B,OAAO,EAAE;QACZ,IAAIh/B,EAAE,CAAC02I,kBAAkB,KAAK,OAAO,IAAI12I,EAAE,CAACi8B,QAAQ,IAAI,CAAC,EAAE;UACvDj8B,EAAE,CAACi9B,YAAY,GAAGx8B,aAAa,CAAC6uB,SAAS,CAACtvB,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAACi8B,QAAQ,EAAE,CAAC,CAAC;UACxEj8B,EAAE,CAACmlB,MAAM,GAAGnlB,EAAE,CAACi8B,QAAQ,GAAGj8B,EAAE,CAAColB,KAAK;UAClCplB,EAAE,CAAC89B,GAAG,GAAGxf,WAAW,CAACqd,YAAY,CAAC37B,EAAE,CAACm/B,KAAK,EAAEn/B,EAAE,CAACmlB,MAAM,CAAC;UAEtD,IAAInlB,EAAE,CAACm+B,KAAK,KAAK,CAAC,EAAE;YAChB01G,0BAA0B,CAAC7zI,EAAE,CAAC;UAClC;UAEA,IAAIA,EAAE,CAACi9B,YAAY,KAAK,CAAC,EACrBj9B,EAAE,CAACm+B,KAAK,GAAGn+B,EAAE,CAACo/B,SAAS;QAC/B,CAAC,MAAM,IAAIp/B,EAAE,CAAC02I,kBAAkB,KAAK,SAAS,IAAI12I,EAAE,CAACi8B,QAAQ,IAAI,CAAC,EAAE;UAChE,IAAIj8B,EAAE,CAACi8B,QAAQ,GAAG,GAAG,EACjBj8B,EAAE,CAACi8B,QAAQ,GAAG,GAAG;UAErBj8B,EAAE,CAACi9B,YAAY,GAAGx8B,aAAa,CAAC6uB,SAAS,CAACtvB,EAAE,CAACi8B,QAAQ,GAAGj8B,EAAE,CAACo/B,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC;UAC9Ep/B,EAAE,CAACmlB,MAAM,GAAG,CAACnlB,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAACi9B,YAAY,IAAIj9B,EAAE,CAAColB,KAAK;UACvDplB,EAAE,CAAC89B,GAAG,GAAGxf,WAAW,CAACqd,YAAY,CAAC37B,EAAE,CAACm/B,KAAK,EAAEn/B,EAAE,CAACmlB,MAAM,CAAC;UACtD,IAAInlB,EAAE,CAACi9B,YAAY,KAAK,CAAC,EACrBj9B,EAAE,CAACm+B,KAAK,GAAGn+B,EAAE,CAACo/B,SAAS;QAC/B;QAEA,IAAI8pG,IAAI,GAAGlpI,EAAE,CAACm+B,KAAK,GAAG,CAAC,IAAI4qG,kBAAkB,GAAG,CAAC,CAAC,GAAG,CAAC;QACtD,IAAIG,IAAI,GAAG,CAAC,IAAIlpI,EAAE,CAACi8B,QAAQ,IAAI,CAAC,KAAKj8B,EAAE,CAAC02I,kBAAkB,KAAK,SAAS,IAAI12I,EAAE,CAAC02I,kBAAkB,KAAK,OAAO,CAAC,EAAE;UAC5G12I,EAAE,CAACq/B,qBAAqB,GAAGr/B,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAACi9B,YAAY;QAC7D;QACA;QACA;QACA;QACA;QACA;QACA;MACJ;IACJ,CAAC,CAAC;;IAEF;IACA/4B,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;MACjD,IAAIA,EAAE,CAACg/B,OAAO,IAAIh/B,EAAE,CAAC42I,eAAe,EAAE;QAClC,IAAK52I,EAAE,CAACm+B,KAAK,GAAGn+B,EAAE,CAACi9B,YAAY,GAAI,CAAC,EAAE;UAClCj9B,EAAE,CAAColB,KAAK,GAAG3kB,aAAa,CAAC6uB,SAAS,CAACtvB,EAAE,CAAC42I,eAAe,IAAI52I,EAAE,CAACm+B,KAAK,GAAGn+B,EAAE,CAACi9B,YAAY,CAAC,EAAE,CAAC,CAAC;QAC5F,CAAC,MAAM;UACHj9B,EAAE,CAAColB,KAAK,GAAG,CAAC;UACZ7kB,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,4DAA4D,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;QACnI;QAEA5B,EAAE,CAACmlB,MAAM,GAAG1kB,aAAa,CAAC6uB,SAAS,CAAC,CAACtvB,EAAE,CAACm+B,KAAK,GAAGn+B,EAAE,CAACi9B,YAAY,IAAIj9B,EAAE,CAAColB,KAAK,EAAE,CAAC,CAAC;QAC/EplB,EAAE,CAAC89B,GAAG,GAAGxf,WAAW,CAACqd,YAAY,CAAC37B,EAAE,CAACm/B,KAAK,EAAEn/B,EAAE,CAACmlB,MAAM,CAAC;MAC1D;IACJ,CAAC,CAAC;IAEF7G,WAAW,CAACkjB,QAAQ,CAACxxB,WAAW,EAAEg6H,YAAY,EAAE,IAAI,CAAC;IACrD19G,KAAK,GAAGtc,WAAW,CAACm7H,SAAS;IAC7B,IAAI0L,iBAAiB,GAAG7mI,WAAW,CAACisB,QAAQ;IAE5C,IAAI66G,iBAAiB,GAAGvlF,OAAO,CAAC2uC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7D,IAAIlwF,WAAW,CAAC+mI,iBAAiB,KAAK,IAAI,EAAE;MACxC,IAAID,iBAAiB,IAAIA,iBAAiB,CAACj2G,QAAQ,GAAG,CAAC,EAAE;QACrD7wB,WAAW,CAACisB,QAAQ,GAAG66G,iBAAiB,CAACj2G,QAAQ,GAAGvU,KAAK,GAAGA,KAAK,GAAGwqH,iBAAiB,CAACj2G,QAAQ;QAC9F7wB,WAAW,CAACgsB,iBAAiB,GAAG,KAAK;MACzC,CAAC,MAAM;QACHhsB,WAAW,CAACisB,QAAQ,GAAG,CAAC;MAC5B;IAEJ;IAEA,IAAIjsB,WAAW,CAACmtB,uBAAuB,KAAK,IAAI,IAAIntB,WAAW,CAAC+mI,iBAAiB,KAAK,IAAI,EAAE;MACxF/mI,WAAW,CAACmtB,uBAAuB,GAAG,KAAK;MAE3C,IAAIliB,OAAO,GAAGpa,cAAc,CAACe,SAAS,CAAC,uDAAuD,CAAC;MAC/F,IAAIo1I,QAAQ,GAAGp/G,YAAY,CAAC0Q,OAAO,CAAC,6BAA6B,CAAC,KAAK,MAAM;MAC7E,IAAI,CAAC0uG,QAAQ,EAAE;QACXv2I,aAAa,CAACszE,iBAAiB,CAAClzE,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAAEqZ,OAAO,EACxEpa,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAEo1I,QAAQ,EACnE,UAAU5tI,GAAG,EAAE;UACXwuB,YAAY,CAACC,OAAO,CAAC,6BAA6B,EAAEzuB,GAAG,CAAC;QAC5D,CAAC,CAAC;MACV;IACJ;IAEA3I,aAAa,CAAC65E,gBAAgB,CAACtqE,WAAW,EAAEijD,KAAK,CAAC;EACtD,CAAC;;EAED;EACA,SAASyhF,qBAAqBA,CAAC7zG,QAAQ,EAAE32B,IAAI,EAAEyL,KAAK,EAAE;IAClD,IAAIkS,MAAM,GAAG,CAAC,CAAC;IACfA,MAAM,CAAC8sH,aAAa,GAAG,CAAC;IACxB,IAAI7tC,QAAQ,GAAGjmE,QAAQ,CAACimE,QAAQ,KAAK,IAAI,GAAG,CAAC,GAAGjmE,QAAQ,CAACimE,QAAQ;IACjE,IAAInxF,KAAK,KAAK,IAAI,EAAE;MAChB,QAAQkrB,QAAQ,CAAComE,gBAAgB;QAC7B,KAAK,iBAAiB;UAClBp/E,MAAM,CAACgZ,QAAQ,GAAGA,QAAQ,CAAChc,MAAM,GAAG3a,IAAI,CAACi0B,KAAK,GAAG,CAAC,GAAGj0B,IAAI,CAACi0B,KAAK,GAAG0C,QAAQ,CAAChc,MAAM;UACjF;QACJ,KAAK,YAAY;UACbgD,MAAM,CAACgZ,QAAQ,GAAG32B,IAAI,CAACi0B,KAAK,IAAI,GAAG,GAAG0C,QAAQ,CAAChc,MAAM,CAAC,GAAG,GAAG;UAC5D;QACJ,KAAK,eAAe;UAChBgD,MAAM,CAACgZ,QAAQ,GAAG32B,IAAI,CAACi0B,KAAK,GAAG0C,QAAQ,CAAChc,MAAM;UAC9C;QACJ,KAAK,UAAU;UACXgD,MAAM,CAACgZ,QAAQ,GAAG32B,IAAI,CAACi0B,KAAK,GAAIj0B,IAAI,CAACi0B,KAAK,GAAG0C,QAAQ,CAAChc,MAAM,GAAG,GAAI;UACnE;QACJ,KAAK,aAAa;UACdgD,MAAM,CAACgZ,QAAQ,GAAGA,QAAQ,CAAChc,MAAM,GAAG3a,IAAI,CAACkb,KAAK;UAC9C;QACJ;UACIyC,MAAM,CAACgZ,QAAQ,GAAG,CAAC;UACnB;MACR;MACAhZ,MAAM,CAACgZ,QAAQ,GAAG32B,IAAI,CAACi0B,KAAK,GAAGtW,MAAM,CAACgZ,QAAQ;MAC9ChZ,MAAM,CAAC+sH,aAAa,GAAG/sH,MAAM,CAACgZ,QAAQ,GAAG32B,IAAI,CAACkb,KAAK;MACnD,IAAIyb,QAAQ,CAAComE,gBAAgB,KAAK,gBAAgB,EAAE;QAChDp/E,MAAM,CAAC8sH,aAAa,GAAG,CAAC;QACxB9sH,MAAM,CAACgZ,QAAQ,GAAG32B,IAAI,CAACi0B,KAAK,GAAG0C,QAAQ,CAAChc,MAAM;QAC9CgD,MAAM,CAAC+sH,aAAa,GAAG/sH,MAAM,CAACgZ,QAAQ,GAAG32B,IAAI,CAACkb,KAAK;MACvD;MACA,OAAOyC,MAAM;IACjB,CAAC,MAAM;MACH,IAAIkuH,aAAa,GAAGpgI,KAAK;MACzB,QAAQkrB,QAAQ,CAAComE,gBAAgB;QAC7B,KAAK,iBAAiB;UAClBp/E,MAAM,CAACgZ,QAAQ,GAAGA,QAAQ,CAAChc,MAAM,GAAG3a,IAAI,CAACi0B,KAAK,GAAG,CAAC,GAAGj0B,IAAI,CAACi0B,KAAK,GAAG0C,QAAQ,CAAChc,MAAM;UACjF;QACJ,KAAK,YAAY;UACbgD,MAAM,CAACgZ,QAAQ,GAAG32B,IAAI,CAACi0B,KAAK,IAAI,GAAG,GAAG0C,QAAQ,CAAChc,MAAM,CAAC,GAAG,GAAG;UAC5D;QACJ,KAAK,eAAe;UAChBgD,MAAM,CAACgZ,QAAQ,GAAG32B,IAAI,CAACi0B,KAAK,GAAG0C,QAAQ,CAAChc,MAAM;UAC9C;QACJ,KAAK,UAAU;UACXgD,MAAM,CAACgZ,QAAQ,GAAG32B,IAAI,CAACi0B,KAAK,GAAIj0B,IAAI,CAACi0B,KAAK,GAAG0C,QAAQ,CAAChc,MAAM,GAAG,GAAI;UACnE;QACJ,KAAK,aAAa;UACdgD,MAAM,CAACgZ,QAAQ,GAAGA,QAAQ,CAAChc,MAAM,GAAG3a,IAAI,CAAC6rI,aAAa;UACtD;QACJ;UACIluH,MAAM,CAACgZ,QAAQ,GAAG,CAAC;UACnB;MACR;MACAhZ,MAAM,CAACgZ,QAAQ,GAAG32B,IAAI,CAACi0B,KAAK,GAAGtW,MAAM,CAACgZ,QAAQ;MAC9ChZ,MAAM,CAAC+sH,aAAa,GAAG/sH,MAAM,CAACgZ,QAAQ,GAAGk1G,aAAa;MACtDluH,MAAM,CAACgtH,eAAe,GAAGkB,aAAa;MAEtC,IAAIl1G,QAAQ,CAAComE,gBAAgB,KAAK,gBAAgB,EAAE;QAChDp/E,MAAM,CAAC8sH,aAAa,GAAG,CAAC;QACxB9sH,MAAM,CAACgZ,QAAQ,GAAG32B,IAAI,CAACi0B,KAAK,GAAG0C,QAAQ,CAAChc,MAAM;QAC9CgD,MAAM,CAAC+sH,aAAa,GAAG/sH,MAAM,CAACgZ,QAAQ,GAAGk1G,aAAa;MAC1D;MAEA,OAAOluH,MAAM;IACjB;EACJ;EAEA,SAASysH,sBAAsBA,CAACzzG,QAAQ,EAAEvU,KAAK,EAAEyP,aAAa,EAAE;IAC5D,IAAIlU,MAAM,GAAG;MACT+qH,IAAI,EAAE/xG;IACV,CAAC;IACD,IAAIo2G,eAAe,GAAG,CAAC;IACvB,IAAIlB,aAAa,GAAGl1G,QAAQ,CAACkmE,QAAQ;IACrCkwC,eAAe,GAAGh9G,IAAI,CAACo+B,KAAK,CAAC/rC,KAAK,GAAGuU,QAAQ,CAACimE,QAAQ,CAAC;IACvD,IAAI2uC,eAAe,GAAG,CAAC;IACvB,IAAIyB,kBAAkB,GAAG,KAAK;IAE9BhzI,CAAC,CAACmC,IAAI,CAACw6B,QAAQ,CAACgyG,QAAQ,EAAE,UAAUC,IAAI,EAAEqE,GAAG,EAAE;MAC3CjzI,CAAC,CAACmC,IAAI,CAAC01B,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;QACrC,IAAK,CAAEA,EAAE,CAACyc,SAAS,KAAK06H,GAAG,CAAC3rD,SAAS,IAAI2rD,GAAG,CAAC3rD,SAAS,IAAI,CAAC2rD,GAAG,CAACzhF,QAAQ,IAAM11D,EAAE,CAAC4+B,QAAQ,KAAKu4G,GAAG,CAAC3rD,SAAS,IAAI2rD,GAAG,CAAC3rD,SAAS,IAAI2rD,GAAG,CAACzhF,QAAS,IAAI,CAACyhF,GAAG,CAAC3rD,SAAS,MACpJxrF,EAAE,CAAC2+B,UAAU,KAAKw4G,GAAG,CAAChqD,UAAU,IAAIgqD,GAAG,CAAChqD,UAAU,IAAK,CAACgqD,GAAG,CAAChqD,UAAU,CAAC,KACvEntF,EAAE,CAAC0+B,OAAO,KAAKy4G,GAAG,CAACjpD,OAAO,IAAIipD,GAAG,CAACjpD,OAAO,IAAK,CAACipD,GAAG,CAACjpD,OAAO,CAAC,KAC5D8jD,QAAQ,CAAChyI,EAAE,CAACy+B,IAAI,EAAE04G,GAAG,CAACzwC,OAAO,CAAC,IAAI,CAACywC,GAAG,CAACzwC,OAAO,CAAC,EAAG;UACvD+uC,eAAe,IAAIz1I,EAAE,CAAColB,KAAK;UAC3B;QACJ;MACJ,CAAC,CAAC;IACN,CAAC,CAAC;IAEF,IAAI6U,IAAI,CAACo+B,KAAK,CAACo9E,eAAe,GAAG50G,QAAQ,CAACimE,QAAQ,CAAC,IAAI,CAAC,EAAE;MACtDmwC,eAAe,GAAGh9G,IAAI,CAACo+B,KAAK,CAACo9E,eAAe,GAAG50G,QAAQ,CAACimE,QAAQ,CAAC;MACjEowC,kBAAkB,GAAG,IAAI;IAC7B;IAEAD,eAAe,GAAGA,eAAe,GAAG,CAAC,GAAGp2G,QAAQ,CAACulE,OAAO,KAAK,KAAK,GAAG6wC,eAAe,GAAG,CAAC,GAAG,CAAC;IAC5FlB,aAAa,IAAIkB,eAAe;IAEhC,IAAI,CAACp2G,QAAQ,CAACgyG,QAAQ,CAAC,CAAC,CAAC,CAACrnD,SAAS,KAAKj3C,OAAO,IAAI2iG,kBAAkB,KAAK,IAAI,KAC1Er2G,QAAQ,CAACslE,OAAO,CAAC3/F,MAAM,GAAG,CAAC,IAAIq6B,QAAQ,CAACslE,OAAO,CAAC,CAAC,CAAC,CAAC3a,SAAS,KAAKj3C,OAAO,EAAE;MAC1E,QAAQ1T,QAAQ,CAAComE,gBAAgB;QAC7B,KAAK,iBAAiB;UAClBp/E,MAAM,CAACgZ,QAAQ,GAAGvU,KAAK,GAAGuU,QAAQ,CAAChc,MAAM;UACzC;QACJ,KAAK,YAAY;UACbgD,MAAM,CAACgZ,QAAQ,GAAGvU,KAAK,IAAI,GAAG,GAAGuU,QAAQ,CAAChc,MAAM,CAAC,GAAG,GAAG;UACvD;QACJ,KAAK,eAAe;UAChBgD,MAAM,CAACgZ,QAAQ,GAAGvU,KAAK,GAAGuU,QAAQ,CAAChc,MAAM;UACzC;QACJ,KAAK,UAAU;UACXgD,MAAM,CAACgZ,QAAQ,GAAGvU,KAAK,GAAIA,KAAK,GAAGuU,QAAQ,CAAChc,MAAM,GAAG,GAAI;UACzD;QACJ,KAAK,gBAAgB;UACjBgD,MAAM,CAACgZ,QAAQ,GAAGA,QAAQ,CAAChc,MAAM;UACjC;QACJ,KAAK,aAAa;UACdgD,MAAM,CAACgZ,QAAQ,GAAGA,QAAQ,CAAChc,MAAM;UACjC;QACJ;UACIgD,MAAM,CAACgZ,QAAQ,GAAG,CAAC;UACnB;MACR;MACAhZ,MAAM,CAACgZ,QAAQ,GAAGvU,KAAK,GAAGzE,MAAM,CAACgZ,QAAQ;MACzC,IAAIA,QAAQ,CAAComE,gBAAgB,KAAK,YAAY,IAAIgwC,eAAe,KAAK,CAAC,EAAE;QACrEpvH,MAAM,CAACgZ,QAAQ,IAAIo2G,eAAe;MACtC,CAAC,MAAM,IAAIp2G,QAAQ,CAAComE,gBAAgB,KAAK,YAAY,EAAE;QACnDp/E,MAAM,CAACgZ,QAAQ,IAAIo2G,eAAe;MACtC;MAEA,OAAOpvH,MAAM;IACjB,CAAC,MAAM,IAAIgZ,QAAQ,CAACslE,OAAO,CAAC3/F,MAAM,GAAG,CAAC,IAAIq6B,QAAQ,CAACslE,OAAO,CAAC,CAAC,CAAC,CAAC3a,SAAS,KAAKj3C,OAAO,EAAE;MAEjFrwC,CAAC,CAACmC,IAAI,CAACw6B,QAAQ,CAACslE,OAAO,EAAE,UAAUwvC,aAAa,EAAEC,UAAU,EAAE;QAC1D1xI,CAAC,CAACmC,IAAI,CAAC01B,aAAa,EAAE,UAAU85G,aAAa,EAAEC,UAAU,EAAE;UACvD,IAAK,CAAEA,UAAU,CAACr5H,SAAS,KAAKm5H,UAAU,CAACpqD,SAAS,IAAIoqD,UAAU,CAACpqD,SAAS,IAAI,CAACoqD,UAAU,CAAClgF,QAAQ,IAAMogF,UAAU,CAACl3G,QAAQ,KAAKg3G,UAAU,CAACpqD,SAAS,IAAIoqD,UAAU,CAACpqD,SAAS,IAAIoqD,UAAU,CAAClgF,QAAS,IAAI,CAACkgF,UAAU,CAACpqD,SAAS,MACrNsqD,UAAU,CAACn3G,UAAU,KAAKi3G,UAAU,CAACzoD,UAAU,IAAIyoD,UAAU,CAACzoD,UAAU,IAAK,CAACyoD,UAAU,CAACzoD,UAAU,CAAC,KACpG2oD,UAAU,CAACp3G,OAAO,KAAKk3G,UAAU,CAAC1nD,OAAO,IAAI0nD,UAAU,CAAC1nD,OAAO,IAAK,CAAC0nD,UAAU,CAAC1nD,OAAO,CAAC,KACzF8jD,QAAQ,CAAC8D,UAAU,CAACr3G,IAAI,EAAEm3G,UAAU,CAAClvC,OAAO,CAAC,IAAI,CAACkvC,UAAU,CAAClvC,OAAO,CAAC,IAAKovC,UAAU,CAAC92G,OAAO,EAAE;YACnG6B,QAAQ,CAACuzG,gBAAgB,CAAC3tI,IAAI,CAAC;cAC3B+kF,SAAS,EAAEsqD,UAAU,CAACr5H,SAAS;cAC/ByhB,KAAK,EAAE43G,UAAU,CAAC33G;YACtB,CAAC,CAAC;UACN;QACJ,CAAC,CAAC;MACN,CAAC,CAAC;MAEFj6B,CAAC,CAACmC,IAAI,CAACkrD,OAAO,CAAC1wB,QAAQ,CAACuzG,gBAAgB,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,UAAUuB,aAAa,EAAEM,eAAe,EAAE;QACnG/xI,CAAC,CAACmC,IAAI,CAAC01B,aAAa,EAAE,UAAU85G,aAAa,EAAEC,UAAU,EAAE;UACvD,IAAIA,UAAU,CAACr5H,SAAS,KAAKw5H,eAAe,CAACzqD,SAAS,KAAKuqD,aAAa,GAAG,CAAC,IAAI,CAACA,aAAa,CAAC,EAAE;YAE7F,IAAIpgI,KAAK,GAAGogI,aAAa,GAAGD,UAAU,CAAC1wH,KAAK,GAAG0wH,UAAU,CAAC1wH,KAAK,GAAG2wH,aAAa,GAAGA,aAAa,GAAG,IAAI;YACtG,IAAI94G,YAAY,GAAGy3G,qBAAqB,CAAC7zG,QAAQ,EAAEi1G,UAAU,EAAEngI,KAAK,CAAC;YACrEkS,MAAM,CAACgZ,QAAQ,GAAG5D,YAAY,CAAC23G,aAAa;YAC5CmB,aAAa,IAAID,UAAU,CAAC1wH,KAAK;YACjC,OAAO,KAAK;UAChB;QACJ,CAAC,CAAC;MACN,CAAC,CAAC;MAEFyC,MAAM,CAACkuH,aAAa,GAAGA,aAAa;MACpC,OAAOluH,MAAM;IACjB;IAEA,OAAOA,MAAM;EACjB;EAEA,SAASmuH,wBAAwBA,CAACrvC,cAAc,EAAE;IAC9C,IAAIywC,aAAa,GAAG,KAAK;IAEzBlzI,CAAC,CAACmC,IAAI,CAACyrI,YAAY,EAAE,UAAUxrI,GAAG,EAAEssI,IAAI,EAAE;MACtC,IAAIA,IAAI,CAACjsC,cAAc,KAAKA,cAAc,EAAE;QACxCziG,CAAC,CAACmC,IAAI,CAACusI,IAAI,CAACC,QAAQ,EAAE,UAAUC,IAAI,EAAEqE,GAAG,EAAE;UACvC,IAAIrhH,KAAK,GAAG,KAAK;UACjB5xB,CAAC,CAACmC,IAAI,CAACusI,IAAI,CAACzsC,OAAO,EAAE,UAAU2sC,IAAI,EAAE8C,UAAU,EAAE;YAC7C,IAAMuB,GAAG,CAAC3rD,SAAS,IAAI2rD,GAAG,CAAC3rD,SAAS,KAAKoqD,UAAU,CAACpqD,SAAS,IACpD2rD,GAAG,CAAChqD,UAAU,IAAIgqD,GAAG,CAAChqD,UAAU,KAAKyoD,UAAU,CAACzoD,UAAW,IAC3DgqD,GAAG,CAACjpD,OAAO,IAAIipD,GAAG,CAACjpD,OAAO,KAAK0nD,UAAU,CAAC1nD,OAAQ,IAClDipD,GAAG,CAACzwC,OAAO,IAAIywC,GAAG,CAACzwC,OAAO,KAAKkvC,UAAU,CAAClvC,OAAQ,EAAG;cAC1D5wE,KAAK,GAAG,IAAI;YAChB;UAEJ,CAAC,CAAC;UACF,IAAIA,KAAK,KAAK,KAAK,EAAE;YACjBshH,aAAa,GAAG,IAAI;UACxB;QACJ,CAAC,CAAC;QAEFlzI,CAAC,CAACmC,IAAI,CAACusI,IAAI,CAACzsC,OAAO,EAAE,UAAU2sC,IAAI,EAAEqE,GAAG,EAAE;UACtC,IAAIrhH,KAAK,GAAG,KAAK;UACjB5xB,CAAC,CAACmC,IAAI,CAACusI,IAAI,CAACC,QAAQ,EAAE,UAAUC,IAAI,EAAE8C,UAAU,EAAE;YAC9C,IAAMuB,GAAG,CAAC3rD,SAAS,IAAI2rD,GAAG,CAAC3rD,SAAS,KAAKoqD,UAAU,CAACpqD,SAAS,IACpD2rD,GAAG,CAAChqD,UAAU,IAAIgqD,GAAG,CAAChqD,UAAU,KAAKyoD,UAAU,CAACzoD,UAAW,IAC3DgqD,GAAG,CAACjpD,OAAO,IAAIipD,GAAG,CAACjpD,OAAO,KAAK0nD,UAAU,CAAC1nD,OAAQ,IAClDipD,GAAG,CAACzwC,OAAO,IAAIywC,GAAG,CAACzwC,OAAO,KAAKkvC,UAAU,CAAClvC,OAAQ,EAAG;cAC1D5wE,KAAK,GAAG,IAAI;YAChB;UAEJ,CAAC,CAAC;UACF,IAAIA,KAAK,KAAK,KAAK,EAAE;YACjBshH,aAAa,GAAG,IAAI;UACxB;QACJ,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;IAEF,OAAOA,aAAa;EACxB;EAEA,SAASjB,qCAAqCA,CAAC/tB,KAAK,EAAE58B,SAAS,EAAEmb,cAAc,EAAE;IAC7E,IAAIz8F,IAAI,GAAG,IAAI;IACfhG,CAAC,CAACmC,IAAI,CAAC+hH,KAAK,EAAE,UAAU9hH,GAAG,EAAEtG,EAAE,EAAE;MAC7B,IAAIA,EAAE,CAACyc,SAAS,KAAK+uE,SAAS,IAAI,CAAC2mD,WAAW,CAACnyI,EAAE,CAAC2gC,KAAK,EAAEgmE,cAAc,CAAC,EAAE;QACtEz8F,IAAI,GAAGlK,EAAE;QACT,OAAOA,EAAE;MACb;IACJ,CAAC,CAAC;IACF,OAAOkK,IAAI;EACf;EAEA,SAAS6nI,gBAAgBA,CAAA,EAAG;IACxB,IAAIsF,aAAa,GAAG,EAAE;IACtB,IAAIC,cAAc,GAAGh3I,aAAa,CAACkmC,QAAQ;IAC3CtiC,CAAC,CAACmC,IAAI,CAACyrI,YAAY,EAAE,UAAUxrI,GAAG,EAAE8rI,IAAI,EAAE;MAEtC,IAAImF,QAAQ,GAAG,KAAK;MACpBrzI,CAAC,CAACmC,IAAI,CAACgxI,aAAa,EAAE,UAAUG,KAAK,EAAEC,YAAY,EAAE;QACjD,IAAIA,YAAY,CAAC9wC,cAAc,KAAKyrC,IAAI,CAACzrC,cAAc,EAAE;UACrD8wC,YAAY,CAAC5E,QAAQ,CAACpsI,IAAI,CAAC;YACvBynF,OAAO,EAAEkkD,IAAI,CAAClkD,OAAO;YACrBf,UAAU,EAAEilD,IAAI,CAACjlD,UAAU;YAC3B3B,SAAS,EAAE4mD,IAAI,CAAC5mD,SAAS;YACzB91B,QAAQ,EAAE08E,IAAI,CAAC18E,QAAQ;YACvBgxC,OAAO,EAAE0rC,IAAI,CAAC1rC,OAAO;YACrBn3E,QAAQ,EAAE6iH,IAAI,CAAC7iH,QAAQ;YACvBy3E,QAAQ,EAAEorC,IAAI,CAACprC,QAAQ;YACvBniF,MAAM,EAAEutH,IAAI,CAACvtH,MAAM;YACnBoiF,gBAAgB,EAAEmrC,IAAI,CAACnrC;UAC3B,CAAC,CAAC;UACFwwC,YAAY,CAACtxC,OAAO,GAAGsxC,YAAY,CAACtxC,OAAO,CAACt0F,MAAM,CAACugI,IAAI,CAACjsC,OAAO,CAAC;UAChEoxC,QAAQ,GAAG,IAAI;QACnB;MACJ,CAAC,CAAC;MAEF,IAAIA,QAAQ,KAAK,KAAK,EAAE;QACpBF,aAAa,CAAC5wI,IAAI,CAAC;UACfoe,MAAM,EAAEutH,IAAI,CAACvtH,MAAM;UACnBuhF,OAAO,EAAEgsC,IAAI,CAAChsC,OAAO;UACrBU,QAAQ,EAAEsrC,IAAI,CAACtrC,QAAQ;UACvBF,cAAc,EAAEwrC,IAAI,CAACxrC,cAAc;UACnCvlC,QAAQ,EAAE,CAAC,CAAC+wE,IAAI,CAAC/wE,QAAQ,GAAG+wE,IAAI,CAAC/wE,QAAQ,GAAGi2E,cAAc,GAAG,IAAI;UACjEh2E,MAAM,EAAE,CAAC,CAAC8wE,IAAI,CAAC9wE,MAAM,GAAG8wE,IAAI,CAAC9wE,MAAM,CAACvhD,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,GAAGu3H,cAAc,GAAG,IAAI;UAC3F3wC,cAAc,EAAEyrC,IAAI,CAACzrC,cAAc;UACnCE,MAAM,EAAEurC,IAAI,CAACvrC,MAAM;UACnBtZ,UAAU,EAAE6kD,IAAI,CAAC7kD,UAAU;UAC3B0Z,gBAAgB,EAAEmrC,IAAI,CAACnrC,gBAAgB;UACvCF,QAAQ,EAAEqrC,IAAI,CAACrrC,QAAQ;UACvBriE,QAAQ,EAAE0tG,IAAI,CAAC1tG,QAAQ;UACvBh2B,IAAI,EAAE0jI,IAAI,CAAC1jI,IAAI;UACf6gB,QAAQ,EAAE6iH,IAAI,CAAC7iH,QAAQ;UACvBy3E,QAAQ,EAAEorC,IAAI,CAACprC,QAAQ;UACvBb,OAAO,EAAEisC,IAAI,CAACjsC,OAAO;UACrBI,YAAY,EAAE6rC,IAAI,CAAC7rC,YAAY;UAC/BC,qBAAqB,EAAE4rC,IAAI,CAAC5rC,qBAAqB;UACjDC,OAAO,EAAE,CAAC,CAAC2rC,IAAI,CAAC3rC,OAAO,GAAG3uE,IAAI,CAAC2T,KAAK,CAAC2mG,IAAI,CAAC3rC,OAAO,CAAC,GAAG,IAAI;UACzDosC,QAAQ,EAAE,CAAC;YACP3kD,OAAO,EAAEkkD,IAAI,CAAClkD,OAAO;YACrBf,UAAU,EAAEilD,IAAI,CAACjlD,UAAU;YAC3B3B,SAAS,EAAE4mD,IAAI,CAAC5mD,SAAS;YACzB91B,QAAQ,EAAE08E,IAAI,CAAC18E,QAAQ;YACvBgxC,OAAO,EAAE0rC,IAAI,CAAC1rC,OAAO;YACrBn3E,QAAQ,EAAE6iH,IAAI,CAAC7iH,QAAQ;YACvBy3E,QAAQ,EAAEorC,IAAI,CAACprC,QAAQ;YACvBniF,MAAM,EAAEutH,IAAI,CAACvtH,MAAM;YACnBoiF,gBAAgB,EAAEmrC,IAAI,CAACnrC;UAC3B,CAAC;QACL,CAAC,CAAC;MACN;IAEJ,CAAC,CAAC;IAEF3oF,WAAW,CAACo5H,gBAAgB,CAACL,aAAa,CAAC;IAC3C/4H,WAAW,CAACq5H,YAAY,CAACN,aAAa,CAAC;IAEvC,OAAOA,aAAa;EACxB;EAEA/4H,WAAW,CAACs5H,aAAa,GAAG,UAAShzI,OAAO,EAAEizI,eAAe,EAAE;IAC3D,IAAIp3F,GAAG,GAAG,OAAO,IAAI,CAAC77C,OAAO,CAACspF,OAAO,GAAG,MAAM,GAAGtpF,OAAO,CAACspF,OAAO,CAAC,GACvD,OAAO,IAAI,CAACtpF,OAAO,CAACuoF,UAAU,GAAG,MAAM,GAAGvoF,OAAO,CAACuoF,UAAU,CAAC,GAC7D,OAAO,IAAI,CAACvoF,OAAO,CAAC4mF,SAAS,GAAG,MAAM,GAAG5mF,OAAO,CAAC4mF,SAAS,CAAC,GAC3D,OAAO,IAAI,CAAC5mF,OAAO,CAAC8hG,OAAO,GAAG,MAAM,GAAG9hG,OAAO,CAAC8hG,OAAO,CAAC,GACvD,OAAO,GAAG9hG,OAAO,CAACqiG,gBAAgB;IAC5C,IAAI4wC,eAAe,EAAE;MACjBp3F,GAAG,IAAI,OAAO,IAAI,CAAC77C,OAAO,CAACoiG,QAAQ,GAAG,MAAM,GAAGpiG,OAAO,CAACoiG,QAAQ,CAAC,GACzD,OAAO,IAAI,CAACpiG,OAAO,CAAC2qB,QAAQ,GAAG,MAAM,GAAG3qB,OAAO,CAAC2qB,QAAQ,CAAC;IACpE;IACA,OAAOkxB,GAAG;EACd,CAAC;EAEDniC,WAAW,CAACw5H,YAAY,GAAG,UAASvtI,MAAM,EAAE;IACxC,IAAIk2C,GAAG,GAAG,OAAO,IAAI,CAACl2C,MAAM,CAAC2jF,OAAO,GAAG,MAAM,GAAG3jF,MAAM,CAAC2jF,OAAO,CAAC,GACrD,OAAO,IAAI,CAAC3jF,MAAM,CAAC4iF,UAAU,GAAG,MAAM,GAAG5iF,MAAM,CAAC4iF,UAAU,CAAC,GAC3D,OAAO,IAAI,CAAC5iF,MAAM,CAACihF,SAAS,GAAG,MAAM,GAAGjhF,MAAM,CAACihF,SAAS,CAAC,GACzD,OAAO,IAAI,CAACjhF,MAAM,CAACo8F,cAAc,GAAG,MAAM,GAAGp8F,MAAM,CAACo8F,cAAc,CAAC,GACnE,OAAO,IAAI,CAACp8F,MAAM,CAACm8F,OAAO,GAAG,MAAM,GAAGn8F,MAAM,CAACm8F,OAAO,CAAC;IAC/D,OAAOjmD,GAAG;EACd,CAAC;EAEDniC,WAAW,CAACo5H,gBAAgB,GAAG,UAAS5F,YAAY,EAAE;IAElD5tI,CAAC,CAACmC,IAAI,CAACyrI,YAAY,EAAE,UAAUxrI,GAAG,EAAE8rI,IAAI,EAAE;MACtC,IAAGA,IAAI,CAACS,QAAQ,IAAIxoI,KAAK,CAAC0wC,OAAO,CAACq3F,IAAI,CAACS,QAAQ,CAAC,EAAE;QAC9C,IAAIppI,GAAG,GAAG,EAAE;QACZ,IAAIyN,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI2gI,eAAe,GAAGzF,IAAI,CAAC1jI,IAAI,KAAK,gBAAgB;QACpDxK,CAAC,CAACmC,IAAI,CAAC+rI,IAAI,CAACS,QAAQ,EAAE,UAAUvsI,GAAG,EAAE1B,OAAO,EAAE;UAC1C,IAAI67C,GAAG,GAAGniC,WAAW,CAACs5H,aAAa,CAAChzI,OAAO,EAAEizI,eAAe,CAAC;UAE7D,IAAG,CAAC3gI,GAAG,CAACupC,GAAG,CAAC,EAAE;YACVh3C,GAAG,CAAChD,IAAI,CAAC7B,OAAO,CAAC;YACjBsS,GAAG,CAACupC,GAAG,CAAC,GAAG77C,OAAO;UACtB;QACJ,CAAC,CAAC;QAEFwtI,IAAI,CAACS,QAAQ,GAAGppI,GAAG;MACvB;IACJ,CAAC,CAAC;EACN,CAAC;EAED6U,WAAW,CAACq5H,YAAY,GAAG,UAAS7F,YAAY,EAAE;IAE9C5tI,CAAC,CAACmC,IAAI,CAACyrI,YAAY,EAAE,UAAUxrI,GAAG,EAAE8rI,IAAI,EAAE;MACtC,IAAGA,IAAI,CAACjsC,OAAO,IAAI97F,KAAK,CAAC0wC,OAAO,CAACq3F,IAAI,CAACjsC,OAAO,CAAC,EAAE;QAC5C,IAAI18F,GAAG,GAAG,EAAE;QACZ,IAAIyN,GAAG,GAAG,CAAC,CAAC;QACZhT,CAAC,CAACmC,IAAI,CAAC+rI,IAAI,CAACjsC,OAAO,EAAE,UAAU7/F,GAAG,EAAEiE,MAAM,EAAE;UACxC,IAAIk2C,GAAG,GAAGniC,WAAW,CAACw5H,YAAY,CAACvtI,MAAM,CAAC;UAE1C,IAAG,CAAC2M,GAAG,CAACupC,GAAG,CAAC,EAAE;YACVh3C,GAAG,CAAChD,IAAI,CAAC8D,MAAM,CAAC;YAChB2M,GAAG,CAACupC,GAAG,CAAC,GAAGl2C,MAAM;UACrB;QACJ,CAAC,CAAC;QAEF6nI,IAAI,CAAC7nI,MAAM,GAAGd,GAAG;MACrB;IACJ,CAAC,CAAC;EACN,CAAC;EAED6U,WAAW,CAACy5H,sBAAsB,GAAG,UAAUC,UAAU,EAAE;IACvD,OAAOvnH,eAAe,CAACsnH,sBAAsB,CAACC,UAAU,CAAC;EAC7D,CAAC;EAED15H,WAAW,CAAC25H,eAAe,GAAG,UAAU91G,IAAI,EAAEgyE,OAAO,EAAE;IAEnD,IAAI+jC,eAAe,GAAG,CAAC,CAAC;IACxBA,eAAe,CAACjzC,YAAY,GAAG,CAAC;IAChCizC,eAAe,CAAChzC,kBAAkB,GAAG,CAAC;IACtCgzC,eAAe,CAAC/yC,gBAAgB,GAAG,CAAC;IACpC+yC,eAAe,CAAC9yC,eAAe,GAAG,CAAC;IACnC8yC,eAAe,CAAC7yC,mBAAmB,GAAG,CAAC;IACvC,IAAIljE,IAAI,CAACkyE,eAAe,IAAI,QAAQ,EAAE;MAClC;MACA,IAAI,CAACF,OAAO,CAACgkC,sBAAsB,EAAE;QACjChkC,OAAO,CAACgkC,sBAAsB,GAAG,CAAC,CAAC;MACvC;MAEAj0I,CAAC,CAACmC,IAAI,CAAC87B,IAAI,CAACjJ,QAAQ,EAAE,UAAU5yB,GAAG,EAAEtG,EAAE,EAAE;QACrC,IAAIm0G,OAAO,CAACgkC,sBAAsB,CAACn4I,EAAE,CAACwD,EAAE,CAAC,KAAK,IAAI,EAAE;UAEhD2wG,OAAO,CAACgkC,sBAAsB,CAACn4I,EAAE,CAACwD,EAAE,CAAC,GAAG,IAAI;UAE5C,QAAQxD,EAAE,CAACihC,SAAS;YAChB,KAAK,MAAM;cACPi3G,eAAe,CAACjzC,YAAY,IAAIjlG,EAAE,CAACmlB,MAAM;cACzC;YACJ,KAAK,WAAW;cACZ+yH,eAAe,CAAC/yC,gBAAgB,IAAInlG,EAAE,CAACmlB,MAAM;cAC7C;YACJ,KAAK,SAAS;cACV+yH,eAAe,CAAC9yC,eAAe,IAAIplG,EAAE,CAACmlB,MAAM;cAC5C;YACJ,KAAK,aAAa;cACd+yH,eAAe,CAAChzC,kBAAkB,IAAIllG,EAAE,CAACmlB,MAAM;cAC/C;YACJ,KAAK,eAAe;cAChB+yH,eAAe,CAAC7yC,mBAAmB,IAAIrlG,EAAE,CAACmlB,MAAM;cAChD;UACR;QACJ;MACJ,CAAC,CAAC;IAEN,CAAC,MAAM;MACH;MACA,IAAI,CAACgvF,OAAO,CAACikC,qBAAqB,EAAE;QAChCjkC,OAAO,CAACikC,qBAAqB,GAAG,CAAC,CAAC;MACtC;MAEAl0I,CAAC,CAACmC,IAAI,CAAC87B,IAAI,CAACG,OAAO,EAAE,UAAUh8B,GAAG,EAAEyP,CAAC,EAAE;QACnC7R,CAAC,CAACmC,IAAI,CAAC0P,CAAC,CAACmjB,QAAQ,EAAE,UAAU5yB,GAAG,EAAEtG,EAAE,EAAE;UAClC,IAAIm0G,OAAO,CAACikC,qBAAqB,CAACp4I,EAAE,CAACwD,EAAE,CAAC,KAAK,IAAI,EAAE;YAE/C2wG,OAAO,CAACikC,qBAAqB,CAACp4I,EAAE,CAACwD,EAAE,CAAC,GAAG,IAAI;YAE3C,QAAQxD,EAAE,CAACihC,SAAS;cAChB,KAAK,MAAM;gBACPi3G,eAAe,CAACjzC,YAAY,IAAIjlG,EAAE,CAACmlB,MAAM;gBACzC;cACJ,KAAK,WAAW;gBACZ+yH,eAAe,CAAC/yC,gBAAgB,IAAInlG,EAAE,CAACmlB,MAAM;gBAC7C;cACJ,KAAK,SAAS;gBACV+yH,eAAe,CAAC9yC,eAAe,IAAIplG,EAAE,CAACmlB,MAAM;gBAC5C;cACJ,KAAK,aAAa;gBACd+yH,eAAe,CAAChzC,kBAAkB,IAAIllG,EAAE,CAACmlB,MAAM;gBAC/C;cACJ,KAAK,eAAe;gBAChB+yH,eAAe,CAAC7yC,mBAAmB,IAAIrlG,EAAE,CAACmlB,MAAM;gBAChD;YACR;UACJ;QACJ,CAAC,CAAC;MACN,CAAC,CAAC;IACN;IAEA,OAAO+yH,eAAe;EAC1B,CAAC;;EAED;AACR;AACA;EACQ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA55H,WAAW,CAAC0mF,mBAAmB,GAAG,UAAUxhG,EAAE,EAAE2+B,IAAI,EAAEgyE,OAAO,EAAE;IAC3D,IAAIkkC,YAAY,GAAG/5H,WAAW,CAAC25H,eAAe,CAAC91G,IAAI,EAAEgyE,OAAO,CAAC;IAC7D,IAAI7zG,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,EAAE;MAChD,IAAI1J,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B;IAEAq2B,IAAI,CAAC4kG,aAAa,GAAGjvG,IAAI,CAACC,SAAS,CAAC73B,OAAO,CAAC2P,MAAM,CAACskG,OAAO,EAAE;MACxD9vE,cAAc,EAAE/jC,aAAa,CAAC+jC;IAClC,CAAC,CAAC,CAAC;IAEH,IAAIxT,QAAQ,GAAG5b,eAAe;IAC9B;IACA;IACA;IACA,IAAIvJ,EAAE,GAAGmlB,QAAQ,CAACm0E,mBAAmB,CAACxhG,EAAE,EAAE60I,YAAY,CAACpzC,YAAY,EAAEozC,YAAY,CAACnzC,kBAAkB,CAAC;IACrG,OAAOx5F,EAAE;EACb,CAAC;;EAED;EACA4S,WAAW,CAACg6H,WAAW,GAAG,EAAE;EAE5Bh6H,WAAW,CAAC6oF,cAAc,GAAG,UAAUC,UAAU,EAAE;IAC/C9oF,WAAW,CAACg6H,WAAW,GAAG,EAAE;IAC5B,IAAI3sI,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzB,IAAInC,GAAG,GAAG,EAAE;IACZkC,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;IACrB,IAAI65B,CAAC,GAAG33B,QAAQ,CAACG,OAAO;IAExB,IAAI,CAACxL,aAAa,CAACX,MAAM,IAAI,CAACwV,UAAU,CAACE,WAAW,EAChDiuB,CAAC,GAAGA,CAAC,CAACl/B,IAAI,CAAC,UAAU2R,CAAC,EAAE;MACpB,OAAOd,eAAe,CAACkyF,cAAc,CAACC,UAAU,CAAC,CAC5ChjG,IAAI,CAAC,UAAUE,IAAI,EAAE;QAClB,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBnC,GAAG,GAAGA,GAAG,CAACoI,MAAM,CAACvN,IAAI,CAAC;QACtBqH,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;QACrB,OAAOkC,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC;IACV,CAAC,CAAC;IAEN,IAAIxL,aAAa,CAACX,MAAM,IAAIW,aAAa,CAACmB,QAAQ,EAAE;MAChD6hC,CAAC,GAAGA,CAAC,CAACl/B,IAAI,CAAC,UAAU2R,CAAC,EAAE;QAChB,OAAOya,qBAAqB,CAAC22E,cAAc,CAACC,UAAU,CAAC;MAC3D,CAAC,CAAC,CACDhjG,IAAI,CAAC,UAAUE,IAAI,EAAE;QAClB,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBnC,GAAG,GAAGA,GAAG,CAACoI,MAAM,CAACvN,IAAI,CAACA,IAAI,CAAC;QAC3BqH,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;QACrB,OAAOkC,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC;IACV;IAEA,OAAOw3B,CAAC,CAACl/B,IAAI,CAAC,UAAUE,IAAI,EAAE;MAC1Bga,WAAW,CAACg6H,WAAW,GAAGh0I,IAAI;MAC9B,IAAIqH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACvH,IAAI,CAAC;MACtB,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;EACN,CAAC;EAEDwS,WAAW,CAACi6H,iCAAiC,GAAG,UAAUnxC,UAAU,EAAE;IAClE,IAAIoxC,iBAAiB,GAAGl6H,WAAW,CAACg6H,WAAW,CAACnyI,MAAM,CAAC,UAAU0H,CAAC,EAAE;MAChE,OAAOA,CAAC,CAACumH,UAAU,IAAIhtB,UAAU;IACrC,CAAC,CAAC;IAEF,IAAIoxC,iBAAiB,CAAChyI,MAAM,IAAI,CAAC,EAAE,OAAO,IAAI;IAE9C,IAAIiyI,WAAW,GAAGn6H,WAAW,CAACo6H,wBAAwB,CAACtxC,UAAU,CAAC,CAAC,CAAC;IACpE,IAAIuxC,aAAa,GAAGr6H,WAAW,CAACo6H,wBAAwB,CAACtxC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;;IAE5E,OAAOqxC,WAAW,IAAI,IAAI,IAAIE,aAAa,IAAI,IAAI;EACvD,CAAC;EAEDr6H,WAAW,CAACo6H,wBAAwB,GAAG,UAAUtxC,UAAU,EAAEwxC,gBAAgB,EAAE;IAE3E,IAAMJ,iBAAiB,GAAGl6H,WAAW,CAACg6H,WAAW,CAACnyI,MAAM,CAAC,UAAC0H,CAAC;MAAA,OAAKpN,aAAa,CAAC68E,cAAc,CAACzvE,CAAC,CAACumH,UAAU,EAAEhtB,UAAU,CAAC;IAAA,EAAC;IAEvH,IAAI39F,GAAG,GAAG,IAAI;IACdvJ,OAAO,CAAC4M,OAAO,CAACglI,YAAY,EAAE,UAAUliI,CAAC,EAAE;MACvC,IAAIA,CAAC,CAAC22F,YAAY,KAAK,IAAI,IAAI,CAAC,CAAC32F,CAAC,CAAC62F,OAAO,EAAE;QAExC,IAAMoyC,GAAG,GAAGjpI,CAAC,CAAC62F,OAAO,CAACtgG,MAAM,CAAC,UAAC0H,CAAC;UAAA,OAAKpN,aAAa,CAAC68E,cAAc,CAACzvE,CAAC,CAACo0D,IAAI,EAAEmlC,UAAU,CAAC;QAAA,EAAC;QAErF,IAAIyxC,GAAG,CAACryI,MAAM,GAAG,CAAC,KAAKoyI,gBAAgB,KAAK,IAAI,IAAI,EAAEhpI,CAAC,CAAC42F,qBAAqB,KAAK,IAAI,IAAIgyC,iBAAiB,CAAChyI,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE;UAEtHiD,GAAG,GAAGvF,CAAC,CAAC2L,MAAM,CAAC;YACX2iI,MAAM,EAAE5iI,CAAC,CAACi3F;UACd,CAAC,EAAEgyC,GAAG,CAAC,CAAC,CAAC,CAAC;UAEV,OAAO,KAAK;QAChB;MACJ;IACJ,CAAC,CAAC;IAEF,OAAOpvI,GAAG;EACd,CAAC;EAED6U,WAAW,CAACw6H,gBAAgB,GAAG,UAAU32G,IAAI,EAAE;IAC3C,IAAIpM,GAAG,GAAG,EAAE;IACZ7xB,CAAC,CAACmC,IAAI,CAAC87B,IAAI,CAACpG,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;MAC1C,IAAIA,EAAE,CAAC8/B,WAAW,IAAI,UAAU,IAAI,CAAC,CAAC9/B,EAAE,CAACk4H,YAAY,EACjDniG,GAAG,CAACtvB,IAAI,CAACzG,EAAE,CAACk4H,YAAY,CAAC;IACjC,CAAC,CAAC;IAEF,OAAOniG,GAAG;EACd,CAAC;EAEDzX,WAAW,CAACy6H,oBAAoB,GAAG,UAAU52G,IAAI,EAAE;IAC/C,IAAIpM,GAAG,GAAGzX,WAAW,CAACw6H,gBAAgB,CAAC32G,IAAI,CAAC;IAC5C,IAAI,CAACpM,GAAG,IAAIA,GAAG,CAACvvB,MAAM,IAAI,CAAC,EAAE;MACzB,IAAImF,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC;QACbvH,IAAI,EAAE;UACF00I,iBAAiB,EAAE;QACvB;MACJ,CAAC,CAAC;MAEF,OAAOrtI,QAAQ,CAACG,OAAO;IAC3B;IACA,OAAO2kB,eAAe,CAACwoH,0BAA0B,CAACljH,GAAG,CAAC;EAC1D,CAAC;EAED,SAASkxG,qBAAqBA,CAAC9kG,IAAI,EAAEgyE,OAAO,EAAE;IAC1C,IAAIiU,KAAK,GAAG,EAAE;IACd,IAAIye,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAACa,IAAI,CAAC;IACrD,IAAI6nG,YAAY,GAAG,CAACnD,SAAS,GAAGvmI,aAAa,CAACwkC,YAAY,KAAK,MAAM,GAAGqvE,OAAO,CAAC+kC,cAAc;IAC9F,IAAIpP,YAAY,GAAIxpI,aAAa,CAACukC,oBAAoB,IAAI,WAAW,GAAG,CAAC,GAAG,CAAE;IAE9E,IAAIsvE,OAAO,CAACp4E,aAAa,IAAIo4E,OAAO,CAACp4E,aAAa,CAACv1B,MAAM,GAAG,CAAC,EAAE;MAC3D,KAAK,IAAIoO,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGu/F,OAAO,CAACp4E,aAAa,CAACv1B,MAAM,EAAEoO,CAAC,EAAE,EAAE;QACnD,IAAIukI,WAAW,GAAGhlC,OAAO,CAACp4E,aAAa,CAACnnB,CAAC,CAAC;QAE1C,IAAIs0H,IAAI,GAAGiQ,WAAW,CAAC/zH,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;QAE1C;QACA,IAAIoxH,OAAO,GAAG;UACV1rH,UAAU,EAAExqB,aAAa,CAACyqB,UAAU;UACpC6gB,WAAW,EAAEtrC,aAAa,CAACiN,YAAY;UACvC6rI,eAAe,EAAE94I,aAAa,CAAC2qB,YAAY;UAC3C03E,aAAa,EAAEriG,aAAa,CAAC8rB,cAAc;UAC3C9oB,IAAI,EAAE61I,WAAW,UAAO,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG;UAC7Cv6G,QAAQ,EAAEu6G,WAAW,CAACv6G,QAAQ;UAC9BniB,SAAS,EAAE08H,WAAW,CAAC18H,SAAS;UAChC48H,UAAU,EAAEF,WAAW,CAAC75G,GAAG;UAC3BgjF,WAAW,EAAE62B,WAAW,CAACr2I,IAAI;UAC7Bw2I,cAAc,EAAEH,WAAW,CAACz5G,OAAO;UACnC65G,cAAc,EAAEJ,WAAW,CAACx5G,OAAO;UACnC65G,cAAc,EAAEL,WAAW,CAACv5G,OAAO;UACnC1I,QAAQ,EAAE52B,aAAa,CAAC+rB,YAAY;UACpCotH,aAAa,EAAEzP,YAAY;UAC3B5qG,SAAS,EAAGynG,SAAS,IAAIqC,IAAI,GAAG,CAAC,GAAIiQ,WAAW,CAAC/5G,SAAS,GAAG,CAAC,CAAC,GAAG+5G,WAAW,CAAC/5G,SAAS;UACvFjB,KAAK,EAAG0oG,SAAS,IAAIqC,IAAI,GAAG,CAAC,GAAIiQ,WAAW,CAACh7G,KAAK,GAAG,CAAC,CAAC,GAAGg7G,WAAW,CAACh7G,KAAK;UAC3E7J,QAAQ,EAAEuyG,SAAS,GAAG5sG,IAAI,CAACD,GAAG,CAACm/G,WAAW,CAAC/zH,KAAK,CAAC,GAAG+zH,WAAW,CAAC/zH,KAAK;UACrEgM,mBAAmB,EAAE+Q,IAAI,CAAC/Q;QAC9B,CAAC;QAED,IAAI+nH,WAAW,UAAO,KAAK,IAAI,EAAE;UAC7B,IAAI,CAACtS,SAAS,EAAE;YACZ2P,OAAO,CAACr9G,KAAK,GAAG,CAAC,CAAC,GAAG14B,aAAa,CAAC6uB,SAAS,CAAC6pH,WAAW,CAACr2G,iBAAiB,GAAG1e,QAAQ,CAAC+0H,WAAW,CAAC/zH,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5GoxH,OAAO,CAAC14G,GAAG,GAAG,CAAC,CAAC,GAAGr9B,aAAa,CAAC6uB,SAAS,CAAChR,WAAW,CAACqd,YAAY,CAACw9G,WAAW,CAACh6G,KAAK,EAAEg6G,WAAW,CAAC/zH,KAAK,GAAG+zH,WAAW,CAAC95G,qBAAqB,EAAE2qG,YAAY,CAAC,EAAEF,YAAY,CAAC;YAC1K0M,OAAO,CAACr4G,KAAK,GAAG,CAAC,CAAC,GAAGg7G,WAAW,CAACr2G,iBAAiB;UACtD,CAAC,MAAM;YACH0zG,OAAO,CAACr9G,KAAK,GAAG14B,aAAa,CAAC6uB,SAAS,CAAC6pH,WAAW,CAACx1G,WAAW,EAAE,CAAC,CAAC;YACnE6yG,OAAO,CAAC14G,GAAG,GAAGr9B,aAAa,CAAC6uB,SAAS,CAAC6pH,WAAW,CAACv1G,cAAc,EAAEkmG,YAAY,CAAC;YAC/E0M,OAAO,CAACr4G,KAAK,GAAG+qG,IAAI,GAAG,CAAC,GAAGiQ,WAAW,CAACz1G,UAAU,GAAG,CAAC,CAAC,GAAGy1G,WAAW,CAACz1G,UAAU;UACnF;QACJ,CAAC,MAAM;UACH,IAAI,CAACmjG,SAAS,EAAE;YACZ2P,OAAO,CAACr9G,KAAK,GAAGggH,WAAW,CAACh0H,MAAM;YAClCqxH,OAAO,CAAC14G,GAAG,GAAGq7G,WAAW,CAACr7G,GAAG;UACjC,CAAC,MAAM;YACH04G,OAAO,CAACr9G,KAAK,GAAGggH,WAAW,CAACx1G,WAAW;YACvC6yG,OAAO,CAAC14G,GAAG,GAAGq7G,WAAW,CAACv1G,cAAc;UAC5C;QACJ;QAEAwkF,KAAK,CAAC3hH,IAAI,CAAC+vI,OAAO,CAAC;MACvB;IACJ;IAEA,IAAIkD,MAAM,GAAG,CAAC,CAACv3G,IAAI,CAACw4C,UAAU,IAAIx4C,IAAI,CAACw4C,UAAU,CAACn0E,MAAM,GAAG,CAAC,GAAG27B,IAAI,CAACw4C,UAAU,GAAG,IAAI;IACrF,IAAIksD,SAAS,EAAE;MACX;MACA6S,MAAM,GAAGx+G,4FAAuB,CAACy+G,aAAa,CAACxlC,OAAO,CAAC;IAC3D;IAEA,IAAIulC,MAAM,EAAE;MAER,IAAIE,WAAW,GAAG,CAAC,CAAC;MAEpB,KAAK,IAAIhlI,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG8kI,MAAM,CAAClzI,MAAM,EAAEoO,CAAC,EAAE,EAAE;QACpC,IAAI4J,SAAS,GAAGk7H,MAAM,CAAC9kI,CAAC,CAAC;QAEzB,IAAI,OAAOglI,WAAW,CAACp7H,SAAS,CAAC+sH,WAAW,CAAC,KAAK,WAAW,EAAE;UAC3DqO,WAAW,CAACp7H,SAAS,CAAC+sH,WAAW,CAAC,GAAG;YACjC9uH,SAAS,EAAE+B,SAAS,CAAC+sH,WAAW;YAChCzgH,UAAU,EAAExqB,aAAa,CAACyqB,UAAU;YACpC6gB,WAAW,EAAEtrC,aAAa,CAACiN,YAAY;YACvC6rI,eAAe,EAAE94I,aAAa,CAAC2qB,YAAY;YAC3C03E,aAAa,EAAEriG,aAAa,CAAC8rB,cAAc;YAC3CytH,aAAa,EAAEr7H,SAAS,CAAC1b,IAAI;YAC7BwwG,aAAa,EAAE90F,SAAS,CAACxI,KAAK;YAC9Bq9F,iBAAiB,EAAE70F,SAAS,CAAClb,IAAI;YACjCw2I,sBAAsB,EAAEt7H,SAAS,CAACQ,iBAAiB;YACnD1b,IAAI,EAAE,GAAG;YACT4zB,QAAQ,EAAE52B,aAAa,CAAC+rB,YAAY;YACpCotH,aAAa,EAAEzP,YAAY;YAC3B5qG,SAAS,EAAE,CAAC;YACZjB,KAAK,EAAE3f,SAAS,CAAC2a,KAAK;YACtB7E,QAAQ,EAAE,CAAC;YACXwJ,GAAG,EAAEtf,SAAS,CAACsf,GAAG;YAClB3E,KAAK,EAAE3a,SAAS,CAAC2a,KAAK;YACtB/H,mBAAmB,EAAE+Q,IAAI,CAAC/Q;UAC9B,CAAC;QACL,CAAC,MAAM;UACHwoH,WAAW,CAACp7H,SAAS,CAAC+sH,WAAW,CAAC,CAACptG,KAAK,IAAI3f,SAAS,CAAC2a,KAAK;UAC3DygH,WAAW,CAACp7H,SAAS,CAAC+sH,WAAW,CAAC,CAACztG,GAAG,IAAItf,SAAS,CAACsf,GAAG;UACvD87G,WAAW,CAACp7H,SAAS,CAAC+sH,WAAW,CAAC,CAACpyG,KAAK,IAAI3a,SAAS,CAAC2a,KAAK;UAC3DygH,WAAW,CAACp7H,SAAS,CAAC+sH,WAAW,CAAC,CAACuO,sBAAsB,IAAIt7H,SAAS,CAACQ,iBAAiB;QAC5F;MACJ;MAEA,KAAK,IAAIpU,EAAE,IAAIgvI,WAAW,EAAE;QACxB,IAAI1vI,IAAI,GAAG0vI,WAAW,CAAChvI,EAAE,CAAC;QAE1BV,IAAI,CAACi0B,KAAK,GAAG19B,aAAa,CAAC6uB,SAAS,CAACplB,IAAI,CAACi0B,KAAK,EAAE,CAAC,CAAC;QACnDj0B,IAAI,CAAC4zB,GAAG,GAAGr9B,aAAa,CAAC6uB,SAAS,CAACplB,IAAI,CAAC4zB,GAAG,EAAE,CAAC,CAAC;QAC/C5zB,IAAI,CAACivB,KAAK,GAAG14B,aAAa,CAAC6uB,SAAS,CAACplB,IAAI,CAACivB,KAAK,EAAE,CAAC,CAAC;QAEnDivF,KAAK,CAAC3hH,IAAI,CAACyD,IAAI,CAAC;MACpB;IACJ;IAEA,IAAI,CAAC28H,SAAS,EAAE;MACZ,IAAI1yB,OAAO,CAAC22B,aAAa,GAAG,CAAC,IAAI32B,OAAO,CAACl4E,QAAQ,GAAG,CAAC,EAAE;QACnD,IAAIu6G,OAAO,GAAG;UACV1rH,UAAU,EAAExqB,aAAa,CAACyqB,UAAU;UACpC6gB,WAAW,EAAEtrC,aAAa,CAACiN,YAAY;UACvC6rI,eAAe,EAAE94I,aAAa,CAAC2qB,YAAY;UAC3C03E,aAAa,EAAEriG,aAAa,CAAC8rB,cAAc;UAC3C9oB,IAAI,EAAE,GAAG;UACT4zB,QAAQ,EAAE52B,aAAa,CAAC+rB,YAAY;UACpCotH,aAAa,EAAEzP,YAAY;UAC3B5qG,SAAS,EAAE,CAAC;UACZjB,KAAK,EAAE,CAAC,CAAC,GAAGg2E,OAAO,CAAC22B,aAAa;UACjCx2G,QAAQ,EAAE,CAAC;UACXwJ,GAAG,EAAEq2E,OAAO,CAACj4E,WAAW;UACxB/C,KAAK,EAAE,CAAC,CAAC,GAAGg7E,OAAO,CAAC22B,aAAa;UACjC15G,mBAAmB,EAAE+Q,IAAI,CAAC/Q;QAC9B,CAAC;QAEDg3F,KAAK,CAAC3hH,IAAI,CAAC+vI,OAAO,CAAC;MACvB;IACJ,CAAC,MAAM;MACH,IAAIriC,OAAO,CAACp2D,aAAa,GAAG,CAAC,IAAIo2D,OAAO,CAACl4E,QAAQ,GAAG,CAAC,EAAE;QACnD,IAAIu6G,OAAO,GAAG;UACV1rH,UAAU,EAAExqB,aAAa,CAACyqB,UAAU;UACpC6gB,WAAW,EAAEtrC,aAAa,CAACiN,YAAY;UACvC6rI,eAAe,EAAE94I,aAAa,CAAC2qB,YAAY;UAC3C03E,aAAa,EAAEriG,aAAa,CAAC8rB,cAAc;UAC3C9oB,IAAI,EAAE,GAAG;UACT4zB,QAAQ,EAAE52B,aAAa,CAAC+rB,YAAY;UACpCotH,aAAa,EAAEzP,YAAY;UAC3B5qG,SAAS,EAAE,CAAC;UACZjB,KAAK,EAAE,CAAC,CAAC,GAAGg2E,OAAO,CAACp2D,aAAa;UACjCzpB,QAAQ,EAAE,CAAC;UACXwJ,GAAG,EAAEq2E,OAAO,CAACj4E,WAAW;UACxB/C,KAAK,EAAE,CAAC,CAAC,GAAGg7E,OAAO,CAACp2D,aAAa;UACjC3sB,mBAAmB,EAAE+Q,IAAI,CAAC/Q;QAC9B,CAAC;QAEDg3F,KAAK,CAAC3hH,IAAI,CAAC+vI,OAAO,CAAC;MACvB;IACJ;IAEA,IAAIuD,GAAG,GAAG,CAAClT,SAAS,IAAI5sG,IAAI,CAACD,GAAG,CAACm6E,OAAO,CAAC/2E,YAAY,CAAC,GAAG,CAAC,IAAI,OAAO+2E,OAAO,CAAC6lC,kBAAkB,KAAK,WAAW,GAC3G7lC,OAAO,CAAC/2E,YAAY,GAAG,CAAC;IAC5B,IAAIypG,SAAS,EACTkT,GAAG,GAAG7+G,4FAAuB,CAAC++G,wBAAwB,CAAC9lC,OAAO,CAAC;IACnE,IAAIl6E,IAAI,CAACD,GAAG,CAAC+/G,GAAG,CAAC,GAAG,CAAC,EAAE;MACnB,IAAIG,IAAI,GAAGz5I,aAAa,CAAC6uB,SAAS,CAACyqH,GAAG,EAAE,CAAC,CAAC;MAE1C,IAAIvD,OAAO,GAAG;QACV1rH,UAAU,EAAExqB,aAAa,CAACyqB,UAAU;QACpC6gB,WAAW,EAAEtrC,aAAa,CAACiN,YAAY;QACvC6rI,eAAe,EAAE94I,aAAa,CAAC2qB,YAAY;QAC3C03E,aAAa,EAAEriG,aAAa,CAAC8rB,cAAc;QAC3C9oB,IAAI,EAAE,GAAG;QACT4zB,QAAQ,EAAE52B,aAAa,CAAC+rB,YAAY;QACpCotH,aAAa,EAAEzP,YAAY;QAC3B5qG,SAAS,EAAE,CAAC;QACZjB,KAAK,EAAE+7G,IAAI;QACX5lH,QAAQ,EAAE,CAAC;QACXwJ,GAAG,EAAE,CAAC;QACN3E,KAAK,EAAE+gH,IAAI;QACX9oH,mBAAmB,EAAE+Q,IAAI,CAAC/Q;MAC9B,CAAC;MAEDg3F,KAAK,CAAC3hH,IAAI,CAAC+vI,OAAO,CAAC;IACvB;IAEA,IAAI,CAAC3P,SAAS,IAAI,CAAC,CAAC1yB,OAAO,CAAC6lC,kBAAkB,IAAI//G,IAAI,CAACD,GAAG,CAACm6E,OAAO,CAAC6lC,kBAAkB,CAAC,GAAG,CAAC,EAAE;MACxF,IAAIxD,OAAO,GAAG;QACV1rH,UAAU,EAAExqB,aAAa,CAACyqB,UAAU;QACpC6gB,WAAW,EAAEtrC,aAAa,CAACiN,YAAY;QACvC6rI,eAAe,EAAE94I,aAAa,CAAC2qB,YAAY;QAC3C03E,aAAa,EAAEriG,aAAa,CAAC8rB,cAAc;QAC3C9oB,IAAI,EAAE,GAAG;QACT4zB,QAAQ,EAAE52B,aAAa,CAAC+rB,YAAY;QACpCotH,aAAa,EAAEzP,YAAY;QAC3B5qG,SAAS,EAAE,CAAC;QACZjB,KAAK,EAAE19B,aAAa,CAAC6uB,SAAS,CAAC,CAAC,CAAC,GAAG6kF,OAAO,CAAC6lC,kBAAkB,EAAE,CAAC,CAAC;QAClE1lH,QAAQ,EAAE,CAAC;QACXwJ,GAAG,EAAE,CAAC;QACN3E,KAAK,EAAE14B,aAAa,CAAC6uB,SAAS,CAAC,CAAC,CAAC,GAAG6kF,OAAO,CAAC6lC,kBAAkB,EAAE,CAAC,CAAC;QAClE5oH,mBAAmB,EAAE+Q,IAAI,CAAC/Q;MAC9B,CAAC;MAEDg3F,KAAK,CAAC3hH,IAAI,CAAC+vI,OAAO,CAAC;IACvB;IAEA,OAAOpuB,KAAK;EAChB;EAEA9pG,WAAW,CAAC0sH,YAAY,GAAG,UAAUh7H,WAAW,EAAE;IAC9C,IAAImqI,eAAe,GAAG,CAAC;IACvB,IAAI,CAAC,CAACnqI,WAAW,CAAC2qE,UAAU,IAAI3qE,WAAW,CAAC2qE,UAAU,CAACn0E,MAAM,GAAG,CAAC,EAAE;MAC/DtC,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC2qE,UAAU,EAAE,UAAUr0E,GAAG,EAAEtG,EAAE,EAAE;QAC9Cm6I,eAAe,IAAIn6I,EAAE,CAACsrI,eAAe;MACzC,CAAC,CAAC;IACN;IAEA,OAAO6O,eAAe;EAC1B,CAAC;EAED77H,WAAW,CAAC2sH,eAAe,GAAG,UAAUj7H,WAAW,EAAE;IACjD,IAAIoqI,kBAAkB,GAAG,CAAC;IAC1B,IAAI,CAAC,CAACpqI,WAAW,CAAC2qE,UAAU,IAAI3qE,WAAW,CAAC2qE,UAAU,CAACn0E,MAAM,GAAG,CAAC,EAAE;MAC/DtC,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC2qE,UAAU,EAAE,UAAUr0E,GAAG,EAAEtG,EAAE,EAAE;QAC9Co6I,kBAAkB,IAAIp6I,EAAE,CAAC89B,GAAG;MAChC,CAAC,CAAC;IACN;IAEA,OAAOs8G,kBAAkB;EAC7B,CAAC;EAED97H,WAAW,CAACipH,cAAc,GAAG,UAAUplG,IAAI,EAAEgyE,OAAO,EAAE3oE,IAAI,EAAE;IACxD,IAAIzpB,GAAG,GAAG;MACNogB,IAAI,EAAEA,IAAI;MACVgyE,OAAO,EAAEA,OAAO;MAChB3oE,IAAI,EAAEA;IACV,CAAC;IAED,IAAI+wC,KAAK,GAAG97E,aAAa,CAAC67E,YAAY,CAAC,CAAC;IACxC,IAAI,CAACC,KAAK,EACNA,KAAK,GAAG,EAAE;IAEdA,KAAK,CAAC91E,IAAI,CAACsb,GAAG,CAAC;IACfthB,aAAa,CAACi8E,cAAc,CAACH,KAAK,CAAC;IACnC;IACA97E,aAAa,CAAC65E,gBAAgB,CAAC,IAAI,CAAC;EACxC,CAAC;EAEDh8D,WAAW,CAAC+7H,sBAAsB,GAAG,KAAK;EAE1C/7H,WAAW,CAACg8H,kBAAkB,GAAG,YAAY;IAEzC,IAAIh8H,WAAW,CAAC+7H,sBAAsB,EAAE;IACxC;IACA,IAAIt4H,GAAG,GAAGthB,aAAa,CAAC28E,kBAAkB,CAAC,CAAC;IAC5C,IAAI,CAACr7D,GAAG,EAAE;MACN1hB,UAAU,CAAC+K,UAAU,CAACzK,SAAS,CAACgxC,MAAM,CAACo0B,wBAAwB,EAAEplE,SAAS,CAACgxC,MAAM,CAACq0B,0BAA0B,CAAC;MAC7G;IACJ;IAEA1nD,WAAW,CAAC+7H,sBAAsB,GAAG,IAAI;IAEzC/5I,aAAa,CAACmlC,YAAY,CAAC,CAAC;;IAE5B;IACA,IAAK,CAAC,CAAC1jB,GAAG,CAACypB,IAAI,CAACjH,aAAa,IAAIxiB,GAAG,CAACypB,IAAI,CAACjH,aAAa,IAAIjkC,aAAa,CAACikC,aAAa,IACjF,CAAC,CAACxiB,GAAG,CAACypB,IAAI,CAAC9G,QAAQ,IAAI3iB,GAAG,CAACypB,IAAI,CAAC9G,QAAQ,IAAIpkC,aAAa,CAACokC,QAAS,EAAE;MACtE;MACApmB,WAAW,CAAC+7H,sBAAsB,GAAG,KAAK;MAC1C,OAAO55I,aAAa,CAAC63C,cAAc,CAAC,KAAK,CAAC;IAC9C;IAEAh6B,WAAW,CAAC6xG,WAAW,CAACpuG,GAAG,CAACogB,IAAI,EAAEpgB,GAAG,CAACoyF,OAAO,EAAEpyF,GAAG,CAACypB,IAAI,CAAC,CACnDpnC,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAIA,GAAG,IAAI,OAAOA,GAAG,CAAC0uC,MAAM,KAAK,WAAW,IAAI1uC,GAAG,CAAC0uC,MAAM,KAAK,CAAC,CAAC,EAAE;QAC/Dp2B,GAAG,CAACypB,IAAI,CAACqoD,QAAQ,GAAGv1E,WAAW,CAACkyF,aAAa,CAACC,YAAY;QAC1D,IAAI81B,aAAa,GAAGjmI,aAAa,CAACX,MAAM,IAAIwV,UAAU,CAACE,WAAW,GAAGH,eAAe,GAAGD,eAAe;QACtG,OAAOsxH,aAAa,CAAC7yC,cAAc,CAAC3xE,GAAG,CAACoyF,OAAO,EAAEpyF,GAAG,CAACypB,IAAI,EAAElrC,aAAa,CAACX,MAAM,GAAG8J,GAAG,CAACwR,OAAO,GAAGlK,SAAS,CAAC,CAAC3M,IAAI,CAAC,YAAW;UACvH3D,aAAa,CAACy8E,yBAAyB,CAACn7D,GAAG,CAAC;UAC5CzD,WAAW,CAAC+7H,sBAAsB,GAAG,KAAK;UAC1C,OAAO/7H,WAAW,CAACg8H,kBAAkB,CAAC,CAAC;QAC3C,CAAC,CAAC;MACN,CAAC,MAAM;QACH75I,aAAa,CAACy8E,yBAAyB,CAACn7D,GAAG,CAAC;QAC5CzD,WAAW,CAAC+7H,sBAAsB,GAAG,KAAK;QAC1C,OAAO/7H,WAAW,CAACg8H,kBAAkB,CAAC,CAAC;MAC3C;IACJ,CAAC,EAAE,UAAU/1I,GAAG,EAAE;MACd;MACA9D,aAAa,CAACs8E,sBAAsB,CAACh7D,GAAG,CAAC;MACzC1hB,UAAU,CAAC+K,UAAU,CAACzK,SAAS,CAACgxC,MAAM,CAACo0B,wBAAwB,EAAEplE,SAAS,CAACgxC,MAAM,CAACs0B,uBAAuB,CAAC;MAC1G3nD,WAAW,CAAC+7H,sBAAsB,GAAG,KAAK;IAC9C,CAAC,CAAC;EAEV,CAAC;EAED,IAAI/5I,aAAa,CAACX,MAAM,EAAE;IACtB27B,SAAS,CAAC,YAAY;MAClBhd,WAAW,CAACg8H,kBAAkB,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;EAClB;EAEAh8H,WAAW,CAACi8H,sBAAsB,GAAG,IAAI;EACzCj8H,WAAW,CAACk8H,cAAc,GAAG,IAAI;EAEjCl8H,WAAW,CAACm8H,YAAY,GAAG,YAAY;IACnC,IAAI9uI,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IACtB,IAAIH,EAAE,GAAGC,QAAQ,CAACG,OAAO;IAEzB,IAAI+yC,WAAW,GAAG,IAAIhjB,IAAI,CAAC,CAAC;IAC5B,IAAIvd,WAAW,CAACi8H,sBAAsB,IAAI,IAAI,IAAIj8H,WAAW,CAACi8H,sBAAsB,CAACtvD,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,GAAGpsC,WAAW,CAACosC,OAAO,CAAC,CAAC,EAAE;MAEhIv/E,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;QACjB,OAAOqsB,eAAe,CAACiqH,cAAc,CAAC,CAAC;MAC3C,CAAC,CAAC,CACDt2I,IAAI,CAAC,UAAUqF,GAAG,EAAE;QAEjB6U,WAAW,CAACk8H,cAAc,GAAG/wI,GAAG,CAACnF,IAAI,CAACq2E,UAAU;QAChDr8D,WAAW,CAACi8H,sBAAsB,GAAG17F,WAAW;QAChD,IAAI,CAACv+C,aAAa,CAACX,MAAM,IAAI,CAACwV,UAAU,CAACE,WAAW,EAAE;UAClD,OAAOJ,eAAe,CAACwyF,WAAW,CAACnnG,aAAa,CAACikC,aAAa,EAAE,YAAY,EACpEzM,IAAI,CAACC,SAAS,CAACzZ,WAAW,CAACk8H,cAAc,CAAC,CAAC,CAC9Cp2I,IAAI,CAAC,YAAY;YACd,OAAO3D,aAAa,CAAC63C,cAAc,CAACh6B,WAAW,CAACk8H,cAAc,CAAC;UACnE,CAAC,CAAC;QACV,CAAC,MACG,OAAO/5I,aAAa,CAAC63C,cAAc,CAACh6B,WAAW,CAACk8H,cAAc,CAAC;MACvE,CAAC,CAAC,SACI,CAAC,UAAUj2I,GAAG,EAAE;QAClB,IAAI,CAACjE,aAAa,CAACX,MAAM,IAAI,CAACwV,UAAU,CAACE,WAAW,IAAI9Q,GAAG,CAAC4zC,MAAM,KAAK,CAAC,CAAC,EAAE;UACvE,OAAOljC,eAAe,CAAC0yF,UAAU,CAACrnG,aAAa,CAACikC,aAAa,EAAE,YAAY,CAAC,CACvEngC,IAAI,CAAC,UAAUqF,GAAG,EAAE;YACjB,IAAIA,GAAG,IAAI,IAAI,EAAE;cACb6U,WAAW,CAACk8H,cAAc,GAAG,IAAI;cACjC,OAAO/5I,aAAa,CAAC83C,aAAa,CAAC,IAAI,CAAC;YAC5C,CAAC,MAAM;cACHj6B,WAAW,CAACk8H,cAAc,GAAG1iH,IAAI,CAAC2T,KAAK,CAAChiC,GAAG,CAAC2mH,IAAI,CAAC;cACjD,OAAO3vH,aAAa,CAAC63C,cAAc,CAACh6B,WAAW,CAACk8H,cAAc,CAAC;YACnE;UACJ,CAAC,CAAC;QACV,CAAC,MAAM,IAAIj2I,GAAG,CAAC4zC,MAAM,KAAK,CAAC,CAAC,IAAI75B,WAAW,CAACk8H,cAAc,IAAI,IAAI,EAAE;UAChEl8H,WAAW,CAACk8H,cAAc,GAAG,IAAI;UACjC,OAAO/5I,aAAa,CAAC83C,aAAa,CAACh0C,GAAG,CAAC;QAC3C,CAAC,MAAM;UACH,OAAO9D,aAAa,CAAC63C,cAAc,CAACh6B,WAAW,CAACk8H,cAAc,CAAC;QACnE;MACJ,CAAC,CAAC;IACV,CAAC,MAAM;MACH9uI,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;QACrB,OAAO3D,aAAa,CAAC63C,cAAc,CAACh6B,WAAW,CAACk8H,cAAc,CAAC;MACnE,CAAC,CAAC;IACN;IAEA,OAAO9uI,EAAE,CAACtH,IAAI,CAAC,UAAUqa,UAAU,EAAE;MACjC,IAAI8uH,YAAY,GAAGjtI,aAAa,CAACirC,gBAAgB,GAAGzT,IAAI,CAAC2T,KAAK,CAACnrC,aAAa,CAACirC,gBAAgB,CAAC,GAAG,IAAI;MACrG,IAAI,CAAC,CAAC9sB,UAAU,IAAI,CAAC,CAAC8uH,YAAY,EAAE;QAChCrpI,CAAC,CAACmC,IAAI,CAACoY,UAAU,EAAE,UAAUnY,GAAG,EAAEmvC,CAAC,EAAE;UACjCA,CAAC,CAACrnC,SAAS,GAAGm/H,YAAY,CAACvvG,MAAM;QACrC,CAAC,CAAC;QAEF,OAAOv9B,aAAa,CAAC63C,cAAc,CAAC75B,UAAU,CAAC;MACnD;IACJ,CAAC,CAAC;EACN,CAAC;;EAED;EACA;EACAH,WAAW,CAACq8H,mBAAmB,GAAG,UAAUC,QAAQ,EAAE;IAClD,IAAIC,aAAa,GAAGv6I,aAAa,CAAC0nC,qBAAqB,CAAC,CAAC;IACzD,IAAI,CAAC6yG,aAAa,IAAIA,aAAa,CAACr0I,MAAM,KAAK,CAAC,IAAI,CAACo0I,QAAQ,IAAIA,QAAQ,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;;IAE1F,IAAInxI,GAAG,GAAG,EAAE;IACZ,IAAIqxI,UAAU,GAAG7gH,IAAI,CAACW,IAAI,CAACggH,QAAQ,CAAC,CAAC,CAAC;;IAEtC,IAAIzpD,EAAE,GAAG91D,4CAAU,CAAC/wB,IAAI,CAACuwI,aAAa,CAAC,CAClC1uF,KAAK,CAAC,UAAU/lD,CAAC,EAAE;MAChB,OAAOA,CAAC,CAAC20I,OAAO,GAAGD,UAAU;IACjC,CAAC,CAAC,CACD1uF,MAAM,CAAC,UAAUhmD,CAAC,EAAE;MACjB,OAAOA,CAAC,CAAC20I,OAAO;IACpB,CAAC,CAAC;IAEN,IAAIC,uBAAuB,GAAG7pD,EAAE,CAACp8E,IAAI,CAACo8E,EAAE,EAChC,UAAU3H,CAAC,EAAE;MACT,OAAO,CAAC;IACZ,CAAC,EACD,UAAUqzC,CAAC,EAAE;MACT,OAAO,CAAC;IACZ,CAAC,EACD,UAAUrzC,CAAC,EAAEqzC,CAAC,EAAE;MACZ,OAAO;QACH9kE,KAAK,EAAEyxB,CAAC;QACR7Q,MAAM,EAAEkkD;MACZ,CAAC;IACL,CAAC,CAAC,CACL/8D,QAAQ,CAAC,UAAU15D,CAAC,EAAE;MACnB,OAAOA,CAAC,CAAC2xD,KAAK,GAAG3xD,CAAC,CAACuyE,MAAM;IAC7B,CAAC,CAAC,CACDxsB,KAAK,CAAC,UAAU/lD,CAAC,EAAE;MAChB,OAAOA,CAAC,CAAC2xD,KAAK,GAAG3xD,CAAC,CAACuyE,MAAM,GAAGmiE,UAAU;IAC1C,CAAC,CAAC,CACD1uF,MAAM,CAAC,UAAUhmD,CAAC,EAAE;MACjB,OAAOA,CAAC,CAAC2xD,KAAK,GAAG3xD,CAAC,CAACuyE,MAAM;IAC7B,CAAC,CAAC;IAEN,IAAIsiE,YAAY,GAAG5/G,4CAAU,CAAC/wB,IAAI,CAACuwI,aAAa,CAAC,CAC5C1uF,KAAK,CAAC,UAAU/lD,CAAC,EAAE;MAChB,OAAOA,CAAC,CAAC20I,OAAO,GAAGD,UAAU;IACjC,CAAC,CAAC,CACD1uF,MAAM,CAAC,UAAUhmD,CAAC,EAAE;MACjB,OAAOA,CAAC,CAAC20I,OAAO;IACpB,CAAC,CAAC;IAENtxI,GAAG,GAAG4xB,4CAAU,CAAC/wB,IAAI,CAAC,CAACwwI,UAAU,CAAC,CAAC,CAC9BI,KAAK,CAACF,uBAAuB,CAAC,CAC9BE,KAAK,CAACD,YAAY,CAAC,CACnB9uF,KAAK,CAAC,UAAU/lD,CAAC,EAAE;MAChB,OAAOA,CAAC,GAAGw0I,QAAQ;IACvB,CAAC,CAAC,CACD96E,QAAQ,CAAC,CAAC,CACVvO,OAAO,CAAC,CAAC,CACTgiC,IAAI,CAAC,CAAC,CAAC,CACP9hC,OAAO,CAAC,CAAC;IAEd,OAAOhoD,GAAG;EACd,CAAC;;EAED;EACA;EACA;EACA6U,WAAW,CAAC68H,wBAAwB,GAAG,UAAUh5G,IAAI,EAAEw5B,QAAQ,EAAE;IAC7Dz3D,CAAC,CAACmC,IAAI,CAAC87B,IAAI,CAACiuF,IAAI,CAACn5F,KAAK,EAAE,UAAUriB,CAAC,EAAE4sF,CAAC,EAAE;MACpC7lC,QAAQ,CAAC6lC,CAAC,EAAE,IAAI,CAAC;IACrB,CAAC,CAAC;IAEFt9F,CAAC,CAACmC,IAAI,CAAC87B,IAAI,CAACiuF,IAAI,CAAC9tF,OAAO,EAAE,UAAU1tB,CAAC,EAAEwmI,GAAG,EAAE;MACxCl3I,CAAC,CAACmC,IAAI,CAAC+0I,GAAG,CAACnkH,KAAK,EAAE,UAAUriB,CAAC,EAAE4sF,CAAC,EAAE;QAC9B7lC,QAAQ,CAAC6lC,CAAC,EAAE,KAAK,CAAC;MACtB,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAEDljF,WAAW,CAAC+8H,2BAA2B,GAAG,UAAUl5G,IAAI,EAAEw5B,QAAQ,EAAE;IAChEz3D,CAAC,CAACmC,IAAI,CAAC87B,IAAI,CAACiuF,IAAI,CAACl3F,QAAQ,EAAE,UAAUtkB,CAAC,EAAE0uB,CAAC,EAAE;MACvCq4B,QAAQ,CAACr4B,CAAC,EAAE,IAAI,CAAC;IACrB,CAAC,CAAC;IAEFp/B,CAAC,CAACmC,IAAI,CAAC87B,IAAI,CAACiuF,IAAI,CAAC9tF,OAAO,EAAE,UAAU1tB,CAAC,EAAEwmI,GAAG,EAAE;MACxCl3I,CAAC,CAACmC,IAAI,CAAC+0I,GAAG,CAACliH,QAAQ,EAAE,UAAUtkB,CAAC,EAAE0uB,CAAC,EAAE;QACjCq4B,QAAQ,CAACr4B,CAAC,EAAE,KAAK,CAAC;MACtB,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAEDhlB,WAAW,CAACg9H,6BAA6B,GAAG,UAAUn5G,IAAI,EAAEw5B,QAAQ,EAAE;IAClEz3D,CAAC,CAACmC,IAAI,CAAC87B,IAAI,CAACiuF,IAAI,CAACz1C,UAAU,EAAE,UAAU/lE,CAAC,EAAE6gC,CAAC,EAAE;MACzCkmB,QAAQ,CAAClmB,CAAC,EAAE,IAAI,CAAC;IACrB,CAAC,CAAC;IAEFvxC,CAAC,CAACmC,IAAI,CAAC87B,IAAI,CAACiuF,IAAI,CAAC9tF,OAAO,EAAE,UAAU1tB,CAAC,EAAEwmI,GAAG,EAAE;MACxCl3I,CAAC,CAACmC,IAAI,CAAC+0I,GAAG,CAACzgE,UAAU,EAAE,UAAU/lE,CAAC,EAAE6gC,CAAC,EAAE;QACnCkmB,QAAQ,CAAClmB,CAAC,EAAE,KAAK,CAAC;MACtB,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAEDn3B,WAAW,CAACi9H,aAAa,GAAG,UAAUv7I,EAAE,EAAE;IACtC,IAAIw7I,GAAG,GAAGx7I,EAAE,CAACihC,SAAS;IACtB,IAAIu6G,GAAG,CAAC/rI,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;MACzC+rI,GAAG,GAAG,oBAAoB;IAC9B;IAEA,IAAI/xI,GAAG,GAAG,IAAI;IAEd,QAAQ+xI,GAAG;MACP,KAAK,SAAS;MACd,KAAK,WAAW;MAChB,KAAK,oBAAoB;MACzB,KAAK,eAAe;MACpB,KAAK,MAAM;QACP/xI,GAAG,GAAG+xI,GAAG,GAAG,OAAO;QACnB;MACJ,KAAK,aAAa;QACd/xI,GAAG,GAAG,kBAAkB,GAAGzJ,EAAE,CAACmkC,mBAAmB,GAAG,OAAO,GAAGnkC,EAAE,CAAC2rI,mBAAmB,GAAG,OAAO;QAC9F,IAAI3rI,EAAE,CAACqhC,SAAS,EACZ53B,GAAG,IAAIzJ,EAAE,CAACqhC,SAAS,CAACkqG,WAAW,GAAG,OAAO;QAC7C;MACJ;QACI,IAAI,CAACjtH,WAAW,CAACunH,qBAAqB,CAAC2V,GAAG,CAAC,EAAE;UACzC/xI,GAAG,GAAG+xI,GAAG,GAAG,OAAO;UACnB,IAAIx7I,EAAE,CAACqhC,SAAS,EAAE;YACd53B,GAAG,IAAI,YAAY,GAAGzJ,EAAE,CAACqhC,SAAS,CAACkqG,WAAW,GAAG,OAAO;UAC5D;QACJ;QACA;IACR;IAEA,OAAO9hI,GAAG;EACd,CAAC;EAED6U,WAAW,CAACm9H,eAAe,GAAG,UAAUz7I,EAAE,EAAE;IACxC,IAAIw7I,GAAG,GAAGx7I,EAAE,CAACyrI,gBAAgB;IAC7B,IAAI+P,GAAG,CAAC/rI,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;MACzC+rI,GAAG,GAAG,oBAAoB;IAC9B;IAEA,IAAI/xI,GAAG,GAAG,IAAI;IAEd,QAAQ+xI,GAAG;MACP,KAAK,SAAS;MACd,KAAK,WAAW;MAChB,KAAK,oBAAoB;MACzB,KAAK,eAAe;MACpB,KAAK,MAAM;QACP/xI,GAAG,GAAG+xI,GAAG,GAAG,OAAO;QACnB;MACJ,KAAK,aAAa;QACd/xI,GAAG,GAAG,kBAAkB,GAAGzJ,EAAE,CAACmkC,mBAAmB,GAAG,OAAO,GAAGnkC,EAAE,CAAC2rI,mBAAmB,GAAG,OAAO;QAC9FliI,GAAG,IAAIzJ,EAAE,CAACurI,WAAW,GAAG,OAAO;QAC/B;MACJ;QACI,IAAI,CAACjtH,WAAW,CAACunH,qBAAqB,CAAC2V,GAAG,CAAC,EAAE;UACzC/xI,GAAG,GAAG+xI,GAAG,GAAG,OAAO;UACnB/xI,GAAG,IAAI,YAAY,GAAGzJ,EAAE,CAACurI,WAAW,GAAG,OAAO;QAClD;QACA;IACR;IAEA,OAAO9hI,GAAG;EACd,CAAC;EAED6U,WAAW,CAACsvH,yBAAyB,GAAG,UAAU9sG,OAAO,EAAE;IACvD,IAAI,CAACA,OAAO,CAACO,SAAS,EAClB,OAAOP,OAAO,CAAC3b,MAAM;IAEzB,OAAO2b,OAAO,CAAC3b,MAAM,IAChB2b,OAAO,CAAC2sG,gBAAgB,GACrB3sG,OAAO,CAAC2sG,gBAAgB,CAACtB,sBAAsB,GAC/CrrG,OAAO,CAACO,SAAS,CAAC8qG,sBAAsB,CAAC;EACrD,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA7tH,WAAW,CAACo9H,sBAAsB,GAAG,UAAUC,WAAW,EAAEC,iBAAiB,EAAE/mC,QAAQ,EAAEgnC,gBAAgB,EAAE;IACvG,IAAI,CAACF,WAAW,EAAE;;IAElB;IACA;IACA;IACA,IAAIG,aAAa,GAAGH,WAAW,CAACI,aAAa,GAAGJ,WAAW,CAAC55G,cAAc;IAE1E,IAAIi6G,YAAY,GAAGv7I,aAAa,CAACg9E,SAAS,CAACk+D,WAAW,CAAC35G,WAAW,CAAC,CAAC77B,MAAM,CAAC,UAAUm9B,CAAC,EAAE;MACpF,OAAOA,CAAC,CAACrC,SAAS,KAAK,MAAM;IACjC,CAAC,CAAC;IACF,IAAIg7G,QAAQ,GAAGD,YAAY,CAACx1I,MAAM,GAAG,CAAC,GAAGyzB,IAAI,CAACuwC,GAAG,CAACwxE,YAAY,CAAC,CAAC,CAAC,CAAC72H,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC;IAEhF,IAAI+2H,kBAAkB,GAAGz7I,aAAa,CAAC6uB,SAAS,CAACqsH,WAAW,CAAC75G,SAAS,IAAI,CAAC,GAAG,CAAC,GAC3E,CAAC65G,WAAW,CAAC/5G,cAAc,GAAG+5G,WAAW,CAAC95G,cAAc,GAAGvjB,WAAW,CAAC69H,2BAA2B,CAACP,iBAAiB,CAAC,KACpHE,aAAa,GAAGH,WAAW,CAAC75G,SAAS,CAAC,EAAE,CAAC,CAAC;IAE/C,IAAIm6G,QAAQ,GAAGpnC,QAAQ,CAACunC,IAAI,EAAE;MAC1B;MACAF,kBAAkB,GAAG,CAAC;IAC1B;IAEA,IAAIG,yBAAyB,GAAG57I,aAAa,CAAC6uB,SAAS,CAACqsH,WAAW,CAAC75G,SAAS,IAAI,CAAC,GAAG,CAAC,GAClF,CAAC65G,WAAW,CAAC/5G,cAAc,GAAG+5G,WAAW,CAAC95G,cAAc,GAAGvjB,WAAW,CAAC69H,2BAA2B,CAACP,iBAAiB,CAAC,KACpHE,aAAa,GAAGH,WAAW,CAAC75G,SAAS,CAAC,EAAE,CAAC,CAAC;IAE/C,IAAI+5G,gBAAgB,EAAE;MAClBQ,yBAAyB,IAAIxnC,QAAQ,CAACynC,aAAa;MACnD,IAAID,yBAAyB,GAAG,CAAC,EAAE;QAC/BA,yBAAyB,GAAG,CAAC;QAC7BxnC,QAAQ,CAAC0nC,oBAAoB,GAAG,CAAC;MACrC;MAEAL,kBAAkB,IAAIrnC,QAAQ,CAAC0nC,oBAAoB;MACnD,IAAIL,kBAAkB,GAAG,CAAC,EAAE;QACxBA,kBAAkB,GAAG,CAAC;QACtBrnC,QAAQ,CAACynC,aAAa,GAAG,CAAC;MAC9B;IACJ,CAAC,MAAM;MACHznC,QAAQ,CAACynC,aAAa,GAAG,CAAC;MAC1BznC,QAAQ,CAAC0nC,oBAAoB,GAAG,CAAC;IACrC;IAEAX,iBAAiB,CAACY,mBAAmB,GAAGN,kBAAkB;IAC1DN,iBAAiB,CAACa,0BAA0B,GAAGJ,yBAAyB;IACxExnC,QAAQ,CAAC6nC,WAAW,GAAGj8I,aAAa,CAACy1E,SAAS,CAAC2+B,QAAQ,CAACunC,IAAI,GAAGvnC,QAAQ,CAACynC,aAAa,CAAC;EAC1F,CAAC;;EAED;EACA;EACAh+H,WAAW,CAACq+H,sBAAsB,GAAG,UAAUhB,WAAW,EAAEC,iBAAiB,EAAE;IAC3E,IAAI,CAACD,WAAW,EAAE;IAElB,IAAIr/B,KAAK,GAAGq/B,WAAW,CAAC/5G,cAAc,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC+5G,WAAW,CAAC/5G,cAAc,GAAG+5G,WAAW,CAAC95G,cAAc,IAAI85G,WAAW,CAAC/5G,cAAc;IACxI,IAAI06E,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAG,CAAC,CAAC,CAAC;;IAE1B,IAAIw/B,aAAa,GAAGH,WAAW,CAACI,aAAa,GAAGJ,WAAW,CAAC55G,cAAc;IAE1E79B,CAAC,CAACmC,IAAI,CAACu1I,iBAAiB,CAAC9pC,cAAc,EAAE,UAAUl9F,CAAC,EAAE0uB,CAAC,EAAE;MACrD,IAAIA,CAAC,CAACjC,SAAS,EAAE;QACb,IAAIsoC,GAAG,GAAGgyE,WAAW,CAAC35G,WAAW,CAACsB,CAAC,CAAC14B,EAAE,CAAC;QACvC,IAAIgyI,EAAE,GAAGjzE,GAAG,CAACxkD,MAAM,IAAI,CAACwkD,GAAG,CAAC8jE,gBAAgB,GAAG,CAAC,GAAG9jE,GAAG,CAAC8jE,gBAAgB,CAACtB,sBAAsB,CAAC;QAC/F,IAAIyQ,EAAE,GAAG,CAAC,EACNA,EAAE,GAAG,CAAC;QAEV,IAAItgC,KAAK,IAAIsgC,EAAE,GAAG,CAAC,EACftgC,KAAK,IAAIriF,IAAI,CAACgxC,GAAG,CAAC6wE,aAAa,EAAEc,EAAE,CAAC,GAAGA,EAAE;QAE7Ct5G,CAAC,CAACu5G,gBAAgB,GAAGp8I,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACgxC,GAAG,CAAC6wE,aAAa,EAAEc,EAAE,CAAC,EAAE,CAAC,CAAC;QAE5E,IAAIt5G,CAAC,CAACjC,SAAS,CAACy7G,eAAe,KAAK,IAAI,IAAIxgC,KAAK,GAAG,CAAC,IAAI3yC,GAAG,CAAC8jE,gBAAgB,CAACtB,sBAAsB,GAAG,CAAC,EAAE;UACtG7oG,CAAC,CAACjC,SAAS,CAAC8qG,sBAAsB,GAAG1rI,aAAa,CAAC6uB,SAAS,CAACgtF,KAAK,GAAG3yC,GAAG,CAAC8jE,gBAAgB,CAACtB,sBAAsB,EAAE,CAAC,CAAC;UACpH7oG,CAAC,CAACjC,SAAS,CAACiqG,eAAe,GAAG7qI,aAAa,CAAC6uB,SAAS,CAACgtF,KAAK,GAAG3yC,GAAG,CAAC8jE,gBAAgB,CAACnC,eAAe,EAAE,CAAC,CAAC;UACtGhoG,CAAC,CAACjC,SAAS,CAACvD,GAAG,GAAGr9B,aAAa,CAAC6uB,SAAS,CAACgtF,KAAK,GAAG3yC,GAAG,CAAC8jE,gBAAgB,CAAC3vG,GAAG,EAAE,CAAC,CAAC;QAClF,CAAC,MAAM;UACHwF,CAAC,CAACjC,SAAS,CAAC8qG,sBAAsB,GAAG,CAAC;UACtC7oG,CAAC,CAACjC,SAAS,CAACiqG,eAAe,GAAG,CAAC;UAC/BhoG,CAAC,CAACjC,SAAS,CAACvD,GAAG,GAAG,CAAC;QACvB;QACAwF,CAAC,CAACjC,SAAS,CAAC07G,cAAc,GAAG,CAAC;QAC9Bz5G,CAAC,CAACjC,SAAS,CAAC27G,WAAW,GAAG,CAAC;MAC/B;IACJ,CAAC,CAAC;IAEF,IAAI9lI,GAAG,GAAGzW,aAAa,CAACg9E,SAAS,CAACm+D,iBAAiB,CAACqB,YAAY,CAAC;IACjEv5D,cAAc,CAACw5D,oBAAoB,CAACvB,WAAW,CAAC;IAEhDz3I,CAAC,CAACmC,IAAI,CAAC6Q,GAAG,EAAE,UAAUtC,CAAC,EAAE0uB,CAAC,EAAE;MACxB,IAAIA,CAAC,CAACjC,SAAS,EAAE;QACb;QACA,IAAIsoC,GAAG,GAAGgyE,WAAW,CAAC35G,WAAW,CAACsB,CAAC,CAACjC,SAAS,CAACmqG,SAAS,CAAC;QACxD,IAAI,CAAC7hE,GAAG,EACJA,GAAG,GAAGgyE,WAAW,CAACwB,YAAY,CAAC75G,CAAC,CAAC14B,EAAE,CAAC;QAExC,IAAI0xG,KAAK,IAAIh5E,CAAC,CAACu5G,gBAAgB,GAAG,CAAC,EAC/BvgC,KAAK,IAAIriF,IAAI,CAACgxC,GAAG,CAAC6wE,aAAa,EAAEx4G,CAAC,CAACu5G,gBAAgB,CAAC,IAAI,CAACv5G,CAAC,CAAC85G,wBAAwB,GAAG95G,CAAC,CAACu5G,gBAAgB,GAAGv5G,CAAC,CAAC85G,wBAAwB,CAAC,CAAC,CAAC;;QAE5I95G,CAAC,CAACu5G,gBAAgB,GAAGp8I,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACgxC,GAAG,CAAC6wE,aAAa,EAAEx4G,CAAC,CAACu5G,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAE5F,IAAIv5G,CAAC,CAACjC,SAAS,CAACy7G,eAAe,KAAK,IAAI,IAAIxgC,KAAK,GAAG,CAAC,IAAI3yC,GAAG,CAAC8jE,gBAAgB,CAACtB,sBAAsB,GAAG,CAAC,EAAE;UACtG7oG,CAAC,CAACjC,SAAS,CAAC8qG,sBAAsB,GAAG1rI,aAAa,CAAC6uB,SAAS,CAACgtF,KAAK,GAAG3yC,GAAG,CAAC8jE,gBAAgB,CAACtB,sBAAsB,EAAE,CAAC,CAAC;UACpH7oG,CAAC,CAACjC,SAAS,CAACiqG,eAAe,GAAG7qI,aAAa,CAAC6uB,SAAS,CAACgtF,KAAK,GAAG3yC,GAAG,CAAC8jE,gBAAgB,CAACnC,eAAe,EAAE,CAAC,CAAC;UACtGhoG,CAAC,CAACjC,SAAS,CAACvD,GAAG,GAAGr9B,aAAa,CAAC6uB,SAAS,CAACgtF,KAAK,GAAG3yC,GAAG,CAAC8jE,gBAAgB,CAAC3vG,GAAG,EAAE,CAAC,CAAC;QAClF,CAAC,MAAM;UACHwF,CAAC,CAACjC,SAAS,CAAC8qG,sBAAsB,GAAG,CAAC;UACtC7oG,CAAC,CAACjC,SAAS,CAACiqG,eAAe,GAAG,CAAC;UAC/BhoG,CAAC,CAACjC,SAAS,CAACvD,GAAG,GAAG,CAAC;QACvB;QACAwF,CAAC,CAACjC,SAAS,CAAC07G,cAAc,GAAG,CAAC;QAC9Bz5G,CAAC,CAACjC,SAAS,CAAC27G,WAAW,GAAG,CAAC;MAC/B;IACJ,CAAC,CAAC;EACN,CAAC;EAED1+H,WAAW,CAAC69H,2BAA2B,GAAG,UAAUP,iBAAiB,EAAE;IACnE,IAAIv4G,GAAG,GAAG,CAAC;IACXn/B,CAAC,CAACmC,IAAI,CAACu1I,iBAAiB,CAAC9pC,cAAc,EAAE,UAAUl9F,CAAC,EAAE0uB,CAAC,EAAE;MACrD,IAAIA,CAAC,CAACjC,SAAS,EACXgC,GAAG,IAAIC,CAAC,CAACjC,SAAS,CAAC07G,cAAc;IACzC,CAAC,CAAC;IACF74I,CAAC,CAACmC,IAAI,CAAC5F,aAAa,CAACg9E,SAAS,CAACm+D,iBAAiB,CAACqB,YAAY,CAAC,EAAE,UAAUroI,CAAC,EAAE0uB,CAAC,EAAE;MAC5E,IAAIA,CAAC,CAACjC,SAAS,EACXgC,GAAG,IAAIC,CAAC,CAACjC,SAAS,CAAC07G,cAAc;IACzC,CAAC,CAAC;IAEF,OAAO15G,GAAG;EACd,CAAC;EAED/kB,WAAW,CAAC++H,0BAA0B,GAAG,UAAUzB,iBAAiB,EAAE;IAClE,IAAIv4G,GAAG,GAAG,CAAC;IACXn/B,CAAC,CAACmC,IAAI,CAACu1I,iBAAiB,CAAC9pC,cAAc,EAAE,UAAUl9F,CAAC,EAAE0uB,CAAC,EAAE;MACrDD,GAAG,IAAIC,CAAC,CAACze,MAAM;IACnB,CAAC,CAAC;IACF3gB,CAAC,CAACmC,IAAI,CAAC5F,aAAa,CAACg9E,SAAS,CAACm+D,iBAAiB,CAACqB,YAAY,CAAC,EAAE,UAAUroI,CAAC,EAAE0uB,CAAC,EAAE;MAC5ED,GAAG,IAAIC,CAAC,CAACze,MAAM;IACnB,CAAC,CAAC;IAEF,OAAOwe,GAAG;EACd,CAAC;EAED/kB,WAAW,CAACg/H,sBAAsB,GAAG,UAAUzoC,QAAQ,EAAE+mC,iBAAiB,EAAE;IACxE,IAAI,CAAC/mC,QAAQ,EAAE,OAAO,CAAC;IAEvB,IAAI,CAACA,QAAQ,CAACynC,aAAa,EACvBznC,QAAQ,CAACynC,aAAa,GAAG,CAAC;IAC9B,IAAI,CAACznC,QAAQ,CAAC0nC,oBAAoB,EAC9B1nC,QAAQ,CAAC0nC,oBAAoB,GAAG,CAAC;IACrC,OAAO97I,aAAa,CAAC6uB,SAAS,CAACulF,QAAQ,CAACynC,aAAa,GAAGznC,QAAQ,CAAC0nC,oBAAoB,GACjFj+H,WAAW,CAAC69H,2BAA2B,CAACP,iBAAiB,CAAC,EAAE,CAAC,CAAC;EACtE,CAAC;EAEDt9H,WAAW,CAACi/H,YAAY,GAAG,UAAU1oC,QAAQ,EAAE+mC,iBAAiB,EAAE;IAC9D,IAAI,CAAC/mC,QAAQ,IAAI,CAAC+mC,iBAAiB,EAAE,OAAO,CAAC;IAC7C,IAAIv4G,GAAG,GAAG,CAAC;IACX,IAAIwxE,QAAQ,CAAC6nC,WAAW,EACpBr5G,GAAG,IAAIwxE,QAAQ,CAAC6nC,WAAW;IAC/B,IAAI7nC,QAAQ,CAACynC,aAAa,EACtBj5G,GAAG,IAAIwxE,QAAQ,CAACynC,aAAa;IACjC,IAAIznC,QAAQ,CAAC2oC,WAAW,EACpBn6G,GAAG,IAAIwxE,QAAQ,CAAC2oC,WAAW;IAC/B,IAAI3oC,QAAQ,CAAC4oC,aAAa,EACtBp6G,GAAG,IAAIwxE,QAAQ,CAAC4oC,aAAa;IACjC,OAAOh9I,aAAa,CAAC6uB,SAAS,CAAC+T,GAAG,GAAG/kB,WAAW,CAAC++H,0BAA0B,CAACzB,iBAAiB,CAAC,EAAE,CAAC,CAAC;EACtG,CAAC;EAEDt9H,WAAW,CAACo/H,4BAA4B,GAAG,UAAU1tI,WAAW,EAAE81H,gBAAgB,EAAE6X,uBAAuB,EAAEC,aAAa,EAAE;IACxH,IAAI/W,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAACtxB,WAAW,CAAC;IAE5D,IAAIwO,SAAS,GAAG,CAAC,CAAC;IAClBA,SAAS,CAAC1b,IAAI,GAAG,gBAAgB,GAAGgjI,gBAAgB;IACpDtnH,SAAS,CAAC+sH,WAAW,GAAGxhH,KAAK,CAACuE,OAAO,CAAC,CAAC;IACvC9P,SAAS,CAAC8sH,eAAe,GAAG,CAAC,CAAC,GAAG7qI,aAAa,CAAC6uB,SAAS,CAACquH,uBAAuB,EAAE,CAAC,CAAC;IACpFn/H,SAAS,CAACsf,GAAG,GAAG,CAAC;IACjBtf,SAAS,CAACpQ,SAAS,GAAG,sCAAsC;IAC5DoQ,SAAS,CAAC2tH,sBAAsB,GAAG3tH,SAAS,CAAC8sH,eAAe;IAC5D9sH,SAAS,CAACQ,iBAAiB,GAAG4+H,aAAa;IAC3Cp/H,SAAS,CAACitH,gBAAgB,GAAG3F,gBAAgB,CAAC,CAAC;IAC/C,IAAI,CAACe,SAAS,EACV72H,WAAW,CAAC2qE,UAAU,CAACl0E,IAAI,CAAC+X,SAAS,CAAC,CAAC,KAEvC0c,4FAAuB,CAAC2iH,iBAAiB,CAAC7tI,WAAW,EAAEwO,SAAS,EAAEsnH,gBAAgB,CAAC;EAC3F,CAAC;EAEDxnH,WAAW,CAACw/H,yBAAyB,GAAG,UAAU9tI,WAAW,EAAE;IAC3D,IAAIA,WAAW,IAAIA,WAAW,CAAC2xB,WAAW,IAAI3xB,WAAW,CAAC2xB,WAAW,CAACK,WAAW,EAAE;MAC/EhyB,WAAW,CAACk9H,oBAAoB,GAAG,CAAC;MACpCl9H,WAAW,CAACi9H,iBAAiB,GAAG,CAAC;MAEjC/oI,CAAC,CAACmC,IAAI,CAAC5F,aAAa,CAACg9E,SAAS,CAACztE,WAAW,CAAC2xB,WAAW,CAACK,WAAW,CAAC,EAAE,UAAUptB,CAAC,EAAE0uB,CAAC,EAAE;QACjF,IAAIA,CAAC,CAACjC,SAAS,IAAIiC,CAAC,CAACjC,SAAS,CAACy7G,eAAe,KAAK,IAAI,IAAIx5G,CAAC,CAACjC,SAAS,CAAC07G,cAAc,EAAE;UACnF/sI,WAAW,CAACi9H,iBAAiB,IAAI3pG,CAAC,CAACjC,SAAS,CAAC07G,cAAc;UAC3D/sI,WAAW,CAACk9H,oBAAoB,IAAI5pG,CAAC,CAACjC,SAAS,CAAC27G,WAAW;QAC/D;MACJ,CAAC,CAAC;IACN;EACJ,CAAC;EAED1+H,WAAW,CAACy/H,8BAA8B,GAAG,UAAU/tI,WAAW,EAAE84H,cAAc,EAAE;IAChF94H,WAAW,CAAC2xB,WAAW,CAACI,cAAc,GAAG,CAAC;IAC1C79B,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAAC+rB,aAAa,EAAE,UAAUnnB,CAAC,EAAE5U,EAAE,EAAE;MAC/C,IAAIA,EAAE,CAACmlB,MAAM,GAAG,CAAC,EACbnV,WAAW,CAAC2xB,WAAW,CAACI,cAAc,IAAI/hC,EAAE,CAACmlB,MAAM,IAAI2jH,cAAc,KAAK,IAAI,GAAG9oI,EAAE,CAAC89B,GAAG,GAAG,CAAC,CAAC;IACpG,CAAC,CAAC;IAEF9tB,WAAW,CAAC2xB,WAAW,CAACI,cAAc,GAAGthC,aAAa,CAAC6uB,SAAS,CAACtf,WAAW,CAAC2xB,WAAW,CAACI,cAAc,EAAE,CAAC,CAAC;EAC/G,CAAC;EAEDzjB,WAAW,CAAC0/H,eAAe,GAAG,YAAY;IACtC,OAAOlM,YAAY;EACvB,CAAC;EAEDxzH,WAAW,CAAC2/H,gBAAgB,GAAG,UAAUhrF,KAAK,EAAEsnB,WAAW,EAAE2jE,OAAO,EAAE;IAClEA,OAAO,GAAGz9I,aAAa,CAAC6uB,SAAS,CAAC4uH,OAAO,EAAE,CAAC,CAAC;IAE7C,QAAQ3jE,WAAW;MACf,KAAK,MAAM;QACPtnB,KAAK,CAACkrF,gBAAgB,CAACC,SAAS,GAAGnrF,KAAK,CAAC4hD,QAAQ,CAACunC,IAAI;QACtDnpF,KAAK,CAACkrF,gBAAgB,CAACh5H,MAAM,GAAG,CAAC8tC,KAAK,CAAC4hD,QAAQ,CAACunC,IAAI,GAChDniH,IAAI,CAACgxC,GAAG,CAAChY,KAAK,CAAC2oF,iBAAiB,CAACyC,UAAU,EAAEH,OAAO,CAAC,GACrDjrF,KAAK,CAAC4hD,QAAQ,CAACunC,IAAI;QACvB;MACJ,KAAK,eAAe;QAChBnpF,KAAK,CAACkrF,gBAAgB,CAACC,SAAS,GAAGnrF,KAAK,CAAC4hD,QAAQ,CAACynC,aAAa;QAC/DrpF,KAAK,CAACkrF,gBAAgB,CAACh5H,MAAM,GAAG,CAAC8tC,KAAK,CAAC4hD,QAAQ,CAACynC,aAAa,GACzDrpF,KAAK,CAAC2oF,iBAAiB,CAACY,mBAAmB,GAC3CvpF,KAAK,CAAC4hD,QAAQ,CAACynC,aAAa;QAChC;MACJ,KAAK,aAAa;QACdrpF,KAAK,CAACkrF,gBAAgB,CAACC,SAAS,GAAGnrF,KAAK,CAAC4hD,QAAQ,CAAC2oC,WAAW;QAC7DvqF,KAAK,CAACkrF,gBAAgB,CAACh5H,MAAM,GAAG,CAAC8tC,KAAK,CAAC4hD,QAAQ,CAAC2oC,WAAW,GACvDvjH,IAAI,CAACgxC,GAAG,CAAChY,KAAK,CAAC2oF,iBAAiB,CAAC0C,iBAAiB,EAAEJ,OAAO,CAAC,GAC5DjrF,KAAK,CAAC4hD,QAAQ,CAAC2oC,WAAW;QAC9B;MACJ,KAAK,sBAAsB;QACvBvqF,KAAK,CAACkrF,gBAAgB,CAACC,SAAS,GAAGnrF,KAAK,CAAC4hD,QAAQ,CAAC0nC,oBAAoB;QACtEtpF,KAAK,CAACkrF,gBAAgB,CAACh5H,MAAM,GAAG,CAAC8tC,KAAK,CAAC4hD,QAAQ,CAAC0nC,oBAAoB,GAChEtpF,KAAK,CAAC2oF,iBAAiB,CAACa,0BAA0B,GAClDxpF,KAAK,CAAC4hD,QAAQ,CAAC0nC,oBAAoB;QACvC;MACJ,KAAK,eAAe;QAChBtpF,KAAK,CAACkrF,gBAAgB,CAACC,SAAS,GAAGnrF,KAAK,CAAC4hD,QAAQ,CAAC4oC,aAAa;QAC/DxqF,KAAK,CAACkrF,gBAAgB,CAACh5H,MAAM,GAAG,CAAC8tC,KAAK,CAAC4hD,QAAQ,CAAC4oC,aAAa,GACzDxjH,IAAI,CAACgxC,GAAG,CAAChY,KAAK,CAAC2oF,iBAAiB,CAAC2C,mBAAmB,EAAEL,OAAO,CAAC,GAC9DjrF,KAAK,CAAC4hD,QAAQ,CAAC4oC,aAAa;QAChC;MACJ,KAAK,YAAY;QACb,IAAIe,GAAG,GAAGvrF,KAAK,CAACkrF,gBAAgB,CAAC5nE,SAAS;QAC1C,IAAIntE,GAAG,GAAG6pD,KAAK,CAAC2oF,iBAAiB,CAACqB,YAAY,CAACuB,GAAG,CAAC,CAAC35H,MAAM;QAC1DouC,KAAK,CAACkrF,gBAAgB,CAACC,SAAS,GAAGh1I,GAAG;QACtC,IAAIq1I,SAAS,GAAGh+I,aAAa,CAAC6uB,SAAS,CAAC2jC,KAAK,CAAC2oF,iBAAiB,CAACqB,YAAY,CAACuB,GAAG,CAAC,CAAC3B,gBAAgB,EAAE,CAAC,CAAC;QAEtG5pF,KAAK,CAACkrF,gBAAgB,CAACh5H,MAAM,GAAG,CAAC/b,GAAG,GAAG6wB,IAAI,CAACgxC,GAAG,CAACwzE,SAAS,EAAEP,OAAO,CAAC,GAAG90I,GAAG;QACzE;MAEJ;QACI,IAAIo1I,GAAG,GAAGvrF,KAAK,CAACkrF,gBAAgB,CAAC5nE,SAAS;QAC1C,IAAI/9B,EAAE,GAAGya,KAAK,CAAC2oF,iBAAiB,CAAC9pC,cAAc,CAAC3rG,MAAM,CAAC,UAAUnG,EAAE,EAAE;UACjE,OAAOA,EAAE,CAAC4K,EAAE,KAAK4zI,GAAG;QACxB,CAAC,CAAC;QACFvrF,KAAK,CAACkrF,gBAAgB,CAACC,SAAS,GAAG5lG,EAAE,CAAC,CAAC,CAAC,CAAC3zB,MAAM;QAC/CouC,KAAK,CAACkrF,gBAAgB,CAACh5H,MAAM,GAAG,CAACqzB,EAAE,CAAC,CAAC,CAAC,CAAC3zB,MAAM,GAAGoV,IAAI,CAACgxC,GAAG,CAACzyB,EAAE,CAAC,CAAC,CAAC,CAACqkG,gBAAgB,EAAEqB,OAAO,CAAC,GAAG1lG,EAAE,CAAC,CAAC,CAAC,CAAC3zB,MAAM;QACxG;IACR;EACJ,CAAC;EAEDvG,WAAW,CAACogI,eAAe,GAAG,UAAUt+I,MAAM,EAAEwc,GAAG,EAAEksH,cAAc,EAAE6V,UAAU,EAAE;IAC7Ev+I,MAAM,CAACw+I,oBAAoB,CAAC,CAAC;IAE7B,IAAID,UAAU,KAAK,IAAI,EAAE;MACrB/9I,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAACy+I,sBAAsB,CAAC3zI,IAAI,CAAC,IAAI,CAAC;MAC5C,CAAC,CAAC;IACN;IACAtK,QAAQ,CAAC,YAAY;MACjBR,MAAM,CAAC+9I,gBAAgB,CAACh5H,MAAM,GAAGJ,UAAU,CAAC3kB,MAAM,CAAC+9I,gBAAgB,CAACh5H,MAAM,CAAC;MAC3E,IAAI0hH,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;MACnE,IAAI26C,IAAI,GAAG;QACPixF,iBAAiB,EAAEx7I,MAAM,CAACw7I,iBAAiB;QAC3C/mC,QAAQ,EAAEz0G,MAAM,CAACy0G,QAAQ;QACzBiqC,YAAY,EAAE1+I,MAAM,CAAC0+I,YAAY;QACjCC,gBAAgB,EAAE3+I,MAAM,CAAC2+I,gBAAgB;QACzCC,UAAU,EAAE5+I,MAAM,CAAC4+I;MACvB,CAAC;MAED,IAAIpiI,GAAG,KAAK,IAAI,EAAE;QACd,IAAIqiI,WAAW,GAAGx+I,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC8+I,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG9+I,MAAM,CAAC+9I,gBAAgB,CAACC,SAAS;QACpH,IAAIe,UAAU,GAAG,KAAK;QACtB,IAAIC,YAAY,GAAG,KAAK;QACxB,QAAQh/I,MAAM,CAAC+9I,gBAAgB,CAAC76I,IAAI;UAChC,KAAK,eAAe;YAChB,IAAIlD,MAAM,CAAC+9I,gBAAgB,CAACh5H,MAAM,GAAG/kB,MAAM,CAACw7I,iBAAiB,CAACY,mBAAmB,EAC7E4C,YAAY,GAAG,IAAI;YACvB;UACJ,KAAK,sBAAsB;YACvB,IAAIh/I,MAAM,CAAC+9I,gBAAgB,CAACh5H,MAAM,GAAG/kB,MAAM,CAACw7I,iBAAiB,CAACa,0BAA0B,EACpF2C,YAAY,GAAG,IAAI;YACvB;UACJ;YACID,UAAU,GAAG,IAAI;YACjB;QACR;QAEA,IAAIA,UAAU,IAAIC,YAAY,EAAE;UAC5B,IAAIA,YAAY,IAAIh/I,MAAM,CAAC+9I,gBAAgB,CAACh5H,MAAM,GAAG85H,WAAW,EAAE;YAC9D1+I,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,mFAAmF,CAAC,CAAC;YACrI;UACJ;QACJ;QAEA,QAAQxB,MAAM,CAAC+9I,gBAAgB,CAAC76I,IAAI;UAChC,KAAK,MAAM;YACPlD,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAG37I,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC+9I,gBAAgB,CAACh5H,MAAM,EAAE,CAAC,CAAC;YACjF,IAAI/kB,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAG,CAAC,IAAIh8I,MAAM,CAAC+9I,gBAAgB,CAACh5H,MAAM,IAAI/kB,MAAM,CAAC+9I,gBAAgB,CAACC,SAAS,EAAE;cACjGh+I,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,GAAGl8I,MAAM,CAACw7I,iBAAiB,CAACY,mBAAmB;cAC5Ep8I,MAAM,CAACy0G,QAAQ,CAAC0nC,oBAAoB,GAAG,CAAC;YAC5C;YACAn8I,MAAM,CAACy0G,QAAQ,CAAC6nC,WAAW,GAAGj8I,aAAa,CAACy1E,SAAS,CAAC91E,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAGh8I,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,CAAC;YAE3G,IAAI,CAACzV,SAAS,EACVvoH,WAAW,CAACo9H,sBAAsB,CAACt7I,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,EAAEvhC,MAAM,CAACw7I,iBAAiB,EAAEx7I,MAAM,CAACy0G,QAAQ,EAAE,MAAM,CAAC,CAAC,KACrH;cACDlqD,IAAI,CAACkxF,gBAAgB,GAAG,MAAM;cAC9B3gH,4FAAuB,CAACmkH,uBAAuB,CAACj/I,MAAM,CAAC4P,WAAW,EAAE26C,IAAI,EAAEvvB,iEAAc,CAACiG,SAAS,CAAC;YACvG;YACA;UACJ,KAAK,eAAe;YAChBjhC,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,GAAG77I,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC+9I,gBAAgB,CAACh5H,MAAM,EAAE,CAAC,CAAC;YAC1F/kB,MAAM,CAACy0G,QAAQ,CAAC6nC,WAAW,GAAGj8I,aAAa,CAACy1E,SAAS,CAAC91E,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAGh8I,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,CAAC;YAC3G,IAAI,CAACzV,SAAS,EACVvoH,WAAW,CAACo9H,sBAAsB,CAACt7I,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,EAAEvhC,MAAM,CAACw7I,iBAAiB,EAAEx7I,MAAM,CAACy0G,QAAQ,EAAE,MAAM,CAAC,CAAC,KACrH;cACDlqD,IAAI,CAACkxF,gBAAgB,GAAG,MAAM;cAC9B3gH,4FAAuB,CAACmkH,uBAAuB,CAACj/I,MAAM,CAAC4P,WAAW,EAAE26C,IAAI,EAAEvvB,iEAAc,CAACiG,SAAS,CAAC;YACvG;YACA;UACJ,KAAK,aAAa;YACdjhC,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW,GAAG/8I,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC+9I,gBAAgB,CAACh5H,MAAM,EAAE,CAAC,CAAC;YACxF/kB,MAAM,CAACy0G,QAAQ,CAAC0nC,oBAAoB,GAAG,CAACn8I,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB,GAAG,CAAC,GAClF79I,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAACw7I,iBAAiB,CAACa,0BAA0B,IAAIr8I,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW,GAAGp9I,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAChK,IAAIzX,SAAS,EAAE;cACXl8E,IAAI,CAACkxF,gBAAgB,GAAG,eAAe;cACvC3gH,4FAAuB,CAACmkH,uBAAuB,CAACj/I,MAAM,CAAC4P,WAAW,EAAE26C,IAAI,EAAEvvB,iEAAc,CAACiG,SAAS,CAAC;YACvG;YACA;UACJ,KAAK,sBAAsB;YACvBjhC,MAAM,CAACy0G,QAAQ,CAAC0nC,oBAAoB,GAAG97I,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC+9I,gBAAgB,CAACh5H,MAAM,EAAE,CAAC,CAAC;YACjG,IAAI,CAAC0hH,SAAS,EACVvoH,WAAW,CAACo9H,sBAAsB,CAACt7I,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,EAAEvhC,MAAM,CAACw7I,iBAAiB,EAAEx7I,MAAM,CAACy0G,QAAQ,EAAE,eAAe,CAAC,CAAC,KAC9H;cACDlqD,IAAI,CAACkxF,gBAAgB,GAAG,eAAe;cACvC3gH,4FAAuB,CAACmkH,uBAAuB,CAACj/I,MAAM,CAAC4P,WAAW,EAAE26C,IAAI,EAAEvvB,iEAAc,CAACiG,SAAS,CAAC;YACvG;YACA;UACJ,KAAK,eAAe;YAChBjhC,MAAM,CAACy0G,QAAQ,CAAC4oC,aAAa,GAAGh9I,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC+9I,gBAAgB,CAACh5H,MAAM,EAAE,CAAC,CAAC;YAC1FwlC,IAAI,CAACkxF,gBAAgB,GAAG,SAAS;YACjC,IAAIhV,SAAS,EAAE;cACX3rG,4FAAuB,CAACmkH,uBAAuB,CAACj/I,MAAM,CAAC4P,WAAW,EAAE26C,IAAI,EAAEvvB,iEAAc,CAACiG,SAAS,CAAC;YACvG;YACA;UACJ,KAAK,YAAY;YACb,IAAIm9G,GAAG,GAAGp+I,MAAM,CAAC+9I,gBAAgB,CAAC5nE,SAAS;YAC3C,IAAIlzC,GAAG,GAAG5iC,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC+9I,gBAAgB,CAACh5H,MAAM,EAAE,CAAC,CAAC;YAEpE/kB,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,CAACuB,GAAG,CAAC,CAAC35H,MAAM,GAAGwe,GAAG;YACvD,IAAIjjC,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,CAACuB,GAAG,CAAC,CAACn9G,SAAS,EAAE;cACtD,IAAI84G,eAAe,GAAG/5I,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,CAACuB,GAAG,CAAC,CAACn9G,SAAS,CAACiqG,eAAe;cAE1F,IAAIgU,aAAa,GAAGj8G,GAAG,GAAGjjC,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,CAACuB,GAAG,CAAC,CAAC3B,gBAAgB;cACrF,IAAI0C,WAAW,GAAG9+I,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,CAACuB,GAAG,CAAC,CAACn9G,SAAS,CAACvD,GAAG,GAAGwhH,aAAa,EAAE,CAAC,CAAC;cACtH,IAAIE,cAAc,GAAGrF,eAAe,GAAGmF,aAAa;cACpDl/I,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,CAACuB,GAAG,CAAC,CAACn9G,SAAS,CAAC07G,cAAc,GAAGt8I,aAAa,CAAC6uB,SAAS,CAACkwH,cAAc,EAAE,CAAC,CAAC,IAAI1W,cAAc,GAAG,CAAC,GAAGyW,WAAW,CAAC;cACrJn/I,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,CAACuB,GAAG,CAAC,CAACn9G,SAAS,CAAC27G,WAAW,GAAGuC,WAAW;YAClF;YAEAn/I,MAAM,CAACy0G,QAAQ,CAAC4qC,UAAU,GAAG/7D,cAAc,CAACg8D,kBAAkB,CAACt/I,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,CAAC;YACrG,IAAI,CAACpW,SAAS,EACVvoH,WAAW,CAACo9H,sBAAsB,CAACt7I,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,EAAEvhC,MAAM,CAACw7I,iBAAiB,EAAEx7I,MAAM,CAACy0G,QAAQ,CAAC,CAAC,KAC7G;cACD35E,4FAAuB,CAACmkH,uBAAuB,CAACj/I,MAAM,CAAC4P,WAAW,EAAE26C,IAAI,EAAEvvB,iEAAc,CAACiG,SAAS,CAAC;YACvG;YAEA;UAEJ;YACI,IAAIm9G,GAAG,GAAGp+I,MAAM,CAAC+9I,gBAAgB,CAAC5nE,SAAS;YAC3C,IAAIlzC,GAAG,GAAG5iC,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC+9I,gBAAgB,CAACh5H,MAAM,EAAE,CAAC,CAAC;YAEpE,IAAIqzB,EAAE,GAAGp4C,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,CAAC3rG,MAAM,CAAC,UAAUnG,EAAE,EAAE;cAClE,OAAOA,EAAE,CAAC4K,EAAE,KAAK4zI,GAAG;YACxB,CAAC,CAAC;YACFhmG,EAAE,CAAC,CAAC,CAAC,CAAC3zB,MAAM,GAAGwe,GAAG;YAElB,IAAImV,EAAE,CAAC,CAAC,CAAC,CAACnX,SAAS,EAAE;cACjB,IAAI84G,eAAe,GAAG3hG,EAAE,CAAC,CAAC,CAAC,CAACnX,SAAS,CAACiqG,eAAe;cAErD,IAAIgU,aAAa,GAAGj8G,GAAG,GAAGmV,EAAE,CAAC,CAAC,CAAC,CAACqkG,gBAAgB;cAChD,IAAI0C,WAAW,GAAG9+I,aAAa,CAAC6uB,SAAS,CAACkpB,EAAE,CAAC,CAAC,CAAC,CAACnX,SAAS,CAACvD,GAAG,GAAGwhH,aAAa,EAAE,CAAC,CAAC;cACjF,IAAIE,cAAc,GAAGrF,eAAe,GAAGmF,aAAa;cACpD9mG,EAAE,CAAC,CAAC,CAAC,CAACnX,SAAS,CAAC07G,cAAc,GAAGt8I,aAAa,CAAC6uB,SAAS,CAACkwH,cAAc,EAAE,CAAC,CAAC,IAAI1W,cAAc,GAAG,CAAC,GAAGyW,WAAW,CAAC;cAChH/mG,EAAE,CAAC,CAAC,CAAC,CAACnX,SAAS,CAAC27G,WAAW,GAAGuC,WAAW;YAC7C;YAEA,IAAI,CAAC1Y,SAAS,EACVvoH,WAAW,CAACo9H,sBAAsB,CAACt7I,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,EAAEvhC,MAAM,CAACw7I,iBAAiB,EAAEx7I,MAAM,CAACy0G,QAAQ,CAAC,CAAC,KAC7G;cACD35E,4FAAuB,CAACmkH,uBAAuB,CAACj/I,MAAM,CAAC4P,WAAW,EAAE26C,IAAI,EAAEvvB,iEAAc,CAACiG,SAAS,CAAC;YACvG;YACA;QACR;MACJ,CAAC,MAAM,IAAI,OAAQzkB,GAAI,IAAI,QAAQ,IAAIA,GAAG,KAAK,QAAQ,EAAE;QAErD,QAAQxc,MAAM,CAAC+9I,gBAAgB,CAAC76I,IAAI;UAChC,KAAK,QAAQ;YACT;UAAO;UACX,KAAK,MAAM;YACPlD,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAG,CAAC;YACxB;UACJ,KAAK,eAAe;YAChBh8I,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,GAAG,CAAC;YACjC;UACJ,KAAK,aAAa;YACdl8I,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW,GAAG,CAAC;YAC/B;UACJ,KAAK,sBAAsB;YACvBp9I,MAAM,CAACy0G,QAAQ,CAAC0nC,oBAAoB,GAAG,CAAC;YACxC;UACJ,KAAK,eAAe;YAChBn8I,MAAM,CAACy0G,QAAQ,CAAC4oC,aAAa,GAAG,CAAC;YACjC;UACJ,KAAK,YAAY;YACbr9I,MAAM,CAACy0G,QAAQ,CAAC4qC,UAAU,GAAG,CAAC;YAC9B/7D,cAAc,CAACi8D,sBAAsB,CAACv/I,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,CAAC;YAC5E;UAEJ;YACI/4I,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,EAAE,UAAUl9F,CAAC,EAAE0uB,CAAC,EAAE;cAC5DA,CAAC,CAACze,MAAM,GAAG,CAAC;cACZ,IAAIye,CAAC,CAACjC,SAAS,EAAE;gBACbiC,CAAC,CAACjC,SAAS,CAAC07G,cAAc,GAAG,CAAC;gBAC9Bz5G,CAAC,CAACjC,SAAS,CAAC27G,WAAW,GAAG,CAAC;cAC/B;YACJ,CAAC,CAAC;YACF;QACR;QAEA,IAAInW,SAAS,EACT3rG,4FAAuB,CAACmkH,uBAAuB,CAACj/I,MAAM,CAAC4P,WAAW,EAAE26C,IAAI,EAAEvvB,iEAAc,CAACiG,SAAS,CAAC;MAC3G;MAEAjhC,MAAM,CAAC+9I,gBAAgB,CAACh5H,MAAM,GAAG,CAAC;IACtC,CAAC,CAAC;EACN,CAAC;EAED7G,WAAW,CAACo2G,aAAa,GAAG,UAAUl5F,IAAI,EAAEC,KAAK,EAAErlB,OAAO,EAAE;IACxD,IAAIya,QAAQ,GAAGL,qBAAqB;IACpC,IAAI9kB,EAAE,GAAGmlB,QAAQ,CAAC6jG,aAAa,CAACl5F,IAAI,EAAEC,KAAK,EAAErlB,OAAO,CAAC,CAAChS,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACtE,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;EAED4S,WAAW,CAACq2G,YAAY,GAAG,UAAU7gG,MAAM,EAAE;IACzC,IAAIjD,QAAQ,GAAGL,qBAAqB;IACpC,IAAI9kB,EAAE,GAAGmlB,QAAQ,CAAC8jG,YAAY,CAAC7gG,MAAM,CAAC,CAAC1vB,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACvD,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;EAGD4S,WAAW,CAACshI,kBAAkB,GAAG,UAAUv7E,OAAO,EAAEw7E,KAAK,EAAE;IACvD,OAAOpvH,eAAe,CAACmvH,kBAAkB,CAACv7E,OAAO,EAAE/jE,aAAa,CAAC+rB,YAAY,EAAEwzH,KAAK,CAAC;EACzF,CAAC;EAEDvhI,WAAW,CAACwhI,gBAAgB,GAAG,UAAUC,YAAY,EAAE;IACnD,OAAOtvH,eAAe,CAACqvH,gBAAgB,CAACC,YAAY,CAAC;EACzD,CAAC;EAEDzhI,WAAW,CAAC0hI,cAAc,GAAG,UAAUrkD,IAAI,EAAE;IACzC,IAAIsqC,gBAAgB,GAAG3lI,aAAa,CAACX,MAAM,IAAKW,aAAa,CAACmB,QAAS;IACvE,IAAIwkI,gBAAgB,EAAE;MAClB/hI,CAAC,CAACC,OAAO,CAAC,CAAC;MACX,OAAOqsB,qBAAqB,CAACgkG,mBAAmB,CAAC74B,IAAI,CAAC,CAACv3F,IAAI,CAAC,UAAUC,IAAI,EAAE;QACxE,OAAOA,IAAI,CAACC,IAAI;MACpB,CAAC,CAAC;IACN,CAAC,MAAM;MACH,OAAO7D,aAAa,CAAC83C,aAAa,CAAC13C,cAAc,CAACe,SAAS,CAAC,qCAAqC,CAAC,CAAC;IACvG;EACJ,CAAC;EAED0c,WAAW,CAAC2hI,uBAAuB,GAAG,UAAUC,UAAU,EAAE;IACxD,IAAIja,gBAAgB,GAAG,CAAC,CAAC3lI,aAAa,CAACX,MAAM,IAAI,CAAC,CAACW,aAAa,CAACmB,QAAQ;IACzE,IAAIwkI,gBAAgB,EAAE;MAClB/hI,CAAC,CAACC,OAAO,CAAC,CAAC;MACX,OAAOssB,eAAe,CAAC0vH,oBAAoB,CAACD,UAAU,CAAC,CAAC97I,IAAI,CAAC,UAAUC,IAAI,EAAE;QACzE,OAAO5D,aAAa,CAAC63C,cAAc,CAACj0C,IAAI,CAACC,IAAI,CAACujB,MAAM,KAAK,IAAI,CAAC;MAClE,CAAC,CAAC,SACI,CAAC,UAAStjB,GAAG,EAAE;QACjB,OAAO9D,aAAa,CAAC63C,cAAc,CAAC,KAAK,CAAC;MAC9C,CAAC,CAAC;IACN,CAAC,MAAM;MACH,OAAO73C,aAAa,CAAC63C,cAAc,CAAC,KAAK,CAAC;IAC9C;EACJ,CAAC;EAEDh6B,WAAW,CAAC8hI,QAAQ,GAAG,UAAU5uF,KAAK,EAAE;IACpC,OAAOA,KAAK,CAAC/tD,MAAM,IAAI+tD,KAAK,CAAC/tD,MAAM,CAACklC,QAAQ,CAAC,QAAQ,CAAC;EAC1D,CAAC;EAEDrqB,WAAW,CAAC+hI,qBAAqB,GAAG,UAASC,UAAU,EAAC;IACpD,IAAIzvH,QAAQ,GAAGL,qBAAqB;IACpC,IAAI7kB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAEzB,IAAIF,EAAE,GAAGmlB,QAAQ,CAACgkG,oBAAoB,CAACyrB,UAAU,CAAC,CAACl8I,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACnEkC,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAAC;MAC1B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,EAAE,UAAUvH,GAAG,EAAE;MACdoH,QAAQ,CAACE,OAAO,CAACtH,GAAG,CAACD,IAAI,CAAC,CAAC,CAAC;MAC5B,OAAOqH,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;IAEF,OAAOJ,EAAE;EACb,CAAC;EAED4S,WAAW,CAACgoH,mCAAmC,GAAG,UAAUjiI,IAAI,EAAE89B,IAAI,EAAEgyE,OAAO,EAAE;IAAA,IAAAosC,UAAA;IAC7E,IAAI,EAACl8I,IAAI,aAAJA,IAAI,gBAAAk8I,UAAA,GAAJl8I,IAAI,CAAEC,IAAI,cAAAi8I,UAAA,gBAAAA,UAAA,GAAVA,UAAA,CAAYC,kBAAkB,cAAAD,UAAA,eAA9BA,UAAA,CAAgC/5I,MAAM,KAAI,CAAC27B,IAAI,IAAI,CAACgyE,OAAO,EAAE;MAC9D;IACJ;IAEA,IAAMthD,OAAO,GAAGxuD,IAAI,CAACC,IAAI,CAACk8I,kBAAkB;IAC5C,IAAMC,cAAc,GAAGt+G,IAAI,CAACgyD,OAAO,IAAIggB,OAAO,CAAChgB,OAAO;IAEtD,IAAIusD,KAAK,GAAG,IAAI;IAEhB,IAAID,cAAc,EAAE;MAChBC,KAAK,GAAG7tF,OAAO,CAACphD,IAAI,CAAC,UAAA7B,CAAC;QAAA,OAAGA,CAAC,CAAC+wI,uBAAuB,KAAK,IAAI,IAAI/wI,CAAC,CAACukF,OAAO,IAAIvkF,CAAC,CAACukF,OAAO,KAAKssD,cAAc;MAAA,EAAC;IAC7G;IAEA,IAAI,CAACC,KAAK,EAAE;MACRA,KAAK,GAAG7tF,OAAO,CAACphD,IAAI,CAAC,UAAA7B,CAAC;QAAA,OAAIA,CAAC,CAAC+wI,uBAAuB,KAAK,IAAI,IAAI/wI,CAAC,CAACgxI,mBAAmB,IAAIhxI,CAAC,CAACgxI,mBAAmB,KAAKz+G,IAAI,CAACzJ,WAAW;MAAA,EAAC;IACxI;IAEA,IAAI,CAACgoH,KAAK,EAAE;MACR;IACJ;IAEA,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC5zI,OAAO,CAAC,UAAAgE,KAAK,EAAI;MACjD,IAAI4vI,KAAK,CAAC5vI,KAAK,CAAC,EAAE;QACdqxB,IAAI,CAACrxB,KAAK,CAAC,GAAG4vI,KAAK,CAAC5vI,KAAK,CAAC;QAC1BqjG,OAAO,CAACrjG,KAAK,CAAC,GAAG4vI,KAAK,CAAC5vI,KAAK,CAAC;MACjC;IACJ,CAAC,CAAC;IAEFqxB,IAAI,CAACsoG,iBAAiB,GAAG,IAAI;EACjC,CAAC;EAED,OAAOnsH,WAAW;AAEtB,CAAC,CACJ,CAAC,C;;;;;;;;;;;;;;;;;AC3gJmF;AACvD;AACqE;AACvC;AAG5Dpe,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,wBAAwB,EACzD,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EACzH,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,EAAE,gBAAgB,EAC9F,cAAc,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,wBAAwB,EACpI,iBAAiB,EAAE,SAAS,EAAE,SAAS,EAAE,oBAAoB;AAC7D;AACR;AACA;AACQ,UAAUC,MAAM,EAAEC,UAAU,EAAEM,SAAS,EAAEipB,YAAY,EAAEhpB,QAAQ,EAAE0d,WAAW,EAAE2L,SAAS,EAAE1pB,YAAY,EAAEu8C,aAAa,EAChHx8C,aAAa,EAAEO,cAAc,EAAEJ,aAAa,EAAE8wD,OAAO,EAAExnC,KAAK,EAAE45D,cAAc,EAC5E1rE,YAAY,EAAE+8G,YAAY,EAAEj0H,EAAE,EAAE2iF,cAAc,EAAEt5D,OAAO,EAAE5pB,eAAe,EAAEsgJ,kBAAkB,EAAE7tH,sBAAsB,EACpHxC,eAAe,EAAEvG,OAAO,EAAE85C,OAAO,EAAEypD,kBAAkB,EAAE;EAEvD;EACAptH,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE1pB,SAAS,CAACsxC;EAA0B,CAAC,CAAC,CAAC,CAAC;;EAEnG,IAAI,CAACroB,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;IACA;EACJ;EAEApqB,MAAM,CAACi6E,gBAAgB,GAAG/5E,aAAa,CAACkB,aAAa,KAAK,IAAI;EAC9DpB,MAAM,CAACkrB,eAAe,GAAGpB,OAAO,CAACqB,cAAc,CAACC,YAAY;EAE5DprB,MAAM,CAACkzB,WAAW,GAAG,UAAUC,OAAO,EAAE;IACpC,IAAIA,OAAO,EAAE;MACT,IAAIC,MAAM,GAAG,iBAAiB;MAC9B,IAAIC,IAAI,GAAG,SAAS,GAAGnzB,aAAa,CAACozB,OAAO,GAAG,UAAU,GAAGpzB,aAAa,CAACqzB,OAAO;MACjF,OAAOrzB,aAAa,CAACszB,YAAY,GAAG,MAAM,GAAGL,OAAO,GAAGE,IAAI;IAE/D;IACA,OAAO,IAAI;EACf,CAAC;EAEDrzB,MAAM,CAAC2wC,oBAAoB,GAAGzwC,aAAa,CAACywC,oBAAoB,CAAC,CAAC;EAClE3wC,MAAM,CAACm2D,cAAc,GAAGj2D,aAAa,CAACgmC,eAAe;EAErDlmC,MAAM,CAAC2+I,gBAAgB,GAAG,IAAI;EAC9B3+I,MAAM,CAAC2gJ,YAAY,GAAG,KAAK;EAC3B3gJ,MAAM,CAACk5B,WAAW,GAAG,KAAK;EAC1Bl5B,MAAM,CAACgW,OAAO,GAAG;IACbqnC,QAAQ,EAAE,GAAG;IACbm2C,QAAQ,EAAE,GAAG;IACbnyB,QAAQ,EAAE,IAAI;IACdC,MAAM,EAAE;EACZ,CAAC;EAEDthE,MAAM,CAAC4gJ,gBAAgB,GAAG;IACtB//I,UAAU,EAAE,IAAI;IAChBwgE,QAAQ,EAAE,IAAI;IACdC,MAAM,EAAE;EACZ,CAAC;EAEDthE,MAAM,CAACiiH,OAAO,GAAG,CAAC,CAAC;EACnBjiH,MAAM,CAAC6gJ,mBAAmB,GAAG/vH,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,CAAC,CAAC9H,MAAM,CAAC,CAAC;EAEpDjpB,MAAM,CAACq5B,YAAY,GAAG,CAAC;EACvBr5B,MAAM,CAAC8gJ,qBAAqB,GAAG,CAAC;EAChC9gJ,MAAM,CAACs5B,UAAU,GAAG,CAAC;EACrBt5B,MAAM,CAAC+gJ,mBAAmB,GAAG,CAAC;EAC9B/gJ,MAAM,CAACu5B,WAAW,GAAG,EAAE,CAAC;EACxBv5B,MAAM,CAACw5B,YAAY,GAAG,CAAC;EAEvBx5B,MAAM,CAACkJ,SAAS,GAAG,KAAK;EAExBlJ,MAAM,CAACuuG,yBAAyB,GAAG,KAAK;EACxCvuG,MAAM,CAACghJ,yBAAyB,GAAG,KAAK;EAExChhJ,MAAM,CAACsY,UAAU,GAAGjY,aAAa,CAAC4xE,aAAa,CAAC,CAAC;EACjDjyE,MAAM,CAACihJ,UAAU,GAAG,MAAM;EAC1BjhJ,MAAM,CAACkhJ,MAAM,GAAG,KAAK;EACrBlhJ,MAAM,CAACmhJ,SAAS,GAAG,MAAM;EACzB;;EAEAnhJ,MAAM,CAACmC,IAAI,GAAG;IAAE,QAAQ,EAAE9C,MAAM,CAAC+C,WAAW,GAAG,GAAG,GAAG;EAAK,CAAC;EAE3DpC,MAAM,CAAC83D,QAAQ,GAAGz3D,aAAa,CAACy3D,QAAQ;EACxC93D,MAAM,CAACohJ,eAAe,GAAG;IACrB7rI,KAAK,EAAE;EACX,CAAC;EAEDvV,MAAM,CAACqhJ,cAAc,GAAGnhJ,aAAa,CAACmhJ,cAAc;EACpDrhJ,MAAM,CAAC0uG,oBAAoB,GAAGxuG,aAAa,CAACwuG,oBAAoB;EAChE1uG,MAAM,CAACshJ,QAAQ,GAAG,KAAK;EACvBthJ,MAAM,CAACuhJ,gBAAgB,GAAG,IAAI;EAE9BvhJ,MAAM,CAACwhJ,eAAe,GAAG,CAAC;EAE1BxhJ,MAAM,CAACyhJ,kBAAkB,GAAG,IAAI;EAChCzhJ,MAAM,CAACT,MAAM,GAAGW,aAAa,CAACX,MAAM;EAEpCS,MAAM,CAAC0hJ,WAAW,GAAG,KAAK;EAI1B1hJ,MAAM,CAAC2hJ,cAAc,GAAG,UAASrzI,IAAI,EAAC;IACnCtO,MAAM,CAACshJ,QAAQ,GAAGhzI,IAAI;EACzB,CAAC;EAGDtO,MAAM,CAAC4hJ,eAAe,GAAG,UAAUt/E,QAAQ,EAAE;IACzC,IAAG,CAACA,QAAQ,EACRtiE,MAAM,CAAC8gJ,qBAAqB,GAAG,CAAC;IAEpCh9I,CAAC,CAACC,OAAO,CAAC,CAAC;IACXma,WAAW,CAACo2G,aAAa,CAACt0H,MAAM,CAAC8gJ,qBAAqB,EAAE9gJ,MAAM,CAACu5B,WAAW,EAAEv5B,MAAM,CAAC4gJ,gBAAgB,CAAC,CAAC58I,IAAI,CAAC,UAAUC,IAAI,EAAE;MACtHH,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAAC+1B,MAAM,EAAE,UAAS9zB,GAAG,EAACtG,EAAE,EAAC;QAChCA,EAAE,CAACq6B,iBAAiB,GAAGj6B,MAAM,CAACuqB,eAAe,CAAC3qB,EAAE,CAACs6B,aAAa,EAAE,IAAI,CAAC;QAErE,IAAGooC,QAAQ,EAAC;UACR,IAAG,CAACtiE,MAAM,CAAC6hJ,SAAS,CAAC97I,MAAM,CAAC,UAASo0B,GAAG,EAAC;YACrC,OAAOA,GAAG,CAAC/D,MAAM,KAAKx2B,EAAE,CAACw2B,MAAM;UACnC,CAAC,CAAC,CAAChwB,MAAM,GAAG,CAAC,EAAC;YACNpG,MAAM,CAAC6hJ,SAAS,CAACx7I,IAAI,CAACzG,EAAE,CAAC;UACjC;QACJ;MACJ,CAAC,CAAC;MAGF,IAAG,CAAC0iE,QAAQ,EAAC;QACTtiE,MAAM,CAAC6hJ,SAAS,GAAG59I,IAAI,CAAC+1B,MAAM;MAClC;MAEA8nH,iBAAiB,CAAC79I,IAAI,CAAC80B,KAAK,CAAC;MACzBj1B,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,EACD,UAASF,GAAG,EAAE;MACVL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACV,CAAC;EAED,SAAS29I,iBAAiBA,CAAC51H,KAAK,EAAE;IAC9BlsB,MAAM,CAACwhJ,eAAe,GAAGt1H,KAAK;IAC9B,IAAIqO,IAAI,GAAGv6B,MAAM,CAACu5B,WAAW;IAC7Bv5B,MAAM,CAAC+gJ,mBAAmB,GAAGlnH,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAClD,IAAIv6B,MAAM,CAAC+gJ,mBAAmB,KAAK,CAAC,EAAE;MACpC/gJ,MAAM,CAAC+gJ,mBAAmB,GAAG,CAAC;IAClC;EACJ;EAEA,IAAMgB,kCAAkC,GAAG,SAArCA,kCAAkCA,CAAA,EAAc;IAClD,IAAI/hJ,MAAM,CAAC8gJ,qBAAqB,GAAG9gJ,MAAM,CAAC+gJ,mBAAmB,EAAE;MAC3D/gJ,MAAM,CAAC8gJ,qBAAqB,EAAE;MAC9B9gJ,MAAM,CAAC4hJ,eAAe,CAAC,IAAI,CAAC;IAChC;EACJ,CAAC;EAGD5hJ,MAAM,CAACqB,QAAQ,GAAGnB,aAAa,CAACmB,QAAQ;EAExCrB,MAAM,CAACqC,GAAG,CAAC,+BAA+B,EAAE,UAAUC,KAAK,EAAEC,MAAM,EAAE;IACjEvC,MAAM,CAACqB,QAAQ,GAAGkB,MAAM;IACxB,IAAIvC,MAAM,CAACqB,QAAQ,KAAK,KAAK,EAAE;MAC3BrB,MAAM,CAACshJ,QAAQ,GAAG,KAAK;IAC3B;EACJ,CAAC,CAAC;EAEFthJ,MAAM,CAACqC,GAAG,CAAC,uBAAuB,EAAE,UAAUC,KAAK,EAAE;IACjDtC,MAAM,CAACs6B,MAAM,CAAC,CAAC;EACnB,CAAC,CAAC;EAEFt6B,MAAM,CAACgiJ,kBAAkB,GAAG,UAAS9nI,GAAG,EAAC;IACrCla,MAAM,CAACuhJ,gBAAgB,GAAGrnI,GAAG;IAC7Bla,MAAM,CAAC8sD,UAAU,GAAG,0BAA0B;IAE9CzsD,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC1Df,cAAc,CAACe,SAAS,CAAC,qCAAqC,CAAC,EAC/Df,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC,EAC/Bf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;EAE3C,CAAC;EAGDxB,MAAM,CAACiiJ,0BAA0B,GAAG,YAAU;IAC1C,IAAGjiJ,MAAM,CAACuhJ,gBAAgB,IAAI,IAAI,EAAC;MAE/Bz9I,CAAC,CAACC,OAAO,CAAC,CAAC;MACX,IAAI2vB,MAAM,GAAG1zB,MAAM,CAACuhJ,gBAAgB,CAACnrH,MAAM;MAC3ClY,WAAW,CAACq2G,YAAY,CAAC7gG,MAAM,CAAC,CAAC1vB,IAAI,CAAC,UAASw3B,QAAQ,EAAC;QACpD,IAAGA,QAAQ,CAAClE,UAAU,EAAC;UACnBxzB,CAAC,CAACO,SAAS,CAAC,CAAC;UACb,IAAIyF,IAAI,GAAG;YAACwtB,UAAU,EAAGkE,QAAQ,CAAClE;UAAU,CAAC;UAC7Ct3B,MAAM,CAACkiJ,UAAU,CAACp4I,IAAI,CAAC;QAC3B,CAAC,MACI;UACD9J,MAAM,CAACw7B,QAAQ,GAAGA,QAAQ;UAC1Bx7B,MAAM,CAACw7B,QAAQ,CAAC5H,WAAW,GAAG,EAAE;UAChC5zB,MAAM,CAACw7B,QAAQ,CAAC7H,cAAc,GAAG,KAAK;UAEtC3zB,MAAM,CAACw7B,QAAQ,CAAC3H,mBAAmB,GAAG7zB,MAAM,CAACuqB,eAAe,CAACvqB,MAAM,CAACw7B,QAAQ,CAAC1H,WAAW,EAAE9zB,MAAM,CAACsY,UAAU,CAAC;UAC5GtY,MAAM,CAACw7B,QAAQ,CAACzH,eAAe,GAAG/zB,MAAM,CAACuqB,eAAe,CAACvqB,MAAM,CAACw7B,QAAQ,CAACxH,OAAO,EAAEh0B,MAAM,CAACsY,UAAU,CAAC;UAEpG,IAAI6pI,WAAW,GAAGtvH,sBAAsB,CAACwO,qCAAqC,CAACrhC,MAAM,CAACw7B,QAAQ,CAAC;UAC/F,IAAI4mH,cAAc,GAAGD,WAAW,CAAC,CAAC,CAAC,CAACpgH,IAAI,CAAC+2G,cAAc;UAEvD,IAAIuJ,kBAAkB,GAAG,EAAE;UAE3Bv+I,CAAC,CAACmC,IAAI,CAACk8I,WAAW,EAAE,UAASj8I,GAAG,EAAE+xB,OAAO,EAAC;YACtC,IAAIqqH,UAAU,GAAGzvH,sBAAsB,CAACuF,wBAAwB,CAACH,OAAO,CAAC8J,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAEqgH,cAAc,EAAEnqH,OAAO,CAAC+J,QAAQ,CAAC;YAEhIsgH,UAAU,CAAChqH,WAAW,GAAGt4B,MAAM,CAACw7B,QAAQ,CAACjD,aAAa;YACtD+pH,UAAU,CAAC9pH,cAAc,GAAG,IAAI;YAChC6pH,kBAAkB,CAACh8I,IAAI,CAAC;cAACi8I,UAAU,EAAVA,UAAU;cAAErqH,OAAO,EAAEA,OAAO,CAAC8J;YAAI,CAAC,CAAC;UAChE,CAAC,CAAC;UAGF,IAAIvlB,GAAG,GAAGnc,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;UAE5Cp0C,CAAC,CAACmC,IAAI,CAACo8I,kBAAkB,EAAE,UAAUn8I,GAAG,EAAE67B,IAAI,EAAE;YAC5CvlB,GAAG,GAAGA,GAAG,CAACxY,IAAI,CAAC,YAAU;cACrB,OAAO6uB,sBAAsB,CAAC4F,QAAQ,CAACsJ,IAAI,CAACugH,UAAU,EAAEvgH,IAAI,CAAC9J,OAAO,EAAE,IAAI,EAAG,IAAI,CAAC;YACtF,CAAC,CAAC;UACN,CAAC,CAAC;UAEFzb,GAAG,CAACxY,IAAI,CAAC,UAASC,IAAI,EAAC;YACnB,IAAGA,IAAI,CAACutB,MAAM,IAAIvtB,IAAI,CAACutB,MAAM,CAACprB,MAAM,GAAG,CAAC,EAAC;cACrC,IAAIsyB,YAAY,GAAG,EAAE;cACrB50B,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAACutB,MAAM,EAAE,UAASmE,GAAG,EAACtM,KAAK,EAAC;gBACnCvlB,CAAC,CAACmC,IAAI,CAACojB,KAAK,CAACmI,MAAM,EAAE,UAASmE,GAAG,EAACgD,MAAM,EAAC;kBACrCD,YAAY,IAAIC,MAAM,CAACC,YAAY,GAAG,OAAO;gBACjD,CAAC,CAAC;cACN,CAAC,CAAC;cACF90B,CAAC,CAACO,SAAS,CAAC,CAAC;cACblE,YAAY,CAACiE,SAAS,CAACs0B,YAAY,CAAC;YACxC,CAAC,MAAI;cACD50B,CAAC,CAACO,SAAS,CAAC,CAAC;cAEb,IAAIyF,IAAI,GAAG;gBAACwtB,UAAU,EAAG5D;cAAM,CAAC;cAChC1zB,MAAM,CAACkiJ,UAAU,CAACp4I,IAAI,CAAC;YAC3B;UACJ,CAAC,CAAC,SAAM,CAAC,UAAS3F,GAAG,EAAC;YAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;YACb,IAAIglB,KAAK,GAAG5oB,cAAc,CAACe,SAAS,CAAC,oEAAoE,CAAC;YAC1GrB,YAAY,CAACiE,SAAS,CAACilB,KAAK,CAAC;UACjC,CAAC,CAAC;QAEN;MACJ,CAAC,EAAC,YAAU;QACRvlB,CAAC,CAACO,SAAS,CAAC,CAAC;QAEb,IAAIglB,KAAK,GAAG5oB,cAAc,CAACe,SAAS,CAAC,oEAAoE,CAAC;QAE1GrB,YAAY,CAACiE,SAAS,CAACilB,KAAK,CAAC;MACjC,CAAC,CAAC;IACN;IACArpB,MAAM,CAACuhJ,gBAAgB,GAAG,IAAI;EAClC,CAAC;EAGDvhJ,MAAM,CAAC0I,MAAM,CAAC,kBAAkB,EAC5B,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAE1B,IAAI5I,MAAM,CAACghJ,yBAAyB,EAAE;MAClChhJ,MAAM,CAACq5B,YAAY,GAAG,CAAC;MACvBr5B,MAAM,CAACs6B,MAAM,CAAC,CAAC;IACnB;IAEAt6B,MAAM,CAACghJ,yBAAyB,GAAG,IAAI;EAC3C,CACJ,CAAC;EAEDhhJ,MAAM,CAAC0I,MAAM,CAAC,kBAAkB,EAC5B,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAE1B,IAAI5I,MAAM,CAACuuG,yBAAyB,EAAE;MAClCvuG,MAAM,CAACq5B,YAAY,GAAG,CAAC;MACvBr5B,MAAM,CAACs6B,MAAM,CAAC,CAAC;IACnB;IAEAt6B,MAAM,CAACuuG,yBAAyB,GAAG,IAAI;EAC3C,CACJ,CAAC;EAEDvuG,MAAM,CAACksD,oBAAoB,GAAG,UAAUhiD,IAAI,EAAEiiD,EAAE,EAAE;IAC9CnsD,MAAM,CAACgW,OAAO,CAACqrD,QAAQ,GAAGn3D,IAAI;IAC9BlK,MAAM,CAACgW,OAAO,CAACsrD,MAAM,GAAGnV,EAAE;IAC1BnsD,MAAM,CAACq5B,YAAY,GAAG,CAAC;IACvB,IAAIr5B,MAAM,CAACshJ,QAAQ,KAAK,KAAK,EAAE;MAC3BthJ,MAAM,CAACuiJ,6BAA6B,CAACr4I,IAAI,EAAEiiD,EAAE,CAAC;IAClD,CAAC,MAAM;MACHnsD,MAAM,CAACs6B,MAAM,CAAC,CAAC;IACnB;EACJ,CAAC;EAEDt6B,MAAM,CAACuiJ,6BAA6B,GAAG,UAAUr4I,IAAI,EAAEiiD,EAAE,EAAE;IACvDnsD,MAAM,CAAC4gJ,gBAAgB,CAACv/E,QAAQ,GAAGn3D,IAAI;IACvClK,MAAM,CAAC4gJ,gBAAgB,CAACt/E,MAAM,GAAGnV,EAAE;IACnCnsD,MAAM,CAAC8gJ,qBAAqB,GAAG,CAAC;IAChC9gJ,MAAM,CAAC4hJ,eAAe,CAAC,CAAC;EAC5B,CAAC;EAED,IAAM9nH,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAA,EAAe;IAC1C,IAAI95B,MAAM,CAACshJ,QAAQ,IAAI,KAAK,EAAE;MAC1BS,kCAAkC,CAAC,CAAC;MACpC;IACJ;IACA,IAAI,CAAC/hJ,MAAM,CAACkJ,SAAS,IAAIlJ,MAAM,CAACq5B,YAAY,GAAGr5B,MAAM,CAACs5B,UAAU,EAAE;MAC9Dt5B,MAAM,CAACq5B,YAAY,EAAE;MACrBr5B,MAAM,CAACs6B,MAAM,CAAC,IAAI,CAAC;IACvB;EACJ,CAAC;EAEDD,iBAAiB,CAACP,yBAAyB,CAAC;EAE5C95B,MAAM,CAAC45B,GAAG,GAAG,UAAU5zB,CAAC,EAAE;IACtB,IAAIA,CAAC,EACD,OAAO3F,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAAC5zB,CAAC,CAAC,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC;EACZ,CAAC;EAEDhG,MAAM,CAACwiJ,YAAY,GAAG,UAAUpnI,GAAG,EAAE28B,MAAM,EAAE;IACzC,IAAIA,MAAM,KAAK,QAAQ,EACnB,OAAO,KAAK;IAChB,IAAI0qG,IAAI,GAAG,KAAK;IAChB3+I,CAAC,CAACmC,IAAI,CAACmV,GAAG,EAAE,UAAUlV,GAAG,EAAEtG,EAAE,EAAE;MAC3B,IAAIA,EAAE,CAAC8iJ,SAAS,KAAK,IAAI,IAAI9iJ,EAAE,CAAC8C,IAAI,KAAK,UAAU,EAAE;QACjD+/I,IAAI,GAAG,IAAI;MACf;IACJ,CAAC,CAAC;IACF,OAAOA,IAAI;EACf,CAAC;EAEDziJ,MAAM,CAACwsF,KAAK,GAAG,YAAY;IACvBxsF,MAAM,CAACuuG,yBAAyB,GAAG,KAAK;IACxCvuG,MAAM,CAACghJ,yBAAyB,GAAG,KAAK;IAExChhJ,MAAM,CAACgW,OAAO,CAACqnC,QAAQ,GAAG,GAAG;IAC7Br9C,MAAM,CAACgW,OAAO,CAAC2sI,SAAS,GAAG,GAAG;IAE9B3iJ,MAAM,CAACgW,OAAO,CAACw9E,QAAQ,GAAG,GAAG;IAC7BxzF,MAAM,CAACgW,OAAO,CAAC4sI,SAAS,GAAG,GAAG;IAE9B5iJ,MAAM,CAACgW,OAAO,CAACqrD,QAAQ,GAAG,IAAI;IAC9BrhE,MAAM,CAACgW,OAAO,CAACsrD,MAAM,GAAG,IAAI;IAE5BthE,MAAM,CAACgW,OAAO,CAAC6sI,SAAS,GAAG,IAAI;IAC/B7iJ,MAAM,CAACgW,OAAO,CAAC8sI,OAAO,GAAG,IAAI;IAE7B9iJ,MAAM,CAACyuG,WAAW,GAAG,IAAI;IAEzBjuG,QAAQ,CAAC,YAAY;MACjBA,QAAQ,CAAC,YAAY;QAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAAE,CAAC,CAAC;IAEpE,CAAC,CAAC;IAEFxE,MAAM,CAACs6B,MAAM,CAAC,CAAC;EACnB,CAAC;EAEDt6B,MAAM,CAAC+iJ,WAAW,GAAG;IACjBC,UAAU,EAAE,IAAI;IAChBrqE,OAAO,EAAE,IAAIl9C,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;IAC9Bi9C,OAAO,EAAE,IAAIj9C,IAAI,CAAC,CAAC;IACnBwnH,WAAW,EAAE;EACjB,CAAC;EACDjjJ,MAAM,CAACkjJ,UAAU,GAAG;IAChBC,MAAM,EAAE;EACZ,CAAC;EACDnjJ,MAAM,CAACojJ,cAAc,GAAG,YAAY;IAChCpjJ,MAAM,CAACkjJ,UAAU,CAACC,MAAM,GAAG,IAAI;EACnC,CAAC;EAEDnjJ,MAAM,CAACiwC,oBAAoB,GAAG,EAAE;EAEhCjwC,MAAM,CAACqjJ,sBAAsB,GAAG,UAAUC,SAAS,EAAE;IACjD,IAAItmI,GAAG,GAAGhd,MAAM,CAACiwC,oBAAoB,CAAClqC,MAAM,CAAC,UAAUnG,EAAE,EAAE;MAAE,OAAOA,EAAE,CAACkwC,wBAAwB,KAAKwzG,SAAS;IAAE,CAAC,CAAC;IAEjH,OAAOtmI,GAAG,CAAC5W,MAAM,GAAG,CAAC,GAAG4W,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;EACzC,CAAC;EAED,SAASumI,WAAWA,CAAA,EAAG;IACnBz/I,CAAC,CAACzE,MAAM,CAAC,CAAC20D,EAAE,CAAC,QAAQ,EAAE,YAAY;MAC/B0sF,kBAAkB,CAACr0E,cAAc,CAAC,0BAA0B,EAAE,mBAAmB,EAAE,IAAI,CAAC;IAE5F,CAAC,CAAC;EACN;EAEA,SAASt8B,iBAAiBA,CAAA,EAAG;IACzB7vC,aAAa,CAAC6vC,iBAAiB,CAAC/vC,MAAM,CAAC;IAEvC,IAAI,CAAC,CAACA,MAAM,CAAC4P,WAAW,IAAI,CAAC,CAAC5P,MAAM,CAAC4P,WAAW,CAACqyB,cAAc,EAAE;MAC7DniC,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAAC4P,WAAW,CAACqyB,cAAc,EAAE,UAAUriC,EAAE,EAAE;QAC7D,IAAIA,EAAE,CAACkhC,eAAe,IAAI,SAAS,IAAIlhC,EAAE,CAACihC,SAAS,CAACxxB,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;UACrF,IAAIrP,MAAM,CAACqjJ,sBAAsB,CAACzjJ,EAAE,CAACihC,SAAS,CAAC,IAAI,IAAI,EAAE;YACrD,IAAIlf,GAAG,GAAG;cACNmuB,wBAAwB,EAAElwC,EAAE,CAACihC,SAAS;cACtCtiB,kBAAkB,EAAE3e,EAAE,CAACihC,SAAS,CAACjgB,MAAM,CAAC,oBAAoB,CAACxa,MAAM,CAAC;cACpEgvG,iBAAiB,EAAEx1G,EAAE,CAACkhC,eAAe;cACrCxiB,QAAQ,EAAE;YACd,CAAC;YAEDte,MAAM,CAACiwC,oBAAoB,CAAC5pC,IAAI,CAACsb,GAAG,CAAC;UACzC;QACJ;MACJ,CAAC,CAAC;IACN;EAEJ;EAEA3hB,MAAM,CAACwjJ,0BAA0B,GAAG,UAAUF,SAAS,EAAE;IACrD,IAAItmI,GAAG,GAAGhd,MAAM,CAACiwC,oBAAoB,CAAClqC,MAAM,CAAC,UAAUnG,EAAE,EAAE;MAAE,OAAOA,EAAE,CAACkwC,wBAAwB,KAAKwzG,SAAS;IAAE,CAAC,CAAC;IAEjH,OAAOtmI,GAAG,CAAC5W,MAAM,GAAG,CAAC,GAAG4W,GAAG,CAAC,CAAC,CAAC,CAACo4F,iBAAiB,GAAGkuC,SAAS;EAChE,CAAC;;EAGD;EACAtjJ,MAAM,CAACkE,IAAI,GAAG,EAAE;EAChBlE,MAAM,CAACsuG,QAAQ,GAAG/tG,SAAS,CAACszC,YAAY;EACxC7zC,MAAM,CAACwuG,eAAe,GAAG,CAAC,CAAC;EAE3BxuG,MAAM,CAACyjJ,iBAAiB,GAAG,YAAY;IACnC,OAAO;IACH;IACA;IACA;MAAEC,UAAU,EAAEjjJ,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC;MAAEgyF,QAAQ,EAAE;IAAS,CAAC,EACtE;MAAEkwD,UAAU,EAAEjjJ,cAAc,CAACe,SAAS,CAAC,OAAO,CAAC;MAAEgyF,QAAQ,EAAE;IAAQ,CAAC,EACpE;MAAEkwD,UAAU,EAAEjjJ,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC;MAAEgyF,QAAQ,EAAE;IAAe,CAAC,EAClF;MAAEkwD,UAAU,EAAEjjJ,cAAc,CAACe,SAAS,CAAC,YAAY,CAAC;MAAEgyF,QAAQ,EAAE;IAAY,CAAC,EAC7E;MAAEkwD,UAAU,EAAEjjJ,cAAc,CAACe,SAAS,CAAC,mBAAmB,CAAC;MAAEgyF,QAAQ,EAAE;IAAmB,CAAC,EAC3F;MAAEkwD,UAAU,EAAEjjJ,cAAc,CAACe,SAAS,CAAC,UAAU,CAAC;MAAEgyF,QAAQ,EAAE;IAAS,CAAC,EACxE;MAAEkwD,UAAU,EAAEjjJ,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC;MAAEgyF,QAAQ,EAAE,CAAC,cAAc,EAAE,qBAAqB;IAAE,CAAC,CACxG;EACL,CAAC;EAEDxzF,MAAM,CAACwuG,eAAe,CAACF,QAAQ,GAAGtuG,MAAM,CAACyjJ,iBAAiB,CAAC,CAAC;EAE5DzjJ,MAAM,CAACqC,GAAG,CAAC,gBAAgB,EAAE,UAAUC,KAAK,EAAE;IAC1CtC,MAAM,CAACwuG,eAAe,CAACF,QAAQ,GAAGtuG,MAAM,CAACyjJ,iBAAiB,CAAC,CAAC;EAChE,CAAC,CAAC;EAEFzjJ,MAAM,CAAC2jJ,mBAAmB,GAAG,UAAUpoD,IAAI,EAAEvJ,SAAS,EAAEjwD,IAAI,EAAE6hH,cAAc,EAAE;IAC1E,IAAI,CAAC7hH,IAAI,EAAE;IAEX,IAAI0kG,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAACa,IAAI,CAAC4kG,aAAa,CAAC;IAEnE,IAAIkd,UAAU,GAAGpd,SAAS,GAAG5rG,gFAAc,CAACkH,IAAI,CAAC4kG,aAAa,CAAC,GAAG,IAAI;IAEtE,IAAI5kG,IAAI,CAAC+hH,gBAAgB,KAAK,IAAI,IAAI/hH,IAAI,CAACgiH,kBAAkB,EACzDxoD,IAAI,GAAG,QAAQ;IAEnB,IAAGsoD,UAAU,IAAI7xD,SAAS,EAAE;MACxBA,SAAS,GAAG6xD,UAAU,CAACxhH,aAAa;IACxC;IAEA,IAAIh5B,GAAG,GAAGrJ,MAAM,CAACwuG,eAAe,CAACF,QAAQ,CAACvoG,MAAM,CAAC,UAAU2O,CAAC,EAAE;MAC1D,OAAOzK,KAAK,CAAC0wC,OAAO,CAACjmC,CAAC,CAAC8+E,QAAQ,CAAC,GAAG9+E,CAAC,CAAC8+E,QAAQ,CAACnkF,OAAO,CAACksF,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG7mF,CAAC,CAAC8+E,QAAQ,KAAK+H,IAAI;IAC5F,CAAC,CAAC;IACF,IAAInS,CAAC,GAAGmS,IAAI;IACZ,IAAIkzC,QAAQ,GAAGlzC,IAAI,KAAK,QAAQ;IAChC,IAAIyoD,UAAU,GAAGzoD,IAAI,KAAK,QAAQ,KAAKx5D,IAAI,CAAClL,KAAK,IAAIkL,IAAI,CAAClL,KAAK,CAACzwB,MAAM,GAAG,CAAC,IAAI27B,IAAI,CAACgiH,kBAAkB,CAAC;IAEtG,IAAIC,UAAU,EACVvV,QAAQ,GAAG,KAAK;IAEpB,IAAIplI,GAAG,CAACjD,MAAM,GAAG,CAAC,EAAE;MAChB,IAAIqgI,SAAS,IAAIud,UAAU,EACvB56D,CAAC,GAAG3oF,cAAc,CAACe,SAAS,CAAC,WAAW,CAAC,CAAC,KAE1C4nF,CAAC,GAAG//E,GAAG,CAAC,CAAC,CAAC,CAACq6I,UAAU;IAC7B;IAEA,IAAI1D,QAAQ,GAAGzkD,IAAI,IAAIA,IAAI,CAAChzD,QAAQ,CAAC,QAAQ,CAAC;IAE9C,IAAIy3G,QAAQ,EAAE;MACV,IAAIzkD,IAAI,KAAK,cAAc,EAAE;QACzBnS,CAAC,GAAG3oF,cAAc,CAACe,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,GAAGf,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC;MACrF,CAAC,MAAM,IAAI+5F,IAAI,IAAI,qBAAqB,EAAE;QACtCnS,CAAC,GAAG3oF,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC,GAAG,IAAI,GAAGf,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC;MAC5F;MACA,OAAO4nF,CAAC;IACZ,CAAC,MAAM,IAAI4I,SAAS,EAAE;MAClB5I,CAAC,IAAI,GAAG,GAAG3oF,cAAc,CAACe,SAAS,CAAC,WAAW,CAAC;MAChD,IAAIilI,SAAS,IAAKmd,cAAc,KAAKjzI,SAAS,IAAIizI,cAAc,KAAK,IAAK,EAAE;QACxE,IAAIj6C,OAAO,GAAGk6C,UAAU,CAACrnH,OAAO;QAEhC,IAAImtE,OAAO,EAAE;UACT,IAAIi6C,cAAc,IAAI,CAACnV,QAAQ,EAAE;YAC7BrlD,CAAC,IAAI,IAAI,GAAG3oF,cAAc,CAACe,SAAS,CAAC,sBAAsB,CAAC;UAChE,CAAC,MAAM,IAAIitI,QAAQ,IAAIuV,UAAU,EAAC;YAC9B56D,CAAC,IAAI,IAAI,GAAG3oF,cAAc,CAACe,SAAS,CAAC,qBAAqB,CAAC;UAC/D;QACJ;MACJ;IACJ,CAAC,MAAM;MACH,IAAIilI,SAAS,IAAIud,UAAU,EAAE;QACzB,IAAIjiH,IAAI,CAAChJ,KAAK,GAAG,CAAC,EACdqwD,CAAC,IAAI,IAAI,GAAG3oF,cAAc,CAACe,SAAS,CAAC,OAAO,CAAC,CAAC,KAE9C4nF,CAAC,IAAI,IAAI,GAAG3oF,cAAc,CAACe,SAAS,CAAC,WAAW,CAAC;MACzD;IACJ;IAEA,OAAO4nF,CAAC;EACZ,CAAC;EAEDppF,MAAM,CAACwuG,eAAe,CAACxuD,OAAO,GAAG,EAAE;EACnChgD,MAAM,CAACwuG,eAAe,CAACqsB,KAAK,GAAG,EAAE;EAEjC,SAAS7rB,WAAWA,CAAA,EAAG;IACnB,IAAIhvG,MAAM,CAACwuG,eAAe,CAACxuD,OAAO,IAAIhgD,MAAM,CAACwuG,eAAe,CAACxuD,OAAO,CAAC55C,MAAM,GAAG,CAAC,EAAE;MAC7E,OAAO/F,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;IAC7C;IAEA,OAAOwE,aAAa,CAACuyD,aAAa,CAAC/uG,aAAa,CAACmkC,WAAW,CAAC,CAACrgC,IAAI,CAAC,UAAUC,IAAI,EAAE;MAC/EH,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAACi7C,OAAO,EAAE,UAAUh5C,GAAG,EAAEtG,EAAE,EAAE;QACpCI,MAAM,CAACwuG,eAAe,CAACxuD,OAAO,CAAC35C,IAAI,CAAC;UAAEqkB,UAAU,EAAE9qB,EAAE,CAAC8qB,UAAU;UAAE2yB,QAAQ,EAAEz9C,EAAE,CAAC4rC;QAAY,CAAC,CAAC;MAChG,CAAC,CAAC;MAEF,IAAIxrC,MAAM,CAACwuG,eAAe,CAACxuD,OAAO,CAAC55C,MAAM,IAAI,CAAC,EAAE;QAC5CpG,MAAM,CAACgW,OAAO,CAACqnC,QAAQ,GAAGr9C,MAAM,CAACwuG,eAAe,CAACxuD,OAAO,CAAC,CAAC,CAAC,CAAC3C,QAAQ;MACxE;MAEA78C,QAAQ,CAAC,YAAY;QACjB0E,WAAW,CAAC,CAAC;QAEb1E,QAAQ,CAAC,YAAY;UAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;QAAE,CAAC,CAAC;MAEpE,CAAC,CAAC;MAEF,OAAO0Z,WAAW,CAAC+yG,YAAY,CAAC,CAAC,CAACjtH,IAAI,CAAC,UAAUC,IAAI,EAAE;QACnDjE,MAAM,CAACwuG,eAAe,CAACqsB,KAAK,GAAG,EAAE;QACjC/2H,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAACggJ,KAAK,EAAE,UAAU/9I,GAAG,EAAEtG,EAAE,EAAE;UAClCI,MAAM,CAACwuG,eAAe,CAACqsB,KAAK,CAACx0H,IAAI,CAAC;YAAEywB,QAAQ,EAAEl3B,EAAE,CAACk3B;UAAS,CAAC,CAAC;QAChE,CAAC,CAAC;QACF,IAAI9Y,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAC1BwS,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;QACvB,OAAOuS,SAAS,CAACtS,OAAO;MAC5B,CAAC,CAAC;IACN,CAAC,CAAC;EACN;EAEA1L,MAAM,CAACkkJ,iBAAiB,GAAG,YAAY;IACnC,IAAIh+I,GAAG,GAAG,CAAC,CAAClG,MAAM,CAAC0+I,YAAY,GAAG1+I,MAAM,CAAC0+I,YAAY,CAACpnH,UAAU,GAAG,IAAI;IACvE,OAAOt3B,MAAM,CAACmkJ,cAAc,CAACj+I,GAAG,CAAC;EACrC,CAAC;;EAED;EACAlG,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB,OAAO7rB,MAAM,CAACmkJ,cAAc,CAAC,CAAC,SACpB,CAAC,UAAUhgJ,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAACmkJ,cAAc,GAAG,UAAUC,UAAU,EAAE;IAC1C/kJ,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;IACjDz3B,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;IACzB7sB,MAAM,CAACqkJ,mBAAmB,CAAC,CAAC;IAC5BvgJ,CAAC,CAACC,OAAO,CAAC,CAAC;;IAEX;;IAEA,IAAI,CAACqgJ,UAAU,EAAE;MACbpkJ,MAAM,CAACkE,IAAI,GAAG,EAAE;MAChBlE,MAAM,CAACgW,OAAO,CAAC4gB,MAAM,GAAG,IAAI;MAC5B52B,MAAM,CAACgW,OAAO,CAAC86G,eAAe,GAAG9wH,MAAM,CAAC6gJ,mBAAmB;IAC/D,CAAC,MAAM;MACH7gJ,MAAM,CAACgW,OAAO,CAAC4gB,MAAM,GAAGwtH,UAAU;MAClCpkJ,MAAM,CAACgW,OAAO,CAAC86G,eAAe,GAAG,IAAI;IACzC;IAGA,OAAO5yG,WAAW,CAACiyG,gBAAgB,CAACnwH,MAAM,CAACq5B,YAAY,EAAEr5B,MAAM,CAACu5B,WAAW,EAAEv5B,MAAM,CAACgW,OAAO,EAAEhW,MAAM,CAACiiH,OAAO,EAAEjiH,MAAM,CAACyuG,WAAW,CAAC,CAC3HzqG,IAAI,CAAC,UAAUC,IAAI,EAAE;MAElB,IAAIqgJ,eAAe,GAAG,EAAE;MAExB,IAAIC,QAAQ,GAAGpzF,OAAO,CAACltD,IAAI,CAAC+1B,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC;MACtDl2B,CAAC,CAACmC,IAAI,CAACs+I,QAAQ,EAAE,UAAUr+I,GAAG,EAAEtG,EAAE,EAAE;QAEhCA,EAAE,CAACq6B,iBAAiB,GAAGj6B,MAAM,CAACuqB,eAAe,CAAC3qB,EAAE,CAAC+nI,SAAS,EAAE,IAAI,CAAC;QACjE,IAAG/nI,EAAE,CAACiqI,SAAS,EAAC;UACZjqI,EAAE,CAAC4kJ,aAAa,GAAG,IAAI;UACvB5kJ,EAAE,CAACiqI,SAAS,GAAIxpI,aAAa,CAAC0qD,gBAAgB,CAACnrD,EAAE,CAACiqI,SAAS,CAAC;QAChE;QAEA,IAAGjqI,EAAE,CAACowH,IAAI,EAAC;UAEP,IAAIy0B,OAAO,GAAG/sH,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACowH,IAAI,CAAC2W,aAAa,CAAC;UAC/C;UACA;UACA;UACA;;UAGA;UACA,IAAI+d,aAAa,GAAGrkJ,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC2kJ,gBAAgB,CAAC/kJ,EAAE,CAACowH,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;UAC1F,IAAI40B,aAAa,GAAGvkJ,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC6kJ,gBAAgB,CAACjlJ,EAAE,CAACowH,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;UAE1F,IAAI80B,gBAAgB,GAAGL,OAAO,IAAIA,OAAO,CAAC9nH,SAAS,KAAK,WAAW,IAAIt8B,aAAa,CAAC6uB,SAAS,CAACu1H,OAAO,CAACjoH,OAAO,EAAC,CAAC,CAAC,IAAE,CAAC;UAEpH58B,EAAE,CAACwpI,eAAe,GAAG,EAAExpI,EAAE,CAACyD,MAAM,IAAI,QAAQ,IAAIyhJ,gBAAgB,CAAC,IAC7DllJ,EAAE,CAACyD,MAAM,IAAI,WAAW,IACxBzD,EAAE,CAACyD,MAAM,IAAI,OAAO,IACpBzD,EAAE,CAACyD,MAAM,IAAI,cAAc,IAC3BzD,EAAE,CAACyD,MAAM,IAAI,kBAAkB,IAC/BuhJ,aAAa,GAAGF,aAAa;UAEjC,IAAI9kJ,EAAE,CAACyD,MAAM,KAAK,OAAO,EAAE;YACvBohJ,OAAO,GAAG5pH,gFAAc,CAAC4pH,OAAO,CAAC;YAEjC,IAAIA,OAAO,CAAC5a,SAAS,EAAE;cACnBjqI,EAAE,CAAC4kJ,aAAa,GAAG,IAAI;cACvB5kJ,EAAE,CAACiqI,SAAS,GAAGxpI,aAAa,CAAC0qD,gBAAgB,CAAC05F,OAAO,CAAC5a,SAAS,CAAC;YACpE;UACJ;QAEJ;;QAEA;QACA,IAAIjqI,EAAE,CAACyD,MAAM,IAAIzD,EAAE,CAACyD,MAAM,CAACklC,QAAQ,CAAC,QAAQ,CAAC,EAAE;UAC3C3oC,EAAE,CAACq0G,eAAe,GAAGxzG,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC;QAC3D;QAEA,IAAI4iJ,UAAU,EAAE;UACZtgJ,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAACkE,IAAI,EAAE,UAAUqC,KAAK,EAAEuD,IAAI,EAAE;YACvC,IAAIA,IAAI,CAACiqF,OAAO,KAAKqwD,UAAU,IAAIxkJ,EAAE,CAACm0F,OAAO,KAAKqwD,UAAU,EAAE;cAC1DpkJ,MAAM,CAACkE,IAAI,CAACqC,KAAK,CAAC,GAAG3G,EAAE;YAC3B;UACJ,CAAC,CAAC;QACN;QAEA,IAAI,CAACI,MAAM,CAACkE,IAAI,CAAC6B,MAAM,CAAC,UAAUo0B,GAAG,EAAE;UACnC,OAAOA,GAAG,CAAC45D,OAAO,KAAKn0F,EAAE,CAACm0F,OAAO;QACrC,CAAC,CAAC,CAAC3tF,MAAM,GAAG,CAAC,EAAE;UACX,IAAIpG,MAAM,CAAC6gJ,mBAAmB,GAAGjhJ,EAAE,CAACgoI,YAAY,EAAE;YAC9C0c,eAAe,CAACj+I,IAAI,CAACzG,EAAE,CAAC;UAC5B,CAAC,MAAM;YACHI,MAAM,CAACkE,IAAI,CAACmC,IAAI,CAACzG,EAAE,CAAC;UACxB;QACJ;MAEJ,CAAC,CAAC;MAEF0kJ,eAAe,GAAGnzF,OAAO,CAACmzF,eAAe,EAAE,WAAW,EAAE,KAAK,CAAC;MAC9DxgJ,CAAC,CAACmC,IAAI,CAACq+I,eAAe,EAAE,UAAUp+I,GAAG,EAAEtG,EAAE,EAAE;QACvCI,MAAM,CAACkE,IAAI,CAACiK,OAAO,CAACvO,EAAE,CAAC;MAC3B,CAAC,CAAC;MAGFI,MAAM,CAAC6gJ,mBAAmB,GAAG/vH,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,CAAC,CAAC9H,MAAM,CAAC,CAAC;MAEpD,IAAI,CAACm7H,UAAU,EACXhqH,QAAQ,CAACn2B,IAAI,CAAC80B,KAAK,CAAC;MAExB,OAAOi2E,WAAW,CAAC,CAAC,CAAChrG,IAAI,CAAC,YAAY;QAClC,IAAIhE,MAAM,CAAC81H,eAAe,EAAE;UACxBhyH,CAAC,CAACO,SAAS,CAAC,CAAC;UACb,IAAI2Z,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;UAC1BwS,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;UACvB,OAAOuS,SAAS,CAACtS,OAAO;QAC5B,CAAC,MAAM;UACH,OAAO63E,cAAc,CAACkgB,kBAAkB,CAAC,IAAI,CAAC,CAACz/F,IAAI,CAAC,UAAU+gJ,WAAW,EAAE;YACvE,IAAIC,cAAc,GAAG,0BAA0B;YAC/C,IAAI1wF,QAAQ,GAAGywF,WAAW,CAAC/rD,QAAQ,CAAC1+D,MAAM,CAAC,4BAA4B,CAAC;YACxE,IAAI7S,MAAM,GAAG,CAACs9H,WAAW,CAAC/rD,QAAQ,CAACtvF,KAAK,CAAC,CAAC,EAAE4qD,QAAQ,CAAC,EAAE0wF,cAAc,EAAED,WAAW,CAAC/rD,QAAQ,CAACtvF,KAAK,CAAC4qD,QAAQ,CAAC,CAAC,CAAC3/C,IAAI,CAAC,EAAE,CAAC;YAGrH,IAAI0xG,cAAc,GAAG,gSAAgS;YACrT5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,4CAA4C,EAAE0mG,cAAc,CAAC;YACrFA,cAAc,GAAG,qSAAqS;YACtT5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,6CAA6C,EAAE0mG,cAAc,CAAC;YAEtFA,cAAc,GAAG,mWAAmW;YACpX5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,8CAA8C,EAAE0mG,cAAc,CAAC;YACvFA,cAAc,GAAG,sWAAsW;YACvX5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,+CAA+C,EAAE0mG,cAAc,CAAC;YACxFA,cAAc,GAAG,iYAAiY;YAClZ5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,wDAAwD,EAAE0mG,cAAc,CAAC;YACjGA,cAAc,GAAG,mWAAmW;YACpX5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,8CAA8C,EAAE0mG,cAAc,CAAC;YACvFA,cAAc,GAAG,mWAAmW;YACpX5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,8CAA8C,EAAE0mG,cAAc,CAAC;YAEvFrmH,MAAM,CAAC81H,eAAe,GAAGruG,MAAM;YAE/B,IAAIs9H,WAAW,CAACrhD,aAAa,EAAE;cAC3BpvC,QAAQ,GAAGywF,WAAW,CAACrhD,aAAa,CAACppE,MAAM,CAAC,4BAA4B,CAAC;cACzE7S,MAAM,GAAG,CAACs9H,WAAW,CAACrhD,aAAa,CAACh6F,KAAK,CAAC,CAAC,EAAE4qD,QAAQ,CAAC,EAAE0wF,cAAc,EAAED,WAAW,CAACrhD,aAAa,CAACh6F,KAAK,CAAC4qD,QAAQ,CAAC,CAAC,CAAC3/C,IAAI,CAAC,EAAE,CAAC;cAE3H0xG,cAAc,GAAG,sEAAsE;cACvF5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,4CAA4C,EAAE0mG,cAAc,CAAC;cACrFA,cAAc,GAAG,uEAAuE;cACxF5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,6CAA6C,EAAE0mG,cAAc,CAAC;cAEtFA,cAAc,GAAG,uGAAuG;cACxH5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,0CAA0C,EAAE0mG,cAAc,CAAC;cACnFA,cAAc,GAAG,wGAAwG;cACzH5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,2CAA2C,EAAE0mG,cAAc,CAAC;cACpFA,cAAc,GAAG,iHAAiH;cAClI5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,oDAAoD,EAAE0mG,cAAc,CAAC;cAC7FA,cAAc,GAAG,uGAAuG;cACxH5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,0CAA0C,EAAE0mG,cAAc,CAAC;cACnFA,cAAc,GAAG,uGAAuG;cACxH5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,0CAA0C,EAAE0mG,cAAc,CAAC;cAEnFrmH,MAAM,CAAC+1H,oBAAoB,GAAGtuG,MAAM;YACxC,CAAC,MAAM;cACHznB,MAAM,CAAC+1H,oBAAoB,GAAGtuG,MAAM;YACxC;YAEAznB,MAAM,CAACg2H,mBAAmB,GAAG+uB,WAAW,CAACphD,YAAY;YACrD3jG,MAAM,CAACilJ,iBAAiB,GAAGF,WAAW,CAACnhD,UAAU;YACjD9/F,CAAC,CAACO,SAAS,CAAC,CAAC;YACb,IAAI2Z,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;YAC1BwS,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;YACvB,OAAOuS,SAAS,CAACtS,OAAO;UAE5B,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;IACN;IACI;IACA;IACA;IACA;IACJ,CAAC;EACT,CAAC;EAED1L,MAAM,CAACs6B,MAAM,GAAG,UAAUgoC,QAAQ,EAAE;IAChCtiE,MAAM,CAAC2gJ,YAAY,GAAG,KAAK;IAC3B78I,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACkJ,SAAS,GAAG,IAAI;IACvBlJ,MAAM,CAACgW,OAAO,CAAC4gB,MAAM,GAAG,IAAI;IAC5Bv2B,aAAa,CAAC0K,YAAY,CAAC,CAAC;IAC5B/K,MAAM,CAACgW,OAAO,CAAC86G,eAAe,GAAG9wH,MAAM,CAAC6gJ,mBAAmB;IAE3D3iI,WAAW,CAACiyG,gBAAgB,CACxBnwH,MAAM,CAACq5B,YAAY,EACnBr5B,MAAM,CAACu5B,WAAW,EAClBv5B,MAAM,CAACgW,OAAO,EACdhW,MAAM,CAACiiH,OAAO,EACdjiH,MAAM,CAACyuG,WACX,CAAC,CAACzqG,IAAI,CAAC,UAAUC,IAAI,EAAE;MACnB,IAAI6O,OAAO,GAAG9S,MAAM,CAACihJ,UAAU,KAAK,MAAM;MAC1C,IAAIiE,KAAK,GAAGC,kBAAkB,CAACnlJ,MAAM,CAACmhJ,SAAS,CAAC;MAEhD,IAAI,CAAC7+E,QAAQ,EACTtiE,MAAM,CAACkE,IAAI,GAAG,EAAE;MAEpB,IAAIogJ,eAAe,GAAG,EAAE;MAExB,IAAIC,QAAQ,GAAGpzF,OAAO,CAACltD,IAAI,CAAC+1B,MAAM,EAAEkrH,KAAK,EAAEpyI,OAAO,CAAC;MACnDhP,CAAC,CAACmC,IAAI,CAACs+I,QAAQ,EAAE,UAAUr+I,GAAG,EAAEtG,EAAE,EAAE;QAChCA,EAAE,CAACq6B,iBAAiB,GAAGj6B,MAAM,CAACuqB,eAAe,CAAC3qB,EAAE,CAAC+nI,SAAS,EAAE,IAAI,CAAC;QAEjE,IAAG/nI,EAAE,CAACiqI,SAAS,EAAC;UACZjqI,EAAE,CAAC4kJ,aAAa,GAAG,IAAI;UACvB5kJ,EAAE,CAACiqI,SAAS,GAAIxpI,aAAa,CAAC0qD,gBAAgB,CAACnrD,EAAE,CAACiqI,SAAS,CAAC;QAChE;;QAEA;;QAEA,IAAGjqI,EAAE,CAACowH,IAAI,EAAC;UACP,IAAI00B,aAAa,GAAGrkJ,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC2kJ,gBAAgB,CAAC/kJ,EAAE,CAACowH,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;UAC1F,IAAI40B,aAAa,GAAGvkJ,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC6kJ,gBAAgB,CAACjlJ,EAAE,CAACowH,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;UAC1FpwH,EAAE,CAACwpI,eAAe,GAAGxpI,EAAE,CAACyD,MAAM,IAAI,WAAW,IACzCzD,EAAE,CAACyD,MAAM,IAAI,OAAO,IACpBzD,EAAE,CAACyD,MAAM,IAAI,cAAc,IAC3BzD,EAAE,CAACyD,MAAM,IAAI,kBAAkB,IAC/BuhJ,aAAa,GAAGF,aAAa;UAEjC,IAAI9kJ,EAAE,CAACyD,MAAM,KAAK,OAAO,EAAE;YACvB,IAAIohJ,OAAO,GAAG/sH,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACowH,IAAI,CAAC2W,aAAa,CAAC;YAC/C8d,OAAO,GAAG5pH,gFAAc,CAAC4pH,OAAO,CAAC;YAEjC,IAAI,CAAC,CAACA,OAAO,CAAC5a,SAAS,EAAE;cACrBjqI,EAAE,CAAC4kJ,aAAa,GAAG,IAAI;cACvB5kJ,EAAE,CAACiqI,SAAS,GAAGxpI,aAAa,CAAC0qD,gBAAgB,CAAC05F,OAAO,CAAC5a,SAAS,CAAC;YACpE;UACJ;QACJ;QAEA,IAAIjqI,EAAE,CAACyD,MAAM,IAAIzD,EAAE,CAACyD,MAAM,CAACklC,QAAQ,CAAC,QAAQ,CAAC,EAAE;UAC3C3oC,EAAE,CAACq0G,eAAe,GAAGxzG,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC;QAC3D;QAEA,IAAI,CAACxB,MAAM,CAACkE,IAAI,CAAC6B,MAAM,CAAC,UAAUo0B,GAAG,EAAE;UACnC,OAAOA,GAAG,CAAC45D,OAAO,KAAKn0F,EAAE,CAACm0F,OAAO;QACrC,CAAC,CAAC,CAAC3tF,MAAM,GAAG,CAAC,EAAE;UACX,IAAIpG,MAAM,CAAC6gJ,mBAAmB,GAAGjhJ,EAAE,CAACgoI,YAAY,EAAE;YAC9C0c,eAAe,CAACj+I,IAAI,CAACzG,EAAE,CAAC;UAC5B,CAAC,MAAM;YACHI,MAAM,CAACkE,IAAI,CAACmC,IAAI,CAACzG,EAAE,CAAC;UACxB;QACJ;MACJ,CAAC,CAAC;MAGF0kJ,eAAe,GAAGnzF,OAAO,CAACmzF,eAAe,EAAE,WAAW,EAAE,KAAK,CAAC;MAC9DxgJ,CAAC,CAACmC,IAAI,CAACq+I,eAAe,EAAE,UAAUp+I,GAAG,EAAEtG,EAAE,EAAE;QACvCI,MAAM,CAACkE,IAAI,CAACiK,OAAO,CAACvO,EAAE,CAAC;MAC3B,CAAC,CAAC;MAEFI,MAAM,CAACkE,IAAI,GAAGitD,OAAO,CAACnxD,MAAM,CAACkE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC;MAErDlE,MAAM,CAAC6gJ,mBAAmB,GAAG/vH,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,CAAC,CAAC9H,MAAM,CAAC,CAAC;MAEpDmR,QAAQ,CAACn2B,IAAI,CAAC80B,KAAK,CAAC;MAEpBj1B,CAAC,CAAC,mBAAmB,CAAC,CAACkoD,MAAM,CAAC,CAAC;MAC/BhsD,MAAM,CAACkJ,SAAS,GAAG,KAAK;MACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,EAAE,UAAUF,GAAG,EAAE;MACdnE,MAAM,CAACkJ,SAAS,GAAG,KAAK;MACxBpF,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAED,SAASi2B,QAAQA,CAAClO,KAAK,EAAE;IACrB,IAAIqO,IAAI,GAAGv6B,MAAM,CAACu5B,WAAW;IAC7Bv5B,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAC3Cv6B,MAAM,CAACw5B,YAAY,GAAGtN,KAAK;IAC3B,IAAIlsB,MAAM,CAACs5B,UAAU,KAAK,CAAC,EAAE;MACzBt5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;IACzB;EACJ;EAAC;EAEDt5B,MAAM,CAAC2kJ,gBAAgB,GAAG,UAAUvpI,GAAG,EAAE;IACrC,IAAI8Q,KAAK,GAAG,CAAC;IACb,IAAI9Q,GAAG,EAAE;MACL,IAAIA,GAAG,CAAC64F,eAAe,KAAK,QAAQ,IAAK74F,GAAG,CAAC64F,eAAe,KAAK,QAAQ,KAAK74F,GAAG,CAAC4uH,gBAAgB,KAAK,IAAI,IAAI5uH,GAAG,CAAC0oI,gBAAgB,KAAK,IAAI,IAAI1oI,GAAG,CAAC6uH,kBAAkB,KAAK,IAAI,IAAI7uH,GAAG,CAAC2oI,kBAAkB,KAAK,IAAI,CAAE,EAAE;QAClN,KAAK,IAAIpuI,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyF,GAAG,CAAC8mB,OAAO,CAAC97B,MAAM,EAAEuP,CAAC,EAAE,EAAE;UACzC,IAAIyF,GAAG,CAAC8mB,OAAO,CAACvsB,CAAC,CAAC,CAACyvI,WAAW,KAAK,IAAI,EAAE;YAAE;YACvC,KAAK,IAAI5wI,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4G,GAAG,CAAC8mB,OAAO,CAACvsB,CAAC,CAAC,CAACmjB,QAAQ,CAAC1yB,MAAM,EAAEoO,CAAC,EAAE,EAAE;cACrD,IAAI5U,EAAE,GAAGwb,GAAG,CAAC8mB,OAAO,CAACvsB,CAAC,CAAC,CAACmjB,QAAQ,CAACtkB,CAAC,CAAC;cACnC,IAAI5U,EAAE,CAACihC,SAAS,KAAK,UAAU,IAAIjhC,EAAE,CAACihC,SAAS,KAAK,UAAU,EAC1D3U,KAAK,IAAItsB,EAAE,CAACmlB,MAAM;YAC1B;UACJ;QACJ;QACAmH,KAAK,IAAI,CAAC,CAAC;MACf,CAAC,MACI;QACD,KAAK,IAAI1X,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4G,GAAG,CAAC0d,QAAQ,CAAC1yB,MAAM,EAAEoO,CAAC,EAAE,EAAE;UAC1C,IAAI5U,EAAE,GAAGwb,GAAG,CAAC0d,QAAQ,CAACtkB,CAAC,CAAC;UACxB,IAAI5U,EAAE,CAACihC,SAAS,KAAK,UAAU,IAAIjhC,EAAE,CAACihC,SAAS,KAAK,UAAU,EAC1D3U,KAAK,IAAItsB,EAAE,CAACmlB,MAAM;QAC1B;MACJ;MACA,IAAImH,KAAK,KAAK,CAAC,EAAE;QACb,KAAK,IAAI1X,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4G,GAAG,CAAC0d,QAAQ,CAAC1yB,MAAM,EAAEoO,CAAC,EAAE,EAAE;UAC1C,IAAI5U,EAAE,GAAGwb,GAAG,CAAC0d,QAAQ,CAACtkB,CAAC,CAAC;UACxB,IAAI5U,EAAE,CAACihC,SAAS,KAAK,UAAU,IAAIjhC,EAAE,CAACihC,SAAS,KAAK,UAAU,EAC1D3U,KAAK,IAAItsB,EAAE,CAACmlB,MAAM;QAC1B;MACJ;IACJ;IACA,OAAOmH,KAAK;EAChB,CAAC;EAEDlsB,MAAM,CAACqlJ,eAAe,GAAG,UAAU3G,YAAY,EAAE4G,eAAe,EAAE;IAC9D,IAAI7e,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAACw9G,YAAY,CAAC/X,aAAa,CAAC;IAE3E,IAAI,CAAC+X,YAAY,IAAI,CAACjY,SAAS,EAAE,OAAO,EAAE;IAC1C,IAAI,CAACiY,YAAY,CAAC/X,aAAa,EAAE,OAAO,EAAE;IAE1C,IAAI4e,UAAU,GAAGtqH,4CAAU,CAAC/wB,IAAI,CAACw0I,YAAY,CAAC/X,aAAa,CAAC7tG,QAAQ,CAAC,CAChEizB,KAAK,CAAC,UAAU7oB,CAAC,EAAE;MAAE,OAAOA,CAAC,CAACrC,SAAS,KAAK,UAAU,IAAIqC,CAAC,CAACpC,eAAe,KAAKwkH,eAAe;IAAE,CAAC,CAAC,CACnGriH,GAAG,CAAC,UAAUC,CAAC,EAAE;MAAE,OAAOA,CAAC,CAACne,MAAM;IAAE,CAAC,CAAC;IAE3C,IAAI,CAACwgI,UAAU,EAAE,OAAO,EAAE;IAE1B,IAAI1rH,IAAI,CAACivG,IAAI,CAAC4V,YAAY,CAAC/X,aAAa,CAAC5tG,KAAK,CAAC,GAAGc,IAAI,CAACivG,IAAI,CAACyc,UAAU,CAAC,GAAG,CAAC,EACvE,OAAO,GAAG;EAClB,CAAC;EAEDvlJ,MAAM,CAACwlJ,sBAAsB,GAAG,UAAU9G,YAAY,EAAE;IACpD,IAAI+G,MAAM,GAAG,IAAI;IACjB,IAAI,CAAC/G,YAAY,EAAE,OAAO,EAAE;IAE5B,IAAIA,YAAY,CAAC1uB,IAAI,CAAC/b,eAAe,KAAK,QAAQ,IAAIyqC,YAAY,CAAC/X,aAAa,CAAC5tG,KAAK,GAAG,CAAC,EACtF0sH,MAAM,GAAG,KAAK;IAElB,OAAOA,MAAM,GAAGhlJ,cAAc,CAACe,SAAS,CAAC,MAAM,CAAC,GAAGf,cAAc,CAACe,SAAS,CAAC,UAAU,CAAC;EAC3F,CAAC;EAEDxB,MAAM,CAAC0lJ,eAAe,GAAG,UAAUhH,YAAY,EAAE;IAC7C,IAAI,CAACA,YAAY,EAAE,OAAO,CAAC;IAE3B,IAAIjY,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAACw9G,YAAY,CAAC/X,aAAa,CAAC;IAE3E,IAAI,CAACF,SAAS,EAAE;MACZ,OAAO,CAACiY,YAAY,CAACr8G,aAAa,KAAK,IAAI,IAAIq8G,YAAY,CAAClmH,cAAc,KAAKkmH,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,CAAC97B,MAAM,GAAG,CAAC,GAC/Gs4I,YAAY,CAACiH,gBAAgB,GAC7B3lJ,MAAM,CAAC45B,GAAG,CAAC8kH,YAAY,CAAC/X,aAAa,CAAC5tG,KAAK,GAAG/4B,MAAM,CAAC45B,GAAG,CAAC55B,MAAM,CAAC2kJ,gBAAgB,CAACjG,YAAY,CAAC1uB,IAAI,CAAC,CAAC,CAAC;IAC7G,CAAC,MAAM;MACH,OAAOl1F,4FAAuB,CAAC4qH,eAAe,CAAC1lJ,MAAM,CAAC4P,WAAW,EAAE8uI,YAAY,CAAC;IACpF;EACJ,CAAC;EAED1+I,MAAM,CAAC4lJ,iBAAiB,GAAG,UAAUxqI,GAAG,EAAE;IAEtC,IAAIlX,IAAI,GAAGkX,GAAG,CAAC40G,IAAI;IACnB,IAAI9rH,IAAI,EAAE;MACN,IAAIA,IAAI,CAAC+vG,eAAe,KAAK,QAAQ,EAAE;QACnC,IAAI4xC,WAAW,GAAG,CAAC;QACnB,IAAIC,oBAAoB,GAAG,CAAC;QAC5B,KAAK,IAAInwI,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGzR,IAAI,CAACg+B,OAAO,CAAC97B,MAAM,EAAEuP,CAAC,EAAE,EAAE;UAC1C,KAAK,IAAInB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGtQ,IAAI,CAACg+B,OAAO,CAACvsB,CAAC,CAAC,CAACmjB,QAAQ,CAAC1yB,MAAM,EAAEoO,CAAC,EAAE,EAAE;YACtD,IAAI5U,EAAE,GAAGsE,IAAI,CAACg+B,OAAO,CAACvsB,CAAC,CAAC,CAACmjB,QAAQ,CAACtkB,CAAC,CAAC;YACpCqxI,WAAW,IAAIjmJ,EAAE,CAACmlB,MAAM;UAC5B;UAEA,KAAK,IAAIvQ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGtQ,IAAI,CAACg+B,OAAO,CAACvsB,CAAC,CAAC,CAAC4kE,UAAU,CAACn0E,MAAM,EAAEoO,CAAC,EAAE,EAAE;YACxD,IAAI5U,EAAE,GAAGsE,IAAI,CAACg+B,OAAO,CAACvsB,CAAC,CAAC,CAAC4kE,UAAU,CAAC/lE,CAAC,CAAC;YACtCqxI,WAAW,IAAIjmJ,EAAE,CAACm5B,KAAK,IAAI/4B,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,GAAG,CAAC,GAAGz4B,EAAE,CAAC89B,GAAG,CAAC;UAClF;QACJ;QAEA55B,CAAC,CAACmC,IAAI,CAACmV,GAAG,CAACurH,aAAa,CAAC1kG,cAAc,EAAE,UAAU/7B,GAAG,EAAEtG,EAAE,EAAE;UACxDkmJ,oBAAoB,IAAIlmJ,EAAE,CAACmlB,MAAM;UACjC,IAAI,CAAC,CAACnlB,EAAE,CAACqhC,SAAS,EAAE;YAChB6kH,oBAAoB,IAAIlmJ,EAAE,CAACqhC,SAAS,CAACiqG,eAAe,IAAIlrI,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,GAAG,CAAC,GAAGz4B,EAAE,CAACqhC,SAAS,CAACvD,GAAG,CAAC;UACzH;QACJ,CAAC,CAAC;QAEF,OAAOr9B,aAAa,CAAC6uB,SAAS,CAAC42H,oBAAoB,GAAGD,WAAW,EAAE,CAAC,CAAC;MACzE,CAAC,MACI;QACD,IAAIE,SAAS,GAAG,CAAC;QACjB,IAAIC,aAAa,GAAG,CAAC;QAErB,KAAK,IAAIxxI,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGtQ,IAAI,CAAC40B,QAAQ,CAAC1yB,MAAM,EAAEoO,CAAC,EAAE,EAAE;UAC3C,IAAI5U,EAAE,GAAGsE,IAAI,CAAC40B,QAAQ,CAACtkB,CAAC,CAAC;UACzB,IAAI5U,EAAE,CAACihC,SAAS,KAAK,UAAU,EAC3BklH,SAAS,IAAInmJ,EAAE,CAACmlB,MAAM;QAC9B;QAEA,KAAK,IAAIvQ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGtQ,IAAI,CAACq2E,UAAU,CAACn0E,MAAM,EAAEoO,CAAC,EAAE,EAAE;UAC7C,IAAI5U,EAAE,GAAGsE,IAAI,CAACq2E,UAAU,CAAC/lE,CAAC,CAAC;UAC3BuxI,SAAS,IAAInmJ,EAAE,CAACm5B,KAAK,IAAI/4B,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,GAAG,CAAC,GAAGz4B,EAAE,CAAC89B,GAAG,CAAC;QAChF;QAEA55B,CAAC,CAACmC,IAAI,CAAC/B,IAAI,CAACg+B,OAAO,EAAE,UAAUh8B,GAAG,EAAE80I,GAAG,EAAE;UACrCl3I,CAAC,CAACmC,IAAI,CAAC+0I,GAAG,CAACliH,QAAQ,EAAE,UAAUswC,IAAI,EAAExpE,EAAE,EAAE;YACrC,IAAIA,EAAE,CAACihC,SAAS,KAAK,UAAU,EAAE;cAC7BmlH,aAAa,IAAIpmJ,EAAE,CAACmlB,MAAM;YAC9B;UACJ,CAAC,CAAC;UAEFjhB,CAAC,CAACmC,IAAI,CAAC+0I,GAAG,CAACzgE,UAAU,EAAE,UAAUnR,IAAI,EAAExpE,EAAE,EAAE;YACvComJ,aAAa,IAAIpmJ,EAAE,CAACm5B,KAAK,IAAI/4B,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,GAAG,CAAC,GAAGz4B,EAAE,CAAC89B,GAAG,CAAC;UACpF,CAAC,CAAC;QACN,CAAC,CAAC;QAEF,OAAOr9B,aAAa,CAAC6uB,SAAS,CAAC62H,SAAS,GAAGC,aAAa,EAAE,CAAC,CAAC;MAChE;IACJ;IACA,OAAO,CAAC;EACZ,CAAC;EAEDhmJ,MAAM,CAACimJ,YAAY,GAAG,UAAUn8I,IAAI,EAAEo8I,cAAc,EAAE;IAClD,IAAIp8I,IAAI,EAAE;MACN,IAAI5F,IAAI,GAAG22B,gFAAc,CAAC/wB,IAAI,CAAC68H,aAAa,CAAC;MAC7C,IAAIF,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAACh9B,IAAI,CAAC;MAErD,IAAI,CAACuiI,SAAS,EAAE;QACZ,IAAIoK,QAAQ,GAAGqV,cAAc,KAAK,IAAI,GAAIhiJ,IAAI,CAAC84B,YAAY,GAAG94B,IAAI,CAAC84B,YAAY,GAAG,CAAC,GAAI,CAAC;QACxF,OAAOh9B,MAAM,CAAC45B,GAAG,CAAC11B,IAAI,CAAC60B,KAAK,CAAC,GAAG83G,QAAQ;MAC5C,CAAC,MAAM,OAAO7wI,MAAM,CAAC45B,GAAG,CAAC11B,IAAI,CAAC60B,KAAK,CAAC;IAExC;IACA,OAAO,CAAC;EACZ,CAAC;;EAED;EACA;EACA/4B,MAAM,CAAC6kJ,gBAAgB,GAAG,UAAU/6I,IAAI,EAAEq8I,WAAW,EAAE;IACnD,IAAIr8I,IAAI,EAAE;MACN,IAAI5F,IAAI,GAAG22B,gFAAc,CAAC/wB,IAAI,CAAC68H,aAAa,CAAC;MAC7C,IAAIF,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAACh9B,IAAI,CAAC;MAErD,IAAI,CAACuiI,SAAS,EAAE;QACZ,OAAOzmI,MAAM,CAAC45B,GAAG,CAAC55B,MAAM,CAACohC,QAAQ,CAACl9B,IAAI,EAAE4F,IAAI,CAACuuB,YAAY,CAAC,CAAC,IAAIn0B,IAAI,CAAC84B,YAAY,GAAG94B,IAAI,CAAC84B,YAAY,GAAG,CAAC,CAAC;MAC7G,CAAC,MAAM;QACH,OAAOlC,4FAAuB,CAACsrH,sBAAsB,CAACliJ,IAAI,CAAC;MAC/D;IACJ;IACA,OAAO,CAAC;EACZ,CAAC;EAEDlE,MAAM,CAACywG,YAAY,GAAG,UAAU74E,MAAM,EAAE;IACpC,IAAIL,gBAAgB,GAAG,IAAI;IAC3Bl4B,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAAC;MAAEC,MAAM,EAAEA,MAAM;MAAEtpB,IAAI,EAAE,UAAU;MAAEupB,OAAO,EAAEN;IAAiB,CAAC,CAAC,CAAC;IAC5H1N,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;EAC3B,CAAC;EAED9sB,MAAM,CAACqmJ,kBAAkB,GAAG,YAAY;IACpCrmJ,MAAM,CAAC4+I,UAAU,GAAG,QAAQ;;IAE5B;IACA,OAAO5+I,MAAM,CAACsmJ,UAAU,CAACtmJ,MAAM,CAAC0+I,YAAY,CAACpnH,UAAU,CAAC,CACnDtzB,IAAI,CAAC,YAAY;MACdhE,MAAM,CAACw+I,oBAAoB,CAAC,CAAC;MAC7Bx+I,MAAM,CAACo6E,QAAQ,GAAG,QAAQ;MAC1Bp6E,MAAM,CAACq6E,aAAa,GAAG,QAAQ;MAC/Br6E,MAAM,CAAC2+I,gBAAgB,GAAG,UAAU;MAEpC3+I,MAAM,CAACumJ,uBAAuB,CAAC,IAAI,CAAC;MAEpC/lJ,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAACwmJ,UAAU,CAAC,IAAI,CAAC;MAC3B,CAAC,CAAC;IACN,CAAC,CAAC,SACI,CAAC,UAAUriJ,GAAG,EAAE;MAClBnE,MAAM,CAACymJ,YAAY,CAACtiJ,GAAG,EAAE,IAAI,CAAC;MAC9B;MACA;IACJ,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAAC0mJ,oBAAoB,GAAG,YAAY;IACtC;IACA,OAAO1mJ,MAAM,CAACsmJ,UAAU,CAACtmJ,MAAM,CAAC0+I,YAAY,CAACpnH,UAAU,CAAC,CACnDtzB,IAAI,CAAC,YAAY;MACdhE,MAAM,CAACw+I,oBAAoB,CAAC,CAAC;MAC7Bx+I,MAAM,CAACo6E,QAAQ,GAAG,QAAQ;MAC1Bp6E,MAAM,CAACq6E,aAAa,GAAG,QAAQ;MAC/Br6E,MAAM,CAAC2+I,gBAAgB,GAAG,UAAU;MAEpC3+I,MAAM,CAACumJ,uBAAuB,CAAC,IAAI,CAAC;MAEpC/lJ,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAAC2mJ,YAAY,CAAC,IAAI,CAAC;MAC7B,CAAC,CAAC;IACN,CAAC,CAAC,SACI,CAAC,UAAUxiJ,GAAG,EAAE;MAClBnE,MAAM,CAACymJ,YAAY,CAACtiJ,GAAG,EAAE,IAAI,CAAC;MAC9B;MACA;IACJ,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAAC4mJ,UAAU,GAAG,YAAY;IAC5B5mJ,MAAM,CAAC4+I,UAAU,GAAG,QAAQ;IAE5B,IAAI,CAAC,CAAC5+I,MAAM,CAAC0+I,YAAY,CAACmI,kBAAkB,EACxC,OAAO7mJ,MAAM,CAAC0+I,YAAY,CAACmI,kBAAkB;;IAEjD;IACA,OAAO7mJ,MAAM,CAACsmJ,UAAU,CAACtmJ,MAAM,CAAC0+I,YAAY,CAACpnH,UAAU,CAAC,CACnDtzB,IAAI,CAAC,YAAY;MAAE,OAAOka,WAAW,CAACm8H,YAAY,CAAC,CAAC;IAAE,CAAC,CAAC,CACxDr2I,IAAI,CAAC,UAAUqa,UAAU,EAAE;MACxBre,MAAM,CAACqe,UAAU,GAAG,CAAC,CAAC;MACtBva,CAAC,CAACmC,IAAI,CAACoY,UAAU,EAAE,UAAU7J,CAAC,EAAE6gC,CAAC,EAAE;QAC/Br1C,MAAM,CAACqe,UAAU,CAACg3B,CAAC,CAAC81F,WAAW,CAAC,GAAG91F,CAAC;MACxC,CAAC,CAAC;MAEFvxC,CAAC,CAACC,OAAO,CAAC,CAAC;MACX,OAAOma,WAAW,CAACy6H,oBAAoB,CAAC34I,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC,CACrE3iI,IAAI,CAAC,UAAUE,IAAI,EAAE;QAClBJ,CAAC,CAACO,SAAS,CAAC,CAAC;QAEb,IAAIkH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAEzB,IAAItH,IAAI,CAACA,IAAI,CAAC00I,iBAAiB,KAAK,IAAI,EAAE;UACtCrtI,QAAQ,CAACqb,MAAM,CAAC1iB,IAAI,CAACA,IAAI,CAAC4iJ,OAAO,CAAC;QAEtC,CAAC,MACI;UACDv7I,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;UACtB;UACA;UACA,IAAIs7I,UAAU,GAAG/mJ,MAAM,CAAC0+I,YAAY,CAAC5/G,QAAQ,KAAK,CAAC,GAAG9+B,MAAM,CAAC0+I,YAAY,CAAC3qD,OAAO,GAAI/zF,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAACvjI,EAAE;UACzHmI,QAAQ,CAACG,OAAO,GAAGH,QAAQ,CAACG,OAAO,CAAC1H,IAAI,CAAC,YAAY;YACjD,OAAOka,WAAW,CAACiyG,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE;cAAEv5F,MAAM,EAAEmwH;YAAW,CAAC,CAAC;UAC3E,CAAC,CAAC;UACF;QACJ;QAEA,OAAOx7I,QAAQ,CAACG,OAAO;MAC3B,CAAC,CAAC;IACV,CAAC,CAAC,CACD1H,IAAI,CAAC,UAAUC,IAAI,EAAE;MAClB;MACA;MACA;MACA;MACA,IAAIs3I,WAAW,GAAG,IAAI;MACtB,IAAI9U,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;MACnE,IAAIo3I,aAAa,GAAGtvH,IAAI,CAAC2T,KAAK,CAACpnC,IAAI,CAAC+1B,MAAM,CAAC,CAAC,CAAC,CAACg2F,IAAI,CAAC2W,aAAa,CAAC;MACjEqgB,aAAa,GAAGnsH,gFAAc,CAACmsH,aAAa,CAAC;MAC7CvG,4FAA0B,CAACx8I,IAAI,CAAC+1B,MAAM,CAAC,CAAC,CAAC,CAACg2F,IAAI,EAAEg3B,aAAa,CAAC;MAE9D,IAAI/iJ,IAAI,IAAIwiI,SAAS,EAAE;QACnB8U,WAAW,GAAGzgH,4FAAuB,CAACmsH,cAAc,CAAChjJ,IAAI,CAAC+1B,MAAM,CAAC,CAAC,CAAC,CAACg2F,IAAI,EAAEhwH,MAAM,CAACqe,UAAU,EAAEre,MAAM,CAACiwC,oBAAoB,CAAC;MAC7H,CAAC,MAAM,IAAI,CAAC,CAAChsC,IAAI,EAAE;QACf,IAAIijJ,MAAM,GAAG,CAAC,CAAC;QACf,IAAIC,MAAM,GAAG,CAAC,CAAC;QACf,IAAIC,YAAY,GAAG,EAAE;QAErB7L,WAAW,GACP;UACI/5G,cAAc,EAAE,CAAC;UAAE;UACnBC,cAAc,EAAE,CAAC;UACjBC,SAAS,EAAE,CAAC;UACZC,cAAc,EAAE,CAAC;UACjBC,WAAW,EAAE,CAAC,CAAC;UACfC,kBAAkB,EAAE,CAAC,CAAC;QAC1B,CAAC;QAEL3jB,WAAW,CAAC68H,wBAAwB,CAAC92I,IAAI,CAAC+1B,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU+oG,IAAI,EAAEskB,gBAAgB,EAAE;UACnF,IAAG,CAACtkB,IAAI,CAACpgG,gBAAgB,EAAC;YAClB,IAAKogG,IAAI,CAAC2f,SAAS,IAAI3f,IAAI,CAAC1mH,SAAS,IACpCgrI,gBAAgB,IAAI,CAACtkB,IAAI,CAAC2f,SAAS,IAAI,CAAC3f,IAAI,CAAC1mH,SAAS,IAAI0mH,IAAI,CAACrgI,IAAI,KAAG,UAAW,EAAE;cACpF,IAAI85I,EAAE,GAAG,CAAC;cACV,IAAI,CAAC6K,gBAAgB,IAAItkB,IAAI,CAAC7uG,QAAQ,GAAG,CAAC,EAAE;gBACxCsoH,EAAE,GAAG3iH,IAAI,CAACD,GAAG,CAACmpG,IAAI,CAACwH,YAAY,IAAIvqI,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,KAAK,IAAI,GAAG0qG,IAAI,CAACrlG,GAAG,GAAG,CAAC,CAAC,CAAC;gBAClG;cACJ,CAAC,MACG8+G,EAAE,GAAG3iH,IAAI,CAACD,GAAG,CAACmpG,IAAI,CAACwH,YAAY,IAAIvqI,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,KAAK,IAAI,GAAG0qG,IAAI,CAACrlG,GAAG,GAAG,CAAC,CAAC,CAAC;cAEtG,IAAIqlG,IAAI,CAAC7uG,QAAQ,GAAG,CAAC,IAAK6uG,IAAI,CAACrgI,IAAI,KAAG,UAAU,IAAIqgI,IAAI,CAAChlG,KAAK,GAAC,CAAE,EAAEy+G,EAAE,IAAI,CAAC,CAAC;cAE3EjB,WAAW,CAAC75G,SAAS,IAAIrhC,aAAa,CAAC6uB,SAAS,CAACstH,EAAE,EAAE,CAAC,CAAC;YAC3D;UACJ;QACJ,CAAC,CAAC;QAEFt+H,WAAW,CAACg9H,6BAA6B,CAACj3I,IAAI,CAAC+1B,MAAM,CAAC,CAAC,CAAC,EAAE,UAAUlwB,IAAI,EAAEu9I,gBAAgB,EAAE;UACxF,IAAIC,IAAI,GAAGxnJ,OAAO,CAAC+F,IAAI,CAACiE,IAAI,CAAC;UAC7B9J,MAAM,CAACunJ,gBAAgB,CAACD,IAAI,EAAEtnJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,CAAC;;UAEpE;UACA,IAAIr4B,MAAM,CAACqe,UAAU,CAACipI,IAAI,CAACnc,WAAW,CAAC,EAAE;YACrCmc,IAAI,CAAC5K,eAAe,GAAG18I,MAAM,CAACqe,UAAU,CAACipI,IAAI,CAACnc,WAAW,CAAC,CAACuR,eAAe;UAC9E;UAEA,IAAI5yI,IAAI,CAACuhI,gBAAgB,EAAE;YACvB;YACA;YACAic,IAAI,CAAC5K,eAAe,GAAG,IAAI;YAC3B0K,YAAY,CAAC/gJ,IAAI,CAACihJ,IAAI,CAAC;YACvB;UACJ,CAAC,MAAM,IAAIx9I,IAAI,CAACshI,SAAS,EAAE;YACvB+b,MAAM,CAACr9I,IAAI,CAACshI,SAAS,CAAC,GAAGkc,IAAI;YAC7B,IAAIA,IAAI,CAAC5K,eAAe,KAAK,IAAI,EAC7BnB,WAAW,CAAC/5G,cAAc,IAAI,CAAC,CAAC6lH,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,IAAIC,IAAI,CAACvb,sBAAsB;UAChG;QACJ,CAAC,CAAC;QAEF7tH,WAAW,CAAC+8H,2BAA2B,CAACh3I,IAAI,CAAC+1B,MAAM,CAAC,CAAC,CAAC,EAAE,UAAUlwB,IAAI,EAAEu9I,gBAAgB,EAAE;UACtFrnJ,MAAM,CAACwnJ,oBAAoB,CAAC19I,IAAI,CAAC;;UAEjC;UACA,IAAIw9I,IAAI,GAAGH,MAAM,CAACr9I,IAAI,CAAC1G,EAAE,CAAC;UAC1B,IAAIkkJ,IAAI,EAAE;YACNx9I,IAAI,CAACm3B,SAAS,GAAGqmH,IAAI;UACzB;QACJ,CAAC,CAAC;;QAEF;QACA;QACA,IAAIG,UAAU,GAAG,CAAC;QAClB,IAAIC,iBAAiB,GAAG,CAAC;QACzBxpI,WAAW,CAAC+8H,2BAA2B,CAACh3I,IAAI,CAAC+1B,MAAM,CAAC,CAAC,CAAC,EAAE,UAAUlwB,IAAI,EAAEu9I,gBAAgB,EAAE;UACtF,IAAI78I,EAAE,GAAG0T,WAAW,CAACi9H,aAAa,CAACrxI,IAAI,CAAC;;UAExC;UACA,IAAIu9I,gBAAgB,EAAE;YAClB,IAAIv9I,IAAI,CAAC+2B,SAAS,KAAK,SAAS,EAC5B6mH,iBAAiB,IAAI59I,IAAI,CAACib,MAAM,CAAC,KAEjC0iI,UAAU,IAAI39I,IAAI,CAACib,MAAM;UACjC,CAAC,MAAM,IAAIjb,IAAI,CAACib,MAAM,GAAG,CAAC,EAAE;YACxB,IAAIjb,IAAI,CAAC+2B,SAAS,KAAK,SAAS,EAC5B6mH,iBAAiB,IAAI59I,IAAI,CAACib,MAAM,CAAC,KAEjC0iI,UAAU,IAAI39I,IAAI,CAACib,MAAM;UACjC;UAEA,IAAIme,CAAC,GAAGgkH,MAAM,CAAC18I,EAAE,CAAC;UAClB,IAAI,CAAC04B,CAAC,EAAE;YACJp5B,IAAI,GAAGhK,OAAO,CAAC+F,IAAI,CAACiE,IAAI,CAAC;YACzB,IAAI,CAACu9I,gBAAgB,EAAE;cACnBv9I,IAAI,CAACib,MAAM,IAAI,CAAC,CAAC;cACjB,IAAIjb,IAAI,CAACm3B,SAAS,EACdjhC,MAAM,CAAC2nJ,eAAe,CAAC79I,IAAI,CAACm3B,SAAS,CAAC;YAC9C;YACAimH,MAAM,CAAC18I,EAAE,CAAC,GAAGV,IAAI;UACrB,CAAC,MAAM;YACHo5B,CAAC,CAACne,MAAM,IAAI,CAAC,CAACsiI,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,IAAIv9I,IAAI,CAACib,MAAM;YACtD,IAAIjb,IAAI,CAACm3B,SAAS,EACdjhC,MAAM,CAAC4nJ,aAAa,CAAC1kH,CAAC,CAACjC,SAAS,EAAEn3B,IAAI,CAACm3B,SAAS,EAAE,CAAComH,gBAAgB,CAAC,CAAC,CAAC;UAC9E;QACJ,CAAC,CAAC;QAEF,IAAKI,UAAU,GAAGC,iBAAiB,GAAI,CAAC,EACpCnM,WAAW,CAAC15G,kBAAkB,GAAG4lH,UAAU,IAAIA,UAAU,GAAGC,iBAAiB,CAAC,CAAC,KAE/EnM,WAAW,CAAC15G,kBAAkB,GAAG,CAAC;;QAEtC;QACA/9B,CAAC,CAACmC,IAAI,CAACmhJ,YAAY,EAAE,UAAU5yI,CAAC,EAAE8yI,IAAI,EAAE;UACpC/L,WAAW,CAAC95G,cAAc,IAAI6lH,IAAI,CAACvb,sBAAsB;QAC7D,CAAC,CAAC;QAEFwP,WAAW,CAAC95G,cAAc,GAAGphC,aAAa,CAAC6uB,SAAS,CAACqsH,WAAW,CAAC95G,cAAc,EAAE,CAAC,CAAC;;QAEnF;QACA85G,WAAW,CAAC35G,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9B99B,CAAC,CAACmC,IAAI,CAAC5F,aAAa,CAACg9E,SAAS,CAAC6pE,MAAM,CAAC,EAAE,UAAU1yI,CAAC,EAAE0uB,CAAC,EAAE;UACpDA,CAAC,CAAC9/B,EAAE,GAAGumB,KAAK,CAACuE,OAAO,CAAC,CAAC;UACtB,IAAIgV,CAAC,CAACjC,SAAS,EAAE;YACbiC,CAAC,CAACjC,SAAS,CAACmqG,SAAS,GAAGloG,CAAC,CAAC9/B,EAAE;YAC5B8/B,CAAC,CAACmqG,gBAAgB,GAAGvtI,OAAO,CAAC+F,IAAI,CAACq9B,CAAC,CAACjC,SAAS,CAAC;UAClD;UACAs6G,WAAW,CAAC35G,WAAW,CAACsB,CAAC,CAAC9/B,EAAE,CAAC,GAAG8/B,CAAC;QACrC,CAAC,CAAC;MACN;MAEA,IAAIljC,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,QAAQ,IAAI,CAAC,CAACY,IAAI,EAAE;QACnD,IAAI6S,GAAG,GAAG,CAAC,CAAC;QACZ9W,MAAM,CAAC0+I,YAAY,CAACmI,kBAAkB,GAAG,EAAE;;QAE3C;QACA;QACA,IAAIgB,eAAe,GAAG,CAAC;QAEvB/jJ,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,EAAE,UAAUh8B,GAAG,EAAEtG,EAAE,EAAE;UACxDkE,CAAC,CAACmC,IAAI,CAACrG,EAAE,CAACi3B,KAAK,EAAE,UAAUixH,IAAI,EAAE/kB,IAAI,EAAE;YACnC,IAAIA,IAAI,CAAC7uG,QAAQ,GAAG,CAAC,EAAE;cACnB;cACA,IAAIsoH,EAAE,GAAGzZ,IAAI,CAACwH,YAAY,IAAIvqI,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,KAAK,IAAI,GAAG0qG,IAAI,CAACrlG,GAAG,GAAG,CAAC,CAAC;cAE5FmqH,eAAe,IAAIrL,EAAE;YACzB;UACJ,CAAC,CAAC;QACN,CAAC,CAAC;QAEF14I,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,EAAE,UAAUh8B,GAAG,EAAEtG,EAAE,EAAE;UACxDkE,CAAC,CAACmC,IAAI,CAACrG,EAAE,CAACk5B,QAAQ,EAAE,UAAUgvH,IAAI,EAAE/kB,IAAI,EAAE;YAEtC8kB,eAAe,IAAI9kB,IAAI,CAACh+G,MAAM;UAElC,CAAC,CAAC;QACN,CAAC,CAAC;QAEF/kB,MAAM,CAAC0+I,YAAY,CAACmJ,eAAe,GAAGA,eAAe;QAErD,IAAIE,IAAI,GAAG,CAAC,CAAC;QACbjkJ,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAAC+1B,MAAM,CAAC,CAAC,CAAC,CAACg2F,IAAI,CAACz1C,UAAU,EAAE,UAAU/lE,CAAC,EAAE6gC,CAAC,EAAE;UACnD0yG,IAAI,CAAC1yG,CAAC,CAAC+1F,SAAS,CAAC,GAAG/1F,CAAC;QACzB,CAAC,CAAC;QAEFvxC,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAAC+1B,MAAM,CAAC,CAAC,CAAC,CAACg2F,IAAI,CAACl3F,QAAQ,EAAE,UAAUtkB,CAAC,EAAE+M,CAAC,EAAE;UACjD,IAAI,CAACzK,GAAG,CAACyK,CAAC,CAACne,EAAE,CAAC,EAAE;YACZpD,MAAM,CAAC0+I,YAAY,CAACmI,kBAAkB,CAACxgJ,IAAI,CAACkb,CAAC,CAAC;UAClD;UACAzK,GAAG,CAACyK,CAAC,CAACne,EAAE,CAAC,GAAGme,CAAC;QACjB,CAAC,CAAC;QAEFzd,CAAC,CAACmC,IAAI,CAAChC,IAAI,CAAC+1B,MAAM,CAAC,CAAC,CAAC,CAACg2F,IAAI,CAAC9tF,OAAO,EAAE,UAAUh8B,GAAG,EAAE80I,GAAG,EAAE;UACpD+M,IAAI,GAAG,CAAC,CAAC;UACTjkJ,CAAC,CAACmC,IAAI,CAAC+0I,GAAG,CAACzgE,UAAU,EAAE,UAAU/lE,CAAC,EAAE6gC,CAAC,EAAE;YACnC0yG,IAAI,CAAC1yG,CAAC,CAAC+1F,SAAS,CAAC,GAAG/1F,CAAC;UACzB,CAAC,CAAC;UAEF,IAAI,CAAC,CAAC2lG,GAAG,CAACliH,QAAQ,IAAI,CAACkiH,GAAG,CAACoK,WAAW,EAAE;YACpCthJ,CAAC,CAACmC,IAAI,CAAC+0I,GAAG,CAACliH,QAAQ,EAAE,UAAU5yB,GAAG,EAAEg9B,CAAC,EAAE;cACnC,IAAIoyE,EAAE,GAAGx1G,OAAO,CAAC+F,IAAI,CAACq9B,CAAC,CAAC;cACxB,IAAI,CAAC,CAACoyE,EAAE,CAACvwF,MAAM,EACXuwF,EAAE,CAACvwF,MAAM,GAAG,CAAC,CAAC,GAAGuwF,EAAE,CAACvwF,MAAM;cAE9B,IAAI,CAACjO,GAAG,CAACw+F,EAAE,CAAClyG,EAAE,CAAC,EAAE;gBACbpD,MAAM,CAAC0+I,YAAY,CAACmI,kBAAkB,CAACxgJ,IAAI,CAACivG,EAAE,CAAC;gBAC/Cx+F,GAAG,CAACw+F,EAAE,CAAClyG,EAAE,CAAC,GAAGkyG,EAAE;cACnB;YACJ,CAAC,CAAC;UACN;QACJ,CAAC,CAAC;MACN;MAEAt1G,MAAM,CAACw+I,oBAAoB,CAAC,CAAC;MAC7B;MACA;MACAx+I,MAAM,CAACgoJ,WAAW,GAAG,IAAI;MACzBhoJ,MAAM,CAACo6E,QAAQ,GAAG,QAAQ;MAC1Bp6E,MAAM,CAACq6E,aAAa,GAAG,QAAQ;MAC/Br6E,MAAM,CAAC2+I,gBAAgB,GAAG,IAAI;MAE9B3+I,MAAM,CAAC4P,WAAW,GAAG9P,OAAO,CAAC+F,IAAI,CAAC7F,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC;MACpEF,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;MAE/D,IAAI2rI,WAAW,EACXv7I,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,GAAGg6G,WAAW;;MAEhD;MACAv7I,MAAM,CAAC4P,WAAW,CAACgtB,gBAAgB,GAAG,CAAC;MACvC,IAAI,CAAC6pG,SAAS,IAAI,CAAC,CAACzmI,MAAM,CAAC0+I,YAAY,CAACmI,kBAAkB,EACtD7mJ,MAAM,CAAC4P,WAAW,CAACi3I,kBAAkB,GAAG7mJ,MAAM,CAAC0+I,YAAY,CAACmI,kBAAkB;;MAElF;MACA,IAAIoB,eAAe,GAAGjoJ,MAAM,CAACkoJ,sBAAsB,CAAC,CAAC;MAErDloJ,MAAM,CAAC4P,WAAW,CAAC0oB,WAAW,GAAGt4B,MAAM,CAAC0+I,YAAY,CAACpmH,WAAW;MAChEt4B,MAAM,CAAC4P,WAAW,CAAC8rB,QAAQ,GAAG/R,KAAK,CAACuE,OAAO,CAAC,CAAC;MAC7CluB,MAAM,CAAC4P,WAAW,CAACu4I,YAAY,GAAG,EAAE;MAEpC,IAAIC,WAAW,GAAGtoJ,OAAO,CAAC+F,IAAI,CAAC7F,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,CAAC;;MAEhE;MACA,IAAI,CAACukG,SAAS,EAAE;QACZ,OAAOzmI,MAAM,CAAC4P,WAAW,CAACktB,cAAc;QACxC,OAAO98B,MAAM,CAAC4P,WAAW,CAACszF,gBAAgB;QAC1C,OAAOljG,MAAM,CAAC4P,WAAW,CAACuzF,oBAAoB;QAC9CnjG,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB,GAAG,CAAC;QACzC55I,MAAM,CAAC4P,WAAW,CAACy4I,uBAAuB,GAAG,CAAC;QAC9CroJ,MAAM,CAAC4P,WAAW,CAACssB,aAAa,GAAG,CAAC;QACpCl8B,MAAM,CAAC4P,WAAW,CAACm7H,SAAS,GAAG,CAAC;QAChC/qI,MAAM,CAAC4P,WAAW,CAACi9H,iBAAiB,GAAG,CAAC;QACxC7sI,MAAM,CAAC4P,WAAW,CAACk9H,oBAAoB,GAAG,CAAC;QAC3C9sI,MAAM,CAAC4P,WAAW,CAAC04I,sBAAsB,GAAG,CAAC;QAE7C,IAAIC,IAAI,GAAG,CAAC,CAAC;QAEb,IAAIvoJ,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,IAAIv6E,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,CAACn0E,MAAM,GAAG,CAAC,EAAE;UAC3EtC,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,EAAE,UAAUr0E,GAAG,EAAEtG,EAAE,EAAE;YACrD,IAAI,CAAC2oJ,IAAI,CAAC3oJ,EAAE,CAACwrI,SAAS,CAAC,EAAE;cACrBmd,IAAI,CAAC3oJ,EAAE,CAACwrI,SAAS,CAAC,GAAG,IAAI;cACzB,IAAIxrI,EAAE,CAAC88I,eAAe,KAAK,IAAI,EAAE;gBAC7B18I,MAAM,CAAC4P,WAAW,CAACi9H,iBAAiB,IAAIjtI,EAAE,CAACsrI,eAAe;gBAC1DlrI,MAAM,CAAC4P,WAAW,CAACk9H,oBAAoB,IAAIltI,EAAE,CAAC89B,GAAG;cACrD,CAAC,MACI;gBACD19B,MAAM,CAAC4P,WAAW,CAAC04I,sBAAsB,IAAI1oJ,EAAE,CAACsrI,eAAe;cACnE;YACJ;UACJ,CAAC,CAAC;QACN;;QAEA;QACA;QACA,IAAI+c,eAAe,EAAE;UACjB;UACAjoJ,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,GAAG37B,MAAM,CAACwoJ,gBAAgB,CAACxoJ,MAAM,CAAC4P,WAAW,CAAC;QAClF;QAEA,IAAIw4I,WAAW,IAAIA,WAAW,CAAChiJ,MAAM,GAAG,CAAC,EAAE;UACvCtC,CAAC,CAACmC,IAAI,CAACmiJ,WAAW,EAAE,UAAUK,KAAK,EAAEzN,GAAG,EAAE;YACtCl3I,CAAC,CAACmC,IAAI,CAAC+0I,GAAG,CAACzgE,UAAU,EAAE,UAAUr0E,GAAG,EAAEtG,EAAE,EAAE;cACtC,IAAI,CAAC2oJ,IAAI,CAAC3oJ,EAAE,CAACwrI,SAAS,CAAC,EAAE;gBACrBmd,IAAI,CAAC3oJ,EAAE,CAACwrI,SAAS,CAAC,GAAG,IAAI;gBAEzBprI,MAAM,CAACunJ,gBAAgB,CAAC3nJ,EAAE,EAAEI,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,CAAC;gBAClEr4B,MAAM,CAAC4P,WAAW,CAACi9H,iBAAiB,IAAIjtI,EAAE,CAACm5B,KAAK;gBAChD/4B,MAAM,CAAC4P,WAAW,CAACk9H,oBAAoB,IAAIltI,EAAE,CAAC89B,GAAG;cACrD;YACJ,CAAC,CAAC;UACN,CAAC,CAAC;QACN;QAEA19B,MAAM,CAAC4P,WAAW,CAACk9H,oBAAoB,GAAGzsI,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC4P,WAAW,CAACk9H,oBAAoB,EAAE,CAAC,CAAC;QAC7G9sI,MAAM,CAAC4P,WAAW,CAACi9H,iBAAiB,GAAGxsI,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC4P,WAAW,CAACi9H,iBAAiB,EAAE,CAAC,CAAC,IAAI7sI,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,GAAG,CAAC,GAAGr4B,MAAM,CAAC4P,WAAW,CAACk9H,oBAAoB,CAAC;QAC/L9sI,MAAM,CAAC4P,WAAW,CAAC04I,sBAAsB,GAAGjoJ,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC4P,WAAW,CAAC04I,sBAAsB,EAAE,CAAC,CAAC;QAEjH,IAAIxd,aAAa,GAAG,CAAC;QACrBhnI,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;UACxD,IAAIA,EAAE,CAAC6qI,aAAa,IAAI7qI,EAAE,CAAC6qI,aAAa,KAAK,CAAC,EAAE;YAC5CK,aAAa,GAAGlrI,EAAE,CAAC6qI,aAAa;UACpC;QACJ,CAAC,CAAC;QAEF3mI,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAE4D,IAAI,EAAE;UAC1DhG,CAAC,CAACmC,IAAI,CAACmiJ,WAAW,EAAE,UAAU5zI,CAAC,EAAEk0I,OAAO,EAAE;YACtC5kJ,CAAC,CAACmC,IAAI,CAACyiJ,OAAO,CAAC7xH,KAAK,EAAE,UAAUhU,CAAC,EAAE8lI,OAAO,EAAE;cACxC,IAAI7+I,IAAI,CAAC8+I,SAAS,KAAKj4I,SAAS,IAAI7G,IAAI,CAAC8+I,SAAS,IAAI,IAAI,EACtD9+I,IAAI,CAAC8+I,SAAS,GAAG9+I,IAAI,CAACkb,KAAK,CAAC,CAAC;cACjC,IAAI2jI,OAAO,CAACz0H,QAAQ,GAAG,CAAC,EAAE;gBACtB;gBACA;gBACA,IAAI20H,aAAa,GAAG/+I,IAAI,CAACi0B,KAAK,KAAK4qH,OAAO,CAAC/c,eAAe;gBAC1D,IAAI5rI,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,KAAK,IAAI,EAAE;kBAChDwwH,aAAa,GAAGxoJ,aAAa,CAAC6uB,SAAS,CAACplB,IAAI,CAACygI,YAAY,GAAGzgI,IAAI,CAAC4zB,GAAG,EAAE,CAAC,CAAC,KACpEr9B,aAAa,CAAC6uB,SAAS,CAACy5H,OAAO,CAAC/c,eAAe,GAAGd,aAAa,GAAGhhI,IAAI,CAACoqB,QAAQ,EAAE,CAAC,CAAC;gBAC3F,CAAC,MAAM;kBACH20H,aAAa,GAAGxoJ,aAAa,CAAC6uB,SAAS,CAACplB,IAAI,CAACygI,YAAY,EAAE,CAAC,CAAC,KAAKlqI,aAAa,CAAC6uB,SAAS,CAACy5H,OAAO,CAAC/c,eAAe,GAAGd,aAAa,GAAGhhI,IAAI,CAACoqB,QAAQ,EAAE,CAAC,CAAC;gBACzJ;gBAEA,IAAKpqB,IAAI,CAACpH,IAAI,IAAIoH,IAAI,CAACpH,IAAI,CAAC2M,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAC/CvF,IAAI,CAACg1B,QAAQ,IAAI,MAAM,KAAK6pH,OAAO,CAACjG,SAAS,IAAI,IAAI,IAAIiG,OAAO,CAACG,UAAU,IAAI,IAAI,CAAC,IACrFH,OAAO,CAACtsI,SAAS,KAAKvS,IAAI,CAACuS,SAAS,IAAIssI,OAAO,CAAC7wB,YAAY,MAAMhuH,IAAI,CAACguH,YAAY,KAAKnnH,SAAS,GAAG,IAAI,GAAG7G,IAAI,CAACguH,YAAY,CAAC,KAAK,CAAChuH,IAAI,CAAC61B,YAAY,IAChJ71B,IAAI,CAAC61B,YAAY,KAAKgpH,OAAO,CAAChpH,YAAY,CAAC,IAAIkpH,aAAa,IAC/D/+I,IAAI,CAACg1B,QAAQ,IAAI,YAAY,IAAI6pH,OAAO,CAACjG,SAAS,IAAI,KAAK,IAAI54I,IAAI,CAACpH,IAAI,IAAIimJ,OAAO,CAACjmJ,IAAI,IAAImmJ,aAAc,CAAC,EAClH;kBAEE/+I,IAAI,CAACkb,KAAK,GAAGL,UAAU,CAAC7a,IAAI,CAACkb,KAAK,CAAC,GAAG2jI,OAAO,CAACz0H,QAAQ;kBACtDy0H,OAAO,CAACz0H,QAAQ,GAAG,CAAC;gBACxB;cACJ;YACJ,CAAC,CAAC;UACN,CAAC,CAAC;QACN,CAAC,CAAC;QAEFl0B,MAAM,CAAC4P,WAAW,CAACm5I,WAAW,GAAG/oJ,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa;QAEjE73B,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAE4D,IAAI,EAAE;UAC1DhG,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAACn5F,KAAK,EAAE,UAAUhU,CAAC,EAAE8lI,OAAO,EAAE;YACzD;YACA;YACA,IAAIE,aAAa,GAAG/+I,IAAI,CAACi0B,KAAK,KAAK4qH,OAAO,CAAC/c,eAAe;YAC1D,IAAI5rI,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,KAAK,IAAI,EAAE;cAChDwwH,aAAa,GAAGxoJ,aAAa,CAAC6uB,SAAS,CAACplB,IAAI,CAACygI,YAAY,GAAGzgI,IAAI,CAAC4zB,GAAG,EAAE,CAAC,CAAC,KACpEr9B,aAAa,CAAC6uB,SAAS,CAACy5H,OAAO,CAAC/c,eAAe,GAAGd,aAAa,GAAGhhI,IAAI,CAACoqB,QAAQ,EAAE,CAAC,CAAC;YAC3F,CAAC,MAAM;cACH20H,aAAa,GAAGxoJ,aAAa,CAAC6uB,SAAS,CAACplB,IAAI,CAACygI,YAAY,EAAE,CAAC,CAAC,KAAKlqI,aAAa,CAAC6uB,SAAS,CAACy5H,OAAO,CAAC/c,eAAe,GAAGd,aAAa,GAAGhhI,IAAI,CAACoqB,QAAQ,EAAE,CAAC,CAAC;YACzJ;YAEA,IAAMpqB,IAAI,CAACg1B,QAAQ,IAAI,MAAM,KAAK6pH,OAAO,CAACjG,SAAS,IAAI,IAAI,IAAIiG,OAAO,CAACG,UAAU,IAAI,IAAI,CAAC,IACtFH,OAAO,CAACtsI,SAAS,KAAKvS,IAAI,CAACuS,SAAS,IAAIssI,OAAO,CAAC7wB,YAAY,MAAMhuH,IAAI,CAACguH,YAAY,KAAKnnH,SAAS,GAAG,IAAI,GAAG7G,IAAI,CAACguH,YAAY,CAAC,KAAK,CAAChuH,IAAI,CAAC61B,YAAY,IAChJ71B,IAAI,CAAC61B,YAAY,KAAKgpH,OAAO,CAAChpH,YAAY,CAAC,IAAIkpH,aAAa,IAC/D/+I,IAAI,CAACg1B,QAAQ,IAAI,YAAY,IAAI6pH,OAAO,CAACjG,SAAS,IAAI,KAAK,IAAI54I,IAAI,CAACpH,IAAI,IAAIimJ,OAAO,CAACjmJ,IAAI,IAAImmJ,aAAc,EAC7G;cACE/+I,IAAI,CAACkb,KAAK,GAAG2jI,OAAO,CAACz0H,QAAQ,GAAGy0H,OAAO,CAACK,cAAc,CAAC;YAC3D;UACJ,CAAC,CAAC;QACN,CAAC,CAAC;QAEFhpJ,MAAM,CAAC4P,WAAW,CAACqyB,cAAc,GAAGjiC,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ;QAE/D94B,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,GAAG,EAAE;QACrC37B,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,GAAG,EAAE;QAChC94B,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,GAAG,EAAE;QAElCz2E,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAACm5I,WAAW,EAAE,UAAU7iJ,GAAG,EAAEtG,EAAE,EAAE;UACtDA,EAAE,CAACqpJ,QAAQ,GAAGrpJ,EAAE,CAAColB,KAAK;UACtB,IAAIhlB,MAAM,CAAC0+I,YAAY,CAACwK,WAAW,IAAI,IAAI,IAAIlpJ,MAAM,CAAC0+I,YAAY,CAACr8G,aAAa,IAAI,IAAI,EAAE;YACtFziC,EAAE,CAACupJ,QAAQ,GAAGvpJ,EAAE,CAAColB,KAAK;YACtBplB,EAAE,UAAO,GAAG,IAAI;UACpB,CAAC,MACI;YACDA,EAAE,UAAO,GAAG,KAAK;YACjB,IAAIA,EAAE,CAAColB,KAAK,KAAK,CAAC,EAAE;cAChBplB,EAAE,CAACupJ,QAAQ,GAAG,CAAC;YACnB,CAAC,MAAM;cACHvpJ,EAAE,CAACupJ,QAAQ,GAAG,CAAC;YACnB;UACJ;QACJ,CAAC,CAAC;QAEFnpJ,MAAM,CAAC4P,WAAW,CAAC8+H,mBAAmB,GAAG1uI,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,GAAG,IAAI,GAAG,KAAK;MAE1F,CAAC,MAAM;QACH;QACA,IAAIgmJ,OAAO,GAAGtuH,4FAAuB,CAACuuH,uBAAuB,CAACrpJ,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC0+I,YAAY,EAAE1+I,MAAM,CAAC4+I,UAAU,CAAC;QACzHwK,OAAO,CAAC1K,YAAY,GAAG1+I,MAAM,CAAC0+I,YAAY;QAE1C5jH,4FAAuB,CAACmkH,uBAAuB,CAACj/I,MAAM,CAAC4P,WAAW,EAAEw5I,OAAO,CAAC;MAChF;MAIA,IAAIppJ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,EAAE;QAChCpD,MAAM,CAACspJ,kBAAkB,GAAG,KAAK;MACrC,CAAC,MAAM;QACHtpJ,MAAM,CAAC4P,WAAW,CAAC25I,iBAAiB,GAAG,IAAI;QAC3CvpJ,MAAM,CAAC4L,WAAW,CAAC,CAAC;QACpB5L,MAAM,CAACspJ,kBAAkB,GAAG,IAAI;MACpC;MAEA,IAAI,CAAC7iB,SAAS,EACVzmI,MAAM,CAAC4P,WAAW,CAAC45I,aAAa,GAAGxpJ,MAAM,CAACypJ,gBAAgB,CAAC,CAAC,CAAC,KAE7DzpJ,MAAM,CAAC4P,WAAW,CAAC2yB,cAAc,GAAG,IAAI;MAE5C/hC,QAAQ,CAACR,MAAM,CAACumJ,uBAAuB,EAAE,CAAC,CAAC;;MAE3C;MACA,IAAIrmJ,aAAa,CAACmB,QAAQ,IAAI,CAAC,CAACrB,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,EAAE;QAC5DhD,eAAe,CAAC43C,WAAW,CAACh4C,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,CAAC,CAACY,IAAI,CAAC,UAAUC,IAAI,EAAE;UAC7E,IAAIA,IAAI,CAACqF,SAAS,CAAC,CAAC,CAAC,EACjBtJ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,GAAGqD,IAAI,CAACqF,SAAS,CAAC,CAAC,CAAC;UAEnDtJ,MAAM,CAAC4P,WAAW,CAACwsB,qBAAqB,GAAGp8B,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC6C,aAAa,GAAGzD,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC6C,aAAa,GAAG,CAAC;UAEpIjD,QAAQ,CAAC,YAAY;YACjBP,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;UACxC,CAAC,EAAE,GAAG,CAAC;QAEX,CAAC,EAAE,UAAUqe,KAAK,EAAE;UAChB7oB,QAAQ,CAAC,YAAY;YACjBP,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;UACxC,CAAC,EAAE,GAAG,CAAC;QACX,CAAC,CAAC;MACN,CAAC,MACI;QACDxK,QAAQ,CAAC,YAAY;UACjBP,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;QACxC,CAAC,EAAE,GAAG,CAAC;MACX;IAEJ,CAAC,CAAC,SACI,CAAC,UAAU7G,GAAG,EAAE;MAClBnE,MAAM,CAACymJ,YAAY,CAACtiJ,GAAG,EAAE,IAAI,CAAC;MAC9B;MACA;IACJ,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAAC6sB,gBAAgB,GAAG,YAAY;IAClC5sB,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;EACxC,CAAC;EAEDhL,MAAM,CAACsqB,eAAe,GAAGjqB,aAAa,CAACiqB,eAAe;EAEtDtqB,MAAM,CAAC0pJ,6BAA6B,GAAGrpJ,aAAa,CAACkqB,eAAe;EAEpEvqB,MAAM,CAACuqB,eAAe,GAAGlqB,aAAa,CAACmqB,2BAA2B;EAElExqB,MAAM,CAAC2pJ,UAAU,GAAG,IAAI;EAExB3pJ,MAAM,CAACsmJ,UAAU,GAAG,UAAU9yB,MAAM,EAAE+qB,UAAU,EAAE;IAC9C,OAAOv+I,MAAM,CAACmkJ,cAAc,CAAC3wB,MAAM,CAAC,CAC/BxvH,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzB,IAAIwR,GAAG,GAAGhd,MAAM,CAACkE,IAAI,CAAC6B,MAAM,CAAC,UAAUq7F,CAAC,EAAE;QAAE,OAAOA,CAAC,CAAC9pE,UAAU,KAAKk8F,MAAM;MAAE,CAAC,CAAC;MAC9E,IAAIx2G,GAAG,CAAC5W,MAAM,GAAG,CAAC,EAAE;QAChBpG,MAAM,CAAC4pJ,kBAAkB,CAAC5sI,GAAG,CAAC,CAAC,CAAC,EAAEuhI,UAAU,CAAC;QAC7ChzI,QAAQ,CAACE,OAAO,CAACuR,GAAG,CAAC,CAAC,CAAC,CAAC;MAC5B,CAAC,MAAMzR,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MAE7B,OAAOF,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC;EACV,CAAC;;EAED;EACA1L,MAAM,CAAC4+I,UAAU,GAAG,IAAI;EAExB5+I,MAAM,CAACkiJ,UAAU,GAAG,UAAUp4I,IAAI,EAAE;IAChC9J,MAAM,CAAC4+I,UAAU,GAAG,SAAS;IAE7B,OAAO5+I,MAAM,CAACsmJ,UAAU,CAACx8I,IAAI,CAACwtB,UAAU,CAAC,SAC/B,CAAC,UAAUnzB,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACV,CAAC;EAEDnE,MAAM,CAAC6pJ,4BAA4B,GAAG,YAAY;IAC9C7pJ,MAAM,CAACgW,OAAO,CAAC2sI,SAAS,GAAG3iJ,MAAM,CAACgW,OAAO,CAACqnC,QAAQ;IAClDr9C,MAAM,CAACgW,OAAO,CAAC4sI,SAAS,GAAG5iJ,MAAM,CAACgW,OAAO,CAACw9E,QAAQ;IAClDxzF,MAAM,CAACgW,OAAO,CAAC6sI,SAAS,GAAG7iJ,MAAM,CAACgW,OAAO,CAACqrD,QAAQ;IAClDrhE,MAAM,CAACgW,OAAO,CAAC8sI,OAAO,GAAG9iJ,MAAM,CAACgW,OAAO,CAACsrD,MAAM;IAE9CthE,MAAM,CAAC4+I,UAAU,GAAG,SAAS;IAE7B,IAAI/wH,cAAc,GAAG/pB,CAAC,CAAC,iCAAiC,CAAC;IACzDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,EAAE,YAAY;MACjD7tB,MAAM,CAAC8pJ,gBAAgB,GAAGngI,KAAK,CAACuE,OAAO,CAAC,CAAC;MACzCluB,MAAM,CAAC+pJ,iBAAiB,GAAGpgI,KAAK,CAACuE,OAAO,CAAC,CAAC;MAE1C1tB,QAAQ,CAAC,YAAY;QACjBP,UAAU,CAAC+K,UAAU,CAAC,iBAAiB,CAAC;MAC5C,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAEDhL,MAAM,CAACgqJ,6BAA6B,GAAG,YAAY;IAC/ChqJ,MAAM,CAAC4+I,UAAU,GAAG,IAAI;IAExB,IAAI/wH,cAAc,GAAG/pB,CAAC,CAAC,iCAAiC,CAAC;IACzDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAACiqJ,YAAY,GAAG,YAAY;IAC9BjqJ,MAAM,CAACgW,OAAO,CAACqnC,QAAQ,GAAGr9C,MAAM,CAACgW,OAAO,CAAC2sI,SAAS;IAClD3iJ,MAAM,CAACgW,OAAO,CAACw9E,QAAQ,GAAGxzF,MAAM,CAACgW,OAAO,CAAC4sI,SAAS;IAClD5iJ,MAAM,CAACgW,OAAO,CAACqrD,QAAQ,GAAGrhE,MAAM,CAACgW,OAAO,CAAC6sI,SAAS;IAClD7iJ,MAAM,CAACgW,OAAO,CAACsrD,MAAM,GAAGthE,MAAM,CAACgW,OAAO,CAAC8sI,OAAO;IAC9C9iJ,MAAM,CAAC4+I,UAAU,GAAG,IAAI;IAExB,IAAI5+I,MAAM,CAACshJ,QAAQ,KAAK,KAAK,EAAE;MAC3BthJ,MAAM,CAAC4gJ,gBAAgB,CAACv/E,QAAQ,GAAGn3D,IAAI;MACvClK,MAAM,CAAC4gJ,gBAAgB,CAACt/E,MAAM,GAAGnV,EAAE;MACnCnsD,MAAM,CAAC8gJ,qBAAqB,GAAG,CAAC;IACpC;IAEA,IAAIjzH,cAAc,GAAG/pB,CAAC,CAAC,iCAAiC,CAAC;IACzDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAACkqJ,sBAAsB,GAAG,YAAW;IACvC,IAAIlqJ,MAAM,CAAC0+I,YAAY,IAAI1+I,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,EAAE;MACjD,IAAM9rH,IAAI,GAAGlE,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI;MACrC,UAAAv+G,MAAA,CAAUvN,IAAI,CAACirI,4BAA4B,OAAA19H,MAAA,CAAIvN,IAAI,CAACorI,4BAA4B,OAAA79H,MAAA,CAAIvN,IAAI,CAACkrI,oBAAoB,OAAA39H,MAAA,CAAIvN,IAAI,CAACsrI,wBAAwB,OAAA/9H,MAAA,CAAIvN,IAAI,CAACqrI,mBAAmB,OAAA99H,MAAA,CAAIvN,IAAI,CAACmrI,uBAAuB;IAC9M;IAEA,OAAO,GAAG;EACd,CAAC;EAEDrvI,MAAM,CAAC4pJ,kBAAkB,GAAG,UAAU9/I,IAAI,EAAEy0I,UAAU,EAAE;IAEpD,IAAIz0I,IAAI,EAAE;MAEN9J,MAAM,CAACgoJ,WAAW,GAAG,KAAK;MAC1BlkJ,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAACkE,IAAI,EAAE,UAAUgC,GAAG,EAAEtG,EAAE,EAAE;QACnCA,EAAE,CAACuqJ,UAAU,GAAG,KAAK;MACzB,CAAC,CAAC;MACFnqJ,MAAM,CAAC0+I,YAAY,GAAG,CAAC,CAAC;MACxB5+I,OAAO,CAAC+F,IAAI,CAACiE,IAAI,EAAE9J,MAAM,CAAC0+I,YAAY,CAAC;MACvC50I,IAAI,CAACqgJ,UAAU,GAAG,IAAI;MACtBnqJ,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,GAAGjvG,IAAI,CAAC2T,KAAK,CAACvhC,IAAI,CAACkmH,IAAI,CAAC2W,aAAa,CAAC;MACvE3mI,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,GAAG9rG,gFAAc,CAAC76B,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC;MACrF3mI,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAACyjB,YAAY,GAAGpqJ,MAAM,CAAC0+I,YAAY,CAAC0L,YAAY,KAAK,IAAI;MAE1F3J,4FAA0B,CAACzgJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,EAAEhwH,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC;MAEvF3mI,MAAM,CAAC0+I,YAAY,CAACr8G,aAAa,GAAGriC,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAACtkG,aAAa;MAEnFriC,MAAM,CAAC0+I,YAAY,CAACsB,QAAQ,GAAG9hI,WAAW,CAAC8hI,QAAQ,CAAChgJ,MAAM,CAAC0+I,YAAY,CAAC;MACxE1+I,MAAM,CAAC0+I,YAAY,CAACgD,WAAW,GAAGxhJ,aAAa,CAACmqJ,YAAY,KACvDrqJ,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,OAAO,IAAIrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,cAAc,CAAC;;MAE7F;MACA;MACA;MACA;MACA;MACA;MACA;MACA,IAAI,CAAC,CAACrD,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,IAClCliC,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,CAAC97B,MAAM,GAAG,CAAC,IAC3CpG,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,IAAI,QAAQ,EAAE;QACxC;QACA,IAAIinJ,eAAe,GAAGtqJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,CAACn8B,MAAM,CAAC,UAAU4P,CAAC,EAAE;UAAE,OAAOA,CAAC,CAACyvI,WAAW,KAAK,IAAI;QAAE,CAAC,CAAC;;QAE9G;QACA,IAAImF,YAAY,GAAGvqJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,CAACn8B,MAAM,CAAC,UAAU4P,CAAC,EAAE;UAAE,OAAOA,CAAC,CAACyvI,WAAW,KAAK,IAAI;QAAE,CAAC,CAAC;;QAE3G;QACA;QACA;QACAplJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAACw6B,YAAY,GAAGxqJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAACn5F,KAAK,CAAC,CAAC;QACxE72B,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAACy6B,cAAc,GAAGzqJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO;QAE1EliC,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAACn5F,KAAK,GAAGyzH,eAAe,CAAC,CAAC,CAAC,CAACzzH,KAAK,CAAC9wB,MAAM,CAAC,UAAU4P,CAAC,EAAE;UAAE,OAAOA,CAAC,CAACue,QAAQ,GAAG,CAAC;QAAE,CAAC,CAAC;QACzG;QACAo2H,eAAe,CAAC,CAAC,CAAC,CAACzzH,KAAK,GAAGyzH,eAAe,CAAC,CAAC,CAAC,CAACzzH,KAAK,CAAC9wB,MAAM,CAAC,UAAU4P,CAAC,EAAE;UAAE,OAAOA,CAAC,CAACue,QAAQ,IAAI,CAAC;QAAE,CAAC,CAAC;QAEpG,IAAIq2H,YAAY,CAACnkJ,MAAM,GAAG,CAAC,EAAE;UACzB;UACA;UACAtC,CAAC,CAACmC,IAAI,CAACskJ,YAAY,EAAE,UAAUrkJ,GAAG,EAAE80I,GAAG,EAAE;YAErC,IAAI0P,UAAU,GAAG1P,GAAG,CAACnkH,KAAK,CAAC9wB,MAAM,CAAC,UAAU4P,CAAC,EAAE;cAAE,OAAOA,CAAC,CAACue,QAAQ,GAAG,CAAC;YAAE,CAAC,CAAC;YAC1EpwB,CAAC,CAACmC,IAAI,CAACykJ,UAAU,EAAE,UAAUlgJ,EAAE,EAAEmgJ,GAAG,EAAE;cAClCA,GAAG,CAACvF,WAAW,GAAG,IAAI;YAC1B,CAAC,CAAC;YAEFkF,eAAe,CAAC,CAAC,CAAC,CAACzzH,KAAK,GAAGyzH,eAAe,CAAC,CAAC,CAAC,CAACzzH,KAAK,CAACplB,MAAM,CAACi5I,UAAU,CAAC;UAC1E,CAAC,CAAC;QACN;;QAEA;QACA;QACA;QACA1qJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,GAAG,CAACooH,eAAe,CAAC,CAAC,CAAC,CAAC;MAC3D;MAEA,IAAIM,aAAa,GAAG5qJ,MAAM,CAAC2kJ,gBAAgB,CAAC3kJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC;MACrE,IAAI66B,aAAa,GAAG7qJ,MAAM,CAAC6kJ,gBAAgB,CAAC7kJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC;MAErE,IAAI,OAAOhwH,MAAM,CAAC0+I,YAAY,CAACr8G,aAAa,KAAK,WAAW,EAAE;QAC1D,IAAIriC,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,kBAAkB,IAC9CrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,cAAc,IAC7CrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,WAAW,IAC1CrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,OAAO,IACtCrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,QAAQ,EAAE;UAC5C,IAAIhD,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAACixH,aAAa,CAAC,EAAE,CAAC,CAAC,GAAGxqJ,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAACgxH,aAAa,CAAC,EAAE,CAAC,CAAC,IACtGvqJ,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAACgxH,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE;YAC7D5qJ,MAAM,CAAC0+I,YAAY,CAACr8G,aAAa,GAAG,IAAI;UAC5C;QACJ,CAAC,MACI,IAAIriC,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,IAAI,QAAQ,EAAE;UAC7C;UACA;UACA;QAAA;MAER;MAEArD,MAAM,CAAC0+I,YAAY,CAACiH,gBAAgB,GAAG,CAAC;MACxC,IAAImF,UAAU,GAAGzqJ,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC;MAEnF,IAAI,CAAC3mI,MAAM,CAAC0+I,YAAY,CAACr8G,aAAa,IAAI,IAAI,IAAIriC,MAAM,CAAC0+I,YAAY,CAAClmH,cAAc,KAAKx4B,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,IAAIliC,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,CAAC97B,MAAM,GAAG,CAAC,EAAE;QAEtK,IAAI,CAAC0kJ,UAAU,EACX9qJ,MAAM,CAAC0+I,YAAY,CAACiH,gBAAgB,GAAG3lJ,MAAM,CAAC4lJ,iBAAiB,CAAC5lJ,MAAM,CAAC0+I,YAAY,CAAC,CAAC,KAErF1+I,MAAM,CAAC0+I,YAAY,CAACiH,gBAAgB,GAAG9rH,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAACnqG,OAAO,CAAC;MAClG;MAEA,IAAIuuH,SAAS,GAAG,KAAK;MACrB,IAAI/G,UAAU,GAAGhkJ,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,IAAI,QAAQ,IACnD,CAAC,CAACrD,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAACn5F,KAAK,IAChC72B,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAACn5F,KAAK,CAACzwB,MAAM,GAAG,CAAC;MAE7C,IAAIquG,QAAQ,GAAG,EAAE;MAEjB3wG,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAACl3F,QAAQ,EAAE,UAAUkyH,MAAM,EAAEhQ,GAAG,EAAE;QAC7D,IAAIA,GAAG,CAACr6G,kBAAkB,KAAKpgC,SAAS,CAAC6zC,iBAAiB,EAAE;UACxD,IAAI62G,OAAO,GAAG,KAAK;UACnBnnJ,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC7tG,QAAQ,EAAE,UAAUoyH,OAAO,EAAEC,IAAI,EAAE;YACxE,IAAIA,IAAI,CAAC/nJ,EAAE,IAAI43I,GAAG,CAAC53I,EAAE,EAAE;cACnB6nJ,OAAO,GAAG,IAAI;YAClB;UACJ,CAAC,CAAC;UAEF,IAAI,CAACA,OAAO,EAAE;YAEV,IAAIG,UAAU,GAAG,CAAC,CAAC;YACnBtrJ,OAAO,CAAC+F,IAAI,CAACm1I,GAAG,EAAEoQ,UAAU,CAAC;YAC7BA,UAAU,CAACtqH,eAAe,GAAGrgC,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC;YAEhExB,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC7tG,QAAQ,CAACzyB,IAAI,CAAC+kJ,UAAU,CAAC;UAC/D;QACJ;MACJ,CAAC,CAAC;MAEF,IAAIhD,WAAW,GAAGtoJ,OAAO,CAAC+F,IAAI,CAAC7F,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,CAAC;MAEhEp+B,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAACn5F,KAAK,EAAE,UAAUw0H,OAAO,EAAEtoB,IAAI,EAAE;QAC5DA,IAAI,CAACimB,cAAc,GAAG,CAAC;MAC3B,CAAC,CAAC;MAGF,IAAIle,aAAa,GAAG,CAAC;MACrBhnI,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAChrG,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;QACvE,IAAIA,EAAE,CAAC6qI,aAAa,IAAI7qI,EAAE,CAAC6qI,aAAa,KAAK,CAAC,EAAE;UAC5CK,aAAa,GAAGlrI,EAAE,CAAC6qI,aAAa;QACpC;MACJ,CAAC,CAAC;MAEF3mI,CAAC,CAACmC,IAAI,CAACmiJ,WAAW,EAAE,UAAU4C,MAAM,EAAEhQ,GAAG,EAAE;QAEvC+P,SAAS,GAAG,IAAI;QAEhBjnJ,CAAC,CAACmC,IAAI,CAAC+0I,GAAG,CAACnkH,KAAK,EAAE,UAAUy0H,UAAU,EAAE3C,OAAO,EAAE;UAC7C,IAAIA,OAAO,CAACz0H,QAAQ,GAAG,CAAC,IAAKy0H,OAAO,CAACjmJ,IAAI,IAAIimJ,OAAO,CAACjmJ,IAAI,CAAC2M,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAE,KAClFs5I,OAAO,CAACvD,WAAW,KAAK,IAAI,IAAIplJ,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,QAAQ,CAAC,EAAE;YAC3ES,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAACn5F,KAAK,EAAE,UAAUw0H,OAAO,EAAEtoB,IAAI,EAAE;cAC5D;cACA;cACA;cACA,IAAI8lB,aAAa,GAAG9lB,IAAI,CAAChlG,KAAK,KAAK4qH,OAAO,CAAC/c,eAAe;cAE1D,IAAIvrI,aAAa,CAAC6uB,SAAS,CAAC47G,aAAa,EAAC,CAAC,CAAC,GAAG,CAAC,IAC5CzqI,aAAa,CAAC6uB,SAAS,CAAC47G,aAAa,EAAC,CAAC,CAAC,IAAI,CAAC,EAAE;gBAC/C+d,aAAa,GAAGxoJ,aAAa,CAAC6uB,SAAS,CAAC6zG,IAAI,CAAChlG,KAAK,EAAE,CAAC,CAAC,KAClD19B,aAAa,CAAC6uB,SAAS,CAACy5H,OAAO,CAAC5qH,KAAK,GAAG+sG,aAAa,EAAE,CAAC,CAAC;cACjE;cAEA,IAAG,CAAC+d,aAAa,EAAE;gBACf;gBACA,IAAI0C,uBAAuB,GAAI1xH,IAAI,CAACD,GAAG,CAAC+uH,OAAO,CAACpe,YAAY,GAAEoe,OAAO,CAACz0H,QAAQ,CAAC;gBAC/E20H,aAAa,GAAGxoJ,aAAa,CAAC6uB,SAAS,CAAC6zG,IAAI,CAAChlG,KAAK,EAAE,CAAC,CAAC,KAClD19B,aAAa,CAAC6uB,SAAS,CAACq8H,uBAAuB,EAAE,CAAC,CAAC;cAC3D;;cAEA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;;cAEA,IAAKxoB,IAAI,CAACrgI,IAAI,IAAIqgI,IAAI,CAACrgI,IAAI,CAAC2M,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAClDs5I,OAAO,CAACtsI,SAAS,IAAI,IAAI,IAAIssI,OAAO,CAACtsI,SAAS,KAAK0mH,IAAI,CAAC1mH,SAAS,IAAIssI,OAAO,CAAC7wB,YAAY,KAAKiL,IAAI,CAACjL,YAAY,KAC5G,CAACiL,IAAI,CAACpjG,YAAY,IAAIojG,IAAI,CAACpjG,YAAY,KAAKgpH,OAAO,CAAChpH,YAAY,CAAC,IAAIkpH,aAAa,IAClFF,OAAO,CAACtsI,SAAS,KAAK0mH,IAAI,CAAC1mH,SAAS,IAAIssI,OAAO,CAAC7wB,YAAY,KAAKiL,IAAI,CAACjL,YAAY,IAAIiL,IAAI,CAAC2f,SAAS,IAAI,KAAK,IAAIiG,OAAO,CAACjG,SAAS,IAAI,KAAK,IACxI3f,IAAI,CAACrgI,IAAI,IAAIimJ,OAAO,CAACjmJ,IAAI,IAAImmJ,aAAc,CAAC,EACtD;gBACE,IAAI9lB,IAAI,CAAC7uG,QAAQ,GAAG,CAAC,IAAIl0B,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,QAAQ,IAChE2gJ,UAAU,IACTjhB,IAAI,CAAC7uG,QAAQ,GAAG,CAAC,IAAIl0B,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,QAAS,EAAE;kBAC5D,IAAIslJ,OAAO,CAACz0H,QAAQ,GAAG,CAAC,EAAE;oBACtB6uG,IAAI,CAACimB,cAAc,IAAInvH,IAAI,CAACD,GAAG,CAAC+uH,OAAO,CAACz0H,QAAQ,CAAC;oBACjDy0H,OAAO,CAACz0H,QAAQ,GAAG,CAAC;kBACxB;kBACA,IAAI6uG,IAAI,CAAC7uG,QAAQ,GAAG6uG,IAAI,CAACimB,cAAc,EACnCjmB,IAAI,CAACimB,cAAc,GAAGjmB,IAAI,CAAC7uG,QAAQ;gBAC3C;cACJ;YACJ,CAAC,CAAC;UACN;QACJ,CAAC,CAAC;QAEFpwB,CAAC,CAACmC,IAAI,CAAC+0I,GAAG,CAACliH,QAAQ,EAAE,UAAU0yH,SAAS,EAAE3oH,MAAM,EAAE;UAC9C,IAAI4oH,SAAS,GAAG,KAAK;UACrB3nJ,CAAC,CAACmC,IAAI,CAACwuG,QAAQ,EAAE,UAAUi3C,MAAM,EAAE3oH,GAAG,EAAE;YACpC;YACA,IAAIA,GAAG,CAAC3/B,EAAE,KAAKy/B,MAAM,CAACz/B,EAAE,IAAK,CAAC2/B,GAAG,CAACgB,mBAAoB,EAAE;cACpDhB,GAAG,CAAChe,MAAM,IAAI8d,MAAM,CAAC9d,MAAM;cAC3B0mI,SAAS,GAAG,IAAI;YACpB;UACJ,CAAC,CAAC;UACF,IAAIA,SAAS,KAAK,KAAK,EAAE;YACrB,IAAI5oH,MAAM,CAAC9d,MAAM,IAAI,CAAC,EAClB0vF,QAAQ,CAACpuG,IAAI,CAACw8B,MAAM,CAAC;UAC7B;QACJ,CAAC,CAAC;MAEN,CAAC,CAAC;MAEF,IAAI7iC,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,QAAQ,EAAE;QACzC;QACA;QACAS,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAACn5F,KAAK,EAAE,UAAU3wB,GAAG,EAAEtG,EAAE,EAAE;UACtDkE,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,EAAE,UAAU8oH,MAAM,EAAEhQ,GAAG,EAAE;YAC5DA,GAAG,CAACnkH,KAAK,GAAGmkH,GAAG,CAACnkH,KAAK,CAAC9wB,MAAM,CAAC,UAAUq7F,CAAC,EAAE;cACtC,OAAOxhG,EAAE,CAACs0B,QAAQ,GAAG,CAAC,IACnB,EAAEktE,CAAC,CAAC/kF,SAAS,IAAIzc,EAAE,CAACyc,SAAS,IAC3B+kF,CAAC,CAACwqC,eAAe,IAAIhsI,EAAE,CAACgsI,eAAe,KACtC,CAAChsI,EAAE,CAAC+/B,YAAY,IAAIyhE,CAAC,CAACzhE,YAAY,KAAK//B,EAAE,CAAC+/B,YAAY,CAAC,CAAC;YAClE,CAAC,CAAC;UACN,CAAC,CAAC;QACN,CAAC,CAAC;MACN;MAEA3/B,MAAM,CAAC2rJ,UAAU,GAAG,IAAI;MACxB7nJ,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAACn5F,KAAK,EAAE,UAAU3wB,GAAG,EAAEtG,EAAE,EAAE;QACtD,IAAIA,EAAE,CAAC8C,IAAI,KAAK9C,EAAE,CAAC8C,IAAI,CAAC2M,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,IAAIzP,EAAE,CAAC8C,IAAI,IAAI,UAAU,IAAI9C,EAAE,CAAC8C,IAAI,IAAI,UAAU,CAAC,IACpG9C,EAAE,CAAC8iJ,SAAS,KAAK,KAAK,EAAE,CAC5B,CAAC,MACI;UACD,IAAI9iJ,EAAE,CAACs0B,QAAQ,KAAKt0B,EAAE,CAACopJ,cAAc,EAAE;YACnChpJ,MAAM,CAAC2rJ,UAAU,GAAG,KAAK;YACzB,OAAO,KAAK;UAChB;QACJ;MACJ,CAAC,CAAC;MAEF57G,iBAAiB,CAAC,CAAC;MAEnBjsC,CAAC,CAACmC,IAAI,CAACwuG,QAAQ,EAAE,UAAUvuG,GAAG,EAAEtG,EAAE,EAAE;QAChCA,EAAE,CAACmlB,MAAM,GAAG1kB,aAAa,CAAC6uB,SAAS,CAACtvB,EAAE,CAACmlB,MAAM,EAAE,CAAC,CAAC;QACjD/kB,MAAM,CAAC4rJ,cAAc,CAAChsJ,EAAE,CAAC;MAC7B,CAAC,CAAC;MAEFI,MAAM,CAAC0+I,YAAY,CAAC97G,cAAc,GAAG6xE,QAAQ;MAE7Cz0G,MAAM,CAAC6rJ,gBAAgB,GAAG,CAAC;MAE3B,IAAI7rJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,EAAE;QAClCp+B,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,EAAE,UAAUumH,KAAK,EAAEzN,GAAG,EAAE;UAC3D,IAAIA,GAAG,CAACoK,WAAW,KAAK,IAAI,EAAE;YAC1BthJ,CAAC,CAACmC,IAAI,CAAC+0I,GAAG,CAACnkH,KAAK,EAAE,UAAU3wB,GAAG,EAAEtG,EAAE,EAAE;cACjC,IAAIA,EAAE,CAAC8C,IAAI,KAAK,UAAU,EACtB1C,MAAM,CAAC6rJ,gBAAgB,IAAIjsJ,EAAE,CAACm+B,KAAK;YAC3C,CAAC,CAAC;;YAEF;YACA,IAAI,CAACimH,UAAU,EAAE;cACb,IAAI8H,SAAS,GAAG9Q,GAAG,CAACnkH,KAAK,CAAC9wB,MAAM,CAAC,UAAUnG,EAAE,EAAE;gBAC3C,OAAO,CAACA,EAAE,CAAC8iJ,SAAS,KAAK,IAAI,IAAI9iJ,EAAE,CAACkpJ,UAAU,KAAK,IAAI,KAAKlpJ,EAAE,CAACs0B,QAAQ,GAAG,CAAC;cAC/E,CAAC,CAAC;cACF8vH,UAAU,GAAG8H,SAAS,CAAC1lJ,MAAM,GAAG,CAAC;YACrC;UACJ;QACJ,CAAC,CAAC;MACN;MAEApG,MAAM,CAAC6rJ,gBAAgB,GAAGxrJ,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC6rJ,gBAAgB,EAAE,CAAC,CAAC;MAE7E7rJ,MAAM,CAAC4P,WAAW,GAAG9P,OAAO,CAAC+F,IAAI,CAAC7F,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC;MACpE,IAAIF,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;MAEnE,IAAI62H,SAAS,EAAE;QACX3rG,4FAAuB,CAACixH,oBAAoB,CAAC/rJ,MAAM,CAAC0+I,YAAY,EAAE1+I,MAAM,CAACiwC,oBAAoB,CAAC;MAClG,CAAC,MAAM;QACHjwC,MAAM,CAAC0+I,YAAY,CAAC97G,cAAc,GAAG,EAAE,CAAC,CAAC;MAC7C;;MAEA;MACA,OAAO5iC,MAAM,CAAC4P,WAAW,CAACktB,cAAc;MACxC,OAAO98B,MAAM,CAAC4P,WAAW,CAACszF,gBAAgB;MAC1C,OAAOljG,MAAM,CAAC4P,WAAW,CAACuzF,oBAAoB;;MAE9C;MACA,IAAInjG,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,IAAI,QAAQ,EAAE;QACxC,IAAI,CAAC,CAACrD,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,EAClCliC,MAAM,CAAC4P,WAAW,CAACsyB,OAAO,GAAGliC,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO;QAEjEliC,MAAM,CAAC4P,WAAW,CAAC0nB,UAAU,GAAGt3B,MAAM,CAAC0+I,YAAY,CAACpnH,UAAU;MAClE;MAEA,IAAI,CAACmvG,SAAS,EAAE;QACZzmI,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB,GAAG,CAAC;QACzC55I,MAAM,CAAC4P,WAAW,CAACy4I,uBAAuB,GAAG,CAAC;QAC9CvkJ,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAE4D,IAAI,EAAE;UAC1D,IAAI,CAAC,CAACA,IAAI,CAACmhI,mBAAmB,EAAE;YAC5BnhI,IAAI,CAAC+yB,YAAY,GAAG/yB,IAAI,CAACmhI,mBAAmB;YAC5CnhI,IAAI,CAACmhI,mBAAmB,GAAG,CAAC;UAChC;QACJ,CAAC,CAAC;MACN;;MAEA;MACA,IAAI+gB,SAAS,GAAG,CAAC;MACjB,IAAIC,QAAQ,GAAG,CAAC;MAEhB,IAAI,CAACxlB,SAAS,EAAE;QACZzmI,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC1lG,SAAS,GAAG5gC,aAAa,CAAC6uB,SAAS,CAAChR,WAAW,CAAC0sH,YAAY,CAAC5qI,MAAM,CAAC4P,WAAW,CAAC,EAAE,CAAC,CAAC;QACtH5P,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAACmJ,QAAQ,GAAG9vI,MAAM,CAAC45B,GAAG,CAAC55B,MAAM,CAACosI,WAAW,CAACpsI,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAAC,CAAC;QAC7G37B,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC5tG,KAAK,GAAG/4B,MAAM,CAAC45B,GAAG,CAAC55B,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,CAAC,CAAC,IAAIr4B,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC3pG,YAAY,GAAGh9B,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC3pG,YAAY,GAAG,CAAC,CAAC;QACxO,IAAIkvH,IAAI,GAAGlsJ,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,CAAC;QACrF,IAAI8zH,GAAG,GAAGD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAIE,IAAI,GAAGpsJ,MAAM,CAAC2kJ,gBAAgB,CAAC3kJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC;QAC5Di8B,QAAQ,GAAGC,IAAI,IAAIlsJ,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC3pG,YAAY,GAC5DmvH,GAAG,GAAGnsJ,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC3pG,YAAY,GAAI,CAAC,CAAC,GAAGovH,IAAI;QACtEH,QAAQ,GAAG5rJ,aAAa,CAAC6uB,SAAS,CAAC+8H,QAAQ,EAAE,CAAC,CAAC;QAE/C,IAAIjsJ,MAAM,CAAC0+I,YAAY,CAACr8G,aAAa,KAAK,IAAI,IAAIriC,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,CAAC97B,MAAM,GAAG,CAAC,EAAE;UAC3F4lJ,SAAS,GAAGhsJ,MAAM,CAAC0+I,YAAY,CAACiH,gBAAgB;QACpD,CAAC,MACI;UACDqG,SAAS,GAAGC,QAAQ,GAAG,CAAC,CAAC;QAC7B;MACJ,CAAC,MAAM;QACH;QACAA,QAAQ,GAAGnxH,4FAAuB,CAAC4qH,eAAe,CAAC1lJ,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC0+I,YAAY,CAAC;QAE3F,IAAI1+I,MAAM,CAAC0+I,YAAY,CAACr8G,aAAa,KAAK,IAAI,IAC1CriC,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,CAAC97B,MAAM,GAAG,CAAC,IAC3CpG,MAAM,CAAC0+I,YAAY,CAAC0L,YAAY,EAC9B;UACF4B,SAAS,GAAGhsJ,MAAM,CAAC0+I,YAAY,CAACiH,gBAAgB;QACpD,CAAC,MACI;UACDqG,SAAS,GAAG,CAAChI,UAAU,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAIiI,QAAQ;QACzD;QAEAnsJ,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,EAAE,UAAUoK,CAAC,EAAE;UACtDA,CAAC,CAACmpH,WAAW,GAAG,IAAI;QACxB,CAAC,CAAC;MACN;MAGA,IAAI3H,aAAa,GAAGrkJ,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC2kJ,gBAAgB,CAAC3kJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;MAC3G,IAAI40B,aAAa,GAAGvkJ,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC6kJ,gBAAgB,CAAC7kJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;MAE3GhwH,MAAM,CAAC0+I,YAAY,CAAC4N,SAAS,GAAGtsJ,MAAM,CAACssJ,SAAS,CAAC,CAAC;MAClD,IAAI,CAAC7lB,SAAS,EAAE;QACZzmI,MAAM,CAAC0+I,YAAY,CAAC6N,iBAAiB,GAAG,CAACvI,UAAU,IAAIhkJ,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,QAAQ,IAAI2oJ,SAAS,GAAG,CAAC;QAC/GhsJ,MAAM,CAAC0+I,YAAY,CAAC8N,mBAAmB,GAAGxI,UAAU,IAAIhkJ,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC2oJ,SAAS,CAAC;QAC/GhsJ,MAAM,CAAC0+I,YAAY,CAACkF,cAAc,GAAI5jJ,MAAM,CAAC0+I,YAAY,CAACr8G,aAAa,KAAK,IAAI,IAAI2pH,SAAS,GAAG,CAAC,IAC5FhsJ,MAAM,CAAC0+I,YAAY,CAAC8N,mBAAmB,IAAIR,SAAS,GAAG,CAAE;MAClE,CAAC,MAAM;QAEH,IAAIlH,gBAAgB,GAAG9kJ,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,IAAI3mI,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAChqG,SAAS,KAAK,WAAW,IACnHt8B,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAACnqG,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC;QAE9Ex8B,MAAM,CAAC0+I,YAAY,CAAC6N,iBAAiB,GAAG,CAACzH,gBAAgB,IAAI,CAACd,UAAU,IAAIhkJ,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC2oJ,SAAS;QAClIhsJ,MAAM,CAAC0+I,YAAY,CAAC8N,mBAAmB,GAAG,CAAC1H,gBAAgB,IAAId,UAAU,IAAIhkJ,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC2oJ,SAAS;QACnIhsJ,MAAM,CAAC0+I,YAAY,CAACkF,cAAc,GAC7B5jJ,MAAM,CAAC0+I,YAAY,CAACr8G,aAAa,KAAK,IAAI,IAAIriC,MAAM,CAAC0+I,YAAY,CAAC8N,mBAAmB,IAAE,IAAI,IAAIR,SAAS,GAAG,CAAC,IAC5GhsJ,MAAM,CAAC0+I,YAAY,CAAC8N,mBAAmB,IAAIR,SAAS,GAAG,CAAE;QAC9D;QACA;QACA;MACJ;;MAEA;MACA,IAAI,CAAChsJ,MAAM,CAAC2rJ,UAAU,KAAK3rJ,MAAM,CAAC0+I,YAAY,CAAC6N,iBAAiB,IAAIvsJ,MAAM,CAAC0+I,YAAY,CAAC8N,mBAAmB,CAAC,EACxGxsJ,MAAM,CAAC2rJ,UAAU,GAAG,IAAI;MAE5B,IAAIc,kBAAkB,GAAG,KAAK;MAC9B,IAAIzsJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC8zB,gBAAgB,EAAE;QAC3C2I,kBAAkB,GAAG,KAAK;MAC9B,CAAC,MACI,IAAIzsJ,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,IAAI,WAAW,IAAIrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,IAAI,OAAO,EAAE;QACzFopJ,kBAAkB,GAAG,IAAI;MAC7B,CAAC,MACI,IAAIzsJ,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,IAAI,kBAAkB,IAAIrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,IAAI,cAAc,IAAIrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,IAAI,QAAQ,EAAE;QACjJ,IAAG,CAACojI,SAAS,EAAEgmB,kBAAkB,GAAG7H,aAAa,GAAGF,aAAa,GAAG,IAAI,GAAG,KAAK,CAAC,KAC3E+H,kBAAkB,GAAGzsJ,MAAM,CAAC0+I,YAAY,CAACkF,cAAc;MACjE,CAAC,MACI;QACD6I,kBAAkB,GAAG,KAAK;MAC9B;;MAEA;AACpB;AACA;MACwBzsJ,MAAM,CAAC0+I,YAAY,CAACwK,WAAW,GAAGuD,kBAAkB,IAAI1B,SAAS,KAAK,KAAK;MAC/E;;MAEA/qJ,MAAM,CAAC0+I,YAAY,CAACgO,YAAY,GAAG/7I,SAAS;MAC5C,IAAI,CAAC3Q,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,IAAI,OAAO,IACnCrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,IAAI,cAAc,IAC5CrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,IAAI,QAAQ,KACxCopJ,kBAAkB,EAAE;QACrB;QACAzsJ,MAAM,CAAC0+I,YAAY,CAACgO,YAAY,GAAG,IAAI;MAC3C;MAEA1sJ,MAAM,CAAC0+I,YAAY,CAACiO,sBAAsB,GAAG,KAAK;MAClD,IAAI,CAAC3sJ,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,IAAI,WAAW,IAAIrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,IAAI,kBAAkB,KAAKopJ,kBAAkB,EAAE;QACvH;QACAzsJ,MAAM,CAAC0+I,YAAY,CAACgO,YAAY,GAAG,IAAI;MAC3C;MAEA,IAAI1I,UAAU,IAAImI,GAAG,GAAG,CAAC,EAAE;QAAE;QACzBnsJ,MAAM,CAAC6rJ,gBAAgB,GAAG,CAAC;MAC/B;MAEA,IAAId,SAAS,IAAIoB,GAAG,GAAG,CAAC,EAAE;QAAE;QACxBnsJ,MAAM,CAAC4P,WAAW,CAACgtB,gBAAgB,GAAG,CAAC;MAC3C;MAEA,IAAI,CAAC6pG,SAAS,EACVzmI,MAAM,CAAC4P,WAAW,CAACnM,aAAa,GAAGya,WAAW,CAAC2vH,0BAA0B,CAAC7tI,MAAM,CAAC4P,WAAW,CAAC;IAErG,CAAC,MAAM;MACH5P,MAAM,CAAC0+I,YAAY,GAAG,IAAI;IAC9B;IAEA,IAAIH,UAAU,KAAK,IAAI,EAAE;MACrB/9I,QAAQ,CAAC,YAAY;QACjBosJ,8BAA8B,CAAC,CAAC;MACpC,CAAC,CAAC;MAEFpsJ,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;MAC7B,CAAC,CAAC;IACN;EACJ,CAAC;EAED7sB,MAAM,CAACkoJ,sBAAsB,GAAG,YAAY;IACxC,OAAOloJ,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,QAAQ;EAClD,CAAC;EAEDrD,MAAM,CAACwoJ,gBAAgB,GAAG,UAAUzmH,IAAI,EAAE;IACtC,IAAIimF,KAAK,GAAGjmF,IAAI,CAACpG,aAAa;IAC9B,IAAImwH,SAAS,GAAG9jC,KAAK,CAACjiH,MAAM,CAAC,UAAU8mJ,GAAG,EAAE;MAAE,OAAOA,GAAG,UAAO,KAAK,IAAI,IAAIA,GAAG,CAAC9nI,MAAM,IAAI,CAAC;IAAE,CAAC,CAAC;IAC/F,OAAO+mI,SAAS;EACpB,CAAC;EAED9rJ,MAAM,CAAC8sJ,QAAQ,GAAG,UAAUjsG,QAAQ,EAAE;IAElC,IAAI12C,MAAM,GAAGrG,CAAC,CAAC+8C,QAAQ,CAAC;IACxB,IAAI12C,MAAM,CAAC/D,MAAM,EAAE;MACf;MACAtC,CAAC,CAAC,YAAY,CAAC,CAAC8/C,IAAI,CAAC,CAAC,CAACmpG,OAAO,CAAC;QAC3Bl/F,SAAS,EAAE1jD,MAAM,CAACohB,MAAM,CAAC,CAAC,CAACK;MAC/B,CAAC,EAAE,IAAI,CAAC;IACZ;EACJ,CAAC;EAED5rB,MAAM,CAACgtJ,uBAAuB,GAAG,YAAY;IACzC;EAAA,CACH;EAEDhtJ,MAAM,CAACitJ,YAAY,GAAG,IAAI;EAC1BjtJ,MAAM,CAACktJ,UAAU,GAAG,UAAUpiJ,IAAI,EAAE;IAChC,IAAIA,IAAI,KAAK,IAAI,EAAE;MACf9K,MAAM,CAACyuG,WAAW,GAAG,EAAE;MACvBzuG,MAAM,CAACs6B,MAAM,CAAC,CAAC;IACnB;IACAt6B,MAAM,CAACitJ,YAAY,GAAGniJ,IAAI;EAC9B,CAAC;EAED9K,MAAM,CAAC2gD,IAAI,GAAG,UAAUjwC,KAAK,EAAEmgG,SAAS,EAAE;IACtC7wG,MAAM,CAACq5B,YAAY,GAAG,CAAC;IACvBr5B,MAAM,CAACihJ,UAAU,GAAGpwC,SAAS;IAC7B7wG,MAAM,CAACmhJ,SAAS,GAAGzwI,KAAK;IACxB1Q,MAAM,CAACiiH,OAAO,GAAG;MAAEyO,SAAS,EAAEhgH,KAAK;MAAEkgH,SAAS,EAAE/f;IAAU,CAAC;IAC3D7wG,MAAM,CAACs6B,MAAM,CAAC,CAAC;IAEf,IAAIt6B,MAAM,CAACkhJ,MAAM,KAAK,MAAM,EAAE;MAC1BlhJ,MAAM,CAACkhJ,MAAM,GAAG,KAAK;IACzB,CAAC,MAAM;MACHlhJ,MAAM,CAACkhJ,MAAM,GAAG,MAAM;IAC1B;EACJ,CAAC;EAED,SAASiE,kBAAkBA,CAACz0I,KAAK,EAAE;IAC/B,QAAQA,KAAK;MACT,KAAK,MAAM;QACP,OAAO,WAAW;MACtB,KAAK,SAAS;QACV,OAAO,oBAAoB;MAC/B,KAAK,QAAQ;QACT,OAAO,sBAAsB;IAErC;EACJ;EAAC;EAGD1Q,MAAM,CAAC4L,WAAW,GAAG,YAAY;IAC7B,IAAI5L,MAAM,CAAC4P,WAAW,CAAC25I,iBAAiB,KAAK,IAAI,EAC7CtpJ,UAAU,CAAC+K,UAAU,CAAC,kBAAkB,EAAE0X,MAAM,CAACitG,MAAM,CAAC;MAAE3uH,eAAe,EAAEhB,MAAM,CAAC4+I,UAAU,KAAK;IAAS,CAAC,EAAE5+I,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC,CAAC;EAClJ,CAAC;EAEDZ,MAAM,CAACqC,GAAG,CAAC,sBAAsB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACtDlE,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,GAAGsD,IAAI,CAACtD,QAAQ;IAC3CZ,MAAM,CAAC4P,WAAW,CAAC2hD,eAAe,GAAG,IAAI;IACzCvxD,MAAM,CAACspJ,kBAAkB,GAAG,KAAK;IAEjC,IAAIt9I,kBAAkB,GAAGlI,CAAC,CAAC,qBAAqB,CAAC,CAACkF,GAAG,CAAC,CAAC;IAEnD,IAAI9E,IAAI,CAACtD,QAAQ,IAAIsD,IAAI,CAACtD,QAAQ,CAACgC,QAAQ,IAAIsB,IAAI,CAACtD,QAAQ,CAACgC,QAAQ,CAACwD,MAAM,GAAG,CAAC,EAAE;MAC9E4F,kBAAkB,GAAG,CAAC,CAACA,kBAAkB,GAAGA,kBAAkB,CAACuL,WAAW,CAAC,CAAC,CAACgE,IAAI,CAAC,CAAC,GAAG,EAAE;MACxF,IAAM7Q,KAAK,GAAG,CAAC,CAACxG,IAAI,CAACwG,KAAK,GAAGxG,IAAI,CAACwG,KAAK,GAAG,EAAE;MAE5C,IAAM8mD,YAAY,GAAGttD,IAAI,CAACtD,QAAQ,CAACgC,QAAQ,CAACyO,IAAI,CAAC,UAAAogD,IAAI;QAAA,OAAK,CAAC,CAACA,IAAI,CAAC5uD,KAAK,IAAI4uD,IAAI,CAAC5uD,KAAK,CAAC0U,WAAW,CAAC,CAAC,KAAK7M,KAAK,IACvG,CAAC,CAAC+mD,IAAI,CAAC5uD,KAAK,IAAI4uD,IAAI,CAAC5uD,KAAK,CAAC0U,WAAW,CAAC,CAAC,KAAKvL,kBAAmB,IAChE,CAAC,CAACylD,IAAI,CAAC3uD,KAAK,IAAI2uD,IAAI,CAAC3uD,KAAK,CAACyU,WAAW,CAAC,CAAC,KAAKvL,kBAAmB,IAChE,CAAC,CAACylD,IAAI,CAAC1uD,WAAW,IAAI0uD,IAAI,CAAC1uD,WAAW,CAACwU,WAAW,CAAC,CAAC,KAAKvL,kBAAmB;MAAA,EAAC;MAElF,IAAIwlD,YAAY,EACZxxD,MAAM,CAAC4P,WAAW,CAAC2hD,eAAe,GAAGC,YAAY,CAAC,KACjD;QACD,IAAME,cAAc,GAAGxtD,IAAI,CAACtD,QAAQ,CAACgC,QAAQ,CAACyO,IAAI,CAAC,UAAAogD,IAAI;UAAA,OAAK,CAAC,CAACA,IAAI,CAAC5uD,KAAK,IAAI4uD,IAAI,CAAC7jD,cAAc;QAAA,CAAC,CAAC;QACjG,IAAI8jD,cAAc,EACd1xD,MAAM,CAAC4P,WAAW,CAAC2hD,eAAe,GAAGG,cAAc,CAAC,KAEpD1xD,MAAM,CAAC4P,WAAW,CAAC2hD,eAAe,GAAGrtD,IAAI,CAACtD,QAAQ,CAACgC,QAAQ,CAAC,CAAC,CAAC;MACtE;IACJ;IAEJ,IAAIsB,IAAI,CAACmI,MAAM,IAAI,QAAQ,EACvBjM,eAAe,CAACq3C,gBAAgB,CAAC,IAAI,CAAC;EAC9C,CAAC,CAAC;EAEFz3C,MAAM,CAACmtJ,qBAAqB,GAAG,UAAUrjJ,IAAI,EAAE;IAC3C,IAAI28H,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE,IAAI,CAAC62H,SAAS,EAAE;MACZ,IAAIxoG,cAAc,GAAGtZ,UAAU,CAAC7a,IAAI,CAACo0B,cAAc,CAAC;MACpDp0B,IAAI,CAACrG,aAAa,GAAGw6B,cAAc,GAAGn0B,IAAI,CAAC60B,YAAY,GAAG70B,IAAI,CAACkb,KAAK,GAAGlb,IAAI,CAACo0B,cAAc,GAAG,CAAC;MAC9F,IAAIJ,KAAK,GAAGh0B,IAAI,CAACm1B,qBAAqB;MACtC,IAAIn1B,IAAI,CAACg1B,QAAQ,KAAK,YAAY,EAAE;QAChC,IAAItB,SAAS,GAAG1zB,IAAI,CAACi1B,KAAK;QAC1B,IAAI7S,KAAK,GAAGpiB,IAAI,CAACkb,KAAK,GAAG8Y,KAAK;QAC9Bh0B,IAAI,CAAC4zB,GAAG,GAAGnC,YAAY,CAACiC,SAAS,EAAEtR,KAAK,EAAElsB,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,CAAC;MACpF;IACJ;IAEAr4B,MAAM,CAACumJ,uBAAuB,CAAC,CAAC;EACpC,CAAC;EAED,IAAIhrH,YAAY,GAAGrd,WAAW,CAACqd,YAAY;EAE3Cv7B,MAAM,CAACotJ,iBAAiB,GAAG,YAAY;IACnC,IAAInqH,GAAG,GAAG,CAAC;IACX,IAAIjjC,MAAM,CAAC2+I,gBAAgB,IAAI,UAAU,IAAI,CAAC,CAAC3+I,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,EAAE;MACxE;MACA;MACAh1B,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,EAAE,UAAUtkB,CAAC,EAAE0uB,CAAC,EAAE;QAChDD,GAAG,IAAI/kB,WAAW,CAACsvH,yBAAyB,CAACtqG,CAAC,CAAC;MACnD,CAAC,CAAC;IACN;IAEA,OAAOD,GAAG;EACd,CAAC;EAEDjjC,MAAM,CAACumJ,uBAAuB,GAAG,UAAU8G,gBAAgB,EAAE;IACzD,IAAIC,OAAO,GAAG,KAAK;IACnB,IAAIC,UAAU,GAAG,IAAI;IACrB,IAAIC,cAAc,GAAG,IAAI;IACzBxtJ,MAAM,CAACohJ,eAAe,CAAC7rI,KAAK,GAAG,CAAC;IAChC,IAAIkxH,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE,IAAI,CAACy9I,gBAAgB,EAAE;MAEnB,IAAII,eAAe,GAAG,IAAI;MAE1B3pJ,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAACm5I,WAAW,EAAE,UAAU7iJ,GAAG,EAAEtG,EAAE,EAAE;QACtD,IAAIA,EAAE,UAAO,EAAE;UACX0tJ,OAAO,GAAG,IAAI;QAClB;QACA,IAAI1tJ,EAAE,CAAC8/B,WAAW,IAAI,UAAU,IAAI9/B,EAAE,CAACqpJ,QAAQ,KAAK,CAAC,EACjDwE,eAAe,GAAG,KAAK;QAE3B,IAAI7tJ,EAAE,CAAC8/B,WAAW,IAAI,UAAU,IAAI,CAAC1/B,MAAM,CAAC2wC,oBAAoB,EAAE;UAC9D3wC,MAAM,CAAC0tJ,uBAAuB,GAAG,IAAI;QACzC;QACA,IAAK,CAAC9tJ,EAAE,UAAO,IAAIA,EAAE,CAACqpJ,QAAQ,KAAK,CAAC,IAAKrpJ,EAAE,CAAColB,KAAK,KAAKplB,EAAE,CAACqpJ,QAAQ,EAAE;UAC/DsE,UAAU,GAAG,KAAK;UAClBC,cAAc,GAAG,KAAK;QAC1B;MAEJ,CAAC,CAAC;MAEF,IAAI,CAACxtJ,MAAM,CAAC2wC,oBAAoB,IAAI88G,eAAe,EAC/CH,OAAO,GAAG,IAAI;MAElB,IAAIA,OAAO,KAAK,KAAK,EAAE;QACnBttJ,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,GAAG,EAAE;QACrC37B,MAAM,CAAC2tJ,qBAAqB,GAAG,IAAI;MACvC,CAAC,MAAM;QACH3tJ,MAAM,CAAC2tJ,qBAAqB,GAAG,KAAK;QAEpC,IAAI,CAAClnB,SAAS,EAAE;UACZ3iI,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAACm5I,WAAW,EAAE,UAAU7iJ,GAAG,EAAEtG,EAAE,EAAE;YACtD,IAAIguJ,UAAU,GAAG9tJ,OAAO,CAAC+F,IAAI,CAACjG,EAAE,CAAC;YAEjC,IAAI,CAACA,EAAE,CAAC6qI,aAAa,EACjB7qI,EAAE,CAAC6qI,aAAa,GAAG,CAAC;;YAExB;YACAmjB,UAAU,CAAC7oI,MAAM,GAAG,CAAC,CAAC,GAAG6oI,UAAU,CAAClrH,iBAAiB,GAAGkrH,UAAU,CAAC5oI,KAAK;YACxE4oI,UAAU,CAAC7vH,KAAK,GAAG,CAAC,CAAC,GAAGlE,IAAI,CAACD,GAAG,CAACg0H,UAAU,CAAClrH,iBAAiB,GAAGkrH,UAAU,CAAC/wH,YAAY,GAAGj9B,EAAE,CAAC6qI,aAAa,CAAC;YAC3GmjB,UAAU,CAAC5uH,SAAS,GAAG,CAAC,CAAC,GAAGnF,IAAI,CAACD,GAAG,CAACg0H,UAAU,CAAC3uH,qBAAqB,GAAG2uH,UAAU,CAAC/wH,YAAY,GAAGj9B,EAAE,CAAC6qI,aAAa,CAAC;YACnHmjB,UAAU,CAAClwH,GAAG,GAAG,CAAC,CAAC,GAAG99B,EAAE,CAAC89B,GAAG,GAAG7D,IAAI,CAACD,GAAG,CAACg0H,UAAU,CAAC5oI,KAAK,CAAC,GAAG6U,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAACgpJ,SAAS,CAAC;YAClFgF,UAAU,CAAC/xH,QAAQ,IAAI,CAAC,CAAC;YACzB+xH,UAAU,CAAC/wH,YAAY,IAAI,CAAC,CAAC,GAAGj9B,EAAE,CAAC6qI,aAAa;YAChDmjB,UAAU,CAAC3iB,mBAAmB,IAAI,CAAC,CAAC,GAAGrrI,EAAE,CAAC6qI,aAAa;YACvDmjB,UAAU,CAACnqJ,aAAa,IAAI,CAAC,CAAC;YAC9BmqJ,UAAU,CAAClvH,oBAAoB,IAAI,CAAC,CAAC;YACrCkvH,UAAU,CAACjvH,YAAY,IAAI,CAAC,CAAC;YAC7BivH,UAAU,CAAChvH,OAAO,GAAG,KAAK;YAC1BgvH,UAAU,CAAC9kB,IAAI,GAAG,CAAC,CAAC;YAEpB,IAAI+kB,MAAM,GAAG,IAAI;YACjB/pJ,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;cACxD,IAAIA,EAAE,CAACwD,EAAE,KAAKwqJ,UAAU,CAACxqJ,EAAE,EAAE;gBACzByqJ,MAAM,GAAG3nJ,GAAG;gBACZ,OAAO,KAAK;cAChB;YACJ,CAAC,CAAC;YACF,IAAI2nJ,MAAM,IAAI,IAAI,EAAE;cAChB7tJ,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAACrsB,MAAM,CAACu+I,MAAM,EAAE,CAAC,CAAC;YACtD;YAEA,IAAIjuJ,EAAE,UAAO,IAAIA,EAAE,CAAColB,KAAK,KAAK,CAAC,EAAE;cAC7BhlB,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAACt1B,IAAI,CAACunJ,UAAU,CAAC;YACrD;UACJ,CAAC,CAAC;QACN,CAAC,MAAM;UACH9yH,4FAAuB,CAACuuH,uBAAuB,CAACrpJ,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC0+I,YAAY,EAAE1+I,MAAM,CAAC4+I,UAAU,EAAE5jH,iEAAc,CAAC8yH,YAAY,CAAC;QAC5I;MACJ;IACJ;IAEA9tJ,MAAM,CAACw7I,iBAAiB,GAAG;MACvByC,UAAU,EAAE,CAAC;MACb8P,gBAAgB,EAAE,CAAC;MACnB7P,iBAAiB,EAAE,CAAC;MACpBC,mBAAmB,EAAE,CAAC;MACtB/B,mBAAmB,EAAE,CAAC;MACtBC,0BAA0B,EAAE;IAChC,CAAC;IAEDr8I,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,GAAG,CAAC,CAAC;IAC1C78I,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,GAAG,EAAE;IAE5C1xG,MAAM,CAACy0G,QAAQ,GAAG;MACdunC,IAAI,EAAE,CAAC;MACPqD,UAAU,EAAE,CAAC;MACbjC,WAAW,EAAE,CAAC;MACdC,aAAa,EAAE,CAAC;MAChBnB,aAAa,EAAE,CAAC;MAChBC,oBAAoB,EAAE;IAC1B,CAAC;IAED,IAAI,CAAC1V,SAAS,EAAE;MACZ;MACA,IAAIv6G,KAAK,GAAGlsB,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;;MAEjG;MACA;MACA,IAAM21H,KAAK,GAAG3tJ,aAAa,CAACg9E,SAAS,CAACr9E,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,CAACK,WAAW,CAAC;MAEjF99B,CAAC,CAACmC,IAAI,CAAC+nJ,KAAK,EAAE,UAAU9nJ,GAAG,EAAEtG,EAAE,EAAE;QAC7B,IAAIw7I,GAAG,GAAGx7I,EAAE,CAACihC,SAAS;QACtB,IAAIu6G,GAAG,CAAC/rI,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;UACzC+rI,GAAG,GAAG,oBAAoB;QAC9B;QAEA,QAAQA,GAAG;UACP,KAAK,SAAS;YACVp7I,MAAM,CAACw7I,iBAAiB,CAAC2C,mBAAmB,IAAIv+I,EAAE,CAACmlB,MAAM;YACzD;UACJ,KAAK,WAAW;UAChB,KAAK,oBAAoB;UACzB,KAAK,MAAM;YACP/kB,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,IAAIr+I,EAAE,CAACmlB,MAAM;YAChD;UACJ,KAAK,eAAe;YAChB/kB,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB,IAAIt+I,EAAE,CAACmlB,MAAM;YACvD;UACJ,KAAK,aAAa;YACd,IAAIkpI,QAAQ,GAAG/vI,WAAW,CAACsvH,yBAAyB,CAAC5tI,EAAE,CAAC;YACxDI,MAAM,CAACw7I,iBAAiB,CAACuS,gBAAgB,IAAIE,QAAQ;YACrDjuJ,MAAM,CAACw7I,iBAAiB,CAACuS,gBAAgB,GAAG1tJ,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAACw7I,iBAAiB,CAACuS,gBAAgB,EAAE,CAAC,CAAC;YAEjHzqE,cAAc,CAAC4qE,mBAAmB,CAACluJ,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,EAAEj9I,EAAE,CAACmkC,mBAAmB,EAAEnkC,EAAE,CAAC2rI,mBAAmB,EAAE0iB,QAAQ,EAAEruJ,EAAE,CAACs9F,mBAAmB,CAAC;YAE3J,IAAIt9F,EAAE,CAACqhC,SAAS,IAAIrhC,EAAE,CAACqhC,SAAS,CAACy7G,eAAe,KAAK,IAAI,EAAE;cACvD18I,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,CAACv5D,cAAc,CAAC6qE,UAAU,CAACvuJ,EAAE,CAACmkC,mBAAmB,EAAEnkC,EAAE,CAAC2rI,mBAAmB,CAAC,CAAC,CAACtqG,SAAS,GACtHrhC,EAAE,CAACqhC,SAAS;cAChBrhC,EAAE,CAACqhC,SAAS,CAAC07G,cAAc,GAAG,CAAC;YACnC;YAEA;UAEJ;YACI,IAAI,CAACz+H,WAAW,CAACunH,qBAAqB,CAAC7lI,EAAE,CAACihC,SAAS,CAAC,EAAE;cAElD,IAAIjhC,EAAE,CAAC+gC,kBAAkB,KAAK,mBAAmB,IAAI/gC,EAAE,CAACihC,SAAS,CAACxxB,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;gBACnGzP,EAAE,CAAC+gC,kBAAkB,GAAG/gC,EAAE,CAACihC,SAAS,CAACjgB,MAAM,CAAC,oBAAoB,CAACxa,MAAM,CAAC;cAC5E;;cAEA;cACA,IAAGxG,EAAE,CAACihC,SAAS,IAAI,aAAa,EAAC;gBAC7B;cACJ;;cAEA;cACA,IAAMsqC,EAAE,GAAG;gBACPm4E,SAAS,EAAE1jJ,EAAE,CAACihC,SAAS;gBACvButH,iBAAiB,EAAExuJ,EAAE,CAACkhC,eAAe;gBACrC27G,gBAAgB,EAAE,CAAC;gBACnBh4H,MAAM,EAAE,CAAC;gBACTja,EAAE,EAAE5K,EAAE,CAACwD;cACX,CAAC;cAED,IAAIxD,EAAE,CAACqhC,SAAS,IAAIrhC,EAAE,CAACqhC,SAAS,CAACy7G,eAAe,KAAK,IAAI,EAAE;gBACvDvxE,EAAE,CAAClqC,SAAS,GAAGrhC,EAAE,CAACqhC,SAAS;gBAC3BkqC,EAAE,CAAClqC,SAAS,CAAC07G,cAAc,GAAG,CAAC;cACnC;cAEA38I,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,CAACrrG,IAAI,CAAC8kE,EAAE,CAAC;cAChD,IAAI8iF,QAAQ,GAAG/vI,WAAW,CAACsvH,yBAAyB,CAAC5tI,EAAE,CAAC;cACxDurE,EAAE,CAACsxE,gBAAgB,GAAGp8I,aAAa,CAAC6uB,SAAS,CAAC++H,QAAQ,EAAE,CAAC,CAAC;YAC9D;YACA;QACR;MACJ,CAAC,CAAC;MAEF,IAAII,WAAW,GAAG,KAAK;MACvBruJ,MAAM,CAAC4P,WAAW,CAACy4I,uBAAuB,GAAG,CAAC;MAC9C,IAAI,CAACgF,gBAAgB,EAAE;QACnB,IAAI74C,OAAO,GAAG,CAACx0G,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAACy6B,cAAc,GAAGzqJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,GAAGliC,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAACy6B,cAAc;QAEnI,IAAIj2C,OAAO,IAAIA,OAAO,CAACpuG,MAAM,GAAG,CAAC,EAAE;UAC/B,IAAImnJ,UAAU,EACVC,cAAc,GAAG,IAAI,CAAC,KAEtBA,cAAc,GAAG,KAAK;UAE1BD,UAAU,GAAG,KAAK;UAClBzpJ,CAAC,CAACmC,IAAI,CAACuuG,OAAO,EAAE,UAAUi0C,KAAK,EAAEzN,GAAG,EAAE;YAClC,IAAMsT,SAAS,GAAG7F,KAAK;YAEvB,IAAIzE,UAAU,GAAG,KAAK;YACtBlgJ,CAAC,CAACmC,IAAI,CAAC+0I,GAAG,CAACnkH,KAAK,EAAE,UAAU03H,GAAG,EAAEntD,CAAC,EAAE;cAChC,IAAIA,CAAC,CAACltE,QAAQ,GAAG,CAAC,EAAE;gBAChB8vH,UAAU,GAAG,IAAI;gBACjBqK,WAAW,GAAG,IAAI;cACtB;YACJ,CAAC,CAAC;YAEFvqJ,CAAC,CAACmC,IAAI,CAAC+0I,GAAG,CAACnkH,KAAK,EAAE,UAAU03H,GAAG,EAAEntD,CAAC,EAAE;cAChC,IAAIA,CAAC,CAAC1+F,IAAI,IAAI,UAAU,EAAE;gBACtB1C,MAAM,CAAC4P,WAAW,CAACy4I,uBAAuB,IAAIhoJ,aAAa,CAAC6uB,SAAS,CAACkyE,CAAC,CAACltE,QAAQ,GAAGktE,CAAC,CAACmpC,YAAY,EAAE,CAAC,CAAC;cACzG;YACJ,CAAC,CAAC;UACN,CAAC,CAAC;QACN;MACJ;MAEAjnD,cAAc,CAACkrE,oBAAoB,CAACxuJ,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,CAAC;MAE1E,IAAI0Q,UAAU,IAAIvtJ,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC3pG,YAAY,IAAIh9B,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC3pG,YAAY,KAAK,CAAC,EAAE;QAEtH;QACA9Q,KAAK,IAAI7rB,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC3pG,YAAY,EAAE,CAAC,CAAC;QACnFh9B,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB,GAAGv5I,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC3pG,YAAY,EAAE,CAAC,CAAC;MACtH,CAAC,MAAM;QACHh9B,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB,GAAG,CAAC;QACzC55I,MAAM,CAAC4P,WAAW,CAACotB,YAAY,GAAG,CAAC;MACvC;MAEA,IAAIwwH,cAAc,IAAI,CAACD,UAAU,EAAE;QAE/B;;QAEA,IAAIc,WAAW,IAAI,KAAK,EAAE;UACtB;UACA,IAAII,cAAc,GAAGzuJ,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,CAACG,SAAS;UAE7D,IAAIxV,KAAK,IAAIuiI,cAAc,EAAE;YACzBzuJ,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB,GAAG6U,cAAc,GAAGviI,KAAK;YAC9DA,KAAK,GAAGuiI,cAAc;UAC1B;QACJ,CAAC,MACI;UACD,IAAIC,iBAAiB,GAAGruJ,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC4P,WAAW,CAACy4I,uBAAuB,EAAE,CAAC,CAAC;UAC9F,IAAIroJ,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC3pG,YAAY,IAAIh9B,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC3pG,YAAY,KAAK,CAAC,EAAE;YACxG0xH,iBAAiB,IAAIruJ,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC3pG,YAAY,EAAE,CAAC,CAAC;YAC/F0xH,iBAAiB,GAAGruJ,aAAa,CAAC6uB,SAAS,CAACw/H,iBAAiB,EAAE,CAAC,CAAC;UACrE;UACA1uJ,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB,GAAG8U,iBAAiB;UACzDxiI,KAAK,IAAIwiI,iBAAiB;QAC9B;MACJ;MAEA,IAAIC,UAAU,GAAGtuJ,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC6kJ,gBAAgB,CAAC7kJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;MACxG,IAAI4+B,SAAS,GAAGvuJ,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC2kJ,gBAAgB,CAAC3kJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;MACvG,IAAIhwH,MAAM,CAAC6uJ,sBAAsB,CAAC,CAAC,KAAK,IAAI,KACpCF,UAAU,GAAGC,SAAS,IAAIA,SAAS,IAAI,CAAC,CAAC,EAAE;QAC/C5uJ,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB,GAAGl+I,MAAM,CAAC8uJ,oBAAoB,CAAC,CAAC;QAC1E9uJ,MAAM,CAACw7I,iBAAiB,CAAC2C,mBAAmB,GAAGn+I,MAAM,CAAC8uJ,oBAAoB,CAAC,CAAC;MAChF,CAAC,MACI;QACD9uJ,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB,GAAGhyH,KAAK,GAAGlsB,MAAM,CAACotJ,iBAAiB,CAAC,CAAC;QAC/EptJ,MAAM,CAACw7I,iBAAiB,CAAC2C,mBAAmB,GAAGjyH,KAAK,GAAGlsB,MAAM,CAACotJ,iBAAiB,CAAC,CAAC;MACrF;MACA;MACAptJ,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,GAAGj+I,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB;MAEhF,IAAI6Q,0BAA0B,GAAG7iI,KAAK,GAAGlsB,MAAM,CAACotJ,iBAAiB,CAAC,CAAC;MAEnE,IAAIptJ,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,GAAG8Q,0BAA0B,EAChE/uJ,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,GAAG8Q,0BAA0B;MACpE,IAAI/uJ,MAAM,CAACw7I,iBAAiB,CAACuS,gBAAgB,GAAGgB,0BAA0B,EACtE/uJ,MAAM,CAACw7I,iBAAiB,CAACuS,gBAAgB,GAAGgB,0BAA0B;MAE1E/uJ,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,CAACo6G,aAAa,GAAGoT,0BAA0B;MAEzE/uJ,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,GAAG59I,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,EAAE,CAAC,CAAC;MACrGj+I,MAAM,CAACw7I,iBAAiB,CAACuS,gBAAgB,GAAG1tJ,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAACw7I,iBAAiB,CAACuS,gBAAgB,EAAE,CAAC,CAAC;MACjH/tJ,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB,GAAG79I,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB,EAAE,CAAC,CAAC;MACnHl+I,MAAM,CAACw7I,iBAAiB,CAAC2C,mBAAmB,GAAG99I,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAACw7I,iBAAiB,CAAC2C,mBAAmB,EAAE,CAAC,CAAC;MAEvHn+I,MAAM,CAAC4P,WAAW,CAAC45I,aAAa,GAAGxpJ,MAAM,CAACypJ,gBAAgB,CAAC,CAAC;MAC5DvrI,WAAW,CAACq+H,sBAAsB,CAACv8I,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,EAAEvhC,MAAM,CAACw7I,iBAAiB,CAAC;MAC5Ft9H,WAAW,CAACo9H,sBAAsB,CAACt7I,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,EAAEvhC,MAAM,CAACw7I,iBAAiB,EAAEx7I,MAAM,CAACy0G,QAAQ,CAAC;IACjH,CAAC,MAAM;MAEH,IAAG,CAACz0G,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,EAAC;QAC/BvhC,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,GACtB;UACIC,cAAc,EAAE,CAAC;UAAE;UACnBC,cAAc,EAAE,CAAC;UACjBC,SAAS,EAAE,CAAC;UACZC,cAAc,EAAE,CAAC;UACjBC,WAAW,EAAE,CAAC,CAAC;UACfC,kBAAkB,EAAE,CAAC,CAAC;QAC1B,CAAC;MACb;MAGA/G,4FAAuB,CAACmkH,uBAAuB,CAACj/I,MAAM,CAAC4P,WAAW,EAAE;QAChE8uI,YAAY,EAAE1+I,MAAM,CAAC0+I,YAAY;QACjClD,iBAAiB,EAAEx7I,MAAM,CAACw7I,iBAAiB;QAC3C6R,gBAAgB,EAAEA,gBAAgB;QAClCE,UAAU,EAAEA,UAAU;QACtBC,cAAc,EAAEA,cAAc;QAC9B7O,gBAAgB,EAAE3+I,MAAM,CAAC2+I,gBAAgB;QACzClqC,QAAQ,EAAEz0G,MAAM,CAACy0G,QAAQ;QACzBmqC,UAAU,EAAE5+I,MAAM,CAAC4+I;MACvB,CAAC,EAAE5jH,iEAAc,CAAClC,QAAQ,CAAC;IAC/B;EACJ,CAAC;EAGD94B,MAAM,CAACosI,WAAW,GAAGluH,WAAW,CAACkuH,WAAW;EAE5CpsI,MAAM,CAACypJ,gBAAgB,GAAG,YAAY;IAClC,IAAIxmH,GAAG,GAAG,CAAC;IACX,IAAIjjC,MAAM,CAAC4P,WAAW,CAACm5I,WAAW,EAAE;MAChCjlJ,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAACm5I,WAAW,EAAE,UAAU7iJ,GAAG,EAAEtG,EAAE,EAAE;QACtD,IAAIA,EAAE,CAACqpJ,QAAQ,GAAG,CAAC,EAAE;UACjBhmH,GAAG,IAAI5iC,aAAa,CAAC6uB,SAAS,CAACtvB,EAAE,CAACqpJ,QAAQ,GAAIrpJ,EAAE,CAACq/B,qBAAsB,EAAE,CAAC,CAAC;QAC/E;MACJ,CAAC,CAAC;IACN;IAEA,IAAIouD,GAAG,GAAG,CAAC;IACX,IAAIrtF,MAAM,CAAC4P,WAAW,EAAE;MACpB9L,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAACm5I,WAAW,EAAE,UAAU7iJ,GAAG,EAAEtG,EAAE,EAAE;QACtD,IAAIA,EAAE,CAACqpJ,QAAQ,GAAG,CAAC,EAAE;UACjB57D,GAAG,IAAI9xD,YAAY,CAAC37B,EAAE,CAACm/B,KAAK,EAAEn/B,EAAE,CAACq/B,qBAAqB,GAAGr/B,EAAE,CAACqpJ,QAAQ,EAAEjpJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,CAAC;QAChH;MACJ,CAAC,CAAC;IACN;IACA,IAAI22H,OAAO,GAAG3hE,GAAG;IACjBA,GAAG,GAAIrtF,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,GAAG,CAAC,GAAG22H,OAAQ;IAE3D,OAAO/rH,GAAG,GAAGoqD,GAAG;EACpB,CAAC;EAED,IAAIi/C,iBAAiB,GAAGpuH,WAAW,CAACouH,iBAAiB;EAErDtsI,MAAM,CAACohC,QAAQ,GAAG,UAAUt3B,IAAI,EAAE8/H,YAAY,EAAE4C,2BAA2B,EAAE;IACzE,OAAOtuH,WAAW,CAACkjB,QAAQ,CAACt3B,IAAI,EAAE8/H,YAAY,EAAE4C,2BAA2B,CAAC;EAChF,CAAC;EAEDxsI,MAAM,CAACivJ,YAAY,GAAG,YAAY;IAC9BjvJ,MAAM,CAAC4+I,UAAU,GAAG,SAAS;IAC7B5+I,MAAM,CAAC4P,WAAW,GAAG9P,OAAO,CAAC+F,IAAI,CAAC7F,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC;IACpE,IAAIF,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;;IAEnE;IACA,OAAO5P,MAAM,CAAC4P,WAAW,CAACktB,cAAc;IACxC,OAAO98B,MAAM,CAAC4P,WAAW,CAACszF,gBAAgB;IAC1C,OAAOljG,MAAM,CAAC4P,WAAW,CAACuzF,oBAAoB;IAE9C,IAAI,CAACsjC,SAAS,EAAE;MACZzmI,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB,GAAG,CAAC;MACzC55I,MAAM,CAAC4P,WAAW,CAACy4I,uBAAuB,GAAG,CAAC;MAC9CvkJ,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAE4D,IAAI,EAAE;QAC1DA,IAAI,CAACk1B,SAAS,GAAGl1B,IAAI,CAACk1B,SAAS;MACnC,CAAC,CAAC;IACN;IAEAh/B,MAAM,CAACgoJ,WAAW,GAAG,KAAK;IAC1BhoJ,MAAM,CAACspJ,kBAAkB,GAAG,KAAK;IACjCtpJ,MAAM,CAAC2tJ,qBAAqB,GAAG,KAAK;IACpC3tJ,MAAM,CAAC0tJ,uBAAuB,GAAG,KAAK;EAC1C,CAAC;EAGD1tJ,MAAM,CAACkvJ,kBAAkB,GAAG,YAAY;IACpCC,wBAAwB,CAAC,CAAC;EAC9B,CAAC;EAED,SAASA,wBAAwBA,CAAA,EAAG;IAChC,IAAIthI,cAAc,GAAG/pB,CAAC,CAAC,8BAA8B,CAAC;IACtDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,EAAE,YAAY,CAAE,CAAC,CAAC;EAC7D;EAEA,SAAS++H,8BAA8BA,CAAA,EAAG;IACtC9oJ,CAAC,CAAC,mBAAmB,CAAC,CAACiE,WAAW,CAAC,OAAO,CAAC;IAC3C,IAAI8lB,cAAc,GAAG/pB,CAAC,CAAC,kCAAkC,CAAC;IAC1D,IAAI2iI,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE,IAAI,CAAC62H,SAAS,IAAIzmI,MAAM,CAAC4P,WAAW,CAAC82H,cAAc,IAAIjtH,MAAM,CAACzZ,MAAM,CAAC4P,WAAW,CAAC82H,cAAc,CAAC,GAAG,CAAC,EAAE;MAClGvmI,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,uEAAuE,CAAC,CAAC;MACzH;IACJ;IAEAnB,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,EAAE,YAAY;MACjD7tB,MAAM,CAAC8pJ,gBAAgB,GAAGngI,KAAK,CAACuE,OAAO,CAAC,CAAC,CAAC,CAAC;MAC3CluB,MAAM,CAAC+pJ,iBAAiB,GAAGpgI,KAAK,CAACuE,OAAO,CAAC,CAAC;MAE1C1tB,QAAQ,CAAC,YAAY;QACjBP,UAAU,CAAC+K,UAAU,CAAC,iBAAiB,CAAC;MAC5C,CAAC,CAAC;MAEFxK,QAAQ,CAAC,YAAY;QACjBkgJ,kBAAkB,CAACr0E,cAAc,CAAC,0BAA0B,EAAE,mBAAmB,EAAE,IAAI,CAAC;MAC5F,CAAC,EAAE,CAAC,CAAC;IACT,CAAC,CAAC;EACN;EAEArsE,MAAM,CAACovJ,8BAA8B,GAAG,YAAY;IAChDpvJ,MAAM,CAAC4+I,UAAU,GAAG,IAAI;IAExB,IAAI/wH,cAAc,GAAG/pB,CAAC,CAAC,kCAAkC,CAAC;IAC1DzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAACqvJ,yBAAyB,GAAG,YAAY;IAC3CrvJ,MAAM,CAAC4+I,UAAU,GAAG,QAAQ;IAE5B,IAAI/wH,cAAc,GAAG/pB,CAAC,CAAC,8BAA8B,CAAC;IACtDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED,SAASyhI,wBAAwBA,CAAC10I,GAAG,EAAE;IACnC;IACA;;IAEA,IAAI,CAACA,GAAG,EAAE;MACN,IAAIC,OAAO,GAAGpa,cAAc,CAACe,SAAS,CAAC,wBAAwB,CAAC,GAAG,OAAO,GAAGf,cAAc,CAACe,SAAS,CAAC,WAAW,CAAC;MAClHsC,CAAC,CAAC,kCAAkC,CAAC,CAAC2b,IAAI,CAAC5E,OAAO,CAAC;IACvD,CAAC,MACI;MACD/W,CAAC,CAAC,kCAAkC,CAAC,CAAC2b,IAAI,CAAC7E,GAAG,CAAC;IACnD;IAEA5a,MAAM,CAACgoJ,WAAW,GAAG,KAAK;IAC1BhoJ,MAAM,CAAC4P,WAAW,GAAG,CAAC,CAAC;IACvB5P,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB,GAAG,CAAC;IACzC55I,MAAM,CAAC4P,WAAW,CAACy4I,uBAAuB,GAAG,CAAC;IAC9CroJ,MAAM,CAACovJ,8BAA8B,CAAC,CAAC;IACvC,IAAIvhI,cAAc,GAAG/pB,CAAC,CAAC,8BAA8B,CAAC;IACtDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C;EAEA7tB,MAAM,CAACuvJ,yBAAyB,GAAG,YAAY;IAC3C,IAAI1hI,cAAc,GAAG/pB,CAAC,CAAC,8BAA8B,CAAC;IACtDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;IACzC7tB,MAAM,CAAC0+I,YAAY,GAAG,IAAI;IAC1B1+I,MAAM,CAAC4P,WAAW,GAAG,IAAI;IACzB5P,MAAM,CAACkkJ,iBAAiB,CAAC,CAAC;EAC9B,CAAC;EAEDlkJ,MAAM,CAACwvJ,YAAY,GAAG,YAAY;IAC9B3lI,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;EAC3B,CAAC;EAED9sB,MAAM,CAACyvJ,UAAU,GAAG,YAAY;IAC5B,IAAIxsH,GAAG,GAAG,CAAC;IACX,IAAIjjC,MAAM,CAACy0G,QAAQ,EAAE;MACjB,IAAIz0G,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,EACpB/4G,GAAG,IAAIjjC,MAAM,CAACy0G,QAAQ,CAACunC,IAAI;MAC/B;MACA/4G,GAAG,IAAIqgD,cAAc,CAACg8D,kBAAkB,CAACt/I,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,EAAE,KAAK,CAAC;MAEtF,IAAI78I,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW,EAC3Bn6G,GAAG,IAAIjjC,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW;MAEtC,IAAIp9I,MAAM,CAACy0G,QAAQ,CAAC4oC,aAAa,EAC7Bp6G,GAAG,IAAIjjC,MAAM,CAACy0G,QAAQ,CAAC4oC,aAAa;IAC5C;IAEA,IAAI,CAAC,CAACr9I,MAAM,CAACw7I,iBAAiB,IAAI,CAAC,CAACx7I,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,IACvE1xG,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,CAACtrG,MAAM,GAAG,CAAC,EAAE;MACpDtG,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,EAAE,UAAUxuE,CAAC,EAAE;QAClED,GAAG,IAAIC,CAAC,CAACze,MAAM;;QAEf;QACA;MAEJ,CAAC,CAAC;IACN;IAEA,OAAOpkB,aAAa,CAAC6uB,SAAS,CAAC+T,GAAG,EAAE,CAAC,CAAC;EAC1C,CAAC;EAEDjjC,MAAM,CAACw+I,oBAAoB,GAAG,YAAY;IACtCx+I,MAAM,CAAC0vJ,6BAA6B,GAAG,KAAK;IAC5C1vJ,MAAM,CAAC2vJ,kCAAkC,GAAG,KAAK;EACrD,CAAC;EAED,SAASC,OAAOA,CAACC,aAAa,EAAEC,UAAU,EAAE;IACxC,IAAIrpB,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE,IAAI6U,MAAM,GAAGpkB,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAACkrI,aAAa,CAAC,EAAE,CAAC,CAAC;IAElE,IAAIE,aAAa,GAAG1vJ,aAAa,CAACy1E,SAAS,CAACrxD,MAAM,CAAC;IAEnD,IAAIurI,YAAY,GAAG3vJ,aAAa,CAAC6uB,SAAS,CAAC6gI,aAAa,GAAGtrI,MAAM,EAAE,CAAC,CAAC;IACrE;IAChB;IACgB,IAAIurI,YAAY,IAAIF,UAAU,KAAK,IAAI,EAAE;MACrC9vJ,MAAM,CAAC4P,WAAW,CAACotB,YAAY,GAAG,CAACypG,SAAS,GAAGupB,YAAY,GAAG,CAAC,CAAC,GAAGA,YAAY;IACnF;IAEA,IAAIF,UAAU,KAAK,IAAI,EAAE;MACrBG,kBAAkB,CAACjwJ,MAAM,CAACwsC,8BAA8B,EAAEujH,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC;IAClG;EACJ;EAEA/vJ,MAAM,CAACkwJ,SAAS,GAAG,UAAUntH,GAAG,EAAE;IAC9B,IAAIotH,YAAY,GAAGnwJ,MAAM,CAACqjJ,sBAAsB,CAACtgH,GAAG,CAACugH,SAAS,CAAC;IAC/D,IAAIrgH,GAAG,GAAGF,GAAG,CAACte,MAAM;IACpB,IAAI2rI,EAAE,GAAG,IAAI;IACb,IAAI,CAAC,CAACrtH,GAAG,CAAC9B,SAAS,EAAE;MACjB,IAAIjhC,MAAM,CAACq6E,aAAa,KAAK,QAAQ,IAAIt3C,GAAG,CAAC9B,SAAS,CAAC07G,cAAc,IAAI55G,GAAG,CAAC9B,SAAS,CAACy7G,eAAe,KAAK,IAAI,EAAE;QAC7Gz5G,GAAG,IAAIF,GAAG,CAAC9B,SAAS,CAAC07G,cAAc;MACvC;MAEAyT,EAAE,GAAGrtH,GAAG,CAAC9B,SAAS;MAClBovH,oBAAoB,CAACD,EAAE,EAAEntH,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;MACrDmtH,EAAE,CAACE,gBAAgB,GAAG,IAAI;IAC9B;IAEA,IAAI5vH,OAAO,GAAGuvH,kBAAkB,CAACE,YAAY,CAAC5xI,kBAAkB,EAAE0kB,GAAG,EAAEF,GAAG,CAACqrH,iBAAiB,EAAE,IAAI,EAAErrH,GAAG,CAACugH,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE8M,EAAE,CAAC;EAClJ,CAAC;EAGDpwJ,MAAM,CAACs7F,cAAc,GAAG,UAAUC,IAAI,EAAE,CAAE,CAAC;EAE3C,SAASg1D,aAAaA,CAACnuH,MAAM,EAAE;IAE3B,IAAIh7B,KAAK,GAAGpH,MAAM;IAClB,IAAIw0G,OAAO,GAAG,CAAC,CAAC;IAChBA,OAAO,CAACpyE,MAAM,CAAC53B,EAAE,CAAC,GAAG43B,MAAM;IAE3B,IAAI12B,OAAO,GAAG43E,cAAc,CAAClhD,MAAM,CAACpiC,MAAM,CAAC4P,WAAW,EAAE4kG,OAAO,EAAEx0G,MAAM,EACnE;MACIs4B,WAAW,EAAEt4B,MAAM,CAAC4P,WAAW,CAAC8sB,gBAAgB;MAChD8zH,eAAe,EAAE,SAAjBA,eAAeA,CAAYj1D,IAAI,EAAErzF,IAAI,EAAEg7B,CAAC,EAAE;QACtC,OAAOrrB,YAAY,CAACimG,uBAAuB,CAAC12G,KAAK,EAAEm0F,IAAI,EAAErzF,IAAI,EAAEg7B,CAAC,CAAC;MACrE,CAAC;MACD5/B,QAAQ,EAAEpD,aAAa,CAACqD;IAC5B,CAAC,CAAC;IAEN,OAAOmI,OAAO,CAAC1H,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC/B,IAAIzJ,EAAE,GAAGyJ,GAAG,CAAC,CAAC,CAAC;MAEf,IAAIzJ,EAAE,CAAC6nB,MAAM,EAAE;QAEX,IAAI,CAAC,CAAC7nB,EAAE,CAACqhC,SAAS,EAAE;UAChBovH,oBAAoB,CAACzwJ,EAAE,CAACqhC,SAAS,EAAErhC,EAAE,CAAC6kB,MAAM,EAAE7kB,EAAE,CAACmkC,mBAAmB,EAAEnkC,EAAE,CAAC2rI,mBAAmB,EAAE3rI,EAAE,CAACisI,uBAAuB,CAAC;QAE7H;QAEAokB,kBAAkB,CAAC7oJ,KAAK,CAAC+oC,4BAA4B,EAAEvwC,EAAE,CAAC6kB,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAChG7kB,EAAE,CAACmkC,mBAAmB,EAAEnkC,EAAE,CAAC2rI,mBAAmB,EAAE3rI,EAAE,CAACisI,uBAAuB,EAAEjsI,EAAE,CAACs9F,mBAAmB,EAAEt9F,EAAE,CAACqhC,SAAS,CAAC;QAErH,OAAOwvH,oBAAoB,CAAC,CAAC;MACjC,CAAC,MACI;QACD,IAAIzyI,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC5L,EAAE,CAACib,OAAO,EACXjb,EAAE,CAACib,OAAO,GAAGpa,cAAc,CAACe,SAAS,CAAC,6BAA6B,CAAC,GAAG5B,EAAE,CAAC8wJ,QAAQ,GAAG,GAAG,GAAG9wJ,EAAE,CAAC+wJ,OAAO;QACzG3wJ,MAAM,CAAC04B,YAAY,IAAI,OAAO,GAAG94B,EAAE,CAACib,OAAO;;QAE3C;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACAmD,SAAS,CAACvS,OAAO,CAAC,KAAK,CAAC;QACxB,OAAOuS,SAAS,CAACtS,OAAO;;QAExB;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;MACJ;IACJ,CAAC,CAAC;EACN;EAEA,SAASklJ,eAAeA,CAACnsI,MAAM,EAAE;IAC7BwrI,kBAAkB,CAACjwJ,MAAM,CAACkwC,8BAA8B,EAAEzrB,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,CAAC;EAC7G;EAEA,SAASosI,gBAAgBA,CAACpsI,MAAM,EAAE;IAC9BwrI,kBAAkB,CAACjwJ,MAAM,CAACswC,yBAAyB,EAAE7rB,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,CAAC;EACnG;EAEA,IAAIuoH,eAAe,GAAG9uH,WAAW,CAAC8uH,eAAe;EAEjDhtI,MAAM,CAAC4tI,kBAAkB,GAAG1vH,WAAW,CAAC0vH,kBAAkB;;EAG1D;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;;EAEA,SAAS6iB,oBAAoBA,CAAA,EAAG;IAC5BzwJ,MAAM,CAAC4P,WAAW,CAACkyB,kBAAkB,GAAG,IAAI;IAC5C,IAAG9hC,MAAM,CAAC2+I,gBAAgB,KAAG,UAAU,EACnC3+I,MAAM,CAAC4P,WAAW,CAACu6H,aAAa,GAAGnqI,MAAM,CAAC0+I,YAAY,CAAC3qD,OAAO;IAElE,IAAI0yC,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE,IAAI62H,SAAS,EAAE;MACX,IAAIl8E,IAAI,GAAG;QACPixF,iBAAiB,EAAEx7I,MAAM,CAACw7I,iBAAiB;QAC3C/mC,QAAQ,EAAEz0G,MAAM,CAACy0G,QAAQ;QACzBiqC,YAAY,EAAE1+I,MAAM,CAAC0+I,YAAY;QACjCC,gBAAgB,EAAE3+I,MAAM,CAAC2+I,gBAAgB;QACzCC,UAAU,EAAE5+I,MAAM,CAAC4+I;MACvB,CAAC;MAED9jH,4FAAuB,CAACmkH,uBAAuB,CAACj/I,MAAM,CAAC4P,WAAW,EAAE26C,IAAI,EAAEvvB,iEAAc,CAAC+F,OAAO,CAAC;IACrG;IAEA,IAAG/gC,MAAM,CAAC0+I,YAAY,EAClB1+I,MAAM,CAAC4P,WAAW,CAAC4oB,cAAc,GAAGx4B,MAAM,CAAC0+I,YAAY,CAAClmH,cAAc;IAE1E,IAAIL,iBAAiB,GAAGja,WAAW,CAACka,wBAAwB,CAACp4B,MAAM,CAAC4P,WAAW,EAAE,QAAQ,EAAE5P,MAAM,CAAC2+I,gBAAgB,KAAK,UAAU,EAAE3+I,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,EAAEr4B,MAAM,CAAC+pJ,iBAAiB,CAAC;IAEnM,OAAO7rI,WAAW,CAACua,QAAQ,CAACN,iBAAiB,EAAEn4B,MAAM,CAAC4P,WAAW,CAAC;EACtE;EAEA,SAASkhJ,aAAaA,CAAA,EAAG;IACrB;IACA9wJ,MAAM,CAAC4P,WAAW,CAACkyB,kBAAkB,GAAG,IAAI;IAE5C,IAAG9hC,MAAM,CAAC2+I,gBAAgB,KAAG,UAAU,EACnC3+I,MAAM,CAAC4P,WAAW,CAACu6H,aAAa,GAAGnqI,MAAM,CAAC0+I,YAAY,CAAC3qD,OAAO;IAElE/zF,MAAM,CAAC+wJ,eAAe,GAAG,IAAI;IAC7B,IAAItqB,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE,IAAI62H,SAAS,EAAE;MACX,IAAIl8E,IAAI,GAAG;QACPixF,iBAAiB,EAAEx7I,MAAM,CAACw7I,iBAAiB;QAC3C/mC,QAAQ,EAAEz0G,MAAM,CAACy0G,QAAQ;QACzBiqC,YAAY,EAAE1+I,MAAM,CAAC0+I,YAAY;QACjCC,gBAAgB,EAAE3+I,MAAM,CAAC2+I,gBAAgB;QACzCC,UAAU,EAAE5+I,MAAM,CAAC4+I;MACvB,CAAC;MAED9jH,4FAAuB,CAACmkH,uBAAuB,CAACj/I,MAAM,CAAC4P,WAAW,EAAE26C,IAAI,EAAEvvB,iEAAc,CAAC+F,OAAO,CAAC;MAEjG/gC,MAAM,CAAC+wJ,eAAe,GAAGr5H,IAAI,CAACC,SAAS,CAAC33B,MAAM,CAAC4P,WAAW,CAAC;IAC/D;;IAGD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEC5P,MAAM,CAAC4P,WAAW,CAAC4oB,cAAc,GAAG,KAAK;IAC1C;;IAEC,IAAIL,iBAAiB,GAAGja,WAAW,CAACka,wBAAwB,CAACp4B,MAAM,CAAC4P,WAAW,EAAE,QAAQ,EAAE5P,MAAM,CAAC2+I,gBAAgB,KAAK,UAAU,EAAE3+I,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,EAAEr4B,MAAM,CAAC+pJ,iBAAiB,CAAC;IACnM,IAAIzmI,IAAI,GAAGtjB,MAAM;IAEjB,OAAOke,WAAW,CAACua,QAAQ,CAACN,iBAAiB,EAAEn4B,MAAM,CAAC4P,WAAW,CAAC,CAC7D5L,IAAI,CAAC,UAAUC,IAAI,EAAE;MAClB,IAAIA,IAAI,IAAIA,IAAI,CAACotB,OAAO,KAAK,KAAK,EAAE;QAChC,OAAOhxB,aAAa,CAAC83C,aAAa,CAACl0C,IAAI,CAAC4W,OAAO,IAAI5W,IAAI,CAAC6iJ,OAAO,CAAC;MACpE,CAAC,MAAM;QACH,OAAO9mJ,MAAM,CAACkkJ,iBAAiB,CAAC,CAAC;MACrC;IACJ,CAAC,CAAC,CACDlgJ,IAAI,CAAC,YAAY;MACdF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbP,CAAC,CAAC,4BAA4B,CAAC,CAACktJ,OAAO,CAAC,CAAC;MAEzC,IAAIp2I,GAAG,GAAG,IAAI;MACd,IAAI,CAAC,CAAC0I,IAAI,CAACoV,YAAY,EAAE;QACrB9d,GAAG,GAAGna,cAAc,CAACe,SAAS,CAAC,sCAAsC,CAAC,GAAG8hB,IAAI,CAACoV,YAAY;MAC9F;MAEA,IAAI,CAAC+tG,SAAS,EACVzmI,MAAM,CAAC+wJ,eAAe,GAAGr5H,IAAI,CAACC,SAAS,CAAC33B,MAAM,CAAC4P,WAAW,CAAC;MAE/D0/I,wBAAwB,CAAC10I,GAAG,CAAC;IACjC,CAAC,CAAC;IACN;IACA;IACA;IACA;IACA;IACA;EACJ;EAAC;EAED5a,MAAM,CAACymJ,YAAY,GAAG,UAAUtiJ,GAAG,EAAE8sJ,oBAAoB,EAAEC,UAAU,EAAE;IACnEptJ,CAAC,CAACO,SAAS,CAAC,CAAC;IACb,IAAIif,IAAI,GAAGtjB,MAAM;IACjB,IAAIE,aAAa,CAACmB,QAAQ,KAAK,KAAK,IAAK,CAAC,CAAC8C,GAAG,IAAIA,GAAG,CAAC4zC,MAAM,IAAI,CAAC,CAAE,EAAE;MACjE,IAAIm5G,UAAU,KAAK,IAAI,EACnB/sJ,GAAG,GAAG1D,cAAc,CAACe,SAAS,CAAC,mMAAmM,CAAC;MACvOrB,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,YAAY;QACpC,IAAI8sJ,oBAAoB,KAAK,IAAI,EAAE;UAC/B3tI,IAAI,CAAC8rI,8BAA8B,CAAC,CAAC;QACzC;MACJ,CAAC,CAAC;IACN,CAAC,MAAM;MACH;MACA;MACAjvJ,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,YAAY;QACpC,IAAI8sJ,oBAAoB,KAAK,IAAI,EAAE;UAC/B3tI,IAAI,CAAC8rI,8BAA8B,CAAC,CAAC;QACzC;MACJ,CAAC,CAAC;IACN;EACJ,CAAC;EAETpvJ,MAAM,CAACmxJ,0BAA0B,GAAG,YAAY;IAC5C,IAAI3hJ,CAAC,GAAG7O,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAClBgE,CAAC,CAAC/D,OAAO,CAAC,IAAI,CAAC;IACf,IAAIy3B,CAAC,GAAG1zB,CAAC,CAAC9D,OAAO;IAEjB,IAAI+6H,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE,IAAI,CAAC62H,SAAS,EAAE;MACZ;MACA;MACAvoH,WAAW,CAACw/H,yBAAyB,CAAC19I,MAAM,CAAC4P,WAAW,CAAC;MACzD;MACA;IACJ;IAEA5P,MAAM,CAACoxJ,mBAAmB,GAAG,EAAE;IAC/BpxJ,MAAM,CAAC2vJ,kCAAkC,GAAG,KAAK;IACjD,IAAI,CAAC3vJ,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAG,CAAC,IAAIh8I,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAGh8I,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,KAAKj+I,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,KAAK,CAAC,EAAE;MACxHh8I,MAAM,CAACoxJ,mBAAmB,CAAC/qJ,IAAI,CAAC5F,cAAc,CAACe,SAAS,CAAC,8CAA8C,CAAC,GAAGnB,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,EAAE,CAAC,CAAC,CAAC;MAC3Kj+I,MAAM,CAAC2vJ,kCAAkC,GAAG,IAAI;IACpD;IAEA,IAAI,CAAC,CAAC3vJ,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,EAAE;MAC3C5xG,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,EAAE,UAAU2/C,EAAE,EAAE;QACnE,IAAI,CAACA,EAAE,CAAC5sI,MAAM,GAAG,CAAC,IAAI4sI,EAAE,CAAC5sI,MAAM,GAAGpkB,aAAa,CAAC6uB,SAAS,CAACmiI,EAAE,CAAC5U,gBAAgB,EAAE,CAAC,CAAC,KAAK4U,EAAE,CAAC5sI,MAAM,KAAK,CAAC,EAAE;UACnGzkB,MAAM,CAACoxJ,mBAAmB,CAAC/qJ,IAAI,CAAC5F,cAAc,CAACe,SAAS,CAAC6vJ,EAAE,CAACjD,iBAAiB,GAAG,kCAAkC,CAAC,GAAG/tJ,aAAa,CAAC6uB,SAAS,CAACmiI,EAAE,CAAC5U,gBAAgB,EAAE,CAAC,CAAC,CAAC;UACtKz8I,MAAM,CAAC2vJ,kCAAkC,GAAG,IAAI;QACpD;MACJ,CAAC,CAAC;IACN;IAEA,IAAI2B,SAAS,GAAGhuE,cAAc,CAACiuE,mBAAmB,CAACvxJ,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,EAAE78I,MAAM,CAACoxJ,mBAAmB,CAAC;IACrH,IAAIE,SAAS,EACTtxJ,MAAM,CAAC2vJ,kCAAkC,GAAG,IAAI,CAAC,KAChD,IAAI,CAAC3vJ,MAAM,CAACy0G,QAAQ,CAAC4qC,UAAU,GAAG,CAAC,IAAIr/I,MAAM,CAACy0G,QAAQ,CAAC4qC,UAAU,GAAGr/I,MAAM,CAACw7I,iBAAiB,CAACuS,gBAAgB,KAAK/tJ,MAAM,CAACy0G,QAAQ,CAAC4qC,UAAU,KAAK,CAAC,EAAE;MACrJr/I,MAAM,CAACoxJ,mBAAmB,CAAC/qJ,IAAI,CAAC5F,cAAc,CAACe,SAAS,CAAC,qDAAqD,CAAC,GAAGnB,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAACw7I,iBAAiB,CAACuS,gBAAgB,EAAE,CAAC,CAAC,CAAC;MACxL/tJ,MAAM,CAAC2vJ,kCAAkC,GAAG,IAAI;IACpD;IAEA,IAAI,CAAC3vJ,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW,GAAG,CAAC,IAAIp9I,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW,GAAGp9I,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB,KAAKl+I,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW,KAAK,CAAC,EAAE;MACpJp9I,MAAM,CAACoxJ,mBAAmB,CAAC/qJ,IAAI,CAAC5F,cAAc,CAACe,SAAS,CAAC,sDAAsD,CAAC,GAAGnB,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB,EAAE,CAAC,CAAC,CAAC;MAC1Ll+I,MAAM,CAAC2vJ,kCAAkC,GAAG,IAAI;IACpD;IAEA,IAAI,CAAC3vJ,MAAM,CAACy0G,QAAQ,CAAC4oC,aAAa,GAAG,CAAC,IAAIr9I,MAAM,CAACy0G,QAAQ,CAAC4oC,aAAa,GAAGr9I,MAAM,CAACw7I,iBAAiB,CAAC2C,mBAAmB,KAAKn+I,MAAM,CAACy0G,QAAQ,CAAC4oC,aAAa,KAAK,CAAC,EAAE;MAC5Jr9I,MAAM,CAACoxJ,mBAAmB,CAAC/qJ,IAAI,CAAC5F,cAAc,CAACe,SAAS,CAAC,gDAAgD,CAAC,GAAGnB,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAACw7I,iBAAiB,CAAC2C,mBAAmB,EAAE,CAAC,CAAC,CAAC;MACtLn+I,MAAM,CAAC2vJ,kCAAkC,GAAG,IAAI;IACpD;IAEA,IAAI3vJ,MAAM,CAAC2vJ,kCAAkC,KAAK,KAAK,EAAE;MACrD,IAAI6B,iBAAiB,GAAGxxJ,MAAM,CAAC8+I,oBAAoB,CAAC,IAAI,CAAC;MACzD,IAAI2S,gBAAgB,GAAG,CAAC;MAExB,IAAI,CAAChrB,SAAS,EAAE;QACZgrB,gBAAgB,GAAGzxJ,MAAM,CAACyvJ,UAAU,CAAC,CAAC;MAC1C;MAEA,IAAIgC,gBAAgB,GAAGD,iBAAiB,IAAIC,gBAAgB,KAAK,CAAC,EAAE;QAChEzxJ,MAAM,CAACoxJ,mBAAmB,CAAC/qJ,IAAI,CAAC5F,cAAc,CAACe,SAAS,CAAC,oCAAoC,CAAC,GAAGwoB,OAAO,CAAC,UAAU,CAAC,CAAC3pB,aAAa,CAAC6uB,SAAS,CAACsiI,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC;QACpKxxJ,MAAM,CAAC2vJ,kCAAkC,GAAG,IAAI;MACpD;IACJ;IAEA,IAAI3vJ,MAAM,CAAC2vJ,kCAAkC,KAAK,KAAK,EAAE;MAErD3vJ,MAAM,CAAC4P,WAAW,CAAC2yB,cAAc,GAAGviC,MAAM,CAAC8pJ,gBAAgB,CAAC;;MAE5D,IAAI9pJ,MAAM,CAAC0+I,YAAY,CAACr8G,aAAa,IAAI,IAAI,EAAE;QAC3CriC,MAAM,CAAC4P,WAAW,CAACyyB,aAAa,GAAGriC,MAAM,CAAC0+I,YAAY,CAACr8G,aAAa;MACxE;MAEA,IAAMqvH,kBAAkB,GAAG,CAAC,EAAE1xJ,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAGh8I,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,CAAC;MACnF,IAAIwV,kBAAkB,EAAE;QACpBxuH,CAAC,GAAGA,CAAC,CAACl/B,IAAI,CAAC,YAAY;UACnB,OAAO6T,YAAY,CAACsY,cAAc,CAAC,CAAC,SAAM,CAAC,UAAUhsB,GAAG,EAAE;YACtDa,OAAO,CAACC,GAAG,CAACd,GAAG,CAAC;YAChB9D,aAAa,CAAC+D,SAAS,CAACD,GAAG,CAAC;UAChC,CAAC,CAAC,WAAQ,CAAC,YAAY;YACnB,OAAOnE,MAAM,CAAC2xJ,eAAe,CAAC,CAAC;UACnC,CAAC,CAAC;QACN,CAAC,CAAC;MACN,CAAC,MACI;QACDzuH,CAAC,GAAGA,CAAC,CAACl/B,IAAI,CAAC,YAAY;UAAE,OAAOhE,MAAM,CAAC2xJ,eAAe,CAAC,CAAC;QAAE,CAAC,CAAC;MAChE;IACJ;IAEA,OAAOzuH,CAAC,SAAM,CAAC,UAAU/+B,GAAG,EAAE;MAC1BnE,MAAM,CAACymJ,YAAY,CAACtiJ,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;IACxC,CAAC,CAAC;EACN,CAAC;EAEOnE,MAAM,CAAC2xJ,eAAe,GAAG,YAAY;IACjC,IAAIlrB,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IACnE5P,MAAM,CAAC4P,WAAW,CAACw6H,aAAa,GAAG,CAAC;IAEpC,IAAI56H,CAAC,GAAG7O,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAClBgE,CAAC,CAAC/D,OAAO,CAAC,IAAI,CAAC;IACf,IAAIy3B,CAAC,GAAG1zB,CAAC,CAAC9D,OAAO;IAEjBqkC,iBAAiB,CAAC,CAAC;IACnB,IAAI,CAAC02F,SAAS,EAAE;MACZ,IAAIzmI,MAAM,CAAC2+I,gBAAgB,KAAK,UAAU,EAAE;QACxC3+I,MAAM,CAAC4P,WAAW,CAACgiJ,eAAe,GAAG5kB,eAAe,CAAChtI,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAAC;QACtF;QACA37B,MAAM,CAAC4P,WAAW,CAACkgI,QAAQ,GAAG9vI,MAAM,CAACosI,WAAW,CAACpsI,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAAC;QAClF37B,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,GAAG/4B,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,CAAC;QACrG,IAAIr4B,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,GAAG,CAAC,EAC5B/4B,MAAM,CAAC4P,WAAW,CAAC6sB,kBAAkB,GAAG,CAACz8B,MAAM,CAAC4P,WAAW,CAAC6sB,kBAAkB;QAClFz8B,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,GAAG,EAAE;MACpC;IACJ;IAEA94B,MAAM,CAACqvJ,yBAAyB,CAAC,CAAC;IAClCrvJ,MAAM,CAAC04B,YAAY,GAAG,EAAE;IACxB50B,CAAC,CAACC,OAAO,CAAC,CAAC;;IAEX;IACA;IACA;IACA,IAAI/D,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAGh8I,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,EAAE;MACtD0T,OAAO,CAAC5vJ,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAGh8I,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,EAAE,KAAK,CAAC;IACxE;IAEA,IAAIl8I,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC8zB,gBAAgB,KAAK,IAAI,EAAE;MACpD,IAAI9jJ,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAG,CAAC,EAAE;QAC1Bh8I,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB,GAAGv5I,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC4P,WAAW,CAACotB,YAAY,EAAE,CAAC,CAAC;MACvG,CAAC,MACI;QACDh9B,MAAM,CAAC4P,WAAW,CAACotB,YAAY,GAAGh9B,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB;MAC3E;IACJ;IACA;;IAEA,IAAIiY,OAAO,GAAG,KAAK;IACnB;IACA,IAAI7xJ,MAAM,CAACy0G,QAAQ,CAAC4qC,UAAU,EAAE;MAC5Bv/I,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,EAAE,UAAU95G,GAAG,EAAE;QAClE,IAAIA,GAAG,CAACte,MAAM,IAAI,CAAC,EAAE;UACjB,IAAI,CAAC,CAACse,GAAG,CAAC9B,SAAS,EAAE;YACjB8B,GAAG,CAACte,MAAM,IAAIse,GAAG,CAAC9B,SAAS,CAAC07G,cAAc;YAC1C55G,GAAG,CAAC9B,SAAS,CAACqvH,gBAAgB,GAAG,IAAI;UACzC;UAEAptH,CAAC,GAAGA,CAAC,CAACl/B,IAAI,CAAC,YAAY;YACnB,OAAOusJ,aAAa,CAACxtH,GAAG,CAAC;UAC7B,CAAC,CAAC,SAAM,CAAC,UAAC5+B,GAAG,EAAK;YACdnE,MAAM,CAACymJ,YAAY,CAACtiJ,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC;YACrC0tJ,OAAO,GAAG,IAAI;UAClB,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;IACN;IAEA3uH,CAAC,GAAGA,CAAC,CAACl/B,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACtB,IAAIwoJ,OAAO,EAAE;QACT,OAAOxxJ,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;MAC7C;MACA,IAAI,CAAC,CAACl4C,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,EAAE;QAC3C5xG,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,EAAE,UAAU3uE,GAAG,EAAE;UACpE,IAAIA,GAAG,CAACte,MAAM,IAAI,CAAC,EACfzkB,MAAM,CAACkwJ,SAAS,CAACntH,GAAG,CAAC;QAC7B,CAAC,CAAC;MACN;MAEA,IAAK/iC,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAGh8I,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,IAAK,CAAC,EAAE;QAC7D0T,OAAO,CAAC5vJ,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAGh8I,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,EAAE,IAAI,CAAC;QAEnE,IAAIl8I,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,EAAE;UAC/Bh+H,WAAW,CAACo/H,4BAA4B,CAACt9I,MAAM,CAAC4P,WAAW,EAAE,MAAM,EAAE5P,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,EAC9Fl8I,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAGh8I,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACrF;MACJ;MAEA,IAAIl8I,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW,GAAGp9I,MAAM,CAACy0G,QAAQ,CAAC0nC,oBAAoB,EAAE;QACpEyU,eAAe,CAAC5wJ,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW,GAAGp9I,MAAM,CAACy0G,QAAQ,CAAC0nC,oBAAoB,CAAC;QAEnF,IAAIn8I,MAAM,CAACy0G,QAAQ,CAAC0nC,oBAAoB,EAAE;UACtCj+H,WAAW,CAACo/H,4BAA4B,CAACt9I,MAAM,CAAC4P,WAAW,EAAE,eAAe,EAAE5P,MAAM,CAACy0G,QAAQ,CAAC0nC,oBAAoB,EAC9Gn8I,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW,GAAGp9I,MAAM,CAACy0G,QAAQ,CAAC0nC,oBAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACnG;MACJ;MAEA,IAAIn8I,MAAM,CAACy0G,QAAQ,CAAC4oC,aAAa,EAAE;QAC/BwT,gBAAgB,CAAC7wJ,MAAM,CAACy0G,QAAQ,CAAC4oC,aAAa,CAAC;MACnD;MAGA,OAAOyT,aAAa,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF5tH,CAAC,GAAGA,CAAC,CAACl/B,IAAI,CAAC,UAAUgtF,EAAE,EAAE;MACrBltF,CAAC,CAAC,4BAA4B,CAAC,CAACktJ,OAAO,CAAC,CAAC;MACzCltJ,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAIytJ,EAAE,GAAGnxJ,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACnBsmJ,EAAE,CAACrmJ,OAAO,CAACulF,EAAE,CAAC;MACd,OAAO8gE,EAAE,CAACpmJ,OAAO;IACrB,CAAC,CAAC;IAEF,OAAOw3B,CAAC;EACZ,CAAC;EAEDljC,MAAM,CAACwmJ,UAAU,GAAG,UAAUuL,MAAM,EAAE;IAClC,IAAItrB,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE5P,MAAM,CAAC4+I,UAAU,GAAG,WAAW;IAE/B,IAAInY,SAAS,EAAE;MAEX3rG,4FAAuB,CAACmkH,uBAAuB,CAACj/I,MAAM,CAAC4P,WAAW,EAAE;QAChE8uI,YAAY,EAAE1+I,MAAM,CAAC0+I,YAAY;QACjClD,iBAAiB,EAAEx7I,MAAM,CAACw7I,iBAAiB;QAC3C/mC,QAAQ,EAAEz0G,MAAM,CAACy0G,QAAQ;QACzBkqC,gBAAgB,EAAE3+I,MAAM,CAAC2+I,gBAAgB;QACzCC,UAAU,EAAE5+I,MAAM,CAAC4+I;MACvB,CAAC,EAAE5jH,iEAAc,CAACg3H,YAAY,CAAC;IACnC;IAEA,IAAIC,GAAG,GAAGjyJ,MAAM,CAAC8+I,oBAAoB,CAAC,KAAK,CAAC;IAE5C,IAAIiT,MAAM,KAAK,IAAI,IAAIE,GAAG,KAAK,CAAC,EAAE;MAC9BjyJ,MAAM,CAAC4P,WAAW,CAAC2yB,cAAc,GAAGviC,MAAM,CAAC8pJ,gBAAgB;MAE3D,IAAI9pJ,MAAM,CAAC0+I,YAAY,CAACr8G,aAAa,KAAK,IAAI,EAAE;QAC5CriC,MAAM,CAAC4P,WAAW,CAACyyB,aAAa,GAAGriC,MAAM,CAAC0+I,YAAY,CAACr8G,aAAa;MACxE;MAEAriC,MAAM,CAAC2xJ,eAAe,CAAC,CAAC,SACd,CAAC,UAAUxtJ,GAAG,EAAE;QAClBnE,MAAM,CAACymJ,YAAY,CAACtiJ,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;MACxC,CAAC,CAAC;IAEV,CAAC,MACI;MACDnE,MAAM,CAACkvJ,kBAAkB,CAAC,CAAC;IAC/B;EACJ,CAAC;EAEDlvJ,MAAM,CAAC2mJ,YAAY,GAAG,UAAUuL,YAAY,EAAE;IAC1C,IAAIzrB,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE5P,MAAM,CAAC4+I,UAAU,GAAG,WAAW;IAE/B,IAAInY,SAAS,EAAE;MAEX3rG,4FAAuB,CAACmkH,uBAAuB,CAACj/I,MAAM,CAAC4P,WAAW,EAAE;QAChE8uI,YAAY,EAAE1+I,MAAM,CAAC0+I,YAAY;QACjClD,iBAAiB,EAAEx7I,MAAM,CAACw7I,iBAAiB;QAC3C/mC,QAAQ,EAAEz0G,MAAM,CAACy0G;MACrB,CAAC,EAAEz5E,iEAAc,CAACg3H,YAAY,CAAC;MAC/BhyJ,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB,GAAG,CAAC;IAC7C;IAEA,IAAG55I,MAAM,CAAC2+I,gBAAgB,KAAG,UAAU,EACnC3+I,MAAM,CAAC4P,WAAW,CAACu6H,aAAa,GAAGnqI,MAAM,CAAC0+I,YAAY,CAAC3qD,OAAO;IAElE,IAAI/zF,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,KAAK,CAAC,EAAE;MAC3Cj+I,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,IAAIj+I,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB;MAC5E55I,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,GAAG59I,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,EAAE,CAAC,CAAC;IACzG;IACA;IACA;;IAEAj+I,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB,IAAIl+I,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB;IAEnFt2D,cAAc,CAACi8D,sBAAsB,CAACv/I,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,CAAC;IAE5E78I,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,GAAGx7I,MAAM,CAACw7I,iBAAiB;IAC/D,IAAI,CAAC/U,SAAS,EAAE;MACZzmI,MAAM,CAAC4P,WAAW,CAAC+2H,aAAa,GAAG3mI,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa;IACxE,CAAC,MAAM;MACH3mI,MAAM,CAAC4P,WAAW,CAACuiJ,YAAY,GAAGnyJ,MAAM,CAAC0+I,YAAY;IACzD;IAEA1+I,MAAM,CAAC4P,WAAW,CAACyoB,YAAY,GAAGr4B,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY;IAEvE,IAAG,CAAC65H,YAAY,EAAC;MACblyJ,MAAM,CAAC4P,WAAW,CAACisB,QAAQ,GAAG,GAAG;MAEjC77B,MAAM,CAAC4P,WAAW,CAACmtB,uBAAuB,GAAG,KAAK;IACtD;IAEA19B,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,gBAAgB,EAAEC,IAAI,CAACC,SAAS,CAAC33B,MAAM,CAAC4P,WAAW,CAAC,CAAC;IACjF;IACAvQ,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAAC;MAAErpB,IAAI,EAAEtO,MAAM,CAACo6E;IAAS,CAAC,CAAC,CAAC;IACtFvwD,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;EAC3B,CAAC;EAED9sB,MAAM,CAACoyJ,aAAa,GAAG,UAAUxiJ,WAAW,EAAE;IAC1C,OAAOA,WAAW,CAACxM,EAAE;IACrB,OAAOwM,WAAW,CAAC6rB,IAAI;IACvB,OAAO7rB,WAAW,CAACyiJ,UAAU;IAC7B,OAAOziJ,WAAW,CAACkpB,QAAQ;IAC3B,OAAOlpB,WAAW,CAAC+sB,SAAS;IAC5B,OAAO/sB,WAAW,CAAC2qE,UAAU;IAC7B,OAAO3qE,WAAW,CAACmoI,sBAAsB;IACzC,OAAOnoI,WAAW,CAAC8sB,gBAAgB;IACnC,OAAO9sB,WAAW,CAAC0oB,WAAW;IAC9B,OAAO1oB,WAAW,CAAC4K,OAAO;IAC1B,OAAO5K,WAAW,CAACyyB,aAAa;IAChC,OAAOzyB,WAAW,CAACmtE,WAAW;IAC9B,OAAOntE,WAAW,CAAC8rB,QAAQ;IAC3B,OAAO9rB,WAAW,CAAC2yB,cAAc;IACjC,OAAO3yB,WAAW,CAACu4I,YAAY;IAE/B,IAAIpa,aAAa,GAAGjuI,OAAO,CAAC+F,IAAI,CAAC+J,WAAW,CAAC+rB,aAAa,CAAC;IAC3D/rB,WAAW,CAAC+rB,aAAa,GAAG,EAAE;IAC9B73B,CAAC,CAACmC,IAAI,CAAC8nI,aAAa,EAAE,UAAU7nI,GAAG,EAAEtG,EAAE,EAAE;MACrC,IAAIA,EAAE,CAAC8C,IAAI,IAAI9C,EAAE,CAAC8C,IAAI,IAAI,UAAU,IAAI9C,EAAE,CAAC8C,IAAI,CAAC2M,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE;QAE1EzP,EAAE,CAACwD,EAAE,GAAGumB,KAAK,CAACuE,OAAO,CAAC,CAAC;QACvBtuB,EAAE,CAAColB,KAAK,GAAG6U,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAAColB,KAAK,CAAC;QAC7BplB,EAAE,CAACm+B,KAAK,GAAGlE,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAACo/B,SAAS,CAAC;QACjCp/B,EAAE,CAACmlB,MAAM,GAAG8U,IAAI,CAACD,GAAG,CAACv5B,aAAa,CAAC6uB,SAAS,CAACtvB,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAAColB,KAAK,EAAE,CAAC,CAAC,CAAC;QACzEplB,EAAE,CAACi8B,QAAQ,GAAG,CAAC;QACfj8B,EAAE,CAAC89B,GAAG,GAAG7D,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAAC89B,GAAG,CAAC;QACzB99B,EAAE,CAAC6D,aAAa,GAAGo2B,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAAC6D,aAAa,CAAC;QAC7C7D,EAAE,CAAC8+B,oBAAoB,GAAG7E,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAAC8+B,oBAAoB,CAAC;QAC3D9+B,EAAE,CAAC++B,YAAY,GAAG9E,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAAC++B,YAAY,CAAC;QAC3C/+B,EAAE,CAACg/B,OAAO,GAAG,IAAI;QACjBh/B,EAAE,CAACi/B,SAAS,GAAG,IAAI;QACnBj/B,EAAE,CAACo/B,SAAS,GAAGnF,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAACo/B,SAAS,CAAC;QACrCp/B,EAAE,CAACq/B,qBAAqB,GAAGpF,IAAI,CAACD,GAAG,CAACh6B,EAAE,CAACq/B,qBAAqB,CAAC;QAE7DrvB,WAAW,CAAC+rB,aAAa,CAACt1B,IAAI,CAACzG,EAAE,CAAC;MACtC;IAEJ,CAAC,CAAC;IAEFkE,CAAC,CAACmC,IAAI,CAAC2J,WAAW,CAACkpB,QAAQ,EAAE,UAAU5yB,GAAG,EAAEg9B,CAAC,EAAE;MAC3CA,CAAC,CAACmpH,WAAW,GAAG,IAAI;IACxB,CAAC,CAAC;IAEF,IAAI5lB,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAACtxB,WAAW,CAAC;IAC5D,IAAI62H,SAAS,EAAE;MACXzmI,MAAM,CAAC4P,WAAW,CAACuiJ,YAAY,GAAGnyJ,MAAM,CAAC0+I,YAAY;IACzD;IAEAr/I,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,gBAAgB,EAAEC,IAAI,CAACC,SAAS,CAAC/nB,WAAW,CAAC,CAAC;IAC1E;IACAvQ,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAAC;MAAErpB,IAAI,EAAE;IAAU,CAAC,CAAC,CAAC;IAChFub,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;EAC3B,CAAC;EAED9sB,MAAM,CAACsyJ,6BAA6B,GAAG,YAAY;IAE/C,IAAIlG,IAAI,GAAGpsJ,MAAM,CAAC8uJ,oBAAoB,CAAC,CAAC;IACxC,IAAI1C,IAAI,GAAG,CAAC,EAAE;MACV,IAAImG,YAAY,GAAGvoI,OAAO,CAAC,UAAU,CAAC,CAACoiI,IAAI,CAAC;MAE5CpsJ,MAAM,CAAC8sD,UAAU,GAAG,mBAAmB;MACvCzsD,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC,EACnEf,cAAc,CAACe,SAAS,CAAC,4IAA4I,CAAC,EACtKf,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC,EAC/Bf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,MACI;MACDxB,MAAM,CAACwyJ,qBAAqB,CAAC,CAAC,SACpB,CAAC,UAAUruJ,GAAG,EAAE;QAClBnE,MAAM,CAACymJ,YAAY,CAACtiJ,GAAG,EAAE,IAAI,CAAC;MAClC,CAAC,CAAC;IACV;EACJ,CAAC;EAEDnE,MAAM,CAAC26B,aAAa,GAAG,YAAY;IAE/B,IAAI36B,MAAM,CAAC8sD,UAAU,IAAI,mBAAmB,EAAE;MAC1C9sD,MAAM,CAACwyJ,qBAAqB,CAAC,CAAC;IAClC,CAAC,MAAM,IAAIxyJ,MAAM,CAAC8sD,UAAU,IAAI,kBAAkB,EAAE;MAChD9sD,MAAM,CAACyyJ,IAAI,CAACC,oBAAoB,GAAG,IAAI;IAC3C,CAAC,MAAM,IAAI1yJ,MAAM,CAAC8sD,UAAU,IAAI,uBAAuB,EAAE;MACrD9sD,MAAM,CAAC2yJ,uBAAuB,CAAC,CAAC;IACpC,CAAC,MAAM,IAAI3yJ,MAAM,CAAC8sD,UAAU,IAAI,+BAA+B,EAAE;MAC7D9sD,MAAM,CAAC4yJ,gCAAgC,CAAC,CAAC;IAC7C,CAAC,MAAM,IAAI5yJ,MAAM,CAAC8sD,UAAU,IAAI,0BAA0B,EAAE;MACxD9sD,MAAM,CAACiiJ,0BAA0B,CAAC,CAAC;IACvC,CAAC,MAAM,IAAIjiJ,MAAM,CAAC8sD,UAAU,IAAI,kBAAkB,EAAC;MAC/C+lG,wBAAwB,CAAC,CAAC;IAC9B,CAAC,MAAM,IAAI7yJ,MAAM,CAAC8sD,UAAU,KAAK,UAAU,EAAE;MACzC9sD,MAAM,CAAC8yJ,gBAAgB,CAAC,CAAC;IAC7B;EACJ,CAAC;EAED9yJ,MAAM,CAACwyJ,qBAAqB,GAAG,YAAY;IACvCxyJ,MAAM,CAAC4+I,UAAU,GAAG,WAAW;IAC/B,IAAInY,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IACnE,IAAI62H,SAAS,EAAE;MACX3rG,4FAAuB,CAACmkH,uBAAuB,CAACj/I,MAAM,CAAC4P,WAAW,EAAE;QAChE8uI,YAAY,EAAE1+I,MAAM,CAAC0+I,YAAY;QACjClD,iBAAiB,EAAEx7I,MAAM,CAACw7I,iBAAiB;QAC3C/mC,QAAQ,EAAEz0G,MAAM,CAACy0G;MACrB,CAAC,EAAEz5E,iEAAc,CAACg3H,YAAY,CAAC;IACnC;IAEAhyJ,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAG,CAAC;IACxBh8I,MAAM,CAACy0G,QAAQ,CAAC4qC,UAAU,GAAG,CAAC;IAC9Br/I,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,GAAG,CAAC;IACvCj+I,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,GAAG,CAAC,CAAC;IAC1C78I,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,GAAG,EAAE;IAE5C1xG,MAAM,CAAC2+I,gBAAgB,GAAG,IAAI;IAC9B3+I,MAAM,CAAC4P,WAAW,CAAC2yB,cAAc,GAAGviC,MAAM,CAAC8pJ,gBAAgB,CAAC;;IAE5D,IAAI9pJ,MAAM,CAAC0+I,YAAY,CAACr8G,aAAa,IAAI,IAAI,EAAE;MAC3CriC,MAAM,CAAC4P,WAAW,CAACyyB,aAAa,GAAGriC,MAAM,CAAC0+I,YAAY,CAACr8G,aAAa;IACxE;IAEAriC,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW,GAAGp9I,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB;IACxEl+I,MAAM,CAACy0G,QAAQ,CAAC4oC,aAAa,GAAGr9I,MAAM,CAACw7I,iBAAiB,CAAC2C,mBAAmB;IAE5E,IAAI4U,OAAO,GAAGjzJ,OAAO,CAAC+F,IAAI,CAAC7F,MAAM,CAAC4P,WAAW,CAAC;IAE9C,IAAIszB,CAAC,GAAGljC,MAAM,CAAC2xJ,eAAe,CAAC,CAAC;IAEhCzuH,CAAC,GAAGA,CAAC,CAACl/B,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACtBrJ,MAAM,CAACoyJ,aAAa,CAACW,OAAO,CAAC;IACjC,CAAC,CAAC;IAEF,OAAO7vH,CAAC;EACZ,CAAC;EAEDljC,MAAM,CAACgzJ,kBAAkB,GAAG;IACxBpjB,aAAa,EAAE,EAAE;IACjBqjB,oBAAoB,EAAE;EAC1B,CAAC;EAEDjzJ,MAAM,CAACwQ,aAAa,GAAG,UAAUxI,IAAI,EAAEkrJ,OAAO,EAAE;IAC5C,IAAIlrJ,IAAI,CAAC4I,MAAM,EAAE;MACb,IAAI5I,IAAI,CAAC6I,MAAM,CAACC,QAAQ,EACpB,OAAOoiJ,OAAO,GAAG,4CAA4C,GAAG,0BAA0B,CAAC,KAE3F,OAAOA,OAAO,GAAG,8CAA8C,GAAG,4BAA4B;IACtG;EACJ,CAAC;EAEDlzJ,MAAM,CAACmzJ,sBAAsB,GAAG,YAAY;IACxC;IACAj1I,WAAW,CAACiyG,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE;MAC/BK,aAAa,EAAExwH,MAAM,CAACgzJ,kBAAkB,CAACpjB;IAC7C,CAAC,CAAC,CAAC5rI,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACnB,IAAIA,GAAG,IAAIA,GAAG,CAAC0vB,KAAK,GAAG,CAAC,EAAE;QACtB;QACA/4B,MAAM,CAAC8sD,UAAU,GAAG,uBAAuB;QAC3CzsD,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC9Df,cAAc,CAACe,SAAS,CAAC,6HAA6H,CAAC,EACvJf,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC,EAC/Bf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;MACvC,CAAC,MAAM;QACHxB,MAAM,CAAC2yJ,uBAAuB,CAAC,CAAC;MACpC;IACJ,CAAC,CAAC,SAAM,CAAC,UAAUxuJ,GAAG,EAAE;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAEDnE,MAAM,CAAC2yJ,uBAAuB,GAAG,YAAY;IACzCtzJ,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,gBAAgB,EAAEC,IAAI,CAACC,SAAS,CAAC;MACzDW,WAAW,EAAEt4B,MAAM,CAACgzJ,kBAAkB,CAACpjB,aAAa;MACpDlzG,gBAAgB,EAAE18B,MAAM,CAACgzJ,kBAAkB,CAACpjB,aAAa;MACzDtF,aAAa,EAAEtqI,MAAM,CAACgzJ,kBAAkB,CAACC,oBAAoB;MAC7DG,eAAe,EAAEpzJ,MAAM,CAACgzJ,kBAAkB,CAACpyJ,QAAQ;MACnDyyJ,YAAY,EAAErzJ,MAAM,CAACgzJ,kBAAkB,CAACM,UAAU,KAAK;IAC3D,CAAC,CAAC,CAAC;IACHj0J,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAAC;MAAErpB,IAAI,EAAE;IAAmB,CAAC,CAAC,CAAC;IAEzFub,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;EAC3B,CAAC;EAED9sB,MAAM,CAACuzJ,wBAAwB,GAAG,YAAY;IAC1C;IACAr1I,WAAW,CAACiyG,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE;MAC/BK,aAAa,EAAExwH,MAAM,CAACgzJ,kBAAkB,CAACpjB;IAC7C,CAAC,CAAC,CAAC5rI,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACnB,IAAIA,GAAG,IAAIA,GAAG,CAAC0vB,KAAK,GAAG,CAAC,EAAE;QACtB;QACA/4B,MAAM,CAAC8sD,UAAU,GAAG,+BAA+B;QACnDzsD,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC9Df,cAAc,CAACe,SAAS,CAAC,+HAA+H,CAAC,EACzJf,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC,EAC/Bf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;MACvC,CAAC,MAAM;QACHxB,MAAM,CAAC4yJ,gCAAgC,CAAC,CAAC;MAC7C;IACJ,CAAC,CAAC,SAAM,CAAC,UAAUzuJ,GAAG,EAAE;MACpBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAEDnE,MAAM,CAAC4yJ,gCAAgC,GAAG,YAAY;IAClDvzJ,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,gBAAgB,EAAEC,IAAI,CAACC,SAAS,CAAC;MACzDW,WAAW,EAAEt4B,MAAM,CAACgzJ,kBAAkB,CAACpjB,aAAa;MACpDlzG,gBAAgB,EAAE18B,MAAM,CAACgzJ,kBAAkB,CAACpjB,aAAa;MACzDtF,aAAa,EAAEtqI,MAAM,CAACgzJ,kBAAkB,CAACC,oBAAoB;MAC7DG,eAAe,EAAEpzJ,MAAM,CAACgzJ,kBAAkB,CAACpyJ,QAAQ;MACnDyyJ,YAAY,EAAErzJ,MAAM,CAACgzJ,kBAAkB,CAACM,UAAU,KAAK;IAC3D,CAAC,CAAC,CAAC;IACHj0J,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAAC;MAAErpB,IAAI,EAAE;IAAqB,CAAC,CAAC,CAAC;IAE3Fub,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;EAC3B,CAAC;EAED9sB,MAAM,CAACszJ,UAAU,GAAG,YAAY;IAC5BtzJ,MAAM,CAACgzJ,kBAAkB,CAACpjB,aAAa,GAAG,IAAI;IAC9C9rI,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAIuH,EAAE,GAAG+kB,eAAe,CAACmjI,QAAQ,CAAC,kBAAkB,EAAC,EAAE,CAAC,CAAC;IAAA,CACxDxvJ,IAAI,CAAC,UAASqF,GAAG,EAAC;MACfrJ,MAAM,CAACgzJ,kBAAkB,CAACpjB,aAAa,GAAGvmI,GAAG,CAACnF,IAAI;IACtD,CAAC,CAAC;IAEFlE,MAAM,CAACgzJ,kBAAkB,CAACpyJ,QAAQ,GAAG,IAAI;IACzC,IAAG,CAAC,CAACV,aAAa,CAACuzJ,uBAAuB,EAAE;MACxCnoJ,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAU;QAAE;QACrB,OAAO5D,eAAe,CAAC43C,WAAW,CAAC93C,aAAa,CAACuzJ,uBAAuB,CAAC,CACxEzvJ,IAAI,CAAC,UAAUC,IAAI,EAAE;UAClB,IAAIA,IAAI,CAACqF,SAAS,CAAC,CAAC,CAAC,EACjBtJ,MAAM,CAACgzJ,kBAAkB,CAACpyJ,QAAQ,GAAGqD,IAAI,CAACqF,SAAS,CAAC,CAAC,CAAC,CAAC,KAEvDtJ,MAAM,CAACgzJ,kBAAkB,CAACpyJ,QAAQ,GAAG,IAAI;QACjD,CAAC,CAAC;MACN,CAAC,CAAC;IACN;IAEA0K,EAAE,GAACA,EAAE,CAACtH,IAAI,CAAC,YAAU;MAAE;MACnBF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAACgzJ,kBAAkB,CAACM,UAAU,GAAG,IAAI;MAC3CtzJ,MAAM,CAACmzJ,sBAAsB,CAAC,CAAC;IACnC,CAAC,CAAC,SACI,CAAC,UAAShvJ,GAAG,EAAC;MAChBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;IAEF,OAAOmH,EAAE;EACb,CAAC;EAEDtL,MAAM,CAAC0zJ,oBAAoB,GAAG,YAAY;IAEtC1zJ,MAAM,CAACgzJ,kBAAkB,CAACpjB,aAAa,GAAG,IAAI;IAC9C,IAAI/hH,cAAc,GAAG/pB,CAAC,CAAC,gCAAgC,CAAC;IACxDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAED7tB,MAAM,CAAC2zJ,2BAA2B,GAAG,YAAY;IAC7C,IAAI9lI,cAAc,GAAG/pB,CAAC,CAAC,gCAAgC,CAAC;IACxDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAAC4zJ,4BAA4B,GAAG,YAAY;IAC9C5zJ,MAAM,CAACgzJ,kBAAkB,CAACpjB,aAAa,GAAG,IAAI;IAC9C,IAAI/hH,cAAc,GAAG/pB,CAAC,CAAC,kCAAkC,CAAC;IAC1DzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAED7tB,MAAM,CAAC6zJ,6BAA6B,GAAG,YAAY;IAC/C,IAAIhmI,cAAc,GAAG/pB,CAAC,CAAC,kCAAkC,CAAC;IAC1DzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED,SAASoiI,kBAAkBA,CAACtvH,kBAAkB,EAAE5b,MAAM,EAAE+b,eAAe,EAAEgzH,WAAW,EAAEpuB,gBAAgB,EAClGquB,mBAAmB,EAAEC,mBAAmB,EAAEC,uBAAuB,EAAEz3D,eAAe,EAAEp+E,SAAS,EAAE;IAC/F2G,MAAM,GAAG1kB,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAACI,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAE5D/kB,MAAM,CAAC4P,WAAW,CAAC4sB,OAAO,GAAG,CAAC;IAC9B,IAAI03H,OAAO,GAAG,CAAC;IACf,IAAIna,eAAe,GAAG,CAAC;IACvB,IAAIC,kBAAkB,GAAG,CAAC;IAC1B,IAAI57H,SAAS,IAAIA,SAAS,CAACkyI,gBAAgB,IAAI,IAAI,EAAE;MACjDvW,eAAe,GAAG37H,SAAS,CAAC8sH,eAAe;MAC3C8O,kBAAkB,GAAGh6I,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,GAAG,CAAC,GAAGja,SAAS,CAACsf,GAAG;IAClF;IAEA19B,MAAM,CAACohJ,eAAe,CAAC7rI,KAAK,IAAIvV,MAAM,CAAC45B,GAAG,CAACs6H,OAAO,CAAC;IAEnD,IAAIxzH,OAAO,GAAG;MACVt9B,EAAE,EAAEumB,KAAK,CAACuE,OAAO,CAAC,CAAC;MACnByS,kBAAkB,EAAEA,kBAAkB;MACtC5b,MAAM,EAAE1kB,aAAa,CAAC6uB,SAAS,CAACnK,MAAM,GAAGg1H,eAAe,GAAGC,kBAAkB,EAAE,CAAC,CAAC;MACjFv+G,IAAI,EAAE3K,MAAM,CAACC,GAAG,CAAC,CAAC;MAClB8P,SAAS,EAAE6kG,gBAAgB;MAC3B5kG,eAAe,EAAEA,eAAe;MAChCC,OAAO,EAAEmzH,OAAO;MAChBnwH,mBAAmB,EAAEgwH,mBAAmB;MACxCxoB,mBAAmB,EAAEyoB,mBAAmB;MACxCnoB,uBAAuB,EAAEooB,uBAAuB;MAChDhzH,SAAS,EAAE7iB;IACf,CAAC;IAED,IAAI,CAAC,CAACo+E,eAAe,EAAE;MACnB97D,OAAO,CAACw8D,mBAAmB,GAAGV,eAAe;IACjD;IAEA,IAAI97D,OAAO,CAACO,SAAS,EACjBP,OAAO,CAACO,SAAS,CAACmqG,SAAS,GAAG1qG,OAAO,CAACt9B,EAAE;IAE5CpD,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAACzyB,IAAI,CAACq6B,OAAO,CAAC;;IAEzC;IACA,IAAI3b,MAAM,IAAI/kB,MAAM,CAAC4P,WAAW,CAAC8+H,mBAAmB,EAAE;MAClD,IAAIjhI,CAAC,GAAG,CAAC;MACT,IAAIzN,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,EAC9B9zB,CAAC,GAAGzN,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,CAACM,kBAAkB;MACzDqyH,OAAO,GAAGh2I,WAAW,CAAC4vH,kBAAkB,CAAC9tI,MAAM,CAAC4P,WAAW,EAAEmV,MAAM,GAAGtX,CAAC,CAAC;IAC5E;IAEAizB,OAAO,CAACK,OAAO,GAAGmzH,OAAO;IAEzBl0J,MAAM,CAAC4P,WAAW,CAACw6H,aAAa,IAAI8pB,OAAO;IAE3C,IAAIxuB,gBAAgB,KAAK,SAAS,EAAE;MAChC;MACA1lI,MAAM,CAAC4P,WAAW,CAACg/H,yBAAyB,GAAG5uI,MAAM,CAAC45B,GAAG,CAAC7U,MAAM,CAAC;IACrE;IAEA,OAAO2b,OAAO;EAClB;EAEA,SAAS2vH,oBAAoBA,CAACjyI,SAAS,EAAEo/H,aAAa,EAAEuW,mBAAmB,EAAEC,mBAAmB,EAAEC,uBAAuB,EAAEE,kBAAkB,EAAE;IAE3I/1I,SAAS,CAAC8sH,eAAe,GAAG,CAAC,CAAC,GAAG7qI,aAAa,CAAC6uB,SAAS,CAAC9Q,SAAS,CAACu+H,cAAc,IAAI38I,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,GAAG,CAAC,GAAGja,SAAS,CAACw+H,WAAW,CAAC,EAAE,CAAC,CAAC;IAC3Jx+H,SAAS,CAACsf,GAAG,GAAG,CAAC,CAAC,GAAGtf,SAAS,CAACw+H,WAAW;IAC1Cx+H,SAAS,CAAC2tH,sBAAsB,GAAG/rI,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,GAAGja,SAAS,CAAC8sH,eAAe,GAAI9sH,SAAS,CAAC8sH,eAAe,GAAG9sH,SAAS,CAACsf,GAAI;IAClJtf,SAAS,CAACQ,iBAAiB,GAAG4+H,aAAa;IAC3C,IAAI2W,kBAAkB,KAAK,IAAI,EAAE;MAC7B/1I,SAAS,CAAC2lB,mBAAmB,GAAGgwH,mBAAmB;MACnD31I,SAAS,CAACmtH,mBAAmB,GAAGyoB,mBAAmB;MACnD51I,SAAS,CAACytH,uBAAuB,GAAGooB,uBAAuB;IAC/D;IAEA,OAAO71I,SAAS,CAACu+H,cAAc;IAC/B,OAAOv+H,SAAS,CAACw+H,WAAW;IAE5B58I,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,CAACl0E,IAAI,CAAC+X,SAAS,CAAC;IAE7Cpe,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,GAAG/4B,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,CAAC;IACrGr4B,MAAM,CAAC4P,WAAW,CAACgiJ,eAAe,GAAG5kB,eAAe,CAAChtI,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAAC;EAC1F;EAEA37B,MAAM,CAACo0J,iBAAiB,GAAG,YAAY;IACnCp0J,MAAM,CAACmjB,gBAAgB,GAAG;MACtBpT,QAAQ,EAAE,EAAE;MACZ8/H,oBAAoB,EAAE,CAAC;MACvBp0G,IAAI,EAAE,EAAE;MACRovF,IAAI,EAAE,EAAE;MACRngG,UAAU,EAAE,EAAE;MACd0mF,YAAY,EAAE,EAAE;MAChBg/B,gBAAgB,EAAE,EAAE;MACpBN,QAAQ,EAAE,CAAC;MACXj0G,QAAQ,EAAE,CAAC;MACXK,aAAa,EAAE,CAAC;MAChBnD,KAAK,EAAE,CAAC;MACRD,QAAQ,EAAE,EAAE;MACZ0D,OAAO,EAAE,CAAC;MACVuhF,eAAe,EAAE,EAAE;MACnBC,eAAe,EAAE;IACrB,CAAC;EACL,CAAC;EAEDh+G,MAAM,CAACo0J,iBAAiB,CAAC,CAAC;EAE1B,SAAS7lB,aAAaA,CAACwkB,OAAO,EAAEsB,aAAa,EAAE;IAC3Cr0J,MAAM,CAACo0J,iBAAiB,CAAC,CAAC;IAC1BrB,OAAO,CAACuB,iBAAiB,GAAG,IAAI,CAAC,CAAC;IAClC,IAAI7tB,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAC6xH,OAAO,CAAC;IAExD,IAAG/uI,QAAQ,CAAC+uI,OAAO,CAACr2H,gBAAgB,CAAC,KAAK,CAAC,EAAC;MACxCq2H,OAAO,CAACz6H,WAAW,GAAGt4B,MAAM,CAAC0+I,YAAY,CAACpmH,WAAW;IAC1D;IAEC,IAAI,CAACmuG,SAAS,EACd;MACIvoH,WAAW,CAACqwH,aAAa,CAACwkB,OAAO,EAAE/yJ,MAAM,CAACmjB,gBAAgB,EAAEoxI,UAAU,CAACxB,OAAO,CAAC,EAAE/yJ,MAAM,CAACuD,QAAQ,EAAEvD,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,CAAC;MACxIg8H,aAAa,CAAC,CAAC;IACnB,CAAC,MAEGv5H,4FAAuB,CAACyzG,aAAa,CAACwkB,OAAO,EAAE/yJ,MAAM,CAACmjB,gBAAgB,EAAEnjB,MAAM,CAACuD,QAAQ,EAAE8wJ,aAAa,CAAC;EAC/G;EAEA,SAASE,UAAUA,CAACxB,OAAO,EAAE;IACzB,IAAIrO,aAAa,GAAGrkJ,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC2kJ,gBAAgB,CAAC3kJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3G,IAAI40B,aAAa,GAAGvkJ,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC6kJ,gBAAgB,CAAC7kJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3G,OAAO40B,aAAa,GAAGF,aAAa;EACxC;EAGA1kJ,MAAM,CAACw0J,iBAAiB,GAAG,UAAUC,YAAY,EAAE;IAE/C,IAAI1B,OAAO,GAAG0B,YAAY,KAAK,IAAI,GAAG/8H,IAAI,CAAC2T,KAAK,CAACrrC,MAAM,CAAC+wJ,eAAe,CAAC,GAAGjxJ,OAAO,CAAC+F,IAAI,CAAC7F,MAAM,CAAC4P,WAAW,CAAC;IAC3GmjJ,OAAO,CAACt3H,IAAI,GAAGp7B,aAAa,CAAC2xE,2BAA2B,CAAChyE,MAAM,CAAC0+I,YAAY,CAAC/W,SAAS,CAAC;;IAEvF;IACA,IAAI8sB,YAAY,EAAE;MACd,IAAK1B,OAAO,CAACt2H,kBAAkB,GAAG,CAAC,IAAIs2H,OAAO,CAACtvJ,aAAa,GAAG,CAAC,IAC3DsvJ,OAAO,CAACt2H,kBAAkB,GAAG,CAAC,IAAIs2H,OAAO,CAACtvJ,aAAa,GAAG,CAAE,EAC7DsvJ,OAAO,CAACtvJ,aAAa,IAAI,CAAC,CAAC;IACnC;IAEA8qI,aAAa,CAACwkB,OAAO,EAAE,YAAW;MAC9B/yJ,MAAM,CAAC0K,KAAK,CAACgqJ,YAAY,GAAG,IAAI;MAEhC,IAAI10J,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC/yF,aAAa,EAAE;QACxCj9B,MAAM,CAAC0K,KAAK,CAACgqJ,YAAY,GAAG10J,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC/yF,aAAa;MACtE;MAEA,IAAIpP,cAAc,GAAG/pB,CAAC,CAAC,uBAAuB,CAAC;MAC/CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;IAC5C,CAAC,CAAC;EACN,CAAC;EAED7tB,MAAM,CAAC20J,kBAAkB,GAAG,YAAY;IACpC;IACA;;IAEA,IAAI9mI,cAAc,GAAG/pB,CAAC,CAAC,uBAAuB,CAAC;IAC/CzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAACi+G,mBAAmB,GAAG,YAAY;IACrC,OAAOpmG,YAAY,CAAComG,mBAAmB,CAAC,CAAC;EAC7C,CAAC;EAEDj+G,MAAM,CAAC+8F,YAAY,GAAG,YAAY;IAC9B,IAAI63D,EAAE,GAAG50J,MAAM,CAAC60J,aAAa,CAACC,WAAW,CAACC,gBAAgB,CAACrhJ,UAAU;IACrE,OAAOmE,YAAY,CAACklF,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC63D,EAAE,CAAC,SAAM,CAAC,UAACzwJ,GAAG,EAAK;MACnEhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC3BL,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACN,CAAC;EAEDrE,MAAM,CAAC60J,aAAa,GAAG,CACvB,CAAC;EAED70J,MAAM,CAAC0K,KAAK,GAAG;IACXgqJ,YAAY,EAAE;EAClB,CAAC;EAED10J,MAAM,CAACokE,gBAAgB,GAAG,YAAY;IAClCtgE,CAAC,CAACC,OAAO,CAAC,CAAC;IAC3B;IACgB,IAAIugE,SAAS,GAAGswD,YAAY,CAACjwD,aAAa,CAAC,iCAAiC,CAAC,CAACllD,IAAI,CAAC,CAAC;IACpF,IAAIglD,YAAY,GAAG3gE,CAAC,CAAC,mCAAmC,CAAC,CAAC2b,IAAI,CAAC,CAAC;IAChE,IAAI,CAACglD,YAAY,EAAE;MACfA,YAAY,GAAG3gE,CAAC,CAAC,wDAAwD,CAAC,CAAC2b,IAAI,CAAC,CAAC;IACrF;IACA,IAAI4kD,YAAY,GAAGrkE,MAAM,CAACg2H,mBAAmB;IAC7C;IACA,IAAItrH,KAAK,GAAG1K,MAAM,CAAC0K,KAAK,CAACgqJ,YAAY;IACrC,IAAG,CAAC,CAAC10J,MAAM,CAAC4P,WAAW,IAAI,CAAC5P,MAAM,CAAC4P,WAAW,CAAC0oB,WAAW,KAAKt4B,MAAM,CAAC+wJ,eAAe,EACjF/wJ,MAAM,CAAC4P,WAAW,GAAG8nB,IAAI,CAAC2T,KAAK,CAACrrC,MAAM,CAAC+wJ,eAAe,CAAC;IAE3D,IAAIp8D,MAAM,GAAGigC,YAAY,CAAC5wD,eAAe,CAAChkE,MAAM,CAAC4P,WAAW,CAAC;IAE7DglH,YAAY,CAACxwD,gBAAgB,CAACuwB,MAAM,CAAC1wB,OAAO,EAAE0wB,MAAM,CAACzwB,WAAW,EAAEx5D,KAAK,EAAE25D,YAAY,EAAEC,SAAS,EAAE,KAAK,EAAEtkE,MAAM,CAACilJ,iBAAiB,EAAExgF,YAAY,CAAC,CAC3IzgE,IAAI,CAAC,UAAUyjB,MAAM,EAAE;MACpB3jB,CAAC,CAACO,SAAS,CAAC,CAAC;MACb;MACA,IAAIojB,MAAM,CAACs8E,MAAM,IAAI,IAAI,EAAE;QACvB/jG,MAAM,CAAC20J,kBAAkB,CAAC,CAAC;QAE3B30J,MAAM,CAACg1J,WAAW,GAAGtqJ,KAAK;QAE1B,IAAIuqJ,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAGj1J,MAAM,CAAC0+I,YAAY,CAAC3W,aAAa,EAAE;UACnCktB,QAAQ,GAAGv9H,IAAI,CAAC2T,KAAK,CAACrrC,MAAM,CAAC0+I,YAAY,CAAC3W,aAAa,CAAC;QAC3D;QAEAktB,QAAQ,CAAChtB,GAAG,GAAG,MAAM;QACrBjoI,MAAM,CAAC0+I,YAAY,CAAC3W,aAAa,GAAGrwG,IAAI,CAACC,SAAS,CAACs9H,QAAQ,CAAC;QAC5Dj1J,MAAM,CAAC0+I,YAAY,CAACxW,iBAAiB,GAAG,IAAI;QAE5C,IAAIgtB,IAAI,GAAGl1J,MAAM,CAACkE,IAAI,CAAC6B,MAAM,CACzB,UAAS4P,CAAC,EAAE;UAAC,OAAOA,CAAC,CAAC2hB,UAAU,KAAKt3B,MAAM,CAAC0+I,YAAY,CAACpnH,UAAU;QAAC,CAAC,CAAC;QAC1E,IAAG49H,IAAI,CAAC9uJ,MAAM,GAAC,CAAC,EAAE;UACd8uJ,IAAI,CAAC,CAAC,CAAC,CAACntB,aAAa,GAAG/nI,MAAM,CAAC0+I,YAAY,CAAC3W,aAAa;UACzDmtB,IAAI,CAAC,CAAC,CAAC,CAAChtB,iBAAiB,GAAG,IAAI;QACpC;QAEA,IAAIr6G,cAAc,GAAG/pB,CAAC,CAAC,qBAAqB,CAAC;QAC7CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;QAExC7tB,MAAM,CAACm1J,uBAAuB,GAAG,YAAY;UACzC,IAAItnI,cAAc,GAAG/pB,CAAC,CAAC,qBAAqB,CAAC;UAC7CzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;QAC7C,CAAC;MACL,CAAC,MACI;QACD,IAAIA,cAAc,GAAG/pB,CAAC,CAAC,0BAA0B,CAAC;QAClDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;QAExC7tB,MAAM,CAACm1J,uBAAuB,GAAG,YAAY;UACzC,IAAItnI,cAAc,GAAG/pB,CAAC,CAAC,0BAA0B,CAAC;UAClDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;QAC7C,CAAC;MACL;IACJ,CAAC,EAAE,UAAU1pB,GAAG,EAAE;MACdL,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAIuxC,GAAG,GAAGn1C,cAAc,CAACe,SAAS,CAAC,sBAAsB,CAAC;MAC1D,IAAI,CAAC,CAAC2C,GAAG,CAACD,IAAI,IAAIC,GAAG,CAACD,IAAI,CAACkC,MAAM,GAAG,CAAC,IAAI,CAAC,CAACjC,GAAG,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC80B,SAAS,EAC5D4c,GAAG,GAAGzxC,GAAG,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC80B,SAAS;MAE/B74B,YAAY,CAACiE,SAAS,CAAC,CAAC,CAACD,GAAG,CAACD,IAAI,GAAGC,GAAG,CAACD,IAAI,GAAG0xC,GAAG,CAAC;IACvD,CAAC,CAAC;EACV,CAAC;EAGD51C,MAAM,CAACy+I,sBAAsB,GAAG,IAAI,CAAC,CAAC;;EAEtCz+I,MAAM,CAAC+9I,gBAAgB,GAAG;IAAEh5H,MAAM,EAAE,CAAC;IAAE7hB,IAAI,EAAE,EAAE;IAAEizE,SAAS,EAAE;EAAK,CAAC;EAElEn2E,MAAM,CAACyyJ,IAAI,GAAG,IAAI;EAElBzyJ,MAAM,CAACo1J,wBAAwB,GAAG,UAAUzzI,GAAG,EAAE;IAC7C,IAAI,CAACA,GAAG,CAAC+wI,oBAAoB,EAAE;MAC3B1yJ,MAAM,CAAC8sD,UAAU,GAAG,kBAAkB;MACtC9sD,MAAM,CAACyyJ,IAAI,GAAG9wI,GAAG;MACjBthB,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC9Df,cAAc,CAACe,SAAS,CAAC,wDAAwD,CAAC,EAClFf,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC,EAC/Bf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,MACGmgB,GAAG,CAAC+wI,oBAAoB,GAAG,KAAK;EACxC,CAAC;EAET1yJ,MAAM,CAACq1J,0BAA0B,GAAG,UAAUl7E,WAAW,EAAEhE,SAAS,EAAEm/E,QAAQ,EAAE;IAC5EA,QAAQ,GAAGj1J,aAAa,CAAC6uB,SAAS,CAAComI,QAAQ,EAAE,CAAC,CAAC;IAC/Ct1J,MAAM,CAAC+9I,gBAAgB,CAAC76I,IAAI,GAAGi3E,WAAW;IAC1Cn6E,MAAM,CAAC+9I,gBAAgB,CAAC5nE,SAAS,GAAGA,SAAS,CAACv1D,MAAM,CAAC,CAAC,CAAC;IACvD,IAAI6lH,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IACnE,IAAIkuI,OAAO,GAAG,CAAC;IAEf,IAAI,CAACrX,SAAS,EACVqX,OAAO,GAAI99I,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAIr4B,MAAM,CAACyvJ,UAAU,CAAC,CAAC,GAAGzvJ,MAAM,CAACotJ,iBAAiB,CAAC,CAAC,GAAGptJ,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB,CAAC,KAE7LkE,OAAO,GAAGjkH,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC4P,WAAW,CAAC2lJ,iBAAiB,GAAGv1J,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB,CAAC;IAEpGkE,OAAO,GAAGz9I,aAAa,CAAC6uB,SAAS,CAAC4uH,OAAO,EAAE,CAAC,CAAC;IAE7C,IAAI,CAAC,CAACwX,QAAQ,EAAE;MACZ,IAAI77I,MAAM,CAAC67I,QAAQ,CAAC,GAAGxX,OAAO,EAC1BA,OAAO,GAAGwX,QAAQ;IAC1B;IAEAp3I,WAAW,CAAC2/H,gBAAgB,CAAC79I,MAAM,EAAEm6E,WAAW,EAAE2jE,OAAO,CAAC;IAE1Dt9I,QAAQ,CAAC,YAAY;MACjBR,MAAM,CAACy+I,sBAAsB,CAAC5oI,IAAI,CAACsgE,SAAS,CAAC;IACjD,CAAC,CAAC;EACN,CAAC;EAEOn2E,MAAM,CAACs+I,eAAe,GAAG,UAAU9hI,GAAG,EAAE;IACpC0B,WAAW,CAACogI,eAAe,CAACt+I,MAAM,EAAEwc,GAAG,EAAExc,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,CAAC;EACnF,CAAC;EAEDr4B,MAAM,CAACw1J,kBAAkB,GAAG,IAAI,CAAC,CAAC;;EAElCx1J,MAAM,CAACy1J,qBAAqB,GAAG;IAAEzwI,KAAK,EAAE,CAAC;IAAE3I,SAAS,EAAE;EAAK,CAAC;EAE5Drc,MAAM,CAAC01J,sBAAsB,GAAG,UAAU5rJ,IAAI,EAAEqsE,SAAS,EAAE;IACvD,IAAIn2E,MAAM,CAAC0+I,YAAY,CAACwK,WAAW,KAAK,KAAK,EAAE;MAC3ClpJ,MAAM,CAACy1J,qBAAqB,CAACp5I,SAAS,GAAGvS,IAAI,CAACuS,SAAS;MACvDrc,MAAM,CAACy1J,qBAAqB,CAACzwI,KAAK,GAAGlb,IAAI,CAACkb,KAAK;MAC/ChlB,MAAM,CAACy1J,qBAAqB,CAACryJ,EAAE,GAAG0G,IAAI,CAAC1G,EAAE;MACzC5C,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAACw1J,kBAAkB,CAAC3/I,IAAI,CAACsgE,SAAS,CAAC;MAC7C,CAAC,CAAC;IACN;EACJ,CAAC;;EAED;EACAn2E,MAAM,CAAC21J,YAAY,GAAG,UAAUn5I,GAAG,EAAE;IACjChc,QAAQ,CAAC,YAAY;MAAER,MAAM,CAACw1J,kBAAkB,CAAC1qJ,IAAI,CAAC,IAAI,CAAC;IAAE,CAAC,CAAC;IAC/DtK,QAAQ,CAAC,YAAY;MACjB,IAAIgc,GAAG,KAAK,IAAI,EAAE;QACd1Y,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAACm5I,WAAW,EAAE,UAAU7iJ,GAAG,EAAEtG,EAAE,EAAE;UACtD,IAAIA,EAAE,CAACyc,SAAS,KAAKrc,MAAM,CAACy1J,qBAAqB,CAACp5I,SAAS,IAAIzc,EAAE,CAACwD,EAAE,KAAKpD,MAAM,CAACy1J,qBAAqB,CAACryJ,EAAE,KACnGxD,EAAE,CAACk4H,YAAY,KAAK93H,MAAM,CAACy1J,qBAAqB,CAAC39B,YAAY,IAAK,CAACl4H,EAAE,CAACk4H,YAAY,IAAI,CAAC93H,MAAM,CAACy1J,qBAAqB,CAAC39B,YAAa,CAAC,EAAE;YACrIl4H,EAAE,CAAColB,KAAK,GAAG3kB,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAACy1J,qBAAqB,CAACzwI,KAAK,EAAE9kB,aAAa,CAACwnC,aAAa,CAAC;YACnG1nC,MAAM,CAACmtJ,qBAAqB,CAACvtJ,EAAE,CAAC;YAChC,OAAO,KAAK;UAChB;QACJ,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;EACN,CAAC;EAGDI,MAAM,CAAC41J,cAAc,GAAG,UAAUvnJ,IAAI,EAAE;IACpC,IAAK,CAACA,IAAI,CAACqmJ,YAAY,CAAC3oJ,QAAQ,IAAIsC,IAAI,CAACqmJ,YAAY,CAAC9jJ,MAAM,IAAM,CAACvC,IAAI,CAACqmJ,YAAY,CAAC3oJ,QAAQ,IAAIsC,IAAI,CAACqmJ,YAAY,CAACtuJ,MAAM,GAAG,CAAE,EAC1H,OAAO,4BAA4B,CAAC,KACnC,IAAK,CAACiI,IAAI,CAACqmJ,YAAY,CAAC3oJ,QAAQ,IAAIsC,IAAI,CAACqmJ,YAAY,CAAC7jJ,MAAM,CAACC,QAAQ,IAAIzC,IAAI,CAACqmJ,YAAY,CAAC7jJ,MAAM,CAACnG,KAAK,MAAM2D,IAAI,CAACqmJ,YAAY,CAAC9jJ,MAAM,IAAIvC,IAAI,CAACqmJ,YAAY,CAACtuJ,MAAM,GAAG,CAAC,CAAC,EACvK,OAAO,0BAA0B;EACzC,CAAC;EAGDpG,MAAM,CAAC61J,iBAAiB,GAAG,YAAY;IACnC,IAAI71J,MAAM,CAAC4P,WAAW,IAAI5P,MAAM,CAAC4P,WAAW,CAACm5I,WAAW,EAAE;MACtD,IAAI+M,IAAI,GAAG91J,MAAM,CAACspJ,kBAAkB,KAAK,IAAI,CAAC,CAAC;;MAE/C,IAAIyM,mBAAmB,GAAG,KAAK;MAC/B,IAAIC,kBAAkB,GAAG,CAAC;MAC1BlyJ,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAACm5I,WAAW,EAAE,UAAU7iJ,GAAG,EAAEtG,EAAE,EAAE;QACtD,IAAIA,EAAE,UAAO,EAAE;UACXo2J,kBAAkB,IAAIp2J,EAAE,CAAColB,KAAK;QAClC;QACA,IAAIplB,EAAE,CAAColB,KAAK,GAAGplB,EAAE,CAACqpJ,QAAQ,IAAIrpJ,EAAE,UAAO,KAAK,IAAI,EAAE;UAC9Cm2J,mBAAmB,GAAG,IAAI;UAC1B,OAAO,KAAK;QAChB;MACJ,CAAC,CAAC;MAEF,OAAOD,IAAI,IAAIC,mBAAmB,IAAIC,kBAAkB,KAAK,CAAC;IAClE;IACA,OAAO,KAAK;EAChB,CAAC;EAEDh2J,MAAM,CAACi8C,UAAU,GAAG,KAAK;EAEzBj8C,MAAM,CAACqC,GAAG,CAAC,cAAc,EAAE,UAAUC,KAAK,EAAEoY,OAAO,EAAE;IACjD,IAAI5W,CAAC,CAAC,+BAA+B,CAAC,CAACsC,MAAM,GAAG,CAAC,EAC7C;IACJpG,MAAM,CAACk8C,kBAAkB,CAACxhC,OAAO,CAAC;EACtC,CAAC,CAAC;EAEF1a,MAAM,CAACk8C,kBAAkB,GAAG,UAAUxhC,OAAO,EAAE;IAC3C,IAAI1a,MAAM,CAACi8C,UAAU,EAAE;MACnBz7C,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAACk8C,kBAAkB,CAACxhC,OAAO,CAAC;MACtC,CAAC,EAAE,GAAG,CAAC;IACX,CAAC,MACI;MACD1a,MAAM,CAACm8C,oBAAoB,CAACzhC,OAAO,CAAC;IACxC;EACJ,CAAC;EAED1a,MAAM,CAACi2J,WAAW,GAAG,UAAUv7I,OAAO,EAAE;IACpC1a,MAAM,CAACq5B,YAAY,GAAG,CAAC;IAEvB,IAAIr5B,MAAM,CAACshJ,QAAQ,KAAK,KAAK,EAAE;MAC3BthJ,MAAM,CAAC4gJ,gBAAgB,CAAC//I,UAAU,GAAGb,MAAM,CAACyuG,WAAW;MACvDzuG,MAAM,CAAC4hJ,eAAe,CAAC,CAAC;IAC5B,CAAC,MAEG5hJ,MAAM,CAACs6B,MAAM,CAAC,CAAC;EACvB,CAAC;EAEDt6B,MAAM,CAACm8C,oBAAoB,GAAG,UAAUzhC,OAAO,EAAE;IAC7C5W,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACi8C,UAAU,GAAG,IAAI;IACxBj3C,OAAO,CAACC,GAAG,CAAC,aAAa,CAAC;IAC1BjF,MAAM,CAACktJ,UAAU,CAAC,KAAK,CAAC;IACxBltJ,MAAM,CAACyuG,WAAW,GAAG/zF,OAAO;IAC5B1V,OAAO,CAACC,GAAG,CAAC,oBAAoB,GAAGyV,OAAO,CAAC;IAE3C1a,MAAM,CAACq5B,YAAY,GAAG,CAAC;IAEvBr5B,MAAM,CAACs6B,MAAM,CAAC,CAAC;IACft6B,MAAM,CAACi8C,UAAU,GAAG,KAAK;IACzBj3C,OAAO,CAACC,GAAG,CAAC,eAAe,CAAC;IAC5BD,OAAO,CAACC,GAAG,CAAC,sBAAsB,CAAC;EACvC,CAAC;EAEDjF,MAAM,CAACssJ,SAAS,GAAG,YAAY;IAC3B,IAAItsJ,MAAM,CAAC0+I,YAAY,EAAE;MAErB,IAAIr1I,GAAG,GAECrJ,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,cAAc,IAC1CrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,kBAAkB,IACjDrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,WAAW,IAC1CrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,OAAO,IACtCrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,QAAQ,IACvCrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,QACrC;MAEL,OAAOgG,GAAG;IACd,CAAC,MACI;MACD,OAAO,KAAK;IAChB;EACJ,CAAC;EAEDrJ,MAAM,CAAC6uJ,sBAAsB,GAAG,YAAY;IACxC,IAAI7uJ,MAAM,CAAC0+I,YAAY,EAAE;MAErB,IAAIwX,aAAa,GAAG,KAAK;MACzB,IAAI,OAAOl2J,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAACtkG,aAAa,KAAK,WAAW,EAAE;QACxE6zH,aAAa,GAAGl2J,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAACtkG,aAAa;MACnE;MAEA,IAAI5a,MAAM,GAAGyuI,aAAa,IAAKl2J,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,cAAc,IAAIrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,kBAAkB,IAAIrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,WAAW,IAAIrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,OAAO,IAAIrD,MAAM,CAAC0+I,YAAY,CAACr7I,MAAM,KAAK,QAAS;MAErQ,OAAOokB,MAAM;IACjB,CAAC,MACI;MACD,OAAO,KAAK;IAChB;EACJ,CAAC;EAEDznB,MAAM,CAAC8+I,oBAAoB,GAAG,UAAUqX,qBAAqB,EAAE;IAC3D,IAAI,CAACn2J,MAAM,CAAC4P,WAAW,EAAE,OAAO,CAAC;IAEjC,IAAI62H,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE,IAAI,CAAC62H,SAAS,EAAE;MACZ,IAAI2vB,MAAM,GAAGp2J,MAAM,CAAC2kJ,gBAAgB,CAAC3kJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC;MAC9D,IAAIqmC,KAAK,GAAGr2J,MAAM,CAAC6kJ,gBAAgB,CAAC7kJ,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC;MAC7D,IAAIy/B,UAAU,GAAG,CAAC;MAElB,IAAIzvJ,MAAM,CAAC6uJ,sBAAsB,CAAC,CAAC,KAAK,IAAI,KACvCxuJ,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAACy8H,KAAK,CAAC,EAAE,CAAC,CAAC,GAAGh2J,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAACw8H,MAAM,CAAC,EAAE,CAAC,CAAC,IACpF/1J,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAACw8H,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;QAC5D,IAAI,EAAED,qBAAqB,KAAK,IAAI,CAAC,EAAE;UACnC1G,UAAU,GAAGzvJ,MAAM,CAACyvJ,UAAU,CAAC,CAAC;QACpC;QAEA,OAAOzvJ,MAAM,CAAC8uJ,oBAAoB,CAAC,CAAC,GAAGW,UAAU;MACrD,CAAC,MACI;QACD,IAAI6G,kBAAkB,GAAG,CAAC;QAC1B,IAAIl1H,QAAQ,GAAG,CAAC;QAChB,IAAIphC,MAAM,CAAC4P,WAAW,EAAE;UACpBwxB,QAAQ,GAAGphC,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;UAEhGi+H,kBAAkB,GAAGt2J,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB;QAC9D;QAEA,IAAI,EAAEuc,qBAAqB,KAAK,IAAI,CAAC,EAAE;UACnC1G,UAAU,GAAGzvJ,MAAM,CAACyvJ,UAAU,CAAC,CAAC;QACpC;QAGA,OAAOpvJ,aAAa,CAAC6uB,SAAS,CAACkS,QAAQ,GAAGquH,UAAU,GAAGzvJ,MAAM,CAACotJ,iBAAiB,CAAC,CAAC,GAAGkJ,kBAAkB,EAAE,CAAC,CAAC;MAC9G;IACJ,CAAC,MAAM;MACH,OAAOz8H,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC4P,WAAW,CAAC2lJ,iBAAiB,CAAC;IACzD;EACJ,CAAC;EAEDv1J,MAAM,CAAC8uJ,oBAAoB,GAAG,YAAY;IACtC,IAAIrqI,MAAM,GAAG,CAAC;IAEd,IAAIzkB,MAAM,CAAC0+I,YAAY,CAACr8G,aAAa,IAAI,IAAI,IAAIriC,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,IAAIliC,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC9tF,OAAO,CAAC97B,MAAM,GAAG,CAAC,EAAE;MAC9Hqe,MAAM,GAAGzkB,MAAM,CAAC0+I,YAAY,CAACiH,gBAAgB;IACjD,CAAC,MACI;MACD7hJ,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAAC7tG,QAAQ,EAAE,UAAUoyH,OAAO,EAAElQ,GAAG,EAAE;QACvEv2H,MAAM,IAAIu2H,GAAG,CAACj2H,MAAM;QACpB,IAAI,CAAC,CAACi2H,GAAG,CAAC/5G,SAAS,kDAAiD;UAAE;UAClE;UACAxc,MAAM,IAAIu2H,GAAG,CAAC/5G,SAAS,CAAC8qG,sBAAsB;QAClD;MACJ,CAAC,CAAC;IACN;IAEA,OAAO1rI,aAAa,CAAC6uB,SAAS,CAACzK,MAAM,EAAE,CAAC,CAAC;EAC7C,CAAC;EAEDzkB,MAAM,CAACu2J,mBAAmB,GAAG,UAAUzsJ,IAAI,EAAE;IACzC,IAAIA,IAAI,CAACm/I,QAAQ,IAAI,CAAC,EAAE;MACpB,OAAO,KAAK;IAChB;IACA,IAAIn/I,IAAI,CAAC41B,WAAW,IAAI,UAAU,IAAK,CAAC1/B,MAAM,CAAC2wC,oBAAqB,EAAE;MAClE,OAAO,KAAK;IAChB;IAEA,IAAI,EAAE7mC,IAAI,CAACm/I,QAAQ,KAAKn/I,IAAI,CAACq/I,QAAQ,KAAKnpJ,MAAM,CAAC0+I,YAAY,CAACwK,WAAW,KAAK,IAAI,IAAIlpJ,MAAM,CAAC0+I,YAAY,CAACr8G,aAAa,KAAK,IAAI,CAAC,CAAC,EAAE;MAChIv4B,IAAI,UAAO,GAAGA,IAAI,UAAO,IAAI,IAAI,GAAG,KAAK,GAAG,IAAI;MAChD9J,MAAM,CAACumJ,uBAAuB,CAAC,CAAC;IACpC;EACJ,CAAC;;EAGD;;EAEAvmJ,MAAM,CAACw2J,qBAAqB,GAAG,YAAY;IACvCv2J,UAAU,CAAC+K,UAAU,CAAC,4BAA4B,EAAE;MAAE0oB,MAAM,EAAE1zB,MAAM,CAAC0+I,YAAY,CAAC+X,YAAY;MAAE9iI,cAAc,EAAE;IAAK,CAAC,CAAC;EAC3H,CAAC;;EAED;;EAEA;AACZ;AACA;EACY3zB,MAAM,CAAC02J,qCAAqC,GAAG,UAAUlb,iBAAiB,EAAEmb,UAAU,EAAE;IACpF7yJ,CAAC,CAACmC,IAAI,CAACu1I,iBAAiB,CAAC9pC,cAAc,EAAE,UAAUl9F,CAAC,EAAE5U,EAAE,EAAE;MACtDI,MAAM,CAAC42J,gBAAgB,CAACh3J,EAAE,EAAE+2J,UAAU,CAAC;IAC3C,CAAC,CAAC;EACN,CAAC;EAED32J,MAAM,CAAC62J,mCAAmC,GAAG,UAAUrb,iBAAiB,EAAEmb,UAAU,EAAE;IAClF7yJ,CAAC,CAACmC,IAAI,CAAC5F,aAAa,CAACg9E,SAAS,CAACm+D,iBAAiB,CAACqB,YAAY,CAAC,EAAE,UAAUroI,CAAC,EAAE5U,EAAE,EAAE;MAC7EI,MAAM,CAAC42J,gBAAgB,CAACh3J,EAAE,EAAE+2J,UAAU,CAAC;IAC3C,CAAC,CAAC;EACN,CAAC;EAED32J,MAAM,CAAC42J,gBAAgB,GAAG,UAAUh3J,EAAE,EAAE+2J,UAAU,EAAE;IAChD,IAAI/2J,EAAE,CAAC68I,gBAAgB,GAAGka,UAAU,IAAIA,UAAU,GAAG,MAAM,EAAE;MACzD,IAAI/2J,EAAE,CAACqhC,SAAS,EAAE;QACd,IAAIi7E,KAAK,GAAGy6C,UAAU,GAAG/2J,EAAE,CAAC68I,gBAAgB;QAC5C78I,EAAE,CAACqhC,SAAS,GAAGjhC,MAAM,CAAC82J,gBAAgB,CAACl3J,EAAE,CAACqhC,SAAS,EAAEi7E,KAAK,CAAC;MAC/D;MACAt8G,EAAE,CAAC68I,gBAAgB,GAAGka,UAAU;IACpC;EACJ,CAAC;EAED32J,MAAM,CAAC+2J,gBAAgB,GAAG,UAAUn3J,EAAE,EAAEgqI,YAAY,EAAE;IAClD,IAAIhqI,EAAE,CAACqhC,SAAS,EACZjhC,MAAM,CAACunJ,gBAAgB,CAAC3nJ,EAAE,CAACqhC,SAAS,EAAE2oG,YAAY,CAAC;IAEvD,IAAI,CAAC,CAAChqI,EAAE,CAACqhC,SAAS,IAAIrhC,EAAE,CAACqhC,SAAS,CAACiqG,eAAe,IAAI,CAAC,IAAI,EAAEtrI,EAAE,CAACqhC,SAAS,CAACy7G,eAAe,KAAK,KAAK,CAAC,EAAE;MAClG,IAAIsa,aAAa,GAAGl3J,OAAO,CAAC+F,IAAI,CAACjG,EAAE,CAACqhC,SAAS,CAAC;MAC9C+1H,aAAa,CAACjrB,sBAAsB,GAAGirB,aAAa,CAAC9rB,eAAe,IAAItB,YAAY,GAAG,CAAC,GAAGotB,aAAa,CAACt5H,GAAG,CAAC;MAC7Gs5H,aAAa,CAACra,cAAc,GAAG,CAAC;MAChCqa,aAAa,CAACpa,WAAW,GAAG,CAAC;MAC7B,OAAOoa,aAAa;IACxB,CAAC,MACG,OAAO,IAAI;EACnB,CAAC;EAEDh3J,MAAM,CAAC82J,gBAAgB,GAAG,UAAUl3J,EAAE,EAAEs8G,KAAK,EAAE;IAC3C,IAAI86C,aAAa,GAAGl3J,OAAO,CAAC+F,IAAI,CAACjG,EAAE,CAAC;IACpCo3J,aAAa,CAAC9rB,eAAe,GAAG7qI,aAAa,CAAC6uB,SAAS,CAAC8nI,aAAa,CAAC9rB,eAAe,GAAGhvB,KAAK,EAAE,CAAC,CAAC;IACjG86C,aAAa,CAACjrB,sBAAsB,GAAG1rI,aAAa,CAAC6uB,SAAS,CAAC8nI,aAAa,CAACjrB,sBAAsB,GAAG7vB,KAAK,EAAE,CAAC,CAAC;IAC/G,IAAI86C,aAAa,CAACra,cAAc,EAC5Bqa,aAAa,CAACra,cAAc,GAAGt8I,aAAa,CAAC6uB,SAAS,CAAC8nI,aAAa,CAACra,cAAc,GAAGzgC,KAAK,EAAE,CAAC,CAAC;IACnG,IAAI86C,aAAa,CAACpa,WAAW,EACzBoa,aAAa,CAACpa,WAAW,GAAGv8I,aAAa,CAAC6uB,SAAS,CAAC8nI,aAAa,CAACpa,WAAW,GAAG1gC,KAAK,EAAE,CAAC,CAAC;IAC7F86C,aAAa,CAACt5H,GAAG,GAAGr9B,aAAa,CAAC6uB,SAAS,CAAC8nI,aAAa,CAACt5H,GAAG,GAAGw+E,KAAK,EAAE,CAAC,CAAC;IACzE,IAAI86C,aAAa,CAACj+H,KAAK,EACnBi+H,aAAa,CAACj+H,KAAK,GAAG14B,aAAa,CAAC6uB,SAAS,CAAC8nI,aAAa,CAACj+H,KAAK,GAAGmjF,KAAK,EAAE,CAAC,CAAC;IACjF,OAAO86C,aAAa;EACxB,CAAC;EAEDh3J,MAAM,CAAC2nJ,eAAe,GAAG,UAAU/nJ,EAAE,EAAE;IACnCA,EAAE,CAACsrI,eAAe,IAAI,CAAC,CAAC;IACxBtrI,EAAE,CAACmsI,sBAAsB,IAAI,CAAC,CAAC;IAC/BnsI,EAAE,CAAC89B,GAAG,IAAI,CAAC,CAAC;IACZ,IAAI99B,EAAE,CAAC+8I,cAAc,EACjB/8I,EAAE,CAAC+8I,cAAc,IAAI,CAAC,CAAC;IAC3B,IAAI/8I,EAAE,CAACg9I,WAAW,EACdh9I,EAAE,CAACg9I,WAAW,IAAI,CAAC,CAAC;IACxB,IAAIh9I,EAAE,CAACm5B,KAAK,EACRn5B,EAAE,CAACm5B,KAAK,IAAI,CAAC,CAAC;EACtB,CAAC;EAED/4B,MAAM,CAACunJ,gBAAgB,GAAG,UAAU0P,EAAE,EAAErtB,YAAY,EAAE;IAClD,IAAI,CAACqtB,EAAE,IAAI,CAACA,EAAE,CAACl+H,KAAK,EAAE,OAAOk+H,EAAE;IAE/BA,EAAE,CAAC/rB,eAAe,GAAG+rB,EAAE,CAACl+H,KAAK;IAC7Bk+H,EAAE,CAAClrB,sBAAsB,GAAGnC,YAAY,KAAK,IAAI,GAAGqtB,EAAE,CAACl+H,KAAK,GAAIk+H,EAAE,CAACl+H,KAAK,GAAGk+H,EAAE,CAACv5H,GAAI;EACtF,CAAC;;EAED;EACA19B,MAAM,CAAC4nJ,aAAa,GAAG,UAAU5kH,EAAE,EAAEG,EAAE,EAAE+kD,UAAU,EAAE;IACjD,IAAI,CAACllD,EAAE,IAAI,CAACG,EAAE,EAAE;IAChB,IAAI2lG,IAAI,GAAG5gD,UAAU,KAAK,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;IACvCllD,EAAE,CAACkoG,eAAe,GAAG7qI,aAAa,CAAC+8E,SAAS,CAACp6C,EAAE,CAACkoG,eAAe,EAAEpC,IAAI,GAAG3lG,EAAE,CAAC+nG,eAAe,CAAC;IAC3FloG,EAAE,CAAC+oG,sBAAsB,GAAG1rI,aAAa,CAAC+8E,SAAS,CAACp6C,EAAE,CAAC+oG,sBAAsB,EAAEjD,IAAI,GAAG3lG,EAAE,CAAC4oG,sBAAsB,CAAC;IAChH/oG,EAAE,CAACtF,GAAG,GAAGr9B,aAAa,CAAC+8E,SAAS,CAACp6C,EAAE,CAACtF,GAAG,EAAEorG,IAAI,GAAG3lG,EAAE,CAACzF,GAAG,CAAC;IACvDsF,EAAE,CAAC25G,cAAc,GAAGt8I,aAAa,CAAC+8E,SAAS,CAACp6C,EAAE,CAAC25G,cAAc,EAAE7T,IAAI,GAAG3lG,EAAE,CAACw5G,cAAc,CAAC;IACxF35G,EAAE,CAAC45G,WAAW,GAAGv8I,aAAa,CAAC+8E,SAAS,CAACp6C,EAAE,CAAC45G,WAAW,EAAE9T,IAAI,GAAG3lG,EAAE,CAACy5G,WAAW,CAAC;IAC/E,IAAI55G,EAAE,CAACjK,KAAK,IAAIoK,EAAE,CAACpK,KAAK,EACpBiK,EAAE,CAACjK,KAAK,GAAG14B,aAAa,CAAC+8E,SAAS,CAACp6C,EAAE,CAACjK,KAAK,EAAE+vG,IAAI,GAAG3lG,EAAE,CAACpK,KAAK,CAAC;EACrE,CAAC;EAED/4B,MAAM,CAACk3J,2BAA2B,GAAG,UAAU1b,iBAAiB,EAAE;IAC9D,IAAIv4G,GAAG,GAAG,CAAC;IACXn/B,CAAC,CAACmC,IAAI,CAACu1I,iBAAiB,CAAC9pC,cAAc,EAAE,UAAUl9F,CAAC,EAAE5U,EAAE,EAAE;MACtDqjC,GAAG,IAAIrjC,EAAE,CAAC68I,gBAAgB;IAC9B,CAAC,CAAC;IACF,OAAOx5G,GAAG;EACd,CAAC;EAEDjjC,MAAM,CAACwnJ,oBAAoB,GAAG,UAAU5nJ,EAAE,EAAE;IACxC,QAAQA,EAAE,CAACihC,SAAS;MAChB,KAAK,MAAM;QACPjhC,EAAE,CAACkhC,eAAe,GAAGrgC,cAAc,CAACe,SAAS,CAAC,MAAM,CAAC;QACrD;MACJ,KAAK,aAAa;QACd5B,EAAE,CAACkhC,eAAe,GAAGrgC,cAAc,CAACe,SAAS,CAAC,aAAa,CAAC;QAC5D;MACJ,KAAK,eAAe;QAChB5B,EAAE,CAACkhC,eAAe,GAAGrgC,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC;QAC7D;MACJ,KAAK,gBAAgB;QACjB5B,EAAE,CAACkhC,eAAe,GAAGrgC,cAAc,CAACe,SAAS,CAAC,gBAAgB,CAAC;QAC/D;MACJ,KAAK,SAAS;QACV5B,EAAE,CAACkhC,eAAe,GAAGrgC,cAAc,CAACe,SAAS,CAAC,gBAAgB,CAAC;QAC/D;MACJ;QACI5B,EAAE,CAACkhC,eAAe,GAAG9gC,MAAM,CAACwjJ,0BAA0B,CAAC5jJ,EAAE,CAACihC,SAAS,CAAC;QACpE;IACR;EACJ,CAAC;EAED7gC,MAAM,CAACk9I,sBAAsB,GAAG,YAAY;IACxC,OAAOh/H,WAAW,CAACg/H,sBAAsB,CAACl9I,MAAM,CAACy0G,QAAQ,EAAEz0G,MAAM,CAACw7I,iBAAiB,CAAC;EACxF,CAAC;EAEDx7I,MAAM,CAACm9I,YAAY,GAAG,YAAY;IAC9B,OAAOj/H,WAAW,CAACg/H,sBAAsB,CAACl9I,MAAM,CAACy0G,QAAQ,EAAEz0G,MAAM,CAACw7I,iBAAiB,CAAC,GAChFt9H,WAAW,CAACi/H,YAAY,CAACn9I,MAAM,CAACy0G,QAAQ,EAAEz0G,MAAM,CAACw7I,iBAAiB,CAAC;EAC3E,CAAC;EAEDx7I,MAAM,CAACm3J,gBAAgB,GAAG,YAAY;IAClC,IAAI,CAACn3J,MAAM,CAAC4P,WAAW,EAAE;IAEzB,IAAIvG,GAAG,GAAIhJ,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC4P,WAAW,CAAC45I,aAAa,EAAE,CAAC,CAAC,GAAGxpJ,MAAM,CAAC4P,WAAW,CAACm7H,SAAS,GAAG/qI,MAAM,CAAC4P,WAAW,CAAC86H,aAAa;IACzI,OAAOrhI,GAAG;EACd,CAAC;EAEDrJ,MAAM,CAACo3J,YAAY,GAAG,YAAY;IAC9B,IAAI,CAACp3J,MAAM,CAAC4P,WAAW,EAAE;IAEzB,IAAI62H,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IACnE,IAAI,CAAC62H,SAAS,EACV,OAAOzmI,MAAM,CAAC45B,GAAG,CAAC55B,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC0+I,YAAY,CAAC1uB,IAAI,CAAC33F,YAAY,EAAE,IAAI,CAAC,CAAC,GAAGr4B,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB,CAAC,KAC3I;MACD,OAAO55I,MAAM,CAAC45B,GAAG,CAAC55B,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,CAAC,GAAG/4B,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB;IACvF;EACJ,CAAC;EAED55I,MAAM,CAACq3J,eAAe,GAAG,YAAY;IACjC,IAAI,CAACr3J,MAAM,CAAC4P,WAAW,EAAE;IAEzB,IAAI62H,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IACnE,IAAI,CAAC62H,SAAS,EACV,OAAOzmI,MAAM,CAAC45B,GAAG,CAAC55B,MAAM,CAACosI,WAAW,CAACpsI,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE37B,MAAM,CAAC4P,WAAW,CAAC,CAAC,CAAC,KAE5F,OAAO5P,MAAM,CAAC45B,GAAG,CAAC55B,MAAM,CAAC4P,WAAW,CAACkgI,QAAQ,CAAC;EACtD,CAAC;EAED9vI,MAAM,CAAC4rJ,cAAc,GAAG,UAAShsJ,EAAE,EAAE;IACjC,QAAQA,EAAE,CAACihC,SAAS;MAChB,KAAK,MAAM;QACPjhC,EAAE,CAACkhC,eAAe,GAAGrgC,cAAc,CAACe,SAAS,CAAC,MAAM,CAAC;QACrD;MACJ,KAAK,aAAa;QACd5B,EAAE,CAACkhC,eAAe,GAAGrgC,cAAc,CAACe,SAAS,CAAC,aAAa,CAAC;QAC5D;MACJ,KAAK,eAAe;QAChB5B,EAAE,CAACkhC,eAAe,GAAGrgC,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC;QAC7D;MACJ,KAAK,gBAAgB;QACjB5B,EAAE,CAACkhC,eAAe,GAAGrgC,cAAc,CAACe,SAAS,CAAC,gBAAgB,CAAC;QAC/D;MACJ,KAAK,SAAS;QACV5B,EAAE,CAACkhC,eAAe,GAAGrgC,cAAc,CAACe,SAAS,CAAC,gBAAgB,CAAC;QAC/D;MACJ;QACI5B,EAAE,CAACkhC,eAAe,GAAG9gC,MAAM,CAACwjJ,0BAA0B,CAAC5jJ,EAAE,CAACihC,SAAS,CAAC;QACpE;IACR;EAEJ,CAAC;;EAGD;EACA7gC,MAAM,CAACy/I,KAAK,GAAG,IAAI;EACnBz/I,MAAM,CAACs3J,oBAAoB,GAAG,UAASp9I,GAAG,EAAE;IACxCpW,CAAC,CAAC,mBAAmB,GAAGoW,GAAG,CAAC65E,OAAO,CAAC,CAACvvF,OAAO,CAAC,OAAO,CAAC;IACrD,OAAO,KAAK;EAChB,CAAC;EAEDxE,MAAM,CAACu3J,YAAY,GAAG,UAASh2I,CAAC,EAAC;IAC7Bzd,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAIkgE,OAAO,GAAGngE,CAAC,CAACyd,CAAC,CAACpX,MAAM,CAAC,CAACxC,IAAI,CAAC,SAAS,CAAC;IACzC,IAAI83I,KAAK,GAAGl+H,CAAC,CAACpX,MAAM,CAACs1I,KAAK;IAE1B,IAAIprI,QAAQ,GAAG,KAAK;IACpB,IAAIgV,KAAK,GAAI,EAAE;;IAEf;;IAEA,IAAI7M,GAAG,GAAGnc,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;IAE5C,IAAIs/G,WAAW,GAAG,EAAE;IAGpB1zJ,CAAC,CAACmC,IAAI,CAACw5I,KAAK,EAAE,UAASv5I,GAAG,EAAE6gB,IAAI,EAAC;MAC7B,IAAI0wI,UAAU,GAAI1wI,IAAI,CAACnd,IAAI,CAACF,KAAK,CAAC,CAACqd,IAAI,CAACnd,IAAI,CAAC8tJ,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAEngJ,WAAW,CAAC,CAAC;MAC5F,IAAGkgJ,UAAU,KAAK,KAAK,IAAIA,UAAU,KAAK,KAAK,EAAC;QAC5CpjJ,QAAQ,GAAG,IAAI;QACfgV,KAAK,IAAI5oB,cAAc,CAACe,SAAS,CAAC,MAAM,CAAC,GAAE,GAAG,GAAEulB,IAAI,CAACnd,IAAI,GAAG,GAAG,GAAKnJ,cAAc,CAACe,SAAS,CAAC,2BAA2B,CAAC,GAAG,OAAO;MACvI,CAAC,MAAM;QACH;;QAEAgb,GAAG,GAAGA,GAAG,CAACxY,IAAI,CAAC,YAAU;UACrB,OAAO2zJ,YAAY,CAACH,WAAW,EAAEzwI,IAAI,CAACnd,IAAI,EAAEmd,IAAI,CAAC;QACrD,CAAC,CAAC;MACN;IACJ,CAAC,CAAC;IAGF,IAAG1S,QAAQ,EAAC;MACRvQ,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACilB,KAAK,CAAC;IACjC,CAAC,MAAK;MACF9H,CAAC,CAACpX,MAAM,CAACoL,KAAK,GAAG,EAAE;MAEnBiH,GAAG,CAACxY,IAAI,CAAC,UAAS4zJ,KAAK,EAAC;QACpB15I,WAAW,CAACshI,kBAAkB,CAACv7E,OAAO,EAACuzF,WAAW,CAAC,CAACxzJ,IAAI,CAAC,UAASgjE,OAAO,EAAC;UACtEljE,CAAC,CAACO,SAAS,CAAC,CAAC;QAEjB,CAAC,EAAE,UAASF,GAAG,EAAC;UACZL,CAAC,CAACO,SAAS,CAAC,CAAC;UACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;QAC/B,CAAC,CAAC;MACN,CAAC,EAAE,UAASA,GAAG,EAAC;QACZL,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/B,CAAC,CAAC;IACN;EACJ,CAAC;EAED,IAAMwzJ,YAAY,GAAG,SAAfA,YAAYA,CAAYH,WAAW,EAAE/xI,QAAQ,EAAEsB,IAAI,EAAC;IACtD,OAAO,IAAI2K,OAAO,CAAC,UAASjmB,OAAO,EAAEmb,MAAM,EAAC;MACxC,IAAIU,MAAM,GAAG,IAAIC,UAAU,CAAC,CAAC;MAC7BD,MAAM,CAAC6/C,aAAa,CAACpgD,IAAI,CAAC;MAC1BO,MAAM,CAACuwI,MAAM,GAAG,YAAU;QACtBL,WAAW,CAACnxJ,IAAI,CAAC;UAACof,QAAQ,EAAEA,QAAQ;UAAEqyI,WAAW,EAAExwI,MAAM,CAACG;QAAM,CAAC,CAAC;QAClEhc,OAAO,CAAC6b,MAAM,CAACG,MAAM,CAAC;MAC1B,CAAC;MACDH,MAAM,CAACS,OAAO,GAAG,UAASsB,KAAK,EAAC;QAC5BzC,MAAM,CAACyC,KAAK,CAAC;MACjB,CAAC;IACL,CAAC,CAAC;EACN,CAAC;EAGDrpB,MAAM,CAAC0/I,gBAAgB,GAAG,UAASqY,UAAU,EAAC;IAC1C/3J,MAAM,CAACyhJ,kBAAkB,GAAGsW,UAAU;IAEtC/3J,MAAM,CAAC8sD,UAAU,GAAG,kBAAkB;IACtCzsD,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC,EACnEf,cAAc,CAACe,SAAS,CAAC,uDAAuD,CAAC,EACjFf,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC,EAC/Bf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;EAEvC,CAAC;EAED,SAASqxJ,wBAAwBA,CAAA,EAAE;IAC/B,IAAG7yJ,MAAM,CAACyhJ,kBAAkB,IAAI,IAAI,EAAC;MACjC39I,CAAC,CAACC,OAAO,CAAC,CAAC;MAEXma,WAAW,CAACwhI,gBAAgB,CAAC1/I,MAAM,CAACyhJ,kBAAkB,CAACuW,aAAa,CAAC,CACpEh0J,IAAI,CAAC,YAAU;QAEZ,IAAIi0J,eAAe,GAAGj4J,MAAM,CAAC0+I,YAAY,CAACwZ,WAAW,CAAC7oJ,OAAO,CAACrP,MAAM,CAACyhJ,kBAAkB,CAAC;QAExFzhJ,MAAM,CAAC0+I,YAAY,CAACwZ,WAAW,CAAC5oJ,MAAM,CAAC2oJ,eAAe,EAAE,CAAC,CAAC;QAE1Dj4J,MAAM,CAACyhJ,kBAAkB,GAAG,IAAI;QAChC39I,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,EAAC,UAASF,GAAG,EAAC;QACXL,CAAC,CAACO,SAAS,CAAC,CAAC;QACb,IAAIwW,OAAO,GAAGpa,cAAc,CAACe,SAAS,CAAC,+BAA+B,CAAC,GAAG2C,GAAG;QAC7EhE,YAAY,CAACiE,SAAS,CAACyW,OAAO,CAAC;MACnC,CAAC,CAAC;IAEN;EACJ;EAEA7a,MAAM,CAACu8C,kBAAkB,GAAG,YAAW;IACnC,OAAOr8C,aAAa,CAAC+I,cAAc,GAAG,EAAE,GAAG,cAAc;EAC7D,CAAC;EAEDjJ,MAAM,CAACw8C,mBAAmB,GAAG,YAAW;IACpC,OAAOt8C,aAAa,CAAC+I,cAAc,GAAG,aAAa,GAAG,EAAE;EAC5D,CAAC;EAEDjJ,MAAM,CAACm4J,WAAW,GAAG,YAAU;IAC3Bl4J,UAAU,CAAC+K,UAAU,CAAC,qBAAqB,EAC3C;MACI+2B,IAAI,EAAE/hC,MAAM,CAAC4P;IACjB,CAAC,CAAC;EACN,CAAC;EAED5P,MAAM,CAACo4J,cAAc,GAAG,UAASl+I,GAAG,EAAE;IAClCja,UAAU,CAAC+K,UAAU,CAAC,qBAAqB,EAC3C;MACI+2B,IAAI,EAAE;QACF3+B,EAAE,EAAE8W,GAAG,CAAC65E;MACZ,CAAC;MACD5mC,MAAM,EAAE;IACZ,CAAC,CAAC;EACN,CAAC;EAEDntD,MAAM,CAACq4J,WAAW,GAAG,YAAW;IAC5B,OAAOn4J,aAAa,CAACo4J,4BAA4B,KAAK,IAAI,IAAIp4J,aAAa,CAACmB,QAAQ,KAAK,IAAI;EACjG,CAAC;EAEDrB,MAAM,CAACqkJ,mBAAmB,GAAG,YAAW;IACpC,IAAI;MACA,IAAIkU,aAAa,GAAGz0J,CAAC,CAAC,wBAAwB,CAAC,CAACynB,MAAM,CAAC,CAAC,CAAClO,IAAI,GAAGumD,OAAO,CAAC40F,UAAU,GAAG,CAAC;MACtF10J,CAAC,CAAC,qBAAqB,CAAC,CAAC++D,WAAW,CAAC,qBAAqB,EAAE,CAAC01F,aAAa,CAAC;IAC/E,CAAC,CAAC,OAAOh3I,CAAC,EAAE;MACRvc,OAAO,CAACqkB,KAAK,CAAC9H,CAAC,CAAC;IACpB;EACJ,CAAC;EAEDvhB,MAAM,CAACy4J,QAAQ,GAAG,YAAW;IACzBz4J,MAAM,CAAC8sD,UAAU,GAAG,UAAU;IAC9BzsD,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC9Df,cAAc,CAACe,SAAS,CAAC,qHAAqH,CAAC,EAC/If,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC,EAC/Bf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;EACvC,CAAC;EAEDxB,MAAM,CAAC8yJ,gBAAgB,GAAG,YAAW;IACjChvJ,CAAC,CAACC,OAAO,CAAC,CAAC;IACXssB,eAAe,CAACooI,QAAQ,CAACz4J,MAAM,CAAC0+I,YAAY,CAACpnH,UAAU,CAAC,CAACtzB,IAAI,CAAC,YAAW;MACrE;MACA,OAAOqpH,kBAAkB,CAACx5B,UAAU,CAChC7zF,MAAM,CAAC0+I,YAAY,CAAC/X,aAAa,CAACvjI,EAAE,IAAIpD,MAAM,CAAC0+I,YAAY,CAACpnH,UAAU,EACtEp3B,aAAa,CAACmuB,eAAe,EAC7B,QACJ,CAAC,SAAM,CAAC,UAASlqB,GAAG,EAAE;QAClBa,OAAO,CAACqkB,KAAK,CAAC,8BAA8B,EAAEllB,GAAG,CAAC;MACtD,CAAC,CAAC;IACN,CAAC,CAAC,CAACH,IAAI,CAAC,YAAW;MACf,OAAOhE,MAAM,CAACsmJ,UAAU,CAACtmJ,MAAM,CAAC0+I,YAAY,CAACpnH,UAAU,CAAC;IAC5D,CAAC,CAAC,CAACtzB,IAAI,CAAC,YAAW;MACfF,CAAC,CAACO,SAAS,CAAC,CAAC;MACbpE,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;QACnC6P,OAAO,EAAEpa,cAAc,CAACe,SAAS,CAAC,6CAA6C,EAAE;UAAE6kI,WAAW,EAAErmI,MAAM,CAAC0+I,YAAY,CAACpmH;QAAY,CAAC;MACrI,CAAC,CAAC;IACN,CAAC,CAAC,SACI,CAAC,UAASn0B,GAAG,EAAE;MACjBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC;EAEDrE,OAAO,CAACw3C,OAAO,CAACssB,OAAO,CAAC,CAAC9pB,IAAI,CAAC,QAAQ,EAAE,YAAY;IAChD95C,MAAM,CAACqkJ,mBAAmB,CAAC,CAAC;EAChC,CAAC,CAAC;EAEFd,WAAW,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC;AAEXzjJ,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACuG,MAAM,CAAC,2BAA2B,EAAE,YAAW;EACrE,OAAO,UAASgyC,MAAM,EAAE;IACpB,QAAQA,MAAM;MACV,KAAK,QAAQ;QACT,OAAO;UAAC,kBAAkB,EAAC;QAAS,CAAC;MACzC,KAAK,QAAQ;MACb,KAAK,kBAAkB;MACvB,KAAK,cAAc;QACf,OAAO;UAAC,kBAAkB,EAAC;QAAS,CAAC;MACzC,KAAK,WAAW;MAChB,KAAK,OAAO;QACR,OAAO;UAAC,kBAAkB,EAAC;QAAS,CAAC;MACzC,KAAK,qBAAqB;MAC1B,KAAK,cAAc;QACf,OAAO;UAAC,kBAAkB,EAAC;QAAS,CAAC;IAE7C;EACJ,CAAC;AACL,CAAC,CAAC,C;;;;;;;;;;ACpyIFj4C,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,uBAAuB,EACxD,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAC/E,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAC,WAAW,EAAE,SAAS,EACrF,UAAUC,MAAM,EAAEC,UAAU,EAAEM,SAAS,EAAEipB,YAAY,EAAEhpB,QAAQ,EAAE0d,WAAW,EACxE2L,SAAS,EAAE3pB,aAAa,EAAEG,aAAa,EAAE8wD,OAAO,EAAEj2B,SAAS,EAAEpR,OAAO,EAAE;EAEtE7pB,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAAEif,QAAQ,EAAE1pB,SAAS,CAACwxC;EAAyB,CAAC,CAAC,CAAC,CAAC;;EAElG,IAAI,CAACvoB,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;EACJ;EAEApqB,MAAM,CAACsqB,eAAe,GAAGjqB,aAAa,CAACiqB,eAAe;EACtDtqB,MAAM,CAACuqB,eAAe,GAAGlqB,aAAa,CAACmqB,2BAA2B;EAElExqB,MAAM,CAACT,MAAM,GAAGW,aAAa,CAACX,MAAM;EAEpCS,MAAM,CAACk5B,WAAW,GAAG,KAAK;EAE1Bl5B,MAAM,CAACq5B,YAAY,GAAG,CAAC;EACvBr5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;EACrBt5B,MAAM,CAACu5B,WAAW,GAAG,EAAE;EACvBv5B,MAAM,CAACw5B,YAAY,GAAG,IAAI;EAC1Bx5B,MAAM,CAACkJ,SAAS,GAAG,KAAK;;EAExB;EACAlJ,MAAM,CAAC04J,kBAAkB,GAAG,EAAE;EAC9B14J,MAAM,CAAC24J,iBAAiB,GAAG,EAAE;EAC7B34J,MAAM,CAACsuG,QAAQ,GAAG/tG,SAAS,CAACszC,YAAY;EACxC7zC,MAAM,CAACiiH,OAAO,GAAG,CAAC,CAAC;EAEnBjiH,MAAM,CAACkrB,eAAe,GAAGpB,OAAO,CAACqB,cAAc,CAACC,YAAY;;EAE5D;EACAprB,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB,IAAI7rB,MAAM,CAACqB,QAAQ,KAAK,IAAI,EAAE;MAC1BrB,MAAM,CAAC0nI,qBAAqB,CAAC,IAAI,CAAC;IACtC,CAAC,MAAM;MACH1nI,MAAM,CAAC44J,sBAAsB,CAAC,CAAC;IACnC;IAEA54J,MAAM,CAAC64J,gBAAgB,CAAC,CAAC;EAC7B,CAAC;EAED74J,MAAM,CAAC84J,SAAS,GAAG,IAAI;EAEvB94J,MAAM,CAAC64J,gBAAgB,GAAG,YAAW;IACjC,IAAG,CAAC,CAAC74J,MAAM,CAAC84J,SAAS,EACpB59H,SAAS,CAAC2oB,MAAM,CAAC7jD,MAAM,CAAC84J,SAAS,CAAC;IAElC94J,MAAM,CAAC84J,SAAS,GAAG59H,SAAS,CAACl7B,MAAM,CAAC+4J,WAAW,EAAE,KAAK,CAAC;EAC5D,CAAC;EAED/4J,MAAM,CAAC+4J,WAAW,GAAG,YAAW;IAC5B,IAAG/4J,MAAM,CAACg5J,aAAa,EAAE;MACrBh5J,MAAM,CAAC64J,gBAAgB,CAAC,CAAC;IAC7B,CAAC,MAAM;MACH,IAAI74J,MAAM,CAACqB,QAAQ,KAAK,IAAI,IAAIrB,MAAM,CAACg8C,MAAM,KAAK,CAAC,EAAE;QACjDh8C,MAAM,CAAC0nI,qBAAqB,CAAC,IAAI,CAAC;MACtC;IACJ;EACJ,CAAC;EAED1nI,MAAM,CAAC44J,sBAAsB,GAAG,YAAY;IACxC54J,MAAM,CAACg8C,MAAM,GAAG,CAAC;IACjB99B,WAAW,CAACslF,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAACx/F,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC7DrJ,MAAM,CAACq5B,YAAY,GAAG,CAAC;MACvBe,QAAQ,CAAC/wB,GAAG,CAACjD,MAAM,CAAC;MAEpB,IAAI6yJ,UAAU,GAAG9nG,OAAO,CAAC9nD,GAAG,EAAE,cAAc,EAAE,IAAI,CAAC;MACnDrJ,MAAM,CAAC04J,kBAAkB,GAAGO,UAAU,CAACvvJ,KAAK,CAAC,CAAC1J,MAAM,CAACq5B,YAAY,GAAG,CAAC,IAAIr5B,MAAM,CAACu5B,WAAW,EAAEv5B,MAAM,CAACu5B,WAAW,GAAIv5B,MAAM,CAACq5B,YAAa,CAAC;MAExIr5B,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;IAC7B,CAAC,CAAC;EACN,CAAC;;EAED;EACA,SAASqsI,gBAAgBA,CAAClwJ,GAAG,EAAE;IAC3B,IAAI,OAAQA,GAAI,IAAI,QAAQ,IAAI,CAACA,GAAG,IAAIA,GAAG,CAAC5C,MAAM,IAAI,CAAC,EACnD,OAAO4C,GAAG;IAEd,IAAI2W,OAAO,GAAG,IAAI;IAClB,IAAItW,GAAG,GAAG,EAAE;IACZ,KAAKwZ,CAAC,GAAG7Z,GAAG,CAAC5C,MAAM,GAAG,CAAC,EAAEyc,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;MAClC,IAAI7Z,GAAG,CAAC6Z,CAAC,CAAC,IAAI,GAAG,IAAI7Z,GAAG,CAAC6Z,CAAC,CAAC,IAAI,GAAG,EAC9BxZ,GAAG,GAAGL,GAAG,CAAC6Z,CAAC,CAAC,GAAGxZ,GAAG,CAAC,KAClB,IAAIsW,OAAO,EAAE;QACdtW,GAAG,GAAGL,GAAG,CAAC6Z,CAAC,CAAC,GAAGxZ,GAAG;QAClBsW,OAAO,GAAG,KAAK;MACnB;IACJ;IAEA,OAAOgF,UAAU,CAACtb,GAAG,CAAC;EAC1B;EAEA,IAAM8vJ,gCAAgC,GAAG,SAAnCA,gCAAgCA,CAAA,EAAe;IACjD,IAAI,CAACn5J,MAAM,CAACkJ,SAAS,IAAIlJ,MAAM,CAACq5B,YAAY,GAAGr5B,MAAM,CAACs5B,UAAU,IAAI,CAACt5B,MAAM,CAACqB,QAAQ,CAAC,oCAAoC;MACrHrB,MAAM,CAACq5B,YAAY,EAAE;MAErBv1B,CAAC,CAACC,OAAO,CAAC,CAAC;MACX/D,MAAM,CAACkJ,SAAS,GAAG,IAAI;MACvBgV,WAAW,CAACslF,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAACx/F,IAAI,CAAC,UAAUqF,GAAG,EAAE;QAE7D+wB,QAAQ,CAAC/wB,GAAG,CAACjD,MAAM,CAAC;QAEpB,IAAI6yJ,UAAU,GAAG9nG,OAAO,CAAC9nD,GAAG,EAAE,cAAc,EAAE,IAAI,CAAC;QAEnD,IAAIqvJ,kBAAkB,GAAGO,UAAU,CAACvvJ,KAAK,CAAC,CAAC1J,MAAM,CAACq5B,YAAY,GAAG,CAAC,IAAIr5B,MAAM,CAACu5B,WAAW,EAAEv5B,MAAM,CAACu5B,WAAW,GAAIv5B,MAAM,CAACq5B,YAAa,CAAC;QAErIv1B,CAAC,CAACmC,IAAI,CAACyyJ,kBAAkB,EAAE,UAAUxyJ,GAAG,EAAEtG,EAAE,EAAE;UAC1C,IAAI,CAACI,MAAM,CAAC04J,kBAAkB,CAAC3yJ,MAAM,CAAC,UAAUo0B,GAAG,EAAE;YACjD,OAAOA,GAAG,CAACvD,MAAM,KAAKh3B,EAAE,CAACg3B,MAAM;UACnC,CAAC,CAAC,CAACxwB,MAAM,GAAG,CAAC,EAAE;YACXpG,MAAM,CAAC04J,kBAAkB,CAACryJ,IAAI,CAACzG,EAAE,CAAC;UACtC;QACJ,CAAC,CAAC;QACFkE,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAACkJ,SAAS,GAAG,KAAK;MAC5B,CAAC,EACD,UAAU/E,GAAG,EAAE;QACXL,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAACkJ,SAAS,GAAG,KAAK;QACxB/I,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/B,CAAC,CAAC;IACN;EACJ,CAAC;EAEDk2B,iBAAiB,CAAC8+H,gCAAgC,CAAC;EAEnDn5J,MAAM,CAACqC,GAAG,CAAC,UAAU,EAAE,YAAY;IAC/B;IACA64B,SAAS,CAAC2oB,MAAM,CAAC7jD,MAAM,CAAC84J,SAAS,CAAC;IAClC94J,MAAM,CAAC84J,SAAS,GAAG,IAAI;EAC3B,CAAC,CAAC;EAGF94J,MAAM,CAACg5J,aAAa,GAAG,KAAK;EAC5Bh5J,MAAM,CAAC0nI,qBAAqB,GAAG,UAAU0xB,QAAQ,EAAE;IAC/Cp5J,MAAM,CAACg8C,MAAM,GAAG,CAAC;IACjBh8C,MAAM,CAACg5J,aAAa,GAAG,IAAI;IAC3B,IAAGI,QAAQ,EAAE;MACTt1J,CAAC,CAACC,OAAO,CAAC,CAAC;IACf;;IAEA;IACA;;IAEA,OAAOma,WAAW,CAACwpH,qBAAqB,CAAC,CAAC,EAAE1nI,MAAM,CAACu5B,WAAW,EAAEr5B,aAAa,CAACiN,YAAY,CAAC,CAC1FnJ,IAAI,CAAC,UAAUC,IAAI,EAAE;MAClBjE,MAAM,CAAC24J,iBAAiB,GAAG,EAAE;MAC7B34J,MAAM,CAACq5B,YAAY,GAAG,CAAC;MAEvB,IAAIn1B,IAAI,GAAG,EAAE;MACb,IAAIlE,MAAM,CAACmhJ,SAAS,KAAK,EAAE,EAAE;QACzBj9I,IAAI,GAAGitD,OAAO,CAACltD,IAAI,CAACC,IAAI,CAAC81B,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC;MACvD,CAAC,MAAM;QACH,IAAIlnB,OAAO,GAAG9S,MAAM,CAACihJ,UAAU,KAAK,MAAM;QAC1C,IAAIiE,KAAK,GAAGC,kBAAkB,CAACnlJ,MAAM,CAACmhJ,SAAS,CAAC;QAChDj9I,IAAI,GAAGitD,OAAO,CAACltD,IAAI,CAACC,IAAI,CAAC81B,MAAM,EAAEkrH,KAAK,EAAEpyI,OAAO,CAAC;MACpD;MAEAsnB,QAAQ,CAACn2B,IAAI,CAACC,IAAI,CAAC60B,KAAK,CAAC;MACzBj1B,CAAC,CAACmC,IAAI,CAAC/B,IAAI,EAAE,UAAUgC,GAAG,EAAEtG,EAAE,EAAE;QAC5B,IAAI8U,CAAC,GAAG;UACJkiB,MAAM,EAAEh3B,EAAE,CAACm0F,OAAO;UAClBrH,YAAY,EAAE9sF,EAAE,CAAC+nI,SAAS;UAC1BrvG,WAAW,EAAE14B,EAAE,CAAC04B,WAAW;UAC3B43G,KAAK,EAAEtwI,EAAE,CAACswI,KAAK;UACf9kG,IAAI,EAAE;YAAEjd,QAAQ,EAAEvuB,EAAE,CAACoxB,mBAAmB,IAAIpxB,EAAE,CAACk3B;UAAS,CAAC;UACzDuiI,QAAQ,EAAEz5J,EAAE,CAACy5J,QAAQ;UACrB;UACAtpJ,QAAQ,EAAEnQ,EAAE,CAACu8B;QACjB,CAAC;QAEDznB,CAAC,CAAC2kJ,QAAQ,GAAGH,gBAAgB,CAACxkJ,CAAC,CAAC2kJ,QAAQ,CAAC;QACzCr5J,MAAM,CAAC24J,iBAAiB,CAACtyJ,IAAI,CAACqO,CAAC,CAAC;MACpC,CAAC,CAAC;MAEF1U,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;IAC7B,CAAC,CAAC,WACM,CAAC,YAAW;MAChB,IAAGusI,QAAQ,EAAE;QACTt1J,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB;MACArE,MAAM,CAACg5J,aAAa,GAAG,KAAK;IAChC,CAAC,CAAC;EACN,CAAC;EAED,IAAMM,+BAA+B,GAAG,SAAlCA,+BAA+BA,CAAA,EAAe;IAChD,IAAI,CAACt5J,MAAM,CAACkJ,SAAS,IAAIlJ,MAAM,CAACq5B,YAAY,GAAGr5B,MAAM,CAACs5B,UAAU,IAAIt5B,MAAM,CAACqB,QAAQ,CAAC,mCAAmC;MACnHrB,MAAM,CAACq5B,YAAY,EAAE;MAErBv1B,CAAC,CAACC,OAAO,CAAC,CAAC;MACX/D,MAAM,CAACkJ,SAAS,GAAG,IAAI;MACvBgV,WAAW,CAACwpH,qBAAqB,CAAC1nI,MAAM,CAACq5B,YAAY,EAAEr5B,MAAM,CAACu5B,WAAW,EAAEr5B,aAAa,CAACiN,YAAY,CAAC,CAACnJ,IAAI,CAAC,UAAUC,IAAI,EAAE;QACxH,IAAIC,IAAI,GAAG,EAAE;QACb,IAAIlE,MAAM,CAACmhJ,SAAS,KAAK,EAAE,EAAE;UACzBj9I,IAAI,GAAGitD,OAAO,CAACltD,IAAI,CAACC,IAAI,CAAC81B,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC;QACvD,CAAC,MAAM;UACH,IAAIlnB,OAAO,GAAG9S,MAAM,CAACihJ,UAAU,KAAK,MAAM;UAC1C,IAAIiE,KAAK,GAAGC,kBAAkB,CAACnlJ,MAAM,CAACmhJ,SAAS,CAAC;UAChDj9I,IAAI,GAAGitD,OAAO,CAACltD,IAAI,CAACC,IAAI,CAAC81B,MAAM,EAAEkrH,KAAK,EAAEpyI,OAAO,CAAC;QACpD;QAEAsnB,QAAQ,CAACn2B,IAAI,CAACC,IAAI,CAAC60B,KAAK,CAAC;QAEzBj1B,CAAC,CAACmC,IAAI,CAAC/B,IAAI,EAAE,UAAUgC,GAAG,EAAEtG,EAAE,EAAE;UAC5B,IAAI,CAACI,MAAM,CAAC24J,iBAAiB,CAAC5yJ,MAAM,CAAC,UAAUo0B,GAAG,EAAE;YAChD,OAAOA,GAAG,CAACvD,MAAM,KAAKh3B,EAAE,CAACm0F,OAAO;UACpC,CAAC,CAAC,CAAC3tF,MAAM,GAAG,CAAC,EAAE;YAEX,IAAIsO,CAAC,GAAG;cACJkiB,MAAM,EAAEh3B,EAAE,CAACm0F,OAAO;cAClBrH,YAAY,EAAE9sF,EAAE,CAAC+nI,SAAS;cAC1BrvG,WAAW,EAAE14B,EAAE,CAAC04B,WAAW;cAC3B43G,KAAK,EAAEtwI,EAAE,CAACswI,KAAK;cACf9kG,IAAI,EAAE;gBAAEjd,QAAQ,EAAEvuB,EAAE,CAACoxB,mBAAmB,IAAIpxB,EAAE,CAACk3B;cAAS,CAAC;cACzDuiI,QAAQ,EAAEz5J,EAAE,CAACy5J,QAAQ;cACrB;cACAtpJ,QAAQ,EAAEnQ,EAAE,CAACu8B;YACjB,CAAC;YAEDznB,CAAC,CAAC2kJ,QAAQ,GAAGH,gBAAgB,CAACxkJ,CAAC,CAAC2kJ,QAAQ,CAAC;YACzCr5J,MAAM,CAAC24J,iBAAiB,CAACtyJ,IAAI,CAACqO,CAAC,CAAC;UACpC;QACJ,CAAC,CAAC;QACF5Q,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAACkJ,SAAS,GAAG,KAAK;QAExBlJ,MAAM,CAAC64J,gBAAgB,CAAC,CAAC;MAC7B,CAAC,EACG,UAAU10J,GAAG,EAAE;QACXL,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAACkJ,SAAS,GAAG,KAAK;QACxB/I,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/B,CAAC,CAAC;IACV;EACJ,CAAC;EAEDk2B,iBAAiB,CAACi/H,+BAA+B,CAAC;EAElDt5J,MAAM,CAACywG,YAAY,GAAG,UAAU74E,MAAM,EAAE;IACpCv4B,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAEC,IAAI,CAACC,SAAS,CAAC;MAAEC,MAAM,EAAEA,MAAM;MAAE0xG,QAAQ,EAAE;IAAK,CAAC,CAAC,CAAC;IAC/Fz/G,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;EAC3B,CAAC;EAED9sB,MAAM,CAAC6sB,gBAAgB,GAAG,YAAY;IAClC5sB,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;EACxC,CAAC;EAGD,SAASovB,QAAQA,CAAClO,KAAK,EAAE;IACrB,IAAIqO,IAAI,GAAGv6B,MAAM,CAACu5B,WAAW;IAC7Bv5B,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACtO,KAAK,GAAGqO,IAAI,CAAC;IAC3Cv6B,MAAM,CAACw5B,YAAY,GAAGtN,KAAK;IAC3B,IAAIlsB,MAAM,CAACs5B,UAAU,KAAK,CAAC,EAAE;MACzBt5B,MAAM,CAACs5B,UAAU,GAAG,CAAC;IACzB;EACJ;EAEAt5B,MAAM,CAAC0iH,UAAU,GAAG,UAAU62C,UAAU,EAAE;IACtC,IAAIA,UAAU,GAAG,CAAC,IAAIA,UAAU,IAAIv5J,MAAM,CAACs5B,UAAU,EAAE;MACnDt5B,MAAM,CAACq5B,YAAY,GAAGkgI,UAAU;MAChC,IAAIv5J,MAAM,CAACg8C,MAAM,KAAK,CAAC,EAAE;QACrBh8C,MAAM,CAAC0nI,qBAAqB,CAAC,IAAI,CAAC;MACtC,CAAC,MAAM;QACH1nI,MAAM,CAAC44J,sBAAsB,CAAC,CAAC;MACnC;IACJ;EACJ,CAAC;EAGD54J,MAAM,CAACsqB,eAAe,GAAGjqB,aAAa,CAACiqB,eAAe;EAEtDtqB,MAAM,CAACihJ,UAAU,GAAG,MAAM;EAC1BjhJ,MAAM,CAACkhJ,MAAM,GAAG,KAAK;EACrBlhJ,MAAM,CAACmhJ,SAAS,GAAG,EAAE;EAErBnhJ,MAAM,CAACmvG,iBAAiB,GAAG,MAAM;EACjCnvG,MAAM,CAAC0wG,aAAa,GAAG,KAAK;EAC5B1wG,MAAM,CAAC2wG,gBAAgB,GAAG,EAAE;EAE5B3wG,MAAM,CAAC2gD,IAAI,GAAG,UAAUjwC,KAAK,EAAEmgG,SAAS,EAAE;IACtC7wG,MAAM,CAACq5B,YAAY,GAAG,CAAC;IACvBr5B,MAAM,CAACihJ,UAAU,GAAGpwC,SAAS;IAC7B7wG,MAAM,CAACmhJ,SAAS,GAAGzwI,KAAK;IACxB1Q,MAAM,CAACiiH,OAAO,GAAG;MAAEyO,SAAS,EAAEhgH,KAAK;MAAEkgH,SAAS,EAAE/f;IAAU,CAAC;IAC3D7wG,MAAM,CAAC0nI,qBAAqB,CAAC,IAAI,CAAC;IAElC,IAAI1nI,MAAM,CAACkhJ,MAAM,KAAK,MAAM,EAAE;MAC1BlhJ,MAAM,CAACkhJ,MAAM,GAAG,KAAK;IACzB,CAAC,MAAM;MACHlhJ,MAAM,CAACkhJ,MAAM,GAAG,MAAM;IAC1B;IAEAlhJ,MAAM,CAAC64J,gBAAgB,CAAC,CAAC;EAC7B,CAAC;EAED74J,MAAM,CAAC4wG,WAAW,GAAG,UAAUlgG,KAAK,EAAEmgG,SAAS,EAAE;IAC7C7wG,MAAM,CAACmvG,iBAAiB,GAAG0B,SAAS;IACpC7wG,MAAM,CAAC2wG,gBAAgB,GAAGjgG,KAAK;IAC/B,IAAIoC,OAAO,GAAG9S,MAAM,CAACmvG,iBAAiB,KAAK,MAAM;IACjDnvG,MAAM,CAAC04J,kBAAkB,GAAGvnG,OAAO,CAACnxD,MAAM,CAAC04J,kBAAkB,EAAEhoJ,KAAK,EAAEoC,OAAO,CAAC;IAE9E,IAAI9S,MAAM,CAAC0wG,aAAa,KAAK,MAAM,EAAE;MACjC1wG,MAAM,CAAC0wG,aAAa,GAAG,KAAK;IAChC,CAAC,MAAM;MACH1wG,MAAM,CAAC0wG,aAAa,GAAG,MAAM;IACjC;EACJ,CAAC;EAED,SAASy0C,kBAAkBA,CAACz0I,KAAK,EAAE;IAC/B,QAAQA,KAAK;MACT,KAAK,MAAM;QACP,OAAO,WAAW;MACtB,KAAK,SAAS;QACV,OAAO,oBAAoB;MAC/B,KAAK,QAAQ;QACT,OAAO,sBAAsB;IAErC;EACJ;EAAC;EAGD1Q,MAAM,CAAC2kB,UAAU,GAAG,UAAU3b,GAAG,EAAE;IAC/B,OAAO2b,UAAU,CAAC3b,GAAG,CAAC,CAAC8rE,OAAO,CAAC,CAAC,CAAC;EACrC,CAAC;EAED90E,MAAM,CAACqB,QAAQ,GAAGnB,aAAa,CAACmB,QAAQ;EACxC,IAAIrB,MAAM,CAACqB,QAAQ,KAAK,KAAK,EAAE;IAC3BrB,MAAM,CAACg8C,MAAM,GAAG,CAAC;EACrB,CAAC,MACGh8C,MAAM,CAACg8C,MAAM,GAAG,CAAC;EAErBh8C,MAAM,CAACqC,GAAG,CAAC,+BAA+B,EAAE,UAAUC,KAAK,EAAEC,MAAM,EAAE;IACjEvC,MAAM,CAACqB,QAAQ,GAAGkB,MAAM;IACxB,IAAIvC,MAAM,CAACqB,QAAQ,KAAK,KAAK,EAAE;MAC3ByC,CAAC,CAAC,yBAAyB,CAAC,CAACU,OAAO,CAAC,OAAO,CAAC;IACjD;EACJ,CAAC,CAAC;AACN,CAAC,CAAC,CAAC,C;;;;;;;;;;;ACpVP1E,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CAACO,UAAU,CAAC,gCAAgC,EACjE,CAAC,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EACjF,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAC1E,IAAI,EAAE,+BAA+B,EAAE,qBAAqB,EAC5D,UAAUE,UAAU,EAAED,MAAM,EAAEE,aAAa,EAAEI,QAAQ,EAAED,aAAa,EAAEmpB,YAAY,EAC9EkzB,aAAa,EAAE7yB,SAAS,EAAE1pB,YAAY,EAAEK,QAAQ,EAAEC,cAAc,EAChEE,EAAE,EAAEyiD,6BAA6B,EAAE6qB,mBAAmB,EAAE;EACxDjuE,MAAM,CAACq1D,MAAM,GAAGn1D,aAAa;EAE7BF,MAAM,CAACyiE,KAAK,GAAG,YAAY;IACvBziE,MAAM,CAACggD,OAAO,GAAG,IAAI;IACrBhgD,MAAM,CAACy/C,QAAQ,GAAG,IAAI;IACtBz/C,MAAM,CAACuwB,UAAU,GAAG,IAAI;IACxBvwB,MAAM,CAACw5J,UAAU,GAAG,CAAC,CAAC,CAAC;IACvBx5J,MAAM,CAACy5J,kBAAkB,GAAG,IAAI;IAChCz5J,MAAM,CAAC05J,cAAc,GAAG,IAAI;IAC5B15J,MAAM,CAAC25J,gBAAgB,GAAG,IAAI;EAClC,CAAC;EAED35J,MAAM,CAACyiE,KAAK,CAAC,CAAC;EAEdziE,MAAM,CAACqC,GAAG,CAAC,eAAe,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAC/ClE,MAAM,CAACyiE,KAAK,CAAC,CAAC;IAEd,IAAIviE,aAAa,CAAC2L,QAAQ,EAAE;MACxB7G,OAAO,CAACC,GAAG,CAAC,eAAe,CAAC;MAC5B4F,QAAQ,CAACC,IAAI,CAAC,CAAC;IACnB,CAAC,MACI;MACDzK,aAAa,CAAC0K,YAAY,CAAC,CAAC;IAChC;IAEAjH,CAAC,CAACC,OAAO,CAAC,CAAC;IACX24C,aAAa,CAACuyD,aAAa,CAAC/uG,aAAa,CAACmkC,WAAW,CAAC,CAACrgC,IAAI,CAAC,UAAUC,IAAI,EAAE;MAExEjE,MAAM,CAACggD,OAAO,GAAG/7C,IAAI,CAACi7C,OAAO,GAAGj7C,IAAI,CAACi7C,OAAO,GAAGj7C,IAAI,CAACC,IAAI,CAACg7C,OAAO;MAChEl/C,MAAM,CAACy/C,QAAQ,GAAGv/C,aAAa,CAACiN,YAAY;MAC5CnN,MAAM,CAACuwB,UAAU,GAAGrwB,aAAa,CAAC8rB,cAAc;;MAEhD;MACA;MACA,IAAIgrE,GAAG,GAAG92F,aAAa,CAACgkC,oBAAoB,GAAGlkC,MAAM,CAAC45J,eAAe,CAAC,CAAC,GAAG,IAAI;MAC9E15J,aAAa,CAACgkC,oBAAoB,GAAG,IAAI;MACzC,IAAI,CAAC,CAAC8yD,GAAG,IAAI,CAAC,CAACA,GAAG,CAACkL,MAAM,EAAE;QACvB,IAAI,CAACliG,MAAM,CAAC65J,uBAAuB,CAAC7iE,GAAG,CAACkL,MAAM,EAAE,IAAI,CAAC,EACjDlL,GAAG,GAAG,IAAI;MAClB;MACAlzF,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb7D,QAAQ,CAAC,YAAY;QACjB0E,WAAW,CAAC,CAAC;QACb1E,QAAQ,CAAC,YAAY;UAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;QAAE,CAAC,CAAC;MACpE,CAAC,CAAC;MAEF,IAAI,CAACwyF,GAAG,EAAE;QACN32F,aAAa,CAAC8E,UAAU,CAAC7E,QAAQ,CAAC;MACtC,CAAC,MACI;QACDN,MAAM,CAAC85J,SAAS,CAAC9iE,GAAG,CAAC8M,QAAQ,EAAE9M,GAAG,CAACkL,MAAM,CAAC;MAC9C;IACJ,CAAC,EACG,UAAU/9F,GAAG,EAAE;MACXhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC3BL,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACV,CAAC,CAAC;EAEFrE,MAAM,CAAC45J,eAAe,GAAG,YAAY;IACjC,IAAI;MACA,IAAIG,WAAW,GAAG/5J,MAAM,CAACggD,OAAO,CAACj6C,MAAM,CAAC,UAAUnG,EAAE,EAAE;QAAE,OAAOA,EAAE,CAAC4rC,WAAW,IAAIxrC,MAAM,CAACy/C,QAAQ;MAAE,CAAC,CAAC;MACpG,IAAIs6G,WAAW,CAAC3zJ,MAAM,IAAI,CAAC,EAAE,OAAO,IAAI;MAExC,IAAI4zJ,aAAa,GAAGD,WAAW,CAAC,CAAC,CAAC,CAACz3D,UAAU,CAACv8F,MAAM,CAAC,UAAUnG,EAAE,EAAE;QAAE,OAAOA,EAAE,CAAC2iG,aAAa,IAAIviG,MAAM,CAACuwB,UAAU;MAAE,CAAC,CAAC;MACrH,IAAIypI,aAAa,CAAC5zJ,MAAM,IAAI,CAAC,EAAE,OAAO,IAAI;MAE1C,OAAO;QACH87F,MAAM,EAAE63D,WAAW,CAAC,CAAC,CAAC;QACtBj2D,QAAQ,EAAEk2D,aAAa,CAAC,CAAC;MAC7B,CAAC;IACL,CAAC,CACD,OAAOlqG,EAAE,EAAE;MACP,OAAO,IAAI;IACf;EAEJ,CAAC;EAED9vD,MAAM,CAAC85J,SAAS,GAAG,UAAUh2D,QAAQ,EAAE5B,MAAM,EAAE;IAC3C,IAAIz3B,GAAG,GAAG,CAACy3B,MAAM,GAAG,IAAI,CAAC9rC,OAAO,CAACtsD,IAAI,GAAGo4F,MAAM;IAC9CxlD,aAAa,CAACy4D,6BAA6B,CAACjT,MAAM,CAAC;IAEnDhiG,aAAa,CAACorC,aAAa,CAACm/B,GAAG,CAAC;IAChCvqE,aAAa,CAACstC,eAAe,CAACs2D,QAAQ,CAACjiC,IAAI,EAAEiiC,QAAQ,CAACvB,aAAa,EAAEuB,QAAQ,CAACvlF,kBAAkB,EAAEulF,QAAQ,CAACm2D,SAAS,EAChHn2D,QAAQ,CAACo2D,cAAc,EAAEp2D,QAAQ,CAACq2D,cAAc,EAAEr2D,QAAQ,CAACqlB,UAAU,EACrErlB,QAAQ,CAACs2D,YAAY,EAAEt2D,QAAQ,CAACu2D,cAAc,EAAEv2D,QAAQ,CAACw2D,YAAY,EACrEx2D,QAAQ,CAACy2D,gBAAgB,EAAEz2D,QAAQ,CAAC02D,sBAAsB,EAAE12D,QAAQ,CAAC22D,uBAAuB,CAAC;IACjGv6J,aAAa,CAACwpC,8BAA8B,CAACo6D,QAAQ,CAAC;IAEtD,IAAI,CAAC5B,MAAM,EAAE;MACT7hG,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,CAAC;IACvC;IAEAo6J,SAAS,CAAC,CAAC;IACX52J,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,OAAOylB,YAAY,CAACmxI,OAAO,CAACv3G,6BAA6B,EAAE,IAAI,CAAC,CAC3Dp/C,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,OAAOrJ,MAAM,CAAC46J,YAAY,CAACvxJ,GAAG,CAAC;IACnC,CAAC,CAAC,CACDrF,IAAI,CAAC,YAAY;MACd/D,UAAU,CAAC+K,UAAU,CAAC,sBAAsB,EAAE;QAC1CikE,UAAU,EAAExE,GAAG,CAAC//C,UAAU;QAC1B+iB,YAAY,EAAEq2D,QAAQ,CAACjiC;MAC3B,CAAC,CAAC;;MAEF;IACJ,CAAC,CAAC,SACI,CAAC,UAAU19D,GAAG,EAAE;MAClBa,OAAO,CAAC20C,OAAO,CAAC,UAAU,CAAC;MAC3Bt5C,aAAa,CAAC+L,WAAW,CAAC,wBAAwB,CAAC;MAC/CnM,UAAU,CAAC0kI,qBAAqB,GAAG,KAAK;MACxC7gI,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb4pE,mBAAmB,CAAC4B,MAAM,CAAC,CAAC;MAE5B1vE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAEwrE,MAAM,CAAC;IACvC,CAAC,CAAC,WACE,CAAC,YAAY;MACjB7rE,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EAEV,CAAC;EAEDrE,MAAM,CAAC66J,SAAS,GAAG,YAAY;IAC3B76J,MAAM,CAAC86J,gBAAgB,CAAC96J,MAAM,CAAC05J,cAAc,CAAC;EAClD,CAAC;EAED15J,MAAM,CAAC+6J,WAAW,GAAG,YAAY;IAC7B/6J,MAAM,CAACg7J,UAAU,CAACh7J,MAAM,CAAC25J,gBAAgB,CAAC;IAC1C30J,OAAO,CAACC,GAAG,CAACjF,MAAM,CAACw5J,UAAU,CAAC;EAClC,CAAC;EAEDx5J,MAAM,CAAC65J,uBAAuB,GAAG,UAAUoB,SAAS,EAAE1c,UAAU,EAAE;IAC9D,IAAI2c,UAAU,GAAG,CAACD,SAAS,IAAI,CAACA,SAAS,CAAC34D,UAAU,IAAI24D,SAAS,CAAC34D,UAAU,CAACl8F,MAAM,IAAI,CAAC;IAExF,IAAI80J,UAAU,IAAI3c,UAAU,KAAK,IAAI,EAAE;MACnCp+I,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,gJAAgJ,CAAC,EAC7L,YAAY;QACRxB,MAAM,CAACw5J,UAAU,GAAG,CAAC;MACzB,CAAC,CAAC;IACV;IAEA,OAAO,CAAC0B,UAAU;EACtB,CAAC;EAEDl7J,MAAM,CAAC86J,gBAAgB,GAAG,UAAUhxJ,IAAI,EAAE;IACtC,IAAI,CAAC9J,MAAM,CAAC65J,uBAAuB,CAAC/vJ,IAAI,CAAC,EAAE,OAAO,KAAK;IAEvD9J,MAAM,CAACy5J,kBAAkB,GAAG3vJ,IAAI;IAChC9J,MAAM,CAACw5J,UAAU,GAAG,CAAC;IACrBx5J,MAAM,CAACy/C,QAAQ,GAAG31C,IAAI,CAAC0hC,WAAW;IAElChrC,QAAQ,CAAC,YAAY;MACjB0E,WAAW,CAAC,CAAC;MACb1E,QAAQ,CAAC,YAAY;QAAEsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MAAE,CAAC,CAAC;IACpE,CAAC,CAAC;IACF,OAAO,KAAK;EAChB,CAAC;EAED,IAAImrE,MAAM,GAAG,SAATA,MAAMA,CAAA,EAAe;IACrBnvE,QAAQ,CAAC,YAAY;MACjBsD,CAAC,CAACO,SAAS,CAAC,CAAC;MACbpE,UAAU,CAAC+K,UAAU,CAAC,eAAe,CAAC;MAEtCijE,mBAAmB,CAAC4B,MAAM,CAAC,CAAC;IAEhC,CAAC,CAAC;EACN,CAAC;EAED7vE,MAAM,CAACg7J,UAAU,GAAG,UAAUlxJ,IAAI,EAAE;IAEhC4yC,aAAa,CAACy4D,6BAA6B,CAACn1G,MAAM,CAAC05J,cAAc,CAAC;IAElEx5J,aAAa,CAACorC,aAAa,CAACtrC,MAAM,CAACy5J,kBAAkB,CAAC;IACtDv5J,aAAa,CAACstC,eAAe,CAAC1jC,IAAI,CAAC+3D,IAAI,EAAE/3D,IAAI,CAACy4F,aAAa,EAAEz4F,IAAI,CAACyU,kBAAkB,EAAEzU,IAAI,CAACmwJ,SAAS,EAChGnwJ,IAAI,CAACowJ,cAAc,EAAEpwJ,IAAI,CAACqwJ,cAAc,EAAErwJ,IAAI,CAACq/G,UAAU,EACzDr/G,IAAI,CAACswJ,YAAY,EAAEtwJ,IAAI,CAACuwJ,cAAc,EAAEvwJ,IAAI,CAACwwJ,YAAY,EACzDxwJ,IAAI,CAACywJ,gBAAgB,EAAEzwJ,IAAI,CAAC0wJ,sBAAsB,EAAE1wJ,IAAI,CAAC2wJ,uBAAuB,CAAC;IACrFv6J,aAAa,CAACwpC,8BAA8B,CAAC5/B,IAAI,CAAC;;IAElD;;IAEA;IACA,IAAI1C,KAAK,GAAGpH,MAAM;IAElBK,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,EAAE,YAAY;MAC5CE,QAAQ,CAAC,YAAY;QACjBk6J,SAAS,CAAC,CAAC;QACX52J,CAAC,CAACC,OAAO,CAAC,CAAC;QAEXylB,YAAY,CAACmxI,OAAO,CAACv3G,6BAA6B,EAAE,IAAI,CAAC,CACpDp/C,IAAI,CAAC,UAAUqF,GAAG,EAAE;UACjB,OAAOrJ,MAAM,CAAC46J,YAAY,CAACvxJ,GAAG,CAAC;QACnC,CAAC,CAAC,CACDrF,IAAI,CAAC,YAAY;UACd/D,UAAU,CAAC+K,UAAU,CAAC,sBAAsB,EAAE;YAC1CikE,UAAU,EAAEjvE,MAAM,CAACy5J,kBAAkB,CAAC/uI,UAAU;YAChD+iB,YAAY,EAAE3jC,IAAI,CAAC+3D;UACvB,CAAC,CAAC;QACN,CAAC,CAAC,SACI,CAAC,UAAU19D,GAAG,EAAE;UAClBa,OAAO,CAAC20C,OAAO,CAAC,UAAU,CAAC;UAC3Bt5C,aAAa,CAAC+L,WAAW,CAAC,wBAAwB,CAAC;UACnDnM,UAAU,CAAC0kI,qBAAqB,GAAG,KAAK;UACxC7gI,CAAC,CAACO,SAAS,CAAC,CAAC;UAEb4pE,mBAAmB,CAAC4B,MAAM,CAAC,CAAC;UAE5B1vE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAEwrE,MAAM,CAAC;QACvC,CAAC,CAAC,WACM,CAAC,YAAY;UACjB7rE,CAAC,CAACO,SAAS,CAAC,CAAC;QACjB,CAAC,CAAC;MACV,CAAC,EAAE,CAAC,CAAC;IACT,CAAC,CAAC;IAEF,OAAO,KAAK;EAChB,CAAC;EAEDrE,MAAM,CAAC46J,YAAY,GAAG,UAAUvxJ,GAAG,EAAE;IAEjC,IAAIpF,IAAI,GAAIoF,GAAG,IAAIA,GAAG,CAACjD,MAAM,GAAG,CAAC,GAAIiD,GAAG,CAACA,GAAG,CAACjD,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IAEjEpB,OAAO,CAAC20C,OAAO,CAAC,UAAU,CAAC;IAE3B15C,UAAU,CAAC+K,UAAU,CAAC,aAAa,EAAE;MACjC8jE,UAAU,EAAE;IAChB,CAAC,CAAC;IAEFzuE,aAAa,CAAC+L,WAAW,CAAC,wBAAwB,CAAC;IACnDnM,UAAU,CAAC0kI,qBAAqB,GAAG,KAAK;IAGxC,IAAI,CAAC,CAACzkI,aAAa,CAACghG,kBAAkB,IAAIhhG,aAAa,CAACghG,kBAAkB,GAAG,CAAC,EAAE;MAC5EjhG,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;QACnC6P,OAAO,EAAEpa,cAAc,CAACe,SAAS,CAAC,wGAAwG;MAC9I,CAAC,CAAC;IACN;;IAEhB;IACA;IACgBgoB,YAAY,CAAC2xI,YAAY,GAAG,KAAK;IAEjC3jI,YAAY,CAACC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;IAC1C,IAAIxzB,IAAI,CAAC,CAAC,CAAC,EAAE;MAC7B;MACoB4lB,SAAS,CAACiD,IAAI,CAAC,OAAO,CAAC;IAC3B,CAAC,MAAM;MACvB;MACoBjD,SAAS,CAACiD,IAAI,CAAC,oBAAoB,CAAC;IACxC;IAEA,IAAIvhB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;IACrB,IAAI65B,CAAC,GAAG33B,QAAQ,CAACG,OAAO;IACpB;IACA;IACA;IACA;IACA;IACA;IACA;;IAEJ,OAAOw3B,CAAC;EACZ,CAAC;EAEDljC,MAAM,CAACo7J,UAAU,GAAG,UAAUC,QAAQ,EAAEn5D,MAAM,EAAE;IAC5CxlD,aAAa,CAACy4D,6BAA6B,CAACjT,MAAM,CAAC;IAEnDhiG,aAAa,CAACorC,aAAa,CAAC42D,MAAM,CAAC;IACnChiG,aAAa,CAACstC,eAAe,CAAC6tH,QAAQ,CAACx5F,IAAI,EAAEw5F,QAAQ,CAAC94D,aAAa,EAAE84D,QAAQ,CAAC98I,kBAAkB,EAAE88I,QAAQ,CAACpB,SAAS,EAChHoB,QAAQ,CAACnB,cAAc,EAAEmB,QAAQ,CAAClB,cAAc,EAAEkB,QAAQ,CAAClyC,UAAU,EACrEkyC,QAAQ,CAACjB,YAAY,EAAEiB,QAAQ,CAAChB,cAAc,EAAEgB,QAAQ,CAACf,YAAY,EACrEe,QAAQ,CAACd,gBAAgB,EAAEc,QAAQ,CAACb,sBAAsB,EAAEa,QAAQ,CAACZ,uBAAuB,CAAC;IACjGv6J,aAAa,CAACwpC,8BAA8B,CAAC2xH,QAAQ,CAAC;IAEtDp7J,UAAU,CAAC+K,UAAU,CAAC,wBAAwB,CAAC;IAE/C/K,UAAU,CAAC+K,UAAU,CAAC,sBAAsB,EAAE;MAC1CikE,UAAU,EAAEizB,MAAM,CAACx3E,UAAU;MAC7B+iB,YAAY,EAAE4tH,QAAQ,CAACx5F;IAC3B,CAAC,CAAC;EAEN,CAAC;EAED7hE,MAAM,CAACs7J,WAAW,GAAG,YAAY;IAC7Bj7J,aAAa,CAAC+L,WAAW,CAAC9L,QAAQ,EAAE,YAAY;MAC5CE,QAAQ,CAAC,YAAY;QACjBP,UAAU,CAAC+K,UAAU,CAAC,YAAY,CAAC;MACvC,CAAC,EAAE,CAAC,CAAC;IACT,CAAC,CAAC;EACN,CAAC;EAED,SAAS0vJ,SAASA,CAAA,EAAG;IACjBl6J,QAAQ,CAAC,YAAY;MACjBP,UAAU,CAAC+K,UAAU,CAAC,YAAY,CAAC;IACvC,CAAC,CAAC;EACN;EAEAhL,MAAM,CAACqC,GAAG,CAAC,iCAAiC,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAEjEw4C,aAAa,CAACuyD,aAAa,CAAC/uG,aAAa,CAACmkC,WAAW,CAAC,CAACrgC,IAAI,CAAC,UAAUC,IAAI,EAAE;MAExE,IAAI+7C,OAAO,GAAG/7C,IAAI,CAACi7C,OAAO,GAAGj7C,IAAI,CAACi7C,OAAO,GAAGj7C,IAAI,CAACC,IAAI,CAACg7C,OAAO;MAC7D,IAAIO,QAAQ,GAAGv/C,aAAa,CAACiN,YAAY;MACzC,IAAIojB,UAAU,GAAGrwB,aAAa,CAAC8rB,cAAc;MAC7C,IAAIguI,aAAa,GAAG,KAAK;MAEzBl2J,CAAC,CAACmC,IAAI,CAAC+5C,OAAO,EAAE,UAAUu7G,IAAI,EAAEC,GAAG,EAAE;QACjC,IAAIA,GAAG,CAAChwH,WAAW,KAAKiU,QAAQ,EAAE;UAC9B37C,CAAC,CAACmC,IAAI,CAACu1J,GAAG,CAACl5D,UAAU,EAAE,UAAU8xC,IAAI,EAAEqnB,GAAG,EAAE;YACxC,IAAIA,GAAG,CAACl5D,aAAa,KAAKhyE,UAAU,EAAE;cAClCvwB,MAAM,CAACo7J,UAAU,CAACK,GAAG,EAAED,GAAG,CAAC;cAC3BxB,aAAa,GAAG,IAAI;cACpB/5J,UAAU,CAAC+K,UAAU,CAAC,gCAAgC,CAAC;YAC3D;UACJ,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;MAEF,IAAIgvJ,aAAa,KAAK,KAAK,EAAE;QACzBl2J,CAAC,CAACO,SAAS,CAAC,CAAC;QAEb,IAAI+P,KAAK,GAAG3T,cAAc,CAACe,SAAS,CAAC,OAAO,CAAC;QAC7C,IAAI2C,GAAG,GAAG1D,cAAc,CAACe,SAAS,CAAC,oHAAoH,CAAC;QACxJrB,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,YAAY;UACpC3D,QAAQ,CAAC,YAAY;YACjBP,UAAU,CAAC+K,UAAU,CAAC,eAAe,CAAC;UAC1C,CAAC,CAAC;QACN,CAAC,EAAEoJ,KAAK,CAAC;MAEb;IAEJ,CAAC,EACG,UAAUjQ,GAAG,EAAE;MACXhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC3BL,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EAEV,CAAC,CAAC;AAGN,CAAC,CAAC,CAAC,C;;;;;;;;;;;;;;AC/V0E;AACvD;AAG9BvE,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CACpB61D,MAAM,CAAC,CAAC,mBAAmB,EAAE,UAAUqmG,iBAAiB,EAAE;EAC3DA,iBAAiB,CAACn0J,OAAO,CAACo0J,SAAS,GAAG,KAAK;AAC3C,CAAC,CAAC,CAAC,CAAC57J,UAAU,CAAC,qBAAqB,EACpC,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EACxF,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,SAAS,EAAC,UAAU,EACnG,UAAUC,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAEC,YAAY,EAAEE,aAAa,EAAE0yB,eAAe,EACrFzyB,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,cAAc,EAAEqyB,oBAAoB,EAAE9I,OAAO,EAAE0+B,QAAQ,EAAE;EAExF1oD,MAAM,CAACwF,UAAU,GAAG,CAAC;EACrBxF,MAAM,CAAC47J,UAAU,GAAG,IAAI;EACxB57J,MAAM,CAAC67J,WAAW,GAAG,CAAC,CAAC;EACvB77J,MAAM,CAAC+tI,aAAa,GAAG,EAAE;EACzB/tI,MAAM,CAAC87J,YAAY,GAAG,EAAE;EACxB97J,MAAM,CAAC+7J,iBAAiB,GAAG,IAAI;EAC/B/7J,MAAM,CAAC2nC,SAAS,GAAGznC,aAAa,CAACynC,SAAS;EAE1C3nC,MAAM,CAACqC,GAAG,CAAC,gBAAgB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAChD,IAAIuiI,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAACh9B,IAAI,CAAC;;IAErD;IACA;IACAlE,MAAM,CAAC+tI,aAAa,GAAGjuI,OAAO,CAAC+F,IAAI,CAAC3B,IAAI,CAACy3B,aAAa,CAAC51B,MAAM,CAAC,UAAUnG,EAAE,EAAE;MAAE,OAAOA,EAAE,CAACg/B,OAAO;IAAE,CAAC,CAAC,CAAC;IAEpG5+B,MAAM,CAACg8J,cAAc,CAAC93J,IAAI,CAAC;IAE3BlE,MAAM,CAACi8J,kBAAkB,CAACx1B,SAAS,CAAC;;IAEpC;IACAzmI,MAAM,CAACk8J,kBAAkB,CAAC,CAAC;IAE3Bh3J,WAAW,CAAC,CAAC;IAEb7E,aAAa,CAAC8E,UAAU,CAAC,cAAc,EAAE,YAAY;MACjDD,WAAW,CAAC,YAAY;QACpB,IAAIsmB,GAAG,GAAG1nB,CAAC,CAAC,IAAI,CAAC,CAAC4V,MAAM,CAAC,CAAC,CAACA,MAAM,CAAC,CAAC;QACnC,IAAIyiJ,GAAG,GAAG3wI,GAAG,CAACna,IAAI,CAAC,4BAA4B,CAAC;QAChD8qJ,GAAG,CAAC,CAAC,CAAC,CAACt1E,cAAc,CAAC,IAAI,CAAC;MAC/B,CAAC,EAAC,UAAUjnF,EAAE,EAAE;QACR,IAAI4rB,GAAG,GAAG1nB,CAAC,CAAClE,EAAE,CAAC,CAAC8Z,MAAM,CAAC,CAAC,CAACA,MAAM,CAAC,CAAC;QACjC,IAAIyiJ,GAAG,GAAG3wI,GAAG,CAACna,IAAI,CAAC,+BAA+B,CAAC;QACnD,IAAI8qJ,GAAG,CAAC/1J,MAAM,GAAG,CAAC,EAAE;UAChB,IAAIwvC,GAAG,GAAG,qEAAqE;UAC/E,IAAIxuC,KAAK,GAAGtH,OAAO,CAACw3C,OAAO,CAAC6kH,GAAG,CAAC,CAAC,CAAC,CAAC,CAACtpG,KAAK,CAAC,CAAC;UAC3C,IAAI1vB,EAAE,GAAGulB,QAAQ,CAAC9S,GAAG,CAAC,CAACxuC,KAAK,CAAC;UAC7B+0J,GAAG,CAAChjD,KAAK,CAACh2E,EAAE,CAAC;QACjB;QACD;MACH,CAAC,EAAE,UAASvjC,EAAE,EAAE;QACZ;QACA,IAAI2hB,CAAC,GAAEzd,CAAC,CAAC,IAAI,CAAC,CAAC4V,MAAM,CAAC,CAAC,CAACA,MAAM,CAAC,CAAC,CAACA,MAAM,CAAC,CAAC,CAACA,MAAM,CAAC,CAAC,CAACA,MAAM,CAAC,CAAC;QAC3D,IAAG6H,CAAC,CAACnb,MAAM,EACPmb,CAAC,CAAC,CAAC,CAAC,CAACslE,cAAc,CAAC,IAAI,CAAC;MACjC,CACJ,CAAC;MAEDrmF,QAAQ,CAAC,YAAY;QACjBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MACzC,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC,CAAC;EAEFxE,MAAM,CAACi8J,kBAAkB,GAAG,UAAUx1B,SAAS,EAAE;IAE7C,IAAIzmI,MAAM,CAAC47J,UAAU,EACjB57J,MAAM,CAAC47J,UAAU,CAAC,CAAC;IACvB57J,MAAM,CAAC47J,UAAU,GAAG,IAAI;;IAExB;IACA,IAAIQ,SAAS,GAAG,EAAE;IAElBt4J,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC+tI,aAAa,EAAE,UAAUv5H,CAAC,EAAE5U,EAAE,EAAE;MAC1C,IAAI6mI,SAAS,EAAE;QACX7mI,EAAE,CAACy8J,SAAS,GAAGz8J,EAAE,CAAC0jC,UAAU;QAC5B1jC,EAAE,CAAC89B,GAAG,GAAG5C,4FAAuB,CAACwhI,aAAa,CAAC18J,EAAE,EAAEM,aAAa,CAACwkC,YAAY,KAAK,MAAM,CAAC;MAC7F,CAAC,MAAM;QACH,IAAI,CAAC9kC,EAAE,CAAC89B,GAAG,EACP99B,EAAE,CAAC89B,GAAG,GAAG,CAAC;QAEd99B,EAAE,CAACy8J,SAAS,GAAGh8J,aAAa,CAAC6uB,SAAS,CAACtvB,EAAE,CAACi9B,YAAY,KAAK,CAAC,GAAGj9B,EAAE,CAACo/B,SAAS,GAAGp/B,EAAE,CAACi9B,YAAY,GAAGj9B,EAAE,CAACm+B,KAAK,EAAE,CAAC,CAAC;QAC5Gn+B,EAAE,CAAC89B,GAAG,GAAG19B,MAAM,CAACgvJ,OAAO,CAACpvJ,EAAE,CAAC;MAC/B;MAEAw8J,SAAS,CAAC/1J,IAAI,CAAC,gBAAgB,GAAGmO,CAAC,GAAG,aAAa,CAAC;IACxD,CAAC,CAAC;;IAEF;IACAxU,MAAM,CAAC47J,UAAU,GAAG57J,MAAM,CAACu8J,WAAW,CAACH,SAAS,EAAE,UAAUhxG,MAAM,EAAEC,MAAM,EAAE;MAExE,KAAK,IAAI72C,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG42C,MAAM,CAAChlD,MAAM,EAAEoO,CAAC,EAAE,EAAE;QACpC,IAAI42C,MAAM,CAAC52C,CAAC,CAAC,KAAK62C,MAAM,CAAC72C,CAAC,CAAC,EAAE;UACzB;UACA,IAAIgpB,SAAS,GAAGx9B,MAAM,CAAC67J,WAAW,CAACzwG,MAAM,CAAC52C,CAAC,CAAC,CAAC;UAC7C,IAAI5U,EAAE,GAAGI,MAAM,CAAC+tI,aAAa,CAACv5H,CAAC,CAAC;UAChC5U,EAAE,CAACm/B,KAAK,GAAGvB,SAAS;UACpB59B,EAAE,CAAC89B,GAAG,GAAG19B,MAAM,CAACgvJ,OAAO,CAACpvJ,EAAE,CAAC;QAC/B;MACJ;IACJ,CAAC,CAAC;EACN,CAAC;EAEDI,MAAM,CAACgvJ,OAAO,GAAG,UAAUpvJ,EAAE,EAAE;IAC3B,IAAI,CAACA,EAAE,IAAI,CAACA,EAAE,CAACm/B,KAAK,EAAE,OAAO,CAAC;IAC9B,IAAIy9H,cAAc,GAAGt8J,aAAa,CAACwkC,YAAY,KAAK,MAAM;IAC1D,OAAOrkC,aAAa,CAAC6uB,SAAS,CAACtvB,EAAE,CAACy8J,SAAS,IACtCG,cAAc,GAAG58J,EAAE,CAACm/B,KAAK,CAACpB,yBAAyB,GAAG/9B,EAAE,CAACm/B,KAAK,CAACtB,yBAAyB,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;EAC5G,CAAC;EAEDz9B,MAAM,CAACg8J,cAAc,GAAG,UAAUS,OAAO,EAAE;IACvC,IAAIh2B,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAACu7H,OAAO,CAAC;IACxDz8J,MAAM,CAAC67J,WAAW,GAAG,CAAC,CAAC;IACvB77J,MAAM,CAAC+pH,QAAQ,GAAG,EAAE;IACpB,IAAI7lE,EAAE,GAAGpkD,OAAO,CAAC+F,IAAI,CAACktB,eAAe,CAACg3F,QAAQ,CAAC;IAC/C,IAAInpH,QAAQ,GAAG67J,OAAO,CAAC77J,QAAQ;;IAE/B;IACA;;IAEA;IACA;IACA;IACA;IACA;IACA;;IAEA,IAAIA,QAAQ,IAAIA,QAAQ,CAACoN,SAAS,EAAE;MAChCk2C,EAAE,CAAC79C,IAAI,CAAC;QACJohG,WAAW,EAAE7mG,QAAQ,CAACi9B,OAAO;QAC7B3vB,yBAAyB,EAAEtN,QAAQ,CAACsN,yBAAyB;QAC7DD,yBAAyB,EAAErN,QAAQ,CAACqN,yBAAyB;QAC7DykF,MAAM,EAAE9xF,QAAQ,CAACoN;MACrB,CAAC,CAAC;IACN;IAEAlK,CAAC,CAACmC,IAAI,CAACi+C,EAAE,EAAE,UAAU1vC,CAAC,EAAE5U,EAAE,EAAE;MACxB,IAAIm4F,EAAE,GAAG;QACLn6D,MAAM,EAAEh+B,EAAE,CAAC8yF,MAAM;QACjBgqE,WAAW,EAAE98J,EAAE,CAAC6nG,WAAW;QAC3Bk1D,YAAY,EAAE/8J,EAAE,CAAC6nG,WAAW,GAAG,IAAI,GAC/BpnG,aAAa,CAAC6uB,SAAS,CAACtvB,EAAE,CAACsO,yBAAyB,EAAE,CAAC,CAAC,GACxD,IAAI;QACRuvB,yBAAyB,EAAE79B,EAAE,CAACsO,yBAAyB;QACvDyvB,yBAAyB,EAAE/9B,EAAE,CAACqO;MAClC,CAAC;MAEDjO,MAAM,CAAC+pH,QAAQ,CAAC1jH,IAAI,CAAC0xF,EAAE,CAAC;MACxB/3F,MAAM,CAAC67J,WAAW,CAACj8J,EAAE,CAAC8yF,MAAM,CAAC,GAAGqF,EAAE;IACtC,CAAC,CAAC;EACN,CAAC;EAED/3F,MAAM,CAACk8J,kBAAkB,GAAG,YAAY;IACpC,IAAIl8J,MAAM,CAAC+7J,iBAAiB,EACxB/7J,MAAM,CAAC+7J,iBAAiB,CAAC,CAAC;IAC9B/7J,MAAM,CAAC+7J,iBAAiB,GAAG,IAAI;;IAE/B;IACA/7J,MAAM,CAAC87J,YAAY,GACf7gI,4CAAU,CAAC/wB,IAAI,CAAClK,MAAM,CAAC+tI,aAAa,CAAC,CAChC/hF,MAAM,CAAC,UAAUhmD,CAAC,EAAE;MACjB,IAAI2rE,CAAC,GAAG3xE,MAAM,CAAC67J,WAAW,CAAC71J,CAAC,CAACgI,SAAS,CAAC;MACvC,IAAG,CAAC2jE,CAAC,EAAE;QACH;QACA,IAAIyX,CAAC,GAAG1xD,IAAI,CAAC2T,KAAK,CAACnrC,aAAa,CAACykC,aAAa,CAAC;QAC/C,IAAGykD,CAAC,EAAE;UACFzX,CAAC,GAAG3xE,MAAM,CAAC67J,WAAW,CAACzyE,CAAC,CAACxrD,MAAM,CAAC;QACpC;MACJ;MACA,OAAO;QACHg/H,gBAAgB,EAAEjrF,CAAC,CAAC/zC,MAAM;QAC1B5vB,SAAS,EAAE2jE,CAAC,CAAC/zC,MAAM;QACnBi/H,YAAY,EAAElrF,CAAC,CAACgrF;MACpB,CAAC;IACL,CAAC,CAAC,CACDj9F,QAAQ,CAAC,UAAU15D,CAAC,EAAE;MAAE,OAAOA,CAAC,CAACgI,SAAS;IAAE,CAAC,CAAC,CAC9CmjD,OAAO,CAAC,UAAUnrD,CAAC,EAAE;MAAE,OAAOA,CAAC,CAAC62J,YAAY;IAAE,CAAC,CAAC,CAChDxrG,OAAO,CAAC,CAAC;EACtB,CAAC;;EAED;EACArxD,MAAM,CAAC88J,0BAA0B,GAAG,YAAY;IAC5C98J,MAAM,CAACwF,UAAU,GAAG,CAAC;IACrB,IAAIu3J,eAAe,GAAG,CAAC,CAAC;IAExBj5J,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC87J,YAAY,EAAE,UAAUtnJ,CAAC,EAAE40E,CAAC,EAAE;MACxC,IAAIA,CAAC,CAACwzE,gBAAgB,KAAKxzE,CAAC,CAACp7E,SAAS,EAAE;QACpC+uJ,eAAe,CAAC3zE,CAAC,CAACwzE,gBAAgB,CAAC,GAAGxzE,CAAC;QACvCA,CAAC,CAACwzE,gBAAgB,GAAGxzE,CAAC,CAACp7E,SAAS;MACpC;IACJ,CAAC,CAAC;IAEFlK,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC+tI,aAAa,EAAE,UAAUv5H,CAAC,EAAE/G,CAAC,EAAE;MACzC,IAAIuvJ,MAAM,GAAGD,eAAe,CAACtvJ,CAAC,CAACO,SAAS,CAAC;MACzC,IAAIgvJ,MAAM,EAAE;QACRvvJ,CAAC,CAACO,SAAS,GAAGgvJ,MAAM,CAAChvJ,SAAS;QAC9BP,CAAC,CAACsxB,KAAK,GAAGi+H,MAAM;MACpB;IACJ,CAAC,CAAC;IAEFx8J,QAAQ,CAAC,YAAY;MACjBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,CAAC;IAEFxE,MAAM,CAACi9J,WAAW,CAAC,oBAAoB,CAAC;EAC5C,CAAC;EAEDj9J,MAAM,CAACk9J,0BAA0B,GAAG,YAAY;IAC5Cl9J,MAAM,CAACwF,UAAU,GAAG,CAAC;IACrBxF,MAAM,CAACk8J,kBAAkB,CAAC,CAAC;IAC3B,IAAI90J,KAAK,GAAGpH,MAAM;IAClBQ,QAAQ,CAAC,YAAY;MACjB0E,WAAW,CAAC,CAAC;MAEb1E,QAAQ,CAAC,YAAY;QACjBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;MACzC,CAAC,CAAC;MAEF4C,KAAK,CAAC61J,WAAW,CAAC,oBAAoB,CAAC;IAC3C,CAAC,CAAC;EACN,CAAC;EAEDj9J,MAAM,CAACm9J,YAAY,GAAG,YAAY;IAC9B,IAAIn9J,MAAM,CAACwF,UAAU,KAAK,CAAC,EAAC;MACxBxF,MAAM,CAAC88J,0BAA0B,CAAC,CAAC;IACvC;IAEA,IAAIM,QAAQ,GAAG,CAAC,CAAC;IACjBt5J,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC+tI,aAAa,EAAE,UAAUv5H,CAAC,EAAE/G,CAAC,EAAE;MACzC,IAAI27E,CAAC,GAAGppF,MAAM,CAAC67J,WAAW,CAACpuJ,CAAC,CAACO,SAAS,CAAC;MACvCovJ,QAAQ,CAAC3vJ,CAAC,CAACrK,EAAE,CAAC,GAAG;QACbq6B,yBAAyB,EAAE2rD,CAAC,CAAC3rD,yBAAyB;QACtDE,yBAAyB,EAAEyrD,CAAC,CAACzrD,yBAAyB;QACtDC,MAAM,EAAEwrD,CAAC,CAACxrD;MACd,CAAC;IACL,CAAC,CAAC;IAEF39B,UAAU,CAAC+K,UAAU,CAAC,mBAAmB,EAAEoyJ,QAAQ,CAAC;IACpD/8J,aAAa,CAAC+L,WAAW,CAAC,cAAc,CAAC;EAC7C,CAAC;EAEDpM,MAAM,CAACi9J,WAAW,GAAG,UAAUx1F,GAAG,EAAE;IAChC3jE,CAAC,CAAC2jE,GAAG,CAAC,CAACjjE,OAAO,CAAC,WAAW,CAAC;EAC/B,CAAC;EAEDxE,MAAM,CAACq9J,QAAQ,GAAG,UAAUvzJ,IAAI,EAAE69B,SAAS,EAAE;IACzC79B,IAAI,CAACkE,SAAS,GAAG25B,SAAS;IAC1BnnC,QAAQ,CAAC,YAAY;MACjBsD,CAAC,CAAC,eAAe,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;IACzC,CAAC,CAAC;EACN,CAAC;AACL,CAAC,CACJ,CAAC,C;;;;;;;;;;;;;;;;;;;AC9PN,CAAqF;AACjC;AACU;AACc;AACS;AAErF1E,OAAO,CAACN,MAAM,CAAC,SAAS,CAAC,CACpBO,UAAU,CAAC,gBAAgB,EACxB,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAC9F,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EACjG,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAC9F,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,gBAAgB,EAC/D,mBAAmB,EAAE,uBAAuB,EAAE,eAAe,EAAE,iBAAiB,EAAE,oBAAoB,EACtG,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,0BAA0B,EACrJ,qBAAqB,EAAE,kBAAkB,EAAE,YAAY,EAAE,oBAAoB,EAC7E,UAAUE,UAAU,EAAED,MAAM,EAAE4jE,OAAO,EAAErjE,SAAS,EAAEwyB,eAAe,EAAE5yB,YAAY,EAAEqpB,YAAY,EACzFQ,OAAO,EAAE9pB,aAAa,EAAEG,aAAa,EAAEG,QAAQ,EAAEmpB,KAAK,EAAEzL,WAAW,EAAEqlE,cAAc,EACnF35D,SAAS,EAAEC,SAAS,EAAEzpB,eAAe,EAAEw0H,YAAY,EAAEnrG,eAAe,EAAE5R,YAAY,EAClFpX,cAAc,EAAEqpB,OAAO,EAAE4+B,QAAQ,EAAE/nD,EAAE,EAAE2iF,cAAc,EACrD5iF,iBAAiB,EAAEujF,qBAAqB,EAAEv6D,aAAa,EAAE2G,eAAe,EAAEqwH,kBAAkB,EAC5F1yE,cAAc,EAAE3G,aAAa,EAAEmc,cAAc,EAAE5rE,YAAY,EAAEs0F,mBAAmB,EAAEqxD,2BAA2B,EAAEC,wBAAwB,EACvIvvF,mBAAmB,EAAE9vD,gBAAgB,EAAEpJ,UAAU,EAAEs4G,kBAAkB,EAAE;EAEvE,IAAMowC,QAAQ,GAAG,EAAE;EACnBz4J,OAAO,CAACy0C,IAAI,CAAC,uBAAuB,CAAC;;EAErC;EACAp5C,aAAa,CAACi9E,yBAAyB,CAAC,CAAC;EACzCt9E,MAAM,CAACq4J,WAAW,GAAG,YAAW;IAC5B,OAAOn4J,aAAa,CAACo4J,4BAA4B,KAAK,IAAI,IAAIp4J,aAAa,CAACmB,QAAQ,KAAK,IAAI;EACjG,CAAC;EAED2xD,UAAU,CAAC,YAAY;IACnB;IACA/yD,UAAU,CAAC+K,UAAU,CAAC,gBAAgB,CAAC;IACvC/K,UAAU,CAAC+K,UAAU,CAAC,qBAAqB,CAAC;EAChD,CAAC,EAAE,IAAI,CAAC;EAERhL,MAAM,CAAC09J,mBAAmB,GAAGx9J,aAAa,CAACw9J,mBAAmB;EAE9D19J,MAAM,CAAC29J,eAAe,GAAG;IACrBC,0BAA0B,EAAE,IAAI;IAChCn8I,SAAS,EAAE;EACf,CAAC;EAEDzhB,MAAM,CAAC69J,gBAAgB,GAAG,KAAK;EAC/B79J,MAAM,CAAC0I,MAAM,CAAC,kBAAkB,EAC5B,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1BpI,QAAQ,CAAC,YAAY;MACjBkgJ,kBAAkB,CAACr0E,cAAc,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;MAC7EpsE,UAAU,CAAC+K,UAAU,CAAC,kBAAkB,CAAC;IAC7C,CAAC,CAAC;EACN,CACJ,CAAC;EAED,IAAI,CAACwe,YAAY,CAACW,UAAU,CAAC,CAAC,EAAE;IAC5B9pB,aAAa,CAAC+pB,YAAY,CAAC,CAAC;IAC5B;IACA;EACJ,CAAC,MAAM;IACH5pB,QAAQ,CAAC,YAAY;MACjBR,MAAM,CAACud,UAAU,GAAG,gBAAgB;MACpCvd,MAAM,CAACs6B,MAAM,CAAC,CAAC;IACnB,CAAC,CAAC;EACN;EAEAmjI,QAAQ,CAACp3J,IAAI,CAACpG,UAAU,CAACoC,GAAG,CAAC,sBAAsB,EAAE,UAAUC,KAAK,EAAE2tE,IAAI,EAAE6tF,IAAI,EAAE;IAC9E75E,qBAAqB,CAACpoB,MAAM,CAAC77D,MAAM,EAAE,KAAK,CAAC;EAC/C,CAAC,CAAC,CAAC;EAEHA,MAAM,CAACwC,aAAa,GAAGnC,aAAa,CAACmC,aAAa;EAClDxC,MAAM,CAACi6E,gBAAgB,GAAG/5E,aAAa,CAACkB,aAAa,KAAK,IAAI;EAE9DpB,MAAM,CAAC+9J,eAAe,GAAG79J,aAAa,CAAC4wC,kBAAkB,CAAC,CAAC;EAC3D9wC,MAAM,CAACg+J,eAAe,GAAG99J,aAAa,CAAC6wC,kBAAkB,CAAC,CAAC;EAE3D/wC,MAAM,CAACi+J,YAAY,GAAG/9J,aAAa,CAAC8rC,wBAAwB;EAC5DhsC,MAAM,CAACk+J,OAAO,GAAGh+J,aAAa,CAACksC,mBAAmB;EAClDpsC,MAAM,CAACqhD,eAAe,GAAGnhD,aAAa,CAACgsC,sBAAsB;;EAE7D;EACA;EACA;;EAEAuxH,QAAQ,CAACp3J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,mBAAmB,EAAE,YAAY;IACtDrC,MAAM,CAACm+J,oBAAoB,GAAG,IAAI;EACtC,CAAC,CAAC,CAAC;EAGHn+J,MAAM,CAACo+J,2BAA2B,GAAG,UAASj9J,IAAI,EAAE;IAChDnB,MAAM,CAACq+J,qBAAqB,GAAGl9J,IAAI;EACvC,CAAC;EAEDnB,MAAM,CAACs+J,iBAAiB,GAAG,YAAY;IACnC,IAAIltI,QAAQ,GAAG,EAAE;IAEjB,IAAIpxB,MAAM,CAACu+J,WAAW,EAAE;MACpBz6J,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAACu+J,WAAW,EAAE,UAAU91I,CAAC,EAAE7oB,EAAE,EAAE;QACxCwxB,QAAQ,CAAC/qB,IAAI,CAAC0sB,eAAe,CAACi9D,cAAc,CAACpwF,EAAE,CAACyc,SAAS,CAAC,CAAC;MAC/D,CAAC,CAAC;IACN;IAEA,IAAI+U,QAAQ,CAAChrB,MAAM,GAAG,CAAC,EAAE;MACrBsrB,OAAO,CAACC,GAAG,CAACP,QAAQ,CAAC,CAACptB,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACtC,IAAIyN,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI0nJ,IAAI,GAAG,CAAC,CAAC;QACb16J,CAAC,CAACmC,IAAI,CAACoD,GAAG,EAAE,UAAUof,CAAC,EAAEya,CAAC,EAAE;UACxB,IAAIA,CAAC,IAAIA,CAAC,CAACh/B,IAAI,IAAIg/B,CAAC,CAACh/B,IAAI,CAACkC,MAAM,GAAG,CAAC,EAAE;YAClC0Q,GAAG,CAACosB,CAAC,CAACh/B,IAAI,CAAC,CAAC,CAAC,CAACmY,SAAS,CAAC,GAAG6mB,CAAC,CAACh/B,IAAI,CAAC,CAAC,CAAC,CAACkqF,eAAe;YACpDowE,IAAI,CAACt7H,CAAC,CAACh/B,IAAI,CAAC,CAAC,CAAC,CAACmY,SAAS,CAAC,GAAG6mB,CAAC,CAACh/B,IAAI,CAAC,CAAC,CAAC;UACzC;QACJ,CAAC,CAAC;QAEF,IAAIlE,MAAM,CAACu+J,WAAW,EAAE;UACpBz6J,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAACu+J,WAAW,EAAE,UAAU91I,CAAC,EAAE7oB,EAAE,EAAE;YACxC,IAAIkX,GAAG,CAAClX,EAAE,CAACyc,SAAS,CAAC,KAAK1L,SAAS,EAC/B/Q,EAAE,CAACwuF,eAAe,GAAGt3E,GAAG,CAAClX,EAAE,CAACyc,SAAS,CAAC;YAE1C,IAAImiJ,IAAI,CAAC5+J,EAAE,CAACyc,SAAS,CAAC,KAAK1L,SAAS,EAAE;cAClC,IAAI8tJ,EAAE,GAAGD,IAAI,CAAC5+J,EAAE,CAACyc,SAAS,CAAC;cAC3Bzc,EAAE,CAACu/B,OAAO,GAAGs/H,EAAE,CAACt/H,OAAO;cACvBv/B,EAAE,CAACy/B,SAAS,GAAGo/H,EAAE,CAACp/H,SAAS;cAC3Bz/B,EAAE,CAACm/B,KAAK,GAAG0/H,EAAE,CAAC1/H,KAAK;cACnBn/B,EAAE,CAAC8C,IAAI,GAAG+7J,EAAE,CAAC/7J,IAAI;cACjB9C,EAAE,CAACs/B,GAAG,GAAGu/H,EAAE,CAACv/H,GAAG;cACft/B,EAAE,CAAC40B,aAAa,GAAGiqI,EAAE,CAACjqI,aAAa;cACnC50B,EAAE,CAAC0/B,OAAO,GAAGm/H,EAAE,CAACn/H,OAAO;cACvB1/B,EAAE,CAAC0tF,WAAW,GAAGmxE,EAAE,CAACnxE,WAAW;cAC/B1tF,EAAE,CAAC2/B,OAAO,GAAGk/H,EAAE,CAACl/H,OAAO;cACvB3/B,EAAE,CAAC4tF,WAAW,GAAGixE,EAAE,CAACjxE,WAAW;cAC/B5tF,EAAE,CAAC4/B,OAAO,GAAGi/H,EAAE,CAACj/H,OAAO;cACvB5/B,EAAE,CAAC8tF,WAAW,GAAG+wE,EAAE,CAAC/wE,WAAW;cAC/B9tF,EAAE,CAACm+B,KAAK,GAAG0gI,EAAE,CAAC1gI,KAAK;cACnBn+B,EAAE,CAACw/B,OAAO,GAAGq/H,EAAE,CAACr/H,OAAO;cACvBx/B,EAAE,CAAC01D,QAAQ,GAAGmpG,EAAE,CAACnpG,QAAQ;cACzB11D,EAAE,CAACs+B,cAAc,GAAGugI,EAAE,CAACvgI,cAAc;YACzC;UACJ,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;IACN;EACJ,CAAC;;EAED;EACAu/H,QAAQ,CAACp3J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,mBAAmB,EAAE,YAAY;IACtD,IAAI,CAACnC,aAAa,CAACX,MAAM,IAAIF,MAAM,CAACu4C,WAAW,EAC3C53C,MAAM,CAACs+J,iBAAiB,CAAC,CAAC;EAClC,CAAC,CAAC,CAAC;EAEHt+J,MAAM,CAAC0+J,WAAW,GAAG,CAAC,CAACx+J,aAAa,CAACysC,kBAAkB;EAEvD8wH,QAAQ,CAACp3J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,sBAAsB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACpElE,MAAM,CAAC0+J,WAAW,GAAG,CAAC,CAACx+J,aAAa,CAACysC,kBAAkB;IAEvDnsC,QAAQ,CAAC,YAAY;MACjBR,MAAM,CAAC4zC,QAAQ,GAAG1zC,aAAa,CAAC2wC,kBAAkB,CAAC,CAAC;MACpD7wC,MAAM,CAAC2+J,QAAQ,GAAGz+J,aAAa,CAAC4wC,kBAAkB,CAAC,CAAC;MACpD9wC,MAAM,CAAC+9J,eAAe,GAAG/9J,MAAM,CAAC2+J,QAAQ;MACxC3+J,MAAM,CAAC4+J,QAAQ,GAAG1+J,aAAa,CAAC6wC,kBAAkB,CAAC,CAAC;MACpD/wC,MAAM,CAACg+J,eAAe,GAAGh+J,MAAM,CAAC4+J,QAAQ;MACxC5+J,MAAM,CAAC6+J,eAAe,GAAG3+J,aAAa,CAAC8wC,yBAAyB,CAAC,CAAC;MAClEhxC,MAAM,CAACitC,uBAAuB,GAAG/sC,aAAa,CAAC+wC,0BAA0B,CAAC,CAAC;MAC3EjxC,MAAM,CAAC8+J,0BAA0B,CAAC,CAAC;IACvC,CAAC,CAAC;IAEFt+J,QAAQ,CAAC,YAAY;MACjBR,MAAM,CAACud,UAAU,GAAG,gBAAgB;MACpCvd,MAAM,CAACs6B,MAAM,CAAC,CAAC;IACnB,CAAC,CAAC;IAEFt6B,MAAM,CAAC++J,gBAAgB,CAAC,CAAC;EAC7B,CAAC,CAAC,CAAC;;EAGH;EACA9+J,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,EAAE;IAC3Cif,QAAQ,EAAE1pB,SAAS,CAACmxC;EACxB,CAAC,CAAC,CAAC,CAAC;;EAEJ+rH,QAAQ,CAACp3J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,sBAAsB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IACpE,IAAIuiI,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE5P,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,GAAGsD,IAAI,CAACtD,QAAQ;IAC3CZ,MAAM,CAAC4P,WAAW,CAAC2hD,eAAe,GAAG,IAAI;IAEzC,IAAIvlD,kBAAkB,GAAGlI,CAAC,CAAC,qBAAqB,CAAC,CAACkF,GAAG,CAAC,CAAC;IAEvD,IAAI9E,IAAI,CAACtD,QAAQ,IAAIsD,IAAI,CAACtD,QAAQ,CAACgC,QAAQ,IAAIsB,IAAI,CAACtD,QAAQ,CAACgC,QAAQ,CAACwD,MAAM,GAAG,CAAC,EAAE;MAC9E4F,kBAAkB,GAAG,CAAC,CAACA,kBAAkB,GAAGA,kBAAkB,CAACuL,WAAW,CAAC,CAAC,CAACgE,IAAI,CAAC,CAAC,GAAG,EAAE;MACxF,IAAM7Q,KAAK,GAAG,CAAC,CAACxG,IAAI,CAACwG,KAAK,GAAGxG,IAAI,CAACwG,KAAK,GAAG,EAAE;MAE5C,IAAM8mD,YAAY,GAAGttD,IAAI,CAACtD,QAAQ,CAACgC,QAAQ,CAACyO,IAAI,CAAC,UAAAogD,IAAI;QAAA,OAAK,CAAC,CAACA,IAAI,CAAC5uD,KAAK,IAAI4uD,IAAI,CAAC5uD,KAAK,CAAC0U,WAAW,CAAC,CAAC,KAAK7M,KAAK,IACvG,CAAC,CAAC+mD,IAAI,CAAC5uD,KAAK,IAAI4uD,IAAI,CAAC5uD,KAAK,CAAC0U,WAAW,CAAC,CAAC,KAAKvL,kBAAmB,IAChE,CAAC,CAACylD,IAAI,CAAC3uD,KAAK,IAAI2uD,IAAI,CAAC3uD,KAAK,CAACyU,WAAW,CAAC,CAAC,KAAKvL,kBAAmB,IAChE,CAAC,CAACylD,IAAI,CAAC1uD,WAAW,IAAI0uD,IAAI,CAAC1uD,WAAW,CAACwU,WAAW,CAAC,CAAC,KAAKvL,kBAAmB;MAAA,EAAC;MAElF,IAAIwlD,YAAY,EACZxxD,MAAM,CAAC4P,WAAW,CAAC2hD,eAAe,GAAGC,YAAY,CAAC,KACjD;QACD,IAAME,cAAc,GAAGxtD,IAAI,CAACtD,QAAQ,CAACgC,QAAQ,CAACyO,IAAI,CAAC,UAAAogD,IAAI;UAAA,OAAK,CAAC,CAACA,IAAI,CAAC5uD,KAAK,IAAI4uD,IAAI,CAAC7jD,cAAc;QAAA,CAAC,CAAC;QACjG,IAAI8jD,cAAc,EACd1xD,MAAM,CAAC4P,WAAW,CAAC2hD,eAAe,GAAGG,cAAc,CAAC,KAEpD1xD,MAAM,CAAC4P,WAAW,CAAC2hD,eAAe,GAAGrtD,IAAI,CAACtD,QAAQ,CAACgC,QAAQ,CAAC,CAAC,CAAC;MACtE;IACJ;IAEA5C,MAAM,CAACg/J,kBAAkB,CAAC96J,IAAI,CAACtD,QAAQ,CAAC,CACnCoD,IAAI,CAAC,YAAY;MACd,IAAIE,IAAI,CAACmI,MAAM,IAAI,QAAQ,EACvBjM,eAAe,CAACq3C,gBAAgB,CAAC,IAAI,CAAC;MAE1C,OAAOp3C,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;IAC7C,CAAC,CAAC,SACI,CAAC,UAAU/zC,GAAG,EAAE;MAClBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACV,CAAC,CAAC,CAAC;EAEH,SAAS86J,eAAeA,CAAA,EAAG;IACvBj/J,MAAM,CAACk/J,YAAY,GAAG,IAAI;IAC1Bl/J,MAAM,CAACm/J,cAAc,GAAG,IAAI;IAC5Bn/J,MAAM,CAAC06D,cAAc,GAAG,IAAI;IAC5B16D,MAAM,CAACo/J,eAAe,GAAG,IAAI;EACjC;EAEA,SAASC,mBAAmBA,CAAA,EAAG;IAC3B,IAAIr/J,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,EAAE;MAC7BZ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACkuI,cAAc,GAAG,IAAI;IACrD;IACAmwB,eAAe,CAAC,CAAC;EACrB;EAEA,SAASK,mBAAmBA,CAAC9iJ,GAAG,EAAE;IAC9B,IAAIA,GAAG,KAAK,OAAO,EAAE;MACjB,OAAO,IAAI;IACf;IACA,IAAIikB,QAAQ,GAAGzgC,MAAM,CAAC4P,WAAW,CAACisB,QAAQ;IAC1C,IAAI,OAAO4E,QAAQ,KAAK,QAAQ,EAAE;MAC9BA,QAAQ,GAAGpgC,aAAa,CAAC6uB,SAAS,CAACzV,MAAM,CAACgnB,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3D;IACA,OAAOA,QAAQ,KAAK,CAAC;EACzB;EAEA,SAAS8+H,mBAAmBA,CAAC3+J,QAAQ,EAAE;IACnC,OAAO4iF,cAAc,CAACmlB,YAAY,CAAC/nG,QAAQ,CAAC,CAACoD,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC7D;MACA,IAAIA,GAAG,IAAI,CAACA,GAAG,CAACkgG,QAAQ,EAAE;QACtBvpG,MAAM,CAACw/J,kBAAkB,GAAG,KAAK;MACrC;MACAx/J,MAAM,CAACy/J,qBAAqB,CAAC,CAAC;IAClC,CAAC,CAAC,SAAM,CAAC,UAAUt7J,GAAG,EAAE;MACpB,IAAIA,GAAG,IAAIA,GAAG,CAAC2kG,MAAM,EAAE;QACnB,OAAO,CAAC;MACZ;MACA,IAAIU,QAAQ,GAAG/oG,cAAc,CAACe,SAAS,CAAC,uDAAuD,CAAC;MAChG,IAAIoZ,GAAG,GAAIzW,GAAG,KAAKA,GAAG,CAACyW,GAAG,IAAIzW,GAAG,CAAC0W,OAAO,CAAC,IAAK1W,GAAG,IAAIqlG,QAAQ;MAC9D,IAAI,OAAO5uF,GAAG,KAAK,QAAQ,EAAE;QACzBA,GAAG,GAAG4uF,QAAQ;MAClB;MACA;MACA;MACA,IAAIrlG,GAAG,IAAIA,GAAG,CAACskG,IAAI,EAAE;QACjBxoG,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;UAAE6P,OAAO,EAAED,GAAG;UAAEtM,IAAI,EAAE;QAAQ,CAAC,CAAC;QACvEtO,MAAM,CAACw/J,kBAAkB,GAAG,IAAI;QAChCx/J,MAAM,CAACy/J,qBAAqB,CAAC,CAAC;QAC9B,IAAIj8E,cAAc,CAAC/yD,QAAQ,IAAI,OAAO+yD,cAAc,CAAC/yD,QAAQ,CAACq6E,UAAU,KAAK,UAAU,EAAE;UACrFtnB,cAAc,CAAC/yD,QAAQ,CAACq6E,UAAU,CAAC,CAAC;QACxC;MACJ,CAAC,MAAM;QACH3qG,YAAY,CAACiE,SAAS,CAACwW,GAAG,CAAC;MAC/B;IACJ,CAAC,CAAC;EACN;EAEA5a,MAAM,CAACg/J,kBAAkB,GAAG,UAAUp+J,QAAQ,EAAE;IAC5C;IACA,IAAI0K,EAAE,GAAGk4E,cAAc,CAACimB,aAAa,CAAC,CAAC;IAEvC,OAAOn+F,EAAE,CAACtH,IAAI,CAAC,YAAY;MACvB,IAAIyiI,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;MACnEqvJ,eAAe,CAAC,CAAC;MACjBj/J,MAAM,CAACy/J,qBAAqB,CAAC,CAAC;MAE9Bz/J,MAAM,CAACspJ,kBAAkB,GAAG,KAAK;MACjCtpJ,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;MACzB,IAAIkV,IAAI,GAAG/hC,MAAM,CAAC4P,WAAW;MAE7B,IAAItE,EAAE,GAAGjL,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;MAE3C,IAAI,CAACuuF,SAAS,EAAE;QACZn7H,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;UACrBhE,MAAM,CAAC4P,WAAW,CAACwsB,qBAAqB,GAAGl8B,aAAa,CAACkB,aAAa,IAAIpB,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC6C,aAAa,GAC/GzD,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC6C,aAAa,GAAG,CAAC;UAEjDya,WAAW,CAACy1H,gBAAgB,CAAC3zI,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAACysI,eAAe,EAAEzsI,MAAM,CAAC;UAChF,OAAOK,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;QAC7C,CAAC,CAAC;MACN;MAEA,IAAI,CAACt3C,QAAQ,CAACqoG,OAAO,IAAI/oG,aAAa,CAACmB,QAAQ,IAAImiF,cAAc,CAAC6oB,cAAc,EAAE;QAE9E/gG,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;UACrB,OAAO5D,eAAe,CAACgJ,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;YAC3CwB,UAAU,EAAEhK,QAAQ,CAACwC;UACzB,CAAC,CAAC;QACN,CAAC,CAAC,CAACY,IAAI,CAAC,UAAUC,IAAI,EAAE;UACpB,IAAIA,IAAI,CAACqF,SAAS,CAAC,CAAC,CAAC,EAAE;YACnB1I,QAAQ,GAAGqD,IAAI,CAACqF,SAAS,CAAC,CAAC,CAAC;YAC5By4B,IAAI,CAACnhC,QAAQ,CAACsoG,YAAY,GAAGtoG,QAAQ,CAACsoG,YAAY;YAClDnnE,IAAI,CAACnhC,QAAQ,CAACqoG,OAAO,GAAGroG,QAAQ,CAACqoG,OAAO;YACxClnE,IAAI,CAACnhC,QAAQ,CAACioG,cAAc,GAAGjoG,QAAQ,CAACioG,cAAc;YACtD9mE,IAAI,CAACnhC,QAAQ,CAAC8zH,YAAY,GAAG9zH,QAAQ,CAAC8zH,YAAY;YAClD3yF,IAAI,CAACnhC,QAAQ,CAACuoG,aAAa,GAAGvoG,QAAQ,CAACuoG,aAAa;YACpDpnE,IAAI,CAACnhC,QAAQ,CAACwoG,WAAW,GAAGxoG,QAAQ,CAACwoG,WAAW;UACpD;QACJ,CAAC,CAAC;MACN;MAEA99F,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;QACrB,IAAI9D,aAAa,CAACssG,gBAAgB,IAAItsG,aAAa,CAACmB,QAAQ,KAAKT,QAAQ,CAACmoG,OAAO,IAAI,CAACnoG,QAAQ,CAACqoG,OAAO,CAAC,EAAE;UACrGroG,QAAQ,CAACmoG,OAAO,GAAG,CAAC,CAACnoG,QAAQ,CAACmoG,OAAO,GAAGnoG,QAAQ,CAACmoG,OAAO,GAAGtoG,cAAc,CAACe,SAAS,CAAC,6EAA6E,CAAC;UAClK,OAAOxB,MAAM,CAAC0/J,8BAA8B,CAAC9+J,QAAQ,CAAC;QAC1D,CAAC,MAEG,OAAO2+J,mBAAmB,CAAC3+J,QAAQ,CAAC;MAC5C,CAAC,CAAC,CAACoD,IAAI,CAAC,YAAY;QAChB,IAAIhE,MAAM,CAACmB,IAAI,IAAI,SAAS,EAAE;UAC1BnB,MAAM,CAAC2/J,iBAAiB,CAAC,CAAC;QAC9B;QAEA,IAAI3/J,MAAM,CAACmB,IAAI,KAAK,SAAS,IAAInB,MAAM,CAACupJ,iBAAiB,EAAE;UACvD,IAAI,CAAC9iB,SAAS,EACVzmI,MAAM,CAAC4/J,0BAA0B,CAAC5/J,MAAM,CAAC4P,WAAW,CAAC,CAAC,KAEtDkrB,4FAAuB,CAACqG,iBAAiB,CAACnhC,MAAM,CAAC4P,WAAW,EAAEsO,WAAW,CAAC0/H,eAAe,CAAC,CAAC,EAAE59I,MAAM,EAAEg7B,iEAAc,CAAC6kI,KAAK,EAAE,IAAI,CAAC;QACxI;QAEAtxB,aAAa,CAAC,CAAC;QACfvuI,MAAM,CAAC8/J,qBAAqB,CAAC,CAAC;QAE9B,OAAOz/J,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;MAC7C,CAAC,CAAC;MAEF,OAAO5sC,EAAE;IACb,CAAC,CAAC;EACN,CAAC;EAEDmyJ,QAAQ,CAACp3J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,iCAAiC,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAC/E,IAAIuiI,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE,IAAI,CAAC62H,SAAS,EACVzmI,MAAM,CAAC4P,WAAW,CAACuF,mBAAmB,GAAGjR,IAAI,CAACiR,mBAAmB,CAAC,KAElEnV,MAAM,CAAC4P,WAAW,CAACohB,mBAAmB,GAAG9sB,IAAI,CAACiR,mBAAmB;IAErEnV,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;IAEzB0hH,aAAa,CAAC,CAAC;IACfluI,aAAa,CAAC65E,gBAAgB,CAACl6E,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC;EAC9D,CAAC,CAAC,CAAC;EAEHy9J,QAAQ,CAACp3J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,kCAAkC,EAAE,UAASC,KAAK,EAAE4B,IAAI,EAAE;IAC/ElE,MAAM,CAAC4P,WAAW,CAACu/H,4BAA4B,GAAGjrI,IAAI,CAACyT,4BAA4B,CAAC1U,KAAK;IACzFjD,MAAM,CAAC4P,WAAW,CAAC0/H,4BAA4B,GAAGprI,IAAI,CAACyT,4BAA4B,CAAC3K,KAAK;IACzFhN,MAAM,CAAC4P,WAAW,CAACw/H,oBAAoB,GAAGlrI,IAAI,CAACyT,4BAA4B,CAAClL,IAAI;IAChFzM,MAAM,CAAC4P,WAAW,CAACy/H,uBAAuB,GAAGnrI,IAAI,CAACyT,4BAA4B,CAAC1K,OAAO;IACtFjN,MAAM,CAAC4P,WAAW,CAAC4/H,wBAAwB,GAAGtrI,IAAI,CAACyT,4BAA4B,CAAChL,KAAK;IACrF3M,MAAM,CAAC4P,WAAW,CAAC2/H,mBAAmB,GAAGrrI,IAAI,CAACyT,4BAA4B,CAAC9K,QAAQ;EACvF,CAAC,CAAC,CAAC;EAEH4wJ,QAAQ,CAACp3J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,uBAAuB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAErE,IAAI,CAAClE,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,EAAE;MAChCv6E,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,GAAG,EAAE;IACtC;IACA,IAAIr2E,IAAI,CAACmI,MAAM,KAAK,UAAU,EAAE;MAC5B,IAAI+R,SAAS,GAAG,IAAI;MACpB,IAAIG,kBAAkB,GAAG,IAAI;MAC7B,IAAIkoH,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;MAEnE,IAAI,CAAC,CAAC1L,IAAI,EAAE;QACR,IAAI,CAAC,CAACA,IAAI,CAACka,SAAS,EAAE;UAClBA,SAAS,GAAGte,OAAO,CAAC+F,IAAI,CAAC3B,IAAI,CAACka,SAAS,CAAC;UACxC,IAAI,CAACqoH,SAAS,EACVzmI,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,CAACl0E,IAAI,CAAC+X,SAAS,CAAC;QACrD;QACA,IAAIla,IAAI,CAACoa,QAAQ,KAAK,IAAI,EACtBC,kBAAkB,GAAGra,IAAI,CAACqa,kBAAkB;MACpD;MAEA,IAAI,CAACkoH,SAAS,EAAE;QACZzmI,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,GAAG/4B,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,CAAC;QAC9D5P,MAAM,CAAC4P,WAAW,CAACgiJ,eAAe,GAAG5kB,eAAe,CAAChtI,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAAC;MAC1F;;MAEA;MACA,IAAIpd,kBAAkB,EAClBve,MAAM,CAAC+/J,sBAAsB,CAACxhJ,kBAAkB,EAAEH,SAAS,CAAC,CAAC,KAE7Dpe,MAAM,CAACggK,0BAA0B,CAAC5hJ,SAAS,CAAC;IACpD;;IAEA;EACJ,CAAC,CAAC,CAAC;EAEHpe,MAAM,CAAC83D,QAAQ,GAAGz3D,aAAa,CAACy3D,QAAQ;;EAExC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA,IAAImoG,wBAAwB,GAAG,SAA3BA,wBAAwBA,CAAA,EAAe;IACvC5/J,aAAa,CAAC8E,UAAU,CAACrB,CAAC,CAAC,mBAAmB,CAAC,CAAC;EACpD,CAAC;EAEDA,CAAC,CAACwc,QAAQ,CAAC,CAAC0zC,EAAE,CAAC,yBAAyB,EAAE,2EAA2E,EAAEisG,wBAAwB,CAAC;EAEhJjgK,MAAM,CAACkgK,sBAAsB,GAAG,YAAY;IACxC,IAAItgK,EAAE,GAAGkE,CAAC,CAAC,kCAAkC,CAAC;IAE9ClE,EAAE,CAACugK,WAAW,CAAC,GAAG,EAAE,YAAU;MAC1Br8J,CAAC,CAAC,wBAAwB,CAAC,CAACoE,IAAI,CAACtI,EAAE,CAACwjB,EAAE,CAAC,SAAS,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC;IACxE,CAAC,CAAC;EACN,CAAC;EAEDtf,CAAC,CAAC,kBAAkB,CAAC,CAACkwD,EAAE,CAAC,kBAAkB,EAAE,YAAY;IACrDlwD,CAAC,CAAC,0BAA0B,CAAC,CAAC+R,IAAI,CAAC,CAAC;EACxC,CAAC,CAAC;EAEF/R,CAAC,CAAC,kBAAkB,CAAC,CAACkwD,EAAE,CAAC,oBAAoB,EAAE,YAAY;IACvDlwD,CAAC,CAAC,0BAA0B,CAAC,CAACgH,IAAI,CAAC,CAAC;EACxC,CAAC,CAAC;EAEF9K,MAAM,CAACogK,QAAQ,GAAG,KAAK;EACvBpgK,MAAM,CAACqgK,cAAc,GAAG,KAAK;EAC7BrgK,MAAM,CAAC63B,OAAO,GAAG,IAAI;EACrB73B,MAAM,CAACm2D,cAAc,GAAGj2D,aAAa,CAACgmC,eAAe;EACrDlmC,MAAM,CAACsgK,eAAe,GAAG,IAAI;EAC7BtgK,MAAM,CAACud,UAAU,GAAG,gBAAgB;EACpCvd,MAAM,CAACa,UAAU,GAAG,IAAI;EACxBb,MAAM,CAACc,cAAc,GAAG,EAAE;EAC1Bd,MAAM,CAACu+J,WAAW,GAAG,IAAI;EACzBv+J,MAAM,CAACugK,WAAW,GAAG,IAAI;EACzBvgK,MAAM,CAACs5B,UAAU,GAAG,CAAC;EACrBt5B,MAAM,CAACwgK,WAAW,GAAG,CAAC;EACtBxgK,MAAM,CAAC4zC,QAAQ,GAAG1zC,aAAa,CAAC2wC,kBAAkB,CAAC,CAAC;EACpD7wC,MAAM,CAAC2+J,QAAQ,GAAGz+J,aAAa,CAAC4wC,kBAAkB,CAAC,CAAC;EACpD9wC,MAAM,CAAC4+J,QAAQ,GAAG1+J,aAAa,CAAC6wC,kBAAkB,CAAC,CAAC;EACpD/wC,MAAM,CAAC6+J,eAAe,GAAG3+J,aAAa,CAAC8wC,yBAAyB,CAAC,CAAC;EAClEhxC,MAAM,CAACitC,uBAAuB,GAAG/sC,aAAa,CAAC+wC,0BAA0B,CAAC,CAAC;EAC3EjxC,MAAM,CAACo7B,IAAI,GAAG,CAAC;EACfp7B,MAAM,CAACygK,UAAU,GAAG,KAAK;EACzBzgK,MAAM,CAACysI,eAAe,GAAGvsI,aAAa,CAACwkC,YAAY,KAAK,MAAM;EAC9D1kC,MAAM,CAACwsC,8BAA8B,GAAG,IAAI;EAC5CxsC,MAAM,CAACkwC,8BAA8B,GAAG,IAAI;EAC5ClwC,MAAM,CAACmwC,4BAA4B,GAAG,IAAI;EAC1CnwC,MAAM,CAACowC,uBAAuB,GAAG,IAAI;EACrCpwC,MAAM,CAACqwC,0BAA0B,GAAG,IAAI;EACxCrwC,MAAM,CAACswC,yBAAyB,GAAG,IAAI;EACvCtwC,MAAM,CAAC81H,eAAe,GAAG,EAAE;EAC3B91H,MAAM,CAAC0gK,mBAAmB,GAAG;IACzBC,aAAa,EAAE,EAAE;IACjBC,kBAAkB,EAAE,EAAE;IACtBC,UAAU,EAAE;EAChB,CAAC;EAED7gK,MAAM,CAAC8gK,WAAW,GAAG5gK,aAAa,CAACkB,aAAa;EAChDpB,MAAM,CAAC+gK,cAAc,GAAG,IAAI;EAC5B/gK,MAAM,CAACw/J,kBAAkB,GAAG,KAAK;EACjCx/J,MAAM,CAACupJ,iBAAiB,GAAG,IAAI;EAC/BvpJ,MAAM,CAACghK,YAAY,GAAG,KAAK;EAC3BhhK,MAAM,CAACihK,4BAA4B,GAAG,IAAI;EAC1CjhK,MAAM,CAACkhK,WAAW,GAAG,IAAI;EACzBlhK,MAAM,CAACmhK,cAAc,GAAG,IAAI;EAC5BnhK,MAAM,CAACohK,cAAc,GAAGlhK,aAAa,CAACmhK,eAAe;EACrDrhK,MAAM,CAACkhH,cAAc,GAAGhhH,aAAa,CAACghH,cAAc;EACpDlhH,MAAM,CAACshK,sBAAsB,GAAG,IAAI;EACpCthK,MAAM,CAACq6E,aAAa,GAAG,KAAK;EAC5Br6E,MAAM,CAACspJ,kBAAkB,GAAG,KAAK;EACjCtpJ,MAAM,CAACq+J,qBAAqB,GAAG,QAAQ;EACvCr+J,MAAM,CAACw7I,iBAAiB,GAAG;IACvByC,UAAU,EAAE,CAAC;IACb8P,gBAAgB,EAAE,CAAC;IACnBwT,cAAc,EAAE,CAAC;IACjBpjB,mBAAmB,EAAE,CAAC;IACtBD,iBAAiB,EAAE;EACvB,CAAC;EACDl+I,MAAM,CAACwhK,kBAAkB,GAAG;IACxBjsJ,KAAK,EAAE;EACX,CAAC;EACDvV,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,GAAG,CAAC,CAAC;EAC1C78I,MAAM,CAACyhK,aAAa,GAAG,IAAI;EAC3BzhK,MAAM,CAAC0hK,YAAY,GAAG;IAClB18I,KAAK,EAAE;EACX,CAAC;EACDhlB,MAAM,CAACsB,uBAAuB,GAAGpB,aAAa,CAACoB,uBAAuB;EACtEtB,MAAM,CAACuB,iBAAiB,GAAGd,cAAc,CAACe,SAAS,CAAC,4CAA4C,EAAE;IAC9FC,GAAG,EAAE;EACT,CAAC,CAAC;EACFzB,MAAM,CAAC2hK,8BAA8B,GAAGlhK,cAAc,CAACe,SAAS,CAAC,wDAAwD,EAAE;IACvHC,GAAG,EAAEzB,MAAM,CAACsB;EAChB,CAAC,CAAC;EACFtB,MAAM,CAACgnG,UAAU,GAAG,IAAI;;EAExB;EACA;;EAEAhnG,MAAM,CAAC4hK,wBAAwB,GAAG,KAAK;EACvC5hK,MAAM,CAACivE,UAAU,GAAG/uE,aAAa,CAACyqB,UAAU;EAC5C3qB,MAAM,CAAC6hK,uBAAuB,GAAG,KAAK;EACtC7hK,MAAM,CAAC8hK,sBAAsB,GAAG,CAAC,CAAC;EAElC9hK,MAAM,CAAC45B,GAAG,GAAG,UAAU5zB,CAAC,EAAE;IACtB,IAAIA,CAAC,EACD,OAAO3F,aAAa,CAAC6uB,SAAS,CAAC2K,IAAI,CAACD,GAAG,CAAC5zB,CAAC,CAAC,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC;EACZ,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACAhG,MAAM,CAACyI,gBAAgB,GAAG,KAAK;;EAE/B;EACA;EACA;EACA;EACA;;EAEAzI,MAAM,CAAC0I,MAAM,CAAC,kBAAkB,EAC5B,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B5I,MAAM,CAAC+c,iCAAiC,CAAC,CAAC;IAC1C,IAAIpU,QAAQ,EAAE;MACVnI,QAAQ,CAAC,YAAY;QACjBH,aAAa,CAACwI,kBAAkB,CAAC,GAAG,GAAG/E,CAAC,CAAC,qBAAqB,CAAC,CAAC6D,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;MAC7F,CAAC,EAAE,GAAG,CAAC;IACX;EACJ,CACJ,CAAC;EAGD3H,MAAM,CAAC+c,iCAAiC,GAAG,YAAY;IACnD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;EAAA,CACH;EAED/c,MAAM,CAAC4c,gCAAgC,GAAG,KAAK;EAG/C5c,MAAM,CAAC2c,UAAU,GAAG,UAAU3T,GAAG,EAAE;IAC/BhJ,MAAM,CAACud,UAAU,GAAG,MAAM;IAC1Bvd,MAAM,CAACa,UAAU,GAAGmI,GAAG;IACvB,IAAIK,GAAG,GAAG3I,iBAAiB,CAAC+9F,UAAU,CAACz1F,GAAG,CAAC;IAC3Cq+D,aAAa,CAACmD,aAAa,CAACnhE,GAAG,CAAC;IAEhCrJ,MAAM,CAAC4c,gCAAgC,GAAG,CAAC,CAACvT,GAAG,IAAIA,GAAG,CAACjD,MAAM,GAAG,CAAC;IACjEpG,MAAM,CAAC+c,iCAAiC,CAAC,CAAC;IAE1C,OAAO1T,GAAG;EACd,CAAC;EAEDrJ,MAAM,CAAC2J,kBAAkB,GAAG,UAAUX,GAAG,EAAE;IACvC,OAAO,CAAC,CAACA,GAAG,GAAGA,GAAG,CAACY,IAAI,GAAG,IAAI;EAClC,CAAC;EAED5J,MAAM,CAAC+hK,iBAAiB,GAAG,UAAUtiG,KAAK,EAAoB;IAAA,IAAlBuiG,QAAQ,GAAA7wJ,SAAA,CAAA/K,MAAA,QAAA+K,SAAA,QAAAR,SAAA,GAAAQ,SAAA,MAAG,KAAK;IACxD,IAAI,CAAC6wJ,QAAQ,EAAE;MACXpqJ,YAAY,CAACkD,OAAO,CAAC,CAAC;IAC1B;IAEA,IAAI2kD,KAAK,EAAE;MACPx/D,UAAU,CAAC+K,UAAU,CAAC,eAAe,EAAE;QACnC6P,OAAO,4BAA4B;QACnCvM,IAAI,EAAE;MACV,CAAC,CAAC;IACN;EACJ,CAAC;EAEDtO,MAAM,CAAC6J,kBAAkB,GAAG,UAAUC,IAAI,EAAEC,KAAK,EAAEC,KAAK,EAAE1H,KAAK,EAAE;IAC7D;IACAtC,MAAM,CAAC6c,eAAe,GAAG9S,KAAK,CAACS,EAAE;IACjCxK,MAAM,CAACa,UAAU,GAAGiJ,IAAI,CAACF,IAAI;IAC7B5J,MAAM,CAACs6B,MAAM,CAAC,CAAC;EACnB,CAAC;;EAED;EACAt6B,MAAM,CAAC4P,WAAW,GAAG;IACjBgtB,gBAAgB,EAAE,CAAC;IACnBC,YAAY,EAAE;EAClB,CAAC;EAED78B,MAAM,CAACmjB,gBAAgB,GAAG;IACtBpT,QAAQ,EAAE,EAAE;IACZ8/H,oBAAoB,EAAE,CAAC;IACvBp0G,IAAI,EAAE,EAAE;IACRovF,IAAI,EAAE,EAAE;IACRngG,UAAU,EAAE,EAAE;IACd0mF,YAAY,EAAE,EAAE;IAChBg/B,gBAAgB,EAAE,EAAE;IACpBN,QAAQ,EAAE,CAAC;IACXj0G,QAAQ,EAAE,CAAC;IACXK,aAAa,EAAE,CAAC;IAChBnD,KAAK,EAAE,CAAC;IACRD,QAAQ,EAAE,EAAE;IACZ0D,OAAO,EAAE,CAAC;IACVuhF,eAAe,EAAE,EAAE;IACnBC,eAAe,EAAE;EACrB,CAAC;EAEDh+G,MAAM,CAAC0K,KAAK,GAAG;IACXgqJ,YAAY,EAAE;EAClB,CAAC;EAED10J,MAAM,CAAC60J,aAAa,GAAG,CAAC,CAAC;EAEzB70J,MAAM,CAACiiK,WAAW,GAAG,CAAC,CAAC;EAEvB,IAAItyF,MAAM,GAAG,SAATA,MAAMA,CAAA,EAAe;IACrBnvE,QAAQ,CAAC,YAAY;MACjBsD,CAAC,CAACO,SAAS,CAAC,CAAC;MACbpE,UAAU,CAAC+K,UAAU,CAAC,eAAe,CAAC;MAEtCijE,mBAAmB,CAAC4B,MAAM,CAAC,CAAC;IAEhC,CAAC,CAAC;EACN,CAAC;;EAED;EACA7vE,MAAM,CAACkiK,kBAAkB,GAAG,CAAC,CAAC,CAAC;;EAE/BliK,MAAM,CAACmiK,iBAAiB,GAAG,YAAY;IACnC,IAAI,CAAC,CAACniK,MAAM,CAAC4P,WAAW,CAACnM,aAAa,EAAE;MACpCzD,MAAM,CAAC4P,WAAW,CAACnM,aAAa,GAAGpD,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC4P,WAAW,CAACnM,aAAa,EAAE,CAAC,CAAC;IACnG;IACA,OAAOzD,MAAM,CAACkiK,kBAAkB,KAAK,CAAC;EAC1C,CAAC;EAEDliK,MAAM,CAACoiK,kBAAkB,GAAG,YAAY;IACpC;IACApiK,MAAM,CAACqiK,YAAY,GAAGriK,MAAM,CAACo6E,QAAQ,GAAGp6E,MAAM,CAACo6E,QAAQ,GAAG,MAAM;IAChEp6E,MAAM,CAACkiK,kBAAkB,GAAG,CAAC;IAC7Bj+E,qBAAqB,CAACpoB,MAAM,CAAC77D,MAAM,EAAE,QAAQ,CAAC;IAE9C,OAAO,IAAI;EACf,CAAC;EAEDA,MAAM,CAACqpI,cAAc,GAAG,YAAY;IAChC,OAAOrpI,MAAM,CAACkiK,kBAAkB,KAAK,CAAC;EAC1C,CAAC;EAEDliK,MAAM,CAAC0I,MAAM,CAAC,oBAAoB,EAC9B,UAAUC,QAAQ,EAAEC,QAAQ,EAAE;IAC1B,IAAID,QAAQ,KAAKC,QAAQ,EAAE;MAEvB,IAAID,QAAQ,IAAI,CAAC,EAAE;QACfkP,YAAY,CAAC0B,SAAS,CAAC,CAAC;QACxB1B,YAAY,CAACikG,qBAAqB,CAAC,CAAC;MACxC,CAAC,MAAM,IAAInzG,QAAQ,IAAI,CAAC,EAAE;QACtBkP,YAAY,CAAC0B,SAAS,CAAC,IAAI,CAAC;QAC5B/Y,QAAQ,CAAC,YAAY;UACjBsD,CAAC,CAAC,4BAA4B,CAAC,CAACU,OAAO,CAAC,WAAW,CAAC;QACxD,CAAC,CAAC;MACN,CAAC,MAAM,IAAImE,QAAQ,IAAI,CAAC,EAAE;QACtBtI,aAAa,CAAC65E,gBAAgB,CAAC,IAAI,CAAC;QACpC15E,QAAQ,CAAC,YAAY;UACjBsD,CAAC,CAAC,wBAAwB,CAAC,CAACU,OAAO,CAAC,WAAW,CAAC;QACpD,CAAC,EAAE,CAAC,CAAC;MACT;IACJ;EACJ,CACJ,CAAC;EAEDxE,MAAM,CAACsiK,mBAAmB,GAAG,YAAY;IACrC,OAAOzqJ,YAAY,CAAC09E,eAAe,IAAI,KAAK;EAChD,CAAC;EAEDv1F,MAAM,CAACuiK,UAAU,GAAG;IAChB/jJ,OAAO,EAAE,CAAC;IACVgwH,YAAY,EAAE,CAAC;IACfg0B,WAAW,EAAE;EACjB,CAAC;EACDxiK,MAAM,CAACo6E,QAAQ,GAAG,IAAI;;EAEtB;EACAp6E,MAAM,CAAC6rB,MAAM,GAAG,YAAY;IACxB7mB,OAAO,CAAC20C,OAAO,CAAC,uBAAuB,CAAC;IACxC0tB,aAAa,CAACsB,WAAW,CAAC,CAAC;IAE3B3jE,OAAO,CAACy0C,IAAI,CAAC,uBAAuB,CAAC;IACrC;IACA;IACA,IAAI;MACA5hC,YAAY,CAAC0B,SAAS,CAAC,CAAC;IAC5B,CAAC,CAAC,OAAOgI,CAAC,EAAE;MACRphB,YAAY,CAACiE,SAAS,CAAC,OAAOmd,CAAC,KAAK,QAAQ,GAAGA,CAAC,GAAGA,CAAC,CAAC1G,OAAO,CAAC;IACjE;IAEA7a,MAAM,CAACysI,eAAe,GAAGvsI,aAAa,CAACwkC,YAAY,KAAK,MAAM;IAE9D,IAAI,CAACxkC,aAAa,CAAC2L,QAAQ,EACvBrL,QAAQ,CAAC,YAAY;MACjBsD,CAAC,CAAC,qBAAqB,CAAC,CAACsB,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,GAAG,CAAC;IAEXtB,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,IAAIm/B,CAAC,GAAGljC,MAAM,CAAC++J,gBAAgB,CAAC,CAAC,CAC5B/6J,IAAI,CAAC,YAAY;MACV,OAAOu/E,cAAc,CAACkgB,kBAAkB,CAAC,IAAI,CAAC,CACzCz/F,IAAI,CAAC,UAAUC,IAAI,EAAE;QACd;;QAEA,IAAI+gJ,cAAc,GAAG,0BAA0B;QAC/C,IAAI1wF,QAAQ,GAAGrwD,IAAI,CAAC+0F,QAAQ,CAAC1+D,MAAM,CAAC,4BAA4B,CAAC;QACjE,IAAI7S,MAAM,GAAG,CAACxjB,IAAI,CAAC+0F,QAAQ,CAACtvF,KAAK,CAAC,CAAC,EAAE4qD,QAAQ,CAAC,EAAE0wF,cAAc,EAAE/gJ,IAAI,CAAC+0F,QAAQ,CAACtvF,KAAK,CAAC4qD,QAAQ,CAAC,CAAC,CAAC3/C,IAAI,CAAC,EAAE,CAAC;QAEvG,IAAI0xG,cAAc,GAAG,gSAAgS;QACrT5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,4CAA4C,EAAE0mG,cAAc,CAAC;QACrFA,cAAc,GAAG,qSAAqS;QACtT5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,6CAA6C,EAAE0mG,cAAc,CAAC;QAEtFA,cAAc,GAAG,kWAAkW;QACnX5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,8CAA8C,EAAE0mG,cAAc,CAAC;QACvFA,cAAc,GAAG,sWAAsW;QACvX5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,+CAA+C,EAAE0mG,cAAc,CAAC;QACxFA,cAAc,GAAG,iYAAiY;QAClZ5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,wDAAwD,EAAE0mG,cAAc,CAAC;QACjGA,cAAc,GAAG,mWAAmW;QACpX5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,8CAA8C,EAAE0mG,cAAc,CAAC;QACvFA,cAAc,GAAG,mWAAmW;QACpX5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,8CAA8C,EAAE0mG,cAAc,CAAC;QAEvFrmH,MAAM,CAAC81H,eAAe,GAAGruG,MAAM;QAE/B,IAAIxjB,IAAI,CAACy/F,aAAa,EAAE;UACpBpvC,QAAQ,GAAGrwD,IAAI,CAACy/F,aAAa,CAACppE,MAAM,CAAC,4BAA4B,CAAC;UAClE7S,MAAM,GAAG,CAACxjB,IAAI,CAACy/F,aAAa,CAACh6F,KAAK,CAAC,CAAC,EAAE4qD,QAAQ,CAAC,EAAE0wF,cAAc,EAAE/gJ,IAAI,CAACy/F,aAAa,CAACh6F,KAAK,CAAC4qD,QAAQ,CAAC,CAAC,CAAC3/C,IAAI,CAAC,EAAE,CAAC;UAE7G0xG,cAAc,GAAG,sEAAsE;UACvF5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,4CAA4C,EAAE0mG,cAAc,CAAC;UACrFA,cAAc,GAAG,uEAAuE;UACxF5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,6CAA6C,EAAE0mG,cAAc,CAAC;UAEtFA,cAAc,GAAG,uGAAuG;UACxH5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,0CAA0C,EAAE0mG,cAAc,CAAC;UACnFA,cAAc,GAAG,wGAAwG;UACzH5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,2CAA2C,EAAE0mG,cAAc,CAAC;UACpFA,cAAc,GAAG,iHAAiH;UAClI5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,oDAAoD,EAAE0mG,cAAc,CAAC;UAC7FA,cAAc,GAAG,uGAAuG;UACxH5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,0CAA0C,EAAE0mG,cAAc,CAAC;UACnFA,cAAc,GAAG,uGAAuG;UACxH5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,0CAA0C,EAAE0mG,cAAc,CAAC;UAEnFrmH,MAAM,CAAC+1H,oBAAoB,GAAGtuG,MAAM;QACxC,CAAC,MAAM;UACHznB,MAAM,CAAC+1H,oBAAoB,GAAGtuG,MAAM;QACxC;QAEAznB,MAAM,CAACg2H,mBAAmB,GAAG/xH,IAAI,CAAC0/F,YAAY;QAC9C3jG,MAAM,CAACilJ,iBAAiB,GAAGhhJ,IAAI,CAAC2/F,UAAU;;QAE1C;QACA,IAAI/rB,OAAO,GAAGx3E,aAAa,CAACu3E,eAAe,CAAC,CAAC;QAE7C,IAAIhgD,MAAM,GAAGigD,OAAO,CAACjgD,MAAM;QAC3B53B,MAAM,CAAC63B,OAAO,GAAGggD,OAAO,CAAChgD,OAAO;QAEhC,IAAID,MAAM,EAAE;UACR1Z,WAAW,CAACslF,gBAAgB,CAAC5rE,MAAM,CAAC,CAAC5zB,IAAI,CAAC,UAAUqF,GAAG,EAAE;YACrD,IAAIgpH,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAA,EAAe;cAChC,OAAOn0G,WAAW,CAACm0G,iBAAiB,CAACz6F,MAAM,CAAC,CAAC5zB,IAAI,CAAC,UAAAqF,GAAG,EAAI;gBACrD;gBACA;gBACAmuB,YAAY,CAACC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;gBAE1C,OAAOpuB,GAAG;cACd,CAAC,CAAC;YACN,CAAC;YAED,IAAI,CAAC,CAACwuE,OAAO,CAACvpE,IAAI,EAAE;cAChBtO,MAAM,CAACo6E,QAAQ,GAAGvC,OAAO,CAACvpE,IAAI;YAClC;YACA,IAAIjF,GAAG,CAAC,CAAC,CAAC,EAAE;cACRrJ,MAAM,CAAC4P,WAAW,GAAGvG,GAAG,CAAC,CAAC,CAAC,CAAC04B,IAAI;cAChC/hC,MAAM,CAAC4P,WAAW,GAAGirB,gFAAc,CAAC76B,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC4P,WAAW,CAACyoB,YAAY,CAAC;cACxF;cACAoqI,aAAa,CAAC,CAAC;cACfziK,MAAM,CAAC4P,WAAW,CAAC05H,QAAQ,GAAGzxD,OAAO,CAACyxD,QAAQ,KAAK,IAAI;cACvD;cACA,IAAItpI,MAAM,CAAC4P,WAAW,CAAC05H,QAAQ,EAAE;gBAC7BjpI,aAAa,CAAC65E,gBAAgB,CAACl6E,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC;gBAC1D,OAAOqyH,iBAAiB,CAAC,CAAC;cAE9B,CAAC,MACG,OAAOhyH,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;YACjD,CAAC,MAAM;cACH,OAAOh6B,WAAW,CAACiyG,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE;gBACxCv5F,MAAM,EAAEgB;cACZ,CAAC,CAAC,CACD5zB,IAAI,CAAC,UAAUC,IAAI,EAAE;gBAClB,IAAIA,IAAI,CAAC+1B,MAAM,CAAC5zB,MAAM,KAAK,CAAC,EAAE;kBAC1BjG,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,kGAAkG,CAAC,CAAC;kBACpJxB,MAAM,CAAC0iK,WAAW,CAAC,CAAC;kBACpB,OAAOriK,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;gBAC7C;gBACA,IAAIkZ,KAAK,GAAGntD,IAAI,CAAC+1B,MAAM,CAAC,CAAC,CAAC,CAACg2F,IAAI;gBAC/B;gBACAhwH,MAAM,CAAC4P,WAAW,GAAG8nB,IAAI,CAAC2T,KAAK,CAAC+lB,KAAK,CAACu1E,aAAa,CAAC;gBACpD3mI,MAAM,CAAC4P,WAAW,GAAGirB,gFAAc,CAAC76B,MAAM,CAAC4P,WAAW,EAAEwhD,KAAK,CAAC/4B,YAAY,CAAC;gBAC3Eh4B,aAAa,CAAC65E,gBAAgB,CAACl6E,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC;gBAE1D8D,CAAC,CAACmC,IAAI,CAACmrD,KAAK,CAACt4B,QAAQ,EAAE,UAAU5yB,GAAG,EAAEtG,EAAE,EAAE;kBACtC,IAAIA,EAAE,CAAC+gC,kBAAkB,KAAK,mBAAmB,EAAE;oBAE/C,IAAIgiI,eAAe,GAAG3iK,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAAC/yB,MAAM,CAAC,UAAUm9B,CAAC,EAAE;sBAClE,OAAOA,CAAC,CAAC9/B,EAAE,KAAKxD,EAAE,CAACwD,EAAE;oBACzB,CAAC,CAAC;oBAEF,IAAIu/J,eAAe,CAACv8J,MAAM,KAAK,CAAC,EAAE;sBAC9B,IAAIs6B,OAAO,GAAG;wBACVt9B,EAAE,EAAExD,EAAE,CAACwD,EAAE;wBACTu9B,kBAAkB,EAAE/gC,EAAE,CAAC+gC,kBAAkB;wBACzC5b,MAAM,EAAEnlB,EAAE,CAACmlB,MAAM;wBACjB0W,IAAI,EAAE77B,EAAE,CAAC67B,IAAI;wBACboF,SAAS,EAAEjhC,EAAE,CAACihC,SAAS;wBACvBC,eAAe,EAAE,SAAS;wBAC1BC,OAAO,EAAE,CAAC;wBACVC,SAAS,EAAE,IAAI;wBACfC,SAAS,EAAE;sBACf,CAAC;sBACDjhC,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAACzyB,IAAI,CAACq6B,OAAO,CAAC;oBAC7C;kBACJ;gBACJ,CAAC,CAAC;gBAEF1gC,MAAM,CAAC4P,WAAW,CAAC05H,QAAQ,GAAGzxD,OAAO,CAACyxD,QAAQ,KAAK,IAAI;gBAEvD,IAAIzxD,OAAO,CAACyxD,QAAQ,EAAE;kBAClBtpI,MAAM,CAAC4P,WAAW,CAAC0oB,WAAW,GAAGr0B,IAAI,CAAC+1B,MAAM,CAAC,CAAC,CAAC,CAAC1B,WAAW;kBAC3Dt4B,MAAM,CAAC4P,WAAW,CAAC8sB,gBAAgB,GAAGz4B,IAAI,CAAC+1B,MAAM,CAAC,CAAC,CAAC,CAACg2F,IAAI,CAACtzF,gBAAgB;kBAC1E18B,MAAM,CAAC4P,WAAW,CAACghB,UAAU,GAAG3sB,IAAI,CAAC+1B,MAAM,CAAC,CAAC,CAAC,CAACg2F,IAAI,CAACp/F,UAAU;gBAClE,CAAC,MAAM;kBACH5wB,MAAM,CAAC4P,WAAW,CAAC0oB,WAAW,GAAGr0B,IAAI,CAAC+1B,MAAM,CAAC,CAAC,CAAC,CAAC1B,WAAW;kBAC3Dt4B,MAAM,CAAC4P,WAAW,CAAC8sB,gBAAgB,GAAGz4B,IAAI,CAAC+1B,MAAM,CAAC,CAAC,CAAC,CAACg2F,IAAI,CAACtzF,gBAAgB;kBAC1E18B,MAAM,CAAC4P,WAAW,CAACghB,UAAU,GAAG3sB,IAAI,CAAC+1B,MAAM,CAAC,CAAC,CAAC,CAACg2F,IAAI,CAACp/F,UAAU;gBAClE;gBAEA,IAAIinD,OAAO,CAACvpE,IAAI,KAAK,UAAU,EAAE;kBAC7BtO,MAAM,CAACysI,eAAe,GAAGxoI,IAAI,CAAC+1B,MAAM,CAAC,CAAC,CAAC,CAACg2F,IAAI,CAAC33F,YAAY;gBAC7D;gBAEA,IAAIuqI,kBAAkB,CAAC,CAAC,EACpB5iK,MAAM,CAAC4P,WAAW,CAAC2yB,cAAc,GAAG3K,MAAM,CAAC,KAC1C,IAAI53B,MAAM,CAACo6E,QAAQ,KAAK,UAAU,EAAE;kBACrC;kBACA;kBACAp6E,MAAM,CAAC4P,WAAW,CAAC2yB,cAAc,GAAG5Y,KAAK,CAACuE,OAAO,CAAC,CAAC;gBACvD;gBAEA,IAAIluB,MAAM,CAAC4P,WAAW,CAAC+sB,SAAS,KAAK,OAAO,IAAI38B,MAAM,CAAC4P,WAAW,CAAC+sB,SAAS,KAAK,WAAW,IACxF38B,MAAM,CAAC63B,OAAO,KAAK,IAAI,EAAE;kBACzB73B,MAAM,CAAC6iK,iBAAiB,CAAC,CAAC;kBAC1BJ,aAAa,CAAC,CAAC;gBACnB;gBAEAjiK,QAAQ,CAAC,YAAY;kBACjB,IAAIq3E,OAAO,CAAC//C,aAAa,KAAK,IAAI,EAAE;oBAChC93B,MAAM,CAAC8iK,SAAS,CAAC,CAAC;oBAElB,IAAIjrF,OAAO,CAAC9/C,WAAW,EAAE;sBACrBgrI,YAAY,CAAC,KAAK,CAAC;oBACvB;kBACJ;gBACJ,CAAC,CAAC;gBAEF,IAAI/iK,MAAM,CAAC4P,WAAW,CAAC05H,QAAQ,EAAE;kBAC7B,OAAOjX,iBAAiB,CAAC,CAAC;gBAC9B,CAAC,MAEG,OAAOhyH,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;cACjD,CAAC,CAAC;YACV;UACJ,CAAC,CAAC,CAACl0C,IAAI,CAAC,YAAY;YAChB,IAAIpD,QAAQ,GAAGd,OAAO,CAAC+F,IAAI,CAAC7F,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC;YAExD,IAAIV,aAAa,CAACmB,QAAQ,KAAK,IAAI,IAAIT,QAAQ,CAACwC,EAAE,EAAE;cAChDhD,eAAe,CAACgJ,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;gBACrCwB,UAAU,EAAEhK,QAAQ,CAACwC;cACzB,CAAC,EAAE,IAAI,CAAC,CAACY,IAAI,CAAC,UAAUC,IAAI,EAAE;gBAC1B,IAAIA,IAAI,CAACqF,SAAS,CAAC,CAAC,CAAC,EAAE;kBACnBtJ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,GAAGqD,IAAI,CAACqF,SAAS,CAAC,CAAC,CAAC;kBAE/C,IAAI1I,QAAQ,CAACu8B,kBAAkB,EAAE;oBAC7Bn9B,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACgC,QAAQ,GAAGhC,QAAQ,CAACgC,QAAQ;oBACxD5C,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACu8B,kBAAkB,GAAGv8B,QAAQ,CAACu8B,kBAAkB;kBAChF;kBACA,IAAIv8B,QAAQ,CAAC08B,mBAAmB,EAAE;oBAC9Bt9B,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACoC,SAAS,GAAGpC,QAAQ,CAACoC,SAAS;oBAC1DhD,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC08B,mBAAmB,GAAG18B,QAAQ,CAAC08B,mBAAmB;kBAClF;kBAEA,OAAOiiI,mBAAmB,CAACv/J,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC;gBAC3D;gBAEAZ,MAAM,CAACy/J,qBAAqB,CAAC,CAAC;cAClC,CAAC,CAAC;YACN,CAAC,MAAM;cACHz/J,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC+xF,iBAAiB,GAAG,IAAI;YACxD;UACJ,CAAC,CAAC,WAAQ,CAAC,YAAY;YACnB;;YAEA1yF,UAAU,CAAC+K,UAAU,CAAC,aAAa,EAAE;cACjCg4J,iBAAiB,EAAE;YACvB,CAAC,CAAC;YACF;YACAhjK,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;UAC7B,CAAC,CAAC;QACN,CAAC,MAAM,IAAIxtB,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE;UAC/D;UACA;UACA;;UAEAloC,MAAM,CAACihK,4BAA4B,GAAG,KAAK;UAE3C,IAAIppF,OAAO,CAACvpE,IAAI,EAAE;YACdtO,MAAM,CAACo6E,QAAQ,GAAGvC,OAAO,CAACvpE,IAAI;UAClC;UAEAtO,MAAM,CAAC4P,WAAW,GAAG8nB,IAAI,CAAC2T,KAAK,CAAChsC,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,gBAAgB,CAAC,CAAC;UAC9E,IAAI+6H,eAAe,GAAGjjK,MAAM,CAAC4P,WAAW,CAACwjJ,eAAe;UACxD,IAAI4N,YAAY,GAAGhhK,MAAM,CAAC4P,WAAW,CAACyjJ,YAAY;UAClD,IAAI6P,aAAa,GAAGljK,MAAM,CAAC4P,WAAW,CAAC06H,aAAa;UAEpDtqI,MAAM,CAAC4P,WAAW,GAAGirB,gFAAc,CAAC76B,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC4P,WAAW,CAACyoB,YAAY,CAAC;UACxF,IAAIouG,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;UAEnE,IAAI5P,MAAM,CAACo6E,QAAQ,KAAK,QAAQ,EAAE;YAE9B;YACAp6E,MAAM,CAACy/J,qBAAqB,CAAC,CAAC;YAC9B,IAAI,CAACh5B,SAAS,EAAE;cACZzmI,MAAM,CAACysI,eAAe,GAAGzsI,MAAM,CAAC4P,WAAW,CAACyoB,YAAY;cACxD,OAAOr4B,MAAM,CAAC4P,WAAW,CAACyoB,YAAY;YAC1C,CAAC,MAAM;cACHr4B,MAAM,CAACysI,eAAe,GAAGzsI,MAAM,CAAC4P,WAAW,CAACkpI,cAAc;YAC9D;YAEA94I,MAAM,CAACq6E,aAAa,GAAG,QAAQ;YAC/BklF,mBAAmB,CAACv/J,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC;YAEhD,IAAIgiK,kBAAkB,CAAC,CAAC,EAAE;cACtB;cACA;;cAEA;cACA5iK,MAAM,CAAC2+I,gBAAgB,GAAG,UAAU;cACpC3+I,MAAM,CAACq6E,aAAa,GAAG,UAAU;cACjCr6E,MAAM,CAAC6iK,iBAAiB,CAAC,CAAC;YAC9B,CAAC,MAAM;cACH;cACA;cACA,IAAI,CAACp8B,SAAS,EACVzmI,MAAM,CAAC4P,WAAW,CAAC2yB,cAAc,GAAG5Y,KAAK,CAACuE,OAAO,CAAC,CAAC,CAAC,KAEpDluB,MAAM,CAAC4P,WAAW,CAACuzJ,cAAc,GAAGx5I,KAAK,CAACuE,OAAO,CAAC,CAAC;YAC3D;UACJ,CAAC,MAAM,IAAIluB,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,IAAIp6E,MAAM,CAACo6E,QAAQ,KAAK,oBAAoB,EAAE;YAC3F,IAAIq0D,QAAQ,GAAGzuI,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB;YAErD,IAAIz4D,GAAG,GAAG7hB,OAAO,CAAC+F,IAAI,CAAC7F,MAAM,CAAC4P,WAAW,CAAC;YAC1C5P,MAAM,CAAC06J,SAAS,CAAC,CAAC;YAClB16J,MAAM,CAAC4P,WAAW,GAAG9L,CAAC,CAAC2L,MAAM,CAACzP,MAAM,CAAC4P,WAAW,EAAE+R,GAAG,CAAC;YAEtD,IAAIshJ,eAAe,EACfjjK,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,GAAGqiK,eAAe;YAEjDjjK,MAAM,CAAC4P,WAAW,CAACyjJ,YAAY,GAAG2N,YAAY;YAC9ChhK,MAAM,CAAC4P,WAAW,CAAC06H,aAAa,GAAG44B,aAAa;YAChD,IAAIlC,YAAY,EAAE;cACdhhK,MAAM,CAACupJ,iBAAiB,GAAG,KAAK;cAChCvpJ,MAAM,CAACghK,YAAY,GAAG,IAAI;YAC9B;YAEAhhK,MAAM,CAACq6E,aAAa,GAAGo0D,QAAQ,GAAG,QAAQ,GAAG,UAAU;YACvD,IAAI,CAAChI,SAAS,EAAE;cACZzmI,MAAM,CAAC4P,WAAW,CAAC2yB,cAAc,GAAG5Y,KAAK,CAACuE,OAAO,CAAC,CAAC;cAEnD,IAAGugH,QAAQ,EACPzuI,MAAM,CAAC4P,WAAW,CAACu0D,gBAAgB,GAAG,IAAI,CAAC,KAE3CnkE,MAAM,CAAC4P,WAAW,CAACi5H,kBAAkB,GAAG,IAAI;YACpD,CAAC,MAAM;cACH7oI,MAAM,CAAC4P,WAAW,CAACuzJ,cAAc,GAAGx5I,KAAK,CAACuE,OAAO,CAAC,CAAC;cAEnD,IAAGugH,QAAQ,EACPzuI,MAAM,CAAC4P,WAAW,CAACwzJ,gBAAgB,GAAG,IAAI,CAAC,KAE3CpjK,MAAM,CAAC4P,WAAW,CAACyzJ,kBAAkB,GAAG,IAAI;YACpD;YAEArjK,MAAM,CAACihK,4BAA4B,GAAG,IAAI;YAC1CjhK,MAAM,CAACo6E,QAAQ,GAAGq0D,QAAQ,GAAG,kBAAkB,GAAG,oBAAoB;YACtEzuI,MAAM,CAACkhK,WAAW,GAAG,KAAK;YAC1BlhK,MAAM,CAACohK,cAAc,GAAG,KAAK;UACjC,CAAC,MACI,IAAIphK,MAAM,CAACo6E,QAAQ,KAAK,SAAS,EAAE;YACpC,IAAIkpF,KAAK,GAAGxjK,OAAO,CAAC+F,IAAI,CAAC7F,MAAM,CAAC4P,WAAW,CAAC;YAC5C5P,MAAM,CAAC06J,SAAS,CAAC,CAAC;YAClB16J,MAAM,CAACo6E,QAAQ,GAAG,SAAS;YAC3Bt2E,CAAC,CAAC2L,MAAM,CAACzP,MAAM,CAAC4P,WAAW,EAAE0zJ,KAAK,CAAC;UACvC;UAEA,IAAG,CAAC,CAACtjK,MAAM,CAACo6E,QAAQ,EAAE;YAClB/5E,aAAa,CAAC65E,gBAAgB,CAAC,IAAI,CAAC;UACxC;UAEA1iD,YAAY,CAAC4xB,UAAU,CAAC,gBAAgB,CAAC;UACzCppD,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB,GAAG,CAAC;UACzC55I,MAAM,CAAC4P,WAAW,CAACkyB,kBAAkB,GAAG,IAAI;UAC5C9hC,MAAM,CAAC4P,WAAW,CAACotB,YAAY,GAAG,CAAC;UACnCh9B,MAAM,CAAC4P,WAAW,CAACgtB,gBAAgB,GAAG,CAAC;UAEvC,IAAI58B,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,IAAIp6E,MAAM,CAACo6E,QAAQ,KAAK,oBAAoB,IAAIp6E,MAAM,CAACo6E,QAAQ,KAAK,SAAS,EAAE;YACrHp6E,MAAM,CAACo6E,QAAQ,GAAG,QAAQ;UAC9B,CAAC,MAAM;YACHp6E,MAAM,CAAC4P,WAAW,CAACkyB,kBAAkB,GAAG,KAAK;UACjD;UAEA,IAAI9hC,MAAM,CAAC4P,WAAW,CAACktB,cAAc,EAAE;YAEnC98B,MAAM,CAAC4P,WAAW,CAAC2zJ,oBAAoB,GAAGvjK,MAAM,CAAC4P,WAAW,CAACktB,cAAc;YAC3E98B,MAAM,CAAC4P,WAAW,CAAC4zJ,sBAAsB,GAAGxjK,MAAM,CAAC4P,WAAW,CAACszF,gBAAgB;YAC/EljG,MAAM,CAAC4P,WAAW,CAAC6zJ,0BAA0B,GAAGzjK,MAAM,CAAC4P,WAAW,CAACuzF,oBAAoB;UAC3F;UAEAnjG,MAAM,CAAC4P,WAAW,CAACktB,cAAc,GAAG,IAAI;UACxC98B,MAAM,CAAC4P,WAAW,CAACszF,gBAAgB,GAAG,IAAI;UAC1CljG,MAAM,CAAC4P,WAAW,CAACuzF,oBAAoB,GAAG,IAAI;UAE9C,IAAI,CAACsjC,SAAS,EAAE;YACZ3iI,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;cACxDA,EAAE,CAACqrI,mBAAmB,GAAG,CAAC;YAC9B,CAAC,CAAC;UACN;UAEA,IAAIrqI,QAAQ,GAAGZ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ;UAE1C,IAAIV,aAAa,CAACmB,QAAQ,IAAI,CAAC,CAACT,QAAQ,CAACwC,EAAE,EAAE;YACzC,OAAOhD,eAAe,CAAC43C,WAAW,CAACp3C,QAAQ,CAACwC,EAAE,CAAC,CAC1CY,IAAI,CAAC,UAAUC,IAAI,EAAE;cAClB,IAAIA,IAAI,CAACqF,SAAS,CAAC,CAAC,CAAC,EAAE;gBACnBtJ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,GAAGqD,IAAI,CAACqF,SAAS,CAAC,CAAC,CAAC;cACnD;cAEA,IAAIgC,EAAE,GAAGjL,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;cAE3C,IAAIl4C,MAAM,CAACo6E,QAAQ,KAAK,SAAS,EAAE;gBAC/B9uE,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;kBACrB,OAAOhE,MAAM,CAACg/J,kBAAkB,CAACh/J,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC;gBACjE,CAAC,CAAC;cACN;cAEAkD,CAAC,CAACO,SAAS,CAAC,CAAC;cACb,OAAOiH,EAAE;YAEb,CAAC,EAAE,UAAU+d,KAAK,EAAE;cAChBvlB,CAAC,CAACO,SAAS,CAAC,CAAC;YACjB,CAAC,CAAC,CACDL,IAAI,CAAC,YAAY;cACd,OAAOu7J,mBAAmB,CAACv/J,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC;YAC3D,CAAC,CAAC;UACV,CAAC,MAAM;YACHkD,CAAC,CAACO,SAAS,CAAC,CAAC;UACjB;UAEArE,MAAM,CAACgL,UAAU,CAAC,aAAa,CAAC;QACpC,CAAC,MAAM;UACHlH,CAAC,CAACO,SAAS,CAAC,CAAC;QACjB;MACJ,CAAC,EACD,UAAUF,GAAG,EAAE;QACX;QACAjE,aAAa,CAACgkC,oBAAoB,GAAG,KAAK;QAE1C+pC,mBAAmB,CAAC4B,MAAM,CAAC,CAAC;QAE5B1vE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAEwrE,MAAM,CAAC;MACvC,CAAC,CAAC;IACd,CAAC,EACD,UAAUxrE,GAAG,EAAE;MACXhE,YAAY,CAACiE,SAAS,CAAC,8CAA8C,EAAEurE,MAAM,CAAC;MAC9E;IACJ,CAAC,CAAC;IAEVzxD,WAAW,CAACknH,wBAAwB,CAAC,CAAC,CAAC,CAAC;;IAExCliG,CAAC,CAACl/B,IAAI,CAAC,YAAU;MACb,OAAOhE,MAAM,CAAC0jK,sBAAsB,CAAC,CAAC;IAC1C,CAAC,CAAC,WACM,CAAC,YAAY;MACjB1jK,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;MACzB7nB,OAAO,CAAC20C,OAAO,CAAC,uBAAuB,CAAC;MACxC71C,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb,IAAG,CAACrE,MAAM,CAAC2jK,eAAe,EAAE;QACxB;QACA;QACA;QACA,IAAIC,OAAO,GAAG5jK,MAAM,CAAC0iK,WAAW,CAAC,CAAC;QAClC,IAAI1iK,MAAM,CAAC4P,WAAW,IAAIg0J,OAAO,IAAIA,OAAO,CAACljI,OAAO,EAAE;UAClD1gC,MAAM,CAAC6jK,eAAe,GAAGD,OAAO;UAChC5jK,MAAM,CAAC8sD,UAAU,GAAG,sBAAsB;UAC1CkG,UAAU,CACN,YAAW;YACP3yD,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAClEf,cAAc,CAACe,SAAS,CAAC,wGAAwG,CAAC,EAClIf,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC,EAC/Bf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;UACnC,CAAC,EACH,IAAI,CAAC;QACX,CAAC,MAAM,OAAOxB,MAAM,CAAC6jK,eAAe;QAEpC,IAAI;UACA,IAAID,OAAO,EAAE;YACT3/E,qBAAqB,CAACpoB,MAAM,CAAC77D,MAAM,EAAE,MAAM,CAAC;UAChD;QACJ,CAAC,CAAC,OAAOuhB,CAAC,EAAE;UACRvc,OAAO,CAACC,GAAG,CAACsc,CAAC,CAAC;QAClB;MACJ;MAEAvhB,MAAM,CAAC2jK,eAAe,GAAG,KAAK;IAClC,CAAC,CAAC;EACN,CAAC;EAED3jK,MAAM,CAAC2jK,eAAe,GAAG,KAAK;;EAE9B;EACA3jK,MAAM,CAAC0jK,sBAAsB,GAAG,YAAY;IACxC1jK,MAAM,CAAC2jK,eAAe,GAAG,KAAK;IAE9B,IAAIC,OAAO,GAAGvjK,aAAa,CAACi6E,kBAAkB,CAAC,CAAC;IAChD;IACA,IAAI,CAAC,CAACspF,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC7hI,IAAI,IAAI,CAAC6hI,OAAO,CAACljI,OAAO,EAAE;MACjD,OAAOxiB,WAAW,CAAC2hI,uBAAuB,CAAC+jB,OAAO,CAAC7hI,IAAI,CAAC3+B,EAAE,CAAC,CAC1DY,IAAI,CAAC,UAASqF,GAAG,EAAC;QACfrJ,MAAM,CAAC2jK,eAAe,GAAGt6J,GAAG,KAAK,IAAI;QACrC,OAAOhJ,aAAa,CAAC63C,cAAc,CAAC7uC,GAAG,KAAK,IAAI,CAAC;MACrD,CAAC,CAAC;IACN,CAAC,MAAM;MACHrJ,MAAM,CAAC2jK,eAAe,GAAG,KAAK;MAC9B,OAAOtjK,aAAa,CAAC63C,cAAc,CAAC,KAAK,CAAC;IAC9C;EACJ,CAAC;EAEDl4C,MAAM,CAAC0iK,WAAW,GAAG,YAAY;IAC7B,IAAIkB,OAAO,GAAGvjK,aAAa,CAACi6E,kBAAkB,CAAC,CAAC;IAChD,IAAI,CAAC,CAACspF,OAAO,IAAI,CAAC,CAACA,OAAO,CAAC7hI,IAAI,EAAE;MAC7Bk9H,eAAe,CAAC,CAAC;MACjBj/J,MAAM,CAAC4P,WAAW,GAAGg0J,OAAO,CAAC7hI,IAAI;MACjC;;MAEA,IAAI,CAAC,CAAC6hI,OAAO,CAACxpF,QAAQ,EAClBp6E,MAAM,CAACo6E,QAAQ,GAAGwpF,OAAO,CAACxpF,QAAQ;MAEtC,IAAI,CAAC,CAACwpF,OAAO,CAACvpF,aAAa,EACvBr6E,MAAM,CAACq6E,aAAa,GAAGupF,OAAO,CAACvpF,aAAa;MAEhD,IAAIr6E,MAAM,CAACo6E,QAAQ,KAAK,QAAQ,IAC5B,CAACp6E,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,EAAE;QACjCpD,MAAM,CAACspJ,kBAAkB,GAAG,IAAI;MACpC;MAEA,IAAItpJ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,IAC3BZ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,EAC9Bm8J,mBAAmB,CAACv/J,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC;MAEpD,IAAIgjK,OAAO,CAACljI,OAAO,EAAE;QACjB1gC,MAAM,CAACmwC,4BAA4B,GAAGyzH,OAAO,CAACzzH,4BAA4B;QAC1EnwC,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,GAAG,CAAColJ,OAAO,CAACplJ,OAAO,GAAG,CAAC,GAAGolJ,OAAO,CAACplJ,OAAO;MACtE;IACJ;IAEAxe,MAAM,CAACy/J,qBAAqB,CAAC,CAAC;IAE9B,OAAOmE,OAAO;EAClB,CAAC;EAED5jK,MAAM,CAAC6iK,iBAAiB,GAAG,YAAY;IACnC7iK,MAAM,CAACupJ,iBAAiB,GAAG,KAAK;IAChCvpJ,MAAM,CAACkhK,WAAW,GAAG,KAAK;IAC1BlhK,MAAM,CAACohK,cAAc,GAAG,KAAK;IAC7BphK,MAAM,CAACshK,sBAAsB,GAAG,KAAK;IACrCx9J,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;MACxDA,EAAE,CAACg/B,OAAO,GAAG,KAAK;MAClBh/B,EAAE,CAACi/B,SAAS,GAAG,KAAK;MACpB,IAAI7+B,MAAM,CAAC89E,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM;QACpCl+E,EAAE,CAACi9B,YAAY,GAAGj9B,EAAE,CAACqrI,mBAAmB;QACxCrrI,EAAE,CAACqrI,mBAAmB,GAAG,CAAC;QAC1BrrI,EAAE,CAACm+B,KAAK,IAAIn+B,EAAE,CAACi9B,YAAY;MAC/B;IACJ,CAAC,CAAC;EACN,CAAC;EAED78B,MAAM,CAAC6sB,gBAAgB,GAAG,YAAY;IAClC;;IAEA5sB,UAAU,CAAC+K,UAAU,CAAC,YAAY,CAAC;IAEnCxK,QAAQ,CAAC,YAAY;MACjBP,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;IACxC,CAAC,CAAC;IACFxK,QAAQ,CAAC,YAAY;MACjBR,MAAM,CAAC8jK,UAAU,GAAG,IAAI;IAC5B,CAAC,CAAC;EACN,CAAC;EAED9jK,MAAM,CAAC+jK,aAAa,GAAG,IAAI;EAC3B/jK,MAAM,CAACgkK,oBAAoB,GAAG,IAAI;EAElChkK,MAAM,CAACikK,mBAAmB,GAAG,YAAY;IACrCzG,wBAAwB,CAAC0G,oBAAoB,CAAC,CAAC;EACnD,CAAC;EAEDzG,QAAQ,CAACp3J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,UAAU2W,GAAG,EAAEwD,GAAG,EAAE;IACxD;IACA;IACAtc,aAAa,CAACmlC,YAAY,CAAC,CAAC;IAE5B,IAAIrlC,MAAM,CAAC+jK,aAAa,EAAE;MACtB/jK,MAAM,CAAC+jK,aAAa,GAAG,KAAK;MAE5B1jK,aAAa,CAAC0wD,aAAa,CAAC/wD,MAAM,CAACsY,UAAU,EAAE,iBAAiB,CAAC;MAEjE,IAAI,CAAC,CAACpY,aAAa,CAACmqC,SAAS,EAAE;QAC3B,IAAI85H,eAAe,GAAGjkK,aAAa,CAACqvC,sBAAsB,CAAC,CAAC;QAC5D,IAAIC,WAAW,GAAG20H,eAAe,IAAIA,eAAe,CAAC30H,WAAW,GAAG20H,eAAe,CAAC30H,WAAW,GAAG,IAAI;QAErG,IAAIA,WAAW,KAAK,6BAA6B,EAAE;UAC/C,IAAI40H,SAAS,GAAG/kK,MAAM,CAACm4B,YAAY,CAAC0Q,OAAO,CAAC,QAAQ,CAAC;UAErD,IAAI,CAAC,CAACk8H,SAAS,EAAE;YACb7G,2BAA2B,CAAC9iE,YAAY,CAAC,CAAC;UAC9C;QACJ;MACJ;MAEA,IAAI4pE,YAAY,GAAG7sI,YAAY,CAAC0Q,OAAO,CAAC,cAAc,CAAC;MACvD1Q,YAAY,CAAC4xB,UAAU,CAAC,cAAc,CAAC;MACvC,IAAIlpD,aAAa,CAACX,MAAM,IAAI8kK,YAAY,IAAI7sI,YAAY,CAAC0Q,OAAO,CAAC,wBAAwB,CAAC,KAAK,MAAM,EAAE;QACnG;QACApkC,CAAC,CAAC,yBAAyB,CAAC,CAAC0V,KAAK,CAAC,CAAC;MACxC;IACJ;IAEA,IAAIxZ,MAAM,CAACgkK,oBAAoB,IAAIhkK,MAAM,CAACkiK,kBAAkB,IAAI,CAAC,EAAE;MAC/DliK,MAAM,CAACgkK,oBAAoB,GAAG,KAAK;MAEnC3jK,aAAa,CAACo5E,cAAc,CAACz5E,MAAM,CAACsY,UAAU,EAAE,YAAY,EACxD,YAAY;QACRxU,CAAC,CAAC,YAAY,CAAC,CAACixE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;MAC1C,CAAC,EACD,YAAY;QACRjxE,CAAC,CAAC,YAAY,CAAC,CAACixE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC;MAC3C,CACJ,CAAC;IACL;IAEAv0E,QAAQ,CAAC,YAAY;MACjBP,UAAU,CAAC+K,UAAU,CAAC,kBAAkB,CAAC;MACzC/K,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,CAAC;MAC9C,IAAIoX,CAAC,GAAGte,CAAC,CAAC,6BAA6B,CAAC;MACxC,IAAIwnB,GAAG,GAAGlJ,CAAC,CAACmJ,MAAM,CAAC,CAAC;MACpBvmB,OAAO,CAACC,GAAG,CAAC,eAAe,CAAC;MAC5BD,OAAO,CAACC,GAAG,CAACqmB,GAAG,CAACjO,IAAI,GAAG,GAAG,GAAGiO,GAAG,CAACM,GAAG,CAAC;MACrC5mB,OAAO,CAACC,GAAG,CAACmd,CAAC,CAAClF,KAAK,CAAC,CAAC,GAAG,GAAG,GAAGkF,CAAC,CAACjF,MAAM,CAAC,CAAC,CAAC;MACzCnY,OAAO,CAACC,GAAG,CAACnB,CAAC,CAACzE,MAAM,CAAC,CAAC8d,MAAM,CAAC,CAAC,CAAC;MAE/Bnd,MAAM,CAACgL,UAAU,CAAC,aAAa,CAAC;IACpC,CAAC,CAAC;;IAEF;IACA;IACA;IACA;EACJ,CAAC,CAAC,CAAC;EAEHyyJ,QAAQ,CAACp3J,IAAI,CAACpG,UAAU,CAACoC,GAAG,CAAC,uBAAuB,EAAE,UAAUC,KAAK,EAAEkoH,YAAY,EAAE;IACjF,IAAIA,YAAY,KAAK,gCAAgC,EAAE;MACnDxlH,OAAO,CAACC,GAAG,CAAC,qBAAqB,GAAGulH,YAAY,CAAC;MACjDvqH,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;IACxC;EACJ,CAAC,CAAC,CAAC;EAEHhL,MAAM,CAAC6oH,QAAQ,GAAG,IAAI;EACtB7oH,MAAM,CAAC6c,eAAe,GAAG,IAAI;EAE7B7c,MAAM,CAACiL,YAAY,GAAG,UAAU3I,KAAK,EAAE;IACnC,IAAIA,KAAK,CAAC4I,KAAK,KAAK,EAAE,EAAE;MACpBlL,MAAM,CAAC6c,eAAe,GAAG,IAAI;MAC7B7c,MAAM,CAACs6B,MAAM,CAAC,IAAI,CAAC;IACvB;EACJ,CAAC;EAEDt6B,MAAM,CAACskK,kBAAkB,GAAG,YAAY;IACpC9jK,QAAQ,CAAC,YAAY;MACjBR,MAAM,CAAC69J,gBAAgB,GAAG,CAAC79J,MAAM,CAAC69J,gBAAgB;IACtD,CAAC,CAAC;EACN,CAAC;EAED79J,MAAM,CAACukK,wBAAwB,GAAG,YAAY;IAC1C/jK,QAAQ,CAAC,YAAY;MACjBsD,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC,CAAC,CAAC+iF,cAAc,CAAC;QAACC,QAAQ,EAAE,QAAQ;QAAEC,KAAK,EAAE,KAAK;QAAEC,MAAM,EAAE;MAAS,CAAC,CAAC;IAC7H,CAAC,CAAC;EACN,CAAC;EACD;EACA;EACA;;EAGA;EACA;;EAEA;EACAhnF,MAAM,CAACs6B,MAAM,GAAG,UAAUkqI,YAAY,EAAE;IAEpCvkK,UAAU,CAAC+K,UAAU,CAAC,qBAAqB,CAAC;IAC5C,IAAIy5J,qBAAqB,GAAGD,YAAY,IAAI,IAAI;IAChD,IAAIxkK,MAAM,CAACud,UAAU,IAAI,gBAAgB,IAAIvd,MAAM,CAACud,UAAU,IAAI,UAAU,EAAE;MAE1Evd,MAAM,CAAC6oH,QAAQ,GAAG7oH,MAAM,CAACud,UAAU,IAAI,gBAAgB,GAAG,IAAI,GAAGvd,MAAM,CAAC6oH,QAAQ;MAEhF,IAAI67C,UAAU,GAAG,IAAI;MAErB1kK,MAAM,CAACud,UAAU,GAAGvd,MAAM,CAAC6oH,QAAQ,IAAI,IAAI,GAAG,UAAU,GAAG,gBAAgB;MAE3E,IAAI,CAAC,CAAC3oH,aAAa,CAACysC,kBAAkB,EAClC3sC,MAAM,CAACa,UAAU,GAAG,EAAE,CAAC,KACtB,OAAO,KAAK;IACrB;;IAEA;IACA,IAAI6jK,UAAU,KAAK,IAAI,EAAE;MACrB1kK,MAAM,CAACud,UAAU,GAAG,aAAa;MACjCvd,MAAM,CAAC6oH,QAAQ,GAAG,IAAI;MACtB,IAAI,CAAC7oH,MAAM,CAAC6c,eAAe,KACtB,CAAC7c,MAAM,CAACa,UAAU,IAAIb,MAAM,CAACa,UAAU,CAACuF,MAAM,GAAGlG,aAAa,CAACoB,uBAAuB,CAAC,EAAE;QAC1FnB,YAAY,CAACiE,SAAS,CAACpE,MAAM,CAAC2hK,8BAA8B,CAAC;QAC7D,OAAO,KAAK;MAChB;IACJ;IAEA,IAAIzhK,aAAa,CAAC2L,QAAQ,EAAE;MACxBhB,QAAQ,CAACC,IAAI,CAAC,CAAC;IACnB,CAAC,MAAM;MACHzK,aAAa,CAAC0K,YAAY,CAAC,CAAC;IAChC;IAEAjH,CAAC,CAACC,OAAO,CAAC,CAAC;IACXgvB,eAAe,CAACuH,MAAM,CAACt6B,MAAM,CAACa,UAAU,EAAE6jK,UAAU,EAAE1kK,MAAM,CAAC6oH,QAAQ,EAAE7oH,MAAM,CAAC6c,eAAe,CAAC,CACzF7Y,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB;MACArJ,MAAM,CAACugK,WAAW,GAAGl3J,GAAG;MACxBrJ,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACnxB,GAAG,GAAGrJ,MAAM,CAAC4zC,QAAQ,CAAC;MACpD5zC,MAAM,CAACygK,UAAU,GAAG,KAAK;MACzB,OAAO1tI,eAAe,CAACq+D,aAAa,CAAC,CAAC,EAAEpxF,MAAM,CAAC4zC,QAAQ,EAAE8wH,UAAU,EAAE1kK,MAAM,CAAC6oH,QAAQ,EAAE7oH,MAAM,CAAC6c,eAAe,CAAC;IACjH,CAAC,CAAC,CACD7Y,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBrJ,MAAM,CAACu+J,WAAW,GAAGl1J,GAAG,CAACnF,IAAI;MAC7BlE,MAAM,CAACwgK,WAAW,GAAGn3J,GAAG,CAAC+xB,IAAI;MAE7B,IAAG,CAAC/xB,GAAG,CAACnF,IAAI,IAAImF,GAAG,CAACnF,IAAI,CAACkC,MAAM,IAAI,CAAC,EAAC;QACjCpG,MAAM,CAAC+hK,iBAAiB,CAAC/hK,MAAM,CAACa,UAAU,EAAEb,MAAM,CAACud,UAAU,KAAK,UAAU,CAAC;MACjF;IACJ,CAAC,CAAC,SACI,CAAC,UAAUpZ,GAAG,EAAE;MAClBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC,WACM,CAAC,YAAY;MACjB,IAAI0Y,eAAe,GAAG7c,MAAM,CAAC6c,eAAe;MAC5C,IAAIisG,kBAAkB,GAAG/1F,eAAe,CAAC+1F,kBAAkB;MAC3D9oH,MAAM,CAAC6c,eAAe,GAAG,IAAI;MAE7B,IAAItR,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,IAAIC,OAAO,GAAGH,QAAQ,CAACG,OAAO;MAE9B,IAAI,CAAC,CAAC1L,MAAM,CAACu+J,WAAW,IAAI,CAACv+J,MAAM,CAAC6oH,QAAQ,EAAE;QAC1C,IAAI/+G,IAAI,GAAG9J,MAAM,CAACu+J,WAAW,CAAC,CAAC,CAAC;QAChC,IAAIv+J,MAAM,CAACu+J,WAAW,IAAIv+J,MAAM,CAACu+J,WAAW,CAACn4J,MAAM,KAAK,CAAC,IAAIpG,MAAM,CAACu+J,WAAW,CAAC,CAAC,CAAC,CAACjpG,QAAQ,KAAK,CAAC,KAC5Fj1D,aAAa,CAAC68E,cAAc,CAACpzE,IAAI,CAAC2Q,WAAW,EAAEza,MAAM,CAACa,UAAU,CAAC,IAC9DR,aAAa,CAAC68E,cAAc,CAACpzE,IAAI,CAAC0Q,OAAO,EAAExa,MAAM,CAACa,UAAU,CAAC,IAC7DR,aAAa,CAAC68E,cAAc,CAACpzE,IAAI,CAACuS,SAAS,EAAEQ,eAAe,CAAC,IAC7DisG,kBAAkB,CAAC,EAAE;UACzBp9G,OAAO,GAAGA,OAAO,CAAC1H,IAAI,CAAC,YAAY;YAC/B,IAAI4R,KAAK,GAAGkzG,kBAAkB,GAAGA,kBAAkB,CAAClzG,KAAK,GAAG,IAAI;YAChE5V,MAAM,CAAC2kK,cAAc,CAAC76J,IAAI,CAACuS,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAEzG,KAAK,CAAC;YAC9D5V,MAAM,CAACukK,wBAAwB,CAAC,CAAC;YACjC,IAAIvmJ,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;YAC1BwS,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;YACvB,OAAOuS,SAAS,CAACtS,OAAO;UAC5B,CAAC,CAAC;QACN,CAAC,MAAM,IAAI1L,MAAM,CAACu+J,WAAW,IAAIv+J,MAAM,CAACu+J,WAAW,CAACn4J,MAAM,KAAK,CAAC,IAAIpG,MAAM,CAACu+J,WAAW,CAAC,CAAC,CAAC,CAACjpG,QAAQ,KAAK,CAAC,EAAE;UACtG5pD,OAAO,GAAGA,OAAO,CAAC1H,IAAI,CAAC,YAAY;YAC/B,OAAO+uB,eAAe,CAACu2F,mBAAmB,CAACx/G,IAAI,CAACuS,SAAS,CAAC,CAACrY,IAAI,CAAC,UAAUC,IAAI,EAAE;cAC5EH,CAAC,CAACmC,IAAI,CAAChC,IAAI,EAAE,UAAUuQ,CAAC,EAAE5U,EAAE,EAAE;gBAC1B,IAAII,MAAM,CAACsgK,eAAe,IAAI,CAACtgK,MAAM,CAAC69J,gBAAgB,EAAE;kBACpD79J,MAAM,CAAC69J,gBAAgB,GAAG,IAAI;gBAClC;gBAEA,IAAIx9J,aAAa,CAAC68E,cAAc,CAACt9E,EAAE,CAAC6a,WAAW,EAAEza,MAAM,CAACa,UAAU,CAAC,IAC/DR,aAAa,CAAC68E,cAAc,CAACt9E,EAAE,CAAC4a,OAAO,EAAExa,MAAM,CAACa,UAAU,CAAC,EAAE;kBAC7D6K,OAAO,GAAGA,OAAO,CAAC1H,IAAI,CAAC,YAAY;oBAC/BhE,MAAM,CAAC2kK,cAAc,CAAC/kK,EAAE,EAAE,IAAI,CAAC;oBAC/BI,MAAM,CAACukK,wBAAwB,CAAC,CAAC;oBACjC,IAAIvmJ,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;oBAC1BwS,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;oBACvB,OAAOuS,SAAS,CAACtS,OAAO;kBAC5B,CAAC,CAAC;kBAEF,OAAO,KAAK;gBAChB;cACJ,CAAC,CAAC;YACN,CAAC,CAAC;UACN,CAAC,CAAC;QACN,CAAC,MAAM;UACH,IAAI+4J,qBAAqB,IAAI,IAAI,IAAIvkK,aAAa,CAAC+I,cAAc,EAAE;YAC/DzI,QAAQ,CAAC,YAAY;cACjBR,MAAM,CAAC69J,gBAAgB,GAAG,IAAI;YAClC,CAAC,CAAC;UACN;QACJ;MACJ;MAEAr9J,QAAQ,CAAC,YAAY;QACjBkgJ,kBAAkB,CAACr0E,cAAc,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;MACjF,CAAC,EAAE,GAAG,CAAC;MAEP7rE,QAAQ,CAAC,YAAY;QACjBsD,CAAC,CAAC,UAAU,CAAC,CAACU,OAAO,CAAC,WAAW,CAAC;QAClCvE,UAAU,CAAC+K,UAAU,CAAC,kBAAkB,CAAC;MAC7C,CAAC,EAAE,EAAE,CAAC;MAEN,OAAOU,OAAO,CAAC1H,IAAI,CAAC,YAAY;QACxB,IAAI,CAAChE,MAAM,CAAC4kK,oBAAoB,EAAE;UAC9B7xI,eAAe,CAAC+1F,kBAAkB,GAAG,IAAI;QAC7C;;QAEA;QACA,IAAI9oH,MAAM,CAACud,UAAU,IAAI,UAAU,EAC/Bvd,MAAM,CAAC6oH,QAAQ,GAAG,IAAI;QAC1B,IAAI7qG,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAC1BwS,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;QACvB3H,CAAC,CAACO,SAAS,CAAC,CAAC;QACb,OAAO2Z,SAAS,CAACtS,OAAO;MAC5B,CAAC,CAAC,SACI,CAAC,UAAUvH,GAAG,EAAE;QAClB4uB,eAAe,CAAC+1F,kBAAkB,GAAG,IAAI;QACzChlH,CAAC,CAACO,SAAS,CAAC,CAAC;QACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC/B,CAAC,CAAC;IACV,CAAC,CAAC;IAENnE,MAAM,CAACo7B,IAAI,GAAG,CAAC;EACnB,CAAC;EAED,SAASypI,YAAYA,CAACr4J,CAAC,EAAE8N,CAAC,EAAE;IACxB,IAAI9N,CAAC,CAAC9J,IAAI,GAAG4X,CAAC,CAAC5X,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI8J,CAAC,CAAC9J,IAAI,GAAG4X,CAAC,CAAC5X,IAAI,EAAE,OAAO,CAAC;IAC7B,OAAO,CAAC;EACZ;EAEA1C,MAAM,CAAC8kK,gBAAgB,GAAG,UAAUvjJ,CAAC,EAAE6pE,SAAS,EAAE91B,QAAQ,EAAE;IACxD,IAAIyvG,IAAI,GAAG/kK,MAAM,CAACu+J,WAAW,CAACx4J,MAAM,CAAC,UAAUnG,EAAE,EAAE;MAC/C,OAAOA,EAAE,CAACyc,SAAS,IAAI+uE,SAAS;IACpC,CAAC,CAAC,CAAC,CAAC,CAAC;IACLprF,MAAM,CAACglK,kBAAkB,GAAG;MACxB55E,SAAS,EAAEA,SAAS;MACpB91B,QAAQ,EAAEA,QAAQ,KAAK,CAAC;MACxBsH,OAAO,EAAE,IAAI;MACbC,OAAO,EAAE,IAAI;MACbC,OAAO,EAAE,IAAI;MACblzD,IAAI,EAAE,IAAI;MACV40F,GAAG,EAAE;IACT,CAAC;IACDx+F,MAAM,CAACglK,kBAAkB,CAACp7J,IAAI,GAAGm7J,IAAI,CAACriK,IAAI;IAC1C1C,MAAM,CAACglK,kBAAkB,CAACxmE,GAAG,GAAGumE,IAAI,CAAC7lI,GAAG;IACxCl/B,MAAM,CAACglK,kBAAkB,CAACC,WAAW,GAAGF,IAAI,CAACz3E,WAAW;IACxDttF,MAAM,CAACglK,kBAAkB,CAACE,WAAW,GAAGH,IAAI,CAACv3E,WAAW;IACxDxtF,MAAM,CAACglK,kBAAkB,CAACG,WAAW,GAAGJ,IAAI,CAACr3E,WAAW;IACxD,IAAInuE,IAAI,GAAG,CAAC,CAAC;IACb,IAAI+1C,QAAQ,KAAK,CAAC,EACd/1C,IAAI,GAAG;MACHq9C,OAAO,EAAEmoG,IAAI,CAACzlI,OAAO;MACrBu9B,OAAO,EAAEkoG,IAAI,CAACxlI,OAAO;MACrBu9B,OAAO,EAAEioG,IAAI,CAACvlI;IAClB,CAAC;IAEL,IAAI,CAAC,CAACulI,IAAI,CAACvlI,OAAO,EACdx/B,MAAM,CAACglK,kBAAkB,CAACI,QAAQ,GAAG,CAAC,CAAC,KACtC,IAAI,CAAC,CAACL,IAAI,CAACxlI,OAAO,EACnBv/B,MAAM,CAACglK,kBAAkB,CAACI,QAAQ,GAAG,CAAC,CAAC,KACtC,IAAI,CAAC,CAACL,IAAI,CAACzlI,OAAO,EACnBt/B,MAAM,CAACglK,kBAAkB,CAACI,QAAQ,GAAG,CAAC,CAAC,KAEvCplK,MAAM,CAACglK,kBAAkB,CAACI,QAAQ,GAAG,CAAC;IAE1CnlK,UAAU,CAAC+K,UAAU,CAAC,0BAA0B,EAAEuU,IAAI,CAAC;EAC3D,CAAC;EAEDvf,MAAM,CAACqlK,WAAW,GAAG,UAAU9jJ,CAAC,EAAEjF,IAAI,EAAE8uE,SAAS,EAAE91B,QAAQ,EAAEgwG,UAAU,EAAE;IAErE,IAAIhwG,QAAQ,EAAE;MACV,IAAK,CAACt1D,MAAM,CAACm+J,oBAAoB,IAAIn+J,MAAM,CAACm+J,oBAAoB,CAACoH,SAAS,IAAIjpJ,IAAI,EAAG;QACjF;QACArc,UAAU,CAAC+K,UAAU,CAAC,mBAAmB,CAAC;MAC9C,CAAC,MACG;MAEJ,IAAIs6J,UAAU,KAAK,IAAI,EAAE;QACrBtlK,MAAM,CAAC6oH,QAAQ,GAAGz9B,SAAS;QAC3BprF,MAAM,CAACud,UAAU,GAAG,UAAU;QAC9Bvd,MAAM,CAACs6B,MAAM,CAAC,CAAC;QACf;MACJ;MAEAx2B,CAAC,CAACC,OAAO,CAAC,CAAC;;MAEX;MACAgvB,eAAe,CAACu2F,mBAAmB,CAACl+B,SAAS,CAAC,CACzCpnF,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACjB,IAAI07J,IAAI,GAAG/kK,MAAM,CAACu+J,WAAW,CAACx4J,MAAM,CAAC,UAAUnG,EAAE,EAAE;UAC/C,OAAOA,EAAE,CAACyc,SAAS,IAAI+uE,SAAS;QACpC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEL25E,IAAI,CAACr6I,UAAU,GAAG,YAAY;QAC9B1qB,MAAM,CAACglK,kBAAkB,GAAG;UACxB55E,SAAS,EAAEA,SAAS;UACpB91B,QAAQ,EAAE,IAAI;UACdsH,OAAO,EAAE,IAAI;UACbC,OAAO,EAAE,IAAI;UACbC,OAAO,EAAE,IAAI;UACbmoG,WAAW,EAAEF,IAAI,CAACz3E,WAAW;UAC7B43E,WAAW,EAAEH,IAAI,CAACv3E,WAAW;UAC7B23E,WAAW,EAAEJ,IAAI,CAACr3E,WAAW;UAC7B9jF,IAAI,EAAEm7J,IAAI,CAACriK,IAAI;UACf87F,GAAG,EAAEumE,IAAI,CAAC7lI,GAAG;UACbsmI,SAAS,EAAE,CAACT,IAAI;QACpB,CAAC;;QAED;QACA,IAAIU,IAAI,GAAG,CAAC,CAAC;QACb,IAAIC,YAAY,GAAG,EAAE;QAErBr8J,GAAG,CAACs3C,IAAI,CAACkkH,YAAY,CAAC;QAEtB,IAAIO,QAAQ,GAAG,CAAC;QAEhBthK,CAAC,CAACmC,IAAI,CAACoD,GAAG,EAAE,UAAUnD,GAAG,EAAEtG,EAAE,EAAE;UAC3B,IAAIsG,GAAG,IAAI,CAAC,EAAE;YACVw/J,YAAY,GAAG,EAAE;YAEjB,IAAI,CAAC,CAAC9lK,EAAE,CAAC0tF,WAAW,EAAEo4E,YAAY,CAACr/J,IAAI,CAACzG,EAAE,CAAC0tF,WAAW,CAAC;YACvD,IAAI,CAAC,CAAC1tF,EAAE,CAAC4tF,WAAW,EAAEk4E,YAAY,CAACr/J,IAAI,CAACzG,EAAE,CAAC4tF,WAAW,CAAC;YACvD,IAAI,CAAC,CAAC5tF,EAAE,CAAC8tF,WAAW,EAAEg4E,YAAY,CAACr/J,IAAI,CAACzG,EAAE,CAAC8tF,WAAW,CAAC;UAC3D;UAEA,IAAI,CAAC,CAAC9tF,EAAE,CAAC0/B,OAAO,EAAE;YACd,IAAI8lI,QAAQ,GAAG,CAAC,EACZA,QAAQ,GAAG,CAAC;YAEhB,IAAI,CAAC,CAACxlK,EAAE,CAAC2/B,OAAO,EAAE;cACd,IAAI6lI,QAAQ,GAAG,CAAC,EACZA,QAAQ,GAAG,CAAC;cAEhB,IAAI,CAACK,IAAI,CAAC7lK,EAAE,CAAC0/B,OAAO,CAAC,EAAEmmI,IAAI,CAAC7lK,EAAE,CAAC0/B,OAAO,CAAC,GAAG,CAAC,CAAC;cAC5C,IAAIqmI,EAAE,GAAGF,IAAI,CAAC7lK,EAAE,CAAC0/B,OAAO,CAAC;cAEzB,IAAI,CAAC,CAAC1/B,EAAE,CAAC4/B,OAAO,EAAE;gBACd,IAAI4lI,QAAQ,GAAG,CAAC,EACZA,QAAQ,GAAG,CAAC;gBAEhB,IAAI,CAACO,EAAE,CAAC/lK,EAAE,CAAC2/B,OAAO,CAAC,EAAEomI,EAAE,CAAC/lK,EAAE,CAAC2/B,OAAO,CAAC,GAAG,CAAC,CAAC;gBACxC,IAAIqmI,EAAE,GAAGD,EAAE,CAAC/lK,EAAE,CAAC2/B,OAAO,CAAC;gBAEvBqmI,EAAE,CAAChmK,EAAE,CAAC4/B,OAAO,CAAC,GAAG,IAAI9/B,6DAAe,CAACE,EAAE,CAAC;cAC5C,CAAC,MAAM;gBACH+lK,EAAE,CAAC/lK,EAAE,CAAC2/B,OAAO,CAAC,GAAG,IAAI7/B,6DAAe,CAACE,EAAE,CAAC;cAC5C;YACJ,CAAC,MAAM;cACH6lK,IAAI,CAAC7lK,EAAE,CAAC0/B,OAAO,CAAC,GAAG,IAAI5/B,6DAAe,CAACE,EAAE,CAAC;YAC9C;UACJ;QACJ,CAAC,CAAC;QAEFI,MAAM,CAACglK,kBAAkB,CAACI,QAAQ,GAAGA,QAAQ;QAE7CplK,MAAM,CAACm+J,oBAAoB,GAAG;UAC1BoH,SAAS,EAAEjpJ,IAAI;UACfpY,IAAI,EAAEuhK,IAAI;UACVI,MAAM,EAAEH;QACZ,CAAC;QAED5hK,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAAC8lK,qBAAqB,CAACxpJ,IAAI,CAAC;MACtC,CAAC,CAAC,WACM,CAAC,YAAY;QACjBxY,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,CAAC;MACN;IACJ,CAAC,MAAM;MACHpE,UAAU,CAAC+K,UAAU,CAAC,qBAAqB,CAAC;MAC5ChL,MAAM,CAACm+J,oBAAoB,GAAG,IAAI;;MAElC;MACAn+J,MAAM,CAAC2kK,cAAc,CAACv5E,SAAS,CAAC;MAChCprF,MAAM,CAACukK,wBAAwB,CAAC,CAAC;IACrC;IAEAv/J,OAAO,CAACC,GAAG,CAAC,+BAA+B,GAAGw2B,IAAI,CAAC4gD,GAAG,CAAC,CAAC,CAAC;EAE7D,CAAC;EAEDr8E,MAAM,CAAC+lK,SAAS,GAAG,UAAU7hK,IAAI,EAAE;IAC/B,IAAIkX,GAAG,GAAG,EAAE;IACZ,IAAI4qJ,IAAI,GAAG,EAAE;IACbliK,CAAC,CAACmC,IAAI,CAAC/B,IAAI,EAAE,UAAUgC,GAAG,EAAEtG,EAAE,EAAE;MAC5B,IAAIA,EAAE,CAAC01D,QAAQ,EAAE;QACb0wG,IAAI,CAAC3/J,IAAI,CAACzG,EAAE,CAACyc,SAAS,CAAC;MAC3B,CAAC,MAAM;QACHjB,GAAG,CAAC/U,IAAI,CAACzG,EAAE,CAACyc,SAAS,CAAC;MAC1B;IACJ,CAAC,CAAC;IAEF0W,eAAe,CAACw2F,gBAAgB,CAAC,IAAI,EAAEnuG,GAAG,EACtC,UAAUgwE,SAAS,EAAE66E,GAAG,EAAE;MACtBniK,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAACu+J,WAAW,EAAE,UAAUr4J,GAAG,EAAEtG,EAAE,EAAE;QAC1C,IAAIA,EAAE,CAACyc,SAAS,IAAI+uE,SAAS,EAAE;UAC3BtnF,CAAC,CAAC2L,MAAM,CAAC7P,EAAE,EAAE;YACTsmK,KAAK,EAAED;UACX,CAAC,CAAC;UACF,OAAO,KAAK;QAChB;MACJ,CAAC,CAAC;IACN,CAAC,CAAC;IAENlzI,eAAe,CAACw2F,gBAAgB,CAAC,KAAK,EAAEy8C,IAAI,EACxC,UAAU56E,SAAS,EAAE66E,GAAG,EAAE;MACtBniK,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAACu+J,WAAW,EAAE,UAAUr4J,GAAG,EAAEtG,EAAE,EAAE;QAC1C,IAAIA,EAAE,CAACyc,SAAS,IAAI+uE,SAAS,EAAE;UAC3BtnF,CAAC,CAAC2L,MAAM,CAAC7P,EAAE,EAAE;YACTsmK,KAAK,EAAED;UACX,CAAC,CAAC;UACF,OAAO,KAAK;QAChB;MACJ,CAAC,CAAC;IACN,CAAC,CAAC;EAEV,CAAC;EAEDjmK,MAAM,CAACmmK,aAAa,GAAG,UAAU/qJ,GAAG,EAAEgwE,SAAS,EAAE;IAC7C,IAAIthF,IAAI,GAAG,IAAI;IACfhG,CAAC,CAACmC,IAAI,CAACmV,GAAG,EAAE,UAAUlV,GAAG,EAAEtG,EAAE,EAAE;MAC3B,IAAIA,EAAE,CAACyc,SAAS,IAAI+uE,SAAS,EAAE;QAC3BthF,IAAI,GAAG,CAAC,CAAC;QACThK,OAAO,CAAC+F,IAAI,CAACjG,EAAE,EAAEkK,IAAI,CAAC;QACtBA,IAAI,CAACw2B,YAAY,GAAG1gC,EAAE,CAACm+B,KAAK;QAC5B,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;IAEF,OAAOj0B,IAAI;EACf,CAAC;EAED9J,MAAM,CAAComK,mBAAmB,GAAG,UAAUhrJ,GAAG,EAAEgwE,SAAS,EAAEy+B,YAAY,EAAEw8C,YAAY,EAAEC,QAAQ,EAAE;IACzF,IAAIx8J,IAAI,GAAG,IAAI;IACfhG,CAAC,CAACmC,IAAI,CAACmV,GAAG,EAAE,UAAUlV,GAAG,EAAEtG,EAAE,EAAE;MAC3B,IAAIA,EAAE,CAACyc,SAAS,IAAI+uE,SAAS,IAAIxrF,EAAE,CAACg/B,OAAO,KAAK,KAAK,KAChDh/B,EAAE,CAAC8/B,WAAW,KAAKA,mEAAW,CAAC6mI,QAAQ,IAAI3mK,EAAE,CAACk4H,YAAY,IAAIuuC,YAAY,CAAC,KAC3E,CAACx8C,YAAY,IAAI,CAACA,YAAY,CAACt0G,KAAK,IAAIs0G,YAAY,CAACt0G,KAAK,KAAK3V,EAAE,CAAC+/B,YAAY,CAAC,KAC/E2mI,QAAQ,KAAK31J,SAAS,IAAI21J,QAAQ,KAAK1mK,EAAE,CAAC4mK,MAAM,CAAC,EAChD;QACF18J,IAAI,GAAGlK,EAAE;QACT,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;IACF,OAAOkK,IAAI;EACf,CAAC;EAED9J,MAAM,CAACymK,UAAU,GAAG,UAAUrrI,IAAI,EAAE;IAChCt3B,CAAC,CAACC,OAAO,CAAC,CAAC;IAEX,IAAI,CAAC/D,MAAM,CAACygK,UAAU,EAAE;MACpB,IAAIiG,cAAc,GAAG1mK,MAAM,CAACud,UAAU,IAAI,gBAAgB,GAAG,IAAI,GAAG,KAAK;MACzEwV,eAAe,CAACq+D,aAAa,CAACh2D,IAAI,GAAG,CAAC,EAAEp7B,MAAM,CAAC4zC,QAAQ,EAAE8yH,cAAc,CAAC,CAAC1iK,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACrFrJ,MAAM,CAACu+J,WAAW,GAAGl1J,GAAG,CAACnF,IAAI;QAC7BlE,MAAM,CAACwgK,WAAW,GAAGn3J,GAAG,CAAC+xB,IAAI;QAC7B;QACA56B,QAAQ,CAAC,YAAY;UACjBkgJ,kBAAkB,CAACr0E,cAAc,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;QACjF,CAAC,EAAE,GAAG,CAAC;QACP7rE,QAAQ,CAAC,YAAY;UACjBP,UAAU,CAAC+K,UAAU,CAAC,kBAAkB,CAAC;QAC7C,CAAC,CAAC;MACN,CAAC,CAAC,WACM,CAAC,YAAY;QACjBhL,MAAM,CAAC2mK,iBAAiB,GAAG,KAAK;QAChC7iK,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,CAAC;IACV,CAAC,MAAM;MACH0uB,eAAe,CAAC++D,mBAAmB,CAAC12D,IAAI,GAAG,CAAC,EAAEp7B,MAAM,CAAC4zC,QAAQ,CAAC,CAAC5vC,IAAI,CAAC,UAAUqF,GAAG,EAAE;QAC3ErJ,MAAM,CAACu+J,WAAW,GAAGl1J,GAAG,CAACnF,IAAI;QAC7BlE,MAAM,CAACwgK,WAAW,GAAGn3J,GAAG,CAAC+xB,IAAI;QAC7B;QACA56B,QAAQ,CAAC,YAAY;UACjBkgJ,kBAAkB,CAACr0E,cAAc,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;QACjF,CAAC,EAAE,GAAG,CAAC;QACP7rE,QAAQ,CAAC,YAAY;UACjBP,UAAU,CAAC+K,UAAU,CAAC,kBAAkB,CAAC;QAC7C,CAAC,CAAC;MACN,CAAC,CAAC,WACM,CAAC,YAAY;QACjBhL,MAAM,CAAC2mK,iBAAiB,GAAG,KAAK;QAChC7iK,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,CAAC;IACV;EACJ,CAAC;;EAED;EACArE,MAAM,CAAC06J,SAAS,GAAG,UAAUkM,OAAO,EAAE;IAElC5mK,MAAM,CAAC63B,OAAO,GAAG,IAAI;IACrB73B,MAAM,CAACq6E,aAAa,GAAG,KAAK;IAC5Br6E,MAAM,CAACupJ,iBAAiB,GAAG,IAAI;IAC/BvpJ,MAAM,CAACghK,YAAY,GAAG,KAAK;IAC3BhhK,MAAM,CAACihK,4BAA4B,GAAG,IAAI;IAC1CjhK,MAAM,CAACkhK,WAAW,GAAG,IAAI;IACzBlhK,MAAM,CAACohK,cAAc,GAAGlhK,aAAa,CAACmhK,eAAe;IACrDrhK,MAAM,CAACkhH,cAAc,GAAGhhH,aAAa,CAACghH,cAAc;IACpDlhH,MAAM,CAACshK,sBAAsB,GAAG,IAAI;IACpCthK,MAAM,CAACo6E,QAAQ,GAAG,IAAI;IACtBp6E,MAAM,CAACspJ,kBAAkB,GAAG,KAAK;IACjCtpJ,MAAM,CAACmhK,cAAc,GAAG,IAAI;IAC5BnhK,MAAM,CAACysI,eAAe,GAAGvsI,aAAa,CAACwkC,YAAY,KAAK,MAAM;IAC9D1kC,MAAM,CAAC8gK,WAAW,GAAG5gK,aAAa,CAACkB,aAAa;IAChDpB,MAAM,CAACw7I,iBAAiB,GAAG;MACvByC,UAAU,EAAE,CAAC;MACb8P,gBAAgB,EAAE,CAAC;MACnBwT,cAAc,EAAE,CAAC;MACjBpjB,mBAAmB,EAAE,CAAC;MACtBD,iBAAiB,EAAE,CAAC;MACpB9B,mBAAmB,EAAE,CAAC;MACtBC,0BAA0B,EAAE;IAChC,CAAC;IACDr8I,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,GAAG,CAAC,CAAC;IAC1C78I,MAAM,CAACyhK,aAAa,GAAG,IAAI;IAC3B,IAAI3mI,4FAAuB,CAACgjD,iBAAiB,CAAC,IAAI,CAAC,EAAE;MACjD99E,MAAM,CAAC4P,WAAW,GAAGkrB,4FAAuB,CAAC+rI,aAAa,CAAC,CAAC;IAChE,CAAC,MAAM;MACH7mK,MAAM,CAAC4P,WAAW,GAAG;QACjBxM,EAAE,EAAEumB,KAAK,CAACuE,OAAO,CAAC,CAAC;QACnBuN,IAAI,EAAE,IAAIA,IAAI,CAAC,CAAC;QAChBC,QAAQ,EAAE,IAAI;QACdC,aAAa,EAAE,EAAE;QACjB7C,QAAQ,EAAE,EAAE;QAAE;QACd8C,iBAAiB,EAAE,KAAK;QACxBC,QAAQ,EAAE,CAAC;QACXC,WAAW,EAAE,CAAC;QACdC,OAAO,EAAE,EAAE;QACXE,UAAU,EAAE,CAAC;QACbC,aAAa,EAAE,CAAC;QAChBt7B,QAAQ,EAAE;UACNwC,EAAE,EAAE;QACR,CAAC;QACDm5B,iBAAiB,EAAE,CAAC;QACpBC,OAAO,EAAE,CAAC;QACV/4B,aAAa,EAAE,CAAC;QAChBg5B,kBAAkB,EAAE,CAAC;QACrBnE,WAAW,EAAE,QAAQ;QACrBoE,gBAAgB,EAAE,QAAQ;QAC1BC,SAAS,EAAE,EAAE;QACbC,gBAAgB,EAAE,CAAC;QACnBC,YAAY,EAAE,CAAC;QACfC,cAAc,EAAE,IAAI;QACpBC,uBAAuB,EAAE;MAC7B,CAAC;IACL;IAEA,IAAI6pI,OAAO,KAAK,IAAI,EAChBvmK,aAAa,CAAC65E,gBAAgB,CAAC,IAAI,CAAC;IAExC+kF,eAAe,CAAC,CAAC;;IAEjB;IACIh7E,qBAAqB,CAACpoB,MAAM,CAAC77D,MAAM,EAAE,MAAM,CAAC;IAChD;EACJ,CAAC;EAEDA,MAAM,CAAC8mK,WAAW,GAAG,YAAY;IAC7B9mK,MAAM,CAACu+J,WAAW,GAAG,IAAI;IACzBv+J,MAAM,CAACud,UAAU,GAAG,EAAE;EAC1B,CAAC;EAEDvd,MAAM,CAAC06J,SAAS,CAAC,IAAI,CAAC;EAEtB16J,MAAM,CAAC8sD,UAAU,GAAG,eAAe;EACnC9sD,MAAM,CAAC+mK,uBAAuB,GAAG,IAAI;EACrC/mK,MAAM,CAACgnK,mBAAmB,GAAG,YAAY;IACrChnK,MAAM,CAAC4kK,oBAAoB,GAAG,KAAK;IAEnC,IAAI5kK,MAAM,CAAC8sD,UAAU,IAAI,sBAAsB,EAAE;MAC7C,OAAO9sD,MAAM,CAAC6jK,eAAe;MAC7BxjK,aAAa,CAAC65E,gBAAgB,CAACl6E,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC;IAC9D;EACJ,CAAC;EAEDA,MAAM,CAAC26B,aAAa,GAAG,YAAY;IAE/B,IAAI36B,MAAM,CAAC8sD,UAAU,IAAI,eAAe,IAAI,CAAC,CAAC9sD,MAAM,CAAC+mK,uBAAuB,EAAE;MAC1E;MACA/mK,MAAM,CAAC2kK,cAAc,CAAC3kK,MAAM,CAAC+mK,uBAAuB,CAACplJ,GAAG,EACpD3hB,MAAM,CAAC+mK,uBAAuB,CAACE,SAAS,EACxCjnK,MAAM,CAAC+mK,uBAAuB,CAACG,YAAY,EAAE,IAAI,EAAElnK,MAAM,CAAC+mK,uBAAuB,CAACtiJ,MAAM,CAAC;IACjG,CAAC,MAAM,IAAIzkB,MAAM,CAAC8sD,UAAU,IAAI,gBAAgB,EAAE;MAC9C9sD,MAAM,CAACmnK,aAAa,CAAC,CAAC;IAC1B,CAAC,MAAM,IAAInnK,MAAM,CAAC8sD,UAAU,IAAI,sBAAsB,EAAE;MACpD;MACApjC,aAAa,CAACs4G,yBAAyB,CAAChiI,MAAM,EAAEA,MAAM,CAAConK,sBAAsB,EAAEpnK,MAAM,CAACkrB,eAAe,CAAC;IAC1G,CAAC,MAAM,IAAIlrB,MAAM,CAAC8sD,UAAU,IAAI,oBAAoB,EAAE;MAClD9sD,MAAM,CAACqnK,iBAAiB,CAACrnK,MAAM,CAAC0hK,YAAY,CAACt+J,EAAE,CAAC;MAChD8a,WAAW,CAACy1H,gBAAgB,CAAC3zI,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAACysI,eAAe,EAAEzsI,MAAM,CAAC;IACpF,CAAC,MAAM,IAAIA,MAAM,CAAC8sD,UAAU,IAAI,2BAA2B,EAAE;MACzD9sD,MAAM,CAACqnK,iBAAiB,CAACrnK,MAAM,CAAC0hK,YAAY,CAACt+J,EAAE,CAAC;MAChD8a,WAAW,CAACy1H,gBAAgB,CAAC3zI,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAACysI,eAAe,EAAEzsI,MAAM,CAAC;IACpF,CAAC,MAAM,IAAIA,MAAM,CAAC8sD,UAAU,IAAI,eAAe,EAAE;MAC7C9sD,MAAM,CAACqnK,iBAAiB,CAACrnK,MAAM,CAAC0hK,YAAY,CAACt+J,EAAE,CAAC;IACpD,CAAC,MAAM,IAAIpD,MAAM,CAAC8sD,UAAU,IAAI,iBAAiB,EAAE;MAC/C9sD,MAAM,CAACsnK,sBAAsB,CAAC,CAAC;IACnC,CAAC,MAAM,IAAItnK,MAAM,CAAC8sD,UAAU,IAAI,iBAAiB,EAAE;MAC/C9sD,MAAM,CAACunK,sBAAsB,CAAC,CAAC;IACnC,CAAC,MAAM,IAAIvnK,MAAM,CAAC8sD,UAAU,IAAI,uBAAuB,EAAE;MACrD9sD,MAAM,CAACwnK,UAAU,CAAC,IAAI,CAAC;IAC3B,CAAC,MAAM,IAAIxnK,MAAM,CAAC8sD,UAAU,IAAI,2BAA2B,EAAE;MACzD9sD,MAAM,CAAC4wJ,eAAe,CAAC,IAAI,CAAC;IAChC,CAAC,MAAM,IAAI5wJ,MAAM,CAAC8sD,UAAU,IAAI,4BAA4B,EAAE;MAC1D9sD,MAAM,CAACynK,0BAA0B,CAAC,CAAC;IACvC,CAAC,MAAM,IAAIznK,MAAM,CAAC8sD,UAAU,IAAI,cAAc,EAAE;MAC5C9sD,MAAM,CAAC06J,SAAS,CAAC,CAAC;IACtB,CAAC,MAAM,IAAI16J,MAAM,CAAC8sD,UAAU,IAAI,kBAAkB,EAAE;MAChD9sD,MAAM,CAACyyJ,IAAI,CAACC,oBAAoB,GAAG,IAAI;IAC3C,CAAC,MAAM,IAAI1yJ,MAAM,CAAC8sD,UAAU,IAAI,sBAAsB,EAAE;MACpD;MACA;MACA9sD,MAAM,CAACuwJ,aAAa,CAAC,CAAC;IAC1B;IAEAvwJ,MAAM,CAAC4kK,oBAAoB,GAAG,KAAK;EACvC,CAAC;EAED5kK,MAAM,CAACm7F,sBAAsB,GAAG,IAAI;EACpCn7F,MAAM,CAACo7F,mBAAmB,GAAG,IAAI;EACjCp7F,MAAM,CAACq7F,sBAAsB,GAAG,EAAE;EAElCr7F,MAAM,CAAC4kK,oBAAoB,GAAG,KAAK;;EAEnC;EACA5kK,MAAM,CAAC2kK,cAAc,GAAG,UAAUhjJ,GAAG,EAAEslJ,SAAS,EAAES,aAAa,EAAEC,eAAe,EAAEljJ,MAAM,EAAE;IAEtFzf,OAAO,CAACC,GAAG,CAAC,yBAAyB,CAAC;IAEtC,IAAIqhK,QAAQ,GAAItmK,MAAM,CAACo6E,QAAQ,KAAK,oBAAoB,IAAIp6E,MAAM,CAACq+J,qBAAqB,KAAK,QAAQ;IAErG,IAAI53B,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE,IAAI,CAAC5P,MAAM,CAACshK,sBAAsB,EAAE;MAChCnhK,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,0BAA0B,CAAC,CAAC;MAC5E;IACJ;IAEA,IAAIxB,MAAM,CAACo6E,QAAQ,KAAK,QAAQ,EAAE;MAC9Bp6E,MAAM,CAACq6E,aAAa,GAAG,UAAU;IACrC;IACAr6E,MAAM,CAAC+mK,uBAAuB,GAAG,IAAI;IAErC,IAAI37E,SAAS,GAAG,IAAI;IACpB,IAAIxrF,EAAE,GAAG,IAAI;IAEb,IAAI,CAAC,CAAC+hB,GAAG,IAAKA,GAAG,YAAYjiB,6DAAgB,EAAE;MAC3C0rF,SAAS,GAAGzpE,GAAG,CAAC/hB,EAAE,CAACyc,SAAS;MAC5B;MACAzc,EAAE,GAAGI,MAAM,CAACmmK,aAAa,CAAC,CAACxkJ,GAAG,CAAC/hB,EAAE,CAAC,EAAEwrF,SAAS,CAAC;IAClD,CAAC,MAAM,IAAI67E,SAAS,KAAK,IAAI,EAAE;MAC3B77E,SAAS,GAAGzpE,GAAG,CAACtF,SAAS;MACzBzc,EAAE,GAAG+hB,GAAG;IACZ,CAAC,MAAM;MACHypE,SAAS,GAAGzpE,GAAG;MACf/hB,EAAE,GAAGI,MAAM,CAACmmK,aAAa,CAACnmK,MAAM,CAACu+J,WAAW,EAAEnzE,SAAS,CAAC;IAC5D;;IAEA;IACA,IAAI,CAACprF,MAAM,CAAC4kK,oBAAoB,IAAI,CAAC,CAAChlK,EAAE,IAAI,CAAC,CAACA,EAAE,CAACwuF,eAAe,IAAIxuF,EAAE,CAACwuF,eAAe,CAACpmE,QAAQ,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC0/I,aAAa,EAAE;MAC3H;MACA,IAAIE,QAAQ,GAAG,IAAI;MAEnB,IAAI,CAAC,CAAC5nK,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE;QACpC,IAAI+uB,GAAG,GAAG1qD,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAAC51B,MAAM,CAAC,UAAUm9B,CAAC,EAAE;UAC3D,OAAOA,CAAC,CAAC7mB,SAAS,KAAKzc,EAAE,CAACyc,SAAS;QACvC,CAAC,CAAC;QAEFurJ,QAAQ,GAAGl9G,GAAG,CAACtkD,MAAM,IAAI,CAAC;MAC9B;MAEA,IAAIwhK,QAAQ,EAAE;QACV5nK,MAAM,CAAC+mK,uBAAuB,GAAG;UAC7BnnK,EAAE,EAAEA,EAAE;UACN+hB,GAAG,EAAEA,GAAG;UACRslJ,SAAS,EAAEA,SAAS;UACpBS,aAAa,EAAEA,aAAa;UAC5BjjJ,MAAM,EAAEA;QACZ,CAAC;QAEDzkB,MAAM,CAAC4kK,oBAAoB,GAAG,IAAI;QAClC5kK,MAAM,CAAC8sD,UAAU,GAAG,eAAe;QACnCzsD,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC9Df,cAAc,CAACe,SAAS,CAAC,wIAAwI,CAAC,EAClKf,cAAc,CAACe,SAAS,CAAC,UAAU,CAAC,EACpCf,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvC;MACJ;IACJ;IAEA,IAAI,CAAC,CAAC5B,EAAE,IAAIA,EAAE,CAAC8/B,WAAW,KAAK,UAAU,IAAIioI,eAAe,KAAK,IAAI,EAAE;MACnE;MACA3nK,MAAM,CAAC6nK,kBAAkB,CAAClmJ,GAAG,EAAEslJ,SAAS,EAAES,aAAa,EAAE9nK,EAAE,CAAC;MAC5D;IACJ;IAEA,IAAI,CAAC,CAACA,EAAE,EAAE;MAEN,IAAIA,EAAE,CAAC40B,aAAa,KAAK,MAAM,IAAI50B,EAAE,CAAC40B,aAAa,KAAK,IAAI,IAAI50B,EAAE,CAAC40B,aAAa,KAAK,MAAM,EAAE;QACzF,IAAI,CAACx0B,MAAM,CAAC8nK,4BAA4B,IAAI,CAAC9nK,MAAM,CAAC8nK,4BAA4B,CAACrzI,cAAc,EAAE;UAC7Fz0B,MAAM,CAAC+nK,0BAA0B,CAAC;YAC9Bv0C,MAAM,EAAE5zH,EAAE,CAACyc,SAAS;YACpBoY,cAAc,EAAE,IAAI;YACpB8mC,QAAQ,EAAE,SAAVA,QAAQA,CAAA,EAAc;cAClBv7D,MAAM,CAAC2kK,cAAc,CAAChjJ,GAAG,EAAEslJ,SAAS,EAAES,aAAa,EAAEC,eAAe,EAAEljJ,MAAM,CAAC;cAC7EzkB,MAAM,CAACukK,wBAAwB,CAAC,CAAC;YACrC;UACJ,CAAC,CAAC;UACF;QACJ;MACJ;MAGA,IAAI1/I,OAAO,GAAG7kB,MAAM,CAAComK,mBAAmB,CAACpmK,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAEyvD,SAAS,EAAEprF,MAAM,CAACwhK,kBAAkB,EAC3G,CAAC,CAAC5hK,EAAE,IAAIA,EAAE,CAAC8/B,WAAW,IAAIA,mEAAW,CAAC6mI,QAAQ,GAAGvmK,MAAM,CAACgoK,sBAAsB,CAAC3B,YAAY,GAAG,IAAI,EAAEC,QAAQ,CAAC;MAEjH,IAAI1mK,EAAE,CAAC8/B,WAAW,KAAK,UAAU,EAAE;QAC/B,IAAI,CAAC,CAAC7a,OAAO,IAAIA,OAAO,CAACizG,YAAY,KAAK93H,MAAM,CAACgoK,sBAAsB,CAAC3B,YAAY,EAAE;UAClFlmK,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,4DAA4D,CAAC,CAAC;UAC9G;QACJ,CAAC,MACGqjB,OAAO,GAAG,IAAI;MACtB;MAEA,IAAIA,OAAO,IAAIA,OAAO,CAAC8a,YAAY,IAAI3/B,MAAM,CAACwhK,kBAAkB,IAAI38I,OAAO,CAAC8a,YAAY,KAAK3/B,MAAM,CAACwhK,kBAAkB,CAACjsJ,KAAK,EAAE;QAC1HvV,MAAM,CAACioK,2BAA2B,CAAC,IAAI,CAAC;QACxC9nK,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,2EAA2E,CAAC,CAAC;QAC7H;MACJ,CAAC,MAAM,IAAIqjB,OAAO,IAAIA,OAAO,CAAC8a,YAAY,IAAI,CAAC+nI,aAAa,EAAE;QAC1D7iJ,OAAO,GAAG,IAAI;MAClB;MAEA,IAAIoZ,cAAc,GAAGtZ,UAAU,CAAC/kB,EAAE,CAACs+B,cAAc,CAAC;MAClD,IAAIV,SAAS,GAAGtf,WAAW,CAAC80H,YAAY,CAAChzI,MAAM,CAAC4P,WAAW,EAAEhQ,EAAE,CAAC;MAEhE,IAAIA,EAAE,CAACm+B,KAAK,GAAG,CAAC,EAAE;QACd59B,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,kEAAkE,CAAC,CAAC;QACpH;MACJ;MAEA,IAAIkZ,OAAO,GAAGqY,eAAe,CAAC+1F,kBAAkB;MAChD,IAAIrnH,GAAG,GAAGusE,cAAc,CAACxpD,eAAe,CAAC5kB,EAAE,EAAE6kB,MAAM,EAAE/J,OAAO,CAAC;MAC7D,IAAIwtJ,YAAY,GAAG,CAACzjJ,MAAM,GAAG,KAAK,GAC9BvkB,aAAa,CAACwjB,mBAAmB,KAAK,CAAC,GAAG,IAAI,GAC9C,KAAK;MAET,IAAIxjB,aAAa,CAACwjB,mBAAmB,KAAK,CAAC,IAAIhJ,OAAO,EAAE;QAAE;QACtD,IAAIA,OAAO,CAACoJ,KAAK,EAAE;UACfokJ,YAAY,GAAGxtJ,OAAO,CAACuJ,eAAe,KAAK,IAAI;QACnD;MACJ;MAEA,IAAIkkJ,WAAW,GAAGnoK,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,IACpDp6E,MAAM,CAACo6E,QAAQ,KAAK,oBAAoB,IAAIp6E,MAAM,CAACq+J,qBAAqB,KAAK,QAAQ;MAEzF,IAAI,CAAC,CAACx5I,OAAO,IACTA,OAAO,CAAC+Z,OAAO,KAAK,KAAK,IACzB8oI,aAAa,KAAK,IAAI,EAAE;QAGxB,IAAIQ,YAAY,EAAE;UACdl6F,cAAc,CAACppD,sBAAsB,CAACC,OAAO,EAAEJ,MAAM,CAAC;QAC1D,CAAC,MAAM;UACF;UACDI,OAAO,CAACC,eAAe,GAAG,IAAI;UAC9BD,OAAO,CAACG,KAAK,IAAIvjB,GAAG,IAAI0mK,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;UAC7CtjJ,OAAO,CAACG,KAAK,GAAG3kB,aAAa,CAAC6uB,SAAS,CAACrK,OAAO,CAACG,KAAK,EAAE,CAAC,CAAC;QAC7D;QAEA,IAAI,CAACyhH,SAAS,EAAE;UACZ,IAAIjmG,YAAY,GAAGxgC,MAAM,CAACysI,eAAe,GAAG7sI,EAAE,CAACm+B,KAAK,GAAGn+B,EAAE,CAACm+B,KAAK,GAAGxC,YAAY,CAACiC,SAAS,EAAE59B,EAAE,CAACm+B,KAAK,CAAC;UACnGlZ,OAAO,CAAC6Y,GAAG,GAAGnC,YAAY,CAACiC,SAAS,EAAE59B,EAAE,CAACm+B,KAAK,GAAGlZ,OAAO,CAACG,KAAK,CAAC;UAC/DH,OAAO,CAACE,MAAM,GAAGF,OAAO,CAACkZ,KAAK,GAAGlZ,OAAO,CAACG,KAAK;UAC9CH,OAAO,CAACphB,aAAa,GAAGw6B,cAAc,GAAGpZ,OAAO,CAAC8Z,YAAY,GAAG9Z,OAAO,CAACG,KAAK,GAAGiZ,cAAc,GAAG,CAAC;QACtG,CAAC,MACGnD,4FAAuB,CAACqG,iBAAiB,CAACnhC,MAAM,CAAC4P,WAAW,EAAEsO,WAAW,CAAC0/H,eAAe,CAAC,CAAC,EAAE59I,MAAM,CAAC;MAC5G,CAAC,MAAM;QACH,IAAIqxJ,EAAE,GAAGrxJ,MAAM,CAACooK,sBAAsB,CAACxoK,EAAE,CAAC;;QAE1C;;QAEA,IAAIk+B,KAAK,GAAGqqI,WAAW,GAAG,CAAC9W,EAAE,GAAGA,EAAE;QAClC,IAAI7wH,YAAY,GAAGxgC,MAAM,CAACysI,eAAe,GAAG4kB,EAAE,GAAGA,EAAE,GAAG91H,YAAY,CAACiC,SAAS,EAAE6zH,EAAE,CAAC;QACjF,IAAIlzH,UAAU,GAAGgqI,WAAW,GAAG,CAAC3nI,YAAY,GAAGA,YAAY;QAC3D,IAAIpC,EAAE,GAAG;UACLh7B,EAAE,EAAEumB,KAAK,CAACuE,OAAO,CAAC,CAAC;UACnB7R,SAAS,EAAEzc,EAAE,CAACyc,SAAS;UACvBgiB,IAAI,EAAEz+B,EAAE,CAACy+B,IAAI;UACbC,OAAO,EAAE1+B,EAAE,CAAC0+B,OAAO;UACnBC,UAAU,EAAE3+B,EAAE,CAAC2+B,UAAU;UACzBC,QAAQ,EAAE5+B,EAAE,CAAC4+B,QAAQ;UACrB97B,IAAI,EAAE9C,EAAE,CAAC8C,IAAI;UACbsiB,KAAK,EAAEvjB,GAAG;UACVs8B,KAAK,EAAED,KAAK;UAAE;UACd/Y,MAAM,EAAE+Y,KAAK,GAAGr8B,GAAG;UACnBo6B,QAAQ,EAAE,CAAC;UAAE;UACb4C,IAAI,EAAE,EAAE;UACRf,GAAG,EAAEnC,YAAY,CAACiC,SAAS,EAAEM,KAAK,GAAGr8B,GAAG,CAAC;UACzCuM,SAAS,EAAEwvB,SAAS,CAACI,MAAM;UAC3Bn6B,aAAa,EAAEw6B,cAAc,GAAIE,UAAU,GAAGF,cAAc,GAAGx8B,GAAG,GAAI,CAAC;UACvEi9B,oBAAoB,EAAET,cAAc,GAAGA,cAAc,GAAG,CAAC;UACzDU,YAAY,EAAER,UAAU;UACxBS,OAAO,EAAE,IAAI;UACbC,SAAS,EAAE,IAAI;UACfC,QAAQ,EAAE,MAAM;UAChBupI,gBAAgB,EAAGzoK,EAAE,CAACm/B,KAAK,KAAK,MAAM,IAAIn/B,EAAE,CAACm/B,KAAK,IAAI,OAAOn/B,EAAE,CAACm/B,KAAK,KAAK,QAAQ,GAAIn/B,EAAE,CAACm/B,KAAK,GAAG,IAAI;UACrGA,KAAK,EAAEvB,SAAS;UAChBU,cAAc,EAAEt+B,EAAE,CAACs+B,cAAc;UACjCc,SAAS,EAAElB,KAAK;UAChBmB,qBAAqB,EAAEnB,KAAK;UAC5BoB,GAAG,EAAEt/B,EAAE,CAACs/B,GAAG,GAAGt/B,EAAE,CAACs/B,GAAG,GAAGt/B,EAAE,CAAC6a,WAAW;UACrC0kB,OAAO,EAAEv/B,EAAE,CAACu/B,OAAO,GAAGv/B,EAAE,CAACu/B,OAAO,GAAGv/B,EAAE,CAAC4a,OAAO;UAC7C4kB,OAAO,EAAEx/B,EAAE,CAACw/B,OAAO;UACnBC,SAAS,EAAE,OAAOz/B,EAAE,CAACy/B,SAAS,KAAK,QAAQ,GAAG3H,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACy/B,SAAS,CAAC,GAAGz/B,EAAE,CAACy/B,SAAS;UACrFC,OAAO,EAAE1/B,EAAE,CAAC0/B,OAAO;UACnBC,OAAO,EAAE3/B,EAAE,CAAC2/B,OAAO;UACnBC,OAAO,EAAE5/B,EAAE,CAAC4/B,OAAO;UACnBC,uBAAuB,EAAE7/B,EAAE,CAAC6/B,uBAAuB;UACnDC,WAAW,EAAE9/B,EAAE,CAAC8/B,WAAW;UAC3BC,YAAY,EAAE3/B,MAAM,CAACwhK,kBAAkB,IAAIxhK,MAAM,CAACwhK,kBAAkB,CAACjsJ,KAAK,GAAGvV,MAAM,CAACwhK,kBAAkB,CAACjsJ,KAAK,GAAG,IAAI;UACnHqqB,GAAG,EAAEhgC,EAAE,CAACggC,GAAG;UACXC,GAAG,EAAEjgC,EAAE,CAACigC,GAAG;UACXC,GAAG,EAAElgC,EAAE,CAACkgC,GAAG;UACXC,GAAG,EAAEngC,EAAE,CAACmgC,GAAG;UACXC,GAAG,EAAEpgC,EAAE,CAACogC,GAAG;UACXC,GAAG,EAAErgC,EAAE,CAACqgC,GAAG;UACXC,GAAG,EAAEtgC,EAAE,CAACsgC,GAAG;UACXC,GAAG,EAAEvgC,EAAE,CAACugC,GAAG;UACXC,GAAG,EAAExgC,EAAE,CAACwgC,GAAG;UACXC,IAAI,EAAEzgC,EAAE,CAACygC,IAAI;UACbC,YAAY,EAAE1gC,EAAE,CAAC0gC;QACrB,CAAC;QAED,IAAI,CAAC,CAAC1gC,EAAE,CAACyrF,SAAS,EAAE;UAAE;UAClB,IAAIi9E,KAAK,GAAG5wI,IAAI,CAAC2T,KAAK,CAACzrC,EAAE,CAACyrF,SAAS,CAAC;UACpCvrF,OAAO,CAAC2P,MAAM,CAAC2uB,EAAE,EAAEkqI,KAAK,CAAC;QAC7B,CAAC,MAAM;UACHlqI,EAAE,CAACowD,MAAM,GAAG5uF,EAAE,CAAC4uF,MAAM;UACrBpwD,EAAE,CAACswD,MAAM,GAAG9uF,EAAE,CAAC8uF,MAAM;UACrBtwD,EAAE,CAACwwD,MAAM,GAAGhvF,EAAE,CAACgvF,MAAM;UACrBxwD,EAAE,CAAC0wD,MAAM,GAAGlvF,EAAE,CAACkvF,MAAM;UACrB1wD,EAAE,CAAC4wD,MAAM,GAAGpvF,EAAE,CAACovF,MAAM;UACrB5wD,EAAE,CAAC8wD,MAAM,GAAGtvF,EAAE,CAACsvF,MAAM;UACrB9wD,EAAE,CAACgxD,MAAM,GAAGxvF,EAAE,CAACwvF,MAAM;UACrBhxD,EAAE,CAACkxD,MAAM,GAAG1vF,EAAE,CAAC0vF,MAAM;UACrBlxD,EAAE,CAACoxD,MAAM,GAAG5vF,EAAE,CAAC4vF,MAAM;UACrBpxD,EAAE,CAACsxD,OAAO,GAAG9vF,EAAE,CAAC8vF,OAAO;QAC3B;QAEA,IAAIw4E,YAAY,EAAE;UACd9pI,EAAE,CAACrZ,MAAM,GAAG,CAAC;UACbipD,cAAc,CAACppD,sBAAsB,CAACwZ,EAAE,EAAE3Z,MAAM,CAAC;QACrD;QAEA,IAAI0jJ,WAAW,EAAE;UACb/pI,EAAE,CAACsE,iBAAiB,GAAG9iC,EAAE,CAACm+B,KAAK;UAE/B,IAAGuoI,QAAQ,EACX;YACIloI,EAAE,UAAO,GAAG,IAAI;UACpB;QACJ;QAEAp+B,MAAM,CAACwhK,kBAAkB,GAAG;UACxBjsJ,KAAK,EAAE;QACX,CAAC;QACDvV,MAAM,CAAC8nK,4BAA4B,GAAG,CAAC,CAAC;QAExC,IAAIloK,EAAE,CAAC8/B,WAAW,KAAK,UAAU,EAAE;UAC/BtB,EAAE,CAAC05F,YAAY,GAAG93H,MAAM,CAACgoK,sBAAsB,CAAC3B,YAAY;UAC5DjoI,EAAE,CAAC4sG,sBAAsB,GAAGhrI,MAAM,CAACgoK,sBAAsB,CAACO,cAAc;UACxEnqI,EAAE,CAACL,KAAK,GAAGtkB,MAAM,CAACzZ,MAAM,CAACgoK,sBAAsB,CAACvjJ,MAAM,CAAC;UACvD2Z,EAAE,CAACrZ,MAAM,GAAGqZ,EAAE,CAACL,KAAK;UACpBK,EAAE,CAACY,SAAS,GAAGZ,EAAE,CAACL,KAAK;UACvBK,EAAE,CAACa,qBAAqB,GAAGb,EAAE,CAACL,KAAK;UAEnCyC,YAAY,GAAGxgC,MAAM,CAACysI,eAAe,GAAGruG,EAAE,CAACL,KAAK,GAAGK,EAAE,CAACL,KAAK,GAAGxC,YAAY,CAACiC,SAAS,EAAEY,EAAE,CAACL,KAAK,CAAC;UAE/FK,EAAE,CAACO,YAAY,GAAGwpI,WAAW,GAAG,CAAC3nI,YAAY,GAAGA,YAAY;UAC5DpC,EAAE,CAAC36B,aAAa,GAAGw6B,cAAc,GAAIG,EAAE,CAACO,YAAY,GAAGV,cAAc,GAAI,CAAC;UAC1E,IAAIwoG,SAAS,EACTroG,EAAE,CAACM,oBAAoB,GAAG,CAACT,cAAc,GAAG,CAAC,GAAGA,cAAc;QACtE;QAEA,IAAIypI,aAAa,KAAK,IAAI,EAAE;UACxB,OAAO7iJ,OAAO;QAClB;QAEA,IAAIxkB,aAAa,CAAC6gC,iBAAiB,CAAC,CAAC,EAAE;UACnC,IAAIinI,WAAW,EACX/pI,EAAE,CAACpZ,KAAK,IAAI,CAAC,CAAC;UAClB8V,4FAAuB,CAAC0tI,sBAAsB,CAACxoK,MAAM,CAAC4P,WAAW,EAAEwuB,EAAE,EAAElgB,WAAW,CAAC0/H,eAAe,CAAC,CAAC,EAAE59I,MAAM,CAAC;QACjH,CAAC,MACGA,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAACt1B,IAAI,CAAC+3B,EAAE,CAAC;MACjD;MAEA59B,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAAC69J,gBAAgB,GAAG,KAAK;MACnC,CAAC,CAAC;IACN;IAEA,IAAI,CAACx9J,aAAa,CAAC6gC,iBAAiB,CAAC,CAAC,EAClChjB,WAAW,CAACy1H,gBAAgB,CAAC3zI,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAACysI,eAAe,EAAEzsI,MAAM,CAAC;IAEpF,IAAIA,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,IAAIp6E,MAAM,CAACo6E,QAAQ,KAAK,oBAAoB,EAAE;MACpFt2E,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;QACxD,IAAI,CAAC6mI,SAAS,EAAE;UACZ7mI,EAAE,CAACs+B,cAAc,GAAG,EAAE;UACtBt+B,EAAE,CAAC6D,aAAa,GAAG,CAAC;QACxB;QAEA7D,EAAE,CAAC8+B,oBAAoB,GAAG,CAAC;MAC/B,CAAC,CAAC;IACN;IAEA1+B,MAAM,CAAC8/J,qBAAqB,CAAC,CAAC;EAClC,CAAC;EAED9/J,MAAM,CAACyoK,eAAe,GAAG,UAAU3+J,IAAI,EAAEwpI,YAAY,EAAE;IACnDxpI,IAAI,CAACkb,KAAK,GAAG3kB,aAAa,CAAC6uB,SAAS,CAACplB,IAAI,CAACkb,KAAK,EAAE9kB,aAAa,CAACwnC,aAAa,CAAC;IAE7E,IAAI,CAACrnC,aAAa,CAAC6gC,iBAAiB,CAAC,CAAC,EAAE;MAEpC,IAAIjD,cAAc,GAAGtZ,UAAU,CAAC7a,IAAI,CAACo0B,cAAc,CAAC;MACpDp0B,IAAI,CAACrG,aAAa,GAAGw6B,cAAc,GAAGn0B,IAAI,CAAC60B,YAAY,GAAG70B,IAAI,CAACkb,KAAK,GAAGlb,IAAI,CAACo0B,cAAc,GAAG,CAAC;MAC9F,IAAIJ,KAAK,GAAGh0B,IAAI,CAACk1B,SAAS;MAE1B,IAAIl1B,IAAI,CAACg1B,QAAQ,KAAK,YAAY,EAAE;QAChC,IAAItB,SAAS,GAAG1zB,IAAI,CAACi1B,KAAK;QAE1Bj1B,IAAI,CAAC4zB,GAAG,GAAGnC,YAAY,CAACiC,SAAS,EAAE1zB,IAAI,CAACkb,KAAK,IAAI8Y,KAAK,GAAGh0B,IAAI,CAAC+yB,YAAY,CAAC,CAAC;MAChF;MAEA/yB,IAAI,CAACib,MAAM,GAAGjb,IAAI,CAACi0B,KAAK,GAAGj0B,IAAI,CAACkb,KAAK;MACrChlB,MAAM,CAAC4P,WAAW,CAAC2sB,iBAAiB,GAAGv8B,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAACv1B,MAAM;MAC9E8X,WAAW,CAACy1H,gBAAgB,CAAC3zI,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAACysI,eAAe,EAAEzsI,MAAM,EAAEszI,YAAY,CAAC;IAClG,CAAC,MAAM;MACHx4G,4FAAuB,CAACqG,iBAAiB,CAACnhC,MAAM,CAAC4P,WAAW,EAAEsO,WAAW,CAAC0/H,eAAe,CAAC,CAAC,EAAE59I,MAAM,CAAC;MAEpG,IAAIA,MAAM,CAAC4P,WAAW,CAACisB,QAAQ,EAAE;QAC7B77B,MAAM,CAAC4P,WAAW,CAACisB,QAAQ,GAAGx7B,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC4P,WAAW,CAACisB,QAAQ,EAAE,CAAC,CAAC;MACzF;IACJ;IACA77B,MAAM,CAACgL,UAAU,CAAC,aAAa,CAAC;IAChChL,MAAM,CAAC8/J,qBAAqB,CAAC,CAAC;EAClC,CAAC;EAGD,SAAS4I,0BAA0BA,CAACC,aAAa,EAAE37I,KAAK,EAAE8Q,KAAK,EAAE;IAC7D,IAAI2C,QAAQ,GAAGmoI,cAAc,CAACD,aAAa,EAAE37I,KAAK,CAAC;IACnD,IAAIyT,QAAQ,KAAK,IAAI,EAAE;MACnB,IAAIlrB,KAAK,GAAGkrB,QAAQ,CAAChc,MAAM;MAC3B,IAAIokJ,YAAY,GAAGpoI,QAAQ,CAACnyB,IAAI;MAChC,QAAQu6J,YAAY;QAChB,KAAK,iBAAiB;UAClB,OAAO/qI,KAAK,GAAGvoB,KAAK;QACxB,KAAK,YAAY;UACb,OAAOuoB,KAAK,IAAI,GAAG,GAAGvoB,KAAK,CAAC,GAAG,GAAG;QACtC,KAAK,eAAe;UAChB,OAAOuoB,KAAK,GAAGvoB,KAAK;QACxB,KAAK,UAAU;UACX,OAAOuoB,KAAK,GAAGA,KAAK,GAAGvoB,KAAK,GAAG,GAAG;QACtC,KAAK,gBAAgB;UACjB,OAAOA,KAAK;QAChB,KAAK,aAAa;UACd,IAAIyX,KAAK,KAAK,CAAC,EAAE;YACb,OAAOzX,KAAK;UAChB,CAAC,MAAM;YACH,OAAOA,KAAK,GAAGyX,KAAK;UACxB;UACA;AAAM;QACV;UACI,OAAO8Q,KAAK;MACpB;IACJ,CAAC,MAAM;MACH,OAAOA,KAAK;IAChB;EACJ;EAEA,SAAS8qI,cAAcA,CAACxtJ,GAAG,EAAE7F,KAAK,EAAE;IAChC,IAAIkrB,QAAQ,GAAG,IAAI;IACnB38B,CAAC,CAACmC,IAAI,CAACmV,GAAG,EAAE,UAAUlV,GAAG,EAAEtG,EAAE,EAAE;MAC3B,IAAKA,EAAE,CAACgnG,QAAQ,IAAIrxF,KAAK,IAAI3V,EAAE,CAACuvB,QAAQ,IAAI5Z,KAAK,IAAM3V,EAAE,CAACgnG,QAAQ,IAAIrxF,KAAK,IAAI3V,EAAE,CAACuvB,QAAQ,KAAK,CAAE,EAAE;QAC/FsR,QAAQ,GAAG7gC,EAAE;QACb,OAAO,KAAK;MAChB;IACJ,CAAC,CAAC;IACF,OAAO6gC,QAAQ;EACnB;EAGA,IAAIlF,YAAY,GAAGrd,WAAW,CAACqd,YAAY;EAE3Cv7B,MAAM,CAACqnK,iBAAiB,GAAG,UAAUjkK,EAAE,EAAE;IACrC,IAAI0lK,WAAW,GAAGzoK,aAAa,CAAC6gC,iBAAiB,CAAC,CAAC;IAEnDlhC,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,GAAG37B,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAAC51B,MAAM,CAAC,UAAUnG,EAAE,EAAE;MAAC,OAAOA,EAAE,CAACwD,EAAE,KAAKA,EAAE;IAAC,CAAC,CAAC;IAEhH,IAAI2lK,cAAc,GAAG,KAAK;IAC1B,IAAIC,WAAW,GAAG,KAAK;IACvBllK,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;MACxD,IAAI,CAACkpK,WAAW,EAAE;QACd,IAAIlpK,EAAE,CAACm+B,KAAK,GAAG,CAAC,EAAE;UACdirI,WAAW,GAAG,IAAI;QACtB,CAAC,MAAM,IAAIppK,EAAE,CAACm+B,KAAK,GAAG,CAAC,EAAE;UACrBgrI,cAAc,GAAG,IAAI;QACzB;MACJ,CAAC,MAAM;QACH,IAAInpK,EAAE,CAAC2jC,WAAW,GAAG,CAAC,EAAE;UACpBylI,WAAW,GAAG,IAAI;QACtB,CAAC,MAAM,IAAIppK,EAAE,CAAC2jC,WAAW,GAAG,CAAC,EAAE;UAC3BwlI,cAAc,GAAG,IAAI;QACzB;MACJ;IACJ,CAAC,CAAC;IAEF,IAAI/oK,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,EACtCp6E,MAAM,CAACq6E,aAAa,GAAG,QAAQ,CAAC,KAC/B,IAAIr6E,MAAM,CAACo6E,QAAQ,KAAK,oBAAoB,EAC7Cp6E,MAAM,CAACq6E,aAAa,GAAG,UAAU,CAAC,KACjC;MACD,IAAI2uF,WAAW,IAAID,cAAc,EAC7B/oK,MAAM,CAACq6E,aAAa,GAAG,UAAU;MACrC,IAAI,CAAC2uF,WAAW,IAAID,cAAc,EAC9B/oK,MAAM,CAACq6E,aAAa,GAAG,QAAQ;MACnC,IAAI,CAAC0uF,cAAc,EACf/oK,MAAM,CAACq6E,aAAa,GAAG,KAAK;IACpC;IAEA,IAAIyuF,WAAW,EACXhuI,4FAAuB,CAACqG,iBAAiB,CAACnhC,MAAM,CAAC4P,WAAW,EAAEsO,WAAW,CAAC0/H,eAAe,CAAC,CAAC,EAAE59I,MAAM,CAAC,CAAC,KAErGK,aAAa,CAAC65E,gBAAgB,CAACl6E,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC;EAClE,CAAC;EAEDA,MAAM,CAAC07C,YAAY,GAAG,UAAUp5C,KAAK,EAAEga,IAAI,EAAE;IACzC,IAAI1c,EAAE,GAAGkE,CAAC,CAACxB,KAAK,CAACm+D,aAAa,CAAC;IAC/B,IAAIwoG,KAAK,GAAGrpK,EAAE,CAACsE,IAAI,CAAC,QAAQ,CAAC;IAC7B,IAAIsnB,GAAG,GAAG1nB,CAAC,CAACmlK,KAAK,CAAC;IAElB,IAAIjsJ,GAAG,GAAGwO,GAAG,CAACna,IAAI,CAAC,wBAAwB,CAAC;IAC5C2L,GAAG,CAACyO,OAAO,CAAC,aAAa,CAAC,CAAC1jB,WAAW,CAAC,kBAAkB,CAAC;IAC1DiV,GAAG,CAAC2+B,QAAQ,CAAC,MAAM,CAAC;IAEpB73C,CAAC,CAACwY,IAAI,CAAC,CAACq/B,QAAQ,CAAC,QAAQ,CAAC;IAC1B,IAAImU,EAAE,GAAGhsD,CAAC,CAACwY,IAAI,CAAC,CAAC3U,IAAI,CAAC,eAAe,CAAC;IACtC6jB,GAAG,GAAG1nB,CAAC,CAACwY,IAAI,CAAC,CAACmP,OAAO,CAAC,aAAa,CAAC;IAEpC,IAAIqkC,EAAE,IAAI,MAAM,EACZtkC,GAAG,CAAC8+B,QAAQ,CAAC,kBAAkB,CAAC,CAAC,KAEjC9+B,GAAG,CAACzjB,WAAW,CAAC,kBAAkB,CAAC;IAEvC,OAAO,KAAK;EAChB,CAAC;EAED/H,MAAM,CAACosI,WAAW,GAAGluH,WAAW,CAACkuH,WAAW;EAG5C,IAAIE,iBAAiB,GAAGpuH,WAAW,CAACouH,iBAAiB;EAErDtsI,MAAM,CAACw0I,aAAa,GAAG,YAAY;IAC/B,IAAI/zG,QAAQ,GAAG,CAAC;IAChB38B,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;MACxD,IAAIA,EAAE,CAAColB,KAAK,GAAG,CAAC,EAAE;QACdyb,QAAQ,IAAI7gC,EAAE,CAACi8B,QAAQ,GAAGj8B,EAAE,CAAColB,KAAK;MACtC;IACJ,CAAC,CAAC;IAEF,OAAOyb,QAAQ;EACnB,CAAC;EAGDzgC,MAAM,CAAC4tI,kBAAkB,GAAG1vH,WAAW,CAAC0vH,kBAAkB;EAE1D,IAAIZ,eAAe,GAAG9uH,WAAW,CAAC8uH,eAAe;EAEjDhtI,MAAM,CAACohC,QAAQ,GAAG,UAAUt3B,IAAI,EAAE0iI,2BAA2B,EAAE;IAC3D,OAAOtuH,WAAW,CAACkjB,QAAQ,CAACt3B,IAAI,EAAE9J,MAAM,CAACysI,eAAe,EAAED,2BAA2B,CAAC;EAC1F,CAAC;EAEDxsI,MAAM,CAACkpK,WAAW,GAAG,YAAY;IAE7B,IAAI,CAAClpK,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,IAAI37B,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAACv1B,MAAM,IAAI,CAAC,IAAIpG,MAAM,CAACmhK,cAAc,KAAK,KAAK,EAAE;MACtH;IACJ;;IAGA;IACA,IAAItpF,OAAO,GAAGx3E,aAAa,CAACu3E,eAAe,CAAC,CAAC;IAC7C53E,MAAM,CAAC4P,WAAW,CAAC05H,QAAQ,GAAGzxD,OAAO,CAACyxD,QAAQ,IAAI,IAAI;IAEtD,IAAItpI,MAAM,CAAC4P,WAAW,CAAC05H,QAAQ,KAAK,IAAI,EAAE;MACtCtpI,MAAM,CAACmpK,iBAAiB,CAAC,CAAC;IAC9B,CAAC,MAAM;MACHnpK,MAAM,CAAC8sD,UAAU,GAAG,cAAc;MAClCzsD,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,EAAE,CAAC,EACvDf,cAAc,CAACe,SAAS,CAAC,2CAA2C,CAAC,EACrEf,cAAc,CAACe,SAAS,CAAC,YAAY,CAAC,CAAC;IAC/C;EACJ,CAAC;EAGDxB,MAAM,CAACopK,kBAAkB,GAAG,YAAY;IACpC,IAAIp8I,KAAK,GAAG,CAAC;IACblpB,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;MACxDsG,GAAG,GAAG,CAACtG,EAAE,CAAColB,KAAK,GAAG,EAAE,EAAE3V,OAAO,CAAC,GAAG,CAAC;MAClC2d,KAAK,IAAI9mB,GAAG,GAAG,CAAC,GAAG,CAACtG,EAAE,CAAColB,KAAK,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,OAAOgI,KAAK;EAChB,CAAC;EAEDhtB,MAAM,CAACiwC,oBAAoB,GAAG,EAAE;EAEhCjwC,MAAM,CAACqjJ,sBAAsB,GAAG,UAAU74I,EAAE,EAAE;IAC1C,IAAIwS,GAAG,GAAGhd,MAAM,CAACiwC,oBAAoB,CAAClqC,MAAM,CAAC,UAAUnG,EAAE,EAAE;MACvD,OAAOA,EAAE,CAAC2e,kBAAkB,IAAI/T,EAAE;IACtC,CAAC,CAAC;IAEF,OAAOwS,GAAG,CAAC5W,MAAM,GAAG,CAAC,GAAG4W,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;EACzC,CAAC;EAEDhd,MAAM,CAACqpK,iCAAiC,GAAG,UAAU/lB,SAAS,EAAE;IAC5D,IAAItmI,GAAG,GAAGhd,MAAM,CAACiwC,oBAAoB,CAAClqC,MAAM,CAAC,UAAUnG,EAAE,EAAE;MACvD,OAAOA,EAAE,CAACkwC,wBAAwB,IAAIwzG,SAAS;IACnD,CAAC,CAAC;IAEF,OAAOtmI,GAAG,CAAC5W,MAAM,GAAG,CAAC,GAAG4W,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;EACzC,CAAC;EAED,SAAS+yB,iBAAiBA,CAAA,EAAG;IACzB7vC,aAAa,CAAC6vC,iBAAiB,CAAC/vC,MAAM,CAAC;EAC3C;EAEAA,MAAM,CAACusI,iBAAiB,GAAG,YAAY;IACnC,OAAOruH,WAAW,CAACquH,iBAAiB,KAAK,IAAI;EACjD,CAAC;EAEDvsI,MAAM,CAAC2/J,iBAAiB,GAAG,YAAY;IACnC;IACA3/J,MAAM,CAAC4P,WAAW,CAAC05J,WAAW,GAAG,KAAK;IACtC,IAAI7iC,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE,IAAI5P,MAAM,CAACo6E,QAAQ,KAAK,oBAAoB,EAC5C;MACIp6E,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,GAC9B;QACIC,cAAc,EAAE,CAAC;QAAE;QACnBC,cAAc,EAAE,CAAC;QACjBC,SAAS,EAAE,CAAC;QAAE;QACdC,cAAc,EAAE,CAAC;QACjBC,WAAW,EAAE,CAAC,CAAC;QACfC,kBAAkB,EAAE,CAAC,CAAC;MAC1B,CAAC;IACL;IAEA,IAAI7hC,MAAM,CAACq6E,aAAa,KAAK,UAAU,EACnCn8D,WAAW,CAACy/H,8BAA8B,CAAC39I,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAACysI,eAAe,CAAC;IAE1F,IAAI,CAAChG,SAAS,EAAE;MACZzmI,MAAM,CAAC4/J,0BAA0B,CAAC5/J,MAAM,CAAC4P,WAAW,EAAE,IAAI,CAAC;MAC3D5P,MAAM,CAAC4P,WAAW,CAAC25J,gBAAgB,GAAGvpK,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,CAAC;MACzE5P,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,GAAG/4B,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,EAAE,IAAI,CAAC;MACpEsO,WAAW,CAAC6qH,2BAA2B,CAAC/oI,MAAM,CAAC4P,WAAW,CAAC;MAC3DsO,WAAW,CAACuqH,kBAAkB,CAACzoI,MAAM,CAAC4P,WAAW,CAAC;IACtD;IAEAmgC,iBAAiB,CAAC,CAAC;IAEnBvvC,QAAQ,CAAC,YAAY;MACjBkgJ,kBAAkB,CAACjpF,WAAW,CAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC;IAClE,CAAC,EAAE,GAAG,CAAC;IAEP,IAAI,CAACgvE,SAAS,EAAE;MACZzmI,MAAM,CAAC4P,WAAW,CAACkgI,QAAQ,GAAG9vI,MAAM,CAACosI,WAAW,CAACpsI,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE37B,MAAM,CAAC4P,WAAW,CAAC;MACtG5P,MAAM,CAAC4P,WAAW,CAAC4sB,OAAO,GAAGx8B,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,EAAE,IAAI,CAAC;MACtE5P,MAAM,CAAC4P,WAAW,CAACgiJ,eAAe,GAAG5kB,eAAe,CAAChtI,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAAC;IAC1F;;IAEA;IACA,IAAI,CAAC8qG,SAAS,EAAE;MACZ,IAAI,CAACzmI,MAAM,CAAC4P,WAAW,CAACnM,aAAa,IAAIzD,MAAM,CAACo6E,QAAQ,KAAK,QAAQ,EAAE;QACnEp6E,MAAM,CAAC4P,WAAW,CAAC6sB,kBAAkB,GAAGve,WAAW,CAAC4vH,kBAAkB,CAAC9tI,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,CAAC,CAAC,CAAC;QACtH/4B,MAAM,CAAC4P,WAAW,CAACnM,aAAa,GAAG,CAAC;QAEpCzD,MAAM,CAAC4P,WAAW,CAACwsB,qBAAqB,GAAGp8B,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC6C,aAAa,GAAGzD,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC6C,aAAa,GAAG,CAAC;QACpIzD,MAAM,CAAC4P,WAAW,CAACg/H,yBAAyB,GAAG,CAAC;MACpD;IACJ,CAAC,MAAM;MACH9zG,4FAAuB,CAAC0uI,iBAAiB,CAACxpK,MAAM,CAAC4P,WAAW,CAAC;IACjE;IAEA6yJ,aAAa,CAAC,CAAC;IAEfziK,MAAM,CAAC4P,WAAW,CAACyiJ,UAAU,GAAG,IAAI52H,IAAI,CAAC,CAAC;IAC1Cz7B,MAAM,CAAC4P,WAAW,CAAC6rB,IAAI,GAAGz7B,MAAM,CAAC4P,WAAW,CAACyiJ,UAAU,CAACznC,YAAY,CAAC,CAAC;IAEtE,IAAI6+C,iBAAiB,GAAGvpK,aAAa,CAAC8rB,cAAc,CAAC3Q,KAAK,CAAC,GAAG,CAAC;IAE/D,IAAI,CAACrb,MAAM,CAAC4P,WAAW,CAAC8sB,gBAAgB,IACpC1Y,QAAQ,CAAChkB,MAAM,CAAC4P,WAAW,CAAC8sB,gBAAgB,CAAC,GAAG,CAAC,IACjD18B,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,EAAE;MACxC,IAAIp6E,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,EAAE;QACxCl8D,WAAW,CAACikF,eAAe,CAACjiG,aAAa,CAACiN,YAAY,EAAEjN,aAAa,CAAC8rB,cAAc,CAAC,CAAChoB,IAAI,CAAC,UAAUE,IAAI,EAAE;UAEvGlE,MAAM,CAAC4P,WAAW,CAAC0oB,WAAW,GAAG,CAACp4B,aAAa,CAACymC,cAAc,GAAGzmC,aAAa,CAACymC,cAAc,GAAG,EAAE,IAC9FziC,IAAI,IAAIhE,aAAa,CAAC0mC,cAAc,GAAG1mC,aAAa,CAAC0mC,cAAc,GAAG,EAAE,CAAC;UAC7E5mC,MAAM,CAAC4P,WAAW,CAAC8sB,gBAAgB,GAAGx4B,IAAI;UAC1ClE,MAAM,CAAC4P,WAAW,CAAC4K,OAAO,GAAGivJ,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG5vI,IAAI,CAACo+B,KAAK,CAACx8B,IAAI,CAAC4gD,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAACr0D,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,GAAGhE,QAAQ,CAAC9f,IAAI,EAAE,EAAE,CAAC,CAAC8jB,QAAQ,CAAC,EAAE,CAAC;UAE5IumH,aAAa,CAAC,CAAC;QACnB,CAAC,CAAC;MACN,CAAC,MAAM;QAEHvuI,MAAM,CAAC4P,WAAW,CAAC4K,OAAO,GAAGivJ,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAAG,GACnD5vI,IAAI,CAACo+B,KAAK,CAACx8B,IAAI,CAAC4gD,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAACr0D,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,GAChDhoB,MAAM,CAAC4P,WAAW,CAAC0oB,WAAW,CAAC+/B,SAAS,CAACx+B,IAAI,CAACuwC,GAAG,CAAC,CAAC,EAAEpqE,MAAM,CAAC4P,WAAW,CAAC0oB,WAAW,CAAClyB,MAAM,GAAG,CAAC,CAAC,CAAC;QACpGmoI,aAAa,CAAC,CAAC;MACnB;IACJ,CAAC,MAAM;MACHvuI,MAAM,CAAC4P,WAAW,CAAC4K,OAAO,GAAGivJ,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG5vI,IAAI,CAACo+B,KAAK,CAACx8B,IAAI,CAAC4gD,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAACr0D,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,GAAGhE,QAAQ,CAAChkB,MAAM,CAAC4P,WAAW,CAAC8sB,gBAAgB,EAAE,EAAE,CAAC,CAAC1U,QAAQ,CAAC,EAAE,CAAC;MAC3KumH,aAAa,CAAC,CAAC;IACnB;IAEA,IAAIriH,KAAK,GAAG2N,IAAI,CAACD,GAAG,CAACv5B,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1E,IAAI/4B,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,GAAG,CAAC,EAAE;MAC9B,IAAI,CAAC0tG,SAAS,EAAE;QACZ,IAAI5sG,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAACyC,UAAU,CAAC,GAAG/xH,KAAK,EAAE;UACnElsB,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAACyC,UAAU,GAAG/xH,KAAK;QAC3D;QACA,IAAI2N,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAACuS,gBAAgB,CAAC,GAAG7hI,KAAK,EAAE;UACzElsB,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAACuS,gBAAgB,GAAG7hI,KAAK;QACjE;QACA,IAAI2N,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAAC0C,iBAAiB,CAAC,GAAGhyH,KAAK,EAAE;UAC1ElsB,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAAC0C,iBAAiB,GAAGhyH,KAAK;QAClE;QACA,IAAI2N,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAAC2C,mBAAmB,CAAC,GAAGjyH,KAAK,EAAE;UAC5ElsB,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAAC2C,mBAAmB,GAAGjyH,KAAK;QACpE;QAEAlsB,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,GAAGj+I,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAACyC,UAAU;QACrFj+I,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB,GAAGl+I,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAAC0C,iBAAiB;QACnGl+I,MAAM,CAACw7I,iBAAiB,CAACuS,gBAAgB,GAAG/tJ,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAACuS,gBAAgB;QACjG/tJ,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,GAAG78I,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAACqB,YAAY;QACzF78I,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,GAAG1xG,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAAC9pC,cAAc;QAC7F1xG,MAAM,CAACw7I,iBAAiB,CAAC2C,mBAAmB,GAAGn+I,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAAC2C,mBAAmB;QAEvGn+I,MAAM,CAACy0G,QAAQ,GAAG;UACdunC,IAAI,EAAE,CAAC;UACPqD,UAAU,EAAE,CAAC;UACbjC,WAAW,EAAE,CAAC;UACdC,aAAa,EAAE;QACnB,CAAC;MACL;MAEAr9I,MAAM,CAACw+I,oBAAoB,CAAC,CAAC;MAE7B,IAAI,CAAC/X,SAAS,EAAE;QACZvoH,WAAW,CAACq+H,sBAAsB,CAACv8I,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,EAAEvhC,MAAM,CAACw7I,iBAAiB,CAAC;QAC5Ft9H,WAAW,CAACo9H,sBAAsB,CAACt7I,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,EAAEvhC,MAAM,CAACw7I,iBAAiB,EAAEx7I,MAAM,CAACy0G,QAAQ,CAAC;MACjH,CAAC,MAAM;QACHz0G,MAAM,CAACw7I,iBAAiB,GAAG;UACvByC,UAAU,EAAE,CAAC;UACb8P,gBAAgB,EAAE,CAAC;UACnB7P,iBAAiB,EAAE,CAAC;UACpBC,mBAAmB,EAAE,CAAC;UACtB/B,mBAAmB,EAAE,CAAC;UACtBC,0BAA0B,EAAE;QAChC,CAAC;QAEDr8I,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,GAAGj+I,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAACyC,UAAU;QACrFj+I,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB,GAAGl+I,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAAC0C,iBAAiB;QACnGl+I,MAAM,CAACw7I,iBAAiB,CAACuS,gBAAgB,GAAGl0H,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,CAAC,CAAC;QACrFxuI,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,GAAG78I,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAACqB,YAAY;QACzF78I,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,GAAG1xG,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAAC9pC,cAAc;QAC7F1xG,MAAM,CAACw7I,iBAAiB,CAAC2C,mBAAmB,GAAGn+I,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAAC2C,mBAAmB;QAEvG,IAAG,CAACl0I,KAAK,CAAC0wC,OAAO,CAAC36C,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,CAAC,EAAE;UACxD1xG,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,GAAG,EAAE;QAChD;QAEA,IAAG,CAAC1xG,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,EAAE;UACvC78I,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,GAAG,CAAC,CAAC;QAC9C;;QAE5B;QACA;;QAE4B78I,MAAM,CAACy0G,QAAQ,GAAG;UACdunC,IAAI,EAAE,CAAC;UACPqD,UAAU,EAAE,CAAC;UACbjC,WAAW,EAAE,CAAC;UACdC,aAAa,EAAE,CAAC;UAChBnB,aAAa,EAAE,CAAC;UAChBC,oBAAoB,EAAE;QAC1B,CAAC;QACD,IAAIuC,YAAY,GAAG1+I,MAAM,CAAC4P,WAAW,CAACuiJ,YAAY;QAElDr3H,4FAAuB,CAACmkH,uBAAuB,CAACj/I,MAAM,CAAC4P,WAAW,EAAE;UAChE8uI,YAAY,EAAEA,YAAY;UAC1BlD,iBAAiB,EAAEx7I,MAAM,CAACw7I,iBAAiB;UAC3CmD,gBAAgB,EAAE3+I,MAAM,CAAC2+I,gBAAgB;UACzClqC,QAAQ,EAAEz0G,MAAM,CAACy0G;QACrB,CAAC,EAAEz5E,iEAAc,CAACg3H,YAAY,CAAC;MACnC;MAEA7C,wBAAwB,CAAC,CAAC;IAC9B,CAAC,MAAM;MACH,IAAI3rE,cAAc,CAAC6oB,cAAc,EAC7BrsG,MAAM,CAACupJ,iBAAiB,GAAG,KAAK,CAAC,CAAC;IAC1C;IAEA/oJ,QAAQ,CAAC,YAAY;MACjBkgJ,kBAAkB,CAACr0E,cAAc,CAAC,iBAAiB,EAAE,WAAW,EAAE,EAAE,CAAC;MACrE7rE,QAAQ,CAAC,YAAY;QACjBP,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;MACxC,CAAC,EAAE,GAAG,CAAC;IAEX,CAAC,EAAE,GAAG,CAAC;EACX,CAAC;EAEDhL,MAAM,CAAC8iK,SAAS,GAAG,UAAU4G,iBAAiB,EAAE;IAE5C,IAAI,CAAC,CAACxpK,aAAa,CAACypK,UAAU,EAAE;MAC5B,IAAIljC,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;MACnE,IAAIuF,mBAAmB,GAAGsxH,SAAS,GAAGzmI,MAAM,CAAC4P,WAAW,CAACohB,mBAAmB,GAAGhxB,MAAM,CAAC4P,WAAW,CAACuF,mBAAmB;MACrH,IAAIy0J,0BAA0B,GAAGz0J,mBAAmB,IAAIA,mBAAmB,CAAC/R,EAAE,GAAG,IAAI,GAAG,KAAK;MAE7F,IAAIpD,MAAM,CAAC4P,WAAW,IAAI,CAAC5P,MAAM,CAAC4P,WAAW,CAAC8rB,QAAQ,IAAI,CAACkuI,0BAA0B,EAAE;QACnFvpK,aAAa,CAACqlE,eAAe,CAAC;UAAEtxD,KAAK,EAAE3T,cAAc,CAACe,SAAS,CAAC,OAAO,CAAC;UAAEi1C,IAAI,EAAEh2C,cAAc,CAACe,SAAS,CAAC,+CAA+C;QAAE,CAAC,CAAC;QAC5J;MACJ;IACJ;IAEA,IAAG,CAACkoK,iBAAiB,EACjBA,iBAAiB,GAAG,KAAK;IAE7B,IAAIp+J,EAAE,GAAGjL,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;IAE3C,IAAIsrC,cAAc,CAAC6oB,cAAc,EAC7B/gG,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;MACrB,OAAOw/E,cAAc,CAACkmB,kBAAkB,CAAC1pG,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC,CAACoD,IAAI,CAAC,UAAS2R,CAAC,EAAE;QACnF,IAAI;UACA44H,aAAa,CAAC,CAAC;QACnB,CAAC,CAAC,OAAOhtH,CAAC,EAAE;UACRvc,OAAO,CAACC,GAAG,CAACsc,CAAC,CAAC;QAClB;QAEA,OAAO5L,CAAC;MACZ,CAAC,CAAC;IACN,CAAC,CAAC;IAEN,IAAI,CAACzV,aAAa,CAAC2pK,2BAA2B,EAC1CH,iBAAiB,GAAG,KAAK;IAE7B,IAAIA,iBAAiB,KAAK,IAAI,IAAI1pK,MAAM,CAACq6E,aAAa,KAAK,KAAK,IAAIn6E,aAAa,CAACmB,QAAQ,KAAK,IAAI,EAAE;MAEjGiK,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,YAAY;QACrBF,CAAC,CAACC,OAAO,CAAC,CAAC;QACX,OAAOgvB,eAAe,CAACi3F,iCAAiC,CAAChqH,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAEz7B,aAAa,CAACiN,YAAY,CAAC;MAC1H,CAAC,CAAC,CAACnJ,IAAI,CAAC,UAAUC,IAAI,EAAE;QACpBH,CAAC,CAACO,SAAS,CAAC,CAAC;QACb,IAAIJ,IAAI,CAACimH,YAAY,KAAK,IAAI,EAAE;UAE5BlqH,MAAM,CAACqqH,oBAAoB,GAAGpmH,IAAI,CAAComH,oBAAoB;UACvDrqH,MAAM,CAACsqH,wBAAwB,GAAGrmH,IAAI,CAACqmH,wBAAwB;UAE/DtqH,MAAM,CAAC8pK,kDAAkD,CAAC,CAAC;QAC/D,CAAC,MAAM;UACH9pK,MAAM,CAAC8iK,SAAS,CAAC,CAAC;QACtB;MACJ,CAAC,CAAC,SAAM,CAAC,UAAU3+J,GAAG,EAAE;QACpBL,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAAC8iK,SAAS,CAAC,CAAC;MACtB,CAAC,CAAC;IACN,CAAC,MAAM;MAEHx3J,EAAE,GAAGA,EAAE,CAACtH,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACxBrJ,MAAM,CAACogK,QAAQ,GAAG,KAAK;QACvBpgK,MAAM,CAACqgK,cAAc,GAAG,KAAK;QAC7BrgK,MAAM,CAACuiK,UAAU,CAACC,WAAW,GAAG,CAAC;QAEjCniK,aAAa,CAAC65E,gBAAgB,CAACl6E,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC;QAC1DX,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;QAEjD,IAAIz3B,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,EAAE;UAExC,IAAI,CAACp6E,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,IAAI,CAACZ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,EAAE;YACjEjD,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,wCAAwC,CAAC,CAAC;YAC1F;UACJ;QACJ;QAEA,IAAIxB,MAAM,CAACo6E,QAAQ,KAAK,oBAAoB,EAAE;UAE1C,IAAI,CAACp6E,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,IAAI,CAACZ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,EAAE;YACjEjD,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,0CAA0C,CAAC,CAAC;YAC5F;UACJ;QACJ;QAEAxB,MAAM,CAAC4P,WAAW,CAAC+mI,iBAAiB,GAAG,IAAI;QAC3C32I,MAAM,CAAC2/J,iBAAiB,CAAC,CAAC;QAC1B3/J,MAAM,CAAC4P,WAAW,CAAC+mI,iBAAiB,GAAG,KAAK;QAC5C32I,MAAM,CAACmB,IAAI,GAAG,SAAS;QACvBnB,MAAM,CAACkiK,kBAAkB,GAAG,CAAC;QAC7B,OAAO7hK,aAAa,CAAC63C,cAAc,CAAC,IAAI,CAAC;MAC7C,CAAC,CAAC;MAEF,OAAO5sC,EAAE;IACb;EACJ,CAAC;EAEDtL,MAAM,CAAC+pK,+BAA+B,GAAG,YAAU;IAC/C,OAAO/pK,MAAM,CAACo6E,QAAQ,KAAK,oBAAoB,IAAI,EAAEp6E,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAAC/oB,IAAI,CAAC,UAAA5M,CAAC;MAAA,OAAIA,CAAC,CAACwgK,MAAM;IAAA,EAAC,IAAIxmK,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAAC/oB,IAAI,CAAC,UAAA5M,CAAC;MAAA,OAAI,CAACA,CAAC,CAACwgK,MAAM;IAAA,EAAC,CAAC;EACvK,CAAC;EAEDxmK,MAAM,CAAC8pK,kDAAkD,GAAG,YAAY;IAEpE,IAAIj8I,cAAc,GAAG/pB,CAAC,CAAC,wDAAwD,CAAC;IAChFzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAED7tB,MAAM,CAACgqK,mDAAmD,GAAG,YAAY;IAErE,IAAIn8I,cAAc,GAAG/pB,CAAC,CAAC,wDAAwD,CAAC;IAChFzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAGD,SAASshI,wBAAwBA,CAAA,EAAG;IAChC,IAAIthI,cAAc,GAAG/pB,CAAC,CAAC,8BAA8B,CAAC;IACtDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;IAExC,IAAI7tB,MAAM,CAAC4P,WAAW,CAACyjJ,YAAY,EAAE;MACjC;MACA7yJ,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAACq1J,0BAA0B,CAAC,MAAM,EAAE,0BAA0B,EAAEr1J,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,EAAE,IAAI,CAAC;MACpH,CAAC,CAAC;IACN;EAEJ;EAEAj+I,MAAM,CAACqvJ,yBAAyB,GAAG,YAAY;IAC3C,IAAIxhI,cAAc,GAAG/pB,CAAC,CAAC,8BAA8B,CAAC;IACtDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAACiqK,gBAAgB,GAAG,YAAY;IAClC,IAAIhnI,GAAG,GAAG,CAAC;IACX,IAAIjjC,MAAM,CAACy0G,QAAQ,EAAE;MACjB,IAAIz0G,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,EACpB/4G,GAAG,IAAIjjC,MAAM,CAACy0G,QAAQ,CAACunC,IAAI;MAE/B/4G,GAAG,IAAIqgD,cAAc,CAACg8D,kBAAkB,CAACt/I,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,CAAC;MAE/E,IAAI78I,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW,EAC3Bn6G,GAAG,IAAIjjC,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW;MAEtC,IAAIp9I,MAAM,CAACy0G,QAAQ,CAAC4oC,aAAa,EAC7Bp6G,GAAG,IAAIjjC,MAAM,CAACy0G,QAAQ,CAAC4oC,aAAa;IAC5C;IAEA,IAAI,CAAC,CAACr9I,MAAM,CAACw7I,iBAAiB,IAAI,CAAC,CAACx7I,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,IACvE1xG,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,CAACtrG,MAAM,GAAG,CAAC,EAAE;MACpDtG,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,EAAE,UAAUxuE,CAAC,EAAE;QAClED,GAAG,IAAIC,CAAC,CAACze,MAAM;MACnB,CAAC,CAAC;IACN;IAEA,OAAOpkB,aAAa,CAAC6uB,SAAS,CAAC+T,GAAG,EAAE,CAAC,CAAC;EAC1C,CAAC;EAEDjjC,MAAM,CAACy+I,sBAAsB,GAAG,IAAI,CAAC,CAAC;;EAEtCz+I,MAAM,CAAC+9I,gBAAgB,GAAG;IACtBh5H,MAAM,EAAE,CAAC;IACT7hB,IAAI,EAAE,EAAE;IACRizE,SAAS,EAAE;EACf,CAAC;EAEDn2E,MAAM,CAACq1J,0BAA0B,GAAG,UAAUl7E,WAAW,EAAEhE,SAAS,EAAEm/E,QAAQ,EAAE/W,UAAU,EAAE;IACxFv+I,MAAM,CAAC+9I,gBAAgB,CAAC76I,IAAI,GAAGi3E,WAAW;IAC1Cn6E,MAAM,CAAC+9I,gBAAgB,CAAC5nE,SAAS,GAAGA,SAAS,CAACv1D,MAAM,CAAC,CAAC,CAAC;IACvD,IAAI6lH,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IACnE,IAAIkuI,OAAO,GAAG,CAAC;IAEf,IAAI,CAACrX,SAAS,EACVqX,OAAO,GAAI99I,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAI5P,MAAM,CAACiqK,gBAAgB,CAAC,CAAC,GAAGjqK,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB,CAAC,KAE/HkE,OAAO,GAAG99I,MAAM,CAAC4P,WAAW,CAAC2lJ,iBAAiB,GAAGv1J,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB;IAE1F,IAAI,CAAC,CAAC0b,QAAQ,EAAE;MACZ,IAAI77I,MAAM,CAAC67I,QAAQ,CAAC,GAAGxX,OAAO,EAC1BA,OAAO,GAAGwX,QAAQ;IAC1B;IAEAp3I,WAAW,CAAC2/H,gBAAgB,CAAC79I,MAAM,EAAEm6E,WAAW,EAAE2jE,OAAO,CAAC;IAE1D,IAAI,CAACS,UAAU,EAAE;MACb/9I,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAACy+I,sBAAsB,CAAC5oI,IAAI,CAACsgE,SAAS,CAAC;MACjD,CAAC,CAAC;IACN,CAAC,MAAM;MACHn2E,MAAM,CAACs+I,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC;IACtC;EAEJ,CAAC;EAEDt+I,MAAM,CAACw+I,oBAAoB,GAAG,YAAY;IACtCx+I,MAAM,CAAC0vJ,6BAA6B,GAAG,KAAK;IAC5C1vJ,MAAM,CAAC2vJ,kCAAkC,GAAG,KAAK;EACrD,CAAC;;EAED;EACA3vJ,MAAM,CAACs+I,eAAe,GAAG,UAAU9hI,GAAG,EAAE+hI,UAAU,EAAE;IAChDrgI,WAAW,CAACogI,eAAe,CAACt+I,MAAM,EAAEwc,GAAG,EAAExc,MAAM,CAACysI,eAAe,EAAE8R,UAAU,CAAC;EAChF,CAAC;EAGDv+I,MAAM,CAACyvJ,UAAU,GAAG,YAAY;IAC5B,IAAIxsH,GAAG,GAAG,CAAC;IACX,IAAIjjC,MAAM,CAACy0G,QAAQ,EAAE;MACjB,IAAIz0G,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,EACpB/4G,GAAG,IAAIjjC,MAAM,CAACy0G,QAAQ,CAACunC,IAAI;MAC/B,IAAIh8I,MAAM,CAACy0G,QAAQ,CAAC4qC,UAAU,EAC1Bp8G,GAAG,IAAIjjC,MAAM,CAACy0G,QAAQ,CAAC4qC,UAAU;MAErC,IAAIr/I,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW,EAC3Bn6G,GAAG,IAAIjjC,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW;MAEtC,IAAIp9I,MAAM,CAACy0G,QAAQ,CAAC4oC,aAAa,EAC7Bp6G,GAAG,IAAIjjC,MAAM,CAACy0G,QAAQ,CAAC4oC,aAAa;IAC5C;IAEA,IAAI,CAAC,CAACr9I,MAAM,CAACw7I,iBAAiB,IAAI,CAAC,CAACx7I,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,IACvE1xG,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,CAACtrG,MAAM,GAAG,CAAC,EAAE;MACpDtG,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,EAAE,UAAUxuE,CAAC,EAAE;QAClED,GAAG,IAAIC,CAAC,CAACze,MAAM;MACnB,CAAC,CAAC;IACN;IAEA,OAAOpkB,aAAa,CAAC6uB,SAAS,CAAC+T,GAAG,EAAE,CAAC,CAAC;EAC1C,CAAC;EAEDjjC,MAAM,CAACmxJ,0BAA0B,GAAG,YAAY;IAC5C,IAAI3hJ,CAAC,GAAG7O,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAClBgE,CAAC,CAAC/D,OAAO,CAAC,IAAI,CAAC;IACf,IAAIy3B,CAAC,GAAG1zB,CAAC,CAAC9D,OAAO;IAEjB,IAAI+6H,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE,IAAI,CAAC62H,SAAS,EAAE;MACZvoH,WAAW,CAACw/H,yBAAyB,CAAC19I,MAAM,CAAC4P,WAAW,CAAC;MACzD;MACA;IACJ;IAEA5P,MAAM,CAACoxJ,mBAAmB,GAAG,EAAE;IAC/BpxJ,MAAM,CAAC2vJ,kCAAkC,GAAG,KAAK;IACjD,IAAI3vJ,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAG,CAAC,IAAIh8I,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAGh8I,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,EAAE;MACxFj+I,MAAM,CAACoxJ,mBAAmB,CAAC/qJ,IAAI,CAAC5F,cAAc,CAACe,SAAS,CAAC,8CAA8C,CAAC,GAAGxB,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,CAAC;MAC/Ij+I,MAAM,CAAC2vJ,kCAAkC,GAAG,IAAI;IACpD;IAEA,IAAI,CAAC,CAAC3vJ,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,EAAE;MAC3C5xG,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,EAAE,UAAUxuE,CAAC,EAAE;QAClE,IAAIA,CAAC,CAACze,MAAM,GAAG,CAAC,IAAIye,CAAC,CAACze,MAAM,GAAGye,CAAC,CAACu5G,gBAAgB,EAAE;UAC/Cz8I,MAAM,CAACoxJ,mBAAmB,CAAC/qJ,IAAI,CAAC5F,cAAc,CAACe,SAAS,CAAC0hC,CAAC,CAACkrH,iBAAiB,GAAG,kCAAkC,CAAC,GAAGlrH,CAAC,CAACu5G,gBAAgB,CAAC;UACxIz8I,MAAM,CAAC2vJ,kCAAkC,GAAG,IAAI;QACpD;MACJ,CAAC,CAAC;IACN;IAEA,IAAI2B,SAAS,GAAGhuE,cAAc,CAACiuE,mBAAmB,CAACvxJ,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,EAAE78I,MAAM,CAACoxJ,mBAAmB,CAAC;IACrH,IAAIE,SAAS,EACTtxJ,MAAM,CAAC2vJ,kCAAkC,GAAG,IAAI,CAAC,KAChD,IAAI3vJ,MAAM,CAACy0G,QAAQ,CAAC4qC,UAAU,GAAG,CAAC,IAAIr/I,MAAM,CAACy0G,QAAQ,CAAC4qC,UAAU,GAAGr/I,MAAM,CAACw7I,iBAAiB,CAACuS,gBAAgB,EAAE;MAC/G/tJ,MAAM,CAACoxJ,mBAAmB,CAAC/qJ,IAAI,CAAC5F,cAAc,CAACe,SAAS,CAAC,qDAAqD,CAAC,GAAGxB,MAAM,CAACw7I,iBAAiB,CAACuS,gBAAgB,CAAC;MAC5J/tJ,MAAM,CAAC2vJ,kCAAkC,GAAG,IAAI;IACpD;IAEA,IAAI3vJ,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW,GAAG,CAAC,IAAIp9I,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW,GAAGp9I,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB,EAAE;MAC7Gl+I,MAAM,CAACoxJ,mBAAmB,CAAC/qJ,IAAI,CAAC5F,cAAc,CAACe,SAAS,CAAC,sDAAsD,CAAC,GAAGxB,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB,CAAC;MAC9Jl+I,MAAM,CAAC2vJ,kCAAkC,GAAG,IAAI;IACpD;IAEA,IAAI3vJ,MAAM,CAACy0G,QAAQ,CAAC4oC,aAAa,GAAG,CAAC,IAAIr9I,MAAM,CAACy0G,QAAQ,CAAC4oC,aAAa,GAAGr9I,MAAM,CAACw7I,iBAAiB,CAAC2C,mBAAmB,EAAE;MACnHn+I,MAAM,CAACoxJ,mBAAmB,CAAC/qJ,IAAI,CAAC5F,cAAc,CAACe,SAAS,CAAC,+CAA+C,CAAC,GAAGxB,MAAM,CAACw7I,iBAAiB,CAAC2C,mBAAmB,CAAC;MACzJn+I,MAAM,CAAC2vJ,kCAAkC,GAAG,IAAI;IACpD;IAEA,IAAI3vJ,MAAM,CAAC2vJ,kCAAkC,KAAK,KAAK,EAAE;MACrD,IAAI6B,iBAAiB,GAAGxxJ,MAAM,CAAC8+I,oBAAoB,CAAC,IAAI,CAAC;MACzD,IAAI2S,gBAAgB,GAAG,CAAC;MAExB,IAAI,CAAChrB,SAAS,EAAE;QACZgrB,gBAAgB,GAAGzxJ,MAAM,CAACyvJ,UAAU,CAAC,CAAC;MAC1C;MAEA,IAAIgC,gBAAgB,GAAGD,iBAAiB,EAAE;QACtCxxJ,MAAM,CAACoxJ,mBAAmB,CAAC/qJ,IAAI,CAAC5F,cAAc,CAACe,SAAS,CAAC,oCAAoC,CAAC,GAAGwoB,OAAO,CAAC,UAAU,CAAC,CAAC3pB,aAAa,CAAC6uB,SAAS,CAACsiI,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC;QACpKxxJ,MAAM,CAAC2vJ,kCAAkC,GAAG,IAAI;MACpD,CAAC,MAAM,IAAI6B,iBAAiB,IAAIC,gBAAgB,IAAIzxJ,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,EAAE;QACxFp6E,MAAM,CAACoxJ,mBAAmB,CAAC/qJ,IAAI,CAAC5F,cAAc,CAACe,SAAS,CAAC,0GAA0G,CAAC,CAAC;QACrKxB,MAAM,CAAC2vJ,kCAAkC,GAAG,IAAI;MACpD;IACJ;IAEA,IAAI3vJ,MAAM,CAAC2vJ,kCAAkC,KAAK,KAAK,EAAE;MACrD5/G,iBAAiB,CAAC,CAAC;MACnB,IAAI,CAAC02F,SAAS,EAAE;QAEZ,IAAIzmI,MAAM,CAAC2+I,gBAAgB,KAAK,UAAU,EAAE;UACxC3+I,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,GAAG/4B,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,EAAE,IAAI,CAAC;UACpE5P,MAAM,CAAC4P,WAAW,CAACgiJ,eAAe,GAAG5kB,eAAe,CAAChtI,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAAC;UACtF37B,MAAM,CAAC4P,WAAW,CAACnM,aAAa,GAAGya,WAAW,CAAC4vH,kBAAkB,CAAC9tI,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,CAAC;UAC/G/4B,MAAM,CAAC4P,WAAW,CAAC6sB,kBAAkB,GAAGve,WAAW,CAAC4vH,kBAAkB,CAAC9tI,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,CAAC;UACpH/4B,MAAM,CAAC4P,WAAW,CAACkgI,QAAQ,GAAG9vI,MAAM,CAACosI,WAAW,CAACpsI,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE37B,MAAM,CAAC4P,WAAW,CAAC;UAEtG5P,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,GAAG,EAAE;QAEpC;MACJ;MAEA94B,MAAM,CAACqvJ,yBAAyB,CAAC,CAAC;MAClCrvJ,MAAM,CAAC04B,YAAY,GAAG,IAAI;MAC1B50B,CAAC,CAACC,OAAO,CAAC,CAAC;;MAGX;MACA;MACA;;MAEA/D,MAAM,CAAC4P,WAAW,CAACw6H,aAAa,GAAG,CAAC;MAEpC,IAAIpqI,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAGh8I,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,EAAE;QACtDguB,aAAa,CAAClqK,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAGh8I,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,EAAE,KAAK,CAAC;MAC9E;MAEA,IAAI,CAACzV,SAAS,EAAE;QACZ,IAAIzmI,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,EAAE;UACxC,IAAIp6E,MAAM,CAAC4P,WAAW,CAACotB,YAAY,KAAK,CAAC,EAAE;YACvCh9B,MAAM,CAAC4P,WAAW,CAACotB,YAAY,GAAGh9B,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB;UAC3E;QACJ,CAAC,MAAM;UACH55I,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB,GAAG55I,MAAM,CAAC4P,WAAW,CAACotB,YAAY;QAC3E;MACJ,CAAC,MAAM;QACHh9B,MAAM,CAAC4P,WAAW,CAACgqI,kBAAkB,GAAG,CAAC;MAC7C;;MAEA;;MAEA;MACA,IAAI55I,MAAM,CAACy0G,QAAQ,CAAC4qC,UAAU,EAAE;QAC5Bv/I,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACw7I,iBAAiB,CAACqB,YAAY,EAAE,UAAU95G,GAAG,EAAE;UAClE,IAAIA,GAAG,CAACte,MAAM,IAAI,CAAC,EAAE;YAEjB,IAAI,CAAC,CAACse,GAAG,CAAC9B,SAAS,EAAE;cACjB8B,GAAG,CAACte,MAAM,IAAIse,GAAG,CAAC9B,SAAS,CAAC07G,cAAc;cAC1C55G,GAAG,CAAC9B,SAAS,CAACqvH,gBAAgB,GAAG,IAAI;YACzC;YAEAptH,CAAC,GAAGA,CAAC,CAACl/B,IAAI,CAAC,YAAY;cACnB,OAAOmmK,mBAAmB,CAACpnI,GAAG,CAAC;YACnC,CAAC,CAAC;UACN;QACJ,CAAC,CAAC;MACN;MAEAG,CAAC,GAAGA,CAAC,CAACl/B,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACtB,IAAIrJ,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,EAAE;UACzC5xG,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAACw7I,iBAAiB,CAAC9pC,cAAc,EAAE,UAAU3uE,GAAG,EAAE;YACpE,IAAIA,GAAG,CAACte,MAAM,IAAI,CAAC,EACfzkB,MAAM,CAACoqK,YAAY,CAACrnI,GAAG,CAAC;UAChC,CAAC,CAAC;QACN;QAEA,IAAI2uH,kBAAkB,GAAG,KAAK;QAE9B,IAAI1xJ,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAGh8I,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,EAAE;UACtDwV,kBAAkB,GAAG,IAAI;UACzBwY,aAAa,CAAClqK,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAGh8I,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,EAAE,IAAI,CAAC;UACzE,IAAIzV,SAAS,EAAE;YACX,IAAIzmI,MAAM,CAAC4P,WAAW,CAACotB,YAAY,EAC/Bh9B,MAAM,CAAC4P,WAAW,CAACotB,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC;UAC/C;UAEA,IAAIh9B,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,EAAE;YAC/Bh+H,WAAW,CAACo/H,4BAA4B,CAACt9I,MAAM,CAAC4P,WAAW,EAAE,MAAM,EAAE5P,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,EAC9Fl8I,MAAM,CAACy0G,QAAQ,CAACunC,IAAI,GAAGh8I,MAAM,CAACy0G,QAAQ,CAACynC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;UACrF;QACJ;QAEA,IAAIl8I,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW,GAAGp9I,MAAM,CAACy0G,QAAQ,CAAC0nC,oBAAoB,EAAE;UACpEkuB,qBAAqB,CAACrqK,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW,GAAGp9I,MAAM,CAACy0G,QAAQ,CAAC0nC,oBAAoB,CAAC;UAEzF,IAAIn8I,MAAM,CAACy0G,QAAQ,CAAC0nC,oBAAoB,EAAE;YACtCj+H,WAAW,CAACo/H,4BAA4B,CAACt9I,MAAM,CAAC4P,WAAW,EAAE,eAAe,EAAE5P,MAAM,CAACy0G,QAAQ,CAAC0nC,oBAAoB,EAC9Gn8I,MAAM,CAACy0G,QAAQ,CAAC2oC,WAAW,GAAGp9I,MAAM,CAACy0G,QAAQ,CAAC0nC,oBAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;UACnG;QACJ;QAEA,IAAIn8I,MAAM,CAACy0G,QAAQ,CAAC4oC,aAAa,EAAE;UAC/BitB,sBAAsB,CAACtqK,MAAM,CAACy0G,QAAQ,CAAC4oC,aAAa,CAAC;QACzD;QAEA9O,aAAa,CAAC,CAAC;QAEf,IAAImjB,kBAAkB,EAAE;UACpB,OAAO75I,YAAY,CAACsY,cAAc,CAAC,CAAC,SAAM,CAAC,UAAShsB,GAAG,EAAE;YACrDa,OAAO,CAACC,GAAG,CAACd,GAAG,CAAC;YAChB9D,aAAa,CAAC+D,SAAS,CAACD,GAAG,CAAC;UAChC,CAAC,CAAC,WAAQ,CAAC,YAAW;YAClB,OAAO4+J,YAAY,CAAC,CAAC;UACzB,CAAC,CAAC;QACN;QAEA,OAAOA,YAAY,CAAC,CAAC;MACzB,CAAC,CAAC;IACN;IAEA7/H,CAAC,GAAGA,CAAC,SAAM,CAAC,UAAU/+B,GAAG,EAAE;MACvBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAI,OAAQF,GAAG,CAAC0W,OAAQ,IAAI,QAAQ,EAChC1a,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,CAAC,CAAC,KAEpC1a,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,CAAC;IAC7D,CAAC,CAAC,WAAQ,CAAC,YAAY;MACnBhgC,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,OAAO6+B,CAAC;EACZ,CAAC;EAED,SAASgnI,aAAaA,CAACra,aAAa,EAAEC,UAAU,EAAE;IAC9C,IAAIrrI,MAAM,GAAGpkB,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAACkrI,aAAa,CAAC,EAAE,CAAC,CAAC;IAElE,IAAIE,aAAa,GAAG1vJ,aAAa,CAACy1E,SAAS,CAACrxD,MAAM,CAAC;IAEnD,IAAIurI,YAAY,GAAG3vJ,aAAa,CAAC6uB,SAAS,CAAC6gI,aAAa,GAAGtrI,MAAM,EAAE,CAAC,CAAC;IACrEzkB,MAAM,CAAC4P,WAAW,CAACotB,YAAY,GAAGgzH,YAAY;IAE9C,IAAIF,UAAU,IAAI,IAAI,EAAE;MACpBG,kBAAkB,CAACjwJ,MAAM,CAACwsC,8BAA8B,EAAEujH,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC;IAClG;EACJ;EAEA,SAASoa,mBAAmBA,CAAC/nI,MAAM,EAAE;IACjC;IACA,IAAIh7B,KAAK,GAAGpH,MAAM;IAClB,IAAIw0G,OAAO,GAAG,CAAC,CAAC;IAChBA,OAAO,CAACpyE,MAAM,CAAC53B,EAAE,CAAC,GAAG43B,MAAM;IAE3B,OAAOkhD,cAAc,CAAClhD,MAAM,CAACpiC,MAAM,CAAC4P,WAAW,EAAE4kG,OAAO,EAAEx0G,MAAM,EAAE;MAC1Ds4B,WAAW,EAAEt4B,MAAM,CAAC4P,WAAW,CAAC8sB,gBAAgB;MAChD8zH,eAAe,EAAE,SAAjBA,eAAeA,CAAYj1D,IAAI,EAAErzF,IAAI,EAAEg7B,CAAC,EAAE;QACtC,OAAOrrB,YAAY,CAACimG,uBAAuB,CAAC12G,KAAK,EAAEm0F,IAAI,EAAErzF,IAAI,EAAEg7B,CAAC,CAAC;MACrE,CAAC;MACD5/B,QAAQ,EAAEpD,aAAa,CAACqD;IAC5B,CAAC,CAAC,CACDS,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAIzJ,EAAE,GAAGyJ,GAAG,CAAC,CAAC,CAAC;MAEf,IAAIzJ,EAAE,CAAC6nB,MAAM,EAAE;QAEX,IAAI,CAAC,CAAC7nB,EAAE,CAACqhC,SAAS,EAAE;UAChBovH,oBAAoB,CAACzwJ,EAAE,CAACqhC,SAAS,EAAErhC,EAAE,CAAC6kB,MAAM,EAAE7kB,EAAE,CAACmkC,mBAAmB,EAAEnkC,EAAE,CAAC2rI,mBAAmB,EAAE3rI,EAAE,CAACisI,uBAAuB,CAAC;QAC7H;QAEAokB,kBAAkB,CAACjwJ,MAAM,CAACmwC,4BAA4B,EAAEvwC,EAAE,CAAC6kB,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EACjG7kB,EAAE,CAACmkC,mBAAmB,EAAEnkC,EAAE,CAAC2rI,mBAAmB,EAAE3rI,EAAE,CAACisI,uBAAuB,EAAEjsI,EAAE,CAACs9F,mBAAmB,EAAEt9F,EAAE,CAACqhC,SAAS,CAAC;QACrH,OAAO8hI,YAAY,CAAC,IAAI,CAAC;MAC7B,CAAC,MAAM;QACH,IAAI/kJ,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC5L,EAAE,CAACib,OAAO,EACXjb,EAAE,CAACib,OAAO,GAAGpa,cAAc,CAACe,SAAS,CAAC,6BAA6B,CAAC,GAAG5B,EAAE,CAAC8wJ,QAAQ,GAAG,GAAG,GAAG9wJ,EAAE,CAAC+wJ,OAAO;QACzG3wJ,MAAM,CAAC04B,YAAY,IAAI,OAAO,GAAG94B,EAAE,CAACib,OAAO;QAE3CmD,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;QACvB,OAAOuS,SAAS,CAACtS,OAAO;MAC5B;IACJ,CAAC,CAAC;;IAEN;IACA;IACA;IACA;IACA;EACJ;EAEA,SAAS2+J,qBAAqBA,CAAC5lJ,MAAM,EAAE;IACnCwrI,kBAAkB,CAACjwJ,MAAM,CAACkwC,8BAA8B,EAAEzrB,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,CAAC;EAE9G;EAEA,SAAS6lJ,sBAAsBA,CAAC7lJ,MAAM,EAAE;IACpCwrI,kBAAkB,CAACjwJ,MAAM,CAACswC,yBAAyB,EAAE7rB,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,CAAC;EACnG;EAEA,SAASwrI,kBAAkBA,CAACtvH,kBAAkB,EAAE5b,MAAM,EAAE+b,eAAe,EAAEgzH,WAAW,EAAEpuB,gBAAgB,EAAEquB,mBAAmB,EACvHC,mBAAmB,EAAEC,uBAAuB,EAAEz3D,eAAe,EAAEp+E,SAAS,EAAE;IAC1E2G,MAAM,GAAG1kB,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAACI,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAE5D/kB,MAAM,CAAC4P,WAAW,CAAC4sB,OAAO,GAAG,CAAC;IAE9B,IAAI03H,OAAO,GAAG,CAAC;IACf,IAAIna,eAAe,GAAG,CAAC;IACvB,IAAIC,kBAAkB,GAAG,CAAC;IAC1B,IAAI57H,SAAS,IAAIA,SAAS,CAACkyI,gBAAgB,IAAI,IAAI,EAAE;MACjDvW,eAAe,GAAG37H,SAAS,CAAC8sH,eAAe;MAC3C8O,kBAAkB,GAAGh6I,MAAM,CAACysI,eAAe,GAAG,CAAC,GAAGruH,SAAS,CAACsf,GAAG;IACnE;;IAEA;IACA,IAAIgD,OAAO,GAAG;MACVt9B,EAAE,EAAEumB,KAAK,CAACuE,OAAO,CAAC,CAAC;MACnByS,kBAAkB,EAAEA,kBAAkB;MACtC5b,MAAM,EAAEA,MAAM,GAAGg1H,eAAe,GAAGC,kBAAkB;MACrDv+G,IAAI,EAAE3K,MAAM,CAACC,GAAG,CAAC,CAAC;MAClB8P,SAAS,EAAE6kG,gBAAgB;MAC3B5kG,eAAe,EAAEA,eAAe;MAChCC,OAAO,EAAEmzH,OAAO;MAChBnwH,mBAAmB,EAAEgwH,mBAAmB;MACxCxoB,mBAAmB,EAAEyoB,mBAAmB;MACxCnoB,uBAAuB,EAAEooB,uBAAuB;MAChDhzH,SAAS,EAAE7iB;IACf,CAAC;IAED,IAAI,CAAC,CAACo+E,eAAe,EAAE;MACnB97D,OAAO,CAACw8D,mBAAmB,GAAGV,eAAe;IACjD;IAEA,IAAI97D,OAAO,CAACO,SAAS,EACjBP,OAAO,CAACO,SAAS,CAACmqG,SAAS,GAAG1qG,OAAO,CAACt9B,EAAE;IAE5CpD,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAACzyB,IAAI,CAACq6B,OAAO,CAAC;IACzC1gC,MAAM,CAACuqK,aAAa,GAAG7pI,OAAO,CAACt9B,EAAE,CAAC,CAAC;;IAEnC,IAAIpD,MAAM,CAAC4P,WAAW,CAAC8+H,mBAAmB,EAAE;MACxC,IAAIjhI,CAAC,GAAG,CAAC;MACT,IAAIzN,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,EAC9B9zB,CAAC,GAAGzN,MAAM,CAAC4P,WAAW,CAAC2xB,WAAW,CAACM,kBAAkB;MAEzDqyH,OAAO,GAAGh2I,WAAW,CAAC4vH,kBAAkB,CAAC9tI,MAAM,CAAC4P,WAAW,EAAEmV,MAAM,GAAGtX,CAAC,CAAC;IAC5E;IAEAizB,OAAO,CAACK,OAAO,GAAGmzH,OAAO;IACzBl0J,MAAM,CAAC4P,WAAW,CAACw6H,aAAa,IAAI8pB,OAAO;IAE3C,IAAIxuB,gBAAgB,KAAK,SAAS,EAAE;MAChC;MACA1lI,MAAM,CAAC4P,WAAW,CAACg/H,yBAAyB,GAAG7pH,MAAM;IACzD;IAEA,OAAO2b,OAAO;EAClB;EAEA,SAAS2vH,oBAAoBA,CAACjyI,SAAS,EAAEo/H,aAAa,EAAEuW,mBAAmB,EAAEC,mBAAmB,EAAEC,uBAAuB,EAAEE,kBAAkB,EAAE;IAE3I/1I,SAAS,CAAC8sH,eAAe,GAAG,CAAC,CAAC,GAAG7qI,aAAa,CAAC6uB,SAAS,CAAC9Q,SAAS,CAACu+H,cAAc,IAAI38I,MAAM,CAACysI,eAAe,GAAG,CAAC,GAAGruH,SAAS,CAACw+H,WAAW,CAAC,EAAE,CAAC,CAAC;IAC5Ix+H,SAAS,CAACsf,GAAG,GAAG,CAAC,CAAC,GAAGtf,SAAS,CAACw+H,WAAW;IAC1Cx+H,SAAS,CAACQ,iBAAiB,GAAG4+H,aAAa;IAC3Cp/H,SAAS,CAAC2tH,sBAAsB,GAAG/rI,MAAM,CAACysI,eAAe,GAAGruH,SAAS,CAAC8sH,eAAe,GAAI9sH,SAAS,CAAC8sH,eAAe,GAAG9sH,SAAS,CAACsf,GAAI;IACnI,IAAIy2H,kBAAkB,KAAK,IAAI,EAAE;MAC7B/1I,SAAS,CAAC2lB,mBAAmB,GAAGgwH,mBAAmB;MACnD31I,SAAS,CAACmtH,mBAAmB,GAAGyoB,mBAAmB;MACnD51I,SAAS,CAACytH,uBAAuB,GAAGooB,uBAAuB;IAC/D;IAEA,OAAO71I,SAAS,CAACu+H,cAAc;IAC/B,OAAOv+H,SAAS,CAACw+H,WAAW;IAE5B58I,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,CAACl0E,IAAI,CAAC+X,SAAS,CAAC;IAE7Cpe,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,GAAG/4B,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,EAAE,IAAI,CAAC;IACpE5P,MAAM,CAAC4P,WAAW,CAACgiJ,eAAe,GAAG5kB,eAAe,CAAChtI,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAAC;EAC1F;EAEA,SAAS8mI,aAAaA,CAAA,EAAG;IACrB,IAAIh8B,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE,IAAI,CAAC62H,SAAS,EACVzmI,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,GAAGnuI,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAAC3kB,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAEnH5P,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,GAAGxuI,MAAM,CAAC4P,WAAW,CAACmpB,KAAK;IAE7D/4B,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,GAAGnuI,aAAa,CAAC6uB,SAAS,CAAChR,WAAW,CAACuvH,gBAAgB,CAACztI,MAAM,CAAC4P,WAAW,CAAC,EAAE,CAAC,CAAC;IAC7G,IAAI5P,MAAM,CAACo6E,QAAQ,KAAK,QAAQ,IAAIp6E,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,EAAE;MACxE;MACA;MACA,IAAIp6E,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,GAAG,CAAC,EAClCxuI,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,GAAG,CAAC;IAC1C;IAEAxuI,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,GAAGxe,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,CAAC15D,OAAO,CAAC,CAAC,CAAC;IAErE,IAAIrwD,MAAM,GAAGoV,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,CAAC;IAErDxuI,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,GAAG59I,aAAa,CAACy1E,SAAS,CAACrxD,MAAM,CAAC;IACrEzkB,MAAM,CAACw7I,iBAAiB,CAACuS,gBAAgB,GAAGtpI,MAAM;IAClDzkB,MAAM,CAACw7I,iBAAiB,CAAC+lB,cAAc,GAAG98I,MAAM;IAChDzkB,MAAM,CAACw7I,iBAAiB,CAAC2C,mBAAmB,GAAG15H,MAAM;IACrDzkB,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB,GAAGz5H,MAAM;IACnDzkB,MAAM,CAACw7I,iBAAiB,CAACgvB,eAAe,GAAG/lJ,MAAM;IAEjD,IAAIzkB,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,IAAIp6E,MAAM,CAACo6E,QAAQ,KAAK,oBAAoB,EAAE;MAEpF,IAAIqwF,aAAa,GAAGzqK,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,GAAG,mBAAmB,GAAG,qBAAqB;MAExGp6E,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,GAAG;QACnCyC,UAAU,EAAEj+I,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU;QAC/C8P,gBAAgB,EAAE/tJ,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU;QACrDsjB,cAAc,EAAE,CAAC;QACjBpjB,mBAAmB,EAAE,CAAC;QACtBD,iBAAiB,EAAEz5H,MAAM;QACzBo4H,YAAY,EAAE,CAAC,CAAC;QAChBnrC,cAAc,EAAE,CAAC;MACrB,CAAC;MAED,IAAI,CAAC1xG,MAAM,CAAC4P,WAAW,CAACqyB,cAAc,EAClCjiC,MAAM,CAAC4P,WAAW,CAACqyB,cAAc,GAAG,EAAE;MAE1C,IAAIyoI,YAAY,GAAG1qK,MAAM,CAAC4P,WAAW,CAACqyB,cAAc,CAACl8B,MAAM,CAAC,UAAU4kK,EAAE,EAAE;QACtE,OAAOA,EAAE,CAAC9pI,SAAS,KAAK,aAAa;MACzC,CAAC,CAAC;MACF,IAAI+pI,WAAW,GAAG,CAAC,CAAC;MACpB,IAAIF,YAAY,CAACtkK,MAAM,GAAG,CAAC,EACvBwkK,WAAW,GAAGF,YAAY,CAAC,CAAC,CAAC,CAAC,KAC7B;QACD,IAAIlgK,EAAE,GAAGmf,KAAK,CAACuE,OAAO,CAAC,CAAC;QACxB,IAAI28I,GAAG,GAAG3qK,aAAa,CAAC2vC,uBAAuB,CAAC,CAAC;QACjD+6H,WAAW,CAACxnK,EAAE,GAAGoH,EAAE;QACnBogK,WAAW,CAACjqI,kBAAkB,GAAG,CAACkqI,GAAG,GAAG,IAAI,GAAGA,GAAG,CAACtsJ,kBAAkB;QACrEqsJ,WAAW,CAAC9pI,eAAe,GAAG,aAAa;QAC3C8pI,WAAW,CAAC5pI,SAAS,GAAG,IAAI;QAC5B4pI,WAAW,CAAC7mI,mBAAmB,GAAGv5B,EAAE;QACpCogK,WAAW,CAACr/B,mBAAmB,GAAGk/B,aAAa;QAC/CG,WAAW,CAAC/pI,SAAS,GAAG,aAAa;QACrC+pI,WAAW,CAAC1tE,mBAAmB,GAAG,6BAA6B;QAC/Dl9F,MAAM,CAAC4P,WAAW,CAACqyB,cAAc,CAAC57B,IAAI,CAACukK,WAAW,CAAC;MACvD;MAEA5qK,MAAM,CAACw7I,iBAAiB,CAACuS,gBAAgB,GAAG/tJ,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU;MAC/E36D,cAAc,CAAC4qE,mBAAmB,CAACluJ,MAAM,CAAC4P,WAAW,CAAC4rI,iBAAiB,CAACqB,YAAY,EAAE+tB,WAAW,CAACxnK,EAAE,EAChGqnK,aAAa,EAAEzqK,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,EAAE,IAAI,CAAC;MAC7D2sB,WAAW,CAAC7lJ,MAAM,GAAG/kB,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU;IAC5D;EACJ;EAEAn6I,CAAC,CAAC,kBAAkB,CAAC,CAACkwD,EAAE,CAAC,mBAAmB,EAAE,YAAY;IACtD/zD,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,CAAC;EAClD,CAAC,CAAC;EAEFhL,MAAM,CAAC8qK,iBAAiB,GAAG,YAAY;IACnC7qK,UAAU,CAAC+K,UAAU,CAAC,uBAAuB,CAAC;EAClD,CAAC;EAEDhL,MAAM,CAAC2iH,MAAM,GAAG,UAAUzO,WAAW,EAAE;IACnC;IACA;IACA;IACA;;IAEAl0G,MAAM,CAACkiK,kBAAkB,GAAG,CAAC;IAC7BliK,MAAM,CAACmB,IAAI,GAAG,MAAM;IACpBnB,MAAM,CAACmhK,cAAc,GAAG,IAAI;IAE5B,IAAIjtD,WAAW,KAAK,IAAI,EAAE;MACtBl0G,MAAM,CAAC6iK,iBAAiB,CAAC,CAAC;MAC1B7iK,MAAM,CAAC63B,OAAO,GAAG,IAAI;IACzB,CAAC,MAAM,IAAI2rD,cAAc,CAACvJ,gBAAgB,CAAC,CAAC,EAAE;MAC1Cj6E,MAAM,CAACupJ,iBAAiB,GAAG,IAAI;IACnC;;IAEA;IACItlE,qBAAqB,CAACpoB,MAAM,CAAC77D,MAAM,EAAE,MAAM,CAAC;IAChD;EACJ,CAAC;EAIDA,MAAM,CAACokE,gBAAgB,GAAG,YAAY;IAClCtgE,CAAC,CAACC,OAAO,CAAC,CAAC;;IAE/B;IACoB,IAAIugE,SAAS,GAAGswD,YAAY,CAACjwD,aAAa,CAAC,iCAAiC,CAAC,CAACllD,IAAI,CAAC,CAAC;IACpF,IAAIglD,YAAY,GAAG3gE,CAAC,CAAC,mCAAmC,CAAC,CAAC2b,IAAI,CAAC,CAAC;IAChE,IAAI,CAACglD,YAAY,EAAE;MACfA,YAAY,GAAG3gE,CAAC,CAAC,wDAAwD,CAAC,CAAC2b,IAAI,CAAC,CAAC;IACrF;IACA,IAAI4kD,YAAY,GAAGrkE,MAAM,CAACg2H,mBAAmB;IAC7C;IACA,IAAItrH,KAAK,GAAG1K,MAAM,CAAC0K,KAAK,CAACgqJ,YAAY;IAErC,IAAI//D,MAAM,GAAGigC,YAAY,CAAC5wD,eAAe,CAAChkE,MAAM,CAAC4P,WAAW,CAAC;IAC7DglH,YAAY,CAACxwD,gBAAgB,CAACuwB,MAAM,CAAC1wB,OAAO,EAAE0wB,MAAM,CAACzwB,WAAW,EAAEx5D,KAAK,EAAE25D,YAAY,EAAEC,SAAS,EAAE,KAAK,EAAEtkE,MAAM,CAACilJ,iBAAiB,EAAExgF,YAAY,CAAC,CAC3IzgE,IAAI,CAAC,UAAUyjB,MAAM,EAAE;MACpB;MACA3jB,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAIojB,MAAM,CAACs8E,MAAM,IAAI,IAAI,EAAE;QACvB/jG,MAAM,CAACg1J,WAAW,GAAGtqJ,KAAK;QAE1B,IAAImjB,cAAc,GAAG/pB,CAAC,CAAC,qBAAqB,CAAC;QAC7CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;QAExC7tB,MAAM,CAACm1J,uBAAuB,GAAG,YAAY;UACzC,IAAItnI,cAAc,GAAG/pB,CAAC,CAAC,qBAAqB,CAAC;UAC7CzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;QAC7C,CAAC;QACD7tB,MAAM,CAAC+qK,SAAS,GAAG,IAAI;MAC3B,CAAC,MAAM;QACH,IAAIl9I,cAAc,GAAG/pB,CAAC,CAAC,0BAA0B,CAAC;QAClDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;QAExC7tB,MAAM,CAACm1J,uBAAuB,GAAG,YAAY;UACzC,IAAItnI,cAAc,GAAG/pB,CAAC,CAAC,0BAA0B,CAAC;UAClDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;QAC7C,CAAC;MACL;IACJ,CAAC,EAAE,UAAU1pB,GAAG,EAAE;MACdL,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAIuxC,GAAG,GAAGn1C,cAAc,CAACe,SAAS,CAAC,sBAAsB,CAAC;MAC1D,IAAI,CAAC,CAAC2C,GAAG,CAACD,IAAI,IAAIC,GAAG,CAACD,IAAI,CAACkC,MAAM,GAAG,CAAC,IAAI,CAAC,CAACjC,GAAG,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC80B,SAAS,EAC5D4c,GAAG,GAAGzxC,GAAG,CAACD,IAAI,CAAC,CAAC,CAAC,CAAC80B,SAAS;MAE/B74B,YAAY,CAACiE,SAAS,CAAC,CAAC,CAACD,GAAG,CAACD,IAAI,GAAGC,GAAG,CAACD,IAAI,GAAG0xC,GAAG,CAAC;IACvD,CAAC,CAAC;EACV,CAAC;EAGD51C,MAAM,CAACgrK,gBAAgB,GAAG,YAAY;IAClChrK,MAAM,CAACyhK,aAAa,GAAG,IAAI;EAC/B,CAAC;EAEDzhK,MAAM,CAACirK,YAAY,GAAG,YAAY;IAC9B,OAAO,CAAC,CAACjrK,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,IAAI94B,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAAC1yB,MAAM,GAAG,CAAC;EAClF,CAAC;EAED,SAAS8kK,sBAAsBA,CAAC3sJ,kBAAkB,EAAEmnH,gBAAgB,EAAEjhH,MAAM,EAAE0mJ,SAAS,EAAE;IACrF,IAAIC,gBAAgB,GAAG/qK,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAACF,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAACqwD,OAAO,CAAC,CAAC,CAAC;IACrF,IAAIu2F,OAAO,GAAIrrK,MAAM,CAAC4P,WAAW,KAAK5P,MAAM,CAAC4P,WAAW,CAACmtE,WAAW,IAAI/8E,MAAM,CAAC4P,WAAW,CAACxM,EAAE,CAAC,IAAK,EAAE;IACrG,OAAO,CAACioK,OAAO,EAAE3lC,gBAAgB,IAAI,EAAE,EAAEnnH,kBAAkB,IAAI,EAAE,EAAE6sJ,gBAAgB,EAAED,SAAS,IAAI,EAAE,CAAC,CAACx2J,IAAI,CAAC,GAAG,CAAC;EACnH;EAEA,SAAS22J,2BAA2BA,CAACC,UAAU,EAAE;IAC7C,IAAI,CAACvrK,MAAM,CAAC8hK,sBAAsB,EAAE;MAChC9hK,MAAM,CAAC8hK,sBAAsB,GAAG,CAAC,CAAC;IACtC;IAEA,IAAI,CAAC9hK,MAAM,CAAC8hK,sBAAsB,CAACyJ,UAAU,CAAC,EAAE;MAC5CvrK,MAAM,CAAC8hK,sBAAsB,CAACyJ,UAAU,CAAC,GAAG5hJ,KAAK,CAACuE,OAAO,CAAC,CAAC;IAC/D;IAEA,OAAOluB,MAAM,CAAC8hK,sBAAsB,CAACyJ,UAAU,CAAC;EACpD;EAEA,SAASC,qBAAqBA,CAACD,UAAU,EAAE;IACvC,IAAIvrK,MAAM,CAAC8hK,sBAAsB,IAAIyJ,UAAU,EAAE;MAC7C,OAAOvrK,MAAM,CAAC8hK,sBAAsB,CAACyJ,UAAU,CAAC;IACpD;EACJ;EAEA,SAASE,yBAAyBA,CAAA,EAAG;IACjCzrK,MAAM,CAAC8hK,sBAAsB,GAAG,CAAC,CAAC;EACtC;EAEA,SAAS4J,sBAAsBA,CAAC/qI,kBAAkB,EAAE5b,MAAM,EAAE+b,eAAe,EAAEgzH,WAAW,EAAEpuB,gBAAgB,EAAEylC,SAAS,EAAE/sJ,SAAS,EAAE;IAC9H,IAAIpe,MAAM,CAAC6hK,uBAAuB,KAAK,IAAI,EAAE;MACzC,IAAI8J,eAAe,GAAGhrK,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAChCmgK,eAAe,CAAClgK,OAAO,CAAC,IAAI,CAAC;MAC7B,OAAOkgK,eAAe,CAACjgK,OAAO;IAClC;IAEA1L,MAAM,CAAC6hK,uBAAuB,GAAG,IAAI;IAErC,IAAI;MACAxhK,aAAa,CAAC65E,gBAAgB,CAAC,IAAI,CAAC;MAEpC,IAAIusD,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;MAEnE,IAAImV,MAAM,IAAI,CAAC,EAAE;QACb,IAAI/kB,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,IAAI,CAAC,IAC9Bxe,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,CAAC15D,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;UAEhD;UACA,IAAIj8C,UAAU,GAAG,CAAC;UAClB/0B,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,EAAE,UAAU5yB,GAAG,EAAEtG,EAAE,EAAE;YACnDi5B,UAAU,IAAIj5B,EAAE,CAACmlB,MAAM;UAC3B,CAAC,CAAC;UAEF,IAAI1kB,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC4P,WAAW,CAAC4sB,OAAO,EAAE,CAAC,CAAC,IAAIn8B,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,GAAGF,UAAU,EAAE,CAAC,CAAC,EAAE;YAC7H7zB,OAAO,CAACC,GAAG,CAACjF,MAAM,CAAC4P,WAAW,CAAC4sB,OAAO,CAAC;YACvCx3B,OAAO,CAACC,GAAG,CAACjF,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,CAAC;YACrC/zB,OAAO,CAACC,GAAG,CAAC4zB,UAAU,CAAC;YACvB,IAAIxP,KAAK,GAAG5oB,cAAc,CAACe,SAAS,CAAC,yCAAyC,CAAC;YAC/ErB,YAAY,CAACiE,SAAS,CAACilB,KAAK,CAAC;YAE7B,IAAIhL,UAAU,GAAG,EAAE;YACnB,IAAIre,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,EAAE;cAC/Bz2E,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,EAAE,UAAU8yI,GAAG,EAAE1oI,CAAC,EAAE;gBAClD,IAAIA,CAAC,CAACjC,SAAS,EAAE;kBACb5iB,UAAU,CAAChY,IAAI,CAAC68B,CAAC,CAACjC,SAAS,CAAC;gBAChC;cACJ,CAAC,CAAC;cAEFjhC,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,GAAGl8D,UAAU;YAC9C;YAEAokJ,aAAa,CAAC,CAAC;YACfl0B,aAAa,CAAC,CAAC;YACfvuI,MAAM,CAAC6hK,uBAAuB,GAAG,KAAK;YACtC,OAAO,IAAI;UACf;;UAEA;UACAY,aAAa,CAAC,CAAC;UACfziK,MAAM,CAACmhK,cAAc,GAAG,KAAK;UAC7B5yB,aAAa,CAAC,CAAC;UACfvuI,MAAM,CAAC6hK,uBAAuB,GAAG,KAAK;UACtC,OAAOkB,YAAY,CAAC,KAAK,CAAC;QAC9B;QAEA/iK,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,GAAGxe,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,CAAC15D,OAAO,CAAC,CAAC,CAAC;QACrE90E,MAAM,CAAC6hK,uBAAuB,GAAG,KAAK;QACtC;MACJ;MAEA98I,MAAM,GAAG1kB,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAACI,MAAM,CAAC,EAAE,CAAC,CAAC;MAEvD,IAAI,CAAC/kB,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,IAAI94B,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAAC1yB,MAAM,IAAI,CAAC,EACvEpG,MAAM,CAAC4P,WAAW,CAACotB,YAAY,GAAG,CAAC;MAEvCh9B,MAAM,CAACyhK,aAAa,GAAG,IAAI;MAC3BzhK,MAAM,CAAC6rK,oBAAoB,GAAG,EAAE;MAChC,IAAIC,WAAW,GAAG,KAAK;MACvB,IAAI3gG,EAAE,GAAGu6D,gBAAgB;MACzB;MACA;MACA;MACA1lI,MAAM,CAAC+rK,gBAAgB,GAAG/rK,MAAM,CAAC4P,WAAW,CAACotB,YAAY,CAAC,CAAC;;MAE3D,QAAQmuC,EAAE;QACN,KAAK,MAAM;UACP,IAAI6gG,aAAa,GAAG3rK,aAAa,CAACy1E,SAAS,CAAC/wD,MAAM,CAAC;UAEnD,IAAIinJ,aAAa,IAAIhsK,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,EAAE;YACtD6tB,WAAW,GAAG,IAAI;YAClB,IAAI9b,YAAY,GAAG3vJ,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,GAAGj+I,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,EAAE,CAAC,CAAC;YACnHxuI,MAAM,CAAC4P,WAAW,CAACotB,YAAY,GAAG38B,aAAa,CAAC6uB,SAAS,CAAClvB,MAAM,CAAC4P,WAAW,CAACotB,YAAY,GAAGgzH,YAAY,EAAE,CAAC,CAAC;YAC5G,IAAIgc,aAAa,GAAGhsK,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,EAAE;cACrDj+I,MAAM,CAAC4P,WAAW,CAACgtB,gBAAgB,GAAGv8B,aAAa,CAAC6uB,SAAS,CAACnK,MAAM,GAAG/kB,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,EAAE,CAAC,CAAC;YAClH;YACA;YACA;YACA;;YAEAl5H,MAAM,GAAG/kB,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU;UAChD;UACA;QACJ,KAAK,aAAa;UACd,IAAI,EAAEj+I,MAAM,CAAC6jK,eAAe,IAAI7jK,MAAM,CAAC6jK,eAAe,CAACnjI,OAAO,CAAC,EAAE;YAC7D,IAAI3b,MAAM,GAAG/kB,MAAM,CAACw7I,iBAAiB,CAACuS,gBAAgB,EAAE;cACpD/tJ,MAAM,CAACyhK,aAAa,GAAG,KAAK;cAC5BzhK,MAAM,CAAC6rK,oBAAoB,GAAGprK,cAAc,CAACe,SAAS,CAAC,mDAAmD,CAAC;YAC/G;UACJ;UACA;QACJ,KAAK,WAAW;UACZ,IAAIujB,MAAM,GAAG/kB,MAAM,CAACw7I,iBAAiB,CAAC+lB,cAAc,EAAE;YAClDvhK,MAAM,CAACyhK,aAAa,GAAG,KAAK;YAC5BzhK,MAAM,CAAC6rK,oBAAoB,GAAGprK,cAAc,CAACe,SAAS,CAAC,mDAAmD,CAAC;UAC/G;UACA;QACJ,KAAK,SAAS;UACV,IAAIujB,MAAM,GAAG/kB,MAAM,CAACw7I,iBAAiB,CAAC2C,mBAAmB,EAAE;YACvDn+I,MAAM,CAACyhK,aAAa,GAAG,KAAK;YAC5BzhK,MAAM,CAAC6rK,oBAAoB,GAAGprK,cAAc,CAACe,SAAS,CAAC,mDAAmD,CAAC;UAC/G,CAAC,MAAM;YACHxB,MAAM,CAAC4P,WAAW,CAACg/H,yBAAyB,IAAI7pH,MAAM;UAC1D;UACA;QACJ,KAAK,eAAe;UAChB,IAAIA,MAAM,GAAG/kB,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB,EAAE;YACrDl+I,MAAM,CAACyhK,aAAa,GAAG,KAAK;YAC5BzhK,MAAM,CAAC6rK,oBAAoB,GAAGprK,cAAc,CAACe,SAAS,CAAC,mDAAmD,CAAC;UAC/G;UACA;QACJ;UACI,IAAIujB,MAAM,GAAG/kB,MAAM,CAACw7I,iBAAiB,CAACgvB,eAAe,EAAE;YACnDxqK,MAAM,CAACyhK,aAAa,GAAG,KAAK;YAC5BzhK,MAAM,CAAC6rK,oBAAoB,GAAGprK,cAAc,CAACe,SAAS,CAAC,mDAAmD,CAAC;UAC/G;UACA;MACR;MAEA,IAAIxB,MAAM,CAACyhK,aAAa,KAAK,KAAK,EAAE;QAChCzhK,MAAM,CAAC6hK,uBAAuB,GAAG,KAAK;QACtC;MACJ;MAEA,IAAI7hK,MAAM,CAACq6E,aAAa,KAAK,UAAU,IAAIt1D,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC/kB,MAAM,CAAC4P,WAAW,CAACqyB,cAAc,EACzFjiC,MAAM,CAAC4P,WAAW,CAACqyB,cAAc,GAAG,EAAE;MAE1C,IAAI,CAACwkG,SAAS,EACVzmI,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,GAAGnuI,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAAC3kB,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,GAAGzpH,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,KAEjH/kB,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,GAAG1zG,4FAAuB,CAAC0zG,YAAY,CAACxuI,MAAM,CAAC4P,WAAW,EAAEmV,MAAM,CAAC;MAErG/kB,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,GAAGxe,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,CAAC15D,OAAO,CAAC,CAAC,CAAC;MAErE90E,MAAM,CAACw7I,iBAAiB,CAACyC,UAAU,GAAG59I,aAAa,CAACy1E,SAAS,CAAC91E,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,CAAC;MAC7FxuI,MAAM,CAACw7I,iBAAiB,CAACuS,gBAAgB,GAAG/tJ,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY;MAC1ExuI,MAAM,CAACw7I,iBAAiB,CAAC+lB,cAAc,GAAGvhK,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY;MACxExuI,MAAM,CAACw7I,iBAAiB,CAAC2C,mBAAmB,GAAGn+I,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY;MAC7ExuI,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB,GAAGl+I,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY;MAE3ExuI,MAAM,CAAC4P,WAAW,CAAC4sB,OAAO,GAAGx8B,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY;MAE3D,IAAI9I,gBAAgB,KAAK,SAAS,IAAIA,gBAAgB,KAAK,eAAe,EAAE;QACxE1lI,MAAM,CAAC4P,WAAW,CAACkyB,kBAAkB,GAAG,IAAI;MAChD;MAEA,IAAIoyH,OAAO,GAAG,CAAC,CAAC,CAAC;;MAEjB,IAAI96D,SAAS,GAAG,KAAK;MAErB,IAAI2gD,eAAe,GAAG,CAAC;MACvB,IAAIC,kBAAkB,GAAG,CAAC;MAC1B,IAAI57H,SAAS,EAAE;QACX27H,eAAe,GAAG37H,SAAS,CAAC8sH,eAAe;QAC3C8O,kBAAkB,GAAGh6I,MAAM,CAACysI,eAAe,GAAG,CAAC,GAAGruH,SAAS,CAACsf,GAAG;MACnE;MAEA,IAAIuuI,kBAAkB,GAAGlnJ,MAAM,GAAGg1H,eAAe,GAAGC,kBAAkB;MACtE,IAAIuxB,UAAU,GAAGL,sBAAsB,CAACvqI,kBAAkB,EAAE+kG,gBAAgB,EAAEumC,kBAAkB,EAAEd,SAAS,CAAC;;MAE5G;MACA,IAAIzqI,OAAO,GAAG;QACVt9B,EAAE,EAAEkoK,2BAA2B,CAACC,UAAU,CAAC;QAC3C5qI,kBAAkB,EAAEA,kBAAkB;QACtC5b,MAAM,EAAEknJ,kBAAkB;QAC1BxwI,IAAI,EAAE,IAAIA,IAAI,CAAC,CAAC;QAChBoF,SAAS,EAAE6kG,gBAAgB;QAC3B5kG,eAAe,EAAEA,eAAe;QAChCC,OAAO,EAAEmzH,OAAO;QAChBlzH,SAAS,EAAEmqI,SAAS;QACpBlqI,SAAS,EAAE7iB;MACf,CAAC;MAED,IAAIpe,MAAM,CAAC6jK,eAAe,IAAI7jK,MAAM,CAAC6jK,eAAe,CAACnjI,OAAO,EAAE;QAC1DA,OAAO,GAAG1gC,MAAM,CAAC6jK,eAAe,CAACnjI,OAAO;MAC5C;MAEA,IAAIyqC,EAAE,IAAI,WAAW,EAAE;QACnBzqC,OAAO,CAAC8qG,UAAU,GAAG7qG,kBAAkB;MAC3C;MAEA,IAAID,OAAO,CAACO,SAAS,EACjBP,OAAO,CAACO,SAAS,CAACmqG,SAAS,GAAG1qG,OAAO,CAACt9B,EAAE;MAE5C,IAAIsiI,gBAAgB,KAAK,aAAa,IAAIhlG,OAAO,CAACO,SAAS,IAAI,CAACP,OAAO,CAAC2sG,gBAAgB,EAAE;QACtF3sG,OAAO,CAAC2sG,gBAAgB,GAAGvtI,OAAO,CAAC+F,IAAI,CAAC66B,OAAO,CAACO,SAAS,CAAC;MAC9D;MAEA,IAAIv1B,OAAO;MACX1L,MAAM,CAACuqK,aAAa,GAAG,IAAI;MAE3B,IAAI7kC,gBAAgB,KAAK,aAAa,EAAE;QACpC5hI,CAAC,CAACC,OAAO,CAAC,CAAC;QACX;QACA,IAAIqD,KAAK,GAAGpH,MAAM;QAElB,IAAIA,MAAM,CAAC6jK,eAAe,IAAI7jK,MAAM,CAAC6jK,eAAe,CAACnjI,OAAO,EAAE;UAC1Dh1B,OAAO,GAAGrL,aAAa,CAAC63C,cAAc,CAAC;YACnCrU,QAAQ,EAAE;cACNq5D,mBAAmB,EAAE,sBAAsB;cAC3Cn5D,mBAAmB,EAAE,EAAE;cACvBtc,MAAM,EAAE,IAAI;cACZhD,MAAM,EAAEic,OAAO,CAAC3b;YACpB;UACJ,CAAC,CAAC;QACN,CAAC,MAAM;UACH1kB,aAAa,CAAC65E,gBAAgB,CAACl6E,MAAM,CAAC4P,WAAW,EAAExI,KAAK,EAAEs5B,OAAO,EAAE,gBAAgB,EAAEA,OAAO,CAAC3b,MAAM,CAAC,CAAC,CAAC;;UAEtGrZ,OAAO,GAAG43E,cAAc,CAAC7/C,WAAW,CAAC;YACjCrgC,EAAE,EAAEs9B,OAAO,CAACt9B,EAAE;YACd2hB,MAAM,EAAE2b,OAAO,CAAC3b,MAAM;YACtBzhB,QAAQ,EAAEpD,aAAa,CAACqD,QAAQ;YAChC+0B,WAAW,EAAEt4B,MAAM,CAAC4P,WAAW,CAAC8sB,gBAAgB;YAChDugE,IAAI,EAAEj9F,MAAM,CAAC4P,WAAW;YACxB4gJ,eAAe,EAAE,SAAjBA,eAAeA,CAAYj1D,IAAI,EAAErzF,IAAI,EAAEg7B,CAAC,EAAE;cACtC,OAAOrrB,YAAY,CAACimG,uBAAuB,CAAC12G,KAAK,EAAEm0F,IAAI,EAAErzF,IAAI,EAAEg7B,CAAC,CAAC;YACrE;UAEJ,CAAC,EAAEljC,MAAM,CAAC;QACd;QAEA0L,OAAO,GAAGA,OAAO,CACZ1H,IAAI,CAAC,UAAUqF,GAAG,EAAE;UAEjB,IAAI,CAAC,CAACA,GAAG,IAAI,CAAC,CAACA,GAAG,CAACw6B,QAAQ,IAAI,CAAC,CAACx6B,GAAG,CAACw6B,QAAQ,CAACq5D,mBAAmB,IAC7D7zF,GAAG,CAACw6B,QAAQ,CAACq5D,mBAAmB,CAACgvE,eAAe,KAAK,IAAI,EAAE;YAAE;YAC7DxrI,OAAO,CAAC3b,MAAM,GAAG1b,GAAG,CAACw6B,QAAQ,CAACq5D,mBAAmB,CAAC2vB,cAAc;YAChE,IAAInsF,OAAO,CAACO,SAAS,EAAE;cACnB,IAAMkrI,oBAAoB,GAAGhuJ,gBAAgB,CAACiuJ,wCAAwC,CAAC1rI,OAAO,CAACO,SAAS,EAAEP,OAAO,CAAC3b,MAAM,EAAE/kB,MAAM,CAACysI,eAAe,EAAEvsI,aAAa,CAACirC,gBAAgB,CAAC;cACjLzK,OAAO,CAACO,SAAS,CAACiqG,eAAe,GAAGihC,oBAAoB,CAACjhC,eAAe;cACxExqG,OAAO,CAACO,SAAS,CAACvD,GAAG,GAAGyuI,oBAAoB,CAACzuI,GAAG;cAChDgD,OAAO,CAACO,SAAS,CAAC8qG,sBAAsB,GAAGogC,oBAAoB,CAACpgC,sBAAsB;YAC1F;YAEA,IAAI+nB,WAAW,KAAK,IAAI,EAAE;cACtB,IAAI,CAACrtB,SAAS,EAAE;gBACZ/lG,OAAO,CAACK,OAAO,GAAG7iB,WAAW,CAAC4vH,kBAAkB,CAAC9tI,MAAM,CAAC4P,WAAW,EAAEvG,GAAG,CAACw6B,QAAQ,CAACq5D,mBAAmB,CAAC2vB,cAAc,CAAC;gBACrH7sH,MAAM,CAAC4P,WAAW,CAACw6H,aAAa,GAAG1pG,OAAO,CAACK,OAAO;cACtD,CAAC,MAAM;gBACHjG,4FAAuB,CAAC0uI,iBAAiB,CAACxpK,MAAM,CAAC4P,WAAW,CAAC;cACjE;YACJ;YACA6yJ,aAAa,CAAC,CAAC;UACnB;UACA,IAAIl3J,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;UACrB,OAAOkC,QAAQ,CAACG,OAAO;QAC3B,CAAC,EAAE,UAAUvH,GAAG,EAAE;UACd,IAAIoH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzB,IAAIrG,UAAU,GAAG,IAAI;UAErB,IAAIhB,GAAG,IAAIA,GAAG,CAACkoK,WAAW,KAAK,IAAI,EAAE;YACjC,IAAI,CAAC,CAACloK,GAAG,IAAIA,GAAG,CAACu2B,gBAAgB,KAAK,IAAI,EAAE;cACxCv1B,UAAU,GAAG,KAAK;cAClBoG,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;YACxB,CAAC,MACD,IAAI,OAAQA,GAAG,CAAC0W,OAAQ,IAAI,QAAQ,EAChC7a,MAAM,CAAC29J,eAAe,CAACl8I,SAAS,GAAGtd,GAAG,CAAC0W,OAAO,CAAC,KAC9C,IAAI,CAAC,CAAC1W,GAAG,CAAC0/B,QAAQ,IAAI,CAAC,CAAC1/B,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,EACtD9jC,MAAM,CAAC29J,eAAe,CAACl8I,SAAS,GAAGtd,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,CAAC,KAEjE9jC,MAAM,CAAC29J,eAAe,CAACl8I,SAAS,GAAGtd,GAAG;UAE9C;UAEA,IAAIgB,UAAU,EAAE;YACZrB,CAAC,CAACO,SAAS,CAAC,CAAC;YACb,IAAIioK,aAAa,GAAG,SAAhBA,aAAaA,CAAA,EAAe;cAC5B,IAAItsK,MAAM,CAAC29J,eAAe,CAACC,0BAA0B,KAAK,IAAI,EAAE;gBAC5D59J,MAAM,CAAC29J,eAAe,CAACC,0BAA0B,GAAG,IAAI;gBACxD59J,MAAM,CAAC29J,eAAe,CAACl8I,SAAS,GAAG,IAAI;gBACvClW,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;cAC1B,CAAC,MAAM;gBACHzL,MAAM,CAAC29J,eAAe,CAACC,0BAA0B,GAAG,IAAI;gBACxD59J,MAAM,CAAC29J,eAAe,CAACl8I,SAAS,GAAG,IAAI;gBACvC,IAAItd,GAAG,KAAK,IAAI,IAAI,OAAQA,GAAI,KAAK,WAAW,EAAE;kBAC9CA,GAAG,GAAG;oBACFkoK,WAAW,EAAE;kBACjB,CAAC;gBACL,CAAC,MACGloK,GAAG,CAACkoK,WAAW,GAAG,IAAI;gBAC1B9gK,QAAQ,CAACqb,MAAM,CAACziB,GAAG,CAAC;cACxB;YACJ,CAAC;YAED,IAAIA,GAAG,IAAIA,GAAG,CAACooK,iBAAiB,EAAE;cAC9BlsK,aAAa,CAAC8E,UAAU,CAACrB,CAAC,CAAC,kCAAkC,CAAC,EAC9D,IAAI,EAAE,IAAI,EAAEwoK,aAAa,CAAC;YAC9B,CAAC,MACI;cACDjsK,aAAa,CAAC8E,UAAU,CAACrB,CAAC,CAAC,iCAAiC,CAAC,EAC7D,IAAI,EAAE,IAAI,EAAEwoK,aAAa,CAAC;YAC9B;UACJ;UAEA,OAAO/gK,QAAQ,CAACG,OAAO;QAC3B,CAAC,CAAC;MACV,CAAC,MAAM;QACH1L,MAAM,CAACuqK,aAAa,GAAG7pI,OAAO,CAACt9B,EAAE,CAAC,CAAC;;QAEnC,IAAImI,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;QACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;QACtBC,OAAO,GAAGH,QAAQ,CAACG,OAAO;MAC9B;MAEA,OAAO1L,MAAM,CAACwsK,kBAAkB,CAACV,WAAW,EAAEprI,OAAO,EAAEh1B,OAAO,EAAEooJ,WAAW,EAAEyX,UAAU,CAAC;IAE5F,CAAC,CAAC,OAAOpnK,GAAG,EAAE;MACVnE,MAAM,CAAC6hK,uBAAuB,GAAG,KAAK;MACtC/9J,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,MAAMF,GAAG;IACb;EACJ;EAEAnE,MAAM,CAACwsK,kBAAkB,GAAG,UAAUV,WAAW,EAAEprI,OAAO,EAAEh1B,OAAO,EAAEooJ,WAAW,EAAEyX,UAAU,EAAE;IAC1F,OAAO7/J,OAAO,CAAC1H,IAAI,CAAC,UAAUyoK,MAAM,EAAE;MAC9B,IAAIC,kBAAkB,GAAG,KAAK;MAC9B,IAAI1sK,MAAM,CAAC6jK,eAAe,IAAI7jK,MAAM,CAAC6jK,eAAe,CAACnjI,OAAO,EAAE;QAC1D1gC,MAAM,CAACmB,IAAI,GAAG,SAAS;QACvBurK,kBAAkB,GAAG,IAAI;MAC7B;MAEA,OAAO1sK,MAAM,CAAC6jK,eAAe;MAC7BxjK,aAAa,CAAC65E,gBAAgB,CAAC,IAAI,CAAC;MAEpC,IAAIusD,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;MACnE5K,OAAO,CAACC,GAAG,CAAC,WAAW,GAAGyyB,IAAI,CAACC,SAAS,CAAC80I,MAAM,CAAC,CAAC;MAEjD,IAAIA,MAAM,IAAI,IAAI,IAAI,CAAC,CAACA,MAAM,CAAC5oI,QAAQ,EAAE;QACrCnD,OAAO,GAAG5gC,OAAO,CAAC2P,MAAM,CAACixB,OAAO,EAAE+rI,MAAM,CAAC5oI,QAAQ,CAAC;MACtD;;MAEA;MACA;;MAEA;MACA,IAAI8oI,aAAa,GAAG,IAAI;MACxB,IAAIzgJ,KAAK,GAAGlsB,MAAM,CAAC4P,WAAW,CAACmpB,KAAK;MAEpCj1B,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,EAAE,UAAU5yB,GAAG,EAAEtG,EAAE,EAAE;QACnD,IAAIA,EAAE,CAACwD,EAAE,KAAKs9B,OAAO,CAACt9B,EAAE,EAAE;UACtBupK,aAAa,GAAG,KAAK;UAErB,IAAI3sK,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,EAAE;YAC/B,IAAIqyF,sBAAsB,GAAG5sK,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,CAAClrE,OAAO,CAACqxB,OAAO,CAACO,SAAS,CAAC;YACrF,IAAI2rI,sBAAsB,GAAG,CAAC,CAAC,EAAE;cAC7B5sK,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,CAACjrE,MAAM,CAACs9J,sBAAsB,EAAE,CAAC,CAAC;YACnE;UACJ;UAEA,OAAO,KAAK;QAChB;MACJ,CAAC,CAAC;MAEF9oK,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,EAAE,UAAU5yB,GAAG,EAAEtG,EAAE,EAAE;QACnDssB,KAAK,IAAI7rB,aAAa,CAAC6uB,SAAS,CAACtvB,EAAE,CAACmlB,MAAM,EAAE,CAAC,CAAC;MAClD,CAAC,CAAC;MAEF,IAAI0hH,SAAS,IAAI/lG,OAAO,IAAIA,OAAO,CAACO,SAAS,EAAE;QAC3C/U,KAAK,IAAIwU,OAAO,CAACO,SAAS,CAAC8qG,sBAAsB,CAAC,CAAC;MACvD;MAEA,IAAI7/G,KAAK,GAAGwU,OAAO,CAAC3b,MAAM,GAAG,CAAC,EAAE;QAC5BjhB,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,EAAE,UAAU5yB,GAAG,EAAEtG,EAAE,EAAE;UACnD,IAAIA,EAAE,CAACihC,SAAS,KAAKH,OAAO,CAACG,SAAS,IAClCjhC,EAAE,CAACmlB,MAAM,KAAK2b,OAAO,CAAC3b,MAAM,IAC5B,IAAI0W,IAAI,CAAC77B,EAAE,CAAC67B,IAAI,CAAC,CAACmvF,YAAY,CAAC,CAAC,KAAK,IAAInvF,IAAI,CAACiF,OAAO,CAACjF,IAAI,CAAC,CAACmvF,YAAY,CAAC,CAAC,EAAE;YAC5E+hD,aAAa,GAAG,KAAK;YAErB,IAAI3sK,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,EAAE;cAC/B,IAAIh0E,KAAK,GAAGvG,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,CAAClrE,OAAO,CAACqxB,OAAO,CAACO,SAAS,CAAC;cACpE,IAAI16B,KAAK,GAAG,CAAC,CAAC,EAAE;gBACZvG,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,CAACjrE,MAAM,CAAC/I,KAAK,EAAE,CAAC,CAAC;cAClD;YACJ;YAEA;UACJ;QACJ,CAAC,CAAC;MACN;MAEA,IAAI2tJ,OAAO,GAAG,CAAC;MACf,IAAIyY,aAAa,EAAE;QACf3sK,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAACzyB,IAAI,CAACq6B,OAAO,CAAC;QACzC8qI,qBAAqB,CAACD,UAAU,CAAC;QAEjC,IAAIzX,WAAW,KAAK,IAAI,EAAE;UACtB,IAAI,CAACrtB,SAAS,EACVytB,OAAO,GAAGh2I,WAAW,CAAC4vH,kBAAkB,CAAC9tI,MAAM,CAAC4P,WAAW,EAAE8wB,OAAO,CAAC3b,MAAM,CAAC;QACpF;QAEA,IAAI0hH,SAAS,EACT3rG,4FAAuB,CAAC0uI,iBAAiB,CAACxpK,MAAM,CAAC4P,WAAW,CAAC;MACrE,CAAC,MAAM;QACH47J,qBAAqB,CAACD,UAAU,CAAC;MACrC;MAEA,IAAI,CAAC9kC,SAAS,EAAE;QACZ/lG,OAAO,CAACK,OAAO,GAAGmzH,OAAO;QACzBl0J,MAAM,CAAC4P,WAAW,CAACw6H,aAAa,GAAG8pB,OAAO;QAC1Cl0J,MAAM,CAAC4P,WAAW,CAACnM,aAAa,GAAGya,WAAW,CAAC2vH,0BAA0B,CAAC7tI,MAAM,CAAC4P,WAAW,CAAC;MACjG;;MAEA;MACA6yJ,aAAa,CAAC,CAAC;MAEf,IAAIziK,MAAM,CAAC4P,WAAW,CAACotB,YAAY,KAAK,CAAC,EAAE;QACvCh9B,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,GAAG,CAAC;QAClCxuI,MAAM,CAAC4P,WAAW,CAAC4sB,OAAO,GAAG,CAAC;MAClC;MAEAx8B,MAAM,CAACmhK,cAAc,GAAG,KAAK;MAC7B5yB,aAAa,CAAC,CAAC;;MAEf;MACA;MACA;MACA;MACA,OAAOw0B,YAAY,CAAC,CAAC2J,kBAAkB,IAAI,EAAE1sK,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,KAAK,CAAC,IAAIs9B,WAAW,KAAK,IAAI,CAAC,CAAC;IAC/G,CAAC,CAAC,SACI,CAAC,UAAU3nK,GAAG,EAAE;MAClBa,OAAO,CAACC,GAAG,CAAC,iBAAiB,GAAGd,GAAG,CAAC;;MAEpC;MACA,IAAI,CAAC,CAACnE,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,EAAE;QACjC,IAAIsyF,WAAW,GAAGnsI,OAAO;QACzB,IAAI,CAAC,CAACmsI,WAAW,IAAI,CAAC,CAACA,WAAW,CAAC5rI,SAAS,EAAE;UAC1CjhC,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,GAAGv6E,MAAM,CAAC4P,WAAW,CAAC2qE,UAAU,CAACx0E,MAAM,CAAC,UAAUsvC,CAAC,EAAE;YAC9E,OAAOA,CAAC,CAACy3H,SAAS,IAAID,WAAW,CAAC5rI,SAAS,CAAC6rI,SAAS;UACzD,CAAC,CAAC;QACN;MACJ;MAEA,IAAI,CAAC,CAAC9sK,MAAM,CAAC4P,WAAW,CAACm9J,uBAAuB,EAAE;QAC9C/sK,MAAM,CAAC4P,WAAW,CAACnM,aAAa,IAAIzD,MAAM,CAAC4P,WAAW,CAACm9J,uBAAuB;QAC9E,OAAO/sK,MAAM,CAAC4P,WAAW,CAACm9J,uBAAuB;MACrD;MAEA,IAAItmC,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;MACnE,IAAI62H,SAAS,EAAE;QACX3rG,4FAAuB,CAAC0uI,iBAAiB,CAACxpK,MAAM,CAAC4P,WAAW,CAAC;MACjE;;MAEA;MACA6yJ,aAAa,CAAC,CAAC;MAEf3+J,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAIF,GAAG,CAACkoK,WAAW,KAAK,IAAI,EAAE;QAC1B,IAAI,CAAC,CAACloK,GAAG,IAAIA,GAAG,CAACu2B,gBAAgB,KAAK,IAAI,EAAE;UACxC16B,MAAM,CAAC8sD,UAAU,GAAG,sBAAsB;UAC1C9sD,MAAM,CAAConK,sBAAsB,GAAGjjK,GAAG,CAACq4F,eAAe;UACnDn8F,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,OAAO,CAAC,EAC5D2C,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,GAAG,OAAO,GAAGrjC,cAAc,CAACe,SAAS,CAAC,oCAAoC,CAAC,EACxGf,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC,EAC/Bf,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,MACD,IAAI,OAAQ2C,GAAG,CAAC0W,OAAQ,KAAK,QAAQ,EACjC1a,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,EAAE,YAAY;UAC5C7a,MAAM,CAACmF,UAAU,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC,KACF,IAAI,CAAC,CAAChB,GAAG,CAAC0/B,QAAQ,IAAI,CAAC,CAAC1/B,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,EACtD3jC,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,EAAE,YAAY;UAC9D9jC,MAAM,CAACmF,UAAU,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC,KAEHhF,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,YAAY;UACpCnE,MAAM,CAACmF,UAAU,CAAC,CAAC;QACvB,CAAC,CAAC;MAEV;IACJ,CAAC,CAAC,WACM,CAAC,YAAY;MACjBnF,MAAM,CAAC6hK,uBAAuB,GAAG,KAAK;MACtC/9J,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;EACV,CAAC;EAED,SAAS2oK,iBAAiBA,CAAA,EAAG;IACzB;IACAhtK,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,GAAG94B,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAAC/yB,MAAM,CAAC,UAAUm9B,CAAC,EAAE;MAC1E,OAAOA,CAAC,CAAC9/B,EAAE,KAAKpD,MAAM,CAACuqK,aAAa;IACxC,CAAC,CAAC;IACF;IACAvqK,MAAM,CAAC4P,WAAW,CAACotB,YAAY,GAAGh9B,MAAM,CAAC+rK,gBAAgB;IACzD/rK,MAAM,CAACuqK,aAAa,GAAG,IAAI;IAE3B,IAAItmG,OAAO,GAAGjkE,MAAM,CAAC4P,WAAW,CAACxM,EAAE;IACnC,IAAImtB,UAAU,GAAGvwB,MAAM,CAACquB,eAAe;IACvCg/F,kBAAkB,CAACx5B,UAAU,CAAC5vB,OAAO,EAAE1zC,UAAU,EAAE,kBAAkB,EAAE,IAAI,CAAC;IAE5E0zD,qBAAqB,CAACpoB,MAAM,CAAC77D,MAAM,EAAE,MAAM,CAAC;EAChD;;EAEA;EACA,SAAS+iK,YAAYA,CAAC/wE,SAAS,EAAE;IAE7BluF,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAAC0K,KAAK,CAACgqJ,YAAY,GAAG,IAAI;IAEhC,IAAI1iE,SAAS,EAAE;MACX/N,qBAAqB,CAACpoB,MAAM,CAAC77D,MAAM,EAAE,MAAM,CAAC;IAChD;IAEA,IAAI,CAAC,CAACA,MAAM,CAAC4P,WAAW,CAAC2hD,eAAe,IACpCvxD,MAAM,CAAC4P,WAAW,CAAC2hD,eAAe,CAAC1uD,KAAK,EAAE;MAC1C7C,MAAM,CAAC0K,KAAK,CAACgqJ,YAAY,GAAG10J,MAAM,CAAC4P,WAAW,CAAC2hD,eAAe,CAAC1uD,KAAK;IACxE;IAEA4oK,yBAAyB,CAAC,CAAC;;IAE3B;IACA;IACAzrK,MAAM,CAAC4P,WAAW,CAACmtE,WAAW,GAAG,IAAI;IACrC,IAAIksD,UAAU,GAAIjpI,MAAM,CAAC2+I,gBAAgB,KAAK,UAAU,IAAI3+I,MAAM,CAACq6E,aAAa,KAAK,UAAU,IAAKr6E,MAAM,CAACo6E,QAAQ,KAAK,UAAU,IAC7Hp6E,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,IAAI94B,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAAC1yB,MAAM,GAAG,CAAE;IAC3E,IAAIqgI,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE,IAAI62H,SAAS,IAAIzmI,MAAM,CAACq6E,aAAa,KAAK,UAAU,EAAE;MAClD,IAAI9vB,IAAI,GAAG;QACPixF,iBAAiB,EAAEx7I,MAAM,CAACw7I,iBAAiB;QAC3C/mC,QAAQ,EAAEz0G,MAAM,CAACy0G,QAAQ;QACzBiqC,YAAY,EAAE1+I,MAAM,CAAC0+I,YAAY;QACjCzV,UAAU,EAAEA;MAChB,CAAC;MAEDnuG,4FAAuB,CAACmkH,uBAAuB,CAACj/I,MAAM,CAAC4P,WAAW,EAAE26C,IAAI,EAAEvvB,iEAAc,CAAC+F,OAAO,CAAC;MACjG,IAAI0lG,SAAS,EACT8H,aAAa,CAAC,CAAC;IACvB;IAEA,IAAIp2G,iBAAiB,GAAGja,WAAW,CAACka,wBAAwB,CAACp4B,MAAM,CAAC4P,WAAW,EAAE,QAAQ,EAAEq5H,UAAU,EAAEjpI,MAAM,CAACysI,eAAe,EAAE,IAAI,EAAEz6C,SAAS,EAAEhyF,MAAM,CAACq6E,aAAa,KAAK,UAAU,CAAC;IAEpL,IAAI9uE,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IACtB,IAAIC,OAAO,GAAGH,QAAQ,CAACG,OAAO;IAE9B,OAAOA,OAAO,CAAC1H,IAAI,CAAC,YAAY;MAExB;MACA,OAAOhE,MAAM,CAAC4P,WAAW,CAAC+2H,aAAa,CAAC,CAAC;MACzC,OAAO3mI,MAAM,CAAC4P,WAAW,CAACuiJ,YAAY,CAAC,CAAC;;MAExC,OAAOj0I,WAAW,CAACua,QAAQ,CAACN,iBAAiB,EAAEn4B,MAAM,CAAC4P,WAAW,CAAC,CAAC5L,IAAI,CAAC,UAAUC,IAAI,EAAE;QACpFH,CAAC,CAACO,SAAS,CAAC,CAAC;QACb,IAAI2tF,SAAS,KAAK,IAAI,EAAE;UACpB;UACAhyF,MAAM,CAACoiK,kBAAkB,CAAC,CAAC;UAE3B,IAAIn+J,IAAI,CAACotB,OAAO,IAAI,CAAC,CAACrxB,MAAM,CAAC04B,YAAY,EAAE;YACvCv4B,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,wFAAwF,CAAC,GAAG,OAAO,GAAGyrK,MAAM,CAACv0I,YAAY,CAAC;UAC9K;UAEA,IAAI,CAACz0B,IAAI,CAACotB,OAAO,IAAIptB,IAAI,CAAC8zC,MAAM,KAAK,CAAC,CAAC,IAAI9zC,IAAI,CAAC4W,OAAO,EAAE;YACrD1a,YAAY,CAACiE,SAAS,CAACH,IAAI,CAAC4W,OAAO,CAAC;UACxC;UAEA,IAAI,CAAC,CAACsd,iBAAiB,CAACkyG,iBAAiB,EAAE;YACvC,IAAIo/B,iBAAiB,GAAGvpK,aAAa,CAAC8rB,cAAc,CAAC3Q,KAAK,CAAC,GAAG,CAAC;YAC/Drb,MAAM,CAAC4P,WAAW,CAAC4K,OAAO,GAAGivJ,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG5vI,IAAI,CAACo+B,KAAK,CAACx8B,IAAI,CAAC4gD,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAACr0D,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,GAAGhE,QAAQ,CAAChkB,MAAM,CAAC4P,WAAW,CAAC8sB,gBAAgB,EAAE,EAAE,CAAC,CAAC1U,QAAQ,CAAC,EAAE,CAAC;YAC3KumH,aAAa,CAAC,CAAC;UACnB;UAEA/tI,QAAQ,CAAC,YAAY;YACjBR,MAAM,CAACktK,uBAAuB,CAACjpK,IAAI,CAAC;UACxC,CAAC,EAAE,GAAG,CAAC;UAEP,IAAIA,IAAI,CAACotB,OAAO,IAAInxB,aAAa,CAACX,MAAM,KAAK,KAAK,IAAI,CAACwV,UAAU,CAACE,WAAW,EAAE;YAC3E,OAAOiJ,WAAW,CAACupH,gBAAgB,CAACtvG,iBAAiB,CAAC47D,OAAO,EAAE,QAAQ,CAAC;UAC5E;QACJ,CAAC,MAAM;UACH,IAAI9vF,IAAI,CAACotB,OAAO,KAAK,KAAK,IAAIptB,IAAI,CAAC4W,OAAO,EAAE;YACxC;YACAwyG,kBAAkB,CAACx5B,UAAU,CAAC7zF,MAAM,CAAC4P,WAAW,CAACxM,EAAE,EAAElD,aAAa,CAACmuB,eAAe,EAAE,0BAA0B,EAAEruB,MAAM,CAACquB,eAAe,CAAC;YAEvI,IAAI,CAAC,CAACruB,MAAM,CAACuqK,aAAa,EAAE;cACxByC,iBAAiB,CAAC,CAAC;YACvB;YAEAhoK,OAAO,CAACC,GAAG,CAAC,QAAQ,GAAGhB,IAAI,CAAC4W,OAAO,CAAC;YACpC,IAAIsyJ,SAAS,GAAGxsK,EAAE,CAAC6K,KAAK,CAAC,CAAC;YAC1B2hK,SAAS,CAACvmJ,MAAM,CAAC3iB,IAAI,CAAC4W,OAAO,CAAC;YAC9B,OAAOsyJ,SAAS,CAACzhK,OAAO;UAC5B;UAEA1L,MAAM,CAACuqK,aAAa,GAAG,IAAI;UAC3B,IAAIvsJ,SAAS,GAAGrd,EAAE,CAAC6K,KAAK,CAAC,CAAC;UAC1BwS,SAAS,CAACvS,OAAO,CAAC,IAAI,CAAC;UACvB,OAAOuS,SAAS,CAACtS,OAAO;QAC5B;MACJ,CAAC,EAAE,UAAUvH,GAAG,EAAE;QACdL,CAAC,CAACO,SAAS,CAAC,CAAC;;QAEb;QACA,IAAI2tF,SAAS,KAAK,IAAI,EAAE;UACpB;UACAhyF,MAAM,CAACoiK,kBAAkB,CAAC,CAAC;UAC3B,IAAIliK,aAAa,CAACmB,QAAQ,KAAK,KAAK,IAAIrB,MAAM,CAAC4P,WAAW,CAACkyB,kBAAkB,KAAK,IAAI,EAAE;YACpFsrI,yBAAyB,CAAC,CAAC;UAC/B,CAAC,MAAM;YACH,IAAI,CAAC,CAACptK,MAAM,CAACuqK,aAAa,EAAE;cACxByC,iBAAiB,CAAC,CAAC;YACvB;;YAEA;YACAhoK,OAAO,CAACC,GAAG,CAAC,QAAQ,GAAGd,GAAG,CAAC;YAC3B,IAAIgpK,SAAS,GAAGxsK,EAAE,CAAC6K,KAAK,CAAC,CAAC;YAC1B2hK,SAAS,CAACvmJ,MAAM,CAACziB,GAAG,CAAC;YACrB,OAAOgpK,SAAS,CAACzhK,OAAO;UAC5B;QACJ,CAAC,MAAM;UACH,IAAI,CAAC,CAAC1L,MAAM,CAACuqK,aAAa,EAAE;YACxB;YACAvqK,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,GAAG94B,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAAC/yB,MAAM,CAAC,UAAUm9B,CAAC,EAAE;cAC1E,OAAOA,CAAC,CAAC9/B,EAAE,KAAKpD,MAAM,CAACuqK,aAAa;YACxC,CAAC,CAAC;YACF;YACAvqK,MAAM,CAAC4P,WAAW,CAACotB,YAAY,GAAGh9B,MAAM,CAAC+rK,gBAAgB;YACzD/rK,MAAM,CAACuqK,aAAa,GAAG,IAAI;UAC/B;UAEAvlK,OAAO,CAACC,GAAG,CAAC,QAAQ,GAAGd,GAAG,CAAC;UAC3B,IAAIgpK,SAAS,GAAGxsK,EAAE,CAAC6K,KAAK,CAAC,CAAC;UAC1B2hK,SAAS,CAACvmJ,MAAM,CAACziB,GAAG,CAAC;UACrB,OAAOgpK,SAAS,CAACzhK,OAAO;QAC5B;MACJ,CAAC,CAAC;IACN,CAAC,CAAC,SACI,CAAC,UAAUvH,GAAG,EAAE;MAClBnE,MAAM,CAACkiK,kBAAkB,GAAG,CAAC;MAC7B;MACA;MACA;MACA,IAAI,CAAC,CAACliK,MAAM,CAACuqK,aAAa,EACtBvqK,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,GAAG94B,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAAC/yB,MAAM,CAAC,UAAUm9B,CAAC,EAAE;QAC1E,OAAOA,CAAC,CAAC9/B,EAAE,KAAKpD,MAAM,CAACuqK,aAAa;MACxC,CAAC,CAAC;MAENvqK,MAAM,CAACuqK,aAAa,GAAG,IAAI;;MAE3B;MACA9H,aAAa,CAAC,CAAC;MAEfl0B,aAAa,CAAC,CAAC;;MAEf;MACAvuI,MAAM,CAACmhK,cAAc,GAAG,IAAI;MAC5Br9J,CAAC,CAACO,SAAS,CAAC,CAAC;MAEb,IAAI,OAAQF,GAAI,KAAK,QAAQ,EACzBhE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,YAAY;QACpCnE,MAAM,CAACmF,UAAU,CAAC,CAAC;MACvB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,KACpB,IAAI,OAAQhB,GAAG,CAAC0W,OAAQ,KAAK,QAAQ,EACtC1a,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0W,OAAO,EAAE,YAAY;QAC5C7a,MAAM,CAACmF,UAAU,CAAC,CAAC;MACvB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,KACpB,IAAI,CAAC,CAAChB,GAAG,IAAI,CAAC,CAACA,GAAG,CAAC0/B,QAAQ,IAAI,OAAQ1/B,GAAG,CAAC0/B,QAAQ,CAACC,gBAAiB,KAAK,QAAQ,EACnF3jC,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC0/B,QAAQ,CAACC,gBAAgB,EAAE,YAAY;QAC9D9jC,MAAM,CAACmF,UAAU,CAAC,CAAC;MACvB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,KAErBhF,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,YAAY;QACpCnE,MAAM,CAACmF,UAAU,CAAC,CAAC;MACvB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC5B,CAAC,CAAC,WACM,CAAC,UAAUkE,GAAG,EAAE;MACpBvF,CAAC,CAACO,SAAS,CAAC,CAAC;IAEjB,CAAC,CAAC;EACV;EAEArE,MAAM,CAACqtK,wBAAwB,GAAG,YAAY;IAC1C,IAAIx/I,cAAc,GAAG/pB,CAAC,CAAC,oBAAoB,CAAC;IAC5CzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAACstK,oCAAoC,GAAG,YAAY;IACtD,IAAIz/I,cAAc,GAAG/pB,CAAC,CAAC,iCAAiC,CAAC;IACzDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAACutK,qCAAqC,GAAG,YAAY;IACvD,IAAI1/I,cAAc,GAAG/pB,CAAC,CAAC,kCAAkC,CAAC;IAC1DzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED,SAAS2/I,kBAAkBA,CAAA,EAAG;IAC1B,IAAI3/I,cAAc,GAAG/pB,CAAC,CAAC,oBAAoB,CAAC;IAC5CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C;EAEA7tB,MAAM,CAAC4vJ,OAAO,GAAG,UAAUG,aAAa,EAAE;IACtC,IAAItrI,MAAM,GAAGpkB,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAAC3kB,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,CAAC,EAAE,CAAC,CAAC;IAE9E,IAAI,CAACxe,MAAM,CAACogK,QAAQ,EAAE;MAClB;MACA,IAAI,CAAC,EAAEpgK,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,IAAIp6E,MAAM,CAACo6E,QAAQ,KAAK,QAAQ,CAAC,IACtEp6E,MAAM,CAACq6E,aAAa,KAAK,UAAU,KAAK51D,MAAM,GAAG,CAAC,EAAE;QAExD,IAAIA,MAAM,IAAIpkB,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAAC3kB,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE;UAClFxuI,MAAM,CAACuiK,UAAU,CAACC,WAAW,GAAG/9I,MAAM;UACtCzkB,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,GAAGxe,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY;UAC1D/pH,MAAM,GAAGpkB,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAAC3kB,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9E;QAEAxe,MAAM,CAACogK,QAAQ,GAAG,IAAI;QACtBpgK,MAAM,CAACytK,mBAAmB,GAAGvvJ,WAAW,CAACq8H,mBAAmB,CAAC91H,MAAM,CAAC;QACpEzkB,MAAM,CAAC0tK,wBAAwB,CAAC,CAAC;QACjC;MACJ;IACJ;IAEA,IAAIC,SAAS,GAAG,KAAK;IACrB,IAAI3tK,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,IAAI,IAAI,IAAIpD,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC4C,mBAAmB,IAAI,IAAI,EAAE;MACnGmqK,SAAS,GAAG,IAAI;IACpB;IACA,IAAI,CAAC5d,aAAa,EAAE;MAChB/vJ,MAAM,CAAC+vJ,aAAa,GAAG1vJ,aAAa,CAACy1E,SAAS,CAACrxD,MAAM,CAAC;MAEtD,IAAIA,MAAM,KAAKzkB,MAAM,CAAC+vJ,aAAa,EAAE;QACjC,IAAI,EAAE/vJ,MAAM,CAAC4P,WAAW,CAAC05J,WAAW,KAAK,IAAI,IAAItpK,MAAM,CAAC+vJ,aAAa,IAAI,CAAC,CAAC,EAAE;UACzEyd,kBAAkB,CAAC,CAAC;UACpB;QACJ;MACJ;IACJ;IAEAxtK,MAAM,CAAC4P,WAAW,CAAC05J,WAAW,GAAG,KAAK;IACtCxlK,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAACogK,QAAQ,GAAG,KAAK;IAEvB,IAAI70J,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IAEtB,IAAIzL,MAAM,CAAC+vJ,aAAa,GAAG,CAAC,EAAE;MAC1BxkJ,QAAQ,CAACG,OAAO,GAAGH,QAAQ,CAACG,OAAO,CAAC1H,IAAI,CAAC,YAAY;QACjD,OAAO6T,YAAY,CAACsY,cAAc,CAAC,CAAC;MACxC,CAAC,CAAC;IACN;IAEA5kB,QAAQ,CAACG,OAAO,GAAGH,QAAQ,CAACG,OAAO,CAAC1H,IAAI,CAAC,YAAY;MAC7CF,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,OAAOqnK,sBAAsB,CAAC1rK,MAAM,CAACwsC,8BAA8B,EAAE/nB,MAAM,EAAE,MAAM,EAAEkpJ,SAAS,EAAE,MAAM,CAAC;IAC3G,CAAC,CAAC,SACI,CAAC,UAAUxpK,GAAG,EAAE;MAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;IAEN,OAAOoH,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED1L,MAAM,CAAC4tK,YAAY,GAAG,UAAUltI,OAAO,EAAE;IACrC,IAAMjc,MAAM,GAAGpkB,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAAC3kB,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,CAAC,EAAE,CAAC,CAAC;IAEhF,IAAI,CAACxe,MAAM,CAACqgK,cAAc,EAAE;MACxB;MACA,IAAI,CAAC,EAAErgK,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,IAAIp6E,MAAM,CAACo6E,QAAQ,KAAK,QAAQ,CAAC,IACtEp6E,MAAM,CAACq6E,aAAa,KAAK,UAAU,KAAK51D,MAAM,GAAG,CAAC,EAAE;QAExD,IAAIA,MAAM,IAAIpkB,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAAC3kB,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE;UAClFxuI,MAAM,CAACuiK,UAAU,CAACC,WAAW,GAAG/9I,MAAM;UACtCzkB,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,GAAGxe,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY;UACjDnuI,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAAC3kB,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,CAAC,EAAE,CAAC,CAAC,EAAAqvJ,cAAA;QAC9E;QAEA7tK,MAAM,CAACqgK,cAAc,GAAG,IAAI;QAE5B;MACJ;IACJ;EACJ,CAAC;EAEDrgK,MAAM,CAACuwJ,aAAa,GAAG,YAAY;IAC/B,IAAI;MAEA,IAAGvwJ,MAAM,CAAC09J,mBAAmB,KAAK,CAAC,EACnC;QACI,IAAIj5I,MAAM,GAAGpkB,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAAC3kB,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,CAAC,EAAE,CAAC,CAAC;QAE9E,IAAI,CAACxe,MAAM,CAACqgK,cAAc,EAAE;UACxB;UACA,IAAI,CAAC,EAAErgK,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,IAAIp6E,MAAM,CAACo6E,QAAQ,KAAK,QAAQ,CAAC,IACtEp6E,MAAM,CAACq6E,aAAa,KAAK,UAAU,KAAK51D,MAAM,GAAG,CAAC,EAAE;YAExD,IAAIA,MAAM,IAAIpkB,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAAC3kB,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE;cAClFxuI,MAAM,CAACuiK,UAAU,CAACC,WAAW,GAAG/9I,MAAM;cACtCzkB,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,GAAGxe,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY;cAC1D/pH,MAAM,GAAGpkB,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAAC3kB,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9E;YAEAxe,MAAM,CAACqgK,cAAc,GAAG,IAAI;YAE5B;UACJ;QACJ;MACJ;MAEArgK,MAAM,CAACqgK,cAAc,GAAG,KAAK;MAE7B,IAAIngK,aAAa,CAACirC,gBAAgB,IAAI,MAAM,EAAE;QAE1C,IAAInrC,MAAM,CAAC6jK,eAAe,IAAI7jK,MAAM,CAAC6jK,eAAe,CAACnjI,OAAO,EAAE;UAC1D1gC,MAAM,CAACggK,0BAA0B,CAAChgK,MAAM,CAAC6jK,eAAe,CAACnjI,OAAO,CAACO,SAAS,CAAC;QAC/E,CAAC,MAAM;UACHn9B,CAAC,CAACC,OAAO,CAAC,CAAC;UACXma,WAAW,CAACm8H,YAAY,CAAC,CAAC,CACrBr2I,IAAI,CAAC,UAAUqa,UAAU,EAAE;YACxB;YACAva,CAAC,CAACO,SAAS,CAAC,CAAC;YAEb,IAAIypK,KAAK,GAAG9tK,MAAM,CAAC+tK,0BAA0B,CAAC,aAAa,EAAE1vJ,UAAU,CAAC;YAExE,IAAIyvJ,KAAK,IAAIA,KAAK,CAAC1nK,MAAM,GAAG,CAAC,EAAE;cAC3BnG,UAAU,CAAC+K,UAAU,CAAC,mBAAmB,EAAE;gBACvCqT,UAAU,EAAEyvJ,KAAK;gBACjBtvJ,OAAO,EAAExe,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO;gBAClC6uE,GAAG,EAAEntF,aAAa,CAACirC,gBAAgB;gBACnCzG,YAAY,EAAE1kC,MAAM,CAACysI;cACzB,CAAC,CAAC;YACN;YACA;YACA;YACA;YAAA,KACK;cACDzsI,MAAM,CAACggK,0BAA0B,CAAC,CAAC;YACvC;UACJ,CAAC,CAAC,SACI,CAAC,UAAU77J,GAAG,EAAE;YAClBs+J,aAAa,CAAC,CAAC;YAEf3+J,CAAC,CAACO,SAAS,CAAC,CAAC;YACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;UAC/B,CAAC,CAAC;QACV;MACJ,CAAC,MAAM;QACHnE,MAAM,CAACggK,0BAA0B,CAAC,CAAC;MACvC;IACJ,CAAC,CAAC,OAAOlwG,EAAE,EAAE;MACT2yG,aAAa,CAAC,CAAC;MAEf3+J,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAAC0rD,EAAE,CAACj1C,OAAO,CAAC;IACtC;EACJ,CAAC;EAED7a,MAAM,CAACggK,0BAA0B,GAAG,UAAU5hJ,SAAS,EAAE;IACrD,IAAIuvJ,SAAS,GAAG,KAAK;IACrB,IAAI3tK,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,IAAI,IAAI,IAAIpD,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC4C,mBAAmB,IAAI,IAAI,EAAE;MACnGmqK,SAAS,GAAG,IAAI;IACpB;IACAjC,sBAAsB,CAAC1rK,MAAM,CAACmwC,4BAA4B,EAAEnwC,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,EAAE,aAAa,EAAEmvJ,SAAS,EAAE,aAAa,EAAE,IAAI,EAAEvvJ,SAAS,CAAC;EACpJ,CAAC;EAEDpe,MAAM,CAACkwJ,SAAS,GAAG,UAAU3xI,kBAAkB,EAAEH,SAAS,EAAE;IACxD,IAAIuD,GAAG,GAAG3hB,MAAM,CAACqjJ,sBAAsB,CAAC9kI,kBAAkB,CAAC;IAC3D,IAAIoD,GAAG,EAAE;MAEL,IAAI3hB,MAAM,CAAC4P,WAAW,CAAC+sB,SAAS,KAAK,WAAW,IAC5C38B,MAAM,CAAC4P,WAAW,CAAC+sB,SAAS,KAAK,OAAO,IACxCz8B,aAAa,CAACirC,gBAAgB,IAAI,MAAM,EAAE;QAC1CrnC,CAAC,CAACC,OAAO,CAAC,CAAC;QACXma,WAAW,CAACm8H,YAAY,CAAC,CAAC,CACrBr2I,IAAI,CAAC,UAAUqa,UAAU,EAAE;UACxBva,CAAC,CAACO,SAAS,CAAC,CAAC;UACb,IAAIypK,KAAK,GAAG9tK,MAAM,CAAC+tK,0BAA0B,CAACpsJ,GAAG,CAACmuB,wBAAwB,EAAEzxB,UAAU,CAAC;UAEvF,IAAIyvJ,KAAK,IAAIA,KAAK,CAAC1nK,MAAM,GAAG,CAAC,EAAE;YAC3BnG,UAAU,CAAC+K,UAAU,CAAC,mBAAmB,EAAE;cACvCuT,kBAAkB,EAAEA,kBAAkB;cACtCD,QAAQ,EAAE,IAAI;cACdD,UAAU,EAAEyvJ,KAAK;cACjBtvJ,OAAO,EAAExe,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO;cAClC6uE,GAAG,EAAEntF,aAAa,CAACirC,gBAAgB;cACnCzG,YAAY,EAAE1kC,MAAM,CAACysI;YACzB,CAAC,CAAC;UACN,CAAC,MACGzsI,MAAM,CAAC+/J,sBAAsB,CAACxhJ,kBAAkB,CAAC;QACzD,CAAC,CAAC,SACI,CAAC,UAAUpa,GAAG,EAAE;UAClBs+J,aAAa,CAAC,CAAC;UAEf3+J,CAAC,CAACO,SAAS,CAAC,CAAC;UACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;QAC/B,CAAC,CAAC;MACV,CAAC,MACGnE,MAAM,CAAC+/J,sBAAsB,CAACxhJ,kBAAkB,CAAC;IACzD;EACJ,CAAC;EAGDve,MAAM,CAAC+/J,sBAAsB,GAAG,UAAUxhJ,kBAAkB,EAAEH,SAAS,EAAE;IACrE,IAAIuD,GAAG,GAAG3hB,MAAM,CAACqjJ,sBAAsB,CAAC9kI,kBAAkB,CAAC;IAC3D,IAAIoD,GAAG,IAAI,IAAI,EAAE;MAEb,IAAIgsJ,SAAS,GAAG,KAAK;MACrB,IAAI3tK,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,IAAI,IAAI,IAAIpD,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC4C,mBAAmB,IAAI,IAAI,EAAE;QACnGmqK,SAAS,GAAG,IAAI;MACpB;MAEAjC,sBAAsB,CAAC/pJ,GAAG,CAACpD,kBAAkB,EAAEve,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,EAAEmD,GAAG,CAACyzF,iBAAiB,EAAEu4D,SAAS,EAAEhsJ,GAAG,CAACmuB,wBAAwB,EAAE,IAAI,EAAE1xB,SAAS,CAAC;IAC9J;EACJ,CAAC;EAEDpe,MAAM,CAACoqK,YAAY,GAAG,UAAUrnI,GAAG,EAAE;IACjC,IAAIphB,GAAG,GAAG3hB,MAAM,CAACqpK,iCAAiC,CAACtmI,GAAG,CAACugH,SAAS,CAAC;IACjE,IAAI3hI,GAAG,EAAE;MACL,IAAIshB,GAAG,GAAGF,GAAG,CAACte,MAAM;MACpB,IAAI2rI,EAAE,GAAG,IAAI;MACb,IAAI,CAAC,CAACrtH,GAAG,CAAC9B,SAAS,EAAE;QACjB,IAAI8B,GAAG,CAAC9B,SAAS,CAAC07G,cAAc,GAAG,CAAC,IAAI55G,GAAG,CAAC9B,SAAS,CAACy7G,eAAe,KAAK,IAAI,EAAE;UAC5Ez5G,GAAG,IAAIF,GAAG,CAAC9B,SAAS,CAAC07G,cAAc;QACvC;QAEAyT,EAAE,GAAGrtH,GAAG,CAAC9B,SAAS;QAClBovH,oBAAoB,CAACD,EAAE,EAAEntH,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACrDmtH,EAAE,CAACE,gBAAgB,GAAG,IAAI;MAC9B;MAEAL,kBAAkB,CAACtuI,GAAG,CAACpD,kBAAkB,EAAE0kB,GAAG,EAAEthB,GAAG,CAACyzF,iBAAiB,EAAE,IAAI,EAAEzzF,GAAG,CAACmuB,wBAAwB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAEsgH,EAAE,CAAC;IAC1I;EACJ,CAAC;EAEDpwJ,MAAM,CAACguK,WAAW,GAAG,UAAUC,UAAU,EAAE5H,YAAY,EAAE5hJ,MAAM,EAAE;IAC7D,IAAIA,MAAM,GAAG,CAAC,EAAE;MACZ,MAAM,IAAIyiD,KAAK,CAACzmE,cAAc,CAACe,SAAS,CAAC,oEAAoE,CAAC,CAAC;IACnH;IACA,IAAImsK,SAAS,GAAG,KAAK;IACrB,IAAI3tK,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,IAAI,IAAI,IAAIpD,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC4C,mBAAmB,IAAI,IAAI,EAAE;MACnGmqK,SAAS,GAAG,IAAI;IACpB;IACAjC,sBAAsB,CAACuC,UAAU,EAAExpJ,MAAM,EAAEhkB,cAAc,CAACe,SAAS,CAAC,YAAY,CAAC,GAAG6kK,YAAY,EAAEsH,SAAS,EAAE,WAAW,EAAEtH,YAAY,CAAC;EAC3I,CAAC;EAEDrmK,MAAM,CAACkuK,UAAU,GAAG,YAAY;IAC5B,IAAIC,KAAK,GACL,CAAE,CAACnuK,MAAM,CAAC4P,WAAW,CAAC+sB,SAAS,KACtB,CAAC38B,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,IAAI94B,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAAC1yB,MAAM,KAAK,CAAC,CAAC,IAAKlG,aAAa,CAACkuK,UAAU,IAC3GpuK,MAAM,CAAC4P,WAAW,CAAC+sB,SAAS,KAAK,OAAO,KAC5C38B,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,KAAK,IAAI,IACvCpD,MAAM,CAACowC,uBAAuB,KAAK,IAAI,IACvCpwC,MAAM,CAACo6E,QAAQ,KAAK,QAAQ,IAAIp6E,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,IAAI,CAAC,IACnE,CAACxuI,MAAM,CAACquK,gBAAgB,CAAC,CAAC;IAG9B,OAAOF,KAAK;EAChB,CAAC;EAEDnuK,MAAM,CAACsuK,kBAAkB,GAAG,UAAUzqH,MAAM,EAAE,CAAC,CAAC;EAEhD7jD,MAAM,CAACuuK,oBAAoB,GAAG,YAAY;IACtCvuK,MAAM,CAACwuK,cAAc,GAAG/tK,cAAc,CAACe,SAAS,CAAC,gCAAgC,CAAC;IAClFxB,MAAM,CAACyuK,aAAa,GAAGhuK,cAAc,CAACe,SAAS,CAAC,KAAK,CAAC;IACtDxB,MAAM,CAAC0uK,YAAY,GAAGjuK,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC;IACpDxB,MAAM,CAACsuK,kBAAkB,GAAGtuK,MAAM,CAAC2uK,qBAAqB;IAExD,IAAI9gJ,cAAc,GAAG/pB,CAAC,CAAC,kBAAkB,CAAC;IAC1CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAED7tB,MAAM,CAAC2uK,qBAAqB,GAAG,UAAU9qH,MAAM,EAAE;IAC7C,IAAIh2B,cAAc,GAAG/pB,CAAC,CAAC,kBAAkB,CAAC;IAC1C,IAAI+/C,MAAM,EAAE;MACR//C,CAAC,CAACC,OAAO,CAAC,CAAC;MACX1D,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,EAAE,YAAY;QAClD;QACA7tB,MAAM,CAACoiK,kBAAkB,CAAC,CAAC;QAC3B5hK,QAAQ,CAAC,YAAY;UACjBsD,CAAC,CAACO,SAAS,CAAC,CAAC;QACjB,CAAC,CAAC;MACN,CAAC,CAAC;IACN,CAAC,MAAM;MACHhE,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;IAC7C;EACJ,CAAC;EAED7tB,MAAM,CAAC4uK,uBAAuB,GAAG,UAAU/qH,MAAM,EAAE;IAC/C,IAAIh2B,cAAc,GAAG/pB,CAAC,CAAC,kBAAkB,CAAC;IAC1C,IAAI,CAAC+/C,MAAM,EAAE;MACTxjD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,EAAE,YAAY;QAClD7tB,MAAM,CAAC6uK,cAAc,CAAC,CAAC;MAC3B,CAAC,CAAC;IAEN,CAAC,MAAM;MACHxuK,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;IAC7C;EACJ,CAAC;EAED7tB,MAAM,CAAC8uK,2BAA2B,GAAG,UAAUjrH,MAAM,EAAE;IACnD,IAAIh2B,cAAc,GAAG/pB,CAAC,CAAC,kBAAkB,CAAC;IAC1C,IAAI,CAAC+/C,MAAM,EAAE;MACTxjD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,EAAE,YAAY;QAClD7tB,MAAM,CAAC+uK,YAAY,CAAC,CAAC;MACzB,CAAC,CAAC;IACN,CAAC,MAAM;MACH1uK,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;IAC7C;EACJ,CAAC;EAED7tB,MAAM,CAACgvK,YAAY,GAAG,YAAY;IAC9BhvK,MAAM,CAACwuK,cAAc,GAAG/tK,cAAc,CAACe,SAAS,CAAC,sDAAsD,GACzD,4DAA4D,CAAC;IAC3GxB,MAAM,CAACyuK,aAAa,GAAGhuK,cAAc,CAACe,SAAS,CAAC,2BAA2B,CAAC;IAC5ExB,MAAM,CAAC0uK,YAAY,GAAGjuK,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC;IACpDxB,MAAM,CAACsuK,kBAAkB,GAAGtuK,MAAM,CAAC4uK,uBAAuB;IAE1D,IAAI/gJ,cAAc,GAAG/pB,CAAC,CAAC,kBAAkB,CAAC;IAC1CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAED7tB,MAAM,CAACivK,gBAAgB,GAAG,YAAY;IAClCjvK,MAAM,CAACwuK,cAAc,GAAG/tK,cAAc,CAACe,SAAS,CAAC,sDAAsD,GACzD,kEAAkE,CAAC;IACjHxB,MAAM,CAACyuK,aAAa,GAAGhuK,cAAc,CAACe,SAAS,CAAC,iCAAiC,CAAC;IAClFxB,MAAM,CAAC0uK,YAAY,GAAGjuK,cAAc,CAACe,SAAS,CAAC,IAAI,CAAC;IACpDxB,MAAM,CAACsuK,kBAAkB,GAAGtuK,MAAM,CAAC8uK,2BAA2B;IAE9D,IAAIjhJ,cAAc,GAAG/pB,CAAC,CAAC,kBAAkB,CAAC;IAC1CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAED7tB,MAAM,CAACkvK,QAAQ,GAAG,UAAUlhH,EAAE,EAAE;IAC5BlqD,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAAC4P,WAAW,CAACmtE,WAAW,GAAG,IAAI;IAErC,IAAI,CAAC,CAAC/uB,EAAE,EAAE;MACNhuD,MAAM,CAAC4P,WAAW,CAACi6H,SAAS,GAAGxpI,aAAa,CAAC2xD,6BAA6B,CAAChE,EAAE,CAAC;IAClF;IAEA,IAAI71B,iBAAiB,GAAGja,WAAW,CAACka,wBAAwB,CAACp4B,MAAM,CAAC4P,WAAW,EAAE,OAAO,CAAC;IAEzF,IAAI5P,MAAM,CAAC4P,WAAW,CAAC+sB,SAAS,KAAK,OAAO,EAAE;MAC1C;MACA38B,MAAM,CAACoiK,kBAAkB,CAAC,CAAC;MAE3BlkJ,WAAW,CAACmpH,SAAS,CAAClvG,iBAAiB,EAAEn4B,MAAM,CAAC4P,WAAW,CAAC,CAAC5L,IAAI,CAAC,UAAUC,IAAI,EAAE;QAE9EH,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,EAAE,UAAUF,GAAG,EAAE;QACd;QACAL,CAAC,CAACO,SAAS,CAAC,CAAC;QACb,IAAInE,aAAa,CAACmB,QAAQ,KAAK,KAAK,IAAIrB,MAAM,CAAC4P,WAAW,CAACkyB,kBAAkB,KAAK,IAAI,EAAE;UACpFsrI,yBAAyB,CAAC,CAAC;QAC/B,CAAC,MAAM;UACH;UACAjtK,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,YAAY;YACpCnE,MAAM,CAACmF,UAAU,CAAC,CAAC;UACvB,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;IACN,CAAC,MAAM;MACH+Y,WAAW,CAACmpH,SAAS,CAAClvG,iBAAiB,EAAEn4B,MAAM,CAAC4P,WAAW,CAAC,CAAC5L,IAAI,CAAC,UAAUC,IAAI,EAAE;QAE9EH,CAAC,CAACO,SAAS,CAAC,CAAC;QACbrE,MAAM,CAACuuK,oBAAoB,CAAC,CAAC;MAEjC,CAAC,EAAE,UAAUpqK,GAAG,EAAE;QACd;QACAL,CAAC,CAACO,SAAS,CAAC,CAAC;QACb,IAAInE,aAAa,CAACmB,QAAQ,KAAK,KAAK,IAAIrB,MAAM,CAAC4P,WAAW,CAACkyB,kBAAkB,KAAK,IAAI,EAAE;UACpFsrI,yBAAyB,CAAC,CAAC;QAC/B,CAAC,MAAM;UACH;UACAjtK,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,YAAY;YACpCnE,MAAM,CAACmF,UAAU,CAAC,CAAC;UACvB,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;IAEN;EAEJ,CAAC;EAEDnF,MAAM,CAACmvK,cAAc,GAAG,YAAY;IAChC,IAAIhB,KAAK,GACLjuK,aAAa,CAACkvK,gBAAgB,KAAK,KAAK,KACtC,CAACpvK,MAAM,CAAC4P,WAAW,CAAC+sB,SAAS,KACtB,CAAC38B,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,IAAI94B,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAAC1yB,MAAM,IAAI,CAAC,CAAC,IAC7EpG,MAAM,CAAC4P,WAAW,CAAC+sB,SAAS,KAAK,WAAW,CAAC,IACjD38B,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,KAAK,IAAI,IACvCpD,MAAM,CAACo6E,QAAQ,KAAK,QAAQ,IAC5Bp6E,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,IAAI,CAAC,IACnC,CAACxuI,MAAM,CAACquK,gBAAgB,CAAC,CAAC;IAE9B,OAAOF,KAAK;EAChB,CAAC;EAEDnuK,MAAM,CAACqvK,gBAAgB,GAAG,YAAY;IAClC,OAAOnvK,aAAa,CAACmB,QAAQ,KAAK,KAAK;EAC3C,CAAC;EAEDrB,MAAM,CAACsvK,qBAAqB,GAAG,YAAY;IACvC,IAAIC,OAAO,GAAG,CAACvvK,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,IACzC,CAACpD,MAAM,CAACswC,yBAAyB,IACjCtwC,MAAM,CAAC+gK,cAAc,KAAK,IAAI,IAC9B/gK,MAAM,CAAC4P,WAAW,CAAC4/J,8BAA8B,IAAI,CAAC,IACtDxvK,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC+xF,iBAAiB,KAAK,IAAI,IACtD3yF,MAAM,CAACo6E,QAAQ,KAAK,QAAQ,IAC5Bp6E,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,GAAG,CAAC;IACtC,OAAO+gC,OAAO;EAClB,CAAC;EAEDvvK,MAAM,CAACyvK,0BAA0B,GAAG,YAAY;IAC5C,IAAIF,OAAO,GAAG,CAACvvK,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,IACzC,CAACpD,MAAM,CAACkwC,8BAA8B,IACtClwC,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC+xF,iBAAiB,KAAK,IAAI,IACrD3yF,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC8C,YAAY,KAAK,CAAC,IAAI1D,MAAM,CAACo6E,QAAQ,KAAK,QAAS,IAChFp6E,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,GAAG,CAAC;IAEtC,OAAO+gC,OAAO;EAClB,CAAC;EAEDvvK,MAAM,CAAC+uK,YAAY,GAAG,YAAY;IAC9BjrK,CAAC,CAACC,OAAO,CAAC,CAAC;IACX/D,MAAM,CAAC4P,WAAW,CAACmtE,WAAW,GAAG,IAAI;IACrC/8E,MAAM,CAAC0K,KAAK,CAACgqJ,YAAY,GAAG,IAAI;IAEhC,IAAI,CAAC,CAAC10J,MAAM,CAAC4P,WAAW,CAAC2hD,eAAe,IACpCvxD,MAAM,CAAC4P,WAAW,CAAC2hD,eAAe,CAAC1uD,KAAK,EAAE;MAC1C7C,MAAM,CAAC0K,KAAK,CAACgqJ,YAAY,GAAG10J,MAAM,CAAC4P,WAAW,CAAC2hD,eAAe,CAAC1uD,KAAK;IACxE;IAEA,IAAIs1B,iBAAiB,GAAGja,WAAW,CAACka,wBAAwB,CAACp4B,MAAM,CAAC4P,WAAW,EAAE,WAAW,CAAC;IAE7F,IAAI5P,MAAM,CAAC4P,WAAW,CAAC+sB,SAAS,KAAK,WAAW,EAAE;MAG9Cze,WAAW,CAACopH,aAAa,CAACnvG,iBAAiB,EAAEn4B,MAAM,CAAC4P,WAAW,CAAC,CAAC5L,IAAI,CAAC,UAAUC,IAAI,EAAE;QAClF5D,aAAa,CAAC65E,gBAAgB,CAAC,IAAI,CAAC;QACpC;QACAl6E,MAAM,CAACoiK,kBAAkB,CAAC,CAAC;QAC3Bt+J,CAAC,CAACO,SAAS,CAAC,CAAC;MACjB,CAAC,EAAE,UAAUF,GAAG,EAAE;QACd;QACAL,CAAC,CAACO,SAAS,CAAC,CAAC;QACb,IAAInE,aAAa,CAACmB,QAAQ,KAAK,KAAK,IAAIrB,MAAM,CAAC4P,WAAW,CAACkyB,kBAAkB,KAAK,IAAI,EAAE;UACpFsrI,yBAAyB,CAAC,CAAC;QAC/B,CAAC,MAAM;UACH;UACAjtK,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,YAAY;YACpCnE,MAAM,CAACmF,UAAU,CAAC,CAAC;UACvB,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;IACN,CAAC,MAAM;MACH+Y,WAAW,CAACopH,aAAa,CAACnvG,iBAAiB,EAAEn4B,MAAM,CAAC4P,WAAW,CAAC,CAAC5L,IAAI,CAAC,UAAUC,IAAI,EAAE;QAClF5D,aAAa,CAAC65E,gBAAgB,CAAC,IAAI,CAAC;QACpCp2E,CAAC,CAACO,SAAS,CAAC,CAAC;QAEbrE,MAAM,CAACuuK,oBAAoB,CAAC,CAAC;MACjC,CAAC,EAAE,UAAUpqK,GAAG,EAAE;QACd;QACAL,CAAC,CAACO,SAAS,CAAC,CAAC;QACb,IAAInE,aAAa,CAACmB,QAAQ,KAAK,KAAK,IAAIrB,MAAM,CAAC4P,WAAW,CAACkyB,kBAAkB,KAAK,IAAI,EAAE;UACpFsrI,yBAAyB,CAAC,CAAC;QAC/B,CAAC,MAAM;UACH;UACAjtK,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,YAAY;YACpCnE,MAAM,CAACmF,UAAU,CAAC,CAAC;UACvB,CAAC,CAAC;QACN;MACJ,CAAC,CAAC;IACN;EACJ,CAAC;EAEDnF,MAAM,CAACwnK,UAAU,GAAG,UAAUkI,UAAU,EAAE;IAEtC1vK,MAAM,CAACyhK,aAAa,GAAG,IAAI;IAC3BzhK,MAAM,CAAC6rK,oBAAoB,GAAG,EAAE;IAEhC,IAAIlnJ,UAAU,CAAC3kB,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,CAAC,GAAGxe,MAAM,CAACw7I,iBAAiB,CAAC2C,mBAAmB,EAAE;MACtFn+I,MAAM,CAACyhK,aAAa,GAAG,KAAK;MAC5BzhK,MAAM,CAAC6rK,oBAAoB,GAAGprK,cAAc,CAACe,SAAS,CAAC,mDAAmD,CAAC;IAC/G;IAEA,IAAIxB,MAAM,CAACyhK,aAAa,KAAK,KAAK,EAAE;MAChC;IACJ;IAEA,IAAIzhK,MAAM,CAAC4P,WAAW,CAAC4/J,8BAA8B,GAAG7qJ,UAAU,CAAC3kB,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,CAAC,EAAE;MAC3F,IAAIkxJ,UAAU,KAAK,IAAI,EAAE;QACrBhE,sBAAsB,CAAC1rK,MAAM,CAACswC,yBAAyB,EAAEtwC,MAAM,CAAC4P,WAAW,CAAC4/J,8BAA8B,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC;MAC5I,CAAC,MAAM;QACHt9D,oBAAoB,CAAC,CAAC;MAC1B;IACJ,CAAC,MAAM;MACH;MACA;MACAw5D,sBAAsB,CAAC1rK,MAAM,CAACswC,yBAAyB,EAAEtwC,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC;IACpH;EAEJ,CAAC;EAEDxe,MAAM,CAAC4wJ,eAAe,GAAG,UAAU8e,UAAU,EAAE;IAC3C1vK,MAAM,CAACyhK,aAAa,GAAG,IAAI;IAC3BzhK,MAAM,CAAC6rK,oBAAoB,GAAG,EAAE;IAEhC,IAAIlnJ,UAAU,CAAC3kB,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,CAAC,GAAGxe,MAAM,CAACw7I,iBAAiB,CAAC0C,iBAAiB,EAAE;MACpFl+I,MAAM,CAACyhK,aAAa,GAAG,KAAK;MAC5BzhK,MAAM,CAAC6rK,oBAAoB,GAAGprK,cAAc,CAACe,SAAS,CAAC,mDAAmD,CAAC;IAC/G;IAEA,IAAIxB,MAAM,CAACyhK,aAAa,KAAK,KAAK,EAAE;MAChC;IACJ;IAGA,IAAIzhK,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC8C,YAAY,GAAGihB,UAAU,CAAC3kB,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,CAAC,IAAImG,UAAU,CAAC3kB,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,CAAC,GAAG,CAAC,EAAE;MAC/H,IAAIkxJ,UAAU,KAAK,IAAI,EAAE;QACrBhE,sBAAsB,CAAC1rK,MAAM,CAACkwC,8BAA8B,EAAElwC,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC8C,YAAY,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,CAAC;QAC/I1D,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC8C,YAAY,GAAG,CAAC;MAChD,CAAC,MAAM;QACHisK,wBAAwB,CAAC,CAAC;MAC9B;IACJ,CAAC,MAAM;MACH3vK,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAAC8C,YAAY,IAAIihB,UAAU,CAAC3kB,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,CAAC;MACjFktJ,sBAAsB,CAAC1rK,MAAM,CAACkwC,8BAA8B,EAAElwC,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,CAAC;IACpI;EACJ,CAAC;EAED,SAAS0zF,oBAAoBA,CAAA,EAAG;IAE5BlyG,MAAM,CAAC8sD,UAAU,GAAG,uBAAuB;IAE3C,IAAI14C,KAAK,GAAG,QAAQ,GAAG3T,cAAc,CAACe,SAAS,CAAC,qBAAqB,CAAC,CAACme,OAAO,CAAC,IAAI,EAAE,0DAA0D,CAAC,GAAG,SAAS;IAC5JvL,KAAK,GAAGs0C,QAAQ,CAACt0C,KAAK,CAAC,CAACpU,MAAM,CAAC;IAE/BK,aAAa,CAACq6B,gBAAgB,CAC1BtmB,KAAK,EACL3T,cAAc,CAACe,SAAS,CAAC,0LAA0L,CAAC,EACpNf,cAAc,CAACe,SAAS,CAAC,UAAU,CAAC,EACpCf,cAAc,CAACe,SAAS,CAAC,OAAO,CAAC,CAAC;EAC1C;EAEA,SAASmuK,wBAAwBA,CAAA,EAAG;IAEhC3vK,MAAM,CAAC8sD,UAAU,GAAG,2BAA2B;IAE/C,IAAI14C,KAAK,GAAG,QAAQ,GAAG3T,cAAc,CAACe,SAAS,CAAC,2BAA2B,CAAC,CAACme,OAAO,CAAC,IAAI,EAAE,iDAAiD,CAAC,GAAG,SAAS;IACzJvL,KAAK,GAAGs0C,QAAQ,CAACt0C,KAAK,CAAC,CAACpU,MAAM,CAAC;IAE/BK,aAAa,CAACq6B,gBAAgB,CAC1BtmB,KAAK,EACL3T,cAAc,CAACe,SAAS,CAAC,gMAAgM,CAAC,EAC1Nf,cAAc,CAACe,SAAS,CAAC,UAAU,CAAC,EACpCf,cAAc,CAACe,SAAS,CAAC,OAAO,CAAC,CAAC;EAC1C;EAEAxB,MAAM,CAAC4vK,UAAU,GAAG,YAAY;IAC5BvwK,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;IACjDz3B,MAAM,CAAC2iH,MAAM,CAAC,CAAC;IACf3iH,MAAM,CAAC06J,SAAS,CAAC,CAAC;IAClB16J,MAAM,CAACa,UAAU,GAAG,IAAI;IACxBb,MAAM,CAACud,UAAU,GAAG,gBAAgB;IACpCvd,MAAM,CAACs6B,MAAM,CAAC,CAAC,CAAC,CAAC;EACrB,CAAC;EAEDt6B,MAAM,CAACmF,UAAU,GAAG,YAAY;IAC5B9E,aAAa,CAAC8E,UAAU,CAAC,CAAC;EAC9B,CAAC;;EAED;AAChB;AACA;;EAEgBnF,MAAM,CAAC4L,WAAW,GAAG,YAAY;IAC7B5L,MAAM,CAAC6vK,gBAAgB,CAAC,CAAC;IACzB,IAAI7vK,MAAM,CAACupJ,iBAAiB,KAAK,IAAI,EAAE;MACnC;MACA,IAAI3oJ,QAAQ,GAAGZ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ;MAE1CZ,MAAM,CAACc,cAAc,GAAG,EAAE;MAC1BgD,CAAC,CAAC,qBAAqB,CAAC,CAACkF,GAAG,CAAC,EAAE,CAAC;MAChC/I,UAAU,CAAC+K,UAAU,CAAC,kBAAkB,EAAE0X,MAAM,CAACitG,MAAM,CAAC;QAAE3uH,eAAe,EAAE;MAAK,CAAC,EAAEJ,QAAQ,CAAC,CAAC;IACjG;EACJ,CAAC;EAEDZ,MAAM,CAAC8vK,kBAAkB,GAAG,YAAY;IACpC9vK,MAAM,CAAC6vK,gBAAgB,CAAC,CAAC;IACzB,IAAI7vK,MAAM,CAACupJ,iBAAiB,KAAK,IAAI,EAAE;MACnC,IAAM3oJ,QAAQ,GAAGZ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ;MAE5C,IAAIsW,mBAAmB,GAAG,IAAI;MAC9B,IAAIlX,MAAM,CAAC4P,WAAW,CAACu/H,4BAA4B,EAAE;QACjDj4H,mBAAmB,GAAG;UAClBjU,KAAK,EAAEjD,MAAM,CAAC4P,WAAW,CAACu/H,4BAA4B;UACtDniI,KAAK,EAAEhN,MAAM,CAAC4P,WAAW,CAAC0/H,4BAA4B;UACtD7iI,IAAI,EAAEzM,MAAM,CAAC4P,WAAW,CAACw/H,oBAAoB;UAC7CziI,KAAK,EAAE3M,MAAM,CAAC4P,WAAW,CAAC4/H,wBAAwB;UAClD3iI,QAAQ,EAAE7M,MAAM,CAAC4P,WAAW,CAAC2/H,mBAAmB;UAChDtiI,OAAO,EAAEjN,MAAM,CAAC4P,WAAW,CAACy/H;QAChC,CAAC;MACL;MACArvI,MAAM,CAACc,cAAc,GAAG,EAAE;MAC1BgD,CAAC,CAAC,yBAAyB,CAAC,CAACkF,GAAG,CAAC,EAAE,CAAC;MACpC/I,UAAU,CAAC+K,UAAU,CAAC,yBAAyB,EAAC;QAAC0L,mBAAmB,EAAE9V,QAAQ,CAACoC,SAAS;QAAEkU,mBAAmB,EAAnBA;MAAmB,CAAC,CAAC;IACnH;EACJ,CAAC;EAEDlX,MAAM,CAACqW,sBAAsB,GAAG,YAAY;IACxCrW,MAAM,CAAC6vK,gBAAgB,CAAC,CAAC;IAEzB,IAAI7vK,MAAM,CAACihK,4BAA4B,KAAK,IAAI,EAAE;MAC9C,IAAIx6B,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;MACnE,IAAIwgJ,EAAE,GAAG3pB,SAAS,GAAGzmI,MAAM,CAAC4P,WAAW,CAACohB,mBAAmB,GAAGhxB,MAAM,CAAC4P,WAAW,CAACuF,mBAAmB;MAEpGnV,MAAM,CAACc,cAAc,GAAG,EAAE;MAC1BgD,CAAC,CAAC,gCAAgC,CAAC,CAACkF,GAAG,CAAC,EAAE,CAAC;MAC3C/I,UAAU,CAAC+K,UAAU,CAAC,6BAA6B,EAAEolJ,EAAE,CAAC;IAC5D;EACJ,CAAC;EAEDpwJ,MAAM,CAAC+vK,YAAY,GAAG,KAAK;EAC3B/vK,MAAM,CAACgwK,UAAU,GAAG,IAAI;EACxBhwK,MAAM,CAACiwK,aAAa,GAAG,YAAY;IAC/B;IACA,IAAIrvK,QAAQ,GAAGZ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ;IAE1CZ,MAAM,CAAC8sD,UAAU,GAAG,iBAAiB;IACrCzsD,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,EAAE,CAAC,EACvDf,cAAc,CAACe,SAAS,CAAC,0CAA0C,CAAC,GAAGZ,QAAQ,CAAC8B,IAAI,GAAG,iBAAiB,EACxGjC,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC,EAClCf,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC,CAAC;EAC3C,CAAC;EAEDxB,MAAM,CAACsnK,sBAAsB,GAAG,YAAY;IACxC,IAAI7gC,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE5P,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,GAAG;MAC1BwC,EAAE,EAAE;IACR,CAAC;IAEDpD,MAAM,CAACkwK,yBAAyB,CAAC,CAAC;IAElClwK,MAAM,CAAC4P,WAAW,CAAC2hD,eAAe,GAAG,IAAI;IACzC0tG,eAAe,CAAC,CAAC;IACjBj/J,MAAM,CAACy/J,qBAAqB,CAAC,CAAC;IAC9Bz/J,MAAM,CAAC+vK,YAAY,GAAG,KAAK;IAE3B/vK,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;IACzB,IAAI7sB,MAAM,CAACo6E,QAAQ,KAAK,QAAQ,EAAE;MAC9Bp6E,MAAM,CAACspJ,kBAAkB,GAAG,IAAI;IACpC;IAEA,IAAI,CAAC7iB,SAAS,EAAE;MACZvoH,WAAW,CAACy1H,gBAAgB,CAAC3zI,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAACysI,eAAe,EAAEzsI,MAAM,CAAC;MAChFA,MAAM,CAAC4/J,0BAA0B,CAAC5/J,MAAM,CAAC4P,WAAW,CAAC;IACzD,CAAC,MAAM;MACHkrB,4FAAuB,CAACqG,iBAAiB,CAACnhC,MAAM,CAAC4P,WAAW,EAAEsO,WAAW,CAAC0/H,eAAe,CAAC,CAAC,EAAE59I,MAAM,EAAEg7B,iEAAc,CAAC6kI,KAAK,EAAE,IAAI,CAAC;IACpI;IAEAtxB,aAAa,CAAC,CAAC;IACfluI,aAAa,CAAC65E,gBAAgB,CAACl6E,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC;IAC1DA,MAAM,CAAC8/J,qBAAqB,CAAC,CAAC;IAE9B,OAAOt8E,cAAc,CAACimB,aAAa,CAAC,CAAC;EACzC,CAAC;EAEDzpG,MAAM,CAACkwK,yBAAyB,GAAG,YAAW;IAC1C,OAAOlwK,MAAM,CAAC4P,WAAW,CAACu/H,4BAA4B;IACtD,OAAOnvI,MAAM,CAAC4P,WAAW,CAAC0/H,4BAA4B;IACtD,OAAOtvI,MAAM,CAAC4P,WAAW,CAACw/H,oBAAoB;IAC9C,OAAOpvI,MAAM,CAAC4P,WAAW,CAACy/H,uBAAuB;IACjD,OAAOrvI,MAAM,CAAC4P,WAAW,CAAC4/H,wBAAwB;IAClD,OAAOxvI,MAAM,CAAC4P,WAAW,CAAC2/H,mBAAmB;EACjD,CAAC;EAEDvvI,MAAM,CAACmwK,+BAA+B,GAAG,KAAK;EAC9CnwK,MAAM,CAACowK,6BAA6B,GAAG,IAAI;EAC3CpwK,MAAM,CAACqwK,wBAAwB,GAAG,YAAY;IAC1C,IAAI5pC,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IACnE,IAAIwgJ,EAAE,GAAG3pB,SAAS,GAAGzmI,MAAM,CAAC4P,WAAW,CAACohB,mBAAmB,GAAGhxB,MAAM,CAAC4P,WAAW,CAACuF,mBAAmB;IAEpGnV,MAAM,CAAC8sD,UAAU,GAAG,iBAAiB;IACrCzsD,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,EAAE,CAAC,EACvDf,cAAc,CAACe,SAAS,CAAC,gDAAgD,CAAC,GAAG,OAAO,GAAG4uJ,EAAE,CAAC1tJ,IAAI,GAAG,GAAG,EACpGjC,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC,CAAC;EAC3C,CAAC;EAEDxB,MAAM,CAACunK,sBAAsB,GAAG,YAAY;IACxC,IAAI9gC,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IACnE,IAAI,CAAC62H,SAAS,EACVzmI,MAAM,CAAC4P,WAAW,CAACuF,mBAAmB,GAAG;MACrC/R,EAAE,EAAE;IACR,CAAC,CAAC,KAEFpD,MAAM,CAAC4P,WAAW,CAACohB,mBAAmB,GAAG;MACrC5tB,EAAE,EAAE;IACR,CAAC;IAELpD,MAAM,CAACmwK,+BAA+B,GAAG,KAAK;IAE9CnwK,MAAM,CAAC6sB,gBAAgB,CAAC,CAAC;IACzB0hH,aAAa,CAAC,CAAC;IACfluI,aAAa,CAAC65E,gBAAgB,CAACl6E,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC;EAC9D,CAAC;EAGDA,MAAM,CAACgxH,QAAQ,GAAG,YAAY;IAC1BltH,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,IAAI0iI,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE5P,MAAM,CAAC4P,WAAW,CAACqsB,UAAU,GAAGwqG,SAAS,GAAGzmI,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,GAAG/4B,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,EAAE,IAAI,CAAC;IAChH5P,MAAM,CAAC4P,WAAW,CAACmtE,WAAW,GAAG,IAAI;IACrC,IAAI5kD,iBAAiB,GAAG,CAACsuG,SAAS,GAAGvoH,WAAW,CAACka,wBAAwB,CAACp4B,MAAM,CAAC4P,WAAW,EAAE,QAAQ,CAAC,GACnGq1H,8EAAY,CAACjlI,MAAM,CAAC4P,WAAW,EAAE0tJ,iEAAc,CAACn4B,MAAM,EAAE,KAAK,CAAC;IAElE,OAAOjnH,WAAW,CAAC8yG,QAAQ,CAAC74F,iBAAiB,EAAEn4B,MAAM,CAAC4P,WAAW,CAAC,CAAC5L,IAAI,CAAC,UAAUC,IAAI,EAAE;MACpFjE,MAAM,CAAC06J,SAAS,CAAC,CAAC;MAClB52J,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAIkH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACzBD,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;MACtB,OAAOF,QAAQ,CAACG,OAAO;IAC3B,CAAC,EAAE,UAAUvH,GAAG,EAAE;MACd;MACAL,CAAC,CAACO,SAAS,CAAC,CAAC;MACb;MACAlE,YAAY,CAACiE,SAAS,CAACD,GAAG,EAAE,YAAY;QACpCnE,MAAM,CAACmF,UAAU,CAAC,CAAC;MACvB,CAAC,CAAC;IACN,CAAC,CAAC;EACN,CAAC;EAEDnF,MAAM,CAAC+8F,YAAY,GAAG,YAAY;IAC9B,OAAOllF,YAAY,CAACklF,YAAY,CAAC,CAAC;EACtC,CAAC;EAED/8F,MAAM,CAACkrB,eAAe,GAAGpB,OAAO,CAACqB,cAAc,CAACC,YAAY;EAE5D,SAASmjH,aAAaA,CAAA,EAAG;IACrB,IAAI9H,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE6yJ,aAAa,CAAC,CAAC,CAAC,CAAC;;IAEjB,IAAI1P,OAAO,GAAGjzJ,OAAO,CAAC+F,IAAI,CAAC7F,MAAM,CAAC4P,WAAW,CAAC;IAC9CmjJ,OAAO,CAACt3H,IAAI,GAAGp7B,aAAa,CAAC2xE,2BAA2B,CAAChyE,MAAM,CAAC4P,WAAW,CAACyiJ,UAAU,CAAC;IAEvF,IAAI,CAAC5rB,SAAS,EACVvoH,WAAW,CAACqwH,aAAa,CAACwkB,OAAO,EAAE/yJ,MAAM,CAACmjB,gBAAgB,EAAEnjB,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,EAAExuI,MAAM,CAACuD,QAAQ,EAAEvD,MAAM,CAACysI,eAAe,CAAC,CAAC,KAErI3xG,4FAAuB,CAACyzG,aAAa,CAACwkB,OAAO,EAAE/yJ,MAAM,CAACmjB,gBAAgB,EAAEnjB,MAAM,CAACuD,QAAQ,CAAC;EAChG;EAEAk6J,QAAQ,CAACp3J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,+BAA+B,EAAE,UAAUC,KAAK,EAAEC,MAAM,EAAE;IAC/E+tK,0BAA0B,CAAC,CAAC;EAChC,CAAC,CAAC,CAAC;EAEH,SAASA,0BAA0BA,CAAA,EAAG;IAClC,IAAItwK,MAAM,CAAC4P,WAAW,CAACkyB,kBAAkB,KAAK,IAAI,IAAI5hC,aAAa,CAACmB,QAAQ,KAAK,KAAK,EAAE;MACpF+rK,yBAAyB,CAAC,CAAC;IAC/B;EACJ;EAEA,SAASA,yBAAyBA,CAAA,EAAG;IACjC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEAptK,MAAM,CAAC8sD,UAAU,GAAG,4BAA4B;IAEhDzsD,aAAa,CAACq6B,gBAAgB,CAC1Bj6B,cAAc,CAACe,SAAS,CAAC,cAAc,CAAC,EACxCf,cAAc,CAACe,SAAS,CAAC,8GAA8G,CAAC,GAAG,QAAQ,GACnJf,cAAc,CAACe,SAAS,CAAC,gDAAgD,CAAC,EAC1Ef,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC,EAClC,EAAE,EACF,KAAK,CAAC;EACd;;EAEA;EACA;EACA;;EAEAxB,MAAM,CAACynK,0BAA0B,GAAG,YAAY;IAC5C,IAAI8I,eAAe,GAAG,EAAE;IACxBzsK,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,EAAE,UAAU5yB,GAAG,EAAEtG,EAAE,EAAE;MACnD,IAAIA,EAAE,CAACihC,SAAS,KAAK,SAAS,IAAIjhC,EAAE,CAACihC,SAAS,KAAK,eAAe,EAAE;QAChE2vI,aAAa,CAAC5wK,EAAE,EAAE2wK,eAAe,CAAC;MACtC;IACJ,CAAC,CAAC;IAEFzsK,CAAC,CAACmC,IAAI,CAACsqK,eAAe,EAAE,UAAUrqK,GAAG,EAAEtG,EAAE,EAAE;MACvC,IAAI2G,KAAK,GAAGvG,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAACzpB,OAAO,CAACzP,EAAE,CAAC;MACnDI,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAACxpB,MAAM,CAAC/I,KAAK,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC;IACFvG,MAAM,CAAC4P,WAAW,CAACkyB,kBAAkB,GAAG,KAAK;IAC7C9hC,MAAM,CAACkiK,kBAAkB,GAAG,CAAC;IAC7B3zB,aAAa,CAAC,CAAC;EACnB,CAAC;EAED,SAASiiC,aAAaA,CAAC9vI,OAAO,EAAE6vI,eAAe,EAAE;IAC7C,IAAI9rJ,MAAM,GAAGpkB,aAAa,CAAC6uB,SAAS,CAACvK,UAAU,CAAC+b,OAAO,CAAC3b,MAAM,CAAC,EAAE,CAAC,CAAC;IACnE/kB,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY,IAAI/pH,MAAM;IACxCzkB,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,GAAGxe,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY;IAE1DxuI,MAAM,CAAC4P,WAAW,CAAC4sB,OAAO,GAAGx8B,MAAM,CAACuiK,UAAU,CAAC/zB,YAAY;IAE3D+hC,eAAe,CAAClqK,IAAI,CAACq6B,OAAO,CAAC;EACjC;EAEA1gC,MAAM,CAACi8C,UAAU,GAAG,KAAK;EAEzBwhH,QAAQ,CAACp3J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,cAAc,EAAE,UAAUC,KAAK,EAAEoY,OAAO,EAAE;IAC/D,IAAI+1J,qBAAqB,GAAG3sK,CAAC,CAAC,+BAA+B,CAAC,CAACsC,MAAM,GAAG,CAAC;IACzE,IAAIsqK,uBAAuB,GAAG5sK,CAAC,CAAC,0BAA0B,CAAC,CAACsC,MAAM,GAAG,CAAC;IACtE,IAAIuqK,0BAA0B,GAAG7sK,CAAC,CAAC,yBAAyB,CAAC,CAACsC,MAAM,GAAG,CAAC;IACxE,IAAIwqK,+BAA+B,GAAG9sK,CAAC,CAAC,wCAAwC,CAAC,CAACsC,MAAM,GAAG,CAAC;IAE5F,IAAIsqK,uBAAuB,EAAE;MACzB1wK,MAAM,CAACgoK,sBAAsB,CAAC3B,YAAY,GAAG3rJ,OAAO;IACxD,CAAC,MAAM,IAAIi2J,0BAA0B,EAAE;MACnC3wK,MAAM,CAAC6wK,kBAAkB,CAACxK,YAAY,GAAG3rJ,OAAO;IACpD,CAAC,MAAM,IAAI+1J,qBAAqB,EAAE;MAC9BzwK,MAAM,CAACgnG,UAAU,GAAGtsF,OAAO;MAC3Bra,aAAa,CAAC+L,WAAW,CAAC,uBAAuB,CAAC;MAClDpM,MAAM,CAAC8wK,oBAAoB,CAAC,IAAI,CAAC;IACrC,CAAC,MAAM,IAAIF,+BAA+B,EAAE;MACxC5wK,MAAM,CAACwhK,kBAAkB,GAAG;QACxBjsJ,KAAK,EAAEmF;MACX,CAAC;MACD1a,MAAM,CAAC+wK,sBAAsB,CAAC,CAAC;IACnC,CAAC,MACG/wK,MAAM,CAACk8C,kBAAkB,CAACxhC,OAAO,CAAC;EAC1C,CAAC,CAAC,CAAC;EAEH1a,MAAM,CAACk8C,kBAAkB,GAAG,UAAUxhC,OAAO,EAAE;IAC3C,IAAI1a,MAAM,CAACi8C,UAAU,EAAE;MACnBz7C,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAACk8C,kBAAkB,CAACxhC,OAAO,CAAC;MACtC,CAAC,EAAE,GAAG,CAAC;IACX,CAAC,MAAM;MACH1a,MAAM,CAACm8C,oBAAoB,CAACzhC,OAAO,CAAC;IACxC;EACJ,CAAC;EAED1a,MAAM,CAACm8C,oBAAoB,GAAG,UAAUzhC,OAAO,EAAE;IAC7C1a,MAAM,CAACud,UAAU,GAAG,SAAS;IAC7Bvd,MAAM,CAACi8C,UAAU,GAAG,IAAI;IACxBj3C,OAAO,CAACC,GAAG,CAAC,aAAa,CAAC;IAC1BjF,MAAM,CAACa,UAAU,GAAG6Z,OAAO;IAC3B5W,CAAC,CAAC,qBAAqB,CAAC,CAACkF,GAAG,CAAC0R,OAAO,CAAC;IACrC,IAAI9a,EAAE,GAAGkE,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACpClE,EAAE,CAACw8C,aAAa,CAAC,IAAIC,KAAK,CAAC,OAAO,EAAE;MAAEC,OAAO,EAAE;IAAK,CAAC,CAAC,CAAC;IACvD18C,EAAE,CAACw8C,aAAa,CAAC,IAAIC,KAAK,CAAC,QAAQ,EAAE;MAAEC,OAAO,EAAE;IAAK,CAAC,CAAC,CAAC;IAExDt3C,OAAO,CAACC,GAAG,CAAC,oBAAoB,GAAGyV,OAAO,CAAC;IAE3C5W,CAAC,CAACC,OAAO,CAAC,CAAC;IACXgvB,eAAe,CAACuH,MAAM,CAAC5f,OAAO,CAAC,CAC1B1W,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjBrE,OAAO,CAACC,GAAG,CAAC,uBAAuB,GAAGoE,GAAG,CAAC;MAC1C;MACArJ,MAAM,CAACugK,WAAW,GAAGl3J,GAAG;MACxBrJ,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACnxB,GAAG,GAAGrJ,MAAM,CAAC4zC,QAAQ,CAAC;MACpD5zC,MAAM,CAACygK,UAAU,GAAG,KAAK;MACzB,OAAO1tI,eAAe,CAACq+D,aAAa,CAAC,CAAC,EAAEpxF,MAAM,CAAC4zC,QAAQ,CAAC;IAC5D,CAAC,CAAC,CACD5vC,IAAI,CAAC,UAAUqF,GAAG,EAAE;MACjB,IAAIkC,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;MAEzBxG,OAAO,CAACC,GAAG,CAAC,2BAA2B,CAAC;MACxCjF,MAAM,CAACu+J,WAAW,GAAGl1J,GAAG,CAACnF,IAAI;MAC7BlE,MAAM,CAACwgK,WAAW,GAAGn3J,GAAG,CAAC+xB,IAAI;MAC7B;;MAEA,IAAG,CAAC/xB,GAAG,CAACnF,IAAI,IAAImF,GAAG,CAACnF,IAAI,CAACkC,MAAM,IAAI,CAAC,EAAE;QAClCpG,MAAM,CAAC+hK,iBAAiB,CAAC/hK,MAAM,CAACa,UAAU,CAAC;MAC/C;MAEA0K,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;MACrB,OAAOkC,QAAQ,CAACG,OAAO;IAC3B,CAAC,CAAC,WACM,CAAC,YAAY;MACjB,IAAIo9G,kBAAkB,GAAG/1F,eAAe,CAAC+1F,kBAAkB;MAC3D9jH,OAAO,CAACC,GAAG,CAAC,0BAA0B,CAAC;MACvC,IAAI6E,IAAI,GAAG9J,MAAM,CAACu+J,WAAW,CAAC,CAAC,CAAC;MAChC,IAAIv+J,MAAM,CAACu+J,WAAW,IAAIv+J,MAAM,CAACu+J,WAAW,CAACn4J,MAAM,KAAK,CAAC,IAAIpG,MAAM,CAACu+J,WAAW,CAAC,CAAC,CAAC,CAACjpG,QAAQ,KAAK,CAAC,EAAE;QAC/F,IAAI1/C,KAAK,GAAGkzG,kBAAkB,GAAGA,kBAAkB,CAAClzG,KAAK,GAAG,IAAI;QAChE5V,MAAM,CAAC2kK,cAAc,CAAC76J,IAAI,CAACuS,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAEzG,KAAK,CAAC;QAC9D5V,MAAM,CAACukK,wBAAwB,CAAC,CAAC;MACrC,CAAC,MAAM,IAAIvkK,MAAM,CAACu+J,WAAW,IAAIv+J,MAAM,CAACu+J,WAAW,CAACn4J,MAAM,KAAK,CAAC,IAAIpG,MAAM,CAACu+J,WAAW,CAAC,CAAC,CAAC,CAACjpG,QAAQ,KAAK,CAAC,EAAE;QACtGviC,eAAe,CAACu2F,mBAAmB,CAACx/G,IAAI,CAACuS,SAAS,CAAC,CAACrY,IAAI,CAAC,UAAUC,IAAI,EAAE;UACrEH,CAAC,CAACmC,IAAI,CAAChC,IAAI,EAAE,UAAUuQ,CAAC,EAAE5U,EAAE,EAAE;YAC1B,IAAIA,EAAE,CAAC6a,WAAW,KAAKC,OAAO,IAAI9a,EAAE,CAACu/B,OAAO,KAAKzkB,OAAO,EAAE;cACtD1a,MAAM,CAAC2kK,cAAc,CAAC/kK,EAAE,EAAE,IAAI,CAAC;cAC/BI,MAAM,CAACukK,wBAAwB,CAAC,CAAC;cACjC,OAAO,KAAK;YAChB;UACJ,CAAC,CAAC;QACN,CAAC,CAAC;MACN;MACAzgK,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAACi8C,UAAU,GAAG,KAAK;MACzBj3C,OAAO,CAACC,GAAG,CAAC,eAAe,CAAC;MAE5BzE,QAAQ,CAAC,YAAY;QACjBkgJ,kBAAkB,CAACr0E,cAAc,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;MAEjF,CAAC,EAAE,GAAG,CAAC;IACX,CAAC,CAAC;IAENrnE,OAAO,CAACC,GAAG,CAAC,sBAAsB,CAAC;EACvC,CAAC;EAEDjF,MAAM,CAAC+nK,0BAA0B,GAAG,UAAUiJ,gBAAgB,EAAE;IAC5DhxK,MAAM,CAACwhK,kBAAkB,GAAG;MACxBjsJ,KAAK,EAAE;IACX,CAAC;IACDvV,MAAM,CAAC8nK,4BAA4B,GAAGkJ,gBAAgB;IACtD,IAAInjJ,cAAc,GAAG/pB,CAAC,CAAC,gCAAgC,CAAC;IACxDzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY;MAC7D7tB,MAAM,CAAC8nK,4BAA4B,CAACrzI,cAAc,GAAG,KAAK;MAC1Dz0B,MAAM,CAACwhK,kBAAkB,GAAG;QACxBjsJ,KAAK,EAAE;MACX,CAAC;IACL,CAAC,CAAC;EACN,CAAC;EAEDvV,MAAM,CAACioK,2BAA2B,GAAG,UAAU5yI,aAAa,EAAE;IAC1D,IAAIxH,cAAc,GAAG/pB,CAAC,CAAC,gCAAgC,CAAC;IACxDzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;IAEzC,IAAIwH,aAAa,EAAE;MACfr1B,MAAM,CAAC8nK,4BAA4B,CAACrzI,cAAc,GAAG,KAAK;MAC1Dz0B,MAAM,CAACwhK,kBAAkB,GAAG;QACxBjsJ,KAAK,EAAE;MACX,CAAC;IACL;EACJ,CAAC;EAEDvV,MAAM,CAACixK,8BAA8B,GAAG,UAAUD,gBAAgB,EAAE;IAEhE,IAAInjJ,cAAc,GAAG/pB,CAAC,CAAC,oCAAoC,CAAC;IAC5DzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,CAAC;EAC5C,CAAC;EAED7tB,MAAM,CAACkxK,+BAA+B,GAAG,YAAY;IAEjD,IAAIrjJ,cAAc,GAAG/pB,CAAC,CAAC,oCAAoC,CAAC;IAC5DzD,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;EAC7C,CAAC;EAED7tB,MAAM,CAAC+wK,sBAAsB,GAAG,YAAY;IAExCh+I,eAAe,CAAC0C,wBAAwB,CAACz1B,MAAM,CAAC8nK,4BAA4B,CAACt0C,MAAM,EAAEtzH,aAAa,CAACiN,YAAY,EAAEnN,MAAM,CAACwhK,kBAAkB,CAACjsJ,KAAK,CAAC,CAC5IvR,IAAI,CAAC,UAAUC,IAAI,EAAE;MAClB,IAAIA,IAAI,CAACyxB,KAAK,EAAE;QACZ11B,MAAM,CAAC8nK,4BAA4B,CAACvsG,QAAQ,CAAC,CAAC;QAC9Cv7D,MAAM,CAACioK,2BAA2B,CAAC,CAAC;MACxC,CAAC,MAAM;QACHjoK,MAAM,CAACixK,8BAA8B,CAAC,CAAC;MAC3C;IACJ,CAAC,EAAE,YAAY;MACXjxK,MAAM,CAACixK,8BAA8B,CAAC,CAAC;IAC3C,CAAC,CAAC;EAEV,CAAC;EAEDjxK,MAAM,CAACmxK,iCAAiC,GAAG,YAAY;IACnDnxK,MAAM,CAAC8nK,4BAA4B,CAACvsG,QAAQ,CAAC,CAAC;IAC9Cv7D,MAAM,CAACkxK,+BAA+B,CAAC,CAAC;IACxClxK,MAAM,CAACioK,2BAA2B,CAAC,IAAI,CAAC;EAC5C,CAAC;;EAGD;;EAEAjoK,MAAM,CAACoxK,oBAAoB,GAAG,YAAY;IACtCpxK,MAAM,CAAC6vK,gBAAgB,CAAC,CAAC;IACzB,IAAI7vK,MAAM,CAACq6E,aAAa,KAAK,KAAK,EAAE;MAChCr6E,MAAM,CAACqxK,UAAU,GAAG,CAAC,CAAC;MACtBrxK,MAAM,CAACqxK,UAAU,CAACn9I,QAAQ,GAAG,CAAC;MAC9Bl0B,MAAM,CAACqxK,UAAU,CAACtzI,KAAK,GAAG,CAAC;MAC3B/9B,MAAM,CAACqxK,UAAU,CAACpyH,KAAK,GAAG,EAAE;MAC5Bn7C,CAAC,CAAC,0BAA0B,CAAC,CAAC6D,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC;MACtD,IAAI2pK,QAAQ,GAAGxxK,OAAO,CAACw3C,OAAO,CAACh3B,QAAQ,CAACC,cAAc,CAAC,yBAAyB,CAAC,CAAC,CAACsyC,KAAK,CAAC,CAAC;MAC1Fy+G,QAAQ,CAACC,cAAc,CAACn9J,KAAK,CAACrP,YAAY,CAAC,CAAC,CAAC,CAAC;;MAE9C1E,aAAa,CAAC8E,UAAU,CAAC,0BAA0B,EAAE,YAAY;QAC7DrB,CAAC,CAAC,wBAAwB,CAAC,CAACsB,KAAK,CAAC,CAAC;MACvC,CAAC,CAAC;IAEN;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;EACJ,CAAC;EAEDpF,MAAM,CAACwxK,qBAAqB,GAAG,YAAY;IACvCnxK,aAAa,CAAC+L,WAAW,CAAC,0BAA0B,CAAC;IACrD;EACJ,CAAC;EAEDpM,MAAM,CAACyxK,oBAAoB,GAAG,UAAU3yG,GAAG,EAAE;IACzC,IAAI4yG,WAAW,GAAG1xK,MAAM,CAACqxK,UAAU,CAACpyH,KAAK;IACzC,IAAIyyH,WAAW,IAAIA,WAAW,CAACtrK,MAAM,GAAG,GAAG,EAAE;MACzCjG,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,wCAAwC,CAAC,CAAC;MAC1F,OAAO,KAAK;IAChB;IACA,IAAIilI,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE,IAAIquB,cAAc,GAAGtZ,UAAU,CAACzkB,aAAa,CAAC+9B,cAAc,CAAC;IAE7D,IAAIT,SAAS,GAAGtf,WAAW,CAAC80H,YAAY,CAAChzI,MAAM,CAAC4P,WAAW,CAAC;IAE5D,IAAI4wB,YAAY,GAAGxgC,MAAM,CAACysI,eAAe,GAAG9nH,UAAU,CAAC3kB,MAAM,CAACqxK,UAAU,CAACtzI,KAAK,CAAC,GAAGpZ,UAAU,CAAC3kB,MAAM,CAACqxK,UAAU,CAACtzI,KAAK,CAAC,GAAGxC,YAAY,CAACiC,SAAS,EAAE7Y,UAAU,CAAC3kB,MAAM,CAACqxK,UAAU,CAACtzI,KAAK,CAAC,CAAC;;IAEpL;IACA,IAAID,KAAK,GAAGnZ,UAAU,CAAC3kB,MAAM,CAACqxK,UAAU,CAACtzI,KAAK,CAAC;IAG/C,IAAIK,EAAE,GAAG;MACLh7B,EAAE,EAAEumB,KAAK,CAACuE,OAAO,CAAC,CAAC;MACnB7R,SAAS,EAAEsN,KAAK,CAACuE,OAAO,CAAC,CAAC;MAC1BxrB,IAAI,EAAE1C,MAAM,CAACqxK,UAAU,CAACpyH,KAAK;MAC7Bj6B,KAAK,EAAEhlB,MAAM,CAACqxK,UAAU,CAACn9I,QAAQ;MACjC6J,KAAK,EAAED,KAAK;MAAE;MACdkB,SAAS,EAAEra,UAAU,CAAC3kB,MAAM,CAACqxK,UAAU,CAACtzI,KAAK,CAAC;MAC9ChZ,MAAM,EAAG,CAAC/kB,MAAM,CAACqxK,UAAU,CAACn9I,QAAQ,GAAI4J,KAAK;MAC7CjC,QAAQ,EAAE,CAAC;MAAE;MACb4C,IAAI,EAAE,EAAE;MACRf,GAAG,EAAEnC,YAAY,CAACiC,SAAS,EAAE7Y,UAAU,CAAC3kB,MAAM,CAACqxK,UAAU,CAACtzI,KAAK,GAAG/9B,MAAM,CAACqxK,UAAU,CAACn9I,QAAQ,CAAC,CAAC;MAC9FlmB,SAAS,EAAEwvB,SAAS,CAACI,MAAM;MAC3ByqI,gBAAgB,EAAE,IAAI;MACtBtpI,KAAK,EAAEvB,SAAS;MAChB/5B,aAAa,EAAEw6B,cAAc,GAAIuC,YAAY,GAAGvC,cAAc,GAAI,CAAC;MACnES,oBAAoB,EAAET,cAAc,GAAGA,cAAc,GAAG,CAAC;MACzDC,cAAc,EAAED,cAAc,GAAGA,cAAc,GAAG,CAAC;MACnDU,YAAY,EAAE6B,YAAY;MAC1B5B,OAAO,EAAE,IAAI;MACbC,SAAS,EAAE,IAAI;MACfC,QAAQ,EAAE,YAAY;MACtBG,qBAAqB,EAAEta,UAAU,CAAC3kB,MAAM,CAACqxK,UAAU,CAACtzI,KAAK;IAC7D,CAAC;IAED,IAAI0oG,SAAS,EAAE;MACX3rG,4FAAuB,CAAC0tI,sBAAsB,CAACxoK,MAAM,CAAC4P,WAAW,EAAEwuB,EAAE,EAAElgB,WAAW,CAAC0/H,eAAe,CAAC,CAAC,EAAE59I,MAAM,CAAC;IACjH,CAAC,MAAM;MACHA,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAACt1B,IAAI,CAAC+3B,EAAE,CAAC;MACzC;MACAlgB,WAAW,CAACy1H,gBAAgB,CAAC3zI,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAACysI,eAAe,EAAEzsI,MAAM,CAAC;IACpF;IAEAK,aAAa,CAAC+L,WAAW,CAAC,0BAA0B,CAAC;IACrDpM,MAAM,CAAC8/J,qBAAqB,CAAC,CAAC;EAClC,CAAC;EAGD9/J,MAAM,CAAC2xK,gBAAgB,GAAG,YAAY;IAClC3xK,MAAM,CAAC2tJ,qBAAqB,GAAG,KAAK;IACpC3tJ,MAAM,CAAC4xK,wBAAwB,GAAGhoJ,SAAS,CAACtjB,IAAI,CAAC;MAC7Cq1J,SAAS,EAAE,IAAI;MACfkW,cAAc,EAAE,aAAa;MAC7BC,eAAe,EAAE,YAAY;MAC7Bh8G,WAAW,EAAE,8BAA8B;MAC3CjD,KAAK,EAAE7yD;IACX,CAAC,CAAC;EACN,CAAC;EAEDA,MAAM,CAAC+xK,qBAAqB,GAAG,YAAY;IACvC/xK,MAAM,CAAC4xK,wBAAwB,CAACpiG,OAAO,CAAC,QAAQ,CAAC;EACrD,CAAC;EAEDxvE,MAAM,CAAC2tJ,qBAAqB,GAAG,KAAK;EAEpC3tJ,MAAM,CAACgyK,gBAAgB,GAAG,YAAY;IAClChyK,MAAM,CAACsgK,eAAe,GAAG,IAAI;IAC7BtgK,MAAM,CAACu+J,WAAW,GAAG,IAAI;IACzBv+J,MAAM,CAACo7B,IAAI,GAAG,CAAC;IACfp7B,MAAM,CAACugK,WAAW,GAAG,CAAC;IACtBvgK,MAAM,CAACa,UAAU,GAAG,IAAI;EAC5B,CAAC;EAEDb,MAAM,CAACiyK,WAAW,GAAG,UAAUC,MAAM,EAAE;IACnC,IAAI1mJ,GAAG,GAAG1nB,CAAC,CAACouK,MAAM,CAAC;IACnB,IAAItyK,EAAE,GAAGkE,CAAC,CAAC0nB,GAAG,CAAC7jB,IAAI,CAAC,aAAa,CAAC,CAAC;IACnC/H,EAAE,CAAC+7C,QAAQ,CAAC,MAAM,CAAC;IACnBnwB,GAAG,CAAC7jB,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC6jB,GAAG,CAAC8+B,QAAQ,CAAC,WAAW,CAAC;EAC7B,CAAC;EAEDtqD,MAAM,CAACmyK,WAAW,GAAG,IAAI,CAAC,CAAC;EAC3BnyK,MAAM,CAACoyK,WAAW,GAAG,IAAI;EACzBpyK,MAAM,CAACqyK,aAAa,GAAG5xK,cAAc,CAACe,SAAS,CAAC,YAAY,CAAC;EAC7DxB,MAAM,CAACm/J,cAAc,GAAG,IAAI;EAC5Bn/J,MAAM,CAAC06D,cAAc,GAAG,IAAI;EAC5B16D,MAAM,CAACo/J,eAAe,GAAG,IAAI;EAC7Bp/J,MAAM,CAACk/J,YAAY,GAAG,IAAI;EAE1Bl/J,MAAM,CAACsyK,eAAe,GAAG,YAAY;IACjC,IAAItyK,MAAM,CAACohK,cAAc,EAAE;MACvBphK,MAAM,CAACoyK,WAAW,GAAG5uF,cAAc,CAACvJ,gBAAgB,CAAC,CAAC,GAAG,kBAAkB,GAAG,IAAI;MAClF,IAAIs4F,UAAU,GAAIvyK,MAAM,CAACk/J,YAAY,IAAIl/J,MAAM,CAACk/J,YAAY,CAAC7lH,UAAU,KAAKr5C,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,GAAIpD,MAAM,CAACk/J,YAAY,CAAC3jE,IAAI,GAAG,IAAI;MAC7Iv7F,MAAM,CAACm/J,cAAc,GAAGn/J,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,GAAIpD,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACkuI,cAAc,IAAIyjC,UAAU,GAAI,IAAI;MAC1H,IAAG,CAAC,CAACvyK,MAAM,CAACm/J,cAAc,IAAIn/J,MAAM,CAACo/J,eAAe,KAAK,IAAI,EAAE;QAC3Dp/J,MAAM,CAAC06D,cAAc,GAAG16D,MAAM,CAAC4P,WAAW,CAACgsB,iBAAiB,GAAG,YAAY,GAAG,MAAM;MACxF;MACA57B,MAAM,CAACmyK,WAAW,CAACziJ,MAAM,CAAC,CAAC;IAC/B;EACJ,CAAC;;EAED;;EAEA1vB,MAAM,CAACwyK,WAAW,GAAG,UAAUh2J,GAAG,EAAE;IAEhC,IAAIiqH,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEnE,IAAI,OAAQ4M,GAAI,KAAK,SAAS,EAAE;MAC5Bxc,MAAM,CAAC4P,WAAW,CAACmtB,uBAAuB,GAAG,IAAI;MACjD/8B,MAAM,CAAC4P,WAAW,CAACgsB,iBAAiB,GAAGpf,GAAG;MAC1Cxc,MAAM,CAACmyK,WAAW,CAACrnK,IAAI,CAAC,IAAI,CAAC;MAC7B,IAAI9K,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,EAC9BpD,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACkuI,cAAc,GAAG9uI,MAAM,CAACm/J,cAAc;IAC1E,CAAC,MAAM,IAAI,OAAQ3iJ,GAAI,IAAI,QAAQ,EAAE;MACjC,IAAIA,GAAG,KAAK,OAAO,EAAE;QACjBxc,MAAM,CAACmyK,WAAW,CAACp2G,KAAK,CAAC,CAAC;QAC1B/7D,MAAM,CAAC4P,WAAW,CAACmtB,uBAAuB,GAAG,KAAK;MACtD,CAAC,MACD,IAAIvgB,GAAG,KAAK,QAAQ,EAAE;QAClBxc,MAAM,CAACmyK,WAAW,CAACrnK,IAAI,CAAC,KAAK,CAAC;MAClC;IACJ;IAEA,IAAI27H,SAAS,EAAE;MAEXjmI,QAAQ,CAAC,YAAY;QACjB,IAAI,OAAQR,MAAM,CAAC4P,WAAW,CAACisB,QAAS,KAAK,QAAQ,EAAE;UACnD77B,MAAM,CAAC4P,WAAW,CAACisB,QAAQ,GAAGx7B,aAAa,CAAC6uB,SAAS,CAACzV,MAAM,CAACzZ,MAAM,CAAC4P,WAAW,CAACisB,QAAQ,CAAC,EAAE,CAAC,CAAC;QACjG;QAEA,IAAIyjI,mBAAmB,CAAC9iJ,GAAG,CAAC,EAAE;UAC1Bxc,MAAM,CAAC4P,WAAW,CAACmtB,uBAAuB,GAAGpsB,SAAS;UACtD0uJ,mBAAmB,CAAC,CAAC;QACzB;QAEA,IAAIh2J,GAAG,GAAGyxB,4FAAuB,CAACqG,iBAAiB,CAACnhC,MAAM,CAAC4P,WAAW,EAAEsO,WAAW,CAAC0/H,eAAe,CAAC,CAAC,EAAE59I,MAAM,EAAEg7B,iEAAc,CAACjC,KAAK,CAAC;QACpI,IAAI1vB,GAAG,CAACopK,uBAAuB,KAAK,IAAI,EAAE;UACtCzyK,MAAM,CAAC4P,WAAW,CAACisB,QAAQ,GAAGx7B,aAAa,CAAC6uB,SAAS,CAAC7lB,GAAG,CAACopK,uBAAuB,EAAE,CAAC,CAAC;QACzF;QACAzyK,MAAM,CAAC8/J,qBAAqB,CAAC,CAAC;MAClC,CAAC,CAAC;IACN,CAAC,MAAM;MACH,IAAIR,mBAAmB,CAAC9iJ,GAAG,CAAC,EAAE;QAC1B6iJ,mBAAmB,CAAC,CAAC;MACzB;MACAh/J,aAAa,CAAC65E,gBAAgB,CAACl6E,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAAC;MAC1DA,MAAM,CAAC8/J,qBAAqB,CAAC,CAAC;IAClC;EAEJ,CAAC;EAED9/J,MAAM,CAAC2Y,eAAe,GAAG,IAAI,CAAC,CAAC;;EAE/B3Y,MAAM,CAAC0yK,sBAAsB,GAAG,UAAU5oK,IAAI,EAAE;IAC5C,IAAIA,IAAI,CAAC80B,OAAO,KAAK,KAAK,EAAE;MACxB5+B,MAAM,CAAC0hK,YAAY,GAAG,CAAC,CAAC;MACxB5hK,OAAO,CAAC+F,IAAI,CAACiE,IAAI,EAAE9J,MAAM,CAAC0hK,YAAY,CAAC;MAEvC,IAAI53J,IAAI,CAAC41B,WAAW,IAAI,UAAU,EAAE;QAChC1/B,MAAM,CAAC8sD,UAAU,GAAG,oBAAoB;QACxCzsD,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC9Df,cAAc,CAACe,SAAS,CAAC,sCAAsC,CAAC,GAAGsI,IAAI,CAACguH,YAAY,GAAG,GAAG,EAC1Fr3H,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC,EAClCf,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC,CAAC;MAC3C,CAAC,MAAM,IAAIsI,IAAI,CAAC61B,YAAY,EAAE;QAC1B3/B,MAAM,CAAC8sD,UAAU,GAAG,2BAA2B;QAC/CzsD,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC9Df,cAAc,CAACe,SAAS,CAAC,oCAAoC,CAAC,GAAGsI,IAAI,CAAC61B,YAAY,GAAG,GAAG,EACxFl/B,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC,EAClCf,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC,CAAC;MAC3C,CAAC,MAAM;QACHxB,MAAM,CAAC8sD,UAAU,GAAG,eAAe;QACnCzsD,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC9Df,cAAc,CAACe,SAAS,CAAC,wCAAwC,CAAC,EAClEf,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC,EAClCf,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC,CAAC;MAC3C;IACJ;EACJ,CAAC;EAEDxB,MAAM,CAAC0b,mBAAmB,GAAG,UAAU5R,IAAI,EAAElK,EAAE,EAAE;IAC7C,IAAIkK,IAAI,CAAC80B,OAAO,KAAK,KAAK,EAAE;MACxB5+B,MAAM,CAAC0hK,YAAY,GAAG,CAAC,CAAC;MACxB5hK,OAAO,CAAC+F,IAAI,CAACiE,IAAI,EAAE9J,MAAM,CAAC0hK,YAAY,CAAC;MAEvC,IAAI53J,IAAI,CAAC41B,WAAW,IAAI,UAAU,EAAE;QAChC,OAAO,KAAK;QACZ;QACA;QACA;QACA;QACA;MACJ,CAAC,MAAM,IAAI51B,IAAI,CAAC61B,YAAY,EAAE;QAC1B3/B,MAAM,CAAC8sD,UAAU,GAAG,2BAA2B;QAC/CzsD,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC9Df,cAAc,CAACe,SAAS,CAAC,8GAA8G,CAAC,EACxIf,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC,EAClCf,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC,CAAC;MAC3C,CAAC,MAAM;QACHhB,QAAQ,CAAC,YAAY;UACjBR,MAAM,CAAC2Y,eAAe,CAAC9C,IAAI,CAACjW,EAAE,CAAC;QACnC,CAAC,CAAC;MACN;IACJ;EAEJ,CAAC;;EAED;EACAI,MAAM,CAACuc,WAAW,GAAG,UAAUC,GAAG,EAAEla,KAAK,EAAE;IAEvC9B,QAAQ,CAAC,YAAY;MACjBR,MAAM,CAAC2Y,eAAe,CAAC7N,IAAI,CAAC,IAAI,CAAC;IACrC,CAAC,CAAC;IAEF,IAAI0R,GAAG,KAAK,IAAI,EAAE;MACdhc,QAAQ,CAAC,YAAY;QACjBsD,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;UACxD,IAAIA,EAAE,CAACwD,EAAE,KAAKpD,MAAM,CAAC0hK,YAAY,CAACt+J,EAAE,EAAE;YAClCxD,EAAE,CAAColB,KAAK,GAAGhlB,MAAM,CAAC0hK,YAAY,CAAC18I,KAAK;YAEpC,IAAIplB,EAAE,CAAColB,KAAK,GAAG,CAAC,IAAK,CAAChlB,MAAM,CAAC4P,WAAW,CAACwzJ,gBAAgB,IAAIpjK,MAAM,CAAC4P,WAAW,CAACyzJ,kBAAkB,KAAKzjK,EAAE,CAAColB,KAAK,GAAG,CAAE,EAAE;cAClHhlB,MAAM,CAACyoK,eAAe,CAAC7oK,EAAE,CAAC;YAC9B,CAAC,MAAM;cACHI,MAAM,CAACqnK,iBAAiB,CAACznK,EAAE,CAACwD,EAAE,CAAC;cAC/B,IAAI,CAAC/C,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC,EACpDsO,WAAW,CAACy1H,gBAAgB,CAAC3zI,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAACysI,eAAe,EAAEzsI,MAAM,CAAC;YACxF;YAEAQ,QAAQ,CAAC,YAAY;cACjBkgJ,kBAAkB,CAACr0E,cAAc,CAAC,qBAAqB,EAAEzsE,EAAE,CAACwD,EAAE,GAAG,gBAAgB,EAAE,IAAI,CAAC;cACxFs9I,kBAAkB,CAACr0E,cAAc,CAAC,uBAAuB,EAAEzsE,EAAE,CAACwD,EAAE,GAAG,kBAAkB,EAAE,EAAE,CAAC;cAC1Fs9I,kBAAkB,CAACr0E,cAAc,CAAC,oBAAoB,EAAEzsE,EAAE,CAACwD,EAAE,GAAG,eAAe,EAAE,EAAE,CAAC;cACpFs9I,kBAAkB,CAACr0E,cAAc,CAAC,uBAAuB,EAAEzsE,EAAE,CAACwD,EAAE,GAAG,kBAAkB,EAAE,EAAE,CAAC;YAE9F,CAAC,EAAE,GAAG,CAAC;YAEP,OAAO,KAAK;UAChB;QACJ,CAAC,CAAC;MACN,CAAC,CAAC;IACN,CAAC,MAAM,IAAI,OAAQoZ,GAAI,IAAI,QAAQ,EAAE;MACjC,IAAIA,GAAG,KAAK,OAAO,EAAE;QACjBxc,MAAM,CAACqnK,iBAAiB,CAACrnK,MAAM,CAAC0hK,YAAY,CAACt+J,EAAE,CAAC;MACpD;IACJ;IAEA,IAAId,KAAK,EAAE;MACPA,KAAK,CAACyzB,eAAe,CAAC,CAAC;MACvBzzB,KAAK,CAAC0zB,cAAc,CAAC,CAAC;IAC1B;EACJ,CAAC;EAEDh2B,MAAM,CAAC2yK,iBAAiB,GAAG,IAAI;EAE/B3yK,MAAM,CAAC4yK,sBAAsB,GAAG;IAC5Bx+J,KAAK,EAAE;EACX,CAAC;EAEDpU,MAAM,CAAC6yK,wBAAwB,GAAG,UAAU/oK,IAAI,EAAElK,EAAE,EAAE;IAClD,IAAII,MAAM,CAACkhH,cAAc,IAAIlhH,MAAM,CAACq6E,aAAa,KAAK,QAAQ,EAAE;MAC5Dr6E,MAAM,CAAC8yK,qBAAqB,CAAChpK,IAAI,EAAElK,EAAE,CAAC;IAC1C;EACJ,CAAC;EAEDI,MAAM,CAAC8yK,qBAAqB,GAAG,UAAUhpK,IAAI,EAAElK,EAAE,EAAE;IAC/C,IAAImzK,YAAY,GAAG1yK,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEtE,IAAI5P,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,EACtCp6E,MAAM,CAAC4yK,sBAAsB,CAACx+J,KAAK,GAAG,OAAO,CAAC,KAE9CpU,MAAM,CAAC4yK,sBAAsB,CAACx+J,KAAK,GAAG,qBAAqB;IAE/D,IAAItK,IAAI,CAAC80B,OAAO,KAAK,KAAK,EAAE;MACxB5+B,MAAM,CAAC0hK,YAAY,GAAG5hK,OAAO,CAAC+F,IAAI,CAACiE,IAAI,CAAC;MAExC,IAAI9J,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,EAAE;QACxC,IAAI24F,YAAY,KAAK,IAAI,EACrB/yK,MAAM,CAAC0hK,YAAY,CAAC7lI,QAAQ,GAAG77B,MAAM,CAAC0hK,YAAY,CAAC3jI,KAAK,CAAC,KAEzD/9B,MAAM,CAAC0hK,YAAY,CAAC7lI,QAAQ,GAAG77B,MAAM,CAAC0hK,YAAY,CAACp+H,UAAU;QAEjEtjC,MAAM,CAAC0hK,YAAY,CAACprB,kBAAkB,GAAG,kBAAkB;MAC/D,CAAC,MAAM;QACH,IAAI,CAACt2I,MAAM,CAAC0hK,YAAY,CAAC7lI,QAAQ,EAC7B77B,MAAM,CAAC0hK,YAAY,CAAC7lI,QAAQ,GAAG,CAAC;QAEpC,IAAI,CAAC77B,MAAM,CAAC0hK,YAAY,CAACprB,kBAAkB,EAAE;UACzCt2I,MAAM,CAAC0hK,YAAY,CAACprB,kBAAkB,GAAG,SAAS;UAClDt2I,MAAM,CAAC0hK,YAAY,CAAC7lI,QAAQ,GAAG,CAAC;QACpC;MACJ;MAEAr7B,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAAC2yK,iBAAiB,CAAC98J,IAAI,CAACjW,EAAE,CAAC;MACrC,CAAC,CAAC;IACN;EAEJ,CAAC;EAEDI,MAAM,CAACgzK,iBAAiB,GAAG,UAAUx2J,GAAG,EAAE;IACtC,IAAIu2J,YAAY,GAAG1yK,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IAEtEpP,QAAQ,CAAC,YAAY;MACjBR,MAAM,CAAC2yK,iBAAiB,CAAC7nK,IAAI,CAAC,IAAI,CAAC;IACvC,CAAC,CAAC;IAEF,IAAI0R,GAAG,KAAK,QAAQ,EAAE;MAClBhc,QAAQ,CAAC,YAAY;QACjB,IAAI,CAACuyK,YAAY,EAAE;UACf/yK,MAAM,CAAC4P,WAAW,CAACmtB,uBAAuB,GAAG,IAAI;UACjDj5B,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;YACxD,IAAIA,EAAE,CAACwD,EAAE,KAAKpD,MAAM,CAAC0hK,YAAY,CAACt+J,EAAE,EAAE;cAClC,IAAIoZ,GAAG,KAAK,kBAAkB,EAAE;gBAC5B,IAAIshB,KAAK,GAAG,CAACjE,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC0hK,YAAY,CAAC7lI,QAAQ,CAAC;gBACnDj8B,EAAE,CAACi8B,QAAQ,GAAG,CAAC;gBACfj8B,EAAE,CAAC02I,kBAAkB,GAAG3lI,SAAS;gBACjC/Q,EAAE,CAACm+B,KAAK,GAAGD,KAAK;gBAChBl+B,EAAE,CAACmlB,MAAM,GAAG+Y,KAAK,GAAGl+B,EAAE,CAAColB,KAAK;gBAC5BplB,EAAE,CAACo/B,SAAS,GAAGlB,KAAK;gBACpBl+B,EAAE,CAACq/B,qBAAqB,GAAGnB,KAAK;gBAChCl+B,EAAE,CAAC8iC,iBAAiB,GAAG5E,KAAK;cAChC,CAAC,MAAM;gBACHl+B,EAAE,CAACi8B,QAAQ,GAAG77B,MAAM,CAAC0hK,YAAY,CAAC7lI,QAAQ;gBAC1Cj8B,EAAE,CAAC02I,kBAAkB,GAAG95H,GAAG;cAC/B;cAEAxc,MAAM,CAACyoK,eAAe,CAAC7oK,EAAE,CAAC,CAAC,CAAC;;cAE5BY,QAAQ,CAAC,YAAY;gBACjBkgJ,kBAAkB,CAACr0E,cAAc,CAAC,oBAAoB,EAAEzsE,EAAE,CAACwD,EAAE,GAAG,eAAe,EAAE,EAAE,CAAC;gBACpFs9I,kBAAkB,CAACr0E,cAAc,CAAC,uBAAuB,EAAEzsE,EAAE,CAACwD,EAAE,GAAG,kBAAkB,EAAE,EAAE,CAAC;cAE9F,CAAC,EAAE,GAAG,CAAC;cAEP,OAAO,KAAK;YAChB;UACJ,CAAC,CAAC;QACN,CAAC,MAAM;UACH03B,4FAAuB,CAACm4I,qBAAqB,CAACjzK,MAAM,CAAC4P,WAAW,EAAEsO,WAAW,CAAC0/H,eAAe,CAAC,CAAC,EAAE59I,MAAM,EACnGA,MAAM,CAAC0hK,YAAY,CAACt+J,EAAE,EACtBpD,MAAM,CAAC0hK,YAAY,CAAC7lI,QAAQ,EAAErf,GAAG,CAAC;UAEtChc,QAAQ,CAAC,YAAY;YACjBkgJ,kBAAkB,CAACr0E,cAAc,CAAC,oBAAoB,EAAEzsE,EAAE,CAACwD,EAAE,GAAG,eAAe,EAAE,EAAE,CAAC;YACpFs9I,kBAAkB,CAACr0E,cAAc,CAAC,uBAAuB,EAAEzsE,EAAE,CAACwD,EAAE,GAAG,kBAAkB,EAAE,EAAE,CAAC;UAE9F,CAAC,EAAE,GAAG,CAAC;QACX;MACJ,CAAC,CAAC;IACN;IAEA,IAAId,KAAK,EAAE;MACPA,KAAK,CAACyzB,eAAe,CAAC,CAAC;MACvBzzB,KAAK,CAAC0zB,cAAc,CAAC,CAAC;IAC1B;EAEJ,CAAC;EAEDh2B,MAAM,CAACkzK,MAAM,GAAG,IAAI;EAEpBlzK,MAAM,CAACmzK,UAAU,GAAG,YAAY;IAC5B,IAAInzK,MAAM,CAACo6E,QAAQ,KAAK,kBAAkB,IACrCp6E,MAAM,CAACo6E,QAAQ,KAAK,QAAQ,IAAIp6E,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,GAAG,CAAE,EAAE;MAChE,IAAI,CAAC/4B,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,IAC5B,CAACZ,MAAM,CAAC4P,WAAW,CAAChP,QAAQ,CAACwC,EAAE,EAAE;QACjCjD,YAAY,CAACiE,SAAS,CAAC,wCAAwC,CAAC;MACpE,CAAC,MAAM;QACH+qJ,wBAAwB,CAAC,CAAC;MAC9B;IACJ,CAAC,MACGnvJ,MAAM,CAACkzK,MAAM,CAACxjJ,MAAM,CAAC,CAAC;EAC9B,CAAC;EAED1vB,MAAM,CAACozK,MAAM,GAAG,UAAU52J,GAAG,EAAE;IAC3Bxc,MAAM,CAACkzK,MAAM,CAACpoK,IAAI,CAAC0R,GAAG,CAAC;IACvB,IAAIA,GAAG,KAAK,IAAI,EAAE;MACdxc,MAAM,CAACgrK,gBAAgB,CAAC,CAAC;MAEzBxqK,QAAQ,CAAC,YAAY;QACjBkgJ,kBAAkB,CAACr0E,cAAc,CAAC,iBAAiB,EAAE,WAAW,EAAE,EAAE,CAAC;QACrE7rE,QAAQ,CAAC,YAAY;UACjBP,UAAU,CAAC+K,UAAU,CAAC,aAAa,CAAC;QACxC,CAAC,EAAE,GAAG,CAAC;MAEX,CAAC,EAAE,GAAG,CAAC;IACX;EACJ,CAAC;EAEDhL,MAAM,CAACqzK,iBAAiB,GAAG,IAAI;EAC/BrzK,MAAM,CAACm+J,oBAAoB,GAAG,IAAI;EAClCn+J,MAAM,CAAC8lK,qBAAqB,GAAG,UAAUlmK,EAAE,EAAE;IACzCI,MAAM,CAACqzK,iBAAiB,CAACx9J,IAAI,CAACjW,EAAE,CAAC;EACrC,CAAC;EAEDI,MAAM,CAACszK,oBAAoB,GAAG,UAAUjqK,GAAG,EAAE;IACzCrJ,MAAM,CAACqzK,iBAAiB,CAACvoK,IAAI,CAAC,CAAC;IAC/B9K,MAAM,CAACm+J,oBAAoB,GAAG,IAAI;IAElC,IAAI,CAAC,CAAC90J,GAAG,IAAKA,GAAG,YAAY3J,6DAAgB,EAAE;MAC3CM,MAAM,CAAC2kK,cAAc,CAACt7J,GAAG,CAAC;IAC9B;EACJ,CAAC;EAEDrJ,MAAM,CAACuzK,WAAW,GAAG,EAAE;EACvBvzK,MAAM,CAACwzK,QAAQ,GAAG,MAAM,CAAC,CAAC;;EAE1BxzK,MAAM,CAACs7F,cAAc,GAAG,UAAUC,IAAI,EAAE;IACpC,QAAQA,IAAI;MACR,KAAK,QAAQ;QACT;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACAv7F,MAAM,CAAC06J,SAAS,CAAC,CAAC;QAClBr7J,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;QACjD;MAEJ,KAAK,OAAO;QACR;QACAz3B,MAAM,CAACgxH,QAAQ,CAAC,CAAC,CACZhtH,IAAI,CAAC,YAAY;UACdhE,MAAM,CAAC06J,SAAS,CAAC,CAAC;UAClBr7J,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;QACrD,CAAC,CAAC;QAEN;IACR;EACJ,CAAC;EAEDz3B,MAAM,CAACmpK,iBAAiB,GAAG,UAAUhoK,IAAI,EAAE;IAEvCnB,MAAM,CAACm7F,sBAAsB,GAAG,EAAE;IAClCn7F,MAAM,CAACo7F,mBAAmB,GAAG36F,cAAc,CAACe,SAAS,CAAC,qEAAqE,CAAC;IAC5HxB,MAAM,CAACq7F,sBAAsB,GAAG,CAAC;MACzBzxF,IAAI,EAAEnJ,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC;MACxC+T,KAAK,EAAE;IACX,CAAC,EACD;MACI3L,IAAI,EAAEnJ,cAAc,CAACe,SAAS,CAAC,QAAQ,CAAC;MACxC+T,KAAK,EAAE;IACX,CAAC,EACD;MACI3L,IAAI,EAAEnJ,cAAc,CAACe,SAAS,CAAC,OAAO,CAAC;MACvC+T,KAAK,EAAE;IACX,CAAC,CACJ;IAEDlV,aAAa,CAAC8E,UAAU,CAAC,kBAAkB,CAAC;EAChD,CAAC;EAGDnF,MAAM,CAACyzK,iBAAiB,GAAG,IAAI;EAC/BzzK,MAAM,CAAC0zK,cAAc,GAAG,KAAK;EAE7B1zK,MAAM,CAAC2zK,qBAAqB,GAAG,UAAUxyK,IAAI,EAAE;IAC3C,IAAIslI,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IACnE5P,MAAM,CAAC6vK,gBAAgB,CAAC,CAAC;IAEzB,IAAI,CAAC7vK,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,IAAI37B,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAACv1B,MAAM,KAAK,CAAC,EAAE;MACpF;IACJ;IAEApG,MAAM,CAACwzK,QAAQ,GAAG,CAACryK,IAAI,GAAG,MAAM,GAAGA,IAAI;IACvCnB,MAAM,CAACuzK,WAAW,GAAG,CAAC9sC,SAAS,GAAGzmI,MAAM,CAAC4P,WAAW,CAACmsB,OAAO,GAAG/7B,MAAM,CAAC4P,WAAW,CAAC9B,OAAO;IACzF,IAAI+f,cAAc,GAAG/pB,CAAC,CAAC,sBAAsB,CAAC;IAC9CzD,aAAa,CAAC8E,UAAU,CAAC0oB,cAAc,EAAE,YAAY;MACjD/pB,CAAC,CAAC,eAAe,CAAC,CAACsB,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC;EAEN,CAAC;EAEDpF,MAAM,CAAC4zK,sBAAsB,GAAG,UAAU/vH,MAAM,EAAE;IAC9C,IAAI4iF,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IACnE5P,MAAM,CAAC0zK,cAAc,GAAG,KAAK;IAE7B,IAAI7vH,MAAM,KAAK,KAAK,EAAE;MAClB,IAAI,CAAC4iF,SAAS,EACVzmI,MAAM,CAAC4P,WAAW,CAACmsB,OAAO,GAAG/7B,MAAM,CAACuzK,WAAW,CAAC,KAEhDvzK,MAAM,CAAC4P,WAAW,CAAC9B,OAAO,GAAG9N,MAAM,CAACuzK,WAAW;IACvD;IACA,IAAIt1G,GAAG,GAAGj+D,MAAM,CAACyzK,iBAAiB;IAClCzzK,MAAM,CAACyzK,iBAAiB,GAAG,IAAI;IAC/B,IAAI5lJ,cAAc,GAAG/pB,CAAC,CAAC,sBAAsB,CAAC;IAE9C,IAAI+/C,MAAM,KAAK,IAAI,IAAI7jD,MAAM,CAACwzK,QAAQ,IAAI,MAAM,EAAE;MAC9CnzK,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,CAAC;IAC7C,CAAC,MACGxtB,aAAa,CAAC+L,WAAW,CAACyhB,cAAc,EAAE,YAAY;MAElD,IAAIg2B,MAAM,KAAK,MAAM,EAAE;QACnB,IAAI3gB,CAAC,GAAGljC,MAAM,CAACgxH,QAAQ,CAAC,CAAC;QAEzB,IAAI,OAAQ/yD,GAAI,KAAK,UAAU,EAAE;UAC7B/6B,CAAC,GAAGA,CAAC,CAACl/B,IAAI,CAAC,UAAUqF,GAAG,EAAE;YACtB,OAAO40D,GAAG,CAAC,CAAC;UAChB,CAAC,CAAC;QACN;QAEA,OAAO/6B,CAAC;MACZ,CAAC,MAAM;QACH,IAAI,OAAQ+6B,GAAI,KAAK,UAAU,EAAE;UAC7Bn6D,CAAC,CAACC,OAAO,CAAC,CAAC;UACX,IAAIyG,EAAE,GAAGxK,MAAM,CAAC4P,WAAW,CAACxM,EAAE;UAC9BpD,MAAM,CAAC06J,SAAS,CAAC,CAAC;UAClBr7J,MAAM,CAACm4B,YAAY,CAACC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC;UAEjDyL,CAAC,GAAGhlB,WAAW,CAACm0G,iBAAiB,CAAC7nH,EAAE,CAAC,CAChCxG,IAAI,CAAC,YAAY;YACd,OAAOi6D,GAAG,CAAC,CAAC;UAChB,CAAC,CAAC,WACM,CAAC,UAAU50D,GAAG,EAAE;YACpBvF,CAAC,CAACO,SAAS,CAAC,CAAC;UACjB,CAAC,CAAC;UAEN,OAAO6+B,CAAC;QACZ;MACJ;IACJ,CAAC,CAAC;EACV,CAAC;EAEDljC,MAAM,CAAC6zK,WAAW,GAAG,IAAI,CAAC,CAAC;;EAE3B7zK,MAAM,CAAC8zK,eAAe,GAAG,YAAY;IACjChwK,CAAC,CAAC,0BAA0B,CAAC,CAAC6D,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;IACvD3H,MAAM,CAAC6zK,WAAW,CAACnkJ,MAAM,CAAC,CAAC;EAC/B,CAAC;;EAED;EACA1vB,MAAM,CAAC+zK,gBAAgB,GAAG,UAAUv3J,GAAG,EAAEla,KAAK,EAAE;IAE5C,IAAIA,KAAK,EAAE;MACPA,KAAK,CAACyzB,eAAe,CAAC,CAAC;MACvBzzB,KAAK,CAAC0zB,cAAc,CAAC,CAAC;IAC1B;IACAx1B,QAAQ,CAAC,YAAY;MACjB,IAAI,OAAQgc,GAAI,KAAK,SAAS,EAAE;QAC5B,IAAIA,GAAG,KAAK,IAAI,EAAE;UACd,IAAIsiD,GAAG,GAAG9+D,MAAM,CAAC6zK,WAAW,CAAC73G,QAAQ,CAAC,CAAC;UACvC,IAAIjyD,KAAK,GAAG+0D,GAAG,CAAClF,WAAW,CAAC7vD,KAAK;UACjC,IAAIA,KAAK,IAAI,CAAC,EACV+0D,GAAG,CAAClF,WAAW,CAAC7vD,KAAK,GAAG,CAAC;UAC7B/J,MAAM,CAAC6zK,WAAW,CAAC/oK,IAAI,CAAC,IAAI,CAAC;QACjC,CAAC,MACG9K,MAAM,CAAC6zK,WAAW,CAAC/oK,IAAI,CAAC,KAAK,CAAC;MACtC,CAAC,MAAM,IAAI,OAAQ0R,GAAI,IAAI,QAAQ,EAAE;QACjC,IAAIA,GAAG,KAAK,OAAO,EAAE;UACjB,IAAIsiD,GAAG,GAAG9+D,MAAM,CAAC6zK,WAAW,CAAC73G,QAAQ,CAAC,CAAC;UACvC8C,GAAG,CAAClF,WAAW,CAAC7vD,KAAK,GAAG,CAAC;QAC7B,CAAC,MAAM,IAAIyS,GAAG,KAAK,QAAQ,EAAE;UACzBxc,MAAM,CAAC6zK,WAAW,CAAC/oK,IAAI,CAAC,KAAK,CAAC;QAClC;MACJ;IACJ,CAAC,CAAC;IAEFkoD,UAAU,CAAC,YAAY;MACnBlvD,CAAC,CAAC,0BAA0B,CAAC,CAAC6D,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC;IAC1D,CAAC,EAAE,GAAG,CAAC;EACX,CAAC;EAGD3H,MAAM,CAACg0K,cAAc,GAAG,IAAI,CAAC,CAAC;;EAE9Bh0K,MAAM,CAACi0K,kBAAkB,GAAG,YAAY;IACpCnwK,CAAC,CAAC,0BAA0B,CAAC,CAAC6D,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC;IACvD3H,MAAM,CAACg0K,cAAc,CAACtkJ,MAAM,CAAC,CAAC;EAClC,CAAC;;EAED;EACA1vB,MAAM,CAACk0K,aAAa,GAAG,UAAU13J,GAAG,EAAEla,KAAK,EAAE;IAEzC,IAAIA,KAAK,EAAE;MACPA,KAAK,CAACyzB,eAAe,CAAC,CAAC;MACvBzzB,KAAK,CAAC0zB,cAAc,CAAC,CAAC;IAC1B;IAEAx1B,QAAQ,CAAC,YAAY;MACjB,IAAI,OAAQgc,GAAI,KAAK,SAAS,EAAE;QAC5B,IAAIA,GAAG,KAAK,IAAI,EAAE;UACd,IAAIsiD,GAAG,GAAG9+D,MAAM,CAACg0K,cAAc,CAACh4G,QAAQ,CAAC,CAAC;UAC1C,IAAIjyD,KAAK,GAAG+0D,GAAG,CAAClF,WAAW,CAAC7vD,KAAK;UACjC+0D,GAAG,CAAC1I,OAAO,CAAC+9G,YAAY,GAAGpqK,KAAK,IAAI,CAAC;UAErC/J,MAAM,CAACg0K,cAAc,CAAClpK,IAAI,CAAC,IAAI,CAAC;QACpC,CAAC,MAAM;UACH9K,MAAM,CAACg0K,cAAc,CAAClpK,IAAI,CAAC,KAAK,CAAC;QACrC;MACJ,CAAC,MAAM,IAAI,OAAQ0R,GAAI,IAAI,QAAQ,EAAE;QACjC,IAAIA,GAAG,KAAK,OAAO,EAAE;UACjB,IAAIsiD,GAAG,GAAG9+D,MAAM,CAACg0K,cAAc,CAACh4G,QAAQ,CAAC,CAAC;UAC1C8C,GAAG,CAAClF,WAAW,CAAC7vD,KAAK,GAAG,CAAC;QAC7B,CAAC,MAAM,IAAIyS,GAAG,KAAK,QAAQ,EAAE;UACzBxc,MAAM,CAACg0K,cAAc,CAAClpK,IAAI,CAAC,KAAK,CAAC;QACrC;MACJ;IACJ,CAAC,CAAC;IAEFkoD,UAAU,CAAC,YAAY;MACnBlvD,CAAC,CAAC,0BAA0B,CAAC,CAAC6D,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC;IAC1D,CAAC,EAAE,GAAG,CAAC;EAEX,CAAC;EAED3H,MAAM,CAAC41J,cAAc,GAAG,UAAUvnJ,IAAI,EAAE+lK,SAAS,EAAE;IAC/C,IAAIA,SAAS,EAAE;MACX,IAAK,CAAC/lK,IAAI,CAACtC,QAAQ,IAAIsC,IAAI,CAACuC,MAAM,IAAM,CAACvC,IAAI,CAACtC,QAAQ,IAAIsC,IAAI,CAACjI,MAAM,GAAG,CAAE,EACtE,OAAO,4BAA4B,CAAC,KACnC,IAAK,CAACiI,IAAI,CAACtC,QAAQ,IAAIsC,IAAI,CAACwC,MAAM,CAACC,QAAQ,IAAIzC,IAAI,CAACwC,MAAM,CAACnG,KAAK,MAAM2D,IAAI,CAACuC,MAAM,IAAIvC,IAAI,CAACjI,MAAM,GAAG,CAAC,CAAC,EACtG,OAAO,0BAA0B;IACzC,CAAC,MAAM;MACH,IAAK,CAACiI,IAAI,CAACqmJ,YAAY,CAAC3oJ,QAAQ,IAAIsC,IAAI,CAACqmJ,YAAY,CAAC9jJ,MAAM,IAAM,CAACvC,IAAI,CAACqmJ,YAAY,CAAC3oJ,QAAQ,IAAIsC,IAAI,CAACqmJ,YAAY,CAACtuJ,MAAM,GAAG,CAAE,EAC1H,OAAO,4BAA4B,CAAC,KACnC,IAAK,CAACiI,IAAI,CAACqmJ,YAAY,CAAC3oJ,QAAQ,IAAIsC,IAAI,CAACqmJ,YAAY,CAAC7jJ,MAAM,CAACC,QAAQ,IAAIzC,IAAI,CAACqmJ,YAAY,CAAC7jJ,MAAM,CAACnG,KAAK,MAAM2D,IAAI,CAACqmJ,YAAY,CAAC9jJ,MAAM,IAAIvC,IAAI,CAACqmJ,YAAY,CAACtuJ,MAAM,GAAG,CAAC,CAAC,EACvK,OAAO,0BAA0B;IACzC;EACJ,CAAC;EAEDpG,MAAM,CAACq0K,cAAc,GAAG,SAAS;EACjCr0K,MAAM,CAACs0K,KAAK,GAAG,UAAUzjE,SAAS,EAAE;IAChC,IAAIA,SAAS,KAAK,MAAM,IAAI7wG,MAAM,CAACo7B,IAAI,GAAG,CAAC,EAAE;MACzCp7B,MAAM,CAACo7B,IAAI,IAAI,CAAC;MAChBp7B,MAAM,CAACq0K,cAAc,GAAG,MAAM;MAC9B7zK,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAAC2mK,iBAAiB,GAAG,IAAI;QAC/B3mK,MAAM,CAACu+J,WAAW,GAAG,EAAE;QACvBv+J,MAAM,CAACq0K,cAAc,GAAG,SAAS;QACjCr0K,MAAM,CAACymK,UAAU,CAACzmK,MAAM,CAACo7B,IAAI,CAAC;MAClC,CAAC,EAAE,GAAG,CAAC;IACX;IAEA,IAAIy1E,SAAS,KAAK,OAAO,IAAI7wG,MAAM,CAACo7B,IAAI,GAAGp7B,MAAM,CAACs5B,UAAU,EAAE;MAC1Dt5B,MAAM,CAACo7B,IAAI,IAAI,CAAC;MAChBp7B,MAAM,CAACq0K,cAAc,GAAG,OAAO;MAC/B7zK,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAAC2mK,iBAAiB,GAAG,IAAI;QAC/B3mK,MAAM,CAACu+J,WAAW,GAAG,EAAE;QACvBv+J,MAAM,CAACq0K,cAAc,GAAG,SAAS;QACjCr0K,MAAM,CAACymK,UAAU,CAACzmK,MAAM,CAACo7B,IAAI,CAAC;MAClC,CAAC,EAAE,GAAG,CAAC;IACX;EACJ,CAAC;;EAED;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAGA,SAASm5I,gBAAgBA,CAACxyI,IAAI,EAAE;IAC5B,IAAI9D,cAAc,GAAGtZ,UAAU,CAACzkB,aAAa,CAAC+9B,cAAc,CAAC;IAE7D,IAAIT,SAAS,GAAGtf,WAAW,CAAC80H,YAAY,CAAChzI,MAAM,CAAC4P,WAAW,CAAC;IAC5D,IAAI4wB,YAAY,GAAGxgC,MAAM,CAACysI,eAAe,GAAG9nH,UAAU,CAACod,IAAI,CAAChE,KAAK,CAAC,GAAGpZ,UAAU,CAACod,IAAI,CAAChE,KAAK,CAAC,GAAGxC,YAAY,CAACiC,SAAS,EAAE7Y,UAAU,CAACod,IAAI,CAAChE,KAAK,CAAC,CAAC;;IAE7I;IACA,IAAID,KAAK,GAAGnZ,UAAU,CAACod,IAAI,CAAChE,KAAK,CAAC;IAGlC,IAAIK,EAAE,GAAG;MACLh7B,EAAE,EAAEumB,KAAK,CAACuE,OAAO,CAAC,CAAC;MACnB7R,SAAS,EAAEsN,KAAK,CAACuE,OAAO,CAAC,CAAC;MAC1BxrB,IAAI,EAAEq/B,IAAI,CAACr/B,IAAI;MACfsiB,KAAK,EAAEhB,QAAQ,CAAC+d,IAAI,CAAC/c,KAAK,CAAC;MAC3B+Y,KAAK,EAAED,KAAK;MAAE;MACdkB,SAAS,EAAEra,UAAU,CAACod,IAAI,CAAChE,KAAK,CAAC;MACjChZ,MAAM,EAAEf,QAAQ,CAAC+d,IAAI,CAAC/c,KAAK,CAAC,GAAG8Y,KAAK;MACpCjC,QAAQ,EAAE,CAAC;MAAE;MACb4C,IAAI,EAAE,EAAE;MACRf,GAAG,EAAEnC,YAAY,CAACiC,SAAS,EAAE7Y,UAAU,CAACod,IAAI,CAAChE,KAAK,CAAC,CAAC;MACpD/vB,SAAS,EAAEwvB,SAAS,CAACI,MAAM;MAC3BmB,KAAK,EAAEvB,SAAS;MAChB/5B,aAAa,EAAEw6B,cAAc,GAAIuC,YAAY,GAAGvC,cAAc,GAAGja,QAAQ,CAAC+d,IAAI,CAAC/c,KAAK,CAAC,GAAI,CAAC;MAC1F0Z,oBAAoB,EAAET,cAAc,GAAGA,cAAc,GAAG,CAAC;MACzDU,YAAY,EAAE6B,YAAY;MAC1B5B,OAAO,EAAE,IAAI;MACbC,SAAS,EAAE,IAAI;MACfC,QAAQ,EAAE,YAAY;MACtBG,qBAAqB,EAAEta,UAAU,CAACod,IAAI,CAAChE,KAAK;IAChD,CAAC;IAED,OAAOK,EAAE;EACb;EAEAq/H,QAAQ,CAACp3J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAC3D,IAAIktB,QAAQ,GAAG,EAAE;IACjB,IAAIpxB,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAAC1yB,MAAM,KAAK,CAAC,EAAE;MAE1C,IAAIpG,MAAM,CAACo6E,QAAQ,KAAK,UAAU,EAC9Bp6E,MAAM,CAACysI,eAAe,GAAGvsI,aAAa,CAACwkC,YAAY,KAAK,MAAM;MAClE1kC,MAAM,CAAC8gK,WAAW,GAAG5gK,aAAa,CAACkB,aAAa;MAEhD,IAAIpB,MAAM,CAACu+J,WAAW,IAAIv+J,MAAM,CAACa,UAAU,EAAE;QACzC,IAAIyK,EAAE,GAAGynB,eAAe,CAACuH,MAAM,CAACt6B,MAAM,CAACa,UAAU,CAAC,CAC7CmD,IAAI,CAAC,UAAUqF,GAAG,EAAE;UAEjB;UACArJ,MAAM,CAACugK,WAAW,GAAGl3J,GAAG;UACxBrJ,MAAM,CAACs5B,UAAU,GAAGO,IAAI,CAACW,IAAI,CAACnxB,GAAG,GAAGrJ,MAAM,CAAC4zC,QAAQ,CAAC;UACpD5zC,MAAM,CAACygK,UAAU,GAAG,KAAK;UACzB,OAAO1tI,eAAe,CAACq+D,aAAa,CAACpxF,MAAM,CAACo7B,IAAI,GAAG,CAAC,EAAEp7B,MAAM,CAAC4zC,QAAQ,CAAC;QAC1E,CAAC,CAAC,CACD5vC,IAAI,CAAC,UAAUqF,GAAG,EAAE;UACjBrJ,MAAM,CAACu+J,WAAW,GAAGl1J,GAAG,CAACnF,IAAI;UAC7BlE,MAAM,CAACwgK,WAAW,GAAGn3J,GAAG,CAAC+xB,IAAI;UAC7B;;UAEA56B,QAAQ,CAAC,YAAY;YACjBkgJ,kBAAkB,CAACr0E,cAAc,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC;UACjF,CAAC,EAAE,GAAG,CAAC;QACX,CAAC,CAAC;QAENj7C,QAAQ,CAAC/qB,IAAI,CAACiF,EAAE,CAAC;MACrB,CAAC,MAAM,IAAItL,MAAM,CAACud,UAAU,IAAI,UAAU,EAAE;QACxCvd,MAAM,CAACu+J,WAAW,GAAG,EAAE;MAC3B;MAGAz6J,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;QACxD,IAAIA,EAAE,CAACg/B,OAAO,KAAK,KAAK,IAAIh/B,EAAE,CAACi/B,SAAS,KAAK,KAAK,EAAE;UAChD,IAAIj/B,EAAE,CAACk/B,QAAQ,KAAK,YAAY,EAAE;YAC9B,IAAI01I,GAAG,GAAGzhJ,eAAe,CAACi9D,cAAc,CAACpwF,EAAE,CAACyc,SAAS,CAAC,CAACrY,IAAI,CAAC,UAAUC,IAAI,EAAE;cACxE,IAAIwwK,SAAS,GAAGxwK,IAAI,CAACC,IAAI,CAAC,CAAC,CAAC;cAC5B,IAAIuwK,SAAS,IAAIA,SAAS,CAAC/0I,WAAW,KAAK,UAAU,EAAE;gBAEnD,IAAI+0I,SAAS,CAACjgJ,aAAa,KAAK,MAAM,IAAIigJ,SAAS,CAACjgJ,aAAa,KAAK,IAAI,IAAIigJ,SAAS,CAACjgJ,aAAa,KAAK,MAAM,EAAE;kBAC9Gx0B,MAAM,CAAC8nK,4BAA4B,GAAG;oBAClCrzI,cAAc,EAAE;kBACpB,CAAC;gBACL,CAAC,MAAM;kBACHz0B,MAAM,CAAC8nK,4BAA4B,GAAG,IAAI;gBAC9C;gBAEA,IAAI4M,WAAW,GAAG10K,MAAM,CAAC2kK,cAAc,CAAC8P,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC;gBAC9D,IAAIE,UAAU,GAAG70K,OAAO,CAAC+F,IAAI,CAAC6uK,WAAW,CAAC;gBAC1C,IAAIE,eAAe,GAAG50K,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAACz1B,GAAG,CAAC,CAAC2tI,eAAe;gBAC3E,IAAIrpI,EAAE,GAAGxK,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAACz1B,GAAG,CAAC,CAAC9C,EAAE;gBACjDuxK,UAAU,CAAC3vJ,KAAK,GAAGplB,EAAE,CAAColB,KAAK;gBAC3B2vJ,UAAU,CAACh1I,YAAY,GAAG//B,EAAE,CAAC+/B,YAAY;gBAEzC,IAAI//B,EAAE,CAAC02I,kBAAkB,KAAK,OAAO,EAAE;kBACnC,IAAIx7G,4FAAuB,CAAC+5I,iBAAiB,CAAC70K,MAAM,CAAC4P,WAAW,CAAC,EAAE;oBAC/D+kK,UAAU,CAACr+B,kBAAkB,GAAG12I,EAAE,CAAC02I,kBAAkB;oBACrDq+B,UAAU,CAAC11I,qBAAqB,GAAGr/B,EAAE,CAACq/B,qBAAqB;oBAC3D01I,UAAU,CAACpxI,WAAW,GAAG3jC,EAAE,CAAC2jC,WAAW;oBACvCoxI,UAAU,CAACnxI,cAAc,GAAG5jC,EAAE,CAAC4jC,cAAc;oBAC7CmxI,UAAU,CAAC94I,QAAQ,GAAGj8B,EAAE,CAACi8B,QAAQ;oBACjC84I,UAAU,CAAC/jC,YAAY,GAAGhxI,EAAE,CAACgxI,YAAY;oBACzC+jC,UAAU,CAAC31I,SAAS,GAAGp/B,EAAE,CAACo/B,SAAS;oBACnC21I,UAAU,CAACrxI,UAAU,GAAG1jC,EAAE,CAAC0jC,UAAU;oBACrCqxI,UAAU,CAACj2I,oBAAoB,GAAG9+B,EAAE,CAAC8+B,oBAAoB;oBACzDi2I,UAAU,CAACr0I,YAAY,GAAG1gC,EAAE,CAAC0gC,YAAY;kBAC7C,CAAC,MAAM;oBACHq0I,UAAU,CAACr+B,kBAAkB,GAAG12I,EAAE,CAAC02I,kBAAkB;oBACrDq+B,UAAU,CAAC11I,qBAAqB,GAAGr/B,EAAE,CAACq/B,qBAAqB;oBAC3D01I,UAAU,CAAC5vJ,MAAM,GAAGnlB,EAAE,CAACmlB,MAAM;oBAC7B4vJ,UAAU,CAAC94I,QAAQ,GAAGj8B,EAAE,CAACi8B,QAAQ;oBACjC84I,UAAU,CAAC1pC,mBAAmB,GAAGrrI,EAAE,CAACqrI,mBAAmB;oBACvD0pC,UAAU,CAAC93I,YAAY,GAAGj9B,EAAE,CAACi9B,YAAY;oBACzC83I,UAAU,CAAC52I,KAAK,GAAGn+B,EAAE,CAACm+B,KAAK;oBAC3B42I,UAAU,CAACjyI,iBAAiB,GAAG9iC,EAAE,CAAC8iC,iBAAiB;oBACnDiyI,UAAU,CAACj3I,GAAG,GAAG99B,EAAE,CAAC89B,GAAG;oBACvBi3I,UAAU,CAACh2I,YAAY,GAAG/+B,EAAE,CAAC++B,YAAY;oBACzCg2I,UAAU,CAAClxK,aAAa,GAAG7D,EAAE,CAAC6D,aAAa;kBAC/C;gBACJ;gBAEAzD,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAACz1B,GAAG,CAAC,GAAGyuK,UAAU;gBAClD30K,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAACz1B,GAAG,CAAC,CAAC2tI,eAAe,GAAG+gC,eAAe;gBACvE50K,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAACz1B,GAAG,CAAC,CAAC9C,EAAE,GAAGoH,EAAE;gBAC7CxK,MAAM,CAACyoK,eAAe,CAACkM,UAAU,CAAC;cACtC;YACJ,CAAC,CAAC;YACFvjJ,QAAQ,CAAC/qB,IAAI,CAACmuK,GAAG,CAAC;UACtB;QACJ;MACJ,CAAC,CAAC;MACFx0K,MAAM,CAAC8nK,4BAA4B,GAAG,IAAI;IAC9C;IAEA,IAAI,CAAC,CAAC5jK,IAAI,CAAC8+J,iBAAiB,IAAI,CAAC9+J,IAAI,CAAC8+J,iBAAiB,EAAE;MACrD,IAAI8R,GAAG,GAAGvxF,cAAc,CAACkgB,kBAAkB,CAAC,KAAK,CAAC,CAACz/F,IAAI,CAAC,UAAUC,IAAI,EAAE;QAEpE,IAAI+gJ,cAAc,GAAG,0BAA0B;QAC/C,IAAI1wF,QAAQ,GAAGrwD,IAAI,CAAC+0F,QAAQ,CAAC1+D,MAAM,CAAC,4BAA4B,CAAC;QACjE,IAAI7S,MAAM,GAAG,CAACxjB,IAAI,CAAC+0F,QAAQ,CAACtvF,KAAK,CAAC,CAAC,EAAE4qD,QAAQ,CAAC,EAAE0wF,cAAc,EAAE/gJ,IAAI,CAAC+0F,QAAQ,CAACtvF,KAAK,CAAC4qD,QAAQ,CAAC,CAAC,CAAC3/C,IAAI,CAAC,EAAE,CAAC;QAEvG,IAAI0xG,cAAc,GAAG,gSAAgS;QACrT5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,4CAA4C,EAAE0mG,cAAc,CAAC;QACrF,IAAIA,cAAc,GAAG,qSAAqS;QAC1T5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,6CAA6C,EAAE0mG,cAAc,CAAC;QAEtF,IAAIA,cAAc,GAAG,mWAAmW;QACxX5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,8CAA8C,EAAE0mG,cAAc,CAAC;QACvF,IAAIA,cAAc,GAAG,sWAAsW;QAC3X5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,+CAA+C,EAAE0mG,cAAc,CAAC;QACxF,IAAIA,cAAc,GAAG,iYAAiY;QACtZ5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,wDAAwD,EAAE0mG,cAAc,CAAC;QACjG,IAAIA,cAAc,GAAG,mWAAmW;QACxX5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,8CAA8C,EAAE0mG,cAAc,CAAC;QACvF,IAAIA,cAAc,GAAG,mWAAmW;QACxX5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,8CAA8C,EAAE0mG,cAAc,CAAC;QAEvFrmH,MAAM,CAAC81H,eAAe,GAAGruG,MAAM;QAE/B,IAAIxjB,IAAI,CAACy/F,aAAa,EAAE;UACpBpvC,QAAQ,GAAGrwD,IAAI,CAACy/F,aAAa,CAACppE,MAAM,CAAC,4BAA4B,CAAC;UAClE7S,MAAM,GAAG,CAACxjB,IAAI,CAACy/F,aAAa,CAACh6F,KAAK,CAAC,CAAC,EAAE4qD,QAAQ,CAAC,EAAE0wF,cAAc,EAAE/gJ,IAAI,CAACy/F,aAAa,CAACh6F,KAAK,CAAC4qD,QAAQ,CAAC,CAAC,CAAC3/C,IAAI,CAAC,EAAE,CAAC;UAE7G,IAAI0xG,cAAc,GAAG,sEAAsE;UAC3F5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,4CAA4C,EAAE0mG,cAAc,CAAC;UACrF,IAAIA,cAAc,GAAG,uEAAuE;UAC5F5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,6CAA6C,EAAE0mG,cAAc,CAAC;UAEtF,IAAIA,cAAc,GAAG,uGAAuG;UAC5H5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,0CAA0C,EAAE0mG,cAAc,CAAC;UACnF,IAAIA,cAAc,GAAG,wGAAwG;UAC7H5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,2CAA2C,EAAE0mG,cAAc,CAAC;UACpF,IAAIA,cAAc,GAAG,iHAAiH;UACtI5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,oDAAoD,EAAE0mG,cAAc,CAAC;UAC7F,IAAIA,cAAc,GAAG,uGAAuG;UAC5H5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,0CAA0C,EAAE0mG,cAAc,CAAC;UACnF,IAAIA,cAAc,GAAG,uGAAuG;UAC5H5+F,MAAM,GAAGA,MAAM,CAAC9H,OAAO,CAAC,0CAA0C,EAAE0mG,cAAc,CAAC;UAEnFrmH,MAAM,CAAC+1H,oBAAoB,GAAGtuG,MAAM;QACxC,CAAC,MAAM;UACHznB,MAAM,CAAC+1H,oBAAoB,GAAGtuG,MAAM;QACxC;QAEAznB,MAAM,CAACg2H,mBAAmB,GAAG/xH,IAAI,CAAC0/F,YAAY;QAC9C3jG,MAAM,CAACilJ,iBAAiB,GAAGhhJ,IAAI,CAAC2/F,UAAU;MAC9C,CAAC,CAAC;MAEFxyE,QAAQ,CAAC/qB,IAAI,CAACyuK,GAAG,CAAC;IACtB;IAEA,OAAOpjJ,OAAO,CAACC,GAAG,CAACP,QAAQ,CAAC,CAACptB,IAAI,CAAC,YAAY;MAC1CF,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAIH,IAAI,CAACk3D,KAAK,EACVl3D,IAAI,CAACk3D,KAAK,CAACA,KAAK,CAAC,MAAM,CAAC;MAC5Bl3D,IAAI,CAACk3D,KAAK,GAAG,IAAI;IACrB,CAAC,EAAE,UAAUj3D,GAAG,EAAE;MACdL,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAIH,IAAI,CAACk3D,KAAK,EACVl3D,IAAI,CAACk3D,KAAK,CAACA,KAAK,CAAC,MAAM,CAAC;MAC5Bl3D,IAAI,CAACk3D,KAAK,GAAG,IAAI;MACjBj7D,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC,CAAC,CAAC;EAEHs5J,QAAQ,CAACp3J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,YAAY,EAAE,UAAUkf,CAAC,EAAErd,IAAI,EAAE;IACtDlE,MAAM,CAAC06J,SAAS,CAAC,CAAC;IAClB16J,MAAM,CAACu+J,WAAW,GAAG,EAAE;IACvBv+J,MAAM,CAACa,UAAU,GAAG,IAAI;EAC5B,CAAC,CAAC,CAAC;EAEH48J,QAAQ,CAACp3J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,kBAAkB,EAAE,UAAUC,KAAK,EAAE4B,IAAI,EAAE;IAChE+/E,qBAAqB,CAACpoB,MAAM,CAAC77D,MAAM,EAAEA,MAAM,CAACmB,IAAI,IAAI,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;EACvF,CAAC,CAAC,CAAC;EAEHs8J,QAAQ,CAACp3J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,YAAY;IAChD4hF,qBAAqB,CAACpoB,MAAM,CAAC77D,MAAM,EAAE,MAAM,CAAC;EAChD,CAAC,CAAC,CAAC;EAEHA,MAAM,CAAC+0K,wBAAwB,GAAG,KAAK;EACvC/0K,MAAM,CAACg1K,uBAAuB,GAAG,KAAK;EAEtCh1K,MAAM,CAACi1K,mBAAmB,GAAG,YAAY;IACpD,IAAI,CAACj1K,MAAM,CAAC4P,WAAW,IAAI,OAAO5P,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,KAAK,QAAQ,EAAE;MACtD;IACJ;IACA,IAAI0tG,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;IACnE,IAAIslK,SAAS,GAAGzuC,SAAS,GAAG5sG,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAAC4P,WAAW,CAACmpB,KAAK,CAAC,GACnEc,IAAI,CAACD,GAAG,CAAC55B,MAAM,CAACohC,QAAQ,CAACphC,MAAM,CAAC4P,WAAW,EAAE,IAAI,CAAC,CAAC;IAE9C,IAAIslK,SAAS,GAAG30K,SAAS,CAACy0C,oBAAoB,EAAE;MAC5C,IAAI,CAACh1C,MAAM,CAACg1K,uBAAuB,EAAE;QACjCh1K,MAAM,CAAC+0K,wBAAwB,GAAG,IAAI;QACtC/0K,MAAM,CAACg1K,uBAAuB,GAAG,IAAI;QAErC,IAAIt8I,YAAY,GAAGj4B,cAAc,CAACe,SAAS,CACvC,qEAAqE,EAAE;UACvE0qB,KAAK,EAAElC,OAAO,CAAC,UAAU,CAAC,CAACkrJ,SAAS,CAAC;UACrCC,QAAQ,EAAEnrJ,OAAO,CAAC,UAAU,CAAC,CAACzpB,SAAS,CAACy0C,oBAAoB;QAChE,CAAC,CAAC;QAEF70C,YAAY,CAACiE,SAAS,CAACs0B,YAAY,EAAE,YAAM;UACvC14B,MAAM,CAACg1K,uBAAuB,GAAG,KAAK;QAC1C,CAAC,EAAEv0K,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;MACzD;IACJ,CAAC,MAAM;MACHxB,MAAM,CAAC+0K,wBAAwB,GAAG,KAAK;MACvC/0K,MAAM,CAACg1K,uBAAuB,GAAG,KAAK;IAC1C;EACJ,CAAC;;EAED;EACAvX,QAAQ,CAACp3J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,aAAa,EAAE,YAAY;IAChDrC,MAAM,CAACi1K,mBAAmB,CAAC,CAAC;EAEhC,CAAC,CAAC,CAAC;;EAEH;;EAEAj1K,MAAM,CAACglK,kBAAkB,GAAG;IACxB55E,SAAS,EAAE,IAAI;IACf91B,QAAQ,EAAE,KAAK;IACfsH,OAAO,EAAE,IAAI;IACbC,OAAO,EAAE,IAAI;IACbC,OAAO,EAAE,IAAI;IACblzD,IAAI,EAAE,IAAI;IACV40F,GAAG,EAAE,IAAI;IACTgnE,SAAS,EAAE,EAAE;IACb4P,gBAAgB,EAAE,EAAE;IACpBC,UAAU,EAAE,IAAI;IAChBC,WAAW,EAAE,EAAE;IACfC,SAAS,EAAE,IAAI;IACfC,UAAU,EAAE,EAAE;IACdC,aAAa,EAAE,IAAI;IACnBC,cAAc,EAAE,EAAE;IAClBC,aAAa,EAAE,IAAI;IACnBC,cAAc,EAAE,EAAE;IAClBC,aAAa,EAAE,IAAI;IACnBC,cAAc,EAAE,EAAE;IAClBC,YAAY,EAAE,IAAI;IAClBC,aAAa,EAAE;EACnB,CAAC;EAEDh2K,MAAM,CAACmB,IAAI,GAAG,MAAM;EACpBnB,MAAM,CAACi2K,WAAW,GAAG,UAAUzpK,CAAC,EAAE8N,CAAC,EAAE;IACjC,IAAI9N,CAAC,CAAC+I,KAAK,IAAI,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI+E,CAAC,CAAC/E,KAAK,IAAI,IAAI,EAAE,OAAO,CAAC;IAE7B,IAAI/I,CAAC,CAAC5C,IAAI,GAAG0Q,CAAC,CAAC1Q,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAC1B,IAAI4C,CAAC,CAAC5C,IAAI,GAAG0Q,CAAC,CAAC1Q,IAAI,EAAE,OAAO,CAAC;IAElC,OAAO,CAAC;EACZ,CAAC;EAED5J,MAAM,CAACk2K,mBAAmB,GAAG,CAAC,CAAC,CAAC;;EAEhCl2K,MAAM,CAACm2K,oBAAoB,GAAG,CAAC;EAC/Bn2K,MAAM,CAACo2K,qBAAqB,GAAG,CAAC;EAEhC3Y,QAAQ,CAACp3J,IAAI,CAACrG,MAAM,CAACqC,GAAG,CAAC,0BAA0B,EAAE,UAAU2W,GAAG,EAAEuG,IAAI,EAAE;IAEtEvf,MAAM,CAACm2K,oBAAoB,GAAG,CAAC;IAC/Bn2K,MAAM,CAACo2K,qBAAqB,GAAG,CAAC;IAEhCp2K,MAAM,CAACglK,kBAAkB,GAAGlhK,CAAC,CAAC2L,MAAM,CAACzP,MAAM,CAACglK,kBAAkB,EAAEzlJ,IAAI,CAAC;IACrE,IAAIq4H,UAAU,GAAG,CAAC,CAAC;IAEnB,IAAI53I,MAAM,CAACglK,kBAAkB,CAAC1vG,QAAQ,EAAE;MACpCsiF,UAAU,CAACp5G,QAAQ,GAAGx+B,MAAM,CAACglK,kBAAkB,CAAC55E,SAAS;MACzD,IAAI,CAAC,CAAC7rE,IAAI,CAACq9C,OAAO,EACdg7E,UAAU,CAACt4G,OAAO,GAAG/f,IAAI,CAACq9C,OAAO;MACrC,IAAI,CAAC,CAACr9C,IAAI,CAACs9C,OAAO,EACd+6E,UAAU,CAACr4G,OAAO,GAAGhgB,IAAI,CAACs9C,OAAO;MACrC,IAAI,CAAC,CAACt9C,IAAI,CAACu9C,OAAO,EACd86E,UAAU,CAACp4G,OAAO,GAAGjgB,IAAI,CAACu9C,OAAO;IACzC,CAAC,MACG86E,UAAU,CAACv7H,SAAS,GAAGrc,MAAM,CAACglK,kBAAkB,CAAC55E,SAAS;IAG9DtnF,CAAC,CAACC,OAAO,CAAC,CAAC;IACXma,WAAW,CAACy5H,sBAAsB,CAACC,UAAU,CAAC,CAAC5zI,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAC3DrJ,MAAM,CAACglK,kBAAkB,CAACQ,SAAS,GAAG,EAAE;MACxCxlK,MAAM,CAACglK,kBAAkB,CAACoQ,gBAAgB,GAAG,EAAE;MAC/Cp1K,MAAM,CAACglK,kBAAkB,CAACsQ,WAAW,GAAG,EAAE;MAC1Ct1K,MAAM,CAACglK,kBAAkB,CAACwQ,UAAU,GAAG,EAAE;MACzCx1K,MAAM,CAACglK,kBAAkB,CAAC0Q,cAAc,GAAG,EAAE;MAC7C11K,MAAM,CAACglK,kBAAkB,CAAC4Q,cAAc,GAAG,EAAE;MAC7C51K,MAAM,CAACglK,kBAAkB,CAAC8Q,cAAc,GAAG,EAAE;MAC7C91K,MAAM,CAACglK,kBAAkB,CAACgR,aAAa,GAAG,EAAE;MAC5Ch2K,MAAM,CAACglK,kBAAkB,CAACqR,WAAW,GAAGhtK,GAAG,IAAIA,GAAG,CAACnF,IAAI,IAAImF,GAAG,CAACnF,IAAI,CAACkC,MAAM,GAAG,CAAC,GAAGiD,GAAG,CAACnF,IAAI,CAAC,CAAC,CAAC,CAACm/G,WAAW,GAAG,IAAI;MAC/GrjH,MAAM,CAACglK,kBAAkB,CAACsR,eAAe,GAAGp2K,aAAa,CAACq2K,eAAe;MAEzEv2K,MAAM,CAACw2K,sBAAsB,GAAG,IAAI;MACpC,IAAIpR,QAAQ,GAAG,CAAC;MAEhB,IAAIqR,WAAW,GAAG,CAAC,CAAC;MACpB,IAAIC,UAAU,GAAG,CAAC,CAAC;MACnB,IAAIC,cAAc,GAAG,CAAC,CAAC;MACvB,IAAIC,cAAc,GAAG,CAAC,CAAC;MACvB,IAAIC,cAAc,GAAG,CAAC,CAAC;MACvB,IAAIC,aAAa,GAAG,CAAC,CAAC;MAEtBhzK,CAAC,CAACmC,IAAI,CAACoD,GAAG,CAACnF,IAAI,EAAE,UAAUgC,GAAG,EAAEtG,EAAE,EAAE;QAChC,IAAIwlK,QAAQ,GAAG,CAAC,IAAI,CAAC,CAACxlK,EAAE,CAAC0/B,OAAO,EAC5B8lI,QAAQ,GAAG,CAAC;QAChB,IAAIA,QAAQ,GAAG,CAAC,IAAI,CAAC,CAACxlK,EAAE,CAAC2/B,OAAO,EAC5B6lI,QAAQ,GAAG,CAAC;QAChB,IAAIA,QAAQ,GAAG,CAAC,IAAI,CAAC,CAACxlK,EAAE,CAAC4/B,OAAO,EAC5B4lI,QAAQ,GAAG,CAAC;QAEhBqR,WAAW,CAAC72K,EAAE,CAAC8C,IAAI,CAAC,GAAG;UACnBkH,IAAI,EAAEhK,EAAE,CAAC8C,IAAI;UACb6S,KAAK,EAAE3V,EAAE,CAAC8C;QACd,CAAC;QACDg0K,UAAU,CAAC92K,EAAE,CAAC6a,WAAW,CAAC,GAAG;UACzB7Q,IAAI,EAAEhK,EAAE,CAAC6a,WAAW;UACpBlF,KAAK,EAAE3V,EAAE,CAAC6a;QACd,CAAC;QACDk8J,cAAc,CAAC/2K,EAAE,CAAC0/B,OAAO,CAAC,GAAG;UACzB11B,IAAI,EAAEhK,EAAE,CAAC0/B,OAAO;UAChB/pB,KAAK,EAAE3V,EAAE,CAAC0/B;QACd,CAAC;QACDs3I,cAAc,CAACh3K,EAAE,CAAC2/B,OAAO,CAAC,GAAG;UACzB31B,IAAI,EAAEhK,EAAE,CAAC2/B,OAAO;UAChBhqB,KAAK,EAAE3V,EAAE,CAAC2/B;QACd,CAAC;QACDs3I,cAAc,CAACj3K,EAAE,CAAC4/B,OAAO,CAAC,GAAG;UACzB51B,IAAI,EAAEhK,EAAE,CAAC4/B,OAAO;UAChBjqB,KAAK,EAAE3V,EAAE,CAAC4/B;QACd,CAAC;QACDs3I,aAAa,CAACl3K,EAAE,CAAC2gD,eAAe,CAAC,GAAG;UAChC32C,IAAI,EAAEhK,EAAE,CAAC2gD,eAAe;UACxBhrC,KAAK,EAAE3V,EAAE,CAAC2gD;QACd,CAAC;MACL,CAAC,CAAC;MAEFvgD,MAAM,CAACglK,kBAAkB,CAACsQ,WAAW,CAACjvK,IAAI,CAAC;QACvCuD,IAAI,EAAE,WAAW;QACjB2L,KAAK,EAAE;MACX,CAAC,CAAC;MACF,KAAK,IAAIf,CAAC,IAAIiiK,WAAW,EACrBz2K,MAAM,CAACglK,kBAAkB,CAACsQ,WAAW,CAACjvK,IAAI,CAACowK,WAAW,CAACjiK,CAAC,CAAC,CAAC;MAE9DxU,MAAM,CAACglK,kBAAkB,CAACsQ,WAAW,CAAC30H,IAAI,CAAC3gD,MAAM,CAACi2K,WAAW,CAAC;MAE9Dj2K,MAAM,CAACglK,kBAAkB,CAACwQ,UAAU,CAACnvK,IAAI,CAAC;QACtCuD,IAAI,EAAE,SAAS;QACf2L,KAAK,EAAE;MACX,CAAC,CAAC;MACF,KAAK,IAAIf,CAAC,IAAIkiK,UAAU,EACpB12K,MAAM,CAACglK,kBAAkB,CAACwQ,UAAU,CAACnvK,IAAI,CAACqwK,UAAU,CAACliK,CAAC,CAAC,CAAC;MAE5DxU,MAAM,CAACglK,kBAAkB,CAACwQ,UAAU,CAAC70H,IAAI,CAAC3gD,MAAM,CAACi2K,WAAW,CAAC;MAE7Dj2K,MAAM,CAACglK,kBAAkB,CAAC0Q,cAAc,CAACrvK,IAAI,CAAC;QAC1CuD,IAAI,EAAE,MAAM,GAAG5J,MAAM,CAACglK,kBAAkB,CAACC,WAAW;QACpD1vJ,KAAK,EAAE;MACX,CAAC,CAAC;MACF,KAAK,IAAIf,CAAC,IAAImiK,cAAc,EACxB32K,MAAM,CAACglK,kBAAkB,CAAC0Q,cAAc,CAACrvK,IAAI,CAACswK,cAAc,CAACniK,CAAC,CAAC,CAAC;MAEpExU,MAAM,CAACglK,kBAAkB,CAAC0Q,cAAc,CAAC/0H,IAAI,CAAC3gD,MAAM,CAACi2K,WAAW,CAAC;MAEjEj2K,MAAM,CAACglK,kBAAkB,CAAC4Q,cAAc,CAACvvK,IAAI,CAAC;QAC1CuD,IAAI,EAAE,MAAM,GAAG5J,MAAM,CAACglK,kBAAkB,CAACE,WAAW;QACpD3vJ,KAAK,EAAE;MACX,CAAC,CAAC;MACF,KAAK,IAAIf,CAAC,IAAIoiK,cAAc,EACxB52K,MAAM,CAACglK,kBAAkB,CAAC4Q,cAAc,CAACvvK,IAAI,CAACuwK,cAAc,CAACpiK,CAAC,CAAC,CAAC;MAEpExU,MAAM,CAACglK,kBAAkB,CAAC4Q,cAAc,CAACj1H,IAAI,CAAC3gD,MAAM,CAACi2K,WAAW,CAAC;MAEjEj2K,MAAM,CAACglK,kBAAkB,CAAC8Q,cAAc,CAACzvK,IAAI,CAAC;QAC1CuD,IAAI,EAAE,MAAM,GAAG5J,MAAM,CAACglK,kBAAkB,CAACG,WAAW;QACpD5vJ,KAAK,EAAE;MACX,CAAC,CAAC;MACF,KAAK,IAAIf,CAAC,IAAIqiK,cAAc,EACxB72K,MAAM,CAACglK,kBAAkB,CAAC8Q,cAAc,CAACzvK,IAAI,CAACwwK,cAAc,CAACriK,CAAC,CAAC,CAAC;MAEpExU,MAAM,CAACglK,kBAAkB,CAAC8Q,cAAc,CAACn1H,IAAI,CAAC3gD,MAAM,CAACi2K,WAAW,CAAC;MAEjEj2K,MAAM,CAACglK,kBAAkB,CAACgR,aAAa,CAAC3vK,IAAI,CAAC;QACzCuD,IAAI,EAAE,aAAa;QACnB2L,KAAK,EAAE;MACX,CAAC,CAAC;MACF,KAAK,IAAIf,CAAC,IAAIsiK,aAAa,EACvB92K,MAAM,CAACglK,kBAAkB,CAACgR,aAAa,CAAC3vK,IAAI,CAACywK,aAAa,CAACtiK,CAAC,CAAC,CAAC;MAElExU,MAAM,CAACglK,kBAAkB,CAACgR,aAAa,CAACr1H,IAAI,CAAC3gD,MAAM,CAACi2K,WAAW,CAAC;MAEhEj2K,MAAM,CAACglK,kBAAkB,CAACI,QAAQ,GAAGA,QAAQ;MAE7CplK,MAAM,CAACglK,kBAAkB,CAACQ,SAAS,GAAGn8J,GAAG,CAACnF,IAAI;MAC9ClE,MAAM,CAACglK,kBAAkB,CAACoQ,gBAAgB,GAAG,EAAE,CAAC3jK,MAAM,CAACpI,GAAG,CAACnF,IAAI,CAAC;MAChElE,MAAM,CAACo2K,qBAAqB,GAAGp2K,MAAM,CAACglK,kBAAkB,CAACoQ,gBAAgB,CAAChvK,MAAM;MAChFpG,MAAM,CAACmB,IAAI,GAAG,cAAc;MAC5BnB,MAAM,CAAC+2K,yBAAyB,CAAC,CAAC;MAClCv2K,QAAQ,CAAC,YAAY;QACjBsD,CAAC,CAAC,2BAA2B,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;QACjDV,CAAC,CAAC,0BAA0B,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;QAChDV,CAAC,CAAC,8BAA8B,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;QACpDV,CAAC,CAAC,8BAA8B,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;QACpDV,CAAC,CAAC,8BAA8B,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;QACpDV,CAAC,CAAC,6BAA6B,CAAC,CAACU,OAAO,CAAC,SAAS,CAAC;QACnD;MAEJ,CAAC,EAAE,CAAC,CAAC;MACLV,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC,SACI,CAAC,UAAUF,GAAG,EAAE;MAClBnE,MAAM,CAACglK,kBAAkB,CAACI,QAAQ,GAAG,CAAC;MACtCthK,CAAC,CAACO,SAAS,CAAC,CAAC;MACbrE,MAAM,CAACmB,IAAI,GAAG,cAAc;MAC5BhB,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;IAC/B,CAAC,CAAC;EAEV,CAAC,CAAC,CAAC;EAEHnE,MAAM,CAAC+2K,yBAAyB,GAAG,YAAY;IAC3C/2K,MAAM,CAACgL,UAAU,CAAC,oBAAoB,CAAC;EAC3C,CAAC;EAEDhL,MAAM,CAACg3K,gBAAgB,CAAC,qCAAqC,EAAE,UAAUC,MAAM,EAAEC,MAAM,EAAErkH,KAAK,EAAE;IAC5FA,KAAK,CAACkkH,yBAAyB,CAAC,CAAC;EACrC,CAAC,CAAC;EAEF/2K,MAAM,CAACqB,QAAQ,GAAG,YAAY;IAC1B,OAAOnB,aAAa,CAACmB,QAAQ,KAAK,IAAI;EAC1C,CAAC;EAEDb,QAAQ,CAAC,YAAY;IACjB0E,WAAW,CAAC,CAAC;IACbpB,CAAC,CAAC,kBAAkB,CAAC,CAACsZ,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;EACnD,CAAC,EAAE,CAAC,CAAC;EAELpd,MAAM,CAACm3K,oBAAoB,GAAG,UAAU97I,KAAK,EAAE;IAC3C,IAAI,CAACr7B,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EACjC,OAAO,EAAE;IAEb,IAAIy7I,IAAI,GAAG,EAAE;IACb,IAAIp3K,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAACv1B,MAAM,IAAIi1B,KAAK,EAChD+7I,IAAI,GAAGp3K,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAAC,KAExCy7I,IAAI,GAAGp3K,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAACjyB,KAAK,CAAC1J,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAACv1B,MAAM,GAAGi1B,KAAK,CAAC;IAElGv7B,OAAO,CAAC4M,OAAO,CAAC0qK,IAAI,EAAE,UAAUx3K,EAAE,EAAE;MAChC,IAAIy3K,EAAE,GAAG,EAAE;MACX,IAAI,CAAC,CAACz3K,EAAE,CAAC0/B,OAAO,IAAI1/B,EAAE,CAAC0/B,OAAO,CAACl5B,MAAM,GAAG,CAAC,EACrCixK,EAAE,CAAChxK,IAAI,CAACzG,EAAE,CAAC0/B,OAAO,CAAC;MACvB,IAAI,CAAC,CAAC1/B,EAAE,CAAC2/B,OAAO,IAAI3/B,EAAE,CAAC2/B,OAAO,CAACn5B,MAAM,GAAG,CAAC,EACrCixK,EAAE,CAAChxK,IAAI,CAACzG,EAAE,CAAC2/B,OAAO,CAAC;MACvB,IAAI,CAAC,CAAC3/B,EAAE,CAAC4/B,OAAO,IAAI5/B,EAAE,CAAC4/B,OAAO,CAACp5B,MAAM,GAAG,CAAC,EACrCixK,EAAE,CAAChxK,IAAI,CAACzG,EAAE,CAAC4/B,OAAO,CAAC;MAEvB5/B,EAAE,CAAC03K,UAAU,GAAGD,EAAE,CAAC1iK,IAAI,CAAC,KAAK,CAAC;IAClC,CAAC,CAAC;IAEF,OAAOyiK,IAAI;EACf,CAAC;EAEDp3K,MAAM,CAACu3K,2BAA2B,GAAG,IAAI;;EAEzC;EACA;EACAv3K,MAAM,CAACw3K,4BAA4B,GAAG,YAAY;IAC9Cn3K,aAAa,CAAC8E,UAAU,CAAC,qBAAqB,CAAC;IAE/C,IAAInF,MAAM,CAACu3K,2BAA2B,EAAE;MACpCv3K,MAAM,CAACu3K,2BAA2B,GAAG,KAAK;IAC9C;EACJ,CAAC;EAEDv3K,MAAM,CAACy3K,gBAAgB,GAAG,IAAI;EAC9Bz3K,MAAM,CAAC03K,gBAAgB,GAAG,UAAUx9J,GAAG,EAAE;IACrCla,MAAM,CAACy3K,gBAAgB,GAAGv9J,GAAG;IAC7Bla,MAAM,CAAC8sD,UAAU,GAAG,gBAAgB;IACpCzsD,aAAa,CAACq6B,gBAAgB,CAACj6B,cAAc,CAACe,SAAS,CAAC,SAAS,CAAC,EAC7Df,cAAc,CAACe,SAAS,CAAC,2BAA2B,CAAC,GAAG0Y,GAAG,CAAC4mB,eAAe,GAAG,IAAI,GAAG9W,OAAO,CAAC,UAAU,CAAC,CAAC9P,GAAG,CAAC6K,MAAM,CAAC,GAAG,GAAI,CAAC;EACrI,CAAC;EAED/kB,MAAM,CAACmnK,aAAa,GAAG,YAAY;IAC/BrjK,CAAC,CAACC,OAAO,CAAC,CAAC;IACX,IAAImW,GAAG,GAAGla,MAAM,CAACy3K,gBAAgB;IAEjC,IAAIE,cAAc,GAAG;MACjBhxC,aAAa,EAAE;QACX7tG,QAAQ,EAAE,CAAC5e,GAAG;MAClB;IACJ,CAAC;IAED,IAAI1K,CAAC,GAAG7O,EAAE,CAAC6K,KAAK,CAAC,CAAC;IAClBgE,CAAC,CAAC/D,OAAO,CAAC,IAAI,CAAC;IACf,IAAIy3B,CAAC,GAAG1zB,CAAC,CAAC9D,OAAO;IAEjB,IAAMtE,KAAK,GAAGpH,MAAM;IACpB,IAAIw0G,OAAO,GAAG,CAAC,CAAC;IAChB,IAAIt6F,GAAG,CAAC4mB,eAAe,IAAI,aAAa,EAAE;MACtC0zE,OAAO,CAAClxB,cAAc,CAAC6qE,UAAU,CAACj0I,GAAG,CAAC6pB,mBAAmB,EAAE7pB,GAAG,CAACqxH,mBAAmB,CAAC,CAAC,GAAG;QACnF9mH,MAAM,EAAEvK,GAAG,CAAC6K;MAChB,CAAC;MAEDme,CAAC,GAAGA,CAAC,CAACl/B,IAAI,CAAC,UAAUqF,GAAG,EAAE;QACtB,OAAOi6E,cAAc,CAAClhD,MAAM,CAACu1I,cAAc,EAAEnjE,OAAO,EAAEx0G,MAAM,EAAE;UAC1Ds4B,WAAW,EAAEt4B,MAAM,CAAC4P,WAAW,CAAC8sB,gBAAgB;UAChD8zH,eAAe,EAAE,SAAjBA,eAAeA,CAAYj1D,IAAI,EAAErzF,IAAI,EAAEg7B,CAAC,EAAE;YACtC,OAAOrrB,YAAY,CAACimG,uBAAuB,CAAC12G,KAAK,EAAEm0F,IAAI,EAAErzF,IAAI,EAAEg7B,CAAC,CAAC;UACrE,CAAC;UACD5/B,QAAQ,EAAEpD,aAAa,CAACqD;QAC5B,CAAC,CAAC;MACN,CAAC,CAAC;IACN;IAEA2/B,CAAC,GAAGA,CAAC,CAACl/B,IAAI,CAAC,UAAUqF,GAAG,EAAE;MAClB;MACA,KAAK,IAAImL,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGxU,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAAC1yB,MAAM,EAAEoO,CAAC,EAAE,EAAE;QACzD,IAAIxU,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAACtkB,CAAC,CAAC,CAACpR,EAAE,IAAIpD,MAAM,CAACy3K,gBAAgB,CAACr0K,EAAE,EAAE;UACjEpD,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAACxpB,MAAM,CAACkF,CAAC,EAAE,CAAC,CAAC;UACxC;QACJ;MACJ;MAEAxU,MAAM,CAAC8iK,SAAS,CAAC,CAAC;MAElB,IAAI9iK,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,CAAC1yB,MAAM,IAAI,CAAC,EAAE;QACzC;QACA/F,aAAa,CAAC+L,WAAW,CAAC,qBAAqB,CAAC;MACpD;MAEA,IAAI0lJ,EAAE,GAAGnxJ,EAAE,CAAC6K,KAAK,CAAC,CAAC;MACnBsmJ,EAAE,CAACrmJ,OAAO,CAAC,IAAI,CAAC;MAChB,OAAOqmJ,EAAE,CAACpmJ,OAAO;IACrB,CAAC,CAAC,SACI,CAAC,UAAUvH,GAAG,EAAE,CAAC,CAAC,CAAC,WACjB,CAAC,YAAY;MACjB;MACAnE,MAAM,CAACy3K,gBAAgB,GAAG,IAAI;MAC9B3zK,CAAC,CAACO,SAAS,CAAC,CAAC;IACjB,CAAC,CAAC;IAEN,OAAO6+B,CAAC;EACZ,CAAC;EAEDljC,MAAM,CAAC62E,eAAe,GAAG,YAAY;IACjC;IACA,IAAI+gG,OAAO,GAAG,CAAC,CAAC53K,MAAM,CAAC4P,WAAW,IAAI,CAAC,CAAC5P,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,IAAI37B,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,CAACv1B,MAAM,GAAG,CAAC,IAAIpG,MAAM,CAACkhK,WAAW,KAAK,IAAI;IAEtJ,IAAI0W,OAAO,KAAK,IAAI,EAAE;MAClB53K,MAAM,CAACyzK,iBAAiB,GAAGzzK,MAAM,CAAC63K,kBAAkB;MACpD73K,MAAM,CAAC0zK,cAAc,GAAG,IAAI;;MAE5B;MACA1zK,MAAM,CAAC2zK,qBAAqB,CAAC,MAAM,CAAC;IACxC,CAAC,MACGtzK,aAAa,CAACw2E,eAAe,CAAC,CAAC;EACvC,CAAC;EAED72E,MAAM,CAAC63K,kBAAkB,GAAG,YAAY;IACpC,IAAItsK,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;IACzBnL,aAAa,CAACw2E,eAAe,CAAC,CAAC;IAC/BtrE,QAAQ,CAACE,OAAO,CAAC,IAAI,CAAC;IACtB,OAAOF,QAAQ,CAACG,OAAO;EAC3B,CAAC;EAED1L,MAAM,CAACqyI,mBAAmB,GAAG,YAAY;IAErC,IAAIylC,wBAAwB,GAAG55J,WAAW,CAACm0H,mBAAmB,CAACryI,MAAM,CAAC4P,WAAW,CAAC;IAElF,IAAI5P,MAAM,CAAC4hK,wBAAwB,IAAIkW,wBAAwB,EAAE;MAC7D93K,MAAM,CAAC4hK,wBAAwB,GAAGkW,wBAAwB;MAC1Dt3K,QAAQ,CAAC,YAAY;QACjBR,MAAM,CAAC8qK,iBAAiB,CAAC,CAAC;MAC9B,CAAC,CAAC;IACN;IAEA,OAAOgN,wBAAwB;EACnC,CAAC;;EAED;EACA93K,MAAM,CAAC+3K,gBAAgB,GAAG,YAAY;IAClC,OAAO,CAAC,CAAC/3K,MAAM,CAAC4P,WAAW,CAACktB,cAAc;EAC9C,CAAC;EAED98B,MAAM,CAACg4K,4BAA4B,GAAG,UAAUC,KAAK,EAAE;IAEnD,IAAI,CAAC/5J,WAAW,CAACo6H,wBAAwB,CAACt4I,MAAM,CAACgnG,UAAU,EAAE,IAAI,CAAC,EAAE;MAChE7mG,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,4FAA4F,CAAC,CAAC;MAC9I,OAAO,KAAK;IAChB;IAEAnB,aAAa,CAAC+L,WAAW,CAAC,uBAAuB,CAAC;IAClD5L,QAAQ,CAAC,YAAY;MACjBR,MAAM,CAAC8wK,oBAAoB,CAACmH,KAAK,CAAC;IACtC,CAAC,EAAE,GAAG,CAAC;IACP,OAAO,IAAI;EACf,CAAC;EAEDj4K,MAAM,CAAC8wK,oBAAoB,GAAG,UAAUmH,KAAK,EAAE;IAC3C,QAAQA,KAAK;MACT,KAAK,QAAQ;QACT;MAEJ,KAAK,IAAI;QACL;QACA;QACA;QACA;QACAn0K,CAAC,CAACC,OAAO,CAAC,CAAC;QAEXma,WAAW,CAAC6oF,cAAc,CAAC/mG,MAAM,CAACgnG,UAAU,CAAC,CACxChjG,IAAI,CAAC,UAAUqF,GAAG,EAAE;UACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;UACb,IAAIkH,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzB,IAAI03B,CAAC,GAAG33B,QAAQ,CAACG,OAAO;UAExB,IAAI,CAACwS,WAAW,CAACi6H,iCAAiC,CAACn4I,MAAM,CAACgnG,UAAU,CAAC,EAAE;YACnEz7F,QAAQ,CAACqb,MAAM,CAACnmB,cAAc,CAACe,SAAS,CAAC,4CAA4C,CAAC,CAAC;UAC3F,CAAC,MAAM;YACHxB,MAAM,CAAC4P,WAAW,CAACktB,cAAc,GAAG98B,MAAM,CAACgnG,UAAU;YACrD,IAAIkxE,EAAE,GAAGh6J,WAAW,CAACo6H,wBAAwB,CAACt4I,MAAM,CAACgnG,UAAU,CAAC;YAChE,IAAIkxE,EAAE,IAAI,IAAI,EAAE;cACZl4K,MAAM,CAAC4P,WAAW,CAACszF,gBAAgB,GAAGg1E,EAAE,CAAC90K,EAAE;cAC3CpD,MAAM,CAAC4P,WAAW,CAACuzF,oBAAoB,GAAG+0E,EAAE,CAAC9lC,MAAM;YACvD,CAAC,MAAM;cACHpyI,MAAM,CAAC4P,WAAW,CAACszF,gBAAgB,GAAG,IAAI;cAC1CljG,MAAM,CAAC4P,WAAW,CAACuzF,oBAAoB,GAAG,IAAI;YAClD;YAEA53F,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;UACzB;UAEA,OAAOkC,QAAQ,CAACG,OAAO;QAC3B,CAAC,CAAC,CACD1H,IAAI,CAAC,UAAUqF,GAAG,EAAE;UACjB,IAAIo9H,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;UACnE,IAAIrE,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;UACzB,IAAI,CAACi7H,SAAS,EACVvoH,WAAW,CAACy1H,gBAAgB,CAAC3zI,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAACysI,eAAe,EAAEzsI,MAAM,CAAC,CAAC,KAEjF86B,4FAAuB,CAACqG,iBAAiB,CAACnhC,MAAM,CAAC4P,WAAW,EAAEsO,WAAW,CAAC0/H,eAAe,CAAC,CAAC,EAAE59I,MAAM,CAAC;UAExGuL,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAAC;UACrB,OAAOkC,QAAQ,CAACG,OAAO;QAC3B,CAAC,CAAC,SACI,CAAC,UAAUvH,GAAG,EAAE;UAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;UACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;QAC/B,CAAC,CAAC;QAEN;MAEJ,KAAK,SAAS;QACV,IAAIsiI,SAAS,GAAGpmI,aAAa,CAAC6gC,iBAAiB,CAAClhC,MAAM,CAAC4P,WAAW,CAAC;QACnE5P,MAAM,CAAC4P,WAAW,CAACszF,gBAAgB,GAAG,IAAI;QAC1CljG,MAAM,CAAC4P,WAAW,CAACuzF,oBAAoB,GAAG,IAAI;QAC9CnjG,MAAM,CAAC4P,WAAW,CAACktB,cAAc,GAAG,IAAI;QACxC,IAAI,CAAC2pG,SAAS,EACVvoH,WAAW,CAACy1H,gBAAgB,CAAC3zI,MAAM,CAAC4P,WAAW,EAAE5P,MAAM,CAACysI,eAAe,EAAEzsI,MAAM,CAAC,CAAC,KAEjF86B,4FAAuB,CAACqG,iBAAiB,CAACnhC,MAAM,CAAC4P,WAAW,EAAEsO,WAAW,CAAC0/H,eAAe,CAAC,CAAC,EAAE59I,MAAM,CAAC;QAExG;IACR;EACJ,CAAC;EAEDA,MAAM,CAACm4K,kBAAkB,GAAG,KAAK;EAEjCn4K,MAAM,CAACo4K,aAAa,GAAG,YAAY;IAC/Bp4K,MAAM,CAACgnG,UAAU,GAAGhnG,MAAM,CAAC4P,WAAW,CAACktB,cAAc;IACrDz8B,aAAa,CAAC8E,UAAU,CAAC,uBAAuB,EAAE,YAAY;MAC1D,IAAI,CAACjF,aAAa,CAAC2L,QAAQ,EACvB/H,CAAC,CAAC,aAAa,CAAC,CAACsB,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC;EACN,CAAC;EAEDpF,MAAM,CAACq4K,WAAW,GAAG,UAAU/1K,KAAK,EAAE;IAClC,IAAIA,KAAK,CAAC4I,KAAK,KAAK,EAAE,EAAE;MACpB7K,aAAa,CAAC+L,WAAW,CAAC,uBAAuB,CAAC;MAClDpM,MAAM,CAAC8wK,oBAAoB,CAAC,IAAI,CAAC;IACrC;EACJ,CAAC;;EAED;EACA9wK,MAAM,CAACsY,UAAU,GAAGjY,aAAa,CAACkY,6BAA6B,CAAC,CAAC;EAEjEvY,MAAM,CAACgoK,sBAAsB,GAAG,IAAI;EACpChoK,MAAM,CAACs4K,0BAA0B,GAAG,UAAUjvK,GAAG,EAAE;IAC/C,IAAI,CAACrJ,MAAM,CAACgoK,sBAAsB,EAC9B;IAEJ,QAAQ3+J,GAAG;MACP,KAAK,MAAM;QACPrJ,MAAM,CAAC2kK,cAAc,CAAC3kK,MAAM,CAACgoK,sBAAsB,CAACrmJ,GAAG,EACnD3hB,MAAM,CAACgoK,sBAAsB,CAACf,SAAS,EACvCjnK,MAAM,CAACgoK,sBAAsB,CAACN,aAAa,EAC3C,IAAI,CAAC;QACT1nK,MAAM,CAACukK,wBAAwB,CAAC,CAAC;QACjC;IACR;EAGJ,CAAC;EAEDvkK,MAAM,CAAC6nK,kBAAkB,GAAG,UAAUlmJ,GAAG,EAAEslJ,SAAS,EAAES,aAAa,EAAE9nK,EAAE,EAAE;IACrE,IAAI,CAACM,aAAa,CAACqwC,iBAAiB,CAAC,CAAC,EAAE;MACpCpwC,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,gCAAgC,CAAC,CAAC;MAClF,OAAO,KAAK;IAChB;IAEA,IAAI+2K,OAAO,GAAG,IAAI;IAClB,IAAIr4K,aAAa,CAACuwC,+BAA+B,CAAC,CAAC,EAAE;MACjD,QAAQvwC,aAAa,CAAC6nC,gBAAgB,CAACywI,+BAA+B;QAClE,KAAK,OAAO;UACRD,OAAO,GAAGznJ,MAAM,CAAC,CAAC,CAACmsB,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;UAC9B;QACJ,KAAK,SAAS;UACVs7H,OAAO,GAAGznJ,MAAM,CAAC,CAAC,CAACmsB,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;UAC9B;QACJ,KAAK,YAAY;UACbs7H,OAAO,GAAGznJ,MAAM,CAAC,CAAC,CAACmsB,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;UAC9B;QACJ;UACIs7H,OAAO,GAAGznJ,MAAM,CAAC,CAAC,CAACmsB,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC;UAC/B;MACR;IACJ;IAEAj9C,MAAM,CAACgoK,sBAAsB,GAAG;MAC5BrmJ,GAAG,EAAEA,GAAG;MACRslJ,SAAS,EAAEA,SAAS;MACpBS,aAAa,EAAEA,aAAa;MAC5B9nK,EAAE,EAAEA,EAAE;MACNymK,YAAY,EAAE,IAAI;MAClBkC,cAAc,EAAE,CAAC,CAACgQ,OAAO,GAAGl4K,aAAa,CAAC0qD,gBAAgB,CAACwtH,OAAO,CAAC,GAAG,IAAI;MAC1EE,uBAAuB,EAAEv4K,aAAa,CAACuwC,+BAA+B,CAAC,CAAC;MACxEhsB,MAAM,EAAE;IACZ,CAAC;IAEDpkB,aAAa,CAAC8E,UAAU,CAAC,kBAAkB,EAAE,YAAY;MACrD,IAAI,CAACjF,aAAa,CAAC2L,QAAQ,EACvB/H,CAAC,CAAC,sBAAsB,CAAC,CAACsB,KAAK,CAAC,CAAC;IAEzC,CAAC,CAAC;EAEN,CAAC;EAEDpF,MAAM,CAAC04K,oBAAoB,GAAG,YAAY;IACtCx6J,WAAW,CAAC0hI,cAAc,CAAC5/I,MAAM,CAACgoK,sBAAsB,CAAC3B,YAAY,CAAC,CAACriK,IAAI,CAAC,UAAUC,IAAI,EAAE;MACxFH,CAAC,CAACO,SAAS,CAAC,CAAC;MACb,IAAIJ,IAAI,IAAI,IAAI,EAAE;QACd9D,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,0CAA0C,CAAC,CAAC;MAChG,CAAC,MAAM;QACHnB,aAAa,CAAC+L,WAAW,CAAC,kBAAkB,CAAC;QAC7CpM,MAAM,CAACs4K,0BAA0B,CAAC,MAAM,CAAC;MAC7C;IACR,CAAC,CAAC,SAAM,CAAC,UAAUn0K,GAAG,EAAE;MAChBL,CAAC,CAACO,SAAS,CAAC,CAAC;MACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;MAC3B9D,aAAa,CAAC+L,WAAW,CAAC,kBAAkB,CAAC;MAC7CpM,MAAM,CAACs4K,0BAA0B,CAAC,QAAQ,CAAC;IAC/C,CAAC,CAAC;EAEN,CAAC;EAEDt4K,MAAM,CAAC24K,iBAAiB,GAAG,IAAI,CAAC,CAAC;;EAEjC34K,MAAM,CAAC44K,qBAAqB,GAAG,YAAY;IACvC54K,MAAM,CAAC24K,iBAAiB,CAACjpJ,MAAM,CAAC,CAAC;EACrC,CAAC;;EAED;EACA1vB,MAAM,CAAC64K,iBAAiB,GAAG,UAAUr8J,GAAG,EAAE;IACtC,IAAI,OAAQA,GAAI,KAAK,SAAS,EAAE;MAC5B,IAAIA,GAAG,KAAK,IAAI,EAAE;QACd,IAAIsiD,GAAG,GAAG9+D,MAAM,CAAC24K,iBAAiB,CAAC38G,QAAQ,CAAC,CAAC;QAC7C,IAAIjyD,KAAK,GAAG+0D,GAAG,CAAClF,WAAW,CAAC7vD,KAAK;QACjC+0D,GAAG,CAAC1I,OAAO,CAAC+9G,YAAY,GAAGpqK,KAAK,IAAI,CAAC;QAErC/J,MAAM,CAAC24K,iBAAiB,CAAC7tK,IAAI,CAAC,IAAI,CAAC;MACvC,CAAC,MAAM;QACH9K,MAAM,CAAC24K,iBAAiB,CAAC7tK,IAAI,CAAC,KAAK,CAAC;MACxC;IACJ,CAAC,MAAM,IAAI,OAAQ0R,GAAI,IAAI,QAAQ,EAAE;MACjC,IAAIA,GAAG,KAAK,OAAO,EAAE;QACjB,IAAIsiD,GAAG,GAAG9+D,MAAM,CAAC24K,iBAAiB,CAAC38G,QAAQ,CAAC,CAAC;QAC7C8C,GAAG,CAAClF,WAAW,CAAC7vD,KAAK,GAAG,CAAC;MAC7B,CAAC,MAAM,IAAIyS,GAAG,KAAK,QAAQ,EAAE;QACzBxc,MAAM,CAAC24K,iBAAiB,CAAC7tK,IAAI,CAAC,KAAK,CAAC;MACxC;IACJ;EACJ,CAAC;EAED9K,MAAM,CAAC84K,oBAAoB,GAAG,IAAI;EAElC94K,MAAM,CAAC+4K,wBAAwB,GAAG,YAAY;IAC1C/4K,MAAM,CAAC84K,oBAAoB,CAACppJ,MAAM,CAAC,CAAC;EACxC,CAAC;;EAED;EACA1vB,MAAM,CAACg5K,oBAAoB,GAAG,UAAUx8J,GAAG,EAAE;IACzC,IAAI,OAAQA,GAAI,KAAK,SAAS,EAAE;MAC5B,IAAIA,GAAG,KAAK,IAAI,EAAE;QACd,IAAIsiD,GAAG,GAAG9+D,MAAM,CAAC84K,oBAAoB,CAAC98G,QAAQ,CAAC,CAAC;QAChD,IAAIjyD,KAAK,GAAG+0D,GAAG,CAAClF,WAAW,CAAC7vD,KAAK;QACjC+0D,GAAG,CAAC1I,OAAO,CAAC+9G,YAAY,GAAGpqK,KAAK,IAAI,CAAC;QAErC/J,MAAM,CAAC84K,oBAAoB,CAAChuK,IAAI,CAAC,IAAI,CAAC;MAC1C,CAAC,MAAM;QACH9K,MAAM,CAAC84K,oBAAoB,CAAChuK,IAAI,CAAC,KAAK,CAAC;MAC3C;IACJ,CAAC,MAAM,IAAI,OAAQ0R,GAAI,IAAI,QAAQ,EAAE;MACjC,IAAIA,GAAG,KAAK,OAAO,EAAE;QACjB,IAAIsiD,GAAG,GAAG9+D,MAAM,CAAC84K,oBAAoB,CAAC98G,QAAQ,CAAC,CAAC;QAChD8C,GAAG,CAAClF,WAAW,CAAC7vD,KAAK,GAAG,CAAC;MAC7B,CAAC,MAAM,IAAIyS,GAAG,KAAK,QAAQ,EAAE;QACzBxc,MAAM,CAAC84K,oBAAoB,CAAChuK,IAAI,CAAC,KAAK,CAAC;MAC3C;IACJ;EACJ,CAAC;EAGD9K,MAAM,CAACquK,gBAAgB,GAAG,YAAY;IAClC,IAAI14I,GAAG,GAAGzX,WAAW,CAACw6H,gBAAgB,CAAC14I,MAAM,CAAC4P,WAAW,CAAC;IAE1D,OAAO,CAAC,CAAC+lB,GAAG,IAAIA,GAAG,CAACvvB,MAAM,GAAG,CAAC;EAClC,CAAC;;EAED;EACApG,MAAM,CAAC6wK,kBAAkB,GAAG,IAAI;EAEhC7wK,MAAM,CAACuwC,iBAAiB,GAAG,YAAY;IACnC,OAAOrwC,aAAa,CAACqwC,iBAAiB,CAAC,CAAC;EAC5C,CAAC;EAEDvwC,MAAM,CAACi5K,qBAAqB,GAAG,YAAY;IACvC,IAAI,CAAC/4K,aAAa,CAACqwC,iBAAiB,CAAC,CAAC,EAAE;MACpCpwC,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,gCAAgC,CAAC,CAAC;MAClF,OAAO,KAAK;IAChB;IAEA,IAAItB,aAAa,CAACmB,QAAQ,KAAK,IAAI,EAAE;MACjClB,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,qDAAqD,CAAC,CAAC;MACvG,OAAO,KAAK;IAChB;IAEAxB,MAAM,CAAC6wK,kBAAkB,GAAG;MACxBxK,YAAY,EAAE,IAAI;MAClB5hJ,MAAM,EAAEzkB,MAAM,CAACuiK,UAAU,CAAC/jJ;IAC9B,CAAC;IAEDne,aAAa,CAAC8E,UAAU,CAAC,iBAAiB,EAAE,YAAY;MACpD,IAAI,CAACjF,aAAa,CAAC2L,QAAQ,EACvB/H,CAAC,CAAC,kBAAkB,CAAC,CAACsB,KAAK,CAAC,CAAC;IAErC,CAAC,CAAC;EAEN,CAAC;EAED,SAAS8zK,iBAAiBA,CAAC1uK,EAAE,EAAE2uK,WAAW,EAAE;IACxC,IAAIC,aAAa,GAAGD,WAAW;IAC/Br5K,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAAC4P,WAAW,CAACkpB,QAAQ,EAAE,UAAUl5B,EAAE,EAAE;MACvD,IAAI,CAAC,CAACA,EAAE,CAAC4rI,UAAU,IAAI5rI,EAAE,CAAC4rI,UAAU,KAAKhhI,EAAE,IAAI5K,EAAE,CAACmlB,MAAM,GAAG;MACnD;MAAA,IACI,CAAC/kB,MAAM,CAAC4P,WAAW,CAACmoI,sBAAsB,IAAI,CAAC/3I,MAAM,CAAC4P,WAAW,CAACmoI,sBAAsB,CAACn4I,EAAE,CAACwD,EAAE,CAAC,CAAC,EAAE;QAC1Gg2K,aAAa,IAAIx5K,EAAE,CAACmlB,MAAM;MAC9B;IACJ,CAAC,CAAC;IAEF,OAAOq0J,aAAa;EACxB;EAEAp5K,MAAM,CAACq5K,yBAAyB,GAAG,UAAUhwK,GAAG,EAAE;IAC9C,IAAI,CAACrJ,MAAM,CAAC6wK,kBAAkB,EAC1B;IAEJ,QAAQxnK,GAAG;MACP,KAAK,MAAM;QACPvF,CAAC,CAACC,OAAO,CAAC,CAAC;QACXssB,eAAe,CAACipJ,qBAAqB,CAACt5K,MAAM,CAAC6wK,kBAAkB,CAACxK,YAAY,CAAC,CACxEriK,IAAI,CAAC,UAAUqF,GAAG,EAAE;UACjBvF,CAAC,CAACO,SAAS,CAAC,CAAC;UAEb,IAAIgF,GAAG,CAACnF,IAAI,CAACmtB,OAAO,KAAK,IAAI,EAAE;YAC3B,IAAI9lB,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;YACzBD,QAAQ,CAACqb,MAAM,CAACvd,GAAG,CAACnF,IAAI,CAAC4iJ,OAAO,CAAC;YACjC,OAAOv7I,QAAQ,CAACG,OAAO;UAC3B,CAAC,MAAM;YAEH,IAAI6tK,YAAY,GAAG,IAAI;YACvB;YACAz5K,OAAO,CAAC4M,OAAO,CAAC1M,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE,UAAU/7B,EAAE,EAAE;cAC5D,IAAI,CAAC,CAACA,EAAE,CAACk4H,YAAY,IAAIl4H,EAAE,CAACk4H,YAAY,KAAKzuH,GAAG,CAACnF,IAAI,CAACqiK,QAAQ,CAACzuC,YAAY,EAAE;gBACzEyhD,YAAY,GAAG,KAAK;gBACpB,OAAO,KAAK;cAChB;YACJ,CAAC,CAAC;YAEF,IAAI,CAACA,YAAY,EAAE;cACf,IAAIhuK,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;cACzBD,QAAQ,CAACqb,MAAM,CAACnmB,cAAc,CAACe,SAAS,CAAC,8EAA8E,EAAE;gBACrH+5F,IAAI,EAAElyF,GAAG,CAACnF,IAAI,CAACqiK,QAAQ,CAACzuC;cAC5B,CAAC,CAAC,CAAC;cACH,OAAOvsH,QAAQ,CAACG,OAAO;YAC3B;YAGA,IAAIytK,WAAW,GAAG1/J,MAAM,CAACzZ,MAAM,CAAC6wK,kBAAkB,CAACpsJ,MAAM,CAAC;YAC1D,IAAI20J,aAAa,GAAIF,iBAAiB,CAAC7vK,GAAG,CAACnF,IAAI,CAACqiK,QAAQ,CAACnjK,EAAE,EAAEqW,MAAM,CAACzZ,MAAM,CAAC6wK,kBAAkB,CAACpsJ,MAAM,CAAC,CAAC;YACtG;;YAGA,IAAI00J,WAAW,GAAG1/J,MAAM,CAACzZ,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,CAAC,EAAE;cACjDre,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,qHAAqH,EAAE;gBACnKyhC,GAAG,EAAEk2I,WAAW;gBAChBK,OAAO,EAAEx5K,MAAM,CAACuiK,UAAU,CAAC/jJ;cAC/B,CAAC,CAAC,CAAC;cAEH26J,WAAW,GAAG1/J,MAAM,CAACzZ,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,CAAC;cAC/C46J,aAAa,GAAGF,iBAAiB,CAAC7vK,GAAG,CAACnF,IAAI,CAACqiK,QAAQ,CAACnjK,EAAE,EAAE+1K,WAAW,CAAC;YACxE;YAEA,IAAIC,aAAa,GAAG/vK,GAAG,CAACnF,IAAI,CAACqiK,QAAQ,CAACtuC,cAAc,EAAE;cAClD93H,YAAY,CAACiE,SAAS,CAAC3D,cAAc,CAACe,SAAS,CAAC,qHAAqH,EAAE;gBACnKyhC,GAAG,EAAEm2I,aAAa;gBAClB79E,IAAI,EAAElyF,GAAG,CAACnF,IAAI,CAACqiK,QAAQ,CAACzuC,YAAY;gBACpCprB,GAAG,EAAErjG,GAAG,CAACnF,IAAI,CAACqiK,QAAQ,CAACtuC;cAC3B,CAAC,CAAC,CAAC;cAEHkhD,WAAW,GAAG9vK,GAAG,CAACnF,IAAI,CAACqiK,QAAQ,CAACtuC,cAAc,GAAGmhD,aAAa,GAAGD,WAAW;cAC5En5K,MAAM,CAACuiK,UAAU,CAAC/jJ,OAAO,IAAI26J,WAAW;YAC5C;YAEAn5K,MAAM,CAAC6wK,kBAAkB,CAACpsJ,MAAM,GAAG00J,WAAW;YAE9Cn5K,MAAM,CAACguK,WAAW,CAAC3kK,GAAG,CAACnF,IAAI,CAACqiK,QAAQ,CAACnjK,EAAE,EAAEiG,GAAG,CAACnF,IAAI,CAACqiK,QAAQ,CAACzuC,YAAY,EAAEqhD,WAAW,CAAC;YACrF,IAAI5tK,QAAQ,GAAG5K,EAAE,CAAC6K,KAAK,CAAC,CAAC;YACzBD,QAAQ,CAACE,OAAO,CAACpC,GAAG,CAACnF,IAAI,CAACqiK,QAAQ,CAAC;YACnC,OAAOh7J,QAAQ,CAACG,OAAO;UAC3B;QACJ,CAAC,CAAC,SACI,CAAC,UAAUvH,GAAG,EAAE;UAClBL,CAAC,CAACO,SAAS,CAAC,CAAC;UACblE,YAAY,CAACiE,SAAS,CAACD,GAAG,CAAC;QAC/B,CAAC,CAAC;QAEN;IACR;EAGJ,CAAC;EAED,SAASy+J,kBAAkBA,CAAA,EAAG;IAC1B,IAAI6W,eAAe,GAAG,KAAK;IAC3B,IAAIC,UAAU,GAAG,KAAK;IACtB51K,CAAC,CAACmC,IAAI,CAACjG,MAAM,CAAC4P,WAAW,CAAC+rB,aAAa,EAAE,UAAUz1B,GAAG,EAAEtG,EAAE,EAAE;MACxD,IAAIA,EAAE,CAACmlB,MAAM,GAAG,CAAC,EAAE;QACf00J,eAAe,GAAG,IAAI;MAC1B,CAAC,MAAM;QACHC,UAAU,GAAG,IAAI;MACrB;IACJ,CAAC,CAAC;IAEF,IAAIC,gBAAgB,GAAGD,UAAU,IAAID,eAAe;IAEpD,OAAOE,gBAAgB,IAAI35K,MAAM,CAAC4P,WAAW,CAACsyB,OAAO;EACzD;EAEA,SAAS03I,QAAQA,CAAA,EAAG;IAEhB55K,MAAM,CAAC8/J,qBAAqB,CAAC,CAAC;IAE9B9/J,MAAM,CAAC0tK,wBAAwB,CAAC,CAAC;IACjCrmG,aAAa,CAACsB,WAAW,CAAC,CAAC;EAC/B;EAEA,SAAS46E,WAAWA,CAAA,EAAG;IACnBz/I,CAAC,CAACzE,MAAM,CAAC,CAAC20D,EAAE,CAAC,QAAQ,EAAE4lH,QAAQ,CAAC;EACpC;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;;EAEA;EACA;;EAEA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;;EAEA;EACA;;EAEA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;;EAEA;;EAEA;EACA;EACA;;EAEA;EACA;;EAEA;EACA;EACA;;EAEA;;EAEA;;EAEA;EACA;EACA;;EAEA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;;EAEA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA55K,MAAM,C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I,CAAC,KAAK,EAAE;YACR,OAAO;SACV;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YACrD,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;SAC7B;IACL,CAAC;IAlJM,oBAAO,GAAG,CAAC,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IAmJjF,mBAAC;CAAA;AAED,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,YAAY,CAAC,OAA0C,CAAC,CAAC;;;;;;;;;;;;;;;;AC5J7F;AACf,oBAAoB,qBAAuB;AAC3C;;;;;;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2E;;;;;;;;;;AClOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLD,e;;;;;;;;;;ACAA,e;;;;;;;;;;ACAA,e;;;;;;UCAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;UACA,sBAAsB;UACtB,oDAAoD,uBAAuB;UAC3E;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA,GAAG;UACH;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;;UAEA;UACA;;;;;WCjDA;WACA;WACA;WACA;WACA,+BAA+B,wCAAwC;WACvE;WACA;WACA;WACA;WACA,iBAAiB,qBAAqB;WACtC;WACA;WACA;WACA;WACA,kBAAkB,qBAAqB;WACvC,sHAAsH,iDAAiD;WACvK;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,E;;;;UC7BA;UACA;UACA;UACA,eAAe,4BAA4B;UAC3C,eAAe;UACf,iCAAiC,WAAW;UAC5C;UACA,E;;;UCPA;UACA;UACA;UACA;UACA,yCAAyC,wCAAwC;UACjF;UACA;UACA,E;;;UCPA;UACA,4CAA4C,oCAAoC,iGAAiG,kB;;;UCDjL;UACA,6CAA6C,qE;;;UCD7C;UACA,mDAAmD,8BAA8B,sEAAsE,kB;;;UCDvJ,wCAAwC,iE;;;UCAxC,qCAAqC,iC;;;UCArC;UACA;UACA;UACA;UACA,GAAG;UACH;UACA;UACA,CAAC,I;;;UCPD,8CAA8C,0D;;;;WCA9C;WACA;WACA;WACA;WACA,uBAAuB,4BAA4B;WACnD;WACA;WACA;WACA,iBAAiB,oBAAoB;WACrC;WACA,mGAAmG,YAAY;WAC/G;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,4CAA4C,mBAAmB;WAC/D;WACA;WACA,mEAAmE,iCAAiC;WACpG;WACA;WACA;WACA,E;;;;UCxCA;UACA;UACA;UACA,uDAAuD,iBAAiB;UACxE;UACA,gDAAgD,aAAa;UAC7D,E;;;UCNA;UACA;UACA;UACA;UACA,E;;;;WCJA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,CAAC;;WAED;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA,2BAA2B;WAC3B,4BAA4B;WAC5B,2BAA2B;WAC3B;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;;WAEH;WACA;WACA;WACA;WACA;WACA;WACA,oBAAoB,gBAAgB;WACpC;WACA;WACA;WACA,KAAK;WACL;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,oBAAoB,gBAAgB;WACpC;WACA;WACA,GAAG;WACH;WACA;WACA,GAAG;WACH;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;;WAEH;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,GAAG;;WAEH;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;;WAEA,iBAAiB,qCAAqC;WACtD;;WAEA,gDAAgD;WAChD;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA,oBAAoB,iBAAiB;WACrC;WACA;WACA;WACA,GAAG;WACH;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ,GAAG;WACH;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA,OAAO;WACP,MAAM;WACN,KAAK;WACL,IAAI;WACJ,GAAG;WACH;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;;WAEA;WACA;;WAEA;;WAEA;WACA;WACA;WACA;WACA,EAAE;WACF;;WAEA;WACA;WACA;WACA,GAAG;WACH;;WAEA;WACA;WACA;WACA,GAAG;WACH;;WAEA;WACA;;WAEA;WACA;WACA,EAAE;;WAEF;WACA;;WAEA;WACA;WACA;WACA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA,KAAK;WACL;;WAEA;WACA;WACA;WACA;WACA,MAAM;WACN;WACA,KAAK;WACL;;WAEA;WACA;WACA,IAAI;WACJ,GAAG;WACH;;WAEA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA,IAAI;WACJ;WACA;WACA;WACA;WACA,qBAAqB,oBAAoB;WACzC;WACA;WACA;WACA,IAAI;WACJ,GAAG;WACH;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA,C;;;;UCvaA,4B;;;;WCAA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;;WAGA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA,gBAAgB,6BAA6B;WAC7C;WACA;WACA;WACA;WACA;WACA,gBAAgB,8BAA8B;WAC9C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE;WACF;WACA;;WAEA;WACA;WACA;WACA,UAAU;WACV,iBAAiB,oBAAoB;WACrC;WACA;WACA;WACA;WACA,EAAE;WACF,iBAAiB,oBAAoB;WACrC;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA,GAAG;WACH,EAAE;WACF;;WAEA;;WAEA,e;;;;;WChGA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE;WACF;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,mBAAmB,2BAA2B;WAC9C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,KAAK;WACL;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA,kBAAkB,cAAc;WAChC;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA,iBAAiB,4BAA4B;WAC7C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;;WAEA;;WAEA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;;WAEA;;WAEA;WACA;WACA,gBAAgB,4BAA4B;WAC5C;WACA;WACA;;WAEA;WACA;;WAEA;WACA;;WAEA;WACA;;WAEA;WACA,gBAAgB,4BAA4B;WAC5C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,kBAAkB,uCAAuC;WACzD;WACA;WACA;WACA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA,mBAAmB,iCAAiC;WACpD;WACA;;WAEA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,sBAAsB,uCAAuC;WAC7D;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,sBAAsB,sBAAsB;WAC5C;WACA;WACA;WACA,SAAS;WACT;WACA;WACA;WACA;WACA;WACA,WAAW;WACX,WAAW;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA,YAAY;WACZ;WACA;WACA;WACA;WACA;WACA;WACA,UAAU;WACV;WACA;WACA;WACA;WACA;WACA;WACA,WAAW;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA,oBAAoB,wCAAwC;WAC5D;WACA;WACA;WACA;WACA,OAAO;WACP;WACA;WACA;WACA;WACA;WACA,SAAS;WACT,SAAS;WACT;WACA;WACA;WACA;WACA;WACA;WACA,UAAU;WACV;WACA;WACA;WACA;WACA;WACA;WACA,QAAQ;WACR;WACA;WACA;WACA;WACA;WACA,SAAS;WACT;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA;WACA;WACA,KAAK;WACL;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,EAAE,KAAK;WACP;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,IAAI;WACJ;WACA;WACA,EAAE;WACF;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,KAAK;WACL,IAAI;WACJ;WACA;WACA;;WAEA;WACA;WACA;WACA,sCAAsC;WACtC;WACA;WACA,EAAE;WACF;;WAEA,8CAA8C;;WAE9C;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,iCAAiC,mCAAmC;WACpE;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,MAAM,qBAAqB;WAC3B;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;WAEA;WACA;WACA,4G;;;;;UEhkBA;UACA;UACA;UACA,kEAAkE,4DAA4D;UAC9H,kEAAkE,yDAAyD;UAC3H,kEAAkE,0DAA0D;UAC5H,4FAA4F,0DAA0D;UACtJ","sources":["webpack://crdregister/./src/PosScripts/configEnvironment.js","webpack://crdregister/./src/PosScripts/OptionsTreeItem.js","webpack://crdregister/./src/PosScripts/addCustomerController.js","webpack://crdregister/./src/PosScripts/addSalesRepresentativeController.js","webpack://crdregister/./src/PosScripts/addSalesShippingAddressController.js","webpack://crdregister/./src/PosScripts/addStockOrderLineController.js","webpack://crdregister/./src/PosScripts/addSurchargeController.js","webpack://crdregister/./src/PosScripts/barcodeService.js","webpack://crdregister/./src/PosScripts/cacheService.js","webpack://crdregister/./src/PosScripts/cameraScanController.js","webpack://crdregister/./src/PosScripts/cashManagementController.js","webpack://crdregister/./src/PosScripts/cashManagementService.js","webpack://crdregister/./src/PosScripts/changePasswordController.js","webpack://crdregister/./src/PosScripts/clickAndCollectDialogController.js","webpack://crdregister/./src/PosScripts/clickAndCollectGridController.js","webpack://crdregister/./src/PosScripts/clickAndCollectService.js","webpack://crdregister/./src/PosScripts/cloverReaderProvider.js","webpack://crdregister/./src/PosScripts/configService.js","webpack://crdregister/./src/PosScripts/constants.js","webpack://crdregister/./src/PosScripts/csvService.js","webpack://crdregister/./src/PosScripts/customerService.js","webpack://crdregister/./src/PosScripts/customersController.js","webpack://crdregister/./src/PosScripts/dashboardController.js","webpack://crdregister/./src/PosScripts/dataChangeNotificationService.js","webpack://crdregister/./src/PosScripts/dbUpdatesService.js","webpack://crdregister/./src/PosScripts/deliveryCalendarController.js","webpack://crdregister/./src/PosScripts/deliveryController.js","webpack://crdregister/./src/PosScripts/deliveryDialogController.js","webpack://crdregister/./src/PosScripts/directives.js","webpack://crdregister/./src/PosScripts/emailService.js","webpack://crdregister/./src/PosScripts/entry.js","webpack://crdregister/./src/PosScripts/errorService.js","webpack://crdregister/./src/PosScripts/eventConstants.js","webpack://crdregister/./src/PosScripts/fileDownloadService.js","webpack://crdregister/./src/PosScripts/filtersService.js","webpack://crdregister/./src/PosScripts/fontMeasureService.js","webpack://crdregister/./src/PosScripts/globals.js","webpack://crdregister/./src/PosScripts/headerController.js","webpack://crdregister/./src/PosScripts/helperService.js","webpack://crdregister/./src/PosScripts/homeController.js","webpack://crdregister/./src/PosScripts/index.js","webpack://crdregister/./src/PosScripts/jsStoreProvider.js","webpack://crdregister/./src/PosScripts/keyPressDelayService.js","webpack://crdregister/./src/PosScripts/labelPrintService.js","webpack://crdregister/./src/PosScripts/labelService.js","webpack://crdregister/./src/PosScripts/linklyPaymentReaderProvider.js","webpack://crdregister/./src/PosScripts/liveSearchService.js","webpack://crdregister/./src/PosScripts/localDBProvider.js","webpack://crdregister/./src/PosScripts/loyaltyDEARProvider.js","webpack://crdregister/./src/PosScripts/loyaltyLionProvider.js","webpack://crdregister/./src/PosScripts/loyaltyLionRewardsHandler.js","webpack://crdregister/./src/PosScripts/loyaltyService.js","webpack://crdregister/./src/PosScripts/main.js","webpack://crdregister/./src/PosScripts/offlineSalesController.js","webpack://crdregister/./src/PosScripts/openCloseRegistryController.js","webpack://crdregister/./src/PosScripts/orderStatusService.js","webpack://crdregister/./src/PosScripts/outletService.js","webpack://crdregister/./src/PosScripts/paymentSenseReaderProvider.js","webpack://crdregister/./src/PosScripts/pipes.js","webpack://crdregister/./src/PosScripts/printService.js","webpack://crdregister/./src/PosScripts/productManagementController.js","webpack://crdregister/./src/PosScripts/productManagementService.js","webpack://crdregister/./src/PosScripts/productsService.js","webpack://crdregister/./src/PosScripts/receiptService.js","webpack://crdregister/./src/PosScripts/registryService.js","webpack://crdregister/./src/PosScripts/remoteRequestProvider.js","webpack://crdregister/./src/PosScripts/reportCloseRegistryController.js","webpack://crdregister/./src/PosScripts/reportGiftCardController.js","webpack://crdregister/./src/PosScripts/reportInTransitController.js","webpack://crdregister/./src/PosScripts/reportInventoryController.js","webpack://crdregister/./src/PosScripts/reportPaymentTypeSummaryController.js","webpack://crdregister/./src/PosScripts/reportProductPerformanceController.js","webpack://crdregister/./src/PosScripts/reportSalesSummaryController.js","webpack://crdregister/./src/PosScripts/reportService.js","webpack://crdregister/./src/PosScripts/reportStoreCreditController.js","webpack://crdregister/./src/PosScripts/reportSurchargeController.js","webpack://crdregister/./src/PosScripts/requestInterceptors.js","webpack://crdregister/./src/PosScripts/saleService.js","webpack://crdregister/./src/PosScripts/salesHistoryController.js","webpack://crdregister/./src/PosScripts/salesParkedController.js","webpack://crdregister/./src/PosScripts/selectOutletRegistryController.js","webpack://crdregister/./src/PosScripts/selectTaxController.js","webpack://crdregister/./src/PosScripts/sellController.js","webpack://crdregister/./src/PosScripts/setPinController.js","webpack://crdregister/./src/PosScripts/setupController.js","webpack://crdregister/./src/PosScripts/sideBarController.js","webpack://crdregister/./src/PosScripts/soundService.js","webpack://crdregister/./src/PosScripts/squareReaderProvider.js","webpack://crdregister/./src/PosScripts/stockFamilyProductMatrixController.js","webpack://crdregister/./src/PosScripts/stockOrderingController.js","webpack://crdregister/./src/PosScripts/stockOrderingService.js","webpack://crdregister/./src/PosScripts/stockPurchaseOrderDetailController.js","webpack://crdregister/./src/PosScripts/stockTakeController.js","webpack://crdregister/./src/PosScripts/stockTakeService.js","webpack://crdregister/./src/PosScripts/stockTransferConroller.js","webpack://crdregister/./src/PosScripts/stockTransferOrderDetailController.js","webpack://crdregister/./src/PosScripts/triPOSReaderProvider.js","webpack://crdregister/./src/PosScripts/tyroReaderProvider.js","webpack://crdregister/./src/PosScripts/unpackWorkerHelper.js","webpack://crdregister/./src/PosScripts/userManagementController.js","webpack://crdregister/./src/PosScripts/userManagementService.js","webpack://crdregister/./src/PosScripts/webOnlyProvider.js","webpack://crdregister/./src/scss/index.scss","webpack://crdregister/./node_modules/moment/locale/ sync \\b\\B","webpack://crdregister/./TypePosScripts/CalculatorHelperService.ts","webpack://crdregister/./TypePosScripts/CalculatorService.ts","webpack://crdregister/./TypePosScripts/CheckoutItem.ts","webpack://crdregister/./TypePosScripts/Components/certificate-error/certificate-error.component.ts","webpack://crdregister/./TypePosScripts/Controllers/second-screen.controller.ts","webpack://crdregister/./TypePosScripts/ConverterService.ts","webpack://crdregister/./TypePosScripts/Delivery/Delivery.ts","webpack://crdregister/./TypePosScripts/Delivery/DeliveryHelper.ts","webpack://crdregister/./TypePosScripts/Delivery/ProductionCalendar.ts","webpack://crdregister/./TypePosScripts/Enums.ts","webpack://crdregister/./TypePosScripts/Interfaces.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/AutoDiscountCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/FinalCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/LoyaltyCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/NativePricesCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/RefundCheckoutSetupCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/RefundCheckoutSubmitCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/RefundLimitsCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/RefundPaymentsSetupCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/SurchargesPaymentsCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/TaxCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/TotalCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/TotalPaymentsCalculator.ts","webpack://crdregister/./TypePosScripts/PartialCalculators/index.ts","webpack://crdregister/./TypePosScripts/Sale.ts","webpack://crdregister/./TypePosScripts/Services/biometrics-auth.service.ts","webpack://crdregister/./TypePosScripts/Services/device-info.service.ts","webpack://crdregister/./TypePosScripts/Services/google-helper.service.ts","webpack://crdregister/./TypePosScripts/Services/msal.service.ts","webpack://crdregister/./TypePosScripts/Services/offline-sale.service.ts","webpack://crdregister/./TypePosScripts/Services/payment-providers/progress-dialog.ts","webpack://crdregister/./TypePosScripts/Services/payment-providers/windcave/interfaces.ts","webpack://crdregister/./TypePosScripts/Services/payment-providers/windcave/windcave-provider.service.ts","webpack://crdregister/./TypePosScripts/Services/second-terminal.service.ts","webpack://crdregister/./TypePosScripts/Services/server-connection.service.ts","webpack://crdregister/./TypePosScripts/Services/surcharge.service.ts","webpack://crdregister/./TypePosScripts/Typings/Typings.ts","webpack://crdregister/./src/PosScripts/cardPayService.ts","webpack://crdregister/./src/PosScripts/loginController.ts","webpack://crdregister/./src/PosScripts/loginService.ts","webpack://crdregister/./src/PosScripts/pendoService.ts","webpack://crdregister/./src/PosScripts/unpackWorker.js","webpack://crdregister/./src/PosImages/ sync \\.(svg%7Cpng%7Cjpg)$","webpack://crdregister/./src/PosViews/ sync \\.html$","webpack://crdregister/./translations.js","webpack://crdregister/ignored|D:\\a\\1\\s\\DearPos\\CrdRegister\\node_modules\\readable-stream\\lib\\internal\\streams|util","webpack://crdregister/ignored|D:\\a\\1\\s\\DearPos\\CrdRegister\\node_modules\\readable-stream\\lib|util","webpack://crdregister/ignored|D:\\a\\1\\s\\DearPos\\CrdRegister\\node_modules\\sjcl|crypto","webpack://crdregister/webpack/bootstrap","webpack://crdregister/webpack/runtime/chunk loaded","webpack://crdregister/webpack/runtime/compat get default export","webpack://crdregister/webpack/runtime/define property getters","webpack://crdregister/webpack/runtime/get javascript chunk filename","webpack://crdregister/webpack/runtime/get javascript update chunk filename","webpack://crdregister/webpack/runtime/get mini-css chunk filename","webpack://crdregister/webpack/runtime/get update manifest filename","webpack://crdregister/webpack/runtime/getFullHash","webpack://crdregister/webpack/runtime/global","webpack://crdregister/webpack/runtime/hasOwnProperty shorthand","webpack://crdregister/webpack/runtime/load script","webpack://crdregister/webpack/runtime/make namespace object","webpack://crdregister/webpack/runtime/node module decorator","webpack://crdregister/webpack/runtime/hot module replacement","webpack://crdregister/webpack/runtime/publicPath","webpack://crdregister/webpack/runtime/css loading","webpack://crdregister/webpack/runtime/jsonp chunk loading","webpack://crdregister/webpack/before-startup","webpack://crdregister/webpack/startup","webpack://crdregister/webpack/after-startup"],"sourcesContent":["window.buildConfiguration = {\n \"configuration\": \"Release\",\n \"appVersion\": \"3.5.144\",\n \"platform\": \"site\",\n \"appSchema\": \"DEARPOS\",\n \"dearAPIBaseUrl\": \"https://inventory.dearsystems.com\",\n \"dearAPIImageUrl\": \"https://prodcdn-fch9gyh8ejf9hget.z01.azurefd.net/Product/GetImageRatio\",\n \"CFBundleURLSchemes\": \"square-sq0idp-8KDmmDZaGvTzIAMSYCoKKA\",\n \"squareApplicationId\": \"sq0idp-8KDmmDZaGvTzIAMSYCoKKA\",\n \"tyroApplicationId\": \"ixWaAfreqg0t9oqXwgVYHyPUZNC0psrnO1a6\",\n \"triPOSApplicationId\": \"8613\",\n \"WMSApplicationLink\": \"dear.wms\",\n \"WMSApplicationLinkIOS\": \"cin7-core-wms/id1463374716\",\n \"GSuites_ClientID\": \"1089539485588-snchtbrur0j4pq6e1v3lqu9msi8fo6i9.apps.googleusercontent.com\",\n \"PendoKey\": \"d2a85e42-79c0-4094-5e06-3e0664462ff6\",\n \"MS_ClientID\": \"71bb0454-0457-4f6f-bc81-5e277e027a24\"\n};window.isSite = true;\nmodule.exports = buildConfiguration;","export class OptionsTreeItem {\r\n    constructor(el) {\r\n        this.el = el;\r\n    }\r\n}","angular.module(\"mainApp\").controller('addCustomerController',\r\n    ['$scope', '$rootScope', 'configService', 'errorService', 'customerService', 'helperService',\r\n        '$element', 'constants', '$timeout', 'gettextCatalog', 'liveSearchService', '$q',\r\nfunction ($scope, $rootScope, configService, errorService, customerService, helperService,\r\n    $element, constants, $timeout, gettextCatalog, liveSearchService, $q) {\r\n\r\n    $scope.customer = null;\r\n    $scope.searchText = null;\r\n    $scope.searchTextLive = null;\r\n    $scope.customerSearchList = [];\r\n    $scope.showViewDetails = false;\r\n    $scope.searchLimit = constants.customerSearchLimit;\r\n    $scope.mode = 'search';\r\n    $scope.enableLoyalty = configService.enableLoyalty;\r\n    $scope.isOnline = configService.isOnline;\r\n    $scope.minSymbolsToStartSearch = configService.minSymbolsToStartSearch;\r\n    $scope.minSymbolsMessage = gettextCatalog.getString(\"Enter no less than {{cnt}} symbols to start searching.\", { cnt: $scope.minSymbolsToStartSearch });\r\n    $scope.notSetAddressTypeText = 'Not set';\r\n    $scope.debounceTime = 0; // ms\r\n    $scope.countries = [];\r\n    $scope.submittedTab = -1;\r\n    $scope.submittedEditTab = -1;\r\n\r\n    $scope.tabs = {\r\n        contactTabIndex: 0,\r\n        billingSelected: 0,\r\n        shippingSelected: 0\r\n    };\r\n\r\n    $scope.fcss = { 'height': window.innerHeight * 0.9 + 'px' };\r\n\r\n    $scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n        $scope.isOnline = object;\r\n    });\r\n\r\n    $scope.formatBalance = helperService.formatBalance;\r\n\r\n    $scope.addressTypes = [\r\n    { Name: $scope.notSetAddressTypeText },\r\n    { Name: \"Billing\" },\r\n    { Name: \"Business\" },\r\n    { Name: \"Shipping\" }];\r\n\r\n    $scope.newCustomer = {\r\n        Name: '',\r\n        Contacts: [\r\n            {\r\n                Name: null,\r\n                Email: null,\r\n                Phone: null,\r\n                MobilePhone: null\r\n            }\r\n        ],\r\n        Addresses: [\r\n            {\r\n                Line1: null,\r\n                Type: \"Shipping\"\r\n            },\r\n            {\r\n                Line1: null,\r\n                Type: \"Billing\"\r\n            }\r\n        ],\r\n        Account: 0,\r\n        ID: 0,\r\n        Status: \"Active\",\r\n        Currency: configService.currency,\r\n        EnableLoyaltyPoints: true,\r\n        LoyaltyPoints: 0,\r\n        StoreCredits: 0,\r\n        UseSameForBilling: false,\r\n        SendReceiptViaEmail: true\r\n    }; // here will be info for create new customer workflow\r\n\r\n    $scope.loadCountries = function() {\r\n        $.blockUI();\r\n        customerService.loadCountries().then(resp => {\r\n            $scope.countries = resp?.data || [];\r\n        }).catch(err => {\r\n            errorService.showError(err);\r\n        }).finally(() => {\r\n            $.unblockUI();\r\n        })\r\n    }\r\n    $scope.loadCountries();\r\n    \r\n    function resetNewCustomer() {\r\n        $scope.searchText = null;\r\n        $scope.searchTextLive = null;\r\n        $scope.newCustomer = {\r\n            Name: '',\r\n            Contacts: [\r\n                {\r\n                    Name: null,\r\n                    Email: null,\r\n                    Phone: null,\r\n                    MobilePhone: null,\r\n                    MarketingConsent: '1'\r\n                }\r\n            ],\r\n            Addresses: [\r\n                {\r\n                    Line1: null,\r\n                    Type: \"Shipping\"\r\n                },\r\n                {\r\n                    Line1: null,\r\n                    Type: \"Billing\"\r\n                }\r\n            ],\r\n            Account: 0,\r\n            ID: 0,\r\n            Status: \"Active\",\r\n            Currency: configService.currency,\r\n            EnableLoyaltyPoints: true,\r\n            LoyaltyPoints: 0,\r\n            StoreCredits: 0,\r\n            UseSameForBilling: false,\r\n            SendReceiptViaEmail: true\r\n        }; // here will be info for create new customer workflow\r\n\r\n        $timeout(function() {\r\n            $('input, select').trigger('refresh');\r\n        }, 500);\r\n    }\r\n\r\n    $scope.setCustomerLoadMode = function(){\r\n        $scope.loadOnline = customerService.loadOnline();\r\n        if ($scope.loadOnline) {\r\n            $scope.debounceTime = 500;\r\n        }\r\n    }\r\n\r\n    $scope.setCustomerLoadMode();\r\n\r\n    $scope.$on('addCustomer.show', function (event, data) {\r\n        $scope.searchText = null;\r\n        $scope.searchTextLive = null;\r\n\r\n        $scope.currentTabCreate = 0;\r\n        $scope.prevTabCreate = 0;\r\n\r\n        if (data.mode == 'add')\r\n            $scope.mode = 'add';\r\n        else{            \r\n            $scope.mode = 'search';\r\n        }\r\n        if (typeof data.isCustomersGrid !== \"undefined\")\r\n            $scope.isCustomersGrid = data.isCustomersGrid;\r\n        else\r\n            $scope.isCustomersGrid = false;\r\n        $scope.showViewDetails = data.showViewDetails || false;\r\n        $scope.customerSearchList = [];\r\n        $scope.addCustomerForm.$setPristine();\r\n        resetNewCustomer();\r\n        console.log($scope.newCustomer.EnableLoyaltyPoints);\r\n        $scope.initSelects('ADD');\r\n        helperService.showDialog($element, function() {\r\n            if ($scope.mode == 'add') {\r\n                $('#addCustomerModalBody').trigger('element.shown');\r\n            }\r\n            if ($scope.mode == 'search') {\r\n                $('#searchCustomerText').focus();\r\n            }\r\n            else {\r\n                $('#addSelectModalBody').trigger('element.shown');\r\n            }\r\n        });\r\n    });\r\n\r\n    $scope.editCustomerShowHandler = function(customer, mode){\r\n        $scope.resetTabdrop(true);\r\n        \r\n        $scope.mode = mode;\r\n        $scope.contractSelected = 0;\r\n        $scope.tabs.contactTabIndex = 0;\r\n        $scope.tabs.shippingSelected = 0;\r\n        $scope.tabs.billingSelected = 0;\r\n        $scope.currentTab = 0;\r\n        $scope.prevTab = 0;\r\n\r\n        var existShipping = false;\r\n        var existBilling = false;\r\n\r\n        $scope.editedCustomer = {};\r\n        angular.copy(customer, $scope.editedCustomer);\r\n\r\n        const shippingAddr = customer.Addresses.filter(x => x.Type === 'Shipping');\r\n        $.each(shippingAddr, function (idx, el) {\r\n            $scope.tabs.shippingSelected = idx;\r\n            existShipping = true;\r\n            return false;\r\n        });\r\n\r\n        const billingAddr = customer.Addresses.filter(x => x.Type === 'Billing');\r\n        $.each(billingAddr, function (idx, el) {\r\n            $scope.tabs.billingSelected = idx;\r\n            existBilling = true;\r\n            return false;\r\n        });\r\n\r\n        if ($scope.editedCustomer.Contacts.length === 0) {\r\n            $scope.editedCustomer.Contacts.push({MarketingConsent: '1'});\r\n        }\r\n\r\n        if (existShipping === false) {\r\n            $scope.editedCustomer.Addresses.push({ Type: 'Shipping', open: true });\r\n            $scope.tabs.shippingSelected = -1;\r\n        } else {\r\n            const index = $scope.editedCustomer.Addresses.findIndex(addr => addr.ID === shippingAddr[0]?.ID);\r\n            if (index > -1) {\r\n                const selectedShippingAddr = $scope.editedCustomer.Addresses[index];\r\n                $scope.editedCustomer.Addresses[index] = {...selectedShippingAddr, open: true};\r\n            }\r\n        }\r\n\r\n        if (existBilling === false) {\r\n            $scope.editedCustomer.Addresses.push({ Type: 'Billing', open: true });\r\n            $scope.tabs.billingSelected = -1;\r\n        } else {\r\n            const index = $scope.editedCustomer.Addresses.findIndex(addr => addr.ID === billingAddr[0]?.ID);\r\n            if (index > -1) {\r\n                const selectedBillingAddr = $scope.editedCustomer.Addresses[index];\r\n                $scope.editedCustomer.Addresses[index] = {...selectedBillingAddr, open: true};\r\n            }\r\n        }        \r\n\r\n        $scope.groupValidation = [];\r\n        $scope.groupValidation.push({ groupName: 'MainInfo', isTouched: false, isValid: true });\r\n        $scope.groupValidation.push({ groupName: 'Contacts', isTouched: false, isValid: true });\r\n        $scope.groupValidation.push({ groupName: 'Shipping', isTouched: false, isValid: true });\r\n        $scope.groupValidation.push({ groupName: 'Billing', isTouched: false, isValid: true });\r\n\r\n        $scope.editCustomerForm.$setPristine();\r\n        var SCOPE = $scope;\r\n        helperService.showDialog($element, function() {\r\n            $('#editCustomerModalBody').trigger('element.shown');\r\n            $timeout(function(){\r\n                SCOPE.editCustomerForm.$setPristine();\r\n            },2);\r\n        });\r\n\r\n        $scope.updateTabdrop();\r\n        $scope.initSelects('EDIT');\r\n\r\n        // $timeout(function () {\r\n        //     if ($scope.firstRunEditDialog == false) {\r\n        //         $('#contact-tabs').tabdrop('layout');\r\n        //         $('#billing-tabs').tabdrop('layout');\r\n        //         $('#shipping-tabs').tabdrop('layout');\r\n        //     }\r\n        //     else {\r\n        //         $('#contact-tabs').tabdrop({text: '<img src=\"PosImages/menu-tabs.svg\" style=\"width:25px;height: 30px;\" />'});\r\n        //         $('#billing-tabs').tabdrop({text: '<img src=\"PosImages/menu-tabs.svg\" style=\"width:25px;height: 30px;\" />'});\r\n        //         $('#shipping-tabs').tabdrop({text: '<img src=\"PosImages/menu-tabs.svg\" style=\"width:25px;height: 30px;\" />'});\r\n        //     }\r\n\r\n        //     $scope.firstRunEditDialog = false;\r\n\r\n        // }, 500);\r\n    }\r\n\r\n    $scope.initSelects = function(formType) {\r\n        const options = {\r\n            selectSearch: true,\r\n            selectSearchNotFound: 'No matches found',\r\n            selectSearchPlaceholder: 'Search...'\r\n        };\r\n        if (formType === 'ADD') {\r\n            $('#acountryS, #acountryB').attr('data-load-later', 'false');\r\n            $('#acountryS, #acountryB').styler(options);\r\n        } else if (formType === 'EDIT') {\r\n            $timeout(function() {\r\n                $('select.countrySelect:not(\"#acountryS, #acountryB\")').styler(options);\r\n            }, 0);\r\n        }\r\n    }\r\n\r\n    $scope.$on('editCustomer.show', function (event, customer) {\r\n        $scope.editCustomerShowHandler(customer, 'editCustomer');\r\n    });\r\n\r\n    $scope.$on('editCustomer.sales.show', function (event, customer) {\r\n        $scope.editCustomerShowHandler(customer, 'editCustomerOnSalesPage');\r\n    });\r\n\r\n    $scope.firstRunEditDialog = [true];\r\n\r\n    $scope.resetTabdrop = function(fullReset) {\r\n        $('.drop-completed').removeClass('drop-completed');\r\n        if (fullReset == true) {\r\n            var ctrl = null;\r\n            if ($scope.firstRunEditDialog[0] != true) {\r\n                ctrl = $('#contact-tabs');\r\n                ctrl.tabdrop('reset');\r\n            }\r\n        }\r\n    }\r\n\r\n    $scope.updateTabdrop = function() {\r\n        $timeout(function () {\r\n            var idx = $scope.currentTab;\r\n            var ctrl = null;\r\n\r\n            if (idx === 0) {\r\n                ctrl = $('#contact-tabs');\r\n            }\r\n\r\n            if(!!ctrl) {\r\n                if ($scope.firstRunEditDialog[idx] === false) {\r\n                    ctrl.tabdrop('layout');\r\n                }\r\n                else {\r\n                    ctrl.tabdrop({text: '<img src=\"PosImages/menu-tabs.svg\" style=\"width:25px;height: 25px;\" />'});\r\n                }\r\n            }\r\n\r\n            $scope.firstRunEditDialog[idx] = false;\r\n\r\n        }, 500);\r\n    }\r\n\r\n    $scope.$on('editCustomerContact.show', function (event, object) {\r\n        $scope.mode = 'editCustomerContact';\r\n        $scope.editedCustomerContact = object.Contact;\r\n        $scope.editedCustomerContactObjcet = object;\r\n        helperService.showDialog($element);\r\n        $timeout(function () {\r\n            $('#type').trigger('refresh');\r\n        }, 0);\r\n    });\r\n\r\n    $scope.$on('editCustomerAddress.show', function (event, object) {\r\n        $scope.mode = 'editCustomerAddress';\r\n        $scope.editedCustomerAddress = object.Address;\r\n        $scope.editedCustomerAddressObjcet = object;\r\n        helperService.showDialog($element);\r\n\r\n        $timeout(function () {\r\n            $('#type').trigger('refresh');\r\n        }, 0);\r\n    });\r\n\r\n    //$scope.$watch('searchText',\r\n    //  function (newValue, oldValue) {\r\n    //      if (newValue !== oldValue && !!newValue &&\r\n    //          newValue.length >= configService.minSymbolsToStartSearch) {\r\n    //          keyPressDelayService.forceDelayOperation(newValue, $scope.searchCustomer);\r\n    //      }\r\n    //  }\r\n    // );\r\n    $scope.liveSearchIsOpen = false;\r\n\r\n    $scope.$watch('liveSearchIsOpen',\r\n        function (newValue, oldValue) {\r\n            if (newValue) {\r\n                $timeout(function() {\r\n                    helperService.fitHeightTypeahead('#' + $('#searchCustomerText').attr('aria-owns'), true, '#searchCustomerFormModalBody');\r\n                },400);\r\n            }\r\n        }\r\n    );\r\n\r\n    // cache, so customers won't be loaded second time when enter is hit\r\n    $scope.loadCustomersOnlineResults = null;\r\n\r\n    $scope.liveSearchCustomer = function (val) {\r\n        $scope.searchText = val;\r\n        if (configService.isMobileDesign) {\r\n            return [];\r\n        }\r\n\r\n        $scope.isLoading = false;\r\n        if (!$scope.loadOnline) {\r\n            return liveSearchService.filterCustomerData(val, 5);\r\n        } else if (configService.isOnline) {\r\n            $scope.isLoading = true;\r\n            return customerService.loadCustomers(val, null, $scope.searchLimit, null, true)\r\n                .then(function (res) {\r\n                    $scope.loadCustomersOnlineResults = {Customers: res.Customers, SearchText: val};\r\n                    const liveSearchResults = liveSearchService.mapOnlineCustomers(res.Customers.slice(0, 5), val);\r\n                    $scope.isLoading = false;\r\n\r\n                    return liveSearchResults.slice(0, 5);\r\n                });\r\n\r\n        } else {\r\n            return [];\r\n        }\r\n    };\r\n\r\n    $scope.liveSearchFinished = function (val) {\r\n        return !!val ? val.name : null;\r\n    };\r\n\r\n    $scope.liveSearchSelected = function (item, model, label, event) {\r\n            // make search by product id and add product to order\r\n\r\n            if(event && Array.from(event.target.classList).includes('view-details-btn')){\r\n                $scope.viewDetailsButtonHandler(item);\r\n            }\r\n            else {\r\n                $scope.searchCustomerID = model.id;\r\n                $scope.searchCustomerEmail = model.email;\r\n                $scope.searchCustomer();\r\n            }            \r\n    };\r\n\r\n    $scope.viewDetailsButtonHandler = function (customer) {\r\n        $.blockUI();\r\n\r\n        customerService.loadCustomers(null, null, 1, { CustomerID: customer.id || customer.ID })\r\n            .then(function (resp) {\r\n                $.unblockUI();\r\n\r\n                if (!!resp.Customers && resp.Customers.length > 0) {\r\n                    if (!configService.isSite) {\r\n                        Keyboard.hide();\r\n                    }\r\n                    else {\r\n                        helperService.hideKeyboard();\r\n                    }\r\n\r\n                    let customer = resp.Customers[0];\r\n\r\n                    $rootScope.$broadcast('editCustomer.sales.show', customer);\r\n                }\r\n            },\r\n                function (err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                })\r\n    }\r\n\r\n    $scope.liveKeyPress = function (event) {\r\n        if (event.which === 13) {\r\n            $scope.searchCustomerID = null;\r\n            $scope.searchCustomerEmail = null;\r\n            $scope.searchCustomer();\r\n        }\r\n    };\r\n\r\n\r\n    $scope.canShowErrors = false;\r\n\r\n    $scope.searchCustomerLoadCustomers = function (searchText, id, forceOnline) {  \r\n        let pr = null;\r\n        if ((!$scope.loadCustomersOnlineResults || $scope.loadCustomersOnlineResults.SearchText !== searchText) || id) {\r\n            pr = customerService.loadCustomers(searchText, null, $scope.searchLimit, (!!id ? { CustomerID: id } : null), forceOnline || $scope.enableLoyalty === true);\r\n        } else {\r\n            const deferred = $q.defer();\r\n            deferred.resolve({Customers: $scope.loadCustomersOnlineResults.Customers});\r\n            pr = deferred.promise;\r\n        }\r\n        \r\n        pr.then(function (resp) {\r\n            // reset cache\r\n            $scope.loadCustomersOnlineResults = null;\r\n            $scope.customerSearchList = resp.Customers;\r\n           \r\n            $.unblockUI();\r\n           \r\n            if (!!resp.Customers && resp.Customers.length > 0) {\r\n                if (!configService.isSite) {\r\n                    Keyboard.hide();\r\n                }\r\n                else {\r\n                    helperService.hideKeyboard();\r\n                }\r\n\r\n                // when from live search simply select him\r\n                if (!!id && resp.Customers.length == 1) {\r\n                    $scope.selectCustomer(resp.Customers[0]);\r\n                    $scope.addCustomer();\r\n                    return;\r\n                }\r\n            }\r\n\r\n            $timeout(function () {\r\n                if (!!$scope.customerSearchList && $scope.customerSearchList.length > 0) {\r\n                    if (configService.isMobile) {\r\n                        Keyboard.hide();\r\n                    }\r\n                    else {\r\n                        helperService.hideKeyboard();\r\n                    }\r\n                }\r\n            }, 0);\r\n        },\r\n            function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n    }\r\n\r\n    $scope.searchCustomer = function () {\r\n        $scope.canShowErrors = $scope.searchCustomerForm.$invalid;\r\n        var id = $scope.searchCustomerID;\r\n\r\n        $scope.searchCustomerID = null;\r\n\r\n        var searchText = $('#searchCustomerText').val();\r\n\r\n        if ($scope.searchCustomerForm.searchCustomerText.$invalid) {\r\n            return false;\r\n        }\r\n\r\n        $scope.canShowErrors = false;\r\n        $.blockUI();\r\n        \r\n        $scope.searchCustomerLoadCustomers(searchText, id);\r\n\r\n        return false;\r\n    };\r\n  \r\n    $scope.cancelDialog = function () {\r\n        let initialModeValue = $scope.mode;\r\n\r\n        if($scope.mode === 'editCustomerOnSalesPage'){\r\n            $scope.cancelEditCustomerDialogModal();\r\n        }\r\n        else {\r\n            helperService.closeDialog($element);\r\n        }    \r\n        \r\n        if(initialModeValue === 'search'){\r\n            $(\"#searchCustomerText\").val(null).trigger('input');\r\n        }\r\n    };\r\n\r\n    $scope.addCustomer = function () {\r\n        helperService.closeDialog($element);\r\n        const email = $scope.searchCustomerEmail;\r\n        $scope.searchCustomerEmail = null;\r\n        $rootScope.$broadcast('addCustomer.selected', { customer: $scope.customer, action: 'search', email: email });\r\n    };\r\n  \r\n\r\n    $scope.selectCustomer = function (item) {\r\n        $scope.customer = item;\r\n    };\r\n\r\n    $scope.createCustomer = function () {\r\n        if (validateCreateModal($scope.addCustomerForm, $scope.currentTabCreate)) {\r\n            $scope.submittedTab = $scope.currentTabCreate;\r\n            errorService.showError(\r\n                gettextCatalog.getString('Please fill in the required fields before saving.')\r\n            );\r\n            return;\r\n        }\r\n        $scope.submittedTab = -1;\r\n\r\n        $.blockUI();\r\n        $scope.newCustomer.Contacts[0].Name = $scope.newCustomer.Name;\r\n        if (!!$scope.newCustomer.Addresses) {\r\n            $scope.newCustomer.Addresses = $scope.newCustomer.Addresses.filter(function (a) {\r\n                 return !!a.Line1 && !!a.City;\r\n                });\r\n\r\n            angular.forEach($scope.newCustomer.Addresses, function (el) {\r\n                el.State = el.StateProvince;\r\n                el.Postcode = el.ZipPostCode;\r\n\r\n                if (!el.DefaultForType) {\r\n                    el.DefaultForType = false;\r\n                }\r\n            });\r\n\r\n            if($scope.newCustomer.UseSameForBilling){\r\n                $scope.newCustomer.Addresses[1] = {\r\n                    Line1: $scope.newCustomer.Addresses[0].Line1,\r\n                    Line2: $scope.newCustomer.Addresses[0].Line2,\r\n                    City: $scope.newCustomer.Addresses[0].City,\r\n                    State: $scope.newCustomer.Addresses[0].State,\r\n                    Country: $scope.newCustomer.Addresses[0].Country,\r\n                    Postcode: $scope.newCustomer.Addresses[0].Postcode,\r\n                    DefaultForType: $scope.newCustomer.Addresses[0].DefaultForType,\r\n                    Type: \"Billing\"\r\n                };\r\n            }\r\n        }\r\n\r\n        $scope.newCustomer.LocatoinID  = configService.lastOutletID;\r\n\r\n        customerService.createCustomer($scope.newCustomer).then(function (resp) {\r\n            $.unblockUI();\r\n            helperService.closeDialog($element);\r\n            $scope.newCustomer.ID = resp.CustomerID;\r\n            if(resp.Addresses) {\r\n                resp.Addresses.forEach(function(addr) {\r\n                    addr.ID =addr.AddressID;\r\n                    addr.City = addr.CitySuburb;\r\n                    delete addr.CitySuburb;\r\n                    delete addr.CustomerID;\r\n                    addr.State = addr.StateProvince;\r\n                    delete addr.StateProvince;\r\n                    addr.Postcode = addr.ZipPostCode;\r\n                    delete addr.ZipPostCode;\r\n                    delete addr.DefaultForType;\r\n                    delete addr.TaxExemptionReasonCode;\r\n                    delete addr.ValidationState;\r\n                    delete addr.ValidationText;\r\n                });\r\n\r\n                $scope.newCustomer.Addresses = resp.Addresses;\r\n            }\r\n\r\n            if(resp.Contacts) {\r\n                resp.Contacts.forEach(function(c) {\r\n                    c.ID = c.ContactID;\r\n                    delete c.ValidationState;\r\n                    delete c.ValidationText;\r\n                    delete c.CustomerID;\r\n                    delete c.Website;\r\n                    delete c.IncludeInEmail;\r\n                    delete c.Fax;\r\n                    delete c.Comment;\r\n                    delete c.JobTitle;\r\n                });\r\n\r\n                $scope.newCustomer.Contacts = resp.Contacts;\r\n            }\r\n\r\n            if (resp.TaxRuleID) {\r\n                $scope.newCustomer.TaxRuleID = resp.TaxRuleID;\r\n                $scope.newCustomer.EffectivePercentInclusive = resp.EffectivePercentInclusive;\r\n                $scope.newCustomer.EffectivePercentExclusive = resp.EffectivePercentExclusive;\r\n            }\r\n\r\n            $rootScope.$broadcast('addCustomer.selected', { customer: $scope.newCustomer, action: 'create' });\r\n        }, function (err) {\r\n            if($scope.newCustomer.Addresses.length !== 2){\r\n                if($scope.newCustomer.Addresses.length === 0){\r\n                      $scope.newCustomer.Addresses = [\r\n                        {\r\n                            Line1: null,\r\n                            Type: \"Shipping\"\r\n                        },\r\n                        {\r\n                            Line1: null,\r\n                            Type: \"Billing\"\r\n                        }\r\n                    ];\r\n                }else{\r\n                    if($scope.newCustomer.Addresses[0].Type === \"Shipping\"){\r\n                        $scope.newCustomer.Addresses.push({Line1:null, Type: \"Billing\"});\r\n                    }else{\r\n                        $scope.newCustomer.Addresses.unshift({Line1:null, Type: \"Shipping\"});\r\n                    }\r\n                }\r\n            }\r\n            $.unblockUI();\r\n            errorService.showError(err);\r\n        });\r\n\r\n    };\r\n\r\n    $scope.handleDefaultAddress = function (form, type, address) {\r\n        $scope.touchAddress(form, type);\r\n        // Return if any address is set false for default address or \r\n        if (address.DefaultForType === false) {\r\n            return;\r\n        }\r\n\r\n        if (form.$name === 'editCustomerForm') {\r\n            $scope.editedCustomer.Addresses.forEach(ad => {\r\n                if (address.DefaultForType && ad.Type == type && ad.ID !== address.ID) {\r\n                    ad.DefaultForType = false;\r\n                }\r\n            })\r\n        }\r\n    }\r\n\r\n    $scope.editCustomer = function () {\r\n        $scope.submittedEditTab = $scope.currentTab;\r\n        if(validateModal($scope.editCustomerForm)) {\r\n            return;\r\n        }\r\n        $scope.submittedEditTab = -1;\r\n\r\n        $.blockUI();\r\n        // var d = angular.extend($scope.editedCustomer, { updateMode: 'customer' });\r\n\r\n        var saveMainInfo = false;\r\n        var saveContacts = false;\r\n        var saveShipping = false;\r\n        var saveBilling = false;\r\n        var isContactsTouched = false;\r\n\r\n        $.each($scope.groupValidation, function(idx, el) {\r\n            switch (el.groupName) {\r\n                case 'MainInfo':\r\n                    saveMainInfo = el.isTouched && el.isValid;\r\n                    break;\r\n                case 'Contacts':\r\n                    saveContacts = el.isTouched && el.isValid;\r\n                    isContactsTouched = el.isTouched;\r\n                    break;\r\n                case 'Shipping':\r\n                    saveShipping = el.isTouched && el.isValid;\r\n                    break;\r\n                case 'Billing':\r\n                    saveBilling = el.isTouched && el.isValid;\r\n                    break;\r\n            }\r\n            });\r\n\r\n        var customerToSave = {};\r\n        angular.copy($scope.editedCustomer, customerToSave);\r\n\r\n        var contactsToRemove = [];\r\n        var addressesToRemove = [];\r\n\r\n        $.each(customerToSave.Contacts, function (idx, el) {\r\n            if (!el.ID && !el.Name && !el.MobilePhone && !el.Phone && !el.Email && !isContactsTouched) {\r\n                contactsToRemove.push(el);\r\n            }\r\n        });\r\n\r\n        $.each(customerToSave.Addresses.filter(x => x.Type === 'Shipping' || x.Type === 'Billing'), function (idx, el) {\r\n            if (!el.ID && !el.Line1 && !el.Line2 && !el.City && !el.State && !el.Postcode && !el.Country) {\r\n                addressesToRemove.push(el);\r\n            } else {\r\n                delete el.open;\r\n                el.DefaultForType = !!el.DefaultForType;\r\n            }\r\n        });\r\n\r\n        $.each(contactsToRemove, function (idx, el) {\r\n            var index = customerToSave.Contacts.indexOf(el);\r\n            customerToSave.Contacts.splice(index, 1);\r\n        });\r\n\r\n        $.each(addressesToRemove, function (idx, el) {\r\n            var index = customerToSave.Addresses.indexOf(el);\r\n            customerToSave.Addresses.splice(index, 1);\r\n        });\r\n\r\n        var updateMode = \"\";\r\n        if (saveMainInfo && isContactsTouched)\r\n            updateMode += \"  mainInfo contacts\";\r\n        else\r\n        if (saveMainInfo)\r\n            updateMode += \"  mainInfo\";\r\n        if (saveContacts)\r\n            updateMode += \" contacts\";\r\n        if (saveShipping || saveBilling)\r\n            updateMode += \" addresses\";\r\n\r\n\r\n        var d = angular.extend(customerToSave, { updateMode: updateMode });\r\n\r\n        customerService.updateCustomer(d).then(function (resp) {\r\n            customerService.onCustomerUpdated(d.id || d.ID)\r\n                .finally(function () {\r\n                    if ($scope.mode === 'editCustomerOnSalesPage') {\r\n    \r\n                        if ($scope.currentSale && $scope.currentSale.customer && $scope.currentSale.customer.ID === $scope.editedCustomer.ID) {\r\n                            $scope.currentSale.customer = $scope.editedCustomer;\r\n                        }\r\n    \r\n                        if ($scope.customerSearchList && $scope.customerSearchList.length > 0)\r\n                        {\r\n                            $scope.searchCustomerLoadCustomers($scope.searchText, null, true);    \r\n                        } else {\r\n                            $.unblockUI();\r\n                        }\r\n                        $scope.cancelDialogModal($element);\r\n                    }\r\n                    else {\r\n                        $.unblockUI();\r\n                        helperService.closeDialog($element);\r\n                        $rootScope.$broadcast('addCustomer.selected', { customer: $scope.editedCustomer, action: 'edit' });\r\n                    }\r\n                });\r\n            \r\n        }, function (err) {\r\n            $.unblockUI();\r\n            errorService.showError(err);\r\n        });\r\n    };\r\n    \r\n\r\n    $scope.editCustomerContact = function () {\r\n        $.blockUI();\r\n        $.each($scope.editedCustomerContactObjcet.Customer.Contacts, function (idx, el) {\r\n            if (el.ID === $scope.editedCustomerContact.ID) {\r\n                el.Name = $scope.editedCustomerContact.Name;\r\n                el.MobilePhone = $scope.editedCustomerContact.MobilePhone;\r\n                el.Phone = $scope.editedCustomerContact.Phone;\r\n                el.Email = $scope.editedCustomerContact.Email;\r\n            }\r\n        });\r\n\r\n        var d = angular.extend($scope.editedCustomerContactObjcet.Customer, { updateMode: 'contacts' });\r\n        customerService.updateCustomer(d).then(function (resp) {\r\n            $.unblockUI();\r\n            helperService.closeDialog($element);\r\n            $rootScope.$broadcast('addCustomer.selected', { customer: $scope.editedCustomerContactObjcet.Customer, action: 'edit' });\r\n        }, function (err) {\r\n            $.unblockUI();\r\n            errorService.showError(err);\r\n        });\r\n    };\r\n\r\n\r\n    $scope.editCustomerAddress = function () {\r\n        $.blockUI();\r\n        $.each($scope.editedCustomerAddressObjcet.Customer.Addresses, function (idx, el) {\r\n            if (el.ID === $scope.editedCustomerAddress.ID) {\r\n                el.Line1 = $scope.editedCustomerAddress.Line1;\r\n                el.StateProvince = $scope.editedCustomerAddress.State;\r\n                el.ZipPostCode = $scope.editedCustomerAddress.Postcode;\r\n                el.Country = $scope.editedCustomerAddress.Country;\r\n                el.City = $scope.editedCustomerAddress.City;\r\n                el.Type = $scope.editedCustomerAddress.Type;\r\n            }\r\n        });\r\n        var d = angular.extend($scope.editedCustomerAddressObjcet.Customer, { updateMode: 'addresses' });\r\n\r\n        customerService.updateCustomer(d).then(function (resp) {\r\n            $.unblockUI();\r\n            helperService.closeDialog($element);\r\n            $rootScope.$broadcast('addCustomer.selected', { customer: $scope.editedCustomerAddressObjcet.Customer, action: 'edit' });\r\n        }, function (err) {\r\n            $.unblockUI();\r\n            errorService.showError(err);\r\n        });\r\n    };\r\n\r\n\r\n    $scope.switchMode = function (setAddNew) {\r\n        $scope.mode = setAddNew === true ? 'add' : 'search';\r\n        if ($scope.mode == 'add') {\r\n            $timeout(function () {\r\n                $scope.setFocusToFirstInput();\r\n\r\n            });\r\n        }\r\n        $timeout(function(){\r\n            $rootScope.$broadcast('popup.shown');\r\n        });\r\n        return false;\r\n    };\r\n \r\n    $scope.getNewCustomerAddressClass = function (form, name) {        \r\n\r\n        $scope.validateNewCustomer.validateShippingAdress(form);\r\n        $scope.validateNewCustomer.validateBillingAdress(form);\r\n\r\n        return $scope.getFieldClass(form, name);\r\n    }\r\n\r\n    $scope.getFieldClass = function (form, name, fieldLengthGT) {\r\n        let field = form[name];\r\n\r\n        if(fieldLengthGT === undefined)\r\n        {\r\n            fieldLengthGT = 0;\r\n        }\r\n\r\n        if ((!field.$invalid && field.$dirty) || (!field.$invalid && field.length > fieldLengthGT))\r\n            return 'dp_has-success has-success';\r\n        else if (((field.$invalid || field.$error.required) && (field.$dirty || field.length > fieldLengthGT)))\r\n            return 'has-danger dp_has-danger';\r\n    };\r\n\r\n    //Edit customer\r\n\r\n    $scope.touchMainInfo = function(form, touched) {\r\n        $.each($scope.groupValidation, function (idx, el) {\r\n            if (el.groupName === 'MainInfo') {\r\n                el.isTouched = form.name.$dirty || el.isTouched;\r\n                if (touched)\r\n                    el.isTouched = true;\r\n\r\n                el.isValid = !((form.name.$invalid || form.name.$error.required) && (form.name.$dirty || form.name.length > 0));\r\n            }\r\n\r\n        });\r\n    };\r\n\r\n    $scope.touchContact = function (form, isMarketingConsent = false) {\r\n        if(!$scope.groupValidation)\r\n            return;\r\n\r\n        let concatsGroup = $scope.groupValidation.find(x => x.groupName === 'Contacts');\r\n\r\n        let isTouched = false, isValid = true;\r\n\r\n        if (concatsGroup){\r\n            $.each($scope.editedCustomer.Contacts, (tabIndex, tab) => {\r\n\r\n                let contactName = form[`contactName_${tabIndex}`];\r\n                let phone = form[`phone_${tabIndex}`];\r\n                let mobilePhone = form[`mobilePhone_${tabIndex}`];\r\n                let email = form[`email_${tabIndex}`];\r\n\r\n                let tabIsTouched = contactName.$dirty || phone.$dirty || mobilePhone.$dirty || email.$dirty || isMarketingConsent;\r\n                let tabIsValid = !((contactName.$invalid || contactName.$error.required) && (contactName.$dirty || contactName.length > 0))\r\n                && !((phone.$invalid || phone.$error.required) && (phone.$dirty || phone.length > 0))\r\n                && !((mobilePhone.$invalid || mobilePhone.$error.required) && (mobilePhone.$dirty || mobilePhone.length > 0))\r\n                    && !((email.$invalid || email.$error.required) && (email.$dirty || email.length > 0)) \r\n                    && (!isMarketingConsent || (isMarketingConsent && contactName.$valid));\r\n\r\n                isTouched = isTouched || tabIsTouched;\r\n                isValid = isValid && tabIsValid;               \r\n\r\n                if (tabIsTouched && contactName.$error.required) {\r\n                    //concatsGroup.isValid = false;\r\n                    contactName.$setDirty();\r\n                }\r\n            })\r\n\r\n            concatsGroup.isTouched = isTouched;\r\n            concatsGroup.isValid = isValid;          \r\n        }\r\n    }\r\n\r\n    $scope.touchAddress = function (form, type) {\r\n        if(!$scope.groupValidation)\r\n            return;\r\n\r\n        let group = $scope.groupValidation.find(x => x.groupName === type);\r\n\r\n        let isTouched = false, isValid = true;\r\n\r\n        if (group){\r\n            $.each($scope.editedCustomer.Addresses.filter(x => x.Type === type), (tabIndex, tab) => {\r\n\r\n                let line1 = form[`line1${type}_${tabIndex}`];\r\n                let line2 = form[`line2${type}_${tabIndex}`];\r\n                let city = form[`city${type}_${tabIndex}`];\r\n                let state = form[`state${type}_${tabIndex}`];\r\n                let zipCode = form[`zipCode${type}_${tabIndex}`];\r\n                let country = form[`country${type}_${tabIndex}`];\r\n                let defaultForType = form[`defaultForType${type}_${tabIndex}`];\r\n\r\n                let tabIsTouched = line1.$dirty || line2.$dirty || city.$dirty || state.$dirty || zipCode.$dirty || country.$dirty || defaultForType.$dirty;\r\n                let tabIsValid =\r\n                    !((line1.$invalid || line1.$error.required) && (line1.$dirty || line1.length > 0)) &&\r\n                    !((city.$invalid || city.$error.required) && (line1.$dirty || city.$dirty || city.length > 0));\r\n\r\n                isTouched = isTouched || tabIsTouched;\r\n                isValid = isValid && tabIsValid;               \r\n\r\n                if (tabIsTouched) {\r\n                    if(line1.$error.required) {\r\n                        line1.$setDirty();    \r\n                    }\r\n                    if(city.$error.required) {\r\n                        city.$setDirty();    \r\n                    }\r\n                }\r\n            })\r\n\r\n            group.isTouched = isTouched;\r\n            group.isValid = isValid;          \r\n        }    \r\n    }  \r\n\r\n    $scope.validateForm = function (form) {\r\n       if (form.$invalid && !form.$dirty) {\r\n            return false;\r\n        }\r\n\r\n        var valid = true;\r\n        $.each($scope.groupValidation, function(idx, el) {\r\n            if (el.isValid === false)\r\n                valid = false;\r\n        });\r\n        return !valid;\r\n    }\r\n\r\n    $scope.setFocusToFirstInput = function () {\r\n        if ($scope.mode == 'add') {\r\n            if(!configService.isMobile)\r\n                $('#name').focus();\r\n        }\r\n        else if ($scope.mode == 'editCustomerContact') {\r\n            if(!configService.isMobile)\r\n                $('#contactNameEdit').focus();\r\n        }\r\n        else if ($scope.mode == 'editCustomer' || $scope.mode == 'editCustomerOnSalesPage') {\r\n            if(!configService.isMobile)\r\n                $('#nameEdit').focus();\r\n        }\r\n        else if ($scope.mode == 'editCustomerAddress') {\r\n            if(!configService.isMobile)\r\n                $('#eline1').focus();\r\n        }\r\n    };\r\n\r\n\r\n\r\n    function getNextItem(type, currentIdx) {\r\n        return $scope.editedCustomer && $scope.editedCustomer.Addresses.some((x, index) => x.Type === type && index > currentIdx) ? currentIdx + 1 : -1;\r\n    }\r\n\r\n    function getPrevItem(type, currentIdx) {\r\n        return $scope.editedCustomer && $scope.editedCustomer.Addresses.reverse().some((x, index) => x.Type === type && index < currentIdx) ? currentIdx - 1 : -1;\r\n    }\r\n\r\n    $scope.existPrevNumber = function () {\r\n        switch ($scope.currentTab) {\r\n        case 0:\r\n            if ($scope.contractSelected === 0)\r\n                return false;\r\n            else\r\n                return true;\r\n            break;\r\n        case 1:\r\n            return getPrevItem('Shipping', $scope.tabs.shippingSelected) !== -1;\r\n            break;\r\n        case 2:\r\n            return getPrevItem('Billing', $scope.tabs.billingSelected) !== -1;\r\n            break;\r\n        default:\r\n            return false;\r\n        }\r\n    }\r\n\r\n    $scope.existNextNumber = function() {\r\n        switch ($scope.currentTab) {\r\n            case 0:\r\n                if ($scope.editedCustomer && $scope.contractSelected === $scope.editedCustomer.Contacts.length - 1)\r\n                    return false;\r\n                else\r\n                    return true;\r\n                break;\r\n            case 1:\r\n                return getNextItem('Shipping', $scope.tabs.shippingSelected) !== -1;\r\n                break;\r\n            case 2:\r\n                return getNextItem('Billing', $scope.tabs.billingSelected) !== -1;\r\n                break;\r\n            default:\r\n                return false;\r\n        }\r\n    };\r\n\r\n    $scope.changeTab = function (tabNumber, form, event) {\r\n        $scope.submittedEditTab = $scope.currentTab;\r\n        if (validateModal(form) === false) {\r\n            $scope.submittedEditTab = -1;\r\n            if (tabNumber === 0)\r\n                form.email_0.$setPristine();\r\n            $scope.prevTab = tabNumber === $scope.currentTab ? $scope.currentTab : $scope.prevTab;\r\n            $scope.currentTab = tabNumber;\r\n        } else {\r\n            $scope.currentTab = $scope.prevTab;\r\n        }\r\n\r\n        $scope.resetTabdrop();\r\n        $scope.updateTabdrop();\r\n    }\r\n\r\n    $scope.changeTabCreate = function (tabNumber, form, event){\r\n        if (validateCreateModal(form, $scope.prevTabCreate) === false && !$scope.newCustomer.UseSameForBilling) {\r\n            $scope.prevTabCreate = $scope.currentTabCreate;\r\n            $scope.currentTabCreate = tabNumber;\r\n        } else {\r\n            $scope.currentTabCreate = $scope.prevTabCreate;\r\n        }\r\n    }\r\n\r\n    $scope.prevPane = function (form) {\r\n        $scope.submittedEditTab = $scope.currentTab;\r\n        if (validateModal(form)) {\r\n            return;\r\n        }\r\n        $scope.submittedEditTab = -1;\r\n\r\n        if ($scope.currentTab === 0) {\r\n            form.email_0.$setPristine();\r\n            $scope.contractSelected -= 1;\r\n        }\r\n        if ($scope.currentTab === 1) {\r\n            $scope.tabs.shippingSelected = getPrevItem('Shipping', $scope.tabs.shippingSelected);\r\n        }\r\n        if ($scope.currentTab === 2) {\r\n            $scope.tabs.billingSelected = getPrevItem('Billing', $scope.tabs.billingSelected);\r\n        }\r\n    };\r\n\r\n    $scope.nextPane = function (form) {\r\n        $scope.submittedEditTab = $scope.currentTab;\r\n        if (validateModal(form)) {\r\n            return;\r\n        }\r\n        $scope.submittedEditTab = -1;\r\n        \r\n        if ($scope.currentTab === 0) {\r\n            form.email_0.$setPristine();\r\n            $scope.contractSelected += 1;\r\n        }\r\n        if ($scope.currentTab === 1) {\r\n            $scope.tabs.shippingSelected = getNextItem('Shipping', $scope.tabs.shippingSelected);\r\n        }\r\n        if ($scope.currentTab === 2) {\r\n            $scope.tabs.billingSelected = getNextItem('Billing', $scope.tabs.billingSelected);\r\n        }\r\n    };\r\n\r\n     $scope.shippingAddressRequired = false;\r\n     $scope.billingAddressRequired = false;\r\n\r\n    $scope.validateNewCustomer = {};\r\n    $scope.validateNewCustomer.validateShippingAdress  = function(form){\r\n        if((form.addressS.$viewValue &&  form.addressS.$viewValue.length > 0)\r\n        || (form.astateS.$viewValue && form.astateS.$viewValue.length > 0)\r\n        || form.acountryS.$viewValue && (form.acountryS.$viewValue.length > 0)\r\n        || (form.azipPostCodeS.$viewValue && form.azipPostCodeS.$viewValue.length > 0)\r\n        || (form.acityS.$viewValue && form.acityS.$viewValue.length > 0)\r\n        || ($scope.newCustomer.UseSameForBilling))  {\r\n            $scope.shippingAddressRequired = true;\r\n        }\r\n        else{\r\n            $scope.shippingAddressRequired = false;\r\n        }\r\n        return  $scope.shippingAddressRequired;\r\n    }\r\n    $scope.validateNewCustomer.validateBillingAdress  = function(form){\r\n        if((form.addressB.$viewValue &&  form.addressB.$viewValue.length > 0)\r\n        || (form.astateB.$viewValue && form.astateB.$viewValue.length > 0)\r\n        || form.acountryB.$viewValue && (form.acountryB.$viewValue.length > 0)\r\n        || (form.azipPostCodeB.$viewValue && form.azipPostCodeB.$viewValue.length > 0)\r\n        || (form.acityB.$viewValue && form.acityB.$viewValue.length > 0)){\r\n            $scope.billingAddressRequired = true;\r\n        }\r\n        else{\r\n            $scope.billingAddressRequired = false;\r\n        }\r\n        return  $scope.billingAddressRequired;\r\n    }\r\n\r\n\r\n    function validateCreateModal(form,tab){\r\n        var title = gettextCatalog.getString('Error');\r\n        var err = \"\";\r\n        var hasError = false;\r\n\r\n        if(tab === 0){\r\n            var isRequired = $scope.validateNewCustomer.validateShippingAdress(form);\r\n\r\n            if (isRequired && ((form.addressS.$invalid\r\n                || form.addressS.$error.required) ||\r\n                (form.acityS.$invalid\r\n                    || form.acityS.$error.required)\r\n            )) {\r\n                hasError = true;\r\n            }\r\n        }\r\n        else if(tab === 1){\r\n            var isRequired = $scope.validateNewCustomer.validateBillingAdress(form);\r\n\r\n            if (isRequired && ((form.addressB.$invalid\r\n                || form.addressB.$error.required)||\r\n                (form.acityB.$invalid\r\n                    || form.acityB.$error.required))) {\r\n                hasError = true;\r\n            }\r\n        }\r\n\r\n        return hasError;\r\n    }\r\n\r\n    function validateModal(form) {\r\n        var title = gettextCatalog.getString('Error');\r\n        var errors = [];\r\n        var hasError = false;\r\n\r\n        $.each($scope.editedCustomer.Addresses.filter(x => x.Type === 'Shipping' || x.Type === 'Billing'), (i, address) => {\r\n            \r\n            let type = address.Type;\r\n\r\n            let tabIndex = $scope.editedCustomer.Addresses.filter(x => x.Type === type).indexOf(address);\r\n\r\n            let line1 = form[`line1${type}_${tabIndex}`];\r\n            let city = form[`city${type}_${tabIndex}`];\r\n            let state = form[`state${type}_${tabIndex}`];\r\n            let zipCode = form[`zipCode${type}_${tabIndex}`];\r\n            let country = form[`country${type}_${tabIndex}`];\r\n            \r\n            if (((line1.$invalid || line1.$error.required) && (line1.$dirty || line1.length > 0))) {\r\n                errors.push(gettextCatalog.getString(`Address #${tabIndex + 1}. 'Address line' is required.`));\r\n                hasError = true;\r\n            }\r\n\r\n            if (((city.$invalid || city.$error.required) && (city.$dirty || city.length > 0))) {\r\n                errors.push(gettextCatalog.getString(`Address #${tabIndex + 1}. 'City' is required.`));\r\n                hasError = true;\r\n            }\r\n        })\r\n\r\n        $.each($scope.editedCustomer.Contacts, (tabIndex, contact) => {\r\n\r\n            let contactName = form[`contactName_${tabIndex}`];\r\n            let email = form[`email_${tabIndex}`];\r\n            \r\n            if (((email.$invalid || email.$error.required) && (email.$dirty || email.length > 0))) {\r\n                hasError = true;\r\n                errors.push(gettextCatalog.getString(`Contact #${tabIndex + 1}. Please enter a valid email.`));\r\n            }\r\n\r\n            if (((contactName.$invalid || contactName.$error.required) && (contactName.$dirty || contactName.length > 0))) {\r\n                hasError = true;\r\n                errors.push(gettextCatalog.getString(`Contact #${tabIndex + 1}. 'Name' is required.`));\r\n            }\r\n\r\n        })\r\n\r\n        if (hasError)\r\n            errorService.showError(errors.filter((v, i, a) => a.indexOf(v) === i).join('\\n'), function () {}, title);\r\n\r\n        return hasError;\r\n    };\r\n\r\n    $scope.cancelEditCustomerDialogModal = function () {\r\n        $scope.mode = 'search';\r\n   \r\n        if($scope.searchText){\r\n            $(\"#searchCustomerText\").val($scope.searchText).trigger('input')\r\n        }\r\n    }\r\n\r\n    $scope.cancelDialogModal = function (form) {\r\n        if (form.$dirty) {\r\n            $timeout(function() {\r\n                $rootScope.$broadcast('header.confirmCancelDialog');\r\n            });\r\n\r\n            return;            \r\n        }\r\n\r\n        if($scope.mode === 'editCustomerOnSalesPage'){\r\n            $scope.cancelEditCustomerDialogModal();\r\n        }\r\n        else {\r\n            $scope.cancelDialog();\r\n        }\r\n    };\r\n\r\n    $scope.$on('header.confirmedCancelDialog', function () {\r\n        $scope.cancelDialog();\r\n    });\r\n\r\n    $scope.$watch('tabs.shippingSelected',\r\n        function (newValue, oldValue) {\r\n            console.log('tabs.shippingSelected = ' + newValue);\r\n        }\r\n    );\r\n\r\n    $scope.$watch('tabs.billingSelected',\r\n        function (newValue, oldValue) {\r\n            console.log('tabs.billingSelected = ' + newValue);\r\n        }\r\n    );\r\n\r\n    $scope.$watch('tabs.contactTabIndex',\r\n        function (newValue, oldValue) {\r\n            console.log('tabs.contactTabIndex = ' + newValue);\r\n        }\r\n    );\r\n}]);\r\n","angular.module(\"mainApp\").controller('addSalesRepresentativeController',\r\n    ['$scope', '$rootScope', 'configService', 'errorService', 'userManagementService', 'helperService', 'localDBProvider', 'jsStoreProvider',\r\n        '$element', 'constants', '$timeout', 'gettextCatalog', 'deviceInfo',\r\nfunction ($scope, $rootScope, configService, errorService, userManagementService, helperService, localDBProvider, jsStoreProvider,\r\n    $element, constants, $timeout, gettextCatalog, deviceInfo) {\r\n\r\n    $scope.settingsProvider = configService.isSite || deviceInfo.isSimulator ? jsStoreProvider : localDBProvider;\r\n    $scope.hideUsersAssignedToAllLocations = false;\r\n    $scope.salesRepresentative = null;\r\n    $scope.searchText = null;\r\n    $scope.salesRepresentativeSearchList = [];\r\n    $scope.searchLimit = constants.customerSearchLimit;\r\n    $scope.mode = 'search';\r\n    $scope.isOnline = configService.isOnline;\r\n    $scope.minSymbolsToStartSearch = 0;\r\n    $scope.minSymbolsMessage = gettextCatalog.getString(\"Enter no less than {{cnt}} symbols to start searching.\", { cnt: $scope.minSymbolsToStartSearch });\r\n\r\n    $scope.firstShow = true;\r\n\r\n    $scope.fcss = { 'height': window.innerHeight * 0.9 + 'px' };\r\n\r\n    $scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n        $scope.isOnline = object;\r\n    });\r\n   \r\n\r\n    $scope.$on('header.setOutletInfo', function (event, object) {\r\n        $scope.salesRepresentative = null;\r\n        $scope.searchText = null;\r\n        $scope.salesRepresentativeSearchList = [];\r\n    });\r\n   \r\n    $scope.hideUsersAssignedToAllLocationsChanged = function (value)\r\n    {        \r\n        $scope.settingsProvider.setHideUsersAssignedToAllLocations(value).then(res => {\r\n            $scope.searchSalesRepresentative();\r\n        });        \r\n    }    \r\n\r\n    $timeout(function () {\r\n        initSelects();\r\n    }, 0);\r\n    \r\n\r\n    $scope.$on('addSalesRepresentative.show', function (event, data) {\r\n        $scope.searchText = null;\r\n        $scope.mode = 'search';\r\n\r\n        $scope.settingsProvider.getHideUsersAssignedToAllLocations().then(r => {\r\n            $scope.hideUsersAssignedToAllLocations = r && r.Value === 'true';\r\n\r\n            if($scope.salesRepresentativeSearchList.length === 0){\r\n                $scope.searchSalesRepresentative();\r\n            }\r\n        });       \r\n\r\n        helperService.showDialog($element, function() {\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n                $('.addSalesRepresentativeScrollWrapper').show();\r\n            }\r\n\r\n            if ($scope.mode == 'search') {\r\n                $('#searchSalesRepresentativeText').focus();\r\n            }\r\n        });\r\n    });\r\n    \r\n\r\n    $scope.canShowErrors = false;\r\n\r\n    $scope.searchSalesRepresentative = function () {\r\n        $scope.canShowErrors = $scope.searchSalesRepresentativeForm.$invalid;\r\n        var id = $scope.searchSalesRepresentativeID;\r\n\r\n        $scope.searchSalesRepresentativeID = null;\r\n\r\n        if ($scope.searchSalesRepresentativeForm.$invalid) {\r\n            return false;\r\n        }\r\n\r\n        $scope.canShowErrors = false;\r\n        $.blockUI();\r\n\r\n        let filters = (!!id ? { ID: id } : {Name: $scope.searchText});\r\n\r\n        if($scope.hideUsersAssignedToAllLocations)\r\n        {\r\n            filters.HideAllLocations = true;\r\n        }\r\n\r\n        userManagementService.searchSaleRepresentatives(1, $scope.searchLimit, filters).then(function (resp) {\r\n            $scope.salesRepresentativeSearchList = resp.SaleRepresentatives;\r\n            $.unblockUI();\r\n            if (!!resp.SaleRepresentatives && resp.SaleRepresentatives.length > 0) {\r\n                if (!configService.isSite) {\r\n                    Keyboard.hide();\r\n                }\r\n                else {\r\n                    helperService.hideKeyboard();\r\n                }\r\n\r\n                // when from live search simply select him\r\n                if (!!id && resp.SaleRepresentatives.length == 1) {\r\n                    $scope.selectSalesRepresentative(resp.SaleRepresentatives[0]);\r\n                    $scope.addSalesRepresentative();\r\n                    return;\r\n                }\r\n            }\r\n\r\n            $timeout(function () {\r\n                if (!!$scope.salesRepresentativeSearchList && $scope.salesRepresentativeSearchList.length > 0) {\r\n                    if (configService.isMobile) {\r\n                        Keyboard.hide();\r\n                    }\r\n                    else {\r\n                        helperService.hideKeyboard();\r\n                    }\r\n                }\r\n            }, 0);\r\n        },\r\n            function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        return false;\r\n    };\r\n\r\n    $scope.cancelDialog = function () {\r\n        helperService.closeDialog($element);\r\n\r\n    };\r\n\r\n    $scope.selectSalesRepresentative = function (item) {\r\n        $scope.salesRepresentative = item;\r\n    };\r\n\r\n\r\n    $scope.addSalesRepresentative = function () {\r\n        helperService.closeDialog($element);\r\n        $rootScope.$broadcast('addSalesRepresentative.selected', { salesRepresentative: $scope.salesRepresentative, action: 'search' });\r\n    };\r\n\r\n\r\n}]);","angular.module(\"mainApp\").controller('addSalesShippingAddressController',\r\n    ['$scope', '$rootScope', 'configService', 'helperService',\r\n        '$element', '$timeout', 'gettextCatalog',\r\nfunction ($scope, $rootScope, configService, helperService,\r\n    $element,  $timeout, gettextCatalog) {\r\n\r\n    $scope.shippingAddressSearchList = [];\r\n    $scope.emptyText = '';\r\n    $scope.resultCount = 0;\r\n    $scope.searchText = null;\r\n    $scope.salesShippingAddress = null;\r\n\r\n    $scope.$on('header.setOutletInfo', function (event, object) {\r\n        $scope.searchText = null;\r\n        $scope.resultCount = 0;\r\n        $scope.emptyText = '';\r\n        $scope.shippingAddressSearchList = [];\r\n    });\r\n\r\n    $timeout(function () {\r\n        initSelects();\r\n    }, 0);\r\n    \r\n    $scope.$on('addShippingAddress.show', function (event, data) {\r\n        const customerAddressData = data.customerAddressData || [];\r\n        \r\n        $scope.salesShippingAddress = null;\r\n        $scope.searchText = null;\r\n        $scope.shippingAddressList = customerAddressData.filter(address => address.Type === \"Shipping\")\r\n        \r\n        // Prioritize default shipping address\r\n        const defaultShippingAddressIndex = $scope.shippingAddressList.findIndex(ad => ad.DefaultForType);\r\n        if (defaultShippingAddressIndex > 0) {\r\n            const el = $scope.shippingAddressList.splice(defaultShippingAddressIndex, 1);\r\n            $scope.shippingAddressList.unshift(el.pop());\r\n        }\r\n        \r\n        $scope.shippingAddressSearchList = $scope.shippingAddressList.map(address => {\r\n            return {\r\n                ...address,\r\n                displayText: `${address.Line1} ${address.Line2} ${address.City} ${address.State} ${address.Postcode} ${address.Country}`,\r\n                displayAddress: true\r\n            };\r\n        });\r\n        $scope.resultCount = $scope.shippingAddressSearchList.length;\r\n        \r\n        // If previous selected address available then set it selected from the list.\r\n        const prvSelectedAddressData = data.selectedAddressData;\r\n        if (prvSelectedAddressData) {\r\n            const selectedAddress = $scope.shippingAddressSearchList.find(address => { \r\n                return address.Line1 === prvSelectedAddressData.Line1 && \r\n                    address.Line2 === prvSelectedAddressData.Line2 &&\r\n                    address.City === prvSelectedAddressData.City &&\r\n                    address.State === prvSelectedAddressData.State &&\r\n                    address.Postcode === prvSelectedAddressData.Postcode &&\r\n                    address.Country === prvSelectedAddressData.Country;\r\n            });\r\n\r\n            if (selectedAddress) {\r\n                $scope.salesShippingAddress = selectedAddress;\r\n            }\r\n        }\r\n\r\n        helperService.showDialog($element, function() {\r\n            $('#searchSalesShippingAddressText').focus();\r\n        });\r\n    });\r\n    \r\n    $scope.getEmptyText = function() {\r\n        return $scope.shippingAddressSearchList.length ? gettextCatalog.getString('No results found') : gettextCatalog.getString('No shipping address available')\r\n    }\r\n\r\n    $scope.searchShippingAddress = function () {\r\n\r\n        $.blockUI();\r\n\r\n        const filterText = $scope.searchText.toLowerCase();\r\n        $scope.resultCount = 0;\r\n\r\n        $scope.shippingAddressSearchList.forEach(address => {\r\n            address.displayAddress = address.displayText.toLowerCase().indexOf(filterText) >= 0;\r\n            \r\n            if (address.displayAddress) {\r\n                $scope.resultCount++;\r\n            }\r\n        });\r\n\r\n        $.unblockUI();\r\n\r\n        if ($scope.resultCount && $scope.shippingAddressSearchList.length > 0) {\r\n            $scope.closeKeyboard();\r\n        } else {\r\n            $timeout($scope.closeKeyboard, 0);\r\n        }\r\n    };\r\n\r\n    $scope.closeKeyboard = function () {\r\n        if (!!$scope.shippingAddressSearchList && $scope.shippingAddressSearchList.length > 0) {\r\n            if (configService.isMobile) {\r\n                Keyboard.hide();\r\n            }\r\n            else {\r\n                helperService.hideKeyboard();\r\n            }\r\n        }\r\n    };\r\n\r\n    $scope.cancelDialog = function () {\r\n        helperService.closeDialog($element);\r\n\r\n    };\r\n\r\n    $scope.selectSalesShippingAddress = function (item) {\r\n        $scope.salesShippingAddress = item;\r\n    };\r\n\r\n    $scope.addSalesShippingAddress = function () {\r\n        helperService.closeDialog($element);\r\n        $rootScope.$broadcast('addSalesShippingAddress.selected', { selectedSalesShippingAddress:  $scope.salesShippingAddress, action: 'search' });\r\n    };\r\n}]);","angular.module(\"mainApp\").controller('addStockOrderLineController',\r\n    ['$scope', '$rootScope', 'gettextCatalog',\r\n     'helperService', '$timeout', 'configService',\r\n        'soundService', '$q', 'printService', 'errorService',\r\n     function ($scope, $rootScope, gettextCatalog,\r\n               helperService, $timeout, configService,\r\n         soundService, $q, printService, errorService) {\r\n\r\n                const STATUS_DRAFT = 'DRAFT';\r\n                $scope.QuantityPropName = 'TransferQuantity';\r\n                $scope.ShowAtLocations = true;\r\n\r\n                $scope.availableProducts = [];\r\n                $scope.groupedAvailableProducts = [];\r\n                $scope.displayAvailableProducts = [];\r\n                $scope.firstScanFormShow = true;\r\n\r\n                $scope.firstAddFormShow = true;\r\n                $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n                $scope.firstShow = true;\r\n\r\n                $scope.currentOrder = {};\r\n\r\n                $scope.firstScanStart = true;\r\n                $scope.isScanDlgVisible = false;\r\n                $scope.fcss = { 'height': (window.innerHeight*0.85 - 250)  + 'px' };\r\n\r\n                $scope.itemQuantityDlg = null; // is bound to discount popover object with methods from directive\r\n                $scope.quantityObject = {};\r\n\r\n                $scope.scanGridProducts = [];\r\n\r\n                $scope.$on(\"stockTransferOrder.addLine\", function(event, data) {\r\n                    $scope.currentOrder = data.currentOrder;\r\n                    $scope.availableProducts = data.availableProducts;\r\n                    $scope.groupedAvailableProducts = data.groupedAvailableProducts;\r\n                    $scope.QuantityPropName = 'TransferQuantity';\r\n\r\n                    $scope.modifyTransferItemFunc = data.modifyTransferItemFunc;\r\n\r\n                    $scope.showScanDlg();\r\n                });\r\n\r\n                $scope.$on(\"purchaseOrder.addLine\", function(event, data) {\r\n                    $scope.currentOrder = data.currentOrder;\r\n                    $scope.availableProducts = data.availableProducts;\r\n                    $scope.groupedAvailableProducts = data.groupedAvailableProducts;\r\n                    $scope.QuantityPropName = 'Quantity';\r\n\r\n                    $scope.modifyTransferItemFunc = data.modifyTransferItemFunc;\r\n\r\n                    $scope.showScanDlg();\r\n                });\r\n\r\n                $scope.$on('view.loaded', function (evt) {       \r\n                    $timeout(function () {\r\n                        if ($scope.firstAddFormShow) {\r\n                            $scope.firstAddFormShow = false;\r\n                            initSelects();\r\n                        }\r\n       \r\n                        $('input, select').trigger('refresh');\r\n                    });\r\n                });\r\n\r\n                $scope.showScanDlg = function () {\r\n                    $scope.scanError = null;\r\n                    $scope.scanSuccess = null;\r\n                    $scope.quantityObject = {};\r\n                    $scope.setMultiscan('');\r\n                    $scope.stockTakeScanData = [];\r\n\r\n                    // if (!$scope.currentOrder.supplierID) {\r\n                    //     errorService.showError(\"Please select Supplier\");\r\n                    //     $.unblockUI();\r\n                    //     return;\r\n                    // }\r\n\r\n                    // no items at all\r\n                    if ($scope.availableProducts.length === 0 && $scope.totalCount === 0) {\r\n                        errorService.showError(gettextCatalog.getString('There are no available products in this location.'));\r\n                        //helperService.showCustomDialog('',\r\n                        //                               gettextCatalog.getString('There are no available products in this location'),\r\n                        //                               gettextCatalog.getString('OK'), null, false);\r\n                        return;\r\n                    }\r\n                    else\r\n                    // this condition is actually impossible but leave it for 'just in case'\r\n                        if ($scope.availableProducts.length > 0 && $scope.inStocktransferCount > 0) {\r\n                            errorService.showError(gettextCatalog.getString('There are more products in this location but some of them are under stocktake.'));\r\n                            //helperService.showCustomDialog('',\r\n                            //                               gettextCatalog.getString('There are more products in this location but some of them are under stocktake.'),\r\n                            //                               gettextCatalog.getString('OK'), null, false);\r\n                        }\r\n       \r\n       \r\n                    helperService.showDialog('#stockTransferAddDlg', function () {\r\n                        if ($scope.firstScanFormShow) {\r\n                            $scope.firstScanFormShow = false;\r\n                            $('.stocktransferScanGridScrollWrapper').show();\r\n                        } else {\r\n                            if (configService.isMobileDesign) {                                \r\n                                $scope.firstScanFormShow = true;\r\n                            }\r\n                        }\r\n\r\n                        $scope.isScanDlgVisible = true;\r\n                    });\r\n       \r\n                    printService.reconnect();\r\n       \r\n                    if ($scope.firstScanStart) {\r\n                        $scope.firstScanStart = false;\r\n                        $('#stockTransferAddDlg').find(\"ul li a\").click(function (evt) {\r\n                            var v = Number($(this).parent().attr('index'));\r\n       \r\n                            $timeout(function () {\r\n                                $scope.stockTransferActiveTab = v;\r\n                            });\r\n                        });\r\n                    }\r\n       \r\n                    $timeout(function () { $('input, select').trigger('refresh'); });\r\n       \r\n                    $scope.stocktakeScanActiveTab = 0;\r\n                    $scope.clearScanData();\r\n                };\r\n\r\n                $scope.clearScanData = function () {\r\n                    $scope.scanError = null;\r\n                    $scope.scanSuccess = null;\r\n                    $scope.quantityObject = {};\r\n                    $scope.scanGridProducts = [];\r\n                };\r\n                \r\n                $scope.setMultiscan = function (v) {\r\n                    $scope.multiScanText = v;\r\n                    $('#scanArea').val(v);\r\n                };\r\n\r\n                $scope.getMultiscan = function () {\r\n                    $scope.multiScanText = $('#scanArea').val();\r\n                    return $scope.multiScanText;\r\n                };\r\n\r\n                $scope.hideScanDlg = function () {\r\n                    $scope.isScanDlgVisible = false;\r\n                    helperService.closeDialog('#stockTransferAddDlg');\r\n                    $(\"#manualScanInput\").val(\"\");\r\n                };\r\n\r\n                $scope.modifyTransferItem = function (row, isAbsolute) {\r\n                    if(typeof $scope.modifyTransferItemFunc === \"function\"){\r\n                        $scope.modifyTransferItemFunc(row, isAbsolute, $scope.currentOrder, $scope.quantityObject, $scope.stockTransferActiveTab === 3);\r\n                    }\r\n                };\r\n\r\n                $scope.manualPress = function (event) {\r\n                    if (event.which === 13) {\r\n                        var v = $('#manualScanInput').val();\r\n                        if (!!v && v.length > 0) {\r\n                            $rootScope.$broadcast('scan.barcode', v);\r\n                        }\r\n                    }\r\n                };\r\n\r\n                $scope.comparator = function(a,b){\r\n                    if (a === null || typeof (a) !== 'string')\r\n                        return false;\r\n                    if (b === null || typeof (b) !== 'string')\r\n                        return false;\r\n       \r\n                    return a.toLowerCase() === b.toLowerCase();\r\n                };\r\n       \r\n\r\n                $scope.searchProductList = function (text) {\r\n                    return $scope.availableProducts.filter(function (el) {\r\n                        return $scope.comparator(el.Barcode, text) ||\r\n                               $scope.comparator(el.ProductCode, text);\r\n                    });\r\n                };\r\n       \r\n                $scope.$on('scan.barcode', function (event, barcode) {\r\n                    if ($scope.stockTransferActiveTab !== 0 && $scope.stockTransferActiveTab !== 2 && $scope.isScanDlgVisible) {\r\n                        $scope.clearScanData();\r\n       \r\n                        $.blockUI();\r\n                        var rows = $scope.searchProductList(barcode);\r\n                        $scope.scanGridProducts = angular.copy(rows);\r\n                        $scope.$broadcast('refreshScanTable');\r\n                        $.unblockUI();\r\n       \r\n                        if (rows.length === 0) {\r\n                            // $scope.scanError = 'Product not found. Scan another barcode';\r\n                            var msg = gettextCatalog.getString(\"Product not found. Please, scan another barcode.\");\r\n                            $rootScope.$broadcast('snackbar.show', {\r\n                                message: msg,\r\n                                type: 'error'\r\n                            });\r\n        \r\n                            return soundService.playBad();\r\n                        }\r\n                        else if ($scope.stockTransferActiveTab === 1) {\r\n                            if (rows.length > 1) {\r\n                                $scope.scanSuccess = 'Several products found. Select relevant product to proceed';\r\n                                return soundService.playBad();\r\n                            }\r\n                            else {\r\n                                $scope.scanSuccess = 'Product ' + barcode + ' has been added';\r\n                                $scope.modifyTransferItem(rows[0]);\r\n                                return soundService.playGood();\r\n                            }\r\n                        }\r\n                        else if ($scope.stockTransferActiveTab === 3) {\r\n                            if (rows.length > 1) {\r\n                                $scope.scanSuccess = 'Several products found. Select relevant product to proceed';\r\n                                return soundService.playBad();\r\n                            }\r\n                            else {\r\n                                $scope.scanSuccess = 'Product ' + barcode + ' has been found';\r\n                                $scope.makeQuantityObject(rows[0]);\r\n                            }\r\n       \r\n                        }\r\n                    }\r\n                    else if ($scope.stockTransferActiveTab === 2 && $scope.isScanDlgVisible) {\r\n                        $timeout(function () {\r\n                            var v = $scope.getMultiscan();\r\n                            $('#scanArea').focus().val('').val(v);\r\n                            $scope.setMultiscan(v + barcode + String.fromCharCode(13, 10));\r\n                        });\r\n                    }\r\n                });\r\n       \r\n                $scope.scanStockTransfer = function () {\r\n       \r\n                    if ($scope.stockTransferActiveTab === 2 && $scope.isScanDlgVisible &&\r\n                        !!$scope.getMultiscan() && $scope.getMultiscan().length > 0) {\r\n       \r\n                        var arr = $scope.getMultiscan().split(String.fromCharCode(10));\r\n       \r\n                        $scope.setMultiscan('');\r\n                        if (arr.length > 0) {\r\n                            $.blockUI();\r\n       \r\n                            angular.forEach(arr, function (br) {\r\n                                br = br.trim();\r\n                                if (!!br) {\r\n                                    var rows = $scope.availableProducts.filter(function (el) { \r\n                                        if(!el.Barcode || !br)\r\n                                            return false;\r\n                                        return el.Barcode.toLowerCase() == br.toLowerCase();   \r\n                                    });\r\n                                    if (rows.length !== 1) {\r\n                                        $scope.setMultiscan($scope.getMultiscan() + br + String.fromCharCode(13, 10));\r\n                                    }\r\n                                    else {\r\n                                        $scope.modifyTransferItem(rows[0]);\r\n                                    }\r\n       \r\n                                }\r\n                                    \r\n                            });\r\n       \r\n                            $.unblockUI();\r\n       \r\n                            if (!!$scope.getMultiscan()) // error\r\n                            {\r\n                                // $scope.scanError = 'Some of the barcodes supplied could not be matched to any products or more than one product is found per supplied barcode. Not processed barcodes are listed in the box below.';\r\n                                var msg = gettextCatalog.getString(\"Some of the barcodes supplied could not be matched to any products or more than one product is found per supplied barcode. Unprocessed barcodes are listed in the box below.\");\r\n                                $rootScope.$broadcast('snackbar.show', {\r\n                                    message: msg,\r\n                                    type: 'error'\r\n                                });\r\n    \r\n                                return soundService.playBad();\r\n                            }\r\n                            else {\r\n                                $scope.scanSuccess = 'All barcodes were recognised and stocktake quantity has been incremented for products related to these barcodes';\r\n                                return soundService.playGood();\r\n                            }\r\n                        }\r\n       \r\n                        $scope.clearScanData();\r\n                    }\r\n                };\r\n\r\n                $scope.showSetQuantityDlg = function (row) {\r\n                    if($scope.currentOrder.dataStatus === STATUS_DRAFT) {\r\n                        $scope.makeQuantityObject(row);\r\n                        $scope.showItemQuantityDlg(row.refID);\r\n                    }\r\n                };\r\n       \r\n                $scope.makeQuantityObject = function (row) {\r\n                    $scope.quantityObject = {};\r\n                    angular.copy(row, $scope.quantityObject);\r\n                    $scope.quantityObject.Adjustment = !!$scope.quantityObject[$scope.QuantityPropName] ? $scope.quantityObject[$scope.QuantityPropName] : 1;\r\n                    $scope.quantityObject.QuantityOnHand = !!row.QuantityOnHand ? row.QuantityOnHand : row.OnHand;\r\n                    $scope.quantityObject.OnOrder = !!row.OnOrder ? row.OnOrder : row.OnOrder;\r\n                    $scope.quantityObject.QuantityAvailable = !!row.QuantityAvailable ? row.QuantityAvailable : row.Available;\r\n                    $scope.quantityObject.showOnHand = true;\r\n                    $scope.quantityObject.hideBarcode = true;\r\n                    $scope.quantityObject.readOnly = true;\r\n                    if (!$scope.quantityObject.ID) {\r\n                        $scope.quantityObject.ID = row.ProductID;\r\n                    }\r\n                };\r\n       \r\n                $scope.showItemQuantityDlg = function (elID) {\r\n                    $scope.quantityObject.value = $scope.quantityObject.Adjustment;\r\n                    $timeout(function () {\r\n                            $scope.itemQuantityDlg.show(!elID ? '#quantityObject' : '#'+elID);\r\n                    });\r\n                };\r\n       \r\n                // callback\r\n                $scope.setQuantity = function (prm, event) {\r\n       \r\n                    $timeout(function () { $scope.itemQuantityDlg.hide(true); });\r\n       \r\n                    if (prm === true) {\r\n                        $timeout(function () {\r\n                            $scope.quantityObject.Adjustment = $scope.quantityObject.value;\r\n                            $scope.adjustStockTransfer();\r\n                        });\r\n                    }       \r\n                };\r\n       \r\n                $scope.adjustStockTransfer = function () {\r\n                    angular.forEach($scope.currentOrder.data, function (el) {\r\n                        if (el.ID === $scope.quantityObject.ID) {\r\n                            processed = true;\r\n                            el[$scope.QuantityPropName] = $scope.quantityObject.Adjustment;\r\n                            return false;\r\n                        }\r\n                    });\r\n                };\r\n\r\n                //-------------- LIVE SEARCH -----------------------------------------\r\n                $scope.minSymbolsToStartSearch = configService.minSymbolsToStartSearch;\r\n                $scope.minSymbolsMessage = gettextCatalog.getString(\"Only the first {{cnt}} products are shown.\", { cnt: 7 });\r\n                $scope.liveSearchIsOpen = false;\r\n                $scope.liveSearch = {\r\n                    liveSearchIsOpen: false\r\n                };\r\n                $scope.showMaxVisibleLiveSearchCountMsg = false;\r\n                $scope.searchProductID = null;\r\n                $scope.filter = {};\r\n                $scope.filter.scanGridSearchText = null;\r\n                \r\n                $scope.$watch('liveSearch.liveSearchIsOpen',\r\n                    function (newValue, oldValue) {\r\n                        $scope.placeMaxVisibleLiveSearchCountMsg();\r\n                        if (newValue) {\r\n                            $timeout(function() {\r\n                                helperService.fitHeightTypeahead('#' + $('#searchProductInput').attr('aria-owns'), true, '#stockorderingAddItemModalContent');\r\n                            },400);\r\n                        }\r\n                    }\r\n                );\r\n\r\n                \r\n                $scope.placeMaxVisibleLiveSearchCountMsg = function () {\r\n                        if ($scope.showMaxVisibleLiveSearchCountMsg && $scope.liveSearchIsOpen) {\r\n                            $timeout(function () {\r\n                                var lst = $('.autoCompleteBox ul')[0].getBoundingClientRect();\r\n                                if (lst.width > 0 && lst.height > 0) {\r\n                                    console.log('lst: ' + lst.width + ' ' + lst.height);\r\n                                    $('#minProdMessage').css('left', lst.left);\r\n                                    $('#minProdMessage').css('top', lst.bottom - 10);\r\n                                    $('#minProdMessage').show();\r\n                                }\r\n                                else\r\n                                    $('#minProdMessage').hide();\r\n\r\n                            });\r\n                        }\r\n                        else\r\n                            $('#minProdMessage').hide();\r\n                    };\r\n\r\n                \r\n                $scope.liveSearch = function (val) {\r\n                        $scope.searchType = 'live';\r\n                        $scope.filter.scanGridSearchText = val;\r\n                        \r\n                        var filter = $scope.filter.scanGridSearchText ? $scope.filter.scanGridSearchText.toLowerCase() : '';\r\n                        var filtered = $scope.groupedAvailableProducts.filter(function(item) {\r\n                            return !filter || (item.Name && item.Name.toLowerCase().indexOf(filter) !== -1)\r\n                            || (item.ProductCode && item.ProductCode.toLowerCase().indexOf(filter) !== -1)\r\n                            || (item.Barcode && item.Barcode.toLowerCase().indexOf(filter) !== -1);\r\n                        });\r\n                        var res = filtered.length > 7 ? filtered.slice(0, 7) : filtered;\r\n\r\n                        $scope.showMaxVisibleLiveSearchCountMsg = !!res && res.length > 0;\r\n                        $scope.placeMaxVisibleLiveSearchCountMsg();\r\n\r\n                        return res;\r\n                    };\r\n\r\n                $scope.liveSearchFinished = function (val) {\r\n                        return !!val ? val.name : null;\r\n                    };\r\n\r\n                $scope.liveSearchSelected = function (item, model, label, event) {\r\n                    // make search by product id and add product to order\r\n                    $scope.searchProductID = model.ProductID;\r\n                    $scope.searchLocationID = model.LocationID;\r\n                    $scope.searchExpiryDate = model.ExpiryDate;\r\n                    $scope.searchBatchSN = model.BatchSN;\r\n                    $scope.filter.scanGridSearchText = item.Name;\r\n                    $scope.scanGridSearch();\r\n                };\r\n\r\n                $scope.liveKeyPress = function (event) {\r\n                    if (event.which === 13) {\r\n                        $scope.searchProductID = null;\r\n                        $scope.scanGridSearch();\r\n                    }\r\n                };\r\n\r\n                $scope.scanGridSearch = function () { \r\n                        if (configService.isMobile)\r\n                            Keyboard.hide();\r\n                \r\n                        $.blockUI();\r\n                        var filter = $scope.filter.scanGridSearchText ? $scope.filter.scanGridSearchText.toLowerCase() : '';\r\n                        var filtered = $scope.groupedAvailableProducts.filter(function(item) {\r\n                            return ($scope.searchProductID && item.ProductID === $scope.searchProductID) || \r\n                            (!$scope.searchProductID && (!filter \r\n                            || (item.Name && item.Name.toLowerCase().indexOf(filter) !== -1)\r\n                            || (item.ProductCode && item.ProductCode.toLowerCase().indexOf(filter) !== -1)\r\n                            || (item.Barcode && item.Barcode.toLowerCase().indexOf(filter) !== -1)));\r\n                        });\r\n\r\n                        if (filtered.length > 1 && ($scope.searchBatchSN || $scope.searchLocationID || $scope.searchExpiryDate)) {\r\n                            filtered = filtered.filter(function (item) {\r\n                                return (!$scope.searchBatchSN || $scope.searchBatchSN === item.BatchSN) && \r\n                                        (!$scope.searchLocationID || $scope.searchLocationID === item.LocationID) &&\r\n                                        (!$scope.searchExpiryDate || $scope.searchExpiryDate === item.ExpiryDate);\r\n                            });\r\n                        }\r\n\r\n                        if(filtered.length === 1) {\r\n                            $scope.modifyTransferItem(filtered[0]);\r\n                        }\r\n                        $scope.displayAvailableProducts = filtered;\r\n\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve(true);\r\n                        $.unblockUI();\r\n                        return deferred2.promise;\r\n                    };\r\n\r\n                $scope.scanGridCancelSearchMode = function () {\r\n                        $scope.searchProductID = null;\r\n                        $scope.filter.scanGridSearchText = null;\r\n                        $scope.displayAvailableProducts = [];\r\n                    };\r\n}]);","angular.module(\"mainApp\").controller('addSurchargeController',\r\n    ['$scope', '$rootScope', 'configService', 'helperService',\r\n        '$element', '$timeout', 'saleService', 'surchargeService',\r\n        function ($scope, $rootScope, configService, helperService,\r\n            $element, $timeout, saleService, surchargeService) {\r\n\r\n            $scope.isOnline = configService.isOnline;\r\n            $scope.surcharge = null;\r\n            $scope.surcharges = [];\r\n            $scope.isCustom = false;\r\n            $scope.paymentProcessorID = null;\r\n//            $scope.amount\r\n\r\n            $scope.fcss = { 'height': window.innerHeight * 0.9 + 'px' };\r\n\r\n            $scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n                $scope.isOnline = object;\r\n            });\r\n\r\n\r\n            $timeout(function () {\r\n                initSelects();\r\n            }, 0);\r\n\r\n            $scope.$on('addSurcharge.show', function (event, data) {\r\n                \r\n                $scope.surcharges = [];// data.surcharges;\r\n                $scope.realSum = data.realSum;\r\n                $scope.isCustom = data.isCustom === true;\r\n                $scope.paymentProcessorID = data.paymentProcessorID;\r\n\r\n                $scope.surcharges = surchargeService.calculateSurcharges(data);\r\n\r\n                helperService.showDialog($element);\r\n            });\r\n\r\n\r\n            $scope.canShowErrors = false;\r\n\r\n            $scope.cancelDialog = function () {\r\n                helperService.closeDialog($element);\r\n                $rootScope.$broadcast('addSurcharge.selected', { surcharge: null, action: 'cancel' });\r\n            };\r\n\r\n            $scope.selectSurcharge = function (item) {\r\n                $scope.surcharge = item;\r\n            };\r\n\r\n\r\n            $scope.addSurcharge = function () {\r\n                helperService.closeDialog($element);\r\n                if (!!$scope.surcharge) {\r\n                    $scope.surcharge.PaymentRealAmount = $scope.realSum;\r\n                }\r\n                $rootScope.$broadcast('addSurcharge.selected',\r\n                    {\r\n                        isCustom: $scope.isCustom,\r\n                        paymentProcessorID: $scope.paymentProcessorID,\r\n                        surcharge: $scope.surcharge,\r\n                        action: 'selected'\r\n                    });\r\n            };\r\n        }]);","//import BWIPJS from 'bwip-js'; TODO\r\n//import BWIPP from 'bwip-js/bwipp';\r\n//import bwipjs_fonts from 'bwip-js/browser-fonts';\r\n//const {bwipjs_fonts} = require.resolve('bwip-js/browser-fonts');\r\n\r\n\r\nangular.module('services').service('barcodeService', [\r\n    '$q', '$timeout', '$rootScope', 'configService', 'helperService',\r\n    function ($q, $timeout, $rootScope, configService, helperService) {\r\n\r\n        this.type = \"gs1-128\"; // used by default\r\n        this.monochrome = true;\r\n        this.scaleX = 2;\r\n        this.scaleY = 1;\r\n        this.rotation = \"N\";\r\n        this.arrBarcodes = [];\r\n\r\n\r\n        this.clearBarcodes = function () {\r\n            this.arrBarcodes = [];//\r\n        };\r\n\r\n        this.initBarcode = function (elemID, type, text, altText, opts, scaleX) {\r\n\r\n            var imgDiv = $('.barcode_img.img_' + elemID);\r\n            imgDiv.html(\"\");\r\n\r\n            if (!!text) {\r\n                var barcodeText = text.replace(/^\\s+/, '').replace(/\\s+$/, '');\r\n                var barcodeAltText = barcodeText;\r\n                var options = opts;\r\n                var scaleX = scaleX ? scaleX : this.scaleX;\r\n                var scaleY = this.scaleY;\r\n                var rotation = this.rotation;\r\n                var monochrome = this.monochrome;\r\n                var initArr = this.arrBarcodes;\r\n\r\n                var elt = { id: elemID, sym: type, desc: type, text: barcodeText, altText: barcodeAltText, opt: options };\r\n\r\n                var bw = new BWIPJS(bwipjs_fonts, monochrome);\r\n\r\n                var canvas = document.getElementById(elemID);\r\n                canvas.height = 1;\r\n                canvas.width = 1;\r\n                canvas.style.visibility = 'hidden';\r\n\r\n                // Convert the options to a dictionary object, so we can pass alttext with\r\n                // spaces.\r\n                var opts = options;\r\n\r\n                var tmp = opts.split(' ');\r\n                opts = {};\r\n                for (var i = 0; i < tmp.length; i++) {\r\n                    if (!tmp[i]) {\r\n                        continue;\r\n                    }\r\n                    var eq = tmp[i].indexOf('=');\r\n                    if (eq == -1) {\r\n                        opts[tmp[i]] = true;\r\n                    } else {\r\n                        opts[tmp[i].substr(0, eq)] = tmp[i].substr(eq + 1);\r\n                    }\r\n                }\r\n\r\n                // Add the alternate text\r\n                if (barcodeAltText) {\r\n                    opts.alttext = barcodeAltText;\r\n                    opts.includetext = true;\r\n                }\r\n                // We use mm rather than inches for height - except pharmacode2 height\r\n                // which is expected to be in mm\r\n                if (+opts.height && elt.sym != 'pharmacode2') {\r\n                    opts.height = opts.height / 25.4 || 0.5;\r\n                }\r\n                // Likewise, width.\r\n                if (+opts.width) {\r\n                    opts.width = opts.width / 25.4 || 0;\r\n                }\r\n                // BWIPP does not extend the background color into the\r\n                // human readable text.  Fix that in the bitmap interface.\r\n\r\n                if (opts.backgroundcolor) {\r\n                    bw.bitmap(new Bitmap(canvas, rotation, opts.backgroundcolor));\r\n                    delete opts.backgroundcolor;\r\n                } else {\r\n                    bw.bitmap(new Bitmap(canvas, rotation));\r\n                }\r\n\r\n                // Set the scaling factors\r\n                bw.scale(scaleX, scaleY);\r\n\r\n                // Add optional padding to the image\r\n                bw.bitmap().pad(+opts.paddingwidth * scaleX || 0,\r\n                    +opts.paddingheight * scaleY || 0);\r\n\r\n                try {\r\n                    BWIPP()(bw, elt.sym, text, opts);\r\n                } catch (e) {\r\n                    // Watch for BWIPP generated raiseerror's.\r\n                    canvas.style.display = 'none';\r\n                    imgDiv.css(\"width\", \"inherit\").css(\"word-wrap\", \"break-word\");\r\n                    var msg = '' + e;\r\n                    if (msg.indexOf(\"bwipp.\") >= 0) {\r\n                        var errorText = msg.split(':');\r\n                        imgDiv.html(\"<div class='barcode_error' id='error_\" + elemID + \"'>Error generating barcode from value: \" + barcodeText + \"<br/> \" + errorText[2] + \"</div>\");\r\n                    } else if (e.stack) {\r\n                        var errorText = e.stack.split(':');\r\n                        imgDiv.html(\"<div class='barcode_error' id='error_\" + elemID + \"'>Error generating barcode from value: \" + barcodeText + \"<br/> \" + errorText[2] + \"</div>\");\r\n                    } else {\r\n                        var errorText = e.split(':');\r\n                        imgDiv.html(\"<div class='barcode_error' id='error_\" + elemID + \"'>Error generating barcode from value: \" + barcodeText + \"<br/> \" + errorText[2] + \"</div>\");\r\n                    }\r\n                    return;\r\n                }\r\n                initArr.push({ obj: bw, elt: elt, opts: opts, canvas: canvas });\r\n\r\n                this.arrBarcodes = initArr;\r\n            } else {\r\n                var canvas = document.getElementById(elemID).style.display = 'none';\r\n                imgDiv.html(\"<div class='barcode_error' id='error_\" + elemID + \"'>Error generating barcode. Barcode has no value.</div>\");\r\n            }\r\n\r\n        };\r\n\r\n        this.renderBarcodes = function () {\r\n\r\n            var elemID = \"\";\r\n            var arrBarcodes = this.arrBarcodes;\r\n            var barcodeText = \"\";\r\n\r\n            try {\r\n                // Allow the font manager to demand-load any required fonts\r\n                // before calling render().\r\n                bwipjs_fonts.loadfonts(function (e) {\r\n                    if (e) {\r\n                        $('#' + elemID).text(e.stack || ('' + e));\r\n                    } else {\r\n                        for (let index = 0, len = arrBarcodes.length; index < len; ++index) {\r\n                            barcodeText = arrBarcodes[index].elt.text;\r\n                            elemID = arrBarcodes[index].elt.id;\r\n\r\n                            arrBarcodes[index].obj.render();\r\n\r\n                            //arrBarcodes[index].canvas.style.visibility = 'visible';\r\n                            arrBarcodes[index].canvas.style.display = 'none';\r\n\r\n                            var dataURL = arrBarcodes[index].canvas.toDataURL();\r\n\r\n                            var imgDiv = $('.barcode_img.img_' + elemID);\r\n                            imgDiv.html(\"<img src='\" + dataURL + \"' style='max-width:100%;height:auto;'/>\");\r\n                        }\r\n                        /*\r\n                        // Show proofs?\r\n                        if (location.search.indexOf('proofs=1') != -1) {\r\n                            var img = document.getElementById('proof-img');\r\n                            if (img) {\r\n                                img.src = 'proofs/' + elt.sym + '.png';\r\n                                img.style.visibility = 'visible';\r\n                            }\r\n                        }\r\n                        */\r\n                    }\r\n                });\r\n            } catch (e) {\r\n                arrBarcodes[index].canvas.style.display = 'none';\r\n                var imgDiv = $('.barcode_img.img_' + elemID);\r\n                imgDiv.css(\"width\", \"inherit\").css(\"word-wrap\", \"break-word\");\r\n                // Watch for BWIPP generated raiseerror's.\r\n                var msg = '' + e;\r\n                if (msg.indexOf(\"bwipp.\") >= 0) {\r\n                    var errorText = msg.split(':');\r\n                    imgDiv.html(\"<div class='barcode_error' id='error_\" + elemID + \"'>Error generating barcode from value: \" + barcodeText + \"<br/> \" + errorText[2] + \"</div>\");\r\n                } else if (e.stack) {\r\n                    var errorText = e.stack.split(':');\r\n                    imgDiv.html(\"<div class='barcode_error' id='error_\" + elemID + \"'>Error generating barcode from value: \" + barcodeText + \"<br/> \" + errorText[2] + \"</div>\");\r\n                } else {\r\n                    var errorText = e.split(':');\r\n                    imgDiv.html(\"<div class='barcode_error' id='error_\" + elemID + \"'>Error generating barcode from value: \" + barcodeText + \"<br/> \" + errorText[2] + \"</div>\");\r\n                }\r\n                return;\r\n            }\r\n        };\r\n\r\n        this.clearFonts = function () {\r\n            $.each(bwipjs_fonts.fontsets, function (idx, f) {\r\n                f.fonts = {};\r\n            });\r\n        };\r\n\r\n        this.loadAllFonts = function () {\r\n            bwipjs_fonts.monocolor = true;\r\n\r\n            for (let i = 0; i < bwipjs_fonts.fontsets.length; i++) {\r\n                var fst = bwipjs_fonts.fontsets[i];\r\n                $.each(Object.getOwnPropertyNames(fst.sizes), function (j, sz) {\r\n                    bwipjs_fonts.getglyph(i, fst.minchar, fst.sizes[sz], fst.sizes[sz]);\r\n                });\r\n            }\r\n\r\n            var deferred = $q.defer();\r\n            bwipjs_fonts.loadfonts(function () {\r\n                deferred.resolve(true);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.initForReceiptInProgress = false; // protection for simultaneous execution. Wrapper :(\r\n        this.initForReceipt = function (receiptSaleModel) {\r\n            console.log('barcode lock 1: '+this.initForReceiptInProgress);\r\n            if(this.initForReceiptInProgress) return;\r\n\r\n            this.initForReceiptInProgress = true;\r\n            console.log('barcode lock 3: '+this.initForReceiptInProgress);\r\n            this.clearBarcodes();\r\n\r\n            if ($(\"canvas.barcode\").is(\"#code93\")) {\r\n                this.initBarcode(\"code93\", \"code93\", receiptSaleModel.Barcode.toUpperCase(), receiptSaleModel.Barcode.toUpperCase(), \"includetext includecheck\");\r\n            }\r\n            if ($(\"canvas.barcode\").is(\"#code128\")) {\r\n                this.initBarcode(\"code128\", \"code128\", receiptSaleModel.Barcode, receiptSaleModel.Barcode, \"includetext\");\r\n            }\r\n\r\n            /* /generating barcodes for reciept */\r\n            var THIS = this;\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('receipt.template', $('.receipt-template'));\r\n\r\n                try{\r\n                    /* generating barcodes for product */\r\n                    $(\"canvas.product_barcode\").each(function (i, elem) {\r\n                        var type = $(this).attr(\"type\");\r\n                        var id = $(this).attr(\"id\");\r\n                        var text = $(this).attr(\"b_value\");\r\n\r\n                        THIS.initBarcode(id, type, text, text, \"includetext\");\r\n                    });\r\n                    /* /generating barcodes for product */\r\n\r\n                    /* Draw generated barcodes */\r\n                    THIS.renderBarcodes();\r\n                    THIS.initForReceiptInProgress = false;\r\n                    console.log('barcode lock 3: '+THIS.initForReceiptInProgress);\r\n\r\n                } catch(e) {\r\n                    THIS.initForReceiptInProgress = false;\r\n                    console.log('barcode lock 4: '+THIS.initForReceiptInProgress);\r\n                }\r\n            });\r\n        };\r\n\r\n        // below is a set of functions to work with weight based barcodes\r\n        // also support GS1 barcode specification\r\n        this.parceBarcodeWeightBased = function (barcode) {\r\n            var res = {\r\n                SKU: null,\r\n                Value: null\r\n            };\r\n\r\n            if (configService.advancedBarcodeMode === 0) return null; // weight based mode is turned off\r\n\r\n            var isGS1Mode = configService.advancedBarcodeMode === 3;\r\n\r\n            /*\r\n             In GS1 mode decimal point is defined by second digit as well as weight/price mode\r\n             EAN:\r\n                20IIIIIVPPPPC       Price based on /100 \r\n                21IIIIIVPPPPC       Price based on /10 \r\n                22IIIIIVPPPPC       Price \r\n                23IIIIIVWWWWC       Weight based on /1000  \r\n                24IIIIIVWWWWC       Weight based on /100\r\n                25IIIIIVWWWWC       Weight based on /10\r\n                28RRRRRPPPPPC       Price based on 5 digit/100       \r\n             Where  \r\n                := I represents product code         \r\n                 := V verifier         \r\n                 := P Price         \r\n                 := C Barcode check digit            \r\n             UPC:\r\n                 2IIIIIVPPPPC        Price based on /10\r\n             */\r\n\r\n            if (!barcode || barcode.length < 12 || barcode.length > 13) return null; // length is incompatibe\r\n            if (barcode.length === 12 && barcode.substr(0, 1) !== '2') return null; // not a weight based\r\n\r\n            var decimalPoint = configService.advancedBarcodeValueDecimalPoint;\r\n\r\n            if (!isGS1Mode) {\r\n                if (barcode.length === 13 && barcode.substr(0, 2) !== '20' && barcode.substr(0, 2) !== '02') return null; // not a weight based\r\n\r\n            } else {\r\n                // GS1 mode parsing\r\n                res.IsDS1 = true;\r\n\r\n                var prefix = parseInt(barcode.substr(0, 2));\r\n                if (barcode.length === 13 && ((prefix < 20 || prefix > 25) && prefix != 28)) return null; // not a GS1 format\r\n                if (barcode.length === 13) {\r\n                    if (prefix >= 20 && prefix <= 22) {\r\n                        res.IsDS1PriceBased = true;\r\n                        decimalPoint = 22 - prefix;\r\n                    } else if (prefix >= 23 && prefix <= 25) {\r\n                        decimalPoint = 26 - prefix;\r\n                    } else\r\n                        decimalPoint = 2;\r\n                }\r\n                else {\r\n                    res.IsDS1PriceBased = true;\r\n                }\r\n            }\r\n\r\n            // parse string\r\n            if (barcode.length === 13)\r\n                barcode = barcode.substr(2, barcode.length - 3);\r\n            else\r\n                barcode = barcode.substr(1, barcode.length - 2);\r\n\r\n            // split content\r\n            res.SKU = barcode.substr(0, configService.advancedBarcodeSKULength);\r\n            var value = barcode.substr(-configService.advancedBarcodeValueLength);\r\n\r\n            value = parseInt(value);\r\n            if (isNaN(value)) return null;\r\n            var dec = parseInt('10000000000'.substr(0, decimalPoint + 1));\r\n            res.Value = value / dec;\r\n\r\n            res.UseOutletSKU = configService.advancedBarcodeUseOutletSKU === true;\r\n\r\n            if (isNaN(res.Value)) return null;\r\n\r\n            return res;\r\n        };\r\n\r\n        this.getWeightAmount = function (el, amount, barcode) {\r\n            var SpecAmount = !amount ? null : parseFloat(amount);\r\n            if (isNaN(SpecAmount))\r\n                SpecAmount = null;\r\n\r\n            var cnt = 1;\r\n            if (SpecAmount) {\r\n                if (configService.advancedBarcodeMode === 1 ||\r\n                    (barcode.IsDS1 === true && barcode.IsDS1PriceBased !== true)) { // weight based\r\n                    cnt = SpecAmount;\r\n                }\r\n\r\n                //                else { // price based\r\n                //                    var prc = helperService.DEARRound(!!el.DefaultPrice ? el.DefaultPrice : el.Price, 4);\r\n                //                    if (prc)\r\n                //                        cnt = helperService.DEARRound(SpecAmount / prc, 4);\r\n                //                    else\r\n                //                      cnt = 1;\r\n                //                }\r\n            }\r\n\r\n            return cnt;\r\n        };\r\n\r\n        this.setPriceBasedItemValue = function (elAdded, amount) {\r\n            // convert to price based\r\n            //(handles complex scenarios where item already exists and we are adding more by price based value\r\n            if (!elAdded.PriceBasedValue) {\r\n                elAdded.PriceBasedValue = elAdded.Amount + amount;\r\n            } else {\r\n                // item is already price based\r\n                elAdded.PriceBasedValue = elAdded.PriceBasedValue + amount;\r\n            }\r\n            // will recalculate in calculator service\r\n            elAdded.Count = 1;\r\n        };\r\n\r\n    }]);\r\n","import sjcl from 'sjcl';\r\nimport { unpackStr } from './unpackWorkerHelper';\r\n\r\nangular.module('services').service('cacheService', [\r\n    '$q', '$http', 'configService',\r\n    function ($q, $http, configService) {\r\n\r\n        /*\r\n         taking url to file|image this function should convert url to hash,\r\n         check file by hash as file name. If file doesn't exist then load it and save as file\r\n         \r\n         returns promise and resolve to file content\r\n        */\r\n        this.getNCache = function (url) {\r\n            var bitArray = sjcl.hash.sha256.hash(url);\r\n            var fileName = sjcl.codec.hex.fromBits(bitArray);\r\n            var fileEntry = null;\r\n            var THIS = this;\r\n            var res = this.prepareFolder()\r\n                        .then(function (fl) {\r\n                            return THIS.getFile(fl, fileName);\r\n                        })\r\n                        .then(function (fe) {\r\n                            fileEntry = fe;\r\n                            return THIS.readFile(fileEntry);\r\n                        })\r\n                        .then(function (res) {\r\n                            if (!res || res.length == 0) {\r\n                                \r\n                                var requestConfig = {\r\n                                    method: 'GET',\r\n                                    url: url,\r\n                                    cache: 'false'\r\n                                };\r\n\r\n                               return $http(requestConfig)\r\n                                 .then(function (res) {\r\n                                             var type = res.data.ContentType;\r\n                                             var hash = res.data.Hash;\r\n\r\n                                             console.log('hash is:' + hash + ' for src:' + url);\r\n\r\n                                             let objStr = unpackStr(res.data.Image);\r\n\r\n                                             objStr = \"data:\" + type + \";base64,\" + objStr;\r\n                                            \r\n                                             return THIS.writeFile(fileEntry, objStr);\r\n                                             \r\n                                         },\r\n                                         function (err) {\r\n                                             console.log('error loading: ' + url);\r\n                                             var deffered = $q.defer();\r\n                                             deffered.reject(err);\r\n                                             return deffered.promise;\r\n                                         }\r\n                                     );\r\n                                \r\n                            } else {\r\n                                var deffered = $q.defer();\r\n                                deffered.resolve(res);\r\n                                return deffered.promise;\r\n                            }\r\n                        });\r\n\r\n            return res;\r\n        };\r\n\r\n        this.prepareFolder = function () {\r\n            var deffered = $q.defer();\r\n\r\n            window.resolveLocalFileSystemURL(cordova.file.cacheDirectory,\r\n                function (folder) {\r\n                    folder.getDirectory('posCache', { create: true },\r\n                        function (dirEntry) {\r\n                            deffered.resolve(dirEntry);\r\n                        }, function (err) {\r\n                            deffered.reject(err);\r\n                        });\r\n                });\r\n\r\n            return deffered.promise;\r\n        }\r\n\r\n        this.getFile = function (dirEntry, fileName) {\r\n            var deffered = $q.defer();\r\n            dirEntry.getFile(fileName, { create: true, exclusive: false },\r\n                function (fileEntry) {\r\n                    deffered.resolve(fileEntry);\r\n                }, function () {\r\n                    deffered.reject();\r\n                });\r\n            return deffered.promise;\r\n        };\r\n\r\n        this.readFile = function (fileEntry) {\r\n            var deffered = $q.defer();\r\n            fileEntry.file(function (file) {\r\n                var reader = new FileReader();\r\n\r\n                reader.onloadend = function () {\r\n                    deffered.resolve(this.result);\r\n                    //console.log(\"Successful file read: \" + this.result);\r\n                };\r\n\r\n                reader.readAsText(file);\r\n\r\n            }, function (err) {\r\n                deffered.reject(err);\r\n            });\r\n\r\n            return deffered.promise;\r\n        };\r\n\r\n        this.writeFile = function (fileEntry, dataObj) {\r\n            var deffered = $q.defer();\r\n            fileEntry.createWriter(function (fileWriter) {\r\n\r\n                fileWriter.onwriteend = function () {\r\n                    console.log(\"Successful file write...\");\r\n                    deffered.resolve(dataObj);\r\n                };\r\n\r\n                fileWriter.onerror = function (e) {\r\n                    console.log(\"Failed file write: \" + e.toString());\r\n                    deffered.resolve(dataObj);\r\n                };\r\n\r\n                // If data object is not passed in,\r\n                // create a new Blob instead.\r\n                var blb = new Blob([dataObj], { type: 'text/plain' });\r\n                fileWriter.seek(0);\r\n                fileWriter.write(blb);\r\n            });\r\n\r\n            return deffered.promise;\r\n        };\r\n\r\n        /*\r\n         clear entire cache\r\n        */\r\n        this.clearCache = function () {\r\n            window.resolveLocalFileSystemURL(cordova.file.cacheDirectory,\r\n                function (folder) {\r\n                    folder.getDirectory('posCache', { create: true },\r\n                        function (dirEntry) {\r\n                            dirEntry.removeRecursively(function () {\r\n                                console.log('Successful deleted all files');\r\n                            });\r\n                        }, function (err) {\r\n                            console.log('Error when deleting files');\r\n                        });\r\n                });\r\n        };\r\n\r\n    }]);","angular.module(\"mainApp\").controller('cameraScanController',\r\n    ['$scope', '$rootScope', 'configService', 'helperService', '$element', 'errorService', '$q', 'soundService',\r\n        function ($scope, $rootScope, configService, helperService, $element, errorService, $q, soundService) {\r\n\r\n            $scope.isSequential = false;\r\n            $scope.fireEvent = false;\r\n            $scope.barcode = \"\";\r\n\r\n            $scope.$on('cameraScan.show', function (_, data) {\r\n\r\n                $scope.isSequential = data.isSequential;\r\n                $scope.fireEvent = data.needFireEvent;\r\n\r\n                if ($scope.isSequential === true) {\r\n                    helperService.showDialog($element);\r\n                }\r\n\r\n                return $scope.scan2();\r\n            });\r\n\r\n            $scope.finishScan = function () {\r\n                helperService.closeDialog($element);\r\n            };\r\n\r\n            $scope.nextScan = function () {\r\n                return $scope.scan2();\r\n            };\r\n\r\n            $scope.scan2 = function () {\r\n                var SCOPE = $scope;\r\n                // get current factive element\r\n\r\n                \r\n                $.blockUI();\r\n                return $scope.scan().then(function (res) {\r\n                    SCOPE.barcode = res.text;\r\n                    $.unblockUI();\r\n                    // send message with barcode here\r\n                    if(SCOPE.fireEvent) {\r\n                        $rootScope.$broadcast('scan.barcode', SCOPE.barcode);\r\n                    } else {\r\n                        if(!!window.lastFocusedElement) {\r\n                            var el = $(window.lastFocusedElement);\r\n                            el.focus();\r\n                            el.val(SCOPE.barcode);\r\n                        }\r\n                    }\r\n\r\n                }).catch(function (err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n            };\r\n\r\n            $scope.scan = function () {\r\n                var deferred = $q.defer();\r\n                if (configService.isSite || configService.isEmulator) {\r\n                    var result = {\r\n//                        text: '3eff-r0fprr-1cg',\r\n                        text: 'test_scan',\r\n                        format: 'QRCODE',\r\n                        cancelled: false\r\n                    };\r\n\r\n                    console.log(\"We got a emulated barcode\\n\" +\r\n                    \"Result: \" + result.text + \"\\n\" +\r\n                    \"Format: \" + result.format + \"\\n\" +\r\n                    \"Cancelled: \" + result.cancelled);\r\n\r\n                    deferred.resolve(result);\r\n                }\r\n                else {\r\n                    cordova.plugins.barcodeScanner.scan(\r\n                        function (result) {\r\n                            soundService.playGood();\r\n                            console.log(\"We got a barcode\\n\" +\r\n                                \"Result: \" + result.text + \"\\n\" +\r\n                                \"Format: \" + result.format + \"\\n\" +\r\n                                \"Cancelled: \" + result.cancelled);\r\n                            deferred.resolve(result);\r\n                        },\r\n                        function (error) {\r\n                            soundService.playBad();\r\n                            console.log(\"Scanning failed: \" + error);\r\n                            deferred.reject(error);\r\n                        },\r\n                        {\r\n                            resultDisplayDuration: 0,\r\n                            disableSuccessBeep: true // iOS and Android\r\n                        }\r\n                    );\r\n                }\r\n\r\n                return deferred.promise;\r\n            };\r\n        }\r\n    ]);","angular.module(\"mainApp\").controller('cashManagementController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', 'registryService', 'reportService',\r\n        'uuid2', '$uibModal', '$location', 'helperService', '$locale', 'cashManagementService', 'printService', 'gettextCatalog', '$filter', '$q',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, registryService,reportService,\r\n        uuid2, $uibModal, $location, helperService, $locale, cashManagementService, printService, gettextCatalog, $filter, $q) {\r\n\r\n        //$rootScope.$broadcast('sideBar.hideDetails', { sectionName: constants.constSellSectionName }); // to hide sidebar details\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constCashManagementViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n//            $rootScope.$broadcast('login.show'); // show login page on application start\r\n        }\r\n\r\n        $scope.EmptyReason = gettextCatalog.getString(\"Select reason\");\r\n\r\n        $scope.getFormatedDate = helperService.getFormatedDate;\r\n        $scope.getDateByFormat = helperService.getDateByFormatAlreadyLocal;\r\n\r\n        // array for sales\r\n        $scope.closeRegistryObj = {};\r\n        $scope.closeRegistryObj.OutletName = configService.lastOutlet;\r\n        $scope.closeRegistryObj.RegistryNumber = configService.lastRegistry;\r\n        $scope.closeRegistryObj.ID = null;\r\n        $scope.movement = {\r\n            Amount: 0,\r\n            PettyAmount: 0,\r\n            Type: 'Add',\r\n            CustomReason: null,\r\n            Reason: null\r\n        };\r\n\r\n        $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n        $scope.fixDropdownHeight = function () {\r\n            var el = $('div.jq-selectbox__dropdown:visible');\r\n            var off = el.offset();\r\n            var prn = el.closest('.select-parent');\r\n            if (prn.length > 0) {\r\n                var prnOff = prn.offset();\r\n                var height = prn.height();\r\n                var newHeight = height - (off.top - prnOff.top);\r\n                el.find('ul').css('height', newHeight + 'px');\r\n            }\r\n        };\r\n\r\n        $scope.onLoad = function () {\r\n            initSelects($scope.fixDropdownHeight);\r\n            $timeout(function () { $('input, select').trigger('refresh'); });\r\n\r\n            //printService.disconnect().then(function () { return printService.connect(true); });\r\n//            printService.connect(true);\r\n            printService.reconnect(true).then(function (res) {\r\n                return $scope.checkOpenCashDrawer();\r\n            });\r\n\r\n            $.blockUI();\r\n            registryService.getActiveRegistrySales(configService.lastRegistryID, configService.lastUserName).then(function (resp) {\r\n                if (resp[0]) {\r\n                    var total = resp[0];\r\n                    $scope.closeRegistryObj = total;\r\n                    $scope.closeRegistryObj.OutletName = configService.lastOutlet;\r\n                    $scope.closeRegistryObj.RegistryNumber = configService.lastRegistry;\r\n                    $scope.closeRegistryObj.GiftCardCounted = $scope.closeRegistryObj.GiftCardExpected;\r\n                    $scope.closeRegistryObj.StoreCreditCounted = $scope.closeRegistryObj.StoreCreditExpected;\r\n                    $scope.closeRegistryObj.LoyaltyCounted = $scope.closeRegistryObj.LoyaltyExpected;\r\n                    $scope.closeRegistryObj.CreditCardCounted = $scope.closeRegistryObj.CreditCardExpected;\r\n                    cashManagementService.getCashMovements($scope.closeRegistryObj.ID).then(function (operations) {\r\n\r\n                        $scope.operations = operations;\r\n                        //$.each(operations, function(idx, el) {\r\n                        //    updateReasons(el.Reasons);\r\n                        //});\r\n\r\n                        $scope.movement.Reason = '@@noreason@@';\r\n                        $timeout(function () { $('input, select').trigger('refresh'); });\r\n\r\n                        $.unblockUI();\r\n\r\n                        $scope.raiseViewChanged();\r\n                    });\r\n                } else {\r\n                    $.unblockUI();\r\n                    $location.path('/opencloseregistry');\r\n                    $scope.raiseViewChanged();\r\n                }\r\n            },\r\n            function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n                });\r\n        };\r\n\r\n        $scope.calculateTotal = function(count, expected) {\r\n            if (!count) {\r\n                return '-';\r\n            } else {\r\n                return count - expected;\r\n            }\r\n        };\r\n\r\n        $scope.removeCash = function () {\r\n            $scope.movement = { Type: \"Remove\", OperationType: \"Cash out\" };\r\n            $scope.movement.checkBoxes = { RemoveNotPetty: true, RemovePetty: false };\r\n            editPosUserDialog();\r\n        };\r\n\r\n        $scope.addCash = function () {\r\n            $scope.movement = { Type: \"Add\", OperationType: \"Cash in\" };\r\n            $scope.movement.checkBoxes = { AddNotPetty: true, AddPetty: false };\r\n            editPosUserDialog();\r\n        };\r\n\r\n        $scope.checkFields = function () {\r\n            var reason = !$scope.movement.CustomReason ? $scope.movement.Reason : $scope.movement.CustomReason;\r\n            var err = null;\r\n            if (reason && reason.length > 256) {\r\n                err = gettextCatalog.getString(\"Maximum reason field length is 256 characters.\");\r\n            }\r\n            if (err) {\r\n                errorService.showError(err);\r\n                return false;\r\n            }\r\n\r\n            return true;\r\n        };\r\n\r\n        function editPosUserDialog() {\r\n            $scope.movement.Amount = 0;\r\n            $scope.movement.PettyAmount = 0;\r\n            \r\n            var $windowElement = $('#cashMovementModal');\r\n            helperService.showDialog($windowElement, function() { });\r\n        }\r\n\r\n        $scope.cancelDialog = function () {\r\n            var $windowElement = $('#cashMovementModal');\r\n            helperService.closeDialog($windowElement);\r\n            \r\n        };\r\n\r\n        $scope.setType = function () {\r\n            if ($scope.movement.Type === 'Add') {\r\n                if (!$scope.movement.Amount)\r\n                    $scope.movement.OperationType = 'Petty cash in';\r\n                else\r\n                    $scope.movement.OperationType = 'Cash in';\r\n            } else {\r\n                if (!$scope.movement.Amount)\r\n                    $scope.movement.OperationType = 'Petty cash out';\r\n                else\r\n                    $scope.movement.OperationType = 'Cash out';\r\n            }\r\n        };\r\n\r\n        $scope.addMovement = function () {\r\n            var SCOPE = $scope;\r\n\r\n            var tempAmount = $scope.movement.Amount == 0 ? $scope.movement.PettyAmount : $scope.movement.Amount;\r\n            var reason = !$scope.movement.CustomReason ? $scope.movement.Reason : $scope.movement.CustomReason;\r\n            $scope.setType();\r\n            if (!$scope.checkFields())\r\n                return;\r\n\r\n            $.blockUI();\r\n            cashManagementService.addCashMovement(uuid2.newguid(), $scope.closeRegistryObj.ID, configService.lastRegistryID,\r\n                configService.userName, tempAmount,\r\n                reason,\r\n                $scope.movement.OperationType)\r\n             .then(function (res) {\r\n                var amount = $scope.movement.Type === \"Add\" ? tempAmount : tempAmount * -1;\r\n                return registryService.updateRegistryCash(configService.registrySalesID, amount);\r\n             })\r\n            .then(function () {\r\n               // updateReasons(SCOPE.movement.Reason);\r\n                var movement = {\r\n                    OperationType: SCOPE.movement.OperationType,\r\n                    Amount: tempAmount,\r\n                    Reasons: reason\r\n                };\r\n                $scope.cancelDialog();\r\n                $scope.onLoad();\r\n                $.unblockUI();\r\n\r\n                var deferred = $q.defer();\r\n                deferred.resolve(movement);\r\n                return deferred.promise;\r\n            })\r\n            .then(function (mvm) {\r\n                return reportService.printCashManagementReport(SCOPE, [mvm]);\r\n            })\r\n            .catch(function (err) {\r\n                errorService.showError(err);\r\n                $.unblockUI();\r\n            });\r\n        };\r\n\r\n        function updateReasons(reasonName) {\r\n            var addReason = true;\r\n            $.each($scope.reasons, function(idx, el) {\r\n                if (el === reasonName) {\r\n                    addReason = false;\r\n                    return false;\r\n                }\r\n                \r\n            });\r\n\r\n            if (addReason) {\r\n                configService.cashManagementOparationReasons.push(reasonName);\r\n            }\r\n        }\r\n\r\n        $scope.getOperationType = function (type) {\r\n            return cashManagementService.getOperationType(type);\r\n        };\r\n\r\n        $scope.getOperationSign = function (type) {\r\n            return cashManagementService.getOperationSign(type);\r\n        };\r\n\r\n        $scope.getMovementAmount = function (form) {\r\n            if ($scope.isValidAddMovementForm(form) === true)\r\n                return 'dp_has-success has-success';\r\n            else if ($scope.isValidAddMovementForm(form) === false)\r\n                return 'has-danger dp_has-danger';\r\n        };\r\n\r\n        $scope.isValidAddMovementForm = function (form) {\r\n            if (form) {\r\n\r\n                var amount = $scope.movement.Amount == 0 ? $scope.movement.PettyAmount : $scope.movement.Amount;\r\n                var value = helperService.DEARRound(parseFloat(amount), 2);\r\n\r\n                var maxValue = helperService.DEARRound(parseFloat($scope.closeRegistryObj.CashExpected), 2);\r\n                var checkMaxValue = $scope.movement.Type === 'Remove';\r\n\r\n                if ((!$scope.movement.Reason || $scope.movement.Reason === '@@noreason@@') && !$scope.movement.CustomReason)\r\n                    return false;\r\n\r\n                if (value > 0 && ((checkMaxValue === true && value <= maxValue) || checkMaxValue === false))\r\n                    return true;\r\n\r\n                else if ((value >= maxValue && checkMaxValue === true) || value === 0)\r\n                    return false;\r\n\r\n            }\r\n        };\r\n\r\n\r\n        $scope.raiseViewChanged = function () {\r\n            $rootScope.$broadcast('view.loaded');\r\n        };\r\n\r\n        $scope.getFormatedDate = helperService.getFormatedDate;\r\n\r\n\r\n        $scope.cashManagementAmountDlg = null; // is bound to discount popover object with methods from directive\r\n        $scope.cashManagementPettyAmountDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n        $scope.tempAmount = 0;\r\n        $scope.tempPettyAmount = 0;\r\n\r\n        $scope.showCasgManagementAmountDlg = function () {\r\n            $scope.tempAmount = $scope.movement.Amount;\r\n            if (!$scope.tempAmount)\r\n                $scope.tempAmount = 0;\r\n            $timeout(function () {\r\n                $scope.cashManagementAmountDlg.toggle();\r\n            });\r\n\r\n        };\r\n        $scope.showCasgManagementPettyAmountDlg = function () {\r\n            $scope.tempPettyAmount = $scope.movement.PettyAmount;\r\n            if (!$scope.tempPettyAmount)\r\n                $scope.tempPettyAmount = 0;\r\n            $timeout(function () {\r\n                $scope.cashManagementPettyAmountDlg.toggle();\r\n            });\r\n\r\n        };\r\n\r\n        // callback\r\n        $scope.setCashManagementAmount = function (prm) {\r\n            $scope.cashManagementAmountDlg.hide(true);\r\n            $timeout(function () {\r\n                if (prm === true) {\r\n                    $scope.movement.Amount = $scope.tempAmount;\r\n                    $scope.movement.PettyAmount = 0;\r\n                    if ($scope.movement.Type === 'Add') {\r\n                        $scope.movement.checkBoxes.AddNotPetty = true;\r\n                        $scope.movement.checkBoxes.AddPetty = false;\r\n                    } else if ($scope.movement.Type === 'Remove') {\r\n                        $scope.movement.checkBoxes.RemoveNotPetty = true;\r\n                        $scope.movement.checkBoxes.RemovePetty = false;\r\n                    }\r\n                }\r\n            });\r\n        };\r\n\r\n        $scope.setCashManagementPettyAmount = function (prm) {\r\n            $scope.cashManagementPettyAmountDlg.hide(true);\r\n            $timeout(function () {\r\n                if (prm === true) {\r\n                    $scope.movement.Amount = 0;\r\n                    $scope.movement.PettyAmount = $scope.tempPettyAmount;\r\n                    if ($scope.movement.Type === 'Add') {\r\n                        $scope.movement.checkBoxes.AddNotPetty = false;\r\n                        $scope.movement.checkBoxes.AddPetty = true;\r\n                    } else if ($scope.movement.Type === 'Remove') {\r\n                        $scope.movement.checkBoxes.RemoveNotPetty = false;\r\n                        $scope.movement.checkBoxes.RemovePetty = true;\r\n                    }\r\n                }\r\n            });\r\n        };\r\n        \r\n        $scope.changeAmountType = function () {\r\n            if ($scope.movement.checkBoxes.RemoveNotPetty === true) {\r\n                $scope.movement.OperationType = 'Cash out';\r\n            }\r\n            if ($scope.movement.checkBoxes.RemovePetty === true) {\r\n                $scope.movement.OperationType = 'Petty cash out';\r\n            }\r\n            if ($scope.movement.checkBoxes.AddNotPetty === true) {\r\n                $scope.movement.OperationType = 'Cash in';\r\n            }\r\n            if ($scope.movement.checkBoxes.AddPetty === true) {\r\n                $scope.movement.OperationType = 'Petty cash in';\r\n            }\r\n        };\r\n\r\n        $scope.reasons = configService.cashManagementOparationReasons;\r\n\r\n        $scope.getReasons = function (searchText) {\r\n            var result = $filter('filter')($scope.reasons, searchText);\r\n            return result;\r\n        };\r\n\r\n        $scope.showOpenCashDrawer = false;\r\n\r\n        $scope.checkOpenCashDrawer = function () {\r\n            printService.hasCashDrawer().then(function (hasDrawer) {\r\n                $scope.showOpenCashDrawer = hasDrawer;\r\n            });\r\n        };\r\n\r\n        $scope.openCashDrawer = function () {\r\n            $.blockUI();\r\n            printService.openCashDrawer()\r\n                .finally(function (res) {\r\n                    $.unblockUI();\r\n            });\r\n        }\r\n    }]);\r\n","angular.module('services').service('cashManagementService', [\r\n    '$q', 'configService', 'remoteRequestProvider', 'localDBProvider', 'constants', 'webOnlyProvider','gettextCatalog', 'deviceInfo',\r\nfunction ($q, configService, remoteRequestProvider, localDBProvider, constants, webOnlyProvider, gettextCatalog, deviceInfo) {\r\n\r\n\r\n    this.addCashMovement = function (id, closeRegistryID, registryID, userName, amount, reason, operationType) {\r\n        var provider = configService.isSite || deviceInfo.isSimulator ? remoteRequestProvider : localDBProvider;\r\n\r\n        var objArr = [\r\n            {\r\n                ID: id,\r\n                CloseRegistryID: closeRegistryID,\r\n                RegistryID: registryID,\r\n                OperationTime: moment.utc(),\r\n                SalesRepresentative: userName,\r\n                OperationType: operationType,\r\n                Amount: amount? amount : 0,\r\n                Reasons: reason\r\n            }\r\n        ];\r\n        var pr = configService.isSite || deviceInfo.isSimulator ? provider.addCashMovements(objArr) : provider.addCashMovement(id, closeRegistryID, registryID, userName, amount, reason, operationType);\r\n        pr = pr.then(function (res) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res);\r\n            return deferred.promise;\r\n        });\r\n        return pr;\r\n    };\r\n\r\n    this.getCashMovements = function (closeRegistryID) {\r\n        var provider = configService.isSite || deviceInfo.isSimulator ? webOnlyProvider : localDBProvider;\r\n        var pr = provider.getCashMovements(closeRegistryID).then(function (res) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res);\r\n            return deferred.promise;\r\n        });\r\n        return pr;\r\n    };\r\n\r\n    this.getOperationType = function (type) {\r\n        switch (type) {\r\n            case \"Cash in\":\r\n                return gettextCatalog.getString(\"Cash in\");\r\n            case \"Opening float\":\r\n                return gettextCatalog.getString(\"Opening float\");\r\n            case \"Cash out\":\r\n                return gettextCatalog.getString(\"Cash out\");\r\n            case \"Petty cash in\":\r\n                return gettextCatalog.getString(\"Petty cash in\");\r\n            case \"Petty cash out\":\r\n                return gettextCatalog.getString(\"Petty cash out\");\r\n        }\r\n    }\r\n\r\n    this.getOperationSign = function (type) {\r\n        switch (type) {\r\n            case \"Cash out\":\r\n            case \"Petty cash out\":\r\n                return \"-\";\r\n\r\n            default:\r\n                return \" \";\r\n        }\r\n    };\r\n\r\n\r\n    this.sendOfflineCashManagement = function (registryID) {\r\n        return localDBProvider.getCashMovementsToSend(registryID).then(function (data) {\r\n            var arr = [];\r\n            $.each(data, function (idx, el) {\r\n                var objArr = {\r\n                    ID: el.ID,\r\n                    CloseRegistryID: el.CloseRegistryID,\r\n                    RegistryID: el.RegistryID,\r\n                    OperationTime: el.OperationTime,\r\n                    SalesRepresentative: el.SalesRepresentative,\r\n                    OperationType: el.OperationType,\r\n                    Amount: el.Amount ? el.Amount : 0,\r\n                    Reasons: el.Reasons\r\n                };\r\n                arr.push(objArr);\r\n            });\r\n\r\n            if (arr.length > 0) {\r\n                return remoteRequestProvider.addCashMovements(arr)\r\n                    .then(function (resp) {\r\n                        var promises = [];\r\n                        $.each(resp.data.Success, function (idx, el) {\r\n                            var ppr = localDBProvider.markCashMovementsAsSent(el.ID);\r\n                            promises.push(ppr);\r\n                        });\r\n\r\n                        $.each(resp.data.Errors, function (idx, el) {\r\n                            if (el.Exist === true) {\r\n                                var ppr = localDBProvider.markCashMovementsAsSent(el.ID);\r\n                                promises.push(ppr);\r\n                            }\r\n                        });\r\n\r\n                        return Promise.all(promises);\r\n                    });\r\n            }\r\n            else {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            }\r\n        });\r\n    }\r\n\r\n    var THIS = this;\r\n    this.sendDelayedOfflineCashManagement = function() {\r\n        return THIS.sendOfflineCashManagement(configService.lastRegistryID);\r\n    }\r\n\r\n    this.addCallback = function () {\r\n        if (!(configService.isSite || deviceInfo.isSimulator)) {\r\n            configService.addCallbackFunction(THIS.sendDelayedOfflineCashManagement);\r\n        }\r\n    };\r\n\r\n}]);\r\n","angular.module(\"mainApp\").controller('changePasswordController',\r\n    ['$scope', '$rootScope', 'configService', '$element', 'loginService', 'errorService', 'helperService',\r\nfunction ($scope, $rootScope, configService, $element, loginService, errorService, helperService) {\r\n\r\n    $scope.password1 = null;\r\n    $scope.password2 = null;\r\n    $scope.userName = null;\r\n    $scope.dearPosName = null;\r\n    $scope.userID = null;\r\n    $scope.oldPassword = null;\r\n\r\n    $scope.warningVisibility = {\r\n        Password1: false,\r\n        Password2: false        \r\n    };\r\n\r\n    $scope.$on('changepassword.show', function (event, data) {\r\n        $scope.userName = data.userName;\r\n        $scope.dearPosName = data.dearPosName;\r\n        $scope.userID = data.userID;\r\n        $scope.oldPassword = data.password;\r\n        $scope.showDialog();\r\n    });\r\n\r\n    $scope.showDialog = function () {\r\n        helperService.showDialog($element, function () {\r\n            if(!configService.isMobile)\r\n                $('#firstPasswordField').focus();\r\n        });\r\n    };\r\n\r\n    $scope.canShowErrors = false;\r\n\r\n    // Confirm button was pressed\r\n    $scope.confirm = function () {\r\n\r\n        $scope.warningVisibility.Password2 = false;\r\n        $scope.warningVisibility.Password1 = false;\r\n\r\n        $scope.canShowErrors = !!$scope.confirmPasswordForm.$invalid;\r\n        if ($scope.canShowErrors)\r\n            return false;\r\n\r\n        $.blockUI();\r\n        helperService.closeDialog($element);\r\n\r\n        loginService.changePassword($scope.userID, $scope.oldPassword, $scope.password1).then(\r\n        function (data) {\r\n            //$.unblockUI();\r\n            $rootScope.$broadcast('login.silent',\r\n                {\r\n                    dearPosName: $scope.dearPosName,\r\n                    userName: $scope.userName,\r\n                    password: $scope.password1\r\n                });\r\n        },\r\n            function (err) {\r\n                // process error\r\n                $.unblockUI();\r\n\r\n                // show error and login page once more\r\n                errorService.showError(err, function () { $scope.showDialog(); });\r\n\r\n            });\r\n    }\r\n\r\n    $scope.showPassword1Warning = function() {\r\n        $scope.warningVisibility.Password1 = !$scope.warningVisibility.Password1;\r\n        $scope.warningVisibility.Password2 = false;\r\n    };\r\n\r\n    $scope.showPassword2Warning = function() {\r\n        $scope.warningVisibility.Password2 = !$scope.warningVisibility.Password2;\r\n        $scope.warningVisibility.Password1 = false;\r\n    };\r\n\r\n}]);","angular.module(\"mainApp\").controller('clickAndCollectDialogController',\r\n    ['$scope', '$rootScope', 'configService', 'errorService', 'clickAndCollectService', 'helperService',\r\n        '$element', 'constants', '$timeout', 'gettextCatalog', 'keyPressDelayService', '$filter', 'productsService', \r\n        '$location', 'soundService', '$locale',\r\nfunction ($scope, $rootScope, configService, errorService, clickAndCollectService, helperService,\r\n    $element, constants, $timeout, gettextCatalog, keyPressDelayService, $filter, productsService, \r\n    $location, soundService, $locale) {\r\n\r\n    $scope.fulfillment = {};\r\n   \r\n    $scope.fcss = { 'height': window.innerHeight * 0.9 + 'px' };\r\n\r\n    $scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n        $scope.isOnline = object;\r\n    });\r\n\r\n    $scope.formatBalance = helperService.formatBalance;\r\n    $scope.dateFormat = helperService.getDateByFormatForMoment();\r\n    $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n    $scope.getImageUrl = function (imageID) {\r\n        if (imageID) {\r\n            var subUrl = 'PosProductImage';\r\n            var size = '&width=' + configService.imagesX + '&height=' + configService.imagesY\r\n            return configService.baseImageURL + '?ID=' + imageID + size;\r\n\r\n        }\r\n        return null;\r\n    };\r\n\r\n    $scope.$on('clickAndCollectDialog.show', function (event, data) {\r\n        $.blockUI();\r\n        clickAndCollectService.loadClickAndCollectSale(data.taskID, data.fromOrderLines).then(function(resp){\r\n            $scope.fulfillment = resp;\r\n            $scope.fulfillment.PickedLines = [];\r\n            $scope.fulfillment.fromOrderLines = data.fromOrderLines;\r\n\r\n            $scope.fulfillment.InvoiceDateFormated = $scope.getDateByFormat($scope.fulfillment.InvoiceDate, $scope.dateFormat);\r\n            $scope.fulfillment.DueDateFormated = $scope.getDateByFormat($scope.fulfillment.DueDate, $scope.dateFormat);\r\n\r\n            helperService.showDialog($element, function() { });\r\n            \r\n            $.unblockUI();\r\n\r\n        },function(){\r\n            $.unblockUI();\r\n\r\n            var error = gettextCatalog.getString(\"Failed to load sale, please try again later or contact support.\");\r\n\r\n            errorService.showError(error);\r\n        });\r\n    });\r\n\r\n    $scope.firstRunEditDialog = [true, true, true];\r\n      \r\n\r\n    $scope.cancelDialog = function () {\r\n        helperService.closeDialog($element);\r\n    };\r\n\r\n    $scope.getPickItemColor = function(item){\r\n        if(item.Available < item.Quantity){\r\n            return {'background-color':'rgb(255,104,104)'};\r\n        }\r\n    };\r\n\r\n    $scope.pickItemFunc = function(item, scanedValue, available, newQuantity, expiryDateDistribution){\r\n        if(item.Available <= 0)\r\n            return;        \r\n\r\n        if(item.CostingMethod === \"FIFO\" || item.skipScanDialog === true){\r\n            var productFound = false;\r\n            var skip = false;\r\n\r\n            $.each($scope.fulfillment.PickedLines, function(idx, el){\r\n                if(el.ProductID === item.ProductID && el.BatchSN === scanedValue){\r\n\r\n                    if(el.CostingMethod === \"FESN\" || el.CostingMethod === \"SN\" || el.CostingMethod === \"FISN\"){\r\n                        $scope.closeScanBatchDialog(true);\r\n                        errorService.showError(gettextCatalog.getString(\"Product with this serial number has been already added to pick.\"));\r\n                        skip = true;\r\n                        return;\r\n                    }\r\n\r\n                    if(item.skipScanDialog === true && scanedValue && scanedValue.length> 0 && item.CostingMethod !== \"FIFO\"){\r\n                        if(el.Available === 0 || (newQuantity &&  el.Available + el.Quantity - newQuantity < 0)){\r\n                            errorService.showError(gettextCatalog.getString(\"Insufficient stock level for this batch.\"));\r\n                            skip = true;\r\n                            return;\r\n                        }else{\r\n                            el.Available -=1;\r\n                        }\r\n                    }\r\n\r\n                    if(newQuantity){           \r\n                        \r\n                        if(item.Quantity - newQuantity + el.Quantity < 0){\r\n                            errorService.showError(gettextCatalog.getString(\"Product has insufficient stock level.\"));\r\n                            skip = true;\r\n                            return;\r\n                        }\r\n                        \r\n                        item.Quantity -= newQuantity - el.Quantity;\r\n                        item.Available -= newQuantity - el.Quantity;\r\n                        el.Quantity += newQuantity - el.Quantity;\r\n                    }else{\r\n                        el.Quantity += 1;\r\n                        item.Quantity -= 1;\r\n                        item.Available -= 1;\r\n                    }\r\n\r\n                    productFound = true;\r\n                    return;                   \r\n                }\r\n            });\r\n\r\n\r\n\r\n            if(skip){\r\n                if(item.skipScanDialog)\r\n                    item.skipScanDialog = false;\r\n                return;\r\n            }\r\n                \r\n\r\n            if(!productFound){\r\n                var pickItem = {};\r\n                angular.copy(item, pickItem);\r\n\r\n                if(newQuantity){\r\n                    item.Quantity -=newQuantity;\r\n                    item.Available -= newQuantity;\r\n                    pickItem.Quantity = newQuantity;\r\n                }else{\r\n                    item.Quantity -=1;\r\n                    item.Available -= 1;\r\n                    pickItem.Quantity = 1;\r\n                }\r\n\r\n                \r\n\r\n                if(item.skipScanDialog === true && scanedValue && scanedValue.length> 0 && item.CostingMethod !== \"FIFO\"){\r\n                    if(!available) \r\n                        available = pickItem.Available;\r\n\r\n                    if(newQuantity){\r\n                        pickItem.Available = available - newQuantity;\r\n                    }else{\r\n                        pickItem.Available = available - 1;\r\n                    }                   \r\n                    \r\n                    pickItem.BatchSN = scanedValue;\r\n                    pickItem.ExpiryDateDistribution = expiryDateDistribution;                    \r\n                }                    \r\n\r\n                $scope.fulfillment.PickedLines.push(pickItem);\r\n            }\r\n\r\n            if(item.skipScanDialog)\r\n                item.skipScanDialog = false;\r\n\r\n\r\n\r\n            if(item.Quantity === 0){\r\n                var index = $scope.fulfillment.PickLines.indexOf(item);\r\n                $scope.fulfillment.PickLines.splice(index, 1);                  \r\n            }\r\n        }else{\r\n\r\n            item.skipScanDialog = true; \r\n            $scope.showScanBatchDialog(item);\r\n        }\r\n    };\r\n\r\n    $scope.removePickedItemFunc = function(item, newQuantity){\r\n        var productFound = false;\r\n\r\n\r\n        $.each($scope.fulfillment.PickLines, function(idx, el){\r\n            if(el.ProductID === item.ProductID){\r\n                if(newQuantity){\r\n                    el.Quantity += item.Quantity - newQuantity;\r\n                    el.Available += item.Quantity - newQuantity;  \r\n    \r\n                    item.Available += item.Quantity - newQuantity;\r\n                    item.Quantity = newQuantity;\r\n                } \r\n                else{\r\n                    el.Quantity += item.Quantity;\r\n                    el.Available += item.Quantity;  \r\n                    item.Quantity = 0;\r\n                }               \r\n\r\n                productFound = true;  \r\n                return;                 \r\n            }\r\n        });\r\n\r\n        if(!productFound){\r\n            var pickItem = {};\r\n            angular.copy(item, pickItem);\r\n\r\n            if(newQuantity){\r\n                pickItem.Quantity = item.Quantity - newQuantity;\r\n                pickItem.Available = item.Available - newQuantity;\r\n\r\n                item.Available += item.Quantity - newQuantity;\r\n                item.Quantity = newQuantity;\r\n            }else{\r\n                item.Quantity = 0;\r\n                pickItem.Available = pickItem.BaseAvailable;\r\n            }\r\n\r\n\r\n            if(pickItem.skipScanDialog)\r\n                pickItem.skipScanDialog = false;\r\n\r\n            $scope.fulfillment.PickLines.push(pickItem);\r\n        }\r\n\r\n        if(item.Quantity === 0){\r\n            var index = $scope.fulfillment.PickedLines.indexOf(item);\r\n            $scope.fulfillment.PickedLines.splice(index, 1);  \r\n        }                          \r\n        \r\n    };\r\n\r\n\r\n\r\n\r\n    //#region SerialNumbers\r\n\r\n    $scope.showScanBatchDialog = function (item) {\r\n        $scope.scanedBatch = {value: \"\"};\r\n        $scope.scanBatchSelectedItem = item;\r\n        var $windowElement = $('#scanBatchDialogPartial');\r\n        helperService.showDialog($windowElement, function(){\r\n            if(!configService.isMobile)\r\n                $('#scanBatchInput').focus();\r\n        });\r\n    }\r\n\r\n    $scope.closeScanBatchDialog = function(cancelPressed){\r\n        var $windowElement = $('#scanBatchDialogPartial');\r\n        helperService.closeDialog($windowElement);\r\n\r\n        if(cancelPressed){\r\n            $scope.scanBatchSelectedItem.skipScanDialog = false;\r\n            $scope.scanedBatch = {value: \"\"};\r\n        }            \r\n    }\r\n\r\n\r\n    $scope.showFulfillmentCompletedDialog = function(){\r\n        var $windowElement = $(\"#fulfillmentCompletedDialogPartial\");\r\n        helperService.showDialog($windowElement);        \r\n    }\r\n\r\n    $scope.closefulfillmentCompletedDialog = function(){\r\n        var $windowElement = $(\"#fulfillmentCompletedDialogPartial\");\r\n        helperService.closeDialog($windowElement);\r\n        $scope.cancelDialog();\r\n    }\r\n\r\n\r\n\r\n    $scope.submitScanBatch = function(){\r\n        $.blockUI();\r\n        productsService.checkProductSerialNumber($scope.scanBatchSelectedItem.ProductID, configService.lastOutletID , $scope.scanedBatch.value)\r\n            .then(function(resp){\r\n                if(resp.found){\r\n\r\n                    var expiryDateDistribution = [];\r\n                    $.each(resp.data,function(ids,respRow){\r\n                        expiryDateDistribution.push({Available: respRow.Quantity, ExpiryDate: respRow.ExpiryDate});\r\n                    }); \r\n                    \r\n//                    $scope.pickItemFunc($scope.scanBatchSelectedItem, $scope.scanedBatch.value, resp.data.sum(\"Quantity\"), null, expiryDateDistribution);\r\n                    $scope.pickItemFunc($scope.scanBatchSelectedItem, $scope.scanedBatch.value, null, null, expiryDateDistribution);\r\n                    \r\n                    $scope.closeScanBatchDialog();\r\n                }else{\r\n                    var msg = gettextCatalog.getString(\"Batch/serial number not found.\");\r\n                    $rootScope.$broadcast('snackbar.show', {\r\n                        message: msg,\r\n                        type: 'error'\r\n                    });\r\n                    soundService.playBad();\r\n                }\r\n                $.unblockUI();\r\n            }, function(){\r\n                $.unblockUI();\r\n                var msg = gettextCatalog.getString(\"Batch/serial number not found.\");\r\n                $rootScope.$broadcast('snackbar.show', {\r\n                    message: msg,\r\n                    type: 'error'\r\n                });\r\n                soundService.playBad();\r\n            });\r\n        \r\n    }\r\n\r\n    //#endregion\r\n\r\n\r\n    //#region ChangePickedQuantity\r\n\r\n    $scope.itemQuantityDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n    $scope.showItemQuantityDlg = function (item, el) {\r\n        if (item.CostingMethod !== \"FESN\" && item.CostingMethod !== \"SN\" && item.CostingMethod !== \"FISN\") {\r\n            $scope.pickedItem = {};\r\n            angular.copy(item, $scope.pickedItem);\r\n            \r\n            $timeout(function () {\r\n                $scope.itemQuantityDlg.show(el);\r\n            });\r\n            \r\n        }\r\n\r\n    };\r\n\r\n    // callback\r\n    $scope.setQuantity = function (prm, event) {\r\n\r\n        $timeout(function () { $scope.itemQuantityDlg.hide(true); });\r\n\r\n        if (prm === true) {\r\n            $timeout(function () {\r\n                $.each($scope.fulfillment.PickedLines, function (idx, el) {\r\n                    if (el.ProductID === $scope.pickedItem.ProductID && el.BatchSN == $scope.pickedItem.BatchSN) {\r\n                        if ($scope.pickedItem.Quantity > 0) {\r\n                            $scope.changePickedItemQuantity(el, $scope.pickedItem.Quantity);\r\n                        }\r\n                        else{\r\n                            $scope.removePickedItemFunc(el);\r\n                        }\r\n                        return false;\r\n                    }\r\n                });\r\n            });\r\n        }\r\n        else if (typeof (prm) == 'string') {\r\n            if (prm === 'clean') {\r\n                $scope.removePickedItemFunc(el);\r\n            }\r\n        }\r\n\r\n        event.stopPropagation();\r\n        event.preventDefault();\r\n    };\r\n\r\n    $scope.changePickedItemQuantity = function(pickedItem, newQuantity){\r\n        var item = null;\r\n\r\n        newQuantityValue = parseInt(newQuantity);\r\n\r\n        $.each($scope.fulfillment.PickLines, function (idx, el) {\r\n            if(el.ProductID == pickedItem.ProductID){\r\n                item = el;\r\n                return;\r\n            }\r\n        });\r\n\r\n        if(item){\r\n            if(newQuantityValue > pickedItem.Quantity){\r\n                item.skipScanDialog = true;\r\n                $scope.pickItemFunc(item, pickedItem.BatchSN, pickedItem.Available, newQuantityValue);\r\n            }                \r\n            else\r\n                $scope.removePickedItemFunc(pickedItem, newQuantityValue);\r\n        }else if(newQuantityValue < pickedItem.Quantity)\r\n            $scope.removePickedItemFunc(pickedItem, newQuantityValue);\r\n    };\r\n\r\n\r\n    //#endregion\r\n\r\n    //#region Scanning\r\n\r\n    $scope.$on('scan.barcode', function (event, barcode) {\r\n        if($(\"#clickAndCollectModel:visible\").length <= 0)\r\n            return;\r\n\r\n        var isScanBatchDialogVisible = $('#scanBatchDialogPartial:visible').length > 0;\r\n        \r\n        if(isScanBatchDialogVisible){\r\n            $scope.scanedBatch = {value: barcode};\r\n            $scope.submitScanBatch();\r\n        }\r\n        else{\r\n            var found = false;\r\n            $.each($scope.fulfillment.PickLines, function(idx, el){\r\n                if(el.Barcode && el.Barcode.toLowerCase() === barcode.toLowerCase()){\r\n                    $scope.pickItemFunc(el);\r\n                    found = true;\r\n                    return;\r\n                }\r\n            });\r\n            if(!found)\r\n                $.each($scope.fulfillment.PickLines, function(idx, el){\r\n                    if(el.SKU.toLowerCase() === barcode.toLowerCase()){\r\n                        $scope.pickItemFunc(el);\r\n                        found = true;\r\n                        return;\r\n                    }\r\n                });\r\n\r\n                if(!found){\r\n                    var msg = gettextCatalog.getString(\"Product is not found in this sale.\");\r\n                    $rootScope.$broadcast('snackbar.show', {\r\n                        message: msg,\r\n                        type: 'error'\r\n                    });\r\n                    soundService.playBad();\r\n                }\r\n        }\r\n    });\r\n\r\n    //#endregion\r\n\r\n\r\n    //#region  AutoPicking\r\n\r\n    \r\n    $scope.autoPick = function(){\r\n        $.blockUI();\r\n        clickAndCollectService.autoPick($scope.fulfillment.TaskID, $scope.fulfillment.fromOrderLines)\r\n        .then(function(resp){\r\n\r\n            var itemsToRemove = [];\r\n            angular.copy($scope.fulfillment.PickedLines, itemsToRemove);\r\n\r\n            $.each(itemsToRemove, function(idx, el){\r\n                $scope.removePickedItemFunc(el);\r\n            });\r\n\r\n            var processedProducts = [];\r\n            $.each(resp, function(idx, el){\r\n                if(!processedProducts[el.ProductID]){\r\n                    processedProducts[el.ProductID] = true;\r\n\r\n                    var item = $scope.fulfillment.PickLines.filter(function(pickItem){return pickItem.ProductID === el.ProductID})[0];\r\n\r\n                    var batchNumbers = [];\r\n\r\n                    $.each(resp, function(id, batchItem){\r\n                        if(batchItem.ProductID === el.ProductID){\r\n                            var found = false;\r\n                            $.each(batchNumbers, function(i,b){\r\n                                if(b.BatchSN === batchItem.BatchSN){\r\n                                    b.Available += batchItem.Quantity;\r\n                                    b.expiryDateDistribution.push({Available: batchItem.Quantity, ExpiryDate: batchItem.ExpiryDate});\r\n                                    found = true;\r\n                                    return;\r\n                                }                                \r\n                            });\r\n\r\n                            if(!found){\r\n                                var batch = {BatchSN: batchItem.BatchSN, Available: batchItem.Quantity\r\n                                    , expiryDateDistribution: [{Available: batchItem.Quantity, ExpiryDate: batchItem.ExpiryDate}]};\r\n                                batchNumbers.push(batch);\r\n                            }                            \r\n                        }\r\n                    });\r\n                    \r\n                    $.each(batchNumbers, function(i, b){     \r\n                        item.skipScanDialog = true;                   \r\n//                        $scope.pickItemFunc(item, b.BatchSN, b.Available, b.Available, b.expiryDateDistribution);\r\n                        $scope.pickItemFunc(item, b.BatchSN, null, b.Available, b.expiryDateDistribution);\r\n                    });                   \r\n\r\n                }\r\n            });\r\n\r\n            $.unblockUI();\r\n        }, function(){\r\n            $.unblockUI();\r\n\r\n            var error = gettextCatalog.getString(\"Failed to perform auto fulfillment, please try again later or contact support.\");\r\n\r\n            errorService.showError(error);\r\n        });\r\n    };\r\n\r\n    //#endregion\r\n\r\n\r\n    //#region CompleteFulfillment\r\n    $scope.completeFulfillment = function(){\r\n\r\n        if($scope.fulfillment.PickedLines.length === 0){\r\n            var error = gettextCatalog.getString(\"Please, pick at least one item to complete fulfillment.\");\r\n            errorService.showError(error);\r\n\r\n\r\n        }\r\n        else{\r\n            $.blockUI();\r\n\r\n            var payload = {SaleID: $scope.fulfillment.SaleID, Lines: [], UserName: 'POS: ' + configService.userName};\r\n    \r\n            var pickedLines = [];\r\n            \r\n            angular.copy($scope.fulfillment.PickedLines, pickedLines);\r\n    \r\n            $.each(pickedLines, function(pId, pLine){\r\n    \r\n                if(pLine.ExpiryDateDistribution && pLine.ExpiryDateDistribution.length > 0){\r\n    \r\n                    $.each(pLine.ExpiryDateDistribution, function(eId, exp){\r\n                        \r\n                        if(pLine.Quantity <= 0)\r\n                            return;\r\n    \r\n                        var quantity = pLine.Quantity > exp.Available? exp.Available : pLine.Quantity;\r\n    \r\n                        pLine.Quantity -= exp.Available;\r\n    \r\n                        var pickItem = {\r\n                            ProductID: pLine.ProductID,\r\n                            SKU: pLine.SKU,\r\n                            Name: pLine.Name,\r\n                            LocationID: configService.lastOutletID,\r\n                            Quantity: quantity,\r\n                            BatchSN: pLine.BatchSN,\r\n                            ExpiryDate: exp.ExpiryDate                      \r\n                        };\r\n    \r\n                        payload.Lines.push(pickItem);\r\n                        \r\n                    });\r\n                    \r\n                }else{\r\n                    var pickItem = {\r\n                        ProductID: pLine.ProductID,\r\n                        SKU: pLine.SKU,\r\n                        Name: pLine.Name,\r\n                        LocationID: configService.lastOutletID,\r\n                        Quantity: pLine.Quantity,\r\n                        BatchSN: pLine.BatchSN                        \r\n                    };\r\n    \r\n                    if(pLine.CostingMethod === \"FIFO\")\r\n                        pickItem.BatchSN = null;\r\n    \r\n                    payload.Lines.push(pickItem);\r\n                }\r\n    \r\n            });\r\n    \r\n            clickAndCollectService.clickAndCollectFulfill(payload)\r\n            .then(function(resp){\r\n    \r\n                if(resp.Success && !$scope.fulfillment.fromOrderLines){\r\n                    if($scope.fulfillment.PosOrderID){\r\n\r\n                        $.unblockUI();\r\n                        var isPartialPayment = true;\r\n                        window.localStorage.setItem('continueSale', JSON.stringify({ saleID: $scope.fulfillment.PosOrderID, type: 'continue', subType: isPartialPayment,\r\n                                toPaymentPage: true,\r\n                                isFullyPaid: $scope.fulfillment.IsPaid\r\n                            }));\r\n                        $location.path('/sell'); \r\n\r\n                    }else{\r\n                        var posSale = clickAndCollectService.convertDearSaleIntoPOSSale($scope.fulfillment);\r\n      \r\n                        var currentSaleObject = clickAndCollectService.convertCurrentSaleForAPI(posSale, 'CLOSED', null, posSale.TaxInclusive);        \r\n    \r\n                        currentSaleObject.OrderNumber = $scope.fulfillment.InvoiceNumber;\r\n    \r\n                        currentSaleObject.IsFromDearSale = true;\r\n    \r\n                        clickAndCollectService.saveSale(currentSaleObject, posSale, null , true)\r\n                                .then(function(resp){   \r\n                                    if(resp.Errors && resp.Errors.length > 0){\r\n                                        var errorMessage = \"\";\r\n                                        $.each(resp.Errors, function(ids,error){\r\n                                            $.each(error.Errors, function(ids,error2){\r\n                                                errorMessage += error2.ErrorMessage + \"<br/>\";\r\n                                            });\r\n                                        });\r\n                                        $.unblockUI();\r\n                                        errorService.showError(errorMessage, function(){$scope.cancelDialog();});\r\n                                    }else{\r\n                                        var paidAmount = 0;\r\n                                        $.each(posSale.Payments,function(idx, el){\r\n                                            paidAmount += el.Amount;\r\n                                        });\r\n            \r\n                                        $.unblockUI();\r\n                                        \r\n                                        var isPartialPayment = true;\r\n                                        window.localStorage.setItem('continueSale', JSON.stringify({ saleID: posSale.ID, type: 'continue', subType: isPartialPayment,\r\n                                                toPaymentPage: true,\r\n                                                isFullyPaid: helperService.DEARRound(posSale.Total, 2) <= helperService.DEARRound(paidAmount, 2)\r\n                                            }));\r\n                                        $location.path('/sell'); \r\n                                    }\r\n            \r\n                                },function(err){\r\n                                    $.unblockUI();\r\n                                    var error = gettextCatalog.getString(\"Failed to complete fulfillment, please try again later or contact support.\");\r\n                                    errorService.showError(error, function(){$scope.cancelDialog();});                    \r\n                                });\r\n                    }\r\n                }\r\n                else if(resp.Success){      \r\n                    $.unblockUI();\r\n                    $scope.showFulfillmentCompletedDialog();                   \r\n                }\r\n                else{\r\n                    $.unblockUI();\r\n                    var errorMessage = \"\";\r\n                    $.each(resp, function(ids,error){\r\n                        errorMessage += error.Exception + \"<br/>\";\r\n                    });\r\n                    errorService.showError(errorMessage, function(){$scope.cancelDialog();});\r\n                }               \r\n    \r\n                \r\n            },function(){\r\n                $.unblockUI();\r\n                var error = gettextCatalog.getString(\"Failed to complete fulfillment, please try again later or contact support.\");\r\n                errorService.showError(error, function(){$scope.cancelDialog();});\r\n            });   \r\n        }                 \r\n        \r\n    }\r\n\r\n\r\n    //#endregion\r\n    \r\n\r\n}]);\r\n","angular.module(\"mainApp\").controller('clickAndCollectGridController',\r\n    ['$rootScope', '$scope', 'constants', 'loginService',\r\n        '$timeout', 'errorService', 'gettextCatalog', 'helperService', 'clickAndCollectService', '$location',\r\n        '$locale',\r\n    function ($rootScope, $scope, constants, loginService,\r\n        $timeout, errorService, gettextCatalog, helperService, clickAndCollectService, $location,\r\n        $locale) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constClickAndCollectViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n//            $rootScope.$broadcast('login.show'); // show login page on application start\r\n        }\r\n\r\n        $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n        $scope.dateFormat = helperService.getDateByFormatForMoment();\r\n\r\n        $scope.fullFilters = false;\r\n        $scope.filters = {CustomerSearch: null, SaleNumberSearch: null};\r\n\r\n        $scope.selectedPage = 1;\r\n        $scope.totalPages = 1;\r\n        $scope.itemsByPage = 20;\r\n        $scope.isLoading = false;\r\n        $scope.totalRecords = null;\r\n        $scope.ordersTotal = 0;\r\n        $scope.searchText = null;\r\n        $scope.showNoInvoicesMessage = false;\r\n\r\n        $scope.selectedRow = null;\r\n\r\n        $scope.getDateByFormat = helperService.getDateByFormatAlreadyLocal;\r\n\r\n        $scope.abs = function (x) {\r\n            if (x)\r\n                return helperService.DEARRound(Math.abs(x), 2);\r\n            return 0;\r\n        }\r\n\r\n        // array for customers\r\n        $scope.data = [];\r\n        \r\n        const scrollReachBottomCallback = function (){\r\n            if (!$scope.isLoading && $scope.selectedPage < $scope.totalPages) {\r\n                $.blockUI();\r\n                $scope.isLoading = true;\r\n                $scope.selectedPage ++;\r\n                \r\n                clickAndCollectService.loadClickAndCollectSales(\r\n                    $scope.selectedPage,\r\n                    $scope.itemsByPage,\r\n                    $scope.filters,\r\n                ).then(function (resp) {\r\n                    $.each(resp.Orders, function(idx,el){\r\n                        el.OrderDateFormated = $scope.getDateByFormat(el.SaleOrderDate, 'LL');\r\n\r\n                        if(!$scope.data.filter(function(fEl){\r\n                            return fEl.TaskID === el.TaskID;\r\n                        }).length > 0){                            \r\n                            $scope.data.push(el)                            \r\n                        }\r\n                    });\r\n    \r\n                    getPages(resp.Total);\r\n                    $scope.isLoading = false;\r\n                    $.unblockUI();\r\n                }, function(err) {\r\n                    $scope.isLoading = false;\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n            }\r\n        }\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        // enable event when view is shown\r\n        $scope.onLoad = function () {\r\n            $scope.raiseViewChanged();\r\n        };\r\n\r\n        $scope.search = function () {\r\n            $scope.showNoInvoicesMessage=true;\r\n            $.blockUI();\r\n            clickAndCollectService.loadClickAndCollectSales(1, $scope.itemsByPage, $scope.filters).then(function (resp) {\r\n                $.each(resp.Orders, function(idx,el){\r\n                    el.OrderDateFormated = $scope.getDateByFormat(el.SaleOrderDate, 'LL');\r\n                });\r\n                \r\n                $scope.data = resp.Orders;\r\n                $scope.selectedPage = 1;\r\n\r\n                getPages(resp.Total);\r\n                    $.unblockUI();\r\n                },\r\n                function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n        };\r\n\r\n        function getPages(total) {\r\n            $scope.ordersTotal = total;\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        }\r\n\r\n        $scope.selectRow = function(row){\r\n            if(row.Status === \"Ready for Fulfillment\" || row.Status === \"Partially Fulfilled\")\r\n                $rootScope.$broadcast('clickAndCollectDialog.show', { taskID: row.TaskID, fromOrderLines: false });\r\n            else if(row.Status === \"Fulfilled, Not Paid\"){\r\n\r\n                $scope.selectedRow = row;\r\n\r\n                helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                    gettextCatalog.getString('Do you want to add payments to this sale?'),\r\n                    gettextCatalog.getString('Yes'),\r\n                    gettextCatalog.getString('No'));\r\n            } else if(row.Status === \"Fulfilled\"){\r\n                $scope.selectedRow = row;\r\n\r\n                helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                    gettextCatalog.getString('Would you like to convert this sale into a POS sale?'),\r\n                    gettextCatalog.getString('Yes'),\r\n                    gettextCatalog.getString('No'));\r\n            }\r\n            else{\r\n                var error = gettextCatalog.getString(\"Selected invoice cannot be fulfilled.\");\r\n                errorService.showError(error); \r\n            }\r\n        }\r\n\r\n        $scope.callbackModal = function () {\r\n            $.blockUI();\r\n            clickAndCollectService.loadClickAndCollectSale($scope.selectedRow.TaskID, false).then(function(resp){\r\n                if(resp.PosOrderID){\r\n\r\n                    $.unblockUI();\r\n                    var isPartialPayment = true;\r\n                    window.localStorage.setItem('continueSale', JSON.stringify({ saleID: resp.PosOrderID, type: 'continue', subType: isPartialPayment,\r\n                        toPaymentPage: true,\r\n                        isFullyPaid: resp.IsPaid\r\n                    }));\r\n                    $location.path('/sell'); \r\n\r\n                }else{\r\n                    $scope.fulfillment = resp;\r\n                    $scope.fulfillment.PickedLines = [];\r\n                    $scope.fulfillment.fromOrderLines = false;\r\n        \r\n                    $scope.fulfillment.InvoiceDateFormated = $scope.getDateByFormat($scope.fulfillment.InvoiceDate, $scope.dateFormat);\r\n                    $scope.fulfillment.DueDateFormated = $scope.getDateByFormat($scope.fulfillment.DueDate, $scope.dateFormat);    \r\n    \r\n                    var posSale = clickAndCollectService.convertDearSaleIntoPOSSale($scope.fulfillment);\r\n                    // posSale.IsFromDearSale = true;\r\n\r\n                    var currentSaleObject = clickAndCollectService.convertCurrentSaleForAPI(posSale, 'CLOSED', null, posSale.TaxInclusive);        \r\n    \r\n                    currentSaleObject.OrderNumber = $scope.fulfillment.InvoiceNumber;\r\n    \r\n                    currentSaleObject.IsFromDearSale = true;\r\n    \r\n                    clickAndCollectService.saveSale(currentSaleObject, posSale, null , true)\r\n                            .then(function(resp){   \r\n                                if(resp.Errors && resp.Errors.length > 0){\r\n                                    var errorMessage = \"\";\r\n                                    $.each(resp.Errors, function(ids,error){\r\n                                        $.each(error.Errors, function(ids,error2){\r\n                                            errorMessage += error2.ErrorMessage + \"<br/>\";\r\n                                        });\r\n                                    });\r\n                                    $.unblockUI();\r\n                                    errorService.showError(errorMessage);\r\n                                }else{\r\n                                    var paidAmount = 0;\r\n                                    $.each(posSale.Payments,function(idx, el){\r\n                                        paidAmount += el.Amount;\r\n                                    });\r\n        \r\n                                    $.unblockUI();\r\n                                    \r\n                                    var isPartialPayment = true;\r\n                                    window.localStorage.setItem('continueSale', JSON.stringify({ saleID: posSale.ID, type: 'continue', subType: isPartialPayment,\r\n                                            toPaymentPage: true,\r\n                                            isFullyPaid: helperService.DEARRound(posSale.Total, 2) <= helperService.DEARRound(paidAmount, 2)\r\n                                        }));\r\n                                    $location.path('/sell'); \r\n                                }\r\n        \r\n                            },function(err){\r\n                                $.unblockUI();\r\n                                var error = gettextCatalog.getString(\"Failed to convert sale, please try again later or contact support.\");\r\n                                errorService.showError(error);                    \r\n                            });\r\n                }\r\n            },function(){\r\n                $.unblockUI();\r\n    \r\n                var error = gettextCatalog.getString(\"Failed to convert sale, please try again later or contact support.\");\r\n    \r\n                errorService.showError(error);\r\n            });\r\n        }\r\n\r\n\r\n        \r\n        $scope.raiseViewChanged = function () {\r\n            //$rootScope.$broadcast('view.loaded');\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('view.loaded');\r\n            });\r\n        };\r\n\r\n        $scope.getStatusColor = function(row){\r\n            if(row.Status === \"Fulfilled\"){\r\n                return {'background-color':'#a1a1a1'};\r\n            } else if(row.Status === \"Partially Fulfilled\"){\r\n                return {'background-color':'#60c2a0'};\r\n            } else if(row.Status === \"Ready for Fulfillment\"){\r\n                return {'background-color':'#60c2a0'};\r\n            } else if(row.Status === \"Fulfilled, Not Paid\"){\r\n                return {'background-color':'rgb(115, 186, 225)'};\r\n            } else if(row.Status === \"Not Ready for Fulfillment\"){\r\n                return {'background-color':'rgb(255,104,104)'};\r\n            }\r\n        }\r\n\r\n\r\n    }]);\r\n","import { convertFromOld } from '../../TypePosScripts/ConverterService';\r\nimport { CalculatorHelperService } from '../../TypePosScripts/CalculatorHelperService';\r\nimport { AddressType, StartCalcLevel } from '../../TypePosScripts/Enums';\r\nimport Enumerable from 'linq';\r\n\r\nangular.module('services').service('clickAndCollectService', [\r\n    '$q', 'configService', 'remoteRequestProvider', '$interval', 'uuid2', 'saleService', 'helperService',\r\nfunction ($q, configService, remoteRequestProvider, $interval, uuid2, saleService, helperService) {\r\n\r\n\r\n    this.stopLoadCheck = null;\r\n    // make search \r\n    this.loadClickAndCollectSales = function (page, limit, filters) {\r\n        var provider = remoteRequestProvider;\r\n        var pr = provider.loadClickAndCollectSales(configService.lastOutletID, page, limit, filters).then(function (res) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res.data);\r\n            return deferred.promise;\r\n        });\r\n\r\n        return pr;\r\n    };\r\n\r\n    this.loadClickAndCollectSale = function (taskID, fromOrderLines) {\r\n        var provider = remoteRequestProvider;\r\n        var pr = provider.loadClickAndCollectSale(configService.lastOutletID, taskID, fromOrderLines).then(function (res) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res.data);\r\n            return deferred.promise;\r\n        });\r\n\r\n        return pr;\r\n    };\r\n\r\n    this.autoPick = function(taskID, fromOrderLines){\r\n        var provider = remoteRequestProvider;\r\n        var pr = provider.clickAndCollectAutoPick(configService.lastOutletID, taskID, fromOrderLines).then(function (res) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res.data);\r\n            return deferred.promise;\r\n        });\r\n\r\n        return pr;\r\n    };\r\n\r\n    this.clickAndCollectFulfill = function(payload){\r\n        var provider = remoteRequestProvider;\r\n        var pr = provider.clickAndCollectFulfill(payload).then(function (res) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res.data);\r\n            return deferred.promise;\r\n        });\r\n\r\n        return pr;\r\n    };\r\n    \r\n    var calculateTax = saleService.calculateTax;\r\n    this.convertDearSaleIntoPOSSale = function(dearSale){\r\n        var posSale = {             \r\n            ID: dearSale.TaskID,\r\n            Date: new Date(),\r\n            ReturnID: null,\r\n            CheckoutItems: [],\r\n            Payments: [], // all payments for this sale with payment method guid references\r\n            isDiscountPercent: false,\r\n            Discount: 0,\r\n            DiscountTax: 0,\r\n            comment: dearSale.CustomerNote,\r\n            RealPaySum: 0,\r\n            CalculatedTax: 0,\r\n            customer: {\r\n                ID: dearSale.CustomerID,\r\n                Name: dearSale.CustomerName,\r\n                LoyaltyPoints: dearSale.CustomerLoyaltyPoints,\r\n                StoreCredits: dearSale.CustomerStoreCredits,\r\n                EnableLoyaltyPoints: dearSale.CustomerEnableLoyaltyPoints                               \r\n            },\r\n            CheckoutItemCount: 0,\r\n            Balance: 0,\r\n            LoyaltyPoints: 0,\r\n            LoyaltyPointsTotal: 0,\r\n            OrderNumber: dearSale.InvoiceNumber,\r\n            ClearOrderNumber: null,\r\n            OrderType: '',\r\n            CashChangeAmount: 0,\r\n            itemDiscount: 0,\r\n            selectedCoupon: null,\r\n            manuallyAppliedDiscount : false,\r\n            TaxInclusive: dearSale.TaxInclusive,\r\n            Total: 0,\r\n            SalesRepresentative : dearSale.SalesRepresentative,\r\n            CashRounding: 0\r\n        };\r\n\r\n        if(dearSale.CustomerEmail){\r\n            posSale.customer.Contacts = [{\r\n                Email: dearSale.CustomerEmail,\r\n                Phone: dearSale.CustomerPhone\r\n            }];\r\n            posSale.customer.DontReloadContacts = true;\r\n        }\r\n\r\n        if(dearSale.ShippingAddress){\r\n            posSale.customer.Addresses  = [{\r\n                City : dearSale.ShippingAddress.City,\r\n                Country  : dearSale.ShippingAddress.Country ,\r\n                Line1  : dearSale.ShippingAddress.Line1 ,\r\n                Line2  : dearSale.ShippingAddress.Line2 ,\r\n                Postcode  : dearSale.ShippingAddress.Postcode,\r\n                State  : dearSale.ShippingAddress.State,\r\n                Type: AddressType.Shipping \r\n            }];\r\n            posSale.customer.DontReloadAddresses = true;\r\n        }\r\n\r\n        $.each(dearSale.SaleLines, function(idx, el){\r\n            if(el.ProductID !== \"00000000-0000-0000-0000-000000000000\"){\r\n\r\n                var taxObject = {\r\n                    effectivePercentExclusive: el.Tax,\r\n                    effectivePercentInclusive: el.Tax,\r\n                    ruleID: el.TaxRule\r\n                };   \r\n\r\n                var price = el.Price;\r\n                var itemDiscount = helperService.DEARRound(price/100*el.Discount, 4);\r\n                var priceWithDiscount = price - itemDiscount;\r\n                var loyaltyEarning = parseFloat(el.LoyaltyEarning);\r\n                var priceWithT = dearSale.TaxInclusive ? priceWithDiscount : priceWithDiscount + calculateTax(taxObject, priceWithDiscount);\r\n           \r\n                \r\n\r\n                var pl = {\r\n                    ID: uuid2.newguid(),\r\n                    ProductID: el.ProductID,\r\n                    Tags: el.Tags,\r\n                    BrandID: el.BrandID,\r\n                    CategoryID: el.CategoryID,\r\n                    FamilyID: el.FamilyID,\r\n                    Name: el.Name,\r\n                    Count: el.Quantity,\r\n                    Price: price, //price,\r\n                    Amount: priceWithDiscount * el.Quantity,\r\n                    Discount: null, //discount,\r\n                    itemDiscount: itemDiscount,\r\n                    Note: '',\r\n                    Tax: calculateTax(taxObject, priceWithDiscount * el.Quantity),\r\n                    TaxRuleID: taxObject.ruleID,\r\n                    LoyaltyPoints: loyaltyEarning ? (priceWithT * el.Quantity * loyaltyEarning) : 0,\r\n                    LoyaltyPointsEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                    PriceWithTax: priceWithT,\r\n                    CanEdit: false,\r\n                    CanDelete: false,\r\n                    SaleType: 'sale',\r\n                    Taxes: taxObject,\r\n                    LoyaltyEarning: el.LoyaltyEarning,\r\n                    BasePrice: price,\r\n                    BasePriceWithDiscount: priceWithDiscount,\r\n                    Sku: el.SKU,\r\n                    BarCode: el.Barcode,\r\n                    ImageID: el.ImageID,\r\n                    Discounts: null,\r\n                    Option1: el.Option1,\r\n                    Option2: el.Option2,\r\n                    Option3: el.Option3,\r\n                    ProductShortDescription: el.ProductShortDescription,\r\n                    ProductType: el.ProductType,\r\n                    SerialNumber: !el.SerialNumber ? null : el.SerialNumber,\r\n                    CF1: el.CF1,\r\n                    CF2: el.CF2,\r\n                    CF3: el.CF3,\r\n                    CF4: el.CF4,\r\n                    CF5: el.CF5,\r\n                    CF6: el.CF6,\r\n                    CF7: el.CF7,\r\n                    CF8: el.CF8,\r\n                    CF9: el.CF9,\r\n                    CF10: el.CF10,\r\n                    DefaultPrice: el.price,\r\n                    deals:[]\r\n                };\r\n\r\n                posSale.CheckoutItems.push(pl);\r\n\r\n            }else if(el.Price >= 0){\r\n\r\n                var loyaltyEarning = parseFloat(el.LoyaltyEarning);\r\n\r\n                var taxObject = {\r\n                    effectivePercentExclusive: el.Tax,\r\n                    effectivePercentInclusive: el.Tax,\r\n                    ruleID: el.TaxRule\r\n                };     \r\n        \r\n                var price = parseFloat(el.Price);                \r\n                var itemDiscount = price/100*el.Discount;\r\n\r\n                var priceWithDiscount = price - itemDiscount;\r\n\r\n                var priceWithTax = dearSale.TaxInclusive ? priceWithDiscount : priceWithDiscount + calculateTax(taxObject, priceWithDiscount);\r\n\r\n        \r\n                var pl = {\r\n                    ID: uuid2.newguid(),\r\n                    ProductID: uuid2.newguid(),\r\n                    Name: el.SKU,\r\n                    Count: el.Quantity,\r\n                    Price: price,//price,\r\n                    BasePrice: price,\r\n                    Amount: el.Quantity * priceWithDiscount,\r\n                    Discount: null,//discount,\r\n                    itemDiscount: itemDiscount,\r\n                    Note: '',\r\n                    Tax: calculateTax(taxObject, parseFloat(priceWithDiscount * el.Quantity)),\r\n                    TaxRuleID: taxObject.ruleID,\r\n                    Taxes: taxObject,\r\n                    LoyaltyPoints: loyaltyEarning ? (priceWithTax * loyaltyEarning) : 0,\r\n                    LoyaltyPointsEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                    LoyaltyEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                    PriceWithTax: priceWithTax,\r\n                    CanEdit: false,\r\n                    CanDelete: false,\r\n                    SaleType: 'customsale',\r\n                    BasePriceWithDiscount: priceWithDiscount,\r\n                    deals:[]\r\n                };\r\n                \r\n                posSale.CheckoutItems.push(pl);\r\n\r\n            }\r\n            else{\r\n                var taxObject = {\r\n                    effectivePercentExclusive: el.Tax,\r\n                    effectivePercentInclusive: el.Tax,\r\n                    ruleID: el.TaxRule\r\n                }; \r\n\r\n                posSale.isDiscountPercent = false;\r\n\r\n                if(!posSale.Discount){\r\n                    posSale.Discount = 0;\r\n                }\r\n\r\n                var itemDiscount =  el.Price/100 * el.Discount;\r\n                var price = el.Price - itemDiscount;\r\n\r\n                var discount = price * el.Quantity;\r\n\r\n                posSale.Discount += Math.abs(discount);\r\n            }\r\n                \r\n        });\r\n\r\n        $.each(dearSale.Payments, function(idx, el){\r\n\r\n            var payment = {\r\n                ID: el.ID,\r\n                PaymentProcessorID: \"BackofficePayment\",\r\n                Amount: el.Amount,\r\n                Date: el.DatePaid,\r\n                ShortName: 'BackofficePayment_',\r\n                PaymentTypeName: \"Non-POS\",\r\n                Loyalty: 0,\r\n                Reference: null,\r\n                Surcharge: null\r\n            };\r\n            posSale.Payments.push(payment);\r\n        });\r\n\r\n        \r\n        if (helperService.showNewCheckoutUI(posSale)){\r\n            posSale = convertFromOld(posSale, dearSale.TaxInclusive);\r\n            CalculatorHelperService.calculateCheckout(posSale, null, null, StartCalcLevel.Total);\r\n        }\r\n        else \r\n            posSale.Total = saleService.totalSum(posSale, dearSale.TaxInclusive, true);\r\n\r\n        posSale.Total = helperService.DEARRound(posSale.Total,2)\r\n        \r\n        return posSale;\r\n    };\r\n\r\n\r\n    this.convertDearSaleIntoPOSSaleWithRefunds = function(dearSale){\r\n        var originalSale = this.convertDearSaleIntoPOSSale(dearSale);\r\n\r\n        originalSale.GroupedSale =\r\n        {\r\n            TotalSurcharge: 0, // including refunded surcharges via cash/store credits\r\n            GhostSurcharge: 0,\r\n            TotalSale: 0,\r\n            ExchangeAmount: 0,\r\n            PaymentsMap: {},\r\n            LoyaltyRefundCoeff: 0 // if we paid by loyalties it means that this sum didn't lead to loyalty accrual so during refund we should count this\r\n        };\r\n\r\n        originalSale.cantProcessOffline = true;\r\n\r\n        var result = [];\r\n        result.push({sale: originalSale, refundID: null});\r\n\r\n        var ReturnPayments = [];\r\n\r\n        $.each(dearSale.Refunds, function(refundId, refund){\r\n            var posSale = {             \r\n                ID: dearSale.TaskID,\r\n                Date: new Date(),\r\n                ReturnID: uuid2.newguid(),\r\n                CheckoutItems: [],\r\n                Payments: [], // all payments for this sale with payment method guid references\r\n                isDiscountPercent: false,\r\n                Discount: 0,\r\n                DiscountTax: 0,\r\n                comment: dearSale.CustomerNote,\r\n                RealPaySum: 0,\r\n                CalculatedTax: 0,\r\n                customer: {\r\n                    ID: dearSale.CustomerID,\r\n                    Name: dearSale.CustomerName,\r\n                    LoyaltyPoints: dearSale.CustomerLoyaltyPoints,\r\n                    StoreCredits: dearSale.CustomerStoreCredits,\r\n                    EnableLoyaltyPoints: dearSale.CustomerEnableLoyaltyPoints                               \r\n                },\r\n                CheckoutItemCount: 0,\r\n                Balance: 0,\r\n                LoyaltyPoints: 0,\r\n                LoyaltyPointsTotal: 0,\r\n                OrderNumber: dearSale.InvoiceNumber,\r\n                ClearOrderNumber: null,\r\n                OrderType: '',\r\n                CashChangeAmount: 0,\r\n                itemDiscount: 0,\r\n                selectedCoupon: null,\r\n                manuallyAppliedDiscount : false,\r\n                TaxInclusive: dearSale.TaxInclusive,\r\n                Total: 0,\r\n                SalesRepresentative : dearSale.SalesRepresentative,\r\n                CashRounding: 0,\r\n                cantProcessOffline: true,\r\n                IsPartialPaid: refund.IsPartiallyPaid,\r\n                newRefundOrder: refund.RefundID\r\n            };\r\n\r\n            posSale.GroupedSale =\r\n                                {\r\n                                    TotalSurcharge: 0, // including refunded surcharges via cash/store credits\r\n                                    GhostSurcharge: 0,\r\n                                    TotalSale: 0,\r\n                                    ExchangeAmount: 0,\r\n                                    PaymentsMap: {},\r\n                                    LoyaltyRefundCoeff: 0 // if we paid by loyalties it means that this sum didn't lead to loyalty accrual so during refund we should count this\r\n                                };\r\n\r\n            if(dearSale.CustomerEmail){\r\n                posSale.customer.Contacts = [{\r\n                    Email: dearSale.CustomerEmail,\r\n                    Phone: dearSale.CustomerPhone\r\n                }];\r\n                posSale.customer.DontReloadContacts = true;\r\n            }\r\n    \r\n            if(dearSale.ShippingAddress){\r\n                posSale.customer.Addresses  = [{\r\n                    City : dearSale.ShippingAddress.City,\r\n                    Country  : dearSale.ShippingAddress.Country ,\r\n                    Line1  : dearSale.ShippingAddress.Line1 ,\r\n                    Line2  : dearSale.ShippingAddress.Line2 ,\r\n                    Postcode  : dearSale.ShippingAddress.Postcode,\r\n                    State  : dearSale.ShippingAddress.State,\r\n                    Type: AddressType.Shipping \r\n                }];\r\n                posSale.customer.DontReloadAddresses = true;\r\n            }\r\n\r\n            $.each(refund.RefundLines, function(idx, el){\r\n                if(el.ProductID !== \"00000000-0000-0000-0000-000000000000\"){\r\n    \r\n                    var taxObject = {\r\n                        effectivePercentExclusive: el.Tax,\r\n                        effectivePercentInclusive: el.Tax,\r\n                        ruleID: el.TaxRule\r\n                    };   \r\n    \r\n                    var price = el.Price;\r\n                    var itemDiscount = price/100*el.Discount;\r\n                    var priceWithDiscount = price - itemDiscount;\r\n                    var loyaltyEarning = parseFloat(el.LoyaltyEarning);\r\n                    var priceWithT = dearSale.TaxInclusive ? priceWithDiscount : priceWithDiscount + calculateTax(taxObject, priceWithDiscount);\r\n               \r\n                    \r\n    \r\n                    var pl = {\r\n                        ID: uuid2.newguid(),\r\n                        ProductID: el.ProductID,\r\n                        Tags: el.Tags,\r\n                        BrandID: el.BrandID,\r\n                        CategoryID: el.CategoryID,\r\n                        FamilyID: el.FamilyID,\r\n                        Name: el.Name,\r\n                        Count: el.Quantity,\r\n                        Price: price, //price,\r\n                        Amount: priceWithDiscount * el.Quantity,\r\n                        Discount: null, //discount,\r\n                        itemDiscount: itemDiscount,\r\n                        Note: '',\r\n                        Tax: calculateTax(taxObject, priceWithDiscount * el.Quantity),\r\n                        TaxRuleID: taxObject.ruleID,\r\n                        LoyaltyPoints: loyaltyEarning ? (priceWithT * el.Quantity * loyaltyEarning) : 0,\r\n                        LoyaltyPointsEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                        PriceWithTax: priceWithT,\r\n                        CanEdit: false,\r\n                        CanDelete: false,\r\n                        SaleType: 'sale',\r\n                        Taxes: taxObject,\r\n                        LoyaltyEarning: el.LoyaltyEarning,\r\n                        BasePrice: price,\r\n                        BasePriceWithDiscount: priceWithDiscount,\r\n                        PriceWithDiscount: priceWithDiscount,\r\n                        Sku: el.SKU,\r\n                        BarCode: el.Barcode,\r\n                        ImageID: el.ImageID,\r\n                        Discounts: null,\r\n                        Option1: el.Option1,\r\n                        Option2: el.Option2,\r\n                        Option3: el.Option3,\r\n                        ProductShortDescription: el.ProductShortDescription,\r\n                        ProductType: el.ProductType,\r\n                        SerialNumber: null,\r\n                        CF1: el.CF1,\r\n                        CF2: el.CF2,\r\n                        CF3: el.CF3,\r\n                        CF4: el.CF4,\r\n                        CF5: el.CF5,\r\n                        CF6: el.CF6,\r\n                        CF7: el.CF7,\r\n                        CF8: el.CF8,\r\n                        CF9: el.CF9,\r\n                        CF10: el.CF10,\r\n                        DefaultPrice: el.price,\r\n                        deals:[],\r\n                        MissingInInvoice: el.MissingInInvoice\r\n                    };\r\n    \r\n                    posSale.CheckoutItems.push(pl);\r\n    \r\n                }else if(el.Price <= 0){\r\n    \r\n                    var loyaltyEarning = parseFloat(el.LoyaltyEarning);\r\n    \r\n                    var taxObject = {\r\n                        effectivePercentExclusive: el.Tax,\r\n                        effectivePercentInclusive: el.Tax,\r\n                        ruleID: el.TaxRule\r\n                    };     \r\n            \r\n                    var price = parseFloat(el.Price);                \r\n                    var itemDiscount = price/100*el.Discount;\r\n    \r\n                    var priceWithDiscount = price - itemDiscount;\r\n    \r\n                    var priceWithTax = dearSale.TaxInclusive ? priceWithDiscount : priceWithDiscount + calculateTax(taxObject, priceWithDiscount);\r\n    \r\n            \r\n                    var pl = {\r\n                        ID: uuid2.newguid(),\r\n                        ProductID: uuid2.newguid(),\r\n                        Name: el.SKU,\r\n                        Count: el.Quantity,\r\n                        Price: price,//price,\r\n                        BasePrice: price,\r\n                        Amount: el.Quantity * priceWithDiscount,\r\n                        Discount: null,//discount,\r\n                        itemDiscount: itemDiscount,\r\n                        Note: '',\r\n                        Tax: calculateTax(taxObject, parseFloat(priceWithDiscount * el.Quantity)),\r\n                        TaxRuleID: taxObject.ruleID,\r\n                        Taxes: taxObject,\r\n                        LoyaltyPoints: loyaltyEarning ? (priceWithTax * loyaltyEarning) : 0,\r\n                        LoyaltyPointsEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                        LoyaltyEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                        PriceWithTax: priceWithTax,\r\n                        CanEdit: false,\r\n                        CanDelete: false,\r\n                        SaleType: 'customsale',\r\n                        BasePriceWithDiscount: priceWithDiscount,\r\n                        PriceWithDiscount: priceWithDiscount,\r\n                        deals:[],\r\n                        MissingInInvoice: el.MissingInInvoice\r\n                    };\r\n                    \r\n                    posSale.CheckoutItems.push(pl);\r\n    \r\n                }\r\n                else{\r\n                    var taxObject = {\r\n                        effectivePercentExclusive: el.Tax,\r\n                        effectivePercentInclusive: el.Tax,\r\n                        ruleID: el.TaxRule\r\n                    }; \r\n    \r\n                    posSale.isDiscountPercent = false;\r\n    \r\n                    if(!posSale.Discount){\r\n                        posSale.Discount = 0;\r\n                    }\r\n    \r\n                    var itemDiscount =  el.Price/100 * el.Discount;\r\n                    var price = el.Price - itemDiscount;\r\n    \r\n                    var discount = price * el.Quantity;\r\n    \r\n                    posSale.Discount += Math.abs(discount);\r\n                }\r\n                    \r\n            });\r\n    \r\n            $.each(refund.RefundPayments, function(idx, el){\r\n    \r\n                var payment = {\r\n                    ID: el.ID,\r\n                    PaymentProcessorID: \"BackofficePayment\",\r\n                    Amount: el.Amount,\r\n                    Date: el.DatePaid,\r\n                    ShortName: 'BackofficePayment_',\r\n                    PaymentTypeName: \"Non-POS\",\r\n                    Loyalty: 0,\r\n                    Reference: null,\r\n                    Surcharge: null\r\n                };\r\n                posSale.Payments.push(payment);\r\n\r\n                ReturnPayments.push(payment)\r\n            });\r\n\r\n            if (helperService.showNewCheckoutUI(posSale)){\r\n                posSale = convertFromOld(posSale, dearSale.TaxInclusive);\r\n                CalculatorHelperService.calculateCheckout(posSale, null, null, StartCalcLevel.Total);\r\n            }\r\n            else \r\n                posSale.Total = saleService.totalSum(posSale, dearSale.TaxInclusive, true);\r\n    \r\n            posSale.Total = helperService.DEARRound(posSale.Total,2)\r\n            \r\n            result.push({sale: posSale, refundID: refund.RefundID})\r\n        });\r\n        /*????????????**/\r\n        //threre is not way to us propelry know how refund goes in future \r\n        //if we have 3 credit notes and 10 $ to refund, we will be able to to it for each credit not\r\n        //so, maybe in case if sale is not fully paid, we should combine refunds into 1 refund?\r\n        $.each(result, function(idx,el){\r\n            if(el.refundID){\r\n                el.sale.ReturnPayments = angular.copy(originalSale.Payments);\r\n                \r\n                $.each(ReturnPayments,function(r,refPay){\r\n                    var found = false;\r\n                    $.each(el.sale.Payments,function(pi, pay){\r\n                        if(pay.ID === refPay.ID){\r\n                            found = true;\r\n                        }\r\n                    });\r\n\r\n                    if(!found){\r\n                        el.sale.ReturnPayments.push(refPay);\r\n                    }\r\n                });\r\n                \r\n                var s1 = Enumerable.from(el.sale.ReturnPayments).sum(function (p) { return p.Amount; });\r\n                var s2 = Enumerable.from(el.sale.Payments).sum(function (p) { return p.Amount; });\r\n                el.sale.Balance = (!s1 ? 0 : s1) + (!s2 ? 0 : s2);\r\n                // (Enumerable.from(el.sale.ReturnPayments).sum(function (p) { return p.Amount; }) ?? 0) +\r\n                // (Enumerable.from(el.sale.Payments).sum(function (p) { return p.Amount; }) ?? 0);\r\n\r\n                $.each(el.sale.CheckoutItems, function(chIdx, chkItem){\r\n                    chkItem.FinalPrice = Math.abs(chkItem.FinalPrice);\r\n                    chkItem.FinalAmount = Math.abs(chkItem.FinalAmount) * -1;\r\n                    chkItem.FinalTaxAmount = Math.abs(chkItem.FinalTaxAmount) * - 1;\r\n                });\r\n            }\r\n        });\r\n        \r\n\r\n        return result;\r\n    };\r\n\r\n    this.convertCurrentSaleForAPI = saleService.convertCurrentSaleForAPI;\r\n    this.saveSale = saleService.saveSale;\r\n}]);","angular.module('services').service('cloverReaderProvider',\r\n    ['$q',\r\n        function ($q) {\r\n\r\n            this.makePayment = function (options) {\r\n                var opts = {\r\n                    metadata: options.metadata\r\n                };\r\n\r\n                var deferred = $q.defer();\r\n\r\n                // sum should be in cents\r\n                window.plugins.starPrinter.requestCharge(options.amount * 100, opts,\r\n                   function (err, res) {\r\n                       if (err) {\r\n                           console.log('error: ');\r\n                           console.log(err);\r\n                           deferred.reject({\r\n                               response: {\r\n                                   errorDescription: err\r\n                               }\r\n                           });\r\n                       }\r\n                       else {\r\n                           console.log('success: '+JSON.stringify(res));\r\n                           deferred.resolve({\r\n                               response: {\r\n                                   ServerTransactionID: res.paymentID\r\n                               }\r\n                           });\r\n                       }\r\n                   });\r\n\r\n                return deferred.promise;\r\n            };\r\n        }]);","\r\nimport buildConfiguration from './configEnvironment';\r\n/*\r\n Configuration service. Contains settings that are used by all other modules\r\n*/\r\nangular.module('services').service('configService', ['$rootScope', '$q', '$timeout', '$interval',\r\n    function ($rootScope, $q, $timeout, $interval) {\r\n\r\n        this.payloadVersion = '1';\r\n        this.bypassOutletRegistry = true;\r\n        this.applicationID = null;\r\n        this.applicationKey = null;\r\n        this.loginUserID = null;\r\n        this.tenantID = null;\r\n        this.UserName = null;\r\n        this.password = null;\r\n        this.posName = null;\r\n        this.role = null;\r\n        this.taxCalculationMethod = null;\r\n        this.taxInclucive = null;\r\n        this.tenantTaxRule = null;\r\n        this.ignoreCustomerTaxRule = null;\r\n        this.currency = null;\r\n        this.paymentProcessors = null;\r\n        this.posPaymentProcessors = null;\r\n        this.enableLoyalty = false;\r\n        this.registrySalesID = null;\r\n        this.UserHasSelectedOutlet = null;\r\n        this.applyCustomerDiscountAfterOtherDiscounts = null;\r\n        var callbackFunctions = [];\r\n        this.dataSendCount = 10;\r\n        this.dataSendInterval = 10000;\r\n        this.hasNetworkConnection = true;\r\n        this.pingFunction = {};\r\n        this.pingFrequency = 300000;\r\n        this.loginChanges = null;\r\n        this.deliveryTimeInterval = 60;\r\n        this.loadCustomersMode = 3;\r\n        this.lastOutletInfo = {};\r\n\r\n        this.lastPingCall = 0; // to protect from frequent ping calls\r\n        this.pingMinInterval = 4; // min interval between ping calls in sec\r\n\r\n        this.minimalAndroidVersion = \"4.4.2\";\r\n        this.isSite = !window.isSite ? false : true;\r\n        this.isMobile = false; // will be set in device ready event\r\n        this.isEmulator = !this.isSite; // will be set in device ready event\r\n        this.isQAMode = false;\r\n        this.pinSize = 4;\r\n        this.pinEnabled = false;\r\n        this.pinToken = null;\r\n        this.fractionalLimit = 4;\r\n        this.supportMerchantCustomerReceiptPrint = false;\r\n        this.timeZone = null;\r\n        this.posName = 'Cin7 Core POS';\r\n        this.posVendorId = 'PVWnkzmsHtHjMDEGKIOTGDMa8oEgmADfwjFDtPY2rJs';\r\n        this.supportLinklyMerchantCustomerReceiptPrint = false;\r\n        this.isLinklyPairWithTerminal = false;\r\n\r\n        this.requestTimeout = 60000; // 60 sec.\r\n\r\n        this.searchProductLimit = 100; // maximum number of items that could be returned from server\r\n        this.minSymbolsToStartSearch = 2; // if typed symbols are less than this value no search will take place\r\n        this.keyPressDelay = 500; // in ms. Inside this interval nothing happen - only waiting for new key press\r\n\r\n        this.registryPrefix = null;\r\n        this.registrySuffix = null;\r\n        this.dateFormat = null;\r\n        this.roundTo = null;\r\n        this.roundingRule = null;\r\n        this.loyaltyEarning = null;\r\n        this.currencyCulture = null;\r\n        this.blockSales = null;\r\n        this.lastPosChange = null;\r\n        this.cashManagementOparationReasons = [];\r\n        this.imagesX = 136;\r\n        this.imagesY = 68;\r\n        this.getStartedSuffix = '/Account/Register';\r\n        this.connectionURLSuffix = '/ExternalApi/POS';\r\n        this.imageURLSuffix = '/Product/GetImageRatio';\r\n        this.baseURL = buildConfiguration.dearAPIBaseUrl;\r\n        this.baseImageURL = buildConfiguration.dearAPIImageUrl;\r\n        console.log('baseURL:', this.baseURL);\r\n        console.log('baseImageURL:', this.baseImageURL);\r\n\r\n        this.enableSoftKbd = false;\r\n        //        this.enableSoftKbd = true;\r\n        this.isClover = false;\r\n        this.decimalPlaces = 0;\r\n        this.zeroTaxID = null;\r\n\r\n        this.banknoteDenominations = null;\r\n        this.allowNewCalculations = false;\r\n        this.autoLockAfter = null;\r\n\r\n        this.giftCardSettings = {};\r\n\r\n        this.hasCamera = false;\r\n\r\n       \r\n        if (buildConfiguration.configuration == \"Debug\") {\r\n            this.baseURL = window.localStorage.getItem('BaseURL');\r\n\r\n            if (!this.baseURL)\r\n                this.baseURL = 'https://127.0.0.1:444';\r\n        }\r\n        \r\n\r\n        console.log('base url: ' + JSON.stringify(buildConfiguration));\r\n        console.log('base url: ' + this.baseURL);\r\n\r\n        this.getStartedURL = this.baseURL + this.getStartedSuffix;\r\n        this.connectionURL = this.baseURL + this.connectionURLSuffix;\r\n\r\n        //this.isQAMode = function () {\r\n        //    return this.baseURL.indexOf('://inventory.dearsystems.com') < 0;// || buildConfiguration.configuration == 'Debug';\r\n        //};\r\n\r\n        this.setBaseURL = function (newUrl) {\r\n            if (newUrl) {\r\n                this.baseURL = newUrl;\r\n            }\r\n\r\n            var url = this.baseURL;\r\n            if (url.endsWith('/')) {\r\n                url = url.slice(0, url.length - 2);\r\n            }\r\n\r\n            /*if (!url.endsWith('ExternalApi/POS')) {\r\n                url += '/ExternalApi/POS';\r\n            }*/\r\n\r\n            window.localStorage.setItem('BaseURL', url);\r\n            this.connectionURL = url;\r\n            this.getStartedURL = this.baseURL + this.getStartedSuffix;\r\n            this.connectionURL = this.baseURL + this.connectionURLSuffix;\r\n\r\n            if (typeof this.pingFunction === 'function') {\r\n                this.pingFunction();\r\n            }\r\n        };\r\n        this.setImageURL = function () {\r\n\r\n        };\r\n\r\n        this.lastDearPosName = window.localStorage.getItem('LastDearPosName');\r\n        this.setLastDearPosName = function (n) {\r\n\r\n            window.localStorage.setItem('LastDearPosName', n);\r\n            this.lastDearPosName = n;\r\n        };\r\n\r\n        this.lastUserName = window.localStorage.getItem('LastUserName');\r\n        this.setLastUserName = function (n) {\r\n\r\n            window.localStorage.setItem('LastUserName', n);\r\n            this.lastUserName = n;\r\n        };\r\n\r\n        this.lastDisplayUserName = window.localStorage.getItem('LastDisplayUserName');\r\n        this.setLastDisplayUserName = function (n) {\r\n\r\n            window.localStorage.setItem('LastDisplayUserName', n);\r\n            this.lastDisplayUserName = n;\r\n        };\r\n\r\n        this.setPingFunction = function (func) {\r\n            this.pingFunction = func;\r\n        };\r\n\r\n        this.isOnline = true;\r\n\r\n        this.setNetworkMode = function (_isOnline, pingResponse) {\r\n            if (this.isSite === true) {\r\n                var old = this.isOnline;\r\n                this.isOnline = pingResponse;\r\n                if (old !== this.isOnline)\r\n                    $rootScope.$broadcast('config.ConnectionStateChanged', this.isOnline);\r\n\r\n                console.log('inet state was changed to: ', this.isOnline ? 'online' : 'offline');\r\n                var THIS = this;\r\n                if (!this.isOnline)\r\n                    $timeout(function () { THIS.pingFunction(); }, 5000);\r\n            } else {\r\n                this.hasNetworkConnection = _isOnline;\r\n                if (typeof pingResponse === \"undefined\" && _isOnline === true && typeof (this.pingFunction) == 'function') {\r\n                    this.pingFunction();\r\n                } else {\r\n                    var changeState = this.isOnline;\r\n                    this.isOnline = _isOnline && pingResponse;\r\n\r\n                    changeState = changeState !== this.isOnline;\r\n                    if (changeState === true) {\r\n                        $rootScope.$broadcast('config.ConnectionStateChanged', this.isOnline);\r\n                        console.log('inet state was changed to: ', this.isOnline ? 'online' : 'offline');\r\n                    }\r\n                    if (this.isOnline === true && this.applicationKey) {\r\n                        //var proccessedFunctions = [];\r\n                        //callCallbackFunctions(proccessedFunctions, true);\r\n                        this.execCallbackFunctions(this.dataSendCount);\r\n                    }\r\n                }\r\n            }\r\n        };\r\n\r\n        this.addCallbackFunction = function (func) {\r\n            callbackFunctions.push(func);\r\n        };\r\n\r\n        this.updateInProcess = false;\r\n        this.updateInProcessResult = null;\r\n\r\n        this.execCallbackFunctions = function () {\r\n            var THIS = this;\r\n            if (this.updateInProcess) return this.updateInProcessResult;\r\n\r\n            this.updateInProcess = true;\r\n            //        var proccessedFunctions = [];\r\n            //        callCallbackFunctions(proccessedFunctions, true);\r\n            var result = callCallbackFunctions(this.dataSendCount);\r\n\r\n            result.finally(function () {\r\n                THIS.updateInProcess = false;\r\n                THIS.updateInProcessResult = null;\r\n            });\r\n\r\n            this.updateInProcessResult = result;\r\n            return result;\r\n        };\r\n\r\n        function callCallbackFunctions(dataSendCount) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(true);\r\n            var pr = deferred.promise;\r\n\r\n            if (callbackFunctions.length > 0) {\r\n                $timeout(function () {\r\n                    $rootScope.$broadcast('config.TransmitStateChanged', 'transmit');\r\n                });\r\n\r\n                $.each(callbackFunctions, function (idx, f) {\r\n                    pr = pr.finally(function (res) { return f(dataSendCount); });\r\n                });\r\n\r\n                pr = pr.finally(function () {\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('config.TransmitStateChanged', false);\r\n                    });\r\n                });\r\n            }\r\n\r\n            return pr;\r\n        }\r\n\r\n        this.updateCardPaymentIDsFromOutlet = function (obj) {\r\n            if (this.useTyro === true && obj.TyroMerchantID)\r\n                this.tyroMerchantID = obj.TyroMerchantID;\r\n\r\n            if (this.useTriPOS === true) {\r\n                if (obj.TriPOSAccountID)\r\n                    this.triPOSAccountID = obj.TriPOSAccountID;\r\n                if (obj.TriPOSAcceptorID)\r\n                    this.triPOSAcceptorID = obj.TriPOSAcceptorID;\r\n                if (obj.TriPOSAccountToken)\r\n                    this.triPOSAccountToken = obj.TriPOSAccountToken;\r\n            }\r\n\r\n            if (this.useLinkly === true) {\r\n                if (obj.LinklyUserName)\r\n                    this.linklyUserName = obj.LinklyUserName;\r\n                if (obj.LinklyPassword)\r\n                    this.linklyPassword = obj.LinklyPassword;\r\n            }\r\n\r\n            if (this.useWindcave && obj.WindcaveStation) {\r\n                this.windcaveStation = obj.WindcaveStation;\r\n            }\r\n        };\r\n\r\n        this.lastOutlet = window.localStorage.getItem('LastOutlet');\r\n        this.lastOutletID = window.localStorage.getItem('LastOutletID');\r\n        this.lastECSMappingOutletID = window.localStorage.getItem('LastECSMappingOutletID');\r\n        this.lastOutletTax = window.localStorage.getItem('LastOutletTax');\r\n        this.lastSquareLocationID = window.localStorage.getItem('LastSquareLocationID');\r\n        this.lastSquareIntegrationID = window.localStorage.getItem('LastSquareIntegrationID');\r\n        this.lastPaymentSenseURL = window.localStorage.getItem('LastPaymentSenseURL');\r\n        this.lastPaymentSenseAPIKey = window.localStorage.getItem('LastPaymentSenseAPIKey');\r\n        this.lastSurchargeTax = window.localStorage.getItem('LastSurchargeTax');\r\n        var info = window.localStorage.getItem('LastOutletInfo');\r\n        if (info && typeof info === 'string') {\r\n            this.lastOutletInfo = JSON.parse(info);\r\n        }\r\n\r\n        this.setLastOutlet = function (outletConfig) {\r\n            if (this.loginChanges === 'full') {\r\n                if (this.lastOutletID === outletConfig.PosOutletID &&\r\n                    this.lastECSMappingOutletID === outletConfig.EcsLocationMappingID)\r\n                    this.loginChanges = 'user';\r\n            }\r\n\r\n            this.lastOutlet = outletConfig.OutletName;\r\n            this.lastOutletID = outletConfig.PosOutletID;\r\n            this.lastECSMappingOutletID = outletConfig.EcsLocationMappingID;\r\n            this.lastOutletTax = JSON.stringify(outletConfig.Tax);\r\n            this.lastSquareLocationID = outletConfig.SquareLocationID;\r\n            this.lastSquareIntegrationID = outletConfig.SquareIntegrationID;\r\n            this.lastPaymentSenseURL = outletConfig.PaymentSenseURL;\r\n            this.lastPaymentSenseAPIKey = outletConfig.PaymentSenseAPIKey;\r\n            this.lastSurchargeTax = JSON.stringify(outletConfig.SurchargeTax);\r\n            this.lastOutletInfo = outletConfig.Info ? outletConfig.Info : {};\r\n\r\n            this.customizedSecondScreenUI = outletConfig.CustomizedCustomerDisplayUI;\r\n            this.secondScreenBackground = outletConfig.CustomerDisplayBackground ? '#' + outletConfig.CustomerDisplayBackground : null;\r\n            this.secondScreenLogoUrl =  outletConfig.CustomerDisplayLogo ? `${this.baseURL}/DearPos/GetImage?imageID=${outletConfig.CustomerDisplayLogo}` : null;\r\n\r\n            window.localStorage.setItem('LastOutlet', outletConfig.OutletName);\r\n            window.localStorage.setItem('LastOutletID', outletConfig.PosOutletID);\r\n            window.localStorage.setItem('LastECSMappingOutletID', outletConfig.EcsLocationMappingID);\r\n            window.localStorage.setItem('LastOutletTax', this.lastOutletTax);\r\n            window.localStorage.setItem('LastSquareLocationID', outletConfig.SquareLocationID);\r\n            window.localStorage.setItem('LastSquareIntegrationID', outletConfig.SquareIntegrationID);\r\n            window.localStorage.setItem('LastPaymentSenseURL', outletConfig.PaymentSenseURL);\r\n            window.localStorage.setItem('LastPaymentSenseAPIKey', outletConfig.PaymentSenseAPIKey);\r\n            window.localStorage.setItem('LastSurchargeTax', this.lastSurchargeTax);\r\n            window.localStorage.setItem('LastOutletInfo', JSON.stringify(this.lastOutletInfo));\r\n            window.localStorage.setItem('LastCustomizedSecondScreenUI', this.customizedSecondScreenUI);  \r\n            window.localStorage.setItem('LastSecondScreenBackground', this.secondScreenBackground);  \r\n            window.localStorage.setItem('LastSecondScreenLogoUrl', this.secondScreenLogoUrl);  \r\n        };\r\n\r\n        this.setCurrencyCulture = function (culture) {\r\n            window.localStorage.setItem('currencyCulture', culture);\r\n        };\r\n\r\n        this.lastRegistry = window.localStorage.getItem('LastRegistry');\r\n        this.lastRegistryID = window.localStorage.getItem('LastRegistryID');\r\n        this.cashRegistryPaymentProcessorID = window.localStorage.getItem('CashRegistryPaymentProcessorID');\r\n        this.receiptID = window.localStorage.getItem('receiptID');\r\n        this.labelID = window.localStorage.getItem('labelID');\r\n        this.quickKeyTemplateID = window.localStorage.getItem('quickKeyTemplateID');\r\n        this.quickKeyData = window.localStorage.getItem('quickKeyData');\r\n        this.tyroTerminalID = window.localStorage.getItem('tyroTerminalID');\r\n        this.triPOSLaneID = window.localStorage.getItem('triPOSLaneID');\r\n        this.catalogTilesSize = window.localStorage.getItem('catalogTilesSize');\r\n        this.catalogTilesVisibility = window.localStorage.getItem('catalogTilesVisibility');\r\n        this.showProductAvailability = window.localStorage.getItem('showProductAvailability');\r\n        this.windcaveStation = window.localStorage.getItem('windcaveStation');\r\n\r\n        this.saveReceiptTemplate = function (tpl) {\r\n            window.localStorage.setItem('receiptTemplate', tpl);\r\n        };\r\n\r\n        this.loadReceiptTemplate = function () {\r\n            return window.localStorage.getItem('receiptTemplate');\r\n        };\r\n\r\n        this.saveLabelTemplate = function (tpl) {\r\n            window.localStorage.setItem('labelTemplate', tpl);\r\n        };\r\n\r\n        this.loadLabelTemplate = function () {\r\n            return window.localStorage.getItem('labelTemplate');\r\n        };\r\n\r\n        this.setLabelTemplate = function (labelID) {\r\n            this.labelID = labelID;\r\n            window.localStorage.setItem('labelID', labelID);\r\n        };\r\n\r\n        this.setLastRegistry = function (registryName, id, cashRegistryPaymentProcessorId, receiptID, registryPrefix, registrySuffix,\r\n            quickKeyTemplateID, quickKeyData, tyroTerminalID, triPOSLaneID, catalogTilesSize, catalogTilesVisibility,\r\n            showProductAvailability, windcaveStation) {\r\n            this.lastRegistry = registryName;\r\n            this.lastRegistryID = id;\r\n            this.cashRegistryPaymentProcessorID = cashRegistryPaymentProcessorId;\r\n            this.receiptID = receiptID;\r\n            this.registryPrefix = registryPrefix;\r\n            this.registrySuffix = registrySuffix;\r\n            this.quickKeyTemplateID = quickKeyTemplateID;\r\n            this.quickKeyData = quickKeyData;\r\n            this.tyroTerminalID = tyroTerminalID;\r\n            this.triPOSLaneID = triPOSLaneID;\r\n            this.catalogTilesSize = catalogTilesSize;\r\n            this.catalogTilesVisibility = catalogTilesVisibility;\r\n            this.showProductAvailability = showProductAvailability;\r\n            this.windcaveStation = windcaveStation;\r\n            window.localStorage.setItem('LastRegistry', registryName);\r\n            window.localStorage.setItem('LastRegistryID', id);\r\n            window.localStorage.setItem('CashRegistryPaymentProcessorID', cashRegistryPaymentProcessorId);\r\n            window.localStorage.setItem('receiptID', receiptID);\r\n            window.localStorage.setItem('quickKeyTemplateID', quickKeyTemplateID);\r\n            window.localStorage.setItem('quickKeyData', quickKeyData);\r\n            window.localStorage.setItem('tyroTerminalID', tyroTerminalID);\r\n            window.localStorage.setItem('triPOSLaneID', triPOSLaneID);\r\n            window.localStorage.setItem('catalogTilesSize', catalogTilesSize);\r\n            window.localStorage.setItem('catalogTilesVisibility', catalogTilesVisibility);\r\n            window.localStorage.setItem('showProductAvailability', showProductAvailability);\r\n            window.localStorage.setItem('windcaveStation', windcaveStation);\r\n        };\r\n\r\n        this.setPrinterSettings = function (prn) {\r\n            console.log(prn);\r\n            window.localStorage.setItem('PrinterSettings', JSON.stringify(prn));\r\n        };\r\n\r\n        this.setLabelPrinterSettings = function (prn) {\r\n            console.log(prn);\r\n            window.localStorage.setItem('LabelPrinterSettings', JSON.stringify(prn));\r\n        };\r\n\r\n        this.getPrinterSystems = function () {\r\n            var res = [{ name: 'Star Micronics', value: 'star', canSelectModel: true,\r\n            canDiscover: true }];\r\n            res.push({ name: 'Epson', value: 'epson', canSelectModel: false,\r\n            canDiscover: false });\r\n            if (this.isClover === true)\r\n                res.push({ name: 'Clover', value: 'clover', canSelectModel: false,\r\n                canDiscover: true });\r\n\r\n            res.push({ name: 'Embedded Printing', value: 'embedded', canSelectModel: false,\r\n            canDiscover: true });\r\n            return res;\r\n        };\r\n\r\n        this.getLabelPrinterSystems = function () {\r\n            var res = [{ name: 'Dymo', value: 'dymo' }];\r\n            /*\r\n            if (this.isClover === true)\r\n                res.push({ name: 'Clover', value: 'clover' });\r\n            */\r\n            return res;\r\n        };\r\n\r\n        this.getPrinterSettings = function (force) {\r\n            var v = window.localStorage.getItem('PrinterSettings');\r\n            var res = {};\r\n\r\n            if (!v) {\r\n                if (!force)\r\n                    return null;\r\n            }\r\n            else\r\n                res = JSON.parse(v);\r\n\r\n            if (!res.printerWidthCode)\r\n                res.printerWidthCode = 3;\r\n\r\n            if (!res.printerWidthPoints)\r\n                res.printerWidthPoints = 576;\r\n\r\n            if (!res.simulatorMode)\r\n                res.simulatorMode = false;\r\n\r\n            if (!res.printSystem)\r\n                res.printSystem = 'star';\r\n\r\n            if(!res.printerModel) {\r\n                res.printerModel = '';\r\n            }\r\n\r\n            if(res.printerModel && res.printerModel === \"BSC10\" && res.printSystem === 'star') {\r\n                res.printerWidthPoints = 512; //its another type of paper, for ECS POS Printers\r\n            }\r\n\r\n            if (res.printSystem == 'clover' && !this.isClover) {\r\n                //res.printSystem = 'star';\r\n                //res.printerName = 'Star Micronics';\r\n            }\r\n\r\n            if (res.printSystem === 'telpo') {\r\n                res.printSystem = '';\r\n                res.printerName = '';\r\n                res.printerModel = '';\r\n                this.setPrinterSettings(res);\r\n            }\r\n\r\n            return res;\r\n        };\r\n\r\n        this.getLabelPrinterSettings = function (force) {\r\n            var v = window.localStorage.getItem('LabelPrinterSettings');\r\n            var res = {};\r\n\r\n            if (!v) {\r\n                if (!force)\r\n                    return null;\r\n            }\r\n            else\r\n                res = JSON.parse(v);\r\n\r\n            if (!res.labelPrinterWidthCode)\r\n                res.labelPrinterWidthCode = 1;\r\n\r\n            if (!res.labelPrinterWidthPointsX)\r\n                res.labelPrinterWidthPointsX = 420;\r\n\r\n            if (!res.labelPrinterWidthPointsY)\r\n                res.labelPrinterWidthPointsY = 130;\r\n\r\n            if (!res.labelW)\r\n                res.labelW = 420;\r\n\r\n            if (!res.labelH)\r\n                res.labelH = 130;\r\n\r\n            if (!res.simulatorMode)\r\n                res.simulatorMode = false;\r\n\r\n            if (res.labelPrintSystem === 'telpo') {\r\n                res.labelPrintSystem = '';\r\n                res.labelPrinterName = '';\r\n                this.setLabelPrinterSettings(res);\r\n            }\r\n            /*\r\n            if (!res.labelPrintSystem)\r\n                res.labelPrintSystem = 'star';\r\n    \r\n            if (res.labelPrintSystem == 'clover' && !this.isClover) {\r\n                //res.printSystem = 'star';\r\n                //res.printerName = 'Star Micronics';\r\n            }\r\n            */\r\n\r\n            return res;\r\n        };\r\n\r\n        this.getScannerSettings = function () {\r\n            var v = window.localStorage.getItem('ScannerSettings');\r\n            let res = {};\r\n            if (!v)\r\n                res = {};\r\n            else\r\n                res = JSON.parse(v);\r\n\r\n            // by default set to true\r\n            if (!res.hasOwnProperty(\"enableSoftKbd\"))\r\n                //            res.enableSoftKbd = true;\r\n                res.enableSoftKbd = false;\r\n\r\n            if (!res.hasOwnProperty(\"enableCameraScan\"))\r\n                res.enableCameraScan = true;\r\n\r\n            return res;\r\n        };\r\n\r\n        this.setScannerSettings = function (cfg) {\r\n            window.localStorage.setItem('ScannerSettings', JSON.stringify(cfg));\r\n        };\r\n\r\n        this.setCardPaymentSettings = function (cfg) {\r\n            window.localStorage.setItem('CardPaymentSettings', JSON.stringify(cfg));\r\n        };\r\n\r\n        this.getCardPaymentSettings = function () {\r\n            var v = window.localStorage.getItem('CardPaymentSettings');\r\n            let res = {};\r\n            if (!v)\r\n                res = {};\r\n            else\r\n                res = JSON.parse(v);\r\n\r\n            // by default set to true\r\n            if (!res.hasOwnProperty(\"providerKey\")) {\r\n                res.providerKey = 'emptyProvider';\r\n            }\r\n\r\n            return res;\r\n        };\r\n\r\n        this.isAdmin = function () {\r\n            return this.role == \"Administrator\";\r\n        };\r\n\r\n        this.isManagerAndHigher = function () {\r\n            return this.role == \"Manager\" ||\r\n                this.role == \"Administrator\";\r\n        };\r\n\r\n        this.isAdminAndConnected = function () {\r\n            return this.isAdmin() && this.isOnline;\r\n        };\r\n\r\n        this.isManagerAndHigherAndConnected = function () {\r\n            return this.isManagerAndHigher() && this.isOnline;\r\n        };\r\n\r\n        this.getCardPaymentProcessor = function () {\r\n            var lst = this.paymentProcessors.filter(function (el) { return el.loweredPaymentMethodName === 'credit card'; });\r\n            if (lst.length > 0)\r\n                return lst[0];\r\n        };\r\n        this.getPaymentMethods = function (destScope) {\r\n            destScope.customPaymentMethods = [];\r\n\r\n            destScope.cashRegistryPaymentProcessorID = this.cashRegistryPaymentProcessorID;\r\n            $.each(this.paymentProcessors, function (idx, el) {\r\n                switch (el.loweredPaymentMethodName) {\r\n                    case 'store credits':\r\n                        destScope.storeCreditsPaymentProcessorID = el.paymentProcessorID;\r\n                        break;\r\n                    case 'credit card':\r\n                        destScope.creditCardPaymentProcessorID = el.paymentProcessorID;\r\n                        break;\r\n                    case 'layby':\r\n                        destScope.laybyPaymentProcessorID = el.paymentProcessorID;\r\n                        break;\r\n                    case 'gift card':\r\n                        destScope.giftCardPaymentProcessorID = el.paymentProcessorID;\r\n                        break;\r\n                    case 'loyalty':\r\n                        destScope.loyaltyPaymentProcessorID = el.paymentProcessorID;\r\n                        break;\r\n\r\n                    default:\r\n                        if (el.isCustom === true) {\r\n                            destScope.customPaymentMethods.push(el);\r\n                        }\r\n                        break;\r\n                }\r\n            });\r\n        };\r\n\r\n        this.isGiftCardEnabled = function () {\r\n            return !!this.giftCardSettings && this.giftCardSettings.IsGiftCardEnabled === true;\r\n        };\r\n\r\n        this.isGiftCardExpirationDateEnabled = function () {\r\n            return this.isGiftCardEnabled() && this.giftCardSettings.CanGiftCardExpire === true;\r\n        };\r\n\r\n        this.isGiftCardRefundable = function () {\r\n            return this.isGiftCardEnabled() && this.giftCardSettings.CanGiftCardRefund === true;\r\n        };\r\n\r\n        this.getCatalogPageSize = function () {\r\n            if (!!this.catalogTilesSize && this.catalogTilesSize.length > 0) {\r\n                var p = this.catalogTilesSize.split('x');\r\n                return parseInt(p[0]) * parseInt(p[1]);\r\n            }\r\n            else {\r\n                return 9;\r\n            }\r\n        };\r\n\r\n        this.getCatalogPageRows = function () {\r\n            if (!!this.catalogTilesSize && this.catalogTilesSize.length > 0) {\r\n                var p = this.catalogTilesSize.split('x');\r\n                return parseInt(p[0]);\r\n            }\r\n            else {\r\n                return 3;\r\n            }\r\n        };\r\n        this.getCatalogPageCols = function () {\r\n            if (!!this.catalogTilesSize && this.catalogTilesSize.length > 0) {\r\n                var p = this.catalogTilesSize.split('x');\r\n                return parseInt(p[1]);\r\n            }\r\n            else {\r\n                return 3;\r\n            }\r\n        };\r\n        this.getCatalogTilesVisibility = function () {\r\n            if (!!this.catalogTilesVisibility && this.catalogTilesVisibility.length > 0) {\r\n                return this.catalogTilesVisibility;\r\n            }\r\n            else {\r\n                return 'image_text';\r\n            }\r\n        };\r\n        this.getShowProductAvailability = function () {\r\n            if (this.showProductAvailability == false) {\r\n                return false;\r\n            }\r\n            else {\r\n                return true;\r\n            }\r\n        };\r\n\r\n        /* This method should be use in Web vesion only */\r\n        /* Save next registry number in local storage */\r\n        this.setNextSequenceNumber = function (v) {\r\n            window.localStorage.setItem('registrySequenceNumber', v);\r\n        };\r\n\r\n        /* This method should be use in Web vesion only */\r\n        /* Return next registry number and save new value in local storage */\r\n        this.getNextSequenceNumber = function (helperService) {\r\n            var v = window.localStorage.getItem('registrySequenceNumber');\r\n            var intV = parseInt(v);\r\n            window.localStorage.setItem('registrySequenceNumber', helperService.pad(intV + 1, 6));\r\n            return v;\r\n        };\r\n\r\n        this.getTriPOSUrl = function () {\r\n            return this.isQAMode ? 'https://triposcert.vantiv.com/api/v1' : 'https://tripos.vantiv.com/api/v1';\r\n        };\r\n\r\n        this.getTriPOSLaneUrl = function () {\r\n            return this.isQAMode ? 'https://triposcert.vantiv.com/cloudapi/v1' : 'https://tripos.vantiv.com/cloudapi/v1';\r\n        };\r\n\r\n        this.isMobileDesign = false;\r\n\r\n    }]);\r\n\r\nexport default 'configService';","/*\r\n Localized set of constants\r\n*/\r\nimport { events } from './eventConstants';\r\n\r\nangular.module('services').service('constants', ['gettextCatalog', function (gettextCatalog) {\r\n\r\n    var UpdateLanguage = function () {\r\n        return {\r\n            constHomeViewName: gettextCatalog.getString(\"Home\"),\r\n            constSellViewName: gettextCatalog.getString(\"Register\"),\r\n            constSessionViewName: gettextCatalog.getString(\"Session\"),\r\n            constOfflineSalesViewName: gettextCatalog.getString(\"Offline sales\"),\r\n            constSalesHistoryViewName: gettextCatalog.getString(\"Sales history\"),\r\n            constClickAndCollectViewName: gettextCatalog.getString(\"Click & collect\"),\r\n            constCloseRegistryViewName: gettextCatalog.getString(\"Close register\"),\r\n            constCashManagementViewName: gettextCatalog.getString(\"Cash management\"),\r\n            constSalesParkedViewName: gettextCatalog.getString(\"Parked sales\"),\r\n            constProductsViewName: gettextCatalog.getString(\"Products\"),\r\n            constCustomersViewName: gettextCatalog.getString(\"Customers\"),\r\n            constUserManagementViewName: gettextCatalog.getString(\"User management\"),\r\n            constDashboardViewName: gettextCatalog.getString(\"Dashboard\"),\r\n            constProductManagementViewName: gettextCatalog.getString(\"Product management\"),\r\n            constSetupViewName: gettextCatalog.getString(\"Setup\"),\r\n            constPrinterSetupViewName: gettextCatalog.getString(\"Printer\"),\r\n            constLabelPrinterSetupViewName: gettextCatalog.getString(\"Label printer\"),\r\n            constInventoryViewName: gettextCatalog.getString(\"Inventory\"),\r\n            constInTransitViewName: gettextCatalog.getString(\"In transit\"),\r\n            constReportsViewName: gettextCatalog.getString(\"Reports\"),\r\n            constPaymentTypeSummaryViewName: gettextCatalog.getString(\"Payment Type Summary\"),\r\n            constProductPerformanceViewName: gettextCatalog.getString(\"Product Performance\"),\r\n            constSalesSummaryViewName: gettextCatalog.getString(\"Sales Summary\"),\r\n            constGiftCardViewName: gettextCatalog.getString(\"Gift card\"),\r\n            constDeliveryViewName: gettextCatalog.getString(\"Scheduled deliveries\"),\r\n        };\r\n    };\r\n\r\n    return {\r\n        UpdateLanguageFunction: UpdateLanguage,\r\n        constHomeViewName: gettextCatalog.getString(\"Home\"),\r\n        constHomeSectionName: 'home',\r\n\r\n        constSessionSectionName: 'session',\r\n        constSessionViewName: gettextCatalog.getString(\"Session\"),\r\n\r\n        constInventorySectionName: 'inventory',\r\n        constInventoryViewName: gettextCatalog.getString(\"Inventory\"),\r\n\r\n        constReportsSectionName: 'reports',\r\n        constReportsViewName: gettextCatalog.getString(\"Reports\"),\r\n\r\n        constSellSectionName: 'sales',\r\n        constSellViewName: gettextCatalog.getString(\"Register\"),\r\n        constOfflineSalesViewName: gettextCatalog.getString(\"Offline sales\"),\r\n        constSalesHistoryViewName: gettextCatalog.getString(\"Sales history\"),\r\n        constClickAndCollectViewName: gettextCatalog.getString(\"Click & collect\"),\r\n        constDeliveryViewName: gettextCatalog.getString(\"Scheduled deliveries\"),\r\n        constCloseRegistryViewName: gettextCatalog.getString(\"Close register\"),\r\n        constSalesParkedViewName: gettextCatalog.getString(\"Parked sales\"),\r\n\r\n        constProductsSectionName: 'products',\r\n        constProductsViewName: gettextCatalog.getString(\"Products\"),\r\n\r\n        constCustomersSectionName: 'customers',\r\n        constCustomersViewName: gettextCatalog.getString(\"Customers\"),\r\n\r\n        constUsersSectionName: 'users',\r\n        constUserManagementViewName: gettextCatalog.getString(\"User management\"),\r\n\r\n        constDashboardSectionName: 'dashboard',\r\n        constDashboardViewName: gettextCatalog.getString(\"Dashboard\"),\r\n\r\n        constProductSectionName: 'products',\r\n        constProductManagementViewName: gettextCatalog.getString(\"Product management\"),\r\n\r\n        constSetupSectionName: 'setup',\r\n        constSetupViewName: gettextCatalog.getString(\"Setup\"),\r\n        constPrinterSetupViewName: gettextCatalog.getString(\"Printer\"),\r\n        constLabelPrinterSetupViewName: gettextCatalog.getString(\"Label printer\"),\r\n\r\n        pageSize: 9,\r\n        customerSearchLimit: 10,\r\n\r\n        parkStatuses: {\r\n            parked: 'Parked',\r\n            layby: 'Layby',\r\n            onaccount: 'On Account',\r\n            pending: 'Pending'\r\n        },\r\n\r\n        minScreenHeight: 320,\r\n        newGuid: '00000000-0000-0000-0000-000000000000',\r\n        backofficePayment: 'BackofficePayment',\r\n\r\n        newSaleTotalCountName: 'newSaleTotal',\r\n        newSaleCountName: 'newSale',\r\n        giftCardSaleCountName: 'giftCardSales',\r\n\r\n        newOnAccountCountName: 'newOnAccount',\r\n        newLaybyCountName: 'newLayby',\r\n        newTaxCountName: 'newSaleTax',\r\n        newSaleDiscountName: 'newSaleDiscount',\r\n        refundTotalName: 'refundTotal',\r\n        roundingTotalName: 'roundingTotal',\r\n        newPaymentCountName: 'newPayment',\r\n        maxAllowedPrice: 999999999999,\r\n        maxAllowedTotalPrice: 99000000000000000,\r\n        customKeyboardMaxLenth: 12,\r\n        playStoreAppLink: \"https://play.google.com/store/apps/details?id=\",\r\n        appleStoreAppLink: \"https://apps.apple.com/app/\",\r\n\r\n        // event/status constants\r\n        events: events,\r\n    }\r\n}]);","angular.module('services').service('csvService', ['$rootScope', '$q',\r\n    function ($rootScope, $q) {\r\n\r\n        this.escapeString = function (s) {\r\n            if (!s || typeof (s) !== 'string' || s.length == 0)\r\n                return s;\r\n\r\n            var b = s.replace(/\"/g, '\"\"');\r\n            return b;\r\n        };\r\n\r\n        this.exportTableToCSV = function (tableSelector) {\r\n            var deferred = $q.defer();\r\n            var THIS = this;\r\n            var csv = [];\r\n            $(tableSelector).find(\"tr\").each(function () {\r\n                var row = [];\r\n                var ignore = $(this).attr(\"data-ignore\");\r\n                if (ignore == null) {\r\n                    $(this).find(\"td, th\").each(function () {\r\n                        var col = $(this);\r\n                        var val = col.attr(\"data-value\");\r\n\r\n                        var isAsIs = val != null && val != undefined;\r\n                        var txt = isAsIs ? val : col.text();\r\n                        if (!isAsIs && !!txt)\r\n                            txt = '\"' + THIS.escapeString(txt.trim()) + '\"';\r\n\r\n                        row.push(txt);\r\n                    });\r\n\r\n                    csv.push(row.join(\",\"));\r\n                }\r\n            });\r\n\r\n            deferred.resolve(csv.join(\"\\r\\n\"));\r\n            return deferred.promise;\r\n        }\r\n\r\n        this.exportNewTableToCSV = function (tableSelector) {\r\n            var deferred = $q.defer();\r\n            var THIS = this;\r\n            var csv = [];\r\n            $(tableSelector).find(\".grid-content-table__row\").each(function () {\r\n                var row = [];\r\n                var ignore = $(this).attr(\"data-ignore\");\r\n                if (ignore == null) {\r\n                    $(this).find(\".grid-content-table__col\").each(function () {\r\n                        var col = $(this);\r\n                        var val = col.attr(\"data-value\");\r\n\r\n                        var isAsIs = val != null && val != undefined;\r\n                        var txt = isAsIs ? val : col.text();\r\n                        if (!isAsIs && !!txt)\r\n                            txt = '\"' + THIS.escapeString(txt.trim()) + '\"';\r\n\r\n                        row.push(txt);\r\n                    });\r\n\r\n                    csv.push(row.join(\",\"));\r\n                }\r\n            });\r\n\r\n            deferred.resolve(csv.join(\"\\r\\n\"));\r\n            return deferred.promise;\r\n        }\r\n\r\n        this.downloadCSV = function (csv, filename) {\r\n            var deferred = $q.defer();\r\n\r\n            var csvFile;\r\n            var downloadLink;\r\n\r\n            // CSV file\r\n            csvFile = new Blob([csv], { type: \"plain/text\" });\r\n\r\n            //hint for IE\r\n            if (navigator.msSaveBlob) {\r\n                navigator.msSaveBlob(csvFile, filename);\r\n            }else{\r\n                \r\n                // Download link\r\n                downloadLink = document.createElement(\"a\");\r\n\r\n                // File name\r\n                downloadLink.download = filename;\r\n\r\n                // Create a link to the file\r\n                downloadLink.href = window.URL.createObjectURL(csvFile);\r\n\r\n                // Hide download link\r\n                downloadLink.style.display = \"none\";\r\n\r\n                // Add the link to DOM\r\n                document.body.appendChild(downloadLink);\r\n\r\n                // Click download link\r\n                downloadLink.click();\r\n            }\r\n\r\n            deferred.resolve(filename);\r\n            return deferred.promise;\r\n        }\r\n\r\n        this.writeCSVToFile = function (csv, filename) {\r\n            var deferred = $q.defer();\r\n            var THIS = this;\r\n            var nativeURL = null;\r\n            window.resolveLocalFileSystemURL(device.platform === 'Android' ? cordova.file.externalDataDirectory : cordova.file.documentsDirectory, \r\n             function (dir) {\r\n                 dir.getFile(filename, { create: true, exclusive: false },\r\n                   function (file) {\r\n                       if (file == null) {\r\n                           deferred.reject(\"Can't create file\");\r\n                       }\r\n\r\n                       nativeURL = file.nativeURL;\r\n\r\n                       file.createWriter(function (fileWriter) {\r\n                           fileWriter.onwriteend = function () {\r\n                               console.log(\"Successful file write...\");\r\n                               deferred.resolve(nativeURL);\r\n                           };\r\n\r\n                           fileWriter.onerror = function (e) {\r\n                               console.log(\"Failed file write: \" + e.toString());\r\n                               deferred.reject(e);\r\n                           };\r\n\r\n                           fileWriter.seek(0);\r\n\r\n                           var blob = new Blob([csv], { type: \"plain/text\" });\r\n\r\n                           fileWriter.write(blob);\r\n                       },\r\n                       function (err) {\r\n                           deferred.reject(err);\r\n                       });\r\n                   },\r\n                   function (err) {\r\n                       deferred.reject(err);\r\n                   });\r\n             });\r\n\r\n            return deferred.promise;\r\n        }\r\n\r\n    }]);","angular.module('services').service('customerService', [\r\n    '$q', 'configService', 'remoteRequestProvider', 'localDBProvider', '$interval', 'liveSearchService', 'jsStoreProvider','helperService','$timeout', 'deviceInfo',\r\n    function ($q, configService, remoteRequestProvider, localDBProvider, $interval, liveSearchService, jsStoreProvider, helperService, $timeout, deviceInfo) {\r\n\r\n        this.hybridModeLoadOnline = false;\r\n\r\n        this.stopLoadCheck = null;\r\n        this.startCustomersAutoUpdate = function () {\r\n\r\n            if (!this.stopLoadCheck) {\r\n                this.stopLoadCheck = $interval(function (p) {\r\n                    if (configService.isOnline) {\r\n                        // refrech data\r\n                        var injector = angular.element('body').injector();\r\n                        var me = injector.get('customerService');\r\n\r\n                       // $.blockUI();\r\n\r\n                        return me.loadCustomersAll(false);\r\n                         //   .finally(function () { $.unblockUI(); });\r\n                    }\r\n                }, 60000 * 5);\r\n            }\r\n\r\n            var deferred = $q.defer();\r\n            deferred.resolve(null);\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.loadOnline = function () {\r\n            return configService.loadCustomersMode === 1 ||\r\n                configService.loadCustomersMode === 3 && this.hybridModeLoadOnline === true;\r\n        }\r\n\r\n        this.loadMode = function() {\r\n            return configService.loadCustomersMode;\r\n        }\r\n\r\n        this._getLoadCustomerProvider = function(forceOnline) {\r\n            // in online load mode we do not have any data so if device if offline error will be throwed\r\n            if (!configService.isOnline && (this.loadOnline() || forceOnline)) {\r\n                return remoteRequestProvider;\r\n            }\r\n            return (configService.isSite && !window.isSupported)\r\n                ? remoteRequestProvider\r\n                : configService.isOnline\r\n                    ? remoteRequestProvider\r\n                    : configService.isSite || deviceInfo.isSimulator\r\n                        ? jsStoreProvider\r\n                        : localDBProvider;\r\n        }\r\n\r\n        // make search\r\n        this.loadCustomers = function (text, page, limit, filters, forceOnline = false) {\r\n            if(filters && !!filters.SaleBarcode) { // this request by receipt barcode and we should find sale and get customer from that sale\r\n                forceOnline = true;\r\n            }\r\n\r\n            var provider = this._getLoadCustomerProvider(forceOnline);\r\n            var isOnlineOnStart = (configService.isSite && !window.isSupported) ? false : configService.isOnline && this.loadOnline();\r\n\r\n            var pr = provider.loadCustomers(text, page, limit, filters).then(function (res) {\r\n                console.log(provider === remoteRequestProvider ? 'loading data online' : 'loading data locally')\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            }).catch(function (err) {\r\n                if (!isOnlineOnStart)\r\n                    throw err;\r\n\r\n                if (err.status !== -1)\r\n                    throw err;\r\n                else {\r\n                    var provider = configService.isSite || deviceInfo.isSimulator ? jsStoreProvider : localDBProvider;\r\n                    return provider.loadCustomers(text, page, limit, filters).then(function (res) {\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve(res.data);\r\n                        return deferred.promise;\r\n                    });\r\n                }\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        // TODO\r\n        this.getCustomer = function (Id) {\r\n            // var provider = this._getLoadCustomerProvider();\r\n            var provider = remoteRequestProvider;\r\n            var pr = provider.getCustomer(Id).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.createCustomer = function (customer) {\r\n\r\n            var pr = remoteRequestProvider.createCustomer(customer).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.loadCountries = function () {\r\n            return remoteRequestProvider.loadCountries().then(function (res) {\r\n                return helperService.resolvePromise(res);\r\n            }).catch(function (err) {\r\n                return helperService.rejectPromise(err);\r\n            });\r\n        }\r\n\r\n        this.updateCustomer = function (customer) {\r\n            // remove unneeded fields\r\n            var cp = JSON.parse(JSON.stringify(customer));\r\n            delete cp.StoreCredits;\r\n            delete cp.LoyaltyPoints;\r\n            delete cp.Currency;\r\n            delete cp.Discount;\r\n            delete cp.TaxRule;\r\n            delete cp.AccountReceivable;\r\n            delete cp.RevenueAccount;\r\n            delete cp.PriceTier;\r\n            delete cp.AdditionalAttribute1;\r\n            delete cp.AdditionalAttribute2;\r\n            delete cp.AdditionalAttribute3;\r\n            delete cp.AdditionalAttribute4;\r\n            delete cp.AdditionalAttribute5;\r\n            delete cp.AdditionalAttribute6;\r\n            delete cp.AdditionalAttribute7;\r\n            delete cp.AdditionalAttribute8;\r\n            delete cp.AdditionalAttribute9;\r\n            delete cp.AdditionalAttribute10;\r\n            delete cp.Tags;\r\n            delete cp.CreditLimit;\r\n            delete cp.Account;\r\n            delete cp.Comments;\r\n\r\n            var pr = remoteRequestProvider.updateCustomer(cp).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.removeCustomer = function (customerID) {\r\n\r\n            var pr = remoteRequestProvider.removeCustomer(customerID).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        // critical section to escape from duplication\r\n        this.lockCustomersUpdate = false;\r\n\r\n        /**\r\n         * @return {Promise<boolean>} - true if loaded\r\n         */\r\n        this.loadCustomersOnInit = function (getHash) {\r\n            console.time('Load customers');\r\n            let pr = this.loadCustomersAll(true, getHash);\r\n            const needLoad = (!configService.isSite || window.isSupported) && (this.loadMode() === 2 || this.loadMode() === 3)\r\n            if (needLoad) {\r\n                pr = pr.then((function (res) {\r\n                    console.timeEnd('Load customers');\r\n                    let prUpdate;\r\n                    if (res && typeof res === 'object' && 'LoadOnline' in res) {\r\n                        return helperService.resolvePromise(true);\r\n                    } else {\r\n                        prUpdate = this.startCustomersAutoUpdate();\r\n                    }\r\n                    prUpdate = prUpdate.then(function () {return  helperService.resolvePromise(true)});\r\n                    return prUpdate\r\n                }).bind(this));\r\n            } else {\r\n                pr = pr.then(function () {\r\n                    console.timeEnd('Load customers');\r\n                    return helperService.resolvePromise(false);\r\n                });\r\n            }\r\n\r\n            return pr;\r\n        }\r\n\r\n        this.loadCustomersAll = function (force, getHash) {\r\n            if (this.lockCustomersUpdate) {\r\n                return helperService.resolvePromise(null);\r\n            }\r\n\r\n            if (this.loadMode() === 1) {\r\n                console.log('load mode is online: not loading on init')\r\n                return helperService.resolvePromise(false);\r\n            }\r\n            const needCheckCount = this.loadMode() === 3;\r\n\r\n            THIS = this;\r\n            var pr;\r\n            var provider = configService.isSite || deviceInfo.isSimulator ? jsStoreProvider : localDBProvider;\r\n\r\n            // in web mode for old browser\r\n            if (configService.isSite && !window.isSupported) {\r\n                pr = remoteRequestProvider.loadLiveCustomers(needCheckCount)\r\n                    .then(function (data) {\r\n                        if (needCheckCount && data.LoadOnline) {\r\n                            THIS.hybridModeLoadOnline = true;\r\n                            console.log('hybrid mode indicator is true, will load online')\r\n                            return helperService.resolvePromise({LoadOnline: true});\r\n                        }\r\n                        return liveSearchService.fillCustomersData(data);\r\n                    });\r\n            } else {\r\n                if (configService.isSite || configService.isOnline) {\r\n                    pr = provider.checkCustomersOld(force)\r\n                        .then(function (res) {\r\n                            if (res) {\r\n                                return provider.getCustomersHash(getHash === true ? false : force)\r\n                                    .then(function (hash) {\r\n                                        return remoteRequestProvider.loadCostomersAll(hash, needCheckCount).then(function (loadRes) {\r\n                                            if (needCheckCount && loadRes.data.LoadOnline) {\r\n                                                THIS.hybridModeLoadOnline = true;\r\n                                                console.log('hybrid mode indicator is true, will load online')\r\n                                                return helperService.resolvePromise({LoadOnline: true});\r\n                                            }\r\n                                            return helperService.resolvePromise(loadRes);\r\n                                        });\r\n                                    })\r\n                                    .then(function (resp) {\r\n                                        if (resp && resp.LoadOnline) {\r\n                                            return helperService.resolvePromise(resp);\r\n                                        }\r\n                                        if (!resp.data || resp.data.CompareResult)\r\n                                            return helperService.resolvePromise(false);\r\n                                       \r\n\r\n                                        return helperService.unpack(THIS, resp.data.Customers)\r\n                                            .then(function (restored) {\r\n                                                resp.data.Customers = null;\r\n                                                const data = {\r\n                                                    hash: resp.data.CustomerHash,\r\n                                                    arr: Array.isArray(restored) ? restored : []\r\n                                                };\r\n\r\n                                                return provider.refreshCustomers(data);\r\n                                            });\r\n                                    });\r\n                            }\r\n\r\n                            return helperService.resolvePromise(false);\r\n                        });\r\n                }\r\n                else {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(false);\r\n                    pr = deferred.promise;\r\n                }\r\n\r\n                // fill live customer data\r\n                pr = pr.then(function (data) {\r\n                    if (typeof data === 'object' && 'LoadOnline' in data) {\r\n                        return helperService.resolvePromise(data);\r\n                    }\r\n\r\n                    return provider.loadLiveCustomers(data).then(function (data) {\r\n                            return liveSearchService.fillCustomersData(data);\r\n                    });\r\n                });\r\n            }\r\n\r\n            return pr.then(function (res) {\r\n                THIS.lockCustomersUpdate = false;\r\n                return helperService.resolvePromise(res);\r\n            }).catch(function (err) {\r\n                THIS.lockCustomersUpdate = false;\r\n                return helperService.rejectPromise(err);\r\n            });\r\n        };\r\n\r\n        this.onCustomerUpdated = function (id) {\r\n            try {\r\n                var THIS = this;\r\n                const needLoad = this.loadOnline() && !(configService.isSite && !window.isSupported);\r\n                var provider = configService.isSite || deviceInfo.isSimulator ? jsStoreProvider : localDBProvider;\r\n                if (needLoad || !id) {\r\n                    return helperService.resolvePromise();\r\n                }\r\n                return remoteRequestProvider.getCustomer(id).then(function (resp) {\r\n                    var customers = resp.data.Customers.map(function (c) {\r\n                        var contact = c.Contacts.find(x => !!x.Default)\r\n                        if (!contact) {\r\n                            contact = c.Contacts.length ? c.Contacts[0] : {}; \r\n                        }\r\n                        var mapped = helperService.toLowerCamelCase(c);\r\n                        mapped.id = c.ID;\r\n                        mapped.phone = contact && !!contact.Phone ? contact.Phone : '';\r\n                        mapped.email = contact && !!contact.Email ? contact.Email : '';\r\n                        mapped.mobilePhone = contact && !!contact.MobilePhone ? contact.MobilePhone : '';\r\n                        mapped.addresses = helperService.toLowerCamelCase(c.Addresses);\r\n                        mapped.mattrixDiscounts = helperService.toLowerCamelCase(c.MatrixDiscounts);\r\n                        mapped.discounts = helperService.toLowerCamelCase(c.Discounts);\r\n\r\n                        return mapped;\r\n                    });\r\n\r\n                    const data = {\r\n                        arr: customers\r\n                    };\r\n\r\n                    // partial update\r\n                    return provider.refreshCustomers(data, true).then(function () {\r\n                        return provider.loadLiveCustomers(null, id).then(function (data) {\r\n                            return liveSearchService.fillCustomersData(data, true);\r\n                        });\r\n                    });\r\n                });\r\n            } catch (e) {\r\n                console.error(e);\r\n                return helperService.rejectPromise(e);\r\n            }\r\n        };\r\n    }]);\r\n","angular.module(\"mainApp\").controller('customersController',\r\n    ['$rootScope', '$scope', 'constants', 'loginService',\r\n        '$timeout', 'customerService', 'errorService', 'gettextCatalog', 'helperService', 'configService', 'soundService',\r\n    function ($rootScope, $scope, constants, loginService,\r\n        $timeout, customerService, errorService, gettextCatalog, helperService, configService, soundService) {\r\n\r\n        //$rootScope.$broadcast('sideBar.hideDetails', { sectionName: constants.constCustomersSectionName }); // to hide sidebar details\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constCustomersViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n//            $rootScope.$broadcast('login.show'); // show login page on application start\r\n        }\r\n\r\n        $scope.fullFilters = false;\r\n        $scope.filters = {};\r\n\r\n        $scope.selectedPage = 1;\r\n        $scope.totalPages = 1;\r\n        $scope.itemsByPage = 20;\r\n        $scope.totalRecords = null;\r\n        $scope.searchParameters = \"\";\r\n        $scope.allCustomers = \"\";\r\n        $scope.customersTotal = 0;\r\n        //$scope.searchParameters = gettextCatalog.getString(\"All customers\");\r\n        //$scope.allCustomers = gettextCatalog.getString(\"All customers\");\r\n        $scope.searchText = null;\r\n\r\n        $scope.tabs = [{ tabName: gettextCatalog.getString(\"Addresses\") }, { tabName: gettextCatalog.getString(\"Contacts\") }];\r\n\r\n        $scope.abs = function (x) {\r\n            if (x)\r\n                return helperService.DEARRound(Math.abs(x), 2);\r\n            return 0;\r\n        }\r\n\r\n        // array for customers\r\n        $scope.data = [];\r\n        $scope.isLoading = false;\r\n\r\n        // enable event when view is shown\r\n        $scope.onLoad = function () { \r\n            $.blockUI();\r\n            customerService.loadCustomers(\r\n                \"\", $scope.selectedPage, $scope.itemsByPage\r\n            ).then(function (resp) {\r\n                $scope.data = resp.Customers;\r\n                getPages(resp.Total);\r\n                $.unblockUI();\r\n                const scrollReachBottomCallback = function (){\r\n                    if (!$scope.isLoading && $scope.selectedPage < $scope.totalPages) {\r\n                        $.blockUI();\r\n                        $scope.isLoading = true;\r\n                        $scope.selectedPage ++;\r\n                        \r\n                        customerService.loadCustomers(\r\n                            $scope.searchText,\r\n                            $scope.selectedPage,\r\n                            $scope.itemsByPage,\r\n                            $scope.filters,\r\n                        ).then((resp) => {\r\n                            resp.Customers.forEach((el) => {\r\n                                if (!$scope.data.filter((fEl) => fEl.ID === el.ID).length > 0) {\r\n                                    $scope.data.push(el);\r\n                                }\r\n                            });\r\n                            getPages(resp.Total);\r\n        \r\n                            $scope.isLoading = false;\r\n                            $.unblockUI();\r\n                        }, function(err) {\r\n                            $scope.isLoading = false;\r\n                            $.unblockUI();\r\n                            errorService.showError(err);\r\n                        });\r\n                    }\r\n                }\r\n                \r\n                initPagerOnScroll(scrollReachBottomCallback);\r\n                \r\n                $scope.raiseViewChanged();\r\n            },\r\n            function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n        $scope.search = function () {\r\n            $.blockUI();\r\n            if ($scope.searchText) {\r\n                $scope.searchParameters = gettextCatalog.getString(\"Search results for \") + \"'\" + $scope.searchText + \"'\";\r\n            } else {\r\n                $scope.searchParameters = $scope.allCustomers;\r\n            }\r\n            customerService.loadCustomers(\r\n                $scope.searchText, 1, $scope.itemsByPage, $scope.filters\r\n            ).then(function (resp) {\r\n                $scope.data = resp.Customers;\r\n                $scope.selectedPage = 1;\r\n\r\n                getPages(resp.Total);\r\n                $.unblockUI();\r\n\r\n                if(resp.Total == 0) {\r\n                    var msg = gettextCatalog.getString(\"No customers found.\");\r\n                    $rootScope.$broadcast('snackbar.show', {\r\n                        message: msg,\r\n                        type: 'error'\r\n                    });\r\n\r\n                    soundService.playBad();\r\n                }\r\n\r\n            }, function(err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n        function getPages(total) {\r\n            $scope.customersTotal = total;\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        };\r\n\r\n\r\n        $scope.addCustomer = function () {\r\n            $rootScope.$broadcast('addCustomer.show', { mode: \"add\", isCustomersGrid : true});\r\n        };\r\n\r\n        $scope.editCustomer = function (customer) {\r\n            $rootScope.$broadcast('editCustomer.show', customer);\r\n        };\r\n\r\n        $scope.editCustomerContact = function (customer) {\r\n            //            $rootScope.$broadcast('editCustomerContact.show', { Customer: customer, Contact: contact });\r\n            var contact = {};\r\n            if (!customer.Contacts || customer.Contacts.length == 0) {\r\n                contact = {\r\n                    Name: customer.Name,\r\n                    JobTitle: null,\r\n                    Phone: null,\r\n                    MobilePhone: null,\r\n                    Fax: null,\r\n                    Email: null,\r\n                    Default: true,\r\n                    IncludeInEmail: false,\r\n                    ID: null\r\n                };\r\n\r\n                customer.Contacts.push(contact);\r\n            }\r\n\r\n            contact = customer.Contacts[0];\r\n            $rootScope.$broadcast('editCustomerContact.show', { Customer: customer, Contact: contact });\r\n        };\r\n\r\n        $scope.editCustomerAddress = function (customer, type) {\r\n            //            $rootScope.$broadcast('editCustomerAddress.show', { Customer: customer, Address: address });\r\n            var address = null;\r\n\r\n            if (!!customer.Addresses)\r\n                address = customer.Addresses.filter(function (el) { return el.Type == type; })[0];\r\n\r\n            if (!address) {\r\n                address = {\r\n                    Line1: null,\r\n                    Line2: null,\r\n                    City: null,\r\n                    State: null,\r\n                    Postcode: null,\r\n                    Country: null,\r\n                    Type: type,\r\n                    DefaultForType: true,\r\n                    ID: null\r\n                };\r\n\r\n                customer.Addresses.push(address);\r\n            }\r\n\r\n            address = customer.Addresses.filter(function (el) { return el.Type == type; })[0];\r\n\r\n            $rootScope.$broadcast('editCustomerAddress.show', { Customer: customer, Address: address });\r\n        };\r\n\r\n        $scope.raiseViewChanged = function () {\r\n            //$rootScope.$broadcast('view.loaded');\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('view.loaded');\r\n            });\r\n        };\r\n\r\n        $scope.$on('addCustomer.selected', function (event, data) {\r\n            customerService.loadCustomersAll(true).then(res => {\r\n                $scope.search();\r\n            });\r\n        });\r\n\r\n        $scope.collapseObject = {};\r\n\r\n        $scope.showCollapse = function (event, el) {\r\n            $scope.collapseObject = el + ' ' + new Date();\r\n            \r\n            $(\"[name='\" + el + \"']\").collapse('toggle');\r\n            return false;\r\n        };\r\n\r\n        $scope.getAddressString = function(city, country, line1, line2) {\r\n            return $.grep([city, country, line1, line2], Boolean).join(\", \"); \r\n        }\r\n\r\n        $scope.toggleRow = function (active) {\r\n            if (active === true)\r\n               return false;\r\n            else\r\n              return true;\r\n        }\r\n\r\n        $scope.lockSearch = false;\r\n\r\n        $scope.$on('scan.barcode', function (event, barcode) {\r\n            $scope.checkSearchAndWait(barcode);\r\n        });\r\n\r\n        $scope.checkSearchAndWait = function (barcode) {\r\n            if ($scope.lockSearch) {\r\n                $timeout(function () {\r\n                    $scope.checkSearchAndWait(barcode);\r\n                }, 100);\r\n            }\r\n            else {\r\n                $scope.processBarcodeSearch(barcode);\r\n            }\r\n        };\r\n\r\n        $scope.processBarcodeSearch = function (barcode) {\r\n            $.blockUI();\r\n\r\n            $scope.lockSearch = true;\r\n            $scope.filters.SaleBarcode = barcode;\r\n            $scope.searchParameters = gettextCatalog.getString(\"Search results for barcode \") + \"'\" + $scope.filters.SaleBarcode + \"'\";\r\n\r\n            $scope.searchText = barcode;\r\n            $('#customerSearchName').val(barcode);\r\n            var el = $('#customerSearchName')[0];\r\n            el.dispatchEvent(new Event(\"input\", { bubbles: true }));\r\n            el.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n\r\n            $scope.search();\r\n\r\n            $scope.filters.SaleBarcode = \"\";\r\n\r\n            $scope.lockSearch = false;\r\n        };\r\n\r\n        $scope.showInMobileDesign = function() {\r\n            return configService.isMobileDesign ? '' : 'desktop-hide';\r\n        };\r\n\r\n        $scope.showInDesktopDesign = function() {\r\n            return configService.isMobileDesign ? 'mobile-hide' : '';\r\n        };\r\n\r\n    }]);\r\n","import Chart from 'chart.js';\r\n\r\nangular.module(\"mainApp\").controller('dashboardController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService',\r\n        '$uibModal', 'outletService', 'configService', 'helperService', 'remoteRequestProvider', 'stockTakeService', 'gettextCatalog',\r\n        '$filter', '$locale',\r\n        function ($scope, $rootScope, constants, loginService, $timeout, errorService,\r\n            $uibModal, outletService, configService, helperService, remoteRequestProvider, stockTakeService, gettextCatalog,\r\n            $filter, $locale) {\r\n\r\n            $scope.firstShow = true;\r\n            $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n            //$rootScope.$broadcast('sideBar.hideDetails', { sectionName: constants.constUserManagementSectionName }); // to hide sidebar details\r\n            $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constDashboardViewName }); // to hide sidebar details\r\n\r\n            if (!loginService.isLoggedIn()) {\r\n                helperService.goToHomePage();\r\n                return;\r\n            };\r\n\r\n            // CC-25044: When false, hide Revenue / Gross profit / COGS (aligned with CanSeeStockValue from PosAccount).\r\n            $scope.canSeeProfitabilityMetrics = configService.CanSeeStockValue !== false;\r\n            \r\n            \r\n            $scope.fcss = { 'height': window.innerHeight * 0.8 + 'px' };\r\n\r\n            $scope.onLoad = function () {\r\n                $scope.raiseViewChanged();\r\n\r\n                $scope.chartObj = {};\r\n\r\n                $scope.filters = {\r\n                    viewMode: 'days',\r\n                    startDate: moment().add(-6, 'days').startOf('day'),\r\n                    endDate: moment().startOf('day'),\r\n                    periodLabel: '',\r\n                    OutletID: '0'\r\n                };\r\n\r\n                $scope.outleDetails = {\r\n                    Revenue: [],\r\n                    SaleCount: [],\r\n                    CustomerCount: [],\r\n                    GrossProfit: [],\r\n                    DiscountValue: [],\r\n                    DiscountPercent: [],\r\n                    BasketValue: [],\r\n                    BasketSize: [],\r\n                    ReturnCount: [],\r\n                    COGS: []\r\n                };\r\n\r\n                $scope.totalValue = {\r\n                    Revenue: 0,\r\n                    SaleCount: 0,\r\n                    CustomerCount: 0,\r\n                    GrossProfit: 0,\r\n                    DiscountValue: 0,\r\n                    DiscountPercent: 0,\r\n                    BasketValue: 0,\r\n                    BasketSize: 0,\r\n                    ReturnCount: 0,\r\n                    COGS: 0\r\n                };\r\n\r\n                $.blockUI();\r\n                stockTakeService.loadUserAvailableOutletsWithoutRegister()\r\n                    .then(function (res) {\r\n\r\n                        if (res.data.locations.length > 1) {\r\n                            //$scope.locations = [{ PosOutletID: '0', OutletName: gettextCatalog.getString('All outlets') }].concat(res.data.locations);\r\n                            $scope.locations = res.data.locations;\r\n                            $scope.filters.allowSelectOutlet = true;\r\n                        }\r\n                        else {\r\n                            $scope.locations = res.data.locations;\r\n                            $scope.filters.allowSelectOutlet = false;\r\n                            if (res.data.locations.length == 1) {\r\n                                $scope.filters.OutletID = res.data.locations[0].PosOutletID;\r\n                            }\r\n                        }\r\n\r\n                        // code below is important. Async execution means that comboboxes can be initialized before actual data will have come\r\n                        // so we need to refresh comboboxes after actual data is loaded to scope\r\n                        $timeout(function () { $('input, select').trigger('refresh'); });\r\n\r\n                        reloadData();\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                    });\r\n\r\n                updatePeriodLabel();\r\n            };\r\n\r\n            $scope.$watch('filters.OutletID', function (newValue, oldValue) {\r\n                if (newValue !== oldValue) {\r\n                    reloadData();\r\n                }\r\n            });\r\n\r\n            $scope.$watch('filters.viewMode',\r\n                function (newValue, oldValue) {                \r\n                    \r\n                    $scope.setViewMode(newValue);\r\n                }\r\n            );\r\n\r\n            $scope.setViewMode = function (viewModeName) {\r\n                \r\n                $scope.filters.viewMode = viewModeName;\r\n\r\n                var currentDate = moment().startOf('day');\r\n\r\n                switch ($scope.filters.viewMode) {\r\n                    case 'days':\r\n                        $scope.filters.endDate = currentDate;\r\n                        $scope.filters.startDate = $scope.filters.endDate.clone().add(-6, $scope.filters.viewMode).startOf('day');\r\n                        break;\r\n                    case 'weeks':\r\n                        // $scope.filters.endDate = currentDate.endOf('week').startOf('day');\r\n                        // $scope.filters.startDate = $scope.filters.endDate.clone().add(-6, $scope.filters.viewMode).startOf('day').add(-1, 'days');\r\n                        $scope.filters.startDate = currentDate.clone().startOf('week').add(-6, $scope.filters.viewMode).startOf('day');\r\n                        $scope.filters.endDate = currentDate.clone().endOf('week').startOf('day');\r\n                        break;\r\n                    case 'months':\r\n                        $scope.filters.startDate = currentDate.clone().startOf('month').add(-6, $scope.filters.viewMode).startOf('day');\r\n                        $scope.filters.endDate = currentDate.clone().endOf('month').startOf('day');\r\n                        break;\r\n                }\r\n\r\n                updatePeriodLabel();\r\n\r\n                reloadData();\r\n            }\r\n\r\n            $scope.prevPeriod = function () {\r\n                $scope.filters.startDate = $scope.filters.startDate.clone().add(-1, $scope.filters.viewMode).startOf('day');\r\n\r\n                switch ($scope.filters.viewMode) {\r\n                    case 'days':\r\n                        $scope.filters.endDate = $scope.filters.startDate.clone().add(6, $scope.filters.viewMode).startOf('day');\r\n                        break;\r\n                    case 'weeks':\r\n                        $scope.filters.endDate = $scope.filters.startDate.clone().add(6, $scope.filters.viewMode).endOf('week').startOf('day');\r\n                        break;\r\n                    case 'months':\r\n                        $scope.filters.endDate = $scope.filters.startDate.clone().add(6, $scope.filters.viewMode).endOf('month').startOf('day');\r\n                        break;\r\n                }\r\n\r\n\r\n                updatePeriodLabel();\r\n\r\n                reloadData();\r\n            };\r\n            $scope.nextPeriod = function () {\r\n                var currentDate = null;\r\n\r\n                var startDate = $scope.filters.startDate.clone().add(1, $scope.filters.viewMode);\r\n                var endDate = startDate.clone().add(6, $scope.filters.viewMode);\r\n\r\n                switch ($scope.filters.viewMode) {\r\n                    case 'days':\r\n                        endDate = endDate.startOf('day');\r\n                        currentDate = moment().startOf('day')\r\n                        break;\r\n                    case 'weeks':\r\n                        endDate = endDate.endOf('week').startOf('day');\r\n                        currentDate = moment().endOf('week').startOf('day')\r\n                        break;\r\n                    case 'months':\r\n                        endDate = endDate.endOf('month').startOf('day');\r\n                        currentDate = moment().endOf('month').startOf('day')\r\n                        break;\r\n                }\r\n\r\n                if (endDate <= currentDate) {\r\n                    $scope.filters.endDate = endDate;\r\n                    $scope.filters.startDate = startDate;\r\n\r\n                    updatePeriodLabel();\r\n\r\n                    reloadData();\r\n                }\r\n            };\r\n\r\n            $scope.raiseViewChanged = function () {\r\n                $rootScope.$broadcast('view.loaded');\r\n            };\r\n\r\n            $scope.$on('view.loaded', function (evt) {\r\n                if ($scope.firstShow) {\r\n                    $scope.firstShow = false;\r\n                    // init controls\r\n\r\n                    $timeout(function () {\r\n                        initSelects();\r\n\r\n                        $timeout(function () { $('input, select').trigger('refresh'); });\r\n                    });\r\n                }\r\n            });\r\n\r\n            $scope.showDetails = function (chartName) {\r\n\r\n                $scope.chartDetails = {};\r\n                switch (chartName) {\r\n                    case 'Revenue':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('Revenue');\r\n                        $scope.chartDetails.totalValue = $filter('currency')($scope.totalValue[chartName]);\r\n                        break;\r\n\r\n                    case 'SaleCount':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('Sale count');\r\n                        $scope.chartDetails.totalValue = $scope.totalValue[chartName];\r\n                        break;\r\n\r\n                    case 'CustomerCount':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('Customer count');\r\n                        $scope.chartDetails.totalValue = $scope.totalValue[chartName];\r\n                        break;\r\n\r\n                    case 'GrossProfit':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('Gross profit');\r\n                        $scope.chartDetails.totalValue = $filter('currency')($scope.totalValue[chartName]);\r\n                        break;\r\n\r\n                    case 'DiscountValue':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('Discount value');\r\n                        $scope.chartDetails.totalValue = $filter('currency')($scope.totalValue[chartName]);\r\n                        break;\r\n\r\n                    case 'DiscountPercent':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('Discount percent') + ' %';\r\n                        $scope.chartDetails.totalValue = $scope.totalValue[chartName];\r\n                        break;\r\n\r\n                    case 'BasketValue':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('Basket value');\r\n                        $scope.chartDetails.totalValue = $filter('currency')($scope.totalValue[chartName]);\r\n                        break;\r\n\r\n                    case 'BasketSize':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('Basket size');\r\n                        $scope.chartDetails.totalValue = $scope.totalValue[chartName];\r\n                        break;\r\n\r\n                    case 'ReturnCount':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('Return count');\r\n                        $scope.chartDetails.totalValue = $scope.totalValue[chartName];\r\n                        break;\r\n\r\n                    case 'COGS':\r\n                        $scope.chartDetails.Title = gettextCatalog.getString('COGS');\r\n                        $scope.chartDetails.totalValue = $filter('currency')($scope.totalValue[chartName]);\r\n                        break;\r\n                }\r\n                $scope.chartDetails.Outlets = $scope.outleDetails[chartName];\r\n\r\n                $scope.chartObj.Details = initChart('divDetailsChart', $scope.chartData.Labels, $scope.chartData[chartName]);\r\n\r\n                //$scope.chartObj.Details.canvas.parentNode.style.height = '300px';\r\n\r\n                helperService.showDialog('#dashboardDetailsDialogPartial');\r\n            };\r\n\r\n            $scope.closeDashboardDetailsDialog = function () {\r\n                helperService.closeDialog('#dashboardDetailsDialogPartial');\r\n\r\n                $scope.chartObj.Details.destroy();\r\n                delete $scope.chartObj.Details;\r\n            };\r\n\r\n            function reloadData() {\r\n                $.blockUI();\r\n\r\n                var outletID = $scope.filters.OutletID;\r\n                if (outletID === null) {\r\n                    outletID = '0';\r\n                }\r\n\r\n                var _startDate = helperService.toDateWithCurrentTimeZone($scope.filters.startDate);\r\n                var _endDate = helperService.toDateWithCurrentTimeZone($scope.filters.endDate);\r\n\r\n                remoteRequestProvider.getDashboardData(_startDate, _endDate, $scope.filters.viewMode, outletID)\r\n                    .then(function (response) {\r\n                        console.log(response.data);\r\n\r\n                        var ranges = response.data.Ranges;\r\n                        var outlets = response.data.Outlets;\r\n                        var lastPeriodData = response.data.LastPeriodData;\r\n\r\n                        $scope.chartData = {};\r\n                        $scope.chartData.Labels = [];\r\n                        $scope.chartData.Revenue = [];\r\n                        $scope.chartData.SaleCount = [];\r\n                        $scope.chartData.CustomerCount = [];\r\n                        $scope.chartData.GrossProfit = [];\r\n                        $scope.chartData.DiscountValue = [];\r\n                        $scope.chartData.DiscountPercent = [];\r\n                        $scope.chartData.BasketValue = [];\r\n                        $scope.chartData.BasketSize = [];\r\n                        $scope.chartData.ReturnCount = [];\r\n                        $scope.chartData.COGS = [];\r\n\r\n                        for (var label in ranges) {\r\n                            var element = ranges[label];\r\n\r\n                            $scope.chartData.Labels.push(label);\r\n\r\n                            $scope.chartData.Revenue.push(element.SalesRevenue);\r\n                            $scope.chartData.SaleCount.push(element.SalesCount);\r\n                            $scope.chartData.CustomerCount.push(element.CustomerCount);\r\n                            $scope.chartData.GrossProfit.push(element.GrossProfit);\r\n                            $scope.chartData.DiscountValue.push(element.DiscountValue);\r\n                            $scope.chartData.DiscountPercent.push(element.DiscountPercent);\r\n                            $scope.chartData.BasketValue.push(element.BasketValue);\r\n                            $scope.chartData.BasketSize.push(element.BasketSize);\r\n                            $scope.chartData.ReturnCount.push(element.ReturnCount);\r\n                            $scope.chartData.COGS.push(element.COGS);\r\n                        }\r\n\r\n                        for (var key in $scope.chartObj) {\r\n                            if ($scope.chartObj.hasOwnProperty(key)) {\r\n                                $scope.chartObj[key].destroy();\r\n                                delete $scope.chartObj[key];\r\n                            }\r\n                        }\r\n\r\n                        if ($scope.canSeeProfitabilityMetrics) {\r\n                            $scope.chartObj['Revenue'] = initChart('divRevenueChart', $scope.chartData.Labels, $scope.chartData.Revenue);\r\n                        }\r\n                        $scope.chartObj['SaleCount'] = initChart('divSaleCountChart', $scope.chartData.Labels, $scope.chartData.SaleCount);\r\n                        $scope.chartObj['CustomerCount'] = initChart('divCustomerCount', $scope.chartData.Labels, $scope.chartData.CustomerCount);\r\n                        if ($scope.canSeeProfitabilityMetrics) {\r\n                            $scope.chartObj['GrossProfit'] = initChart('divGrossProfitChart', $scope.chartData.Labels, $scope.chartData.GrossProfit);\r\n                        }\r\n                        $scope.chartObj['DiscountValue'] = initChart('divDiscountValueChart', $scope.chartData.Labels, $scope.chartData.DiscountValue);\r\n                        $scope.chartObj['DiscountPercent'] = initChart('divDiscountPercentChart', $scope.chartData.Labels, $scope.chartData.DiscountPercent);\r\n                        $scope.chartObj['BasketValue'] = initChart('divBasketValueChart', $scope.chartData.Labels, $scope.chartData.BasketValue);\r\n                        $scope.chartObj['BasketSize'] = initChart('divBasketSizeChart', $scope.chartData.Labels, $scope.chartData.BasketSize);\r\n                        $scope.chartObj['ReturnCount'] = initChart('divReturnCountChart', $scope.chartData.Labels, $scope.chartData.ReturnCount);\r\n                        if ($scope.canSeeProfitabilityMetrics) {\r\n                            $scope.chartObj['COGS'] = initChart('divCOGSChart', $scope.chartData.Labels, $scope.chartData.COGS);\r\n                        }\r\n\r\n\r\n                        $scope.totalValue.Revenue = lastPeriodData.SalesRevenue;\r\n                        $scope.totalValue.SaleCount = lastPeriodData.SalesCount;\r\n                        $scope.totalValue.CustomerCount = lastPeriodData.CustomerCount;\r\n                        $scope.totalValue.GrossProfit = lastPeriodData.GrossProfit;\r\n                        $scope.totalValue.DiscountValue = lastPeriodData.DiscountValue;\r\n                        $scope.totalValue.DiscountPercent = lastPeriodData.DiscountPercent;\r\n                        $scope.totalValue.BasketValue = lastPeriodData.BasketValue;\r\n                        $scope.totalValue.BasketSize = lastPeriodData.BasketSize;\r\n                        $scope.totalValue.ReturnCount = lastPeriodData.ReturnCount;\r\n                        $scope.totalValue.COGS = lastPeriodData.COGS;\r\n\r\n\r\n                        $scope.outleDetails.Revenue = [];\r\n                        $scope.outleDetails.SaleCount = [];\r\n                        $scope.outleDetails.CustomerCount = [];\r\n                        $scope.outleDetails.GrossProfit = [];\r\n                        $scope.outleDetails.DiscountValue = [];\r\n                        $scope.outleDetails.DiscountPercent = [];\r\n                        $scope.outleDetails.BasketValue = [];\r\n                        $scope.outleDetails.BasketSize = [];\r\n                        $scope.outleDetails.ReturnCount = [];\r\n                        $scope.outleDetails.COGS = [];\r\n\r\n                        if ((!$scope.filters.OutletID || $scope.filters.OutletID == '0') && outlets.length > 1) {\r\n                            for (var i = 0; i < outlets.length; i++) {\r\n                                var outletData = outlets[i];\r\n\r\n                                $scope.outleDetails.Revenue.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.SalesRevenue,\r\n                                    Percent: getPercent(lastPeriodData.SalesRevenue, outletData.SalesRevenue)\r\n                                });\r\n                                $scope.outleDetails.SaleCount.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.SalesCount,\r\n                                    Percent: getPercent(lastPeriodData.SalesCount, outletData.SalesCount)\r\n                                });\r\n                                $scope.outleDetails.CustomerCount.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.CustomerCount,\r\n                                    Percent: getPercent(lastPeriodData.CustomerCount, outletData.CustomerCount)\r\n                                });\r\n                                $scope.outleDetails.GrossProfit.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.GrossProfit,\r\n                                    Percent: getAvgPercent(outlets, 'GrossProfit', outletData.GrossProfit)\r\n                                });\r\n                                $scope.outleDetails.DiscountValue.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.DiscountValue,\r\n                                    Percent: getPercent(lastPeriodData.DiscountValue, outletData.DiscountValue)\r\n                                });\r\n                                $scope.outleDetails.DiscountPercent.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.DiscountPercent,\r\n                                    Percent: getPercent(lastPeriodData.DiscountPercent, outletData.DiscountPercent)\r\n                                });\r\n                                $scope.outleDetails.BasketValue.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.BasketValue,\r\n                                    Percent: getAvgPercent(outlets, 'BasketValue', outletData.BasketValue)\r\n                                });\r\n                                $scope.outleDetails.BasketSize.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.BasketSize,\r\n                                    Percent: getAvgPercent(outlets, 'BasketSize', outletData.BasketSize)\r\n                                });\r\n                                $scope.outleDetails.ReturnCount.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.ReturnCount,\r\n                                    Percent: getPercent(lastPeriodData.ReturnCount, outletData.ReturnCount)\r\n                                });\r\n                                $scope.outleDetails.COGS.push({\r\n                                    Name: outletData.ECSLocationName,\r\n                                    Value: outletData.COGS,\r\n                                    Percent: getPercent(lastPeriodData.COGS, outletData.COGS)\r\n                                });\r\n                            }\r\n                        }\r\n\r\n                        $scope.outleDetails.Revenue.sort(compareOutlets);\r\n                        $scope.outleDetails.SaleCount.sort(compareOutlets);\r\n                        $scope.outleDetails.CustomerCount.sort(compareOutlets);\r\n                        $scope.outleDetails.GrossProfit.sort(compareOutlets);\r\n                        $scope.outleDetails.DiscountValue.sort(compareOutlets);\r\n                        $scope.outleDetails.DiscountPercent.sort(compareOutlets);\r\n                        $scope.outleDetails.BasketValue.sort(compareOutlets);\r\n                        $scope.outleDetails.BasketSize.sort(compareOutlets);\r\n                        $scope.outleDetails.ReturnCount.sort(compareOutlets);\r\n                        $scope.outleDetails.COGS.sort(compareOutlets);\r\n\r\n                        $.unblockUI();\r\n                    }, function (err) {\r\n                        // process error\r\n                        $.unblockUI();\r\n                        // show error and login page once more\r\n                        errorService.showError(err);\r\n                    });\r\n            }\r\n\r\n            function updatePeriodLabel() {\r\n                $scope.filters.periodLabel = '';\r\n\r\n                var format = configService.dateFormat;\r\n                format = format.replace('yyyy', 'YYYY');\r\n                format = format.replace('dd', 'DD');\r\n\r\n                switch ($scope.filters.viewMode) {\r\n                    case 'days':\r\n                        $scope.filters.periodLabel = $scope.filters.endDate.format(format);\r\n                        break;\r\n                    case 'weeks':\r\n                        $scope.filters.periodLabel = $scope.filters.endDate.clone().startOf('week').format(format) + '-' + $scope.filters.endDate.clone().endOf('week').format(format);\r\n                        break;\r\n                    case 'months':\r\n                        $scope.filters.periodLabel = $scope.filters.endDate.clone().startOf('month').format(format) + '-' + $scope.filters.endDate.clone().endOf('month').format(format);\r\n                        break;\r\n                }\r\n            }\r\n\r\n            function initChart(selector, labels, values) {\r\n                $('#' + selector).empty();\r\n\r\n                var ctx = document.getElementById(selector).getContext('2d');\r\n                var myChart = new Chart(ctx, {\r\n                    type: 'line',\r\n                    data: {\r\n                        labels: labels,\r\n                        datasets: [{\r\n                            data: values,\r\n                            backgroundColor: 'rgb(5, 203, 191, .1)',\r\n                            borderColor: 'rgb(5, 203, 191)',\r\n                            fill: true,\r\n                            lineTension: 0,\r\n                            pointRadius: 5,\r\n                            pointBackgroundColor: 'rgb(5, 203, 191)',\r\n                            pointBorderWidth: 2,\r\n                            pointBorderColor: 'rgb(255, 255, 255)',\r\n                            pointHoverRadius: 5,\r\n                            pointHoverBackgroundColor: 'rgb(5, 203, 191)',\r\n                            pointHoverBorderWidth: 2,\r\n                            pointHoverBorderColor: 'rgb(255, 255, 255)'\r\n                        }]\r\n                    },\r\n                    options: {\r\n                        responsive: true,\r\n                        legend: {\r\n                            display: false\r\n                        },\r\n                        title: {\r\n                            display: false\r\n                        },\r\n                        tooltips: {\r\n                            enabled: true\r\n                        },\r\n                        elements: {\r\n                            point: {\r\n                                pointStyle: 'circle'\r\n                            }\r\n                        },\r\n                        scales: {\r\n                            xAxes: [{\r\n                                display: true,\r\n                                gridLines: {\r\n                                    display: false\r\n                                },\r\n                                scaleLabel: {\r\n                                    display: true\r\n                                }\r\n                            }],\r\n                            yAxes: [{\r\n                                display: true,\r\n                                scaleLabel: {\r\n                                    display: false\r\n                                },\r\n                                ticks: {\r\n                                    suggestedMin: 0\r\n                                }\r\n                            }]\r\n                        }\r\n                    }\r\n                });\r\n\r\n                return myChart;\r\n            }\r\n\r\n            function getPercent(total, value) {\r\n                if (total > 0) {\r\n                    return Math.round(value / total * 100, 0);\r\n                }\r\n                return 0;\r\n            }\r\n\r\n            function getAvgPercent(values, propName, value) {\r\n\r\n                var total = 0;\r\n                for (var i = 0; i < values.length; i++) {\r\n                    total += Math.abs(values[i][propName]);\r\n                }\r\n\r\n                if (total > 0) {\r\n                    return Math.round(Math.abs(value) / total * 100, 0);\r\n                }\r\n\r\n                return 0;\r\n            }\r\n\r\n            function compareOutlets(outlet1, outlet2) {\r\n                return (outlet1.Value > outlet2.Value) ? -1 : ((outlet2.Value > outlet1.Value) ? 1 : 0);;\r\n            }\r\n        }]);","angular.module('services').factory('dataChangeNotificationService',\r\n    ['$q', 'remoteRequestProvider', '$interval', '$rootScope', 'loginService',\r\n        function ($q, remoteRequestProvider, $interval, $rootScope, loginService) {\r\n\r\n            var dataChangeNotificationService = {};\r\n\r\n            dataChangeNotificationService.lastEvents = null;\r\n            dataChangeNotificationService.timer=null;\r\n            dataChangeNotificationService.isInited = false;\r\n\r\n            dataChangeNotificationService.init = function () {\r\n                return remoteRequestProvider.dataChangeStatuses()\r\n                    .then(function (res) {\r\n                        var deffered = $q.defer();\r\n                        if (!res) {\r\n                            deffered.reject('empty status data');\r\n                        } else {\r\n                            dataChangeNotificationService.lastEvents = res.data;\r\n                            deffered.resolve(null);\r\n                        }\r\n\r\n                        return deffered.promise;\r\n                    })\r\n                    .catch(function (err) {\r\n                        var deffered = $q.defer();\r\n                        deffered.resolve(null);\r\n                        return deffered.promise;\r\n                    })\r\n                    .finally(function () {\r\n                        if (!dataChangeNotificationService.isInited) {\r\n                            dataChangeNotificationService.isInited = true;\r\n\r\n                            dataChangeNotificationService.timer = $interval(function () {\r\n                                if (loginService.isLoggedIn()) {\r\n                                    remoteRequestProvider.dataChangeStatuses()\r\n                                        .then(function (res) {\r\n                                            if (dataChangeNotificationService.lastEvents == null) {\r\n                                                dataChangeNotificationService.lastEvents = res.data;\r\n                                            }\r\n                                            else if (!!res && !!res.data) {\r\n                                                var mp = {};\r\n                                                angular.forEach(res.data, function (el) { mp[el.name] = el.lastChange; });\r\n                                                angular.forEach(dataChangeNotificationService.lastEvents,\r\n                                                    function (el) {\r\n                                                        if (mp[el.name] != el.lastChange) {\r\n                                                            $rootScope.$broadcast('dataChanged.' + el.name);\r\n                                                        }\r\n                                                    });\r\n                                                dataChangeNotificationService.lastEvents = res.data;\r\n                                            }\r\n                                        });\r\n                                }\r\n                            }, 60 * 1000);\r\n\r\n                            var deffered = $q.defer();\r\n                            deffered.resolve(null);\r\n                            return deffered.promise;\r\n                        }\r\n                    });\r\n\r\n            };\r\n\r\n            dataChangeNotificationService.stop = function () {\r\n                if (dataChangeNotificationService.isInited) {\r\n                    $interval.cancel(dataChangeNotificationService.timer);\r\n                    dataChangeNotificationService.timer = null;\r\n                    dataChangeNotificationService.lastEvents = null;\r\n                    dataChangeNotificationService.timer = null;\r\n                    dataChangeNotificationService.isInited = false;\r\n                }\r\n            };\r\n\r\n            return dataChangeNotificationService;\r\n        }\r\n\r\n\r\n    ]);\r\n","import * as JsStore from 'jsstore';\r\n\r\nangular.module('services').service('dbUpdatesService', [\r\n    function () {\r\n        this.initialDBCreationScript = function () {\r\n            var script = [];\r\n            script.push('CREATE TABLE if not exists logins(PosName text not null, UserName text not null, Token text not null, lastModified datetime not null, PRIMARY KEY (PosName, UserName))');\r\n            script.push('CREATE TABLE if not exists outlets(PosName text not null, UserID text not null, OutletName text not null, OutletID text not null, Packed text not null, lastModified datetime not null, Taxes text null, PRIMARY KEY (PosName, UserID, OutletName))');\r\n            script.push('CREATE TABLE if not exists settings(Name text not null, [Value] text null, lastModified datetime not null, PRIMARY KEY (Name))');\r\n            script.push('CREATE TABLE if not exists products(ProductID text not null, ProductCode text not null, Name text null, Barcode text null, Family text null, FamilyID text null, Category text null, CategoryID text null, DiscountName text null, DiscountID text null, Price real not null, Option1 text null, Option2 text null, Option3 text null, Discounts text null, Taxes text null, LoyaltyEarning text null, PRIMARY KEY (ProductID))');\r\n            script.push('CREATE TABLE if not exists receipts(ReceiptID text not null, Template text not null, EmailTemplate text not null, EmailSubject text not null, PRIMARY KEY (ReceiptID))');\r\n            script.push('CREATE TABLE if not exists labels(ReceiptID text not null, Template text not null, PRIMARY KEY (ReceiptID))');\r\n            script.push('CREATE index idxProductCode on products(ProductCode asc)');\r\n            script.push('CREATE index idxName on products(Name asc)');\r\n            script.push('CREATE index idxFamily on products(Family asc)');\r\n            script.push('CREATE index idxBarcode on products(Barcode asc)');\r\n\r\n            // temporary table to hold product search - for performance aims\r\n            script.push('CREATE TABLE if not exists productsSearchTemp(ProductID text not null, ProductCode text not null, Name text null, Barcode text null, Family text null, FamilyID text null, Category text null, CategoryID text null, DiscountName text null, DiscountID text null, Price real not null, Option1 text null, Option2 text null, Option3 text null, Discounts text null, Taxes text null, LoyaltyEarning text null, PRIMARY KEY (ProductID))');\r\n            script.push('CREATE index idxProductCodeTemp on productsSearchTemp(ProductCode asc)');\r\n            script.push('CREATE index idxNameTemp on productsSearchTemp(Name asc)');\r\n            script.push('CREATE index idxBarcodeTemp on productsSearchTemp(Barcode asc)');\r\n            script.push('CREATE index idxFamilyTemp on productsSearchTemp(Family asc)');\r\n\r\n            // offline payments\r\n            script.push('CREATE TABLE if not exists offSales(PosName text not null, SaleID text not null, StatusID text not null, Packed text not null, InfoPacked text not null, lastModified datetime not null, PRIMARY KEY (PosName, SaleID))');\r\n\r\n            script.push('CREATE TABLE if not exists closeRegistrySales(ID text not null,RegistryID text not null, OpeningTime datetime not null, SalesRepresentative text not null, IsActive bit not null, CashExpected decimal(18,2) null, CashCounted decimal(18,2) null, CreditCardExpected decimal(18,2) null, CreditCardCounted decimal(18,2) null, GiftCardExpected decimal(18,2) null, GiftCardCounted decimal(18,2) null, LoyaltyExpected decimal(18,2) null, LoyaltyCounted decimal(18,2) null, StoreCreditExpected decimal(18,2) null, StoreCreditCounted decimal(18,2) null , Note text null, SendedToServer bit not null, PRIMARY KEY (ID))');\r\n\r\n            //Customers\r\n            script.push('CREATE TABLE if not exists customers(ID text not null, Name text not null, Phone text null, MobilePhone text null, Email text null, EnableLoyaltyPoints bit not null, PRIMARY KEY (ID))');\r\n\r\n            script.push('CREATE TABLE if not exists versions([Version] integer PRIMARY KEY not null, [Description] text null)');\r\n            script.push('INSERT INTO versions(Version,Description) VALUES (\"1\",\"Initial version\")');\r\n\r\n            return script;\r\n        };\r\n\r\n        this.update2 = function (tx) {\r\n            tx.executeSql('ALTER TABLE products ADD COLUMN Option1Name text null');\r\n            tx.executeSql('ALTER TABLE products ADD COLUMN Option2Name text null');\r\n            tx.executeSql('ALTER TABLE products ADD COLUMN Option3Name text null');\r\n            tx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN Option1Name text null');\r\n            tx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN Option2Name text null');\r\n            tx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN Option3Name text null');\r\n            return 'add family option names';\r\n        };\r\n\r\n        this.update3 = function (tx) {\r\n            tx.executeSql('CREATE TABLE if not exists cashManagement(ID text not null,CloseRegistryID text not null,RegistryID text not null, OperationTime datetime not null, SalesRepresentative text not null,Reasons text null,OperationType text not null, Amount decimal(18,2) null, PRIMARY KEY (ID))');\r\n            return 'add cash management table';\r\n        };\r\n\r\n        this.update4 = function (tx) {\r\n            tx.executeSql('ALTER TABLE products ADD COLUMN ImageID text null');\r\n            tx.executeSql('ALTER TABLE products ADD COLUMN FamilyImageID text null');\r\n            tx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN ImageID text null');\r\n            tx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN FamilyImageID text null');\r\n\r\n            return 'add ImageID column and FamilyImageID column to the Product table and to ';\r\n        };\r\n        this.update5 = function (tx) {\r\n            tx.executeSql('CREATE TABLE if not exists PosDiscounts(ProductID text not null,TargetProductID text not null,' +\r\n                'BuyValue decimal(18,6) null, GetValue decimal(18,6) null, DateFrom datetime null, DateTo datetime null, Type text null, MinValue decimal(18,6) null, MaxValue decimal(18,6) null, DiscountLineType text null,  Amount decimal(18,6) null)');\r\n\r\n            tx.executeSql('ALTER TABLE products ADD COLUMN Tags text null');\r\n            tx.executeSql('ALTER TABLE products ADD COLUMN BrandID text null');\r\n            tx.executeSql('ALTER TABLE customers ADD COLUMN Discounts text null');\r\n            tx.executeSql('drop table if exists PosDiscounts');\r\n            tx.executeSql('CREATE TABLE if not exists PosDiscounts(posName text not null, productID text null,tagName text null,' +\r\n                'brandID text null, categoryID text null,dealDiscountID text null, discountID text null,getValue decimal(18,6) null,buyValue decimal(18,6) null,buyMore bit null,  customersGroup text null, dealID text null,' +\r\n                ' dateFrom datetime null, dateTo datetime null, minValue decimal(18,6) null, maxValue decimal(18,6) null, discountLineType text null,  amount decimal(18,6) null, targets text null, type text null)');\r\n\r\n            tx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN Tags text null');\r\n            tx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN BrandID text null');\r\n\r\n            tx.executeSql('ALTER TABLE customers ADD COLUMN MatrixDiscounts text null');\r\n            tx.executeSql('ALTER TABLE customers ADD COLUMN Discount decimal(18,6) null');\r\n\r\n            return 'add columns to handle discounts';\r\n        };\r\n\r\n        this.update6 = function (tx) {\r\n            tx.executeSql('ALTER TABLE PosDiscounts ADD COLUMN isFamily bit null');\r\n\r\n            return 'add columns to handle discounts';\r\n        };\r\n\r\n        this.update7 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN Brand text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN Brand text null');\r\n\r\n            return 'add Brand column the Product table and to the productsSearchTemp';\r\n        };\r\n\r\n        this.update8 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE customers ADD COLUMN Addresses text null');\r\n\r\n            return 'add Addresses column the customers table';\r\n        };\r\n\r\n        this.update9 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN PinToken text null');\r\n\r\n            return 'add PinToken column the logins table';\r\n        };\r\n\r\n        this.update10 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN Info text null');\r\n\r\n            return 'add Info column the logins table';\r\n        };\r\n\r\n        this.update11 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN ProductShortDescription text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN ProductShortDescription text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN FamilyShortDescription text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN FamilyShortDescription text null');\r\n\r\n            return 'add ProductShortDescription, FamilyShortDescription columns the Product table and to the productsSearchTemp';\r\n        };\r\n\r\n        this.update12 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN StocktakeLocked bit null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN StocktakeLocked bit null');\r\n\r\n            return 'add ProductShortDescription, FamilyShortDescription columns the Product table and to the productsSearchTemp';\r\n        };\r\n\r\n        this.update13 = function (ctx) {\r\n            ctx.executeSql('CREATE TABLE if not exists closeRegistrySalesAdditionalTotals(CloseRegistrySalesID text not null, CounterName text not null, Counter decimal(18,2) not null, PRIMARY KEY (CloseRegistrySalesID, CounterName))');\r\n            return 'create closeRegistrySalesAdditionalTotals table';\r\n        };\r\n\r\n        this.update14 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE closeRegistrySalesAdditionalTotals ADD COLUMN CounterType text null');\r\n            return 'alter closeRegistrySalesAdditionalTotals table';\r\n        };\r\n\r\n        this.update15 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE cashManagement ADD COLUMN SendedToServer bit not null default 0');\r\n            return 'alter cashManagement table';\r\n        };\r\n\r\n        this.update16 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE offSales ADD COLUMN OperationID text null');\r\n            return 'alter offSales table';\r\n        };\r\n\r\n        this.update17 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE closeRegistrySales ADD COLUMN Additionals text null');\r\n            return 'alter closeRegistrySales table';\r\n        };\r\n\r\n        this.update18 = function (ctx) {\r\n            ctx.executeSql('CREATE TABLE saleCoupon(ID text not null, DealID text not null, CouponCode text not null, PRIMARY KEY (ID))');\r\n            return 'create saleCoupon table';\r\n        };\r\n\r\n        this.update19 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE PosDiscounts add column ext text null');\r\n            return 'alter PosDiscounts table';\r\n        };\r\n\r\n        this.update20 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN ProductType text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN ProductType text null');\r\n\r\n            return 'add ProductType column to the Product table and to the productsSearchTemp';\r\n        };\r\n\r\n        this.update21 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE customers ADD COLUMN Taxes text null');\r\n\r\n            return 'add Taxes column to the customers table';\r\n        };\r\n\r\n        this.update22 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CostingMethod text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CostingMethod text null');\r\n\r\n            return 'add CostingMethod column to the Product table and to the productsSearchTemp';\r\n        };\r\n\r\n        this.update23 = function (ctx) {\r\n            //SaleRepresentatives\r\n            ctx.executeSql('CREATE TABLE if not exists saleRepresentatives(ID text not null, Name text not null, PosOutletID text null, PRIMARY KEY (ID))');\r\n            return 'create salesRepresentatives table';\r\n        };\r\n\r\n        this.update24 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE customers ADD COLUMN Account decimal(18,6) null');\r\n            ctx.executeSql('ALTER TABLE customers ADD COLUMN CreditLimit decimal(18,6) null');\r\n            ctx.executeSql('ALTER TABLE offSales ADD COLUMN CustomerID text null');\r\n            ctx.executeSql('ALTER TABLE offSales ADD COLUMN TotalSum decimal(18,6) null');\r\n\r\n            return 'modify customers, offSales tables';\r\n        };\r\n\r\n        this.update25 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE closeRegistrySales ADD COLUMN  EndOfDayReport text null');\r\n            return 'add column to closeRegistrySales table';\r\n        };\r\n\r\n        this.update26 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN ExtraInfo text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN ExtraInfo text null');\r\n\r\n            return 'add ExtraInfo column to the Product table and to the productsSearchTemp';\r\n        };\r\n\r\n        this.update27 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanChangePrice bit not null default 0');\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanGiveDiscount bit not null default 0');\r\n\r\n            return 'added user permission fields CanChangePrice and CanGiveDiscount';\r\n        };\r\n\r\n        this.update28 = function (ctx) {\r\n            ctx.executeSql('CREATE TABLE if not exists posSatellites(POSID text not null, [Key] text not null,  [Data] text not null, PRIMARY KEY (POSID, Key)) ');\r\n\r\n            return 'added posSatellites table to save POS related data for full offline mode';\r\n        };\r\n\r\n        this.update29 = function (ctx) {\r\n            ctx.executeSql('CREATE TABLE if not exists saleTaxRules(TenantID text not null, RuleID text not null, Description text not null, Rule text not null, PRIMARY KEY (RuleID))');\r\n            return 'added sale tax rules table';\r\n        };\r\n\r\n        this.update30 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanSeeDashboard bit not null default 0');\r\n\r\n            return 'added user permission field CanSeeDashboard';\r\n        };\r\n\r\n        this.update31 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE customers ADD COLUMN IsOnCreditHold bit not null default 0');\r\n\r\n            return 'added customers field IsOnCreditHold';\r\n        };\r\n\r\n        this.update32 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN OutletSKU text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN OutletSKU text null');\r\n\r\n            return 'add OutletSKU column to the Product table and to the productsSearchTemp';\r\n        };\r\n\r\n        this.update33 = function(ctx) {\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF1 text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF2 text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF3 text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF4 text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF5 text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF6 text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF7 text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF8 text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF9 text null');\r\n            ctx.executeSql('ALTER TABLE products ADD COLUMN CF10 text null');\r\n            ctx.executeSql('CREATE index idxCF1 on products(CF1 asc)');\r\n            ctx.executeSql('CREATE index idxCF2 on products(CF2 asc)');\r\n            ctx.executeSql('CREATE index idxCF3 on products(CF3 asc)');\r\n            ctx.executeSql('CREATE index idxCF4 on products(CF4 asc)');\r\n            ctx.executeSql('CREATE index idxCF5 on products(CF5 asc)');\r\n            ctx.executeSql('CREATE index idxCF6 on products(CF6 asc)');\r\n            ctx.executeSql('CREATE index idxCF7 on products(CF7 asc)');\r\n            ctx.executeSql('CREATE index idxCF8 on products(CF8 asc)');\r\n            ctx.executeSql('CREATE index idxCF9 on products(CF9 asc)');\r\n            ctx.executeSql('CREATE index idxCF10 on products(CF10 asc)');\r\n \r\n            return 'add custom attributes to the Product table';\r\n        };\r\n\r\n        this.update34 = function(ctx) {\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF1 text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF2 text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF3 text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF4 text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF5 text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF6 text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF7 text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF8 text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF9 text null');\r\n            ctx.executeSql('ALTER TABLE productsSearchTemp ADD COLUMN CF10 text null');\r\n \r\n            return 'add custom attributes to the productsSearchTemp table';\r\n        };\r\n\r\n        this.update35 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanSeeAllSales bit not null default 0');\r\n\r\n            return 'added user permission field CanSeeAllSales';\r\n        };\r\n\r\n\r\n        this.update36 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE customers ADD COLUMN PriceTier text null');\r\n\r\n            return 'added PriceTier customers column';\r\n        };\r\n\r\n        this.update37 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanDoLayby bit not null default 0');\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanSeeStockValue bit not null default 0');\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanSeeItemValue bit not null default 0');\r\n\r\n            return 'added user permission fields CanDoLayby, CanSeeStockValue, CanSeeItemValue';\r\n        };\r\n\r\n        this.update38 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE offSales ADD COLUMN ErrorText text null');\r\n            return 'added ErrorText for offSales table';\r\n        };\r\n\r\n        this.update39 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanVoidSales bit not null default 0');\r\n\r\n            return 'added user permission fields CanVoidSales';\r\n        };\r\n\r\n        this.update40 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanSaleRep bit not null default 1');\r\n\r\n            return 'added user permission fields CanSaleRep';\r\n        };\r\n\r\n        this.update41 = function (ctx) {\r\n            ctx.executeSql('ALTER TABLE logins ADD COLUMN CanClearOfflineSales bit not null default 0');\r\n\r\n            return 'added user permission field CanClearOfflineSales';\r\n        };\r\n\r\n        this.update42 = function (ctx) {\r\n            ctx.executeSql('CREATE TABLE if not exists registryOrders(OrderID text not null, RegistryCloseID text not null, Status text not null, CreatedDate datetime not null)');\r\n\r\n            return 'add registryOrders table for order status tracking';\r\n        };\r\n\r\n        this.update43 = function (ctx) {\r\n            ctx.executeSql('CREATE TABLE if not exists orderPayments(OrderID text not null, Refunds text, Payments text, CreatedDate datetime not null)');\r\n\r\n            return 'add orderPayments table for tracking refunds and payments';\r\n        };\r\n\r\n        // all updates should be sequential without any gap\r\n        this.registeredUpdates = {\r\n            2: this.update2,\r\n            3: this.update3,\r\n            4: this.update4,\r\n            5: this.update5,\r\n            6: this.update6,\r\n            7: this.update7,\r\n            8: this.update8,\r\n            9: this.update9,\r\n            10: this.update10,\r\n            11: this.update11,\r\n            12: this.update12,\r\n            13: this.update13,\r\n            14: this.update14,\r\n            15: this.update15,\r\n            16: this.update16,\r\n            17: this.update17,\r\n            18: this.update18,\r\n            19: this.update19,\r\n            20: this.update20,\r\n            21: this.update21,\r\n            22: this.update22,\r\n            23: this.update23,\r\n            24: this.update24,\r\n            25: this.update25,\r\n            26: this.update26,\r\n            27: this.update27,\r\n            28: this.update28,\r\n            29: this.update29,\r\n            30: this.update30,\r\n            31: this.update31,\r\n            32: this.update32,\r\n            33: this.update33,\r\n            34: this.update34,\r\n            35: this.update35,\r\n            36: this.update36,\r\n            37: this.update37,\r\n            38: this.update38,\r\n            39: this.update39,\r\n            40: this.update40,\r\n            41: this.update41,\r\n            42: this.update42,\r\n            43: this.update43\r\n        };\r\n\r\n        this.appplyUpdates = function (currentVersion, tx) {\r\n            var version = currentVersion;\r\n            if (typeof tx.executeSql === 'function') {\r\n                while (this.registeredUpdates.hasOwnProperty(version + 1)) {\r\n\r\n                    var desc = this.registeredUpdates[version + 1](tx);\r\n\r\n                    version++;\r\n\r\n                    tx.executeSql(\"INSERT INTO versions (Version,Description) VALUES (\" + version + \",'\" + (!desc ? '' : desc) + \"')\");\r\n                }\r\n            }\r\n\r\n            return version;\r\n        };\r\n\r\n        this.getSchema = function () {\r\n\r\n            var settingsTable = {\r\n                name: 'settings',\r\n                columns: [\r\n                    {\r\n                        name: \"Name\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        primaryKey: true\r\n                    },\r\n                    {\r\n                        name: \"Value\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"lastModified\",\r\n                        dataType: JsStore.DATA_TYPE.DateTime,\r\n                        notNull: true,\r\n                        enableSearch: false\r\n                    }\r\n                ],\r\n                version: 2\r\n            };\r\n\r\n            var productsTable = {\r\n                name: 'products',\r\n                columns: [\r\n                    {\r\n                        name: 'ProductID',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        primaryKey: true,\r\n                        multiEntry: true\r\n                    },\r\n                    {\r\n                        name: \"ProductCode\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"OutletSKU\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Name\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Barcode\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Family\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"FamilyID\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false\r\n                    },\r\n                    {\r\n                        name: \"Category\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false\r\n                    },\r\n                    {\r\n                        name: \"CategoryID\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"DiscountName\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"DiscountID\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Price\",\r\n                        dataType: JsStore.DATA_TYPE.Number,\r\n                        notNull: true,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Option1\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Option2\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Option3\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Discounts\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Taxes\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"LoyaltyEarning\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Option1Name\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Option2Name\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Option3Name\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"ImageID\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"FamilyImageID\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Tags\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"BrandID\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"Brand\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false\r\n                    },\r\n                    {\r\n                        name: \"ProductShortDescription\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"FamilyShortDescription\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"StocktakeLocked\",\r\n                        dataType: JsStore.DATA_TYPE.Boolean,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"ProductType\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"CostingMethod\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: \"ExtraInfo\",\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    }\r\n                ],\r\n                version: 2\r\n            };\r\n\r\n            var customersTable = {\r\n                name: 'customers',\r\n                columns: [\r\n                    {\r\n                        name: 'ID',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        primaryKey: true,\r\n                        multiEntry: true\r\n                    },\r\n                    {\r\n                        name: 'Name',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false\r\n                    },\r\n                    {\r\n                        name: 'Phone',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'MobilePhone',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'Email',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'EnableLoyaltyPoints',\r\n                        dataType: JsStore.DATA_TYPE.Boolean,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'Discounts',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'MatrixDiscounts',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'Discount',\r\n                        dataType: JsStore.DATA_TYPE.Number,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'Addresses',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'Taxes',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'Account',\r\n                        dataType: JsStore.DATA_TYPE.Number,\r\n                        enableSearch: false\r\n                    },\r\n                    {\r\n                        name: 'CreditLimit',\r\n                        dataType: JsStore.DATA_TYPE.Number,\r\n                        enableSearch: false\r\n                    }\r\n                ],\r\n                version: 1\r\n            };\r\n\r\n            var saleRepresentativesTable = {\r\n                name: 'saleRepresentatives',\r\n                columns: [\r\n                    {\r\n                        name: 'ID',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        primaryKey: true //,\r\n                        //multiEntry: true\r\n                    },\r\n                    {\r\n                        name: 'Name',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'PosOutletID',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false,\r\n                        enableSearch: false\r\n                    }\r\n                ],\r\n                version: 1\r\n            };\r\n            var offlineSalesTable = {\r\n                name: 'offSales',\r\n                version: 3,\r\n                columns: [\r\n                    {\r\n                        name: 'PosName',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'SaleID',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        primaryKey: true,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'StatusID',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'Packed',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'InfoPacked',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'lastModified',\r\n                        dataType: JsStore.DATA_TYPE.DateTime,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'OperationID',\r\n                        dataType: JsStore.DATA_TYPE.String\r\n                    },\r\n                    {\r\n                        name: 'CustomerID',\r\n                        dataType: JsStore.DATA_TYPE.String\r\n                    },\r\n                    {\r\n                        name: 'TotalSum',\r\n                        dataType: JsStore.DATA_TYPE.Number\r\n                    },\r\n                    {\r\n                        name: 'ErrorText',\r\n                        dataType: JsStore.DATA_TYPE.String\r\n                    },\r\n                ],\r\n                version: 1\r\n            }\r\n\r\n            var productsSearchTempTable = angular.copy(productsTable);\r\n            productsSearchTempTable.name = \"productsSearchTemp\";\r\n\r\n            angular.forEach(productsSearchTempTable.columns, function (c) {\r\n                if (c.name === 'Category' || c.name === 'Brand') {\r\n                    c.enableSearch = false;\r\n                }\r\n            });\r\n\r\n            var registryOrdersTable = {\r\n                name: 'registryOrders',\r\n                columns: [\r\n                    {\r\n                        name: 'OrderID',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'RegistryCloseID',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'Status',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'CreatedDate',\r\n                        dataType: JsStore.DATA_TYPE.DateTime,\r\n                        notNull: true\r\n                    }\r\n                ]\r\n            };\r\n\r\n            var dbVersionTable = {\r\n                name: 'dbVersion',\r\n                columns: [\r\n                    {\r\n                        name: 'version',\r\n                        dataType: JsStore.DATA_TYPE.Number,\r\n                        notNull: true\r\n                    }\r\n                ],\r\n                version: 1\r\n            };\r\n\r\n            var orderPaymentsTable = {\r\n                name: 'orderPayments',\r\n                columns: [\r\n                    {\r\n                        name: 'OrderID',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: true\r\n                    },\r\n                    {\r\n                        name: 'Refunds',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false\r\n                    },\r\n                    {\r\n                        name: 'Payments',\r\n                        dataType: JsStore.DATA_TYPE.String,\r\n                        notNull: false\r\n                    },\r\n                    {\r\n                        name: 'CreatedDate',\r\n                        dataType: JsStore.DATA_TYPE.DateTime,\r\n                        notNull: true\r\n                    }\r\n                ]\r\n            };\r\n\r\n            var res = {\r\n                name: 'crddb',\r\n                tables:\r\n                    [\r\n                        settingsTable,\r\n                        productsTable,\r\n                        customersTable,\r\n                        saleRepresentativesTable,\r\n                        offlineSalesTable,\r\n                        registryOrdersTable,\r\n                        dbVersionTable,\r\n                        orderPaymentsTable\r\n                    ],\r\n                version: 5,\r\n                canMigrateData: true\r\n            };\r\n\r\n            return res;\r\n        };\r\n    }]);","import {DeliveryHelper} from '../../TypePosScripts/Delivery/DeliveryHelper';\r\nimport {Calendar} from '@fullcalendar/core'\r\nimport dayGridPlugin from '@fullcalendar/daygrid';\r\n\r\nangular.module(\"mainApp\").controller('deliveryCalendarController',\r\n    ['$rootScope', '$scope', 'constants', 'loginService',\r\n        '$timeout', 'errorService', 'gettextCatalog', 'helperService',\r\n        '$locale', 'configService', '$location', '$templateCache', '$compile', '$element',\r\n        function ($rootScope, $scope, constants, loginService,\r\n            $timeout, errorService, gettextCatalog, helperService,\r\n            $locale, configService, $location, $templateCache, $compile, $element) {\r\n\r\n            $scope.showCompleted = true;\r\n            $scope.setStatuses = function() {\r\n                return $scope.showCompleted ? 'Pending,InTransit,Delivered': 'Pending,InTransit';\r\n            };\r\n\r\n            $scope.searchFilter = {\r\n                status: $scope.setStatuses()\r\n             };\r\n\r\n            $scope.$watch('showCompleted',function (newValue, oldValue) {\r\n                if (newValue != oldValue) {\r\n                    $scope.calendar.refetchEvents();\r\n                }\r\n            });\r\n\r\n            $scope.calendar = null;\r\n\r\n            $scope.deliveryHelper = DeliveryHelper.CreateDeliveryHelper(); // must be destoyed when controller goes away\r\n\r\n            $scope.processParams = function() {\r\n                // get filer\r\n                var cs = window.localStorage.getItem('fullCalendarFilters');\r\n                window.localStorage.removeItem('fullCalendarFilters');\r\n                $scope.searchFilter = cs ? JSON.parse(cs) : {};\r\n                if(!$scope.searchFilter)\r\n                    $scope.searchFilter = {};\r\n\r\n                // and clear\r\n                window.localStorage.removeItem('fullCalendarFilters');\r\n\r\n                if($scope.searchFilter.toDate)\r\n                    $scope.searchFilter.toDate = new Date($scope.searchFilter.toDate);\r\n                if($scope.searchFilter.fromDate)\r\n                    $scope.searchFilter.fromDate = new Date($scope.searchFilter.fromDate);\r\n            };\r\n\r\n            $scope.firstTime = true;\r\n\r\n            $scope.loadData = function() {\r\n                $scope.processParams();\r\n\r\n                if($scope.firstTime) {\r\n                    $scope.firstTime = false;\r\n                    var SCOPE = $scope;\r\n                    var calendarEl = document.getElementById('fullCalendar');\r\n                    $scope.calendar = new Calendar(calendarEl, {\r\n                        plugins: [dayGridPlugin],\r\n                        initialView: 'dayGridMonth',\r\n                        firstDay: 1,\r\n                        dayMaxEventRows: 3,\r\n                        events: $scope.loadCalendar,\r\n                        visibleRange: {\r\n                            start: $scope.searchFilter.fromDate,\r\n                            end: $scope.searchFilter.toDate\r\n                        },\r\n                        eventClick: function(info) {\r\n                            SCOPE.gotoDeliveryList(info);\r\n                        },\r\n                        viewDidMount: function(evt) {\r\n                            var toolbar = $('#fullCalendar .fc-toolbar-chunk:last-child');\r\n                            var tpl = $templateCache.get('calendarToolbar');\r\n                            var el = $compile(tpl)(SCOPE);\r\n                            toolbar.prepend(el);\r\n                        },\r\n                    });\r\n\r\n                    $scope.calendar.render();\r\n\r\n                    if ($('.fc-today-button.fc-button.fc-button-primary').length > 0) {\r\n                        $('.fc-today-button.fc-button.fc-button-primary').addClass('btn btn-small btn-primary-outline');\r\n                    }\r\n\r\n                    if ($('.fc-prev-button.fc-button.fc-button-primary').length > 0 && $('.fc-next-button.fc-button.fc-button-primary').length > 0) {\r\n                        $('.fc-prev-button.fc-button.fc-button-primary').addClass('btn btn-small btn-primary-outline');\r\n                        $('.fc-next-button.fc-button.fc-button-primary').addClass('btn btn-small btn-primary-outline');\r\n                    }\r\n\r\n                } else {\r\n                    $scope.calendar.refetchEvents();\r\n                    $scope.calendar.render();\r\n                }\r\n            };\r\n\r\n            $scope.$on('deliveryCalendar.show', function (event, data) {\r\n\r\n                helperService.showDialog($element, function () {\r\n                    $timeout(function () {\r\n                        $scope.loadData();\r\n                    }, 0);\r\n                });\r\n            });\r\n\r\n            $scope.$on(\"$destroy\", function () {\r\n                delete $scope.deliveryHelper;\r\n            });\r\n\r\n            $scope.loadCalendar = function (prms, successCallback, failCallback) {\r\n                   // load data for\r\n                var flt = angular.copy($scope.searchFilter);\r\n                   flt.fromDate = prms.start;\r\n                   flt.toDate = prms.end;\r\n                   flt.status = $scope.setStatuses();\r\n\r\n                   $.blockUI();\r\n                   $scope.deliveryHelper.loadDeliveries(1,\r\n                                10000,\r\n                                flt)\r\n                       .then(function (resp) {\r\n\r\n                           $.unblockUI();\r\n                           return $scope.deliveryHelper.prepareCalendarData(resp.Rows);\r\n                       })\r\n                       .then(function (res) {\r\n                        successCallback(res);\r\n                       })\r\n                       .catch(function (err) {\r\n                           $.unblockUI();\r\n                           failCallback();\r\n                           errorService.showError(err);\r\n                       });\r\n            };\r\n\r\n            $scope.gotoDeliveryList = function(info) {\r\n                helperService.closeDialog('#deliveryCalendarPage');\r\n                helperService.closeDialog('#deliveryDialogModel');\r\n\r\n                $timeout(function(){\r\n                    var filter = {\r\n                        fromDate: info.event.start\r\n                    };\r\n\r\n                    // save filter\r\n                    window.localStorage.setItem('deliveryFilters', JSON.stringify(filter));\r\n                    // $location.path( \"/delivery\" );\r\n                    $rootScope.$broadcast('delivery.reload');\r\n                });\r\n            };\r\n        }\r\n    ]\r\n);","import {DeliveryHelper} from '../../TypePosScripts/Delivery/DeliveryHelper';\r\nimport Enumerable from 'linq';\r\n\r\nangular.module(\"mainApp\").controller('deliveryController',\r\n    ['$rootScope', '$scope', 'constants', 'loginService',\r\n        '$timeout', 'errorService', 'gettextCatalog', 'helperService',\r\n        '$locale', 'stockTakeService', 'soundService', '$location',\r\n        function ($rootScope, $scope, constants, loginService,\r\n            $timeout, errorService, gettextCatalog, helperService, \r\n            $locale, stockTakeService, soundService, $location) {\r\n\r\n            $scope.currentFilter = {\r\n                fromDate: helperService.getFormatedDate2(new Date()),\r\n                toDate: helperService.getFormatedDate2(new Date()),\r\n                outletID: '0',\r\n                status: 'Pending', // can be Pending\r\n                searchText:''\r\n            };\r\n\r\n            $scope.selectedPage = 1;\r\n            $scope.totalPages = 1;\r\n            $scope.itemsByPage = 50;\r\n            $scope.totalRecords = 0;\r\n            $scope.cantExport = false; // always we can //configService.isMobile === true;\r\n            $scope.searchText = '';\r\n\r\n            $scope.data = [];\r\n\r\n            $scope.deliveryHelper = DeliveryHelper.CreateDeliveryHelper(); // must be destoyed when controller goes away\r\n\r\n            $rootScope.$broadcast('header.setCurrentView', {\r\n                viewName: constants.constDeliveryViewName\r\n            }); // to hide sidebar details\r\n\r\n            if (!loginService.isLoggedIn()) {\r\n                helperService.goToHomePage();\r\n                return;\r\n            }\r\n\r\n            $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n            $scope.getDateByFormat = helperService.getDateByFormat;\r\n\r\n            $scope.raiseViewChanged = function () {\r\n                $timeout(function () {\r\n                    $rootScope.$broadcast('view.loaded');\r\n                });\r\n            };\r\n\r\n            $scope.onLoad = function () {\r\n                $scope.scrollEvent();\r\n                $scope.processParams();\r\n                $.blockUI();\r\n                return helperService.resolvePromise(true)\r\n                    .then(function () {\r\n                        initSelects();\r\n                        return helperService.resolvePromise(true);\r\n                    })\r\n                    .then(function () {\r\n                        $('input, select').trigger('refresh');\r\n                        return helperService.resolvePromise(true);\r\n                    })\r\n                    .then(function () {\r\n                        return stockTakeService.loadUserAvailableOutletsAndRegistries();\r\n                    })\r\n                    .then(function (res) {\r\n                        if (res.data.singleLocation === true) {\r\n                            $scope.locations = res.data.locations;\r\n                            if ($scope.locations.length > 0)\r\n                                $scope.currentFilter.outletID = $scope.locations[0].PosOutletID;\r\n                        } else {\r\n                            $scope.locations = [{\r\n                                PosOutletID: '0',\r\n                                OutletName: gettextCatalog.getString('All outlets')\r\n                            }].concat(res.data.locations);\r\n                        }\r\n                        return helperService.resolvePromise(true);\r\n                    })\r\n                    .then(function () {\r\n                        return $scope.search(); // load data in according with default filter\r\n                    })\r\n                    .then(function(){\r\n                        $.unblockUI();\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    })\r\n                    .finally(function () {\r\n                        var SCOPE = $scope;\r\n                        $timeout(function () {\r\n                            $('input, select').trigger('refresh');\r\n                        });\r\n                    });\r\n            };\r\n\r\n            $scope.$on(\"delivery.reload\", function () {\r\n                $scope.onLoad();\r\n            });\r\n\r\n            $scope.$watch('currentFilter', function (newVal, oldVal) {\r\n                var nv = angular.copy(newVal);\r\n                delete nv.limit;\r\n                delete nv.page;\r\n                var ov = angular.copy(oldVal);\r\n                delete ov.limit;\r\n                delete ov.page;\r\n                if (angular.equals(nv, ov) !== true)\r\n                    $scope.search();\r\n            }, true);\r\n\r\n            $scope.searchPress = function (event) {\r\n                if (event.which === 13) {\r\n                    $scope.currentFilter.searchText = $scope.searchText;\r\n                }\r\n            };\r\n\r\n            $scope.blur = function(){\r\n                $scope.currentFilter.searchText = $scope.searchText;\r\n            };\r\n\r\n            $scope.$on(\"$destroy\", function () {\r\n                delete $scope.deliveryHelper;\r\n            });\r\n\r\n\r\n            $scope.scrollReachBottomCallback = function (isNewSearch) {\r\n                var SCOPE = $scope;\r\n\r\n                if(!isNewSearch) {\r\n                    if ($scope.selectedPage < $scope.totalPages) {\r\n                        $scope.selectedPage++;\r\n                    } else {\r\n                        return helperService.resolvePromise(true);\r\n                    }\r\n                }\r\n\r\n                var cpy = angular.copy($scope.currentFilter);\r\n\r\n                // fix current filter. set location id\r\n                if($scope.currentFilter.outletID === '0') {\r\n                    cpy.LocationID = '0';\r\n                } else {\r\n                    cpy.LocationID = $scope.getLocationID($scope.currentFilter.outletID);\r\n                }\r\n                    \r\n                $.blockUI();\r\n                return this.deliveryHelper.loadDeliveries(\r\n                             (isNewSearch ? 1 : $scope.selectedPage),\r\n                             $scope.itemsByPage,\r\n                             cpy)\r\n                    .then(function (resp) {\r\n\r\n                        if (isNewSearch) {\r\n                            SCOPE.selectedPage = 1;\r\n                            SCOPE.totalPages = 1;\r\n                            SCOPE.totalRecords = 0;\r\n                            SCOPE.data = [];\r\n                        }\r\n\r\n                        $.each(resp.Rows, function (idx, el) {\r\n                            SCOPE.formatRow(el);\r\n                            SCOPE.data.push(el);\r\n                        });\r\n\r\n                        SCOPE.getPages(resp.Total);\r\n                        $.unblockUI();\r\n                        return helperService.resolvePromise(true);\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            $scope.getPages = function (total) {\r\n                $scope.ordersTotal = total;\r\n                var step = $scope.itemsByPage;\r\n                $scope.totalPages = Math.ceil(total / step);\r\n                $scope.totalRecords = total;\r\n                if ($scope.totalPages === 0) {\r\n                    $scope.totalPages = 1;\r\n                }\r\n            };\r\n\r\n            $scope.getLocationID = function(outletID) {\r\n                var d = Enumerable.from($scope.locations)\r\n                .where(function(d) {return d.PosOutletID === outletID;})\r\n                .select(function(d) {return d.LocationID;})\r\n                .firstOrDefault();\r\n\r\n                return d;\r\n            };\r\n\r\n            // Search data by changed filter\r\n            $scope.search = function () {\r\n                return $scope.scrollReachBottomCallback(true);\r\n            };\r\n\r\n            $scope.dateSelectedCallback = function (from, to) {\r\n                $scope.currentFilter.fromDate = from;\r\n                $scope.currentFilter.toDate = to;\r\n            };\r\n\r\n            $scope.formatRow = function (row) {\r\n                var rtm = helperService.getFormatedLocalDateTime(row.StatusDate);\r\n                row.FormattedDate = rtm.date;\r\n                row.FormattedTime = helperService.formatTime(rtm.time);\r\n                if(row.VoidDate) {\r\n                    rtm = helperService.getFormatedLocalDateTime(row.VoidDate);\r\n                    row.FormattedVoidDate = rtm.date;\r\n                }\r\n            };\r\n\r\n            $scope.deactivateSchedule = function(row) {\r\n                /** cancel  */\r\n                $scope.dialogMode = 'cancelDelivery';\r\n                $scope.currentRow = row;\r\n\r\n                helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                        gettextCatalog.getString('Delivery task will be cancelled. Would you like to continue?'),\r\n                        gettextCatalog.getString('Yes, cancel'),\r\n                        gettextCatalog.getString('No'));\r\n                return false;\r\n            };\r\n\r\n            $scope.changeDeliveryStatus = function(row) {\r\n                /** complete */\r\n                $scope.dialogMode = 'completeDelivery';\r\n                $scope.currentRow = row;\r\n\r\n                helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                        gettextCatalog.getString('Delivery task will be completed. Would you like to continue?'),\r\n                        gettextCatalog.getString('Yes, complete'),\r\n                        gettextCatalog.getString('No'));\r\n\r\n                return false;\r\n            };\r\n\r\n            /** edit delivery */\r\n            $scope.editRow = function(row){\r\n                $rootScope.$broadcast('deliveryDialog.show', \r\n                { \r\n                    sale: {\r\n                        ID: row.EntityID\r\n                    }, \r\n                    addNew: false\r\n                });\r\n            };\r\n\r\n            $scope.print = function(){\r\n                $.blockUI();\r\n                return this.deliveryHelper.printDeliveries($scope.currentFilter)\r\n                    .then(function (resp) {\r\n                        $.unblockUI();\r\n\r\n                        // returned data to pdf\r\n                        return helperService.printPdfReport(resp, 'DeliveryReport.pdf');\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            $scope.CompleteDeliveryTask = function(taskID, locationID) {\r\n                $.blockUI();\r\n\r\n                return this.deliveryHelper.UpdateDeliveryTaskStatus(taskID, locationID, 'Completed')\r\n                .then(function(){\r\n                    $.unblockUI();\r\n                    var msg = gettextCatalog.getString(\"Delivery task was completed.\");\r\n                    $rootScope.$broadcast('snackbar.show', {\r\n                        message: msg\r\n                    });\r\n                    soundService.playGood();\r\n                    return $scope.search();\r\n                })\r\n                .catch(function (err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n            };\r\n\r\n            $scope.CancelDeliveryTask = function(taskID, locationID) {\r\n                $.blockUI();\r\n                return this.deliveryHelper.UpdateDeliveryTaskStatus(taskID, locationID, 'Void')\r\n                .then(function(){\r\n                    $.unblockUI();\r\n                    var msg = gettextCatalog.getString(\"Delivery task was cancelled.\");\r\n                    $rootScope.$broadcast('snackbar.show', {\r\n                        message: msg\r\n                    });\r\n                    soundService.playGood();\r\n                    return $scope.search();\r\n                })\r\n                .catch(function (err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n            };\r\n\r\n            $scope.processParams = function() {\r\n                // get filer\r\n                var cs = window.localStorage.getItem('deliveryFilters');\r\n                window.localStorage.removeItem('deliveryFilters');\r\n\r\n                if(cs) {\r\n                    var flt = JSON.parse(cs);\r\n                    if(flt){\r\n\r\n                        if(flt.fromDate)\r\n                            flt.fromDate = new Date(flt.fromDate);\r\n                        else\r\n                            flt.fromDate = new Date();\r\n\r\n                        // and clear\r\n                        window.localStorage.setItem('deliveryFilters', null);\r\n\r\n                        $scope.currentFilter = {\r\n                            fromDate: helperService.getFormatedDate2(flt.fromDate),\r\n                            toDate: helperService.getFormatedDate2(flt.fromDate),\r\n                            outletID: '0',\r\n                            status: 'Pending'\r\n                        };\r\n                    }\r\n                }\r\n            };\r\n\r\n            $scope.scrollEvent = function() {\r\n                var SCOPE = $scope;\r\n                var $this = angular.element(document.querySelector('.flex-body'));\r\n                    $this.bind('scroll', function() {\r\n                        if($this.scrollTop() + $this.innerHeight() >= $this[0].scrollHeight) {\r\n                            console.log('end reached');\r\n                            SCOPE.scrollReachBottomCallback();\r\n                        }\r\n                    });\r\n            };\r\n\r\n            $scope.dialogMode = '';\r\n            $scope.currentRow = null;\r\n            $scope.callbackModal = function () {\r\n                var mode = $scope.dialogMode;\r\n                var row =  $scope.currentRow;\r\n\r\n                $scope.dialogMode = '';\r\n                $scope.currentRow = null;\r\n                if (mode === 'completeDelivery') {\r\n                    $scope.CompleteDeliveryTask(row.TaskID, row.LocationID);\r\n                } else if(mode === 'cancelDelivery') {\r\n                    $scope.CancelDeliveryTask(row.TaskID, row.LocationID);\r\n                }\r\n\r\n            };\r\n\r\n            $scope.fullCalendar = function() {\r\n                // get minimal date for pending items\r\n                var dt = new Date();\r\n                var start = new Date(dt.getFullYear(), dt.getMonth(), 1, 0, 0, 0);\r\n                var end = new Date(dt.getFullYear(), dt.getMonth() + 1, 1, 23, 59, 59);\r\n                var filter = {\r\n                    fromDate: start,\r\n                    toDate: end,\r\n                };\r\n                window.localStorage.setItem('fullCalendarFilters', JSON.stringify(filter));\r\n\r\n                $rootScope.$broadcast('deliveryCalendar.show');\r\n\r\n                // save filter\r\n                // $location.path( \"/deliveryCalendar\" );\r\n            };\r\n\r\n        }\r\n    ]\r\n);","import {DeliveryHelper} from '../../TypePosScripts/Delivery/DeliveryHelper';\r\nimport Enumerable from 'linq';\r\n\r\nangular.module(\"mainApp\").controller('deliveryDialogController',\r\n    ['$scope', '$rootScope', 'configService', 'errorService', 'helperService',\r\n        '$element', 'constants', '$timeout', 'gettextCatalog', 'keyPressDelayService', '$filter',\r\n        'productsService', '$location', 'soundService', '$locale', 'webOnlyProvider', 'uuid2',\r\n        function ($scope, $rootScope, configService, errorService, helperService,\r\n            $element, constants, $timeout, gettextCatalog, keyPressDelayService, $filter, productsService,\r\n            $location, soundService, $locale, webOnlyProvider, uuid2Service) {\r\n\r\n            $scope.dateFormat = helperService.getDateByFormatForMoment();\r\n            $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n            $scope.isContact = true;\r\n            $scope.mode = 'add'; // may be 'edit'\r\n            $scope.caption = '';\r\n            $scope.sale = null;\r\n            $scope.customer = null;\r\n            $scope.deliveryHelper = DeliveryHelper.CreateDeliveryHelper(); // must be destoyed when controller goes away\r\n            $scope.deliveryInterval = configService.deliveryTimeInterval;\r\n            $scope.firstAddFormShow = true;\r\n\r\n            /** form field models */\r\n            $scope.form = {\r\n                customerName: null,\r\n                customerID:  null,\r\n                contactName: null,\r\n                contactID: null,\r\n                phone: null,\r\n                mobilePhone: null,\r\n                email: null,\r\n                addressID: null,\r\n                addressLine1: null,\r\n                addressLine2: null,\r\n                city: null,\r\n                state: null,\r\n                country: null,\r\n                postCode: null,\r\n                deliveryCurrentTime: 0,\r\n                deliveryCurrentRow: null,\r\n                deliveryItems: []\r\n            };\r\n\r\n            $scope.clearDelivery = function(){\r\n                $scope.form.customerName = null;\r\n                $scope.form.customerID =  null;\r\n                $scope.form.deliveryItems = [];\r\n                $scope.clearContact();\r\n                $scope.clearAddress();\r\n            };\r\n\r\n            $scope.clearAddress = function() {\r\n                $scope.form.addressID = null;\r\n                $scope.form.addressLine1 = null;\r\n                $scope.form.addressLine2 = null;\r\n                $scope.form.city = null;\r\n                $scope.form.state = null;\r\n                $scope.form.country = null;\r\n                $scope.form.postCode = null;\r\n            };\r\n\r\n            $scope.clearContact = function() {\r\n                $scope.form.contactName = null;\r\n                $scope.form.contactID = null;\r\n                $scope.form.phone = null;\r\n                $scope.form.mobilePhone = null;\r\n                $scope.form.email = null;\r\n            };\r\n\r\n            $scope.deliveryTimes = [];\r\n            $scope.contacts = [];\r\n            $scope.addresses = [];\r\n\r\n            $scope.generateTime = function(dtStr) {\r\n                $scope.deliveryTimes = $scope.deliveryHelper.generateTime(dtStr);\r\n            };\r\n\r\n            $scope.selectTimeList = false;\r\n            $scope.selectTime = function(id, row) {\r\n                if(row.TaskStatus === 'Completed' || row.TaskStatus === 'Void') return; \r\n\r\n                var el = $('#'+id);\r\n                $('#timePicker').css({\r\n                    top: el[0].offsetTop - 154,\r\n                    left: el[0].offsetLeft\r\n                });\r\n\r\n                try {\r\n                    $scope.form.deliveryCurrentTime = row.DeliveryTime;\r\n                    $scope.form.deliveryCurrentRow = row;\r\n                    $scope.generateTime(row.DeliveryDate);\r\n                    if($scope.deliveryTimes.length > 0) {\r\n                        $scope.selectTimeList = true;\r\n                    }\r\n                } catch(ex){\r\n                    errorService.showError(ex);\r\n                }\r\n            };\r\n\r\n            $scope.setTime = function(value) {\r\n                if(value!=$scope.form.deliveryCurrentRow.DeliveryTime) {\r\n                    $scope.form.deliveryCurrentRow.DeliveryTime = value;\r\n                    $scope.form.deliveryCurrentRow.DeliveryTimeDisplay = helperService.formatTime(value);\r\n                    $scope.form.deliveryCurrentRow.TaskID = null;\r\n                    $scope.form.deliveryCurrentRow.DeliveryNumber = null;\r\n                    $scope.form.deliveryCurrentRow = null;\r\n                }\r\n\r\n                $scope.selectTimeList = false;\r\n            };\r\n\r\n            $scope.$on(\"time-selector.hide\", function () {\r\n                $scope.form.deliveryCurrentRow = null;\r\n                $scope.selectTimeList = false;\r\n            });\r\n\r\n            // show dialog, get some initial data from delivery if required\r\n            $scope.$on('deliveryDialog.show', function (event, data) {\r\n                $scope.sale = data.sale;\r\n                $scope.caption = gettextCatalog.getString('Schedule delivery');\r\n                $scope.clearDelivery();\r\n\r\n                helperService.showDialog($element, function () {\r\n                    $timeout(function () {\r\n                        $scope.loadData();\r\n                    }, 2);\r\n                });\r\n\r\n                $scope.generateTime();\r\n            });\r\n\r\n            $scope.$on(\"$destroy\", function () {\r\n                delete $scope.deliveryHelper;\r\n            });\r\n\r\n            $scope.cancelDialog = function () {\r\n                helperService.closeDialog($element);\r\n                if($scope.wasSaved) {\r\n                    $scope.wasSaved = false;\r\n\r\n                    $rootScope.$broadcast('deliveryDialog.closed', \r\n                    { \r\n                        sale: $scope.sale.ID\r\n                    });\r\n                }\r\n            };\r\n\r\n            $scope.loadData = function(){\r\n                $.blockUI();\r\n\r\n                // first, try to find and load delivery by ID\r\n                return $scope.deliveryHelper.loadDeliveryBySaleOrder($scope.sale)\r\n                .then(function(res) {\r\n\r\n                    $scope.form.deliveryItems = res.DeliveryItems;\r\n\r\n                    // also isNew flag will be set here\r\n                    $scope.mode = res.IsNew ? 'add' : 'edit';\r\n                    var editDeliveryCaption = 'Schedule Delivery';\r\n\r\n                    if(!res.IsNew) {\r\n                        $scope.form.customerID = res.CustomerID;\r\n                        $scope.form.customerName = res.CustomerName;\r\n                        $scope.fillContactObject(res.ContactDetails);\r\n                        $scope.fillAddressObject(res.ShipAddressDetails);\r\n\r\n                        editDeliveryCaption = 'Schedule Delivery for ' + res.CustomerName;\r\n                    } else if($scope.sale.customer){\r\n                        $scope.processCustomerData($scope.sale.customer);\r\n                    }\r\n\r\n                    $scope.caption = res.IsNew ?\r\n                        gettextCatalog.getString('Schedule delivery') :\r\n                        gettextCatalog.getString(editDeliveryCaption);\r\n\r\n                    $.unblockUI();\r\n                    $scope.updateControls();\r\n                })\r\n                .then(function(){\r\n                    var datePickerFormat = helperService.getDateByFormatForDatePickers();\r\n                    for(var idx = 0; idx<$scope.form.deliveryItems.length; idx++) {\r\n                        $scope.form.deliveryItems[idx].DeliveryDateOld = $scope.form.deliveryItems[idx].DeliveryDate;\r\n                        helperService.setDatepicker(datePickerFormat, '#deliveryDate_'+idx, null, 1,\r\n                                    $scope.clearTime, $scope.form.deliveryItems[idx]);\r\n                    }\r\n\r\n                    $('.scopeID').focus();\r\n                })\r\n                .catch(function (err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n            };\r\n\r\n            $scope.clearTime = function(obj) {\r\n                if(obj.DeliveryDateOld != obj.DeliveryDate) {\r\n                    $timeout(function(){\r\n                        obj.DeliveryTimeDisplay = null;\r\n                        obj.DeliveryTime = null;\r\n                        obj.DeliveryNumber = null;\r\n                        obj.TaskID = null;\r\n                        obj.DeliveryDateOld = obj.DeliveryDate;\r\n                    });\r\n                }\r\n            };\r\n\r\n            $scope.updateControls = function() {\r\n                $timeout(function() { \r\n                    if ($scope.firstAddFormShow) {\r\n                        $scope.firstAddFormShow = false;\r\n    \r\n                        initSelects();\r\n                    } else {\r\n                        $('input, select').trigger('refresh');\r\n                    }\r\n                }, 0);\r\n            };\r\n    \r\n            $scope.addCustomer = function () {\r\n                if ($scope.mode === 'add') {\r\n                    var customer = $scope.customer;\r\n\r\n                    $rootScope.$broadcast('addCustomer.show', {\r\n                        mode: 'search'\r\n                    });\r\n                }\r\n            };\r\n\r\n            $scope.fillContactObject = function(contact) {\r\n                if(contact) {\r\n                    $scope.form.contactName = contact.Name;\r\n                    $scope.form.contactID = !contact.ID ? contact.ContactID : contact.ID;\r\n                    $scope.form.phone = contact.Phone;\r\n                    $scope.form.mobilePhone = contact.MobilePhone;\r\n                    $scope.form.email = contact.Email;   \r\n                }\r\n            };\r\n\r\n            $scope.fillAddressObject = function(address) {\r\n                if(address) {\r\n                    $scope.form.addressID = !address.ID ? address.AddressID : address.ID;\r\n                    $scope.form.addressLine1 = address.Line1;\r\n                    $scope.form.addressLine2 = address.Line2;\r\n                    $scope.form.city = !address.City ? address.CitySuburb : address.City;\r\n                    $scope.form.state = !address.State ? address.StateProvince: address.State;\r\n                    $scope.form.country = address.Country;\r\n                    $scope.form.postCode = !address.Postcode ? address.ZipPostCode : address.Postcode;\r\n                }\r\n            };\r\n\r\n            $scope.fillAddress = function(id) {\r\n                if($scope.customer && $scope.mode === 'add') {\r\n                    var address = Enumerable.from($scope.customer.Addresses)\r\n                    .where(function(x) {return x.ID === id;})\r\n                    .firstOrDefault();\r\n\r\n                    $scope.clearAddress();\r\n                    $scope.fillAddressObject(address);\r\n                }\r\n            };\r\n\r\n            $scope.fillContact = function(id) {\r\n                if($scope.customer && $scope.mode === 'add') {\r\n                    var contact = Enumerable.from($scope.customer.Contacts)\r\n                    .where(function(x) {return x.ID === id;})\r\n                    .firstOrDefault();\r\n\r\n                    $scope.clearContact();\r\n                    $scope.fillContactObject(contact);\r\n                }\r\n            };\r\n\r\n            $scope.$watch(\"form.contactID\", function(newVal, oldVal){\r\n                if(newVal && newVal != oldVal) {\r\n                    $scope.fillContact(newVal);\r\n                }\r\n            });\r\n    \r\n\r\n            $scope.$watch(\"form.addressID\", function(newVal, oldVal){\r\n                if(newVal && newVal != oldVal) {\r\n                    $scope.fillAddress(newVal);\r\n                }\r\n            });\r\n\r\n            $scope.processCustomerData = function(customer) {\r\n                $scope.customer = customer;\r\n                $scope.form.customerID = $scope.customer.ID;\r\n                $scope.form.customerName = $scope.customer.Name;\r\n\r\n                // fill in address\r\n                $scope.clearAddress();\r\n\r\n                if($scope.customer && $scope.customer.Addresses) {\r\n                    $scope.addresses = Enumerable.from($scope.customer.Addresses)\r\n                             .orderBy(function (x) { \r\n                                 var order = 0;\r\n                                 switch(x.Type) {\r\n                                    case 'Shipping':\r\n                                        order+=10;\r\n                                        break;\r\n                                    case 'Billing':\r\n                                        order+=20;\r\n                                        break;\r\n                                    case 'Business':\r\n                                        order+=30;\r\n                                        break;\r\n                                }\r\n\r\n                                if(!x.DefaultForType) order++;\r\n                                return order; \r\n                             }).orderBy(function(x){return x.Type;}).toArray();\r\n\r\n                    var arr = $scope.addresses.filter(function(x){return x.Type === 'Shipping';});\r\n\r\n                    if(arr.length > 0)\r\n                        $scope.addresses = arr;\r\n                    if($scope.addresses.length > 0)\r\n                        $scope.fillAddress($scope.addresses[0].ID);\r\n                }\r\n\r\n                if($scope.customer && $scope.customer.Contacts) {\r\n                    $scope.clearContact();\r\n                    $scope.contacts = Enumerable.from($scope.customer.Contacts)\r\n                                        .orderByDescending(function (x) { return x.Default;})\r\n                                        .select(function(x) {return  { Name: x.Name, ID: x.ID};})\r\n                                        .toArray();\r\n\r\n                    if($scope.contacts.length > 0) {\r\n                        if ($scope.customer.SelectedContact)\r\n                            $scope.fillContact($scope.customer.SelectedContact.ID);\r\n                        else\r\n                            $scope.fillContact($scope.contacts[0].ID);\r\n                    }\r\n                }\r\n\r\n                $scope.updateControls();\r\n            };\r\n\r\n            $scope.$on('addCustomer.selected', function (event, data) {\r\n                let customer = data.customer;\r\n                customer.SelectedContact = null;\r\n\r\n                let searchCustomerText = $('#searchCustomerText').val();\r\n\r\n                if (data.customer && data.customer.Contacts && data.customer.Contacts.length > 0) {\r\n                    searchCustomerText = !!searchCustomerText ? searchCustomerText.toLowerCase().trim() : '';\r\n                    const email = !!data.email ? data.email : '';\r\n\r\n                    const foundContact = data.customer.Contacts.find(temp => (!!temp.Email && temp.Email.toLowerCase() === email) ||\r\n                        (!!temp.Email && temp.Email.toLowerCase() === searchCustomerText) ||\r\n                        (!!temp.Phone && temp.Phone.toLowerCase() === searchCustomerText) ||\r\n                        (!!temp.MobilePhone && temp.MobilePhone.toLowerCase() === searchCustomerText));\r\n\r\n                    if (foundContact)\r\n                        customer.SelectedContact = foundContact;\r\n                    else {\r\n                        const defaultContact = data.customer.Contacts.find(temp => (!!temp.Email && temp.IncludeInEmail));\r\n                        if (defaultContact)\r\n                            customer.SelectedContact = defaultContact;\r\n                        else\r\n                            customer.SelectedContact = data.customer.Contacts[0];\r\n                    }\r\n                }\r\n                $scope.processCustomerData(customer);\r\n                return helperService.resolvePromise(true);\r\n            });\r\n\r\n            $scope.Save = function() {\r\n               // fill deliveryHelper.currentDelivery object with new values\r\n               var delivery = $scope.deliveryHelper.currentDelivery;\r\n\r\n               // common info\r\n               if(!delivery.DeliveryID) delivery.DeliveryID = uuid2Service.newguid();\r\n               delivery.CustomerID = $scope.form.customerID;\r\n               delivery.CustomerName = $scope.form.customerName;\r\n\r\n               // contact\r\n               delivery.ContactDetails.ContactID = $scope.form.contactID;\r\n               if(!delivery.ContactDetails.ContactID)\r\n                    delivery.ContactDetails.ContactID = '00000000-0000-0000-0000-000000000000';\r\n               delivery.ContactDetails.Name = $scope.form.contactName;\r\n               delivery.ContactDetails.Email = $scope.form.email;\r\n               delivery.ContactDetails.Phone = $scope.form.phone;\r\n               delivery.ContactDetails.MobilePhone = $scope.form.mobilePhone;\r\n\r\n               // address\r\n               delivery.ShipAddressDetails.AddressID = $scope.form.addressID;\r\n               if(!delivery.ShipAddressDetails.AddressID)\r\n                    delivery.ShipAddressDetails.AddressID = '00000000-0000-0000-0000-000000000000';\r\n               delivery.ShipAddressDetails.Line1 = $scope.form.addressLine1;\r\n               delivery.ShipAddressDetails.Line2 = $scope.form.addressLine2;\r\n               delivery.ShipAddressDetails.CitySuburb = $scope.form.city;\r\n               delivery.ShipAddressDetails.StateProvince = $scope.form.state;\r\n               delivery.ShipAddressDetails.ZipPostCode = $scope.form.postCode;\r\n               delivery.ShipAddressDetails.Country = $scope.form.country;\r\n\r\n               delivery.DeliveryItems = $scope.form.deliveryItems;\r\n               \r\n               delivery.DeliveryItems.forEach(function(d) {\r\n                    if(d.DeliveryDate && d.DeliveryTime)\r\n                        d.DeliveryDateStr = helperService.toDateFromDatepickerParameter(d.DeliveryDate, \r\n                                                    helperService.formatTime(d.DeliveryTime, true));\r\n                    else {\r\n                        d.DeliveryDateStr = null;\r\n                        d.DeliveryDate = null;\r\n                        d.DeliveryTime = null;\r\n                    }\r\n               });\r\n\r\n               if(delivery.DeliveryItems.filter(function(f){ return f.DeliveryDateStr != null; }).length === 0) {\r\n\r\n                    if($scope.mode === 'add') {\r\n                        errorService.showError(gettextCatalog.getString('Delivery should contain at least one item with a date and time filled in before saving.'));\r\n                    } else {\r\n                        $scope.dialogMode = 'deleteDelivery';\r\n\r\n                        helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                                gettextCatalog.getString('Delivery without items will be removed. Would you like to continue?'),\r\n                                gettextCatalog.getString('Yes, remove delivery'),\r\n                                gettextCatalog.getString('No'));\r\n                    }\r\n               } else {\r\n                    $scope.SaveInternal();       \r\n               }\r\n            };\r\n\r\n            $scope.wasSaved = false;\r\n\r\n            $scope.SaveInternal = function(exit) {\r\n                $.blockUI();\r\n                var ret = $scope.deliveryHelper.SaveDelivery();\r\n                if(exit) {\r\n                    ret = ret.then(function(){\r\n                        $scope.wasSaved = true;\r\n                        $.unblockUI();\r\n                        $scope.cancelDialog();\r\n                        var msg = gettextCatalog.getString(\"Delivery was successfully saved.\");\r\n                        $rootScope.$broadcast('snackbar.show', {\r\n                            message: msg\r\n                        });\r\n                        soundService.playGood();\r\n    \r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        this.cancelDialog();\r\n                        $scope.showError(err);\r\n                    });\r\n                } else {\r\n                    ret = ret.then(function(res) {\r\n                        $scope.wasSaved = true;\r\n                        $.unblockUI();\r\n                        var msg = gettextCatalog.getString(\"Delivery was successfully saved.\");\r\n                        $rootScope.$broadcast('snackbar.show', {\r\n                            message: msg\r\n                        });\r\n                        soundService.playGood();\r\n                        return $scope.loadData();\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n                    }\r\n\r\n                return ret;\r\n            };\r\n\r\n            $scope.dialogMode = '';\r\n\r\n            $scope.callbackModal = function () {\r\n                var mode = $scope.dialogMode;\r\n                $scope.dialogMode = '';\r\n                if (mode === 'deleteDelivery') {\r\n                    $scope.SaveInternal(true);\r\n                }\r\n\r\n            };\r\n        \r\n            $scope.fullCalendar = function() {\r\n                // get minimal date for pending items\r\n                var dt = $scope.deliveryHelper.getMinimalPendingDate();\r\n                var start = new Date(dt.getFullYear(), dt.getMonth(), 1, 0, 0, 0);\r\n                var end = new Date(dt.getFullYear(), dt.getMonth() + 1, 1, 23, 59, 59);\r\n                var filter = {\r\n                    fromDate: start,\r\n                    toDate: end,\r\n                };\r\n\r\n                // save filter\r\n                window.localStorage.setItem('fullCalendarFilters', JSON.stringify(filter));\r\n                $rootScope.$broadcast('deliveryCalendar.show');\r\n                \r\n//                $location.path( \"/deliveryCalendar\" );\r\n            };\r\n\r\n            $scope.getStatusColor = function(row) {\r\n                if(row.TaskStatus === \"Completed\" || row.TaskStatus === \"completed\")\r\n                {\r\n                    return {'background-color': '#F9E491'};\r\n                } \r\n                else if(row.TaskStatus === \"Void\" || row.TaskStatus === \"void\")\r\n                {\r\n                    return {'background-color': '#FE8181'};\r\n                }\r\n                else if(row.TaskStatus === \"In progress\" || row.TaskStatus === \"in progress\")\r\n                {\r\n                    return {'background-color': '#D6E3F3'};\r\n                }\r\n            };\r\n\r\n            $scope.cloneDate = function(row) {\r\n                var lst = $scope.form.deliveryItems.filter(function(d){return d.ProductID !== row.ProductID;});\r\n                lst.forEach(function(d) {\r\n                    d.DeliveryTimeDisplay = row.DeliveryTimeDisplay;\r\n                    d.DeliveryTime = row.DeliveryTime;\r\n                    d.DeliveryDate = row.DeliveryDate;\r\n                    d.DeliveryDateOld = row.DeliveryDateOld;\r\n                    d.DeliveryDateStr = row.DeliveryDateStr;\r\n                    d.DeliveryNumber = null;\r\n                    d.TaskID = null;\r\n            });\r\n            };\r\n        }\r\n    ]);","/*\r\n all directives used through the project\r\n*/\r\nimport { OptionsTreeItem } from './OptionsTreeItem';\r\nimport keyboardPartial from '../PosViews/numberKeyboardPartial.html';\r\nimport dateRangeSelector from '../PosViews/dateRangeSelector.html';\r\n\r\nfunction type(details) {\r\n    details.constructor.prototype = details;\r\n    return details.constructor;\r\n}\r\n\r\nangular.module('mainApp')\r\n.directive('formAutofillFix', function () {\r\n    return function (scope, elem, attrs) {\r\n\r\n        // Fix autofill issues where Angular doesn't know about autofilled inputs\r\n        if (attrs.ngSubmit) {\r\n            setTimeout(function () {\r\n                elem.unbind('submit').submit(function (e) {\r\n                    e.preventDefault();\r\n                    elem.find('input, textarea, select').trigger('input').trigger('change').trigger('keydown');\r\n                    scope.$apply(attrs.ngSubmit);\r\n                });\r\n            }, 0);\r\n        }\r\n    };\r\n})\r\n.directive('showData', function ($compile, $rootScope, printService) {\r\n    return {\r\n        scope: true,\r\n        link: function (scope, element, attrs) {\r\n            attrs.$observe('template', function (tpl) {\r\n                printService.preparePrintTemplate(scope, element, attrs, tpl);\r\n            });\r\n        }\r\n    };\r\n})\r\n.directive('ngmFocus', function ($interval, $rootScope) {\r\n    return {\r\n        scope: {\r\n            trigger: '@ngmFocus'\r\n        },\r\n        link: function (scope, element, attributes) {\r\n            scope.$watch('trigger', function (value) {\r\n                if (value === \"true\") {\r\n                    var stop = $interval(function () {\r\n                        if (document.activeElement === element[0]) {\r\n                            if (angular.isDefined(stop)) {\r\n                                $interval.cancel(stop);\r\n                                stop = undefined;\r\n                            }\r\n\r\n                            scope.$emit('controlFocused');\r\n                            $rootScope.$broadcast(\"autofill.update\");\r\n                        }\r\n                        else {\r\n                            element[0].focus();\r\n                            $(element[0]).select();\r\n\r\n                            scope.trigger = false;\r\n                        }\r\n                    }, 100);\r\n                }\r\n            });\r\n        }\r\n    };\r\n})\r\n.directive(\"ngmAutofill\", function ($interval) {\r\n    return {\r\n        require: \"ngModel\",\r\n        link: function (scope, element, attrs, ngModel) {\r\n            scope.$on(\"autofill.update\", function () {\r\n\r\n                var stop = $interval(function () {\r\n                    if (!!element.val()) {\r\n                        if (angular.isDefined(stop)) {\r\n                            $interval.cancel(stop);\r\n                            stop = undefined;\r\n                        }\r\n                        ngModel.$setViewValue(element.val());\r\n                    }\r\n                }, 100);\r\n\r\n            });\r\n        }\r\n    };\r\n})\r\n.directive('ngmEnter', function () {\r\n    return function (scope, element, attrs) {\r\n        element.bind(\"keydown keypress\", function (event) {\r\n            if (event.which === 13) {\r\n                scope.$apply(function () {\r\n                    scope.$eval(attrs.ngmEnter);\r\n                });\r\n\r\n                event.preventDefault();\r\n            }\r\n        });\r\n    };\r\n})\r\n.directive(\"ngmMakeVisible\", function () {\r\n    return function (scope, element, attrs) {\r\n        $(element).on('shown.bs.collapse', function (evt) {\r\n            var el = $(this).closest('.paymentRow');\r\n            var container = $('#payLines');\r\n\r\n            var containerHeight = container.innerHeight();\r\n            var elHeight = el.outerHeight();\r\n\r\n            var curScroll = container.scrollTop();\r\n            if (el.position()) {\r\n                var elPos = el.position().top;\r\n                var elemBottom = elPos + elHeight;\r\n                if (((elPos - curScroll + elHeight) > containerHeight) ||\r\n                    ((elPos + 4) < curScroll)) {\r\n                    if (elHeight >= containerHeight) {\r\n                        // align top of element to the top of container\r\n                        container.scrollTop(elPos + 4);\r\n                    }\r\n                    else {\r\n                        if ((elPos + 4) < curScroll) {\r\n                            container.scrollTop(elPos + 4);\r\n                        }\r\n                        else {\r\n                            // align bottom of element to the bottom of container\r\n                            container.scrollTop(elPos + 4 - (containerHeight - elHeight));\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n})\r\n.directive('ngmSelectOnClick', function () {\r\n    return {\r\n        restrict: 'A',\r\n        link: function (scope, element) {\r\n            var focusedElement;\r\n            element.on('click', function () {\r\n                if (focusedElement != this) {\r\n                    this.select();\r\n                    focusedElement = this;\r\n                }\r\n            });\r\n            element.on('blur', function () {\r\n                focusedElement = null;\r\n            });\r\n        }\r\n    };\r\n})\r\n.directive('ngmSelect', function () {\r\n    return function (scope, elem, attrs) {\r\n        var el = $(attrs.ngmSelect);\r\n        $(elem).on('shown.bs.collapse', function (evt) {\r\n            el.focus();\r\n            el.select();\r\n        });\r\n    };\r\n})\r\n// .directive('ngmFocusTo', ['configService', '$timeout', function (configService, $timeout) {\r\n//     return function (scope, elem, attrs) {\r\n//         var target = !!attrs.ngmFocusTo ? attrs.ngmFocusTo : null;\r\n//         if (configService.isMobile) {\r\n//             elem.bind('touchstart', function (e) {\r\n//                 var focused = document.activeElement;\r\n//                 if (!!target) {\r\n//                     var t = $(target);\r\n//                     var atr = $(focused).attr('id');\r\n//                     if (!atr || ('#' + atr) !== target) {\r\n//                         e.preventDefault();\r\n//                         t.focus();\r\n//                     }\r\n//                 }\r\n//             });\r\n//         } else {\r\n//             elem.bind('click', function (e) {\r\n//                 $timeout(function () {\r\n//                     var focused = document.activeElement;\r\n//                     if (!!target) {\r\n//                         var t = $(target);\r\n//                         var atr = $(focused).attr('id');\r\n//                         if (!atr || ('#' + atr) !== target) {\r\n//                             e.preventDefault();\r\n//                             t.focus();\r\n//                         }\r\n//                     }\r\n//                 }, 10);\r\n//             });\r\n//         }\r\n//     };\r\n// }])\r\n.directive('ngmClick', ['configService', function (configService) {\r\n    return function (scope, elem, attrs) {\r\n        if (configService.isMobile) {\r\n            elem.bind('touchstart', function (e) {\r\n                e.preventDefault();\r\n                $(e.target).click();\r\n            });\r\n        }\r\n    };\r\n}])\r\n.directive('httpSrc', ['$http', 'cacheService', function ($http, cacheService) {\r\n    var directive = {\r\n        link: link,\r\n        restrict: 'A',\r\n        scope: {\r\n            httpSrc: '@'\r\n        }\r\n    };\r\n    return directive;\r\n\r\n    function link(scope, element, attrs) {\r\n        function getConfig() {\r\n            if (attrs.httpSrc && attrs.takeParentSize) {\r\n                var elem = element.parent();\r\n                var height = parseInt(elem.height());\r\n                var width = parseInt(elem.width());\r\n\r\n                if (width == 0 || height == 0)\r\n                    return {};\r\n\r\n                var isQuickKeyImage = attrs.httpSrc.toLowerCase().indexOf(\"/posquickkeyimages?id\") >= 0;\r\n                if (!isQuickKeyImage)\r\n                    attrs.httpSrc += '&width=' + width + '&height=' + height;\r\n                else\r\n                    attrs.httpSrc += '&Width=' + width + '&Height=' + height;\r\n            }\r\n            var emptyImage = attrs.ngmEmptyImageSrc;\r\n            if (!!emptyImage)\r\n                attrs.$set('src', emptyImage);\r\n\r\n            return {\r\n                method: 'GET',\r\n                url: attrs.httpSrc,\r\n                cache: 'true'\r\n            };\r\n        }\r\n\r\n        function getImage() {\r\n            var config = getConfig();\r\n            if (attrs.httpSrc) {\r\n                attrs.$set('src', config.url);\r\n            }\r\n        }\r\n\r\n        getImage();\r\n\r\n        scope.$on('image.src.update', function (event, data) {\r\n            getImage();\r\n        });\r\n\r\n        scope.$watch('httpSrc', function(val, oldVal){\r\n            if (oldVal != val) {\r\n                getImage();\r\n            }\r\n        });\r\n    }\r\n}])\r\n.directive('getTileImageUrl', ['configService', function (configService) {\r\n    var directive = {\r\n        link: link,\r\n        restrict: 'A',\r\n        scope: {\r\n            isFamily: '=', \r\n            imageId: '=',\r\n            isRealFamily: '=',\r\n            addSize: '=',\r\n            quickImageType: '='\r\n        }\r\n    };\r\n    return directive;\r\n  \r\n\r\n    function link(scope, element, attrs) {\r\n        function getConfig(value) {\r\n            if (value && attrs.takeParentSize) {\r\n                var elem = element.parent();\r\n                var height = parseInt(elem.height());\r\n                var width = parseInt(elem.width());\r\n\r\n                if (width == 0){\r\n                    width = configService.imagesX;\r\n                }\r\n                if (height == 0) {\r\n                    height = configService.imagesY;\r\n                }\r\n\r\n                if (height < 0 || width < 0) {\r\n                    return {};\r\n                }\r\n\r\n                var isQuickKeyImage = value.toLowerCase().indexOf(\"/posquickkeyimages?id\") >= 0;\r\n                if (!isQuickKeyImage)\r\n                    value += '&width=' + width + '&height=' + height;\r\n                else\r\n                    value += '&Width=' + width + '&Height=' + height;\r\n            }\r\n            \r\n            var emptyImage = attrs.ngmEmptyImageSrc;\r\n            \r\n            if (!value && !!emptyImage) {\r\n                return {\r\n                    method: 'GET',\r\n                    url: emptyImage,\r\n                    cache: 'true'\r\n                };\r\n            }                \r\n\r\n            return {\r\n                method: 'GET',\r\n                url: value,\r\n                cache: 'true'\r\n            };\r\n        }\r\n\r\n        function getImageUrl() {\r\n            if (scope.isFamily === scope.isRealFamily && !!scope.imageID) {\r\n                let url = null;\r\n                \r\n                if (!scope.quickImageType) {\r\n                    url = (buildConfiguration.configuration === 'Debug' ? configService.baseURL + '/Product/GetImageRatio' : configService.baseImageURL) + '?id=' + scope.imageID;\r\n                } else {\r\n                    url = configService.connectionURL + '/PosQuickKeyImages?ID=' + scope.imageID + '&imageContentType=' + encodeURIComponent(scope.quickImageType);\r\n                }\r\n                \r\n                if (scope.addSize === true) {\r\n                    url += '&Width=' + configService.imagesX + '&Height=' + configService.imagesY;\r\n                }\r\n\r\n                return url;\r\n            }\r\n            return null;\r\n        };\r\n\r\n        function getImage() {\r\n            // fix because angular adds capital letter onlu after dash\r\n            scope.imageID = scope.imageId;\r\n            const value = getImageUrl();\r\n            var config = getConfig(value);\r\n            if (config.url) {\r\n                attrs.$set('src', config.url);\r\n            }\r\n        };\r\n\r\n        getImage();\r\n\r\n        var onChange = function(val, oldVal){\r\n            //if (oldVal !== val) {\r\n                getImage();\r\n           // }\r\n        };\r\n\r\n        scope.$watch('imageId', onChange)\r\n        scope.$watch('isRealFamily', onChange)\r\n        //scope.$watch('addSize', onChange)\r\n        scope.$watch('quickImageType', onChange)\r\n\r\n        scope.$on('image.src.update', function (event, data) {\r\n            getImage();\r\n        });\r\n    }\r\n}])\r\n.directive('ngmKeyboard', ['$filter', 'helperService', 'configService', '$timeout', 'constants',\r\n    function ($filter, helperService, configService, $timeout, constants) {\r\n        var directive = {\r\n            link: link,\r\n            transclude: true,\r\n            restrict: 'E',\r\n            templateUrl: keyboardPartial,\r\n            scope: {\r\n            }\r\n        };\r\n\r\n        return directive;\r\n\r\n        function link(scope, element, attrs) {\r\n            if (configService.isMobile && helperService.checkDeviceVersion()) {\r\n                var elems = element[0].querySelectorAll('.customKeyboardButton');\r\n                $.each(elems, function (eix, el) {\r\n                    var elem = angular.element(el);\r\n                    elem.on('touchend', function (e) {\r\n                        //console.log('keyboard touchend');\r\n                        e.preventDefault();\r\n                        e.target.click();\r\n                    });\r\n                });\r\n            }\r\n\r\n            scope.model = 0;\r\n            var type = attrs.type;\r\n\r\n            if (!!attrs.floatPrecision) {\r\n                var prn = scope.$parent;\r\n                while (prn != null) {\r\n                    if (prn.hasOwnProperty(attrs.floatPrecision)) {\r\n                        scope.floatPrecision = prn[attrs.floatPrecision];\r\n                        break;\r\n                    }\r\n                    prn = prn.$parent;\r\n                }\r\n            }\r\n\r\n            if (!scope.floatPrecision)\r\n                scope.floatPrecision = 2;\r\n\r\n            scope.type = type;\r\n            scope.firstShow = true;\r\n            scope.selectValue = true;\r\n            scope.positiveSign = true;\r\n\r\n            if (type === 'integer') {\r\n                scope.formattedModel = scope.model;\r\n            } else {\r\n                if (type === 'floatCalculator') {\r\n                    scope.formattedModel = $filter('number')(scope.model, scope.floatPrecision);\r\n                }\r\n                else {\r\n                    var v = scope.model + '';\r\n                    if (!v)\r\n                        v = '0';\r\n                    scope.formattedModel = v;\r\n                }\r\n            }\r\n\r\n            scope.selectSum = function () {\r\n                var el = element.find('div.keybordValue span');\r\n\r\n                var doc = document\r\n                    , text = doc.querySelector(el)\r\n                    , range, selection\r\n                ;\r\n\r\n                if (typeof doc.body.createTextRange === 'function') {\r\n                    range = document.body.createTextRange();\r\n                    range.moveToElementText(text);\r\n                    range.select();\r\n                } else if (window.getSelection) {\r\n                    selection = window.getSelection();\r\n                    range = document.createRange();\r\n                    range.selectNodeContents(text);\r\n                    selection.removeAllRanges();\r\n                    selection.addRange(range);\r\n                }\r\n            };\r\n\r\n            scope.$watch('model', function (newValue, oldValue) {\r\n                if (type === 'integer') {\r\n                    scope.formattedModel = scope.model;\r\n                } else {\r\n                    if (type === 'floatCalculator')\r\n                        scope.formattedModel = $filter('number')(scope.model, scope.floatPrecision);\r\n                    else {\r\n                        var v = scope.model + '';\r\n                        if (!v) {\r\n                            v = '0';\r\n                        }\r\n                        if (v=='0' && scope.formattedModel !== v) {\r\n                            scope.resetFontSize();\r\n                        }\r\n                        scope.formattedModel = v;\r\n                    }\r\n                }\r\n            });\r\n\r\n            scope.AvailablePT = [36, 32, 28, 24, 20];\r\n\r\n            scope.resetFontSize = function() {\r\n                var childClass = 'keyboardValue-Text';\r\n                var defaultSize = 36;\r\n                var children = element.find('.' + childClass);\r\n                childClass += ' ' + 'product-text' + (defaultSize + '').replace('.', '-');\r\n\r\n                children.get(0).className = childClass;\r\n            };\r\n\r\n            scope.fitFontSize = function() {\r\n                // var childClass = child + \"-measure\";\r\n                // var children = $(\".\" + childClass);\r\n                // if (children.length > 0) {\r\n\r\n                    var childClass = 'keyboardValue-Text';\r\n                    var defaultSize = 36;\r\n                    var children = element.find('.' + childClass);\r\n\r\n                    var maxWidth = children.first().closest('.keyboardValue').width()-30;\r\n                    //var maxHeight = children.first().closest('.keyboardValue').height();\r\n\r\n                    children.each(function (idx, el) {\r\n                        var txt = this;\r\n                        for (var i = 0; i < scope.AvailablePT.length; i++) {\r\n                            var v = scope.AvailablePT[i];\r\n                            if (v <= defaultSize) {\r\n                                var className = childClass;\r\n                                if (v != defaultSize)\r\n                                    className += ' ' + 'product-text' + (v + '').replace('.', '-');\r\n                                if (txt.className.trim() != className) {\r\n                                    txt.className = className;\r\n                                }    \r\n\r\n                                var elWidth = el.offsetWidth;\r\n                                //var elHeight = el.offsetHeight;\r\n                                if (elWidth > maxWidth /*|| elHeight > maxHeight*/) {\r\n                                    continue;\r\n                                }\r\n                                else {\r\n                                    console.log(elWidth /*+ '-' + elHeight*/);\r\n                                    break;\r\n                                }\r\n                            }\r\n                        }\r\n                    });\r\n                //}\r\n            };\r\n\r\n            scope.setFocus = function () {\r\n                element.find('button:first').focus();\r\n            };\r\n\r\n            scope.clickFun = function (symb) {\r\n                var SCOPE = scope;\r\n                $timeout(function () {\r\n                    console.log('clickFun posted');\r\n                    if (type === 'integer') {\r\n                        var v = SCOPE.model;\r\n                        if (SCOPE.firstShow) {\r\n                            v = 0;\r\n                            SCOPE.firstShow = false;\r\n                        }\r\n\r\n                        if (symb == 'backspace') {\r\n                            v = Math.floor(parseInt(v) / 10);\r\n                        } else if (symb == '00') {\r\n                            v = parseInt(v) * 100;\r\n                        } else {\r\n                            v = parseInt(v * 10) + parseInt(symb);\r\n                        }\r\n                        SCOPE.model = v;\r\n                    } else {\r\n\r\n                        if (type === 'floatCalculator') {\r\n                            var v = parseFloat('0' + SCOPE.model);\r\n                            if (SCOPE.firstShow) {\r\n                                v = 0;\r\n                                SCOPE.firstShow = false;\r\n                            }\r\n\r\n                            if (symb == 'backspace') {\r\n                                v = Math.floor(v * 10) / 100;\r\n                            } else if (symb == '00') {\r\n                                v = v * 100;\r\n                            }\r\n                            else {\r\n                                v = v * 10 + parseFloat(symb) / 100;\r\n                            }\r\n\r\n                            SCOPE.model = scope.applyFractionalLimit(v + '');\r\n                        }\r\n                        else {\r\n                            var v = SCOPE.model + '';\r\n                            if (SCOPE.firstShow) {\r\n                                v = '0';\r\n                                SCOPE.firstShow = false;\r\n                            }\r\n\r\n                            if (symb == 'backspace') {\r\n                                v = v.substr(0, v.length - 1);\r\n                            }\r\n                            else if (symb == '.') {\r\n                                if (v.indexOf('.') < 0 && v.length > 0) {\r\n                                    v += '.';\r\n                                }\r\n                            }\r\n                            else if (symb >= '0' && symb <= '9') {\r\n                                v = v + symb;\r\n                            }\r\n\r\n                            if (!v)\r\n                                v = '0';\r\n                            else {\r\n                                // remove leading 0, leave only one if point exists\r\n\r\n                                while (v.length > 0 && v[0] == '0')\r\n                                    v = v.substr(1);\r\n\r\n                                if (v.length == 0)\r\n                                    v = '0';\r\n                                if (v[0] == '.')\r\n                                    v = '0' + v;\r\n                            }\r\n\r\n                            var tmpModel = scope.applyFractionalLimit(v);\r\n                            if (tmpModel.length > constants.customKeyboardMaxLenth) {\r\n                                return;\r\n                            }\r\n                            SCOPE.model = scope.applyFractionalLimit(v);\r\n                        }\r\n                    }\r\n                    $timeout(function(){\r\n                        SCOPE.fitFontSize();\r\n                    });                     \r\n                });\r\n            };\r\n\r\n            scope.applyFractionalLimit = function (val) {\r\n                if (scope.floatPrecision > 0 || !val && val.length > 1) {\r\n                    var pointPos = val.indexOf('.');\r\n                    if (pointPos >= 0 && (val.length - pointPos - 1) > scope.floatPrecision) {\r\n                        return val.substring(0, pointPos + 1 + scope.floatPrecision);\r\n                    }\r\n                }\r\n\r\n                return val;\r\n            };\r\n\r\n            scope.pressFun = function (symb) {\r\n                scope.$apply(function () {\r\n                    scope.clickFun(symb);\r\n                });\r\n            };\r\n\r\n            $(window).on(\"resize\", function () {\r\n                $timeout(function () { \r\n                    scope.fitFontSize();\r\n                });\r\n            });\r\n        }\r\n    }\r\n])\r\n.directive('ngmPopoverDialog',\r\n    ['$compile', '$filter', 'helperService', '$timeout', 'configService', '$locale', 'errorService',\r\n    function ($compile, $filter, helperService, $timeout, configService, $locale, errorService) {\r\n        var directive = {\r\n            link: link,\r\n            restrict: 'A',\r\n            scope: {\r\n                //                     ngmPopoverDialog: '=', // used indirectly later\r\n                ngModel: '=',\r\n                ngmPopoverCallback: '&',\r\n                ngmDiscountCodeTextModel: '='\r\n            }\r\n        };\r\n\r\n        return directive;\r\n\r\n        function link(scope, element, attrs) {\r\n            var ht = element.html();\r\n            scope.dlg = $(attrs.ngmPopoverTarget);\r\n            scope.btnVar = attrs.ngActiveButtonModel;\r\n            scope.info1Var = attrs.ngInfo1Model;\r\n            scope.canChangeSignVar = attrs.ngmCanChangeSignModel;\r\n            scope.titleVar = attrs.ngmPopoverTitleModel;\r\n            scope.ngmEnterCallCallback = attrs.ngmEnterCallCallback;\r\n            scope.discountCodeZoneCls = attrs.ngmDiscountCodeZoneClsModel;\r\n            scope.ngmTitleCodeText = attrs.ngmTitleCodeText;\r\n            scope.ngmDiscountCodeTitleText = attrs.ngmDiscountCodeTitleText;\r\n\r\n            scope.discountCode='';\r\n            scope.isValidCode = false;\r\n\r\n            scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n            scope.toggleSign = function () {\r\n                scope.$$childHead.signIsPositive = scope.$$childHead.signIsPositive ? false : true;\r\n            };\r\n\r\n            var discountCodeZoneCls = '';\r\n            var titleCodeText='';\r\n            var prnVar = attrs.ngmPopoverDialog;\r\n            var title = attrs.ngmPopoverTitle;\r\n            var placement = attrs.ngmPlacement;\r\n            if (!placement)\r\n                placement = 'auto left';\r\n\r\n            scope.displayMode = attrs.ngmDisplayMode;\r\n            if (!scope.displayMode)\r\n                scope.displayMode = 'popover';\r\n\r\n            scope.inited = false;\r\n            scope.showDialog = function () {\r\n                if (!scope.inited) {\r\n                    scope.inited = true;\r\n                    if (scope.displayMode == 'popover') {\r\n                        scope.dlg.on('show.bs.popover', function (e) {\r\n                            var popel = $('body');\r\n                            popel.prepend('<div class=\"dp_drawer_ex\"></div>');\r\n                            var SCOPE = scope;\r\n                            //$timeout(function () {\r\n                            //    SCOPE.$$childHead.firstShow = true;\r\n                            //});\r\n\r\n                        });\r\n\r\n                        scope.dlg.on('hide.bs.popover', function (e) {\r\n                            var SCOPE = scope;\r\n                            $timeout(function () {\r\n                                $('.dp_drawer_ex').remove();\r\n                            }, 300);\r\n                        });\r\n                    }\r\n                }\r\n\r\n                var SCOPE = scope;\r\n\r\n                $timeout(function () {\r\n                    if (!!SCOPE.titleVar) {\r\n                        title = scope.$parent.$eval(SCOPE.titleVar);\r\n                    }\r\n                    if (!!SCOPE.discountCodeZoneCls) {\r\n                        discountCodeZoneCls = scope.$parent.$eval(SCOPE.discountCodeZoneCls);\r\n                    }\r\n                    if (!!SCOPE.ngmTitleCodeText) {\r\n                        titleCodeText = scope.$parent.$eval(SCOPE.ngmTitleCodeText);\r\n                    }\r\n\r\n                    if (!!SCOPE.canChangeSignVar)\r\n                        scope.canChangeSign = scope.$parent.$eval(scope.canChangeSignVar);\r\n\r\n                    if (!!SCOPE.ngmDiscountCodeTitleText) {\r\n                        scope.LLDiscountType = scope.$parent.$eval(SCOPE.ngmDiscountCodeTitleText);\r\n                    }\r\n\r\n                    if (scope.displayMode == 'popover') {\r\n                        SCOPE.dlg.popover(\r\n                        {\r\n                            placement: placement,\r\n                            html: true,\r\n                            container: 'body',\r\n                            trigger: 'manual',\r\n                            title: title,\r\n                            template: '<div class=\"dp_popover popover dp_modal-select modal-dialog dp_modal-dialog modal-content dp_modal-content popoverKeyboard\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>',\r\n                            content: scope.compiledContent\r\n                        });\r\n                    }\r\n                    else if (scope.displayMode == 'centred-dialog') {\r\n                        if (!SCOPE.$modal) {\r\n\r\n                            var discountCodeFieldTemplate = `\r\n                                <div class=\"${discountCodeZoneCls}\" style=\"margin-right: 20px;\">\r\n                                    <div class=\"cb-fake\">\r\n                                        <span ng-show=\"!ngmDiscountCodeTextModel\">\r\n                                            ${titleCodeText}\r\n                                        </span>\r\n                                        <span ng-show=\"!!ngmDiscountCodeTextModel\">\r\n                                            {{ngmDiscountCodeTextModel}}\r\n                                        </span>\r\n                                    </div>\r\n                                </div>\r\n                            `;\r\n\r\n                            var discountCodeField = !!discountCodeZoneCls ? discountCodeFieldTemplate : '';\r\n\r\n                            var template = `\r\n                                <div class=\"modal keyboard-dialog fade dp_modal custom-modal ifDiscount\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"enterModalLabel1\" aria-hidden=\"true\" data-backdrop=\"static\" data-keyboard=\"false\">\r\n                                    <div class=\"modal-dialog dp_modal-dialog mobile-dialog-center\" role=\"document\">\r\n                                        <div class=\"modal-content dp_modal-content dialog-gray\">\r\n                                            <div class=\"modal-header dp_modal-header\" style=\"border-bottom: 1px solid #B9BDCE !important;\">\r\n                                                <div class=\"header-container\">\r\n                                                    <div class=\"header-container-row\">\r\n                                                        <div>\r\n                                                            <h4 class=\"modal-title dp_modal-title\" id=\"enterModalLabel1\">${title}</h4>\r\n                                                        </div>\r\n                                                        ${discountCodeField}\r\n                                                        <div class=\"btn-cancel-keyboard-dialog\"></div>\r\n                                                    </div>\r\n                                                </div>\r\n                                            </div>\r\n                                            <div class=\"modal-body dp_modal-body padding-top-bottom-0 hidden-overflow no-footer\"></div>\r\n                                            <div class=\"modal-footer\"></div>\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            `;\r\n\r\n                            // var template =\r\n                            //     '<div class=\"modal keyboard-dialog fade dp_modal custom-modal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"enterModalLabel1\" aria-hidden=\"true\" data-backdrop=\"static\" data-keyboard=\"false\">' +\r\n                            //     '    <div class=\"modal-dialog dp_modal-dialog mobile-dialog-center\" role=\"document\">' +\r\n                            //     '        <div class=\"modal-content dp_modal-content dialog-gray\">' +\r\n                            //     '\t\t\t<div class=\"modal-header dp_modal-header\">' +\r\n                            //     '\t\t\t\t<div class=\"header-container\">' +\r\n                            //     '\t\t\t\t\t<div class=\"header-container-row\">' +\r\n                            //     '\t\t\t\t\t\t<div>' +\r\n                            //     '\t\t\t\t\t\t\t<h4 class=\"modal-title dp_modal-title\" id=\"enterModalLabel1\">' + title + '</h4>' +\r\n                            //     '\t\t\t\t\t\t</div>' +\r\n                            //     '                       <div class=\"btn-cancel-keyboard-dialog\">' +\r\n                            //     '                       </div>' +\r\n                                \r\n                            //     (!!discountCodeZoneCls ? \r\n                            //     '                       <div class=\"'+discountCodeZoneCls+'\"><div class=\"cb-fake\"><span ng-show=\"!ngmDiscountCodeTextModel\">'+titleCodeText+'</span><span ng-show=\"!!ngmDiscountCodeTextModel\">{{ngmDiscountCodeTextModel}}</span>'+\r\n                            //     '                       </div></div>' :\r\n                            //     '                       ') +\r\n                            //     '\t\t\t\t\t</div>' +\r\n                            //     '\t\t\t\t</div>' +\r\n                            //     '\t\t\t</div>' +\r\n                            //     '\t\t\t<div class=\"modal-body dp_modal-body padding-top-bottom-0 hidden-overflow no-footer\">' +\r\n                            //     '\t\t\t</div>' +\r\n                            //     '           <div class=\"modal-footer\">' +\r\n                            //     '           </div>' +\r\n                            //     '        </div>' +\r\n                            //     '    </div>' +\r\n                            //     '</div>';\r\n\r\n                            var tpl = $compile($(template))(SCOPE);\r\n                            SCOPE.$modal = tpl;//$(template);\r\n                            SCOPE.$modal.find('.modal-body').append(scope.compiledContent);\r\n                            var btnCancel = $compile('<span class=\"close-modal-dialog-button pointerCursor\" ng-mobile-click=\"callback(\\'cancel\\');\" style=\"color: grey; font-size: 25px; font-weight: 500;\">x</span>')(SCOPE);\r\n                            SCOPE.$modal.find('.btn-cancel-keyboard-dialog').append(btnCancel);\r\n                        }\r\n                        // SCOPE.$modal.find('.modal-body').empty();\r\n                        // SCOPE.$modal.find('.modal-body').append(scope.compiledContent);\r\n                        SCOPE.$modal.modal('show');\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        SCOPE.$$childHead.firstShow = true;\r\n                        if (scope.displayMode == 'popover') {\r\n                            scope.dlg.popover('show');\r\n                        }\r\n                        else if (scope.displayMode == 'centred-dialog') {\r\n                            if (SCOPE.$modal) {\r\n                                SCOPE.$modal.modal('show');\r\n                            }\r\n                        }\r\n                    }, 0);\r\n                });\r\n\r\n            };\r\n\r\n            scope.keyHandler = function (e) {\r\n                var SCOPE = scope;\r\n\r\n                //console.log('pressed');\r\n                console.log('keyCode=' + e.keyCode)\r\n                if ((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105) || e.keyCode == 190 || e.keyCode == 110) {\r\n                    SCOPE.$$childHead.pressFun(e.key);\r\n                }\r\n                else if (e.keyCode == 8) {\r\n                    SCOPE.$$childHead.pressFun('backspace');\r\n                }\r\n                else if(e.keyCode === 13){\r\n                    if(scope.ngmEnterCallCallback == 'true'){\r\n                        scope.callback(true, e);\r\n                    }\r\n                }else if(e.keyCode === 27){\r\n                    scope.callback('cancel', e);\r\n                }\r\n\r\n                e.preventDefault();\r\n            };\r\n\r\n            scope.ngmPopoverDialog = {\r\n                toggle: function (target) {\r\n\r\n                    if (this.isShown)\r\n                        this.hide(false);\r\n                    else\r\n                        this.show(target);\r\n                },\r\n                isShown: false,\r\n                show: function (target) {\r\n                    var timeout = 1;\r\n                    if (this.isShown) {\r\n                        setTimeout(function(){                                \r\n                            if (scope.displayMode == 'popover') {\r\n                                scope.dlg.popover('hide');\r\n                            }\r\n                            else if (scope.displayMode == 'centred-dialog' && scope.$modal) {\r\n                                scope.$modal.modal('hide');\r\n                            }\r\n                        });\r\n                        timeout = 300;\r\n                    }\r\n                    \r\n                    if (configService.isMobile) {\r\n                        Keyboard.hide();\r\n                    }\r\n\r\n                    scope.activeButton = !!scope.btnVar ? scope.$parent.$eval(scope.btnVar) : null;\r\n                    scope.info1 = !!scope.info1Var ? scope.$parent.$eval(scope.info1Var) : null;\r\n\r\n                    if (!scope.compiledContent) {\r\n                        scope.compiledContent = $compile(ht)(scope);\r\n                    }\r\n\r\n\r\n                    if (target) {\r\n                        scope.dlg = $(target);\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        scope.$$childHead.model = helperService.formatFloatNumber(Math.abs(scope.ngModel));\r\n                        scope.$$childHead.signIsPositive = scope.ngModel < 0 ? false : true;\r\n                    });\r\n\r\n                    $(document).on('keydown', scope.keyHandler);\r\n                    \r\n                    setTimeout(function(){   \r\n                        scope.showDialog();\r\n                        timeout = 1;\r\n                    }, timeout);\r\n                    this.isShown = true;\r\n                \r\n                },\r\n                hide: function (update) {\r\n                    if (update === true)\r\n                    scope.ngModel = scope.$$childHead.signIsPositive ? scope.$$childHead.model : (-1 * scope.$$childHead.model);\r\n                    \r\n                    this.isShown = false;\r\n\r\n                    $(document).off('keydown', scope.keyHandler);\r\n                    if (scope.displayMode == 'popover') {\r\n                        scope.dlg.popover('hide');\r\n                    }\r\n                    else if (scope.displayMode == 'centred-dialog' && scope.$modal) {\r\n                        scope.$modal.modal('hide');\r\n                    }\r\n                    \r\n                },\r\n                getModelValue: function() {\r\n                    return scope.$$childHead.signIsPositive ? scope.$$childHead.model : (-1 * scope.$$childHead.model);\r\n                },\r\n                clean: function () {\r\n                    scope.$$childHead.model = 0;\r\n                    scope.ngmDiscountCodeTextModel = null;\r\n                    this.hide(true);\r\n                },\r\n                getScope: function () {\r\n                    return scope;\r\n                }\r\n            };\r\n\r\n            scope.callback = function () {\r\n                scope.ngmPopoverCallback().apply(this, arguments);\r\n            };\r\n\r\n            var prn = scope.$parent;\r\n            while (prn != null) {\r\n                if (prn.hasOwnProperty(prnVar)) {\r\n                    prn[prnVar] = scope.ngmPopoverDialog;\r\n                    break;\r\n                }\r\n                prn = prn.$parent;\r\n            }\r\n        }\r\n    }\r\n])\r\n.directive('ngmOptionsDialog',\r\n        ['$compile', '$filter', 'helperService', '$timeout', '$templateCache', '$interpolate', '$rootScope', 'configService',\r\n        function ($compile, $filter, helperService, $timeout, $templateCache, $interpolate, $rootScope, configService) {\r\n            var directive = {\r\n                link: link,\r\n                restrict: 'A',\r\n                scope: {\r\n                    //ngmOptionsDialog: '=', // used indirectly later\r\n                    //ngModel: '=',\r\n                    ngmOptionsCallback: '&'\r\n                }\r\n            };\r\n\r\n            return directive;\r\n\r\n            function link(scope, element, attrs) {\r\n                var ht = $templateCache.get(attrs.ngmTemplate);\r\n                var prnVar = attrs.ngmOptionsDialog;\r\n                var prnModel = attrs.ngModel;\r\n                var title = $templateCache.get(attrs.ngmOptionsTitle);\r\n                //var placement = attrs.ngmOptionsPlacement;\r\n                var entireTemplate = $templateCache.get(attrs.ngmEntireTemplate);\r\n\r\n                scope.model = null;\r\n                scope.currentLevel = 0;\r\n                scope.options = null;\r\n                scope.currentValue = null;\r\n                scope.option1 = null;\r\n                scope.option2 = null;\r\n                scope.option3 = null;\r\n\r\n                scope.compiledContent = null;\r\n                scope.compiledTitle = null;\r\n\r\n                scope.isOnline = function () {\r\n                    return configService.isOnline === true;\r\n                };\r\n\r\n                scope.selectOption = function (e, key) {\r\n\r\n                    scope.currentValue = scope.currentValue[key];\r\n\r\n                    switch (scope.currentLevel) {\r\n                        case 0:\r\n                            scope.option1 = key;\r\n                            break;\r\n                        case 1:\r\n                            scope.option2 = key;\r\n                            break;\r\n                        case 2:\r\n                            scope.option3 = key;\r\n                            break;\r\n                    }\r\n\r\n                    // if (helperService.checkClickedElement(e, 'QuestionMark')) {\r\n                    //     $rootScope.$broadcast('popover.dialog.hide');\r\n                    //     // get product info\r\n                    //     $rootScope.$broadcast('showAvailabilityCheckDlg',\r\n                    //                    {\r\n                    //                        option1: scope.option1,\r\n                    //                        option2: scope.option2,\r\n                    //                        option3: scope.option3,\r\n                    //                    });\r\n                    //     return;\r\n                    // }\r\n\r\n\r\n                    if (!!scope.currentValue && !(scope.currentValue instanceof OptionsTreeItem)) {\r\n\r\n                        scope.options = Object.keys(scope.currentValue);\r\n                        scope.currentLevel++;\r\n\r\n                        // scope.$modal.one('hidden.bs.modal', function () {\r\n                        //     scope.options = Object.keys(scope.currentValue);\r\n                        //     scope.currentLevel++;\r\n                        //     $timeout(function () {\r\n                        //         scope.showDialog();\r\n                        //     }, 0);\r\n                        // });\r\n\r\n                        //scope.hideDialog();\r\n                    }\r\n                    else {\r\n                        scope.ngmOptionsCallback().call(this, scope.currentValue);\r\n                    }\r\n                };\r\n\r\n                scope.showDialog = function () {\r\n                    //  scope.dlg.popover(\r\n                    //      {\r\n                    //          placement: placement,\r\n                    //          html: true,\r\n                    //          container: 'body',\r\n                    //          trigger: 'manual',\r\n                    //          title: scope.compiledTitle,\r\n                    //          template: entireTemplate,\r\n                    //          content: scope.compiledContent\r\n                    //      });\r\n\r\n                    //  dp_modal-body padding-top-bottom-0 no-footer | ngm-modal-container-height-mobile ngm-modal-container-height-mobile-koef=\"0.8\" ngm-modal-container-height-mobile-margin=\"30\"\r\n                    \r\n                    if (!scope.$modal) {\r\n                        var template =\r\n                            '<div class=\"modal fade dp_modal custom-modal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"optionEnterModalLabel1\" aria-hidden=\"true\" data-backdrop=\"static\" data-keyboard=\"false\">' +\r\n                            '    <div class=\"modal-dialog dp_modal-dialog\" role=\"document\">' +\r\n                            '        <div class=\"modal-content dp_modal-content dialog-gray\">' +\r\n                            '\t\t\t<div class=\"modal-header dp_modal-header\">' +\r\n                            '\t\t\t\t<div class=\"header-container\">' +\r\n                            '\t\t\t\t\t<div class=\"header-container-row\">' +\r\n                            '\t\t\t\t\t\t<div>' +\r\n                            '\t\t\t\t\t\t\t<h4 class=\"modal-title dp_modal-title\" id=\"optionEnterModalLabel1\"></h4>' +\r\n                            '\t\t\t\t\t\t</div>' +\r\n                            '                       <div class=\"btn-cancel-productoptions-dialog\"></div>' +\r\n                            '\t\t\t\t\t</div>' +\r\n                            '\t\t\t\t</div>' +\r\n                            '\t\t\t</div>' +\r\n                            '\t\t\t<div class=\"modal-body\">' +\r\n                            '\t\t\t</div>' +\r\n                            '           <div class=\"modal-footer dp_modal-footer\">' +\r\n                            '               <div class=\"btn-back-productoptions-dialog\">' +\r\n                            '               </div>' +\r\n                            '           </div>' +\r\n                            '        </div>' +\r\n                            '    </div>' +\r\n                            '</div>';\r\n\r\n                        var templateCompiled = $compile(template)(scope);\r\n                        scope.$modal = $(templateCompiled);\r\n                        scope.$modal.find('.modal-body').append(scope.compiledContent);\r\n                        var btnCancel = $compile('<span class=\"close-modal-dialog-button pointerCursor\" ng-mobile-click=\"closeDialog();\">x</span>')(scope);\r\n                        scope.$modal.find('.btn-cancel-productoptions-dialog').append(btnCancel);\r\n\r\n                        var btnBack = $compile('<button type=\"button\" class=\"btn btn-small btn-outline\" ng-mobile-click=\"callback();\">Back</span>')(scope);\r\n                        scope.$modal.find('.btn-back-productoptions-dialog').append(btnBack);\r\n                    }\r\n                    scope.$modal.find('#optionEnterModalLabel1').html(scope.compiledTitle);\r\n                    // SCOPE.$modal.find('.modal-body').empty();\r\n                    // SCOPE.$modal.find('.modal-body').append(scope.compiledContent);\r\n                    //scope.$modal.modal('show');\r\n\r\n                    scope.$modal.on('show.bs.modal', function () { });\r\n                    scope.$modal.on('shown.bs.modal', function () {\r\n                        $rootScope.$broadcast('popup.shown');\r\n                    });\r\n\r\n                    scope.$modal.on('hidden.bs.modal', function () {\r\n                        scope.$modal.off('hidden.bs.modal');\r\n                    });\r\n\r\n                    $timeout(function () {\r\n                        scope.$modal.modal('show');\r\n                    });\r\n\r\n                };\r\n\r\n                scope.hideDialog = function () {\r\n                    scope.$modal.off('show.bs.modal');\r\n                    scope.$modal.off('shown.bs.modal');\r\n                    scope.$modal.modal('hide');\r\n                };\r\n\r\n                scope.evtHide = scope.$root.$on(\"modal.dialog.hide\", function () {\r\n                    scope.ngmOptionsDialog.hide();\r\n                });\r\n\r\n                scope.$on(\r\n                   \"$destroy\",\r\n                   function handleDestroyEvent() {\r\n                       scope.evtHide();\r\n                   }\r\n               );\r\n\r\n                scope.ngmOptionsDialog = {\r\n                    toggle: function () {\r\n\r\n                        if (this.isShown)\r\n                            this.hide(false);\r\n                        else\r\n                            this.show();\r\n                    },\r\n                    isShown: false,\r\n\r\n                    show: function (target) {\r\n                        if (!this.isShown) {\r\n\r\n                            var prn = scope.$parent;\r\n                            while (prn != null) {\r\n                                if (prn.hasOwnProperty(prnModel)) {\r\n                                    scope.model = prn[prnModel];\r\n                                    break;\r\n                                }\r\n                                prn = prn.$parent;\r\n                            }\r\n\r\n                            scope.currentValue = scope.model.data;\r\n                            scope.options = Object.keys(scope.model.data);\r\n                            scope.currentLevel = 0;\r\n                            scope.compiledContent = $compile(ht)(scope);\r\n                            scope.compiledTitle = $compile(title)(scope);\r\n                            //scope.dlg = $(target);\r\n\r\n                            scope.showDialog();\r\n                            this.isShown = true;\r\n                        }\r\n                    },\r\n                    hide: function () {\r\n                        if (this.isShown) {\r\n                            scope.hideDialog();\r\n                            this.isShown = false;\r\n                        }\r\n                    }\r\n                };\r\n\r\n                scope.closeDialog = function () {\r\n                    //this.isShown = false;\r\n                    $rootScope.$broadcast('modal.dialog.hide');\r\n                    //scope.hideDialog();\r\n                };\r\n\r\n                scope.callback = function () {\r\n                    if (scope.currentLevel > 0) {\r\n\r\n                        // scope.$modal.one('hidden.bs.modal', function () {\r\n\r\n                        //     if (scope.currentLevel > 1) {\r\n\r\n                        //         var parentOption;\r\n\r\n                        //         for (i in scope.currentValue) {\r\n                        //             if (scope.currentValue[i].hasOwnProperty('el')) {\r\n                        //                 parentOption = scope.currentValue[i]['el']['Option1'];\r\n                        //                 break;\r\n                        //             } else {\r\n                        //                 for (j in scope.currentValue[i]) {\r\n                        //                     parentOption = scope.currentValue[i][j]['el']['Option1'];\r\n                        //                     break;\r\n                        //                 }\r\n                        //                 break;\r\n                        //             }\r\n                        //         }\r\n\r\n                        //         scope.currentValue = scope.model.data[parentOption];\r\n                        //         scope.options = Object.keys(scope.model.data[parentOption]);\r\n                        //     } else {\r\n\r\n                        //         scope.currentValue = scope.model.data;\r\n                        //         scope.options = Object.keys(scope.model.data);\r\n                        //     }\r\n\r\n                        //     scope.currentLevel = scope.currentLevel - 1;\r\n                        //     scope.compiledContent = $compile(ht)(scope);\r\n                        //     scope.compiledTitle = $compile(title)(scope);\r\n\r\n                        //     $timeout(function () {\r\n                        //         scope.showDialog();\r\n                        //     }, 0);\r\n                        // });\r\n\r\n                        // scope.hideDialog();\r\n\r\n                        if (scope.currentLevel > 1) {\r\n\r\n                            var parentOption;\r\n\r\n                            for (i in scope.currentValue) {\r\n                                if (scope.currentValue[i].hasOwnProperty('el')) {\r\n                                    parentOption = scope.currentValue[i]['el']['Option1'];\r\n                                    break;\r\n                                } else {\r\n                                    for (j in scope.currentValue[i]) {\r\n                                        parentOption = scope.currentValue[i][j]['el']['Option1'];\r\n                                        break;\r\n                                    }\r\n                                    break;\r\n                                }\r\n                            }\r\n\r\n                            scope.currentValue = scope.model.data[parentOption];\r\n                            scope.options = Object.keys(scope.model.data[parentOption]);\r\n                        } else {\r\n\r\n                            scope.currentValue = scope.model.data;\r\n                            scope.options = Object.keys(scope.model.data);\r\n                        }\r\n\r\n                        scope.currentLevel = scope.currentLevel - 1;\r\n                        scope.compiledContent = $compile(ht)(scope);\r\n                        scope.compiledTitle = $compile(title)(scope);\r\n\r\n                    } else {\r\n                        scope.ngmOptionsCallback().apply(this, arguments);\r\n                    }\r\n                };\r\n\r\n                var prn = scope.$parent;\r\n                while (prn != null) {\r\n                    if (prn.hasOwnProperty(prnVar)) {\r\n                        prn[prnVar] = scope.ngmOptionsDialog;\r\n                        break;\r\n                    }\r\n                    prn = prn.$parent;\r\n                }\r\n            };\r\n        }\r\n        ])\r\n.directive('overwriteEmail', function () {\r\n    var EMAIL_REGEXP = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n\r\n    return {\r\n        require: '?ngModel',\r\n        link: function (scope, elm, attrs, ctrl) {\r\n            // only apply the validator if ngModel is present and AngularJS has added the email validator\r\n            if (ctrl && ctrl.$validators.email) {\r\n\r\n                // this will overwrite the default AngularJS email validator\r\n                ctrl.$validators.email = function (modelValue) {\r\n                    return ctrl.$isEmpty(modelValue) || EMAIL_REGEXP.test(modelValue);\r\n                };\r\n            }\r\n        }\r\n    };\r\n})\r\n.directive('removeNgEmailValidation', function(){\r\n    return {\r\n        require : 'ngModel',\r\n        link : function(scope, element, attrs, ngModel) {\r\n            ngModel.$validators[\"email\"] = function () {\r\n                return true;\r\n            };\r\n        }\r\n    }\r\n})\r\n.directive('ngmMoveFocusTo', ['configService', '$timeout', function (configService, $timeout) {\r\n    return function (scope, elem, attrs) {\r\n        var target = !!attrs.ngmMoveFocusTo ? $(attrs.ngmMoveFocusTo) : elem;\r\n        console.log('ngmMoveFocusTo: ' + attrs.ngmMoveFocusTo);\r\n        console.log(target);\r\n\r\n        var fun = null;\r\n        if (!!elem.data() && !!elem.data().$scope) {\r\n            fun = elem.data().$scope[attrs.ngmMoveFocusTo];\r\n            if (typeof (fun) !== 'function')\r\n                fun = null;\r\n        }\r\n\r\n        elem.focus(function (e) {\r\n            console.log('element got focus: ');\r\n            console.log(e);\r\n            e.preventDefault();\r\n            if (!!fun) {\r\n                $timeout(function () {\r\n                    fun(e);\r\n                }, 100);\r\n            }\r\n            else\r\n                target.focus();\r\n\r\n            //if (configService.isMobile) {\r\n            //    Keyboard.show();\r\n            //}\r\n        });\r\n    };\r\n}])\r\n.directive('equalToValidator', function () {\r\n    return {\r\n        require: 'ngModel',\r\n        link: function (scope, elm, attrs, ngModelCtrl) {\r\n\r\n            ngModelCtrl.$validators.equalToValidator = function (modelValue, viewValue) {\r\n                var checkedVal = attrs.equalToValidator;\r\n                var thisInputVal = viewValue;\r\n\r\n                if (thisInputVal == checkedVal) {\r\n                    return true; // valid\r\n                } else {\r\n                    return false;\r\n                }\r\n            };\r\n        }\r\n    };\r\n}).directive('ngmClearOnFirstKey', function () {\r\n    return function (scope, element, attrs) {\r\n\r\n        element.attr('ngm-enter-pressed', 'false');\r\n\r\n        element.bind(\"keydown keypress\", function (event) {\r\n            var isEnterPressed = element.attr('ngm-enter-pressed') === 'true';\r\n            console.log('key event: ' + event.which);\r\n\r\n            if (event.which === 13) {\r\n                element.attr('ngm-enter-pressed', 'true');\r\n            }\r\n            else if (isEnterPressed) {\r\n                var idx = [8, 9, 37, 38, 39, 40, 46, 17, 18, 19, 20].indexOf(event.which);\r\n                if (idx < 0) {\r\n                    element.val(\"\");\r\n                }\r\n\r\n                element.attr('ngm-enter-pressed', 'false');\r\n            }\r\n        });\r\n    };\r\n}).directive('ngmRedirectChangeEvent', function () {\r\n    return function (scope, element, attrs, $timeout) {\r\n        var SCOPE = scope;\r\n        var mdl = attrs.ngModel;\r\n        var lst = scope[attrs.ngmRedirectChangeEvent];\r\n\r\n        element.bind(\"change\", function (event) {\r\n            console.log('changed');\r\n            var text = element.parent().find('div.jq-selectbox__select-text').text();\r\n            var sItem = lst.filter(function (el) { return el.name == text; });\r\n            SCOPE[mdl] = sItem[0].value;\r\n            //  SCOPE.$broadcast('select.styled.updated', { id: element[0].id, value:element[0].value });\r\n        });\r\n    };\r\n})\r\n.directive('bootstrapSwitch', ['$timeout', function ($timeout) {\r\n    return {\r\n        restrict: 'A',\r\n        scope: {\r\n            model: '=ngModel'\r\n        },\r\n        link: linker\r\n    }\r\n\r\n    function linker(scope, element, attrs, ngModel) {\r\n\r\n        $timeout(function () {\r\n            var v = scope.model == true;\r\n            element.bootstrapSwitch({ state: v }); // set initial value\r\n            element.bootstrapSwitch('state', v == true);\r\n\r\n            element.on('switchChange.bootstrapSwitch', function (event, state) {\r\n                $timeout(function () {\r\n                    scope.model = state;\r\n                    var frm = $(element).closest('form');\r\n                    var scp = element.scope();\r\n                    if(!!frm) {\r\n                        var n = frm.attr('name');\r\n                        if(!!n && typeof(scp[n].$setDirty) === 'function')\r\n                            scp[n].$setDirty();\r\n                    }\r\n                })\r\n                //scope.$apply(function () {\r\n                //    scope.model = state;\r\n                //});\r\n            });\r\n\r\n            //                        scope.evt = scope.$root.$on('popup.show', function (evt) {\r\n            //                                var model = scope.model;\r\n\r\n            //                                $timeout(function () {\r\n            ////                                    var SCOPE = scope;\r\n            //                                    var mname = attrs.ngModel;\r\n            //                                    var v = model;\r\n            //                                    element.bootstrapSwitch('state', v == true, false);\r\n            //                                    console.log('check: '+mname+' value: '+v);\r\n            //                                });\r\n            //                        });\r\n\r\n            scope.$on(\r\n                \"$destroy\",\r\n                function handleDestroyEvent() {\r\n                    //   scope.evt();\r\n                }\r\n            );\r\n\r\n            scope.$watch('model', function (newValue, oldValue) {\r\n                if (newValue != oldValue)\r\n                    element.bootstrapSwitch('state', newValue == true, false);\r\n            });\r\n        });\r\n\r\n    }\r\n}])\r\n.directive('ngmCollapse', ['$rootScope', 'helperService', function ($rootScope, helperService) {\r\n    return {\r\n        restrict: 'A',\r\n        scope: {\r\n            model: '=ngmCollapse'\r\n        },\r\n        link: linker\r\n    };\r\n\r\n    function linker(scope, element, attrs) {\r\n        scope.THIS = scope;\r\n        scope.el = element;\r\n        scope.showValue = !!attrs.ngmShowValue ? attrs.ngmShowValue.split(\",\") : \"\";\r\n        scope.showModal = attrs.ngmShowModal == 'true';\r\n\r\n        scope.evt = $(element).on('show.bs.collapse', function (evt) {\r\n            if (scope.showModal) {\r\n                //                $('#mainAppContainerBody').css('overflow', 'unset');\r\n                $(element).find('.dp_add-head__wrap').addClass('dp_add-head__wrap_modal_fix');\r\n            }\r\n        });\r\n        scope.evt = $(element).on('shown.bs.collapse', function (evt) {\r\n            $rootScope.$broadcast('view.loaded', scope.model);\r\n        });\r\n\r\n        scope.evt = $(element).on('hidden.bs.collapse', function (evt) {\r\n            if (scope.showModal) {\r\n                //              $('#mainAppContainerBody').css('overflow', 'hidden');\r\n                $(element).find('.dp_add-head__wrap').removeClass('dp_add-head__wrap_modal_fix');\r\n            }\r\n        });\r\n\r\n        scope.$on(\r\n            \"$destroy\",\r\n            function handleDestroyEvent() {\r\n                scope.evt.off();\r\n            }\r\n        );\r\n\r\n        scope.$watch(\"model\", function (newVal, oldVal) {\r\n            //  console.log(\"Changed\");\r\n\r\n            if (newVal != oldVal) {\r\n\r\n                if (scope.showValue.indexOf(newVal) >= 0) { // show\r\n                    scope.el.collapse('show');\r\n                }\r\n                else { // hide\r\n                    scope.el.collapse('hide');\r\n                }\r\n            }\r\n        });\r\n    }\r\n}])\r\n.directive(\"refreshTable\", function () {\r\n    return {\r\n        require: 'stTable',\r\n        restrict: \"A\",\r\n        link: function (scope, elem, attrs, table) {\r\n\r\n            var evtName = !!attrs.refreshTable ? attrs.refreshTable : \"refreshStTable\";\r\n\r\n            scope.$on(evtName, function () {\r\n                table.pipe(table.tableState());\r\n            });\r\n        }\r\n    }\r\n})\r\n .directive('stSelectCombo', [function () {\r\n     return {\r\n         restrict: 'A',\r\n         require: '^stTable',\r\n         scope: {\r\n             ngModel: '=',\r\n             stSelectCombo: '@'\r\n         },\r\n         link: function (scope, element, attr, table) {\r\n\r\n\r\n             scope.$watch('ngModel', function (newValue, oldValue) {\r\n\r\n                 if (newValue != oldValue) {\r\n                     var query = {};\r\n                     if (!!newValue)\r\n                         query.distinct = newValue;\r\n                     else\r\n                         query.distinct = null;\r\n\r\n                     table.search(query, scope.stSelectCombo);\r\n                 }\r\n             }, true);\r\n         }\r\n     }\r\n }])\r\n .directive('stPageSelector', [function () {\r\n     return {\r\n         restrict: 'A',\r\n         require: '^stTable',\r\n         scope: {\r\n             stPageSelector: '=',\r\n             pageSize: '=',\r\n             total: '='\r\n         },\r\n         link: function (scope, element, attr, table) {\r\n             function redraw(paginationState, page) {\r\n                 var pages = Math.floor((paginationState.totalItemCount + scope.pageSize - 1) / scope.pageSize);\r\n\r\n                 if (page > 0 && page <= pages) {\r\n                     table.slice((page - 1) * scope.pageSize, scope.pageSize);\r\n                 }\r\n                 else {\r\n                     table.slice(0, scope.pageSize);\r\n                 }\r\n             };\r\n\r\n             var evtName = !!attr.stPageUpdater ? attr.stPageUpdater : \"updater.event\";\r\n\r\n             scope.$on(evtName, function () {\r\n                 var paginationState = table.tableState().pagination;\r\n                 scope.total = paginationState.totalItemCount;\r\n\r\n                 redraw(paginationState, scope.stPageSelector);\r\n             });\r\n\r\n             scope.$watch('stPageSelector', function (newValue, oldValue) {\r\n\r\n                 if (newValue != oldValue) {\r\n                     var paginationState = table.tableState().pagination;\r\n                     scope.total = paginationState.totalItemCount;\r\n\r\n                     redraw(paginationState, scope.stPageSelector);\r\n                 }\r\n             }, true);\r\n\r\n         }\r\n     }\r\n }])\r\n.directive('ngmShowLoaded', ['constants', function (constants) {\r\n    return function (scope, elem, attrs, $rootScope) {\r\n\r\n        scope.evt = scope.$root.$on('view.ready', function (evt) {\r\n            $(elem).removeClass('hidden');\r\n        });\r\n\r\n        scope.$on(\r\n            \"$destroy\",\r\n            function handleDestroyEvent() {\r\n                if (typeof (scope.evt) == 'function')\r\n                    scope.evt();\r\n            }\r\n        );\r\n    };\r\n}])\r\n.directive(\"ngMobileClick\", ['$location','$timeout','$parse',function ($location,$timeout,$parse) {\r\n    return function (scope, elem, attrs) {\r\n        scope.preventClick = false;\r\n        scope.isTouchmove = false;\r\n        scope.moveMoment = null;\r\n\r\n        elem.bind(\"touchstart\", function (e) {\r\n            scope.isTouchmove = false;\r\n            window.lastFocusedElement = document.activeElement;\r\n            // e.preventDefault();\r\n            // e.stopPropagation();\r\n            // return false;\r\n        });\r\n\r\n        elem.bind(\"touchmove\", function (e) {\r\n            scope.isTouchmove = true;\r\n\r\n            if(scope.moveMoment === null)\r\n                scope.moveMoment = e.timeStamp;\r\n            // e.preventDefault();\r\n            // e.stopPropagation();\r\n            //return false;\r\n        }); \r\n\r\n        elem.bind(\"touchend click\", function (e) {\r\n            if (e.cancelable == true) {\r\n                e.preventDefault();\r\n                e.stopPropagation();\r\n            }\r\n\r\n            if(scope.isTouchmove && e.timeStamp - scope.moveMoment < 80){\r\n                scope.isTouchmove = false;                \r\n            }\r\n            scope.moveMoment = null;\r\n\r\n            var stopPropagation = $(e.target).attr(\"stopPropagation\") === \"true\";\r\n\r\n\r\n            var isDisabled = $(e.currentTarget).is(':disabled');\r\n            if (isDisabled != true && !stopPropagation) {\r\n                var fn = $parse(attrs[\"ngMobileClick\"]);\r\n\r\n                if (e.type == \"touchend\") {\r\n                    \r\n                    if (scope.isTouchmove == false) {    \r\n                        scope.preventClick = true;                    \r\n                        $timeout(function () {\r\n                            \r\n                            scope.$apply(function() {\r\n                                fn(scope, {$event:e});\r\n                            });\r\n\r\n                            var href = attrs[\"href\"];\r\n                            if (href && href !='javascript:;'){\r\n                                $location.path(href.replace('#','/'));\r\n                            }\r\n                        },0);\r\n                    }\r\n\r\n                    scope.isTouchmove = false;\r\n                } else if (e.type == \"click\") {\r\n                    // Handle click event.\r\n                    if (scope.preventClick !== true) {\r\n                        $timeout(function () {\r\n                            scope.$apply(function() {\r\n                                fn(scope, {$event:e});\r\n                            });\r\n                            var href = attrs[\"href\"];\r\n                            if (href && href != 'javascript:;'){\r\n                                \r\n                                    $location.path(href.replace('#','/'));\r\n                            \r\n                            }\r\n                        },0);\r\n                    }\r\n\r\n                    scope.preventClick = false;\r\n                }\r\n            }\r\n\r\n            if (e.cancelable == true) {\r\n                return false;\r\n            }\r\n            else {\r\n                return true;\r\n            }\r\n        });\r\n    }\r\n}])\r\n.directive(\"ngmResizeEvent\", ['$rootScope', function ($rootScope) {\r\n    return function (scope, elem, attrs) {\r\n        scope.eventToFire = 'resize.watch.event';\r\n        scope.root = $rootScope;\r\n        scope.resizeFun = function () {\r\n            scope.root.$broadcast(scope.eventToFire, {\r\n                element: elem\r\n            });\r\n        };\r\n\r\n        elem.resize(scope.resizeFun);\r\n\r\n        scope.$on(\"$destroy\", function handleDestroyEvent() {\r\n            elem.removeResize(scope.resizeFun);\r\n        });\r\n    }\r\n}])\r\n.directive('ngmDateRangeSelector',\r\n    ['$filter', 'helperService', 'configService', '$timeout', 'gettextCatalog', 'errorService',\r\n    function ($filter, helperService, configService, $timeout, gettextCatalog, errorService) {\r\n        var directive = {\r\n            link: link,\r\n            transclude: true,\r\n            restrict: 'E',\r\n            templateUrl: dateRangeSelector,\r\n            scope: {\r\n                dateFrom: '=dateFrom',\r\n                dateTo: '=dateTo',\r\n                dateLimit: '=dateLimit',\r\n                dateSelectedCallback: '&'\r\n            }\r\n        };\r\n\r\n        return directive;\r\n\r\n        function link(scope, element, attrs) {\r\n\r\n            scope.filters = {\r\n                FormatedDateRange: null,\r\n                DateFrom: scope.dateFrom,\r\n                DateTo: scope.dateTo\r\n            }\r\n        scope.allowReset = false;\r\n        if(attrs.allowReset === \"true\") {\r\n            scope.allowReset = true;\r\n        }\r\n\r\n\r\n            function checkApplyButtonDisabled() {\r\n                scope.disableApplyButton = attrs.bothDatesRequired === \"true\" && (typeof (scope.filters.DateTo) === \"undefined\" || typeof (scope.filters.DateFrom) === \"undefined\");\r\n            }\r\n\r\n            checkApplyButtonDisabled();\r\n\r\n            scope.dateFormat = helperService.getDateByFormatForMoment();\r\n\r\n            scope.translatePredefinedDateRanges = function () {\r\n            var res;\r\n            \r\n            if (attrs.dateDelivery === \"true\") {\r\n                res = [\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Today\"),\r\n                        Code: \"Today\",\r\n                        DateFrom: moment.utc().format(scope.dateFormat),\r\n                        DateTo: moment.utc().format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Yesterday\"),\r\n                        Code: \"Yesterday\",\r\n                        DateFrom: moment.utc().add(-1, 'd').format(scope.dateFormat),\r\n                        DateTo: moment.utc().add(-1, 'd').format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Next 7 days\"),\r\n                        Code: \"Next 7 Days\",\r\n                        DateFrom: moment.utc().format(scope.dateFormat),\r\n                        DateTo: moment.utc().add(7, 'd').format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Last 7 days\"),\r\n                        Code: \"Last 7 Days\",\r\n                        DateFrom: moment.utc().add(-7, 'd').format(scope.dateFormat),\r\n                        DateTo: moment.utc().format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Next 30 days\"),\r\n                        Code: \"Next 30 Days\",\r\n                        DateFrom: moment.utc().format(scope.dateFormat),\r\n                        DateTo: moment.utc().add(30, 'd').format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Last 30 days\"),\r\n                        Code: \"Last 30 Days\",\r\n                        DateFrom: moment.utc().add(-30, 'd').format(scope.dateFormat),\r\n                        DateTo: moment.utc().format(scope.dateFormat)\r\n                    }\r\n                ];\r\n            } else {\r\n                res = [\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Today\"),\r\n                        Code: \"Today\",\r\n                        DateFrom: moment.utc().format(scope.dateFormat),\r\n                        DateTo: moment.utc().format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Yesterday\"),\r\n                        Code: \"Yesterday\",\r\n                        DateFrom: moment.utc().add(-1, 'd').format(scope.dateFormat),\r\n                        DateTo: moment.utc().add(-1, 'd').format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Last 7 days\"),\r\n                        Code: \"Last 7 Days\",\r\n                        DateFrom: moment.utc().add(-7, 'd').format(scope.dateFormat),\r\n                        DateTo: moment.utc().format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Last 30 days\"),\r\n                        Code: \"Last 30 Days\",\r\n                        DateFrom: moment.utc().add(-30, 'd').format(scope.dateFormat),\r\n                        DateTo: moment.utc().format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Last month\"),\r\n                        Code: \"Last Month\",\r\n                        DateFrom: moment().subtract(1, 'month').date(1).format(scope.dateFormat),\r\n                        DateTo: moment.utc().date(1).subtract(1, 'day').format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Last 90 days\"),\r\n                        Code: \"Last 90 Days\",\r\n                        DateFrom: moment.utc().add(-90, 'd').format(scope.dateFormat),\r\n                        DateTo: moment.utc().format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Last quarter\"),\r\n                        Code: \"Last Quarter\",\r\n                        DateFrom: moment.utc().month(moment.utc().month() - (moment.utc().month() % 3)).subtract(3, 'month').date(1).format(scope.dateFormat),\r\n                        DateTo: moment.utc().month(moment.utc().month() - (moment.utc().month() % 3)).date(1).subtract(1, 'day').format(scope.dateFormat)\r\n                    },\r\n                    {\r\n                        Name: gettextCatalog.getString(\"Last financial year\"),\r\n                        Code: \"Last Financial Year\",\r\n                        DateFrom: moment().year(moment.utc().year() - 1).month(0).date(1).format(scope.dateFormat),\r\n                        DateTo: moment().year(moment.utc().year()).month(0).date(1).subtract(1, 'day').format(scope.dateFormat),\r\n                    }\r\n                ];\r\n            }\r\n\r\n                if(scope.dateLimit) {\r\n                    var res2 = [];\r\n\r\n                    var idx = 0;\r\n\r\n                    while(idx<res.length) {\r\n                        res2.push(res[idx]);\r\n\r\n                        if(res[idx].Code == scope.dateLimit)\r\n                        break;\r\n\r\n                    idx++;\r\n                    }\r\n\r\n                    res = res2;\r\n                }\r\n\r\n                return res;\r\n            };\r\n\r\n            scope.$on('changeLanguage', function (event) {\r\n                scope.dateRanges = scope.translatePredefinedDateRanges();\r\n            });\r\n\r\n            $timeout(function () {\r\n                var datePickerFormat = helperService.getDateByFormatForDatePickers();\r\n                helperService.setDatepicker(datePickerFormat, '#date-selector-from', 'dateRangeCalendar');\r\n                helperService.setDatepicker(datePickerFormat, '#date-selector-to', 'dateRangeCalendar');\r\n            });\r\n\r\n            scope.dateRanges = scope.translatePredefinedDateRanges();\r\n\r\n            scope.showDateSelector = function () {\r\n                $(\".date-selector\").show();\r\n                $('.jq-selectbox__dropdown').hide();\r\n                $('.jq-selectbox__dropdown').css({ 'display': 'none' });\r\n            }\r\n\r\n            scope.setDateRange = function (range) {\r\n                scope.filters.DateFrom = range.DateFrom;\r\n                scope.filters.DateTo = range.DateTo;\r\n            }\r\n\r\n            scope.hideDateSelector = function (keepData) {\r\n                if (!keepData) {\r\n                    scope.filters.DateFrom = scope.dateFrom;\r\n                    scope.filters.DateTo = scope.dateTo;\r\n                }\r\n                $(\".date-selector\").hide();\r\n            }\r\n\r\n            scope.$watch('dateTo',\r\n                function (newValue, oldValue) {\r\n                    scope.filters.DateTo = newValue;\r\n\r\n                    updateDateRangePlaceholder();\r\n                }\r\n            );\r\n\r\n            scope.$watch('dateFrom',\r\n                function (newValue, oldValue) {\r\n                    scope.filters.DateFrom = newValue;\r\n\r\n                    updateDateRangePlaceholder();\r\n                }\r\n            );\r\n\r\n            scope.$watch('filters.DateFrom',\r\n                function (newValue, oldValue) {\r\n                    checkApplyButtonDisabled();\r\n                }\r\n            );\r\n\r\n            scope.$watch('filters.DateTo',\r\n                function (newValue, oldValue) {\r\n                    checkApplyButtonDisabled();\r\n                }\r\n            );\r\n\r\n            function updateDateRangePlaceholder() {\r\n                if (scope.filters.DateFrom && scope.filters.DateTo)\r\n                    scope.filters.FormatedDateRange = moment(scope.filters.DateFrom, scope.dateFormat).format(\"DD MMM\")\r\n                    + ' - ' + moment(scope.filters.DateTo, scope.dateFormat).format(\"DD MMM\");\r\n                else if (scope.filters.DateTo)\r\n                    scope.filters.FormatedDateRange = 'to ' + moment(scope.filters.DateTo, scope.dateFormat).format(\"DD MMM\");\r\n                else if (scope.filters.DateFrom)\r\n                    scope.filters.FormatedDateRange = 'from ' + moment(scope.filters.DateFrom, scope.dateFormat).format(\"DD MMM\");\r\n                else\r\n                    scope.filters.FormatedDateRange = null;\r\n            }\r\n\r\n            scope.apply = function () {\r\n            if(scope.dateLimit) {\r\n                // TODO implement other filters\r\n                if(scope.dateLimit == 'Last Month') {\r\n                    var days = parseInt((moment(scope.filters.DateTo, scope.dateFormat)-moment(scope.filters.DateFrom, scope.dateFormat))/(24*3600*1000));        \r\n                    if(days>31) {\r\n                        errorService.showError(gettextCatalog.getString(\"Query period should not exceed 31 days.\"));\r\n                        return;\r\n                    }\r\n                }\r\n            }\r\n\r\n                $timeout(function () {\r\n                    scope.dateFrom = scope.filters.DateFrom;\r\n                    scope.dateTo = scope.filters.DateTo;\r\n                    scope.dateSelectedCallback({ from: scope.dateFrom, to: scope.dateTo });\r\n                });\r\n                scope.hideDateSelector(true);\r\n            }\r\n\r\n\r\n            scope.reset = function() {\r\n            $timeout(function(){\r\n                scope.dateFrom = null;\r\n                scope.dateTo = null;\r\n                scope.dateSelectedCallback({from: scope.dateFrom, to: scope.dateTo});   \r\n            });                                     \r\n            scope.hideDateSelector(true);\r\n            };\r\n\r\n            scope.monthLimit = false;\r\n\r\n            scope.setMonthLimit = function(period) {\r\n            scope.monthLimit = true;\r\n            };\r\n        };\r\n    }\r\n])\r\n.directive(\"ngmFilterPanel\", ['helperService',function (helperService) {\r\n    return function (scope, elem, attrs) {\r\n        scope.preventClick = false;\r\n\r\n        var el = elem;\r\n\r\n        elem.find('.m-filter-link-container').bind(\"touchend click\", function (e) {\r\n            e.preventDefault();\r\n            e.stopPropagation();\r\n\r\n            if (e.type == \"touchend\") {\r\n                scope.preventClick = true;\r\n                elem.toggleClass('open');\r\n            } else if (e.type == \"click\") {\r\n                // Handle click event.\r\n                if (scope.preventClick !== true) {\r\n                    elem.toggleClass('open');\r\n                }\r\n\r\n                scope.preventClick = false;\r\n            }\r\n\r\n            updateContentHeight();\r\n\r\n            return false;\r\n        });\r\n\r\n        elem.find('.m-filter-overlay, .m-filter-close-button').bind(\"touchend click\", function (e) {\r\n            setTimeout(function(){\r\n                e.preventDefault();\r\n                e.stopPropagation();      \r\n\r\n                if (e.type == \"touchend\") {\r\n                    scope.preventClick = true;\r\n                    elem.removeClass('open');\r\n                } else if (e.type == \"click\") {\r\n                    // Handle click event.\r\n                    if (scope.preventClick !== true) {\r\n                        elem.removeClass('open');\r\n                    }\r\n\r\n                    scope.preventClick = false;\r\n                }\r\n\r\n                return false;\r\n            }, 0);\r\n            \r\n        });\r\n\r\n        elem.find('.m-filter-content-wrapper').bind(\"touchend click\", function (e) {\r\n            setTimeout(function(){\r\n                e.preventDefault();\r\n                e.stopPropagation();      \r\n                return false;\r\n            }, 0);\r\n        });\r\n\r\n        function updateContentHeight() {\r\n            console.log('ngmFilterPanel resize');\r\n            //m-filter-content\r\n            var $content = $(\".m-filter-content\", el);\r\n            var $contentWrapper = $('.m-filter-content-wrapper', el);\r\n            var contentTop = $content.offset().top;\r\n            var contentHeight = $contentWrapper.outerHeight();\r\n            var screenHeight = window.innerHeight;\r\n            var bottomMargin = 5\r\n\r\n            if (contentHeight + contentTop > screenHeight) {\r\n                $content.outerHeight(screenHeight - contentTop - bottomMargin);\r\n            }\r\n            else {\r\n                $content.css('height','');\r\n            }\r\n        }\r\n\r\n        scope.evt1 = $(window).on(\"resize\", updateContentHeight);\r\n    }\r\n}])\r\n.directive(\"inputNoKbd\", [function () {\r\n    return function (scope, elem, attrs) {\r\n\r\n        var el = elem;\r\n\r\n        scope.evt1 = el.on(\"focus\", function () {\r\n          //  console.log('focus');\r\n            if (window.passKeyboard !== true)\r\n                el[0].readOnly = true;\r\n        });\r\n\r\n        scope.evt2 = el.on(\"focusin\", function () {\r\n         //   console.log('focusin');\r\n            setTimeout(function () {\r\n                el[0].readOnly = false;\r\n                window.passKeyboard = false;\r\n            }, 50);\r\n        });\r\n\r\n        scope.evt3 = el.on(\"click\", function () {\r\n         //   console.log('click');\r\n            el[0].readOnly = false;\r\n        });\r\n\r\n        //el.bind(\"keydown\", function (e) {\r\n        //    console.log('keydown');\r\n        //    if (e.which === 9) {\r\n        //        window.passKeyboard = true;\r\n        //    }\r\n        //});\r\n\r\n        scope.$on(\r\n            \"$destroy\",\r\n            function handleDestroyEvent() {\r\n                scope.evt1.off();\r\n                scope.evt2.off();\r\n                if (typeof(scope.evt3.off) === 'function')\r\n                    scope.evt3.off();\r\n            }\r\n        );\r\n    };\r\n}])\r\n.directive(\"afterRender\", [\"$timeout\", function ($timeout) {\r\n    var def = {\r\n        restrict: \"A\",\r\n        terminal: true,\r\n        transclude: false,\r\n        link: function (scope, element, attrs) {\r\n          $timeout(scope.$eval(attrs.afterRender), 0);\r\n        },\r\n    };\r\n    return def;\r\n}])\r\n.directive(\"touchTooltip\", ['$window', function ($window) {\r\n    return function (scope, elem, attrs) {       \r\n        var opacity = 0.7;\r\n\r\n        elem.on('click', function() {\r\n           var tip = $(\"body\").find('.tootip');\r\n            if (!!tip && tip.length) {\r\n                tip.remove();\r\n                tip = null;\r\n            }\r\n            tip = $('<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\">'+ elem.attr('title') +'</div></div>');\r\n            \r\n            $element = $(elem);\r\n            var off = $element.offset();\r\n\r\n            tip.css({visibility: 'hidden'});\r\n            \r\n            tip.appendTo($(\"body\"));\r\n            tip.css({\r\n                left: (off.left + ($element.width() / 2) - (tip.width()/2)) + 'px',\r\n                top: (off.top - tip.height() - 5) + 'px'\r\n            });\r\n            tip.css({opacity: opacity});\r\n            \r\n            tip.css({visibility: 'visible'});\r\n        });\r\n    }\r\n}]);","angular.module('services').service('emailService', [\r\n    '$q', '$http', 'configService', 'remoteRequestProvider', 'localDBProvider',\r\n    function ($q, $http, configService, remoteRequestProvider, localDBProvider) {\r\n\r\n        this.extractOrderIDs = function(sale) {\r\n            var res = {};\r\n            res.orderID = !!sale.newRefundOrder ? \r\n                            sale.newRefundOrder : \r\n                            sale.ID;\r\n            // sale.ID is always main initial sale. It is required to get sale task \r\n            // except standalone refund, in email controller\r\n            res.baseOrderID = sale.standAloneReturn === true ? sale.newRefundOrder : sale.ID;  \r\n    \r\n            return res;\r\n        };\r\n\r\n\r\n        this.sendEmailReceipt = function (orderID, baseOrderID, email, emailSubject, emailBody, ignoreOrderID, templateID, documentBody) {\r\n            var deffered = $q.defer();\r\n\r\n            var pr;\r\n            if (configService.isOnline || ignoreOrderID===true) {\r\n                pr = remoteRequestProvider.sendEmailReceipt(orderID, baseOrderID, email, emailSubject, emailBody, ignoreOrderID, templateID, documentBody);\r\n            }\r\n            else {\r\n                pr = localDBProvider.storeEmailReceipt(orderID, baseOrderID, email, emailSubject, emailBody, templateID);\r\n            }\r\n\r\n            pr.then(function (result) {\r\n                deffered.resolve(result.data);\r\n            }, function (err) {\r\n                deffered.reject(err);\r\n            });\r\n\r\n            return deffered.promise;\r\n        };\r\n\r\n        this.setEmailToken = function (template) {\r\n            var hiddenToken = $('<div id=\"4631010d-f058-41e8-81d7-0f7c866f9c27\" style=\"display: none;\"></div>');\r\n            var emailTemplate = $(template);\r\n            hiddenToken.appendTo(emailTemplate);\r\n            return emailTemplate;\r\n        }\r\n    }]);\r\n","import './constants.js';\r\n\r\nimport './configEnvironment.js';\r\nimport './directives.js';\r\nimport './pipes.js';\r\n\r\nimport './csvService.js';\r\n\r\nimport './configService.js';\r\nimport './helperService.js';\r\nimport './remoteRequestProvider.js';\r\nimport './localDBProvider.js';\r\nimport './jsStoreProvider.js';\r\nimport { PendoService } from './pendoService';\r\nimport './loginService';\r\n\r\n// load Pendo script \r\nPendoService.loadPendoScript();\r\nimport './errorService.js';\r\nimport './outletService.js';\r\nimport './productsService.js';\r\nimport './saleService.js';\r\nimport './receiptService.js';\r\nimport './customerService.js';\r\nimport './registryService.js';\r\nimport './orderStatusService.js';\r\nimport './emailService.js';\r\nimport './printService.js';\r\nimport './labelPrintService.js';\r\nimport './userManagementService.js';\r\nimport './productManagementService.js';\r\nimport './labelService.js';\r\nimport './dbUpdatesService.js';\r\nimport './cashManagementService.js';\r\nimport './cacheService.js';\r\nimport './webOnlyProvider.js';\r\nimport './cardPayService';\r\nimport './cloverReaderProvider.js';\r\nimport './squareReaderProvider.js';\r\nimport './tyroReaderProvider.js';\r\nimport './triPOSReaderProvider.js';\r\nimport './linklyPaymentReaderProvider.js';\r\nimport './paymentSenseReaderProvider.js';\r\nimport './keyPressDelayService.js';\r\nimport './liveSearchService.js';\r\nimport './stockTakeService.js';\r\nimport './soundService.js';\r\nimport './dataChangeNotificationService.js';\r\nimport './requestInterceptors.js';\r\nimport './reportService.js';\r\nimport './fontMeasureService.js';\r\nimport './fileDownloadService.js';\r\nimport './filtersService.js';\r\nimport './barcodeService.js';\r\nimport './homeController.js';\r\nimport './sideBarController.js';\r\nimport './headerController.js';\r\nimport './sellController.js';\r\nimport './addSurchargeController.js';\r\nimport './loginController';\r\nimport './changePasswordController.js';\r\nimport './selectOutletRegistryController.js';\r\nimport './addCustomerController.js';\r\nimport './offlineSalesController.js';\r\nimport './salesHistoryController.js';\r\nimport './openCloseRegistryController.js';\r\nimport './cashManagementController.js';\r\nimport './salesParkedController.js';\r\nimport './customersController.js';\r\nimport './userManagementController.js';\r\nimport './dashboardController.js';\r\nimport './productManagementController.js';\r\nimport './setupController.js';\r\nimport './setPinController.js';\r\nimport './stockTakeController.js';\r\nimport './stockTransferConroller.js';\r\nimport './stockOrderingController.js';\r\nimport './stockOrderingService.js';\r\nimport './stockPurchaseOrderDetailController.js';\r\nimport './stockTransferOrderDetailController.js';\r\nimport './addStockOrderLineController.js';\r\nimport './stockFamilyProductMatrixController.js';\r\nimport './reportCloseRegistryController.js';\r\nimport './reportPaymentTypeSummaryController.js';\r\nimport './reportSalesSummaryController.js';\r\nimport './reportInventoryController.js';\r\nimport './reportInTransitController.js';\r\nimport './reportProductPerformanceController.js';\r\nimport './reportGiftCardController.js';\r\nimport './reportStoreCreditController.js';\r\nimport './reportSurchargeController.js';\r\nimport './addSalesRepresentativeController.js';\r\nimport './addSalesShippingAddressController.js';\r\nimport './clickAndCollectGridController.js';\r\nimport './clickAndCollectService.js';\r\nimport './clickAndCollectDialogController.js';\r\nimport './selectTaxController.js';\r\nimport './deliveryController.js';\r\nimport './deliveryDialogController.js';\r\nimport './deliveryCalendarController.js';\r\nimport './cameraScanController.js';\r\nimport './loyaltyService.js';\r\nimport './loyaltyLionProvider.js';\r\nimport './loyaltyDEARProvider.js';\r\n//import './setPasswrodController.js';\r\n\r\nimport '../../TypePosScripts/Services/offline-sale.service';\r\nimport '../../TypePosScripts/Services/second-terminal.service';\r\n\r\nimport '../../TypePosScripts/Controllers/second-screen.controller';\r\nimport '../../TypePosScripts/Delivery/DeliveryHelper';\r\nimport '../../TypePosScripts/Services/google-helper.service';\r\nimport '../../TypePosScripts/Services/surcharge.service';\r\nimport '../../TypePosScripts/Services/device-info.service';\r\nimport '../../TypePosScripts/Services/msal.service';\r\nimport '../../TypePosScripts/Components/certificate-error/certificate-error.component';\r\n\r\nimport '../scss/index.scss';\r\n\r\n\r\nfunction requireAll(r) { r.keys().forEach(r); }\r\nrequireAll(require.context('../PosViews/', true, /\\.html$/));\r\nrequireAll(require.context('../PosImages/', true, /\\.(svg|png|jpg)$/));","angular.module('services').factory('errorService', [\r\n    'gettextCatalog', 'helperService',\r\n    function (gettextCatalog, helperService) {\r\n\r\n    var errorService = {};\r\n\r\n    errorService.showError = function (message, onCloseCallback, title, isCriticalError, isHTML) {\r\n        if (isHTML === undefined || isHTML === null)\r\n            isHTML = true;\r\n        var errorObject = {};\r\n        if (title)\r\n            errorObject.title = title;\r\n        else\r\n            errorObject.title = 'Error';\r\n\r\n\r\n        if (typeof message === 'string') {\r\n            errorObject.body = message;\r\n        } else {\r\n            if (!!message.config && message.config.isCancelled === true) {\r\n                errorObject.body = gettextCatalog.getString('Request to the server was cancelled.');\r\n            }\r\n            else if (message.data) {\r\n                var msd = message.data;\r\n                if (typeof (message.data) == 'string') {\r\n                    try{\r\n                        msd = JSON.parse(message.data);\r\n                    }\r\n                    catch (e) {\r\n\r\n                    }\r\n                }\r\n\r\n                if (!!msd.map)\r\n                    errorObject.body = msd.map(function (elem) { return elem.Exception !== undefined ? elem.Exception : elem }).join(', ');\r\n                else if (!!msd.exceptionMessage)\r\n                    errorObject.body = msd.exceptionMessage;\r\n                else {\r\n                    if (typeof (msd) == 'string')\r\n                        errorObject.body = msd;\r\n                    else\r\n                        errorObject.body = JSON.stringify(message.data);\r\n                }\r\n            }\r\n            else if (typeof message.message == 'string')\r\n                errorObject.body = message.message;\r\n            else if(!!message.map)\r\n                errorObject.body = message.map(function (elem) { return elem.Exception }).join(', ');\r\n            else if (!!message && !message.data && message.status == -1 && !message.statusText) {\r\n                errorObject.body = 'There is a connection problem accessing the server.<br/>Please check your internet connection';\r\n                isHTML = true;\r\n            }\r\n            else if (Array.isArray(message)) {\r\n                var text = \"\";\r\n                angular.forEach(message, function (el) {\r\n                    text += (!!text ? '<br/>' : '') + el.Exception;\r\n                });\r\n\r\n                errorObject.body = text;\r\n                isHTML = true;\r\n            }\r\n            else if (!!message.Errors && Array.isArray(message.Errors)) {\r\n                var text = \"\";\r\n                angular.forEach(message.Errors, function (el) {\r\n                    text += (!!text ? '<br/>' : '') + el.ErrorMessage;\r\n                });\r\n\r\n                errorObject.body = text;\r\n                isHTML = true;\r\n            } else if (message.result === false && !!message.response && !!message.response.errorDescription) {\r\n                errorObject.body = message.response.errorDescription;\r\n            } else {\r\n                if(!!message && !!message.config && !! message.config.url){\r\n                    errorObject.body = \"Request [\" + message.config.url + \"] status is: \" + message.status;\r\n                }\r\n                else {\r\n                    errorObject.body = \"Operation error\";\r\n                }\r\n            }\r\n        }\r\n        if (isCriticalError) {\r\n            errorObject.isCriticalError = isCriticalError;\r\n        } else {\r\n            errorObject.isCriticalError = false;\r\n        }\r\n\r\n        helperService.showErrorDialog(errorObject, onCloseCallback, isHTML);\r\n    };\r\n    \r\n    return errorService;\r\n}]);\r\n","/**\r\n * Event constants - extracted to avoid circular dependencies\r\n * These are simple string constants that don't require localization\r\n */\r\nexport const events = {\r\n    HEADER_SYNC_STATUS_EVENT: 'header.syncStatus',\r\n    STATUS_OK_AFTER_ERROR_SEND: 'okAfterErrorSend',\r\n    STATUS_ERROR_SEND_ORDER: 'errorSendOrder',\r\n    STATUS_TOO_LONG: 'tooLong',\r\n    STATUS_OK: 'ok',\r\n};\r\n","angular.module('services').service('fileDownloadService', [\r\n    '$q', 'configService', '$http', 'helperService',\r\n    function ($q, configService, $http, helperService) {\r\n\r\n        this.downloadFile = function (url, fileName, mimeType = 'application/pdf') {\r\n            if (url.indexOf('https://127.0.0.1:444') !== -1) {\r\n                url = url.replace('https://127.0.0.1:444', configService.baseURL)\r\n            }\r\n\r\n            if (configService.isSite) {\r\n                return this._downloadWeb(url, fileName);\r\n            }\r\n\r\n            if (mimeType === 'application/pdf') {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: url,\r\n                    responseType: 'blob'\r\n                });\r\n                var deferred = $q.defer();\r\n                req.then(res => {\r\n                    $.unblockUI();\r\n                    return this._blobToBase64(res.data).then(r =>  {\r\n                        return helperService.printPdf(r, fileName)\r\n                    }).then(r => {\r\n                        deferred.resolve(r);\r\n                    }).catch(err => {\r\n                        deferred.reject(err);\r\n                    });\r\n                }).catch(e => {\r\n                    $.unblockUI();\r\n                    deferred.reject(e)\r\n                    return deferred.promise;\r\n                });\r\n                return deferred.promise;\r\n            }\r\n\r\n            if (device && device.platform === 'iOS') {\r\n                return this._downloadInAppBrowser(url, fileName);\r\n            }\r\n\r\n            return this._downloadMobile(url, fileName, mimeType);\r\n        };\r\n\r\n        this._downloadMobile = function (url, fileName, mimeType) {\r\n            $.blockUI();\r\n            var req = $http({\r\n                method: 'GET',\r\n                url: url,\r\n                responseType: 'blob'\r\n            });\r\n            var deferred = $q.defer();\r\n            return req.then(res => {\r\n                try {\r\n                    var storageLocation = this._getStorageLocation();\r\n                    var folderpath = storageLocation + \"Download\";\r\n                    window.resolveLocalFileSystemURL(folderpath, function (dir) {\r\n                        dir.getFile(fileName, {\r\n                            create: true\r\n                        }, function (file) {\r\n                            file.createWriter(function (fileWriter) {\r\n                                fileWriter.write(res.data);\r\n                                fileWriter.onwriteend = function() {\r\n                                    var url = file.toURL();\r\n                                    $.unblockUI();\r\n                                    cordova.plugins.fileOpener2.open(url, mimeType, {\r\n                                      error: function error(err) {\r\n                                        console.error(err);\r\n                                        deferred.reject(err);\r\n                                      },\r\n                                      success: function success() {\r\n                                        console.log(\"success with opening the file\");\r\n                                        deferred.resolve(url);\r\n                                      }\r\n                                    });\r\n                                }\r\n                            }, function (err) {\r\n                                console.log(err);\r\n                                $.unblockUI();\r\n                                deferred.reject(err);                            \r\n                            });\r\n                        },  function (err) {\r\n                            console.log(err);\r\n                            $.unblockUI();\r\n                            deferred.reject(err);\r\n                        });\r\n                    });\r\n                } catch (e) {\r\n                    $.unblockUI();\r\n                    deferred.reject(e);\r\n                }\r\n               \r\n\r\n                return deferred.promise;\r\n            }).catch(e => {\r\n                $.unblockUI();\r\n                deferred.reject(e)\r\n                return deferred.promise;\r\n            });\r\n        };\r\n\r\n        this._downloadWeb = function (link, filename) {\r\n            var deferred = $q.defer();\r\n\r\n            var downloadLink = document.createElement(\"a\");\r\n            downloadLink.download = filename;\r\n            downloadLink.href = link;\r\n            downloadLink.style.display = \"none\";\r\n            document.body.appendChild(downloadLink);\r\n            downloadLink.click();\r\n            downloadLink.remove();\r\n\r\n            deferred.resolve(filename);\r\n            return deferred.promise;\r\n        };\r\n\r\n        this._downloadInAppBrowser = function (link, filename) {\r\n            var deferred = $q.defer();\r\n\r\n            cordova.InAppBrowser.open(link, '_blank', 'location=no');\r\n\r\n            deferred.resolve(filename);\r\n            return deferred.promise;\r\n        };\r\n\r\n        this._getStorageLocation = function () {\r\n            switch (device.platform) {\r\n                case \"Android\":\r\n                    return 'file:///storage/emulated/0/';\r\n                case \"iOS\":\r\n                    return cordova.file.documentsDirectory;\r\n            }\r\n\r\n            throw new Error('');\r\n        };\r\n\r\n        this._blobToBase64 = function(blob) {\r\n            return new Promise((resolve, _) => {\r\n                const reader = new FileReader();\r\n                reader.onloadend = () => resolve(reader.result);\r\n                reader.readAsDataURL(blob);\r\n              });\r\n        };\r\n    }\r\n]\r\n);","angular.module('services').factory('filterService', ['$filter', '$sce',\r\n    function ($filter, $sce) {\r\n        var filterService = {};\r\n\r\n        //first parameter is filter input\r\n        //other parameters are optional parameters\r\n        filterService.uibTypeaheadHighlightExFunction = function (filterInput, search, m, sel) {\r\n\r\n            var searchu = !search ? '' : search.toUpperCase();\r\n            var filterInputu = !filterInput ? '' : filterInput.toUpperCase();\r\n\r\n            // split search parts\r\n            var searchArr = filterService.splitSearchText(searchu);\r\n\r\n            // get intersections array\r\n            var intersections = filterService.findIntersections(filterInputu, searchArr);\r\n\r\n            // sort intersections\r\n            intersections = filterService.sortIntersections(intersections);\r\n\r\n            // union intersected areas\r\n            var regions = filterService.unionAllIntersections(intersections);\r\n            res = filterService.formatString(filterInput, regions); // format string\r\n            if (m) {\r\n                // init canvas to measure text width\r\n                filterService.initCanvas(m.id, sel);\r\n\r\n                // get splitted string\r\n                var adj = filterService.textToLengthAdjusted(m.model, regions);\r\n                if (adj) {\r\n                    var rhtml = '<div style=\"display:flex;width:100%;\">' +\r\n                        '<div style=\"overflow: hidden; width: 100%; text-overflow: ellipsis;\">' + adj.res + '</div>' +\r\n                        '<div style=\"overflow: hidden; width: ' + adj.w + 'px; text-overflow: ellipsis;\">' + adj.s + '</div>' +\r\n                        '</div>';\r\n\r\n                    return $sce.trustAsHtml(rhtml);\r\n                }\r\n            }\r\n\r\n            return res;\r\n        };\r\n\r\n\r\n        // this function will find very close strings that differ in nonvisible part\r\n        // and convert visual presentation to show differences\r\n        filterService.canvas = null;\r\n        filterService.context = null;\r\n        filterService.maxLineWidth = 430;\r\n\r\n        filterService.clearCanvas = function () {\r\n            filterService.canvas = null;\r\n            filterService.context = null;\r\n            filterService.maxLineWidth = 430;\r\n        };\r\n\r\n        filterService.initCanvas = function (id, sel) {\r\n            if (!filterService.canvas) {\r\n                var el = $('#' + id + ' ' + sel);\r\n\r\n                if (el.length > 0) {\r\n                    filterService.canvas = document.createElement(\"canvas\");\r\n                    filterService.context = filterService.canvas.getContext(\"2d\");\r\n                    var ff = el.css('font-family');\r\n                    var fs = el.css('font-size');\r\n                    var fw = el.css('font-weight'); // actually it seems font weight doesn't correspond in canvas\r\n                    var sfnt = 'normal ' + fw + ' ' + fs + ' ' + ff;\r\n                    filterService.context.font = sfnt;\r\n                    filterService.maxLineWidth = parseInt(el.css('max-width'));\r\n                }\r\n            }\r\n        };\r\n\r\n        filterService.textToLengthAdjusted = function (el, regions) {\r\n            // will not count <strong>. Simply set weight to sufficient big value\r\n            // for count strong we will need to extract symbols with string and normal weight and measure length separately\r\n            var text = el.name;\r\n            var width = filterService.context.measureText(text).width;\r\n            if (width <= filterService.maxLineWidth) return null;\r\n            var name = el.name;\r\n            var threeDotSpace = 30;\r\n\r\n            // modify text\r\n            // find first space\r\n            var idx = el.diffPos;\r\n            while (idx > 0 && name[idx] !== ' ') idx--;\r\n            if (idx < 0) idx = 0;\r\n            if (name[idx] === ' ') idx++;\r\n\r\n            // find word\r\n            var idx2 = el.diffPos + 1;\r\n            while (idx2 < name.length && name[idx2] !== ' ') idx2++;\r\n            if (idx2 > name.length) idx2 = name.length;\r\n\r\n            // check that first different word is visible\r\n            var s = name.substr(0, idx2);\r\n            if (filterService.context.measureText(s).width <= filterService.maxLineWidth) {\r\n                return null; // there is enough place to show difference, exit\r\n            }\r\n\r\n            s = name.substr(idx, idx2 - idx);\r\n\r\n            width = filterService.context.measureText(s).width + threeDotSpace; // extra space for three dots\r\n\r\n            if (width > filterService.maxLineWidth / 2) {\r\n                var step = Math.floor((el.diffPos + 1 - idx) / 2);\r\n                var increase = false;\r\n\r\n                while (step >= 1) {\r\n                    // there is not enough place to show entire word with difference, so will show part of the word\r\n                    if (!increase)\r\n                        idx += step;\r\n                    else\r\n                        idx -= step;\r\n\r\n                    if (idx < 0) idx = 0;\r\n                    if (idx >= idx2)\r\n                        idx = idx2 - 1;\r\n\r\n                    s = name.substr(idx, el.diffPos + 1 - idx);\r\n                    width = filterService.context.measureText(s).width;\r\n                    increase = width < (filterService.maxLineWidth / 4);\r\n                    step = Math.floor(step / 2);\r\n                }\r\n            }\r\n\r\n            if (idx >= el.diffPos)\r\n                idx = el.diffPos - 1;\r\n            if (idx < 0)\r\n                idx = 0;\r\n\r\n            s = name.substr(idx);\r\n\r\n            width = filterService.context.measureText(s).width + threeDotSpace;\r\n            if (width > filterService.maxLineWidth / 2)\r\n                width = filterService.maxLineWidth / 2;\r\n\r\n            s = filterService.formatString(s, regions, idx);\r\n\r\n            var s1 = name.substr(0, idx);\r\n            s1 = filterService.formatString(s1, regions);\r\n\r\n            return {\r\n                w: width,\r\n                s: s,\r\n                res: s1 + '...'\r\n            };\r\n        };\r\n\r\n        filterService.splitSearchText = function (str) {\r\n            var searchArr = str ? str.split(' ') : [];\r\n            var res = [];\r\n            angular.forEach(searchArr, function (s) {\r\n                if (s && s.trim())\r\n                    res.push(s.trim());\r\n            });\r\n\r\n            return res;\r\n        };\r\n\r\n        filterService.findIntersections = function (src, dst) {\r\n            var res = [];\r\n\r\n            if (!dst || !src) return res;\r\n\r\n            // enum all parts of search string\r\n            angular.forEach(dst, function (p) {\r\n                // find intersections of part and source string\r\n                var idx = 0;\r\n                while ((idx = src.indexOf(p, idx)) >= 0) {\r\n                    res.push({\r\n                        begin: idx, // get first digit match position\r\n                        end: idx + p.length // get last digit match position + 1\r\n                    });\r\n\r\n                    idx += p.length;\r\n                }\r\n            });\r\n\r\n            return res;\r\n        };\r\n\r\n        filterService.sortIntersections = function (arr) {\r\n            return arr.sort(function (a, b) {\r\n                // order by begin position, then by end position\r\n                if (a.begin < b.begin) return -1;\r\n                if (a.begin > b.begin) return 1;\r\n                if (a.end < b.end) return -1;\r\n                if (a.end > b.end) return 1;\r\n                return 0;\r\n            });\r\n        };\r\n\r\n        // to work correctly, all sections should be sorted\r\n        filterService.unionAllIntersections = function (sortedArr) {\r\n            var res = [];\r\n            angular.forEach(sortedArr, function (el) {\r\n                var k = res.length - 1;\r\n\r\n                if (k >= 0) {\r\n                    // if last element in result array intersects with current one for source array, we union them\r\n                    if (filterService.isIntersected(res[k], el)) {\r\n                        res[k] = filterService.unionIntersections(res[k], el);\r\n                    } else { // simply add element to result as it does not intersect with last result element\r\n                        res.push(el);\r\n                    }\r\n                } else { // in case of empty res, simply add first element\r\n                    res.push(el);\r\n                }\r\n            });\r\n\r\n            return res;\r\n        };\r\n\r\n        // a and b should be sorted:  a =< b\r\n        filterService.isIntersected = function (a, b) {\r\n            return a.begin <= b.begin && b.begin <= a.end;\r\n        };\r\n\r\n        filterService.unionIntersections = function (a, b) {\r\n            var el = {\r\n                begin: a.begin,\r\n                end: b.end > a.end ? b.end : a.end\r\n            };\r\n\r\n            return el;\r\n        };\r\n\r\n        filterService.formatString = function (str, regions, offsetStart) {\r\n            var offset = 0;\r\n            var sh = '<span class=\"colDiffer\">';\r\n            var eh = '</span>';\r\n\r\n            offsetStart = offsetStart ? offsetStart : 0;\r\n\r\n            var shLength = sh.length;\r\n            var ehLength = eh.length;\r\n\r\n            angular.forEach(regions, function (r) {\r\n                if (r.begin >= offsetStart || (offsetStart <= r.end && offsetStart > r.begin)) {\r\n                    str = filterService.insertStr(str, Math.max(r.begin, offsetStart) + offset - offsetStart, sh);\r\n                    offset += shLength;\r\n\r\n                    var pend = r.end + offset - offsetStart;\r\n                    if (pend > str.length)\r\n                        pend = str.length;\r\n\r\n                    str = filterService.insertStr(str, pend, eh);\r\n                    offset += ehLength;\r\n                }\r\n            });\r\n\r\n            return str;\r\n        };\r\n\r\n        filterService.insertStr = function (str, index, value) {\r\n            if (index > str.length) return str;\r\n\r\n            return str.substr(0, index) + value + str.substr(index);\r\n        };\r\n\r\n        filterService.isStringContainsSearchArray = function (str, arr) {\r\n            if (!str || !arr || arr.length === 0) return false;\r\n            var contains = true;\r\n\r\n            angular.forEach(arr, function (s) {\r\n                if (!contains) return false;\r\n                else {\r\n                    contains = str.indexOf(s) >= 0;\r\n                }\r\n            });\r\n\r\n            return contains;\r\n        };\r\n\r\n        filterService.checkEquality = function (arr) {\r\n            angular.forEach(arr, function (el) {\r\n                if (el.diffPos)\r\n                    delete el.diffPos;\r\n            });\r\n\r\n            var pos = 0, pos2 = 0, i, j;\r\n            // algorithm compares nearest neighbors\r\n            //for (var i = 1; i < arr.length; i++) {\r\n\r\n            //    if (i === 1) {\r\n            //        pos = filterService.incompatiblePos(arr[i - 1].name, arr[i].name);\r\n            //        arr[i - 1].diffPos = pos;\r\n            //    }\r\n\r\n            //    if (i === (arr.length - 1)) {\r\n            //        pos = filterService.incompatiblePos(arr[i - 1].name, arr[i].name);\r\n            //        arr[i].diffPos = pos;\r\n            //    }\r\n\r\n            //    if (i < (arr.length - 1)) {\r\n            //        pos = filterService.incompatiblePos(arr[i].name, arr[i - 1].name);\r\n            //        pos2 = filterService.incompatiblePos(arr[i].name, arr[i + 1].name);\r\n            //        arr[i].diffPos = Math.max(pos2, pos);\r\n            //    }\r\n\r\n            //}\r\n\r\n            // will think that all records are very close to each other and in this case we will compare all records\r\n            // and get first minimal different pos for all\r\n            var minPos = 0;\r\n\r\n            // set max minPos\r\n            for (i = 0; i < arr.length; i++) {\r\n                if (arr[i].name.length && (arr[i].name.length + 1) > minPos)\r\n                    minPos = arr[i].name.length + 1;\r\n            }\r\n\r\n            for (i = 0; i < (arr.length - 1); i++) {\r\n                for (j = i + 1; j < arr.length; j++) {\r\n                    pos = filterService.incompatiblePos(arr[i].name, arr[j].name);\r\n                    if (pos < minPos)\r\n                        minPos = pos;\r\n                }\r\n            }\r\n\r\n            for (i = 0; i < arr.length; i++) {\r\n                arr[i].diffPos = minPos;\r\n            }\r\n        };\r\n\r\n        filterService.incompatiblePos = function (s1, s2) {\r\n            if ((!s1 && !s2) || (!s1 && s2) || (s1 && !s2)) return 0;\r\n\r\n            var res = Math.min(s1.length, s2.length); // first different symbol position\r\n            for (var i = 0; i < Math.min(s1.length, s2.length); i++) {\r\n                if (s1[i] !== s2[i]) {\r\n                    res = i;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return res;\r\n        };\r\n\r\n        return filterService;\r\n    }\r\n]);\r\n\r\nangular.module('mainApp').\r\n    filter('uibTypeaheadHighlightEx', function (filterService) {\r\n        return filterService.uibTypeaheadHighlightExFunction;\r\n    });\r\n","angular.module('services').service('fontMeasureService', [\r\n    function () {\r\n        var _MinPT = 7;\r\n        var _AvailablePT = [18, 13.5, 12, 11, 10, 9, 8, 7];\r\n\r\n        var _ww = {};\r\n\r\n        for (var i = 0; i < _AvailablePT.length; i++) {\r\n            var v = _AvailablePT[i];\r\n            _ww['PTMeasure' + v] = new Object();\r\n            _ww['PTTextMeasure' + v] = new Object();\r\n        }\r\n\r\n        function getCharMeasure(currentChar, pt) {\r\n            var measureObject = _ww['PTMeasure' + pt];\r\n            var width = measureObject[currentChar];\r\n            if (typeof (width) == \"undefined\") {\r\n                var canvas = getCharMeasure.canvas || (getCharMeasure.canvas = document.createElement(\"canvas\"));\r\n                var context = canvas.getContext(\"2d\");\r\n                context.font = pt + \"pt 'Open Sans'\";\r\n                var _chTMP = context.measureText(currentChar);\r\n                width = context.measureText(currentChar).width;\r\n                measureObject[currentChar] = width;\r\n            }\r\n            return width;\r\n        }\r\n\r\n        function measureTextWidth(value, maxWidth, defaultSize) {\r\n            maxWidth = maxWidth - 12;\r\n            try {\r\n                for (var i = 0; i < _AvailablePT.length; i++) {\r\n                    var v = _AvailablePT[i];\r\n                    if (v <= defaultSize) {\r\n                        var measureObject = _ww['PTTextMeasure' + v];\r\n                        var width = measureObject[value];\r\n\r\n                        if (typeof (width) == \"undefined\") {\r\n                            width = 0;\r\n                            for (var j = 0; j < value.length; j++)\r\n                                width += getCharMeasure(value.charAt(j), v);\r\n                            width = Math.floor(width) + 1;\r\n                            measureObject[value] = width;\r\n                        }\r\n\r\n                        if (width < maxWidth)\r\n                            return v;\r\n                    }\r\n                }\r\n                return _MinPT;\r\n            }\r\n            catch (e) {\r\n                return defaultSize;\r\n            }\r\n        }\r\n\r\n        function measureTextHeight(value, maxHeight, defaultSize) {\r\n            try {\r\n                for (var i = 0; i < _AvailablePT.length; i++) {\r\n                    var v = _AvailablePT[i];\r\n                    if (v <= defaultSize) {\r\n                        var height = getFontHeight(value, v);\r\n\r\n                        if (height < maxHeight)\r\n                            return v;\r\n                    }\r\n                }\r\n                return _MinPT;\r\n            }\r\n            catch (e) {\r\n                return defaultSize;\r\n            }\r\n        }\r\n\r\n        function getFontHeight(text, pt) {\r\n            var canvas = getFontHeight.canvas || (getFontHeight.canvas = document.createElement(\"canvas\"));\r\n            var context = canvas.getContext(\"2d\");\r\n            context.font = pt + \"pt 'Open Sans'\";\r\n\r\n            var sourceWidth = canvas.width;\r\n            var sourceHeight = canvas.height;\r\n\r\n            // place the text somewhere\r\n            context.textAlign = \"left\";\r\n            context.textBaseline = \"top\";\r\n            context.fillText(text, 25, 5);\r\n\r\n            // returns an array containing the sum of all pixels in a canvas\r\n            // * 4 (red, green, blue, alpha)\r\n            // [pixel1Red, pixel1Green, pixel1Blue, pixel1Alpha, pixel2Red ...]\r\n            var data = context.getImageData(0, 0, sourceWidth, sourceHeight).data;\r\n\r\n            var firstY = -1;\r\n            var lastY = -1;\r\n\r\n            // loop through each row\r\n            for (var y = 0; y < sourceHeight; y++) {\r\n                // loop through each column\r\n                for (var x = 0; x < sourceWidth; x++) {\r\n                    var alpha = data[((sourceWidth * y) + x) * 4 + 3];\r\n\r\n                    if (alpha > 0) {\r\n                        firstY = y;\r\n                        // exit the loop\r\n                        break;\r\n                    }\r\n                }\r\n                if (firstY >= 0) {\r\n                    // exit the loop\r\n                    break;\r\n                }\r\n\r\n            }\r\n\r\n            // loop through each row, this time beginning from the last row\r\n            for (var y = sourceHeight; y > 0; y--) {\r\n                // loop through each column\r\n                for (var x = 0; x < sourceWidth; x++) {\r\n                    var alpha = data[((sourceWidth * y) + x) * 4 + 3];\r\n                    if (alpha > 0) {\r\n                        lastY = y;\r\n                        // exit the loop\r\n                        break;\r\n                    }\r\n                }\r\n                if (lastY >= 0) {\r\n                    // exit the loop\r\n                    break;\r\n                }\r\n\r\n            }\r\n\r\n            return lastY - firstY;\r\n        }\r\n\r\n        this.updateFontSize = function (parent, child, defaultSize, minSize, checkHeight) {\r\n            var prn = $(\".\" + parent + \"-measure\");\r\n\r\n            if (prn.is(':visible')) {\r\n                // console.log('updateFontSize');\r\n\r\n                //console.time('updateFontSize processing');\r\n                if (minSize == null || minSize == undefined) {\r\n                    minSize = 0;\r\n                }\r\n\r\n                if (checkHeight == null || checkHeight == undefined) {\r\n                    checkHeight = false;\r\n                }\r\n\r\n                var childClass = child + \"-measure\";\r\n                //            var children = $(\".\" + childClass);\r\n                var children = $(\".\" + parent + \"-measure .\" + childClass);\r\n                if (children.length > 0) {\r\n                    var prn = children.first().closest('.' + parent + '-measure');\r\n                    var maxWidth = prn.width();\r\n                    var maxHeight = prn.height();\r\n\r\n                    // if (!!parentPercent)\r\n                    //     maxWidth *= parentPercent / 100;\r\n\r\n                    children.each(function () {\r\n                        var txt = this;\r\n                        var val = txt.innerText;\r\n                        if (val != null && val != '') {\r\n                            var widthSize = measureTextWidth(val, maxWidth, defaultSize);\r\n                            var heightSize = 0;\r\n                            var size = 0;\r\n                            if (checkHeight) {\r\n                                heightSize = measureTextHeight(val, maxHeight, defaultSize);\r\n                                size = Math.min(widthSize, heightSize);\r\n                            }\r\n                            else {\r\n                                size = widthSize;\r\n                            }\r\n\r\n                            size = Math.max(size, minSize);\r\n\r\n                            var className = 'product-text' + (size + '').replace('.', '-');\r\n                            var arr = txt.className.trim().split(' ');\r\n                            var fSz = arr.filter(function (s) { return s === className; });\r\n\r\n                            if (fSz.length == 0) {\r\n                                var fArr = arr.filter(function (s) { return s.indexOf('product-text') != 0; });\r\n                                fArr.push(className);\r\n                                txt.className = fArr.join(' ');\r\n                            }\r\n                        }\r\n                    });\r\n                }\r\n\r\n                //console.timeEnd('updateFontSize processing');\r\n            } else {\r\n               //  console.log('updateFontSize. Parent ' + \".\" + parent + \"-measure\" +' is invisible');\r\n            }\r\n        };\r\n\r\n        this.fitFontSize = function (parent, child, defaultSize) {\r\n            var childClass = child + \"-measure\";\r\n            var children = $(\".\" + childClass);\r\n            if (children.length > 0) {\r\n                var maxWidth = children.first().closest('.' + parent + '-measure').width();\r\n                var maxHeight = children.first().closest('.' + parent + '-measure').height();\r\n\r\n                children.each(function (idx, el) {\r\n                    var txt = this;\r\n                    for (var i = 0; i < _AvailablePT.length; i++) {\r\n                        var v = _AvailablePT[i];\r\n                        if (v <= defaultSize) {\r\n                            var className = childClass;\r\n                            if (v != defaultSize)\r\n                                className += ' ' + 'product-text' + (v + '').replace('.', '-');\r\n                            if (txt.className.trim() != className) {\r\n                                txt.className = className;\r\n                            }\r\n\r\n                            var elWidth = el.offsetWidth;\r\n                            var elHeight = el.offsetHeight;\r\n                            if (elWidth > maxWidth || elHeight > maxHeight) {\r\n                                continue;\r\n                            }\r\n                            else {\r\n                                //console.log(elWidth + '-' + elHeight);\r\n                                break;\r\n                            }\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n        };\r\n    }]);\r\n","\r\n\r\nfunction jsAddCustomerModalPosition(){\r\n    if($('#jsAddCustomer').length>0){\r\n        var btnPositionTop = $('#jsAddCustomer').offset().top;\r\n        var btnPositionLeft = $('#jsAddCustomer').offset().left;\r\n        var btnHeight = $('#jsAddCustomer').height();\r\n        var modalWidth = $('#jsAddCustomerModal .dp_modal-dialog').width();\r\n        btnPositionTop = btnPositionTop + (btnHeight/2);\r\n        var btnPositionLeftDialog = btnPositionLeft - modalWidth;\r\n        $(\"#jsAddCustomerModal .dp_modal-dialog\").offset({left:btnPositionLeftDialog});\r\n        $(\".dp_modal-customer-arrow\").offset({top:btnPositionTop, left:btnPositionLeft});\r\n    }\r\n}\r\n\r\nexport function initSelects(onSelectOpened, onViewStyled, onSelectClosed) {\r\n    // Note: exclude certain selects using this custom attribute and value \r\n    // to avoid it being included in other components' initSelect() calls\r\n    // e.g. addCustomerPartial\r\n    const sel = $(\"select:not([data-load-later='true'])\");\r\n    if (sel.length > 0) {\r\n        var p = {\r\n        };\r\n        if (typeof (onSelectOpened) === 'function')\r\n            p.onSelectOpened = onSelectOpened;\r\n            if (typeof (onSelectClosed) === 'function')\r\n            p.onSelectClosed = onSelectClosed;\r\n        if (typeof (onViewStyled) === 'function')\r\n            p.onViewStyled = onViewStyled;\r\n        sel.styler(p);\r\n    }\r\n}\r\n\r\nexport function initTogglers() {\r\n   /* if ($(\"[name='dp_checkbox']\").length > 0) {\r\n        $(\"[name='dp_checkbox']\").bootstrapSwitch();\r\n    };*/\r\n\r\n}\r\n\r\nexport function initCustomerForm() {\r\n    jsAddCustomerModalPosition();\r\n    $(window).on('resize', function () { jsAddCustomerModalPosition() });\r\n    $('#jsAddCustomerModal').on('shown.bs.modal', function () { jsAddCustomerModalPosition() });\r\n\r\n    $('.dp_customers-table__item-toggle').click(function () {\r\n        $(this).closest('.dp_customers-table__item').toggleClass('active');\r\n    });\r\n\r\n    initTogglers();\r\n\r\n    initSelects();\r\n}\r\n\r\nexport function initPagerOnScroll(onScrollReachBottomCallback, $div) {\r\n    const $divs = $div || $('.main-content, #gridRow > .grid-content, #productGrid > .grid-content, .grid-content .dp_content.grid-content, .dp_modal-body, #customersGridContainer, .salesParkedPage > .main-content ');\r\n    const onScroll = ($container) => {\r\n        const isEndOfList = $container.scrollTop() && ($container.scrollTop() > $container[0].scrollHeight - $container.outerHeight() - 10);\r\n        if (isEndOfList) {\r\n            onScrollReachBottomCallback();\r\n        }\r\n    };\r\n    $divs.on('scroll', (e) => onScroll($(e.target)));\r\n\r\n    // if when opening page and the screen is bigger and all rows fit screen and we cant scroll\r\n    const table = $('.grid-content');\r\n    if (table.length && (table.height() < table.parent().height())) {\r\n            onScrollReachBottomCallback();\r\n    }\r\n}\r\n\r\nwindow.initSelects = initSelects;\r\nwindow.initPagerOnScroll = initPagerOnScroll;","import {initSelects} from './globals';\r\nimport { events } from './eventConstants';\r\n\r\nimport '../../translations';\r\n\r\nangular.module(\"mainApp\").controller('headerController',\r\n    ['$scope', '$rootScope', 'loginService', '$location', 'gettextCatalog', '$uibModal', 'helperService', '$timeout',\r\n        'configService', 'errorService', '$window', 'barcodeService', 'googleHelperService',\r\n        function ($scope, $rootScope, loginService, $location, gettextCatalog, $uibModal, helperService, $timeout,\r\n            configService, errorService, $window, barcodeService, googleHelperService) {\r\n            $scope.snackbar = new SnackBar();\r\n\r\n            $scope.sameFont = false; // true to make header font the same as for other header parts\r\n            $scope.currentViewName = '';\r\n            $scope.hasNetworkConnection = true;\r\n            $scope.transmit = false;\r\n            $scope.isSite = configService.isSite;\r\n            $scope.isOnline = configService.isOnline;\r\n            $scope.pageTitle = '';\r\n\r\n            $scope.currentUser = null;\r\n            $scope.currentOutlet = null;\r\n            $scope.currentRegister = null;\r\n            $scope.selectedLanguage = {};\r\n            $scope.languages = [\r\n                {\r\n                    Text: \"English (United States)\",\r\n                    Value: \"en-US\"\r\n                },\r\n                {\r\n                    Text: \"English (United Kingdom)\",\r\n                    Value: \"en-GB\"\r\n                }\r\n               /* {\r\n                    Text: \"Русский\",\r\n                    Value: \"ru\"\r\n                },\r\n                {\r\n                    Text: \"Chinese Simplified\",\r\n                    Value: \"zh-Hans\"\r\n                },\r\n                {\r\n                    Text: \"Chinese Traditional\",\r\n                    Value: \"zh-Hant\"\r\n                },*/\r\n            ];\r\n\r\n            $scope.showHeader = false;\r\n            $scope.$on('header.show', function (event, data) {\r\n                $scope.showHeader = data.showHeader;\r\n\r\n                if ($scope.showHeader == true) {\r\n                    updateDesignMode();\r\n\r\n                    $(window).on('resize', updateDesignMode);\r\n                }\r\n            });\r\n\r\n            $scope.$watch('configService.isOnline',\r\n                function (newValue, oldValue) {\r\n                    $scope.isOnline = newValue;\r\n\r\n                    $scope.indicatorTitle = $scope.isOnline ? '' : gettextCatalog.getString('You are working in offline mode.');\r\n\r\n                    if (newValue != oldValue && $scope.isOnline) {\r\n                        barcodeService.clearFonts(); \r\n                    }\r\n                }\r\n            );\r\n            \r\n            function updateDesignMode() {\r\n                if ($(\"#isMobileDesign\").is(':visible')) {\r\n                    if (configService.isMobileDesign != false) {\r\n                        console.log('switched to desktop');\r\n                    }\r\n                    configService.isMobileDesign = false;\r\n                }\r\n                else {\r\n                    if (configService.isMobileDesign != true) {\r\n                        console.log('switched to mobile');\r\n                    }\r\n                    configService.isMobileDesign = true;\r\n                }                \r\n            }\r\n\r\n            $timeout(function () {\r\n                initSelects();\r\n            });\r\n\r\n            $scope.$on('header.setUserInfo', function (event, data) {\r\n                $scope.currentUser = data.currentUser;\r\n            });\r\n\r\n            $scope.$on('header.setOutletInfo', function (event, data) {\r\n                $scope.currentOutlet = data.outletName;\r\n                $scope.currentRegister = data.registryName;\r\n\r\n                $scope.updateTitle();\r\n            });\r\n\r\n            $scope.$on('header.changeLanguage', function (event) {\r\n                $scope.changeLanguage();\r\n            });\r\n\r\n            $scope.changeLanguage = function () {\r\n                $scope.selectedLanguage.Value = gettextCatalog.getCurrentLanguage();\r\n                $timeout(function () {\r\n                    $('#languageSelect').trigger('refresh');\r\n                }, 0);\r\n                var $windowElement = $('#changeLanguagePartial');\r\n                helperService.showDialog($windowElement);\r\n                $timeout(() => initSelects());\r\n            }\r\n\r\n\r\n            $scope.closeChangeLanguageDialog = function () {\r\n                var $windowElement = $('#changeLanguagePartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.closePageNotAvailableDialog = function () {\r\n                if ($scope.changeLanguageModalInstance)\r\n                    $scope.changeLanguageModalInstance.dismiss('cancel');\r\n            };\r\n\r\n            $scope.setLanguage = function () {\r\n                gettextCatalog.setCurrentLanguage($scope.selectedLanguage.Value);\r\n                window.localStorage.setItem('currentLanguage', $scope.selectedLanguage.Value);\r\n                $rootScope.$broadcast('changeLanguage');\r\n            }\r\n\r\n            $scope.$on('header.setCurrentView', function (event, data) {\r\n                $scope.currentViewName = data.viewName;\r\n            });\r\n\r\n            // there is three states: 'online' - true,'offline' - false,'transmit'\r\n            $scope.$on('config.ConnectionStateChanged', function (event, data) {\r\n                $timeout(function () {\r\n                    $scope.hasNetworkConnection = data;\r\n                });\r\n            });\r\n\r\n\r\n            $scope.$on('config.TransmitStateChanged', function (event, data) {\r\n                $timeout(function () {\r\n                    if (data === 'transmit') {\r\n                        $scope.transmit = true;\r\n                    }\r\n                    else {\r\n                        $scope.transmit = false;\r\n                    }\r\n                });\r\n            });\r\n\r\n            $scope.logoff = function () {\r\n                setTimeout(function () {\r\n                    $('#hdrPopupMenu').dropdown('toggle');\r\n                });\r\n\r\n                $rootScope.$broadcast('header.logoff');\r\n                \r\n                googleHelperService.logout();\r\n\r\n            };\r\n\r\n            $scope.$on('header.logoff', function (event) {\r\n                loginService.logoff();\r\n                $.unblockUI();\r\n                var cur = $location.path();\r\n                if (cur != '/home')\r\n                    $location.path('/home');\r\n                else\r\n                    $rootScope.$broadcast('login.show');\r\n            });\r\n\r\n            $scope.$on('header.changeOutlet', function (event) {\r\n                $scope.changeOutlet();\r\n            });\r\n            $scope.changeOutlet = function () {\r\n                configService.bypassOutletRegistry = false;\r\n                $rootScope.$broadcast('selectOR.show');\r\n            };\r\n\r\n            $scope.toggleMenu = function (evt) {\r\n                helperService.hideKeyboard();\r\n                if ($('form.disableMenu:visible').length == 0)\r\n                    $rootScope.$broadcast('sideBar.toggle');\r\n                return false;\r\n            };\r\n\r\n            // set preloader when page is start to switch\r\n            $scope.$on('$routeChangeStart', function (scope, next, current) {\r\n                if (!!current.$$route && !!next.$$route &&\r\n                    current.$$route.originalPath != next.$$route.originalPath) {\r\n                    $.blockUI();\r\n                    $('.blockPage .preloader2').attr(\"id\", \"routeChange\")\r\n                }\r\n            });\r\n\r\n            // use timeout to remove preloader when new page is rendered\r\n            $scope.$on('$routeChangeSuccess', function (scope, next, current) {\r\n                if (!!current && !!current.$$route && !!next.$$route &&\r\n                    current.$$route.originalPath != next.$$route.originalPath) {\r\n                    $scope.updateTitle();\r\n                }\r\n            });\r\n\r\n            $scope.updateTitle = function() {\r\n                var fdf = $(\".blockPage .preloader2\").attr(\"id\");\r\n                if ($(\".blockPage .preloader2\").attr(\"id\") == \"routeChange\") {\r\n                    $timeout(function () {\r\n                        $.unblockUI();\r\n                    }, 100);\r\n                }\r\n\r\n                $scope.sameFont = false;\r\n                var $el = $(\"pageTitle\");\r\n                if ($el.length == 1) {\r\n                    var title = $el.text();\r\n                    if (title == '_register_') {\r\n                        $scope.pageTitle = $scope.currentRegister;\r\n                        $scope.sameFont = true;\r\n                    }\r\n                    else {\r\n                        $scope.pageTitle = title;\r\n                    }\r\n                }\r\n                else {\r\n                    $scope.pageTitle = '';\r\n                }\r\n            };\r\n\r\n            $scope.$on('$routeChangeError', function (scope, next, current) {\r\n                $.unblockUI();\r\n            });\r\n\r\n            $scope.enableMenu = true;\r\n\r\n            $scope.$on('header.enableMenu', function (event, data) {\r\n                $scope.enableMenu = data;\r\n            });\r\n\r\n\r\n            $scope.$on('header.blockSales', function (event, data) {\r\n                var title = gettextCatalog.getString('Error');\r\n                var err = gettextCatalog.getString(\"It seems like the Cin7 Core POS configuration you are currently logged in is incomplete. To avoid posting incorrect sale transactions, your session will be terminated. Please contact your POS administrator/manager to resolve the issue.\");\r\n                errorService.showError(err, function () {\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('header.logoff');\r\n                        \r\n                        googleHelperService.logout();\r\n                        \r\n                    });\r\n                }, title);\r\n\r\n            });\r\n\r\n            var modalUpdateSettings;\r\n            $scope.$on('header.updateSettingsThirdStep', function (event, data) {\r\n\r\n                var path = $location.path();\r\n                if (path !== '/sell') {\r\n                    $.unblockUI();\r\n                    modalUpdateSettings.modal('hide');\r\n                    modalUpdateSettings = null;\r\n                } else {\r\n                    $rootScope.$broadcast('sell.reload', { modal: modalUpdateSettings });\r\n                }\r\n\r\n            });\r\n\r\n\r\n    $scope.$on('header.updateSettings', function (event, data) {\r\n        if (!loginService.isLoggedIn())\r\n            return;\r\n\r\n       var title = gettextCatalog.getString('Update settings');\r\n       $.blockUI();\r\n\r\n                modalUpdateSettings = helperService.showInfoDialog({\r\n                    title: '',\r\n                    body: gettextCatalog.getString('Loading the updated POS/outlet configuration settings. Please wait...')\r\n                });\r\n\r\n                $timeout(function () {\r\n                    $rootScope.$broadcast('login.silent',\r\n                        {\r\n                            dearPosName: configService.posName,\r\n                            userName: configService.userName,\r\n                            password: configService.password,\r\n                            callBack: true\r\n                        });\r\n                });\r\n\r\n            });\r\n\r\n            var showRefreshPageDialog = function () {\r\n                var cur = $location.path();\r\n                console.log(cur);\r\n                if (cur === '/home') {\r\n                    $window.location.reload();\r\n                }\r\n                else {\r\n                    var $windowElement = $('#pageRefreshPartial');\r\n                    helperService.showDialog($windowElement);\r\n                }\r\n            };\r\n\r\n            $scope.$on('header.f5Pressed', function (event, data) {\r\n                showRefreshPageDialog();\r\n            });\r\n\r\n\r\n            $scope.closePageRefreshDialog = function () {\r\n                var $windowElement = $('#pageRefreshPartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n\r\n            $scope.refreshPage = function () {\r\n                $window.location.reload();\r\n            };\r\n\r\n            $scope.$on('header.confirmCancelDialog', function (event, data) {\r\n                var $windowElement = $('#cancelDialogConfirmPartial');\r\n                helperService.showDialog($windowElement);\r\n            });\r\n\r\n            $scope.closeCancelDialogModalDialog = function () {\r\n                var $windowElement = $('#cancelDialogConfirmPartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.cancelDialogModal = function () {\r\n                $timeout(function () {\r\n                    $rootScope.$broadcast('header.confirmedCancelDialog');\r\n                });\r\n            };\r\n\r\n            // icon statuses\r\n            $scope.syncStatus = events.STATUS_OK;\r\n            $scope.$on(events.HEADER_SYNC_STATUS_EVENT, function (event, data) {\r\n                if (data !== $scope.syncStatus)\r\n                {\r\n                    if (data === events.STATUS_OK_AFTER_ERROR_SEND && $scope.syncStatus === events.STATUS_ERROR_SEND_ORDER) {\r\n                        $scope.syncStatus = events.STATUS_OK;\r\n                    } else {\r\n                        $scope.syncStatus = data;\r\n                    }\r\n                }\r\n            });\r\n\r\n            $scope.printerStatus = 'ok';\r\n            $scope.$on('header.printerStatus', function (event, data) {\r\n                console.log('header.printerStatus: ' + data);\r\n                $scope.printerStatus = data;\r\n            });\r\n\r\n            $scope.scannerStatus = 'ok';\r\n            $scope.$on('header.scannerStatus', function (event, data) {\r\n                console.log('header.scannerStatus: ' + data);\r\n                $scope.scannerStatus = data;\r\n            });\r\n\r\n            $scope.tillStatus = 'ok';\r\n            $scope.$on('header.tillStatus', function (event, data) {\r\n                console.log('header.tillStatus: ' + data);\r\n                $scope.tillStatus = data;\r\n            });\r\n\r\n            $scope.$on('snackbar.show', function (event, data) {\r\n                var msg = data.message;\r\n                var type = data.type;\r\n                if(!type)\r\n                    type = \"message\";\r\n                $scope.snackbar.make(type, [\r\n                    msg,\r\n                    null,\r\n                    \"top\",\r\n                    \"center\"\r\n                ], 5000);\r\n            });\r\n\r\n            $scope.$on('snackbar.close', function (event, data) {\r\n                $scope.snackbar.close();\r\n            });\r\n\r\n        }]);\r\n","\r\nimport unpackArray  from './unpackWorkerHelper';\r\nimport {CalculatorHelperService} from '../../TypePosScripts/CalculatorHelperService';\r\nimport { convertFromOld } from '../../TypePosScripts/ConverterService';\r\nimport UnpackWorker from './unpackWorker.js';\r\nimport { events } from './eventConstants';\r\n\r\nangular.module('services').factory('helperService', [\r\n    '$rootScope', 'configService', 'uuid2', '$filter', '$uibModal', 'gettextCatalog', '$timeout', '$location', '$q', '$locale',\r\n    function ($rootScope, configService, uuid2, $filter, $uibModal, gettextCatalog, $timeout, $location, $q, $locale) {\r\n        var helperService = {};\r\n\r\n        function NonWrappableContainer() {\r\n            this.data = null;\r\n        }\r\n\r\n        NonWrappableContainer.prototype.set = function (o) {\r\n            this.data = o;\r\n        };\r\n\r\n        NonWrappableContainer.prototype.get = function () {\r\n            return this.data;\r\n        };\r\n\r\n        helperService.createNonWrappableContainer = function () {\r\n            return new NonWrappableContainer();\r\n        };\r\n\r\n        helperService.dialogs = [];\r\n\r\n        helperService.getFormatedDate = function (date) {\r\n            var format = configService.dateFormat + ' HH:mm';\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment.utc(date).local().format(format);\r\n        };\r\n\r\n        helperService.getFormatedDateAmPm = function (date) {\r\n            var format = configService.dateFormat + ' hh:mm A';\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment.utc(date).local().format(format);\r\n        };\r\n\r\n        helperService.getFormatedDateAlreadyLocal = function (date) {\r\n            var format = configService.dateFormat + ' HH:mm';\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment(date).format(format);\r\n        };\r\n\r\n        helperService.getDateByFormat = function (date, format) {\r\n            return moment.utc(date).local().format(format);\r\n        };\r\n\r\n        helperService.getDateByFormatAlreadyLocal = function (date, format) {\r\n            return moment(date).format(format);\r\n        };\r\n\r\n        helperService.getDateFormat = function () {\r\n            var format = configService.dateFormat;\r\n            return format;\r\n        };\r\n\r\n        helperService.getDateByFormatForDatePickers = function () {\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'yy');\r\n            format = format.replace('MM', 'mm');\r\n            return format;\r\n        };\r\n\r\n        helperService.getDateByFormatForMoment = function () {\r\n            var format = configService.dateFormat;\r\n            if (format) {\r\n                format = format.replace('yyyy', 'YYYY');\r\n                format = format.replace('dd', 'DD');\r\n            }\r\n            return format;\r\n        };\r\n\r\n        helperService.getFormatedDate2 = function (date) {\r\n            if(!date) return date;\r\n\r\n            if(typeof(date) === 'string')\r\n                date = date.replace('P','+');\r\n\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment.utc(date).local().format(format);\r\n        };\r\n\r\n        helperService.getFormatedLocalDateTime = function (date) {\r\n            if(!date) return date;\r\n\r\n            if(typeof(date) === 'string')\r\n                date = date.replace('P','+');\r\n\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            var tm = moment.utc(date).local();\r\n\r\n            return {\r\n                date: tm.format(format),\r\n                time: tm.hours() * 60 + tm.minutes()\r\n            };\r\n        };\r\n\r\n        helperService.getFormatedDateWithLocalTime2 = function (date) {\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment.utc(date).local().format(format + ' HH:mm');\r\n        };\r\n\r\n        helperService.getFormatedDateAsIs = function (date) {\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment(date).format(format + ' HH:mm');\r\n        };\r\n\r\n        helperService.getFormatedDateOnlyAsIs = function (date) {\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment(date).format(format);\r\n        };\r\n\r\n        helperService.toDateFromDatepickerDirect = function (str) {\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment(str, format).format('YYYY-MM-DD[T]HH:mm:ss[+00:00]');\r\n        };\r\n\r\n        helperService.toDateFromDatepickerDirectNoZone = function (str) {\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment(str, format).format('YYYY-MM-DD[T]HH:mm:ss');\r\n        };\r\n\r\n        helperService.convertToDateFromDatepicker = function (str) {\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment(str, format);\r\n        };\r\n\r\n        helperService.toDateFromDatepickerParameter = function (str, timeStr, skipReplace) {\r\n            if (str === null || str === \"\" || typeof str === \"undefined\") {\r\n                return \"\";\r\n            }\r\n\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            if (timeStr) {\r\n                format += \" HH:mm:ss\";\r\n                str += \" \" + timeStr;\r\n            }\r\n\r\n//            return moment(str, format).format('YYYY-MM-DD[T]HH:mm:ss'); //+'Z';\r\n            if(skipReplace===true)\r\n                return moment(str, format).format();\r\n\r\n            var d = moment(str, format).format().replace('+','P'); // this date will have zone\r\n            return d;\r\n        };\r\n\r\n        helperService.toDateFromDatepickerParameterUTC = function (str, timeStr) {\r\n            if (str === null || str === \"\" || typeof str === \"undefined\") {\r\n                return \"\";\r\n            }\r\n\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            if (timeStr) {\r\n                format += \" HH:mm:ss\";\r\n                str += \" \" + timeStr;\r\n            }\r\n\r\n            return moment.utc(str, format).format('YYYY-MM-DD[T]HH:mm:ss')+'Z';\r\n        };\r\n\r\n        helperService.toDateWithCurrentTimeZone = function (dt) {\r\n            return moment(dt).toISOString(true).replace('+','P');//.format('YYYY-MM-DD[T]HH:mm:ss')+'Z';\r\n        };\r\n\r\n        helperService.toDateFromDatepicker = function (str) {\r\n            var format = configService.dateFormat;\r\n            format = format.replace('yyyy', 'YYYY');\r\n            format = format.replace('dd', 'DD');\r\n            return moment(str, format).local().toJSON();\r\n        };\r\n\r\n        helperService.formatTime = function (mins, appendSecs) {\r\n            var hours   = Math.floor(mins / 60);\r\n            var minutes = helperService.DEARRound(mins - hours * 60, 0);\r\n\r\n            if (hours   < 10) {hours   = \"0\"+hours;}\r\n            if (minutes < 10) {minutes = \"0\"+minutes;}\r\n            return hours+':'+minutes + (appendSecs === true ? ':00' : '');\r\n        };\r\n\r\n        helperService.initCenterModalDialog = function (parentElement) {\r\n            var modalDialog = $(parentElement);\r\n\r\n            this.dialogs.push(modalDialog);\r\n\r\n            // Align modal when it is displayed\r\n            modalDialog.on(\"shown.bs.modal\", function (frm) {\r\n                helperService.alignModal($(frm.target));\r\n            });\r\n\r\n            // Align modal when user resize the window\r\n            $(window).on(\"resize\", function () {\r\n                console.log('initCenterModalDialog resize');\r\n                helperService.dialogs.forEach(function (element, index, array) {\r\n                    helperService.alignModal(element);\r\n                });\r\n            });\r\n\r\n        };\r\n\r\n        helperService.showCustomDialog = function (caption, text, okButtonName, cancelButtonName, showCancel) {\r\n            var el = $('#customModalDlg');\r\n            el.find('#customModalDlgCaption').html(caption);\r\n            el.find('#customModalDlgText').html(text);\r\n            if (!!okButtonName) {\r\n                el.find('#customModalDlgOKButton').html(okButtonName);\r\n            }\r\n            if (!!cancelButtonName) {\r\n                el.find('#customModalDlgOCancelButton').html(cancelButtonName);\r\n            }\r\n\r\n            if (showCancel === false) {\r\n                el.find('#customModalDlgOCancelButton').hide();\r\n                el.find('#customModalDlgXCancelButton').hide();\r\n                el.find('#customShiftObject').addClass('col-xs-offset-3');\r\n            }\r\n            else {\r\n                el.find('#customModalDlgOCancelButton').show();\r\n                el.find('#customModalDlgXCancelButton').show();\r\n                el.find('#customShiftObject').removeClass('col-xs-offset-3');\r\n            }\r\n\r\n            helperService.showDialog('#customModalDlg');\r\n        };\r\n\r\n        helperService.showCustomDialog3 = function (caption, text, okButtonName, cancelButtonName, showCancel, showCheckbox, checkboxValue, checkBoxCallback) {\r\n            var el = $('#customModalDlg3');\r\n            el.find('#customModalDlg3Caption').html(caption);\r\n            el.find('#customModalDlg3Text').html(text);\r\n            if (!!okButtonName) {\r\n                el.find('#customModalDlg3OKButton').html(okButtonName);\r\n            }\r\n            //if (!!cancelButtonName) {\r\n            //el.find('#customModalDlg3OCancelButton').html(\"x\");\r\n            //}\r\n            if (!!cancelButtonName) {\r\n                el.find('#customModalDlg3OCancelButton').html(cancelButtonName);\r\n            }\r\n\r\n            if (showCancel === false) {\r\n                el.find('#customModalDlg3XCancelButton').hide();\r\n                el.find('#customModalDlg3OCancelButton').hide();\r\n            }\r\n            else {\r\n                el.find('#customModalDlg3XCancelButton').show();\r\n                el.find('#customModalDlg3OCancelButton').show();\r\n            }\r\n\r\n            if (showCheckbox === true) {\r\n                initSelects();\r\n                el.find('#customModalDlg3CheckBoxGroup').show();\r\n                var scope = angular.element(document.getElementById('customModalDlg3CheckBox')).scope();\r\n                if (scope) {\r\n                    scope.checkBoxValue = checkboxValue;\r\n                }\r\n            } else\r\n                el.find('#customModalDlg3CheckBoxGroup').hide();\r\n\r\n\r\n            helperService.showDialog('#customModalDlg3', function () {\r\n                if (showCheckbox === true) {\r\n                    $timeout(function () {\r\n                        $('input, select').trigger('refresh');\r\n                    });\r\n                }\r\n            }, null, function () {\r\n                if (showCheckbox === true) {\r\n                    var scope = angular.element(document.getElementById('customModalDlg3CheckBox')).scope();\r\n                    if (typeof (checkBoxCallback) === 'function')\r\n                        checkBoxCallback(scope.checkBoxValue);\r\n                }\r\n            });\r\n        };\r\n\r\n        helperService.showDialog = function (parentElement, callback, resizeCallback, closeCallback) {\r\n            var w = $(parentElement);\r\n\r\n            var keyHandler = null;\r\n\r\n            $timeout(function () {\r\n                if (typeof (callback) == 'function') {\r\n                    callback(w);\r\n                }\r\n            }, 600);\r\n\r\n            w.one('show.bs.modal', function () {\r\n                $rootScope.$broadcast('popup.show');\r\n\r\n                if (typeof (resizeCallback) == 'function') {\r\n                    resizeCallback(w);\r\n                }\r\n\r\n                var pressEnterElement = w.find('.capture-pressing-enter');\r\n                var pressEscapeElement = w.find('.capture-pressing-escape');\r\n\r\n\r\n                if (pressEnterElement.length > 0 || pressEscapeElement.length > 0) {\r\n                    $timeout(function(){\r\n                        const keyHandler = function (e) {\r\n\r\n                            if (e.keyCode === 13 && pressEnterElement.length > 0) {\r\n\r\n                                var isActive = w.attr('isActive');\r\n                                if (isActive !== 'false') {\r\n                                    pressEnterElement.trigger('click');\r\n                                }\r\n\r\n                            } else if (e.keyCode === 27 && pressEscapeElement.length > 0) {\r\n\r\n                                var isActive = w.attr('isActive');\r\n                                if (isActive !== 'false') {\r\n                                    pressEscapeElement.trigger('click');\r\n                                }\r\n                            }\r\n                        };\r\n\r\n                        $(document).on('keyup', keyHandler);\r\n                    },100);\r\n                }\r\n            });\r\n\r\n            w.one('shown.bs.modal', function () {\r\n                $timeout(function () {\r\n                    $rootScope.$broadcast('popup.shown');\r\n                });\r\n            });\r\n\r\n\r\n            w.one('hide.bs.modal', function () {\r\n                $rootScope.$broadcast('popup.hide');\r\n\r\n                if (typeof (closeCallback) == 'function') {\r\n                    closeCallback(w);\r\n                }\r\n\r\n                $(document).off('keyup', keyHandler);\r\n            });\r\n\r\n            console.log('show dialog');\r\n\r\n            w.modal({ show: true, backdrop: 'static', keyboard: false });\r\n        };\r\n\r\n        helperService.closeDialog = function (parentElement, callback, okPressed) {\r\n            var w = $(parentElement);\r\n            var scp = $('.scopeID');\r\n\r\n            if (w.is(':visible') === true) {\r\n                if (typeof callback === 'function') {\r\n\r\n                    w.one('hidden.bs.modal', function () {\r\n                        callback();\r\n                    });\r\n                }\r\n\r\n                console.log('hide dialog');\r\n                $('.dp_modal-body').off('scroll');\r\n\r\n                this.hideKeyboard();\r\n\r\n                w.modal('hide');\r\n            }\r\n\r\n            if(scp.length>0 && okPressed === true) {\r\n                var scope2 = angular.element(scp[0]).scope();\r\n                if(scope2 && typeof(scope2.callbackModal)==='function')\r\n                        scope2.callbackModal();\r\n            }\r\n        };\r\n\r\n        helperService.alignModal = function (prn) {\r\n            var dlg = prn.find(\".modal-dialog\");\r\n\r\n            // Applying the top margin on modal dialog to align it vertically center\r\n            dlg.css(\"margin-top\", Math.max(0, ($(window).height() - dlg.height()) / 2));\r\n        };\r\n\r\n        // convert rows to array of items\r\n        helperService.dbRawsToArray = function (rows, callback) {\r\n            var res = [];\r\n            if (!!rows.item) {\r\n\r\n                for (var i = 0; i < rows.length; i++) {\r\n                    if (typeof (callback) == 'function') {\r\n                        res.push(callback(rows.item(i)));\r\n                    }\r\n                    else\r\n                        res.push(rows.item(i));\r\n                }\r\n            }\r\n\r\n            return res;\r\n        };\r\n\r\n        helperService.DEARRound = function (value, places) {\r\n            if (!value)\r\n                return 0;\r\n\r\n            var k = Math.pow(10, places);\r\n            var pv = Math.round((Math.abs(value) * k).toFixed(8));\r\n            if (!pv)\r\n                return 0;\r\n\r\n            return (value < 0 ? -1 : 1) * pv / k;\r\n        };\r\n\r\n        Array.prototype.sum = function (prop) {\r\n            var total = 0;\r\n            for (var i = 0, _len = this.length; i < _len; i++) {\r\n                total += this[i][prop];\r\n            }\r\n            return total;\r\n        };\r\n\r\n        helperService.showPageAfterInit = function () {\r\n            $('.temp-hidden').removeClass('temp-hidden');\r\n        };\r\n\r\n        helperService.applyCurrency = function (number, currency) {\r\n            return $filter('currency')(number, currency, 2);\r\n        };\r\n\r\n        helperService.formatFloatNumber = function (n) {\r\n            var v = n + '';\r\n            v = v.replace(/^[\\D\\.]/g, '');\r\n            //var res = parseFloat(v);\r\n            //return res;\r\n            return v;\r\n        };\r\n\r\n        helperService.lastActive = null;\r\n\r\n        helperService.erroDialogIsShown = false;\r\n\r\n        helperService.showErrorDialog = function (errorObject, onCloseCallback, isHTML) {\r\n            helperService.lastActive = document.activeElement;\r\n            helperService.erroDialogIsShown = true;\r\n\r\n            var $windowElement = $('#errorModal');\r\n            var window = $windowElement.modal({ show: true, backdrop: 'static', keyboard: false });\r\n            window.find('#errorModalTitle').text(errorObject.title);\r\n            if (isHTML === true)\r\n                window.find('#errorModalBody').html(errorObject.body);\r\n            else\r\n                window.find('#errorModalBody').text(errorObject.body);\r\n\r\n            window.one('hidden.bs.modal', function () {\r\n                $('#errorModal')[0]?.style.removeProperty(\"z-index\"); // restore style back\r\n                if (typeof (onCloseCallback) == 'function') {\r\n                    onCloseCallback();\r\n                }\r\n                helperService.erroDialogIsShown = false;\r\n            });\r\n\r\n            var closeBtn = $windowElement.find('#closeErrorDialogButton');\r\n            $windowElement.find('.mark-image img').attr('src', 'PosImages/Error_2020.svg');\r\n            closeBtn.toggleClass('btn-yellow', false);\r\n            closeBtn.toggleClass('btn-primary', true);\r\n\r\n            //set z index to be above all dialog boxes\r\n            $windowElement[0]?.style?.setProperty(\"z-index\", \"1000000016\", \"important\");\r\n\r\n            window.find('#closeErrorDialog, #closeErrorDialogButton').click(function () {\r\n                $windowElement.modal('hide');\r\n                $timeout(function () {\r\n                    if (!configService.isMobile)\r\n                        helperService.lastActive.focus();\r\n                });\r\n            });\r\n        };\r\n\r\n        helperService.showInfoDialog = function (infoObject, onCloseCallback) {\r\n            helperService.lastActive = document.activeElement;\r\n\r\n            var $windowElement = $('#errorModal');\r\n            var window = $windowElement.modal({ show: true, backdrop: 'static', keyboard: false });\r\n            $windowElement.find('.mark-image img').attr('src', infoObject.isWarning ? 'PosImages/Question_yellow_2020.svg' : 'PosImages/Success-transparent_2020.svg');\r\n            window.find('#errorModalTitle').text(infoObject.title);\r\n            window.find('#errorModalBody').text(infoObject.body);\r\n\r\n            if (!!infoObject.customClass) {\r\n                $windowElement.attr('customClass', infoObject.customClass);\r\n            }\r\n            else {\r\n                $windowElement.attr('customClass', '');\r\n            }\r\n\r\n            if (typeof (onCloseCallback) == 'function') {\r\n\r\n                $windowElement.one('hidden.bs.modal', function () {\r\n                    if (typeof (onCloseCallback) == 'function')\r\n                        onCloseCallback();\r\n                });\r\n            }\r\n\r\n            var closeBtn = $windowElement.find('#closeErrorDialogButton');\r\n            if (infoObject.isWarning) {\r\n                closeBtn.toggleClass('btn-yellow', true);\r\n                closeBtn.toggleClass('btn-primary', false);\r\n            } else {\r\n                closeBtn.toggleClass('btn-yellow', false);\r\n                closeBtn.toggleClass('btn-primary', true);\r\n            }\r\n\r\n            $windowElement.find('#closeErrorDialog, #closeErrorDialogButton').click(function () {\r\n                $windowElement.modal('hide');\r\n                $windowElement.find('.mark-image img').attr('src', 'PosImages/Error_2020.svg');\r\n            });\r\n\r\n            return $windowElement;\r\n        };\r\n\r\n        helperService.roundCash = function (amount) {\r\n            var rule = configService.roundingRule;\r\n            var roundTo = configService.roundTo;\r\n\r\n            var intAmount = parseInt(amount * 1000);\r\n            switch (roundTo) {\r\n                case '0.01':\r\n                    break;\r\n                case '0.05':\r\n                    var lstDigit = parseInt(intAmount % 100);\r\n                    switch (rule) {\r\n                        case 'down':\r\n                            if (lstDigit >= 50)\r\n                                intAmount = intAmount - lstDigit + 50;\r\n                            else if (lstDigit > 0)\r\n                                intAmount -= lstDigit;\r\n                            break;\r\n                        case 'up':\r\n                            if (lstDigit > 50)\r\n                                intAmount = intAmount - lstDigit + 100;\r\n                            else if (lstDigit > 0)\r\n                                intAmount = intAmount - lstDigit + 50;\r\n                            break;\r\n                        case 'midpoint down':\r\n                            if (lstDigit <= 25)\r\n                                intAmount = intAmount - lstDigit;\r\n                            else if (lstDigit > 25 && lstDigit < 50)\r\n                                intAmount = intAmount - lstDigit + 50;\r\n                            else if (lstDigit >= 50 && lstDigit <= 75)\r\n                                intAmount = intAmount - lstDigit + 50;\r\n                            else if (lstDigit > 75)\r\n                                intAmount = intAmount - lstDigit + 100;\r\n                            break;\r\n                        case 'midpoint up':\r\n                            if (lstDigit < 25)\r\n                                intAmount = intAmount - lstDigit;\r\n                            else if (lstDigit >= 25 && lstDigit < 50)\r\n                                intAmount = intAmount - lstDigit + 50;\r\n                            else if (lstDigit >= 50 && lstDigit < 75)\r\n                                intAmount = intAmount - lstDigit + 50;\r\n                            else if (lstDigit >= 75)\r\n                                intAmount = intAmount - lstDigit + 100;\r\n                            break;\r\n                        default:\r\n                            break;\r\n                    }\r\n                    break;\r\n                case '0.10':\r\n                    var lstDigit = parseInt(intAmount % 100);\r\n                    switch (rule) {\r\n                        case 'down':\r\n                            intAmount -= lstDigit;\r\n                            break;\r\n                        case 'up':\r\n                            if (lstDigit !== 0)\r\n                                intAmount = intAmount - lstDigit + 100;\r\n                            break;\r\n                        case 'midpoint down':\r\n                            if (lstDigit <= 50)\r\n                                intAmount = intAmount - lstDigit;\r\n                            else if (lstDigit > 50)\r\n                                intAmount = intAmount - lstDigit + 100;\r\n                            break;\r\n                        case 'midpoint up':\r\n                            if (lstDigit < 50)\r\n                                intAmount = intAmount - lstDigit;\r\n                            else if (lstDigit >= 50)\r\n                                intAmount = intAmount - lstDigit + 100;\r\n                            break;\r\n                        default:\r\n                            break;\r\n                    }\r\n                    break;\r\n                case '0.50':\r\n                    var lstDigits = parseInt(intAmount % 1000);\r\n                    switch (rule) {\r\n                        case 'down':\r\n                            if (lstDigits >= 500)\r\n                                intAmount = intAmount - lstDigits + 500;\r\n                            else if (lstDigits > 0)\r\n                                intAmount -= lstDigits;\r\n                            break;\r\n                        case 'up':\r\n                            if (lstDigits > 500)\r\n                                intAmount = intAmount - lstDigits + 1000;\r\n                            else if (lstDigits > 0)\r\n                                intAmount = intAmount - lstDigits + 500;\r\n                            break;\r\n                        case 'midpoint down':\r\n                            if (lstDigits <= 250)\r\n                                intAmount = intAmount - lstDigits;\r\n                            else if (lstDigits > 250 && lstDigits < 500)\r\n                                intAmount = intAmount - lstDigits + 500;\r\n                            else if (lstDigits >= 500 && lstDigits <= 750)\r\n                                intAmount = intAmount - lstDigits + 500;\r\n                            else if (lstDigits > 750)\r\n                                intAmount = intAmount - lstDigits + 1000;\r\n                            break;\r\n                        case 'midpoint up':\r\n                            if (lstDigits < 250)\r\n                                intAmount = intAmount - lstDigits;\r\n                            else if (lstDigits >= 250 && lstDigits < 500)\r\n                                intAmount = intAmount - lstDigits + 500;\r\n                            else if (lstDigits >= 500 && lstDigits < 750)\r\n                                intAmount = intAmount - lstDigits + 500;\r\n                            else if (lstDigits >= 750)\r\n                                intAmount = intAmount - lstDigits + 1000;\r\n                            break;\r\n                        default:\r\n                            break;\r\n                    }\r\n                    break;\r\n                case '1.00':\r\n                    var lstDigits = parseInt(intAmount % 1000);\r\n                    switch (rule) {\r\n                        case 'down':\r\n                            intAmount -= lstDigits;\r\n                            break;\r\n                        case 'up':\r\n                            if (lstDigits !== 0)\r\n                                intAmount = intAmount - lstDigits + 1000;\r\n                            break;\r\n                        case 'midpoint down':\r\n                            if (lstDigits <= 500)\r\n                                intAmount = intAmount - lstDigits;\r\n                            else if (lstDigits > 500)\r\n                                intAmount = intAmount - lstDigits + 1000;\r\n                            break;\r\n                        case 'midpoint up':\r\n                            if (lstDigits < 500)\r\n                                intAmount = intAmount - lstDigits;\r\n                            else if (lstDigits >= 500)\r\n                                intAmount = intAmount - lstDigits + 1000;\r\n                            break;\r\n                        default:\r\n                            break;\r\n                    }\r\n                    break;\r\n                default:\r\n                    break;\r\n            }\r\n\r\n            return helperService.DEARRound(intAmount / 1000, 2);\r\n        };\r\n\r\n        helperService.setFocus = function (elementId) {\r\n            $timeout(function () {\r\n                var el = $('#' + elementId);\r\n                //el.css('-webkit-user-select', 'auto');\r\n\r\n                //                console.log($('#' + elementId));\r\n                el.focus();\r\n                el.select();\r\n\r\n                if (configService.isMobile)\r\n                    Keyboard.show();\r\n\r\n                el[0].setSelectionRange(0, el[0].value.length);\r\n            });\r\n        }\r\n\r\n        helperService.hideKeyboard = function () {\r\n            try {\r\n                console.log('remove focus from all inputs');\r\n\r\n                if (document.activeElement)\r\n                    document.activeElement.blur();\r\n                var inputs = document.querySelectorAll('input');\r\n                for (var i = 0; i < inputs.length; i++) {\r\n                    inputs[i].blur();\r\n                }\r\n            }\r\n            catch (er) {\r\n                alert('Error ' + er.name + \":\" + er.message + \"\\n\" + er.stack);\r\n            }\r\n        };\r\n\r\n        helperService.pad = function (n, width, z) {\r\n            z = z || '0';\r\n            n = n + '';\r\n            return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\r\n        }\r\n\r\n        helperService.checkDeviceVersion = function () {\r\n            if (configService.isSite) {\r\n                return true;\r\n            } else {\r\n                return ((device.platform !== 'Android') || (device.platform === 'Android' && device.version >= configService.minimalAndroidVersion));\r\n            }\r\n        }\r\n\r\n        helperService.checkDeviceVersionIsBelowMinimal = function () {\r\n            if (configService.isSite) {\r\n                return false;\r\n            } else {\r\n                return device.platform === 'Android' && device.version < configService.minimalAndroidVersion;\r\n            }\r\n        }\r\n\r\n        helperService.guidToFlatString = function (g) {\r\n            var s = g.replace(/[^0-9a-f]/ig, '').toLowerCase();\r\n            return s;\r\n        };\r\n\r\n        helperService.gotoSell = function () {\r\n            $.blockUI();\r\n            window.localStorage.setItem('continueSale', null);\r\n            $location.path('/sell');\r\n            return false;\r\n        };\r\n\r\n        helperService.gotoParkedSales = function () {\r\n            $.blockUI();\r\n            $location.path('/salesparked');\r\n            return false;\r\n        };\r\n\r\n        helperService.trimArray = function (arr) {\r\n            if (!arr) return null;\r\n\r\n            var res = [];\r\n            angular.forEach(arr, function (el) {\r\n                res.push(el.trim());\r\n            });\r\n\r\n            return res;\r\n        };\r\n\r\n        helperService.extractCurrentQuickKeyInfo = function (qkey) {\r\n            if (!configService.quickKeyTemplateID)\r\n                return null;\r\n\r\n            var qdataTemp = JSON.parse(configService.quickKeyData);\r\n            var qdata = null;\r\n            if (!!qdataTemp) {\r\n\r\n                if (!!qkey) {\r\n                    var qdata = qdataTemp.filter(function (el) { return el.labelID == qkey; })[0];\r\n                    if (!qdata)\r\n                        return null;\r\n\r\n                    if (!!qdata.brands && qdata.brands.length > 0) {\r\n                        qdata.brands = helperService.trimArray(qdata.brands);\r\n                    }\r\n                    if (!!qdata.categories && qdata.categories.length > 0) {\r\n                        qdata.categories = helperService.trimArray(qdata.categories);\r\n                    }\r\n                    if (!!qdata.tags && qdata.tags.length > 0) {\r\n                        qdata.tags = helperService.trimArray(qdata.tags);\r\n                    }\r\n\r\n                    if (!qdata.groupingOperator)\r\n                        qdata.groupingOperator = 'OR';\r\n                }\r\n                else {\r\n\r\n                    return qdataTemp;\r\n                }\r\n            }\r\n\r\n            return qdata;\r\n        };\r\n\r\n        helperService.checkClickedElement = function (e, name) {\r\n            var elpt = $(document.elementFromPoint(e.pageX, e.pageY));\r\n            if (elpt.attr('name') == name ||\r\n                elpt.parent().attr('name') == name) {\r\n                return true;\r\n            }\r\n\r\n            return false;\r\n        };\r\n\r\n        helperService.getSearchParams = function () {\r\n            var cs = window.localStorage.getItem('continueSale');\r\n            var cSearch = cs ? JSON.parse(cs) : {};\r\n            if (!cSearch)\r\n                cSearch = {};\r\n\r\n            return cSearch;\r\n        };\r\n\r\n        helperService.sendMessage = function (msg, prms) {\r\n            $rootScope.$broadcast(msg, prms);\r\n        };\r\n\r\n        helperService.setDatepicker = function (dateFormatFun, sel, customClass, dateLimitRange, fun, obj) {\r\n            $timeout(function () {\r\n                var _customClass = '';\r\n                if (!!customClass) {\r\n                    _customClass = customClass;\r\n                }\r\n                var dateFormat = dateFormatFun;\r\n                if(!$(sel).datepicker || !$(sel).is('.hasDatepicker')) {\r\n                    $(sel).pickerInited = true;\r\n                    if(!dateLimitRange)\r\n                        dateLimitRange = 100;\r\n\r\n                    var dtMin = moment().year(moment().year() - dateLimitRange).month(0).date(1).hour(0).minute(0).second(0).toDate();\r\n                    var dtMax = moment().year(moment().year() + dateLimitRange).month(11).date(31).hour(23).minute(59).second(59).toDate();\r\n\r\n                    $(sel).datepicker({\r\n                            // defaultDate: \"-1w\",\r\n                            numberOfMonths: 1,\r\n                            minDate: dtMin,\r\n                            maxDate: dtMax,\r\n                            dateFormat: dateFormat,\r\n                            showButtonPanel: true,\r\n                            onClose: function (dateText, instance) {\r\n                                if (_customClass != '') {\r\n                                    instance.dpDiv.removeClass(_customClass);\r\n                                }\r\n\r\n                                if(instance.fun)\r\n                                    instance.fun(instance.obj);\r\n                            },\r\n                            beforeShow: function (input, instance) {\r\n\r\n                                if (_customClass != '') {\r\n                                    instance.dpDiv.addClass(_customClass);\r\n                                }\r\n\r\n                                if(typeof(fun) === 'function') {\r\n                                    instance.fun = fun;\r\n                                    instance.obj = obj;\r\n                                }\r\n\r\n                                setTimeout(function () {\r\n                                    var off = $(input).offset();\r\n                                    var widget = $(input).datepicker(\"widget\");\r\n                                    var off2 = widget.offset();\r\n                                    var width = widget.width();\r\n\r\n                                    var buttonPane = $(input)\r\n                                        .datepicker(\"widget\")\r\n                                        .find(\".ui-datepicker-buttonpane\");\r\n\r\n                                    buttonPane.empty();\r\n                                    $(\"<button>\", {\r\n                                        text: \"Today\",\r\n                                        click: function () {\r\n                                            $(sel).datepicker('setDate', new Date()).datepicker('hide').blur().change();\r\n                                        }\r\n                                    }).appendTo(buttonPane).addClass(\"ui-datepicker-current ui-state-default ui-priority-primary ui-corner-all\");\r\n\r\n                                    $(\"<button>\", {\r\n                                        text: \"Reset\",\r\n                                        click: function () {\r\n                                            $.datepicker._clearDate(input);\r\n                                        }\r\n                                    }).appendTo(buttonPane).addClass(\"ui-datepicker-current ui-state-default ui-priority-primary ui-corner-all\");\r\n\r\n                                    //setTimeout(function () {\r\n                                    //    $('.ui-datepicker-prev').focus();\r\n                                    //}, 1)\r\n                                }, 1);\r\n                            }\r\n                        });\r\n\r\n                    $.datepicker._gotoToday = function (id) {\r\n                        $(id).datepicker('setDate', new Date()).datepicker('hide').blur().change();\r\n                    };\r\n                }\r\n            });\r\n        };\r\n\r\n        helperService.setDatepicker2 = function (dateFormatFun, sel, beforeFun, closeFun) {\r\n            $timeout(function () {\r\n                var dateFormat = dateFormatFun,\r\n                    date = $(sel).datepicker({\r\n                        defaultDate: \"-1w\",\r\n                        numberOfMonths: 1,\r\n                        dateFormat: dateFormat,\r\n                        showButtonPanel: true,\r\n                        showOn: \"button\",\r\n                        butttonImage: \"PosImages/calendar.svg\",\r\n                        onClose: closeFun,\r\n                        beforeShow: beforeFun\r\n                    });\r\n                $.datepicker._gotoToday = function (id) {\r\n                    $(id).datepicker('setDate', new Date()).datepicker('hide').blur().change();\r\n                };\r\n\r\n            });\r\n        };\r\n\r\n        helperService.getEmailClass = function (formElement) {\r\n            if ((!formElement.$invalid && formElement.$dirty) || (!formElement.$invalid && formElement.length > 0))\r\n                return 'dp_has-success has-success';\r\n            else if (((formElement.$invalid || formElement.$error.required || formElement.$error.email) && (formElement.$dirty || formElement.length > 0)))\r\n                return 'has-danger dp_has-danger';\r\n        }\r\n\r\n        helperService.goToHomePage = function () {\r\n            $location.path('/home');\r\n        };\r\n\r\n        helperService.isLoyaltyEnabled = function () {\r\n            return configService.enableLoyalty === true;\r\n        };\r\n\r\n        // helperService.isLoyaltyLionEnabled = function() {\r\n        //     return !configService.loyaltyLionToken ? false : true;\r\n        // };\r\n\r\n        // store current sale to make it possible to restore sale after emergency exit from app\r\n        helperService.storeCurrentSale = function (sale, scope, payment, paymentType, amount) {\r\n            if (!!sale && !!sale.CheckoutItems && sale.CheckoutItems.length > 0) {\r\n                var obj = {\r\n                    sale: sale,\r\n                    outletID: configService.lastOutletID,\r\n                    saleType: scope.saleType,\r\n                    operationName: scope.operationName,\r\n                    payment: payment,\r\n                    paymentType: paymentType,\r\n                    creditCardPaymentProcessorID: scope.creditCardPaymentProcessorID,\r\n                    realSum: !amount ? 0 : amount\r\n                };\r\n\r\n                localStorage.setItem('CurrentSale', JSON.stringify(obj));\r\n                console.log('store current sale');\r\n            } else {\r\n                localStorage.removeItem('CurrentSale');\r\n                console.log('clear current sale');\r\n            }\r\n        };\r\n\r\n        helperService.restoreCurrentSale = function () {\r\n            var obj = localStorage.getItem('CurrentSale');\r\n            var sale = null;\r\n            if (obj) {\r\n                obj = JSON.parse(obj);\r\n                if (obj.outletID === configService.lastOutletID && !!obj.sale) {\r\n                    sale = convertFromOld(obj.sale);\r\n                    sale.Surcharges = []; // clear surcharges as they are a part of payments and we returns to sale page\r\n                }\r\n\r\n                console.log('restore current sale');\r\n                return {\r\n                    sale: convertFromOld(sale),\r\n                    saleType: obj.saleType,\r\n                    operationName: obj.operationName,\r\n                    payment: !obj.payment ? null : obj.payment,\r\n                    paymentType: !obj.paymentType ? null : obj.paymentType,\r\n                    creditCardPaymentProcessorID: obj.creditCardPaymentProcessorID,\r\n                    realSum: obj.realSum\r\n                };\r\n            }\r\n\r\n            return null;\r\n        };\r\n\r\n        helperService.fitHeightTypeahead = function (selector, isModalDialog, modalContent) {\r\n            var $el = $(selector);\r\n\r\n            if (isModalDialog == true) {\r\n                var $content = $(modalContent);\r\n\r\n                var elTop = $el.offset().top;\r\n                var contentTop = $content.offset().top;\r\n\r\n                var contentHeight = $content.height();\r\n\r\n                var availableHeight = contentHeight - (elTop - contentTop);\r\n\r\n                $el.css('max-height', availableHeight);\r\n            }\r\n            else {\r\n                var elTop = $el.offset().top;\r\n                var availableHeight = $(window).innerHeight() - elTop - 10;\r\n\r\n                // if (buildConfiguration.platform === 'android') {\r\n                    var keyboardHeight = $('#hAndroidKeyboardHeight').val();\r\n                    if (keyboardHeight > 0) {\r\n                        availableHeight = availableHeight - keyboardHeight;\r\n                    }\r\n                // }\r\n\r\n\r\n                $el.css('max-height', availableHeight);\r\n            }\r\n        };\r\n\r\n        helperService.resizeModalTypeahead = function (selector, modalContent, isOpen) {\r\n            if (configService.isMobile) {\r\n                var $el = $(selector);\r\n                var $elPopup = $('#' + $el.attr('aria-owns'));\r\n\r\n                var $content = $(modalContent);\r\n                var $resizeContnet = $content.find('.type-head-resize-content');\r\n\r\n                var elTop = $elPopup.offset().top;\r\n                var contentTop = $resizeContnet.offset().top;\r\n\r\n                var contentHeight = $resizeContnet.height();\r\n\r\n                /*var availableHeight = contentHeight - (elTop - contentTop);\r\n\r\n                $el.css('max-height', availableHeight);*/\r\n\r\n                var elemHeight = $elPopup.height();\r\n\r\n                if (isOpen) {\r\n                    if (elemHeight + elTop > contentHeight) {\r\n                        $resizeContnet.css('height', elemHeight + elTop + 20);\r\n                        $el.attr('prev-height', contentHeight);\r\n                    }\r\n                }\r\n                else {\r\n                    if (!!$el.attr('prev-height')) {\r\n                        $resizeContnet.css('height', $el.attr('prev-height'));\r\n                        $el.attr('prev-height', '');\r\n                    }\r\n                }\r\n            }\r\n        };\r\n\r\n\r\n        helperService.formatBalance = function (value) {\r\n            if (value == 0) {\r\n                return $filter('currency')(0);\r\n            }\r\n            else {\r\n                var absValue = Math.abs(value);\r\n                if (value > 0) {\r\n                    return '-' + $filter('currency')(absValue);\r\n                }\r\n                else {\r\n                    return $filter('currency')(absValue);\r\n                }\r\n            }\r\n        };\r\n\r\n        helperService.getModalConfiguration = function () {\r\n            return {\r\n                headerHeight: 0,\r\n                //modalHeaderHeight: 55,\r\n                modalTopPadding: 0,\r\n                modalBottomPadding: 0\r\n            };\r\n        };\r\n\r\n        helperService.getModalContainerHeight = function (el) {\r\n            var mobileSettings = helperService.getModalConfiguration();\r\n\r\n            var modalHeaderHeight = el.closest('.modal-content').find('.modal-header').outerHeight();\r\n            var paddings = mobileSettings.headerHeight + mobileSettings.modalBottomPadding + modalHeaderHeight + mobileSettings.modalTopPadding;\r\n            var screenHeight = window.innerHeight;\r\n            var modalContainerHeight = screenHeight - paddings;\r\n            return modalContainerHeight;\r\n        };\r\n\r\n        helperService.getGuid = function () {\r\n            function _p8(s) {\r\n                var p = (Math.random().toString(16) + \"000000000\").substr(2, 8);\r\n                return s ? \"-\" + p.substr(0, 4) + \"-\" + p.substr(4, 4) : p;\r\n            }\r\n            return _p8() + _p8(true) + _p8(true) + _p8();\r\n        };\r\n\r\n        helperService.uniqueBy = function (a, key) {\r\n            var hashTable = {};\r\n\r\n            $.each(a, function (idx, el) {\r\n                if (!hashTable[el[key]])\r\n                    hashTable[el[key]] = el;\r\n            });\r\n\r\n            var result = [];\r\n\r\n            for (let i in hashTable) {\r\n                result.push(hashTable[i]);\r\n            }\r\n\r\n            return result;\r\n        };\r\n\r\n        helperService.escapeString = function (s) {\r\n            if (!s || typeof (s) !== 'string' || s.length == 0)\r\n                return s;\r\n\r\n            var b = s.replace(/'/g, \"''\");\r\n            return b;\r\n        };\r\n\r\n        helperService.resolvePromise = function (res) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res);\r\n            return deferred.promise;\r\n        };\r\n\r\n        helperService.rejectPromise = function (err) {\r\n            var deferred = $q.defer();\r\n            deferred.reject(err);\r\n            return deferred.promise;\r\n        };\r\n\r\n        helperService.isSyncIndicatorSet = false;\r\n\r\n        helperService.getSaleQueue = function () {\r\n            var queue = null;\r\n            try {\r\n                queue = JSON.parse(window.localStorage.getItem('queueToSend'));\r\n                if (!!queue) {\r\n                    $.each(queue, function (i, el) {\r\n                        if (!el.createdDate)\r\n                            el.createdDate = Date.now();\r\n                    });\r\n                }\r\n\r\n            } catch (e) {\r\n                queue = null;\r\n            }\r\n\r\n            return queue;\r\n        };\r\n\r\n        helperService.storeSaleQueue = function (queue) {\r\n            window.localStorage.setItem('queueToSend', JSON.stringify(queue));\r\n        };\r\n\r\n        helperService.checkNSetIndicator = function (queue) {\r\n            try {\r\n                let setIndicator = false;\r\n                if (!!queue) {\r\n    \r\n                    $.each(queue, function (i, el) {\r\n                        if (!setIndicator) {\r\n                            const tmpr = (Date.now() - el.createdDate) / 1000 / 60; // in minutes\r\n                            if (tmpr > 1)\r\n                                setIndicator = true;\r\n                        }\r\n                    });\r\n                }\r\n    \r\n                if (helperService.isSyncIndicatorSet !== setIndicator) {\r\n                    helperService.isSyncIndicatorSet = setIndicator;\r\n                    $rootScope.$broadcast(events.HEADER_SYNC_STATUS_EVENT, setIndicator ? events.STATUS_TOO_LONG : events.STATUS_OK);\r\n                }\r\n            } catch (e) {\r\n                console.error(e);\r\n            }\r\n        };\r\n\r\n        const PROCESS_QUEUE_FAIL_THRESHOLD = 5;\r\n\r\n        helperService.processQueueToSendFail = function (obj) {\r\n            var queue = helperService.getSaleQueue();\r\n            if (!queue)\r\n                queue = [];\r\n\r\n            var obj = queue.length > 0 ? queue[0] : undefined;\r\n            if (obj) {\r\n                if (obj.failCounter !== undefined) {\r\n                    obj.failCounter += 1\r\n                } else {\r\n                    obj.failCounter = 1;\r\n                }\r\n\r\n                // move item to the tail of the queue\r\n                if (configService.isOnline || obj.failCounter > PROCESS_QUEUE_FAIL_THRESHOLD) {\r\n                    obj = queue.shift(),\r\n                    obj.failCounter = 0;\r\n                    queue.push(obj);\r\n                }\r\n\r\n                helperService.storeSaleQueue(queue);\r\n            }\r\n        };\r\n\r\n        helperService.processQueueToSendSuccess = function (obj) {\r\n            var queue = helperService.getSaleQueue();\r\n            if (obj && queue && queue.length>0) {\r\n                queue = queue.filter(function(o) {return o.sale.OperationID != obj.sale.OperationID;});\r\n                helperService.storeSaleQueue(queue);\r\n            }\r\n        };\r\n\r\n        helperService.getQueueSaleToSend = function (shiftItem) {\r\n            var queue = helperService.getSaleQueue();\r\n            helperService.checkNSetIndicator(queue);\r\n\r\n            if (!queue) return null;\r\n\r\n            var obj = queue.shift();\r\n            if(shiftItem === true) // remove item from queue and save this back\r\n                helperService.storeSaleQueue(queue);\r\n\r\n            return obj;\r\n        };\r\n\r\n        helperService.compareStrings = function (a, b, treatNullAsValue) {\r\n            if (a == null && b == null) return (treatNullAsValue === true ? true : false);\r\n            if ((a == null && b != null) || (a != null && b == null)) return false;\r\n            return a.toUpperCase() === b.toUpperCase();\r\n        };\r\n\r\n        helperService.addValues = function (a, b) {\r\n            if (!a) a = 0;\r\n            if (!b) b = 0;\r\n            return Number(a) + Number(b);\r\n        };\r\n\r\n        helperService.mapToList = function (map) {\r\n            var res = [];\r\n            $.each(Object.keys(map), function (i, k) {\r\n                res.push(map[k]);\r\n            });\r\n\r\n            return res;\r\n        };\r\n\r\n        helperService.setSpecialCurrencySymbols = function () {\r\n            switch ($locale.localeID) {\r\n                case 'eu_ES':\r\n                    $locale.NUMBER_FORMATS.GROUP_SEP = ',';\r\n                    $locale.NUMBER_FORMATS.DECIMAL_SEP='.';\r\n                    break;\r\n                case 'ar_KW':\r\n                    $locale.NUMBER_FORMATS.CURRENCY_SYM = 'KWD';\r\n                    break;\r\n                case 'ar_SA':\r\n                    $locale.NUMBER_FORMATS.CURRENCY_SYM = 'SAR';\r\n                    break;\r\n                case 'en_US':\r\n                    if (configService.currency === 'MWK')\r\n                        $locale.NUMBER_FORMATS.CURRENCY_SYM = 'MK';\r\n                    else if (configService.currency === 'XAF')\r\n                        $locale.NUMBER_FORMATS.CURRENCY_SYM = 'XAF';\r\n                    else if (configService.currency === 'VUV')\r\n                        $locale.NUMBER_FORMATS.CURRENCY_SYM = 'VT';\r\n                    else if (configService.currency === 'MVR')\r\n                        $locale.NUMBER_FORMATS.CURRENCY_SYM = 'MVR';\r\n                    break;\r\n                case 'ar_AE':\r\n                    $locale.NUMBER_FORMATS.DECIMAL_SEP = '.';\r\n                    $locale.NUMBER_FORMATS.CURRENCY_SYM = 'AED';\r\n                    break;\r\n                case 'dv-MV':\r\n                    $locale.NUMBER_FORMATS.CURRENCY_SYM = 'MVR';\r\n            }\r\n        };\r\n\r\n        helperService.unpack = function (context, data) {\r\n            var deferred = $q.defer();\r\n\r\n            if (window.useWorker) {\r\n                try {\r\n                    if (!context.worker) {\r\n                    context.worker = new UnpackWorker();\r\n                    }\r\n\r\n                context.worker.postMessage(data);\r\n                context.worker.onmessage = function (e) {\r\n                    deferred.resolve(e.data);\r\n                };\r\n                context.worker.onerror = function (e) {\r\n                    deferred.reject(e.data);\r\n                };\r\n                } catch (e) {\r\n                    window.useWorker = false;\r\n                    console.error(e);\r\n                    var res = unpackArray(data);\r\n                    deferred.resolve(res);\r\n                }\r\n            } else {\r\n                var res = unpackArray(data);\r\n                deferred.resolve(res);\r\n            }\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        helperService.showNewCheckoutUI = function (sale) {\r\n            return CalculatorHelperService.useNewCalculation(sale);\r\n        };\r\n\r\n        helperService.hideDatePickers = function (sel) {\r\n            $(sel).datepicker('hide');\r\n        };\r\n\r\n        helperService.b64toBlob = function(b64Data, contentType) {\r\n            var byteCharacters = atob(b64Data);\r\n\r\n            var byteArrays = [];\r\n\r\n            for (var offset = 0; offset < byteCharacters.length; offset += 512) {\r\n                var slice = byteCharacters.slice(offset, offset + 512),\r\n                    byteNumbers = new Array(slice.length);\r\n                for (var i = 0; i < slice.length; i++) {\r\n                    byteNumbers[i] = slice.charCodeAt(i);\r\n                }\r\n                var byteArray = new Uint8Array(byteNumbers);\r\n\r\n                byteArrays.push(byteArray);\r\n            }\r\n\r\n            var blob = new Blob(byteArrays, { type: contentType });\r\n            return blob;\r\n        };\r\n\r\n        helperService.printPdfReport = function (src, fileName) {\r\n            // var deferred = $q.defer();\r\n            // var src2 = URL.createObjectURL(helperService.b64toBlob(src, 'application/pdf'));\r\n\r\n            // var objFra = $('#pdfFrame');\r\n            // objFra[0].setAttribute('src', src2);\r\n            // objFra[0].contentWindow.print();\r\n\r\n            // helperService.showDialog('#pdfPreviewDialog');\r\n            // deferred.resolve(true);\r\n            // return deferred.promise;\r\n\r\n            if(configService.isMobile === true)\r\n                return helperService.printPdf(src, fileName);\r\n            else\r\n                return helperService.downloadPdfReport(src, fileName);\r\n        };\r\n\r\n        helperService.printPdf = function (base64Pdf, fileName) {\r\n            if (base64Pdf.startsWith('data:application/pdf;base64,')) {\r\n                base64Pdf = base64Pdf.replace('data:application/pdf;base64,', '');\r\n            }\r\n            \r\n            var deferred = $q.defer();\r\n\r\n            plugins.PrintPDF.print({\r\n                data: base64Pdf,\r\n                type: 'Data',\r\n                title: 'Print Document',\r\n                success: function (res) {\r\n                    deferred.resolve(fileName);\r\n                },\r\n                error: function (data) {\r\n                    var err = JSON.parse(data);\r\n                    deferred.reject(err);\r\n                }\r\n            });\r\n\r\n            return deferred;\r\n        };\r\n\r\n        helperService.downloadPdfReport = function (src, fileName) {\r\n            var deferred = $q.defer();\r\n\r\n            var link = URL.createObjectURL(helperService.b64toBlob(src, 'application/pdf'));\r\n            var downloadLink;\r\n\r\n            // Download link\r\n            $('#pdfTmpLink').remove();;\r\n            var lnk = $('<a id=\"pdfTmpLink\" target=\"_blank\" style=\"display:none;\" href=' + link + '></a>');\r\n            downloadLink = lnk[0];\r\n            document.body.appendChild(downloadLink);\r\n\r\n//            downloadLink = document.createElement(\"a\");\r\n            // File name\r\n//            downloadLink.download = fileName;\r\n            // Create a link to the file\r\n//            downloadLink.href = link;\r\n            // Hide download link\r\n//            downloadLink.style.display = \"none\";\r\n            // Add the link to DOM\r\n//            document.body.appendChild(downloadLink);\r\n\r\n            // Click download link\r\n            downloadLink.click();\r\n\r\n            deferred.resolve(fileName);\r\n            return deferred.promise;\r\n        };\r\n\r\n        helperService.cameraScan = function (sequense, fireEvent) {\r\n            $rootScope.$broadcast('cameraScan.show', {\r\n                isSequential: sequense === true,\r\n                needFireEvent: fireEvent === true\r\n            });\r\n        };\r\n\r\n        helperService.canShowCameraScanIcon = function() {\r\n            var sets = configService.getScannerSettings();\r\n            return helperService.isCameraScanAvailable() && sets.enableCameraScan === true;\r\n        };\r\n\r\n        helperService.isCameraScanAvailable = function() {\r\n            return configService.isEmulator || configService.isMobile || configService.hasCamera;\r\n        };\r\n\r\n        helperService.getReceiptProcessSettings = function (el) {\r\n\r\n            el.find(\"span:contains('{{itemPrintSettings.')\").each(function () {\r\n                var fe = $(this);\r\n                var prn = typeof (fe.parent) == 'function' ? fe.parent() : fe;\r\n                prn = typeof (prn.parent) == 'function' ? prn.parent() : prn;\r\n\r\n                switch (fe.text()) {\r\n                    case '{{itemPrintSettings.FontScaleRelativeTo-3inch}}':\r\n                        prn.append('<div print-setting=\"FontScaleRelativeTo3inch\" ></div>');\r\n                        break;\r\n\r\n                    case '{{itemPrintSettings.BreakWordsInTable}}':\r\n                        prn.append('<div print-setting=\"BreakWordsInTable\" ></div>');\r\n                        break;\r\n                }\r\n            });\r\n        };\r\n\r\n        helperService.promiseWhile = function (data, condition, action) {\r\n            var whilst = (data) => {\r\n                console.log(data);\r\n              return condition(data) ?\r\n                action(data).then(whilst) :\r\n                Promise.resolve(data);\r\n            }\r\n            return whilst(data);\r\n        };\r\n\r\n       helperService.toLowerCamelCase = function(obj) {\r\n            if (Array.isArray(obj)) {\r\n                return obj.map(function(el) {\r\n                    return helperService.toLowerCamelCase(el);\r\n                });\r\n            }\r\n\r\n            var newObj = {}\r\n            Object.getOwnPropertyNames(obj).forEach(function(p) {\r\n                if (p == 'ID') {\r\n                    newObj['id'] = obj[p];\r\n                } else if (p[0] === p[0].toUpperCase()) {\r\n                    const newProp = p[0].toLowerCase() + p.substring(1, p.length);\r\n                    newObj[newProp] = obj[p]\r\n                } else {\r\n                    newObj[p] = obj[p];\r\n                }\r\n            });\r\n\r\n            return newObj;\r\n        };\r\n\r\n        return helperService;\r\n    }\r\n]);\r\n\r\nfunction printProcess(el) {\r\n    var win = window.open();\r\n    win.document.write($(el).prop('outerHTML'));\r\n    win.print();\r\n    win.close();\r\n}\r\n\r\nangular.module('services').controller('ErrorModalInstanceCtrl', function ($scope, $uibModalInstance) {\r\n\r\n    $scope.closeErrorDialog = function () {\r\n        $uibModalInstance.dismiss('cancel');\r\n    };\r\n    $scope.closeErrorDialogButton = function () {\r\n        $uibModalInstance.dismiss('cancel');\r\n    };\r\n});","angular.module(\"mainApp\").controller('homeController',\r\n    ['$scope', '$rootScope', 'loginService', 'constants', 'configService','$timeout',\r\n    function ($scope, $rootScope, loginService, constants, configService, $timeout) {\r\n        $scope.showStartForm = window.localStorage.getItem('FirstLoad') !== 'false';\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: '' }); // to hide sidebar details\r\n        console.log('homec: showStartForm ' + $scope.showStartForm);\r\n\r\n        if (!loginService.isLoggedIn() && $scope.showStartForm === false) {\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('login.show'); // show login page on application start\r\n            }, 100);\r\n        }\r\n\r\n        if ($scope.showStartForm) {\r\n\r\n            $timeout(function() {\r\n                window.localStorage.setItem('FirstLoad', false);\r\n            } ,1); \r\n        }\r\n\r\n        if (navigator.splashscreen && typeof navigator.splashscreen.hide === 'function' && !configService.isSite) {\r\n            $timeout(function () {\r\n                navigator.splashscreen.hide();\r\n            }, 300);\r\n        }\r\n\r\n        $scope.callLogin = function () {\r\n            $scope.showStartForm = false;\r\n            $rootScope.$broadcast('login.show');\r\n        };\r\n\r\n        $scope.callGetStarted = function () {\r\n            $.blockUI();\r\n\r\n            $timeout (function(){\r\n                let open = window.open;\r\n                if (typeof cordova !== 'undefined' && cordova.InAppBrowser) {\r\n                    open = cordova.InAppBrowser.open;\r\n                }\r\n                open(configService.getStartedURL, '_self','location=yes,usewkwebview=yes');\r\n            });\r\n\r\n        };\r\n\r\n    }]);","\r\nimport 'angular-route';\r\nimport 'angular-filter';\r\nimport 'angular-ui-validate';\r\nimport abt from 'angular-bootstrap-toggle';\r\nimport ngGettext from 'angular-gettext';\r\nimport ngSanitize from 'angular-sanitize';\r\nimport 'angular-smart-table';\r\nimport tooltip from 'angular-ui-bootstrap/src/tooltip/index-nocss';\r\nrequire('angular-paging');\r\nimport 'angular-ui-bootstrap';\r\nimport ngTouch from 'angular-touch';\r\nimport initializeCalculator from '../../TypePosScripts/Typings/Typings';\r\n// import initializeCalculator from '../../TypePosScripts/Typings/Typings'\r\n// import '../scripts/angular-uuid2.min.js';\r\n//require('../scripts/angular-uuid2.min.js')\r\n//import '@ui-grid/core';\r\nimport 'bootstrap';\r\nimport Boswer from 'bowser';\r\nimport moment from 'moment';\r\nimport buildConfiguration from './configEnvironment'\r\n\r\n\r\nwindow.moment = moment;\r\n\r\n// very important for collapse('hide') show, should be called after bootstrap import because bootstrap overriedes it\r\n$(function () {\r\n    $.support.transition = false;\r\n});\r\n\r\n// For an introduction to the Blank template, see the following documentation:\r\n// http://go.microsoft.com/fwlink/?LinkID=397704\r\n// To debug code on page load in Ripple or on Android devices/emulators: launch your app, set breakpoints, \r\n// and then run \"window.location.reload()\" in the JavaScript Console.\r\nif (window.navigator.userAgent.indexOf(\"Edge\") > -1) {\r\n    var fileref = document.createElement('script');\r\n    fileref.setAttribute(\"type\", \"text/javascript\");\r\n    fileref.setAttribute(\"src\", \"scripts/polyfill.js\");\r\n    document.getElementsByTagName(\"head\")[0].appendChild(fileref);\r\n}\r\n\r\nwindow.useWorker = true;\r\n// get browser\r\nif (window.isSite) {\r\n    sessionStorage.isNewSession = true;\r\n    const browser = Boswer.getParser(window.navigator.userAgent);\r\n    const isSafari = browser.isBrowser('safari');\r\n    const osVer = browser.getOSVersion();\r\n    const osver = (!!osVer && osVer.indexOf('.') > 0) ?\r\n        osVer.substring(0, osVer.indexOf('.')) :\r\n        osVer;\r\n\r\n    const isSafari11 = browser.satisfies({\r\n        macos: {\r\n            safari: \">=11\"\r\n        },\r\n        mobile: {\r\n            safari: \">=11\"\r\n        }\r\n    });\r\n\r\n    const isSafari9 = browser.satisfies({\r\n        macos: {\r\n            safari: \"<10\"\r\n        },\r\n        mobile: {\r\n            safari: \"<10\"\r\n        }\r\n    });\r\n\r\n    // worker mode works badly - not well synchronized when requested in parallel\r\n    window.useWorker = !isSafari || isSafari11;\r\n//    window.useWorker = false; // disable worker forever\r\n\r\n    const isIE = browser.isBrowser('internet explorer');\r\n    // main flag to check if Indexed DB is supported in browser in web pos mode\r\n    window.isSupported = !(isIE === true || (isSafari && isSafari9));\r\n    window.isOS9 = browser.getOSName() === 'iOS' && osver < 10;\r\n\r\n    if (window.isSupported && !window.useWorker) {\r\n        /*var fileref = document.createElement('script');\r\n        fileref.setAttribute(\"type\", \"text/javascript\");\r\n        fileref.setAttribute(\"src\", \"scripts/jsstore.worker.js\");\r\n        document.getElementsByTagName(\"head\")[0].appendChild(fileref);*/\r\n    }\r\n}\r\n\r\nif (!String.prototype.endsWith) {\r\n    String.prototype.endsWith = function (searchString, position) {\r\n        var subjectString = this.toString();\r\n        if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\r\n            position = subjectString.length;\r\n        }\r\n        position -= searchString.length;\r\n        var lastIndex = subjectString.indexOf(searchString, position);\r\n        return lastIndex !== -1 && lastIndex === position;\r\n    };\r\n}\r\n\r\nfunction type(details) {\r\n    details.constructor.prototype = details;\r\n    return details.constructor;\r\n}\r\n\r\n$.fn.selectRange = function (start, end) {\r\n    return this.each(function () {\r\n        if (this.setSelectionRange) {\r\n            this.focus();\r\n            this.setSelectionRange(start, end);\r\n        } else if (this.createTextRange) {\r\n            var range = this.createTextRange();\r\n            range.collapse(true);\r\n            range.moveEnd('character', end);\r\n            range.moveStart('character', start);\r\n            range.select();\r\n        }\r\n    });\r\n};\r\n\r\nfunction onBackKeyDown(e) {\r\n    e.preventDefault();\r\n    return false;\r\n}\r\n\r\n\r\nconst version = window.buildConfiguration?.appVersion ? window.buildConfiguration.appVersion.replace(/\\./g, '') : '';\r\nfunction getTemplateUrl(file) {\r\n    return `${file}?v=${version}`;\r\n}\r\n\r\n    angular.module('services', []);\r\n\r\n    var app = angular.module(\"mainApp\", ['ngRoute', /*'ngAnimate',*/ 'services', 'ui.validate', 'bw.paging', 'ui.toggle',\r\n        'angularUUID2', 'smart-table', 'ui.bootstrap', 'ui.bootstrap.tooltip', 'gettext',\r\n        'tmh.dynamicLocale', 'angular.filter', 'ngTouch', 'ngSanitize', \"ui.grid\"])\r\n        .config(['$routeProvider', 'tmhDynamicLocaleProvider', \r\n            function ($routeProvider, tmhDynamicLocaleProvider) {\r\n\r\n                $routeProvider\r\n                    .when('/sell', {\r\n                        templateUrl: getTemplateUrl('PosViews/sellPartial.html'),\r\n                        controller: 'sellController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/secondScreen', {\r\n                        templateUrl: getTemplateUrl('PosViews/secondScreen.html'),\r\n                        controller: 'secondScreenController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/offlinesales', {\r\n                        templateUrl: getTemplateUrl('PosViews/offlineSalesPartial.html'),\r\n                        controller: 'offlineSalesController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/saleshistory', {\r\n                        templateUrl: getTemplateUrl('PosViews/salesHistoryPartial.html'),\r\n                        controller: 'salesHistoryController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/delivery', {\r\n                        templateUrl: getTemplateUrl('PosViews/deliveryPartial.html'),\r\n                        controller: 'deliveryController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/salesparked', {\r\n                        templateUrl: getTemplateUrl('PosViews/salesParkedPartial.html'),\r\n                        controller: 'salesParkedController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/customers', {\r\n                        templateUrl: getTemplateUrl('PosViews/customersPartial.html'),\r\n                        controller: 'customersController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/opencloseregistry', {\r\n                        templateUrl: getTemplateUrl('PosViews/openCloseRegistryPartial.html'),\r\n                        controller: 'openCloseRegistryController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/cashManagement', {\r\n                        templateUrl: getTemplateUrl('PosViews/cashManagementPartial.html'),\r\n                        controller: 'cashManagementController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/userManagement', {\r\n                        templateUrl: getTemplateUrl('PosViews/userManagementPartial.html'),\r\n                        controller: 'userManagementController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/dashboard', {\r\n                        templateUrl: getTemplateUrl('PosViews/dashboardPartial.html'),\r\n                        controller: 'dashboardController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/productManagement', {\r\n                        templateUrl: getTemplateUrl('PosViews/productManagementPartial.html'),\r\n                        controller: 'productManagementController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/setup', {\r\n                        templateUrl: getTemplateUrl('PosViews/setupPartial.html'),\r\n                        controller: 'setupController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/pinCodeSetup', {\r\n                        templateUrl: getTemplateUrl('PosViews/pinCodeSetupPartial.html'),\r\n                        controller: 'setPinController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/stockTake', {\r\n                        templateUrl: getTemplateUrl('PosViews/stockTakePartial.html'),\r\n                        controller: 'stockTakeController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/stockTransfer', {\r\n                        templateUrl: getTemplateUrl('PosViews/stockTransferPartial.html'),\r\n                        controller: 'stockTransferController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/stockOrdering', {\r\n                        templateUrl: getTemplateUrl('PosViews/stockOrderingPartial.html'),\r\n                        controller: 'stockOrderingController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/reportRegisterClosure', {\r\n                        templateUrl: getTemplateUrl('PosViews/reportCloseRegistryPartial.html'),\r\n                        controller: 'reportCloseRegistryController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/reportSalesSummary', {\r\n                        templateUrl: getTemplateUrl('PosViews/reportSalesSummaryPartial.html'),\r\n                        controller: 'reportSalesSummaryController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/reportInventory', {\r\n                        templateUrl: getTemplateUrl('PosViews/reportInventoryPartial.html'),\r\n                        controller: 'reportInventoryController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/reportInTransit', {\r\n                        templateUrl: getTemplateUrl('PosViews/reportInTransitPartial.html'),\r\n                        controller: 'reportInTransitController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/reportProductPerformance', {\r\n                        templateUrl: getTemplateUrl('PosViews/reportProductPerformancePartial.html'),\r\n                        controller: 'reportProductPerformanceController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/reportGiftCard', {\r\n                        templateUrl: getTemplateUrl('PosViews/reportGiftCardPartial.html'),\r\n                        controller: 'reportGiftCardController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/reportSurcharge', {\r\n                        templateUrl: getTemplateUrl('PosViews/reportSurchargePartial.html'),\r\n                        controller: 'reportSurchargeController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/reportPaymentTypeSummary', {\r\n                        templateUrl: getTemplateUrl('PosViews/reportPaymentTypeSummaryPartial.html'),\r\n                        controller: 'reportPaymentTypeSummaryController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/reportStoreCredit', {\r\n                        templateUrl: getTemplateUrl('PosViews/reportStoreCreditPartial.html'),\r\n                        controller: 'reportStoreCreditController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/clickAndCollectGrid', {\r\n                        templateUrl: getTemplateUrl('PosViews/clickAndCollectGridPartial.html'),\r\n                        controller: 'clickAndCollectGridController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/', {\r\n                        redirectTo: '/home'\r\n                    })\r\n                    .when('/home', {\r\n                        templateUrl: getTemplateUrl('PosViews/homePartial.html'),\r\n                        controller: 'homeController',\r\n                        caseInsensitiveMatch: true\r\n                    })\r\n                    .when('/certificate-error', {\r\n                        templateUrl: getTemplateUrl('PosViews/certificate-error.component.html'),\r\n                        controller: 'certificateErrorComponent',\r\n                        caseInsensitiveMatch: true\r\n                    });\r\n                    // .when('/deliveryCalendar', {\r\n                    //     templateUrl: getTemplateUrl('PosViews/deliveryCalendarPartial.html'),\r\n                    //     controller: 'deliveryCalendarController',\r\n                    //     caseInsensitiveMatch: true\r\n                    // });\r\n\r\n                $routeProvider.otherwise({\r\n                    redirectTo: '/home'\r\n                });\r\n\r\n                window.localStorage.removeItem('forceRegisterClose');\r\n                window.localStorage.removeItem('reportRegisterClosure');\r\n\r\n                tmhDynamicLocaleProvider.localeLocationPattern('scripts/i18n/angular-locale_{{locale}}.js');\r\n                console.log(\"homec: config finished\");\r\n\r\n            }])\r\n        .run(function ($rootScope, helperService, configService, uuid2, constants, gettextCatalog, \r\n            barcodeService, cardPayService, receiptService, saleService, loyaltyService, webOnlyProvider, outletService) {\r\n                // this is fix for LL components that has not empty href and thus makes rediect\r\n                // that breaks main functionality\r\n                $rootScope.$on(\"$locationChangeStart\", function(event, next, current) { \r\n                    console.log(\"location changing to:\" + next); \r\n                    if(next && current && next.length < current.length) {\r\n                        var scp = current.substr(next.length);\r\n                        if(scp === '#/sell') {\r\n                            event.preventDefault();\r\n                        }\r\n                    }\r\n\r\n                    var $divs = $('.main-content, #gridRow > .grid-content, #productGrid > .grid-content, .grid-content .dp_content.grid-content, .dp_modal-body');\r\n                    $divs.off('scroll');\r\n                });\r\n\r\n            // add reference to helper service to be able to relate it in html\r\n            $rootScope.helperService = helperService;\r\n            $rootScope.configService = configService;\r\n            console.log(\"homec: first run finished\");\r\n            initializeCalculator(helperService, configService, uuid2, constants, gettextCatalog, \r\n                barcodeService, cardPayService, receiptService, saleService, loyaltyService, webOnlyProvider, outletService);\r\n        });\r\n\r\n    angular\r\n    .module('template',[])\r\n    .run(['$templateCache', function($templateCache) {\r\n        var url = 'PosViews/saleSummaryPartial.html';\r\n        $templateCache.put(url, require('../PosViews/saleSummaryPartial.html'));\r\n    }]);\r\n\r\n    function setupCrd() {\r\n        // now wait for device is ready and show all.\r\n        if (!!window.cordova) {\r\n\r\n            // Listen to the 'deviceready' event to resolve Cordova.\r\n            // This is when Cordova plugins can be used.\r\n            document.addEventListener('deviceready', function () {\r\n                console.log('deviceready fired');\r\n\r\n                // disable back button\r\n                document.addEventListener(\"backbutton\", onBackKeyDown, false);\r\n\r\n                checkPermissions(initThings);\r\n\r\n            }, false);\r\n        }\r\n        else {\r\n            setTimeout(function() {\r\n                var injector = angular.element('body').injector();\r\n                var location = injector.get('$location');\r\n                var isSecondScreen = location.$$path.toLowerCase() === '/secondscreen';\r\n    \r\n                if (!isSecondScreen) {\r\n                \r\n                    var jSqlProvider = injector.get('jsStoreProvider');\r\n        \r\n                    jSqlProvider.init(function (err) {\r\n                        $('.wait-device-ready').removeClass('wait-device-ready');\r\n                    });\r\n                        \r\n                    var secondTerminalService = injector.get('secondTerminalService');\r\n                    secondTerminalService.init();\r\n                } else {\r\n                    $('.wait-device-ready').removeClass('wait-device-ready');\r\n                }\r\n            }, 200);\r\n        }\r\n    }\r\n\r\n    function initThings() {\r\n        window.setTimeout(function () {\r\n\r\n            var injector = angular.element('body').injector();\r\n\r\n            var configService = injector.get('configService');\r\n            var deviceInfoService = injector.get('deviceInfo');\r\n            var printService = injector.get('printService');\r\n            var localDBProvider = injector.get('localDBProvider');\r\n            var secondTerminalService = injector.get('secondTerminalService');\r\n            var location = injector.get('$location');\r\n            var $rootScope = injector.get('$rootScope');\r\n            function navigateHome() {\r\n                $rootScope.$evalAsync(function () {\r\n                    $('.wait-device-ready').removeClass('wait-device-ready');\r\n                    location.path('/home');\r\n                });\r\n            }\r\n            var isSecondScreen = location.$$path.toLowerCase() === '/secondscreen';\r\n            const saleService = injector.get('saleService');\r\n            const cashManagementService = injector.get('cashManagementService');\r\n            const registryService = injector.get('registryService');\r\n\r\n            const servicesToAddCallbacks = [saleService, cashManagementService, registryService];\r\n\r\n            console.log(\"startUp set environment mobile\");\r\n            configService.isMobile = window.device && (window.device.isVirtual !== true || window.device.platform === 'iOS');\r\n            configService.isEmulator = window.device.isVirtual === true && window.device.platform !== 'iOS';\r\n\r\n            if (configService.isEmulator)\r\n                configService.isQAMode = true;\r\n\r\n            // configService.isClover = true;\r\n\r\n            if (configService.isMobile) {\r\n                console.log(\"will add event listener\");\r\n                document.addEventListener(\"pause\", function () {\r\n                    console.log(\"pause action appeared\");\r\n                }, false);\r\n\r\n                document.addEventListener(\"resume\", function () {\r\n                    console.log(\"resume action appeared\");\r\n                    setTimeout(function () {\r\n                        printService.resumeHandler();\r\n                    }, 100);\r\n                }, false);\r\n            }\r\n\r\n\r\n            if (configService.isMobile) {\r\n                console.log('os info: ' + window.device.platform + ', ' + window.device.version);\r\n                configService.packageCode = BuildInfo.packageName;\r\n                console.log(\"package name is:\" + configService.packageCode);\r\n                configService.isQAMode = configService.packageCode.indexOf('dear.pos.qa') >= 0;\r\n\r\n                // for WkWebView iOS and Android behave the same.\r\n                // if (buildConfiguration.platform === 'android') {\r\n                    window.addEventListener('keyboardDidShow', processKbdShow);\r\n                    window.addEventListener('keyboardDidHide', processKbdHide);\r\n                // }\r\n\r\n                window.plugins.starPrinter.startUp(function (err, result) {\r\n                    if (err) {\r\n                        console.log(\"startUp failed\");\r\n                    }\r\n                    else {\r\n                        console.log(\"startUp success\");\r\n                    }\r\n                });\r\n\r\n                console.log('starPrinter.startUp fired');\r\n\r\n\r\n                window.addEventListener('fireKeyPress', function (obj) {\r\n                    //console.log(\"fireKeyPress: \" + String.fromCharCode(obj.symbol));\r\n                    setTimeout(function () {\r\n                        var e = jQuery.Event(\"keypress.scannerDetection\");\r\n                        e.which = obj.symbol;\r\n                        $(document).trigger(e);\r\n                    }, 0);\r\n                });\r\n\r\n                // secondTerminalService.presentationIsAvailable = false; // true makes sense only for android mobile version\r\n\r\n                // set keyboard mode\r\n                var kbdset = configService.getScannerSettings();\r\n\r\n                //                        if (window.device.platform == 'iOS' && Number(window.device.version) >= 11) {\r\n                kbdset.enableSoftKbd = false;\r\n                //                    }\r\n\r\n                configService.setScannerSettings(kbdset);\r\n\r\n                try {\r\n                    navigator.mediaDevices.enumerateDevices()\r\n                    .then(function(devices){\r\n                        devices.forEach(function(d) {\r\n                            if (!configService.hasCamera && (d.kind === 'videoinput' || d.kind === 'video')) {\r\n                                configService.hasCamera = true;\r\n                            }\r\n                        });\r\n                    });\r\n                } catch (e) {\r\n                    console.log('cannot access  , getting from user agent');\r\n                    if (navigator.userAgent && (navigator.userAgent.indexOf('iPhone') >= 0 || navigator.userAgent.indexOf('iPad') >= 0)) {\r\n                        configService.hasCamera = true;\r\n                    }\r\n                }\r\n                \r\n\r\n                if (buildConfiguration.platform == 'android') {\r\n\r\n                    console.log(\"trying clover:\" + configService.isMobile);\r\n                    window.plugins.starPrinter.isClover(function (err, result) {\r\n                        if (err) {\r\n                            console.log(\"isClover failed\");\r\n                            configService.isClover = false;\r\n                        }\r\n                        else {\r\n                            configService.isClover = result.isClover === true;\r\n                            console.log(\"isClover success: \" + configService.isClover);\r\n                        }\r\n                    });\r\n                }\r\n            }\r\n\r\n            if (!isSecondScreen) {\r\n                secondTerminalService.init();\r\n            }\r\n\r\n            configService.setNetworkMode(navigator.connection.type !== (typeof Connection !== 'undefined' ? Connection.NONE : 'none'));\r\n\r\n            if (!isSecondScreen) {\r\n                if (window.isSupported && window.isSite || deviceInfoService.isSimulator) {\r\n                    var jSqlProvider = injector.get('jsStoreProvider');\r\n                    window.isSupported = true;\r\n                    jSqlProvider.init(function (err) {\r\n                        if (err) {\r\n                            var errorService = injector.get('errorService');\r\n                            errorService.showError(err);\r\n                            return;\r\n                        }\r\n                        navigateHome();\r\n                    });\r\n                } else {\r\n                localDBProvider.init(function (err) {\r\n                    if (err) {\r\n                        var errorService = injector.get('errorService');\r\n                        errorService.showError(err);\r\n                        return;\r\n                    }\r\n                    if (buildConfiguration.platform === 'android') {\r\n                        window.isSupported = true;\r\n                        var jSqlProvider = injector.get('jsStoreProvider');\r\n                        jSqlProvider.init(function (err2) {\r\n                            if (err2) {\r\n                                var errorService = injector.get('errorService');\r\n                                errorService.showError(err2);\r\n                            }\r\n                            navigateHome();\r\n                        });\r\n                    } else {\r\n                        navigateHome();\r\n                    }\r\n                });\r\n                }\r\n\r\n                setTimeout(function () {\r\n                    for (const service of servicesToAddCallbacks) {\r\n                        try {\r\n                            service.addCallback();\r\n                            console.log('added callback: ' + service.addCallback);\r\n                        } catch (e) {\r\n                            console.error(e);\r\n                        }\r\n                    }\r\n                }, 500);\r\n            } else {\r\n                $('.wait-device-ready').removeClass('wait-device-ready');\r\n            }\r\n\r\n        }, 200);\r\n    }\r\n\r\n    function checkPermissions(callbackFun) {\r\n        /*\r\n            WRITE_EXTERNAL_STORAGE\r\n            ACCESS_COARSE_LOCATION\r\n            ACCESS_FINE_LOCATION\r\n         */\r\n\r\n        var permissions = cordova.plugins.permissions;\r\n\r\n        const list = [\r\n            permissions.WRITE_EXTERNAL_STORAGE,\r\n            permissions.ACCESS_COARSE_LOCATION,\r\n            permissions.ACCESS_FINE_LOCATION,\r\n            permissions.CAMERA,\r\n            permissions.BLUETOOTH_CONNECT,\r\n            permissions.BLUETOOTH_SCAN\r\n        ];\r\n\r\n        permissions.checkPermission(list, function (status) {\r\n            if (status && !status.hasPermission) {\r\n                console.log(\"request Permissions\");\r\n                permissions.requestPermissions(\r\n                    list,\r\n                    function (status) {\r\n                        if (!status.hasPermission) console.log(\"Permissions No\");\r\n                        else {\r\n                            console.log(\"Permissions Yes\");\r\n                        }\r\n\r\n                        callbackFun();\r\n                    });\r\n            }\r\n            else {\r\n                console.log(\"Permission Yes\");\r\n                callbackFun();\r\n            }\r\n        });\r\n    }\r\n\r\n    function processKbdShow(event) {\r\n        var h = window.innerHeight - event.keyboardHeight;\r\n\r\n        $('#hAndroidKeyboardHeight').val(event.keyboardHeight);\r\n\r\n        $('.kbdResizeContainer').each(function (idx, el) {\r\n            if (!$(el).hasClass('keyboard-active')) {\r\n                if ($(el).prop('tagName') === 'FORM') {\r\n                    $(el).closest('.dp_modal-dialog').addClass('modal-active-keyboard');\r\n                }\r\n                const hs = parseInt($(el).css('height'));\r\n                if (hs) {\r\n                    h = hs - event.keyboardHeight;\r\n                }\r\n                $(el).css('max-height', h + 'px');\r\n                $(el).addClass('keyboard-active');\r\n            }\r\n        });\r\n\r\n        if ($(\"#isMobileDesign\").is(':visible') == false) {\r\n\r\n            var $el = $('.m-filter.open').find('.m-filter-content').find('.m-filter-content-wrapper');\r\n            if ($el.length > 0) {\r\n                $el.css('max-height', h + 'px');\r\n                $el.css('overflow-y', 'scroll');\r\n                $el.css('bottom', '0');\r\n                $el.css('left', '0');\r\n                $el.css('top', '0');\r\n                $el.css('right', '0');\r\n                $el.css('position', 'absolute');\r\n                $el.addClass('keyboard-active');\r\n            }\r\n        }\r\n\r\n        var actel = document.activeElement;//.scrollIntoView(true);\r\n\r\n        if (!!actel) {\r\n            if (window.device.platform === 'iOS' && parseInt(window.device.version) >= 11)\r\n                actel.scrollIntoView({ behavior: \"auto\", block: \"center\", inline: \"nearest\" });\r\n            else {\r\n                var el = $(actel);\r\n                var off = el.offset();\r\n                var lpos = off.top + el.height();\r\n                if (lpos > (h - 10)) {\r\n                    var prn = null;\r\n                    if ($('.m-filter.open').length > 0) {\r\n                        prn = el.closest('.m-filter-content-wrapper');\r\n                    }\r\n                    else {\r\n                        prn = el.closest('.kbdResizeContainer');\r\n                    }\r\n                    if (prn.length > 0) {\r\n                        prn[0].scrollBy(0, (lpos - h + 10));\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        setTimeout(function () {\r\n            var elem = angular.element(document.querySelector('[ng-app]'));\r\n            var injector = elem.injector();\r\n            var $rootScope = injector.get('$rootScope');\r\n            $rootScope.$apply(function () {\r\n                $rootScope.$broadcast('keyboard.show', true);\r\n            });\r\n        });\r\n    }\r\n\r\n    function processKbdHide() {\r\n        $('#hAndroidKeyboardHeight').val(0);\r\n\r\n        $('.kbdResizeContainer').each(function (idx, el) {\r\n            $(el).css('max-height', '');\r\n            $(el).removeClass('keyboard-active');\r\n            if ($(el).prop('tagName') === 'FORM') {\r\n                $(el).closest('.dp_modal-dialog').removeClass('modal-active-keyboard');\r\n            }\r\n        });\r\n\r\n        if ($(\"#isMobileDesign\").is(':visible') == false) {\r\n            var $el = $('.m-filter.open').find('.m-filter-content').find('.m-filter-content-wrapper');\r\n            if ($el.length > 0) {\r\n                $el.css('max-height', '');\r\n                $el.css('overflow-y', '');\r\n                $el.css('bottom', '');\r\n                $el.css('left', '');\r\n                $el.css('top', '');\r\n                $el.css('right', '');\r\n                $el.css('position', '');\r\n                $el.removeClass('keyboard-active');\r\n            }\r\n        }\r\n\r\n        setTimeout(function () {\r\n            var elem = angular.element(document.querySelector('[ng-app]'));\r\n            var injector = elem.injector();\r\n            var $rootScope = injector.get('$rootScope');\r\n            $rootScope.$apply(function () {\r\n                $rootScope.$broadcast('keyboard.hide', true);\r\n            });\r\n        });\r\n     }\r\n\r\n    app.run(['configService', 'printService', 'gettextCatalog', 'webOnlyProvider', '$location', '$rootScope',\r\n        function (configService, printService, gettextCatalog, webOnlyProvider, $location, $rootScope) {\r\n            if (window.localStorage.getItem('FirstLoad') !== 'false') {\r\n                window.localStorage.setItem('FirstLoad', true);\r\n            }\r\n        \r\n            if (!configService.isSite) {\r\n                document.addEventListener(\"offline\", function () { configService.setNetworkMode(false); }, false);\r\n                document.addEventListener(\"online\", function () { configService.setNetworkMode(true); }, false);\r\n            }\r\n\r\n            if (configService.isSite) {\r\n                configService.setBaseURL();\r\n                configService.isQAMode = configService.baseURL.indexOf('https://inventory.dearsystems.com') < 0;\r\n                \r\n\r\n                var path = $location.path();\r\n                if (!configService.loginUserID && path !== '/home' && path.toLowerCase() !== '/secondscreen') {\r\n                    $location.path('/home');\r\n                }\r\n            }\r\n\r\n            var currentLanguage = window.localStorage.getItem('currentLanguage');\r\n            if (!currentLanguage)\r\n                currentLanguage = 'en';\r\n            gettextCatalog.setCurrentLanguage(currentLanguage);\r\n            gettextCatalog.debug = false;\r\n\r\n            // init progress component\r\n            //        $.blockUI.defaults.message = '<div><img title=\"loading...\" src=\"PosImages/preloader.gif\"></div>';\r\n            $.blockUI.defaults.message = '<div class=\"preloader2\"><span></span><span></span><span></span><span></span><span></span></div>';\r\n            $.blockUI.defaults.overlayCSS = {\r\n                background: 'rgba(235,235,235,0.7)'\r\n            };\r\n\r\n            $.blockUI.defaults.css = {\r\n                backgroundColor: 'transparent',\r\n                border: 'none',\r\n                padding: 0,\r\n                margin: 0,\r\n                width: '30%',\r\n                top: '47%',\r\n                left: '35%',\r\n                textAlign: 'center',\r\n                color: 'transparent',\r\n                cursor: 'wait'\r\n            };\r\n\r\n            $.blockUI.defaults.baseZ = 100000;\r\n\r\n            $.blockUI.defaults.onBlock = function (element, options) {\r\n                $rootScope.isBlockUIVisible = true;\r\n            };\r\n\r\n            $.blockUI.defaults.onUnblock = function (element, options) {\r\n                $rootScope.isBlockUIVisible = false;\r\n            };\r\n\r\n            console.log(\"homec: second run finished\");\r\n\r\n            setupCrd();\r\n        }\r\n    ]);\r\n\r\n    app.factory('loginHandler', ['$timeout', function ($timeout) {\r\n        var loginHandler = {};\r\n        loginHandler.result = {};\r\n\r\n        $timeout(function () {\r\n            loginHandler.result = true;\r\n        });\r\n        return loginHandler;\r\n    }]);\r\n\r\n    app.filter('roundQty', function () {\r\n        return function (item) {\r\n            if (!item)\r\n                return item;\r\n\r\n            item = item + '';\r\n\r\n            if (item.length == 0)\r\n                return item;\r\n\r\n            var isNegative = (+item) < 0;\r\n            var val = Math.round(Math.abs(+item));\r\n            if (val < 1) val = 1;\r\n\r\n            return (isNegative ? -val : val) + '';\r\n        };\r\n    });\r\n\r\n    app.filter('isEmptyNA', ['gettextCatalog',function(gettextCatalog) {\r\n        return function (item) {\r\n            if(!item || item.length === 0) return gettextCatalog.getString('N/A');\r\n\r\n            return item;\r\n        };\r\n    }]);\r\n\r\nexport default app;\r\n\r\n//function stopEvents(event) {\r\n//    console.log('disable events');\r\n//    var allow = true;\r\n\r\n//    if (!!event && !!event.touches &&\r\n//        event.touches.length > 0) {\r\n//        allow = $(event.touches[0].target).attr('role') !== 'dialog';\r\n//    }\r\n\r\n//    if (!allow) {\r\n//        event.preventDefault();\r\n//    }\r\n\r\n//    return allow;\r\n//}\r\n\r\n// $(document).on(\"touchstart touchend\", stopEvents);\r\n//document.addEventListener(\"touchmove\", stopEvents, false);","import * as JsStore from 'jsstore';\r\n//import * as workerPath from 'file-loader?name=scripts/[name].[hash].js!jsstore/dist/jsstore.worker.min.js';\r\nimport Enumerable from 'linq';\r\n\r\nangular.module('services').service('jsStoreProvider', [\r\n    'configService', 'errorService', 'helperService', 'constants', 'gettextCatalog', 'dbUpdatesService', '$q', '$rootScope',\r\n    '$timeout', 'filterService',\r\n    function (configService, errorService, helperService, constants, gettextCatalog, dbUpdatesService, $q, $rootScope,\r\n        $timeout, filterService) {\r\n\r\n        this.isSupported = false;\r\n        this.db = null;\r\n        this.productLikeIndex = [];\r\n        this.chunkSize = 0;\r\n\r\n        this.dropAndCreate = function (schema, message) {\r\n            var THIS = this;\r\n            return THIS.connection.isDbExist('crddb').then(function(exists) {\r\n                if (exists) {\r\n                    console.info('dropping existing db');\r\n                    return THIS.connection.dropDb();\r\n                }\r\n                console.info('db does not exist, skipping drop');\r\n            }).catch(function(err) {\r\n                console.info('error checking db existence:', err);\r\n            }).then(function() {\r\n                console.info('creating db with version:', schema.version);\r\n                \r\n                var cleanSchema = {\r\n                    name: schema.name,\r\n                    tables: schema.tables,\r\n                    version: schema.version\r\n                };\r\n                \r\n                return THIS.connection.createDb(cleanSchema);\r\n            }).then(function() {\r\n                return THIS.connection.openDb('crddb');\r\n            }).then(function() {\r\n                return THIS.connection.insert({\r\n                    into: 'dbVersion',\r\n                    values: [{ version: schema.version }]\r\n                });\r\n            }).then(function() {\r\n                console.info('dbVersion table populated with version:', schema.version);\r\n                if (message) {\r\n                    console.info(message);\r\n                }\r\n            });\r\n        };\r\n\r\n        this.migrateData = function(schema, currentSchema) {\r\n            var THIS = this;\r\n            \r\n            console.info('-- Start Json DB Migration --');\r\n            \r\n            var existingTableNames = currentSchema.tables.map(function(t) { return t.name; });\r\n            \r\n            console.info('backing up data...');\r\n            var backupData = {};\r\n            var backupPromises = [];\r\n            \r\n            $.each(existingTableNames, function(index, tableName) {\r\n                backupPromises.push(\r\n                    THIS.connection.select({ from: tableName }).then(function(data) {\r\n                        backupData[tableName] = data;\r\n                        console.info('backed up ' + tableName + '');\r\n                    })\r\n                );\r\n            });\r\n            \r\n            return $q.all(backupPromises).then(function() {\r\n                return THIS.dropAndCreate(schema);\r\n            }).then(function() {\r\n                console.info('restoring data...');\r\n                var restorePromises = [];\r\n                \r\n                $.each(existingTableNames, function(index, tableName) {\r\n                    if (backupData[tableName] && backupData[tableName].length > 0) {\r\n                        restorePromises.push(\r\n                            THIS.connection.insert({\r\n                                into: tableName,\r\n                                values: backupData[tableName],\r\n                                skipDataCheck: true\r\n                            }).then(function() {\r\n                                console.info('restored ' + tableName + ': ' + backupData[tableName].length + ' records');\r\n                            })\r\n                        );\r\n                    }\r\n                });\r\n                \r\n                return $q.all(restorePromises);\r\n            }).then(function() {\r\n                return THIS.connection.openDb('crddb');\r\n            }).then(function() {\r\n                return THIS.getVersionFromTable();\r\n            }).then(function(version) {\r\n                console.info('db migrated to version: ' + version);\r\n                if (version !== schema.version) {\r\n                    console.error('migration failed: expected version ' + schema.version + ', got ' + version);\r\n                }\r\n                console.info('-- End Json Db Migration --');\r\n            });\r\n        };\r\n\r\n        this.getVersionFromTable = function() {\r\n            var THIS = this;\r\n            return THIS.connection.select({\r\n                from: 'dbVersion'\r\n            }).then(function(rows) {\r\n                if (rows && rows.length > 0) {\r\n                    return rows[0].version;\r\n                }\r\n                return null;\r\n            }).catch(function(err) {\r\n                console.info('dbVersion table not found or empty');\r\n                return null;\r\n            });\r\n        };\r\n\r\n        this.recreateDB = function (schema, callback) {\r\n            var THIS = this;\r\n            \r\n            return THIS.connection.isDbExist('crddb')\r\n                .then(function(exists) {\r\n                    if (!exists) {\r\n                        return THIS.dropAndCreate(schema, 'db created')\r\n                            .then(function() {\r\n                                return false;\r\n                            });\r\n                    }\r\n                    return THIS.connection.openDb('crddb')\r\n                        .then(function() {\r\n                            return null;\r\n                        });\r\n                })\r\n                .then(function(freshDbResult) {\r\n                    if (freshDbResult === false) {\r\n                        return false;\r\n                    }\r\n                    return THIS.getVersionFromTable();\r\n                })\r\n                .then(function(v) {\r\n                    if (v === false) {\r\n                        return false;\r\n                    }\r\n\r\n                    if (v === null) {\r\n                        console.info('no version in dbVersion table');\r\n                        return true;\r\n                    }\r\n                    \r\n                    console.info('db version: ' + v + ', schema version: ' + schema.version);\r\n                    if (v === schema.version) {\r\n                        return false; // no update needed\r\n                    }\r\n                    \r\n                    // version mismatch\r\n                    console.info('migrating schema');\r\n                    return true;\r\n                })\r\n                .then(function(shouldMigrate) {\r\n                    if (shouldMigrate === false) {\r\n                        return false; // no migration needed\r\n                    }\r\n                    console.info('getting schema');\r\n                    return THIS.connection.getDbSchema('crddb').catch(function(err) {\r\n                        console.info('error getting schema:', err);\r\n                        return null;\r\n                    });\r\n                })\r\n                .then(function(currentSchema) {\r\n                    if (currentSchema === false) {\r\n                        return; // no migration needed\r\n                    } \r\n                    \r\n                    console.info('schema:', currentSchema);\r\n                    \r\n                    // corrupted db or migration disabled\r\n                    if (!currentSchema || !currentSchema.tables || \r\n                        currentSchema.tables.length === 0 || schema.canMigrateData === false) {\r\n                        return THIS.dropAndCreate(schema, 'db recreated');\r\n                    }\r\n                    \r\n                    return THIS.migrateData(schema, currentSchema);\r\n                })\r\n                .catch(function (err) {\r\n                    console.error('db error:', err);\r\n                    console.info('recreating db');\r\n                    return THIS.dropAndCreate(schema, 'db recreated after error');\r\n                })\r\n                .then(function () {\r\n                    console.info('db ready');\r\n                    callback();\r\n                    return true;\r\n                });\r\n        };\r\n\r\n        this.init = function (callback) {\r\n            if (!configService.isSite && buildConfiguration.platform !== 'android') {\r\n                window.cancelApplication = false;\r\n                callback();\r\n                return;\r\n            }\r\n\r\n            this.isSupported = window.isSupported &&\r\n                !!(window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB);\r\n\r\n            if (!this.isSupported) {\r\n                window.cancelApplication = false;\r\n                window.isSupported = false;\r\n                callback();\r\n                return;\r\n            }\r\n\r\n            var THIS = this;\r\n\r\n            return this.checkOtherInstances()\r\n                .then(function (res) {\r\n                    window.recreateDBStart = true;\r\n                    $rootScope.$broadcast('login.hide');\r\n\r\n                    THIS.connection = window.useWorker ?\r\n                        new JsStore.Instance(new Worker(new URL('jsstore/dist/jsstore.worker.min.js', import.meta.url))) :\r\n                        new JsStore.Instance();\r\n                    var schema = dbUpdatesService.getSchema();\r\n                    console.info('open db');\r\n\r\n                    return THIS.recreateDB(schema, callback)\r\n                        .then(function () {\r\n                            window.recreateDBStart = false;\r\n                            window.waitApplication = false;\r\n                            $rootScope.$broadcast('login.hide');\r\n                        })\r\n                        .catch(function (err) {\r\n                            THIS.isSupported = false;\r\n                            window.recreateDBStart = false;\r\n                            window.waitApplication = false;\r\n                            $rootScope.$broadcast('login.hide');\r\n                            console.info('db creation failed');\r\n                            console.info(err);\r\n                            callback(err);\r\n                            errorService.showError(err);\r\n                        });\r\n                })\r\n                .catch(function (res) {\r\n                    THIS.isSupported = false;\r\n                    window.waitApplication = false;\r\n                    $rootScope.$broadcast('login.hide');\r\n                    console.info('app is cancelled');\r\n                    callback();\r\n                });\r\n        };\r\n\r\n        this.crdlockDB = null;\r\n        this.checkOtherInstances = function () {\r\n            var deferred = $q.defer();\r\n            var ver = new Date().getTime();\r\n            var THIS = this;\r\n\r\n            var req0 = window.indexedDB.deleteDatabase(\"crdlock\");\r\n            var prt = $timeout(function () {\r\n                window.waitApplication = true;\r\n                $rootScope.$broadcast('login.hide');\r\n                $('.wait-device-ready').removeClass('wait-device-ready');\r\n            }, 2000);\r\n\r\n            req0.onerror = function (event) {\r\n                console.error(\"Error loading database.\");\r\n                $timeout.cancel(prt);\r\n                window.waitApplication = false;\r\n                $rootScope.$broadcast('login.hide');\r\n                deferred.reject(false);\r\n            };\r\n\r\n            req0.onsuccess = function () {\r\n                $timeout.cancel(prt);\r\n\r\n                var req = window.indexedDB.open(\"crdlock\", 1);\r\n\r\n                // these two event handlers act on the database being opened successfully, or not\r\n                req.onerror = function (event) {\r\n                    console.error(\"Error loading database.\");\r\n                    deferred.reject(false);\r\n                };\r\n\r\n                req.onsuccess = function (event) {\r\n                    console.info(\"Database loaded.\");\r\n                    THIS.crdlockDB = event.target.result;\r\n                    deferred.resolve(true);\r\n                };\r\n            };\r\n\r\n            req0.onblocked = function (event) {\r\n                window.waitApplication = true;\r\n                $rootScope.$broadcast('login.hide');\r\n                $('.wait-device-ready').removeClass('wait-device-ready');\r\n            };\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.addCacheRow = function (el) {\r\n            if (!el.productID) {\r\n                var pr = JSON.parse(el.ExtraInfo);\r\n                this.productLikeIndex.push({\r\n                    ProductID: el.ProductID,\r\n                    ProductCode: !!el.ProductCode ? el.ProductCode.toUpperCase() : el.ProductCode,\r\n                    OutletSKU: !!el.OutletSKU ? el.OutletSKU.toUpperCase() : el.OutletSKU,\r\n                    Name: !!el.Name ? el.Name.toUpperCase() : el.Name,\r\n                    Family: !!el.ProductFamilyName ? el.ProductFamilyName.toUpperCase() : el.ProductFamilyName,\r\n                    Tags: !!el.Tags ? el.Tags.toUpperCase() : el.Tags,\r\n                    Barcode: el.Barcode,\r\n                    CF1: pr.CF1,\r\n                    CF2: pr.CF2,\r\n                    CF3: pr.CF3,\r\n                    CF4: pr.CF4,\r\n                    CF5: pr.CF5,\r\n                    CF6: pr.CF6,\r\n                    CF7: pr.CF7,\r\n                    CF8: pr.CF8,\r\n                    CF9: pr.CF9,\r\n                    CF10: pr.CF10\r\n                });\r\n            } else {\r\n                this.productLikeIndex.push({\r\n                    ProductID: el.productID,\r\n                    ProductCode: !!el.productCode ? el.productCode.toUpperCase() : el.productCode,\r\n                    OutletSKU: !!el.outletSKU ? el.outletSKU.toUpperCase() : el.outletSKU,\r\n                    Name: !!el.name ? el.name.toUpperCase() : el.name,\r\n                    Family: !!el.productFamilyName ? el.productFamilyName.toUpperCase() : el.productFamilyName,\r\n                    Tags: !!el.tags ? el.tags.toUpperCase() : el.tags,\r\n                    Barcode: el.barcode,\r\n                    CF1: el.cF1,\r\n                    CF2: el.cF2,\r\n                    CF3: el.cF3,\r\n                    CF4: el.cF4,\r\n                    CF5: el.cF5,\r\n                    CF6: el.cF6,\r\n                    CF7: el.cF7,\r\n                    CF8: el.cF8,\r\n                    CF9: el.cF9,\r\n                    CF10: el.cF10\r\n                });\r\n            }\r\n        };\r\n\r\n        this.buildIndexes = function () {\r\n            var THIS = this;\r\n            if (THIS.productLikeIndex && THIS.productLikeIndex.length > 0)\r\n                return helperService.resolvePromise(false);\r\n\r\n            let pr = this.connection.select({\r\n                from: \"products\"\r\n            }).then(function (data) {\r\n                THIS.productLikeIndex = [];\r\n                angular.forEach(data, function (el) {\r\n                    THIS.addCacheRow(el);\r\n                });\r\n\r\n                return helperService.resolvePromise(false);\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.refreshProducts = function (data) {\r\n            // clear products table and replace data from new array for current pos.\r\n            // save new pos identification\r\n            var THIS = this;\r\n          //  console.time('refreshProducts: remove products');\r\n\r\n            return this.connection.clear(\"products\")\r\n                .then(function (res) {\r\n            //    console.timeEnd('refreshProducts: remove products');\r\n                THIS.productLikeIndex = [];\r\n              //  console.time('refreshProducts: remove settings record');\r\n                return THIS.connection.remove({\r\n                    from: \"settings\",\r\n                    where: {\r\n                        Name: {\r\n                            in: ['ProductsPosName', 'ProductsHash']\r\n                        }\r\n                    }\r\n                });\r\n            }).then(function (res) {\r\n                // console.timeEnd('refreshProducts: remove settings record');\r\n                var vals = [\r\n                    {\r\n                        Name: 'ProductsPosName',\r\n                        Value: configService.lastDearPosName,\r\n                        lastModified: new Date()\r\n                    },\r\n                    {\r\n                        Name: 'ProductsHash',\r\n                        Value: data.hash,\r\n                        lastModified: new Date()\r\n                    }\r\n                ];\r\n                // console.time('refreshProducts: insert settings record');\r\n\r\n                return THIS.connection.insert({\r\n                    into: 'settings',\r\n                    values: vals\r\n                });\r\n            }).then(function () {\r\n                // console.timeEnd('refreshProducts: insert settings record');\r\n                // console.time('refreshProducts: remove product duplicates');\r\n                data.arr = helperService.uniqueBy(data.arr, \"productID\"); // remove possible product duplicates\r\n                var v = [];\r\n                THIS.productLikeIndex = [];\r\n                $.each(data.arr, function (idx, el) {\r\n\r\n                    // format tags, excluding all spaces between them\r\n                    if(el.tags) {\r\n                        var tg = el.tags.split(\",\").map(function(t) {\r\n                            return t.trim();\r\n                            });\r\n\r\n                        el.tags = tg.join(',');\r\n                    }\r\n                    \r\n                    THIS.addCacheRow(el);\r\n\r\n                    var e = {\r\n                        ProductID: el.productID,\r\n                        ProductCode: el.productCode,\r\n                        OutletSKU: el.outletSKU,\r\n                        Name: el.name,\r\n                        Barcode: el.barcode,\r\n                        Family: el.productFamilyName,\r\n                        FamilyID: el.productFamilyID,\r\n                        Category: el.category,\r\n                        CategoryID: el.categoryID,\r\n                        DiscountName: el.discountName,\r\n                        DiscountID: el.discountID,\r\n                        Price: el.price || 0,\r\n                        Option1: el.option1,\r\n                        Option2: el.option2,\r\n                        Option3: el.option3,\r\n                        Discounts: JSON.stringify(el.discountLines),\r\n                        Taxes: JSON.stringify(el.tax),\r\n                        LoyaltyEarning: el.loyaltyEarning,\r\n                        Option1Name: el.productFamilyOption1Name,\r\n                        Option2Name: el.productFamilyOption2Name,\r\n                        Option3Name: el.productFamilyOption3Name,\r\n                        ImageID: el.imageID,\r\n                        FamilyImageID: el.familyImageID,\r\n                        Tags: el.tags,\r\n                        BrandID: el.brandID,\r\n                        Brand: el.brand,\r\n                        ProductShortDescription: el.productShortDescription,\r\n                        FamilyShortDescription: el.familyShortDescription,\r\n                        StocktakeLocked: el.stocktakeLocked,\r\n                        ProductType: el.productType,\r\n                        CostingMethod: el.costingMethod,\r\n                        ExtraInfo: JSON.stringify({\r\n                            CF1: el.cF1,\r\n                            CF2: el.cF2,\r\n                            CF3: el.cF3,\r\n                            CF4: el.cF4,\r\n                            CF5: el.cF5,\r\n                            CF6: el.cF6,\r\n                            CF7: el.cF7,\r\n                            CF8: el.cF8,\r\n                            CF9: el.cF9,\r\n                            CF10: el.cF10,\r\n                            Price1: el.price1 || 0,\r\n                            Price2: el.price2 || 0,\r\n                            Price3: el.price3 || 0,\r\n                            Price4: el.price4 || 0,\r\n                            Price5: el.price5 || 0,\r\n                            Price6: el.price6 || 0,\r\n                            Price7: el.price7 || 0,\r\n                            Price8: el.price8 || 0,\r\n                            Price9: el.price9 || 0,\r\n                            Price10: el.price10 || 0\r\n                        })\r\n                    };\r\n                    v.push(e);\r\n                });\r\n                // console.timeEnd('refreshProducts: remove product duplicates');\r\n\r\n                // console.time('refreshProducts: insert products');\r\n                // console.log('products to insert: ' + v.length);\r\n\r\n                if (THIS.chunkSize > 0) {\r\n                    return THIS.splitBigBulkInsert(v, THIS.chunkSize, function (b) {\r\n                        return THIS.connection.bulkInsert({\r\n                            into: \"products\",\r\n                            values: b,\r\n                            upsert: false,\r\n                            skipDataCheck: true\r\n                        });\r\n                    });\r\n                } else {\r\n                    return THIS.connection.bulkInsert({\r\n                        into: \"products\",\r\n                        values: v,\r\n                        upsert: false,\r\n                        skipDataCheck: true\r\n                    });\r\n                }\r\n            });\r\n        };\r\n\r\n        this.splitBigBulkInsert = function (v, chunkSize, callback) {\r\n            var bulks = Array(Math.ceil(v.length / chunkSize)).fill(undefined).map(function (_, i) {\r\n                return v.slice(i * chunkSize, i * chunkSize + chunkSize);\r\n            });\r\n\r\n            var prms = [];\r\n\r\n            $.each(bulks, function (_, b) {\r\n                prms.push(callback(b));\r\n            });\r\n\r\n            return $q.all(prms);\r\n        };\r\n\r\n        this.getProductByID = function (productID) {\r\n            return this.connection.select({\r\n                from: 'products',\r\n                where: {\r\n                    ProductID: productID\r\n                }\r\n            }).then(function (res) {\r\n                var deferred2 = $q.defer();\r\n\r\n                var dataObj = {};\r\n                if (res && res.length > 0) {\r\n                    dataObj.data = res;\r\n                } else {\r\n                    deferred2.data = [];\r\n                }\r\n\r\n                deferred2.resolve(dataObj);\r\n                return deferred2.promise;\r\n            });\r\n        };\r\n\r\n        // ProductCode, Name, Barcode, Family\r\n        this.search = function (barcode, text, qkeytemplate, qkey, productID) {\r\n            console.time('start search');\r\n            console.time('delete old search');\r\n            var THIS = this;\r\n            var deferred = $q.defer();\r\n//            return THIS.connection.clear('productsSearchTemp')\r\n            return THIS.tempClear()\r\n                .then(function () {\r\n                console.timeEnd('delete old search');\r\n                console.time('search');\r\n                var command = null;\r\n                var c;\r\n                var pr;\r\n\r\n                if (!!configService.quickKeyTemplateID && qkeytemplate === configService.quickKeyTemplateID) {\r\n                    var qdata = helperService.extractCurrentQuickKeyInfo(qkey);\r\n                    if (!qdata) {\r\n                        deferred.reject('Invalid QuickKey data');\r\n                        return deferred.promise;\r\n                    }\r\n                    else {\r\n                        command = {\r\n                            from: 'products'\r\n                        };\r\n\r\n                        var groupingOperatorAND = qdata.groupingOperator === 'AND';\r\n\r\n                        var isConditionSet = false;\r\n\r\n                        if (!!qdata.brands && qdata.brands.length > 0) {\r\n                            var brands = [];\r\n                            angular.forEach(qdata.brands, function (el) {\r\n                                brands.push(helperService.escapeString(el));\r\n                            });\r\n\r\n                            if (!isConditionSet) {\r\n                                command.where = {\r\n                                    Brand: { in: brands }\r\n                                };\r\n                            }\r\n                            else {\r\n                                if (!groupingOperatorAND) {\r\n                                    if (!command.where.or)\r\n                                        command.where.or = {};\r\n                                    command.where.or.Brand = { in: brands };\r\n                                } else {\r\n                                    command.where.Brand = { in: brands };\r\n                                }\r\n                            }\r\n                            isConditionSet = true;\r\n                        }\r\n                        if (!!qdata.categories && qdata.categories.length > 0) {\r\n                            var categories = [];\r\n                            angular.forEach(qdata.categories, function (el) {\r\n                                categories.push(helperService.escapeString(el));\r\n                            });\r\n\r\n                            if (!isConditionSet) {\r\n                                command.where = {\r\n                                    Category: { in: categories }\r\n                                };\r\n                            }\r\n                            else {\r\n                                if (!groupingOperatorAND) {\r\n                                    if (!command.where.or)\r\n                                        command.where.or = {};\r\n                                    command.where.or.Category = { in: categories };\r\n                                } else {\r\n                                    command.where.Category = { in: categories };\r\n                                }\r\n                            }\r\n\r\n                            isConditionSet = true;\r\n                        }\r\n                        if (!!qdata.tags && qdata.tags.length > 0) {\r\n                            c = \"\";\r\n\r\n                            var rids = [];\r\n                            var textu = [];\r\n                            $.each(qdata.tags, function (j, t) {\r\n                                if (!!t)\r\n                                    textu.push(t.trim().toUpperCase());\r\n                            });\r\n\r\n                            $.each(THIS.productLikeIndex, function (i, e) {\r\n                                var found = false;\r\n\r\n                                if (!!e.Tags) {\r\n                                    var s = e.Tags.toUpperCase();\r\n                                    var tags = s.split(',');\r\n                                    $.each(textu, function (j, t) {\r\n                                        var flt = tags.filter(function(tt) {return tt == t; });\r\n                                        if (flt.length > 0) {\r\n                                            found = true;\r\n                                            return false;\r\n                                        }\r\n                                    });\r\n\r\n                                    if (found)\r\n                                        rids.push(e.ProductID);\r\n                                }\r\n                            });\r\n\r\n                            if (!isConditionSet) {\r\n                                command.where = {\r\n                                    ProductID: { in: rids }\r\n                                };\r\n                            }\r\n                            else {\r\n                                if (!groupingOperatorAND) {\r\n                                    if (!command.where.or)\r\n                                        command.where.or = {};\r\n                                    command.where.or.ProductID = { in: rids };\r\n                                } else {\r\n                                    command.where.ProductID = { in: rids };\r\n                                }\r\n                            }\r\n\r\n                            isConditionSet = true;\r\n                        }\r\n\r\n                        pr = THIS.connection.select(command);\r\n                    }\r\n                } else {\r\n                    if (!!productID) {\r\n\r\n                        pr = THIS.connection.select({\r\n                            from: 'products',\r\n                            where: {\r\n                                ProductID: productID\r\n                            }\r\n                        })\r\n                            .then(function (res) {\r\n                                var lst = res.filter(function (p) { return !p.FamilyID || p.FamilyID != productID; });\r\n\r\n                                var deferred2 = $q.defer();\r\n                                deferred2.resolve(lst);\r\n                                return deferred2.promise;\r\n                            });\r\n                    } else {\r\n                        text = text.replace(/%/g, \"\");\r\n\r\n                        var rids = [];\r\n                        var textu = text.toUpperCase();\r\n                        // check barcode for object\r\n                        var useWeightBasedSearch = false;\r\n                        var useOutletSKU = false;\r\n                        var outletSKU = null;\r\n                        if (barcode && typeof (barcode) !== 'string') {\r\n                            useOutletSKU = barcode.UseOutletSKU;\r\n                            useWeightBasedSearch = true;\r\n                            outletSKU = barcode.SKU;\r\n                        }\r\n\r\n                         // extended search like in Cin7 Core\r\n                        var searchArr = filterService.splitSearchText(textu);\r\n\r\n                        $.each(THIS.productLikeIndex, function (i, e) {\r\n                            if (!useWeightBasedSearch) {\r\n                                if ((!!e.ProductCode && filterService.isStringContainsSearchArray(e.ProductCode.toUpperCase(), searchArr)) ||\r\n                                    (!!e.Name && filterService.isStringContainsSearchArray(e.Name.toUpperCase(), searchArr)) ||\r\n                                    (!!e.Family && filterService.isStringContainsSearchArray(e.Family.toUpperCase(), searchArr)) ||\r\n                                    e.Barcode === barcode ||\r\n                                    e.CF1 === barcode || \r\n                                    e.CF2 === barcode || \r\n                                    e.CF3 === barcode || \r\n                                    e.CF4 === barcode || \r\n                                    e.CF5 === barcode || \r\n                                    e.CF6 === barcode || \r\n                                    e.CF7 === barcode || \r\n                                    e.CF8 === barcode || \r\n                                    e.CF9 === barcode || \r\n                                    e.CF10 === barcode\r\n                                    )\r\n                                    rids.push(e.ProductID);\r\n                            } else {\r\n                                if ((useOutletSKU && e.OutletSKU === outletSKU) ||\r\n                                    (!useOutletSKU && e.ProductCode === outletSKU))\r\n                                    rids.push(e.ProductID);\r\n                            }\r\n                        });\r\n\r\n                        pr = THIS.connection.select({\r\n                            from: \"products\",\r\n                            where: {\r\n                                ProductID: {\r\n                                    in: rids\r\n                                }\r\n                            },\r\n                            limit: 100\r\n                        });\r\n                    }\r\n                }\r\n\r\n                pr = pr.then(function (res) {\r\n\r\n                    console.timeEnd('search');\r\n                    console.time('insert search result');\r\n                    var cnt = res.length;\r\n                    return THIS.tempBulkInsert(res)\r\n                    //return THIS.connection.bulkInsert({\r\n                    //    into: \"productsSearchTemp\",\r\n                    //    values: res,\r\n                    //    upsert: false,\r\n                    //    skipDataCheck: true\r\n                    //})\r\n                        .then(function () {\r\n                        deferred.resolve(cnt);\r\n                        console.timeEnd('insert search result');\r\n                        console.timeEnd('start search');\r\n                        return deferred.promise;\r\n                    });\r\n                });\r\n\r\n                return pr;\r\n            }).catch(function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n        };\r\n\r\n        // trying to group by family before\r\n        this.getSearchCount = function () {\r\n            //return this.connection.select({\r\n            //    from: 'productsSearchTemp'\r\n            //})\r\n            return this.tempSelectAll()\r\n                .then(function (res) {\r\n                var jq = Enumerable.from(res);\r\n\r\n                var rs = jq.where(function (x) { return !!x.Family; })\r\n                    .groupBy(\r\n                        function (x) { return x.Family; },\r\n                        function (x) { return x.Family; },\r\n                        function (key, grouping) {\r\n                            return grouping.count(); //TODO: check\r\n                        }\r\n                    )\r\n                    .select(function (x) { return x; })\r\n                    .toArray(); // each row - it's family\r\n                var rs2 = jq.where(function (x) { return !x.Family; }).select(function (x) { return 1; }).toArray(); // one row without family\r\n\r\n                var cnt = rs.length + rs2.length;\r\n\r\n                var deferred = $q.defer();\r\n                deferred.resolve(cnt);\r\n                return deferred.promise;\r\n            });\r\n        };\r\n\r\n        this.getSearchPage = function (page, pageSize, productID) {\r\n            var pr;\r\n            if (!!productID) {\r\n                //pr = this.connection.select({\r\n                //    from: 'productsSearchTemp',\r\n                //    where: {\r\n                //        ProductID: productID\r\n                //    }\r\n                //})\r\n                pr = this.tempSelectByKey(productID)\r\n                    .then(function (res) {\r\n                        var deferred = $q.defer();\r\n                        if (res.length > 0) {\r\n                            res[0].cnt = 1;\r\n                            res[0].isFamily = 0;\r\n                        }\r\n\r\n                        deferred.resolve(res);\r\n                        return deferred.promise;\r\n                    });\r\n            } else {\r\n                //pr = this.connection.select({\r\n                //    from: 'productsSearchTemp'\r\n                //})\r\n                pr = this.tempSelectAll()\r\n                    .then(function (res) {\r\n                    var jq = Enumerable.from(res);\r\n\r\n                    var rs = jq.where(function (x) { return !!x.Family; })\r\n                        .groupBy(\r\n                            function (x) { return x.Family; },\r\n                            function (x) { return x; },\r\n                            function (key, grouping) {\r\n                                const length = grouping.count();\r\n                                return $.extend({ cnt: length, isFamily: 1 },\r\n                                    length > 0 ? grouping.first() : {});\r\n                            }\r\n                        )\r\n                        .toArray();\r\n\r\n                    var rs2 = jq.where(function (x) { return !x.Family; }).select(function (x) {\r\n                        return $.extend(x, { cnt: 1, isFamily: 0 });\r\n                    }).toArray();\r\n\r\n                    var data = rs.concat(rs2);\r\n\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(data);\r\n                    return deferred.promise;\r\n                });\r\n            }\r\n\r\n            return pr.then(function (data) {\r\n                  // if we have real family, do some replacements\r\n                angular.forEach(data, function (el) {\r\n                    if (el.isFamily == 1) {\r\n                        if (el.cnt != 1) {\r\n                            el.Name = el.Family;\r\n                            el.ProductShortDescription = el.FamilyShortDescription;\r\n                            el.ProductID = el.FamilyID;\r\n                        } else {\r\n                            el.isFamily = 0; // else reset family flag\r\n                        }\r\n                    }\r\n                });\r\n\r\n                var dataObj = {};\r\n                dataObj.page = page;\r\n                dataObj.data = Enumerable.from(data).orderBy(function (x) { return x.Name; }).toArray();\r\n                dataObj.data = dataObj.data.slice(page * pageSize, pageSize * (page + 1));\r\n\r\n                var deferred = $q.defer();\r\n                deferred.resolve(dataObj);\r\n                return deferred.promise;\r\n            });\r\n        };\r\n\r\n        this.getLiveSearchProducs = function (data) {\r\n            var deferred = $q.defer();\r\n            if (data && data.length > 0) {\r\n                deferred.resolve(data);\r\n                return deferred.promise;\r\n            }\r\n\r\n            // ProductID as productID, ProductCode as productCode, Name as name, Price as price from products\r\n            return this.connection.select({\r\n                from: 'products'\r\n            }).then(function (res) {\r\n                var lst = Enumerable.from(res)\r\n                    .where(function (p) { return !p.FamilyID || p.FamilyID != p.ProductID; })\r\n                    .select(function (p) {\r\n                        return {\r\n                            productID: p.ProductID,\r\n                            productCode: p.ProductCode,\r\n                            name: p.Name,\r\n                            price: p.Price\r\n                        };\r\n                    }).toArray();\r\n\r\n                var deferred2 = $q.defer();\r\n                deferred2.resolve(lst);\r\n                return deferred2.promise;\r\n            });\r\n        };\r\n\r\n        this.checkProductsOld = function (force) {\r\n            if (force === true) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            }\r\n            var THIS = this;\r\n\r\n            return this.connection.select({\r\n                from: 'settings',\r\n                where: {\r\n                    Name: 'ProductsPosName'\r\n                }\r\n            }).then(function (res) {\r\n                if (res.length === 0 ||\r\n                    res[0].Value !== configService.lastDearPosName) {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                } else {\r\n                    return THIS.connection.select({\r\n                        from: 'settings',\r\n                        where: {\r\n                            Name: 'ProductsHash'\r\n                        }\r\n                    })\r\n                        .then(function (res) {\r\n                            var deferred = $q.defer();\r\n                            if (res.length === 0)\r\n                                deferred.resolve(false);\r\n                            else {\r\n                                var row = res[0];\r\n\r\n                                var hours = ((new Date().getTime()) - (row.lastModified.getTime())) / 1000.0 / 60.0 / 60.0;\r\n                                if (hours > 3) // after 3 hours refresh products\r\n                                    deferred.resolve(true);\r\n                                else\r\n                                    deferred.resolve(false);\r\n                            }\r\n\r\n                            return deferred.promise;\r\n                        });\r\n                }\r\n            });\r\n        };\r\n\r\n        this.getProductsHash = function (force) {\r\n\r\n            if (force === true) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(null);\r\n                return deferred.promise;\r\n            }\r\n            else {\r\n                return this.connection.select({\r\n                    from: 'settings',\r\n                    where: {\r\n                        Name: 'ProductsHash'\r\n                    }\r\n                }).then(function (res) {\r\n                    var deferred = $q.defer();\r\n\r\n                    if (res.length > 0)\r\n                        deferred.resolve(res[0].Value);\r\n                    else\r\n                        deferred.resolve(null);\r\n\r\n                    return deferred.promise;\r\n                });\r\n            }\r\n        };\r\n\r\n        this.getHideUsersAssignedToAllLocations = function () {\r\n            var THIS = this;\r\n            return THIS.connection.select({\r\n                from: 'settings',\r\n                where: {\r\n                    Name: 'hideUsersAssignedToAllLocations'\r\n                }}).then(function (res) {\r\n                    var deferred = $q.defer();\r\n\r\n                    deferred.resolve(res[0]);\r\n\r\n                    return deferred.promise;\r\n                });\r\n        }\r\n\r\n        this.setHideUsersAssignedToAllLocations = function (value) {\r\n            var THIS = this;\r\n            return THIS.connection\r\n            .remove({\r\n                from: \"settings\",\r\n                where: {\r\n                    Name: 'hideUsersAssignedToAllLocations'\r\n                }\r\n            })\r\n            .then(res => {\r\n                return THIS.connection.insert({\r\n                    into: 'settings',\r\n                    values: [{\r\n                        Name: 'hideUsersAssignedToAllLocations',\r\n                        Value: value.toString(),\r\n                        lastModified: new Date()\r\n                    }]\r\n                });\r\n            })            \r\n        }\r\n\r\n        this.familySearch = function (familyID) {\r\n            //return this.connection.select({\r\n            //    from: 'productsSearchTemp',\r\n            //    where: {\r\n            //        FamilyID: familyID\r\n            //    }\r\n            //});\r\n\r\n            return this.tempSelectByFamilyID(familyID);\r\n        };\r\n\r\n        this.getFamilySearchCount = function (familyID) {\r\n            //return this.connection.select({\r\n            //    from: 'productsSearchTemp',\r\n            //    where: {\r\n            //        FamilyID: familyID\r\n            //    }\r\n            //})\r\n            //    .then(function (res) {\r\n            //    var deferred = $q.defer();\r\n            //    deferred.resolve(res.length);\r\n            //    return deferred.promise;\r\n            //});\r\n\r\n            return this.tempSelectByFamilyIDCount(familyID);\r\n        };\r\n\r\n        this.getFamilySearchPage = function (page, pageSize) {\r\n//            return this.connection.select({ from: 'productsSearchTemp' })\r\n            return this.tempSelectAll()\r\n                .then(function (data) {\r\n                    var deferred = $q.defer();\r\n                    $.each(data, function (i, el) {\r\n                        el.cnt = 1;\r\n                        el.isFamily = 0;\r\n                    });\r\n\r\n                    var dataObj = {};\r\n                    dataObj.page = page;\r\n                    dataObj.data = orderBy(data, 'Name', false);\r\n                    dataObj.data = dataObj.data.slice(page * pageSize, pageSize * (page + 1));\r\n                    deferred.resolve(dataObj);\r\n                });\r\n        };\r\n\r\n        this.customerLikeIndex = [];\r\n        this.refreshCustomers = function (data, isPartial = false) {\r\n            var THIS = this;\r\n            var preparePromise;\r\n            if (!isPartial) {\r\n                preparePromise = this.connection.clear('customers').then(function (res) {\r\n                    THIS.customerLikeIndex = [];\r\n                    return THIS.connection.remove({\r\n                        from: 'settings',\r\n                        where: {\r\n                            Name: {\r\n                                in: ['CustomersPosName', 'CustomerHash']\r\n                            }\r\n                        }\r\n                    });\r\n                }).then(function (res) {\r\n                    var vls = [\r\n                        {\r\n                            Name: 'CustomersPosName',\r\n                            Value: configService.lastDearPosName,\r\n                            lastModified: new Date()\r\n                        },\r\n                        {\r\n                            Name: 'CustomerHash',\r\n                            Value: data.hash,\r\n                            lastModified: new Date()\r\n                        }\r\n                    ];\r\n\r\n                    return THIS.connection.insert({\r\n                        into: 'settings',\r\n                        values: vls\r\n                    });\r\n                });\r\n            } else {\r\n                var ids = data.arr.map(function(x) { return x.id })\r\n                preparePromise = this.connection.remove({\r\n                    from: 'customers',\r\n                    where: {\r\n                        ID: {\r\n                            in: ids\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n            \r\n            return preparePromise\r\n                .then(function () {\r\n                    var v = [];\r\n                    THIS.customerLikeIndex = [];\r\n                    data.arr = helperService.uniqueBy(data.arr, \"id\"); // remove possible duplicates\r\n\r\n                    $.each(data.arr, function (idx, el) {\r\n                        THIS.customerLikeIndex.push({\r\n                            ID: el.id,\r\n                            Name: !el.name ? el.name : el.name.toUpperCase(),\r\n                            Phone: !el.phone ? el.phone : el.phone.toUpperCase(),\r\n                            Email: !el.email ? el.email : el.email.toUpperCase(),\r\n                            MobilePhone: !el.mobilePhone ? el.mobilePhone : el.mobilePhone.toUpperCase()\r\n                        });\r\n\r\n                        var e = {\r\n                            ID: el.id,\r\n                            Name: el.name,\r\n                            Phone: el.phone,\r\n                            MobilePhone: el.mobilePhone,\r\n                            Email: el.email,\r\n                            EnableLoyaltyPoints: el.enableLoyaltyPoints,\r\n                            Discounts: JSON.stringify(el.discounts),\r\n                            MatrixDiscounts: JSON.stringify(el.matrixDiscounts),\r\n                            Discount: el.discount,\r\n                            Addresses: JSON.stringify(el.addresses),\r\n                            Taxes: JSON.stringify({\r\n                                effectivePercentInclusive: el.effectivePercentInclusive,\r\n                                effectivePercentExclusive: el.effectivePercentExclusive,\r\n                                ruleID: el.taxRuleID\r\n                            }),\r\n                            PriceTier: el.priceTier,\r\n                            Account: !el.account ? 0 : el.account,\r\n                            CreditLimit: !el.creditLimit ? 0 : el.creditLimit\r\n                        };\r\n\r\n                        if(el.phone || el.email ||el.mobilePhone )\r\n                            el.Contacts = [{\r\n                                Phone:el.Phone,\r\n                                Email: el.Email,\r\n                                MobilePhone: el.MobilePhone\r\n                            }];\r\n\r\n                        v.push(e);\r\n                    });\r\n\r\n                    if (THIS.chunkSize > 0) {\r\n                        return THIS.splitBigBulkInsert(v, THIS.chunkSize, function (b) {\r\n                            return THIS.connection.bulkInsert({\r\n                                into: \"customers\",\r\n                                values: b,\r\n                                upsert: false,\r\n                                skipDataCheck: true\r\n                            });\r\n                        });\r\n                    } else {\r\n                        return THIS.connection.bulkInsert({\r\n                            into: \"customers\",\r\n                            values: v,\r\n                            upsert: false,\r\n                            skipDataCheck: true\r\n                        });\r\n                    }\r\n                });\r\n        };\r\n\r\n        this.checkCustomersOld = function (force) {\r\n            if (force === true) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            }\r\n            var THIS = this;\r\n\r\n            return this.connection.select({\r\n                from: 'settings',\r\n                where: {\r\n                    Name: 'CustomersPosName'\r\n                }\r\n            }).then(function (res) {\r\n                if (res.length === 0 ||\r\n                    res[0].Value !== configService.lastDearPosName) {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                }\r\n                else {\r\n                    return THIS.connection.select({\r\n                        from: 'settings',\r\n                        where: {\r\n                            Name: 'CustomerHash'\r\n                        }\r\n                    })\r\n                        .then(function (res) {\r\n                            var deferred = $q.defer();\r\n                            if (res.length === 0)\r\n                                deferred.resolve(false);\r\n                            else {\r\n                                var row = res[0];\r\n\r\n                                var hours = ((new Date().getTime()) - (row.lastModified.getTime())) / 1000.0 / 60.0 / 60.0;\r\n                                if (hours > 3) // after 3 hours refresh products\r\n                                    deferred.resolve(true);\r\n                                else\r\n                                    deferred.resolve(false);\r\n                            }\r\n\r\n                            return deferred.promise;\r\n                        });\r\n                }\r\n            });\r\n        };\r\n\r\n        this.getCustomersHash = function (force) {\r\n\r\n            if (force === true) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(null);\r\n                return deferred.promise;\r\n            }\r\n            else {\r\n                return this.connection.select({\r\n                    from: 'settings',\r\n                    where: {\r\n                        Name: 'CustomerHash'\r\n                    }\r\n                }).then(function (res) {\r\n                    var deferred = $q.defer();\r\n\r\n                    if (res.length > 0)\r\n                        deferred.resolve(res[0].Value);\r\n                    else\r\n                        deferred.resolve(null);\r\n\r\n                    return deferred.promise;\r\n                });\r\n            }\r\n        };\r\n\r\n        this.loadLiveCustomers = function (data, id) {\r\n            var deferred = $q.defer();\r\n            if (data && data.length > 0) {\r\n                deferred.resolve(data);\r\n                return deferred.promise;\r\n            }\r\n\r\n            return this.connection.select({ from: 'customers',\r\n                where: !!id ? {ID:  id} : undefined \r\n            }).then(function (res) {\r\n                    var deferred = $q.defer();\r\n                    var arr = [];\r\n                    $.each(res, function (i, el) {\r\n                        var taxes = !!el.Taxes ? JSON.parse(el.Taxes) : {};\r\n\r\n                        var a = {\r\n                            id: el.ID,\r\n                            name: el.Name,\r\n                            phone: el.Phone,\r\n                            email: el.Email,\r\n                            mobilePhone: el.MobilePhone,\r\n                            addresses: JSON.parse(el.Addresses),\r\n                            ruleID: taxes.RuleID,\r\n                            effectivePercentInclusive: taxes.EffectivePercentInclusive,\r\n                            effectivePercentExclusive: taxes.EffectivePercentExclusive\r\n                        };\r\n                        arr.push(a);\r\n                    });\r\n\r\n                    deferred.resolve(arr);\r\n\r\n                    return deferred.promise;\r\n                });\r\n        };\r\n\r\n        this.loadCustomers = function (text, page, limit, filters) {\r\n            page = !page ? 0 : page;\r\n            limit = !limit ? 10 : limit;\r\n            var pr;\r\n            var customerID = (!!filters && !!filters.CustomerID) ? filters.CustomerID : null;\r\n\r\n            if (!customerID) {\r\n                if (!text) {\r\n                    pr = this.connection.select({ from: 'customers' });\r\n                } else {\r\n                    var s = text.toUpperCase();\r\n                    var rids = [];\r\n                    $.each(this.customerLikeIndex, function (i, v) {\r\n                        if ((v.Name && v.Name.indexOf(s) >= 0) ||\r\n                            (v.Phone && v.Phone.indexOf(s) >= 0) ||\r\n                            (v.Email && v.Email.indexOf(s) >= 0) ||\r\n                            (v.MobilePhone && v.MobilePhone.indexOf(s) >= 0)) {\r\n                            rids.push(v.ID);\r\n                        }\r\n                    });\r\n\r\n                    pr = this.connection.select({\r\n                        from: \"customers\",\r\n                        where: {\r\n                            ID: {\r\n                                in: rids\r\n                            }\r\n                        }\r\n                    });\r\n                }\r\n            }\r\n            else {\r\n                pr = this.connection.select({\r\n                    from: 'customers',\r\n                    where: {\r\n                        ID: customerID\r\n                    }\r\n                });\r\n            }\r\n\r\n            return pr.then(function (data) {\r\n                var deferred = $q.defer();\r\n                $.each(data, function (idx, el) {\r\n\r\n                    el.EnableLoyaltyPoints = el.EnableLoyaltyPoints === true || el.EnableLoyaltyPoints === \"true\";\r\n                    el.LoadedFromLocalDb = true;\r\n                    el.Discounts = el.Discounts ? JSON.parse(el.Discounts) : el.Discounts;\r\n                    el.MatrixDiscounts = el.MatrixDiscounts ? JSON.parse(el.MatrixDiscounts) : el.MatrixDiscounts;\r\n                    \r\n                    // to not process in offline mode\r\n                    el.Account = 0;\r\n                    el.CreditLimit = 0;\r\n\r\n                    if(el.Phone || el.Email ||el.MobilePhone )\r\n                        el.Contacts = [{\r\n                            Phone:el.Phone,\r\n                            Email: el.Email,\r\n                            MobilePhone: el.MobilePhone\r\n                        }];\r\n\r\n                    el.Addresses = el.Addresses && el.Addresses !== \"undefined\"? JSON.parse(el.Addresses): el.Addresses;\r\n\r\n                });\r\n                const offset = page === 0 || page === null || page === 1 ? 0 : (page - 1) * limit;\r\n                deferred.resolve({ data: { Customers: data.slice(offset, offset + limit), Total: data.length } });\r\n                return deferred.promise;\r\n            }).catch(function (err) {\r\n                errorService.showError(err.message);\r\n            });\r\n        };\r\n\r\n        this.searchSaleRepresentatives = function (page, limit, outletID, filters) {\r\n            page = !page ? 0 : page - 1;\r\n            limit = !limit ? 10 : limit;\r\n\r\n            var ID = (!!filters && !!filters.ID) ? filters.ID : null;\r\n            var Name = (!!filters && !!filters.Name) ? filters.Name.toUpperCase() : null;\r\n\r\n            return this.connection.select({ from: 'saleRepresentatives' })\r\n                .then(function (res) {\r\n                    var arr = [];\r\n\r\n                    $.each(res, function (i, x) {\r\n                        var cnd = !x.PosOutletID || x.PosOutletID == outletID;\r\n                        if (cnd && !!ID)\r\n                            cnd = x.ID == ID;\r\n                        if (cnd && !!Name)\r\n                            cnd = x.Name.toUpperCase().indexOf(Name) >= 0;\r\n                        if (cnd) {\r\n                            x.LoadedFromLocalDb = true;\r\n                            arr.push(x);\r\n                        }\r\n                    });\r\n\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve({ data: { SaleRepresentatives: arr.slice(page * limit, limit * (page + 1)) } });\r\n                    return deferred.promise;\r\n                });\r\n        };\r\n\r\n        this.refreshSaleRepresentatives = function (data) {\r\n\r\n            var THIS = this;\r\n            return this.connection.clear('saleRepresentatives')\r\n                .then(function (res) {\r\n                    THIS.customerLikeIndex = [];\r\n                    return THIS.connection.remove({\r\n                        from: 'settings',\r\n                        where: {\r\n                            Name: {\r\n                                in: ['SaleRepresentativesPosName', 'SalesRepresentativeHash']\r\n                            }\r\n                        }\r\n                    });\r\n                }).then(function (res) {\r\n                    var lpr = [\r\n                        {\r\n                            Name: 'SaleRepresentativesPosName',\r\n                            Value: configService.lastDearPosName,\r\n                            lastModified: new Date()\r\n                        },\r\n                        {\r\n                            Name: 'SalesRepresentativeHash',\r\n                            Value: data.hash,\r\n                            lastModified: new Date()\r\n                        }\r\n                    ];\r\n\r\n                    return THIS.connection.insert({\r\n                        into: 'settings',\r\n                        values: lpr\r\n                    });\r\n                }).then(function () {\r\n                    var v = [];\r\n\r\n                    $.each(data.arr, function (idx, el) {\r\n                        THIS.customerLikeIndex.push({\r\n                            ID: el.id,\r\n                            Name: !el.name ? el.name : el.name.toUpperCase(),\r\n                            Phone: !el.phone ? el.phone : el.phone.toUpperCase(),\r\n                            Email: !el.email ? el.email : el.email.toUpperCase(),\r\n                            MobilePhone: !el.mobilePhone ? el.mobilePhone : el.mobilePhone.toUpperCase()\r\n                        });\r\n                        var e = {\r\n                            ID: el.id,\r\n                            Name: el.name,\r\n                            PosOutletID: el.posOutletID\r\n                        };\r\n                        v.push(e);\r\n                    });\r\n\r\n                    return THIS.connection.bulkInsert({\r\n                        into: \"saleRepresentatives\",\r\n                        values: v,\r\n                        upsert: false,\r\n                        skipDataCheck: true\r\n                    });\r\n                });\r\n        };\r\n\r\n        this.checkSaleRepresentativesOld = function (force) {\r\n            if (force === true) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            }\r\n            var THIS = this;\r\n\r\n            return this.connection.select({\r\n                from: 'settings',\r\n                where: {\r\n                    Name: 'SaleRepresentativesPosName'\r\n                }\r\n            }).then(function (res) {\r\n                if (res.length === 0 ||\r\n                    res[0].Value !== configService.lastDearPosName) {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                }\r\n                else {\r\n                    return THIS.connection.select({\r\n                        from: 'settings',\r\n                        where: {\r\n                            Name: 'SalesRepresentativeHash'\r\n                        }\r\n                    }).then(function (res) {\r\n                        var deferred = $q.defer();\r\n                        if (res.length === 0)\r\n                            deferred.resolve(false);\r\n                        else {\r\n                            var row = res[0];\r\n\r\n                            var hours = ((new Date().getTime()) - (row.lastModified.getTime())) / 1000.0 / 60.0 / 60.0;\r\n                            if (hours > 3) // after 3 hours refresh products\r\n                                deferred.resolve(true);\r\n                            else\r\n                                deferred.resolve(false);\r\n                        }\r\n\r\n                        return deferred.promise;\r\n                    });\r\n                }\r\n            });\r\n        };\r\n\r\n        this.getSaleRepresentativesHash = function (force) {\r\n            if (force === true) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(null);\r\n                return deferred.promise;\r\n            }\r\n            else {\r\n                return this.connection.select({\r\n                    from: 'settings',\r\n                    where: {\r\n                        Name: 'SalesRepresentativeHash'\r\n                    }\r\n                }).then(function (res) {\r\n                    var deferred = $q.defer();\r\n\r\n                    if (res.length > 0)\r\n                        deferred.resolve(res[0].Value);\r\n                    else\r\n                        deferred.resolve(null);\r\n\r\n                    return deferred.promise;\r\n                });\r\n            }\r\n        };\r\n\r\n        this.loadParkedSales = function (page, limit, outletID, filters) {\r\n            var queue = helperService.getSaleQueue();\r\n            if (!queue)\r\n                queue = [];\r\n\r\n            var jq = Enumerable.from(queue);\r\n\r\n            var rs = jq.where(function (x) {\r\n                return x.sale.Status === 'PARKED' && (!filters.SaleID || filter.SaleID === x.sale.ID);\r\n            }).skip(page * limit)\r\n                .take(limit)\r\n                .toArray();\r\n\r\n            var deferred = $q.defer();\r\n            deferred.resolve(rs);\r\n            return deferred.promise;\r\n        };\r\n\r\n        // productsSearchTemp emulation methods. This table is really in-memory, so we can simply use jscript arrays\r\n        this.productsSearchTemp = [];\r\n        this.tempPrimaryKey = {};\r\n\r\n        this.tempClear = function () {\r\n            var deferred = $q.defer();\r\n            this.productsSearchTemp = [];\r\n            this.tempPrimaryKey = {};\r\n            deferred.resolve(true);\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.tempBulkInsert = function (arr) {\r\n            var deferred = $q.defer();\r\n            var THIS = this;\r\n            angular.forEach(arr, function (el) {\r\n                THIS.tempPrimaryKey[el.ProductID] = el;\r\n                THIS.productsSearchTemp.push(el);\r\n            });\r\n            deferred.resolve(true);\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.tempSelectAll = function () {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(this.productsSearchTemp);\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.tempSelectByKey = function (key) {\r\n            var deferred = $q.defer();\r\n            var res = this.tempPrimaryKey[key];\r\n            var arr = [];\r\n            if (res) arr.push(res);\r\n            deferred.resolve(arr);\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.tempSelectByFamilyID = function (familyID) {\r\n            var deferred = $q.defer();\r\n            var res = Enumerable.from(this.productsSearchTemp)\r\n                .where(function (el) { return el.FamilyID == familyID; })\r\n                .select()\r\n                .toArray();\r\n            deferred.resolve(res);\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.tempSelectByFamilyIDCount = function (familyID) {\r\n            var deferred = $q.defer();\r\n            var res = Enumerable.from(this.productsSearchTemp)\r\n                .where(function (el) { return el.FamilyID == familyID; })\r\n                .count();\r\n            deferred.resolve(res);\r\n            return deferred.promise;\r\n        };\r\n        \r\n        this.addOfflineSale = function (sale, info, errorText) {\r\n            return this.connection.insert({\r\n                into: 'offSales',\r\n                values: [\r\n                    {\r\n                        PosName: configService.lastDearPosName,\r\n                        SaleID: sale.ID,\r\n                        StatusID: info.statusID || info.StatusID || '',\r\n                        Packed: JSON.stringify(sale),\r\n                        InfoPacked: JSON.stringify(info),\r\n                        lastModified: new Date(),\r\n                        OperationID: sale.OperationID,\r\n                        ErrorText: errorText\r\n                    }\r\n                ]\r\n            });\r\n        };\r\n\r\n        /**\r\n         * save order status change\r\n         */\r\n        this.trackOrder = function (orderID, registryCloseID, status) {\r\n            return this.connection.insert({\r\n                into: 'registryOrders',\r\n                values: [\r\n                    {\r\n                        OrderID: orderID,\r\n                        RegistryCloseID: registryCloseID,\r\n                        Status: status,\r\n                        CreatedDate: new Date()\r\n                    }\r\n                ]\r\n            });\r\n        };\r\n\r\n        this.trackOrderPayments = function (orderID, refundIDs, paymentIDs) {\r\n            var refundsJson = refundIDs && refundIDs.length > 0 ? JSON.stringify(refundIDs) : null;\r\n            var paymentsJson = paymentIDs && paymentIDs.length > 0 ? JSON.stringify(paymentIDs) : null;\r\n            \r\n            return this.connection.insert({\r\n                into: 'orderPayments',\r\n                values: [\r\n                    {\r\n                        OrderID: orderID,\r\n                        Refunds: refundsJson,\r\n                        Payments: paymentsJson,\r\n                        CreatedDate: new Date()\r\n                    }\r\n                ]\r\n            });\r\n        };\r\n\r\n        /**\r\n         * get orders state\r\n         * @returns {Promise<Array<{OrderID: string, Status: string, CreatedDate: Date}>>} raw list of records\r\n         */\r\n        this.getOrdersForCloseRegistry = function (closeRegistryID) {\r\n            return this.connection.select({\r\n                from: 'registryOrders',\r\n                where: {\r\n                    RegistryCloseID: closeRegistryID\r\n                },\r\n                order: {\r\n                    by: 'CreatedDate',\r\n                    type: 'asc'\r\n                }\r\n            });\r\n        };\r\n\r\n        /**\r\n         * get orphan orders (where OrderID or RegistryCloseID is all zeros)\r\n         * @returns {Promise<Array<{OrderID: string, RegistryCloseID: string, Status: string, CreatedDate: Date}>>}\r\n         */\r\n        this.getOrphanOrders = function () {\r\n            // Reuse getOrdersForCloseRegistry with zero GUID\r\n            return this.getOrdersForCloseRegistry('00000000-0000-0000-0000-000000000000');\r\n        };\r\n\r\n        /**\r\n         * get order payments/refunds for registry close\r\n         * @returns {Promise<Array<{OrderID: string, Refunds: string, Payments: string, CreatedDate: Date}>>}\r\n         */\r\n        this.getOrderPaymentsForCloseRegistry = function (closeRegistryID) {\r\n            var THIS = this;\r\n            // First get all OrderIDs for this registry close\r\n            return this.connection.select({\r\n                from: 'registryOrders',\r\n                where: {\r\n                    RegistryCloseID: closeRegistryID\r\n                }\r\n            }).then(function (orders) {\r\n                if (!orders || orders.length === 0) {\r\n                    return [];\r\n                }\r\n                \r\n                var orderIDs = orders.map(function(order) { return order.OrderID; });\r\n                \r\n                // Then get orderPayments for these orders\r\n                return THIS.connection.select({\r\n                    from: 'orderPayments',\r\n                    where: {\r\n                        OrderID: { in: orderIDs }\r\n                    },\r\n                    order: {\r\n                        by: 'CreatedDate',\r\n                        type: 'asc'\r\n                    }\r\n                });\r\n            });\r\n        };\r\n\r\n        this.removeSale = function (saleID, statusID, operationID) {\r\n            var where = {\r\n                StatusID: 'errorHistory'\r\n            }\r\n            if (!operationID) {\r\n                where.SaleID = saleID;\r\n            }\r\n            else {\r\n                where.OperationID = operationID;\r\n            }\r\n            if (statusID) {\r\n                where.StatusID = statusID;\r\n            }\r\n            return this.connection.remove({\r\n                from: 'offSales',\r\n                where: where,\r\n\r\n            });\r\n        };\r\n\r\n        this.loadOfflineSalesErrorHistory = function(posName) {\r\n            return this.connection.select({\r\n                from: 'offSales',\r\n                where: {\r\n                    PosName: posName,\r\n                    StatusID: 'errorHistory'\r\n                },\r\n                order: {\r\n                    by: 'lastModified',\r\n                    type: 'desc'\r\n                }\r\n            });\r\n        };\r\n    }]);","\r\nangular.module('services').factory('keyPressDelayService', ['$timeout', 'configService',\r\n    function ($timeout, configService) {\r\n        var keyPressDelayService = {};\r\n\r\n        keyPressDelayService.keyChain = null;\r\n        keyPressDelayService.timeOut = null;\r\n\r\n        var THIS = keyPressDelayService;\r\n\r\n        keyPressDelayService.forceDelayOperation = function (keyChain, callback) {\r\n            THIS.keyChain = keyChain; // string to send to callback - should be defined\r\n            var timeDelay = configService.keyPressDelay;\r\n            var keyChainMinLength = configService.minSymbolsToStartSearch;\r\n\r\n            if (THIS.timeOut != null) {\r\n                console.log('key press canceled ');\r\n                $timeout.cancel(THIS.timeOut);\r\n                THIS.timeOut = null;\r\n            }\r\n\r\n            THIS.timeOut = $timeout(function () {\r\n                console.log('key press $timeout');\r\n                if (!!keyChain && keyChain.length >= keyChainMinLength) {\r\n                    callback(THIS.keyChain);\r\n                }\r\n            }, timeDelay);\r\n\r\n        };\r\n\r\n        return keyPressDelayService;\r\n    }\r\n]);","import html2canvas from 'html2canvas';\r\n\r\nangular.module('services').service('labelPrintService', [\r\n    '$q', 'helperService', 'errorService', 'constants',\r\n    'configService', 'gettextCatalog', '$http', '$rootScope', \r\n    '$timeout', '$sce',\r\nfunction ($q, helperService, errorService, constants, configService,\r\n    gettextCatalog, $http, $rootScope, $timeout, $sce) {\r\n\r\n    this.labelPrinterName = null;\r\n    this.labelPaperWidthCode = 2; // defined by dpi and paper width in cm/inches\r\n    this.simulatorMode = false;\r\n    this.labelPrintSystem = 'dymo';\r\n    this.deviceIsStarted = false; // true if any device is connected (star printer mPOP). Not for clover\r\n\r\n    /*\r\n    // for star printers defines by name some additional parameters\r\n    this.detectPrinterByName = function (printSystem, name, modelName) {\r\n        var res = {\r\n            portName: name,\r\n            modelName: modelName,\r\n            printerWidthCode: 3,\r\n            hasCashDrawer: true,\r\n            hasInternalScanner: false\r\n        };\r\n\r\n        if (printSystem == 'star') {\r\n            res.printSystem = 'star';\r\n\r\n            if (name.indexOf('BT:') == 0) {\r\n                res.interface = 'bluetooth';\r\n                name = name.substr(3);\r\n            }\r\n            else if (name.indexOf('TCP:') == 0) {\r\n                res.interface = 'network';\r\n                name = name.substr(4);\r\n            }\r\n            else if (name.indexOf('USB:') == 0) {\r\n                res.interface = 'usb';\r\n                name = name.substr(4);\r\n            }\r\n            else\r\n                throw new exception('unknown printer type');\r\n\r\n            res.portable = false;\r\n            res.printerName = name;\r\n\r\n            if (name.indexOf('mPOP') >= 0) {\r\n                res.portable = true;\r\n                res.printerWidthCode = 2;\r\n                res.hasCashDrawer = true;\r\n                res.hasInternalScanner = true;\r\n            }\r\n        }\r\n\r\n        return res;\r\n    };\r\n    */\r\n\r\n    this.labelPrinterOnline = false;\r\n    this.labelPrinterPaperNearEmpty = false;\r\n    this.labelPrinterPaperEmpty = false;\r\n    this.labelPrinterCoverOpen = false;\r\n    this.currentSettings = {};\r\n\r\n    var THIS = this;\r\n    this.eventListenerProcessor = function (evt) {\r\n        console.log('eventListenerProcessor: ' + JSON.stringify(evt));\r\n        if (!THIS.deviceIsStarted) return;\r\n\r\n        var callUpdate = true;\r\n\r\n        switch (evt.dataType) {\r\n            case 'labelPrinterImpossible':\r\n            case 'labelPrinterOffline':\r\n                this.labelPrinterOnline = false;\r\n                break;\r\n            case 'labelPrinterOnline':\r\n                this.labelPrinterOnline = true;\r\n                break;\r\n\r\n            case 'labelPrinterPaperReady':\r\n                this.labelPrinterPaperNearEmpty = false;\r\n                this.labelPrinterPaperEmpty = false;\r\n                break;\r\n\r\n            case 'labelPrinterPaperNearEmpty':\r\n                this.labelPrinterPaperNearEmpty = true;\r\n                this.labelPrinterPaperEmpty = false;\r\n                break;\r\n\r\n            case 'labelPrinterPaperEmpty':\r\n                this.labelPrinterPaperNearEmpty = false;\r\n                this.labelPrinterPaperEmpty = true;\r\n                break;\r\n\r\n            case 'labelPrinterCoverOpen':\r\n                this.labelPrinterCoverOpen = true;\r\n                break;\r\n\r\n            case 'labelPrinterCoverClose':\r\n                this.labelPrinterCoverOpen = false;\r\n                break;\r\n            case 'statusUpdate':\r\n                callUpdate = false;\r\n                break;\r\n\r\n            default:\r\n                callUpdate = false;\r\n        }\r\n\r\n        if (callUpdate) {\r\n            var status = (!this.labelPrinterOnline || this.labelPrinterCoverOpen || this.labelPrinterPaperEmpty) ? 'error' :\r\n                        (this.labelPrinterPaperNearEmpty ? 'warning' : 'ok');\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('header.labelPrinterStatus', status);\r\n            });\r\n        }\r\n    };\r\n\r\n    window.addEventListener('starIOPluginData', this.eventListenerProcessor);\r\n\r\n    // stop label print (combo) device\r\n    this.disconnect = function () {\r\n        console.log('labelPrintService.disconnect');\r\n        var THIS = this;\r\n\r\n        return this.applyLabelPrinterSettings().then(function (settings) {\r\n            return THIS.internalDisconnect(settings);\r\n        });\r\n    };\r\n\r\n    this.internalDisconnect = function (settings) {\r\n        var THIS = this;\r\n        var deffered = $q.defer();\r\n\r\n        if (!this.deviceIsStarted) {\r\n            deffered = $q.defer();\r\n            deffered.resolve(settings);\r\n            return deffered.promise;\r\n        }\r\n\r\n        if (!THIS.simulatorMode && configService.isMobile) {\r\n            console.log(\"start device is bypassed\");\r\n            this.deviceIsStarted = false;\r\n            deffered.resolve(settings);\r\n\r\n            return deffered.promise;\r\n        }\r\n        else {\r\n            console.log(\"connect star in emulator is done\");\r\n            deffered.resolve(settings);\r\n        }\r\n\r\n        return deffered.promise;\r\n    };\r\n\r\n    this.internalConnect = function (settings) {\r\n        var deffered = $q.defer();\r\n\r\n        if (THIS.deviceIsStarted) {\r\n            deffered = $q.defer();\r\n            deffered.resolve(null);\r\n            return deffered.promise;\r\n        }\r\n\r\n        if (!THIS.simulatorMode && configService.isMobile) {\r\n            console.log(\"start device is bypassed\");\r\n            this.deviceIsStarted = true;\r\n            deffered.resolve({ status: 'success' });\r\n\r\n            return deffered.promise;\r\n        }\r\n        else {\r\n            console.log(\"connect label printer in emulator is done\");\r\n            deffered.resolve(null);\r\n        }\r\n\r\n        return deffered.promise;\r\n    };\r\n\r\n    // connect to label print (combo) device if settings are set\r\n    // new call to this function will reconnect with new settings\r\n    this.connect = function () {\r\n        console.log('labelPrintService.connect');\r\n\r\n        return this.applyLabelPrinterSettings().then(function (settings) {\r\n            return THIS.internalConnect(settings);\r\n        });\r\n    };\r\n\r\n    this.discoverAvailableLabelPrinters = function (labelPrinterSystem) {\r\n        THIS = this;\r\n        var res = [];\r\n        var deffered = $q.defer();\r\n\r\n\r\n        if (!configService.isMobile) {\r\n            deffered.resolve(res);\r\n        }\r\n        else {\r\n            /*\r\n            window.plugins.starPrinter.portDiscovery('Bluetooth', function (err, result) {\r\n                if (err) {\r\n                    console.log(\"portDiscovery error: \" + err);\r\n                    deffered.resolve(res);\r\n                }\r\n                else {\r\n                    console.log(\"portDiscovery is done:\" + JSON.stringify(result));\r\n                    $.each(result, function (i, e) {\r\n                        res.push(THIS.detectPrinterByName(printerSystem,\r\n                                                          (!!e.name ? e.name : e.portName),\r\n                                                          (!!e.modelName ? e.modelName : null)));\r\n                    });\r\n\r\n                    deffered.resolve(res);\r\n                    console.log(\"portDiscovery result:\" + JSON.stringify(res));\r\n                }\r\n            });\r\n            */\r\n        }\r\n\r\n        return deffered.promise;\r\n    };\r\n\r\n    this.applyLabelPrinterSettings = function () {\r\n\r\n        var settings = configService.getLabelPrinterSettings(true);\r\n        this.currentSettings = settings;\r\n\r\n        if (!settings) {\r\n            var deffered = $q.defer();\r\n            deffered.reject('Label printer is not installed');\r\n            return deffered.promise;\r\n        }\r\n\r\n        this.paperWidthCode = settings.labelPrinterWidthCode;\r\n        this.labelPrinterWidthPointsX = settings.labelPrinterWidthPointsX;\r\n        this.labelPrinterWidthPointsY = settings.labelPrinterWidthPointsY;\r\n        this.simulatorMode = settings.simulatorMode;\r\n        this.labelPrintSystem = settings.labelPrintSystem;\r\n        this.labelPrintMode = settings.portable === true ? 'portable' : 'standard';\r\n\r\n        console.log('settings:' + JSON.stringify(settings));\r\n\r\n        var fun = this.initLabelPrinter;\r\n\r\n        return fun(this, settings);\r\n    };\r\n\r\n    this.checkLabelPrinterConnection = function () {\r\n        var THIS = this;\r\n\r\n        return this.applyLabelPrinterSettings()\r\n            .then(function (settings) {\r\n                var deffered = $q.defer();\r\n\r\n                if (!THIS.simulatorMode && configService.isMobile) {\r\n                    /*\r\n                    if (configService.isClover && settings.printSystem == 'clover') {\r\n                        console.log(\"print connection is done\");\r\n                        deffered.resolve({ status: 'success' });\r\n                    }\r\n                    else\r\n                        if (configService.isTelpo && settings.printSystem == 'telpo') {\r\n                            console.log(\"print connection is done\");\r\n                            deffered.resolve({ status: 'success' });\r\n                        }\r\n                        else {\r\n                            window.plugins.starPrinter.checkStatus(THIS.printerName,\r\n                                function (err, result) {\r\n                                    if (err) {\r\n                                        console.log(\"print is not connected\");\r\n                                        deffered.reject(err);\r\n                                    }\r\n                                    else {\r\n                                        console.log(\"print connection is done\");\r\n                                        deffered.resolve(result);\r\n                                    }\r\n                                });\r\n                        }\r\n\r\n                    return deffered.promise;\r\n                    */\r\n                }\r\n                else {\r\n                    console.log(\"print connection in emulator is done\");\r\n                    deffered.resolve(null);\r\n                }\r\n\r\n                return deffered.promise;\r\n\r\n            });\r\n    };\r\n\r\n    this.labelPrintTest = function () {\r\n        var THIS = this;\r\n        var ht = '<div><h2>Print test</h2></div>';\r\n        return this.printLabelsFromHTML($(ht));\r\n    };\r\n\r\n    this.printLabelsFromHTML = function (el, width) {\r\n        var THIS = this;\r\n        console.log('printLabelsFromHTML start');\r\n        // at first convert html from pointed element to image in canvas\r\n        return this.applyLabelPrinterSettings()\r\n            .then(function () {\r\n                console.log('printLabelsFromHTML applyLabelPrinterSettings finished. Label printer name:' + THIS.labelPrinterName);\r\n\r\n                if (configService.isSite && !THIS.simulatorMode) {\r\n                    var q = $q.defer();\r\n                    $(el).printArea();\r\n                    q.resolve(null);\r\n                    return q.promise;\r\n                } else if (!configService.isSite && !THIS.simulatorMode) {\r\n                    var q = $q.defer();\r\n                    \r\n                    //var content = '<html style=\"margin:-150px!important;padding:-150px!important;\"><head></head><body style=\"margin:-150px!important;padding:-150px!important;\">' + $(el).html() + '</body></html>';\r\n                    var content = $(el).html().replace(/\\n/g, '').trim();\r\n\r\n                    if (window.device.platform === 'iOS') {\r\n                        const tags = [\r\n                            'page-break-after', 'break-after'\r\n                        ];\r\n                        var reg = new RegExp('('+ tags.map(x => `(${x})`).join('|') + ')' + ':\\\\s*[\\\\w0-9\\\\s\\\\.]+;', 'g');\r\n                        content = content.replace(reg, '');\r\n                    }\r\n\r\n                    cordova.plugins.printer.print(content, { landscape: true, border: false }, function (res) {\r\n                        if (res == 'Canceled')\r\n                            errorService.showError(\"Print failed, please try later.\");\r\n                        //alert(res ? 'Done' : 'Canceled');\r\n\r\n                        q.resolve(null);\r\n                        return q.promise;\r\n                    });\r\n                }\r\n\r\n                var e = $(el);\r\n\r\n                var cnt = THIS.createLabelPrintContainer(e, THIS.labelPrinterWidthPointsX, THIS.labelPrinterWidthPointsY);\r\n                e = $(cnt.contentDocument.getElementById('labelPrinterAreaID'));\r\n                var chl = e.children().children().css('border-bottom', '').css('border-right', '');\r\n                console.log('printLabelsFromHTML createLabelPrintContainer finished');\r\n\r\n                // scale() is not used due to it badly works on android. It seems an anroid has different scale coefficient for height and width\r\n                //var coef = THIS.paperWidth / e.outerWidth();\r\n                //var width = Math.floor(e.outerWidth() * coef);\r\n                //var height = Math.floor(e.outerHeight() * coef * window.screen.width/window.screen.height);\r\n\r\n                //var canvas = document.createElement('canvas');\r\n\r\n                //canvas.width = e.outerWidth();\r\n                //canvas.height = e.outerHeight();\r\n\r\n                //var ctx = canvas.getContext('2d');\r\n                //ctx.scale(coef, coef);\r\n\r\n                if (configService.isEmulator || THIS.simulatorMode) {\r\n                    return html2canvas(e[0]);\r\n                }\r\n                var q = $q.defer();\r\n\r\n                var s = e.parent().parent().html().replace('<head></head>', '');\r\n                q.resolve({\r\n                    labelPrinterName: THIS.labelPrinterName,\r\n                    width: e.outerWidth(),\r\n                    height: e.outerHeight(),\r\n                    html: '<!DOCTYPE html><html><head><title>labels</title><meta name=\"viewport\" content=\"initial-scale=1.0\" /></head>' + s + '</html>'\r\n                });\r\n                return q.promise;\r\n            })\r\n        .then(function (data) {\r\n            console.log('printLabelsFromHTML html2canvas finished');\r\n\r\n            var canvas = data;\r\n\r\n            var q = $q.defer();\r\n\r\n            if (data == null) {\r\n                q.resolve(null);\r\n                return q.promise;\r\n            }\r\n\r\n            if (typeof (canvas) == 'string') {\r\n                q.resolve(canvas);\r\n            }\r\n            else if (!!data.html) {\r\n                data.mode = THIS.labelPrintMode;\r\n                q.resolve(data);\r\n            }\r\n            else {\r\n                q.resolve({\r\n                    labelPrinterName: THIS.labelPrinterName,\r\n                    width: THIS.labelPrinterWidthPointsX,\r\n                    canvas: canvas,\r\n                    mode: THIS.labelPrintMode\r\n                });\r\n            }\r\n\r\n            return q.promise;\r\n\r\n        }).then(function (dat) {\r\n            var q = $q.defer();\r\n            if (!THIS.simulatorMode && configService.isMobile) {\r\n                /*console.log('printLabelsFromHTML before labelPrintFromCanvas: ');\r\n\r\n                var fun = null;\r\n                if (configService.isClover && THIS.labelPrintSystem == 'clover')\r\n                    fun = window.plugins.starLabelPrinter.labelPrintFromHTMLClover;\r\n                else\r\n                    if (configService.isTelpo && THIS.labelPrintSystem == 'telpo')\r\n                        fun = window.plugins.starLabelPrinter.labelPrintFromHTMLTelpo;\r\n                    else\r\n                        fun = window.plugins.starLabelPrinter.labelPrintFromHTML;\r\n\r\n                fun(dat.labelPrinterName,\r\n                    dat.width,\r\n                    dat.height,\r\n                    dat.html,\r\n                    !helperService.checkDeviceVersion(),\r\n                    dat.mode,\r\n                    function (err, result) {\r\n                        console.log('labelPrintFromHTML labelPrintFromCanvas finished');\r\n\r\n                        if (err) {\r\n                            console.log(\"Label print is failed:\" + err);\r\n\r\n                            if (err.indexOf('Failed to connect port') >= 0) {\r\n                                err = 'Label Printer is not connected! Check please bluetooth printer is turned on.';\r\n                            }\r\n                            q.reject(err);\r\n                        }\r\n                        else {\r\n                            console.log(\"Label print is done\");\r\n                            q.resolve(result);\r\n                        }\r\n                    });\r\n\r\n\r\n                //return q.promise;*/\r\n                q.resolve(null);\r\n            }\r\n            else {\r\n                if (dat != null && (configService.isEmulator || THIS.simulatorMode)) {\r\n                    THIS.showLabelPrintImage(dat.canvas, dat.canvas.width, dat.canvas.height,\r\n                    function () {\r\n                        console.log(\"Label print in emulator is done\");\r\n                        q.resolve(null);\r\n                    });\r\n                }\r\n                else {\r\n                    console.log(\"Label print is done\");\r\n                    q.resolve(null);\r\n                }\r\n\r\n                //q.resolve(null);\r\n            }\r\n\r\n            return q.promise;\r\n        });\r\n    };\r\n\r\n    this.showLabelPrintImage = function (canvas, width, height, callback) {\r\n        var data64 = canvas.toDataURL('image/png');\r\n\r\n        var modalStr = '<div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" style=\"z-index:10041;\">' +\r\n            '  <div class=\"modal-dialog\" role=\"document\" style=\"width:' + (width + 60) +'px;\">' +\r\n            '    <div class=\"modal-content\">' +\r\n            '      <div class=\"modal-header\">' +\r\n            '        <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>' +\r\n            '        <h4 class=\"modal-title\">' + gettextCatalog.getString(\"Labels\") + '</h4>' +\r\n            '      </div>' +\r\n            '      <div style=\"overflow:auto;height:' + $(window).height() * 0.7 + 'px;\"><div class=\"modal-body\" id=\"labelPrintBodyID\" style=\"text-align: center;style=\"width:' + (width + 30) + 'px;height:' + height + 'px;\">' +\r\n            '      </div></div>' +\r\n            '      <div class=\"modal-footer\">' +\r\n            '        <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">' + gettextCatalog.getString(\"Close\") + '</button>' +\r\n            '      </div>' +\r\n            '    </div>' +\r\n            '  </div>' +\r\n            '</div>';\r\n\r\n        var $d = $(modalStr);\r\n        $d.find('.modal-body').append('<img src=\"' + data64 + '\"/>');\r\n        $('body').append($d);\r\n\r\n        if (typeof callback == 'function') {\r\n            $.unblockUI();\r\n            helperService.showDialog($d, function (wnd) {\r\n                wnd.on('hidden.bs.modal', function (e) {\r\n                    callback();\r\n                    $.blockUI();\r\n                });\r\n            });\r\n        }\r\n        else {\r\n            helperService.showDialog($d);\r\n        }\r\n    };\r\n\r\n    this.createLabelPrintContainer = function (el, width, height) {\r\n        console.log('Enter createLabelPrintContainer');\r\n        $('.labelPrint-container').remove();\r\n\r\n        //var width = el.outerWidth();\r\n        //var height = el.outerHeight();\r\n\r\n        var container = document.createElement(\"iframe\");\r\n        container.className = \"labelPrint-container\";\r\n        container.style.visibility = \"hidden\";\r\n        container.style.position = \"fixed\";\r\n        container.style.left = \"-10000px\";\r\n        container.style.top = \"0px\";\r\n        container.style.border = \"0\";\r\n        container.width = width;\r\n        // container.height = height;\r\n        container.scrolling = \"no\"; // ios won't scroll without it\r\n\r\n        document.body.appendChild(container);\r\n        var ec = el.clone();\r\n        ec.css({ \"background-color\": \"white\", 'position': 'absolute', 'left': '0', 'top': '0', 'width': width + 'px' });\r\n        ec.attr('id', 'labelPrinterAreaID');\r\n        ec.removeAttr('template');\r\n\r\n        $(container.contentDocument.body).append(ec);\r\n\r\n        var o = {\r\n            height: container.height,\r\n            width: container.width\r\n        };\r\n        console.log('leave createLabelPrintContainer: ' + JSON.stringify(o));\r\n\r\n        return container;\r\n    };\r\n\r\n    this.initLabelPrinter = function (THIS, settings) {\r\n        THIS.labelPrinterName = settings.labelPrinterName;\r\n        var deffered = $q.defer();\r\n        deffered.resolve(settings);\r\n        return deffered.promise;\r\n    };\r\n\r\n    this.printLabels = function (labelPrintEl, ignoreNotLabelPrint) {\r\n        $.blockUI();\r\n        var elLabelPrint = !!labelPrintEl ? labelPrintEl.get(0) : $('.label-template div:first-child').get(0);\r\n\r\n        if (!!elLabelPrint.outerHTML) {\r\n            var tel = $(elLabelPrint.outerHTML);\r\n\r\n            tel.removeAttr('template');\r\n\r\n            tel.find('[ngm-font-size]').each(function () {\r\n                var sz = $(this).attr('ngm-font-size');\r\n                $(this).css('font-size', sz);\r\n                $(this).removeAttr('ngm-font-size');\r\n            });\r\n\r\n            if (ignoreNotLabelPrint !== true)\r\n                tel.find('[not-print]').remove();\r\n\r\n            return this.printLabelsFromHTML(tel[0])\r\n                .then(function () {\r\n                    $.unblockUI();\r\n                    console.log(\"label is printed\");\r\n                    var q = $q.defer();\r\n                    q.resolve(null);\r\n                    return q.promise;\r\n                })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                console.log(\"label is rejected\");\r\n                errorService.showError(err);\r\n                var q = $q.defer();\r\n                q.reject(null);\r\n                return q.promise;\r\n            });\r\n        }\r\n        else {\r\n            var q = $q.defer();\r\n            q.resolve(null);\r\n            return q.promise;\r\n        }\r\n    };\r\n\r\n}]);","angular.module('services').service('labelService', [\r\n    '$q', '$http', 'configService', 'remoteRequestProvider', 'localDBProvider', 'deviceInfo',\r\n    function ($q, $http, configService, remoteRequestProvider, localDBProvider, deviceInfo) {\r\n\r\n        this.getLabelPrintArea = function (forceLocal) {\r\n            return [\r\n            { text: 'Continuous feed (19mm)', value: 51, pointsX: 500, pointsY: 69, labelW: 500, labelH: 69 },\r\n            { text: 'Continuous feed (24mm)', value: 52, pointsX: 500, pointsY: 85, labelW: 500, labelH: 85 },\r\n            { text: 'Continuous dual (2x1)', value: 53, pointsX: 240, pointsY: 60, labelW: 120, labelH: 60 },\r\n\r\n            { text: 'Avery Sheet of 3 X 11', value: 100, pointsX: 790, pointsY: 1110, labelW: 263, labelH: 101, perRow: 3, rows: 11 },\r\n            { text: 'Avery Sheet of 5 X 13', value: 101, pointsX: 790, pointsY: 1110, labelW: 112.5, labelH: 71, perRow: 5, rows: 13, margins: [38, 16, 0, 14] },\r\n            { text: 'US Letter Sheet of 3 X 10', value: 102, pointsX: 790, pointsY: 1110, labelW: 263, labelH: 109, perRow: 3, rows: 10 },\r\n            { text: 'Sheet of 4 X 14', value: 103, pointsX: 790, pointsY: 1110, labelW: 197, labelH: 77, perRow: 4, rows: 14 }\r\n            ];\r\n        }\r\n        this.getTemplate = function (forceLocal) {\r\n\r\n            var provider = configService.isOnline && forceLocal!==true ? remoteRequestProvider : localDBProvider;\r\n            var promise = null;\r\n\r\n            if (configService.isSite || deviceInfo.isSimulator) {\r\n\r\n                var v = forceLocal !== true ? null : configService.loadLabelTemplate();\r\n\r\n                if (!!v) {\r\n                    var deffered = $q.defer();\r\n                    deffered.resolve(JSON.parse(v));\r\n                    promise = deffered.promise;\r\n                }\r\n                else {\r\n                    promise = remoteRequestProvider.getLabelTemplate(configService.labelID);\r\n                }\r\n            }\r\n            else {\r\n                promise = provider.getLabelTemplate(configService.labelID);\r\n            }\r\n\r\n            promise = promise.then(function (receipt) {\r\n                var deffered = $q.defer();\r\n\r\n                if (forceLocal !== true && configService.isOnline && configService.isSite === false && !deviceInfo.isSimulator) {\r\n                    localDBProvider.saveLabelTemplate(configService.labelID, receipt.data);\r\n                }\r\n\r\n                if (configService.isSite === true) {\r\n                    configService.saveLabelTemplate(JSON.stringify(receipt));\r\n                }\r\n\r\n                var el = $('<div data-base>' + receipt.data.Template + '</div>');\r\n\r\n                var se = el.find(\"span:contains('*')\");\r\n                if (se.length > 0) {\r\n                    se.css('display', 'none');\r\n                    se.html('');\r\n                }\r\n                \r\n                \r\n                var se = el.find(\"span:contains('{{itemProductLabels.ProductPrice}}')\");\r\n\r\n                /*\r\n                if (se.length > 0) {\r\n                    se.css('font-size', '18pt');\r\n                }\r\n                */\r\n                \r\n\r\n                var se = el.find(\"span:contains('{{itemProductLabels.Name}}')\");\r\n                \r\n                /*if (se.length > 0) {\r\n                    //se.css('font-size', '14pt');\r\n                    //se.css('margin-top', '5px');\r\n\r\n                    var pse = se.parent();\r\n                    if (pse.length > 0) {\r\n                        pse.css('text-align', 'left');\r\n                    }\r\n                }*/\r\n                \r\n\r\n                var se = el.find(\"span:contains('{{itemProductLabels.ProductCode}}')\");\r\n               \r\n                /*if (se.length > 0) {\r\n                    //se.css('font-size', '12pt');\r\n\r\n                    var pse = se.parent();\r\n                    if (pse.length > 0) {\r\n                        pse.css('text-align', 'left');\r\n                    }\r\n                }*/\r\n\r\n                receipt.data.Template = el.html();\r\n\r\n                deffered.resolve(receipt.data);\r\n                return deffered.promise;\r\n            });\r\n\r\n            return promise;\r\n        };\r\n    }]);\r\n","angular.module('services').service('linklyPaymentReaderProvider',\r\n    ['$q', 'configService', 'gettextCatalog', 'webOnlyProvider', 'helperService', '$timeout', 'uuid2', '$interval',\r\n\r\n        function ($q, configService, gettextCatalog, webOnlyProvider, helperService, $timeout, uuid2, $interval) {\r\n            this.appID = buildConfiguration.linklyPaymentApplicationId;\r\n            this.delayDone = true; // this key should be used if provider generates some intermediate events that should be processed before payment will be treated as complited\r\n\r\n            this.integrationKeys = {};\r\n            this.parentScope = null;\r\n\r\n            this.prm = helperService.resolvePromise(true);\r\n            this.errorRecoveryInSeconds = 150;\r\n\r\n            this.polling = null;\r\n            this.pollingIntervalInSeconds = 30;\r\n            this.isRequestFromPurchase = false;\r\n\r\n            this.formKey = function () {\r\n                return configService.linklyUserName + '_' + configService.linklyPassword;\r\n            };\r\n\r\n            this.init = function (force, settings) {\r\n                var deferred = $q.defer();\r\n\r\n                if (!force) {\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                }\r\n\r\n                this.integrationKeys = this.retrieveLinklyData('LinklyPaymentIntegrationKeys');\r\n\r\n                if (this.integrationKeys == null)\r\n                    this.integrationKeys = {};\r\n\r\n                var settings = configService.getCardPaymentSettings();\r\n\r\n                linklyCloudSecretKeyUrl = configService.isQAMode ?\r\n                    \"https://auth.sandbox.cloud.pceftpos.com/v1/pairing/cloudpos\" : // debug aims only !!!\r\n                    \"https://auth.cloud.pceftpos.com/v1/pairing/cloudpos\";\r\n\r\n                var THIS = this;\r\n                var linklyPaymentPairCode = $('#linklyPaymentPairCode').val();\r\n\r\n                if (!linklyPaymentPairCode)\r\n                {\r\n                    deferred.reject({\r\n                        result: false,\r\n                        response: {\r\n                            errorDescription: gettextCatalog.getString('Please specify the pair code.')\r\n                        }\r\n                    });\r\n                    return deferred.promise;           \r\n                }\r\n\r\n                if(!configService.linklyUserName || !configService.linklyPassword)\r\n                {\r\n                    deferred.reject({\r\n                        result: false,\r\n                        response: {\r\n                            errorDescription: gettextCatalog.getString('The username, password, or paircode was invalid. Please check this information and try again.')\r\n                        }\r\n                    });\r\n                    return deferred.promise;           \r\n                }\r\n\r\n                webOnlyProvider.getLinklyCloudSecretKey(linklyCloudSecretKeyUrl, linklyPaymentPairCode, configService.linklyUserName, configService.linklyPassword)\r\n                    .then((response) => {\r\n\r\n                        THIS.integrationKeys[THIS.formKey()] = response.data.secret;\r\n                        this.storeLinklyData('LinklyPaymentIntegrationKeys', THIS.integrationKeys);\r\n                        this.storeLinklyData('secret', response.data.secret);\r\n\r\n                        iframeSourceUrl = configService.isQAMode ?\r\n                            \"https://auth.sandbox.cloud.pceftpos.com/v1/tokens/cloudpos\" : // debug aims only !!!\r\n                            \"https://auth.cloud.pceftpos.com/v1/tokens/cloudpos\";\r\n\r\n                        var posName = configService.posName;\r\n                        var posVersion = buildConfiguration.appVersion;\r\n                        var posId = configService.lastRegistryID;\r\n                        var posVendorId = configService.posVendorId;\r\n\r\n                        webOnlyProvider.linklyCloudPairTerminal(iframeSourceUrl, response.data.secret, posName, posVersion, posId, posVendorId)\r\n                            .then((res) => {\r\n\r\n                                this.storeLinklyData('token', res.data.token);\r\n                                var tokenExpiryInSeconds = res.data.expirySeconds - 600;\r\n                                this.storeLinklyData('token-expiry', Date.now() + tokenExpiryInSeconds * 1000);\r\n\r\n                                this.startPolling();\r\n\r\n                                deferred.resolve(res.data.token);\r\n\r\n                            })\r\n                            .catch((error) => {\r\n\r\n                                if (error.status == 401)\r\n                                    errorMessage = gettextCatalog.getString('The username, password, or paircode was invalid. Please check this information and try again.')\r\n                                else\r\n                                    errorMessage = THIS.getErrorText(error.statusText);\r\n\r\n                                deferred.reject({\r\n                                    result: false,\r\n                                    response: {\r\n                                        errorDescription: errorMessage\r\n                                    }\r\n                                });\r\n\r\n                            });\r\n\r\n                    })\r\n                    .catch((error) => {\r\n\r\n                        if (error.status == 401)\r\n                            errorMessage = gettextCatalog.getString('The username, password, or paircode was invalid. Please check this information and try again.')\r\n                        else\r\n                            errorMessage = THIS.getErrorText(error.statusText);\r\n\r\n                        deferred.reject({\r\n                            result: false,\r\n                            response: {\r\n                                errorDescription: errorMessage\r\n                            }\r\n                        });\r\n\r\n                    });\r\n\r\n                return deferred.promise;\r\n            }\r\n\r\n            this.unpair = function (settings) {\r\n\r\n                var deferred = $q.defer();\r\n\r\n                this.removeLinklyData('tempSessionId');\r\n                this.removeLinklyData('lastSessionId');\r\n                this.removeLinklyData('token');\r\n                this.removeLinklyData('secret');\r\n                this.removeLinklyData('LinklyPaymentIntegrationKeys');\r\n\r\n                this.stopPolling();\r\n\r\n                deferred.resolve(this.integrationKeys[this.formKey()]);\r\n                return deferred.promise;\r\n\r\n            };\r\n\r\n            this.getToken = function () {\r\n\r\n                var deferred = $q.defer();\r\n                iframeSourceUrl = configService.isQAMode ?\r\n                    \"https://auth.sandbox.cloud.pceftpos.com/v1/tokens/cloudpos\" : // debug aims only !!!\r\n                    \"https://auth.cloud.pceftpos.com/v1/tokens/cloudpos\";\r\n\r\n                var secret = this.retrieveLinklyData('secret');\r\n                var posName = configService.posName;\r\n                var posVersion = buildConfiguration.appVersion;\r\n                var posId = configService.lastRegistryID;\r\n                var posVendorId = configService.posVendorId;\r\n\r\n                webOnlyProvider.linklyCloudPairTerminal(iframeSourceUrl, secret, posName, posVersion, posId, posVendorId)\r\n                    .then((res) => {\r\n\r\n                        this.storeLinklyData('token', res.data.token);\r\n                        var tokenExpiryInSeconds = res.data.expirySeconds - 600;\r\n                        this.storeLinklyData('token-expiry', Date.now() + tokenExpiryInSeconds * 1000);\r\n\r\n                        deferred.resolve(res.data.token);\r\n\r\n                    })\r\n                    .catch((error) => {\r\n                        var errorText = THIS.getErrorText(error.statusText);\r\n\r\n                        deferred.reject({\r\n                            result: false,\r\n                            response: {\r\n                                errorDescription: errorText\r\n                            }\r\n                        });\r\n\r\n                    });\r\n                return deferred.promise;\r\n\r\n            };\r\n\r\n            this.progressText = \"\";\r\n            this.isProgressShown = false;\r\n            this.hideButtons = false;\r\n            this.showProgressDialog = function () {\r\n                var THIS = this;\r\n                if (!this.isProgressShown) {\r\n\r\n                    this.parentScope.customModalDlg2Caption = 'Linkly payment system';\r\n                    this.parentScope.customModalDlg2Text = this.progressText;\r\n                    if (!this.hideButtons) {\r\n                        this.parentScope.customModalDlg2Buttons = [{\r\n                            name: gettextCatalog.getString('Cancel'),\r\n                            value: 'cancel'\r\n                        }];\r\n                    }\r\n                    else {\r\n                        this.parentScope.customModalDlg2Buttons = [];\r\n                    }\r\n\r\n                    this.parentScope.callbackModal2 = function (code) {\r\n                        console.log('callbackModal2 called');\r\n                        THIS.cancelCurrentTransaction();\r\n                        return true;\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        this.isProgressShown = true;\r\n                        helperService.showDialog('#customModalDlg2');\r\n                    });\r\n                }\r\n            }\r\n\r\n            this.hideProgressDialog = function (force) {\r\n                if (this.isProgressShown || force) {\r\n                    $timeout(function () {\r\n                        helperService.closeDialog('#customModalDlg2');\r\n                        this.isProgressShown = false;\r\n                    });\r\n\r\n                }\r\n            };\r\n\r\n            this.dialogCalled = false;\r\n            this.lastQuestion = null;\r\n            this.lastCallback = null;\r\n\r\n            this.makePayment = function (options) {\r\n                this.hideButtons = false;\r\n                var THIS = this;\r\n                this.dialogCalled = false;\r\n                this.isProgressShown = false;\r\n                var isTokenExpired = false\r\n                this.isRequestFromPurchase = true;\r\n\r\n                var settings = configService.getCardPaymentSettings();\r\n\r\n                var d0 = $q.defer();\r\n\r\n                var secret = this.retrieveLinklyData('secret');\r\n                var token = this.retrieveLinklyData('token');\r\n                var pr = this.prm;\r\n\r\n                if (secret) {\r\n\r\n                    var tokenExpiry = this.retrieveLinklyData('token-expiry');\r\n\r\n                    if (!token || tokenExpiry <= Date.now()) {\r\n\r\n                        isTokenExpired = true;\r\n                        pr = pr.then(function () {\r\n                            return THIS.getToken().then(function () {\r\n                                token = THIS.retrieveLinklyData('token');\r\n                            });\r\n                        });\r\n                    }\r\n                }\r\n                else {\r\n                    d0.reject({\r\n                        message: gettextCatalog.getString(\"Terminal has been disconnected from Cin7 Core POS.\")\r\n                    });\r\n                    return d0.promise;\r\n                }\r\n\r\n                if (settings.printLinklyPaymentReceiptOnTerminal !== true &&\r\n                    !configService.supportLinklyMerchantCustomerReceiptPrint) {\r\n                    d0.reject({\r\n                        message: gettextCatalog.getString(\"The current receipt template doesn't support merchant/customer receipt printing. Please modify the receipt template or disable 'Print EFTPOS receipts on the Linkly payment terminal' on the setup page.\")\r\n                    });\r\n                    return d0.promise;\r\n                }\r\n\r\n                THIS.progressText = gettextCatalog.getString(\"Transaction in progress...\");\r\n                THIS.showProgressDialog();\r\n\r\n                return pr.then(function () {\r\n\r\n                    linklyCloudPaymentUrl = configService.isQAMode ?\r\n                        \"https://rest.pos.sandbox.cloud.pceftpos.com/v1/sessions/\" : // debug aims only !!!\r\n                        \"https://rest.pos.cloud.pceftpos.com/v1/sessions/\";\r\n\r\n                    d0.resolve(null);\r\n\r\n                    var deferred = $q.defer();\r\n\r\n                    var requestType = \"/transaction?async=false\";\r\n\r\n                    var isPaymentReceiptOn = settings.printLinklyPaymentReceiptOnTerminal !== true ? 7 : 0;\r\n                    var isCutReceiptOn = settings.receiptsLinklyPaymentReceiptOnTerminal !== true ? 0 : 1;\r\n\r\n                    let tempSessionId = uuid2.newguid();\r\n\r\n                    THIS.storeLinklyData('tempSessionId', tempSessionId);\r\n\r\n                    var amount = Math.round(options.amount * 100).toString()\r\n\r\n                    webOnlyProvider.linklyCloudMakePayment(linklyCloudPaymentUrl, tempSessionId, token, requestType, amount, options.OrderNumber, isCutReceiptOn, isPaymentReceiptOn)\r\n                        .then((transactionData) => {\r\n\r\n                            if (transactionData.data.response.success) {\r\n\r\n                                THIS.hideProgressDialog(true);\r\n                                var responseTransactionData = transactionData.data.response;\r\n                                responseTransactionData.provider = 'linklyPaymentReaderProvider';\r\n\r\n                                THIS.storeLinklyData('lastSessionId', tempSessionId);\r\n\r\n                                var prm = THIS.prm;\r\n\r\n                                if (isPaymentReceiptOn == 7) {\r\n                                    if (transactionData.data.response.receipts.length > 0 && transactionData.data.response.receipts[0].receiptText != undefined && transactionData.data.response.receipts[0].receiptText != null) {\r\n                                        responseTransactionData.merchantReceipt = transactionData.data.response.receipts[0].receiptText.toString();\r\n                                        responseTransactionData.customerReceipt = transactionData.data.response.receipts[0].receiptText.toString();\r\n                                    } else {\r\n\r\n                                        prm = prm.then(function () {\r\n                                            return THIS.getReprintReceipt().then(function (printReceipt) {\r\n                                                if (printReceipt.response.printReceipt != undefined && printReceipt.response.printReceipt != null) {\r\n                                                    responseTransactionData.merchantReceipt = printReceipt.response.printReceipt.toString();\r\n                                                    responseTransactionData.customerReceipt = printReceipt.response.printReceipt.toString();\r\n                                                }\r\n                                            });\r\n                                        });\r\n                                    }\r\n                                }\r\n\r\n                                return prm.then(function () {\r\n\r\n                                    // for partial payment approval\r\n                                    if (transactionData.data.response.responseText.trim().toLowerCase() == \"approved\" && options.Sale.Balance != 0) {\r\n                                        $.unblockUI();\r\n                                        // show warning dialog\r\n                                        var txt = gettextCatalog.getString('Only') + ' ' + helperService.applyCurrency(options.amount, THIS.currency_symbol) + ' ' + gettextCatalog.getString('is approved. The rest of the amount must be paid in another way.');\r\n\r\n                                        helperService.showInfoDialog({ title: '', body: txt }, function () {\r\n\r\n                                            deferred.resolve({\r\n                                                result: true,\r\n                                                response: {\r\n                                                    ServerTransactionID: tempSessionId,\r\n                                                    TransactionMetaData: responseTransactionData\r\n                                                }\r\n                                            });\r\n                                        });\r\n                                    }\r\n                                    else {\r\n\r\n                                        deferred.resolve({\r\n                                            result: true,\r\n                                            response: {\r\n                                                ServerTransactionID: tempSessionId,\r\n                                                TransactionMetaData: responseTransactionData\r\n                                            }\r\n                                        });\r\n\r\n                                    }\r\n                                })\r\n                            }\r\n                            else {\r\n\r\n                                THIS.storeLinklyData('errorRecovery-expiry', Date.now() + THIS.errorRecoveryInSeconds * 1000);\r\n                                return THIS.errorRecovery().then(function (errorRecovery) {\r\n\r\n                                    if (errorRecovery.response.success) {\r\n\r\n                                        THIS.hideProgressDialog(true);\r\n                                        var responseTransactionData = errorRecovery.response;\r\n                                        responseTransactionData.provider = 'linklyPaymentReaderProvider';\r\n\r\n                                        var prm = THIS.prm;\r\n\r\n                                        if (isPaymentReceiptOn == 7) {\r\n                                            if (errorRecovery.response.receipts.length > 0 && errorRecovery.response.receipts[0].receiptText != undefined && errorRecovery.response.receipts[0].receiptText != null) {\r\n                                                responseTransactionData.merchantReceipt = errorRecovery.response.receipts[0].receiptText.toString();\r\n                                                responseTransactionData.customerReceipt = errorRecovery.response.receipts[0].receiptText.toString();\r\n                                            } else {\r\n                                                prm = prm.then(function () {\r\n                                                    return THIS.getReprintReceipt().then(function (printReceipt) {\r\n                                                        if (printReceipt.response.printReceipt != undefined && printReceipt.response.printReceipt != null) {\r\n                                                            responseTransactionData.merchantReceipt = printReceipt.response.printReceipt.toString();\r\n                                                            responseTransactionData.customerReceipt = printReceipt.response.printReceipt.toString();\r\n                                                        }\r\n                                                    });\r\n                                                });\r\n                                            }\r\n                                        }\r\n\r\n                                        return prm.then(function () {\r\n\r\n                                            deferred.resolve({\r\n                                                result: true,\r\n                                                response: {\r\n                                                    ServerTransactionID: tempSessionId,\r\n                                                    TransactionMetaData: responseTransactionData\r\n                                                }\r\n                                            });\r\n\r\n                                        });\r\n\r\n                                    }\r\n                                    else {\r\n                                        var errorText = THIS.getErrorText(errorRecovery.statusText);\r\n\r\n                                        THIS.hideProgressDialog(true);\r\n                                        deferred.reject({\r\n                                            result: false,\r\n                                            response: {\r\n                                                errorDescription: errorText\r\n                                            }\r\n                                        });\r\n\r\n                                    }\r\n\r\n                                }).catch((err) => {\r\n                                    var errorText = THIS.getErrorText(err.errorDescription);\r\n\r\n                                    THIS.hideProgressDialog(true);\r\n                                    deferred.reject({\r\n                                        result: false,\r\n                                        response: {\r\n                                            errorDescription: errorText\r\n                                        }\r\n                                    });\r\n\r\n                                });\r\n                            }\r\n                        })\r\n                        .catch((error) => {\r\n\r\n                            if (error.status == 401 && isTokenExpired == false) {\r\n\r\n                                THIS.storeLinklyData('token-expiry', Date.now());\r\n                                return THIS.makePayment(options).then(function (res) {\r\n\r\n                                    deferred.resolve(res);\r\n\r\n                                }).catch((err) => {\r\n                                    var errorText = THIS.getErrorText(err.response.errorDescription);\r\n\r\n                                    deferred.reject({\r\n                                        result: false,\r\n                                        response: {\r\n                                            errorDescription: errorText\r\n                                        }\r\n                                    });\r\n\r\n                                });\r\n                            }\r\n                            else if (error.status == 408 || (error.status >= 500 && error.status <= 599)) {\r\n\r\n                                THIS.storeLinklyData('errorRecovery-expiry', Date.now() + THIS.errorRecoveryInSeconds * 1000);\r\n                                return THIS.errorRecovery().then(function (transactionData) {\r\n\r\n                                    THIS.hideProgressDialog(true);\r\n                                    var responseTransactionData = transactionData.response;\r\n                                    responseTransactionData.provider = 'linklyPaymentReaderProvider';\r\n\r\n                                    if (transactionData.response.status == 200) {\r\n\r\n                                        var prm = THIS.prm;\r\n\r\n                                        if (isPaymentReceiptOn == 7) {\r\n                                            if (transactionData.response.receipts.length > 0 && transactionData.response.receipts[0].receiptText != undefined && transactionData.response.receipts[0].receiptText != null) {\r\n                                                responseTransactionData.merchantReceipt = transactionData.response.receipts[0].receiptText.toString();\r\n                                                responseTransactionData.customerReceipt = transactionData.response.receipts[0].receiptText.toString();\r\n                                            } else {\r\n                                                prm = prm.then(function () {\r\n                                                    return THIS.getReprintReceipt().then(function (printReceipt) {\r\n                                                        if (printReceipt.response.printReceipt != undefined && printReceipt.response.printReceipt != null) {\r\n                                                            responseTransactionData.merchantReceipt = printReceipt.response.printReceipt.toString();\r\n                                                            responseTransactionData.customerReceipt = printReceipt.response.printReceipt.toString();\r\n                                                        }\r\n                                                    });\r\n                                                });\r\n                                            }\r\n                                        }\r\n\r\n                                        return prm.then(function () {\r\n\r\n                                            deferred.resolve({\r\n                                                result: true,\r\n                                                response: {\r\n                                                    ServerTransactionID: tempSessionId,\r\n                                                    TransactionMetaData: responseTransactionData\r\n                                                }\r\n                                            });\r\n                                        });\r\n\r\n                                    }\r\n                                    else {\r\n\r\n                                        var errorText = THIS.getErrorText(error.statusText);\r\n\r\n                                        deferred.reject({\r\n                                            result: false,\r\n                                            response: {\r\n                                                errorDescription: errorText\r\n                                            }\r\n                                        });\r\n\r\n                                    }\r\n\r\n                                }).catch((err) => {\r\n\r\n                                    var errorText = THIS.getErrorText(err.errorDescription);\r\n\r\n                                    THIS.hideProgressDialog(true);\r\n                                    deferred.reject({\r\n                                        result: false,\r\n                                        response: {\r\n                                            errorDescription: errorText\r\n                                        }\r\n                                    });\r\n\r\n                                });\r\n                            }\r\n                            else {\r\n\r\n                                var errorText = THIS.getErrorText(error.statusText);\r\n\r\n                                THIS.hideProgressDialog(true);\r\n                                deferred.reject({\r\n                                    result: false,\r\n                                    response: {\r\n                                        errorDescription: errorText == undefined ? error.response.errorDescription : errorText\r\n                                    }\r\n                                });\r\n\r\n                            }\r\n\r\n                        });\r\n\r\n                    return deferred.promise;\r\n                });\r\n            };\r\n\r\n            this.refund = function (el, refundSum, options) {\r\n\r\n                this.hideButtons = false;\r\n                var THIS = this;\r\n                this.dialogCalled = false;\r\n                this.isProgressShown = false;\r\n                var isTokenExpired = false;\r\n                this.isRequestFromPurchase = false;\r\n\r\n                var settings = configService.getCardPaymentSettings();\r\n\r\n                var d0 = $q.defer();\r\n\r\n                var secret = THIS.retrieveLinklyData('secret');\r\n                var token = THIS.retrieveLinklyData('token');\r\n                var pr = THIS.prm;\r\n\r\n                if (secret) {\r\n\r\n                    var tokenExpiry = THIS.retrieveLinklyData('token-expiry');\r\n\r\n                    if (!token || tokenExpiry <= Date.now()) {\r\n\r\n                        isTokenExpired = true;\r\n                        pr = pr.then(function () {\r\n                            return THIS.getToken().then(function () {\r\n                                token = THIS.retrieveLinklyData('token');\r\n                            });\r\n                        });\r\n                    }\r\n                }\r\n                else {\r\n                    d0.reject({\r\n                        message: gettextCatalog.getString(\"Terminal has been disconnected from Cin7 Core POS. Please connect it again and perform a transaction.\")\r\n                    });\r\n                    return d0.promise;\r\n                }\r\n\r\n                if (settings.printLinklyPaymentReceiptOnTerminal !== true &&\r\n                    !configService.supportLinklyMerchantCustomerReceiptPrint) {\r\n                    d0.reject({\r\n                        message: gettextCatalog.getString(\"The current receipt template doesn't support merchant/customer receipt printing. Please modify the receipt template or disable 'Print EFTPOS receipts on the Linkly payment terminal' on the setup page.\")\r\n                    });\r\n                    return d0.promise;\r\n                }\r\n\r\n                THIS.progressText = gettextCatalog.getString(\"Transaction in progress...\");\r\n                THIS.showProgressDialog();\r\n\r\n                return pr.then(function () {\r\n\r\n                    linklyCloudPaymentUrl = configService.isQAMode ?\r\n                        \"https://rest.pos.sandbox.cloud.pceftpos.com/v1/sessions/\" : // debug aims only !!!\r\n                        \"https://rest.pos.cloud.pceftpos.com/v1/sessions/\";\r\n\r\n                    d0.resolve(null);\r\n\r\n                    var deferred = $q.defer();\r\n\r\n                    var requestType = \"/transaction?async=false\";\r\n\r\n                    var isPaymentReceiptOn = settings.printLinklyPaymentReceiptOnTerminal !== true ? 7 : 0;\r\n                    var isCutReceiptOn = settings.receiptsLinklyPaymentReceiptOnTerminal !== true ? 0 : 1;\r\n\r\n                    var rfn = el.TransactionMetaData && el.TransactionMetaData.purchaseAnalysisData && el.TransactionMetaData.purchaseAnalysisData.RFN ? el.TransactionMetaData.purchaseAnalysisData.RFN : el.TransactionMetaData && el.TransactionMetaData.txnRef ? el.TransactionMetaData.txnRef.trim() : options.OrderNumber;\r\n\r\n                    let tempSessionId = uuid2.newguid();\r\n\r\n                    THIS.storeLinklyData('tempSessionId', tempSessionId);\r\n\r\n                    webOnlyProvider.linklyCloudRefundTransaction(linklyCloudPaymentUrl, tempSessionId, token, requestType, Math.round(refundSum * 100), options.OrderNumber, isCutReceiptOn, isPaymentReceiptOn, rfn)\r\n                        .then((transactionData) => {\r\n\r\n                            if (transactionData.data.response.success) {\r\n\r\n                                THIS.hideProgressDialog(true);\r\n                                var responseTransactionData = transactionData.data.response;\r\n                                responseTransactionData.provider = 'linklyPaymentReaderProvider';\r\n\r\n                                var prm = THIS.prm;\r\n\r\n                                if (isPaymentReceiptOn == 7) {\r\n                                    if (transactionData.data.response.receipts.length > 0 && transactionData.data.response.receipts[0].receiptText != undefined && transactionData.data.response.receipts[0].receiptText != null) {\r\n                                        responseTransactionData.merchantReceipt = transactionData.data.response.receipts[0].receiptText.toString();\r\n                                        responseTransactionData.customerReceipt = transactionData.data.response.receipts[0].receiptText.toString();\r\n                                    } else {\r\n                                        prm = prm.then(function () {\r\n                                            return THIS.getReprintReceipt().then(function (printReceipt) {\r\n                                                if (printReceipt.response.printReceipt != undefined && printReceipt.response.printReceipt != null) {\r\n                                                    responseTransactionData.merchantReceipt = printReceipt.response.printReceipt.toString();\r\n                                                    responseTransactionData.customerReceipt = printReceipt.response.printReceipt.toString();\r\n                                                }\r\n                                            });\r\n                                        });\r\n                                    }\r\n                                }\r\n\r\n                                return prm.then(function () {\r\n\r\n                                    deferred.resolve({\r\n                                        result: true,\r\n                                        amount: refundSum,\r\n                                        ServerTransactionID: tempSessionId,\r\n                                        TransactionMetaData: responseTransactionData\r\n                                    });\r\n                                });\r\n\r\n                            }\r\n                            else {\r\n\r\n                                THIS.storeLinklyData('errorRecovery-expiry', Date.now() + THIS.errorRecoveryInSeconds * 1000);\r\n                                return THIS.errorRecovery().then(function (errorRecovery) {\r\n\r\n                                    if (errorRecovery.response.success) {\r\n\r\n                                        THIS.hideProgressDialog(true);\r\n                                        var responseTransactionData = errorRecovery.response;\r\n                                        responseTransactionData.provider = 'linklyPaymentReaderProvider';\r\n\r\n                                        var prm = THIS.prm;\r\n\r\n                                        if (isPaymentReceiptOn == 7) {\r\n                                            if (errorRecovery.response.receipts.length > 0 && errorRecovery.response.receipts[0].receiptText != undefined && errorRecovery.response.receipts[0].receiptText != null) {\r\n                                                responseTransactionData.merchantReceipt = errorRecovery.response.receipts[0].receiptText.toString();\r\n                                                responseTransactionData.customerReceipt = errorRecovery.response.receipts[0].receiptText.toString();\r\n                                            } else {\r\n                                                prm = prm.then(function () {\r\n                                                    return THIS.getReprintReceipt().then(function (printReceipt) {\r\n                                                        if (printReceipt.response.printReceipt != undefined && printReceipt.response.printReceipt != null) {\r\n                                                            responseTransactionData.merchantReceipt = printReceipt.response.printReceipt.toString();\r\n                                                            responseTransactionData.customerReceipt = printReceipt.response.printReceipt.toString();\r\n                                                        }\r\n                                                    });\r\n                                                });\r\n                                            }\r\n                                        }\r\n\r\n                                        return prm.then(function () {\r\n\r\n                                            deferred.resolve({\r\n                                                result: true,\r\n                                                amount: refundSum,\r\n                                                ServerTransactionID: tempSessionId,\r\n                                                TransactionMetaData: responseTransactionData\r\n                                            });\r\n\r\n                                        });\r\n\r\n                                    }\r\n                                    else {\r\n\r\n                                        var errorText = THIS.getErrorText(errorRecovery.statusText);\r\n\r\n                                        THIS.hideProgressDialog(true);\r\n                                        deferred.reject({\r\n                                            result: false,\r\n                                            response: {\r\n                                                errorDescription: errorText\r\n                                            }\r\n                                        });\r\n\r\n                                    }\r\n\r\n                                }).catch((err) => {\r\n\r\n                                    var errorText = THIS.getErrorText(err.errorDescription);\r\n\r\n                                    THIS.hideProgressDialog(true);\r\n                                    deferred.reject({\r\n                                        result: false,\r\n                                        response: {\r\n                                            errorDescription: errorText\r\n                                        }\r\n                                    });\r\n\r\n                                });\r\n                            }\r\n\r\n                        })\r\n                        .catch((error) => {\r\n\r\n                            if (error.status == 401 && isTokenExpired == false) {\r\n\r\n                                THIS.storeLinklyData('token-expiry', Date.now());\r\n                                return THIS.refund(el, refundSum, options).then(function (res) {\r\n\r\n                                    deferred.resolve(res);\r\n\r\n                                }).catch((err) => {\r\n\r\n                                    var errorText = THIS.getErrorText(err.response.errorDescription);\r\n\r\n                                    deferred.reject({\r\n                                        result: false,\r\n                                        response: {\r\n                                            errorDescription: errorText\r\n                                        }\r\n                                    });\r\n\r\n                                });\r\n                            }\r\n                            else if (error.status == 408 || (error.status >= 500 && error.status <= 599)) {\r\n\r\n                                THIS.storeLinklyData('errorRecovery-expiry', Date.now() + THIS.errorRecoveryInSeconds * 1000);\r\n                                return THIS.errorRecovery().then(function (transactionData) {\r\n\r\n                                    THIS.hideProgressDialog(true);\r\n\r\n                                    var responseTransactionData = transactionData.response;\r\n                                    responseTransactionData.provider = 'linklyPaymentReaderProvider';\r\n\r\n                                    if (transactionData.response.status == 200) {\r\n\r\n                                        var prm = THIS.prm;\r\n\r\n                                        if (isPaymentReceiptOn == 7) {\r\n                                            if (transactionData.response.receipts.length > 0 && transactionData.response.receipts[0].receiptText != undefined && transactionData.response.receipts[0].receiptText != null) {\r\n                                                responseTransactionData.merchantReceipt = transactionData.response.receipts[0].receiptText.toString();\r\n                                                responseTransactionData.customerReceipt = transactionData.response.receipts[0].receiptText.toString();\r\n                                            } else {\r\n                                                prm = prm.then(function () {\r\n                                                    return THIS.getReprintReceipt().then(function (printReceipt) {\r\n                                                        if (printReceipt.response.printReceipt != undefined && printReceipt.response.printReceipt != null) {\r\n                                                            responseTransactionData.merchantReceipt = printReceipt.response.printReceipt.toString();\r\n                                                            responseTransactionData.customerReceipt = printReceipt.response.printReceipt.toString();\r\n                                                        }\r\n                                                    });\r\n                                                });\r\n                                            }\r\n                                        }\r\n\r\n                                        return prm.then(function () {\r\n\r\n                                            deferred.resolve({\r\n                                                result: true,\r\n                                                response: {\r\n                                                    ServerTransactionID: tempSessionId,\r\n                                                    TransactionMetaData: responseTransactionData\r\n                                                }\r\n                                            });\r\n                                        });\r\n\r\n                                    }\r\n                                    else {\r\n\r\n                                        var errorText = THIS.getErrorText(error.statusText);\r\n\r\n                                        deferred.reject({\r\n                                            result: false,\r\n                                            response: {\r\n                                                errorDescription: errorText\r\n                                            }\r\n                                        });\r\n\r\n                                    }\r\n\r\n                                }).catch((err) => {\r\n\r\n                                    var errorText = THIS.getErrorText(err.errorDescription);\r\n\r\n                                    THIS.hideProgressDialog(true);\r\n                                    deferred.reject({\r\n                                        result: false,\r\n                                        response: {\r\n                                            errorDescription: errorText\r\n                                        }\r\n                                    });\r\n\r\n                                });\r\n                            }\r\n                            else {\r\n\r\n                                var errorText = THIS.getErrorText(error.statusText);\r\n\r\n                                THIS.hideProgressDialog(true);\r\n                                deferred.reject({\r\n                                    result: false,\r\n                                    response: {\r\n                                        errorDescription: errorText == undefined ? error.response.errorDescription : errorText\r\n                                    }\r\n                                });\r\n\r\n                            }\r\n\r\n                        });\r\n\r\n                    return deferred.promise;\r\n                });\r\n\r\n            }\r\n\r\n            this.cancelCurrentTransaction = function () {\r\n\r\n                var d0 = $q.defer();\r\n                var THIS = this;\r\n                var isTokenExpired = false;\r\n\r\n                var secret = THIS.retrieveLinklyData('secret');\r\n                var token = THIS.retrieveLinklyData('token');\r\n                var pr = THIS.prm;\r\n\r\n                if (secret) {\r\n\r\n                    var tokenExpiry = THIS.retrieveLinklyData('token-expiry');\r\n\r\n                    if (!token || tokenExpiry <= Date.now()) {\r\n\r\n                        isTokenExpired = true;\r\n                        pr = pr.then(function () {\r\n                            return THIS.getToken().then(function () {\r\n                                token = THIS.retrieveLinklyData('token');\r\n                            });\r\n                        });\r\n                    }\r\n                }\r\n                else {\r\n                    d0.reject({\r\n                        message: gettextCatalog.getString(\"Terminal has been disconnected from Cin7 Core POS.\")\r\n                    });\r\n                    return d0.promise;\r\n                }\r\n\r\n                THIS.customModalDlg2Text2 = '';\r\n                THIS.customModalDlg2Text = gettextCatalog.getString(\"Cancelling transaction...\");\r\n\r\n                return pr.then(function () {\r\n\r\n                    linklyCloudPaymentUrl = configService.isQAMode ?\r\n                        \"https://rest.pos.sandbox.cloud.pceftpos.com/v1/sessions/\" : // debug aims only !!!\r\n                        \"https://rest.pos.cloud.pceftpos.com/v1/sessions/\";\r\n\r\n                    d0.resolve(null);\r\n\r\n                    var printPromise = d0.promise;\r\n\r\n                    var deferred = $q.defer();\r\n\r\n                    var requestType = \"/sendkey?async=false\";\r\n\r\n                    var tempSessionId = THIS.retrieveLinklyData('tempSessionId');\r\n\r\n                    webOnlyProvider.linklyCloudCancelCurrentTransaction(linklyCloudPaymentUrl, tempSessionId, token, requestType)\r\n                        .then((transactionData) => {\r\n\r\n                            if (transactionData.status = 200) {\r\n\r\n                                deferred.resolve({\r\n                                    result: true,\r\n                                    response: {\r\n                                        TransactionMetaData: transactionData\r\n                                    }\r\n                                });\r\n\r\n                            }\r\n                            else {\r\n\r\n                                var responseText = THIS.getErrorText(transactionData.data.response.responseText);\r\n\r\n                                var res = {\r\n                                    result: false,\r\n                                    response: {\r\n                                        errorDescription: responseText\r\n                                    }\r\n                                };\r\n\r\n                                deferred.reject(res);\r\n\r\n                            }\r\n\r\n                        })\r\n                        .catch((error) => {\r\n\r\n                            if (error.status == 401 && isTokenExpired == false) {\r\n\r\n                                THIS.storeLinklyData('token-expiry', Date.now());\r\n                                return THIS.cancelCurrentTransaction().then(function (res) {\r\n\r\n                                    deferred.resolve(res);\r\n\r\n                                }).catch((err) => {\r\n\r\n                                    var errorText = THIS.getErrorText(err.response.errorDescription);\r\n\r\n                                    deferred.reject({\r\n                                        result: false,\r\n                                        response: {\r\n                                            errorDescription: errorText\r\n                                        }\r\n                                    });\r\n\r\n                                });\r\n                            }\r\n                            else {\r\n\r\n                                var errorText = THIS.getErrorText(error.statusText);\r\n\r\n                                deferred.reject({\r\n                                    result: false,\r\n                                    response: {\r\n                                        errorDescription: errorText\r\n                                    }\r\n                                });\r\n                            }\r\n\r\n                        });\r\n\r\n                    return deferred.promise;\r\n                });\r\n\r\n            };\r\n\r\n            this.errorRecovery = function () {\r\n\r\n                var THIS = this;\r\n                var isTokenExpired = false;\r\n                var deferred = $q.defer();\r\n                linklyCloudPaymentUrl = configService.isQAMode ?\r\n                    \"https://rest.pos.sandbox.cloud.pceftpos.com/v1/sessions/\" : // debug aims only !!!\r\n                    \"https://rest.pos.cloud.pceftpos.com/v1/sessions/\";\r\n\r\n                var tempSessionId = THIS.retrieveLinklyData('tempSessionId');\r\n                var requestType = \"/transaction?async=false\";\r\n\r\n                var secret = THIS.retrieveLinklyData('secret');\r\n                var token = THIS.retrieveLinklyData('token');\r\n                var pr = THIS.prm;\r\n                const d0 = $q.defer();\r\n\r\n                if (secret) {\r\n\r\n                    var tokenExpiry = THIS.retrieveLinklyData('token-expiry');\r\n\r\n                    if (!token || tokenExpiry <= Date.now()) {\r\n\r\n                        isTokenExpired = true;\r\n                        pr = pr.then(function () {\r\n                            return THIS.getToken().then(function () {\r\n                                token = THIS.retrieveLinklyData('token');\r\n                            });\r\n                        });\r\n                    }\r\n                }\r\n                else {\r\n                    var errorMessage = this.isRequestFromPurchase ? \"Terminal has been disconnected from Cin7 Core POS.\" : \"Terminal has been disconnected from Cin7 Core POS. Please connect it again and perform a transaction.\";\r\n                    d0.reject({\r\n                        message: gettextCatalog.getString(errorMessage)\r\n                    });\r\n                    return d0.promise;\r\n                }\r\n\r\n                return pr.then(function () {\r\n\r\n                    var errorRecoveryexpiry = THIS.retrieveLinklyData('errorRecovery-expiry');\r\n\r\n                    webOnlyProvider.linklyCloudTransactionStatus(linklyCloudPaymentUrl, tempSessionId, token, requestType)\r\n                        .then((transaction) => {\r\n\r\n                            if (transaction.data.response.success) {\r\n                                deferred.resolve({\r\n                                    response: transaction.data.response\r\n                                });\r\n                            }\r\n                            else if (transaction.status == 200 || transaction.status == 400 || transaction.status == 404) {\r\n\r\n                                var responseText = THIS.getErrorText(transaction.data.response.responseText);\r\n\r\n                                deferred.reject({\r\n                                    result: false,\r\n                                    errorDescription: responseText\r\n                                });\r\n                            }\r\n                            else if (errorRecoveryexpiry > Date.now()) {\r\n\r\n                                return THIS.errorRecovery().then(function (tran) {\r\n\r\n                                    deferred.resolve({\r\n                                        response: tran.data.response\r\n                                    });\r\n\r\n                                })\r\n                            }\r\n                            else {\r\n\r\n                                var responseText = THIS.getErrorText(transaction.data.response.responseText);\r\n\r\n                                deferred.reject({\r\n                                    result: false,\r\n                                    errorDescription: responseText\r\n                                });\r\n\r\n                            }\r\n\r\n                        })\r\n                        .catch((error) => {\r\n\r\n                            if (error.status == 200 || error.status == 400 || error.status == 404) {\r\n\r\n                                var statusText = THIS.getErrorText(error.statusText);\r\n\r\n                                deferred.reject({\r\n                                    result: false,\r\n                                    errorDescription: error.statusText == undefined ? error.errorDescription : statusText\r\n                                });\r\n\r\n                            }\r\n                            else if (error.status == 401 && isTokenExpired == false) {\r\n\r\n                                THIS.storeLinklyData('token-expiry', Date.now());\r\n                                return THIS.errorRecovery().then(function (tran) {\r\n\r\n                                    deferred.resolve({\r\n                                        response: tran.data.response\r\n                                    });\r\n\r\n                                }).catch((err) => {\r\n\r\n                                    var errorText = THIS.getErrorText(err.errorDescription);\r\n\r\n                                    deferred.reject({\r\n                                        result: false,\r\n                                        errorDescription: errorText\r\n                                    });\r\n\r\n                                });\r\n                            }\r\n                            else if (errorRecoveryexpiry >= Date.now()) {\r\n\r\n                                return THIS.errorRecovery().then(function (tran) {\r\n\r\n                                    deferred.resolve({\r\n                                        response: tran.data.response\r\n                                    });\r\n\r\n                                }).catch((error) => {\r\n\r\n                                    var errorText = THIS.getErrorText(error.errorDescription);\r\n\r\n                                    deferred.reject({\r\n                                        result: false,\r\n                                        errorDescription: errorText\r\n                                    });\r\n\r\n                                });\r\n                            }\r\n                            else {\r\n                                var statusText = THIS.getErrorText(error.statusText);\r\n\r\n                                deferred.reject({\r\n                                    result: false,\r\n                                    errorDescription: error.statusText == undefined ? error.errorDescription : statusText\r\n                                });\r\n                            }\r\n\r\n                        });\r\n                    return deferred.promise;\r\n                })\r\n            };\r\n\r\n            this.getReprintReceipt = function () {\r\n\r\n                var THIS = this;\r\n                var deferred = $q.defer();\r\n                linklyCloudPaymentUrl = configService.isQAMode ?\r\n                    \"https://rest.pos.sandbox.cloud.pceftpos.com/v1/sessions/\" : // debug aims only !!!\r\n                    \"https://rest.pos.cloud.pceftpos.com/v1/sessions/\";\r\n\r\n                var secret = this.retrieveLinklyData('secret');\r\n                var token = this.retrieveLinklyData('token');\r\n                var pr = helperService.resolvePromise(true);\r\n\r\n                if (secret) {\r\n\r\n                    var tokenExpiry = this.retrieveLinklyData('token-expiry');\r\n\r\n                    if (!token || tokenExpiry <= Date.now()) {\r\n\r\n                        pr = pr.then(function () {\r\n                            return THIS.getToken().then(function () {\r\n                                token = THIS.retrieveLinklyData('token');\r\n                            });\r\n                        });\r\n                    }\r\n                }\r\n                else {\r\n                    const d0 = $q.defer();\r\n                    var errorMessage = this.isRequestFromPurchase ? \"Terminal has been disconnected from Cin7 Core POS.\" : \"Terminal has been disconnected from Cin7 Core POS. Please connect it again and perform a transaction.\";\r\n                    d0.reject({\r\n                        message: gettextCatalog.getString(errorMessage)\r\n                    });\r\n                    return d0.promise;\r\n                }\r\n\r\n                let tempSessionId = uuid2.newguid();\r\n                var requestType = \"/reprintreceipt?async=false\";\r\n\r\n                var settings = configService.getCardPaymentSettings();\r\n                var isPaymentReceiptOn = settings.printLinklyPaymentReceiptOnTerminal !== true ? 7 : 0;\r\n                var isCutReceiptOn = settings.receiptsLinklyPaymentReceiptOnTerminal !== true ? 0 : 1;\r\n\r\n                return pr.then(function () {\r\n\r\n                    webOnlyProvider.linklyCloudReprintReceipt(linklyCloudPaymentUrl, tempSessionId, token, requestType, isCutReceiptOn, isPaymentReceiptOn)\r\n                        .then((response) => {\r\n\r\n                            deferred.resolve({\r\n                                result: true,\r\n                                response: {\r\n                                    printReceipt: response.data.response.receiptText\r\n                                }\r\n\r\n                            });\r\n\r\n                        })\r\n                        .catch((error) => {\r\n                            var statusText = THIS.getErrorText(error.statusText);\r\n\r\n                            deferred.reject({\r\n                                result: false,\r\n                                response: {\r\n                                    errorDescription: statusText\r\n                                }\r\n\r\n                            });\r\n\r\n                        });\r\n                    return deferred.promise;\r\n                })\r\n            };\r\n\r\n            this.startPolling = function () {\r\n\r\n                this.isRequestFromPurchase = false;\r\n                var THIS = this;\r\n\r\n                if (!THIS.polling) {\r\n                    THIS.polling = $interval(function () {\r\n\r\n                        linklyCloudPaymentUrl = configService.isQAMode ?\r\n                            \"https://rest.pos.sandbox.cloud.pceftpos.com/v1/sessions/\" : // debug aims only !!!\r\n                            \"https://rest.pos.cloud.pceftpos.com/v1/sessions/\";\r\n\r\n                        var secret = THIS.retrieveLinklyData('secret');\r\n                        var token = THIS.retrieveLinklyData('token');\r\n                        var pr = THIS.prm;\r\n\r\n                        if (secret) {\r\n\r\n                            var tokenExpiry = THIS.retrieveLinklyData('token-expiry');\r\n\r\n                            if (!token || tokenExpiry <= Date.now()) {\r\n\r\n                                pr = pr.then(function () {\r\n                                    return THIS.getToken().then(function () {\r\n                                        token = THIS.retrieveLinklyData('token');\r\n                                    });\r\n                                });\r\n                            }\r\n                        }\r\n                        else {\r\n                            var errorMSG = gettextCatalog.getString('Terminal has been disconnected from Cin7 Core POS. Please connect it again and perform a transaction.');\r\n\r\n                            THIS.stopPolling(errorMSG);\r\n                            return;\r\n                        }\r\n\r\n                        return pr.then(function () {\r\n\r\n                            webOnlyProvider.linklyCloudTerminalStatus(linklyCloudPaymentUrl, uuid2.newguid(), token)\r\n                                .then((response) => {\r\n\r\n                                    var responseText = THIS.getErrorText(response.data.response.responseText);\r\n\r\n                                    if (responseText === 'PIN PAD IS OFFLINE.')\r\n                                        THIS.stopPolling(responseText);\r\n\r\n                                }).catch((error) => {\r\n                                    var errorMSG = THIS.getErrorText(error.statusText);\r\n\r\n                                    THIS.stopPolling(errorMSG);\r\n\r\n                                });\r\n                        })\r\n\r\n                    }, THIS.pollingIntervalInSeconds * 1000);\r\n                }\r\n            };\r\n\r\n            this.stopPolling = function (errorMSG) {\r\n\r\n                if (this.polling) {\r\n                    try {\r\n                        $interval.cancel(this.polling);\r\n                        this.polling = null;\r\n\r\n                        if (!!errorMSG)\r\n                            helperService.showErrorDialog({ title: 'Error', body: errorMSG });\r\n                    }\r\n                    catch (e) {\r\n                    }\r\n\r\n                }\r\n\r\n            };\r\n\r\n            this.storeLinklyData = function (key, data) {\r\n\r\n                window.localStorage.setItem(key, JSON.stringify(data));\r\n\r\n            };\r\n\r\n            this.retrieveLinklyData = function (key) {\r\n\r\n                let data = window.localStorage.getItem(key);\r\n                if (data) {\r\n                    return JSON.parse(data);\r\n                }\r\n                else\r\n                    return null;\r\n\r\n            };\r\n\r\n            this.removeLinklyData = function (key) {\r\n\r\n                window.localStorage.removeItem(key);\r\n\r\n            };\r\n\r\n            this.getErrorText = function (errorText) {\r\n\r\n                errorText = (errorText != undefined && errorText != null) ? errorText.trim() : errorText;\r\n\r\n                switch (errorText) {\r\n                    case 'OPERATOR CANCELLED':\r\n                        errorText = 'Transaction is CANCELLED BY THE OPERATOR.'\r\n                        break;\r\n                    case 'OPERATOR TIMEOUT':\r\n                        errorText = 'TIMEOUT.'\r\n                        break;\r\n                    case 'PINpad Busy':\r\n                        errorText = 'PIN PAD IS NOT RESPONDING.'\r\n                        break;\r\n                    case 'PINpad Offline':\r\n                        errorText = 'PIN PAD IS OFFLINE.'\r\n                        break;\r\n                    case 'Not Found':\r\n                        errorText = 'TRANSACTION IS NOT FOUND.'\r\n                        break;\r\n                    case 'Bad Request':\r\n                        errorText = this.isRequestFromPurchase ? 'Terminal has been disconnected from Cin7 Core POS.' : 'Terminal has been disconnected from Cin7 Core POS. Please connect it again and perform a transaction.'\r\n                        break;\r\n                    case 'Service Unavailable':\r\n                        errorText = 'Terminal is not answering. Please verify the terminal is on and connected to Cin7 Core POS.'\r\n                        break;\r\n                    case 'Unauthorized':\r\n                        errorText = this.isRequestFromPurchase ? 'An error occured when pairing. Please re-pair the terminal on the Payment Setup page.' : 'Please re-pair the terminal on the Payment Setup page.'\r\n                        break;\r\n                }\r\n\r\n                return gettextCatalog.getString(errorText);\r\n\r\n            };\r\n\r\n        }\r\n\r\n    ]);","angular.module('services').factory('liveSearchService', ['$q', 'configService', 'filterService',\r\n    function ($q, configService, filterService) {\r\n        var liveSearchService = {};\r\n\r\n        // products for live search\r\n        liveSearchService.data = [];\r\n\r\n        // customers for live search\r\n        liveSearchService.customersData = [];\r\n        liveSearchService.customerDataLoaded = false;\r\n\r\n        // taking products full data list extract only live search info\r\n        liveSearchService.fillData = function (products) {\r\n            var deferred = $q.defer();\r\n            liveSearchService.data = [];\r\n            console.time('fillData');\r\n            //  console.log('start fill live search data:');\r\n            angular.forEach(products, function (p) {\r\n                if (!p.isFamily) {\r\n                    liveSearchService.data.push({\r\n                        name: p.name.toLowerCase(),\r\n                        id: p.productID,\r\n                        sku: p.productCode.toLowerCase(),\r\n                        price: p.price\r\n                    });\r\n                }\r\n            });\r\n            console.timeEnd('fillData');\r\n\r\n            console.time('fillData: sort');\r\n            liveSearchService.data.sort(function (a, b) {\r\n                /*\r\n                var a1 = a.sku + ': ' + a.name;\r\n                var b1 = b.sku + ': ' + b.name;\r\n                */\r\n\r\n                if (a.name < b.name) return -1;\r\n                if (a.name > b.name) return 1;\r\n                return 0;\r\n            });\r\n\r\n            console.timeEnd('fillData: sort');\r\n            //    console.log('end fill live search data:');\r\n            //    console.timeEnd('fillData');\r\n            deferred.resolve(true);\r\n            return deferred.promise;\r\n        };\r\n\r\n        // filter function that search and return suggestions\r\n        liveSearchService.filterData = function (text, limit) {\r\n            if (!text || text.length == 0)\r\n                return liveSearchService.data;\r\n\r\n            if (!limit) limit = 100;\r\n\r\n            //            console.time('filterData');\r\n            //            console.log('start live search:');\r\n\r\n            text = text.toLowerCase();\r\n            var counter = 0;\r\n            var fd = [];\r\n\r\n            // extended search like in Cin7 Core\r\n            var searchArr = filterService.splitSearchText(text);\r\n\r\n            for (var i = 0; i < liveSearchService.data.length; i++) {\r\n                var el = liveSearchService.data[i];\r\n\r\n                if (counter >= limit)\r\n                    break;\r\n\r\n                //                var cmp = counter < limit && (el.name.indexOf(text) >= 0 ||\r\n                //                    el.sku.indexOf(text) >= 0);\r\n                // extended search\r\n                var cmp = counter < limit &&\r\n                    (filterService.isStringContainsSearchArray(el.name, searchArr) ||\r\n                        filterService.isStringContainsSearchArray(el.sku, searchArr));\r\n\r\n\r\n                if (cmp === true) {\r\n                    counter++;\r\n                    fd.push(el);\r\n                }\r\n            }\r\n\r\n            // console.log('end live search:' + console.timeEnd('filterData'));\r\n            return fd;\r\n        };\r\n\r\n        liveSearchService.mapOnlineCustomer = function (p) {\r\n            const contact = p.Contacts.length > 0 ? p.Contacts[0] : null;\r\n            const el = {\r\n                name: !!p.Name ? p.Name.toLowerCase() : '',\r\n                id: p.ID,\r\n                email: contact && !!contact.Email ? contact.Email.toLowerCase() : '',\r\n                phone: contact && !!contact.Phone ? contact.Phone : '',\r\n                mobile: contact && !!contact.MobilePhone ? contact.MobilePhone : '',\r\n                addresses: !!p.Addresses ? p.Addresses.map(a => {\r\n                    return {\r\n                        city: !!a.City ? a.City.toLowerCase() : '',\r\n                        postcode: a.Postcode\r\n                    };\r\n                }) : [],\r\n                ruleID: p.TaxRuleID,\r\n                effectivePercentInclusive: p.EffectivePercentInclusive,\r\n                effectivePercentExclusive: p.EffectivePercentExclusive\r\n            };\r\n            el.firstLine = el.name;\r\n            if (!!el.mobile)\r\n                el.firstLine += ', ' + el.mobile;\r\n            if (!!el.phone)\r\n                el.firstLine += ', ' + el.phone;\r\n            if (!!el.email)\r\n                el.firstLine += ', ' + el.email;\r\n\r\n            return el;\r\n        };\r\n\r\n        liveSearchService.mapOnlineCustomers = function (customers, searchText) {\r\n            var result = [];\r\n            angular.forEach(customers, function (customer) {               \r\n                if (!customer.Contacts.length)                   \r\n                    result.push(liveSearchService.mapOnlineCustomer(customer));\r\n                else {\r\n                    angular.forEach(customer.Contacts, function (contact) {\r\n                        let tempCustomer = customer;\r\n                        tempCustomer.Contacts[0] = contact;\r\n                        const onlineCustomer = liveSearchService.mapOnlineCustomer(tempCustomer);\r\n                        const address = !!onlineCustomer.addresses ? onlineCustomer.addresses.map(a => {\r\n                            const city = !!a.city ? a.city.toLowerCase() : '';\r\n                            const postcode = !!a.postcode ? a.postcode.toLowerCase() : '';\r\n                            return `${city} ${postcode}`\r\n                        }).join(' ') : '';\r\n                        if ((onlineCustomer.firstLine && onlineCustomer.firstLine.indexOf(searchText) != -1) ||\r\n                            (address.indexOf(searchText) != -1))\r\n                                result.push(onlineCustomer);\r\n                    });\r\n                }\r\n            });\r\n            return result;\r\n        };\r\n\r\n        liveSearchService.mapCustomer = function (p) {\r\n            return {\r\n                name: !!p.name ? p.name.toLowerCase() : '',\r\n                id: p.id,\r\n                email: !!p.email ? p.email.toLowerCase() : '',\r\n                phone: !!p.phone ? p.phone : '',\r\n                mobile: !!p.mobilePhone ? p.mobilePhone : '',\r\n                addresses: !!p.addresses ? p.addresses.map(a => {\r\n                    return {\r\n                        city: !!a.city ? a.city.toLowerCase() : '',\r\n                        postcode: a.postcode\r\n                    };\r\n                }) : [],\r\n                ruleID: p.ruleID,\r\n                effectivePercentInclusive: p.effectivePercentInclusive,\r\n                effectivePercentExclusive: p.effectivePercentExclusive\r\n            };\r\n        };\r\n\r\n\r\n        // taking customers full data list and extract only live search info\r\n        liveSearchService.fillCustomersData = function (customers, isPartial = false) {\r\n            var deferred = $q.defer();\r\n            if (!isPartial) {\r\n                liveSearchService.customersData = Array.from({ length: customers.length });\r\n                console.time('fillCustomerData');\r\n                // console.log('start fill live search data:');\r\n\r\n                angular.forEach(customers, function (p, i) {\r\n                    liveSearchService.customersData[i] = liveSearchService.mapCustomer(p);\r\n                });\r\n                console.timeEnd('fillCustomerData');\r\n\r\n                console.time('fillCustomerData: sort');\r\n                liveSearchService.customersData.sort(function (a, b) {\r\n                    var a1 = a.name;\r\n                    var b1 = b.name;\r\n\r\n                    if (a1 < b1) return -1;\r\n                    if (a1 > b1) return 1;\r\n                    return 0;\r\n                });\r\n                console.timeEnd('fillCustomerData: sort');\r\n\r\n                this.customerDataLoaded = true;\r\n            } else {\r\n                angular.forEach(customers, function (p, i) {\r\n                    var index = liveSearchService.customersData.findIndex(x => x.id == p.id);\r\n                    if (index !== -1) {\r\n                        liveSearchService.customersData[index] = liveSearchService.mapCustomer(p);\r\n                    } else {\r\n                        liveSearchService.customersData.push(liveSearchService.mapCustomer(p))\r\n                    }\r\n\r\n                });\r\n            }\r\n\r\n            deferred.resolve(true);\r\n            return deferred.promise;\r\n        };\r\n\r\n        // filter customer data\r\n        liveSearchService.filterCustomerData = function (text, limit = 10) {\r\n            if (!this.customerDataLoaded)\r\n                return null;\r\n            if (!text || text.length === 0)\r\n                return liveSearchService.customersData;\r\n\r\n            text = text.toLowerCase();\r\n            var counter = 0;\r\n            var fd = [];\r\n\r\n            for (var i = 0; i < liveSearchService.customersData.length; i++) {\r\n                var el = liveSearchService.customersData[i];\r\n\r\n                if (counter >= limit)\r\n                    break;\r\n\r\n                var cmp = counter < limit &&\r\n                    (el.name.indexOf(text) >= 0 ||\r\n                        (!!el.email && el.email.indexOf(text) >= 0) ||\r\n                        (!!el.phone && el.phone.indexOf(text) >= 0) ||\r\n                        (!!el.mobile && el.mobile.indexOf(text) >= 0));\r\n\r\n                if (!cmp) {\r\n                    angular.forEach(el.addresses, function (adr) {\r\n                        if (!cmp && (\r\n                            (!!adr.city && adr.city.indexOf(text) >= 0) ||\r\n                            (!!adr.postcode && adr.postcode.indexOf(text) >= 0)))\r\n                            cmp = true;\r\n                    });\r\n                }\r\n\r\n                if (cmp == true) {\r\n                    counter++;\r\n\r\n                    el.firstLine = el.name;\r\n                    if (!!el.mobile)\r\n                        el.firstLine += ', ' + el.mobile;\r\n                    if (!!el.phone)\r\n                        el.firstLine += ', ' + el.phone;\r\n                    if (!!el.email)\r\n                        el.firstLine += ', ' + el.email;\r\n\r\n                    fd.push(el);\r\n                }\r\n            }\r\n\r\n            return fd;\r\n        };\r\n\r\n        // this function will find very close strings that differ in nonvisible part\r\n        // and convert visual presentation to show differences\r\n        liveSearchService.canvas = null;\r\n        liveSearchService.context = null;\r\n        liveSearchService.longNameProcess = function (arr, sel) {\r\n            if (arr) {\r\n                arr = arr.sort(function (a, b) {\r\n                    if (a < b) return -1;\r\n                    if (a > b) return 1;\r\n                    return 0;\r\n                });\r\n            }\r\n\r\n            if (!liveSearchService.canvas) {\r\n                var lst = $(sel);\r\n\r\n                if (lst.length > 0) {\r\n                    liveSearchService.canvas = document.createElement(\"canvas\");\r\n                    liveSearchService.context = liveSearchService.canvas.getContext(\"2d\");\r\n                    var ff = lst.css('font-family');\r\n                    var fs = lst.css('font-size');\r\n                    var fw = lst.css('font-weight');\r\n                    liveSearchService.context.font = 'normal ' + fw + ' ' + fs + ' ' + ff;\r\n                }\r\n            }\r\n\r\n            if (liveSearchService.canvas && arr && arr.length > 0) {\r\n                angular.forEach(arr, function (el) {\r\n                    width = liveSearchService.context.measureText(el.name).width;\r\n                });\r\n            }\r\n        };\r\n\r\n        // return service object\r\n        return liveSearchService;\r\n    }\r\n]);","import sjcl from 'sjcl';\r\n\r\nangular.module('services').service('localDBProvider', [\r\n    'configService', 'errorService', '$q', 'helperService', 'constants', 'gettextCatalog', 'orderByFilter',\r\n    'dbUpdatesService', 'filterService',\r\n    function (configService, errorService, $q, helperService, constants, gettextCatalog, orderBy,\r\n        dbUpdatesService, filterService) {\r\n\r\n        this.db = null;\r\n\r\n        this.init = function (callback) {\r\n            if (!window.cordova) {\r\n                callback();\r\n                return;\r\n            }\r\n\r\n            if (!configService.isEmulator) {\r\n                var THIS = this;\r\n                const args = { name: 'crddb.db', location: 'default' };\r\n                if (device && device.platform === 'Android') {\r\n                    const version = Number.parseInt(device.version);\r\n                    if (version && version != NaN && version >= 11) {\r\n                        args.androidDatabaseProvider = 'system';\r\n                    }\r\n                }\r\n                this.db = window.sqlitePlugin.openDatabase(args, function (db) {\r\n                    console.log('db created');\r\n                    THIS.createDBSchema(callback);\r\n                }, function (err) {\r\n                    console.log('db error open database: ' + err.message);\r\n                    console.log(JSON.stringify(err));\r\n                    callback(err);\r\n                });\r\n            }\r\n            else {\r\n                this.db = window.openDatabase('crddb.db', '', 'crddb.db', 10000000);\r\n                console.log('db created');\r\n                this.createDBSchema(callback);\r\n            }\r\n        };\r\n\r\n        // internal use\r\n        this.createDBSchema = function (callback) {\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('SELECT name FROM sqlite_master WHERE type = \"table\" AND name = \"versions\"', [],\r\n                    function (tx, resultSet) {\r\n                        if (resultSet.rows.length === 0) {\r\n                            $.each(dbUpdatesService.initialDBCreationScript(), function (idx, s) {\r\n                                tx.executeSql(s);\r\n                            });\r\n                            console.log('base tables are created');\r\n                        }\r\n\r\n                        tx.executeSql('select Version from versions order by Version desc LIMIT 1', [], function (tx, results) {\r\n                            var ver = results.rows.item(0).Version;\r\n                            dbUpdatesService.appplyUpdates(ver, tx);\r\n                        });\r\n\r\n                    });\r\n\r\n                if (!configService.isEmulator) {\r\n                    console.log('set pragmas');\r\n                    tx.executeSql('PRAGMA journal_mode = MEMORY; PRAGMA LOCKING_MODE = EXCLUSIVE; PRAGMA TEMP_STORE = MEMORY;');\r\n                }\r\n\r\n            }, function (err) {\r\n                callback();\r\n                console.log(err);\r\n                errorService.showError(err.message);\r\n            }, function () {\r\n                callback();\r\n            });\r\n\r\n            this.db.__proto__.executeChunk = function (chunckSize, arr, func) {\r\n                const dbTHIS = this;\r\n                return ext.helperService.promiseWhile(0, i => i < arr.length, function (c) {\r\n                    return new Promise(function (resolve, reject) {\r\n                        const upperChunckBound = c + chunckSize;\r\n                        dbTHIS.transaction(function (tx) {\r\n                            for (let i = c; i < arr.length && i < upperChunckBound; i++) {\r\n                                const el = arr[i];\r\n                                func(tx, el);\r\n                            }\r\n                            c = upperChunckBound;\r\n                            resolve(c);\r\n                        }, function (err) {\r\n                            reject(err);\r\n                        });\r\n                    });\r\n                });\r\n            };\r\n\r\n\r\n            this.db.__proto__.executeChunkBatch = function (chunckSize, batchStmnts) {\r\n                const dbTHIS = this;\r\n                return ext.helperService.promiseWhile(0, i => i < batchStmnts.length, function (c) {\r\n                    return new Promise(function (resolve, reject) {\r\n                        const upperChunckBound = c + chunckSize;\r\n                        dbTHIS.sqlBatch(batchStmnts.slice(c, upperChunckBound), function (tx) {\r\n                            c = upperChunckBound;\r\n                            resolve(c);\r\n                        }, function (err) {\r\n                            reject(err);\r\n                            console.log(JSON.stringify(err));\r\n                        });\r\n                    });\r\n                });\r\n            };\r\n\r\n        };\r\n\r\n        this.pinLogin = function (dearPosName, pin, pinToken) {\r\n            var deferred = $q.defer();\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"SELECT PinToken, Info from logins where PosName=? and PinToken=?\", [dearPosName, pinToken], function (tx, resultSet) {\r\n                    var rec = resultSet.rows;\r\n                    var isErr = false;\r\n                    if (rec.length === 0) {\r\n                        isErr = true;\r\n                    }\r\n                    else {\r\n                        var matchedUsers = [];\r\n\r\n                        for (var i = 0; i < rec.length; i++) {\r\n                            try {\r\n                                sjcl.decrypt(pin, rec.item(i).PinToken); // check pin\r\n                                var data = JSON.parse(rec.item(i).Info);\r\n\r\n                                delete data.Password;\r\n                                delete data.PosName;\r\n                                matchedUsers.push(data);\r\n                            }\r\n                            catch (ex) {\r\n                                //                                isErr = true;\r\n                            }\r\n                        }\r\n\r\n                        if (matchedUsers.length == 0)\r\n                            isErr = true;\r\n                        else if (matchedUsers.length === 1) {\r\n                            matchedUsers[0].MatchedLoginsCount = 1;\r\n                            deferred.resolve({ data: matchedUsers[0] });\r\n                        } else { // if we have more than 1 \r\n                            var lastUser = matchedUsers.filter(function (l) {\r\n                                return helperService.compareStrings(l.UserName, configService.lastUserName);\r\n                            });\r\n\r\n                            if (lastUser.length > 0) {\r\n                                lastUser[0].MatchedLoginsCount = rec.length;\r\n                                deferred.resolve({ data: lastUser[0] });\r\n                            } else {\r\n                                matchedUsers[0].MatchedLoginsCount = rec.length;\r\n                                deferred.resolve({ data: matchedUsers[0] });\r\n                            }\r\n                        }\r\n\r\n                    }\r\n\r\n                    if (isErr) {\r\n                        deferred.reject(\r\n                            gettextCatalog.getString(\"PIN code is incorrect.\" +\r\n                                (!configService.isOnline ? gettextCatalog.getString(\"Connect to the network and try again.\") : '')));\r\n                    }\r\n\r\n                });\r\n            }, function (err) {\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.login = function (dearPosName, userName, password, pin, pinToken, _, __, savedData) {\r\n            if (!!pinToken && !!pin)\r\n                return this.pinLogin(dearPosName, pin, pinToken);\r\n\r\n            var deferred = $q.defer();\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"SELECT Token, Info from logins where PosName=? and UserName=?\", [dearPosName, userName], function (tx, resultSet) {\r\n                    var rec = resultSet.rows;\r\n                    var isErr = false;\r\n                    if (rec.length === 0) {\r\n                        isErr = true;\r\n                    }\r\n                    else if (savedData) {\r\n                        if (!!rec.item(0).Info) {\r\n                            const data = JSON.parse(rec.item(0).Info);\r\n                            delete data.Password;\r\n                            delete data.PosName;\r\n\r\n                            deferred.resolve({ data: data });\r\n                        }\r\n                        else {\r\n                            deferred.reject(gettextCatalog.getString('Connect to the network and try again.'));\r\n                        }\r\n                    }\r\n                    else {\r\n                        try {\r\n                            var data = JSON.parse(sjcl.decrypt(password, rec.item(0).Token));\r\n\r\n                            if (!!rec.item(0).Info)\r\n                                data = JSON.parse(rec.item(0).Info);\r\n\r\n                            delete data.Password;\r\n                            delete data.PosName;\r\n\r\n                            deferred.resolve({ data: data });\r\n                        }\r\n                        catch (ex) {\r\n                            isErr = true;\r\n                        }\r\n                    }\r\n\r\n                    if (isErr)\r\n                        deferred.reject(gettextCatalog.getString(\"The username/password combination is incorrect or you have exceeded the number of allowed login attempts. Please try to recover the password using the 'Forgot your password' link.\") + (!configService.isOnline ? gettextCatalog.getString(\"Connect to the network and try again.\") : ''));\r\n\r\n                });\r\n            }, function (err) {\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        // encrypt and save login info\r\n        this.saveLogin = function (data) {\r\n            var password = data.Password;\r\n            var pinToken = data.PinToken;\r\n            delete data.PinToken;\r\n            delete data.Password;\r\n            var ciphertext = sjcl.encrypt(password, JSON.stringify(data));\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('INSERT OR REPLACE INTO logins(PosName,UserName,Token,PinToken, Info, lastModified) VALUES (?,?,?,?,?,datetime())',\r\n                    [data.PosName, data.UserName, ciphertext, pinToken, JSON.stringify(data)]);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            }, function () {\r\n                deferred.resolve(data);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.savePin = function (pinToken) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('update logins set PinToken=?, lastModified=datetime() where PosName=? and UserName=?',\r\n                    [pinToken, configService.posName, configService.userName]);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            }, function () {\r\n                deferred.resolve(true);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.saveUserOutlets = function (data) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('delete from outlets where PosName=? and UserID=?', [configService.lastDearPosName, configService.loginUserID],\r\n                    function (tx, results) {\r\n                        $.each(data.Outlets, function (idx, el) {\r\n\r\n                            var packed = JSON.stringify(el);\r\n                            tx.executeSql('INSERT INTO outlets(PosName,UserID,OutletName,OutletID,Packed,lastModified, Taxes) VALUES (?,?,?,?,?,datetime(),?)',\r\n                                [configService.lastDearPosName, configService.loginUserID, el.OutletName, el.PosOutletID, packed, JSON.stringify(el.tax)]);\r\n                        });\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            }, function () {\r\n                deferred.resolve(data);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getUserPosOutletsRegistry = function (userID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"SELECT Packed from outlets where PosName=? and UserID=?\", [configService.lastDearPosName, userID],\r\n                    function (tx, resultSet) {\r\n                        var arr = [];\r\n                        $.each(helperService.dbRawsToArray(resultSet.rows), function (idx, el) {\r\n                            arr.push(JSON.parse(el.Packed));\r\n                        });\r\n\r\n                        deferred.resolve({ Outlets: arr });\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getPosOutlet = function (posOutletID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"SELECT Packed from outlets where PosName=? and OutletID=? and UserID=?\",\r\n                    [configService.lastDearPosName, posOutletID, configService.loginUserID],\r\n                    function (tx, resultSet) {\r\n                        var arr = [];\r\n                        $.each(helperService.dbRawsToArray(resultSet.rows), function (idx, el) {\r\n                            arr.push(JSON.parse(el.Packed));\r\n                        });\r\n\r\n                        deferred.resolve({ Outlets: arr });\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.updateOutletPacked = function (outlet) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                var packed = JSON.stringify(outlet);\r\n                tx.executeSql('UPDATE outlets set Packed =? where PosName=? and OutletID = ?',\r\n                    [packed, configService.lastDearPosName, outlet.PosOutletID]);\r\n\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            }, function () {\r\n                deferred.resolve(outlet);\r\n            });\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getNextSequence = function (posOutletID, posRegistryID) {\r\n            var THIS = this;\r\n            var valueToReturn = '000000';\r\n            var prm = THIS.getPosOutlet(posOutletID).\r\n                then(function (data) {\r\n                    var outlet = data.Outlets[0];\r\n                    var arr = outlet.Registries;\r\n                    $.each(arr, function (idx, el) {\r\n                        if (el.PosRegistryID === posRegistryID) {\r\n\r\n                            valueToReturn = el.CurrentReceiptNumber;\r\n\r\n                            var intVal = parseInt(valueToReturn);\r\n                            el.CurrentReceiptNumber = helperService.pad(intVal + 1, 6);\r\n\r\n                            return false;\r\n                        }\r\n                    });\r\n                    return THIS.updateOutletPacked(outlet).then(function () {\r\n                        return valueToReturn;\r\n                    });\r\n                });\r\n            return prm;\r\n        };\r\n\r\n        this.setNextSequence = function (posOutletID, posRegistryID, value) {\r\n            var THIS = this;\r\n            //var valueToReturn = '000000';\r\n            var prm = THIS.getPosOutlet(posOutletID).\r\n                then(function (data) {\r\n                    var outlet = data.Outlets[0];\r\n                    var arr = outlet.Registries;\r\n                    $.each(arr, function (idx, el) {\r\n                        if (el.PosRegistryID === posRegistryID) {\r\n                            el.CurrentReceiptNumber = value;\r\n                            return false;\r\n                        }\r\n                    });\r\n                    return THIS.updateOutletPacked(outlet).then(function () {\r\n                        return true;\r\n                    });\r\n                });\r\n            return prm;\r\n        };\r\n\r\n        this.getHideUsersAssignedToAllLocations = function () {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\r\n                    \" select * from settings where Name = ?\",\r\n                    ['hideUsersAssignedToAllLocations'], function (tx, res) {\r\n                        var r = helperService.dbRawsToArray(res.rows)[0];\r\n                        deferred.resolve(r);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        }\r\n\r\n        this.setHideUsersAssignedToAllLocations = function (value) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES ('hideUsersAssignedToAllLocations',?,datetime())\",\r\n                    [value]);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;                       \r\n        }\r\n\r\n        this.refreshProducts = function (data) {\r\n            var deferred = $q.defer();\r\n            console.time('refreshProducts: start transaction');\r\n\r\n            this.db.transaction(function (tx) {\r\n//                console.timeEnd('refreshProducts: start transaction');\r\n                // clear products table and replace data from new array for current pos.\r\n//                console.time('refreshProducts: delete');\r\n                tx.executeSql(\"delete from products\");\r\n//                console.timeEnd('refreshProducts: delete');\r\n\r\n                // save new pos identification\r\n                tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                    ['ProductsPosName', configService.lastDearPosName]);\r\n                tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                    ['ApplicationKey', configService.applicationKey]);\r\n                tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                    ['ProductsHash', data.hash]);\r\n\r\n            //    console.time('refreshProducts: remove product duplicates');\r\n\r\n                data.arr = helperService.uniqueBy(data.arr, \"productID\");\r\n            //    console.timeEnd('refreshProducts: remove product duplicates');\r\n\r\n            //    console.time('refreshProducts: insert products');\r\n\r\n                $.each(data.arr, function (idx, el) {\r\n                    // format tags, excluding all spaces between them\r\n                    if(el.tags) {\r\n                        var tg = el.tags.split(\",\").map(function(t) {\r\n                            return t.trim();\r\n                          });\r\n\r\n                        el.tags = tg.join(',');\r\n                    }\r\n\r\n                    tx.executeSql('INSERT INTO products(ProductID, ProductCode, OutletSKU, Name, Barcode, Family, FamilyID, Category, ' +\r\n                        'CategoryID, DiscountName, DiscountID, Price, Option1, Option2, Option3, Discounts, Taxes, ' +\r\n                        'LoyaltyEarning, Option1Name, Option2Name, Option3Name, ImageID, FamilyImageID,Tags,BrandID, ' +\r\n                        'Brand, ProductShortDescription, FamilyShortDescription, StocktakeLocked, ProductType, CostingMethod,' + \r\n                        'CF1, CF2, CF3, CF4, CF5, CF6, CF7, CF8, CF9, CF10, ExtraInfo) VALUES ' +\r\n                        '(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?)',\r\n                        [el.productID || null, el.productCode == null ? '' : el.productCode, el.outletSKU || null, el.name || null, el.barcode || null, el.productFamilyName || null, el.productFamilyID || null, el.category || null, el.categoryID || null,\r\n                        el.discountName || null, el.discountID || null, el.price || 0, el.option1 || null, el.option2 || null, el.option3 || null, JSON.stringify(el.discountLines), JSON.stringify(el.tax || null),\r\n                        el.loyaltyEarning, el.productFamilyOption1Name || null, el.productFamilyOption2Name || null, el.productFamilyOption3Name || null,\r\n                        el.imageID || null, el.familyImageID || null, el.tags || null, el.brandID || null, el.brand || null, el.productShortDescription || null, el.familyShortDescription || null,\r\n                        el.stocktakeLocked || null, el.productType || null, el.costingMethod || null,\r\n                        el.cF1 || null, el.cF2 || null, el.cF3 || null, el.cF4 || null, el.cF5 || null, el.cF6 || null, el.cF7 || null, el.cF8 || null, el.cF9 || null, el.cF10 || null,\r\n                        JSON.stringify({\r\n                            Price1: el.price1 || 0,\r\n                            Price2: el.price2 || 0,\r\n                            Price3: el.price3 || 0,\r\n                            Price4: el.price4 || 0,\r\n                            Price5: el.price5 || 0,\r\n                            Price6: el.price6 || 0,\r\n                            Price7: el.price7 || 0,\r\n                            Price8: el.price8 || 0,\r\n                            Price9: el.price9 || 0,\r\n                            Price10: el.price10 || 0\r\n                        })]);\r\n                });\r\n\r\n                deferred.resolve(data.arr);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        const CHUNCK_SIZE = 100;\r\n\r\n        this.refreshCustomers = function (data, isPartial = false) {\r\n            var deferred = $q.defer();\r\n            var THIS = this;\r\n\r\n            const preparePromise = $q.defer();\r\n            if (!isPartial) {\r\n                this.db.transaction(function (tx) {\r\n                    // clear customer table and replace data from new array for current pos.\r\n                    console.time('refreshCustomers: prepare inserting');\r\n                    tx.executeSql(\"delete from customers\");\r\n    \r\n                    // save new pos identification\r\n                    tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                        ['CustomersPosName', configService.lastDearPosName]);\r\n                    tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                        ['ApplicationKey', configService.applicationKey]);\r\n                    tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                        ['CustomerHash', data.hash]);\r\n                        console.timeEnd('refreshCustomers: prepare inserting');\r\n                    preparePromise.resolve();\r\n                }, function (err) {\r\n                    preparePromise.reject(err);\r\n                });\r\n            } else {\r\n                this.db.transaction(function (tx) {\r\n                    // clear customer table and replace data from new array for current pos.\r\n                    console.time('refreshCustomers: prepare inserting');\r\n                    var ids = data.arr.map(function(el) {\r\n                        return el.id;\r\n                    });\r\n                    var placeholders = ids.map(function () {\r\n                        return '?'\r\n                    }).join(',');\r\n                    tx.executeSql('delete from customers where id in (' + placeholders + ')', ids);\r\n                    console.timeEnd('refreshCustomers: prepare inserting');\r\n                    preparePromise.resolve();\r\n                }, function (err) {\r\n                    preparePromise.reject(err);\r\n                });\r\n            }\r\n            \r\n            preparePromise.promise.then(function () {\r\n                console.time('refreshCustomers: inserting');\r\n                return THIS.db.executeChunk(CHUNCK_SIZE, data.arr, function (tx, el) {\r\n                    tx.executeSql('INSERT INTO customers(ID, Name, Phone, MobilePhone, Email, EnableLoyaltyPoints,Discounts,MatrixDiscounts, Discount, Addresses, Taxes, Account, CreditLimit, IsOnCreditHold, PriceTier) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)',\r\n                    [el.id, el.name, el.phone, el.mobilePhone, el.email, el.enableLoyaltyPoints, JSON.stringify(el.discounts), JSON.stringify(el.matrixDiscounts), el.discount,\r\n                    JSON.stringify(el.addresses),\r\n                    JSON.stringify({\r\n                        effectivePercentInclusive: el.effectivePercentInclusive,\r\n                        effectivePercentExclusive: el.effectivePercentExclusive,\r\n                        ruleID: el.taxRuleID\r\n                    }),\r\n                    !!el.account ? el.account : 0,\r\n                    !!el.creditLimit ? el.creditLimit : 0,\r\n                        el.isOnCreditHold,\r\n                    el.priceTier]);\r\n                }).then(function () {\r\n                    console.timeEnd('refreshCustomers: inserting');\r\n                    deferred.resolve(data.arr);\r\n                }).catch(function (err) {\r\n                    deferred.reject(err);\r\n                    errorService.showError(err.message);\r\n                });\r\n            }).catch(function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n            \r\n            return deferred.promise;\r\n        };\r\n\r\n        this.checkProductsOld = function (force) {\r\n            var deferred = $q.defer();\r\n            if (force === true) {\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            }\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"select Value from settings where Name='ProductsPosName'\", [],\r\n                    function (tx, resultSet) {\r\n                        if (resultSet.rows.length === 0 ||\r\n                            resultSet.rows.item(0).Value !== configService.lastDearPosName) {\r\n                            deferred.resolve(true);\r\n                        }\r\n                        else {\r\n                            tx.executeSql(\"SELECT ((strftime('%s','now') - strftime('%s',lastModified))/60.0/60.0/24.0) as days from settings where Name='ProductsHash'\", [],\r\n                                function (tx, resultSet) {\r\n                                    if (resultSet.rows.length === 0 ||\r\n                                        Math.floor(resultSet.rows.item(0).days) > 0)\r\n                                        deferred.resolve(true);\r\n                                    else\r\n                                        deferred.resolve(false);\r\n                                });\r\n                        }\r\n                    });\r\n\r\n\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.checkCustomersOld = function (force) {\r\n            var deferred = $q.defer();\r\n            if (force === true) {\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            }\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"select Value from settings where Name='CustomersPosName'\", [],\r\n                    function (tx, resultSet) {\r\n                        if (resultSet.rows.length === 0 ||\r\n                            resultSet.rows.item(0).Value !== configService.lastDearPosName) {\r\n                            deferred.resolve(true);\r\n                        }\r\n                        else {\r\n                            tx.executeSql(\"SELECT ((strftime('%s','now') - strftime('%s',lastModified))/60.0/60.0/24.0) as days from settings where Name='CustomerHash'\", [],\r\n                                function (tx, resultSet) {\r\n                                    if (resultSet.rows.length === 0 ||\r\n                                        Math.floor(resultSet.rows.item(0).days) > 0)\r\n                                        deferred.resolve(true);\r\n                                    else\r\n                                        deferred.resolve(false);\r\n                                });\r\n                        }\r\n                    });\r\n\r\n\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getProductsHash = function (force) {\r\n            var deferred = $q.defer();\r\n            if (force === true) {\r\n                deferred.resolve(null);\r\n            }\r\n            else {\r\n                this.db.readTransaction(function (tx) {\r\n                    tx.executeSql(\"SELECT Value as hash from settings where Name='ProductsHash'\", [],\r\n                        function (tx, resultSet) {\r\n                            if (resultSet.rows.length > 0)\r\n                                deferred.resolve(resultSet.rows.item(0).hash);\r\n                            else\r\n                                deferred.resolve(null);\r\n                        });\r\n                }, function (err) {\r\n                    deferred.reject(err);\r\n                    errorService.showError(err.message);\r\n                });\r\n            }\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getCustomersHash = function (force) {\r\n            var deferred = $q.defer();\r\n            if (force === true) {\r\n                deferred.resolve(null);\r\n            }\r\n            else {\r\n                this.db.readTransaction(function (tx) {\r\n                    tx.executeSql(\"SELECT Value as hash from settings where Name='CustomerHash'\", [],\r\n                        function (tx, resultSet) {\r\n                            if (resultSet.rows.length > 0)\r\n                                deferred.resolve(resultSet.rows.item(0).hash);\r\n                            else\r\n                                deferred.resolve(null);\r\n                        });\r\n                }, function (err) {\r\n                    deferred.reject(err);\r\n                    errorService.showError(err.message);\r\n                });\r\n            }\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.extractCurrentQuickKeyInfo = function (qkey) {\r\n            if (!configService.quickKeyTemplateID)\r\n                return null;\r\n\r\n            var qdataTemp = JSON.parse(configService.quickKeyData);\r\n            var qdata = null;\r\n            if (!!qdataTemp) {\r\n\r\n                if (!qkey) {\r\n                    qdata = qdataTemp.filter(function (el) { return el.labelID === qkey; })[0];\r\n                    if (!qdata)\r\n                        return null;\r\n\r\n                    if (!!qdata.brands && qdata.brands.length > 0) {\r\n                        qdata.brands = helperService.trimArray(qdata.brands);\r\n                    }\r\n                    if (!!qdata.categories && qdata.categories.length > 0) {\r\n                        qdata.categories = helperService.trimArray(qdata.categories);\r\n                    }\r\n                    if (!!qdata.tags && qdata.tags.length > 0) {\r\n                        qdata.tags = helperService.trimArray(qdata.tags);\r\n                    }\r\n\r\n                    if (!qdata.groupingOperator)\r\n                        qdata.groupingOperator = 'OR';\r\n                }\r\n            }\r\n\r\n            return qdata;\r\n        };\r\n\r\n        this.getLiveSearchProducs = function (data) {\r\n            var deferred = $q.defer();\r\n            if (data && data.length > 0) {\r\n                deferred.resolve(data);\r\n                return deferred.promise;\r\n            }\r\n\r\n            console.time('getLiveSearchProducs; transaction start');\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"select ProductID as productID, ProductCode as productCode, OutletSKU as outletSKU, Name as name, Price as price from products where FamilyID is null or ProductID <> FamilyID\", [],\r\n                    function (tx, res) {\r\n                        deferred.resolve(helperService.dbRawsToArray(res.rows));\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        // ProductCode, Name, Barcode, Family\r\n        this.search = function (barcode, text, qkeytemplate, qkey, productID) {\r\n            var deferred = $q.defer();\r\n            var THIS = this;\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('delete from productsSearchTemp');\r\n\r\n                var command = null;\r\n                var c;\r\n                if (!!configService.quickKeyTemplateID && qkeytemplate == configService.quickKeyTemplateID) {\r\n                    var qdata = helperService.extractCurrentQuickKeyInfo(qkey);\r\n                    if (!qdata) {\r\n                        deferred.reject('Invalid QuickKey data');\r\n                        return;\r\n                    }\r\n                    else {\r\n                        var groupingOperator = (!qdata || qdata.groupingOperator === 'OR') ? 'or' : 'and';\r\n                        if(groupingOperator === 'and')\r\n                            command = \"insert into productsSearchTemp SELECT * from products where 1=1\";\r\n                        else\r\n                            command = \"insert into productsSearchTemp SELECT * from products where 1=0\";\r\n\r\n                        if (!!qdata.brands && qdata.brands.length > 0) {\r\n                            var brands = [];\r\n                            angular.forEach(qdata.brands, function (el) {\r\n                                brands.push(helperService.escapeString(el));\r\n                            });\r\n\r\n                            c = \"Brand in('\" + brands.join(\"','\") + \"')\";\r\n                            command += \" \" + groupingOperator + \" (\" + c + \")\";\r\n                        }\r\n                        if (!!qdata.categories && qdata.categories.length > 0) {\r\n                            var categories = [];\r\n                            angular.forEach(qdata.categories, function (el) {\r\n                                categories.push(helperService.escapeString(el));\r\n                            });\r\n\r\n                            c = \"Category in('\" + categories.join(\"','\") + \"')\";\r\n                            command += \" \" + groupingOperator + \" (\" + c + \")\";\r\n                        }\r\n                        if (!!qdata.tags && qdata.tags.length > 0) {\r\n                            c = \"\";\r\n                            angular.forEach(qdata.tags, function (el) {\r\n                                var sch = el.trim();\r\n                                if (c.length > 0)\r\n                                    c += \" or \";\r\n//                                    c += \"tags like '%\" + helperService.escapeString(el) + \"%'\";\r\n                                    c += \" tags like '\" + helperService.escapeString(sch) + \"'\";\r\n                                    c += \" or tags like '%,\" + helperService.escapeString(sch) + \"'\";\r\n                                    c += \" or tags like '\" + helperService.escapeString(sch) + \",%'\";\r\n                                    c += \" or tags like '%,\" + helperService.escapeString(sch) + \",%'\";\r\n                            });\r\n\r\n                            command += \" \" + groupingOperator + \" (\" + c + \")\";\r\n                        }\r\n\r\n                        tx.executeSql(command, [],\r\n                            function (tx, res) {\r\n                                deferred.resolve(res.rowsAffected);\r\n                            });\r\n                    }\r\n                }\r\n                else {\r\n                    if (!!productID) {\r\n                        command = \"insert into productsSearchTemp SELECT * from products where ProductID = ? and (FamilyID is null or FamilyID <> ?)\";\r\n                        tx.executeSql(command,\r\n                            [productID, productID], function (tx, res) {\r\n                                deferred.resolve(res.rowsAffected);\r\n                            });\r\n                    }\r\n                    else {\r\n                        // extended search like in Cin7 Core\r\n                        var searchArr = filterService.splitSearchText(text);\r\n\r\n                        // check barcode for object\r\n                        var useWeightBasedSearch = false;\r\n                        var useOutletSKU = false;\r\n                        var outletSKU = null;\r\n                        if (barcode && typeof (barcode) !== 'string') {\r\n                            useOutletSKU = barcode.UseOutletSKU;\r\n                            useWeightBasedSearch = true;\r\n                            outletSKU = barcode.SKU;\r\n                        }\r\n\r\n                        if (!useWeightBasedSearch) {\r\n\r\n                        command = \"insert into productsSearchTemp SELECT * from products where\" +\r\n                                  \" Barcode like '\" + text + \"'\";\r\n                            if(barcode) {\r\n                                command +=  \" OR CF1 = '\" + barcode + \"'\" +\r\n                                            \" OR CF2 = '\" + barcode + \"'\" +\r\n                                            \" OR CF3 = '\" + barcode + \"'\" +\r\n                                            \" OR CF4 = '\" + barcode + \"'\" +\r\n                                            \" OR CF5 = '\" + barcode + \"'\" +\r\n                                            \" OR CF6 = '\" + barcode + \"'\" +\r\n                                            \" OR CF7 = '\" + barcode + \"'\" +\r\n                                            \" OR CF8 = '\" + barcode + \"'\" +\r\n                                            \" OR CF9 = '\" + barcode + \"'\" +\r\n                                            \" OR CF10 = '\" + barcode + \"'\";\r\n                            }\r\n\r\n                            command += THIS.formatLikePart(\"ProductCode\", searchArr) +\r\n                            THIS.formatLikePart(\"Name\", searchArr) +\r\n                            THIS.formatLikePart(\"Family\", searchArr);\r\n                        } else {\r\n                            command = \"insert into productsSearchTemp SELECT * from products where\" +\r\n                            \" \"+(useOutletSKU ? \"OutletSKU\" : \"ProductCode\")+\" like '\" + outletSKU + \"'\";\r\n                        }\r\n\r\n                        tx.executeSql(command,\r\n                             [],function (tx, res) {\r\n                                deferred.resolve(res.rowsAffected);\r\n                            });\r\n                    }\r\n                }\r\n\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.formatLikePart = function (field, searchArray) {\r\n            var res = \" OR \";\r\n            if (searchArray.length === 0) res = \" \";\r\n            else if (searchArray.length === 1) res += field + \" like '%\" + searchArray[0] + \"%'\";\r\n            else {\r\n                res += \" (\";\r\n                var first = true;\r\n\r\n                angular.forEach(searchArray, function (el) {\r\n                    if (!first) res += \" AND \";\r\n                    else first = false;\r\n                    res += field + \" like '%\" + el + \"%'\";\r\n                });\r\n\r\n                res += \") \";\r\n            }\r\n\r\n            return res;\r\n        };\r\n\r\n        this.getProductByID = function (productID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\r\n                    \" select * from(\" +\r\n                    \"select 1 as cnt, Family, Name, Option1, Option2, Option3, ProductID, 0 isFamily, Discounts, Price, Taxes, LoyaltyEarning, Option1Name, Option2Name, Option3Name, \" +\r\n                    \" ProductCode as Sku, Barcode as BarCode, ImageID, ProductType, CostingMethod, StocktakeLocked from products where ProductID=?\" +\r\n                    \" ) \",\r\n                    [productID], function (tx, res) {\r\n                        // the line below solves angularjs problem with repeatable processing arror\r\n                        var data = helperService.dbRawsToArray(res.rows);\r\n                        var dataObj = {};\r\n                        dataObj.data = orderBy(data, 'Name', false);\r\n                        deferred.resolve(dataObj);\r\n                    });\r\n                    \r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.familySearch = function (familyID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\r\n                    \" select * from productsSearchTemp where FamilyID = ?\",\r\n                    [familyID], function (tx, res) {\r\n                        var r = helperService.dbRawsToArray(res.rows);\r\n                        deferred.resolve(r);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n\r\n            //this.db.transaction(function (tx) {\r\n            //    tx.executeSql(\"delete from productsSearchTemp where FamilyID <> ? or FamilyID is null\",\r\n            //        [familyID], function (tx, res) {\r\n            //            deferred.resolve(res.rowsAffected);\r\n            //        });\r\n            //}, function (err) {\r\n            //    deferred.reject(err);\r\n            //    errorService.showError(err.message);\r\n            //});\r\n\r\n            //return deferred.promise;\r\n        };\r\n\r\n        // trying to group by family before\r\n        this.getSearchCount = function () {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\r\n                    \" select count(*) as cnt from(\" +\r\n                    \" select count(Family) as cnt, Family, Family as Name, null as Option1, null as Option2, null as Option3, Option1Name, Option2Name, Option3Name, ImageID, FamilyImageID from productsSearchTemp where Family is not null group by Family\" +\r\n                    \" union select 1 as cnt, Family, Name, Option1, Option2, Option3, Option1Name, Option2Name, Option3Name, ImageID, FamilyImageID from productsSearchTemp where Family is null\" +\r\n                    \" )\",\r\n                    [], function (tx, res) {\r\n                        deferred.resolve(res.rows.item(0).cnt);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getSearchPage = function (page, pageSize, productID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                var q = '';\r\n\r\n                if (!!productID) {\r\n                    q = \"select 1 as cnt,             Family, FamilyID, Name,                   Option1,         Option2,         Option3,             ProductID, 0 isFamily,      Discounts,      Price,      Taxes,      LoyaltyEarning, Option1Name, Option2Name, Option3Name, ProductCode as Sku, Barcode as BarCode, ImageID, FamilyImageID,      Tags,      BrandID,      CategoryID, Brand, ProductShortDescription, FamilyShortDescription, StocktakeLocked, ProductType, CostingMethod, ExtraInfo, CF1, CF2, CF3, CF4, CF5, CF6, CF7, CF8, CF9, CF10 from productsSearchTemp where ProductID='\" + productID + \"'\";\r\n                }\r\n                else {\r\n                    // q = \" select * from(\" +\r\n                    // \"       select count(Family) as cnt, Family, Family as Name, null as Option1, null as Option2, null as Option3, FamilyID as ProductID, 1 isFamily, null Discounts, null Price, null Taxes, null LoyaltyEarning, Option1Name, Option2Name, Option3Name,        null as Sku, null as BarCode, ImageID, FamilyImageID, null Tags, null BrandID, null CategoryID, Brand, FamilyShortDescription as ProductShortDescription, FamilyShortDescription, 0 as StocktakeLocked, null as ProductType, null as CostingMethod from productsSearchTemp where Family is not null group by Family\" +\r\n                    // \" union select 1 as cnt,             Family, Name,                   Option1,         Option2,         Option3,             ProductID, 0 isFamily,      Discounts,      Price,      Taxes,      LoyaltyEarning, Option1Name, Option2Name, Option3Name, ProductCode as Sku,         Barcode, ImageID, FamilyImageID,      Tags,      BrandID,      CategoryID, Brand, ProductShortDescription, FamilyShortDescription, StocktakeLocked, ProductType, CostingMethod from productsSearchTemp where Family is null\" +\r\n                    // \" ) \";\r\n\r\n                    q = \" select * from(\" +\r\n                        \"       select count(Family) as cnt, Family, MIN(Name) as Name, MIN(Option1) as Option1, MIN(Option2) as Option2, MIN(Option3) as Option3, MIN(FamilyID) as FamilyID, MIN(ProductID) as ProductID, 1 isFamily, MIN(Discounts) as Discounts, MIN(Price) as Price, MIN(Taxes) as Taxes, MIN(LoyaltyEarning) as LoyaltyEarning, MIN(Option1Name) as Option1Name, MIN(Option2Name) as Option2Name, MIN(Option3Name) as Option3Name, MIN(ProductCode) as Sku, MIN(BarCode) as BarCode, MIN(ImageID) as ImageID, MIN(FamilyImageID) as FamilyImageID, MIN(Tags) as Tags, MIN(BrandID) as BrandID, MIN(CategoryID) as CategoryID, MIN(Brand) as Brand, MIN(ProductShortDescription) as ProductShortDescription, MIN(FamilyShortDescription) as FamilyShortDescription, MIN(StocktakeLocked) as StocktakeLocked, MIN(ProductType) as ProductType, MIN(CostingMethod) as CostingMethod, MIN(ExtraInfo) as ExtraInfo, MIN(CF1) as CF1, MIN(CF2) as CF2, MIN(CF3) as CF3, MIN(CF4) as CF4, MIN(CF5) as CF5, MIN(CF6) as CF6, MIN(CF7) as CF7, MIN(CF8) as CF8, MIN(CF9) as CF9, MIN(CF10) as CF10 from productsSearchTemp where Family is not null group by Family\" +\r\n                        \" union select 1 as cnt,             Family,              Name,                 Option1,                 Option2,                 Option3,                  FamilyID,                   ProductID, 0 isFamily,                   Discounts,               Price,               Taxes,                        LoyaltyEarning,                     Option1Name,                     Option2Name,                     Option3Name,      ProductCode as Sku,                 Barcode,                 ImageID,                       FamilyImageID,              Tags,                 BrandID,                    CategoryID,               Brand,                                 ProductShortDescription,                                FamilyShortDescription,                         StocktakeLocked,                     ProductType,                       CostingMethod,                   ExtraInfo,             CF1,             CF2,             CF3,             CF4,             CF5,             CF6,             CF7,             CF8,             CF9,              CF10 from productsSearchTemp where Family is null\" +\r\n                        \" ) \";\r\n\r\n                }\r\n\r\n                tx.executeSql(\r\n                    q,\r\n                    [], function (tx, res) {\r\n                        // the line below solves angularjs problem with repeatable processing error\r\n                        var data = helperService.dbRawsToArray(res.rows);\r\n\r\n                        // if we have real family, do some replacements\r\n                        angular.forEach(data, function (el) {\r\n                            if (el.isFamily == 1) {\r\n                                if (el.cnt != 1) {\r\n                                    el.Name = el.Family;\r\n                                    el.ProductShortDescription = el.FamilyShortDescription;\r\n                                    el.ProductID = el.FamilyID;\r\n                                } else {\r\n                                    el.isFamily = 0; // else reset family flag\r\n                                }\r\n                            }\r\n                        });\r\n\r\n                        var dataObj = {};\r\n                        dataObj.page = page;\r\n                        dataObj.data = orderBy(data, 'Name', false);\r\n                        dataObj.data = dataObj.data.slice(page * pageSize, pageSize * (page + 1));\r\n                        angular.forEach(dataObj.data, function(el) {\r\n                            if(el.ExtraInfo) {\r\n                                var s = JSON.parse(el.ExtraInfo);\r\n                                s.CF1 = el.CF1;\r\n                                s.CF2 = el.CF2;\r\n                                s.CF3 = el.CF3;\r\n                                s.CF4 = el.CF4;\r\n                                s.CF5 = el.CF5;\r\n                                s.CF6 = el.CF6;\r\n                                s.CF7 = el.CF7;\r\n                                s.CF8 = el.CF8;\r\n                                s.CF9 = el.CF9;\r\n                                s.CF10 = el.CF10;\r\n                                el.ExtraInfo = JSON.stringify(s);\r\n                            }\r\n                        });\r\n                        \r\n                        deferred.resolve(dataObj);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getFamilySearchCount = function () {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\r\n                    \" select count(*) as cnt from productsSearchTemp\",\r\n                    [], function (tx, res) {\r\n                        deferred.resolve(res.rows.item(0).cnt);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getFamilySearchPage = function (page, pageSize) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\r\n                    \" select 1 as cnt, Family, Name, Option1, Option2, Option3, ProductID, 0 isFamily, Discounts, Price, Taxes, LoyaltyEarning, Option1Name, Option2Name, Option3Name, ImageID, FamilyImageID from productsSearchTemp \",\r\n                    [], function (tx, res) {\r\n                        // the line below solves angularjs problem with repeatable processing arror\r\n                        var data = helperService.dbRawsToArray(res.rows); //JSON.parse(JSON.stringify(res.rows));\r\n                        var dataObj = {};\r\n                        dataObj.page = page;\r\n                        dataObj.data = orderBy(data, 'Name', false);\r\n                        dataObj.data = dataObj.data.slice(page * pageSize, pageSize * (page + 1));\r\n                        deferred.resolve(dataObj);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.addOfflineSale = function (sale, info) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql(\"INSERT OR REPLACE INTO offSales(PosName,SaleID,StatusID,Packed, InfoPacked,lastModified, OperationID) VALUES (?,?,?,?,?,datetime(),?)\",\r\n                    [configService.lastDearPosName, sale.ID, info.statusID, JSON.stringify(sale), JSON.stringify(info), sale.OperationID]);\r\n\r\n                // check coupon and add it to coupon db\r\n                if (sale.selectedCouponID) {\r\n                    tx.executeSql('INSERT or replace into SaleCoupon(ID, DealID, CouponCode) VALUES (?,?,?)',\r\n                        [sale.selectedCouponID, sale.selectedCouponDealID, sale.selectedCoupon]);\r\n                }\r\n\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.removeSale = function (saleID, statusID, operationID) {\r\n            var deferred = $q.defer();\r\n            this.db.transaction(function (tx) {\r\n                if (!operationID) {\r\n                    tx.executeSql(\"delete from offSales where SaleID=?\" + ((!!statusID && statusID.length > 0) ? ' and StatusID=\"' + statusID + '\"' : ''),\r\n                        [saleID]);\r\n                }\r\n                else {\r\n                    tx.executeSql(\"delete from offSales where OperationID=?\" + ((!!statusID && statusID.length > 0) ? ' and StatusID=\"' + statusID + '\"' : ''),\r\n                        [operationID]);\r\n                }\r\n\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.removeSales = function (posName, statusID = undefined, exeptStatusID = undefined) {\r\n            var deferred = $q.defer();\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('delete from offSales where PosName=\"' + posName + \r\n                    (!!statusID && statusID.length ? '\" and StatusID=\"' + statusID : '') +\r\n                    (!!exeptStatusID && exeptStatusID.length ? '\" and StatusID <> ' + '\"' + exeptStatusID + '\"': ''));\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.prepareLoadOfflineSalesQuery = function (posName, saleID, statusID, exeptStatusID, count) {\r\n            var s = \" where StatusID <> \\\"errorHistory\\\"\" + \r\n                ((!!posName && posName.length > 0) ? ' and PosName=\"' + posName + '\"' : '') +\r\n                ((!!saleID && saleID.length > 0) ? ' and SaleID=\"' + saleID + '\"' : '') +\r\n                ((!!statusID && statusID.length > 0) ? ' and StatusID=\"' + statusID + '\"' : '') +\r\n                ((!!exeptStatusID && exeptStatusID.length > 0) ? ' and StatusID<>\"' + exeptStatusID + '\"' : '') +\r\n                \" order by lastModified desc\" +\r\n                (!!count ? \" LIMIT \" + count : \"\");\r\n\r\n            return s;\r\n        };\r\n\r\n        this.loadOfflineSalesCount = function (posName, saleID, statusID, exeptStatusID) {\r\n            var deferred = $q.defer();\r\n            var query = \" select count(*) as cnt from offSales\" + this.prepareLoadOfflineSalesQuery(posName, saleID, statusID, exeptStatusID);\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(query,\r\n                    [], function (tx, res) {\r\n                        var data = helperService.dbRawsToArray(res.rows);\r\n                        deferred.resolve(!!data && data.length > 0 ? data[0].cnt : 0);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        // return all records in offline sales. If posName is not null then filter by posName\r\n        this.loadOfflineSales = function (posName, saleID, statusID, exeptStatusID, count) {\r\n            var deferred = $q.defer();\r\n            var query = \" select * from offSales\" + this.prepareLoadOfflineSalesQuery(posName, saleID, statusID, exeptStatusID, count);\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(query,\r\n                    [], function (tx, res) {\r\n                        // the line below solves angularjs problem with repeatable processing arror\r\n                        var data = helperService.dbRawsToArray(res.rows); //JSON.parse(JSON.stringify(res.rows));\r\n                        deferred.resolve(data);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.loadOfflineSalesErrorHistory = function (posName) {\r\n            var deferred = $q.defer();\r\n            var query = ' select * from offSales' + \" \" + \r\n            ' where StatusID = \"errorHistory\"' +\r\n            ((!!posName && posName.length > 0) ? ' and PosName=\"' + posName + '\"' : '') +\r\n            ' order by lastModified desc';\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(query,\r\n                    [], function (tx, res) {\r\n                        // the line below solves angularjs problem with repeatable processing arror\r\n                        var data = helperService.dbRawsToArray(res.rows); //JSON.parse(JSON.stringify(res.rows));\r\n                        deferred.resolve(data);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        /**\r\n         * save order status change\r\n         */\r\n        this.trackOrder = function (orderID, registryCloseID, status) {\r\n            var deferred = $q.defer();\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('INSERT INTO registryOrders(OrderID, RegistryCloseID, Status, CreatedDate) VALUES (?,?,?,datetime())',\r\n                    [orderID, registryCloseID, status],\r\n                    function (tx, res) {\r\n                        deferred.resolve(true);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.trackOrderPayments = function (orderID, refundIDs, paymentIDs) {\r\n            var deferred = $q.defer();\r\n            var refundsJson = refundIDs && refundIDs.length > 0 ? JSON.stringify(refundIDs) : null;\r\n            var paymentsJson = paymentIDs && paymentIDs.length > 0 ? JSON.stringify(paymentIDs) : null;\r\n            \r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('INSERT INTO orderPayments(OrderID, Refunds, Payments, CreatedDate) VALUES (?,?,?,datetime())',\r\n                    [orderID, refundsJson, paymentsJson],\r\n                    function (tx, res) {\r\n                        deferred.resolve(true);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        /**\r\n         * get orders for registry close\r\n         * @returns {Promise<Array<{OrderID: string, Status: string, CreatedDate: string}>>}\r\n         */\r\n        this.getOrdersForCloseRegistry = function (closeRegistryID) {\r\n            var deferred = $q.defer();\r\n            var query = 'SELECT OrderID, Status, CreatedDate FROM registryOrders WHERE RegistryCloseID = ? ORDER BY CreatedDate ASC';\r\n            \r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(query,\r\n                    [closeRegistryID],\r\n                    function (tx, res) {\r\n                        var results = [];\r\n                        for (var i = 0; i < res.rows.length; i++) {\r\n                            results.push(res.rows.item(i));\r\n                        }\r\n                        deferred.resolve(results);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        /**\r\n         * get orphan orders (where OrderID or RegistryCloseID is all zeros)\r\n         * @returns {Promise<Array<{OrderID: string, RegistryCloseID: string, Status: string, CreatedDate: string}>>}\r\n         */\r\n        this.getOrphanOrders = function () {\r\n            // Reuse getOrdersForCloseRegistry with zero GUID\r\n            return this.getOrdersForCloseRegistry('00000000-0000-0000-0000-000000000000');\r\n        };\r\n\r\n        /**\r\n         * get order payments/refunds for registry close\r\n         * @returns {Promise<Array<{OrderID: string, Refunds: string, Payments: string, CreatedDate: Date}>>}\r\n         */\r\n        this.getOrderPaymentsForCloseRegistry = function (closeRegistryID) {\r\n            var deferred = $q.defer();\r\n            var query = 'SELECT op.OrderID, op.Refunds, op.Payments, op.CreatedDate ' +\r\n                       'FROM orderPayments op ' +\r\n                       'INNER JOIN registryOrders ro ON op.OrderID = ro.OrderID ' +\r\n                       'WHERE ro.RegistryCloseID = ? ' +\r\n                       'ORDER BY op.CreatedDate ASC';\r\n            \r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(query,\r\n                    [closeRegistryID],\r\n                    function (tx, res) {\r\n                        var results = [];\r\n                        for (var i = 0; i < res.rows.length; i++) {\r\n                            results.push(res.rows.item(i));\r\n                        }\r\n                        deferred.resolve(results);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getReceiptTemplate = function (receiptID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"SELECT Template, EmailTemplate, EmailSubject from receipts where ReceiptID=?\", [receiptID],\r\n                    function (tx, resultSet) {\r\n                        if (resultSet.rows.length === 0) {\r\n                            deferred.reject(gettextCatalog.getString(\"Receipt template not found.\"));\r\n                        }\r\n                        else {\r\n                            var rows = helperService.dbRawsToArray(resultSet.rows);\r\n                            var template = rows[0].Template;\r\n                            var emailTemplate = rows[0].EmailTemplate;\r\n                            var emailSubject = rows[0].EmailSubject;\r\n                            deferred.resolve({ data: { Template: template, EmailTemplate: emailTemplate, EmailSubject: emailSubject, TemplateID: receiptID } });\r\n                        }\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(gettextCatalog.getString(\"Receipt template not found.\"));\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.saveReceiptTemplate = function (receiptID, data) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('INSERT OR REPLACE INTO receipts(ReceiptID, Template, EmailTemplate, EmailSubject) VALUES (?,?,?,?)', [receiptID, data.Template, data.EmailTemplate, data.EmailSubject]);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            }, function () {\r\n                deferred.resolve(data);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getLabelTemplate = function (receiptID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"SELECT Template from labels where ReceiptID=?\", [receiptID],\r\n                    function (tx, resultSet) {\r\n                        if (resultSet.rows.length === 0) {\r\n                            deferred.reject(gettextCatalog.getString(\"Receipt template not found.\"));\r\n                        }\r\n                        else {\r\n                            var rows = helperService.dbRawsToArray(resultSet.rows);\r\n                            var template = rows[0].Template;\r\n                            deferred.resolve({ data: { Template: template } });\r\n                        }\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(gettextCatalog.getString(\"Receipt template not found.\"));\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.saveLabelTemplate = function (receiptID, data) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('INSERT OR REPLACE INTO labels(ReceiptID, Template) VALUES (?,?)', [receiptID, data.Template]);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            }, function () {\r\n                deferred.resolve(data);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getRegistry = function (outletID, registryID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"SELECT Packed from outlets where PosName=? and OutletID=?\", [configService.lastDearPosName, outletID],\r\n                    function (tx, resultSet) {\r\n                        var reg = null;\r\n                        $.each(helperService.dbRawsToArray(resultSet.rows), function (idx, el) {\r\n                            var outlet = JSON.parse(el.Packed);\r\n\r\n                            for (var i = 0; i < outlet.Registries.length; i++) {\r\n                                var registry = outlet.Registries[i];\r\n                                if (registry.PosRegistryID === registryID) {\r\n                                    deferred.resolve(registry);\r\n                                }\r\n                            }\r\n                        });\r\n\r\n                        deferred.reject({ message: gettextCatalog.getString(\"Receipt template not found.\") });\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.storeEmailReceipt = function (orderID, baseOrderID, email, emailSubject, emailBody, templateID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"select 12\", [], function (tx, resultSet) {\r\n                    deferred.resolve({ data: { Result: true } });\r\n                });\r\n            }, function (err) { });\r\n\r\n            return deferred.promise;\r\n\r\n        };\r\n\r\n        this.openRegistry = function (ID, registryID, userName) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql(\"INSERT OR REPLACE INTO closeRegistrySales(ID,RegistryID,OpeningTime,SalesRepresentative,IsActive\" +\r\n                    \", CashExpected,CashCounted,CreditCardExpected,CreditCardCounted,GiftCardExpected,GiftCardCounted,\" +\r\n                    \"LoyaltyExpected,LoyaltyCounted,StoreCreditExpected,StoreCreditCounted,SendedToServer) VALUES (?,?,datetime(),?,?,?,?,?,?,?,?,?,?,?,?,?)\",\r\n                    [ID, registryID, userName, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\r\n\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        \r\n        this.closeRegistry = function (ID, cashCounted, creditCardCounted, giftCardCounted, loyaltyCounted, storeCreditCounted, note, additionals, report) {\r\n            var deferred = $q.defer();\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql('UPDATE closeRegistrySales set IsActive =0, SendedToServer=0, CashCounted = ?, CreditCardCounted = ?, GiftCardCounted = ?,' +\r\n                    ' LoyaltyCounted = ?, StoreCreditCounted = ?, Note = ?, Additionals=?, EndOfDayReport = ?  where ID = ?',\r\n                    [cashCounted, creditCardCounted, giftCardCounted, loyaltyCounted, storeCreditCounted, note,\r\n                        !!additionals ? JSON.stringify(additionals) : null, report,\r\n                        ID]);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.sendClosecRegistry = function (ID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql('UPDATE closeRegistrySales set SendedToServer =1 where ID = ?',\r\n                    [ID]);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.sendResetRegistry = function (ID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql('UPDATE closeRegistrySales set SendedToServer =0 where ID = ?',\r\n                    [ID]);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.updateRegistrySales = function (ID, cashExpected, creditCardExpected, giftCardExpected, loyaltyExpected, storeCreditExpected, prms) {\r\n            var THIS = this;\r\n            var deferred = $q.defer();\r\n            //deferred.resolve(true);\r\n            //return deferred.promise;\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                //tx.executeSql('UPDATE closeRegistrySales set CashExpected = CashExpected+ ?, CreditCardExpected =CreditCardExpected+ ?,' +\r\n                //    ' GiftCardExpected =GiftCardExpected+ ?,' +\r\n                //    ' LoyaltyExpected =LoyaltyExpected+ ?, StoreCreditExpected =StoreCreditExpected+ ?    where ID = ?',\r\n                //             [cashExpected, creditCardExpected, giftCardExpected, loyaltyExpected, storeCreditExpected, ID]);\r\n                tx.executeSql('UPDATE closeRegistrySales set CashExpected = CashExpected+ ?  where ID = ?',\r\n                    [cashExpected, ID]);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            });\r\n\r\n            return deferred.promise;\r\n\r\n            //var THIS = this;\r\n            //return deferred.promise.then(function () {\r\n            //    return THIS.modifyCloseRegistryAdditionalTotals(ID, prms);\r\n            //})\r\n            //.then(function () {\r\n            //    return THIS.sendResetRegistry(ID);\r\n            //});\r\n        };\r\n\r\n        this.getActiveRegistrySales = function (registryID, userName) {\r\n            var deferred = $q.defer();\r\n            var THIS = this;\r\n            this.db.transaction(function (tx) {\r\n                THIS.registryCleanUp(tx);\r\n                // insert or update sale\r\n                //tx.executeSql('select * from closeRegistrySales where RegistryID = ? and SalesRepresentative = ? and IsActive = 1',\r\n                //             [registryID, userName],\r\n                tx.executeSql('select * from closeRegistrySales where RegistryID = ? and IsActive = 1 order by OpeningTime desc',\r\n                    [registryID],\r\n                    function (tx, resultSet) {\r\n                        var data = helperService.dbRawsToArray(resultSet.rows);\r\n                        deferred.resolve(data);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getClosedRegistries = function (registryID, userName) {\r\n            var deferred = $q.defer();\r\n            var THIS = this;\r\n            this.db.transaction(function (tx) {\r\n                THIS.registryCleanUp(tx);\r\n                // insert or update sale\r\n                //tx.executeSql('select * from closeRegistrySales where RegistryID = ? and SalesRepresentative = ? and IsActive = 1',\r\n                //             [registryID, userName],\r\n                tx.executeSql('select * from closeRegistrySales where RegistryID = ? and IsActive = 0 order by OpeningTime desc',\r\n                    [registryID],\r\n                    function (tx, resultSet) {\r\n                        var data = helperService.dbRawsToArray(resultSet.rows);\r\n                        deferred.resolve(data);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getRegisterStatisticToProcess = function (count, excludeID) {\r\n            var deferred = $q.defer();\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql('select * from  closeRegistrySales where SendedToServer = 0'\r\n                + (!!excludeID ? ' and ID<>\"' + excludeID + '\"' : '')\r\n                + ' order by OpeningTime desc' +\r\n                    (!!count ? \" LIMIT \" + count : \"\"), [],\r\n                    function (tx, resultSet) {\r\n                        var data = helperService.dbRawsToArray(resultSet.rows);\r\n                        deferred.resolve(data);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.removeSendedClosecRegistry = function (ID, registryID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n\r\n                tx.executeSql('delete from closeRegistrySalesAdditionalTotals where CloseRegistrySalesID in (select ID from closeRegistrySales where IsActive = 0 and SendedToServer = 1)',\r\n                    []);\r\n\r\n                tx.executeSql('delete from registryOrders where RegistryCloseID in (select ID from closeRegistrySales where IsActive = 0 and SendedToServer = 1)',\r\n                    []);\r\n\r\n                // delete orphan orders\r\n                tx.executeSql(\"delete from registryOrders where RegistryCloseID = '00000000-0000-0000-0000-000000000000'\",\r\n                    []);\r\n\r\n                tx.executeSql('delete from closeRegistrySales where IsActive = 0 and SendedToServer = 1',\r\n                    []);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.addCashMovement = function (id, closeRegistryID, registryID, userName, amount, reason, operationType) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                if (!reason) {\r\n                    reason = '';\r\n                }\r\n                tx.executeSql(\"INSERT OR REPLACE INTO cashManagement(ID,CloseRegistryID,RegistryID,OperationTime,SalesRepresentative,Reasons\" +\r\n                    \", OperationType,Amount, SendedToServer) VALUES (?,?,?,datetime(),?,?,?,?, 0)\",\r\n                    [id, closeRegistryID, registryID, userName, reason, operationType, amount]);\r\n\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getCashMovements = function (closeRegistryID, localOnly) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql('select * from  cashManagement where CloseRegistryID = ?' + (localOnly === true ? ' and SendedToServer=0' : '') + ' order by OperationTime desc',\r\n                    [closeRegistryID],\r\n                    function (tx, resultSet) {\r\n                        var data = helperService.dbRawsToArray(resultSet.rows);\r\n                        deferred.resolve(data);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getCashMovementsToSend = function (registryID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql('select * from  cashManagement where RegistryID = ? and SendedToServer=0',\r\n                    [registryID],\r\n                    function (tx, resultSet) {\r\n                        var data = helperService.dbRawsToArray(resultSet.rows);\r\n                        deferred.resolve(data);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.removeCashMovements = function (closeRegistryID) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('delete from cashManagement where CloseRegistryID = ?',\r\n                    [closeRegistryID]);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.markCashMovementsAsSent = function (Id) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('update cashManagement set SendedToServer = 1 where ID = ?',\r\n                    [Id]);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.loadCustomers = function (text, page, limit, filters) {\r\n            var deferred = $q.defer();\r\n            page = !page ? 0 : page;\r\n            limit = !limit ? 10 : limit;\r\n\r\n            var customerID = (!!filters && !!filters.CustomerID) ? filters.CustomerID : null;\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql(\"select * from customers\" + (!!customerID ? \" where id='\" + customerID + \"'\" : \"\"),\r\n                    [], function (tx, res) {\r\n                        var data = helperService.dbRawsToArray(res.rows);\r\n                        var arr = [];\r\n                        $.each(data, function (idx, el) {\r\n                            var concString = el.Name;\r\n                            concString += \" \" +\r\n                                (el.Phone ? el.Phone + \" \" : \"\") +\r\n                                (el.Email ? el.Email + \" \" : \"\") +\r\n                                (el.MobilePhone ? el.MobilePhone : \"\");\r\n\r\n                            el.EnableLoyaltyPoints = el.EnableLoyaltyPoints === \"true\";\r\n                            el.LoadedFromLocalDb = true;\r\n                            if (text) {\r\n                                if (concString.toLowerCase().indexOf(text.toLowerCase()) !== -1) {\r\n                                    el.Discounts = el.Discounts ? JSON.parse(el.Discounts) : el.Discounts;\r\n                                    el.MatrixDiscounts = el.MatrixDiscounts ? JSON.parse(el.MatrixDiscounts) : el.MatrixDiscounts;\r\n                                    arr.push(el);\r\n                                }\r\n                            } else {\r\n                                el.Discounts = el.Discounts ? JSON.parse(el.Discounts) : el.Discounts;\r\n                                el.MatrixDiscounts = el.MatrixDiscounts ? JSON.parse(el.MatrixDiscounts) : el.MatrixDiscounts;\r\n                                arr.push(el);\r\n                            }\r\n\r\n                            // to not process in offline mode\r\n                            el.Account = 0;\r\n                            el.CreditLimit = 0;\r\n                            el.IsOnCreditHold = el.IsOnCreditHold === 'true';\r\n\r\n                            el.Addresses = el.Addresses && el.Addresses !== \"undefined\" ? JSON.parse(el.Addresses) : el.Addresses;\r\n\r\n                            if(el.Phone || el.Phone ||el.Phone )\r\n                                el.Contacts = [{\r\n                                    Phone:el.Phone,\r\n                                    Email: el.Email,\r\n                                    MobilePhone: el.MobilePhone\r\n                                }];\r\n\r\n                        });\r\n                        const offset = page === 0 || page === null || page === 1 ? 0 : (page - 1) * limit;\r\n                        deferred.resolve({ data: { Customers: arr.slice(offset, offset + limit), Total: data.length } });\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.makeErrorOrder = function (orderId) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql('UPDATE offSales set StatusID = \"error\" where SaleID = ?',\r\n                    [orderId]);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n\r\n        };\r\n\r\n        this.makeErrorHistoryOrder = function (orderId, err) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // insert or update sale\r\n                tx.executeSql('UPDATE offSales set StatusID = \"errorHistory\", ErrorText = ? where SaleID = ?',\r\n                    [err, orderId]);\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n\r\n        };\r\n        \r\n        this.getPosDiscounts = function () {\r\n            var deferred = $q.defer();\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('select * from  PosDiscounts where (DateFrom is null or DateFrom <= datetime()) and (DateTo is null or DateTo >= cast(datetime() as date)) and PosName = ?',\r\n                    [configService.lastDearPosName],\r\n                    function (tx, resultSet) {\r\n                        var data = helperService.dbRawsToArray(resultSet.rows);\r\n                        $.each(data, function (idx, el) {\r\n                            el.targets = JSON.parse(el.targets);\r\n                            el.isFamily = el.isFamily === 'true';\r\n                            el.buyMore = el.buyMore === 'true';\r\n                            el = $.extend(el, JSON.parse(el.ext));\r\n                            delete el.ext;\r\n                        });\r\n                        deferred.resolve(data);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.refreshPosDiscounts = function (newDiscounts) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // clear discounts table and replace data from new array for current pos.\r\n                tx.executeSql(\"delete from PosDiscounts where PosName=?\", [configService.lastDearPosName]);\r\n\r\n                $.each(newDiscounts, function (idx, el) {\r\n                    var ext = {\r\n                        allowCoupons: el.allowCoupons,\r\n                        singleCouponCodeUsage: el.singleCouponCodeUsage,\r\n                        coupons: el.coupons\r\n                    };\r\n\r\n                    tx.executeSql('INSERT INTO PosDiscounts(posName, productID, isFamily, tagName, brandID, categoryID, dealDiscountID, discountID, buyMore, customersGroup, dealID, buyValue, getValue, dateFrom, dateTo,  minValue, maxValue, discountLineType, amount, targets,type,ext)' +\r\n                        ' VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)',\r\n                        [configService.lastDearPosName, el.productID, el.isFamily, el.tagName, el.brandID, el.categoryID, el.dealDiscountID, el.discountID, el.buyMore,\r\n                        el.customersGroup, el.dealID, el.buyValue, el.getValue, el.dateFrom, el.dateTo, el.minValue,\r\n                        el.maxValue, el.discountLineType, el.amount, JSON.stringify(el.targets), el.type, JSON.stringify(ext)]);\r\n                });\r\n\r\n                deferred.resolve(newDiscounts);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.loadLiveCustomers = function (data, id) {\r\n            var deferred = $q.defer();\r\n            if (data && data.length > 0) {\r\n                deferred.resolve(data);\r\n                return deferred.promise;\r\n            }\r\n\r\n            console.time('refreshCustomers: loadLiveCustomers: start transaction');\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                console.timeEnd('refreshCustomers: loadLiveCustomers: start transaction');\r\n                console.time('refreshCustomers: loadLiveCustomers: start query');\r\n                var parameters = [];\r\n                var query = \"select ID as id, Name as name, Phone as phone, Email as email, MobilePhone as mobilePhone, Addresses as addresses, Taxes as taxes from customers\";\r\n                if (id) {\r\n                    query = query + ' where ID = ?'\r\n                    parameters = [id];\r\n                }\r\n                tx.executeSql(query, parameters, function (tx, res) {\r\n                        console.timeEnd('refreshCustomers: loadLiveCustomers: start query');\r\n                        var data = helperService.dbRawsToArray(res.rows, function (el) {\r\n                            el.addresses = JSON.parse(el.addresses);\r\n                            var taxes = !!el.taxes ? JSON.parse(el.taxes) : {};\r\n                            el.ruleID = taxes.ruleID;\r\n                            el.effectivePercentInclusive = taxes.effectivePercentInclusive;\r\n                            el.effectivePercentExclusive = taxes.effectivePercentExclusive;\r\n                            delete el.taxes;\r\n\r\n                            if(el.phone || el.email ||el.mobilePhone )\r\n                                el.Contacts = [{\r\n                                    Phone:el.phone,\r\n                                    Email: el.email,\r\n                                    MobilePhone: el.mobilePhone\r\n                                }];\r\n\r\n                            return el;\r\n                        });\r\n                        deferred.resolve(data);\r\n                    });\r\n\r\n             }, function (err) {\r\n                 deferred.reject(err);\r\n                 errorService.showError(err.message);\r\n             });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        // remove all old datas\r\n        this.registryCleanUp = function (tx) {\r\n            tx.executeSql(\"delete from closeRegistrySalesAdditionalTotals where CloseRegistrySalesID in (select id from closeRegistrySales where isactive = 0 and SendedToServer = 1)\");\r\n            tx.executeSql(\"delete from cashManagement where SendedToServer=1 and CloseRegistryID in (select id from closeRegistrySales where isactive = 0 and SendedToServer = 1)\");\r\n            tx.executeSql(\"delete from registryOrders where RegistryCloseID in (select id from closeRegistrySales where isactive = 0 and SendedToServer = 1)\");\r\n            tx.executeSql(\"delete from closeRegistrySales where SendedToServer=1 and isactive=0\" +\r\n                \" and not exists (select id from cashManagement where cashManagement.closeregistryid = closeRegistrySales.ID)\" +\r\n                \" and not exists (select id from closeRegistrySalesAdditionaltotals where closeRegistrySalesAdditionaltotals.closeregistrysalesid = closeRegistrySales.ID)\"\r\n            );\r\n        };\r\n\r\n        this.getSaleCoupons = function (couponCode) {\r\n            var deferred = $q.defer();\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql('select * from SaleCoupon where CouponCode = ? COLLATE NOCASE',\r\n                    [couponCode],\r\n                    function (tx, resultSet) {\r\n                        var data = helperService.dbRawsToArray(resultSet.rows);\r\n                        deferred.resolve(data);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.addSaleCoupon = function (id, dealID, couponCode) {\r\n            var deferred = $q.defer();\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('INSERT or replace into SaleCoupon(ID, DealID, CouponCode) VALUES (?,?,?)',\r\n                    [id, dealID, couponCode]);\r\n\r\n                deferred.resolve(couponCode);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        // clear coupons table thus info from server has been gotten\r\n        this.clearCoupons = function () {\r\n            var deferred = $q.defer();\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql('delete from SaleCoupon',\r\n                    []);\r\n\r\n                deferred.resolve(true);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getGiftCardSettings = function () {\r\n            var deferred = $q.defer();\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql('select Value from settings where Name = ?',\r\n                    ['GiftCardSettings'],\r\n                    function (tx, resultSet) {\r\n                        var res = {};\r\n                        if (resultSet.rows.length > 0)\r\n                            res = JSON.parse(resultSet.rows.item(0).Value);\r\n                        deferred.resolve(res);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.setGiftCardSettings = function (settings) {\r\n            if (!settings)\r\n                settings = {};\r\n\r\n            var deferred = $q.defer();\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                    ['GiftCardSettings', JSON.stringify(settings)]);\r\n\r\n                deferred.resolve(settings);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.searchSaleRepresentatives = function (page, limit, outletID, filters) {\r\n            var deferred = $q.defer();\r\n            page = !page ? 0 : page - 1;\r\n            limit = !limit ? 10 : limit;\r\n\r\n            var ID = (!!filters && !!filters.ID) ? filters.ID : null;\r\n            var Name = (!!filters && !!filters.Name) ? filters.Name : null;\r\n\r\n            this.db.transaction(function (tx) {\r\n                tx.executeSql(\"select * from saleRepresentatives where (PosOutletID='\" + outletID + \"' or PosOutletID is null)\" + (!!ID ? \" and id='\" + ID + \"'\" : \"\") +\r\n                    (!!Name ? \" and Name like '%\" + Name + \"%'\" : \"\") + \" order by Name\",\r\n                    [], function (tx, res) {\r\n                        var data = helperService.dbRawsToArray(res.rows);\r\n                        var arr = [];\r\n                        $.each(data, function (idx, el) {\r\n                            el.LoadedFromLocalDb = true;\r\n                            arr.push(el);\r\n\r\n                        });\r\n                        deferred.resolve({ data: { SaleRepresentatives: arr.slice(page * limit, limit * (page + 1)) } });\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.refreshSaleRepresentatives = function (data) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // clear saleRepresentatives table and replace data from new array for current pos.\r\n                tx.executeSql(\"delete from saleRepresentatives\");\r\n\r\n                // save new pos identification\r\n                tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                    ['SaleRepresentativesPosName', configService.lastDearPosName]);\r\n                tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                    ['ApplicationKey', configService.applicationKey]);\r\n                tx.executeSql(\"INSERT OR REPLACE INTO settings(Name,Value,lastModified) VALUES (?,?,datetime())\",\r\n                    ['SalesRepresentativeHash', data.hash]);\r\n\r\n                $.each(data.arr, function (idx, el) {\r\n                    tx.executeSql('INSERT INTO saleRepresentatives(ID, Name, PosOutletID) VALUES (?,?,?)',\r\n                        [el.id, el.name, el.posOutletID]);\r\n                });\r\n\r\n                deferred.resolve(data);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.checkSaleRepresentativesOld = function (force) {\r\n            var deferred = $q.defer();\r\n            if (force === true) {\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            }\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"select Value from settings where Name='SaleRepresentativesPosName'\", [],\r\n                    function (tx, resultSet) {\r\n                        if (resultSet.rows.length === 0 ||\r\n                            resultSet.rows.item(0).Value !== configService.lastDearPosName) {\r\n                            deferred.resolve(true);\r\n                        }\r\n                        else {\r\n                            tx.executeSql(\"SELECT ((strftime('%s','now') - strftime('%s',lastModified))/60.0/60.0/24.0) as days from settings where Name='SalesRepresentativeHash'\", [],\r\n                                function (tx, resultSet) {\r\n                                    if (resultSet.rows.length === 0 ||\r\n                                        Math.floor(resultSet.rows.item(0).days) > 0)\r\n                                        deferred.resolve(true);\r\n                                    else\r\n                                        deferred.resolve(false);\r\n                                });\r\n                        }\r\n                    });\r\n\r\n\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getSaleRepresentativesHash = function (force) {\r\n            var deferred = $q.defer();\r\n            if (force === true) {\r\n                deferred.resolve(null);\r\n            }\r\n            else {\r\n                this.db.readTransaction(function (tx) {\r\n                    tx.executeSql(\"SELECT Value as hash from settings where Name='SalesRepresentativeHash'\", [],\r\n                        function (tx, resultSet) {\r\n                            if (resultSet.rows.length > 0)\r\n                                deferred.resolve(resultSet.rows.item(0).hash);\r\n                            else\r\n                                deferred.resolve(null);\r\n                        });\r\n                }, function (err) {\r\n                    deferred.reject(err);\r\n                    errorService.showError(err.message);\r\n                });\r\n            }\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.savePOSData = function (posID, key, data) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // save new pos identification\r\n                tx.executeSql(\"INSERT OR REPLACE INTO posSatellites(POSID, Key, [Data]) VALUES (?,?,?)\",\r\n                    [posID, key, data]);\r\n                deferred.resolve(data);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.getPOSData = function (posID, key) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"SELECT [Data] from posSatellites where POSID=? and Key=?\", [posID, key],\r\n                    function (tx, resultSet) {\r\n                        if (resultSet.rows.length > 0)\r\n                            deferred.resolve(resultSet.rows.item(0));\r\n                        else\r\n                            deferred.resolve(null);\r\n                    });\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.refreshTaxRules = function (data) {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.transaction(function (tx) {\r\n                // clear saleRepresentatives table and replace data from new array for current pos.\r\n                tx.executeSql(\"delete from saleTaxRules\");\r\n\r\n                if (!!data && !!data.data && data.data.length > 0) {\r\n                    $.each(data.data, function (idx, el) {\r\n                        tx.executeSql('INSERT INTO saleTaxRules(TenantID, RuleID, Description, Rule) VALUES (?,?,?,?)',\r\n                            [configService.tenantID, el.RuleID, el.Description, JSON.stringify(el)]);\r\n                    });\r\n                }\r\n\r\n                deferred.resolve(data);\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n                errorService.showError(err.message);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n\r\n        this.loadTaxRules = function () {\r\n            var deferred = $q.defer();\r\n\r\n            this.db.readTransaction(function (tx) {\r\n                tx.executeSql(\"select * from saleTaxRules where TenantID=?\",\r\n                    [configService.tenantID], function (tx, res) {\r\n                        var data = helperService.dbRawsToArray(res.rows, function (el) {\r\n                            return JSON.parse(el.Rule);\r\n                        });\r\n                        deferred.resolve({ data: data });\r\n                    });\r\n\r\n            }, function (err) {\r\n                deferred.reject(err);\r\n            });\r\n\r\n            return deferred.promise;\r\n        };\r\n    }]);","angular.module('services').service('loyaltyDEARProvider',\r\n    ['$q',\r\n        function ($q) {\r\n\r\n            this.preload = function () {\r\n                return helperService.resolvePromise(true);\r\n            }\r\n\r\n        }\r\n    ]);\r\n","class LoyaltyLionProvider {\r\n    constructor($q, helperService, $interval, gettextCatalog) {\r\n        this.token = null;\r\n        this.useWidgetIfAvailable = true;\r\n        this.$q = $q;\r\n        this.helperService = helperService;\r\n        this.$interval = $interval;\r\n        this.gettextCatalog = gettextCatalog;\r\n        this.sdkFailed = false;\r\n        this.sdkReadyPromise = null;\r\n    }\r\n    preload() {\r\n        const pr = this.helperService.resolvePromise(true);\r\n        return pr.then(() => {\r\n            try {\r\n                this.apiLoader();\r\n                if (window.loyaltylion && !window.loyaltylion._initData) {\r\n                    window.loyaltylion.init({ token: this.token });\r\n                }\r\n                // Background signal only — login must not wait on the CDN\r\n                this.startSdkReadyWatch().catch((err) => {\r\n                    console.log('LoyaltyLion SDK preload timed out or failed:', err);\r\n                });\r\n                return this.helperService.resolvePromise(true);\r\n            } catch (err) {\r\n                return this.helperService.rejectPromise(err);\r\n            }\r\n        });\r\n    }\r\n\r\n    // Starts the $interval poll that flips sdkFailed if the CDN never exposes site. Dedupes concurrent preload races and login never awaits this.\r\n        startSdkReadyWatch() {\r\n        if (this.sdkReadyPromise) {\r\n            return this.sdkReadyPromise;\r\n        }\r\n\r\n        const POLL_MS = 100;\r\n        const POLL_TICKS = 150; // 15s\r\n\r\n        const poll = this.$interval(() => {\r\n            if (window.loyaltylion && window.loyaltylion.site) {\r\n                this.$interval.cancel(poll);\r\n            }\r\n        }, POLL_MS, POLL_TICKS, false);\r\n\r\n        this.sdkReadyPromise = poll.then(\r\n            () => {\r\n                this.sdkFailed = true;\r\n                return this.$q.reject({ soft: true });\r\n            },\r\n            () => {\r\n                this.sdkFailed = false;\r\n                return true;\r\n            }\r\n        ).finally(() => {\r\n            this.sdkReadyPromise = null;\r\n        });\r\n\r\n        return this.sdkReadyPromise;\r\n    }\r\n\r\n    softReject(msg) {\r\n        return this.helperService.rejectPromise({ msg: msg, soft: true });\r\n    }\r\n\r\n    initCustomer(customer) {\r\n        // Soft: snackbar + disable loyalty UI. Only customer.Warning stays a modal (warning: true).\r\n        // Silent: not an LL customer / not enrolled — no cashier message, no service-level latch.\r\n        if (customer.LLExternalType !== 'LoyaltyLion') {\r\n            return this.helperService.rejectPromise({ silent: true });\r\n        }\r\n        if (customer.Warning) {\r\n            return this.helperService.rejectPromise({ msg: customer.Warning, warning: true });\r\n        }\r\n        if (!customer.LLEmail) {\r\n            return this.softReject(this.gettextCatalog.getString('Customer email is empty. Can not get customer information from LoyaltyLion.'));\r\n        }\r\n        if (!customer.LLCustomerID || customer.LLCustomerID === '0' || customer.LLCustomerID === 0) {\r\n            return this.helperService.rejectPromise({ silent: true });\r\n        }\r\n        if (!customer.LLServerToken) {\r\n            return this.softReject(this.gettextCatalog.getString('Customer Server Token is empty. Can not get customer information from LoyaltyLion.'));\r\n        }\r\n        if (!customer.LLTokenDate) {\r\n            return this.softReject(this.gettextCatalog.getString('Server Token Date is empty. Can not get customer information from LoyaltyLion.'));\r\n        }\r\n\r\n        if (window.loyaltylion && window.loyaltylion.site) {\r\n            this.sdkFailed = false;\r\n        } else if (this.sdkFailed) {\r\n            return this.softReject(this.gettextCatalog.getString('LoyaltyLion is unavailable.'));\r\n        }\r\n\r\n        if (typeof loyaltylion === 'undefined' || typeof loyaltylion.authenticateCustomer !== 'function') {\r\n            return this.softReject(this.gettextCatalog.getString('LoyaltyLion is unavailable.'));\r\n        }\r\n\r\n        const pr = loyaltylion.authenticateCustomer({\r\n            customer: {\r\n                id: customer.LLCustomerID,\r\n                email: customer.LLEmail,\r\n            },\r\n            auth: {\r\n                date: customer.LLTokenDate,\r\n                token: customer.LLServerToken,\r\n            },\r\n        });\r\n\r\n        // Stub queued into _buffer; real SDK will replay on load. Mark buffered so sellController does not clear loyaltyUnavailable until auth is confirmed.\r\n        if (!pr || typeof pr.then !== 'function') {\r\n            return this.helperService.resolvePromise({ buffered: true });\r\n        }\r\n\r\n        return pr.then(\r\n            () => this.helperService.resolvePromise(true)\r\n        )\r\n        .catch((err) => {\r\n            var fallback = this.gettextCatalog.getString('Unable to authenticate with LoyaltyLion.');\r\n            var msg = (err && (err.msg || err.message)) || err || fallback;\r\n            if (typeof msg !== 'string') {\r\n                msg = fallback;\r\n            }\r\n            return this.softReject(msg);\r\n        });\r\n    }\r\n\r\n    clearCustomer() {\r\n        return this.helperService.resolvePromise(true);\r\n    }\r\n\r\n    getCustomerBalance(customer) {\r\n        const balance = $('span[data-lion-points]').first().text().replace(',', '').replace('.', '');\r\n        return this.helperService.resolvePromise(balance);\r\n    }\r\n\r\n    // recommended approach to load LoyaltyLion API \r\n    // from their api help\r\n    apiLoader () {\r\n   \r\n        // Expanded self-executing function to plain code\r\n        var loyaltylion = window.loyaltylion || [];\r\n        function insertScript(src) {\r\n            const firstScript = document.getElementsByTagName(\"script\")[0];\r\n            const script = document.createElement(\"script\");\r\n            script.src = src;\r\n            script.crossOrigin = \"\";\r\n            firstScript.parentNode.insertBefore(script, firstScript);\r\n        }\r\n\r\n        if (!loyaltylion.isLoyaltyLion) {\r\n            window.loyaltylion = loyaltylion;\r\n            if (typeof window.lion === \"undefined\") window.lion = loyaltylion;\r\n            loyaltylion.version = 2;\r\n            loyaltylion.isLoyaltyLion = true;\r\n\r\n            const now = new Date();\r\n            const dateString = now.getFullYear().toString() + now.getMonth().toString() + now.getDate().toString();\r\n            insertScript(\"https://sdk.loyaltylion.net/static/2/loader.js?t=\" + dateString);\r\n            var initialized = false;\r\n            loyaltylion.init = function (t) {\r\n                if (initialized) throw new Error(\"Cannot call loyaltylion.init more than once\");\r\n                initialized = true;\r\n                var token = loyaltylion._token = t.token;\r\n                if (!token) throw new Error(\"Token must be supplied to loyaltylion.init\");\r\n\r\n                for (var l = [], commands = \"_push configure bootstrap shutdown on removeListener authenticateCustomer\".split(\" \"), \r\n                 c = 0; c < commands.length; c += 1)\r\n                ! function (t, n) {\r\n                    t[n] = function () {\r\n                        l.push([n, Array.prototype.slice.call(arguments, 0)])\r\n                    }\r\n                }(loyaltylion, commands[c]);\r\n\r\n                \r\n\r\n                insertScript(\"https://sdk.loyaltylion.net/sdk/start/\" + token + \".js?t=\" + dateString + now.getHours().toString());\r\n                loyaltylion._initData = t;\r\n                loyaltylion._buffer = l;\r\n            };\r\n        }\r\n\r\n    };\r\n\r\n\r\n\r\n    useWidget() {\r\n        if (typeof loyaltylion !== 'undefined' && loyaltylion && loyaltylion.site && loyaltylion.site.uiMode && loyaltylion.site.uiMode === 'integrated_page_only') {\r\n            return false;\r\n        }\r\n        return this.useWidgetIfAvailable && typeof loyaltylion !== 'undefined' && loyaltylion && loyaltylion.site && loyaltylion.site.settings && loyaltylion.site.settings.loyaltyWidget &&\r\n            loyaltylion.site.settings.loyaltyWidget.enabled;\r\n    }\r\n\r\n    showWidget() {\r\n        if (this.useWidget()) {\r\n            $('.lion-loyalty-widget').show();\r\n        } else {\r\n            $('#dear-loyalty-lion-widget').show();\r\n        }\r\n        $('#llSpace').show();\r\n    }\r\n\r\n    hideWidget() {\r\n        if (this.useWidget()) {\r\n            $('.lion-loyalty-widget').hide();\r\n        } else {\r\n            $('#dear-loyalty-lion-widget').hide();\r\n        }\r\n        $('#llSpace').hide();\r\n    }\r\n\r\n    \r\n}\r\n\r\nangular.module('services').service('loyaltyLionProvider', ['$q', 'helperService', '$interval', 'gettextCatalog', LoyaltyLionProvider]);\r\n","\r\nexport function loyaltyLionClipboardHandler(e, $rootScope) {\r\n    let isLLCopyButton = false;\r\n\r\n    if (e && e.target) {\r\n        var $button = $(e.target).closest('.lion-copy-to-clipboard-button');\r\n        if ($button.length > 0) {\r\n            isLLCopyButton = true;\r\n            var code = $button.parent().find('.lion-reward-code__code').text();\r\n            var buttonEl = $button[0];\r\n            var title = buttonEl.offsetParent && buttonEl.offsetParent.hasChildNodes()\r\n                ? $(buttonEl.offsetParent.childNodes).find('.lion-modal__title').text()\r\n                : null;\r\n            var elem = angular.element(document.querySelector('[ng-app]'));\r\n            var injector = elem.injector();\r\n            if (!$rootScope) {\r\n                $rootScope = injector.get('$rootScope');\r\n            }\r\n            $rootScope.$apply(function () {\r\n                $rootScope.$broadcast('ll.clipboard.code.copy', { code: code, title: title });\r\n            });\r\n        }\r\n    }\r\n    return isLLCopyButton;\r\n}\r\n\r\n\r\nexport function loyaltyLionDiscountZoneClipboardHandler(e, $rootScope) {\r\n    try {\r\n        var el = $(e.toElement ? e.toElement : e.target);\r\n\r\n        if (el.closest('.ll-discount-zone').length > 0) {\r\n            var isCordova = !!(window.cordova && window.cordova.plugins && window.cordova.plugins.clipboard);\r\n            const showClipboardError = function(err) {\r\n                var elem = angular.element(document.querySelector('[ng-app]'));\r\n                var injector = elem.injector();\r\n                if (!$rootScope) {\r\n                    $rootScope = injector.get('$rootScope');\r\n                }\r\n                var gettextCatalog = injector.get('gettextCatalog');\r\n                var friendlyMessage = gettextCatalog.getString('Unable to read clipboard. Please paste the LoyaltyLion code manually.');\r\n                if (err) {\r\n                    console.error('Failed to read/write clipboard contents: ', err);\r\n                }\r\n                $rootScope.$applyAsync(function () {\r\n                    $rootScope.$broadcast('snackbar.show', {\r\n                        message: friendlyMessage,\r\n                        type: 'error'\r\n                    });\r\n                });\r\n            };\r\n\r\n            const sendCCMessage = function(text) {\r\n                if (text) {\r\n                    if (!$rootScope) {\r\n                        var elem = angular.element(document.querySelector('[ng-app]'));\r\n                        $rootScope = elem.injector().get('$rootScope');\r\n                    }\r\n\r\n                    $rootScope.$apply(function () {\r\n                        console.log('Send LL clipboard event');\r\n                        $rootScope.$broadcast('ll.clipboard.code.copy', {code: text, title: null});\r\n                    });\r\n                }\r\n            };\r\n\r\n            if (isCordova) {\r\n                window.cordova.plugins.clipboard.paste(function (text) {\r\n                    sendCCMessage(text);\r\n                    window.cordova.plugins.clipboard.copy(\"\");\r\n                }, showClipboardError);\r\n            } else if (navigator && navigator.clipboard && navigator.clipboard.readText) {\r\n                navigator.clipboard.readText()\r\n                    .then(function (text) {\r\n                        sendCCMessage(text);\r\n                    })\r\n                    .then(function () {\r\n                        setTimeout(() => {\r\n                            navigator.clipboard.writeText('');\r\n                        }, 100)\r\n                    })\r\n                    .catch(err => {\r\n                        showClipboardError(err);\r\n                    });\r\n            } else {\r\n                showClipboardError();\r\n            }\r\n            return true;\r\n        }\r\n    } catch (e) {\r\n        // skip\r\n    }\r\n    return false;\r\n}\r\n","angular.module('services').service('loyaltyService',\r\n    [\r\n        'configService', 'loyaltyDEARProvider', 'loyaltyLionProvider', 'helperService', 'gettextCatalog',\r\n        function (configService, loyaltyDEARProvider, loyaltyLionProvider, helperService, gettextCatalog) {\r\n\r\n            this.providerInfo = {\r\n                code: null,\r\n                name: null\r\n            };\r\n\r\n            this.provider = null;\r\n            this.loaded = false;\r\n\r\n            this.loyaltyEnabled = false;\r\n\r\n            var THIS = this;\r\n            var runProviderPreload = function () {\r\n                if (THIS.providerInfo.code === 'LoyaltyLion' && !configService.isOnline) {\r\n                    console.log('LoyaltyLion preload skipped while offline');\r\n                    return helperService.resolvePromise(false);\r\n                }\r\n                // Resolve first so a sync throw from preload() becomes a rejection and hits .catch\r\n                return helperService.resolvePromise(true).then(function () {\r\n                    return THIS.provider.preload();\r\n                }).then(function (preloadRes) {\r\n                    if (preloadRes) {\r\n                        THIS.loaded = true;\r\n                    }\r\n                    return preloadRes;\r\n                }).catch(function (err) {\r\n                    // Swallowed so login/sale flow is not blocked if preload() throws.\r\n                    console.log('Loyalty provider preload failed:', err);\r\n                    return false;\r\n                });\r\n            };\r\n\r\n            // this should be called after login\r\n            // to load correct provider SDK if required\r\n            // also provider settings are defined here\r\n            this.preload = function (res) {\r\n                if (configService.loyaltyLionToken) {\r\n                    this.providerInfo.code = 'LoyaltyLion';\r\n                    this.providerInfo.name = 'LoyaltyLion';\r\n                    this.loyaltyEnabled = true;\r\n                    configService.enableLoyalty = true;\r\n                    this.provider = loyaltyLionProvider;\r\n                    this.provider.token = configService.loyaltyLionToken;\r\n                } else {\r\n                    if (configService.loyaltyEnabled) {\r\n                        this.providerInfo.code = 'DEAR';\r\n                        this.providerInfo.name = 'DEAR';\r\n                        this.provider = loyaltyDEARProvider;\r\n                    }\r\n                }\r\n\r\n                var pr = helperService.resolvePromise(res);\r\n\r\n                if (!this.loaded && this.provider && typeof this.provider.preload === 'function') {\r\n                    pr = pr.then(function () {\r\n                        return runProviderPreload();\r\n                    });\r\n                }\r\n                return pr.then(function () {\r\n                    return helperService.resolvePromise(res);\r\n                });\r\n            };\r\n\r\n            this.isLoyaltyEnabled = function () {\r\n                return this.loyaltyEnabled;\r\n            };\r\n\r\n            this.providerInformation = function () {\r\n                return this.providerInfo;\r\n            };\r\n\r\n            // should init api by current customer\r\n            this.initCustomer = function (customer) {\r\n                var pr = helperService.resolvePromise(true);\r\n\r\n                if (this.loyaltyEnabled && !this.loaded && this.provider && typeof this.provider.preload === 'function') {\r\n                    pr = pr.then(function () {\r\n                        return runProviderPreload();\r\n                    });\r\n                }\r\n\r\n                if (this.loyaltyEnabled && this.provider && typeof this.provider.initCustomer === 'function') {\r\n                    pr = pr.then(function () {\r\n                        if (!THIS.loaded) {\r\n                            return helperService.resolvePromise(true);\r\n                        }\r\n                        return THIS.provider.initCustomer(customer);\r\n                    }).catch(function (res) {\r\n                        if (res && res.warning === true) {\r\n                            helperService.showInfoDialog({\r\n                                title: gettextCatalog.getString('Warning'),\r\n                                body: res.msg,\r\n                                isWarning: true\r\n                            });\r\n                        } else {\r\n                            throw res;\r\n                        }\r\n                    });\r\n                }\r\n\r\n                return pr;\r\n            };\r\n\r\n            // should clear current customer\r\n            this.clearCustomer = function () {\r\n                var pr = helperService.resolvePromise(true);\r\n                 var THIS = this;\r\n\r\n                 if (this.loyaltyEnabled && this.loaded && typeof this.provider.initCustomer === 'function') {\r\n                      pr = pr.then(function(){\r\n                        return THIS.provider.clearCustomer();\r\n                      });\r\n                //     pr = pr.then(function(){\r\n                //         return remoteRequestProvider.loadFakeCustomer(uuid2.newguid()+\"@gmail.com\",\"0\");\r\n                //     }).then(function (res) {\r\n                //         return THIS.provider.initCustomer(res.data.Customers[0]);\r\n                //     });\r\n                 }\r\n\r\n                return pr;\r\n            };\r\n\r\n            this.getCustomerBalance = function(customer) {\r\n                var pr = helperService.resolvePromise(true);\r\n                var THIS = this;\r\n\r\n                if (this.loyaltyEnabled && this.loaded && typeof this.provider.getCustomerBalance === 'function') {\r\n                    pr = pr.then(function () {\r\n                        return THIS.provider.getCustomerBalance(customer);\r\n                    }).then(function(bal){\r\n                        customer.LLInitialBalance = bal;\r\n                    });\r\n                }\r\n\r\n                return pr;\r\n            };\r\n        }\r\n\r\n    ]);","import buildConfiguration from \"./configEnvironment\";\r\nimport { loyaltyLionClipboardHandler, loyaltyLionDiscountZoneClipboardHandler } from \"./loyaltyLionRewardsHandler\";\r\n\r\nfunction angularInjector() {\r\n    var elem = angular.element(document.querySelector('[ng-app]'));\r\n    var injector = elem.injector();\r\n    return injector;\r\n}\r\n\r\nfunction getAngularService(name ){\r\n    return angularInjector().get(name);\r\n}\r\n\r\nfunction callRootScope(barcode) {\r\n    setTimeout(function () {\r\n        var $rootScope = angularInjector().get('$rootScope');\r\n        $rootScope.$apply(function () {\r\n            $rootScope.$broadcast('scan.barcode', barcode);\r\n        });\r\n    }, 0);\r\n}\r\n\r\n$(document).scannerDetection({\r\n    avgTimeByChar: 500,\r\n    //        ignoreIfFocusOn: ['input', 'button', 'select'],\r\n    ignoreIfFocusOn: ['input', 'textarea'],\r\n    minLength: 3,\r\n    onComplete: function (barcode, qty) {\r\n        barcode = barcode.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\r\n        console.log('scannerDetection: ' + barcode);\r\n        callRootScope(barcode);\r\n    } // main callback function\r\n});\r\n\r\n\r\n\r\nfunction handlePopoverClose(e) {\r\n    console.log('click active popover check');\r\n    const rpopel0 = $('div.popover[id*=\"popover\"]');\r\n\r\n    if (rpopel0.length > 0) {\r\n        const rpopel = $(e.target).closest('div.popover[id*=\"popover\"]');\r\n        if (rpopel.length == 0) {\r\n            //   console.log('clicked outside popover');\r\n            const elem = angular.element(document.querySelector('[ng-app]'));\r\n            const injector = elem.injector();\r\n            const $rootScope = injector.get('$rootScope');\r\n            $rootScope.$apply(function () {\r\n                console.log('click active popover check send message');\r\n                $rootScope.$broadcast('popover.dialog.hide');\r\n            });\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction handleDateSelectorClose() {\r\n    if ($(\".date-selector\").is(':visible') &&\r\n        !$(\"#ui-datepicker-div\").is(':visible')) {\r\n        $(\".date-selector\").on('click', function () { return false; });\r\n        $(\".date-selector .form-input\").on('click', function () { return false; });\r\n\r\n        $(\".date-selector\").hide();\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction handleTimeSelectorClose(e) {\r\n    if ($(\".time-selector\").is(':visible')) {\r\n        const rptm = $(e.target).closest('.time-selector');\r\n        if (rptm.length === 0) {\r\n            const elem = angular.element(document.querySelector('[ng-app]'));\r\n            const injector = elem.injector();\r\n            const $rootScope = injector.get('$rootScope');\r\n            $rootScope.$apply(function () {\r\n                $rootScope.$broadcast('time-selector.hide');\r\n            });\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction handleSnackbarClose() {\r\n    const snack = $('snackbar div.snackbar');\r\n    const rootScope = angularInjector().get('$rootScope');\r\n\r\n    if (snack.length > 0) {\r\n        const isVisible = snack.offset().top <= $('html').height() && snack.offset().top > 0;\r\n\r\n        if (isVisible) {\r\n            rootScope.$apply(function () {\r\n                console.log('close snackbar');\r\n                rootScope.$broadcast('snackbar.close');\r\n            });\r\n        }\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\n\r\nfunction handleLoyaltyLionClipboard(e) {\r\n    const rootScope = angularInjector().get('$rootScope');\r\n    const isLLCopyButton = loyaltyLionClipboardHandler(e, rootScope);\r\n    \r\n    if (!isLLCopyButton) {\r\n        return loyaltyLionDiscountZoneClipboardHandler(e, rootScope);\r\n    }\r\n    return isLLCopyButton;\r\n}\r\n\r\nfunction closePopovers(e) {\r\n    return handlePopoverClose(e) || \r\n    handleDateSelectorClose() || \r\n    handleTimeSelectorClose(e) || \r\n    handleSnackbarClose() || \r\n    handleLoyaltyLionClipboard(e);\r\n}\r\n\r\n$(document).on('click', function (e) {\r\n    closePopovers(e);\r\n});\r\n\r\n$(function () {\r\n    if (window.isSite) {\r\n        $(document.body).removeClass('no-scroll');\r\n        $(document).ready(function () {\r\n            $(document).on(\"keydown\", disableF5);\r\n        });\r\n    }\r\n\r\n});\r\n\r\nfunction disableF5(e) {\r\n    if ((e.which || e.keyCode) == 116) {\r\n        e.preventDefault();\r\n\r\n        setTimeout(function () {\r\n            var elem = angular.element(document.querySelector('[ng-app]'));\r\n            var injector = elem.injector();\r\n            var $rootScope = injector.get('$rootScope');\r\n            $rootScope.$apply(function () {\r\n                $rootScope.$broadcast('header.f5Pressed', e);\r\n            });\r\n        }, 0);\r\n    }\r\n};\r\n\r\n\r\nlet platformStyles = '';\r\n\r\nif (window.isSite === true || (buildConfiguration.platform != \"ios\" &&\r\n    buildConfiguration.platform != \"android\")) {\r\n\r\n    // WMS like\r\n    platformStyles =\r\n        '::-webkit-scrollbar {\\n' +\r\n        ' width: 12px;\\n' +\r\n        ' }\\n' +\r\n        '::-webkit-scrollbar-track {\\n' +\r\n        '            -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);\\n' +\r\n        '            box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);\\n' +\r\n        '            border-radius: 10px;\\n' +\r\n        '            background-color: #D3D3D3;\\n' +\r\n        '        }\\n' +\r\n        '::-webkit-scrollbar-thumb {\\n' +\r\n        '            border-radius: 10px;\\n' +\r\n        '            -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);\\n' +\r\n        '            box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5);}\\n' +\r\n        '            background-color: #D3D3D3;\\n';\r\n}\r\n\r\n\r\nif (!!platformStyles) {\r\n    var styleTag = $('<style type=\"text/css\" media=\"screen\">' + platformStyles + '</style>');\r\n    $('html > head').append(styleTag);\r\n}","angular.module(\"mainApp\").controller('offlineSalesController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'saleService', '$location', 'outletService', 'configService', 'errorService', \r\n    'helperService', 'orderByFilter', 'offlineSaleService', 'gettextCatalog',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, saleService, $location, outletService, configService, errorService, helperService, orderBy, offlineSaleService, gettextCatalog) {\r\n\r\n        //$rootScope.$broadcast('sideBar.hideDetails', { sectionName: constants.constSellSectionName }); // to hide sidebar details\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constOfflineSalesViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n//            $rootScope.$broadcast('login.show'); // show login page on application start\r\n        };\r\n\r\n        $scope.fullFilters = false;\r\n        $scope.data = [];\r\n        $scope.statuses = constants.parkStatuses;\r\n        $scope.triggerChangeOutletFilter = true;\r\n        $scope.filters = {\r\n            OutletID: '0',\r\n            DateFrom: null,\r\n            DateTo: null\r\n        };\r\n        $scope.filterSelectors = {};\r\n        $scope.searchInput = null;\r\n\r\n        $scope.isOnline = configService.isOnline;\r\n        $scope.canClearOfflineSales = configService.canClearOfflineSales;\r\n        \r\n        $scope.selectedJSON = null;\r\n        $scope.errorText = null;\r\n\r\n        $scope.dateSelectedCallback = function(from, to){\r\n            $scope.filters.DateFrom = from;\r\n            $scope.filters.DateTo = to;\r\n            $scope.search();\r\n        }\r\n\r\n        $scope.$watch('filters.OutletID', function (newValue, oldValue) {\r\n\r\n                if($scope.triggerChangeOutletFilter){\r\n                    $scope.search();\r\n                }                \r\n\r\n                $scope.triggerChangeOutletFilter = true;\r\n            }\r\n        );\r\n\r\n        $scope.countOffline = 0;\r\n\r\n        $scope.clearOfflineSales = function () {\r\n            offlineSaleService.clearOfflineSales().then(() => {\r\n                $scope.refreshCounter().then(() => {\r\n                    $scope.search();\r\n                });\r\n            }).catch(err => {\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n        $scope.refreshCounter = function () {\r\n            return offlineSaleService.getCount().then(res => {\r\n                $scope.countOffline = res;\r\n            });\r\n        };\r\n\r\n        $scope.clear = function () {\r\n            $scope.triggerChangeOutletFilter = false;\r\n            $scope.filters.OutletID = '0';\r\n            $scope.filters.DateFrom = null;\r\n            $scope.filters.DateTo = null;\r\n            $scope.searchInput = null;   \r\n            \r\n            $timeout(function () {\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n                \r\n            });\r\n\r\n            $scope.search();\r\n        };\r\n\r\n        function loadFilters() {\r\n            return outletService.getUserOulets(configService.loginUserID).then(function (resp) {\r\n                $scope.filterSelectors.outlets = [];\r\n                $.each(resp.Outlets, function (idx, el) {\r\n                    $scope.filterSelectors.outlets.push({ OutletName: el.OutletName, OutletID: el.PosOutletID });\r\n                });\r\n                $timeout(function () {\r\n                    initSelects();\r\n                });\r\n            },\r\n            function (err) {\r\n                errorService.showError(err);\r\n            });\r\n        }\r\n\r\n        // enable event when view is shown\r\n        $scope.onLoad = function () {     \r\n            $.blockUI();       \r\n            $scope.loadData();\r\n        };\r\n\r\n        $scope.loadData = function () {\r\n            saleService.loadOfflineSales(null, null, 'parked').then(function (resp1) {\r\n                offlineSaleService.loadOfflineSalesErrorHistory().then(function (resp) {\r\n                    if (resp && resp.length) {\r\n                        $scope.data = resp.concat(resp1)\r\n                    } else {\r\n                        $scope.data = resp1;\r\n                    }\r\n                }).catch(function() {\r\n                    $scope.data = resp1;\r\n                }).finally(function() {\r\n                    loadFilters().then(function(){\r\n                        $timeout(function(){\r\n                            $scope.raiseViewChanged();\r\n                        });\r\n                        $.unblockUI();\r\n                    });\r\n                });\r\n                $scope.refreshCounter();\r\n            });\r\n        };\r\n\r\n        $scope.search = function () {\r\n            $.blockUI();\r\n            saleService.loadOfflineSales(null, null, 'parked').then(function (resp) {\r\n                var reverse = $scope.currentOfflineDir === 'desc';\r\n                //$scope.data = orderBy(resp, $scope.sortOfflineFiled, reverse);\r\n                var errorHistory = [];\r\n                offlineSaleService.loadOfflineSalesErrorHistory().then(function (resp2) {\r\n                    if (resp2 && resp2.length) {\r\n                        errorHistory = resp2;\r\n                    }\r\n                }).finally(function () {\r\n                    $scope.data = orderBy(errorHistory.concat(resp), 'lastModified', true);\r\n                    $scope.filtered = angular.copy($scope.data);\r\n                    var mDateFormat = helperService.getDateByFormatForMoment();\r\n                    \r\n                    var mDateFrom = moment($scope.filters.DateFrom, mDateFormat).toDate();\r\n                    var dateFromFilter = function(item) {\r\n                        if ($scope.filters.DateFrom) {\r\n                            if (item.lastModified) {\r\n                                var itemDate = moment(item.lastModified).utc().add(moment().utcOffset(), 'm').toDate();\r\n                                    if (itemDate.getTime() >= mDateFrom.getTime()) {\r\n                                        return true;\r\n                                    }\r\n                            }\r\n                            return false;\r\n                        }\r\n                        return true;\r\n                    };\r\n\r\n                    var mDateTo = moment($scope.filters.DateTo, mDateFormat).toDate();\r\n                    var dateToFilter = function(item) {\r\n                        if ($scope.filters.DateTo) {\r\n                            if (item.lastModified) {\r\n                                var itemDate = moment(item.lastModified).utc().add(moment().utcOffset(), 'm').toDate();\r\n                                if (itemDate.getTime() <= mDateTo.setHours(23,59,59,999)) {\r\n                                    return true;\r\n                                }\r\n                            }\r\n                            return false;\r\n                        }\r\n                        return true;\r\n                    };\r\n\r\n                    var searchFilter = function(item, searchText) {\r\n                        if ($scope.searchInput) {\r\n                            if (item.sale.customer.Name\r\n                                && item.sale.customer.Name.toLowerCase().indexOf(searchText) >= 0) {\r\n                                    return true;\r\n                            } else if (item.info.saleObject.OrderNumber\r\n                                && item.info.saleObject.OrderNumber.indexOf(searchText) >= 0) {\r\n                                    return true;\r\n                            }\r\n                            return false\r\n                        }\r\n                        return true;\r\n                    };\r\n\r\n                    var filters = [dateFromFilter, dateToFilter, searchFilter];\r\n                   \r\n                    $scope.filtered = $scope.filtered.filter(item => filters.every(f => f(item, $scope.searchInput)));\r\n                    $scope.data = $scope.filtered;\r\n                    $.unblockUI();\r\n                })\r\n            });\r\n        };\r\n\r\n        $scope.sync = function () {\r\n            if (configService.isSite) {\r\n                return;\r\n            }\r\n            $.blockUI();\r\n            //configService.execCallbackFunctions();\r\n            saleService.sendOfflineSales(100, true)\r\n                .catch(function (err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                })\r\n                .finally(function () {\r\n                    $.unblockUI();\r\n                    $scope.search();\r\n                });\r\n        };\r\n\r\n        $scope.rowClick = function(el) {\r\n            console.log(el);\r\n            $scope.selectedJSON = el.info.saleObject;\r\n            $scope.errorText = el.ErrorText;\r\n            helperService.showDialog($('#viewErrorHistoryDialog'));\r\n        };\r\n\r\n        $scope.removeFromHistory = function(el) {\r\n            if (el.StatusID !== saleService.OfflineStatus.ErrorHistory) {\r\n                return;\r\n            }\r\n\r\n            $scope.dialogMode = 'removeFromHistory'\r\n            $scope.currentRow = el;\r\n            helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                gettextCatalog.getString('Sale would be deleted from error history. Would you like to continue?'),\r\n                gettextCatalog.getString('Yes, delete'),\r\n                gettextCatalog.getString('No'));\r\n        };\r\n\r\n         $scope.clearOfflineSalesDlg = function(el) {\r\n            $scope.dialogMode = 'clearOfflineSales';\r\n            $scope.currentRow = el;\r\n            helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                gettextCatalog.getString('Are you sure you want to clear Offline Sales? This will permanently remove these orders.'),\r\n                gettextCatalog.getString('Yes, delete'),\r\n                gettextCatalog.getString('No'));\r\n        };\r\n\r\n        \r\n        $scope.callbackModal = function () {\r\n            var mode = $scope.dialogMode;\r\n            var row =  $scope.currentRow;\r\n            $scope.dialogMode = '';\r\n            $scope.currentRow = null;\r\n            switch (mode){\r\n                case 'removeFromHistory':\r\n                    offlineSaleService.removeFromHistory(row.SaleID, row.OperationID).then(function () {\r\n                        $scope.search();\r\n                    });\r\n                break;\r\n                case 'clearOfflineSales':\r\n                    $scope.clearOfflineSales();\r\n                break;\r\n                default:\r\n                    console.error('Unknown dialog mode: ' + mode);\r\n            }\r\n            \r\n        };\r\n\r\n        $scope.copyJSON = function() {\r\n            var string = JSON.stringify(this.selectedJSON);\r\n            setTimeout(() => {\r\n                navigator.clipboard.writeText(string);\r\n            });\r\n            var msg = gettextCatalog.getString(\"JSON has been copied to clipboard.\");\r\n            $rootScope.$broadcast('snackbar.show', {\r\n                message: msg\r\n            });\r\n        };\r\n\r\n        $scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n            $scope.isOnline = object;\r\n        });\r\n\r\n        $scope.continueSale = function (saleID) {\r\n            //$location.path('/sell').search({ saleID: saleID, type: 'continue' });\r\n            window.localStorage.setItem('continueSale', JSON.stringify({ saleID: saleID, type: 'continue' }));\r\n            $location.path('/sell');\r\n        };\r\n\r\n        $scope.raiseViewChanged = function () {\r\n            $rootScope.$broadcast('view.loaded');\r\n        };\r\n\r\n\r\n        $scope.getFormatedDate = helperService.getFormatedDate;\r\n\r\n\r\n        $scope.currentOfflineDir = 'desc';\r\n        $scope.newOfflineDir = 'asc';\r\n        $scope.sortOfflineFiled = '';\r\n\r\n        $scope.sortOffline = function (field, direction) {\r\n            $scope.currentOfflineDir = direction;\r\n            $scope.sortOfflineFiled = field;\r\n            $scope.search();\r\n\r\n            if ($scope.newOfflineDir === 'desc') {\r\n                $scope.newOfflineDir = 'asc';\r\n            } else {\r\n                $scope.newOfflineDir = 'desc';\r\n            }\r\n        }\r\n    }]);","angular.module(\"mainApp\").controller('openCloseRegistryController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', 'registryService', 'uuid2', '$uibModal', '$location',\r\n        'helperService', '$locale', 'cashManagementService','$q','receiptService','printService','reportService','gettextCatalog', '$filter',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, registryService, uuid2, $uibModal, $location,\r\n        helperService, $locale, cashManagementService, $q, receiptService, printService,reportService, gettextCatalog, $filter) {\r\n\r\n            ////Apply special currency rules\r\n            helperService.setSpecialCurrencySymbols();\r\n\r\n            $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constCloseRegistryViewName }); // to hide sidebar details\r\n\r\n            if (!loginService.isLoggedIn()) {\r\n                helperService.goToHomePage();\r\n                return;\r\n            }\r\n\r\n            $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n            // array for sales\r\n            $scope.lastCloseRegistryObj = {};\r\n            /** @type {PosCloseRegistryData} */\r\n            $scope.closeRegistryObj = {};\r\n            $scope.closeRegistryObj.OutletName = configService.lastOutlet;\r\n            $scope.closeRegistryObj.RegistryNumber = configService.lastRegistry;\r\n            $scope.closeRegistryObj.ID = null;\r\n            $scope.loaded = false;\r\n            $scope.openingFloatAmount = \"\";\r\n            $scope.openingFloatNotes = \"\";\r\n\r\n            $scope.isOnline = function () {\r\n                return configService.isOnline;\r\n            };\r\n\r\n            $scope.backReportFilters = null;\r\n\r\n            // enable event when view is shown\r\n            $scope.onLoad = function () {\r\n\r\n                $scope.raiseViewChanged();\r\n                $.blockUI();\r\n\r\n                var prms = window.localStorage.getItem('forceRegisterClose');\r\n                // clear params\r\n                window.localStorage.removeItem('forceRegisterClose');\r\n\r\n                var cfg = {\r\n                    lastRegistryID: configService.lastRegistryID,\r\n                    lastRegistry: configService.lastRegistry,\r\n                    lastOutlet: configService.lastOutlet,\r\n                    ID: null\r\n                };\r\n                $scope.backReportFilters = null;\r\n\r\n                var forceClosure = false;\r\n                // if prms is not empty - we need to close specified register closure session\r\n                if (prms) {\r\n                    prms = JSON.parse(prms);\r\n                    forceClosure = true;\r\n                    cfg.lastRegistryID = prms.RegistryID;\r\n                    cfg.lastOutlet = prms.PosOutletName;\r\n                    cfg.lastRegistry = prms.RegistryName;\r\n                    cfg.ID = prms.ID;\r\n                    cfg.closeDate = prms.CloseDay;\r\n                    $scope.backReportFilters = prms.reportFilters;\r\n                }\r\n\r\n                registryService.getActiveRegistrySales(cfg.lastRegistryID, configService.lastUserName, forceClosure, null, forceClosure ? cfg.ID: null)\r\n                .then(function (resp) {\r\n                    let existingRegistryCloseOnDeviceID;\r\n                    if (resp[0]) {\r\n                        var total = resp[0];\r\n                        existingRegistryCloseOnDeviceID = configService.isSite ? null : total.ID;\r\n                        $scope.closeRegistryObj = total;\r\n                        $scope.closeRegistryObj.OutletName = cfg.lastOutlet;\r\n                        $scope.closeRegistryObj.RegistryNumber = cfg.lastRegistry;\r\n                        $scope.closeRegistryObj.GiftCardCounted = $scope.closeRegistryObj.GiftCardExpected;\r\n                        $scope.closeRegistryObj.StoreCreditCounted = $scope.closeRegistryObj.StoreCreditExpected;\r\n                        $scope.closeRegistryObj.LoyaltyCounted = $scope.closeRegistryObj.LoyaltyExpected;\r\n                        $scope.closeRegistryObj.CreditCardCounted = $scope.closeRegistryObj.CreditCardExpected;\r\n                        if (cfg.closeDate)\r\n                            $scope.closeRegistryObj.ClosingTime = cfg.closeDate;\r\n                    }\r\n                    else {\r\n                        existingRegistryCloseOnDeviceID = null;\r\n                        $scope.closeRegistryObj.OutletName = cfg.lastOutlet;\r\n                        $scope.closeRegistryObj.RegistryNumber = cfg.lastRegistry;\r\n                    }\r\n\r\n                    if (!configService.isSite) {\r\n                        return registryService.getActiveRegistrySales(cfg.lastRegistryID, configService.lastUserName,\r\n                            forceClosure || $scope.isOnline(), null, forceClosure ? cfg.ID : existingRegistryCloseOnDeviceID).\r\n                        then(function (resp) {\r\n                            if (resp[0]) {\r\n                                $scope.closeRegistryObj.GiftCardExpected = $scope.closeRegistryObj.GiftCardCounted = resp[0].GiftCardExpected;\r\n                                $scope.closeRegistryObj.StoreCreditExpected = $scope.closeRegistryObj.StoreCreditCounted = resp[0].StoreCreditExpected;\r\n                                $scope.closeRegistryObj.LoyaltyExpected = $scope.closeRegistryObj.LoyaltyCounted = resp[0].LoyaltyExpected;\r\n                                $scope.closeRegistryObj.CreditCardExpected = $scope.closeRegistryObj.CreditCardCounted = resp[0].CreditCardExpected;\r\n                                $scope.closeRegistryObj.customPayments = [];\r\n                                $scope.closeRegistryObj.Surcharges = resp[0].Surcharges;\r\n                                if (cfg.closeDate)\r\n                                    $scope.closeRegistryObj.ClosingTime = cfg.closeDate;\r\n\r\n                                if (!!resp[0].AdditionalCounters) {\r\n                                    $scope.closeRegistryObj.customPayments =\r\n                                        resp[0].AdditionalCounters.filter(function (el) {\r\n                                            if (el.CounterType == 'PAYMENT_CUSTOM') {\r\n                                                el.Counted = el.Counter;\r\n                                                return el.CounterType == 'PAYMENT_CUSTOM';\r\n                                            }\r\n                                        }).sort(function (a, b) {\r\n                                            return a.CustomCounterName < b.CustomCounterName ? -1 :\r\n                                                    a.CustomCounterName > b.CustomCounterName ? 1 : 0;\r\n                                        });\r\n                                }\r\n                            }\r\n\r\n                            var deferred = $q.defer();\r\n                            deferred.resolve($scope.closeRegistryObj.ID);\r\n                            return deferred.promise;\r\n                        });\r\n                    }\r\n                    else {\r\n                        $scope.closeRegistryObj.customPayments = [];\r\n\r\n                        if (resp[0]) {\r\n\r\n                            if (!!resp[0].AdditionalCounters) {\r\n                                $scope.closeRegistryObj.customPayments =\r\n                                    resp[0].AdditionalCounters.filter(function (el) {\r\n                                        if (el.CounterType == 'PAYMENT_CUSTOM') {\r\n                                            el.Counted = el.Counter;\r\n                                            return el.CounterType == 'PAYMENT_CUSTOM';\r\n                                        }\r\n                                    }).sort(function (a, b) {\r\n                                        return a.CustomCounterName < b.CustomCounterName ? -1 :\r\n                                            a.CustomCounterName > b.CustomCounterName ? 1 : 0;\r\n                                    });\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve($scope.closeRegistryObj.ID);\r\n                    return deferred.promise;\r\n                })\r\n                .then(function (id) {\r\n                    if (!!id) {\r\n                        return cashManagementService.getCashMovements(id).then(function (operations) {\r\n                            $scope.operations = operations;\r\n                            $scope.loaded = true;\r\n                            $.unblockUI();\r\n                        });\r\n                    }\r\n                    else {\r\n                        $scope.operations = [];\r\n                        $scope.loaded = true;\r\n                        $scope.loadLastClosedRegistry();\r\n                        $.unblockUI();\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve(null);\r\n                        return deferred.promise;\r\n                    }\r\n                })\r\n                .catch(function (err) {\r\n                    errorService.showError(err);\r\n                    $.unblockUI();\r\n                })\r\n                .finally(function () {\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('view.loaded');\r\n                    });\r\n                });\r\n            };\r\n\r\n        $scope.loadLastClosedRegistry = function () {\r\n\r\n            registryService.getClosedRegistries(configService.lastRegistryID, configService.lastUserName)\r\n                .then(function (resp) {\r\n                    if (resp[0]) {\r\n                        var total = resp[0];\r\n                        $scope.lastCloseRegistryObj = total;\r\n                    }\r\n\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve($scope.lastCloseRegistryObj.ID);\r\n                    return deferred.promise;\r\n                })\r\n                .catch(function (err) {\r\n                    errorService.showError(err);\r\n                    $.unblockUI();\r\n                });\r\n        };\r\n\r\n        $scope.calculateTotal = function (count, expected) {\r\n            if (!count && count !== 0) {\r\n                return '-';\r\n            } else {\r\n                return count - expected;\r\n            }\r\n        };\r\n\r\n        /** @param {PosCloseRegistryData} proccess */\r\n        $scope.closeRegistry = function (proccess) {\r\n            if (proccess !== true) {\r\n                loyaltyPaymentDialog();\r\n            } else {\r\n                $.blockUI();\r\n                /** @type {PosCloseRegistryData} */\r\n                var obj = $scope.closeRegistryObj;\r\n                registryService.closeRegistry(obj)\r\n                   .then(function () {\r\n                       $scope.closeRegistryObj.ID = null;\r\n                       if ($scope.backReportFilters) {\r\n\r\n                           window.localStorage.setItem('reportRegisterClosure', JSON.stringify($scope.backReportFilters));\r\n                           $location.path('/reportRegisterClosure');\r\n                       }\r\n\r\n                       $timeout(function(){\r\n                           $rootScope.$broadcast('scroll.wrapper.resize');\r\n                        });\r\n                       $.unblockUI();\r\n                       $scope.loadLastClosedRegistry();\r\n                   })\r\n                   .catch(function (err) {\r\n                       errorService.showError(err);\r\n                       $.unblockUI();\r\n                    });\r\n            }\r\n        };\r\n\r\n        $scope.openRegistry = function () {\r\n            $('#openRegister').prop('disabled', true);\r\n            $.blockUI();\r\n            \r\n            var id = uuid2.newguid();\r\n            var SCOPE = $scope;\r\n            $scope.isRegistryOpened = false;\r\n            registryService.openRegistry(id, configService.lastRegistryID, configService.lastUserName)\r\n                .then(function (res) {\r\n                    return cashManagementService.addCashMovement(uuid2.newguid(), id, configService.lastRegistryID,\r\n                                                                 configService.userName, $scope.openingFloatAmount, $scope.openingFloatNotes,\r\n                                                                 'Opening float');\r\n                })\r\n                .then(function () {\r\n                    return registryService.updateRegistryCash(id, $scope.openingFloatAmount);\r\n                })\r\n                .then(function () {\r\n                    SCOPE.isRegistryOpened = true;\r\n\r\n                    return reportService.printCashManagementReport(SCOPE,\r\n                        [{\r\n                            OperationType: 'Opening float',\r\n                            Amount: SCOPE.openingFloatAmount,\r\n                            Reasons: SCOPE.openingFloatNotes\r\n                        }]);\r\n                })\r\n            .catch(function (err) {\r\n                $('#openRegister').prop('disabled', false);\r\n                $.unblockUI();\r\n\r\n                if (!!err && !!err.data && err.data.length == 1 && err.data[0].IsAlreadyOpened === true) {\r\n                    // someone has already opened this register\r\n                    // show message and go to sale page\r\n                    errorService.showError(gettextCatalog.getString(\"Someone has already opened this register.\"),\r\n                        function () {\r\n                            $.blockUI();\r\n                            window.localStorage.setItem('continueSale', null);\r\n                            $location.path('/sell');\r\n\r\n                        });\r\n                }\r\n                else if (err !== gettextCatalog.getString(\"The printer was not set up.\"))\r\n                    errorService.showError(err);\r\n            })\r\n            .finally(function () {\r\n                if ($scope.isRegistryOpened === true) {\r\n                    window.localStorage.setItem('continueSale', null);\r\n                    $location.path('/sell');\r\n                }\r\n            });\r\n        };\r\n\r\n        function loyaltyPaymentDialog() {\r\n            var $windowElement = $('#closeRegisterConfirmPartial');\r\n            helperService.showDialog($windowElement);\r\n        }\r\n\r\n        $scope.closeDialog = function () {\r\n            var $windowElement = $('#closeRegisterConfirmPartial');\r\n            helperService.closeDialog($windowElement);\r\n        };\r\n\r\n        $scope.raiseViewChanged = function () {\r\n            $rootScope.$broadcast('view.loaded');\r\n        };\r\n\r\n        $scope.getOperationType = function (type) {\r\n            return cashManagementService.getOperationType(type);\r\n        }\r\n\r\n        $scope.getOperationSign = function (type) {\r\n            return cashManagementService.getOperationSign(type);\r\n        };\r\n\r\n        $scope.getFormatedDate = helperService.getFormatedDate;\r\n\r\n        $scope.cashAmountDlg = null; // is bound to discount popover object with methods from directive\r\n        $scope.checkAmount = 0;\r\n        $scope.editElementType = null;\r\n        $scope.keyboardTitle = \"Amount\";\r\n        $scope.enableChangeSign = true;\r\n\r\n        $scope.showAmountDlg = function (elID, payType) {\r\n            $scope.checkAmount = 0;\r\n            $scope.editElementType = payType;\r\n            $scope.enableChangeSign = true;\r\n            $scope.keyboardTitle = \"Counted amount\";\r\n\r\n            switch (payType) {\r\n                case 'cash':\r\n                    $scope.checkAmount = $scope.closeRegistryObj.CashCounted;\r\n                    break;\r\n                case 'cardpay':\r\n                    $scope.checkAmount = $scope.closeRegistryObj.CreditCardCounted;\r\n                    break;\r\n                case 'floatAmount':\r\n                    $scope.enableChangeSign = false;\r\n                    $scope.keyboardTitle = \"Opening Float Amount\";\r\n                    $scope.checkAmount = $scope.openingFloatAmount;\r\n                    break;\r\n                default:\r\n                    var obj = $scope.closeRegistryObj.customPayments.filter(function (el) { return el.CounterName == payType; })[0];\r\n                    $scope.checkAmount = obj.Counted;\r\n                    break;\r\n            }\r\n\r\n            $timeout(function () {\r\n                $scope.cashAmountDlg.show(elID);\r\n            });\r\n        };\r\n\r\n        // callback\r\n        $scope.setAmount = function (prm) {\r\n            $timeout(function () {\r\n                var sum = 0;\r\n                var changeValue = false;\r\n\r\n                if (typeof (prm) === 'boolean') {\r\n                    if (prm === true) {\r\n                        sum = parseFloat($scope.checkAmount);\r\n                        changeValue = true;\r\n                    }\r\n                }\r\n                else if (typeof (prm) == 'string') {\r\n                    if (prm === 'clean') {\r\n                        sum = 0;\r\n                        changeValue = true;\r\n                    }\r\n                }\r\n\r\n                if (changeValue) {\r\n                    switch ($scope.editElementType) {\r\n                        case 'cash':\r\n                            $scope.closeRegistryObj.CashCounted = helperService.DEARRound(sum, 2);\r\n                            break;\r\n                        case 'cardpay':\r\n                            $scope.closeRegistryObj.CreditCardCounted = helperService.DEARRound(sum, 2);\r\n                            break;\r\n                        case 'floatAmount':\r\n                            $scope.openingFloatAmount = helperService.DEARRound(sum, 2);\r\n                            break;\r\n                        default:\r\n                            var obj = $scope.closeRegistryObj.customPayments.filter(function (el) { return el.CounterName == $scope.editElementType; })[0];\r\n                            obj.Counted = helperService.DEARRound(sum, 2);\r\n                            break;\r\n                    }\r\n                }\r\n\r\n            });\r\n\r\n            $scope.cashAmountDlg.hide(true);\r\n        };\r\n\r\n        $scope.getSurchargeRate = function(surcharge) {\r\n            if (surcharge.SurchargeRateType == 'percentage') {\r\n                return surcharge.SurchargeRate + ' %';\r\n            }\r\n            else {\r\n                return $filter('currency')(surcharge.SurchargeRate);\r\n            }\r\n        };\r\n\r\n        $scope.closeKeyborad = function(){\r\n            if(Keyboard && typeof(Keyboard.close) === \"function\")\r\n                Keyboard.close();\r\n        }\r\n\r\n    }]);\r\n","angular.module('services').service('orderStatusService', [\r\n    'configService', 'localDBProvider', 'jsStoreProvider', 'deviceInfo',\r\n    function (configService, localDBProvider, jsStoreProvider, deviceInfo) {\r\n        var self = this;\r\n        \r\n        /**\r\n         * get database provider\r\n         * @returns {Object} localDBProvider for mobile, jsStoreProvider for web/simulator\r\n         */\r\n        var getProvider = function () {\r\n            return (configService.isSite || deviceInfo.isSimulator) ? jsStoreProvider : localDBProvider;\r\n        };\r\n\r\n        this.isTrackingEnabled = function (onlyConfig = false) {\r\n            return onlyConfig === true\r\n                ? configService.enableOrderStatusTracking \r\n                : (configService.enableOrderStatusTracking || deviceInfo.isSimulator);\r\n        };\r\n\r\n        /**\r\n         * group order status by order id\r\n         * @returns {Array<{OrderID: string, StatusChanges: Array<{Status: string, CreatedDate: string}>}>}\r\n         */\r\n        var groupOrdersByID = function (results) {\r\n            var ordersMap = {};\r\n            \r\n            // group transitions by order id\r\n            for (var i = 0; i < results.length; i++) {\r\n                var row = results[i];\r\n                if (!ordersMap[row.OrderID]) {\r\n                    ordersMap[row.OrderID] = {\r\n                        OrderID: row.OrderID,\r\n                        StatusChanges: []\r\n                    };\r\n                }\r\n                ordersMap[row.OrderID].StatusChanges.push({\r\n                    Status: row.Status,\r\n                    ChangeDate: row.CreatedDate\r\n                });\r\n            }\r\n            \r\n            // convert map to array\r\n            var orders = [];\r\n            for (var orderID in ordersMap) {\r\n                if (ordersMap.hasOwnProperty(orderID)) {\r\n                    orders.push(ordersMap[orderID]);\r\n                }\r\n            }\r\n            \r\n            return orders;\r\n        };\r\n\r\n        var determineOrderStatus = function (saleInfo, sale, rawSale, offlineStatusParked) {\r\n            if (saleInfo.statusID === offlineStatusParked) {\r\n                return 'parked';\r\n            }\r\n            \r\n            switch (saleInfo.statusID) {\r\n                case 'pending':\r\n                case 'CLOSED':\r\n                    // check for refund first\r\n                    if (sale.FinancialStatus === 'RETURN' || rawSale.ReturnID) {\r\n                        return 'refund';\r\n                    }\r\n                    var balance = sale.Balance || 0;\r\n                    var hasPayments = sale.Payments && sale.Payments.length > 0;\r\n                    if (hasPayments && balance > 0) {\r\n                        return 'partially_paid';\r\n                    } else if (hasPayments && balance <= 0) {\r\n                        return 'completed';\r\n                    } else {\r\n                        return 'created';\r\n                    }\r\n                case 'error':\r\n                case 'errorHistory':\r\n                    return 'created';\r\n                case 'layby':\r\n                    return 'layby';\r\n                case 'LAYBY_CLOSED':\r\n                    return 'layby_closed';\r\n                case 'onaccount':\r\n                    return 'onaccount';\r\n                case 'ONACCOUNT_CLOSED':\r\n                    return 'onaccount_closed';\r\n                default:\r\n                    return '[undefined]';\r\n            }\r\n        };\r\n\r\n        /**\r\n         * extract refund and payment IDs from sale object\r\n         * @returns {{refundIDs: Array<string>, paymentIDs: Array<string>}}\r\n         */\r\n        var extractRefundsAndPayments = function (sale) {\r\n            var refundIDs = [];\r\n            var paymentIDs = [];\r\n            \r\n            if (!sale) {\r\n                return { refundIDs: refundIDs, paymentIDs: paymentIDs };\r\n            }\r\n            \r\n            // Extract RefundIDs from Refunds array\r\n            if (sale.Refunds && Array.isArray(sale.Refunds)) {\r\n                refundIDs = sale.Refunds.map(function(refund) {\r\n                    return refund.RefundID;\r\n                }).filter(function(id) { return id; });\r\n            }\r\n            \r\n            // Extract PaymentIDs from Payments array\r\n            if (sale.Payments && Array.isArray(sale.Payments)) {\r\n                paymentIDs = sale.Payments.map(function(payment) {\r\n                    return payment.ID;\r\n                }).filter(function(id) { return id; });\r\n            }\r\n            \r\n            return { refundIDs: refundIDs, paymentIDs: paymentIDs };\r\n        };\r\n\r\n        /**\r\n         * merge payment/refund data into grouped orders\r\n         * @param {Array<{OrderID: string, StatusChanges: Array}>} groupedOrders\r\n         * @param {Array<{OrderID: string, Refunds: string, Payments: string}>} paymentsData\r\n         * @returns {Array<{OrderID: string, StatusChanges: Array, Refunds: Array<string>, Payments: Array<string>}>}\r\n         */\r\n        var mergePaymentData = function (groupedOrders, paymentsData) {\r\n            for (var i = 0; i < groupedOrders.length; i++) {\r\n                var order = groupedOrders[i];\r\n                order.Refunds = [];\r\n                order.Payments = [];\r\n                \r\n                // Find matching payment records\r\n                for (var j = 0; j < paymentsData.length; j++) {\r\n                    var paymentRecord = paymentsData[j];\r\n                    if (paymentRecord.OrderID === order.OrderID) {\r\n                        // Parse JSON arrays\r\n                        if (paymentRecord.Refunds) {\r\n                            try {\r\n                                var refunds = JSON.parse(paymentRecord.Refunds);\r\n                                order.Refunds = order.Refunds.concat(refunds);\r\n                            } catch (e) {\r\n                                console.error('Failed to parse refunds for order:', order.OrderID, e);\r\n                            }\r\n                        }\r\n                        if (paymentRecord.Payments) {\r\n                            try {\r\n                                var payments = JSON.parse(paymentRecord.Payments);\r\n                                order.Payments = order.Payments.concat(payments);\r\n                            } catch (e) {\r\n                                console.error('Failed to parse payments for order:', order.OrderID, e);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            \r\n            return groupedOrders;\r\n        };\r\n\r\n        /**\r\n         * save order status change\r\n         */\r\n        this.trackOrder = function (orderID, registryCloseID, statusOrSaleInfo, openRegistrySalesID) {\r\n            \r\n            // do not track if disabled and not simulator\r\n            if(!this.isTrackingEnabled()) {\r\n                return Promise.resolve();\r\n            }\r\n            var status;\r\n            var refundIDs = [];\r\n            var paymentIDs = [];\r\n            \r\n            if (typeof statusOrSaleInfo === 'string') {\r\n                status = statusOrSaleInfo;\r\n            } else {\r\n                status = determineOrderStatus(\r\n                    statusOrSaleInfo.saleInfo,\r\n                    statusOrSaleInfo.sale,\r\n                    statusOrSaleInfo.rawSale,\r\n                    statusOrSaleInfo.offlineStatusParked\r\n                );\r\n                \r\n                // Extract refunds and payments from sale object\r\n                var extracted = extractRefundsAndPayments(statusOrSaleInfo.sale);\r\n                refundIDs = extracted.refundIDs;\r\n                paymentIDs = extracted.paymentIDs;\r\n            }\r\n            \r\n            // if no orderID, mark as orphan using OrderID = zeros\r\n            if (!orderID) {\r\n                console.warn('orderStatusService.trackOrder: No orderID, storing as orphan');\r\n                orderID = '00000000-0000-0000-0000-000000000000';\r\n            }\r\n            \r\n            // if no registryCloseID, try fallback parameter\r\n            if (!registryCloseID && openRegistrySalesID) {\r\n                registryCloseID = openRegistrySalesID;\r\n            }\r\n            \r\n            // if still no registryCloseID, mark as orphan using RegistryCloseID = zeros\r\n            if (!registryCloseID) {\r\n                console.warn('orderStatusService.trackOrder: No registryCloseID, storing as orphan:', orderID);\r\n                registryCloseID = '00000000-0000-0000-0000-000000000000';\r\n            }\r\n            \r\n            // log status transitions for simulator\r\n            if (deviceInfo.isSimulator) {\r\n                console.log('[Order Status Tracking]', {\r\n                    orderID: orderID,\r\n                    registryCloseID: registryCloseID,\r\n                    status: status,\r\n                    refundIDs: refundIDs,\r\n                    paymentIDs: paymentIDs,\r\n                    timestamp: new Date().toISOString()\r\n                });\r\n            }\r\n\r\n            // do not write to db for simulator if tracking disabled\r\n            if(!this.isTrackingEnabled(true)) {\r\n                return Promise.resolve();\r\n            }\r\n            \r\n            var provider = getProvider();\r\n            return provider.trackOrder(orderID, registryCloseID, status)\r\n                .then(function() {\r\n                    // Track refunds and payments in separate table\r\n                    return provider.trackOrderPayments(orderID, refundIDs, paymentIDs);\r\n                });\r\n        };\r\n\r\n        /**\r\n         * get orphan orders (where OrderID or RegistryCloseID is all zeros)\r\n         * @returns {Promise<Array<{OrderID: string, RegistryCloseID: string, Status: string, CreatedDate: Date}>>}\r\n         */\r\n        this.getOrphanOrders = function () {\r\n            if(!this.isTrackingEnabled()) {\r\n                return Promise.resolve([]);\r\n            }\r\n            return getProvider().getOrphanOrders();\r\n        };\r\n\r\n        /**\r\n         * get orders for registry close including orphan orders with payment/refund data\r\n         * @returns {Promise<Array<{OrderID: string, StatusChanges: Array<{Status: string, CreatedDate: string}>, Refunds: Array<string>, Payments: Array<string>}>>} \r\n         */\r\n        this.getOrdersForCloseRegistry = function (closeRegistryID) {\r\n            if(!this.isTrackingEnabled()) {\r\n                return Promise.resolve([]);\r\n            }\r\n            var THIS = this;\r\n            var provider = getProvider();\r\n            \r\n            // Get both regular orders and orphan orders\r\n            return provider.getOrdersForCloseRegistry(closeRegistryID).then(function (regularOrders) {\r\n                return THIS.getOrphanOrders().then(function (orphanOrders) {\r\n                    // combine both lists\r\n                    var allOrders = regularOrders.concat(orphanOrders);\r\n                    var groupedOrders = groupOrdersByID(allOrders);\r\n                    \r\n                    // now fetch payment/refund data\r\n                    return provider.getOrderPaymentsForCloseRegistry(closeRegistryID).then(function (paymentsData) {\r\n                        return mergePaymentData(groupedOrders, paymentsData);\r\n                    });\r\n                });\r\n            });\r\n        };\r\n    }\r\n]);\r\n","angular.module('services').service('outletService', [\r\n    '$q', '$http', 'configService', 'remoteRequestProvider', 'localDBProvider', 'deviceInfo',\r\n    function ($q, $http, configService, remoteRequestProvider, localDBProvider, deviceInfo) {\r\n\r\n        this.getUserOulets = function (userID, getRemoteOnly) {\r\n            var provider = (configService.isOnline || getRemoteOnly === true) ? remoteRequestProvider : localDBProvider;\r\n            var pr = provider.getUserPosOutletsRegistry(userID);\r\n\r\n            if (configService.isOnline && configService.isSite === false && !deviceInfo.isSimulator) {\r\n                pr = pr.then(function (resp) {\r\n                    return localDBProvider.saveUserOutlets(resp.data);\r\n                });\r\n            } else if (configService.isSite === true || deviceInfo.isSimulator) {\r\n                pr = pr.then(function (resp) {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve({ Outlets: resp.data.Outlets });\r\n                    return deferred.promise;\r\n                });\r\n            }\r\n\r\n            return pr;\r\n        };\r\n\r\n        //this.getPosOutlet = function (posOutletID) {\r\n        //    var provider = configService.isOnline ? remoteRequestProvider : localDBProvider;\r\n        //    var pr = provider.getPosOutlet(posOutletID);\r\n\r\n        //    if (configService.isOnline && configService.isSite === false) {\r\n        //        pr = pr.then(function (resp) {\r\n        //            return localDBProvider.saveUserOutlets(resp.data);\r\n        //        });\r\n        //    }\r\n\r\n        //    return pr;\r\n        //};\r\n        this.updateConfigPaymentProcessors = function (outlet) {\r\n            configService.paymentProcessors = [];\r\n\r\n            var map = {};\r\n            angular.forEach(configService.posPaymentProcessors, function (el) {\r\n                map[el.paymentMethodName.toLowerCase()] = el;\r\n            });\r\n\r\n            if (outlet && outlet.PaymentProcessors && outlet.PaymentProcessors.length) {\r\n                angular.forEach(outlet.PaymentProcessors, function (p) {\r\n                    var pc = angular.copy(p);\r\n                    var ln = pc.paymentMethodName.toLowerCase();\r\n                    if(pc.isCustom) {\r\n                        switch (ln) {\r\n                            case 'cash':\r\n                            case 'store credits':\r\n                            case 'credit card':\r\n                            case 'layby':\r\n                            case 'gift card':\r\n                            case 'loyalty':\r\n                                pc.isCustom = false; // for payment methods that has the same name as main predefined method, we reset isCustom property\r\n                                pc.loweredPaymentMethodName = ln;\r\n                                break;\r\n                        }\r\n                    }\r\n\r\n                    map[ln] = pc;\r\n                });\r\n            }\r\n\r\n            angular.forEach(Object.getOwnPropertyNames(map), function (key) {\r\n                configService.paymentProcessors.push(map[key]);\r\n            });\r\n        };\r\n\r\n        this.getPosOutlet = function(posOutletID) {\r\n            var provider = configService.isOnline ? remoteRequestProvider : localDBProvider;\r\n\r\n            return provider.getPosOutlet(posOutletID)\r\n            .then(function(resp) {\r\n                var data = resp.data || resp;\r\n                if (angular.isArray(data.Outlets)) {\r\n                    return data.Outlets[0] || null;\r\n                }\r\n                return data || null;\r\n            })\r\n            .catch(function() {\r\n                return null;\r\n            });   \r\n        };\r\n    }]);\r\n","angular.module('services').service('paymentSenseReaderProvider',\r\n    ['$q', 'configService', 'gettextCatalog', 'webOnlyProvider', 'helperService', '$timeout', \r\n    function ($q, configService, gettextCatalog, webOnlyProvider, helperService, $timeout) {\r\n\r\n        this.parentScope = null;\r\n        this.socket = null;\r\n\r\n        this.isSocketReady = function() {\r\n            return !!this.socket && \r\n                     this.socket.readyState !== this.socket.CLOSED && \r\n                     this.socket.readyState !== this.socket.CLOSING;\r\n        };\r\n\r\n        this.id = 1;\r\n\r\n        this.init = function (force, settings) {\r\n            var settings = configService.getCardPaymentSettings();\r\n\r\n            var v = !!settings ? settings.PaymentSenseTerminalID : null;\r\n            var THIS = this;\r\n            var p = this.socketClose().then(function(){return THIS.socketConnect();});\r\n\r\n            if (force !== true) {\r\n                if (!v) {\r\n                    var deffered = $q.defer();\r\n                    deffered.reject('Paymentsense terminal is not paired');\r\n                    return deffered.promise;\r\n                }\r\n\r\n                return p;\r\n            }\r\n\r\n            // make pairing\r\n            return p.then(function() { \r\n                return THIS.sendRequest(\"connectedTerminals\", null);\r\n            });\r\n        }\r\n\r\n        this.unpair = function (settings) {\r\n            var settings = configService.getCardPaymentSettings();\r\n            if(!!settings)\r\n                settings.PaymentSenseTerminalID = null;\r\n            var deffered = $q.defer();\r\n            deffered.resolve(null);\r\n            return deffered.promise;\r\n\r\n        }\r\n\r\n        this.makePayment = function (options) {\r\n            this.hideButtons = true;\r\n            var THIS = this;\r\n\r\n            var settings = configService.getCardPaymentSettings();\r\n            var prms = {\r\n                \"tpi\": settings.PaymentSenseTerminalID,\r\n                \"currency\": options.currency,\r\n                \"amount\": Math.round(options.amount * 100)\r\n            };\r\n\r\n            var deffered0 = $q.defer();\r\n            deffered0.resolve(null);\r\n\r\n            var promise = deffered0.promise\r\n                .then(function () {\r\n                    THIS.progressText = \"Processing...\";\r\n                    THIS.showProgressDialog();\r\n                    var deffered2 = $q.defer();\r\n                    deffered2.resolve(null);\r\n                    return deffered2.promise;\r\n                })\r\n                .then(function () { return THIS.sendRequest(\"sale\", prms); })\r\n                .then(function (res) {\r\n                    var p;\r\n\r\n                    if (!!THIS.signatureDeffered) {\r\n                        p = THIS.signatureDeffered.promise;\r\n                    } else {\r\n                        var deffered3 = $q.defer();\r\n                        deffered3.resolve(true);\r\n                        p = deffered3.promise;\r\n                    }\r\n\r\n                // process payment result\r\n                    p.then(function () {\r\n                        var deffered = $q.defer();\r\n                        THIS.hideProgressDialog(true);\r\n                        deffered.resolve(res);\r\n                        return deffered.promise;\r\n                    });\r\n\r\n                    return p;\r\n                },\r\n                function (err) {\r\n                    var deffered = $q.defer();\r\n                    THIS.hideProgressDialog(true);\r\n                    deffered.reject(err);\r\n                    return deffered.promise;\r\n                });\r\n\r\n            return promise;\r\n        }\r\n\r\n        this.refund = function (el, refundSum, options) {\r\n            this.hideButtons = true;\r\n            var THIS = this;\r\n\r\n            var settings = configService.getCardPaymentSettings();\r\n            var prms = {\r\n                \"tpi\": settings.PaymentSenseTerminalID,\r\n                \"currency\": options.currency,\r\n                \"amount\": Math.round(refundSum * 100)\r\n            };\r\n            var deffered0 = $q.defer();\r\n            deffered0.resolve(null);\r\n\r\n            var promise = deffered0.promise\r\n                .then(function () {\r\n                    THIS.progressText = \"Processing...\";\r\n                    THIS.showProgressDialog();\r\n                    var deffered2 = $q.defer();\r\n                    deffered2.resolve(null);\r\n                    return deffered2.promise;\r\n                })\r\n                .then(function () { return THIS.sendRequest(\"refund\", prms); })\r\n                .then(function (res) {\r\n                    var p;\r\n\r\n                    if (!!THIS.signatureDeffered) {\r\n                        p = THIS.signatureDeffered.promise;\r\n                    } else {\r\n                        var deffered3 = $q.defer();\r\n                        deffered3.resolve(res);\r\n                        p = deffered3.promise;\r\n                    }\r\n\r\n                    // process refund result\r\n                    p.then(function () {\r\n                        var deffered = $q.defer();\r\n                        THIS.hideProgressDialog(true);\r\n                        deffered.resolve(res);\r\n                        return deffered.promise;\r\n                    });\r\n\r\n                    return p;\r\n                },\r\n                function (err) {\r\n                    var deffered = $q.defer();\r\n                    THIS.hideProgressDialog(true);\r\n                    deffered.reject(err);\r\n                    return deffered.promise;\r\n                });\r\n\r\n            return promise;\r\n        }\r\n\r\n        this.closeConnection = function () {\r\n            this.cancelKeepAlive();\r\n        }\r\n\r\n        this.reportStage1 = null;\r\n        this.reportStage2 = null;\r\n\r\n        /*\r\n        To prevent situation, when we got a report from card machine\r\n        but will have some problem with saving data to our server, we will\r\n        save report temporarily into local store.\r\n        So on each next call to this procedure, at first we will check if we\r\n        already have report for this close registry id.\r\n        */\r\n        this.getEndOfDayReport = function(closeRegisterID) {\r\n\r\n            var settings = configService.getCardPaymentSettings();\r\n            var prms = {\r\n                \"tpi\": settings.PaymentSenseTerminalID,\r\n            };\r\n\r\n            var repRes = {\r\n                RegisterCloseID: closeRegisterID\r\n            };\r\n\r\n            var deffered = $q.defer();\r\n            deffered.resolve(repRes);\r\n            var promise = deffered.promise;\r\n//            this.reportStage1 = $q.defer();\r\n//            this.reportStage2 = $q.defer();\r\n            var THIS = this;\r\n\r\n            promise = \r\n            // promise.then(function(res) {\r\n            //     repRes = res;\r\n            //     var savedReport = window.localStorage.getItem('ExtendedEndOfDayReport');\r\n            //     if(!!savedReport) {\r\n            //         savedReport = JSON.parse(savedReport);\r\n            //         if(savedReport.RegisterCloseID === res.RegisterCloseID &&\r\n            //            !!savedReport.ReportXBalance) {\r\n            //                 var deffered2 = $q.defer();\r\n            //                 deffered2.resolve(savedReport);\r\n            //                 return deffered2.promise;\r\n            //         }\r\n            //     }\r\n\r\n            //     return THIS.sendRequest(\"reportXBalance\", prms, THIS.reportStage1)\r\n            //         .then(function (res) {\r\n            //             // process report result\r\n            //             var deffered = $q.defer();\r\n            //             repRes.ReportXBalance = res.result;\r\n            //             window.localStorage.setItem('ExtendedEndOfDayReport', JSON.stringify(repRes));\r\n            //             deffered.resolve(repRes);\r\n            //             return deffered.promise;\r\n            //         });\r\n            // })\r\n            // .then(function(res){\r\n            //     repRes = res;\r\n            //     var savedReport = window.localStorage.getItem('ExtendedEndOfDayReport');\r\n            //     if(!!savedReport) {\r\n            //         savedReport = JSON.parse(savedReport);\r\n            //         if(savedReport.RegisterCloseID === res.RegisterCloseID &&\r\n            //            !!savedReport.ReportBanking) {\r\n            //                 var deffered2 = $q.defer();\r\n            //                 deffered2.resolve(savedReport);\r\n            //                 return deffered2.promise;\r\n            //         }\r\n            //     }\r\n\r\n            //     return THIS.sendRequest(\"reportBanking\", prms, THIS.reportStage2)\r\n            //         .then(function (res) {\r\n            //             // process report result\r\n            //             var deffered = $q.defer();\r\n            //             repRes.ReportBanking = res.result;\r\n            //             window.localStorage.setItem('ExtendedEndOfDayReport', JSON.stringify(repRes));\r\n            //             deffered.resolve(repRes);\r\n            //             return deffered.promise;\r\n            //         });\r\n            // })\r\n            promise\r\n            .then(function(res) {\r\n                repRes = res;\r\n                return THIS.sendRequest(\"reportEndOfDay\", prms)\r\n                .then(function (res) {\r\n\r\n                    // process report result\r\n                    // combine report from previous partial reports.\r\n                    // This is required as in the case of network failure\r\n                    // we can lost data if will retry reportEndOfDay\r\n                    // but partial reports are saved at this point so simply combine them\r\n                    // into EndOfDay report\r\n                    var deffered = $q.defer();\r\n                    deffered.resolve(res.result);\r\n                    return deffered.promise;\r\n                    });\r\n            });\r\n\r\n            return promise;\r\n        }\r\n\r\n        this.masterDeffered = null;\r\n        this.signatureDeffered = null;\r\n\r\n        this.socketConnect = function () {\r\n            this.masterDeffered = null;\r\n            this.signatureDeffered = null;\r\n            this.masterDeffered = $q.defer();\r\n\r\n            // we are already connected\r\n            if (this.isSocketReady()) {\r\n                this.masterDeffered.resolve(this.socket);\r\n                return this.masterDeffered.promise;\r\n            }\r\n\r\n            var url = 'wss://' + configService.lastPaymentSenseURL + '/pac?token=' + \r\n                configService.lastPaymentSenseAPIKey\r\n                + '&api-version=v0';\r\n\r\n            // create connection\r\n            var THIS = this;\r\n            this.socket = new WebSocket(url);\r\n\r\n            this.socket.onopen = function () {\r\n                if(!!THIS.masterDeffered) {\r\n                    THIS.masterDeffered.resolve(true);\r\n                }\r\n\r\n                THIS.keepAlive();\r\n            };\r\n\r\n            this.socket.onclose = function (event) {\r\n                if(!!THIS.masterDeffered) {\r\n                    if (!!event.reason)\r\n                        var msg = event.code === 1002 ? 'The authorization credentials provided are invalid. Please check Paymentsense URL/API key settings on the POS integration page in the Cin7 Core site.' : event.reason;\r\n                        THIS.masterDeffered.reject(msg);\r\n                    THIS.masterDeffered = null;\r\n                }\r\n\r\n                THIS.cancelKeepAlive();\r\n                this.masterDeffered = null;\r\n                this.signatureDeffered = null;\r\n            };\r\n\r\n            this.socket.onmessage = function(event) {\r\n                if(!event.data) return;\r\n\r\n                var data = JSON.parse(event.data);\r\n                if(data.method === 'signatureVerificationRequest'){\r\n                    THIS.hideProgressDialog(true);\r\n                    THIS.hideButtons = false;\r\n                    THIS.parentScope.customModalDlg2Buttons = [{\r\n                        name: gettextCatalog.getString('Yes'),\r\n                        value: 'yes'\r\n                    },\r\n                    {\r\n                        name: gettextCatalog.getString('No'),\r\n                        value: 'no'\r\n                    }];\r\n\r\n                    THIS.parentScope.customModalDlg2Caption = 'Paymentsense payment system';\r\n                    THIS.parentScope.customModalDlg2Text = 'Please, verify customer signature. Is the signature correct?';\r\n                    THIS.parentScope.customModalDlg2Text2 = '';\r\n\r\n                    THIS.parentScope.callbackModal2 = function (code) {\r\n                        var req = {\r\n                            jsonrpc: \"2.0\",\r\n                            id: 0,\r\n                            \"result\": { \"accepted\": code=='yes' ? true : false }\r\n                        };\r\n                        THIS.socket.send(JSON.stringify(req));\r\n                        helperService.closeDialog('#customModalDlg2');\r\n                        THIS.isProgressShown = false;\r\n                        THIS.showProgressDialog();\r\n                        return true;\r\n                    }\r\n    \r\n                    $timeout(function () { helperService.showDialog('#customModalDlg2'); });\r\n                    \r\n                } else if(data.method === 'terminalNotification') {\r\n                    // set popup text\r\n                    var message = data.params.notificationValue;\r\n\r\n                    switch(data.params.notificationValue) {\r\n                        case 'PRESENT_CARD':\r\n                            message = 'Present Card';\r\n                            THIS.hideButtons = false;\r\n                            THIS.parentScope.customModalDlg2Buttons = [{\r\n                                name: gettextCatalog.getString('Cancel'),\r\n                                value: 'cancel'\r\n                            }];\r\n            \r\n                            break;\r\n                        case 'PIN_ENTRY':\r\n                            message = 'Enter pin';\r\n                            break;\r\n                        case 'CONNECTING':\r\n                            message = 'Connecting';\r\n                            break;\r\n                        case 'CONNECTION_MADE':\r\n                            message = 'Connected';\r\n                            break;\r\n                        case 'APPROVED':\r\n                            message = 'Approved';\r\n                            break;\r\n                        case 'REMOVE_CARD':\r\n                            message = 'Remove card';\r\n                            break;\r\n                        case 'RETRYING':\r\n                            message = 'Retrying';\r\n                            break;\r\n                        case 'INSERT_CARD':\r\n                            message = 'Please, insert card';\r\n                            break;\r\n                        case 'PLEASE_WAIT':\r\n                            message = 'Please, wait...';\r\n                            break;\r\n                        case 'PROCESSING_ERROR':\r\n                            message = 'Processing error';\r\n                            break;\r\n                        case 'CARD_ERROR':\r\n                            message = 'Please, insert card';\r\n                            break;\r\n                        case 'SIGNATURE_VERIFICATION_PROCESS_COMPLETED':\r\n                            message = 'Signature verification process has been completed';\r\n                            break;\r\n\r\n                        default:\r\n                        break;\r\n                    }\r\n\r\n                    THIS.progressText = message;\r\n                    if (THIS.isProgressShown) {\r\n                        $timeout(function () {\r\n                            THIS.parentScope.customModalDlg2Text = message;\r\n                            THIS.parentScope.customModalDlg2Text2 = '';\r\n                        });\r\n                    }\r\n                } else if (!data.method && data.result === '') {\r\n                    // ping\r\n                } else if (!!THIS.masterDeffered) {\r\n                    var processTimeout = (!!data.error && data.error.code === -32074) ||\r\n                        (!!data.result && data.result.transactionResult === \"TIMED_OUT\");\r\n                    var timeoutSignature = !!data.error && data.error.code === -32074; \r\n\r\n                    if (!processTimeout && !!data.error) {\r\n                        THIS.hideProgressDialog(true);\r\n\r\n                        var res = {\r\n                            result: false,\r\n                            response: {\r\n                                errorDescription: data.error.message\r\n                            }\r\n                        };\r\n\r\n                        THIS.masterDeffered.reject(res);\r\n                        THIS.masterDeffered = null;\r\n                    }\r\n                    else if (processTimeout || (!!data.result && !!data.result.transactionId)) {\r\n                        if (!THIS.signatureDeffered)\r\n                            helperService.closeDialog('#customModalDlg2');\r\n\r\n                        if (processTimeout) {\r\n\r\n                            THIS.parentScope.customModalDlg2Buttons = [{\r\n                                name: gettextCatalog.getString('Yes'),\r\n                                value: 'yes'\r\n                            },\r\n                            {\r\n                                name: gettextCatalog.getString('No'),\r\n                                value: 'no'\r\n                                }];\r\n\r\n                            if (timeoutSignature) {\r\n                                THIS.parentScope.customModalDlg2Buttons = [{\r\n                                    name: gettextCatalog.getString('Yes'),\r\n                                    value: 'yes'\r\n                                }];\r\n\r\n                                THIS.signatureDeffered = $q.defer();\r\n                            }\r\n\r\n                            THIS.parentScope.customModalDlg2Caption = 'Paymentsense payment system';\r\n                            THIS.parentScope.customModalDlg2Text = '';\r\n                            THIS.parentScope.customModalDlg2Text2 = 'Communication with the PDQ has failed and payment may or may not have been taken. Please manually check if the transaction was successful on the PDQ.';\r\n\r\n                            if (!timeoutSignature)\r\n                                THIS.parentScope.customModalDlg2Text2 += '<br/>Was the transaction successful?';\r\n\r\n                            THIS.parentScope.callbackModal2 = function (code) {\r\n                                helperService.closeDialog('#customModalDlg2');\r\n                                if (timeoutSignature) {\r\n                                    THIS.signatureDeffered.resolve(true);\r\n                                } else if (code == 'yes') {\r\n                                    THIS.masterDeffered.resolve({\r\n                                        result: true,\r\n                                        response: {\r\n                                            ServerTransactionID: !!data.result ?\r\n                                                ((!!data.result.transactionId ? data.result.transactionId : data.result.tpi)) :\r\n                                                null,\r\n                                            TransactionMetaData: !!data.result ? data.result : 'Timeout. Manually processed as successful.'\r\n                                        }\r\n                                    });\r\n                                } else {\r\n                                    var res = {\r\n                                        result: false,\r\n                                        response: {\r\n                                            errorDescription: 'Transaction was unsuccessfull'\r\n                                        }\r\n                                    };\r\n\r\n                                    THIS.masterDeffered.reject(res);\r\n                                }\r\n\r\n                                return true;\r\n                            }\r\n\r\n                            $timeout(function () { helperService.showDialog('#customModalDlg2'); });\r\n                            return;\r\n\r\n                        } else if(data.result.transactionResult === \"VOID\") {\r\n                            THIS.hideProgressDialog(true);\r\n\r\n                            var res = {\r\n                                result: false,\r\n                                response: {\r\n                                    errorDescription: 'Transaction was voided'\r\n                                }\r\n                            };\r\n    \r\n                            THIS.masterDeffered.reject(res);\r\n   \r\n                        } else if(data.result.transactionType === \"REFUND\") {\r\n                            THIS.masterDeffered.resolve({\r\n                                result: true,\r\n                                amount: helperService.DEARRound(data.result.amountTotal/100, 2),\r\n                                ServerTransactionID: data.result.transactionId,\r\n                                TransactionMetaData: data.result\r\n                            });\r\n                        } else if(data.result.transactionResult === \"SUCCESSFUL\"){\r\n                            THIS.masterDeffered.resolve({\r\n                                result: true,\r\n                                response: {\r\n                                    ServerTransactionID: data.result.transactionId,\r\n                                    TransactionMetaData: data.result\r\n                                }\r\n                            });\r\n                        } else {\r\n                            THIS.hideProgressDialog(true);\r\n\r\n                            var res = {\r\n                                result: false,\r\n                                response: {\r\n                                    errorDescription: 'Transaction was unsuccessfull'\r\n                                }\r\n                            };\r\n    \r\n                            THIS.masterDeffered.reject(res);\r\n                        }\r\n\r\n                        THIS.masterDeffered = null;\r\n\r\n                    } else if(!!data.result && data.result.cancelled === true) {\r\n                        THIS.hideProgressDialog(true);\r\n\r\n                        var res = {\r\n                            result: false,\r\n                            response: {\r\n                                errorDescription: 'Transaction was cancelled'\r\n                            }\r\n                        };\r\n\r\n                        THIS.masterDeffered.reject(res);\r\n\r\n                    } else if(!!data.result && data.result.cancelled === false) {\r\n                        THIS.progressText = 'transaction can not be canceled';\r\n                        $timeout(function () {\r\n                            THIS.parentScope.customModalDlg2Text2 = '';\r\n                            THIS.parentScope.customModalDlg2Text = 'transaction can not be canceled';\r\n                        });\r\n                    } else if(data.result.transactionResult == \"CANCELLED\") {\r\n                        THIS.hideProgressDialog(true);\r\n\r\n                        var res = {\r\n                            result: false,\r\n                            response: {\r\n                                errorDescription: 'Transaction was cancelled'\r\n                            }\r\n                        };\r\n\r\n                        THIS.masterDeffered.reject(res);\r\n                        THIS.masterDeffered = null;\r\n                    }\r\n                    else if(!!data.result.reportResult){\r\n    \r\n                        if(data.result.reportType === \"X_BALANCE\") {\r\n                            THIS.reportStage1.resolve(data);\r\n                            THIS.reportStage1 = null;\r\n                        } else if(data.result.reportType === \"BANKING\") {\r\n                            THIS.reportStage2.resolve(data);\r\n                            THIS.reportStage2 = null;\r\n                        } else if(data.result.reportType === \"END_OF_DAY\") {\r\n                            THIS.masterDeffered.resolve(data);\r\n                        }\r\n                    }\r\n                    else THIS.masterDeffered.resolve(data);\r\n                }\r\n            };\r\n\r\n            this.socket.onerror = function (error) {\r\n                THIS.hideProgressDialog();\r\n\r\n                if(!!THIS.masterDeffered) {\r\n                    if(!!error.message) {\r\n                        THIS.masterDeffered.reject(error.message);                    \r\n                    } else {\r\n                        THIS.masterDeffered.reject('Can not connect to Paymentsense. Please check Paymentsense URL/API key settings on the POS integration page in the Cin7 Core site.');                    \r\n                        THIS.socket = null;\r\n                    }\r\n\r\n                    // THIS.masterDeffered = null;\r\n                }\r\n            };\r\n\r\n            return THIS.masterDeffered.promise;\r\n        }\r\n\r\n        this.socketClose = function () {\r\n            var deffered = $q.defer();\r\n            if(this.isSocketReady()) {\r\n                this.socket.onclose = null;\r\n                this.socket.close();\r\n            }\r\n            this.socket = null;\r\n            deffered.resolve(true);\r\n            return deffered.promise;\r\n        }\r\n\r\n        this.sendRequest = function (method, prms, df) {\r\n            var req = {\r\n                jsonrpc: \"2.0\",\r\n                id: this.id++,\r\n                method: method\r\n            };\r\n\r\n            if(!!prms)\r\n                req.params = prms;\r\n\r\n            var isCancel = method === 'cancelTransaction';\r\n            if(!isCancel) {\r\n                if(!df)\r\n                    this.masterDeffered = $q.defer();\r\n            }\r\n\r\n            this.socket.send(JSON.stringify(req));\r\n\r\n            if(!isCancel) {\r\n                if(!!df) return df.promise;\r\n                return this.masterDeffered.promise;\r\n            }\r\n        }\r\n\r\n        this.progressText = \"\";\r\n        this.isProgressShown = false;\r\n        this.hideButtons = false;\r\n        this.showProgressDialog = function () {\r\n            var THIS = this;\r\n            if (!this.isProgressShown) {\r\n                this.isProgressShown = true;\r\n\r\n                this.parentScope.customModalDlg2Text2 = '';\r\n                this.parentScope.customModalDlg2Caption = 'Paymentsense payment system';\r\n                this.parentScope.customModalDlg2Text = this.progressText;\r\n                if (!this.hideButtons) {\r\n                    this.parentScope.customModalDlg2Buttons = [{\r\n                        name: gettextCatalog.getString('Cancel'),\r\n                        value: 'cancel'\r\n                    }];\r\n                }\r\n                else {\r\n                    this.parentScope.customModalDlg2Buttons = [];\r\n                }\r\n\r\n                this.parentScope.callbackModal2 = function (code) {\r\n                    console.log('callbackModal2 called');\r\n                    THIS.hideButtons = true;\r\n                    THIS.isProgressShown = false;\r\n                    THIS.showProgressDialog();\r\n                    THIS.cancelCurrentTransaction();\r\n                    return true;\r\n                }\r\n\r\n                $timeout(function () { helperService.showDialog('#customModalDlg2'); });\r\n            }\r\n        }\r\n\r\n        this.hideProgressDialog = function (force) {\r\n            if (this.isProgressShown || force) {\r\n                this.isProgressShown = false;\r\n\r\n                $timeout(function () {\r\n                    helperService.closeDialog('#customModalDlg2');\r\n                });\r\n            }\r\n        };\r\n\r\n        this.cancelCurrentTransaction = function () {\r\n            var settings = configService.getCardPaymentSettings();\r\n\r\n            if (this.isSocketReady()) {\r\n\r\n                this.customModalDlg2Text2 = '';\r\n                this.customModalDlg2Text = \"Cancelling transaction...\";\r\n            }\r\n\r\n            return this.sendRequest(\"cancelTransaction\", { \"tpi\": settings.PaymentSenseTerminalID });\r\n        };\r\n\r\n        this.timerID = 0;\r\n        var THIS = this;\r\n        this.keepAlive = function() {\r\n            var timeout = 10000;\r\n            if (THIS.isSocketReady()) {\r\n                let params = {\r\n                    jsonrpc: \"2.0\",\r\n                    method: \"ping\",\r\n                    id: 0\r\n                };\r\n                THIS.socket.send(JSON.stringify(params));\r\n            }\r\n            THIS.timerId = setTimeout(THIS.keepAlive, timeout);\r\n        }\r\n\r\n        this.cancelKeepAlive = function() {\r\n            if (THIS.timerId) {\r\n                clearTimeout(THIS.timerId);\r\n            }\r\n        }\r\n    }\r\n]);\r\n","angular.\r\n  module('mainApp').\r\n  filter('getDateByFormat', function(helperService) {\r\n    return function(input, format) {\r\n      return helperService.getDateByFormatAlreadyLocal(input, format);\r\n    };\r\n  });","import html2canvas from 'html2canvas';\r\n\r\nangular.module('services').service('printService', [\r\n    '$q', 'helperService', 'errorService', 'constants', 'configService', 'gettextCatalog', '$http', '$rootScope', '$timeout', '$sce', '$compile','uuid2',\r\nfunction ($q, helperService, errorService, constants, configService, gettextCatalog, $http, $rootScope, $timeout, $sce, $compile,uuid2) {\r\n\r\n    this.printerName = null;\r\n    this.paperWidthCode = 3; // defined by dpi and paper width in cm/inches\r\n    this.simulatorMode = false;\r\n    this.printSystem = 'star';\r\n    this.isCloverPrinter = false;\r\n    this.deviceIsStarted = false; // true if any device is connected (star printer mPOP). Not for clover\r\n    this.needReconnection = false;\r\n\r\n    this.preparePrintTemplate = function (scope, element, attrs, tpl) {\r\n        if (angular.isDefined(tpl)) {\r\n\r\n            // adding special attributes for terimnal print areas\r\n\r\n            // to hide native fonts and replace them by smaller font to show on page.\r\n            // when printing - all fonts will be restored\r\n                   // for images set width limit to maximum printer width\r\n            let el = null;\r\n            if (typeof (tpl) == 'string' && tpl.length > 0) {\r\n                var tel = $(tpl);\r\n                if (attrs.ngmHideFonts == 'yes') {\r\n                    tel.find('[style*=\"font-size\"]').each(function () {\r\n                        var sz = $(this).css('font-size');\r\n                        $(this).css('font-size', '');\r\n                        $(this).attr('ngm-font-size', sz);\r\n                    });\r\n                }\r\n                \r\n                this.fixTerimnalPrintingInTemplate(tel);\r\n                this.fixCashPrintingInTemplate(tel);\r\n                this.fixReceipts(tel);\r\n\r\n                helperService.getReceiptProcessSettings(tel);\r\n                this.preprocessElement(tel);\r\n\r\n                el = $compile(tel.html())(scope);\r\n            }\r\n            else {\r\n                if (tpl !== '') {\r\n                    helperService.getReceiptProcessSettings(tpl);\r\n                    this.preprocessElement(tpl);\r\n                }\r\n\r\n                el = $compile(tpl)(scope);\r\n            }\r\n\r\n            element.html(\"\");\r\n            element.append(el);\r\n        }\r\n    }; \r\n\r\n    const fixReceipt = function (tel, attrNgm = 'ngm-terminal') {\r\n        return (function () {\r\n            var ed = $(`<div ${attrNgm} style='display:none;'></div>`);\r\n            var startTab = $(this);\r\n\r\n            // move all elements to div. This will simplify receipt print management\r\n            $(this).nextUntil('[ng-repeat-end]').each(function () {\r\n                var element = $(this).detach();\r\n                var atr = null;\r\n                element.find('[ngm-font-size]').each(function () {\r\n                    $(this).css('font-size', $(this).attr('ngm-font-size'));\r\n                });\r\n                atr = $(this).attr('style');\r\n                var dv = $(\"<div style='\"+(!!atr ? atr : \"\")+\"'></div>\");\r\n                dv.append(element);\r\n                ed.append(dv);\r\n                dv.show(); // remove hide\r\n            });\r\n\r\n            ed.append(tel.find('[print-setting]'));\r\n\r\n            startTab.after(ed);\r\n        });\r\n    };\r\n\r\n    // adding attribute to terminal receipt part to print them differently\r\n    this.fixTerimnalPrintingInTemplate = function (tel) {\r\n        tel.find('[ng-repeat-start=\"itemVantivTerminalReceipts in receiptSaleModel.VantivTerminalReceipts\"]').each(function () {\r\n            var ed = $(\"<div ngm-terminal style='display:none'></div>\");\r\n            var startTab = $(this);\r\n\r\n            // move all elements to div. This will simplify receipt print management\r\n            $(this).nextUntil('[ng-repeat-end]').each(function () {\r\n                var element = $(this).detach();\r\n                ed.append(element);\r\n            });\r\n\r\n            startTab.after(ed);\r\n        });\r\n\r\n        tel.find('span:contains(\"{{itemVantivTerminalReceipts.VantivSignature}}\")').each(function () {\r\n            if ($(this).text() === \"{{itemVantivTerminalReceipts.VantivSignature}}\") {\r\n                $(this).replaceWith(\"<img ng-if='!!itemVantivTerminalReceipts.VantivSignature' src='{{itemVantivTerminalReceipts.VantivSignature}}'></img>\");\r\n            }\r\n        });\r\n\r\n        \r\n        tel.find('[ng-repeat-start=\"itemVantivTags in receiptSaleModel.itemVantivTerminalReceipts.VantivTags\"]').each(function () {\r\n            $(this).attr('ng-repeat-start', \"itemVantivTags in itemVantivTerminalReceipts.VantivTags\");\r\n        });\r\n\r\n        tel.find('span:contains(\"{{itemVantivTerminalReceipts.Parent.\")').each(function () {\r\n            if ($(this).text().indexOf(\"{{itemVantivTerminalReceipts.Parent.\") == 0) {\r\n                var txt = $(this).text();\r\n                txt = txt.replace(\"{{itemVantivTerminalReceipts.Parent.\", \"{{receiptSaleModel.\");\r\n                $(this).text(txt);\r\n            }\r\n        });\r\n    };\r\n\r\n    this.fixReceipts = function(tel) {\r\n        const vars = ['TyroTerminalReceipts', 'LinklyTerminalReceipts', 'TerminalReceipts'];\r\n        vars.forEach(v => {\r\n            tel.find(`[ng-repeat-start=\"item${v} in receiptSaleModel.${v}\"]`).each(fixReceipt(tel));\r\n        });\r\n    }\r\n\r\n    this.fixCashPrintingInTemplate = function (tel) {\r\n        tel.find('[ng-repeat-start=\"itemCashManagementReceipts in receiptSaleModel.CashManagementReceipts\"]').each(fixReceipt(tel, 'ngm-cashmanagement'));\r\n\r\n        tel.find('span:contains(\"{{itemCashManagementReceipts.Parent.\")').each(function () {\r\n            if ($(this).text().indexOf(\"{{itemCashManagementReceipts.Parent.\") == 0) {\r\n                var txt = $(this).text();\r\n                txt = txt.replace(\"{{itemCashManagementReceipts.Parent.\", \"{{receiptSaleModel.\");\r\n                $(this).text(txt);\r\n            }\r\n        });\r\n\r\n    };\r\n\r\n    // for star printers defines by name some additional parameters\r\n    this.detectPrinterByName = function (printSystem, name, modelName, macAddress) {\r\n        var res = {\r\n            macAddress: macAddress,\r\n            portName: name,\r\n            modelName: modelName,\r\n            printerWidthCode: 3,\r\n            hasCashDrawer: true,\r\n            hasInternalScanner: false\r\n        };\r\n\r\n        if (printSystem == 'star' || printSystem == 'epson') {\r\n            res.printSystem = printSystem;\r\n\r\n            if (name) {\r\n                if (name.indexOf('BT:') == 0) {\r\n                    res.interface = 'bluetooth';\r\n                    name = name.substr(3);\r\n                }\r\n                else if (name.indexOf('TCP:') == 0) {\r\n                    res.interface = 'network';\r\n                    name = name.substr(4);\r\n                }\r\n                else if (name.indexOf('USB:') == 0) {\r\n                    res.interface = 'usb';\r\n                    name = name.substr(4);\r\n                }\r\n                else \r\n                    throw new Error('unknown printer type');\r\n            }\r\n            \r\n            if (printSystem == 'epson') {\r\n                name = modelName || name;\r\n            }\r\n\r\n            res.portable = false;\r\n            res.printerName = name;\r\n\r\n            if (name?.indexOf('mPOP') >= 0) {\r\n                res.portable = true;\r\n                res.printerWidthCode = 2;\r\n                res.hasCashDrawer = true;\r\n                res.hasInternalScanner = true;\r\n            }\r\n        }\r\n        console.log('discover printer by name:')\r\n        console.log(res);\r\n\r\n        return res;\r\n    };\r\n\r\n    this.printerOnline = false;\r\n    this.printerPaperNearEmpty = false;\r\n    this.printerPaperEmpty = false;\r\n    this.printerCoverOpen = false;\r\n    this.barcodeScannerOnline = false;\r\n    this.cashDrawerOpen = false;\r\n    this.currentSettings = {};\r\n\r\n    var THIS = this;\r\n    this.eventListenerProcessor = function (evt) {\r\n        console.log('eventListenerProcessor: ' + JSON.stringify(evt));\r\n        if (!THIS.deviceIsStarted && THIS.printSystem == 'star') return;\r\n        if (!THIS.deviceIsStarted && THIS.printSystem == 'epson'\r\n        && evt.dataType != 'printerOnline'\r\n        && evt.dataType != 'printerPaperReady'\r\n        && evt.dataType != 'printerCoverClose') return;\r\n\r\n        var callUpdate = true;\r\n        var message = '';\r\n\r\n        switch (evt.dataType) {\r\n            case 'printerImpossible':\r\n            case 'printerOffline':\r\n                this.printerOnline = false;\r\n                if(THIS.printSystem == 'epson') {\r\n                    THIS.deviceIsStarted = false;\r\n                }\r\n                message = gettextCatalog.getString('Printer is offline.');\r\n                break;\r\n            case 'printerOnline':\r\n                this.printerOnline = true;\r\n                if(THIS.printSystem == 'epson') {\r\n                    THIS.deviceIsStarted = true;\r\n                }\r\n                break;\r\n            case 'printerPaperReady':\r\n                this.printerPaperNearEmpty = false;\r\n                this.printerPaperEmpty = false;\r\n                if(THIS.printSystem == 'epson') {\r\n                    THIS.deviceIsStarted = true;\r\n                }\r\n                break;\r\n\r\n            case 'printerPaperNearEmpty':\r\n                this.printerPaperNearEmpty = true;\r\n                this.printerPaperEmpty = false;\r\n                break;\r\n\r\n            case 'printerPaperEmpty':\r\n                this.printerPaperNearEmpty = false;\r\n                this.printerPaperEmpty = true;\r\n                message = gettextCatalog.getString('Paper roll is empty. Please replace the paper.');\r\n                break;\r\n\r\n            case 'printerCoverOpen':\r\n                this.printerCoverOpen = true;\r\n                message = gettextCatalog.getString('Printer cover is open.');\r\n                break;\r\n\r\n            case 'printerCoverClose':\r\n                this.printerCoverOpen = false;\r\n                if(THIS.printSystem == 'epson') {\r\n                    THIS.deviceIsStarted = true;\r\n                }\r\n                break;\r\n\r\n            case 'barcodeReaderImpossible': \r\n            case 'barcodeReaderDisconnect':\r\n                {\r\n                    this.barcodeScannerOnline = false;\r\n                    var status = this.barcodeScannerOnline === true ? 'ok' : 'error';\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('header.scannerStatus', status);\r\n                    });\r\n                }\r\n                break;\r\n\r\n            case 'barcodeReaderConnect':\r\n                {\r\n                    this.barcodeScannerOnline = true;\r\n                    var status = this.barcodeScannerOnline === true ? 'ok' : 'error';\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('header.scannerStatus', status);\r\n                    });\r\n                }\r\n                break;\r\n\r\n            case 'barcodeDataReceive':\r\n                {\r\n                    var cd = evt.data;\r\n                    if (!!evt.data) {\r\n                        cd = cd.replace('\\r', '');\r\n                        cd = cd.replace('\\n', '');\r\n                        cd = cd.trim();\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('scan.barcode', cd);\r\n                    });\r\n                }\r\n                break;\r\n\r\n            case 'cashDrawerOpen':\r\n                {\r\n                    this.cashDrawerOpen = true;\r\n\r\n                    var status = this.cashDrawerOpen === false ? 'ok' : 'error';\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('header.tillStatus', status);\r\n                    });\r\n                }\r\n                callUpdate = false;\r\n                break;\r\n\r\n            case 'cashDrawerClose':\r\n                {\r\n                    this.cashDrawerOpen = false;\r\n\r\n                    var status = this.cashDrawerOpen === false ? 'ok' : 'error';\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('header.tillStatus', status);\r\n                    });\r\n                }\r\n                callUpdate = false;\r\n                break;\r\n\r\n            case 'statusUpdate':\r\n                callUpdate = false;\r\n                break;\r\n\r\n            default:\r\n                callUpdate = false;\r\n        }\r\n\r\n        if (callUpdate) {\r\n            var status = (!this.printerOnline || this.printerCoverOpen || this.printerPaperEmpty) ? 'error' :\r\n                        (this.printerPaperNearEmpty ? 'warning' : 'ok');\r\n\r\n            if (status === 'error' && message) {\r\n                errorService.showError(message);\r\n            }\r\n\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('header.printerStatus', status);\r\n            });\r\n        }\r\n    };\r\n\r\n    window.addEventListener('starIOPluginData', this.eventListenerProcessor);\r\n\r\n    this.hasCashDrawer = function () {\r\n        var THIS = this;\r\n        return this.applyPrinterSettings().then(function (settings) {\r\n            var deffered = $q.defer();\r\n            deffered.resolve(THIS.currentSettings.hasCashDrawer);\r\n            return deffered.promise;\r\n        });\r\n    };\r\n\r\n    // stop print (combo) device\r\n    this.disconnect = function () {\r\n        console.log('printService.disconnect');\r\n        var THIS = this;\r\n\r\n        var deffered = $q.defer();\r\n\r\n        return this.applyPrinterSettings().then(function (settings) {\r\n            return THIS.internalDisconnect(settings);\r\n        })\r\n        .then(function (res) {\r\n            deffered.resolve(res);\r\n        },\r\n        function (err) {\r\n            deffered.reject(err);\r\n        });\r\n\r\n        return deffered.promise;\r\n    };\r\n\r\n    this.internalDisconnect = function (settings) {\r\n        var THIS = this;\r\n        var deffered = $q.defer();\r\n\r\n        if (!this.deviceIsStarted) {\r\n            deffered.resolve(settings);\r\n            return deffered.promise;\r\n        }\r\n\r\n        if (!THIS.simulatorMode && configService.isMobile) {\r\n            if (settings.printSystem != 'star' && settings.printSystem != 'epson') {\r\n                console.log(\"start device is bypassed\");\r\n                this.deviceIsStarted = false;\r\n                deffered.resolve(settings);\r\n            }\r\n            else if(settings.printSystem == 'epson') {\r\n                console.log(\"trying to disconnect\");\r\n                window.plugins.starPrinter.disconnectEpson(\r\n                    function (err, result) {\r\n                        if (err) {\r\n                            console.log(\"device is busy\");\r\n                            deffered.reject(err);\r\n                        }\r\n                        else {\r\n                            console.log(\"device is disconnected\");\r\n                            THIS.deviceIsStarted = false;\r\n                            deffered.resolve(settings);\r\n                        }\r\n                    });\r\n            }\r\n            else if(settings.printSystem == 'star') {\r\n                console.log(\"trying to disconnect\");\r\n                window.plugins.starPrinter.disconnect(\r\n                    function (err, result) {\r\n\r\n                        if (err) {\r\n                            console.log(\"device is busy\");\r\n                            deffered.reject(err);\r\n                        }\r\n                        else {\r\n                            console.log(\"device is disconnected\");\r\n                            THIS.deviceIsStarted = false;\r\n                            deffered.resolve(settings);\r\n                        }\r\n                    });\r\n            }\r\n\r\n            return deffered.promise;\r\n        }\r\n        else {\r\n            console.log(\"connect printer in emulator is done\");\r\n            deffered.resolve(settings);\r\n        }\r\n\r\n        return deffered.promise;\r\n    };\r\n\r\n    this.internalConnect = function (settings) {\r\n        var deffered = $q.defer();\r\n\r\n        if (THIS.deviceIsStarted) {\r\n            deffered.resolve(null);\r\n            return deffered.promise;\r\n        }\r\n\r\n        if (!THIS.simulatorMode && configService.isMobile) {\r\n            if (settings.printSystem != 'star' && settings.printSystem != 'epson') {\r\n                console.log(\"start device is bypassed\");\r\n                THIS.deviceIsStarted = true;\r\n                deffered.resolve({ status: 'success' });\r\n            }\r\n            else if(settings.printSystem == 'star') {\r\n                if(!settings.printerName) {\r\n                    THIS.deviceIsStarted = false;\r\n                    deffered.reject(\"Printer wasn't set yet.\");\r\n                    return deffered.promise;\r\n                }\r\n                console.log(\"trying to connect\");\r\n                THIS.deviceIsStarted = true; // should be before real call because fo ios there is no event or delay so without this some events can be lost\r\n                window.plugins.starPrinter.connect(THIS.printerName, \r\n                    settings.hasInternalScanner === true, \r\n                    THIS.printMode,\r\n                    THIS.currentSettings.portSettings,\r\n//                window.plugins.starPrinter.connect(THIS.printerName, true,\r\n                    function (err, result) {\r\n                        if (err) {\r\n                            console.log(\"device is not connected\");\r\n                            THIS.deviceIsStarted = false;\r\n\r\n                            deffered.reject(err);\r\n                        }\r\n                        else {\r\n                            if (result === true || (!!result && typeof (result.dataType) == 'string')) {\r\n                                console.log(\"device is connected\");\r\n                                THIS.deviceIsStarted = true;\r\n                                deffered.resolve(result);\r\n                            }\r\n                            else {\r\n                                console.log(\"device is not connected\");\r\n                                THIS.deviceIsStarted = false;\r\n\r\n                                deffered.reject(\"failure\");\r\n                            }\r\n                        }\r\n                    });\r\n            }\r\n            else if(settings.printSystem == 'epson') {\r\n                if(!settings.printerName) {\r\n                    THIS.deviceIsStarted = false;\r\n                    deffered.reject(\"Printer wasn't set yet.\");\r\n                    return deffered.promise;\r\n                }\r\n                if (!THIS.printerName) {\r\n                    THIS.deviceIsStarted = false;\r\n                    deffered.reject(\"Printer port wasn't set yet.\");\r\n                    return deffered.promise;\r\n                }\r\n                THIS.deviceIsStarted = true; // should be before real call because fo ios there is no event or delay so without this some events can be lost\r\n                window.plugins.starPrinter.connectEpson(THIS.printerName, \r\n                    THIS.currentSettings.printerModel,\r\n                    function (err, result) {\r\n                        if (err) {\r\n                            console.log(\"device is not connected\");\r\n                            THIS.deviceIsStarted = false;\r\n                            deffered.reject(err);\r\n                        }\r\n                        else {\r\n                            if (result === true || (!!result && typeof (result.dataType) == 'string')) {\r\n                                console.log(\"device is connected\");\r\n                                THIS.deviceIsStarted = true;\r\n                                deffered.resolve(result);\r\n                            }\r\n                            else {\r\n                                console.log(\"device is not connected\");\r\n                                THIS.deviceIsStarted = false;\r\n                                deffered.reject(\"failure\");\r\n                            }\r\n                        }\r\n                    });\r\n            }\r\n\r\n            return deffered.promise;\r\n        }\r\n        else {\r\n            console.log(\"connect star in emulator is done\");\r\n            deffered.resolve(null);\r\n        }\r\n\r\n        return deffered.promise;\r\n    };\r\n\r\n    this.reconnect = function (noScanner) {\r\n        return this.applyPrinterSettings().then(function (settings) {\r\n            if (settings.hasInternalScanner === true && settings.needReconnection === true) {\r\n                return THIS.disconnect().then(function (res) { return THIS.connect(noScanner); });\r\n            }\r\n            else\r\n                return THIS.connect();\r\n        })\r\n    };\r\n\r\n\r\n    // connect to print (combo) device if settings are set\r\n    // new call to this function will reconnect with new settings\r\n    this.connect = function (noScanner) {\r\n        var deffered = $q.defer();\r\n        console.log('printService.connect');\r\n\r\n        this.applyPrinterSettings(noScanner).then(function (settings) {\r\n            console.log('printService.connect first attempt');\r\n            return THIS.internalConnect(settings);\r\n        }).then(function (res) {\r\n            deffered.resolve(res);\r\n        },\r\n        function (err) {\r\n            console.log('printService.connect attempt failed');\r\n            deffered.reject(false);\r\n\r\n            //// try once more\r\n            //THIS.applyPrinterSettings(noScanner).then(function (settings) {\r\n            //    console.log('printService.connect second attempt');\r\n            //    return THIS.internalConnect(settings);\r\n            //})\r\n            //.then(function (res) {\r\n            //    deffered.resolve(res);\r\n            //},\r\n            //function (err) {\r\n            //    // try once more\r\n            //    THIS.applyPrinterSettings(noScanner).then(function (settings) {\r\n            //        console.log('printService.connect third attempt');\r\n            //        return THIS.internalConnect(settings);\r\n            //    })\r\n            //    .then(function (res) {\r\n            //        deffered.resolve(res);\r\n            //    },\r\n            //    function (err) {\r\n            //        console.log('printService.connect three attempts were failed');\r\n            //        deffered.reject(false);\r\n            //    });\r\n            //});\r\n        });\r\n\r\n        return deffered.promise;\r\n    };\r\n\r\n    this.discoverAvailablePrinters = function (printerSystem) {\r\n        THIS = this;\r\n        var res = [];\r\n        var deffered = $q.defer();\r\n\r\n\r\n        if (!configService.isMobile) {\r\n            deffered.resolve(res);\r\n        }\r\n        else if (printerSystem === 'epson') {\r\n            window.plugins.starPrinter.portDiscoveryEpson(function (err, result) {\r\n                if (err) {\r\n                    console.log(\"portDiscoveryEpson error: \" + err);\r\n                    deffered.resolve(res);\r\n                }\r\n                else {\r\n                    console.log(\"portDiscoveryEpson is done:\" + JSON.stringify(result));\r\n                    if (result) {\r\n                        $.each(result, function (i, e) {\r\n                            res.push(THIS.detectPrinterByName(printerSystem,\r\n                                                              (!!e.target ? e.target : e.deviceName),\r\n                                                              (!!e.deviceName ? e.deviceName : null), e.macAddress));\r\n                        });\r\n                    }\r\n\r\n                    deffered.resolve(res);\r\n                    console.log(\"portDiscovery result:\" + JSON.stringify(res));\r\n                }\r\n            });\r\n        }\r\n        else {\r\n            window.plugins.starPrinter.portDiscovery('All', function (err, result) {\r\n                if (err) {\r\n                    console.log(\"portDiscovery error: \" + err);\r\n                    deffered.resolve(res);\r\n                }\r\n                else {\r\n                    console.log(\"portDiscovery is done:\" + JSON.stringify(result));\r\n                    if (result) {\r\n                        $.each(result, function (i, e) {\r\n                            res.push(THIS.detectPrinterByName(printerSystem,\r\n                                                              (!!e.name ? e.name : e.portName),\r\n                                                              (!!e.modelName ? e.modelName : null), e.macAddress));\r\n                        });\r\n                    }\r\n\r\n                    deffered.resolve(res);\r\n                    console.log(\"portDiscovery result:\" + JSON.stringify(res));\r\n                }\r\n            });\r\n        }\r\n\r\n        return deffered.promise;\r\n    }\r\n\r\n    this.applyPrinterSettings = function (forceNoScanner) {\r\n\r\n//        var settings = configService.getPrinterSettings(configService.isSite);\r\n        var settings = configService.getPrinterSettings(true);\r\n\r\n        this.needReconnection = false;//settings.hasInternalScanner===true && buildConfiguration.platform == 'android';\r\n        settings.needReconnection = this.needReconnection;\r\n\r\n        if (forceNoScanner === true)\r\n            settings.hasInternalScanner = false;\r\n\r\n        this.currentSettings = settings;\r\n\r\n        if (configService.isSite || this.simulatorMode || configService.isEmulator) {\r\n            this.deviceIsStarted = true;\r\n        }\r\n\r\n        if (!settings) {\r\n            var deffered = $q.defer();\r\n            deffered.reject('Printer is not installed');\r\n            return deffered.promise;\r\n        }\r\n\r\n        this.paperWidthCode = settings.printerWidthCode;\r\n        this.printerWidthPoints = settings.printerWidthPoints;\r\n        this.simulatorMode = settings.simulatorMode;\r\n        this.printSystem = settings.printSystem;\r\n        this.printMode = settings.portable === true ? 'portable' : 'standard';\r\n\r\n        console.log('settings:' + JSON.stringify(settings));\r\n\r\n        var fun = this.initPrinter;\r\n\r\n        if (!configService.isSite) {\r\n\r\n            if (configService.isClover && THIS.printSystem == 'clover')\r\n                fun = this.initCloverPrinter;\r\n            else\r\n                if (THIS.printSystem == 'star')\r\n                    fun = this.initStarPrinter;\r\n                if (THIS.printSystem == 'epson')\r\n                    fun = this.initEpsonPrinter;\r\n        }\r\n\r\n\r\n        return fun(this, settings);\r\n    }\r\n\r\n    this.openCashDrawer = function () {\r\n        var THIS = this;\r\n        if (!THIS.currentSettings || !THIS.currentSettings.printerName) {\r\n            var deffered = $q.defer();\r\n            console.log(\"open drawer is bypassed\");\r\n            deffered.resolve({ status: 'success' });\r\n            return deffered.promise;\r\n        }\r\n\r\n        return this.applyPrinterSettings()\r\n        .then(function () {\r\n            var deffered = $q.defer();\r\n\r\n            if (!THIS.simulatorMode && configService.isMobile) {\r\n                if (!THIS.currentSettings.hasCashDrawer || (configService.isClover && THIS.printSystem == 'clover')) {\r\n                    console.log(\"open drawer is bypassed\");\r\n                    deffered.resolve({ status: 'success' });\r\n                }\r\n                else {\r\n                    if (THIS.printSystem == 'star') {\r\n                        window.plugins.starPrinter.openCashDrawer(THIS.printerName,\r\n                            THIS.currentSettings.portSettings,\r\n                            THIS.currentSettings.emulation,\r\n                            function (err, result) {\r\n                                if (err) {\r\n                                    console.log(\"printer is not connected: \" + JSON.stringify(err));\r\n                                    $.unblockUI();\r\n                                    errorService.showError(gettextCatalog.getString(\"Can't open cash drawer automatically: \") + err, function () {\r\n                                        $.blockUI();\r\n                                        deffered.resolve(err);\r\n                                    });\r\n                                }\r\n                                else {\r\n                                    console.log(\"open drawer is done\");\r\n                                    deffered.resolve(result);\r\n                                }\r\n                            });\r\n                    }\r\n                    else if (THIS.printSystem == 'epson') {\r\n                        window.plugins.starPrinter.openCashDrawerEpson(THIS.printerName,\r\n                            THIS.currentSettings.printerModel,\r\n                            function (err, result) {\r\n                                if (err) {\r\n                                    console.log(\"printer is not connected: \" + JSON.stringify(err));\r\n                                    $.unblockUI();\r\n                                    errorService.showError(gettextCatalog.getString(\"Can't open cash drawer automatically: \") + err, function () {\r\n                                        $.blockUI();\r\n                                        deffered.resolve(err);\r\n                                    });\r\n                                }\r\n                                else {\r\n                                    console.log(\"open drawer is done\");\r\n                                    deffered.resolve(result);\r\n                                }\r\n                            });\r\n                    }\r\n                }\r\n\r\n                return deffered.promise;\r\n            }\r\n            else {\r\n                console.log(\"open drawer in emulator is done\");\r\n                deffered.resolve(null);\r\n            }\r\n\r\n            return deffered.promise;\r\n\r\n        });\r\n\r\n    };\r\n\r\n    this.checkPrinterConnection = function () {\r\n        var THIS = this;\r\n\r\n        return this.applyPrinterSettings()\r\n            .then(function (settings) {\r\n                var deffered = $q.defer();\r\n\r\n                if (!THIS.simulatorMode && configService.isMobile) {\r\n                    if (configService.isClover && settings.printSystem == 'clover') {\r\n                        console.log(\"print connection is done\");\r\n                        deffered.resolve({ status: 'success' });\r\n                    }\r\n                    else\r\n                        if (settings.printSystem == 'epson') {\r\n                            window.plugins.starPrinter.checkStatusEpson(THIS.printerName, THIS.printerModel,\r\n                                function (err, result) {\r\n                                    if (err) {\r\n                                        console.log(\"printer is not connected\");\r\n                                        deffered.reject(err);\r\n                                    }\r\n                                    else {\r\n                                        console.log(\"printer connection is done\");\r\n                                        deffered.resolve(result);\r\n                                    }\r\n                                });\r\n                        }\r\n                        else {\r\n                            window.plugins.starPrinter.checkStatus(THIS.printerName, THIS.printMode,\r\n                                function (err, result) {\r\n                                    if (err) {\r\n                                        console.log(\"print is not connected\");\r\n                                        deffered.reject(err);\r\n                                    }\r\n                                    else {\r\n                                        console.log(\"print connection is done\");\r\n                                        deffered.resolve(result);\r\n                                    }\r\n                                });\r\n                        }\r\n\r\n                    return deffered.promise;\r\n                }\r\n                else {\r\n                    console.log(\"print connection in emulator is done\");\r\n                    deffered.resolve(null);\r\n                }\r\n\r\n                return deffered.promise;\r\n\r\n            });\r\n    };\r\n\r\n    this.printTest = function () {\r\n        var THIS = this;\r\n        var ht = '<div><h2>Receipt print test</h2></div>';\r\n        return this.printReceiptFromHTML($(ht));\r\n    };\r\n\r\n    // complex printing. All elements to print will be collected and printed on last call\r\n\r\n    this.printDataContainer = [];\r\n\r\n    // collectMode == 1 - collect data to array\r\n    // collectMode == 0 - print all\r\n    // other values - simple print in place\r\n    this.collectMode = null;\r\n\r\n    this.initPrintCollectMode = function () {\r\n        this.printDataContainer = [];\r\n        this.collectMode = 1;\r\n    };\r\n\r\n    this.finishPrintCollectMode = function () {\r\n        this.collectMode = 0;\r\n    };\r\n\r\n    this.resetPrintCollectMode = function () {\r\n        this.collectMode = null;\r\n        this.printDataContainer = [];\r\n    };\r\n\r\n    this.printReceiptFromHTML = function (el, width) {\r\n        if (this.collectMode === 0 && !(configService.isSite && !this.simulatorMode)) {\r\n            // real mobile device or emulator\r\n            // all receipts print on by one\r\n            var q = $q.defer();\r\n            q.resolve(null);\r\n            var pr = q.promise;\r\n            var THIS = this;\r\n\r\n            angular.forEach(this.printDataContainer, function (e) {\r\n                if (!!e && !!e.data && e.data.length > 0) {\r\n                    pr = pr.then(function(res){\r\n                        return THIS.printReceiptFromHTMLInternal(e.data[0], e.width);\r\n                    });\r\n                }\r\n            });\r\n\r\n            return pr;\r\n        }\r\n        else\r\n            return this.printReceiptFromHTMLInternal(el, width);\r\n    };\r\n\r\n    this.preprocessElement = function (el, width) {\r\n        var THISFunc = this;\r\n        // get all process attributes\r\n        var settings = {};\r\n        el.find('div[print-setting]').each(function () {\r\n            var e = $(this);\r\n            var txt = e.attr('print-setting');\r\n            if (!!txt)\r\n                settings[txt] = true;\r\n        });\r\n\r\n        if (settings.FontScaleRelativeTo3inch === true && !!width) {\r\n            var coeff = width / 566;\r\n\r\n            el.find(\"[style*='width:']\").each(function () {\r\n                var e = $(this);\r\n                if (!!e[0] && !!e[0].style['width']) {\r\n                    var w = e.css('width');\r\n\r\n                    var obj = THIS.replaceValue(w);\r\n                    if (!!obj)\r\n                        e.css('width', (obj.v * coeff) + obj.ext);\r\n                }\r\n            });\r\n\r\n            el.find(\"[style*='font-size:']\").each(function () {\r\n                var e = $(this);\r\n                if (!!e[0] && !!e[0].style['font-size']) {\r\n                    var sz = e.css('font-size');\r\n                    var obj = THIS.replaceValue(sz);\r\n                    if (!!obj)\r\n                        e.css('font-size', (obj.v * coeff) + obj.ext);\r\n                }\r\n            });\r\n        }\r\n\r\n        if (!THISFunc.simulatorMode && !configService.isEmulator && !configService.isSite){\r\n            el.find('pre').each(function() {\r\n                var e = $(this);\r\n                if (!!e[0] && !e[0].style['font-family']) {\r\n                    var str = Array.prototype.slice.call(e[0].childNodes).find(x => !!x.data).data;\r\n                    var copy = e.clone();\r\n                    copy.css({'visibility': 'hidden'});\r\n                    copy.css({'width': 'auto'});\r\n                    var hidden = copy.appendTo('body');\r\n                    var widthOfText = hidden.width();\r\n                    var widthPerChar = widthOfText / (str.length == 0 ? 1 : str.length);\r\n                    hidden.remove();\r\n    \r\n                    var containerWidth = width;\r\n                    var k = containerWidth / (widthOfText * 0.75);\r\n                    var fontSize = k * widthPerChar;\r\n    \r\n                    e.css({'fontSize': fontSize+'pt'});\r\n                }\r\n            });\r\n        }\r\n\r\n        if (settings.BreakWordsInTable === true) {\r\n            el.find(\"table\").each(function () {\r\n                var e = $(this);\r\n                e.css('word-break', 'break-all');\r\n                e.css('word-wrap', 'break-word');\r\n            });\r\n        }\r\n    };\r\n\r\n    this.replaceValue = function (val) {\r\n\r\n        var ext = '';\r\n        var v = 0;\r\n\r\n        if (!!val) {\r\n            v = parseFloat(val);\r\n            ext = val.replace(/[-\\d\\.]/g, '');\r\n\r\n            if (ext == 'pt' ||\r\n                ext == 'px' ||\r\n                !ext) {\r\n                return { ext: ext, v: v };\r\n            }\r\n        }\r\n\r\n        return null;\r\n    };\r\n\r\n    this.printReceiptFromHTMLInternal = function (el, width) {\r\n        var THIS = this;\r\n        var printDataContainerLocal = [];\r\n        var collectModeLocal = this.collectMode;\r\n\r\n        if (collectModeLocal === 0) {\r\n            printDataContainerLocal = this.printDataContainer;\r\n        }\r\n\r\n        console.log('printReceiptFromHTML start');\r\n        // at first convert html from pointed element to image in canvas\r\n        return this.applyPrinterSettings()\r\n        .then(function () {\r\n                console.log('printReceiptFromHTML applyPrinterSettings finished. Printer name:' + THIS.printerName);\r\n\r\n                if (collectModeLocal === 1) {\r\n                    // collect data\r\n                    var q = $q.defer();\r\n                    var cln = $(el).clone();\r\n                    //THIS.preprocessElement(cln, !!width ? width : THIS.printerWidthPoints);\r\n                    THIS.printDataContainer.push({ data: cln, width: width });\r\n                    q.resolve(null);\r\n                    return q.promise;\r\n                }\r\n\r\n                if (configService.isSite && !THIS.simulatorMode) {\r\n\r\n                    //if (collectModeLocal === 1) {\r\n                    //    // collect data\r\n                    //    var q = $q.defer();\r\n                    //    THIS.printDataContainer.push({ data: $(el).clone(), width: width });\r\n                    //    q.resolve(null);\r\n                    //}\r\n                    if (collectModeLocal === 0) {\r\n                        // print collected\r\n                        var q = $q.defer();\r\n\r\n                        if (!!printDataContainerLocal && printDataContainerLocal.length > 0) {\r\n                            // combine all in one\r\n                            let html = $('<div/>');\r\n\r\n                            var isFirst = true;\r\n                            angular.forEach(printDataContainerLocal, function (el) {\r\n                                if (!isFirst) {\r\n                                    html = html.append('<p style=\"page-break-after: always;\"></p>');\r\n                                }\r\n\r\n                                html = html.append(el.data);\r\n                                isFirst = false;\r\n                            });\r\n\r\n                            html.printArea();\r\n                            $timeout(function () { q.resolve(null); }, 500);\r\n                        }\r\n                        else {\r\n                            q.resolve(null);\r\n                        }\r\n                        \r\n                    }\r\n                    else {\r\n                        // simple print\r\n                        var q = $q.defer();\r\n                        $(el).printArea();\r\n                        q.resolve(null);\r\n                    }\r\n\r\n                    return q.promise;\r\n                }\r\n\r\n                var e = $(el);\r\n\r\n                // for images set width limit to maximum printer width\r\n                e.find('img').each(function () {\r\n                    $(this).css('max-width', (THIS.printerWidthPoints-20) + 'px');\r\n                });\r\n\r\n                var cnt = THIS.createPrintContainer(e, THIS.printerWidthPoints);\r\n                e = $(cnt.contentDocument.getElementById('printerAreaID'));\r\n                console.log('printReceiptFromHTML createPrintContainer finished');\r\n\r\n\r\n            if (configService.isEmulator || THIS.simulatorMode) {\r\n                var q = $q.defer();\r\n                html2canvas(e[0])\r\n                    .then(function (res) {\r\n                        q.resolve(res);\r\n                    })\r\n                    .catch(function (ex) {\r\n                        q.reject(ex);\r\n                    });\r\n                return q.promise;\r\n            }\r\n\r\n            var q = $q.defer();\r\n            var s = e.parent().parent().html().replace('<head></head>', '');\r\n            q.resolve({\r\n                printerName: THIS.printerName,\r\n                width: e.outerWidth(),\r\n                height: e.outerHeight(),\r\n                html: '<!DOCTYPE html><html><head><title>receipt</title><meta name=\"viewport\" content=\"initial-scale=1.0\" /></head>' + s + '</html>'\r\n            });\r\n            return q.promise;\r\n        })\r\n            .then(function (data) {\r\n            console.log('printReceiptFromHTML html2canvas finished');\r\n\r\n            var canvas = data;\r\n\r\n            var q = $q.defer();\r\n\r\n            if (data == null) {\r\n                q.resolve(null);\r\n                return q.promise;\r\n            }\r\n\r\n            if (typeof (canvas) == 'string') {\r\n                q.resolve(canvas);\r\n            }\r\n            else if (!!data.html) {\r\n                data.mode = THIS.printMode;\r\n                q.resolve(data);\r\n            }\r\n            else {\r\n                q.resolve({\r\n                    printerName: THIS.printerName,\r\n                    width: THIS.printerWidthPoints,\r\n                    canvas: canvas,\r\n                    mode: THIS.printMode\r\n                });\r\n            }\r\n\r\n            return q.promise;\r\n\r\n        })\r\n        .then(function (dat) {\r\n            var q = $q.defer();\r\n\r\n            if (dat == null) {\r\n                q.resolve(null);\r\n                return q.promise;\r\n            }\r\n\r\n            if (!THIS.simulatorMode && configService.isMobile) {\r\n                console.log('printReceiptFromHTML before printFromCanvas: ');\r\n                var fun = null;\r\n                if (configService.isClover && THIS.printSystem == 'clover')\r\n                    fun = window.plugins.starPrinter.printFromHTMLClover;\r\n                else if(THIS.printSystem == 'embedded')\r\n                    fun = THIS.printHTMLViaPrintService;\r\n                else if(THIS.printSystem == 'epson')\r\n                    fun = window.plugins.starPrinter.printFromHTMLEpson;\r\n                else\r\n                    fun = window.plugins.starPrinter.printFromHTML;\r\n\r\n\r\n                if(THIS.printSystem == 'epson') {\r\n                    fun(dat.printerName,\r\n                        THIS.currentSettings.printerModel,\r\n                        dat.width,\r\n                        dat.height,\r\n                        dat.html,\r\n                        !helperService.checkDeviceVersion(),\r\n\r\n                        function (err, result) {\r\n                            console.log('printFromHTML printFromCanvas finished');\r\n    \r\n                            if (err) {\r\n                                console.log(\"print is failed:\" + err);\r\n    \r\n                                if (err.indexOf('Failed to connect port') >= 0) {\r\n                                    err = 'Printer is not connected! Please check printer is turned on.';\r\n                                }\r\n                                q.reject(err);\r\n                            }\r\n                            else {\r\n                                console.log(\"print is done\");\r\n                                q.resolve(result);\r\n                            }\r\n                        }\r\n                    );\r\n                } else {\r\n                    fun(dat.printerName,\r\n                        dat.width,\r\n                        dat.height,\r\n                        dat.html,\r\n                        !helperService.checkDeviceVersion(),\r\n                        dat.mode,\r\n                        THIS.currentSettings.portSettings,\r\n                        THIS.currentSettings.emulation,\r\n                        function (err, result) {\r\n                            console.log('printFromHTML printFromCanvas finished');\r\n    \r\n                            if (err) {\r\n                                console.log(\"print is failed:\" + err);\r\n    \r\n                                if (err.indexOf('Failed to connect port') >= 0) {\r\n                                    err = 'Printer is not connected! Please check printer is turned on.';\r\n                                }\r\n                                q.reject(err);\r\n                            }\r\n                            else {\r\n                                console.log(\"print is done\");\r\n                                q.resolve(result);\r\n                            }\r\n                        }\r\n                    );\r\n                }\r\n            }\r\n            else {\r\n                if (dat != null && (configService.isEmulator || THIS.simulatorMode)) {\r\n                    THIS.showPrintImage(dat.canvas, dat.canvas.width, dat.canvas.height,\r\n                    function () {\r\n                        console.log(\"print in emulator is done\");\r\n                        q.resolve(null);\r\n                    });\r\n                }\r\n                else {\r\n                    console.log(\"print is done\");\r\n                    q.resolve(null);\r\n                }\r\n            }\r\n\r\n            return q.promise;\r\n        });\r\n    };\r\n\r\n    this.showPrintImage = function (canvas, width, height, callback) {\r\n        var data64 = canvas.toDataURL('image/png');\r\n        $('body').find('#printBodyContainerID').remove();\r\n\r\n        let modalStr = `\r\n        <div id=\"printBodyContainerID\" class=\"modal fade dp_modal\" tabindex=\"-1\" role=\"dialog\" style=\"z-index:100051;\">\r\n        <div class=\"modal-dialog dp_modal-dialog\" role=\"document\" style=\"width: auto;\">\r\n            <div class=\"modal-content dp_modal-content dialog-gray\">\r\n            <div class=\"modal-header dp_modal-header\">\r\n            <div class=\"header-container\">\r\n                <div class=\"header-container-row\">\r\n                <div><span class=\"close-modal-dialog-button pointerCursor\" data-dismiss=\"modal\" aria-label=\"Close\" tranlate>Close</span></div>\r\n                <div><h4 class=\"modal-title dp_modal-title\">${gettextCatalog.getString(\"Receipt\")}</h4></div>\r\n                <div></div>\r\n                </div>\r\n            </div>\r\n            </div>\r\n            <div id=\"printContainerID\" style=\"overflow:auto;height:${$(window).height() * 0.7}px;\"><div class=\"modal-body\" id=\"printBodyID\" style=\"text-align: center; height:${height + 30}px;\">\r\n            </div></div>\r\n            </div>\r\n        </div>\r\n        </div>`;\r\n\r\n        var $d = $(modalStr);\r\n        $d.find('.modal-body').append('<img src=\"' + data64 + '\" style=\"width: calc(100% - 30px)\"/>');\r\n        $('body').append($d);\r\n\r\n        function resizePrintContainer() {\r\n            if (configService.isMobileDesign == true) {\r\n                var modalContainerHeight = helperService.getModalContainerHeight($('#printContainerID'));\r\n                $('#printContainerID').outerHeight(modalContainerHeight);\r\n            }\r\n        }\r\n\r\n        $d.on('shown.bs.modal', resizePrintContainer);\r\n        $(window).on('resize', resizePrintContainer);\r\n\r\n        if (typeof callback == 'function') {\r\n            $.unblockUI();\r\n            helperService.showDialog($d, function (wnd) {\r\n                wnd.on('hidden.bs.modal', function (e) {\r\n                    callback();\r\n                    $.blockUI();\r\n\r\n                    $(window).off('resize', resizePrintContainer);\r\n                });\r\n                \r\n            });\r\n        }\r\n        else {\r\n            helperService.showDialog($d, function(wnd){\r\n                wnd.on('hidden.bs.modal', function (e) {\r\n                    $(window).off('resize', resizePrintContainer);\r\n                });\r\n            });\r\n        }\r\n    };\r\n\r\n    this.createPrintContainer = function (el, width) {\r\n        console.log('Enter createPrintContainer');\r\n        $('.print-container').remove();\r\n\r\n        //var width = el.outerWidth();\r\n        //var height = el.outerHeight();\r\n\r\n        var container = document.createElement(\"iframe\");\r\n        container.className = \"print-container\";\r\n        container.style.visibility = \"hidden\";\r\n        container.style.position = \"fixed\";\r\n        container.style.left = \"-10000px\";\r\n        container.style.top = \"0px\";\r\n        container.style.border = \"0\";\r\n        container.width = width;\r\n        // container.height = height;\r\n        container.scrolling = \"no\"; // ios won't scroll without it\r\n\r\n        //// for debug only !!!\r\n        //container.style.visibility = \"visible\";\r\n        //container.style.left = \"0px\";\r\n        //container.scrolling = \"yes\";\r\n        ////\r\n\r\n        document.body.appendChild(container);\r\n        var ec = el.clone();\r\n        ec.css({ \"background-color\": \"white\", 'position': 'absolute', 'left': '0', 'top': '0', 'width': width + 'px' });\r\n        ec.attr('id', 'printerAreaID');\r\n        ec.removeAttr('template');\r\n\r\n\r\n        $(container.contentDocument.body).append(ec);\r\n\r\n        var o = {\r\n            height: container.height,\r\n            width: container.width\r\n        };\r\n        console.log('leave createPrintContainer: ' + JSON.stringify(o));\r\n    \r\n        return container;\r\n    };\r\n\r\n    this.initStarPrinter = function (THIS, settings) {\r\n        var connectionInterface = \"bt:\";\r\n        if(settings.interface && settings.interface == \"network\") {\r\n            connectionInterface = \"tcp:\";\r\n        } else if((!settings.interface || settings.interface !== \"bluetooth\")\r\n        && THIS.isStringIPAddress(settings.printerName)) {\r\n            connectionInterface = \"tcp:\";\r\n        }\r\n\r\n        if (!!settings.macAddress && connectionInterface === \"bt:\")\r\n            THIS.printerName = connectionInterface + settings.macAddress;\r\n        else if (!!settings.portName)\r\n            THIS.printerName = settings.portName;\r\n        else\r\n            THIS.printerName = connectionInterface + settings.printerName;\r\n\r\n        var modelName = settings.printerModel;\r\n        var modelFound = false;\r\n        if(modelName) {\r\n            //1. find model in settings\r\n            var model = null;\r\n            starPrinterModels.forEach(function (e, idx) {\r\n                if (e.modelTitle == modelName) {\r\n                    model = e;\r\n                    modelFound = true;\r\n                    return false;\r\n                }\r\n            });\r\n            //2. if model is found - apply port seting and emulation mode\r\n            if(model) {\r\n                THIS.currentSettings.portSettings = model.portSettings;\r\n                THIS.currentSettings.emulation = model.emulation;\r\n                THIS.currentSettings.hasCashDrawer = model.canUseCashDrawer;\r\n            }\r\n        }\r\n\r\n        if(!modelFound){\r\n            THIS.currentSettings.hasCashDrawer = true; // suppose that star printer support cash drawer. If not - nothing will happen.\r\n            THIS.currentSettings.portSettings = \"\";\r\n            THIS.currentSettings.emulation = \"StarPRNT\";\r\n        }\r\n        \r\n        var deffered = $q.defer();\r\n\r\n        if (!settings.printerName && !settings.simulatorMode) {\r\n            deffered.reject(gettextCatalog.getString(\"The printer was not set up.\"));\r\n        }\r\n        else\r\n            if (!settings.printerWidthCode || settings.printerWidthCode < 2) {\r\n                deffered.reject(gettextCatalog.getString(\"Printer resolution is invalid.\"));\r\n            }\r\n            else\r\n                deffered.resolve(settings);\r\n\r\n        return deffered.promise;\r\n\r\n        //return deffered.promise.then(function (settings) {\r\n        //    return THIS.internalDisconnect(settings);\r\n        //});\r\n    };\r\n\r\n    this.initEpsonPrinter = function (THIS, settings) {\r\n        THIS.printerName = settings.portName ? settings.portName : settings.printerName;\r\n        THIS.printerModel = settings.printerModel;\r\n        THIS.currentSettings.hasCashDrawer = true;\r\n        \r\n        var deffered = $q.defer();\r\n\r\n        if (!settings.printerName && !settings.simulatorMode) {\r\n            deffered.reject(gettextCatalog.getString(\"The printer was not set up.\"));\r\n        }\r\n        else\r\n            if (!settings.printerWidthCode || settings.printerWidthCode < 2) {\r\n                deffered.reject(gettextCatalog.getString(\"Printer resolution is invalid.\"));\r\n            }\r\n            else\r\n                deffered.resolve(settings);\r\n\r\n        return deffered.promise;\r\n    };\r\n\r\n    this.initPrinter = function (THIS, settings) {\r\n        THIS.printerName = settings.printerName;\r\n\r\n        var deffered = $q.defer();\r\n        deffered.resolve(settings);\r\n        return deffered.promise;\r\n    }\r\n\r\n    this.initCloverPrinter = function (THIS, settings) {\r\n        THIS.printerName = settings.printerName;\r\n        var deffered = $q.defer();\r\n\r\n        if (!settings.printerName) {\r\n            deffered.reject(gettextCatalog.getString(\"Printer name is empty.\"));\r\n        }\r\n        else\r\n            if (!settings.printerWidthCode || settings.printerWidthCode < 2) {\r\n                deffered.reject(gettextCatalog.getString(\"Printer resolution is invalid.\"));\r\n            }\r\n            else {\r\n                window.plugins.starPrinter.getCloverPrinters(function (err, result) {\r\n                    if (err) {\r\n                        console.log(\"getCloverPrinters failed\");\r\n                        deffered.reject(gettextCatalog.getString(\"No Clover printer is connected.\"));\r\n                    }\r\n                    else {\r\n                        console.log(\"getCloverPrinters success: \" + JSON.stringify(result));\r\n                        if (result.length < 1) {\r\n                            deffered.reject(gettextCatalog.getString(\"No Clover printer is connected.\"));\r\n                        }\r\n                        else {\r\n                            console.log(\"getCloverPrinters set printer id as name:\" + result[0].uuid);\r\n                            THIS.printerName = result[0].uuid;\r\n                            deffered.resolve(settings);\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n        //*/\r\n        return deffered.promise;\r\n    };\r\n\r\n    this.printAdditionalReceiptsPromise = function (SCOPE, code, text) {\r\n        const p = $q.defer();\r\n        p.resolve();\r\n        return this.printAdditionalReceipts(SCOPE, code, text, p.promise);\r\n    };\r\n\r\n    this.printAdditionalReceipts = function (SCOPE, code, text, p) {\r\n        SCOPE.$apply(function () {\r\n            if (code == 'merchant') {\r\n                SCOPE.receiptSaleModel.MerchantReceipt = $sce.trustAsHtml(text);\r\n            }\r\n            else if (code == 'customer') {\r\n                SCOPE.receiptSaleModel.CustomerReceipt = $sce.trustAsHtml(text);\r\n            }\r\n        });\r\n\r\n        var THIS = this;\r\n        if (code == 'merchant') {\r\n            return p.then(function () {\r\n                var html = $('span[ng-bind-html=\"receiptSaleModel.MerchantReceipt\"]');\r\n                if (html.length > 0) {\r\n                    html = html.clone();\r\n                    html.show();\r\n\r\n                    html = $('<div/>').append(html);\r\n\r\n                    console.log('instant print of terminal part receipt');\r\n                    return THIS.printReceipt(html, true, true);\r\n                }\r\n                else {\r\n                    var deferred = $q.defer();\r\n                    errorService.showError('Merchant receipt template is not specified',\r\n                        function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n                    return deferred.promise;\r\n                }\r\n            });\r\n        }\r\n        else if (code == 'customer') {\r\n            return p.then(function (res) {\r\n                var html = $('span[ng-bind-html=\"receiptSaleModel.CustomerReceipt\"]');\r\n                if (html.length > 0) {\r\n                    html = html.clone();\r\n                    html.show();\r\n                    html = $('<div/>').append(html);\r\n                    console.log('instant print of terminal part receipt');\r\n                    return THIS.printReceipt(html, true, true);\r\n                }\r\n                else {\r\n                    var deferred = $q.defer();\r\n                    errorService.showError('Customer receipt template is not specified',\r\n                        function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n                    return deferred.promise;\r\n                }\r\n            });\r\n        }\r\n        else {\r\n            return p;\r\n        }\r\n    };\r\n\r\n    this.hasTerminalReceipts = function (printEl, directUse) {\r\n        let res = false;\r\n\r\n        let elPrint = directUse === true ? printEl.get(0) : (!!printEl ? printEl.get(1) : $('.receipt-template div:first-child').get(1));\r\n        if (!elPrint && !directUse && !printEl) {\r\n            //elPrint = $('.receipt-template div:first-child').get(0);\r\n        }\r\n        if (!!elPrint && !!elPrint.outerHTML) {\r\n            const tel = $(elPrint.outerHTML);\r\n            res = tel.find('div[ngm-terminal]').length > 0;\r\n        }\r\n\r\n        return res;\r\n    };\r\n\r\n    this.printReceipt = function (printEl, ignoreNotPrint, directUse, ignoreTerminalReceipts, ignorePrinterSetupError) {\r\n        $.blockUI();\r\n\r\n        try {\r\n            let elPrint = directUse === true ? printEl.get(0) : (!!printEl ? printEl.get(1) : $('.receipt-template div:first-child').get(1));\r\n            if (!elPrint && !directUse && !printEl) {\r\n               // elPrint = $('.receipt-template div:first-child').get(0);\r\n            }\r\n\r\n            if (!elPrint) {\r\n                const q = $q.defer();\r\n                q.reject('Invalid template is used!');\r\n                return q.promise;\r\n            }\r\n\r\n            // if font was reduced - return it back\r\n            if (!!elPrint.outerHTML) {\r\n\r\n                this.initPrintCollectMode();\r\n\r\n                var tel = $(elPrint.outerHTML);\r\n\r\n                tel.removeAttr('template');\r\n\r\n                tel.find('[ngm-font-size]').each(function () {\r\n                    var sz = $(this).attr('ngm-font-size');\r\n                    $(this).css('font-size', sz);\r\n                    $(this).removeAttr('ngm-font-size');\r\n                });\r\n\r\n                if (ignoreNotPrint !== true)\r\n                    tel.find('[not-print]').remove();\r\n\r\n                var q2 = $q.defer();\r\n                q2.resolve(null);\r\n\r\n                var THIS = this;\r\n\r\n                if (ignoreTerminalReceipts !== true) {\r\n                    // check for terminal receipts\r\n                    tel.find('div[ngm-terminal]').each(function () {\r\n                        var trmp = $(this);\r\n\r\n                        q2.promise = q2.promise.then(function (res) {\r\n                            var html = trmp.clone();\r\n                            html.show();\r\n                            return THIS.printReceiptFromHTML(html);\r\n                        });\r\n                    });\r\n                }\r\n\r\n                return q2.promise.then(function (res) {\r\n                    return THIS.printReceiptFromHTML(tel[0])\r\n                })\r\n                    .then(function (res) {\r\n                        THIS.finishPrintCollectMode();\r\n                        return THIS.printReceiptFromHTML();\r\n                    })\r\n                    .then(function () {\r\n                        $.unblockUI();\r\n                        console.log(\"receipt is printed\");\r\n                        var q = $q.defer();\r\n                        q.resolve(null);\r\n                        return q.promise;\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        console.log(\"receipt is rejected\");\r\n                        errorService.showError(err);\r\n                        var q = $q.defer();\r\n                        q.reject(err);\r\n                        return q.promise;\r\n                    })\r\n                    .finally(function () {\r\n                        THIS.resetPrintCollectMode();\r\n                    });\r\n            }\r\n            else {\r\n                var q = $q.defer();\r\n                q.resolve(null);\r\n                return q.promise;\r\n            }\r\n        }\r\n        catch (e) {            \r\n            $.unblockUI();\r\n            errorService.showError(e);\r\n        }        \r\n    };\r\n\r\n\r\n    this.resumeHandler = function () {\r\n        $.blockUI();\r\n        console.log('got resume event!');\r\n        return this.applyPrinterSettings().then(function (settings) {\r\n            return THIS.disconnect()\r\n                .then(function (res) {\r\n                    console.log('printer disconnected');\r\n                    return THIS.connect();\r\n                });\r\n        })\r\n        .finally(function () {\r\n            console.log('printer connected');\r\n            $.unblockUI();\r\n        });\r\n    };\r\n\r\n    this.printHTMLViaPrintService = function(printerName,\r\n        width,\r\n        height,\r\n        html,\r\n        isValidOS,\r\n        mode,\r\n        portSettings,\r\n        emulation,\r\n        callback) {\r\n            cordova.plugins.printer.print(html, \r\n                { \r\n                    name: 'receipt', // this will be treated by print plugin as standard mode, not label\r\n                    landscape: false, \r\n                    border: false \r\n                }, \r\n                function (res) {\r\n                    if (res === 'Canceled' || !res) {\r\n                        callback('Printing was cancelled.');\r\n                    } else {\r\n                        callback(null, res);\r\n                    }\r\n            });\r\n        };\r\n\r\n    this.getPrinterModels = function(system) {\r\n        return system == 'epson' ? epsonPrinterModels : starPrinterModels;\r\n    };\r\n\r\n    this.isStringIPAddress = function(str) {\r\n        if(!str) {\r\n            return false;\r\n        }\r\n        if (/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(str)) {  \r\n            return true;\r\n        }  \r\n\r\n        return false;\r\n    };\r\n\r\n    var epsonPrinterModels = [{\r\n        modelId: \"TM_M10\",\r\n        modelTitle: \"TM_M10\",\r\n        display: \"TM-m10\",\r\n        modelNames: []\r\n    },\r\n    {\r\n        modelId: \"TM_M30\",\r\n        modelTitle: \"TM_M30\",\r\n        display: \"TM-m30\",\r\n        modelNames: [\"TM-m30\", \"TM-m30II\", \"TM-m30II-S\", \"TM-m30III\", ]\r\n    },\r\n    {\r\n        modelId: \"TM_M50\",\r\n        modelTitle: \"TM_M50\",\r\n        display: \"TM-m50\",\r\n        modelNames: [\"TM-m50\", \"TM-m50II\"]\r\n    },\r\n    {\r\n        modelId: \"TM_P20\",\r\n        modelTitle: \"TM_P20\",\r\n        display: \"TM-P20\",\r\n        modelNames: [\"TM-P20\", \"TM-P20II\"]\r\n    },\r\n    {\r\n        modelId: \"TM_P60\",\r\n        modelTitle: \"TM_P60\",\r\n        display: \"TM-P60 (Receipt/Peeler)\",\r\n        modelNames: []\r\n    },{\r\n        modelId: \"TM_P60II\",\r\n        modelTitle: \"TM_P60II\",\r\n        display: \"TM-P60II (Receipt/Peeler)\",\r\n        modelNames: []\r\n    },\r\n    {\r\n        modelId: \"TM_P80\",\r\n        modelTitle: \"TM_P80\",\r\n        display: \"TM-P80\",\r\n        modelNames: [\"TM-P80\", \"TM-P80II\"]\r\n    },\r\n    {\r\n        modelId: \"TM_T20\",\r\n        modelTitle: \"TM_T20\",\r\n        display: \"TM-T20\",\r\n        modelNames: [\"TM-T20\", \"TM-T20II\", \"TM-T20II-i\", \"TM-T20II-m\", \"TM-T20III\"]\r\n    },\r\n    {\r\n        modelId: \"TM_T60\",\r\n        modelTitle: \"TM_T60\",\r\n        display: \"TM-T60\",\r\n        modelNames: []\r\n    },\r\n    {\r\n        modelId: \"TM_T70\",\r\n        modelTitle: \"TM_T70\",\r\n        display: \"TM-T70\",\r\n        modelNames: [\"TM-T70\", \"TM-T70-i\", \"TM-T70II\", \"TM-T70II-DT\"]\r\n    },\r\n    {\r\n        modelId: \"TM_T81\",\r\n        modelTitle: \"TM_T81\",\r\n        display: \"TM-T81II\",\r\n        modelNames: []\r\n    },\r\n    {\r\n        modelId: \"TM_T82\",\r\n        modelTitle: \"TM_T82\",\r\n        display: \"TM-T82\",\r\n        modelNames: [\"TM-T82\", \"TM-T82II\", \"TM-T82II-i\"]\r\n    },\r\n    {\r\n        modelId: \"TM_T83\",\r\n        modelTitle: \"TM_T83\",\r\n        display: \"TM-T83II\",\r\n        modelNames: [\"TM-T83II\", \"TM-T83II-i\"]\r\n    },\r\n    {\r\n        modelId: \"TM_T88\",\r\n        modelTitle: \"TM_T88\",\r\n        display: \"TM-T88\",\r\n        modelNames: [\"TM-T88IV\", \"TM-T88V\", \"TM-T88VI\", \"TM-T88V-i\", \"TM-T88VIiHUB\", \"TM-T88V-DT\", \"TM-T88VII\"]\r\n    },\r\n    {\r\n        modelId: \"TM_T90\",\r\n        modelTitle: \"TM_T90\",\r\n        display: \"TM-T90\",\r\n        modelNames: []\r\n    },\r\n    {\r\n        modelId: \"TM_U220\",\r\n        modelTitle: \"TM_U220\",\r\n        display: \"TM-U220\",\r\n        modelNames: [\"TM-U220\", \"TM-U220-i\"]\r\n    },\r\n    {\r\n        modelId: \"TM_U330\",\r\n        modelTitle: \"TM_U330\",\r\n        display: \"TM-U330\",\r\n        modelNames: []\r\n    },\r\n    {\r\n        modelId: \"TM_L90\",\r\n        modelTitle: \"TM_L90\",\r\n        display: \"TM-L90\",\r\n        modelNames: []\r\n    },\r\n    {\r\n        modelId: \"TM_L100\",\r\n        modelTitle: \"TM_L100\",\r\n        display: \"TM-L100\",\r\n        modelNames: []\r\n    },\r\n    {\r\n        modelId: \"TM_H6000\",\r\n        modelTitle: \"TM_H6000\",\r\n        display: \"TM-H6000\",\r\n        modelNames: [\"TM-H6000IV\", \"TM-H6000V\", \"TM-H6000IV-DT\"]\r\n    }];\r\n\r\n        var starPrinterModels = [{\r\n        modelId: \"mcprint2\",\r\n        modelTitle: \"mC-Print2\",\r\n        display: \"mC-Print2\",\r\n        modelNames: [                                   \r\n                \"MCP20 (STR-001)\",\r\n                \"MCP21 (STR-001)\",\r\n                \"mC-Print2\"],\r\n        emulation: \"StarPRNT\",\r\n        portSettings: \"\",\r\n        paperSize: 2,\r\n        canSetDrawerOpenStatus: true,                    \r\n        canPrintTextReceiptSample: true,                 \r\n        canPrintUtf8EncodedText: true,                   \r\n        canPrintRasterReceiptSample: true,               \r\n        canPrintCjk: true,                               \r\n        canUseBlackMark: false,                          \r\n        canUseBlackMarkDetection: false,                 \r\n        canUsePageMode: true,                            \r\n        canUseCashDrawer: true,                          \r\n        canUseBarcodeReader: true,                       \r\n        canUseCustomerDisplay: true,                     \r\n        canUseAllReceipt: true,                          \r\n        canGetProductSerialNumber: true,                 \r\n        settableUsbSerialNumberLength: 16,               \r\n        isUsbSerialNumberEnabledByDefault: true},\r\n    {\r\n        modelId: \"mcprint3\",\r\n        modelTitle: \"mC-Print3\",\r\n        display: \"mC-Print3\",                 \r\n    modelNames: [                             \r\n            \"MCP31 (STR-001)\",                             \r\n            \"mC-Print3\"],                     \r\n    emulation: \"StarPRNT\",                    \r\n    portSettings: \"\",                         \r\n    paperSize: 3,\r\n    canSetDrawerOpenStatus: true,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: true,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: true,                        \r\n    canUseBlackMark: false,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: true,                   \r\n    canUseBarcodeReader: true,                \r\n    canUseCustomerDisplay: true,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: true,          \r\n    settableUsbSerialNumberLength: 16,        \r\n    isUsbSerialNumberEnabledByDefault: true},\r\n    {\r\n        modelId: \"mpop\",\r\n        modelTitle: \"mPOP\",   \r\n        display: \"mPOP\",              \r\n    modelNames: [                             \r\n        \"STAR mPOP\",\r\n        \"mPOP\"],                     \r\n    emulation: \"StarPRNT\",                    \r\n    portSettings: \"\",                         \r\n    paperSize: 2,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: true,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: false,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: true,                   \r\n    canUseBarcodeReader: true,                \r\n    canUseCustomerDisplay: true,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: true,          \r\n    settableUsbSerialNumberLength: 8,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"fvp10\",\r\n        modelTitle: \"FVP10\",\r\n        display: \"FVP10\",                 \r\n    modelNames: [                             \r\n        \"FVP10 (STR_T-001)\",\r\n        \"Star FVP10\"],                     \r\n    emulation: \"StarLine\",                    \r\n    portSettings: \"\",                         \r\n    paperSize: 3,\r\n    canSetDrawerOpenStatus: true,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: true,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: true,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: true,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 8,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"tsp100\",\r\n        modelTitle: \"TSP100\",\r\n        display: \"TSP100\",                 \r\n    modelNames: [                             \r\n        \"TSP113\", \"TSP143\",\r\n        \"TSP100\",\r\n        \"Star TSP113\", \"Star TSP143\", \"TSP100IV\", \"TSP100IV SK\", \"TSP100IIU+\"],                     \r\n    emulation: \"StarGraphic\",                    \r\n    portSettings: \"\",                         \r\n    paperSize: 3,\r\n    canSetDrawerOpenStatus: true,             \r\n    canPrintTextReceiptSample: false,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: false,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: false,                     \r\n    canUseCashDrawer: true,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: true,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: true,          \r\n    settableUsbSerialNumberLength: 8,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"tsp650ii\",\r\n        modelTitle: \"TSP650II\",\r\n        display: \"TSP650II\",                 \r\n    modelNames: [                             \r\n        \"TSP654II (STR_T-001)\",\r\n        \"TSP654 (STR_T-001)\",\r\n        \"TSP651 (STR_T-001)\"],                     \r\n    emulation: \"StarLine\",                    \r\n    portSettings: \"\",                         \r\n    paperSize: 3,\r\n    canSetDrawerOpenStatus: true,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: true,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: true,                        \r\n    canUseBlackMark: false,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: true,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 8,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"tsp700ii\",\r\n        modelTitle: \"TSP700II\",\r\n        display: \"TSP700II\",                 \r\n    modelNames: [                             \r\n        \"TSP743II (STR_T-001)\",\r\n        \"TSP743 (STR_T-001)\"],                     \r\n    emulation: \"StarLine\",                    \r\n    portSettings: \"\",                         \r\n    paperSize: 3,\r\n    canSetDrawerOpenStatus: true,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: true,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: true,          \r\n    canUsePageMode: false,                     \r\n    canUseCashDrawer: true,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 8,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"tsp800ii\",\r\n        modelTitle: \"TSP800II\",\r\n        display: \"TSP800II\",                 \r\n    modelNames: [                             \r\n        \"TSP847II (STR_T-001)\",\r\n        \"TSP847 (STR_T-001)\"],                     \r\n    emulation: \"StarLine\",                    \r\n    portSettings: \"\",                         \r\n    paperSize: 4,\r\n    canSetDrawerOpenStatus: true,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: true,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: true,          \r\n    canUsePageMode: false,                     \r\n    canUseCashDrawer: true,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 8,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"sms210i\",\r\n        modelTitle: \"SM-S210i\",\r\n        display: \"SM-S210i\",                 \r\n    modelNames: [],                     \r\n    emulation: \"EscPosMobile\",                    \r\n    portSettings: \"mini\",                         \r\n    paperSize: 2,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"sms220i\",\r\n        modelTitle: \"SM-S220i\",\r\n        display: \"SM-S220i\",                 \r\n    modelNames: [],                     \r\n    emulation: \"EscPosMobile\",                    \r\n    portSettings: \"mini\",                         \r\n    paperSize: 2,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"sms230i\",\r\n        modelTitle: \"SM-S230i\",\r\n        display: \"SM-S230i\",                 \r\n    modelNames: [],                     \r\n    emulation: \"EscPosMobile\",                    \r\n    portSettings: \"mini\",                         \r\n    paperSize: 2,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"smt300it300\",\r\n        modelTitle: \"SM-T300i/T300\",\r\n        display: \"SM-T300i/T300\",                 \r\n    modelNames: [],                     \r\n    emulation: \"EscPosMobile\",                    \r\n    portSettings: \"mini\",                         \r\n    paperSize: 3,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"smt400i\",\r\n        modelTitle: \"SM-T400i\",\r\n        display: \"SM-T400i\",                 \r\n    modelNames: [],                     \r\n    emulation: \"EscPosMobile\",                    \r\n    portSettings: \"mini\",                         \r\n    paperSize: 4,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"sml200\",\r\n        modelTitle: \"SM-L200\",\r\n        display: \"SM-L200\",                 \r\n    modelNames: [\"STAR L200\",\r\n    \"STAR L204\"],                     \r\n    emulation: \"StarPRNT\",                    \r\n    portSettings: \"Portable\",                         \r\n    paperSize: 2,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"sml300\",\r\n        modelTitle: \"SM-L300\",\r\n        display: \"SM-L300\",                 \r\n    modelNames: [\"STAR L300\",\r\n    \"STAR L304\"],                     \r\n    emulation: \"StarPRNT\",                    \r\n    portSettings: \"Portable\",                         \r\n    paperSize: 3,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"bsc10\",\r\n        modelTitle: \"BSC10\",\r\n        display: \"BSC10\",                 \r\n    modelNames: [],                     \r\n    emulation: \"EscPos\",                    \r\n    portSettings: \"escpos\",                         \r\n    paperSize: 3, //TODO: 512\r\n    canSetDrawerOpenStatus: true,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: false,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: true,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 8,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"sms210isp\",\r\n        modelTitle: \"SM-S210i StarPRNT\",\r\n        display: \"SM-S210i StarPRNT\",                 \r\n    modelNames: [],                     \r\n    emulation: \"StarPRNT\",                    \r\n    portSettings: \"Portable\",                         \r\n    paperSize: 2,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"sms220isp\",\r\n        modelTitle: \"SM-S220i StarPRNT\",\r\n        display: \"SM-S220i StarPRNT\",                 \r\n    modelNames: [],                     \r\n    emulation: \"StarPRNT\",                    \r\n    portSettings: \"Portable\",                         \r\n    paperSize: 2,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"sms230isp\",\r\n        modelTitle: \"SM-S230i StarPRNT\",\r\n        display: \"SM-S230i StarPRNT\",                 \r\n    modelNames: [],                     \r\n    emulation: \"StarPRNT\",                    \r\n    portSettings: \"Portable\",                         \r\n    paperSize: 2,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 8,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"smt300isp\",\r\n        modelTitle: \"SM-T300i StarPRNT\",\r\n        display: \"SM-T300i StarPRNT\",                 \r\n    modelNames: [],                     \r\n    emulation: \"StarPRNT\",                    \r\n    portSettings: \"Portable\",                         \r\n    paperSize: 3,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false},\r\n    {\r\n        modelId: \"smt400isp\",\r\n        modelTitle: \"SM-T400i StarPRNT\",\r\n        display: \"SM-T400i StarPRNT\",                 \r\n    modelNames: [],                     \r\n    emulation: \"StarPRNT\",                    \r\n    portSettings: \"Portable\",                         \r\n    paperSize: 4,\r\n    canSetDrawerOpenStatus: false,             \r\n    canPrintTextReceiptSample: true,          \r\n    canPrintUtf8EncodedText: false,            \r\n    canPrintRasterReceiptSample: true,        \r\n    canPrintCjk: false,                        \r\n    canUseBlackMark: true,                   \r\n    canUseBlackMarkDetection: false,          \r\n    canUsePageMode: true,                     \r\n    canUseCashDrawer: false,                   \r\n    canUseBarcodeReader: false,                \r\n    canUseCustomerDisplay: false,              \r\n    canUseAllReceipt: true,                   \r\n    canGetProductSerialNumber: false,          \r\n    settableUsbSerialNumberLength: 0,        \r\n    isUsbSerialNumberEnabledByDefault: false}];\r\n    \r\n}]);","angular.module('mainApp').controller('productManagementController', [\r\n    '$scope',\r\n    '$rootScope',\r\n    'loginService',\r\n    'gettextCatalog',\r\n    'helperService',\r\n    '$timeout',\r\n    'configService',\r\n    'errorService',\r\n    'outletService',\r\n    '$q',\r\n    'productManagementService',\r\n    '$compile',\r\n    'labelPrintService',\r\n    'labelService',\r\n    'reportService',\r\n    function($scope, $rootScope, loginService, gettextCatalog, helperService, $timeout, configService, errorService, outletService, $q, productManagementService, $compile, labelPrintService, labelService, reportService) {\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n            //             $rootScope.$broadcast('login.show'); // show login page on application start\r\n        }\r\n\r\n        var needToReloadProduct = false;\r\n\r\n        $scope.fcss = { height: window.innerHeight * 0.9 + 'px' };\r\n        $scope.ifcss = { height: window.innerHeight * 0.8 + 'px' };\r\n        $scope.useOutletSKU = configService.advancedBarcodeUseOutletSKU === true;\r\n\r\n        $scope.labelTemplateClass = '';\r\n        $scope.mode = '';\r\n        $scope.dataCount = 0;\r\n        $scope.dataPage = 1;\r\n        $scope.dataPageDisplay = 0;\r\n        $scope.itemsByPage = 100;//15;\r\n        $scope.isLoading = false;\r\n        $scope.totalPages = 1;\r\n        $scope.totalRecords = null;\r\n\r\n        $scope.printParams = [];\r\n        $scope.printParams.copies = 1;\r\n        $scope.filters = {};\r\n        $scope.outlets = [];\r\n        $scope.productsData = [];\r\n        $scope.labelTemplates = [];\r\n        $scope.newLabelItems = [];\r\n        $scope.labelModel = [];\r\n        $scope.watches = [];\r\n        $scope.isSite = configService.isSite;\r\n\r\n        $scope.labelsPRow = 1;\r\n        $scope.labelsPPage = 1;\r\n        $scope.modify ={\r\n        };\r\n\r\n        $scope.canChangePrice = configService.canChangePrice;\r\n        $scope.PriceTiers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(function(x) { \r\n            return {\r\n                n: x,\r\n                name: 'PriceTear' + x // incorrect naming in product object\r\n            }\r\n        });\r\n        $scope.labelPrintArea = labelService.getLabelPrintArea();\r\n\r\n        $scope.$watch('printParams.copies', function(newValue, oldValue) {\r\n            if (newValue != oldValue) {\r\n                $scope.nextStepPrintModal();\r\n                return newValue;\r\n            }\r\n        });\r\n\r\n        $scope.$watch(\"mode\", function (newVal, oldVal) {\r\n            $timeout(function(){\r\n                $rootScope.$broadcast('view.loaded', newVal);\r\n            });        \r\n        }); \r\n\r\n        $scope.$watch(\"newProduct.Type\", function(newVal, oldVal){\r\n            $timeout(function(){\r\n                if(newVal !== oldVal && (newVal === 'Non Inventory' || oldVal === 'Non Inventory'))\r\n                    initSelects();\r\n            });\r\n        });\r\n\r\n        $scope.loadData = function() {\r\n            $scope.dataCount = 0;\r\n            $scope.dataPageDisplay = 1;\r\n            $scope.dataPage = 1;\r\n            $scope.labelPrinterSettings = configService.getLabelPrinterSettings(true);\r\n\r\n            var p = outletService.getUserOulets(configService.loginUserID, true).then(function(data) {\r\n                var deferred = $q.defer();\r\n                // load outlets\r\n                angular.forEach(data.Outlets, function(el) {\r\n                    $scope.outlets.push({\r\n                        name: el.OutletName,\r\n                        id: el.EcsLocationMappingID\r\n                    });\r\n                });\r\n                deferred.resolve(data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            var lst = productManagementService.getData().then(function(data) {\r\n                var deferred = $q.defer();\r\n                //console.log(data.data);\r\n                $scope.brands = data.data.brands;\r\n                $scope.categories = data.data.categories;\r\n                $scope.units = data.data.units;\r\n                $scope.locations = data.data.locations;\r\n                $scope.salesPriceTiers = data.data.salesPriceTiers;\r\n                $scope.costingMethods = data.data.costingMethods;\r\n                $scope.types = data.data.types;\r\n                $scope.expenseAccounts = data.data.expenseAccounts;\r\n\r\n                $.each($scope.salesPriceTiers, function(i, item) {\r\n                    item.Model = 'newProduct.PriceTear' + item.Code;\r\n                });\r\n                deferred.resolve(data);\r\n                return deferred.promise;\r\n                //console.log(data.data.salesPriceTiers);\r\n            });\r\n\r\n            var tmpls = productManagementService.getTemplates('POS', 'Price Label', '').then(function(data) {\r\n                var deferred = $q.defer();\r\n                $scope.labelTemplates = data.data.rows;\r\n\r\n                //console.log($scope.labelTemplates);\r\n                deferred.resolve(data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return $q.all([p, lst, tmpls]);\r\n        };\r\n\r\n        $scope.loadGrid = function(sorting) {\r\n            var searchString = '';\r\n\r\n            if ($scope.filters.ProductName) {\r\n                searchString = $scope.filters.ProductName;\r\n            }\r\n\r\n            angular.forEach($scope.watches, function(watcher, key) {\r\n                watcher();\r\n            });\r\n\r\n            $scope.watches = [];\r\n\r\n            var promise = productManagementService.loadProductList($scope.dataPage, $scope.itemsByPage, searchString, sorting).then(function(data) {\r\n                var deferred = $q.defer();\r\n                $scope.productsData = [];\r\n                //console.log(data.data);\r\n                $scope.dataCount = data.data.Total;\r\n                $scope.dataPage = data.data.Page;\r\n                $scope.dataPageDisplay = data.data.Page;\r\n\r\n                angular.forEach(data.data.Rows, function(el) {\r\n                    el.isActive = false;\r\n                    el.labelPrint = false;\r\n                    el.ProductCode = el.Code;\r\n                    $scope.productsData.push(el);\r\n                });\r\n\r\n                angular.forEach($scope.productsData, function(product, key) {\r\n                    var watcher = $scope.$watch('productsData[' + key + '].labelPrint', function(newValue, oldValue) {\r\n                        if (newValue == true && !product.Barcode) {\r\n                            product.labelPrint = false;\r\n                            $('input[name=\"' + product.ID + '\"]').bootstrapSwitch('state', false, true);\r\n                            errorService.showError('Product barcode has no value.');\r\n                        } else {\r\n                        }\r\n                        //console.log(product, newValue, oldValue);\r\n                    });\r\n\r\n                    $scope.watches.push(watcher);\r\n                });\r\n\r\n                getPages(data.data.Total);\r\n\r\n                deferred.resolve(data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return promise;\r\n        };\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        }\r\n\r\n        $scope.search = function() {\r\n            $.blockUI();\r\n\r\n            $scope.dataPage = 1;\r\n            $scope.dataPageDisplay = 1;\r\n\r\n            var sort = {};\r\n\r\n            $scope.loadGrid(sort).finally(function() {\r\n                $.unblockUI();\r\n            });\r\n        };\r\n\r\n        $scope.onLoad = function() {\r\n            $.blockUI();\r\n\r\n            $scope.loadData();\r\n\r\n            var sort = {};\r\n\r\n            $scope.loadGrid(sort).finally(function() {                \r\n                $.unblockUI();\r\n            });\r\n        };\r\n\r\n        const scrollReachBottomCallback = function() {\r\n            if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                $.blockUI();\r\n                $scope.isLoading = true;\r\n                $scope.dataPage++;\r\n                \r\n                var sort = {};\r\n\r\n                var searchString = '';\r\n\r\n                if ($scope.filters.ProductName) {\r\n                    searchString = $scope.filters.ProductName;\r\n                }\r\n\r\n                productManagementService.loadProductList($scope.dataPage, $scope.itemsByPage, searchString, sort).then(\r\n                    function(data) {\r\n                        $.each(data.data.Rows, function(idx, el) {\r\n                            if (\r\n                                $scope.productsData.filter(function(fEl) {\r\n                                    return fEl.ID === el.ID;\r\n                                }).length === 0\r\n                            ) {\r\n                                el.isActive = false;\r\n                                el.labelPrint = false;\r\n                                el.ProductCode = el.Code;\r\n                                $scope.productsData.push(el);\r\n                            }\r\n                        });\r\n                        $scope.isLoading = false;\r\n                        $.unblockUI();\r\n                    },\r\n                    function(err) {\r\n                        $scope.isLoading = false;\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    }\r\n                );\r\n            }\r\n        };\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        $scope.$on('$destroy', function() {\r\n            if (needToReloadProduct) {\r\n                $rootScope.$broadcast('sideBar.reloadProducts');\r\n                needToReloadProduct = false;\r\n            }\r\n        });\r\n\r\n        // code below to give a chance to add event handlers before form is shown\r\n        $timeout(function() {\r\n            $scope.mode = 'management';\r\n        });\r\n\r\n        $scope.firstGridShow = true;\r\n\r\n        $scope.$on('view.loaded', function(evt) {\r\n            $timeout(function() {\r\n                if ($scope.firstGridShow) {\r\n                    $scope.firstGridShow = false;\r\n\r\n                    $('#Category, #DefaultLocation').styler({\r\n                        selectSearch: true,\r\n                        selectSearchNotFound: 'No matches found',\r\n                        selectSearchPlaceholder: 'Search...'\r\n                    });\r\n                    initSelects();\r\n                } else {\r\n                    $('input, select').trigger('refresh');\r\n                }\r\n            }, 0);\r\n\r\n            if ($scope.mode === 'labels') {\r\n                $scope.formatTemplate();\r\n            }\r\n        });\r\n\r\n        $scope.selectPage = function(page) {\r\n            $.blockUI();\r\n            $scope.dataPage = page;\r\n            $scope.$broadcast('refreshStTable');\r\n        };\r\n\r\n        $scope.goBack = function() {\r\n            $.blockUI();\r\n\r\n            if ($scope.mode === 'new' || $scope.mode === 'edit' || $scope.mode === 'labels') {\r\n                $scope.$broadcast('refreshStTable');\r\n            }\r\n\r\n            $scope.mode = 'management';\r\n            $scope.cancelDialog();\r\n            //$.unblockUI();\r\n        };\r\n\r\n        $scope.cancelDialog = function() {\r\n            var $windowElement = $('#addProductModal');\r\n            helperService.closeDialog($windowElement);\r\n        };\r\n\r\n        $scope.firstAddFormShow = true;\r\n\r\n        function editProductDialog($focusElement) {\r\n            var $windowElement = $('#addProductModal');\r\n            helperService.showDialog($windowElement, function() {\r\n                if ($scope.firstAddFormShow) {\r\n                    $scope.firstAddFormShow = false;\r\n\r\n                    initSelects();\r\n                } else {\r\n                    $('#addProductModal select').trigger('refresh');\r\n                }\r\n\r\n                if(!configService.isMobile)\r\n                {\r\n                    if ($focusElement) $focusElement.focus();\r\n                    else $('#Name').focus();\r\n                }\r\n            });\r\n        }\r\n\r\n        $scope.editProduct = function(row) {\r\n            //console.log(row);\r\n            editProductDialog();\r\n            $scope.prepareEdit(row);\r\n            $scope.mode = 'edit';\r\n            $timeout(function() {\r\n                $('input, select').trigger('refresh');\r\n            }, 500);\r\n        };\r\n\r\n        $scope.addNewProduct = function() {\r\n            editProductDialog();\r\n            $scope.prepareAddNew();\r\n            $scope.mode = 'new';\r\n            $timeout(function() {\r\n                $('input, select').trigger('refresh');\r\n            }, 500);\r\n        };\r\n\r\n        $scope.prepareAddNew = function() {\r\n            $scope.newProduct = {\r\n                AlwaysShowQuantity: 0,\r\n                AssemblyCostEstimationMethod: 'A',\r\n                AverageCost: 0,\r\n                Barcode: '',\r\n                BrandID: '',\r\n                Category: '',\r\n                CostingMethod: '',\r\n                DefaultLocation: '',\r\n                DefaultUnitOfMeasure: '',\r\n                Description: '',\r\n                DropShipMode: 'N',\r\n                Name: '',\r\n                NotSellable: 'false',\r\n                Option1: '',\r\n                Option2: '',\r\n                Option3: '',\r\n                PriceTear1: 0,\r\n                PriceTear2: 0,\r\n                PriceTear3: 0,\r\n                PriceTear4: 0,\r\n                PriceTear5: 0,\r\n                PriceTear6: 0,\r\n                PriceTear7: 0,\r\n                PriceTear8: 0,\r\n                PriceTear9: 0,\r\n                PriceTear10: 0,\r\n                ProductCode: '',\r\n                ProductID: '00000000-0000-0000-0000-000000000000',\r\n                Status: 'A',\r\n                ShortDescription: '',\r\n                Tags: '',\r\n                Type: '',\r\n                ExpenseAccount: '',\r\n                OutletSKU: null\r\n            };\r\n\r\n            // select current outlet\r\n            angular.forEach($scope.outlets, function(el) {\r\n                if (el.id === configService.lastECSMappingOutletID) {\r\n                    $scope.newProduct.outletID = configService.lastECSMappingOutletID;\r\n                    return false;\r\n                }\r\n            });\r\n        };\r\n\r\n        $scope.modifyProduct = function() {\r\n            var isNew = $scope.mode === 'new';\r\n            // validator for outlet SKU length\r\n            if(configService.advancedBarcodeSKULength && $scope.useOutletSKU && \r\n                $scope.newProduct.OutletSKU && $scope.newProduct.OutletSKU.length !== configService.advancedBarcodeSKULength) {\r\n                    var txt = gettextCatalog.getString(\"Outlet SKU should have {{cnt}} digits. Please enter a valid SKU.\", { cnt: configService.advancedBarcodeSKULength });\r\n                    errorService.showError(txt);\r\n                    return;\r\n            }\r\n\r\n            $.blockUI();\r\n            productManagementService\r\n                .modifyProduct($scope.newProduct, isNew)\r\n                .then(function(res) {\r\n                    $.unblockUI();\r\n                    $scope.goBack();\r\n                    needToReloadProduct = true;\r\n                    /*if ($scope.productsData.length >= $scope.itemsByPage)\r\n                     $scope.dataPage++;*/\r\n\r\n                    //$scope.$broadcast('refreshStTable');\r\n                    $.unblockUI();\r\n                })\r\n                .catch(function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n        };\r\n\r\n        $scope.prepareEdit = function(row) {\r\n            //console.log(row);\r\n            var viewMode = 'plain';\r\n            if (row.Description != null && row.Description.indexOf('<') != -1 && row.Description.indexOf('>') != -1 && (row.Description.indexOf('</') != -1 || row.Description.indexOf('/>') != -1)) {\r\n                viewMode = 'HTML';\r\n            }\r\n            $scope.newProduct = {\r\n                AlwaysShowQuantity: row.AlwaysShowQuantity,\r\n                Barcode: row.Barcode,\r\n                BrandID: row.BrandID,\r\n                Category: row.CategoryID,\r\n                CostingMethod: row.CostingMethod,\r\n                DefaultLocation: row.DefaultLocation,\r\n                DefaultUnitOfMeasure: row.DefaultUnitOfMeasure,\r\n                Description: row.Description,\r\n                DropShipMode: row.DropShipMode,\r\n                Name: row.Name,\r\n                PriceTear1: row.PriceTear1,\r\n                PriceTear2: row.PriceTear2,\r\n                PriceTear3: row.PriceTear3,\r\n                PriceTear4: row.PriceTear4,\r\n                PriceTear5: row.PriceTear5,\r\n                PriceTear6: row.PriceTear6,\r\n                PriceTear7: row.PriceTear7,\r\n                PriceTear8: row.PriceTear8,\r\n                PriceTear9: row.PriceTear9,\r\n                PriceTear10: row.PriceTear10,\r\n                IsMarkupTear1: row.IsMarkupTear1,\r\n                IsMarkupTear2: row.IsMarkupTear2,\r\n                IsMarkupTear3: row.IsMarkupTear3,\r\n                IsMarkupTear4: row.IsMarkupTear4,\r\n                IsMarkupTear5: row.IsMarkupTear5,\r\n                IsMarkupTear6: row.IsMarkupTear6,\r\n                IsMarkupTear7: row.IsMarkupTear7,\r\n                IsMarkupTear8: row.IsMarkupTear8,\r\n                IsMarkupTear9: row.IsMarkupTear9,\r\n                IsMarkupTear10: row.IsMarkupTear10,\r\n                ProductCode: row.Code,\r\n                ProductID: row.ID,\r\n                Status: row.Status,\r\n                ShortDescription: row.ShortDescription,\r\n                Tags: row.Tags,\r\n                Type: row.Type,\r\n                ExpenseAccount: row.ExpenseAccount,\r\n                viewMode: viewMode,\r\n                OutletSKU: row.OutletSKU\r\n            };\r\n            console.log($scope.newProduct);\r\n        };\r\n\r\n        $scope.toggleRow = function (familyRow, evt) {\r\n            if (evt && evt.currentTarget)\r\n                evt.currentTarget.focus();\r\n\r\n            var deferred = $q.defer();\r\n\r\n            if (familyRow.isActive === true) {\r\n                familyRow.isActive = false;\r\n\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            } else {\r\n                familyRow.isActive = true;\r\n\r\n                if (typeof familyRow.Products === 'undefined' || familyRow.Products.length === 0) {\r\n                    $.blockUI();\r\n\r\n                    var promise = $scope\r\n                        .loadFamilyProductList(familyRow.ID)\r\n                        .then(function(data) {\r\n                            var deferred = $q.defer();\r\n\r\n                            familyRow.Products = [];\r\n                            angular.forEach(data.data.Rows, function(el) {\r\n                                el.isActive = false;\r\n                                el.ProductCode = el.Code;\r\n                                familyRow.Products.push(el);\r\n                            });\r\n                            deferred.resolve(data);\r\n                            return deferred.promise;\r\n                        })\r\n                        .finally(function() {\r\n                            $.unblockUI();\r\n                        });\r\n\r\n                    return promise;\r\n                } else {\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                }\r\n            }\r\n        };\r\n\r\n        $scope.loadFamilyProductList = function(familyID) {\r\n            var searchString = '';\r\n\r\n            if ($scope.filters.ProductName) {\r\n                searchString = $scope.filters.ProductName;\r\n            }\r\n            return productManagementService.loadFamilyProductList(searchString, familyID);\r\n        };\r\n\r\n        $scope.$on('refreshStTable', function() {\r\n            $scope.loadGrid().finally(function() {\r\n                $.unblockUI();\r\n            });\r\n        });\r\n\r\n        $scope.productPrice = {};\r\n        $scope.productPriceDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n        $scope.showPriceDlg = function(priceTear) {\r\n            $scope.productPrice.value = $scope.newProduct[priceTear];\r\n            $scope.productPrice.tear = priceTear;\r\n            $timeout(function() {\r\n                $scope.productPriceDlg.show('#' + priceTear);\r\n            });\r\n        };\r\n\r\n        // callback priceDlg\r\n        $scope.setPrice = function(prm, event) {\r\n            $timeout(function() {\r\n                $scope.productPriceDlg.hide(true);\r\n            });\r\n\r\n            if (prm === true) {\r\n                $timeout(function() {\r\n                    $scope.newProduct[$scope.productPrice.tear] = $scope.productPrice.value;\r\n                });\r\n            } else if (typeof prm === 'string') {\r\n                /*if (prm === 'clean') {\r\n                 }*/\r\n            }\r\n\r\n            event.stopPropagation();\r\n            event.preventDefault();\r\n        };\r\n\r\n        $scope.getImageUrl = function(isFamily, imageID, isRealFamily, addSize, quickImageType) {\r\n            if (!isFamily) {\r\n                isFamily = false;\r\n            }\r\n            if (!imageID) {\r\n                imageID = '00000000-0000-0000-0000-000000000000';\r\n            }\r\n\r\n            if (isFamily === isRealFamily && !!imageID) {\r\n                var size = '';\r\n\r\n                var url = null;\r\n                if (!quickImageType) {\r\n                    url = configService.baseImageURL + '?id=' + imageID;\r\n                    if (addSize === true) {\r\n                        size = '&width=' + configService.imagesX + '&height=' + configService.imagesY;\r\n                    }\r\n                } else {\r\n                    url = configService.connectionURL + '/PosQuickKeyImages?ID=' + imageID + '&imageContentType=' + encodeURIComponent(quickImageType);\r\n                    if (addSize === true) {\r\n                        size = '&Width=' + configService.imagesX + '&Height=' + configService.imagesY;\r\n                    }\r\n                }\r\n\r\n                url += size;\r\n                return url;\r\n            }\r\n            return null;\r\n        };\r\n\r\n        $scope.reinitSelects = function() {\r\n            $('#template').trigger('refresh');\r\n        };\r\n\r\n        $scope.keyboardTemplateDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n        $scope.tempCopies = [];\r\n\r\n        $scope.showKeyboardTemplateDlg = function() {\r\n            $scope.tempCopies.value = $scope.printParams.copies;\r\n\r\n            //console.log(1, $scope.tempCopies.value);\r\n            if (!$scope.tempCopies.value) $scope.tempCopies.value = 1;\r\n\r\n            $timeout(function() {\r\n                $scope.keyboardTemplateDlg.show('#copiesVal');\r\n            });\r\n        };\r\n\r\n        // callback\r\n        $scope.setCopies = function(prm) {\r\n            $scope.keyboardTemplateDlg.hide(true);\r\n            $timeout(function() {\r\n                if (prm === true) {\r\n                    if($scope.tempCopies.value>10000 ||  $scope.tempCopies.value<1) {\r\n                        errorService.showError(\r\n                            gettextCatalog.getString('Invalid number of copies was specified!<br/> Please, enter the number of copies between 1 and 10000.'),\r\n                            null, null, null, true);\r\n                        $scope.tempCopies.value = 1;\r\n                    }\r\n\r\n                    $scope.printParams.copies = $scope.tempCopies.value;\r\n                }\r\n            });\r\n        };\r\n\r\n        function findTemplate(elem) {\r\n            if ($scope.printParams.labelSelectedArea !== undefined && ~$scope.printParams.labelSelectedArea.indexOf('Sheet')) {\r\n                if (elem.Type == 'Price Label Sheet') return true;\r\n            } else {\r\n                switch ($scope.printParams.labelSelectedArea) {\r\n                    case 'Continuous feed (19mm)':\r\n                        return elem.Type == 'Price Label Cont19';\r\n                    case 'Continuous feed (24mm)':\r\n                        return elem.Type == 'Price Label Cont24';\r\n                    case 'Continuous dual (2x1)':\r\n                        return elem.Type == 'Price Label Sheet';\r\n                    default:\r\n                        return elem.Type == 'Price Label Cont19';\r\n                }\r\n            }\r\n        }\r\n\r\n        $scope.nextStepPrintModal = function() {\r\n            $.blockUI();\r\n\r\n            if (!$scope.printParams.copies) $scope.printParams.copies = 1;\r\n\r\n            console.log('printParams', $scope.printParams);\r\n\r\n            var template = $scope.labelTemplates.find(findTemplate);\r\n\r\n            if (template) {\r\n                configService.setLabelTemplate(template.TemplateID);\r\n            }\r\n\r\n            if ($scope.printParams.labelSelectedArea === undefined) {\r\n                $scope.printParams.labelSelectedAreaParams = $scope.labelPrintArea[0];\r\n                $scope.printParams.labelSelectedArea = $scope.labelPrintArea[0].text;\r\n            } else {\r\n                $.each($scope.labelPrintArea, function(idx, el) {\r\n                    if (el.text === $scope.printParams.labelSelectedArea) {\r\n                        $scope.printParams.labelSelectedAreaParams = el;\r\n                    }\r\n                });\r\n            }\r\n\r\n            labelService.getTemplate().then(\r\n                function(resp) {\r\n                    var result = reportService.formatCurrencyInTemplate(resp.Template, ['itemProductLabels.ProductPrice'], 'currency');\r\n\r\n                    var WCode = '';\r\n                    if ($scope.printParams.labelSelectedAreaParams) {\r\n                        WCode = $scope.printParams.labelSelectedAreaParams.value ? $scope.printParams.labelSelectedAreaParams.value : $scope.labelPrinterSettings.labelPrinterWidthCode;\r\n                    }\r\n\r\n                    $scope.labelTemplateClass = 'wCode' + WCode;\r\n\r\n                    var replacedString =\r\n                        '<canvas class=\"product_barcode\" id=\"{{itemProductLabels.ID}}-ean8\" type=\"ean8\" b_value=\"{{itemProductLabels.Barcode}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemProductLabels.Barcode}}</canvas><div class=\"barcode_img img_{{itemProductLabels.ID}}-ean8\" style=\"text-align: center;\"></div>';\r\n                    result = result.replace('{{itemProductLabels.ProductBarCode_ean8}}', replacedString);\r\n                    replacedString =\r\n                        '<canvas class=\"product_barcode\" id=\"{{itemProductLabels.ID}}-ean13\" type=\"ean13\" b_value=\"{{itemProductLabels.Barcode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemProductLabels.Barcode}}</canvas><div class=\"barcode_img img_{{itemProductLabels.ID}}-ean13\" style=\"text-align: center;\"></div>';\r\n                    result = result.replace('{{itemProductLabels.ProductBarCode_ean13}}', replacedString);\r\n                    replacedString =\r\n                        '<canvas class=\"product_barcode\" id=\"{{itemProductLabels.ID}}-industrial2of5\" b_value=\"{{itemProductLabels.Barcode}}\"  type=\"industrial2of5\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemProductLabels.Barcode}}</canvas><div class=\"barcode_img img_{{itemProductLabels.ID}}-industrial2of5\" style=\"text-align: center;\"></div>';\r\n                    result = result.replace('{{itemProductLabels.ProductBarCode_industrial2of5}}', replacedString);\r\n                    replacedString =\r\n                        '<canvas class=\"product_barcode\" id=\"{{itemProductLabels.ID}}-upca\" type=\"upca\" b_value=\"{{itemProductLabels.Barcode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemProductLabels.Barcode}}</canvas><div class=\"barcode_img img_{{itemProductLabels.ID}}-upca\" style=\"text-align: center;\"></div>';\r\n                    result = result.replace('{{itemProductLabels.ProductBarCode_upca}}', replacedString);\r\n                    replacedString =\r\n                        '<canvas class=\"product_barcode\" id=\"{{itemProductLabels.ID}}-upce\" type=\"upce\" b_value=\"{{itemProductLabels.Barcode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemProductLabels.Barcode}}</canvas><div class=\"barcode_img img_{{itemProductLabels.ID}}-upce\" style=\"text-align: center;\"></div>';\r\n                    result = result.replace('{{itemProductLabels.ProductBarCode_upce}}', replacedString);\r\n                    replacedString =\r\n                        '<canvas class=\"product_barcode\" id=\"{{itemProductLabels.ID}}-code128\" type=\"code128\" b_value=\"{{itemProductLabels.Barcode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemProductLabels.Barcode}}</canvas><div class=\"barcode_img img_{{itemProductLabels.ID}}-code128\" style=\"text-align: center;\"></div>';\r\n                    result = result.replace('{{itemProductLabels.ProductBarCode_code128}}', replacedString);\r\n\r\n                    result = result.replace('{{itemProductLabels.Name}}', '<span class=\"ProductNameSpan\">{{itemProductLabels.Name}}</span>');\r\n                    result = result.replace('{{itemProductLabels.Code}}', '<span class=\"ProductCodeSpan\">{{itemProductLabels.Code}}</span>');\r\n                    result = result.replace('{{itemProductLabels.ProductCode}}', '<span class=\"ProductCodeSpan\">{{itemProductLabels.ProductCode}}</span>');\r\n\r\n                    $('.table-to-delete').remove();\r\n                    $scope.labelTemplate = result;\r\n\r\n                    updateLabelsTemplate();\r\n\r\n                    if ($scope.mode != 'labels') $scope.mode = 'labels';\r\n                    else\r\n                        $timeout(function() {\r\n                            $scope.formatTemplate();\r\n                        }, 500);\r\n\r\n                    $.unblockUI();\r\n\r\n                    $timeout(function() {\r\n                        $('#labelPrinterWidth').trigger('refresh');\r\n                    }, 500);\r\n                },\r\n                function(err) {\r\n                    // in case of template error or something like this we will allow to select outlet/registry manually\r\n                    $.unblockUI();\r\n                    configService.bypassOutletRegistry = false;\r\n                    errorService.showError(err);\r\n                }\r\n            );\r\n        };\r\n\r\n        function updateLabelsTemplate() {\r\n            $scope.newLabelItems = [];\r\n\r\n            $.each($scope.productsData, function(idx, el) {\r\n                if (el.IsFamily == 1 || el.IsFamily === true) {\r\n                    $.each(el.Products, function(idch, elch) {\r\n                        if (elch.labelPrint === true || elch.labelPrint == 1) {\r\n                            $scope.multiplyPush(elch.Barcode, elch.Name, elch.Price? elch.Price: elch.PriceTear1, elch.ID, elch.Code);\r\n                        }\r\n                    });\r\n                } else {\r\n                    if (el.labelPrint === true || el.labelPrint == 1) {\r\n                        $scope.multiplyPush(el.Barcode, el.Name, el.Price? el.Price:  el.PriceTear1, el.ID, el.Code);\r\n                    }\r\n                }\r\n            });\r\n\r\n            console.log('printParams', $scope.newLabelItems);\r\n\r\n            var WCode = 0;\r\n            if ($scope.printParams.labelSelectedAreaParams) {\r\n                WCode = $scope.printParams.labelSelectedAreaParams.value ? $scope.printParams.labelSelectedAreaParams.value : $scope.labelPrinterSettings.labelPrinterWidthCode;\r\n            }\r\n            productManagementService.updateLabelsTemplate($scope.newLabelItems, $scope.labelModel, $scope.currency, WCode >= 100 && WCode <= 103);\r\n        }\r\n\r\n        $scope.printLabels = function() {\r\n            var elements = $('.label-template.wCode table')\r\n                .parent();\r\n            elements.css('border', 'none')\r\n            elements.each(function (_, _el) {\r\n                var el = $(_el);\r\n                var tr = el.closest('tr');\r\n                \r\n                if (!tr.is(':first-child')) {\r\n                    el.css('padding-top', '5px');\r\n                }\r\n                if (!el.is(':last-child')) {\r\n                    el.css('padding-right', '20px');\r\n                }\r\n            });\r\n            \r\n            // $scope.goBack();\r\n\r\n            var element = $('.label-template>div.ng-scope>div.ng-scope');\r\n\r\n            return labelPrintService.printLabels(element);\r\n        };\r\n\r\n        $scope.formatTemplate = function() {\r\n            var lt = $('.label-template.wCode').children();\r\n\r\n            var pointsX = '';\r\n            var pointsY = '';\r\n            var labelW = '';\r\n            var labelH = '';\r\n\r\n            labelWpad = '100%';\r\n\r\n            if ($scope.isSite) {\r\n                pointsX = $scope.printParams.labelSelectedAreaParams.pointsX ? $scope.printParams.labelSelectedAreaParams.pointsX : $scope.labelPrinterSettings.labelPrinterWidthPointsX;\r\n                pointsY = $scope.printParams.labelSelectedAreaParams.pointsY ? $scope.printParams.labelSelectedAreaParams.pointsY : $scope.labelPrinterSettings.labelPrinterWidthPointsY;\r\n                labelW = $scope.printParams.labelSelectedAreaParams.labelW ? $scope.printParams.labelSelectedAreaParams.labelW : $scope.labelPrinterSettings.labelW;\r\n                \r\n                labelH = $scope.printParams.labelSelectedAreaParams.labelH ? $scope.printParams.labelSelectedAreaParams.labelH : $scope.labelPrinterSettings.labelH;\r\n                var perRow = $scope.printParams.labelSelectedAreaParams.perRow ? $scope.printParams.labelSelectedAreaParams.perRow : $scope.labelPrinterSettings.perRow;\r\n                var rows = $scope.printParams.labelSelectedAreaParams.rows ? $scope.printParams.labelSelectedAreaParams.rows : $scope.labelPrinterSettings.rows;\r\n\r\n                $scope.labelsPRow = perRow !== undefined ? perRow : Math.floor(pointsX / labelW);\r\n                $scope.labelsPPage = rows !== undefined  ? $scope.labelsPRow * rows : $scope.labelsPRow * Math.floor(pointsY / labelH);\r\n            } else {\r\n                labelW = 380;\r\n                labelH = 85;\r\n                $scope.labelsPRow = 1;\r\n                $scope.labelsPPage = 1;\r\n            }\r\n\r\n            lt.children()\r\n                .children('p')\r\n                .remove();\r\n\r\n            lt.find('[ngm-font-size]').each(function() {\r\n                var sz = $(this).attr('ngm-font-size');\r\n                $(this).css('font-size', sz);\r\n            });\r\n\r\n            lt.css('line-height', '1.2');\r\n\r\n            lt.find('table')\r\n                .css('overflow','hidden');\r\n\r\n            lt.find('table td').css('width', 'auto');\r\n            lt.find('table td p')\r\n                .css('width', 'auto')\r\n                .css('margin', '0 10px')\r\n                .css('padding', '0')\r\n                .css('overflow', 'hidden')\r\n                .css('white-space', 'nowrap')\r\n                .css('text-overflow', 'ellipsis');\r\n\r\n            var columnsCount = lt.find('table').first().find('tr').first().find('td').length;\r\n\r\n            if(!columnsCount)\r\n                columnsCount = 2;\r\n\r\n            if ($scope.labelsPRow < 2) {\r\n\r\n                lt.find('table')\r\n                    //.parent()\r\n                    .css('width', labelW)\r\n                    .css('text-align', 'left')\r\n                    .css('border', '1px solid');\r\n\r\n                //lt.find('table').css('width', 'auto');\r\n\r\n                lt.find('table')\r\n                    //.parent()\r\n                    .css('margin-top', '10px')\r\n                    .css('padding', '20px 0px');\r\n\r\n                lt.find('table td p')\r\n                    .css('width', labelW / columnsCount)\r\n                    .css('margin', '0');\r\n\r\n                lt.find('span')\r\n                    .css('max-width', '190px')\r\n                    .css('overflow', 'hidden')\r\n                    .css('white-space', 'nowrap')\r\n                    .css('text-overflow', 'ellipsis')\r\n                    .css('display', 'block');\r\n            } else {\r\n                lt.find('table')\r\n                    //.parent()\r\n                    .css('width', labelW)\r\n                    //.css('text-align', 'left')\r\n                    .css('border', '1px solid');\r\n\r\n                lt.find('table td p')\r\n                    .css('width', labelW /columnsCount)\r\n                    .css('margin', '0');\r\n\r\n                lt.find('.ProductNameSpan, .ProductCodeSpan')\r\n                    .css('max-width', labelW/columnsCount)\r\n                    .css('overflow', 'hidden')\r\n                    .css('white-space', 'nowrap')\r\n                    .css('text-overflow', 'ellipsis')\r\n                    .css('display', 'block');\r\n            }\r\n\r\n            if ($scope.labelsPRow > 2) {\r\n                lt.find('table').css('min-width', labelW);\r\n                lt.find('table').css('height', labelH);\r\n                lt.find('table')\r\n                    .parent()\r\n                    .css('height', labelH);\r\n                lt.find('.barcode_img')\r\n                    .css('height', labelH / 2)\r\n                    .css('overflow', 'hidden');\r\n                lt.find('img').css('height', '100%');\r\n            } else {\r\n                if ($scope.labelsPRow < 2) {\r\n                    if($scope.isSite){\r\n                        lt.find('table').css('margin-left', '40px');\r\n                    }\r\n                    lt.find('.barcode_img').css('height', '84px');\r\n                } else {\r\n                    lt.find('.barcode_img').css('height', '50px');\r\n                }\r\n                lt.find('img').css('height', '100%');\r\n            }\r\n\r\n            if ($scope.labelsPRow === 1) {\r\n                lt.find('table')\r\n                    //.parent()\r\n                    .css('page-break-after', 'always');\r\n            }\r\n\r\n            $timeout(function() {\r\n                if ($scope.labelsPRow > 1 || $scope.labelsPPage > 1) {\r\n                    productManagementService.makeTableFromTemplate($scope.labelsPRow, $scope.labelsPPage, labelW);\r\n                    var lt2 = $('.label-template.wCode').children();\r\n                    var pageEl = lt2.find('>div.ng-scope').find('>div.ng-scope');\r\n                    if (pageEl && pageEl.length) {\r\n                        pageEl.attr('style', '');\r\n                        var margins = $scope.printParams.labelSelectedAreaParams.margins ? $scope.printParams.labelSelectedAreaParams.margins : $scope.labelPrinterSettings.margins;\r\n                        if (typeof margins !== 'undefined' && Array.isArray(margins)) {\r\n                            pageEl.attr('style', 'margin: ' + margins.map(function (x) {return x + 'px'}).join(' ') + ';');\r\n                        }\r\n                    }\r\n                }\r\n            });\r\n        };\r\n\r\n        $scope.multiplyPush = function(Barcode, Name, PriceTear1, ID, Code) {\r\n            if ($scope.printParams.copies > 0) {\r\n                for (c = 0; c < $scope.printParams.copies; c++) {\r\n                    $scope.newLabelItems.push({\r\n                        Barcode: Barcode,\r\n                        Name: Name,\r\n                        ProductPrice: PriceTear1,\r\n                        ID: ID + '_' + c,\r\n                        Code: Code,\r\n                        ProductCode: Code\r\n                    });\r\n                }\r\n            }\r\n        };\r\n\r\n        $scope.printLabelCheck = function(row) {\r\n            if (row.IsFamily) {\r\n                if (row.isActive) {\r\n                    var cnt = 0;\r\n                    $.each(row.Products, function(idx, el) {\r\n                        if (!el.Barcode) {\r\n                            cnt++;\r\n                            el.labelPrint = false;\r\n                        } else {\r\n                            if (!el.labelPrint) el.labelPrint = true;\r\n                        }\r\n                    });\r\n\r\n                    if(cnt>1)\r\n                        errorService.showError(cnt + ' products have no barcode value.');\r\n                    else if(cnt===1)\r\n                        errorService.showError('1 product has no barcode value.');\r\n                } else {\r\n                    $scope.toggleRow(row).then(function() {\r\n                        var cnt = 0;\r\n                        $.each(row.Products, function(idx, el) {\r\n                            if (!el.Barcode) {\r\n                                cnt++;\r\n                                el.labelPrint = false;\r\n                            } else {\r\n                                if (el.labelPrint) el.labelPrint = false;\r\n                                else el.labelPrint = true;\r\n                            }\r\n                        });\r\n\r\n                        if(cnt>1)\r\n                            errorService.showError(cnt + ' products have no barcode value.');\r\n                        else if(cnt===1)\r\n                            errorService.showError('1 product has no barcode value.');\r\n                    });\r\n                }\r\n            } else {\r\n                if (!row.Barcode) {\r\n                    row.labelPrint = false;\r\n                    errorService.showError('Product has no barcode value.');\r\n                } else {\r\n                    if (row.labelPrint) row.labelPrint = false;\r\n                    else row.labelPrint = true;\r\n                }\r\n            }\r\n\r\n            console.log(row.Name + ' - ' + row.labelPrint);\r\n        };\r\n    }\r\n]);\r\n","angular.module('services').factory('productManagementService',\r\n    ['gettext', 'helperService', 'remoteRequestProvider', 'configService',\r\n     '$q', 'productsService', 'webOnlyProvider', '$timeout', 'barcodeService',\r\n    function (gettextCatalog, helperService, remoteRequestProvider, configService,\r\n     $q, productsService, webOnlyProvider, $timeout, barcodeService) {\r\n\r\n\r\n            var productManagementService = {};\r\n\r\n            productManagementService.getData = function () {\r\n                return webOnlyProvider.getProductData();\r\n            };\r\n\r\n            productManagementService.getTemplates = function (Process, Type, Name) {\r\n                return webOnlyProvider.getTemplates(Process, Type, Name);\r\n            };\r\n\r\n            productManagementService.loadProductList = function (page, limit, search, sorting) {\r\n\r\n                return webOnlyProvider.loadProductList(null, page, limit, '', search, sorting);\r\n            }\r\n\r\n            productManagementService.loadFamilyProductList = function (search, familyID) {\r\n\r\n                return webOnlyProvider.loadProductList(familyID, null, 200, '', search, null);\r\n            }\r\n\r\n\r\n            productManagementService.search = function (ID, text) {\r\n                return webOnlyProvider.loadProductList(1, 10, ID, text, null);\r\n            };\r\n\r\n            productManagementService.modifyProduct = function (data, isNew) {\r\n                data.OutletLocationMappingID = configService.lastECSMappingOutletID;\r\n\r\n                if (isNew)\r\n                    return webOnlyProvider.saveNewProduct(data);\r\n                else\r\n                    return webOnlyProvider.updateProduct(data);\r\n            };\r\n\r\n        /**\r\n         * This function converts local sale object to receipt model\r\n         * @param {Array} newLabelItems array of new labels\r\n         * @param {Object} labelModel label model\r\n         * @param {string} currency currency\r\n         * @returns {void} \r\n         */\r\n            productManagementService.updateLabelsTemplate = function (newLabelItems, labelModel, currency, scaleWidth) {\r\n\r\n                labelModel.ProductLabels = [];\r\n                $.each(newLabelItems, function (idx, el) {\r\n                    //el.ProductPrice = helperService.applyCurrency(el.ProductPrice, configService.currency+\" \")\r\n                    labelModel.ProductLabels.push(el);\r\n                });\r\n\r\n                /* /generating barcodes for reciept */\r\n\r\n                barcodeService.clearBarcodes();\r\n\r\n                $timeout(function () {\r\n\r\n                    $(\"canvas.product_barcode\").each(function (i, elem) {\r\n                        var type = $(this).attr(\"type\");\r\n                        var id = $(this).attr(\"id\");\r\n                        var text = $(this).attr(\"b_value\");\r\n\r\n                        barcodeService.initBarcode(id, type, text, text, \"\", scaleWidth ? 3 : undefined);\r\n                    });\r\n\r\n                    barcodeService.renderBarcodes();\r\n                });\r\n\r\n            }\r\n\r\n        /**\r\n         * This function converts template mark up to table markup for write page breaks\r\n         * @param {number} labelsPRow - labels per row\r\n         * @param {number} labelsPPage - rows per page\r\n         * @returns {void} \r\n         */\r\n        productManagementService.makeTableFromTemplate = function (labelsPRow, labelsPPage, labelW) {\r\n                \r\n            $(\".label-template table\").wrap('<td style=\"width:' + labelW + 'px;\"></td>');\r\n\r\n                productManagementService.wrapItems($(\".label-template table\").parent(), labelsPRow, '<tr />');\r\n                productManagementService.wrapItems($(\".label-template table\").parent().parent(), labelsPPage / labelsPRow, '<table class=\"table-to-delete\" style=\"page-break-after:always;\"><tbody></tbody></table>');\r\n         \r\n            // fix empty elements\r\n            $('.label-template div div div').each(function (_, el) {\r\n                if ($(el).children().length === 0) {\r\n                    $(el).remove();\r\n                }\r\n            })\r\n\r\n            $('.label-template .table-to-delete').parent().css('height', 'unset');\r\n        }\r\n\r\n        /**\r\n         * This function wraps elements\r\n         * @param {jquerySelector} selector - jquery selector\r\n         * @param {number} count - count items per wrap\r\n         * @param {string} wraper - string that used as wrapper\r\n         * @returns {void} \r\n         */\r\n            productManagementService.wrapItems = function (selector, count, wraper) {\r\n\r\n                var items = selector;\r\n                var itemsArr = items.get();\r\n                for (var i = 0; i < items.length; i += count) {\r\n                    $(itemsArr.slice(i, i + count)).wrapAll(wraper);\r\n                }\r\n\r\n            }\r\n\r\n            return productManagementService;\r\n        }\r\n\r\n\r\n    ]);\r\n","import { unpackStr } from \"./unpackWorkerHelper\";\r\n\r\nangular.module('services').service('productsService', [\r\n    '$q', '$http', 'configService', 'remoteRequestProvider', 'localDBProvider', '$interval', 'webOnlyProvider', 'helperService',\r\n    'liveSearchService', '$rootScope', 'jsStoreProvider', 'barcodeService', 'deviceInfo',\r\nfunction ($q, $http, configService, remoteRequestProvider, localDBProvider, $interval, webOnlyProvider, helperService,\r\n    liveSearchService, $rootScope, jsStoreProvider, barcodeService, deviceInfo) {\r\n    \r\n    $rootScope.$on('dataChanged.StocktakeTask', function (event) {\r\n        // disable product reload due to system overload\r\n        //var injector = angular.element('body').injector();\r\n        //var me = injector.get('productsService');\r\n        //me.loadProducts('force');\r\n    });\r\n\r\n    const useSql = localStorage.getItem('useSqlite');\r\n    this.useSqlite = useSql === null ? true : useSql === 'true';\r\n\r\n    this.stopLoadCheck = null;\r\n    this.startProductsAutoUpdate = function () {\r\n\r\n        if (!this.stopLoadCheck) {\r\n            this.stopLoadCheck = $interval(function (p) {\r\n                if (configService.isOnline) {\r\n                    // refrech data\r\n                    var injector = angular.element('body').injector();\r\n                    var me = injector.get('productsService');\r\n                    if (!!me.stopLoadCheck)\r\n                        return me.loadProducts(false);\r\n                }\r\n            }, 60000 * 5);\r\n        }\r\n\r\n        var deferred = $q.defer();\r\n        deferred.resolve(null);\r\n        return deferred.promise;\r\n    };\r\n\r\n    this.stopProductsAutoUpdate = function () {\r\n        if (this.stopLoadCheck) {\r\n            try {\r\n                $interval.cancel(this.stopLoadCheck);\r\n                this.stopLoadCheck = null;\r\n            }\r\n            catch (e) {\r\n            }\r\n\r\n        }\r\n    };\r\n\r\n    this.reloadWhenOutletChanged = function () {\r\n        //if (configService.isSite) {\r\n        //    return remoteRequestProvider.getLiveSearchProducs()\r\n        //        .then(function (data) {\r\n        //            return liveSearchService.fillData(data);\r\n        //        });\r\n        //} else {\r\n        return this.loadProducts(true);\r\n        //}\r\n    };\r\n\r\n    // critical section to escape from duplication\r\n    this.lockProductsUpdate = false;\r\n\r\n    this.getProvider = function () {\r\n        if (configService.isSite && !window.isSupported) return webOnlyProvider;\r\n        return configService.isSite || deviceInfo.isSimulator || (buildConfiguration.platform == 'android' && !this.useSqlite)  ? jsStoreProvider : localDBProvider;\r\n    };\r\n\r\n    this.loadProducts = function (force, getHash) {\r\n        if (this.lockProductsUpdate) {\r\n            return helperService.resolvePromise(null);\r\n        }\r\n\r\n        this.lockProductsUpdate = true;\r\n        var THIS = this;\r\n        console.log('useSqlite: ' + this.useSqlite);\r\n        var provider = this.getProvider();\r\n        var isForce = force === 'force' || force === true;\r\n        var pr;\r\n\r\n        const isFirst = localStorage.getItem('useSqlite') === null;\r\n\r\n        if (configService.isSite && !window.isSupported) {\r\n            pr = remoteRequestProvider.getLiveSearchProducs()\r\n                .then(function (data) {\r\n                    return liveSearchService.fillData(data.Products);\r\n                });\r\n        } else if (configService.isSite || configService.isOnline) {\r\n            console.time('checkProductsOld');\r\n\r\n            pr = provider.checkProductsOld(isForce)\r\n                .then(function (res) {\r\n                    console.timeEnd('checkProductsOld');\r\n                    if (res) {\r\n                        console.time('getProductsHash');\r\n                        return provider.getProductsHash(getHash ? false : isForce)\r\n                            .then(function (hash) {\r\n                                console.timeEnd('getProductsHash');\r\n                                console.time('loadProducts request');\r\n                                return remoteRequestProvider.loadProducts(hash);\r\n                            })\r\n                            .then((resp) => {\r\n                                // const compareResult = resp.headers('compare-result') === 'true';\r\n                                // const productHash = resp.headers('products-hash');\r\n                                if (typeof resp.data.Products === 'string') {\r\n                                    resp.data.Products = JSON.parse(resp.data.Products);\r\n                                }\r\n                                var data = {\r\n                                    hash: resp.data.ProductHash,\r\n                                    arr: Array.isArray(resp.data.Products) ? resp.data.Products : []\r\n                                };\r\n                                \r\n\r\n                                if (!resp.data.CompareResult) {\r\n                                    if (data.arr.length > 10000) {\r\n                                        localStorage.setItem('useSqlite', 'false');\r\n                                        THIS.useSqlite = false;\r\n                                    } else {\r\n                                        localStorage.setItem('useSqlite', 'true');\r\n                                        THIS.useSqlite = true;\r\n                                    }\r\n                                    provider = THIS.getProvider();\r\n                                }\r\n\r\n                                console.timeEnd('loadProducts request');\r\n                                if (!resp.data || resp.data.CompareResult) {\r\n                                    if (typeof (provider.buildIndexes) === 'function')\r\n                                        return provider.buildIndexes();\r\n                                    else\r\n                                        return helperService.resolvePromise(false);\r\n                                }\r\n\r\n                                console.time('products unzip');\r\n                                console.timeEnd('products unzip');\r\n                                console.time('refreshProducts');\r\n                               \r\n                                return provider.refreshProducts(data);\r\n                            })\r\n                            .then(function (data) {\r\n                                console.timeEnd('refreshProducts');\r\n                                console.time('getLiveSearchProducs');\r\n                                return provider.getLiveSearchProducs(data);\r\n                            })\r\n                            .then(function (data) {\r\n                                console.timeEnd('getLiveSearchProducs');\r\n                                console.time('fillData live search');\r\n                                return liveSearchService.fillData(data);\r\n                            })\r\n                            .then(function (res) {\r\n                                console.timeEnd('fillData live search');\r\n                                $rootScope.$broadcast('products.reloaded');\r\n                                var deferred2 = $q.defer();\r\n                                deferred2.resolve(res);\r\n                                return deferred2.promise;\r\n                            });\r\n                    } else {\r\n                        return provider.getLiveSearchProducs()\r\n                        .then(function (data) {\r\n                            return liveSearchService.fillData(data);\r\n                        });\r\n                    }\r\n                });\r\n        } else {\r\n            pr = provider.getLiveSearchProducs()\r\n                .then(function (data) {\r\n                    return liveSearchService.fillData(data);\r\n                });\r\n        }\r\n\r\n        return pr.then(function (res) {\r\n            THIS.lockProductsUpdate = false;\r\n            return helperService.resolvePromise(res);\r\n        }).catch(function (err) {\r\n            THIS.lockProductsUpdate = false;\r\n            return helperService.rejectPromise(err);\r\n        });\r\n    };\r\n\r\n    // make search by like in the barcode, name, sku, family\r\n    this.search = function (text, quickKeySearch, quickKey, productID) {\r\n        this.weightBasedBarcode = null;\r\n        var THIS = this;\r\n        var qkeyTemplate = null;\r\n        var barcode = null;\r\n        var weightBasedBarcode = null;\r\n\r\n        if (quickKeySearch === true) {\r\n            qkeyTemplate = configService.quickKeyTemplateID;\r\n\r\n            if (!qkeyTemplate) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(0);\r\n                return deferred.promise;\r\n            }\r\n\r\n            barcode = null;\r\n            text = null;\r\n            productID = null;\r\n\r\n            if (!quickKey) {\r\n                // return quick keys as search result. no real search\r\n                var qtemplate = helperService.extractCurrentQuickKeyInfo();\r\n                var deferred = $q.defer();\r\n                deferred.resolve(!qtemplate ? 0 : qtemplate.length);\r\n                return deferred.promise;\r\n            }\r\n        }\r\n        else if (!!productID) {\r\n            barcode = null;\r\n            text = null;\r\n        }\r\n        else {\r\n            barcode = text;\r\n            if (!!text) {\r\n                text += '%';\r\n            }\r\n\r\n            // try to detect weight based barcode\r\n            weightBasedBarcode = barcodeService.parceBarcodeWeightBased(barcode);\r\n        }\r\n\r\n        var provider = (configService.isSite && !window.isSupported) ? webOnlyProvider : this.getProvider();\r\n\r\n        var pr = helperService.resolvePromise(0);\r\n\r\n        if (weightBasedBarcode) {\r\n            // search by weight based barcode, then standard if nothing will be found\r\n            pr = provider.search(weightBasedBarcode, '', null, null, null)\r\n                .then(function () { return provider.getSearchCount(); });\r\n        }\r\n\r\n        pr = pr.then(function (cnt) {\r\n            if (!cnt) {\r\n                THIS.weightBasedBarcode = null;\r\n                return provider.search(barcode, text, qkeyTemplate, quickKey, productID).\r\n                    then(function () { return provider.getSearchCount(); });\r\n            } else {\r\n                THIS.weightBasedBarcode = weightBasedBarcode;\r\n                return helperService.resolvePromise(cnt);\r\n            }\r\n        });\r\n\r\n        //var pr = provider.search(barcode, text, qkeyTemplate, quickKey, productID).\r\n        //    then(function () { return provider.getSearchCount(); });\r\n        return pr;\r\n    };\r\n\r\n    this.getProductByID = function (productID) {\r\n        var provider = (configService.isSite && !window.isSupported) ? webOnlyProvider : this.getProvider();\r\n\r\n        var pr = provider.getProductByID(productID);\r\n        return pr;\r\n    };\r\n\r\n    this.getSearchPage = function (page, pageSize, quickKeySearch, quickKey, productID) {\r\n\r\n        if (quickKeySearch!==true || quickKey != null) {\r\n            var provider = (configService.isSite && !window.isSupported) ? webOnlyProvider : this.getProvider();\r\n            return provider.getSearchPage(page, pageSize, productID);\r\n        }\r\n        else {\r\n            var qi = helperService.extractCurrentQuickKeyInfo();\r\n            var start = page * pageSize, stop = page * pageSize + pageSize;\r\n            var arr = !!qi ? helperService.extractCurrentQuickKeyInfo().slice(start, stop) : [];\r\n            var res=[];\r\n            angular.forEach(arr, function (el) {\r\n                var obj = {\r\n                    Family: el.label,\r\n                    FamilyID: el.labelID,\r\n                    FamilyImageID: el.imageID,\r\n                    Name:el.label,\r\n                    ProductID: el.labelID,\r\n                    cnt:0,\r\n                    isFamily: 1,\r\n                    QuickKeyTemplateID: configService.quickKeyTemplateID,\r\n                    QuickKeyID: el.labelID,\r\n                    ImageType: el.imageContentType\r\n                };\r\n                res.push(obj);\r\n            });\r\n\r\n            var deferred = $q.defer();\r\n            deferred.resolve({data:res, page:page});\r\n            return deferred.promise;\r\n        }\r\n    };\r\n\r\n    this.familySearch = function (familyID) {\r\n        const provider = this.getProvider();\r\n\r\n        var pr = provider.familySearch(familyID).\r\n        then(function () { return provider.getFamilySearchCount(); });\r\n\r\n        return pr;\r\n    };\r\n\r\n    this.getFamilySearchPage = function (page, pageSize) {\r\n        const provider = this.getProvider();\r\n\r\n        return provider.getFamilySearchPage(page, pageSize);\r\n    };\r\n\r\n    this.getFamilySearchFull = function (familyID) {\r\n        const provider = this.getProvider();\r\n\r\n        return provider.familySearch(familyID);\r\n    };\r\n\r\n    // form requests for all images\r\n    this.getProductImages = function (isProduct,productIDs, callback) {\r\n        $.each(productIDs, function (idx, productID) {\r\n            var fun = isProduct ? remoteRequestProvider.loadImage : remoteRequestProvider.loadFamilyImage;\r\n\r\n            var f = fun(productID, 136, 68)\r\n                .then(function (res) {\r\n                    var type = res.data.ContentType;\r\n                    const objStr = unpackStr(res.data.Image);\r\n\r\n                    callback(productID, 'data:' + type + ';base64,' + objStr);\r\n                },\r\n                function (err) {\r\n                });\r\n        });\r\n    };\r\n\r\n    this.getGiftCardSettings = function () {\r\n\r\n        if (configService.isSite || deviceInfo.isSimulator) {\r\n            return remoteRequestProvider.getGiftCardSettings()\r\n            .then(function (res) {\r\n                var deferred = $q.defer();\r\n                configService.giftCardSettings = res.data.GiftCardSttings;\r\n                deferred.resolve(configService.giftCardSettings);\r\n                return deferred;\r\n            });\r\n        }\r\n        else {\r\n            if (configService.isOnline) {\r\n                return remoteRequestProvider.getGiftCardSettings()\r\n                        .then(function (res) {\r\n                            configService.giftCardSettings = res.data.GiftCardSttings;\r\n                            return localDBProvider.setGiftCardSettings(configService.giftCardSettings);\r\n                        });\r\n            }\r\n            else {\r\n                return localDBProvider.getGiftCardSettings()\r\n                .then(function (res) {\r\n                    var deferred = $q.defer();\r\n                    configService.giftCardSettings = res;\r\n                    deferred.resolve(configService.giftCardSettings);\r\n                    return deferred;\r\n                });\r\n            }\r\n        }\r\n    };\r\n\r\n    this.checkProductSerialNumber = function(productID, outletID, serialNumber){\r\n\r\n        if(configService.isOnline){\r\n\r\n            if(serialNumber.length === 0){\r\n                var deferred = $q.defer();\r\n                deferred.resolve({found: false});\r\n                return deferred.promise;\r\n            }\r\n            var provider = remoteRequestProvider;\r\n            var pr = provider.checkSerialNumber(productID, outletID, serialNumber)\r\n            .then(function (res) {\r\n                var deferred = $q.defer();\r\n\r\n                var result = {found: false};\r\n                if(res.data.length > 0){\r\n                    result.found = true;\r\n                    result.data = res.data;\r\n                }\r\n                \r\n\r\n                deferred.resolve(result);\r\n                return deferred.promise;\r\n            });\r\n    \r\n            return pr;\r\n        }\r\n        else{\r\n            var deferred = $q.defer();\r\n            deferred.resolve({found: false});\r\n            return deferred.promise;\r\n        }\r\n\r\n    };\r\n\r\n    // taxes part\r\n    // array below will contain all tenant taxes list\r\n    this.taxRules = [];\r\n    this.loadTaxRules = function () {\r\n        var THIS = this;\r\n        if (!configService.isSite && !configService.isOnline && !deviceInfo.isSimulator){\r\n            return localDBProvider.loadTaxRules()\r\n            .then(function (data) {\r\n                THIS.taxRules = data.data;\r\n                return helperService.resolvePromise(data);\r\n            });\r\n        }\r\n\r\n        var pr = remoteRequestProvider.loadTaxRules()\r\n        .catch(function (err) {\r\n            if (configService.isSite || deviceInfo.isSimulator)\r\n                throw err;\r\n\r\n            if (err.status !== -1)\r\n                throw err;\r\n            else {\r\n                return localDBProvider.loadTaxRules();\r\n            }\r\n        }).then(function (data) {\r\n                THIS.taxRules = !data || !data.data ? [] :  data.data;\r\n                return helperService.resolvePromise(data);\r\n            });\r\n\r\n        if (!configService.isSite && !deviceInfo.isSimulator) {\r\n            pr = pr.then(function (data) {\r\n                return localDBProvider.refreshTaxRules(data);\r\n            });\r\n        }\r\n\r\n        return pr;\r\n    };\r\n\r\n    this.checkCheckoutProductsAvailability = function(products2, outletID) {\r\n        if(configService.isOnline){\r\n            var products = products2.filter(function(p) {\r\n                                return p.ProductType === 'Stock';\r\n                            });\r\n\r\n            if(products.length === 0){\r\n                var deferred = $q.defer();\r\n                deferred.resolve({insufficient : false});\r\n                return deferred.promise;\r\n            }\r\n\r\n            var request = [];\r\n\r\n            angular.forEach(products, function (el) {\r\n                if(el.CanEdit && el.CanDelete && el.SaleType === 'sale'){\r\n                    var prod = {\r\n                        ProductID: el.ProductID,\r\n                        Quantity: el.Count,\r\n                        Sku: el.Sku\r\n                    };\r\n                    request.push(prod);\r\n                }                \r\n            });\r\n\r\n            if(request.length === 0){\r\n                var deferred = $q.defer();\r\n                deferred.resolve({insufficient : false});\r\n                return deferred.promise;\r\n            }\r\n\r\n\r\n            var provider = remoteRequestProvider;\r\n            var pr = provider.checkCheckoutProductsAvailability(request, outletID)\r\n            .then(function (res) {\r\n                var deferred = $q.defer();\r\n\r\n                var result = {insufficient: false};\r\n                if(res.data){\r\n                    result.insufficient = res.data.insufficient;\r\n                    result.insufficientProducts = res.data.insufficientProducts;\r\n                    result.insufficientQuantitySKUs = res.data.insufficientQuantitySKUs;\r\n                }                \r\n\r\n                deferred.resolve(result);\r\n                return deferred.promise;\r\n            });\r\n    \r\n            return pr;\r\n        }\r\n        else{\r\n            var deferred = $q.defer();\r\n            deferred.resolve({insufficient: false});\r\n            return deferred.promise;\r\n        }  \r\n    };\r\n}]);\r\n","angular.module('services').service('receiptService', [\r\n    '$q', '$http', 'configService', 'remoteRequestProvider', 'localDBProvider', 'helperService', 'deviceInfo',\r\n    function ($q, $http, configService, remoteRequestProvider, localDBProvider, helperService, deviceInfo) {\r\n\r\n        this.fixTerminalReceipt = function(fe, attr, name) {\r\n            fe.attr(attr);\r\n            fe.css('display', 'none');\r\n            fe.attr('ng-bind-html', name);\r\n            fe.html('');\r\n            fe.parent().attr('not-print', '');\r\n        }\r\n\r\n        this.getReceiptTemplate = function (forceLocal, templateName, scopeObjectName) {\r\n            console.time('getReceiptTemplate fun');\r\n            var provider = (configService.isOnline && forceLocal !== true) || forceLocal === 'remote'  || deviceInfo.isSimulator ? remoteRequestProvider : localDBProvider;\r\n            var promise = null;\r\n\r\n            if (configService.isSite || forceLocal === 'remote') {\r\n\r\n                var v = forceLocal !== true ? null : configService.loadReceiptTemplate();\r\n\r\n                if (!!v) {\r\n                    var deffered = $q.defer();\r\n                    deffered.resolve(JSON.parse(v));\r\n                    promise = deffered.promise;\r\n                }\r\n                else {\r\n                    if (!!templateName)\r\n                        promise = remoteRequestProvider.getReceiptTemplateByName(templateName, scopeObjectName);\r\n                    else\r\n                        promise = remoteRequestProvider.getReceiptTemplate(configService.receiptID);\r\n                }\r\n            }\r\n            else {\r\n                promise = provider.getReceiptTemplate(configService.receiptID);\r\n            }\r\n\r\n            promise = promise.then((receipt) => {\r\n                const deffered = $q.defer();\r\n                console.timeEnd('getReceiptTemplate fun');\r\n                console.time('getReceiptTemplate process');\r\n\r\n                // check if email template is empty use main receipt template\r\n                if (!receipt.data.EmailSubject)\r\n                    receipt.data.EmailSubject = \"\";\r\n                if (!receipt.data.EmailTemplate)\r\n                    receipt.data.EmailTemplate = receipt.data.Template;\r\n\r\n                if (forceLocal !== 'remote' && forceLocal !== true && configService.isOnline && configService.isSite === false && !deviceInfo.isSimulator) {\r\n                    localDBProvider.saveReceiptTemplate(configService.receiptID, receipt.data);\r\n                }\r\n\r\n                if (forceLocal !== 'remote' && configService.isSite === true) {\r\n                    configService.saveReceiptTemplate(JSON.stringify(receipt));\r\n                }\r\n\r\n                // fix for additional card receipts\r\n                let supportMerchantCustomerReceiptPrint = true;\r\n                let supportLinklyMerchantCustomerReceiptPrint = true;\r\n\r\n                const el = $('<div data-base>' + receipt.data.Template + '</div>');\r\n                let fe = el.find(\"span:contains('{{itemTyroTerminalReceipts.MerchantReceipt}}')\");\r\n                if (fe.length > 0) {\r\n                    this.fixTerminalReceipt(fe, 'merchant-receipt', \"itemTyroTerminalReceipts.MerchantReceipt\");\r\n                }\r\n                else {\r\n                    supportMerchantCustomerReceiptPrint = el.find('[ng-bind-html=\"itemTyroTerminalReceipts.MerchantReceipt\"]').length > 0;\r\n                }\r\n\r\n                fe = el.find(\"span:contains('{{itemLinklyTerminalReceipts.MerchantReceipt}}')\");\r\n                if (fe.length > 0) {\r\n                    this.fixTerminalReceipt(fe, 'merchant-receipt', \"itemLinklyTerminalReceipts.MerchantReceipt\");\r\n                }\r\n                else {\r\n                    supportLinklyMerchantCustomerReceiptPrint = el.find('[ng-bind-html=\"itemLinklyTerminalReceipts.MerchantReceipt\"]').length > 0;\r\n                }\r\n\r\n                fe = el.find(\"span:contains('{{itemTyroTerminalReceipts.CustomerReceipt}}')\");\r\n\r\n                if (fe.length > 0) {\r\n                    this.fixTerminalReceipt(fe, 'customer-receipt', \"itemTyroTerminalReceipts.CustomerReceipt\");\r\n                }\r\n                else\r\n                    supportMerchantCustomerReceiptPrint = el.find('[ng-bind-html=\"itemTyroTerminalReceipts.CustomerReceipt\"]').length > 0;\r\n\r\n                fe = el.find(\"span:contains('{{itemLinklyTerminalReceipts.CustomerReceipt}}')\");\r\n\r\n                if (fe.length > 0) {\r\n                    this.fixTerminalReceipt(fe, 'customer-receipt', \"itemLinklyTerminalReceipts.CustomerReceipt\");\r\n                }\r\n                else\r\n                    supportLinklyMerchantCustomerReceiptPrint = el.find('[ng-bind-html=\"itemLinklyTerminalReceipts.CustomerReceipt\"]').length > 0;\r\n\r\n                fe = el.find(\"span:contains('{{itemTerminalReceipts.MerchantReceipt}}')\");\r\n                if (fe.length > 0) {\r\n                    this.fixTerminalReceipt(fe, 'merchant-receipt', \"itemTerminalReceipts.MerchantReceipt\");\r\n                }\r\n                fe = el.find(\"span:contains('{{itemTerminalReceipts.CustomerReceipt}}')\");\r\n                if (fe.length > 0) {\r\n                    this.fixTerminalReceipt(fe, 'customer-receipt', \"itemTerminalReceipts.CustomerReceipt\");\r\n                }\r\n\r\n                helperService.getReceiptProcessSettings(el);\r\n\r\n                receipt.data.Template = el.html();\r\n                configService.supportMerchantCustomerReceiptPrint = supportMerchantCustomerReceiptPrint;\r\n                configService.supportLinklyMerchantCustomerReceiptPrint = supportLinklyMerchantCustomerReceiptPrint;\r\n\r\n                console.timeEnd('getReceiptTemplate process');\r\n                deffered.resolve(receipt.data);\r\n                return deffered.promise;\r\n            });\r\n\r\n            return promise;\r\n        };\r\n\r\n        this.prepareCashManagementReceiptSaleModel = function (scope, obj) {\r\n            scope.receiptSaleModel = {};\r\n            scope.receiptSaleModel.Date = (new Date()).toDateString();\r\n            scope.receiptSaleModel.Time = '';\r\n            scope.receiptSaleModel.OutletName = configService.lastOutlet;\r\n            scope.receiptSaleModel.RegistryName = configService.lastRegistry;\r\n            scope.receiptSaleModel.UserName = configService.userName;\r\n            scope.receiptSaleModel.CashManagementReceipts = [];\r\n\r\n            angular.forEach(obj, function (el) {\r\n                scope.receiptSaleModel.CashManagementReceipts.push({\r\n                    CashManagementOperation: el.OperationType,\r\n                    CashManagementAmount: el.Amount,\r\n                    CashManagementNotes: el.Reasons\r\n                });\r\n            });\r\n        };\r\n\r\n        this.prepareVantivDeclineReceiptSaleModel = function (scope, obj, currency) {\r\n            scope.receiptSaleModel = {};\r\n            scope.receiptSaleModel.VantivTerminalReceipts = [];\r\n            scope.receiptSaleModel.Date = (new Date()).toDateString();\r\n            scope.receiptSaleModel.Time = '';\r\n            scope.receiptSaleModel.OutletName = configService.lastOutlet;\r\n            scope.receiptSaleModel.RegistryName = configService.lastRegistry;\r\n            scope.receiptSaleModel.UserName = configService.userName;\r\n            scope.receiptSaleModel.VantivTerminalReceipts.push(this.fillVantivTransactionData(obj, currency));\r\n        };\r\n\r\n        this.fillVantivTransactionData = function (transactionData, currency) {\r\n            var tags = [];\r\n            if (!!transactionData.emv) {\r\n                angular.forEach(transactionData.emv.tags, function (t) {\r\n                    tags.push({ key: t.key, value: t.value });\r\n                });\r\n            }\r\n\r\n            // code below for tests only!\r\n            //tags.push({ key: '111', value: '333' });\r\n            //tags.push({ key: '222', value: '444' });\r\n\r\n            return {\r\n                VantivMerchantID: transactionData.merchantId,\r\n                VantivTerminalID: transactionData.terminalId,\r\n                VantivReferenceNo: transactionData._processor.processorReferenceNumber,\r\n                VantivAccountNo: transactionData.accountNumber,\r\n                VantivCard: transactionData.cardLogo,\r\n                VanitvEntry: transactionData.entryMode,\r\n                VantivTransactionID: transactionData.transactionId,\r\n                VantivApprovalCode: transactionData.approvalNumber,\r\n                VantivResponseCode: transactionData._processor.processorResponseCode,\r\n                VantivExpressResponseCode: transactionData._processor.hostResponseCode,\r\n                VantivApprovedAmount: helperService.applyCurrency(transactionData._type === \"returnResponse\" ? -transactionData.totalAmount : transactionData.approvedAmount, currency),\r\n                VantivSignature: transactionData.signatureImage,\r\n                VantivApplicationID: !!transactionData.emv ? transactionData.emv.applicationIdentifier : null,\r\n                VantivCryptogram: !!transactionData.emv ? transactionData.emv.cryptogram : null,\r\n                VantivTags: tags\r\n            };\r\n        };\r\n\r\n    }]);\r\n","angular.module('services').service('registryService', [\r\n    '$q', 'configService', 'remoteRequestProvider', 'localDBProvider', 'webOnlyProvider', 'cashManagementService',\r\n    'constants', 'cardPayService', 'errorService', 'deviceInfo', 'jsStoreProvider', 'orderStatusService',\r\nfunction ($q, configService, remoteRequestProvider, localDBProvider, webOnlyProvider, cashManagementService, constants, cardPayService, errorService, deviceInfo, jsStoreProvider, orderStatusService) {\r\n    this.currentSavingRegistryClose = null;\r\n\r\n    this.openRegistry = function (ID, registryID, userName) {\r\n        var provider = configService.isSite || deviceInfo.isSimulator ? webOnlyProvider : localDBProvider;\r\n\r\n        var pr = provider.openRegistry(ID, registryID, userName, !configService.isSite).then(function (res) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res);\r\n            return deferred.promise;\r\n        });\r\n        return pr;\r\n    };\r\n\r\n    /**\r\n     * @param {PosCloseRegistryData} obj\r\n     */\r\n    this.closeRegistry = function (obj) {\r\n        var self = this;\r\n        var provider = localDBProvider;\r\n        if (!obj.Note) {\r\n            obj.Note = '';\r\n        }\r\n\r\n        self.currentSavingRegistryClose = null;\r\n\r\n        if (configService.isSite || deviceInfo.isSimulator) {\r\n            obj.IsActive = 0;\r\n            obj.IsMobile = !configService.isSite;\r\n\r\n            var ordersPromise = fetchOrdersForCloseRegistry(obj.ID, obj);\r\n\r\n            var endOfDayPromise = cardPayService.getEndOfDayReport(this, obj.ID)\r\n                .then(function (res) {\r\n                    obj.EndOfDayReport = !!res ? JSON.stringify(res) : null;\r\n                });\r\n\r\n            return $q.all([ordersPromise, endOfDayPromise])\r\n                .then(function () {\r\n                    return remoteRequestProvider.closeRegistry([obj]);\r\n                });\r\n        } else {\r\n            var pr = sendOfflineOpenCloseRegistry(100)\r\n             .then(function () {\r\n                    var ordersPromise = fetchOrdersForCloseRegistry(obj.ID, obj);\r\n\r\n                    var endOfDayPromise = cardPayService.getEndOfDayReport(this, obj.ID)\r\n                        .then(function (endOfDayReport) {\r\n                            obj.EndOfDayReport = !!endOfDayReport ? JSON.stringify(endOfDayReport) : null;\r\n                        })\r\n                        .catch(function (err) {\r\n                            errorService.showError(err);\r\n                            obj.EndOfDayReport = null;\r\n                        });\r\n\r\n                    return $q.all([ordersPromise, endOfDayPromise]);\r\n                })\r\n                .then(function () {\r\n                   self.currentSavingRegistryClose = obj.ID;\r\n                   return provider.closeRegistry(obj.ID, obj.CashCounted, obj.CreditCardCounted, obj.GiftCardCounted,\r\n                    obj.LoyaltyCounted, obj.StoreCreditCounted, obj.Note, obj.customPayments, obj.EndOfDayReport)\r\n                    .then(function (res) {\r\n                    if (configService.isOnline) {\r\n                        obj.IsActive = 0;\r\n                        obj.IsMobile = !configService.isSite;\r\n                        return remoteRequestProvider.closeRegistry([obj])\r\n                        //return provider.getCloseRegistryAdditionalTotals(obj.ID).then(function (resTot) {\r\n                        //    obj.AdditionalTotals = resTot;\r\n                        //    return remoteRequestProvider.closeRegistry([obj]);\r\n                        //})\r\n                        .then(function (res) { return cashManagementService.sendOfflineCashManagement(obj.RegistryID); })\r\n                        .then(function (res) { return localDBProvider.sendClosecRegistry(obj.ID); })\r\n                        .then(function (res) { return localDBProvider.removeCashMovements(obj.ID); })\r\n                        .then(function (res) { return localDBProvider.removeSendedClosecRegistry(obj.ID, obj.RegistryID); })\r\n                        .then(function () { self.currentSavingRegistryClose = null; });\r\n                    }\r\n                    else {\r\n                        self.currentSavingRegistryClose = null;\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve(res); // closure info will be sent later\r\n                        return deferred.promise;\r\n                    }\r\n                });\r\n            }).finally(function () {\r\n                self.currentSavingRegistryClose = null;\r\n            });\r\n\r\n\r\n            return pr;\r\n        }\r\n    };\r\n\r\n\r\n    this.updateRegistryCash = function (ID, amount) {\r\n        if (configService.isSite || deviceInfo.isSimulator) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(null);\r\n            return deferred.promise;\r\n        }\r\n\r\n        var provider = localDBProvider;\r\n        var pr = provider.updateRegistrySales(ID, amount, 0, 0, 0, 0).then(function (res) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res);\r\n            return deferred.promise;\r\n        });\r\n        return pr;\r\n    };\r\n\r\n    this.activeSalesFromLogin = null;\r\n    this.getActiveRegistrySales = function (registryID, userName, forceNetwork, mode, closeRegistryID) {\r\n        if(this.activeSalesFromLogin) {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(this.activeSalesFromLogin);\r\n            this.activeSalesFromLogin = null;\r\n            return deferred.promise;\r\n        }\r\n        console.time('getActiveRegistrySales fun');\r\n        var provider = (configService.isSite || forceNetwork || deviceInfo.isSimulator) ? webOnlyProvider : localDBProvider;\r\n        return provider.getActiveRegistrySales(registryID, userName, mode, closeRegistryID)\r\n        .then(function(res) {\r\n            console.timeEnd('getActiveRegistrySales fun');\r\n            var deferred = $q.defer();\r\n            deferred.resolve(res);\r\n            return deferred.promise;\r\n        });\r\n    };\r\n\r\n    this.getClosedRegistries = function (registryID, userName, forceNetwork) {\r\n        var provider = (configService.isSite || forceNetwork || deviceInfo.isSimulator) ? webOnlyProvider : localDBProvider;\r\n        return provider.getClosedRegistries(registryID, userName);\r\n    };\r\n\r\n    var registryService = this;\r\n    \r\n    function fetchOrdersForCloseRegistry(closeRegistryID, obj) {\r\n        if (orderStatusService.isTrackingEnabled(true)) {\r\n            return orderStatusService.getOrdersForCloseRegistry(closeRegistryID)\r\n                .then(function(orders) {\r\n                    obj.OrdersStatusHistory = orders;\r\n                })\r\n                .catch(function(err) {\r\n                    console.error('Failed to fetch order status history:', err);\r\n                });\r\n        } else {\r\n            return $q.resolve();\r\n        }\r\n    }\r\n    \r\n    function sendOfflineOpenCloseRegistry(count) {\r\n        var pr = localDBProvider.getRegisterStatisticToProcess(count, registryService.currentSavingRegistryClose).then(function (data) {\r\n            var arr = [];\r\n\r\n            $.each(data, function (idx, el) {\r\n                var obj = el;\r\n                obj.IsMobile = !configService.isSite;\r\n                arr.push(obj);\r\n            });\r\n\r\n            if (arr.length > 0) {\r\n                var orderPromises = arr.map(function(obj) {\r\n                    return fetchOrdersForCloseRegistry(obj.ID, obj)\r\n                        .then(function() {\r\n                            return obj;\r\n                        });\r\n                });\r\n\r\n                return $q.all(orderPromises)\r\n                    .then(function() {\r\n                        return remoteRequestProvider.closeRegistry(arr);\r\n                    })\r\n                    .then(function () {\r\n                        var promises = [];\r\n                        $.each(arr, function (idx, el) {\r\n                            var ppr = cashManagementService.sendOfflineCashManagement(el.RegistryID).then(function () {\r\n                                return localDBProvider.sendClosecRegistry(el.ID);\r\n                            });\r\n                            promises.push(ppr);\r\n                        });\r\n                        return $q.all(promises);\r\n                    },\r\n                    function (err) {\r\n                        // will be sent later\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve(false);\r\n                        return deferred.promise;\r\n                    });\r\n            }\r\n        });\r\n\r\n        return pr.then(function () {\r\n            return localDBProvider.getRegisterStatisticToProcess().then(function (resp) {\r\n                if (resp.length > 0 && configService.isOnline === true) {\r\n                    return true;\r\n                } else {\r\n                    return false;\r\n                }\r\n            });\r\n        });\r\n    }\r\n\r\n    this.addCallback = function () {\r\n        if (!(configService.isSite  || deviceInfo.isSimulator)) {\r\n            configService.addCallbackFunction(sendOfflineOpenCloseRegistry);\r\n        }\r\n    }\r\n}]);\r\n","import unpackArray from \"./unpackWorkerHelper\";\r\nimport buildConfiguration from './configEnvironment';\r\n\r\nangular.module('services').service('remoteRequestProvider',\r\n    ['$q', '$http', 'configService', '$timeout', '$interval', '$rootScope',\r\n        function ($q, $http, configService, $timeout, $interval, $rootScope) {\r\n\r\n            this.login = function (dearPosName, userName, password, pin, pinToken, externalToken = null, tokenType = null, savedData = null) {\r\n                // *************** for debug !!! ***********************\r\n                //configService.applicationKey = '12345';\r\n                //configService.tenantID = '32145';\r\n                //configService.loginUserID = '34534534';\r\n                //configService.userName = userName;\r\n                //configService.role = 'Administrator';\r\n                //deferred.resolve(null);\r\n                //return deferred.promise;\r\n                // ***************************************************\r\n    \r\n                const req = {\r\n                    UserName: userName,\r\n                    Password: password,\r\n                    PosApplicationName: dearPosName,\r\n                    PinToken: pinToken,\r\n                    Pin: pin,\r\n                    AppVersion: buildConfiguration.appVersion,\r\n                    ExternalToken: externalToken,\r\n                    TokenType: tokenType,\r\n                    Platform: buildConfiguration.platform,\r\n                    GetConfig: false\r\n                };\r\n\r\n                if (savedData) {\r\n                    req.Password = null;\r\n                    req.UserID = savedData.UserID;\r\n                    req.GetConfig = true;\r\n                    req.ApplicationKey = savedData.ApplicationKey;\r\n                }\r\n                return $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosAccount',\r\n                    data: req\r\n                });\r\n            };\r\n\r\n            this.changePassword = function (userID, passwordOld, passwordNew) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/PosUser?ID=' + userID,\r\n                    data: {\r\n                        OldPassword: passwordOld,\r\n                        NewPassword: passwordNew\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getUserPosOutletsRegistry = function (userID) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosOutlet?UserID=' + userID\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getNextSequence = function (posOutletID, posRegistryID) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosOrder/GetNextSequence?RegistryID=' + posRegistryID\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getCurrentSequence = function (posOutletID, posRegistryID) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosRegistrySequence/GetCurrentSequence?RegistryID=' + posRegistryID\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getPosOutlet = function (posOutletID) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosOutlet?ID=' + posOutletID\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getPosOutletsRegistry = function () {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosOutlet'\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadProducts = function (hash) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosProduct3',\r\n                    params: {\r\n                        ProductHash: !!hash ? hash : null,\r\n                        outletLocationMappingID: configService.lastECSMappingOutletID,\r\n                        ignoreNullValues: true\r\n                    }\r\n\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadImage = function (productID, sX, sY) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    //url: configService.connectionURL + '/PosProductImage?ID=' + productID + '&Width=' + sX + '&Height=' + sY\r\n                    url: configService.baseImageURL + '/PosProductImage?ID=' + productID + '&Width=' + sX + '&Height=' + sY\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadFamilyImage = function (productID, sX, sY) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    //            url: configService.connectionURL + '/PosProductFamilyImage?ID=' + productID + '&Width=' + sX + '&Height=' + sY\r\n                    url: configService.baseImageURL + '/PosProductFamilyImage?ID=' + productID + '&Width=' + sX + '&Height=' + sY\r\n                });\r\n                return req;\r\n            };\r\n\r\n\r\n            this.loadCostomersAll = function (hash, checkCount = false) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n//                    url: configService.connectionURL + '/PosLoadCustomer' + (!!hash ? ('?CustomerHash=' + hash) : '')\r\n                    url: configService.connectionURL + '/PosLoadCustomer2',\r\n                    params: {\r\n                        CustomerHash: hash,\r\n                        checkCount: checkCount\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadCustomers = function (text, page, limit, filters) {\r\n                if (!filters) {\r\n                    filters = {};\r\n                }\r\n                if (!configService.isOnline) {\r\n                    var deferred = $q.defer();\r\n                    deferred.reject('Cannot load customers when offline');\r\n                    return deferred.promise;\r\n                }\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosCustomer2',\r\n                    params: {\r\n                        Name: filters.CustomerName ? filters.CustomerName : null,\r\n                        Phone: filters.CustomerPhone ? filters.CustomerPhone : null,\r\n                        Email: filters.CustomerEmail ? filters.CustomerEmail : null,\r\n                        Term: text ? encodeURIComponent(text) : null,\r\n                        ID: filters.CustomerID ? filters.CustomerID : null,\r\n                        Page: page ? page : null,\r\n                        Limit: limit ? limit : null,\r\n                        SaleBarcode: filters.SaleBarcode ? filters.SaleBarcode : null\r\n                    }\r\n                });\r\n\r\n                return req.then(function (res) {\r\n                    if (res.data && res.data.Customers) {\r\n                        res.data.Customers = res.data.Customers.map(function (c) {\r\n                            var customer = Object.assign({}, c);\r\n                            customer.Attributes = [];\r\n                            if (c.Attributes && c.Attributes !== '') {\r\n                                const arr = c.Attributes.split(';');\r\n                                for (var i = 0; i < arr.length; i++) {\r\n                                    var value = c['AdditionalAttribute' + (i + 1)];\r\n                                    if (value) {\r\n                                        customer.Attributes.push({Name: arr[i], Value: value});\r\n                                    }\r\n                                }\r\n                            }\r\n                            return customer;\r\n                        });\r\n                    }\r\n                    return res;\r\n                });\r\n            };\r\n\r\n\r\n            this.loadFakeCustomer = function (email, id) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosCustomer2',\r\n                    params: {\r\n                        Email: email,\r\n                        FakeServerKey: id\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getCustomer = function (Id) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosCustomer2',\r\n                    params: {\r\n                        ID: Id\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n\r\n            this.createCustomer = function (customer) {\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosCustomer',\r\n                    data: customer\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadCountries = function () {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosCountry'\r\n                });\r\n\r\n                return req;\r\n            }\r\n\r\n            this.updateCustomer = function (customer) {\r\n                angular.extend(customer, { userName: configService.userName });\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/PosCustomer',\r\n                    data: customer\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.removeCustomer = function (customerID) {\r\n                var req = $http({\r\n                    method: 'DELETE',\r\n                    url: configService.connectionURL + '/PosCustomer?ID' + customerID\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.processSale = function (sale) {\r\n\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosOrder',\r\n                    data: { Data: sale }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getReceiptTemplate = function (receiptID) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosReceipt?ID=' + receiptID + '&Type=ANGULARJS&RootProperty=receiptSaleModel',\r\n                    cache: false\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getLabelTemplate = function (receiptID) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosReceipt?ID=' + receiptID + '&Type=ANGULARJS&RootProperty=labelModel',\r\n                    cache: false\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getReceiptTemplateByName = function (receiptName, receiptScopeObject) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosReceipt?ReportShortName=' + receiptName + '&Type=ANGULARJS&RootProperty=' + receiptScopeObject,\r\n                    cache: false\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadSalesHistory = function (page, limit, filters, sorting, searchText) {\r\n\r\n                if (!filters) {\r\n                    filters = {};\r\n                }\r\n                if (!sorting) {\r\n                    sorting = {};\r\n                }\r\n                var isStatusArray = false;\r\n                var statusArr = null;\r\n                if (filters.StatusID && typeof filters.StatusID === 'string') {\r\n                    try {\r\n                        statusArr = JSON.parse(filters.StatusID);\r\n                        if (statusArr && Array.isArray(statusArr)) {\r\n                            isStatusArray = true;\r\n                        }\r\n                    } catch (e) {\r\n                        isStatusArray = false;\r\n                    }\r\n                }\r\n\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosOrderList',\r\n                    params: {\r\n                        DateFrom: filters.DateFrom ? filters.DateFrom : null,\r\n                        DateTo: filters.DateTo ? filters.DateTo : null,\r\n                        DateOffset: new Date().getTimezoneOffset(),\r\n                        ID: filters.SaleID ? filters.SaleID : null,\r\n                        CustomerName: filters.Customer ? filters.Customer : null,\r\n                        OrderNumber: filters.ReceiptNumber ? filters.ReceiptNumber : null,\r\n                        OutletID: filters.OutletID && filters.OutletID != '0' ? filters.OutletID : null,\r\n                        UserName: filters.UserName ? filters.UserName : null,\r\n                        Status: filters.StatusID && filters.StatusID != '0' && typeof filters.StatusID === 'string' && !isStatusArray ? filters.StatusID : null,\r\n                        SearchText: searchText ? searchText : null,\r\n                        Page: page ? page : null,\r\n                        Limit: limit ? limit : null,\r\n                        SortField: sorting.FieldName ? sorting.FieldName : null,\r\n                        SortDirection: sorting.Direction ? sorting.Direction : null,\r\n                        ApplicationID: configService.applicationID,\r\n                        LastRequestDate: filters.LastRequestDate ? filters.LastRequestDate : null,\r\n                        Statuses: filters.StatusID && isStatusArray && statusArr.length ? statusArr : null\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.parkSale = function (sale, info) {\r\n                var obj = {\r\n                    sale: sale,\r\n                    info: info,\r\n                    Date: new Date(),\r\n                    OrderID: sale.ID,\r\n                    OrderNumber: sale.OrderNumber,\r\n                    SalesRepresentative: info.userName,\r\n                    RegistryID: info.registryID\r\n                };\r\n\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosOrder',\r\n                    data: { Data: [obj] }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadParkedSales = function (page, limit, outletID, filters) {\r\n                if (!filters) {\r\n                    filters = {};\r\n                }\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosOrderList',\r\n                    params: {\r\n                        ID: filters.SaleID ? filters.SaleID : null,\r\n                        OutletID: outletID,\r\n                        Status: 'PARKED',\r\n                        Page: page,\r\n                        Limit: limit,\r\n                        ApplicationID: configService.applicationID\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadPosUsers = function () {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosUser'\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.sendEmailReceipt = function (orderID, baseOrderID, email, emailSubject, emailBody, ignoreOrderID, templateID, documentBody) {\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosReceiptEmail',\r\n                    data: {\r\n                        OrderID: orderID,\r\n                        BaseOrderID: baseOrderID,\r\n                        EmailSubject: emailSubject,\r\n                        EmailBody: emailBody,\r\n                        Email: email,\r\n                        IgnoreOrderID: ignoreOrderID === true,\r\n                        TemplateID: templateID,\r\n                        DocumentBody: documentBody\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n\r\n            /**\r\n             * @param {PosCloseRegistryData[]} objArr\r\n             */\r\n            this.closeRegistry = function (objArr) {\r\n\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosCloseRegistry',\r\n                    data: { Data: objArr }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getPosUsers = function (currentUserName, page, limit, filters) {\r\n                if (!filters) {\r\n                    filters = {};\r\n                }\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosUserManagement',\r\n                    params: {\r\n                        CurrentUserName: currentUserName,\r\n                        Page: page ? page : null,\r\n                        Limit: limit ? limit : null,\r\n                        ID: filters.ID ? filters.ID : null,\r\n                        UserName: filters.UserName ? filters.UserName : null,\r\n                        RoleName: filters.RoleName && filters.RoleName != '0' ? filters.RoleName : null,\r\n                        OutletID: filters.OutletID && filters.OutletID != '0' ? filters.OutletID : null\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.searchSaleRepresentatives = function (page, limit, outletID, filters) {\r\n                if (!filters) {\r\n                    filters = {};\r\n                }\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosSearchSaleRepresentatives',\r\n                    params: {\r\n                        Page: page ? page : null,\r\n                        Limit: limit ? limit : null,\r\n                        OutletID: outletID? outletID: null,\r\n                        ID: filters.ID ? filters.ID : null,\r\n                        Name: filters.Name ? filters.Name : null,\r\n                        HideAllLocations: filters.HideAllLocations ? filters.HideAllLocations : null\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadSaleRepresentativesAll = function (hash) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosLoadSaleRepresentatives' + (!!hash ? ('?SaleRepresentativesHash=' + hash) : '')\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n\r\n            this.createPosUser = function (user) {\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosUserManagement',\r\n                    data: {\r\n                        UserName: user.UserName,\r\n                        Name: user.Name,\r\n                        RoleName: user.RoleFullName,\r\n                        OutletID: user.PosOutletID,\r\n                        CurrentUser: configService.lastUserName\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.updatePosUser = function (user) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/PosUserManagement',\r\n                    data: {\r\n                        ID: user.UserId,\r\n                        Name: user.Name,\r\n                        RoleName: user.RoleFullName,\r\n                        OutletID: user.PosOutletID,\r\n                        CurrentUser: configService.lastUserName\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.removePosUser = function (ID) {\r\n                var req = $http({\r\n                    method: 'DELETE',\r\n                    url: configService.connectionURL + '/PosUserManagement',\r\n                    params: {\r\n                        ID: ID,\r\n                        CurrentUser: configService.lastUserName\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.activateUser = function (ID) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/PosUserActivation',\r\n                    data: {\r\n                        ID: ID,\r\n                        isLocked: false\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.deactivateUser = function (ID) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/PosUserActivation',\r\n                    data: {\r\n                        ID: ID,\r\n                        isLocked: true\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.discardParkedSale = function (ID) {\r\n                var req = $http({\r\n                    method: 'DELETE',\r\n                    url: configService.connectionURL + '/PosOrder',\r\n                    params: {\r\n                        ID: ID\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            function checkConnection() {\r\n\r\n                if (!configService.applicationID || !configService.tenantID) {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(null);\r\n                    return deferred.promise;\r\n                }\r\n                else {\r\n                    var req = $http({\r\n                        method: 'GET',\r\n                        url: configService.connectionURL + '/PosPing',\r\n                        params: {\r\n                            configID: configService.applicationID,\r\n                            tenantID: configService.tenantID\r\n                        },\r\n                        byPassCancellation: true\r\n                    });\r\n\r\n                    return req;\r\n                }\r\n            }\r\n\r\n            configService.setPingFunction(ping);\r\n\r\n            $interval(function () {\r\n                ping();\r\n            }, configService.pingFrequency);\r\n\r\n            function ping() {\r\n                var canProcess = (Math.floor(Date.now()/1000) - configService.lastPingCall) > configService.pingMinInterval;\r\n                if (!canProcess) return;\r\n\r\n                configService.lastPingCall = Math.floor(Date.now() / 1000);\r\n                if (configService.hasNetworkConnection === true || configService.isSite === true) {\r\n                    checkConnection().then(function (resp) {\r\n                        $timeout(function () {\r\n                            configService.setNetworkMode(configService.hasNetworkConnection, true);\r\n                        });\r\n                        if (!!resp && !!resp.data) {\r\n                            if (resp.data.BlockSales === true) {\r\n                                $timeout(function () {\r\n                                    $rootScope.$broadcast('header.blockSales');\r\n                                });\r\n                            } else if (resp.data.LastPosChange && resp.data.LastPosChange !== configService.lastPosChange) {\r\n                                $timeout(function () {\r\n                                    $rootScope.$broadcast('header.updateSettings');\r\n                                });\r\n                            }\r\n                        }\r\n\r\n                    }, function (err) {\r\n                        console.log('error ', err);\r\n                        if (!!err && err.hasOwnProperty('headers')) {\r\n                            err = err.data;\r\n                        }\r\n                        $timeout(function () {\r\n                            configService.setNetworkMode(configService.hasNetworkConnection, false);\r\n                        });\r\n                    });\r\n                } else {\r\n                    $timeout(function () {\r\n                        configService.setNetworkMode(configService.hasNetworkConnection, false);\r\n                    });\r\n                }\r\n            }\r\n\r\n            this.addCashMovements = function (objArr) {\r\n\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosCashManagement',\r\n                    data: { Data: objArr }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.recoverPassword = function (posName, userName) {\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosPasswordRecovery',\r\n                    data: {\r\n                        PosApplicationName: posName,\r\n                        UserName: userName\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getPosDiscounts = function () {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosDiscounts'\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getLiveSearchProducs = function () {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosProduct3',\r\n                    params: {\r\n                        isLiveDataRequest: true,\r\n                        outletLocationMappingID: configService.lastECSMappingOutletID\r\n                    }\r\n                });\r\n\r\n                req = req.then(function (resp) {\r\n                    var deferred = $q.defer();\r\n\r\n                    const restored = unpackArray(resp.data.Products);\r\n\r\n                    var arr = Array.isArray(restored) ? restored : [];\r\n\r\n                    deferred.resolve(arr);\r\n                    return deferred.promise;\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadLiveCustomers = function (checkCount = false) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosLoadCustomer2',\r\n                    params: {\r\n                        isLiveDataRequest: true,\r\n                        checkCount: checkCount\r\n                    }\r\n                });\r\n\r\n                req = req.then(function (resp) {\r\n                    var deferred = $q.defer();\r\n\r\n                    const restored = unpackArray(resp.data.Customers);\r\n\r\n                    var arr = Array.isArray(restored) ? restored : [];\r\n\r\n                    deferred.resolve(arr);\r\n                    return deferred.promise;\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.savePin = function (pinToken) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/PosUserPin',\r\n                    data: {\r\n                        PinToken: pinToken,\r\n                        UserID: configService.loginUserID\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n\r\n            this.getStockTakeData = function (prms) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/StockTake',\r\n                    params: prms\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.saveNewStockTake = function (data) {\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/StocktakeTask',\r\n                    data: data\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.updateStockTake = function (data) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/StocktakeTask',\r\n                    data: data\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadStocktakeList = function (page, limit, status, sorting) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/StocktakeTask',\r\n                    params: {\r\n                        Page: page ? page : null,\r\n                        Limit: limit ? limit : null,\r\n                        Status: status,\r\n                        SortField: (!!sorting && !!sorting.FieldName) ? sorting.FieldName : null,\r\n                        SortDirection: (!!sorting && !!sorting.Direction) ? sorting.Direction : null\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.deleteStocktake = function (taskID) {\r\n                var req = $http({\r\n                    method: 'DELETE',\r\n                    url: configService.connectionURL + '/StocktakeTask',\r\n                    params: {\r\n                        TaskID: taskID\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.startStocktake = function (taskID) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/Stocktake',\r\n                    data: {\r\n                        taskID: taskID,\r\n                        status: 'IN PROGRESS',\r\n                        userName: configService.lastUserName\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadStocktake = function (taskID, page, limit, sorting, text, mode) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/StocktakeProcess',\r\n                    params: {\r\n                        Page: page ? page : null,\r\n                        Limit: limit ? limit : null,\r\n                        TaskID: taskID,\r\n                        SortField: (!!sorting && !!sorting.FieldName) ? sorting.FieldName : null,\r\n                        SortDirection: (!!sorting && !!sorting.Direction) ? sorting.Direction : null,\r\n                        searchString: text,\r\n                        searchMode: mode\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.adjustStocktakeItem = function (taskID, itemID, isAbsolute, value, locationID, batchSN, expiryDate, productID, receivedDate) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/StocktakeProcess',\r\n                    data: {\r\n                        taskID: taskID,\r\n                        itemID: itemID,\r\n                        isAbsolute: isAbsolute,\r\n                        value: value,\r\n                        locationID: locationID,\r\n                        batchSN: batchSN,\r\n                        expiryDate: expiryDate,\r\n                        productID: productID,\r\n                        receivedDate: receivedDate\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.completeStocktake = function (taskID, localDate) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/Stocktake',\r\n                    data: {\r\n                        taskID: taskID,\r\n                        status: 'COMPLETED',\r\n                        userName: configService.lastUserName,\r\n                        localDate: localDate\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.cancelStocktake = function (taskID) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/Stocktake',\r\n                    data: {\r\n                        taskID: taskID,\r\n                        status: 'VOIDED',\r\n                        userName: configService.lastUserName\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.undoStocktake = function (taskID) {\r\n                var req = $http({\r\n                    method: 'PUT',\r\n                    url: configService.connectionURL + '/Stocktake',\r\n                    data: {\r\n                        taskID: taskID,\r\n                        status: 'UNDO',\r\n                        userName: configService.lastUserName\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.dataChangeStatuses = function () {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosChangeEvent',\r\n                    cache: false,\r\n                    byPassCancellation: true\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getSaleCoupons = function (couponCode) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosCoupon',\r\n                    params: {\r\n                        CouponCode: couponCode\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getGiftCardSettings = function () {\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosGiftCard',\r\n                    data: JSON.stringify({\r\n                        ReturnType: 'GiftCardSettings'\r\n                    })\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n\r\n            this.checkSerialNumber = function (productID, outletID, serialNumber) {\r\n\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosCheckSerialNumber',\r\n                    params: {\r\n                        ProductID: productID,\r\n                        OutletID: outletID,\r\n                        SerialNumber: serialNumber\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.getDashboardData = function(startDate, endDate, viewMode, outletID) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosDashboard',\r\n                    params: {\r\n                        ApplicationID: configService.applicationID,\r\n                        DateFrom: startDate,\r\n                        DateTo: endDate,\r\n                        ViewMode: viewMode,\r\n                        UserID: configService.loginUserID,\r\n                        OutletID: !!outletID && outletID!=='0' ? outletID : null\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadClickAndCollectSales = function(outletID, page, limit, filters){\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosClickAndCollect',\r\n                    params: {\r\n                        OutletID: outletID,\r\n                        Page: page ? page : null,\r\n                        Limit: limit ? limit : null,\r\n                        CustomerSearch: filters.CustomerSearch? filters.CustomerSearch: null,\r\n                        SaleNumberSearch: filters.SaleNumberSearch? filters.SaleNumberSearch: null\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadClickAndCollectSale = function(outletID, taskID, fromOrderLines){\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosClickAndCollect',\r\n                    params: {\r\n                        OutletID: outletID,\r\n                        TaskID: taskID,\r\n                        FromOrderLines: fromOrderLines\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.clickAndCollectAutoPick = function(outletID, taskID, fromOrderLines){\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosClickAndCollectAutoPick',\r\n                    params: {\r\n                        OutletID: outletID,\r\n                        TaskID: taskID,\r\n                        FromOrderLines: fromOrderLines\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.clickAndCollectFulfill = function (payload) {\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosClickAndCollectFulfilment',\r\n                    data: JSON.stringify(payload)\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadTaxRules = function () {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosTaxRules'\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.checkCheckoutProductsAvailability = function (products, outletID) {\r\n\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosCheckoutProductsAvailability',\r\n                    data: JSON.stringify({Data: products}),\r\n                    params: {\r\n                        OutletID: outletID\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.checkGiftCardExists = function (code) {\r\n\r\n                var req = $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosGiftCard/',\r\n                    data: JSON.stringify({\r\n                        ReturnType: 'GiftCardExists',\r\n                        GiftCardCodes: [code]\r\n                    })\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadDEARSales  = function(page, limit, filters){\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosOrderListDEARSales',\r\n                    params: {\r\n                        Page: page ? page : null,\r\n                        Limit: limit ? limit : null,\r\n                        DateFrom: filters.DateFrom ? filters.DateFrom : null,\r\n                        DateTo: filters.DateTo ? filters.DateTo : null,\r\n                        SearchText: filters.searchText? filters.searchText: null,\r\n                        DateOffset: new Date().getTimezoneOffset(),\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.loadDEARSale  = function(taskID){\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosOrderListDEARSales',\r\n                    params: {\r\n                        TaskID: taskID\r\n                    }\r\n                });\r\n\r\n                return req;\r\n            };\r\n\r\n            this.linkingExternal = function (posName, userName, password, token, tokenType) {\r\n                return $http({\r\n                    method: 'POST',\r\n                    url: configService.connectionURL + '/PosExternalAuth',\r\n                    data: {\r\n                        PosApplicationName: posName,\r\n                        UserName: userName,\r\n                        Password: password,\r\n                        ExternalToken: token,\r\n                        TokenType: tokenType,\r\n                        Platform: buildConfiguration.platform\r\n                    }\r\n                });\r\n            };\r\n\r\n            this.getLLCustomerRewards = function (LLMerchantID) {\r\n                var req = $http({\r\n                    method: 'GET',\r\n                    url: configService.connectionURL + '/PosLoyaltyLionCustomerRewards',\r\n                    params: {\r\n                        MerchantID: LLMerchantID\r\n                    }\r\n                });\r\n                return req;\r\n            };\r\n\r\n        }]);","angular.module(\"mainApp\").controller('reportCloseRegistryController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', 'registryService', '$uibModal',\r\n        'helperService', 'reportService', 'stockTakeService', 'gettextCatalog', 'printService', '$q', 'emailService', '$filter', '$location',\r\n        function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, registryService, $uibModal,\r\n            helperService, reportService, stockTakeService, gettextCatalog, printService, $q, emailService, $filter, $location) {\r\n\r\n            $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constCloseRegistryViewName }); // to hide sidebar details\r\n\r\n            if (!loginService.isLoggedIn()) {\r\n                helperService.goToHomePage();\r\n                return;\r\n            }\r\n\r\n            $scope.locations = [];\r\n            $scope.registries = [];\r\n            $scope.mode = '';\r\n            $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n\r\n            $scope.dataPage = 1;\r\n            $scope.dataPageDisplay;\r\n            $scope.itemsByPage = 20;\r\n            $scope.isLoading = false;\r\n\r\n            $scope.triggerChangeOutletFilter = true;\r\n            $scope.triggerChangeRegisterFilter = true;\r\n            $scope.fcss = { 'height': window.innerHeight * 0.9 + 'px' };\r\n            $scope.ifcss = { 'height': (window.innerHeight * 0.9) - 230 + 'px' };\r\n\r\n            $scope.currentFilter = {\r\n                fromDate: helperService.getFormatedDate2(new Date()),\r\n                toDate: helperService.getFormatedDate2(new Date()),\r\n                registries: [],\r\n                outletID: '0',\r\n                registryID: '0'\r\n            };\r\n\r\n            $scope.prepareAnyDayClosureData = {\r\n                mode: 'warning',\r\n                closureDate: null\r\n            };\r\n\r\n            $scope.onLoad = function () {\r\n                $.blockUI();\r\n                var backFilter = window.localStorage.getItem('reportRegisterClosure');\r\n                if (backFilter) {\r\n                    window.localStorage.removeItem('reportRegisterClosure');\r\n                    backFilter = JSON.parse(backFilter);\r\n                    $scope.currentFilter.fromDate = backFilter.fromDate;\r\n                    $scope.currentFilter.toDate = backFilter.toDate;\r\n                    // $scope.currentFilter.outletID = backFilter.outletID;\r\n                    // $scope.currentFilter.registryID = backFilter.registryID;\r\n                }\r\n                \r\n                stockTakeService.loadUserAvailableOutletsAndRegistries()\r\n                    .then(function (res) {\r\n                        $scope.locations = res.data.locations;\r\n                        $scope.registries = res.data.registries;\r\n                        $scope.currentFilter.registries = res.data.registries;\r\n\r\n                        if ($scope.locations.length == 1) {\r\n                            $scope.currentFilter.outletID = $scope.locations[0].PosOutletID;\r\n                        }\r\n\r\n                        $timeout(function () {\r\n                            $timeout(function () { $('input, select').trigger('refresh'); });\r\n                        });\r\n\r\n                        if (backFilter) {\r\n                            $timeout(function () {\r\n                                // $scope.dataPage = backFilter.dataPage;\r\n                                $scope.loadGrid();\r\n                            });\r\n                        }\r\n\r\n                        $.unblockUI();\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                    });\r\n            };\r\n\r\n\r\n\r\n            $scope.$watch('currentFilter.registryID',\r\n                function (newValue, oldValue) {\r\n\r\n                    if ($scope.triggerChangeRegisterFilter) {\r\n                        $scope.getReports();\r\n                    }\r\n\r\n                    $scope.triggerChangeRegisterFilter = true;\r\n                }\r\n            );\r\n\r\n            $scope.updateRegistriesCombo = function (outletID) {\r\n\r\n                $scope.currentFilter.registryID = '0';\r\n                $timeout(function () {\r\n                    $scope.currentFilter.registries = []\r\n                        .concat($scope.registries.filter(function (v) {\r\n                            return v.PosOutletID == outletID;\r\n                        }));\r\n\r\n                    if (!outletID || outletID == '0')\r\n                        $scope.currentFilter.registries = $scope.registries;\r\n\r\n                    $timeout(function () {\r\n                        $('#selectRegisterReportRegisterClosure').trigger('refresh');\r\n                    }, 10);\r\n                });\r\n\r\n            };\r\n\r\n\r\n            $scope.$watch('currentFilter.outletID',\r\n                function (newValue, oldValue) {\r\n\r\n                    $scope.updateRegistriesCombo(newValue);\r\n\r\n                    if ($scope.triggerChangeOutletFilter) {\r\n                        $scope.getReports();\r\n                    }\r\n\r\n                    $scope.triggerChangeOutletFilter = true;\r\n                }\r\n            );\r\n\r\n            $scope.dateSelectedCallback = function (from, to) {\r\n                $scope.currentFilter.fromDate = from;\r\n                $scope.currentFilter.toDate = to;\r\n                $scope.getReports();\r\n            }\r\n\r\n            const scrollReachBottomCallback = function () {\r\n                if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                    $scope.selectPage($scope.dataPage + 1);\r\n                }\r\n            }\r\n\r\n            initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n            function getPages(total) {\r\n                var step = $scope.itemsByPage;\r\n                $scope.totalPages = Math.ceil(total / step);\r\n                $scope.totalRecords = total;\r\n                if ($scope.totalPages === 0) {\r\n                    $scope.totalPages = 1;\r\n                }\r\n            };\r\n\r\n\r\n            $scope.clear = function () {\r\n                $scope.triggerChangeOutletFilter = false;\r\n                $scope.triggerChangeRegisterFilter = false;\r\n                $scope.currentFilter.outletID = '0';\r\n                $scope.currentFilter.registryID = '0';\r\n                $scope.currentFilter.fromDate = helperService.getFormatedDate2(new Date());\r\n                $scope.currentFilter.toDate = helperService.getFormatedDate2(new Date());\r\n\r\n                $timeout(function () {\r\n                    $timeout(function () { $('input, select').trigger('refresh'); });\r\n\r\n                });\r\n\r\n                $scope.getReports();\r\n            };\r\n\r\n\r\n\r\n            // grid control\r\n            $scope.gridControl = function (tableState) {\r\n                var sort = {};\r\n\r\n                if (!!tableState.sort.predicate) {\r\n                    sort.FieldName = tableState.sort.predicate;\r\n                    sort.Direction = tableState.sort.reverse ? 'desc' : 'asc';\r\n                }\r\n\r\n                $.blockUI();\r\n                $scope.loadGrid(sort)\r\n                    .then(function () {\r\n                        $.unblockUI();\r\n                    }).catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            $scope.reportCloseRegistryData = [];\r\n\r\n            $scope.loadGrid = function (keepData, sorting) {\r\n                $scope.isLoading = true;\r\n                var lst = reportService.loadRegistryCloseList(\r\n                        $scope.currentFilter.fromDate,\r\n                        $scope.currentFilter.toDate,\r\n                        $scope.currentFilter.outletID,\r\n                        $scope.currentFilter.registryID,\r\n                        $scope.dataPage,\r\n                        $scope.itemsByPage,\r\n                        sorting,\r\n                    ).then(function (data) {\r\n                        if (!keepData)\r\n                            $scope.reportCloseRegistryData = [];\r\n\r\n                        $scope.dataPage = data.data.Page;\r\n\r\n                        getPages(data.data.Total);\r\n\r\n                        angular.forEach(data.data.Rows, function (el) {\r\n                            el.OpeningTime = helperService.getFormatedDateWithLocalTime2(el.OpeningTime);\r\n                            if (el.IsActive == false)\r\n                                el.ClosingTime = !!el.ClosingTime ? helperService.getFormatedDateWithLocalTime2(el.ClosingTime) : '';\r\n                            else\r\n                                el.ClosingTime = gettextCatalog.getString('Still open.');\r\n                            $scope.reportCloseRegistryData.push(el);\r\n                        });\r\n\r\n                        $timeout(function () {\r\n                            $scope.raiseViewChanged();\r\n                        });\r\n\r\n                        $scope.isLoading = false;\r\n                    });\r\n\r\n                return lst;\r\n            }\r\n\r\n            $timeout(function () {\r\n                $scope.mode = 'common';\r\n                initSelects();\r\n            });\r\n\r\n            $scope.getReports = function () {\r\n                $scope.dataPage = 1;\r\n                $scope.loadGrid();\r\n            };\r\n\r\n            $scope.selectPage = function (page) {\r\n                $scope.dataPage = page;\r\n                $scope.loadGrid(true);\r\n            };\r\n\r\n            $scope.currentReport = {};\r\n\r\n            $scope.showDetails = function (row) {\r\n                $scope.currentReport = $.extend($scope.currentReport, row);\r\n\r\n                $.blockUI();\r\n                reportService.loadClosureRegistryDetails(row.ID)\r\n                    .then(function (res) {\r\n                        $.unblockUI();\r\n                        $scope.currentReport = $.extend($scope.currentReport, res);\r\n\r\n                        $timeout(function () {\r\n                            showReportCloseRegistryDetailsDialog();\r\n                        });\r\n\r\n                        $timeout(function () {\r\n                            $scope.raiseViewChanged();\r\n                        });\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            };\r\n            $scope.firstTimeOpenDlg = true;\r\n            function showReportCloseRegistryDetailsDialog() {\r\n                var $windowElement = $('#reportCloseRegistryDetailsDialogPartial');\r\n                helperService.showDialog($windowElement, function () { });\r\n\r\n                $timeout(function () {\r\n                    $('input, select').trigger('refresh');\r\n                    if ($scope.firstTimeOpenDlg) {\r\n                        $scope.firstTimeOpenDlg = false;\r\n                    }\r\n                });\r\n            }\r\n\r\n            $scope.closeReportCloseRegistryDetailsDialog = function () {\r\n                var $windowElement = $('#reportCloseRegistryDetailsDialogPartial');\r\n                helperService.closeDialog($windowElement);\r\n                $scope.currentReport = {};\r\n                $scope.mode = 'common';\r\n            };\r\n\r\n            $scope.raiseViewChanged = function () {\r\n                $rootScope.$broadcast('view.loaded');\r\n            };\r\n\r\n            $scope.receiptTemplate = null;\r\n            $scope.receiptEmailTemplate = null;\r\n            $scope.receiptEmailSubject = null;\r\n            $scope.addFormatting = function (tpl) {\r\n                return reportService.formatCurrencyInTemplate(tpl,\r\n                    ['currentReport.CashExpected',\r\n                        'currentReport.CashCounted',\r\n                        'currentReport.CashReceived',\r\n                        'currentReport.CashCounted',\r\n                        'currentReport.TotalExpected',\r\n                        'currentReport.TotalCounted',\r\n                        'currentReport.CashCountedToBank',\r\n                        'itemCashMovements.Amount',\r\n                        'itemNonCashPayments.CashExpected',\r\n                        'itemNonCashPayments.CashCounted',\r\n                    ], 'currency : \"\"');\r\n            };\r\n\r\n            $scope.printReport = function () {\r\n                $.blockUI();\r\n                return reportService.getReportTemplate('ClosureRegisterReport', 'currentReport')\r\n                    .then(function (res) {\r\n                        //                $scope.receiptTemplate = res.Template;\r\n                        //                $scope.receiptEmailTemplate = res.EmailTemplate;\r\n                        //                $scope.receiptEmailSubject = res.EmailSubject;\r\n                        res.Template = $scope.addFormatting(res.Template);\r\n\r\n\r\n                        printService.preparePrintTemplate($scope, $('div.receipt-template'), { ngmHideFonts: \"yes\" }, res.Template);\r\n                        //                printService.preparePrintTemplate($scope, $('div.receipt-email-template'), {}, res.EmailTemplate);\r\n                        var deffered = $q.defer();\r\n\r\n                        $timeout(function () {\r\n                            deffered.resolve(true);\r\n                        });\r\n\r\n                        return deffered.promise;\r\n                    })\r\n                    .then(function (res) {\r\n                        return printService.printReceipt($('div.receipt-template div'), false, true);\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            // email functions\r\n            $scope.emailReport = function (emailCtrl) {\r\n                $.blockUI();\r\n                return reportService.getReportTemplate('ClosureRegisterReport', 'currentReport')\r\n                    .then(function (res) {\r\n                        $scope.receiptEmailSubject = res.EmailSubject;\r\n                        res.EmailTemplate = $scope.addFormatting(res.EmailTemplate);\r\n                        printService.preparePrintTemplate($scope, $('div.receipt-email-template'), {}, res.EmailTemplate);\r\n                        var deffered = $q.defer();\r\n\r\n                        $timeout(function () {\r\n                            deffered.resolve(true);\r\n                        });\r\n\r\n                        return deffered.promise;\r\n                    })\r\n                    .then(function (res) {\r\n                        var emailBody = emailService.setEmailToken('div.receipt-email-template').html();\r\n                        var email = emailCtrl.$viewValue;\r\n                        var emailSubject = reportService.formatEmailSubject($scope.receiptEmailSubject, [\r\n                            { key: 'CONTACTNAME', value: configService.userName },\r\n                            { key: 'POSNAME', value: configService.posName },\r\n                            { key: 'OUTLETNAME', value: $scope.currentReport.OutletName },\r\n                            { key: 'REGISTERNAME', value: $scope.currentReport.RegistryName },\r\n                            { key: 'OPENINGTIME', value: $scope.currentReport.OpeningTime },\r\n                            { key: 'CLOSINGTIME', value: $scope.currentReport.ClosingTime },\r\n                        ]);\r\n\r\n                        return emailService.sendEmailReceipt(null, null, email, emailSubject, emailBody, true);\r\n                    })\r\n                    .then(function (result) {\r\n                        $.unblockUI();\r\n                        helperService.closeDialog('#emailReportDialogPartial');\r\n\r\n                        // show message box about sending result\r\n                        $scope.reportEmailSentStatus = result.Result == true;\r\n                        helperService.showDialog('#reportSentEmailStatus');\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        if (!!err && err.status === 400)\r\n                            errorService.showError(err);\r\n                        else if (!!err && err.status === -1) {\r\n                            var message = gettextCatalog.getString(\"Error sending email.\") + \"<br/>\" + gettextCatalog.getString(\"Connection problems.\");\r\n                            errorService.showError(message);\r\n                        }\r\n                        else\r\n                            errorService.showError(gettextCatalog.getString(\"Error sending email.\"));\r\n                    });\r\n            };\r\n\r\n\r\n            $scope.getSurchargeRate = function (surcharge) {\r\n                if (surcharge.SurchargeRateType == 'percentage') {\r\n                    return surcharge.SurchargeRate + ' %';\r\n                }\r\n                else {\r\n                    return $filter('currency')(surcharge.SurchargeRate);\r\n                }\r\n            };\r\n\r\n            $scope.toggleRow = function (row) {\r\n                if (row.isActive === true) {\r\n                    row.isActive = false;\r\n                } else {\r\n                    row.isActive = true;\r\n                }\r\n            };\r\n\r\n            $scope.firstshowPrepareClosureDayFormShow = true;\r\n            $scope.showPrepareClosureDay = function () {\r\n                $scope.prepareAnyDayClosureData.mode = 'warning'; \r\n                $scope.prepareAnyDayClosureData.closureDate = null;\r\n\r\n                var $windowElement = $('#prepareAnyDayClosureModal');\r\n                helperService.showDialog($windowElement);\r\n\r\n                $timeout(function () {\r\n                    if ($scope.firstshowPrepareClosureDayFormShow) {\r\n                        $scope.firstshowPrepareClosureDayFormShow = false;\r\n                        helperService.setDatepicker($scope.dateFormat, '#closureDate');\r\n                    }\r\n\r\n                    $('input, select').trigger('refresh');\r\n                });\r\n            };\r\n\r\n            $scope.closePrepareAnyDayClosure = function () {\r\n                var $windowElement = $('#prepareAnyDayClosureModal');\r\n                helperService.hideDatePickers('#closureDate');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.redirectToClosureDay = function () {\r\n                $scope.closePrepareAnyDayClosure();\r\n\r\n                // redirect to register close form with parameters\r\n                window.localStorage.setItem('forceRegisterClose', JSON.stringify({\r\n                    CloseDay: helperService.toDateFromDatepickerParameterUTC($scope.prepareAnyDayClosureData.closureDate, '23:59:59'),\r\n                    ID: $scope.currentReport.ID,\r\n                    RegistryID: $scope.currentReport.RegistryID,\r\n                    RegistryName: $scope.currentReport.RegistryName,\r\n                    PosOutletID: $scope.currentReport.PosOutletID,\r\n                    PosOutletName: $scope.currentReport.OutletName,\r\n                    reportFilters: {\r\n                        fromDate: $scope.currentFilter.fromDate,\r\n                        toDate: $scope.currentFilter.toDate,\r\n                        outletID: $scope.currentFilter.outletID,\r\n                        registryID: $scope.currentFilter.registryID,\r\n                        dataPage: $scope.dataPage\r\n                    }\r\n                }));\r\n\r\n                $location.path('/opencloseregistry');\r\n            };\r\n        }\r\n    ]);","angular.module(\"mainApp\").controller('reportGiftCardController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', '$uibModal',\r\n        'helperService', 'reportService', 'stockTakeService', 'gettextCatalog', 'printService', '$q', 'emailService', 'csvService',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, $uibModal,\r\n        helperService, reportService, stockTakeService, gettextCatalog, printService, $q, emailService, csvService) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constGiftCardViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n        }\r\n\r\n        $scope.getDateByFormat = helperService.getDateByFormatAlreadyLocal;\r\n        $scope.totalValueSold = 0;\r\n        $scope.totalValueRedeemed = 0;\r\n        $scope.totalOutstandingBalance = 0;\r\n        $scope.totalGiftCardActive = 0;\r\n        $scope.data = [];\r\n        $scope.details = [];\r\n        $scope.listOfColumns = [];\r\n        $scope.additionalHeaders = [];\r\n        $scope.dataPage = 1;\r\n        $scope.dataPageDisplay;\r\n        $scope.itemsByPage = 20;\r\n        $scope.isLoading = false;\r\n\r\n        $scope.cantExport = buildConfiguration.platform == 'ios';\r\n\r\n        $scope.currentFilter = {\r\n            orderByColumnId: 1,\r\n            orderDesc: false,\r\n        };\r\n\r\n        $scope.mode = '';\r\n        $scope.giftCardFilter = \"\";\r\n\r\n        $scope.selectedDetails = [];\r\n        $scope.showGiftCardDetails = function( ID ) {\r\n            if(!ID){\r\n                return;\r\n            }\r\n            $scope.selectedDetails = [];\r\n                var l = $scope.details.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.details[i].ID == ID) {\r\n                        $scope.selectedDetails.push($scope.details[i]);\r\n                    }\r\n                }\r\n                helperService.showDialog('#reportGiftCardDetails', function() {\r\n                    $timeout(function(){\r\n                        $('#giftCardDetailsMOdalBody').trigger('resize.content');\r\n                    });\r\n                });\r\n          };\r\n\r\n        $timeout(function () {\r\n            $scope.mode = 'common';\r\n        });\r\n\r\n        const scrollReachBottomCallback = function (){\r\n            if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                $scope.selectPage($scope.dataPage + 1);\r\n            }\r\n        };\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        };\r\n\r\n\r\n        $scope.getReport = function () {\r\n            $scope.dataPage = 1;\r\n            $scope.loadGrid();\r\n        };\r\n\r\n        $scope.selectPage = function (page) {\r\n            $scope.dataPage = page;\r\n            $scope.loadGrid(true);\r\n        };\r\n\r\n        $scope.onLoad = function () {\r\n            $scope.getReport();\r\n        };\r\n\r\n        $scope.firstShow = true;\r\n        $scope.$on('view.loaded', function (evt) {\r\n\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n            }\r\n        });\r\n\r\n        $scope.loadGrid = function (keepData, sorting) {\r\n            $.blockUI();\r\n            $scope.isLoading = true;\r\n\r\n            var prms = {\r\n                orderByColumnId: $scope.currentFilter.orderByColumnId,\r\n                orderDesc: $scope.currentFilter.orderDesc,\r\n                searchText: $scope.giftCardFilter,\r\n                skip: ($scope.dataPage - 1) * $scope.itemsByPage,\r\n                take: $scope.itemsByPage\r\n            };\r\n\r\n            return reportService.loadReportGiftCard(prms).then(function (res) {\r\n                if (!keepData) {\r\n                    $scope.data = [];\r\n                    $scope.details = [];\r\n                }\r\n                getPages(res.data.MaxRows);\r\n\r\n                $scope.listOfColumns = res.data.Headers;\r\n                $scope.additionalHeaders = res.data.AdditionalHeaders;\r\n                if (!keepData) {\r\n                    $scope.data = res.data.Values;\r\n                    $scope.details = res.data.Details;\r\n\r\n                    $scope.data.unshift({\r\n                        GiftCardCode: 'Summary',\r\n                        InitialBalance: res.data.TotalValueSold,\r\n                        CurrentBalance: res.data.TotalBalance\r\n                    });\r\n                } else {\r\n                    $scope.data = $scope.data.concat(res.data.Values);\r\n                    $scope.details = $scope.details.concat(res.data.Details);\r\n                } \r\n                $scope.totalGiftCardActive = res.data.TotalActiveCards;\r\n\r\n                $scope.filterForm.$setPristine();\r\n\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n            }).catch(function (err) {\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        }\r\n\r\n        // email functions\r\n        $scope.allowEmailSubject = function () {\r\n            return true;\r\n        };\r\n\r\n        $scope.emailReport = function (emailCtrl, emailSubject) {\r\n            $.blockUI();\r\n\r\n            var email = emailCtrl.$viewValue;\r\n            var emailSubject = emailSubject.$viewValue;\r\n\r\n            var colIDs = [];\r\n            for (var i = 0; i < $scope.listOfColumns.length; i++) {\r\n                colIDs.push($scope.listOfColumns[i].id);\r\n            }\r\n            var prms = {\r\n                orderByColumnId: $scope.currentFilter.orderByColumnId,\r\n                orderDesc: $scope.currentFilter.orderDesc,\r\n                searchText: $scope.giftCardFilter,\r\n                ColumnList: colIDs,\r\n                emailTo: email,\r\n                subject: emailSubject\r\n            };\r\n\r\n            return reportService.loadReportGiftCardEmail(prms)\r\n             .then(function (result) {\r\n                 $.unblockUI();\r\n                 helperService.closeDialog('#emailReportDialogPartial');\r\n\r\n                 // show message box about sending result\r\n                 $scope.reportEmailSentStatus = true;\r\n                 helperService.showDialog('#reportSentEmailStatus');\r\n             })\r\n             .catch(function (err) {\r\n                 $.unblockUI();\r\n                 errorService.showError(gettextCatalog.getString(\"Error sending email.\"));\r\n             });\r\n        };\r\n\r\n        $scope.exportReport = function () {\r\n            $.blockUI();\r\n            \r\n            var colIDs = [];\r\n            for (var i = 0; i < $scope.listOfColumns.length; i++) {\r\n                colIDs.push($scope.listOfColumns[i].id);\r\n            }\r\n            var prms = {\r\n                orderByColumnId: $scope.currentFilter.orderByColumnId,\r\n                orderDesc: $scope.currentFilter.orderDesc,\r\n                searchText: $scope.giftCardFilter,\r\n                ColumnList: colIDs\r\n            };\r\n\r\n            return reportService.loadReportGiftCardCSV(prms)\r\n            .then(function (csv) {\r\n                if (configService.isMobile)\r\n                    return csvService.writeCSVToFile(csv.data, \"GiftCardReport.csv\")\r\n                    .then(function (path) {\r\n                        var deferred = $q.defer();\r\n                        $.unblockUI();\r\n\r\n                        helperService.showInfoDialog({\r\n                            title: '',\r\n                            body: gettextCatalog.getString('The file is saved as: ' + path)\r\n                        }, function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n\r\n\r\n                        return deferred.promise;\r\n                    });\r\n                else\r\n                    return csvService.downloadCSV(csv.data, \"GiftCardReport.csv\");\r\n            })\r\n            .then(function () {\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        };\r\n\r\n    }\r\n\r\n    ]);","angular.module(\"mainApp\").controller('reportInTransitController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', '$uibModal',\r\n        'helperService', 'reportService', 'stockTakeService', 'gettextCatalog', 'printService', '$q', 'emailService','csvService',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, $uibModal,\r\n        helperService, reportService, stockTakeService, gettextCatalog, printService, $q, emailService, csvService) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constInTransitViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n        }\r\n        \r\n        $scope.popoverUrl = \"reportInTransitColumnSelectorPartial.html\";\r\n        \r\n        $scope.mode = '';\r\n        $scope.data = [];\r\n        $scope.totals = [];\r\n        $scope.outelts = [];\r\n        $scope.listOfColumns = [];\r\n        $scope.selectedColumns = [];\r\n        $scope.additionalHeaders = [];\r\n        $scope.selectedAdditionalColumns = [];\r\n\r\n        $scope.dataPage = 1;\r\n        $scope.dataPageDisplay;\r\n        $scope.itemsByPage = 100;\r\n\r\n        $scope.cantExport = buildConfiguration.platform == 'ios';\r\n\r\n        $scope.range = function(n) {\r\n            return new Array(n);\r\n        };\r\n\r\n        $scope.showCustomiser = function(){\r\n            helperService.showDialog($('#reportInTransitGridCustomiser'), function() { });\r\n        };\r\n\r\n        $scope.closeCustomiser = function(){\r\n            helperService.closeDialog($('#reportInTransitGridCustomiser'));\r\n        };\r\n\r\n        $scope.selectColumn = function(arr, col) {\r\n            var found = false;\r\n                var l = arr.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if (arr[i].id == col.id) {\r\n                        found = true;\r\n                        arr.splice(i, 1);\r\n                        break;\r\n                    }\r\n                }\r\n            if (!found) {\r\n                arr.push(col);\r\n            }\r\n        }\r\n\r\n        $scope.isColumnSelected = function( arr, v ) {\r\n                var found = false;\r\n                var l = arr.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if (arr[i].id == v.id) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n          };\r\n\r\n        $scope.columnFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedColumns[i].id == v.columnId) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n          $scope.additionalColumnFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedAdditionalColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedAdditionalColumns[i].id == v.columnId) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n          $scope.columnHeaderFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedColumns[i].id == v.id) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n        const scrollReachBottomCallback = function (){\r\n            if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                $scope.selectPage($scope.dataPage + 1);\r\n            }\r\n        };\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        };\r\n\r\n        $scope.selectPage = function (page) {\r\n            $scope.dataPage = page;\r\n            $scope.getReport(false);\r\n        };\r\n\r\n\r\n        $scope.currentFilter = {\r\n            outletID: '0',\r\n            groupFamilies: false,\r\n            orderByColumnId: -1,\r\n            orderDesc: false,\r\n            searchText: ''\r\n        };\r\n\r\n        $timeout(function () {\r\n            $scope.mode = 'common';\r\n\r\n            // init controls\r\n\r\n            $timeout(function () {\r\n                initSelects(function () {\r\n                    var el = $(this);\r\n                    if (el[0].id == 'outlets-styler') {\r\n                        // add address to outlet\r\n                        angular.forEach($scope.locations, function (l) {\r\n                            var p = \"<div class='width100'>\" + (!!l.OutletLocationName ? l.OutletLocationName : gettextCatalog.getString('All outlets')) + \"</div>\" +\r\n                                    \"<div class='width100' style='font-size:12px'>\" + (!!l.LocationAddress ? l.LocationAddress : '&nbsp;') +\r\n                                    \"</div>\";\r\n                            var ef = el.find('li.loc-' + l.PosOutletID);\r\n\r\n                            ef.html(p);\r\n                        });\r\n                    }\r\n                });\r\n\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        });\r\n\r\n        $scope.onLoad = function () {\r\n            $.blockUI();\r\n            stockTakeService.loadUserAvailableOutletsAndRegistries()\r\n            .then(function (res) {\r\n                if (res.data.singleLocation === true) {\r\n                    $scope.locations = res.data.locations;\r\n                    if ($scope.locations.length > 0)\r\n                        $scope.currentFilter.outletID = $scope.locations[0].PosOutletID;\r\n                }\r\n                else\r\n                    $scope.locations = [{ PosOutletID: '0', OutletName: gettextCatalog.getString('All outlets') }].concat(res.data.locations);\r\n                $scope.getReport();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            })\r\n            .finally(function () {\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        };\r\n\r\n        $scope.$watch('currentFilter.outletID',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.orderByColumnId',\r\n        function (newValue, oldValue) {\r\n              if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n              }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.orderDesc',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n\r\n        $scope.$watch('currentFilter.groupFamilies',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.firstShow = true;\r\n        $scope.$on('view.loaded', function (evt) {\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n            }\r\n        });\r\n\r\n        $scope.getReport = function (fromPage1) {\r\n            if(fromPage1) {\r\n                $scope.dataPage = 1;\r\n                $scope.data = [];\r\n            }\r\n\r\n            var prms = {\r\n                OutletID: $scope.currentFilter.outletID,\r\n                groupFamilies: $scope.currentFilter.groupFamilies,\r\n                orderByColumnId: $scope.currentFilter.orderByColumnId,\r\n                orderDesc: $scope.currentFilter.orderDesc,\r\n                searchText: $scope.currentFilter.searchText,\r\n                skip: ($scope.dataPage - 1) * $scope.itemsByPage,\r\n                take: $scope.itemsByPage\r\n            };\r\n\r\n            $.blockUI();\r\n            $scope.isLoading = true;\r\n            $scope.headers = [];\r\n            $scope.totals = [];\r\n            $scope.additionalHeaders = [];\r\n            \r\n            return reportService.loadInTransitReport(prms).then(function (res) {\r\n                $scope.listOfColumns = res.data.Headers;\r\n                $scope.data = $scope.data.concat(res.data.Values);\r\n                $scope.totals = res.data.Totals;\r\n                $scope.additionalHeaders = res.data.AdditionalHeaders;\r\n                getPages(res.data.MaxRows);\r\n\r\n                if ($scope.selectedColumns.length == 0) {\r\n                    var l = $scope.listOfColumns.length;\r\n                    for (var i = 0; i < l; i++) {\r\n                        if ($scope.listOfColumns[i].isDefault === true) {\r\n                            $scope.selectedColumns.push($scope.listOfColumns[i]);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                $scope.filterForm.$setPristine();\r\n\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n            }).catch(function (err) {\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        }\r\n\r\n        // email functions\r\n        $scope.allowEmailSubject = function () {\r\n            return true;\r\n        };\r\n\r\n        $scope.emailReport = function (emailCtrl, emailSubject) {\r\n            $.blockUI();\r\n\r\n            var email = emailCtrl.$viewValue;\r\n            var emailSubject = emailSubject.$viewValue;\r\n\r\n            var colIDs = [];\r\n            for (var i = 0; i < $scope.selectedColumns.length; i++) {\r\n                colIDs.push($scope.selectedColumns[i].id);\r\n            }\r\n\r\n            for (var i = 0; i < $scope.selectedAdditionalColumns.length; i++) {\r\n                colIDs.push($scope.selectedAdditionalColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                OutletID: $scope.currentFilter.outletID,\r\n                groupFamilies: $scope.currentFilter.groupFamilies,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs,\r\n                emailTo: email,\r\n                subject: emailSubject\r\n            };\r\n\r\n            return reportService.loadInTransitReportEmail(prms)\r\n            .then(function (result) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#emailReportDialogPartial');\r\n                // show message box about sending result\r\n                $scope.reportEmailSentStatus = true;\r\n                helperService.showDialog('#reportSentEmailStatus');\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(gettextCatalog.getString(\"Error sending email.\"));\r\n            });\r\n        };\r\n\r\n        $scope.exportReport = function () {\r\n            $.blockUI();\r\n\r\n            var colIDs = [];\r\n            for (var i = 0; i < $scope.selectedColumns.length; i++) {\r\n                colIDs.push($scope.selectedColumns[i].id);\r\n            }\r\n\r\n            for (var i = 0; i < $scope.selectedAdditionalColumns.length; i++) {\r\n                colIDs.push($scope.selectedAdditionalColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                OutletID: $scope.currentFilter.outletID,\r\n                groupFamilies: $scope.currentFilter.groupFamilies,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs\r\n            };\r\n            \r\n            return reportService.loadInTransitReportCSV(prms)\r\n            .then(function (csv) {\r\n                if (configService.isMobile)\r\n                    return csvService.writeCSVToFile(csv.data, \"InTransitReport.csv\")\r\n                    .then(function (path) {\r\n                        var deferred = $q.defer();\r\n                        $.unblockUI();\r\n\r\n                        helperService.showInfoDialog({\r\n                            title: '',\r\n                            body: gettextCatalog.getString('The file is saved as: '+path)\r\n                        }, function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n\r\n                        return deferred.promise;\r\n                    });\r\n                else\r\n                    return csvService.downloadCSV(csv.data, \"InTransitReport.csv\");\r\n            })\r\n            .then(function () {\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        };\r\n\r\n    }\r\n]);\r\n","angular.module(\"mainApp\").controller('reportInventoryController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', '$uibModal',\r\n        'helperService', 'reportService', 'stockTakeService', 'gettextCatalog', 'printService', '$q', 'emailService','csvService',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, $uibModal,\r\n        helperService, reportService, stockTakeService, gettextCatalog, printService, $q, emailService, csvService) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constInventoryViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n        }\r\n        \r\n        $scope.popoverUrl = \"reportInventoryColumnSelectorPartial.html\";\r\n        \r\n        $scope.mode = '';\r\n        $scope.data = [];\r\n        $scope.totals = [];\r\n        $scope.outelts = [];\r\n        $scope.listOfColumns = [];\r\n        $scope.selectedColumns = [];\r\n        $scope.additionalHeaders = [];\r\n        $scope.selectedAdditionalColumns = [];\r\n\r\n        $scope.dataPage = 1;\r\n        $scope.dataPageDisplay;\r\n        $scope.itemsByPage = 100;\r\n        $scope.isLoading = false;\r\n\r\n        $scope.cantExport = buildConfiguration.platform == 'ios';\r\n\r\n        $scope.range = function(n) {\r\n            return new Array(n);\r\n        };\r\n\r\n        $scope.showCustomiser = function(){\r\n            helperService.showDialog($('#reportInventoryGridCustomiser'), function() { });\r\n        };\r\n\r\n        $scope.closeCustomiser = function(){\r\n            helperService.closeDialog($('#reportInventoryGridCustomiser'));\r\n        };\r\n\r\n        $scope.selectColumn = function(arr, col) {\r\n            var found = false;\r\n                var l = arr.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if (arr[i].id == col.id) {\r\n                        found = true;\r\n                        arr.splice(i, 1);\r\n                        break;\r\n                    }\r\n                }\r\n            if (!found) {\r\n                arr.push(col);\r\n            }\r\n        }\r\n\r\n        $scope.isColumnSelected = function( arr, v ) {\r\n                var found = false;\r\n                var l = arr.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if (arr[i].id == v.id) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n          };\r\n\r\n        $scope.columnFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedColumns[i].id == v.columnId) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n          $scope.additionalColumnFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedAdditionalColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedAdditionalColumns[i].id == v.columnId) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n          $scope.columnHeaderFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedColumns[i].id == v.id) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n        const scrollReachBottomCallback = function (){\r\n            if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                $scope.selectPage($scope.dataPage + 1);\r\n            }\r\n        };\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        };\r\n\r\n        $scope.selectPage = function (page) {\r\n            $scope.dataPage = page;\r\n            $scope.getReport(false);\r\n        };\r\n\r\n        $scope.reportType = 'OnHand';\r\n        $scope.reportTypes = [\r\n            {Type: 'OnHand', Text: 'Inventory On Hand', variantsGroupEnabled: true}, \r\n            {Type: 'LowStock', Text: 'Low Stock', variantsGroupEnabled: true}, \r\n            {Type: 'Levels', Text: 'All Inventory Levels',  variantsGroupEnabled: true},\r\n        ];\r\n\r\n\r\n        $scope.getCurrentReportType = function() {\r\n            var l = $scope.reportTypes.length;\r\n            for (var i = 0; i < l; i++) {\r\n                if ($scope.reportTypes[i].Type === $scope.reportType) {\r\n                    return $scope.reportTypes[i];\r\n                }\r\n            }\r\n        };\r\n\r\n        $scope.currentFilter = {\r\n            reportType: 'OnHand',\r\n            outletID: '0',\r\n            groupFamilies: false,\r\n            orderByColumnId: -1,\r\n            orderDesc: false,\r\n            searchText: ''\r\n        };\r\n\r\n        $timeout(function () {\r\n            $scope.mode = 'common';\r\n            \r\n            $timeout(function () {\r\n                initSelects(function () {\r\n                    var el = $(this);\r\n                    if (el[0].id == 'outlets-styler') {\r\n                        // add address to outlet\r\n                        angular.forEach($scope.locations, function (l) {\r\n                            var p = \"<div class='width100'>\" + (!!l.OutletLocationName ? l.OutletLocationName : gettextCatalog.getString('All outlets')) + \"</div>\" +\r\n                                    \"<div class='width100' style='font-size:12px'>\" + (!!l.LocationAddress ? l.LocationAddress : '&nbsp;') +\r\n                                    \"</div>\";\r\n                            var ef = el.find('li.loc-' + l.PosOutletID);\r\n\r\n                            ef.html(p);\r\n                        });\r\n                    }\r\n                });\r\n\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        });\r\n\r\n        $scope.onLoad = function () {\r\n            $.blockUI();\r\n            stockTakeService.loadUserAvailableOutletsAndRegistries()\r\n            .then(function (res) {\r\n                if (res.data.singleLocation === true) {\r\n                    $scope.locations = res.data.locations;\r\n                    if ($scope.locations.length > 0)\r\n                        $scope.currentFilter.outletID = $scope.locations[0].PosOutletID;\r\n                }\r\n                else\r\n                    $scope.locations = [{ PosOutletID: '0', OutletName: gettextCatalog.getString('All outlets') }].concat(res.data.locations);\r\n                $scope.getReport();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            })\r\n            .finally(function () {\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        };\r\n\r\n        $scope.$watch('reportType',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.outletID',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.orderByColumnId',\r\n        function (newValue, oldValue) {\r\n              if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n              }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.orderDesc',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n\r\n        $scope.$watch('currentFilter.groupFamilies',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.firstShow = true;\r\n        $scope.$on('view.loaded', function (evt) {\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n            }\r\n        });\r\n\r\n        $scope.getReport = function (fromPage1) {\r\n            if(fromPage1) {\r\n                $scope.dataPage = 1;\r\n                $scope.data = [];\r\n            }\r\n\r\n            var prms = {\r\n                ReportType: $scope.reportType,\r\n                OutletID: $scope.currentFilter.outletID,\r\n                groupFamilies: $scope.currentFilter.groupFamilies && $scope.getCurrentReportType().variantsGroupEnabled,\r\n                orderByColumnId: $scope.currentFilter.orderByColumnId,\r\n                orderDesc: $scope.currentFilter.orderDesc,\r\n                searchText: $scope.currentFilter.searchText,\r\n                skip: ($scope.dataPage - 1) * $scope.itemsByPage,\r\n                take: $scope.itemsByPage\r\n            };\r\n\r\n            $.blockUI();\r\n            $scope.isLoading = true;\r\n            $scope.headers = [];\r\n            $scope.totals = [];\r\n            $scope.additionalHeaders = [];\r\n            \r\n            return reportService.loadInventoryReport(prms)\r\n            .then(function (res) {\r\n                $scope.listOfColumns = res.data.Headers;\r\n                $scope.data = $scope.data.concat(res.data.Values);\r\n                $scope.totals = res.data.Totals;\r\n                $scope.additionalHeaders = res.data.AdditionalHeaders;\r\n                getPages(res.data.MaxRows);\r\n\r\n                if ($scope.selectedColumns.length == 0) {\r\n                    var l = $scope.listOfColumns.length;\r\n                    for (var i = 0; i < l; i++) {\r\n                        if ($scope.listOfColumns[i].isDefault === true) {\r\n                            $scope.selectedColumns.push($scope.listOfColumns[i]);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                $scope.filterForm.$setPristine();\r\n\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n            }).catch(function (err) {\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        }\r\n\r\n        // email functions\r\n        $scope.allowEmailSubject = function () {\r\n            return true;\r\n        };\r\n\r\n        $scope.emailReport = function (emailCtrl, emailSubject) {\r\n            $.blockUI();\r\n\r\n           var email = emailCtrl.$viewValue;\r\n           var emailSubject = emailSubject.$viewValue;\r\n\r\n           var colIDs = [];\r\n            for (var i = 0; i < $scope.selectedColumns.length; i++) {\r\n                colIDs.push($scope.selectedColumns[i].id);\r\n            }\r\n\r\n            for (var i = 0; i < $scope.selectedAdditionalColumns.length; i++) {\r\n                colIDs.push($scope.selectedAdditionalColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                ReportType: $scope.reportType,\r\n                OutletID: $scope.currentFilter.outletID,\r\n                groupFamilies: $scope.currentFilter.groupFamilies && $scope.getCurrentReportType().variantsGroupEnabled,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs,\r\n                emailTo: email,\r\n                subject: emailSubject,\r\n                emailTo: email,\r\n                subject: emailSubject\r\n            };\r\n\r\n            return reportService.loadInventoryReportEmail(prms)\r\n            .then(function (result) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#emailReportDialogPartial');\r\n\r\n                // show message box about sending result\r\n                $scope.reportEmailSentStatus = true;\r\n                helperService.showDialog('#reportSentEmailStatus');\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(gettextCatalog.getString(\"Error sending email.\"));\r\n            });\r\n        };\r\n\r\n        $scope.exportReport = function () {\r\n            $.blockUI();\r\n            \r\n            var colIDs = [];\r\n            for (var i = 0; i < $scope.selectedColumns.length; i++) {\r\n                colIDs.push($scope.selectedColumns[i].id);\r\n            }\r\n\r\n            for (var i = 0; i < $scope.selectedAdditionalColumns.length; i++) {\r\n                colIDs.push($scope.selectedAdditionalColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                ReportType: $scope.reportType,\r\n                OutletID: $scope.currentFilter.outletID,\r\n                groupFamilies: $scope.currentFilter.groupFamilies && $scope.getCurrentReportType().variantsGroupEnabled,\r\n               // orderByColumnId: $scope.currentFilter.orderByColumnId,\r\n               // orderDesc: $scope.currentFilter.orderDesc,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs\r\n            };\r\n\r\n            return reportService.loadInventoryReportCSV(prms)\r\n            .then(function (csv) {\r\n                if (configService.isMobile)\r\n                    return csvService.writeCSVToFile(csv.data, \"InventoryReport.csv\")\r\n                    .then(function (path) {\r\n                        var deferred = $q.defer();\r\n                        $.unblockUI();\r\n\r\n                        helperService.showInfoDialog({\r\n                            title: '',\r\n                            body: gettextCatalog.getString('The file is saved as: '+path)\r\n                        }, function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n\r\n\r\n                        return deferred.promise;\r\n                    });\r\n                else\r\n                    return csvService.downloadCSV(csv.data, \"InventoryReport.csv\");\r\n            })\r\n            .then(function () {\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        };\r\n\r\n    }\r\n]);\r\n","angular.module(\"mainApp\").controller('reportPaymentTypeSummaryController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', '$uibModal',\r\n        'helperService', 'reportService', 'stockTakeService', 'gettextCatalog', 'printService', '$q', 'emailService','csvService', '$interval',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, $uibModal,\r\n        helperService, reportService, stockTakeService, gettextCatalog, printService, $q, emailService, csvService, $interval) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constPaymentTypeSummaryViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n        }\r\n        \r\n        $scope.showModal = false;\r\n        $scope.data = [];\r\n        $scope.headers = [];\r\n        $scope.methods = [];\r\n        $scope.outelts = [];\r\n        $scope.registries = [];\r\n        $scope.users = [];\r\n        $scope.mode = '';\r\n        $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n\r\n        $scope.cantExport = buildConfiguration.platform == 'ios';\r\n\r\n        $scope.triggerChangeOutletFilter = true;\r\n        $scope.triggerChangeRegisterFilter = true;\r\n        $scope.triggerChangeUserFilter = true;\r\n\r\n        $scope.currentFilter = {\r\n            fromDate: helperService.getFormatedDate2(new Date()),\r\n            toDate: helperService.getFormatedDate2(new Date()),\r\n            registries: [],\r\n            outletID: '0',\r\n            registryID: '0',\r\n            userID: '0'\r\n        };\r\n        $scope.grid = {\r\n            minimumColumnSize: 105,\r\n            rowHeight: 50,\r\n            enableColumnMenus: false,\r\n            enableFiltering: false,\r\n            enableSorting: false,\r\n            excessRows: 50,\r\n            excessColumns:25,\r\n           // fastWatch: true,\r\n            columnDefs: [\r\n            ],\r\n            onRegisterApi: function(gridApi) {\r\n                $scope.gridApi = gridApi;\r\n            },\r\n            customScroller: function myScrolling(uiGridViewport, scrollHandler) {\r\n                uiGridViewport.on('scroll', function myScrollingOverride(event) {\r\n                    $('body').find('.tooltip').remove();\r\n                    scrollHandler(event);\r\n                });\r\n            }\r\n        };\r\n\r\n        $scope.gridData = [];\r\n\r\n        $scope.toggleRow = function (row, i) {\r\n\r\n            row.isActive = true;\r\n            $.blockUI({fadeIn: 0});\r\n\r\n            $timeout(function() {\r\n                $scope.gridData = $scope.data[i].Details;\r\n                $scope.selectedData = $scope.data[i];\r\n                $scope.grid.data = $scope.data[i].Details;\r\n                //row.isActive = true;\r\n                $scope.showModal = true;\r\n                var element = $('#detailsModal');\r\n                if (element) {\r\n                    helperService.showDialog(element, function() { \r\n                        $.unblockUI(); \r\n                    }, \r\n                    function() { \r\n                        $interval(function() {\r\n                            $scope.gridApi.core.handleWindowResize();\r\n                            $('.ui-grid-viewport').get(0).scrollBy(1, 0);\r\n                        }, 500, 5);\r\n                    }, \r\n                    function() {\r\n                        $scope.showModal = false;\r\n                        $scope.data.forEach(function(x) {\r\n                            x.isActive = false;\r\n                        });\r\n                        $.unblockUI();\r\n                    });\r\n                } else {\r\n                    console.log('element not found');\r\n                }\r\n            }, 100);\r\n        };\r\n\r\n        $scope.goBack = function () {\r\n            var element = $('#detailsModal');\r\n            $.blockUI();\r\n            helperService.closeDialog(element);\r\n        };\r\n\r\n        $scope.renderCompleted = function () {\r\n           $.unblockUI();\r\n        };\r\n\r\n        $timeout(function () {\r\n            $scope.mode = 'common';\r\n            initSelects();\r\n        });\r\n\r\n\r\n        $scope.clear = function () {         \r\n            $scope.triggerChangeOutletFilter = false;\r\n            $scope.triggerChangeRegisterFilter = false;\r\n            $scope.triggerChangeUserFilter = false;\r\n            $scope.currentFilter.outletID = '0';\r\n            $scope.currentFilter.userID = '0';\r\n            $scope.currentFilter.registryID = '0';\r\n            $scope.currentFilter.fromDate = helperService.getFormatedDate2(new Date());\r\n            $scope.currentFilter.toDate = helperService.getFormatedDate2(new Date());\r\n            \r\n            $timeout(function () {\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n                \r\n            });\r\n\r\n            $scope.getReport();\r\n        };\r\n\r\n\r\n        $scope.dateSelectedCallback = function(from, to){\r\n            $scope.currentFilter.fromDate = from;\r\n            $scope.currentFilter.toDate = to;\r\n\r\n            $scope.getReport();\r\n        };\r\n\r\n\r\n        $scope.onLoad = function () {\r\n            $.blockUI();\r\n            stockTakeService.loadUserAvailableOutletsAndRegistries()\r\n            .then(function (res) {\r\n                $scope.locations = res.data.locations;\r\n\r\n                if (res.data.singleLocation === true) {\r\n                    if ($scope.locations.length > 0)\r\n                        $scope.currentFilter.outletID = $scope.locations[0].PosOutletID;\r\n                }\r\n                else {\r\n                    if ($scope.locations.length === 1)\r\n                        $scope.currentFilter.outletID = $scope.locations[0].PosOutletID;\r\n                }\r\n\r\n                $scope.registries = res.data.registries;\r\n                $scope.currentFilter.registries = res.data.registries;\r\n               \r\n                return reportService.loadUserAvailableUsers();\r\n            })\r\n            .then(function (res) {\r\n                $scope.users = res.data.users;\r\n\r\n                // code below is important. Async execution means that comboboxes can be initialized before actual data will have come\r\n                // so we need to refresh comboboxes after actual data is loaded to scope\r\n                $.unblockUI();\r\n                \r\n                $scope.getReport();\r\n                \r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            })\r\n            .finally(function () {\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        };\r\n\r\n        $scope.$watch('currentFilter.outletID',\r\n          function (newValue, oldValue) {\r\n              \r\n            $scope.updateRegistriesCombo(newValue);                  \r\n                          \r\n\r\n\r\n            if($scope.triggerChangeOutletFilter)\r\n                $scope.getReport();\r\n\r\n            $scope.triggerChangeOutletFilter = true;\r\n          });\r\n\r\n          $scope.$watch('currentFilter.registryID',\r\n          function (newValue, oldValue) {            \r\n\r\n            if($scope.triggerChangeRegisterFilter)\r\n              $scope.getReport();\r\n\r\n            $scope.triggerChangeRegisterFilter = true;\r\n\r\n          });\r\n\r\n          $scope.$watch('currentFilter.userID',\r\n          function (newValue, oldValue) {            \r\n\r\n            if($scope.triggerChangeUserFilter)\r\n              $scope.getReport();\r\n\r\n            $scope.triggerChangeUserFilter = true;\r\n\r\n          });\r\n\r\n\r\n        $scope.updateRegistriesCombo = function (outletID) {\r\n            $scope.currentFilter.registryID = '0';\r\n            $timeout(function () {\r\n                $scope.triggerChangeRegisterFilter = false;\r\n    \r\n                $scope.currentFilter.registries = [].concat($scope.registries.filter(function (v) {\r\n                        return v.PosOutletID == outletID;\r\n                    }));\r\n    \r\n                if(outletID == null || outletID == \"0\")\r\n                    $scope.currentFilter.registries = $scope.registries;\r\n    \r\n    \r\n                $timeout(function () {\r\n                    $('#selectRegisterReportPaymentTypeSummary').trigger('refresh');\r\n                }, 10);\r\n            });\r\n\r\n        };\r\n\r\n        $scope.firstShow = true;\r\n        $scope.$on('view.loaded', function (evt) {\r\n\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n                // init controls\r\n\r\n                $timeout(function () {\r\n                    $timeout(function () { $('input, select').trigger('refresh'); });\r\n                });\r\n            }\r\n        });\r\n\r\n        $scope.isProcessed = function () {\r\n            return true;\r\n        };\r\n\r\n        $scope.getReport = function () {\r\n            var prms = {\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate)\r\n            };\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n\r\n            if (!$scope.currentFilter.userID || $scope.currentFilter.userID == '0')\r\n                prms.UserName = null;\r\n            else\r\n                prms.UserName = $scope.users.filter(function (u) { return u.UserID == $scope.currentFilter.userID; })[0].UserName;\r\n\r\n            if (!$scope.currentFilter.registryID || $scope.currentFilter.registryID == '0')\r\n                prms.RegistryID = null;\r\n            else\r\n                prms.RegistryID = $scope.currentFilter.registryID;\r\n\r\n            if (!$scope.currentFilter.outletID || $scope.currentFilter.outletID == '0')\r\n                prms.PosOutletID = null;\r\n            else\r\n                prms.PosOutletID = $scope.currentFilter.outletID;\r\n\r\n            $.blockUI();\r\n            $scope.data = [];\r\n            $scope.headers = [];\r\n\r\n            return reportService.loadPaymentTypeSummary(prms)\r\n            .then(function (res) {\r\n                $scope.data = res.data.Values;\r\n\r\n                angular.forEach(res.data.Dates, function (el) {\r\n                    if($scope.headers.indexOf(helperService.getFormatedDateOnlyAsIs(el)) < 0)\r\n                        $scope.headers.push(helperService.getFormatedDateOnlyAsIs(el));\r\n                });\r\n\r\n                $scope.filterForm.$setPristine();\r\n                \r\n                $scope.updateGrid();\r\n\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n        \r\n        var valueCellTemplate = \"<div\\n\" +\r\n        \"  class=\\\"ui-grid-cell-contents\\\"\\n\" +\r\n        \"   ng-if=\\\"COL_FIELD\\\">\\n\" +\r\n        \"   <span class=\\\"amount\\\">{{COL_FIELD | number:2}}</span>\\n\" +\r\n        //    \"<span class=\\\"currency\\\">{{grid.appScope.currency_symbol}}</span>\\n\" + \r\n        \"</div>\";\r\n\r\n        var tooltipCellTemplate = \"<div\\n\" +\r\n        \"  class=\\\"ui-grid-cell-contents\\\"\\n\" +\r\n        \"   title=\\\"{{COL_FIELD}}\\\" tooltip-trigger=\\\"'outsideClick'\\\"  uib-tooltip=\\\"{{COL_FIELD}}\\\"  tooltip-append-to-body=\\\"true\\\" >\" +\r\n        \"        {{COL_FIELD}}\" +\r\n        \"</div>\";\r\n\r\n        $scope.updateGrid = function () {\r\n            var arr = new Array(4 + $scope.headers.length);\r\n            arr.push(\r\n                {name: \"Order number\", field: 'OrderNumber', cellTooltip: true, cellTemplate: tooltipCellTemplate, enableSorting: false, cellClass: 'custom-cell', headerCellClass: 'custom-header-cell',minWidth: 140},\r\n                {name: \"Customer\", field: 'Customer',  cellTooltip: true, cellTemplate: tooltipCellTemplate, enableSorting: false, cellClass: 'custom-cell', headerCellClass: 'custom-header-cell', minWidth: 140},\r\n                {name: \"Totals by Order\", field: 'Total', enableSorting: false, cellClass: 'custom-cell', headerCellClass: 'custom-header-cell', minWidth: 140 }\r\n            );\r\n            $scope.headers.forEach(function(x,i){ \r\n                arr.push({field: 'Values['+i +']', name: x, cellTemplate: valueCellTemplate, enableSorting: false, cellClass: 'custom-cell', headerCellClass: 'custom-header-cell'  });\r\n            });\r\n           \r\n            $scope.grid.columnDefs = arr;\r\n            $scope.grid.data = '$scope.gridData';\r\n            \r\n        };\r\n\r\n        // email functions\r\n        $scope.allowEmailSubject = function () {\r\n            return true;\r\n        };\r\n\r\n        $scope.emailReport = function (emailCtrl, emailSubject) {\r\n            $.blockUI();\r\n\r\n            var prms = {\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate)\r\n            };\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n\r\n            if (!$scope.currentFilter.userID || $scope.currentFilter.userID == '0')\r\n                prms.UserName = null;\r\n            else\r\n                prms.UserName = $scope.users.filter(function (u) { return u.UserID == $scope.currentFilter.userID; })[0].UserName;\r\n\r\n            if (!$scope.currentFilter.registryID || $scope.currentFilter.registryID == '0')\r\n                prms.RegistryID = null;\r\n            else\r\n                prms.RegistryID = $scope.currentFilter.registryID;\r\n\r\n            if (!$scope.currentFilter.outletID || $scope.currentFilter.outletID == '0')\r\n                prms.PosOutletID = null;\r\n            else\r\n                prms.PosOutletID = $scope.currentFilter.outletID;\r\n\r\n\r\n\r\n           var email = emailCtrl.$viewValue;\r\n           var emailSubj = emailSubject.$viewValue;\r\n\r\n           prms.emailTo = email;\r\n           prms.subject = emailSubj;\r\n\r\n            return reportService.loadPaymentTypeSummaryReportEmail(prms)\r\n            .then(function (result) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#emailReportDialogPartial');\r\n\r\n                // show message box about sending result\r\n                $scope.reportEmailSentStatus = true;\r\n                helperService.showDialog('#reportSentEmailStatus');\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(gettextCatalog.getString(\"Error sending email.\"));\r\n            });\r\n        };\r\n\r\n\r\n        $scope.exportReport = function () {\r\n            $.blockUI();\r\n            \r\n            var prms = {\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate)\r\n            };\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n\r\n            if (!$scope.currentFilter.userID || $scope.currentFilter.userID == '0')\r\n                prms.UserName = null;\r\n            else\r\n                prms.UserName = $scope.users.filter(function (u) { return u.UserID == $scope.currentFilter.userID; })[0].UserName;\r\n\r\n            if (!$scope.currentFilter.registryID || $scope.currentFilter.registryID == '0')\r\n                prms.RegistryID = null;\r\n            else\r\n                prms.RegistryID = $scope.currentFilter.registryID;\r\n\r\n            if (!$scope.currentFilter.outletID || $scope.currentFilter.outletID == '0')\r\n                prms.PosOutletID = null;\r\n            else\r\n                prms.PosOutletID = $scope.currentFilter.outletID;\r\n\r\n            return reportService.loadPaymentTypeSummaryReportCSV(prms)\r\n            .then(function (csv) {\r\n                if (configService.isMobile)\r\n                    return csvService.writeCSVToFile(csv.data, \"PaymentTypeSummaryReport.csv\")\r\n                    .then(function (path) {\r\n                        var deferred = $q.defer();\r\n                        $.unblockUI();\r\n\r\n                        helperService.showInfoDialog({\r\n                            title: '',\r\n                            body: gettextCatalog.getString('The file is saved as: '+path)\r\n                        }, function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n\r\n\r\n                        return deferred.promise;\r\n                    });\r\n                else\r\n                    return csvService.downloadCSV(csv.data, \"PaymentTypeSummaryReport.csv\");\r\n            })\r\n            .then(function () {\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        };\r\n\r\n    }\r\n\r\n    ]);","angular.module(\"mainApp\").controller('reportProductPerformanceController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', '$uibModal',\r\n        'helperService', 'reportService', 'stockTakeService', 'gettextCatalog', 'printService', '$q', 'emailService','csvService',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, $uibModal,\r\n        helperService, reportService, stockTakeService, gettextCatalog, printService, $q, emailService, csvService) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constProductPerformanceViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n        }\r\n        \r\n        $scope.popoverUrl = \"reportProductPerformanceColumnSelectorPartial.html\";\r\n        \r\n        $scope.mode = '';\r\n        $scope.data = [];\r\n        $scope.outelts = [];\r\n        $scope.listOfColumns = [];\r\n        $scope.selectedColumns = [];\r\n        $scope.additionalHeaders = [];\r\n        $scope.selectedAdditionalColumns = [];\r\n        $scope.dataPage = 1;\r\n        $scope.dataPageDisplay;\r\n        $scope.itemsByPage = 100;\r\n        $scope.isLoading = false;\r\n\r\n        $scope.cantExport = buildConfiguration.platform == 'ios';\r\n\r\n        $scope.showCustomiser = function(){\r\n            helperService.showDialog($('#reportProdPerfGridCustomiser'), function(){ });\r\n        };\r\n\r\n        $scope.closeCustomiser = function(){\r\n            helperService.closeDialog($('#reportProdPerfGridCustomiser'));\r\n        };\r\n\r\n        $scope.selectColumn = function(arr, col) {\r\n            var found = false;\r\n                var l = arr.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if (arr[i].id == col.id) {\r\n                        found = true;\r\n                        arr.splice(i, 1);\r\n                        break;\r\n                    }\r\n                }\r\n            if (!found) {\r\n                arr.push(col);\r\n            }\r\n        }\r\n\r\n        $scope.chunk = function(arr, size) {\r\n            var newArr = [];\r\n            for (var i=0; i<arr.length; i+=size) {\r\n              newArr.push(arr.slice(i, i+size));\r\n            }\r\n            return newArr;\r\n          }\r\n          \r\n        $scope.chunkedColumnsData = $scope.chunk($scope.listOfColumns, 5);\r\n\r\n        $scope.isColumnSelected = function( arr, v ) {\r\n                var found = false;\r\n                var l = arr.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if (arr[i].id == v.id) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n          };\r\n\r\n        $scope.columnFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedColumns[i].id == v.columnId) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n          $scope.additionalColumnFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedAdditionalColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedAdditionalColumns[i].id == v.columnId) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n          $scope.columnHeaderFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedColumns[i].id == v.id) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n\r\n        $scope.getCurrentReportType = function() {\r\n            var l = $scope.reportTypes.length;\r\n            for (var i = 0; i < l; i++) {\r\n                if ($scope.reportTypes[i].Type === $scope.reportType) {\r\n                    return $scope.reportTypes[i];\r\n                }\r\n            }\r\n        };\r\n\r\n        const scrollReachBottomCallback = function (){\r\n            if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                $scope.selectPage($scope.dataPage + 1);\r\n            }\r\n        };\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        $scope.dateSelectedCallback = function(from, to){\r\n            $scope.currentFilter.fromDate = from;\r\n            $scope.currentFilter.toDate = to;\r\n            $scope.getReport(true);\r\n        }\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        };\r\n\r\n        $scope.selectPage = function (page) {\r\n            $scope.dataPage = page;\r\n            $scope.getReport(false);\r\n        };\r\n\r\n        $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n\r\n        $scope.currentFilter = {\r\n            outletID: '0',\r\n            fromDate: null,\r\n            toDate: null,\r\n            groupFamilies: false,\r\n            orderByColumnId: 1,\r\n            orderDesc: false,\r\n            searchText: ''\r\n        };\r\n\r\n        $timeout(function () {\r\n            $scope.mode = 'common';\r\n            \r\n            $timeout(function () {\r\n                initSelects(function () {\r\n                    var el = $(this);\r\n                    if (el[0].id == 'outlets-styler') {\r\n                        // add address to outlet\r\n                        angular.forEach($scope.locations, function (l) {\r\n                            var p = \"<div class='width100'>\" + (!!l.OutletLocationName ? l.OutletLocationName : gettextCatalog.getString('All outlets')) + \"</div>\" +\r\n                                    \"<div class='width100' style='font-size:12px'>\" + (!!l.LocationAddress ? l.LocationAddress : '&nbsp;') +\r\n                                    \"</div>\";\r\n                            var ef = el.find('li.loc-' + l.PosOutletID);\r\n\r\n                            ef.html(p);\r\n                        });\r\n                    }\r\n                });\r\n\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        });\r\n\r\n        $scope.onLoad = function () {\r\n            $.blockUI();\r\n            stockTakeService.loadUserAvailableOutletsAndRegistries()\r\n            .then(function (res) {\r\n                if (res.data.singleLocation === true) {\r\n                    $scope.locations = res.data.locations;\r\n                    if ($scope.locations.length > 0)\r\n                        $scope.currentFilter.outletID = $scope.locations[0].PosOutletID;\r\n                }\r\n                else\r\n                    $scope.locations = [{ PosOutletID: '0', OutletName: gettextCatalog.getString('All outlets') }].concat(res.data.locations);\r\n                $scope.getReport();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            })\r\n            .finally(function () {\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        };\r\n\r\n        $scope.$watch('currentFilter.outletID',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.orderByColumnId',\r\n        function (newValue, oldValue) {\r\n              if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n              }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.orderDesc',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n\r\n        $scope.$watch('currentFilter.groupFamilies',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.firstShow = true;\r\n        $scope.$on('view.loaded', function (evt) {\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n            }\r\n        });\r\n\r\n        $scope.getReport = function (fromPage1) {\r\n            if(fromPage1) {\r\n                $scope.dataPage = 1;\r\n                $scope.data = [];\r\n            }\r\n\r\n            var prms = {\r\n                OutletID: $scope.currentFilter.outletID,\r\n                StartDate: helperService.toDateFromDatepickerParameter(!$scope.currentFilter.fromDate ? new Date() : $scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                groupFamilies: $scope.currentFilter.groupFamilies,\r\n                orderByColumnId: $scope.currentFilter.orderByColumnId,\r\n                orderDesc: $scope.currentFilter.orderDesc,\r\n                searchText: $scope.currentFilter.searchText,\r\n                skip: ($scope.dataPage - 1) * $scope.itemsByPage,\r\n                take: $scope.itemsByPage\r\n            };\r\n\r\n            $.blockUI();\r\n            $scope.isLoading = true;\r\n            $scope.headers = [];\r\n            $scope.additionalHeaders = [];\r\n            \r\n            return reportService.loadProductPerformanceReport(prms)\r\n            .then(function (res) {\r\n                $scope.listOfColumns = res.data.Headers;\r\n                $scope.chunkedColumnsData = $scope.chunk($scope.listOfColumns, 5);\r\n                $scope.data = $scope.data.concat(res.data.Values);\r\n                $scope.additionalHeaders = res.data.AdditionalHeaders;\r\n                getPages(res.data.MaxRows);\r\n\r\n                if ($scope.selectedColumns.length == 0) {\r\n                    var l = $scope.listOfColumns.length;\r\n                    for (var i = 0; i < l; i++) {\r\n                        if ($scope.listOfColumns[i].isDefault === true) {\r\n                            $scope.selectedColumns.push($scope.listOfColumns[i]);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                $scope.filterForm.$setPristine();\r\n\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n            }).catch(function (err) {\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        }\r\n\r\n        // email functions\r\n        $scope.allowEmailSubject = function () {\r\n            return true;\r\n        };\r\n\r\n        $scope.emailReport = function (emailCtrl, emailSubject) {\r\n            $.blockUI();\r\n\r\n           var email = emailCtrl.$viewValue;\r\n           var emailSubject = emailSubject.$viewValue;\r\n\r\n           var colIDs = [];\r\n            for (var i = 0; i < $scope.selectedColumns.length; i++) {\r\n                colIDs.push($scope.selectedColumns[i].id);\r\n            }\r\n\r\n            for (var i = 0; i < $scope.selectedAdditionalColumns.length; i++) {\r\n                colIDs.push($scope.selectedAdditionalColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                OutletID: $scope.currentFilter.outletID,\r\n                StartDate: helperService.toDateFromDatepickerParameter(!$scope.currentFilter.fromDate ? new Date() : $scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                groupFamilies: $scope.currentFilter.groupFamilies,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs,\r\n                emailTo: email,\r\n                subject: emailSubject\r\n            };\r\n\r\n            return reportService.loadProductPerformanceReportEmail(prms)\r\n            .then(function (result) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#emailReportDialogPartial');\r\n\r\n                // show message box about sending result\r\n                $scope.reportEmailSentStatus = true;\r\n                helperService.showDialog('#reportSentEmailStatus');\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(gettextCatalog.getString(\"Error sending email.\"));\r\n            });\r\n        };\r\n\r\n        $scope.exportReport = function () {\r\n            $.blockUI();\r\n            \r\n            var colIDs = [];\r\n            for (var i = 0; i < $scope.selectedColumns.length; i++) {\r\n                colIDs.push($scope.selectedColumns[i].id);\r\n            }\r\n\r\n            for (var i = 0; i < $scope.selectedAdditionalColumns.length; i++) {\r\n                colIDs.push($scope.selectedAdditionalColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                OutletID: $scope.currentFilter.outletID,\r\n                StartDate: helperService.toDateFromDatepickerParameter(!$scope.currentFilter.fromDate ? new Date() : $scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                groupFamilies: $scope.currentFilter.groupFamilies,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs,\r\n            };\r\n\r\n            return reportService.loadProductPerformanceReportCSV(prms)\r\n            .then(function (csv) {\r\n                if (configService.isMobile)\r\n                    return csvService.writeCSVToFile(csv.data, \"ProductPerformanceReport.csv\")\r\n                    .then(function (path) {\r\n                        var deferred = $q.defer();\r\n                        $.unblockUI();\r\n\r\n                        helperService.showInfoDialog({\r\n                            title: '',\r\n                            body: gettextCatalog.getString('The file is saved as: '+path)\r\n                        }, function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n\r\n\r\n                        return deferred.promise;\r\n                    });\r\n                else\r\n                    return csvService.downloadCSV(csv.data, \"ProductPerformanceReport.csv\");\r\n            })\r\n            .then(function () {\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        };\r\n\r\n    }\r\n]);\r\n","angular.module(\"mainApp\").controller('reportSalesSummaryController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', '$uibModal',\r\n        'helperService', 'reportService', 'stockTakeService', 'gettextCatalog', 'printService', '$q', 'emailService','csvService',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, $uibModal,\r\n        helperService, reportService, stockTakeService, gettextCatalog, printService, $q, emailService, csvService) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constSalesSummaryViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n        }\r\n        \r\n        $scope.popoverUrl = \"reportSalesSummaryColumnSelectorPartial.html\";\r\n        \r\n        $scope.mode = '';\r\n        $scope.data = [];\r\n        $scope.totals = [];\r\n        $scope.outelts = [];\r\n        $scope.listOfColumns = [];\r\n        $scope.selectedColumns = [];\r\n        $scope.additionalHeaders = [];\r\n        $scope.selectedAdditionalColumns = [];        \r\n\r\n        $scope.dataPage = 1;\r\n        $scope.dataPageDisplay;\r\n        $scope.itemsByPage = 100;\r\n        $scope.isLoading = false;\r\n\r\n        $scope.cantExport = buildConfiguration.platform == 'ios';\r\n\r\n        $scope.chunk = function(arr, size) {\r\n            var newArr = [];\r\n            for (var i=0; i<arr.length; i+=size) {\r\n              newArr.push(arr.slice(i, i+size));\r\n            }\r\n            return newArr;\r\n          }\r\n\r\n        $scope.showCustomiser = function(){\r\n            helperService.showDialog($('#reportSalesSummaryGridCustomiser'), function(){ });\r\n        };\r\n\r\n        $scope.closeCustomiser = function(){\r\n            helperService.closeDialog($('#reportSalesSummaryGridCustomiser'));\r\n        };\r\n          \r\n        $scope.chunkedColumnsData = $scope.chunk($scope.listOfColumns, 6);\r\n        $scope.selectColumn = function(arr, col) {\r\n            var found = false;\r\n                var l = arr.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if (arr[i].id == col.id) {\r\n                        found = true;\r\n                        arr.splice(i, 1);\r\n                        break;\r\n                    }\r\n                }\r\n            if (!found) {\r\n                arr.push(col);\r\n            }\r\n        }\r\n\r\n        $scope.isColumnSelected = function( arr, v ) {\r\n                var found = false;\r\n                var l = arr.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if (arr[i].id == v.id) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n          };\r\n\r\n        $scope.columnFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedColumns[i].id == v.columnId) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n          $scope.additionalColumnFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedAdditionalColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedAdditionalColumns[i].id == v.columnId) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n          $scope.columnHeaderFilter = function( v ) {\r\n            return function( v ) {\r\n                var found = false;\r\n                var l = $scope.selectedColumns.length;\r\n                for (var i = 0; i < l; i++) {\r\n                    if ($scope.selectedColumns[i].id == v.id) {\r\n                        found = true;\r\n                        break;\r\n                    }\r\n                }\r\n              return found;\r\n            };\r\n          };\r\n\r\n        const scrollReachBottomCallback = function (){\r\n            if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                $scope.selectPage($scope.dataPage + 1);\r\n            }\r\n        };\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        $scope.dateSelectedCallback = function(from, to){\r\n            $scope.currentFilter.fromDate = from;\r\n            $scope.currentFilter.toDate = to;\r\n            $scope.getReport(true);\r\n        }\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        };\r\n\r\n        $scope.selectPage = function (page) {\r\n            $scope.dataPage = page;\r\n            $scope.getReport(false);\r\n        };\r\n\r\n        $scope.reportType = 'Summary';\r\n        $scope.reportTypes = [\r\n            {Type: 'Summary', Text: 'Summary', variantsGroupEnabled: false, showProductEnabled: false}, \r\n            {Type: 'Outlet', Text: 'Outlet', variantsGroupEnabled: true, showProductEnabled: true}, \r\n            {Type: 'Register', Text: 'Register',  variantsGroupEnabled: true, showProductEnabled: true}, \r\n            {Type: 'User', Text: 'User',  variantsGroupEnabled: true, showProductEnabled: true}, \r\n            {Type: 'SaleRep', Text: 'Sales Representative',  variantsGroupEnabled: true, showProductEnabled: true}, \r\n            {Type: 'Customer', Text: 'Customer',  variantsGroupEnabled: true, showProductEnabled: true}, \r\n            {Type: 'Product', Text: 'Product', variantsGroupEnabled: true, showProductEnabled: false}, \r\n            {Type: 'Brand', Text: 'Brand', variantsGroupEnabled: true, showProductEnabled: true}, \r\n            {Type: 'Category', Text: 'Product Category', variantsGroupEnabled: true, showProductEnabled: true}, \r\n            {Type: 'Tag', Text: 'Product Tag', variantsGroupEnabled: true, showProductEnabled: true}\r\n        ];\r\n\r\n\r\n        $scope.getCurrentReportType = function() {\r\n            var l = $scope.reportTypes.length;\r\n            for (var i = 0; i < l; i++) {\r\n                if ($scope.reportTypes[i].Type === $scope.reportType) {\r\n                    return $scope.reportTypes[i];\r\n                }\r\n            }\r\n        };\r\n        $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n        \r\n        $scope.currentFilter = {\r\n            fromDate: helperService.getFormatedDate2(new Date()),\r\n            toDate: helperService.getFormatedDate2(new Date()),\r\n            reportType: 'Summary',\r\n            outletID: '0',\r\n            showProducts: false,\r\n            groupFamilies: false,\r\n            orderByColumnId: 1,\r\n            orderDesc: false,\r\n            searchText: '',\r\n            showTotals: true\r\n        };\r\n\r\n        $timeout(function () {\r\n            $scope.mode = 'common';\r\n            \r\n            $timeout(function () {\r\n                initSelects(function () {\r\n                    var el = $(this);\r\n                    if (el[0].id == 'outlets-styler') {\r\n                        // add address to outlet\r\n                        angular.forEach($scope.locations, function (l) {\r\n                            var p = \"<div class='width100'>\" + (!!l.OutletLocationName ? l.OutletLocationName : gettextCatalog.getString('All outlets')) + \"</div>\" +\r\n                                    \"<div class='width100' style='font-size:12px'>\" + (!!l.LocationAddress ? l.LocationAddress : '&nbsp;') +\r\n                                    \"</div>\";\r\n                            var ef = el.find('li.loc-' + l.PosOutletID);\r\n\r\n                            ef.html(p);\r\n                        });\r\n                    }\r\n                });\r\n\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        });\r\n\r\n        $scope.onLoad = function () {\r\n            $.blockUI();\r\n            stockTakeService.loadUserAvailableOutletsAndRegistries()\r\n            .then(function (res) {\r\n                if (res.data.singleLocation === true) {\r\n                    $scope.locations = res.data.locations;\r\n                    if ($scope.locations.length > 0)\r\n                        $scope.currentFilter.outletID = $scope.locations[0].PosOutletID;\r\n                }\r\n                else\r\n                    $scope.locations = [{ PosOutletID: '0', OutletName: gettextCatalog.getString('All outlets') }].concat(res.data.locations);\r\n                $scope.getReport(true);\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            })\r\n            .finally(function () {\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        };\r\n\r\n        $scope.$watch('reportType',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.outletID',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.orderByColumnId',\r\n        function (newValue, oldValue) {\r\n              if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n              }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.orderDesc',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n              $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.showProducts',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n              $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.groupFamilies',\r\n        function (newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n              $scope.getReport(true);\r\n            }\r\n        });\r\n\r\n        $scope.firstShow = true;\r\n        $scope.$on('view.loaded', function (evt) {\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n                // init controls\r\n            }\r\n        });\r\n\r\n        $scope.getReport = function (fromPage1) {\r\n            if(fromPage1) {\r\n                $scope.dataPage = 1;\r\n                $scope.data = [];\r\n            }\r\n            \r\n            var prms = {\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                ReportType: $scope.reportType,\r\n                OutletID: $scope.currentFilter.outletID,\r\n                showProducts: $scope.currentFilter.showProducts && $scope.getCurrentReportType().showProductEnabled,\r\n                groupFamilies: $scope.currentFilter.groupFamilies && $scope.getCurrentReportType().variantsGroupEnabled,\r\n                orderByColumnId: $scope.currentFilter.orderByColumnId,\r\n                orderDesc: $scope.currentFilter.orderDesc,\r\n                searchText: $scope.currentFilter.searchText,\r\n                skip: ($scope.dataPage - 1) * $scope.itemsByPage,\r\n                take: $scope.itemsByPage\r\n            };\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n\r\n            if (prms.StartDate && prms.EndDate) {\r\n                var startDate = moment(prms.StartDate);\r\n                var endDate = moment(prms.EndDate);\r\n                if (Math.abs(startDate.diff(endDate, 'years', true)) > 1) {\r\n                    errorService.showError(gettextCatalog.getString('You can set up a max 1-year period for reporting only.'));\r\n                    return;\r\n                }\r\n            }\r\n\r\n            $.blockUI();\r\n            $scope.isLoading = true;\r\n            $scope.headers = [];\r\n            $scope.totals = [];\r\n            $scope.additionalHeaders = [];\r\n            \r\n            return reportService.loadSalesSummary(prms).then(function (res) {\r\n\r\n                if ($.trim($scope.currentFilter.searchText) === '') {\r\n                    $scope.currentFilter.showTotals = true;\r\n                }\r\n                else {\r\n                    $scope.currentFilter.showTotals = false;\r\n                }\r\n\r\n                $scope.listOfColumns = res.data.Headers;\r\n                $scope.chunkedColumnsData = $scope.chunk($scope.listOfColumns, 6);\r\n                $scope.data = $scope.data.concat(res.data.Values);\r\n                $scope.totals = res.data.Totals;\r\n                $scope.additionalHeaders = res.data.AdditionalHeaders;\r\n                getPages(res.data.MaxRows);\r\n\r\n                if ($scope.selectedColumns.length == 0) {\r\n                    var l = $scope.listOfColumns.length;\r\n                    for (var i = 0; i < l; i++) {\r\n                        if ($scope.listOfColumns[i].isDefault === true) {\r\n                            $scope.selectedColumns.push($scope.listOfColumns[i]);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                $scope.filterForm.$setPristine();\r\n\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n            }).catch(function (err) {\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        }\r\n\r\n        // email functions\r\n        $scope.allowEmailSubject = function () {\r\n            return true;\r\n        };\r\n\r\n        $scope.emailReport = function (emailCtrl, emailSubject) {\r\n            $.blockUI();\r\n\r\n            var email = emailCtrl.$viewValue;\r\n           var emailSubject = emailSubject.$viewValue;\r\n\r\n            var colIDs = [];\r\n            for (var i = 0; i < $scope.selectedColumns.length; i++) {\r\n                colIDs.push($scope.selectedColumns[i].id);\r\n            }\r\n\r\n            for (var i = 0; i < $scope.selectedAdditionalColumns.length; i++) {\r\n                colIDs.push($scope.selectedAdditionalColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                ReportType: $scope.reportType,\r\n                OutletID: $scope.currentFilter.outletID,\r\n                showProducts: $scope.currentFilter.showProducts && $scope.getCurrentReportType().showProductEnabled,\r\n                groupFamilies: $scope.currentFilter.groupFamilies && $scope.getCurrentReportType().variantsGroupEnabled,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs,\r\n                emailTo: email,\r\n                subject: emailSubject\r\n            };\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n            \r\n            reportService.loadSalesSummaryEmail(prms)\r\n            .then(function (result) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#emailReportDialogPartial');\r\n\r\n                // show message box about sending result\r\n                $scope.reportEmailSentStatus = true;\r\n                helperService.showDialog('#reportSentEmailStatus');\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(gettextCatalog.getString(\"Error sending email.\"));\r\n            });\r\n        };\r\n\r\n        $scope.exportReport = function () {\r\n            $.blockUI();\r\n            \r\n            var colIDs = [];\r\n            for (var i = 0; i < $scope.selectedColumns.length; i++) {\r\n                colIDs.push($scope.selectedColumns[i].id);\r\n            }\r\n\r\n            for (var i = 0; i < $scope.selectedAdditionalColumns.length; i++) {\r\n                colIDs.push($scope.selectedAdditionalColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                ReportType: $scope.reportType,\r\n                OutletID: $scope.currentFilter.outletID,\r\n                showProducts: $scope.currentFilter.showProducts && $scope.getCurrentReportType().showProductEnabled,\r\n                groupFamilies: $scope.currentFilter.groupFamilies && $scope.getCurrentReportType().variantsGroupEnabled,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs\r\n            };\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n\r\n            return reportService.loadSalesSummaryCSV(prms)\r\n            .then(function (csv) {\r\n                if (configService.isMobile)\r\n                    return csvService.writeCSVToFile(csv.data, \"SalesSummaryReport.csv\")\r\n                    .then(function (path) {\r\n                        var deferred = $q.defer();\r\n                        $.unblockUI();\r\n\r\n                        helperService.showInfoDialog({\r\n                            title: '',\r\n                            body: gettextCatalog.getString('The file is saved as: '+ path ? path.replace('///storage/emulated/0', 'storage'): ''),\r\n                            customClass: 'reportFileSaved'\r\n                        }, function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n\r\n\r\n                        return deferred.promise;\r\n                    });\r\n                else\r\n                    return csvService.downloadCSV(csv.data, \"SalesSummaryReport.csv\");\r\n            })\r\n            .then(function () {\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        };\r\n\r\n    }\r\n]);\r\n","angular.module('services').factory('reportService',\r\n    ['helperService', 'configService', '$q', 'webOnlyProvider', 'constants', 'gettextCatalog',\r\n        'remoteRequestProvider', 'receiptService', 'printService', '$timeout','$sce',\r\n        function (helperService, configService, $q, webOnlyProvider, constants, gettextCatalog,\r\n         remoteRequestProvider, receiptService, printService, $timeout, $sce) {\r\n\r\n            var reportService = {};\r\n\r\n            reportService.getReportTemplate = function (reportName, reportScopeObjectName) {\r\n                return receiptService.getReceiptTemplate('remote', reportName, reportScopeObjectName);\r\n            };\r\n\r\n            reportService.loadRegistryCloseList = function (\r\n                                        fromDate,\r\n                                        toDate,\r\n                                        outletID,\r\n                                        registryID,\r\n                                        page, limit, sorting) {\r\n\r\n\r\n                var prm = {\r\n                    StartDate: !!fromDate ? helperService.toDateFromDatepickerParameter(fromDate) : null,\r\n                    EndDate: !!toDate ? helperService.toDateFromDatepickerParameter(toDate) : null,\r\n                    RegistryID: (!registryID || registryID == '0') ? null : registryID,\r\n                    OutletID: (!outletID || outletID == '0') ? null : outletID,\r\n                    SortField: (!!sorting && !!sorting.FieldName) ? sorting.FieldName : null,\r\n                    SortDirection: (!!sorting && !!sorting.Direction) ? sorting.Direction : null,\r\n                    Page: page ? page : null,\r\n                    Limit: limit ? limit : null,\r\n                    UserID: configService.loginUserID\r\n                };\r\n\r\n                return webOnlyProvider.loadRegistryCloseList(prm);\r\n            }\r\n\r\n            reportService.getPaymentTypeName = function (sname) {\r\n                var pname = sname;\r\n                switch (sname) {\r\n                    case 'CashPayment':\r\n                    case 'cash':\r\n                        pname = gettextCatalog.getString('Cash');\r\n                        break;\r\n                    case 'CreditCardPayment':\r\n                    case 'credit card':\r\n                        pname = gettextCatalog.getString('Credit card');\r\n                        break;\r\n                    case 'GiftCardPayment':\r\n                    case 'gift card':\r\n                        pname = gettextCatalog.getString('Gift Card');\r\n                        break;\r\n                    case 'LoyaltyPayment':\r\n                    case 'loyalty':\r\n                        pname = gettextCatalog.getString('Loyalty');\r\n                        break;\r\n                    case 'StoreCreditPayment':\r\n                    case 'store credits':\r\n                        pname = gettextCatalog.getString('Store Credit');\r\n                        break;\r\n                    case 'Rounding':\r\n                        pname = gettextCatalog.getString('Cash rounding');\r\n                        break;\r\n                }\r\n\r\n                return pname;\r\n            };\r\n\r\n            reportService.loadClosureRegistryDetails = function (registryCloseID) {\r\n                return webOnlyProvider.loadClosureRegistryDetails(registryCloseID)\r\n                .then(function (data) {\r\n                    var res = {};\r\n                    res.totalPayment = 0;\r\n                    res.newPayment = 0;\r\n                    res.payments = [];\r\n                    res.cashManagement = [];\r\n                    res.laybyTotal = 0;\r\n                    res.layby = [];\r\n                    res.laybyClosedTotal = 0;\r\n                    res.laybyClosed = [];\r\n                    res.onaccountTotal = 0;\r\n                    res.onaccount = [];\r\n                    res.onaccountClosedTotal = 0;\r\n                    res.onaccountClosed = [];\r\n                    res.returnsTotal = 0;\r\n                    res.returns = [];\r\n                    res.CashExpected = 0;\r\n                    res.CashCounted = 0;\r\n                    res.CashReceived = 0;\r\n                    res.CashMovements = [];\r\n                    res.CashManagementOffset = 0; // will contain cash that was added to cash drawer\r\n                    res.NonCashPayments = [];\r\n                    res.TotalExpected = 0;\r\n                    res.TotalCounted = 0;\r\n                    res.IsActive = data.data.IsActive;\r\n                    res.giftCardCount = 0;\r\n                    res.CloseTime = data.data.CloseTime;\r\n                    res.OpenTime = data.data.OpenTime;\r\n                    res.IsLatest = data.data.IsLatest;\r\n\r\n                    // cash management\r\n                    angular.forEach(data.data.CashManagement, function (el) {\r\n                        el.OperationTime = helperService.getFormatedDateWithLocalTime2(el.OperationTime);\r\n                        if (el.OperationType == 'Cash out' || el.OperationType == 'Petty cash out')\r\n                            el.Amount = -el.Amount;\r\n\r\n                        res.cashManagement.push(el);\r\n                        var vr = {\r\n                            UserName: el.SalesRepresentative,\r\n                            Amount: el.Amount,\r\n                            Type: el.OperationType\r\n                        };\r\n\r\n                        // adjust payments sums inverted operation due to counters include cash management\r\n                        res.CashManagementOffset += el.Amount;\r\n\r\n                        res.CashMovements.push(vr);\r\n                    });\r\n\r\n                    // surcharges\r\n                    res.Surcharges =data.data.Surcharges; \r\n\r\n                    // total calculated including refunds\r\n                    angular.forEach(data.data.Payments, function (el) {\r\n                        var pname = reportService.getPaymentTypeName(el.CounterName);\r\n                        var counted = el.Counter;\r\n\r\n                        res.TotalExpected += el.Counter;\r\n\r\n                        if (!!el.Counted)\r\n                            counted = el.Counted;\r\n\r\n                        if (el.CounterName == 'CashPayment') {\r\n                            res.CashExpected += el.Counter;\r\n                            res.CashCounted += el.Counted;\r\n                            counted = el.Counted;\r\n                        }\r\n\r\n                        res.TotalCounted += counted;\r\n\r\n                        if (el.Counter != 0 || counted != 0) {\r\n\r\n                            res.payments.push({\r\n                                CounterName: pname,\r\n                                Counter: el.Counter,\r\n                                Counted: counted,\r\n                                Diff: el.Counter - counted,\r\n                                IsCustom: el.IsCustom,\r\n                                PosPayments: el.PosPayments.map(function(p){\r\n                                    p.PaymentDate2 = helperService.getFormatedDate(p.PaymentDate);\r\n                                    return p;\r\n                                })\r\n                            });\r\n\r\n                            if (el.CounterName != 'CashPayment') {\r\n                                res.NonCashPayments.push({\r\n                                    PaymentTypeName: pname,\r\n                                    CashExpected: el.Counter,\r\n                                    CashCounted: counted\r\n                                });\r\n                            }\r\n                        }\r\n                    });\r\n\r\n                    res.paymentOnAccountCount = 0;\r\n                    res.paymentLayByCount = 0;\r\n\r\n                    angular.forEach(data.data.AdditionalCounters, function (el) {\r\n                        if (el.CounterType == 'SALE') {\r\n                            switch (el.CounterName) {\r\n                                case constants.newSaleTotalCountName:\r\n                                    res.saleTotalCount = el.Counter;\r\n                                    break;\r\n                                case constants.newSaleCountName:\r\n                                    res.saleCount = el.Counter;\r\n                                    break;\r\n                                case constants.newOnAccountCountName:\r\n                                    res.onAccountCount = el.Counter;\r\n                                    break;\r\n                                case constants.newLaybyCountName:\r\n                                    res.layByCount = el.Counter;\r\n                                    break;\r\n                                case constants.newTaxCountName:\r\n                                    res.taxCount = el.Counter;\r\n                                    break;\r\n                                case constants.newSaleDiscountName:\r\n                                    res.discountCount = el.Counter;\r\n                                    break;\r\n                                case constants.giftCardSaleCountName:\r\n                                    res.giftCardCount = el.Counter;\r\n                                    break;\r\n                            }\r\n                        }\r\n                        else\r\n                            if (el.CounterType == 'PAYMENT') {\r\n                                switch (el.CounterName) {\r\n                                    case constants.newPaymentCountName:\r\n                                        res.newPayment = el.Counter;\r\n                                        break;\r\n                                    case constants.newOnAccountCountName:\r\n                                        res.paymentOnAccountCount = el.Counter;\r\n                                        break;\r\n                                    case constants.newLaybyCountName:\r\n                                        res.paymentLayByCount = el.Counter;\r\n                                        break;\r\n                                    case constants.roundingTotalName:\r\n                                        res.payments.push({\r\n                                            CounterName: gettextCatalog.getString('Cash rounding'),\r\n                                            Counter: el.Counter,\r\n                                            Counted: el.Counter,\r\n                                            Diff: 0,\r\n                                            PosPayments: data.data.CashRoundingPosPayments.map(function(p){\r\n                                                p.PaymentDate2 = helperService.getFormatedDate(p.PaymentDate);\r\n                                                return p;\r\n                                            })                                           \r\n                                            \r\n                                        });\r\n\r\n                                        res.NonCashPayments.push({\r\n                                            PaymentTypeName: gettextCatalog.getString('Cash rounding'),\r\n                                            CashExpected: el.Counter,\r\n                                            CashCounted: el.Counter\r\n                                        });\r\n\r\n                                        break;\r\n                                }\r\n                            }\r\n                            else\r\n                                if (el.CounterType == 'REFUND') {\r\n                                    switch (el.CounterName) {\r\n                                        case constants.refundTotalName:\r\n                                            res.refundCount = el.Counter;\r\n                                            break;\r\n                                    }\r\n\r\n                                }\r\n\r\n                    });\r\n\r\n                    res.totalPayment += res.newPayment + res.paymentOnAccountCount + res.paymentLayByCount;\r\n\r\n                    if (res.IsActive) {\r\n                        res.CashExpected += res.CashManagementOffset;\r\n                    }\r\n                    else {\r\n                        angular.forEach(res.payments, function (el) {\r\n                            if (el.CounterName.toLowerCase() == 'cash') {\r\n                                // el.Counter -= res.CashManagementOffset;\r\n                                el.Counted -= res.CashManagementOffset;\r\n                                el.Diff = el.Counter - el.Counted;\r\n                            }\r\n                        });\r\n                    }\r\n\r\n                    if (!res.IsActive) {\r\n                        res.CashExpected += res.CashManagementOffset;\r\n                    }\r\n\r\n                    res.CashReceived = res.CashExpected - res.CashManagementOffset;\r\n\r\n                    res.TotalExpected = res.CashExpected;\r\n                    res.TotalCounted = res.CashCounted;\r\n                    res.CashCountedToBank = res.CashCounted;\r\n\r\n                    if (!res.IsActive) {\r\n                        res.CashCountedToBank -= res.CashManagementOffset;\r\n                    }\r\n\r\n                    angular.forEach(res.NonCashPayments, function (el) {\r\n                        res.TotalExpected += el.CashExpected;\r\n                        res.TotalCounted += el.CashCounted;\r\n                    });\r\n\r\n                    res.accountCounters = [];\r\n                    angular.forEach(data.data.AccountData, function (el) {\r\n                        el.PaymentTypeName = reportService.getPaymentTypeName(el.PaymentType);\r\n                        el.Date2 = helperService.getFormatedDateAsIs(el.Date);\r\n                        res.accountCounters.push(el);\r\n                        switch (el.Status) {\r\n                            case 'LAYBY':\r\n                                res.layby.push(el);\r\n                                res.laybyTotal += el.Amount;\r\n                                break;\r\n                            case 'LAYBY_CLOSED':\r\n                                res.laybyClosed.push(el);\r\n                                res.laybyClosedTotal += el.Amount;\r\n                                break;\r\n                            case 'ONACCOUNT':\r\n                                res.onaccount.push(el);\r\n                                res.onaccountTotal += el.Amount;\r\n                                break;\r\n                            case 'ONACCOUNT_CLOSED':\r\n                                res.onaccountClosed.push(el);\r\n                                res.onaccountClosedTotal += el.Amount;\r\n                                break;\r\n                            case 'RETURN':\r\n                                if (el.Amount > 0)\r\n                                    el.Amount = -el.Amount;\r\n                                res.returns.push(el);\r\n                                res.returnsTotal += el.Amount;\r\n                                break;\r\n                        }\r\n                    });\r\n\r\n                    // reorder payments\r\n                    var p1 = res.payments.filter(function (el) { return el.IsCustom !== true });\r\n                    var p2 = res.payments.filter(function (el) { return el.IsCustom === true }).sort(function (a, b) {\r\n                        return a.CounterName < b.CounterName ? -1 :\r\n                               a.CounterName > b.CounterName ? 1 : 0;\r\n                    });\r\n\r\n                    res.payments = p1.concat(p2);\r\n\r\n                    // add end of day values to cash management part\r\n                    var camnt = helperService.DEARRound(res.CashCounted - res.CashExpected, 2);\r\n                    var closeTime = !!res.CloseTime ? helperService.getFormatedDateWithLocalTime2(res.CloseTime) : '';\r\n\r\n                    if (camnt != 0) {\r\n                        var vr = {\r\n                            OperationTime: closeTime,\r\n                            Amount: camnt,\r\n                            OperationType: camnt > 0 ? \"Overpayment is created\" : \"Till is short of cash\"\r\n                        };\r\n                        res.cashManagement.unshift(vr);\r\n                    }\r\n\r\n                    if (!!closeTime) {\r\n                        var vr = {\r\n                            Amount: res.CashCounted,\r\n                            OperationType: 'Till Closing Balance',\r\n                            OperationTime: closeTime\r\n                        };\r\n                        res.cashManagement.unshift(vr);\r\n                    }\r\n\r\n                    // convert report data into html if any\r\n                    if(!!data.data.CloseReport) {\r\n                        res.CloseOfDayReportHTML = $sce.trustAsHtml(reportService.EndOfDayReportConvertToHTML(data.data.CloseReport));\r\n                    }\r\n\r\n                    var deffered = $q.defer();\r\n                    deffered.resolve(res);\r\n                    return deffered.promise;\r\n                });\r\n            };\r\n\r\n            reportService.formatCurrencyInObject = function (obj, fields) {\r\n                angular.forEach(fields, function (f) {\r\n                    if (!!obj[f]) {\r\n                        obj[f] = $filter('currency')(obj[f], \"\");\r\n                    }\r\n                    else\r\n                        obj[f] = $filter('currency')(0, \"\");\r\n                });\r\n            };\r\n\r\n            reportService.formatCurrencyInTemplate = function (tpl, fields, filter) {\r\n                angular.forEach(fields, function (f) {\r\n                    var fw = \"{{\" + f + \"}}\";\r\n                    var fwn = \"{{\" + f + \" | \" + filter + \"}}\";\r\n                    while (tpl.indexOf(fw) >= 0) {\r\n                        tpl = tpl.replace(fw, fwn);\r\n                    }\r\n                });\r\n\r\n                return tpl;\r\n            };\r\n\r\n            reportService.formatEmailSubject = function (subj, fields) {\r\n                angular.forEach(fields, function (f) {\r\n                    var fw = \"[\" + f.key + \"]\";\r\n                    var fwn = f.value;\r\n                    while (subj.indexOf(fw) >= 0) {\r\n                        subj = subj.replace(fw, fwn);\r\n                    }\r\n                });\r\n\r\n                return subj;\r\n            };\r\n\r\n            reportService.printCashManagementReport = function (scope, obj) {\r\n                return receiptService.getReceiptTemplate(true)\r\n                .then(function (res) {\r\n\r\n                    receiptService.prepareCashManagementReceiptSaleModel(scope, obj);\r\n                    var tpl = reportService.formatCurrencyInTemplate(res.Template, ['itemCashManagementReceipts.CashManagementAmount'], 'currency');\r\n                    printService.preparePrintTemplate(scope, $('div.receipt-template'), { ngmHideFonts: \"yes\" }, tpl);\r\n                    var deffered = $q.defer();\r\n\r\n                    $timeout(function () {\r\n                        deffered.resolve(true);\r\n                    });\r\n\r\n                    return deffered.promise;\r\n                })\r\n                .then(function (res) {\r\n                    $('div[ngm-cashmanagement]').show();\r\n                    return printService.printReceipt($('div[ngm-cashmanagement]'), false, true);\r\n                });\r\n            }\r\n\r\n            reportService.printVantivDeclineReceipt = function (scope, obj, currency) {\r\n                return receiptService.getReceiptTemplate(true)\r\n                .then(function (res) {\r\n\r\n                    receiptService.prepareVantivDeclineReceiptSaleModel(scope, obj, currency);\r\n                    printService.preparePrintTemplate(scope, $('div.vantiv-decline-receipt-template'), { ngmHideFonts: \"yes\" }, res.Template);\r\n                    var deffered = $q.defer();\r\n\r\n                    $timeout(function () {\r\n                        deffered.resolve(true);\r\n                    });\r\n\r\n                    return deffered.promise;\r\n                })\r\n                .then(function (res) {\r\n                    $('div.vantiv-decline-receipt-template div[ngm-terminal]').show();\r\n                    return printService.printReceipt($('div.vantiv-decline-receipt-template div[ngm-terminal]'), false, true);\r\n                });\r\n            }\r\n\r\n            reportService.loadUserAvailableUsers = function () {\r\n                var prms = {\r\n                    userID: configService.loginUserID,\r\n                    infoType: 'userEnabledUsers'\r\n                };\r\n\r\n                return webOnlyProvider.loadStockTransferSatelliteData(prms);\r\n            };\r\n\r\n            reportService.loadPaymentTypeSummary = function (prms) {\r\n                return webOnlyProvider.loadPaymentTypeSummary(prms);\r\n            };\r\n\r\n            reportService.loadSalesSummary= function (prms) {\r\n                return webOnlyProvider.loadSalesSummary(prms);\r\n            };\r\n\r\n            reportService.loadSalesSummaryCSV= function (prms) {\r\n                return webOnlyProvider.loadSalesSummaryCSV(prms);\r\n            };\r\n\r\n            reportService.loadSalesSummaryEmail= function (prms) {\r\n                return webOnlyProvider.loadSalesSummaryEmail(prms);\r\n            };\r\n\r\n            reportService.loadProductPerformanceReport= function (prms) {\r\n                return webOnlyProvider.loadProductPerformanceReport(prms);\r\n            };\r\n\r\n            reportService.loadProductPerformanceReportCSV= function (prms) {\r\n                return webOnlyProvider.loadProductPerformanceReportCSV(prms);\r\n            };\r\n\r\n            reportService.loadProductPerformanceReportEmail= function (prms) {\r\n                return webOnlyProvider.loadProductPerformanceReportEmail(prms);\r\n            };\r\n\r\n            reportService.loadInventoryReport = function (prms) {\r\n                return webOnlyProvider.loadInventoryReport(prms);\r\n            };\r\n\r\n            reportService.loadInventoryReportCSV = function (prms) {\r\n                return webOnlyProvider.loadInventoryReportCSV(prms);\r\n            };\r\n\r\n            reportService.loadInventoryReportEmail = function (prms) {\r\n                return webOnlyProvider.loadInventoryReportEmail(prms);\r\n            };\r\n\r\n            reportService.loadInTransitReport = function (prms) {\r\n                return webOnlyProvider.loadInTransitReport(prms);\r\n            };\r\n\r\n            reportService.loadInTransitReportEmail = function (prms) {\r\n                return webOnlyProvider.loadInTransitReportEmail(prms);\r\n            };\r\n\r\n            reportService.loadInTransitReportCSV = function (prms) {\r\n                return webOnlyProvider.loadInTransitReportCSV(prms);\r\n            };\r\n\r\n            reportService.loadReportGiftCard = function (prms) {\r\n                return webOnlyProvider.loadReportGiftCard(prms);\r\n            };\r\n\r\n            reportService.loadReportGiftCardCSV = function (prms) {\r\n                return webOnlyProvider.loadReportGiftCardCSV(prms);\r\n            };\r\n\r\n            reportService.loadReportGiftCardEmail = function (prms) {\r\n                return webOnlyProvider.loadReportGiftCardEmail(prms);\r\n            };\r\n\r\n            reportService.loadSurchargeReport = function (prms) {\r\n                return webOnlyProvider.loadSurchargeReport(prms);\r\n            };\r\n\r\n            reportService.loadSurchargeReportCSV = function (prms) {\r\n                return webOnlyProvider.loadSurchargeReportCSV(prms);\r\n            };\r\n\r\n            reportService.loadSurchargeReportEmail = function (prms) {\r\n                return webOnlyProvider.loadSurchargeReportEmail(prms);\r\n            };\r\n\r\n            reportService.loadPaymentTypeSummaryReportCSV = function (prms) {\r\n                return webOnlyProvider.loadPaymentTypeSummaryReportCSV(prms);\r\n            };\r\n\r\n            reportService.loadPaymentTypeSummaryReportEmail = function (prms) {\r\n                return webOnlyProvider.loadPaymentTypeSummaryReportEmail(prms);\r\n            };\r\n\r\n            reportService.loadStoreCredit = function (prms) {\r\n                return webOnlyProvider.loadStoreCredit(prms)\r\n                .then(function (res) {\r\n                    var totalIssued = 0;\r\n                    var totalRedeemed = 0;\r\n                    var totalBalance = 0;\r\n                    var totalOpeningBalance = 0;\r\n                    angular.forEach(res.data, function (el) {\r\n                        totalIssued += el.IssuedAmount;\r\n                        totalRedeemed += el.RedeemedAmount;\r\n                        totalBalance += el.StoreCredits;\r\n                        totalOpeningBalance += el.OpeningBalance;\r\n                    });\r\n\r\n                    var deffered = $q.defer();\r\n                    deffered.resolve({\r\n                        data: res.data,\r\n                        totalIssued: totalIssued, \r\n                        totalRedeemed: totalRedeemed,\r\n                        totalBalance: totalBalance,\r\n                        totalOpeningBalance: totalOpeningBalance\r\n                    });\r\n                    return deffered.promise;\r\n                });\r\n            };\r\n\r\n            reportService.EndOfDayReportConvertToHTML = function(report) {\r\n                var obj = JSON.parse(report);\r\n                var prn = $('<div></div>');\r\n\r\n                angular.forEach(obj.reportLines, function(line){\r\n                    var formats = line.format;\r\n                    var type=line.type;\r\n                    var value = line.value;\r\n\r\n                    var el = $('<div></div>');\r\n\r\n                    if(type=='TEXT') {\r\n                        if(formats.indexOf('BOLD')>=0)\r\n                            el.css('font-weight', 'bold');\r\n                        if(formats.indexOf('DOUBLE_WIDTH')>=0)\r\n                            el.css('font-size', '20px');\r\n                        if(formats.indexOf('DOUBLE_HEIGHT')>=0)\r\n                            el.css('font-size', '20px');\r\n                        el.text(value);\r\n                    } else if(type=='TICKET_FEED') {\r\n                        var el = $('<div>'+value.replace(new RegExp('\\n','g'), '<br/>')+'</div>');\r\n                    } else if(type=='LINE_SEPARATOR_DOUBLE') {\r\n                        var el = $('<div style=\"border: 0; background-color: #000; height: 3px; width: 100%;\"></div>');\r\n                    }\r\n\r\n                    prn.append(el);\r\n                });\r\n\r\n                return prn.html();\r\n            }\r\n\r\n            reportService.loadStoreCreditCSV = function (prms) {\r\n                return webOnlyProvider.loadStoreCreditCSV(prms);\r\n            };\r\n\r\n            reportService.loadStoreCreditEmail = function (prms) {\r\n                return webOnlyProvider.loadStoreCreditEmail(prms);\r\n            };\r\n\r\n            return reportService;\r\n        }\r\n    ]);\r\n","angular.module(\"mainApp\").controller('reportStoreCreditController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', '$uibModal',\r\n        'helperService', 'reportService', 'stockTakeService', 'gettextCatalog', 'printService', '$q', 'emailService', 'csvService',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, $uibModal,\r\n        helperService, reportService, stockTakeService, gettextCatalog, printService, $q, emailService, csvService) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constPaymentTypeSummaryViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n        }\r\n\r\n        $scope.totalValueRedeemed = 0;\r\n        $scope.totalOutstandingBalance = 0;\r\n        $scope.totalValueIssued = 0;\r\n        $scope.data = [];\r\n\r\n        $scope.mode = '';\r\n        $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n\r\n        $scope.cantExport = buildConfiguration.platform == 'ios';\r\n\r\n        $scope.typesSelect = [{\r\n            id: \"customer\",\r\n            name: \"By Customer\"\r\n        },\r\n        {\r\n            id: \"date\",\r\n            name: \"By Date\"\r\n        }];\r\n\r\n        $scope.currentFilter = {\r\n            fromDate: helperService.getFormatedDate2(new Date()),\r\n            toDate: helperService.getFormatedDate2(new Date()),\r\n            outletID: null,\r\n            type: \"customer\"\r\n        };\r\n\r\n        $scope.dateSelectedCallback = function(from, to){\r\n            $scope.currentFilter.fromDate = from;\r\n            $scope.currentFilter.toDate = to;\r\n            $scope.getReport();\r\n        }\r\n        \r\n        $timeout(function () {\r\n            $scope.mode = 'common';\r\n\r\n            $timeout(function () {\r\n                initSelects();\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n\r\n            $scope.getReport();\r\n        });\r\n\r\n        $scope.firstShow = true;\r\n        $scope.$on('view.loaded', function (evt) {\r\n\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n            }\r\n        });\r\n\r\n        $scope.$watch('currentFilter.type', function(oldValue, newValue) {\r\n            if(oldValue != newValue) {\r\n                $scope.getReport();\r\n            }\r\n        });\r\n\r\n        $scope.isProcessed = function () {\r\n            return $scope.filterForm.$dirty === false;\r\n        };\r\n\r\n        $scope.getReport = function () {\r\n            var prms = {\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                Type: $scope.currentFilter.type\r\n            };\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n\r\n            $.blockUI();\r\n            $scope.data = [];\r\n            $scope.totalValueRedeemed = 0;\r\n            $scope.totalOutstandingBalance = 0;\r\n            $scope.totalValueIssued = 0;\r\n\r\n            $scope.getDateByFormat = helperService.getDateByFormatAlreadyLocal;\r\n\r\n            return reportService.loadStoreCredit(prms)\r\n            .then(function (res) {\r\n                $scope.data = res.data;\r\n\r\n                $.each(res.data, function(idx, el) {\r\n                    el.DateFormated = el.Date ? $scope.getDateByFormat(el.Date, 'LL') : '';\r\n                });\r\n\r\n                $scope.data.unshift({\r\n                    Name: \"Totals\",\r\n                    IssuedAmount: res.totalIssued,\r\n                    RedeemedAmount: -res.totalRedeemed,\r\n                    StoreCredits: res.totalBalance,\r\n                    OpeningBalance: res.totalOpeningBalance\r\n                });\r\n\r\n                $scope.filterForm.$setPristine();\r\n\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        }\r\n\r\n        // email functions\r\n        $scope.allowEmailSubject = function () {\r\n            return true;\r\n        };\r\n\r\n        $scope.emailReport = function (emailCtrl, emailSubject) {\r\n            $.blockUI();\r\n\r\n            var prms = {\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                Type: $scope.currentFilter.type\r\n            };\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n\r\n            var email = emailCtrl.$viewValue;\r\n            var emailSubject = emailSubject.$viewValue;\r\n\r\n            prms.emailTo = email;\r\n            prms.subject = emailSubject;\r\n\r\n                return reportService.loadStoreCreditEmail(prms)\r\n                .then(function (result) {\r\n                    $.unblockUI();\r\n                    helperService.closeDialog('#emailReportDialogPartial');\r\n\r\n                    // show message box about sending result\r\n                    $scope.reportEmailSentStatus = true;\r\n                    helperService.showDialog('#reportSentEmailStatus');\r\n                })\r\n                .catch(function (err) {\r\n                    $.unblockUI();\r\n                    helperService.closeDialog('#emailReportDialogPartial');\r\n                    $scope.reportEmailSentStatus = false;\r\n                    helperService.showDialog('#reportSentEmailStatus');\r\n                });\r\n        };\r\n\r\n        $scope.exportReport = function () {\r\n            $.blockUI();\r\n            // form file name\r\n            var fromd = $scope.currentFilter.fromDate.replace(/\\//g, '_');\r\n            var tod = $scope.currentFilter.toDate.replace(/\\//g, '_');\r\n\r\n            $.blockUI();\r\n            \r\n            var prms = {\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                Type: $scope.currentFilter.type\r\n            };\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n\r\n            return reportService.loadStoreCreditCSV(prms)\r\n            .then(function (csv) {\r\n                if (configService.isMobile)\r\n                    return csvService.writeCSVToFile(csv.data, \"StoreCreditReport_\"+fromd + \"_\" + tod +\".csv\")\r\n                    .then(function (path) {\r\n                        var deferred = $q.defer();\r\n                        $.unblockUI();\r\n\r\n                        helperService.showInfoDialog({\r\n                            title: '',\r\n                            body: gettextCatalog.getString('The file is saved as: '+path)\r\n                        }, function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n\r\n\r\n                        return deferred.promise;\r\n                    });\r\n                else\r\n                    return csvService.downloadCSV(csv.data, \"StoreCreditReport_\"+fromd + \"_\" + tod +\".csv\");\r\n            })\r\n            .then(function () {\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n    }\r\n\r\n    ]);","angular.module(\"mainApp\").controller('reportSurchargeController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'errorService', 'configService', '$uibModal',\r\n        'helperService', 'reportService', 'stockTakeService', 'gettextCatalog', 'printService', '$q', 'emailService','csvService',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, errorService, configService, $uibModal,\r\n        helperService, reportService, stockTakeService, gettextCatalog, printService, $q, emailService, csvService) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constSurchargeViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n        }\r\n\r\n        $scope.mode = '';\r\n        $scope.data = [];\r\n        $scope.outelts = [];\r\n        $scope.listOfColumns = [];\r\n        $scope.groupRegister = false;\r\n        \r\n        $scope.dataPage = 1;\r\n        $scope.dataPageDisplay;\r\n        $scope.itemsByPage = 100;\r\n        $scope.isLoading = false;\r\n\r\n        $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n\r\n        $scope.cantExport = buildConfiguration.platform == 'ios';\r\n\r\n        $scope.currentFilter = {\r\n            fromDate: helperService.getFormatedDate2(new Date()),\r\n            toDate: helperService.getFormatedDate2(new Date()),\r\n            outletID: '0',\r\n            groupRegister: false,\r\n            searchText: ''\r\n        };\r\n\r\n        const scrollReachBottomCallback = function (){\r\n            if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                $scope.selectPage($scope.dataPage + 1);\r\n            }\r\n        };\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        };\r\n\r\n        $scope.selectPage = function (page) {\r\n            $scope.dataPage = page;\r\n            $scope.getReport(false);\r\n        };\r\n\r\n        $timeout(function () {\r\n            $scope.mode = 'common';\r\n            \r\n            // init controls\r\n\r\n            $timeout(function () {\r\n                initSelects(function () {\r\n                    var el = $(this);\r\n                    if (el[0].id == 'outlets-styler') {\r\n                        // add address to outlet\r\n                        angular.forEach($scope.locations, function (l) {\r\n                            var p = \"<div class='width100'>\" + (!!l.OutletLocationName ? l.OutletLocationName : gettextCatalog.getString('All outlets')) + \"</div>\" +\r\n                                    \"<div class='width100' style='font-size:12px'>\" + (!!l.LocationAddress ? l.LocationAddress : '&nbsp;') +\r\n                                    \"</div>\";\r\n                            var ef = el.find('li.loc-' + l.PosOutletID);\r\n\r\n                            ef.html(p);\r\n                        });\r\n                    }\r\n                });\r\n\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        });\r\n\r\n        $scope.onLoad = function () {\r\n            $.blockUI();\r\n            stockTakeService.loadUserAvailableOutletsAndRegistries()\r\n            .then(function (res) {\r\n                if (res.data.singleLocation === true) {\r\n                    $scope.locations = res.data.locations;\r\n                    if ($scope.locations.length > 0)\r\n                        $scope.currentFilter.outletID = $scope.locations[0].PosOutletID;\r\n                }\r\n                else\r\n                    $scope.locations = [{ PosOutletID: '0', OutletName: gettextCatalog.getString('All outlets') }].concat(res.data.locations);\r\n\r\n                $scope.getReport(true);\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            })\r\n            .finally(function () {\r\n                $timeout(function () { $('input, select').trigger('refresh'); });\r\n            });\r\n        };\r\n\r\n        $scope.$watch('currentFilter.outletID',\r\n          function (newValue, oldValue) {\r\n              if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n              }\r\n          });\r\n\r\n          $scope.$watch('groupRegister',\r\n          function (newValue, oldValue) {\r\n              if (newValue !== oldValue) {\r\n                $scope.getReport(true);\r\n              }\r\n          });\r\n\r\n          $scope.dateSelectedCallback = function(from, to){\r\n            $scope.currentFilter.fromDate = from;\r\n            $scope.currentFilter.toDate = to;\r\n            $scope.getReport(true);\r\n        }\r\n\r\n        $scope.firstShow = true;\r\n        $scope.$on('view.loaded', function (evt) {\r\n\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n            }\r\n        });\r\n\r\n\r\n        $scope.getReport = function (fromPage1) {\r\n            if(fromPage1) {\r\n                $scope.dataPage = 1;\r\n                $scope.data = [];\r\n            }\r\n\r\n            var prms = {\r\n                OutletID: $scope.currentFilter.outletID,\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                groupRegister: $scope.groupRegister,\r\n                searchText: $scope.currentFilter.searchText,\r\n                skip: ($scope.dataPage - 1) * $scope.itemsByPage,\r\n                take: $scope.itemsByPage\r\n            };\r\n\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n\r\n            $.blockUI();\r\n            $scope.isLoading = true;\r\n            $scope.headers = [];\r\n            $scope.totals = [];\r\n            $scope.additionalHeaders = [];\r\n            \r\n            return reportService.loadSurchargeReport(prms)\r\n            .then(function (res) {\r\n                $scope.listOfColumns = res.data.Headers;\r\n                $scope.data = $scope.data.concat(res.data.Values);\r\n                $scope.totals = res.data.Totals;\r\n                $scope.additionalHeaders = res.data.AdditionalHeaders;\r\n                getPages(res.data.MaxRows);\r\n\r\n                $scope.filterForm.$setPristine();\r\n\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n            }).catch(function (err) {\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        }\r\n\r\n        // email functions\r\n        $scope.allowEmailSubject = function () {\r\n            return true;\r\n        };\r\n\r\n        $scope.emailReport = function (emailCtrl, emailSubject) {\r\n            $.blockUI();\r\n\r\n           var email = emailCtrl.$viewValue;\r\n           var emailSubject = emailSubject.$viewValue;\r\n\r\n           var colIDs = [];\r\n            for (var i = 0; i < $scope.listOfColumns.length; i++) {\r\n                colIDs.push($scope.listOfColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                OutletID: $scope.currentFilter.outletID,\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                groupRegister: $scope.groupRegister,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs,\r\n                emailTo: email,\r\n                subject: emailSubject\r\n            };\r\n\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n        \r\n            return reportService.loadSurchargeReportEmail(prms)\r\n            .then(function (result) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#emailReportDialogPartial');\r\n\r\n                // show message box about sending result\r\n                $scope.reportEmailSentStatus = true;\r\n                helperService.showDialog('#reportSentEmailStatus');\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(gettextCatalog.getString(\"Error sending email.\"));\r\n            });\r\n        };\r\n\r\n        $scope.exportReport = function () {\r\n            $.blockUI();\r\n            \r\n            var colIDs = [];\r\n            for (var i = 0; i < $scope.listOfColumns.length; i++) {\r\n                colIDs.push($scope.listOfColumns[i].id);\r\n            }\r\n\r\n            var prms = {\r\n                OutletID: $scope.currentFilter.outletID,\r\n                StartDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.fromDate),\r\n                EndDate: helperService.toDateFromDatepickerParameter($scope.currentFilter.toDate),\r\n                groupRegister: $scope.groupRegister,\r\n                searchText: $scope.currentFilter.searchText,\r\n                ColumnList: colIDs\r\n            };\r\n\r\n\r\n            if (prms.StartDate > prms.EndDate) {\r\n                errorService.showError(gettextCatalog.getString(\"The 'From' date should be less than or equal to the 'To' date.\"));\r\n                return;\r\n            }\r\n        \r\n            return reportService.loadSurchargeReportCSV(prms)\r\n            .then(function (csv) {\r\n                if (configService.isMobile)\r\n                    return csvService.writeCSVToFile(csv.data, \"SurchargeReport.csv\")\r\n                    .then(function (path) {\r\n                        var deferred = $q.defer();\r\n                        $.unblockUI();\r\n\r\n                        helperService.showInfoDialog({\r\n                            title: '',\r\n                            body: gettextCatalog.getString('The file is saved as: '+path)\r\n                        }, function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n\r\n\r\n                        return deferred.promise;\r\n                    });\r\n                else\r\n                    return csvService.downloadCSV(csv.data, \"SurchargeReport.csv\");\r\n            })\r\n            .then(function () {\r\n                $.unblockUI();\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        };\r\n\r\n    }\r\n\r\n    ]);","import buildConfiguration from './configEnvironment';\r\n\r\nangular.module('services').factory('httpRequestInterceptor',\r\n    ['configService', '$timeout', '$q', 'uuid2', '$rootScope', '$injector', 'googleHelperService', \r\n        function (configService, $timeout, $q, uuid2, $rootScope, $injector, googleHelperService) {\r\n    return {\r\n        request: function (config) {\r\n            var q = typeof (config.url) == 'string' ? config.url.toLowerCase() : null;\r\n            var webRequest = q!=null &&\r\n                            (q.indexOf('http://') == 0 ||\r\n                             q.indexOf('https://') == 0) &&\r\n                             q.indexOf('/externalapi/pos/') > 0;\r\n\r\n            \r\n            \r\n            // if request contains the following filed in config - it will be bypassed for cancellation\r\n\r\n            if (webRequest && !configService.isSite) {\r\n\r\n                var byPassCancellation = config.byPassCancellation === true;\r\n\r\n                if (q.indexOf('/posquickkeyimages?id=') > 0)\r\n                    byPassCancellation = true;\r\n\r\n                if (!byPassCancellation) {\r\n                    var canceller = $q.defer();\r\n                    config.timeout = canceller.promise;\r\n                    config.gid = uuid2.newguid();\r\n\r\n                    $rootScope.currentRequests[config.gid] = {\r\n                        tmr: $timeout(function () {\r\n                            if ($rootScope.isBlockUIVisible) {\r\n                                $rootScope.showCancellation();\r\n                            }\r\n                        }, configService.requestTimeout),\r\n                        canceller: canceller,\r\n                        config: config\r\n                    };\r\n                }\r\n            }\r\n\r\n            if (config.method != \"OPTIONS\" && config.url.indexOf(configService.baseURL) !== -1) {\r\n                if (!!configService.applicationKey) {\r\n                    config.headers['api-auth-applicationkey'] = configService.applicationKey;\r\n                }\r\n\r\n                if (!!configService.tenantID) {\r\n                    config.headers['api-auth-accountid'] = configService.tenantID;\r\n                }\r\n\r\n                if (!!configService.loginUserID) {\r\n                    config.headers['api-auth-userid'] = configService.loginUserID;\r\n                }\r\n            }\r\n\r\n            if (buildConfiguration.configuration === 'Debug' && q!=null && (q.indexOf('127.0.0.1') > 0 || q.indexOf('ngrok') > 0)) {\r\n                config.headers['ngrok-skip-browser-warning'] = 'true';\r\n            }\r\n\r\n            var hdr = [];\r\n            for (var key in config.headers) {\r\n                if (config.headers.hasOwnProperty(key)) {\r\n                    hdr.push(key + ':' + config.headers[key]);\r\n                }\r\n            }\r\n\r\n            //if (webRequest)\r\n            //    console.log('web request:' + config.url + ', method:' + config.method + ', headers:' + hdr.join(', '));\r\n            //else\r\n            //    console.log('request:' + config.url + ', method:' + config.method + ', headers:' + hdr.join(', '));\r\n            return config;\r\n        },\r\n        responseError: function (response) {\r\n            var config = response.config;\r\n            var webRequest = typeof (config.url) == 'string' && (config.url.indexOf('http://') == 0 || config.url.indexOf('https://') == 0);\r\n            var isPing = config.url.indexOf('ExternalApi/POS/PosPing') > 0;\r\n            var isSaleSaleOrder = webRequest && config.method === 'POST' && config.url.indexOf('ExternalApi/POS/PosOrder') > 0;\r\n\r\n            if (webRequest) {\r\n                var tmr = $rootScope.currentRequests[config.gid];\r\n\r\n                if (!!tmr) {\r\n                    tmr.canceller.resolve(null);\r\n                    $timeout.cancel(tmr.tmr);\r\n                    delete $rootScope.currentRequests[config.gid];\r\n                    $rootScope.hideCancellation();\r\n                }\r\n            }\r\n\r\n\r\n            // retry request in the case of network errors\r\n            // sale order is repeated 1 times due to thay are in queue\r\n            var retryAttempts = isSaleSaleOrder ? 1 : 10;   // 10 attempts is allowed\r\n            var retryTimeout = 3000; // 3 sec. between attempts\r\n\r\n            if (response.status === 403) {\r\n                $rootScope.logoutUser(response.data);\r\n                return $q.reject(response);\r\n            }\r\n\r\n            if (response.status === -1 && (!config.retryAttempt || config.retryAttempt < retryAttempts) && !config.bypassRetry) {\r\n\r\n                if (!config.retryAttempt)\r\n                    config.retryAttempt = 1;\r\n                else\r\n                    config.retryAttempt++;\r\n\r\n                return $timeout(function () {\r\n                    console.log('restart request: ' + config.url + '. Attempt: ' + (config.retryAttempt + 1));\r\n                    var $http = $injector.get('$http');\r\n                    return $http(config);\r\n                }, retryTimeout);\r\n            }\r\n\r\n            if (response.status === -1 && !isPing) {\r\n                $timeout(function () {\r\n                    configService.setNetworkMode(configService.hasNetworkConnection, false);\r\n                });\r\n            }\r\n\r\n            return $q.reject(response);\r\n        },\r\n        response: function (response) {\r\n            var config = response.config;\r\n\r\n            var webRequest = typeof (config.url) == 'string' && (config.url.indexOf('http://') == 0 || config.url.indexOf('https://') == 0);\r\n\r\n            if (webRequest) {\r\n                var tmr = $rootScope.currentRequests[config.gid];\r\n\r\n                if (!!tmr) {\r\n                    tmr.canceller.resolve(null);\r\n                    $timeout.cancel(tmr.tmr);\r\n                    delete $rootScope.currentRequests[config.gid];\r\n                    $rootScope.hideCancellation();\r\n                }\r\n            }\r\n\r\n            if (webRequest && !configService.isOnline && response.status == 200) {\r\n\r\n                var deferred = $q.defer();\r\n                deferred.resolve(null);\r\n                var p = deferred.promise.then(function () {\r\n                    configService.setNetworkMode(true);\r\n                })\r\n                .finally(function () {\r\n                    deferred.resolve(response);\r\n                });\r\n\r\n                return p;\r\n            }\r\n\r\n            return response;\r\n        }\r\n    };\r\n    }])\r\n.run(['$rootScope', 'helperService', '$timeout', 'loginService', 'errorService', 'googleHelperService',\r\n    function ($rootScope, helperService, $timeout, loginService, errorService, googleHelperService) {\r\n        $rootScope.currentRequests = {};\r\n        $rootScope.isCancelDialogVisible = false;\r\n        $rootScope.isBlockUIVisible = false;\r\n\r\n        $rootScope.showCancellation = function () {\r\n            if (Object.keys($rootScope.currentRequests).length > 0 && !$rootScope.isCancelDialogVisible) {\r\n                $rootScope.isCancelDialogVisible = true;\r\n\r\n                // show custom window\r\n                helperService.showDialog('#requestCancelModalDlg');\r\n            }\r\n        };\r\n\r\n        $rootScope.hideCancellation = function () {\r\n            if (Object.keys($rootScope.currentRequests).length == 0 && $rootScope.isCancelDialogVisible) {\r\n                // hide custom window\r\n                helperService.closeDialog('#requestCancelModalDlg');\r\n\r\n                $rootScope.isCancelDialogVisible = false;\r\n            }\r\n        };\r\n\r\n        $rootScope.cancelAllRequests = function () {\r\n            var isLoggedOn = loginService.isLoggedIn();\r\n\r\n            helperService.closeDialog('#requestCancelModalDlg');\r\n            $rootScope.isCancelDialogVisible = false;\r\n\r\n            var gotoLogin = false;\r\n\r\n            Object.keys($rootScope.currentRequests).forEach(function (key) {\r\n                var tmr = $rootScope.currentRequests[key];\r\n//                if (tmr.config.url.indexOf('/PosLoadCustomer') > 0 ||\r\n//                    tmr.config.url.indexOf('/PosLoadCustomer2') > 0)\r\n                // will go to login if request was interrupted by user because if data was not received\r\n                // it will lead to unpredictable behavior of the code.\r\n                gotoLogin = true;\r\n\r\n                tmr.config.isCancelled = true;\r\n                tmr.canceller.resolve(null);\r\n                $timeout.cancel(tmr.tmr);\r\n                delete $rootScope.currentRequests[key];\r\n            });\r\n\r\n            if(gotoLogin)\r\n            {\r\n                $rootScope.$broadcast('header.logoff');\r\n                \r\n                googleHelperService.logout();\r\n                \r\n            }\r\n        };\r\n\r\n\r\n        $rootScope.logoutUser = function (error) {\r\n            helperService.closeDialog('#requestCancelModalDlg');\r\n            $rootScope.isCancelDialogVisible = false;\r\n\r\n            if (error) {\r\n                errorService.showError(error);\r\n            }\r\n            $rootScope.$broadcast('header.logoff');\r\n            \r\n            googleHelperService.logout();\r\n        };\r\n    }]);\r\n\r\nangular.module('services').config(\r\n    function ($httpProvider) {\r\n        $httpProvider.interceptors.push('httpRequestInterceptor');\r\n        $httpProvider.defaults.timeout = 60000; // 1 min timeout for all requests\r\n\r\n    });","import {CalculatorHelperService} from '../../TypePosScripts/CalculatorHelperService';\r\nimport unpackArray from './unpackWorkerHelper';\r\nimport { convertToAPI, convertFromOld } from '../../TypePosScripts/ConverterService';\r\nimport Enumerable from 'linq';\r\nimport { AddressType, StartCalcLevel } from '../../TypePosScripts/Enums';\r\n\r\n\r\nangular.module('services').service('saleService', [\r\n    '$q', 'configService', 'remoteRequestProvider', 'localDBProvider', 'constants',\r\n    'gettextCatalog', 'helperService', 'uuid2', 'orderByFilter', '$timeout', '$rootScope', 'webOnlyProvider',\r\n    'barcodeService', 'cardPayService', '$sce', 'receiptService', '$interval', '$filter', 'errorService',\r\n    'loyaltyService', 'jsStoreProvider', 'deviceInfo', 'orderStatusService',\r\n    function ($q, configService, remoteRequestProvider, localDBProvider, constants,\r\n        gettextCatalog, helperService, uuid2, orderBy, $timeout, $rootScope, webOnlyProvider,\r\n        barcodeService, cardPayService, $sce, receiptService, $interval, $filter, errorService,\r\n        loyaltyService, jsStoreProvider, deviceInfo, orderStatusService) {\r\n\r\n        var saleService = {};\r\n\r\n        saleService.needUpdateSequenceNumber = false;\r\n\r\n        saleService.OfflineStatus = {\r\n            Error: 'error',\r\n            ErrorHistory: 'errorHistory',\r\n            Parked: 'parked'\r\n        };\r\n\r\n        /*get next sequence for order*/\r\n        saleService.getNextSequence = function (posOutletID, posRegistryID) {\r\n            //var provider = configService.isSite ? remoteRequestProvider : localDBProvider;\r\n\r\n            if (configService.isSite || deviceInfo.isSimulator) {\r\n                var v = configService.getNextSequenceNumber(helperService);\r\n\r\n                var deferred = $q.defer();\r\n                deferred.resolve(v);\r\n                return deferred.promise;\r\n            } else {\r\n                var provider = localDBProvider;\r\n\r\n                var pr = provider.getNextSequence(posOutletID, posRegistryID);\r\n\r\n                pr = pr.then(function (resp) {\r\n                    if (resp.data) {\r\n                        return resp.data;\r\n                    } else {\r\n                        return resp;\r\n                    }\r\n                });\r\n\r\n                return pr;\r\n            }\r\n        };\r\n\r\n        /*\r\n        Current method load next sequence number from server and update local value.\r\n        Should be executed when order has been saved through API\r\n        */\r\n        saleService.updateNextSequenceNumber = function (isAfterSale) {\r\n            var posOutletID = configService.lastOutletID;\r\n            var posRegistryID = configService.lastRegistryID;\r\n\r\n            var pr = null;\r\n\r\n            if (configService.isSite == true || deviceInfo.isSimulator) {\r\n                pr = $q.defer();\r\n                pr.resolve(0);\r\n                pr = pr.promise;\r\n            } else {\r\n                pr = localDBProvider.loadOfflineSalesCount(null, null, null, null);\r\n            }\r\n\r\n            return pr.then(function (queuedCnt) {\r\n\r\n                if (queuedCnt == 0 && configService.isOnline) {\r\n\r\n                    var provider = remoteRequestProvider;\r\n                    var pr = provider.getCurrentSequence(posOutletID, posRegistryID);\r\n\r\n                    pr = pr.then(function (resp) {\r\n\r\n                        if (configService.isSite || deviceInfo.isSimulator) {\r\n\r\n                            if (resp) {\r\n                                var v = resp.data;\r\n                                if (parseInt(v) === 0) {\r\n                                    v = helperService.pad(parseInt(v) + 1, 6);\r\n                                }\r\n                                configService.setNextSequenceNumber(v);\r\n                            }\r\n\r\n                            var deferred = $q.defer();\r\n                            deferred.resolve();\r\n                            return deferred.promise;\r\n                        } else {\r\n                            return localDBProvider.setNextSequence(posOutletID, posRegistryID, resp.data);\r\n                        }\r\n                    });\r\n\r\n                    return pr;\r\n                } else { // no connection currently, so increment sequence number ourself\r\n                    var v = 0;\r\n\r\n                    if (isAfterSale === true) {\r\n                        if (configService.isSite) {\r\n                            // this will increment current sequence number and save it to local storage automatically\r\n                            v = configService.getNextSequenceNumber(helperService);\r\n\r\n                        } else {\r\n                            // this will increment current sequence number and save it to local db automatically\r\n                            return localDBProvider.getNextSequence(posOutletID, posRegistryID);\r\n                        }\r\n                    }\r\n\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(v);\r\n                    return deferred.promise;\r\n                }\r\n            });\r\n        };\r\n\r\n\r\n        saleService.stopLoadCheck = null;\r\n        saleService.startSequenceAutoUpdate = function () {\r\n\r\n            if (!this.stopLoadCheck) {\r\n                this.stopLoadCheck = $interval(function (p) {\r\n\r\n                    var posOutletID = configService.lastOutletID;\r\n                    var posRegistryID = configService.lastRegistryID;\r\n\r\n                    if (configService.isOnline && posRegistryID != null) {\r\n\r\n                        var pr = null;\r\n\r\n                        if (configService.isSite == true || deviceInfo.isSimulator) {\r\n                            pr = $q.defer();\r\n                            pr.resolve(0);\r\n\r\n                            pr = pr.promise;\r\n                        } else {\r\n                            pr = localDBProvider.loadOfflineSalesCount(null, null, null, null);\r\n                        }\r\n\r\n                        pr.then(function (cnt) {\r\n                            if (cnt == 0) {\r\n                                // refrech data\r\n                                var injector = angular.element('body').injector();\r\n                                var me = injector.get('saleService');\r\n\r\n                                var deferred = $q.defer();\r\n                                deferred.resolve(null);\r\n                                deferred.promise.then(function () {\r\n                                    me.updateNextSequenceNumber();\r\n                                });\r\n                                return deferred.promise;\r\n                            }\r\n                        });\r\n\r\n                        return;\r\n                    }\r\n                }, 1000 * 60);\r\n            }\r\n\r\n            var deferred = $q.defer();\r\n            deferred.resolve(null);\r\n            return deferred.promise;\r\n        };\r\n\r\n        saleService.stopSequenceAutoUpdate = function () {\r\n            if (saleService.stopLoadCheck != null) {\r\n                try {\r\n                    $interval.cancel(saleService.stopLoadCheck);\r\n                    saleService.stopLoadCheck = null;\r\n                } catch (e) {}\r\n            }\r\n        };\r\n\r\n        saleService.isStandardPaymentType = function (paymentShortName) {\r\n            if (!paymentShortName || typeof (paymentShortName) != 'string') return false;\r\n\r\n            switch (paymentShortName.toLowerCase()) {\r\n                case 'cash':\r\n                case 'credit card':\r\n                case 'gift card':\r\n                case 'loyalty':\r\n                case 'store credits':\r\n                case 'Rounding':\r\n                    return true;\r\n                    //                    break;\r\n            }\r\n\r\n            return false;\r\n        };\r\n\r\n        /**\r\n         * @param {ISale} sale\r\n        Current method should detect if we are online|offline\r\n        in the case of inline - push sale to api\r\n        in the case of offline - push sale to local db for further push it when become online\r\n        */\r\n        saleService.processSale = function (sale, rawSale, info, keepOrderNumber) {\r\n            var callInBackGround = (rawSale.cantProcessOffline !== true && configService.isSite === false && !deviceInfo.isSimulator);\r\n            rawSale.OperationID = sale.OperationID;\r\n            var isRemoteProvider = configService.isSite || (configService.isOnline && callInBackGround === false);\r\n            var provider = isRemoteProvider ? remoteRequestProvider : localDBProvider;\r\n            var pr = saleService.updateRegistrySales(configService.registrySalesID, sale, rawSale);\r\n\r\n            var saleInfo = info;\r\n\r\n            if (!saleInfo.statusID) {\r\n                saleInfo.statusID = 'pending';\r\n                saleInfo.status = constants.parkStatuses['pending'];\r\n            }\r\n            if (parseInt(sale.ClearOrderNumber) === 0 && !rawSale.IsFromDearSale) {\r\n                return pr.then(function () {\r\n                        return saleService.getNextSequence(configService.lastOutletID, configService.lastRegistryID);\r\n                    })\r\n                    .then(function (data) {\r\n                        if (!keepOrderNumber) {\r\n                            sale.OrderNumber = (configService.registryPrefix ? configService.registryPrefix : \"\") +\r\n                                data + (configService.registrySuffix ? configService.registrySuffix : \"\");\r\n                            rawSale.OrderNumber = (configService.registryPrefix ? configService.registryPrefix : \"\") +\r\n                                data + (configService.registrySuffix ? configService.registrySuffix : \"\");\r\n                        }\r\n                        sale.ClearOrderNumber = data;\r\n                        rawSale.ClearOrderNumber = data;\r\n\r\n                        saleInfo.saleObject = sale;\r\n                        var pr = isRemoteProvider ? provider.processSale([sale]) : provider.addOfflineSale(rawSale, saleInfo);\r\n                        pr = pr.then(function (resp) {\r\n                            // add order state change log\r\n                            orderStatusService.trackOrder(sale.OrderID, configService.registrySalesID, {\r\n                                saleInfo: saleInfo,\r\n                                sale: sale,\r\n                                rawSale: rawSale,\r\n                                offlineStatusParked: saleService.OfflineStatus.Parked\r\n                            }).catch(function(err) {\r\n                                console.error('Failed to track order:', err);\r\n                            });\r\n\r\n                            if (configService.isOnline && callInBackGround === true) {\r\n                                return saleService.sendOfflineSales(100, true, sale, rawSale)\r\n                                    .then(function () {\r\n                                        var deferred = $q.defer();\r\n                                        deferred.resolve({\r\n                                            Success: true\r\n                                        });\r\n                                        return deferred.promise;\r\n                                    });\r\n                            } else if (configService.isSite) {\r\n                                if (!!resp && !!resp.data && !!resp.data.Errors && resp.data.Errors.length > 0) {\r\n                                    return saleService._processError(resp.data.Errors[0], sale.OrderNumber);\r\n                                }\r\n\r\n                                var isSuccess = resp.data.Success && resp.data.Success.length > 0 || resp.data.Duplicate && resp.data.Duplicate.length > 0;\r\n                        \r\n                                if (!isSuccess) {\r\n                                    var deferred = $q.defer();\r\n                                    deferred.reject(resp);\r\n                                    return deferred.promise;\r\n                                }\r\n\r\n                                if (!!resp.data && !!resp.data.NewRegistryID)\r\n                                    configService.lastRegistryID = resp.data.NewRegistryID;\r\n\r\n                                saleService.updateSaleOrderNumberForCurrentSale(resp, sale, rawSale);\r\n                                saleService.updateNextSequenceNumber(true);\r\n                            } else {\r\n                                if (!!resp && !!resp.data && !!resp.data.Errors && resp.data.Errors.length > 0) {\r\n                                    return saleService._processError(resp.data.Errors[0], sale.OrderNumber);\r\n                                }\r\n                            }\r\n\r\n                            var deferred = $q.defer();\r\n                            deferred.resolve({\r\n                                Success: true\r\n                            });\r\n                            return deferred.promise;\r\n                        }, function (err) {\r\n                            console.log('error ', err);\r\n                            if (!!err && err.hasOwnProperty('headers')) {\r\n                                err = err.data;\r\n                            }\r\n                            if (!err) {\r\n                                err = {\r\n                                    message: gettextCatalog.getString(\"There is a problem connecting to the server.<br/> Please check your internet connection.\"),\r\n                                    status: -1\r\n                                };\r\n                            }\r\n                            var deferred = $q.defer();\r\n                            // call error processing\r\n                            deferred.reject(err);\r\n                            return deferred.promise;\r\n                        });\r\n\r\n                        if (configService.isSite) {\r\n                            pr = pr.then(function(res) {\r\n                                if (res && typeof res.status !== 'undefined' && res.status === -2) {\r\n                                    var info = angular.copy(saleInfo);\r\n                                    info.statusID = saleService.OfflineStatus.ErrorHistory;\r\n                                    var storeProvider = configService.isSite || deviceInfo.isSimulator ? jsStoreProvider : localDBProvider;\r\n                                    storeProvider.addOfflineSale(rawSale, info, configService.isSite ? res.message : undefined)\r\n                                }\r\n\r\n                                return res;\r\n                            })\r\n                        }\r\n\r\n                        return pr;\r\n                    });\r\n            } else {\r\n                saleInfo.saleObject = sale;\r\n                pr = pr\r\n                    .then(function () {\r\n                        return isRemoteProvider ? provider.processSale([sale]) : provider.addOfflineSale(rawSale, saleInfo);\r\n                    });\r\n\r\n                pr = pr.then(function (resp) {\r\n                    // add order state change log\r\n                    orderStatusService.trackOrder(sale.OrderID, configService.registrySalesID, {\r\n                        saleInfo: saleInfo,\r\n                        sale: sale,\r\n                        rawSale: rawSale,\r\n                        offlineStatusParked: saleService.OfflineStatus.Parked\r\n                    }).catch(function(err) {\r\n                        console.error('Failed to track order:', err);\r\n                    });\r\n                    if (configService.isOnline && callInBackGround === true) {\r\n                        return saleService.sendOfflineSales(100, true, sale, rawSale)\r\n                            .then(function () {\r\n                                var deferred = $q.defer();\r\n                                deferred.resolve({\r\n                                    Success: true\r\n                                });\r\n                                return deferred.promise;\r\n                            });\r\n                    } else if (configService.isSite) {\r\n                        if (!!resp && !!resp.data && !!resp.data.Errors && resp.data.Errors.length > 0) {\r\n                            return saleService._processError(resp.data.Errors[0], sale.OrderNumber);\r\n                        }\r\n\r\n                        var isSuccess = resp.data.Success && resp.data.Success.length > 0 || resp.data.Duplicate && resp.data.Duplicate.length > 0;\r\n                        \r\n                        if (!isSuccess) {\r\n                            var deferred = $q.defer();\r\n                            deferred.reject(resp);\r\n                            return deferred.promise;\r\n                        }\r\n\r\n                        if (!!resp.data && !!resp.data.NewRegistryID)\r\n                            configService.registrySalesID = resp.data.NewRegistryID;\r\n\r\n                        saleService.updateSaleOrderNumberForCurrentSale(resp, sale, rawSale);\r\n                        saleService.updateNextSequenceNumber();\r\n                    } else {\r\n                        if (!!resp && !!resp.data && !!resp.data.Errors && resp.data.Errors.length > 0) {\r\n                            return saleService._processError(resp.data.Errors[0], sale.OrderNumber);\r\n                        }\r\n                    }\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve({\r\n                        Success: true\r\n                    });\r\n                    return deferred.promise;\r\n                }, function (err) {\r\n                    console.log('error ', err);\r\n                    if (!!err && err.hasOwnProperty('headers')) {\r\n                        err = err.data;\r\n                    }\r\n                    if (!err) {\r\n                        err = {\r\n                            message: gettextCatalog.getString(\"There is a problem connecting to the server.<br/> Please check your internet connection.\"),\r\n                            status: -1\r\n                        };\r\n                    }\r\n                    var deferred = $q.defer();\r\n                    // call error processing\r\n                    deferred.reject(err);\r\n                    return deferred.promise;\r\n                });\r\n\r\n                if (configService.isSite) {\r\n                    pr = pr.then(function(res) {\r\n                        if (res && typeof res.status !== 'undefined' && res.status === -2) {\r\n                            var info = angular.copy(saleInfo);\r\n                            info.statusID = saleService.OfflineStatus.ErrorHistory;\r\n                            var storeProvider = configService.isSite || deviceInfo.isSimulator ? jsStoreProvider : localDBProvider;\r\n                            storeProvider.addOfflineSale(rawSale, info, configService.isSite ? res.message : undefined)\r\n                        }\r\n\r\n                        return res;\r\n                    })\r\n                }\r\n\r\n                return pr;\r\n            }\r\n        };\r\n\r\n        saleService._processError = function(errorData, orderNumber, returnBool = false) {\r\n            if (errorData) {\r\n                var error = errorData.Errors.length > 0 && errorData.Errors[0] && errorData.Errors[0]\r\n                    ? errorData.Errors[0] : null;\r\n                if (error && error.ErrorMessage && error.ErrorMessage.startsWith('Product not found')\r\n                    || error && error.IsPermanent) {\r\n                    var deferred = $q.defer();\r\n                    var message = error.ErrorMessage;\r\n                    if (error.ErrorMessage.startsWith('Product not found')) {\r\n                        message = gettextCatalog.getString('The sale {{orderNumber}} could not be saved because it contains a deleted product.', {orderNumber: orderNumber});\r\n                    }\r\n                   var err = {\r\n                        Success: false,\r\n                        message: message,\r\n                        status: -2\r\n                    };\r\n                    deferred.resolve(err);\r\n                    return returnBool ? err : deferred.promise;\r\n                }\r\n\r\n                var deferred = $q.defer();\r\n                deferred.reject(errorData);\r\n                return returnBool ? false : deferred.promise;\r\n            }\r\n\r\n            return true\r\n        }\r\n\r\n        saleService.saveSale = function (sale, rawSale, saleType, skipAnalyticData) {\r\n            var isNewSale = helperService.showNewCheckoutUI(rawSale);\r\n\r\n            sale = angular.extend(sale, {\r\n                payloadVersion: !isNewSale ? configService.payloadVersion : rawSale.PayloadVersion\r\n            });\r\n            sale.Barcode = rawSale.Barcode;\r\n            rawSale.OutletID = sale.OutletID;\r\n            rawSale.OutletName = sale.OutletName;\r\n            rawSale.RegistryID = sale.RegistryID;\r\n            rawSale.UserName = sale.UserName;\r\n            sale.RawSaleObject = JSON.stringify(angular.extend(rawSale, {\r\n                payloadVersion: !isNewSale ? configService.payloadVersion : rawSale.PayloadVersion\r\n            }));\r\n            sale.CalculatedAnalyticData = skipAnalyticData === true ? null : calculateAnalyticData(sale, rawSale);\r\n            sale.LocalDate = 'ldt_' + helperService.toDateWithCurrentTimeZone(new Date());\r\n            // move coupon info to sale level\r\n            if (rawSale.selectedCouponID) {\r\n                sale.selectedCoupon = rawSale.selectedCoupon;\r\n                sale.selectedCouponID = rawSale.selectedCouponID;\r\n                sale.selectedCouponDealID = rawSale.selectedCouponDealID;\r\n            } else {\r\n                delete sale.selectedCoupon;\r\n                delete sale.selectedCouponID;\r\n                delete sale.selectedCouponDealID;\r\n            }\r\n\r\n            if(rawSale && rawSale.IsParked === true){\r\n                sale.UpdateRegistrySequenceIfDuplicate = false;\r\n            }\r\n\r\n            var st = {\r\n                statusID: saleType,\r\n                status: constants.parkStatuses[saleType],\r\n                userName: configService.lastUserName,\r\n                registryID: configService.lastRegistryID,\r\n                registryName: configService.lastRegistry,\r\n                outletID: configService.lastOutletID\r\n            };\r\n\r\n            var prm = saleService.processSale(sale, rawSale, st, skipAnalyticData);\r\n            var allowAsync =\r\n                (!!sale.Payments &&\r\n                    sale.Payments.length > 0 &&\r\n                    sale.Payments[sale.Payments.length - 1].ShortName !== 'gift card') || // gift card is disable in offline mode\r\n                saleType === 'parked' || // parking is allowed in site offline mode\r\n                saleType === 'onaccount' ||\r\n                saleType === 'layby';\r\n\r\n            if (configService.isSite && allowAsync) {\r\n                // for site we need to check if request is failed and put it into queue to send async\r\n                prm = prm.then(\r\n                    function (res) {\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve(res);\r\n                        return deferred.promise;\r\n                    },\r\n                    function (err) {\r\n                        // push to async queue\r\n                        var info = $.extend(st, {\r\n                            applicationID: configService.applicationID,\r\n                            applicationKey: configService.applicationKey,\r\n                            tenantID: configService.tenantID\r\n                        });\r\n\r\n                        saleService.addSaleToQueue(sale, rawSale, info);\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve(err);\r\n                        return deferred.promise;\r\n                    });\r\n            }\r\n\r\n            return prm;\r\n        };\r\n\r\n        saleService.parkSale = function (sale, rawSale) {\r\n            return saleService.saveSale(sale, rawSale, saleService.OfflineStatus.Parked);\r\n        };\r\n\r\n        saleService.discardParkedSale = function (saleID) {\r\n            // Track discard of parked order (voided)\r\n            var trackPromise = orderStatusService.trackOrder(saleID, configService.registrySalesID, 'voided')\r\n                .catch(function(err) {\r\n                    console.error('Failed to track discard status:', err);\r\n                });\r\n            \r\n            if (!configService.isSite && !deviceInfo.isSimulator) {\r\n                return trackPromise.then(function() {\r\n                    return localDBProvider.removeSale(saleID, saleService.OfflineStatus.Parked);\r\n                }).then(function () {\r\n                    return remoteRequestProvider.discardParkedSale(saleID);\r\n                });\r\n            } else {\r\n                return trackPromise.then(function() {\r\n                    return remoteRequestProvider.discardParkedSale(saleID);\r\n                });\r\n            }\r\n        };\r\n\r\n        saleService.laybySale = function (sale, rawSale) {\r\n            rawSale.OrderType = 'LAYBY';\r\n            return saleService.saveSale(sale, rawSale, 'layby');\r\n        };\r\n\r\n        saleService.onaccountSale = function (sale, rawSale) {\r\n            rawSale.OrderType = 'ONACCOUNT';\r\n            // check customer credit limit if it's > 0\r\n            var customer = rawSale.customer;\r\n            if (!!customer) {\r\n                if (customer.IsOnCreditHold) {\r\n                    var deferred = $q.defer();\r\n                    var errorMessage = gettextCatalog.getString('Customer is on credit hold!');\r\n                    deferred.reject(errorMessage);\r\n                    return deferred.promise;\r\n                } else if (customer.CreditLimit > 0) {\r\n                    var amountToSave = helperService.DEARRound(rawSale.Balance, 2);\r\n                    var alreadyUsed = helperService.DEARRound(customer.Account, 2);\r\n                    var limit = helperService.DEARRound(customer.CreditLimit, 2);\r\n                    if ((amountToSave + alreadyUsed) > limit) {\r\n                        var deferred = $q.defer();\r\n                        var errorMessage = gettextCatalog.getString('Credit limit exceeded!') +\r\n                            '<br/>' +\r\n                            gettextCatalog.getString('Customer outstanding balance including this order is ') +\r\n                            $filter('currency')(amountToSave + alreadyUsed) +\r\n                            ', ' +\r\n                            gettextCatalog.getString('whereas the customer credit limit is ') + $filter('currency')(limit);\r\n                        deferred.reject(errorMessage);\r\n                        return deferred.promise;\r\n                    }\r\n                }\r\n\r\n            }\r\n\r\n            return saleService.saveSale(sale, rawSale, 'onaccount');\r\n        };\r\n\r\n        saleService.removeParkedSale = function (saleID, statusID) {\r\n            var provider = localDBProvider;\r\n            var pr = provider.removeSale(saleID, statusID);\r\n            return pr;\r\n        };\r\n\r\n        saleService.loadOfflineSales = function (saleID, statusID, exeptStatusID) {\r\n            var deferred = $q.defer();\r\n            if (configService.isSite === false && !deviceInfo.isSimulator) {\r\n                var provider = localDBProvider;\r\n                var pr = provider.loadOfflineSales(configService.lastDearPosName, saleID, statusID, exeptStatusID)\r\n                    .then(function (data) {\r\n                        var arr = [];\r\n                        $.each(data, function (idx, el) {\r\n                            el.sale = JSON.parse(el.Packed);\r\n\r\n                            el.sale = convertFromOld(el.sale);\r\n                            el.info = JSON.parse(el.InfoPacked);\r\n                            el.Status = el.StatusID;\r\n                            delete el.Packed;\r\n                            delete el.InfoPacked;\r\n                            arr.push(el);\r\n                        });\r\n\r\n                        deferred = $q.defer();\r\n                        deferred.resolve(arr);\r\n                        return deferred.promise;\r\n                    });\r\n                return pr;\r\n            } else {\r\n                deferred.resolve([]);\r\n                return deferred.promise;\r\n            }\r\n\r\n        };\r\n\r\n\r\n        saleService.loadOnlineParkedSales = function (page, limit, outletID, filters) {\r\n            var provider = remoteRequestProvider;\r\n            var pr = provider.loadParkedSales(page, limit, outletID, filters)\r\n                .catch(function (err) {\r\n                    if (err.status !== -1 || !configService.isSite)\r\n                        throw err;\r\n                    else {\r\n                        var provider = jsStoreProvider;\r\n                        return provider.loadParkedSales(page, limit, outletID, filters)\r\n                            .then(function (res) {\r\n                                var deferred = $q.defer();\r\n                                deferred.resolve(res.data);\r\n                                return deferred.promise;\r\n                            });\r\n                    }\r\n                });\r\n\r\n            return pr;\r\n        };\r\n\r\n        saleService.loadSalesHistory = function (page, limit, filters, sorting, searchText) {\r\n            var provider = remoteRequestProvider;\r\n            var pr = provider.loadSalesHistory(page, limit, filters, sorting, searchText).then(function (res) {\r\n                var deferred = $q.defer();\r\n\r\n                $.each(res.data.Orders, function (idx, el) {\r\n                    el.OrderDate = moment.utc(el.OrderDateUTC).local().format('YYYY-MM-DD[T]HH:mm:ss');\r\n                    if(!el.DeliveryTasks) {\r\n                        el.DeliveryTasks = gettextCatalog.getString('N/A');\r\n                        el.HideDelivery = true;\r\n                    } else {\r\n                        var lst = el.DeliveryTasks.split(', ');\r\n                        var l = Enumerable.from(lst)\r\n                        .select()\r\n                        .distinct()\r\n                        .orderBy(function(v){ return Number(v.substr(3));})\r\n                        .toArray().join(', ');\r\n                        el.DeliveryTasks = l;\r\n                    }\r\n\r\n                    if(el.ExtendedFlags) {\r\n                        try{\r\n                            var flags = JSON.parse(el.ExtendedFlags);\r\n                            if(flags && flags.SEE === 'true') {\r\n                                el.ReceiptWasEmailed = true;\r\n                            }\r\n                        } catch(e) {\r\n\r\n                        }\r\n                    }\r\n                });\r\n\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n\r\n        };\r\n\r\n        saleService.loadPosUsers = function () {\r\n            var provider = remoteRequestProvider;\r\n            var pr = provider.loadPosUsers().then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        saleService.isSendInProgress = false;\r\n        saleService.sendOfflineSales = function (count, forceStatusID, sale, rawSale) {\r\n            if (saleService.isSendInProgress) {\r\n                console.log('send already in progress');\r\n                return Promise.resolve(false);\r\n            }\r\n\r\n            saleService.isSendInProgress = true;\r\n            try {\r\n                var pr = localDBProvider.loadOfflineSales(null, null, null, forceStatusID === true ? null : saleService.OfflineStatus.Error, count)\r\n                .then(function (data) {\r\n                    var sales = [];\r\n                    var ofs = [];\r\n                    $.each(data, function (idx, el) {\r\n                        let offlineSale = JSON.parse(el.InfoPacked).saleObject;\r\n                        sales.push(offlineSale);\r\n                        let date = new Date();\r\n                        try {\r\n                            date = moment(offlineSale.Date).toDate()\r\n                        } catch (e) {\r\n                            console.error(e);\r\n                        }\r\n                        ofs.push({\r\n                            createdDate: date\r\n                        });\r\n                    });\r\n\r\n                helperService.checkNSetIndicator(ofs);\r\n\r\n                    if (sales.length > 0) {\r\n                        return remoteRequestProvider.processSale(sales)\r\n                            .then(function (resp) {\r\n\r\n                                var promises = [];\r\n\r\n                                if (!resp) {\r\n                                    var deferred = $q.defer();\r\n                                    deferred.reject('Connection error');\r\n                                    promises.push(deferred.promise);\r\n                                } else {\r\n                                    if (resp.data.Duplicate && resp.data.Duplicate.length > 0) {\r\n                                        $.each(resp.data.Duplicate, function (idx, el) {\r\n                                            var ppr = localDBProvider.removeSale(el.OrderID, null, el.OperationID);\r\n                                            promises.push(ppr);\r\n                                        });\r\n                                    }\r\n\r\n                                    if (resp.data.Success && resp.data.Success.length > 0) {\r\n                                        $.each(resp.data.Success, function (idx, el) {\r\n                                            var ppr = localDBProvider.removeSale(el.OrderID, null, el.OperationID);\r\n                                            promises.push(ppr);\r\n                                        });\r\n\r\n                                        saleService.needUpdateSequenceNumber = true;\r\n                                    }\r\n\r\n                                    saleService.updateSaleOrderNumberForCurrentSale(resp, sale, rawSale);\r\n\r\n                                    if (resp.data.Errors && resp.data.Errors.length > 0) {\r\n                                        $.each(resp.data.Errors, function (idx, el) {\r\n                                            var orderNumber = sales.find(x => x.OrderID === el.OrderID).OrderNumber;\r\n                                            var ignoreError = saleService._processError(el, orderNumber, true);\r\n                                            if (ignoreError && !ignoreError.Success && ignoreError.message) {\r\n                                                errorService.showError(ignoreError.message);\r\n                                            }\r\n                                            var ppr = !ignoreError\r\n                                                ? localDBProvider.makeErrorOrder(el.OrderID, null, el.OperationID)\r\n                                                : localDBProvider.makeErrorHistoryOrder(el.OrderID, ignoreError.message);\r\n                                            promises.push(ppr);\r\n                                        });\r\n                                    }\r\n                                }\r\n\r\n                                return Promise.all(promises);\r\n                            })\r\n                            .then(function (resp) {\r\n                                return localDBProvider.loadOfflineSalesCount(null, null, null, forceStatusID === true ? null : saleService.OfflineStatus.Error)\r\n                                    .then(function (cnt) {\r\n                                        // cnt - count of rest sales that are not sent yet.\r\n                                        if (cnt == 0) {\r\n\r\n                                            return localDBProvider.clearCoupons()\r\n                                                .then(function () {\r\n                                                    return saleService.getPosDiscounts();\r\n                                                })\r\n                                                .then(function () {\r\n                                                    if (saleService.needUpdateSequenceNumber) {\r\n                                                        return saleService.updateNextSequenceNumber()\r\n                                                            .then(function () {\r\n                                                                saleService.needUpdateSequenceNumber = false;\r\n                                                                return false;\r\n                                                            });\r\n                                                    }\r\n                                                });\r\n                                        } else {\r\n                                            var deferred = $q.defer();\r\n                                            deferred.resolve(null);\r\n                                            return deferred.promise;\r\n                                        }\r\n                                    });\r\n                            });\r\n                    } else {\r\n                        saleService.isSendInProgress = false;\r\n                        return false;\r\n                    }\r\n                })\r\n                .finally(() => {\r\n                    saleService.isSendInProgress = false;\r\n                });\r\n            }\r\n            catch (e) {\r\n                saleService.isSendInProgress = false;\r\n                throw e;\r\n            }\r\n\r\n            return pr.then(function () {\r\n                return localDBProvider.loadOfflineSales(null, null, null, saleService.OfflineStatus.Error)\r\n                    .then(function (resp) {\r\n                        if (resp.length > 0 && configService.isOnline === true) {\r\n                            return true;\r\n                        } else {\r\n                            return false;\r\n                        }\r\n                    });\r\n            });\r\n        };\r\n\r\n\r\n        saleService.addCallback = function () {\r\n            if (!(configService.isSite || deviceInfo.isSimulator))\r\n                configService.addCallbackFunction(saleService.sendOfflineSales);\r\n        };\r\n\r\n        /*\r\n         * The function below will work correctly if updateBasePriceWithDiscount was called just before\r\n         */\r\n        saleService.updatePriceWithTax = function (currentSale, isTaxInclusive) {\r\n            var isStandaloneReturn = currentSale.standAloneReturn === true;\r\n            var isStandaloneExchange = currentSale.standAloneExchange === true;\r\n\r\n            $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                var sign = el.Price < 0 || isStandaloneReturn || isStandaloneExchange ? -1 : 1;\r\n\r\n                if (sign > 0) {\r\n                    el.PriceWithTax = isTaxInclusive ? el.BasePriceWithDiscount :\r\n                        el.BasePriceWithDiscount + saleService.calculateTax(el.Taxes, el.BasePriceWithDiscount);\r\n                }\r\n            });\r\n        };\r\n\r\n        saleService.updateBasePriceWithDiscount = function (currentSale) {\r\n\r\n            var isStandaloneReturn = currentSale.standAloneReturn === true;\r\n            var isStandaloneExchange = currentSale.standAloneExchange === true;\r\n            var copyCurrentSale = currentSale;\r\n\r\n            $.each(copyCurrentSale.CheckoutItems, function (idx, el) {\r\n                var sign = el.Price < 0 || isStandaloneReturn || isStandaloneExchange ? -1 : 1;\r\n                var price = el.BasePrice - el.itemDiscount * sign;\r\n\r\n                if (sign > 0) {\r\n\r\n                    el.BasePriceWithDiscount = el.BasePrice - el.itemDiscount * sign;\r\n\r\n                    // now apply global discount. skip this for exchange/return because we can't return twice\r\n                    // if (copyCurrentSale.discountValue > 0 && copyCurrentSale.ReturnID == null) {\r\n                    //     var discountCoeff = sign > 0 ? copyCurrentSale.Total / (copyCurrentSale.BaseTotal) : el.DiscountCoeff;\r\n                    //\r\n                    //     el.BasePriceWithDiscount = that.DEARRound((el.BasePrice - el.itemDiscount * sign) * discountCoeff, 4);\r\n                    // }\r\n                }\r\n            });\r\n        };\r\n\r\n        /*\r\n         * This function converts object wich used in app for display current sale and contains additional fileds, to model wich will be send to server.\r\n         * @param {} currentSale\r\n         * @param {} status\r\n         * @returns {}\r\n         BasePrice - initial price without any discounts\r\n         Price - price of item reduced by item discount. If no item discount exists, then Price == BasePrise\r\n         PriceWithDiscount - fully reduced price with item and total discount\r\n         DiscountCoeff - reduce coefficient applied by global discount\r\n         BasePriceWithDiscount - fully reduced price with item and total discount\r\n         */\r\n        saleService.convertCurrentSaleForAPI = function (currentSale, status, isContinue, savedTaxInclusive, newGuidValue, isPartiallyPaid, isPaymentStage) {\r\n            var isNewSale = helperService.showNewCheckoutUI(currentSale);\r\n\r\n            if (isNewSale)\r\n                return convertToAPI(currentSale, status, isContinue, newGuidValue, isPartiallyPaid);\r\n\r\n            var isStandaloneReturn = currentSale.standAloneReturn === true;\r\n            var isStandaloneExchange = currentSale.standAloneExchange === true;\r\n            var isParked = currentSale.IsParked === true;\r\n\r\n            var copyCurrentSale = currentSale; //angular.copy(currentSale);\r\n\r\n            // this is to leave a chance to process older payments in payments history if new one will process by different manner\r\n            copyCurrentSale.conversionVersion = \"2\";\r\n\r\n            var that = helperService;\r\n            var doNotConsolidate = false;\r\n            var taxPrecision = (configService.taxCalculationMethod == 'Row Total' ? 2 : 4);\r\n\r\n            if (copyCurrentSale.OrderType === 'ONACCOUNT' && status === 'CLOSED') {\r\n                if (isPartiallyPaid) {\r\n                    status = \"ONACCOUNT\";\r\n                } else {\r\n                    status = 'ONACCOUNT_CLOSED';\r\n                }\r\n            }\r\n\r\n            if (copyCurrentSale.OrderType === 'LAYBY' && status === 'CLOSED') {\r\n                if (isPartiallyPaid) {\r\n                    status = \"LAYBY\";\r\n                } else {\r\n                    status = 'LAYBY_CLOSED';\r\n                }\r\n            }\r\n\r\n            var paymentClose = status == \"CLOSED\" || (status.indexOf(\"_CLOSED\") + 7) == status.length;\r\n\r\n            switch (status) {\r\n                case \"OPEN\":\r\n                case \"PARKED\":\r\n                case \"CLOSED\":\r\n                case \"SAVED\":\r\n                    doNotConsolidate = false;\r\n                    break;\r\n                case \"LAYBY\":\r\n                case \"LAYBY_CLOSED\":\r\n                case \"ONACCOUNT\":\r\n                case \"ONACCOUNT_CLOSED\":\r\n                    doNotConsolidate = true;\r\n                    break;\r\n            }\r\n\r\n            if (isStandaloneReturn || isStandaloneExchange)\r\n                doNotConsolidate = true;\r\n\r\n            var taxInclusive = configService.taxInclucive === \"True\";\r\n            if (savedTaxInclusive != null && savedTaxInclusive != undefined) {\r\n                taxInclusive = savedTaxInclusive;\r\n            }\r\n\r\n            var currentSaleObject = {\r\n                OrderID: copyCurrentSale.ID,\r\n                OperationID: !copyCurrentSale.OperationID ? uuid2.newguid() : copyCurrentSale.OperationID,\r\n                Date: moment.utc(),\r\n                LaybyDate: copyCurrentSale.LaybyDate,\r\n                RegistryID: isParked ? copyCurrentSale.RegistryID : configService.lastRegistryID,\r\n                Currency: configService.currency,\r\n                TaxInclusive: taxInclusive,\r\n                DoNotConsolidate: doNotConsolidate,\r\n                FinancialStatus: isStandaloneExchange ? 'RETURN' : status,\r\n                SalesRepresentative: copyCurrentSale.salesRepresentative ? copyCurrentSale.salesRepresentative.Name : \"\",\r\n                UserName: isParked ? sale.UserName || '' : configService.userName,\r\n                CustomerID: copyCurrentSale.customer.ID,\r\n                CustomerName: copyCurrentSale.customer.Name,\r\n                Lines: [],\r\n                Payments: [],\r\n                Surcharges: [],\r\n                OrderNumber: isParked ? copyCurrentSale.OrderNumber : (configService.registryPrefix ? configService.registryPrefix : \"\") +\r\n                    (copyCurrentSale.ClearOrderNumber ? copyCurrentSale.ClearOrderNumber : '000000') +\r\n                    (configService.registrySuffix ? configService.registrySuffix : \"\"),\r\n                ClearOrderNumber: copyCurrentSale.ClearOrderNumber ? copyCurrentSale.ClearOrderNumber : '000000',\r\n                CustomerNote: copyCurrentSale.comment,\r\n                Total: Number(copyCurrentSale.Total),\r\n                RegistryCloseID: configService.registrySalesID,\r\n                SequenceGeneration: 'client',\r\n                standaloneRefund: isStandaloneReturn,\r\n                standaloneExchange: isStandaloneExchange,\r\n                ParentOrderID: copyCurrentSale.parentOrderID,\r\n                LoyaltyUpdate: copyCurrentSale.LoyaltyUpdate,\r\n                UpdateReceiptView: false,\r\n                UpdateRegistrySequenceIfDuplicate: !isParked,\r\n                OutletName: configService.lastOutlet,\r\n                OutletID: configService.lastECSMappingOutletID\r\n            };\r\n\r\n            if (isStandaloneReturn || standaloneExchange) {\r\n                currentSaleObject.OrderNumber = copyCurrentSale.ClearOrderNumber;\r\n                currentSaleObject.ClearOrderNumber = copyCurrentSale.ClearOrderNumber;\r\n                currentSaleObject.AdjustRefunds = copyCurrentSale.AdjustRefunds;\r\n                var line = {\r\n                    ProductID: null,\r\n                    ProductName: isStandaloneReturn ? 'Standalone Refund' : 'Standalone Exchange',\r\n                    SKU: isStandaloneReturn ? 'Standalone Refund' : 'Standalone Exchange',\r\n                    Quantity: 1,\r\n                    Price: 0,\r\n                    TotalPerLine: 0,\r\n                    Tax: 0,\r\n                    TaxRuleID: null,\r\n                    CalculateTax: false,\r\n                    ImageID: null,\r\n                    ProductType: null\r\n                };\r\n\r\n                currentSaleObject.Lines.push(line);\r\n            }\r\n\r\n            // var taxesAmount = {};\r\n            // var taxesAmountTotal = 0;\r\n            $.each(copyCurrentSale.CheckoutItems, function (idx, el) {\r\n                var sign = el.Price < 0 || isStandaloneReturn || isStandaloneExchange ? -1 : 1;\r\n                //// for refunds and exchanges we need to take real price, because  then we will calculate discrepancy between\r\n                /// Real product price  - applied deal(on product level) and BasePriceWithDiscount(including ORDER level discount)\r\n                // it seems the bug: when tax is exclusive, PriceWithTax contains not discounted price but with tax for nondiscounted price\r\n                // it's invalid as tax is calculated after discount is applied\r\n                //var price = (sign > 0 ? el.BasePrice : el.PriceWithTax) - el.itemDiscount;\r\n\r\n                if (typeof (el.sign) !== \"undefined\")\r\n                    sign = el.sign;\r\n\r\n                var price = el.BasePrice - el.itemDiscount + ((sign > 0 || taxInclusive === true) ? 0 : that.DEARRound(saleService.calculateTax(el.Taxes, el.BasePrice - el.itemDiscount), 4));\r\n\r\n                if (sign > 0) {\r\n                    el.PriceWithDiscount = el.BasePrice - el.itemDiscount * sign;\r\n\r\n                    if (sign > 0)\r\n                        el.DiscountCoeff = 1;\r\n\r\n                    el.BasePriceWithDiscount = el.BasePrice - el.itemDiscount * sign;\r\n\r\n                    // now apply global discount. skip this for exchange/return because we can't return twice\r\n                    if (copyCurrentSale.discountValue > 0 && copyCurrentSale.ReturnID == null) {\r\n\r\n                        var surchargeTotal = saleService.surchargeSum(currentSale) + saleService.surchargeTaxSum(currentSale);\r\n\r\n                        var discountCoeff = sign > 0 ? (copyCurrentSale.Total - surchargeTotal) / (copyCurrentSale.BaseTotal) : el.DiscountCoeff;\r\n\r\n                        el.BasePriceWithDiscount = that.DEARRound((el.BasePrice - el.itemDiscount * sign) * discountCoeff, 4);\r\n\r\n                        el.PriceWithDiscount = that.DEARRound(price * discountCoeff, 4);\r\n                        el.DiscountCoeff = discountCoeff; // this we will use when refund items.\r\n\r\n                    }\r\n                }\r\n\r\n                el.Price = that.DEARRound(price, 4);\r\n                el.Amount = that.DEARRound(price * el.Count, 4);\r\n\r\n                if (price >= 0 && (isStandaloneReturn || isStandaloneExchange) !== true) {\r\n\r\n                    // the line below reduces tax multiple times. This tax shouldn't depend on total discount\r\n                    //el.Tax = that.DEARRound(el.Tax * copyCurrentSale.taxReduceCoeff, taxPrecision);\r\n\r\n                    if (copyCurrentSale.ReturnID == null) {\r\n                        var line = {\r\n                            ProductID: el.SaleType === 'customsale' ? null : el.ProductID,\r\n                            Quantity: el.Count,\r\n                            Price: that.DEARRound(price, 4),\r\n                            TotalPerLine: that.DEARRound(price * el.Count, 2),\r\n                            Tax: that.DEARRound(el.Tax, taxPrecision),\r\n                            TaxRuleID: el.TaxRuleID,\r\n                            CalculateTax: false,\r\n                            ImageID: el.ImageID,\r\n                            ProductType: el.ProductType,\r\n                            SerialNumber: el.SerialNumber\r\n                        };\r\n                        if (el.SaleType === 'customsale') {\r\n                            line.ProductName = el.Name;\r\n                        }\r\n\r\n                        if (!!el.GiftCardCode)\r\n                            line.GiftCardCode = el.GiftCardCode;\r\n\r\n                        if (!!el.GiftCardExpirationDate)\r\n                            line.GiftCardExpirationDate = helperService.toDateFromDatepickerParameter(el.GiftCardExpirationDate);\r\n\r\n                        currentSaleObject.Lines.push(line);\r\n                    }\r\n                    el.itemAppliedDiscount = el.itemDiscount;\r\n                }\r\n            });\r\n\r\n            if (!!currentSale.Surcharges && currentSale.Surcharges.length > 0) {\r\n\r\n                $.each(currentSale.Surcharges, function (idx, surcharge) {\r\n\r\n                    var line = {\r\n                        Total: surcharge.CalculatedValue,\r\n                        Tax: surcharge.Tax,\r\n                        Name: surcharge.Name,\r\n                        Type: surcharge.Type,\r\n                        Value: surcharge.Value,\r\n                        SurchargeID: surcharge.SurchargeID,\r\n                        TaxRuleID: surcharge.TaxRuleID,\r\n                        PaymentRealAmount: surcharge.PaymentRealAmount\r\n                    };\r\n\r\n                    if (surcharge.PaymentID)\r\n                        line.PaymentID = surcharge.PaymentID;\r\n\r\n                    if (surcharge.PaymentShortName)\r\n                        line.PaymentShortName = surcharge.PaymentShortName;\r\n\r\n                    currentSaleObject.Surcharges.push(line);\r\n                });\r\n            }\r\n\r\n            /*If sale has discount, add discount to payment items*/\r\n            if (copyCurrentSale.discountValue > 0) {\r\n                var discountPaymentLine = {\r\n                    ID: uuid2.newguid(),\r\n                    PaymentProcessorID: null,\r\n                    Amount: copyCurrentSale.discountValue,\r\n                    Date: moment.utc(),\r\n                    ShortName: \"Discount\"\r\n                };\r\n                currentSaleObject.Payments.push(discountPaymentLine);\r\n            }\r\n\r\n            $.each(copyCurrentSale.Payments, function (idx, el) {\r\n                if (el.Amount >= 0 && copyCurrentSale.ReturnID == null) {\r\n                    var p = {\r\n                        ID: el.ID,\r\n                        PaymentProcessorID: el.PaymentProcessorID,\r\n                        Amount: el.Amount,\r\n                        Date: el.Date,\r\n                        ShortName: el.ShortName,\r\n                        Loyalty: (copyCurrentSale.customer.ID != null ? el.Loyalty : 0),\r\n                        ServerTransactionID: el.ServerTransactionID, // makes sense for card pay\r\n                        ClientTransactionID: el.ClientTransactionID, // makes sense for card pay\r\n                        Reference: el.Reference\r\n                    };\r\n\r\n                    if (!!el.GiftCardID) {\r\n                        p.GiftCardID = el.GiftCardID;\r\n                    }\r\n\r\n                    if (!!el.Surcharge) {\r\n                        p.Surcharge = el.Surcharge;\r\n                    }\r\n\r\n                    currentSaleObject.Payments.push(p);\r\n                }\r\n            });\r\n\r\n            /*If sale has rounding add it too payment(chech if other payments exist is for adding rounding to sale or refund)*/\r\n            if (copyCurrentSale.CashRounding && copyCurrentSale.CashRounding !== 0 &&\r\n                currentSaleObject.Payments.length > 0 && copyCurrentSale.ReturnID == null) {\r\n                var roundingPaymentLine = {\r\n                    ID: uuid2.newguid(),\r\n                    PaymentProcessorID: null,\r\n                    Amount: helperService.DEARRound(copyCurrentSale.CashRounding, 2),\r\n                    Date: moment.utc(),\r\n                    ShortName: \"Rounding\"\r\n                };\r\n                currentSaleObject.Payments.push(roundingPaymentLine);\r\n            }\r\n\r\n            /*If sale has return id then its refund*/\r\n            if (copyCurrentSale.ReturnID !== null || isStandaloneReturn || isStandaloneExchange) {\r\n                //  currentSale.ID = currentSaleObject.OrderID;\r\n                //  currentSaleObject.RefundForOrderID = currentSaleObject.OrderID;\r\n                currentSaleObject.RefundForOrderID = copyCurrentSale.ID;\r\n                currentSaleObject.FinancialStatus = 'RETURN';\r\n                currentSaleObject.OperationID = uuid2.newguid();\r\n\r\n                if (isContinue !== true) {\r\n                    // orderid below will be used as posorderid as well\r\n                    currentSaleObject.OrderID = !!copyCurrentSale.newRefundOrder ? copyCurrentSale.newRefundOrder : uuid2.newguid();\r\n                } else {\r\n                    currentSaleObject.OrderID = copyCurrentSale.PosOrderID; // in the case or refund continue set order id as pos order id\r\n                    if (isStandaloneReturn || isStandaloneExchange)\r\n                        currentSaleObject.RefundForOrderID = copyCurrentSale.PosOrderID;\r\n                }\r\n\r\n                var existRefund = !!copyCurrentSale.Refunds && copyCurrentSale.Refunds.length > 0 ?\r\n                    copyCurrentSale.Refunds[0].RefundID : null;\r\n\r\n                var refundID = (isContinue === true || isStandaloneReturn === true || isStandaloneExchange === true || isPaymentStage === true) && !!existRefund ? existRefund : (!!newGuidValue ? newGuidValue : uuid2.newguid());\r\n\r\n                refund = {\r\n                    RefundID: refundID,\r\n                    Date: moment.utc(),\r\n                    Note: copyCurrentSale.Note,\r\n                    Lines: [],\r\n                    Payments: [],\r\n                    Surcharges: []\r\n                };\r\n\r\n                if (isStandaloneReturn || isStandaloneExchange) {\r\n                    refund.Note = \"Refund without receipt.\";\r\n                }\r\n\r\n                // this is to not duplicate refunds on next payment refund operation\r\n                if (isContinue !== true || !copyCurrentSale.Refunds || copyCurrentSale.Refunds.length == 0) {\r\n                    copyCurrentSale.Refunds = [{\r\n                        RefundID: refund.RefundID\r\n                    }]; // fake record\r\n                }\r\n\r\n                // taxesAmount = {};\r\n                // taxesAmountTotal = 0;\r\n\r\n                $.each(copyCurrentSale.CheckoutItems, function (idx, el) {\r\n\r\n                    var line = {\r\n                        ProductID: el.SaleType === 'customsale' ? null : el.ProductID,\r\n                        Quantity: el.return || isStandaloneReturn || isStandaloneExchange ? Math.abs(el.Count) : el.Count * -1,\r\n                        Price: Math.abs(el.PriceWithDiscount),\r\n                        TotalPerLine: that.DEARRound(Math.abs(el.PriceWithDiscount * el.Count), 2),\r\n                        //Price: Math.abs(el.Price),\r\n                        //TotalPerLine: Math.abs(el.Price * el.Count),\r\n                        Tax: Math.abs(that.DEARRound(el.Tax, taxPrecision)),\r\n                        TaxRuleID: el.TaxRuleID,\r\n                        CalculateTax: false,\r\n                        ImageID: el.ImageID,\r\n                        ProductType: el.ProductType,\r\n                        SerialNumber: el.SerialNumber,\r\n                        OverriddenPrice: Math.abs(el.Price),\r\n                        MissingInInvoice: el.MissingInInvoice\r\n                    };\r\n\r\n\r\n                    if (!!el.GiftCardCode)\r\n                        line.GiftCardCode = el.GiftCardCode;\r\n\r\n                    if (!!el.GiftCardExpirationDate)\r\n                        line.GiftCardExpirationDate = helperService.toDateFromDatepickerParameter(el.GiftCardExpirationDate);\r\n\r\n                    if (el.SaleType === 'customsale') {\r\n                        line.ProductName = el.Name;\r\n                    }\r\n\r\n                    refund.Lines.push(line);\r\n                });\r\n\r\n\r\n                if (!!copyCurrentSale.Surcharges && copyCurrentSale.Surcharges.length > 0) {\r\n\r\n                    $.each(currentSale.Surcharges, function (idx, surcharge) {\r\n                        var line = {\r\n                            Total: -1 * surcharge.CalculatedValue,\r\n                            Tax: -1 * surcharge.Tax,\r\n                            Name: surcharge.Name,\r\n                            Type: surcharge.Type,\r\n                            Value: surcharge.Value,\r\n                            SurchargeID: surcharge.SurchargeID,\r\n                            TaxRuleID: surcharge.TaxRuleID,\r\n                            PaymentRealAmount: surcharge.PaymentRealAmount,\r\n                            ServerTransactionID: surcharge.ServerTransactionID,\r\n                            ClientTransactionID: surcharge.ClientTransactionID,\r\n                            SaleServerTransactionID: surcharge.SaleServerTransactionID\r\n                        };\r\n\r\n                        if (surcharge.PaymentID)\r\n                            line.PaymentID = surcharge.PaymentID;\r\n\r\n                        if (surcharge.PaymentShortName)\r\n                            line.PaymentShortName = surcharge.PaymentShortName;\r\n\r\n                        refund.Surcharges.push(line);\r\n                    });\r\n\r\n                    currentSaleObject.Surcharges = []; // as we are refund/exchange, remove surcharges from the sale root\r\n                }\r\n\r\n                // payments in refund\r\n                var pms = [].concat(copyCurrentSale.Payments, currentSaleObject.Payments);\r\n\r\n                $.each(pms, function (idx, el) {\r\n                    //$.each(copyCurrentSale.Payments, function (idx, el) {\r\n                    var payment = {\r\n                        ID: el.ID,\r\n                        PaymentProcessorID: el.PaymentProcessorID,\r\n                        Amount: el.Amount < 0 || el.ShortName === 'Discount' ? Math.abs(el.Amount) : Math.abs(el.Amount) * -1,\r\n                        Date: el.Date,\r\n                        ShortName: el.ShortName,\r\n                        Loyalty: Math.abs(el.Loyalty),\r\n                        ServerTransactionID: el.ServerTransactionID, // makes sense for card pay\r\n                        ClientTransactionID: el.ClientTransactionID, // makes sense for card pay\r\n                        SaleServerTransactionID: el.SaleServerTransactionID,\r\n                        Reference: el.Reference\r\n                    };\r\n\r\n                    if (!!el.Surcharge) {\r\n                        payment.Surcharge = angular.copy(el.Surcharge);\r\n                        payment.Surcharge.CalculatedValue *= -1;\r\n                        payment.Surcharge.CalculatedValueWithTax *= -1;\r\n                        payment.Surcharge.Tax *= -1;\r\n                    }\r\n\r\n                    refund.Payments.push(payment);\r\n                });\r\n\r\n                currentSaleObject.Payments = currentSaleObject.Payments.filter(function (el) {\r\n                    return el.ShortName !== 'Discount';\r\n                });\r\n\r\n                /*If sale has rounding add it too payment(chech if other payments exist is for adding rounding to sale or refund)*/\r\n                var paymentsSum = 0;\r\n                $.each(copyCurrentSale.Payments, function (idx, el) {\r\n                    paymentsSum += Number(el.Amount);\r\n                });\r\n\r\n                if (copyCurrentSale.CashRounding && copyCurrentSale.CashRounding !== 0 && refund.Payments.length > 0) {\r\n                    var roundingPaymentLine = {\r\n                        ID: uuid2.newguid(),\r\n                        PaymentProcessorID: null,\r\n                        Amount: paymentsSum > 0 ? (helperService.DEARRound(copyCurrentSale.CashRounding, 2) * -1) : helperService.DEARRound(copyCurrentSale.CashRounding, 2),\r\n                        Date: moment.utc(),\r\n                        ShortName: \"Rounding\"\r\n                    };\r\n\r\n                    //if (isStandaloneReturn === true) {\r\n                    //    roundingPaymentLine.Amount = helperService.DEARRound(paymentsSum - copyCurrentSale.Total, 2);\r\n                    //}\r\n\r\n                    refund.Payments.push(roundingPaymentLine);\r\n                }\r\n\r\n                currentSaleObject.Refunds = [refund];\r\n            }\r\n\r\n            //$.each(copyCurrentSale.CheckoutItems, function (idx, el) {\r\n            //    var price = el.BasePrice - el.itemAppliedDiscount;\r\n            //    el.PriceWithDiscount = el.BasePrice - el.itemAppliedDiscount;\r\n            //    el.DiscountCoeff = 1;\r\n\r\n            //    if (copyCurrentSale.discountValue > 0) {\r\n            //        var discountCoeff = copyCurrentSale.Total / (copyCurrentSale.BaseTotal);\r\n            //        //el.BasePriceWithDiscount = that.DEARRound(el.BasePrice * discountCoeff, 4);\r\n            //        el.PriceWithDiscount = that.DEARRound(price * discountCoeff, 4);\r\n            //    }\r\n\r\n            //    if (price >= 0) {\r\n            //        el.Price = that.DEARRound(price, 4);\r\n            //        el.Amount = that.DEARRound(price * el.Count, 4);\r\n            //        el.Tax = that.DEARRound(el.Tax * copyCurrentSale.taxReduceCoeff, taxPrecision);\r\n            //    }\r\n            //});\r\n\r\n            return currentSaleObject;\r\n        };\r\n\r\n        /**\r\n         * This function calculates tax by sum, simple implementation\r\n         * @param {} taxObject\r\n         * @param {} total\r\n         * @returns {}\r\n         */\r\n        saleService.calculateTax = function (taxObject, total, isTaxInclusive) {\r\n            var tax = 0;\r\n            var taxPrecision = configService.taxCalculationMethod == 'Row Total' ? 2 : 4;\r\n            var taxTypeInclusive = isTaxInclusive === true ? true :\r\n                isTaxInclusive === false ? false :\r\n                configService.taxInclucive === 'True' ? true :\r\n                false;\r\n\r\n            if (taxTypeInclusive && parseFloat(taxObject.effectivePercentInclusive) > 0) {\r\n                var percent = 0;\r\n                percent = parseFloat(taxObject.effectivePercentInclusive);\r\n                tax = total * percent / 100;\r\n            } else if (parseFloat(taxObject.effectivePercentExclusive) > 0) {\r\n                var percent = 0;\r\n                percent = parseFloat(taxObject.effectivePercentExclusive);\r\n                tax = total * percent / 100;\r\n            }\r\n            tax = helperService.DEARRound(tax, taxPrecision);\r\n            return tax;\r\n        };\r\n\r\n        saleService.getTaxPercent = function (taxObject, isTaxInclusive) {\r\n            const taxTypeInclusive = isTaxInclusive === true ? true :\r\n                isTaxInclusive === false ? false :\r\n                configService.taxInclucive === 'True' ? true :\r\n                false;\r\n            if (taxTypeInclusive && parseFloat(taxObject.effectivePercentInclusive) > 0) {\r\n                return  parseFloat(taxObject.effectivePercentInclusive);\r\n            } else if (parseFloat(taxObject.effectivePercentExclusive) > 0) {\r\n                return parseFloat(taxObject.effectivePercentExclusive)\r\n            } else {\r\n                return 0;\r\n            }\r\n        }\r\n\r\n\r\n        /**\r\n         * This function calculates sub total sum of sale (without disount and tax(if it is excluded))\r\n         * @param {} arr\r\n         * @returns {}\r\n         */\r\n        saleService.subTotalSum = function (arr, sale) {\r\n            var sum = 0;\r\n            var standAloneReturn = !!sale && sale.standAloneReturn === true;\r\n\r\n            if (arr)\r\n                $.each(arr, function (idx, el) {\r\n                    var isNegative = el.Price < 0;\r\n                    if (standAloneReturn) {\r\n                        //isNegative = false;\r\n                        el.sign = -1;\r\n                        el.itemDiscount = 0;\r\n                        el.BasePriceWithDiscount = el.BasePrice;\r\n                    }\r\n\r\n                    if (isNegative === false) {\r\n                        if (el.itemDiscount == null || el.itemDiscount == undefined)\r\n                            el.itemDiscount = 0;\r\n\r\n                        if (el.Count > 0) {\r\n                            sum += helperService.DEARRound(el.Amount, 2);\r\n                        }\r\n                    } else {\r\n                        //                    el.itemDiscount = 0;\r\n                        //                     sum += el.Count * (el.BasePrice + el.itemDiscount);\r\n                        ///  (el.sign && el.BasePriceWithDiscount < 0? el.sign : 1)) this is needed in case if product has negative BasePriceWithDiscount\r\n                        /// AND el.sign = -1; this happens when we making refund AND item was alredy refunded. so, value added to sum, should be negative\r\n                        sum += helperService.DEARRound(-el.Count * (el.BasePriceWithDiscount * (el.sign && el.BasePriceWithDiscount < 0 ? el.sign : 1)), 2);\r\n                    }\r\n                });\r\n\r\n            return sum;\r\n        };\r\n\r\n        //saleService.subTotalSumForReceipt = function (arr) {\r\n        //    var sum = 0;\r\n        //    if (arr)\r\n        //        $.each(arr, function (idx, el) {\r\n        //            if (el.Price >= 0) {\r\n        //                if (el.itemDiscount == null || el.itemDiscount == undefined)\r\n        //                    el.itemDiscount = 0;\r\n\r\n        //                if (el.Count > 0) {\r\n        //                    sum += el.Count * (el.BasePrice - el.itemDiscount);\r\n        //                }\r\n        //            }\r\n        //            else {\r\n        //                sum += el.Count * el.Price;\r\n        //            }\r\n        //        });\r\n\r\n        //    return sum;\r\n        //}\r\n\r\n        /**\r\n         * This function calculates total product line type discount\r\n         * @param {} arr\r\n         * @returns {}\r\n         */\r\n        saleService.totalItemsDiscount = function (arr) {\r\n            var sum = 0;\r\n            if (arr)\r\n                $.each(arr, function (idx, el) {\r\n                    if (el.Count > 0) {\r\n                        sum += el.Count * (el.itemDiscount);\r\n                    }\r\n                });\r\n            return sum;\r\n        };\r\n\r\n        /**\r\n         * This function calculates total tax for sale as sum of each product tax\r\n         * @param {} item\r\n         * @param {} arr\r\n         * @returns {}\r\n         */\r\n        saleService.calculateTotalTax = function (item, arr, isTaxInclusive) {\r\n            var taxPrecision = configService.taxCalculationMethod == 'Row Total' ? 2 : 4;\r\n            var tax = 0;\r\n            if (item)\r\n                $.each(arr, function (idx, el) {\r\n                    if (el.Count > 0) {\r\n                        var isNegative = el.Price < 0;\r\n                        var taxObject = el.Taxes;\r\n                        if (item.standAloneReturn === true) {\r\n                            isNegative = false;\r\n                            el.itemDiscount = 0;\r\n                            el.BasePriceWithDiscount = el.BasePrice;\r\n                        }\r\n\r\n                        if (isNegative === false)\r\n                            tax += helperService.DEARRound(saleService.calculateTax(taxObject, el.Count * (el.BasePrice - el.itemDiscount), isTaxInclusive), 2); // if use 4 this can differ from other calculations\r\n                        //                        tax += helperService.DEARRound(saleService.calculateTax(taxObject, el.Count * (el.BasePrice - el.itemDiscount), isTaxInclusive), taxPrecision);\r\n                        else\r\n                            tax += helperService.DEARRound(saleService.calculateTax(taxObject, -el.Count * el.BasePriceWithDiscount, isTaxInclusive), 2);\r\n                        //                        tax += helperService.DEARRound(saleService.calculateTax(taxObject, -el.Count * el.BasePriceWithDiscount, isTaxInclusive), taxPrecision);\r\n                    }\r\n                });\r\n            item.CalculatedTax = helperService.DEARRound(tax, taxPrecision);\r\n        };\r\n\r\n\r\n        saleService.isDiscountInvalid = false;\r\n        /**\r\n         * This function calculates total sum of sale\r\n         * @param {} item\r\n         * @returns {}\r\n         * excludeCalculatedSurcharges == true if not count surcharges that are already calculated into total sum\r\n         */\r\n        saleService.totalSum = function (item, isTaxInclusive, excludeCalculatedSurcharges) {\r\n            if (helperService.showNewCheckoutUI(item)) return 0;\r\n\r\n            saleService.isDiscountInvalid = false;\r\n\r\n            //        var posTaxInclucive = configService.taxInclucive === \"True\";\r\n            var posTaxInclucive = isTaxInclusive === true ? true :\r\n                isTaxInclusive === false ? false :\r\n                configService.taxInclucive === 'True' ? true :\r\n                false;\r\n\r\n\r\n            if (item) {\r\n                var taxPrecision = configService.taxCalculationMethod == 'Row Total' ? 2 : 4;\r\n                var discount = item.Discount;\r\n                saleService.calculateTotalTax(item, item.CheckoutItems, posTaxInclucive);\r\n\r\n                //if tax is include, need to remove tax part from sub total, to calculate discount coeff\r\n                var total = saleService.subTotalSum(item.CheckoutItems, item);\r\n\r\n                var subSum = posTaxInclucive ? (total - item.CalculatedTax) : total;\r\n                // coeff is not required because all calculations does nothing\r\n                // and in exchange case subSum can be 0, as well as CalculatedTax\r\n                // var coeff = item.CalculatedTax / subSum;\r\n\r\n                //sum with tax\r\n                item.BaseTotal = total + (posTaxInclucive ? 0 : item.CalculatedTax);\r\n\r\n                if (item.isDiscountPercent) {\r\n                    discount = helperService.DEARRound(total / 100 * item.Discount, 2);\r\n                } else {\r\n                    discount = helperService.DEARRound(item.Discount, 2);\r\n                }\r\n\r\n                if (total <= 0)\r\n                    discount = 0;\r\n\r\n                item.discountValue = discount;\r\n                item.DiscountTax = helperService.DEARRound(item.CalculatedTax / total * discount * -1, taxPrecision);\r\n                if (!item.DiscountTax)\r\n                    item.DiscountTax = 0;\r\n                // calculateDiscountTax(item);\r\n\r\n                if (posTaxInclucive) {\r\n                    item.taxReduceCoeff = total;\r\n                    //if tax is include, this is algoritm of tax calculation with discount\r\n\r\n                    // the line below is nonsence, because is equal to innitial CalculatedTax\r\n                    // item.CalculatedTax = total / (1 + coeff) * coeff;\r\n\r\n                    // surcharge tax\r\n                    var stax = excludeCalculatedSurcharges === true || (!!item.Surcharges && item.Surcharges.length > 0) ?\r\n                        saleService.surchargeTaxSum(item) :\r\n                        (!!item.SurchargeToRefund && total < 0) ? -item.SurchargeTaxToRefund : 0;\r\n\r\n                    item.CalculatedTax = helperService.DEARRound(item.CalculatedTax + item.DiscountTax + stax, taxPrecision);\r\n\r\n                    if (!item.taxReduceCoeff)\r\n                        item.taxReduceCoeff = 1;\r\n                    else\r\n                        item.taxReduceCoeff = (total - discount) / item.taxReduceCoeff;\r\n\r\n                    if (!item.CalculatedTax) {\r\n                        item.taxReduceCoeff = 1;\r\n                        item.CalculatedTax = 0;\r\n                    }\r\n\r\n                    // return total sum to pay\r\n                    if (!!discount && (helperService.DEARRound(total, 2) - discount) < 0)\r\n                        saleService.isDiscountInvalid = true;\r\n\r\n                    var ssum = excludeCalculatedSurcharges === true || (!!item.Surcharges && item.Surcharges.length > 0) ?\r\n                        saleService.surchargeSum(item) :\r\n                        (!!item.SurchargeToRefund && total < 0) ? -item.SurchargeToRefund : 0;\r\n\r\n                    return helperService.DEARRound(total, 2) - discount + helperService.DEARRound(ssum, 2);\r\n                } else {\r\n                    //if (!coeff) {\r\n                    //    coeff = 0;\r\n                    //}\r\n                    item.taxReduceCoeff = total + item.CalculatedTax;\r\n\r\n                    //if tax is exclude, this is algoritm of tax calculation with discount\r\n                    // the line below is nonsence because is equal to initial CalculatedTax\r\n                    // item.CalculatedTax = total * coeff;\r\n                    var stax = excludeCalculatedSurcharges === true || (!!item.Surcharges && item.Surcharges.length > 0) ?\r\n                        saleService.surchargeTaxSum(item) :\r\n                        (!!item.SurchargeToRefund && total < 0) ? -item.SurchargeTaxToRefund : 0;\r\n\r\n                    item.CalculatedTax = helperService.DEARRound(item.CalculatedTax + item.DiscountTax + stax, taxPrecision);\r\n\r\n                    if (!item.taxReduceCoeff)\r\n                        item.taxReduceCoeff = 1;\r\n                    else\r\n                        item.taxReduceCoeff = (total - discount + item.CalculatedTax) / item.taxReduceCoeff;\r\n\r\n                    if (!item.taxReduceCoeff) {\r\n                        item.taxReduceCoeff = 1;\r\n                    }\r\n\r\n                    // return total sum to pay\r\n                    if (!!discount && (helperService.DEARRound(total, 2) - discount + helperService.DEARRound(item.CalculatedTax, 2)) < 0)\r\n                        saleService.isDiscountInvalid = true;\r\n\r\n                    var ssum = excludeCalculatedSurcharges === true || (!!item.Surcharges && item.Surcharges.length > 0) ?\r\n                        saleService.surchargeSum(item) :\r\n                        (!!item.SurchargeToRefund && total < 0) ? -item.SurchargeToRefund : 0;\r\n\r\n                    //if (ssum < 0)\r\n                    //    ssum -= stax;\r\n\r\n                    return helperService.DEARRound(total, 2) - discount +\r\n                        helperService.DEARRound(item.CalculatedTax, 2) +\r\n                        helperService.DEARRound(ssum, 2);\r\n                }\r\n            }\r\n            return 0;\r\n        };\r\n\r\n        /**\r\n         * This function calculates total sum for products with taxes\r\n         * @param {} arr\r\n         * @returns {}\r\n         */\r\n        saleService.totalSumWithTax = function (arr) {\r\n            var value = 0;\r\n            $.each(arr, function (idx, el) {\r\n                if (el.Count > 0) {\r\n                    value += el.PriceWithTax * el.Count;\r\n                }\r\n            });\r\n            return value;\r\n        };\r\n\r\n        /**\r\n         * Items total EXCLUDING card surcharges and their tax.\r\n         */\r\n        saleService.itemsTotalExSurcharge = function (sale) {\r\n            if (!helperService.showNewCheckoutUI(sale)) {\r\n                return helperService.DEARRound(saleService.totalSum(sale, sale.TaxInclusive, true), 2);\r\n            }\r\n\r\n            var itemsTotal = helperService.DEARRound((sale.Total || 0), 2);\r\n            var surcharge = 0, surchargeTax = 0;\r\n            var payments = (sale && sale.Payments) || [];\r\n            for (var i = 0; i < payments.length; i++) {\r\n                var pSurcharge = payments[i] && (payments[i].InitialSurcharge || payments[i].Surcharge);\r\n                if (pSurcharge) {\r\n                    surcharge    += (pSurcharge.CalculatedValue || 0);\r\n                    surchargeTax += (pSurcharge.Tax || 0);\r\n                }\r\n            }\r\n\r\n            var itemsOnly = helperService.DEARRound(itemsTotal - surcharge - (sale.TaxInclusive ? 0 : surchargeTax), 2);\r\n            return Math.abs(itemsOnly) < 0.005 ? 0 : itemsOnly;\r\n        };\r\n\r\n        /**\r\n         * Sum of payments EXCLUDING surcharge (and its tax), using existing per-payment metadata.\r\n         */\r\n        function paymentsSumExSurcharge(payments) {\r\n            payments = payments || [];\r\n            var sum = 0;\r\n            for (var i = 0; i < payments.length; i++) {\r\n                sum += saleService.getAmountWithoutSurcharge(payments[i]);\r\n            }\r\n            return sum;\r\n        }\r\n\r\n        /**\r\n         * Single source of truth for Remaining/Due:\r\n         *   Remaining = Items total (no surcharge) – Payments (no surcharge)\r\n         */\r\n        saleService.calcRemainingDue = function (sale) {\r\n            var items = saleService.itemsTotalExSurcharge(sale);\r\n            var paidEx = helperService.DEARRound(paymentsSumExSurcharge(sale.Payments || []), 2);\r\n            var remaining = helperService.DEARRound(items - paidEx, 2);\r\n            return Math.abs(remaining) < 0.005 ? 0 : remaining;\r\n        };\r\n\r\n        /**\r\n         * This function calculates amount of loyalty points wich customer earns with current sale\r\n         * @param {} arr\r\n         * @returns {}\r\n         */\r\n        saleService.totalLoyaltyPoints = function (arr) {\r\n            var value = 0;\r\n            $.each(arr, function (idx, el) {\r\n                if (el.Count > 0) {\r\n                    value += el.LoyaltyPoints;\r\n                }\r\n            });\r\n            return value;\r\n        };\r\n\r\n        saleService.totalPaymentsLoyaltyPoints = function (sale) {\r\n            var value = 0;\r\n            $.each(sale.Payments, function (idx, el) {\r\n                if (!!el.Loyalty && !!el.Amount)\r\n                    value += el.Loyalty;\r\n            });\r\n            return value;\r\n        };\r\n\r\n        /**\r\n         * This function calculates amount of loyalty points wich will be removed from customer couse of refund(can be return part of earned loyalty points)\r\n         * @param {} earnLoyalty\r\n         * @param {} item\r\n         * @param {} Amount\r\n         * @returns {}\r\n         */\r\n        // saleService.calculateLoaylty = function (earnLoyalty, item, Amount) {\r\n        //     var loyalty = 0;\r\n        //     if (earnLoyalty === true && configService.enableLoyalty === true /*&& $scope.currentSale.customer.EnableLoyaltyPoints === true*/) {\r\n        //         var totalLoyalty = item.LoyaltyPointsTotal;\r\n        //         var totalAmount = item.TotalSumWithTax;\r\n        //         var discount = helperService.DEARRound(item.Discount, 2);\r\n        //         var loyaltyRatio = totalLoyalty * (totalAmount - discount) / totalAmount;\r\n        //         loyalty = helperService.DEARRound(loyaltyRatio * Amount / (totalAmount - discount), 2);\r\n        //         item.LoyaltyPoints += loyalty;\r\n        //     }\r\n\r\n        //     item.lastLoyaltyUpdateAmount = loyalty;\r\n        //     return loyalty;\r\n        // }\r\n\r\n        /*\r\n         Calculates proposed loyalty based on loyalty ratio for each\r\n         item in the checkout. So checkout items should contain loyalty ratio\r\n         result sign automatically depends on the total payments sign\r\n         sale - current sale with correct checkout items\r\n        */\r\n        saleService.calculateLoyaltyEx = function (sale, Amount) {\r\n            if (configService.enableLoyalty !== true) return 0;\r\n\r\n            var checkoutItems = sale.CheckoutItems;\r\n\r\n            // calculate all payments sum that client should really pay\r\n            // for current sale state Sum can be <0 if system should return\r\n            // money to customer\r\n            // also each product can hase its own layalty ratio\r\n            // it means that even if there is no money to return/pay == 0,\r\n            // loylaty change can be != 0\r\n            var total = Amount;\r\n\r\n            // now calculate ratio of each product in checkout\r\n            // positive amount - earn loyalty\r\n            // negative amount - return loyalty\r\n\r\n            var sumRefund = 0;\r\n            var sumSale = 0;\r\n\r\n            // get total sum for new items\r\n            // do the same for refund items\r\n            $.each(checkoutItems, function (idx, el) {\r\n                if (el.Amount > 0) sumSale += el.Amount;\r\n                else if (el.Amount < 0) sumRefund += el.Amount;\r\n            });\r\n\r\n            // set items layout ratio per single unit (this is why it's divided by Count)\r\n            $.each(checkoutItems, function (idx, el) {\r\n                if (el.Amount > 0 && sumSale != 0)\r\n                    el.LoyaltyRatio = Math.abs(el.LoyaltyPointsEarning * el.Amount / el.Count / sumSale); // absolute loyalty ratio\r\n                else if (el.Amount < 0 && sumRefund != 0)\r\n                    el.LoyaltyRatio = Math.abs(el.LoyaltyPointsEarning * el.Amount / el.Count / sumRefund); // absolute loyalty ratio\r\n                else el.LoyaltyRatio = 0;\r\n            });\r\n\r\n            var currentLoyaltySum = 0;\r\n\r\n            // current refund|pay amount\r\n            var separatePaySum = 0;\r\n            var separateReturnSum = 0;\r\n            $.each(checkoutItems, function (idx, el) {\r\n                if (el.Amount > 0) separatePaySum += Math.abs(el.Amount);\r\n                else if (el.Amount < 0) {\r\n                    separateReturnSum += Math.abs(el.Amount);\r\n                }\r\n            });\r\n\r\n            // if total sum >0 it means we have direct sale or exchange with extra pay\r\n            // so total sum to use in loyalty is: full refund + total\r\n            if (total >= 0) {\r\n\r\n                // calc loyalty earning\r\n                $.each(checkoutItems, function (idx, el) {\r\n                    if (el.Amount > 0) // earning\r\n                        currentLoyaltySum += el.LoyaltyRatio * el.Count * (separateReturnSum + total);\r\n                    else if (el.Amount < 0) // returning /// separateReturnSum should be negative otherwise we will receive loyalty for exchanged amount twice\r\n                        currentLoyaltySum -= el.LoyaltyRatio * el.Count * separateReturnSum;\r\n                });\r\n            } else {\r\n                // in this case we refund difference\r\n                // calc loyalty earning\r\n                $.each(checkoutItems, function (idx, el) {\r\n                    if (el.Amount > 0) // earning\r\n                        currentLoyaltySum += el.LoyaltyRatio * el.Count * separatePaySum;\r\n                    else if (el.Amount < 0) // returning\r\n                        currentLoyaltySum -= Math.abs(el.LoyaltyRatio * el.Count * (separatePaySum + Math.abs(total)));\r\n                });\r\n            }\r\n\r\n            return currentLoyaltySum;\r\n        };\r\n\r\n\r\n        saleService.totalLoyaltyRefunds = function (sale) {\r\n            var value = 0;\r\n\r\n            if (sale.Refunds && sale.Refunds[0].Payments) {\r\n                $.each(sale.Refunds[0].Payments, function (idx, el) {\r\n                    if (el.ShortName === 'loyalty' && !!el.Amount)\r\n                        value += el.Amount;\r\n                });\r\n            }\r\n\r\n            return value;\r\n        };\r\n\r\n        /*\r\n          This function converts local sale object to receipt model\r\n          @param {} currentSale\r\n          @param {} receiptSaleModel\r\n          @param {} sumToPayLeft\r\n          @param {} currency\r\n          @returns {}\r\n         */\r\n        saleService.updateReceipt = function (currentSale, receiptSaleModel, sumToPayLeft, currency, taxInclusive) {\r\n            var isStandaloneReturn = currentSale.standAloneReturn === true;\r\n            var isStandaloneExchange = currentSale.standAloneExchange === true;\r\n            var isRefund = !!currentSale.Refunds && currentSale.Refunds.length > 0;\r\n            var total = saleService.totalSum(currentSale, taxInclusive) < 0;\r\n\r\n            if (currentSale.customer.ID == null) {\r\n                receiptSaleModel.Customer = [];\r\n            } else {\r\n\r\n                if (currentSale.returnLoyaltyPoints === false) {\r\n\r\n                    receiptSaleModel.Customer = [{\r\n                        CustomerName: currentSale.customer.Name,\r\n                        CustomerLoyaltyPoints: helperService.applyCurrency(currentSale.CustomerLoyaltyPoints, currency),\r\n                        SaleLoyaltyPoints: 0,\r\n                        CustomerLoyaltyPointsUsed: 0,\r\n                        TotalLoyaltyPoints: helperService.applyCurrency(currentSale.CustomerLoyaltyPoints, currency)\r\n                    }];\r\n\r\n                    // in the case of external LL\r\n                    if (currentSale.Customer.LLEmail && loyaltyService.loyaltyEnabled) {\r\n                        if (currentSale.Customer.LLCustomerID != '0' && !!currentSale.Customer.LLCustomerID) {\r\n                            receiptSaleModel.Customer.CustomerLoyaltyPoints = currentSale.Customer.LLInitialBalance;\r\n                            receiptSaleModel.Customer.TotalLoyaltyPoints = currentSale.Customer.LLInitialBalance;\r\n                            receiptSaleModel.Customer.LLDiscountCode = currentSale.Customer.LLDiscountCode;\r\n                        } else {\r\n                            receiptSaleModel.Customer.CustomerLoyaltyPoints = \"\";\r\n                            receiptSaleModel.Customer.TotalLoyaltyPoints = \"\";\r\n                            receiptSaleModel.Customer.LLDiscountCode = \"\";\r\n                        }\r\n                    }\r\n                } else {\r\n\r\n                    var lpSum = currentSale.LoyaltyPoints;\r\n                    if (isRefund)\r\n                        lpSum = saleService.totalPaymentsLoyaltyPoints(currentSale);\r\n\r\n                    var usedL = isRefund ? -saleService.totalLoyaltyRefunds(currentSale) : currentSale.CustomerLoyaltyPointsUsed;\r\n                    var calcCustomerLoyaltyPoints = currentSale.CustomerLoyaltyPoints; //isRefund ? (currentSale.CustomerLoyaltyPoints - currentSale.LoyaltyPointsTotal) : currentSale.CustomerLoyaltyPoints;\r\n                    receiptSaleModel.Customer = [{\r\n                        CustomerName: currentSale.customer.Name,\r\n                        CustomerLoyaltyPoints: helperService.applyCurrency(calcCustomerLoyaltyPoints, currency),\r\n                        SaleLoyaltyPoints: helperService.applyCurrency(lpSum, currency),\r\n                        CustomerLoyaltyPointsUsed: helperService.applyCurrency(usedL, currency),\r\n                        TotalLoyaltyPoints: helperService.applyCurrency(calcCustomerLoyaltyPoints - usedL + lpSum, currency)\r\n                    }];\r\n\r\n                    // in the case of external LL\r\n                    if (currentSale.customer && !currentSale.Customer) {\r\n                        currentSale.Customer = currentSale.customer;\r\n                    }\r\n\r\n                    if (currentSale.Customer.LLEmail && loyaltyService.loyaltyEnabled) {\r\n                        if (currentSale.Customer.LLCustomerID != '0' && !!currentSale.Customer.LLCustomerID) {\r\n                            receiptSaleModel.Customer.CustomerLoyaltyPoints = currentSale.Customer.LLInitialBalance;\r\n                            receiptSaleModel.Customer.TotalLoyaltyPoints = currentSale.Customer.LLInitialBalance;\r\n                            receiptSaleModel.Customer.LLDiscountCode = currentSale.Customer.LLDiscountCode;\r\n                        } else {\r\n                            receiptSaleModel.Customer.CustomerLoyaltyPoints = \"\";\r\n                            receiptSaleModel.Customer.TotalLoyaltyPoints = \"\";\r\n                            receiptSaleModel.Customer.LLDiscountCode = \"\";\r\n                        }\r\n                    }\r\n\r\n                }\r\n\r\n                // append email and phones\r\n                if (!!currentSale.customer.Contacts && currentSale.customer.Contacts.length > 0) {\r\n                    var cnts = currentSale.customer.Contacts.filter(function (c) {\r\n                        return c.Default === true;\r\n                    });\r\n                    if (cnts.length === 0)\r\n                        cnts = currentSale.customer.Contacts;\r\n                    var cnt = cnts[0];\r\n                    receiptSaleModel.Customer[0].Email = cnt.Email;\r\n                    receiptSaleModel.Customer[0].Phone = cnt.Phone;\r\n                    receiptSaleModel.Customer[0].MobilePhone = cnt.MobilePhone;\r\n                }\r\n\r\n                // append addresses\r\n                // Check if sale address available else add customer address\r\n                if (sale.CustomerShippingAddressLine1) {\r\n                    receiptSaleModel.Customer[0].City = sale.CustomerShippingCity;\r\n                    receiptSaleModel.Customer[0].Country = sale.CustomerShippingCountry;\r\n                    receiptSaleModel.Customer[0].Line1 = sale.CustomerShippingAddressLine1;\r\n                    receiptSaleModel.Customer[0].Line2 = sale.CustomerShippingAddressLine2;\r\n                    receiptSaleModel.Customer[0].Postcode = sale.CustomerShippingZip;\r\n                    receiptSaleModel.Customer[0].State = sale.CustomerShippingProvince;\r\n                } else if (!!currentSale.customer.Addresses && currentSale.customer.Addresses.length > 0) {\r\n                    var caddrs = Enumerable.from(currentSale.customer.Addresses).where(function (x) {\r\n                            return x.Type === AddressType.Shipping\r\n                        })\r\n                        .orderByDescending(function (x) {\r\n                            return x.DefaultForType;\r\n                        }).toArray();\r\n                    if (caddrs.length === 0)\r\n                        caddrs = currentSale.customer.Addresses;\r\n                    var caddr = caddrs[0];\r\n\r\n                    if (!!caddr.City || !!caddr.Country || !!caddr.Line1 || !!caddr.Line2 || !!caddr.Postcode || !!caddr.State) {\r\n\r\n                        receiptSaleModel.Customer[0].City = caddr.City;\r\n                        receiptSaleModel.Customer[0].Country = caddr.Country;\r\n                        receiptSaleModel.Customer[0].Line1 = caddr.Line1;\r\n                        receiptSaleModel.Customer[0].Line2 = caddr.Line2;\r\n                        receiptSaleModel.Customer[0].Postcode = caddr.Postcode;\r\n                        receiptSaleModel.Customer[0].State = caddr.State;\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (typeof currentSale.salesRepresentative === \"undefined\" ||\r\n                currentSale.salesRepresentative === null ||\r\n                currentSale.salesRepresentative.ID == null) {\r\n                receiptSaleModel.SalesRepresentative = [];\r\n            } else {\r\n                receiptSaleModel.SalesRepresentative = [{\r\n                    SalesRepresentativeName: currentSale.salesRepresentative.Name\r\n                }];\r\n            }\r\n\r\n\r\n            var receiptNumber =\r\n                currentSale.OrderNumber;\r\n\r\n            receiptSaleModel.ReceiptNumber = receiptNumber;\r\n            receiptSaleModel.Barcode = currentSale.Barcode;\r\n\r\n            receiptSaleModel.CheckoutProductCount = currentSale.CheckoutItems.length;\r\n            receiptSaleModel.Date = currentSale.Date;\r\n            receiptSaleModel.Time = '';\r\n            receiptSaleModel.OutletName = configService.lastOutlet;\r\n            receiptSaleModel.RegistryName = configService.lastRegistry;\r\n            receiptSaleModel.SubTotal = helperService.applyCurrency(saleService.subTotalSum(currentSale.CheckoutItems, currentSale), currency);\r\n            receiptSaleModel.Discount = helperService.applyCurrency(currentSale.discountValue, currency);\r\n            receiptSaleModel.Total = helperService.applyCurrency(saleService.totalSum(currentSale, taxInclusive), currency);\r\n            receiptSaleModel.DiscountPercentage = `${helperService.DEARRound((sale.DiscountValue / sale.SubTotal) * 100, 2).toFixed(2)}%`;\r\n            //            receiptSaleModel.Balance = helperService.applyCurrency(sumToPayLeft, currency);\r\n            receiptSaleModel.Balance = helperService.applyCurrency(currentSale.Balance, currency);\r\n\r\n            var totalTax = currentSale.CalculatedTax;\r\n            //totalTax += saleService.surchargeTaxSum(currentSale, taxInclusive);\r\n\r\n            receiptSaleModel.CalculatedTax = helperService.applyCurrency(totalTax, currency);\r\n\r\n            receiptSaleModel.Change = helperService.applyCurrency(helperService.DEARRound(currentSale.CashChangeAmount, 6), currency);\r\n            if (currentSale.comment) {\r\n                receiptSaleModel.Notes = [{\r\n                    SalesNote: currentSale.comment\r\n                }];\r\n            } else {\r\n                receiptSaleModel.Notes = [];\r\n            }\r\n\r\n\r\n            receiptSaleModel.CheckoutProducts = [];\r\n            $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                var isNegative = el.BasePrice < 0;\r\n                var price = 0;\r\n                var amount = 0;\r\n\r\n                if (isNegative == false) {\r\n                    if (el.BasePrice < el.BasePriceWithDiscount || el.BasePrice === 0) {\r\n                        price = el.BasePriceWithDiscount;\r\n                        amount = helperService.DEARRound(el.BasePriceWithDiscount * el.Count, 4);\r\n                    } else {\r\n                        price = el.BasePrice;\r\n                        amount = helperService.DEARRound(el.BasePrice * el.Count, 4);\r\n                    }\r\n                } else {\r\n                    if (isStandaloneReturn !== true && isStandaloneExchange !== true) {\r\n                        price = -el.BasePriceWithDiscount;\r\n                        amount = -el.Count * el.BasePriceWithDiscount;\r\n                    } else {\r\n                        price = el.BasePriceWithDiscount;\r\n                        amount = el.Count * el.BasePriceWithDiscount;\r\n                    }\r\n                }\r\n\r\n                price = helperService.applyCurrency(price, currency);\r\n                amount = helperService.applyCurrency(amount, currency);\r\n\r\n                receiptSaleModel.CheckoutProducts.push({\r\n                    ProductCount: el.Count,\r\n                    ProductName: el.Name,\r\n                    ProductAmount: el.BasePrice < 0 && el.Amount == 0 ? \"-\" + amount : amount,\r\n                    ProductPrice: el.BasePrice < 0 && el.Price == 0 ? \"-\" + price : price,\r\n                    ProductSku: el.Sku,\r\n                    ProductID: el.ProductID,\r\n                    ProductBarCode: el.BarCode,\r\n                    ProductDiscount: el.Price >= 0 ? (el.itemDiscount > 0 ? \"-\" + helperService.applyCurrency(el.itemDiscount * el.Count, currency) :\r\n                        el.itemAppliedDiscount && el.itemAppliedDiscount > 0 ? \"-\" + helperService.applyCurrency(el.itemAppliedDiscount * el.Count, currency) : null) : null,\r\n                    ProductShortDescription: el.ProductShortDescription,\r\n                    ProductSerialNumber: el.SerialNumber,\r\n                    AdditionalAttribute1: el.CF1,\r\n                    AdditionalAttribute2: el.CF2,\r\n                    AdditionalAttribute3: el.CF3,\r\n                    AdditionalAttribute4: el.CF4,\r\n                    AdditionalAttribute5: el.CF5,\r\n                    AdditionalAttribute6: el.CF6,\r\n                    AdditionalAttribute7: el.CF7,\r\n                    AdditionalAttribute8: el.CF8,\r\n                    AdditionalAttribute9: el.CF9,\r\n                    AdditionalAttribute10: el.CF10,\r\n                    ProductDiscountPercentage : (el.ItemDiscount && el.ItemDiscount > 0 && price > 0) ? `${helperService.DEARRound((el.ItemDiscount / price) * 100, 2).toFixed(2)}%` : null\r\n                });\r\n            });\r\n\r\n            receiptSaleModel.Payments = [];\r\n\r\n            //Rounding displays as path of payments and doesnt have special place in receipt template\r\n            if (currentSale.CashRounding && currentSale.CashRounding !== 0) {\r\n                var rounding = {\r\n                    PaymentTypeName: gettextCatalog.getString(\"Payment (cash rounding)\"),\r\n                    PaymentAmount: helperService.applyCurrency(currentSale.CashRounding, currency)\r\n                };\r\n                receiptSaleModel.Payments.push(rounding);\r\n            }\r\n\r\n            var total = 0;\r\n            $.each(currentSale.Payments, function (idx, el) {\r\n                if (!!el.Amount) { // skip zero payments. Zero payments are required for SIM to correctly process roundings\r\n                    total += el.Amount;\r\n                    receiptSaleModel.Payments.push({\r\n                        PaymentTypeName: el.PaymentTypeName,\r\n                        PaymentAmount: helperService.applyCurrency(el.Amount, currency),\r\n                        PaymentDate: !!el.Date ? helperService.getFormatedDate(el.Date) : ''\r\n                    });\r\n                }\r\n            });\r\n\r\n            receiptSaleModel.Surcharges = [];\r\n            if (!!currentSale.Surcharges && currentSale.Surcharges.length > 0) {\r\n                receiptSaleModel.Surcharges.push({\r\n                    Surcharge: helperService.applyCurrency(helperService.DEARRound(saleService.surchargeSum(currentSale), 2), currency)\r\n                });\r\n            }\r\n\r\n            receiptSaleModel.Received = helperService.applyCurrency(helperService.DEARRound(currentSale.CashChangeAmount + total, 4), currency);\r\n\r\n            barcodeService.clearBarcodes();\r\n\r\n            if ($(\"canvas.barcode\").is(\"#code93\")) {\r\n                barcodeService.initBarcode(\"code93\", \"code93\", receiptSaleModel.Barcode.toUpperCase(), receiptSaleModel.Barcode.toUpperCase(), \"includetext includecheck\");\r\n            }\r\n            if ($(\"canvas.barcode\").is(\"#code128\")) {\r\n                barcodeService.initBarcode(\"code128\", \"code128\", receiptSaleModel.Barcode, receiptSaleModel.Barcode, \"includetext\");\r\n            }\r\n\r\n            /* /generating barcodes for reciept */\r\n\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('receipt.template', $('.receipt-template'));\r\n\r\n                /* generating barcodes for product */\r\n                $(\"canvas.product_barcode\").each(function (i, elem) {\r\n                    var type = $(this).attr(\"type\");\r\n                    var id = $(this).attr(\"id\");\r\n                    var text = $(this).attr(\"b_value\");\r\n\r\n                    barcodeService.initBarcode(id, type, text, text, \"includetext\");\r\n                });\r\n                /* /generating barcodes for product */\r\n\r\n                /* Draw generated barcodes */\r\n                barcodeService.renderBarcodes();\r\n            });\r\n\r\n            // common approach for terminal receipts all of them will be printed one by one and then main receipt\r\n            receiptSaleModel.VantivTerminalReceipts = [];\r\n            receiptSaleModel.TyroTerminalReceipts = [];\r\n            receiptSaleModel.LinklyTerminalReceipts = [];\r\n\r\n            saleService.fillTransactionData(currentSale, receiptSaleModel, currency);\r\n        };\r\n\r\n        saleService.fillTransactionData = function (currentSale, receiptSaleModel, currency) {\r\n            var cfg = configService.getCardPaymentSettings();\r\n\r\n            var printMerchantCopy = !!cfg && cfg.printTriPOSMerchantReceipt === true;\r\n\r\n            // check if vaniv data exists\r\n            angular.forEach(currentSale.Payments, function (p) {\r\n                if (!!p.TransactionMetaData) {\r\n\r\n                    switch (cardPayService.detectProvider(p.TransactionMetaData)) {\r\n                        case 'triPOSReaderProvider':\r\n                            var v = receiptService.fillVantivTransactionData(p.TransactionMetaData, currency);\r\n                            if (!!v) {\r\n                                receiptSaleModel.VantivTerminalReceipts.push(v);\r\n                                if (printMerchantCopy === true)\r\n                                    // create one more element instead of push the same twice to prevent angular error\r\n                                    receiptSaleModel.VantivTerminalReceipts.push(\r\n                                        receiptService.fillVantivTransactionData(p.TransactionMetaData, currency));\r\n                            }\r\n                            break;\r\n\r\n                        case 'tyroReaderProvider':\r\n                            var v = saleService.fillTyroTransactionData(p.TransactionMetaData, true);\r\n                            if (!!v) {\r\n                                receiptSaleModel.TyroTerminalReceipts.push(v);\r\n                            }\r\n                            var v = saleService.fillTyroTransactionData(p.TransactionMetaData, false);\r\n                            if (!!v) {\r\n                                receiptSaleModel.TyroTerminalReceipts.push(v);\r\n                            }\r\n\r\n                            break;\r\n                        case 'linklyPaymentReaderProvider':\r\n                            var v = saleService.fillLinklyPaymentTransactionData(p.TransactionMetaData, true);\r\n                            if (!!v) {\r\n                                receiptSaleModel.LinklyTerminalReceipts.push(v);\r\n                            }\r\n                            var v = saleService.fillLinklyPaymentTransactionData(p.TransactionMetaData, false);\r\n                            if (!!v) {\r\n                                receiptSaleModel.LinklyTerminalReceipts.push(v);\r\n                            }\r\n    \r\n                            break;\r\n                    }\r\n                }\r\n            });\r\n        };\r\n\r\n        saleService.fillTyroTransactionData = function (transactionData, isMerchant) {\r\n            var s = !!transactionData.merchantReceipt && isMerchant ? transactionData.merchantReceipt.replace(/(?:\\r\\n|\\r|\\n)/g, '<br />') :\r\n                !!transactionData.customerReceipt && !isMerchant ? transactionData.customerReceipt.replace(/(?:\\r\\n|\\r|\\n)/g, '<br />') : null;\r\n            if (!s)\r\n                return null;\r\n\r\n            if (isMerchant)\r\n                return {\r\n                    MerchantReceipt: $sce.trustAsHtml('<pre style=\"background-color: unset;border: none;\">' + s + '</pre>')\r\n                };\r\n            else\r\n                return {\r\n                    CustomerReceipt: $sce.trustAsHtml('<pre style=\"background-color: unset;border: none;\">' + s + '</pre>')\r\n                };\r\n        };\r\n\r\n        saleService.fillLinklyPaymentTransactionData = function (transactionData, isMerchant) {\r\n            var s = !!transactionData.merchantReceipt && isMerchant ? transactionData.merchantReceipt.replaceAll(',', '<br />') :\r\n                !!transactionData.customerReceipt && !isMerchant ? transactionData.customerReceipt.replaceAll(',', '<br />') : null;\r\n            if (!s)\r\n                return null;\r\n\r\n            if (isMerchant)\r\n                return {\r\n                    MerchantReceipt: $sce.trustAsHtml('<pre style=\"background-color: unset;border: none;\">' + s + '</pre>')\r\n                };\r\n            else\r\n                return {\r\n                    CustomerReceipt: $sce.trustAsHtml('<pre style=\"background-color: unset;border: none;\">' + s + '</pre>')\r\n                };\r\n        };\r\n\r\n        /**\r\n         * Loads  pos discounts into localdb and temp array\r\n         * @returns {}\r\n         */\r\n\r\n        var productDeals = [];\r\n        saleService.getPosDiscounts = function () {\r\n            var provider = configService.isOnline ? remoteRequestProvider : localDBProvider;\r\n            var pr = provider.getPosDiscounts();\r\n\r\n            if (configService.isOnline && configService.isSite === false && !deviceInfo.isSimulator) {\r\n                pr = pr.then(function (resp) {\r\n\r\n                    // var encoded = atob(resp.data.Discounts);\r\n\r\n                    // var objStr = pako.inflate(encoded,\r\n                    //     { to: 'string' });\r\n\r\n                    // var restored = JSON.parse(objStr);\r\n\r\n                    return helperService.unpack(saleService, resp.data.Discounts)\r\n                        .then(function (restored) {\r\n                            productDeals = restored;\r\n                            productDeals = getPreparedDeals();\r\n                            return localDBProvider.refreshPosDiscounts(restored);\r\n                        });\r\n\r\n                    //     productDeals = restored;\r\n                    //     productDeals = getPreparedDeals();\r\n                    // return localDBProvider.refreshPosDiscounts(restored);\r\n                });\r\n            } else {\r\n                pr = pr.then(function (resp) {\r\n                    if (resp.data) {\r\n                        const restored = unpackArray(resp.data.Discounts);\r\n\r\n                        productDeals = restored;\r\n                        productDeals = getPreparedDeals();\r\n                        return resp.data;\r\n                    } else {\r\n                        productDeals = resp;\r\n                        productDeals = getPreparedDeals();\r\n                        return resp;\r\n                    }\r\n                });\r\n            }\r\n            return pr;\r\n        };\r\n\r\n        /*\r\n         * check if tags string contaons tagName\r\n         * @param {} tags\r\n         * @param {} tag\r\n         * @returns {}\r\n         */\r\n        function checkTag(tags, tag) {\r\n            var hasTag = false;\r\n            if (tag && tags && typeof (tags) == 'string') {\r\n                var result = tags.split(',');\r\n                $.each(result, function (idx, el) {\r\n                    if (tag === el) {\r\n                        hasTag = true;\r\n                        return false;\r\n                    }\r\n                });\r\n            }\r\n\r\n            return hasTag;\r\n        }\r\n\r\n        /*\r\n         * check if product is affected by deal\r\n         * @param {} deals\r\n         * @param {} dealDiscountID\r\n         * @returns {}\r\n         */\r\n        function hasThisDeal(deals, dealDiscountID) {\r\n            var result = deals.filter(function (deal) {\r\n                return deal.dealDiscountID === dealDiscountID;\r\n            });\r\n            return result.length > 0;\r\n        }\r\n\r\n        /*\r\n         * check if customer has current deal\r\n         * @param {} customerDeals\r\n         * @param {} dealID\r\n         * @returns {}\r\n         */\r\n        function customerHasThatDeal(customerDeals, dealID) {\r\n            var has = false;\r\n            $.each(customerDeals, function (idx, el) {\r\n                if (el.DealID === dealID || el.dealID === dealID) {\r\n                    has = true;\r\n                    return false;\r\n                }\r\n            });\r\n            return has;\r\n        }\r\n\r\n        // check if at least one product in checkout has coupon discount enabled\r\n        saleService.hasAvailableCoupons = function (currentSale) {\r\n            var currentDate = new Date();\r\n\r\n            var customerDeals = currentSale.Discounts;\r\n\r\n            var hasAvailableCoupons = false;\r\n            var cdl = productDeals.filter(function (d) {\r\n                return d.allowCoupons === true;\r\n            });\r\n\r\n            $.each(cdl, function (dscIdx, disc) {\r\n                if (customerHasThatDeal(customerDeals, disc.dealID) || disc.customersGroup === 'All' || disc.customersGroup === 'POS') {\r\n\r\n                    $.each(disc.triggers, function (tIdx, tElement) {\r\n                        $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                            if (el.CanEdit &&\r\n                                (((el.ProductID === tElement.productID && tElement.productID && !tElement.isFamily) || (tElement.productID && tElement.isFamily && el.FamilyID === tElement.productID) || !tElement.productID || tElement.productID === newGuid) && ((el.CategoryID === tElement.categoryID && tElement.categoryID) || !tElement.categoryID) &&\r\n                                    ((el.BrandID === tElement.brandID && tElement.brandID) || !tElement.brandID) &&\r\n                                    (checkTag(el.Tags, tElement.tagName) || !tElement.tagName)) &&\r\n                                (disc.dateTo == null || new Date(disc.dateTo) >= currentDate) &&\r\n                                (disc.dateFrom == null || new Date(disc.dateFrom) <= currentDate)) {\r\n                                hasAvailableCoupons = true;\r\n                                return false;\r\n                            }\r\n                        });\r\n\r\n                        if (hasAvailableCoupons)\r\n                            return false;\r\n                    });\r\n\r\n                    if (hasAvailableCoupons)\r\n                        return false;\r\n                }\r\n            });\r\n\r\n            return hasAvailableCoupons;\r\n        };\r\n\r\n        // filter deals in according to selectedCoupon\r\n        saleService.filterProductDeals = function (currentSale) {\r\n            var couponID = currentSale.selectedCouponID;\r\n            var filteredProductDeals = productDeals.filter(function (d) {\r\n                if (d.allowCoupons !== true) return true; // if deal is not coupon, get it\r\n                if (!d.coupons) return false;\r\n                if (!!d.coupons && !couponID) return false;\r\n\r\n                var coups = d.coupons.filter(function (c) {\r\n                    return c.ID === couponID;\r\n                });\r\n\r\n\r\n\r\n                return coups.length > 0;\r\n            });\r\n\r\n            return filteredProductDeals;\r\n        };\r\n\r\n        // see CalculatorHelperService.ts getTaxObject\r\n        saleService.getTaxObject = function (currentSale, el) {\r\n            var tenantTax = configService.tenantTaxRule;\r\n            var outletTax = configService.lastOutletTax;\r\n            var customerTaxObject = null;\r\n\r\n            if (!configService.ignoreCustomerTaxRule && !!currentSale.customer && !!currentSale.customer.TaxRuleID) {\r\n                customerTaxObject = {\r\n                    ruleID: currentSale.customer.TaxRuleID,\r\n                    effectivePercentInclusive: currentSale.customer.EffectivePercentInclusive,\r\n                    effectivePercentExclusive: currentSale.customer.EffectivePercentExclusive\r\n                };\r\n            }\r\n\r\n            var taxObject = (!!el && el.Taxes !== 'null' && el.Taxes && typeof el.Taxes === \"string\") ? JSON.parse(el.Taxes) :\r\n                !!customerTaxObject ? customerTaxObject :\r\n                outletTax !== 'null' ? JSON.parse(outletTax) :\r\n                JSON.parse(tenantTax);\r\n\r\n            if (!!el && el.Taxes !== 'null')\r\n                taxObject.isProductTax = true;\r\n\r\n            return taxObject;\r\n        };\r\n\r\n        saleService.applyCustomerTax = function (currentSale, leaveTaxAsIs) {\r\n            var taxInclisuve = configService.taxInclucive === \"True\";\r\n            var taxes = saleService.getTaxObject(currentSale);\r\n            $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                if (el.Taxes.isProductTax !== true && el.CanEdit == true) {\r\n                    updateItemTaxRelatedFields(el, taxes, taxInclisuve, leaveTaxAsIs);\r\n                }\r\n            });\r\n        };\r\n\r\n\r\n        function updateItemTaxRelatedFields(el, taxes, taxInclisuve, leaveTaxAsIs) {\r\n            var loyaltyEarning = parseFloat(el.LoyaltyEarning);\r\n            if (leaveTaxAsIs !== true || !el.Taxes) {\r\n                el.Taxes = taxes;\r\n            }\r\n\r\n            var priceWithTax = taxInclisuve ? el.Price : el.Price + saleService.calculateTax(el.Taxes, el.Price);\r\n            el.Tax = saleService.calculateTax(el.Taxes, el.Price * el.Count);\r\n            el.TaxRuleID = el.Taxes.ruleID;\r\n            el.LoyaltyPoints = loyaltyEarning ? (priceWithTax * loyaltyEarning * el.Count) : 0;\r\n            el.PriceWithTax = priceWithTax;\r\n        }\r\n\r\n        function updateProductWithZeroPrice(el) {\r\n            var taxInclisuve = configService.taxInclucive === \"True\";\r\n            var loyaltyEarning = parseFloat(el.LoyaltyEarning);\r\n\r\n            var amountWithTax = taxInclisuve ? el.Amount : el.Amount + el.Tax;\r\n\r\n            el.LoyaltyPoints = loyaltyEarning ? (amountWithTax * loyaltyEarning) : 0;\r\n\r\n            if (el.Count != 0) {\r\n                el.PriceWithTax = helperService.DEARRound(amountWithTax / el.Count, 2);\r\n            }\r\n        }\r\n\r\n        /**\r\n         * Return discount for current order\r\n         * @param {} customer\r\n         * @param {} checkOutItems\r\n         * @returns {}\r\n         */\r\n        var newGuid = constants.newGuid;\r\n        saleService.getSaleDiscounts = function (currentSale, taxInclusive, scope, leaveTaxAsIs) {\r\n            // as this function is called each time when current sale is recalculated, so save\r\n            // current sale here\r\n\r\n            var isStandaloneReturn = !!currentSale && currentSale.standAloneReturn === true;\r\n            var isStandaloneExchange = !!currentSale && currentSale.standAloneExchange === true;\r\n\r\n            if (isStandaloneReturn || isStandaloneExchange) {\r\n                saleService.totalSum(currentSale, taxInclusive, true);\r\n                helperService.storeCurrentSale(currentSale, scope);\r\n                return;\r\n            }\r\n\r\n            var customerDeals = currentSale.customer.Discounts;\r\n            var itemsToRemove = [];\r\n            var removedItemsMap = {}; // assume that saparated items can have only one split, i.e. with the same SeparatedItemID can be only one item\r\n\r\n            saleService.applyCustomerTax(currentSale, leaveTaxAsIs);\r\n\r\n            $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                if (el.CanEdit) {\r\n                    el.deals = [];\r\n                    el.itemDiscount = 0;\r\n                }\r\n\r\n                if (el.SeparatedItemID && el.CanEdit) {\r\n                    $.each(currentSale.CheckoutItems, function (id, parentEl) {\r\n                        if (parentEl.ID === el.SeparatedItemID) {\r\n                            parentEl.Count = parseFloat(parentEl.Count) + parseFloat(el.Count);\r\n                            itemsToRemove.push(idx);\r\n                            removedItemsMap[el.ComplexSeparatedItemID] = el;\r\n                            return false;\r\n                        }\r\n                    });\r\n                }\r\n            });\r\n\r\n            $.each(productDeals, function (idx, el) {\r\n                el.affectedProducts = [];\r\n            });\r\n\r\n            // cause product deals can have coupon deals and coupon deal can be disabled\r\n            // we need to filter productDeals and remove all coupon deals that don't work for the moment\r\n            // coupon deal starts to work when it contains coupon number that is selected. Only one coupon can be set for current sale.\r\n            var filteredProductDeals = saleService.filterProductDeals(currentSale);\r\n\r\n            $.each(orderBy(itemsToRemove, '', true), function (i, y) {\r\n                currentSale.CheckoutItems.splice(y, 1);\r\n            });\r\n\r\n            var currentDate = new Date();\r\n\r\n\r\n            /*calculate order level discount*/\r\n            saleService.totalSum(currentSale, taxInclusive, true);\r\n            var total = currentSale.BaseTotal;\r\n            var totalDiscounts = [];\r\n            $.each(orderBy(filteredProductDeals, ['dealDiscountID'], false), function (idx, disc) {\r\n                if ((disc.dateTo == null || new Date(disc.dateTo) >= currentDate) &&\r\n                    (disc.dateFrom == null || new Date(disc.dateFrom) <= currentDate) && (disc.triggers[0].productID === newGuid || (disc.targets[0] && disc.targets[0].productID === newGuid)) &&\r\n                    (customerHasThatDeal(customerDeals, disc.dealID) || disc.customersGroup === 'All' || disc.customersGroup === 'POS')) {\r\n                    var result = calculateOrderDiscount(disc, total, currentSale.CheckoutItems);\r\n                    if (result.discount)\r\n                        totalDiscounts.push(result);\r\n                }\r\n            });\r\n\r\n            var results = [];\r\n            $.each(totalDiscounts, function (idx, el) {\r\n                var addNewResult = true;\r\n                $.each(results, function (rIdx, r) {\r\n                    if (r.dealDiscountID === el.disc.dealDiscountID) {\r\n                        r.discount += el.discount;\r\n                        addNewResult = false;\r\n                        return false;\r\n                    }\r\n                });\r\n                if (addNewResult) {\r\n                    results.push({\r\n                        dealDiscountID: el.disc.dealDiscountID,\r\n                        discount: el.discount\r\n                    });\r\n                }\r\n            });\r\n\r\n            // search discounts for products\r\n            // Customers discount, discount matrix, product discount\r\n            $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                if (currentSale.customer && currentSale.customer.Discount && currentSale.customer.Discount > 0 &&\r\n                    configService.applyCustomerDiscountAfterOtherDiscounts !== true\r\n                ) {\r\n                    var customerDiscount = currentSale.customer.Discount;\r\n\r\n                    var disc = {\r\n                        discountLineType: \"% Discount\",\r\n                        amount: customerDiscount\r\n                    };\r\n\r\n                    var result = calculateDiscountLine(disc, el, null);\r\n                    var discount = {\r\n                        applyProirity: result.applyProirity,\r\n                        discount: disc,\r\n                        totalDiscount: result.totalDiscount,\r\n                        itemDiscount: result.discount,\r\n                        itemsToSeparate: result.itemsToSeparate,\r\n                        dealDiscountID: null\r\n                    };\r\n                    el.deals.push(discount);\r\n                }\r\n                var appliedDiscount = false;\r\n                var appliedByTag = false;\r\n                var appliedById = false;\r\n                if (currentSale.customer.MatrixDiscounts) {\r\n                    $.each(currentSale.customer.MatrixDiscounts, function (mIdx, martrixItem) {\r\n                        if ((el.ProductID === martrixItem.ProductID &&\r\n                                (martrixItem.Type === 'Simple' ||\r\n                                    (martrixItem.Type === 'Quantity Based' && martrixItem.MinValue <= el.Count && martrixItem.MaxValue >= el.Count))) &&\r\n                            ((appliedById === true && martrixItem.ByTag === false) || (appliedByTag === true && martrixItem.ByTag === true) || appliedDiscount === false)\r\n                        ) {\r\n\r\n                            appliedDiscount = true;\r\n\r\n                            if (martrixItem.ByTag) {\r\n                                appliedByTag = true;\r\n                            } else {\r\n                                appliedById = true;\r\n                            }\r\n\r\n                            var disc = {\r\n                                discountLineType: martrixItem.DiscountLineType,\r\n                                amount: martrixItem.Amount\r\n                            };\r\n\r\n                            var result = calculateDiscountLine(disc, el, null);\r\n                            var discount = {\r\n                                applyProirity: result.applyProirity,\r\n                                discount: disc,\r\n                                totalDiscount: result.totalDiscount,\r\n                                itemDiscount: result.discount,\r\n                                itemsToSeparate: result.itemsToSeparate,\r\n                                dealDiscountID: null\r\n                            };\r\n                            el.deals.push(discount);\r\n                        }\r\n                    });\r\n                }\r\n                if (el.Discounts && appliedDiscount === false) {\r\n                    $.each(el.Discounts, function (prIdx, prDisc) {\r\n                        if ((prDisc.type === 'Simple' ||\r\n                                (prDisc.type === 'Quantity Based' && prDisc.minValue <= el.Count && prDisc.maxValue >= el.Count))) {\r\n\r\n                            var disc = {\r\n                                discountLineType: prDisc.discountLineType,\r\n                                amount: prDisc.amount\r\n                            };\r\n\r\n                            var result = calculateDiscountLine(disc, el, null);\r\n                            var discount = {\r\n                                applyProirity: result.applyProirity,\r\n                                discount: disc,\r\n                                totalDiscount: result.totalDiscount,\r\n                                itemDiscount: result.discount,\r\n                                itemsToSeparate: result.itemsToSeparate,\r\n                                dealDiscountID: null\r\n                            };\r\n                            el.deals.push(discount);\r\n                        }\r\n                    });\r\n                }\r\n\r\n\r\n            });\r\n\r\n            //deals discounts\r\n            $.each(orderBy(filteredProductDeals, ['dealDiscountID'], false), function (dscIdx, disc) {\r\n                if (customerHasThatDeal(customerDeals, disc.dealID) || disc.customersGroup === 'All' || disc.customersGroup === 'POS') {\r\n                    var productBuyCount = 0;\r\n                    var triggerItemIds = [];\r\n\r\n                    $.each(disc.triggers, function (tIdx, tElement) {\r\n                        $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                            if (el.CanEdit &&\r\n                                (((el.ProductID === tElement.productID && tElement.productID && !tElement.isFamily) || (tElement.productID && tElement.isFamily && el.FamilyID === tElement.productID) || !tElement.productID || tElement.productID === newGuid) && ((el.CategoryID === tElement.categoryID && tElement.categoryID) || !tElement.categoryID) &&\r\n                                    ((el.BrandID === tElement.brandID && tElement.brandID) || !tElement.brandID) &&\r\n                                    (checkTag(el.Tags, tElement.tagName) || !tElement.tagName)) &&\r\n                                (disc.dateTo == null || new Date(disc.dateTo) >= currentDate) &&\r\n                                (disc.dateFrom == null || new Date(disc.dateFrom) <= currentDate)) {\r\n                                productBuyCount += el.Count;\r\n                                triggerItemIds.push(el.ProductID);\r\n                            }\r\n                        });\r\n                    });\r\n\r\n\r\n                    if (productBuyCount >= disc.buyValue || disc.buyValue == null) {\r\n\r\n                        $.each(disc.targets, function (targetDiscIdx, targetDisc) {\r\n                            $.each(currentSale.CheckoutItems, function (targetItemIdx, targetItem) {\r\n                                if (targetItem.CanEdit &&\r\n                                    (disc.dateTo == null || new Date(disc.dateTo) >= currentDate) &&\r\n                                    (disc.dateFrom == null || new Date(disc.dateFrom) <= currentDate) &&\r\n                                    (((targetItem.ProductID === targetDisc.productID && targetDisc.productID && !targetDisc.isFamily) || (targetDisc.productID && targetDisc.isFamily && targetItem.FamilyID === targetDisc.productID) || !targetDisc.productID) &&\r\n                                        ((targetItem.CategoryID === targetDisc.categoryID && targetDisc.categoryID) || !targetDisc.categoryID) &&\r\n                                        ((targetItem.BrandID === targetDisc.brandID && targetDisc.brandID) || !targetDisc.brandID) &&\r\n                                        (checkTag(targetItem.Tags, targetDisc.tagName) || !targetDisc.tagName)) &&\r\n                                    (disc.type === 'Simple' ||\r\n                                        (disc.type === 'Quantity Based' && disc.minValue <= targetItem.Count && disc.maxValue >= targetItem.Count)) && targetItem.CanEdit &&\r\n                                    (!hasThisDeal(targetItem.deals, disc.dealDiscountID) || (targetItem.itemsToSeparate > 0 && targetItem.itemsToSeparate !== targetItem.Count))) {\r\n                                    disc.affectedProducts.push({\r\n                                        productID: targetItem.ProductID,\r\n                                        price: targetItem.Price\r\n                                    });\r\n                                }\r\n                            });\r\n                        });\r\n\r\n                        if (disc.targets.length === 0) {\r\n                            $.each(disc.triggers, function (tIdx, tElement) {\r\n\r\n                                $.each(currentSale.CheckoutItems, function (targetItemIdx, targetItem) {\r\n                                    if (targetItem.CanEdit &&\r\n                                        (disc.dateTo == null || new Date(disc.dateTo) >= currentDate) &&\r\n                                        (disc.dateFrom == null || new Date(disc.dateFrom) <= currentDate) &&\r\n\r\n                                        (((targetItem.ProductID === tElement.productID && tElement.productID && !tElement.isFamily) || (targetItem.FamilyID === tElement.productID && tElement.productID && tElement.isFamily) || !tElement.productID || tElement.productID === newGuid) &&\r\n                                            ((targetItem.CategoryID === tElement.categoryID && tElement.categoryID) || !tElement.categoryID) &&\r\n                                            ((targetItem.BrandID === tElement.brandID && tElement.brandID) || !tElement.brandID) &&\r\n                                            (checkTag(targetItem.Tags, tElement.tagName) || !tElement.tagName)) &&\r\n                                        (disc.type === 'Simple' ||\r\n                                            (disc.type === 'Quantity Based' && tElement.minValue <= targetItem.Count && tElement.maxValue >= targetItem.Count)) && targetItem.CanEdit &&\r\n                                        (!hasThisDeal(targetItem.deals, disc.dealDiscountID) || (targetItem.itemsToSeparate > 0 && targetItem.itemsToSeparate !== targetItem.Count))) {\r\n\r\n                                        if (disc.type === 'Quantity Based' && tElement.minValue <= targetItem.Count && tElement.maxValue >= targetItem.Count) {\r\n                                            disc.amount = tElement.amount;\r\n                                            disc.discountLineType = tElement.discountLineType;\r\n                                        }\r\n\r\n                                        disc.affectedProducts.push({\r\n                                            productID: targetItem.ProductID,\r\n                                            price: targetItem.Price\r\n                                        });\r\n                                    }\r\n                                });\r\n                            });\r\n\r\n                        }\r\n\r\n                        var affectedValue = 0;\r\n\r\n                        if (checkDifferentConditions(disc.dealDiscountID) === true) {\r\n                            affectedValue = disc.buyMore === false ? disc.getValue * Math.floor(productBuyCount / disc.buyValue) : disc.getValue;\r\n                        } else {\r\n                            affectedValue = disc.getValue * Math.floor(productBuyCount / (disc.buyValue + disc.getValue));\r\n                            affectedValue = (affectedValue > disc.getValue && disc.buyMore === true) ? disc.getValue : affectedValue;\r\n                        }\r\n\r\n\r\n\r\n\r\n\r\n                        $.each(orderBy(disc.affectedProducts, ['price'], false), function (targetDiscIdx, affectedProduct) {\r\n                            $.each(currentSale.CheckoutItems, function (targetItemIdx, targetItem) {\r\n                                if (targetItem.CanEdit &&\r\n                                    targetItem.ProductID === affectedProduct.productID &&\r\n                                    (affectedValue > 0 || (!affectedValue && affectedValue !== 0))) {\r\n\r\n                                    if (hasThisDeal(targetItem.deals, disc.dealDiscountID)) {\r\n                                        var otherItem = tryToFindOtherCheckoutItemByProductID(currentSale.CheckoutItems, targetItem.ProductID, disc.dealDiscountID);\r\n                                        if (otherItem != null) {\r\n                                            var value = affectedValue > otherItem.Count ? otherItem.Count : affectedValue ? affectedValue : null;\r\n                                            var result = calculateDiscountLine(disc, otherItem, value);\r\n                                            var discount = {\r\n                                                applyProirity: result.applyProirity,\r\n                                                discount: disc,\r\n                                                totalDiscount: result.totalDiscount,\r\n                                                itemDiscount: result.discount,\r\n                                                itemsToSeparate: result.itemsToSeparate,\r\n                                                dealDiscountID: disc.dealDiscountID\r\n                                            };\r\n                                            otherItem.deals.push(discount);\r\n                                            affectedValue -= value;\r\n                                            return false;\r\n                                        } else {\r\n                                            $.each(targetItem.deals, function (idxd, d) {\r\n                                                if (d.dealDiscountID === disc.dealDiscountID) {\r\n\r\n                                                    var value = affectedValue + d.itemsToSeparate > targetItem.Count ? targetItem.Count : affectedValue + d.itemsToSeparate;\r\n                                                    var result = calculateDiscountLine(disc, targetItem, value);\r\n                                                    d.itemsToSeparate = result.itemsToSeparate;\r\n                                                    d.totalDiscount = result.totalDiscount;\r\n                                                    affectedValue -= value;\r\n                                                    return false;\r\n                                                }\r\n                                            });\r\n                                        }\r\n                                    } else {\r\n                                        var value = affectedValue > targetItem.Count ? targetItem.Count : affectedValue ? affectedValue : null;\r\n                                        var result = calculateDiscountLine(disc, targetItem, value);\r\n                                        var discount = {\r\n                                            applyProirity: result.applyProirity,\r\n                                            discount: disc,\r\n                                            totalDiscount: result.totalDiscount,\r\n                                            itemDiscount: result.discount,\r\n                                            itemsToSeparate: result.itemsToSeparate,\r\n                                            dealDiscountID: disc.dealDiscountID\r\n                                        };\r\n                                        targetItem.deals.push(discount);\r\n                                        affectedValue -= value;\r\n                                        return false;\r\n                                    }\r\n                                }\r\n                            });\r\n                        });\r\n                    }\r\n                }\r\n            });\r\n\r\n            //choose best discount\r\n            var itemsToAdd = [];\r\n            $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                var itemsWithOutDiscount = el.CanEdit ? el.Count : 0;\r\n\r\n                var deals = orderBy(el.deals, ['applyProirity', 'totalDiscount'], true);\r\n                for (var i = 0; i < deals.length && itemsWithOutDiscount > 0; i++) {\r\n                    var bestDiscount = deals[i];\r\n\r\n                    if (bestDiscount && el.CanEdit) {\r\n                        if (bestDiscount.itemsToSeparate && bestDiscount.itemsToSeparate < el.Count) {\r\n                            var newItem = {};\r\n                            angular.copy(el, newItem);\r\n                            el.Count -= bestDiscount.itemsToSeparate;\r\n                            newItem.Count = bestDiscount.itemsToSeparate;\r\n                            newItem.ID = uuid2.newguid();\r\n\r\n                            newItem.itemDiscount = helperService.DEARRound(bestDiscount.itemDiscount, 2);\r\n\r\n                            newItem.SeparatedItemID = el.ID;\r\n                            newItem.ComplexSeparatedItemID = el.ID + \"__\" + bestDiscount.dealDiscountID;\r\n                            newItem.Amount = (newItem.BasePrice - bestDiscount.itemDiscount) * newItem.Count;\r\n                            el.Amount = el.BasePrice * el.Count;\r\n                            el.Tax = saleService.calculateTax(newItem.Taxes, el.Amount);\r\n                            newItem.Tax = saleService.calculateTax(newItem.Taxes, newItem.Amount);\r\n                            itemsWithOutDiscount -= bestDiscount.itemsToSeparate;\r\n\r\n                            //TODO CHECH TAX!!\r\n                            if (taxInclusive) {\r\n                                var price = el.BasePrice + saleService.calculateTax(el.Taxes, el.BasePrice - el.itemDiscount);\r\n                                el.Price = el.BasePrice;\r\n                                el.PriceWithTax = el.BasePrice;\r\n                                el.Tax = saleService.calculateTax(el.Taxes, (el.BasePrice - el.itemDiscount) * el.Count);\r\n                                el.Amount = el.Price * el.Count;\r\n\r\n                                var sum = (newItem.BasePrice - newItem.itemDiscount) * newItem.Count;\r\n                                if (newItem.Price === newItem.itemDiscount) {\r\n                                    sum = 0;\r\n                                    newItem.itemDiscount = helperService.DEARRound(newItem.BasePrice, 2);\r\n                                }\r\n                                price = newItem.BasePrice + saleService.calculateTax(newItem.Taxes, sum);\r\n                                newItem.Price = newItem.BasePrice;\r\n                                newItem.PriceWithTax = newItem.BasePrice;\r\n                                newItem.Tax = saleService.calculateTax(newItem.Taxes, sum);\r\n                            }\r\n                            itemsToAdd.push(newItem);\r\n                        } else {\r\n\r\n                            el.itemDiscount = helperService.DEARRound(bestDiscount.itemDiscount, 2);\r\n\r\n                            el.Amount = (el.BasePrice - el.itemDiscount) * el.Count;\r\n                            el.Tax = saleService.calculateTax(el.Taxes, el.Amount);\r\n                            itemsWithOutDiscount = 0;\r\n\r\n                            //TODO CHECH TAX!!\r\n                            if (taxInclusive) {\r\n                                var sum = (el.BasePrice - el.itemDiscount) * el.Count;\r\n                                if (el.BasePrice === el.itemDiscount) {\r\n                                    sum = 0;\r\n                                    el.itemDiscount = helperService.DEARRound(el.BasePrice, 2);\r\n                                }\r\n                                //var price = taxInclusive ? el.BasePrice : el.BasePrice + saleService.calculateTax(el.Taxes, sum);\r\n                                el.Price = el.BasePrice;\r\n                                el.PriceWithTax = el.BasePrice;\r\n                                el.Tax = saleService.calculateTax(el.Taxes, sum);\r\n                            }\r\n\r\n\r\n                        }\r\n                    }\r\n                }\r\n            });\r\n\r\n            $.each(itemsToAdd, function (idx, el) {\r\n                if (!!el.ComplexSeparatedItemID && !!removedItemsMap[el.ComplexSeparatedItemID]) {\r\n                    var oldEl = removedItemsMap[el.ComplexSeparatedItemID];\r\n                    el.Discount = oldEl.Discount;\r\n                    el.CustomDiscountType = oldEl.CustomDiscountType;\r\n                }\r\n                currentSale.CheckoutItems.push(el);\r\n            });\r\n\r\n            //apply customersDiscount after all discounts if needed\r\n            if (currentSale.customer && currentSale.customer.Discount && currentSale.customer.Discount > 0 &&\r\n                configService.applyCustomerDiscountAfterOtherDiscounts === true) {\r\n\r\n                $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                    var discountPercentage = currentSale.customer.Discount / 100;\r\n                    if (el.CanEdit) {\r\n                        el.itemDiscount = el.itemDiscount + helperService.DEARRound(((el.Price - el.itemDiscount) * discountPercentage), 2);\r\n                        el.Amount = (el.Price - el.itemDiscount) * el.Count;\r\n                        el.Tax = saleService.calculateTax(el.Taxes, el.Amount);\r\n\r\n                        //TODO CHECH TAX!!\r\n                        if (taxInclusive) {\r\n                            var sum = (el.BasePrice - el.itemDiscount) * el.Count;\r\n                            if (el.Price === el.itemDiscount) {\r\n                                sum = 0;\r\n                                el.itemDiscount = helperService.DEARRound(el.BasePrice, 2);\r\n                            }\r\n                            //var price = taxInclusive ? el.BasePrice : el.BasePrice + saleService.calculateTax(el.Taxes, sum);\r\n                            el.Price = el.BasePrice;\r\n                            el.PriceWithTax = el.BasePrice;\r\n                            el.Tax = saleService.calculateTax(el.Taxes, sum);\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n\r\n            // check here custom discount\r\n            $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                if (el.CanEdit) {\r\n                    if (el.CustomDiscountType === 'price' && el.Discount >= 0) {\r\n                        el.itemDiscount = helperService.DEARRound(el.BasePrice - el.Discount, 2);\r\n                        el.Amount = el.Discount * el.Count;\r\n                        el.Tax = saleService.calculateTax(el.Taxes, el.Amount);\r\n\r\n                        if (el.Price === 0) {\r\n                            updateProductWithZeroPrice(el);\r\n                        }\r\n\r\n                        if (el.itemDiscount === 0)\r\n                            el.Price = el.BasePrice;\r\n                    } else if (el.CustomDiscountType === 'percent' && el.Discount >= 0) {\r\n                        if (el.Discount > 100)\r\n                            el.Discount = 100;\r\n\r\n                        el.itemDiscount = helperService.DEARRound(el.Discount * el.BasePrice / 100, 2);\r\n                        el.Amount = (el.BasePrice - el.itemDiscount) * el.Count;\r\n                        el.Tax = saleService.calculateTax(el.Taxes, el.Amount);\r\n                        if (el.itemDiscount === 0)\r\n                            el.Price = el.BasePrice;\r\n                    }\r\n\r\n                    var sign = el.Price < 0 || isStandaloneReturn ? -1 : 1;\r\n                    if (sign > 0 && el.Discount >= 0 && (el.CustomDiscountType === 'percent' || el.CustomDiscountType === 'price')) {\r\n                        el.BasePriceWithDiscount = el.BasePrice - el.itemDiscount;\r\n                    }\r\n                    //else if (el.Discount == 0) {\r\n                    //    el.Price = el.BasePrice;\r\n                    //    el.itemDiscount = 0;\r\n                    //    el.Amount = (el.BasePrice) * el.Count;\r\n                    //    el.Tax = saleService.calculateTax(el.Taxes, el.Amount);\r\n                    //}\r\n                }\r\n            });\r\n\r\n            // reprocess here price based barcode products\r\n            $.each(currentSale.CheckoutItems, function (idx, el) {\r\n                if (el.CanEdit && el.priceBasedValue) {\r\n                    if ((el.Price - el.itemDiscount) > 0) {\r\n                        el.Count = helperService.DEARRound(el.priceBasedValue / (el.Price - el.itemDiscount), 4);\r\n                    } else {\r\n                        el.Count = 1;\r\n                        errorService.showError(gettextCatalog.getString('Final product price is zero, so product count is set to 1.'), null, 'Warning');\r\n                    }\r\n\r\n                    el.Amount = helperService.DEARRound((el.Price - el.itemDiscount) * el.Count, 2);\r\n                    el.Tax = saleService.calculateTax(el.Taxes, el.Amount);\r\n                }\r\n            });\r\n\r\n            saleService.totalSum(currentSale, taxInclusive, true);\r\n            total = currentSale.BaseTotal;\r\n            var prevDiscountValue = currentSale.Discount;\r\n\r\n            var bestTotalDiscount = orderBy(results, 'discount', true)[0];\r\n            if (currentSale.keepTotalDiscount !== true) {\r\n                if (bestTotalDiscount && bestTotalDiscount.discount > 0) {\r\n                    currentSale.Discount = bestTotalDiscount.discount > total ? total : bestTotalDiscount.discount;\r\n                    currentSale.isDiscountPercent = false;\r\n                } else {\r\n                    currentSale.Discount = 0;\r\n                }\r\n\r\n            }\r\n\r\n            if (currentSale.manuallyAppliedDiscount === true && currentSale.keepTotalDiscount !== true) {\r\n                currentSale.manuallyAppliedDiscount = false;\r\n\r\n                var message = gettextCatalog.getString(\"Please note that the total discount has been updated.\");\r\n                var skipwarn = localStorage.getItem('SkipDiscountSaleWarnMessage') === 'true';\r\n                if (!skipwarn) {\r\n                    helperService.showCustomDialog3(gettextCatalog.getString('Warning'), message,\r\n                        gettextCatalog.getString('Skip warning'), '', false, true, skipwarn,\r\n                        function (val) {\r\n                            localStorage.setItem('SkipDiscountSaleWarnMessage', val);\r\n                        });\r\n                }\r\n            }\r\n\r\n            helperService.storeCurrentSale(currentSale, scope);\r\n        };\r\n\r\n        //calculate posible discount\r\n        function calculateDiscountLine(discount, item, value) {\r\n            var result = {};\r\n            result.applyProirity = 0;\r\n            var buyValue = discount.buyValue === null ? 1 : discount.buyValue;\r\n            if (value === null) {\r\n                switch (discount.discountLineType) {\r\n                    case 'Discount Amount':\r\n                        result.discount = discount.amount > item.Price ? 0 : item.Price - discount.amount;\r\n                        break;\r\n                    case '% Discount':\r\n                        result.discount = item.Price * (100 - discount.amount) / 100;\r\n                        break;\r\n                    case 'Markup Amount':\r\n                        result.discount = item.Price + discount.amount;\r\n                        break;\r\n                    case '% Markup':\r\n                        result.discount = item.Price + (item.Price * discount.amount / 100);\r\n                        break;\r\n                    case 'Flat Amount':\r\n                        result.discount = discount.amount / item.Count;\r\n                        break;\r\n                    default:\r\n                        result.discount = 0;\r\n                        break;\r\n                }\r\n                result.discount = item.Price - result.discount;\r\n                result.totalDiscount = result.discount * item.Count;\r\n                if (discount.discountLineType === 'Price Override') {\r\n                    result.applyProirity = 1;\r\n                    result.discount = item.Price - discount.amount;\r\n                    result.totalDiscount = result.discount * item.Count;\r\n                }\r\n                return result;\r\n            } else {\r\n                var affectedValue = value;\r\n                switch (discount.discountLineType) {\r\n                    case 'Discount Amount':\r\n                        result.discount = discount.amount > item.Price ? 0 : item.Price - discount.amount;\r\n                        break;\r\n                    case '% Discount':\r\n                        result.discount = item.Price * (100 - discount.amount) / 100;\r\n                        break;\r\n                    case 'Markup Amount':\r\n                        result.discount = item.Price + discount.amount;\r\n                        break;\r\n                    case '% Markup':\r\n                        result.discount = item.Price + (item.Price * discount.amount / 100);\r\n                        break;\r\n                    case 'Flat Amount':\r\n                        result.discount = discount.amount / item.affectedValue;\r\n                        break;\r\n                    default:\r\n                        result.discount = 0;\r\n                        break;\r\n                }\r\n                result.discount = item.Price - result.discount;\r\n                result.totalDiscount = result.discount * affectedValue;\r\n                result.itemsToSeparate = affectedValue;\r\n\r\n                if (discount.discountLineType === 'Price Override') {\r\n                    result.applyProirity = 1;\r\n                    result.discount = item.Price - discount.amount;\r\n                    result.totalDiscount = result.discount * affectedValue;\r\n                }\r\n\r\n                return result;\r\n            }\r\n        }\r\n\r\n        function calculateOrderDiscount(discount, total, CheckoutItems) {\r\n            var result = {\r\n                disc: discount\r\n            };\r\n            var totalMultiplier = 0;\r\n            var affectedValue = discount.getValue;\r\n            totalMultiplier = Math.floor(total / discount.buyValue);\r\n            var productBuyCount = 0;\r\n            var applyTotalDiscount = false;\r\n\r\n            $.each(discount.triggers, function (tIdx, tEl) {\r\n                $.each(CheckoutItems, function (idx, el) {\r\n                    if ((((el.ProductID === tEl.productID && tEl.productID && !tEl.isFamily) || (el.FamilyID === tEl.productID && tEl.productID && tEl.isFamily) || !tEl.productID) &&\r\n                            ((el.CategoryID === tEl.categoryID && tEl.categoryID) || !tEl.categoryID) &&\r\n                            ((el.BrandID === tEl.brandID && tEl.brandID) || !tEl.brandID) &&\r\n                            (checkTag(el.Tags, tEl.tagName) || !tEl.tagName))) {\r\n                        productBuyCount += el.Count;\r\n                        //return false;\r\n                    }\r\n                });\r\n            });\r\n\r\n            if (Math.floor(productBuyCount / discount.buyValue) >= 1) {\r\n                totalMultiplier = Math.floor(productBuyCount / discount.buyValue);\r\n                applyTotalDiscount = true;\r\n            }\r\n\r\n            totalMultiplier = totalMultiplier > 0 ? discount.buyMore === false ? totalMultiplier : 1 : 0;\r\n            affectedValue *= totalMultiplier;\r\n\r\n            if ((discount.triggers[0].productID === newGuid || applyTotalDiscount === true) &&\r\n                discount.targets.length > 0 && discount.targets[0].productID === newGuid) {\r\n                switch (discount.discountLineType) {\r\n                    case 'Discount Amount':\r\n                        result.discount = total - discount.amount;\r\n                        break;\r\n                    case '% Discount':\r\n                        result.discount = total * (100 - discount.amount) / 100;\r\n                        break;\r\n                    case 'Markup Amount':\r\n                        result.discount = total + discount.amount;\r\n                        break;\r\n                    case '% Markup':\r\n                        result.discount = total + (total * discount.amount / 100);\r\n                        break;\r\n                    case 'Price Override':\r\n                        result.discount = discount.amount;\r\n                        break;\r\n                    case 'Flat Amount':\r\n                        result.discount = discount.amount;\r\n                        break;\r\n                    default:\r\n                        result.discount = 0;\r\n                        break;\r\n                }\r\n                result.discount = total - result.discount;\r\n                if (discount.discountLineType === \"% Discount\" && totalMultiplier === 0) {\r\n                    result.discount *= totalMultiplier;\r\n                } else if (discount.discountLineType !== \"% Discount\") {\r\n                    result.discount *= totalMultiplier;\r\n                }\r\n\r\n                return result;\r\n            } else if (discount.targets.length > 0 && discount.targets[0].productID !== newGuid) {\r\n\r\n                $.each(discount.targets, function (targetDiscIdx, targetDisc) {\r\n                    $.each(CheckoutItems, function (targetItemIdx, targetItem) {\r\n                        if ((((targetItem.ProductID === targetDisc.productID && targetDisc.productID && !targetDisc.isFamily) || (targetItem.FamilyID === targetDisc.productID && targetDisc.productID && targetDisc.isFamily) || !targetDisc.productID) &&\r\n                                ((targetItem.CategoryID === targetDisc.categoryID && targetDisc.categoryID) || !targetDisc.categoryID) &&\r\n                                ((targetItem.BrandID === targetDisc.brandID && targetDisc.brandID) || !targetDisc.brandID) &&\r\n                                (checkTag(targetItem.Tags, targetDisc.tagName) || !targetDisc.tagName)) && targetItem.CanEdit) {\r\n                            discount.affectedProducts.push({\r\n                                productID: targetItem.ProductID,\r\n                                price: targetItem.Price\r\n                            });\r\n                        }\r\n                    });\r\n                });\r\n\r\n                $.each(orderBy(discount.affectedProducts, ['price'], false), function (targetDiscIdx, affectedProduct) {\r\n                    $.each(CheckoutItems, function (targetItemIdx, targetItem) {\r\n                        if (targetItem.ProductID === affectedProduct.productID && (affectedValue > 0 || !affectedValue)) {\r\n\r\n                            var value = affectedValue > targetItem.Count ? targetItem.Count : affectedValue ? affectedValue : null;\r\n                            var itemDiscount = calculateDiscountLine(discount, targetItem, value);\r\n                            result.discount = itemDiscount.totalDiscount;\r\n                            affectedValue -= targetItem.Count;\r\n                            return false;\r\n                        }\r\n                    });\r\n                });\r\n\r\n                result.affectedValue = affectedValue;\r\n                return result;\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        function checkDifferentConditions(dealDiscountID) {\r\n            var diffConditins = false;\r\n\r\n            $.each(productDeals, function (idx, disc) {\r\n                if (disc.dealDiscountID === dealDiscountID) {\r\n                    $.each(disc.triggers, function (tIdx, tEl) {\r\n                        var found = false;\r\n                        $.each(disc.targets, function (tIdx, targetDisc) {\r\n                            if (((tEl.productID && tEl.productID === targetDisc.productID) ||\r\n                                    (tEl.categoryID && tEl.categoryID === targetDisc.categoryID) ||\r\n                                    (tEl.brandID && tEl.brandID === targetDisc.brandID) ||\r\n                                    (tEl.tagName && tEl.tagName === targetDisc.tagName))) {\r\n                                found = true;\r\n                            }\r\n\r\n                        });\r\n                        if (found === false) {\r\n                            diffConditins = true;\r\n                        }\r\n                    });\r\n\r\n                    $.each(disc.targets, function (tIdx, tEl) {\r\n                        var found = false;\r\n                        $.each(disc.triggers, function (tIdx, targetDisc) {\r\n                            if (((tEl.productID && tEl.productID === targetDisc.productID) ||\r\n                                    (tEl.categoryID && tEl.categoryID === targetDisc.categoryID) ||\r\n                                    (tEl.brandID && tEl.brandID === targetDisc.brandID) ||\r\n                                    (tEl.tagName && tEl.tagName === targetDisc.tagName))) {\r\n                                found = true;\r\n                            }\r\n\r\n                        });\r\n                        if (found === false) {\r\n                            diffConditins = true;\r\n                        }\r\n                    });\r\n                }\r\n            });\r\n\r\n            return diffConditins;\r\n        }\r\n\r\n        function tryToFindOtherCheckoutItemByProductID(items, productID, dealDiscountID) {\r\n            var item = null;\r\n            $.each(items, function (idx, el) {\r\n                if (el.ProductID === productID && !hasThisDeal(el.deals, dealDiscountID)) {\r\n                    item = el;\r\n                    return el;\r\n                }\r\n            });\r\n            return item;\r\n        }\r\n\r\n        function getPreparedDeals() {\r\n            var preparedDeals = [];\r\n            var tenantTimeZone = configService.timeZone;\r\n            $.each(productDeals, function (idx, deal) {\r\n\r\n                var hasGroup = false;\r\n                $.each(preparedDeals, function (trIdx, preparedDeal) {\r\n                    if (preparedDeal.dealDiscountID === deal.dealDiscountID) {\r\n                        preparedDeal.triggers.push({\r\n                            brandID: deal.brandID,\r\n                            categoryID: deal.categoryID,\r\n                            productID: deal.productID,\r\n                            isFamily: deal.isFamily,\r\n                            tagName: deal.tagName,\r\n                            maxValue: deal.maxValue,\r\n                            minValue: deal.minValue,\r\n                            amount: deal.amount,\r\n                            discountLineType: deal.discountLineType\r\n                        });\r\n                        preparedDeal.targets = preparedDeal.targets.concat(deal.targets);\r\n                        hasGroup = true;\r\n                    }\r\n                });\r\n\r\n                if (hasGroup === false) {\r\n                    preparedDeals.push({\r\n                        amount: deal.amount,\r\n                        buyMore: deal.buyMore,\r\n                        buyValue: deal.buyValue,\r\n                        customersGroup: deal.customersGroup,\r\n                        dateFrom: !!deal.dateFrom ? deal.dateFrom + tenantTimeZone : null,\r\n                        dateTo: !!deal.dateTo ? deal.dateTo.replace(\"00:00:00\", \"23:59:59\") + tenantTimeZone : null,\r\n                        dealDiscountID: deal.dealDiscountID,\r\n                        dealID: deal.dealID,\r\n                        discountID: deal.discountID,\r\n                        discountLineType: deal.discountLineType,\r\n                        getValue: deal.getValue,\r\n                        tenantID: deal.tenantID,\r\n                        type: deal.type,\r\n                        maxValue: deal.maxValue,\r\n                        minValue: deal.minValue,\r\n                        targets: deal.targets,\r\n                        allowCoupons: deal.allowCoupons,\r\n                        singleCouponCodeUsage: deal.singleCouponCodeUsage,\r\n                        coupons: !!deal.coupons ? JSON.parse(deal.coupons) : null,\r\n                        triggers: [{\r\n                            brandID: deal.brandID,\r\n                            categoryID: deal.categoryID,\r\n                            productID: deal.productID,\r\n                            isFamily: deal.isFamily,\r\n                            tagName: deal.tagName,\r\n                            maxValue: deal.maxValue,\r\n                            minValue: deal.minValue,\r\n                            amount: deal.amount,\r\n                            discountLineType: deal.discountLineType\r\n                        }]\r\n                    });\r\n                }\r\n\r\n            });\r\n\r\n            saleService.removeDuplicates(preparedDeals);\r\n            saleService.mergeTargets(preparedDeals);\r\n\r\n            return preparedDeals;\r\n        }\r\n\r\n        saleService.getTriggerKey = function(trigger, isQuantityBased) {\r\n            var key = '@@1@@' + (!trigger.brandID ? 'null' : trigger.brandID) +\r\n                      '@@2@@' + (!trigger.categoryID ? 'null' : trigger.categoryID) +\r\n                      '@@3@@' + (!trigger.productID ? 'null' : trigger.productID) +\r\n                      '@@4@@' + (!trigger.tagName ? 'null' : trigger.tagName) +\r\n                      '@@5@@' + trigger.discountLineType;\r\n            if (isQuantityBased) {\r\n                key += '@@6@@' + (!trigger.minValue ? 'null' : trigger.minValue) +\r\n                       '@@7@@' + (!trigger.maxValue ? 'null' : trigger.maxValue);\r\n            }                      \r\n            return key;\r\n        };\r\n\r\n        saleService.getTargetKey = function(target) {\r\n            var key = '@@1@@' + (!target.brandID ? 'null' : target.brandID) +\r\n                      '@@2@@' + (!target.categoryID ? 'null' : target.categoryID) +\r\n                      '@@3@@' + (!target.productID ? 'null' : target.productID) +\r\n                      '@@4@@' + (!target.dealDiscountID ? 'null' : target.dealDiscountID) +\r\n                      '@@5@@' + (!target.tagName ? 'null' : target.tagName);\r\n            return key;\r\n        };\r\n\r\n        saleService.removeDuplicates = function(productDeals) {\r\n\r\n            $.each(productDeals, function (idx, deal) {\r\n                if(deal.triggers && Array.isArray(deal.triggers)) {\r\n                    var res = [];\r\n                    var map = {};\r\n                    var isQuantityBased = deal.type === 'Quantity Based';\r\n                    $.each(deal.triggers, function (idx, trigger) {\r\n                        var key = saleService.getTriggerKey(trigger, isQuantityBased);\r\n\r\n                        if(!map[key]) {\r\n                            res.push(trigger);\r\n                            map[key] = trigger;\r\n                        }\r\n                    });\r\n\r\n                    deal.triggers = res;\r\n                }\r\n            });\r\n        };\r\n\r\n        saleService.mergeTargets = function(productDeals) {\r\n\r\n            $.each(productDeals, function (idx, deal) {\r\n                if(deal.targets && Array.isArray(deal.targets)) {\r\n                    var res = [];\r\n                    var map = {};\r\n                    $.each(deal.targets, function (idx, target) {\r\n                        var key = saleService.getTargetKey(target);\r\n\r\n                        if(!map[key]) {\r\n                            res.push(target);\r\n                            map[key] = target;\r\n                        }\r\n                    });\r\n\r\n                    deal.target = res;\r\n                }\r\n            });\r\n        };\r\n\r\n        saleService.getProductAvailability = function (searchOpts) {\r\n            return webOnlyProvider.getProductAvailability(searchOpts);\r\n        };\r\n\r\n        saleService.getExpectedSums = function (sale, rawSale) {\r\n\r\n            var expectedSumsObj = {};\r\n            expectedSumsObj.cashExpected = 0;\r\n            expectedSumsObj.creditCardExpected = 0;\r\n            expectedSumsObj.giftCardExpected = 0;\r\n            expectedSumsObj.loyaltyExpected = 0;\r\n            expectedSumsObj.storeCreditExpected = 0;\r\n            if (sale.FinancialStatus != 'RETURN') {\r\n                // we need to check what payments we have processed already to escape from duplicates\r\n                if (!rawSale.alreadyCountedPayments) {\r\n                    rawSale.alreadyCountedPayments = {};\r\n                }\r\n\r\n                $.each(sale.Payments, function (idx, el) {\r\n                    if (rawSale.alreadyCountedPayments[el.ID] !== true) {\r\n\r\n                        rawSale.alreadyCountedPayments[el.ID] = true;\r\n\r\n                        switch (el.ShortName) {\r\n                            case \"cash\":\r\n                                expectedSumsObj.cashExpected += el.Amount;\r\n                                break;\r\n                            case \"gift card\":\r\n                                expectedSumsObj.giftCardExpected += el.Amount;\r\n                                break;\r\n                            case \"loyalty\":\r\n                                expectedSumsObj.loyaltyExpected += el.Amount;\r\n                                break;\r\n                            case \"credit card\":\r\n                                expectedSumsObj.creditCardExpected += el.Amount;\r\n                                break;\r\n                            case \"store credits\":\r\n                                expectedSumsObj.storeCreditExpected += el.Amount;\r\n                                break;\r\n                        }\r\n                    }\r\n                });\r\n\r\n            } else {\r\n                // we need to check what payments we have processed already to escape from duplicates\r\n                if (!rawSale.alreadyCountedRefunds) {\r\n                    rawSale.alreadyCountedRefunds = {};\r\n                }\r\n\r\n                $.each(sale.Refunds, function (idx, r) {\r\n                    $.each(r.Payments, function (idx, el) {\r\n                        if (rawSale.alreadyCountedRefunds[el.ID] !== true) {\r\n\r\n                            rawSale.alreadyCountedRefunds[el.ID] = true;\r\n\r\n                            switch (el.ShortName) {\r\n                                case \"cash\":\r\n                                    expectedSumsObj.cashExpected -= el.Amount;\r\n                                    break;\r\n                                case \"gift card\":\r\n                                    expectedSumsObj.giftCardExpected -= el.Amount;\r\n                                    break;\r\n                                case \"loyalty\":\r\n                                    expectedSumsObj.loyaltyExpected -= el.Amount;\r\n                                    break;\r\n                                case \"credit card\":\r\n                                    expectedSumsObj.creditCardExpected -= el.Amount;\r\n                                    break;\r\n                                case \"store credits\":\r\n                                    expectedSumsObj.storeCreditExpected -= el.Amount;\r\n                                    break;\r\n                            }\r\n                        }\r\n                    });\r\n                });\r\n            }\r\n\r\n            return expectedSumsObj;\r\n        };\r\n\r\n        /*\r\n            usage doesn't found\r\n         */\r\n        // saleService.getAdditionalTotals = function (sale, rawSale) {\r\n        //     var totalsObj = [];\r\n        //\r\n        //     if (sale.FinancialStatus != 'RETURN') {\r\n        //         var totalSum = 0;\r\n        //         // need cycle to calculate real taken sum (including any rounding)\r\n        //         //$.each(rawSale.Payments, function (idx, el){\r\n        //         //    totalSum += el.Amount;\r\n        //         //});\r\n        //\r\n        //         var calcTotal = saleService.totalSum(rawSale);\r\n        //\r\n        //         if (sale.FinancialStatus == 'LAYBY_CLOSED' ||\r\n        //             sale.FinancialStatus == 'ONACCOUNT_CLOSED' ||\r\n        //             sale.FinancialStatus == 'CLOSED') {\r\n        //\r\n        //             $.each(sale.Payments, function (idx, el) {\r\n        //                 switch (el.ShortName) {\r\n        //                     case 'Rounding':\r\n        //                         totalsObj.push({ CounterName: constants.roundingTotalName, Counter: el.Amount, CounterType: 'PAYMENT' });\r\n        //                         break;\r\n        //                 }\r\n        //             });\r\n        //\r\n        //         }\r\n        //\r\n        //         var countSales = true;\r\n        //\r\n        //         totalsObj.push({ CounterName: constants.newSaleTotalCountName, Counter: calcTotal, CounterType: 'SALE' });\r\n        //         if (sale.FinancialStatus == 'ONACCOUNT') {\r\n        //             totalsObj.push({ CounterName: constants.newOnAccountCountName, Counter: calcTotal, CounterType: 'SALE' });\r\n        //         }\r\n        //         else if (sale.FinancialStatus == 'LAYBY') {\r\n        //             totalsObj.push({ CounterName: constants.newLaybyCountName, Counter: calcTotal, CounterType: 'SALE' });\r\n        //         }\r\n        //         else if (sale.FinancialStatus == 'LAYBY_CLOSED') {\r\n        //             totalsObj.push({ CounterName: constants.newLaybyCountName, Counter: calcTotal, CounterType: 'PAYMENT' });\r\n        //             countSales = false;\r\n        //         }\r\n        //         else if (sale.FinancialStatus == 'ONACCOUNT_CLOSED') {\r\n        //             totalsObj.push({ CounterName: constants.newOnAccountCountName, Counter: calcTotal, CounterType: 'PAYMENT' });\r\n        //             countSales = false;\r\n        //         }\r\n        //         else\r\n        //             totalsObj.push({ CounterName: constants.newSaleCountName, Counter: calcTotal, CounterType: 'SALE' });\r\n        //\r\n        //         if (countSales) {\r\n        //             totalsObj.push({ CounterName: constants.newTaxCountName, Counter: rawSale.CalculatedTax, CounterType: 'SALE' });\r\n        //             totalsObj.push({ CounterName: constants.newSaleDiscountName, Counter: rawSale.discountValue, CounterType: 'SALE' });\r\n        //         }\r\n        //     }\r\n        //     else {\r\n        //         var totalSum = 0;\r\n        //         $.each(rawSale.Payments, function (idx, el) {\r\n        //             totalSum += Math.abs(el.Amount);\r\n        //         });\r\n        //\r\n        //         totalsObj.push({ CounterName: constants.refundTotalName, Counter: totalSum, CounterType: 'REFUND' });\r\n        //     }\r\n        //\r\n        //     return totalsObj;\r\n        // };\r\n\r\n        saleService.updateRegistrySales = function (ID, sale, rawSale) {\r\n            var expectedSums = saleService.getExpectedSums(sale, rawSale);\r\n            if (configService.isSite || deviceInfo.isSimulator) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            }\r\n\r\n            sale.RawSaleObject = JSON.stringify(angular.extend(rawSale, {\r\n                payloadVersion: configService.payloadVersion\r\n            }));\r\n\r\n            var provider = localDBProvider;\r\n            //var pr = provider.updateRegistrySales(ID, expectedSums.cashExpected, expectedSums.creditCardExpected,\r\n            //                                      expectedSums.giftCardExpected, expectedSums.loyaltyExpected,\r\n            //                                      expectedSums.storeCreditExpected, additionalTotals);\r\n            var pr = provider.updateRegistrySales(ID, expectedSums.cashExpected, expectedSums.creditCardExpected);\r\n            return pr;\r\n        };\r\n\r\n        // coupon operations\r\n        saleService.saleCoupons = [];\r\n\r\n        saleService.getSaleCoupons = function (couponCode) {\r\n            saleService.saleCoupons = [];\r\n            var deferred = $q.defer();\r\n            var res = [];\r\n            deferred.resolve(res);\r\n            var p = deferred.promise;\r\n\r\n            if (!configService.isSite && !deviceInfo.isSimulator)\r\n                p = p.then(function (r) {\r\n                    return localDBProvider.getSaleCoupons(couponCode)\r\n                        .then(function (data) {\r\n                            var deferred = $q.defer();\r\n                            res = res.concat(data);\r\n                            deferred.resolve(res);\r\n                            return deferred.promise;\r\n                        });\r\n                });\r\n\r\n            if (configService.isSite || configService.isOnline) {\r\n                p = p.then(function (r) {\r\n                        return remoteRequestProvider.getSaleCoupons(couponCode);\r\n                    })\r\n                    .then(function (data) {\r\n                        var deferred = $q.defer();\r\n                        res = res.concat(data.data);\r\n                        deferred.resolve(res);\r\n                        return deferred.promise;\r\n                    });\r\n            }\r\n\r\n            return p.then(function (data) {\r\n                saleService.saleCoupons = data;\r\n                var deferred = $q.defer();\r\n                deferred.resolve(data);\r\n                return deferred.promise;\r\n            });\r\n        };\r\n\r\n        saleService.checkSingleUsageCouponIsAvailable = function (couponCode) {\r\n            var foundCouponUsages = saleService.saleCoupons.filter(function (c) {\r\n                return c.CouponCode == couponCode;\r\n            });\r\n\r\n            if (foundCouponUsages.length == 0) return true;\r\n\r\n            var couponToUse = saleService.getCouponFromDealsByCode(couponCode); // get first available coupon with this code taking into account one-off\r\n            var couponsInData = saleService.getCouponFromDealsByCode(couponCode, true); // get first available coupon with this code not taking into account one-off\r\n\r\n            return couponToUse != null || couponsInData == null;\r\n        };\r\n\r\n        saleService.getCouponFromDealsByCode = function (couponCode, ignoreOneOffType) {\r\n\r\n            const foundCouponUsages = saleService.saleCoupons.filter((c) => helperService.compareStrings(c.CouponCode, couponCode));\r\n\r\n            let res = null;\r\n            angular.forEach(productDeals, function (d) {\r\n                if (d.allowCoupons === true && !!d.coupons) {\r\n\r\n                    const fnd = d.coupons.filter((c) => helperService.compareStrings(c.Code, couponCode));\r\n\r\n                    if (fnd.length > 0 && (ignoreOneOffType === true || !(d.singleCouponCodeUsage === true && foundCouponUsages.length > 0))) {\r\n\r\n                        res = $.extend({\r\n                            DealID: d.dealID\r\n                        }, fnd[0]);\r\n\r\n                        return false;\r\n                    }\r\n                }\r\n            });\r\n\r\n            return res;\r\n        };\r\n\r\n        saleService.getGiftCardCodes = function (sale) {\r\n            var ids = [];\r\n            $.each(sale.CheckoutItems, function (idx, el) {\r\n                if (el.ProductType == 'GiftCard' && !!el.GiftCardCode)\r\n                    ids.push(el.GiftCardCode);\r\n            });\r\n\r\n            return ids;\r\n        };\r\n\r\n        saleService.checkRefundAvailable = function (sale) {\r\n            var ids = saleService.getGiftCardCodes(sale);\r\n            if (!ids || ids.length == 0) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve({\r\n                    data: {\r\n                        IsRefundAvailable: true\r\n                    }\r\n                });\r\n\r\n                return deferred.promise;\r\n            }\r\n            return webOnlyProvider.isGiftCardsRefundAvailable(ids);\r\n        };\r\n\r\n        function calculateAnalyticData(sale, rawSale) {\r\n            var items = [];\r\n            var isNewSale = helperService.showNewCheckoutUI(sale);\r\n            var taxInclusive = !isNewSale ? configService.taxInclucive === \"True\" : rawSale.IsTaxInclusive;\r\n            var taxPrecision = (configService.taxCalculationMethod == 'Row Total' ? 2 : 4);\r\n\r\n            if (rawSale.CheckoutItems && rawSale.CheckoutItems.length > 0) {\r\n                for (var i = 0; i < rawSale.CheckoutItems.length; i++) {\r\n                    var elementLine = rawSale.CheckoutItems[i];\r\n\r\n                    var sign = elementLine.Count >= 0 ? 1 : -1;\r\n\r\n                    //if (elementLine.return != true) {\r\n                    var newItem = {\r\n                        OutletName: configService.lastOutlet,\r\n                        PosOutletID: configService.lastOutletID,\r\n                        PosRegistryName: configService.lastRegistry,\r\n                        PosRegistryID: configService.lastRegistryID,\r\n                        Type: elementLine.return === true ? 'c' : 'p',\r\n                        FamilyID: elementLine.FamilyID,\r\n                        ProductID: elementLine.ProductID,\r\n                        ProductSKU: elementLine.Sku,\r\n                        ProductName: elementLine.Name,\r\n                        ProductOption1: elementLine.Option1,\r\n                        ProductOption2: elementLine.Option2,\r\n                        ProductOption3: elementLine.Option3,\r\n                        UserName: configService.lastUserName,\r\n                        TaxesIncluded: taxInclusive,\r\n                        BasePrice: (isNewSale && sign < 0) ? elementLine.BasePrice * -1 : elementLine.BasePrice,\r\n                        Price: (isNewSale && sign < 0) ? elementLine.Price * -1 : elementLine.Price,\r\n                        Quantity: isNewSale ? Math.abs(elementLine.Count) : elementLine.Count,\r\n                        SalesRepresentative: sale.SalesRepresentative\r\n                    };\r\n\r\n                    if (elementLine.return === true) {\r\n                        if (!isNewSale) {\r\n                            newItem.Total = -1 * helperService.DEARRound(elementLine.PriceWithDiscount * parseInt(elementLine.Count), 2);\r\n                            newItem.Tax = -1 * helperService.DEARRound(saleService.calculateTax(elementLine.Taxes, elementLine.Count * elementLine.BasePriceWithDiscount, taxInclusive), taxPrecision);\r\n                            newItem.Price = -1 * elementLine.PriceWithDiscount;\r\n                        } else {\r\n                            newItem.Total = helperService.DEARRound(elementLine.FinalAmount, 2);\r\n                            newItem.Tax = helperService.DEARRound(elementLine.FinalTaxAmount, taxPrecision);\r\n                            newItem.Price = sign < 0 ? elementLine.FinalPrice * -1 : elementLine.FinalPrice;\r\n                        }\r\n                    } else {\r\n                        if (!isNewSale) {\r\n                            newItem.Total = elementLine.Amount;\r\n                            newItem.Tax = elementLine.Tax;\r\n                        } else {\r\n                            newItem.Total = elementLine.FinalAmount;\r\n                            newItem.Tax = elementLine.FinalTaxAmount;\r\n                        }\r\n                    }\r\n\r\n                    items.push(newItem);\r\n                }\r\n            }\r\n\r\n            var srches = !!sale.Surcharges && sale.Surcharges.length > 0 ? sale.Surcharges : null;\r\n            if (isNewSale) {\r\n                // srches = CalculatorHelperService.getSurcharges(sale);\r\n                srches = CalculatorHelperService.getSurcharges(rawSale);\r\n            }\r\n\r\n            if (srches) {\r\n\r\n                var _surcharges = {};\r\n\r\n                for (var i = 0; i < srches.length; i++) {\r\n                    var surcharge = srches[i];\r\n\r\n                    if (typeof _surcharges[surcharge.SurchargeID] === 'undefined') {\r\n                        _surcharges[surcharge.SurchargeID] = {\r\n                            ProductID: surcharge.SurchargeID,\r\n                            OutletName: configService.lastOutlet,\r\n                            PosOutletID: configService.lastOutletID,\r\n                            PosRegistryName: configService.lastRegistry,\r\n                            PosRegistryID: configService.lastRegistryID,\r\n                            SurchargeName: surcharge.Name,\r\n                            SurchargeRate: surcharge.Value,\r\n                            SurchargeRateType: surcharge.Type,\r\n                            SurchargePaymentAmount: surcharge.PaymentRealAmount,\r\n                            Type: 's',\r\n                            UserName: configService.lastUserName,\r\n                            TaxesIncluded: taxInclusive,\r\n                            BasePrice: 0,\r\n                            Price: surcharge.Total,\r\n                            Quantity: 1,\r\n                            Tax: surcharge.Tax,\r\n                            Total: surcharge.Total,\r\n                            SalesRepresentative: sale.SalesRepresentative\r\n                        };\r\n                    } else {\r\n                        _surcharges[surcharge.SurchargeID].Price += surcharge.Total;\r\n                        _surcharges[surcharge.SurchargeID].Tax += surcharge.Tax;\r\n                        _surcharges[surcharge.SurchargeID].Total += surcharge.Total;\r\n                        _surcharges[surcharge.SurchargeID].SurchargePaymentAmount += surcharge.PaymentRealAmount;\r\n                    }\r\n                }\r\n\r\n                for (var id in _surcharges) {\r\n                    var item = _surcharges[id];\r\n\r\n                    item.Price = helperService.DEARRound(item.Price, 2);\r\n                    item.Tax = helperService.DEARRound(item.Tax, 2);\r\n                    item.Total = helperService.DEARRound(item.Total, 2);\r\n\r\n                    items.push(item);\r\n                }\r\n            }\r\n\r\n            if (!isNewSale) {\r\n                if (rawSale.discountValue > 0 || rawSale.Discount > 0) {\r\n                    var newItem = {\r\n                        OutletName: configService.lastOutlet,\r\n                        PosOutletID: configService.lastOutletID,\r\n                        PosRegistryName: configService.lastRegistry,\r\n                        PosRegistryID: configService.lastRegistryID,\r\n                        Type: 'd',\r\n                        UserName: configService.lastUserName,\r\n                        TaxesIncluded: taxInclusive,\r\n                        BasePrice: 0,\r\n                        Price: -1 * rawSale.discountValue,\r\n                        Quantity: 1,\r\n                        Tax: rawSale.DiscountTax,\r\n                        Total: -1 * rawSale.discountValue,\r\n                        SalesRepresentative: sale.SalesRepresentative\r\n                    };\r\n\r\n                    items.push(newItem);\r\n                }\r\n            } else {\r\n                if (rawSale.DiscountValue > 0 || rawSale.Discount > 0) {\r\n                    var newItem = {\r\n                        OutletName: configService.lastOutlet,\r\n                        PosOutletID: configService.lastOutletID,\r\n                        PosRegistryName: configService.lastRegistry,\r\n                        PosRegistryID: configService.lastRegistryID,\r\n                        Type: 'd',\r\n                        UserName: configService.lastUserName,\r\n                        TaxesIncluded: taxInclusive,\r\n                        BasePrice: 0,\r\n                        Price: -1 * rawSale.DiscountValue,\r\n                        Quantity: 1,\r\n                        Tax: rawSale.DiscountTax,\r\n                        Total: -1 * rawSale.DiscountValue,\r\n                        SalesRepresentative: sale.SalesRepresentative\r\n                    };\r\n\r\n                    items.push(newItem);\r\n                }\r\n            }\r\n\r\n            var rnd = !isNewSale && Math.abs(rawSale.CashRounding) > 0 && typeof rawSale.FullReturnRounding === 'undefined' ?\r\n                rawSale.CashRounding : 0;\r\n            if (isNewSale)\r\n                rnd = CalculatorHelperService.getRoundingsFromPayments(rawSale);\r\n            if (Math.abs(rnd) > 0) {\r\n                var rsum = helperService.DEARRound(rnd, 2);\r\n\r\n                var newItem = {\r\n                    OutletName: configService.lastOutlet,\r\n                    PosOutletID: configService.lastOutletID,\r\n                    PosRegistryName: configService.lastRegistry,\r\n                    PosRegistryID: configService.lastRegistryID,\r\n                    Type: 'r',\r\n                    UserName: configService.lastUserName,\r\n                    TaxesIncluded: taxInclusive,\r\n                    BasePrice: 0,\r\n                    Price: rsum,\r\n                    Quantity: 1,\r\n                    Tax: 0,\r\n                    Total: rsum,\r\n                    SalesRepresentative: sale.SalesRepresentative\r\n                };\r\n\r\n                items.push(newItem);\r\n            }\r\n\r\n            if (!isNewSale && !!rawSale.FullReturnRounding && Math.abs(rawSale.FullReturnRounding) > 0) {\r\n                var newItem = {\r\n                    OutletName: configService.lastOutlet,\r\n                    PosOutletID: configService.lastOutletID,\r\n                    PosRegistryName: configService.lastRegistry,\r\n                    PosRegistryID: configService.lastRegistryID,\r\n                    Type: 'r',\r\n                    UserName: configService.lastUserName,\r\n                    TaxesIncluded: taxInclusive,\r\n                    BasePrice: 0,\r\n                    Price: helperService.DEARRound(-1 * rawSale.FullReturnRounding, 2),\r\n                    Quantity: 1,\r\n                    Tax: 0,\r\n                    Total: helperService.DEARRound(-1 * rawSale.FullReturnRounding, 2),\r\n                    SalesRepresentative: sale.SalesRepresentative\r\n                };\r\n\r\n                items.push(newItem);\r\n            }\r\n\r\n            return items;\r\n        }\r\n\r\n        saleService.surchargeSum = function (currentSale) {\r\n            var surchargeAmount = 0;\r\n            if (!!currentSale.Surcharges && currentSale.Surcharges.length > 0) {\r\n                $.each(currentSale.Surcharges, function (idx, el) {\r\n                    surchargeAmount += el.CalculatedValue;\r\n                });\r\n            }\r\n\r\n            return surchargeAmount;\r\n        };\r\n\r\n        saleService.surchargeTaxSum = function (currentSale) {\r\n            var surchargeTaxAmount = 0;\r\n            if (!!currentSale.Surcharges && currentSale.Surcharges.length > 0) {\r\n                $.each(currentSale.Surcharges, function (idx, el) {\r\n                    surchargeTaxAmount += el.Tax;\r\n                });\r\n            }\r\n\r\n            return surchargeTaxAmount;\r\n        };\r\n\r\n        saleService.addSaleToQueue = function (sale, rawSale, info) {\r\n            var obj = {\r\n                sale: sale,\r\n                rawSale: rawSale,\r\n                info: info\r\n            };\r\n\r\n            var queue = helperService.getSaleQueue();\r\n            if (!queue)\r\n                queue = [];\r\n\r\n            queue.push(obj);\r\n            helperService.storeSaleQueue(queue);\r\n            // at this moment sale is in queue so we can remove it from local storage\r\n            helperService.storeCurrentSale(null);\r\n        };\r\n\r\n        saleService.queueToSendIsInProcess = false;\r\n\r\n        saleService.processQueueToSend = function () {\r\n\r\n            if (saleService.queueToSendIsInProcess) return;\r\n            // extract first\r\n            var obj = helperService.getQueueSaleToSend();\r\n            if (!obj) {\r\n                $rootScope.$broadcast(constants.events.HEADER_SYNC_STATUS_EVENT, constants.events.STATUS_OK_AFTER_ERROR_SEND);\r\n                return;\r\n            }\r\n\r\n            saleService.queueToSendIsInProcess = true;\r\n\r\n            configService.pingFunction();\r\n\r\n            // to support old versions, let empty applicarionid to pass through\r\n            if ((!!obj.info.applicationID && obj.info.applicationID != configService.applicationID) ||\r\n                (!!obj.info.tenantID && obj.info.tenantID != configService.tenantID)) {\r\n                // helperService.processQueueToSendFail(obj);\r\n                saleService.queueToSendIsInProcess = false;\r\n                return helperService.resolvePromise(false);\r\n            }\r\n\r\n            saleService.processSale(obj.sale, obj.rawSale, obj.info)\r\n                .then(function (res) {\r\n                    if (res && typeof res.status !== 'undefined' && res.status === -2) {\r\n                        obj.info.statusID = saleService.OfflineStatus.ErrorHistory;\r\n                        var storeProvider = configService.isSite || deviceInfo.isSimulator ? jsStoreProvider : localDBProvider;\r\n                        return storeProvider.addOfflineSale(obj.rawSale, obj.info, configService.isSite ? res.message : undefined).then(function() {\r\n                            helperService.processQueueToSendSuccess(obj);\r\n                            saleService.queueToSendIsInProcess = false;\r\n                            return saleService.processQueueToSend();\r\n                        });\r\n                    } else {\r\n                        helperService.processQueueToSendSuccess(obj);\r\n                        saleService.queueToSendIsInProcess = false;\r\n                        return saleService.processQueueToSend();\r\n                    }\r\n                }, function (err) {\r\n                    // return back record and get new\r\n                    helperService.processQueueToSendFail(obj);\r\n                    $rootScope.$broadcast(constants.events.HEADER_SYNC_STATUS_EVENT, constants.events.STATUS_ERROR_SEND_ORDER);\r\n                    saleService.queueToSendIsInProcess = false;\r\n                });\r\n\r\n        };\r\n\r\n        if (configService.isSite) {\r\n            $interval(function () {\r\n                saleService.processQueueToSend();\r\n            }, 5 * 1000); // check each 5 sec.\r\n        }\r\n\r\n        saleService.surchargeCacheLastLoad = null;\r\n        saleService.surchargeCache = null;\r\n\r\n        saleService.getSurcharge = function () {\r\n            var deferred = $q.defer();\r\n            deferred.resolve(null);\r\n            var pr = deferred.promise;\r\n\r\n            var currentDate = new Date();\r\n            if (saleService.surchargeCacheLastLoad == null || saleService.surchargeCacheLastLoad.getTime() + 15 * 1000 < currentDate.getTime()) {\r\n\r\n                pr = pr.then(function () {\r\n                        return webOnlyProvider.loadSurcharges();\r\n                    })\r\n                    .then(function (res) {\r\n\r\n                        saleService.surchargeCache = res.data.Surcharges;\r\n                        saleService.surchargeCacheLastLoad = currentDate;\r\n                        if (!configService.isSite && !deviceInfo.isSimulator) {\r\n                            return localDBProvider.savePOSData(configService.applicationID, 'Surcharges',\r\n                                    JSON.stringify(saleService.surchargeCache))\r\n                                .then(function () {\r\n                                    return helperService.resolvePromise(saleService.surchargeCache);\r\n                                });\r\n                        } else\r\n                            return helperService.resolvePromise(saleService.surchargeCache);\r\n                    })\r\n                    .catch(function (err) {\r\n                        if (!configService.isSite && !deviceInfo.isSimulator && err.status === -1) {\r\n                            return localDBProvider.getPOSData(configService.applicationID, 'Surcharges')\r\n                                .then(function (res) {\r\n                                    if (res == null) {\r\n                                        saleService.surchargeCache = null;\r\n                                        return helperService.rejectPromise(null);\r\n                                    } else {\r\n                                        saleService.surchargeCache = JSON.parse(res.Data);\r\n                                        return helperService.resolvePromise(saleService.surchargeCache);\r\n                                    }\r\n                                });\r\n                        } else if (err.status !== -1 || saleService.surchargeCache == null) {\r\n                            saleService.surchargeCache = null;\r\n                            return helperService.rejectPromise(err);\r\n                        } else {\r\n                            return helperService.resolvePromise(saleService.surchargeCache);\r\n                        }\r\n                    });\r\n            } else {\r\n                pr = pr.then(function () {\r\n                    return helperService.resolvePromise(saleService.surchargeCache);\r\n                });\r\n            }\r\n\r\n            return pr.then(function (surcharges) {\r\n                var surchargeTax = configService.lastSurchargeTax ? JSON.parse(configService.lastSurchargeTax) : null;\r\n                if (!!surcharges && !!surchargeTax) {\r\n                    $.each(surcharges, function (idx, s) {\r\n                        s.TaxRuleID = surchargeTax.ruleID;\r\n                    });\r\n\r\n                    return helperService.resolvePromise(surcharges);\r\n                }\r\n            });\r\n        };\r\n\r\n        // this function will try to build sequence of most possible\r\n        // banknote denominations that can be used to pay specified amount\r\n        saleService.predictCashPayments = function (sumToPay) {\r\n            var denominations = configService.banknoteDenominations; // array of available banknotes\r\n            if (!denominations || denominations.length === 0 || !sumToPay || sumToPay < 0) return []; // nothing to calculate\r\n\r\n            var res = [];\r\n            var minInteger = Math.ceil(sumToPay); // nearest not less integer\r\n\r\n            var jq = Enumerable.from(denominations)\r\n                .where(function (x) {\r\n                    return x.Nominal < minInteger;\r\n                })\r\n                .select(function (x) {\r\n                    return x.Nominal;\r\n                });\r\n\r\n            var twoBanknoteCombinations = jq.join(jq,\r\n                    function (t) {\r\n                        return 1;\r\n                    },\r\n                    function (u) {\r\n                        return 1;\r\n                    },\r\n                    function (t, u) {\r\n                        return {\r\n                            first: t,\r\n                            second: u\r\n                        };\r\n                    })\r\n                .distinct(function (x) {\r\n                    return x.first + x.second;\r\n                })\r\n                .where(function (x) {\r\n                    return x.first + x.second > minInteger;\r\n                })\r\n                .select(function (x) {\r\n                    return x.first + x.second;\r\n                });\r\n\r\n            var oneBanknotes = Enumerable.from(denominations)\r\n                .where(function (x) {\r\n                    return x.Nominal > minInteger;\r\n                })\r\n                .select(function (x) {\r\n                    return x.Nominal;\r\n                });\r\n\r\n            res = Enumerable.from([minInteger])\r\n                .union(twoBanknoteCombinations)\r\n                .union(oneBanknotes)\r\n                .where(function (x) {\r\n                    return x > sumToPay;\r\n                })\r\n                .distinct()\r\n                .orderBy()\r\n                .take(4)\r\n                .toArray();\r\n\r\n            return res;\r\n        };\r\n\r\n        // enum all sale products and call callback\r\n        // sale is from server call, i.e. formatted as API structure\r\n        // callback(item, isDirectSaleData)\r\n        saleService.goThroughEntireSaleItems = function (sale, callback) {\r\n            $.each(sale.Data.Lines, function (i, l) {\r\n                callback(l, true);\r\n            });\r\n\r\n            $.each(sale.Data.Refunds, function (i, ref) {\r\n                $.each(ref.Lines, function (i, l) {\r\n                    callback(l, false);\r\n                });\r\n            });\r\n        };\r\n\r\n        saleService.goThroughEntireSalePayments = function (sale, callback) {\r\n            $.each(sale.Data.Payments, function (i, p) {\r\n                callback(p, true);\r\n            });\r\n\r\n            $.each(sale.Data.Refunds, function (i, ref) {\r\n                $.each(ref.Payments, function (i, p) {\r\n                    callback(p, false);\r\n                });\r\n            });\r\n        };\r\n\r\n        saleService.goThroughEntireSaleSurcharges = function (sale, callback) {\r\n            $.each(sale.Data.Surcharges, function (i, s) {\r\n                callback(s, true);\r\n            });\r\n\r\n            $.each(sale.Data.Refunds, function (i, ref) {\r\n                $.each(ref.Surcharges, function (i, s) {\r\n                    callback(s, false);\r\n                });\r\n            });\r\n        };\r\n\r\n        saleService.formPaymentID = function (el) {\r\n            var ptp = el.ShortName;\r\n            if (ptp.indexOf(\"BackofficePayment_\") === 0) {\r\n                ptp = \"BackofficePayment_\";\r\n            }\r\n\r\n            var res = null;\r\n\r\n            switch (ptp) {\r\n                case 'loyalty':\r\n                case 'gift card':\r\n                case 'BackofficePayment_':\r\n                case 'store credits':\r\n                case 'cash':\r\n                    res = ptp + '@@1@@';\r\n                    break;\r\n                case 'credit card':\r\n                    res = 'credit card@@1@@' + el.ServerTransactionID + '@@2@@' + el.ClientTransactionID + '@@3@@';\r\n                    if (el.Surcharge)\r\n                        res += el.Surcharge.SurchargeID + '@@4@@';\r\n                    break;\r\n                default:\r\n                    if (!saleService.isStandardPaymentType(ptp)) {\r\n                        res = ptp + '@@1@@';\r\n                        if (el.Surcharge) {\r\n                            res += '@@2@@@@3@@' + el.Surcharge.SurchargeID + '@@4@@';\r\n                        }\r\n                    }\r\n                    break;\r\n            }\r\n\r\n            return res;\r\n        };\r\n\r\n        saleService.formSurchargeID = function (el) {\r\n            var ptp = el.PaymentShortName;\r\n            if (ptp.indexOf(\"BackofficePayment_\") === 0) {\r\n                ptp = \"BackofficePayment_\";\r\n            }\r\n\r\n            var res = null;\r\n\r\n            switch (ptp) {\r\n                case 'loyalty':\r\n                case 'gift card':\r\n                case 'BackofficePayment_':\r\n                case 'store credits':\r\n                case 'cash':\r\n                    res = ptp + '@@1@@';\r\n                    break;\r\n                case 'credit card':\r\n                    res = 'credit card@@1@@' + el.ServerTransactionID + '@@2@@' + el.ClientTransactionID + '@@3@@';\r\n                    res += el.SurchargeID + '@@4@@';\r\n                    break;\r\n                default:\r\n                    if (!saleService.isStandardPaymentType(ptp)) {\r\n                        res = ptp + '@@1@@';\r\n                        res += '@@2@@@@3@@' + el.SurchargeID + '@@4@@';\r\n                    }\r\n                    break;\r\n            }\r\n\r\n            return res;\r\n        };\r\n\r\n        saleService.getAmountWithoutSurcharge = function (payment) {\r\n            if (!payment.Surcharge)\r\n                return payment.Amount;\r\n\r\n            return payment.Amount -\r\n                (payment.InitialSurcharge ?\r\n                    payment.InitialSurcharge.CalculatedValueWithTax :\r\n                    payment.Surcharge.CalculatedValueWithTax);\r\n        };\r\n\r\n        // this one will recalculate surcharges to refund in according with: https://dearsystems.atlassian.net/wiki/spaces/DDD/pages/974487676/Surcharge+calculations+during+sale+payment+refund+exchange\r\n        // grouped sale contains combine grouped sale created from initial sale and all its refunds/exchanges\r\n        // so groupedSale represents final state of sale, i.e. what products are sold finally excluding refunded\r\n        // and what final payments are done excluding refunds\r\n        // paymentValidation - object with amount limits. For custom payments and card payments it also\r\n        // contains sums to pay and surcharges to pay and limits\r\n        // payments - contains cash,storecredit, loyalty limits and amounts.\r\n        // this should be expanded by cashSurcharge, storeCreditSurcharge and loyaltySurcharge\r\n        // at first credit card/ custom methods are processed and surcharge is defined\r\n        // only after this cash/storecredit/loyalty points surcharges are calculated\r\n        saleService.recalcRefundSurcharges = function (groupedSale, paymentValidation, payments, changedFieldType) {\r\n            if (!groupedSale) return;\r\n\r\n            // calculate cash surcharge refund limit\r\n            //  (TotalSurcharge - SUM(CardSurchargeToRefundAmount))*(MAX(TotalToRefund -RestCashToRefund, 0)/TotalSale)\r\n            // get rest of cash payments\r\n            var totalToRefund = groupedSale.TotalToRefund - groupedSale.ExchangeAmount;\r\n\r\n            var cashPayments = helperService.mapToList(groupedSale.PaymentsMap).filter(function (p) {\r\n                return p.ShortName === 'cash';\r\n            });\r\n            var cashRest = cashPayments.length > 0 ? Math.max(cashPayments[0].Amount, 0) : 0;\r\n\r\n            var cashSurchargeLimit = helperService.DEARRound(groupedSale.TotalSale <= 0 ? 0 :\r\n                (groupedSale.TotalSurcharge + groupedSale.GhostSurcharge - saleService.cardNCustomSurchargeRefunds(paymentValidation)) *\r\n                (totalToRefund / groupedSale.TotalSale), 2);\r\n\r\n            if (cashRest > payments.cash) {\r\n                // we still refund cash\r\n                cashSurchargeLimit = 0;\r\n            }\r\n\r\n            var storeCreditSurchargeLimit = helperService.DEARRound(groupedSale.TotalSale <= 0 ? 0 :\r\n                (groupedSale.TotalSurcharge + groupedSale.GhostSurcharge - saleService.cardNCustomSurchargeRefunds(paymentValidation)) *\r\n                (totalToRefund / groupedSale.TotalSale), 2);\r\n\r\n            if (changedFieldType) {\r\n                storeCreditSurchargeLimit -= payments.cashSurcharge;\r\n                if (storeCreditSurchargeLimit < 0) {\r\n                    storeCreditSurchargeLimit = 0;\r\n                    payments.storeCreditSurcharge = 0;\r\n                }\r\n\r\n                cashSurchargeLimit -= payments.storeCreditSurcharge;\r\n                if (cashSurchargeLimit < 0) {\r\n                    cashSurchargeLimit = 0;\r\n                    payments.cashSurcharge = 0;\r\n                }\r\n            } else {\r\n                payments.cashSurcharge = 0;\r\n                payments.storeCreditSurcharge = 0;\r\n            }\r\n\r\n            paymentValidation.cashSurchargeAmount = cashSurchargeLimit;\r\n            paymentValidation.storeCreditSurchargeAmount = storeCreditSurchargeLimit;\r\n            payments.cashRounded = helperService.roundCash(payments.cash + payments.cashSurcharge);\r\n        };\r\n\r\n        // we know surcharges, refunded by cash/storecredit, so we need to reduce limits for all payment surcharge related\r\n        // methods\r\n        saleService.prepareSurchargeLimits = function (groupedSale, paymentValidation) {\r\n            if (!groupedSale) return;\r\n\r\n            var coeff = groupedSale.TotalSurcharge <= 0 ? 0 : (groupedSale.TotalSurcharge + groupedSale.GhostSurcharge) / groupedSale.TotalSurcharge;\r\n            if (coeff < 0) coeff = 0; // to compensate possible rounding error\r\n\r\n            var totalToRefund = groupedSale.TotalToRefund - groupedSale.ExchangeAmount;\r\n\r\n            $.each(paymentValidation.customPayments, function (i, p) {\r\n                if (p.Surcharge) {\r\n                    var src = groupedSale.PaymentsMap[p.id];\r\n                    var sm = src.Amount - (!src.InitialSurcharge ? 0 : src.InitialSurcharge.CalculatedValueWithTax);\r\n                    if (sm < 0)\r\n                        sm = 0;\r\n\r\n                    if (coeff && sm > 0)\r\n                        coeff *= Math.min(totalToRefund, sm) / sm;\r\n\r\n                    p.validationAmount = helperService.DEARRound(Math.min(totalToRefund, sm), 2);\r\n\r\n                    if (p.Surcharge.RefundSurcharge === true && coeff > 0 && src.InitialSurcharge.CalculatedValueWithTax > 0) {\r\n                        p.Surcharge.CalculatedValueWithTax = helperService.DEARRound(coeff * src.InitialSurcharge.CalculatedValueWithTax, 2);\r\n                        p.Surcharge.CalculatedValue = helperService.DEARRound(coeff * src.InitialSurcharge.CalculatedValue, 2);\r\n                        p.Surcharge.Tax = helperService.DEARRound(coeff * src.InitialSurcharge.Tax, 2);\r\n                    } else {\r\n                        p.Surcharge.CalculatedValueWithTax = 0;\r\n                        p.Surcharge.CalculatedValue = 0;\r\n                        p.Surcharge.Tax = 0;\r\n                    }\r\n                    p.Surcharge.AmountToRefund = 0;\r\n                    p.Surcharge.TaxToRefund = 0;\r\n                }\r\n            });\r\n\r\n            var map = helperService.mapToList(paymentValidation.cardPayments);\r\n            cardPayService.createCardPaymentMap(groupedSale);\r\n\r\n            $.each(map, function (i, p) {\r\n                if (p.Surcharge) {\r\n                    //                    var src = groupedSale.PaymentsMap[p.id];\r\n                    var src = groupedSale.PaymentsMap[p.Surcharge.PaymentID];\r\n                    if (!src)\r\n                        src = groupedSale.PaymentsMap2[p.id];\r\n\r\n                    if (coeff && p.validationAmount > 0)\r\n                        coeff *= Math.min(totalToRefund, p.validationAmount) / (!p.initialValidationPayment ? p.validationAmount : p.initialValidationPayment); //p.validationAmount;\r\n\r\n                    p.validationAmount = helperService.DEARRound(Math.min(totalToRefund, p.validationAmount), 2);\r\n\r\n                    if (p.Surcharge.RefundSurcharge === true && coeff > 0 && src.InitialSurcharge.CalculatedValueWithTax > 0) {\r\n                        p.Surcharge.CalculatedValueWithTax = helperService.DEARRound(coeff * src.InitialSurcharge.CalculatedValueWithTax, 2);\r\n                        p.Surcharge.CalculatedValue = helperService.DEARRound(coeff * src.InitialSurcharge.CalculatedValue, 2);\r\n                        p.Surcharge.Tax = helperService.DEARRound(coeff * src.InitialSurcharge.Tax, 2);\r\n                    } else {\r\n                        p.Surcharge.CalculatedValueWithTax = 0;\r\n                        p.Surcharge.CalculatedValue = 0;\r\n                        p.Surcharge.Tax = 0;\r\n                    }\r\n                    p.Surcharge.AmountToRefund = 0;\r\n                    p.Surcharge.TaxToRefund = 0;\r\n                }\r\n            });\r\n        };\r\n\r\n        saleService.cardNCustomSurchargeRefunds = function (paymentValidation) {\r\n            var sum = 0;\r\n            $.each(paymentValidation.customPayments, function (i, p) {\r\n                if (p.Surcharge)\r\n                    sum += p.Surcharge.AmountToRefund;\r\n            });\r\n            $.each(helperService.mapToList(paymentValidation.cardPayments), function (i, p) {\r\n                if (p.Surcharge)\r\n                    sum += p.Surcharge.AmountToRefund;\r\n            });\r\n\r\n            return sum;\r\n        };\r\n\r\n        saleService.cardNCustomSelectedRefunds = function (paymentValidation) {\r\n            var sum = 0;\r\n            $.each(paymentValidation.customPayments, function (i, p) {\r\n                sum += p.amount;\r\n            });\r\n            $.each(helperService.mapToList(paymentValidation.cardPayments), function (i, p) {\r\n                sum += p.amount;\r\n            });\r\n\r\n            return sum;\r\n        };\r\n\r\n        saleService.calcSelectedSurcharges = function (payments, paymentValidation) {\r\n            if (!payments) return 0;\r\n\r\n            if (!payments.cashSurcharge)\r\n                payments.cashSurcharge = 0;\r\n            if (!payments.storeCreditSurcharge)\r\n                payments.storeCreditSurcharge = 0;\r\n            return helperService.DEARRound(payments.cashSurcharge + payments.storeCreditSurcharge +\r\n                saleService.cardNCustomSurchargeRefunds(paymentValidation), 2);\r\n        };\r\n\r\n        saleService.calcTotalPay = function (payments, paymentValidation) {\r\n            if (!payments || !paymentValidation) return 0;\r\n            var sum = 0;\r\n            if (payments.cashRounded)\r\n                sum += payments.cashRounded;\r\n            if (payments.cashSurcharge)\r\n                sum -= payments.cashSurcharge;\r\n            if (payments.storeCredit)\r\n                sum += payments.storeCredit;\r\n            if (payments.loyaltyPoints)\r\n                sum += payments.loyaltyPoints;\r\n            return helperService.DEARRound(sum + saleService.cardNCustomSelectedRefunds(paymentValidation), 2);\r\n        };\r\n\r\n        saleService.createGhostSurchargeToRefund = function (currentSale, paymentShortName, surchargeAmountToRefund, paymentAmount) {\r\n            var isNewSale = helperService.showNewCheckoutUI(currentSale);\r\n\r\n            var surcharge = {};\r\n            surcharge.Name = \"Surcharge via \" + paymentShortName;\r\n            surcharge.SurchargeID = uuid2.newguid();\r\n            surcharge.CalculatedValue = -1 * helperService.DEARRound(surchargeAmountToRefund, 2);\r\n            surcharge.Tax = 0;\r\n            surcharge.TaxRuleID = '00000000-0000-0000-0000-000000000000';\r\n            surcharge.CalculatedValueWithTax = surcharge.CalculatedValue;\r\n            surcharge.PaymentRealAmount = paymentAmount;\r\n            surcharge.PaymentShortName = paymentShortName; // this is the mark of ghost surcharge\r\n            if (!isNewSale)\r\n                currentSale.Surcharges.push(surcharge);\r\n            else\r\n                CalculatorHelperService.addGhostSurcharge(currentSale, surcharge, paymentShortName);\r\n        };\r\n\r\n        saleService.calculateRefundSurcharges = function (currentSale) {\r\n            if (currentSale && currentSale.GroupedSale && currentSale.GroupedSale.PaymentsMap) {\r\n                currentSale.SurchargeTaxToRefund = 0;\r\n                currentSale.SurchargeToRefund = 0;\r\n\r\n                $.each(helperService.mapToList(currentSale.GroupedSale.PaymentsMap), function (i, p) {\r\n                    if (p.Surcharge && p.Surcharge.RefundSurcharge === true && p.Surcharge.AmountToRefund) {\r\n                        currentSale.SurchargeToRefund += p.Surcharge.AmountToRefund;\r\n                        currentSale.SurchargeTaxToRefund += p.Surcharge.TaxToRefund;\r\n                    }\r\n                });\r\n            }\r\n        };\r\n\r\n        saleService.addExchangeAmountToGroupedSale = function (currentSale, isTaxInclusive) {\r\n            currentSale.GroupedSale.ExchangeAmount = 0;\r\n            $.each(currentSale.CheckoutItems, function (i, el) {\r\n                if (el.Amount > 0)\r\n                    currentSale.GroupedSale.ExchangeAmount += el.Amount + (isTaxInclusive !== true ? el.Tax : 0);\r\n            });\r\n\r\n            currentSale.GroupedSale.ExchangeAmount = helperService.DEARRound(currentSale.GroupedSale.ExchangeAmount, 2);\r\n        };\r\n\r\n        saleService.getProductDeals = function () {\r\n            return productDeals;\r\n        };\r\n\r\n        saleService.setPaymentLimits = function (scope, paymentType, sumRest) {\r\n            sumRest = helperService.DEARRound(sumRest, 2);\r\n\r\n            switch (paymentType) {\r\n                case 'cash':\r\n                    scope.refundDialogItem.OldAmount = scope.payments.cash;\r\n                    scope.refundDialogItem.Amount = !scope.payments.cash ?\r\n                        Math.min(scope.paymentValidation.cashAmount, sumRest) :\r\n                        scope.payments.cash;\r\n                    break;\r\n                case 'cashSurcharge':\r\n                    scope.refundDialogItem.OldAmount = scope.payments.cashSurcharge;\r\n                    scope.refundDialogItem.Amount = !scope.payments.cashSurcharge ?\r\n                        scope.paymentValidation.cashSurchargeAmount :\r\n                        scope.payments.cashSurcharge;\r\n                    break;\r\n                case 'storeCredit':\r\n                    scope.refundDialogItem.OldAmount = scope.payments.storeCredit;\r\n                    scope.refundDialogItem.Amount = !scope.payments.storeCredit ?\r\n                        Math.min(scope.paymentValidation.storeCreditAmount, sumRest) :\r\n                        scope.payments.storeCredit;\r\n                    break;\r\n                case 'storeCreditSurcharge':\r\n                    scope.refundDialogItem.OldAmount = scope.payments.storeCreditSurcharge;\r\n                    scope.refundDialogItem.Amount = !scope.payments.storeCreditSurcharge ?\r\n                        scope.paymentValidation.storeCreditSurchargeAmount :\r\n                        scope.payments.storeCreditSurcharge;\r\n                    break;\r\n                case 'loyaltyPoints':\r\n                    scope.refundDialogItem.OldAmount = scope.payments.loyaltyPoints;\r\n                    scope.refundDialogItem.Amount = !scope.payments.loyaltyPoints ?\r\n                        Math.min(scope.paymentValidation.loyaltyPointsAmount, sumRest) :\r\n                        scope.payments.loyaltyPoints;\r\n                    break;\r\n                case 'creditCard':\r\n                    var eid = scope.refundDialogItem.elementId;\r\n                    var val = scope.paymentValidation.cardPayments[eid].amount;\r\n                    scope.refundDialogItem.OldAmount = val;\r\n                    var valAmount = helperService.DEARRound(scope.paymentValidation.cardPayments[eid].validationAmount, 2);\r\n\r\n                    scope.refundDialogItem.Amount = !val ? Math.min(valAmount, sumRest) : val;\r\n                    break;\r\n\r\n                default:\r\n                    var eid = scope.refundDialogItem.elementId;\r\n                    var cp = scope.paymentValidation.customPayments.filter(function (el) {\r\n                        return el.id === eid;\r\n                    });\r\n                    scope.refundDialogItem.OldAmount = cp[0].amount;\r\n                    scope.refundDialogItem.Amount = !cp[0].amount ? Math.min(cp[0].validationAmount, sumRest) : cp[0].amount;\r\n                    break;\r\n            }\r\n        };\r\n\r\n        saleService.setRefundAmount = function ($scope, prm, isTaxInclusive, skipDialog) {\r\n            $scope.changepPaymentAmount();\r\n\r\n            if (skipDialog !== true) {\r\n                $timeout(function () {\r\n                    $scope.refundPaymentAmountDlg.hide(true);\r\n                });\r\n            }\r\n            $timeout(function () {\r\n                $scope.refundDialogItem.Amount = parseFloat($scope.refundDialogItem.Amount);\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                var prms = {\r\n                    paymentValidation: $scope.paymentValidation,\r\n                    payments: $scope.payments,\r\n                    selectedItem: $scope.selectedItem,\r\n                    operationSubName: $scope.operationSubName,\r\n                    actionMode: $scope.actionMode\r\n                };\r\n\r\n                if (prm === true) {\r\n                    var amountLimit = helperService.DEARRound($scope.getRemainingToRefund(false), 2) + $scope.refundDialogItem.OldAmount;\r\n                    var checkLimit = false;\r\n                    var forceMessage = false;\r\n                    switch ($scope.refundDialogItem.Type) {\r\n                        case 'cashSurcharge':\r\n                            if ($scope.refundDialogItem.Amount > $scope.paymentValidation.cashSurchargeAmount)\r\n                                forceMessage = true;\r\n                            break;\r\n                        case 'storeCreditSurcharge':\r\n                            if ($scope.refundDialogItem.Amount > $scope.paymentValidation.storeCreditSurchargeAmount)\r\n                                forceMessage = true;\r\n                            break;\r\n                        default:\r\n                            checkLimit = true;\r\n                            break;\r\n                    }\r\n\r\n                    if (checkLimit || forceMessage) {\r\n                        if (forceMessage || $scope.refundDialogItem.Amount > amountLimit) {\r\n                            errorService.showError(gettextCatalog.getString('Entered amount is larger than remaining amount.<br/>Please enter a smaller value.'));\r\n                            return;\r\n                        }\r\n                    }\r\n\r\n                    switch ($scope.refundDialogItem.Type) {\r\n                        case 'cash':\r\n                            $scope.payments.cash = helperService.DEARRound($scope.refundDialogItem.Amount, 2);\r\n                            if ($scope.payments.cash > 0 && $scope.refundDialogItem.Amount != $scope.refundDialogItem.OldAmount) {\r\n                                $scope.payments.cashSurcharge = $scope.paymentValidation.cashSurchargeAmount;\r\n                                $scope.payments.storeCreditSurcharge = 0;\r\n                            }\r\n                            $scope.payments.cashRounded = helperService.roundCash($scope.payments.cash + $scope.payments.cashSurcharge);\r\n\r\n                            if (!isNewSale)\r\n                                saleService.recalcRefundSurcharges($scope.currentSale.GroupedSale, $scope.paymentValidation, $scope.payments, 'cash');\r\n                            else {\r\n                                prms.changedFieldType = 'cash';\r\n                                CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Surcharge);\r\n                            }\r\n                            break;\r\n                        case 'cashSurcharge':\r\n                            $scope.payments.cashSurcharge = helperService.DEARRound($scope.refundDialogItem.Amount, 2);\r\n                            $scope.payments.cashRounded = helperService.roundCash($scope.payments.cash + $scope.payments.cashSurcharge);\r\n                            if (!isNewSale)\r\n                                saleService.recalcRefundSurcharges($scope.currentSale.GroupedSale, $scope.paymentValidation, $scope.payments, 'cash');\r\n                            else {\r\n                                prms.changedFieldType = 'cash';\r\n                                CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Surcharge);\r\n                            }\r\n                            break;\r\n                        case 'storeCredit':\r\n                            $scope.payments.storeCredit = helperService.DEARRound($scope.refundDialogItem.Amount, 2);\r\n                            $scope.payments.storeCreditSurcharge = !$scope.paymentValidation.storeCreditAmount ? 0 :\r\n                                helperService.DEARRound($scope.paymentValidation.storeCreditSurchargeAmount * ($scope.payments.storeCredit / $scope.paymentValidation.storeCreditAmount), 2);\r\n                            if (isNewSale) {\r\n                                prms.changedFieldType = 'store credits';\r\n                                CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Surcharge);\r\n                            }\r\n                            break;\r\n                        case 'storeCreditSurcharge':\r\n                            $scope.payments.storeCreditSurcharge = helperService.DEARRound($scope.refundDialogItem.Amount, 2);\r\n                            if (!isNewSale)\r\n                                saleService.recalcRefundSurcharges($scope.currentSale.GroupedSale, $scope.paymentValidation, $scope.payments, 'store credits');\r\n                            else {\r\n                                prms.changedFieldType = 'store credits';\r\n                                CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Surcharge);\r\n                            }\r\n                            break;\r\n                        case 'loyaltyPoints':\r\n                            $scope.payments.loyaltyPoints = helperService.DEARRound($scope.refundDialogItem.Amount, 2);\r\n                            prms.changedFieldType = 'loyalty';\r\n                            if (isNewSale) {\r\n                                CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Surcharge);\r\n                            }\r\n                            break;\r\n                        case 'creditCard':\r\n                            var eid = $scope.refundDialogItem.elementId;\r\n                            var sum = helperService.DEARRound($scope.refundDialogItem.Amount, 2);\r\n\r\n                            $scope.paymentValidation.cardPayments[eid].amount = sum;\r\n                            if ($scope.paymentValidation.cardPayments[eid].Surcharge) {\r\n                                var surchargeAmount = $scope.paymentValidation.cardPayments[eid].Surcharge.CalculatedValue;\r\n\r\n                                var amountPercent = sum / $scope.paymentValidation.cardPayments[eid].validationAmount;\r\n                                var taxToRefund = helperService.DEARRound($scope.paymentValidation.cardPayments[eid].Surcharge.Tax * amountPercent, 2);\r\n                                var amountToRefund = surchargeAmount * amountPercent;\r\n                                $scope.paymentValidation.cardPayments[eid].Surcharge.AmountToRefund = helperService.DEARRound(amountToRefund, 2) + (isTaxInclusive ? 0 : taxToRefund);\r\n                                $scope.paymentValidation.cardPayments[eid].Surcharge.TaxToRefund = taxToRefund;\r\n                            }\r\n\r\n                            $scope.payments.creditCard = cardPayService.sumAllCardPayments($scope.paymentValidation.cardPayments);\r\n                            if (!isNewSale)\r\n                                saleService.recalcRefundSurcharges($scope.currentSale.GroupedSale, $scope.paymentValidation, $scope.payments);\r\n                            else {\r\n                                CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Surcharge);\r\n                            }\r\n\r\n                            break;\r\n\r\n                        default:\r\n                            var eid = $scope.refundDialogItem.elementId;\r\n                            var sum = helperService.DEARRound($scope.refundDialogItem.Amount, 2);\r\n\r\n                            var cp = $scope.paymentValidation.customPayments.filter(function (el) {\r\n                                return el.id === eid;\r\n                            });\r\n                            cp[0].amount = sum;\r\n\r\n                            if (cp[0].Surcharge) {\r\n                                var surchargeAmount = cp[0].Surcharge.CalculatedValue;\r\n\r\n                                var amountPercent = sum / cp[0].validationAmount;\r\n                                var taxToRefund = helperService.DEARRound(cp[0].Surcharge.Tax * amountPercent, 2);\r\n                                var amountToRefund = surchargeAmount * amountPercent;\r\n                                cp[0].Surcharge.AmountToRefund = helperService.DEARRound(amountToRefund, 2) + (isTaxInclusive ? 0 : taxToRefund);\r\n                                cp[0].Surcharge.TaxToRefund = taxToRefund;\r\n                            }\r\n\r\n                            if (!isNewSale)\r\n                                saleService.recalcRefundSurcharges($scope.currentSale.GroupedSale, $scope.paymentValidation, $scope.payments);\r\n                            else {\r\n                                CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Surcharge);\r\n                            }\r\n                            break;\r\n                    }\r\n                } else if (typeof (prm) == 'string' && prm !== 'cancel') {\r\n\r\n                    switch ($scope.refundDialogItem.Type) {\r\n                        case 'cancel':\r\n                            break; // do nothing\r\n                        case 'cash':\r\n                            $scope.payments.cash = 0;\r\n                            break;\r\n                        case 'cashSurcharge':\r\n                            $scope.payments.cashSurcharge = 0;\r\n                            break;\r\n                        case 'storeCredit':\r\n                            $scope.payments.storeCredit = 0;\r\n                            break;\r\n                        case 'storeCreditSurcharge':\r\n                            $scope.payments.storeCreditSurcharge = 0;\r\n                            break;\r\n                        case 'loyaltyPoints':\r\n                            $scope.payments.loyaltyPoints = 0;\r\n                            break;\r\n                        case 'creditCard':\r\n                            $scope.payments.creditCard = 0;\r\n                            cardPayService.setAllCardAmountToZero($scope.paymentValidation.cardPayments);\r\n                            break;\r\n\r\n                        default:\r\n                            $.each($scope.paymentValidation.customPayments, function (i, p) {\r\n                                p.amount = 0;\r\n                                if (p.Surcharge) {\r\n                                    p.Surcharge.AmountToRefund = 0;\r\n                                    p.Surcharge.TaxToRefund = 0;\r\n                                }\r\n                            });\r\n                            break;\r\n                    }\r\n\r\n                    if (isNewSale)\r\n                        CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Surcharge);\r\n                }\r\n\r\n                $scope.refundDialogItem.Amount = 0;\r\n            });\r\n        };\r\n\r\n        saleService.loadDEARSales = function (page, limit, filters) {\r\n            var provider = remoteRequestProvider;\r\n            var pr = provider.loadDEARSales(page, limit, filters).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        saleService.loadDEARSale = function (taskID) {\r\n            var provider = remoteRequestProvider;\r\n            var pr = provider.loadDEARSale(taskID).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n\r\n        saleService.attachFilesToOrder = function (orderID, files) {\r\n            return webOnlyProvider.attachFilesToOrder(orderID, configService.lastUserName, files);\r\n        };\r\n\r\n        saleService.removeAttachment = function (attachmentId) {\r\n            return webOnlyProvider.removeAttachment(attachmentId);\r\n        };\r\n\r\n        saleService.giftCardExists = function (code) {\r\n            var isRemoteProvider = configService.isSite || (configService.isOnline);\r\n            if (isRemoteProvider) {\r\n                $.blockUI();\r\n                return remoteRequestProvider.checkGiftCardExists(code).then(function (resp) {\r\n                    return resp.data;\r\n                });\r\n            } else {\r\n                return helperService.rejectPromise(gettextCatalog.getString('Cannot sell gift card while offline'));\r\n            }\r\n        };\r\n\r\n        saleService.checkPosSaleOrderExists = function (posOrderID) {\r\n            var isRemoteProvider = !!configService.isSite || !!configService.isOnline;\r\n            if (isRemoteProvider) {\r\n                $.blockUI();\r\n                return webOnlyProvider.checkSaleOrderExists(posOrderID).then(function (resp) {\r\n                    return helperService.resolvePromise(resp.data.result === true);\r\n                })\r\n                .catch(function(err) {\r\n                    return helperService.resolvePromise(false);\r\n                });\r\n            } else {\r\n                return helperService.resolvePromise(false);\r\n            }\r\n        };\r\n\r\n        saleService.isVoided = function (order) {\r\n            return order.Status && order.Status.endsWith('VOIDED');\r\n        };\r\n\r\n        saleService.loadLLCustomerRewards = function(merchantID){\r\n            var provider = remoteRequestProvider;\r\n            var deferred = $q.defer();\r\n\r\n            var pr = provider.getLLCustomerRewards(merchantID).then(function (res) {\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            }, function (err) {\r\n                deferred.resolve(err.data); // always resolve to mark as handled\r\n                return deferred.promise;\r\n            });\r\n    \r\n            return pr;\r\n        };\r\n\r\n        saleService.updateSaleOrderNumberForCurrentSale = function (resp, sale, rawSale) {\r\n            if (!resp?.data?.OrderNumberDetails?.length || !sale || !rawSale) {\r\n                return;\r\n            }\r\n\r\n            const details = resp.data.OrderNumberDetails;\r\n            const currentOrderId = sale.OrderID || rawSale.OrderID;\r\n\r\n            let match = null;\r\n\r\n            if (currentOrderId) {\r\n                match = details.find(d =>d.RegistrySequenceUpdated === true && d.OrderID && d.OrderID === currentOrderId);\r\n            }\r\n\r\n            if (!match) {\r\n                match = details.find(d => d.RegistrySequenceUpdated === true && d.OriginalOrderNumber && d.OriginalOrderNumber === sale.OrderNumber);\r\n            }\r\n\r\n            if (!match) {\r\n                return;\r\n            }\r\n\r\n            ['OrderNumber', 'ClearOrderNumber'].forEach(field => {\r\n                if (match[field]) {\r\n                    sale[field] = match[field];\r\n                    rawSale[field] = match[field];\r\n                }\r\n            });\r\n\r\n            sale.UpdateReceiptView = true;\r\n        }\r\n\r\n        return saleService;\r\n\r\n    }\r\n]);","import {CalculatorHelperService} from '../../TypePosScripts/CalculatorHelperService';\r\nimport Enumerable from 'linq';\r\nimport { convertFromOld, restoreTransactionMetadata } from '../../TypePosScripts/ConverterService';\r\nimport { StartCalcLevel } from '../../TypePosScripts/Enums';\r\n\r\n\r\nangular.module(\"mainApp\").controller('salesHistoryController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'saleService', '$location', 'errorService', 'outletService',\r\n        'configService', 'gettextCatalog', 'helperService', 'orderByFilter', 'uuid2', 'receiptService',\r\n        'printService', 'emailService', '$q', 'cardPayService', '$filter', 'customerService', 'fontMeasureService', 'clickAndCollectService',\r\n        'webOnlyProvider', '$locale', '$window', 'orderStatusService',\r\n        /**\r\n        * @param {import('../../TypePosScripts/Typings/Typings').CardPayService} cardPayService - Somebody's name.\r\n            */\r\n        function ($scope, $rootScope, constants, loginService, $timeout, saleService, $location, errorService, outletService,\r\n            configService, gettextCatalog, helperService, orderBy, uuid2, receiptService,\r\n            printService, emailService, $q, cardPayService, $filter, customerService, fontMeasureService, clickAndCollectService,\r\n            webOnlyProvider, $locale, $window, orderStatusService) {\r\n\r\n            //$rootScope.$broadcast('sideBar.hideDetails', { sectionName: constants.constSellSectionName }); // to hide sidebar details\r\n            $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constSalesHistoryViewName }); // to hide sidebar details\r\n\r\n            if (!loginService.isLoggedIn()) {\r\n                helperService.goToHomePage();\r\n                return;\r\n                //            $rootScope.$broadcast('login.show'); // show login page on application start\r\n            }\r\n\r\n            $scope.isLoyaltyEnabled = configService.enableLoyalty === true;\r\n            $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n            $scope.getImageUrl = function (imageID) {\r\n                if (imageID) {\r\n                    var subUrl = 'PosProductImage';\r\n                    var size = '&width=' + configService.imagesX + '&height=' + configService.imagesY;\r\n                    return configService.baseImageURL + '?ID=' + imageID + size;\r\n\r\n                }\r\n                return null;\r\n            };\r\n\r\n            $scope.isGiftCardRefundable = configService.isGiftCardRefundable();\r\n            $scope.floatPrecision = configService.fractionalLimit;\r\n\r\n            $scope.operationSubName = null;\r\n            $scope.nothingFound = false;\r\n            $scope.fullFilters = false;\r\n            $scope.filters = {\r\n                OutletID: '0',\r\n                StatusID: '0',\r\n                DateFrom: null,\r\n                DateTo: null\r\n            };\r\n\r\n            $scope.dearSalesFilters = {\r\n                searchText: null,\r\n                DateFrom: null,\r\n                DateTo: null\r\n            };\r\n\r\n            $scope.sorting = {};\r\n            $scope.lastRequestDateTime = moment().utc().format();\r\n\r\n            $scope.selectedPage = 1;\r\n            $scope.dearSalesSelectedPage = 1;\r\n            $scope.totalPages = 1;\r\n            $scope.dearSalesTotalPages = 1;\r\n            $scope.itemsByPage = 25;//15;\r\n            $scope.totalRecords = 0;\r\n\r\n            $scope.isLoading = false;\r\n\r\n            $scope.triggerChangeOutletFilter = false;\r\n            $scope.triggerChangeStatusFilter = false;\r\n\r\n            $scope.dateFormat = helperService.getDateFormat();\r\n            $scope.currentDir = 'desc';\r\n            $scope.newDir = 'asc';\r\n            $scope.sortFiled = 'Date';\r\n            //$scope.posTaxInclucive = configService.taxInclucive === \"True\";\r\n\r\n            $scope.fcss = { 'height': window.innerHeight * 0.8 + 'px' };\r\n\r\n            $scope.setFocus = helperService.setFocus;\r\n            $scope.returnedLoaylty = {\r\n                value: 0\r\n            };\r\n\r\n            $scope.canSeeAllSales = configService.canSeeAllSales;\r\n            $scope.canClearOfflineSales = configService.canClearOfflineSales;\r\n            $scope.gridType = 'pos';\r\n            $scope.selectedDearSale = null;\r\n\r\n            $scope.dearOrdersTotal = 0;\r\n\r\n            $scope.selectedAttachment = null;\r\n            $scope.isSite = configService.isSite;\r\n\r\n            $scope.canBeVoided = false;\r\n\r\n\r\n\r\n            $scope.changeGridType = function(type){\r\n               $scope.gridType = type;\r\n            };\r\n\r\n\r\n            $scope.dearSalesSearch = function (keepData) {\r\n                if(!keepData)\r\n                    $scope.dearSalesSelectedPage = 1;\r\n\r\n                $.blockUI();\r\n                saleService.loadDEARSales($scope.dearSalesSelectedPage, $scope.itemsByPage, $scope.dearSalesFilters).then(function (resp) {\r\n                    $.each(resp.Orders, function(idx,el){\r\n                        el.OrderDateFormated = $scope.getDateByFormat(el.SaleOrderDate, 'LL');\r\n\r\n                        if(keepData){\r\n                            if(!$scope.dearSales.filter(function(fEl){\r\n                                return fEl.TaskID === el.TaskID;\r\n                            }).length > 0){                            \r\n                                    $scope.dearSales.push(el);                            \r\n                            }\r\n                        }\r\n                    });\r\n                    \r\n\r\n                    if(!keepData){\r\n                        $scope.dearSales = resp.Orders;                        \r\n                    }\r\n    \r\n                    dearSalesGetPages(resp.Total);\r\n                        $.unblockUI();\r\n                    },\r\n                    function(err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            function dearSalesGetPages(total) {\r\n                $scope.dearOrdersTotal = total;\r\n                var step = $scope.itemsByPage;\r\n                $scope.dearSalesTotalPages = Math.ceil(total / step);\r\n                  if ($scope.dearSalesTotalPages === 0) {\r\n                    $scope.dearSalesTotalPages = 1;\r\n                }\r\n            }\r\n\r\n            const dearSalesScrollReachBottomCallback = function (){\r\n                if ($scope.dearSalesSelectedPage < $scope.dearSalesTotalPages) {\r\n                    $scope.dearSalesSelectedPage++;\r\n                    $scope.dearSalesSearch(true);\r\n                }                \r\n            };\r\n\r\n\r\n            $scope.isOnline = configService.isOnline;\r\n    \r\n            $scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n                $scope.isOnline = object;\r\n                if ($scope.isOnline === false) {\r\n                    $scope.gridType = 'pos';\r\n                }\r\n            });\r\n\r\n            $scope.$on('deliveryDialog.closed', function (event) {\r\n                $scope.search();\r\n            });\r\n\r\n            $scope.dearSalesSelectRow = function(row){\r\n                $scope.selectedDearSale = row;\r\n                $scope.dialogMode = 'convertDEARSaleToPosSale';\r\n\r\n                helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                        gettextCatalog.getString('Would you like to return this item?'),\r\n                        gettextCatalog.getString('Yes'),\r\n                        gettextCatalog.getString('No'));\r\n\r\n            };\r\n\r\n\r\n            $scope.convertDearSaleIntoPosSale = function(){\r\n                if($scope.selectedDearSale != null){\r\n                                     \r\n                    $.blockUI();\r\n                    var taskID = $scope.selectedDearSale.TaskID;\r\n                    saleService.loadDEARSale(taskID).then(function(dearSale){\r\n                        if(dearSale.PosOrderID){\r\n                            $.unblockUI();\r\n                            var item = {PosOrderID : dearSale.PosOrderID};\r\n                            $scope.selectItem(item);\r\n                        }\r\n                        else {\r\n                            $scope.dearSale = dearSale;\r\n                            $scope.dearSale.PickedLines = [];\r\n                            $scope.dearSale.fromOrderLines = false;\r\n                \r\n                            $scope.dearSale.InvoiceDateFormated = $scope.getDateByFormat($scope.dearSale.InvoiceDate, $scope.dateFormat);\r\n                            $scope.dearSale.DueDateFormated = $scope.getDateByFormat($scope.dearSale.DueDate, $scope.dateFormat);    \r\n            \r\n                            var resultSales = clickAndCollectService.convertDearSaleIntoPOSSaleWithRefunds($scope.dearSale);\r\n                            var isTaxInvlusive = resultSales[0].sale.IsTaxInclusive;\r\n                \r\n                            var currentSaleObjects = []; \r\n                            \r\n                            $.each(resultSales, function(idx, posSale){\r\n                                var apiPosSale = clickAndCollectService.convertCurrentSaleForAPI(posSale.sale, 'CLOSED', null, isTaxInvlusive, posSale.refundID); \r\n                                \r\n                                apiPosSale.OrderNumber = $scope.dearSale.InvoiceNumber;\r\n                                apiPosSale.IsFromDearSale = true;\r\n                                currentSaleObjects.push({apiPosSale, posSale: posSale.sale});\r\n                            });\r\n\r\n\r\n                            var prm = helperService.resolvePromise(true);\r\n\r\n                            $.each(currentSaleObjects, function (idx, sale) {\r\n                                prm = prm.then(function(){\r\n                                    return clickAndCollectService.saveSale(sale.apiPosSale, sale.posSale, null , true);\r\n                                });\r\n                            });\r\n\r\n                            prm.then(function(resp){\r\n                                if(resp.Errors && resp.Errors.length > 0){\r\n                                    var errorMessage = \"\";\r\n                                    $.each(resp.Errors, function(ids,error){\r\n                                        $.each(error.Errors, function(ids,error2){\r\n                                            errorMessage += error2.ErrorMessage + \"<br/>\";\r\n                                        });\r\n                                    });\r\n                                    $.unblockUI();\r\n                                    errorService.showError(errorMessage);\r\n                                }else{\r\n                                    $.unblockUI();\r\n                                    \r\n                                    var item = {PosOrderID : taskID};\r\n                                    $scope.selectItem(item);\r\n                                }\r\n                            }).catch(function(err){\r\n                                $.unblockUI();\r\n                                var error = gettextCatalog.getString(\"Failed to convert sale, please try again later or contact support.\");\r\n                                errorService.showError(error);                    \r\n                            });\r\n\r\n                        }\r\n                    },function(){\r\n                        $.unblockUI();\r\n            \r\n                        var error = gettextCatalog.getString(\"Failed to convert sale, please try again later or contact support.\");\r\n            \r\n                        errorService.showError(error);\r\n                    });                    \r\n                }\r\n                $scope.selectedDearSale = null;\r\n            };\r\n\r\n\r\n            $scope.$watch('filters.StatusID',\r\n                function (newValue, oldValue) {\r\n\r\n                    if ($scope.triggerChangeStatusFilter) {\r\n                        $scope.selectedPage = 1;\r\n                        $scope.search();\r\n                    }\r\n\r\n                    $scope.triggerChangeStatusFilter = true;\r\n                }\r\n            );\r\n\r\n            $scope.$watch('filters.OutletID',\r\n                function (newValue, oldValue) {\r\n\r\n                    if ($scope.triggerChangeOutletFilter) {\r\n                        $scope.selectedPage = 1;\r\n                        $scope.search();\r\n                    }\r\n\r\n                    $scope.triggerChangeOutletFilter = true;\r\n                }\r\n            );\r\n\r\n            $scope.dateSelectedCallback = function (from, to) {\r\n                $scope.filters.DateFrom = from;\r\n                $scope.filters.DateTo = to;\r\n                $scope.selectedPage = 1;\r\n                if ($scope.gridType !== 'pos') {\r\n                    $scope.dearSalesDateSelectedCallback(from, to);\r\n                } else {\r\n                    $scope.search();\r\n                }\r\n            };\r\n\r\n            $scope.dearSalesDateSelectedCallback = function (from, to) {\r\n                $scope.dearSalesFilters.DateFrom = from;\r\n                $scope.dearSalesFilters.DateTo = to;\r\n                $scope.dearSalesSelectedPage = 1;\r\n                $scope.dearSalesSearch();\r\n            };\r\n\r\n            const scrollReachBottomCallback = function () {\r\n                if ($scope.gridType != 'pos') {\r\n                    dearSalesScrollReachBottomCallback();\r\n                    return;\r\n                }\r\n                if (!$scope.isLoading && $scope.selectedPage < $scope.totalPages) {\r\n                    $scope.selectedPage++;\r\n                    $scope.search(true);\r\n                }\r\n            };\r\n\r\n            initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n            $scope.abs = function (x) {\r\n                if (x)\r\n                    return helperService.DEARRound(Math.abs(x), 2);\r\n                return 0;\r\n            };\r\n\r\n            $scope.haveItemLine = function (arr, status) {\r\n                if (status === 'RETURN')\r\n                    return false;\r\n                var have = false;\r\n                $.each(arr, function (idx, el) {\r\n                    if (el.IsProduct === true || el.Name !== 'Rounding') {\r\n                        have = true;\r\n                    }\r\n                });\r\n                return have;\r\n            };\r\n\r\n            $scope.clear = function () {\r\n                $scope.triggerChangeOutletFilter = false;\r\n                $scope.triggerChangeStatusFilter = false;\r\n\r\n                $scope.filters.OutletID = '0';\r\n                $scope.filters.OutletID1 = '0';\r\n\r\n                $scope.filters.StatusID = '0';\r\n                $scope.filters.StatusID1 = '0';\r\n\r\n                $scope.filters.DateFrom = null;\r\n                $scope.filters.DateTo = null;\r\n\r\n                $scope.filters.DateFrom1 = null;\r\n                $scope.filters.DateTo1 = null;\r\n\r\n                $scope.searchInput = null;\r\n\r\n                $timeout(function () {\r\n                    $timeout(function () { $('input, select').trigger('refresh'); });\r\n\r\n                });\r\n\r\n                $scope.search();\r\n            };\r\n\r\n            $scope.dateOptions = {\r\n                formatYear: 'yy',\r\n                maxDate: new Date(2020, 5, 22),\r\n                minDate: new Date(),\r\n                startingDay: 1\r\n            };\r\n            $scope.datePicker = {\r\n                opened: false\r\n            };\r\n            $scope.openDatePicker = function () {\r\n                $scope.datePicker.opened = true;\r\n            };\r\n            \r\n            $scope.customPaymentMethods = [];\r\n\r\n            $scope.getCustomPaymentMethod = function (shortName) {\r\n                var lst = $scope.customPaymentMethods.filter(function (el) { return el.loweredPaymentMethodName === shortName; });\r\n\r\n                return lst.length > 0 ? lst[0] : null;\r\n            };\r\n\r\n            function initMeasure() {\r\n                $(window).on('resize', function () {\r\n                    fontMeasureService.updateFontSize('history-row-total-parent', 'history-row-total', 13.5);\r\n                    \r\n                });\r\n            }\r\n\r\n            function getPaymentMethods() {\r\n                configService.getPaymentMethods($scope);\r\n\r\n                if (!!$scope.currentSale && !!$scope.currentSale.ReturnPayments) {\r\n                    angular.forEach($scope.currentSale.ReturnPayments, function (el) {\r\n                        if (el.PaymentTypeName == \"Non-POS\" && el.ShortName.indexOf(\"BackofficePayment_\") === 0) {\r\n                            if ($scope.getCustomPaymentMethod(el.ShortName) == null) {\r\n                                var obj = {\r\n                                    loweredPaymentMethodName: el.ShortName,\r\n                                    paymentProcessorID: el.ShortName.substr(\"BackofficePayment_\".length),\r\n                                    paymentMethodName: el.PaymentTypeName,\r\n                                    isCustom: false\r\n                                };\r\n\r\n                                $scope.customPaymentMethods.push(obj);\r\n                            }\r\n                        }\r\n                    });\r\n                }\r\n\r\n            }\r\n\r\n            $scope.getCustomPaymentMethodName = function (shortName) {\r\n                var lst = $scope.customPaymentMethods.filter(function (el) { return el.loweredPaymentMethodName === shortName; });\r\n\r\n                return lst.length > 0 ? lst[0].paymentMethodName : shortName;\r\n            };\r\n\r\n\r\n            // array for sales\r\n            $scope.data = [];\r\n            $scope.statuses = constants.parkStatuses;\r\n            $scope.filterSelectors = {};\r\n\r\n            $scope.translateStatuses = function () {\r\n                return [\r\n                    // commented as it can not exist \r\n                    // { StatusName: gettextCatalog.getString(\"Open\"), StatusID: \"OPEN\" },\r\n                    { StatusName: gettextCatalog.getString(\"Closed\"), StatusID: \"CLOSED\" },\r\n                    { StatusName: gettextCatalog.getString(\"Layby\"), StatusID: \"LAYBY\" },\r\n                    { StatusName: gettextCatalog.getString(\"Layby closed\"), StatusID: \"LAYBY_CLOSED\" },\r\n                    { StatusName: gettextCatalog.getString(\"On account\"), StatusID: \"ONACCOUNT\" },\r\n                    { StatusName: gettextCatalog.getString(\"On account closed\"), StatusID: \"ONACCOUNT_CLOSED\" },\r\n                    { StatusName: gettextCatalog.getString(\"Returned\"), StatusID: \"RETURN\" },\r\n                    { StatusName: gettextCatalog.getString(\"Voided\"), StatusID: [\"LAYBY_VOIDED\", \"LAYBY_CLOSED_VOIDED\"] }\r\n                ];\r\n            };\r\n\r\n            $scope.filterSelectors.statuses = $scope.translateStatuses();\r\n\r\n            $scope.$on('changeLanguage', function (event) {\r\n                $scope.filterSelectors.statuses = $scope.translateStatuses();\r\n            });\r\n\r\n            $scope.financialStatusName = function (code, isPartial, sale, shouldPayExtra) {\r\n                if (!sale) return;\r\n\r\n                var isNewSale = helperService.showNewCheckoutUI(sale.RawSaleObject);\r\n\r\n                var nativeSale = isNewSale ? convertFromOld(sale.RawSaleObject) : null;\r\n\r\n                if (sale.StandaloneRefund === true || sale.StandaloneExchange)\r\n                    code = 'RETURN';\r\n\r\n                if(nativeSale && isPartial) {\r\n                    isPartial = nativeSale.IsPartialPaid;\r\n                }\r\n\r\n                var res = $scope.filterSelectors.statuses.filter(function (v) { \r\n                    return Array.isArray(v.StatusID) ? v.StatusID.indexOf(code) !== -1 : v.StatusID === code;\r\n                });\r\n                var t = code;\r\n                var isRefund = code === 'RETURN';                \r\n                var isExchange = code === 'RETURN' && (sale.Lines && sale.Lines.length > 0 || sale.StandaloneExchange);\r\n                \r\n                if (isExchange)\r\n                    isRefund = false;\r\n\r\n                if (res.length > 0) {\r\n                    if (isNewSale && isExchange)\r\n                        t = gettextCatalog.getString(\"Exchanged\");\r\n                    else\r\n                        t = res[0].StatusName;\r\n                }\r\n\r\n                var isVoided = code && code.endsWith('VOIDED');\r\n\r\n                if (isVoided) {\r\n                    if (code === 'LAYBY_VOIDED') {\r\n                        t = gettextCatalog.getString(\"Layby\") + '. ' + gettextCatalog.getString(\"Voided\");\r\n                    } else if (code == 'LAYBY_CLOSED_VOIDED') {\r\n                        t = gettextCatalog.getString(\"Layby closed\") + '. ' + gettextCatalog.getString(\"Voided\");\r\n                    }\r\n                    return t;\r\n                } else if (isPartial) {\r\n                    t += \" \" + gettextCatalog.getString(\"partially\");\r\n                    if (isNewSale && (shouldPayExtra !== undefined && shouldPayExtra !== null)) {\r\n                        var balance = nativeSale.Balance;\r\n\r\n                        if (balance) {\r\n                            if (shouldPayExtra && !isRefund) {\r\n                                t += \". \" + gettextCatalog.getString(\"Payment is required.\");\r\n                            } else if (isRefund || isExchange){\r\n                                t += \". \" + gettextCatalog.getString(\"Refund is required.\");\r\n                            }\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (isNewSale && isExchange) {\r\n                        if (sale.Total > 0)\r\n                            t += \". \" + gettextCatalog.getString(\"Paid.\");\r\n                        else\r\n                            t += \". \" + gettextCatalog.getString(\"Refunded.\");\r\n                    }\r\n                }\r\n\r\n                return t;\r\n            };\r\n\r\n            $scope.filterSelectors.outlets = [];\r\n            $scope.filterSelectors.users = [];\r\n\r\n            function loadFilters() {\r\n                if ($scope.filterSelectors.outlets && $scope.filterSelectors.outlets.length > 0) {\r\n                    return helperService.resolvePromise(null);\r\n                }\r\n\r\n                return outletService.getUserOulets(configService.loginUserID).then(function (resp) {\r\n                    $.each(resp.Outlets, function (idx, el) {\r\n                        $scope.filterSelectors.outlets.push({ OutletName: el.OutletName, OutletID: el.PosOutletID });\r\n                    });\r\n\r\n                    if ($scope.filterSelectors.outlets.length == 1) {\r\n                        $scope.filters.OutletID = $scope.filterSelectors.outlets[0].OutletID;\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        initSelects();\r\n\r\n                        $timeout(function () { $('input, select').trigger('refresh'); });\r\n\r\n                    });\r\n\r\n                    return saleService.loadPosUsers().then(function (resp) {\r\n                        $scope.filterSelectors.users = [];\r\n                        $.each(resp.Users, function (idx, el) {\r\n                            $scope.filterSelectors.users.push({ UserName: el.UserName });\r\n                        });\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve(null);\r\n                        return deferred2.promise;\r\n                    });\r\n                });\r\n            }\r\n\r\n            $scope.reloadCurrentPage = function () {\r\n                var idx = !!$scope.selectedItem ? $scope.selectedItem.PosOrderID : null;\r\n                return $scope.onLoadInternal(idx);\r\n            };\r\n\r\n            // enable event when view is shown\r\n            $scope.onLoad = function () {\r\n                return $scope.onLoadInternal()\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            $scope.onLoadInternal = function (selectedID) {\r\n                window.localStorage.setItem('continueSale', null);\r\n                $scope.raiseViewChanged();\r\n                $scope.setDropdownPosition();\r\n                $.blockUI();\r\n\r\n                // printService.reconnect();\r\n\r\n                if (!selectedID) {\r\n                    $scope.data = [];\r\n                    $scope.filters.SaleID = null;\r\n                    $scope.filters.LastRequestDate = $scope.lastRequestDateTime;\r\n                } else {\r\n                    $scope.filters.SaleID = selectedID;\r\n                    $scope.filters.LastRequestDate = null;\r\n                }\r\n\r\n\r\n                return saleService.loadSalesHistory($scope.selectedPage, $scope.itemsByPage, $scope.filters, $scope.sorting, $scope.searchInput)\r\n                    .then(function (resp) {\r\n\r\n                        var unshiftedOrders = [];\r\n\r\n                        var tempData = orderBy(resp.Orders, 'OrderDate', true);\r\n                        $.each(tempData, function (idx, el) {\r\n                            \r\n                            el.OrderDateFormated = $scope.getDateByFormat(el.OrderDate, 'LL');\r\n                            if(el.LaybyDate){\r\n                                el.showLaybyDate = true;\r\n                                el.LaybyDate =  helperService.getFormatedDate2(el.LaybyDate);\r\n                            }\r\n\r\n                            if(el.Data){\r\n\r\n                                var payLoad = JSON.parse(el.Data.RawSaleObject);\r\n                                //if (payLoad.PayloadVersion == 3) {\r\n                                //    errorService.showError(gettextCatalog.getString('Order history data contains sales in new format. Please, update POS application to see them.'));\r\n                                //    return false;\r\n                                //}\r\n    \r\n                                \r\n                                // check if can continue payment\r\n                                var saleTotalPaid = helperService.DEARRound(Math.abs($scope.getSaleTotalPaid(el.Data)), 2);\r\n                                var saleTotalGrid = helperService.DEARRound(Math.abs($scope.getSaleGridTotal(el.Data)), 2);\r\n\r\n                                var isParentOnAcount = payLoad && payLoad.OrderType === 'ONACCOUNT' && helperService.DEARRound(payLoad.Balance,4)==0;\r\n\r\n                                el.isPartiallyPaid = !(el.Status == 'RETURN' && isParentOnAcount) &&\r\n                                    el.Status != 'ONACCOUNT' &&\r\n                                    el.Status != 'LAYBY' &&\r\n                                    el.Status != 'LAYBY_CLOSED' &&\r\n                                    el.Status != 'ONACCOUNT_CLOSED' &&\r\n                                    saleTotalGrid > saleTotalPaid;\r\n    \r\n                                if (el.Status === 'LAYBY') {\r\n                                    payLoad = convertFromOld(payLoad);\r\n    \r\n                                    if (payLoad.LaybyDate) {\r\n                                        el.showLaybyDate = true;\r\n                                        el.LaybyDate = helperService.getFormatedDate2(payLoad.LaybyDate);\r\n                                    }\r\n                                }\r\n                                \r\n                            }\r\n\r\n                            // if list\r\n                            if (el.Status && el.Status.endsWith('VOIDED')) {\r\n                                el.FinancialStatus = gettextCatalog.getString('Voided');\r\n                            }\r\n\r\n                            if (selectedID) {\r\n                                $.each($scope.data, function (index, item) {\r\n                                    if (item.OrderID === selectedID && el.OrderID === selectedID) {\r\n                                        $scope.data[index] = el;\r\n                                    }\r\n                                });\r\n                            }\r\n\r\n                            if (!$scope.data.filter(function (fEl) {\r\n                                return fEl.OrderID === el.OrderID;\r\n                            }).length > 0) {\r\n                                if ($scope.lastRequestDateTime < el.OrderDateUTC) {\r\n                                    unshiftedOrders.push(el);\r\n                                } else {\r\n                                    $scope.data.push(el);\r\n                                }\r\n                            }\r\n\r\n                        });\r\n\r\n                        unshiftedOrders = orderBy(unshiftedOrders, 'OrderDate', false);\r\n                        $.each(unshiftedOrders, function (idx, el) {\r\n                            $scope.data.unshift(el);\r\n                        });\r\n\r\n\r\n                        $scope.lastRequestDateTime = moment().utc().format();\r\n\r\n                        if (!selectedID)\r\n                            getPages(resp.Total);\r\n\r\n                        return loadFilters().then(function () {\r\n                            if ($scope.receiptTemplate) {\r\n                                $.unblockUI();\r\n                                var deferred2 = $q.defer();\r\n                                deferred2.resolve(null);\r\n                                return deferred2.promise;\r\n                            } else {\r\n                                return receiptService.getReceiptTemplate(true).then(function (receiptResp) {\r\n                                    var injectedString = '; white-space: pre-wrap;';\r\n                                    var position = receiptResp.Template.search(\"\\\">{{itemNotes.SalesNote}}\");\r\n                                    var result = [receiptResp.Template.slice(0, position), injectedString, receiptResp.Template.slice(position)].join('');\r\n\r\n\r\n                                    var replacedString = '<canvas class=\"barcode\" id=\"code93\" type=\"code93\" b_value=\"{{receiptSaleModel.ReceiptBarCode_code93}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{receiptSaleModel.ReceiptBarCode_code93}}</canvas><div class=\"barcode_img img_code93\" style=\"text-align: center;\"></div>';\r\n                                    result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code93}}\", replacedString);\r\n                                    replacedString = '<canvas class=\"barcode\" id=\"code128\" type=\"code128\" b_value=\"{{receiptSaleModel.ReceiptBarCode_code128}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{receiptSaleModel.ReceiptBarCode_code128}}</canvas><div class=\"barcode_img img_code128\" style=\"text-align: center;\"></div>';\r\n                                    result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code128}}\", replacedString);\r\n\r\n                                    replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-ean8\" type=\"ean8\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean8\" style=\"text-align: center;\"></div>';\r\n                                    result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_ean8}}\", replacedString);\r\n                                    replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-ean13\" type=\"ean13\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean13\" style=\"text-align: center;\"></div>';\r\n                                    result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_ean13}}\", replacedString);\r\n                                    replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-industrial2of5\" type=\"industrial2of5\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-industrial2of5\" style=\"text-align: center;\"></div>';\r\n                                    result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_industrial2of5}}\", replacedString);\r\n                                    replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-upca\" type=\"upca\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upca\" style=\"text-align: center;\"></div>';\r\n                                    result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_upca}}\", replacedString);\r\n                                    replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-upce\" type=\"upce\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upce\" style=\"text-align: center;\"></div>';\r\n                                    result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_upce}}\", replacedString);\r\n\r\n                                    $scope.receiptTemplate = result;\r\n\r\n                                    if (receiptResp.EmailTemplate) {\r\n                                        position = receiptResp.EmailTemplate.search(\"\\\">{{itemNotes.SalesNote}}\");\r\n                                        result = [receiptResp.EmailTemplate.slice(0, position), injectedString, receiptResp.EmailTemplate.slice(position)].join('');\r\n\r\n                                        replacedString = '<div class=\"barcode_img img_code93\" style=\"text-align: left;\"></div>';\r\n                                        result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code93}}\", replacedString);\r\n                                        replacedString = '<div class=\"barcode_img img_code128\" style=\"text-align: left;\"></div>';\r\n                                        result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code128}}\", replacedString);\r\n\r\n                                        replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean8\" style=\"text-align: left;\"></div>';\r\n                                        result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_ean8}}\", replacedString);\r\n                                        replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean13\" style=\"text-align: left;\"></div>';\r\n                                        result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_ean13}}\", replacedString);\r\n                                        replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-industrial2of5\" style=\"text-align: left;\"></div>';\r\n                                        result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_industrial2of5}}\", replacedString);\r\n                                        replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upca\" style=\"text-align: left;\"></div>';\r\n                                        result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_upca}}\", replacedString);\r\n                                        replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upce\" style=\"text-align: left;\"></div>';\r\n                                        result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_upce}}\", replacedString);\r\n\r\n                                        $scope.receiptEmailTemplate = result;\r\n                                    } else {\r\n                                        $scope.receiptEmailTemplate = result;\r\n                                    }\r\n\r\n                                    $scope.receiptEmailSubject = receiptResp.EmailSubject;\r\n                                    $scope.receiptTemplateID = receiptResp.TemplateID;\r\n                                    $.unblockUI();\r\n                                    var deferred2 = $q.defer();\r\n                                    deferred2.resolve(null);\r\n                                    return deferred2.promise;\r\n\r\n                                });\r\n                            }\r\n                        });\r\n                    }\r\n                        //,function (err) {\r\n                        //    $.unblockUI();\r\n                        //    errorService.showError(err);\r\n                        //}\r\n                    );\r\n            };\r\n\r\n            $scope.search = function (keepData) {\r\n                $scope.nothingFound = false;\r\n                $.blockUI();\r\n                $scope.isLoading = true;\r\n                $scope.filters.SaleID = null;\r\n                helperService.hideKeyboard();\r\n                $scope.filters.LastRequestDate = $scope.lastRequestDateTime;\r\n\r\n                saleService.loadSalesHistory(\r\n                    $scope.selectedPage,\r\n                    $scope.itemsByPage,\r\n                    $scope.filters,\r\n                    $scope.sorting,\r\n                    $scope.searchInput,\r\n                ).then(function (resp) {\r\n                    var reverse = $scope.currentDir === 'desc';\r\n                    var filed = getServerFiledName($scope.sortFiled);\r\n\r\n                    if (!keepData)\r\n                        $scope.data = [];\r\n\r\n                    var unshiftedOrders = [];\r\n\r\n                    var tempData = orderBy(resp.Orders, filed, reverse);\r\n                    $.each(tempData, function (idx, el) {\r\n                        el.OrderDateFormated = $scope.getDateByFormat(el.OrderDate, 'LL');\r\n\r\n                        if(el.LaybyDate){\r\n                            el.showLaybyDate = true;\r\n                            el.LaybyDate =  helperService.getFormatedDate2(el.LaybyDate)\r\n                        }\r\n\r\n                        // check if can continue payment\r\n\r\n                        if(el.Data){\r\n                            var saleTotalPaid = helperService.DEARRound(Math.abs($scope.getSaleTotalPaid(el.Data)), 2);\r\n                            var saleTotalGrid = helperService.DEARRound(Math.abs($scope.getSaleGridTotal(el.Data)), 2);\r\n                            el.isPartiallyPaid = el.Status != 'ONACCOUNT' &&\r\n                                el.Status != 'LAYBY' &&\r\n                                el.Status != 'LAYBY_CLOSED' &&\r\n                                el.Status != 'ONACCOUNT_CLOSED' &&\r\n                                saleTotalGrid > saleTotalPaid;\r\n    \r\n                            if (el.Status === 'LAYBY') {\r\n                                var payLoad = JSON.parse(el.Data.RawSaleObject);\r\n                                payLoad = convertFromOld(payLoad);\r\n    \r\n                                if (!!payLoad.LaybyDate) {\r\n                                    el.showLaybyDate = true;\r\n                                    el.LaybyDate = helperService.getFormatedDate2(payLoad.LaybyDate);\r\n                                }\r\n                            }\r\n                        }\r\n\r\n                        if (el.Status && el.Status.endsWith('VOIDED')) {\r\n                            el.FinancialStatus = gettextCatalog.getString('Voided');\r\n                        }\r\n\r\n                        if (!$scope.data.filter(function (fEl) {\r\n                            return fEl.OrderID === el.OrderID;\r\n                        }).length > 0) {\r\n                            if ($scope.lastRequestDateTime < el.OrderDateUTC) {\r\n                                unshiftedOrders.push(el);\r\n                            } else {\r\n                                $scope.data.push(el);\r\n                            }\r\n                        }\r\n                    });\r\n\r\n\r\n                    unshiftedOrders = orderBy(unshiftedOrders, 'OrderDate', false);\r\n                    $.each(unshiftedOrders, function (idx, el) {\r\n                        $scope.data.unshift(el);\r\n                    });\r\n\r\n                    $scope.data = orderBy($scope.data, 'OrderDate', true);\r\n\r\n                    $scope.lastRequestDateTime = moment().utc().format();\r\n\r\n                    getPages(resp.Total);\r\n\r\n                    $('#searchOrderInput').select();\r\n                    $scope.isLoading = false;\r\n                    $.unblockUI();\r\n                }, function (err) {\r\n                    $scope.isLoading = false;\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n            };\r\n\r\n            function getPages(total) {\r\n                var step = $scope.itemsByPage;\r\n                $scope.totalPages = Math.ceil(total / step);\r\n                $scope.totalRecords = total;\r\n                if ($scope.totalPages === 0) {\r\n                    $scope.totalPages = 1;\r\n                }\r\n            };\r\n\r\n            $scope.getSaleTotalPaid = function (arr) {\r\n                var total = 0;\r\n                if (arr) {\r\n                    if (arr.FinancialStatus === 'RETURN' || (arr.FinancialStatus === 'CLOSED' && (arr.standaloneRefund === true || arr.StandaloneRefund === true || arr.standaloneExchange === true || arr.StandaloneExchange === true))) {\r\n                        for (var r = 0; r < arr.Refunds.length; r++) {\r\n                            if (arr.Refunds[r].IsFromChild !== true) { // child refund is from child and shouldn't be counted\r\n                                for (var i = 0; i < arr.Refunds[r].Payments.length; i++) {\r\n                                    var el = arr.Refunds[r].Payments[i];\r\n                                    if (el.ShortName !== \"Discount\" && el.ShortName !== \"Rounding\")\r\n                                        total += el.Amount;\r\n                                }\r\n                            }\r\n                        }\r\n                        total *= -1;\r\n                    }\r\n                    else {\r\n                        for (var i = 0; i < arr.Payments.length; i++) {\r\n                            var el = arr.Payments[i];\r\n                            if (el.ShortName !== \"Discount\" && el.ShortName !== \"Rounding\")\r\n                                total += el.Amount;\r\n                        }\r\n                    }\r\n                    if (total === 0) {\r\n                        for (var i = 0; i < arr.Payments.length; i++) {\r\n                            var el = arr.Payments[i];\r\n                            if (el.ShortName !== \"Discount\" && el.ShortName !== \"Rounding\")\r\n                                total += el.Amount;\r\n                        }\r\n                    }\r\n                }\r\n                return total;\r\n            };\r\n\r\n            $scope.getRoundingSign = function (selectedItem, paymentTypeName) {\r\n                var isNewSale = helperService.showNewCheckoutUI(selectedItem.RawSaleObject);\r\n\r\n                if (!selectedItem || !isNewSale) return '';\r\n                if (!selectedItem.RawSaleObject) return '';\r\n\r\n                var rndPayment = Enumerable.from(selectedItem.RawSaleObject.Payments)\r\n                    .where(function (p) { return p.ShortName === 'Rounding' && p.PaymentTypeName === paymentTypeName; })\r\n                    .sum(function (p) { return p.Amount; });\r\n\r\n                if (!rndPayment) return '';\r\n\r\n                if (Math.sign(selectedItem.RawSaleObject.Total) * Math.sign(rndPayment) < 0)\r\n                    return '-';\r\n            };\r\n\r\n            $scope.getRefundOperationName = function (selectedItem) {\r\n                var isPaid = true;\r\n                if (!selectedItem) return '';\r\n\r\n                if (selectedItem.Data.FinancialStatus === 'RETURN' && selectedItem.RawSaleObject.Total < 0)\r\n                    isPaid = false;\r\n\r\n                return isPaid ? gettextCatalog.getString('Paid') : gettextCatalog.getString('Refunded');\r\n            };\r\n\r\n            $scope.getSaleTotalDue = function (selectedItem) {\r\n                if (!selectedItem) return 0;\r\n\r\n                var isNewSale = helperService.showNewCheckoutUI(selectedItem.RawSaleObject);\r\n\r\n                if (!isNewSale) {\r\n                    return (selectedItem.IsPartialPaid === true || selectedItem.IsFromDearSale) && selectedItem.Data.Refunds.length > 0 ?\r\n                        selectedItem.PartiallyPaidDue :\r\n                        $scope.abs(selectedItem.RawSaleObject.Total - $scope.abs($scope.getSaleTotalPaid(selectedItem.Data)));\r\n                } else {\r\n                    return CalculatorHelperService.getSaleTotalDue($scope.currentSale, selectedItem);\r\n                }\r\n            };\r\n\r\n            $scope.getPartialPaidDue = function (arr) {\r\n\r\n                var data = arr.Data;\r\n                if (data) {\r\n                    if (data.FinancialStatus === 'RETURN') {\r\n                        var refundTotal = 0;\r\n                        var originalPaymentTotal = 0;\r\n                        for (var r = 0; r < data.Refunds.length; r++) {\r\n                            for (var i = 0; i < data.Refunds[r].Payments.length; i++) {\r\n                                var el = data.Refunds[r].Payments[i];\r\n                                refundTotal += el.Amount;\r\n                            }\r\n\r\n                            for (var i = 0; i < data.Refunds[r].Surcharges.length; i++) {\r\n                                var el = data.Refunds[r].Surcharges[i];\r\n                                refundTotal -= el.Total - ($scope.selectedItem.Data.TaxInclusive ? 0 : el.Tax);\r\n                            }\r\n                        }\r\n\r\n                        $.each(arr.RawSaleObject.ReturnPayments, function (idx, el) {\r\n                            originalPaymentTotal += el.Amount;\r\n                            if (!!el.Surcharge) {\r\n                                originalPaymentTotal -= el.Surcharge.CalculatedValue - ($scope.selectedItem.Data.TaxInclusive ? 0 : el.Surcharge.Tax);\r\n                            }\r\n                        });\r\n\r\n                        return helperService.DEARRound(originalPaymentTotal - refundTotal, 2);\r\n                    }\r\n                    else {\r\n                        var totalPaid = 0;\r\n                        var totalRefunded = 0;\r\n\r\n                        for (var i = 0; i < data.Payments.length; i++) {\r\n                            var el = data.Payments[i];\r\n                            if (el.ShortName !== \"Discount\")\r\n                                totalPaid += el.Amount;\r\n                        }\r\n\r\n                        for (var i = 0; i < data.Surcharges.length; i++) {\r\n                            var el = data.Surcharges[i];\r\n                            totalPaid -= el.Total - ($scope.selectedItem.Data.TaxInclusive ? 0 : el.Tax);\r\n                        }\r\n\r\n                        $.each(data.Refunds, function (idx, ref) {\r\n                            $.each(ref.Payments, function (idx2, el) {\r\n                                if (el.ShortName !== \"Discount\") {\r\n                                    totalRefunded += el.Amount;\r\n                                }\r\n                            });\r\n\r\n                            $.each(ref.Surcharges, function (idx2, el) {\r\n                                totalRefunded -= el.Total - ($scope.selectedItem.Data.TaxInclusive ? 0 : el.Tax);\r\n                            });\r\n                        });\r\n\r\n                        return helperService.DEARRound(totalPaid - totalRefunded, 2);\r\n                    }\r\n                }\r\n                return 0;\r\n            };\r\n\r\n            $scope.getSaleTotal = function (item, ignoreRounding) {\r\n                if (item) {\r\n                    var data = convertFromOld(item.RawSaleObject);\r\n                    var isNewSale = helperService.showNewCheckoutUI(data);\r\n\r\n                    if (!isNewSale) {\r\n                        var rounding = ignoreRounding !== true ? (data.CashRounding ? data.CashRounding : 0) : 0;\r\n                        return $scope.abs(data.Total) + rounding;\r\n                    } else return $scope.abs(data.Total);\r\n\r\n                }\r\n                return 0;\r\n            };\r\n\r\n            // in history grid shows real sale amount. If sale is not completed, shows sum that should be paid, if fully paid - show real paid sum\r\n            // fullGridRow - exclude rounding\r\n            $scope.getSaleGridTotal = function (item, fullGridRow) {\r\n                if (item) {\r\n                    var data = convertFromOld(item.RawSaleObject);\r\n                    var isNewSale = helperService.showNewCheckoutUI(data);\r\n\r\n                    if (!isNewSale) {\r\n                        return $scope.abs($scope.totalSum(data, item.TaxInclusive)) + (data.CashRounding ? data.CashRounding : 0);\r\n                    } else {\r\n                        return CalculatorHelperService.getHistoryOrderLineSum(data);\r\n                    }\r\n                }\r\n                return 0;\r\n            };\r\n\r\n            $scope.continueSale = function (saleID) {\r\n                var isPartialPayment = true;\r\n                window.localStorage.setItem('continueSale', JSON.stringify({ saleID: saleID, type: 'continue', subType: isPartialPayment }));\r\n                $location.path('/sell');\r\n            };\r\n\r\n            $scope.continueReturnSale = function () {\r\n                $scope.actionMode = 'refund';\r\n\r\n                //            return $scope.reloadCurrentPage()\r\n                return $scope.reloadItem($scope.selectedItem.PosOrderID)\r\n                    .then(function () {\r\n                        $scope.changepPaymentAmount();\r\n                        $scope.saleType = 'return';\r\n                        $scope.operationName = 'Refund';\r\n                        $scope.operationSubName = \"continue\";\r\n\r\n                        $scope.submitSelectReturnItems(true);\r\n\r\n                        $timeout(function () {\r\n                            $scope.doneRefund(true);\r\n                        });\r\n                    })\r\n                    .catch(function (err) {\r\n                        $scope.processError(err, true);\r\n                        //$.unblockUI();\r\n                        //errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            $scope.continueExchangeSale = function () {\r\n                //            return $scope.reloadCurrentPage()\r\n                return $scope.reloadItem($scope.selectedItem.PosOrderID)\r\n                    .then(function () {\r\n                        $scope.changepPaymentAmount();\r\n                        $scope.saleType = 'return';\r\n                        $scope.operationName = 'Refund';\r\n                        $scope.operationSubName = \"continue\";\r\n\r\n                        $scope.submitSelectReturnItems(true);\r\n\r\n                        $timeout(function () {\r\n                            $scope.doneExchange(true);\r\n                        });\r\n                    })\r\n                    .catch(function (err) {\r\n                        $scope.processError(err, true);\r\n                        //$.unblockUI();\r\n                        //errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            $scope.returnSale = function () {\r\n                $scope.actionMode = 'refund';\r\n\r\n                if (!!$scope.selectedItem.nativeSalePayments)\r\n                    delete $scope.selectedItem.nativeSalePayments;\r\n\r\n                //            return $scope.reloadCurrentPage()\r\n                return $scope.reloadItem($scope.selectedItem.PosOrderID)\r\n                    .then(function () { return saleService.getSurcharge(); })\r\n                    .then(function (surcharges) {\r\n                        $scope.surcharges = {};\r\n                        $.each(surcharges, function (i, s) {\r\n                            $scope.surcharges[s.SurchargeID] = s;\r\n                        });\r\n\r\n                        $.blockUI();\r\n                        return saleService.checkRefundAvailable($scope.selectedItem.RawSaleObject)\r\n                            .then(function (data) {\r\n                                $.unblockUI();\r\n\r\n                                var deferred = $q.defer();\r\n\r\n                                if (data.data.IsRefundAvailable !== true) {\r\n                                    deferred.reject(data.data.Message);\r\n\r\n                                }\r\n                                else {\r\n                                    deferred.resolve(null);\r\n                                    // return main sale in any case as it can contain other refunds\r\n                                    //                                if($scope.selectedItem.Status == 'RETURN') {\r\n                                    var mainSaleID = $scope.selectedItem.SaleType === 2 ? $scope.selectedItem.OrderID :  $scope.selectedItem.RawSaleObject.ID;\r\n                                    deferred.promise = deferred.promise.then(function () {\r\n                                        return saleService.loadSalesHistory(null, null, { SaleID: mainSaleID });\r\n                                    });\r\n                                    //                              }\r\n                                }\r\n\r\n                                return deferred.promise;\r\n                            });\r\n                    })\r\n                    .then(function (resp) {\r\n                        // collect here info for grouped sale (https://dearsystems.atlassian.net/wiki/spaces/DDD/pages/974487676/Surcharge+calculations+during+sale+payment+refund+exchange)\r\n                        // we need in TotalSurcharge, TotalToRefund, TotalSale, all payment info grouped by payment type id\r\n                        // and surcharge id\r\n                        // CardSurchargeProrate \r\n                        var groupedSale = null;\r\n                        var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                        var rawSaleObject = JSON.parse(resp.Orders[0].Data.RawSaleObject);\r\n                        rawSaleObject = convertFromOld(rawSaleObject);\r\n                        restoreTransactionMetadata(resp.Orders[0].Data, rawSaleObject);\r\n\r\n                        if (resp && isNewSale) {\r\n                            groupedSale = CalculatorHelperService.groupSalesTree(resp.Orders[0].Data, $scope.surcharges, $scope.customPaymentMethods);\r\n                        } else if (!!resp) {\r\n                            var paymap = {};\r\n                            var surmap = {};\r\n                            var ghostsurlist = [];\r\n\r\n                            groupedSale =\r\n                                {\r\n                                    TotalSurcharge: 0, // including refunded surcharges via cash/store credits\r\n                                    GhostSurcharge: 0,\r\n                                    TotalSale: 0,\r\n                                    ExchangeAmount: 0,\r\n                                    PaymentsMap: {},\r\n                                    LoyaltyRefundCoeff: 1 // if we paid by loyalties it means that this sum didn't lead to loyalty accrual so during refund we should count this\r\n                                };\r\n\r\n                            saleService.goThroughEntireSaleItems(resp.Orders[0], function (line, isDirectSaleData) {\r\n                                if(!line.MissingInInvoice){\r\n                                        if ((line.IsProduct || line.ProductID) ||\r\n                                        (isDirectSaleData && !line.IsProduct && !line.ProductID && line.Name==='Discount')) {\r\n                                        var sm = 0;\r\n                                        if (!isDirectSaleData && line.Quantity < 0) {\r\n                                            sm = Math.abs(line.TotalPerLine + ($scope.selectedItem.Data.TaxInclusive !== true ? line.Tax : 0));\r\n                                            //                                        sm = Math.abs(line.TotalPerLine);\r\n                                        } else\r\n                                            sm = Math.abs(line.TotalPerLine + ($scope.selectedItem.Data.TaxInclusive !== true ? line.Tax : 0));\r\n\r\n                                        if (line.Quantity < 0 || (line.Name==='Discount' && line.Price<0)) sm *= -1;\r\n\r\n                                        groupedSale.TotalSale += helperService.DEARRound(sm, 2);\r\n                                    }\r\n                                }                                \r\n                            });\r\n\r\n                            saleService.goThroughEntireSaleSurcharges(resp.Orders[0], function (item, isDirectSaleData) {\r\n                                var srch = angular.copy(item);\r\n                                $scope.restoreSurcharge(srch, $scope.selectedItem.Data.TaxInclusive);\r\n\r\n                                // set refundable flag from global surcharge list\r\n                                if ($scope.surcharges[srch.SurchargeID]) {\r\n                                    srch.RefundSurcharge = $scope.surcharges[srch.SurchargeID].RefundSurcharge;\r\n                                }\r\n\r\n                                if (item.PaymentShortName) {\r\n                                    // this is surcharge that was created as separation of cash surcharge refund\r\n                                    // but we still need to count it \r\n                                    srch.RefundSurcharge = true;\r\n                                    ghostsurlist.push(srch);\r\n                                    //groupedSale.TotalSurcharge += (!isDirectSaleData ? -1 : 1) * srch.CalculatedValueWithTax;\r\n                                } else if (item.PaymentID) {\r\n                                    surmap[item.PaymentID] = srch;\r\n                                    if (srch.RefundSurcharge === true)\r\n                                        groupedSale.TotalSurcharge += (!isDirectSaleData ? -1 : 1) * srch.CalculatedValueWithTax;\r\n                                }\r\n                            });\r\n\r\n                            saleService.goThroughEntireSalePayments(resp.Orders[0], function (item, isDirectSaleData) {\r\n                                $scope.setPaymentMethodName(item);\r\n\r\n                                //restore surcharges to payments\r\n                                var srch = surmap[item.ID];\r\n                                if (srch) {\r\n                                    item.Surcharge = srch;\r\n                                }\r\n                            });\r\n\r\n                            // group all surcharges\r\n                            // also group payments\r\n                            var paymentSum = 0;\r\n                            var loyaltyPaymentSum = 0;\r\n                            saleService.goThroughEntireSalePayments(resp.Orders[0], function (item, isDirectSaleData) {\r\n                                var id = saleService.formPaymentID(item);\r\n\r\n                                // collect only payments but not returns\r\n                                if (isDirectSaleData) {\r\n                                    if (item.ShortName === 'loyalty')\r\n                                        loyaltyPaymentSum += item.Amount;\r\n                                    else\r\n                                        paymentSum += item.Amount;\r\n                                } else if (item.Amount < 0) {\r\n                                    if (item.ShortName === 'loyalty')\r\n                                        loyaltyPaymentSum -= item.Amount;\r\n                                    else\r\n                                        paymentSum -= item.Amount;\r\n                                }\r\n\r\n                                var p = paymap[id];\r\n                                if (!p) {\r\n                                    item = angular.copy(item);\r\n                                    if (!isDirectSaleData) {\r\n                                        item.Amount *= -1;\r\n                                        if (item.Surcharge)\r\n                                            $scope.negateSurcharge(item.Surcharge);\r\n                                    }\r\n                                    paymap[id] = item;\r\n                                } else {\r\n                                    p.Amount += (!isDirectSaleData ? -1 : 1) * item.Amount;\r\n                                    if (item.Surcharge)\r\n                                        $scope.sumSurcharges(p.Surcharge, item.Surcharge, !isDirectSaleData); // add to p.Surcharge\r\n                                }\r\n                            });\r\n\r\n                            if ((paymentSum + loyaltyPaymentSum) > 0)\r\n                                groupedSale.LoyaltyRefundCoeff = paymentSum / (paymentSum + loyaltyPaymentSum);\r\n                            else\r\n                                groupedSale.LoyaltyRefundCoeff = 1;\r\n\r\n                            // go through ghost list\r\n                            $.each(ghostsurlist, function (i, srch) {\r\n                                groupedSale.GhostSurcharge -= srch.CalculatedValueWithTax;\r\n                            });\r\n\r\n                            groupedSale.GhostSurcharge = helperService.DEARRound(groupedSale.GhostSurcharge, 2);\r\n\r\n                            // create initial surcharge copy for next calculations\r\n                            groupedSale.PaymentsMap = {}; // all payments map for initial sale\r\n                            $.each(helperService.mapToList(paymap), function (i, p) {\r\n                                p.ID = uuid2.newguid();\r\n                                if (p.Surcharge) {\r\n                                    p.Surcharge.PaymentID = p.ID;\r\n                                    p.InitialSurcharge = angular.copy(p.Surcharge);\r\n                                }\r\n                                groupedSale.PaymentsMap[p.ID] = p;\r\n                            });\r\n                        }\r\n\r\n                        if ($scope.selectedItem.Status === 'RETURN' && !!resp) {\r\n                            var map = {};\r\n                            $scope.selectedItem.nativeSalePayments = [];\r\n\r\n                            // If we have cascade exchange, then we need to take only refunded product total, \r\n                            // as payment value(because payments array contains all payments(including initial sale payments))\r\n                            var maxReturnAmount = 0;\r\n\r\n                            $.each($scope.selectedItem.Data.Refunds, function (idx, el) {\r\n                                $.each(el.Lines, function (lidx, line) {\r\n                                    if (line.Quantity < 0) {\r\n                                        // is exclusive tax, add tax to get total line price\r\n                                        var sm = line.TotalPerLine + ($scope.selectedItem.Data.TaxInclusive !== true ? line.Tax : 0);\r\n\r\n                                        maxReturnAmount += sm;\r\n                                    }\r\n                                });\r\n                            });\r\n\r\n                            $.each($scope.selectedItem.Data.Refunds, function (idx, el) {\r\n                                $.each(el.Payments, function (lidx, line) {\r\n\r\n                                    maxReturnAmount -= line.Amount;\r\n\r\n                                });\r\n                            });\r\n\r\n                            $scope.selectedItem.maxReturnAmount = maxReturnAmount;\r\n\r\n                            var smap = {};\r\n                            $.each(resp.Orders[0].Data.Surcharges, function (i, s) {\r\n                                smap[s.PaymentID] = s;\r\n                            });\r\n\r\n                            $.each(resp.Orders[0].Data.Payments, function (i, e) {\r\n                                if (!map[e.ID]) {\r\n                                    $scope.selectedItem.nativeSalePayments.push(e);\r\n                                }\r\n                                map[e.ID] = e;\r\n                            });\r\n\r\n                            $.each(resp.Orders[0].Data.Refunds, function (idx, ref) {\r\n                                smap = {};\r\n                                $.each(ref.Surcharges, function (i, s) {\r\n                                    smap[s.PaymentID] = s;\r\n                                });\r\n\r\n                                if (!!ref.Payments && !ref.IsFromChild) {\r\n                                    $.each(ref.Payments, function (idx, p) {\r\n                                        var pc = angular.copy(p);\r\n                                        if (!!pc.Amount)\r\n                                            pc.Amount = -1 * pc.Amount;\r\n\r\n                                        if (!map[pc.ID]) {\r\n                                            $scope.selectedItem.nativeSalePayments.push(pc);\r\n                                            map[pc.ID] = pc;\r\n                                        }\r\n                                    });\r\n                                }\r\n                            });\r\n                        }\r\n\r\n                        $scope.changepPaymentAmount();\r\n                        //$('#salesHistoryGridContainer').block({ message: null, baseZ: 1000 });\r\n                        //$location.path('/sell').search({ saleID: saleID, type: 'return' });\r\n                        $scope.hideDetails = true;\r\n                        $scope.saleType = 'return';\r\n                        $scope.operationName = 'Refund';\r\n                        $scope.operationSubName = null;\r\n\r\n                        $scope.currentSale = angular.copy($scope.selectedItem.RawSaleObject);\r\n                        isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                        if (groupedSale)\r\n                            $scope.currentSale.GroupedSale = groupedSale;\r\n\r\n                        // clear change amount to prevent propagation of invalid value  to refund sale\r\n                        $scope.currentSale.CashChangeAmount = 0;\r\n                        if (!isNewSale && !!$scope.selectedItem.nativeSalePayments)\r\n                            $scope.currentSale.nativeSalePayments = $scope.selectedItem.nativeSalePayments;\r\n\r\n                        // check that we in chained return mode\r\n                        var isChainedReturn = $scope.isChainedRefundAllowed();\r\n\r\n                        $scope.currentSale.OrderNumber = $scope.selectedItem.OrderNumber;\r\n                        $scope.currentSale.ReturnID = uuid2.newguid();\r\n                        $scope.currentSale.RefundNumber = '';\r\n\r\n                        var refundsCopy = angular.copy($scope.selectedItem.Data.Refunds);\r\n\r\n                        // remove coupon info\r\n                        if (!isNewSale) {\r\n                            delete $scope.currentSale.selectedCoupon;\r\n                            delete $scope.currentSale.selectedCouponID;\r\n                            delete $scope.currentSale.selectedCouponDealID;\r\n                            $scope.currentSale.FullReturnRounding = 0;\r\n                            $scope.currentSale.additionalEstimateTotal = 0;\r\n                            $scope.currentSale.CalculatedTax = 0;\r\n                            $scope.currentSale.BaseTotal = 0;\r\n                            $scope.currentSale.SurchargeToRefund = 0;\r\n                            $scope.currentSale.SurchargeTaxToRefund = 0;\r\n                            $scope.currentSale.NonRefundableSurcharge = 0;\r\n\r\n                            var pmap = {};\r\n\r\n                            if ($scope.currentSale.Surcharges && $scope.currentSale.Surcharges.length > 0) {\r\n                                $.each($scope.currentSale.Surcharges, function (idx, el) {\r\n                                    if (!pmap[el.PaymentID]) {\r\n                                        pmap[el.PaymentID] = true;\r\n                                        if (el.RefundSurcharge === true) {\r\n                                            $scope.currentSale.SurchargeToRefund += el.CalculatedValue;\r\n                                            $scope.currentSale.SurchargeTaxToRefund += el.Tax;\r\n                                        }\r\n                                        else {\r\n                                            $scope.currentSale.NonRefundableSurcharge += el.CalculatedValue;\r\n                                        }\r\n                                    }\r\n                                });\r\n                            }\r\n\r\n                            // in chained refund we start refund as for non refunded sale\r\n                            // for only sold items\r\n                            if (isChainedReturn) {\r\n                                // leave only newly sold items\r\n                                $scope.currentSale.CheckoutItems = $scope.getSoldOnlyItems($scope.currentSale);\r\n                            }\r\n\r\n                            if (refundsCopy && refundsCopy.length > 0) {\r\n                                $.each(refundsCopy, function (reIdx, ref) {\r\n                                    $.each(ref.Surcharges, function (idx, el) {\r\n                                        if (!pmap[el.PaymentID]) {\r\n                                            pmap[el.PaymentID] = true;\r\n\r\n                                            $scope.restoreSurcharge(el, $scope.selectedItem.Data.TaxInclusive);\r\n                                            $scope.currentSale.SurchargeToRefund -= el.Total;\r\n                                            $scope.currentSale.SurchargeTaxToRefund -= el.Tax;\r\n                                        }\r\n                                    });\r\n                                });\r\n                            }\r\n\r\n                            $scope.currentSale.SurchargeTaxToRefund = helperService.DEARRound($scope.currentSale.SurchargeTaxToRefund, 2);\r\n                            $scope.currentSale.SurchargeToRefund = helperService.DEARRound($scope.currentSale.SurchargeToRefund, 2) + ($scope.selectedItem.Data.TaxInclusive ? 0 : $scope.currentSale.SurchargeTaxToRefund);\r\n                            $scope.currentSale.NonRefundableSurcharge = helperService.DEARRound($scope.currentSale.NonRefundableSurcharge, 2);\r\n\r\n                            var discountCoeff = 1;\r\n                            $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                                if (el.DiscountCoeff && el.DiscountCoeff !== 0) {\r\n                                    discountCoeff = el.DiscountCoeff;\r\n                                }\r\n                            });\r\n\r\n                            $.each($scope.currentSale.CheckoutItems, function (idx, item) {\r\n                                $.each(refundsCopy, function (i, refItem) {\r\n                                    $.each(refItem.Lines, function (j, refLine) {\r\n                                        if (item.BaseCount === undefined || item.BaseCount == null)\r\n                                            item.BaseCount = item.Count; // initial item count for which Tax and Amount were calculated\r\n                                        if (refLine.Quantity < 0) {\r\n                                            // price comparing\r\n                                            // take into account that on exclusive tax OverriddenPrice contains tax but line.Price - does not.\r\n                                            var isPricesEqual = item.Price === refLine.OverriddenPrice;\r\n                                            if ($scope.selectedItem.Data.TaxInclusive !== true) {\r\n                                                isPricesEqual = helperService.DEARRound(item.TotalPerLine + item.Tax, 2) ===\r\n                                                    helperService.DEARRound(refLine.OverriddenPrice / discountCoeff * item.Quantity, 2);\r\n                                            } else {\r\n                                                isPricesEqual = helperService.DEARRound(item.TotalPerLine, 2) === helperService.DEARRound(refLine.OverriddenPrice / discountCoeff * item.Quantity, 2);\r\n                                            }\r\n\r\n                                            if ((item.Name && item.Name.indexOf('(Surcharge)') == -1)\r\n                                                && ((item.SaleType == 'sale' && (refLine.IsProduct == true || refLine.IsGiftCard == true) &&\r\n                                                    refLine.ProductID === item.ProductID && refLine.GiftCardCode === (item.GiftCardCode === undefined ? null : item.GiftCardCode) && (!item.SerialNumber ||\r\n                                                        item.SerialNumber === refLine.SerialNumber) && isPricesEqual) ||\r\n                                                    (item.SaleType == 'customsale' && refLine.IsProduct == false && item.Name == refLine.Name && isPricesEqual))\r\n                                            ) {\r\n\r\n                                                item.Count = parseFloat(item.Count) + refLine.Quantity;\r\n                                                refLine.Quantity = 0;\r\n                                            }\r\n                                        }\r\n                                    });\r\n                                });\r\n                            });\r\n\r\n                            $scope.currentSale.ReturnItems = $scope.currentSale.CheckoutItems;\r\n\r\n                            $.each($scope.currentSale.CheckoutItems, function (idx, item) {\r\n                                $.each($scope.selectedItem.Data.Lines, function (j, refLine) {\r\n                                    // price comparing\r\n                                    // take into account that on exclusive tax OverriddenPrice contains tax but line.Price - does not.\r\n                                    var isPricesEqual = item.Price === refLine.OverriddenPrice;\r\n                                    if ($scope.selectedItem.Data.TaxInclusive !== true) {\r\n                                        isPricesEqual = helperService.DEARRound(item.TotalPerLine + item.Tax, 2) ===\r\n                                            helperService.DEARRound(refLine.OverriddenPrice / discountCoeff * item.Quantity, 2);\r\n                                    } else {\r\n                                        isPricesEqual = helperService.DEARRound(item.TotalPerLine, 2) === helperService.DEARRound(refLine.OverriddenPrice / discountCoeff * item.Quantity, 2);\r\n                                    }\r\n\r\n                                    if (((item.SaleType == 'sale' && (refLine.IsProduct == true || refLine.IsGiftCard == true) &&\r\n                                        refLine.ProductID === item.ProductID && refLine.GiftCardCode === (item.GiftCardCode === undefined ? null : item.GiftCardCode) && (!item.SerialNumber ||\r\n                                            item.SerialNumber === refLine.SerialNumber) && isPricesEqual) ||\r\n                                        (item.SaleType == 'customsale' && refLine.IsProduct == false && item.Name == refLine.Name && isPricesEqual))\r\n                                    ) {\r\n                                        item.Count = refLine.Quantity - refLine.refundQuantity;// | 0;\r\n                                    }\r\n                                });\r\n                            });\r\n\r\n                            $scope.currentSale.ReturnPayments = $scope.currentSale.Payments;\r\n\r\n                            $scope.currentSale.CheckoutItems = [];\r\n                            $scope.currentSale.Payments = [];\r\n                            $scope.currentSale.Surcharges = [];\r\n\r\n                            $.each($scope.currentSale.ReturnItems, function (idx, el) {\r\n                                el.maxCount = el.Count;\r\n                                if ($scope.selectedItem.canContinue == true || $scope.selectedItem.IsPartialPaid == true) {\r\n                                    el.minCount = el.Count;\r\n                                    el.return = true;\r\n                                }\r\n                                else {\r\n                                    el.return = false;\r\n                                    if (el.Count === 0) {\r\n                                        el.minCount = 0;\r\n                                    } else {\r\n                                        el.minCount = 1;\r\n                                    }\r\n                                }\r\n                            });\r\n\r\n                            $scope.currentSale.returnLoyaltyPoints = $scope.currentSale.customer.ID ? true : false;\r\n\r\n                        } else {\r\n                            // calculate refund payments\r\n                            var outData = CalculatorHelperService.calculateRefundCheckout($scope.currentSale, $scope.selectedItem, $scope.actionMode);\r\n                            outData.selectedItem = $scope.selectedItem;\r\n\r\n                            CalculatorHelperService.calculateRefundPayments($scope.currentSale, outData);\r\n                        }\r\n\r\n\r\n\r\n                        if ($scope.currentSale.customer.ID) {\r\n                            $scope.refundNeedCustomer = false;\r\n                        } else {\r\n                            $scope.currentSale.canChangeCustomer = true;\r\n                            $scope.addCustomer();\r\n                            $scope.refundNeedCustomer = true;\r\n                        }\r\n\r\n                        if (!isNewSale)\r\n                            $scope.currentSale.EstimateTotal = $scope.estimateTotalSum();\r\n                        else \r\n                            $scope.currentSale.newRefundOrder = null;\r\n\r\n                        $timeout($scope.submitSelectReturnItems, 1);\r\n\r\n                        /// We need to update customers loyalty points do show correct value in receipt.\r\n                        if (configService.isOnline && !!$scope.currentSale.customer.ID) {\r\n                            customerService.getCustomer($scope.currentSale.customer.ID).then(function (resp) {\r\n                                if (resp.Customers[0])\r\n                                    $scope.currentSale.customer = resp.Customers[0];\r\n\r\n                                $scope.currentSale.CustomerLoyaltyPoints = $scope.currentSale.customer.LoyaltyPoints ? $scope.currentSale.customer.LoyaltyPoints : 0;\r\n\r\n                                $timeout(function () {\r\n                                    $rootScope.$broadcast('popup.shown');\r\n                                }, 100);\r\n\r\n                            }, function (error) {\r\n                                $timeout(function () {\r\n                                    $rootScope.$broadcast('popup.shown');\r\n                                }, 100);\r\n                            });\r\n                        }\r\n                        else {\r\n                            $timeout(function () {\r\n                                $rootScope.$broadcast('popup.shown');\r\n                            }, 100);\r\n                        }\r\n\r\n                    })\r\n                    .catch(function (err) {\r\n                        $scope.processError(err, true);\r\n                        //                    $.unblockUI();\r\n                        //                    errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            $scope.raiseViewChanged = function () {\r\n                $rootScope.$broadcast('view.loaded');\r\n            };\r\n\r\n            $scope.getFormatedDate = helperService.getFormatedDate;\r\n\r\n            $scope.getDateByFormatFromUtcToLocal = helperService.getDateByFormat;\r\n\r\n            $scope.getDateByFormat = helperService.getDateByFormatAlreadyLocal;\r\n\r\n            $scope.firestLoad = true;\r\n\r\n            $scope.reloadItem = function (itemID, skipDialog) {\r\n                return $scope.onLoadInternal(itemID)\r\n                    .then(function (res) {\r\n                        var deferred = $q.defer();\r\n                        var lst = $scope.data.filter(function (l) { return l.PosOrderID === itemID; });\r\n                        if (lst.length > 0) {\r\n                            $scope.selectItemInternal(lst[0], skipDialog);\r\n                            deferred.resolve(lst[0]);\r\n                        } else deferred.resolve(null);\r\n\r\n                        return deferred.promise;\r\n                    });\r\n            };\r\n\r\n            // will present current action mode. in details: 'details', in refund: 'refund'\r\n            $scope.actionMode = null;\r\n\r\n            $scope.selectItem = function (item) {\r\n                $scope.actionMode = 'details';\r\n\r\n                return $scope.reloadItem(item.PosOrderID)\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            $scope.openSalesHistoryFilterDialog = function () {\r\n                $scope.filters.OutletID1 = $scope.filters.OutletID;\r\n                $scope.filters.StatusID1 = $scope.filters.StatusID;\r\n                $scope.filters.DateFrom1 = $scope.filters.DateFrom;\r\n                $scope.filters.DateTo1 = $scope.filters.DateTo;\r\n\r\n                $scope.actionMode = 'filters';\r\n\r\n                var $windowElement = $('#saleHistoryFilterDialogPartial');\r\n                helperService.showDialog($windowElement, function () {\r\n                    $scope.newGuidForRefund = uuid2.newguid();\r\n                    $scope.newGuidForRefund2 = uuid2.newguid();\r\n\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('update.maxwidth');\r\n                    });\r\n                });\r\n            };\r\n\r\n            $scope.closeSalesHistoryFilterDialog = function () {\r\n                $scope.actionMode = null;\r\n\r\n                var $windowElement = $('#saleHistoryFilterDialogPartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.applyFilters = function () {\r\n                $scope.filters.OutletID = $scope.filters.OutletID1;\r\n                $scope.filters.StatusID = $scope.filters.StatusID1;\r\n                $scope.filters.DateFrom = $scope.filters.DateFrom1;\r\n                $scope.filters.DateTo = $scope.filters.DateTo1;\r\n                $scope.actionMode = null;\r\n\r\n                if ($scope.gridType !== 'pos') {\r\n                    $scope.dearSalesFilters.DateFrom = from;\r\n                    $scope.dearSalesFilters.DateTo = to;\r\n                    $scope.dearSalesSelectedPage = 1;\r\n                }\r\n\r\n                var $windowElement = $('#saleHistoryFilterDialogPartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.getSaleShippingAddress = function() {\r\n                if ($scope.selectedItem && $scope.selectedItem.Data) {\r\n                    const data = $scope.selectedItem.Data;\r\n                    return `${data.CustomerShippingAddressLine1} ${data.CustomerShippingAddressLine2} ${data.CustomerShippingCity} ${data.CustomerShippingProvince} ${data.CustomerShippingZip} ${data.CustomerShippingCountry}`\r\n                }\r\n\r\n                return '-';\r\n            }\r\n\r\n            $scope.selectItemInternal = function (item, skipDialog) {\r\n\r\n                if (item) {\r\n\r\n                    $scope.hideDetails = false;\r\n                    $.each($scope.data, function (idx, el) {\r\n                        el.isSelected = false;\r\n                    });\r\n                    $scope.selectedItem = {};\r\n                    angular.copy(item, $scope.selectedItem);\r\n                    item.isSelected = true;\r\n                    $scope.selectedItem.RawSaleObject = JSON.parse(item.Data.RawSaleObject);\r\n                    $scope.selectedItem.RawSaleObject = convertFromOld($scope.selectedItem.RawSaleObject);\r\n                    $scope.selectedItem.RawSaleObject.IsFirstChild = $scope.selectedItem.IsFirstChild === true;\r\n\r\n                    restoreTransactionMetadata($scope.selectedItem.Data, $scope.selectedItem.RawSaleObject);\r\n\r\n                    $scope.selectedItem.IsPartialPaid = $scope.selectedItem.RawSaleObject.IsPartialPaid;\r\n\r\n                    $scope.selectedItem.isVoided = saleService.isVoided($scope.selectedItem);\r\n                    $scope.selectedItem.canBeVoided = configService.CanVoidSales &&\r\n                        ($scope.selectedItem.Status === 'LAYBY' || $scope.selectedItem.Status === 'LAYBY_CLOSED');\r\n\r\n                    // convert current selected item to pseudo sale\r\n                    // to simplify next chain action\r\n                    // non child refund - refund that was done in this refund/exchange sale\r\n                    // child refunds - refunds from nearest next chained exchanges, where\r\n                    // product sold in current refund, is refunded.\r\n                    // we need this info in parent refund to correctly show a status and\r\n                    // a number of items available for refund in parent exchange\r\n                    if (!!$scope.selectedItem.Data.Refunds &&\r\n                        $scope.selectedItem.Data.Refunds.length > 0 &&\r\n                        $scope.selectedItem.Status == 'RETURN') {\r\n                        // the non child refunds always will be 1\r\n                        var nonChildRefunds = $scope.selectedItem.Data.Refunds.filter(function (r) { return r.IsFromChild !== true; });\r\n\r\n                        // child refunds - refunds from next chained refund. They needs here for information\r\n                        var childRefunds = $scope.selectedItem.Data.Refunds.filter(function (r) { return r.IsFromChild === true; });\r\n\r\n                        // if there is child refunds, create pseudo sale\r\n                        // this is to use for chained exchanges/ refunds\r\n                        // extract from own refunds items that were sold in this refund (due to exchange)\r\n                        $scope.selectedItem.Data.InitialLines = $scope.selectedItem.Data.Lines; // for correct sums calculations\r\n                        $scope.selectedItem.Data.InitialRefunds = $scope.selectedItem.Data.Refunds;\r\n\r\n                        $scope.selectedItem.Data.Lines = nonChildRefunds[0].Lines.filter(function (r) { return r.Quantity > 0; });\r\n                        // leavs only real refund items\r\n                        nonChildRefunds[0].Lines = nonChildRefunds[0].Lines.filter(function (r) { return r.Quantity <= 0; });\r\n\r\n                        if (childRefunds.length > 0) {\r\n                            // all child refunds will be included to this refund to\r\n                            // correctly show items in\r\n                            $.each(childRefunds, function (idx, ref) {\r\n\r\n                                var childLines = ref.Lines.filter(function (r) { return r.Quantity < 0; });\r\n                                $.each(childLines, function (id, chL) {\r\n                                    chL.IsFromChild = true;\r\n                                });\r\n\r\n                                nonChildRefunds[0].Lines = nonChildRefunds[0].Lines.concat(childLines);\r\n                            });\r\n                        }\r\n\r\n                        // to allow order details form to work correctly, we should have only one\r\n                        // refund in Refunds array. So we reassign Refunds in selected item to only nonchild\r\n                        // refund\r\n                        $scope.selectedItem.Data.Refunds = [nonChildRefunds[0]];\r\n                    }\r\n\r\n                    var totalSalePaid = $scope.getSaleTotalPaid($scope.selectedItem.Data);\r\n                    var totalSaleGrid = $scope.getSaleGridTotal($scope.selectedItem.Data);\r\n\r\n                    if (typeof $scope.selectedItem.IsPartialPaid === 'undefined') {\r\n                        if ($scope.selectedItem.Status === 'ONACCOUNT_CLOSED'\r\n                            || $scope.selectedItem.Status === 'LAYBY_CLOSED'\r\n                            || $scope.selectedItem.Status === 'ONACCOUNT'\r\n                            || $scope.selectedItem.Status === 'LAYBY'\r\n                            || $scope.selectedItem.Status === 'CLOSED') {\r\n                            if (helperService.DEARRound(Math.abs(totalSaleGrid), 2) > helperService.DEARRound(Math.abs(totalSalePaid), 2)\r\n                                || helperService.DEARRound(Math.abs(totalSalePaid), 2) == 0) {\r\n                                $scope.selectedItem.IsPartialPaid = true;\r\n                            }\r\n                        }\r\n                        else if ($scope.selectedItem.Status == 'RETURN') {\r\n                            // if(helperService.DEARRound(totalSalePaid, 2) < helperService.DEARRound(totalSaleGrid, 2) &&\r\n                            //    helperService.DEARRound(totalSaleGrid, 2)>0)\r\n                            //     $scope.selectedItem.IsPartialPaid = true;\r\n                        }\r\n                    }\r\n\r\n                    $scope.selectedItem.PartiallyPaidDue = 0;\r\n                    var isNewSale0 = helperService.showNewCheckoutUI($scope.selectedItem.RawSaleObject);\r\n\r\n                    if (($scope.selectedItem.IsPartialPaid == true || $scope.selectedItem.IsFromDearSale) && $scope.selectedItem.Data.Refunds && $scope.selectedItem.Data.Refunds.length > 0) {\r\n\r\n                        if (!isNewSale0)\r\n                            $scope.selectedItem.PartiallyPaidDue = $scope.getPartialPaidDue($scope.selectedItem);\r\n                        else\r\n                            $scope.selectedItem.PartiallyPaidDue = Math.abs($scope.selectedItem.RawSaleObject.Balance);\r\n                    }\r\n\r\n                    var hasRefund = false;\r\n                    var isExchange = $scope.selectedItem.Status == 'RETURN' &&\r\n                        !!$scope.selectedItem.Data.Lines &&\r\n                        $scope.selectedItem.Data.Lines.length > 0;\r\n\r\n                    var payments = [];\r\n\r\n                    $.each($scope.selectedItem.Data.Payments, function (refIdx, ref) {\r\n                        if (ref.PaymentProcessorID === constants.backofficePayment) {\r\n                            var isFound = false;\r\n                            $.each($scope.selectedItem.RawSaleObject.Payments, function (pRefIdx, pRef) {\r\n                                if (pRef.ID == ref.ID) {\r\n                                    isFound = true;\r\n                                }\r\n                            });\r\n\r\n                            if (!isFound) {\r\n\r\n                                var posPayment = {};\r\n                                angular.copy(ref, posPayment);\r\n                                posPayment.PaymentTypeName = gettextCatalog.getString(\"Non-POS\");\r\n\r\n                                $scope.selectedItem.RawSaleObject.Payments.push(posPayment);\r\n                            }\r\n                        }\r\n                    });\r\n\r\n                    var refundsCopy = angular.copy($scope.selectedItem.Data.Refunds);\r\n\r\n                    $.each($scope.selectedItem.Data.Lines, function (lineIdx, line) {\r\n                        line.refundQuantity = 0;\r\n                    });\r\n\r\n\r\n                    var discountCoeff = 1;\r\n                    $.each($scope.selectedItem.RawSaleObject.CheckoutItems, function (idx, el) {\r\n                        if (el.DiscountCoeff && el.DiscountCoeff !== 0) {\r\n                            discountCoeff = el.DiscountCoeff;\r\n                        }\r\n                    });\r\n\r\n                    $.each(refundsCopy, function (refIdx, ref) {\r\n\r\n                        hasRefund = true;\r\n\r\n                        $.each(ref.Lines, function (refLineIdx, refLine) {\r\n                            if (refLine.Quantity < 0 && (refLine.Name && refLine.Name.indexOf('(Surcharge)') == -1) &&\r\n                                (refLine.IsFromChild === true || $scope.selectedItem.Status !== 'RETURN')) {\r\n                                $.each($scope.selectedItem.Data.Lines, function (lineIdx, line) {\r\n                                    // price comparing\r\n                                    // take into account that on exclusive tax OverriddenPrice contains tax but line.Price - does not.\r\n                                    // Not only eclsudive, due to appling discountCoeff \r\n                                    var isPricesEqual = line.Price === refLine.OverriddenPrice;\r\n\r\n                                    if (helperService.DEARRound(discountCoeff,6) > 0 && \r\n                                        helperService.DEARRound(discountCoeff,6) != 1) {\r\n                                        isPricesEqual = helperService.DEARRound(line.Price, 2) ===\r\n                                            helperService.DEARRound(refLine.Price / discountCoeff, 2);\r\n                                    } \r\n                                    \r\n                                    if(!isPricesEqual) {\r\n                                        // try to calculate disount coefficient from refund price and sell price difference\r\n                                        var priceWithNoSaleDiscount =  Math.abs(refLine.TotalPerLine/ refLine.Quantity);\r\n                                        isPricesEqual = helperService.DEARRound(line.Price, 2) ===\r\n                                            helperService.DEARRound(priceWithNoSaleDiscount, 2);\r\n                                    }\r\n\r\n                                    //if ($scope.selectedItem.Data.TaxInclusive !== true) {\r\n                                    //    //isPricesEqual = helperService.DEARRound((line.TotalPerLine + line.Tax) * Math.abs(refLine.Quantity), 2) ===\r\n                                    //    //    helperService.DEARRound((refLine.TotalPerLine + refLine.Tax) * Math.abs(line.Quantity), 2);\r\n                                    //    //isPricesEqual = helperService.DEARRound(line.TotalPerLine + line.Tax, 2) ===\r\n                                    //    //    helperService.DEARRound(refLine.OverriddenPrice / discountCoeff * line.Quantity, 2);\r\n                                    //} else {\r\n                                    //    //isPricesEqual = helperService.DEARRound(line.TotalPerLine * Math.abs(refLine.Quantity), 2) ===\r\n                                    //    //    helperService.DEARRound(refLine.TotalPerLine * Math.abs(line.Quantity), 2);\r\n                                    //    //isPricesEqual = helperService.DEARRound(line.TotalPerLine, 2) ===\r\n                                    //    //    helperService.DEARRound(refLine.OverriddenPrice / discountCoeff * line.Quantity, 2);\r\n                                    //}\r\n\r\n                                    if ((line.Name && line.Name.indexOf('(Surcharge)') == -1) &&\r\n                                        ((refLine.ProductID != null && refLine.ProductID === line.ProductID && refLine.GiftCardCode === line.GiftCardCode &&\r\n                                            (!line.SerialNumber || line.SerialNumber === refLine.SerialNumber) && isPricesEqual) ||\r\n                                            (refLine.ProductID === line.ProductID && refLine.GiftCardCode === line.GiftCardCode && line.IsProduct == false && refLine.IsProduct == false &&\r\n                                                line.Name == refLine.Name && isPricesEqual))\r\n                                    ) {\r\n                                        if((line.Quantity < 0 && $scope.selectedItem.Status === 'RETURN') ||\r\n                                        isExchange ||\r\n                                        (line.Quantity > 0 && $scope.selectedItem.Status !== 'RETURN')) {\r\n                                            if (refLine.Quantity < 0) {\r\n                                                line.refundQuantity += Math.abs(refLine.Quantity);\r\n                                                refLine.Quantity = 0;\r\n                                            }\r\n                                            if (line.Quantity < line.refundQuantity)\r\n                                                line.refundQuantity = line.Quantity;\r\n                                        }\r\n                                    }\r\n                                });\r\n                            }\r\n                        });\r\n\r\n                        $.each(ref.Payments, function (refPayIdx, refPay) {\r\n                            var updatePay = false;\r\n                            $.each(payments, function (payIdx, pay) {\r\n                                // if (pay.ShortName === refPay.ShortName && (!pay.ServerTransactionID)) {\r\n                                if (pay.ID === refPay.ID && (!pay.ServerTransactionID)) {\r\n                                    pay.Amount += refPay.Amount;\r\n                                    updatePay = true;\r\n                                }\r\n                            });\r\n                            if (updatePay === false) {\r\n                                if (refPay.Amount >= 0)\r\n                                    payments.push(refPay);\r\n                            }\r\n                        });\r\n                        \r\n                    });\r\n\r\n                    if ($scope.selectedItem.Status === 'RETURN') {\r\n                        // remove from refund lines the same that is in\r\n                        // sale lines, because they were already calculated\r\n                        $.each($scope.selectedItem.Data.Lines, function (idx, el) {\r\n                            $.each($scope.selectedItem.Data.Refunds, function (refIdx, ref) {\r\n                                ref.Lines = ref.Lines.filter(function (l) {\r\n                                    return el.Quantity > 0 ||\r\n                                       !(l.ProductID == el.ProductID &&\r\n                                         l.OverriddenPrice == el.OverriddenPrice &&\r\n                                         (!el.SerialNumber || l.SerialNumber === el.SerialNumber));\r\n                                });\r\n                            });\r\n                        });\r\n                    }\r\n\r\n                    $scope.hideRefund = true;\r\n                    $.each($scope.selectedItem.Data.Lines, function (idx, el) {\r\n                        if (el.Name && (el.Name.indexOf('(Surcharge)') !== -1 || el.Name == 'Rounding' || el.Name == \"Discount\") &&\r\n                            el.IsProduct === false) {\r\n                        }\r\n                        else {\r\n                            if (el.Quantity !== el.refundQuantity) {\r\n                                $scope.hideRefund = false;\r\n                                return false;\r\n                            }\r\n                        }\r\n                    });\r\n\r\n                    getPaymentMethods();\r\n\r\n                    $.each(payments, function (idx, el) {\r\n                        el.Amount = helperService.DEARRound(el.Amount, 2);\r\n                        $scope.setPaymentName(el);\r\n                    });\r\n\r\n                    $scope.selectedItem.RefundPayments = payments;\r\n\r\n                    $scope.roundingReturned = 0;\r\n\r\n                    if ($scope.selectedItem.Data.Refunds) {\r\n                        $.each($scope.selectedItem.Data.Refunds, function (reIdx, ref) {\r\n                            if (ref.IsFromChild !== true) {\r\n                                $.each(ref.Lines, function (idx, el) {\r\n                                    if (el.Name === 'Rounding')\r\n                                        $scope.roundingReturned += el.Price;\r\n                                });\r\n\r\n                                // if we have sold lines in this sale, it means thst it is exchange\r\n                                if (!isExchange) {\r\n                                    var soldItems = ref.Lines.filter(function (el) {\r\n                                        return (el.IsProduct === true || el.IsGiftCard === true) && el.Quantity > 0;\r\n                                    });\r\n                                    isExchange = soldItems.length > 0;\r\n                                }\r\n                            }\r\n                        });\r\n                    }\r\n\r\n                    $scope.roundingReturned = helperService.DEARRound($scope.roundingReturned, 2);\r\n\r\n                    $scope.currentSale = angular.copy($scope.selectedItem.RawSaleObject);\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if (isNewSale) {\r\n                        CalculatorHelperService.groupMainSaleRefunds($scope.selectedItem, $scope.customPaymentMethods);\r\n                    } else {\r\n                        $scope.selectedItem.RefundPayments = []; // because it shows invalid values\r\n                    }\r\n\r\n                    // remove coupon info\r\n                    delete $scope.currentSale.selectedCoupon;\r\n                    delete $scope.currentSale.selectedCouponID;\r\n                    delete $scope.currentSale.selectedCouponDealID;\r\n\r\n                    // save refunds for partial refund continuation\r\n                    if ($scope.selectedItem.Status == 'RETURN') {\r\n                        if (!!$scope.selectedItem.Data.Refunds)\r\n                            $scope.currentSale.Refunds = $scope.selectedItem.Data.Refunds;\r\n\r\n                        $scope.currentSale.PosOrderID = $scope.selectedItem.PosOrderID;\r\n                    }\r\n\r\n                    if (!isNewSale) {\r\n                        $scope.currentSale.FullReturnRounding = 0;\r\n                        $scope.currentSale.additionalEstimateTotal = 0;\r\n                        $.each($scope.currentSale.CheckoutItems, function (idx, item) {\r\n                            if (!!item.itemAppliedDiscount) {\r\n                                item.itemDiscount = item.itemAppliedDiscount;\r\n                                item.itemAppliedDiscount = 0;\r\n                            }\r\n                        });\r\n                    }\r\n\r\n                    /*Call recal Sums*/\r\n                    var returnDue = 0;\r\n                    var rawTotal = 0;\r\n\r\n                    if (!isNewSale) {\r\n                        $scope.selectedItem.RawSaleObject.Surcharge = helperService.DEARRound(saleService.surchargeSum($scope.currentSale), 2);\r\n                        $scope.selectedItem.RawSaleObject.SubTotal = $scope.abs($scope.subTotalSum($scope.currentSale.CheckoutItems));\r\n                        $scope.selectedItem.RawSaleObject.Total = $scope.abs($scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive)) + ($scope.selectedItem.RawSaleObject.CashRounding ? $scope.selectedItem.RawSaleObject.CashRounding : 0);\r\n                        var stot = $scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive);\r\n                        var sgn = stot >= 0 ? 1 : -1;\r\n                        var paid = $scope.getSaleTotalPaid($scope.selectedItem.Data);\r\n                        rawTotal = stot + ($scope.selectedItem.RawSaleObject.CashRounding ?\r\n                            (sgn * $scope.selectedItem.RawSaleObject.CashRounding) : 0) - paid;\r\n                        rawTotal = helperService.DEARRound(rawTotal, 2);\r\n\r\n                        if ($scope.selectedItem.IsPartialPaid === true && $scope.selectedItem.Data.Refunds.length > 0) {\r\n                            returnDue = $scope.selectedItem.PartiallyPaidDue;\r\n                        }\r\n                        else {\r\n                            returnDue = rawTotal * -1;\r\n                        }\r\n                    } else {\r\n                        // in new sale mode things should be more simple\r\n                        rawTotal = CalculatorHelperService.getSaleTotalDue($scope.currentSale, $scope.selectedItem);\r\n\r\n                        if ($scope.selectedItem.IsPartialPaid === true && \r\n                            $scope.selectedItem.Data.Refunds.length > 0 && \r\n                            $scope.selectedItem.IsFirstChild\r\n                            ) {\r\n                            returnDue = $scope.selectedItem.PartiallyPaidDue;\r\n                        }\r\n                        else {\r\n                            returnDue = (isExchange === true ? 1 : -1) * rawTotal;\r\n                        }\r\n\r\n                        angular.forEach($scope.currentSale.Payments, function (p) {\r\n                            p.FromHistory = true;\r\n                        });\r\n                    }\r\n\r\n\r\n                    var saleTotalPaid = helperService.DEARRound(Math.abs($scope.getSaleTotalPaid($scope.selectedItem.Data)), 2);\r\n                    var saleTotalGrid = helperService.DEARRound(Math.abs($scope.getSaleGridTotal($scope.selectedItem.Data)), 2);\r\n\r\n                    $scope.selectedItem.canReturn = $scope.canReturn();\r\n                    if (!isNewSale) {\r\n                        $scope.selectedItem.canContinueReturn = !isExchange && $scope.selectedItem.Status === 'RETURN' && returnDue > 0;\r\n                        $scope.selectedItem.canContinueExchange = isExchange && $scope.selectedItem.Status === 'RETURN' && !!returnDue;// && returnDue < 0;\r\n                        $scope.selectedItem.shouldPayExtra = ($scope.selectedItem.IsPartialPaid === true && returnDue < 0) ||\r\n                            ($scope.selectedItem.canContinueExchange && returnDue < 0);\r\n                    } else {\r\n\r\n                        var isParentOnAcount = $scope.selectedItem.RawSaleObject && $scope.selectedItem.RawSaleObject.OrderType === 'ONACCOUNT' &&\r\n                            helperService.DEARRound($scope.selectedItem.RawSaleObject.Balance, 4) == 0;\r\n\r\n                        $scope.selectedItem.canContinueReturn = !isParentOnAcount && !isExchange && $scope.selectedItem.Status === 'RETURN' && !!returnDue;\r\n                        $scope.selectedItem.canContinueExchange = !isParentOnAcount && isExchange && $scope.selectedItem.Status === 'RETURN' && !!returnDue;\r\n                        $scope.selectedItem.shouldPayExtra =\r\n                            ($scope.selectedItem.IsPartialPaid === true && $scope.selectedItem.canContinueExchange!=true && returnDue < 0) ||\r\n                            ($scope.selectedItem.canContinueExchange && returnDue > 0);\r\n                        //$scope.selectedItem.shouldPayExtra = $scope.selectedItem.IsPartialPaid === true &&\r\n                        //    $scope.selectedItem.canContinueReturn !== true &&\r\n                        //    returnDue > 0;\r\n                    }\r\n\r\n                    // if we don't finish payment for this document, hide refund\r\n                    if (!$scope.hideRefund && ($scope.selectedItem.canContinueReturn || $scope.selectedItem.canContinueExchange))\r\n                        $scope.hideRefund = true;\r\n\r\n                    var canContinuePayment = false;\r\n                    if ($scope.selectedItem.Data.StandaloneRefund) {\r\n                        canContinuePayment = false;\r\n                    }\r\n                    else if ($scope.selectedItem.Status == 'ONACCOUNT' || $scope.selectedItem.Status == 'LAYBY') {\r\n                        canContinuePayment = true;\r\n                    }\r\n                    else if ($scope.selectedItem.Status == 'ONACCOUNT_CLOSED' || $scope.selectedItem.Status == 'LAYBY_CLOSED' || $scope.selectedItem.Status == 'CLOSED') {\r\n                        if(!isNewSale) canContinuePayment = saleTotalGrid > saleTotalPaid ? true : false;\r\n                         else canContinuePayment = $scope.selectedItem.shouldPayExtra;\r\n                    }\r\n                    else {\r\n                        canContinuePayment = false;\r\n                    }\r\n\r\n                    /*if($scope.selectedItem.IsFromDearSale){\r\n                        $scope.selectedItem.canContinue = canContinuePayment;\r\n                    }else{*/\r\n                        $scope.selectedItem.canContinue = canContinuePayment && hasRefund === false;\r\n                    //}                    \r\n\r\n                    $scope.selectedItem.cantExchange = undefined;\r\n                    if (($scope.selectedItem.Status == 'LAYBY'\r\n                        || $scope.selectedItem.Status == 'LAYBY_CLOSED'\r\n                        || $scope.selectedItem.Status == 'CLOSED'\r\n                    ) && canContinuePayment) {\r\n                        // layby sales, that are not paid in full, can not be exchanged in POS\r\n                        $scope.selectedItem.cantExchange = true;\r\n                    }\r\n\r\n                    $scope.selectedItem.allowOnAccountExchange = false;\r\n                    if (($scope.selectedItem.Status == 'ONACCOUNT' || $scope.selectedItem.Status == 'ONACCOUNT_CLOSED') && canContinuePayment) {\r\n                        // $scope.selectedItem.allowOnAccountExchange = true; // it seems doesn't work\r\n                        $scope.selectedItem.cantExchange = true;\r\n                    }\r\n\r\n                    if (isExchange && sgn > 0) { // exchange with additional payment. Do not show rounding\r\n                        $scope.roundingReturned = 0;\r\n                    }\r\n\r\n                    if (hasRefund && sgn < 0) { // pure refund, so no change can be\r\n                        $scope.currentSale.CashChangeAmount = 0;\r\n                    }\r\n\r\n                    if (!isNewSale)\r\n                        $scope.currentSale.LoyaltyPoints = saleService.totalPaymentsLoyaltyPoints($scope.currentSale);\r\n\r\n                } else {\r\n                    $scope.selectedItem = null;\r\n                }\r\n\r\n                if (skipDialog !== true) {\r\n                    $timeout(function () {\r\n                        showSalesHistyoryDetailsDialog();\r\n                    });\r\n\r\n                    $timeout(function () {\r\n                        $scope.raiseViewChanged();\r\n                    });\r\n                }\r\n            };\r\n\r\n            $scope.isChainedRefundAllowed = function () {\r\n                return $scope.selectedItem.Status === 'RETURN';\r\n            };\r\n\r\n            $scope.getSoldOnlyItems = function (sale) {\r\n                var items = sale.CheckoutItems;\r\n                var soldItems = items.filter(function (itm) { return itm.return !== true && itm.Amount >= 0; });\r\n                return soldItems;\r\n            };\r\n\r\n            $scope.scrollTo = function (selector) {\r\n\r\n                var target = $(selector);\r\n                if (target.length) {\r\n                    //event.preventDefault();\r\n                    $('html, body').stop().animate({\r\n                        scrollTop: target.offset().top\r\n                    }, 1000);\r\n                }\r\n            };\r\n\r\n            $scope.calculateRefundDiscount = function () {\r\n                //    angular.forEach(item.ch)\r\n            };\r\n\r\n            $scope.hiddenSearch = true;\r\n            $scope.hideSearch = function (hide) {\r\n                if (hide === true) {\r\n                    $scope.searchInput = '';\r\n                    $scope.search();\r\n                }\r\n                $scope.hiddenSearch = hide;\r\n            }\r\n\r\n            $scope.sort = function (field, direction) {\r\n                $scope.selectedPage = 1;\r\n                $scope.currentDir = direction;\r\n                $scope.sortFiled = field;\r\n                $scope.sorting = { FieldName: field, Direction: direction };\r\n                $scope.search();\r\n\r\n                if ($scope.newDir === 'desc') {\r\n                    $scope.newDir = 'asc';\r\n                } else {\r\n                    $scope.newDir = 'desc';\r\n                }\r\n            }\r\n\r\n            function getServerFiledName(field) {\r\n                switch (field) {\r\n                    case 'Date':\r\n                        return 'OrderDate';\r\n                    case 'Receipt':\r\n                        return 'OrderNumberNumeric';\r\n                    case 'Status':\r\n                        return 'Data.FinancialStatus';\r\n\r\n                }\r\n            };\r\n\r\n\r\n            $scope.addCustomer = function () {\r\n                if ($scope.currentSale.canChangeCustomer === true)\r\n                    $rootScope.$broadcast('addCustomer.show', Object.assign({ showViewDetails: $scope.actionMode === 'refund' }, $scope.currentSale.customer));\r\n            };\r\n\r\n            $scope.$on('addCustomer.selected', function (event, data) {\r\n                $scope.currentSale.customer = data.customer;\r\n                $scope.currentSale.SelectedContact = null;\r\n                $scope.refundNeedCustomer = false;\r\n\r\n                let searchCustomerText = $('#searchCustomerText').val();\r\n\r\n                    if (data.customer && data.customer.Contacts && data.customer.Contacts.length > 0) {\r\n                        searchCustomerText = !!searchCustomerText ? searchCustomerText.toLowerCase().trim() : '';\r\n                        const email = !!data.email ? data.email : '';\r\n\r\n                        const foundContact = data.customer.Contacts.find(temp => (!!temp.Email && temp.Email.toLowerCase() === email) ||\r\n                            (!!temp.Email && temp.Email.toLowerCase() === searchCustomerText) ||\r\n                            (!!temp.Phone && temp.Phone.toLowerCase() === searchCustomerText) ||\r\n                            (!!temp.MobilePhone && temp.MobilePhone.toLowerCase() === searchCustomerText));\r\n\r\n                        if (foundContact)\r\n                            $scope.currentSale.SelectedContact = foundContact;\r\n                        else {\r\n                            const defaultContact = data.customer.Contacts.find(temp => (!!temp.Email && temp.IncludeInEmail));\r\n                            if (defaultContact)\r\n                                $scope.currentSale.SelectedContact = defaultContact;\r\n                            else\r\n                                $scope.currentSale.SelectedContact = data.customer.Contacts[0];\r\n                        }\r\n                    }\r\n\r\n                if (data.action != 'search')\r\n                    customerService.loadCustomersAll(true);\r\n            });\r\n\r\n            $scope.changeReturnItemCount = function (item) {\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                if (!isNewSale) {\r\n                    var loyaltyEarning = parseFloat(item.LoyaltyEarning);\r\n                    item.LoyaltyPoints = loyaltyEarning ? item.PriceWithTax * item.Count * item.LoyaltyEarning : 0;\r\n                    var price = item.BasePriceWithDiscount;\r\n                    if (item.SaleType !== \"customsale\") {\r\n                        var taxObject = item.Taxes;\r\n                        var total = item.Count * price;\r\n                        item.Tax = calculateTax(taxObject, total, $scope.selectedItem.Data.TaxInclusive);\r\n                    }\r\n                }\r\n\r\n                $scope.submitSelectReturnItems();\r\n            };\r\n\r\n            var calculateTax = saleService.calculateTax;\r\n\r\n            $scope.oldReturnPayments = function () {\r\n                var sum = 0;\r\n                if ($scope.operationSubName == 'continue' && !!$scope.currentSale.Payments) {\r\n                    //sum += $scope.currentSale.Payments.sum(\"Amount\");\r\n                    // calc sum without any surcharges\r\n                    $.each($scope.currentSale.Payments, function (i, p) {\r\n                        sum += saleService.getAmountWithoutSurcharge(p);\r\n                    });\r\n                }\r\n\r\n                return sum;\r\n            };\r\n\r\n            $scope.submitSelectReturnItems = function (isContinueReturn) {\r\n                var addItem = false;\r\n                var fullReturn = true;\r\n                var lastItemReturn = true;\r\n                $scope.returnedLoaylty.value = 0;\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                if (!isContinueReturn) {\r\n\r\n                    var isOnlyGiftCards = true;\r\n\r\n                    $.each($scope.currentSale.ReturnItems, function (idx, el) {\r\n                        if (el.return) {\r\n                            addItem = true;\r\n                        }\r\n                        if (el.ProductType != 'GiftCard' && el.maxCount !== 0)\r\n                            isOnlyGiftCards = false;\r\n\r\n                        if (el.ProductType == 'GiftCard' && !$scope.isGiftCardRefundable) {\r\n                            $scope.showRefundGiftCardError = true;\r\n                        }\r\n                        if ((!el.return && el.maxCount !== 0) || el.Count !== el.maxCount) {\r\n                            fullReturn = false;\r\n                            lastItemReturn = false;\r\n                        }\r\n\r\n                    });\r\n\r\n                    if (!$scope.isGiftCardRefundable && isOnlyGiftCards)\r\n                        addItem = true;\r\n\r\n                    if (addItem === false) {\r\n                        $scope.currentSale.CheckoutItems = [];\r\n                        $scope.showRefundAmountError = true;\r\n                    } else {\r\n                        $scope.showRefundAmountError = false;\r\n\r\n                        if (!isNewSale) {\r\n                            $.each($scope.currentSale.ReturnItems, function (idx, el) {\r\n                                var returnItem = angular.copy(el);\r\n\r\n                                if (!el.DiscountCoeff)\r\n                                    el.DiscountCoeff = 1;\r\n\r\n                                ////We need to reduce itemDiscount by DiscountCoeff, or we will get incorrect prices\r\n                                returnItem.Amount = -1 * returnItem.PriceWithDiscount * returnItem.Count;\r\n                                returnItem.Price = -1 * Math.abs(returnItem.PriceWithDiscount + returnItem.itemDiscount * el.DiscountCoeff);\r\n                                returnItem.BasePrice = -1 * Math.abs(returnItem.BasePriceWithDiscount + returnItem.itemDiscount * el.DiscountCoeff);\r\n                                returnItem.Tax = -1 * el.Tax * Math.abs(returnItem.Count) / Math.abs(el.BaseCount);\r\n                                returnItem.Discount *= -1;\r\n                                returnItem.itemDiscount *= -1 * el.DiscountCoeff;\r\n                                returnItem.itemAppliedDiscount *= -1 * el.DiscountCoeff;\r\n                                returnItem.LoyaltyPoints *= -1;\r\n                                returnItem.LoyaltyPointsEarning *= -1;\r\n                                returnItem.PriceWithTax *= -1;\r\n                                returnItem.CanEdit = false;\r\n                                returnItem.sign = -1;\r\n\r\n                                var delIdx = null;\r\n                                $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                                    if (el.ID === returnItem.ID) {\r\n                                        delIdx = idx;\r\n                                        return false;\r\n                                    }\r\n                                });\r\n                                if (delIdx != null) {\r\n                                    $scope.currentSale.CheckoutItems.splice(delIdx, 1);\r\n                                }\r\n\r\n                                if (el.return && el.Count !== 0) {\r\n                                    $scope.currentSale.CheckoutItems.push(returnItem);\r\n                                }\r\n                            });\r\n                        } else {\r\n                            CalculatorHelperService.calculateRefundCheckout($scope.currentSale, $scope.selectedItem, $scope.actionMode, StartCalcLevel.RefundSubmit);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                $scope.paymentValidation = {\r\n                    cashAmount: 0,\r\n                    creditCardAmount: 0,\r\n                    storeCreditAmount: 0,\r\n                    loyaltyPointsAmount: 0,\r\n                    cashSurchargeAmount: 0,\r\n                    storeCreditSurchargeAmount: 0\r\n                };\r\n\r\n                $scope.paymentValidation.cardPayments = {};\r\n                $scope.paymentValidation.customPayments = [];\r\n\r\n                $scope.payments = {\r\n                    cash: 0,\r\n                    creditCard: 0,\r\n                    storeCredit: 0,\r\n                    loyaltyPoints: 0,\r\n                    cashSurcharge: 0,\r\n                    storeCreditSurcharge: 0\r\n                };\r\n\r\n                if (!isNewSale) {\r\n                    // exclude surcharge\r\n                    var total = $scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive, true) * -1;\r\n\r\n                    // collect sums from previous refunds and reduce\r\n                    // available amounts in future\r\n                    const plist = helperService.mapToList($scope.currentSale.GroupedSale.PaymentsMap);\r\n\r\n                    $.each(plist, function (idx, el) {\r\n                        var ptp = el.ShortName;\r\n                        if (ptp.indexOf(\"BackofficePayment_\") === 0) {\r\n                            ptp = \"BackofficePayment_\";\r\n                        }\r\n\r\n                        switch (ptp) {\r\n                            case 'loyalty':\r\n                                $scope.paymentValidation.loyaltyPointsAmount += el.Amount;\r\n                                break;\r\n                            case 'gift card':\r\n                            case 'BackofficePayment_':\r\n                            case 'cash':\r\n                                $scope.paymentValidation.cashAmount += el.Amount;\r\n                                break;\r\n                            case 'store credits':\r\n                                $scope.paymentValidation.storeCreditAmount += el.Amount;\r\n                                break;\r\n                            case 'credit card':\r\n                                var ccAmount = saleService.getAmountWithoutSurcharge(el);\r\n                                $scope.paymentValidation.creditCardAmount += ccAmount;\r\n                                $scope.paymentValidation.creditCardAmount = helperService.DEARRound($scope.paymentValidation.creditCardAmount, 2);\r\n\r\n                                cardPayService.addSumToCardPayment($scope.paymentValidation.cardPayments, el.ServerTransactionID, el.ClientTransactionID, ccAmount, el.TransactionMetaData);\r\n\r\n                                if (el.Surcharge && el.Surcharge.RefundSurcharge === true) {\r\n                                    $scope.paymentValidation.cardPayments[cardPayService.combineKey(el.ServerTransactionID, el.ClientTransactionID)].Surcharge =\r\n                                        el.Surcharge;\r\n                                    el.Surcharge.AmountToRefund = 0;\r\n                                }\r\n\r\n                                break;\r\n\r\n                            default:\r\n                                if (!saleService.isStandardPaymentType(el.ShortName)) {\r\n\r\n                                    if (el.PaymentProcessorID === \"BackofficePayment\" && el.ShortName.indexOf(\"BackofficePayment_\") === 0) {\r\n                                        el.PaymentProcessorID = el.ShortName.substr(\"BackofficePayment_\".length);\r\n                                    }\r\n\r\n                                    // ignore loyaltylion payment processor\r\n                                    if(el.ShortName == 'loyaltylion'){\r\n                                        return;\r\n                                    }\r\n\r\n                                    // add payment type to return possible list\r\n                                    const pt = {\r\n                                        shortName: el.ShortName,\r\n                                        customPaymentName: el.PaymentTypeName,\r\n                                        validationAmount: 0,\r\n                                        amount: 0,\r\n                                        id: el.ID\r\n                                    };\r\n\r\n                                    if (el.Surcharge && el.Surcharge.RefundSurcharge === true) {\r\n                                        pt.Surcharge = el.Surcharge;\r\n                                        pt.Surcharge.AmountToRefund = 0;\r\n                                    }\r\n\r\n                                    $scope.paymentValidation.customPayments.push(pt);\r\n                                    var ccAmount = saleService.getAmountWithoutSurcharge(el);\r\n                                    pt.validationAmount = helperService.DEARRound(ccAmount, 2);\r\n                                }\r\n                                break;\r\n                        }\r\n                    });\r\n\r\n                    var hasExchange = false;\r\n                    $scope.currentSale.additionalEstimateTotal = 0;\r\n                    if (!isContinueReturn) {\r\n                        var refunds = !$scope.selectedItem.Data.InitialRefunds ? $scope.selectedItem.Data.Refunds : $scope.selectedItem.Data.InitialRefunds;\r\n\r\n                        if (refunds && refunds.length > 0) {\r\n                            if (fullReturn)\r\n                                lastItemReturn = true;\r\n                            else\r\n                                lastItemReturn = false;\r\n\r\n                            fullReturn = false;\r\n                            $.each(refunds, function (reIdx, ref) {\r\n                                const refundIdx = reIdx;\r\n\r\n                                var isExchange = false;\r\n                                $.each(ref.Lines, function (lId, l) {\r\n                                    if (l.Quantity > 0) {\r\n                                        isExchange = true;\r\n                                        hasExchange = true;\r\n                                    }\r\n                                });\r\n\r\n                                $.each(ref.Lines, function (lId, l) {\r\n                                    if (l.Name == 'Rounding') {\r\n                                        $scope.currentSale.additionalEstimateTotal += helperService.DEARRound(l.Quantity * l.TotalPerLine, 2);\r\n                                    }\r\n                                });\r\n                            });\r\n                        }\r\n                    }\r\n\r\n                    cardPayService.removeFullyUsedCards($scope.paymentValidation.cardPayments);\r\n\r\n                    if (fullReturn && $scope.selectedItem.RawSaleObject.CashRounding && $scope.selectedItem.RawSaleObject.CashRounding !== 0) {\r\n\r\n                        // first return and return whole sale\r\n                        total += helperService.DEARRound($scope.selectedItem.RawSaleObject.CashRounding, 2);\r\n                        $scope.currentSale.FullReturnRounding = helperService.DEARRound($scope.selectedItem.RawSaleObject.CashRounding, 2);\r\n                    } else {\r\n                        $scope.currentSale.FullReturnRounding = 0;\r\n                        $scope.currentSale.CashRounding = 0;\r\n                    }\r\n\r\n                    if (lastItemReturn && !fullReturn) {\r\n\r\n                        // when not all cash refunded\r\n\r\n                        if (hasExchange == false) {\r\n                            // available to refund by all payment types\r\n                            var totalRemaining = $scope.currentSale.GroupedSale.TotalSale;\r\n\r\n                            if (total != totalRemaining) {\r\n                                $scope.currentSale.FullReturnRounding = totalRemaining - total;\r\n                                total = totalRemaining;\r\n                            }\r\n                        }\r\n                        else {\r\n                            var estimatedRounding = helperService.DEARRound($scope.currentSale.additionalEstimateTotal, 2);\r\n                            if ($scope.selectedItem.RawSaleObject.CashRounding && $scope.selectedItem.RawSaleObject.CashRounding !== 0) {\r\n                                estimatedRounding += helperService.DEARRound($scope.selectedItem.RawSaleObject.CashRounding, 2);\r\n                                estimatedRounding = helperService.DEARRound(estimatedRounding, 2);\r\n                            }\r\n                            $scope.currentSale.FullReturnRounding = estimatedRounding;\r\n                            total += estimatedRounding;\r\n                        }\r\n                    }\r\n\r\n                    var orderTotal = helperService.DEARRound(Math.abs($scope.getSaleGridTotal($scope.selectedItem.Data)), 2);\r\n                    var orderPaid = helperService.DEARRound(Math.abs($scope.getSaleTotalPaid($scope.selectedItem.Data)), 2);\r\n                    if ($scope.canReturnPartiallyPaid() === true\r\n                        && (orderTotal > orderPaid || orderPaid == 0)) {\r\n                        $scope.paymentValidation.storeCreditAmount = $scope.getAllPartialPayment();\r\n                        $scope.paymentValidation.loyaltyPointsAmount = $scope.getAllPartialPayment();\r\n                    }\r\n                    else {\r\n                        $scope.paymentValidation.storeCreditAmount = total + $scope.oldReturnPayments();\r\n                        $scope.paymentValidation.loyaltyPointsAmount = total + $scope.oldReturnPayments();\r\n                    }\r\n                    // cash is allowed to refund entierly not depending on used payment methods\r\n                    $scope.paymentValidation.cashAmount = $scope.paymentValidation.storeCreditAmount;\r\n\r\n                    var totalWithOldReturnPayments = total + $scope.oldReturnPayments();\r\n\r\n                    if ($scope.paymentValidation.cashAmount > totalWithOldReturnPayments)\r\n                        $scope.paymentValidation.cashAmount = totalWithOldReturnPayments;\r\n                    if ($scope.paymentValidation.creditCardAmount > totalWithOldReturnPayments)\r\n                        $scope.paymentValidation.creditCardAmount = totalWithOldReturnPayments;\r\n\r\n                    $scope.currentSale.GroupedSale.TotalToRefund = totalWithOldReturnPayments;\r\n\r\n                    $scope.paymentValidation.cashAmount = helperService.DEARRound($scope.paymentValidation.cashAmount, 2);\r\n                    $scope.paymentValidation.creditCardAmount = helperService.DEARRound($scope.paymentValidation.creditCardAmount, 2);\r\n                    $scope.paymentValidation.storeCreditAmount = helperService.DEARRound($scope.paymentValidation.storeCreditAmount, 2);\r\n                    $scope.paymentValidation.loyaltyPointsAmount = helperService.DEARRound($scope.paymentValidation.loyaltyPointsAmount, 2);\r\n\r\n                    $scope.currentSale.EstimateTotal = $scope.estimateTotalSum();\r\n                    saleService.prepareSurchargeLimits($scope.currentSale.GroupedSale, $scope.paymentValidation);\r\n                    saleService.recalcRefundSurcharges($scope.currentSale.GroupedSale, $scope.paymentValidation, $scope.payments);\r\n                } else {\r\n\r\n                    if(!$scope.currentSale.GroupedSale){\r\n                        $scope.currentSale.GroupedSale =\r\n                                {\r\n                                    TotalSurcharge: 0, // including refunded surcharges via cash/store credits\r\n                                    GhostSurcharge: 0,\r\n                                    TotalSale: 0,\r\n                                    ExchangeAmount: 0,\r\n                                    PaymentsMap: {},\r\n                                    LoyaltyRefundCoeff: 0 // if we paid by loyalties it means that this sum didn't lead to loyalty accrual so during refund we should count this\r\n                                };\r\n                    }\r\n\r\n\r\n                    CalculatorHelperService.calculateRefundPayments($scope.currentSale, {\r\n                        selectedItem: $scope.selectedItem,\r\n                        paymentValidation: $scope.paymentValidation,\r\n                        isContinueReturn: isContinueReturn,\r\n                        fullReturn: fullReturn,\r\n                        lastItemReturn: lastItemReturn,\r\n                        operationSubName: $scope.operationSubName,\r\n                        payments: $scope.payments,\r\n                        actionMode: $scope.actionMode\r\n                    }, StartCalcLevel.Payments);\r\n                }\r\n            };\r\n\r\n\r\n            $scope.subTotalSum = saleService.subTotalSum;\r\n\r\n            $scope.estimateTotalSum = function () {\r\n                var sum = 0;\r\n                if ($scope.currentSale.ReturnItems) {\r\n                    $.each($scope.currentSale.ReturnItems, function (idx, el) {\r\n                        if (el.maxCount > 0) {\r\n                            sum += helperService.DEARRound(el.maxCount * (el.BasePriceWithDiscount), 2);\r\n                        }\r\n                    });\r\n                }\r\n\r\n                var tax = 0;\r\n                if ($scope.currentSale) {\r\n                    $.each($scope.currentSale.ReturnItems, function (idx, el) {\r\n                        if (el.maxCount > 0) {\r\n                            tax += calculateTax(el.Taxes, el.BasePriceWithDiscount * el.maxCount, $scope.selectedItem.Data.TaxInclusive);\r\n                        }\r\n                    });\r\n                }\r\n                var calcTax = tax;\r\n                tax = ($scope.selectedItem.Data.TaxInclusive ? 0 : calcTax);\r\n\r\n                return sum + tax;\r\n            };\r\n\r\n            var calculateTotalTax = saleService.calculateTotalTax;\r\n\r\n            $scope.totalSum = function (item, taxInclusive, excludeCalculatedSurcharges) {\r\n                return saleService.totalSum(item, taxInclusive, excludeCalculatedSurcharges);\r\n            };\r\n\r\n            $scope.cancelRefund = function () {\r\n                $scope.actionMode = 'details';\r\n                $scope.currentSale = angular.copy($scope.selectedItem.RawSaleObject);\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                // remove coupon info\r\n                delete $scope.currentSale.selectedCoupon;\r\n                delete $scope.currentSale.selectedCouponID;\r\n                delete $scope.currentSale.selectedCouponDealID;\r\n\r\n                if (!isNewSale) {\r\n                    $scope.currentSale.FullReturnRounding = 0;\r\n                    $scope.currentSale.additionalEstimateTotal = 0;\r\n                    $.each($scope.currentSale.CheckoutItems, function (idx, item) {\r\n                        item.BasePrice = item.BasePrice;\r\n                    });\r\n                }\r\n\r\n                $scope.hideDetails = false;\r\n                $scope.refundNeedCustomer = false;\r\n                $scope.showRefundAmountError = false;\r\n                $scope.showRefundGiftCardError = false;\r\n            };\r\n\r\n\r\n            $scope.editReturnPayments = function () {\r\n                showReturnPaymentsDialog();\r\n            };\r\n\r\n            function showReturnPaymentsDialog() {\r\n                var $windowElement = $('#returnPaymentsDialogPartial');\r\n                helperService.showDialog($windowElement, function () { });\r\n            }\r\n\r\n            function showSalesHistyoryDetailsDialog() {\r\n                $('.allign-to-bottom').removeClass('align');\r\n                var $windowElement = $('#saleHistoryDetailsDialogPartial');\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                if (!isNewSale && $scope.currentSale.PayloadVersion && Number($scope.currentSale.PayloadVersion) > 1) {\r\n                    errorService.showError(gettextCatalog.getString('The sale format is unknown. Please, update application from the store'));\r\n                    return;\r\n                }\r\n\r\n                helperService.showDialog($windowElement, function () {\r\n                    $scope.newGuidForRefund = uuid2.newguid(); // this should be used as new refund guid. Defining it here will prevent from regenerating it in connection error case\r\n                    $scope.newGuidForRefund2 = uuid2.newguid();\r\n\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('update.maxwidth');\r\n                    });\r\n\r\n                    $timeout(function () {\r\n                        fontMeasureService.updateFontSize('history-row-total-parent', 'history-row-total', 13.5);\r\n                    }, 1);\r\n                });\r\n            }\r\n\r\n            $scope.closeSalesHistoryDetailsDialog = function () {\r\n                $scope.actionMode = null;\r\n\r\n                var $windowElement = $('#saleHistoryDetailsDialogPartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.closeReturnPaymentsDialog = function () {\r\n                $scope.actionMode = 'refund';\r\n\r\n                var $windowElement = $('#returnPaymentsDialogPartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            function showReturnCompliteDialog(msg) {\r\n                //printService.reconnect();\r\n                //printService.disconnect().then(function () { return printService.connect(); });\r\n\r\n                if (!msg) {\r\n                    var message = gettextCatalog.getString('Refund is successfully') + '<br/>' + gettextCatalog.getString('completed');\r\n                    $('#returnCompliteDialogPartialBody').html(message);\r\n                }\r\n                else {\r\n                    $('#returnCompliteDialogPartialBody').html(msg);\r\n                }\r\n\r\n                $scope.hideDetails = false;\r\n                $scope.currentSale = {};\r\n                $scope.currentSale.FullReturnRounding = 0;\r\n                $scope.currentSale.additionalEstimateTotal = 0;\r\n                $scope.closeSalesHistoryDetailsDialog();\r\n                var $windowElement = $('#returnCompliteDialogPartial');\r\n                helperService.showDialog($windowElement);\r\n            }\r\n\r\n            $scope.closeReturnCompliteDialog = function () {\r\n                var $windowElement = $('#returnCompliteDialogPartial');\r\n                helperService.closeDialog($windowElement);\r\n                $scope.selectedItem = null;\r\n                $scope.currentSale = null;\r\n                $scope.reloadCurrentPage();\r\n            };\r\n\r\n            $scope.openRegister = function () {\r\n                $location.path('/sell');\r\n            };\r\n\r\n            $scope.amountSums = function () {\r\n                var sum = 0;\r\n                if ($scope.payments) {\r\n                    if ($scope.payments.cash)\r\n                        sum += $scope.payments.cash;\r\n                    //                sum += cardPayService.sumAllCardPayments($scope.paymentValidation.cardPayments, true);\r\n                    sum += cardPayService.sumAllCardPayments($scope.paymentValidation.cardPayments, false);\r\n\r\n                    if ($scope.payments.storeCredit)\r\n                        sum += $scope.payments.storeCredit;\r\n\r\n                    if ($scope.payments.loyaltyPoints)\r\n                        sum += $scope.payments.loyaltyPoints;\r\n                }\r\n\r\n                if (!!$scope.paymentValidation && !!$scope.paymentValidation.customPayments &&\r\n                    $scope.paymentValidation.customPayments.length > 0) {\r\n                    angular.forEach($scope.paymentValidation.customPayments, function (p) {\r\n                        sum += p.amount;\r\n\r\n                        //if (!!p.Surcharge && p.Surcharge.RefundSurcharge === true && p.Surcharge.AmountToRefund)\r\n                        //    sum += p.Surcharge.AmountToRefund;\r\n\r\n                    });\r\n                }\r\n\r\n                return helperService.DEARRound(sum, 2);\r\n            };\r\n\r\n            $scope.changepPaymentAmount = function () {\r\n                $scope.showRefundPaymentsAmountError = false;\r\n                $scope.showRefundExactPaymentsAmountError = false;\r\n            };\r\n\r\n            function cashPay(enteredAmount, addPayment) {\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                var amount = helperService.DEARRound(parseFloat(enteredAmount), 2);\r\n\r\n                var roundedAmount = helperService.roundCash(amount);\r\n\r\n                var cashRounding = helperService.DEARRound(roundedAmount - amount, 2);\r\n                // condition is replaced because it override correct rounding\r\n//                if (cashRounding || addPayment !== true) {\r\n                if (cashRounding && addPayment !== true) {\r\n                    $scope.currentSale.CashRounding = !isNewSale ? cashRounding : -1 * cashRounding;\r\n                }\r\n\r\n                if (addPayment === true) {\r\n                    addPaymentToRefund($scope.cashRegistryPaymentProcessorID, roundedAmount, 'Cash', true, 'cash');\r\n                }\r\n            }\r\n\r\n            $scope.customPay = function (pay) {\r\n                var payProcessor = $scope.getCustomPaymentMethod(pay.shortName);\r\n                var sum = pay.amount;\r\n                var sr = null;\r\n                if (!!pay.Surcharge) {\r\n                    if ($scope.operationName === 'Refund' && pay.Surcharge.AmountToRefund && pay.Surcharge.RefundSurcharge === true) {\r\n                        sum += pay.Surcharge.AmountToRefund;\r\n                    }\r\n\r\n                    sr = pay.Surcharge;\r\n                    addSurchargeToRefund(sr, sum, null, null, null, true);\r\n                    sr.isAddedToPayment = true;\r\n                }\r\n\r\n                var payment = addPaymentToRefund(payProcessor.paymentProcessorID, sum, pay.customPaymentName, true, pay.shortName, null, null, null, null, sr);\r\n            };\r\n\r\n\r\n            $scope.callbackModal2 = function (code) { };\r\n\r\n            function creditCardPay(refund) {\r\n\r\n                var SCOPE = $scope;\r\n                var refunds = {};\r\n                refunds[refund.id] = refund;\r\n\r\n                var promise = cardPayService.refund($scope.currentSale, refunds, $scope,\r\n                    {\r\n                        OrderNumber: $scope.currentSale.ClearOrderNumber,\r\n                        receiptCallback: function (code, text, p) {\r\n                            return printService.printAdditionalReceipts(SCOPE, code, text, p);\r\n                        },\r\n                        Currency: configService.currency,\r\n                    });\r\n\r\n                return promise.then(function (res) {\r\n                    var el = res[0];\r\n\r\n                    if (el.result) {\r\n\r\n                        if (!!el.Surcharge) {\r\n                            addSurchargeToRefund(el.Surcharge, el.amount, el.ServerTransactionID, el.ClientTransactionID, el.SaleServerTransactionID);\r\n\r\n                        }\r\n\r\n                        addPaymentToRefund(SCOPE.creditCardPaymentProcessorID, el.amount, 'Credit Card', true, 'credit card',\r\n                            el.ServerTransactionID, el.ClientTransactionID, el.SaleServerTransactionID, el.TransactionMetaData, el.Surcharge);\r\n\r\n                        return processPartialReturn();\r\n                    }\r\n                    else {\r\n                        var deferred2 = $q.defer();\r\n                        if (!el.message)\r\n                            el.message = gettextCatalog.getString('Error processing the card: ') + el.cardType + ' ' + el.cardPAN;\r\n                        $scope.errorMessage += '<br/>' + el.message;\r\n\r\n                        //// show dialog to force refund or continue or cancel processing\r\n                        //$scope.customModalDlg2Text2 = el.message +\r\n                        //                                \"<br/>\" + gettextCatalog.getString('What would you like to do next?') +\r\n                        //                                \"<br/>\" + gettextCatalog.getString('Continue with next refund, Force this refund as to be done, or Cancel processing now?');\r\n                        //$scope.customModalDlg2Caption = gettextCatalog.getString('Refund error');\r\n                        //$scope.customModalDlg2Text = \"\";\r\n                        //$scope.customModalDlg2Buttons =\r\n                        //[{\r\n                        //    name: gettextCatalog.getString('Continue'),\r\n                        //    value: 'continue'\r\n                        //},\r\n                        //{\r\n                        //    name: gettextCatalog.getString('Force refund'),\r\n                        //    value: 'refund'\r\n                        //},\r\n                        //{\r\n                        //    name: gettextCatalog.getString('Cancel'),\r\n                        //    value: 'cancel'\r\n                        //}];\r\n\r\n                        //$scope.callbackModal2 = function (code) {\r\n                        //    $scope.customModalDlg2Text2 = null;\r\n                        //    switch (code) {\r\n                        //        case 'cancel':\r\n                        //            deferred2.reject({ status: 'cancel' });\r\n                        //            break;\r\n                        //        case 'continue':\r\n                        //            deferred2.resolve({ status: 'continue' });\r\n                        //            $.blockUI();\r\n                        //            break;\r\n                        //        case 'refund':\r\n                        //            $scope.errorMessage += '<br/>' + gettextCatalog.getString('Refund was forced as to bo done.');\r\n                        //            deferred2.resolve({ status: 'refund', el: el });\r\n                        //            $.blockUI();\r\n                        //            break;\r\n                        //    }\r\n                        //};\r\n\r\n                        //$timeout(function () { helperService.showDialog('#customModalDlg2'); $.unblockUI(); });\r\n                        deferred2.resolve(false);\r\n                        return deferred2.promise;\r\n\r\n                        //return deferred2.promise\r\n                        //.then(function (res) {\r\n                        //    if (res.status == 'refund') {\r\n                        //        addPaymentToRefund(SCOPE.creditCardPaymentProcessorID, res.el.amount, 'Credit Card', true, 'credit card',\r\n                        //        res.el.ServerTransactionID, res.el.ClientTransactionID, res.el.SaleServerTransactionID);\r\n                        //        return processPartialReturn();\r\n                        //    }\r\n                        //    else {\r\n                        //        var deferred3 = $q.defer();\r\n                        //        deferred3.resolve(true);\r\n                        //        return deferred3.promise;\r\n                        //    }\r\n                        //});\r\n                    }\r\n                })\r\n            }\r\n\r\n            function storeCreditsPay(amount) {\r\n                addPaymentToRefund($scope.storeCreditsPaymentProcessorID, amount, 'Store Credits', true, 'store credits');\r\n            }\r\n\r\n            function loyaltyPointsPay(amount) {\r\n                addPaymentToRefund($scope.loyaltyPaymentProcessorID, amount, 'Loyalty Points', true, 'loyalty');\r\n            }\r\n\r\n            var totalSumWithTax = saleService.totalSumWithTax;\r\n\r\n            $scope.totalLoyaltyPoints = saleService.totalLoyaltyPoints;\r\n\r\n\r\n            //$scope.showOfflinePaymentsDialog = function() {\r\n            //    $scope.offlinePaymentsModalInstance = $uibModal.open({\r\n            //        animation: true,\r\n            //        ariaLabelledBy: 'modal-title',\r\n            //        ariaDescribedBy: 'modal-body',\r\n            //        templateUrl: 'offlinePaymentsDIalogPartial.html',\r\n            //        scope: $scope\r\n            //    });\r\n            //}\r\n\r\n            //$scope.closeOfflinePaymentsDialog = function () {\r\n            //    $scope.offlinePaymentsModalInstance.dismiss('cancel');\r\n            //};\r\n\r\n            function processPartialReturn() {\r\n                $scope.currentSale.cantProcessOffline = true;\r\n                if($scope.operationSubName!=='continue')\r\n                    $scope.currentSale.parentOrderID = $scope.selectedItem.OrderID;\r\n                \r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                if (isNewSale) {\r\n                    var prms = {\r\n                        paymentValidation: $scope.paymentValidation,\r\n                        payments: $scope.payments,\r\n                        selectedItem: $scope.selectedItem,\r\n                        operationSubName: $scope.operationSubName,\r\n                        actionMode: $scope.actionMode\r\n                    };\r\n\r\n                    CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Loyalty);\r\n                }\r\n\r\n                if($scope.selectedItem)\r\n                    $scope.currentSale.IsFromDearSale = $scope.selectedItem.IsFromDearSale;\r\n\r\n                var currentSaleObject = saleService.convertCurrentSaleForAPI($scope.currentSale, 'CLOSED', $scope.operationSubName === 'continue', $scope.selectedItem.Data.TaxInclusive, $scope.newGuidForRefund2);\r\n\r\n                return saleService.saveSale(currentSaleObject, $scope.currentSale);\r\n            }\r\n\r\n            function processReturn() {\r\n                // var loyaltyChange = saleService.calculateLoyaltyEx($scope.currentSale, $scope.selectedItem.RawSaleObject);\r\n                $scope.currentSale.cantProcessOffline = true;\r\n\r\n                if($scope.operationSubName!=='continue')\r\n                    $scope.currentSale.parentOrderID = $scope.selectedItem.OrderID;\r\n\r\n                $scope.lastCurrentSale = null;\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                if (isNewSale) {\r\n                    var prms = {\r\n                        paymentValidation: $scope.paymentValidation,\r\n                        payments: $scope.payments,\r\n                        selectedItem: $scope.selectedItem,\r\n                        operationSubName: $scope.operationSubName,\r\n                        actionMode: $scope.actionMode\r\n                    };\r\n\r\n                    CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Loyalty);\r\n\r\n                    $scope.lastCurrentSale = JSON.stringify($scope.currentSale);\r\n                }\r\n\r\n                    \r\n               // actually on this stage sale has already been imported to POS so it \r\n               // can be treared as naitve POS sale. So set IsFromDearSale == false to allow POS\r\n               // controller to pass it to SIM. This might lead to possible double refunds because\r\n               // someone can refund the same item from POS and from Cin7 Core and both actions will be \r\n               // done. So the commented line prevent from this but leaves Cin7 Core sale without corresponding \r\n               // credit note. And setting IsFromDearSale = false will lead to refund processing into initial\r\n               // sale but allows refund duplicates if they are done from POS and Cin7 Core separately.\r\n               // if($scope.selectedItem)\r\n               // $scope.currentSale.IsFromDearSale = $scope.selectedItem.IsFromDearSale;\r\n\r\n                $scope.currentSale.IsFromDearSale = false;\r\n               // **********************************************\r\n\r\n                var currentSaleObject = saleService.convertCurrentSaleForAPI($scope.currentSale, 'CLOSED', $scope.operationSubName === 'continue', $scope.selectedItem.Data.TaxInclusive, $scope.newGuidForRefund2);\r\n                var THIS = $scope;\r\n\r\n                return saleService.saveSale(currentSaleObject, $scope.currentSale)\r\n                    .then(function (resp) {\r\n                        if (resp && resp.Success === false) {\r\n                            return helperService.rejectPromise(resp.message || resp.Message);\r\n                        } else {\r\n                            return $scope.reloadCurrentPage();\r\n                        }\r\n                    })\r\n                    .then(function () {\r\n                        $.unblockUI();\r\n                        $('#salesHistoryGridContainer').unblock();\r\n\r\n                        var msg = null;\r\n                        if (!!THIS.errorMessage) {\r\n                            msg = gettextCatalog.getString('Some refunds were unsuccessful:<br/>') + THIS.errorMessage;\r\n                        }\r\n\r\n                        if (!isNewSale)\r\n                            $scope.lastCurrentSale = JSON.stringify($scope.currentSale);\r\n\r\n                        showReturnCompliteDialog(msg);\r\n                    });\r\n                //.catch(function (err) {\r\n                //    // process error\r\n                //    $.unblockUI();\r\n                //    $('#salesHistoryGridContainer').unblock();\r\n                //    $scope.processError(err, true, true);\r\n                //});\r\n            };\r\n\r\n            $scope.processError = function (err, forceConnectionError, setMessage) {\r\n                $.unblockUI();\r\n                var THIS = $scope;\r\n                if (configService.isOnline === false || (!!err && err.status == -1)) {\r\n                    if (setMessage === true)\r\n                        err = gettextCatalog.getString(\"Connection to the server has been interrupted while processing the refund. It could have been successfully processed. Please check sales history to confirm successful processing of this refund.\");\r\n                    errorService.showError(err, function () {\r\n                        if (forceConnectionError === true) {\r\n                            THIS.closeSalesHistoryDetailsDialog();\r\n                        }\r\n                    });\r\n                } else {\r\n                    // show error and login page once more\r\n                    // errorService.showError(err);\r\n                    errorService.showError(err, function () {\r\n                        if (forceConnectionError === true) {\r\n                            THIS.closeSalesHistoryDetailsDialog();\r\n                        }\r\n                    });\r\n                }\r\n            };\r\n\r\n    $scope.submitSelectReturnPayments = function () {\r\n        var d = $q.defer();\r\n        d.resolve(null);\r\n        var p = d.promise;\r\n\r\n        var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n        if (!isNewSale) {\r\n            // this should be set once for refund and will be send for each refund payment operation. \r\n            //This will ensure that all refund will be attached to the same order\r\n            saleService.calculateRefundSurcharges($scope.currentSale);\r\n            //var sum = $scope.amountSums();\r\n            //var total = helperService.DEARRound($scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive) * -1 + $scope.currentSale.FullReturnRounding, 2);\r\n        }\r\n\r\n        $scope.refundPaymentsError = [];\r\n        $scope.showRefundExactPaymentsAmountError = false;\r\n        if (($scope.payments.cash < 0 || $scope.payments.cash > $scope.paymentValidation.cashAmount) && $scope.payments.cash !== 0) {\r\n            $scope.refundPaymentsError.push(gettextCatalog.getString(\"Cash payment amount should be between 0 and \") + helperService.DEARRound($scope.paymentValidation.cashAmount, 4));\r\n            $scope.showRefundExactPaymentsAmountError = true;\r\n        }\r\n\r\n        if (!!$scope.paymentValidation.customPayments) {\r\n            angular.forEach($scope.paymentValidation.customPayments, function (pp) {\r\n                if ((pp.amount < 0 || pp.amount > helperService.DEARRound(pp.validationAmount, 4)) && pp.amount !== 0) {\r\n                    $scope.refundPaymentsError.push(gettextCatalog.getString(pp.customPaymentName + \" amount should be between 0 and \") + helperService.DEARRound(pp.validationAmount, 4));\r\n                    $scope.showRefundExactPaymentsAmountError = true;\r\n                }\r\n            });\r\n        }\r\n\r\n        var hasErrors = cardPayService.validateCardRefunds($scope.paymentValidation.cardPayments, $scope.refundPaymentsError);\r\n        if (hasErrors)\r\n            $scope.showRefundExactPaymentsAmountError = true;\r\n        else if (($scope.payments.creditCard < 0 || $scope.payments.creditCard > $scope.paymentValidation.creditCardAmount) && $scope.payments.creditCard !== 0) {\r\n            $scope.refundPaymentsError.push(gettextCatalog.getString(\"Credit card payment amount should be between 0 and \") + helperService.DEARRound($scope.paymentValidation.creditCardAmount, 4));\r\n            $scope.showRefundExactPaymentsAmountError = true;\r\n        }\r\n\r\n        if (($scope.payments.storeCredit < 0 || $scope.payments.storeCredit > $scope.paymentValidation.storeCreditAmount) && $scope.payments.storeCredit !== 0) {\r\n            $scope.refundPaymentsError.push(gettextCatalog.getString(\"Store credit payment amount should be between 0 and \") + helperService.DEARRound($scope.paymentValidation.storeCreditAmount, 4));\r\n            $scope.showRefundExactPaymentsAmountError = true;\r\n        }\r\n\r\n        if (($scope.payments.loyaltyPoints < 0 || $scope.payments.loyaltyPoints > $scope.paymentValidation.loyaltyPointsAmount) && $scope.payments.loyaltyPoints !== 0) {\r\n            $scope.refundPaymentsError.push(gettextCatalog.getString(\"Loyalty points amount should be between 0 and \") + helperService.DEARRound($scope.paymentValidation.loyaltyPointsAmount, 4));\r\n            $scope.showRefundExactPaymentsAmountError = true;\r\n        }\r\n\r\n        if ($scope.showRefundExactPaymentsAmountError === false) {\r\n            var remainingToRefund = $scope.getRemainingToRefund(true);\r\n            var selectedToRefund = 0;\r\n\r\n            if (!isNewSale) {\r\n                selectedToRefund = $scope.amountSums();\r\n            }\r\n\r\n            if (selectedToRefund > remainingToRefund && selectedToRefund !== 0) {\r\n                $scope.refundPaymentsError.push(gettextCatalog.getString(\"Refund amount cannot be more than \") + $filter('currency')(helperService.DEARRound(remainingToRefund, 2)));\r\n                $scope.showRefundExactPaymentsAmountError = true;\r\n            }\r\n        }\r\n\r\n        if ($scope.showRefundExactPaymentsAmountError === false) {\r\n\r\n            $scope.currentSale.newRefundOrder = $scope.newGuidForRefund;//uuid2.newguid();\r\n\r\n            if ($scope.selectedItem.IsPartialPaid == true) {\r\n                $scope.currentSale.IsPartialPaid = $scope.selectedItem.IsPartialPaid;\r\n            }\r\n\r\n            const needOpenCashDrawer = !!($scope.payments.cash + $scope.payments.cashSurcharge);\r\n            if (needOpenCashDrawer) {\r\n                p = p.then(function () {\r\n                    return printService.openCashDrawer().catch(function (err) {\r\n                        console.log(err);\r\n                        helperService.showError(err);\r\n                    }).finally(function () {\r\n                        return $scope.processPayments();\r\n                    });\r\n                });\r\n            }\r\n            else {\r\n                p = p.then(function () { return $scope.processPayments(); });\r\n            }\r\n        }\r\n\r\n        return p.catch(function (err) {\r\n            $scope.processError(err, true, true);\r\n        });\r\n    };\r\n\r\n            $scope.processPayments = function () {\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                $scope.currentSale.LoyaltyUpdate = 0;\r\n\r\n                var d = $q.defer();\r\n                d.resolve(null);\r\n                var p = d.promise;\r\n\r\n                getPaymentMethods();\r\n                if (!isNewSale) {\r\n                    if ($scope.operationSubName !== 'continue') {\r\n                        $scope.currentSale.TotalSumWithTax = totalSumWithTax($scope.currentSale.CheckoutItems);\r\n                        //$scope.currentSale.LoyaltyPointsTotal = $scope.totalLoyaltyPoints($scope.currentSale.CheckoutItems);\r\n                        $scope.currentSale.SubTotal = $scope.subTotalSum($scope.currentSale.CheckoutItems);\r\n                        $scope.currentSale.Total = $scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive);\r\n                        if ($scope.currentSale.Total < 0)\r\n                            $scope.currentSale.LoyaltyPointsTotal = -$scope.currentSale.LoyaltyPointsTotal;\r\n                        $scope.currentSale.Payments = [];\r\n                    }\r\n                }\r\n\r\n                $scope.closeReturnPaymentsDialog();\r\n                $scope.errorMessage = '';\r\n                $.blockUI();\r\n\r\n                // START Cash Rounding\r\n                // calculate cash rounding and send to the server with first payment\r\n                // avoid to lose rounding in SIM module\r\n                if ($scope.payments.cash + $scope.payments.cashSurcharge) {\r\n                    cashPay($scope.payments.cash + $scope.payments.cashSurcharge, false);\r\n                }\r\n\r\n                if ($scope.selectedItem.Data.StandaloneRefund !== true) {\r\n                    if ($scope.payments.cash > 0) {\r\n                        $scope.currentSale.FullReturnRounding = helperService.DEARRound($scope.currentSale.CashRounding, 2);\r\n                    }\r\n                    else {\r\n                        $scope.currentSale.CashRounding = $scope.currentSale.FullReturnRounding;\r\n                    }\r\n                }\r\n                // END Cash Rounding \r\n\r\n                let isError = false;\r\n                // always return card first \r\n                if ($scope.payments.creditCard) {\r\n                    angular.forEach($scope.paymentValidation.cardPayments, function (pay) {\r\n                        if (pay.amount != 0) {\r\n                            if (!!pay.Surcharge) {\r\n                                pay.amount += pay.Surcharge.AmountToRefund;\r\n                                pay.Surcharge.isAddedToPayment = true;\r\n                            }\r\n\r\n                            p = p.then(function () {\r\n                                return creditCardPay(pay);\r\n                            }).catch((err) => {\r\n                                $scope.processError(err, false, true);\r\n                                isError = true;\r\n                            });\r\n                        }\r\n                    });\r\n                }\r\n\r\n                p = p.then(function (res) {\r\n                    if (isError) {\r\n                        return helperService.resolvePromise(null);\r\n                    }\r\n                    if (!!$scope.paymentValidation.customPayments) {\r\n                        angular.forEach($scope.paymentValidation.customPayments, function (pay) {\r\n                            if (pay.amount != 0)\r\n                                $scope.customPay(pay);\r\n                        });\r\n                    }\r\n\r\n                    if (($scope.payments.cash + $scope.payments.cashSurcharge) >= 0) {\r\n                        cashPay($scope.payments.cash + $scope.payments.cashSurcharge, true);\r\n\r\n                        if ($scope.payments.cashSurcharge) {\r\n                            saleService.createGhostSurchargeToRefund($scope.currentSale, 'cash', $scope.payments.cashSurcharge,\r\n                                $scope.payments.cash + $scope.payments.cashSurcharge, null, null, null, true);\r\n                        }\r\n                    }\r\n\r\n                    if ($scope.payments.storeCredit + $scope.payments.storeCreditSurcharge) {\r\n                        storeCreditsPay($scope.payments.storeCredit + $scope.payments.storeCreditSurcharge);\r\n\r\n                        if ($scope.payments.storeCreditSurcharge) {\r\n                            saleService.createGhostSurchargeToRefund($scope.currentSale, 'store credits', $scope.payments.storeCreditSurcharge,\r\n                                $scope.payments.storeCredit + $scope.payments.storeCreditSurcharge, null, null, null, true);\r\n                        }\r\n                    }\r\n\r\n                    if ($scope.payments.loyaltyPoints) {\r\n                        loyaltyPointsPay($scope.payments.loyaltyPoints);\r\n                    }\r\n\r\n\r\n                    return processReturn();\r\n                });\r\n\r\n                p = p.then(function (rs) {\r\n                    $('#salesHistoryGridContainer').unblock();\r\n                    $.unblockUI();\r\n                    var d2 = $q.defer();\r\n                    d2.resolve(rs);\r\n                    return d2.promise;\r\n                });\r\n\r\n                return p;\r\n            };\r\n\r\n            $scope.doneRefund = function (noWait) {\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                $scope.actionMode = 'refundsum';\r\n\r\n                if (isNewSale) {\r\n\r\n                    CalculatorHelperService.calculateRefundPayments($scope.currentSale, {\r\n                        selectedItem: $scope.selectedItem,\r\n                        paymentValidation: $scope.paymentValidation,\r\n                        payments: $scope.payments,\r\n                        operationSubName: $scope.operationSubName,\r\n                        actionMode: $scope.actionMode\r\n                    }, StartCalcLevel.RefundLimits);\r\n                }\r\n\r\n                var rtr = $scope.getRemainingToRefund(false);\r\n                \r\n                if (noWait === true && rtr === 0) {\r\n                    $scope.currentSale.newRefundOrder = $scope.newGuidForRefund;\r\n\r\n                    if ($scope.selectedItem.IsPartialPaid === true) {\r\n                        $scope.currentSale.IsPartialPaid = $scope.selectedItem.IsPartialPaid;\r\n                    }\r\n\r\n                    $scope.processPayments()\r\n                        .catch(function (err) {\r\n                            $scope.processError(err, true, true);\r\n                        });\r\n\r\n                }\r\n                else {\r\n                    $scope.editReturnPayments();\r\n                }\r\n            };\r\n\r\n            $scope.doneExchange = function (keepDiscount) {\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                $scope.actionMode = 'refundsum';\r\n\r\n                if (isNewSale) {\r\n\r\n                    CalculatorHelperService.calculateRefundPayments($scope.currentSale, {\r\n                        selectedItem: $scope.selectedItem,\r\n                        paymentValidation: $scope.paymentValidation,\r\n                        payments: $scope.payments\r\n                    }, StartCalcLevel.RefundLimits);\r\n                    $scope.currentSale.FullReturnRounding = 0;\r\n                }\r\n\r\n                if($scope.operationSubName!=='continue')\r\n                    $scope.currentSale.parentOrderID = $scope.selectedItem.OrderID;\r\n\r\n                if ($scope.paymentValidation.cashAmount !== 0) {\r\n                    $scope.paymentValidation.cashAmount -= $scope.currentSale.FullReturnRounding;\r\n                    $scope.paymentValidation.cashAmount = helperService.DEARRound($scope.paymentValidation.cashAmount, 2);\r\n                }\r\n                //if ($scope.paymentValidation.creditCardAmount !== 0)\r\n                //    $scope.paymentValidation.creditCardAmount -= $scope.currentSale.FullReturnRounding;\r\n\r\n                $scope.paymentValidation.storeCreditAmount -= $scope.currentSale.FullReturnRounding;\r\n\r\n                cardPayService.setAllCardAmountToZero($scope.paymentValidation.cardPayments);\r\n\r\n                $scope.currentSale.paymentValidation = $scope.paymentValidation;\r\n                if (!isNewSale) {\r\n                    $scope.currentSale.RawSaleObject = $scope.selectedItem.RawSaleObject;\r\n                } else {\r\n                    $scope.currentSale.SelectedItem = $scope.selectedItem;\r\n                }\r\n\r\n                $scope.currentSale.TaxInclusive = $scope.selectedItem.Data.TaxInclusive;\r\n\r\n                if(!keepDiscount){\r\n                    $scope.currentSale.Discount = \"0\";\r\n\r\n                    $scope.currentSale.manuallyAppliedDiscount = false;\r\n                }\r\n\r\n                window.localStorage.setItem('ItemToExchange', JSON.stringify($scope.currentSale));\r\n                //            $location.path('/sell').search({ type: $scope.saleType });\r\n                window.localStorage.setItem('continueSale', JSON.stringify({ type: $scope.saleType }));\r\n                $location.path('/sell');\r\n            };\r\n\r\n            $scope.copyToNewSale = function (currentSale) {\r\n                delete currentSale.ID;\r\n                delete currentSale.Date;\r\n                delete currentSale.DateNative;\r\n                delete currentSale.Payments;\r\n                delete currentSale.OrderType;\r\n                delete currentSale.Surcharges;\r\n                delete currentSale.alreadyCountedPayments;\r\n                delete currentSale.ClearOrderNumber;\r\n                delete currentSale.OrderNumber;\r\n                delete currentSale.Barcode;\r\n                delete currentSale.IsPartialPaid;\r\n                delete currentSale.OperationID;\r\n                delete currentSale.ReturnID;\r\n                delete currentSale.newRefundOrder;\r\n                delete currentSale.RefundNumber;\r\n\r\n                var checkoutItems = angular.copy(currentSale.CheckoutItems);\r\n                currentSale.CheckoutItems = [];\r\n                $.each(checkoutItems, function (idx, el) {\r\n                    if (el.Name && el.Name != 'Rounding' && el.Name.indexOf('(Surcharge)') == -1) {\r\n\r\n                        el.ID = uuid2.newguid();\r\n                        el.Count = Math.abs(el.Count);\r\n                        el.Price = Math.abs(el.BasePrice);\r\n                        el.Amount = Math.abs(helperService.DEARRound(el.BasePrice * el.Count, 2));\r\n                        el.Discount = 0;\r\n                        el.Tax = Math.abs(el.Tax);\r\n                        el.LoyaltyPoints = Math.abs(el.LoyaltyPoints);\r\n                        el.LoyaltyPointsEarning = Math.abs(el.LoyaltyPointsEarning);\r\n                        el.PriceWithTax = Math.abs(el.PriceWithTax);\r\n                        el.CanEdit = true;\r\n                        el.CanDelete = true;\r\n                        el.BasePrice = Math.abs(el.BasePrice);\r\n                        el.BasePriceWithDiscount = Math.abs(el.BasePriceWithDiscount);\r\n\r\n                        currentSale.CheckoutItems.push(el);\r\n                    }\r\n\r\n                });\r\n\r\n                $.each(currentSale.Payments, function (idx, p) {\r\n                    p.FromHistory = true;\r\n                });\r\n\r\n                var isNewSale = helperService.showNewCheckoutUI(currentSale);\r\n                if (isNewSale) {\r\n                    $scope.currentSale.SelectedItem = $scope.selectedItem;\r\n                }\r\n\r\n                window.localStorage.setItem('ItemToExchange', JSON.stringify(currentSale));\r\n                //            $location.path('/sell').search({ type: $scope.saleType });\r\n                window.localStorage.setItem('continueSale', JSON.stringify({ type: 'newSale' }));\r\n                $location.path('/sell');\r\n            };\r\n\r\n            $scope.onAccountExchangeConfirmation = function () {\r\n\r\n                var paid = $scope.getAllPartialPayment();\r\n                if (paid > 0) {\r\n                    var paidCurrency = $filter('currency')(paid);\r\n\r\n                    $scope.dialogMode = 'onaccountexchange';\r\n                    helperService.showCustomDialog(gettextCatalog.getString('Confirmation'),\r\n                        gettextCatalog.getString('Partial payment will be automatically allocated to the store credit account. Please use store credit to complete the exchange transaction.'),\r\n                        gettextCatalog.getString('Yes'),\r\n                        gettextCatalog.getString('No'));\r\n                }\r\n                else {\r\n                    $scope.doneOnAccountExchange()\r\n                        .catch(function (err) {\r\n                            $scope.processError(err, true);\r\n                        });\r\n                }\r\n            };\r\n\r\n            $scope.callbackModal = function () {\r\n\r\n                if ($scope.dialogMode == 'onaccountexchange') {\r\n                    $scope.doneOnAccountExchange();\r\n                } else if ($scope.dialogMode == 'remoteprocessing') {\r\n                    $scope.robj.isRemotedlyProcessed = true;\r\n                } else if ($scope.dialogMode == 'standaloneorderexists') {\r\n                    $scope.submitStandaloneRefund2();\r\n                } else if ($scope.dialogMode == 'standaloneexchangeorderexists') {\r\n                    $scope.submitStandaloneExchangeInternal();\r\n                } else if ($scope.dialogMode == 'convertDEARSaleToPosSale') {\r\n                    $scope.convertDearSaleIntoPosSale();\r\n                } else if ($scope.dialogMode == 'removeAttachment'){\r\n                    removeAttachmentInternal();\r\n                } else if ($scope.dialogMode === 'voidSale') {\r\n                    $scope.voidSaleInternal();\r\n                }\r\n            };\r\n\r\n            $scope.doneOnAccountExchange = function () {\r\n                $scope.actionMode = 'refundsum';\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                if (isNewSale) {\r\n                    CalculatorHelperService.calculateRefundPayments($scope.currentSale, {\r\n                        selectedItem: $scope.selectedItem,\r\n                        paymentValidation: $scope.paymentValidation,\r\n                        payments: $scope.payments\r\n                    }, StartCalcLevel.RefundLimits);\r\n                }\r\n\r\n                $scope.payments.cash = 0;\r\n                $scope.payments.creditCard = 0;\r\n                $scope.paymentValidation.cashAmount = 0;\r\n                $scope.paymentValidation.cardPayments = {};\r\n                $scope.paymentValidation.customPayments = [];\r\n\r\n                $scope.operationSubName = null;\r\n                $scope.currentSale.newRefundOrder = $scope.newGuidForRefund;//uuid2.newguid();\r\n\r\n                if ($scope.selectedItem.IsPartialPaid == true) {\r\n                    $scope.currentSale.IsPartialPaid = $scope.selectedItem.IsPartialPaid;\r\n                }\r\n\r\n                $scope.payments.storeCredit = $scope.paymentValidation.storeCreditAmount;\r\n                $scope.payments.loyaltyPoints = $scope.paymentValidation.loyaltyPointsAmount;\r\n\r\n                var curSale = angular.copy($scope.currentSale);\r\n\r\n                let p = $scope.processPayments();\r\n\r\n                p = p.then(function (res) {\r\n                    $scope.copyToNewSale(curSale);\r\n                });\r\n\r\n                return p;\r\n            };\r\n\r\n            $scope.standaloneSettings = {\r\n                receiptNumber: '',\r\n                allowStockAdjustment: true\r\n            };\r\n\r\n            $scope.getFieldClass = function (ctrl, isInput) {\r\n                if (ctrl.$dirty) {\r\n                    if (ctrl.$error.required)\r\n                        return isInput ? 'dp_form-control-danger form-control-danger' : 'has-danger dp_has-danger';\r\n                    else\r\n                        return isInput ? 'dp_form-control-success form-control-success' : 'has-success dp_has-success';\r\n                }\r\n            };\r\n\r\n            $scope.submitStandaloneRefund = function () {\r\n                // check that unique receipt order number is entered\r\n                saleService.loadSalesHistory(1, 1, {\r\n                    ReceiptNumber: $scope.standaloneSettings.receiptNumber\r\n                }).then(function (res) {\r\n                    if (res && res.Total > 0) {\r\n                        // order number exists already\r\n                        $scope.dialogMode = 'standaloneorderexists';\r\n                        helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                            gettextCatalog.getString('This receipt number has already been used. Are you sure you would like to proceed with new refund with this receipt number?'),\r\n                            gettextCatalog.getString('Yes'),\r\n                            gettextCatalog.getString('No'));\r\n                    } else {\r\n                        $scope.submitStandaloneRefund2();\r\n                    }\r\n                }).catch(function (err) {\r\n                    errorService.showError(err);\r\n                });\r\n            };\r\n\r\n            $scope.submitStandaloneRefund2 = function () {\r\n                window.localStorage.setItem('ItemToExchange', JSON.stringify({\r\n                    OrderNumber: $scope.standaloneSettings.receiptNumber,\r\n                    ClearOrderNumber: $scope.standaloneSettings.receiptNumber,\r\n                    AdjustRefunds: $scope.standaloneSettings.allowStockAdjustment,\r\n                    DefaultCustomer: $scope.standaloneSettings.customer,\r\n                    IsFastRefund: $scope.standaloneSettings.fastRefund === true\r\n                }));\r\n                window.localStorage.setItem('continueSale', JSON.stringify({ type: 'standaloneReturn' }));\r\n\r\n                $location.path('/sell');\r\n            };\r\n\r\n            $scope.submitStandaloneExchange = function () {\r\n                // check that unique receipt order number is entered\r\n                saleService.loadSalesHistory(1, 1, {\r\n                    ReceiptNumber: $scope.standaloneSettings.receiptNumber\r\n                }).then(function (res) {\r\n                    if (res && res.Total > 0) {\r\n                        // order number exists already\r\n                        $scope.dialogMode = 'standaloneexchangeorderexists';\r\n                        helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                            gettextCatalog.getString('This receipt number has already been used. Are you sure you would like to proceed with new exchange with this receipt number?'),\r\n                            gettextCatalog.getString('Yes'),\r\n                            gettextCatalog.getString('No'));\r\n                    } else {\r\n                        $scope.submitStandaloneExchangeInternal();\r\n                    }\r\n                }).catch(function (err) {\r\n                    errorService.showError(err);\r\n                });\r\n            };\r\n\r\n            $scope.submitStandaloneExchangeInternal = function () {\r\n                window.localStorage.setItem('ItemToExchange', JSON.stringify({\r\n                    OrderNumber: $scope.standaloneSettings.receiptNumber,\r\n                    ClearOrderNumber: $scope.standaloneSettings.receiptNumber,\r\n                    AdjustRefunds: $scope.standaloneSettings.allowStockAdjustment,\r\n                    DefaultCustomer: $scope.standaloneSettings.customer,\r\n                    IsFastRefund: $scope.standaloneSettings.fastRefund === true\r\n                }));\r\n                window.localStorage.setItem('continueSale', JSON.stringify({ type: 'standaloneExchange' }));\r\n\r\n                $location.path('/sell');\r\n            };\r\n\r\n            $scope.fastRefund = function () {\r\n                $scope.standaloneSettings.receiptNumber = null;\r\n                $.blockUI();\r\n\r\n                var pr = webOnlyProvider.posUtils(\"fastRefundNumber\",\"\") // get new unique order number for refund\r\n                .then(function(res){\r\n                    $scope.standaloneSettings.receiptNumber = res.data;\r\n                });\r\n\r\n                $scope.standaloneSettings.customer = null;\r\n                if(!!configService.consolidateToCustomerID) {\r\n                    pr = pr.then(function(){ // get default customer\r\n                        return customerService.getCustomer(configService.consolidateToCustomerID)\r\n                        .then(function (resp) {\r\n                            if (resp.Customers[0])\r\n                                $scope.standaloneSettings.customer = resp.Customers[0];\r\n                            else\r\n                                $scope.standaloneSettings.customer = null;\r\n                        });\r\n                    });\r\n                }\r\n\r\n                pr=pr.then(function(){ // go to sale page\r\n                    $.unblockUI();\r\n                    $scope.standaloneSettings.fastRefund = true;\r\n                    $scope.submitStandaloneRefund();\r\n                })\r\n                .catch(function(err){\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n\r\n                return pr;\r\n            };\r\n\r\n            $scope.showStandaloneDialog = function () {\r\n\r\n                $scope.standaloneSettings.receiptNumber = null;\r\n                var $windowElement = $('#standaloneRefundDialogPartial');\r\n                helperService.showDialog($windowElement);\r\n            };\r\n\r\n            $scope.closeStandaloneRefundDialog = function () {\r\n                var $windowElement = $('#standaloneRefundDialogPartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.showStandaloneExchangeDialog = function () {\r\n                $scope.standaloneSettings.receiptNumber = null;\r\n                var $windowElement = $('#standaloneExchangeDialogPartial');\r\n                helperService.showDialog($windowElement);\r\n            };\r\n\r\n            $scope.closeStandaloneExchangeDialog = function () {\r\n                var $windowElement = $('#standaloneExchangeDialogPartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            function addPaymentToRefund(PaymentProcessorID, Amount, PaymentTypeName, earnLoyalty, paymentShortName,\r\n                serverTransactionID, clientTransactionID, saleServerTransactionID, transactionData, surcharge) {\r\n                Amount = helperService.DEARRound(parseFloat(Amount), 2) * -1;\r\n\r\n                $scope.currentSale.Balance = 0;\r\n                var loyalty = 0;\r\n                var surchargeAmount = 0;\r\n                var surchargeTaxAmount = 0;\r\n                if (surcharge && surcharge.isAddedToPayment != true) {\r\n                    surchargeAmount = surcharge.CalculatedValue;\r\n                    surchargeTaxAmount = $scope.selectedItem.Data.TaxInclusive ? 0 : surcharge.Tax;\r\n                }\r\n\r\n                $scope.returnedLoaylty.value += $scope.abs(loyalty);\r\n\r\n                var payment = {\r\n                    ID: uuid2.newguid(),\r\n                    PaymentProcessorID: PaymentProcessorID,\r\n                    Amount: helperService.DEARRound(Amount + surchargeAmount + surchargeTaxAmount, 2),\r\n                    Date: moment.utc(),\r\n                    ShortName: paymentShortName,\r\n                    PaymentTypeName: PaymentTypeName,\r\n                    Loyalty: loyalty,\r\n                    ServerTransactionID: serverTransactionID,\r\n                    ClientTransactionID: clientTransactionID,\r\n                    SaleServerTransactionID: saleServerTransactionID,\r\n                    Surcharge: surcharge\r\n                };\r\n\r\n                if (!!transactionData) {\r\n                    payment.TransactionMetaData = transactionData;\r\n                }\r\n\r\n                if (payment.Surcharge)\r\n                    payment.Surcharge.PaymentID = payment.ID;\r\n\r\n                $scope.currentSale.Payments.push(payment);\r\n\r\n                // if refund a sum, check for 0 to prevent calculations like for exchange\r\n                if (Amount && $scope.currentSale.returnLoyaltyPoints) {\r\n                    var c = 1;\r\n                    if ($scope.currentSale.GroupedSale)\r\n                        c = $scope.currentSale.GroupedSale.LoyaltyRefundCoeff;\r\n                    loyalty = saleService.calculateLoyaltyEx($scope.currentSale, Amount * c);\r\n                }\r\n\r\n                payment.Loyalty = loyalty;\r\n\r\n                $scope.currentSale.LoyaltyUpdate += loyalty;\r\n\r\n                if (paymentShortName === \"loyalty\") {\r\n                    //                $scope.currentSale.CustomerLoyaltyPointsUsed = $scope.abs(loyalty);\r\n                    $scope.currentSale.CustomerLoyaltyPointsUsed = $scope.abs(Amount);\r\n                }\r\n\r\n                return payment;\r\n            }\r\n\r\n            function addSurchargeToRefund(surcharge, paymentAmount, serverTransactionID, clientTransactionID, saleServerTransactionID, ignoreTransactions) {\r\n\r\n                surcharge.CalculatedValue = -1 * helperService.DEARRound(surcharge.AmountToRefund - ($scope.selectedItem.Data.TaxInclusive ? 0 : surcharge.TaxToRefund), 2);\r\n                surcharge.Tax = -1 * surcharge.TaxToRefund;\r\n                surcharge.CalculatedValueWithTax = $scope.selectedItem.Data.TaxInclusive ? surcharge.CalculatedValue : (surcharge.CalculatedValue + surcharge.Tax);\r\n                surcharge.PaymentRealAmount = paymentAmount;\r\n                if (ignoreTransactions !== true) {\r\n                    surcharge.ServerTransactionID = serverTransactionID;\r\n                    surcharge.ClientTransactionID = clientTransactionID;\r\n                    surcharge.SaleServerTransactionID = saleServerTransactionID;\r\n                }\r\n\r\n                delete surcharge.AmountToRefund;\r\n                delete surcharge.TaxToRefund;\r\n\r\n                $scope.currentSale.Surcharges.push(surcharge);\r\n\r\n                $scope.currentSale.Total = $scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive);\r\n                $scope.currentSale.TotalSumWithTax = totalSumWithTax($scope.currentSale.CheckoutItems);\r\n            }\r\n\r\n            $scope.clearReceiptModel = function () {\r\n                $scope.receiptSaleModel = {\r\n                    Customer: [],\r\n                    CheckoutProductCount: 0,\r\n                    Date: '',\r\n                    Time: '',\r\n                    OutletName: '',\r\n                    RegistryName: '',\r\n                    CheckoutProducts: [],\r\n                    SubTotal: 0,\r\n                    Discount: 0,\r\n                    CalculatedTax: 0,\r\n                    Total: 0,\r\n                    Payments: [],\r\n                    Balance: 0,\r\n                    MerchantReceipt: '',\r\n                    CustomerReceipt: ''\r\n                };\r\n            };\r\n\r\n            $scope.clearReceiptModel();\r\n\r\n            function updateReceipt(curSale, receiptDialog) {\r\n                $scope.clearReceiptModel();\r\n                curSale.calledFromHistory = true; // influence of customer loyalty points receipt calculation\r\n                var isNewSale = helperService.showNewCheckoutUI(curSale);\r\n\r\n                if(parseInt(curSale.ClearOrderNumber) === 0){\r\n                    curSale.OrderNumber = $scope.selectedItem.OrderNumber;       \r\n               }\r\n\r\n                if (!isNewSale)\r\n                {\r\n                    saleService.updateReceipt(curSale, $scope.receiptSaleModel, getBalance(curSale), $scope.currency, $scope.selectedItem.Data.TaxInclusive);\r\n                    receiptDialog();\r\n                }\r\n                else\r\n                    CalculatorHelperService.updateReceipt(curSale, $scope.receiptSaleModel, $scope.currency, receiptDialog);\r\n            }\r\n\r\n            function getBalance(curSale) {\r\n                var saleTotalPaid = helperService.DEARRound(Math.abs($scope.getSaleTotalPaid($scope.selectedItem.Data)), 2);\r\n                var saleTotalGrid = helperService.DEARRound(Math.abs($scope.getSaleGridTotal($scope.selectedItem.Data)), 2);\r\n                return saleTotalGrid - saleTotalPaid;\r\n            }\r\n\r\n\r\n            $scope.showReceiptDialog = function (forceRestore) {\r\n\r\n                var curSale = forceRestore === true ? JSON.parse($scope.lastCurrentSale) : angular.copy($scope.currentSale);\r\n                curSale.Date = helperService.getFormatedDateAlreadyLocal($scope.selectedItem.OrderDate);\r\n\r\n                // fix before forced print from history\r\n                if (forceRestore) {\r\n                    if ((curSale.LoyaltyPointsTotal < 0 && curSale.LoyaltyPoints > 0) ||\r\n                        (curSale.LoyaltyPointsTotal > 0 && curSale.LoyaltyPoints < 0))\r\n                        curSale.LoyaltyPoints *= -1;\r\n                }\r\n\r\n                updateReceipt(curSale, function() {\r\n                    $scope.email.receiptEmail = null;\r\n\r\n                    if ($scope.selectedItem.Data.CustomerEmail) {\r\n                        $scope.email.receiptEmail = $scope.selectedItem.Data.CustomerEmail;\r\n                    }\r\n\r\n                    var $windowElement = $('#receiptDialogPartial');\r\n                    helperService.showDialog($windowElement);\r\n                });             \r\n            }\r\n\r\n            $scope.closeReceiptDialog = function () {\r\n                //printService.reconnect();\r\n                //printService.disconnect().then(function () { return printService.connect(); });\r\n\r\n                var $windowElement = $('#receiptDialogPartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.hasTerminalReceipts = function () {\r\n                return printService.hasTerminalReceipts();\r\n            };\r\n\r\n            $scope.printReceipt = function () {\r\n                var vl = $scope.receiptHolder.receiptForm.printAllReceipts.$viewValue;\r\n                return printService.printReceipt(null, null, null, !vl).catch((err) => {\r\n                    errorService.showError(err);\r\n                    $.unblockUI();\r\n                });\r\n            };\r\n\r\n            $scope.receiptHolder = {\r\n            };\r\n\r\n            $scope.email = {\r\n                receiptEmail: null\r\n            };\r\n\r\n            $scope.sendEmailReceipt = function () {\r\n                $.blockUI();\r\n//                var emailBody = $('div[show-data] > .ng-scope').html();\r\n                var emailBody = emailService.setEmailToken('div[email-template] > .ng-scope').html();\r\n                var documentBody = $('div[receipt-template] > .ng-scope').html();\r\n                if (!documentBody) {\r\n                    documentBody = $('div.receipt-template div[receipt-template] > .ng-scope').html();\r\n                }\r\n                var emailSubject = $scope.receiptEmailSubject;\r\n                //            var email = $scope.receiptHolder.receiptForm.receiptEmail.$viewValue;\r\n                var email = $scope.email.receiptEmail;\r\n                if((!$scope.currentSale || !$scope.currentSale.OrderNumber) && $scope.lastCurrentSale)\r\n                    $scope.currentSale = JSON.parse($scope.lastCurrentSale);\r\n\r\n                var orders = emailService.extractOrderIDs($scope.currentSale);\r\n\r\n                emailService.sendEmailReceipt(orders.orderID, orders.baseOrderID, email, emailSubject, emailBody, false, $scope.receiptTemplateID, documentBody)\r\n                    .then(function (result) {\r\n                        $.unblockUI();\r\n                        // show message box about sending result\r\n                        if (result.Result == true) {\r\n                            $scope.closeReceiptDialog();\r\n\r\n                            $scope.sentToEmail = email;\r\n\r\n                            var extFlags = {};\r\n                            if($scope.selectedItem.ExtendedFlags) {\r\n                               extFlags = JSON.parse($scope.selectedItem.ExtendedFlags);\r\n                            }\r\n\r\n                            extFlags.SEE = 'true';\r\n                            $scope.selectedItem.ExtendedFlags = JSON.stringify(extFlags);\r\n                            $scope.selectedItem.ReceiptWasEmailed = true;\r\n\r\n                            var ordr = $scope.data.filter(\r\n                                function(r) {return r.PosOrderID === $scope.selectedItem.PosOrderID;});\r\n                            if(ordr.length>0) {\r\n                                ordr[0].ExtendedFlags = $scope.selectedItem.ExtendedFlags;\r\n                                ordr[0].ReceiptWasEmailed = true;\r\n                            }\r\n\r\n                            var $windowElement = $('#receiptSentToEmail');\r\n                            helperService.showDialog($windowElement);\r\n\r\n                            $scope.closeReceiptEmailDialog = function () {\r\n                                var $windowElement = $('#receiptSentToEmail');\r\n                                helperService.closeDialog($windowElement);\r\n                            };\r\n                        }\r\n                        else {\r\n                            var $windowElement = $('#receiptSentToEmailError');\r\n                            helperService.showDialog($windowElement);\r\n\r\n                            $scope.closeReceiptEmailDialog = function () {\r\n                                var $windowElement = $('#receiptSentToEmailError');\r\n                                helperService.closeDialog($windowElement);\r\n                            };\r\n                        }\r\n                    }, function (err) {\r\n                        $.unblockUI();\r\n                        var txt = gettextCatalog.getString(\"Error sending email.\");\r\n                        if (!!err.data && err.data.length > 0 && !!err.data[0].Exception)\r\n                            txt = err.data[0].Exception;\r\n\r\n                        errorService.showError(!!err.data ? err.data : txt);\r\n                    });\r\n            };\r\n\r\n\r\n            $scope.refundPaymentAmountDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n            $scope.refundDialogItem = { Amount: 0, Type: '', elementId: null };\r\n\r\n            $scope.robj = null;\r\n\r\n            $scope.handleRemotedlyProcessed = function (obj) {\r\n                if (!obj.isRemotedlyProcessed) {\r\n                    $scope.dialogMode = 'remoteprocessing';\r\n                    $scope.robj = obj;\r\n                    helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                        gettextCatalog.getString('Are you sure you want to skip card machine processing?'),\r\n                        gettextCatalog.getString('Yes'),\r\n                        gettextCatalog.getString('No'));\r\n                } else\r\n                    obj.isRemotedlyProcessed = false;\r\n            };\r\n\r\n    $scope.showRefundPaymentAmountDlg = function (paymentType, elementId, sumLimit) {\r\n        sumLimit = helperService.DEARRound(sumLimit, 6);\r\n        $scope.refundDialogItem.Type = paymentType;\r\n        $scope.refundDialogItem.elementId = elementId.substr(1);\r\n        var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n        var sumRest = 0;\r\n\r\n        if (!isNewSale)\r\n            sumRest = ($scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive, true) * -1) - $scope.amountSums() + $scope.oldReturnPayments() + $scope.currentSale.FullReturnRounding;\r\n        else\r\n            sumRest = Math.abs($scope.currentSale.RemainingToRefund + $scope.currentSale.FullReturnRounding);\r\n\r\n        sumRest = helperService.DEARRound(sumRest, 6);\r\n\r\n        if (!!sumLimit) {\r\n            if (Number(sumLimit) < sumRest)\r\n                sumRest = sumLimit;\r\n        }\r\n\r\n        saleService.setPaymentLimits($scope, paymentType, sumRest);\r\n\r\n        $timeout(function () {\r\n            $scope.refundPaymentAmountDlg.show(elementId);\r\n        });\r\n    };\r\n\r\n            $scope.setRefundAmount = function (prm) {\r\n                saleService.setRefundAmount($scope, prm, $scope.selectedItem.Data.TaxInclusive);\r\n            };\r\n\r\n            $scope.refundItemCountDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n            $scope.refundDialogItemCount = { Count: 0, ProductID: null };\r\n\r\n            $scope.showRefundItemCountDlg = function (item, elementId) {\r\n                if ($scope.selectedItem.canContinue === false) {\r\n                    $scope.refundDialogItemCount.ProductID = item.ProductID;\r\n                    $scope.refundDialogItemCount.Count = item.Count;\r\n                    $scope.refundDialogItemCount.ID = item.ID;\r\n                    $timeout(function () {\r\n                        $scope.refundItemCountDlg.show(elementId);\r\n                    });\r\n                }\r\n            };\r\n\r\n            // callback\r\n            $scope.setItemCount = function (prm) {\r\n                $timeout(function () { $scope.refundItemCountDlg.hide(true); });\r\n                $timeout(function () {\r\n                    if (prm === true) {\r\n                        $.each($scope.currentSale.ReturnItems, function (idx, el) {\r\n                            if (el.ProductID === $scope.refundDialogItemCount.ProductID && el.ID === $scope.refundDialogItemCount.ID &&\r\n                                (el.GiftCardCode === $scope.refundDialogItemCount.GiftCardCode || (!el.GiftCardCode && !$scope.refundDialogItemCount.GiftCardCode))) {\r\n                                el.Count = helperService.DEARRound($scope.refundDialogItemCount.Count, configService.decimalPlaces);\r\n                                $scope.changeReturnItemCount(el);\r\n                                return false;\r\n                            }\r\n                        });\r\n                    }\r\n                });\r\n            };\r\n\r\n\r\n            $scope.getEmailClasss = function (form) {\r\n                if ((!form.receiptEmail.$invalid && form.receiptEmail.$dirty) || (!form.receiptEmail.$invalid && form.receiptEmail.length > 0))\r\n                    return 'dp_has-success has-success';\r\n                else if (((form.receiptEmail.$invalid || form.receiptEmail.$error.required || form.receiptEmail.$error.email) && (form.receiptEmail.$dirty || form.receiptEmail.length > 0)))\r\n                    return 'has-danger dp_has-danger';\r\n            }\r\n\r\n\r\n            $scope.cantProcessReturn = function () {\r\n                if ($scope.currentSale && $scope.currentSale.ReturnItems) {\r\n                    var cant = $scope.refundNeedCustomer === true; // /* We can process chained exchanges multiple times so total sum does not matter */ || !(($scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive) * -1) >= 0);\r\n\r\n                    var hasErrorInItemCount = false;\r\n                    var itemsToReturnCount = 0;\r\n                    $.each($scope.currentSale.ReturnItems, function (idx, el) {\r\n                        if (el.return) {\r\n                            itemsToReturnCount += el.Count;\r\n                        }\r\n                        if (el.Count > el.maxCount && el.return === true) {\r\n                            hasErrorInItemCount = true;\r\n                            return false;\r\n                        }\r\n                    });\r\n\r\n                    return cant || hasErrorInItemCount || itemsToReturnCount === 0;\r\n                }\r\n                return false;\r\n            }\r\n\r\n            $scope.lockSearch = false;\r\n\r\n            $scope.$on('scan.barcode', function (event, barcode) {\r\n                if ($(\"#clickAndCollectModel:visible\").length > 0)\r\n                    return;\r\n                $scope.checkSearchAndWait(barcode);\r\n            });\r\n\r\n            $scope.checkSearchAndWait = function (barcode) {\r\n                if ($scope.lockSearch) {\r\n                    $timeout(function () {\r\n                        $scope.checkSearchAndWait(barcode);\r\n                    }, 100);\r\n                }\r\n                else {\r\n                    $scope.processBarcodeSearch(barcode);\r\n                }\r\n            };\r\n\r\n            $scope.inputSearch = function (barcode) {\r\n                $scope.selectedPage = 1;\r\n\r\n                if ($scope.gridType !== 'pos') {\r\n                    $scope.dearSalesFilters.searchText = $scope.searchInput;\r\n                    $scope.dearSalesSearch();\r\n                }\r\n                else\r\n                    $scope.search();\r\n            }\r\n\r\n            $scope.processBarcodeSearch = function (barcode) {\r\n                $.blockUI();\r\n                $scope.lockSearch = true;\r\n                console.log('lock search');\r\n                $scope.hideSearch(false);\r\n                $scope.searchInput = barcode;\r\n                console.log('got scan.barcode: ' + barcode);\r\n\r\n                $scope.selectedPage = 1;\r\n\r\n                $scope.search();\r\n                $scope.lockSearch = false;\r\n                console.log('unlock search');\r\n                console.log('ready to next search');\r\n            };\r\n\r\n            $scope.canReturn = function () {\r\n                if ($scope.selectedItem) {\r\n\r\n                    var res =\r\n                        (\r\n                            $scope.selectedItem.Status === 'LAYBY_CLOSED'\r\n                            || $scope.selectedItem.Status === 'ONACCOUNT_CLOSED'\r\n                            || $scope.selectedItem.Status === 'ONACCOUNT'\r\n                            || $scope.selectedItem.Status === 'LAYBY'\r\n                            || $scope.selectedItem.Status === 'CLOSED'\r\n                            || $scope.selectedItem.Status === 'RETURN'\r\n                        );\r\n\r\n                    return res;\r\n                }\r\n                else {\r\n                    return false;\r\n                }\r\n            };\r\n\r\n            $scope.canReturnPartiallyPaid = function () {\r\n                if ($scope.selectedItem) {\r\n\r\n                    var isPartialPaid = false;\r\n                    if (typeof $scope.selectedItem.RawSaleObject.IsPartialPaid !== 'undefined') {\r\n                        isPartialPaid = $scope.selectedItem.RawSaleObject.IsPartialPaid;\r\n                    }\r\n\r\n                    var result = isPartialPaid || ($scope.selectedItem.Status === 'LAYBY_CLOSED' || $scope.selectedItem.Status === 'ONACCOUNT_CLOSED' || $scope.selectedItem.Status === 'ONACCOUNT' || $scope.selectedItem.Status === 'LAYBY' || $scope.selectedItem.Status === 'CLOSED');\r\n\r\n                    return result;\r\n                }\r\n                else {\r\n                    return false;\r\n                }\r\n            };\r\n\r\n            $scope.getRemainingToRefund = function (excludeSelectedAmount) {\r\n                if (!$scope.currentSale) return 0;\r\n\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                if (!isNewSale) {\r\n                    var sTotal = $scope.getSaleTotalPaid($scope.selectedItem.Data);\r\n                    var sGrid = $scope.getSaleGridTotal($scope.selectedItem.Data);\r\n                    var amountSums = 0;\r\n\r\n                    if ($scope.canReturnPartiallyPaid() === true &&\r\n                        (helperService.DEARRound(Math.abs(sGrid), 2) > helperService.DEARRound(Math.abs(sTotal), 2)\r\n                            || helperService.DEARRound(Math.abs(sTotal), 2) === 0)) {\r\n                        if (!(excludeSelectedAmount === true)) {\r\n                            amountSums = $scope.amountSums();\r\n                        }\r\n\r\n                        return $scope.getAllPartialPayment() - amountSums;\r\n                    }\r\n                    else {\r\n                        var fullReturnRounding = 0;\r\n                        var totalSum = 0;\r\n                        if ($scope.currentSale) {\r\n                            totalSum = $scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive, true) * -1;\r\n\r\n                            fullReturnRounding = $scope.currentSale.FullReturnRounding;\r\n                        }\r\n\r\n                        if (!(excludeSelectedAmount === true)) {\r\n                            amountSums = $scope.amountSums();\r\n                        }\r\n\r\n\r\n                        return helperService.DEARRound(totalSum - amountSums + $scope.oldReturnPayments() + fullReturnRounding, 2);\r\n                    }\r\n                } else {\r\n                    return Math.abs($scope.currentSale.RemainingToRefund);\r\n                }\r\n            };\r\n\r\n            $scope.getAllPartialPayment = function () {\r\n                var amount = 0;\r\n\r\n                if ($scope.selectedItem.IsPartialPaid == true && $scope.selectedItem.Data.Refunds && $scope.selectedItem.Data.Refunds.length > 0) {\r\n                    amount = $scope.selectedItem.PartiallyPaidDue;\r\n                }\r\n                else {\r\n                    $.each($scope.selectedItem.RawSaleObject.Payments, function (pRefIdx, ref) {\r\n                        amount += ref.Amount;\r\n                        if (!!ref.Surcharge/* && ref.Surcharge.RefundSurcharge === false*/) { // we need in sum without surcharges in any case\r\n                            //                        amount -= ref.Surcharge.CalculatedValue - ($scope.selectedItem.Data.TaxInclusive ? 0 : ref.Surcharge.Tax);\r\n                            amount -= ref.Surcharge.CalculatedValueWithTax;\r\n                        }\r\n                    });\r\n                }\r\n\r\n                return helperService.DEARRound(amount, 2);\r\n            };\r\n\r\n            $scope.toggleItemSelection = function (item) {\r\n                if (item.maxCount == 0) {\r\n                    return false;\r\n                }\r\n                if (item.ProductType == 'GiftCard' && (!$scope.isGiftCardRefundable)) {\r\n                    return false;\r\n                }\r\n\r\n                if (!(item.maxCount === item.minCount && ($scope.selectedItem.canContinue === true || $scope.selectedItem.IsPartialPaid === true))) {\r\n                    item.return = item.return == true ? false : true;\r\n                    $scope.submitSelectReturnItems();\r\n                }\r\n            };\r\n\r\n\r\n            //#region fulfillment\r\n\r\n            $scope.callFullfilmentDialog = function () {\r\n                $rootScope.$broadcast('clickAndCollectDialog.show', { taskID: $scope.selectedItem.MasterTaskID, fromOrderLines: true });\r\n            };\r\n\r\n            //#endregion\r\n\r\n            /*\r\n             * \r\n            */\r\n            $scope.applyCustomSurchargeRefundCoefficient = function (paymentValidation, totalLimit) {\r\n                $.each(paymentValidation.customPayments, function (i, el) {\r\n                    $scope.reduceMaxAmounts(el, totalLimit);\r\n                });\r\n            };\r\n\r\n            $scope.applyCardSurchargeRefundCoefficient = function (paymentValidation, totalLimit) {\r\n                $.each(helperService.mapToList(paymentValidation.cardPayments), function (i, el) {\r\n                    $scope.reduceMaxAmounts(el, totalLimit);\r\n                });\r\n            };\r\n\r\n            $scope.reduceMaxAmounts = function (el, totalLimit) {\r\n                if (el.validationAmount > totalLimit && totalLimit > 0.0001) {\r\n                    if (el.Surcharge) {\r\n                        var coeff = totalLimit / el.validationAmount;\r\n                        el.Surcharge = $scope.correctSurcharge(el.Surcharge, coeff);\r\n                    }\r\n                    el.validationAmount = totalLimit;\r\n                }\r\n            };\r\n\r\n            $scope.prepareSurcharge = function (el, taxInclusive) {\r\n                if (el.Surcharge)\r\n                    $scope.restoreSurcharge(el.Surcharge, taxInclusive);\r\n\r\n                if (!!el.Surcharge && el.Surcharge.CalculatedValue != 0 && !(el.Surcharge.RefundSurcharge === false)) {\r\n                    var surchargeCopy = angular.copy(el.Surcharge);\r\n                    surchargeCopy.CalculatedValueWithTax = surchargeCopy.CalculatedValue + (taxInclusive ? 0 : surchargeCopy.Tax);\r\n                    surchargeCopy.AmountToRefund = 0;\r\n                    surchargeCopy.TaxToRefund = 0;\r\n                    return surchargeCopy;\r\n                } else\r\n                    return null;\r\n            };\r\n\r\n            $scope.correctSurcharge = function (el, coeff) {\r\n                var surchargeCopy = angular.copy(el);\r\n                surchargeCopy.CalculatedValue = helperService.DEARRound(surchargeCopy.CalculatedValue * coeff, 2);\r\n                surchargeCopy.CalculatedValueWithTax = helperService.DEARRound(surchargeCopy.CalculatedValueWithTax * coeff, 2);\r\n                if (surchargeCopy.AmountToRefund)\r\n                    surchargeCopy.AmountToRefund = helperService.DEARRound(surchargeCopy.AmountToRefund * coeff, 2);\r\n                if (surchargeCopy.TaxToRefund)\r\n                    surchargeCopy.TaxToRefund = helperService.DEARRound(surchargeCopy.TaxToRefund * coeff, 2);\r\n                surchargeCopy.Tax = helperService.DEARRound(surchargeCopy.Tax * coeff, 2);\r\n                if (surchargeCopy.Total)\r\n                    surchargeCopy.Total = helperService.DEARRound(surchargeCopy.Total * coeff, 2);\r\n                return surchargeCopy;\r\n            };\r\n\r\n            $scope.negateSurcharge = function (el) {\r\n                el.CalculatedValue *= -1;\r\n                el.CalculatedValueWithTax *= -1;\r\n                el.Tax *= -1;\r\n                if (el.AmountToRefund)\r\n                    el.AmountToRefund *= -1;\r\n                if (el.TaxToRefund)\r\n                    el.TaxToRefund *= -1;\r\n                if (el.Total)\r\n                    el.Total *= -1;\r\n            };\r\n\r\n            $scope.restoreSurcharge = function (sd, taxInclusive) {\r\n                if (!sd || !sd.Total) return sd;\r\n\r\n                sd.CalculatedValue = sd.Total;\r\n                sd.CalculatedValueWithTax = taxInclusive === true ? sd.Total : (sd.Total + sd.Tax);\r\n            };\r\n\r\n            // s2 surcharge will be added into s1\r\n            $scope.sumSurcharges = function (s1, s2, isNegative) {\r\n                if (!s1 || !s2) return;\r\n                var sign = isNegative === true ? -1 : 1;\r\n                s1.CalculatedValue = helperService.addValues(s1.CalculatedValue, sign * s2.CalculatedValue);\r\n                s1.CalculatedValueWithTax = helperService.addValues(s1.CalculatedValueWithTax, sign * s2.CalculatedValueWithTax);\r\n                s1.Tax = helperService.addValues(s1.Tax, sign * s2.Tax);\r\n                s1.AmountToRefund = helperService.addValues(s1.AmountToRefund, sign * s2.AmountToRefund);\r\n                s1.TaxToRefund = helperService.addValues(s1.TaxToRefund, sign * s2.TaxToRefund);\r\n                if (s1.Total && s2.Total)\r\n                    s1.Total = helperService.addValues(s1.Total, sign * s2.Total);\r\n            };\r\n\r\n            $scope.allCustomPaymentValidations = function (paymentValidation) {\r\n                var sum = 0;\r\n                $.each(paymentValidation.customPayments, function (i, el) {\r\n                    sum += el.validationAmount;\r\n                });\r\n                return sum;\r\n            };\r\n\r\n            $scope.setPaymentMethodName = function (el) {\r\n                switch (el.ShortName) {\r\n                    case 'cash':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Cash\");\r\n                        break;\r\n                    case 'credit card':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Credit card\");\r\n                        break;\r\n                    case 'store credits':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Store credit\");\r\n                        break;\r\n                    case 'loyalty points':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Loyalty points\");\r\n                        break;\r\n                    case 'loyalty':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Loyalty points\");\r\n                        break;\r\n                    default:\r\n                        el.PaymentTypeName = $scope.getCustomPaymentMethodName(el.ShortName);\r\n                        break;\r\n                }\r\n            };\r\n\r\n            $scope.calcSelectedSurcharges = function () {\r\n                return saleService.calcSelectedSurcharges($scope.payments, $scope.paymentValidation);\r\n            };\r\n\r\n            $scope.calcTotalPay = function () {\r\n                return saleService.calcSelectedSurcharges($scope.payments, $scope.paymentValidation) +\r\n                    saleService.calcTotalPay($scope.payments, $scope.paymentValidation);\r\n            };\r\n\r\n            $scope.remainingInOrder = function () {\r\n                if (!$scope.currentSale) return;\r\n\r\n                var res =  helperService.DEARRound($scope.currentSale.EstimateTotal, 2) + $scope.currentSale.BaseTotal - $scope.currentSale.discountValue;\r\n                return res;\r\n            };\r\n\r\n            $scope.totalInOrder = function () {\r\n                if (!$scope.currentSale) return;\r\n\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                if (!isNewSale)\r\n                    return $scope.abs($scope.totalSum($scope.currentSale, $scope.selectedItem.Data.TaxInclusive, true)) + $scope.currentSale.FullReturnRounding;\r\n                else {\r\n                    return $scope.abs($scope.currentSale.Total) + $scope.currentSale.FullReturnRounding;\r\n                }\r\n            };\r\n\r\n            $scope.subTotalInOrder = function () {\r\n                if (!$scope.currentSale) return;\r\n\r\n                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                if (!isNewSale)\r\n                    return $scope.abs($scope.subTotalSum($scope.currentSale.CheckoutItems, $scope.currentSale));\r\n                else\r\n                    return $scope.abs($scope.currentSale.SubTotal);\r\n            };\r\n\r\n            $scope.setPaymentName = function(el) {\r\n                switch (el.ShortName) {\r\n                    case 'cash':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Cash\");\r\n                        break;\r\n                    case 'credit card':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Credit card\");\r\n                        break;\r\n                    case 'store credits':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Store credit\");\r\n                        break;\r\n                    case 'loyalty points':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Loyalty points\");\r\n                        break;\r\n                    case 'loyalty':\r\n                        el.PaymentTypeName = gettextCatalog.getString(\"Loyalty points\");\r\n                        break;\r\n                    default:\r\n                        el.PaymentTypeName = $scope.getCustomPaymentMethodName(el.ShortName);\r\n                        break;\r\n                }\r\n\r\n            };\r\n\r\n\r\n            /*Attachments */\r\n            $scope.files = null;\r\n            $scope.openAttachmentDialog = function(row) {\r\n                $(\"#AttachmentIpint_\" + row.OrderID).trigger('click');\r\n                return false;\r\n            }\r\n\r\n            $scope.onFileSelect = function(e){\r\n                $.blockUI();\r\n\r\n                var orderID = $(e.target).attr(\"orderID\");\r\n                var files = e.target.files;\r\n                \r\n                var hasError = false;\r\n                var error  = \"\";\r\n\r\n                //var fd = new FormData();\r\n\r\n                var prm = helperService.resolvePromise(true);\r\n\r\n                var filesToSend = [];\r\n\r\n\r\n                $.each(files, function(idx, file){\r\n                    var fExtension = (file.name.slice((file.name.lastIndexOf(\".\") - 1 >>> 0) + 2)).toLowerCase();\r\n                    if(fExtension === \"exe\" || fExtension === \"msi\"){\r\n                        hasError = true;\r\n                        error += gettextCatalog.getString(\"File\") +\" \"+ file.name + \" \" +   gettextCatalog.getString(\"has unsupported extension\") + \"<br/>\";\r\n                    } else { \r\n                        //fd.append('orderFiles', file, file.name);\r\n                        \r\n                        prm = prm.then(function(){\r\n                            return fileToBase64(filesToSend, file.name, file);\r\n                        });\r\n                    }\r\n                });\r\n                \r\n\r\n                if(hasError){\r\n                    $.unblockUI();\r\n                    errorService.showError(error);\r\n                } else{\r\n                    e.target.value = '';\r\n\r\n                    prm.then(function(resps){\r\n                        saleService.attachFilesToOrder(orderID,filesToSend).then(function(success){\r\n                            $.unblockUI();\r\n\r\n                        }, function(err){\r\n                            $.unblockUI();\r\n                            errorService.showError(err);\r\n                        });\r\n                    }, function(err){\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    }); \r\n                }\r\n            }\r\n\r\n            const fileToBase64 = function(filesToSend, fileName, file){\r\n                return new Promise(function(resolve, reject){\r\n                    var reader = new FileReader();\r\n                    reader.readAsDataURL(file);\r\n                    reader.onload = function(){\r\n                        filesToSend.push({fileName: fileName, fileContent: reader.result});\r\n                        resolve(reader.result);\r\n                    };\r\n                    reader.onerror = function(error){\r\n                        reject(error);\r\n                    };\r\n                });\r\n            }\r\n\r\n\r\n            $scope.removeAttachment = function(attachment){\r\n                $scope.selectedAttachment = attachment;\r\n\r\n                $scope.dialogMode = 'removeAttachment';\r\n                helperService.showCustomDialog(gettextCatalog.getString('Confirmation'),\r\n                    gettextCatalog.getString('Are you sure that you want to delete this attachment?'),\r\n                    gettextCatalog.getString('Yes'),\r\n                    gettextCatalog.getString('No'));\r\n\r\n            }\r\n\r\n            function removeAttachmentInternal(){\r\n                if($scope.selectedAttachment != null){\r\n                    $.blockUI();\r\n\r\n                    saleService.removeAttachment($scope.selectedAttachment.AttachementID)\r\n                    .then(function(){\r\n\r\n                        var attachmentIndex = $scope.selectedItem.Attachments.indexOf($scope.selectedAttachment);\r\n                        \r\n                        $scope.selectedItem.Attachments.splice(attachmentIndex, 1);\r\n\r\n                        $scope.selectedAttachment = null;\r\n                        $.unblockUI();\r\n                    },function(err){\r\n                        $.unblockUI();\r\n                        var message = gettextCatalog.getString('Failed to remove attachment: ') + err;\r\n                        errorService.showError(message);\r\n                    });\r\n                    \r\n                }\r\n            }\r\n\r\n            $scope.showInMobileDesign = function() {\r\n                return configService.isMobileDesign ? '' : 'desktop-hide';\r\n            };\r\n\r\n            $scope.showInDesktopDesign = function() {\r\n                return configService.isMobileDesign ? 'mobile-hide' : '';\r\n            };\r\n\r\n            $scope.addDelivery = function(){\r\n                $rootScope.$broadcast('deliveryDialog.show', \r\n                { \r\n                    sale: $scope.currentSale\r\n                });\r\n            };\r\n\r\n            $scope.selectDelivery = function(row) {\r\n                $rootScope.$broadcast('deliveryDialog.show', \r\n                { \r\n                    sale: {\r\n                        ID: row.OrderID\r\n                    }, \r\n                    addNew: false\r\n                });\r\n            };\r\n\r\n            $scope.canDelivery = function() {\r\n                return configService.canSeeAllScheduledDeliveries === true && configService.isOnline === true;\r\n            }\r\n\r\n            $scope.setDropdownPosition = function() {\r\n                try {\r\n                    var isLeftAligned = $('#refundExchangeMenuBtn').offset().left < $window.innerWidth / 2;\r\n                    $('#refundExchangeMenu').toggleClass('dropdown-menu-right', !isLeftAligned);\r\n                } catch (e) {\r\n                    console.error(e);\r\n                }\r\n            };\r\n\r\n            $scope.voidSale = function() {\r\n                $scope.dialogMode = 'voidSale';\r\n                helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                    gettextCatalog.getString('Sale order will be deleted together with its data from all internal reports. Are you sure that you want to proceed?'),\r\n                    gettextCatalog.getString('Yes'),\r\n                    gettextCatalog.getString('No'));\r\n            }\r\n        \r\n            $scope.voidSaleInternal = function() {\r\n                $.blockUI();\r\n                webOnlyProvider.voidSale($scope.selectedItem.PosOrderID).then(function() {\r\n                    // add order state change log\r\n                    return orderStatusService.trackOrder(\r\n                        $scope.selectedItem.RawSaleObject.ID || $scope.selectedItem.PosOrderID,\r\n                        configService.registrySalesID,\r\n                        'voided'\r\n                    ).catch(function(err) {\r\n                        console.error('Failed to track void status:', err);\r\n                    });\r\n                }).then(function() {\r\n                    return $scope.reloadItem($scope.selectedItem.PosOrderID);\r\n                }).then(function() {\r\n                    $.unblockUI();\r\n                    $rootScope.$broadcast('snackbar.show', {\r\n                        message: gettextCatalog.getString('Sale order {{orderNumber}} has been voided.', { orderNumber: $scope.selectedItem.OrderNumber })\r\n                    });\r\n                })\r\n                .catch(function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n            }\r\n\r\n            angular.element($window).bind('resize', function () {\r\n                $scope.setDropdownPosition();\r\n            });\r\n\r\n            initMeasure();\r\n        }]);\r\n\r\nangular.module('mainApp').filter('getSaleHistoryStatusColor', function() {\r\n    return function(status) {\r\n        switch (status) {\r\n            case 'RETURN':\r\n                return {'background-color':'#FEE8E8'};\r\n            case 'CLOSED':\r\n            case 'ONACCOUNT_CLOSED':\r\n            case 'LAYBY_CLOSED': \r\n                return {'background-color':'#D6F3F0'};\r\n            case 'ONACCOUNT':\r\n            case 'LAYBY':\r\n                return {'background-color':'#D6E3F3'};\r\n            case 'LAYBY_CLOSED_VOIDED':\r\n            case 'LAYBY_VOIDED':\r\n                return {'background-color':'#FEE8E8'};\r\n\r\n        }\r\n    };\r\n});","angular.module(\"mainApp\").controller('salesParkedController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'saleService', \r\n    '$location', 'configService', 'helperService', 'orderByFilter','$interval', '$locale',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, saleService, \r\n        $location, configService, helperService, orderBy, $interval, $locale) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constSalesParkedViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n        }\r\n\r\n        $scope.getFormatedDate = helperService.getFormatedDate;\r\n        $scope.getDateByFormat = helperService.getDateByFormatAlreadyLocal;\r\n\r\n        $scope.isSite = configService.isSite;\r\n\r\n        $scope.fullFilters = false;\r\n\r\n        $scope.selectedPage = 1;\r\n        $scope.totalPages = 1;\r\n        $scope.itemsByPage = 25;\r\n        $scope.totalRecords = null;\r\n        $scope.isLoading = false;\r\n\r\n        // array for sales\r\n        $scope.offlineParkedSales = [];\r\n        $scope.onlineParkedSales = [];\r\n        $scope.statuses = constants.parkStatuses;\r\n        $scope.sorting = {};\r\n\r\n        $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n        // enable event when view is shown\r\n        $scope.onLoad = function () {\r\n            if ($scope.isOnline === true) {\r\n                $scope.loadOnlineParkedSales(true);\r\n            } else {\r\n                $scope.loadOfflineParkedSales();\r\n            }\r\n\r\n            $scope.restartRefresher();\r\n        };\r\n\r\n        $scope.refresher = null;\r\n        \r\n        $scope.restartRefresher = function() {\r\n            if(!!$scope.refresher)\r\n             $interval.cancel($scope.refresher);\r\n\r\n             $scope.refresher = $interval($scope.refreshData, 60000);    \r\n        }\r\n\r\n        $scope.refreshData = function() {\r\n            if($scope.loadInProcess) {\r\n                $scope.restartRefresher();\r\n            } else {\r\n                if ($scope.isOnline === true && $scope.active === 0) {\r\n                    $scope.loadOnlineParkedSales(true);\r\n                }\r\n            }\r\n        };\r\n\r\n        $scope.loadOfflineParkedSales = function () {\r\n            $scope.active = 1;\r\n            saleService.loadOfflineSales(null, 'parked').then(function (res) {\r\n                $scope.selectedPage = 1;\r\n                getPages(res.length);\r\n\r\n                var orderedRes = orderBy(res, 'lastModified', true);\r\n                $scope.offlineParkedSales = orderedRes.slice(($scope.selectedPage - 1) * $scope.itemsByPage, $scope.itemsByPage * ($scope.selectedPage));\r\n\r\n                $scope.raiseViewChanged();\r\n            });\r\n        }\r\n\r\n        // makes deformatting and removes all nonnumeric symbols except last found\r\n        function deformatCurrency(val) {\r\n            if (typeof (val) != 'string' || !val || val.length == 0)\r\n                return val;\r\n\r\n            var replace = true;\r\n            var res = '';\r\n            for (j = val.length - 1; j >= 0; j--) {\r\n                if (val[j] >= '0' && val[j] <= '9')\r\n                    res = val[j] + res;\r\n                else if (replace) {\r\n                    res = val[j] + res;\r\n                    replace = false;\r\n                }\r\n            }\r\n\r\n            return parseFloat(res);\r\n        }\r\n\r\n        const scrollOfflineReachBottomCallback = function () {\r\n            if (!$scope.isLoading && $scope.selectedPage < $scope.totalPages && !$scope.isOnline /* only trigger for offline tab */) {\r\n                $scope.selectedPage++;\r\n\r\n                $.blockUI();\r\n                $scope.isLoading = true;\r\n                saleService.loadOfflineSales(null, 'parked').then(function (res) {\r\n\r\n                    getPages(res.length);\r\n\r\n                    var orderedRes = orderBy(res, 'lastModified', true);\r\n\r\n                    var offlineParkedSales = orderedRes.slice(($scope.selectedPage - 1) * $scope.itemsByPage, $scope.itemsByPage * ($scope.selectedPage));\r\n\r\n                    $.each(offlineParkedSales, function (idx, el) {\r\n                        if (!$scope.offlineParkedSales.filter(function (fEl) {\r\n                            return fEl.SaleID === el.SaleID;\r\n                        }).length > 0) {\r\n                            $scope.offlineParkedSales.push(el)\r\n                        }\r\n                    });\r\n                    $.unblockUI();\r\n                    $scope.isLoading = false;\r\n                },\r\n                function (err) {\r\n                    $.unblockUI();\r\n                    $scope.isLoading = false;\r\n                    errorService.showError(err);\r\n                });\r\n            }\r\n        }\r\n\r\n        initPagerOnScroll(scrollOfflineReachBottomCallback);\r\n\r\n        $scope.$on(\"$destroy\", function () {\r\n            // deleting order is important!!! Should be inversed else next time scrollers will not work\r\n            $interval.cancel($scope.refresher);\r\n            $scope.refresher = null;\r\n        });\r\n\r\n\r\n        $scope.loadInProcess = false;\r\n        $scope.loadOnlineParkedSales = function (lockFast) {\r\n            $scope.active = 0;\r\n            $scope.loadInProcess = true;\r\n            if(lockFast) {\r\n                $.blockUI();\r\n            }\r\n\r\n            //$scope.onlineParkedSales = [];\r\n            //$scope.selectedPage = 1;\r\n\r\n            return saleService.loadOnlineParkedSales(1, $scope.itemsByPage, configService.lastOutletID)\r\n            .then(function (resp) {\r\n                $scope.onlineParkedSales = [];\r\n                $scope.selectedPage = 1;\r\n\r\n                var data = [];\r\n                if ($scope.sortFiled === '') {\r\n                    data = orderBy(resp.data.Orders, 'OrderDate', true);\r\n                } else {\r\n                    var reverse = $scope.currentDir === 'desc';\r\n                    var filed = getServerFiledName($scope.sortFiled);\r\n                    data = orderBy(resp.data.Orders, filed, reverse);\r\n                }\r\n\r\n                getPages(resp.data.Total);\r\n                $.each(data, function (idx, el) {\r\n                    var v = {\r\n                        SaleID: el.OrderID,\r\n                        lastModified: el.OrderDate,\r\n                        OrderNumber: el.OrderNumber,\r\n                        Notes: el.Notes,\r\n                        info: { userName: el.SalesRepresentative || el.UserName },\r\n                        TotalSum: el.TotalSum,\r\n                        //sale: angular.extend(JSON.parse(el.Data.RawSaleObject), { OrderNumber: el.Data.OrderNumber }),\r\n                        Customer: el.CustomerName\r\n                    };\r\n                    \r\n                    v.TotalSum = deformatCurrency(v.TotalSum);\r\n                    $scope.onlineParkedSales.push(v);\r\n                });\r\n\r\n                $scope.raiseViewChanged();\r\n            })\r\n            .finally(function() {\r\n                if(lockFast) {\r\n                    $.unblockUI();\r\n                }\r\n                $scope.loadInProcess = false;\r\n            });\r\n        }\r\n\r\n        const scrollOnlineReachBottomCallback = function () {\r\n            if (!$scope.isLoading && $scope.selectedPage < $scope.totalPages && $scope.isOnline /* only trigger for online tab */) {\r\n                $scope.selectedPage++;\r\n\r\n                $.blockUI();\r\n                $scope.isLoading = true;\r\n                saleService.loadOnlineParkedSales($scope.selectedPage, $scope.itemsByPage, configService.lastOutletID).then(function (resp) {\r\n                    var data = [];\r\n                    if ($scope.sortFiled === '') {\r\n                        data = orderBy(resp.data.Orders, 'OrderDate', true);\r\n                    } else {\r\n                        var reverse = $scope.currentDir === 'desc';\r\n                        var filed = getServerFiledName($scope.sortFiled);\r\n                        data = orderBy(resp.data.Orders, filed, reverse);\r\n                    }\r\n\r\n                    getPages(resp.data.Total);\r\n\r\n                    $.each(data, function (idx, el) {\r\n                        if (!$scope.onlineParkedSales.filter(function (fEl) {\r\n                            return fEl.SaleID === el.OrderID;\r\n                        }).length > 0) {\r\n\r\n                            var v = {\r\n                                SaleID: el.OrderID,\r\n                                lastModified: el.OrderDate,\r\n                                OrderNumber: el.OrderNumber,\r\n                                Notes: el.Notes,\r\n                                info: { userName: el.SalesRepresentative || el.UserName },\r\n                                TotalSum: el.TotalSum,\r\n                                //sale: angular.extend(JSON.parse(el.Data.RawSaleObject), { OrderNumber: el.Data.OrderNumber }),\r\n                                Customer: el.CustomerName\r\n                            };\r\n\r\n                            v.TotalSum = deformatCurrency(v.TotalSum);\r\n                            $scope.onlineParkedSales.push(v);\r\n                        }\r\n                    });\r\n                    $.unblockUI();\r\n                    $scope.isLoading = false;\r\n\r\n                    $scope.restartRefresher();\r\n                },\r\n                    function (err) {\r\n                        $.unblockUI();\r\n                        $scope.isLoading = false;\r\n                        errorService.showError(err);\r\n                    });\r\n            }\r\n        };\r\n\r\n        initPagerOnScroll(scrollOnlineReachBottomCallback);\r\n\r\n        $scope.continueSale = function (saleID) {\r\n            window.localStorage.setItem('continueSale', JSON.stringify({ saleID: saleID, isParked: true }));\r\n            $location.path('/sell');\r\n        };\r\n\r\n        $scope.raiseViewChanged = function () {\r\n            $rootScope.$broadcast('view.loaded');\r\n        };\r\n\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        }\r\n\r\n        $scope.selectPage = function (pageNumber) {\r\n            if (pageNumber > 0 && pageNumber <= $scope.totalPages) {\r\n                $scope.selectedPage = pageNumber;\r\n                if ($scope.active === 0) {\r\n                    $scope.loadOnlineParkedSales(true);\r\n                } else {\r\n                    $scope.loadOfflineParkedSales();\r\n                }\r\n            }\r\n        }\r\n\r\n\r\n        $scope.getFormatedDate = helperService.getFormatedDate;\r\n\r\n        $scope.currentDir = 'desc';\r\n        $scope.newDir = 'asc';\r\n        $scope.sortFiled = '';\r\n\r\n        $scope.currentOfflineDir = 'desc';\r\n        $scope.newOfflineDir = 'asc';\r\n        $scope.sortOfflineFiled = '';\r\n\r\n        $scope.sort = function (field, direction) {\r\n            $scope.selectedPage = 1;\r\n            $scope.currentDir = direction;\r\n            $scope.sortFiled = field;\r\n            $scope.sorting = { FieldName: field, Direction: direction };\r\n            $scope.loadOnlineParkedSales(true);\r\n\r\n            if ($scope.newDir === 'desc') {\r\n                $scope.newDir = 'asc';\r\n            } else {\r\n                $scope.newDir = 'desc';\r\n            }\r\n            \r\n            $scope.restartRefresher();\r\n        }\r\n\r\n        $scope.sortOffline = function (field, direction) {\r\n            $scope.currentOfflineDir = direction;\r\n            $scope.sortOfflineFiled = field;\r\n            var reverse = $scope.currentOfflineDir === 'desc';\r\n            $scope.offlineParkedSales = orderBy($scope.offlineParkedSales, field, reverse);\r\n\r\n            if ($scope.newOfflineDir === 'desc') {\r\n                $scope.newOfflineDir = 'asc';\r\n            } else {\r\n                $scope.newOfflineDir = 'desc';\r\n            }\r\n        }\r\n\r\n        function getServerFiledName(field) {\r\n            switch (field) {\r\n                case 'Date':\r\n                    return 'OrderDate';\r\n                case 'Receipt':\r\n                    return 'OrderNumberNumeric';\r\n                case 'Status':\r\n                    return 'Data.FinancialStatus';\r\n\r\n            }\r\n        };\r\n\r\n\r\n        $scope.parseFloat = function (val) {\r\n            return parseFloat(val).toFixed(2);\r\n        }\r\n\r\n        $scope.isOnline = configService.isOnline;\r\n        if ($scope.isOnline === false) {\r\n            $scope.active = 1;\r\n        } else\r\n            $scope.active = 0;\r\n\r\n        $scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n            $scope.isOnline = object;\r\n            if ($scope.isOnline === false) {\r\n                $(\"#selectOfflineTabButton\").trigger('click');\r\n            }\r\n        });\r\n    }]);","\r\nangular.module(\"mainApp\").controller('selectOutletRegistryController',\r\n    ['$rootScope', '$scope', 'configService', '$element', 'helperService', 'loginService',\r\n        'outletService', '$location', 'errorService', '$timeout', 'gettextCatalog',\r\n        '$q', 'dataChangeNotificationService', 'googleHelperService', \r\n        function ($rootScope, $scope, configService, $element, helperService, loginService,\r\n            outletService, $location, errorService, $timeout, gettextCatalog,\r\n            $q, dataChangeNotificationService, googleHelperService) {\r\n            $scope.config = configService;\r\n\r\n            $scope.reset = function () {\r\n                $scope.outlets = null;\r\n                $scope.outletID = null;\r\n                $scope.registryID = null;\r\n                $scope.activeMode = 0; // 0 - select outlet, 1 - select registry\r\n                $scope.selectedOutletItem = null;\r\n                $scope.selectedOutlet = null;\r\n                $scope.selectedRegister = null;\r\n            };\r\n\r\n            $scope.reset();\r\n\r\n            $scope.$on('selectOR.show', function (event, data) {\r\n                $scope.reset();\r\n\r\n                if (configService.isMobile) {\r\n                    console.log('hide keyboard');\r\n                    Keyboard.hide();\r\n                }\r\n                else {\r\n                    helperService.hideKeyboard();\r\n                }\r\n\r\n                $.blockUI();\r\n                outletService.getUserOulets(configService.loginUserID).then(function (resp) {\r\n\r\n                    $scope.outlets = resp.Outlets ? resp.Outlets : resp.data.Outlets;\r\n                    $scope.outletID = configService.lastOutletID;\r\n                    $scope.registryID = configService.lastRegistryID;\r\n\r\n                    // should test here if last outlet/registry were saved before and they are exists now.\r\n                    // if so bypass outlet/registry selection\r\n                    var reg = configService.bypassOutletRegistry ? $scope.canBypassDialog() : null;\r\n                    configService.bypassOutletRegistry = true;\r\n                    if (!!reg && !!reg.outlet) {\r\n                        if (!$scope.checkRegistersForOutlet(reg.outlet, true))\r\n                            reg = null;\r\n                    }\r\n                    $.unblockUI();\r\n\r\n                    $timeout(function () {\r\n                        initSelects();\r\n                        $timeout(function () { $('input, select').trigger('refresh'); });\r\n                    });\r\n\r\n                    if (!reg) {\r\n                        helperService.showDialog($element);\r\n                    }\r\n                    else {\r\n                        $scope.setChoice(reg.registry, reg.outlet);\r\n                    }\r\n                },\r\n                    function (err) {\r\n                        errorService.showError(err);\r\n                        $.unblockUI();\r\n                    });\r\n            });\r\n\r\n            $scope.canBypassDialog = function () {\r\n                try {\r\n                    var foundOutlet = $scope.outlets.filter(function (el) { return el.PosOutletID == $scope.outletID; });\r\n                    if (foundOutlet.length != 1) return null;\r\n\r\n                    var foundRegistry = foundOutlet[0].Registries.filter(function (el) { return el.PosRegistryID == $scope.registryID; });\r\n                    if (foundRegistry.length != 1) return null;\r\n\r\n                    return {\r\n                        outlet: foundOutlet[0],\r\n                        registry: foundRegistry[0]\r\n                    };\r\n                }\r\n                catch (ex) {\r\n                    return null;\r\n                }\r\n\r\n            };\r\n\r\n            $scope.setChoice = function (registry, outlet) {\r\n                var pos = !outlet ? this.$parent.item : outlet;\r\n                outletService.updateConfigPaymentProcessors(outlet);\r\n\r\n                configService.setLastOutlet(pos);\r\n                configService.setLastRegistry(registry.Code, registry.PosRegistryID, registry.paymentProcessorID, registry.ReceiptID,\r\n                    registry.RegistryPrefix, registry.RegistrySuffix, registry.QuickKeyID,\r\n                    registry.QuickKeyData, registry.TyroTerminalID, registry.TriPOSLaneID,\r\n                    registry.CatalogTilesSize, registry.CatalogTilesVisibility, registry.ShowProductAvailability);\r\n                configService.updateCardPaymentIDsFromOutlet(registry);\r\n\r\n                if (!outlet) {\r\n                    helperService.closeDialog($element);\r\n                }\r\n\r\n                cleanSale();\r\n                $.blockUI();\r\n                return loginService.loadAll(dataChangeNotificationService, true)\r\n                    .then(function (res) {\r\n                        return $scope.loadAllFinal(res);\r\n                    })\r\n                    .then(function () {\r\n                        $rootScope.$broadcast('header.setOutletInfo', {\r\n                            outletName: pos.OutletName,\r\n                            registryName: registry.Code\r\n                        });\r\n\r\n                        // this is dublicate  saleService.updateNextSequenceNumber();\r\n                    })\r\n                    .catch(function (err) {\r\n                        console.timeEnd('Load all');\r\n                        helperService.closeDialog('#requestCancelModalDlg');\r\n                            $rootScope.isCancelDialogVisible = false;\r\n                            $.unblockUI();\r\n                            \r\n                            googleHelperService.logout();\r\n                            \r\n                            errorService.showError(err, logoff);\r\n                        })\r\n                    .finally(function () {\r\n                        $.unblockUI();\r\n                    });\r\n\r\n            };\r\n\r\n            $scope.setOutlet = function () {\r\n                $scope.registrySelected($scope.selectedOutlet);\r\n            };\r\n\r\n            $scope.setRegister = function () {\r\n                $scope.setChoice2($scope.selectedRegister);\r\n                console.log($scope.activeMode);\r\n            };\r\n\r\n            $scope.checkRegistersForOutlet = function (outletObj, skipDialog) {\r\n                var noRegister = !outletObj || !outletObj.Registries || outletObj.Registries.length == 0;\r\n\r\n                if (noRegister && skipDialog !== true) {\r\n                    errorService.showError(gettextCatalog.getString(\"The outlet does not have active registers. Please create registers on the POS integration page of the Cin7 Core site or select another outlet.\"),\r\n                        function () {\r\n                            $scope.activeMode = 0;\r\n                        });\r\n                }\r\n\r\n                return !noRegister;\r\n            };\r\n\r\n            $scope.registrySelected = function (item) {\r\n                if (!$scope.checkRegistersForOutlet(item)) return false;\r\n\r\n                $scope.selectedOutletItem = item;\r\n                $scope.activeMode = 1;\r\n                $scope.outletID = item.PosOutletID;\r\n\r\n                $timeout(function () {\r\n                    initSelects();\r\n                    $timeout(function () { $('input, select').trigger('refresh'); });\r\n                });\r\n                return false;\r\n            };\r\n\r\n            var logoff = function () {\r\n                $timeout(function () {\r\n                    $.unblockUI();\r\n                    $rootScope.$broadcast('header.logoff');\r\n                    \r\n                    googleHelperService.logout();\r\n                    \r\n                });\r\n            };\r\n\r\n            $scope.setChoice2 = function (item) {\r\n\r\n                outletService.updateConfigPaymentProcessors($scope.selectedOutlet);\r\n\r\n                configService.setLastOutlet($scope.selectedOutletItem);\r\n                configService.setLastRegistry(item.Code, item.PosRegistryID, item.paymentProcessorID, item.ReceiptID,\r\n                    item.RegistryPrefix, item.RegistrySuffix, item.QuickKeyID,\r\n                    item.QuickKeyData, item.TyroTerminalID, item.TriPOSLaneID,\r\n                    item.CatalogTilesSize, item.CatalogTilesVisibility, item.ShowProductAvailability);\r\n                configService.updateCardPaymentIDsFromOutlet(item);\r\n\r\n                // saleService.updateNextSequenceNumber();\r\n\r\n                // $rootScope.$broadcast('sideBar.reloadProducts'); dublicate of loadAll\r\n                var SCOPE = $scope;\r\n\r\n                helperService.closeDialog($element, function () {\r\n                    $timeout(function () {\r\n                        cleanSale();\r\n                        $.blockUI();\r\n\r\n                        loginService.loadAll(dataChangeNotificationService, true)\r\n                            .then(function (res) {\r\n                                return $scope.loadAllFinal(res);\r\n                            })\r\n                            .then(function () {\r\n                                $rootScope.$broadcast('header.setOutletInfo', {\r\n                                    outletName: $scope.selectedOutletItem.OutletName,\r\n                                    registryName: item.Code\r\n                                });\r\n                            })\r\n                            .catch(function (err) {\r\n                                console.timeEnd('Load all');\r\n                                helperService.closeDialog('#requestCancelModalDlg');\r\n                                $rootScope.isCancelDialogVisible = false;\r\n                                $.unblockUI();\r\n                                \r\n                                googleHelperService.logout();\r\n                                \r\n                                errorService.showError(err, logoff);\r\n                            })\r\n                            .finally(function () {\r\n                                $.unblockUI();\r\n                            });\r\n                    }, 0);\r\n                });\r\n\r\n                return false;\r\n            };\r\n\r\n            $scope.loadAllFinal = function (res) {\r\n\r\n                var resp = (res && res.length > 0) ? res[res.length - 1] : [null];\r\n\r\n                console.timeEnd('Load all');\r\n\r\n                $rootScope.$broadcast('header.show', {\r\n                    showHeader: true\r\n                });\r\n\r\n                helperService.closeDialog('#requestCancelModalDlg');\r\n                $rootScope.isCancelDialogVisible = false;\r\n\r\n\r\n                if (!!configService.MatchedLoginsCount && configService.MatchedLoginsCount > 1) {\r\n                    $rootScope.$broadcast('snackbar.show', {\r\n                        message: gettextCatalog.getString('Your PIN code is not unique. Please, change your PIN code as soon as possible to prevent wrong logins.')\r\n                    });\r\n                }\r\n\r\n// mark first login as successfull and starting from now all next \r\n//logins will be secondary and can omit some data loading               \r\n                loginService.isFirstLogin = false; \r\n\r\n                localStorage.setItem('isAfterLogin', true);\r\n                if (resp[0]) {\r\n//                    $.unblockUI();\r\n                    $location.path('/sell');\r\n                } else {\r\n//                    $.unblockUI();\r\n                    $location.path('/opencloseregistry');\r\n                }\r\n\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res);\r\n                var p = deferred.promise;\r\n                    //.catch(function (err) {\r\n                    //    console.timeEnd('Load all');\r\n                    //    helperService.closeDialog('#requestCancelModalDlg');\r\n                    //    $rootScope.isCancelDialogVisible = false;\r\n                    //    $.unblockUI();\r\n                    //    errorService.showError(err, logoff);\r\n                    //});\r\n\r\n                return p;\r\n            };\r\n\r\n            $scope.setChoice3 = function (register, outlet) {\r\n                outletService.updateConfigPaymentProcessors(outlet);\r\n\r\n                configService.setLastOutlet(outlet);\r\n                configService.setLastRegistry(register.Code, register.PosRegistryID, register.paymentProcessorID, register.ReceiptID,\r\n                    register.RegistryPrefix, register.RegistrySuffix, register.QuickKeyID,\r\n                    register.QuickKeyData, register.TyroTerminalID, register.TriPOSLaneID,\r\n                    register.CatalogTilesSize, register.CatalogTilesVisibility, register.ShowProductAvailability);\r\n                configService.updateCardPaymentIDsFromOutlet(register);\r\n\r\n                $rootScope.$broadcast('sideBar.reloadProducts');\r\n\r\n                $rootScope.$broadcast('header.setOutletInfo', {\r\n                    outletName: outlet.OutletName,\r\n                    registryName: register.Code\r\n                });\r\n\r\n            };\r\n\r\n            $scope.backToLogin = function () {\r\n                helperService.closeDialog($element, function () {\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('login.show');\r\n                    }, 0);\r\n                });\r\n            };\r\n\r\n            function cleanSale() {\r\n                $timeout(function () {\r\n                    $rootScope.$broadcast('sell.clean');\r\n                });\r\n            }\r\n\r\n            $scope.$on('header.updateSettingsSecondStep', function (event, data) {\r\n\r\n                outletService.getUserOulets(configService.loginUserID).then(function (resp) {\r\n\r\n                    var outlets = resp.Outlets ? resp.Outlets : resp.data.Outlets;\r\n                    var outletID = configService.lastOutletID;\r\n                    var registryID = configService.lastRegistryID;\r\n                    var foundRegistry = false;\r\n\r\n                    $.each(outlets, function (oIdx, oEl) {\r\n                        if (oEl.PosOutletID === outletID) {\r\n                            $.each(oEl.Registries, function (rIdx, rEl) {\r\n                                if (rEl.PosRegistryID === registryID) {\r\n                                    $scope.setChoice3(rEl, oEl);\r\n                                    foundRegistry = true;\r\n                                    $rootScope.$broadcast('header.updateSettingsThirdStep');\r\n                                }\r\n                            });\r\n                        }\r\n                    });\r\n\r\n                    if (foundRegistry === false) {\r\n                        $.unblockUI();\r\n\r\n                        var title = gettextCatalog.getString('Error');\r\n                        var err = gettextCatalog.getString(\"It seems like this outlet/register combination is not available any more. Please select the outlet/register again.\");\r\n                        errorService.showError(err, function () {\r\n                            $timeout(function () {\r\n                                $rootScope.$broadcast('selectOR.show');\r\n                            });\r\n                        }, title);\r\n\r\n                    }\r\n\r\n                },\r\n                    function (err) {\r\n                        errorService.showError(err);\r\n                        $.unblockUI();\r\n                    });\r\n\r\n            });\r\n\r\n\r\n        }]);\r\n","import {CalculatorHelperService} from '../../TypePosScripts/CalculatorHelperService';\r\nimport Enumerable from 'linq';\r\n\r\n\r\nangular.module(\"mainApp\")\r\n    .config(['$uibModalProvider', function ($uibModalProvider) {\r\n    $uibModalProvider.options.animation = false;\r\n    }]).controller('selectTaxController',\r\n    ['$scope', '$rootScope', 'configService', 'errorService', 'helperService', 'productsService',\r\n        '$element', 'constants', '$timeout', 'gettextCatalog', 'keyPressDelayService', '$filter','$compile',\r\n        function ($scope, $rootScope, configService, errorService, helperService, productsService,\r\n            $element, constants, $timeout, gettextCatalog, keyPressDelayService, $filter, $compile) {\r\n\r\n            $scope.currentTab = 0;\r\n            $scope.taxWatches = null;\r\n            $scope.taxRulesMap = {};\r\n            $scope.checkoutItems = [];\r\n            $scope.groupedItems = [];\r\n            $scope.taxGroupedWatches = null;\r\n            $scope.zeroTaxID = configService.zeroTaxID;\r\n\r\n            $scope.$on('selectTax.show', function (event, data) {\r\n                var isNewSale = helperService.showNewCheckoutUI(data);\r\n\r\n                // prepare data\r\n                // make a copy to not change initial checkout\r\n                $scope.checkoutItems = angular.copy(data.CheckoutItems.filter(function (el) { return el.CanEdit; }));\r\n\r\n                $scope.createTaxRules(data);\r\n\r\n                $scope.createProductTaxes(isNewSale);\r\n\r\n                // get grouped array\r\n                $scope.createGroupedTaxes();\r\n\r\n                initSelects();\r\n\r\n                helperService.showDialog('#taxModelDlg', function () {\r\n                    initSelects(function () {\r\n                        var prn = $(this).parent().parent();\r\n                        var inp = prn.find('div.jq-selectbox__dropdown');\r\n                        inp[0].scrollIntoView(true);\r\n                    },function (el) {\r\n                            var prn = $(el).parent().parent();\r\n                            var inp = prn.find('div.jq-selectbox__select-text');\r\n                            if (inp.length > 0) {\r\n                                var txt = '<div class=\"rightInputSum\"><div>{{item.Tax | currency}}</div></div>';\r\n                                var SCOPE = angular.element(inp[0]).scope();\r\n                                var s2 = $compile(txt)(SCOPE);\r\n                                inp.after(s2);\r\n                            }\r\n                           // $rootScope.$broadcast('popup.shown');\r\n                        }, function(el) {\r\n                            // when close dropdown - set grid tile fully visible\r\n                            var e =$(this).parent().parent().parent().parent().parent();\r\n                            if(e.length)\r\n                                e[0].scrollIntoView(true);\r\n                        }\r\n                    );\r\n\r\n                    $timeout(function () {\r\n                        $('input, select').trigger('refresh');\r\n                    });\r\n                });\r\n            });\r\n\r\n            $scope.createProductTaxes = function (isNewSale) {\r\n\r\n                if ($scope.taxWatches)\r\n                    $scope.taxWatches();\r\n                $scope.taxWatches = null;\r\n\r\n                // show only editalbe products\r\n                var watchList = [];\r\n\r\n                $.each($scope.checkoutItems, function (i, el) {\r\n                    if (isNewSale) {\r\n                        el.ShowPrice = el.FinalPrice;\r\n                        el.Tax = CalculatorHelperService.calculateTax2(el, configService.taxInclucive === \"True\");\r\n                    } else {\r\n                        if (!el.Tax)\r\n                            el.Tax = 0;\r\n\r\n                        el.ShowPrice = helperService.DEARRound(el.itemDiscount !== 0 ? el.BasePrice - el.itemDiscount : el.Price, 2);\r\n                        el.Tax = $scope.calcTax(el);\r\n                    }\r\n\r\n                    watchList.push('checkoutItems[' + i + '].TaxRuleID');\r\n                });\r\n\r\n                // watchers is required to synchronize changed tax rule value with currently shown in combo input control\r\n                $scope.taxWatches = $scope.$watchGroup(watchList, function (newVal, oldVal) {\r\n\r\n                    for (var i = 0; i < newVal.length; i++) {\r\n                        if (newVal[i] !== oldVal[i]) {\r\n                            // replace Tax\r\n                            var taxObject = $scope.taxRulesMap[newVal[i]];\r\n                            var el = $scope.checkoutItems[i];\r\n                            el.Taxes = taxObject;\r\n                            el.Tax = $scope.calcTax(el);\r\n                        }\r\n                    }\r\n                });\r\n            };\r\n\r\n            $scope.calcTax = function (el) {\r\n                if (!el || !el.Taxes) return 0;\r\n                var isInclusiveTax = configService.taxInclucive === \"True\";\r\n                return helperService.DEARRound(el.ShowPrice *\r\n                    (isInclusiveTax ? el.Taxes.effectivePercentInclusive : el.Taxes.effectivePercentExclusive) / 100, 2);\r\n            };\r\n\r\n            $scope.createTaxRules = function (cursale) {\r\n                var isNewSale = helperService.showNewCheckoutUI(cursale);\r\n                $scope.taxRulesMap = {};\r\n                $scope.taxRules = [];\r\n                var tx = angular.copy(productsService.taxRules);\r\n                var customer = cursale.customer;\r\n\r\n                // add default tax rule\r\n                // var t = JSON.parse(configService.tenantTaxRule);\r\n\r\n                // tx.push({\r\n                //     Description: gettextCatalog.getString('Default Tax'),\r\n                //     EffectivePercentExclusive: t.effectivePercentExclusive,\r\n                //     EffectivePercentInclusive: t.effectivePercentInclusive,\r\n                //     RuleID: t.ruleID\r\n                // });\r\n\r\n                if (customer && customer.TaxRuleID) {\r\n                    tx.push({\r\n                        Description: customer.TaxRule,\r\n                        EffectivePercentExclusive: customer.EffectivePercentExclusive,\r\n                        EffectivePercentInclusive: customer.EffectivePercentInclusive,\r\n                        RuleID: customer.TaxRuleID\r\n                    });\r\n                }\r\n\r\n                $.each(tx, function (i, el) {\r\n                    var ec = {\r\n                        ruleID: el.RuleID,\r\n                        description: el.Description,\r\n                        description2: el.Description + \" (\" +\r\n                            helperService.DEARRound(el.EffectivePercentExclusive, 2) +\r\n                            \"%)\",\r\n                        effectivePercentExclusive: el.EffectivePercentExclusive,\r\n                        effectivePercentInclusive: el.EffectivePercentInclusive\r\n                    };\r\n\r\n                    $scope.taxRules.push(ec);\r\n                    $scope.taxRulesMap[el.RuleID] = ec;\r\n                });\r\n            };\r\n\r\n            $scope.createGroupedTaxes = function () {\r\n                if ($scope.taxGroupedWatches)\r\n                    $scope.taxGroupedWatches();\r\n                $scope.taxGroupedWatches = null;\r\n\r\n                // get grouped array\r\n                $scope.groupedItems =\r\n                    Enumerable.from($scope.checkoutItems)\r\n                        .select(function (x) {\r\n                            var o = $scope.taxRulesMap[x.TaxRuleID];\r\n                            if(!o) {\r\n                                // unknown tax id. set default\r\n                                var t = JSON.parse(configService.tenantTaxRule);\r\n                                if(t) {\r\n                                    o = $scope.taxRulesMap[t.ruleID];\r\n                                }\r\n                            }\r\n                            return {\r\n                                InitialTaxRuleID: o.ruleID,\r\n                                TaxRuleID: o.ruleID,\r\n                                Description2: o.description2\r\n                            };\r\n                        })\r\n                        .distinct(function (x) { return x.TaxRuleID; })\r\n                        .orderBy(function (x) { return x.Description2; })\r\n                        .toArray();\r\n            };\r\n\r\n            // before switching to product list, pass changes in grouped taxes to checkout\r\n            $scope.synchronizeGroupToProducts = function () {\r\n                $scope.currentTab = 0;\r\n                var changedTaxesMap = {};\r\n\r\n                $.each($scope.groupedItems, function (i, t) {\r\n                    if (t.InitialTaxRuleID !== t.TaxRuleID) {\r\n                        changedTaxesMap[t.InitialTaxRuleID] = t;\r\n                        t.InitialTaxRuleID = t.TaxRuleID;\r\n                    }\r\n                });\r\n\r\n                $.each($scope.checkoutItems, function (i, c) {\r\n                    var newTax = changedTaxesMap[c.TaxRuleID];\r\n                    if (newTax) {\r\n                        c.TaxRuleID = newTax.TaxRuleID;\r\n                        c.Taxes = newTax;\r\n                    }\r\n                });\r\n\r\n                $timeout(function () {\r\n                    $('input, select').trigger('refresh');\r\n                });\r\n\r\n                $scope.refreshSize('.taxScrollWrapper2');\r\n            };\r\n\r\n            $scope.synchronizeProductsToGroup = function () {\r\n                $scope.currentTab = 1;\r\n                $scope.createGroupedTaxes();\r\n                var SCOPE = $scope;\r\n                $timeout(function () {\r\n                    initSelects();\r\n\r\n                    $timeout(function () {\r\n                        $('input, select').trigger('refresh');\r\n                    });\r\n\r\n                    SCOPE.refreshSize('.taxScrollWrapper2');\r\n                });\r\n            };\r\n\r\n            $scope.applyChanges = function () {\r\n                if ($scope.currentTab === 1){\r\n                    $scope.synchronizeGroupToProducts();\r\n                }\r\n\r\n                var checkMap = {};\r\n                $.each($scope.checkoutItems, function (i, c) {\r\n                    var t = $scope.taxRulesMap[c.TaxRuleID];\r\n                    checkMap[c.ID] = {\r\n                        effectivePercentExclusive: t.effectivePercentExclusive,\r\n                        effectivePercentInclusive: t.effectivePercentInclusive,\r\n                        ruleID: t.ruleID\r\n                    };\r\n                });\r\n\r\n                $rootScope.$broadcast('selectTax.changed', checkMap);\r\n                helperService.closeDialog('#taxModelDlg');\r\n            };\r\n\r\n            $scope.refreshSize = function (sel) {\r\n                $(sel).trigger('on.resize');\r\n            };\r\n\r\n            $scope.resetTax = function (item, zeroTaxID) {\r\n                item.TaxRuleID = zeroTaxID;\r\n                $timeout(function () {\r\n                    $('input, select').trigger('refresh');\r\n                });\r\n            };\r\n        }\r\n    ]);","import {CalculatorHelperService} from '../../TypePosScripts/CalculatorHelperService';\r\nimport { OptionsTreeItem } from './OptionsTreeItem';\r\nimport { ProductType } from '../../TypePosScripts/Interfaces';\r\nimport { SaleStatusType, StartCalcLevel } from '../../TypePosScripts/Enums';\r\nimport { convertFromOld, convertToAPI } from '../../TypePosScripts/ConverterService';\r\n\r\nangular.module(\"mainApp\")\r\n    .controller('sellController',\r\n        ['$rootScope', '$scope', '$window', 'constants', 'productsService', 'errorService', 'loginService',\r\n            '$filter', 'configService', 'helperService', '$timeout', 'uuid2', 'saleService', 'receiptService',\r\n            '$uibModal', '$location', 'customerService', 'emailService', 'registryService', 'printService',\r\n            'gettextCatalog', '$locale', '$compile', '$q', 'cardPayService',\r\n            'liveSearchService', 'secondTerminalService', 'reportService', 'webOnlyProvider', 'fontMeasureService',\r\n            'barcodeService', 'filterService', 'loyaltyService', 'soundService', 'loyaltyLionProvider', 'linklyPaymentReaderProvider', 'secondTerminalServiceWeb', \r\n            'googleHelperService', 'surchargeService', 'deviceInfo', 'orderStatusService',\r\n            function ($rootScope, $scope, $window, constants, productsService, errorService, loginService,\r\n                $filter, configService, helperService, $timeout, uuid2, saleService, receiptService,\r\n                $uibModal, $location, customerService, emailService, registryService, printService,\r\n                gettextCatalog, $locale, $compile, $q, cardPayService,\r\n                liveSearchService, secondTerminalService, reportService, webOnlyProvider, fontMeasureService,\r\n                barcodeService, filterService, loyaltyService, soundService, loyaltyLionProvider, linklyPaymentReaderProvider, secondTerminalServiceWeb, \r\n                googleHelperService, surchargeService, deviceInfo, orderStatusService) {\r\n\r\n                const watchers = [];\r\n                console.time('enter sell controller');\r\n\r\n                ////Apply special currency rules\r\n                helperService.setSpecialCurrencySymbols();\r\n                $scope.canDelivery = function() {\r\n                    return configService.canSeeAllScheduledDeliveries === true && configService.isOnline === true;\r\n                }\r\n\r\n                setTimeout(function () {\r\n                    /** hack for total info block */\r\n                    $rootScope.$broadcast('sideBar.toggle');\r\n                    $rootScope.$broadcast('sideBar.hideDetails');\r\n                }, 1000);\r\n\r\n                $scope.paymentDisplayOrder = configService.paymentDisplayOrder;\r\n\r\n                $scope.creditCardError = {\r\n                    addFailedCreditCardPayment: null,\r\n                    errorText: null\r\n                };\r\n\r\n                $scope.showSearchResult = false;\r\n                $scope.$watch('showSearchResult',\r\n                    function (newValue, oldValue) {\r\n                        $timeout(function () {\r\n                            fontMeasureService.updateFontSize('catalog-tile', 'productText', 12, 0, true);\r\n                            $rootScope.$broadcast('image.src.update');\r\n                        });\r\n                    }\r\n                );\r\n\r\n                if (!loginService.isLoggedIn()) {\r\n                    helperService.goToHomePage();\r\n                    return;\r\n                    //$rootScope.$broadcast('login.show'); // show login page on application start\r\n                } else {\r\n                    $timeout(function () {\r\n                        $scope.searchType = 'quickKeySearch';\r\n                        $scope.search();\r\n                    });\r\n                }\r\n\r\n                watchers.push($rootScope.$on('$locationChangeStart', function (event, next, prev) {\r\n                    secondTerminalService.update($scope, 'off');\r\n                }));\r\n\r\n                $scope.formatBalance = helperService.formatBalance;\r\n                $scope.isLoyaltyEnabled = configService.enableLoyalty === true;\r\n\r\n                $scope.catalogTileRows = configService.getCatalogPageRows();\r\n                $scope.catalogTileCols = configService.getCatalogPageCols();\r\n\r\n                $scope.customizedUI = configService.customizedSecondScreenUI;\r\n                $scope.logoUrl = configService.secondScreenLogoUrl;\r\n                $scope.backgroundColor = configService.secondScreenBackground;\r\n\r\n                // $scope.$on(\"popover.dialog.hide\", function () {\r\n                //     $scope.currentProductFamily = null;\r\n                // });\r\n\r\n                watchers.push($scope.$on(\"modal.dialog.hide\", function () {\r\n                    $scope.currentProductFamily = null;\r\n                }));\r\n\r\n                \r\n                $scope.switchNoReceiptExchangeMode = function(mode) {\r\n                    $scope.noReceiptExchangeMode = mode;\r\n                }\r\n\r\n                $scope.fixStocktakeFlags = function () {\r\n                    var promises = [];\r\n\r\n                    if ($scope.searchItems) {\r\n                        $.each($scope.searchItems, function (_, el) {\r\n                            promises.push(productsService.getProductByID(el.ProductID));\r\n                        });\r\n                    }\r\n\r\n                    if (promises.length > 0) {\r\n                        Promise.all(promises).then(function (res) {\r\n                            var map = {};\r\n                            var map2 = {};\r\n                            $.each(res, function (_, p) {\r\n                                if (p && p.data && p.data.length > 0) {\r\n                                    map[p.data[0].ProductID] = p.data[0].StocktakeLocked;\r\n                                    map2[p.data[0].ProductID] = p.data[0];\r\n                                }\r\n                            });\r\n\r\n                            if ($scope.searchItems) {\r\n                                $.each($scope.searchItems, function (_, el) {\r\n                                    if (map[el.ProductID] !== undefined)\r\n                                        el.StocktakeLocked = map[el.ProductID];\r\n\r\n                                    if (map2[el.ProductID] !== undefined) {\r\n                                        var sp = map2[el.ProductID];\r\n                                        el.BarCode = sp.BarCode;\r\n                                        el.Discounts = sp.Discounts;\r\n                                        el.Taxes = sp.Taxes;\r\n                                        el.Name = sp.Name;\r\n                                        el.Sku = sp.Sku;\r\n                                        el.CostingMethod = sp.CostingMethod;\r\n                                        el.Option1 = sp.Option1;\r\n                                        el.Option1Name = sp.Option1Name;\r\n                                        el.Option2 = sp.Option2;\r\n                                        el.Option2Name = sp.Option2Name;\r\n                                        el.Option3 = sp.Option3;\r\n                                        el.Option3Name = sp.Option3Name;\r\n                                        el.Price = sp.Price;\r\n                                        el.ImageID = sp.ImageID;\r\n                                        el.isFamily = sp.isFamily;\r\n                                        el.LoyaltyEarning = sp.LoyaltyEarning;\r\n                                    }\r\n                                });\r\n                            }\r\n                        });\r\n                    }\r\n                };\r\n\r\n                // update StocktakeLocked flag\r\n                watchers.push($scope.$on('products.reloaded', function () {\r\n                    if (!configService.isSite || window.isSupported)\r\n                        $scope.fixStocktakeFlags();\r\n                }));\r\n\r\n                $scope.hasQuickKey = !!configService.quickKeyTemplateID;\r\n\r\n                watchers.push($scope.$on('header.setOutletInfo', function (event, data) {\r\n                    $scope.hasQuickKey = !!configService.quickKeyTemplateID;\r\n\r\n                    $timeout(function () {\r\n                        $scope.pageSize = configService.getCatalogPageSize();\r\n                        $scope.pageRows = configService.getCatalogPageRows();\r\n                        $scope.catalogTileRows = $scope.pageRows;\r\n                        $scope.pageCols = configService.getCatalogPageCols();\r\n                        $scope.catalogTileCols = $scope.pageCols;\r\n                        $scope.tilesVisibility = configService.getCatalogTilesVisibility();\r\n                        $scope.showProductAvailability = configService.getShowProductAvailability();\r\n                        $scope.calculateActualCatalogRows();\r\n                    });\r\n\r\n                    $timeout(function () {\r\n                        $scope.searchType = 'quickKeySearch';\r\n                        $scope.search();\r\n                    });\r\n\r\n                    $scope.setRegistrySales();\r\n                }));\r\n\r\n\r\n                //$rootScope.$broadcast('sideBar.hideDetails', { sectionName: constants.constSellSectionName }); // to hide sidebar details\r\n                $rootScope.$broadcast('header.setCurrentView', {\r\n                    viewName: constants.constSellViewName\r\n                }); // to hide sidebar details\r\n\r\n                watchers.push($scope.$on('addCustomer.selected', function (event, data) {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    $scope.currentSale.customer = data.customer;\r\n                    $scope.currentSale.SelectedContact = null;\r\n\r\n                    let searchCustomerText = $('#searchCustomerText').val();\r\n\r\n                    if (data.customer && data.customer.Contacts && data.customer.Contacts.length > 0) {\r\n                        searchCustomerText = !!searchCustomerText ? searchCustomerText.toLowerCase().trim() : '';\r\n                        const email = !!data.email ? data.email : '';\r\n\r\n                        const foundContact = data.customer.Contacts.find(temp => (!!temp.Email && temp.Email.toLowerCase() === email) ||\r\n                            (!!temp.Email && temp.Email.toLowerCase() === searchCustomerText) ||\r\n                            (!!temp.Phone && temp.Phone.toLowerCase() === searchCustomerText) ||\r\n                            (!!temp.MobilePhone && temp.MobilePhone.toLowerCase() === searchCustomerText));\r\n\r\n                        if (foundContact)\r\n                            $scope.currentSale.SelectedContact = foundContact;\r\n                        else {\r\n                            const defaultContact = data.customer.Contacts.find(temp => (!!temp.Email && temp.IncludeInEmail));\r\n                            if (defaultContact)\r\n                                $scope.currentSale.SelectedContact = defaultContact;\r\n                            else\r\n                                $scope.currentSale.SelectedContact = data.customer.Contacts[0];\r\n                        }\r\n                    }\r\n\r\n                    $scope.addCustomerHandler(data.customer)\r\n                        .then(function () {\r\n                            if (data.action != 'search')\r\n                                customerService.loadCustomersAll(true);\r\n\r\n                            return helperService.resolvePromise(true);\r\n                        })\r\n                        .catch(function (err) {\r\n                            errorService.showError(err);\r\n                        });\r\n                }));\r\n\r\n                function clearLLDiscount() {\r\n                    $scope.LLCopiedCode = null;\r\n                    $scope.LLCurrentValue = null;\r\n                    $scope.LLDiscountType = null;\r\n                    $scope.LLDiscountTitle = null;\r\n                }\r\n\r\n                function clearSaleLLDiscount() {\r\n                    if ($scope.currentSale.customer) {\r\n                        $scope.currentSale.customer.LLDiscountCode = null;\r\n                    }\r\n                    clearLLDiscount();\r\n                }\r\n\r\n                function needClearLLDiscount(prm) {\r\n                    if (prm === 'clean') {\r\n                        return true;\r\n                    }\r\n                    var discount = $scope.currentSale.Discount;\r\n                    if (typeof discount === 'string') {\r\n                        discount = helperService.DEARRound(Number(discount), 2);\r\n                    }\r\n                    return discount === 0;\r\n                }\r\n\r\n                function initLoyaltyCustomer(customer) {\r\n                    return loyaltyService.initCustomer(customer).then(function (res) {\r\n                        // Buffered auth is not confirmed yet — don't clear the unavailable latch\r\n                        if (res && !res.buffered) {\r\n                            $scope.loyaltyUnavailable = false;\r\n                        }\r\n                        $scope.setDisableLoyaltyFlag();\r\n                    }).catch(function (err) {\r\n                        if (err && err.silent) {\r\n                            return; // not an LL customer / not enrolled — nothing to report\r\n                        }\r\n                        var fallback = gettextCatalog.getString('Unable to load loyalty information for this customer.');\r\n                        var msg = (err && (err.msg || err.message)) || err || fallback;\r\n                        if (typeof msg !== 'string') {\r\n                            msg = fallback;\r\n                        }\r\n                        // Soft: SDK/auth/pre-flight — snackbar + hide loyalty UI\r\n                        // customer.Warning keeps the warning dialog (warning: true, handled in loyaltyService)\r\n                        if (err && err.soft) {\r\n                            $rootScope.$broadcast('snackbar.show', { message: msg, type: 'error' });\r\n                            $scope.loyaltyUnavailable = true;\r\n                            $scope.setDisableLoyaltyFlag();\r\n                            if (loyaltyService.provider && typeof loyaltyService.provider.hideWidget === 'function') {\r\n                                loyaltyService.provider.hideWidget();\r\n                            }\r\n                        } else {\r\n                            errorService.showError(msg);\r\n                        }\r\n                    });\r\n                }\r\n\r\n                $scope.addCustomerHandler = function (customer) {\r\n                    // var pr = helperService.resolvePromise(true);\r\n                    var pr = loyaltyService.clearCustomer();\r\n\r\n                    return pr.then(function () {\r\n                        var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                        clearLLDiscount();\r\n                        $scope.setDisableLoyaltyFlag();\r\n\r\n                        $scope.refundNeedCustomer = false;\r\n                        $scope.raiseViewChanged();\r\n                        var sale = $scope.currentSale;\r\n\r\n                        var pr = helperService.resolvePromise(true);\r\n\r\n                        if (!isNewSale) {\r\n                            pr = pr.then(function () {\r\n                                $scope.currentSale.CustomerLoyaltyPoints = configService.enableLoyalty && $scope.currentSale.customer.LoyaltyPoints ?\r\n                                    $scope.currentSale.customer.LoyaltyPoints : 0;\r\n\r\n                                saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n                                return helperService.resolvePromise(true);\r\n                            });\r\n                        }\r\n\r\n                        if (!customer.LLEmail && configService.isOnline && loyaltyService.loyaltyEnabled) {\r\n\r\n                            pr = pr.then(function () {\r\n                                return customerService.loadCustomers(\"\", 1, 1, {\r\n                                    CustomerID: customer.ID\r\n                                });\r\n                            }).then(function (resp) {\r\n                                if (resp.Customers[0]) {\r\n                                    customer = resp.Customers[0];\r\n                                    sale.customer.LLCustomerID = customer.LLCustomerID;\r\n                                    sale.customer.LLEmail = customer.LLEmail;\r\n                                    sale.customer.LLExternalType = customer.LLExternalType;\r\n                                    sale.customer.LLMerchantID = customer.LLMerchantID;\r\n                                    sale.customer.LLServerToken = customer.LLServerToken;\r\n                                    sale.customer.LLTokenDate = customer.LLTokenDate;\r\n                                }\r\n                            });\r\n                        }\r\n\r\n                        pr = pr.then(function () {\r\n                            if (configService.loyaltyLionToken && configService.isOnline && (customer.Warning || !customer.LLEmail)) {\r\n                                customer.Warning = !!customer.Warning ? customer.Warning : gettextCatalog.getString('Customer email is empty. Can not get customer information from LoyaltyLion.');\r\n                                return $scope.showCustomerEmailWarningDialog(customer);\r\n                            }\r\n                            else\r\n                                return initLoyaltyCustomer(customer);\r\n                        }).then(function () {\r\n                            if ($scope.mode == 'summary') {\r\n                                $scope.initSummaryValues();\r\n                            }\r\n\r\n                            if ($scope.mode !== 'summary' || $scope.canChangeCustomer) {\r\n                                if (!isNewSale)\r\n                                    $scope.updateCheckoutProductPrice($scope.currentSale);\r\n                                else\r\n                                    CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope, StartCalcLevel.Setup, true);\r\n                            }\r\n\r\n                            updateReceipt();\r\n                            $scope.updateSizesInCheckout();\r\n\r\n                            return helperService.resolvePromise(true);\r\n                        });\r\n\r\n                        return pr;\r\n                    });\r\n                };\r\n\r\n                watchers.push($scope.$on('addSalesRepresentative.selected', function (event, data) {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if (!isNewSale)\r\n                        $scope.currentSale.salesRepresentative = data.salesRepresentative;\r\n                    else\r\n                        $scope.currentSale.SalesRepresentative = data.salesRepresentative;\r\n\r\n                    $scope.raiseViewChanged();\r\n\r\n                    updateReceipt();\r\n                    helperService.storeCurrentSale($scope.currentSale, $scope);\r\n                }));\r\n\r\n                watchers.push($scope.$on('addSalesShippingAddress.selected', function(event, data) {\r\n                    $scope.currentSale.CustomerShippingAddressLine1 = data.selectedSalesShippingAddress.Line1;\r\n                    $scope.currentSale.CustomerShippingAddressLine2 = data.selectedSalesShippingAddress.Line2;\r\n                    $scope.currentSale.CustomerShippingCity = data.selectedSalesShippingAddress.City;\r\n                    $scope.currentSale.CustomerShippingCountry = data.selectedSalesShippingAddress.Country;\r\n                    $scope.currentSale.CustomerShippingProvince = data.selectedSalesShippingAddress.State;\r\n                    $scope.currentSale.CustomerShippingZip = data.selectedSalesShippingAddress.Postcode;\r\n                }));\r\n\r\n                watchers.push($scope.$on('addSurcharge.selected', function (event, data) {\r\n\r\n                    if (!$scope.currentSale.Surcharges) {\r\n                        $scope.currentSale.Surcharges = [];\r\n                    }\r\n                    if (data.action === 'selected') {\r\n                        var surcharge = null;\r\n                        var paymentProcessorID = null;\r\n                        var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                        if (!!data) {\r\n                            if (!!data.surcharge) {\r\n                                surcharge = angular.copy(data.surcharge);\r\n                                if (!isNewSale)\r\n                                    $scope.currentSale.Surcharges.push(surcharge);\r\n                            }\r\n                            if (data.isCustom === true)\r\n                                paymentProcessorID = data.paymentProcessorID;\r\n                        }\r\n\r\n                        if (!isNewSale) {\r\n                            $scope.currentSale.Total = $scope.totalSum($scope.currentSale);\r\n                            $scope.currentSale.TotalSumWithTax = totalSumWithTax($scope.currentSale.CheckoutItems);\r\n                        }\r\n\r\n                        // check for custom payment with surcharge\r\n                        if (paymentProcessorID)\r\n                            $scope.customPayWithSurcharge(paymentProcessorID, surcharge);\r\n                        else\r\n                            $scope.creditCardPayWithSurcharge(surcharge);\r\n                    }\r\n\r\n                    // helperService.storeCurrentSale($scope.currentSale, $scope);\r\n                }));\r\n\r\n                $scope.setFocus = helperService.setFocus;\r\n\r\n                //$scope.$watchCollection('currentSale.Payments', function (newCol, oldCol, scope) {\r\n                //    if (newCol.length != oldCol.length) {\r\n                //        if (newCol.length > 0 && oldCol.length == 0)\r\n                //            $rootScope.$broadcast('header.enableMenu', false);\r\n                //        else if (oldCol.length > 0 && newCol.length == 0)\r\n                //            $rootScope.$broadcast('header.enableMenu', true);\r\n                //    }\r\n                //});\r\n\r\n                var onLoyaltyLionWidgetClick = function () {\r\n                    helperService.showDialog($('#loyaltyLionModal'));\r\n                };\r\n                \r\n                $(document).on('click.loyaltyLionWidget', '#dear-loyalty-lion-widget .lion-loyalty-widget .lion-loyalty-widget__body', onLoyaltyLionWidgetClick);\r\n\r\n                $scope.saleNotesShowMoreClick = function () {\r\n                    let el = $('.sale-notes .full-sale-note-text');\r\n\r\n                    el.slideToggle(500, function(){\r\n                        $('.sale-notes .more span').text(el.is(':hidden') ? 'more' : 'less');\r\n                    });\r\n                }\r\n\r\n                $(\"#saleOptionsMenu\").on('show.bs.collapse', function () {\r\n                    $('#saleOptionsMenuSubLayer').show();\r\n                });\r\n\r\n                $(\"#saleOptionsMenu\").on('hidden.bs.collapse', function () {\r\n                    $('#saleOptionsMenuSubLayer').hide();\r\n                });\r\n\r\n                $scope.cashMode = false;\r\n                $scope.creditCardMode = false;\r\n                $scope.subType = null;\r\n                $scope.floatPrecision = configService.fractionalLimit;\r\n                $scope.isSearchVisible = true;\r\n                $scope.searchType = 'quickKeySearch';\r\n                $scope.searchText = null;\r\n                $scope.searchTextLive = '';\r\n                $scope.searchItems = null;\r\n                $scope.searchTotal = null;\r\n                $scope.totalPages = 1;\r\n                $scope.currentPage = 0;\r\n                $scope.pageSize = configService.getCatalogPageSize();\r\n                $scope.pageRows = configService.getCatalogPageRows();\r\n                $scope.pageCols = configService.getCatalogPageCols();\r\n                $scope.tilesVisibility = configService.getCatalogTilesVisibility();\r\n                $scope.showProductAvailability = configService.getShowProductAvailability();\r\n                $scope.page = 1;\r\n                $scope.isInFamily = false;\r\n                $scope.posTaxInclucive = configService.taxInclucive === \"True\";\r\n                $scope.cashRegistryPaymentProcessorID = null;\r\n                $scope.storeCreditsPaymentProcessorID = null;\r\n                $scope.creditCardPaymentProcessorID = null;\r\n                $scope.laybyPaymentProcessorID = null;\r\n                $scope.giftCardPaymentProcessorID = null;\r\n                $scope.loyaltyPaymentProcessorID = null;\r\n                $scope.receiptTemplate = '';\r\n                $scope.quoteTemplateHolder = {\r\n                    QuoteTemplate: '',\r\n                    QuoteEmailTemplate: '',\r\n                    QuoteEmail: ''\r\n                };\r\n\r\n                $scope.showLoyalty = configService.enableLoyalty;\r\n                $scope.disableLoyalty = true;\r\n                $scope.loyaltyUnavailable = false;\r\n                $scope.canChangeCustomer = true;\r\n                $scope.isFastRefund = false;\r\n                $scope.canChangeSalesRepresentative = true;\r\n                $scope.canParkSale = true;\r\n                $scope.canDiscardSale = true;\r\n                $scope.canAddDiscount = configService.canGiveDiscount;\r\n                $scope.canChangePrice = configService.canChangePrice;\r\n                $scope.canInsertCheckoutItems = true;\r\n                $scope.operationName = 'Pay';\r\n                $scope.refundNeedCustomer = false;\r\n                $scope.noReceiptExchangeMode = 'Return';\r\n                $scope.paymentValidation = {\r\n                    cashAmount: 0,\r\n                    creditCardAmount: 0,\r\n                    giftCardAmount: 0,\r\n                    loyaltyPointsAmount: 0,\r\n                    storeCreditAmount: 0\r\n                };\r\n                $scope.scanedSerialNumber = {\r\n                    value: \"\"\r\n                };\r\n                $scope.paymentValidation.cardPayments = {};\r\n                $scope.isValidAmount = true;\r\n                $scope.checkOutItem = {\r\n                    Count: 0\r\n                };\r\n                $scope.minSymbolsToStartSearch = configService.minSymbolsToStartSearch;\r\n                $scope.minSymbolsMessage = gettextCatalog.getString(\"Only the first {{cnt}} products are shown.\", {\r\n                    cnt: 7\r\n                });\r\n                $scope.minSymbolsToStartSearchMessage = gettextCatalog.getString(\"Enter no less than {{cnt}} symbols to start searching.\", {\r\n                    cnt: $scope.minSymbolsToStartSearch\r\n                });\r\n                $scope.couponCode = null;\r\n\r\n                // $scope.surchargeCache = [];\r\n                // $scope.surchargeCacheLastLoad = null;\r\n\r\n                $scope.oldAvailableCouponsValue = false;\r\n                $scope.outletName = configService.lastOutlet;\r\n                $scope.paymentActionInProgress = false;\r\n                $scope.pendingPaymentRegistry = {};\r\n\r\n                $scope.abs = function (x) {\r\n                    if (x)\r\n                        return helperService.DEARRound(Math.abs(x), 2);\r\n                    return 0;\r\n                };\r\n\r\n                //$scope.$watch('searchText',\r\n                //  function (newValue, oldValue) {\r\n                //      if (newValue !== oldValue && !!newValue &&\r\n                //          newValue.length >= configService.minSymbolsToStartSearch) {\r\n                //            keyPressDelayService.forceDelayOperation(newValue, $scope.search);\r\n                //      }\r\n                //  }\r\n                // );\r\n                $scope.liveSearchIsOpen = false;\r\n\r\n                //$scope.$watchCollection('searchItems', function (newValue, oldValue) {\r\n                //    if (!!newValue && newValue.length > 0) {\r\n                //        $rootScope.$broadcast('image.src.update');\r\n                //    }\r\n                //})\r\n\r\n                $scope.$watch('liveSearchIsOpen',\r\n                    function (newValue, oldValue) {\r\n                        $scope.placeMaxVisibleLiveSearchCountMsg();\r\n                        if (newValue) {\r\n                            $timeout(function () {\r\n                                helperService.fitHeightTypeahead('#' + $('#searchProductInput').attr('aria-owns'), false);\r\n                            }, 400);\r\n                        }\r\n                    }\r\n                );\r\n\r\n\r\n                $scope.placeMaxVisibleLiveSearchCountMsg = function () {\r\n                    // if ($scope.showMaxVisibleLiveSearchCountMsg && $scope.liveSearchIsOpen) {\r\n                    //     $timeout(function () {\r\n                    //         var lst = $('.autoCompleteBox ul')[0].getBoundingClientRect();\r\n                    //         if (lst.width > 0 && lst.height > 0) {\r\n                    //             console.log('lst: ' + lst.width + ' ' + lst.height);\r\n                    //             $('#minProdMessage').css('left', lst.left);\r\n                    //             $('#minProdMessage').css('top', lst.bottom - 10);\r\n                    //             $('#minProdMessage').show();\r\n                    //         }\r\n                    //         else\r\n                    //             $('#minProdMessage').hide();\r\n                    //     });\r\n                    // }\r\n                    // else\r\n                    //     $('#minProdMessage').hide();\r\n                };\r\n\r\n                $scope.showMaxVisibleLiveSearchCountMsg = false;\r\n\r\n\r\n                $scope.liveSearch = function (val) {\r\n                    $scope.searchType = 'live';\r\n                    $scope.searchText = val;\r\n                    var res = liveSearchService.filterData(val);\r\n                    filterService.checkEquality(res);\r\n\r\n                    $scope.showMaxVisibleLiveSearchCountMsg = !!res && res.length > 0;\r\n                    $scope.placeMaxVisibleLiveSearchCountMsg();\r\n\r\n                    return res;\r\n                };\r\n\r\n                $scope.liveSearchFinished = function (val) {\r\n                    return !!val ? val.name : null;\r\n                };\r\n\r\n                $scope.handleEmptyResult = function (query, isSilent = false) {\r\n                    if (!isSilent) {\r\n                        soundService.playBad();\r\n                    }\r\n                    \r\n                    if (query) {\r\n                        $rootScope.$broadcast('snackbar.show', {\r\n                            message: `No product(s) are found.`,\r\n                            type: 'error'\r\n                        });\r\n                    }\r\n                };                \r\n\r\n                $scope.liveSearchSelected = function (item, model, label, event) {\r\n                    // make search by product id and add product to order\r\n                    $scope.searchProductID = model.id;\r\n                    $scope.searchText = item.name;\r\n                    $scope.search();\r\n                };\r\n\r\n                // this is sale object. Can be saved (Hold on, parked) restored\r\n                $scope.currentSale = {\r\n                    CashChangeAmount: 0,\r\n                    itemDiscount: 0\r\n                };\r\n\r\n                $scope.receiptSaleModel = {\r\n                    Customer: [],\r\n                    CheckoutProductCount: 0,\r\n                    Date: '',\r\n                    Time: '',\r\n                    OutletName: '',\r\n                    RegistryName: '',\r\n                    CheckoutProducts: [],\r\n                    SubTotal: 0,\r\n                    Discount: 0,\r\n                    CalculatedTax: 0,\r\n                    Total: 0,\r\n                    Payments: [],\r\n                    Balance: 0,\r\n                    MerchantReceipt: '',\r\n                    CustomerReceipt: ''\r\n                };\r\n\r\n                $scope.email = {\r\n                    receiptEmail: null\r\n                };\r\n\r\n                $scope.receiptHolder = {};\r\n\r\n                $scope.quoteHolder = {};\r\n\r\n                var logoff = function () {\r\n                    $timeout(function () {\r\n                        $.unblockUI();\r\n                        $rootScope.$broadcast('header.logoff');\r\n                        \r\n                        googleHelperService.logout();\r\n                        \r\n                    });\r\n                };\r\n\r\n                // payment section\r\n                $scope.showPaymentSection = 0; // 0 - product select, 1 - payment method select, 2 - payment done\r\n\r\n                $scope.isPaymentFinished = function () {\r\n                    if (!!$scope.currentSale.LoyaltyPoints) {\r\n                        $scope.currentSale.LoyaltyPoints = helperService.DEARRound($scope.currentSale.LoyaltyPoints, 2);\r\n                    }\r\n                    return $scope.showPaymentSection === 2;\r\n                };\r\n\r\n                $scope.setPaymentFinished = function () {\r\n                    // for customer display\r\n                    $scope.lastSaleType = $scope.saleType ? $scope.saleType : 'sale';\r\n                    $scope.showPaymentSection = 2;\r\n                    secondTerminalService.update($scope, 'finish');\r\n\r\n                    return true;\r\n                };\r\n\r\n                $scope.isPaymentStage = function () {\r\n                    return $scope.showPaymentSection === 1;\r\n                };\r\n\r\n                $scope.$watch('showPaymentSection',\r\n                    function (newValue, oldValue) {\r\n                        if (newValue !== oldValue) {\r\n\r\n                            if (newValue == 0) {\r\n                                printService.reconnect();\r\n                                printService.resetPrintCollectMode();\r\n                            } else if (newValue == 1) {\r\n                                printService.reconnect(true);\r\n                                $timeout(function () {\r\n                                    $(\"#saleSummaryPaymentMethods\").trigger(\"on.resize\");\r\n                                });\r\n                            } else if (newValue == 2) {\r\n                                helperService.storeCurrentSale(null);\r\n                                $timeout(function () {\r\n                                    $(\"#saleSummaryCompleteID\").trigger(\"on.resize\");\r\n                                }, 1);\r\n                            }\r\n                        }\r\n                    }\r\n                );\r\n\r\n                $scope.disablePrintReceipt = function () {\r\n                    return printService.deviceIsStarted == false;\r\n                };\r\n\r\n                $scope.formHolder = {\r\n                    realSum: 0,\r\n                    sumToPayLeft: 0,\r\n                    realCashSum: 0\r\n                };\r\n                $scope.saleType = null;\r\n\r\n                // enable event when view is shown\r\n                $scope.onLoad = function () {\r\n                    console.timeEnd('enter sell controller');\r\n                    filterService.clearCanvas();\r\n\r\n                    console.time('sell controller: load');\r\n                    //printService.startScanner();\r\n                    //printService.disconnect().then(function () { return printService.connect(); });\r\n                    try {\r\n                        printService.reconnect();\r\n                    } catch (e) {\r\n                        errorService.showError(typeof e === 'string' ? e : e.message);\r\n                    }\r\n\r\n                    $scope.posTaxInclucive = configService.taxInclucive === \"True\";\r\n\r\n                    if (!configService.isMobile)\r\n                        $timeout(function () {\r\n                            $('#searchProductInput').focus();\r\n                        }, 100);\r\n\r\n                    $.blockUI();\r\n                    var p = $scope.setRegistrySales()\r\n                        .then(function () {\r\n                                return receiptService.getReceiptTemplate(true)\r\n                                    .then(function (resp) {\r\n                                            //$.blockUI();\r\n\r\n                                            var injectedString = '; white-space: pre-wrap;';\r\n                                            var position = resp.Template.search(\"\\\">{{itemNotes.SalesNote}}\");\r\n                                            var result = [resp.Template.slice(0, position), injectedString, resp.Template.slice(position)].join('');\r\n\r\n                                            var replacedString = '<canvas class=\"barcode\" id=\"code93\" type=\"code93\" b_value=\"{{receiptSaleModel.ReceiptBarCode_code93}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{receiptSaleModel.ReceiptBarCode_code93}}</canvas><div class=\"barcode_img img_code93\" style=\"text-align: center;\"></div>';\r\n                                            result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code93}}\", replacedString);\r\n                                            replacedString = '<canvas class=\"barcode\" id=\"code128\" type=\"code128\" b_value=\"{{receiptSaleModel.ReceiptBarCode_code128}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{receiptSaleModel.ReceiptBarCode_code128}}</canvas><div class=\"barcode_img img_code128\" style=\"text-align: center;\"></div>';\r\n                                            result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code128}}\", replacedString);\r\n\r\n                                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-ean8\" type=\"ean8\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean8\" style=\"text-align: center;\"></div>';\r\n                                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_ean8}}\", replacedString);\r\n                                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-ean13\" type=\"ean13\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean13\" style=\"text-align: center;\"></div>';\r\n                                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_ean13}}\", replacedString);\r\n                                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-industrial2of5\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  type=\"industrial2of5\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-industrial2of5\" style=\"text-align: center;\"></div>';\r\n                                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_industrial2of5}}\", replacedString);\r\n                                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-upca\" type=\"upca\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upca\" style=\"text-align: center;\"></div>';\r\n                                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_upca}}\", replacedString);\r\n                                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-upce\" type=\"upce\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upce\" style=\"text-align: center;\"></div>';\r\n                                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_upce}}\", replacedString);\r\n\r\n                                            $scope.receiptTemplate = result;\r\n\r\n                                            if (resp.EmailTemplate) {\r\n                                                position = resp.EmailTemplate.search(\"\\\">{{itemNotes.SalesNote}}\");\r\n                                                result = [resp.EmailTemplate.slice(0, position), injectedString, resp.EmailTemplate.slice(position)].join('');\r\n\r\n                                                replacedString = '<div class=\"barcode_img img_code93\" style=\"text-align: left;\"></div>';\r\n                                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code93}}\", replacedString);\r\n                                                replacedString = '<div class=\"barcode_img img_code128\" style=\"text-align: left;\"></div>';\r\n                                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code128}}\", replacedString);\r\n\r\n                                                replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean8\" style=\"text-align: left;\"></div>';\r\n                                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_ean8}}\", replacedString);\r\n                                                replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean13\" style=\"text-align: left;\"></div>';\r\n                                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_ean13}}\", replacedString);\r\n                                                replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-industrial2of5\" style=\"text-align: left;\"></div>';\r\n                                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_industrial2of5}}\", replacedString);\r\n                                                replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upca\" style=\"text-align: left;\"></div>';\r\n                                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_upca}}\", replacedString);\r\n                                                replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upce\" style=\"text-align: left;\"></div>';\r\n                                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_upce}}\", replacedString);\r\n\r\n                                                $scope.receiptEmailTemplate = result;\r\n                                            } else {\r\n                                                $scope.receiptEmailTemplate = result;\r\n                                            }\r\n\r\n                                            $scope.receiptEmailSubject = resp.EmailSubject;\r\n                                            $scope.receiptTemplateID = resp.TemplateID;\r\n\r\n                                            //var saleID = $location.search().saleID;\r\n                                            var cSearch = helperService.getSearchParams();\r\n\r\n                                            var saleID = cSearch.saleID;\r\n                                            $scope.subType = cSearch.subType;\r\n\r\n                                            if (saleID) {\r\n                                                saleService.loadOfflineSales(saleID).then(function (res) {\r\n                                                    var discardParkedSale = function () {\r\n                                                        return saleService.discardParkedSale(saleID).then(res => {\r\n                                                            // we loaded parked sale to memory (CurrentSale) and removed from backend,\r\n                                                            // continueSale obj is not needed anymore\r\n                                                            localStorage.setItem('continueSale', null);\r\n\r\n                                                            return res;\r\n                                                        });\r\n                                                    }\r\n\r\n                                                    if (!!cSearch.type) {\r\n                                                        $scope.saleType = cSearch.type;\r\n                                                    }\r\n                                                    if (res[0]) {\r\n                                                        $scope.currentSale = res[0].sale;\r\n                                                        $scope.currentSale = convertFromOld($scope.currentSale, $scope.currentSale.TaxInclusive);\r\n                                                        // var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                                                        calculateSums();\r\n                                                        $scope.currentSale.isParked = cSearch.isParked === true;\r\n                                                        // remove sale from store. We will conditionally return it back from sale page\r\n                                                        if ($scope.currentSale.isParked) {\r\n                                                            helperService.storeCurrentSale($scope.currentSale, $scope);\r\n                                                            return discardParkedSale();\r\n                                                            \r\n                                                        } else\r\n                                                            return helperService.resolvePromise(true);\r\n                                                    } else {\r\n                                                        return saleService.loadSalesHistory(null, null, {\r\n                                                                SaleID: saleID\r\n                                                            })\r\n                                                            .then(function (resp) {\r\n                                                                if (resp.Orders.length === 0) {\r\n                                                                    errorService.showError(gettextCatalog.getString(\"The sale was not found. If it was a parked sale, someone may already be processing it right now.\"));\r\n                                                                    $scope.restoreSale();\r\n                                                                    return helperService.resolvePromise(true);\r\n                                                                }\r\n                                                                var order = resp.Orders[0].Data;\r\n                                                                // var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                                                                $scope.currentSale = JSON.parse(order.RawSaleObject);\r\n                                                                $scope.currentSale = convertFromOld($scope.currentSale, order.TaxInclusive);\r\n                                                                helperService.storeCurrentSale($scope.currentSale, $scope);\r\n\r\n                                                                $.each(order.Payments, function (idx, el) {\r\n                                                                    if (el.PaymentProcessorID === \"BackofficePayment\") {\r\n\r\n                                                                        var existingPayment = $scope.currentSale.Payments.filter(function (p) {\r\n                                                                            return p.ID === el.ID;\r\n                                                                        });\r\n\r\n                                                                        if (existingPayment.length === 0) {\r\n                                                                            var payment = {\r\n                                                                                ID: el.ID,\r\n                                                                                PaymentProcessorID: el.PaymentProcessorID,\r\n                                                                                Amount: el.Amount,\r\n                                                                                Date: el.Date,\r\n                                                                                ShortName: el.ShortName,\r\n                                                                                PaymentTypeName: \"Non-POS\",\r\n                                                                                Loyalty: 0,\r\n                                                                                Reference: null,\r\n                                                                                Surcharge: null\r\n                                                                            };\r\n                                                                            $scope.currentSale.Payments.push(payment);\r\n                                                                        }\r\n                                                                    }\r\n                                                                });\r\n\r\n                                                                $scope.currentSale.isParked = cSearch.isParked === true;\r\n\r\n                                                                if (cSearch.isParked) {\r\n                                                                    $scope.currentSale.OrderNumber = resp.Orders[0].OrderNumber;\r\n                                                                    $scope.currentSale.ClearOrderNumber = resp.Orders[0].Data.ClearOrderNumber;\r\n                                                                    $scope.currentSale.RegistryID = resp.Orders[0].Data.RegistryID;\r\n                                                                } else {\r\n                                                                    $scope.currentSale.OrderNumber = resp.Orders[0].OrderNumber;\r\n                                                                    $scope.currentSale.ClearOrderNumber = resp.Orders[0].Data.ClearOrderNumber;\r\n                                                                    $scope.currentSale.RegistryID = resp.Orders[0].Data.RegistryID;\r\n                                                                }\r\n\r\n                                                                if (cSearch.type === 'continue') {\r\n                                                                    $scope.posTaxInclucive = resp.Orders[0].Data.TaxInclusive;\r\n                                                                }\r\n\r\n                                                                if (isContinueExchange())\r\n                                                                    $scope.currentSale.newRefundOrder = saleID;\r\n                                                                else if ($scope.saleType !== \"continue\") {\r\n                                                                    // this should be set once for refund and will be send for each refund payment operation.\r\n                                                                    //This will ensure that all refund will be attached to the same order\r\n                                                                    $scope.currentSale.newRefundOrder = uuid2.newguid();\r\n                                                                }\r\n\r\n                                                                if ($scope.currentSale.OrderType === 'LAYBY' || $scope.currentSale.OrderType === 'ONACCOUNT' ||\r\n                                                                    $scope.subType === true) {\r\n                                                                    $scope.markSaleAsPayOnly();\r\n                                                                    calculateSums();\r\n                                                                }\r\n\r\n                                                                $timeout(function () {\r\n                                                                    if (cSearch.toPaymentPage === true) {\r\n                                                                        $scope.goPayment();\r\n\r\n                                                                        if (cSearch.isFullyPaid) {\r\n                                                                            compliteSale(false);\r\n                                                                        }\r\n                                                                    }\r\n                                                                });\r\n\r\n                                                                if ($scope.currentSale.isParked) {\r\n                                                                    return discardParkedSale();\r\n                                                                }\r\n                                                                else\r\n                                                                    return helperService.resolvePromise(true);\r\n                                                            });\r\n                                                    }\r\n                                                }).then(function () {\r\n                                                    var customer = angular.copy($scope.currentSale.customer);\r\n\r\n                                                    if (configService.isOnline === true && customer.ID) {\r\n                                                        customerService.loadCustomers(\"\", 1, 10, {\r\n                                                            CustomerID: customer.ID\r\n                                                        }, true).then(function (resp) {\r\n                                                            if (resp.Customers[0]) {\r\n                                                                $scope.currentSale.customer = resp.Customers[0];\r\n\r\n                                                                if (customer.DontReloadContacts) {\r\n                                                                    $scope.currentSale.customer.Contacts = customer.Contacts;\r\n                                                                    $scope.currentSale.customer.DontReloadContacts = customer.DontReloadContacts;\r\n                                                                }\r\n                                                                if (customer.DontReloadAddresses) {\r\n                                                                    $scope.currentSale.customer.Addresses = customer.Addresses;\r\n                                                                    $scope.currentSale.customer.DontReloadAddresses = customer.DontReloadAddresses;\r\n                                                                }\r\n\r\n                                                                return initLoyaltyCustomer($scope.currentSale.customer);\r\n                                                            }\r\n\r\n                                                            $scope.setDisableLoyaltyFlag();\r\n                                                        });\r\n                                                    } else {\r\n                                                        $scope.currentSale.customer.LoadedFromLocalDb = true;\r\n                                                    }\r\n                                                }).finally(function () {\r\n                                                    //                        saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n\r\n                                                    $rootScope.$broadcast('sell.reload', {\r\n                                                        dontReloadReceipt: true\r\n                                                    });\r\n                                                    //$.unblockUI();\r\n                                                    $scope.raiseViewChanged();\r\n                                                });\r\n                                            } else if (window.localStorage.getItem('ItemToExchange') !== null) {\r\n                                                //if ($location.search().type) {\r\n                                                //    $scope.saleType = $location.search().type;\r\n                                                //}\r\n\r\n                                                $scope.canChangeSalesRepresentative = false;\r\n\r\n                                                if (cSearch.type) {\r\n                                                    $scope.saleType = cSearch.type;\r\n                                                }\r\n\r\n                                                $scope.currentSale = JSON.parse(window.localStorage.getItem('ItemToExchange'));\r\n                                                var defaultCustomer = $scope.currentSale.DefaultCustomer;\r\n                                                var isFastRefund = $scope.currentSale.IsFastRefund;\r\n                                                var adjustRefunds = $scope.currentSale.AdjustRefunds;\r\n\r\n                                                $scope.currentSale = convertFromOld($scope.currentSale, $scope.currentSale.TaxInclusive);\r\n                                                var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                                                if ($scope.saleType === 'return') {\r\n\r\n                                                    ///This needs to show earned loyalry for exchange(in case of additional payment)\r\n                                                    $scope.setDisableLoyaltyFlag();\r\n                                                    if (!isNewSale) {\r\n                                                        $scope.posTaxInclucive = $scope.currentSale.TaxInclusive;\r\n                                                        delete $scope.currentSale.TaxInclusive;\r\n                                                    } else {\r\n                                                        $scope.posTaxInclucive = $scope.currentSale.IsTaxInclusive;\r\n                                                    }\r\n\r\n                                                    $scope.operationName = 'Refund';\r\n                                                    initLoyaltyCustomer($scope.currentSale.customer);\r\n\r\n                                                    if (isContinueExchange()) {\r\n                                                        // Don't need to change anything\r\n                                                        //$scope.currentSale.newRefundOrder = saleID; // has been commented by Sergey Piskov\r\n\r\n                                                        // to resolve issue with new ID in sale service for existed exchange\r\n                                                        $scope.operationSubName = 'continue';\r\n                                                        $scope.operationName = 'Exchange';\r\n                                                        $scope.markSaleAsPayOnly();\r\n                                                    } else {\r\n                                                        // this should be set once for refund and will be send for each refund payment operation.\r\n                                                        //This will ensure that all refund will be attached to the same order\r\n                                                        if (!isNewSale)\r\n                                                            $scope.currentSale.newRefundOrder = uuid2.newguid();\r\n                                                        else\r\n                                                            $scope.currentSale.NewRefundOrder = uuid2.newguid();\r\n                                                    }\r\n                                                } else if ($scope.saleType === 'standaloneReturn' || $scope.saleType === 'standaloneExchange') {\r\n                                                    let isRefund = $scope.saleType === 'standaloneReturn';\r\n                                                    \r\n                                                    var obj = angular.copy($scope.currentSale);\r\n                                                    $scope.cleanSale();\r\n                                                    $scope.currentSale = $.extend($scope.currentSale, obj);\r\n\r\n                                                    if (defaultCustomer)\r\n                                                        $scope.currentSale.customer = defaultCustomer;\r\n\r\n                                                    $scope.currentSale.IsFastRefund = isFastRefund;\r\n                                                    $scope.currentSale.AdjustRefunds = adjustRefunds;\r\n                                                    if (isFastRefund) {\r\n                                                        $scope.canChangeCustomer = false;\r\n                                                        $scope.isFastRefund = true;\r\n                                                    }\r\n\r\n                                                    $scope.operationName = isRefund ? 'Refund' : 'Exchange';\r\n                                                    if (!isNewSale) {\r\n                                                        $scope.currentSale.newRefundOrder = uuid2.newguid();\r\n\r\n                                                        if(isRefund)\r\n                                                            $scope.currentSale.standAloneReturn = true;\r\n                                                        else\r\n                                                            $scope.currentSale.standAloneExchange = true;\r\n                                                    } else {\r\n                                                        $scope.currentSale.NewRefundOrder = uuid2.newguid();\r\n                                                        \r\n                                                        if(isRefund)\r\n                                                            $scope.currentSale.StandAloneReturn = true;\r\n                                                        else\r\n                                                            $scope.currentSale.StandAloneExchange = true\r\n                                                    }\r\n\r\n                                                    $scope.canChangeSalesRepresentative = true;\r\n                                                    $scope.saleType = isRefund ? 'standaloneReturn' : 'standaloneExchange';\r\n                                                    $scope.canParkSale = false;\r\n                                                    $scope.canAddDiscount = false;\r\n                                                }\r\n                                                else if ($scope.saleType === 'newSale') {\r\n                                                    var cSale = angular.copy($scope.currentSale);\r\n                                                    $scope.cleanSale();\r\n                                                    $scope.saleType = 'newSale';\r\n                                                    $.extend($scope.currentSale, cSale);\r\n                                                }\r\n\r\n                                                if(!!$scope.saleType) {\r\n                                                    helperService.storeCurrentSale(null);\r\n                                                }\r\n\r\n                                                localStorage.removeItem('ItemToExchange');\r\n                                                $scope.currentSale.FullReturnRounding = 0;\r\n                                                $scope.currentSale.cantProcessOffline = true;\r\n                                                $scope.currentSale.CashRounding = 0;\r\n                                                $scope.currentSale.CashChangeAmount = 0;\r\n\r\n                                                if ($scope.saleType !== 'standaloneReturn' && $scope.saleType !== 'standaloneExchange' && $scope.saleType !== 'newSale') {\r\n                                                    $scope.saleType = 'return';\r\n                                                } else {\r\n                                                    $scope.currentSale.cantProcessOffline = false;\r\n                                                }\r\n\r\n                                                if ($scope.currentSale.selectedCoupon) {\r\n\r\n                                                    $scope.currentSale.returnSelectedCoupon = $scope.currentSale.selectedCoupon;\r\n                                                    $scope.currentSale.returnSelectedCouponID = $scope.currentSale.selectedCouponID;\r\n                                                    $scope.currentSale.returnSelectedCouponDealID = $scope.currentSale.selectedCouponDealID;\r\n                                                }\r\n\r\n                                                $scope.currentSale.selectedCoupon = null;\r\n                                                $scope.currentSale.selectedCouponID = null;\r\n                                                $scope.currentSale.selectedCouponDealID = null;\r\n\r\n                                                if (!isNewSale) {\r\n                                                    $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                                                        el.itemAppliedDiscount = 0;\r\n                                                    });\r\n                                                }\r\n\r\n                                                var customer = $scope.currentSale.customer;\r\n\r\n                                                if (configService.isOnline && !!customer.ID) {\r\n                                                    return customerService.getCustomer(customer.ID)\r\n                                                        .then(function (resp) {\r\n                                                            if (resp.Customers[0]) {\r\n                                                                $scope.currentSale.customer = resp.Customers[0];\r\n                                                            }\r\n\r\n                                                            var pr = helperService.resolvePromise(true);\r\n\r\n                                                            if ($scope.saleType === 'newSale') {\r\n                                                                pr = pr.then(function () {\r\n                                                                    return $scope.addCustomerHandler($scope.currentSale.customer);\r\n                                                                });\r\n                                                            }\r\n\r\n                                                            $.unblockUI();\r\n                                                            return pr;\r\n\r\n                                                        }, function (error) {\r\n                                                            $.unblockUI();\r\n                                                        })\r\n                                                        .then(function () {\r\n                                                            return initLoyaltyCustomer($scope.currentSale.customer);\r\n                                                        });\r\n                                                } else {\r\n                                                    $.unblockUI();\r\n                                                }\r\n\r\n                                                $scope.$broadcast('sale.update');\r\n                                            } else {\r\n                                                $.unblockUI();\r\n                                            }\r\n                                        },\r\n                                        function (err) {\r\n                                            // in case of template error or something like this we will allow to select outlet/registry manually\r\n                                            configService.bypassOutletRegistry = false;\r\n                                            \r\n                                            googleHelperService.logout();\r\n                                            \r\n                                            errorService.showError(err, logoff);\r\n                                        });\r\n                            },\r\n                            function (err) {\r\n                                errorService.showError('Server can not be accessed. Please, relogin.', logoff);\r\n                                //            errorService.showError(err);\r\n                            });\r\n\r\n                    saleService.updateNextSequenceNumber(); // specially unlinked from promise queue to speed up loading\r\n\r\n                    p.then(function(){\r\n                        return $scope.checkRestoredSaleAsync();\r\n                    })\r\n                    .finally(function () {\r\n                        $scope.raiseViewChanged();\r\n                        console.timeEnd('sell controller: load');\r\n                        $.unblockUI();\r\n\r\n                        if(!$scope.saleCheckResult) {\r\n                            // check if we restore sale that was broken during card payment\r\n                            // in this case we need to ask client if the sale was really paid and\r\n                            // in this case complete it with special comment\r\n                            var saleObj = $scope.restoreSale();\r\n                            if ($scope.currentSale && saleObj && saleObj.payment) {\r\n                                $scope.restoredSaleObj = saleObj;\r\n                                $scope.dialogMode = 'restore-cardpay-sale';\r\n                                setTimeout(\r\n                                    function() {\r\n                                        helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                                        gettextCatalog.getString('We have identified incorrectly completed payment transaction. Please confirm if the payment succeeded?'),\r\n                                        gettextCatalog.getString('Yes'),\r\n                                        gettextCatalog.getString('No'))\r\n                                    }\r\n                                , 1000);\r\n                            } else delete $scope.restoredSaleObj;\r\n\r\n                            try {\r\n                                if (saleObj) {\r\n                                    secondTerminalService.update($scope, 'sale');\r\n                                }\r\n                            } catch (e) {\r\n                                console.log(e);\r\n                            }\r\n                        }\r\n\r\n                        $scope.saleCheckResult = false;\r\n                    });\r\n                };\r\n\r\n                $scope.saleCheckResult = false;\r\n\r\n                // returns false if sale can be restored from local storage\r\n                $scope.checkRestoredSaleAsync = function () {\r\n                    $scope.saleCheckResult = false;\r\n\r\n                    var saleObj = helperService.restoreCurrentSale();\r\n                    // check only if sale is in the local storage and there is no payments, i.e. it's new one\r\n                    if (!!saleObj && !!saleObj.sale && !saleObj.payment) {\r\n                        return saleService.checkPosSaleOrderExists(saleObj.sale.ID)\r\n                        .then(function(res){\r\n                            $scope.saleCheckResult = res === true;\r\n                            return helperService.resolvePromise(res === true);\r\n                        });\r\n                    } else {\r\n                        $scope.saleCheckResult = false;\r\n                        return helperService.resolvePromise(false);\r\n                    }\r\n                };\r\n\r\n                $scope.restoreSale = function () {\r\n                    var saleObj = helperService.restoreCurrentSale();\r\n                    if (!!saleObj && !!saleObj.sale) {\r\n                        clearLLDiscount();\r\n                        $scope.currentSale = saleObj.sale;\r\n                        //  var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                        if (!!saleObj.saleType)\r\n                            $scope.saleType = saleObj.saleType;\r\n\r\n                        if (!!saleObj.operationName)\r\n                            $scope.operationName = saleObj.operationName;\r\n\r\n                        if ($scope.saleType === 'return' &&\r\n                            !$scope.currentSale.customer.ID) {\r\n                            $scope.refundNeedCustomer = true;\r\n                        }\r\n\r\n                        if ($scope.currentSale.customer &&\r\n                            $scope.currentSale.customer.ID)\r\n                            initLoyaltyCustomer($scope.currentSale.customer);\r\n\r\n                        if (saleObj.payment) {\r\n                            $scope.creditCardPaymentProcessorID = saleObj.creditCardPaymentProcessorID;\r\n                            $scope.formHolder.realSum = !saleObj.realSum ? 0 : saleObj.realSum;\r\n                        }\r\n                    }\r\n\r\n                    $scope.setDisableLoyaltyFlag();\r\n\r\n                    return saleObj;\r\n                };\r\n\r\n                $scope.markSaleAsPayOnly = function () {\r\n                    $scope.canChangeCustomer = false;\r\n                    $scope.canParkSale = false;\r\n                    $scope.canAddDiscount = false;\r\n                    $scope.canInsertCheckoutItems = false;\r\n                    $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                        el.CanEdit = false;\r\n                        el.CanDelete = false;\r\n                        if ($scope.useNewCalculation()) {} else {\r\n                            el.itemDiscount = el.itemAppliedDiscount;\r\n                            el.itemAppliedDiscount = 0;\r\n                            el.Price += el.itemDiscount;\r\n                        }\r\n                    });\r\n                };\r\n\r\n                $scope.raiseViewChanged = function () {\r\n                    //$('#mainPart').css('height', $(window).innerHeight() + 'px');\r\n\r\n                    $rootScope.$broadcast('view.ready');\r\n\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('view.loaded');\r\n                    });\r\n                    $timeout(function () {\r\n                        $scope.viewLoaded = true;\r\n                    });\r\n                };\r\n\r\n                $scope.firstTimeLoad = true;\r\n                $scope.firstTimeSummaryLoad = true;\r\n\r\n                $scope.openCustomerDisplay = function () {\r\n                    secondTerminalServiceWeb.openSecondScreenPage();\r\n                };\r\n\r\n                watchers.push($scope.$on('view.loaded', function (evt, prm) {\r\n                    //       if(!!prm && prm=='summary')\r\n                    //           $scope.initSummaryValues();\r\n                    configService.pingFunction();\r\n\r\n                    if ($scope.firstTimeLoad) {\r\n                        $scope.firstTimeLoad = false;\r\n\r\n                        helperService.setDatepicker($scope.dateFormat, '#expirationDate');\r\n\r\n                        if (!!configService.useLinkly) {\r\n                            var paymentSettings = configService.getCardPaymentSettings();\r\n                            var providerKey = paymentSettings && paymentSettings.providerKey ? paymentSettings.providerKey : null;\r\n\r\n                            if (providerKey === 'linklyPaymentReaderProvider') {\r\n                                var secretKey = window.localStorage.getItem('secret');\r\n\r\n                                if (!!secretKey) {\r\n                                    linklyPaymentReaderProvider.startPolling();\r\n                                }\r\n                            }\r\n                        }\r\n\r\n                        var isAfterLogin = localStorage.getItem('isAfterLogin');\r\n                        localStorage.removeItem('isAfterLogin');\r\n                        if (configService.isSite && isAfterLogin && localStorage.getItem('secondScreenEnableAuto') === 'true') {\r\n                            // hack because browser can deny opening pop ups without user interaction\r\n                            $('#btnOpenCustomerDisplay').click();\r\n                        }\r\n                    }\r\n\r\n                    if ($scope.firstTimeSummaryLoad && $scope.showPaymentSection == 1) {\r\n                        $scope.firstTimeSummaryLoad = false;\r\n\r\n                        helperService.setDatepicker2($scope.dateFormat, '#layByDate',\r\n                            function () {\r\n                                $('#layByDate').prop('disabled', true);\r\n                            },\r\n                            function () {\r\n                                $('#layByDate').prop('disabled', false);\r\n                            }\r\n                        );\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        $rootScope.$broadcast('image.src.update');\r\n                        $rootScope.$broadcast('scroll.wrapper.resize');\r\n                        var f = $('.innerOffsets.paymentFooter');\r\n                        var off = f.offset();\r\n                        console.log('after loaded:');\r\n                        console.log(off.left + ' ' + off.top);\r\n                        console.log(f.width() + ' ' + f.height());\r\n                        console.log($(window).height());\r\n                        \r\n                        $scope.$broadcast('sale.update');\r\n                    });                 \r\n\r\n                    //         if( prm === 'summary') {\r\n                    // // summary is displayed, so call loyalty service to update loyalty if required\r\n                    //             loyaltyService.initCustomer($scope.currentSale.customer); // async\r\n                    //         }\r\n                }));\r\n\r\n                watchers.push($rootScope.$on(\"$includeContentLoaded\", function (event, templateName) {\r\n                    if (templateName === 'PosViews/sellToPayPartial.html') {\r\n                        console.log('include is loaded: ' + templateName);\r\n                        $rootScope.$broadcast('recalculate');\r\n                    }\r\n                }));\r\n\r\n                $scope.quickKey = null;\r\n                $scope.searchProductID = null;\r\n\r\n                $scope.liveKeyPress = function (event) {\r\n                    if (event.which === 13) {\r\n                        $scope.searchProductID = null;\r\n                        $scope.search(true);\r\n                    }\r\n                };\r\n\r\n                $scope.toggleProductTiles = function () {\r\n                    $timeout(function () {\r\n                        $scope.showSearchResult = !$scope.showSearchResult;\r\n                    });\r\n                };\r\n\r\n                $scope.scrollToAddedPaymentItem = function () {\r\n                    $timeout(function () {\r\n                        $('#checkoutSection .checkout-item:first-child')[0].scrollIntoView({behavior: \"smooth\", block: \"end\", inline: \"nearest\"});\r\n                    });\r\n                };\r\n                //$scope.liveKeyDown = function (event) {\r\n                //    if (event.which === 38 || event.which === 40)\r\n                //    {\r\n\r\n\r\n                //    }\r\n                //};\r\n\r\n                // search for products\r\n                $scope.search = function (isUserAction) {\r\n\r\n                    $rootScope.$broadcast('popover.dialog.hide');\r\n                    var isUserPerformedSearch = isUserAction == true;\r\n                    if ($scope.searchType == 'quickKeySearch' || $scope.searchType == 'quickKey') {\r\n\r\n                        $scope.quickKey = $scope.searchType == 'quickKeySearch' ? null : $scope.quickKey;\r\n\r\n                        var byQuickKey = true;\r\n\r\n                        $scope.searchType = $scope.quickKey != null ? 'quickKey' : 'quickKeySearch';\r\n\r\n                        if (!!configService.quickKeyTemplateID)\r\n                            $scope.searchText = \"\";\r\n                        else return false;\r\n                    }\r\n\r\n                    // check minimal number of entered symbols\r\n                    if (byQuickKey !== true) {\r\n                        $scope.searchType = 'inputSearch';\r\n                        $scope.quickKey = null;\r\n                        if (!$scope.searchProductID &&\r\n                            (!$scope.searchText || $scope.searchText.length < configService.minSymbolsToStartSearch)) {\r\n                            errorService.showError($scope.minSymbolsToStartSearchMessage);\r\n                            return false;\r\n                        }\r\n                    }\r\n\r\n                    if (configService.isMobile) {\r\n                        Keyboard.hide();\r\n                    } else {\r\n                        helperService.hideKeyboard();\r\n                    }\r\n\r\n                    $.blockUI();\r\n                    productsService.search($scope.searchText, byQuickKey, $scope.quickKey, $scope.searchProductID)\r\n                        .then(function (res) {\r\n                            // build page\r\n                            $scope.searchTotal = res;\r\n                            $scope.totalPages = Math.ceil(res / $scope.pageSize);\r\n                            $scope.isInFamily = false;\r\n                            return productsService.getSearchPage(0, $scope.pageSize, byQuickKey, $scope.quickKey, $scope.searchProductID);\r\n                        })\r\n                        .then(function (res) {\r\n                            $scope.searchItems = res.data;\r\n                            $scope.currentPage = res.page;\r\n\r\n                            if(!res.data || res.data.length == 0){\r\n                                $scope.handleEmptyResult($scope.searchText, $scope.searchType === 'quickKey');\r\n                            }\r\n                        })\r\n                        .catch(function (err) {\r\n                            errorService.showError(err);\r\n                        })\r\n                        .finally(function () {\r\n                            var searchProductID = $scope.searchProductID;\r\n                            var weightBasedBarcode = productsService.weightBasedBarcode;\r\n                            $scope.searchProductID = null;\r\n\r\n                            var deferred = $q.defer();\r\n                            deferred.resolve(true);\r\n                            var promise = deferred.promise;\r\n\r\n                            if (!!$scope.searchItems && !$scope.quickKey) {\r\n                                var item = $scope.searchItems[0];\r\n                                if ($scope.searchItems && $scope.searchItems.length === 1 && $scope.searchItems[0].isFamily === 0 &&\r\n                                    (helperService.compareStrings(item.ProductCode, $scope.searchText) ||\r\n                                        helperService.compareStrings(item.Barcode, $scope.searchText) ||\r\n                                        helperService.compareStrings(item.ProductID, searchProductID) ||\r\n                                        weightBasedBarcode)) {\r\n                                    promise = promise.then(function () {\r\n                                        var Value = weightBasedBarcode ? weightBasedBarcode.Value : null;\r\n                                        $scope.addPaymentItem(item.ProductID, null, null, null, Value);\r\n                                        $scope.scrollToAddedPaymentItem();\r\n                                        var deferred2 = $q.defer();\r\n                                        deferred2.resolve(true);\r\n                                        return deferred2.promise;\r\n                                    });\r\n                                } else if ($scope.searchItems && $scope.searchItems.length === 1 && $scope.searchItems[0].isFamily === 1) {\r\n                                    promise = promise.then(function () {\r\n                                        return productsService.getFamilySearchFull(item.ProductID).then(function (resp) {\r\n                                            $.each(resp, function (i, el) {\r\n                                                if ($scope.isSearchVisible && !$scope.showSearchResult) {\r\n                                                    $scope.showSearchResult = true;\r\n                                                }\r\n\r\n                                                if (helperService.compareStrings(el.ProductCode, $scope.searchText) ||\r\n                                                    helperService.compareStrings(el.Barcode, $scope.searchText)) {\r\n                                                    promise = promise.then(function () {\r\n                                                        $scope.addPaymentItem(el, true);\r\n                                                        $scope.scrollToAddedPaymentItem();\r\n                                                        var deferred2 = $q.defer();\r\n                                                        deferred2.resolve(true);\r\n                                                        return deferred2.promise;\r\n                                                    });\r\n\r\n                                                    return false;\r\n                                                }\r\n                                            });\r\n                                        });\r\n                                    });\r\n                                } else {\r\n                                    if (isUserPerformedSearch == true && configService.isMobileDesign) {\r\n                                        $timeout(function () {\r\n                                            $scope.showSearchResult = true;\r\n                                        });\r\n                                    }\r\n                                }\r\n                            }\r\n\r\n                            $timeout(function () {\r\n                                fontMeasureService.updateFontSize('catalog-tile', 'productText', 12, 0, true);\r\n                            }, 100);\r\n\r\n                            $timeout(function () {\r\n                                $('#tileDiv').trigger('on.resize');\r\n                                $rootScope.$broadcast('image.src.update');\r\n                            }, 50);\r\n\r\n                            return promise.then(function () {\r\n                                    if (!$scope.insideStocktakeCheck) {\r\n                                        productsService.weightBasedBarcode = null;\r\n                                    }\r\n\r\n                                    // $scope.setFocus('searchProductInput');\r\n                                    if ($scope.searchType != 'quickKey')\r\n                                        $scope.quickKey = null;\r\n                                    var deferred2 = $q.defer();\r\n                                    deferred2.resolve(true);\r\n                                    $.unblockUI();\r\n                                    return deferred2.promise;\r\n                                })\r\n                                .catch(function (err) {\r\n                                    productsService.weightBasedBarcode = null;\r\n                                    $.unblockUI();\r\n                                    errorService.showError(err);\r\n                                });\r\n                        });\r\n\r\n                    $scope.page = 1;\r\n                };\r\n\r\n                function sortProducts(a, b) {\r\n                    if (a.Name < b.Name) return -1;\r\n                    if (a.Name > b.Name) return 1;\r\n                    return 0;\r\n                }\r\n\r\n                $scope.showAvailability = function (e, productID, isFamily) {\r\n                    var slel = $scope.searchItems.filter(function (el) {\r\n                        return el.ProductID == productID;\r\n                    })[0];\r\n                    $scope.availabilityObject = {\r\n                        productID: productID,\r\n                        isFamily: isFamily === 1,\r\n                        option1: null,\r\n                        option2: null,\r\n                        option3: null,\r\n                        name: null,\r\n                        sku: null\r\n                    };\r\n                    $scope.availabilityObject.name = slel.Name;\r\n                    $scope.availabilityObject.sku = slel.Sku;\r\n                    $scope.availabilityObject.option1Name = slel.Option1Name;\r\n                    $scope.availabilityObject.option2Name = slel.Option2Name;\r\n                    $scope.availabilityObject.option3Name = slel.Option3Name;\r\n                    var opts = {};\r\n                    if (isFamily !== 1)\r\n                        opts = {\r\n                            option1: slel.Option1,\r\n                            option2: slel.Option2,\r\n                            option3: slel.Option3\r\n                        };\r\n\r\n                    if (!!slel.Option3)\r\n                        $scope.availabilityObject.maxLevel = 3;\r\n                    else if (!!slel.Option2)\r\n                        $scope.availabilityObject.maxLevel = 2;\r\n                    else if (!!slel.Option1)\r\n                        $scope.availabilityObject.maxLevel = 1;\r\n                    else\r\n                        $scope.availabilityObject.maxLevel = 0;\r\n\r\n                    $rootScope.$broadcast('showAvailabilityCheckDlg', opts);\r\n                };\r\n\r\n                $scope.processItem = function (e, elID, productID, isFamily, isQuickKey) {\r\n\r\n                    if (isFamily) {\r\n                        if ((!$scope.currentProductFamily || $scope.currentProductFamily.elementID != elID)) {\r\n                            //$rootScope.$broadcast('popover.dialog.hide');\r\n                            $rootScope.$broadcast('modal.dialog.hide');\r\n                        } else\r\n                            return;\r\n\r\n                        if (isQuickKey === true) {\r\n                            $scope.quickKey = productID;\r\n                            $scope.searchType = 'quickKey';\r\n                            $scope.search();\r\n                            return;\r\n                        }\r\n\r\n                        $.blockUI();\r\n\r\n                        // go down to products in family\r\n                        productsService.getFamilySearchFull(productID)\r\n                            .then(function (res) {\r\n                                var slel = $scope.searchItems.filter(function (el) {\r\n                                    return el.ProductID == productID;\r\n                                })[0];\r\n\r\n                                slel.OutletName = 'Main Store';\r\n                                $scope.availabilityObject = {\r\n                                    productID: productID,\r\n                                    isFamily: true,\r\n                                    option1: null,\r\n                                    option2: null,\r\n                                    option3: null,\r\n                                    option1Name: slel.Option1Name,\r\n                                    option2Name: slel.Option2Name,\r\n                                    option3Name: slel.Option3Name,\r\n                                    name: slel.Name,\r\n                                    sku: slel.Sku,\r\n                                    checkData: [slel]\r\n                                };\r\n\r\n                                // build tree from data by options\r\n                                var tree = {};\r\n                                var optionLevels = [];\r\n\r\n                                res.sort(sortProducts);\r\n\r\n                                var maxLevel = 0;\r\n\r\n                                $.each(res, function (idx, el) {\r\n                                    if (idx == 0) {\r\n                                        optionLevels = [];\r\n\r\n                                        if (!!el.Option1Name) optionLevels.push(el.Option1Name);\r\n                                        if (!!el.Option2Name) optionLevels.push(el.Option2Name);\r\n                                        if (!!el.Option3Name) optionLevels.push(el.Option3Name);\r\n                                    }\r\n\r\n                                    if (!!el.Option1) {\r\n                                        if (maxLevel < 1)\r\n                                            maxLevel = 1;\r\n\r\n                                        if (!!el.Option2) {\r\n                                            if (maxLevel < 2)\r\n                                                maxLevel = 2;\r\n\r\n                                            if (!tree[el.Option1]) tree[el.Option1] = {};\r\n                                            var o1 = tree[el.Option1];\r\n\r\n                                            if (!!el.Option3) {\r\n                                                if (maxLevel < 3)\r\n                                                    maxLevel = 3;\r\n\r\n                                                if (!o1[el.Option2]) o1[el.Option2] = {};\r\n                                                var o2 = o1[el.Option2];\r\n\r\n                                                o2[el.Option3] = new OptionsTreeItem(el);\r\n                                            } else {\r\n                                                o1[el.Option2] = new OptionsTreeItem(el);\r\n                                            }\r\n                                        } else {\r\n                                            tree[el.Option1] = new OptionsTreeItem(el);\r\n                                        }\r\n                                    }\r\n                                });\r\n\r\n                                $scope.availabilityObject.maxLevel = maxLevel;\r\n\r\n                                $scope.currentProductFamily = {\r\n                                    elementID: elID,\r\n                                    data: tree,\r\n                                    levels: optionLevels\r\n                                };\r\n\r\n                                $.unblockUI();\r\n                                $scope.showProductOptionsDlg(elID);\r\n                            })\r\n                            .finally(function () {\r\n                                $.unblockUI();\r\n                            });\r\n                        //            $scope.page = 1;\r\n                    } else {\r\n                        $rootScope.$broadcast('popover.dialog.hide');\r\n                        $scope.currentProductFamily = null;\r\n\r\n                        // add product into payment\r\n                        $scope.addPaymentItem(productID);                        \r\n                        $scope.scrollToAddedPaymentItem();\r\n                    }\r\n\r\n                    console.log('$scope.processItem finished: ' + Date.now());\r\n\r\n                };\r\n\r\n                $scope.addImages = function (data) {\r\n                    var arr = [];\r\n                    var arr2 = [];\r\n                    $.each(data, function (idx, el) {\r\n                        if (el.isFamily) {\r\n                            arr2.push(el.ProductID);\r\n                        } else {\r\n                            arr.push(el.ProductID);\r\n                        }\r\n                    });\r\n\r\n                    productsService.getProductImages(true, arr,\r\n                        function (productID, img) {\r\n                            $.each($scope.searchItems, function (idx, el) {\r\n                                if (el.ProductID == productID) {\r\n                                    $.extend(el, {\r\n                                        image: img\r\n                                    });\r\n                                    return false;\r\n                                }\r\n                            });\r\n                        });\r\n\r\n                    productsService.getProductImages(false, arr2,\r\n                        function (productID, img) {\r\n                            $.each($scope.searchItems, function (idx, el) {\r\n                                if (el.ProductID == productID) {\r\n                                    $.extend(el, {\r\n                                        image: img\r\n                                    });\r\n                                    return false;\r\n                                }\r\n                            });\r\n                        });\r\n\r\n                };\r\n\r\n                $scope.productFilter = function (arr, productID) {\r\n                    var item = null;\r\n                    $.each(arr, function (idx, el) {\r\n                        if (el.ProductID == productID) {\r\n                            item = {};\r\n                            angular.copy(el, item);\r\n                            item.DefaultPrice = el.Price;\r\n                            return false;\r\n                        }\r\n                    });\r\n\r\n                    return item;\r\n                };\r\n\r\n                $scope.checkOutItemsFilter = function (arr, productID, serialNumber, giftCardCode, isReturn) {\r\n                    var item = null;\r\n                    $.each(arr, function (idx, el) {\r\n                        if (el.ProductID == productID && el.CanEdit !== false &&\r\n                            (el.ProductType !== ProductType.GiftCard || el.GiftCardCode == giftCardCode) &&\r\n                            (!serialNumber || !serialNumber.value || serialNumber.value === el.SerialNumber) &&\r\n                            (isReturn === undefined || isReturn === el.Return)\r\n                            ) {\r\n                            item = el;\r\n                            return false;\r\n                        }\r\n                    });\r\n                    return item;\r\n                };\r\n\r\n                $scope.changePage = function (page) {\r\n                    $.blockUI();\r\n\r\n                    if (!$scope.isInFamily) {\r\n                        var QuickKeySearch = $scope.searchType == 'quickKeySearch' ? true : false;\r\n                        productsService.getSearchPage(page - 1, $scope.pageSize, QuickKeySearch).then(function (res) {\r\n                                $scope.searchItems = res.data;\r\n                                $scope.currentPage = res.page;\r\n                                // $scope.addImages(res.data);\r\n                                $timeout(function () {\r\n                                    fontMeasureService.updateFontSize('catalog-tile', 'productText', 12, 0, true);\r\n                                }, 100);\r\n                                $timeout(function () {\r\n                                    $rootScope.$broadcast('image.src.update');\r\n                                });\r\n                            })\r\n                            .finally(function () {\r\n                                $scope.hideNoProdMessage = false;\r\n                                $.unblockUI();\r\n                            });\r\n                    } else {\r\n                        productsService.getFamilySearchPage(page - 1, $scope.pageSize).then(function (res) {\r\n                                $scope.searchItems = res.data;\r\n                                $scope.currentPage = res.page;\r\n                                // $scope.addImages(res.data);\r\n                                $timeout(function () {\r\n                                    fontMeasureService.updateFontSize('catalog-tile', 'productText', 12, 0, true);\r\n                                }, 100);\r\n                                $timeout(function () {\r\n                                    $rootScope.$broadcast('image.src.update');\r\n                                });\r\n                            })\r\n                            .finally(function () {\r\n                                $scope.hideNoProdMessage = false;\r\n                                $.unblockUI();\r\n                            });\r\n                    }\r\n                };\r\n\r\n                // checkout section\r\n                $scope.cleanSale = function (noClean) {\r\n\r\n                    $scope.subType = null;\r\n                    $scope.operationName = 'Pay';\r\n                    $scope.canChangeCustomer = true;\r\n                    $scope.isFastRefund = false;\r\n                    $scope.canChangeSalesRepresentative = true;\r\n                    $scope.canParkSale = true;\r\n                    $scope.canAddDiscount = configService.canGiveDiscount;\r\n                    $scope.canChangePrice = configService.canChangePrice;\r\n                    $scope.canInsertCheckoutItems = true;\r\n                    $scope.saleType = null;\r\n                    $scope.refundNeedCustomer = false;\r\n                    $scope.canDiscardSale = true;\r\n                    $scope.posTaxInclucive = configService.taxInclucive === \"True\";\r\n                    $scope.showLoyalty = configService.enableLoyalty;\r\n                    $scope.paymentValidation = {\r\n                        cashAmount: 0,\r\n                        creditCardAmount: 0,\r\n                        giftCardAmount: 0,\r\n                        loyaltyPointsAmount: 0,\r\n                        storeCreditAmount: 0,\r\n                        cashSurchargeAmount: 0,\r\n                        storeCreditSurchargeAmount: 0\r\n                    };\r\n                    $scope.paymentValidation.cardPayments = {};\r\n                    $scope.isValidAmount = true;\r\n                    if (CalculatorHelperService.useNewCalculation(null)) {\r\n                        $scope.currentSale = CalculatorHelperService.CreateNewSale();\r\n                    } else {\r\n                        $scope.currentSale = {\r\n                            ID: uuid2.newguid(),\r\n                            Date: new Date(),\r\n                            ReturnID: null,\r\n                            CheckoutItems: [],\r\n                            Payments: [], // all payments for this sale with payment method guid references\r\n                            isDiscountPercent: false,\r\n                            Discount: 0,\r\n                            DiscountTax: 0,\r\n                            comment: '',\r\n                            RealPaySum: 0,\r\n                            CalculatedTax: 0,\r\n                            customer: {\r\n                                ID: null\r\n                            },\r\n                            CheckoutItemCount: 0,\r\n                            Balance: 0,\r\n                            LoyaltyPoints: 0,\r\n                            LoyaltyPointsTotal: 0,\r\n                            OrderNumber: '000000',\r\n                            ClearOrderNumber: '000000',\r\n                            OrderType: '',\r\n                            CashChangeAmount: 0,\r\n                            itemDiscount: 0,\r\n                            selectedCoupon: null,\r\n                            manuallyAppliedDiscount: false\r\n                        };\r\n                    }\r\n\r\n                    if (noClean !== true)\r\n                        helperService.storeCurrentSale(null);\r\n\r\n                    clearLLDiscount();\r\n\r\n                    //$timeout(function () {\r\n                        secondTerminalService.update($scope, 'sale');\r\n                    //});\r\n                };\r\n\r\n                $scope.cleanSearch = function () {\r\n                    $scope.searchItems = null;\r\n                    $scope.searchType = '';\r\n                };\r\n\r\n                $scope.cleanSale(true);\r\n\r\n                $scope.dialogMode = 'stocktakeLock';\r\n                $scope.stocktakeProductToCheck = null;\r\n                $scope.callbackModalCancel = function () {\r\n                    $scope.insideStocktakeCheck = false;\r\n\r\n                    if ($scope.dialogMode == 'restore-cardpay-sale') {\r\n                        delete $scope.restoredSaleObj;\r\n                        helperService.storeCurrentSale($scope.currentSale, $scope);\r\n                    }\r\n                };\r\n\r\n                $scope.callbackModal = function () {\r\n\r\n                    if ($scope.dialogMode == 'stocktakeLock' && !!$scope.stocktakeProductToCheck) {\r\n                        // $scope.stocktakeProductToCheck.el.StocktakeLocked = false;\r\n                        $scope.addPaymentItem($scope.stocktakeProductToCheck.obj,\r\n                            $scope.stocktakeProductToCheck.isElement,\r\n                            $scope.stocktakeProductToCheck.returnElemen, null, $scope.stocktakeProductToCheck.amount);\r\n                    } else if ($scope.dialogMode == 'partialPayment') {\r\n                        $scope.cancelPayment();\r\n                    } else if ($scope.dialogMode == 'vantivDeclinePayment') {\r\n                        // print decline vantiv receipt\r\n                        reportService.printVantivDeclineReceipt($scope, $scope.declineTransactionData, $scope.currency_symbol);\r\n                    } else if ($scope.dialogMode == 'giftCardRemoveItem') {\r\n                        $scope.removePaymentItem($scope.checkOutItem.ID);\r\n                        saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n                    } else if ($scope.dialogMode == 'serialNumberProductRemove') {\r\n                        $scope.removePaymentItem($scope.checkOutItem.ID);\r\n                        saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n                    } else if ($scope.dialogMode == 'ProductRemove') {\r\n                        $scope.removePaymentItem($scope.checkOutItem.ID);\r\n                    } else if ($scope.dialogMode == 'remove-customer') {\r\n                        $scope.removeCustomerCallback();\r\n                    } else if ($scope.dialogMode == 'remove-salesrep') {\r\n                        $scope.removeSalesRepCallback();\r\n                    } else if ($scope.dialogMode == 'loyaltypartialpayment') {\r\n                        $scope.loyaltyPay(true);\r\n                    } else if ($scope.dialogMode == 'storecreditpartialpayment') {\r\n                        $scope.storeCreditsPay(true);\r\n                    } else if ($scope.dialogMode == 'removeOnlinePaymentMethods') {\r\n                        $scope.removeOnlinePaymentMethods();\r\n                    } else if ($scope.dialogMode == 'discard-sale') {\r\n                        $scope.cleanSale();\r\n                    } else if ($scope.dialogMode == 'remoteprocessing') {\r\n                        $scope.robj.isRemotedlyProcessed = true;\r\n                    } else if ($scope.dialogMode == 'restore-cardpay-sale') {\r\n                        // process sale as it was completed\r\n                        //            var saleObj = $scope.restoredSaleObj;\r\n                        $scope.creditCardPay();\r\n                    }\r\n\r\n                    $scope.insideStocktakeCheck = false;\r\n                };\r\n\r\n                $scope.customModalDlg2Caption = null;\r\n                $scope.customModalDlg2Text = null;\r\n                $scope.customModalDlg2Buttons = [];\r\n\r\n                $scope.insideStocktakeCheck = false;\r\n\r\n                // support old/new sale style\r\n                $scope.addPaymentItem = function (obj, isElement, returnElement, skipGiftCardDlg, amount) {\r\n\r\n                    console.log('addPaymentItem entering');\r\n\r\n                    let isReturn  = $scope.saleType === 'standaloneExchange' && $scope.noReceiptExchangeMode === 'Return';\r\n\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if (!$scope.canInsertCheckoutItems) {\r\n                        errorService.showError(gettextCatalog.getString(\"Sale cannot be modified.\"));\r\n                        return;\r\n                    }\r\n\r\n                    if ($scope.saleType === 'return') {\r\n                        $scope.operationName = 'Exchange';\r\n                    }\r\n                    $scope.stocktakeProductToCheck = null;\r\n\r\n                    var productID = null;\r\n                    var el = null;\r\n\r\n                    if (!!obj && (obj instanceof OptionsTreeItem)) {\r\n                        productID = obj.el.ProductID;\r\n                        //el = obj.el;\r\n                        el = $scope.productFilter([obj.el], productID);\r\n                    } else if (isElement === true) {\r\n                        productID = obj.ProductID;\r\n                        el = obj;\r\n                    } else {\r\n                        productID = obj;\r\n                        el = $scope.productFilter($scope.searchItems, productID);\r\n                    }\r\n\r\n                    // check for stocktake lock\r\n                    if (!$scope.insideStocktakeCheck && !!el && !!el.StocktakeLocked && el.StocktakeLocked.toString() == \"true\" && !returnElement) {\r\n                        // check if we have this item in checkout\r\n                        var canCheck = true;\r\n\r\n                        if (!!$scope.currentSale.CheckoutItems) {\r\n                            var flt = $scope.currentSale.CheckoutItems.filter(function (p) {\r\n                                return p.ProductID === el.ProductID;\r\n                            });\r\n\r\n                            canCheck = flt.length == 0;\r\n                        }\r\n\r\n                        if (canCheck) {\r\n                            $scope.stocktakeProductToCheck = {\r\n                                el: el,\r\n                                obj: obj,\r\n                                isElement: isElement,\r\n                                returnElement: returnElement,\r\n                                amount: amount\r\n                            };\r\n\r\n                            $scope.insideStocktakeCheck = true;\r\n                            $scope.dialogMode = 'stocktakeLock';\r\n                            helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                                gettextCatalog.getString('The selected item appears on the list of the current stocktake. To avoid incorrect counts you may need to cancel the sale of the item.'),\r\n                                gettextCatalog.getString('Continue'),\r\n                                gettextCatalog.getString('Cancel'));\r\n                            return;\r\n                        }\r\n                    }\r\n\r\n                    if (!!el && el.ProductType === 'GiftCard' && skipGiftCardDlg !== true) {\r\n                        // show dialog\r\n                        $scope.showGiftCardDialog(obj, isElement, returnElement, el);\r\n                        return;\r\n                    }\r\n\r\n                    if (!!el) {\r\n\r\n                        if (el.CostingMethod === \"FESN\" || el.CostingMethod === \"SN\" || el.CostingMethod === \"FISN\") {\r\n                            if (!$scope.scanSerialNumberWithCallback || !$scope.scanSerialNumberWithCallback.skipScanDialog) {\r\n                                $scope.showScanSerialNumberDialog({\r\n                                    itemID: el.ProductID,\r\n                                    skipScanDialog: true,\r\n                                    callback: function () {\r\n                                        $scope.addPaymentItem(obj, isElement, returnElement, skipGiftCardDlg, amount);\r\n                                        $scope.scrollToAddedPaymentItem();\r\n                                    }\r\n                                });\r\n                                return;\r\n                            }\r\n                        }\r\n\r\n\r\n                        var elAdded = $scope.checkOutItemsFilter($scope.currentSale.CheckoutItems, productID, $scope.scanedSerialNumber,\r\n                            !!el && el.ProductType == ProductType.GiftCard ? $scope.currentGiftCardProduct.giftCardCode : null, isReturn);\r\n\r\n                        if (el.ProductType === 'GiftCard') {\r\n                            if (!!elAdded && elAdded.GiftCardCode === $scope.currentGiftCardProduct.giftCardCode) {\r\n                                errorService.showError(gettextCatalog.getString(\"The same gift card has been already added to the checkout.\"));\r\n                                return;\r\n                            } else\r\n                                elAdded = null;\r\n                        }\r\n\r\n                        if (elAdded && elAdded.SerialNumber && $scope.scanedSerialNumber && elAdded.SerialNumber === $scope.scanedSerialNumber.value) {\r\n                            $scope.closeScanSerialNumberDialog(true);\r\n                            errorService.showError(gettextCatalog.getString(\"A product with this serial number has been already added to the checkout.\"));\r\n                            return;\r\n                        } else if (elAdded && elAdded.SerialNumber && !returnElement) {\r\n                            elAdded = null;\r\n                        }\r\n\r\n                        var loyaltyEarning = parseFloat(el.LoyaltyEarning);\r\n                        var taxObject = saleService.getTaxObject($scope.currentSale, el);\r\n\r\n                        if (el.Price < 0) {\r\n                            errorService.showError(gettextCatalog.getString(\"A product with a negative price cannot be added to the checkout.\"));\r\n                            return;\r\n                        }\r\n\r\n                        var barcode = productsService.weightBasedBarcode;\r\n                        var cnt = barcodeService.getWeightAmount(el, amount, barcode);\r\n                        var isPriceBased = !amount ? false :\r\n                            configService.advancedBarcodeMode === 2 ? true :\r\n                            false;\r\n\r\n                        if (configService.advancedBarcodeMode === 3 && barcode) { // DS1\r\n                            if (barcode.IsDS1) {\r\n                                isPriceBased = barcode.IsDS1PriceBased === true;\r\n                            }\r\n                        }\r\n\r\n                        var revertPrice = $scope.saleType === 'standaloneReturn' ||\r\n                            $scope.saleType === 'standaloneExchange' && $scope.noReceiptExchangeMode === 'Return';\r\n\r\n                        if (!!elAdded &&\r\n                            elAdded.CanEdit !== false &&\r\n                            returnElement !== true) {\r\n\r\n\r\n                            if (isPriceBased) {\r\n                                barcodeService.setPriceBasedItemValue(elAdded, amount);\r\n                            } else {\r\n                                 // has payment line already. Simply increment count\r\n                                elAdded.PriceBasedValue = null;\r\n                                elAdded.Count += cnt * (revertPrice ? -1 : 1);\r\n                                elAdded.Count = helperService.DEARRound(elAdded.Count, 4);\r\n                            }\r\n\r\n                            if (!isNewSale) {\r\n                                var priceWithTax = $scope.posTaxInclucive ? el.Price : el.Price + calculateTax(taxObject, el.Price);\r\n                                elAdded.Tax = calculateTax(taxObject, el.Price * elAdded.Count);\r\n                                elAdded.Amount = elAdded.Price * elAdded.Count;\r\n                                elAdded.LoyaltyPoints = loyaltyEarning ? elAdded.PriceWithTax * elAdded.Count * loyaltyEarning : 0;\r\n                            } else\r\n                                CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope);\r\n                        } else {\r\n                            var pp = $scope.chooseProductTierPrice(el);\r\n\r\n                            // add new payment line\r\n\r\n                            var price = revertPrice ? -pp : pp;\r\n                            var priceWithTax = $scope.posTaxInclucive ? pp : pp + calculateTax(taxObject, pp);\r\n                            var priceWithT = revertPrice ? -priceWithTax : priceWithTax;\r\n                            var pl = {\r\n                                ID: uuid2.newguid(),\r\n                                ProductID: el.ProductID,\r\n                                Tags: el.Tags,\r\n                                BrandID: el.BrandID,\r\n                                CategoryID: el.CategoryID,\r\n                                FamilyID: el.FamilyID,\r\n                                Name: el.Name,\r\n                                Count: cnt,\r\n                                Price: price, //price,\r\n                                Amount: price * cnt,\r\n                                Discount: 0, //discount,\r\n                                Note: '',\r\n                                Tax: calculateTax(taxObject, price * cnt),\r\n                                TaxRuleID: taxObject.ruleID,\r\n                                LoyaltyPoints: loyaltyEarning ? (priceWithT * loyaltyEarning * cnt) : 0,\r\n                                LoyaltyPointsEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                                PriceWithTax: priceWithT,\r\n                                CanEdit: true,\r\n                                CanDelete: true,\r\n                                SaleType: 'sale',\r\n                                ProductTaxString: (el.Taxes !== 'null' && el.Taxes && typeof el.Taxes === \"string\") ? el.Taxes : null,\r\n                                Taxes: taxObject,\r\n                                LoyaltyEarning: el.LoyaltyEarning,\r\n                                BasePrice: price,\r\n                                BasePriceWithDiscount: price,\r\n                                Sku: el.Sku ? el.Sku : el.ProductCode,\r\n                                BarCode: el.BarCode ? el.BarCode : el.Barcode,\r\n                                ImageID: el.ImageID,\r\n                                Discounts: typeof el.Discounts === \"string\" ? JSON.parse(el.Discounts) : el.Discounts,\r\n                                Option1: el.Option1,\r\n                                Option2: el.Option2,\r\n                                Option3: el.Option3,\r\n                                ProductShortDescription: el.ProductShortDescription,\r\n                                ProductType: el.ProductType,\r\n                                SerialNumber: $scope.scanedSerialNumber && $scope.scanedSerialNumber.value ? $scope.scanedSerialNumber.value : null,\r\n                                CF1: el.CF1,\r\n                                CF2: el.CF2,\r\n                                CF3: el.CF3,\r\n                                CF4: el.CF4,\r\n                                CF5: el.CF5,\r\n                                CF6: el.CF6,\r\n                                CF7: el.CF7,\r\n                                CF8: el.CF8,\r\n                                CF9: el.CF9,\r\n                                CF10: el.CF10,\r\n                                DefaultPrice: el.DefaultPrice\r\n                            };\r\n\r\n                            if (!!el.ExtraInfo) { // ExtraInfo exists only in mobile version\r\n                                var extra = JSON.parse(el.ExtraInfo);\r\n                                angular.extend(pl, extra);\r\n                            } else {\r\n                                pl.Price1 = el.Price1;\r\n                                pl.Price2 = el.Price2;\r\n                                pl.Price3 = el.Price3;\r\n                                pl.Price4 = el.Price4;\r\n                                pl.Price5 = el.Price5;\r\n                                pl.Price6 = el.Price6;\r\n                                pl.Price7 = el.Price7;\r\n                                pl.Price8 = el.Price8;\r\n                                pl.Price9 = el.Price9;\r\n                                pl.Price10 = el.Price10;\r\n                            }\r\n\r\n                            if (isPriceBased) {\r\n                                pl.Amount = 0;\r\n                                barcodeService.setPriceBasedItemValue(pl, amount);\r\n                            }\r\n\r\n                            if (revertPrice) {\r\n                                pl.PriceWithDiscount = el.Price;\r\n\r\n                                if(isReturn)\r\n                                {\r\n                                    pl.return = true;\r\n                                }\r\n                            }\r\n\r\n                            $scope.scanedSerialNumber = {\r\n                                value: \"\"\r\n                            };\r\n                            $scope.scanSerialNumberWithCallback = {};\r\n\r\n                            if (el.ProductType === 'GiftCard') {\r\n                                pl.GiftCardCode = $scope.currentGiftCardProduct.giftCardCode;\r\n                                pl.GiftCardExpirationDate = $scope.currentGiftCardProduct.expirationDate;\r\n                                pl.Price = Number($scope.currentGiftCardProduct.amount);\r\n                                pl.Amount = pl.Price;\r\n                                pl.BasePrice = pl.Price;\r\n                                pl.BasePriceWithDiscount = pl.Price;\r\n\r\n                                priceWithTax = $scope.posTaxInclucive ? pl.Price : pl.Price + calculateTax(taxObject, pl.Price);\r\n\r\n                                pl.PriceWithTax = revertPrice ? -priceWithTax : priceWithTax;\r\n                                pl.LoyaltyPoints = loyaltyEarning ? (pl.PriceWithTax * loyaltyEarning) : 0;\r\n                                if (isNewSale)\r\n                                    pl.LoyaltyPointsEarning = !loyaltyEarning ? 0 : loyaltyEarning;\r\n                            }\r\n\r\n                            if (returnElement === true) {\r\n                                return elAdded;\r\n                            }\r\n\r\n                            if (helperService.showNewCheckoutUI()) {\r\n                                if (revertPrice)\r\n                                    pl.Count *= -1;\r\n                                CalculatorHelperService.addCheckoutItemsToSale($scope.currentSale, pl, saleService.getProductDeals(), $scope);\r\n                            } else\r\n                                $scope.currentSale.CheckoutItems.push(pl);\r\n                        }\r\n\r\n                        $timeout(function () {\r\n                            $scope.showSearchResult = false;\r\n                        });\r\n                    }\r\n\r\n                    if (!helperService.showNewCheckoutUI())\r\n                        saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n\r\n                    if ($scope.saleType === 'standaloneReturn' || $scope.saleType === 'standaloneExchange') {\r\n                        $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                            if (!isNewSale) {\r\n                                el.LoyaltyEarning = \"\";\r\n                                el.LoyaltyPoints = 0;\r\n                            }\r\n\r\n                            el.LoyaltyPointsEarning = 0;\r\n                        });\r\n                    }\r\n\r\n                    $scope.updateSizesInCheckout();\r\n                };\r\n\r\n                $scope.changeItemCount = function (item, leaveTaxAsIs) {\r\n                    item.Count = helperService.DEARRound(item.Count, configService.decimalPlaces);\r\n\r\n                    if (!helperService.showNewCheckoutUI()) {\r\n\r\n                        var loyaltyEarning = parseFloat(item.LoyaltyEarning);\r\n                        item.LoyaltyPoints = loyaltyEarning ? item.PriceWithTax * item.Count * item.LoyaltyEarning : 0;\r\n                        var price = item.BasePrice;\r\n\r\n                        if (item.SaleType !== \"customsale\") {\r\n                            var taxObject = item.Taxes;\r\n\r\n                            item.Tax = calculateTax(taxObject, item.Count * (price - item.itemDiscount));\r\n                        }\r\n\r\n                        item.Amount = item.Price * item.Count;\r\n                        $scope.currentSale.CheckoutItemCount = $scope.currentSale.CheckoutItems.length;\r\n                        saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope, leaveTaxAsIs);\r\n                    } else {\r\n                        CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope);\r\n                        \r\n                        if ($scope.currentSale.Discount) {\r\n                            $scope.currentSale.Discount = helperService.DEARRound($scope.currentSale.Discount, 2);\r\n                        }\r\n                    }\r\n                    $scope.$broadcast('sale.update');\r\n                    $scope.updateSizesInCheckout();\r\n                };\r\n\r\n\r\n                function calculatePriceWithDiscount(discountRules, count, price) {\r\n                    var discount = filterDiscount(discountRules, count);\r\n                    if (discount !== null) {\r\n                        var value = discount.amount;\r\n                        var discountType = discount.type;\r\n                        switch (discountType) {\r\n                            case 'Discount Amount':\r\n                                return price - value;\r\n                            case '% Discount':\r\n                                return price * (100 - value) / 100;\r\n                            case 'Markup Amount':\r\n                                return price + value;\r\n                            case '% Markup':\r\n                                return price + price * value / 100;\r\n                            case 'Price Override':\r\n                                return value;\r\n                            case 'Flat Amount':\r\n                                if (count === 0) {\r\n                                    return value;\r\n                                } else {\r\n                                    return value / count;\r\n                                }\r\n                                break;\r\n                            default:\r\n                                return price;\r\n                        }\r\n                    } else {\r\n                        return price;\r\n                    }\r\n                }\r\n\r\n                function filterDiscount(arr, value) {\r\n                    var discount = null;\r\n                    $.each(arr, function (idx, el) {\r\n                        if ((el.minValue <= value && el.maxValue >= value) || (el.minValue <= value && el.maxValue === 0)) {\r\n                            discount = el;\r\n                            return false;\r\n                        }\r\n                    });\r\n                    return discount;\r\n                }\r\n\r\n\r\n                var calculateTax = saleService.calculateTax;\r\n\r\n                $scope.removePaymentItem = function (ID) {\r\n                    var isNewFormat = helperService.showNewCheckoutUI();\r\n             \r\n                    $scope.currentSale.CheckoutItems = $scope.currentSale.CheckoutItems.filter(function (el) {return el.ID !== ID;});\r\n\r\n                    var hasReturnItems = false;\r\n                    var hasBuyItems = false;\r\n                    $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                        if (!isNewFormat) {\r\n                            if (el.Price > 0) {\r\n                                hasBuyItems = true;\r\n                            } else if (el.Price < 0) {\r\n                                hasReturnItems = true;\r\n                            }\r\n                        } else {\r\n                            if (el.FinalAmount > 0) {\r\n                                hasBuyItems = true;\r\n                            } else if (el.FinalAmount < 0) {\r\n                                hasReturnItems = true;\r\n                            }\r\n                        }\r\n                    });\r\n\r\n                    if ($scope.saleType === 'standaloneReturn')\r\n                        $scope.operationName = 'Refund';\r\n                    else if ($scope.saleType === 'standaloneExchange')\r\n                        $scope.operationName = 'Exchange';\r\n                    else {\r\n                        if (hasBuyItems && hasReturnItems)\r\n                            $scope.operationName = 'Exchange';\r\n                        if (!hasBuyItems && hasReturnItems)\r\n                            $scope.operationName = 'Refund';\r\n                        if (!hasReturnItems)\r\n                            $scope.operationName = 'Pay';\r\n                    }\r\n\r\n                    if (isNewFormat)\r\n                        CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope);\r\n                    else\r\n                        helperService.storeCurrentSale($scope.currentSale, $scope);\r\n                };\r\n\r\n                $scope.showCollapse = function (event, elID) {\r\n                    var el = $(event.currentTarget);\r\n                    var prnID = el.data('parent');\r\n                    var prn = $(prnID);\r\n\r\n                    var lst = prn.find('[aria-expanded=\"true\"]');\r\n                    lst.closest('.paymentRow').removeClass('borderedExpanded');\r\n                    lst.collapse('hide');\r\n\r\n                    $(elID).collapse('toggle');\r\n                    var ex = $(elID).attr('aria-expanded');\r\n                    prn = $(elID).closest('.paymentRow');\r\n\r\n                    if (ex == 'true')\r\n                        prn.addClass('borderedExpanded');\r\n                    else\r\n                        prn.removeClass('borderedExpanded');\r\n\r\n                    return false;\r\n                };\r\n\r\n                $scope.subTotalSum = saleService.subTotalSum;\r\n\r\n\r\n                var calculateTotalTax = saleService.calculateTotalTax;\r\n\r\n                $scope.totalDiscount = function () {\r\n                    var discount = 0;\r\n                    $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                        if (el.Count > 0) {\r\n                            discount += el.Discount * el.Count;\r\n                        }\r\n                    });\r\n\r\n                    return discount;\r\n                };\r\n\r\n\r\n                $scope.totalLoyaltyPoints = saleService.totalLoyaltyPoints;\r\n\r\n                var totalSumWithTax = saleService.totalSumWithTax;\r\n\r\n                $scope.totalSum = function (item, excludeCalculatedSurcharges) {\r\n                    return saleService.totalSum(item, $scope.posTaxInclucive, excludeCalculatedSurcharges);\r\n                };\r\n\r\n                $scope.discardSale = function () {\r\n\r\n                    if (!$scope.currentSale.CheckoutItems || $scope.currentSale.CheckoutItems.length == 0 || $scope.canDiscardSale === false) {\r\n                        return;\r\n                    }\r\n\r\n\r\n                    // check here if it's parked order and remove it from local and remote db\r\n                    var cSearch = helperService.getSearchParams();\r\n                    $scope.currentSale.isParked = cSearch.isParked == true;\r\n\r\n                    if ($scope.currentSale.isParked === true) {\r\n                        $scope.showDiscardDialog();\r\n                    } else {\r\n                        $scope.dialogMode = 'discard-sale';\r\n                        helperService.showCustomDialog(gettextCatalog.getString(''),\r\n                            gettextCatalog.getString('Would you like to clear the current sale?'),\r\n                            gettextCatalog.getString('Clear sale'));\r\n                    }\r\n                };\r\n\r\n\r\n                $scope.totalCheckoutItems = function () {\r\n                    var count = 0;\r\n                    $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                        idx = (el.Count + '').indexOf('.');\r\n                        count += idx < 0 ? +el.Count : 1; // treat fractional quantities as 1 unit\r\n                    });\r\n\r\n                    return count;\r\n                };\r\n\r\n                $scope.customPaymentMethods = [];\r\n\r\n                $scope.getCustomPaymentMethod = function (id) {\r\n                    var lst = $scope.customPaymentMethods.filter(function (el) {\r\n                        return el.paymentProcessorID == id;\r\n                    });\r\n\r\n                    return lst.length > 0 ? lst[0] : null;\r\n                };\r\n\r\n                $scope.getCustomPaymentMethodByShortName = function (shortName) {\r\n                    var lst = $scope.customPaymentMethods.filter(function (el) {\r\n                        return el.loweredPaymentMethodName == shortName;\r\n                    });\r\n\r\n                    return lst.length > 0 ? lst[0] : null;\r\n                };\r\n\r\n                function getPaymentMethods() {\r\n                    configService.getPaymentMethods($scope);\r\n                }\r\n\r\n                $scope.isDiscountInvalid = function () {\r\n                    return saleService.isDiscountInvalid === true;\r\n                };\r\n\r\n                $scope.initSummaryValues = function () {\r\n                    // will be set to true if rounded cash == 0 and we should continue\r\n                    $scope.currentSale.processZero = false;\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if ($scope.saleType === 'standaloneExchange')\r\n                    {\r\n                        $scope.currentSale.GroupedSale =\r\n                        {\r\n                            TotalSurcharge: 0, /// ? // including refunded surcharges via cash/store credits\r\n                            GhostSurcharge: 0,\r\n                            TotalSale: 0, /// ?\r\n                            ExchangeAmount: 0,\r\n                            PaymentsMap: {},\r\n                            LoyaltyRefundCoeff: 1 // if we paid by loyalties it means that this sum didn't lead to loyalty accrual so during refund we should count this\r\n                        };\r\n                    }\r\n\r\n                    if ($scope.operationName === 'Exchange')\r\n                        saleService.addExchangeAmountToGroupedSale($scope.currentSale, $scope.posTaxInclucive);\r\n\r\n                    if (!isNewSale) {\r\n                        $scope.updateCheckoutProductPrice($scope.currentSale, true);\r\n                        $scope.currentSale.TotalForBackSide = $scope.totalSum($scope.currentSale);\r\n                        $scope.currentSale.Total = $scope.totalSum($scope.currentSale, true);\r\n                        saleService.updateBasePriceWithDiscount($scope.currentSale);\r\n                        saleService.updatePriceWithTax($scope.currentSale);\r\n                    }\r\n\r\n                    getPaymentMethods();\r\n\r\n                    $timeout(function () {\r\n                        fontMeasureService.fitFontSize('btnPayParent', 'btnPay', 13.5);\r\n                    }, 500);\r\n\r\n                    if (!isNewSale) {\r\n                        $scope.currentSale.SubTotal = $scope.subTotalSum($scope.currentSale.CheckoutItems, $scope.currentSale);\r\n                        $scope.currentSale.Balance = $scope.totalSum($scope.currentSale, true);\r\n                        $scope.currentSale.TotalSumWithTax = totalSumWithTax($scope.currentSale.CheckoutItems);\r\n                    }\r\n\r\n                    // if we already have customer.LoyaltyPoints - it means we continue so do not update values\r\n                    if (!isNewSale) {\r\n                        if (!$scope.currentSale.LoyaltyPoints || $scope.saleType === 'return') {\r\n                            $scope.currentSale.LoyaltyPointsTotal = saleService.calculateLoyaltyEx($scope.currentSale, $scope.currentSale.Total); // $scope.totalLoyaltyPoints($scope.currentSale.CheckoutItems);\r\n                            $scope.currentSale.LoyaltyPoints = 0;\r\n\r\n                            $scope.currentSale.CustomerLoyaltyPoints = $scope.currentSale.customer.LoyaltyPoints ? $scope.currentSale.customer.LoyaltyPoints : 0;\r\n                            $scope.currentSale.CustomerLoyaltyPointsUsed = 0;\r\n                        }\r\n                    } else {\r\n                        CalculatorHelperService.calculatePayments($scope.currentSale);\r\n                    }\r\n\r\n                    calculateSums();\r\n\r\n                    $scope.currentSale.DateNative = new Date();\r\n                    $scope.currentSale.Date = $scope.currentSale.DateNative.toDateString();\r\n\r\n                    var lastRegistryPiece = configService.lastRegistryID.split('-');\r\n\r\n                    if (!$scope.currentSale.ClearOrderNumber ||\r\n                        parseInt($scope.currentSale.ClearOrderNumber) < 1 ||\r\n                        $scope.saleType === 'standaloneReturn') {\r\n                        if ($scope.saleType !== 'standaloneReturn') {\r\n                            saleService.getNextSequence(configService.lastOutletID, configService.lastRegistryID).then(function (data) {\r\n\r\n                                $scope.currentSale.OrderNumber = (configService.registryPrefix ? configService.registryPrefix : \"\") +\r\n                                    data + (configService.registrySuffix ? configService.registrySuffix : \"\");\r\n                                $scope.currentSale.ClearOrderNumber = data;\r\n                                $scope.currentSale.Barcode = lastRegistryPiece[1] + \"-\" + Math.floor(Date.now() / 1000).toString(36) + \"-\" + parseInt(data, 10).toString(36);\r\n\r\n                                updateReceipt();\r\n                            });\r\n                        } else {\r\n\r\n                            $scope.currentSale.Barcode = lastRegistryPiece[1] + \"-\" +\r\n                                Math.floor(Date.now() / 1000).toString(36) + \"-\" +\r\n                                $scope.currentSale.OrderNumber.substring(Math.max(0, $scope.currentSale.OrderNumber.length - 5));\r\n                            updateReceipt();\r\n                        }\r\n                    } else {\r\n                        $scope.currentSale.Barcode = lastRegistryPiece[1] + \"-\" + Math.floor(Date.now() / 1000).toString(36) + \"-\" + parseInt($scope.currentSale.ClearOrderNumber, 10).toString(36);\r\n                        updateReceipt();\r\n                    }\r\n\r\n                    var total = Math.abs(helperService.DEARRound($scope.currentSale.Total, 2));\r\n                    if ($scope.currentSale.Total < 0) {\r\n                        if (!isNewSale) {\r\n                            if (Math.abs($scope.currentSale.paymentValidation.cashAmount) > total) {\r\n                                $scope.currentSale.paymentValidation.cashAmount = total;\r\n                            }\r\n                            if (Math.abs($scope.currentSale.paymentValidation.creditCardAmount) > total) {\r\n                                $scope.currentSale.paymentValidation.creditCardAmount = total;\r\n                            }\r\n                            if (Math.abs($scope.currentSale.paymentValidation.storeCreditAmount) > total) {\r\n                                $scope.currentSale.paymentValidation.storeCreditAmount = total;\r\n                            }\r\n                            if (Math.abs($scope.currentSale.paymentValidation.loyaltyPointsAmount) > total) {\r\n                                $scope.currentSale.paymentValidation.loyaltyPointsAmount = total;\r\n                            }\r\n\r\n                            $scope.paymentValidation.cashAmount = $scope.currentSale.paymentValidation.cashAmount;\r\n                            $scope.paymentValidation.storeCreditAmount = $scope.currentSale.paymentValidation.storeCreditAmount;\r\n                            $scope.paymentValidation.creditCardAmount = $scope.currentSale.paymentValidation.creditCardAmount;\r\n                            $scope.paymentValidation.cardPayments = $scope.currentSale.paymentValidation.cardPayments;\r\n                            $scope.paymentValidation.customPayments = $scope.currentSale.paymentValidation.customPayments;\r\n                            $scope.paymentValidation.loyaltyPointsAmount = $scope.currentSale.paymentValidation.loyaltyPointsAmount;\r\n\r\n                            $scope.payments = {\r\n                                cash: 0,\r\n                                creditCard: 0,\r\n                                storeCredit: 0,\r\n                                loyaltyPoints: 0\r\n                            };\r\n                        }\r\n\r\n                        $scope.changepPaymentAmount();\r\n\r\n                        if (!isNewSale) {\r\n                            saleService.prepareSurchargeLimits($scope.currentSale.GroupedSale, $scope.paymentValidation);\r\n                            saleService.recalcRefundSurcharges($scope.currentSale.GroupedSale, $scope.paymentValidation, $scope.payments);\r\n                        } else {\r\n                            $scope.paymentValidation = {\r\n                                cashAmount: 0,\r\n                                creditCardAmount: 0,\r\n                                storeCreditAmount: 0,\r\n                                loyaltyPointsAmount: 0,\r\n                                cashSurchargeAmount: 0,\r\n                                storeCreditSurchargeAmount: 0\r\n                            };\r\n\r\n                            $scope.paymentValidation.cashAmount = $scope.currentSale.paymentValidation.cashAmount;\r\n                            $scope.paymentValidation.storeCreditAmount = $scope.currentSale.paymentValidation.storeCreditAmount;\r\n                            $scope.paymentValidation.creditCardAmount = Math.abs($scope.formHolder.sumToPayLeft);// $scope.currentSale.paymentValidation.creditCardAmount;\r\n                            $scope.paymentValidation.cardPayments = $scope.currentSale.paymentValidation.cardPayments;\r\n                            $scope.paymentValidation.customPayments = $scope.currentSale.paymentValidation.customPayments;\r\n                            $scope.paymentValidation.loyaltyPointsAmount = $scope.currentSale.paymentValidation.loyaltyPointsAmount;\r\n\r\n                            if(!Array.isArray($scope.paymentValidation.customPayments)) {\r\n                                $scope.paymentValidation.customPayments = [];\r\n                            }\r\n\r\n                            if(!$scope.paymentValidation.cardPayments) {\r\n                                $scope.paymentValidation.cardPayments = {};\r\n                            }\r\n\r\n//                            $scope.paymentValidation.cardPayments = {};\r\n//                            $scope.paymentValidation.customPayments = [];\r\n\r\n                            $scope.payments = {\r\n                                cash: 0,\r\n                                creditCard: 0,\r\n                                storeCredit: 0,\r\n                                loyaltyPoints: 0,\r\n                                cashSurcharge: 0,\r\n                                storeCreditSurcharge: 0\r\n                            };\r\n                            var selectedItem = $scope.currentSale.SelectedItem;\r\n\r\n                            CalculatorHelperService.calculateRefundPayments($scope.currentSale, {\r\n                                selectedItem: selectedItem,\r\n                                paymentValidation: $scope.paymentValidation,\r\n                                operationSubName: $scope.operationSubName,\r\n                                payments: $scope.payments\r\n                            }, StartCalcLevel.RefundLimits);\r\n                        }\r\n\r\n                        showReturnPaymentsDialog();\r\n                    } else {\r\n                        if (loyaltyService.loyaltyEnabled)\r\n                            $scope.canChangeCustomer = false; // disable customer changes if LL is active. This is beause we can add LL discount only manually from checkout page\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        fontMeasureService.updateFontSize('payAmountParent', 'payAmount', 18);\r\n                        $timeout(function () {\r\n                            $rootScope.$broadcast('recalculate');\r\n                        }, 100);\r\n\r\n                    }, 100);\r\n                };\r\n\r\n                $scope.goPayment = function (checkAvailability) {\r\n\r\n                    if (!!configService.CanSaleRep) {\r\n                        var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                        var salesRepresentative = isNewSale ? $scope.currentSale.SalesRepresentative : $scope.currentSale.salesRepresentative;\r\n                        var isSalesRepresentativeExist = salesRepresentative && salesRepresentative.ID ? true : false;\r\n\r\n                        if ($scope.currentSale && !$scope.currentSale.ReturnID && !isSalesRepresentativeExist) {\r\n                            helperService.showErrorDialog({ title: gettextCatalog.getString('Error'), body: gettextCatalog.getString('Add the sale representative to the sale order') });\r\n                            return;\r\n                        }\r\n                    }\r\n\r\n                    if(!checkAvailability)\r\n                        checkAvailability = false;\r\n\r\n                    var pr = helperService.resolvePromise(true);\r\n\r\n                    if (loyaltyService.loyaltyEnabled)\r\n                        pr = pr.then(function () {\r\n                            return loyaltyService.getCustomerBalance($scope.currentSale.customer).then(function(r) {\r\n                                try {\r\n                                    updateReceipt();\r\n                                } catch (e) {\r\n                                    console.log(e);\r\n                                }\r\n\r\n                                return r;\r\n                            });\r\n                        });\r\n\r\n                    if (!configService.checkAvailabilityOnCheckout)\r\n                        checkAvailability = false;\r\n\r\n                    if (checkAvailability === true && $scope.operationName === 'Pay' && configService.isOnline === true) {\r\n\r\n                        pr = pr.then(function () {\r\n                            $.blockUI();\r\n                            return productsService.checkCheckoutProductsAvailability($scope.currentSale.CheckoutItems, configService.lastOutletID);\r\n                        }).then(function (resp) {\r\n                            $.unblockUI();\r\n                            if (resp.insufficient === true) {\r\n\r\n                                $scope.insufficientProducts = resp.insufficientProducts;\r\n                                $scope.insufficientQuantitySKUs = resp.insufficientQuantitySKUs;\r\n\r\n                                $scope.showCheckoutProductsAvailabilityInsufficientDialog();\r\n                            } else {\r\n                                $scope.goPayment();\r\n                            }\r\n                        }).catch(function (err) {\r\n                            $.unblockUI();\r\n                            $scope.goPayment();\r\n                        });\r\n                    } else {\r\n\r\n                        pr = pr.then(function (res) {\r\n                            $scope.cashMode = false;\r\n                            $scope.creditCardMode = false;\r\n                            $scope.formHolder.realCashSum = 0;\r\n\r\n                            helperService.storeCurrentSale($scope.currentSale, $scope);\r\n                            window.localStorage.setItem('continueSale', null);\r\n\r\n                            if ($scope.saleType === 'standaloneReturn') {\r\n\r\n                                if (!$scope.currentSale.customer || !$scope.currentSale.customer.ID) {\r\n                                    errorService.showError(gettextCatalog.getString(\"Please add a customer for this refund.\"));\r\n                                    return;\r\n                                }\r\n                            }\r\n\r\n                            if ($scope.saleType === 'standaloneExchange') {\r\n\r\n                                if (!$scope.currentSale.customer || !$scope.currentSale.customer.ID) {\r\n                                    errorService.showError(gettextCatalog.getString(\"Please add a customer for this exchange.\"));\r\n                                    return;\r\n                                }\r\n                            }\r\n\r\n                            $scope.currentSale.keepTotalDiscount = true;\r\n                            $scope.initSummaryValues();\r\n                            $scope.currentSale.keepTotalDiscount = false;\r\n                            $scope.mode = 'summary';\r\n                            $scope.showPaymentSection = 1;\r\n                            return helperService.resolvePromise(true);\r\n                        });\r\n\r\n                        return pr;\r\n                    }\r\n                };\r\n\r\n                $scope.noReceiptExchangeButtonDisabled = function(){\r\n                    return $scope.saleType === 'standaloneExchange' && !($scope.currentSale.CheckoutItems.some(x => x.Return) && $scope.currentSale.CheckoutItems.some(x => !x.Return));\r\n                }\r\n\r\n                $scope.showCheckoutProductsAvailabilityInsufficientDialog = function () {\r\n\r\n                    var $windowElement = $('#checkoutProductsAvailabilityInsufficientDialogPartial');\r\n                    helperService.showDialog($windowElement);\r\n                };\r\n\r\n                $scope.closeCheckoutProductsAvailabilityInsufficientDialog = function () {\r\n\r\n                    var $windowElement = $('#checkoutProductsAvailabilityInsufficientDialogPartial');\r\n                    helperService.closeDialog($windowElement);\r\n                };\r\n\r\n\r\n                function showReturnPaymentsDialog() {\r\n                    var $windowElement = $('#returnPaymentsDialogPartial');\r\n                    helperService.showDialog($windowElement);\r\n\r\n                    if ($scope.currentSale.IsFastRefund) {\r\n                        // set default refund sum to cash\r\n                        $timeout(function () {\r\n                            $scope.showRefundPaymentAmountDlg('cash', '#refundCashPaymentAmount', $scope.paymentValidation.cashAmount, true);\r\n                        });\r\n                    }\r\n\r\n                }\r\n\r\n                $scope.closeReturnPaymentsDialog = function () {\r\n                    var $windowElement = $('#returnPaymentsDialogPartial');\r\n                    helperService.closeDialog($windowElement);\r\n                };\r\n\r\n                $scope.amountRefundSums = function () {\r\n                    var sum = 0;\r\n                    if ($scope.payments) {\r\n                        if ($scope.payments.cash)\r\n                            sum += $scope.payments.cash;\r\n\r\n                        sum += cardPayService.sumAllCardPayments($scope.paymentValidation.cardPayments);\r\n\r\n                        if ($scope.payments.storeCredit)\r\n                            sum += $scope.payments.storeCredit;\r\n\r\n                        if ($scope.payments.loyaltyPoints)\r\n                            sum += $scope.payments.loyaltyPoints;\r\n                    }\r\n\r\n                    if (!!$scope.paymentValidation && !!$scope.paymentValidation.customPayments &&\r\n                        $scope.paymentValidation.customPayments.length > 0) {\r\n                        angular.forEach($scope.paymentValidation.customPayments, function (p) {\r\n                            sum += p.amount;\r\n                        });\r\n                    }\r\n\r\n                    return helperService.DEARRound(sum, 2);\r\n                };\r\n\r\n                $scope.refundPaymentAmountDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n                $scope.refundDialogItem = {\r\n                    Amount: 0,\r\n                    Type: '',\r\n                    elementId: null\r\n                };\r\n\r\n                $scope.showRefundPaymentAmountDlg = function (paymentType, elementId, sumLimit, skipDialog) {\r\n                    $scope.refundDialogItem.Type = paymentType;\r\n                    $scope.refundDialogItem.elementId = elementId.substr(1);\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                    var sumRest = 0;\r\n\r\n                    if (!isNewSale)\r\n                        sumRest = ($scope.totalSum($scope.currentSale, true) * -1) - $scope.amountRefundSums() + $scope.currentSale.FullReturnRounding;\r\n                    else\r\n                        sumRest = $scope.currentSale.RemainingToRefund + $scope.currentSale.FullReturnRounding;\r\n\r\n                    if (!!sumLimit) {\r\n                        if (Number(sumLimit) < sumRest)\r\n                            sumRest = sumLimit;\r\n                    }\r\n\r\n                    saleService.setPaymentLimits($scope, paymentType, sumRest);\r\n\r\n                    if (!skipDialog) {\r\n                        $timeout(function () {\r\n                            $scope.refundPaymentAmountDlg.show(elementId);\r\n                        });\r\n                    } else {\r\n                        $scope.setRefundAmount(true, true);\r\n                    }\r\n\r\n                };\r\n\r\n                $scope.changepPaymentAmount = function () {\r\n                    $scope.showRefundPaymentsAmountError = false;\r\n                    $scope.showRefundExactPaymentsAmountError = false;\r\n                };\r\n\r\n                // callback\r\n                $scope.setRefundAmount = function (prm, skipDialog) {\r\n                    saleService.setRefundAmount($scope, prm, $scope.posTaxInclucive, skipDialog);\r\n                };\r\n\r\n\r\n                $scope.amountSums = function () {\r\n                    var sum = 0;\r\n                    if ($scope.payments) {\r\n                        if ($scope.payments.cash)\r\n                            sum += $scope.payments.cash;\r\n                        if ($scope.payments.creditCard)\r\n                            sum += $scope.payments.creditCard;\r\n\r\n                        if ($scope.payments.storeCredit)\r\n                            sum += $scope.payments.storeCredit;\r\n\r\n                        if ($scope.payments.loyaltyPoints)\r\n                            sum += $scope.payments.loyaltyPoints;\r\n                    }\r\n\r\n                    if (!!$scope.paymentValidation && !!$scope.paymentValidation.customPayments &&\r\n                        $scope.paymentValidation.customPayments.length > 0) {\r\n                        angular.forEach($scope.paymentValidation.customPayments, function (p) {\r\n                            sum += p.amount;\r\n                        });\r\n                    }\r\n\r\n                    return helperService.DEARRound(sum, 2);\r\n                };\r\n\r\n                $scope.submitSelectReturnPayments = function () {\r\n                    var d = $q.defer();\r\n                    d.resolve(null);\r\n                    var p = d.promise;\r\n\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if (!isNewSale) {\r\n                        saleService.calculateRefundSurcharges($scope.currentSale);\r\n                        //        var sum = $scope.amountSums();\r\n                        //        var total = helperService.DEARRound($scope.totalSum($scope.currentSale, true) * -1, 2);\r\n                    }\r\n\r\n                    $scope.refundPaymentsError = [];\r\n                    $scope.showRefundExactPaymentsAmountError = false;\r\n                    if ($scope.payments.cash < 0 || $scope.payments.cash > $scope.paymentValidation.cashAmount) {\r\n                        $scope.refundPaymentsError.push(gettextCatalog.getString(\"Cash payment amount should be between 0 and \") + $scope.paymentValidation.cashAmount);\r\n                        $scope.showRefundExactPaymentsAmountError = true;\r\n                    }\r\n\r\n                    if (!!$scope.paymentValidation.customPayments) {\r\n                        angular.forEach($scope.paymentValidation.customPayments, function (p) {\r\n                            if (p.amount < 0 || p.amount > p.validationAmount) {\r\n                                $scope.refundPaymentsError.push(gettextCatalog.getString(p.customPaymentName + \" amount should be between 0 and \") + p.validationAmount);\r\n                                $scope.showRefundExactPaymentsAmountError = true;\r\n                            }\r\n                        });\r\n                    }\r\n\r\n                    var hasErrors = cardPayService.validateCardRefunds($scope.paymentValidation.cardPayments, $scope.refundPaymentsError);\r\n                    if (hasErrors)\r\n                        $scope.showRefundExactPaymentsAmountError = true;\r\n                    else if ($scope.payments.creditCard < 0 || $scope.payments.creditCard > $scope.paymentValidation.creditCardAmount) {\r\n                        $scope.refundPaymentsError.push(gettextCatalog.getString(\"Credit card payment amount should be between 0 and \") + $scope.paymentValidation.creditCardAmount);\r\n                        $scope.showRefundExactPaymentsAmountError = true;\r\n                    }\r\n\r\n                    if ($scope.payments.storeCredit < 0 || $scope.payments.storeCredit > $scope.paymentValidation.storeCreditAmount) {\r\n                        $scope.refundPaymentsError.push(gettextCatalog.getString(\"Store credit payment amount should be between 0 and \") + $scope.paymentValidation.storeCreditAmount);\r\n                        $scope.showRefundExactPaymentsAmountError = true;\r\n                    }\r\n\r\n                    if ($scope.payments.loyaltyPoints < 0 || $scope.payments.loyaltyPoints > $scope.paymentValidation.loyaltyPointsAmount) {\r\n                        $scope.refundPaymentsError.push(gettextCatalog.getString(\"Loyalty point amount should be between 0 and \") + $scope.paymentValidation.loyaltyPointsAmount);\r\n                        $scope.showRefundExactPaymentsAmountError = true;\r\n                    }\r\n\r\n                    if ($scope.showRefundExactPaymentsAmountError === false) {\r\n                        var remainingToRefund = $scope.getRemainingToRefund(true);\r\n                        var selectedToRefund = 0;\r\n\r\n                        if (!isNewSale) {\r\n                            selectedToRefund = $scope.amountSums();\r\n                        }\r\n\r\n                        if (selectedToRefund > remainingToRefund) {\r\n                            $scope.refundPaymentsError.push(gettextCatalog.getString(\"Refund amount cannot be more than \") + $filter('currency')(helperService.DEARRound(remainingToRefund, 2)));\r\n                            $scope.showRefundExactPaymentsAmountError = true;\r\n                        } else if (remainingToRefund != selectedToRefund && $scope.saleType === 'standaloneReturn') {\r\n                            $scope.refundPaymentsError.push(gettextCatalog.getString(\"Remaining to refund amount must be equal to zero. Please fill in the cash or store credit refund amount.\"));\r\n                            $scope.showRefundExactPaymentsAmountError = true;\r\n                        }\r\n                    }\r\n\r\n                    if ($scope.showRefundExactPaymentsAmountError === false) {\r\n                        getPaymentMethods();\r\n                        if (!isNewSale) {\r\n\r\n                            if ($scope.operationSubName !== 'continue') {\r\n                                $scope.currentSale.Total = $scope.totalSum($scope.currentSale, true);\r\n                                $scope.currentSale.TotalSumWithTax = totalSumWithTax($scope.currentSale.CheckoutItems);\r\n                                $scope.currentSale.LoyaltyPoints = saleService.calculateLoyaltyEx($scope.currentSale, $scope.currentSale.Total);\r\n                                $scope.currentSale.LoyaltyPointsTotal = saleService.calculateLoyaltyEx($scope.currentSale, $scope.currentSale.Total);\r\n                                $scope.currentSale.SubTotal = $scope.subTotalSum($scope.currentSale.CheckoutItems, $scope.currentSale);\r\n\r\n                                $scope.currentSale.Payments = [];\r\n\r\n                            }\r\n                        }\r\n\r\n                        $scope.closeReturnPaymentsDialog();\r\n                        $scope.errorMessage = null;\r\n                        $.blockUI();\r\n\r\n\r\n                        // START Cash Rounding\r\n                        // calculate cash rounding and send to the server with first payment\r\n                        // avoid to lose rounding in SIM module\r\n\r\n                        $scope.currentSale.LoyaltyUpdate = 0;\r\n\r\n                        if ($scope.payments.cash + $scope.payments.cashSurcharge) {\r\n                            cashRefundPay($scope.payments.cash + $scope.payments.cashSurcharge, false);\r\n                        }\r\n\r\n                        if (!isNewSale) {\r\n                            if ($scope.saleType !== 'standaloneReturn') {\r\n                                if ($scope.currentSale.CashRounding === 0) {\r\n                                    $scope.currentSale.CashRounding = $scope.currentSale.FullReturnRounding;\r\n                                }\r\n                            } else {\r\n                                $scope.currentSale.FullReturnRounding = $scope.currentSale.CashRounding;\r\n                            }\r\n                        } else {\r\n                            $scope.currentSale.FullReturnRounding = 0;\r\n                        }\r\n\r\n                        // END Cash Rounding\r\n\r\n                        // always return card first\r\n                        if ($scope.payments.creditCard) {\r\n                            angular.forEach($scope.paymentValidation.cardPayments, function (pay) {\r\n                                if (pay.amount != 0) {\r\n\r\n                                    if (!!pay.Surcharge) {\r\n                                        pay.amount += pay.Surcharge.AmountToRefund;\r\n                                        pay.Surcharge.isAddedToPayment = true;\r\n                                    }\r\n\r\n                                    p = p.then(function () {\r\n                                        return creditCardRefundPay(pay);\r\n                                    });\r\n                                }\r\n                            });\r\n                        }\r\n\r\n                        p = p.then(function (res) {\r\n                            if ($scope.paymentValidation.customPayments) {\r\n                                angular.forEach($scope.paymentValidation.customPayments, function (pay) {\r\n                                    if (pay.amount != 0)\r\n                                        $scope.customPayRet(pay);\r\n                                });\r\n                            }\r\n\r\n                            let needOpenCashDrawer = false;\r\n\r\n                            if ($scope.payments.cash + $scope.payments.cashSurcharge) {\r\n                                needOpenCashDrawer = true;\r\n                                cashRefundPay($scope.payments.cash + $scope.payments.cashSurcharge, true);\r\n                                if (isNewSale) {\r\n                                    if ($scope.currentSale.CashRounding)\r\n                                        $scope.currentSale.CashRounding *= -1; // this is the effect of always positive sums in exchange with refund in this code\r\n                                }\r\n\r\n                                if ($scope.payments.cashSurcharge) {\r\n                                    saleService.createGhostSurchargeToRefund($scope.currentSale, 'cash', $scope.payments.cashSurcharge,\r\n                                        $scope.payments.cash + $scope.payments.cashSurcharge, null, null, null, true);\r\n                                }\r\n                            }\r\n\r\n                            if ($scope.payments.storeCredit + $scope.payments.storeCreditSurcharge) {\r\n                                storeCreditsRefundPay($scope.payments.storeCredit + $scope.payments.storeCreditSurcharge);\r\n\r\n                                if ($scope.payments.storeCreditSurcharge) {\r\n                                    saleService.createGhostSurchargeToRefund($scope.currentSale, 'store credits', $scope.payments.storeCreditSurcharge,\r\n                                        $scope.payments.storeCredit + $scope.payments.storeCreditSurcharge, null, null, null, true);\r\n                                }\r\n                            }\r\n\r\n                            if ($scope.payments.loyaltyPoints) {\r\n                                loyaltyPointsRefundPay($scope.payments.loyaltyPoints);\r\n                            }\r\n\r\n                            updateReceipt();\r\n\r\n                            if (needOpenCashDrawer) {\r\n                                return printService.openCashDrawer().catch(function(err) {\r\n                                    console.log(err);\r\n                                    helperService.showError(err);\r\n                                }).finally(function() {\r\n                                    return compliteSale();\r\n                                });\r\n                            }\r\n\r\n                            return compliteSale();\r\n                        });\r\n                    }\r\n\r\n                    p = p.catch(function (err) {\r\n                        $.unblockUI();\r\n                        if (typeof (err.message) == 'string')\r\n                            errorService.showError(err.message);\r\n                        else\r\n                            errorService.showError(err.response.errorDescription);\r\n                    }).finally(function () {\r\n                        $.unblockUI();\r\n                    });\r\n\r\n                    return p;\r\n                };\r\n\r\n                function cashRefundPay(enteredAmount, addPayment) {\r\n                    var amount = helperService.DEARRound(parseFloat(enteredAmount), 2);\r\n\r\n                    var roundedAmount = helperService.roundCash(amount);\r\n\r\n                    var cashRounding = helperService.DEARRound(roundedAmount - amount, 2);\r\n                    $scope.currentSale.CashRounding = cashRounding;\r\n\r\n                    if (addPayment == true) {\r\n                        addPaymentToRefund($scope.cashRegistryPaymentProcessorID, roundedAmount, 'Cash', true, 'cash');\r\n                    }\r\n                }\r\n\r\n                function creditCardRefundPay(refund) {\r\n                    // addPaymentToRefund($scope.creditCardPaymentProcessorID, amount, 'Credit Card', true, 'credit card');\r\n                    var SCOPE = $scope;\r\n                    var refunds = {};\r\n                    refunds[refund.id] = refund;\r\n\r\n                    return cardPayService.refund($scope.currentSale, refunds, $scope, {\r\n                            OrderNumber: $scope.currentSale.ClearOrderNumber,\r\n                            receiptCallback: function (code, text, p) {\r\n                                return printService.printAdditionalReceipts(SCOPE, code, text, p);\r\n                            },\r\n                            Currency: configService.currency\r\n                        })\r\n                        .then(function (res) {\r\n                            var el = res[0];\r\n\r\n                            if (el.result) {\r\n\r\n                                if (!!el.Surcharge) {\r\n                                    addSurchargeToRefund(el.Surcharge, el.amount, el.ServerTransactionID, el.ClientTransactionID, el.SaleServerTransactionID);\r\n                                }\r\n\r\n                                addPaymentToRefund($scope.creditCardPaymentProcessorID, el.amount, 'Credit Card', true, 'credit card',\r\n                                    el.ServerTransactionID, el.ClientTransactionID, el.SaleServerTransactionID, el.TransactionMetaData, el.Surcharge);\r\n                                return compliteSale(true);\r\n                            } else {\r\n                                var deferred2 = $q.defer();\r\n                                if (!el.message)\r\n                                    el.message = gettextCatalog.getString('Error processing the card: ') + el.cardType + ' ' + el.cardPAN;\r\n                                $scope.errorMessage += '<br/>' + el.message;\r\n\r\n                                deferred2.resolve(true);\r\n                                return deferred2.promise;\r\n                            }\r\n                        });\r\n\r\n                    // res - array of processed refunds. for each add payment\r\n                    //var deferred2 = $q.defer();\r\n                    //deferred2.resolve({ refundedSum: refundedSum, errorMessage: errorMessage });\r\n                    //return deferred2.promise;\r\n                    // });\r\n                }\r\n\r\n                function storeCreditsRefundPay(amount) {\r\n                    addPaymentToRefund($scope.storeCreditsPaymentProcessorID, amount, 'Store Credits', false, 'store credits');\r\n\r\n                }\r\n\r\n                function loyaltyPointsRefundPay(amount) {\r\n                    addPaymentToRefund($scope.loyaltyPaymentProcessorID, amount, 'Loyalty Points', true, 'loyalty');\r\n                }\r\n\r\n                function addPaymentToRefund(PaymentProcessorID, Amount, PaymentTypeName, earnLoyalty, paymentShortName, serverTransactionID,\r\n                    clientTransactionID, saleServerTransactionID, transactionData, surcharge) {\r\n                    Amount = helperService.DEARRound(parseFloat(Amount), 2) * -1;\r\n\r\n                    $scope.currentSale.Balance = 0;\r\n\r\n                    var loyalty = 0;\r\n                    var surchargeAmount = 0;\r\n                    var surchargeTaxAmount = 0;\r\n                    if (surcharge && surcharge.isAddedToPayment != true) {\r\n                        surchargeAmount = surcharge.CalculatedValue;\r\n                        surchargeTaxAmount = $scope.posTaxInclucive ? 0 : surcharge.Tax;\r\n                    }\r\n\r\n                    //$scope.currentSale.customer.LoyaltyPoints += loyalty;\r\n                    var payment = {\r\n                        ID: uuid2.newguid(),\r\n                        PaymentProcessorID: PaymentProcessorID,\r\n                        Amount: Amount + surchargeAmount + surchargeTaxAmount,\r\n                        Date: moment.utc(),\r\n                        ShortName: paymentShortName,\r\n                        PaymentTypeName: PaymentTypeName,\r\n                        Loyalty: loyalty,\r\n                        ServerTransactionID: serverTransactionID,\r\n                        ClientTransactionID: clientTransactionID,\r\n                        SaleServerTransactionID: saleServerTransactionID,\r\n                        Surcharge: surcharge\r\n                    };\r\n\r\n                    if (!!transactionData) {\r\n                        payment.TransactionMetaData = transactionData;\r\n                    }\r\n\r\n                    if (payment.Surcharge)\r\n                        payment.Surcharge.PaymentID = payment.ID;\r\n\r\n                    $scope.currentSale.Payments.push(payment);\r\n                    $scope.lastPaymentID = payment.ID; // to remove it when payment was not happen (excluding card payment)\r\n\r\n                    if ($scope.currentSale.returnLoyaltyPoints) {\r\n                        var c = 1;\r\n                        if ($scope.currentSale.GroupedSale)\r\n                            c = $scope.currentSale.GroupedSale.LoyaltyRefundCoeff;\r\n\r\n                        loyalty = saleService.calculateLoyaltyEx($scope.currentSale, Amount * c);\r\n                    }\r\n\r\n                    payment.Loyalty = loyalty;\r\n                    $scope.currentSale.LoyaltyUpdate += loyalty;\r\n\r\n                    if (paymentShortName === \"loyalty\") {\r\n                        //            $scope.currentSale.CustomerLoyaltyPointsUsed = loyalty;\r\n                        $scope.currentSale.CustomerLoyaltyPointsUsed = Amount;\r\n                    }\r\n\r\n                    return payment;\r\n                }\r\n\r\n                function addSurchargeToRefund(surcharge, paymentAmount, serverTransactionID, clientTransactionID, saleServerTransactionID, ignoreTransactions) {\r\n\r\n                    surcharge.CalculatedValue = -1 * helperService.DEARRound(surcharge.AmountToRefund - ($scope.posTaxInclucive ? 0 : surcharge.TaxToRefund), 2);\r\n                    surcharge.Tax = -1 * surcharge.TaxToRefund;\r\n                    surcharge.PaymentRealAmount = paymentAmount;\r\n                    surcharge.CalculatedValueWithTax = $scope.posTaxInclucive ? surcharge.CalculatedValue : (surcharge.CalculatedValue + surcharge.Tax);\r\n                    if (ignoreTransactions !== true) {\r\n                        surcharge.ServerTransactionID = serverTransactionID;\r\n                        surcharge.ClientTransactionID = clientTransactionID;\r\n                        surcharge.SaleServerTransactionID = saleServerTransactionID;\r\n                    }\r\n\r\n                    delete surcharge.AmountToRefund;\r\n                    delete surcharge.TaxToRefund;\r\n\r\n                    $scope.currentSale.Surcharges.push(surcharge);\r\n\r\n                    $scope.currentSale.Total = $scope.totalSum($scope.currentSale, true);\r\n                    $scope.currentSale.TotalSumWithTax = totalSumWithTax($scope.currentSale.CheckoutItems);\r\n                }\r\n\r\n                function calculateSums() {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if (!isNewSale)\r\n                        $scope.formHolder.sumToPayLeft = helperService.DEARRound(parseFloat($scope.totalSum($scope.currentSale, true)), 2);\r\n                    else\r\n                        $scope.formHolder.sumToPayLeft = $scope.currentSale.Total;\r\n\r\n                    $scope.formHolder.sumToPayLeft = helperService.DEARRound(saleService.calcRemainingDue($scope.currentSale), 2);\r\n                    if ($scope.saleType !== 'return' && $scope.saleType !== 'standaloneReturn') {\r\n                        // standard non exchange operation.\r\n                        // make sum >=0\r\n                        if ($scope.formHolder.sumToPayLeft < 0)\r\n                            $scope.formHolder.sumToPayLeft = 0;\r\n                    }\r\n\r\n                    $scope.formHolder.realSum = $scope.formHolder.sumToPayLeft.toFixed(2);\r\n\r\n                    var amount = Math.abs($scope.formHolder.sumToPayLeft);\r\n\r\n                    $scope.paymentValidation.cashAmount = helperService.roundCash(amount);\r\n                    $scope.paymentValidation.creditCardAmount = amount;\r\n                    $scope.paymentValidation.giftCardAmount = amount;\r\n                    $scope.paymentValidation.loyaltyPointsAmount = amount;\r\n                    $scope.paymentValidation.storeCreditAmount = amount;\r\n                    $scope.paymentValidation.customPayAmount = amount;\r\n\r\n                    if ($scope.saleType === 'standaloneReturn' || $scope.saleType === 'standaloneExchange') {\r\n\r\n                        let operationCode = $scope.saleType === 'standaloneReturn' ? 'standalone_refund' : 'standalone_exchange';\r\n\r\n                        $scope.currentSale.paymentValidation = {\r\n                            cashAmount: $scope.paymentValidation.cashAmount,\r\n                            creditCardAmount: $scope.paymentValidation.cashAmount,\r\n                            giftCardAmount: 0,\r\n                            loyaltyPointsAmount: 0,\r\n                            storeCreditAmount: amount,\r\n                            cardPayments: {},\r\n                            customPayments: {}\r\n                        };\r\n\r\n                        if (!$scope.currentSale.ReturnPayments)\r\n                            $scope.currentSale.ReturnPayments = [];\r\n\r\n                        var fakePayments = $scope.currentSale.ReturnPayments.filter(function (rp) {\r\n                            return rp.ShortName === \"credit card\";\r\n                        });\r\n                        var fakePayment = {};\r\n                        if (fakePayments.length > 0)\r\n                            fakePayment = fakePayments[0];\r\n                        else {\r\n                            var id = uuid2.newguid();\r\n                            var prc = configService.getCardPaymentProcessor();\r\n                            fakePayment.ID = id;\r\n                            fakePayment.PaymentProcessorID = !prc ? null : prc.paymentProcessorID;\r\n                            fakePayment.PaymentTypeName = \"Credit Card\";\r\n                            fakePayment.Reference = null;\r\n                            fakePayment.ServerTransactionID = id;\r\n                            fakePayment.ClientTransactionID = operationCode;\r\n                            fakePayment.ShortName = \"credit card\";\r\n                            fakePayment.TransactionMetaData = \"non integrated card payment\";\r\n                            $scope.currentSale.ReturnPayments.push(fakePayment);\r\n                        }\r\n\r\n                        $scope.paymentValidation.creditCardAmount = $scope.paymentValidation.cashAmount;\r\n                        cardPayService.addSumToCardPayment($scope.currentSale.paymentValidation.cardPayments, fakePayment.ID,\r\n                            operationCode, $scope.paymentValidation.cashAmount, null);\r\n                        fakePayment.Amount = $scope.paymentValidation.cashAmount;\r\n                    }\r\n                }\r\n\r\n                $('#sellPartialView').on('shown.bs.collapse', function () {\r\n                    $rootScope.$broadcast('scroll.wrapper.resize');\r\n                });\r\n\r\n                $scope.forceHeightRecalc = function () {\r\n                    $rootScope.$broadcast('scroll.wrapper.resize');\r\n                };\r\n\r\n                $scope.goBack = function (hasPayments) {\r\n                    //if (!!$scope.initialCurrentSale) {\r\n                    //    $scope.currentSale = angular.copy($scope.initialCurrentSale);\r\n                    //    $scope.initialCurrentSale = null;\r\n                    //}\r\n\r\n                    $scope.showPaymentSection = 0;\r\n                    $scope.mode = 'sell';\r\n                    $scope.canDiscardSale = true;\r\n\r\n                    if (hasPayments === true) {\r\n                        $scope.markSaleAsPayOnly();\r\n                        $scope.subType = true;\r\n                    } else if (loyaltyService.isLoyaltyEnabled()) {\r\n                        $scope.canChangeCustomer = true;\r\n                    }\r\n\r\n                    //$timeout(function () {\r\n                        secondTerminalService.update($scope, 'sale');\r\n                    //});\r\n                };\r\n\r\n\r\n\r\n                $scope.sendEmailReceipt = function () {\r\n                    $.blockUI();\r\n\r\n//                    var emailBody = $('div[show-data] > .ng-scope').html();\r\n                    var emailBody = emailService.setEmailToken('div[email-template] > .ng-scope').html();\r\n                    var documentBody = $('div[receipt-template] > .ng-scope').html();\r\n                    if (!documentBody) {\r\n                        documentBody = $('div.receipt-template div[receipt-template] > .ng-scope').html();\r\n                    }\r\n                    var emailSubject = $scope.receiptEmailSubject;\r\n                    //        var email = $scope.receiptHolder.receiptForm.receiptEmail.$viewValue;\r\n                    var email = $scope.email.receiptEmail;\r\n\r\n                    var orders = emailService.extractOrderIDs($scope.currentSale);\r\n                    emailService.sendEmailReceipt(orders.orderID, orders.baseOrderID, email, emailSubject, emailBody, false, $scope.receiptTemplateID, documentBody)\r\n                        .then(function (result) {\r\n                            // show message box about sending result\r\n                            $.unblockUI();\r\n                            if (result.Result == true) {\r\n                                $scope.sentToEmail = email;\r\n\r\n                                var $windowElement = $('#receiptSentToEmail');\r\n                                helperService.showDialog($windowElement);\r\n\r\n                                $scope.closeReceiptEmailDialog = function () {\r\n                                    var $windowElement = $('#receiptSentToEmail');\r\n                                    helperService.closeDialog($windowElement);\r\n                                };\r\n                                $scope.emailSent = true;\r\n                            } else {\r\n                                var $windowElement = $('#receiptSentToEmailError');\r\n                                helperService.showDialog($windowElement);\r\n\r\n                                $scope.closeReceiptEmailDialog = function () {\r\n                                    var $windowElement = $('#receiptSentToEmailError');\r\n                                    helperService.closeDialog($windowElement);\r\n                                };\r\n                            }\r\n                        }, function (err) {\r\n                            $.unblockUI();\r\n                            var txt = gettextCatalog.getString(\"Error sending email.\");\r\n                            if (!!err.data && err.data.length > 0 && !!err.data[0].Exception)\r\n                                txt = err.data[0].Exception;\r\n\r\n                            errorService.showError(!!err.data ? err.data : txt);\r\n                        });\r\n                };\r\n\r\n\r\n                $scope.payAmountChanged = function () {\r\n                    $scope.isValidAmount = true;\r\n                };\r\n\r\n                $scope.hasPaidLines = function () {\r\n                    return !!$scope.currentSale.Payments && $scope.currentSale.Payments.length > 0;\r\n                };\r\n\r\n                function buildPendingPaymentKey(paymentProcessorID, paymentShortName, amount, reference) {\r\n                    var normalizedAmount = helperService.DEARRound(parseFloat(amount || 0), 2).toFixed(2);\r\n                    var saleKey = ($scope.currentSale && ($scope.currentSale.OperationID || $scope.currentSale.ID)) || '';\r\n                    return [saleKey, paymentShortName || '', paymentProcessorID || '', normalizedAmount, reference || ''].join('|');\r\n                }\r\n\r\n                function getOrCreatePendingPaymentId(paymentKey) {\r\n                    if (!$scope.pendingPaymentRegistry) {\r\n                        $scope.pendingPaymentRegistry = {};\r\n                    }\r\n\r\n                    if (!$scope.pendingPaymentRegistry[paymentKey]) {\r\n                        $scope.pendingPaymentRegistry[paymentKey] = uuid2.newguid();\r\n                    }\r\n\r\n                    return $scope.pendingPaymentRegistry[paymentKey];\r\n                }\r\n\r\n                function clearPendingPaymentId(paymentKey) {\r\n                    if ($scope.pendingPaymentRegistry && paymentKey) {\r\n                        delete $scope.pendingPaymentRegistry[paymentKey];\r\n                    }\r\n                }\r\n\r\n                function clearAllPendingPaymentIds() {\r\n                    $scope.pendingPaymentRegistry = {};\r\n                }\r\n\r\n                function addPaymentToSaleObject(PaymentProcessorID, Amount, PaymentTypeName, earnLoyalty, paymentShortName, reference, surcharge) {\r\n                    if ($scope.paymentActionInProgress === true) {\r\n                        var blockedDeferred = $q.defer();\r\n                        blockedDeferred.resolve(null);\r\n                        return blockedDeferred.promise;\r\n                    }\r\n\r\n                    $scope.paymentActionInProgress = true;\r\n\r\n                    try {\r\n                        helperService.storeCurrentSale(null);\r\n\r\n                        var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                        if (Amount == 0) {\r\n                            if ($scope.formHolder.realSum == 0 &&\r\n                                $scope.formHolder.sumToPayLeft.toFixed(2) == 0) {\r\n\r\n                                //Additional validation for sale payment\r\n                                var paidAmount = 0;\r\n                                $.each($scope.currentSale.Payments, function (idx, el) {\r\n                                    paidAmount += el.Amount;\r\n                                });\r\n\r\n                                if (helperService.DEARRound($scope.currentSale.Balance, 2) != helperService.DEARRound($scope.currentSale.Total - paidAmount, 2)) {\r\n                                    console.log($scope.currentSale.Balance);\r\n                                    console.log($scope.currentSale.Total);\r\n                                    console.log(paidAmount);\r\n                                    var error = gettextCatalog.getString(\"Something went wrong, please try again.\");\r\n                                    errorService.showError(error);\r\n\r\n                                    var surcharges = [];\r\n                                    if ($scope.currentSale.Surcharges) {\r\n                                        $.each($scope.currentSale.Payments, function (idp, p) {\r\n                                            if (p.Surcharge) {\r\n                                                surcharges.push(p.Surcharge);\r\n                                            }\r\n                                        });\r\n\r\n                                        $scope.currentSale.Surcharges = surcharges;\r\n                                    }\r\n\r\n                                    calculateSums();\r\n                                    updateReceipt();\r\n                                    $scope.paymentActionInProgress = false;\r\n                                    return null;\r\n                                }\r\n\r\n                                // synchronize sums\r\n                                calculateSums();\r\n                                $scope.canDiscardSale = false;\r\n                                updateReceipt();\r\n                                $scope.paymentActionInProgress = false;\r\n                                return compliteSale(false);\r\n                            }\r\n\r\n                            $scope.formHolder.realSum = $scope.formHolder.sumToPayLeft.toFixed(2);\r\n                            $scope.paymentActionInProgress = false;\r\n                            return;\r\n                        }\r\n\r\n                        Amount = helperService.DEARRound(parseFloat(Amount), 2);\r\n\r\n                        if (!$scope.currentSale.Payments || $scope.currentSale.Payments.length == 0)\r\n                            $scope.currentSale.CashRounding = 0;\r\n\r\n                        $scope.isValidAmount = true;\r\n                        $scope.invalidPaymentAmount = '';\r\n                        var allSummPaid = false;\r\n                        var pt = paymentShortName;\r\n                        //if (!!paymentShortName && paymentShortName.indexOf('giftcard_' + PaymentProcessorID) == 0) {\r\n                        //    pt = 'gift card';\r\n                        //}\r\n                        $scope.lastCashRounding = $scope.currentSale.CashRounding; // this will be restored if payments was no happen\r\n\r\n                        switch (pt) {\r\n                            case 'cash':\r\n                                var amountToCheck = helperService.roundCash(Amount);\r\n\r\n                                if (amountToCheck >= $scope.paymentValidation.cashAmount) {\r\n                                    allSummPaid = true;\r\n                                    var cashRounding = helperService.DEARRound($scope.paymentValidation.cashAmount - $scope.formHolder.sumToPayLeft, 6);\r\n                                    $scope.currentSale.CashRounding = helperService.DEARRound($scope.currentSale.CashRounding + cashRounding, 6);\r\n                                    if (amountToCheck > $scope.paymentValidation.cashAmount) {\r\n                                        $scope.currentSale.CashChangeAmount = helperService.DEARRound(Amount - $scope.paymentValidation.cashAmount, 4);\r\n                                    }\r\n                                    // if (Amount > $scope.formHolder.sumToPayLeft) {\r\n                                    //     $scope.currentSale.CashChangeAmount = Amount - $scope.formHolder.sumToPayLeft; // to include current rounding\r\n                                    // }\r\n\r\n                                    Amount = $scope.paymentValidation.cashAmount;\r\n                                }\r\n                                break;\r\n                            case 'credit card':\r\n                                if (!($scope.restoredSaleObj && $scope.restoredSaleObj.payment)) {\r\n                                    if (Amount > $scope.paymentValidation.creditCardAmount) {\r\n                                        $scope.isValidAmount = false;\r\n                                        $scope.invalidPaymentAmount = gettextCatalog.getString(\"The payment amount is more than the sales amount.\");\r\n                                    }\r\n                                }\r\n                                break;\r\n                            case 'gift card':\r\n                                if (Amount > $scope.paymentValidation.giftCardAmount) {\r\n                                    $scope.isValidAmount = false;\r\n                                    $scope.invalidPaymentAmount = gettextCatalog.getString(\"The payment amount is more than the sales amount.\");\r\n                                }\r\n                                break;\r\n                            case 'loyalty':\r\n                                if (Amount > $scope.paymentValidation.loyaltyPointsAmount) {\r\n                                    $scope.isValidAmount = false;\r\n                                    $scope.invalidPaymentAmount = gettextCatalog.getString(\"The payment amount is more than the sales amount.\");\r\n                                } else {\r\n                                    $scope.currentSale.CustomerLoyaltyPointsUsed += Amount;\r\n                                }\r\n                                break;\r\n                            case 'store credits':\r\n                                if (Amount > $scope.paymentValidation.storeCreditAmount) {\r\n                                    $scope.isValidAmount = false;\r\n                                    $scope.invalidPaymentAmount = gettextCatalog.getString(\"The payment amount is more than the sales amount.\");\r\n                                }\r\n                                break;\r\n                            default:\r\n                                if (Amount > $scope.paymentValidation.customPayAmount) {\r\n                                    $scope.isValidAmount = false;\r\n                                    $scope.invalidPaymentAmount = gettextCatalog.getString(\"The payment amount is more than the sales amount.\");\r\n                                }\r\n                                break;\r\n                        }\r\n\r\n                        if ($scope.isValidAmount === false) {\r\n                            $scope.paymentActionInProgress = false;\r\n                            return;\r\n                        }\r\n\r\n                        if ($scope.operationName === 'Exchange' && Amount >= 0 && !!$scope.currentSale.ReturnPayments)\r\n                            $scope.currentSale.ReturnPayments = [];\r\n\r\n                        if (!isNewSale)\r\n                            $scope.formHolder.sumToPayLeft = helperService.DEARRound(parseFloat($scope.formHolder.sumToPayLeft - Amount), 2);\r\n                        else\r\n                            $scope.formHolder.sumToPayLeft = CalculatorHelperService.sumToPayLeft($scope.currentSale, Amount);\r\n\r\n                        $scope.formHolder.realSum = $scope.formHolder.sumToPayLeft.toFixed(2);\r\n\r\n                        $scope.paymentValidation.cashAmount = helperService.roundCash($scope.formHolder.sumToPayLeft);\r\n                        $scope.paymentValidation.creditCardAmount = $scope.formHolder.sumToPayLeft;\r\n                        $scope.paymentValidation.giftCardAmount = $scope.formHolder.sumToPayLeft;\r\n                        $scope.paymentValidation.loyaltyPointsAmount = $scope.formHolder.sumToPayLeft;\r\n                        $scope.paymentValidation.storeCreditAmount = $scope.formHolder.sumToPayLeft;\r\n\r\n                        $scope.currentSale.Balance = $scope.formHolder.sumToPayLeft;\r\n\r\n                        if (paymentShortName === 'loyalty' || paymentShortName === 'store credits') {\r\n                            $scope.currentSale.cantProcessOffline = true;\r\n                        }\r\n\r\n                        var loyalty = 0; //saleService.calculateLoaylty(earnLoyalty, $scope.currentSale, Amount);\r\n\r\n                        var delayDone = false;\r\n\r\n                        let surchargeAmount = 0;\r\n                        let surchargeTaxAmount = 0;\r\n                        if (surcharge) {\r\n                            surchargeAmount = surcharge.CalculatedValue;\r\n                            surchargeTaxAmount = $scope.posTaxInclucive ? 0 : surcharge.Tax;\r\n                        }\r\n\r\n                        var finalPaymentAmount = Amount + surchargeAmount + surchargeTaxAmount;\r\n                        var paymentKey = buildPendingPaymentKey(PaymentProcessorID, paymentShortName, finalPaymentAmount, reference);\r\n\r\n                        //$scope.currentSale.customer.LoyaltyPoints += loyalty;\r\n                        var payment = {\r\n                            ID: getOrCreatePendingPaymentId(paymentKey),\r\n                            PaymentProcessorID: PaymentProcessorID,\r\n                            Amount: finalPaymentAmount,\r\n                            Date: new Date(),\r\n                            ShortName: paymentShortName,\r\n                            PaymentTypeName: PaymentTypeName,\r\n                            Loyalty: loyalty,\r\n                            Reference: reference,\r\n                            Surcharge: surcharge\r\n                        };\r\n\r\n                        if ($scope.restoredSaleObj && $scope.restoredSaleObj.payment) {\r\n                            payment = $scope.restoredSaleObj.payment;\r\n                        }\r\n\r\n                        if (pt == 'gift card') {\r\n                            payment.GiftCardID = PaymentProcessorID;\r\n                        }\r\n\r\n                        if (payment.Surcharge)\r\n                            payment.Surcharge.PaymentID = payment.ID;\r\n\r\n                        if (paymentShortName === 'credit card' && payment.Surcharge && !payment.InitialSurcharge) {\r\n                            payment.InitialSurcharge = angular.copy(payment.Surcharge);\r\n                        }\r\n\r\n                        var promise;\r\n                        $scope.lastPaymentID = null;\r\n\r\n                        if (paymentShortName === 'credit card') {\r\n                            $.blockUI();\r\n                            // call real card operation\r\n                            var SCOPE = $scope;\r\n\r\n                            if ($scope.restoredSaleObj && $scope.restoredSaleObj.payment) {\r\n                                promise = helperService.resolvePromise({\r\n                                    response: {\r\n                                        TransactionMetaData: 'restored after crash',\r\n                                        ServerTransactionID: '',\r\n                                        result: true,\r\n                                        amount: payment.Amount\r\n                                    }\r\n                                });\r\n                            } else {\r\n                                helperService.storeCurrentSale($scope.currentSale, SCOPE, payment, 'preCardPayment', payment.Amount); // this is to prevent sale lose due to any card payment app crush\r\n\r\n                                promise = cardPayService.makePayment({\r\n                                    ID: payment.ID,\r\n                                    Amount: payment.Amount,\r\n                                    Currency: configService.currency,\r\n                                    OrderNumber: $scope.currentSale.ClearOrderNumber,\r\n                                    Sale: $scope.currentSale,\r\n                                    receiptCallback: function (code, text, p) {\r\n                                        return printService.printAdditionalReceipts(SCOPE, code, text, p);\r\n                                    }\r\n\r\n                                }, $scope);\r\n                            }\r\n\r\n                            promise = promise\r\n                                .then(function (res) {\r\n\r\n                                    if (!!res && !!res.response && !!res.response.TransactionMetaData &&\r\n                                        res.response.TransactionMetaData.partialApproved === true) { // partial payment approval\r\n                                        payment.Amount = res.response.TransactionMetaData.approvedAmount;\r\n                                        if (payment.Surcharge) {\r\n                                            const realSurchargeApplied = surchargeService.reCalculateSurchargeForPartiallyApproved(payment.Surcharge, payment.Amount, $scope.posTaxInclucive, configService.lastSurchargeTax);\r\n                                            payment.Surcharge.CalculatedValue = realSurchargeApplied.CalculatedValue;\r\n                                            payment.Surcharge.Tax = realSurchargeApplied.Tax;\r\n                                            payment.Surcharge.CalculatedValueWithTax = realSurchargeApplied.CalculatedValueWithTax;\r\n                                        }\r\n\r\n                                        if (earnLoyalty === true) {\r\n                                            if (!isNewSale) {\r\n                                                payment.Loyalty = saleService.calculateLoyaltyEx($scope.currentSale, res.response.TransactionMetaData.approvedAmount);\r\n                                                $scope.currentSale.LoyaltyUpdate = payment.Loyalty;\r\n                                            } else {\r\n                                                CalculatorHelperService.calculatePayments($scope.currentSale);\r\n                                            }\r\n                                        }\r\n                                        calculateSums();\r\n                                    }\r\n                                    var deferred = $q.defer();\r\n                                    deferred.resolve(res);\r\n                                    return deferred.promise;\r\n                                }, function (err) {\r\n                                    var deferred = $q.defer();\r\n                                    var showDialog = true;\r\n\r\n                                    if (err && err.messageHide !== true) {\r\n                                        if (!!err && err.showCustomDialog === true) {\r\n                                            showDialog = false;\r\n                                            deferred.reject(err);\r\n                                        } else\r\n                                        if (typeof (err.message) == 'string')\r\n                                            $scope.creditCardError.errorText = err.message;\r\n                                        else if (!!err.response && !!err.response.errorDescription)\r\n                                            $scope.creditCardError.errorText = err.response.errorDescription;\r\n                                        else\r\n                                            $scope.creditCardError.errorText = err;\r\n\r\n                                    }\r\n\r\n                                    if (showDialog) {\r\n                                        $.unblockUI();\r\n                                        var errorCallback = function () {\r\n                                            if ($scope.creditCardError.addFailedCreditCardPayment === true) {\r\n                                                $scope.creditCardError.addFailedCreditCardPayment = null;\r\n                                                $scope.creditCardError.errorText = null;\r\n                                                deferred.resolve(null);\r\n                                            } else {\r\n                                                $scope.creditCardError.addFailedCreditCardPayment = null;\r\n                                                $scope.creditCardError.errorText = null;\r\n                                                if (err === null || typeof (err) === \"undefined\") {\r\n                                                    err = {\r\n                                                        messageHide: true\r\n                                                    }\r\n                                                } else\r\n                                                    err.messageHide = true;\r\n                                                deferred.reject(err);\r\n                                            }\r\n                                        };\r\n\r\n                                        if (err && err.disableAddPayment) {\r\n                                            helperService.showDialog($(\"#creditCardProcessingErrorModal2\"),\r\n                                            null, null, errorCallback);\r\n                                        }\r\n                                        else {\r\n                                            helperService.showDialog($(\"#creditCardProcessingErrorModal\"),\r\n                                            null, null, errorCallback);\r\n                                        }\r\n                                    }\r\n\r\n                                    return deferred.promise;\r\n                                });\r\n                        } else {\r\n                            $scope.lastPaymentID = payment.ID; // to remove it when payment was not happen (excluding card payment)\r\n\r\n                            var deferred = $q.defer();\r\n                            deferred.resolve(null);\r\n                            promise = deferred.promise;\r\n                        }\r\n\r\n                        return $scope.finishPaymentPhase(allSummPaid, payment, promise, earnLoyalty, paymentKey);\r\n\r\n                    } catch (err) {\r\n                        $scope.paymentActionInProgress = false;\r\n                        $.unblockUI();\r\n                        throw err;\r\n                    }\r\n                }\r\n\r\n                $scope.finishPaymentPhase = function (allSummPaid, payment, promise, earnLoyalty, paymentKey) {\r\n                    return promise.then(function (payRes) {\r\n                            var forceSaleCompleted = false;\r\n                            if ($scope.restoredSaleObj && $scope.restoredSaleObj.payment) {\r\n                                $scope.mode = 'summary';\r\n                                forceSaleCompleted = true;\r\n                            }\r\n\r\n                            delete $scope.restoredSaleObj;\r\n                            helperService.storeCurrentSale(null);\r\n\r\n                            var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                            console.log('payment: ' + JSON.stringify(payRes));\r\n\r\n                            if (payRes != null && !!payRes.response) {\r\n                                payment = angular.extend(payment, payRes.response);\r\n                            }\r\n\r\n                            // even if amount == 0 due to rounding, we need to send zero payment for\r\n                            // correct sim processing\r\n\r\n                            ///Validation to prevent inserting of duplicate payments.\r\n                            var canAddPayment = true;\r\n                            var total = $scope.currentSale.Total;\r\n\r\n                            $.each($scope.currentSale.Payments, function (idx, el) {\r\n                                if (el.ID === payment.ID) {\r\n                                    canAddPayment = false;\r\n\r\n                                    if ($scope.currentSale.Surcharges) {\r\n                                        var existingSurchargeIndex = $scope.currentSale.Surcharges.indexOf(payment.Surcharge);\r\n                                        if (existingSurchargeIndex > -1) {\r\n                                            $scope.currentSale.Surcharges.splice(existingSurchargeIndex, 1);\r\n                                        }\r\n                                    }\r\n\r\n                                    return false;\r\n                                }\r\n                            });\r\n\r\n                            $.each($scope.currentSale.Payments, function (idx, el) {\r\n                                total -= helperService.DEARRound(el.Amount, 2);\r\n                            });\r\n\r\n                            if (isNewSale && payment && payment.Surcharge) {\r\n                                total += payment.Surcharge.CalculatedValueWithTax; // payment is not yet in the sale so add surcharge manually\r\n                            }\r\n\r\n                            if (total - payment.Amount < 0) {\r\n                                $.each($scope.currentSale.Payments, function (idx, el) {\r\n                                    if (el.ShortName === payment.ShortName &&\r\n                                        el.Amount === payment.Amount &&\r\n                                        new Date(el.Date).toDateString() === new Date(payment.Date).toDateString()) {\r\n                                        canAddPayment = false;\r\n\r\n                                        if ($scope.currentSale.Surcharges) {\r\n                                            var index = $scope.currentSale.Surcharges.indexOf(payment.Surcharge);\r\n                                            if (index > -1) {\r\n                                                $scope.currentSale.Surcharges.splice(index, 1);\r\n                                            }\r\n                                        }\r\n\r\n                                        return;\r\n                                    }\r\n                                });\r\n                            }\r\n\r\n                            var loyalty = 0;\r\n                            if (canAddPayment) {\r\n                                $scope.currentSale.Payments.push(payment);\r\n                                clearPendingPaymentId(paymentKey);\r\n\r\n                                if (earnLoyalty === true) {\r\n                                    if (!isNewSale)\r\n                                        loyalty = saleService.calculateLoyaltyEx($scope.currentSale, payment.Amount);\r\n                                }\r\n\r\n                                if (isNewSale)\r\n                                    CalculatorHelperService.calculatePayments($scope.currentSale);\r\n                            } else {\r\n                                clearPendingPaymentId(paymentKey);\r\n                            }\r\n\r\n                            if (!isNewSale) {\r\n                                payment.Loyalty = loyalty;\r\n                                $scope.currentSale.LoyaltyUpdate = loyalty;\r\n                                $scope.currentSale.LoyaltyPoints = saleService.totalPaymentsLoyaltyPoints($scope.currentSale);\r\n                            }\r\n\r\n                            // synchronize sums\r\n                            calculateSums();\r\n\r\n                            if ($scope.currentSale.CashRounding !== 0) {\r\n                                $scope.formHolder.sumToPayLeft = 0;\r\n                                $scope.currentSale.Balance = 0;\r\n                            }\r\n\r\n                            $scope.canDiscardSale = false;\r\n                            updateReceipt();\r\n\r\n                            // code below means that we complite sale only after all payments are done.\r\n                            //if ($scope.formHolder.sumToPayLeft === 0 || allSummPaid === true) {\r\n                            //    return compliteSale();\r\n                            //}\r\n                            return compliteSale(!forceSaleCompleted && !($scope.formHolder.sumToPayLeft === 0 || allSummPaid === true));\r\n                        })\r\n                        .catch(function (err) {\r\n                            console.log('catch payment: ' + err);\r\n\r\n                            // remove surcharges that corresponds to invalid card payment\r\n                            if (!!$scope.currentSale.Surcharges) {\r\n                                var cardPayment = payment;\r\n                                if (!!cardPayment && !!cardPayment.Surcharge) {\r\n                                    $scope.currentSale.Surcharges = $scope.currentSale.Surcharges.filter(function (s) {\r\n                                        return s.$$hashKey != cardPayment.Surcharge.$$hashKey;\r\n                                    })\r\n                                }\r\n                            }\r\n\r\n                            if (!!$scope.currentSale.lastLoyaltyUpdateAmount) {\r\n                                $scope.currentSale.LoyaltyPoints -= $scope.currentSale.lastLoyaltyUpdateAmount;\r\n                                delete $scope.currentSale.lastLoyaltyUpdateAmount;\r\n                            }\r\n\r\n                            var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                            if (isNewSale) {\r\n                                CalculatorHelperService.calculatePayments($scope.currentSale);\r\n                            }\r\n\r\n                            // restore rest of sum to pay\r\n                            calculateSums();\r\n\r\n                            $.unblockUI();\r\n                            if (err.messageHide !== true) {\r\n                                if (!!err && err.showCustomDialog === true) {\r\n                                    $scope.dialogMode = 'vantivDeclinePayment';\r\n                                    $scope.declineTransactionData = err.transactionData;\r\n                                    helperService.showCustomDialog(gettextCatalog.getString('Error'),\r\n                                        err.response.errorDescription + '<br/>' + gettextCatalog.getString('Would you like to print a receipt?'),\r\n                                        gettextCatalog.getString('Yes'),\r\n                                        gettextCatalog.getString('No'));\r\n                                } else\r\n                                if (typeof (err.message) === 'string')\r\n                                    errorService.showError(err.message, function () {\r\n                                        $scope.showDialog();\r\n                                    });\r\n                                else if (!!err.response && !!err.response.errorDescription)\r\n                                    errorService.showError(err.response.errorDescription, function () {\r\n                                        $scope.showDialog();\r\n                                    });\r\n                                else\r\n                                    errorService.showError(err, function () {\r\n                                        $scope.showDialog();\r\n                                    });\r\n\r\n                            }\r\n                        })\r\n                        .finally(function () {\r\n                            $scope.paymentActionInProgress = false;\r\n                            $.unblockUI();\r\n                        });\r\n                };\r\n\r\n                function cancelLastPayment() {\r\n                    // remove last payment payment from payload\r\n                    $scope.currentSale.Payments = $scope.currentSale.Payments.filter(function (p) {\r\n                        return p.ID !== $scope.lastPaymentID;\r\n                    });\r\n                    // restore previous cach rounding value\r\n                    $scope.currentSale.CashRounding = $scope.lastCashRounding;\r\n                    $scope.lastPaymentID = null;\r\n                    \r\n                    var orderID = $scope.currentSale.ID;\r\n                    var registryID = $scope.registrySalesID;\r\n                    orderStatusService.trackOrder(orderID, registryID, 'payment_rollback', null);\r\n                    \r\n                    secondTerminalService.update($scope, 'sale');\r\n                }\r\n\r\n                // if payment is partial, set isPartial flag\r\n                function compliteSale(isPartial) {\r\n\r\n                    $.blockUI();\r\n                    $scope.email.receiptEmail = null;\r\n\r\n                    if (isPartial) {\r\n                        secondTerminalService.update($scope, 'sale');\r\n                    }\r\n\r\n                    if (!!$scope.currentSale.SelectedContact &&\r\n                        $scope.currentSale.SelectedContact.Email) {\r\n                        $scope.email.receiptEmail = $scope.currentSale.SelectedContact.Email;\r\n                    }\r\n\r\n                    clearAllPendingPaymentIds();\r\n\r\n                    // now reset operation id. OperationID - is unique id that identifies current operation.\r\n                    // This allow to skip duplicates that might be result of any network errors/timeouts.\r\n                    $scope.currentSale.OperationID = null;\r\n                    var isContinue = ($scope.operationSubName === 'continue' && $scope.operationName === 'Exchange') || $scope.saleType === \"continue\" ||\r\n                        ($scope.currentSale.Payments && $scope.currentSale.Payments.length > 1);\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if (isNewSale && $scope.operationName === 'Exchange') {\r\n                        var prms = {\r\n                            paymentValidation: $scope.paymentValidation,\r\n                            payments: $scope.payments,\r\n                            selectedItem: $scope.selectedItem,\r\n                            isContinue: isContinue\r\n                        };\r\n\r\n                        CalculatorHelperService.calculateRefundPayments($scope.currentSale, prms, StartCalcLevel.Loyalty);\r\n                        if (isNewSale)\r\n                            updateReceipt();\r\n                    }\r\n\r\n                    var currentSaleObject = saleService.convertCurrentSaleForAPI($scope.currentSale, 'CLOSED', isContinue, $scope.posTaxInclucive, null, isPartial, $scope.operationName === 'Exchange');\r\n\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(null);\r\n                    var promise = deferred.promise;\r\n\r\n                    return promise.then(function () {\r\n\r\n                            // console.log('rawSale: ' + JSON.stringify($scope.currentSale));\r\n                            delete $scope.currentSale.RawSaleObject; // remove native sale string went from history form\r\n                            delete $scope.currentSale.SelectedItem; // remove native sale string went from history form\r\n\r\n                            return saleService.saveSale(currentSaleObject, $scope.currentSale).then(function (resp) {\r\n                                $.unblockUI();\r\n                                if (isPartial !== true) {\r\n                                    //$scope.showPaymentSection = 2;\r\n                                    $scope.setPaymentFinished();\r\n\r\n                                    if (resp.Success && !!$scope.errorMessage) {\r\n                                        errorService.showError(gettextCatalog.getString('Some refunds were unsuccessful, so the amount was transferred to store credit instead.') + '<br/>' + $sсope.errorMessage);\r\n                                    }\r\n\r\n                                    if (!resp.Success && resp.status === -2 && resp.message) {\r\n                                        errorService.showError(resp.message);\r\n                                    }\r\n\r\n                                    if (!!currentSaleObject.UpdateReceiptView) {\r\n                                        var lastRegistryPiece = configService.lastRegistryID.split('-');\r\n                                        $scope.currentSale.Barcode = lastRegistryPiece[1] + \"-\" + Math.floor(Date.now() / 1000).toString(36) + \"-\" + parseInt($scope.currentSale.ClearOrderNumber, 10).toString(36);\r\n                                        updateReceipt();\r\n                                    }\r\n\r\n                                    $timeout(function () {\r\n                                        $scope.triggerSendEmailReceipt(resp);\r\n                                    }, 500);       \r\n\r\n                                    if (resp.Success && configService.isSite === false && !deviceInfo.isSimulator) {\r\n                                        return saleService.removeParkedSale(currentSaleObject.OrderID, \"parked\");\r\n                                    }\r\n                                } else {\r\n                                    if (resp.Success === false && resp.message) {\r\n                                        // track payment processing error\r\n                                        orderStatusService.trackOrder($scope.currentSale.ID, configService.registrySalesID, 'payment_processing_error', $scope.registrySalesID);\r\n                                        \r\n                                        if (!!$scope.lastPaymentID) {\r\n                                            cancelLastPayment();\r\n                                        }\r\n    \r\n                                        console.log('Error:' + resp.message);\r\n                                        var deferred3 = $q.defer();\r\n                                        deferred3.reject(resp.message);\r\n                                        return deferred3.promise;\r\n                                    }\r\n\r\n                                    $scope.lastPaymentID = null;\r\n                                    var deferred2 = $q.defer();\r\n                                    deferred2.resolve(null);\r\n                                    return deferred2.promise;\r\n                                }\r\n                            }, function (err) {\r\n                                $.unblockUI();\r\n\r\n                                // process error\r\n                                if (isPartial !== true) {\r\n                                    //$scope.showPaymentSection = 2;\r\n                                    $scope.setPaymentFinished();\r\n                                    if (configService.isOnline === false && $scope.currentSale.cantProcessOffline === true) {\r\n                                        showOfflinePaymentsDialog();\r\n                                    } else {\r\n                                        if (!!$scope.lastPaymentID) {\r\n                                            cancelLastPayment();\r\n                                        }\r\n\r\n                                        // show error and login page once more\r\n                                        console.log('Error:' + err);\r\n                                        var deferred3 = $q.defer();\r\n                                        deferred3.reject(err);\r\n                                        return deferred3.promise;\r\n                                    }\r\n                                } else {\r\n                                    if (!!$scope.lastPaymentID) {\r\n                                        // remove last payment payment from payload\r\n                                        $scope.currentSale.Payments = $scope.currentSale.Payments.filter(function (p) {\r\n                                            return p.ID !== $scope.lastPaymentID;\r\n                                        });\r\n                                        // restore previous cach rounding value\r\n                                        $scope.currentSale.CashRounding = $scope.lastCashRounding;\r\n                                        $scope.lastPaymentID = null;\r\n                                    }\r\n\r\n                                    console.log('Error:' + err);\r\n                                    var deferred3 = $q.defer();\r\n                                    deferred3.reject(err);\r\n                                    return deferred3.promise;\r\n                                }\r\n                            });\r\n                        })\r\n                        .catch(function (err) {\r\n                            $scope.showPaymentSection = 1;\r\n                            // remove credit card payment from payments as it's failed\r\n                            //   $scope.currentSale.Payments = $scope.currentSale.Payments.filter(function (el) { return el.ShortName != 'credit card'; });\r\n                            // remove last payment payment from payload\r\n                            if (!!$scope.lastPaymentID)\r\n                                $scope.currentSale.Payments = $scope.currentSale.Payments.filter(function (p) {\r\n                                    return p.ID !== $scope.lastPaymentID;\r\n                                });\r\n\r\n                            $scope.lastPaymentID = null;\r\n\r\n                            // restore rest of sum to pay\r\n                            calculateSums();\r\n\r\n                            updateReceipt();\r\n\r\n                            // enable checkout deletion\r\n                            $scope.canDiscardSale = true;\r\n                            $.unblockUI();\r\n\r\n                            if (typeof (err) === 'string')\r\n                                errorService.showError(err, function () {\r\n                                    $scope.showDialog();\r\n                                }, null, null, true);\r\n                            else if (typeof (err.message) === 'string')\r\n                                errorService.showError(err.message, function () {\r\n                                    $scope.showDialog();\r\n                                }, null, null, true);\r\n                            else if (!!err && !!err.response && typeof (err.response.errorDescription) === 'string')\r\n                                errorService.showError(err.response.errorDescription, function () {\r\n                                    $scope.showDialog();\r\n                                }, null, null, true);\r\n                            else\r\n                                errorService.showError(err, function () {\r\n                                    $scope.showDialog();\r\n                                }, null, null, true);\r\n                        })\r\n                        .finally(function (res) {\r\n                            $.unblockUI();\r\n\r\n                        });\r\n                }\r\n\r\n                $scope.cancelCashRoundingDialog = function () {\r\n                    var $windowElement = $('#cashRoundingModal');\r\n                    helperService.closeDialog($windowElement);\r\n                };\r\n\r\n                $scope.closeCreditCardProcessingErrorDialog = function () {\r\n                    var $windowElement = $('#creditCardProcessingErrorModal');\r\n                    helperService.closeDialog($windowElement);\r\n                };\r\n\r\n                $scope.closeCreditCardProcessingErrorDialog2 = function () {\r\n                    var $windowElement = $('#creditCardProcessingErrorModal2');\r\n                    helperService.closeDialog($windowElement);\r\n                };\r\n\r\n                function cashRoundingDialog() {\r\n                    var $windowElement = $('#cashRoundingModal');\r\n                    helperService.showDialog($windowElement);\r\n                }\r\n\r\n                $scope.cashPay = function (roundedAmount) {\r\n                    var amount = helperService.DEARRound(parseFloat($scope.formHolder.realSum), 2);\r\n\r\n                    if (!$scope.cashMode) {\r\n                        // check if we can show extened cash pay form\r\n                        if ((!($scope.saleType === 'standaloneReturn' || $scope.saleType === 'return') ||\r\n                                $scope.operationName === 'Exchange') && amount > 0) {\r\n\r\n                            if (amount != helperService.DEARRound(parseFloat($scope.formHolder.sumToPayLeft), 2)) {\r\n                                $scope.formHolder.realCashSum = amount;\r\n                                $scope.formHolder.realSum = $scope.formHolder.sumToPayLeft;\r\n                                amount = helperService.DEARRound(parseFloat($scope.formHolder.realSum), 2);\r\n                            }\r\n\r\n                            $scope.cashMode = true;\r\n                            $scope.banknotePredictions = saleService.predictCashPayments(amount);\r\n                            $scope.updateSizesInCashPayment();\r\n                            return;\r\n                        }\r\n                    }\r\n\r\n                    var isLoyalty = false;\r\n                    if ($scope.currentSale.customer.ID != null && $scope.currentSale.customer.EnableLoyaltyPoints == true) {\r\n                        isLoyalty = true;\r\n                    }\r\n                    if (!roundedAmount) {\r\n                        $scope.roundedAmount = helperService.roundCash(amount);\r\n\r\n                        if (amount !== $scope.roundedAmount) {\r\n                            if (!($scope.currentSale.processZero === true && $scope.roundedAmount == 0)) {\r\n                                cashRoundingDialog();\r\n                                return;\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    $scope.currentSale.processZero = false;\r\n                    $.blockUI();\r\n                    $scope.cashMode = false;\r\n\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(null);\r\n\r\n                    if ($scope.roundedAmount > 0) {\r\n                        deferred.promise = deferred.promise.then(function () {\r\n                            return printService.openCashDrawer();\r\n                        });\r\n                    }\r\n\r\n                    deferred.promise = deferred.promise.then(function () {\r\n                            $.unblockUI();\r\n                            return addPaymentToSaleObject($scope.cashRegistryPaymentProcessorID, amount, 'Cash', isLoyalty, 'cash');\r\n                        })\r\n                        .catch(function (err) {\r\n                            $.unblockUI();\r\n                            errorService.showError(err);\r\n                        });\r\n\r\n                    return deferred.promise;\r\n                };\r\n\r\n                $scope.checkPayment = function (payment) {\r\n                    const amount = helperService.DEARRound(parseFloat($scope.formHolder.realSum), 2);\r\n\r\n                    if (!$scope.creditCardMode) {\r\n                        // check if we can show extened credit card pay form\r\n                        if ((!($scope.saleType === 'standaloneReturn' || $scope.saleType === 'return') ||\r\n                                $scope.operationName === 'Exchange') && amount > 0) {\r\n\r\n                            if (amount != helperService.DEARRound(parseFloat($scope.formHolder.sumToPayLeft), 2)) {\r\n                                $scope.formHolder.realCashSum = amount;\r\n                                $scope.formHolder.realSum = $scope.formHolder.sumToPayLeft;\r\n                                amount = helperService.DEARRound(parseFloat($scope.formHolder.realSum), 2);\r\n                            }\r\n\r\n                            $scope.creditCardMode = true;\r\n                            \r\n                            return;\r\n                        }\r\n                    }\r\n                };\r\n\r\n                $scope.creditCardPay = function () {\r\n                    try {\r\n\r\n                        if($scope.paymentDisplayOrder === 2)\r\n                        {\r\n                            var amount = helperService.DEARRound(parseFloat($scope.formHolder.realSum), 2);\r\n\r\n                            if (!$scope.creditCardMode) {\r\n                                // check if we can show extened credit card pay form\r\n                                if ((!($scope.saleType === 'standaloneReturn' || $scope.saleType === 'return') ||\r\n                                        $scope.operationName === 'Exchange') && amount > 0) {\r\n        \r\n                                    if (amount != helperService.DEARRound(parseFloat($scope.formHolder.sumToPayLeft), 2)) {\r\n                                        $scope.formHolder.realCashSum = amount;\r\n                                        $scope.formHolder.realSum = $scope.formHolder.sumToPayLeft;\r\n                                        amount = helperService.DEARRound(parseFloat($scope.formHolder.realSum), 2);\r\n                                    }\r\n        \r\n                                    $scope.creditCardMode = true;\r\n                                    \r\n                                    return;\r\n                                }\r\n                            }\r\n                        }\r\n\r\n                        $scope.creditCardMode = false;\r\n\r\n                        if (configService.lastSurchargeTax != 'null') {\r\n\r\n                            if ($scope.restoredSaleObj && $scope.restoredSaleObj.payment) {\r\n                                $scope.creditCardPayWithSurcharge($scope.restoredSaleObj.payment.Surcharge);\r\n                            } else {\r\n                                $.blockUI();\r\n                                saleService.getSurcharge()\r\n                                    .then(function (surcharges) {\r\n                                        //console.log(surcharges);\r\n                                        $.unblockUI();\r\n\r\n                                        var srchs = $scope.getPaymentMethodSurcharges('credit card', surcharges);\r\n\r\n                                        if (srchs && srchs.length > 0) {\r\n                                            $rootScope.$broadcast('addSurcharge.show', {\r\n                                                surcharges: srchs,\r\n                                                realSum: $scope.formHolder.realSum,\r\n                                                tax: configService.lastSurchargeTax,\r\n                                                taxInclucive: $scope.posTaxInclucive\r\n                                            });\r\n                                        }\r\n                                        //if (!!surcharges && surcharges.length > 0) {\r\n                                        //    $rootScope.$broadcast('addSurcharge.show', { surcharges: surcharges, realSum: $scope.formHolder.realSum, tax: configService.lastSurchargeTax, taxInclucive: $scope.posTaxInclucive });\r\n                                        //}\r\n                                        else {\r\n                                            $scope.creditCardPayWithSurcharge();\r\n                                        }\r\n                                    })\r\n                                    .catch(function (err) {\r\n                                        calculateSums();\r\n\r\n                                        $.unblockUI();\r\n                                        errorService.showError(err);\r\n                                    });\r\n                            }\r\n                        } else {\r\n                            $scope.creditCardPayWithSurcharge();\r\n                        }\r\n                    } catch (ex) {\r\n                        calculateSums();\r\n\r\n                        $.unblockUI();\r\n                        errorService.showError(ex.message);\r\n                    }\r\n                };\r\n\r\n                $scope.creditCardPayWithSurcharge = function (surcharge) {\r\n                    var isLoyalty = false;\r\n                    if ($scope.currentSale.customer.ID != null && $scope.currentSale.customer.EnableLoyaltyPoints == true) {\r\n                        isLoyalty = true;\r\n                    }\r\n                    addPaymentToSaleObject($scope.creditCardPaymentProcessorID, $scope.formHolder.realSum, 'Credit Card', isLoyalty, 'credit card', null, surcharge);\r\n                };\r\n\r\n                $scope.customPay = function (paymentProcessorID, surcharge) {\r\n                    var obj = $scope.getCustomPaymentMethod(paymentProcessorID);\r\n                    if (obj) {\r\n\r\n                        if ($scope.currentSale.OrderType !== \"ONACCOUNT\" &&\r\n                            $scope.currentSale.OrderType !== \"LAYBY\" &&\r\n                            configService.lastSurchargeTax != 'null') {\r\n                            $.blockUI();\r\n                            saleService.getSurcharge()\r\n                                .then(function (surcharges) {\r\n                                    $.unblockUI();\r\n                                    var srchs = $scope.getPaymentMethodSurcharges(obj.loweredPaymentMethodName, surcharges);\r\n\r\n                                    if (srchs && srchs.length > 0) {\r\n                                        $rootScope.$broadcast('addSurcharge.show', {\r\n                                            paymentProcessorID: paymentProcessorID,\r\n                                            isCustom: true,\r\n                                            surcharges: srchs,\r\n                                            realSum: $scope.formHolder.realSum,\r\n                                            tax: configService.lastSurchargeTax,\r\n                                            taxInclucive: $scope.posTaxInclucive\r\n                                        });\r\n                                    } else\r\n                                        $scope.customPayWithSurcharge(paymentProcessorID);\r\n                                })\r\n                                .catch(function (err) {\r\n                                    calculateSums();\r\n\r\n                                    $.unblockUI();\r\n                                    errorService.showError(err);\r\n                                });\r\n                        } else\r\n                            $scope.customPayWithSurcharge(paymentProcessorID);\r\n                    }\r\n                };\r\n\r\n\r\n                $scope.customPayWithSurcharge = function (paymentProcessorID, surcharge) {\r\n                    var obj = $scope.getCustomPaymentMethod(paymentProcessorID);\r\n                    if (obj != null) {\r\n\r\n                        var isLoyalty = false;\r\n                        if ($scope.currentSale.customer.ID != null && $scope.currentSale.customer.EnableLoyaltyPoints == true) {\r\n                            isLoyalty = true;\r\n                        }\r\n\r\n                        addPaymentToSaleObject(obj.paymentProcessorID, $scope.formHolder.realSum, obj.paymentMethodName, isLoyalty, obj.loweredPaymentMethodName, null, surcharge);\r\n                    }\r\n                };\r\n\r\n                $scope.customPayRet = function (pay) {\r\n                    var obj = $scope.getCustomPaymentMethodByShortName(pay.shortName);\r\n                    if (obj) {\r\n                        var sum = pay.amount;\r\n                        var sr = null;\r\n                        if (!!pay.Surcharge) {\r\n                            if (pay.Surcharge.AmountToRefund > 0 && pay.Surcharge.RefundSurcharge === true) {\r\n                                sum += pay.Surcharge.AmountToRefund;\r\n                            }\r\n\r\n                            sr = pay.Surcharge;\r\n                            addSurchargeToRefund(sr, sum, null, null, null, true);\r\n                            sr.isAddedToPayment = true;\r\n                        }\r\n\r\n                        addPaymentToRefund(obj.paymentProcessorID, sum, obj.paymentMethodName, true, obj.loweredPaymentMethodName, null, null, null, null, sr);\r\n                    }\r\n                };\r\n\r\n                $scope.giftCardPay = function (giftCardID, giftCardCode, amount) {\r\n                    if (amount < 0) {\r\n                        throw new Error(gettextCatalog.getString(\"Something went wrong: cannot pay negative amount with a gift card.\"));\r\n                    }\r\n                    var isLoyalty = false;\r\n                    if ($scope.currentSale.customer.ID != null && $scope.currentSale.customer.EnableLoyaltyPoints == true) {\r\n                        isLoyalty = true;\r\n                    }\r\n                    addPaymentToSaleObject(giftCardID, amount, gettextCatalog.getString('Gift card:') + giftCardCode, isLoyalty, 'gift card', giftCardCode);\r\n                };\r\n\r\n                $scope.allowLayby = function () {\r\n                    var allow =\r\n                        ((!$scope.currentSale.OrderType &&\r\n                                (!$scope.currentSale.Payments || $scope.currentSale.Payments.length === 0)) && configService.CanDoLayby ||\r\n                            $scope.currentSale.OrderType === 'LAYBY') &&\r\n                        $scope.currentSale.customer.ID !== null &&\r\n                        $scope.laybyPaymentProcessorID !== null &&\r\n                        $scope.saleType !== 'return' && $scope.formHolder.sumToPayLeft >= 0 &&\r\n                        !$scope.hasGiftCardCodes()                        \r\n                        ;\r\n\r\n                    return allow;\r\n                };\r\n\r\n                $scope.closeDiscardDialog = function (cancel) {};\r\n\r\n                $scope.showAskPaymentDialog = function () {\r\n                    $scope.messageBoxText = gettextCatalog.getString(\"Would you like to add payment?\");\r\n                    $scope.messageBoxYes = gettextCatalog.getString(\"Yes\");\r\n                    $scope.messageBoxNo = gettextCatalog.getString(\"No\");\r\n                    $scope.closeDiscardDialog = $scope.closeAskPaymentDialog;\r\n\r\n                    var $windowElement = $('#messageBoxModal');\r\n                    helperService.showDialog($windowElement);\r\n                }\r\n\r\n                $scope.closeAskPaymentDialog = function (cancel) {\r\n                    var $windowElement = $('#messageBoxModal');\r\n                    if (cancel) {\r\n                        $.blockUI();\r\n                        helperService.closeDialog($windowElement, function () {\r\n                            //$scope.showPaymentSection = 2;\r\n                            $scope.setPaymentFinished();\r\n                            $timeout(function () {\r\n                                $.unblockUI();\r\n                            });\r\n                        });\r\n                    } else {\r\n                        helperService.closeDialog($windowElement);\r\n                    }\r\n                };\r\n\r\n                $scope.closeAskSureLayByDialog = function (cancel) {\r\n                    var $windowElement = $('#messageBoxModal');\r\n                    if (!cancel) {\r\n                        helperService.closeDialog($windowElement, function () {\r\n                            $scope.laybyPayDialog();\r\n                        });\r\n\r\n                    } else {\r\n                        helperService.closeDialog($windowElement);\r\n                    }\r\n                };\r\n\r\n                $scope.closeAskSureOnAccountDialog = function (cancel) {\r\n                    var $windowElement = $('#messageBoxModal');\r\n                    if (!cancel) {\r\n                        helperService.closeDialog($windowElement, function () {\r\n                            $scope.onAccountPay();\r\n                        });\r\n                    } else {\r\n                        helperService.closeDialog($windowElement);\r\n                    }\r\n                };\r\n\r\n                $scope.askSureLayBy = function () {\r\n                    $scope.messageBoxText = gettextCatalog.getString(\"You won't be able to change the sale after clicking \"\r\n                                                                + \"\\\"Yes, this is a layby sale\\\", would you like to continue?\");\r\n                    $scope.messageBoxYes = gettextCatalog.getString(\"Yes, this is a layby sale\");\r\n                    $scope.messageBoxNo = gettextCatalog.getString(\"No\");\r\n                    $scope.closeDiscardDialog = $scope.closeAskSureLayByDialog;\r\n\r\n                    var $windowElement = $('#messageBoxModal');\r\n                    helperService.showDialog($windowElement);\r\n                }\r\n\r\n                $scope.askSureOnAccount = function () {\r\n                    $scope.messageBoxText = gettextCatalog.getString(\"You won't be able to change the sale after clicking \"\r\n                                                                + \"\\\"Yes, this is an on account sale\\\", would you like to continue?\");\r\n                    $scope.messageBoxYes = gettextCatalog.getString(\"Yes, this is an on account sale\");\r\n                    $scope.messageBoxNo = gettextCatalog.getString(\"No\");\r\n                    $scope.closeDiscardDialog = $scope.closeAskSureOnAccountDialog;\r\n\r\n                    var $windowElement = $('#messageBoxModal');\r\n                    helperService.showDialog($windowElement);\r\n                }\r\n\r\n                $scope.laybyPay = function (dt) {\r\n                    $.blockUI();\r\n                    $scope.currentSale.OperationID = null;\r\n\r\n                    if (!!dt) {\r\n                        $scope.currentSale.LaybyDate = helperService.toDateFromDatepickerParameter(dt);\r\n                    }\r\n\r\n                    var currentSaleObject = saleService.convertCurrentSaleForAPI($scope.currentSale, 'LAYBY');\r\n\r\n                    if ($scope.currentSale.OrderType === 'LAYBY') {\r\n                        //$scope.showPaymentSection = 2;\r\n                        $scope.setPaymentFinished();\r\n\r\n                        saleService.laybySale(currentSaleObject, $scope.currentSale).then(function (resp) {\r\n\r\n                            $.unblockUI();\r\n                        }, function (err) {\r\n                            // process error\r\n                            $.unblockUI();\r\n                            if (configService.isOnline === false && $scope.currentSale.cantProcessOffline === true) {\r\n                                showOfflinePaymentsDialog();\r\n                            } else {\r\n                                // show error and login page once more\r\n                                errorService.showError(err, function () {\r\n                                    $scope.showDialog();\r\n                                });\r\n                            }\r\n                        });\r\n                    } else {\r\n                        saleService.laybySale(currentSaleObject, $scope.currentSale).then(function (resp) {\r\n\r\n                            $.unblockUI();\r\n                            $scope.showAskPaymentDialog();\r\n\r\n                        }, function (err) {\r\n                            // process error\r\n                            $.unblockUI();\r\n                            if (configService.isOnline === false && $scope.currentSale.cantProcessOffline === true) {\r\n                                showOfflinePaymentsDialog();\r\n                            } else {\r\n                                // show error and login page once more\r\n                                errorService.showError(err, function () {\r\n                                    $scope.showDialog();\r\n                                });\r\n                            }\r\n                        });\r\n\r\n                    }\r\n\r\n                };\r\n\r\n                $scope.allowOnAccount = function () {\r\n                    var allow =\r\n                        configService.canSellOnAccount !== false &&\r\n                        ((!$scope.currentSale.OrderType &&\r\n                                (!$scope.currentSale.Payments || $scope.currentSale.Payments.length == 0)) ||\r\n                            $scope.currentSale.OrderType === 'ONACCOUNT') &&\r\n                        $scope.currentSale.customer.ID !== null &&\r\n                        $scope.saleType !== 'return' &&\r\n                        $scope.formHolder.sumToPayLeft >= 0 &&\r\n                        !$scope.hasGiftCardCodes();\r\n\r\n                    return allow;\r\n                };\r\n\r\n                $scope.isDisableOffline = function () {\r\n                    return configService.isOnline === false;\r\n                };\r\n\r\n                $scope.disableLoyaltyPayment = function () {\r\n                    var disable = !$scope.currentSale.customer.ID ||\r\n                        !$scope.loyaltyPaymentProcessorID ||\r\n                        $scope.disableLoyalty === true ||\r\n                        $scope.currentSale.CustomerLoyaltyPointsRemaining <= 0 ||\r\n                        $scope.currentSale.customer.LoadedFromLocalDb === true ||\r\n                        $scope.saleType === 'return' ||\r\n                        $scope.formHolder.sumToPayLeft < 0;\r\n                    return disable;\r\n                };\r\n\r\n                $scope.disableStoreCreditsPayment = function () {\r\n                    var disable = !$scope.currentSale.customer.ID ||\r\n                        !$scope.storeCreditsPaymentProcessorID ||\r\n                        $scope.currentSale.customer.LoadedFromLocalDb === true ||\r\n                        ($scope.currentSale.customer.StoreCredits === 0 && $scope.saleType !== 'return') ||\r\n                        $scope.formHolder.sumToPayLeft < 0;\r\n\r\n                    return disable;\r\n                };\r\n\r\n                $scope.onAccountPay = function () {\r\n                    $.blockUI();\r\n                    $scope.currentSale.OperationID = null;\r\n                    $scope.email.receiptEmail = null;\r\n\r\n                    if (!!$scope.currentSale.SelectedContact &&\r\n                        $scope.currentSale.SelectedContact.Email) {\r\n                        $scope.email.receiptEmail = $scope.currentSale.SelectedContact.Email;\r\n                    }\r\n\r\n                    var currentSaleObject = saleService.convertCurrentSaleForAPI($scope.currentSale, 'ONACCOUNT');\r\n\r\n                    if ($scope.currentSale.OrderType === 'ONACCOUNT') {\r\n\r\n\r\n                        saleService.onaccountSale(currentSaleObject, $scope.currentSale).then(function (resp) {\r\n                            helperService.storeCurrentSale(null);\r\n                            //$scope.showPaymentSection = 2;\r\n                            $scope.setPaymentFinished();\r\n                            $.unblockUI();\r\n                        }, function (err) {\r\n                            // process error\r\n                            $.unblockUI();\r\n                            if (configService.isOnline === false && $scope.currentSale.cantProcessOffline === true) {\r\n                                showOfflinePaymentsDialog();\r\n                            } else {\r\n                                // show error and login page once more\r\n                                errorService.showError(err, function () {\r\n                                    $scope.showDialog();\r\n                                });\r\n                            }\r\n                        });\r\n                    } else {\r\n                        saleService.onaccountSale(currentSaleObject, $scope.currentSale).then(function (resp) {\r\n                            helperService.storeCurrentSale(null);\r\n                            $.unblockUI();\r\n\r\n                            $scope.showAskPaymentDialog();\r\n                        }, function (err) {\r\n                            // process error\r\n                            $.unblockUI();\r\n                            if (configService.isOnline === false && $scope.currentSale.cantProcessOffline === true) {\r\n                                showOfflinePaymentsDialog();\r\n                            } else {\r\n                                // show error and login page once more\r\n                                errorService.showError(err, function () {\r\n                                    $scope.showDialog();\r\n                                });\r\n                            }\r\n                        });\r\n                    }\r\n                };\r\n\r\n                $scope.loyaltyPay = function (fromDialog) {\r\n\r\n                    $scope.isValidAmount = true;\r\n                    $scope.invalidPaymentAmount = '';\r\n\r\n                    if (parseFloat($scope.formHolder.realSum) > $scope.paymentValidation.loyaltyPointsAmount) {\r\n                        $scope.isValidAmount = false;\r\n                        $scope.invalidPaymentAmount = gettextCatalog.getString(\"The payment amount is more than the sales amount.\");\r\n                    }\r\n\r\n                    if ($scope.isValidAmount === false) {\r\n                        return;\r\n                    }\r\n\r\n                    if ($scope.currentSale.CustomerLoyaltyPointsRemaining < parseFloat($scope.formHolder.realSum)) {\r\n                        if (fromDialog === true) {\r\n                            addPaymentToSaleObject($scope.loyaltyPaymentProcessorID, $scope.currentSale.CustomerLoyaltyPointsRemaining, 'Loyalty', false, 'loyalty');\r\n                        } else {\r\n                            loyaltyPaymentDialog();\r\n                        }\r\n                    } else {\r\n                        // do not subtract preventively. This will break initial customer loylaty balance\r\n                        // $scope.currentSale.customer.LoyaltyPoints -= parseFloat($scope.formHolder.realSum);\r\n                        addPaymentToSaleObject($scope.loyaltyPaymentProcessorID, $scope.formHolder.realSum, 'Loyalty', false, 'loyalty');\r\n                    }\r\n\r\n                };\r\n\r\n                $scope.storeCreditsPay = function (fromDialog) {\r\n                    $scope.isValidAmount = true;\r\n                    $scope.invalidPaymentAmount = '';\r\n\r\n                    if (parseFloat($scope.formHolder.realSum) > $scope.paymentValidation.storeCreditAmount) {\r\n                        $scope.isValidAmount = false;\r\n                        $scope.invalidPaymentAmount = gettextCatalog.getString(\"The payment amount is more than the sales amount.\");\r\n                    }\r\n\r\n                    if ($scope.isValidAmount === false) {\r\n                        return;\r\n                    }\r\n\r\n\r\n                    if ($scope.currentSale.customer.StoreCredits < parseFloat($scope.formHolder.realSum) && parseFloat($scope.formHolder.realSum) > 0) {\r\n                        if (fromDialog === true) {\r\n                            addPaymentToSaleObject($scope.storeCreditsPaymentProcessorID, $scope.currentSale.customer.StoreCredits, 'Store Credits', true, 'store credits');\r\n                            $scope.currentSale.customer.StoreCredits = 0;\r\n                        } else {\r\n                            storeCreditPaymentDialog();\r\n                        }\r\n                    } else {\r\n                        $scope.currentSale.customer.StoreCredits -= parseFloat($scope.formHolder.realSum);\r\n                        addPaymentToSaleObject($scope.storeCreditsPaymentProcessorID, $scope.formHolder.realSum, 'Store Credits', true, 'store credits');\r\n                    }\r\n                };\r\n\r\n                function loyaltyPaymentDialog() {\r\n\r\n                    $scope.dialogMode = 'loyaltypartialpayment';\r\n\r\n                    var title = '<span>' + gettextCatalog.getString('Pay %0 with loyalty').replace('%0', '{{currentSale.CustomerLoyaltyPointsRemaining |currency}}') + '</span>';\r\n                    title = $compile(title)($scope);\r\n\r\n                    helperService.showCustomDialog(\r\n                        title,\r\n                        gettextCatalog.getString('You can only redeem up to the value of your current loyalty balance. You may still proceed with this as a partial payment, then choose another payment method for the remaining balance.'),\r\n                        gettextCatalog.getString('Continue'),\r\n                        gettextCatalog.getString('Close'));\r\n                }\r\n\r\n                function storeCreditPaymentDialog() {\r\n\r\n                    $scope.dialogMode = 'storecreditpartialpayment';\r\n\r\n                    var title = '<span>' + gettextCatalog.getString('Pay %0 with store credits').replace('%0', '{{currentSale.customer.StoreCredits |currency}}') + '</span>';\r\n                    title = $compile(title)($scope);\r\n\r\n                    helperService.showCustomDialog(\r\n                        title,\r\n                        gettextCatalog.getString('You can only redeem up to the value of your current store credits balance. You may still proceed with this as a partial payment, then choose another payment method for the remaining balance.'),\r\n                        gettextCatalog.getString('Continue'),\r\n                        gettextCatalog.getString('Close'));\r\n                }\r\n\r\n                $scope.endPayment = function () {\r\n                    window.localStorage.setItem('continueSale', null);\r\n                    $scope.goBack();\r\n                    $scope.cleanSale();\r\n                    $scope.searchText = null;\r\n                    $scope.searchType = 'quickKeySearch';\r\n                    $scope.search(); // quick key search\r\n                };\r\n\r\n                $scope.showDialog = function () {\r\n                    helperService.showDialog();\r\n                };\r\n\r\n                /*$scope.endPayment = function () {\r\n                    var eml = $scope.receiptHolder.receiptForm.receiptEmail;\r\n                };*/\r\n\r\n                $scope.addCustomer = function () {\r\n                    $scope.hideMenuDropdown();\r\n                    if ($scope.canChangeCustomer === true) {\r\n                        // var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                        var customer = $scope.currentSale.customer;\r\n\r\n                        $scope.searchTextLive = '';\r\n                        $('#searchCustomerText').val(\"\");\r\n                        $rootScope.$broadcast('addCustomer.show', Object.assign({ showViewDetails: true }, customer));\r\n                    }\r\n                };\r\n\r\n                $scope.addShippingAddress = function () {\r\n                    $scope.hideMenuDropdown();\r\n                    if ($scope.canChangeCustomer === true) {\r\n                        const customer = $scope.currentSale.customer;\r\n                        \r\n                        let selectedAddressData = null;\r\n                        if ($scope.currentSale.CustomerShippingAddressLine1) {\r\n                            selectedAddressData = {\r\n                                Line1: $scope.currentSale.CustomerShippingAddressLine1,\r\n                                Line2: $scope.currentSale.CustomerShippingAddressLine2,\r\n                                City: $scope.currentSale.CustomerShippingCity,\r\n                                State: $scope.currentSale.CustomerShippingProvince,\r\n                                Postcode: $scope.currentSale.CustomerShippingZip,\r\n                                Country: $scope.currentSale.CustomerShippingCountry\r\n                            }\r\n                        }\r\n                        $scope.searchTextLive = '';\r\n                        $('#searchShippingAddrText').val(\"\");\r\n                        $rootScope.$broadcast('addShippingAddress.show',{customerAddressData: customer.Addresses, selectedAddressData});\r\n                    }\r\n                };\r\n\r\n                $scope.addSalesRepresentative = function () {\r\n                    $scope.hideMenuDropdown();\r\n\r\n                    if ($scope.canChangeSalesRepresentative === true) {\r\n                        var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                        var sr = isNewSale ? $scope.currentSale.SalesRepresentative : $scope.currentSale.salesRepresentative;\r\n\r\n                        $scope.searchTextLive = '';\r\n                        $('#searchSalesRepresentativeText').val(\"\");\r\n                        $rootScope.$broadcast('addSalesRepresentative.show', sr);\r\n                    }\r\n                };\r\n\r\n                $scope.unsetWarning = false;\r\n                $scope.unsetTimer = null;\r\n                $scope.unsetCustomer = function () {\r\n                    // var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                    var customer = $scope.currentSale.customer;\r\n\r\n                    $scope.dialogMode = 'remove-customer';\r\n                    helperService.showCustomDialog(gettextCatalog.getString(''),\r\n                        gettextCatalog.getString('Would you like to remove this customer: ') + customer.Name + ' from the sale?',\r\n                        gettextCatalog.getString('Delete'),\r\n                        gettextCatalog.getString('Cancel'));\r\n                };\r\n\r\n                $scope.removeCustomerCallback = function () {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    $scope.currentSale.customer = {\r\n                        ID: null\r\n                    };\r\n                    \r\n                    $scope.removeSaleShippingAddress();\r\n\r\n                    $scope.currentSale.SelectedContact = null;\r\n                    clearLLDiscount();\r\n                    $scope.setDisableLoyaltyFlag();\r\n                    $scope.unsetWarning = false;\r\n\r\n                    $scope.raiseViewChanged();\r\n                    if ($scope.saleType === 'return') {\r\n                        $scope.refundNeedCustomer = true;\r\n                    }\r\n\r\n                    if (!isNewSale) {\r\n                        saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n                        $scope.updateCheckoutProductPrice($scope.currentSale);\r\n                    } else {\r\n                        CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope, StartCalcLevel.Setup, true);\r\n                    }\r\n\r\n                    updateReceipt();\r\n                    helperService.storeCurrentSale($scope.currentSale, $scope);\r\n                    $scope.updateSizesInCheckout();\r\n\r\n                    return loyaltyService.clearCustomer();\r\n                };\r\n\r\n                $scope.removeSaleShippingAddress = function() {\r\n                    delete $scope.currentSale.CustomerShippingAddressLine1;\r\n                    delete $scope.currentSale.CustomerShippingAddressLine2;\r\n                    delete $scope.currentSale.CustomerShippingCity;\r\n                    delete $scope.currentSale.CustomerShippingCountry;\r\n                    delete $scope.currentSale.CustomerShippingProvince;\r\n                    delete $scope.currentSale.CustomerShippingZip;\r\n                }\r\n\r\n                $scope.unsetSalesRepresentativeWarning = false;\r\n                $scope.unsetSalesRepresentativeTimer = null;\r\n                $scope.unsetSalesRepresentative = function () {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                    var sr = isNewSale ? $scope.currentSale.SalesRepresentative : $scope.currentSale.salesRepresentative;\r\n\r\n                    $scope.dialogMode = 'remove-salesrep';\r\n                    helperService.showCustomDialog(gettextCatalog.getString(''),\r\n                        gettextCatalog.getString('Would you like to delete sales representative:') + '<br/>' + sr.Name + '?',\r\n                        gettextCatalog.getString('Delete'));\r\n                };\r\n\r\n                $scope.removeSalesRepCallback = function () {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                    if (!isNewSale)\r\n                        $scope.currentSale.salesRepresentative = {\r\n                            ID: null\r\n                        };\r\n                    else\r\n                        $scope.currentSale.SalesRepresentative = {\r\n                            ID: null\r\n                        };\r\n\r\n                    $scope.unsetSalesRepresentativeWarning = false;\r\n\r\n                    $scope.raiseViewChanged();\r\n                    updateReceipt();\r\n                    helperService.storeCurrentSale($scope.currentSale, $scope);\r\n                };\r\n\r\n\r\n                $scope.parkSale = function () {\r\n                    $.blockUI();\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    $scope.currentSale.RealPaySum = isNewSale ? $scope.currentSale.Total : $scope.totalSum($scope.currentSale, true);\r\n                    $scope.currentSale.OperationID = null;\r\n                    var currentSaleObject = !isNewSale ? saleService.convertCurrentSaleForAPI($scope.currentSale, 'PARKED') :\r\n                        convertToAPI($scope.currentSale, SaleStatusType.Parked, false);\r\n\r\n                    return saleService.parkSale(currentSaleObject, $scope.currentSale).then(function (resp) {\r\n                        $scope.cleanSale();\r\n                        $.unblockUI();\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve(true);\r\n                        return deferred.promise;\r\n                    }, function (err) {\r\n                        // process error\r\n                        $.unblockUI();\r\n                        // show error and login page once more\r\n                        errorService.showError(err, function () {\r\n                            $scope.showDialog();\r\n                        });\r\n                    });\r\n                };\r\n\r\n                $scope.printReceipt = function () {\r\n                    return printService.printReceipt();\r\n                };\r\n\r\n                $scope.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n                function updateReceipt() {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    calculateSums(); // to correctly recalculate sums when customer is added/removed from sale\r\n\r\n                    var curSale = angular.copy($scope.currentSale);\r\n                    curSale.Date = helperService.getFormatedDateAlreadyLocal($scope.currentSale.DateNative);\r\n\r\n                    if (!isNewSale)\r\n                        saleService.updateReceipt(curSale, $scope.receiptSaleModel, $scope.formHolder.sumToPayLeft, $scope.currency, $scope.posTaxInclucive);\r\n                    else\r\n                        CalculatorHelperService.updateReceipt(curSale, $scope.receiptSaleModel, $scope.currency);\r\n                }\r\n\r\n                watchers.push($scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n                    checkOfflinePaymentMethods();\r\n                }));\r\n\r\n                function checkOfflinePaymentMethods() {\r\n                    if ($scope.currentSale.cantProcessOffline === true && configService.isOnline === false) {\r\n                        showOfflinePaymentsDialog();\r\n                    }\r\n                }\r\n\r\n                function showOfflinePaymentsDialog() {\r\n                    // $scope.offlinePaymentsModalInstance = $uibModal.open({\r\n                    //     animation: true,\r\n                    //     ariaLabelledBy: 'modal-title',\r\n                    //     ariaDescribedBy: 'modal-body',\r\n                    //     templateUrl: 'offlinePaymentsDIalogPartial.html',\r\n                    //     scope: $scope\r\n                    // });\r\n                    //removeOnlinePaymentMethods();\r\n\r\n                    $scope.dialogMode = 'removeOnlinePaymentMethods';\r\n\r\n                    helperService.showCustomDialog(\r\n                        gettextCatalog.getString('Offline mode'),\r\n                        gettextCatalog.getString('Sales with loyalty or store credit payments or returns cannot be processed without connection to the server.') + '<br />' +\r\n                        gettextCatalog.getString('Do you want to remove invalid payment methods?'),\r\n                        gettextCatalog.getString('Remove'),\r\n                        '',\r\n                        false);\r\n                }\r\n\r\n                // $scope.closeOfflinePaymentsDialog = function () {\r\n                //     $scope.offlinePaymentsModalInstance.dismiss('cancel');\r\n                // };\r\n\r\n                $scope.removeOnlinePaymentMethods = function () {\r\n                    var paymentToRemove = [];\r\n                    $.each($scope.currentSale.Payments, function (idx, el) {\r\n                        if (el.ShortName === 'loyalty' || el.ShortName === 'store credits') {\r\n                            removePayment(el, paymentToRemove);\r\n                        }\r\n                    });\r\n\r\n                    $.each(paymentToRemove, function (idx, el) {\r\n                        var index = $scope.currentSale.Payments.indexOf(el);\r\n                        $scope.currentSale.Payments.splice(index, 1);\r\n                    });\r\n                    $scope.currentSale.cantProcessOffline = false;\r\n                    $scope.showPaymentSection = 1;\r\n                    updateReceipt();\r\n                }\r\n\r\n                function removePayment(payment, paymentToRemove) {\r\n                    var amount = helperService.DEARRound(parseFloat(payment.Amount), 2);\r\n                    $scope.formHolder.sumToPayLeft += amount;\r\n                    $scope.formHolder.realSum = $scope.formHolder.sumToPayLeft;\r\n\r\n                    $scope.currentSale.Balance = $scope.formHolder.sumToPayLeft;\r\n\r\n                    paymentToRemove.push(payment);\r\n                }\r\n\r\n                $scope.lockSearch = false;\r\n\r\n                watchers.push($scope.$on('scan.barcode', function (event, barcode) {\r\n                    var isCouponDialogVisible = $('#couponlDialogPartial:visible').length > 0;\r\n                    var isGiftCardDialogVisible = $('#giftCardSaleDlg:visible').length > 0;\r\n                    var isGiftCardPayDialogVisible = $('#giftCardPayDlg:visible').length > 0;\r\n                    var isScanSerialNumberDialogVisible = $('#scanSerialNumberDialogPartial:visible').length > 0;\r\n\r\n                    if (isGiftCardDialogVisible) {\r\n                        $scope.currentGiftCardProduct.giftCardCode = barcode;\r\n                    } else if (isGiftCardPayDialogVisible) {\r\n                        $scope.currentGiftCardPay.giftCardCode = barcode;\r\n                    } else if (isCouponDialogVisible) {\r\n                        $scope.couponCode = barcode;\r\n                        helperService.closeDialog('#couponlDialogPartial');\r\n                        $scope.couponDialogCallback('ok');\r\n                    } else if (isScanSerialNumberDialogVisible) {\r\n                        $scope.scanedSerialNumber = {\r\n                            value: barcode\r\n                        };\r\n                        $scope.submitScanSerialNumber();\r\n                    } else\r\n                        $scope.checkSearchAndWait(barcode);\r\n                }));\r\n\r\n                $scope.checkSearchAndWait = function (barcode) {\r\n                    if ($scope.lockSearch) {\r\n                        $timeout(function () {\r\n                            $scope.checkSearchAndWait(barcode);\r\n                        }, 100);\r\n                    } else {\r\n                        $scope.processBarcodeSearch(barcode);\r\n                    }\r\n                };\r\n\r\n                $scope.processBarcodeSearch = function (barcode) {\r\n                    $scope.searchType = 'barcode';\r\n                    $scope.lockSearch = true;\r\n                    console.log('lock search');\r\n                    $scope.searchText = barcode;\r\n                    $('#searchProductInput').val(barcode);\r\n                    var el = $('#searchProductInput')[0];\r\n                    el.dispatchEvent(new Event(\"input\", { bubbles: true }));\r\n                    el.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n            \r\n                    console.log('got scan.barcode: ' + barcode);\r\n\r\n                    $.blockUI();\r\n                    productsService.search(barcode)\r\n                        .then(function (res) {\r\n                            console.log('barcode search done: ' + res);\r\n                            // build page\r\n                            $scope.searchTotal = res;\r\n                            $scope.totalPages = Math.ceil(res / $scope.pageSize);\r\n                            $scope.isInFamily = false;\r\n                            return productsService.getSearchPage(0, $scope.pageSize);\r\n                        })\r\n                        .then(function (res) {\r\n                            var deferred = $q.defer();\r\n\r\n                            console.log('barcode search items done');\r\n                            $scope.searchItems = res.data;\r\n                            $scope.currentPage = res.page;\r\n                            // $scope.addImages(res.data);\r\n\r\n                            if(!res.data || res.data.length == 0 ){\r\n                                $scope.handleEmptyResult($scope.searchText);\r\n                            }\r\n\r\n                            deferred.resolve(res);\r\n                            return deferred.promise;\r\n                        })\r\n                        .finally(function () {\r\n                            var weightBasedBarcode = productsService.weightBasedBarcode;\r\n                            console.log('barcode search items add');\r\n                            var item = $scope.searchItems[0];\r\n                            if ($scope.searchItems && $scope.searchItems.length === 1 && $scope.searchItems[0].isFamily === 0) {\r\n                                var Value = weightBasedBarcode ? weightBasedBarcode.Value : null;\r\n                                $scope.addPaymentItem(item.ProductID, null, null, null, Value);\r\n                                $scope.scrollToAddedPaymentItem();\r\n                            } else if ($scope.searchItems && $scope.searchItems.length === 1 && $scope.searchItems[0].isFamily === 1) {\r\n                                productsService.getFamilySearchFull(item.ProductID).then(function (resp) {\r\n                                    $.each(resp, function (i, el) {\r\n                                        if (el.ProductCode === barcode || el.BarCode === barcode) {\r\n                                            $scope.addPaymentItem(el, true);\r\n                                            $scope.scrollToAddedPaymentItem();\r\n                                            return false;\r\n                                        }\r\n                                    });\r\n                                });\r\n                            }\r\n                            $.unblockUI();\r\n                            $scope.lockSearch = false;\r\n                            console.log('unlock search');\r\n\r\n                            $timeout(function () {\r\n                                fontMeasureService.updateFontSize('catalog-tile', 'productText', 12, 0, true);\r\n\r\n                            }, 100);\r\n                        });\r\n\r\n                    console.log('ready to next search');\r\n                };\r\n\r\n                $scope.showScanSerialNumberDialog = function (itemWithcallback) {\r\n                    $scope.scanedSerialNumber = {\r\n                        value: \"\"\r\n                    };\r\n                    $scope.scanSerialNumberWithCallback = itemWithcallback;\r\n                    var $windowElement = $('#scanSerialNumberDialogPartial');\r\n                    helperService.showDialog($windowElement, null, null, function () {\r\n                        $scope.scanSerialNumberWithCallback.skipScanDialog = false;\r\n                        $scope.scanedSerialNumber = {\r\n                            value: \"\"\r\n                        };\r\n                    });\r\n                }\r\n\r\n                $scope.closeScanSerialNumberDialog = function (cancelPressed) {\r\n                    var $windowElement = $('#scanSerialNumberDialogPartial');\r\n                    helperService.closeDialog($windowElement);\r\n\r\n                    if (cancelPressed) {\r\n                        $scope.scanSerialNumberWithCallback.skipScanDialog = false;\r\n                        $scope.scanedSerialNumber = {\r\n                            value: \"\"\r\n                        };\r\n                    }\r\n                }\r\n\r\n                $scope.showNotNoundSerialNumberDialog = function (itemWithcallback) {\r\n\r\n                    var $windowElement = $('#notFoundSerialNumberDialogPartial');\r\n                    helperService.showDialog($windowElement);\r\n                }\r\n\r\n                $scope.closeNotFoundSerialNumberDialog = function () {\r\n\r\n                    var $windowElement = $('#notFoundSerialNumberDialogPartial');\r\n                    helperService.closeDialog($windowElement);\r\n                }\r\n\r\n                $scope.submitScanSerialNumber = function () {\r\n\r\n                    productsService.checkProductSerialNumber($scope.scanSerialNumberWithCallback.itemID, configService.lastOutletID, $scope.scanedSerialNumber.value)\r\n                        .then(function (resp) {\r\n                            if (resp.found) {\r\n                                $scope.scanSerialNumberWithCallback.callback();\r\n                                $scope.closeScanSerialNumberDialog();\r\n                            } else {\r\n                                $scope.showNotNoundSerialNumberDialog();\r\n                            }\r\n                        }, function () {\r\n                            $scope.showNotNoundSerialNumberDialog();\r\n                        });\r\n\r\n                };\r\n\r\n                $scope.notNoundSerialNumberAddToCheckOut = function () {\r\n                    $scope.scanSerialNumberWithCallback.callback();\r\n                    $scope.closeNotFoundSerialNumberDialog();\r\n                    $scope.closeScanSerialNumberDialog(true);\r\n                };\r\n\r\n\r\n                /*Custom sale*/\r\n\r\n                $scope.showCustomSaleDialog = function () {\r\n                    $scope.hideMenuDropdown();\r\n                    if ($scope.operationName === 'Pay') {\r\n                        $scope.customSale = {};\r\n                        $scope.customSale.Quantity = 1;\r\n                        $scope.customSale.Price = 0;\r\n                        $scope.customSale.Title = '';\r\n                        $(\"#customSaleDialogPartial\").attr('isActive', 'true');\r\n                        var objScope = angular.element(document.getElementById('customSaleDialogPartial')).scope();\r\n                        objScope.customSaleForm.title.$setPristine(); // clear validation on title\r\n\r\n                        helperService.showDialog('#customSaleDialogPartial', function () {\r\n                            $('#customSalePorductName').focus();\r\n                        });\r\n\r\n                    }\r\n\r\n                    //$scope.customSale.Quantity = 1;\r\n                    //$scope.customSaleModalInstance = $uibModal.open({\r\n                    //    animation: true,\r\n                    //    ariaLabelledBy: 'modal-title',\r\n                    //    ariaDescribedBy: 'modal-body',\r\n                    //    templateUrl: 'customSaleDialogPartial.html',\r\n                    //    scope: $scope\r\n                    //});\r\n                }\r\n\r\n                $scope.closeCustomSaleDialog = function () {\r\n                    helperService.closeDialog('#customSaleDialogPartial');\r\n                    // $scope.customSaleModalInstance.dismiss('cancel');\r\n                };\r\n\r\n                $scope.addCustomSaleProduct = function (scp) {\r\n                    var productName = $scope.customSale.Title;\r\n                    if (productName && productName.length > 256) {\r\n                        errorService.showError(gettextCatalog.getString('Maximum name length is 256 characters.'));\r\n                        return false;\r\n                    }\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    var loyaltyEarning = parseFloat(configService.loyaltyEarning);\r\n\r\n                    var taxObject = saleService.getTaxObject($scope.currentSale);\r\n\r\n                    var priceWithTax = $scope.posTaxInclucive ? parseFloat($scope.customSale.Price) : parseFloat($scope.customSale.Price) + calculateTax(taxObject, parseFloat($scope.customSale.Price));\r\n\r\n                    // add new payment line\r\n                    var price = parseFloat($scope.customSale.Price);\r\n\r\n\r\n                    var pl = {\r\n                        ID: uuid2.newguid(),\r\n                        ProductID: uuid2.newguid(),\r\n                        Name: $scope.customSale.Title,\r\n                        Count: $scope.customSale.Quantity,\r\n                        Price: price, //price,\r\n                        BasePrice: parseFloat($scope.customSale.Price),\r\n                        Amount: (+$scope.customSale.Quantity) * price,\r\n                        Discount: 0, //discount,\r\n                        Note: '',\r\n                        Tax: calculateTax(taxObject, parseFloat($scope.customSale.Price * $scope.customSale.Quantity)),\r\n                        TaxRuleID: taxObject.ruleID,\r\n                        ProductTaxString: null,\r\n                        Taxes: taxObject,\r\n                        LoyaltyPoints: loyaltyEarning ? (priceWithTax * loyaltyEarning) : 0,\r\n                        LoyaltyPointsEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                        LoyaltyEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                        PriceWithTax: priceWithTax,\r\n                        CanEdit: true,\r\n                        CanDelete: true,\r\n                        SaleType: 'customsale',\r\n                        BasePriceWithDiscount: parseFloat($scope.customSale.Price)\r\n                    };\r\n\r\n                    if (isNewSale) {\r\n                        CalculatorHelperService.addCheckoutItemsToSale($scope.currentSale, pl, saleService.getProductDeals(), $scope);\r\n                    } else {\r\n                        $scope.currentSale.CheckoutItems.push(pl);\r\n                        // $scope.customSaleModalInstance.dismiss('cancel');\r\n                        saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n                    }\r\n\r\n                    helperService.closeDialog('#customSaleDialogPartial');\r\n                    $scope.updateSizesInCheckout();\r\n                };\r\n\r\n\r\n                $scope.returnSaleDialog = function () {\r\n                    $scope.showRefundAmountError = false;\r\n                    $scope.returnSaleDialogInstance = $uibModal.open({\r\n                        animation: true,\r\n                        ariaLabelledBy: 'modal-title',\r\n                        ariaDescribedBy: 'modal-body',\r\n                        templateUrl: 'returnSaleDialogPartial.html',\r\n                        scope: $scope\r\n                    });\r\n                }\r\n\r\n                $scope.closeReturnSaleDialog = function () {\r\n                    $scope.returnSaleDialogInstance.dismiss('cancel');\r\n                };\r\n\r\n                $scope.showRefundAmountError = false;\r\n\r\n                $scope.cancelSearchMode = function () {\r\n                    $scope.isSearchVisible = true;\r\n                    $scope.searchItems = null;\r\n                    $scope.page = 0;\r\n                    $scope.searchTotal = 0;\r\n                    $scope.searchText = null;\r\n                };\r\n\r\n                $scope.hideOptions = function (selPrn) {\r\n                    var prn = $(selPrn);\r\n                    var el = $(prn.attr('data-target'));\r\n                    el.collapse('hide');\r\n                    prn.attr('aria-expanded', 'false');\r\n                    prn.addClass('collapsed');\r\n                };\r\n\r\n                $scope.discountDlg = null; // is bound to discount popover object with methods from directive\r\n                $scope.discountCls = null;\r\n                $scope.discountTitle = gettextCatalog.getString(\"Paste code\");\r\n                $scope.LLCurrentValue = null;\r\n                $scope.LLDiscountType = null;\r\n                $scope.LLDiscountTitle = null;\r\n                $scope.LLCopiedCode = null;\r\n\r\n                $scope.showDiscountDlg = function () {\r\n                    if ($scope.canAddDiscount) {\r\n                        $scope.discountCls = loyaltyService.isLoyaltyEnabled() ? 'll-discount-zone' : null;\r\n                        var stagedCode = ($scope.LLCopiedCode && $scope.LLCopiedCode.customerID === $scope.currentSale.customer.ID) ? $scope.LLCopiedCode.code : null;\r\n                        $scope.LLCurrentValue = $scope.currentSale.customer.ID ? ($scope.currentSale.customer.LLDiscountCode || stagedCode) : null;\r\n                        if(!!$scope.LLCurrentValue && $scope.LLDiscountTitle !== null) {\r\n                            $scope.LLDiscountType = $scope.currentSale.isDiscountPercent ? 'percentage' : 'flat';\r\n                        }\r\n                        $scope.discountDlg.toggle();\r\n                    }\r\n                };\r\n\r\n                // callback\r\n\r\n                $scope.setDiscount = function (prm) {\r\n\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if (typeof (prm) === 'boolean') {\r\n                        $scope.currentSale.manuallyAppliedDiscount = true;\r\n                        $scope.currentSale.isDiscountPercent = prm;\r\n                        $scope.discountDlg.hide(true);\r\n                        if ($scope.currentSale.customer.ID)\r\n                            $scope.currentSale.customer.LLDiscountCode = $scope.LLCurrentValue;\r\n                    } else if (typeof (prm) == 'string') {\r\n                        if (prm === 'clean') {\r\n                            $scope.discountDlg.clean();\r\n                            $scope.currentSale.manuallyAppliedDiscount = false;\r\n                        } else\r\n                        if (prm === 'cancel') {\r\n                            $scope.discountDlg.hide(false);\r\n                        }\r\n                    }\r\n\r\n                    if (isNewSale) {\r\n\r\n                        $timeout(function () {\r\n                            if (typeof ($scope.currentSale.Discount) === 'string') {\r\n                                $scope.currentSale.Discount = helperService.DEARRound(Number($scope.currentSale.Discount), 2);\r\n                            }\r\n\r\n                            if (needClearLLDiscount(prm)) {\r\n                                $scope.currentSale.manuallyAppliedDiscount = undefined;\r\n                                clearSaleLLDiscount();\r\n                            }\r\n\r\n                            var res = CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope, StartCalcLevel.Total);\r\n                            if (res.updateSaleOrderDiscount !== null) {\r\n                                $scope.currentSale.Discount = helperService.DEARRound(res.updateSaleOrderDiscount, 2);\r\n                            }\r\n                            $scope.updateSizesInCheckout();\r\n                        });\r\n                    } else {\r\n                        if (needClearLLDiscount(prm)) {\r\n                            clearSaleLLDiscount();\r\n                        }\r\n                        helperService.storeCurrentSale($scope.currentSale, $scope);\r\n                        $scope.updateSizesInCheckout();\r\n                    }\r\n\r\n                };\r\n\r\n                $scope.itemQuantityDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n                $scope.removeItemFromCheckout = function (item) {\r\n                    if (item.CanEdit !== false) {\r\n                        $scope.checkOutItem = {};\r\n                        angular.copy(item, $scope.checkOutItem);\r\n\r\n                        if (item.ProductType == 'GiftCard') {\r\n                            $scope.dialogMode = 'giftCardRemoveItem';\r\n                            helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                                gettextCatalog.getString('Would you like to remove gift card: ') + item.GiftCardCode + '?',\r\n                                gettextCatalog.getString('Remove'),\r\n                                gettextCatalog.getString('Cancel'));\r\n                        } else if (item.SerialNumber) {\r\n                            $scope.dialogMode = 'serialNumberProductRemove';\r\n                            helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                                gettextCatalog.getString('Would you like to remove product: ') + item.SerialNumber + '?',\r\n                                gettextCatalog.getString('Remove'),\r\n                                gettextCatalog.getString('Cancel'));\r\n                        } else {\r\n                            $scope.dialogMode = 'ProductRemove';\r\n                            helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                                gettextCatalog.getString('Would you like to remove this product?'),\r\n                                gettextCatalog.getString('Remove'),\r\n                                gettextCatalog.getString('Cancel'));\r\n                        }\r\n                    }\r\n                };\r\n\r\n                $scope.showItemQuantityDlg = function (item, el) {\r\n                    if (item.CanEdit !== false) {\r\n                        $scope.checkOutItem = {};\r\n                        angular.copy(item, $scope.checkOutItem);\r\n\r\n                        if (item.ProductType == 'GiftCard') {\r\n                            return false;\r\n                            // $scope.dialogMode = 'giftCardRemoveItem';\r\n                            // helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                            //                                gettextCatalog.getString('Do you want to remove Gift Card: ') + item.GiftCardCode + '?',\r\n                            //                                gettextCatalog.getString('Remove'),\r\n                            //                                gettextCatalog.getString('Cancel'));\r\n                        } else if (item.SerialNumber) {\r\n                            $scope.dialogMode = 'serialNumberProductRemove';\r\n                            helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                                gettextCatalog.getString(\"Quantity for serial numbered products can't be changed. Would you like to delete this product from checkout?\"),\r\n                                gettextCatalog.getString('Remove'),\r\n                                gettextCatalog.getString('Cancel'));\r\n                        } else {\r\n                            $timeout(function () {\r\n                                $scope.itemQuantityDlg.show(el);\r\n                            });\r\n                        }\r\n                    }\r\n\r\n                };\r\n\r\n                // callback\r\n                $scope.setQuantity = function (prm, event) {\r\n\r\n                    $timeout(function () {\r\n                        $scope.itemQuantityDlg.hide(true);\r\n                    });\r\n\r\n                    if (prm === true) {\r\n                        $timeout(function () {\r\n                            $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                                if (el.ID === $scope.checkOutItem.ID) {\r\n                                    el.Count = $scope.checkOutItem.Count;\r\n\r\n                                    if (el.Count > 0 || (($scope.currentSale.StandAloneReturn || $scope.currentSale.StandAloneExchange) && el.Count < 0)) {\r\n                                        $scope.changeItemCount(el);\r\n                                    } else {\r\n                                        $scope.removePaymentItem(el.ID);\r\n                                        if (!helperService.showNewCheckoutUI($scope.currentSale))\r\n                                            saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n                                    }\r\n\r\n                                    $timeout(function () {\r\n                                        fontMeasureService.updateFontSize('quantityValueParent', el.ID + '-quantityValue', 13.5);\r\n                                        fontMeasureService.updateFontSize('productQuantityParent', el.ID + '-productQuantity', 12);\r\n                                        fontMeasureService.updateFontSize('productPriceParent', el.ID + '-productPrice', 12);\r\n                                        fontMeasureService.updateFontSize('productDiscountParent', el.ID + '-productDiscount', 12);\r\n\r\n                                    }, 100);\r\n\r\n                                    return false;\r\n                                }\r\n                            });\r\n                        });\r\n                    } else if (typeof (prm) == 'string') {\r\n                        if (prm === 'clean') {\r\n                            $scope.removePaymentItem($scope.checkOutItem.ID);\r\n                        }\r\n                    }\r\n\r\n                    if (event) {\r\n                        event.stopPropagation();\r\n                        event.preventDefault();\r\n                    }\r\n                };\r\n\r\n                $scope.customDiscountDlg = null;\r\n\r\n                $scope.customDiscountSettings = {\r\n                    title: ''\r\n                };\r\n\r\n                $scope.tryShowCustomDiscountDlg = function (item, el) {\r\n                    if ($scope.canChangePrice || $scope.operationName === \"Refund\") {\r\n                        $scope.showCustomDiscountDlg(item, el);\r\n                    }\r\n                };\r\n\r\n                $scope.showCustomDiscountDlg = function (item, el) {\r\n                    var isNewVersion = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if ($scope.saleType === 'standaloneReturn')\r\n                        $scope.customDiscountSettings.title = \"Price\";\r\n                    else\r\n                        $scope.customDiscountSettings.title = \"Price or % discount\";\r\n\r\n                    if (item.CanEdit !== false) {\r\n                        $scope.checkOutItem = angular.copy(item);\r\n\r\n                        if ($scope.saleType === 'standaloneReturn') {\r\n                            if (isNewVersion !== true)\r\n                                $scope.checkOutItem.Discount = $scope.checkOutItem.Price;\r\n                            else\r\n                                $scope.checkOutItem.Discount = $scope.checkOutItem.FinalPrice;\r\n\r\n                            $scope.checkOutItem.CustomDiscountType = \"standaloneReturn\";\r\n                        } else {\r\n                            if (!$scope.checkOutItem.Discount)\r\n                                $scope.checkOutItem.Discount = 0;\r\n\r\n                            if (!$scope.checkOutItem.CustomDiscountType) {\r\n                                $scope.checkOutItem.CustomDiscountType = \"percent\";\r\n                                $scope.checkOutItem.Discount = 0;\r\n                            }\r\n                        }\r\n\r\n                        $timeout(function () {\r\n                            $scope.customDiscountDlg.show(el);\r\n                        });\r\n                    }\r\n\r\n                };\r\n\r\n                $scope.customSetDiscount = function (prm) {\r\n                    var isNewVersion = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    $timeout(function () {\r\n                        $scope.customDiscountDlg.hide(true);\r\n                    });\r\n\r\n                    if (prm !== 'cancel') {\r\n                        $timeout(function () {\r\n                            if (!isNewVersion) {\r\n                                $scope.currentSale.manuallyAppliedDiscount = true;\r\n                                $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                                    if (el.ID === $scope.checkOutItem.ID) {\r\n                                        if (prm === 'standaloneReturn') {\r\n                                            var price = -Math.abs($scope.checkOutItem.Discount);\r\n                                            el.Discount = 0;\r\n                                            el.CustomDiscountType = undefined;\r\n                                            el.Price = price;\r\n                                            el.Amount = price * el.Count;\r\n                                            el.BasePrice = price;\r\n                                            el.BasePriceWithDiscount = price;\r\n                                            el.PriceWithDiscount = price;\r\n                                        } else {\r\n                                            el.Discount = $scope.checkOutItem.Discount;\r\n                                            el.CustomDiscountType = prm;\r\n                                        }\r\n\r\n                                        $scope.changeItemCount(el); // actually no item count will be changed but this function does all we need to recalculate all\r\n\r\n                                        $timeout(function () {\r\n                                            fontMeasureService.updateFontSize('productPriceParent', el.ID + '-productPrice', 12);\r\n                                            fontMeasureService.updateFontSize('productDiscountParent', el.ID + '-productDiscount', 12);\r\n\r\n                                        }, 100);\r\n\r\n                                        return false;\r\n                                    }\r\n                                });\r\n                            } else {\r\n                                CalculatorHelperService.setCustomItemDiscount($scope.currentSale, saleService.getProductDeals(), $scope,\r\n                                    $scope.checkOutItem.ID,\r\n                                    $scope.checkOutItem.Discount, prm);\r\n\r\n                                $timeout(function () {\r\n                                    fontMeasureService.updateFontSize('productPriceParent', el.ID + '-productPrice', 12);\r\n                                    fontMeasureService.updateFontSize('productDiscountParent', el.ID + '-productDiscount', 12);\r\n\r\n                                }, 100);\r\n                            }\r\n                        });\r\n                    }\r\n\r\n                    if (event) {\r\n                        event.stopPropagation();\r\n                        event.preventDefault();\r\n                    }\r\n\r\n                };\r\n\r\n                $scope.payDlg = null;\r\n\r\n                $scope.showPayDlg = function () {\r\n                    if ($scope.saleType === 'standaloneReturn' ||\r\n                        ($scope.saleType === 'return' && $scope.currentSale.Total < 0)) {\r\n                        if (!$scope.currentSale.customer ||\r\n                            !$scope.currentSale.customer.ID) {\r\n                            errorService.showError('Please add a customer for this refund.');\r\n                        } else {\r\n                            showReturnPaymentsDialog();\r\n                        }\r\n                    } else\r\n                        $scope.payDlg.toggle();\r\n                };\r\n\r\n                $scope.setPay = function (prm) {\r\n                    $scope.payDlg.hide(prm);\r\n                    if (prm === true) {\r\n                        $scope.payAmountChanged();\r\n\r\n                        $timeout(function () {\r\n                            fontMeasureService.updateFontSize('payAmountParent', 'payAmount', 18);\r\n                            $timeout(function () {\r\n                                $rootScope.$broadcast('recalculate');\r\n                            }, 100);\r\n\r\n                        }, 100);\r\n                    }\r\n                };\r\n\r\n                $scope.productOptionsDlg = null;\r\n                $scope.currentProductFamily = null;\r\n                $scope.showProductOptionsDlg = function (el) {\r\n                    $scope.productOptionsDlg.show(el);\r\n                };\r\n\r\n                $scope.addProductToCheckout = function (res) {\r\n                    $scope.productOptionsDlg.hide();\r\n                    $scope.currentProductFamily = null;\r\n\r\n                    if (!!res && (res instanceof OptionsTreeItem)) {\r\n                        $scope.addPaymentItem(res);\r\n                    }\r\n                };\r\n\r\n                $scope.currentNote = '';\r\n                $scope.noteMode = 'note'; // note - means simply add note, 'park' - means dialog after which sale wil be parked\r\n\r\n                $scope.callbackModal2 = function (code) {\r\n                    switch (code) {\r\n                        case 'delete':\r\n                            // do nothing as sale is already removed from parked sales\r\n                            //$.blockUI();\r\n                            //saleService.discardParkedSale($scope.currentSale.ID).then(function () {\r\n                            //    $scope.cleanSale();\r\n                            //    window.localStorage.setItem('continueSale', null);\r\n                            //})\r\n                            //.finally(function (res) {\r\n                            //    $.unblockUI();\r\n                            //});\r\n                            $scope.cleanSale();\r\n                            window.localStorage.setItem('continueSale', null);\r\n                            break;\r\n\r\n                        case 'clear':\r\n                            // save sale back to parked list as we have removed it when go to the sale page from the parked sales page\r\n                            $scope.parkSale()\r\n                                .then(function () {\r\n                                    $scope.cleanSale();\r\n                                    window.localStorage.setItem('continueSale', null);\r\n                                });\r\n\r\n                            break;\r\n                    }\r\n                };\r\n\r\n                $scope.showDiscardDialog = function (mode) {\r\n\r\n                    $scope.customModalDlg2Caption = '';\r\n                    $scope.customModalDlg2Text = gettextCatalog.getString('Would you like to delete the parked sale or clear the current sale?');\r\n                    $scope.customModalDlg2Buttons = [{\r\n                            name: gettextCatalog.getString('Cancel'),\r\n                            value: 'cancel'\r\n                        },\r\n                        {\r\n                            name: gettextCatalog.getString('Delete'),\r\n                            value: 'delete'\r\n                        },\r\n                        {\r\n                            name: gettextCatalog.getString('Clear'),\r\n                            value: 'clear'\r\n                        }\r\n                    ];\r\n\r\n                    helperService.showDialog('#customModalDlg2');\r\n                };\r\n\r\n\r\n                $scope.afterParkCallback = null;\r\n                $scope.showSkipButton = false;\r\n\r\n                $scope.showAddSaleNoteDialog = function (mode) {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                    $scope.hideMenuDropdown();\r\n\r\n                    if (!$scope.currentSale.CheckoutItems || $scope.currentSale.CheckoutItems.length === 0) {\r\n                        return;\r\n                    }\r\n\r\n                    $scope.noteMode = !mode ? 'note' : mode;\r\n                    $scope.currentNote = !isNewSale ? $scope.currentSale.comment : $scope.currentSale.Comment;\r\n                    var $windowElement = $('#addNotesDialogModal');\r\n                    helperService.showDialog($windowElement, function () {\r\n                        $(\"#saleNoteArea\").focus();\r\n                    });\r\n\r\n                };\r\n\r\n                $scope.closeAddSaleNoteDialog = function (cancel) {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                    $scope.showSkipButton = false;\r\n\r\n                    if (cancel === false) {\r\n                        if (!isNewSale)\r\n                            $scope.currentSale.comment = $scope.currentNote;\r\n                        else\r\n                            $scope.currentSale.Comment = $scope.currentNote;\r\n                    }\r\n                    var fun = $scope.afterParkCallback;\r\n                    $scope.afterParkCallback = null;\r\n                    var $windowElement = $('#addNotesDialogModal');\r\n\r\n                    if (cancel === true || $scope.noteMode != 'park') {\r\n                        helperService.closeDialog($windowElement);\r\n                    } else\r\n                        helperService.closeDialog($windowElement, function () {\r\n\r\n                            if (cancel !== 'skip') {\r\n                                var p = $scope.parkSale();\r\n\r\n                                if (typeof (fun) === 'function') {\r\n                                    p = p.then(function (res) {\r\n                                        return fun();\r\n                                    });\r\n                                }\r\n\r\n                                return p;\r\n                            } else {\r\n                                if (typeof (fun) === 'function') {\r\n                                    $.blockUI();\r\n                                    var id = $scope.currentSale.ID;\r\n                                    $scope.cleanSale();\r\n                                    window.localStorage.setItem('continueSale', null);\r\n\r\n                                    p = saleService.discardParkedSale(id)\r\n                                        .then(function () {\r\n                                            return fun();\r\n                                        })\r\n                                        .finally(function (res) {\r\n                                            $.unblockUI();\r\n                                        });\r\n\r\n                                    return p;\r\n                                }\r\n                            }\r\n                        });\r\n                };\r\n\r\n                $scope.quickPayDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n                $scope.showqQickPayDlg = function () {\r\n                    $(\"#customSaleDialogPartial\").attr('isActive', 'false');\r\n                    $scope.quickPayDlg.toggle();\r\n                };\r\n\r\n                // callback\r\n                $scope.setQuickQuantity = function (prm, event) {\r\n\r\n                    if (event) {\r\n                        event.stopPropagation();\r\n                        event.preventDefault();\r\n                    }\r\n                    $timeout(function () {\r\n                        if (typeof (prm) === 'boolean') {\r\n                            if (prm === true) {\r\n                                var scp = $scope.quickPayDlg.getScope();\r\n                                var model = scp.$$childHead.model;\r\n                                if (model <= 0)\r\n                                    scp.$$childHead.model = 1;\r\n                                $scope.quickPayDlg.hide(true);\r\n                            } else\r\n                                $scope.quickPayDlg.hide(false);\r\n                        } else if (typeof (prm) == 'string') {\r\n                            if (prm === 'clean') {\r\n                                var scp = $scope.quickPayDlg.getScope();\r\n                                scp.$$childHead.model = 0;\r\n                            } else if (prm === 'cancel') {\r\n                                $scope.quickPayDlg.hide(false);\r\n                            }\r\n                        }\r\n                    });\r\n\r\n                    setTimeout(function () {\r\n                        $(\"#customSaleDialogPartial\").attr('isActive', 'true');\r\n                    }, 100);\r\n                };\r\n\r\n\r\n                $scope.quickPaySumDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n                $scope.showQuickPaySumDlg = function () {\r\n                    $(\"#customSaleDialogPartial\").attr('isActive', 'false');\r\n                    $scope.quickPaySumDlg.toggle();\r\n                };\r\n\r\n                // callback\r\n                $scope.setQuickPrice = function (prm, event) {\r\n\r\n                    if (event) {\r\n                        event.stopPropagation();\r\n                        event.preventDefault();\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        if (typeof (prm) === 'boolean') {\r\n                            if (prm === true) {\r\n                                var scp = $scope.quickPaySumDlg.getScope();\r\n                                var model = scp.$$childHead.model;\r\n                                scp.$parent.invalidPrice = model <= 0;\r\n\r\n                                $scope.quickPaySumDlg.hide(true);\r\n                            } else {\r\n                                $scope.quickPaySumDlg.hide(false);\r\n                            }\r\n                        } else if (typeof (prm) == 'string') {\r\n                            if (prm === 'clean') {\r\n                                var scp = $scope.quickPaySumDlg.getScope();\r\n                                scp.$$childHead.model = 0;\r\n                            } else if (prm === 'cancel') {\r\n                                $scope.quickPaySumDlg.hide(false);\r\n                            }\r\n                        }\r\n                    });\r\n\r\n                    setTimeout(function () {\r\n                        $(\"#customSaleDialogPartial\").attr('isActive', 'true');\r\n                    }, 100);\r\n\r\n                };\r\n\r\n                $scope.getEmailClasss = function (form, isControl) {\r\n                    if (isControl) {\r\n                        if ((!form.$invalid && form.$dirty) || (!form.$invalid && form.length > 0))\r\n                            return 'dp_has-success has-success';\r\n                        else if (((form.$invalid || form.$error.required || form.$error.email) && (form.$dirty || form.length > 0)))\r\n                            return 'has-danger dp_has-danger';\r\n                    } else {\r\n                        if ((!form.receiptEmail.$invalid && form.receiptEmail.$dirty) || (!form.receiptEmail.$invalid && form.receiptEmail.length > 0))\r\n                            return 'dp_has-success has-success';\r\n                        else if (((form.receiptEmail.$invalid || form.receiptEmail.$error.required || form.receiptEmail.$error.email) && (form.receiptEmail.$dirty || form.receiptEmail.length > 0)))\r\n                            return 'has-danger dp_has-danger';\r\n                    }\r\n                }\r\n\r\n                $scope.swipeDirection = 'current';\r\n                $scope.swipe = function (direction) {\r\n                    if (direction === 'left' && $scope.page > 1) {\r\n                        $scope.page -= 1;\r\n                        $scope.swipeDirection = 'left';\r\n                        $timeout(function () {\r\n                            $scope.hideNoProdMessage = true;\r\n                            $scope.searchItems = [];\r\n                            $scope.swipeDirection = 'current';\r\n                            $scope.changePage($scope.page);\r\n                        }, 100);\r\n                    }\r\n\r\n                    if (direction === 'right' && $scope.page < $scope.totalPages) {\r\n                        $scope.page += 1;\r\n                        $scope.swipeDirection = 'right';\r\n                        $timeout(function () {\r\n                            $scope.hideNoProdMessage = true;\r\n                            $scope.searchItems = [];\r\n                            $scope.swipeDirection = 'current';\r\n                            $scope.changePage($scope.page);\r\n                        }, 100);\r\n                    }\r\n                }\r\n\r\n                //$scope.generateTestScanSeries = function () {\r\n                //    $timeout(function () {\r\n                //        $rootScope.$broadcast('scan.barcode', '000001');\r\n                //    }, 100);\r\n                //    $timeout(function () {\r\n                //        $rootScope.$broadcast('scan.barcode', '000002');\r\n                //    }, 100);\r\n                //    $timeout(function () {\r\n                //        $rootScope.$broadcast('scan.barcode', '000003');\r\n                //    }, 100);\r\n                //    $timeout(function () {\r\n                //        $rootScope.$broadcast('scan.barcode', '000004');\r\n                //    }, 100);\r\n                //    $timeout(function () {\r\n                //        $rootScope.$broadcast('scan.barcode', '000005');\r\n                //    }, 100);\r\n                //};\r\n\r\n\r\n                function updateCustomSale(sale) {\r\n                    var loyaltyEarning = parseFloat(configService.loyaltyEarning);\r\n\r\n                    var taxObject = saleService.getTaxObject($scope.currentSale);\r\n                    var priceWithTax = $scope.posTaxInclucive ? parseFloat(sale.Price) : parseFloat(sale.Price) + calculateTax(taxObject, parseFloat(sale.Price));\r\n\r\n                    // add new payment line\r\n                    var price = parseFloat(sale.Price);\r\n\r\n\r\n                    var pl = {\r\n                        ID: uuid2.newguid(),\r\n                        ProductID: uuid2.newguid(),\r\n                        Name: sale.Name,\r\n                        Count: parseInt(sale.Count),\r\n                        Price: price, //price,\r\n                        BasePrice: parseFloat(sale.Price),\r\n                        Amount: parseInt(sale.Count) * price,\r\n                        Discount: 0, //discount,\r\n                        Note: '',\r\n                        Tax: calculateTax(taxObject, parseFloat(sale.Price)),\r\n                        TaxRuleID: taxObject.ruleID,\r\n                        Taxes: taxObject,\r\n                        LoyaltyPoints: loyaltyEarning ? (priceWithTax * loyaltyEarning * parseInt(sale.Count)) : 0,\r\n                        LoyaltyPointsEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                        PriceWithTax: priceWithTax,\r\n                        CanEdit: true,\r\n                        CanDelete: true,\r\n                        SaleType: 'customsale',\r\n                        BasePriceWithDiscount: parseFloat(sale.Price)\r\n                    };\r\n\r\n                    return pl;\r\n                }\r\n\r\n                watchers.push($scope.$on('sell.reload', function (event, data) {\r\n                    var promises = [];\r\n                    if ($scope.currentSale.Payments.length === 0) {\r\n\r\n                        if ($scope.saleType !== \"continue\")\r\n                            $scope.posTaxInclucive = configService.taxInclucive === \"True\";\r\n                        $scope.showLoyalty = configService.enableLoyalty;\r\n\r\n                        if ($scope.searchItems && $scope.searchText) {\r\n                            var pr = productsService.search($scope.searchText)\r\n                                .then(function (res) {\r\n\r\n                                    // build page\r\n                                    $scope.searchTotal = res;\r\n                                    $scope.totalPages = Math.ceil(res / $scope.pageSize);\r\n                                    $scope.isInFamily = false;\r\n                                    return productsService.getSearchPage($scope.page - 1, $scope.pageSize);\r\n                                })\r\n                                .then(function (res) {\r\n                                    $scope.searchItems = res.data;\r\n                                    $scope.currentPage = res.page;\r\n                                    //$scope.addImages(res.data);\r\n\r\n                                    $timeout(function () {\r\n                                        fontMeasureService.updateFontSize('catalog-tile', 'productText', 12, 0, true);\r\n                                    }, 100);\r\n                                });\r\n\r\n                            promises.push(pr);\r\n                        } else if ($scope.searchType != \"quickKey\") {\r\n                            $scope.searchItems = [];\r\n                        }\r\n\r\n\r\n                        $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                            if (el.CanEdit !== false && el.CanDelete !== false) {\r\n                                if (el.SaleType !== 'customsale') {\r\n                                    var pr1 = productsService.getProductByID(el.ProductID).then(function (resp) {\r\n                                        var foundItem = resp.data[0];\r\n                                        if (foundItem && foundItem.ProductType !== 'GiftCard') {\r\n\r\n                                            if (foundItem.CostingMethod === \"FESN\" || foundItem.CostingMethod === \"SN\" || foundItem.CostingMethod === \"FISN\") {\r\n                                                $scope.scanSerialNumberWithCallback = {\r\n                                                    skipScanDialog: true\r\n                                                };\r\n                                            } else {\r\n                                                $scope.scanSerialNumberWithCallback = null;\r\n                                            }\r\n\r\n                                            var itemToCoppy = $scope.addPaymentItem(foundItem, true, true);\r\n                                            var updateItem = angular.copy(itemToCoppy);\r\n                                            var separetedItemID = $scope.currentSale.CheckoutItems[idx].SeparatedItemID;\r\n                                            var id = $scope.currentSale.CheckoutItems[idx].ID;\r\n                                            updateItem.Count = el.Count;\r\n                                            updateItem.SerialNumber = el.SerialNumber;\r\n\r\n                                            if (el.CustomDiscountType === \"price\") {\r\n                                                if (CalculatorHelperService.isSaleInNewFormat($scope.currentSale)) {\r\n                                                    updateItem.CustomDiscountType = el.CustomDiscountType;\r\n                                                    updateItem.BasePriceWithDiscount = el.BasePriceWithDiscount;\r\n                                                    updateItem.FinalAmount = el.FinalAmount;\r\n                                                    updateItem.FinalTaxAmount = el.FinalTaxAmount;\r\n                                                    updateItem.Discount = el.Discount;\r\n                                                    updateItem.ItemDiscount = el.ItemDiscount;\r\n                                                    updateItem.BasePrice = el.BasePrice;\r\n                                                    updateItem.FinalPrice = el.FinalPrice;\r\n                                                    updateItem.LoyaltyPointsEarning = el.LoyaltyPointsEarning;\r\n                                                    updateItem.DefaultPrice = el.DefaultPrice;\r\n                                                } else {\r\n                                                    updateItem.CustomDiscountType = el.CustomDiscountType;\r\n                                                    updateItem.BasePriceWithDiscount = el.BasePriceWithDiscount;\r\n                                                    updateItem.Amount = el.Amount;\r\n                                                    updateItem.Discount = el.Discount;\r\n                                                    updateItem.itemAppliedDiscount = el.itemAppliedDiscount;\r\n                                                    updateItem.itemDiscount = el.itemDiscount;\r\n                                                    updateItem.Price = el.Price;\r\n                                                    updateItem.PriceWithDiscount = el.PriceWithDiscount;\r\n                                                    updateItem.Tax = el.Tax;\r\n                                                    updateItem.PriceWithTax = el.PriceWithTax;\r\n                                                    updateItem.LoyaltyPoints = el.LoyaltyPoints;\r\n                                                }\r\n                                            }\r\n\r\n                                            $scope.currentSale.CheckoutItems[idx] = updateItem;\r\n                                            $scope.currentSale.CheckoutItems[idx].SeparatedItemID = separetedItemID;\r\n                                            $scope.currentSale.CheckoutItems[idx].ID = id;\r\n                                            $scope.changeItemCount(updateItem);\r\n                                        }\r\n                                    });\r\n                                    promises.push(pr1);\r\n                                }\r\n                            }\r\n                        });\r\n                        $scope.scanSerialNumberWithCallback = null;\r\n                    }\r\n\r\n                    if (!!data.dontReloadReceipt || !data.dontReloadReceipt) {\r\n                        var pr2 = receiptService.getReceiptTemplate(false).then(function (resp) {\r\n\r\n                            var injectedString = '; white-space: pre-wrap;';\r\n                            var position = resp.Template.search(\"\\\">{{itemNotes.SalesNote}}\");\r\n                            var result = [resp.Template.slice(0, position), injectedString, resp.Template.slice(position)].join('');\r\n\r\n                            var replacedString = '<canvas class=\"barcode\" id=\"code93\" type=\"code93\" b_value=\"{{receiptSaleModel.ReceiptBarCode_code93}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{receiptSaleModel.ReceiptBarCode_code93}}</canvas><div class=\"barcode_img img_code93\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code93}}\", replacedString);\r\n                            var replacedString = '<canvas class=\"barcode\" id=\"code128\" type=\"code128\" b_value=\"{{receiptSaleModel.ReceiptBarCode_code128}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{receiptSaleModel.ReceiptBarCode_code128}}</canvas><div class=\"barcode_img img_code128\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code128}}\", replacedString);\r\n\r\n                            var replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-ean8\" type=\"ean8\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean8\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_ean8}}\", replacedString);\r\n                            var replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-ean13\" type=\"ean13\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean13\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_ean13}}\", replacedString);\r\n                            var replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-industrial2of5\" type=\"industrial2of5\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-industrial2of5\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_industrial2of5}}\", replacedString);\r\n                            var replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-upca\" type=\"upca\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upca\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_upca}}\", replacedString);\r\n                            var replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-upce\" type=\"upce\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upce\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_upce}}\", replacedString);\r\n\r\n                            $scope.receiptTemplate = result;\r\n\r\n                            if (resp.EmailTemplate) {\r\n                                position = resp.EmailTemplate.search(\"\\\">{{itemNotes.SalesNote}}\");\r\n                                result = [resp.EmailTemplate.slice(0, position), injectedString, resp.EmailTemplate.slice(position)].join('');\r\n\r\n                                var replacedString = '<div class=\"barcode_img img_code93\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code93}}\", replacedString);\r\n                                var replacedString = '<div class=\"barcode_img img_code128\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code128}}\", replacedString);\r\n\r\n                                var replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean8\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_ean8}}\", replacedString);\r\n                                var replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean13\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_ean13}}\", replacedString);\r\n                                var replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-industrial2of5\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_industrial2of5}}\", replacedString);\r\n                                var replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upca\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_upca}}\", replacedString);\r\n                                var replacedString = '<div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upce\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_upce}}\", replacedString);\r\n\r\n                                $scope.receiptEmailTemplate = result;\r\n                            } else {\r\n                                $scope.receiptEmailTemplate = result;\r\n                            }\r\n\r\n                            $scope.receiptEmailSubject = resp.EmailSubject;\r\n                            $scope.receiptTemplateID = resp.TemplateID;\r\n                        });\r\n\r\n                        promises.push(pr2);\r\n                    }\r\n\r\n                    return Promise.all(promises).then(function () {\r\n                        $.unblockUI();\r\n                        if (data.modal)\r\n                            data.modal.modal('hide');\r\n                        data.modal = null;\r\n                    }, function (err) {\r\n                        $.unblockUI();\r\n                        if (data.modal)\r\n                            data.modal.modal('hide');\r\n                        data.modal = null;\r\n                        errorService.showError(err);\r\n                    });\r\n                }));\r\n\r\n                watchers.push($scope.$on('sell.clean', function (e, data) {\r\n                    $scope.cleanSale();\r\n                    $scope.searchItems = [];\r\n                    $scope.searchText = null;\r\n                }));\r\n\r\n                watchers.push($scope.$on('receipt.template', function (event, data) {\r\n                    secondTerminalService.update($scope, $scope.mode == 'summary' ? 'payment' : 'sale');\r\n                }));\r\n\r\n                watchers.push($scope.$on('sale.update', function () {\r\n                    secondTerminalService.update($scope, 'sale');\r\n                }));\r\n\r\n                $scope.isTotalExceedingMaxPrice = false;\r\n                $scope.isTotalExceedingDlgShow = false;\r\n\r\n                $scope.checkSaleTotalLimit = function () {\r\n\t\t\t\t\tif (!$scope.currentSale || typeof $scope.currentSale.Total !== 'number') {\r\n                        return;\r\n                    }\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                    var saleTotal = isNewSale ? Math.abs($scope.currentSale.Total)\r\n\t\t\t\t\t\t\t\t\t\t\t  : Math.abs($scope.totalSum($scope.currentSale, true));\r\n\r\n                    if (saleTotal > constants.maxAllowedTotalPrice) {\r\n                        if (!$scope.isTotalExceedingDlgShow) {\r\n                            $scope.isTotalExceedingMaxPrice = true;\r\n                            $scope.isTotalExceedingDlgShow = true;\r\n  \r\n                            var errorMessage = gettextCatalog.getString(\r\n                                'Sale total ({{total}}) exceeds maximum allowed price ({{maxPrice}})', {\r\n                                total: $filter('currency')(saleTotal),\r\n                                maxPrice: $filter('currency')(constants.maxAllowedTotalPrice)\r\n                            });\r\n                            \r\n                            errorService.showError(errorMessage, () => {\r\n                                $scope.isTotalExceedingDlgShow = false;\r\n                            }, gettextCatalog.getString('Warning'), false, false);\r\n                        }\r\n                    } else {\r\n                        $scope.isTotalExceedingMaxPrice = false;\r\n                        $scope.isTotalExceedingDlgShow = false;\r\n                    }\r\n                };\r\n\r\n                // update on sale change\r\n                watchers.push($scope.$on('sale.update', function () {\r\n                    $scope.checkSaleTotalLimit();\r\n\r\n                }));\r\n\r\n                // availability check\r\n\r\n                $scope.availabilityObject = {\r\n                    productID: null,\r\n                    isFamily: false,\r\n                    option1: null,\r\n                    option2: null,\r\n                    option3: null,\r\n                    name: null,\r\n                    sku: null,\r\n                    checkData: [],\r\n                    displayCheckData: [],\r\n                    FilterName: null,\r\n                    FilterNames: [],\r\n                    FilterSKU: null,\r\n                    FilterSKUs: [],\r\n                    FilterOption1: null,\r\n                    FilterOption1s: [],\r\n                    FilterOption2: null,\r\n                    FilterOption2s: [],\r\n                    FilterOption3: null,\r\n                    FilterOption3s: [],\r\n                    FilterOutlet: null,\r\n                    FilterOutlets: []\r\n                };\r\n\r\n                $scope.mode = 'none';\r\n                $scope.listSortFun = function (a, b) {\r\n                    if (a.value == null) return -1;\r\n                    if (b.value == null) return 1;\r\n\r\n                    if (a.name < b.name) return -1;\r\n                    else if (a.name > b.name) return 1;\r\n\r\n                    return 0;\r\n                };\r\n\r\n                $scope.itemsByAvailability = 7; // page size\r\n\r\n                $scope.dataPageAvailability = 1;\r\n                $scope.dataCountAvailability = 0;\r\n\r\n                watchers.push($scope.$on(\"showAvailabilityCheckDlg\", function (evt, opts) {\r\n\r\n                    $scope.dataPageAvailability = 1;\r\n                    $scope.dataCountAvailability = 0;\r\n\r\n                    $scope.availabilityObject = $.extend($scope.availabilityObject, opts);\r\n                    var searchOpts = {};\r\n\r\n                    if ($scope.availabilityObject.isFamily) {\r\n                        searchOpts.FamilyID = $scope.availabilityObject.productID;\r\n                        if (!!opts.option1)\r\n                            searchOpts.Option1 = opts.option1;\r\n                        if (!!opts.option2)\r\n                            searchOpts.Option2 = opts.option2;\r\n                        if (!!opts.option3)\r\n                            searchOpts.Option3 = opts.option3;\r\n                    } else\r\n                        searchOpts.ProductID = $scope.availabilityObject.productID;\r\n\r\n\r\n                    $.blockUI();\r\n                    saleService.getProductAvailability(searchOpts).then(function (res) {\r\n                            $scope.availabilityObject.checkData = [];\r\n                            $scope.availabilityObject.displayCheckData = [];\r\n                            $scope.availabilityObject.FilterNames = [];\r\n                            $scope.availabilityObject.FilterSKUs = [];\r\n                            $scope.availabilityObject.FilterOption1s = [];\r\n                            $scope.availabilityObject.FilterOption2s = [];\r\n                            $scope.availabilityObject.FilterOption3s = [];\r\n                            $scope.availabilityObject.FilterOutlets = [];\r\n                            $scope.availabilityObject.averageCost = res && res.data && res.data.length > 0 ? res.data[0].AverageCost : null;\r\n                            $scope.availabilityObject.canSeeItemValue = configService.CanSeeItemValue;\r\n\r\n                            $scope.availabilityFilterName = null;\r\n                            var maxLevel = 0;\r\n\r\n                            var filterNames = {};\r\n                            var filterSKUs = {};\r\n                            var filterOption1s = {};\r\n                            var filterOption2s = {};\r\n                            var filterOption3s = {};\r\n                            var filterOutlets = {};\r\n\r\n                            $.each(res.data, function (idx, el) {\r\n                                if (maxLevel < 1 && !!el.Option1)\r\n                                    maxLevel = 1;\r\n                                if (maxLevel < 2 && !!el.Option2)\r\n                                    maxLevel = 2;\r\n                                if (maxLevel < 3 && !!el.Option3)\r\n                                    maxLevel = 3;\r\n\r\n                                filterNames[el.Name] = {\r\n                                    name: el.Name,\r\n                                    value: el.Name\r\n                                };\r\n                                filterSKUs[el.ProductCode] = {\r\n                                    name: el.ProductCode,\r\n                                    value: el.ProductCode\r\n                                };\r\n                                filterOption1s[el.Option1] = {\r\n                                    name: el.Option1,\r\n                                    value: el.Option1\r\n                                };\r\n                                filterOption2s[el.Option2] = {\r\n                                    name: el.Option2,\r\n                                    value: el.Option2\r\n                                };\r\n                                filterOption3s[el.Option3] = {\r\n                                    name: el.Option3,\r\n                                    value: el.Option3\r\n                                };\r\n                                filterOutlets[el.ECSLocationName] = {\r\n                                    name: el.ECSLocationName,\r\n                                    value: el.ECSLocationName\r\n                                };\r\n                            });\r\n\r\n                            $scope.availabilityObject.FilterNames.push({\r\n                                name: \"All Names\",\r\n                                value: null\r\n                            });\r\n                            for (var i in filterNames)\r\n                                $scope.availabilityObject.FilterNames.push(filterNames[i]);\r\n\r\n                            $scope.availabilityObject.FilterNames.sort($scope.listSortFun);\r\n\r\n                            $scope.availabilityObject.FilterSKUs.push({\r\n                                name: \"All SKU\",\r\n                                value: null\r\n                            });\r\n                            for (var i in filterSKUs)\r\n                                $scope.availabilityObject.FilterSKUs.push(filterSKUs[i]);\r\n\r\n                            $scope.availabilityObject.FilterSKUs.sort($scope.listSortFun);\r\n\r\n                            $scope.availabilityObject.FilterOption1s.push({\r\n                                name: \"All \" + $scope.availabilityObject.option1Name,\r\n                                value: null\r\n                            });\r\n                            for (var i in filterOption1s)\r\n                                $scope.availabilityObject.FilterOption1s.push(filterOption1s[i]);\r\n\r\n                            $scope.availabilityObject.FilterOption1s.sort($scope.listSortFun);\r\n\r\n                            $scope.availabilityObject.FilterOption2s.push({\r\n                                name: \"All \" + $scope.availabilityObject.option2Name,\r\n                                value: null\r\n                            });\r\n                            for (var i in filterOption2s)\r\n                                $scope.availabilityObject.FilterOption2s.push(filterOption2s[i]);\r\n\r\n                            $scope.availabilityObject.FilterOption2s.sort($scope.listSortFun);\r\n\r\n                            $scope.availabilityObject.FilterOption3s.push({\r\n                                name: \"All \" + $scope.availabilityObject.option3Name,\r\n                                value: null\r\n                            });\r\n                            for (var i in filterOption3s)\r\n                                $scope.availabilityObject.FilterOption3s.push(filterOption3s[i]);\r\n\r\n                            $scope.availabilityObject.FilterOption3s.sort($scope.listSortFun);\r\n\r\n                            $scope.availabilityObject.FilterOutlets.push({\r\n                                name: \"All outlets\",\r\n                                value: null\r\n                            });\r\n                            for (var i in filterOutlets)\r\n                                $scope.availabilityObject.FilterOutlets.push(filterOutlets[i]);\r\n\r\n                            $scope.availabilityObject.FilterOutlets.sort($scope.listSortFun);\r\n\r\n                            $scope.availabilityObject.maxLevel = maxLevel;\r\n\r\n                            $scope.availabilityObject.checkData = res.data;\r\n                            $scope.availabilityObject.displayCheckData = [].concat(res.data);\r\n                            $scope.dataCountAvailability = $scope.availabilityObject.displayCheckData.length;\r\n                            $scope.mode = 'availability';\r\n                            $scope.refreshAvailabilityPaging();\r\n                            $timeout(function () {\r\n                                $('#availabilityNameSelector').trigger('refresh');\r\n                                $('#availabilitySKUSelector').trigger('refresh');\r\n                                $('#availabilityOption1Selector').trigger('refresh');\r\n                                $('#availabilityOption2Selector').trigger('refresh');\r\n                                $('#availabilityOption3Selector').trigger('refresh');\r\n                                $('#availabilityOutletSelector').trigger('refresh');\r\n                                //$('div.jq-selectbox').css('display', 'block'); // fix for iOS\r\n\r\n                            }, 0);\r\n                            $.unblockUI();\r\n                        })\r\n                        .catch(function (err) {\r\n                            $scope.availabilityObject.maxLevel = 0;\r\n                            $.unblockUI();\r\n                            $scope.mode = 'availability';\r\n                            errorService.showError(err);\r\n                        });\r\n\r\n                }));\r\n\r\n                $scope.refreshAvailabilityPaging = function () {\r\n                    $scope.$broadcast('availability.event');\r\n                };\r\n\r\n                $scope.$watchCollection('availabilityObject.displayCheckData', function (newCol, oldCol, scope) {\r\n                    scope.refreshAvailabilityPaging();\r\n                });\r\n\r\n                $scope.isOnline = function () {\r\n                    return configService.isOnline === true;\r\n                }\r\n\r\n                $timeout(function () {\r\n                    initSelects();\r\n                    $('div.jq-selectbox').css('display', 'block'); // iOS fix\r\n                }, 0);\r\n\r\n                $scope.getLastCheckoutItems = function (limit) {\r\n                    if (!$scope.currentSale.CheckoutItems)\r\n                        return [];\r\n\r\n                    var arrn = [];\r\n                    if ($scope.currentSale.CheckoutItems.length <= limit)\r\n                        arrn = $scope.currentSale.CheckoutItems;\r\n                    else\r\n                        arrn = $scope.currentSale.CheckoutItems.slice($scope.currentSale.CheckoutItems.length - limit);\r\n\r\n                    angular.forEach(arrn, function (el) {\r\n                        var op = [];\r\n                        if (!!el.Option1 && el.Option1.length > 0)\r\n                            op.push(el.Option1);\r\n                        if (!!el.Option2 && el.Option2.length > 0)\r\n                            op.push(el.Option2);\r\n                        if (!!el.Option3 && el.Option3.length > 0)\r\n                            op.push(el.Option3);\r\n\r\n                        el.OptionLine = op.join(' / ');\r\n                    });\r\n\r\n                    return arrn;\r\n                }\r\n\r\n                $scope.firstShowPartialPaymentsDlg = true;\r\n\r\n                // show dialog to remove existing partial payments\r\n                // for card payment linked to real card payment provider we will do refund\r\n                $scope.showCancelPartialPaymentsDlg = function () {\r\n                    helperService.showDialog('#partialPaymentsDlg');\r\n\r\n                    if ($scope.firstShowPartialPaymentsDlg) {\r\n                        $scope.firstShowPartialPaymentsDlg = false;\r\n                    }\r\n                };\r\n\r\n                $scope.cancelPaymentRow = null;\r\n                $scope.cancelPaymentDlg = function (row) {\r\n                    $scope.cancelPaymentRow = row;\r\n                    $scope.dialogMode = 'partialPayment';\r\n                    helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                        (gettextCatalog.getString('Would you like to delete ') + row.PaymentTypeName + ': ' + $filter('currency')(row.Amount) + '?'));\r\n                };\r\n\r\n                $scope.cancelPayment = function () {\r\n                    $.blockUI();\r\n                    var row = $scope.cancelPaymentRow;\r\n\r\n                    var initialPayment = {\r\n                        RawSaleObject: {\r\n                            Payments: [row]\r\n                        }\r\n                    };\r\n\r\n                    var d = $q.defer();\r\n                    d.resolve(null);\r\n                    var p = d.promise;\r\n\r\n                    const SCOPE = $scope;\r\n                    var refunds = {};\r\n                    if (row.PaymentTypeName == 'Credit Card') {\r\n                        refunds[cardPayService.combineKey(row.ServerTransactionID, row.ClientTransactionID)] = {\r\n                            amount: row.Amount\r\n                        };\r\n\r\n                        p = p.then(function (res) {\r\n                            return cardPayService.refund(initialPayment, refunds, $scope, {\r\n                                OrderNumber: $scope.currentSale.ClearOrderNumber,\r\n                                receiptCallback: function (code, text, p) {\r\n                                    return printService.printAdditionalReceipts(SCOPE, code, text, p);\r\n                                },\r\n                                Currency: configService.currency,\r\n                            });\r\n                        });\r\n                    }\r\n\r\n                    p = p.then(function (res) {\r\n                            // actually remove payment\r\n                            for (var i = 0; i < $scope.currentSale.Payments.length; i++) {\r\n                                if ($scope.currentSale.Payments[i].ID == $scope.cancelPaymentRow.ID) {\r\n                                    $scope.currentSale.Payments.splice(i, 1);\r\n                                    break;\r\n                                }\r\n                            }\r\n\r\n                            $scope.goPayment();\r\n\r\n                            if ($scope.currentSale.Payments.length == 0) {\r\n                                // close cancel dialog as we have no more payments\r\n                                helperService.closeDialog('#partialPaymentsDlg');\r\n                            }\r\n\r\n                            var d2 = $q.defer();\r\n                            d2.resolve(null);\r\n                            return d2.promise;\r\n                        })\r\n                        .catch(function (err) {})\r\n                        .finally(function () {\r\n                            // reset after processing\r\n                            $scope.cancelPaymentRow = null;\r\n                            $.unblockUI();\r\n                        })\r\n\r\n                    return p;\r\n                };\r\n\r\n                $scope.gotoParkedSales = function () {\r\n                    // check if we have non zero current sale\r\n                    var hasSale = !!$scope.currentSale && !!$scope.currentSale.CheckoutItems && $scope.currentSale.CheckoutItems.length > 0 && $scope.canParkSale === true;\r\n\r\n                    if (hasSale === true) {\r\n                        $scope.afterParkCallback = $scope.processParkedSales;\r\n                        $scope.showSkipButton = true;\r\n\r\n                        // ask about park current sale\r\n                        $scope.showAddSaleNoteDialog('park');\r\n                    } else\r\n                        helperService.gotoParkedSales();\r\n                };\r\n\r\n                $scope.processParkedSales = function () {\r\n                    var deferred = $q.defer();\r\n                    helperService.gotoParkedSales();\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                };\r\n\r\n                $scope.hasAvailableCoupons = function () {\r\n\r\n                    var newAvailableCouponsValue = saleService.hasAvailableCoupons($scope.currentSale);\r\n\r\n                    if ($scope.oldAvailableCouponsValue != newAvailableCouponsValue) {\r\n                        $scope.oldAvailableCouponsValue = newAvailableCouponsValue;\r\n                        $timeout(function () {\r\n                            $scope.forceHeightRecalc();\r\n                        });\r\n                    }\r\n\r\n                    return newAvailableCouponsValue;\r\n                };\r\n\r\n                // coupon dialog\r\n                $scope.canDismissCoupon = function () {\r\n                    return !!$scope.currentSale.selectedCoupon;\r\n                };\r\n\r\n                $scope.checkCouponIsValidAndProcess = function (cause) {\r\n\r\n                    if (!saleService.getCouponFromDealsByCode($scope.couponCode, true)) {\r\n                        errorService.showError(gettextCatalog.getString(\"A coupon with this code has already been used or doesn't exist. Please enter another code.\"));\r\n                        return false;\r\n                    }\r\n\r\n                    helperService.closeDialog('#couponlDialogPartial');\r\n                    $timeout(function () {\r\n                        $scope.couponDialogCallback(cause);\r\n                    }, 150);\r\n                    return true;\r\n                };\r\n\r\n                $scope.couponDialogCallback = function (cause) {\r\n                    switch (cause) {\r\n                        case 'cancel':\r\n                            break;\r\n\r\n                        case 'ok':\r\n                            // some processing\r\n                            // we need to check if this coupon is allowable\r\n                            // apply if so\r\n                            // else show error\r\n                            $.blockUI();\r\n\r\n                            saleService.getSaleCoupons($scope.couponCode)\r\n                                .then(function (res) {\r\n                                    $.unblockUI();\r\n                                    var deferred = $q.defer();\r\n                                    var p = deferred.promise;\r\n\r\n                                    if (!saleService.checkSingleUsageCouponIsAvailable($scope.couponCode)) {\r\n                                        deferred.reject(gettextCatalog.getString(\"This one-off coupon has already been used!\"));\r\n                                    } else {\r\n                                        $scope.currentSale.selectedCoupon = $scope.couponCode;\r\n                                        var sc = saleService.getCouponFromDealsByCode($scope.couponCode);\r\n                                        if (sc != null) {\r\n                                            $scope.currentSale.selectedCouponID = sc.ID;\r\n                                            $scope.currentSale.selectedCouponDealID = sc.DealID;\r\n                                        } else {\r\n                                            $scope.currentSale.selectedCouponID = null;\r\n                                            $scope.currentSale.selectedCouponDealID = null;\r\n                                        }\r\n\r\n                                        deferred.resolve(res);\r\n                                    }\r\n\r\n                                    return deferred.promise;\r\n                                })\r\n                                .then(function (res) {\r\n                                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                                    var deferred = $q.defer();\r\n                                    if (!isNewSale)\r\n                                        saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n                                    else\r\n                                        CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope);\r\n\r\n                                    deferred.resolve(res);\r\n                                    return deferred.promise;\r\n                                })\r\n                                .catch(function (err) {\r\n                                    $.unblockUI();\r\n                                    errorService.showError(err);\r\n                                });\r\n\r\n                            break;\r\n\r\n                        case 'dismiss':\r\n                            var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n                            $scope.currentSale.selectedCouponID = null;\r\n                            $scope.currentSale.selectedCouponDealID = null;\r\n                            $scope.currentSale.selectedCoupon = null;\r\n                            if (!isNewSale)\r\n                                saleService.getSaleDiscounts($scope.currentSale, $scope.posTaxInclucive, $scope);\r\n                            else\r\n                                CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope);\r\n\r\n                            break;\r\n                    }\r\n                };\r\n\r\n                $scope.couponDialogActive = false;\r\n\r\n                $scope.showCouponDlg = function () {\r\n                    $scope.couponCode = $scope.currentSale.selectedCoupon;\r\n                    helperService.showDialog('#couponlDialogPartial', function () {\r\n                        if (!configService.isMobile)\r\n                            $('#couponCode').focus();\r\n                    });\r\n                };\r\n\r\n                $scope.couponPress = function (event) {\r\n                    if (event.which === 13) {\r\n                        helperService.closeDialog('#couponlDialogPartial');\r\n                        $scope.couponDialogCallback('ok');\r\n                    }\r\n                };\r\n\r\n                // gift card functionality\r\n                $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n\r\n                $scope.currentGiftCardProduct = null;\r\n                $scope.giftCardSaleDialogCallback = function (res) {\r\n                    if (!$scope.currentGiftCardProduct)\r\n                        return;\r\n\r\n                    switch (res) {\r\n                        case 'save':\r\n                            $scope.addPaymentItem($scope.currentGiftCardProduct.obj,\r\n                                $scope.currentGiftCardProduct.isElement,\r\n                                $scope.currentGiftCardProduct.returnElement,\r\n                                true);\r\n                            $scope.scrollToAddedPaymentItem();\r\n                            break;\r\n                    }\r\n\r\n\r\n                };\r\n\r\n                $scope.showGiftCardDialog = function (obj, isElement, returnElement, el) {\r\n                    if (!configService.isGiftCardEnabled()) {\r\n                        errorService.showError(gettextCatalog.getString(\"Gift card support is disabled.\"));\r\n                        return false;\r\n                    }\r\n\r\n                    var expDate = null;\r\n                    if (configService.isGiftCardExpirationDateEnabled()) {\r\n                        switch (configService.giftCardSettings.DefaultGiftCardExpirationPeriod) {\r\n                            case 'month':\r\n                                expDate = moment().add(1, 'M');\r\n                                break;\r\n                            case 'quarter':\r\n                                expDate = moment().add(3, 'M');\r\n                                break;\r\n                            case 'threeyears':\r\n                                expDate = moment().add(3, 'Y');\r\n                                break;\r\n                            default:\r\n                                expDate = moment().add(12, 'M');\r\n                                break;\r\n                        }\r\n                    }\r\n\r\n                    $scope.currentGiftCardProduct = {\r\n                        obj: obj,\r\n                        isElement: isElement,\r\n                        returnElement: returnElement,\r\n                        el: el,\r\n                        giftCardCode: null,\r\n                        expirationDate: !!expDate ? helperService.getFormatedDate2(expDate) : null,\r\n                        isExpirationDateEnabled: configService.isGiftCardExpirationDateEnabled(),\r\n                        amount: 0\r\n                    };\r\n\r\n                    helperService.showDialog('#giftCardSaleDlg', function () {\r\n                        if (!configService.isMobile)\r\n                            $('#newSaleGiftCardCode').focus();\r\n\r\n                    });\r\n\r\n                };\r\n\r\n                $scope.onGiftCardDialogSave = function () {\r\n                    saleService.giftCardExists($scope.currentGiftCardProduct.giftCardCode).then(function (resp) {\r\n                        $.unblockUI();\r\n                        if (resp == true) {\r\n                            errorService.showError(gettextCatalog.getString(\"Gift card with this code already exists.\"));\r\n                        } else {\r\n                            helperService.closeDialog('#giftCardSaleDlg');\r\n                            $scope.giftCardSaleDialogCallback('save');\r\n                        }\r\n                }).catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err)\r\n                        helperService.closeDialog('#giftCardSaleDlg');\r\n                        $scope.giftCardSaleDialogCallback('cancel');\r\n                    })\r\n\r\n                };\r\n\r\n                $scope.giftCardAmountDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n                $scope.showGiftCardAmountDlg = function () {\r\n                    $scope.giftCardAmountDlg.toggle();\r\n                };\r\n\r\n                // callback\r\n                $scope.setGiftCardAmount = function (prm) {\r\n                    if (typeof (prm) === 'boolean') {\r\n                        if (prm === true) {\r\n                            var scp = $scope.giftCardAmountDlg.getScope();\r\n                            var model = scp.$$childHead.model;\r\n                            scp.$parent.invalidPrice = model <= 0;\r\n\r\n                            $scope.giftCardAmountDlg.hide(true);\r\n                        } else {\r\n                            $scope.giftCardAmountDlg.hide(false);\r\n                        }\r\n                    } else if (typeof (prm) == 'string') {\r\n                        if (prm === 'clean') {\r\n                            var scp = $scope.giftCardAmountDlg.getScope();\r\n                            scp.$$childHead.model = 0;\r\n                        } else if (prm === 'cancel') {\r\n                            $scope.giftCardAmountDlg.hide(false);\r\n                        }\r\n                    }\r\n                };\r\n\r\n                $scope.giftCardPayAmountDlg = null;\r\n\r\n                $scope.showGiftCardPayAmountDlg = function () {\r\n                    $scope.giftCardPayAmountDlg.toggle();\r\n                };\r\n\r\n                // callback\r\n                $scope.setGiftCardPayAmount = function (prm) {\r\n                    if (typeof (prm) === 'boolean') {\r\n                        if (prm === true) {\r\n                            var scp = $scope.giftCardPayAmountDlg.getScope();\r\n                            var model = scp.$$childHead.model;\r\n                            scp.$parent.invalidPrice = model <= 0;\r\n\r\n                            $scope.giftCardPayAmountDlg.hide(true);\r\n                        } else {\r\n                            $scope.giftCardPayAmountDlg.hide(false);\r\n                        }\r\n                    } else if (typeof (prm) == 'string') {\r\n                        if (prm === 'clean') {\r\n                            var scp = $scope.giftCardPayAmountDlg.getScope();\r\n                            scp.$$childHead.model = 0;\r\n                        } else if (prm === 'cancel') {\r\n                            $scope.giftCardPayAmountDlg.hide(false);\r\n                        }\r\n                    }\r\n                };\r\n\r\n\r\n                $scope.hasGiftCardCodes = function () {\r\n                    var ids = saleService.getGiftCardCodes($scope.currentSale);\r\n\r\n                    return !!ids && ids.length > 0;\r\n                };\r\n\r\n                // gift card pay objects\r\n                $scope.currentGiftCardPay = null;\r\n\r\n                $scope.isGiftCardEnabled = function () {\r\n                    return configService.isGiftCardEnabled();\r\n                };\r\n\r\n                $scope.showGiftCardPayDialog = function () {\r\n                    if (!configService.isGiftCardEnabled()) {\r\n                        errorService.showError(gettextCatalog.getString(\"Gift card support is disabled.\"));\r\n                        return false;\r\n                    }\r\n\r\n                    if (configService.isOnline !== true) {\r\n                        errorService.showError(gettextCatalog.getString(\"Gift card payment is available in online mode only.\"));\r\n                        return false;\r\n                    }\r\n\r\n                    $scope.currentGiftCardPay = {\r\n                        giftCardCode: null,\r\n                        amount: $scope.formHolder.realSum\r\n                    };\r\n\r\n                    helperService.showDialog('#giftCardPayDlg', function () {\r\n                        if (!configService.isMobile)\r\n                            $('#payGiftCardCode').focus();\r\n\r\n                    });\r\n\r\n                };\r\n\r\n                function _getSumByGiftCard(id, toAddAmount) {\r\n                    var sumByGiftCard = toAddAmount;\r\n                    angular.forEach($scope.currentSale.Payments, function (el) {\r\n                        if (!!el.GiftCardID && el.GiftCardID === id && el.Amount > 0\r\n                                // because balance would already updated if payment is saved\r\n                                && (!$scope.currentSale.alreadyCountedPayments || !$scope.currentSale.alreadyCountedPayments[el.ID])) {\r\n                            sumByGiftCard += el.Amount;\r\n                        }\r\n                    });\r\n\r\n                    return sumByGiftCard;\r\n                }\r\n\r\n                $scope.giftCardPayDialogCallback = function (res) {\r\n                    if (!$scope.currentGiftCardPay)\r\n                        return;\r\n\r\n                    switch (res) {\r\n                        case 'save':\r\n                            $.blockUI();\r\n                            webOnlyProvider.getGiftCardForPayment($scope.currentGiftCardPay.giftCardCode)\r\n                                .then(function (res) {\r\n                                    $.unblockUI();\r\n\r\n                                    if (res.data.Success !== true) {\r\n                                        var deferred = $q.defer();\r\n                                        deferred.reject(res.data.Message);\r\n                                        return deferred.promise;\r\n                                    } else {\r\n\r\n                                        var isValidUsage = true;\r\n                                        // check that this card to pay is not sold in the same sale\r\n                                        angular.forEach($scope.currentSale.CheckoutItems, function (el) {\r\n                                            if (!!el.GiftCardCode && el.GiftCardCode === res.data.GiftCard.GiftCardCode) {\r\n                                                isValidUsage = false;\r\n                                                return false;\r\n                                            }\r\n                                        });\r\n\r\n                                        if (!isValidUsage) {\r\n                                            var deferred = $q.defer();\r\n                                            deferred.reject(gettextCatalog.getString(\"Gift card {{code}} is being sold in this sale and can't be used for payment.\", {\r\n                                                code: res.data.GiftCard.GiftCardCode\r\n                                            }));\r\n                                            return deferred.promise;\r\n                                        }\r\n\r\n\r\n                                        var toAddAmount = Number($scope.currentGiftCardPay.amount);\r\n                                        var sumByGiftCard =  _getSumByGiftCard(res.data.GiftCard.ID, Number($scope.currentGiftCardPay.amount));\r\n                                        // check that we already have any payments by this card. Add them to requested sum\r\n                                       \r\n\r\n                                        if (toAddAmount > Number($scope.formHolder.realSum)) {\r\n                                            errorService.showError(gettextCatalog.getString(\"Amount to pay {{sum}} is larger than gift card {{code}} balance {{bal}}. The entire gift card balance will be used.\", {\r\n                                                sum: toAddAmount,\r\n                                                saleSum: $scope.formHolder.realSum\r\n                                            }));\r\n\r\n                                            toAddAmount = Number($scope.formHolder.realSum);\r\n                                            sumByGiftCard = _getSumByGiftCard(res.data.GiftCard.ID, toAddAmount);\r\n                                        }\r\n\r\n                                        if (sumByGiftCard > res.data.GiftCard.CurrentBalance) {\r\n                                            errorService.showError(gettextCatalog.getString(\"Amount to pay {{sum}} is larger than gift card {{code}} balance {{bal}}. The entire gift card balance will be used.\", {\r\n                                                sum: sumByGiftCard,\r\n                                                code: res.data.GiftCard.GiftCardCode,\r\n                                                bal: res.data.GiftCard.CurrentBalance\r\n                                            }));\r\n\r\n                                            toAddAmount = res.data.GiftCard.CurrentBalance - sumByGiftCard + toAddAmount;\r\n                                            $scope.formHolder.realSum -= toAddAmount;\r\n                                        }\r\n\r\n                                        $scope.currentGiftCardPay.amount = toAddAmount;\r\n\r\n                                        $scope.giftCardPay(res.data.GiftCard.ID, res.data.GiftCard.GiftCardCode, toAddAmount);\r\n                                        var deferred = $q.defer();\r\n                                        deferred.resolve(res.data.GiftCard);\r\n                                        return deferred.promise;\r\n                                    }\r\n                                })\r\n                                .catch(function (err) {\r\n                                    $.unblockUI();\r\n                                    errorService.showError(err);\r\n                                });\r\n\r\n                            break;\r\n                    }\r\n\r\n\r\n                };\r\n\r\n                function isContinueExchange() {\r\n                    var hasItemToReturn = false;\r\n                    var hasNewItem = false;\r\n                    $.each($scope.currentSale.CheckoutItems, function (idx, el) {\r\n                        if (el.Amount < 0) {\r\n                            hasItemToReturn = true;\r\n                        } else {\r\n                            hasNewItem = true;\r\n                        }\r\n                    });\r\n\r\n                    var hasExchangeItems = hasNewItem && hasItemToReturn;\r\n\r\n                    return hasExchangeItems && $scope.currentSale.Refunds;\r\n                }\r\n\r\n                function onResize() {\r\n\r\n                    $scope.updateSizesInCheckout();\r\n\r\n                    $scope.updateSizesInCashPayment();\r\n                    filterService.clearCanvas();\r\n                }\r\n\r\n                function initMeasure() {\r\n                    $(window).on('resize', onResize);\r\n                }\r\n\r\n                //function getCharMeasure(currentChar, pt) {\r\n                //    var measureObject = window['PTMeasure' + pt];\r\n                //    var width = measureObject[currentChar];\r\n                //    if (typeof (width) == \"undefined\") {\r\n                //        var canvas = getCharMeasure.canvas || (getCharMeasure.canvas = document.createElement(\"canvas\"));\r\n                //        var context = canvas.getContext(\"2d\");\r\n                //        context.font = pt + \"pt 'Open Sans'\";\r\n                //        var _chTMP = context.measureText(currentChar);\r\n                //        width = context.measureText(currentChar).width;\r\n                //        measureObject[currentChar] = width;\r\n                //    }\r\n                //    return width;\r\n                //}\r\n\r\n                //function measureTextWidth(value, maxWidth, defaultSize) {\r\n                //    maxWidth = maxWidth - 12;\r\n                //    try {\r\n                //        for (var i = 0; i < window.AvailablePT.length; i++) {\r\n                //            var v = window.AvailablePT[i];\r\n                //            if (v <= defaultSize) {\r\n                //                var measureObject = window['PTTextMeasure' + v];\r\n                //                var width = measureObject[value];\r\n\r\n                //                if (typeof (width) == \"undefined\") {\r\n                //                    width = 0;\r\n                //                    for (var j = 0; j < value.length; j++)\r\n                //                        width += getCharMeasure(value.charAt(j), v);\r\n                //                    width = Math.floor(width) + 1;\r\n                //                    measureObject[value] = width;\r\n                //                }\r\n\r\n                //                if (width < maxWidth)\r\n                //                    return v;\r\n                //            }\r\n                //        }\r\n                //        return MinPT;\r\n                //    }\r\n                //    catch (e) {\r\n                //        return defaultSize;\r\n                //    }\r\n                //}\r\n\r\n                //function measureTextHeight(value, maxHeight, defaultSize) {\r\n                //    //maxHeight = maxHeight - 12;\r\n                //    try {\r\n                //        for (var i = 0; i < window.AvailablePT.length; i++) {\r\n                //            var v = window.AvailablePT[i];\r\n                //            if (v <= defaultSize) {\r\n                //                var height = getFontHeight(value, v);\r\n\r\n                //                if (height < maxHeight)\r\n                //                    return v;\r\n                //            }\r\n                //        }\r\n                //        return MinPT;\r\n                //    }\r\n                //    catch (e) {\r\n                //        return defaultSize;\r\n                //    }\r\n                //}\r\n\r\n                //function getFontHeight(text, pt) {\r\n                //    var canvas = getFontHeight.canvas || (getFontHeight.canvas = document.createElement(\"canvas\"));\r\n                //    var context = canvas.getContext(\"2d\");\r\n                //    context.font = pt + \"pt 'Open Sans'\";\r\n\r\n                //    var sourceWidth = canvas.width;\r\n                //    var sourceHeight = canvas.height;\r\n\r\n                //    // place the text somewhere\r\n                //    context.textAlign = \"left\";\r\n                //    context.textBaseline = \"top\";\r\n                //    context.fillText(text, 25, 5);\r\n\r\n                //    // returns an array containing the sum of all pixels in a canvas\r\n                //    // * 4 (red, green, blue, alpha)\r\n                //    // [pixel1Red, pixel1Green, pixel1Blue, pixel1Alpha, pixel2Red ...]\r\n                //    var data = context.getImageData(0, 0, sourceWidth, sourceHeight).data;\r\n\r\n                //    var firstY = -1;\r\n                //    var lastY = -1;\r\n\r\n                //    // loop through each row\r\n                //    for(var y = 0; y < sourceHeight; y++) {\r\n                //        // loop through each column\r\n                //        for(var x = 0; x < sourceWidth; x++) {\r\n                //            var alpha = data[((sourceWidth * y) + x) * 4 + 3];\r\n\r\n                //            if(alpha > 0) {\r\n                //                firstY = y;\r\n                //                // exit the loop\r\n                //                break;\r\n                //            }\r\n                //        }\r\n                //        if(firstY >= 0) {\r\n                //            // exit the loop\r\n                //            break;\r\n                //        }\r\n\r\n                //    }\r\n\r\n                //    // loop through each row, this time beginning from the last row\r\n                //    for(var y = sourceHeight; y > 0; y--) {\r\n                //        // loop through each column\r\n                //        for(var x = 0; x < sourceWidth; x++) {\r\n                //            var alpha = data[((sourceWidth * y) + x) * 4 + 3];\r\n                //            if(alpha > 0) {\r\n                //                lastY = y;\r\n                //                // exit the loop\r\n                //                break;\r\n                //            }\r\n                //        }\r\n                //        if(lastY >= 0) {\r\n                //            // exit the loop\r\n                //            break;\r\n                //        }\r\n\r\n                //    }\r\n\r\n                //    return lastY - firstY;\r\n\r\n                //    //return {\r\n                //        // The actual height\r\n                //        //height: lastY - firstY,\r\n\r\n                //        // The first pixel\r\n                //        //firstPixel: firstY,\r\n\r\n                //        // The last pixel\r\n                //        //lastPixel: lastY\r\n                //    //}\r\n\r\n                //}\r\n\r\n                //function updateFontSize(parent, child, defaultSize, minSize, checkHeight) {\r\n\r\n                //    if (minSize == null || minSize == undefined) {\r\n                //        minSize = 0;\r\n                //    }\r\n\r\n                //    if (checkHeight == null || checkHeight == undefined) {\r\n                //        checkHeight = false;\r\n                //    }\r\n\r\n                //    var childClass = child + \"-measure\";\r\n                //    var children = $(\".\" + childClass);\r\n                //    if (children.length > 0) {\r\n                //        var prn = children.first().closest('.' + parent + '-measure');\r\n                //        var maxWidth = prn.width();\r\n                //        var maxHeight = prn.height();\r\n\r\n                //        // if (!!parentPercent)\r\n                //        //     maxWidth *= parentPercent / 100;\r\n\r\n                //        children.each(function () {\r\n                //            var txt = this;\r\n                //            var val = txt.innerText;\r\n                //            if (val != null && val != '') {\r\n                //                var widthSize = measureTextWidth(val, maxWidth, defaultSize);\r\n                //                var heightSize = 0;\r\n                //                var size = 0;\r\n                //                if (checkHeight) {\r\n                //                    heightSize = measureTextHeight(val, maxHeight, defaultSize);\r\n                //                    size = Math.min(widthSize, heightSize);\r\n                //                }\r\n                //                else {\r\n                //                    size = widthSize;\r\n                //                }\r\n\r\n                //                size = Math.max(size, minSize);\r\n\r\n                //                var className = 'product-text' + (size+'').replace('.','-');\r\n                //                var arr = txt.className.trim().split(' ');\r\n                //                var fSz = arr.filter(function(s) {return s === className;});\r\n\r\n                //                if(fSz.length==0) {\r\n                //                    var fArr = arr.filter(function(s) {return s.indexOf('product-text') != 0;});\r\n                //                    fArr.push(className);\r\n                //                    txt.className = fArr.join(' ');\r\n                //                }\r\n                //            }\r\n                //        });\r\n                //    }\r\n                //}\r\n\r\n                //function fitFontSize(parent, child, defaultSize) {\r\n                //    var childClass = child + \"-measure\";\r\n                //    var children = $(\".\" + childClass);\r\n                //    if (children.length > 0) {\r\n                //        var maxWidth = children.first().closest('.' + parent + '-measure').width();\r\n                //        var maxHeight = children.first().closest('.' + parent + '-measure').height();\r\n\r\n                //        children.each(function (idx, el) {\r\n                //            var txt = this;\r\n                //            for (var i = 0; i < window.AvailablePT.length; i++) {\r\n                //                var v = window.AvailablePT[i];\r\n                //                if (v <= defaultSize) {\r\n                //                    var className = childClass;\r\n                //                    if (v != defaultSize)\r\n                //                        className += ' ' + 'product-text' + (v + '').replace('.', '-');\r\n                //                    if (txt.className.trim() != className) {\r\n                //                        txt.className = className;\r\n                //                    }\r\n\r\n                //                    var elWidth = el.offsetWidth;\r\n                //                    var elHeight = el.offsetHeight;\r\n                //                    if (elWidth > maxWidth || elHeight > maxHeight) {\r\n                //                        continue;\r\n                //                    }\r\n                //                    else {\r\n                //                        console.log(elWidth + '-' + elHeight);\r\n                //                        break;\r\n                //                    }\r\n                //                }\r\n                //            }\r\n                //        });\r\n                //    }\r\n                //}\r\n\r\n                $scope.scrollTo = function (selector) {\r\n\r\n                    var target = $(selector);\r\n                    if (target.length) {\r\n                        event.preventDefault();\r\n                        $('html, body').stop().animate({\r\n                            scrollTop: target.offset().top\r\n                        }, 1000);\r\n                    }\r\n                }\r\n\r\n                //$scope.getSurcharge = function() {\r\n                //    var deferred = $q.defer();\r\n\r\n                //    var currentDate = new Date();\r\n                //    if ($scope.surchargeCacheLastLoad == null || $scope.surchargeCacheLastLoad.getTime() + 15 * 1000 < currentDate.getTime()) {\r\n                //        $.blockUI();\r\n                //        webOnlyProvider.loadSurcharges()\r\n                //            .then(function(res){\r\n                //                $.unblockUI();\r\n\r\n                //                $scope.surchargeCache = res.data.Surcharges;\r\n                //                $scope.surchargeCacheLastLoad = currentDate;\r\n\r\n                //                deferred.resolve($scope.surchargeCache);\r\n                //            })\r\n                //            .catch(function (err) {\r\n\r\n                //                $scope.surchargeCache = null;\r\n\r\n                //                $.unblockUI();\r\n                //                errorService.showError(err);\r\n                //            });;\r\n                //    }\r\n                //    else {\r\n                //        deferred.resolve($scope.surchargeCache);\r\n                //    }\r\n\r\n                //    return deferred.promise.then(function(surcharges) {\r\n                //        var surchargeTax = JSON.parse(configService.lastSurchargeTax);\r\n                //        if(!!surcharges && !!surchargeTax) {\r\n                //            $.each(surcharges, function(idx, s){\r\n                //                s.TaxRuleID = surchargeTax.ruleID;\r\n                //            })\r\n\r\n                //            var deferred2 = $q.defer();\r\n                //            deferred2.resolve(surcharges);\r\n                //            return deferred2.promise;\r\n                //        }\r\n                //    });\r\n                //};\r\n\r\n                $scope.oldReturnPayments = function () {\r\n                    var sum = 0;\r\n                    if ($scope.operationSubName == 'continue' && !!$scope.currentSale.Payments) {\r\n                        sum += $scope.currentSale.Payments.sum(\"Amount\");\r\n                    }\r\n\r\n                    return sum;\r\n                };\r\n\r\n                $scope.getRemainingToRefund = function (excludeSelectedAmount) {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    if (!isNewSale) {\r\n                        var fullReturnRounding = 0;\r\n                        var totalSum = 0;\r\n                        if ($scope.currentSale) {\r\n                            totalSum = $scope.totalSum($scope.currentSale, true) * -1;\r\n                            fullReturnRounding = $scope.currentSale.FullReturnRounding;\r\n                        }\r\n\r\n                        var amountSums = 0;\r\n                        if (!(excludeSelectedAmount === true)) {\r\n                            amountSums = $scope.amountSums();\r\n                        }\r\n\r\n                        return helperService.DEARRound(totalSum - amountSums + $scope.oldReturnPayments() + fullReturnRounding, 2);\r\n                    } else {\r\n                        return Math.abs($scope.currentSale.RemainingToRefund);\r\n                    }\r\n\r\n                };\r\n\r\n                $scope.itemCustomerToggle = function () {\r\n                    $('.checkout-item-customer.hidden-info').toggleClass('open');\r\n                }\r\n\r\n                $scope.toggleItemDetails = function (item) {\r\n                    const itemID = item.ID;\r\n                    $('.checkout-item.open[id!=\"checkoutItem_' + itemID + '\"]').removeClass('open');\r\n                    $('#checkoutItem_' + itemID).toggleClass('open');\r\n\r\n                    if ( $('#checkoutItem_' + itemID).hasClass('open')) {\r\n                        $scope.showItemQuantityDlg(item,'#checkoutItem_' + itemID);\r\n                    }\r\n                };\r\n\r\n                $scope.showCalendar = function (e) {\r\n                    // var family = document.elementsFromPoint(e.pageX, e.pageY);\r\n                    // if(family.length>0 && family[0].id!='layByDate')\r\n                    $('#layByDate').datepicker(\"show\");\r\n                }\r\n\r\n                $scope.paymentDetails = false;\r\n                $scope.togglePaymentDetails = function () {\r\n                    $scope.paymentDetails = !$scope.paymentDetails;\r\n\r\n                    /** hack for total info block */\r\n                    $rootScope.$broadcast('sideBar.toggle');\r\n                    $rootScope.$broadcast('sideBar.hideDetails');\r\n                }\r\n\r\n                $scope.currentLayby = {\r\n                    date: null\r\n                };\r\n\r\n                $scope.laybyPayDialog = function () {\r\n                    if (!$scope.currentSale.LaybyDate) {\r\n                        $scope.currentLayby.date = helperService.getFormatedDate2(new Date());\r\n                        helperService.showDialog('#layByDateDlg', null, null, function () {\r\n                            $('#layByDate').datepicker(\"hide\");\r\n                        });\r\n                    } else {\r\n                        $scope.laybyPay();\r\n                    }\r\n                };\r\n\r\n                $scope.layByDateDialogCallback = function (res) {\r\n                    if (res === 'save') {\r\n                        $scope.laybyPay($scope.currentLayby.date);\r\n                    }\r\n                };\r\n\r\n                $scope.updateSizesInCheckout = function () {\r\n                    $timeout(function () {\r\n                        //console.log('updateSizesInCheckout');\r\n                        fontMeasureService.updateFontSize('catalog-tile', 'productText', 12, 0, true);\r\n                        fontMeasureService.updateFontSize('quantityValueParent', 'quantityValue', 14);\r\n                        //fontMeasureService.updateFontSize('productQuantityParent', 'productQuantity', 12);\r\n                        //fontMeasureService.updateFontSize('productPriceParent', 'productPrice', 12);\r\n                        //fontMeasureService.updateFontSize('productDiscountParent', 'productDiscount', 12);\r\n\r\n                        fontMeasureService.updateFontSize('name-container', 'size_14', 14, 8);\r\n                        fontMeasureService.updateFontSize('name-container', 'size_13_5', 13.5, 8);\r\n                        fontMeasureService.updateFontSize('name-container', 'size_12', 12, 8);\r\n\r\n                        fontMeasureService.updateFontSize('name-container2', 'size_14d', 14, 8);\r\n                        fontMeasureService.updateFontSize('name-container2', 'size_13_5d', 13.5, 8);\r\n                        fontMeasureService.updateFontSize('name-container2', 'size_12d', 12, 8);\r\n\r\n                        fontMeasureService.updateFontSize('price-container', 'size_14p', 14, 8);\r\n\r\n                    }, 100);\r\n                    $scope.updateTotalsFontSizes();\r\n\r\n                };\r\n\r\n                $scope.updateSizesInCashPayment = function () {\r\n                    $timeout(function () {\r\n                        fontMeasureService.updateFontSize('payCashAmountParent', 'payCashAmount', 18);\r\n                        fontMeasureService.updateFontSize('predictionParent', 'cl-0-prediction', 14);\r\n                        fontMeasureService.updateFontSize('predictionParent', 'cl-1-prediction', 14);\r\n                        fontMeasureService.updateFontSize('predictionParent', 'cl-2-prediction', 14);\r\n                        fontMeasureService.updateFontSize('predictionParent', 'cl-3-prediction', 14);\r\n                    }, 100);\r\n                };\r\n\r\n                $scope.updateTotalsFontSizes = function () {\r\n                    $timeout(function () {\r\n                        fontMeasureService.updateFontSize('pay-button', 'size_21', 15.75);\r\n                        fontMeasureService.updateFontSize('total-row', 'size_subtotal', 14);\r\n                        fontMeasureService.updateFontSize('total-row', 'size_discount', 14);\r\n                        fontMeasureService.updateFontSize('total-row', 'size_tax', 14);\r\n                        fontMeasureService.updateFontSize('total-row', 'size_total', 14);\r\n                        fontMeasureService.updateFontSize('total-row', 'size_incl_tax', 14);\r\n                        $timeout(function () {\r\n                            $rootScope.$broadcast('recalculate');\r\n                        }, 100);\r\n\r\n                    }, 100);\r\n                };\r\n\r\n                $scope.robj = null;\r\n\r\n                $scope.handleRemotedlyProcessed = function (obj) {\r\n                    if (!obj.isRemotedlyProcessed) {\r\n                        $scope.dialogMode = 'remoteprocessing';\r\n                        $scope.robj = obj;\r\n                        helperService.showCustomDialog(gettextCatalog.getString('Warning'),\r\n                            gettextCatalog.getString('Are you sure you want to skip card machine processing?'),\r\n                            gettextCatalog.getString('Yes'),\r\n                            gettextCatalog.getString('No'));\r\n                    } else\r\n                        obj.isRemotedlyProcessed = false;\r\n                };\r\n\r\n\r\n                initMeasure();\r\n\r\n                watchers.push( $scope.$on(\"view.resized\", function () {\r\n                    $scope.updateSizesInCheckout();\r\n                }));\r\n\r\n\r\n                watchers.push($scope.$on(\"keyboard.hide\", function () {\r\n                    $timeout(function () {\r\n                        helperService.fitHeightTypeahead('#' + $('#searchProductInput').attr('aria-owns'), false);\r\n                    });\r\n                }));\r\n\r\n                watchers.push($scope.$on(\"keyboard.show\", function () {\r\n                    $timeout(function () {\r\n                        helperService.fitHeightTypeahead('#' + $('#searchProductInput').attr('aria-owns'), false);\r\n                    });\r\n                }));\r\n\r\n                angular.element($window).bind('resize', function () {\r\n                    $scope.calculateActualCatalogRows();\r\n                });\r\n\r\n                $scope.chooseProductTierPrice = function (p) {\r\n                    if (!!p && configService.useCustomerPriceTier === true &&\r\n                        $scope.currentSale.customer != null &&\r\n                        !!$scope.currentSale.customer.PriceTier &&\r\n                        p.SaleType !== \"customsale\" &&\r\n                        p.ProductType !== \"GiftCard\"\r\n                    ) {\r\n                        var tier = Number($scope.currentSale.customer.PriceTier.substr('Tier '.length));\r\n                        if (tier >= 1 && tier <= 10) {\r\n                            var extra = p;\r\n                            // input product object can contain parsed prices or packed into ExtraInfo\r\n                            if (!!p.ExtraInfo)\r\n                                extra = JSON.parse(p.ExtraInfo);\r\n\r\n                            var val = extra['Price' + tier];\r\n                            if (!val) val = 0;\r\n                            return val;\r\n                        }\r\n                    }\r\n\r\n                    return !!p.DefaultPrice ? p.DefaultPrice : p.Price;\r\n                };\r\n\r\n                $scope.updateCheckoutProductPrice = function (sale, leaveTaxAsIs) {\r\n                    if (!sale || !sale.CheckoutItems) return;\r\n\r\n                    $.each(sale.CheckoutItems, function (idx, p) {\r\n                        if (p.Amount >= 0 && p.CanEdit !== false) {\r\n                            var revertPrice = $scope.saleType === 'standaloneReturn';\r\n                            var pp = $scope.chooseProductTierPrice(p);\r\n                            var price = revertPrice ? -pp : pp;\r\n\r\n                            var taxObject = p.Taxes;\r\n                            var priceWithTax = $scope.posTaxInclucive ? pp : pp + calculateTax(taxObject, pp);\r\n                            var priceWithT = revertPrice ? -priceWithTax : priceWithTax;\r\n\r\n                            p.Price = price;\r\n                            //                p.Amount = p.Price * p.Count;\r\n                            p.PriceWithTax = priceWithT;\r\n                            p.BasePrice = price;\r\n                            //                p.Tax = calculateTax(taxObject, price * p.Count);\r\n\r\n                            $scope.changeItemCount(p, leaveTaxAsIs); // for recalculations\r\n                        }\r\n                    });\r\n                };\r\n\r\n                $scope.setDisableLoyaltyFlag = function () {\r\n                    // loyaltyUnavailable is an LL CDN/auth latch; loyaltyEnabled is LoyaltyLion-only when an LL token is configured, so this cannot gate DEAR points.\r\n                    if (!$scope.loyaltyUnavailable &&\r\n                        !!$scope.currentSale && !!$scope.currentSale.customer &&\r\n                        $scope.currentSale.customer.EnableLoyaltyPoints === true && $scope.showLoyalty === true) {\r\n                        $scope.disableLoyalty = false;\r\n                    } else\r\n                        $scope.disableLoyalty = true;\r\n                };\r\n\r\n                $scope.calculateCashChangeValue = function () {\r\n                    var nativeSum = helperService.DEARRound(parseFloat($scope.formHolder.realSum), 2);\r\n                    var clientSum = helperService.DEARRound(parseFloat($scope.formHolder.realCashSum), 2);\r\n                    var change = clientSum - nativeSum;\r\n                    if (change < 0) change = 0;\r\n                    change = helperService.DEARRound(change, 2);\r\n                    return change;\r\n                };\r\n\r\n                $scope.payCashDlg = null;\r\n                $scope.banknotePredictions = [];\r\n\r\n                $scope.showPayCashDlg = function () {\r\n                    $scope.payCashDlg.toggle();\r\n                };\r\n\r\n                $scope.setCashPay = function (prm) {\r\n                    $scope.payCashDlg.hide(prm);\r\n                    if (prm === true) {\r\n                        $scope.payAmountChanged();\r\n\r\n                        $timeout(function () {\r\n                            fontMeasureService.updateFontSize('payCashAmountParent', 'payCashAmount', 18);\r\n                        }, 100);\r\n                    }\r\n                };\r\n\r\n                $scope.setCashMode = function (mode) {\r\n                    $scope.cashMode = mode;\r\n                };\r\n\r\n                $scope.setCreditCardMode = function (mode) {\r\n                    $scope.creditCardMode = mode;\r\n                };\r\n\r\n                $scope.setPredefinedCash = function (amount) {\r\n                    $scope.formHolder.realCashSum = amount;\r\n                    $timeout(function () {\r\n                        fontMeasureService.updateFontSize('payCashAmountParent', 'payCashAmount', 18);\r\n                    }, 100);\r\n                };\r\n\r\n                $scope.cashPay2 = function () {\r\n                    var amount = $scope.formHolder.realCashSum;\r\n                    if (amount > 0) {\r\n                        $scope.formHolder.realSum = $scope.formHolder.realCashSum;\r\n                        $scope.formHolder.realCashSum = 0;\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        fontMeasureService.updateFontSize('payAmountParent', 'payAmount', 18);\r\n                    }, 100);\r\n\r\n                    return $scope.cashPay();\r\n                };\r\n\r\n                $scope.creditCardPay2 = function () {\r\n                    var amount = $scope.formHolder.realCashSum;\r\n                    if (amount > 0) {\r\n                        $scope.formHolder.realSum = $scope.formHolder.realCashSum;\r\n                        $scope.formHolder.realCashSum = 0;\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        fontMeasureService.updateFontSize('payAmountParent', 'payAmount', 18);\r\n                    }, 100);\r\n\r\n                    return $scope.creditCardPay();\r\n                };\r\n\r\n                $scope.showSelectTaxDialog = function () {\r\n                    //var frm = $('#taxModelDlg');\r\n                    //helperService.showDialog(frm);\r\n                    $rootScope.$broadcast('selectTax.show', $scope.currentSale);\r\n\r\n                };\r\n\r\n                watchers.push($scope.$on('selectTax.changed', function (event, data) {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    // data is the map of checkout id->tax object pairs\r\n                    $.each($scope.currentSale.CheckoutItems, function (i, c) {\r\n                        var mp = data[c.ID];\r\n\r\n                        if (mp) {\r\n                            if (isNewSale) {\r\n                                c.EffectiveExclusiveTaxPercent = mp.effectivePercentExclusive;\r\n                                c.EffectiveInclusiveTaxPercent = mp.effectivePercentInclusive;\r\n                            } else {\r\n                                c.Taxes = $.extend(c.Taxes, mp);\r\n                            }\r\n                            c.TaxRuleID = mp.ruleID;\r\n                        }\r\n                    });\r\n\r\n                    if (!isNewSale)\r\n                        calculateSums();\r\n                    else\r\n                        CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope, StartCalcLevel.Tax);\r\n                }));\r\n\r\n                $scope.isTaxPopupAvailable = function () {\r\n                    var isNewSale = helperService.showNewCheckoutUI($scope.currentSale);\r\n\r\n                    var lst = $scope.currentSale.CheckoutItems.filter(function (el) {\r\n                        return el.CanEdit !== false;\r\n                    });\r\n                    return lst.length > 0;\r\n                };\r\n\r\n                $scope.getPaymentMethodSurcharges = function (paymentTypeShortName, surcharges) {\r\n                    var methods = configService.paymentProcessors.filter(function (p) {\r\n                        return p.loweredPaymentMethodName === paymentTypeShortName;\r\n                    });\r\n\r\n                    if (methods.length > 0 && methods[0].surcharges && methods[0].surcharges.length > 0) {\r\n                        var mp = {};\r\n                        $.each(surcharges, function (i, s) {\r\n                            mp[s.SurchargeID] = s;\r\n                        });\r\n\r\n                        var res = [];\r\n                        $.each(methods[0].surcharges, function (i, s) {\r\n                            var srch = mp[s];\r\n                            if (srch)\r\n                                res.push(srch);\r\n                        });\r\n\r\n                        return res;\r\n                    }\r\n\r\n                    return null;\r\n                };\r\n\r\n                $scope.calcSelectedSurcharges = function () {\r\n                    return saleService.calcSelectedSurcharges($scope.payments, $scope.paymentValidation);\r\n                };\r\n\r\n                $scope.calcTotalPay = function () {\r\n                    return saleService.calcSelectedSurcharges($scope.payments, $scope.paymentValidation) +\r\n                        saleService.calcTotalPay($scope.payments, $scope.paymentValidation);\r\n                };\r\n\r\n                $scope.hideMenuDropdown = function () {\r\n                    var mn = $('#paymentFooter ul:visible');\r\n                    if (mn.length > 0) {\r\n                        mn.dropdown('toggle');\r\n                    }\r\n                };\r\n\r\n                $scope.useNewCalculation = function () {\r\n                    return CalculatorHelperService.useNewCalculation($scope.currentSale);\r\n                };\r\n\r\n\r\n                $scope.isLoyaltyLionEnabled = function () {\r\n                    var b = !configService.loyaltyLionToken ? false : true;\r\n                    var sm = $scope.currentSale.Total > 0 && configService.isOnline;\r\n                    var llExistedCustomer = !!$scope.currentSale.customer.LLCustomerID && $scope.currentSale.customer.LLCustomerID != \"0\";\r\n                    var res = b && llExistedCustomer && configService.isOnline && !$scope.loyaltyUnavailable && !loyaltyLionProvider.sdkFailed;\r\n                    if ($scope.mode !== 'summary' && b && sm && llExistedCustomer && !$scope.loyaltyUnavailable && !loyaltyLionProvider.sdkFailed) {\r\n                        if ($scope.currentSale.customer.ID) {\r\n                            loyaltyLionProvider.showWidget()\r\n                        } else {\r\n                            loyaltyLionProvider.hideWidget()\r\n                        }\r\n                    } else {\r\n                        loyaltyLionProvider.hideWidget()\r\n                    }\r\n\r\n                    return res;\r\n                };\r\n\r\n                $rootScope.closeLoyaltyLionDialog = function () {\r\n                    helperService.closeDialog($('#loyaltyLionModal'));\r\n                };\r\n\r\n\r\n                function prepareQuoteReceipt() {\r\n                    if ($scope.quoteTemplateHolder.QuoteTemplate) {\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve($scope.quoteTemplateHolder);\r\n                        return deferred.promise;\r\n                    }\r\n                    $.blockUI();\r\n                    return receiptService.getReceiptTemplate('remote', 'SaleQuote', 'receiptSaleModel')\r\n                        .then(function (resp) {\r\n\r\n                            var injectedString = '; white-space: pre-wrap;';\r\n                            var position = resp.Template.search(\"\\\">{{itemNotes.SalesNote}}\");\r\n                            var result = [resp.Template.slice(0, position), injectedString, resp.Template.slice(position)].join('');\r\n\r\n                            var replacedString = '<canvas class=\"barcode\" id=\"code93\" type=\"code93\" b_value=\"{{receiptSaleModel.ReceiptBarCode_code93}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{receiptSaleModel.ReceiptBarCode_code93}}</canvas><div class=\"barcode_img img_code93\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code93}}\", replacedString);\r\n                            replacedString = '<canvas class=\"barcode\" id=\"code128\" type=\"code128\" b_value=\"{{receiptSaleModel.ReceiptBarCode_code128}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{receiptSaleModel.ReceiptBarCode_code128}}</canvas><div class=\"barcode_img img_code128\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code128}}\", replacedString);\r\n\r\n                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-ean8\" type=\"ean8\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean8\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_ean8}}\", replacedString);\r\n                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-ean13\" type=\"ean13\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-ean13\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_ean13}}\", replacedString);\r\n                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-industrial2of5\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  type=\"industrial2of5\" style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-industrial2of5\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_industrial2of5}}\", replacedString);\r\n                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-upca\" type=\"upca\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upca\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_upca}}\", replacedString);\r\n                            replacedString = '<canvas class=\"product_barcode\" id=\"{{itemCheckoutProducts.ProductID}}-upce\" type=\"upce\" b_value=\"{{itemCheckoutProducts.ProductBarCode}}\"  style=\"border:1px solid #fff;visibility:hidden;display:none;\">{{itemCheckoutProducts.ProductBarCode}}</canvas><div class=\"barcode_img img_{{itemCheckoutProducts.ProductID}}-upce\" style=\"text-align: center;\"></div>';\r\n                            result = result.replace(\"{{itemCheckoutProducts.ProductBarCode_upce}}\", replacedString);\r\n\r\n                            $scope.quoteTemplateHolder.QuoteTemplate = result;\r\n\r\n                            if (resp.EmailTemplate) {\r\n                                position = resp.EmailTemplate.search(\"\\\">{{itemNotes.SalesNote}}\");\r\n                                result = [resp.EmailTemplate.slice(0, position), injectedString, resp.EmailTemplate.slice(position)].join('');\r\n\r\n                                replacedString = '<div class=\"barcode_img\" id=\"img_code93\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code93}}\", replacedString);\r\n                                replacedString = '<div class=\"barcode_img\" id=\"img_code128\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_code128}}\", replacedString);\r\n\r\n                                replacedString = '<div class=\"barcode_img\" id=\"img_{{itemCheckoutProducts.ProductID}}-ean8\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_ean8}}\", replacedString);\r\n                                replacedString = '<div class=\"barcode_img\" id=\"img_{{itemCheckoutProducts.ProductID}}-ean13\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_ean13}}\", replacedString);\r\n                                replacedString = '<div class=\"barcode_img\" id=\"img_{{itemCheckoutProducts.ProductID}}-industrial2of5\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_industrial2of5}}\", replacedString);\r\n                                replacedString = '<div class=\"barcode_img\" id=\"img_{{itemCheckoutProducts.ProductID}}-upca\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_upca}}\", replacedString);\r\n                                replacedString = '<div class=\"barcode_img\" id=\"img_{{itemCheckoutProducts.ProductID}}-upce\" style=\"text-align: left;\"></div>';\r\n                                result = result.replace(\"{{receiptSaleModel.ReceiptBarCode_upce}}\", replacedString);\r\n\r\n                                $scope.quoteTemplateHolder.QuoteEmailTemplate = result;\r\n                            } else {\r\n                                $scope.quoteTemplateHolder.QuoteEmailTemplate = result;\r\n                            }\r\n                            $scope.quoteTemplateHolder.QuoteEmailSubject = resp.EmailSubject;\r\n                            $scope.quoteTemplateHolder.QuoteTemplateID = resp.TemplateID;\r\n\r\n                            $.unblockUI();\r\n\r\n                            return $scope.quoteTemplateHolder;\r\n\r\n                        }, function (err) {\r\n                            $.unblockUI();\r\n\r\n                            let ex = '';\r\n                            if (typeof (err) === 'string') {\r\n                                ex = err;\r\n                            } else if (err.Exception) {\r\n                                ex = err.Exception;\r\n                            } else if (err.data) {\r\n                                if (err.data.Exception)\r\n                                    ex = err.data.Exception;\r\n                                else if (err.data[0] && err.data[0].Exception)\r\n                                    ex = err.data[0].Exception;\r\n                            }\r\n\r\n                            let errorMessage = gettextCatalog.getString(\"Failed to load sale quote template.\") + \": \" + ex;\r\n                            errorService.showError(errorMessage);\r\n                            return false;\r\n                        });\r\n                };\r\n\r\n                function getQuoteNumberAndReceipt() {\r\n                    return prepareQuoteReceipt()\r\n                        .then(function (resp) {\r\n                            if (resp === false)\r\n                                return resp;\r\n\r\n                            if (!$scope.currentSale.ClearOrderNumber || parseInt($scope.currentSale.ClearOrderNumber) < 1) {\r\n                                return saleService.getNextSequence(configService.lastOutletID, configService.lastRegistryID)\r\n                                    .then(function (data) {\r\n                                        var lastRegistryPiece = configService.lastRegistryID.split('-');\r\n                                        $scope.currentSale.OrderNumber = (configService.registryPrefix ? configService.registryPrefix : \"\") +\r\n                                            data + (configService.registrySuffix ? configService.registrySuffix : \"\");\r\n                                        $scope.currentSale.ClearOrderNumber = data;\r\n                                        $scope.currentSale.Barcode = lastRegistryPiece[1] + \"-\" + Math.floor(Date.now() / 1000).toString(36) + \"-\" + parseInt(data, 10).toString(36);\r\n                                    });\r\n                            }\r\n                        });\r\n                }\r\n\r\n\r\n\r\n                $scope.canEmailQuote = function () {\r\n                    return !(!$scope.currentSale.CheckoutItems || $scope.currentSale.CheckoutItems.length == 0 || $scope.canParkSale === false) &&\r\n                        configService.isOnline && $scope.currentSale.customer.ID && (!$scope.saleType || $scope.saleType === 'newSale');\r\n                }\r\n\r\n                $scope.canPrintQuote = function () {\r\n                    return !(!$scope.currentSale.CheckoutItems || $scope.currentSale.CheckoutItems.length == 0 || $scope.canParkSale === false) &&\r\n                        configService.isSite && $scope.currentSale.customer.ID && (!$scope.saleType || $scope.saleType === 'newSale');\r\n\r\n                    // The code below allows to show quote print button on mobile device\r\n                    // return !(!$scope.currentSale.CheckoutItems || $scope.currentSale.CheckoutItems.length==0 || $scope.canParkSale === false)\r\n                    //             && !$scope.disablePrintReceipt() && $scope.currentSale.customer.ID && (!$scope.saleType || $scope.saleType === 'newSale');\r\n                }\r\n\r\n\r\n\r\n                $scope.printQuote = function () {\r\n                    getQuoteNumberAndReceipt()\r\n                        .then(function (resp) {\r\n                            if (resp === false)\r\n                                return;\r\n\r\n                            updateReceipt();\r\n                            setTimeout(function () {\r\n                                return printService.printReceipt($(\"#quote-template\"), null, true, false);\r\n                            }, 50)\r\n                        })\r\n\r\n                };\r\n\r\n\r\n                $scope.showQuoteEmailDialog = function () {\r\n                    if (!!$scope.currentSale.SelectedContact &&\r\n                        $scope.currentSale.SelectedContact.Email) {\r\n                        $scope.quoteTemplateHolder.QuoteEmail = $scope.currentSale.SelectedContact.Email;\r\n                    } else {\r\n                        $scope.quoteTemplateHolder.QuoteEmail = '';\r\n                    }\r\n\r\n                    var $windowElement = $('#quoteEmailDialogPartial');\r\n                    helperService.showDialog($windowElement);\r\n                }\r\n\r\n\r\n                $scope.closeQuoteEmailDialog = function () {\r\n                    var $windowElement = $('#quoteEmailDialogPartial');\r\n                    helperService.closeDialog($windowElement);\r\n                }\r\n\r\n\r\n                $scope.sendEmailQuote = function () {\r\n                    getQuoteNumberAndReceipt()\r\n                        .then(function (resp) {\r\n                            if (resp === false)\r\n                                return;\r\n\r\n                            updateReceipt();\r\n                            $.blockUI();\r\n\r\n                            setTimeout(function () {\r\n                                var emailBody = emailService.setEmailToken('#quote-email-template').html();\r\n                                var emailSubject = $scope.quoteTemplateHolder.QuoteEmailSubject;\r\n\r\n                                var email = $scope.quoteTemplateHolder.QuoteEmail;\r\n                                var orders = emailService.extractOrderIDs($scope.currentSale);\r\n                                emailService.sendEmailReceipt(orders.orderID, orders.baseOrderID, email, emailSubject, emailBody, true, $scope.quoteTemplateHolder.QuoteTemplateID)\r\n                                    .then(function (result) {\r\n                                        // show message box about sending result\r\n                                        $.unblockUI();\r\n                                        $scope.closeQuoteEmailDialog();\r\n\r\n                                        if (result.Result == true) {\r\n\r\n\r\n                                            var $windowElement = $('#quoteEmailCompletion');\r\n                                            helperService.showDialog($windowElement);\r\n\r\n                                            $scope.closeQuoteEmailCompleteDialog = function () {\r\n                                                var $windowElement = $('#quoteEmailCompletion');\r\n                                                helperService.closeDialog($windowElement);\r\n                                            };\r\n                                        } else {\r\n                                            var $windowElement = $('#quoteEmailCompletionError');\r\n                                            helperService.showDialog($windowElement);\r\n\r\n                                            $scope.closeQuoteEmailCompleteDialog = function () {\r\n                                                var $windowElement = $('#quoteEmailCompletionError');\r\n                                                helperService.closeDialog($windowElement);\r\n                                            };\r\n                                        }\r\n                                    }, function (err) {\r\n                                        $.unblockUI();\r\n                                        var txt = gettextCatalog.getString(\"Error sending email.\");\r\n                                        if (!!err.data && err.data.length > 0 && !!err.data[0].Exception)\r\n                                            txt = err.data[0].Exception;\r\n\r\n                                        errorService.showError(!!err.data ? err.data : txt);\r\n                                    });\r\n                            }, 50);\r\n                        });\r\n                };\r\n\r\n                watchers.push($scope.$on('ll.clipboard.code.copy', function (event, data) {\r\n                    if ($scope.currentSale.customer.ID) {\r\n                        $scope.LLCurrentValue = data.code;\r\n                        if (data.code) {\r\n                            $scope.LLCopiedCode = { customerID: $scope.currentSale.customer.ID, code: data.code };\r\n                        }\r\n                        if(data.title !== null) {\r\n                            if(!configService.canGiveDiscount) {\r\n                                errorService.showError(\r\n                                    gettextCatalog.getString(\"You can’t discount sales. Your Admin can update the Can Give Discount user permission.\"),\r\n                                    null,\r\n                                    gettextCatalog.getString(\"Permission denied\")\r\n                                );\r\n                                return;\r\n                            }\r\n                            $.blockUI();\r\n                            saleService.loadLLCustomerRewards($scope.currentSale.customer.LLMerchantID)\r\n                            .then(function (result) {\r\n                                $.unblockUI();\r\n                                const error = result?.[0];\r\n                                if(error?.ErrorCode == 403){\r\n                                    errorService.showError(error.Exception, null, gettextCatalog.getString(\"Permission denied\"));\r\n                                    return; \r\n                                }\r\n                                if(result?.Rewards) {\r\n                                    const reward = result.Rewards.find(x => x.title === data.title);\r\n                                    const llReward = window.loyaltylion?.customer?.claimedRewards?.[0];\r\n                                    if (!reward || !llReward) {\r\n                                        errorService.showError(\r\n                                            gettextCatalog.getString(\"The discount could not be applied automatically. The code has been copied into the Discount field, please apply it manually.\")\r\n                                        );\r\n                                        return;\r\n                                    }\r\n                                    $scope.currentSale.customer.LLDiscountCode = data.code;\r\n                                    $scope.currentSale.Discount = reward.discount_amount;\r\n                                    $scope.currentSale.isDiscountPercent = reward.discount_type === 'percentage' ? true : false;\r\n                                    $scope.LLDiscountType = reward.discount_type;\r\n                                    $scope.LLDiscountTitle = data.title;\r\n                                    $scope.currentSale.manuallyAppliedDiscount = true;\r\n\r\n                                        var payment = {\r\n                                        ID: uuid2.newguid(),\r\n                                        PaymentProcessorID: null,\r\n                                        Amount: 0, // we counted it before in the discount section\r\n                                        Date: moment.utc(),\r\n                                        ShortName: 'loyaltylion',\r\n                                        PaymentTypeName:  gettextCatalog.getString(\"Loyalty Lion points\"),\r\n                                        Loyalty: llReward.point_cost,\r\n                                        SaleServerTransactionID:  llReward.id,\r\n                                        Reference: $scope.currentSale.customer.LLMerchantID\r\n                                    };\r\n                                    $scope.currentSale.Payments.push(payment);\r\n                                        \r\n                                    var res = CalculatorHelperService.calculateCheckout($scope.currentSale, saleService.getProductDeals(), $scope, StartCalcLevel.Total);\r\n                                    if (res.updateSaleOrderDiscount !== null) {\r\n                                        $scope.currentSale.Discount = helperService.DEARRound(res.updateSaleOrderDiscount, 2);\r\n                                    }\r\n                                }                   \r\n                            })\r\n                            .catch(function (err) {\r\n                                $.unblockUI();\r\n                            });     \r\n                        }\r\n                        else {\r\n                            let el = $scope.discountDlg.getScope();\r\n                            el.$$childHead.model = 0;\r\n                            el.LLDiscountType = null;\r\n                            $scope.LLDiscountTitle = null;\r\n                            $scope.LLDiscountType = null;\r\n                        }\r\n                        soundService.playGood();                             \r\n                    }\r\n                    if (!configService.isSite && buildConfiguration.platform === 'android') {\r\n                        cordova.plugins.clipboard.copy(data.code);\r\n                    }\r\n                }));\r\n\r\n                $scope.showInMobileDesign = function() {\r\n                    return configService.isMobileDesign ? '' : 'desktop-hide';\r\n                };\r\n\r\n                $scope.addDelivery = function(){\r\n                    $rootScope.$broadcast('deliveryDialog.show',\r\n                    {\r\n                        sale: $scope.currentSale,\r\n                        addNew: true\r\n                    });\r\n                };\r\n                $scope.showInDesktopDesign = function() {\r\n                    return configService.isMobileDesign ? 'mobile-hide' : '';\r\n                };\r\n\r\n                // $scope.showLoyaltyPanel = function() {\r\n                //     $('.lion-loyalty-widget__body').click();\r\n                // };\r\n\r\n                $scope.scan = function() {\r\n                    cordova.plugins.barcodeScanner.scan(\r\n                        function (result) {\r\n                            console.log(\"We got a barcode\\n\" +\r\n                                \"Result: \" + result.text + \"\\n\" +\r\n                                \"Format: \" + result.format + \"\\n\" +\r\n                                \"Cancelled: \" + result.cancelled);\r\n                        },\r\n                        function (error) {\r\n                            console.log(\"Scanning failed: \" + error);\r\n                        }\r\n                    );\r\n                };\r\n\r\n                $scope.getCatalogTileContainerHeight = function() {\r\n                    const container = $('.tileGrid');\r\n                    if (container && container.length) {\r\n                        return container.height();\r\n                    }\r\n\r\n                    return null;\r\n                }\r\n\r\n                $scope.calculateActualCatalogRows = function() {\r\n                    if ($scope.tilesVisibility !== 'image_text') {\r\n                        return;\r\n                    }\r\n\r\n                    let rows = configService.getCatalogPageRows();\r\n                    const containerHeight = $scope.getCatalogTileContainerHeight();\r\n\r\n                    if (!containerHeight) {\r\n                        return\r\n                    }\r\n                    \r\n                    if (rows == 6 && containerHeight < 560) {\r\n                        rows = 5\r\n                    } \r\n                    if (rows > 4 && containerHeight < 480) {\r\n                        rows = 4\r\n                    }\r\n                    $scope.pageRows = rows;\r\n                    $scope.catalogTileRows = rows;\r\n                };\r\n\r\n                $scope.showCustomerEmailWarningDialog = function (customer) {\r\n\r\n                    $('#customerEmail').val(\"\");\r\n                    var $windowElement = $('#customerEmailWarningDialog');\r\n                    $windowElement.find('#warningModalBody').text(customer.Warning);\r\n                    helperService.showDialog($windowElement);\r\n                };\r\n        \r\n                $scope.closeCustomerEmailWarningDialog = function () {\r\n        \r\n                    var $windowElement = $('#customerEmailWarningDialog');\r\n                    helperService.closeDialog($windowElement);\r\n                };\r\n\r\n                $scope.editCustomerEmail = function () {\r\n\r\n                    var customerEmail = $('#customerEmail').val();\r\n\r\n                    if (!!customerEmail) {\r\n\r\n                        $.blockUI();\r\n\r\n                        var customerToSave = angular.copy($scope.currentSale.customer);\r\n\r\n                        if (!!customerToSave.Contacts && customerToSave.Contacts.length > 0)\r\n                            customerToSave.Contacts[0].Email = customerEmail;\r\n                        else\r\n                        {\r\n                            var contact = [{\r\n                                Name: customerToSave.Name,\r\n                                Email: customerEmail,\r\n                                Phone: null,\r\n                                MobilePhone: null,\r\n                                MarketingConsent: '1'\r\n                            }];\r\n                            customerToSave.Contacts = contact;\r\n                        }\r\n\r\n                        var updateMode = \"\";\r\n\r\n                        var customer = angular.extend(customerToSave, { updateMode: updateMode });\r\n\r\n                        customerService.updateCustomer(customer).then(function (resp) {\r\n                            customerService.onCustomerUpdated(customer.id || customer.ID)\r\n                                .finally(function () {\r\n                                    $scope.currentSale.customer = customer;\r\n                                    $scope.addCustomerHandler($scope.currentSale.customer);\r\n                                    $.unblockUI();\r\n                                });\r\n\r\n                        }, function (err) {\r\n                            $.unblockUI();\r\n                            errorService.showError(err);\r\n                        });\r\n                    }\r\n                };\r\n\r\n                $scope.setRegistrySales = function () {\r\n                    return registryService.getActiveRegistrySales(configService.lastRegistryID, configService.lastUserName, null, 'simple').then(function (resp) {\r\n                        if (resp[0]) {\r\n                            $scope.registrySalesID = resp[0].ID;\r\n                            configService.registrySalesID = resp[0].ID;\r\n                        } else {\r\n                            $scope.registrySalesID = null;\r\n                            $location.path('/opencloseregistry');\r\n                        }\r\n                    });\r\n                }\r\n\r\n                $scope.triggerSendEmailReceipt = function (resp) {\r\n                    if (resp.Success && !$scope.receiptHolder.receiptForm.receiptEmail.$isEmpty($scope.email.receiptEmail) && !$scope.receiptHolder.receiptForm.receiptEmail.$invalid && $scope.currentSale.customer.SendReceiptViaEmail) {\r\n                        $scope.emailSent = false;\r\n                        var deferred4 = $q.defer();  \r\n                        $scope.sendEmailReceipt();  \r\n                        $scope.$watch('emailSent', function (newValue) {\r\n                            if (newValue === true) {\r\n                                deferred4.resolve();  \r\n                            }\r\n                        });\r\n\r\n                        $timeout(function () {\r\n                            if (!$scope.emailSent) {\r\n                                deferred4.resolve();\r\n                            }\r\n                        }, 2000);\r\n\r\n                        return deferred4.promise;  \r\n                    }\r\n                }\r\n\r\n                watchers.push($scope.$on(\"$destroy\", function () {\r\n                    //printService.disconnect();\r\n                    loyaltyService.clearCustomer();\r\n                    $(document).off('click.loyaltyLionWidget', '#dear-loyalty-lion-widget .lion-loyalty-widget .lion-loyalty-widget__body', onLoyaltyLionWidgetClick);\r\n\r\n                    $rootScope.$broadcast('header.enableMenu', true);\r\n                    $(window).off('resize', onResize);\r\n                    watchers.forEach((x) => {\r\n                        try {\r\n                            x()\r\n                        } catch (e) {\r\n                            console.log(e);\r\n                        }\r\n                    });\r\n                }));\r\n            }\r\n        ]);\r\n\r\nangular.module(\"mainApp\").filter('comboStrictFilter', function ($filter) {\r\n    return function (input, predicate) {\r\n        var res = [];\r\n        angular.forEach(input, function (el) {\r\n            var contains = true;\r\n\r\n            for (let p in predicate) {\r\n                var v = predicate[p];\r\n                if (!!v.distinct && el[p] !== v.distinct) {\r\n                    contains = false;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (contains) {\r\n                res.push(el);\r\n            }\r\n        });\r\n\r\n        return res;\r\n    };\r\n});\r\n\r\nangular.module('mainApp').filter('currency2', ['$filter', 'helperService', function($filter, helperService) {\r\nvar currencyFilter = $filter('currency');\r\nreturn function(amount, currencySymbol) {\r\n    if(!amount)\r\n        amount = 0;\r\n\r\n    return currencyFilter(helperService.DEARRound(amount, 4), currencySymbol);\r\n};\r\n} ]);\r\n","angular.module(\"mainApp\").controller('setPinController',\r\n    ['$scope', '$rootScope', 'errorService', 'helperService', '$timeout', 'loginService', 'configService', 'gettextCatalog', '$route','$location',\r\n    function ($scope, $rootScope, errorService, helperService, $timeout, loginService, configService, gettextCatalog, $route, $location) {\r\n\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: '' }); // to hide sidebar details\r\n\r\n        $scope.pinFormCaption = gettextCatalog.getString('Enter your new Cin7 Core POS PIN');\r\n\r\n        $scope.pinMode = true;\r\n        $scope.hideGoToLogin = true;\r\n        $scope.pinEnabled = configService.pinEnabled;\r\n        $scope.pinToken = configService.pinToken;\r\n        $scope.isSuccessMessage = false;\r\n\r\n        $scope.pinValue = [];\r\n        for (var i = 0; i < configService.pinSize; i++)\r\n            $scope.pinValue.push(null);\r\n\r\n        // enable event when view is shown\r\n        $scope.onLoad = function () {\r\n            $scope.isSuccessMessage = $route.current.params.isSuccessMessage || false;\r\n            $timeout(function () {\r\n                helperService.showPageAfterInit();\r\n                $(document).on('keydown', keyboardListener);\r\n            });\r\n\r\n            $scope.raiseViewChanged();\r\n        };\r\n\r\n        $scope.$watch('configService.pinToken', function(newVal, oldVal) {\r\n            $scope.pinToken = newVal;\r\n        })\r\n\r\n        $scope.$on(\"$destroy\", function () {\r\n            $(document).unbind('keydown', keyboardListener); \r\n        });\r\n\r\n        function keyboardListener(e){\r\n            if($scope.pinMode){\r\n                if((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105))\r\n                    $scope.clickFun(e.key);\r\n                else if(e.keyCode === 8)\r\n                    $scope.clickFun('backspace');\r\n                else if(e.keyCode === 13)\r\n                    $scope.save();\r\n            }\r\n        };\r\n\r\n        $scope.finished = false;\r\n        $scope.raiseViewChanged = function () {\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('view.loaded');\r\n            });\r\n        };\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n//            $rootScope.$broadcast('login.show'); // show login page on application start\r\n        };\r\n\r\n        $scope.clickFun = function (s) {\r\n            $timeout(function () {\r\n                if (s == 'backspace') {\r\n                    for (var i = ($scope.pinValue.length - 1) ; i >= 0; i--) {\r\n                        if ($scope.pinValue[i] != null) {\r\n                            $scope.pinValue[i] = null;\r\n                            break;\r\n                        }\r\n                    }\r\n                }\r\n                else {\r\n                    for (var i = 0; i < $scope.pinValue.length; i++) {\r\n                        if ($scope.pinValue[i] == null) {\r\n                            $scope.pinValue[i] = s;\r\n                            break;\r\n                        }\r\n                    }\r\n\r\n                }\r\n\r\n                $scope.finished = $scope.pinValue[$scope.pinValue.length - 1] != null;\r\n            });\r\n        };\r\n\r\n        $scope.save = function () {\r\n            $.blockUI();\r\n            var pin = '';\r\n            for (var i = 0; i < $scope.pinValue.length; i++)\r\n                pin += $scope.pinValue[i];\r\n\r\n            loginService.savePin(pin)\r\n            .then(function () {\r\n                    $.unblockUI();\r\n                    // helperService.showInfoDialog({\r\n                    //     title: '',\r\n                    //     body: gettextCatalog.getString('PIN code is saved.')\r\n                    // }, function() {\r\n                    //     $timeout(function(){\r\n                    //         $route.reload();\r\n                    //     });\r\n                    // });\r\n\r\n                    $scope.isSuccessMessage = true;\r\n                    $scope.raiseViewChanged();\r\n                })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n        $scope.reset = function () {\r\n            $.blockUI();\r\n\r\n            loginService.savePin(null)\r\n            .then(function () {\r\n                $.unblockUI();\r\n                helperService.showInfoDialog({\r\n                    title: '',\r\n                    body: gettextCatalog.getString('The PIN code is reset.')\r\n                }, function() {\r\n                    $timeout(function(){\r\n                        $route.updateParams({\r\n                            isSuccessMessage: true\r\n                        });\r\n                    });\r\n                });\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n        $scope.openRegister = function() {\r\n            $location.path('/sell');\r\n        };\r\n    }]);\r\n","angular.module(\"mainApp\").controller('setupController',\r\n    ['$scope', '$rootScope', 'loginService', 'constants', 'configService', 'printService', 'labelPrintService', 'labelService', 'errorService',\r\n        'helperService', '$timeout', 'gettextCatalog', 'cardPayService', 'secondTerminalServiceWeb',\r\n    function ($scope, $rootScope, loginService, constants, configService, printService, labelPrintService, labelService, errorService,\r\n        helperService, $timeout, gettextCatalog, cardPayService, secondTerminalServiceWeb) {\r\n\r\n        //$rootScope.$broadcast('sideBar.hideDetails', { sectionName: constants.constSetupSectionName }); // to hide sidebar details\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: '' }); // to hide sidebar details\r\n\r\n        $scope.fcss = { 'height': window.innerHeight * 0.95 + 'px' };\r\n        $scope.ifcss = { 'height': (window.innerHeight * 0.9) - 160 + 'px' };\r\n        $scope.printerModalMode = 'connect';\r\n        $scope.selected = {\r\n            selectedSystem: null,\r\n            selectedModel: null\r\n        };\r\n\r\n        $scope.showSoftKbdPart = buildConfiguration.platform == 'ios';\r\n\r\n        // enable event when view is shown\r\n        $scope.onLoad = function () {\r\n            printService.disconnect();\r\n            labelPrintService.disconnect();\r\n\r\n            $timeout(function () {\r\n                helperService.showPageAfterInit();\r\n            });\r\n\r\n            $scope.raiseViewChanged();\r\n\r\n        };\r\n\r\n        $scope.raiseViewChanged = function () {\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('view.loaded');\r\n            });\r\n        };\r\n        $scope.isSite = configService.isSite;\r\n\r\n        $scope.printArea = [\r\n            { text: '2inch', value: 2, points: 384 },\r\n            { text: '3inch', value: 3, points: 566 },\r\n            { text: '4inch', value: 4, points: 822 }\r\n        ];\r\n\r\n        $scope.labelPrintArea = labelService.getLabelPrintArea();\r\n        $scope.printerModels = [];\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n//            $rootScope.$broadcast('login.show'); // show login page on application start\r\n        };\r\n\r\n        $scope.settings = configService.getPrinterSettings(true);\r\n        $scope.labelSettings = configService.getLabelPrinterSettings(true);\r\n\r\n        console.log('settings', $scope.settings);\r\n\r\n        /* Payment SetUp */\r\n        $scope.paymentSettings = configService.getCardPaymentSettings();\r\n        if ($scope.paymentSettings.printTyroReceiptOnTerminal == null ||\r\n            $scope.paymentSettings.printTyroReceiptOnTerminal == undefined) {\r\n                $scope.paymentSettings.printTyroReceiptOnTerminal = true;\r\n        }\r\n            \r\n        \r\n        if ($scope.paymentSettings.printWindcaveReceipts == null) {\r\n            $scope.paymentSettings.printWindcaveReceipts = true;\r\n        }\r\n\r\n        $scope.paymentSettings.triPOSLaneID = configService.triPOSLaneID;\r\n\r\n        $scope.selectedPaymentSystem = { key: $scope.paymentSettings.providerKey };\r\n\r\n        $scope.$watch('selectedPaymentSystem.key',\r\n            function (newValue, oldValue) {\r\n\r\n                var provider = $scope.providers.filter(function (el) { return el.key === newValue; });\r\n                var providerName = provider[0].name;\r\n                $scope.selectedPaymentSystem.systemName = providerName;\r\n\r\n                try {\r\n                    if ($scope.selectedPaymentSystem.key =='paymentSenseReaderProvider') {\r\n                        $scope.showPaymentSenseTerminals();\r\n                    }\r\n                } catch(e) {\r\n                }\r\n                \r\n\r\n                // switch (newValue) {\r\n                //     case 'squareReaderProvider':\r\n                //         $scope.selectedPaymentSystem.systemName = 'Square Reader';\r\n                //         break;\r\n                // }\r\n            }\r\n        );\r\n\r\n        $scope.selectedPaymentSystem.key = $scope.paymentSettings.providerKey;\r\n\r\n        //$scope.paymentModalMode = $scope.paymentSettings.providerKey == 'emptyProvider' ?  'connect' : 'succ';\r\n\r\n        $scope.providers = cardPayService.getAvailableProviders();\r\n\r\n        var fiteredKeys = $scope.providers.filter(function (el) { return el.key === $scope.paymentSettings.providerKey; });\r\n        if (fiteredKeys.length != 1) {\r\n            $scope.selectedPaymentSystem.key = \"emptyProvider\";\r\n        }\r\n        /* /Payment SetUp */\r\n\r\n        $scope.selectedArea = $scope.printArea[1];\r\n        //$scope.labelSelectedArea = $scope.labelPrintArea[1];\r\n\r\n        $scope.printerSystems = configService.getPrinterSystems();\r\n\r\n        if(!!$scope.settings && !!$scope.settings.printSystem) {\r\n            var pf = $scope.printerSystems.filter(function(p) {return p.value === $scope.settings.printSystem;});\r\n            if(pf.length>0)\r\n                $scope.selected.selectedSystem = pf[0].value;\r\n        }\r\n\r\n        if(!$scope.selected.selectedSystem)\r\n            $scope.selected.selectedSystem = $scope.printerSystems[0].value;\r\n\r\n        if($scope.selected.selectedSystem == 'star' || $scope.selected.selectedSystem == 'epson') {\r\n            $scope.printerModels = printService.getPrinterModels($scope.selected.selectedSystem);\r\n        }\r\n\r\n        if(!!$scope.settings && !!$scope.settings.printerModel) {\r\n            var models = $scope.printerModels.filter(function(p) {return p.modelTitle === $scope.settings.printerModel;});\r\n            if(models.length > 0)\r\n                $scope.selected.selectedModel = models[0];\r\n        }\r\n    \r\n        if(!$scope.selected.selectedModel)\r\n            $scope.selected.selectedModel = '';\r\n\r\n        $scope.labelPrinterSystems = configService.getLabelPrinterSystems();\r\n        $scope.labelSelectedSystem = $scope.labelPrinterSystems[0].value;\r\n\r\n        $scope.$watch('selected.selectedSystem',\r\n          function (newValue, oldValue) {\r\n                  switch (newValue) {\r\n                      case 'clover':\r\n                          $scope.settings.printerName = 'Station';\r\n                          $scope.selected.selectedModel = '';\r\n                          break;\r\n                      case 'embedded':\r\n                          $scope.settings.printerName = 'Embedded Printing';\r\n                          $scope.selected.selectedModel = '';\r\n                          break;\r\n                      case 'epson':\r\n                        if(oldValue && oldValue != newValue) {\r\n                            $scope.selected.selectedModel = '';\r\n                            $scope.settings.printerName = '';\r\n                            $scope.settings.modelName = '';\r\n                        }\r\n                          $scope.printerModels = printService.getPrinterModels('epson');\r\n                          $timeout(function () {\r\n                            $('#printerWidth').trigger('refresh');\r\n                            $('#printerModel').trigger('refresh');\r\n                        }, 0);\r\n                          break;\r\n                      default:\r\n                        if(!$scope.settings.printerName){\r\n                            $scope.settings.printerName = 'Star Micronics';\r\n                        }\r\n                        if(oldValue && oldValue != newValue) {\r\n                            $scope.selected.selectedModel = '';\r\n                            $scope.settings.printerName = '';\r\n                            $scope.settings.modelName = '';\r\n                        }\r\n                        $scope.printerModels = printService.getPrinterModels('star');\r\n                        $timeout(function () {\r\n                            $('#printerWidth').trigger('refresh');\r\n                            $('#printerModel').trigger('refresh');\r\n                        }, 0);\r\n                          break;\r\n                  }\r\n          }\r\n        );\r\n\r\n        $scope.$watch('selected.selectedModel',\r\n          function (newValue) {\r\n                  if(newValue) {\r\n                    var pageSizeCode = 3;\r\n                    $scope.printerModels.forEach(function (e, idx) {\r\n                        if (e.modelTitle == newValue && e.paperSize) {\r\n                            pageSizeCode = e.paperSize;\r\n                            return false;\r\n                        }\r\n                    });\r\n\r\n                    $scope.printArea.forEach(function (e, idx) {\r\n                        if (e.value == pageSizeCode) {\r\n                            $scope.selectedArea = {\r\n                                points: e.points,\r\n                                text: e.text,\r\n                                value: e.value\r\n                            };\r\n                            return false;\r\n                        }\r\n                    });\r\n\r\n                    $timeout(function () {\r\n                        $('#printerWidth').trigger('refresh');\r\n                        $('#printerModel').trigger('refresh');\r\n                    }, 0);\r\n                    \r\n                  }\r\n          }\r\n        );\r\n\r\n        $scope.$watch('labelSelectedSystem',\r\n          function (newValue, oldValue) {\r\n              if (newValue !== oldValue) {\r\n                  switch (newValue) {\r\n                      /*\r\n                      case 'clover':\r\n                          $scope.labelSettings.labelPrinterName = 'Station';\r\n                          break;\r\n                      */\r\n                      default:\r\n                          $scope.labelSettings.labelPrinterName = 'Dymo';\r\n                          break;\r\n                  }\r\n              }\r\n          }\r\n         );\r\n\r\n        $scope.findPrintArea = function () {\r\n            $scope.printArea.forEach(function (e, idx) {\r\n                if (e.value == $scope.settings.printerWidthCode) {\r\n                    $scope.selectedArea = {\r\n                        points: e.points,\r\n                        text: e.text,\r\n                        value: e.value\r\n                    };\r\n                    return false;\r\n                }\r\n            });\r\n\r\n            $scope.printerSystems.forEach(function (e, idx) {\r\n                if (e.value == $scope.settings.printSystem) {\r\n                    $scope.selected.selectedSystem = e.value;\r\n                    return false;\r\n                }\r\n            });\r\n\r\n            $scope.printerModels.forEach(function (e, idx) {\r\n                if (e.modelTitle == $scope.settings.printerModel) {\r\n                    $scope.selected.selectedModel = e.modelTitle;\r\n                    return false;\r\n                }\r\n            });\r\n\r\n            $timeout(function () {\r\n                $('#printerWidth').trigger('refresh');\r\n                $('#printerModel').trigger('refresh');\r\n            }, 0);\r\n        };\r\n\r\n        $timeout(function () {\r\n            initSelects(function() {\r\n                var el = $(this);\r\n                if (el[0].id === 'printerModel-styler') {\r\n                    angular.forEach($scope.printerModels, function(l) {\r\n                        var p =\r\n                            \"<div class='width100'>\" +\r\n                            l.display +\r\n                            '</div>' +\r\n                            \"<div class='width100' style='font-size:12px'>\" +\r\n                            (!!l.modelNames ? l.modelNames.join(', ') : '&nbsp;') +\r\n                            '</div>';\r\n                        var ef = el.find('li.model-' + l.modelId);\r\n\r\n                        ef.html(p);\r\n                    });\r\n                }\r\n            });\r\n            $('.jq-selectbox__select-text').css('width', '100%');\r\n        }, 1000);\r\n\r\n\r\n        /* Payment SetUp */\r\n        $scope.customModalDlg2Caption = gettextCatalog.getString('Tyro payment system');\r\n        $scope.customModalDlg2Text = gettextCatalog.getString(\"Please perform the 'Authorise POS' function on your terminal.\");\r\n        $scope.customModalDlg2Buttons = $scope.customModalDlg2Buttons =\r\n            [{\r\n                name: gettextCatalog.getString('Cancel'),\r\n                value: 'cancel'\r\n            }];\r\n\r\n        $scope.callbackModal2 = function (code) {\r\n            switch (code) {\r\n                case 'cancel':\r\n                    cardPayService.cancelCurrentTransaction($scope, 'tyroReaderProvider');\r\n                    break;\r\n            }\r\n        };\r\n\r\n        $scope.pairTyro = function () {\r\n\r\n            helperService.showDialog('#customModalDlg2');\r\n            $.blockUI();\r\n\r\n            var promise = cardPayService.pair($scope, 'tyroReaderProvider');\r\n\r\n            promise.then(function (res) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#customModalDlg2');\r\n                helperService.showInfoDialog({\r\n                    title: $scope.customModalDlg2Caption,\r\n                    body: gettextCatalog.getString('Terminal has been successfully paired with Cin7 Core POS.')\r\n                });\r\n                $scope.printerModalMode = 'succ';\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#customModalDlg2');\r\n                errorService.showError(err.response.errorDescription);\r\n                $scope.printerModalMode = 'fail';\r\n            });\r\n        };\r\n\r\n        $scope.pairTriPOS = function () {\r\n            $.blockUI();\r\n\r\n            return cardPayService.pair($scope, 'triPOSReaderProvider', $scope.paymentSettings)\r\n                .then(function (res) {\r\n                    $.unblockUI();\r\n                    helperService.showInfoDialog({\r\n                        title: $scope.customModalDlg2Caption,\r\n                        body: gettextCatalog.getString('Terminal has been successfully paired with Cin7 Core POS.')\r\n                    });\r\n                    $scope.printerModalMode = 'succ';\r\n                })\r\n                .catch(function (err) {\r\n                    $.unblockUI();\r\n                    if (!!err.response && !!err.response.errorDescription)\r\n                        errorService.showError(err.response.errorDescription);\r\n                    else\r\n                        errorService.showError(err);\r\n                    $scope.printerModalMode = 'fail';\r\n                });\r\n        };\r\n\r\n        $scope.removePairTriPOS = function () {\r\n            $.blockUI();\r\n\r\n            return cardPayService.unpair($scope, 'triPOSReaderProvider', $scope.paymentSettings)\r\n                .then(function (res) {\r\n                    $.unblockUI();\r\n                    helperService.showInfoDialog({\r\n                        title: $scope.customModalDlg2Caption,\r\n                        body: gettextCatalog.getString('Terminal has been successfully disconnected from Cin7 Core POS.')\r\n                    });\r\n                    $scope.printerModalMode = 'succ';\r\n                })\r\n                .catch(function (err) {\r\n                    $.unblockUI();\r\n                    if (!!err.response && !!err.response.errorDescription)\r\n                        errorService.showError(err.response.errorDescription);\r\n                    else\r\n                        errorService.showError(err);\r\n                    $scope.printerModalMode = 'fail';\r\n                });\r\n        };\r\n\r\n        $scope.savePaymentSystem = function () {\r\n            const key = $scope.selectedPaymentSystem.key;\r\n            $scope.showPaymentSenseTerminal = false;\r\n\r\n            try {\r\n                if (!cardPayService.validate(key)) {\r\n                    return;\r\n                }\r\n            } catch (e) {\r\n                errorService.showError(e);\r\n                return;\r\n            }\r\n            $scope.paymentSettings.providerKey = key;\r\n\r\n            if ($scope.selectedPaymentSystem.key != 'tyroReaderProvider')\r\n                delete $scope.paymentSettings.printTyroReceiptOnTerminal;\r\n\r\n            if ($scope.selectedPaymentSystem.key != 'linklyPaymentReaderProvider')\r\n            {\r\n                delete $scope.paymentSettings.printLinklyPaymentReceiptOnTerminal;\r\n                delete $scope.paymentSettings.receiptsLinklyPaymentReceiptOnTerminal;\r\n                delete $scope.paymentSettings.linklyPaymentPairCode;\r\n                window.localStorage.removeItem('token');\r\n                window.localStorage.removeItem('secret');\r\n            }\r\n\r\n            if ($scope.selectedPaymentSystem.key != 'windcaveProvider') {\r\n                delete $scope.paymentSettings.printWindcaveReceipts;\r\n            }\r\n\r\n            $scope.paymentModalMode = 'succ';\r\n            $timeout(function(){\r\n                $(window).trigger('resize');\r\n            });  \r\n            configService.setCardPaymentSettings($scope.paymentSettings);\r\n        };\r\n\r\n        $scope.isConnectionReady = function() {\r\n            if ($scope.selectedPaymentSystem.key === 'paymentSenseReaderProvider') {\r\n                return !!$scope.paymentSettings.PaymentSenseTerminalID;\r\n            } else\r\n            if ($scope.selectedPaymentSystem.key === 'linklyPaymentReaderProvider') {\r\n                return configService.isLinklyPairWithTerminal\r\n            }\r\n\r\n            return true;\r\n        };\r\n\r\n        $scope.customModalDlg2Caption = gettextCatalog.getString('Linkly payment system');\r\n        $scope.customModalDlg2Text = gettextCatalog.getString(\"Please perform the 'Authorise POS' function on your terminal.\");\r\n        $scope.customModalDlg2Buttons = $scope.customModalDlg2Buttons =\r\n            [{\r\n                name: gettextCatalog.getString('Cancel'),\r\n                value: 'cancel'\r\n            }];\r\n\r\n        $scope.callbackModal2 = function (code) {\r\n            switch (code) {\r\n                case 'cancel':\r\n                    cardPayService.cancelCurrentTransaction($scope, 'linklyPaymentReaderProvider');\r\n                    break;\r\n            }\r\n        };\r\n\r\n        $scope.pairLinklyPayment = function () {\r\n\r\n            if (configService.isLinklyPairWithTerminal)\r\n                $scope.showLinklyPinPadPairingConfirmDialog();\r\n            else\r\n                $scope.pairLinklyPaymentSystem();\r\n        };\r\n\r\n        $scope.pairLinklyPaymentSystem = function () {\r\n\r\n            helperService.showDialog('#customModalDlg2');\r\n            $.blockUI();\r\n\r\n            var promise = cardPayService.pair($scope, 'linklyPaymentReaderProvider');\r\n\r\n            promise.then(function (res) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#customModalDlg2');\r\n                helperService.showInfoDialog({\r\n                    title: $scope.customModalDlg2Caption,\r\n                    body: gettextCatalog.getString('Terminal has been successfully paired with Cin7 Core POS.')\r\n                });\r\n                $scope.printerModalMode = 'success';\r\n                configService.isLinklyPairWithTerminal = true;\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                helperService.closeDialog('#customModalDlg2');\r\n                errorService.showError(err.response.errorDescription);\r\n                $scope.printerModalMode = 'failure';\r\n            });\r\n        };\r\n\r\n        $scope.removePairLinklyPayment = function () {\r\n            $.blockUI();\r\n\r\n            return cardPayService.unpair($scope, 'linklyPaymentReaderProvider', $scope.paymentSettings)\r\n                .then(function (res) {\r\n                    $.unblockUI();\r\n                    helperService.showInfoDialog({\r\n                        title: $scope.customModalDlg2Caption,\r\n                        body: gettextCatalog.getString('Terminal has been successfully disconnected from Cin7 Core POS.')\r\n                    });\r\n                    $scope.printerModalMode = 'success';\r\n                    delete $scope.paymentSettings.linklyPaymentPairCode;\r\n                    delete $scope.paymentSettings.printLinklyPaymentReceiptOnTerminal;\r\n                    delete $scope.paymentSettings.receiptsLinklyPaymentReceiptOnTerminal;\r\n                    configService.isLinklyPairWithTerminal = false;\r\n                })\r\n                .catch(function (err) {\r\n                    $.unblockUI();\r\n                    if (!!err.response && !!err.response.errorDescription)\r\n                        errorService.showError(err.response.errorDescription);\r\n                    else\r\n                        errorService.showError(err);\r\n                    $scope.printerModalMode = 'failure';\r\n                });\r\n        };\r\n\r\n        $scope.connectAnotherPaymentSystem = function () {\r\n            $scope.paymentModalMode = 'connect';\r\n            $timeout(function(){\r\n                $(window).trigger('resize');\r\n            });  \r\n        };\r\n        /* /Payment SetUp */\r\n\r\n        $scope.findPrintArea();\r\n        //$scope.findLabelPrintArea();\r\n\r\n        $scope.getFieldClass = function (ctrl, isInput) {\r\n            if (ctrl.$dirty) {\r\n                if (ctrl.$error.required)\r\n                    return isInput ? 'dp_form-control-danger form-control-danger' : 'has-danger dp_has-danger';\r\n                else\r\n                    return isInput ? 'dp_form-control-success form-control-success' : 'has-success dp_has-success';\r\n            }\r\n        };\r\n\r\n        $scope.resetPrinter = function () {\r\n            $scope.settings = {};\r\n            $scope.selectedArea = $scope.printArea[1];\r\n            $scope.selected.selectedSystem = $scope.printerSystems[0].value;\r\n            $scope.selected.selectedModel = '';\r\n            // $scope.printerSetup.$dirty = true;\r\n        };\r\n\r\n        $scope.printersList = [];\r\n        $scope.labelPrintersList = [];\r\n\r\n        $scope.discoverPrinter = function () {\r\n            $.blockUI();\r\n            printService.discoverAvailablePrinters($scope.selected.selectedSystem).then(function (res) {\r\n                // will assume that no more than one printer will be found\r\n                // so will get only first array item\r\n                console.log('Printers: ' + JSON.stringify(res));\r\n\r\n                $.unblockUI();\r\n                if (!res || res.length == 0) {\r\n                    errorService.showError(gettextCatalog.getString('No printer was found. Please try to specify the printer name manually.'));\r\n                }\r\n                else {\r\n                    $scope.printersList = res;\r\n\r\n                    if (res.length == 1) {\r\n                        $scope.setSelectedPrinter(res[0]);\r\n                    }\r\n                    else {\r\n                        // show select printer dialog\r\n                        helperService.showDialog('#selectPrinterFromListModalDlg');\r\n                    }\r\n                }\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n        $scope.discoverLabelPrinter = function () {\r\n            $.blockUI();\r\n            labelPrintService.discoverAvailableLabelPrinters($scope.selected.selectedSystem).then(function (res) {\r\n                // will assume that no more than one label printer will be found\r\n                // so will get only first array item\r\n                console.log('Label Printers: ' + JSON.stringify(res));\r\n\r\n                $.unblockUI();\r\n                if (!res || res.length == 0) {\r\n                    errorService.showError(gettextCatalog.getString('No label printer was found. Please try to specify the label printer name manually.'));\r\n                }\r\n                else {\r\n                    $scope.labelPrintersList = res;\r\n\r\n                    if (res.length == 1) {\r\n                        $scope.setSelectedLabelPrinter(res[0]);\r\n                    }\r\n                    else {\r\n                        // show select label printer dialog\r\n                        helperService.showDialog('#selectLabelPrinterFromListModalDlg');\r\n                    }\r\n                }\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n        $scope.save = function () {\r\n            if(($scope.selected.selectedSystem == 'star'\r\n            || $scope.selected.selectedSystem == 'epson') &&\r\n            !$scope.selected.selectedModel) {\r\n                errorService.showError('Please select printer model');\r\n                return;\r\n            }\r\n\r\n            $scope.printArea.forEach(function (e, idx) {\r\n                if (e.text == $scope.selectedArea.text) {\r\n                    $scope.selectedArea = {\r\n                        points: e.points,\r\n                        text: e.text,\r\n                        value: e.value\r\n                    };\r\n                    return false;\r\n                }\r\n            });\r\n\r\n            $scope.settings.printerWidthCode = $scope.selectedArea.value;\r\n            $scope.settings.printerWidthPoints = $scope.selectedArea.points;\r\n            $scope.settings.printSystem = $scope.selected.selectedSystem;\r\n            $scope.settings.printerModel = $scope.selected.selectedModel;\r\n\r\n            if ($scope.selected.selectedSystem == 'clover') {\r\n                $scope.settings.printerName = 'Station';\r\n                $scope.settings.printerModel = '';\r\n            }\r\n\r\n            configService.setPrinterSettings($scope.settings);\r\n\r\n            helperService.showInfoDialog({\r\n                title: '',\r\n                body: gettextCatalog.getString('Printer settings have been saved.')\r\n            }, function () {\r\n                printService.disconnect();\r\n            });\r\n            // $scope.printerModalMode = \"succ\";\r\n\r\n            var scope = angular.element('#formPrintSetup').scope();\r\n            scope.printerSetup.$setPristine();\r\n        };\r\n\r\n        $scope.testConnection = function () {\r\n            $.blockUI();\r\n            printService.checkPrinterConnection()\r\n                .then(function (res) {\r\n                    $.unblockUI();\r\n\r\n                    helperService.showInfoDialog({\r\n                        title: '',\r\n                        body: gettextCatalog.getString('Printer is found.')\r\n                    });\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        };\r\n\r\n        $scope.testLabelConnection = function () {\r\n            $.blockUI();\r\n            labelPrintService.checkLabelPrinterConnection()\r\n                .then(function (res) {\r\n                    $.unblockUI();\r\n\r\n                    helperService.showInfoDialog({\r\n                        title: '',\r\n                        body: gettextCatalog.getString('Label printer found.')\r\n                    });\r\n                })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n\r\n        };\r\n\r\n        $scope.printTest = function () {\r\n            $.blockUI();\r\n            printService.printTest()\r\n                .then(function (res) {\r\n                    $.unblockUI();\r\n                })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n        $scope.labelPrintTest = function () {\r\n            $.blockUI();\r\n            labelPrintService.labelPrintTest()\r\n                .then(function (res) {\r\n                    $.unblockUI();\r\n                })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n        // select form multiple attached printers dialog\r\n        $scope.setSelectedPrinter = function (row) {\r\n        //    $scope.printerSetup.$dirty = true;\r\n\r\n            angular.copy(row, $scope.settings);\r\n            // printAreaValue\r\n            $scope.findPrintArea();\r\n\r\n            helperService.showInfoDialog({\r\n                title: '',\r\n                body: gettextCatalog.getString('The printer has been successfully set.')\r\n            });\r\n        };\r\n\r\n        $scope.setSelectedLabelPrinter = function (row) {\r\n            $scope.labelPrinterSetup.$dirty = true;\r\n\r\n            angular.copy(row, $scope.settings);\r\n            // labelPrintAreaValue\r\n            //$scope.findLabelPrintArea();\r\n\r\n            helperService.showInfoDialog({\r\n                title: '',\r\n                body: gettextCatalog.getString('The label printer has been successfully set.')\r\n            });\r\n        };\r\n\r\n        $scope.scanModalMode = \"scan\";\r\n        \r\n        $scope.openScannerSetup = function () {\r\n            $scope.scanModalMode = \"scan\";\r\n            var $windowElement = $('#scannerSetupModal');\r\n            helperService.showDialog($windowElement, function() {\r\n                $('input, select').trigger('refresh');                \r\n            });\r\n        };\r\n\r\n        $scope.closeScannerSetup = function () {\r\n            $scope.scanModalMode = \"scan\";\r\n            $scope.scanValue = '';\r\n            var $windowElement = $('#scannerSetupModal');\r\n            helperService.closeDialog($windowElement);\r\n        };\r\n\r\n        $scope.scannerSettings = configService.getScannerSettings();\r\n\r\n        $scope.$watch('scannerSettings.enableSoftKbd',\r\n            function (newValue, oldValue) {\r\n                if (newValue !== oldValue) {\r\n                    configService.setScannerSettings($scope.scannerSettings);\r\n                }\r\n            }\r\n        );\r\n\r\n        $scope.$watch('scannerSettings.enableCameraScan',\r\n            function (newValue, oldValue) {\r\n                if (newValue !== oldValue) {\r\n                    configService.setScannerSettings($scope.scannerSettings);\r\n                }\r\n            }\r\n        );\r\n\r\n        $scope.$watch('printerModalMode',\r\n            function (newValue, oldValue) {\r\n                if (newValue !== oldValue) {\r\n                    $timeout(function(){\r\n                        $(window).trigger('resize');\r\n                    });                    \r\n                }\r\n            }\r\n        );\r\n\r\n        $scope.scanValue = '';\r\n        $scope.$on('scan.barcode', function (event, barcode) {\r\n            console.log('scan.barcode: ' + barcode);\r\n            $scope.scanValue = barcode;\r\n            $scope.scanModalMode = \"succ\";\r\n        });\r\n\r\n        $scope.scanAgain = function(){\r\n            $scope.scanModalMode = 'scan';\r\n            $scope.scanValue = '';\r\n        };\r\n\r\n        $scope.isScanAgainReady = function() {\r\n            return $scope.scanModalMode == 'scan';\r\n        };\r\n\r\n        $scope.openPaymentSetup = function () {\r\n\r\n            $scope.paymentModalMode = 'connect';\r\n            if ($scope.selectedPaymentSystem && $scope.selectedPaymentSystem.key && $scope.selectedPaymentSystem.key != 'emptyProvider') {\r\n                $scope.savePaymentSystem();\r\n            }\r\n\r\n            var $windowElement = $('#paymentSetupModal');\r\n            helperService.showDialog($windowElement);\r\n\r\n            $timeout(function () {\r\n                $('input, select').trigger('refresh');\r\n            }, 100);\r\n        };\r\n\r\n        $scope.closePaymentSetup = function () {\r\n            const paymentSettings = configService.getCardPaymentSettings();\r\n            const providerKey = paymentSettings && paymentSettings.providerKey ? paymentSettings.providerKey : null;\r\n            if (($scope.selectedPaymentSystem && $scope.selectedPaymentSystem.key && $scope.selectedPaymentSystem.key != 'emptyProvider') && $scope.isConnectionReady() && (providerKey == null || providerKey == 'emptyProvider')) {\r\n                $scope.showCardPaymentSetupConfirmDialog();\r\n            }\r\n            else {\r\n                const $windowElement = $('#paymentSetupModal');\r\n                helperService.closeDialog($windowElement);\r\n            }\r\n        };\r\n\r\n        $scope.secondScreenSettings = {};\r\n\r\n        $scope.opencustomerDisplaySetup = function () {\r\n            var enableAuto = localStorage.getItem('secondScreenEnableAuto') === 'true';\r\n            $scope.secondScreenSettings.enableAuto = enableAuto;\r\n            var $windowElement = $('#customerDisplaySetupModal');\r\n            helperService.showDialog($windowElement);\r\n        };\r\n\r\n        $scope.closeCustomerDisplaySetup = function () {\r\n            var $windowElement = $('#customerDisplaySetupModal');\r\n            helperService.closeDialog($windowElement);\r\n        };\r\n\r\n        $scope.saveCustomerDisplaySetup = function () {\r\n            localStorage.setItem('secondScreenEnableAuto', $scope.secondScreenSettings.enableAuto);\r\n            var $windowElement = $('#customerDisplaySetupModal');\r\n            helperService.closeDialog($windowElement);\r\n        };\r\n\r\n        $scope.openCustomerScreen = function() {\r\n            secondTerminalServiceWeb.openSecondScreenPage(); // promise\r\n        };\r\n\r\n        // if ($scope.settings.printerName != null)\r\n        //     $scope.printerModalMode = 'succ';\r\n        // else\r\n        //     $scope.printerModalMode = 'connect';\r\n\r\n        $scope.firstTimeOpenPrinterModal = true;\r\n\r\n        $scope.openPrinterSetup = function () {\r\n            $scope.printerModalMode = 'connect';\r\n            var $windowElement = $('#printerSetupModal');\r\n            helperService.showDialog($windowElement);\r\n            $timeout(function () {\r\n                $('input, select').trigger('refresh');\r\n            }, 100);\r\n\r\n            $timeout(function () {\r\n                if ($scope.firstTimeOpenPrinterModal) {\r\n                    $scope.firstTimeOpenPrinterModal = false;\r\n                }\r\n            }, 100);\r\n        };\r\n\r\n        $scope.closePrinterSetup = function () {\r\n            var $windowElement = $('#printerSetupModal');\r\n            helperService.closeDialog($windowElement);\r\n        };\r\n\r\n        $scope.connectAnotherPrinter = function () {\r\n            $scope.printerModalMode = 'connect';\r\n        };\r\n\r\n        $scope.paymentSenseTerminals = [];\r\n        $scope.showPaymentSenseTerminal = false;\r\n\r\n        $scope.showPaymentSenseTerminals = function () {\r\n            $.blockUI();\r\n            $scope.paymentSenseTerminals = [];\r\n\r\n            // this will return list of all available terminals to connect\r\n            return cardPayService.pair($scope, 'paymentSenseReaderProvider', $scope.paymentSettings)\r\n                .then(function (res) {\r\n                    $scope.paymentSenseTerminals = res.result.filter(function (t) {\r\n                        return t.status === \"AVAILABLE\";\r\n                    });\r\n\r\n                    $scope.showPaymentSenseTerminal = true;\r\n                    $.unblockUI();\r\n                })\r\n                .catch(function (err) {\r\n                    $scope.showPaymentSenseTerminal = false;\r\n                    $.unblockUI();\r\n                    if (!!err.response && !!err.response.errorDescription)\r\n                        errorService.showError(err.response.errorDescription);\r\n                    else\r\n                        errorService.showError(err);\r\n                })\r\n                .finally(function () {\r\n                    $timeout(function () {\r\n                        $('input, select').trigger('refresh');\r\n                    });\r\n                });\r\n        };        \r\n\r\n        $scope.showLinklyPinPadPairingConfirmDialog = function () {\r\n\r\n            var $windowElement = $('#linklyPinPadPairing');\r\n            helperService.showDialog($windowElement);\r\n        };\r\n\r\n        $scope.closeLinklyPinPadPairingConfirmDialog = function () {\r\n\r\n            var $windowElement = $('#linklyPinPadPairing');\r\n            helperService.closeDialog($windowElement);\r\n        };\r\n\r\n        $scope.showCardPaymentSetupConfirmDialog = function () {\r\n            $scope.messageBoxText = gettextCatalog.getString(\"The PIN pad has already been paired. Do you want to exit without connecting?\");\r\n            $scope.messageBoxYes = gettextCatalog.getString(\"Yes\");\r\n            $scope.messageBoxNo = gettextCatalog.getString(\"No\");\r\n            $scope.closeDiscardDialog = $scope.closeCardPaymentSetupConfirmDialog;\r\n\r\n            const $windowElement = $('#messageBoxModal');\r\n            helperService.showDialog($windowElement);\r\n        };\r\n\r\n        $scope.closeCardPaymentSetupConfirmDialog = function (showPaymentSetupModal) {\r\n            const $windowElement = $('#messageBoxModal');\r\n            helperService.closeDialog($windowElement);\r\n\r\n            if (!showPaymentSetupModal) {\r\n                const $windowElement = $('#paymentSetupModal');\r\n                helperService.closeDialog($windowElement);\r\n            }\r\n        };\r\n\r\n    }]);","angular.module(\"mainApp\").controller('sideBarController',\r\n    ['$scope', '$rootScope', '$location', 'constants', 'productsService',\r\n        'configService', 'loginService', '$uibModal', 'helperService', '$timeout', 'gettextCatalog',\r\n        'cacheService', 'saleService', 'remoteRequestProvider', 'liveSearchService', 'printService', 'errorService', 'dataChangeNotificationService', \r\n        'googleHelperService', \r\n        function ($scope, $rootScope, $location, constants, productsService,\r\n            configService, loginService, $uibModal, helperService, $timeout, gettextCatalog,\r\n            cacheService, saleService, remoteRequestProvider, liveSearchService, printService, errorService, dataChangeNotificationService, \r\n            googleHelperService) {\r\n\r\n            $scope.detailsVisibility = {\r\n                sales: false,\r\n                products: false,\r\n                product: false,\r\n                customers: false,\r\n                users: false,\r\n                setup: false,\r\n                session: false,\r\n                inventory: false,\r\n                reports: false\r\n            };\r\n\r\n            $scope.isAndroid = buildConfiguration.platform === 'android';\r\n\r\n\r\n            $scope.getUserImageUrl = function () {\r\n                if (configService.userImageID) {\r\n                    var url = configService.baseImageURL + '?ID=' + configService.userImageID;\r\n                    url += '&width=' + 60 + '&height=' + 60;\r\n                    return url;\r\n                } else\r\n                    return null;\r\n\r\n            };\r\n\r\n            function updateUserImageSrc() {\r\n                $rootScope.$broadcast('image.src.update', {\r\n                });\r\n            }\r\n\r\n            $scope.isQA = function () {\r\n                return configService.isQAMode;\r\n            };\r\n\r\n            $scope.allowManagerAndOnline = function () {\r\n                return configService.isManagerAndHigherAndConnected();\r\n            };\r\n\r\n            $scope.constSessionSectionName = constants.constSessionSectionName;\r\n            $scope.constSessionViewName = constants.constSessionViewName;\r\n\r\n            $scope.constInventorySectionName = constants.constInventorySectionName;\r\n            $scope.constInventoryViewName = constants.constInventoryViewName;\r\n\r\n            $scope.constReportsSectionName = constants.constReportsSectionName;\r\n            $scope.constReportsViewName = constants.constReportsViewName;\r\n\r\n            $scope.constSellSectionName = constants.constSellSectionName;\r\n            $scope.constSellViewName = constants.constSellViewName;\r\n            $scope.constOfflineSalesViewName = constants.constOfflineSalesViewName;\r\n            $scope.constSalesHistoryViewName = constants.constSalesHistoryViewName;\r\n            $scope.constDeliveryViewName = constants.constDeliveryViewName;\r\n            $scope.constSalesParkedViewName = constants.constSalesParkedViewName;\r\n            $scope.constClickAndCollectViewName = constants.constClickAndCollectViewName;\r\n\r\n\r\n            $scope.constProductsSectionName = constants.constProductsSectionName;\r\n            $scope.constProductsViewName = constants.constProductsViewName;\r\n\r\n            $scope.constHomeSectionName = constants.constHomeSectionName;\r\n            $scope.constHomeViewName = constants.constHomeViewName;\r\n\r\n            $scope.constCustomersSectionName = constants.constCustomersSectionName;\r\n            $scope.constCustomersViewName = constants.constCustomersViewName;\r\n\r\n            $scope.constUsersSectionName = constants.constUsersSectionName;\r\n            $scope.constUserManagementViewName = constants.constUserManagementViewName;\r\n\r\n            $scope.constDashboardSectionName = constants.constDashboardSectionName;\r\n            $scope.constDashboardViewName = constants.constDashboardViewName;\r\n\r\n            $scope.constProductSectionName = constants.constProductSectionName;\r\n            $scope.constProductManagementViewName = constants.constProductManagementViewName;\r\n\r\n            $scope.constSetupViewName = constants.constSetupViewName;\r\n\r\n            $scope.constSetupSectionName = constants.constSetupSectionName;\r\n            $scope.constPrinterSetupViewName = constants.constPrinterSetupViewName;\r\n            $scope.constLabelPrinterSetupViewName = constants.constLabelPrinterSetupViewName;\r\n            $scope.currentSection = constants.constHomeSectionName;\r\n\r\n            $scope.selectedMenuOption = null;\r\n            $scope.selectedMenuOptionMobile = null;\r\n\r\n            $scope.isSite = configService.isSite;\r\n            $scope.canSeeDashboard = function () {\r\n                return configService.canSeeDashboard;\r\n            };\r\n            \r\n            $scope.showDetailsPanel = false;\r\n            $scope.hideHomeAndProducts = true;\r\n\r\n            $scope.isScanSetupVisible = true;//buildConfiguration.platform == 'ios';\r\n\r\n            $scope.appVersion = buildConfiguration.appVersion;\r\n\r\n            $scope.goHome = function () {\r\n                $location.path('/home');\r\n            }\r\n\r\n            $scope.currentUser = null;\r\n            $scope.currentPosName = null;\r\n            $scope.currentRoleName = null;\r\n            $scope.currentOutlet = null;\r\n            $scope.currentRegister = null;\r\n\r\n            $scope.$on('header.setUserInfo', function (event, data) {\r\n\r\n                $scope.currentUser = data.currentUser;\r\n                $scope.currentPosName = data.currentPosName;\r\n                $scope.currentRoleName = data.currentRoleName;\r\n                $scope.currentUserId = data.currentUserId;\r\n                $timeout(function () {\r\n                    updateUserImageSrc();\r\n                }, 100);\r\n            });\r\n\r\n            $scope.$on('header.setOutletInfo', function (event, data) {\r\n                $scope.currentOutlet = data.outletName;\r\n                $scope.currentRegister = data.registryName;\r\n            });\r\n\r\n            $scope.isOnline = configService.isOnline;\r\n\r\n            $scope.canManageUsers = false;\r\n            $scope.canDelivery = false;\r\n            $scope.canSale = false;\r\n\r\n            loginService.setAfterLoginCallbacks(setRights);\r\n\r\n            function setRights() {\r\n                $scope.canManageUsers = configService.role !== 'Сashier';\r\n                $scope.canDelivery = configService.canSeeAllScheduledDeliveries === true;\r\n                $scope.canSale = true;\r\n            }\r\n\r\n            $scope.mobileTrigger = true;\r\n\r\n            $scope.showDetails = function (secName, force) {\r\n                $scope.mobileTrigger = !$scope.mobileTrigger;\r\n\r\n                Object.getOwnPropertyNames($scope.detailsVisibility).filter(\r\n                    function (val) {\r\n                        return val != secName;\r\n                    }).forEach(\r\n                        function (val) {\r\n                            $scope.detailsVisibility[val] = false;\r\n                        });\r\n\r\n                if ($scope.isVisible) {\r\n                    const previousSection = $scope.currentSection;\r\n                    if (!force && $scope.detailsVisibility.hasOwnProperty(secName)) {\r\n                        $scope.showDetailsPanel = true;\r\n                        $scope.detailsVisibility[secName] = $scope.showDetailsPanel;\r\n                        $scope.currentSection = secName;\r\n                        $scope.selectedMenuOption = secName;\r\n                        $scope.selectedMenuOptionMobile = secName;\r\n\r\n                        $timeout(function () {\r\n                            $('#subNavScrollWrapper').trigger('element.shown');\r\n                        });\r\n                    }\r\n                    else {\r\n                        $scope.showDetailsPanel = false;\r\n                        $scope.currentSection = constants.constHomeSectionName;\r\n                        $scope.selectedMenuOption = constants.constHomeSectionName;\r\n                        $scope.selectedMenuOptionMobile = constants.constHomeSectionName;\r\n                    }\r\n\r\n                    if ($scope.mobileTrigger === true && previousSection == secName) {\r\n                        $scope.showDetailsPanel = false;\r\n                        $scope.currentSection = constants.constHomeSectionName;\r\n                        $scope.selectedMenuOption = constants.constHomeSectionName;\r\n                        $scope.selectedMenuOptionMobile = constants.constHomeSectionName;\r\n                    }\r\n                }\r\n            };\r\n\r\n            $scope.isVisible = false;\r\n\r\n            $scope.openWMS = function () {\r\n                var SCOPE = $scope;\r\n                $.blockUI();\r\n                printService.disconnect()\r\n                    .finally(function () {\r\n                        $.unblockUI();\r\n                        \r\n                        const isQA = SCOPE.isQA();\r\n                        const scheme = isQA ? 'dearwmsqa://' : 'dearwms://';\r\n                        const packName = isQA ? 'dear.wms.qa' : 'dear.wms';\r\n\r\n                        window.plugins.starPrinter.externalAppCall({\r\n                            appName: 'crdwms',\r\n                            packageName: packName,\r\n                            url: scheme\r\n                        }, function (error, success) {\r\n                            if (error) {\r\n                                SCOPE.$apply(function () {\r\n                                    wmsApplicationNotAvailableDialog();\r\n                                    printService.connect();\r\n                                });\r\n                            }\r\n                        });\r\n                    });\r\n            };\r\n\r\n            $scope.$on('sideBar.toggle', function (event) {\r\n                if ($scope.isVisible)\r\n                    $scope.hideDetails();\r\n                else\r\n                    $scope.selectedMenuOption = null;\r\n                    $scope.selectedMenuOptionMobile = null;\r\n\r\n                $scope.isVisible = $scope.isVisible === true ? false : true;\r\n\r\n                $timeout(function () {\r\n                    //$('#navScrollWrapper').trigger('element.shown');\r\n                });\r\n            });\r\n\r\n            $scope.$on('sideBar.hideDetails', function (event, data) {\r\n                $scope.isVisible = false;\r\n                $scope.hideDetails(data);\r\n            });\r\n\r\n            $scope.hideSideBar = function () {\r\n                if ($scope.isVisible) {\r\n                    $scope.hideDetails('', true);\r\n\r\n                    $scope.isVisible = false;\r\n                }\r\n\r\n                $scope.removeQueryparam();\r\n\r\n                return true;\r\n            };\r\n\r\n            $scope.removeQueryparam = function() {\r\n                $location.search('isSuccessMessage', null)\r\n            };\r\n            \r\n            $scope.clickOutside = function (e) {\r\n                if ($(e.target).attr('id') === 'idSideBar') {\r\n                    $scope.hideSideBar();\r\n                }\r\n            }\r\n\r\n            $scope.hideDetails = function (data, force) {\r\n                var curSec = (!!data && !!data.sectionName) ? data.sectionName : $scope.currentSection;\r\n                $scope.showDetails('', force);\r\n                $scope.currentSection = curSec;\r\n            };\r\n\r\n            $scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n                $scope.isOnline = object;\r\n                var path = $location.path();\r\n                console.log(\"homec: ConnectionStateChanged: \" + path);\r\n\r\n                if (!!path && path !== '/sell' && path !== '/salesparked' && path !== '/home' &&\r\n                    path !== '/opencloseregistry' && path !== '/cashManagement'\r\n                    && path !== '/offlinesales' && object === false) {\r\n                    pageNotAvailableDialog();\r\n                } else {\r\n                    $scope.closePageNotAvailableDialog();\r\n                }\r\n\r\n            });\r\n\r\n            function pageNotAvailableDialog() {\r\n                var $windowElement = $('#pageNotAvailablePartial');\r\n                helperService.showDialog($windowElement);\r\n            }\r\n\r\n            $scope.closePageNotAvailableDialog = function () {\r\n                var $windowElement = $('#pageNotAvailablePartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.sellOffline = function () {\r\n                window.localStorage.setItem('continueSale', null);\r\n                $location.path('/sell');\r\n            };\r\n\r\n\r\n            function wmsApplicationNotAvailableDialog() {\r\n                var $windowElement = $('#wmsApplicationNotAvailablePartial');\r\n                var qa = $scope.isQA() ? 'QA' : '';\r\n                var msg = gettextCatalog.getString(\"Warehouse Management System {{qa}} application is not available\", { qa: qa });\r\n                $('#wmsAvailabeID').html();\r\n                helperService.showDialog($windowElement);\r\n            }\r\n\r\n            $scope.closeWMSApplicationNotAvailableDialog = function () {\r\n                var $windowElement = $('#wmsApplicationNotAvailablePartial');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            $scope.getWMS = function () {\r\n                var appName = $scope.isQA() ? 'Cin7 Core WMS QA' : 'Cin7 Core WMS';\r\n                var link = $scope.isQA() ? buildConfiguration.WMSApplicationLink : 'dear.wms';\r\n                var url = constants.playStoreAppLink + link;\r\n\r\n                if (buildConfiguration.platform == 'ios') {\r\n                    link = $scope.isQA() ? buildConfiguration.WMSApplicationLinkIOS : 'cin7-core-wms/id1463374716';\r\n                    url = constants.appleStoreAppLink + link;\r\n                }\r\n\r\n                var SCOPE = $scope;\r\n                window.plugins.starPrinter.externalAppCall({ appName: \"crdwms\", url: url, activityForResult: true }, function (error, success) {\r\n                    SCOPE.$apply(function () {\r\n                        if (error !== \"Payment failed\") {\r\n                            var msg = gettextCatalog.getString(\"Some things went wrong, please download {{app}} application from store manually\", { app: appName });\r\n                            errorService.showError(msg);\r\n                        }\r\n                    });\r\n                });\r\n            }\r\n\r\n\r\n            $scope.$on('changeLanguage', function (event) {\r\n                var newLanguageObj = constants.UpdateLanguageFunction();\r\n                $scope.constSellViewName = newLanguageObj.constSellViewName;\r\n                $scope.constOfflineSalesViewName = newLanguageObj.constOfflineSalesViewName;\r\n                $scope.constSalesHistoryViewName = newLanguageObj.constSalesHistoryViewName;\r\n                $scope.constDeliveryViewName = newLanguageObj.constDeliveryViewName;\r\n                $scope.constSalesParkedViewName = newLanguageObj.constSalesParkedViewName;\r\n                $scope.constClickAndCollectViewName = newLanguageObj.constClickAndCollectViewName;\r\n                $scope.constProductsViewName = newLanguageObj.constProductsViewName;\r\n                $scope.constHomeViewName = newLanguageObj.constHomeViewName;\r\n                $scope.constCustomersViewName = newLanguageObj.constCustomersViewName;\r\n                $scope.constUserManagementViewName = newLanguageObj.constUserManagementViewName;\r\n                $scope.constDashboardViewName = newLanguageObj.constDashboardViewName;\r\n                $scope.constProductManagementViewName = newLanguageObj.constProductManagementViewName;\r\n                $scope.constSetupViewName = newLanguageObj.constSetupViewName;\r\n                $scope.constPrinterSetupViewName = newLanguageObj.constPrinterSetupViewName;\r\n                $scope.constLabelPrinterSetupViewName = newLanguageObj.constLabelPrinterSetupViewName;\r\n            });\r\n\r\n            $scope.reloadAll = function (stayAtPage) {\r\n                $scope.hideSideBar();\r\n                $.blockUI();\r\n                loginService.loadAll(dataChangeNotificationService)\r\n                    .then(function () {\r\n                        if (configService.isMobile) {\r\n                            cacheService.clearCache();\r\n                        }\r\n                        if (stayAtPage===false) {\r\n                            helperService.showInfoDialog({\r\n                                title: '',\r\n                                body: gettextCatalog.getString('All application data has been successfully updated!')\r\n                            }, function () {\r\n                                $timeout(function () {\r\n                                    window.localStorage.setItem('continueSale', null);\r\n                                    $location.path('/sell');\r\n                                    $rootScope.$broadcast('products.reloaded');\r\n                                }, 0);\r\n                            });\r\n                        }\r\n                    })\r\n                    .finally(function () { $.unblockUI(); });\r\n            };\r\n\r\n            //$scope.reloadProducts = function (stayAtPage) {\r\n            //    $scope.hideSideBar();\r\n            //    $.blockUI();\r\n            //    productsService.loadProducts('force')\r\n            //    .then(function () {\r\n            //        return productsService.getGiftCardSettings();\r\n            //    })\r\n            //    .then(function () {\r\n            //        return saleService.getPosDiscounts()\r\n            //            .then(function () {\r\n            //            if (configService.isMobile) {\r\n            //                cacheService.clearCache();\r\n            //            }\r\n            //            if (!stayAtPage) {\r\n            //                helperService.showInfoDialog({\r\n            //                    title: '',\r\n            //                    body: gettextCatalog.getString('Product list has been successfully updated!')\r\n            //                }, function () {\r\n            //                    $timeout(function () {\r\n            //                        window.localStorage.setItem('continueSale', null);\r\n            //                        $location.path('/sell');\r\n            //                    }, 0);\r\n            //                });\r\n            //            }                \r\n            //        });\r\n            //    }).finally(function () { $.unblockUI(); });\r\n            //};\r\n\r\n            $scope.changeLanguage = function () {\r\n                $scope.hideSideBar();\r\n                $rootScope.$broadcast('header.changeLanguage');\r\n            };\r\n\r\n            $scope.logoff = function () {\r\n                $scope.hideSideBar();\r\n                $rootScope.$broadcast('header.logoff');\r\n\r\n                googleHelperService.logout();\r\n\r\n            };\r\n\r\n            $scope.changeOutlet = function () {\r\n                $scope.hideSideBar();\r\n                $rootScope.$broadcast('header.changeOutlet');\r\n            };\r\n\r\n            $scope.blockScreen = function () {\r\n                //$.blockUI();\r\n                return true;\r\n            };\r\n\r\n            $scope.isOldBrowser = function () {\r\n                return configService.isSite && !window.isSupported;\r\n            };\r\n\r\n            $scope.$on('sideBar.reloadProducts', function (event, object) {\r\n                if (configService.isSite && $scope.isOldBrowser()) {\r\n                    remoteRequestProvider.getLiveSearchProducs()\r\n                        .then(function (data) {\r\n                            return liveSearchService.fillData(data.Products);\r\n                        });\r\n                }\r\n                else\r\n                    $scope.reloadAll(true);\r\n                //            $scope.reloadProducts(true);\r\n            });\r\n\r\n        }]);\r\n","import badSound from  '../PosContent/badSound.mp3';\r\nimport goodSound from '../PosContent/goodSound.mp3';\r\n\r\nangular.module('services').factory('soundService',\r\n    ['$q',\r\n        function ($q) {\r\n\r\n            var soundService = {};\r\n            var goodAudio = new Audio(goodSound);\r\n            var badAudio = new Audio(badSound);\r\n\r\n            function isAndroid() {\r\n                return window.device && device.platform && device.platform.toLowerCase() === 'android';\r\n            }\r\n\r\n            function canPlayOnCurrentDevice() {\r\n                var deferred = $q.defer();\r\n\r\n                if (!window.cordova || !cordova.exec || !isAndroid()) {\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                }\r\n\r\n                try {\r\n                    cordova.exec(\r\n                        function (result) {\r\n                            deferred.resolve(result && result.canPlaySound === true);\r\n                        },\r\n                        function () {\r\n                            deferred.resolve(true);\r\n                        },\r\n                        'AudioMode',\r\n                        'canPlaySound',\r\n                        []\r\n                    );\r\n                } catch (e) {\r\n                    deferred.resolve(true);\r\n                }\r\n\r\n                return deferred.promise;\r\n            }\r\n\r\n            function resetAndPlay(audio) {\r\n                var deferred = $q.defer();\r\n\r\n                try {\r\n                    audio.pause();\r\n                    audio.currentTime = 0;\r\n\r\n                    var playPromise = audio.play();\r\n\r\n                    if (playPromise && angular.isFunction(playPromise.then)) {\r\n                        playPromise.then(function () {\r\n                            deferred.resolve(null);\r\n                        }).catch(function () {\r\n                            deferred.resolve(null);\r\n                        });\r\n                    } else {\r\n                        deferred.resolve(null);\r\n                    }\r\n\r\n                } catch (e) {\r\n                    deferred.resolve(null);\r\n                }\r\n\r\n                return deferred.promise;\r\n            }\r\n\r\n            function playSound(audio) {\r\n\r\n                return canPlayOnCurrentDevice()\r\n                    .then(function (canPlay) {\r\n\r\n                        if (!canPlay) {\r\n                            return null;\r\n                        }\r\n\r\n                        return resetAndPlay(audio);\r\n                    })\r\n                    .catch(function () {\r\n                        return null;\r\n                    });\r\n            }\r\n\r\n            soundService.playGood = function () {\r\n                return playSound(goodAudio);\r\n            };\r\n\r\n            soundService.playBad = function () {\r\n                return playSound(badAudio);\r\n            };\r\n\r\n            return soundService;\r\n        }\r\n    ]);","angular.module('services').service('squareReaderProvider',\r\n    ['$q', 'configService', 'gettextCatalog', 'webOnlyProvider','uuid2', \r\n        function ($q, configService, gettextCatalog, webOnlyProvider, uuid2) {\r\n\r\n            this.appID = buildConfiguration.squareApplicationId;\r\n            this.backDeferred = null;\r\n            const schemes = buildConfiguration.CFBundleURLSchemes;\r\n            this.squareURLSchema = Array.isArray(schemes)\r\n                    ? schemes.find(x => x.startsWith(\"square\")) ?? null\r\n                    : schemes ?? null;\r\n\r\n            this.makePayment = function (options) {\r\n\r\n                var deferred = $q.defer();\r\n\r\n                var opts = {\r\n                    applicationId: this.appID,\r\n                    currency: options.currency,\r\n                    metadata: options.metadata,\r\n                    tenders: ['CARD'],\r\n                    locationId: configService.lastSquareLocationID,\r\n                    schema: this.squareURLSchema\r\n                };\r\n\r\n                if (!configService.lastSquareLocationID) {\r\n                    deferred.reject({\r\n                        result: false, response: {\r\n                            errorDescription: gettextCatalog.getString(\"The payment cannot be processed. The 'Square integration to process' parameter isn't set for the outlet on the POS setup page or you need to reset the outlet.\")\r\n                        }\r\n                    });\r\n\r\n                    return deferred.promise;\r\n                }\r\n\r\n                if (!this.squareURLSchema) {\r\n                    deferred.reject({\r\n                        result: false, response: {\r\n                            errorDescription: gettextCatalog.getString(\"The payment cannot be processed. Square URL scheme is not configured for this app build.\")\r\n                        }\r\n                    });\r\n\r\n                    return deferred.promise;\r\n                }\r\n\r\n                // sum should be in cents\r\n                cordova.square.requestCharge(options.amount * 100, opts,\r\n                   function (res) {\r\n                       console.log('successfully payed: ' + res);\r\n                       deferred.resolve({\r\n                           result: true, response: {\r\n                               ClientTransactionID: res.clientTransactionId,\r\n                               ServerTransactionID: res.serverTransactionId,\r\n                               squareIntegrationID: configService.lastSquareIntegrationID,\r\n                               squareLocationID: configService.lastSquareLocationID\r\n                           }\r\n                       });\r\n                   },\r\n                    function (err) {\r\n                        console.log('erroneously payed: ');\r\n                        console.log(err);\r\n                        deferred.reject({ result: false, response: err, message: typeof err === 'string' ? err : undefined });\r\n                    })\r\n\r\n                return deferred.promise;\r\n            }\r\n\r\n            this.refund = function (el, refundSum) {\r\n                var deferred = $q.defer();\r\n\r\n                // call here square.\r\n                webOnlyProvider.squareRefund(el.squareIntegrationID,\r\n                                                    el.ServerTransactionID,\r\n                                                    !el.ServerTransactionID ? el.ClientTransactionID : null,\r\n                                                    el.Date, 'refund via Cin7 Core POS',\r\n                                                    refundSum,\r\n                                                    el.Amount,\r\n                                                    uuid2.newguid()\r\n                                                    )\r\n            .success(function (res) {\r\n                deferred.resolve({\r\n                    ServerTransactionID: el.ServerTransactionID,\r\n                    ClientTransactionID: el.ClientTransactionID,\r\n                    amount: refundSum,\r\n                    result:true\r\n                });\r\n            })\r\n            .error(function (err) {\r\n                var message=null;\r\n                if (!!err && err.length > 0) {\r\n                    \r\n                    if (!!err[0].Exception) {\r\n                        try{\r\n                            var obj = JSON.parse(err[0].Exception);\r\n                            message = obj.message;\r\n                        }\r\n                        catch (ex) {\r\n                            message = err[0].Exception;\r\n                        }\r\n                    }\r\n                }\r\n                deferred.resolve({\r\n                    amount: refundSum,\r\n                    result: false,\r\n                    message: message\r\n                }); // in error case enlarge rest sum. It will be appended to user account\r\n            });\r\n\r\n                return deferred.promise;\r\n            };\r\n\r\n        }]);","angular.module(\"mainApp\").controller('stockFamilyProductMatrixController',\r\n    ['$scope', '$rootScope', 'loginService', 'gettextCatalog', 'stockOrderingService',\r\n     'helperService', '$timeout', 'configService', 'errorService', '$q', \r\n     'printService','uuid2', 'productsService', '$filter',\r\n     function ($scope, $rootScope, loginService, gettextCatalog, stockOrderingService,\r\n               helperService, $timeout, configService, errorService,\r\n               soundService, $q, printService, uuid2, stockTakeService, $filter) {\r\n\r\n                $scope.QuantityPropName = 'OrderedQuantity';\r\n                $scope.type = 'transfer';\r\n\r\n                $scope.avaivedProducts = [];\r\n                $scope.options = {};\r\n                $scope.familyID = {};\r\n                $scope.familyName = {};\r\n                $scope.firstFormShow = true;     \r\n                $scope.baseOptionChange = function () { }; \r\n                $scope.hideBaseGridLine = false;\r\n\r\n                $scope.baseOption = '';\r\n                $scope.baseOptionValue = '';\r\n                $scope.gridColumnsCount = 2;\r\n                $scope.gridColumnsSizePercent = 50;\r\n\r\n                $scope.productFamily = {};\r\n                $scope.variationGrid = [];\r\n                $scope.isDlgVisible = false;\r\n                $scope.isEditable = true;\r\n                $scope.productFamilyOptions = [];\r\n\r\n                $scope.firstDlgShow = true;\r\n                $scope.firstInitSelects = true;\r\n                $scope.isMobile = configService.isMobile;\r\n\r\n                var multiplier = window.innerHeight > window.innerWidth ? 0.6 : 0.4;\r\n                $scope.fcss = { 'height': window.innerHeight * multiplier + 'px' };\r\n\r\n                $scope.$on(\"stockFamilyMatrix.show\", function(event, data) {\r\n                    $scope.productFamily = {};\r\n                    \r\n                    $scope.availableProducts = data.availableProducts;\r\n                    $scope.selectedProducts = data.selectedProducts;\r\n                    $scope.familyID = data.familyID;\r\n                    $scope.familyName = data.familyName;\r\n                    $scope.options = data.options;\r\n                    $scope.isEditable = data.isEditable;\r\n                    $scope.fromLocationName = data.fromLocationName;\r\n                    $scope.toLocationName = data.toLocationName;\r\n\r\n                    if(data.fromLocationName){\r\n                        $scope.QuantityPropName = 'OrderedQuantity';\r\n                        $scope.type = 'transfer';\r\n                    } else {\r\n                        $scope.QuantityPropName = 'Quantity';\r\n                        $scope.type = 'purchase';\r\n                    }\r\n\r\n                                        \r\n\r\n                    $scope.evaluateProductFamily();\r\n\r\n                    $scope.showMatrixDlg();\r\n                });\r\n\r\n                $scope.evaluateProductFamily = function() {\r\n                    var option1ValuesDistinct = [];\r\n                    var option2ValuesDistinct = [];\r\n                    var option3ValuesDistinct = [];\r\n\r\n                    var option1Values = [];\r\n                    var option2Values = [];\r\n                    var option3Values = [];\r\n\r\n                    var option1 = $scope.availableProducts[0].Option1Name;\r\n                    var option2 = $scope.availableProducts[0].Option2Name;\r\n                    var option3 = $scope.availableProducts[0].Option3Name;\r\n                    var available = [];\r\n                    var index = 0;\r\n                    var comments = \"\";\r\n                    angular.forEach($scope.availableProducts, function(item) {\r\n                        if(item.Option1 && option1ValuesDistinct.indexOf(item.Option1) < 0) {\r\n                            option1ValuesDistinct.push(item.Option1);\r\n                        }\r\n\r\n                        if(item.Option2 && option2ValuesDistinct.indexOf(item.Option2) < 0) {\r\n                            option2ValuesDistinct.push(item.Option2);\r\n                        }\r\n\r\n                        if(item.Option3 && option3ValuesDistinct.indexOf(item.Option3) < 0) {\r\n                            option3ValuesDistinct.push(item.Option3);\r\n                        }\r\n                        var selectedItem;\r\n                        var selectedItems = $scope.selectedProducts.filter(function(s) {return s.ProductID === item.ProductID;});\r\n                        if(selectedItems.length === 1){\r\n                            selectedItem = selectedItems[0];\r\n                        }\r\n\r\n                        if(selectedItem && (selectedItem.Comments || selectedItem.Comment)){\r\n                            comments = selectedItem.Comments || selectedItem.Comment;\r\n                        }\r\n                        var availableItem = angular.copy(item);\r\n                        availableItem.Index = index;\r\n                        availableItem.QuantityOnHand = item.OnHand;\r\n                        availableItem.QuantityAvailable = item.Available;\r\n                        if($scope.type === 'purchase') {\r\n                            availableItem.Price = item.Price;\r\n                        }\r\n                        index++;\r\n                        if(selectedItem){\r\n                            availableItem[$scope.QuantityPropName] = +selectedItem[$scope.QuantityPropName];\r\n                            availableItem.Comments = selectedItem.Comments;\r\n                            availableItem.Comment = selectedItem.Comment;\r\n                            availableItem.Available = selectedItem.QuantityAvailable;\r\n                            if($scope.type === 'purchase') {\r\n                                availableItem.Price = selectedItem.Price;\r\n                            }\r\n                        } else {\r\n                            availableItem[$scope.QuantityPropName] = null;\r\n                            availableItem.Comments = '';\r\n                            availableItem.Comment = '';\r\n                        }\r\n\r\n                        available.push(availableItem);\r\n                    });\r\n\r\n                    angular.forEach($scope.options.Option1Values, function(opt) {\r\n                        if(option1ValuesDistinct.filter(function(it) {return it === opt;}).length > 0){\r\n                            option1Values.push(opt);\r\n                        }\r\n                    });\r\n                    angular.forEach($scope.options.Option2Values, function(opt) {\r\n                        if(option2ValuesDistinct.filter(function(it) {return it === opt;}).length > 0){\r\n                            option2Values.push(opt);\r\n                        }\r\n                    });\r\n                    angular.forEach($scope.options.Option3Values, function(opt) {\r\n                        if(option3ValuesDistinct.filter(function(it) {return it === opt;}).length > 0){\r\n                            option3Values.push(opt);\r\n                        }\r\n                    });\r\n\r\n                    $scope.productFamily = {\r\n                        Options: {\r\n                            Option1: option1,\r\n                            Option1Values: option1Values,\r\n                            Option2: option2,\r\n                            Option2Values: option2Values,\r\n                            Option3: option3,\r\n                            Option3Values: option3Values\r\n                        },\r\n                        Available: available\r\n                    };\r\n                    $scope.qty.comments = comments;\r\n                    $scope.baseOption = option1;\r\n                    $scope.baseOptionChange($scope.baseOption);\r\n\r\n                    $timeout(function () {\r\n                        initSelects();\r\n                        $('input, select').trigger('refresh');\r\n                    });\r\n                };\r\n\r\n                $scope.$on('view.loaded', function (evt) {       \r\n                    $timeout(function () {\r\n                        $('input, select').trigger('refresh');\r\n                    });\r\n                });\r\n                $scope.showSetQty = function(col) {\r\n                    if($scope.isEditable) {\r\n                        $scope.quantityObject = {\r\n                            value: $scope.productFamily.Available.filter(function(i) {return i.Index === col.Index;})[0][$scope.QuantityPropName],\r\n                            Index: col.Index,\r\n                            Available: col.Available,\r\n                            OnOrder: col.OnOrder,\r\n                            infoText: $scope.fromLocationName ? (\"Available at \" + $scope.fromLocationName + \": \" \r\n                            + col.Available \r\n                            + \", On Order at \" + $scope.toLocationName + \": \" + col.OnOrder) : (\"Available: \" + \r\n                            + col.Available + \", On Order: \" + col.OnOrder)\r\n                        };\r\n                        $scope.showItemQuantityDlg('qty-' + col.ProductID);\r\n                    }\r\n                    return;\r\n                };\r\n\r\n                $scope.showMatrixDlg = function() {\r\n                    helperService.showDialog('#stockMatrixDlg', function () {\r\n                        if ($scope.firstDlgShow) {\r\n                            $scope.firstDlgShow = false;\r\n                            $('.stockFamilyMatrixWrapper').show();\r\n                        }\r\n                        $scope.isDlgVisible = true;\r\n                    });\r\n                };\r\n\r\n                $scope.hasOption2 = function () {\r\n                    if (typeof $scope.productFamily.Options.Option2 !== 'undefined' &&\r\n                        $scope.productFamily.Options.Option2 !== null &&\r\n                        $scope.productFamily.Options.Option2 !== '' &&\r\n                        $scope.productFamily.Options.Option2Values && $scope.productFamily.Options.Option2Values.length > 0) return true;\r\n                    return false;\r\n                };\r\n\r\n                $scope.hasOption3 = function () {\r\n                    if (typeof $scope.productFamily.Options.Option3 !== 'undefined' &&\r\n                        $scope.productFamily.Options.Option3 !== null &&\r\n                        $scope.productFamily.Options.Option3 !== ''\r\n                    && $scope.productFamily.Options.Option3Values && $scope.productFamily.Options.Option3Values.length > 0) return true;\r\n                    return false;\r\n                };\r\n\r\n                $scope.updateGrid = function () {\r\n                    var optionsCount = 1;\r\n                    var obaseNum = 1;\r\n                    $scope.variationGrid = [];\r\n            \r\n                    if (typeof $scope.productFamily.Options.Option2 !== 'undefined' &&\r\n                        $scope.productFamily.Options.Option2 !== null &&\r\n                        $scope.productFamily.Options.Option2 !== ''&&\r\n                        $scope.productFamily.Options.Option2Values && $scope.productFamily.Options.Option2Values.length > 0) {\r\n                        optionsCount++;\r\n            \r\n                        if ($scope.baseOption.toUpperCase() === $scope.productFamily.Options.Option2.toUpperCase()) {\r\n                            obaseNum = 2;\r\n                        }\r\n                    }\r\n            \r\n                    if (typeof $scope.productFamily.Options.Option3 !== 'undefined' &&\r\n                        $scope.productFamily.Options.Option3 !== null &&\r\n                        $scope.productFamily.Options.Option3 !== ''\r\n                        && $scope.productFamily.Options.Option3Values && $scope.productFamily.Options.Option3Values.length > 0) {\r\n                        optionsCount++;\r\n            \r\n                        if ($scope.baseOption.toUpperCase() === $scope.productFamily.Options.Option3.toUpperCase()) {\r\n                            obaseNum = 3;\r\n                        }\r\n                    }\r\n            \r\n                    if (optionsCount === 1) {\r\n                        // logic for single option family\r\n                        $scope.hideBaseGridLine = true;\r\n                        var variationCount = $scope.productFamily.Options.Option1Values.length;\r\n            \r\n            \r\n                        if (variationCount > 6) // number of columns to look&feel beautiful\r\n                        {\r\n                            $scope.gridColumnsCount = 2;\r\n                            $scope.gridColumnsSizePercent = 100 / $scope.gridColumnsCount;\r\n                            $scope.variationGrid = [\r\n                                [{ IsHeader: true, Header: '' }, { Header: $scope.productFamily.Options.Option1, IsHeader: true }]\r\n                            ];\r\n            \r\n                            for (var i = 0; i < variationCount; i++) {\r\n                                var availLen = $scope.productFamily.Available.length;\r\n                                var item = null;\r\n                                for (var v = 0; v < availLen; v++) {\r\n                                    if ($scope.productFamily.Available[v].Option1.toUpperCase() === $scope.productFamily.Options.Option1Values[i].toUpperCase()) {\r\n                                        item = $scope.productFamily.Available[v];\r\n                                        break;\r\n                                    }\r\n                                }\r\n                                $scope.variationGrid.push([{ Header: $scope.productFamily.Options.Option1Values[i], IsHeader: true }, item]);\r\n                            }\r\n                        } else {\r\n                            $scope.gridColumnsCount = $scope.productFamily.Options.Option1Values.length + 1;\r\n                            $scope.gridColumnsSizePercent = 100 / $scope.gridColumnsCount;\r\n                            var lineHeader = [{ IsHeader: true, Header: '' }];\r\n                            var lineData = [{ Header: $scope.productFamily.Options.Option1, IsHeader: true }];\r\n            \r\n                            for (var i = 0; i < variationCount; i++) {\r\n                                lineHeader.push({ Header: $scope.productFamily.Options.Option1Values[i], IsHeader: true });\r\n            \r\n                                var availLen = $scope.productFamily.Available.length;\r\n                                var item = null;\r\n                                for (var v = 0; v < availLen; v++) {\r\n                                    var pr = $scope.productFamily.Available[v];\r\n                                    if (pr.Option1.toUpperCase() === $scope.productFamily.Options.Option1Values[i].toUpperCase() && !pr.Option2 && !pr.Option3) {\r\n                                        item = pr;\r\n                                        break;\r\n                                    }\r\n                                }\r\n            \r\n                                lineData.push(item);\r\n                            }\r\n            \r\n                            $scope.variationGrid = [lineHeader, lineData];\r\n                        }\r\n                    }\r\n            \r\n                    if (optionsCount === 2) {\r\n                        // logic for matrix option family\r\n                        $scope.hideBaseGridLine = true;\r\n                        var variationCount1 = $scope.productFamily.Options.Option1Values.length;\r\n                        var variationCount2 = 0;\r\n                        var varOpt2No = 2;\r\n                        if (typeof $scope.productFamily.Options.Option2 !== 'undefined' &&\r\n                            $scope.productFamily.Options.Option2 !== null &&\r\n                            $scope.productFamily.Options.Option2 !== '') {\r\n                            variationCount2 = $scope.productFamily.Options.Option2Values.length;\r\n                        }\r\n                        else {\r\n                            variationCount2 = $scope.productFamily.Options.Option3Values.length;\r\n                            varOpt2No = 3;\r\n                        }\r\n            \r\n                        var axisXName = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option1 : (varOpt2No === 2 ? $scope.productFamily.Options.Option2 : $scope.productFamily.Options.Option3)).toUpperCase();\r\n                        var axisYName = (variationCount1 <= variationCount2 ? (varOpt2No === 2 ? $scope.productFamily.Options.Option2 : $scope.productFamily.Options.Option3) : $scope.productFamily.Options.Option1).toUpperCase();\r\n                        var axisXData = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option1Values : (varOpt2No === 2 ? $scope.productFamily.Options.Option2Values : $scope.productFamily.Options.Option3Values));\r\n                        var axisYData = (variationCount1 <= variationCount2 ? (varOpt2No === 2 ? $scope.productFamily.Options.Option2Values : $scope.productFamily.Options.Option3Values) : $scope.productFamily.Options.Option1Values);\r\n            \r\n                        var headerLine = [{ IsHeader: true, Header: '' }];\r\n                        for (var d = 0; d < axisXData.length; d++) {\r\n                            headerLine.push({ IsHeader: true, Header: axisXData[d] });\r\n                        }\r\n                        $scope.variationGrid.push(headerLine);\r\n                        $scope.gridColumnsCount = axisXData.length + 1;\r\n                        $scope.gridColumnsSizePercent = 100 / $scope.gridColumnsCount;\r\n            \r\n                        var availLen = $scope.productFamily.Available.length;\r\n            \r\n                        for (var y = 0; y < axisYData.length; y++) {\r\n                            var dataBlock = [{ IsHeader: true, Header: axisYData[y] }];\r\n            \r\n                            for (var x = 0; x < axisXData.length; x++) {\r\n                                var item = null;\r\n                                for (var v = 0; v < availLen; v++) {\r\n                                    var av = $scope.productFamily.Available[v];\r\n                                    if (axisXName === $scope.productFamily.Options.Option1.toUpperCase() &&\r\n                                        ((varOpt2No === 2 && axisYName === $scope.productFamily.Options.Option2.toUpperCase())\r\n                                            || (varOpt2No === 3 && axisYName === $scope.productFamily.Options.Option3.toUpperCase()))) {\r\n                                        if ((av.Option1.toUpperCase() === axisXData[x].toUpperCase())\r\n                                         && ((varOpt2No === 2 && av.Option2.toUpperCase() === axisYData[y].toUpperCase() && !av.Option3)\r\n                                            || (varOpt2No === 3 && av.Option3.toUpperCase() === axisYData[y].toUpperCase()) && !av.Option2)\r\n                                        ) {\r\n                                            item = av;\r\n                                            break;\r\n                                        }\r\n                                    }\r\n                                    else if (axisYName === $scope.productFamily.Options.Option1.toUpperCase() &&\r\n                                        ((varOpt2No === 2 && axisXName === $scope.productFamily.Options.Option2.toUpperCase())\r\n                                            || (varOpt2No === 3 && axisXName === $scope.productFamily.Options.Option3.toUpperCase()))) {\r\n                                        if ((av.Option1.toUpperCase() === axisYData[y].toUpperCase())\r\n                                         && ((varOpt2No === 2 && av.Option2.toUpperCase() === axisXData[x].toUpperCase() && !av.Option3)\r\n                                            || (varOpt2No === 3 && av.Option3.toUpperCase() === axisXData[x].toUpperCase()) && !av.Option2)\r\n                                        ) {\r\n                                            item = av;\r\n                                            break;\r\n                                        }\r\n                                    }\r\n                                } //for v\r\n                                if (item !== null) dataBlock.push(item);\r\n                                else dataBlock.push({ Empty: true });\r\n                            } // for x\r\n                            $scope.variationGrid.push(dataBlock);\r\n                        } // for y\r\n                    }\r\n            \r\n                    if (optionsCount === 3) {\r\n                        // logic for complex matrix option family\r\n                        $scope.hideBaseGridLine = false;\r\n                        var variationCount1 = 0;\r\n                        var variationCount2 = 0;\r\n                        var axisXName = '';\r\n                        var axisYName = '';\r\n                        var axisXData = [];\r\n                        var axisYData = [];\r\n                        if (obaseNum === 1) {\r\n                            variationCount1 = $scope.productFamily.Options.Option2Values.length;\r\n                            variationCount2 = $scope.productFamily.Options.Option3Values.length;\r\n            \r\n                            axisXName = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option2 : $scope.productFamily.Options.Option3).toUpperCase();\r\n                            axisYName = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option3 : $scope.productFamily.Options.Option2).toUpperCase();\r\n                            axisXData = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option2Values : $scope.productFamily.Options.Option3Values);\r\n                            axisYData = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option3Values : $scope.productFamily.Options.Option2Values);\r\n                        } else\r\n                            if (obaseNum === 2) {\r\n                                variationCount1 = $scope.productFamily.Options.Option1Values.length;\r\n                                variationCount2 = $scope.productFamily.Options.Option3Values.length;\r\n            \r\n                                axisXName = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option1 : $scope.productFamily.Options.Option3).toUpperCase();\r\n                                axisYName = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option3 : $scope.productFamily.Options.Option1).toUpperCase();\r\n                                axisXData = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option1Values : $scope.productFamily.Options.Option3Values);\r\n                                axisYData = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option3Values : $scope.productFamily.Options.Option1Values);\r\n                            } else\r\n                                if (obaseNum === 3) {\r\n                                    variationCount1 = $scope.productFamily.Options.Option1Values.length;\r\n                                    variationCount2 = $scope.productFamily.Options.Option2Values.length;\r\n            \r\n                                    axisXName = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option1 : $scope.productFamily.Options.Option2).toUpperCase();\r\n                                    axisYName = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option2 : $scope.productFamily.Options.Option1).toUpperCase();\r\n                                    axisXData = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option1Values : $scope.productFamily.Options.Option2Values);\r\n                                    axisYData = (variationCount1 <= variationCount2 ? $scope.productFamily.Options.Option2Values : $scope.productFamily.Options.Option1Values);\r\n                                }\r\n            \r\n                        var headerLine = [{ IsHeader: true, Header: '' }];\r\n                        for (var d = 0; d < axisXData.length; d++) {\r\n                            headerLine.push({ IsHeader: true, Header: axisXData[d] });\r\n                        }\r\n                        $scope.variationGrid.push(headerLine);\r\n                        $scope.gridColumnsCount = axisXData.length + 1;\r\n                        $scope.gridColumnsSizePercent = 100 / $scope.gridColumnsCount;\r\n            \r\n                        var availLen = $scope.productFamily.Available.length;\r\n            \r\n                        for (var y = 0; y < axisYData.length; y++) {\r\n                            var dataBlock = [{ IsHeader: true, Header: axisYData[y] }];\r\n            \r\n                            for (let x = 0; x < axisXData.length; x++) {\r\n                                var item = null;\r\n                                for (let v = 0; v < availLen; v++) {\r\n                                    if (obaseNum === 1) {\r\n                                        if (axisXName === $scope.productFamily.Options.Option2.toUpperCase() && axisYName === $scope.productFamily.Options.Option3.toUpperCase()) {\r\n                                            if ($scope.productFamily.Available[v].Option1.toUpperCase() === $scope.baseOptionValue.toUpperCase()\r\n                                             && $scope.productFamily.Available[v].Option2.toUpperCase() === axisXData[x].toUpperCase()\r\n                                             && $scope.productFamily.Available[v].Option3.toUpperCase() === axisYData[y].toUpperCase()) {\r\n                                                item = $scope.productFamily.Available[v];\r\n                                                break;\r\n                                            }\r\n                                        }\r\n                                        else if (axisXName === $scope.productFamily.Options.Option3.toUpperCase() && axisYName === $scope.productFamily.Options.Option2.toUpperCase()) {\r\n                                            if ($scope.productFamily.Available[v].Option1.toUpperCase() === $scope.baseOptionValue.toUpperCase()\r\n                                              && $scope.productFamily.Available[v].Option3.toUpperCase() === axisXData[x].toUpperCase()\r\n                                                && $scope.productFamily.Available[v].Option2.toUpperCase() === axisYData[y].toUpperCase()) {\r\n                                                item = $scope.productFamily.Available[v];\r\n                                                break;\r\n                                            }\r\n                                        }\r\n                                    } else if (obaseNum === 2) {\r\n                                        if (axisXName === $scope.productFamily.Options.Option1.toUpperCase() && axisYName === $scope.productFamily.Options.Option3.toUpperCase()) {\r\n                                            if ($scope.productFamily.Available[v].Option2.toUpperCase() === $scope.baseOptionValue.toUpperCase()\r\n                                             && $scope.productFamily.Available[v].Option1.toUpperCase() === axisXData[x].toUpperCase()\r\n                                                && $scope.productFamily.Available[v].Option3.toUpperCase() === axisYData[y].toUpperCase()) {\r\n                                                item = $scope.productFamily.Available[v];\r\n                                                break;\r\n                                            }\r\n                                        }\r\n                                        else if (axisXName === $scope.productFamily.Options.Option3.toUpperCase() && axisYName === $scope.productFamily.Options.Option1.toUpperCase()) {\r\n                                            if ($scope.productFamily.Available[v].Option2.toUpperCase() === $scope.baseOptionValue.toUpperCase()\r\n                                             && $scope.productFamily.Available[v].Option3.toUpperCase() === axisXData[x].toUpperCase()\r\n                                                && $scope.productFamily.Available[v].Option1.toUpperCase() === axisYData[y].toUpperCase()) {\r\n                                                item = $scope.productFamily.Available[v];\r\n                                                break;\r\n                                            }\r\n                                        }\r\n                                    } else if (obaseNum === 3) {\r\n                                        if (axisXName === $scope.productFamily.Options.Option1.toUpperCase() && axisYName === $scope.productFamily.Options.Option2.toUpperCase()) {\r\n                                            if ($scope.productFamily.Available[v].Option3.toUpperCase() === $scope.baseOptionValue.toUpperCase()\r\n                                             && $scope.productFamily.Available[v].Option1.toUpperCase() === axisXData[x].toUpperCase()\r\n                                                && $scope.productFamily.Available[v].Option2.toUpperCase() === axisYData[y].toUpperCase()) {\r\n                                                item = $scope.productFamily.Available[v];\r\n                                                break;\r\n                                            }\r\n                                        }\r\n                                        else if (axisXName === $scope.productFamily.Options.Option2.toUpperCase() && axisYName === $scope.productFamily.Options.Option1.toUpperCase()) {\r\n                                            if ($scope.productFamily.Available[v].Option3.toUpperCase() === $scope.baseOptionValue.toUpperCase()\r\n                                             && $scope.productFamily.Available[v].Option2.toUpperCase() === axisXData[x].toUpperCase()\r\n                                                && $scope.productFamily.Available[v].Option1.toUpperCase() === axisYData[y].toUpperCase()) {\r\n                                                item = $scope.productFamily.Available[v];\r\n                                                break;\r\n                                            }\r\n                                        }\r\n                                    }\r\n                                } //for v\r\n                                if (item !== null) dataBlock.push(item);\r\n                                else dataBlock.push({ Empty: true })\r\n                            } // for x\r\n                            $scope.variationGrid.push(dataBlock);\r\n                        } // for y\r\n                    }\r\n                    $scope.variationGridColLength = $scope.variationGrid[0].length;\r\n                    $timeout(function () {\r\n                        $('select').trigger('refresh');\r\n                        $(\"select.baseOptionValueSelect\").trigger(\"change\");\r\n                    }, 20);\r\n                };\r\n\r\n                $scope.baseOptionValueChange = function (baseOptionValue) {\r\n                    $scope.baseOptionValue = baseOptionValue;\r\n                    $scope.updateGrid();\r\n                };\r\n\r\n                $scope.baseOptionChange = function (baseOption) {\r\n                    $scope.productFamilyOptions = [];\r\n\r\n                    $scope.baseOption = baseOption;\r\n                    if (baseOption === $scope.productFamily.Options.Option1) {\r\n                        $scope.productFamilyOptions = $scope.productFamily.Options.Option1Values;\r\n                        $scope.baseOptionValue = $scope.productFamily.Options.Option1Values[0];\r\n                    }\r\n                    if ($scope.productFamily.Options.Option2 !== '') {\r\n                        if (baseOption === $scope.productFamily.Options.Option2) {\r\n                            $scope.productFamilyOptions = $scope.productFamily.Options.Option2Values;\r\n                            $scope.baseOptionValue = $scope.productFamily.Options.Option2Values[0];\r\n                        }\r\n                    }\r\n                    if ($scope.productFamily.Options.Option3 !== '') {\r\n                        if (baseOption === $scope.productFamily.Options.Option3) {\r\n                            $scope.productFamilyOptions = $scope.productFamily.Options.Option3Values;\r\n                            $scope.baseOptionValue = $scope.productFamily.Options.Option3Values[0];\r\n                        }\r\n                    }\r\n                    $scope.updateGrid(); \r\n                };\r\n\r\n                $scope.qty = {};\r\n                $scope.setAllQty = function(){\r\n                    $scope.quantityObject = {\r\n                        value: \"\",\r\n                        infoText: \"\",\r\n                        isToAll: true\r\n                    };\r\n                    $scope.showItemQuantityDlg('setToAll');\r\n                };\r\n\r\n                $scope.itemQuantityDlg2 = null; // is bound to popover object with methods from directive\r\n\r\n                $scope.showItemQuantityDlg = function (elID) {\r\n                    $timeout(function () {\r\n                            $scope.itemQuantityDlg2.show(!elID ? '#quantityObject' : '#'+elID);\r\n                    });\r\n                };\r\n       \r\n                // callback\r\n                $scope.setQuantity = function (prm, event) {\r\n       \r\n                    $timeout(function () { $scope.itemQuantityDlg2.hide(true); });\r\n       \r\n                    if (prm === true) {\r\n                        $timeout(function () {\r\n                            if(!$scope.quantityObject.isToAll) {\r\n                                $scope.quantityObject[$scope.QuantityPropName] = +$scope.quantityObject.value;\r\n                                var itemIndex = $scope.productFamily.Available.filter(function(i) {return i.Index === $scope.quantityObject.Index;})[0];\r\n                                var items = $scope.productFamily.Available.filter(function(i) {return i.Option1 === itemIndex.Option1 \r\n                                    && i.Option2 === itemIndex.Option2 && i.Option3 === itemIndex.Option3;\r\n                                });\r\n                                angular.forEach(items, function(item) {\r\n                                    item[$scope.QuantityPropName] = $scope.quantityObject[$scope.QuantityPropName];\r\n                                });\r\n                            } else {\r\n                                angular.forEach($scope.productFamily.Available, function(item){\r\n                                    item[$scope.QuantityPropName] = +$scope.quantityObject.value;\r\n                                });\r\n                            }\r\n                        });\r\n                    }       \r\n                    event.stopPropagation();\r\n                    event.preventDefault();\r\n                };\r\n\r\n                $scope.save = function() {\r\n                    var processed = [];\r\n                    angular.forEach($scope.productFamily.Available, function(item) {\r\n                        item.Comments = $scope.qty.comments;\r\n                        item.Comment = $scope.qty.comments;\r\n\r\n                        if(processed.filter(function(x){\r\n                            return x.Option1 == item.Option1 && x.Option2 == item.Option2 && x.Option3 == item.Option3\r\n                        }).length == 0){\r\n                            var otherItems = $scope.productFamily.Available.filter(function(i) {\r\n                                return i.Option1 === item.Option1 && i.Option2 === item.Option2 && i.Option3 === item.Option3\r\n                                && item.Index !== i.Index;\r\n                            });\r\n\r\n                            angular.forEach(otherItems, function(otherItem) {\r\n                                otherItem[$scope.QuantityPropName] = item[$scope.QuantityPropName];\r\n                            });\r\n                            processed.push({Option1: item.Option1, Option2: item.Option2, Option3: item.Option3});\r\n                        }\r\n\r\n                    });\r\n                    $rootScope.$broadcast($scope.type == 'transfer' ? \"stockFamilyMatrix.save\" : \"stockFamilyMatrixPurchase.save\", {\r\n                        familyID: $scope.familyID,\r\n                        items: $scope.productFamily.Available.filter(function(it) {return it[$scope.QuantityPropName] > 0;}),\r\n                        comments: $scope.qty.comments\r\n                    });\r\n                    $scope.hide();\r\n                };\r\n\r\n                $scope.hide = function(){\r\n                    $scope.isDlgVisible = false;\r\n                    helperService.closeDialog('#stockMatrixDlg');\r\n                    $scope.hideBaseGridLine = true;\r\n                    $scope.qty = {};\r\n                };\r\n\r\n}])\r\n.directive('myRepeatDirectiveGrid',\r\n        function() {\r\n            return function(scope, element, attrs) {\r\n\r\n                var textColor = 'white';\r\n                var availColor = 'red';\r\n                if(!scope.isEditable || !scope.isMobile) {\r\n                    $(element)\r\n                    .css('width', '90%')\r\n                    .css('margin-left', '5%')\r\n                    .popover({\r\n                        placement: 'auto top',\r\n                        trigger: 'focus click',\r\n                        html: true,\r\n                        content: function () {\r\n                            return $('<div />')\r\n                                .html('<span>Available: ' + attrs.available + ', On order: ' + attrs.orderedqty + '</span>')[0].outerHTML;\r\n                        },\r\n                        'template':\r\n                            '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\" style=\"font-weight: bold; color: ' +\r\n                                textColor +\r\n                                '; background-color: ' +\r\n                                availColor +\r\n                                ';\"></h3><div class=\"popover-content\"></div></div>'\r\n                    })\r\n                    .blur(function() {\r\n                        $(this).popover('hide');\r\n                    });\r\n                }\r\n            };\r\n        });","angular.module(\"mainApp\").controller('stockOrderingController',\r\n    ['$scope', '$rootScope', 'loginService', 'stockOrderingService',\r\n     'helperService', '$timeout', 'configService',\r\n     function ($scope, $rootScope, loginService, stockOrderingService,\r\n               helperService, $timeout, configService) {\r\n\r\n                if (!loginService.isLoggedIn()) {\r\n                    helperService.goToHomePage();\r\n                    return;\r\n                }\r\n\r\n                var ST_ORDER_TYPE = 'ST';\r\n                var STATUS_DRAFT = 'DRAFT';\r\n                var STATUS_ORDERED = 'ORDERED';\r\n                var STATUS_PICKING = 'PICKING';\r\n                var STATUS_IN_TRANSIT = 'IN TRANSIT';\r\n                var STATUS_IN_PROGRESS = 'IN PROGRESS';\r\n                var STATUS_COMPLETED = 'COMPLETED';\r\n                var STATUS_VOIDED = 'VOIDED';\r\n\r\n                $scope.searchText = '';\r\n                $scope.mode = '';\r\n                $scope.totalPages = 0;\r\n                $scope.dataPage = 1;\r\n                $scope.dataPageDisplay;\r\n                $scope.dataStatus = '0';\r\n                $scope.itemsByPage = 20;\r\n                $scope.isLoading = false;\r\n                $scope.stockOrderingData = [];\r\n                $scope.availableProducts = [];//flat\r\n                $scope.groupedAvailableProducts = [];//grouped\r\n                $scope.totalCount = 0;\r\n                $scope.inStocktransferCount = 0;\r\n                $scope.filterStatuses = [\r\n                    {status: '0', statusName: \"All\"},\r\n                    {status: STATUS_DRAFT, statusName: \"Draft\"},\r\n                    {status: STATUS_ORDERED, statusName: \"Ordered\"},\r\n                    {status: STATUS_IN_PROGRESS, statusName: \"In progress\"},\r\n                    {status: STATUS_COMPLETED, statusName: \"Completed\"}];\r\n\r\n                $scope.locations = [];\r\n                $scope.allLocations = [];\r\n                $scope.suppliers = [];\r\n                $scope.referenceData = {};\r\n                $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n                $scope.firstShow = true;\r\n\r\n                $scope.deleteMode = null;\r\n                $scope.deleteObject = null;\r\n\r\n                $scope.onLoad = function () {\r\n                    $.blockUI();\r\n                    stockOrderingService.loadAvailableLocations()\r\n                    .then(function (data) {\r\n                        var currentLocation = configService.lastOutletID;\r\n                        var res = data.data.locations;\r\n                        $scope.allLocations = res;\r\n                        angular.forEach(res, function (el) {\r\n                            if(el.LocationID !== currentLocation\r\n                            && (el.ParentID === null || (el.ParentID !== null && el.ParentID !== currentLocation))){\r\n                                $scope.locations.push(el);\r\n                            }\r\n                        });\r\n\r\n                        $scope.$broadcast('refreshStTable');\r\n                        return stockOrderingService.loadSuppliers();\r\n                    })\r\n                    .then(function(data) {\r\n                        var res = data.data.suppliers;\r\n                        $scope.suppliers = res;\r\n                        $scope.referenceData = data.data.referenceData;\r\n                    })\r\n                    .finally(function () {\r\n                        $.unblockUI();\r\n                    });\r\n                };\r\n\r\n                $scope.gridControl = function (tableState) {\r\n                    var sort = {};\r\n       \r\n                    if (tableState.sort.predicate) {\r\n                        sort.FieldName = tableState.sort.predicate;\r\n                        sort.Direction = tableState.sort.reverse ? 'desc' : 'asc';\r\n                    }\r\n       \r\n                    $.blockUI();\r\n                    $scope.loadGrid(sort)\r\n                    .finally(function () {\r\n                        $.unblockUI();\r\n                    });\r\n                };\r\n\r\n                const scrollReachBottomCallback = function (){\r\n                    if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                        $scope.selectPage($scope.dataPage + 1);\r\n                    }\r\n                };\r\n\r\n                initPagerOnScroll(scrollReachBottomCallback);\r\n        \r\n                function getPages(total) {\r\n                    var step = $scope.itemsByPage;\r\n                    $scope.totalPages = Math.ceil(total / step);\r\n                    $scope.totalRecords = total;\r\n                    if ($scope.totalPages === 0) {\r\n                        $scope.totalPages = 1;\r\n                    }\r\n                };\r\n        \r\n                $scope.selectPage = function (page) {\r\n                    $scope.dataPage = page;\r\n                    $scope.$broadcast('refreshStTable');\r\n                };\r\n\r\n                $scope.$on('refreshStTable', function(sorting) {\r\n                    $.blockUI();\r\n                    $scope.isLoading = true;\r\n\r\n                    $scope.loadGrid(sorting).finally(function() {\r\n                        $scope.isLoading = false;\r\n                        $.unblockUI();\r\n\r\n                        const $itemsContainer = $('.grid-content .dp_content.grid-content');\r\n                        const itemsContainerHeight = $itemsContainer.outerHeight();\r\n                        const itemsTableHeight = $itemsContainer.find('.table-data-collapsed').outerHeight();\r\n                        const isPossibleToLoadMoreItems = itemsTableHeight < itemsContainerHeight;\r\n                        if (isPossibleToLoadMoreItems) {\r\n                            scrollReachBottomCallback()\r\n                        }\r\n                    });\r\n                });\r\n       \r\n                $scope.loadGrid = function (sorting) {\r\n                    helperService.hideKeyboard();\r\n                    var lst = stockOrderingService.loadTasksList($scope.searchText, $scope.dataPage, $scope.itemsByPage, $scope.dataStatus, sorting)\r\n                        .then(function (data) {\r\n                            if($scope.dataPage === 1){\r\n                                $scope.stockOrderingData = [];\r\n                            }\r\n       \r\n                            $scope.dataPage = data.data.Page;\r\n                            $scope.dataPageDisplay = data.data.Page;\r\n                            getPages(data.data.Total);\r\n       \r\n                            angular.forEach(data.data.Rows, function (el) {\r\n                                el.date = el.CompletionDate ? helperService.getFormatedDateOnlyAsIs(el.CompletionDate) : '';\r\n                                el.stRequiredBy = el.STRequiredBy ? helperService.getFormatedDateOnlyAsIs(el.STRequiredBy) : '';\r\n                                el.statusName = $scope.getStatusName(el.Status);\r\n                                el.canUndo = $scope.getCanUndo(el.Type, el.Status);\r\n                                el.canVoid = $scope.getCanVoid(el.Type, el.Status);\r\n                                el.FromLocationAddress = $.trim(el.FromLocationAddress);\r\n                                \r\n                                $scope.stockOrderingData.push(el);\r\n                            });\r\n                        });\r\n       \r\n                    return lst;\r\n                };\r\n\r\n                $scope.$watch('dataStatus',\r\n                    function (newValue, oldValue) {\r\n                        if (newValue !== oldValue) {\r\n                            $scope.dataPage = 1;\r\n                            $scope.$broadcast('refreshStTable');\r\n                        }\r\n                    }\r\n                );\r\n                \r\n                $timeout(function () {\r\n                    $scope.mode = 'management';\r\n                    initSelects();\r\n                });\r\n\r\n                $scope.$on('view.loaded', function (evt) {\r\n       \r\n                    if ($scope.firstShow) {\r\n                        $scope.firstShow = false;\r\n                    }\r\n                    else {\r\n                        $scope.$broadcast('refreshStTableProcess');\r\n                    }\r\n       \r\n                    $timeout(function () {\r\n                        $('input, select').trigger('refresh');\r\n                    });\r\n                });\r\n       \r\n                $scope.search = function (event) {\r\n                    $scope.dataPage = 1;\r\n                    $scope.dataPageDisplay = 1;\r\n                    $scope.$broadcast('refreshStTable');\r\n                };\r\n       \r\n                $scope.selectPage = function (page) {\r\n                    $scope.dataPage = page;\r\n                    $scope.$broadcast('refreshStTable');\r\n                };\r\n\r\n                $scope.getStatusName = function(status) {\r\n                    switch(status) {\r\n                        case \"DRAFT\":\r\n                            return \"Draft\";\r\n                        case \"ORDERED\":\r\n                            return \"Ordered\";\r\n                        case \"PICKING\":\r\n                            return \"Picking\";\r\n                        case \"IN TRANSIT\":\r\n                            return \"In transit\";\r\n                        case \"COMPLETED\":\r\n                            return \"Completed\";\r\n                        case \"INVOICE COMPLETED\":\r\n                            return \"Billed\";\r\n                        case \"PARTIALLY RECEIVED\":\r\n                            return \"Receiving\";\r\n                        case \"PO COMPLETED\":\r\n                            return \"Ordered\";\r\n                        case \"PO IN PROGRESS\":\r\n                            return \"Ordering\";\r\n                        case \"PARTIALLY RECEIVED / CREDITED\":\r\n                            return \"Receiving / Credited\";\r\n                        case \"PARTIALLY INVOICED\":\r\n                            return \"Partially billed\";\r\n                        case \"INVOICED\":\r\n                            return \"Billed\";\r\n                        case \"ORDERING\":\r\n                            return \"Orderring\";\r\n                    }\r\n\r\n                    return status;\r\n                };\r\n\r\n                $scope.getCanUndo = function(itemType, status) {\r\n                    return itemType === ST_ORDER_TYPE \r\n                    && status === STATUS_ORDERED;\r\n                };\r\n\r\n                $scope.getCanVoid = function(type, status) {\r\n                    return type === ST_ORDER_TYPE && (status === STATUS_ORDERED \r\n                        || status === STATUS_DRAFT );\r\n                };\r\n\r\n                //------------ Stock Order Details --------------------------------------\r\n                $scope.closeAddOrder = function(type) {\r\n                    if(type) {\r\n                        $scope.mode = 'new';\r\n\r\n                        var mn = $('#orderingFilterPanel ul:visible');\r\n                        if (mn.length > 0) {\r\n                            mn.dropdown('toggle');\r\n                        }\r\n\r\n                        if(type === 'transfer') {\r\n                            $rootScope.$broadcast('stockTransferDetail.add', {\r\n                                locations: $scope.locations\r\n                            });\r\n                        } else {\r\n                            $rootScope.$broadcast('purchaseDetail.add', {\r\n                                suppliers: $scope.suppliers,\r\n                                referenceData: $scope.referenceData,\r\n                                locations: $scope.allLocations\r\n                            });\r\n                        }\r\n                    }\r\n                };\r\n\r\n                $scope.currentDetails = function (row) {\r\n                    $scope.mode = 'edit';\r\n                    if(row.Type === ST_ORDER_TYPE) {\r\n                        $rootScope.$broadcast('stockTransferDetail.edit', {\r\n                            locations: $scope.locations,\r\n                            row: row\r\n                        });\r\n                    } else {\r\n                        $rootScope.$broadcast('purchaseDetail.edit', {\r\n                            suppliers: $scope.suppliers,\r\n                            referenceData: $scope.referenceData,\r\n                            row: row\r\n                        });\r\n                    }\r\n                };\r\n\r\n                $scope.getStatusBg = function(row) {\r\n                    if (row.statusName == 'Ordering') {\r\n                        return {'background-color':'#D6E3F3'};\r\n                    } else if (row.statusName == 'Ordered') {\r\n                        return {'background-color':'#DED6F3'}\r\n                    } else if (row.statusName == 'Completed') {\r\n                        return {'background-color':'#D6F3F0'}\r\n                    } else if (row.statusName == 'Billed') {\r\n                        return {'background-color':'#D6E3F3'}\r\n                    } else if (row.statusName == 'Draft') {\r\n                        return {'background-color':'#D5F3E2'}\r\n                    } else if (row.statusName == 'Partially billed') {\r\n                        return {'background-color':'#D6E3F3'}\r\n                    }\r\n                };\r\n\r\n                $rootScope.$on('stockOrdering.showList', function() {\r\n                    $scope.dataPage = 1;\r\n                    $scope.mode = 'management';\r\n                    $scope.$broadcast('refreshStTable');\r\n\r\n                    var $windowElement = $('#stockTransferOrderDetailPartial');\r\n                    helperService.closeDialog($windowElement);\r\n                });\r\n}]);","angular.module('services').factory('stockOrderingService',\r\n    ['gettext', 'helperService', 'remoteRequestProvider', 'configService','$q', 'webOnlyProvider',\r\n        function (gettextCatalog, helperService, remoteRequestProvider, configService, $q, webOnlyProvider) {\r\n\r\n            var stockOrderingService = {};\r\n\r\n            // stock transfer methods\r\n            stockOrderingService.loadTasksList = function (searchText, page, limit, status, sorting) {\r\n                var provider = webOnlyProvider;\r\n                var location = configService.lastOutletID;\r\n                return provider.loadStockOrderingList(searchText, page, limit, status, sorting, location);\r\n            };\r\n\r\n            stockOrderingService.loadAvailableProducts = function (locationID) {\r\n                var prms = {\r\n                    locationID: locationID,\r\n                    infoType: 'availableProductsByLocation',\r\n                    toLocationId: configService.lastOutletID,\r\n                    compress: true\r\n                };\r\n\r\n                return webOnlyProvider.loadStockTransferOrderRelatedData(prms)\r\n                    .then(function (res) {\r\n                        if (res && res.data && res.data.productsCompressed) {\r\n                            // decompress\r\n                            return helperService.unpack(stockOrderingService, res.data.productsCompressed)\r\n                                .then(function (arr) {\r\n                                    res.data.products = arr;\r\n                                    return helperService.resolvePromise(res);\r\n                                });\r\n                        } else\r\n                            return helperService.resolvePromise(res);\r\n                    });\r\n            };\r\n\r\n            stockOrderingService.loadAvailableLocations = function () {\r\n                var prms = {\r\n                    userID: configService.loginUserID,\r\n                    infoType: 'orderAvailableLocations'\r\n                };\r\n\r\n                return webOnlyProvider.loadStockTransferOrderRelatedData(prms);\r\n            };\r\n\r\n            stockOrderingService.loadStockTransferOrderDetails = function (taskID, page, limit, status, sorting) {\r\n                var provider = webOnlyProvider;\r\n\r\n                return provider.loadStockTransferOrderDetails(taskID, page, limit, status, sorting);\r\n\r\n            };\r\n\r\n            stockOrderingService.modifyStockTransfer = function (task) {\r\n                var prm = {};\r\n                prm.FromLocationID = task.fromLocationID;\r\n                prm.ToLocationID = task.toLocationID;\r\n                prm.CompletionDate = task.date ? helperService.toDateFromDatepickerDirect(task.date) : '';\r\n                prm.LastUpdatedBy = configService.lastUserName;\r\n                prm.Details = [];\r\n                prm.RequiredBy = task.stRequiredBy ? helperService.toDateFromDatepickerDirect(task.stRequiredBy) : '';\r\n\r\n                angular.forEach(task.data, function (el) {\r\n                    var rid = null;\r\n                    if (el.ID.indexOf(el.ProductID) !== 0)\r\n                        rid = el.ID;\r\n\r\n                    var dtl = {\r\n                        ID: rid,\r\n                        ProductID: el.ProductID,\r\n                        QuantityOnHand: el.QuantityOnHand,\r\n                        QuantityAvailable: el.QuantityAvailable,\r\n                        TransferQuantity: el.TransferQuantity,\r\n                        Comments: el.Comments,\r\n                        OrderedQuantity: el.OrderedQuantity\r\n                    };               \r\n                    prm.Details.push(dtl);\r\n                    \r\n                });\r\n\r\n                if (!task.taskID) {\r\n                    prm.TaskID = null;\r\n                    // new\r\n                    return webOnlyProvider.saveNewStockTransferOrder(prm);\r\n                }\r\n                else {\r\n                    // update\r\n                    prm.TaskID = task.taskID;\r\n                    return webOnlyProvider.updateStockTransferOrder(prm);\r\n                }\r\n            };\r\n\r\n            stockOrderingService.loadReorderProducts = function (fromLocationID, toLocationID, onlyAvailable) {\r\n                return webOnlyProvider.loadStockTransferReorderData(fromLocationID, toLocationID, onlyAvailable);\r\n            };\r\n\r\n            stockOrderingService.loadPurchaseAvailableProducts = function (supplierID) {\r\n                var prms = {\r\n                    supplierID: supplierID,\r\n                    infoType: 'availableProductsByLocation',\r\n                    locationID: configService.lastOutletID\r\n                };\r\n\r\n                return webOnlyProvider.loadPurchaseOrderRelatedData(prms);\r\n            };\r\n\r\n            stockOrderingService.loadSuppliers = function () {\r\n                var prms = {\r\n                    userID: configService.loginUserID,\r\n                    infoType: 'orderAvailableSuppliers'\r\n                };\r\n\r\n                return webOnlyProvider.loadPurchaseOrderRelatedData(prms);\r\n            };\r\n\r\n            stockOrderingService.loadPurchaseOrderDetails = function (taskID, page, limit, status, sorting) {\r\n                var provider = webOnlyProvider;\r\n\r\n                return provider.loadPurchaseOrderDetails(taskID, configService.lastOutletID, page, limit, status, sorting);\r\n\r\n            };\r\n\r\n            stockOrderingService.loadPurchaseTask = function (taskID) {\r\n                var provider = webOnlyProvider;\r\n\r\n                return provider.loadPurchaseTask(taskID);\r\n            };\r\n\r\n            stockOrderingService.getRate = function(from, to, date) {\r\n                var provider = webOnlyProvider;\r\n\r\n                return provider.getExchangeRate(from, to, date);\r\n            };\r\n\r\n            stockOrderingService.modifyPurchaseOrder = function(task, originalTask, referenceData) {\r\n                if(!originalTask) {\r\n                    originalTask = {};\r\n                }\r\n\r\n                if(originalTask.supplierID !== task.supplierID) {\r\n                    originalTask.Contact = '';\r\n                    originalTask.Phone = '';\r\n                    originalTask.CurrencyRate = task.currencyRate;\r\n                    originalTask.TaxRule = task.TaxRule;\r\n                    originalTask.TaxPercent = task.TaxPercent;\r\n                    originalTask.TaxCalculation = task.TaxCalculation;\r\n                    originalTask.Terms = task.Terms;\r\n                }\r\n\r\n                originalTask.SupplierID = task.supplierID;\r\n                originalTask.Supplier = task.supplierName;\r\n                originalTask.Approach = originalTask.Approach || referenceData.approach;\r\n                originalTask.Location = task.locationName;\r\n                originalTask.RequiredBy = helperService.toDateFromDatepickerDirect(task.date);\r\n                originalTask.CurrencyRate = originalTask.CurrencyRate || task.currencyRate;\r\n                originalTask.TaxRule = originalTask.TaxRule || task.TaxRule;\r\n                originalTask.TaxPercent = originalTask.TaxPercent || task.TaxPercent;\r\n                originalTask.TaxCalculation = originalTask.TaxCalculation || task.TaxCalculation;\r\n                originalTask.Terms = originalTask.Terms || task.Terms;\r\n                originalTask.LastUpdatedBy = configService.lastUserName;                \r\n\r\n                var order = {\r\n                    TaskID: originalTask ? originalTask.TaskID : null,\r\n                    CombineAdditionalCharges: false,\r\n                    Memo: '',\r\n                    Status: 'AUTHORISED',\r\n                    Lines: []\r\n                };\r\n\r\n                angular.forEach(task.data, function (el) {\r\n\r\n                    if(el.FamilyID && el.Items && el.Items.length > 0) {\r\n                        angular.forEach(el.Items, function(variant) {\r\n                            if (variant.ProductID){\r\n                                var dtl = {\r\n                                    ProductID: variant.ProductID,\r\n                                    SKU: variant.ProductCode,\r\n                                    Name: variant.Name,\r\n                                    Quantity: variant.Quantity,\r\n                                    Price: variant.Price || variant.Cost,\r\n                                    Discount: 0,\r\n                                    Tax:0,\r\n                                    TaxRule: variant.TaxRule || originalTask.TaxRule,\r\n                                    TaxPercent: variant.TaxPercent || originalTask.TaxPercent,\r\n                                    SupplierSKU: '',\r\n                                    Comment: variant.Comment,\r\n                                    Total: 0\r\n                                };\r\n    \r\n                                updateAdditionalTaxAndTotal(dtl, referenceData.taxPrecision, referenceData.pricePrecision);\r\n            \r\n                                order.Lines.push(dtl);\r\n                            }\r\n                        });\r\n                    } else {\r\n                        var dtl = {\r\n                            ProductID: el.ProductID,\r\n                            SKU: el.ProductCode,\r\n                            Name: el.Name,\r\n                            Quantity: el.Quantity,\r\n                            Price: el.Price,\r\n                            Discount: 0,\r\n                            Tax:0,\r\n                            TaxRule: el.TaxRule || originalTask.TaxRule,\r\n                            TaxPercent: el.TaxPercent || originalTask.TaxPercent,\r\n                            SupplierSKU: '',\r\n                            Comment: el.Comment,\r\n                            Total: 0\r\n                        };\r\n\r\n                        updateAdditionalTaxAndTotal(dtl, referenceData.taxPrecision, referenceData.pricePrecision);\r\n    \r\n                        order.Lines.push(dtl);\r\n                    }\r\n                });\r\n\r\n                if (!task.taskID) {\r\n                    return webOnlyProvider.saveNewPurchase(originalTask)\r\n                    .then(function(data) {\r\n                        order.TaskID = data.data.ID;\r\n                        if (task.dataStatus === \"DRAFT\" && task.saveAsDraft === true) {\r\n                            order.Status = 'DRAFT';\r\n                        }\r\n\r\n                        return webOnlyProvider.savePurchaseOrder(order);\r\n                    })\r\n                    .then(function(data) {\r\n                        return true;\r\n                    });\r\n                } else {\r\n                    return webOnlyProvider.updatePurchase(originalTask)\r\n                    .then(function(data) {\r\n                        order.TaskID = data.data.ID;\r\n                        return webOnlyProvider.savePurchaseOrder(order);\r\n                    })\r\n                    .then(function(data) {\r\n                        return true;\r\n                    });\r\n                }\r\n            };\r\n\r\n            stockOrderingService.undoPurchase = function(taskID) {\r\n                var provider = webOnlyProvider;\r\n\r\n                return provider.deleteUndoPurchase(taskID, false);\r\n            };\r\n\r\n            stockOrderingService.voidPurchase = function(taskID) {\r\n                var provider = webOnlyProvider;\r\n                if(taskID) {\r\n                    return provider.deleteUndoPurchase(taskID, true);\r\n                } else {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                }\r\n            };\r\n\r\n            stockOrderingService.loadPurchaseReorderProducts = function (locationID, supplierID) {\r\n                return webOnlyProvider.loadPurchaseReorderData(locationID, supplierID);\r\n            };\r\n\r\n            var updateAdditionalTaxAndTotal = function(record, taxPrecision, pricePrecision) {\r\n                var Quantity = record.Quantity;\r\n                var Price = record.Price;\r\n                var Discount = record.Discount;\r\n                var Total = Price * (100 - Discount) / 100;\r\n                var TaxPercent = record.TaxPercent;\r\n                Total = helperService.DEARRound(Total, pricePrecision);\r\n                Total = Quantity * Total;\r\n                Total = helperService.DEARRound(Total, 2);\r\n                var Tax = 0;\r\n                if (TaxPercent > 0)\r\n                    Tax = Total * TaxPercent / 100;\r\n                Tax = helperService.DEARRound(Tax, taxPrecision);\r\n                record.Tax = Tax;\r\n                record.Total = Total;\r\n            };\r\n\r\n            stockOrderingService.printPurchaseOrder = function (taskID, templateID) {\r\n                return webOnlyProvider.printPurchaseOrder(taskID, configService.lastUserName, templateID);\r\n            };\r\n\r\n            stockOrderingService.getPurchaseOrderEmail = function (taskID, templateID) {\r\n                return webOnlyProvider.getPurchaseOrderEmail(taskID, configService.lastUserName, templateID);\r\n            };\r\n\r\n            stockOrderingService.sendPurchaseOrderEmail = function (taskID, data) {\r\n                return webOnlyProvider.sendPurchaseOrderEmail(taskID, data);\r\n            };\r\n\r\n            stockOrderingService.loadPurchaseOrderTemplates = function () {\r\n                var prms = {\r\n                    infoType: 'orderAvailableTemplates'\r\n                };\r\n\r\n                return webOnlyProvider.loadPurchaseOrderRelatedData(prms);\r\n            };\r\n\r\n            return stockOrderingService;\r\n        }\r\n\r\n\r\n\r\n    ]);","angular.module(\"mainApp\").controller('stockPurchaseOrderDetailController',\r\n    ['$scope', '$rootScope', 'loginService', 'gettextCatalog', 'stockOrderingService',\r\n        'helperService', '$timeout', 'configService', 'errorService',\r\n        '$q', 'uuid2', '$element', '$sce', 'fileDownloadService',\r\n        function ($scope, $rootScope, loginService, gettextCatalog, stockOrderingService,\r\n            helperService, $timeout, configService, errorService,\r\n            $q, uuid2, $element, $sce, fileDownloadService) {\r\n\r\n            if (!loginService.isLoggedIn()) {\r\n                helperService.goToHomePage();\r\n                return;\r\n            }\r\n\r\n            $scope.mode = '';\r\n            $scope.dataStatus = '';\r\n            $scope.availableProducts = [];//flat\r\n            $scope.groupedAvailableProducts = [];//grouped\r\n            $scope.totalCount = 0;\r\n\r\n            $scope.suppliers = [];\r\n            $scope.locations = [];\r\n            $scope.referenceData = {};\r\n            $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n            $scope.firstShow = true;\r\n            $scope.firstAddFormShow = true;\r\n\r\n            $scope.currentOrder = {\r\n                data: []\r\n            };\r\n            $scope.originalTask = null;\r\n\r\n            $scope.deleteMode = null;\r\n            $scope.deleteObject = null;\r\n\r\n            $scope.itemQuantityDlg = null; // is bound to discount popover object with methods from directive\r\n            $scope.quantityObject = {};\r\n            $scope.ifcss = { 'height': (window.innerHeight * 0.9) - 400 + 'px' };\r\n            //$scope.fcss = { 'height': (window.innerHeight * 0.9) - 400 + 'px' };\r\n            $scope.fcss = { 'height': window.innerHeight * 0.8 + 'px' };\r\n            $scope.fcss_m = { 'height': window.innerHeight * 0.7 + 'px' };\r\n\r\n            $scope.isSite = configService.isSite;\r\n            \r\n            $rootScope.$on('purchaseDetail.add', function (event, data) {\r\n                $scope.suppliers = data.suppliers;\r\n                $scope.referenceData = data.referenceData;\r\n                $scope.locations = data.locations;\r\n                $scope.firstData = true;\r\n                $scope.addNew();\r\n\r\n                helperService.showDialog($element, function () { });\r\n                $scope.initInputs();\r\n                $scope.loadGridProcess();\r\n            });\r\n\r\n            \r\n            $rootScope.$on('purchaseDetail.edit', function (event, data) {\r\n                $scope.suppliers = data.suppliers;\r\n                $scope.referenceData = data.referenceData;\r\n                $scope.currentRow = data.row;\r\n                $scope.firstData = true;\r\n                $scope.currentDetails($scope.currentRow);\r\n\r\n                helperService.showDialog($element, function () { });\r\n                $scope.initInputs();\r\n            });\r\n\r\n            $scope.initInputs = function () {\r\n                $timeout(function () {\r\n                    if ($scope.firstAddFormShow) {\r\n                        $scope.firstAddFormShow = false;\r\n                        initSelects();\r\n                        //                            helperService.setDatepicker2($scope.dateFormat, '#requiredByDate');\r\n                        helperService.setDatepicker($scope.dateFormat, '#requiredByDate');\r\n                    }\r\n\r\n                    $('input, select').trigger('refresh');\r\n                });\r\n            };\r\n\r\n            $scope.showCalendar = function (e) {\r\n                e.preventDefault();\r\n                e.stopPropagation();\r\n                $('#requiredByDate').datepicker(\"show\");\r\n            };\r\n\r\n            $timeout(function () {\r\n                if ($scope.firstShow) {\r\n                    $scope.firstShow = false;\r\n                }\r\n                else {\r\n                    $scope.$broadcast('refreshStTableProcess');\r\n                }\r\n            });\r\n\r\n            $scope.goBack = function () {\r\n                helperService.hideDatePickers('#requiredByDate');\r\n\r\n                if ($scope.mode === 'new' ||\r\n                    $scope.mode === 'edit' ||\r\n                    $scope.mode === 'process') {\r\n                    $scope.mode = 'management';\r\n                }\r\n                $rootScope.$broadcast('stockOrdering.showList');\r\n                helperService.closeDialog($element);\r\n            };\r\n\r\n            $scope.callbackModal = function (isDelete) {\r\n                var $windowElement = $('#undoVoidDialogModal');\r\n                helperService.closeDialog($windowElement);\r\n                if (!isDelete) {\r\n                    return;\r\n                }\r\n\r\n                if ($scope.deleteMode === 'task') {\r\n                    $.blockUI();\r\n                    stockOrderingService.voidPurchase($scope.deleteObject)\r\n                        .then(function (res) {\r\n                            $.unblockUI();\r\n                            $scope.goBack();\r\n                            $scope.needReloadAvailable = true;\r\n                        })\r\n                        .catch(function (err) {\r\n                            $.unblockUI();\r\n                            errorService.showError(err, null, null, null, true);\r\n                        });\r\n                }\r\n                else if ($scope.deleteMode === 'undo') {\r\n                    $.blockUI();\r\n                    stockOrderingService.undoPurchase($scope.deleteObject)\r\n                        .then(function (res) {\r\n                            $.unblockUI();\r\n                            $scope.goBack();\r\n                            $scope.needReloadAvailable = true;\r\n                        })\r\n                        .catch(function (err) {\r\n                            $.unblockUI();\r\n                            errorService.showError(err, null, null, null, true);\r\n                        });\r\n                }\r\n            };\r\n\r\n            $scope.voidItem = function (item) {\r\n                $scope.deleteMode = 'task';\r\n                $scope.deleteObject = item.TaskID || item.taskID;\r\n                var $windowElement = $('#undoVoidDialogModal');\r\n                helperService.showDialog($windowElement);\r\n            };\r\n\r\n            $scope.undoItem = function (item) {\r\n                $scope.deleteMode = 'undo';\r\n                $scope.deleteObject = item.TaskID || item.taskID;\r\n                var $windowElement = $('#undoVoidDialogModal');\r\n                helperService.showDialog($windowElement);\r\n            };\r\n\r\n            $scope.getStatusName = function (status) {\r\n                switch (status) {\r\n                    case \"DRAFT\":\r\n                        return \"Draft\";\r\n                    case \"ORDERED\":\r\n                        return \"Ordered\";\r\n                    case \"PICKING\":\r\n                        return \"Picking\";\r\n                    case \"IN TRANSIT\":\r\n                        return \"In transit\";\r\n                    case \"COMPLETED\":\r\n                        return \"Completed\";\r\n                    case \"INVOICE COMPLETED\":\r\n                        return \"Billed\";\r\n                    case \"PARTIALLY RECEIVED\":\r\n                        return \"Receiving\";\r\n                    case \"PO COMPLETED\":\r\n                        return \"Ordered\";\r\n                    case \"PO IN PROGRESS\":\r\n                        return \"Ordering\";\r\n                    case \"PARTIALLY RECEIVED / CREDITED\":\r\n                        return \"Receiving / Credited\";\r\n                    case \"PARTIALLY INVOICED\":\r\n                        return \"Partially billed\";\r\n                    case \"INVOICED\":\r\n                        return \"Billed\";\r\n                    case \"ORDERING\":\r\n                        return \"Orderring\";\r\n                }\r\n\r\n                return status;\r\n            };\r\n\r\n            $scope.getCanUndo = function (itemType, status, hasChild) {\r\n                return itemType === 'P'\r\n                    && (status === 'ORDERED' || status === 'PO COMPLETED') && !hasChild;\r\n            };\r\n\r\n            $scope.getCanVoid = function (type, status, hasChild) {\r\n                return type === 'P' && (status === 'ORDERED'\r\n                    || status === 'DRAFT' || status === 'PO COMPLETED' || status === 'PO IN PROGRESS' || status === 'ORDERING')\r\n                    && !hasChild;\r\n            };\r\n\r\n            //------------ Stock Order Details --------------------------------------                \r\n            $scope.addNew = function () {\r\n                $scope.originalTask = null;\r\n\r\n                var location = $scope.locations.filter(function (el) {\r\n                    return el.LocationID === configService.lastOutletID;\r\n                })\r\n\r\n                $scope.currentOrder = {\r\n                    dataStatus: 'DRAFT',\r\n                    supplierID: null,\r\n                    supplierName: null,\r\n                    location: configService.lastOutlet,\r\n                    locationName: location[0].Description,\r\n                    date: null,\r\n                    data: [],\r\n                    dataDisplay: [],\r\n                    showAvailability: true,\r\n                    statusName: $scope.getStatusName('DRAFT'),\r\n                    canUndo: $scope.getCanUndo('P', 'DRAFT', false),\r\n                    canVoid: false,\r\n                    Type: 'P',\r\n                    currencyRate: 1,\r\n                    saveAsDraft: false\r\n                };\r\n                $scope.originalTask = null;\r\n                $scope.mode = 'new';\r\n            };\r\n\r\n            $scope.currentDetails = function (row) {\r\n                $scope.originalTask = null;\r\n                //get existing\r\n                $.blockUI();\r\n\r\n                stockOrderingService.loadPurchaseTask(row.TaskID)\r\n                    .then(function (data) {\r\n                        $scope.originalTask = data.data;\r\n\r\n                        $scope.currentOrder = {\r\n                            dataStatus: $scope.originalTask.OrderStatus === 'DRAFT' ? 'DRAFT' : row.Status,\r\n                            number: row.Number,\r\n                            taskID: row.TaskID,\r\n                            location: row.ToName,\r\n                            date: row.date,\r\n                            status: row.Status,\r\n                            supplierID: $scope.originalTask.SupplierID,\r\n                            supplierName: $scope.originalTask.Supplier,\r\n                            data: [],\r\n                            dataDisplay: [],\r\n                            showAvailability: (row.Status === 'PO IN PROGRESS' || row.Status === 'DRAFT' || row.Status === 'ORDERING'\r\n                                || row.Status === 'ORDERED'\r\n                                || row.Status === 'PO COMPLETED') && !row.HasChild,\r\n                            statusName: $scope.getStatusName(row.Status),\r\n                            canUndo: $scope.getCanUndo('P', row.Status, row.HasChild),\r\n                            canVoid: $scope.getCanVoid('P', row.Status, row.HasChild),\r\n                            Type: 'P',\r\n                            currencyRate: $scope.originalTask.CurrencyRate,\r\n                            TaxRule: $scope.originalTask.TaxRule,\r\n                            TaxCalculation: $scope.originalTask.TaxCalculation,\r\n                            Terms: $scope.originalTask.Terms\r\n                        };\r\n                        var rules = $scope.referenceData.taxRules.filter(function (item) {\r\n                            return item.Description === $scope.originalTask.TaxRule;\r\n                        });\r\n                        if (rules && rules.length === 1) {\r\n                            $scope.currentOrder.TaxPercent = $scope.originalTask.TaxCalculation === 'Inclusive' ?\r\n                                rules[0].EffectivePercentInclusive : rules[0].EffectivePercentExclusive;\r\n                        }\r\n\r\n                        $scope.mode = 'edit';\r\n\r\n                        $scope.loadGridProcess();\r\n\r\n                        $timeout(function () {\r\n                            $('input, select').trigger('refresh');\r\n                        });\r\n                    })\r\n                    .finally(function () {\r\n                        $.unblockUI();\r\n                    });\r\n            };\r\n\r\n            $scope.loadGridProcess = function (sorting) {\r\n                if (!$scope.currentOrder.taskID) {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(null);\r\n                    return deferred.promise;\r\n                }\r\n\r\n                $.blockUI();\r\n                stockOrderingService.loadPurchaseOrderDetails($scope.currentOrder.taskID, 1,\r\n                    100000, sorting)\r\n                    .then(function (data) {\r\n                        $scope.currentOrder.data = [];\r\n                        $scope.currentOrder.dataDisplay = [];\r\n\r\n                        angular.forEach(data.data.Rows, function (el) {\r\n                            el.refID = uuid2.newguid();\r\n\r\n                            $scope.currentOrder.data.push(el);\r\n                        });\r\n\r\n                        $.unblockUI();\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve(null);\r\n                        return deferred2.promise;\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            };\r\n\r\n            $scope.needReloadAvailable = true;\r\n\r\n            $scope.loadAvailableProducts = function (supplierID) {\r\n                $scope.availableProducts = [];\r\n                $scope.displayAvailableProducts = [];\r\n                $scope.totalCount = 0;\r\n\r\n                return stockOrderingService.loadPurchaseAvailableProducts(supplierID)\r\n                    .then(function (res) {\r\n                        $scope.groupedAvailableProducts = res.data.products;\r\n                        angular.forEach(res.data.products, function (el) {\r\n                            if (el.FamilyID && el.Items && el.Items.length > 0) {\r\n                                angular.forEach(el.Items, function (item) {\r\n                                    item.IsVariation = true;\r\n                                    $scope.availableProducts.push(item);\r\n                                });\r\n\r\n                            } else {\r\n                                $scope.availableProducts.push(el);\r\n                            }\r\n                        });\r\n\r\n                        $scope.totalCount = res.data.totalCount;\r\n\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve($scope.availableProducts);\r\n                        return deferred2.promise;\r\n                    });\r\n            };\r\n\r\n            $scope.showScanDlg = function () {\r\n                if ($scope.needReloadAvailable) {\r\n                    $.blockUI();\r\n\r\n                    if ($scope.currentOrder.supplierID == null) {\r\n                        errorService.showError(\"Please select Supplier\");\r\n                        $.unblockUI();\r\n                        return;\r\n                    }\r\n\r\n                    $scope.loadAvailableProducts($scope.currentOrder.supplierID)\r\n                        .then(function (res) {\r\n                            $scope.needReloadAvailable = false;\r\n                            $rootScope.$broadcast(\"purchaseOrder.addLine\",\r\n                                {\r\n                                    currentOrder: $scope.currentOrder,\r\n                                    availableProducts: $scope.availableProducts,\r\n                                    groupedAvailableProducts: $scope.groupedAvailableProducts,\r\n                                    modifyTransferItemFunc: $scope.modifyTransferItem\r\n                                });\r\n                        })\r\n                        .finally(function () {\r\n                            $.unblockUI();\r\n                        });\r\n                } else {\r\n                    $rootScope.$broadcast(\"purchaseOrder.addLine\",\r\n                        {\r\n                            currentOrder: $scope.currentOrder,\r\n                            availableProducts: $scope.availableProducts,\r\n                            groupedAvailableProducts: $scope.groupedAvailableProducts,\r\n                            modifyTransferItemFunc: $scope.modifyTransferItem\r\n                        });\r\n                }\r\n            };\r\n\r\n            $scope.$watch('currentOrder.supplierID',\r\n                function (newValue, oldValue) {\r\n                    if (newValue !== oldValue) {\r\n                        // reload available products list\r\n                        if (!newValue) {\r\n                            $scope.availableProducts = [];\r\n                            $scope.displayAvailableProducts = [];\r\n                            $scope.totalCount = 0;\r\n                            return;\r\n                        }\r\n\r\n                        $.blockUI();\r\n                        $scope.loadAvailableProducts($scope.currentOrder.supplierID)\r\n                            .then(function (res) {\r\n                                if ($scope.firstData === false) {\r\n                                    $scope.currentOrder.data = [];\r\n                                } else {\r\n                                    $scope.firstData = false;\r\n                                }\r\n                                var items = $scope.suppliers.filter(function (l) {\r\n                                    return l.SupplierID === $scope.currentOrder.supplierID;\r\n                                });\r\n                                var supplierCurrency = $scope.referenceData.baseCurrency;\r\n                                if (items.length === 1) {\r\n                                    $scope.currentOrder.supplierName = items[0].Name;\r\n                                    $scope.currentOrder.supplierCurrency = items[0].Currency;\r\n                                }\r\n\r\n                                if ($scope.currentOrder.supplierCurrency !== $scope.referenceData.baseCurrency\r\n                                    && (!$scope.originalTask || $scope.originalTask.SupplierID !== $scope.currentOrder.supplierID)\r\n                                    && $scope.currentOrder.dataStatus === 'DRAFT') {\r\n                                    return stockOrderingService.getRate($scope.currentOrder.supplierCurrency,\r\n                                        $scope.referenceData.baseCurrency, helperService.getDateByFormat(new Date(), 'DD.MM.YYYY'));\r\n                                } else {\r\n                                    var deferred = $q.defer();\r\n                                    deferred.resolve($scope.originalTask ? { data: { rate: $scope.originalTask.CurrencyRate } } : null);\r\n                                    return deferred.promise;\r\n                                }\r\n                            })\r\n                            .then(function (data) {\r\n                                if (data) {\r\n                                    $scope.currentOrder.currencyRate = data.data.rate;\r\n                                } else {\r\n                                    $scope.currentOrder.currencyRate = 1;\r\n                                }\r\n\r\n                                var items = $scope.suppliers.filter(function (l) {\r\n                                    return l.SupplierID === $scope.currentOrder.supplierID;\r\n                                });\r\n                                if (items.length === 1) {\r\n                                    var supplier = items[0];\r\n                                    if ((!$scope.originalTask || $scope.originalTask.SupplierID !== $scope.currentOrder.supplierID)\r\n                                        && $scope.currentOrder.dataStatus === 'DRAFT') {\r\n                                        $scope.currentOrder.TaxRule = supplier.TaxRuleName;\r\n                                        $scope.currentOrder.TaxCalculation = supplier.TaxInclusive ? 'Inclusive' : 'Exclusive';\r\n                                        $scope.currentOrder.Terms = supplier.PaymentTermName;\r\n                                        $scope.currentOrder.TaxPercent = supplier.TaxInclusive ? supplier.TaxPercentInclusive\r\n                                            : supplier.TaxPercentExclusive;\r\n                                    }\r\n                                }\r\n\r\n                            })\r\n                            .finally(function () {\r\n                                $.unblockUI();\r\n                            });\r\n                    }\r\n                }\r\n            );\r\n\r\n            $scope.modifyTransferItem = function (row, isAbsolute, currentOrder, quantityObject, showMessageWhenAdded = false) {\r\n\r\n                if (row.FamilyID && !row.IsVariation) {\r\n                    $scope.openFamilyDlg(row);\r\n                    return;                }\r\n\r\n\r\n                var processed = false;\r\n                angular.forEach(currentOrder.data, function (el) {\r\n                    if (el.ProductID === row.ProductID) {\r\n                        processed = true;\r\n\r\n                        if (isAbsolute === true) {\r\n                            el.Quantity = quantityObject.Adjustment;\r\n                        }\r\n                        else {\r\n                            el.Quantity += 1;\r\n                        }\r\n\r\n                        return false;\r\n                    }\r\n                });\r\n\r\n                if (!processed) {\r\n                    var ne = {\r\n                        ID: row.OrderLineID || row.ProductID,\r\n                        OrderLineID: row.OrderLineID,\r\n                        ProductID: row.ProductID,\r\n                        ProductCode: row.ProductCode,\r\n                        Name: row.Name,\r\n                        UnitName: row.UnitName,\r\n                        UnitOfMeasure: row.UnitOfMeasure,\r\n                        OnHand: row.OnHand,\r\n                        Available: row.Available,\r\n                        OnOrder: row.OnOrder,\r\n                        Quantity: 1,\r\n                        CostingMethod: row.CostingMethod,\r\n                        FamilyID: row.FamilyID,\r\n                        FamilyName: row.FamilyName,\r\n                        Option1: row.Option1,\r\n                        Option2: row.Option2,\r\n                        Option3: row.Option3,\r\n                        refID: uuid2.newguid(),\r\n                        Comments: '',\r\n                        Price: row.Cost,\r\n                        TaxRule: row.TaxRule,\r\n                        TaxPercent: row.TaxPercent,\r\n                        Discount: 0,\r\n                        Items: null\r\n                    };\r\n\r\n                    if (isAbsolute === true) {\r\n                        ne.Quantity = quantityObject.Adjustment;\r\n                    }\r\n\r\n                    currentOrder.data.push(ne);\r\n\r\n                    if (showMessageWhenAdded) {\r\n                        var msg = gettextCatalog.getString(\"Product {{name}} was added.\", { name: ne.Name });\r\n                        $rootScope.$broadcast('snackbar.show', {message: msg});\r\n                    }\r\n                }\r\n            };\r\n\r\n            $scope.removeLineItem = function (row) {\r\n                for (var i = 0; i < $scope.currentOrder.data.length; i++) {\r\n                    if ($scope.currentOrder.data[i].ID === row.ID) {\r\n                        $scope.currentOrder.data.splice(i, 1);\r\n                        break;\r\n                    }\r\n                }\r\n            };\r\n\r\n            $scope.showSetQuantityDlg = function (row) {\r\n                if ($scope.currentOrder.dataStatus === 'DRAFT') {\r\n                    $scope.makeQuantityObject(row);\r\n                    $scope.showItemQuantityDlg(row.refID);\r\n                }\r\n            };\r\n\r\n            $scope.openFamilyDlg = function (row) {\r\n                var availableItems = $scope.groupedAvailableProducts.filter(function (item) { return item.FamilyID === row.FamilyID; });\r\n                var data = {\r\n                    familyID: row.FamilyID,\r\n                    familyName: row.FamilyName,\r\n                    selectedProducts: row.Items || [],\r\n                    availableProducts: availableItems[0].Items || [],\r\n                    isEditable: $scope.currentOrder.dataStatus === 'DRAFT',\r\n                    options: {\r\n                        Option1Values: availableItems[0].Option1Values,\r\n                        Option2Values: availableItems[0].Option2Values,\r\n                        Option3Values: availableItems[0].Option3Values\r\n                    }\r\n                };\r\n                $rootScope.$broadcast(\"stockFamilyMatrix.show\", data);\r\n            };\r\n\r\n            $scope.makeQuantityObject = function (row) {\r\n                $scope.quantityObject = {};\r\n                angular.copy(row, $scope.quantityObject);\r\n                $scope.quantityObject.Adjustment = !!$scope.quantityObject.Quantity ? $scope.quantityObject.Quantity : 1;\r\n                $scope.quantityObject.QuantityOnHand = !!row.QuantityOnHand ? row.QuantityOnHand : row.OnHand;\r\n                $scope.quantityObject.OnOrder = !!row.OnOrder ? row.OnOrder : row.OnOrder;\r\n                $scope.quantityObject.QuantityAvailable = !!row.QuantityAvailable ? row.QuantityAvailable : row.Available;\r\n                $scope.quantityObject.showOnHand = true;\r\n                $scope.quantityObject.hideBarcode = true;\r\n                $scope.quantityObject.readOnly = true;\r\n            };\r\n\r\n            $scope.showItemQuantityDlg = function (elID) {\r\n                $scope.quantityObject.value = $scope.quantityObject.Adjustment;\r\n                $timeout(function () {\r\n                    $scope.itemQuantityDlg.show(!elID ? '#quantityObject' : '#' + elID);\r\n                });\r\n            };\r\n\r\n            // callback\r\n            $scope.setQuantity = function (prm, event) {\r\n\r\n                $timeout(function () { $scope.itemQuantityDlg.hide(true); });\r\n\r\n                if (prm === true) {\r\n                    $timeout(function () {\r\n                        if (Number($scope.quantityObject.value) != NaN) {\r\n                            $scope.quantityObject.Adjustment = Number($scope.quantityObject.value);\r\n                        }\r\n                        else {\r\n                            $scope.quantityObject.Adjustment = 0;\r\n                        }\r\n                        $scope.adjustStockTransfer();\r\n                    });\r\n                }\r\n            };\r\n\r\n            $scope.adjustStockTransfer = function () {\r\n                angular.forEach($scope.currentOrder.data, function (el) {\r\n                    if (el.refID === $scope.quantityObject.refID) {\r\n                        processed = true;\r\n                        el.Quantity = $scope.quantityObject.Adjustment;\r\n                        return false;\r\n                    }\r\n                });\r\n            };\r\n\r\n            $scope.modifyOrder = function () {\r\n                helperService.hideDatePickers('#requiredByDate');\r\n\r\n                $.blockUI();\r\n\r\n                return stockOrderingService.modifyPurchaseOrder($scope.currentOrder, $scope.originalTask, $scope.referenceData)\r\n                    .then(function (res) {\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve(null);\r\n                        return deferred2.promise;\r\n                    })\r\n                    .then(function (res) {\r\n                        $.unblockUI();\r\n                        $scope.goBack();\r\n                        $scope.needReloadAvailable = true;\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err, null, null, null, true);\r\n                    });\r\n            };\r\n\r\n            $scope.currentLineCommentRow = '';\r\n            $scope.currentLineComment = { value: '' };\r\n\r\n            $scope.showChangeRowCommentDialog = function (row) {\r\n                $scope.currentLineCommentRow = row;\r\n                $scope.currentLineComment = { value: row.Comment };\r\n                var $windowElement = $('#addPurchaseCommentsDialogModal');\r\n                helperService.showDialog($windowElement);\r\n            };\r\n\r\n            $scope.closeAddLineCommentsDialog = function (cancel) {\r\n                if (cancel === false) {\r\n                    $scope.currentLineCommentRow.Comment = $scope.currentLineComment.value;  \r\n                }\r\n\r\n                var $windowElement = $('#addPurchaseCommentsDialogModal');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            // ------------- Reorder -------------------------------------------\r\n            $scope.reorderProducts = function () {\r\n                if (!$scope.currentOrder.supplierID) {\r\n                    errorService.showError(\"Please select Supplier\");\r\n                    return;\r\n                }\r\n\r\n                $.blockUI();\r\n                stockOrderingService.loadPurchaseReorderProducts(configService.lastOutletID,\r\n                    $scope.currentOrder.supplierID)\r\n                    .then(function (res) {\r\n                        if (res.data.totalCount > 0) {\r\n                            $scope.currentOrder.data = [];\r\n                            angular.forEach(res.data.products, function (row) {\r\n\r\n                                var ne = {\r\n                                    ID: row.ProductID,\r\n                                    ProductID: row.ProductID,\r\n                                    ProductCode: row.ProductCode,\r\n                                    Name: row.Name,\r\n                                    UnitName: row.UnitName,\r\n                                    Available: row.Available,\r\n                                    OnOrder: row.OnOrder,\r\n                                    Quantity: row.Quantity,\r\n                                    CostingMethod: row.CostingMethod,\r\n                                    Price: row.Price,\r\n                                    FamilyID: row.FamilyID,\r\n                                    FamilyName: row.FamilyName,\r\n                                    Option1: row.Option1,\r\n                                    Option2: row.Option2,\r\n                                    Option3: row.Option3,\r\n                                    Items: row.Items,\r\n                                    refID: uuid2.newguid(),\r\n                                    Comment: ''\r\n                                };\r\n\r\n                                $scope.currentOrder.data.push(ne);\r\n                            });\r\n                        } else {\r\n                            errorService.showError(\"Products to reorder not found\", null, null, null, true);\r\n                        }\r\n\r\n                    })\r\n                    .catch(function (err) {\r\n                        errorService.showError(err, null, null, null, true);\r\n                    })\r\n                    .finally(function () {\r\n                        $.unblockUI();\r\n                    })\r\n            };\r\n\r\n            // ------------- Family ---------------------------------------------\r\n            $scope.$on(\"stockFamilyMatrixPurchase.save\", function (event, data) {\r\n                data.items.forEach(function (item) {\r\n                    $scope.addFamilyItemToOrder(item, data.comments);\r\n                });\r\n            });\r\n\r\n            $scope.templates = [];\r\n            $scope.printingMode = null;\r\n            $scope.templateModel = {};\r\n\r\n            $scope.trustAsHtml = function (string) {\r\n                return $sce.trustAsHtml(string);\r\n            };\r\n            $scope.showPrintDialog = function (mode) {\r\n                $scope.printingMode = mode;\r\n                if ($scope.templates && $scope.templates.length > 0) {\r\n                    var $windowElement = $('#orderChooseTemplateDialogModal');\r\n                    helperService.showDialog($windowElement);\r\n                } else {\r\n                    $.blockUI();\r\n                    stockOrderingService.loadPurchaseOrderTemplates()\r\n                        .then(function (res) {\r\n                            $scope.templates = res.data.Templates;\r\n\r\n                            if ($scope.templates.length > 0) {\r\n                                $scope.templateModel.Template = $scope.templates[0].TemplateID;\r\n                            }\r\n                            var $windowElement = $('#orderChooseTemplateDialogModal');\r\n                            helperService.showDialog($windowElement);\r\n                            $timeout(function () {\r\n                                initSelects();\r\n                                $('select').trigger('refresh');\r\n                            });\r\n\r\n                            $.unblockUI();\r\n                        })\r\n                        .catch(function (err) {\r\n                            $.unblockUI();\r\n                            errorService.showError(err, null, null, null, true);\r\n                        });\r\n                }\r\n            };\r\n\r\n            $scope.processChosenTemplate = function (isOk) {\r\n                var $windowElement = $('#orderChooseTemplateDialogModal');\r\n                helperService.closeDialog($windowElement);\r\n\r\n                if (isOk) {\r\n                    if ($scope.printingMode == 'email') {\r\n                        $scope.showEmailDlg();\r\n                    } else {\r\n                        $scope.downloadOrder();\r\n                    }\r\n                }\r\n\r\n            };\r\n\r\n            $scope.downloadOrder = function () {\r\n                $.blockUI();\r\n\r\n                stockOrderingService.printPurchaseOrder($scope.currentOrder.TaskID || $scope.currentOrder.taskID, $scope.templateModel.Template)\r\n                    .then(function (res) {\r\n                        $.unblockUI();\r\n                        if (res.data.Success) {\r\n                            var url = res.data.Url;\r\n                            return fileDownloadService.downloadFile(url, res.data.FileName, 'application/pdf');\r\n                        } else {\r\n                            errorService.showError(\"Something went wrong. Try again later.\", null, null, null, true);\r\n                        }\r\n\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err, null, null, null, true);\r\n                    });\r\n            };\r\n\r\n            $scope.emailModel = {};\r\n\r\n            $scope.showEmailDlg = function () {\r\n                $.blockUI();\r\n                stockOrderingService.getPurchaseOrderEmail($scope.currentOrder.TaskID || $scope.currentOrder.taskID, $scope.templateModel.Template)\r\n                    .then(function (res) {\r\n                        $.unblockUI();\r\n\r\n                        $scope.emailModel = res.data.result;\r\n                        $scope.emailModel.BodyHtml = res.data.body;\r\n\r\n                        var $windowElement = $('#emailOrderDialogModal');\r\n                        helperService.showDialog($windowElement);\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err, null, null, null, true);\r\n                    });\r\n            };\r\n\r\n            $scope.trustAsHtml = function (string) {\r\n                return $sce.trustAsHtml(string);\r\n            };\r\n\r\n            $scope.emailOrder = function (isSend) {\r\n                if (isSend) {\r\n                    $.blockUI();\r\n                    stockOrderingService.sendPurchaseOrderEmail($scope.currentOrder.TaskID || $scope.currentOrder.taskID, $scope.emailModel)\r\n                        .then(function (res) {\r\n                            $.unblockUI();\r\n\r\n                            if (res.data.Success) {\r\n                                var $windowElement = $('#emailOrderDialogModal');\r\n                                helperService.closeDialog($windowElement);\r\n                            } else {\r\n                                if (res.data.ValidationState === \"Invalid\") {\r\n                                    errorService.showError(res.data.ValidationText || \"Something went wrong. Please try again later.\", null, null, null, true);\r\n                                }\r\n                            }\r\n\r\n                        })\r\n                        .catch(function (err) {\r\n                            $.unblockUI();\r\n                            errorService.showError(err, null, null, null, true);\r\n                        });\r\n\r\n                } else {\r\n                    var $windowElement = $('#emailOrderDialogModal');\r\n                    helperService.closeDialog($windowElement);\r\n                }\r\n\r\n            };\r\n\r\n             $scope.addFamilyItemToOrder = function (row, comments) {\r\n                const existing = $scope.currentOrder.data.find(function (x) { return x.ProductID === row.ProductID; });\r\n                if (existing) {\r\n                    existing.Quantity += row.Quantity;\r\n                } else {\r\n                    const newRec = {\r\n                        ID: row.ProductID,\r\n                        OrderLineID: row.OrderLineID,\r\n                        ProductID: row.ProductID,\r\n                        ProductCode: row.ProductCode,\r\n                        Name: row.Name,\r\n                        Unit: row.UnitName,\r\n                        OnHand: row.OnHand,\r\n                        Available: row.Available,\r\n                        OnOrder: row.OnOrder,\r\n                        Quantity: row.Quantity,\r\n                        CostingMethod: row.CostingMethod,\r\n                        FamilyID: row.FamilyID,\r\n                        FamilyName: row.FamilyName,\r\n                        Option1: row.Option1,\r\n                        Option2: row.Option2,\r\n                        Option3: row.Option3,\r\n                        refID: uuid2.newguid(),\r\n                        Comment: comments,\r\n                        Items: null,\r\n                        Price: row.Cost,\r\n                        TaxRule: row.TaxRule,\r\n                        TaxPercent: row.TaxPercent,\r\n                    };\r\n                    $scope.currentOrder.data = $scope.currentOrder.data.concat(newRec);\r\n                }\r\n            };\r\n        }]);","angular.module('mainApp').controller('stockTakeController', [\r\n    '$scope',\r\n    '$rootScope',\r\n    'loginService',\r\n    'gettextCatalog',\r\n    'helperService',\r\n    '$timeout',\r\n    'configService',\r\n    'errorService',\r\n    'outletService',\r\n    '$q',\r\n    'stockTakeService',\r\n    'soundService',\r\n    'printService',\r\n    'uuid2',\r\n    function(\r\n        $scope,\r\n        $rootScope,\r\n        loginService,\r\n        gettextCatalog,\r\n        helperService,\r\n        $timeout,\r\n        configService,\r\n        errorService,\r\n        outletService,\r\n        $q,\r\n        stockTakeService,\r\n        soundService,\r\n        printService,\r\n        uuid2\r\n    ) {\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n            //             $rootScope.$broadcast('login.show'); // show login page on application start\r\n        }\r\n        $scope.mode = '';\r\n\r\n        $scope.dataStatus = 'NEW';\r\n        $scope.activeTab = '0';\r\n        $scope.dataCount = 0;\r\n        $scope.totalPages = 0;\r\n        $scope.dataPage = 1;\r\n        $scope.dataPageDisplay;\r\n        $scope.itemsByPage = 20;\r\n        $scope.isLoading = false;\r\n\r\n        $scope.dataCountProcess = 0;\r\n        $scope.dataPageProcess = 1;\r\n        $scope.dataPageDisplayProcess;\r\n        $scope.itemsByPageProcess = 20;\r\n        $scope.isProcessLoading = false;\r\n        $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n        $scope.ifcss = { height: window.innerHeight * 0.9 - 200 + 'px' };\r\n        $scope.fcss = { height: window.innerHeight * 0.8 + 'px' };\r\n\r\n        $scope.liveSearch = {\r\n            categoryLiveSearchIsOpen: false,\r\n            brandLiveSearchIsOpen: false,\r\n            tagLiveSearchIsOpen: false\r\n        };\r\n\r\n        $scope.$watch('liveSearch.categoryLiveSearchIsOpen',\r\n            function (newValue, oldValue) {                \r\n                $timeout(function() {\r\n                    helperService.resizeModalTypeahead('#category','#editStocktakeModal', newValue);\r\n                },400);                \r\n            }\r\n        );\r\n        $scope.$watch('liveSearch.brandLiveSearchIsOpen',\r\n            function (newValue, oldValue) {\r\n                $timeout(function() {\r\n                    helperService.resizeModalTypeahead('#brand','#editStocktakeModal', newValue);\r\n                },400);\r\n            }\r\n        );\r\n        $scope.$watch('liveSearch.tagLiveSearchIsOpen',\r\n            function (newValue, oldValue) {                \r\n                $timeout(function() {\r\n                    helperService.resizeModalTypeahead('#tag','#editStocktakeModal', newValue);\r\n                },400);              \r\n            }\r\n        );\r\n\r\n        $scope.getDateByFormat = helperService.getDateByFormatAlreadyLocal;\r\n\r\n        $scope.datePickerReady = false;\r\n        $scope.prepareDatePicker = function() {\r\n            if ($scope.datePickerReady) return;\r\n\r\n            $scope.datePickerReady = true;\r\n            $timeout(function() {\r\n                var dateFormat = $scope.dateFormat,\r\n                    date = $('[name=\"expiryDate\"], [name=\"receivedDate\"]').datepicker({\r\n                        defaultDate: '-1w',\r\n                        numberOfMonths: 1,\r\n                        dateFormat: dateFormat,\r\n                        showButtonPanel: true,\r\n                        beforeShow: function(input) {\r\n                            setTimeout(function() {\r\n                                var buttonPane = $(input)\r\n                                    .datepicker('widget')\r\n                                    .find('.ui-datepicker-buttonpane');\r\n                                buttonPane.empty();\r\n                                $('<button>', {\r\n                                    text: 'Reset',\r\n                                    click: function() {\r\n                                        $.datepicker._clearDate(input);\r\n                                    }\r\n                                })\r\n                                    .appendTo(buttonPane)\r\n                                    .addClass('ui-datepicker-current ui-state-default ui-priority-primary ui-corner-all');\r\n                            }, 1);\r\n                        }\r\n                    });\r\n            });\r\n        };\r\n\r\n        $scope.prepareAddNew = function() {\r\n            var defaultAcc = $scope.defaultAccount \r\n                        && (!$scope.accounts || $scope.accounts.findIndex(x => x.account === $scope.defaultAccount) !== -1)\r\n                    ? $scope.defaultAccount \r\n                    : !!$scope.accounts && $scope.accounts.length > 0 ? $scope.accounts[0].account : '';\r\n\r\n            $scope.newStocktake = {\r\n                lockSell: true,\r\n                showOnhand: false,\r\n                name: 'Stocktake ' + moment(new Date()).format('LL'),\r\n                categories: [],\r\n                brands: [],\r\n                tags: [],\r\n                account: defaultAcc,\r\n                outletID: null\r\n            };\r\n\r\n            // select current outlet\r\n            angular.forEach($scope.outlets, function(el) {\r\n                if (el.id === configService.lastECSMappingOutletID) {\r\n                    $scope.newStocktake.outletID = configService.lastECSMappingOutletID;\r\n                    return false;\r\n                }\r\n            });\r\n\r\n            if ($scope.newStocktake.outletID)\r\n\r\n            $scope.selectedCategory = '';\r\n            $('#category').val('');\r\n            $scope.selectedBrand = '';\r\n            $('#brand').val('');\r\n            $scope.selectedTag = '';\r\n            $('#tag').val('');\r\n        };\r\n\r\n        $scope.prepareEdit = function(row) {\r\n            $scope.newStocktake = {\r\n                taskID: row.TaskID,\r\n                lockSell: row.LockSell,\r\n                showOnhand: row.IncludeQuantityOnHand,\r\n                name: row.Name,\r\n                outletID: row.OutletID,\r\n                account: !row.Account ? '' : row.Account,\r\n                categories: row.categoriesArr,\r\n                brands: row.brandsArr,\r\n                tags: row.tagsArr\r\n            };\r\n        };\r\n\r\n        $scope.selectedCategory = '';\r\n        $scope.selectedBrand = '';\r\n        $scope.selectedTag = '';\r\n        $scope.scanLocationID = '0';\r\n        $scope.scanLocationName = '';\r\n\r\n        $scope.stockTakesData = [];\r\n        $scope.categories = [];\r\n        $scope.brands = [];\r\n        $scope.tags = [];\r\n        $scope.outlets = [];\r\n        $scope.accounts = [];\r\n        $scope.defaultAccount = null;\r\n\r\n        $scope.loadData = function() {\r\n            $scope.accounts = [];\r\n            $scope.categories = [];\r\n            $scope.brands = [];\r\n            $scope.tags = [];\r\n            $scope.outlets = [];\r\n            $scope.dataCount = 0;\r\n            $scope.dataPageDisplay = 1;\r\n            $scope.dataPage = 1;\r\n\r\n            var p = outletService.getUserOulets(configService.loginUserID, true).then(function(data) {\r\n                // load outlets\r\n                angular.forEach(data.Outlets, function(el) {\r\n                    $scope.outlets.push({\r\n                        name: el.OutletName,\r\n                        id: el.EcsLocationMappingID\r\n                    });\r\n                });\r\n\r\n                var deferred = $q.defer();\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            });\r\n\r\n            var lst = stockTakeService.getData().then(function(data) {\r\n                $scope.brands = data.data.brands;\r\n                $scope.categories = data.data.categories;\r\n                $scope.tags = data.data.tags;\r\n                $scope.accounts = data.data.accounts;\r\n                $scope.defaultAccount = data.data.defaultAccount;\r\n                \r\n                if (data.data.defaultAccount) {\r\n                    if ($scope.accounts.findIndex(x => x.account === data.data.defaultAccount.account) === -1) {\r\n                        $scope.accounts = [$scope.defaultAccount].concat($scope.accounts);\r\n                    }\r\n                }\r\n\r\n                var deferred2 = $q.defer();\r\n                deferred2.resolve(true);\r\n                return deferred2.promise;\r\n            });\r\n\r\n            return $q.all([p, lst]);\r\n        };\r\n\r\n        const scrollReachBottomCallback = function() {\r\n            if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                $scope.selectPage($scope.dataPage + 1);\r\n            }\r\n        };\r\n        \r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        }\r\n\r\n        $scope.selectPage = function(page) {\r\n            $scope.dataPage = page;\r\n            $scope.$broadcast('refreshStTable');\r\n        };\r\n\r\n        $scope.loadGrid = function(sorting) {\r\n            var lst = stockTakeService.loadStocktakeList($scope.dataPage, $scope.itemsByPage, $scope.dataStatus, sorting).then(function(data) {\r\n                if ($scope.dataPage === 1) {\r\n                    $scope.stockTakesData = [];\r\n                }\r\n\r\n                $scope.dataPage = data.data.Page;\r\n                $scope.dataPageDisplay = data.data.Page;\r\n                getPages(data.data.Total);\r\n\r\n                angular.forEach(data.data.Rows, function(el) {\r\n                    var flt = JSON.parse(el.SearchParameters);\r\n                    var isPartial = false;\r\n                    if (!!flt.categories && flt.categories.length > 0) {\r\n                        el.categories = flt.categories.join(', ');\r\n                        el.categoriesArr = flt.categories;\r\n                        isPartial = true;\r\n                    } else el.categoriesArr = [];\r\n\r\n                    if (!!flt.brands && flt.brands.length > 0) {\r\n                        el.brands = flt.brands.join(', ');\r\n                        el.brandsArr = flt.brands;\r\n                        isPartial = true;\r\n                    } else el.brandsArr = [];\r\n\r\n                    if (!!flt.tags && flt.tags.length > 0) {\r\n                        el.tags = flt.tags.join(', ');\r\n                        el.tagsArr = flt.tags;\r\n                        isPartial = true;\r\n                    } else el.tagsArr = [];\r\n\r\n                    el.type = isPartial ? 'Partial' : 'Full';\r\n                    el.date = helperService.getDateByFormat(el.CreatedDate, 'LLL');\r\n                    $scope.stockTakesData.push(el);\r\n                });\r\n\r\n                var deferred = $q.defer();\r\n                deferred.resolve(true);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return lst;\r\n        };\r\n\r\n        $.blockUI();\r\n\r\n        $scope.onLoad = function() {\r\n            //$.blockUI();\r\n\r\n            //$scope.loadData().finally(function() {\r\n            //    $.unblockUI();\r\n            //});\r\n        };\r\n\r\n        $scope.$on('refreshStTable', function() {\r\n            $.blockUI();\r\n            $scope.isLoading = true;\r\n\r\n            var sort = {};\r\n            sort.FieldName = 'CreatedDate';\r\n            sort.Direction = 'desc';\r\n\r\n            $scope.loadGrid(sort).finally(function() {\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n            });\r\n        });\r\n\r\n        $scope.$watch('activeTab', function(newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                switch (newValue) {\r\n                    case '0':\r\n                        $scope.dataStatus = 'NEW';\r\n                        break;\r\n                    case '1':\r\n                        $scope.dataStatus = 'IN PROGRESS';\r\n                        break;\r\n                    case '2':\r\n                        $scope.dataStatus = 'COMPLETED';\r\n                        break;\r\n                    case '3':\r\n                        $scope.dataStatus = 'VOIDED';\r\n                        break;\r\n                }\r\n\r\n                $scope.dataPage = 1;\r\n                $scope.$broadcast('refreshStTable');\r\n            }\r\n        });\r\n\r\n        $scope.firstAddFormShow = true;\r\n\r\n        // code below to give a chance to add event handlers before form is shown\r\n        $timeout(function() {\r\n            $scope.mode = 'management';\r\n\r\n            $.blockUI();\r\n            $scope.loadData().finally(function () {\r\n                $.unblockUI();\r\n                $scope.$broadcast('refreshStTable');\r\n            });\r\n\r\n        });\r\n\r\n        $timeout(function() {\r\n            if ($scope.firstAddFormShow) {\r\n                $scope.firstAddFormShow = false;\r\n                initSelects();\r\n            } else {\r\n                $('input, select').trigger('refresh');\r\n            }\r\n        }, 0);\r\n\r\n        $scope.addNew = function() {\r\n            $scope.prepareAddNew();\r\n            $scope.mode = 'new';\r\n            var element = $('#editStocktakeModal');\r\n            helperService.showDialog(element, function() {\r\n                initSelects();\r\n                $timeout(function() {\r\n                    $('input, select').trigger('refresh');\r\n                });\r\n            });\r\n        };\r\n\r\n        $scope.goBack = function() {\r\n            if ($scope.mode == 'new' || $scope.mode == 'edit') {\r\n                var element = $('#editStocktakeModal');\r\n                helperService.closeDialog(element);\r\n            }\r\n\r\n            if ($scope.mode == 'process') {\r\n                var element = $('#stockTakeProcessModal');\r\n                helperService.closeDialog(element);\r\n            }\r\n\r\n            if ($scope.mode == 'new' || $scope.mode == 'edit' || $scope.mode == 'process') {\r\n                $scope.mode = 'management';\r\n                $scope.$broadcast('refreshStTable');\r\n            }\r\n        };\r\n\r\n        $scope.editStocktake = function(row) {\r\n            $scope.prepareEdit(row);\r\n            $scope.mode = 'edit';\r\n\r\n            var element = $('#editStocktakeModal');\r\n            helperService.showDialog(element, function() {\r\n                initSelects();\r\n                $timeout(function() {\r\n                    $('input, select').trigger('refresh');\r\n                });\r\n            });\r\n        };\r\n\r\n        $scope.modifyStocktake = function() {\r\n            var isNew = $scope.mode == 'new';\r\n\r\n            $.blockUI();\r\n            stockTakeService\r\n                .modifyTask($scope.newStocktake, isNew)\r\n                .then(function(res) {\r\n                    $.unblockUI();\r\n                    $scope.goBack();\r\n\r\n                    if ($scope.stockTakesData.length >= $scope.itemsByPage) $scope.dataPage++;\r\n\r\n                    $scope.$broadcast('refreshStTable');\r\n                })\r\n                .catch(function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n        };\r\n\r\n        $scope.deleteStocktake = function(row) {\r\n            $scope.deleteMode = 'task';\r\n            $scope.deleteObject = row;\r\n\r\n            var message = gettextCatalog.getString('Would you like to delete') + '<br/>' + row.Name + '<br/>' + gettextCatalog.getString('stocktake?');\r\n\r\n            helperService.showCustomDialog(gettextCatalog.getString('Delete stocktake')\r\n            , message\r\n            );\r\n        };\r\n\r\n        $scope.callbackModal = function() {\r\n            if ($scope.deleteMode == 'task') {\r\n                $.blockUI();\r\n                stockTakeService\r\n                    .deleteStocktake($scope.deleteObject.TaskID)\r\n                    .then(function() {\r\n                        $.unblockUI();\r\n                        if ($scope.stockTakesData.length <= 1 && $scope.dataPage > 1) $scope.dataPage--;\r\n\r\n                        $scope.$broadcast('refreshStTable');\r\n                    })\r\n                    .catch(function(err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            } else if ($scope.deleteMode == 'start') {\r\n                $.blockUI();\r\n                stockTakeService\r\n                    .startStocktake($scope.deleteObject.TaskID)\r\n                    .then(function() {\r\n                        $.unblockUI();\r\n                        $scope.activeTab = '1'; // grid will be updated automatically\r\n\r\n                        $timeout(function() {\r\n                            $('#activeTab').trigger('change');\r\n                        });\r\n                    })\r\n                    .catch(function(err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            } else if ($scope.deleteMode == 'complete') {\r\n                $scope.completeStocktake();\r\n            } else if ($scope.deleteMode == 'cancel') {\r\n                $scope.cancelStocktake();\r\n            } else if ($scope.deleteMode == 'undo') {\r\n                $scope.undoStocktake();\r\n            }\r\n        };\r\n\r\n        $scope.startStocktake = function(row) {\r\n            $scope.deleteMode = 'start';\r\n            $scope.deleteObject = row;\r\n\r\n            var message = gettextCatalog.getString('Would you like to start') + '<br/>' + row.Name + '<br/>' + gettextCatalog.getString('stocktake?');\r\n\r\n            helperService.showCustomDialog(\r\n                gettextCatalog.getString('Start stocktake'),\r\n                message,\r\n                gettextCatalog.getString('OK')\r\n            );\r\n        };\r\n\r\n        // grid control\r\n        $scope.gridControl = function(tableState) {\r\n            var sort = {};\r\n\r\n            if (!!tableState.sort.predicate) {\r\n                sort.FieldName = tableState.sort.predicate;\r\n                sort.Direction = tableState.sort.reverse ? 'desc' : 'asc';\r\n            }\r\n\r\n            $.blockUI();\r\n            $scope.loadGrid(sort).finally(function() {\r\n                $.unblockUI();\r\n            });\r\n        };\r\n\r\n        $scope.selectPage = function(page) {\r\n            $scope.dataPage = page;\r\n            $scope.$broadcast('refreshStTable');\r\n        };\r\n\r\n        // live search for brands, tags, categories\r\n        $scope.liveSearchCategory = function(val) {\r\n            return stockTakeService.filterData($scope.categories, val, 10);\r\n        };\r\n\r\n        $scope.liveSearchCategorySelected = function(item, model, label, event) {\r\n            $scope.selectedCategory = '';\r\n            $('#category').val('');\r\n            stockTakeService.addTextToArray($scope.categories, model, $scope.newStocktake.categories);\r\n            helperService.hideKeyboard();\r\n        };\r\n\r\n        $scope.liveSearchCategoryFinished = function(m) {\r\n            return null;\r\n        };\r\n\r\n        $scope.liveSearchBrand = function(val) {\r\n            return stockTakeService.filterData($scope.brands, val, 10);\r\n        };\r\n\r\n        $scope.liveSearchBrandSelected = function(item, model, label, event) {\r\n            $scope.selectedBrand = '';\r\n            $('#brand').val('');\r\n            stockTakeService.addTextToArray($scope.brands, model, $scope.newStocktake.brands);\r\n            helperService.hideKeyboard();\r\n        };\r\n\r\n        $scope.liveSearchBrandFinished = function(m) {\r\n            return null;\r\n        };\r\n\r\n        $scope.liveSearchTag = function(val) {\r\n            return stockTakeService.filterData($scope.tags, val, 10);\r\n        };\r\n\r\n        $scope.liveSearchTagSelected = function(item, model, label, event) {\r\n            $scope.selectedTag = '';\r\n            $('#tag').val('');\r\n            stockTakeService.addTextToArray($scope.tags, model, $scope.newStocktake.tags);\r\n            helperService.hideKeyboard();\r\n        };\r\n\r\n        $scope.liveSearchTagFinished = function(m) {\r\n            return null;\r\n        };\r\n\r\n        $scope.removeFromList = function(arr, item) {\r\n            stockTakeService.removeTextFromArray(arr, item);\r\n        };\r\n\r\n        // stocktake process part\r\n\r\n        $scope.currentStocktake = {\r\n            bins: [],\r\n            sncnts: ['0', '1'],\r\n            scanLocationID: '0',\r\n            searchText: ''\r\n        };\r\n\r\n        $scope.$watch('currentStocktake.scanLocationID', function(newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.currentStocktake.scanLocationName = '';\r\n                angular.forEach($scope.currentStocktake.bins, function(el) {\r\n                    if (newValue == el.BinID) {\r\n                        $scope.currentStocktake.scanLocationName = el.Name;\r\n                        return false;\r\n                    }\r\n                });\r\n\r\n                $scope.fixQuantityObjectLocation();\r\n            }\r\n        });\r\n\r\n        $scope.prepareCurrentStocktake = function(row) {\r\n            $scope.currentStocktake.currentTask = row;\r\n            $scope.currentStocktake.name = row.Name;\r\n            $scope.currentStocktake.taskID = row.TaskID;\r\n            $scope.currentStocktake.locationID = row.LocationID;\r\n            $scope.currentStocktake.showOnHand = row.IncludeQuantityOnHand == true;\r\n            $scope.currentStocktake.bins = [];\r\n            $scope.currentStocktake.scanLocationID = row.LocationID;\r\n            $scope.currentStocktake.status = row.Status;\r\n            $scope.currentStocktake.searchText = '';\r\n        };\r\n\r\n        $scope.showProcessStocktake = function(row) {\r\n            $scope.dataCountProcess = 0;\r\n            $scope.dataPageProcess = 1;\r\n            $scope.totalPagesProcess = 0;\r\n\r\n            $scope.prepareCurrentStocktake(row);\r\n\r\n            $scope.mode = 'process';\r\n            $scope.loadGridProcess();\r\n\r\n            var element = $('#stockTakeProcessModal');\r\n            $scope.currentStocktake.searchText = '';\r\n\r\n            helperService.showDialog(element, function() {\r\n                initPagerOnScroll(scrollReachBottomCallbackProcess, element.find('.dp_modal-body'));\r\n            });\r\n\r\n            $.blockUI();\r\n            stockTakeService\r\n                .getLocationBins($scope.currentStocktake.locationID)\r\n                .then(function(res) {\r\n                    $scope.currentStocktake.bins = [];\r\n                    if (res.data.locations.length > 0) {\r\n                        $scope.currentStocktake.bins = res.data.locations;\r\n                        $scope.currentStocktake.bins.unshift({\r\n                            BinID: $scope.currentStocktake.locationID,\r\n                            ParentID: $scope.currentStocktake.locationID,\r\n                            Name: 'Not set'\r\n                        });\r\n                    }\r\n\r\n                    $.unblockUI();\r\n                })\r\n                .catch(function() {\r\n                    $.unblockUI();\r\n                });\r\n        };\r\n\r\n        const scrollReachBottomCallbackProcess = function() {\r\n            if (!$scope.isProcessLoading && $scope.dataPageProcess < $scope.totalPagesProcess) {\r\n                $scope.selectPageProcess($scope.dataPageProcess + 1);\r\n            }\r\n        };\r\n\r\n        function getPagesProcess(total) {\r\n            var step = $scope.itemsByPageProcess;\r\n            $scope.totalPagesProcess = Math.ceil(total / step);\r\n            if ($scope.totalPagesProcess === 0) {\r\n                $scope.totalPagesProcess = 1;\r\n            }\r\n        }\r\n\r\n        $scope.selectPageProcess = function(page) {\r\n            $scope.dataPageProcess = page;\r\n            $scope.loadGridProcess();\r\n        };\r\n\r\n        $scope.loadGridProcess = function(reloadAll) {\r\n            $.blockUI();\r\n            $scope.isProcessLoading = true;\r\n\r\n            var page = $scope.dataPageProcess;\r\n            var itemsInPage = $scope.itemsByPageProcess;\r\n\r\n            if (reloadAll === true) {\r\n                page = 1;\r\n                itemsInPage = $scope.dataPageProcess * $scope.itemsByPageProcess;\r\n            }\r\n\r\n            stockTakeService\r\n                .loadStocktake($scope.currentStocktake.taskID, page, itemsInPage, {}, $scope.currentStocktake.searchText, true)\r\n                .then(function(data) {\r\n                    if (page === 1) {\r\n                        $scope.currentStocktake.data = [];\r\n                    }\r\n\r\n                    if (reloadAll === true) {\r\n                        $scope.dataCountProcess = data.data.Total;\r\n                        getPagesProcess(data.data.Total);\r\n                    } else {\r\n                        $scope.dataCountProcess = data.data.Total;\r\n                        $scope.dataPageProcess = data.data.Page;\r\n                        $scope.dataPageDisplayProcess = data.data.Page;\r\n                        getPagesProcess(data.data.Total);\r\n                    }\r\n\r\n                    angular.forEach(data.data.Rows, function(el) {\r\n                        $scope.currentStocktake.data.push(el);\r\n                    });\r\n                })\r\n                .finally(function() {\r\n                    $.unblockUI();\r\n                    $scope.isProcessLoading = false;\r\n                });\r\n        };\r\n\r\n        $scope.rowClicked = function(row) {\r\n            if ($scope.dataStatus == 'NEW') {\r\n                $scope.startStocktake(row);\r\n            } else {\r\n                $scope.showProcessStocktake(row);\r\n            }\r\n        };\r\n\r\n        $scope.stockTakeScanData = [];\r\n        $scope.availableProducts = [];\r\n\r\n        // here the list of available items will be constructed\r\n        $scope.prepareScanData = function (arr) {\r\n            $scope.stockTakeScanData = [];\r\n\r\n            angular.forEach(arr, function (el) {\r\n                if (!!el.ExpiryDate) el.ExpiryDate2 = el.ExpiryDate;\r\n                $scope.stockTakeScanData.push(el);\r\n            });\r\n\r\n            $scope.availableProducts = $scope.stockTakeScanData;\r\n        };\r\n\r\n        // grid control\r\n        $scope.gridControlProcess = function(tableState) {\r\n            var sort = {};\r\n            if ($scope.mode != 'process') return;\r\n\r\n            if (!!tableState.sort.predicate) {\r\n                sort.FieldName = tableState.sort.predicate;\r\n                sort.Direction = tableState.sort.reverse ? 'desc' : 'asc';\r\n            }\r\n\r\n            $.blockUI();\r\n            $scope.loadGridProcess(sort).finally(function() {\r\n                $.unblockUI();\r\n            });\r\n        };\r\n\r\n        // stocktake item set quantity\r\n        $scope.quantityObject = {};\r\n        $scope.showSetQuantityDlg = function(row) {\r\n            if ($scope.currentStocktake.status == 'IN PROGRESS') {\r\n                $scope.makeQuantityObject(row);\r\n                helperService.showDialog('#stocktakeSetQuantityDlg', function() {\r\n                    initSelects();\r\n                });\r\n                $scope.prepareDatePicker();\r\n            }\r\n        };\r\n\r\n        $scope.makeQuantityObject = function(row) {\r\n            $scope.quantityObject = angular.copy(row);\r\n            $scope.quantityObject.ParentLocationID = $scope.currentStocktake.locationID;\r\n            $scope.quantityObject.showOnHand = $scope.currentStocktake.showOnHand;\r\n\r\n            if (row.LocationID)\r\n                $scope.quantityObject.LocationID = row.LocationID;\r\n            else\r\n                $scope.quantityObject.LocationID = $scope.currentStocktake.locationID;\r\n//                $scope.currentStocktake.scanLocationID = row.LocationID;\r\n\r\n            if (!!$scope.quantityObject.ExpiryDate) $scope.quantityObject.ExpiryDate2 = $scope.quantityObject.ExpiryDate;\r\n\r\n            if ($scope.quantityObject.CostingMethod == 'FISN' || $scope.quantityObject.CostingMethod == 'FESN' || $scope.quantityObject.CostingMethod == 'SN') {\r\n                if ($scope.quantityObject.Adjustment > 1) $scope.quantityObject.Adjustment = 1;\r\n            }\r\n\r\n            $timeout(function() {\r\n                $('input, select').trigger('refresh');\r\n            });\r\n        };\r\n\r\n        $scope.itemQuantityDlg = null; // is bound to discount popover object with methods from directive\r\n\r\n        $scope.showItemQuantityDlg = function() {\r\n            $scope.quantityObject.value = $scope.quantityObject.Adjustment;\r\n            $timeout(function() {\r\n                $scope.itemQuantityDlg.show('#quantityObject');\r\n            });\r\n        };\r\n\r\n        // callback\r\n        $scope.setQuantity = function(prm, event) {\r\n            $timeout(function() {\r\n                $scope.itemQuantityDlg.hide(true);\r\n            });\r\n\r\n            if (prm === true) {\r\n                $timeout(function() {\r\n                    $scope.quantityObject.Adjustment = $scope.quantityObject.value;\r\n                });\r\n            } else if (typeof prm == 'string') {\r\n                if (prm === 'clean') {\r\n                }\r\n            }\r\n        };\r\n\r\n        $scope.adjustStocktakeAbsolute = function() {\r\n            $.blockUI();\r\n\r\n            stockTakeService\r\n                .adjustStocktakeAbsolute(\r\n                    $scope.currentStocktake.taskID,\r\n                    $scope.quantityObject.ID,\r\n                    $scope.quantityObject.Adjustment,\r\n                    $scope.quantityObject.LocationID,\r\n                    $scope.quantityObject.BatchSN,\r\n                    $scope.quantityObject.ExpiryDate,\r\n                    $scope.quantityObject.ProductID,\r\n                    $scope.quantityObject.ReceivedDate\r\n                )\r\n                .then(function(res) {\r\n                    $.unblockUI();\r\n                    $scope.loadGridProcess(true);\r\n                    return soundService.playGood();\r\n                })\r\n                .catch(function(err) {\r\n                    soundService.playBad();\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n        };\r\n\r\n        // stocktakeScan\r\n        $scope.stocktakeScanActiveTab = 0;\r\n        $scope.scanError = null;\r\n        $scope.scanSuccess = null;\r\n        $scope.isScanDlgVisible = false;\r\n        $scope.firstScanStart = true;\r\n        $scope.multiScanText = '';\r\n\r\n        $scope.setMultiscan = function(v) {\r\n            $scope.multiScanText = v;\r\n            $('#scanArea').val(v);\r\n        };\r\n\r\n        $scope.getMultiscan = function() {\r\n            $scope.multiScanText = $('#scanArea').val();\r\n            return $scope.multiScanText;\r\n        };\r\n\r\n        $scope.scanComboInit = true;\r\n\r\n        $scope.showScanDlg = function() {\r\n            $scope.scanError = null;\r\n            $scope.scanSuccess = null;\r\n            $scope.quantityObject = {};\r\n            $scope.setMultiscan('');\r\n            $scope.stockTakeScanData = [];\r\n            $scope.availableProducts = [];\r\n            $('#manualScanInput').val('');\r\n\r\n            helperService.showDialog('#stocktakeScanDlg', function() { });\r\n\r\n            if ($scope.scanComboInit) {\r\n                $scope.scanComboInit = false;\r\n                if ($('#stocktakeScanDlg select').length > 0) {\r\n                    $('#stocktakeScanDlg select').styler();\r\n                }\r\n            }\r\n\r\n            $scope.isScanDlgVisible = true;\r\n            printService.reconnect();\r\n            //printService.disconnect().then(function () { return printService.connect(); });\r\n\r\n            if ($scope.firstScanStart) {\r\n                $scope.firstScanStart = false;\r\n                $('#stocktakeScanDlg')\r\n                    .find('ul li a')\r\n                    .click(function(evt) {\r\n                        var v = Number(\r\n                            $(this)\r\n                                .parent()\r\n                                .attr('index')\r\n                        );\r\n\r\n                        $timeout(function() {\r\n                            $scope.stocktakeScanActiveTab = v;\r\n                        });\r\n                    });\r\n            }\r\n\r\n            $timeout(function() {\r\n                $('input, select').trigger('refresh');\r\n            });\r\n            $scope.prepareDatePicker();\r\n        };\r\n\r\n        $scope.hideScanDlg = function() {\r\n            //printService.disconnect();\r\n            $scope.isScanDlgVisible = false;\r\n            helperService.closeDialog('#stocktakeScanDlg');\r\n            $scope.loadGridProcess(true);\r\n        };\r\n\r\n        $scope.fixQuantityObjectLocation = function() {\r\n            if (!$scope.currentStocktake.scanLocationID) {\r\n                $scope.quantityObject.LocationID = $scope.currentStocktake.locationID;\r\n                $scope.quantityObject.LocationName = '';\r\n            } else {\r\n                $scope.quantityObject.LocationID = $scope.currentStocktake.scanLocationID;\r\n                $scope.quantityObject.LocationName = $scope.currentStocktake.scanLocationID === $scope.currentStocktake.locationID ?\r\n                    '' :\r\n                    $scope.currentStocktake.scanLocationName;\r\n            }\r\n        };\r\n\r\n        $scope.scanStocktake = function() {\r\n            $scope.scanError = null;\r\n            $scope.scanSuccess = null;\r\n            $scope.fixQuantityObjectLocation();\r\n\r\n            if ($scope.stocktakeScanActiveTab == 2 && !!$scope.quantityObject.ID) {\r\n                $.blockUI();\r\n\r\n                return stockTakeService\r\n                    .adjustStocktakeAbsolute(\r\n                        $scope.currentStocktake.taskID,\r\n                        $scope.quantityObject.ID,\r\n                        $scope.quantityObject.Adjustment,\r\n                        $scope.quantityObject.LocationID,\r\n                        $scope.quantityObject.BatchSN,\r\n                        $scope.quantityObject.ExpiryDate,\r\n                        $scope.quantityObject.ProductID,\r\n                        $scope.quantityObject.ReceivedDate\r\n                    )\r\n                    .then(function(d) {\r\n                        $.unblockUI();\r\n                        $scope.scanSuccess = 'Product ' + $scope.quantityObject.Barcode + ' has been updated with stocktake quantity ' + $scope.quantityObject.Adjustment;\r\n                        $scope.quantityObject = {};\r\n                        $scope.loadGridProcess(true);\r\n                        return soundService.playGood();\r\n                    })\r\n                    .catch(function(err) {\r\n                        soundService.playBad();\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            } else if ($scope.stocktakeScanActiveTab == 1 && !!$scope.getMultiscan() && $scope.getMultiscan().length > 0) {\r\n                var searchValue =  $scope.getMultiscan();\r\n\r\n                $scope.setMultiscan('');\r\n                if (searchValue.length > 0) {\r\n                    \r\n                    var prm = stockTakeService.scanInventoryMode($scope.currentStocktake.taskID, $scope.currentStocktake.scanLocationID, searchValue)\r\n\r\n                    $.blockUI();\r\n\r\n                    prm.then(function(resp){\r\n                        $.unblockUI();\r\n\r\n                        if (resp && resp.data && resp.data.length > 0) {\r\n                            // error\r\n                            var codes = resp.data.join(\"\\n\");\r\n                            $scope.setMultiscan(codes);\r\n\r\n                            $scope.scanError =\r\n                                'Some of the barcodes supplied could not be matched to any products or more than one product is found per supplied barcode. Not processed barcodes are listed in the box below.';\r\n                        } else {\r\n                            $scope.scanSuccess = 'All barcodes were recognised and stocktake quantity has been incremented for products related to these barcodes';\r\n                        }\r\n\r\n                    }).catch(function(err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n                }\r\n            } else if ($scope.stocktakeScanActiveTab == 0) {\r\n                $.blockUI();\r\n\r\n                return stockTakeService\r\n                    .adjustStocktakeRelative(\r\n                        $scope.currentStocktake.taskID,\r\n                        $scope.quantityObject.ID,\r\n                        $scope.quantityObject.value,\r\n                        $scope.quantityObject.LocationID,\r\n                        $scope.quantityObject.BatchSN,\r\n                        $scope.quantityObject.ExpiryDate,\r\n                        $scope.quantityObject.ProductID,\r\n                        $scope.quantityObject.ReceivedDate\r\n                    )\r\n                    .then(function(d) {\r\n                        $.unblockUI();\r\n                        $scope.scanSuccess = 'Product ' + $scope.quantityObject.Barcode + ' has been updated with stocktake quantity ' + ($scope.quantityObject.value);\r\n                        $scope.quantityObject.ID = null;\r\n                        return soundService.playGood();\r\n                    })\r\n                    .catch(function(err) {\r\n                        soundService.playBad();\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            }\r\n        };\r\n\r\n        $scope.processSingleScan = function(barcode) {\r\n            return stockTakeService\r\n                .search($scope.currentStocktake.taskID, barcode)\r\n                .then(function(res) {\r\n                    if (res.data.Rows.length != 1) {\r\n                        $scope.setMultiscan($scope.getMultiscan() + barcode + String.fromCharCode(13, 10));\r\n                    } else {\r\n                       $scope.fixQuantityObjectLocation();\r\n\r\n                        return stockTakeService\r\n                            .adjustStocktakeRelative(\r\n                                $scope.currentStocktake.taskID,\r\n                                res.data.Rows[0].ID,\r\n                                1,\r\n                                $scope.quantityObject.LocationID,\r\n                                $scope.quantityObject.BatchSN,\r\n                                $scope.quantityObject.ExpiryDate,\r\n                                $scope.quantityObject.ProductID\r\n                            )\r\n                            .catch(function(err) {\r\n                                $scope.setMultiscan($scope.getMultiscan() + barcode + String.fromCharCode(13, 10));\r\n                            });\r\n                    }\r\n                })\r\n                .catch(function(err) {\r\n                    $scope.setMultiscan($scope.getMultiscan() + barcode + String.fromCharCode(13, 10));\r\n                });\r\n        };\r\n\r\n        $scope.$watch('stocktakeScanActiveTab', function(newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                $scope.scanError = null;\r\n                $scope.scanSuccess = null;\r\n                $scope.quantityObject = {};\r\n                $scope.stockTakeScanData = [];\r\n                $scope.availableProducts = [];\r\n\r\n                switch (newValue) {\r\n                    case 0: // auto mode activate scanner\r\n                        break;\r\n                    case 1:\r\n                        break;\r\n                    case 2:\r\n                        $('#manualScanInput').val('');\r\n                        break;\r\n                }\r\n            }\r\n        });\r\n\r\n        $scope.selectScanProduct = function(row) {\r\n            //$scope.fixQuantityObjectLocation();\r\n\r\n            if ($scope.stocktakeScanActiveTab == 0) {\r\n                // auto mode - only increment\r\n                $.blockUI();\r\n\r\n                if (row.CostingMethod == 'FIFO' || !!row.BatchSN) {\r\n                    return stockTakeService\r\n                        .adjustStocktakeRelative($scope.currentStocktake.taskID, row.ID, 1, $scope.quantityObject.LocationID, row.BatchSN, row.ExpiryDate, row.ProductID)\r\n                        .then(function(d) {\r\n                            $.unblockUI();\r\n                            $scope.scanSuccess = 'Product ' + row.Barcode + ' has been updated with stocktake quantity ' + (row.Adjustment + 1);\r\n                            return soundService.playGood();\r\n                        })\r\n                        .catch(function(err) {\r\n                            soundService.playBad();\r\n                            $.unblockUI();\r\n                            errorService.showError(err);\r\n                        })\r\n                        .finally(function() {\r\n                            $scope.stockTakeScanData = [];\r\n                            $scope.availableProducts = [];\r\n                        });\r\n                } else {\r\n                    $.unblockUI();\r\n                    $scope.makeQuantityObject(row);\r\n                    // $scope.fixQuantityObjectLocation();\r\n                    $scope.stockTakeScanData = [];\r\n                    $scope.availableProducts = [];\r\n                    $scope.scanSuccess = 'Please, set Batch/SN for the product';\r\n                }\r\n            } else if ($scope.stocktakeScanActiveTab == 2) {\r\n                $scope.scanError = null;\r\n                $scope.scanSuccess = null;\r\n                $scope.makeQuantityObject(row);\r\n                $scope.stockTakeScanData = [];\r\n                $scope.availableProducts = [];\r\n            }\r\n        };\r\n\r\n        $scope.manualPress = function(event) {\r\n            if (event.which === 13) {\r\n                var v = $('#manualScanInput').val();\r\n                if (!!v && v.length > 0) {\r\n                    $rootScope.$broadcast('scan.barcode', v);\r\n                }\r\n            }\r\n        };\r\n\r\n        $scope.$on('scan.barcode', function(event, barcode) {\r\n            console.log('stockTakeService scan.barcode');\r\n           //  $scope.fixQuantityObjectLocation();\r\n\r\n            if ($scope.stocktakeScanActiveTab != 1 && $scope.isScanDlgVisible) {\r\n                $scope.scanError = null;\r\n                $scope.scanSuccess = null;\r\n                $scope.quantityObject = {};\r\n                $scope.stockTakeScanData = [];\r\n                $scope.availableProducts = [];\r\n\r\n                $.blockUI();\r\n                stockTakeService.search($scope.currentStocktake.taskID, barcode)\r\n                    .then(function (res) {\r\n                        if (res.data.Rows.length === 0) {\r\n                            $.unblockUI();\r\n                            // $scope.scanError = 'Product not found. Scan another barcode';\r\n                            var msg = gettextCatalog.getString(\"Product not found. Please scan another barcode.\");\r\n                            $rootScope.$broadcast('snackbar.show', {\r\n                                message: msg,\r\n                                type: 'error'\r\n                            });\r\n        \r\n                            return soundService.playBad();\r\n                        } else if ($scope.stocktakeScanActiveTab == 0) {\r\n                            if (res.data.Rows.length > 1 || (res.data.Rows[0] && res.data.Rows[0].CostingMethod !== 'FIFO' \r\n                                                                                && res.data.Rows[0].BatchSN \r\n                                                                                && res.data.Rows[0].BatchSN.toLowerCase() !== barcode.toLowerCase())) {\r\n                                $.unblockUI();\r\n                                $scope.scanSuccess = 'Several products found. Select relevant product to proceed';\r\n                                $scope.prepareScanData(res.data.Rows);\r\n                                return soundService.playBad();\r\n                            } else {\r\n                                $scope.makeQuantityObject(res.data.Rows[0]);\r\n                                $scope.fixQuantityObjectLocation();\r\n\r\n                                if (($scope.quantityObject.CostingMethod == 'FIFO' || !!$scope.quantityObject.BatchSN) &&\r\n                                    $scope.quantityObject.QuantityOnHand > 0) {\r\n                                    return stockTakeService\r\n                                        .adjustStocktakeRelative(\r\n                                            $scope.currentStocktake.taskID,\r\n                                            $scope.quantityObject.ID,\r\n                                            1,\r\n                                            $scope.quantityObject.LocationID,\r\n                                            $scope.quantityObject.BatchSN,\r\n                                            $scope.quantityObject.ExpiryDate,\r\n                                            $scope.quantityObject.ProductID\r\n                                        )\r\n                                        .then(function(d) {\r\n                                            $.unblockUI();\r\n                                            $scope.scanSuccess = 'Product ' + barcode + ' has been updated with stocktake quantity ' + ($scope.quantityObject.Adjustment + 1);\r\n                                            $scope.quantityObject.ID = null;\r\n                                            return soundService.playGood();\r\n                                        })\r\n                                        .catch(function(err) {\r\n                                            soundService.playBad();\r\n                                            $.unblockUI();\r\n                                            errorService.showError(err);\r\n                                        });\r\n                                } else {\r\n                                    // need a batchSN field to be filled\r\n                                    $.unblockUI();\r\n                                    $scope.scanSuccess = 'Please, set Batch/SN for the product';\r\n                                    return soundService.playBad();\r\n                                }\r\n                            }\r\n                        } else {\r\n                            /*if (res.data.Rows.length == 1) {\r\n                                $.unblockUI();\r\n                                $scope.makeQuantityObject(res.data.Rows[0]);\r\n                                // $scope.fixQuantityObjectLocation();\r\n                            } else {*/\r\n                                $.unblockUI();\r\n                                $scope.scanSuccess = 'Several products found. Select relevant product to proceed';\r\n                                $scope.prepareScanData(res.data.Rows);\r\n                                return soundService.playBad();\r\n                            //}\r\n                        }\r\n                    })\r\n                    .catch(function(err) {\r\n                        soundService.playBad();\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            } else if ($scope.stocktakeScanActiveTab == 1 && $scope.isScanDlgVisible) {\r\n                $timeout(function() {\r\n                    var v = $scope.getMultiscan();\r\n                    $('#scanArea')\r\n                        .focus()\r\n                        .val('')\r\n                        .val(v);\r\n                    $scope.setMultiscan(v + barcode + String.fromCharCode(13, 10));\r\n                });\r\n            }\r\n        });\r\n\r\n        $scope.completeStocktake = function() {\r\n            $.blockUI();\r\n\r\n            var localDate = helperService.getDateByFormatAlreadyLocal($scope.currentStocktake.currentTask.date, 'YYYY-MM-DD[T]HH:mm:ss');\r\n\r\n            return stockTakeService\r\n                .completeStocktake($scope.currentStocktake.taskID, localDate)\r\n                .then(function(res) {\r\n                    $.unblockUI();\r\n                    $scope.goBack();\r\n                    //$scope.loadGridProcess();\r\n                    $scope.$broadcast('refreshStTable');\r\n                })\r\n                .catch(function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err, null, null, null, true);\r\n                });\r\n        };\r\n\r\n        $scope.cancelStocktake = function() {\r\n            $.blockUI();\r\n\r\n            return stockTakeService\r\n                .cancelStocktake($scope.currentStocktake.taskID)\r\n                .then(function(res) {\r\n                    $.unblockUI();\r\n                    $scope.goBack();\r\n                    //$scope.loadGridProcess();\r\n                    $scope.$broadcast('refreshStTable');\r\n                })\r\n                .catch(function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err, null, null, null, true);\r\n                });\r\n        };\r\n\r\n        $scope.undoStocktake = function() {\r\n            $.blockUI();\r\n\r\n            return stockTakeService\r\n                .undoStocktake($scope.currentStocktake.taskID)\r\n                .then(function(res) {\r\n                    $.unblockUI();\r\n                    $scope.goBack();\r\n                    //$scope.loadGridProcess();\r\n                    $scope.$broadcast('refreshStTable');\r\n                })\r\n                .catch(function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err, null, null, null, true);\r\n                });\r\n        };\r\n\r\n        $scope.completeStocktakeDlgShow = function() {\r\n            $scope.deleteMode = 'complete';\r\n            var message = gettextCatalog.getString('Would you like to complete') + '<br/>' + $scope.currentStocktake.name + '<br/>' +gettextCatalog.getString('stocktake?');\r\n            helperService.showCustomDialog(\r\n                gettextCatalog.getString('Complete stocktake'),\r\n                message,\r\n                gettextCatalog.getString('Complete')\r\n            );\r\n        };\r\n\r\n        $scope.completeStocktakeDlgShow2 = function(row) {\r\n            $scope.prepareCurrentStocktake(row);\r\n            $scope.completeStocktakeDlgShow();\r\n        };\r\n\r\n        $scope.cancelStocktakeDlgShow2 = function(row) {\r\n            $scope.prepareCurrentStocktake(row);\r\n            $scope.cancelStocktakeDlgShow();\r\n        };\r\n\r\n        $scope.undoStocktakeDlgShow2 = function(row) {\r\n            $scope.prepareCurrentStocktake(row);\r\n            $scope.undoStocktakeDlgShow();\r\n        };\r\n\r\n        $scope.cancelStocktakeDlgShow = function() {\r\n            $scope.deleteMode = 'cancel';\r\n\r\n            var message = gettextCatalog.getString('Would you like to cancel') + '<br/>' + $scope.currentStocktake.name + '<br/>' +gettextCatalog.getString('stocktake?');\r\n\r\n            helperService.showCustomDialog(\r\n                gettextCatalog.getString('Cancel stocktake'),\r\n                message,\r\n                gettextCatalog.getString('Yes')\r\n            );\r\n        };\r\n\r\n        $scope.undoStocktakeDlgShow = function() {\r\n            $scope.deleteMode = 'undo';\r\n\r\n            var message = gettextCatalog.getString('Would you like to undo') + '<br/>' + $scope.currentStocktake.name + '<br/>' + gettextCatalog.getString('stocktake?');\r\n\r\n            helperService.showCustomDialog(\r\n                gettextCatalog.getString('Undo stocktake'),\r\n                message,\r\n                gettextCatalog.getString('Undo')\r\n            );\r\n        };\r\n\r\n        $scope.addNewZeroStockItem = function(){\r\n            var first = $scope.availableProducts[0];\r\n\r\n            var zeroStockProduct = {\r\n                Barcode:  first.Barcode,\r\n                BatchSN: null,\r\n                Comments: null,\r\n                CostingMethod: first.CostingMethod,\r\n                ExpiryDate: null,\r\n                ID: uuid2.newguid(),\r\n                LastChange: null,\r\n                LocationID: $scope.currentStocktake.scanLocationID,\r\n                LocationName: $scope.currentStocktake.scanLocationName,\r\n                Name: first.Name,\r\n                ProductCode: first.ProductCode,\r\n                ProductID: first.ProductID,\r\n                QtyOrder: 1,\r\n                QuantityOnHand: 0,\r\n                Adjustment: 0\r\n            }\r\n\r\n            $scope.selectScanProduct(zeroStockProduct);\r\n        }\r\n    }\r\n]);\r\n","angular.module('services').factory('stockTakeService',\r\n    ['gettext', 'helperService', 'remoteRequestProvider', 'configService', '$q', 'webOnlyProvider',\r\n        function (gettextCatalog, helperService, remoteRequestProvider, configService, $q, webOnlyProvider) {\r\n\r\n            var stockTakeService = {};\r\n\r\n            // return lists\r\n            stockTakeService.getData = function () {\r\n                var provider = remoteRequestProvider;\r\n\r\n                return provider.getStockTakeData();\r\n            };\r\n\r\n            stockTakeService.getLocationBins = function (locationID) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                return provider.getStockTakeData({ locationID: locationID });\r\n            };\r\n\r\n            stockTakeService.loadStocktakeList = function (page, limit, status, sorting) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                return provider.loadStocktakeList(page, limit, status, sorting);\r\n            }\r\n\r\n            stockTakeService.filterData = function (arr, text, limit) {\r\n                if (!text || text.length == 0)\r\n                    return liveSearchService.data;\r\n\r\n                if (!limit) limit = 10;\r\n\r\n                text = text.toLowerCase();\r\n                var counter = 0;\r\n                var fd = [];\r\n\r\n                for (var i = 0; i < arr.length; i++) {\r\n                    var el = arr[i];\r\n\r\n                    if (counter >= limit)\r\n                        break;\r\n\r\n                    var cmp = (counter < limit) && (el.name.toLowerCase().indexOf(text) >= 0);\r\n\r\n                    if (cmp == true) {\r\n                        counter++;\r\n\r\n                        fd.push(el.name);\r\n                    }\r\n                }\r\n\r\n                return fd;\r\n            };\r\n\r\n            stockTakeService.addTextToArray = function (arr, text, dst) {\r\n                var canAdd = true;\r\n\r\n                angular.forEach(dst, function (c) {\r\n                    if (c.toLowerCase() == text.toLowerCase()) {\r\n                        canAdd = false;\r\n                        return false;\r\n                    }\r\n                });\r\n\r\n                if (canAdd) {\r\n                    dst.push(text);\r\n                }\r\n            };\r\n\r\n            stockTakeService.removeTextFromArray = function (arr, text) {\r\n                for (var i = 0; i < arr.length; i++) {\r\n                    if (arr[i].toLowerCase() == text.toLowerCase()) {\r\n                        arr.splice(i, 1);\r\n                        break;\r\n                    }\r\n                }\r\n            };\r\n\r\n            stockTakeService.modifyTask = function (data, isNew) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                var v = {\r\n                    taskID: !isNew ? data.taskID : null,\r\n                    name: data.name,\r\n                    includeQuantityOnHand: data.showOnhand,\r\n                    lockSell: data.lockSell,\r\n                    outletID: data.outletID,\r\n                    account: data.account,\r\n                    userName: configService.lastUserName,\r\n                    searchParameters: JSON.stringify({\r\n                        categories: data.categories,\r\n                        brands: data.brands,\r\n                        tags: data.tags\r\n                    })\r\n                };\r\n\r\n                if (isNew)\r\n                    return provider.saveNewStockTake(v);\r\n                else\r\n                    return provider.updateStockTake(v);\r\n            };\r\n\r\n            stockTakeService.deleteStocktake = function (taskID) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                return provider.deleteStocktake(taskID);\r\n            };\r\n\r\n            stockTakeService.startStocktake = function (taskID) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                return provider.startStocktake(taskID);\r\n            };\r\n\r\n            stockTakeService.loadStocktake = function (taskID, page, limit, sorting, searchText, isTemplateMode) {\r\n                var provider = remoteRequestProvider;\r\n                if (!searchText)\r\n                    searchText = null;\r\n\r\n                return provider.loadStocktake(taskID, page, limit, sorting, searchText, isTemplateMode === true ? 'Template' : '')\r\n                    .then(function (res) {\r\n                        return stockTakeService.correctDates(res);\r\n                    });\r\n            };\r\n\r\n            stockTakeService.adjustStocktakeAbsolute = function (taskID, itemID, value, locationID, batchSN, expiryDate, productID, receivedDate) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                var date = helperService.toDateFromDatepickerParameterUTC(expiryDate);\r\n                var receivedDateDate = helperService.toDateFromDatepickerParameterUTC(receivedDate);\r\n                return provider.adjustStocktakeItem(taskID, itemID, true, value, locationID, batchSN, date, productID, receivedDateDate);\r\n            };\r\n\r\n            stockTakeService.adjustStocktakeRelative = function (taskID, itemID, incValue, locationID, batchSN, expiryDate, productID, receivedDate) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                var date = helperService.toDateFromDatepickerParameterUTC(expiryDate);\r\n                var receivedDateDate = helperService.toDateFromDatepickerParameterUTC(receivedDate);\r\n                return provider.adjustStocktakeItem(taskID, itemID, false, incValue, locationID, batchSN, date, productID, receivedDateDate);\r\n            };\r\n\r\n            stockTakeService.search = function (taskID, text) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                return provider.loadStocktake(taskID, 1, 10, null, text)\r\n                    .then(function (res) {\r\n                        return stockTakeService.correctDates(res);\r\n                    });\r\n            };\r\n\r\n            stockTakeService.correctDates = function (res) {\r\n                var deferred = $q.defer();\r\n                if (!!res && !!res.data && !!res.data.Rows) {\r\n                    angular.forEach(res.data.Rows, function (el) {\r\n                        if (el.ExpiryDate != null) {\r\n                            el.ExpiryDate = helperService.getFormatedDateOnlyAsIs(el.ExpiryDate);\r\n                        }\r\n                        if (el.ReceivedDate != null) {\r\n                            el.ReceivedDate = helperService.getFormatedDateOnlyAsIs(el.ReceivedDate);\r\n                        }\r\n                    });\r\n                }\r\n\r\n                deferred.resolve(res);\r\n                return deferred.promise;\r\n            };\r\n\r\n            stockTakeService.completeStocktake = function (taskID, localDate) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                return provider.completeStocktake(taskID, localDate);\r\n            };\r\n\r\n            stockTakeService.cancelStocktake = function (taskID) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                return provider.cancelStocktake(taskID);\r\n            };\r\n\r\n            stockTakeService.undoStocktake = function (taskID) {\r\n                var provider = remoteRequestProvider;\r\n\r\n                return provider.undoStocktake(taskID);\r\n            };\r\n\r\n            // stock transfer methods\r\n            stockTakeService.loadStockTransferList = function (searchText, page, limit, status, sorting) {\r\n                var provider = webOnlyProvider;\r\n\r\n                return provider.loadStockTransferList(searchText, page, limit, status, sorting);\r\n            };\r\n\r\n            stockTakeService.loadUserAvailableOutlets = function () {\r\n                var prms = {\r\n                    userID: configService.loginUserID,\r\n                    infoType: 'userEnabledLocations'\r\n                };\r\n\r\n                return webOnlyProvider.loadStockTransferSatelliteData(prms);\r\n            };\r\n\r\n            stockTakeService.loadUserAvailableOutletsWithoutRegister = function () {\r\n                var prms = {\r\n                    userID: configService.loginUserID,\r\n                    infoType: 'userEnabledOutletsNoRegister'\r\n                };\r\n\r\n                return webOnlyProvider.loadStockTransferSatelliteData(prms);\r\n            };\r\n\r\n            stockTakeService.loadUserAvailableOutletsAndRegistries = function () {\r\n                var prms = {\r\n                    userID: configService.loginUserID,\r\n                    infoType: 'userEnabledOutlets'\r\n                };\r\n\r\n                return webOnlyProvider.loadStockTransferSatelliteData(prms);\r\n            };\r\n\r\n            stockTakeService.loadStockTransferDetails = function (taskID, page, limit, status, sorting) {\r\n                var provider = webOnlyProvider;\r\n\r\n                return provider.loadStockTransferDetails(taskID, page, limit, status, sorting);\r\n\r\n            };\r\n\r\n            stockTakeService.loadAvailableProducts = function (locationID) {\r\n                var prms = {\r\n                    locationID: locationID,\r\n                    infoType: 'availableProductsByLocation'\r\n                };\r\n\r\n                return webOnlyProvider.loadStockTransferSatelliteData(prms);\r\n            };\r\n\r\n            stockTakeService.modifyStockTransfer = function (task) {\r\n                var prm = {};\r\n                prm.FromLocationID = task.fromLocationID;\r\n                prm.ToLocationID = task.toLocationID;\r\n                prm.CompletionDate = helperService.toDateFromDatepickerDirect(task.date);\r\n                prm.LastUpdatedBy = configService.lastUserName;\r\n                prm.Details = [];\r\n\r\n                angular.forEach(task.data, function (el) {\r\n                    var rid = null;\r\n                    if (el.ID.indexOf(el.ProductID + '#') !== 0)\r\n                        rid = el.ID;\r\n                    var dtl = {\r\n                        ID: rid,\r\n                        ProductID: el.ProductID,\r\n                        QuantityOnHand: el.QuantityOnHand,\r\n                        QuantityAvailable: el.QuantityAvailable,\r\n                        TransferQuantity: el.TransferQuantity,\r\n                        BatchSN: el.BatchSN,\r\n                        ExpiryDate: !!el.ExpiryDate ? helperService.toDateFromDatepickerDirect(el.date) : null\r\n                    };\r\n\r\n                    prm.Details.push(dtl);\r\n                });\r\n\r\n                if (!task.taskID) {\r\n                    prm.TaskID = null;\r\n                    // new\r\n                    return webOnlyProvider.saveNewStockTransfer(prm);\r\n                }\r\n                else {\r\n                    // update\r\n                    prm.TaskID = task.taskID;\r\n                    return webOnlyProvider.updateStockTransfer(prm);\r\n                }\r\n\r\n\r\n            };\r\n\r\n            stockTakeService.voidStockTransfer = function (taskID) {\r\n                if (taskID) {\r\n                    return webOnlyProvider.deleteStockTransfer(taskID);\r\n                } else {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                }\r\n            };\r\n\r\n            stockTakeService.completeStockTransfer = function (taskID, date, putAwayData) {\r\n                return webOnlyProvider.completeStockTransfer(taskID, date, putAwayData);\r\n            };\r\n\r\n            stockTakeService.undoStockTransfer = function (taskID) {\r\n                return webOnlyProvider.undoStockTransfer(taskID);\r\n            };\r\n\r\n            stockTakeService.scanInventoryMode = function(taskID, locationID, searchString){\r\n                return webOnlyProvider.scanStockTakeInventoryMode(taskID, locationID, searchString);\r\n            }\r\n\r\n            return stockTakeService;\r\n        }\r\n    ]);\r\n","\r\nangular.module('mainApp').controller('stockTransferController', [\r\n    '$scope',\r\n    '$rootScope',\r\n    'loginService',\r\n    'gettextCatalog',\r\n    'stockTakeService',\r\n    'helperService',\r\n    '$timeout',\r\n    'configService',\r\n    'errorService',\r\n    'soundService',\r\n    '$q',\r\n    'printService',\r\n    'uuid2',\r\n    function($scope, $rootScope, loginService, gettextCatalog, stockTakeService, helperService, $timeout, configService, errorService, soundService, $q, printService, uuid2) {\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n            //             $rootScope.$broadcast('login.show'); // show login page on application start\r\n        }\r\n\r\n        $scope.searchText = '';\r\n        $scope.mode = '';\r\n        $scope.dataStatus = 'DRAFT';\r\n        $scope.activeTab = '0';\r\n        $scope.dataCount = 0;\r\n        $scope.totalPages = 0;\r\n        $scope.dataPage = 1;\r\n        $scope.dataPageDisplay;\r\n        $scope.itemsByPage = 20;\r\n        $scope.isLoading = false;\r\n        $scope.dataContainer = {\r\n            stockTransfersData: []\r\n        };\r\n\r\n        $scope.container = helperService.createNonWrappableContainer();\r\n        $scope.container.set({\r\n            availableProducts: []\r\n        });\r\n\r\n        $scope.totalCount = 0;\r\n        $scope.inStocktransferCount = 0;\r\n        $scope.ifcss = { height: window.innerHeight * 0.9 - 400 + 'px' };\r\n        $scope.fcss = { height: window.innerHeight * 0.85 - 250 + 'px' };\r\n\r\n        // grid control\r\n        $scope.gridControl = function(tableState) {\r\n            var sort = {};\r\n\r\n            if (!!tableState.sort.predicate) {\r\n                sort.FieldName = tableState.sort.predicate;\r\n                sort.Direction = tableState.sort.reverse ? 'desc' : 'asc';\r\n            }\r\n\r\n            $.blockUI();\r\n            $scope.loadGrid(sort).finally(function() {\r\n                $.unblockUI();\r\n            });\r\n        };\r\n\r\n        const scrollReachBottomCallback = function() {\r\n            if (!$scope.isLoading && $scope.dataPage < $scope.totalPages) {\r\n                $scope.selectPage($scope.dataPage + 1);\r\n            }\r\n        };\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        }\r\n\r\n        $scope.selectPage = function(page) {\r\n            $scope.dataPage = page;\r\n            $scope.$broadcast('refreshStTable');\r\n        };\r\n\r\n        $scope.$on('refreshStTable', function(sorting) {\r\n            $.blockUI();\r\n            $scope.isLoading = true;\r\n\r\n            $scope.loadGrid(sorting).finally(function() {\r\n                $scope.isLoading = false;\r\n                $.unblockUI();\r\n            });\r\n        });\r\n\r\n        $scope.loadGrid = function(sorting) {\r\n            helperService.hideKeyboard();\r\n            var lst = stockTakeService.loadStockTransferList(\r\n                    $scope.searchText,\r\n                    $scope.dataPage,\r\n                    $scope.itemsByPage,\r\n                    $scope.dataStatus,\r\n                    sorting).then(function(data) {\r\n                    if ($scope.dataPage === 1) {\r\n                        $scope.dataContainer.stockTransfersData = [];\r\n                    }\r\n\r\n                    $scope.dataCount = data.data.Total;\r\n                    $scope.dataPage = data.data.Page;\r\n                    getPages(data.data.Total);\r\n\r\n                angular.forEach(data.data.Rows, function(el) {\r\n                    el.date = el.CompletionDate ? helperService.getFormatedDateOnlyAsIs(el.CompletionDate) : '';\r\n                    el.dateDisplay = el.CompletionDate ? el.CompletionDate : '';\r\n                    el.FromLocationAddress = $.trim(el.FromLocationAddress);\r\n                    el.ToLocationAddress = $.trim(el.ToLocationAddress);\r\n                    $scope.dataContainer.stockTransfersData.push(el);\r\n                });\r\n            });\r\n\r\n            return lst;\r\n        };\r\n\r\n        $scope.locations = [];\r\n        $scope.locationListTo = [];\r\n\r\n        $scope.setLocationListTo = function(newVal) {\r\n            $scope.locationListTo = $scope.locations.filter(function(v) {\r\n                return v.LocationID != $scope.currentTransfer.fromLocationID;\r\n            });\r\n\r\n            if (!!newVal && !!$scope.currentTransfer.fromLocationID) {\r\n                var flt = $scope.locationListTo.filter(function(v) {\r\n                    return v.LocationID == newVal;\r\n                });\r\n                if (!!flt && flt.length > 0) $scope.currentTransfer.toLocationID = newVal;\r\n                else $scope.currentTransfer.toLocationID = null;\r\n            } else if (!!$scope.locationListTo && $scope.locationListTo.length > 0 && !!$scope.currentTransfer.fromLocationID) {\r\n                if (!!$scope.currentTransfer.toLocationID) {\r\n                    var flt = $scope.locationListTo.filter(function(v) {\r\n                        return v.LocationID == $scope.currentTransfer.toLocationID;\r\n                    });\r\n                    if (flt.length == 0) $scope.currentTransfer.toLocationID = $scope.locationListTo[0].LocationID;\r\n                } else $scope.currentTransfer.toLocationID = $scope.locationListTo[0].LocationID;\r\n            } else {\r\n                $scope.currentTransfer.toLocationID = null;\r\n            }\r\n\r\n            $timeout(function() {\r\n                $('select').trigger('refresh');\r\n            });\r\n        };\r\n\r\n        $scope.onLoad = function() {\r\n            $.blockUI();\r\n            stockTakeService\r\n                .loadUserAvailableOutlets()\r\n                .then(function(res) {\r\n                    $scope.locations = res.data.locations;\r\n                    $.unblockUI();\r\n                })\r\n                .catch(function() {\r\n                    $.unblockUI();\r\n                });\r\n        };\r\n\r\n        $scope.firstScanFormShow = true;\r\n\r\n        $scope.$watch('activeTab', function(newValue, oldValue) {\r\n            if (newValue !== oldValue) {\r\n                switch (newValue) {\r\n                    case '0':\r\n                        $scope.dataStatus = 'DRAFT';\r\n                        break;\r\n                    case '1':\r\n                        $scope.dataStatus = 'COMPLETED';\r\n                        break;\r\n                    case '2':\r\n                        $scope.dataStatus = 'VOIDED';\r\n                        break;\r\n                }\r\n\r\n                $scope.dataPage = 1;\r\n                $scope.$broadcast('refreshStTable');\r\n            }\r\n        });\r\n\r\n        // code below to give a chance to add event handlers before form is shown\r\n        $timeout(function() {\r\n            $scope.mode = 'management';\r\n            $scope.$broadcast('refreshStTable');\r\n            initSelects();\r\n        });\r\n\r\n        $scope.firstAddFormShow = true;\r\n        $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n\r\n        $scope.firstShow = true;\r\n        $scope.$on('view.loaded', function(evt) {\r\n            if ($scope.firstShow) {\r\n                $scope.firstShow = false;\r\n            } else {\r\n                $scope.$broadcast('refreshStTableProcess');\r\n            }\r\n        });\r\n\r\n        $scope.search = function(event) {\r\n            if (!event || event.which === 13) {\r\n                $scope.dataPage = 1;\r\n                $scope.dataPageDisplay = 1;\r\n                $scope.$broadcast('refreshStTable');\r\n            }\r\n        };\r\n\r\n        $scope.goBack = function() {\r\n            if ($scope.mode == 'new' || $scope.mode == 'edit' || $scope.mode == 'process') {\r\n                $scope.mode = 'management';\r\n            }\r\n\r\n            var wElement = $('#stockTransferProcessModal');\r\n            helperService.closeDialog(wElement);\r\n\r\n            $scope.$broadcast('refreshStTable');\r\n        };\r\n\r\n        $scope.currentTransfer = {};\r\n\r\n        $scope.addNew = function() {\r\n            var fromLoc = $scope.locations.filter(function(v) {\r\n                return v.PosOutletID == configService.lastOutletID;\r\n            })[0];\r\n\r\n            $scope.currentTransfer = {\r\n                dataStatus: 'DRAFT',\r\n                fromLocationID: fromLoc.LocationID,\r\n                toLocationID: null,\r\n                date: null,\r\n                data: [],\r\n                dataDisplay: []\r\n            };\r\n\r\n            $scope.setLocationListTo(null);\r\n            $scope.mode = 'new';\r\n\r\n            var wElement = $('#stockTransferProcessModal');\r\n            helperService.showDialog(wElement);\r\n\r\n\r\n            $scope.initInnerSelects();\r\n            $scope.loadGridProcess({});\r\n        };\r\n\r\n        $scope.editCurrent = function(row) {\r\n            var fromLoc = $scope.locations.filter(function(v) {\r\n                return v.LocationID == row.FromLocationID;\r\n            })[0];\r\n            var toLoc = $scope.locations.filter(function(v) {\r\n                return v.LocationID == row.ToLocationID;\r\n            })[0];\r\n\r\n            $scope.setLocationListTo(row.ToLocationID);\r\n\r\n            $scope.currentTransfer = {\r\n                dataStatus: $scope.dataStatus,\r\n                number: row.Number,\r\n                taskID: row.TaskID,\r\n                fromLocationID: row.FromLocationID,\r\n                fromLocationName: !!fromLoc ? fromLoc.OutletLocationName : null,\r\n                toLocationID: row.ToLocationID,\r\n                toLocationName: !!toLoc ? toLoc.OutletLocationName : null,\r\n                date: row.date,\r\n                status: row.Status,\r\n                data: [],\r\n                dataDisplay: []\r\n            };\r\n\r\n            $scope.mode = 'edit';\r\n\r\n            var wElement = $('#stockTransferProcessModal');\r\n            helperService.showDialog(wElement);\r\n\r\n            $scope.loadGridProcess({});\r\n            $scope.initInnerSelects();\r\n        };\r\n\r\n        $scope.initInnerSelects = function() {\r\n            $timeout(function() {\r\n                if ($scope.firstAddFormShow) {\r\n                    $scope.firstAddFormShow = false;\r\n                    initSelects(function() {\r\n                        var el = $(this);\r\n                        if (el[0].id === 'fromOutlet-styler' || el[0].id === 'toOutlet-styler') {\r\n                            // add address to outlet\r\n                            angular.forEach($scope.locations, function(l) {\r\n                                var p =\r\n                                    \"<div class='width100'>\" +\r\n                                    l.OutletLocationName +\r\n                                    '</div>' +\r\n                                    \"<div class='width100' style='font-size:12px'>\" +\r\n                                    (!!l.LocationAddress ? l.LocationAddress : '&nbsp;') +\r\n                                    '</div>';\r\n                                var ef = el.find('li.loc-' + l.LocationID);\r\n\r\n                                ef.html(p);\r\n                            });\r\n                        }\r\n                    });\r\n\r\n                    helperService.setDatepicker($scope.dateFormat, '#effDate');\r\n                }\r\n\r\n                $('input, select').trigger('refresh');\r\n            });\r\n        };\r\n\r\n        $scope.loadAvailableProducts = function(locationID) {\r\n            $scope.container.get().availableProducts = [];\r\n            $scope.totalCount = 0;\r\n            $scope.inStocktransferCount = 0;\r\n            var arr = [];\r\n            return stockTakeService.loadAvailableProducts(locationID).then(function(res) {\r\n                angular.forEach(res.data.products, function(el) {\r\n                    if (!!el.ExpiryDate) el.ExpiryDate2 = helperService.getFormatedDateOnlyAsIs(el.ExpiryDate);\r\n                });\r\n\r\n                $scope.container.get().availableProducts = res.data.products;\r\n                $scope.totalCount = res.data.totalCount;\r\n                $scope.inStocktransferCount = res.data.inStockTakeCount;\r\n\r\n                var deferred2 = $q.defer();\r\n                deferred2.resolve(true);\r\n                return deferred2.promise;\r\n            });\r\n        };\r\n\r\n        $scope.loadGridProcess = function(sorting) {\r\n            if (!$scope.currentTransfer.taskID) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(null);\r\n                return deferred.promise;\r\n            }\r\n\r\n            $.blockUI();\r\n            var lst = stockTakeService\r\n                .loadStockTransferDetails($scope.currentTransfer.taskID, 1, 100000, sorting)\r\n                .then(function(data) {\r\n                    $scope.currentTransfer.data = [];\r\n                    $scope.currentTransfer.dataDisplay = [];\r\n\r\n                    angular.forEach(data.data.Rows, function(el) {\r\n                        if (!el.ExpiryDate) el.date = ' ';\r\n                        else el.date = helperService.getFormatedDateOnlyAsIs(el.ExpiryDate);\r\n                        el.refID = uuid2.newguid();\r\n\r\n                        $scope.currentTransfer.data.push(el);\r\n                    });\r\n\r\n                    $.unblockUI();\r\n\r\n                    var deferred2 = $q.defer();\r\n                    deferred2.resolve(null);\r\n                    return deferred2.promise;\r\n                })\r\n                .catch(function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n\r\n            return lst;\r\n        };\r\n\r\n        // add item part\r\n        $scope.stockTransferActiveTab = 0;\r\n\r\n        $scope.reloadAvailable = function() {\r\n            $.blockUI();\r\n            $scope.setLocationListTo(null);\r\n            return $scope\r\n                .loadAvailableProducts($scope.currentTransfer.fromLocationID)\r\n                .then(function(res) {})\r\n                .finally(function() {\r\n                    $.unblockUI();\r\n                });\r\n        };\r\n\r\n        $scope.$watch('currentTransfer.fromLocationID', function(newValue, oldValue) {\r\n            if (newValue !== oldValue && !!newValue) {\r\n                // reload available products list\r\n                $scope.currentTransfer.data = [];\r\n                return $scope.reloadAvailable();\r\n            }\r\n        });\r\n\r\n        $scope.firstScanStart = true;\r\n\r\n        $scope.setMultiscan = function(v) {\r\n            $scope.multiScanText = v;\r\n            $('#scanArea').val(v);\r\n        };\r\n\r\n        $scope.getMultiscan = function() {\r\n            $scope.multiScanText = $('#scanArea').val();\r\n            return $scope.multiScanText;\r\n        };\r\n\r\n        $scope.isScanDlgVisible = false;\r\n\r\n        $scope.showScanDlg = function() {\r\n            $scope.scanError = null;\r\n            $scope.scanSuccess = null;\r\n            $scope.quantityObject = {};\r\n            $scope.setMultiscan('');\r\n            $scope.stockTakeScanData = [];\r\n            $scope.displayAvailableProducts = [];\r\n\r\n            // no itens at all\r\n            if ($scope.container.get().availableProducts.length == 0 && $scope.totalCount == 0) {\r\n                helperService.showCustomDialog('', gettextCatalog.getString('There are no available products in this location.'), gettextCatalog.getString('OK'), null, false);\r\n                return;\r\n            }\r\n            if ($scope.container.get().availableProducts.length == 0 && $scope.inStocktransferCount > 0) {\r\n                helperService.showCustomDialog(\r\n                    '',\r\n                    gettextCatalog.getString('Stocktake is running in the location so there are no available products.'),\r\n                    gettextCatalog.getString('OK'),\r\n                    null,\r\n                    false\r\n                );\r\n                return;\r\n            }\r\n            // this condition is actually impossible but leave it for 'just in case'\r\n            else if ($scope.container.get().availableProducts.length > 0 && $scope.inStocktransferCount > 0) {\r\n                helperService.showCustomDialog(\r\n                    '',\r\n                    gettextCatalog.getString('There are more products in this location but some of them are under stocktake.'),\r\n                    gettextCatalog.getString('OK'),\r\n                    null,\r\n                    false\r\n                );\r\n            }\r\n\r\n            helperService.showDialog('#stockTransferAddDlg', function() {\r\n                if ($scope.firstScanFormShow) {                    \r\n                    $('.stocktransferScanGridScrollWrapper').show();\r\n                }\r\n                $scope.isScanDlgVisible = true;\r\n            });\r\n\r\n            printService.reconnect();\r\n            //printService.disconnect().then(function () { return printService.connect(); });\r\n\r\n            if ($scope.firstScanStart) {\r\n                $scope.firstScanStart = false;\r\n                $('#stockTransferAddDlg')\r\n                    .find('ul li a')\r\n                    .click(function(evt) {\r\n                        var v = Number(\r\n                            $(this)\r\n                                .parent()\r\n                                .attr('index')\r\n                        );\r\n\r\n                        $timeout(function() {\r\n                            $scope.stockTransferActiveTab = v;\r\n                        });\r\n                    });\r\n            }\r\n\r\n            $timeout(function() {\r\n                $('input, select').trigger('refresh');\r\n            });\r\n\r\n            $scope.stocktakeScanActiveTab = 0;\r\n            $scope.clearScanData();\r\n        };\r\n\r\n        $scope.hideScanDlg = function() {\r\n            $scope.isScanDlgVisible = false;\r\n            //printService.disconnect();\r\n            helperService.closeDialog('#stockTransferAddDlg');\r\n            $('#manualScanInput').val('');\r\n        };\r\n\r\n        $scope.modifyTransferItem = function (row, isAbsolute) {\r\n            var processed = false;\r\n            var msg = '';\r\n            angular.forEach($scope.currentTransfer.data, function (el) {\r\n                if (el.ProductID == row.ProductID && el.BatchSN == row.BatchSN && el.ExpiryDate == row.ExpiryDate) {\r\n                    processed = true;\r\n                    if (isAbsolute === true) {\r\n                        el.TransferQuantity = $scope.quantityObject.Adjustment;\r\n                    } else {\r\n                        el.TransferQuantity = parseFloat(el.TransferQuantity) + 1;\r\n                    }\r\n\r\n                    msg = gettextCatalog.getString(\"Product {{name}} quantity was updated.\", { name: row.Name });\r\n\r\n                    return false;\r\n                }\r\n            });\r\n\r\n            if (!processed) {\r\n                var ne = {\r\n                    ID: row.ProductID + '#' + row.BatchSN + '#' + row.ExpiryDate,\r\n                    ProductID: row.ProductID,\r\n                    ProductCode: row.ProductCode,\r\n                    Name: row.Name,\r\n                    Unit: row.UnitOfMeasure,\r\n                    BatchSN: row.BatchSN,\r\n                    ExpiryDate: row.ExpiryDate,\r\n                    QuantityOnHand: row.OnHand,\r\n                    QuantityAvailable: row.Available,\r\n                    TransferQuantity: 1,\r\n                    CostingMethod: row.CostingMethod,\r\n                    date: !!row.ExpiryDate ? helperService.getFormatedDateOnlyAsIs(row.ExpiryDate) : '',\r\n                    refID: uuid2.newguid()\r\n                };\r\n\r\n                if (isAbsolute === true) {\r\n                    ne.TransferQuantity = $scope.quantityObject.Adjustment;\r\n                }\r\n\r\n                $scope.currentTransfer.data.push(ne);\r\n                msg = gettextCatalog.getString(\"Product {{name}} was added.\", { name: row.Name });\r\n            }\r\n\r\n            $rootScope.$broadcast('snackbar.show', {\r\n                message: msg\r\n            });\r\n        };\r\n\r\n        $scope.removeTransferItem = function(row) {\r\n            for (var i = 0; i < $scope.currentTransfer.data.length; i++) {\r\n                if ($scope.currentTransfer.data[i].ID == row.ID) {\r\n                    $scope.currentTransfer.data.splice(i, 1);\r\n                    break;\r\n                }\r\n            }\r\n        };\r\n\r\n        // name is for compatibility with partial form from stocktake\r\n        $scope.currentStocktake = {\r\n            sncnts: ['0', '1']\r\n        };\r\n\r\n        $scope.itemQuantityDlg = null; // is bound to discount popover object with methods from directive\r\n        $scope.quantityObject = {};\r\n\r\n        $scope.showSetQuantityDlg = function(row) {\r\n            if ($scope.currentTransfer.dataStatus !== 'DRAFT') {\r\n                return;\r\n            }\r\n            $scope.makeQuantityObject(row);\r\n            $scope.showItemQuantityDlg(row.refID);\r\n        };\r\n\r\n        $scope.makeQuantityObject = function(row) {\r\n            $scope.quantityObject = {};\r\n            angular.copy(row, $scope.quantityObject);\r\n            $scope.quantityObject.Adjustment = !!$scope.quantityObject.TransferQuantity ? $scope.quantityObject.TransferQuantity : 1;\r\n            $scope.quantityObject.QuantityOnHand = !!row.QuantityOnHand ? row.QuantityOnHand : row.OnHand;\r\n            $scope.quantityObject.showOnHand = true;\r\n            $scope.quantityObject.hideBarcode = true;\r\n            $scope.quantityObject.readOnly = true;\r\n            if (!$scope.quantityObject.ID) {\r\n                $scope.quantityObject.ID = row.ProductID + '#' + row.BatchSN + '#' + row.ExpiryDate;\r\n            }\r\n\r\n            if (!$scope.quantityObject.ExpiryDate) $scope.quantityObject.date = ' ';\r\n            else $scope.quantityObject.date = helperService.getFormatedDateOnlyAsIs($scope.quantityObject.ExpiryDate);\r\n\r\n            if ($scope.quantityObject.CostingMethod == 'FISN' || $scope.quantityObject.CostingMethod == 'FESN' || $scope.quantityObject.CostingMethod == 'SN') {\r\n                if ($scope.quantityObject.Adjustment > 1) $scope.quantityObject.Adjustment = 1;\r\n            }\r\n        };\r\n\r\n        $scope.showItemQuantityDlg = function(elID) {\r\n            $scope.quantityObject.value = $scope.quantityObject.Adjustment;\r\n            $timeout(function() {\r\n                $scope.itemQuantityDlg.show(!elID ? '#quantityObject' : '#' + elID);\r\n            });\r\n        };\r\n\r\n        // callback\r\n        $scope.setQuantity = function(prm, event) {\r\n            $timeout(function() {\r\n                $scope.itemQuantityDlg.hide(true);\r\n            });\r\n\r\n            if (prm === true) {\r\n                $timeout(function() {\r\n                    $scope.quantityObject.Adjustment = $scope.quantityObject.value;\r\n                    $scope.adjustStockTransfer();\r\n                });\r\n            } else if (typeof prm == 'string') {\r\n                if (prm === 'clean') {\r\n                }\r\n            }\r\n\r\n            // event.stopPropagation();\r\n            // event.preventDefault();\r\n        };\r\n\r\n        $scope.adjustStockTransfer = function() {\r\n            angular.forEach($scope.currentTransfer.data, function(el) {\r\n                if (el.ID == $scope.quantityObject.ID) {\r\n                    processed = true;\r\n                    el.TransferQuantity = $scope.quantityObject.Adjustment;\r\n                    return false;\r\n                }\r\n            });\r\n        };\r\n\r\n        $scope.modifyStockTransfer = function(forceComplete) {\r\n            $.blockUI();\r\n\r\n            return stockTakeService\r\n                .modifyStockTransfer($scope.currentTransfer)\r\n                .then(function(res) {\r\n                    if (forceComplete) {\r\n                        return stockTakeService.completeStockTransfer(res.data.id);\r\n                    } else {\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve(null);\r\n                        return deferred2.promise;\r\n                    }\r\n                })\r\n                .then(function(res) {\r\n                    $.unblockUI();\r\n                    $scope.goBack();\r\n                })\r\n                .catch(function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err, null, null, null, true);\r\n                });\r\n        };\r\n\r\n        $scope.deleteMode = null;\r\n        $scope.deleteObject = null;\r\n\r\n        $scope.callbackModal = function() {\r\n            if ($scope.deleteMode == 'task') {\r\n                $.blockUI();\r\n                stockTakeService\r\n                    .voidStockTransfer($scope.deleteObject)\r\n                    .then(function(res) {\r\n                        $.unblockUI();\r\n                        $scope.goBack();\r\n                    })\r\n                    .catch(function(err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err, null, null, null, true);\r\n                    });\r\n            } else if ($scope.deleteMode == 'undo') {\r\n                $.blockUI();\r\n                stockTakeService\r\n                    .undoStockTransfer($scope.deleteObject)\r\n                    .then(function(res) {\r\n                        $.unblockUI();\r\n                        $scope.goBack();\r\n                    })\r\n                    .catch(function(err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err, null, null, null, true);\r\n                    });\r\n            }\r\n        };\r\n\r\n        $scope.voidStockTransfer = function(taskID) {\r\n            $scope.deleteMode = 'task';\r\n            $scope.deleteObject = taskID;\r\n            helperService.showCustomDialog(\r\n                gettextCatalog.getString('Void stock transfer'),\r\n                gettextCatalog.getString('This will reverse all transfers and change the transfer status to voided! Would you like to proceed anyway?'),\r\n                gettextCatalog.getString('Yes'),\r\n                gettextCatalog.getString('No')\r\n            );\r\n        };\r\n\r\n        $scope.completeStockTransfer = function(taskID) {\r\n            $.blockUI();\r\n            stockTakeService\r\n                .completeStockTransfer(taskID)\r\n                .then(function(res) {\r\n                    $.unblockUI();\r\n                    $scope.goBack();\r\n                })\r\n                .catch(function(err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err, null, null, null, true);\r\n                });\r\n        };\r\n\r\n        $scope.undoStockTransfer = function(taskID) {\r\n            $scope.deleteMode = 'undo';\r\n            $scope.deleteObject = taskID;\r\n            helperService.showCustomDialog(\r\n                gettextCatalog.getString('Undo stock transfer'),\r\n                gettextCatalog.getString('This will reverse all transfers and change the transfer status to draft! Would you like to proceed anyway?'),\r\n                gettextCatalog.getString('Yes'),\r\n                gettextCatalog.getString('No')\r\n            );\r\n        };\r\n\r\n        $scope.scanGridProducts = [];\r\n\r\n        $scope.$watch('stockTransferActiveTab', function(newValue, oldValue) {\r\n            if (newValue != oldValue) {\r\n                $scope.clearScanData();\r\n            }\r\n        });\r\n\r\n        $scope.clearScanData = function() {\r\n            $scope.scanError = null;\r\n            $scope.scanSuccess = null;\r\n            $scope.quantityObject = {};\r\n            $scope.scanGridProducts = [];\r\n        };\r\n\r\n        $scope.comparator = function(a, b) {\r\n            if (a == null || typeof a != 'string') return false;\r\n            if (b == null || typeof b != 'string') return false;\r\n\r\n            return a.toLowerCase() == b.toLowerCase();\r\n        };\r\n\r\n        $scope.searchProductList = function(text) {\r\n            return $scope.container.get().availableProducts.filter(function(el) {\r\n                return $scope.comparator(el.Barcode, text) || $scope.comparator(el.ProductCode, text) || $scope.comparator(el.BatchSN, text);\r\n            });\r\n        };\r\n\r\n        $scope.$on('scan.barcode', function(event, barcode) {\r\n            if ($scope.stockTransferActiveTab != 0 && $scope.stockTransferActiveTab != 2 && $scope.isScanDlgVisible) {\r\n                $scope.clearScanData();\r\n\r\n                $.blockUI();\r\n                var rows = $scope.searchProductList(barcode);\r\n                $scope.scanGridProducts = angular.copy(rows);\r\n                $scope.$broadcast('refreshScanTable');\r\n                $.unblockUI();\r\n\r\n                if (rows.length == 0) {\r\n                    // $scope.scanError = 'Product not found. Scan another barcode';\r\n                    var msg = gettextCatalog.getString(\"Product not found. Please scan another barcode.\");\r\n                    $rootScope.$broadcast('snackbar.show', {\r\n                        message: msg,\r\n                        type: 'error'\r\n                    });\r\n\r\n                    return soundService.playBad();\r\n                } else if ($scope.stockTransferActiveTab == 1) {\r\n                    if (rows.length > 1) {\r\n                        $scope.scanSuccess = 'Several products found. Select relevant product to proceed';\r\n                        return soundService.playBad();\r\n                    } else {\r\n                        $scope.scanSuccess = 'Product ' + barcode + ' has been added';\r\n                        $scope.modifyTransferItem(rows[0]);\r\n                        return soundService.playGood();\r\n                    }\r\n                } else if ($scope.stockTransferActiveTab == 3) {\r\n                    if (rows.length > 1) {\r\n                        $scope.scanSuccess = 'Several products found. Select relevant product to proceed';\r\n                        return soundService.playBad();\r\n                    } else {\r\n                        $scope.scanSuccess = 'Product ' + barcode + ' has been found';\r\n                        $scope.makeQuantityObject(rows[0]);\r\n                    }\r\n                }\r\n            } else if ($scope.stockTransferActiveTab == 2 && $scope.isScanDlgVisible) {\r\n                $timeout(function() {\r\n                    var v = $scope.getMultiscan();\r\n                    $('#scanArea')\r\n                        .focus()\r\n                        .val('')\r\n                        .val(v);\r\n                    $scope.setMultiscan(v + barcode + String.fromCharCode(13, 10));\r\n                });\r\n            }\r\n        });\r\n\r\n        $scope.scanStockTransfer = function() {\r\n            if ($scope.stockTransferActiveTab == 2 && $scope.isScanDlgVisible && !!$scope.getMultiscan() && $scope.getMultiscan().length > 0) {\r\n                var arr = $scope.getMultiscan().split(String.fromCharCode(10));\r\n\r\n                $scope.setMultiscan('');\r\n                if (arr.length > 0) {\r\n                    $.blockUI();\r\n\r\n                    angular.forEach(arr, function(br) {\r\n                        br = br.trim();\r\n                        if (!!br) {\r\n                            var rows = $scope.container.get().availableProducts.filter(function(el) {\r\n                                if(!el.Barcode || !br)\r\n                                    return false;\r\n                                return el.Barcode.toLowerCase() == br.toLowerCase();\r\n                            });\r\n                            if (rows.length != 1) {\r\n                                $scope.setMultiscan($scope.getMultiscan() + br + String.fromCharCode(13, 10));\r\n                            } else {\r\n                                $scope.modifyTransferItem(rows[0]);\r\n                            }\r\n                        }\r\n                    });\r\n\r\n                    $.unblockUI();\r\n\r\n                    if (!!$scope.getMultiscan()) {\r\n                        // error\r\n                        $scope.scanError =\r\n                            'Some of the barcodes supplied could not be matched to any products or more than one product is found per supplied barcode. Not processed barcodes are listed in the box below.';\r\n                        return soundService.playBad();\r\n                    } else {\r\n                        $scope.scanSuccess = 'All barcodes were recognised and stocktake quantity has been incremented for products related to these barcodes';\r\n                        return soundService.playGood();\r\n                    }\r\n                }\r\n\r\n                $scope.clearScanData();\r\n            }\r\n        };\r\n\r\n        $scope.manualPress = function(event) {\r\n            if (event.which === 13) {\r\n                var v = $('#manualScanInput').val();\r\n                if (!!v && v.length > 0) {\r\n                    $rootScope.$broadcast('scan.barcode', v);\r\n                }\r\n            }\r\n        };\r\n\r\n\r\n        \r\n\r\n                //-------------- LIVE SEARCH -----------------------------------------\r\n                $scope.minSymbolsToStartSearch = configService.minSymbolsToStartSearch;\r\n                $scope.minSymbolsMessage = gettextCatalog.getString(\"Only the first {{cnt}} products are shown.\", { cnt: 7 });\r\n                $scope.liveSearchIsOpen = false;\r\n                $scope.liveSearch = {\r\n                    liveSearchIsOpen: false\r\n                };\r\n                $scope.showMaxVisibleLiveSearchCountMsg = false;\r\n                $scope.searchProductID = null;\r\n                $scope.filter = {};\r\n                $scope.filter.scanGridSearchText = null;\r\n                \r\n                $scope.$watch('liveSearch.liveSearchIsOpen',\r\n                    function (newValue, oldValue) {\r\n                        $scope.placeMaxVisibleLiveSearchCountMsg();\r\n                        if (newValue) {\r\n                            $timeout(function() {\r\n                                helperService.fitHeightTypeahead('#' + $('#searchProductInput').attr('aria-owns'), true, '#stockTransferAddItemModalContent');\r\n                            },400);\r\n                        }\r\n                    }\r\n                );\r\n\r\n                \r\n                $scope.placeMaxVisibleLiveSearchCountMsg = function () {\r\n                        if ($scope.showMaxVisibleLiveSearchCountMsg && $scope.liveSearchIsOpen) {\r\n                            $timeout(function () {\r\n                                var lst = $('.autoCompleteBox ul')[0].getBoundingClientRect();\r\n                                if (lst.width > 0 && lst.height > 0) {\r\n                                    console.log('lst: ' + lst.width + ' ' + lst.height);\r\n                                    $('#minProdMessage').css('left', lst.left);\r\n                                    $('#minProdMessage').css('top', lst.bottom - 10);\r\n                                    $('#minProdMessage').show();\r\n                                }\r\n                                else\r\n                                    $('#minProdMessage').hide();\r\n\r\n                            });\r\n                        }\r\n                        else\r\n                            $('#minProdMessage').hide();\r\n                    };\r\n\r\n                \r\n                $scope.liveSearchFunc = function (val) {\r\n                        $scope.searchType = 'live';\r\n                        $scope.filter.scanGridSearchText = val;\r\n                        \r\n                        var filter = $scope.filter.scanGridSearchText ? $scope.filter.scanGridSearchText.toLowerCase() : '';\r\n                        var filtered = $scope.container.get().availableProducts.filter(function(item) {\r\n                            return !filter || (item.Name && item.Name.toLowerCase().indexOf(filter) !== -1)\r\n                            || (item.ProductCode && item.ProductCode.toLowerCase().indexOf(filter) !== -1)\r\n                            || (item.Barcode && item.Barcode.toLowerCase().indexOf(filter) !== -1);\r\n                        });\r\n                        var res = filtered.length > 7 ? filtered.slice(0, 7) : filtered;\r\n\r\n                        $scope.showMaxVisibleLiveSearchCountMsg = !!res && res.length > 0;\r\n                        $scope.placeMaxVisibleLiveSearchCountMsg();\r\n\r\n                        return res;\r\n                    };\r\n\r\n                $scope.liveSearchFinished = function (val) {\r\n                        return !!val ? val.name : null;\r\n                    };\r\n\r\n                $scope.liveSearchSelected = function (item, model, label, event) {\r\n                    // make search by product id and add product to order\r\n                    $scope.searchProductID = model.ProductID;\r\n                    $scope.searchLocationID = model.LocationID;\r\n                    $scope.searchExpiryDate = model.ExpiryDate;\r\n                    $scope.searchBatchSN = model.BatchSN;\r\n                    $scope.filter.scanGridSearchText = item.Name;\r\n                    $scope.scanGridSearch();\r\n                };\r\n\r\n                $scope.liveKeyPress = function (event) {\r\n                    if (event.which === 13) {\r\n                        $scope.searchProductID = null;\r\n                        $scope.scanGridSearch();\r\n                    }\r\n                };\r\n\r\n                $scope.scanGridSearch = function () { \r\n                        if (configService.isMobile)\r\n                            Keyboard.hide();\r\n                \r\n                        $.blockUI();\r\n                        var filter = $scope.filter.scanGridSearchText ? $scope.filter.scanGridSearchText.toLowerCase() : '';\r\n                        var filtered = $scope.container.get().availableProducts.filter(function(item) {\r\n                            return ($scope.searchProductID && item.ProductID === $scope.searchProductID) || \r\n                            (!$scope.searchProductID && (!filter \r\n                            || (item.Name && item.Name.toLowerCase().indexOf(filter) !== -1)\r\n                            || (item.ProductCode && item.ProductCode.toLowerCase().indexOf(filter) !== -1)\r\n                            || (item.Barcode && item.Barcode.toLowerCase().indexOf(filter) !== -1)));\r\n                        });\r\n\r\n                        if (filtered.length > 1 && ($scope.searchBatchSN || $scope.searchLocationID || $scope.searchExpiryDate)) {\r\n                            filtered = filtered.filter(function (item) {\r\n                                return (!$scope.searchBatchSN || $scope.searchBatchSN === item.BatchSN) && \r\n                                        (!$scope.searchLocationID || $scope.searchLocationID === item.LocationID) &&\r\n                                        (!$scope.searchExpiryDate || $scope.searchExpiryDate === item.ExpiryDate);\r\n                            });\r\n                        }\r\n\r\n                        if(filtered.length === 1) {\r\n                            $scope.modifyTransferItem(filtered[0]);\r\n                        }\r\n                        $scope.displayAvailableProducts = filtered;\r\n\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve(true);\r\n                        $.unblockUI();\r\n                        return deferred2.promise;\r\n                    };\r\n\r\n                $scope.scanGridCancelSearchMode = function () {\r\n                        $scope.searchProductID = null;\r\n                        $scope.filter.scanGridSearchText = null;\r\n                        $scope.displayAvailableProducts = [];\r\n                    };\r\n    }\r\n]);\r\n","angular.module(\"mainApp\").controller('stockTransferOrderDetailController',\r\n    ['$scope', '$rootScope', 'loginService', 'gettextCatalog', 'stockOrderingService',\r\n        'helperService', '$timeout', 'configService', 'errorService',\r\n        'soundService', '$q', 'printService', 'uuid2', 'stockTakeService', '$element',\r\n        function ($scope, $rootScope, loginService, gettextCatalog, stockOrderingService,\r\n            helperService, $timeout, configService, errorService,\r\n            soundService, $q, printService, uuid2, stockTakeService, $element) {\r\n\r\n            if (!loginService.isLoggedIn()) {\r\n                helperService.goToHomePage();\r\n                return;\r\n            }\r\n\r\n            const ST_ORDER_TYPE = 'ST';\r\n            const STATUS_DRAFT = 'DRAFT';\r\n            const STATUS_ORDERED = 'ORDERED';\r\n            const STATUS_PICKING = 'PICKING';\r\n            const STATUS_IN_TRANSIT = 'IN TRANSIT';\r\n            const STATUS_IN_PROGRESS = 'IN PROGRESS';\r\n            const STATUS_COMPLETED = 'COMPLETED';\r\n            const STATUS_VOIDED = 'VOIDED';\r\n\r\n            $scope.mode = '';\r\n            $scope.dataStatus = '';\r\n            $scope.availableProducts = [];//flat\r\n            $scope.groupedAvailableProducts = [];//grouped\r\n            $scope.totalCount = 0;\r\n\r\n            $scope.locations = [];\r\n            $scope.dateFormat = helperService.getDateByFormatForDatePickers();\r\n            $scope.firstShow = true;\r\n            $scope.firstAddFormShow = true;\r\n\r\n            $scope.currentOrder = {\r\n                data: []\r\n            };\r\n\r\n            $scope.deleteMode = null;\r\n            $scope.deleteObject = null;\r\n\r\n            $scope.itemQuantityDlg = null; // is bound to discount popover object with methods from directive\r\n            $scope.quantityObject = {};\r\n            $scope.ifcss = { 'height': (window.innerHeight * 0.9) - 400 + 'px' };\r\n            $scope.fcss = { 'height': window.innerHeight * 0.8 + 'px' };\r\n\r\n            $scope.isSite = configService.isSite;\r\n\r\n            $rootScope.$on('stockTransferDetail.add', function (event, data) {\r\n                $scope.locations = data.locations;\r\n                $scope.addNew();\r\n\r\n                helperService.showDialog($element, function () { });\r\n                $scope.initInputs();\r\n                helperService.setDatepicker($scope.dateFormat, '#effDate');\r\n                $scope.firstData = true;\r\n\r\n                $scope.loadGridProcess();\r\n            });\r\n\r\n            $rootScope.$on('stockTransferDetail.edit', function (event, data) {\r\n                $scope.locations = data.locations;\r\n                $scope.currentRow = data.row;\r\n                $scope.currentDetails($scope.currentRow);\r\n\r\n                helperService.showDialog($element, function () { });\r\n                $scope.initInputs();\r\n                helperService.setDatepicker($scope.dateFormat, '#effDate');\r\n                $scope.firstData = true;\r\n\r\n                $scope.loadGridProcess();\r\n            });\r\n\r\n            $timeout(function () {\r\n                if ($scope.firstShow) {\r\n                    $scope.firstShow = false;\r\n                }\r\n                else {\r\n                    $scope.$broadcast('refreshStTableProcess');\r\n                }\r\n            });\r\n\r\n            $scope.initInputs = function () {\r\n                $timeout(function () {\r\n                    if ($scope.firstAddFormShow) {\r\n                        $scope.firstAddFormShow = false;\r\n                        initSelects(function () {\r\n                            var el = $(this);\r\n                            if (el[0].id === 'fromOutlet-styler') {\r\n                                // add address to outlet\r\n                                angular.forEach($scope.locations, function (l) {\r\n                                    var p = \"<div class='width100'>\" + l.DisplayName + \"</div>\" +\r\n                                        \"<div class='width100' style='font-size:12px'>\" + (l.LocationAddress ? l.LocationAddress : '&nbsp;') +\r\n                                        \"</div>\";\r\n                                    var ef = el.find('li.loc-' + l.LocationID);\r\n\r\n                                    ef.html(p);\r\n                                });\r\n                            }\r\n                        });\r\n\r\n                        helperService.setDatepicker($scope.dateFormat, '#effDate');\r\n                        helperService.setDatepicker($scope.dateFormat, '#reqByDate');\r\n                    }\r\n\r\n                    $('input, select').trigger('refresh');\r\n                });\r\n            };\r\n\r\n            $scope.goBack = function () {\r\n                helperService.hideDatePickers('#reqByDate');\r\n\r\n                if ($scope.mode === 'new' ||\r\n                    $scope.mode === 'edit' ||\r\n                    $scope.mode === 'process') {\r\n                    $scope.mode = 'management';\r\n\r\n                    helperService.closeDialog($element);\r\n                }\r\n\r\n                $rootScope.$broadcast('stockOrdering.showList');\r\n            };\r\n\r\n            $scope.callbackModal = function () {\r\n                if ($scope.deleteMode === 'task') {\r\n                    $.blockUI();\r\n                    stockTakeService.voidStockTransfer($scope.deleteObject)\r\n                        .then(function (res) {\r\n                            $.unblockUI();\r\n                            $scope.goBack();\r\n                            $scope.needReloadAvailable = true;\r\n                        })\r\n                        .catch(function (err) {\r\n                            $.unblockUI();\r\n                            errorService.showError(err, null, null, null, true);\r\n                        });\r\n                }\r\n                else if ($scope.deleteMode === 'undo') {\r\n                    $.blockUI();\r\n                    stockTakeService.undoStockTransfer($scope.deleteObject)\r\n                        .then(function (res) {\r\n                            $.unblockUI();\r\n                            $scope.goBack();\r\n                            $scope.needReloadAvailable = true;\r\n                        })\r\n                        .catch(function (err) {\r\n                            $.unblockUI();\r\n                            errorService.showError(err, null, null, null, true);\r\n                        });\r\n                }\r\n            };\r\n\r\n            $scope.voidItem = function (item) {\r\n                if (item.Type === ST_ORDER_TYPE) {\r\n                    $scope.deleteMode = 'task';\r\n                    $scope.deleteObject = item.TaskID || item.taskID;\r\n                    helperService.showCustomDialog(gettextCatalog.getString('Void stock transfer') + ' ' + (item.Number || item.number || ''),\r\n                        gettextCatalog.getString('This will reverse all transfers and change the transfer status to voided! Would you like to proceed anyway?'),\r\n                        gettextCatalog.getString('Yes'),\r\n                        gettextCatalog.getString('No'));\r\n                }\r\n\r\n            };\r\n\r\n            $scope.undoItem = function (item) {\r\n                if (item.Type === ST_ORDER_TYPE) {\r\n                    $scope.deleteMode = 'undo';\r\n                    $scope.deleteObject = item.TaskID || item.taskID;\r\n                    helperService.showCustomDialog(gettextCatalog.getString('Undo stock transfer') + ' ' + (item.Number || item.number || ''),\r\n                        gettextCatalog.getString('This will reverse all transfers and change the transfer status to draft! Would you like to proceed anyway?'),\r\n                        gettextCatalog.getString('Yes'),\r\n                        gettextCatalog.getString('No'));\r\n                }\r\n\r\n            };\r\n\r\n            $scope.completeStockTransfer = function (row) {\r\n                if (row.dataStatus !== STATUS_IN_TRANSIT) {\r\n                    return;\r\n                }\r\n\r\n                var date = helperService.toDateFromDatepickerDirect(row.date);\r\n                if (!date || date === 'Invalid date') {\r\n                    errorService.showError(\"Please select Effective Date\");\r\n                    return;\r\n                }\r\n\r\n                var putAwayData = [];\r\n                if (!!row.putAway) {\r\n                    angular.forEach(row.data, function (el) {\r\n                        var rid = null;\r\n                        if (el.ID.indexOf(el.ProductID + '#') !== 0)\r\n                            rid = el.ID;\r\n                        var dtl = {\r\n                            ID: rid,\r\n                            ProductID: el.ProductID,\r\n                            BatchSN: el.BatchSN,\r\n                            ExpiryDate: el.ExpiryDate,\r\n                            LocationID: row.toLocationID,\r\n                            ReceivedQuantity: el.ReceivedQuantity,\r\n                            NonInventory: el.NonInventory\r\n                        };\r\n    \r\n                        putAwayData.push(dtl);\r\n                    });\r\n                }              \r\n\r\n                $.blockUI();\r\n                stockTakeService.completeStockTransfer(row.taskID, date, putAwayData)\r\n                    .then(function (res) {\r\n                        $.unblockUI();\r\n                        $scope.goBack();\r\n                        $scope.needReloadAvailable = true;\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err, null, null, null, true);\r\n                    });\r\n            };\r\n\r\n            $scope.getStatusName = function (status) {\r\n                switch (status) {\r\n                    case \"DRAFT\":\r\n                        return \"Draft\";\r\n                    case \"ORDERED\":\r\n                        return \"Ordered\";\r\n                    case \"PICKING\":\r\n                        return \"Picking\";\r\n                    case \"IN TRANSIT\":\r\n                        return \"In transit\";\r\n                    case \"COMPLETED\":\r\n                        return \"Completed\";\r\n                    case \"INVOICE COMPLETED\":\r\n                        return \"Billed\";\r\n                    case \"PARTIALLY RECEIVED\":\r\n                        return \"Receiving\";\r\n                    case \"PO COMPLETED\":\r\n                        return \"Ordered\";\r\n                    case \"PO IN PROGRESS\":\r\n                        return \"Ordering\";\r\n                    case \"PARTIALLY RECEIVED / CREDITED\":\r\n                        return \"Receiving / Credited\";\r\n                    case \"PARTIALLY INVOICED\":\r\n                        return \"Partially billed\";\r\n                    case \"INVOICED\":\r\n                        return \"Billed\";\r\n                    case \"ORDERING\":\r\n                        return \"Orderring\";\r\n                }\r\n\r\n                return status;\r\n            };\r\n\r\n            $scope.getCanUndo = function (itemType, status) {\r\n                return itemType === ST_ORDER_TYPE\r\n                    && status === STATUS_ORDERED;\r\n            };\r\n\r\n            $scope.getCanVoid = function (type, status) {\r\n                return type === ST_ORDER_TYPE && (status === STATUS_ORDERED\r\n                    || status === STATUS_DRAFT);\r\n            };\r\n\r\n            //------------ Stock Order Details --------------------------------------\r\n            $scope.addNew = function () {\r\n                var fromLoc = $scope.locations.length > 0 ? $scope.locations[0] : null;\r\n\r\n                $scope.currentOrder = {\r\n                    dataStatus: STATUS_DRAFT,\r\n                    fromLocationID: fromLoc ? fromLoc.LocationID : null,\r\n                    fromLocationName: fromLoc ? fromLoc.DisplayName : null,\r\n                    toLocationID: configService.lastOutletID,\r\n                    toLocationName: configService.lastOutlet,\r\n                    date: null,\r\n                    stRequiredBy: null,\r\n                    data: [],\r\n                    dataDisplay: [],\r\n                    showAvailability: true,\r\n                    statusName: $scope.getStatusName(STATUS_DRAFT),\r\n                    canUndo: $scope.getCanUndo(ST_ORDER_TYPE, STATUS_DRAFT),\r\n                    canVoid: false,\r\n                    Type: ST_ORDER_TYPE\r\n                };\r\n\r\n                $scope.mode = 'new';\r\n            };\r\n\r\n            $scope.currentDetails = function (row) {\r\n\r\n                var fromLoc = $scope.locations.filter(function (v) { return v.LocationID === row.FromLocationOrBinID; })[0];\r\n                var toLoc = configService.lastOutlet;\r\n\r\n                $scope.currentOrder = {\r\n                    dataStatus: row.Status,\r\n                    number: row.Number,\r\n                    taskID: row.TaskID,\r\n                    fromLocationID: row.FromLocationID,\r\n                    fromLocationOrBinId: row.FromLocationOrBinID,\r\n                    fromLocationName: !!fromLoc ? fromLoc.DisplayName : null,\r\n                    toLocationID: row.ToLocationID,\r\n                    toLocationName: toLoc,\r\n                    date: row.date,\r\n                    stRequiredBy: row.stRequiredBy,\r\n                    status: row.Status,\r\n                    data: [],\r\n                    dataDisplay: [],\r\n                    showAvailability: row.Status === STATUS_DRAFT || row.Status === STATUS_ORDERED\r\n                        || row.Status === STATUS_PICKING,\r\n                    statusName: $scope.getStatusName(row.Status),\r\n                    canUndo: $scope.getCanUndo(ST_ORDER_TYPE, row.Status),\r\n                    canVoid: $scope.getCanVoid(ST_ORDER_TYPE, row.Status),\r\n                    Type: ST_ORDER_TYPE,\r\n                    putAway: row.PutAway\r\n                };\r\n\r\n                $scope.mode = 'edit';\r\n            };\r\n\r\n            $scope.loadGridProcess = function (sorting) {\r\n                if (!$scope.currentOrder.taskID) {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(null);\r\n                    return deferred.promise;\r\n                }\r\n\r\n                $.blockUI();\r\n                var lst = stockOrderingService.loadStockTransferOrderDetails($scope.currentOrder.taskID, 1,\r\n                    100000, sorting)\r\n                    .then(function (data) {\r\n                        $scope.currentOrder.data = [];\r\n                        $scope.currentOrder.dataDisplay = [];\r\n\r\n                        angular.forEach(data.data.Rows, function (el) {\r\n                            el.refID = uuid2.newguid();\r\n                            el.ReceivedQuantity = !!el.ReceivedQuantity ? el.ReceivedQuantity : el.TransferQuantity;\r\n                            \r\n                            $scope.currentOrder.data.push(el);\r\n                        });\r\n\r\n                        $.unblockUI();\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve(null);\r\n                        return deferred2.promise;\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n\r\n                return lst;\r\n            };\r\n\r\n            $scope.needReloadAvailable = true;\r\n\r\n            $scope.loadAvailableProducts = function (locationID, searchText) {\r\n                $scope.availableProducts = [];\r\n                $scope.displayAvailableProducts = [];\r\n                $scope.totalCount = 0;\r\n\r\n                return stockOrderingService.loadAvailableProducts(locationID)\r\n                    .then(function (res) {\r\n                        $scope.groupedAvailableProducts = res.data.products;\r\n                        angular.forEach(res.data.products, function (el) {\r\n                            if (el.FamilyID && el.Items && el.Items.length > 0) {\r\n                                angular.forEach(el.Items, function (item) {\r\n                                    item.IsVariation = true;\r\n                                    $scope.availableProducts.push(item);\r\n                                });\r\n\r\n                            } else {\r\n                                $scope.availableProducts.push(el);\r\n                            }\r\n                        });\r\n\r\n                        $scope.totalCount = res.data.totalCount;\r\n\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve($scope.availableProducts);\r\n                        return deferred2.promise;\r\n                    });\r\n            };\r\n\r\n            $scope.showScanDlg = function () {\r\n                if ($scope.needReloadAvailable) {\r\n                    $.blockUI();\r\n                    $scope.loadAvailableProducts($scope.currentOrder.fromLocationID)\r\n                        .then(function (res) {\r\n                            $scope.needReloadAvailable = false;\r\n                            $rootScope.$broadcast(\"stockTransferOrder.addLine\",\r\n                                {\r\n                                    currentOrder: $scope.currentOrder,\r\n                                    availableProducts: $scope.availableProducts,\r\n                                    groupedAvailableProducts: $scope.groupedAvailableProducts,\r\n                                    modifyTransferItemFunc: $scope.modifyTransferItem\r\n                                });\r\n                        })\r\n                        .finally(function () {\r\n                            $.unblockUI();\r\n                        });\r\n                } else {\r\n                    $rootScope.$broadcast(\"stockTransferOrder.addLine\",\r\n                        {\r\n                            currentOrder: $scope.currentOrder,\r\n                            availableProducts: $scope.availableProducts,\r\n                            groupedAvailableProducts: $scope.groupedAvailableProducts,\r\n                            modifyTransferItemFunc: $scope.modifyTransferItem\r\n                        });\r\n                }\r\n            };\r\n\r\n            $scope.$watch('currentOrder.fromLocationID',\r\n                function (newValue, oldValue) {\r\n                    if (newValue !== oldValue) {\r\n                        // reload available products list\r\n                        $.blockUI();\r\n                        $scope.loadAvailableProducts($scope.currentOrder.fromLocationID)\r\n                            .then(function (res) {\r\n                                if ($scope.firstData === false) {\r\n                                    $scope.currentOrder.data = [];\r\n                                } else {\r\n                                    $scope.firstData = false;\r\n                                }\r\n                                var items = $scope.locations.filter(function (l) {\r\n                                    return l.LocationID === $scope.currentOrder.fromLocationID;\r\n                                });\r\n                                if (items.length === 1) {\r\n                                    $scope.currentOrder.fromLocationName = items[0].DisplayName;\r\n                                }\r\n                            })\r\n                            .finally(function () {\r\n                                $.unblockUI();\r\n                            });\r\n                    }\r\n                }\r\n            );\r\n\r\n            $scope.modifyTransferItem = function (row, isAbsolute, currentOrder, quantityObject, showMessageWhenAdded = false) {\r\n                if (row.FamilyID && !row.IsVariation) {\r\n                    $scope.openFamilyDlg(row);\r\n                    return;\r\n                }\r\n\r\n                var processed = false;\r\n                angular.forEach(currentOrder.data, function (el) {\r\n                    if (el.ProductID === row.ProductID) {\r\n                        processed = true;\r\n                        \r\n                        if (isAbsolute === true) {\r\n                            el.OrderedQuantity = quantityObject.Adjustment;\r\n                        }\r\n                        else {\r\n                            el.OrderedQuantity += 1;\r\n                        }\r\n\r\n                        return false;\r\n                    }\r\n                });\r\n\r\n                if (!processed) {\r\n                    var ne = {\r\n                        ID: row.ProductID,\r\n                        ProductID: row.ProductID,\r\n                        ProductCode: row.ProductCode,\r\n                        Name: row.Name,\r\n                        Unit: row.UnitName,\r\n                        QuantityOnHand: row.OnHand,\r\n                        QuantityAvailable: row.Available,\r\n                        OnOrder: row.OnOrder,\r\n                        OrderedQuantity: 1,\r\n                        CostingMethod: row.CostingMethod,\r\n                        FamilyID: row.FamilyID,\r\n                        FamilyName: row.FamilyName,\r\n                        Option1: row.Option1,\r\n                        Option2: row.Option2,\r\n                        Option3: row.Option3,\r\n                        refID: uuid2.newguid(),\r\n                        Comments: '',\r\n                        Items: null\r\n                    };\r\n\r\n                    if (isAbsolute === true) {\r\n                        ne.TransferQuantity = quantityObject.Adjustment;\r\n                    }\r\n\r\n                    currentOrder.data.push(ne);\r\n                    \r\n                    if (showMessageWhenAdded) {\r\n                        var msg = gettextCatalog.getString(\"Product {{name}} was added.\", { name: ne.Name });\r\n                        $rootScope.$broadcast('snackbar.show', {message: msg});\r\n                    }\r\n                }\r\n            };\r\n\r\n            $scope.removeTransferItem = function (row) {\r\n                for (var i = 0; i < $scope.currentOrder.data.length; i++) {\r\n                    if ($scope.currentOrder.data[i].ID === row.ID) {\r\n                        $scope.currentOrder.data.splice(i, 1);\r\n                        break;\r\n                    }\r\n                }\r\n            };\r\n\r\n            $scope.showSetQuantityDlg = function (row, type) {\r\n                if (($scope.currentOrder.dataStatus === STATUS_DRAFT && type === 'ordered') || ($scope.currentOrder.dataStatus === STATUS_IN_TRANSIT && type === 'received')) {\r\n                    $scope.makeQuantityObject(row, type);\r\n                    $scope.showItemQuantityDlg(row.refID);\r\n                }\r\n            };\r\n\r\n            $scope.openFamilyDlg = function (row) {\r\n                var availableItems = $scope.groupedAvailableProducts.filter(function (item) { return item.FamilyID === row.FamilyID; });\r\n                var data = {\r\n                    familyID: row.FamilyID,\r\n                    familyName: row.FamilyName,\r\n                    selectedProducts: row.Items || [],\r\n                    availableProducts: availableItems[0].Items || [],\r\n                    isEditable: $scope.currentOrder.dataStatus === STATUS_DRAFT,\r\n                    options: {\r\n                        Option1Values: availableItems[0].Option1Values,\r\n                        Option2Values: availableItems[0].Option2Values,\r\n                        Option3Values: availableItems[0].Option3Values\r\n                    },\r\n                    fromLocationName: $scope.currentOrder.fromLocationName,\r\n                    toLocationName: $scope.currentOrder.toLocationName\r\n                };\r\n                $rootScope.$broadcast(\"stockFamilyMatrix.show\", data);\r\n            };\r\n\r\n            $scope.makeQuantityObject = function (row, type) {\r\n                $scope.quantityObject = {};\r\n                angular.copy(row, $scope.quantityObject);\r\n                if(type === 'ordered') {\r\n                    $scope.quantityObject.Adjustment = !!$scope.quantityObject.OrderedQuantity ? $scope.quantityObject.OrderedQuantity : 1;\r\n                }\r\n                else {\r\n                    $scope.quantityObject.Adjustment = !!$scope.quantityObject.ReceivedQuantity ? $scope.quantityObject.ReceivedQuantity : 1;\r\n                }\r\n                $scope.quantityObject.QuantityOnHand = !!row.QuantityOnHand ? row.QuantityOnHand : row.OnHand;\r\n                $scope.quantityObject.OnOrder = !!row.OnOrder ? row.OnOrder : row.OnOrder;\r\n                $scope.quantityObject.QuantityAvailable = !!row.QuantityAvailable ? row.QuantityAvailable : row.Available;\r\n                $scope.quantityObject.showOnHand = true;\r\n                $scope.quantityObject.hideBarcode = true;\r\n                $scope.quantityObject.readOnly = true;\r\n                if (!$scope.quantityObject.ID) {\r\n                    $scope.quantityObject.ID = row.ProductID;\r\n                }\r\n                $scope.quantityObject.Type = type;\r\n            };\r\n\r\n            $scope.showItemQuantityDlg = function (elID) {\r\n                $scope.quantityObject.value = $scope.quantityObject.Adjustment;\r\n                $timeout(function () {\r\n                    $scope.itemQuantityDlg.show(!elID ? '#quantityObject' : '#' + elID);\r\n                });\r\n            };\r\n\r\n            // callback\r\n            $scope.setQuantity = function (prm, event) {\r\n\r\n                $timeout(function () { $scope.itemQuantityDlg.hide(true); });\r\n\r\n                if (prm === true) {\r\n                    $timeout(function () {\r\n                        if (Number($scope.quantityObject.value) != NaN) {\r\n                            $scope.quantityObject.Adjustment = Number($scope.quantityObject.value);\r\n                        }\r\n                        else {\r\n                            $scope.quantityObject.Adjustment = 0;\r\n                        }\r\n                        $scope.adjustStockTransfer();\r\n                    });\r\n                }\r\n            };\r\n\r\n            $scope.adjustStockTransfer = function () {\r\n                angular.forEach($scope.currentOrder.data, function (el) {\r\n                    if (el.ID === $scope.quantityObject.ID) {\r\n                        processed = true;\r\n                        if($scope.quantityObject.Type === 'ordered') {\r\n                            el.OrderedQuantity = $scope.quantityObject.Adjustment;\r\n                        }\r\n                        else {\r\n                            el.ReceivedQuantity = $scope.quantityObject.Adjustment;\r\n                        }\r\n                        return false;\r\n                    }\r\n                });\r\n            };\r\n\r\n            $scope.modifyStockTransfer = function () {\r\n                $.blockUI();\r\n\r\n                return stockOrderingService.modifyStockTransfer($scope.currentOrder)\r\n                    .then(function (res) {\r\n                        var deferred2 = $q.defer();\r\n                        deferred2.resolve(null);\r\n                        return deferred2.promise;\r\n                    })\r\n                    .then(function (res) {\r\n                        $.unblockUI();\r\n                        $scope.goBack();\r\n                        $scope.needReloadAvailable = true;\r\n                    })\r\n                    .catch(function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err, null, null, null, true);\r\n                    });\r\n            };\r\n\r\n            $scope.currentLineCommentRow = '';\r\n            $scope.currentLineComment = { value: '' };\r\n\r\n            $scope.showChangeRowCommentDialog = function (row) {\r\n                $scope.currentLineCommentRow = row;\r\n                $scope.currentLineComment = { value: row.Comments };\r\n                var $windowElement = $('#addCommentsDialogModal');\r\n                helperService.showDialog($windowElement);\r\n            };\r\n\r\n            $scope.closeAddLineCommentsDialog = function (cancel) {\r\n                if (cancel === false)\r\n                    $scope.currentLineCommentRow.Comments = $scope.currentLineComment.value;\r\n\r\n                var $windowElement = $('#addCommentsDialogModal');\r\n                helperService.closeDialog($windowElement);\r\n            };\r\n\r\n            // ------------- Reorder -------------------------------------------\r\n            $scope.showReorderDlg = function () {\r\n                var $windowElement = $('#reorderItemsDialogModal');\r\n                helperService.showDialog($windowElement);\r\n            };\r\n\r\n            $scope.closeReorderDlg = function (allLow, justClose) {\r\n                var all = !allLow;\r\n                if (!justClose)\r\n                    $scope.reorderProducts(all);\r\n                else {\r\n                    var $windowElement = $('#reorderItemsDialogModal');\r\n                    helperService.closeDialog($windowElement);\r\n                }\r\n            };\r\n\r\n            $scope.reorderProducts = function (onlyAvailable) {\r\n                $.blockUI();\r\n                stockOrderingService.loadReorderProducts($scope.currentOrder.fromLocationID,\r\n                    $scope.currentOrder.toLocationID, onlyAvailable)\r\n                    .then(function (res) {\r\n                        if (res.data.totalCount > 0) {\r\n                            $scope.currentOrder.data = [];\r\n                            angular.forEach(res.data.products, function (row) {\r\n                                \r\n                                if(row.FamilyID && row.Items && row.Items.length > 0) {\r\n                                    angular.forEach(row.Items, function(variant) {\r\n                                        var dtl = {\r\n                                            ID: variant.ProductID,\r\n                                            ProductID: variant.ProductID,\r\n                                            ProductCode: variant.ProductCode,\r\n                                            Name: variant.Name,\r\n                                            Unit: variant.UnitName,\r\n                                            QuantityOnHand: variant.OnHand,\r\n                                            QuantityAvailable: variant.Available,\r\n                                            OnOrder: variant.OnOrder,\r\n                                            OrderedQuantity: variant.OrderedQuantity,\r\n                                            CostingMethod: variant.CostingMethod,\r\n                                            FamilyID: variant.FamilyID,\r\n                                            FamilyName: variant.FamilyName,\r\n                                            Option1: variant.Option1,\r\n                                            Option2: variant.Option2,\r\n                                            Option3: variant.Option3,\r\n                                            Items: null,\r\n                                            refID: uuid2.newguid(),\r\n                                            Comments: ''\r\n                                        };\r\n                    \r\n                                        $scope.currentOrder.data.push(dtl);\r\n                                    });\r\n                                } else {\r\n                                    var ne = {\r\n                                        ID: row.ProductID,\r\n                                        ProductID: row.ProductID,\r\n                                        ProductCode: row.ProductCode,\r\n                                        Name: row.Name,\r\n                                        Unit: row.UnitName,\r\n                                        QuantityOnHand: row.OnHand,\r\n                                        QuantityAvailable: row.Available,\r\n                                        OnOrder: row.OnOrder,\r\n                                        OrderedQuantity: row.OrderedQuantity,\r\n                                        CostingMethod: row.CostingMethod,\r\n                                        FamilyID: row.FamilyID,\r\n                                        FamilyName: row.FamilyName,\r\n                                        Option1: row.Option1,\r\n                                        Option2: row.Option2,\r\n                                        Option3: row.Option3,\r\n                                        Items: null,\r\n                                        refID: uuid2.newguid(),\r\n                                        Comments: ''\r\n                                    };\r\n    \r\n                                    $scope.currentOrder.data.push(ne);\r\n                                }                               \r\n                            });\r\n                        } else {\r\n                            errorService.showError(\"Products to reorder not found\", null, null, null, true);\r\n                        }\r\n\r\n                    })\r\n                    .catch(function (err) {\r\n                        errorService.showError(err, null, null, null, true);\r\n                    })\r\n                    .finally(function () {\r\n                        var $windowElement = $('#reorderItemsDialogModal');\r\n                        helperService.closeDialog($windowElement);\r\n\r\n                        $.unblockUI();\r\n                    });\r\n            };\r\n\r\n            // ------------- Family ---------------------------------------------\r\n            $scope.$on(\"stockFamilyMatrix.save\", function (event, data) {\r\n                data.items.forEach(function (item) {\r\n                    $scope.addFamilyItemToOrder(item, data.comments);\r\n                });\r\n            });\r\n\r\n            $scope.addFamilyItemToOrder = function (row, comments) {\r\n                const existing = $scope.currentOrder.data.find(function (x) { return x.ProductID === row.ProductID; });\r\n                if (existing) {\r\n                    existing.OrderedQuantity += row.OrderedQuantity;\r\n                } else {\r\n                    const newRec = {\r\n                        ID: row.ProductID,\r\n                        ProductID: row.ProductID,\r\n                        ProductCode: row.ProductCode,\r\n                        Name: row.Name,\r\n                        Unit: row.UnitName,\r\n                        QuantityOnHand: row.OnHand,\r\n                        QuantityAvailable: row.Available,\r\n                        OnOrder: row.OnOrder,\r\n                        OrderedQuantity: row.OrderedQuantity,\r\n                        CostingMethod: row.CostingMethod,\r\n                        FamilyID: row.FamilyID,\r\n                        FamilyName: row.FamilyName,\r\n                        Option1: row.Option1,\r\n                        Option2: row.Option2,\r\n                        Option3: row.Option3,\r\n                        refID: uuid2.newguid(),\r\n                        Comments: comments,\r\n                        Items: null\r\n                    };\r\n                    $scope.currentOrder.data = $scope.currentOrder.data.concat(newRec);\r\n                }\r\n            };\r\n        }]);","angular.module('services').service('triPOSReaderProvider',\r\n    ['$q', 'configService', 'gettextCatalog', 'webOnlyProvider', 'helperService', '$timeout', 'uuid2', '$locale',\r\n\r\n        function ($q, configService, gettextCatalog, webOnlyProvider, helperService, $timeout, uuid2, $locale) {\r\n\r\n            this.appID = buildConfiguration.triPOSApplicationId;\r\n            this.parentScope = null;\r\n            this.currency_symbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\r\n\r\n            this.triPOSHeaders = function () {\r\n                return {\r\n                    'tp-application-id': this.appID,\r\n                    'tp-application-name': 'DEAR POS',\r\n                    'tp-application-version': buildConfiguration.appVersion,\r\n                    'tp-authorization': 'Version=2.0',\r\n                    'tp-express-account-id': configService.triPOSAccountID,\r\n                    'tp-express-acceptor-id': configService.triPOSAcceptorID,\r\n                    'tp-express-account-token': configService.triPOSAccountToken,\r\n                    'tp-request-id': uuid2.newguid(),\r\n                    'tp-return-logs': buildConfiguration.configuration == 'Debug' ? true : false,\r\n                    'Content-Type': 'application/json'\r\n                };\r\n            };\r\n\r\n            this.unpair = function (settings) {\r\n                var THIS = this;\r\n                var laneID = settings.triPOSLaneID;\r\n\r\n                if (!laneID) {\r\n                    var deferred = $q.defer();\r\n                    deferred.reject('LaneID is not set.');\r\n                    return deferred.promise;\r\n                }\r\n\r\n                // get lane and remove it\r\n                return webOnlyProvider.loadTriPOSLane(this.triPOSHeaders(), laneID, true)\r\n                .then(function (data) {\r\n\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                },\r\n                function (data) { // error\r\n                    var deferred = $q.defer();\r\n                    if (data.status == 404 || data.status == 410) // not found\r\n                    {\r\n                        deferred.resolve(false);\r\n                    }\r\n                    else {\r\n                        deferred.reject(data);\r\n                    }\r\n                    return deferred.promise;\r\n                }\r\n                )\r\n                .then(function (isRemoveNeeded) {\r\n                    if (!isRemoveNeeded) {\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve(true);\r\n                        return deferred.promise;\r\n                    }\r\n                    else\r\n                        return webOnlyProvider.deleteTriPOSLane(THIS.triPOSHeaders(), laneID, true);\r\n                });\r\n            };\r\n\r\n            this.init = function (force, settings) {\r\n                if (!force) {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(true);\r\n                    return deferred.promise;\r\n                }\r\n\r\n                var THIS = this;\r\n                // if force, make relink to given LineID\r\n                var laneID = settings.triPOSLaneID;\r\n                var terminalID = settings.triTerminalID;\r\n                var activationCode = settings.triActivationCode;\r\n\r\n                return THIS.unpair(settings)\r\n                        .then(function (isOk) {\r\n                            return webOnlyProvider.createTriPOSLane(THIS.triPOSHeaders(), laneID, terminalID, activationCode, true);\r\n                        });\r\n            };\r\n\r\n            this.makePayment = function (options) {\r\n                var settings = configService.getCardPaymentSettings();\r\n                var THIS = this;\r\n\r\n                return webOnlyProvider.triPOSMakePayment(this.triPOSHeaders(), settings.triPOSLaneID, options.amount, options.OrderNumber)\r\n                .then(function (transactionData) {\r\n                    console.log('tryPOS payment. requestid:' + transactionData.config.headers['tp-request-id'] +\r\n                                ', amount:' + JSON.parse(transactionData.config.data).transactionAmount +\r\n                                ', transactionid:' + transactionData.data.transactionId +\r\n                                ', host response code: ' + transactionData.data._processor.expressResponseCode);\r\n\r\n\r\n                    var deferred = $q.defer();\r\n                    // transactionData.data.approvedAmount <= transactionAmount\r\n\r\n                    if (transactionData.data.isApproved) {\r\n\r\n                        // for partial payment approval\r\n                        if (transactionData.data._processor.expressResponseCode == 5 &&\r\n                            parseFloat(transactionData.data.approvedAmount) < parseFloat(options.amount)) {\r\n                            // show warning dialog\r\n                            var txt = gettextCatalog.getString('Only') + ' ' + helperService.applyCurrency(transactionData.data.approvedAmount, THIS.currency_symbol) + ' ' + gettextCatalog.getString('is approved. The rest of the amount must be paid in another way.');\r\n                            transactionData.data.partialApproved = true;\r\n\r\n                            helperService.showInfoDialog({ titel: '', body: txt }, function () {\r\n                                deferred.resolve(transactionData);\r\n                            });\r\n                        }\r\n                        else {\r\n                            deferred.resolve(transactionData);\r\n                        }\r\n\r\n                        var prms = deferred.promise;\r\n                        if (!!transactionData.data.signature) {\r\n                            // convert signature to png\r\n                            prms = prms.then(function (transactionData) {\r\n                                return webOnlyProvider.posUtils(\"vantivSignatureToPng\", transactionData.data.signature);\r\n                            })\r\n                            .then(function (res) {\r\n                                transactionData.data.signatureImage = res.data;\r\n                                var deferred3 = $q.defer();\r\n                                deferred3.resolve(transactionData);\r\n                                return deferred3.promise;\r\n                            });\r\n                        }\r\n\r\n                        prms = prms.then(function (transactionData) {\r\n                            transactionData.data.provider = 'triPOSReaderProvider';\r\n                            var deferred4 = $q.defer();\r\n                            var resp = {\r\n                                result: true,\r\n                                response: {\r\n                                    ServerTransactionID: transactionData.data.transactionId,\r\n                                    TransactionMetaData: transactionData.data\r\n                                }\r\n                            };\r\n\r\n                            if (transactionData.data.partialApproved === true) {\r\n                                resp.patialApprovedSum = transactionData.data.approvedAmount;\r\n                            }\r\n\r\n                            deferred4.resolve(resp);\r\n\r\n                            return deferred4.promise;\r\n                        });\r\n\r\n                        return prms;\r\n                    }\r\n                    else {\r\n                        var res = {\r\n                            result: false,\r\n                            response: {\r\n                                errorDescription: gettextCatalog.getString('Transaction is ') + transactionData.data.statusCode + '\\r\\n' + transactionData.data._processor.expressResponseMessage\r\n                            }\r\n                        };\r\n\r\n                        // in the case of EMV, decline might require receipt print\r\n                        // so mark this in special field and attach transaction data\r\n                        if (transactionData.data._processor.expressResponseCode == 20) {\r\n                            res.showCustomDialog = true;\r\n                            res.transactionData = transactionData.data;\r\n                            res.response.errorDescription = gettextCatalog.getString('Transaction is ') + transactionData.data.statusCode + '<br/>' + transactionData.data._processor.expressResponseMessage;\r\n                        }\r\n\r\n                        deferred.reject(res);\r\n                        return deferred.promise;\r\n                    }\r\n                });\r\n            };\r\n\r\n            this.refund = function (el, refundSum, options) {\r\n                var THIS = this;\r\n                var settings = configService.getCardPaymentSettings();\r\n\r\n                // get refund link\r\n                var lnkObject = el.TransactionMetaData._links.find(x => x.rel && x.rel === 'return');\r\n\r\n                if (!lnkObject) { // Incase return link not exist get the reversal link\r\n                    lnkObject = el.TransactionMetaData._links.find(x => x.rel && x.rel === 'reversal');\r\n                }\r\n\r\n                if (!lnkObject) {\r\n                    var deferred = $q.defer();\r\n                    deferred.reject({\r\n                        result: false,\r\n                        response: {\r\n                            errorDescription: gettextCatalog.getString('refund is not supported for this payment: ') + el.transactionId\r\n                        }\r\n                    });\r\n\r\n                    return deferred.promise;\r\n                }\r\n\r\n                return webOnlyProvider.triPOSRefundPayment(lnkObject.href, this.triPOSHeaders(), settings.triPOSLaneID, refundSum, options.OrderNumber)\r\n                        .then(function (transactionData) {\r\n                            var deferred = $q.defer();\r\n\r\n                            console.log('tryPOS payment. requestid:' + transactionData.config.headers['tp-request-id'] +\r\n                                        ', amount:' + refundSum +\r\n                                        ', transactionid:' + transactionData.data.transactionId +\r\n                                        ', host response code: ' + transactionData.data._processor.expressResponseCode);\r\n\r\n\r\n                            if (transactionData.data.isApproved) {\r\n\r\n                                deferred.resolve(transactionData);\r\n\r\n                                if (!!transactionData.data.signature) {\r\n                                    // convert signature to png\r\n                                    deferred.promise = deferred.promise.then(function (transactionData) {\r\n                                        return webOnlyProvider.posUtils(\"vantivSignatureToPng\", transactionData.data.signature);\r\n                                    })\r\n                                    .then(function (res) {\r\n                                        transactionData.data.signatureImage = res.data;\r\n                                        var deferred3 = $q.defer();\r\n                                        deferred3.resolve(transactionData);\r\n                                        return deferred3.promise;\r\n                                    });\r\n                                }\r\n\r\n                                deferred.promise = deferred.promise.then(function (transactionData) {\r\n                                    transactionData.data.provider = 'triPOSReaderProvider';\r\n                                    var deferred4 = $q.defer();\r\n\r\n                                    deferred4.resolve({\r\n                                        result: true,\r\n                                        amount: refundSum,\r\n                                        ServerTransactionID: transactionData.data.transactionId,\r\n                                        TransactionMetaData: transactionData.data\r\n                                    });\r\n\r\n                                    return deferred4.promise;\r\n                                });\r\n\r\n                                //deferred.resolve({\r\n                                //    result: true,\r\n                                //    amount: refundSum,\r\n                                //    ServerTransactionID: transactionData.data.transactionId,\r\n                                //    TransactionMetaData: transactionData.data\r\n                                //});\r\n                            }\r\n                            else {\r\n                                deferred.resolve(\r\n                                    {\r\n                                        amount: refundSum,\r\n                                        result: false,\r\n                                        messageHide: true,\r\n                                        cardPAN: el.TransactionMetaData.accountNumber,\r\n                                        cardType: el.TransactionMetaData.cardLogo,\r\n                                        message: gettextCatalog.getString('Transaction is ') + transactionData.data.statusCode + '\\r\\n' + transactionData.data._processor.expressResponseMessage\r\n                                        //                                    message: gettextCatalog.getString('Transaction status is ') + transactionData.result\r\n                                    }); // in error case enlarge rest sum. It will be appended to user account\r\n                            }\r\n\r\n                            return deferred.promise;\r\n                        });\r\n            };\r\n        }\r\n\r\n    ]);","angular.module('services').service('tyroReaderProvider',\r\n    ['$q', 'configService', 'gettextCatalog', 'webOnlyProvider', 'helperService', '$timeout',\r\n\r\n        function ($q, configService, gettextCatalog, webOnlyProvider, helperService, $timeout) {\r\n            this.appID = buildConfiguration.tyroApplicationId;\r\n            this.delayDone = true; // this key should be used if provider generates some intermediate events that should be processed before payment will be treated as complited\r\n\r\n            this.integrationKeys = {};\r\n            this.iclient = null;\r\n            this.parentScope = null;\r\n\r\n            this.formKey = function () {\r\n                return configService.tyroMerchantID + '_' + configService.tyroTerminalID;\r\n            };\r\n\r\n            this.init = function (force) {\r\n                var deferred = $q.defer();\r\n\r\n                var v = window.localStorage.getItem('TyroIntegrationKeys');\r\n                this.integrationKeys = JSON.parse(v);\r\n\r\n                if (this.integrationKeys == null)\r\n                    this.integrationKeys = {};\r\n\r\n                var settings = configService.getCardPaymentSettings();\r\n\r\n//                if (!!settings.tyroConnectionUrl)\r\n                //                  iframeSourceUrlExt = settings.tyroConnectionUrl;\r\n                iframeSourceUrlExt = !configService.isQAMode ?\r\n                                      \"https://iclient.tyro.com/\" :\r\n                                      \"https://iclientsimulator.test.tyro.com/\"; // debug aims only !!!\r\n\r\n                // create new instance each time\r\n                this.iclient = new TYRO.IClient(this.appID,\r\n                    {\r\n                        posProductVendor: \"DEAR Systems\",\r\n                        posProductName: \"DEAR POS\",\r\n                        posProductVersion: buildConfiguration.appVersion\r\n                    });\r\n\r\n                if (force !== true && !!this.integrationKeys[this.formKey()]) {\r\n                    deferred.resolve(this.integrationKeys[this.formKey()]);\r\n                    return deferred.promise;\r\n                }\r\n\r\n                var THIS = this;\r\n                var prWithTimeout = this.timeout(deferred.promise, 60 * 2 * 1000, {\r\n                    result: false,\r\n                    disableAddPayment: true,\r\n                    response: {\r\n                        errorDescription: gettextCatalog.getString('Terminal connection timeout')\r\n                    }\r\n                });\r\n                this.iclient.pairTerminal(configService.tyroMerchantID, configService.tyroTerminalID,\r\n                    function (response) {\r\n                        if (response.status == 'success') {\r\n                            THIS.integrationKeys[THIS.formKey()] = response.integrationKey;\r\n                            window.localStorage.setItem('TyroIntegrationKeys', JSON.stringify(THIS.integrationKeys));\r\n\r\n                            deferred.resolve(response.integrationKey);\r\n                        }\r\n                        else if (response.status == 'failure') {\r\n                            deferred.reject({\r\n                                result: false,\r\n                                disableAddPayment: true,\r\n                                response: {\r\n                                    errorDescription: response.message\r\n                                }\r\n                            });\r\n                        }\r\n                        else\r\n                            return; // wait for next time call\r\n                    });\r\n\r\n                return prWithTimeout;\r\n            }\r\n\r\n            this.progressText = \"\";\r\n            this.isProgressShown = false;\r\n            this.hideButtons = false;\r\n            this.showProgressDialog = function () {\r\n                var THIS = this;\r\n                if (!this.isProgressShown) {\r\n\r\n                    this.parentScope.customModalDlg2Caption = 'Tyro payment system';\r\n                    this.parentScope.customModalDlg2Text = this.progressText;\r\n                    if (!this.hideButtons) {\r\n                        this.parentScope.customModalDlg2Buttons = [{\r\n                            name: gettextCatalog.getString('Cancel'),\r\n                            value: 'cancel'\r\n                        }];\r\n                    }\r\n                    else {\r\n                        this.parentScope.customModalDlg2Buttons = [];\r\n                    }\r\n\r\n                    this.parentScope.callbackModal2 = function (code) {\r\n                        console.log('callbackModal2 called');\r\n                       // THIS.hideButtons = true;\r\n                        THIS.cancelCurrentTransaction();\r\n                        return true;\r\n                    }\r\n\r\n                    $timeout(function () {\r\n                        this.isProgressShown = true;\r\n                        helperService.showDialog('#customModalDlg2');\r\n                    });\r\n                }\r\n            }\r\n\r\n            this.hideProgressDialog = function (force) {\r\n                if (this.isProgressShown || force) {\r\n                    $timeout(function () {\r\n                        helperService.closeDialog('#customModalDlg2');\r\n                        this.isProgressShown = false;\r\n                    });\r\n\r\n                }\r\n            };\r\n\r\n            this.timeout = (prom, time, ex) => {\r\n                let timer;\r\n                return Promise.race([\r\n                    prom,\r\n                    new Promise((_r, rej) => timer = setTimeout(rej, time, ex))\r\n                ]).finally(() => clearTimeout(timer));\r\n            }\r\n\r\n            this.dialogCalled = false;\r\n            this.lastQuestion = null;\r\n            this.lastCallback = null;\r\n\r\n            this.makePayment = function (options) {\r\n                this.hideButtons = false;\r\n                var THIS = this;\r\n                this.dialogCalled = false;\r\n                this.isProgressShown = false;\r\n\r\n                var settings = configService.getCardPaymentSettings();\r\n\r\n                var d0 = $q.defer();\r\n\r\n                if (settings.printTyroReceiptOnTerminal !== true &&\r\n                    !configService.supportMerchantCustomerReceiptPrint) {\r\n                    d0.reject({\r\n                        message: gettextCatalog.getString(\"The current receipt template doesn't support merchant/customer receipt printing. Please modify the receipt template or enable 'Print EFTPOS receipts on the Tyro terminal' on the setup page.\")\r\n                    });\r\n                    return d0.promise;\r\n                }\r\n\r\n                d0.resolve(null);\r\n\r\n                var printPromise = d0.promise;\r\n\r\n                var deferred = $q.defer();\r\n\r\n                var key = THIS.integrationKeys[THIS.formKey()];\r\n\r\n                THIS.progressText = \"\";\r\n                THIS.showProgressDialog();\r\n\r\n                THIS.iclient.initiatePurchase({\r\n                    amount: Math.round(options.amount * 100).toString(),\r\n                    integratedReceipt: settings.printTyroReceiptOnTerminal !== true,\r\n                    mid: configService.tyroMerchantID,\r\n                    tid: configService.tyroTerminalID,\r\n                    integrationKey: key\r\n                },\r\n                {\r\n                    statusMessageCallback: function (message) {\r\n                        THIS.progressText = message;\r\n                        //if (THIS.isProgressShown) {\r\n                            $timeout(function () {\r\n                                THIS.parentScope.customModalDlg2Text = message;\r\n                            });\r\n                        //}\r\n\r\n                    },\r\n                    questionCallback: function (question, answerCallback) {\r\n                        console.log(question.text);\r\n                        THIS.hideProgressDialog();\r\n                        if (!THIS.dialogCalled) { // prevent questions duplicates\r\n                            THIS.dialogCalled = true;\r\n                            console.log('enter dialog');\r\n                            THIS.lastQuestion = question;\r\n                            THIS.lastCallback = answerCallback;\r\n\r\n                            printPromise = printPromise.then(function (res) {\r\n                                var d1 = $q.defer();\r\n                                //THIS.dialogCalled = true;\r\n                                //THIS.hideProgressDialog();\r\n\r\n                                THIS.parentScope.customModalDlg2Caption = 'Tyro payment system';\r\n                                THIS.parentScope.customModalDlg2Text = THIS.lastQuestion.text;\r\n                                THIS.parentScope.customModalDlg2Buttons = [];\r\n                                THIS.parentScope.callbackModal2 = function (code) {\r\n                                    console.log('callbackModal2 for question is called');\r\n                                    if (THIS.lastQuestion.isManualCancel === true && code == 'YES') {\r\n                                        THIS.hideButtons = true;\r\n                                    }\r\n                                    THIS.showProgressDialog();\r\n                                    THIS.lastCallback(code);\r\n                                    d1.resolve(code);\r\n                                    THIS.dialogCalled = false;\r\n                                    return true;\r\n                                };\r\n\r\n                                if (!THIS.lastQuestion || !THIS.lastQuestion.options || THIS.lastQuestion.options.length === 0) {\r\n                                    THIS.parentScope.customModalDlg2Buttons = [{\r\n                                        name: gettextCatalog.getString('OK'),\r\n                                        value: 'OK'\r\n                                    }];\r\n                                }\r\n\r\n                                angular.forEach(THIS.lastQuestion.options, function (o) {\r\n                                    THIS.parentScope.customModalDlg2Buttons.push({\r\n                                        value: o,\r\n                                        name: o\r\n                                    });\r\n                                });\r\n\r\n                                $timeout(function () {\r\n                                    helperService.showDialog('#customModalDlg2'); /*$.unblockUI();*/\r\n                                });\r\n\r\n                                return d1.promise;\r\n                            });\r\n                        }\r\n                        else if (question.isError === true) {\r\n                            // redefine buttons and text if Error comes after dialog is shown\r\n                            THIS.lastQuestion = question;\r\n                            THIS.lastCallback = answerCallback;\r\n\r\n                            THIS.parentScope.customModalDlg2Text = question.text;\r\n                            THIS.parentScope.customModalDlg2Buttons = [];\r\n\r\n                            if (!THIS.lastQuestion || !THIS.lastQuestion.options || THIS.lastQuestion.options.length === 0) {\r\n                                THIS.parentScope.customModalDlg2Buttons = [{\r\n                                    name: gettextCatalog.getString('OK'),\r\n                                    value: 'OK'\r\n                                }];\r\n                            }\r\n\r\n                            angular.forEach(question.options, function (o) {\r\n                                THIS.parentScope.customModalDlg2Buttons.push({\r\n                                    value: o,\r\n                                    name: o\r\n                                });\r\n                            });\r\n                        }\r\n                    },\r\n                    receiptCallback: function (receipt) {\r\n                        //if (typeof (options.receiptCallback) == 'function') {\r\n                        //    var s = receipt.merchantReceipt.replace(/(?:\\r\\n|\\r|\\n)/g, '<br />');\r\n                        //    printPromise = options.receiptCallback('merchant', '<pre not-print style=\"background-color: unset;border: none;\">' + s + '</pre>', printPromise);\r\n                        //}\r\n                        options.merchantReceipt = receipt.merchantReceipt;\r\n                    },\r\n                    transactionCompleteCallback: function (transactionData) {\r\n                        THIS.hideProgressDialog(true);\r\n                        if (THIS.dialogCalled) {\r\n                            THIS.dialogCalled = false;\r\n                            THIS.parentScope.callbackModal2(null);\r\n                        }\r\n\r\n                        if (transactionData.result == 'APPROVED') {\r\n                            //if (transactionData.customerReceipt) {\r\n                            //    if (typeof (options.receiptCallback) == 'function') {\r\n                            //        var s = transactionData.customerReceipt.replace(/(?:\\r\\n|\\r|\\n)/g, '<br />');\r\n                            //        printPromise = options.receiptCallback('customer', '<pre not-print style=\"background-color: unset;border: none;\">' + s + '</pre>', printPromise);\r\n                            //    }\r\n                            //}\r\n\r\n                            if (!!options.merchantReceipt)\r\n                                transactionData.merchantReceipt = options.merchantReceipt;\r\n\r\n                            printPromise.then(function (res) {\r\n                                THIS.hideProgressDialog(true);\r\n                                deferred.resolve({\r\n                                    result: true,\r\n                                    response: {\r\n                                        ServerTransactionID: transactionData.transactionId,\r\n                                        TransactionMetaData: transactionData\r\n                                    }\r\n                                });\r\n                            });\r\n                        }\r\n                        else if (transactionData.result == 'DECLINED' || transactionData.result == 'REVERSED' ||\r\n                                transactionData.result == 'CANCELLED' || transactionData.result == 'NOT STARTED') {\r\n                                deferred.reject(\r\n                                {\r\n                                    result: false,\r\n                                    disableAddPayment: true,\r\n                                    response: {\r\n                                        errorDescription: gettextCatalog.getString('Transaction is ') + transactionData.result\r\n                                    },\r\n                                });\r\n                        }\r\n                        else {\r\n                            deferred.reject(\r\n                                {\r\n                                    result: false,\r\n                                    response: {\r\n                                        errorDescription: gettextCatalog.getString('Transaction is ') + transactionData.result\r\n                                    },\r\n                                    //messageHide: true\r\n                                });\r\n                        }\r\n                    }\r\n                });\r\n\r\n                return deferred.promise;\r\n            }\r\n\r\n            this.refund = function (el, refundSum, options) {\r\n                $.blockUI();\r\n                var THIS = this;\r\n                this.dialogCalled = false;\r\n                this.isProgressShown = false;\r\n\r\n                var settings = configService.getCardPaymentSettings();\r\n\r\n                var d0 = $q.defer();\r\n                if (settings.printTyroReceiptOnTerminal !== true &&\r\n                    !configService.supportMerchantCustomerReceiptPrint) {\r\n                    d0.reject({\r\n                        message: gettextCatalog.getString(\"The current receipt template doesn't support merchant/customer receipt printing. Please modify the receipt template or enable 'Print EFTPOS receipts on the Tyro terminal' on the setup page.\")\r\n                    });\r\n                    return d0.promise;\r\n                }\r\n\r\n                d0.resolve(null);\r\n                var printPromise = d0.promise;\r\n\r\n                var deferred = $q.defer();\r\n\r\n                var key = THIS.integrationKeys[THIS.formKey()];\r\n\r\n                THIS.progressText = \"\";\r\n                THIS.showProgressDialog();\r\n\r\n                THIS.iclient.initiateRefund({\r\n                    amount: Math.round(refundSum * 100).toString(),\r\n                    integratedReceipt: settings.printTyroReceiptOnTerminal !== true,\r\n                    mid: configService.tyroMerchantID,\r\n                    tid: configService.tyroTerminalID,\r\n                    integrationKey: key\r\n                },\r\n                {\r\n                    statusMessageCallback: function (message) {\r\n                        THIS.progressText = message;\r\n                        THIS.parentScope.customModalDlg2Text = message;\r\n                    },\r\n                    questionCallback: function (question, answerCallback) {\r\n                        THIS.hideProgressDialog();\r\n\r\n                        if (!THIS.dialogCalled) {\r\n                            THIS.dialogCalled = true;\r\n                            THIS.lastQuestion = question;\r\n                            THIS.lastCallback = answerCallback;\r\n\r\n                            printPromise = printPromise.then(function (res) {\r\n                                var d1 = $q.defer();\r\n\r\n                                THIS.parentScope.customModalDlg2Caption = THIS.lastQuestion.isError == true ? gettextCatalog.getString('Tyro payment system error.') : gettextCatalog.getString('Tyro payment system');\r\n                                THIS.parentScope.customModalDlg2Text = THIS.lastQuestion.text;\r\n                                THIS.parentScope.customModalDlg2Buttons = [];\r\n\r\n                                if (!THIS.lastQuestion || !THIS.lastQuestion.options || THIS.lastQuestion.options.length === 0) {\r\n                                    THIS.parentScope.customModalDlg2Buttons = [{\r\n                                        name: gettextCatalog.getString('OK'),\r\n                                        value: 'OK'\r\n                                    }];\r\n                                }\r\n\r\n                                angular.forEach(THIS.lastQuestion.options, function (o) {\r\n                                    THIS.parentScope.customModalDlg2Buttons.push({\r\n                                        value: o,\r\n                                        name: o\r\n                                    });\r\n                                });\r\n\r\n                                THIS.parentScope.callbackModal2 = function (code) {\r\n                                    if (THIS.lastQuestion.isManualCancel === true && code == 'YES') {\r\n                                        THIS.hideButtons = true;\r\n                                    }\r\n                                    THIS.showProgressDialog();\r\n                                    THIS.lastCallback(code);\r\n                                    d1.resolve(code);\r\n                                    THIS.dialogCalled = false;\r\n                                    return true;\r\n                                };\r\n\r\n                                $timeout(function () { helperService.showDialog('#customModalDlg2'); /*$.unblockUI();*/ });\r\n\r\n                                return d1.promise;\r\n                            });\r\n                        } else if (question.isError === true) {\r\n                            THIS.lastQuestion = question;\r\n                            THIS.lastCallback = answerCallback;\r\n\r\n                            THIS.parentScope.customModalDlg2Caption = THIS.lastQuestion.isError == true ? gettextCatalog.getString('Tyro payment system error.') : gettextCatalog.getString('Tyro payment system');\r\n                            THIS.parentScope.customModalDlg2Text = THIS.lastQuestion.text;\r\n                            THIS.parentScope.customModalDlg2Buttons = [];\r\n\r\n                            if (!THIS.lastQuestion || !THIS.lastQuestion.options || THIS.lastQuestion.options.length === 0) {\r\n                                THIS.parentScope.customModalDlg2Buttons = [{\r\n                                    name: gettextCatalog.getString('OK'),\r\n                                    value: 'OK'\r\n                                }];\r\n                            }\r\n\r\n                            angular.forEach(THIS.lastQuestion.options, function (o) {\r\n                                THIS.parentScope.customModalDlg2Buttons.push({\r\n                                    value: o,\r\n                                    name: o\r\n                                });\r\n                            });\r\n                        }\r\n                    },\r\n                    receiptCallback: function (receipt) {\r\n                        if (!!options)\r\n                            options.merchantReceipt = receipt.merchantReceipt;\r\n\r\n                        //if (!!options && typeof (options.receiptCallback) == 'function') {\r\n                        //    var s = receipt.merchantReceipt.replace(/(?:\\r\\n|\\r|\\n)/g, '<br />');\r\n                        //    printPromise = options.receiptCallback('merchant', '<pre not-print style=\"background-color: unset;border: none;\">' + s + '</pre>', printPromise);\r\n                        //}\r\n                    },\r\n                    transactionCompleteCallback: function (transactionData) {\r\n                        THIS.hideProgressDialog(true);\r\n                        if (THIS.dialogCalled) {\r\n                            THIS.dialogCalled = false;\r\n                            THIS.parentScope.callbackModal2(null);\r\n                        }\r\n\r\n                        if (transactionData.result == 'APPROVED') {\r\n\r\n                            //if (transactionData.customerReceipt) {\r\n                            //    if (!!options && typeof (options.receiptCallback) == 'function') {\r\n                            //        var s = transactionData.customerReceipt.replace(/(?:\\r\\n|\\r|\\n)/g, '<br />');\r\n                            //        printPromise = options.receiptCallback('customer', '<pre not-print style=\"background-color: unset;border: none;\">' + s + '</pre>', printPromise);\r\n                            //    }\r\n                            //}\r\n\r\n                            printPromise = printPromise.then(function (res) {\r\n                                THIS.hideProgressDialog(true);\r\n                                transactionData.provider = 'tyroReaderProvider';\r\n\r\n                                deferred.resolve({\r\n                                    result: true,\r\n                                    amount: refundSum,\r\n                                    ServerTransactionID: transactionData.transactionId,\r\n                                    TransactionMetaData: transactionData\r\n                                });\r\n                            });\r\n                        }\r\n                        else if(transactionData.result == 'NOT STARTED'){\r\n                            deferred.reject(\r\n                                {\r\n                                    result: false,\r\n                                    response: {\r\n                                        errorDescription: gettextCatalog.getString('Transaction is ') + transactionData.result\r\n                                    },\r\n                                    //messageHide: true\r\n                                });\r\n                        }\r\n                        else {\r\n                            printPromise = printPromise.then(function (res) {\r\n\r\n                                deferred.resolve(\r\n                                    {\r\n                                        amount: refundSum,\r\n                                        result: false,\r\n                                        messageHide: true,\r\n                                        cardPAN : el.TransactionMetaData.elidedPan,\r\n                                        cardType: el.TransactionMetaData.cardType\r\n                                    }); // in error case enlarge rest sum. It will be appended to user account\r\n                            });\r\n                        }\r\n                    }\r\n                });\r\n\r\n                return deferred.promise;\r\n            }\r\n\r\n            this.cancelCurrentTransaction = function () {\r\n                var settings = configService.getCardPaymentSettings();\r\n\r\n                var deferred2 = $q.defer();\r\n\r\n                if (!!this.iclient) {\r\n                    this.iclient.cancelCurrentTransaction();\r\n                    this.customModalDlg2Text = \"Cancelling transaction...\";\r\n                }\r\n                deferred2.resolve(null);\r\n\r\n                return deferred2.promise;\r\n            };\r\n\r\n        }\r\n\r\n    ]);","import pako from 'pako';\r\n\r\nexport default function unpackArray(data) {\r\n    const encoded = atob(data);\r\n    // Convert binary string to character-number array\r\n    const binData = Uint8Array.from(encoded, function(x) {return x.charCodeAt(0);});\r\n\r\n    const objStr = pako.inflate(binData,\r\n        { to: 'string' });\r\n\r\n    const restored = JSON.parse(objStr);\r\n\r\n    return restored;\r\n}\r\n\r\nexport function unpackStr(data) {\r\n    const encoded = atob(data);\r\n    // Convert binary string to character-number array\r\n    const binData = Uint8Array.from(encoded, function(x) {return x.charCodeAt(0);});\r\n\r\n    const objStr = pako.inflate(binData,\r\n        { to: 'string' });\r\n\r\n    return objStr;\r\n}","angular.module(\"mainApp\").controller('userManagementController',\r\n    ['$scope', '$rootScope', 'constants', 'loginService', '$timeout', 'userManagementService', 'errorService',\r\n'$uibModal', 'outletService', 'configService', 'helperService',\r\n    function ($scope, $rootScope, constants, loginService, $timeout, userManagementService, errorService,\r\n$uibModal, outletService, configService, helperService) {\r\n\r\n        //$rootScope.$broadcast('sideBar.hideDetails', { sectionName: constants.constUserManagementSectionName }); // to hide sidebar details\r\n        $rootScope.$broadcast('header.setCurrentView', { viewName: constants.constUserManagementViewName }); // to hide sidebar details\r\n\r\n        if (!loginService.isLoggedIn()) {\r\n            helperService.goToHomePage();\r\n            return;\r\n//            $rootScope.$broadcast('login.show'); // show login page on application start\r\n        };\r\n\r\n        $scope.filters = {\r\n            OutletID: 'A',\r\n            RoleName: ''\r\n        };\r\n        $scope.fcss = { 'height': window.innerHeight * 0.9 + 'px' };\r\n        $scope.selectedPage = 1;\r\n        $scope.totalPages = 1;\r\n        $scope.itemsByPage = 20;\r\n        $scope.totalRecords = null;\r\n        $scope.isLoading = false;\r\n\r\n        // array for Users\r\n        $scope.data = [];\r\n        $scope.filterSelectors = {};\r\n        $scope.filterSelectors.outlets = [];\r\n        \r\n        function initRolesFilter() {\r\n            // Get role from config service and remove \"Pos\" prefix if present\r\n            var userRole = configService.role || '';\r\n            userRole = userRole.replace(/^Pos/, '');\r\n            \r\n            var roles = [\r\n            {\r\n                RoleName: 'Cashier', RoleFullName: 'PosCashier'\r\n            }];\r\n\r\n            switch (userRole) {\r\n                case 'Administrator':\r\n                case 'Manager':\r\n                    roles.push({\r\n                        RoleName: 'Manager',\r\n                        RoleFullName: 'PosManager'\r\n                    });\r\n                    break;\r\n            }\r\n\r\n            return roles;\r\n        }\r\n\r\n        $scope.filterSelectors.roles = initRolesFilter();\r\n\r\n        $scope.userHasSelectedOutlet = configService.UserHasSelectedOutlet;\r\n\r\n        function loadFilters() {\r\n            return outletService.getUserOulets(configService.loginUserID).then(function (resp) {\r\n                $scope.filterSelectors.outlets = [];\r\n                $.each(resp.Outlets, function (idx, el) {\r\n                    $scope.filterSelectors.outlets.push({ OutletName: el.OutletName, OutletID: el.PosOutletID });\r\n                });\r\n\r\n                if ($scope.filterSelectors.outlets.length == 1) {\r\n                    $scope.filters.OutletID = $scope.filterSelectors.outlets[0].OutletID;\r\n                }\r\n\r\n                $timeout(function() {\r\n                    initSelects();\r\n                });\r\n            },\r\n            function (err) {\r\n                errorService.showError(err);\r\n            });\r\n        }\r\n\r\n        const scrollReachBottomCallback = function () {\r\n            if (!$scope.isLoading && $scope.selectedPage < $scope.totalPages) {\r\n                $.blockUI();\r\n                $scope.isLoading = true;                \r\n                $scope.selectedPage++;\r\n                \r\n                userManagementService.getPosUsers(\r\n                    $scope.selectedPage,\r\n                    $scope.itemsByPage,\r\n                    $scope.filters,\r\n                ).then(function (resp) {\r\n                    $.each(resp.Users, function (idx, el) {\r\n                        if (!$scope.data.filter(function (fEl) {\r\n                            return fEl.UserId === el.UserId;\r\n                        }).length > 0) {\r\n                            $scope.data.push(el)\r\n                        }\r\n                    });\r\n\r\n                    getPages(resp.Total);\r\n                    $scope.isLoading = false;\r\n                    $.unblockUI();\r\n                },\r\n                function (err) {\r\n                    $scope.isLoading = false;\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n            }\r\n        }\r\n\r\n        initPagerOnScroll(scrollReachBottomCallback);\r\n\r\n        // enable event when view is shown\r\n        $scope.onLoad = function () {\r\n            $.blockUI();\r\n            loadFilters().then(function() {\r\n                userManagementService.getPosUsers($scope.selectedPage, $scope.itemsByPage, $scope.filter).then(function (resp) {\r\n                        $scope.data = resp.Users;\r\n                        getPages(resp.Total);\r\n                        $.unblockUI();\r\n\r\n                        $scope.raiseViewChanged();\r\n                    },\r\n                    function (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    });\r\n            });\r\n\r\n            $scope.raiseViewChanged();\r\n        };\r\n\r\n        $scope.search = function () {\r\n            $.blockUI();\r\n            $scope.selectedPage = 1;\r\n            userManagementService.getPosUsers($scope.selectedPage, $scope.itemsByPage, $scope.filters).then(function (resp) {\r\n                if (resp.Total) {\r\n                    $scope.data = resp.Users;\r\n                    getPages(resp.Total);\r\n                    $.unblockUI();\r\n                }\r\n                else {\r\n                    $scope.data = [];\r\n                    getPages(0)\r\n                    $.unblockUI();\r\n                }\r\n            },\r\n            function(err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n        };\r\n\r\n\r\n        function getPages(total) {\r\n            var step = $scope.itemsByPage;\r\n            $scope.totalPages = Math.ceil(total / step);\r\n            $scope.totalRecords = total;\r\n            if ($scope.totalPages === 0) {\r\n                $scope.totalPages = 1;\r\n            }\r\n        };\r\n\r\n        $scope.selectPage = function (pageNumber) {\r\n            if (pageNumber > 0 && pageNumber <= $scope.totalPages) {\r\n                $scope.selectedPage = pageNumber;\r\n                $scope.search();\r\n            }\r\n        }\r\n\r\n\r\n        $scope.addPosUser = function () {\r\n            $scope.editedUser = {};\r\n            $scope.editedUser.UserId = null;\r\n            $scope.editedUser.UserName = null;\r\n            $scope.editedUser.Name = null;\r\n            if ($scope.userHasSelectedOutlet === true) {\r\n                if($scope.filterSelectors.outlets && $scope.filterSelectors.outlets.length>0) {\r\n                    $scope.editedUser.PosOutletID = $scope.filterSelectors.outlets[0].OutletID;\r\n                    return false;\r\n                }\r\n            }\r\n            // if ($scope.userHasSelectedOutlet === true) {\r\n            //     $.each($scope.filterSelectors.outlets, function (idx, el) {\r\n            //         $scope.editedUser.PosOutletID = el.OutletID;\r\n            //         return false;\r\n            //     });\r\n            // }\r\n            $timeout(function () {\r\n                $('input, select').trigger('refresh');\r\n            });\r\n            editPosUserDialog();\r\n        }\r\n        \r\n\r\n        $scope.editPosUser = function (user) {\r\n            $scope.editedUser = {};\r\n            angular.copy(user, $scope.editedUser);\r\n\r\n            if($scope.editedUser.OutletNames && $scope.editedUser.OutletNames.length === 1) {\r\n                var found = $scope.filterSelectors.outlets.filter(function(o){ return o.OutletName == $scope.editedUser.OutletNames[0]; });\r\n                if(found.length>0)\r\n                $scope.editedUser.PosOutletID = found[0].OutletID;\r\n            }\r\n\r\n            // if ($scope.userHasSelectedOutlet === true) {\r\n            //     $.each($scope.filterSelectors.outlets, function (idx, el) {\r\n            //         $scope.editedUser.PosOutletID = el.OutletID;\r\n            //         return false;\r\n            //     });\r\n            // }\r\n            $timeout(function () {\r\n                $('input, select').trigger('refresh');\r\n            });\r\n            editPosUserDialog($('#name'));\r\n        }\r\n\r\n\r\n        $scope.saveUser = function () {\r\n            $.blockUI();\r\n            if ($scope.editedUser.UserId === null) {\r\n                userManagementService.createPosUser($scope.editedUser).then(function(resp) {\r\n                    $scope.search();\r\n                    $scope.cancelDialog();\r\n                }, function(err) {\r\n                    $scope.cancelDialog();\r\n                    errorService.showError(err);\r\n                    $.unblockUI();\r\n                });\r\n            } else {\r\n                userManagementService.updatePosUser($scope.editedUser).then(function (resp) {\r\n                    $scope.search();\r\n                    $scope.cancelDialog();\r\n                }, function (err) {\r\n                    $scope.cancelDialog();\r\n                    errorService.showError(err);\r\n                    $.unblockUI();\r\n                });\r\n            }\r\n        }\r\n\r\n\r\n        function editPosUserDialog($focusElement) {\r\n            var $windowElement = $('#editUserModal');\r\n            \r\n            helperService.showDialog($windowElement, function () {\r\n                if(!configService.isMobile){                \r\n                    if($focusElement) {\r\n                        $focusElement.focus();\r\n                    }\r\n                    else {\r\n                        $('#userName').focus();\r\n                    }\r\n                }\r\n\r\n                $scope.saveUserForm.$setPristine();\r\n            });\r\n\r\n        }\r\n\r\n        $scope.cancelDialog = function () {\r\n            var $windowElement = $('#editUserModal');\r\n            helperService.closeDialog($windowElement);\r\n        };\r\n\r\n        $scope.deactivationModalDialog = function () {\r\n            var $windowElement = $('#deactivateUserModal');\r\n            helperService.showDialog($windowElement);\r\n        };\r\n\r\n        $scope.cancelDeactivationModal = function () {\r\n            var $windowElement = $('#deactivateUserModal');\r\n            helperService.closeDialog($windowElement);\r\n        };\r\n\r\n         \r\n        function showDeleteUserDialog() {\r\n            var $windowElement = $('#deleteUserModal');\r\n            helperService.showDialog($windowElement);\r\n        }\r\n        \r\n        $scope.hideDeleteUserDialog = function() {\r\n            var $windowElement = $('#deleteUserModal');\r\n            helperService.closeDialog($windowElement);\r\n        }\r\n\r\n        $scope.userToDelete = {};\r\n\r\n        $scope.deletePosUser = function (user, del) {\r\n            if (!del) {\r\n                $scope.userToDelete = user;\r\n                showDeleteUserDialog();\r\n            } else {\r\n                $scope.hideDeleteUserDialog();\r\n                $.blockUI();\r\n                userManagementService.removePosUser(user.UserId).then(function () {\r\n                    $scope.search();\r\n                }, function (err) {\r\n                    errorService.showError(err);\r\n                    $.unblockUI();\r\n                });\r\n            }\r\n        }\r\n\r\n        $scope.activateUser = function () {\r\n            if ($scope.editedUser.UserId != null) {\r\n                userManagementService.activateUser($scope.editedUser.UserId).then(function () {\r\n                    $scope.cancelDialog();\r\n                    $scope.cancelDeactivationModal();\r\n                    $scope.search();\r\n                }, function (err) {\r\n                    errorService.showError(err);\r\n                    $.unblockUI();\r\n                });\r\n            }\r\n        }\r\n\r\n        $scope.deactivateUser = function () {\r\n            if ($scope.editedUser.UserId != null) {\r\n                userManagementService.deactivateUser($scope.editedUser.UserId).then(function () {\r\n                    $scope.cancelDialog();\r\n                    $scope.cancelDeactivationModal();\r\n                    $scope.search();\r\n                }, function (err) {\r\n                    errorService.showError(err);\r\n                    $.unblockUI();\r\n                });\r\n            }\r\n        }\r\n\r\n        $scope.raiseViewChanged = function () {\r\n            $rootScope.$broadcast('view.loaded');\r\n        };\r\n\r\n\r\n        $scope.showCollapse = function (event, el) {\r\n            $(\"[name='\" + el+\"']\").collapse('toggle');\r\n            return false;\r\n        };\r\n\r\n\r\n        $scope.getUserNameClass = function (form) {\r\n            if ((!form.userName.$invalid && form.userName.$dirty) || (!form.userName.$invalid && form.userName.length > 0))\r\n                return 'dp_has-success has-success';\r\n            else if (\r\n                (form.userName.$invalid || form.userName.$error.required || form.userName.$error.email) &&\r\n                (form.userName.$dirty || form.userName.length > 0)) {\r\n                if (!$('#userName').is(\":focus\"))\r\n                    return 'has-danger dp_has-danger';\r\n            } else return '';\r\n        };\r\n\r\n        $scope.cancelDialogModal = function (form) {\r\n            if (!form.$dirty) {\r\n                $scope.cancelDialog();\r\n            } else\r\n            $timeout(function () {\r\n                $rootScope.$broadcast('header.confirmCancelDialog');\r\n            });\r\n        };\r\n\r\n        $scope.$on('header.confirmedCancelDialog', function () {\r\n            $scope.cancelDialog();\r\n        });\r\n\r\n        $scope.$watch('filters.RoleName',\r\n            function (newValue, oldValue) {\r\n                if (newValue !== oldValue) {\r\n                    $scope.selectedPage = 1;\r\n                    $scope.search();\r\n                }\r\n            });\r\n\r\n        $scope.$watch('filters.OutletID',\r\n            function (newValue, oldValue) {\r\n                if (newValue !== oldValue) {\r\n                    $scope.selectedPage = 1;\r\n                    $scope.search();\r\n                }\r\n            });\r\n\r\n    }]);\r\n","angular.module('services').service('userManagementService', [\r\n    '$q', 'configService', 'remoteRequestProvider', 'localDBProvider', '$interval', 'jsStoreProvider', 'helperService', 'deviceInfo',\r\n    function ($q, configService, remoteRequestProvider, localDBProvider, $interval, jsStoreProvider, helperService, deviceInfo) {\r\n\r\n        // make search \r\n        this.getPosUsers = function (page, limit, filters) {\r\n            var currentUserName = configService.userName;\r\n            var pr = remoteRequestProvider.getPosUsers(currentUserName, page, limit, filters).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.createPosUser = function (user) {\r\n\r\n            var pr = remoteRequestProvider.createPosUser(user).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.updatePosUser = function (user) {\r\n\r\n            var pr = remoteRequestProvider.updatePosUser(user).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.removePosUser = function (ID) {\r\n\r\n            var pr = remoteRequestProvider.removePosUser(ID).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.activateUser = function (ID) {\r\n\r\n            var pr = remoteRequestProvider.activateUser(ID).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.deactivateUser = function (ID) {\r\n\r\n            var pr = remoteRequestProvider.deactivateUser(ID).then(function (res) {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(res.data);\r\n                return deferred.promise;\r\n            });\r\n\r\n            return pr;\r\n        };\r\n\r\n        this.searchSaleRepresentatives = function (page, limit, filters) {\r\n            // var provider = configService.isOnline ? remoteRequestProvider : localDBProvider;\r\n            var provider = (configService.isSite && !window.isSupported) ? remoteRequestProvider :\r\n                configService.isOnline ? remoteRequestProvider :\r\n                    configService.isSite || deviceInfo.isSimulator ? jsStoreProvider :\r\n                        localDBProvider;\r\n\r\n            var isOnlineOnStart = (configService.isSite && !window.isSupported) ? false : configService.isOnline;\r\n\r\n            var pr = provider.searchSaleRepresentatives(page, limit, configService.lastOutletID, filters)\r\n                .then(function (res) {\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(res.data);\r\n                    return deferred.promise;\r\n                }).catch(function (err) {\r\n                    if (!isOnlineOnStart)\r\n                        throw err;\r\n\r\n                    if (err.status !== -1)\r\n                        throw err;\r\n                    else {\r\n                        var provider = configService.isSite || deviceInfo.isSimulator ? jsStoreProvider : localDBProvider;\r\n                        return provider.searchSaleRepresentatives(page, limit, configService.lastOutletID, filters)\r\n                            .then(function (res) {\r\n                                var deferred = $q.defer();\r\n                                deferred.resolve(res.data);\r\n                                return deferred.promise;\r\n                            });\r\n                    }\r\n                });\r\n\r\n            return pr;\r\n        };\r\n\r\n        // critical section to escape from duplication\r\n        this.lockUpdate = false;\r\n\r\n        this.loadSaleRepresentativesAll = function (force, getHash) {\r\n            if (this.lockUpdate) {\r\n                return helperService.resolvePromise(null);\r\n            }\r\n\r\n            var THIS = this;\r\n            var pr;\r\n            var provider = configService.isSite || deviceInfo.isSimulator ? jsStoreProvider : localDBProvider;\r\n\r\n            if (configService.isSite || configService.isOnline) {\r\n                pr = provider.checkSaleRepresentativesOld(force).then(function (res) {\r\n                    if (res) {\r\n                        return provider.getSaleRepresentativesHash(getHash === true ? false : force)\r\n                            .then(function (hash) {\r\n                                return remoteRequestProvider.loadSaleRepresentativesAll(hash);\r\n                            })\r\n                            .then(function (resp) {\r\n                                if (!resp.data || resp.data.CompareResult)\r\n                                return helperService.resolvePromise(false);\r\n\r\n                                // var encoded = atob(resp.data.SaleRepresentatives);\r\n\r\n                                // var objStr = pako.inflate(encoded,\r\n                                //     { to: 'string' });\r\n\r\n                                // var restored = JSON.parse(objStr);\r\n\r\n                                return helperService.unpack(THIS, resp.data.SaleRepresentatives)\r\n                                .then(function(restored) {\r\n                                    var data = {\r\n                                        hash: resp.data.SaleRepresentativesHash,\r\n                                        arr: Array.isArray(restored) ? restored : []\r\n                                    };\r\n    \r\n                                    return provider.refreshSaleRepresentatives(data);\r\n                                });\r\n\r\n                                // unpack data\r\n                                // var data = {\r\n                                //     hash: resp.data.SalesRepresentativeHash,\r\n                                //     arr: Array.isArray(restored) ? restored : []\r\n                                // };\r\n\r\n                                // return provider.refreshSaleRepresentatives(data);\r\n                            });\r\n                    }\r\n\r\n                    var deferred = $q.defer();\r\n                    deferred.resolve(false);\r\n                    return deferred.promise;\r\n                });\r\n            } else {\r\n                var deferred = $q.defer();\r\n                deferred.resolve(false);\r\n                pr = deferred.promise;\r\n            }\r\n\r\n            return pr.then(function (res) {\r\n                THIS.lockUpdate = false;\r\n                return helperService.resolvePromise(res);\r\n            }).catch(function (err) {\r\n                THIS.lockUpdate = false;\r\n                return helperService.rejectPromise(err);\r\n            });\r\n        };\r\n\r\n        this.stopLoadCheck = null;\r\n        this.startSaleRepresentativesAutoUpdate = function () {\r\n\r\n            if (!this.stopLoadCheck) {\r\n                this.stopLoadCheck = $interval(function (p) {\r\n                    if (configService.isOnline) {\r\n                        // refrech data\r\n                        var injector = angular.element('body').injector();\r\n                        var me = injector.get('userManagementService');\r\n\r\n                        var deferred = $q.defer();\r\n                        deferred.resolve(null);\r\n                        deferred.promise.then(function () { $.blockUI(); })\r\n                            .then(function () { me.loadSaleRepresentativesAll(false) })\r\n                            .finally(function () { $.unblockUI(); });\r\n                        return deferred.promise;\r\n                    }\r\n                }, 60000 * 5);\r\n            }\r\n\r\n            var deferred = $q.defer();\r\n            deferred.resolve(null);\r\n            return deferred.promise;\r\n        };\r\n    }]);\r\n","angular.module('services').service('webOnlyProvider', ['$q', '$http', 'configService', 'orderByFilter', function ($q, $http, configService, orderBy) {\r\n\r\n    var products = {};\r\n    products.data = [];\r\n    products.families = [];\r\n\r\n    this.search = function (barcode, text, qkeyTemplate, quickKey, productID) {\r\n        text = text !== null ? text.replace('%', '') : text;\r\n\r\n        //var limit = configService.searchProductLimit;\r\n        var limit = 10000000; // unlimit to prevent data lose\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosProductSearch2',\r\n            params: {\r\n                outletLocationMappingID: configService.lastECSMappingOutletID,\r\n                Barcode: barcode,\r\n                Limit: limit,\r\n                Name: text,\r\n                Family: text,\r\n                ProductCode: text,\r\n                QuickKeyTemplateID: qkeyTemplate,\r\n                QuickKeyID: quickKey,\r\n                ProductID: productID\r\n            }\r\n        });\r\n        req = req.then(function (resp) {\r\n            products.data = [];\r\n            products.families = [];\r\n            $.each(resp.data.Products, function (idx, item) {\r\n\r\n                item.Option1Name = item.ProductFamilyOption1Name;\r\n                item.Option2Name = item.ProductFamilyOption2Name;\r\n                item.Option3Name = item.ProductFamilyOption3Name;\r\n                item.Family = item.ProductFamilyName;\r\n                item.FamilyID = item.ProductFamilyID;\r\n                item.Discounts = item.DiscountLines;\r\n                item.BarCode = item.Barcode;\r\n                item.Sku = item.ProductCode;\r\n\r\n                if (item.Tax) {\r\n                    var tax = {\r\n                        ruleID: item.Tax.RuleID,\r\n                        effectivePercentExclusive: item.Tax.EffectivePercentExclusive,\r\n                        effectivePercentInclusive: item.Tax.EffectivePercentInclusive\r\n                    };\r\n\r\n                    item.Taxes = JSON.stringify(tax);\r\n                } else {\r\n                    item.Taxes = 'null';\r\n                }\r\n                if (item.ProductFamilyID) {\r\n\r\n                    var family = null;\r\n                    $.each(products.families, function (idx, el) {\r\n                        if (el.FamilyID === item.ProductFamilyID) {\r\n                            family = el;\r\n                            return false;\r\n                        }\r\n                    });\r\n                    if (family) {\r\n                        family.cnt++;\r\n                    } else {\r\n                        family = {\r\n                            FamilyID: item.ProductFamilyID,\r\n                            Family: item.ProductFamilyName,\r\n                            Name: item.ProductFamilyName,\r\n                            cnt: 1,\r\n                            isFamily: 1,\r\n                            ProductID: item.ProductFamilyID,\r\n                            FamilyImageID: item.FamilyImageID,\r\n                            FamilyShortName: item.FamilyShortName\r\n                        };\r\n\r\n                        if (!!item.Option1Name) {\r\n                            family.Option1Name = item.Option1Name;\r\n                        }\r\n\r\n                        if (!!item.Option2Name) {\r\n                            family.Option2Name = item.Option2Name;\r\n                        }\r\n\r\n                        if (!!item.Option3Name) {\r\n                            family.Option3Name = item.Option3Name;\r\n                        }\r\n\r\n                        products.families.push(family);\r\n                    }\r\n                }\r\n                item.isFamily = 0;\r\n                products.data.push(item);\r\n\r\n            });\r\n\r\n            products.isLimitReached = resp.data.Products.length === limit; // this is to inform user that the returned list was probably cut off\r\n        });\r\n        return req;\r\n    };\r\n\r\n    this.getSearchPage = function (page, pageSize, productID) {\r\n        var deferred = $q.defer();\r\n        var data = {};\r\n        data.page = page;\r\n        data.data = [];\r\n\r\n        if (!productID) {\r\n            var dic = {};\r\n\r\n            $.each(products.families, function (idx, item) {\r\n                if (item.cnt == 1)\r\n                    dic[item.FamilyID] = true; // do not add family with only one item in it because it should be as standalone product.\r\n                else\r\n                    data.data.push(item);\r\n            });\r\n\r\n            $.each(products.data, function (idx, item) {\r\n                if (!item.ProductFamilyID) {\r\n                    data.data.push(item);\r\n                } else if (dic[item.ProductFamilyID] === true) {\r\n                    data.data.push(item); // add family item that was found in family as alone for entire family\r\n                }\r\n            });\r\n        } else {\r\n            $.each(products.data, function (idx, item) {\r\n                data.data.push(item);\r\n            });\r\n        }\r\n\r\n        data.data = orderBy(data.data, 'Name', false);\r\n        data.data = data.data.slice(page * pageSize, pageSize * (page + 1));\r\n        deferred.resolve(data);\r\n        return deferred.promise;\r\n    };\r\n\r\n    this.familySearch = function (familyID) {\r\n        var deferred = $q.defer();\r\n        var data = [];\r\n        $.each(products.data, function (idx, item) {\r\n            if (item.ProductFamilyID === familyID) {\r\n                data.push(item);\r\n            }\r\n        });\r\n        products.familyData = data;\r\n        deferred.resolve(data);\r\n        return deferred.promise;\r\n    };\r\n\r\n    this.getFamilySearchPage = function (page, pageSize) {\r\n        var deferred = $q.defer();\r\n        var data = {};\r\n        data.page = page;\r\n        data.data = orderBy(products.familyData, 'Name', false);\r\n        data.data = data.data.slice(page * pageSize, pageSize * (page + 1));\r\n        deferred.resolve(data);\r\n        return deferred.promise;\r\n    };\r\n\r\n    this.getSearchCount = function () {\r\n        var deferred = $q.defer();\r\n        var length = products.families.length;\r\n        $.each(products.data, function (idx, item) {\r\n            if (!item.ProductFamilyID) {\r\n                length++;\r\n            }\r\n        });\r\n        deferred.resolve(length);\r\n        return deferred.promise;\r\n    }\r\n\r\n    this.getFamilySearchCount = function () {\r\n        var deferred = $q.defer();\r\n        deferred.resolve(products.familyData.length);\r\n        return deferred.promise;\r\n    }\r\n\r\n    this.getProductByID = function (productID) {\r\n        var deferred = $q.defer();\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosProductSearch2',\r\n            params: {\r\n                outletLocationMappingID: configService.lastECSMappingOutletID,\r\n                ProductID: productID\r\n            }\r\n        });\r\n        req = req.then(function (resp) {\r\n            $.each(resp.data.Products, function (idx, item) {\r\n                item.Option1Name = item.ProductFamilyOption1Name;\r\n                item.Option2Name = item.ProductFamilyOption2Name;\r\n                item.Option3Name = item.ProductFamilyOption3Name;\r\n                item.Family = item.ProductFamilyID;\r\n                item.FamilyID = item.ProductFamilyName;\r\n                item.Discounts = item.DiscountLines;\r\n                item.BarCode = item.Barcode;\r\n                item.Sku = item.ProductCode;\r\n                item.ProductType = item.ProductType;\r\n\r\n                if (item.Tax) {\r\n                    var tax = {\r\n                        ruleID: item.Tax.RuleID,\r\n                        effectivePercentExclusive: item.Tax.EffectivePercentExclusive,\r\n                        effectivePercentInclusive: item.Tax.EffectivePercentInclusive\r\n                    };\r\n\r\n                    item.Taxes = JSON.stringify(tax);\r\n                } else {\r\n                    item.Taxes = 'null';\r\n                }\r\n                var data = [item];\r\n                deferred.resolve({\r\n                    data: data\r\n                });\r\n            });\r\n\r\n        });\r\n        return deferred.promise;\r\n    }\r\n\r\n    this.openRegistry = function (ID, registryID, userName, isMobile) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosOpenRegistry',\r\n            data: {\r\n                Data: {\r\n                    ID: ID,\r\n                    RegistryID: registryID,\r\n                    SalesRepresentative: userName,\r\n                    IsMobile: isMobile\r\n                }\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    //this.updateRegistrySales = function (ID, cashExpected, creditCardExpected, giftCardExpected, loyaltyExpected, storeCreditExpected, prms) {\r\n    //    var req = $http({\r\n    //        method: 'PUT',\r\n    //        url: configService.connectionURL + '/PosCloseRegistry',\r\n    //        data: {\r\n    //            Data: {\r\n    //                ID: ID,\r\n    //                CashExpected: cashExpected,\r\n    //                CreditCardExpected: creditCardExpected,\r\n    //                GiftCardExpected: giftCardExpected,\r\n    //                LoyaltyExpected: loyaltyExpected,\r\n    //                StoreCreditExpected: storeCreditExpected,\r\n    //                AdditionalTotals: prms\r\n    //            }\r\n    //        }\r\n    //    });\r\n\r\n    //    return req;\r\n    //};\r\n\r\n    this.getActiveRegistrySales = function (registryID, userName, mode, closeRegistryID) {\r\n        var params = {\r\n            RegistryID: registryID,\r\n            UserName: userName,\r\n            IsMobile: !configService.isSite\r\n        };\r\n\r\n        if (closeRegistryID)\r\n            params.CloseRegistryID = closeRegistryID;\r\n\r\n        if (mode)\r\n            params.Mode = mode;\r\n\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosCloseRegistry',\r\n            params: params\r\n        });\r\n        req = req.then(function (resp) {\r\n            return [resp.data.Registry];\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.getClosedRegistries = function (registryID, userName) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosCloseRegistry',\r\n            params: {\r\n                RegistryID: registryID,\r\n                UserName: userName,\r\n                isMobile: !configService.isSite,\r\n                IsActive: false\r\n            }\r\n        });\r\n        req = req.then(function (resp) {\r\n            return [resp.data.Registry];\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.getApiUrl = function () {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: '/Pos/GetServerAddress'\r\n        });\r\n        req = req.then(function (resp) {\r\n            //                return resp.data.apiURL;\r\n            return resp.data;\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n\r\n    this.getCashMovements = function (closeRegistryID) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosCashManagement',\r\n            params: {\r\n                CloseRegistryID: closeRegistryID\r\n            }\r\n        });\r\n        req = req.then(function (resp) {\r\n            return resp.data.CashMovements;\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.setPassword = function (newPassword, finalizeID) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosSetPassword',\r\n            data: {\r\n                Password: newPassword,\r\n                FinalizeID: finalizeID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.squareRefund = function (squareIntegrationID, transactionID, clientTransactionID, originalTransactionDate, reason,\r\n        refundAmount, paymentAmount, refundID) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosSquareRefund',\r\n            data: {\r\n                SquareIntegrationID: squareIntegrationID,\r\n                TransactionID: transactionID,\r\n                ClientTransactionID: clientTransactionID,\r\n                OriginalTransactionDate: originalTransactionDate,\r\n                PaymentAmount: paymentAmount,\r\n                RefundAmount: refundAmount,\r\n                RefundID: refundID,\r\n                Reason: reason\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.getProductAvailability = function (searchOpts) {\r\n\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosProductAvailability',\r\n            params: searchOpts\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadStockTransferList = function (searchText, page, limit, status, sorting) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/StockTransfer',\r\n            params: {\r\n                Page: page ? page : null,\r\n                Limit: limit ? limit : null,\r\n                Status: status,\r\n                SearchString: searchText ? searchText : null,\r\n                SortField: (!!sorting && !!sorting.FieldName) ? sorting.FieldName : null,\r\n                SortDirection: (!!sorting && !!sorting.Direction) ? sorting.Direction : null\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadStockTransferSatelliteData = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/StockTransferData',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadStockTransferDetails = function (taskID, page, limit, sorting) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/StockTransferProcess',\r\n            params: {\r\n                TaskID: taskID,\r\n                Page: page ? page : null,\r\n                Limit: limit ? limit : null,\r\n                SortField: (!!sorting && !!sorting.FieldName) ? sorting.FieldName : null,\r\n                SortDirection: (!!sorting && !!sorting.Direction) ? sorting.Direction : null\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.saveNewStockTransfer = function (data) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/StockTransferProcess',\r\n            data: data\r\n        });\r\n\r\n        return req;\r\n    }\r\n\r\n    this.updateStockTransfer = function (data) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/StockTransferProcess',\r\n            data: data\r\n        });\r\n\r\n        return req;\r\n    }\r\n\r\n    this.deleteStockTransfer = function (taskID) {\r\n        var req = $http({\r\n            method: 'DELETE',\r\n            url: configService.connectionURL + '/StockTransfer',\r\n            params: {\r\n                TaskID: taskID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    }\r\n\r\n    this.completeStockTransfer = function (taskID, date, putAwayData) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/StockTransfer',\r\n            params: {\r\n                TaskID: taskID,\r\n                mode: 'complete',\r\n                completionDate: date\r\n            },\r\n            data: putAwayData\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.undoStockTransfer = function (taskID) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/StockTransfer',\r\n            params: {\r\n                TaskID: taskID,\r\n                mode: 'undo'\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadProductList = function (familyID, page, limit, productID, text, sorting) {\r\n        text = text === '' ? text.replace('%', '') : text;\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosProductManagement',\r\n            params: {\r\n                FamilyID: familyID ? familyID : null,\r\n                Lang: \"\",\r\n                Page: page ? page : null,\r\n                Limit: limit ? limit : null,\r\n                ProductID: productID,\r\n                SortField: (!!sorting && !!sorting.FieldName) ? sorting.FieldName : null,\r\n                SortDirection: (!!sorting && !!sorting.Direction) ? sorting.Direction : null,\r\n                searchString: text,\r\n                OutletLocationMappingID: configService.lastECSMappingOutletID\r\n            }\r\n        });\r\n        console.log(req);\r\n        return req;\r\n    };\r\n\r\n    this.getProductData = function (prms) {\r\n        var deferred = $q.defer();\r\n\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ProductDataParams',\r\n            params: prms\r\n        });\r\n\r\n        deferred.resolve(req);\r\n        return deferred.promise;\r\n    };\r\n\r\n    this.saveNewProduct = function (product) {\r\n        console.log(product);\r\n\r\n        var payload = angular.extend({}, product, { LastUpdatedBy: configService.lastUserName });\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosProductManagement',\r\n            data: JSON.stringify(payload)\r\n        });\r\n        console.log(req);\r\n\r\n        return req;\r\n    };\r\n\r\n    this.updateProduct = function (product) {\r\n        console.log(product);\r\n\r\n        var payload = angular.extend({}, product, { LastUpdatedBy: configService.lastUserName });\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/PosProductManagement',\r\n            data: JSON.stringify(payload)\r\n        });\r\n        console.log(req);\r\n\r\n        return req;\r\n    };\r\n\r\n    this.getTemplates = function (Process, Type, Name, RootProperty) {\r\n        console.log(Process, Type, Name, RootProperty);\r\n\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosTemplate',\r\n            params: {\r\n                Process: Process ? Process : null,\r\n                Type: Type ? Type : null,\r\n                Name: Name ? Name : null,\r\n                RootProperty: RootProperty ? RootProperty : null\r\n            }\r\n        });\r\n        console.log(req);\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadTriPOSLane = function (headers, laneID, useCORSProxy) {\r\n        console.log('loadTriPOSLane. requestid:' + headers['tp-request-id'] + ', laneID=' + laneID);\r\n\r\n        if (useCORSProxy) {\r\n            delete headers['Content-Type'];\r\n\r\n            req = $http({\r\n                method: 'GET',\r\n                url: configService.connectionURL + '/PosCORSProxy',\r\n                params: {\r\n                    initialUrl: encodeURIComponent(configService.getTriPOSLaneUrl() + '/lanes/' + laneID)\r\n                },\r\n                headers: {\r\n                    'packed-request-headers': encodeURIComponent(JSON.stringify(headers))\r\n                },\r\n            });\r\n        } else {\r\n            var req = $http({\r\n                method: 'GET',\r\n                url: configService.getTriPOSLaneUrl() + '/lanes/', // + laneID, // laneID should be unsigned integer only!!!\r\n                headers: headers\r\n            });\r\n        }\r\n\r\n        return req;\r\n    }\r\n\r\n    this.deleteTriPOSLane = function (headers, laneID, useCORSProxy) {\r\n        console.log('deleteTriPOSLane. requestid:' + headers['tp-request-id'] + ', laneID=' + laneID);\r\n\r\n        if (useCORSProxy) {\r\n            delete headers['Content-Type'];\r\n\r\n            req = $http({\r\n                method: 'DELETE',\r\n                url: configService.connectionURL + '/PosCORSProxy',\r\n                params: {\r\n                    initialUrl: encodeURIComponent(configService.getTriPOSLaneUrl() + '/lanes/' + laneID)\r\n                },\r\n                headers: {\r\n                    'packed-request-headers': encodeURIComponent(JSON.stringify(headers))\r\n                },\r\n            });\r\n        } else {\r\n            var req = $http({\r\n                method: 'DELETE',\r\n                url: configService.getTriPOSLaneUrl() + '/lanes/' + laneID, // laneID should be unsigned integer only!!!\r\n                headers: headers\r\n            });\r\n        }\r\n\r\n        return req;\r\n    }\r\n\r\n    this.createTriPOSLane = function (headers, laneID, terminalID, activationCode, useCORSProxy) {\r\n\r\n        console.log('createTriPOSLane. requestid:' + headers['tp-request-id'] + ', laneID=' + laneID);\r\n\r\n        if (useCORSProxy) {\r\n            delete headers['Content-Type'];\r\n\r\n            req = $http({\r\n                method: 'POST',\r\n                url: configService.connectionURL + '/PosCORSProxy',\r\n                params: {\r\n                    initialUrl: encodeURIComponent(configService.getTriPOSLaneUrl() + '/lanes/')\r\n                },\r\n                headers: {\r\n                    'packed-request-headers': encodeURIComponent(JSON.stringify(headers))\r\n                },\r\n                data: JSON.stringify({\r\n                    laneId: laneID,\r\n                    terminalId: terminalID,\r\n                    activationCode: activationCode\r\n                })\r\n            });\r\n        } else {\r\n            var req = $http({\r\n                method: 'POST',\r\n                url: configService.getTriPOSLaneUrl(),\r\n                data: JSON.stringify({\r\n                    laneId: laneID,\r\n                    terminalId: terminalID,\r\n                    activationCode: activationCode\r\n                }),\r\n                headers: headers\r\n            });\r\n        }\r\n\r\n        return req;\r\n    }\r\n\r\n    this.triPOSMakePayment = function (headers, laneID, sum, orderNumber) {\r\n        var req;\r\n        console.log('tryPOS payment. requestid:' + headers['tp-request-id'] + ' sum:' + sum + ', ');\r\n        //if (useCORSProxy) {\r\n        //    delete headers['Content-Type'];\r\n\r\n        //    req = $http({\r\n        //        method: 'POST',\r\n        //        url: configService.connectionURL + '/PosCORSProxy',\r\n        //        params: {initialUrl: encodeURIComponent(configService.triPOSUrl + '/sale')},\r\n        //        headers: {'packed-request-headers':encodeURIComponent(JSON.stringify(headers))},\r\n        //        data: JSON.stringify({ laneId: laneID, transactionAmount: sum })\r\n        //    });\r\n        //}\r\n        //else {\r\n        req = $http({\r\n            method: 'POST',\r\n            url: configService.getTriPOSUrl() + '/sale',\r\n            headers: headers,\r\n            data: JSON.stringify({\r\n                laneId: laneID,\r\n                transactionAmount: sum,\r\n                ticketNumber: orderNumber,\r\n                configuration: {\r\n                    allowDebit: true,\r\n                    allowPartialApprovals: true\r\n                }\r\n            })\r\n        });\r\n        // }\r\n\r\n        return req;\r\n    };\r\n\r\n    this.triPOSRefundPayment = function (url, headers, laneID, sum, orderNumber) {\r\n        var req;\r\n        console.log('tryPOS refund. requestid:' + headers['tp-request-id'] + ' sum:' + sum + ', ' + url);\r\n\r\n        req = $http({\r\n            method: 'POST',\r\n            url: url,\r\n            headers: headers,\r\n            data: JSON.stringify({\r\n                laneId: laneID,\r\n                transactionAmount: sum,\r\n                ticketNumber: orderNumber,\r\n                configuration: {\r\n                    allowPartialApprovals: true\r\n                }\r\n            })\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadRegistryCloseList = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportCloseRegistry',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadClosureRegistryDetails = function (registerCloseID) {\r\n\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportCloseRegistryDetails',\r\n            params: {\r\n                RegistryCloseID: registerCloseID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.posUtils = function (operationName, data) {\r\n\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosUtils',\r\n            data: JSON.stringify({\r\n                operationName: operationName,\r\n                data: data\r\n            })\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadPaymentTypeSummary = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportPaymentTypeSummary',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadInventoryReport = function (params) {\r\n\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportInventory',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadInventoryReportCSV = function (params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/ReportInventory',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadInventoryReportEmail = function (params) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/ReportInventory',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadSurchargeReport = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportSurcharge',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadSurchargeReportCSV = function (params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/ReportSurcharge',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadSurchargeReportEmail = function (params) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/ReportSurcharge',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadInTransitReport = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportInTransit',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadInTransitReportCSV = function (params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/ReportInTransit',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadInTransitReportEmail = function (params) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/ReportInTransit',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadSalesSummary = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportSalesSummary',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadSalesSummaryCSV = function (params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/ReportSalesSummary',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadSalesSummaryEmail = function (params) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/ReportSalesSummary',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadStoreCredit = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportStoreCredit',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadStoreCreditCSV = function (params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/ReportStoreCredit',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadStoreCreditEmail = function (params) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/ReportStoreCredit',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadReportGiftCard = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportGiftCard',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadReportGiftCardCSV = function (params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/ReportGiftCard',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadReportGiftCardEmail = function (params) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/ReportGiftCard',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadProductPerformanceReport = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/ReportProdPerf',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadProductPerformanceReportCSV = function (params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/ReportProdPerf',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadProductPerformanceReportEmail = function (params) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/ReportProdPerf',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n\r\n    this.loadPaymentTypeSummaryReportCSV = function (params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/ReportPaymentTypeSummary',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadPaymentTypeSummaryReportEmail = function (params) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/ReportPaymentTypeSummary',\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.isGiftCardsRefundAvailable = function (giftCardCodes) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosGiftCard',\r\n            data: JSON.stringify({\r\n                ReturnType: 'GiftCardPaymentExists',\r\n                GiftCardCodes: giftCardCodes\r\n            })\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.getGiftCardForPayment = function (giftCardCode) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosGiftCard',\r\n            data: JSON.stringify({\r\n                ReturnType: 'GetGiftCard',\r\n                GiftCardCodes: [giftCardCode]\r\n            })\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadStockOrderingList = function (searchText, page, limit, status, sorting, locationId) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosStockOrderingTasks',\r\n            params: {\r\n                LocationId: locationId,\r\n                Page: page ? page : null,\r\n                Limit: limit ? limit : null,\r\n                Status: status && status !== '0' ? status : null,\r\n                SearchString: searchText ? searchText : null,\r\n                SortField: (!!sorting && !!sorting.FieldName) ? sorting.FieldName : null,\r\n                SortDirection: (!!sorting && !!sorting.Direction) ? sorting.Direction : null\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadStockTransferOrderRelatedData = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/StockTransferOrderData',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadStockTransferOrderDetails = function (taskID, page, limit, sorting) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/StockTransferOrderProcess',\r\n            params: {\r\n                TaskID: taskID,\r\n                Page: page ? page : null,\r\n                Limit: limit ? limit : null,\r\n                SortField: (!!sorting && !!sorting.FieldName) ? sorting.FieldName : null,\r\n                SortDirection: (!!sorting && !!sorting.Direction) ? sorting.Direction : null\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.saveNewStockTransferOrder = function (data) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/StockTransferOrderProcess',\r\n            data: data\r\n        });\r\n\r\n        return req;\r\n    }\r\n\r\n    this.updateStockTransferOrder = function (data) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/StockTransferOrderProcess',\r\n            data: data\r\n        });\r\n\r\n        return req;\r\n    }\r\n\r\n    this.loadStockTransferReorderData = function (fromLocationID, toLocationID, onlyAvailable) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/StockTransferReorder',\r\n            params: {\r\n                fromLocationID: fromLocationID,\r\n                toLocationID: toLocationID,\r\n                onlyAvailable: onlyAvailable\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadPurchaseOrderRelatedData = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosPurchaseOrderData',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadPurchaseTask = function (taskID) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosPurchaseOrderTask',\r\n            params: {\r\n                taskID: taskID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadPurchaseOrderDetails = function (taskID, locationID, page, limit, sorting) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosPurchaseOrderProcess',\r\n            params: {\r\n                TaskID: taskID,\r\n                LocationID: locationID,\r\n                Page: page ? page : null,\r\n                Limit: limit ? limit : null,\r\n                SortField: (!!sorting && !!sorting.FieldName) ? sorting.FieldName : null,\r\n                SortDirection: (!!sorting && !!sorting.Direction) ? sorting.Direction : null\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.getExchangeRate = function (from, to, date) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosGetRate',\r\n            params: {\r\n                from: from,\r\n                to: to,\r\n                date: date\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.saveNewPurchase = function (data) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.baseURL + '/ExternalApi/v2/advanced-purchase',\r\n            data: data\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.updatePurchase = function (data) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.baseURL + '/ExternalApi/v2/advanced-purchase',\r\n            data: data\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.savePurchaseOrder = function (data) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.baseURL + '/ExternalApi/v2/purchase/order',\r\n            data: data\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.deleteUndoPurchase = function (id, isVoid) {\r\n        var req = $http({\r\n            method: 'DELETE',\r\n            url: configService.baseURL + '/ExternalApi/v2/advanced-purchase?void=' + isVoid,\r\n            data: {\r\n                ID: id\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.printPurchaseOrder = function (id, user, templateID) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosPurchaseOrderPrint',\r\n            params: {\r\n                TaskID: id,\r\n                User: user,\r\n                TemplateID: templateID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.getPurchaseOrderEmail = function (id, user, templateID) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosPurchaseOrderEmail',\r\n            params: {\r\n                TaskID: id,\r\n                User: user,\r\n                TemplateID: templateID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.sendPurchaseOrderEmail = function (taskId, data) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosPurchaseOrderEmail?TaskID=' + taskId,\r\n            data: data\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadPurchaseReorderData = function (locationID, supplierID) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosPurchaseReorder',\r\n            params: {\r\n                locationID: locationID,\r\n                supplierID: supplierID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadSurcharges = function () {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosSurcharge'\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.scanStockTakeInventoryMode = function (taskID, locationID, searchString) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/StocktakeProcess',\r\n            data: {\r\n                TaskID: taskID,\r\n                LocationID: locationID,\r\n                SearchString: searchString\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n\r\n    this.attachFilesToOrder = function (orderID, userName, files) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosOrderAttachment',\r\n            params: {\r\n                orderID: orderID,\r\n                userName: userName\r\n            },\r\n            data: {\r\n                files: files\r\n            },\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.removeAttachment = function (attachmentId) {\r\n        var req = $http({\r\n            method: 'DELETE',\r\n            url: configService.connectionURL + '/PosOrderAttachment',\r\n            params: {\r\n                attachmentId: attachmentId\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    // delivery methods\r\n    this.loadDeliveries = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosDelivery',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadDelivery = function (params) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosDeliveryDetails',\r\n            params: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadProductsAvailableForDelivery = function (posOrderID) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosDeliveryDetails',\r\n            params: {\r\n                posOrderID: posOrderID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.loadCalendars = function (params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosDeliveryDetails/YearCalendarSettings?ecsLocationMappingID='+configService.lastECSMappingOutletID,\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.CreateDelivery = function (deliveryID, params) {\r\n        var req = $http({\r\n            method: 'POST',\r\n            url: configService.connectionURL + '/PosDeliveryDetails',\r\n            params: {\r\n                deliveryID: deliveryID\r\n            },\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.UpdateDelivery = function (deliveryID, params) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/PosDeliveryDetails',\r\n            params: {\r\n                deliveryID: deliveryID\r\n            },\r\n            data: params\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.UpdateDeliveryTaskStatus = function (deliveryTaskID, locationID, status) {\r\n        var req = $http({\r\n            method: 'PUT',\r\n            url: configService.connectionURL + '/PosDeliveryDetails',\r\n            params: {\r\n                deliveryTaskID: deliveryTaskID,\r\n                locationID: locationID,\r\n                newStatus: status\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.checkSaleOrderExists = function (posOrderID) {\r\n        var req = $http({\r\n            method: 'GET',\r\n            url: configService.connectionURL + '/PosOrder',\r\n            params: {\r\n                PosOrderID: posOrderID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    };\r\n\r\n    this.voidSale = function (orderID) {\r\n        var req = $http({\r\n            method: 'DELETE',\r\n            url: configService.connectionURL + '/PosOrder',\r\n            params: {\r\n                ID: orderID\r\n            }\r\n        });\r\n\r\n        return req;\r\n    }\r\n\r\n    this.getLinklyCloudSecretKey = function (linklyCloudSecretKeyUrl, linklyPaymentPairCode, linklyUserName, linklyPassword) {\r\n\r\n        return $http({\r\n            method: 'POST',\r\n            url: linklyCloudSecretKeyUrl,\r\n            data: {\r\n                username: linklyUserName,\r\n                password: linklyPassword,\r\n                paircode: linklyPaymentPairCode\r\n            },\r\n            headers: {\r\n                \"Content-Type\": \"application/json\",\r\n                Accept: \"application/json\"\r\n            },\r\n        });\r\n    }\r\n\r\n    this.linklyCloudPairTerminal = function (iframeSourceUrl, linklyCloudSecretKey, posName, posVersion, posId, posVendorId) {\r\n\r\n        return $http({\r\n            method: 'POST',\r\n            url: iframeSourceUrl,\r\n            data: {\r\n                secret: linklyCloudSecretKey,\r\n                posName: posName,\r\n                posVersion: posVersion,\r\n                posId: posId,\r\n                posVendorId: posVendorId\r\n            },\r\n            headers: {\r\n                \"Content-Type\": \"application/json\",\r\n                Accept: \"application/json\"\r\n            },\r\n        });\r\n\r\n    }\r\n\r\n    this.linklyCloudMakePayment = function (linklyCloudPaymentUrl, tempSessionId, token, requestType, amount, orderNumber, isCutReceiptOn, isPaymentReceiptOn) {\r\n\r\n        const uri = `${linklyCloudPaymentUrl}${tempSessionId}${requestType}`;\r\n        const operatorReference = `${configService.lastLoginUserID}|${configService.lastUserName}`;\r\n\r\n        return $http({\r\n            method: 'POST',\r\n            url: uri,\r\n            data: {\r\n                \"Request\":\r\n                {\r\n                    Merchant: \"00\",\r\n                    TxnType: \"P\",\r\n                    AmtPurchase: amount,\r\n                    TxnRef: orderNumber,\r\n                    CurrencyCode: configService.currency,\r\n                    CutReceipt: isCutReceiptOn,\r\n                    ReceiptAutoPrint: isPaymentReceiptOn,\r\n                    Application: \"00\",\r\n                    PurchaseAnalysisData:\r\n                    {\r\n                        OPR: operatorReference,\r\n                        AMT: amount\r\n                    }\r\n                }\r\n            },\r\n            headers: {\r\n                'Content-Type': 'application/json',\r\n                'Authorization': 'Bearer ' + token\r\n            },\r\n        });\r\n\r\n    };\r\n\r\n    this.linklyCloudTransactionStatus = function (linklyCloudPaymentUrl, tempSessionId, token, requestType) {\r\n\r\n        const uri = `${linklyCloudPaymentUrl}${tempSessionId}${requestType}`;\r\n\r\n        return $http({\r\n            method: 'GET',\r\n            url: uri,\r\n            headers: {\r\n                'Content-Type': 'application/json',\r\n                'Authorization': 'Bearer ' + token\r\n            },\r\n        });\r\n\r\n    };\r\n\r\n    this.linklyCloudCancelCurrentTransaction = function (linklyCloudPaymentUrl, tempSessionId, token, requestType) {\r\n\r\n        const uri = linklyCloudPaymentUrl + tempSessionId + requestType;\r\n\r\n        return $http({\r\n            method: 'POST',\r\n            url: uri,\r\n            data: {\r\n                \"Request\":\r\n                {\r\n                    Key: \"0\",\r\n                }\r\n            },\r\n            headers: {\r\n                'Content-Type': 'application/json',\r\n                'Authorization': 'Bearer ' + token\r\n            },\r\n        });\r\n\r\n    };\r\n\r\n    this.linklyCloudRefundTransaction = function (linklyCloudPaymentUrl, tempSessionId, token, requestType, amount, orderNumber, isCutReceiptOn, isPaymentReceiptOn, rfn) {\r\n\r\n        const uri = linklyCloudPaymentUrl + tempSessionId + requestType;\r\n        const operatorReference = `${configService.lastLoginUserID}|${configService.lastUserName}`;\r\n\r\n        return $http({\r\n            method: 'POST',\r\n            url: uri,\r\n            data: {\r\n                \"Request\":\r\n                {\r\n                    Merchant: \"00\",\r\n                    TxnType: \"R\",\r\n                    AmtPurchase: amount,\r\n                    TxnRef: orderNumber,\r\n                    CurrencyCode: configService.currency,\r\n                    CutReceipt: isCutReceiptOn,\r\n                    ReceiptAutoPrint: isPaymentReceiptOn,\r\n                    App: \"00\",\r\n                    PurchaseAnalysisData: {\r\n                        RFN: rfn,\r\n                        OPR: operatorReference,\r\n                        AMT: amount\r\n                    }\r\n                }\r\n            },\r\n            headers: {\r\n                'Content-Type': 'application/json',\r\n                'Authorization': 'Bearer ' + token\r\n            },\r\n        });\r\n\r\n    };\r\n\r\n    this.linklyCloudReprintReceipt = function (linklyCloudPaymentUrl, tempSessionId, token, requestType, isCutReceiptOn, isPaymentReceiptOn) {\r\n\r\n        const uri = linklyCloudPaymentUrl + tempSessionId + requestType;\r\n\r\n        return $http({\r\n            method: 'POST',\r\n            url: uri,\r\n            data: {\r\n                \"Request\":\r\n                {\r\n                    Merchant: \"00\",\r\n                    Application: \"00\",\r\n                    CutReceipt: isCutReceiptOn,\r\n                    ReceiptAutoPrint: isPaymentReceiptOn,\r\n                    ReprintType: \"2\"\r\n                }\r\n            },\r\n            headers: {\r\n                'Content-Type': 'application/json',\r\n                'Authorization': 'Bearer ' + token\r\n            },\r\n        });\r\n\r\n    };\r\n\r\n    this.linklyCloudTerminalStatus = function (linklyCloudPaymentUrl, tempSessionId, token) {\r\n\r\n        const uri = `${linklyCloudPaymentUrl}${tempSessionId}/status?async=false`;\r\n\r\n        return $http({\r\n            method: 'POST',\r\n            url: uri,\r\n            data: {\r\n                \"Request\":\r\n                {\r\n                    Merchant: \"00\",\r\n                    StatusType: \"0\"\r\n                }\r\n            },\r\n            headers: {\r\n                'Content-Type': 'application/json',\r\n                'Authorization': 'Bearer ' + token\r\n            }\r\n        });\r\n\r\n    };\r\n\r\n}]);","// extracted by mini-css-extract-plugin\nexport {};\n    if(module.hot) {\n      (function() {\n        var localsJsonString = undefined;\n        // 1788184572102\n        var cssReload = require(\"../../node_modules/mini-css-extract-plugin/dist/hmr/hotModuleReplacement.js\")(module.id, {});\n        // only invalidate when locals change\n        if (\n          module.hot.data &&\n          module.hot.data.value &&\n          module.hot.data.value !== localsJsonString\n        ) {\n          module.hot.invalidate();\n        } else {\n          module.hot.accept();\n        }\n        module.hot.dispose(function(data) {\n          data.value = localsJsonString;\n          cssReload();\n        });\n      })();\n    }\n  ","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = \"./node_modules/moment/locale sync recursive \\\\b\\\\B\";\nmodule.exports = webpackEmptyContext;","import Enumerable from \"linq\";\r\nimport { Sale } from \"./Sale\";\r\n//import angular from \"angular\";\r\nimport { convertFromOld } from \"./ConverterService\";\r\nimport { CalculatorService } from \"./CalculatorService\";\r\nimport { CheckoutItem } from \"./CheckoutItem\";\r\nimport { IConfiguration } from \"./Typings/Typings\";\r\nimport { SaleStatusType, FinancialStatusType, TaxCalculationMethod, PaymentShortNameStandardType, SaleType, CalculationType, StartCalcLevel, HistoryActionMode, CustomDiscountType, AddressType } from \"./Enums\";\r\nimport { IOutputData, IInputData, ICheckoutProcessItems } from \"./CalculatorInterfaces\";\r\nimport { ISelectedItem, IPaymentValidation, ICustomValidation, ISale, ISurcharge, ITax, ICheckoutItem, IProductDeal, IAPISale, IReceiptSaleModel, IOutletInfo, IAPIProduct, IAPIPayment, IAPISurcharge, IPaymentMethod, IGroupedSale, ProductType } from \"./Interfaces\";\r\nimport { IAngularStatic } from 'angular';\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport class CalculatorHelperService {\r\n    static getSaleTotalDue(sale: Sale, selectedItem: ISelectedItem) {\r\n        let sign = 1;\r\n        const isFirstSale = !(selectedItem.Data.Refunds && selectedItem.Data.Refunds.length > 0);\r\n        // if (selectedItem.IsPartialPaid === true && selectedItem.Data.Refunds && selectedItem.Data.Refunds.length > 0)\r\n        //     return selectedItem.PartiallyPaidDue;\r\n\r\n        // if (selectedItem.IsPartialPaid === true && selectedItem.canContinueReturn === true) {\r\n        //     sign = -1;\r\n        // }\r\n\r\n        if (selectedItem.IsPartialPaid === true && selectedItem.canContinueReturn === true && isFirstSale) {\r\n            sign = -1;\r\n        }\r\n\r\n        const so = typeof (selectedItem.RawSaleObject) !== 'string' ? <any>(selectedItem.RawSaleObject) : null;\r\n\r\n        if (so) {\r\n            if ((so.OrderType === SaleStatusType.OnAccount || so.OrderType === SaleStatusType.Layby) &&\r\n                ext.helperService.DEARRound(so.Balance, 4) == 0)\r\n                return 0;\r\n        }\r\n\r\n        const v = CalculatorHelperService.sumToPayLeft(sale, 0, sign < 0);\r\n        return v;\r\n    }\r\n\r\n    static clearPaymentValidations(paymentValidations: IPaymentValidation) {\r\n        paymentValidations.cashAmount = 0;\r\n        paymentValidations.creditCardAmount = 0;\r\n        paymentValidations.storeCreditAmount = 0;\r\n        paymentValidations.loyaltyPointsAmount = 0;\r\n        paymentValidations.cashSurchargeAmount = 0;\r\n        paymentValidations.storeCreditSurchargeAmount = 0;\r\n        paymentValidations.cardPayments = {};\r\n        paymentValidations.customPayments = new Array<ICustomValidation>();\r\n    };\r\n\r\n    static getAllPartialPayment(nativeSale: Sale, selectedItem: ISelectedItem): number {\r\n        let amount = 0;\r\n\r\n        if (selectedItem.IsPartialPaid === true &&\r\n            nativeSale.Refunds && nativeSale.Refunds.length > 0) {\r\n            amount = selectedItem.PartiallyPaidDue;\r\n        }\r\n        else {\r\n            nativeSale.Payments.forEach(ref => {\r\n                amount += ref.Amount;\r\n                if (ref.Surcharge) { // we need in sum without surcharges in any case\r\n                    amount -= ref.Surcharge.CalculatedValueWithTax;\r\n                }\r\n            });\r\n        }\r\n\r\n        return ext.helperService.DEARRound(amount, 2);\r\n    };\r\n\r\n    static getSaleDiscountCoefficient(sale: ISale): number {\r\n        return this.getSaleDiscountCoefficientBasic(sale);\r\n        // if(!sale.SubTotal || !sale.DiscountValue) return 1;\r\n\r\n        // return this.zcn((sale.SubTotal - sale.DiscountValue) / sale.SubTotal);\r\n    }\r\n\r\n\r\n    static getSaleDiscountCoefficientBasic(sale: ISale): number {\r\n        if (!sale.DiscountValue || Number(sale.DiscountValue) === 0) return 1;\r\n\r\n        const sp = this.getCheckoutSum(sale, true);\r\n        if (sp <= 0) return 1;\r\n\r\n        // we need to count only positive items\r\n        return this.zcn((sp - sale.DiscountValue) / sp);\r\n    }\r\n\r\n    static saleFromRestoredString(sale: any): any {\r\n        if (sale.PayloadVersion === '3') {\r\n            return Sale.create(sale);\r\n        } else return sale;\r\n    }\r\n\r\n    static isConfigTaxInclusive() {\r\n        if (typeof (ext.configService.taxInclucive) === 'boolean') {\r\n            return <boolean>(ext.configService.taxInclucive);\r\n        } else {\r\n            const c = <string>(ext.configService.taxInclucive);\r\n            return c === 'True';\r\n        }\r\n    }\r\n\r\n    static isChainedRefundAllowed(item: ISelectedItem) {\r\n        return item.Data.FinancialStatus === FinancialStatusType.Returned || item.Data.FinancialStatus === FinancialStatusType.Closed && item.SaleType === 2;\r\n    }\r\n\r\n    // newAmount should be without rounding\r\n    static sumToPayLeft(sale: Sale, newAmount: number = 0, countPartialPayments: boolean = false) {\r\n        newAmount = this.zcn(newAmount);\r\n        let s1 = 0;\r\n\r\n        let taxModePresision = ext.configService.taxCalculationMethod === TaxCalculationMethod.RowTotal ? 2 : 4;\r\n        if (sale.TaxModePresision)\r\n            taxModePresision = sale.TaxModePresision;\r\n\r\n        if (!countPartialPayments && sale.IsRefund && sale.IsFirstChild === true)\r\n            countPartialPayments = true;\r\n\r\n        if (countPartialPayments === true) {\r\n            // in this case we have partial operation that is being refunded, so sum to refund is partial paid sum\r\n            s1 = -1 * this.getOldPartialPayments(sale);\r\n            s1 = ext.helperService.DEARRound(s1, 2);\r\n        } else {\r\n            // refund closed sale\r\n            s1 = this.getCheckoutSum(sale);\r\n\r\n            // count order level discount\r\n            // we should calc discount coefficient based on items to sold so \r\n            // actually distribute discount between all items to sale\r\n            let discountCoeff = 1;\r\n\r\n            if (sale.DiscountValue && Number(sale.DiscountValue) > 0 && s1 > 0) {\r\n\r\n                if (!sale.IsTaxInclusive) {\r\n                    discountCoeff = this.getSaleDiscountCoefficientBasic(sale);\r\n                    // // positive items\r\n                    // const sp = this.getCheckoutSum(sale, true);\r\n                    // // we should divide by positive sum only, because refunded items do not take part in any discount\r\n                    // discountCoeff = (s1 - sale.DiscountValue) / sp; \r\n                }\r\n\r\n                s1 -= Number(sale.DiscountValue); // substract order level discount\r\n            }\r\n\r\n            s1 = ext.helperService.DEARRound(s1, 2);\r\n\r\n            if (!sale.IsTaxInclusive) {\r\n                const tax = Enumerable.from(sale.CheckoutItems)\r\n                    .sum(el =>\r\n                        ext.helperService.DEARRound(\r\n                            CalculatorHelperService.calculateTax2(el, false), taxModePresision) *\r\n                        (el.Count > 0 ? discountCoeff : 1));\r\n\r\n                s1 += ext.helperService.DEARRound(tax, 2);\r\n            }\r\n        }\r\n\r\n        // get new payments/refunds\r\n        const s2 = this.getPaymentsSum(sale);\r\n\r\n        return ext.helperService.DEARRound(s1 - s2 - newAmount, 2);\r\n    }\r\n\r\n    static getOldPartialPayments(sale: ISale) {\r\n\r\n        // const sum = Enumerable.from(sale.ReturnPayments)\r\n        //     .where(p => p.ShortName !== PaymentShortNameStandardType.Discount && p.ShortName !== PaymentShortNameStandardType.Rounding)\r\n        //     .sum(p => !p.Surcharge ? p.Amount : (p.Amount - p.Surcharge.CalculatedValueWithTax));\r\n\r\n        // count rounding due to else refund with partial payment gives rounding error\r\n        const sum = Enumerable.from(sale.ReturnPayments)\r\n            .where(p => p.ShortName !== PaymentShortNameStandardType.Discount)\r\n            .sum(p => {\r\n                if (p.ShortName === PaymentShortNameStandardType.Rounding)\r\n                    return -p.Amount;\r\n                else\r\n                    return !p.Surcharge ? p.Amount : (p.Amount - p.Surcharge.CalculatedValueWithTax);\r\n            });\r\n\r\n        return sum;\r\n    }\r\n\r\n    // in case this sale is fully paid, show real paid amount else show required amount\r\n    static getHistoryOrderLineSum(sale: Sale) {\r\n        // if real paid sum is lower than required, return required\r\n        const checkSum = this.getCheckoutSum(sale);\r\n        const paysum = this.getPaymentsSum(sale);\r\n        let res = ext.helperService.DEARRound(Math.abs(checkSum), 2);\r\n        let discountCoeff = 1;\r\n\r\n        if (sale.DiscountValue && res > 0) {\r\n\r\n            if (!sale.IsTaxInclusive) {\r\n                // positive items\r\n                // const sp = this.getCheckoutSum(sale, true);\r\n                // discountCoeff = (res - sale.DiscountValue) / sp;\r\n                discountCoeff = this.getSaleDiscountCoefficientBasic(sale);\r\n            }\r\n\r\n            res -= sale.DiscountValue; // substract order level discount\r\n        }\r\n\r\n        if (!sale.IsTaxInclusive) {\r\n            let taxModePresision = ext.configService.taxCalculationMethod === TaxCalculationMethod.RowTotal ? 2 : 4;\r\n            if (sale.TaxModePresision)\r\n                taxModePresision = sale.TaxModePresision;\r\n\r\n            // make sure that in the case of exchange we apply order level discount to new items, not for refunded\r\n            const tax = Enumerable.from(sale.CheckoutItems)\r\n                .sum(el => ext.helperService.DEARRound(\r\n                    CalculatorHelperService.calculateTax2(el, false) * (el.Count > 0 ? discountCoeff : 1),\r\n                    taxModePresision));\r\n\r\n            res += ext.helperService.DEARRound(checkSum < 0 ? -tax : tax, 2);\r\n        }\r\n\r\n        let sReal = ext.helperService.DEARRound(Math.abs(paysum), 2);\r\n\r\n        if (res === sReal)\r\n            res = this.getCurrentPaymentSum(sale);\r\n\r\n        return res;\r\n    }\r\n\r\n    // returns real paid amount\r\n    // discount and rounding are substracted as they are already covered by payment rows\r\n    static getCurrentPaymentSum(sale: Sale): number {\r\n        const sum = Enumerable.from(sale.Payments)\r\n            .where(p =>\r\n                p.ShortName !== PaymentShortNameStandardType.Discount &&\r\n                p.ShortName !== PaymentShortNameStandardType.Rounding)\r\n            .select(p => {\r\n                return p.Amount;\r\n            })\r\n            .sum();\r\n\r\n        return ext.helperService.DEARRound(sum, 2);\r\n    }\r\n\r\n    // should exclude surcharges, rounding, discounts from calculation\r\n    static getPaymentsSum(sale: Sale): number {\r\n        if (!sale || !sale.Payments) return 0;\r\n\r\n        // Rounding actually already is included into payment because payment amount is real amount that has been got from client\r\n        // so we need to subtract rounding from total\r\n        let hasRounding = false;\r\n        let sum = Enumerable.from(sale.Payments)\r\n            .where(p =>\r\n                p.ShortName !== PaymentShortNameStandardType.Discount)\r\n            .select(p => {\r\n                let sm = p.Amount;\r\n                if (p.Surcharge) // remove surcharge from payment\r\n                    sm = ext.helperService.DEARRound(p.Amount - p.Surcharge.CalculatedValueWithTax, 2);\r\n                if (p.ShortName === PaymentShortNameStandardType.Rounding) {// remove rounding\r\n                    sm = -1 * sm;\r\n                    hasRounding = true;\r\n                }\r\n\r\n                return sm;\r\n            })\r\n            .sum();\r\n\r\n        if (sale.CashRounding && !hasRounding && sale.IsExchange)\r\n            sum += sale.CashRounding;\r\n\r\n        return ext.helperService.DEARRound(sum, 6);\r\n    }\r\n\r\n    static getRoundingsFromPayments(sale: Sale): number {\r\n        return sale.CashRounding;\r\n    }\r\n\r\n    static getSurchargesSum(sale: ISale): number {\r\n        const res = Enumerable.from(sale.Payments)\r\n            .where(p => !p.Surcharge ? false : true)\r\n            .sum(p => p.Surcharge.CalculatedValue);\r\n\r\n        return res;\r\n    }\r\n\r\n    static getSurchargesSumWithTax(sale: ISale): number {\r\n        const res = Enumerable.from(sale.Payments)\r\n            .where(p => !p.Surcharge ? false : true)\r\n            .sum(p => p.Surcharge.CalculatedValueWithTax);\r\n\r\n        return res;\r\n    }\r\n\r\n    static getSurcharges(sale: ISale): Array<ISurcharge> {\r\n        const res = Enumerable.from(sale.Payments)\r\n            .where(p => !p.Surcharge ? false : true)\r\n            .select(p => {\r\n                p.Surcharge.PaymentRealAmount = p.Amount;\r\n                p.Surcharge.Total = ext.helperService.DEARRound(p.Surcharge.CalculatedValueWithTax, 4);\r\n                return p.Surcharge;\r\n            })\r\n            .toArray();\r\n\r\n        return res;\r\n    }\r\n\r\n    static getSaleBalance(sale: Sale) {\r\n        // check if it's partially paid sale and we refund it\r\n        const returnPayments = this.calcAllPaymentsToRefund(sale);\r\n        const madePayments = this.calcAllPayments(sale);\r\n        const rounding = (<Sale>sale).CashRounding;\r\n        const isPartialPaidRefund = sale.IsPartialPaid;\r\n        let sm = 0;\r\n        if (!isPartialPaidRefund || sale.IsDirect)\r\n            sm = ext.helperService.DEARRound(sale.Total - this.zcn(sale.SurchargeTotal + (sale.IsTaxInclusive ? 0 : sale.SurchargeTotalTax)) - madePayments + rounding, 4);\r\n        else\r\n            sm = ext.helperService.DEARRound(-returnPayments - madePayments, 4);\r\n        return sm;\r\n    }\r\n\r\n    // static checkPartialPaidRefund(sale: ISale) {\r\n    //     const returnPayments = this.calcAllPaymentsToRefund(sale);\r\n    //     const rounding = (<Sale>sale).CashRounding;\r\n    //     const isPartialPaidRefund = returnPayments > 0 && (-(sale.Total + rounding) > returnPayments);\r\n    //     return isPartialPaidRefund;\r\n    // }\r\n\r\n    // returns total payments but without artificial ones: discount, rounding), because all of them are already included into Total\r\n    // also exclude surcharges (required to correctly claculate balanse on direct sale)\r\n    static calcAllPayments(sale: ISale): number {\r\n        const res = Enumerable.from(sale.Payments).sum(c =>\r\n            (c.ShortName !== PaymentShortNameStandardType.Discount && c.ShortName !== PaymentShortNameStandardType.Rounding) ?\r\n                c.Surcharge ? c.Amount - c.Surcharge.CalculatedValueWithTax :\r\n                    c.Amount : 0);\r\n        return res;\r\n    }\r\n\r\n    static calcAllPaymentsToRefund(sale: ISale): number {\r\n        if (Array.isArray(sale.ReturnPayments)) {\r\n            const res = Enumerable.from(sale.ReturnPayments).sum(c =>\r\n                (c.ShortName !== PaymentShortNameStandardType.Discount && c.ShortName !== PaymentShortNameStandardType.Rounding) ?\r\n                    c.Surcharge ? c.Amount - c.Surcharge.CalculatedValueWithTax :\r\n                        c.Amount : 0);\r\n            return res;\r\n        } else return 0;\r\n    }\r\n\r\n    static roundSale(sale: ISale, roundDigits: number = 2) {\r\n\r\n        sale.DiscountValue = ext.helperService.DEARRound(CalculatorHelperService.zch(sale.DiscountValue), roundDigits);\r\n        sale.SubTotal = ext.helperService.DEARRound(CalculatorHelperService.zch(sale.SubTotal), roundDigits);\r\n        sale.Tax = ext.helperService.DEARRound(CalculatorHelperService.zch(sale.Tax), roundDigits);\r\n        sale.Total = ext.helperService.DEARRound(CalculatorHelperService.zch(sale.Total), roundDigits);\r\n        sale.TotalCheckout = ext.helperService.DEARRound(CalculatorHelperService.zch(sale.TotalCheckout), roundDigits);\r\n\r\n        sale.CheckoutItems.forEach(c => {\r\n            c.BasePrice = ext.helperService.DEARRound(CalculatorHelperService.zch(c.BasePrice), roundDigits);\r\n            c.FinalPrice = ext.helperService.DEARRound(CalculatorHelperService.zch(c.FinalPrice), roundDigits);\r\n            c.FinalAmount = ext.helperService.DEARRound(CalculatorHelperService.zch(c.FinalAmount), roundDigits);\r\n            c.FinalTaxAmount = ext.helperService.DEARRound(CalculatorHelperService.zch(c.FinalTaxAmount), roundDigits);\r\n            c.LoyaltyPointsEarning = ext.helperService.DEARRound(CalculatorHelperService.zch(c.LoyaltyPointsEarning), roundDigits);\r\n            c.Count = ext.helperService.DEARRound(CalculatorHelperService.zch(c.Count), 4);\r\n            if (c.ItemDiscount)\r\n                c.ItemDiscount = ext.helperService.DEARRound(c.ItemDiscount, roundDigits);\r\n\r\n        });\r\n\r\n        sale.Payments.forEach(p => {\r\n            p.Loyalty = ext.helperService.DEARRound(CalculatorHelperService.zch(p.Loyalty), roundDigits);\r\n            p.Amount = ext.helperService.DEARRound(CalculatorHelperService.zch(p.Amount), roundDigits);\r\n            if (p.Surcharge) {\r\n                p.Surcharge.CalculatedValue = ext.helperService.DEARRound(CalculatorHelperService.zch(p.Surcharge.CalculatedValue), roundDigits);\r\n                p.Surcharge.CalculatedValueWithTax = ext.helperService.DEARRound(CalculatorHelperService.zch(p.Surcharge.CalculatedValueWithTax), roundDigits);\r\n                p.Surcharge.Tax = ext.helperService.DEARRound(CalculatorHelperService.zch(p.Surcharge.Tax), roundDigits);\r\n            }\r\n        });\r\n    }\r\n\r\n    static calculateTax(taxObject: ITax, total: number, isTaxInclusive: boolean): number {\r\n\r\n        const percent = isTaxInclusive !== false ? taxObject.EffectiveInclusiveTaxPercent : taxObject.EffectiveExclusiveTaxPercent;\r\n        const tax = total * percent / 100;\r\n        return tax;\r\n    }\r\n\r\n    static calculateTax2(item: ICheckoutItem, isTaxInclusive: boolean): number {\r\n        return this.calculateTax3(item, isTaxInclusive, item.FinalAmount);\r\n    }\r\n\r\n    static calculateTax3(item: ICheckoutItem, isTaxInclusive: boolean, finalAmount: number): number {\r\n        const percent = !item.TaxRuleID ? 0 :\r\n            isTaxInclusive !== false ? item.EffectiveInclusiveTaxPercent :\r\n                item.EffectiveExclusiveTaxPercent;\r\n        const tax = ext.helperService.DEARRound(finalAmount * percent / 100, 4);\r\n        return tax;\r\n    }\r\n\r\n    // function to detect sale processing method\r\n    static useNewCalculation(sale: any): boolean {\r\n        if (ext.configService.allowNewCalculations === true) return true;\r\n        if (sale && sale.PayloadVersion === '3') return true;\r\n\r\n        return false;\r\n    }\r\n\r\n    static isNewSale(sale: any) {\r\n        return sale && sale.PayloadVersion === '3';\r\n    }\r\n\r\n    static zcn(v: any): number {\r\n        if (typeof (v) === 'number')\r\n            return v;\r\n        else\r\n            return !v ? 0 : v;\r\n    }\r\n\r\n    static zch(v: any): any {\r\n        if (typeof (v) === 'number')\r\n            return !v ? 0 : v;\r\n        else\r\n            return !v ? null : v;\r\n    }\r\n\r\n    static zct(v: any): any {\r\n        return !v ? '' : v;\r\n    }\r\n\r\n    static zcb(v: any): boolean {\r\n        return !v ? false : true;\r\n    }\r\n\r\n    static convertCheckoutItem(item: any): ICheckoutItem {\r\n        const { zct, zch, zcb } = this;\r\n\r\n        const res = <ICheckoutItem>{\r\n            ID: item.ID,\r\n            Name: item.Name,\r\n            ProductID: item.ProductID,\r\n            ProductShortDescription: item.ProductShortDescription,\r\n            ProductType: <ProductType>item.ProductType,\r\n            SerialNumber: zch(item.SerialNumber),\r\n            SKU: item.Sku,\r\n            OptionLine: null,\r\n            FamilyID: zch(item.FamilyID),\r\n            SeparatedItemID: null,\r\n            ImageID: zch(item.ImageID),\r\n            BasePrice: zch(item.BasePrice),\r\n            FinalPrice: 0,\r\n            FinalAmount: 0,\r\n            FinalTaxAmount: 0,\r\n            Barcode: zch(item.BarCode),\r\n            BrandID: zch(item.BrandID),\r\n            CategoryID: zch(item.CategoryID),\r\n            Count: item.Count,\r\n            LoyaltyPointsEarning: item.LoyaltyPointsEarning,\r\n            SaleType: <SaleType>item.SaleType,\r\n\r\n            CanEdit: item.CanEdit,\r\n            CanDelete: item.CanDelete,\r\n            DefaultPrice: item.DefaultPrice,\r\n            Discount: 0,\r\n            Price1: item.Price1,\r\n            Price2: item.Price2,\r\n            Price3: item.Price3,\r\n            Price4: item.Price4,\r\n            Price5: item.Price5,\r\n            Price6: item.Price6,\r\n            Price7: item.Price7,\r\n            Price8: item.Price8,\r\n            Price9: item.Price9,\r\n            Price10: item.Price10,\r\n\r\n            ProductTaxString: item.ProductTaxString,\r\n            TaxRuleID: item.Taxes.ruleID,\r\n            EffectiveInclusiveTaxPercent: item.Taxes.effectivePercentInclusive,\r\n            EffectiveExclusiveTaxPercent: item.Taxes.effectivePercentExclusive,\r\n            GiftCardCode: zch(item.GiftCardCode),\r\n            GiftCardExpirationDate: zch(item.GiftCardExpirationDate),\r\n            Return: zcb(item.return),\r\n            CF1: zct(item.CF1),\r\n            CF2: zct(item.CF2),\r\n            CF3: zct(item.CF3),\r\n            CF4: zct(item.CF4),\r\n            CF5: zct(item.CF5),\r\n            CF6: zct(item.CF6),\r\n            CF7: zct(item.CF7),\r\n            CF8: zct(item.CF8),\r\n            CF9: zct(item.CF9),\r\n            CF10: zct(item.CF10),\r\n            Note: item.Note,\r\n            Option1: zct(item.option1),\r\n            Option2: zct(item.option2),\r\n            Option3: zct(item.option3),\r\n            Tags: zch(item.Tags),\r\n            CustomDiscountType: null,\r\n            Discounts: !item.Discounts ? [] : angular.copy(item.Discounts)\r\n        };\r\n\r\n        res.PriceBasedValue = item.PriceBasedValue;\r\n\r\n        res.OptionLine = this.createOptionLine(res);\r\n\r\n        return CheckoutItem.create(res);\r\n    }\r\n\r\n    static createOptionLine(item: ICheckoutItem): string {\r\n        if (!item) return '';\r\n\r\n        const arr = new Array<string>();\r\n        if (item.Option1) arr.push(item.Option1);\r\n        if (item.Option2) arr.push(item.Option2);\r\n        if (item.Option3) arr.push(item.Option3);\r\n\r\n        const res = arr.join(' / ');\r\n        if (!res) return '';\r\n    }\r\n\r\n    static CreateNewSale(): ISale {\r\n        return new Sale();\r\n    }\r\n\r\n    static addCheckoutItemsToSale(sale: ISale, item: any[] | any, productDeals: Array<IProductDeal>, scope: any): IOutputData {\r\n        let arr = new Array<any>();\r\n        if (Array.isArray(item))\r\n            arr = item;\r\n        else\r\n            arr.push(item);\r\n        const inputData = <IInputData>{\r\n            sale: sale,\r\n            checkoutItems: <ICheckoutProcessItems>{\r\n                itemsToAdd: arr\r\n            },\r\n            productDeals: productDeals,\r\n            scope: scope\r\n        };\r\n\r\n        const output = CalculatorService.Instance.calculate(CalculationType.Checkout, inputData);\r\n\r\n        scope?.$broadcast('sale.update');\r\n\r\n        return output;\r\n    }\r\n\r\n    static removeCheckoutItemsFromSale(sale: ISale, item: any, scope: any): IOutputData {\r\n        let arr = new Array<any>();\r\n        if (Array.isArray(item))\r\n            arr = item;\r\n        else\r\n            arr.push(item);\r\n        const inputData = <IInputData>{\r\n            sale: sale,\r\n            checkoutItems: <ICheckoutProcessItems>{\r\n                itemsToRemove: arr\r\n            },\r\n            scope: scope\r\n        };\r\n\r\n        const output = CalculatorService.Instance.calculate(CalculationType.Checkout, inputData);\r\n\r\n        scope?.$broadcast('sale.update');\r\n\r\n        return output;\r\n    }\r\n\r\n    static calculateCheckout(sale: ISale, productDeals: Array<IProductDeal>, scope: any = null, level: StartCalcLevel = StartCalcLevel.Setup, checkTaxes: boolean = false) {\r\n        const inputData = <IInputData>{\r\n            sale: sale,\r\n            productDeals: productDeals,\r\n            scope: scope,\r\n            checkTaxes: checkTaxes\r\n        };\r\n\r\n        const output = CalculatorService.Instance.calculate(CalculationType.Checkout, inputData, level);\r\n\r\n        scope?.$broadcast('sale.update');\r\n\r\n        return output;\r\n    }\r\n\r\n    static calculateRefundCheckout(sale: ISale, selectedSale: ISelectedItem, actionMode: HistoryActionMode, level: StartCalcLevel = StartCalcLevel.Setup) {\r\n        const inputData = <IInputData>{\r\n            sale: sale,\r\n            selectedItem: selectedSale,\r\n            actionMode: actionMode\r\n        };\r\n\r\n        return CalculatorService.Instance.calculate(CalculationType.RefundCheckout, inputData, level);\r\n    }\r\n\r\n    static calculatePayments(sale: ISale, level: StartCalcLevel = StartCalcLevel.Payments) {\r\n        const inputData = <IInputData>{\r\n            sale: sale\r\n        };\r\n\r\n        return CalculatorService.Instance.calculate(CalculationType.Payments, inputData, level);\r\n    }\r\n\r\n    static calculateRefundPayments(sale: ISale, checkoutOutData: IOutputData, level: StartCalcLevel = StartCalcLevel.Payments) {\r\n        let inputData = <IInputData>{\r\n            sale: sale\r\n        };\r\n\r\n        if (checkoutOutData) {\r\n            const cpy = angular.extend(inputData, checkoutOutData);\r\n            delete cpy.processResult;\r\n            delete cpy.errorMessage;\r\n\r\n            inputData = <IInputData>cpy;\r\n\r\n            // define boolean types\r\n            inputData.isContinueReturn = this.zcb(inputData.isContinueReturn) ||\r\n                ((sale.IsExchange || sale.IsRefund) && this.zcb(inputData.isContinue));\r\n            inputData.fullReturn = this.zcb(inputData.fullReturn);\r\n        }\r\n\r\n        return CalculatorService.Instance.calculate(CalculationType.RefundPayments, inputData, level);\r\n    }\r\n\r\n    // this amount does not include any taxes or order level discounts\r\n    static getCheckoutSum(sale: ISale, positiveOnly: boolean = false) {\r\n        const res = Enumerable.from(sale.CheckoutItems)\r\n            .where(c => positiveOnly === true ? c.Count > 0 : true)\r\n            .sum(c => c.FinalAmount);\r\n        return res;\r\n    }\r\n\r\n    // got total sum to pay from API sale. This include own refunds\r\n    // for external mode tax is outside\r\n    static getCheckoutSumFromAPISale(sale: IAPISale) {\r\n        // go through main sale\r\n        const sum1 = Enumerable.from(sale.Lines)\r\n            .where(l => l.Name !== PaymentShortNameStandardType.Rounding)\r\n            .sum(l => l.Name === PaymentShortNameStandardType.Discount ? l.TotalPerLine :\r\n                sale.TaxInclusive !== true ? (l.TotalPerLine + l.Tax) : l.TotalPerLine);\r\n\r\n        // go through own refund items \r\n        const sum2 = Enumerable.from(sale.Refunds)\r\n            .where(r => r.IsFromChild !== true)\r\n            .select(r => {\r\n                return Enumerable.from(r.Lines)\r\n                    .where(l =>\r\n                        l.Name !== PaymentShortNameStandardType.Rounding &&\r\n                        l.Quantity > 0)  // enum only new items\r\n                    .sum(r => {\r\n                        let sm = r.Name === PaymentShortNameStandardType.Discount ? r.TotalPerLine :\r\n                            sale.TaxInclusive !== true ? (r.TotalPerLine + r.Tax) : r.TotalPerLine;\r\n                        return sm;\r\n                    })\r\n            })\r\n            .sum();\r\n\r\n        return sum1 + sum2;\r\n    }\r\n\r\n    static getProcessedCheckoutSumFromAPISale(sale: IAPISale) {\r\n\r\n        // go through child refund items \r\n        const sum = Enumerable.from(sale.Refunds)\r\n            .where(r => r.IsFromChild === true)\r\n            .select(r => {\r\n                return Enumerable.from(r.Lines)\r\n                    .where(l =>\r\n                        l.Name !== PaymentShortNameStandardType.Discount &&\r\n                        l.Name !== PaymentShortNameStandardType.Rounding &&\r\n                        l.Quantity < 0) // only refunded items\r\n                    .sum(r => {\r\n                        let sm = sale.TaxInclusive !== true ? (r.TotalPerLine + r.Tax) : r.TotalPerLine;\r\n                        return sm;\r\n                    })\r\n            })\r\n            .sum();\r\n\r\n        return sum;\r\n    }\r\n\r\n    static getPaymentsFromAPISale(sale: IAPISale) {\r\n        // go through main sale\r\n        const sum1 = Enumerable.from(sale.Payments)\r\n            .sum(p => !p.Surcharge ? p.Amount : (p.Amount - p.Surcharge.CalculatedValueWithTax));\r\n\r\n        // roundings\r\n        const sumRnd1 = Enumerable.from(sale.Lines)\r\n            .where(l => l.Name === PaymentShortNameStandardType.Rounding)\r\n            .sum(l => sale.TaxInclusive !== true ? (l.TotalPerLine + l.Tax) : l.TotalPerLine);\r\n\r\n        // go through own refund items \r\n        const sum2 = Enumerable.from(sale.Refunds)\r\n            .where(r => r.IsFromChild !== true)\r\n            .select(r => {\r\n                return Enumerable.from(r.Payments)\r\n                    .sum(p => !p.Surcharge ? p.Amount : (p.Amount - p.Surcharge.CalculatedValueWithTax));\r\n            })\r\n            .sum();\r\n\r\n        // roundings\r\n        const sumRnd2 = Enumerable.from(sale.Refunds)\r\n            .where(r => r.IsFromChild !== true)\r\n            .select(r => {\r\n                return Enumerable.from(r.Lines)\r\n                    .where(l => l.Name === PaymentShortNameStandardType.Rounding)\r\n                    .sum(r => {\r\n                        let sm = sale.TaxInclusive !== true ? (r.TotalPerLine + r.Tax) : r.TotalPerLine;\r\n                        return sm;\r\n                    })\r\n            })\r\n            .sum();\r\n\r\n        return sum1 + sumRnd1 - (sum2 + sumRnd2);\r\n    }\r\n\r\n    static setCustomItemDiscount(sale: ISale, productDeals: Array<IProductDeal>, scope: any, itemID: string, discount: string, discountType: CustomDiscountType): void {\r\n        const items = sale.CheckoutItems.filter(el => el.ID === itemID);\r\n        const vl = ext.helperService.DEARRound(Number(discount), 2);\r\n        if (items.length > 0) {\r\n            const el = items[0];\r\n            if (discountType === CustomDiscountType.StandAloneReturn) {\r\n                el.Discount = 0;\r\n                el.BasePrice = vl;\r\n                el.DefaultPrice = vl;\r\n            } else {\r\n                el.Discount = vl;\r\n            }\r\n\r\n            el.FinalPrice = vl;\r\n            el.FinalAmount = vl * el.Count;\r\n            el.CustomDiscountType = discountType;\r\n\r\n            this.calculateCheckout(sale, productDeals, scope, StartCalcLevel.Discount);\r\n\r\n            if(sale.Discount) \r\n            {\r\n                sale.Discount = ext.helperService.DEARRound(sale.Discount, 2);\r\n            }\r\n        }\r\n    }\r\n\r\n    static updateReceipt(saleIn: ISale, receiptSaleModel: IReceiptSaleModel, currency: string, onComplete?: () => void) {\r\n        // const taxInclusive = sale.IsTaxInclusive;\r\n        // var isStandaloneReturn = sale.StandAloneReturn === true;\r\n        // var isRefund = sale.Refunds && sale.Refunds.length > 0 ? true : false;\r\n        const sale = <Sale>this.saleFromRestoredString(saleIn);\r\n        var total = sale.Total;\r\n\r\n        const configuration: IConfiguration = ext.configService;\r\n\r\n        if (sale.Customer.ID == null) {\r\n            receiptSaleModel.Customer = [];\r\n        }\r\n        else {\r\n\r\n            const lpSum = sale.CalledFromHistory === true ?\r\n                sale.calculateTotalLoyalty() : // if on history form get all loyalty\r\n                sale.calculateSessionLoyalty(); // how many loyalty points were earned by new payments\r\n            const usedL = sale.CustomerLoyaltyPointsUsed; // how many loyalty points were used to pay in this sale\r\n            const ltl = {\r\n                CustomerName: sale.Customer.Name,\r\n                SaleLoyaltyPoints: ext.helperService.applyCurrency(lpSum, currency),\r\n                CustomerLoyaltyPointsUsed: ext.helperService.applyCurrency(usedL, currency),\r\n                CustomerLoyaltyPoints: '',\r\n                TotalLoyaltyPoints: '',\r\n                LLDiscountCode: '',\r\n                TaxNumber: !sale.Customer.TaxNumber ? '' : sale.Customer.TaxNumber\r\n            };\r\n\r\n            ltl.CustomerLoyaltyPoints = ext.helperService.applyCurrency(sale.Customer.LoyaltyPoints, currency);\r\n            ltl.TotalLoyaltyPoints = ext.helperService.applyCurrency(sale.Customer.LoyaltyPoints - usedL + lpSum, currency);\r\n\r\n            if (sale.Customer.LLEmail && ext.loyaltyService.loyaltyEnabled) {\r\n                if (sale.Customer.LLCustomerID != '0' && !!sale.Customer.LLCustomerID) {\r\n                    ltl.CustomerLoyaltyPoints = sale.Customer.LLInitialBalance;\r\n                    ltl.TotalLoyaltyPoints = sale.Customer.LLInitialBalance;\r\n                    ltl.LLDiscountCode = !sale.Customer.LLDiscountCode ? '' : sale.Customer.LLDiscountCode;\r\n                } else {\r\n                    ltl.CustomerLoyaltyPoints = '';\r\n                    ltl.TotalLoyaltyPoints = '';\r\n                    ltl.LLDiscountCode = '';\r\n                }\r\n\r\n                ltl.CustomerLoyaltyPointsUsed = '';\r\n                ltl.SaleLoyaltyPoints = '';\r\n            }\r\n\r\n            receiptSaleModel.Customer = [ltl];\r\n\r\n            if (!!sale.SelectedContact) {\r\n                receiptSaleModel.Customer[0].Email = sale.SelectedContact.Email;\r\n                receiptSaleModel.Customer[0].Phone = sale.SelectedContact.Phone;\r\n                receiptSaleModel.Customer[0].MobilePhone = sale.SelectedContact.MobilePhone;\r\n            }\r\n            else {\r\n                // append email and phones\r\n                if (!!sale.Customer.Contacts && sale.Customer.Contacts.length > 0) {\r\n                    let cnts = sale.Customer.Contacts.filter(function (c) { return c.Default === true; });\r\n                    if (cnts.length === 0)\r\n                        cnts = sale.Customer.Contacts;\r\n                    const cnt = cnts[0];\r\n                    receiptSaleModel.Customer[0].Email = cnt.Email;\r\n                    receiptSaleModel.Customer[0].Phone = cnt.Phone;\r\n                    receiptSaleModel.Customer[0].MobilePhone = cnt.MobilePhone;\r\n                }\r\n            }\r\n\r\n            // append addresses\r\n            // Check if sale address available else add customer address\r\n            if (sale.CustomerShippingAddressLine1) {\r\n                receiptSaleModel.Customer[0].City = sale.CustomerShippingCity;\r\n                receiptSaleModel.Customer[0].Country = sale.CustomerShippingCountry;\r\n                receiptSaleModel.Customer[0].Line1 = sale.CustomerShippingAddressLine1;\r\n                receiptSaleModel.Customer[0].Line2 = sale.CustomerShippingAddressLine2;\r\n                receiptSaleModel.Customer[0].Postcode = sale.CustomerShippingZip;\r\n                receiptSaleModel.Customer[0].State = sale.CustomerShippingProvince;\r\n            } else if (!!sale.Customer.Addresses && sale.Customer.Addresses.length > 0) {\r\n                let caddrs = Enumerable.from(sale.Customer.Addresses).where(x => x.Type === AddressType.Shipping)\r\n                    .orderByDescending(x => x.DefaultForType).toArray();\r\n                if (caddrs.length === 0)\r\n                    caddrs = sale.Customer.Addresses;\r\n                const caddr = caddrs[0];\r\n\r\n                if (!!caddr.City || !!caddr.Country || !!caddr.Line1 || !!caddr.Line2 || !!caddr.Postcode || !!caddr.State) {\r\n\r\n                    receiptSaleModel.Customer[0].City = caddr.City;\r\n                    receiptSaleModel.Customer[0].Country = caddr.Country;\r\n                    receiptSaleModel.Customer[0].Line1 = caddr.Line1;\r\n                    receiptSaleModel.Customer[0].Line2 = caddr.Line2;\r\n                    receiptSaleModel.Customer[0].Postcode = caddr.Postcode;\r\n                    receiptSaleModel.Customer[0].State = caddr.State;\r\n                }\r\n            }\r\n\r\n            if (!!sale.Customer.PaymentTerm) {\r\n                receiptSaleModel.Customer[0].PaymentTerm = sale.Customer.PaymentTerm;\r\n            }\r\n\r\n            receiptSaleModel.CustomerAttributes = [];\r\n            if (!!sale.Customer.Attributes && sale.Customer.Attributes.length) {\r\n                receiptSaleModel.CustomerAttributes = sale.Customer.Attributes;\r\n            }\r\n        }\r\n\r\n        if (typeof (sale.SalesRepresentative) === \"undefined\" ||\r\n            sale.SalesRepresentative === null ||\r\n            sale.SalesRepresentative.ID == null) {\r\n            receiptSaleModel.SalesRepresentative = [];\r\n        } else {\r\n            receiptSaleModel.SalesRepresentative = [{\r\n                SalesRepresentativeName: sale.SalesRepresentative.Name\r\n            }];\r\n        }\r\n\r\n        if (!receiptSaleModel.SalesRepresentative.length && !!ext.configService.CanSaleRep) {\r\n            const saleRep = configuration.lastDisplayUserName ? configuration.lastDisplayUserName : configuration.lastUserName;\r\n            if (saleRep) {\r\n                receiptSaleModel.SalesRepresentative.push({\r\n                    SalesRepresentativeName: saleRep\r\n                });\r\n            }\r\n        }\r\n\r\n        const receiptNumber = sale.OrderNumber;\r\n\r\n        receiptSaleModel.ReceiptNumber = receiptNumber;\r\n        receiptSaleModel.Barcode = sale.Barcode;\r\n\r\n        receiptSaleModel.CheckoutProductCount = sale.CheckoutItems.length;\r\n        receiptSaleModel.Date = sale.Date;\r\n        receiptSaleModel.Time = '';\r\n\r\n        const lastOutlet = ext.configService.lastOutlet;\r\n        const lastOutletInfo = ext.configService.lastOutletInfo as IOutletInfo;\r\n        const lastRegistry = ext.configService.lastRegistry;\r\n        const lastRegistryID  = ext.configService.lastRegistryID;\r\n        const fetchSaleOutlet = !!sale.OutletName && sale.OutletName !== lastOutlet;\r\n        const fetchRegister = !!sale.RegistryID && sale.RegistryID !== lastRegistryID;\r\n\r\n        const applyLastOutletDetails = () => {\r\n            receiptSaleModel.OutletName = lastOutlet;\r\n            receiptSaleModel.OutletInfo = [CalculatorHelperService.assignOutletInfo(lastOutletInfo)];\r\n            receiptSaleModel.RegistryName = lastRegistry;\r\n        };\r\n\r\n        if (!fetchSaleOutlet && !fetchRegister) {\r\n            applyLastOutletDetails();\r\n            if (typeof onComplete === 'function') onComplete();\r\n        } else {\r\n            ext.outletService\r\n                .getPosOutlet(sale.OutletID)\r\n                .then((outlet: any | null) => {\r\n                    receiptSaleModel.OutletName = outlet && outlet.OutletName ? outlet.OutletName : lastOutlet;\r\n                    const infoSource = outlet && outlet.Info ? outlet.Info : lastOutletInfo\r\n                    receiptSaleModel.OutletInfo = [CalculatorHelperService.assignOutletInfo(infoSource)];\r\n                    \r\n                    let registry = lastRegistry;\r\n                    if (outlet && Array.isArray(outlet.Registries) && sale.RegistryID) {\r\n                        const matched = outlet.Registries.find((r: any) => r.PosRegistryID === sale.RegistryID);\r\n                        if (matched && matched.Code) {\r\n                            registry = matched.Code;\r\n                        }\r\n                    }\r\n                    receiptSaleModel.RegistryName = registry;\r\n                })\r\n                .catch(applyLastOutletDetails)\r\n                .finally(() => {\r\n                    if (typeof onComplete === 'function') onComplete();\r\n                });\r\n        }\r\n\r\n        receiptSaleModel.SubTotal = ext.helperService.applyCurrency(sale.SubTotal, currency);\r\n        receiptSaleModel.Discount = ext.helperService.applyCurrency(sale.DiscountValue, currency);\r\n        receiptSaleModel.Total = ext.helperService.applyCurrency(sale.Total, currency);\r\n        receiptSaleModel.DiscountPercentage = `${ext.helperService.DEARRound((sale.DiscountValue / sale.SubTotal) * 100, 2).toFixed(2)}%`;\r\n        //        receiptSaleModel.Balance = ext.helperService.applyCurrency(sale.Balance, currency);\r\n        receiptSaleModel.Balance = ext.helperService.applyCurrency(CalculatorHelperService.getSaleBalance(sale), currency);\r\n\r\n        const totalTax = sale.Tax;\r\n        //totalTax += saleService.surchargeTaxSum(currentSale, taxInclusive);\r\n\r\n        receiptSaleModel.CalculatedTax = ext.helperService.applyCurrency(totalTax, currency);\r\n\r\n        receiptSaleModel.Change = ext.helperService.applyCurrency(ext.helperService.DEARRound(sale.CashChangeAmount, 4), currency);\r\n        if (sale.Comment) {\r\n            receiptSaleModel.Notes = [\r\n                {\r\n                    SalesNote: sale.Comment\r\n                }\r\n            ];\r\n        } else {\r\n            receiptSaleModel.Notes = [];\r\n        }\r\n \r\n        receiptSaleModel.CheckoutProducts = [];\r\n        sale.CheckoutItems.forEach(el => {\r\n            const isNegative = el.Count < 0;\r\n            let price = 0;\r\n            let amount = 0;\r\n\r\n            if (isNegative == false) {\r\n                if (el.BasePrice < el.FinalPrice || el.BasePrice === 0) {\r\n                    price = el.FinalPrice;\r\n                    amount = el.FinalAmount;\r\n                } else {\r\n                    price = el.BasePrice;\r\n                    amount = ext.helperService.DEARRound(el.BasePrice * el.Count, 4);\r\n                }\r\n            }\r\n            else {\r\n                //if (sale.isStandaloneReturn !== true) {\r\n                //    price = -el.BasePriceWithDiscount;\r\n                //    amount = -el.Count * el.BasePriceWithDiscount;\r\n                //} else {\r\n                price = el.FinalPrice;\r\n                amount = el.FinalAmount;\r\n                //}\r\n            }\r\n\r\n            const sprice = ext.helperService.applyCurrency(price, currency);\r\n            const samount = ext.helperService.applyCurrency(amount, currency);\r\n\r\n            receiptSaleModel.CheckoutProducts.push({\r\n                ProductCount: el.Count,\r\n                ProductName: el.Name,\r\n                ProductAmount: samount,\r\n                ProductPrice: sprice,\r\n                ProductSku: el.SKU,\r\n                ProductID: el.ProductID,\r\n                ProductBarCode: el.Barcode,\r\n                ProductDiscount: el.FinalPrice >= el.BasePrice || isNegative ? null :\r\n                    ext.helperService.applyCurrency((el.FinalPrice - el.BasePrice) * el.Count, currency),\r\n                ProductTaxPercent: ext.helperService.DEARRound(el.FinalTaxAmount / (el.FinalAmount - (sale.IsTaxInclusive ? el.FinalTaxAmount : 0)) * 100, 2) + '%',\r\n                ProductShortDescription: el.ProductShortDescription,\r\n                ProductSerialNumber: el.SerialNumber,\r\n                AdditionalAttribute1: el.CF1,\r\n                AdditionalAttribute2: el.CF2,\r\n                AdditionalAttribute3: el.CF3,\r\n                AdditionalAttribute4: el.CF4,\r\n                AdditionalAttribute5: el.CF5,\r\n                AdditionalAttribute6: el.CF6,\r\n                AdditionalAttribute7: el.CF7,\r\n                AdditionalAttribute8: el.CF8,\r\n                AdditionalAttribute9: el.CF9,\r\n                AdditionalAttribute10: el.CF10,\r\n                ProductDiscountPercentage : (el.ItemDiscount && el.ItemDiscount > 0 && price > 0) ? `${ext.helperService.DEARRound((el.ItemDiscount / price) * 100, 2).toFixed(2)}%` : null,\r\n                ProductDiscountedPrice : ext.helperService.applyCurrency(el.FinalPrice, currency),\r\n                ProductDiscountedTotal : ext.helperService.applyCurrency(el.FinalAmount, currency)\r\n            });\r\n        });\r\n\r\n        receiptSaleModel.Payments = [];\r\n\r\n        //Rounding displays as part of payments and doesnt have special place in receipt template\r\n        //if (sale.CashRounding && sale.CashRounding !== 0) {\r\n        //    var rounding = {\r\n        //        PaymentTypeName: gettextCatalog.getString(\"Payment (Cash rounding)\"),\r\n        //        PaymentAmount: helperService.applyCurrency(currentSale.CashRounding, currency)\r\n        //    };\r\n        //    receiptSaleModel.Payments.push(rounding);\r\n        //}\r\n\r\n        var total = 0;\r\n        sale.Payments.forEach(el => {\r\n            if (el.Amount) { // skip zero payments. Zero payments are required for SIM to correctly process roundings\r\n                if (el.ShortName !== PaymentShortNameStandardType.Rounding)\r\n                    total += el.Amount;\r\n\r\n                receiptSaleModel.Payments.push({\r\n                    PaymentTypeName: el.PaymentTypeName,\r\n                    PaymentAmount: ext.helperService.applyCurrency(el.Amount, currency),\r\n                    PaymentDate: el.Date ? ext.helperService.getFormatedDate(el.Date) : ''\r\n                });\r\n            }\r\n        });\r\n\r\n        receiptSaleModel.TotalBasePrice = ext.helperService.applyCurrency(sale.TotalBasePrice, currency);\r\n        receiptSaleModel.TotalItemDiscount = `-${ext.helperService.applyCurrency(sale.TotalItemDiscount, currency)}`;\r\n\r\n        receiptSaleModel.Surcharges = [];\r\n        const surSum = this.getSurchargesSum(sale);\r\n\r\n        if (surSum) {\r\n            receiptSaleModel.Surcharges.push({\r\n                Surcharge: ext.helperService.applyCurrency(ext.helperService.DEARRound(surSum, 2), currency)\r\n            });\r\n        }\r\n\r\n        receiptSaleModel.Received = ext.helperService.applyCurrency(ext.helperService.DEARRound(sale.CashChangeAmount + total, 6), currency);\r\n        ext.barcodeService.initForReceipt(receiptSaleModel);\r\n\r\n        // common approach for terminal receipts all of them will be printed one by one and then main receipt\r\n        receiptSaleModel.VantivTerminalReceipts = [];\r\n        receiptSaleModel.TyroTerminalReceipts = [];\r\n        receiptSaleModel.LinklyTerminalReceipts = [];\r\n        receiptSaleModel.TerminalReceipts = [];\r\n\r\n        this.fillTransactionData(sale, receiptSaleModel, currency);\r\n    }\r\n\r\n    static fillTransactionData(sale: ISale, receiptSaleModel: IReceiptSaleModel, currency: string) {\r\n        const cfg = ext.configService.getCardPaymentSettings<any>();\r\n\r\n        const printMerchantCopy = !!cfg && cfg.printTriPOSMerchantReceipt === true;\r\n\r\n        // check if vaniv data exists \r\n        sale.Payments.forEach(p => {\r\n            if (!!p.TransactionMetaData) {\r\n                let v: any = null;\r\n                const key = ext.cardPayService.detectProvider(p.TransactionMetaData);\r\n                switch (key) {\r\n                    case 'triPOSReaderProvider':\r\n                        v = ext.receiptService.fillVantivTransactionData(p.TransactionMetaData, currency);\r\n                        if (!!v) {\r\n                            receiptSaleModel.VantivTerminalReceipts.push(v);\r\n                            if (printMerchantCopy === true)\r\n                                // create one more element instead of push the same twice to prevent angular error\r\n                                receiptSaleModel.VantivTerminalReceipts.push(\r\n                                    ext.receiptService.fillVantivTransactionData(p.TransactionMetaData, currency));\r\n                        }\r\n                        break;\r\n\r\n                    case 'tyroReaderProvider':\r\n                        v = ext.saleService.fillTyroTransactionData(p.TransactionMetaData, true);\r\n                        if (!!v) {\r\n                            receiptSaleModel.TyroTerminalReceipts.push(v);\r\n                        }\r\n\r\n                        v = ext.saleService.fillTyroTransactionData(p.TransactionMetaData, false);\r\n                        if (!!v) {\r\n                            receiptSaleModel.TyroTerminalReceipts.push(v);\r\n                        }\r\n\r\n                        break;\r\n\r\n                    case 'linklyPaymentReaderProvider':\r\n                        v = ext.saleService.fillLinklyPaymentTransactionData(p.TransactionMetaData, true);\r\n                        if (!!v) {\r\n                            receiptSaleModel.LinklyTerminalReceipts.push(v);\r\n                        }\r\n\r\n                        v = ext.saleService.fillLinklyPaymentTransactionData(p.TransactionMetaData, false);\r\n                        if (!!v) {\r\n                            receiptSaleModel.LinklyTerminalReceipts.push(v);\r\n                        }\r\n\r\n                        break;\r\n                    default:\r\n                        if (key) {\r\n                            const provider = ext.cardPayService.selectProvider(null, key, true);\r\n                            if (provider && typeof provider.provider?.getReceipt === 'function') {\r\n                                v = provider.provider.getReceipt(p.TransactionMetaData, true);\r\n                                if (!!v) {\r\n                                    receiptSaleModel.TerminalReceipts.push(v);\r\n                                }\r\n                                v = provider.provider.getReceipt(p.TransactionMetaData, false);\r\n                                if (!!v) {\r\n                                    receiptSaleModel.TerminalReceipts.push(v);\r\n                                }\r\n                            }\r\n                        }\r\n                }\r\n            }\r\n        });\r\n    };\r\n\r\n    // enum all sale products and call callback\r\n    // sale is from server call, i.e. formatted as API structure\r\n    // callback(item, isDirectSaleData)\r\n    static goThroughEntireSaleItems(sale: IAPISale, callback: (line: IAPIProduct, isDirectSaleData: boolean) => void): void {\r\n        if (sale.Lines)\r\n            sale.Lines.forEach(l => callback.call(this, l, true));\r\n\r\n        if (sale.Refunds)\r\n            sale.Refunds.forEach(ref => ref.Lines ?\r\n                ref.Lines.forEach(l => callback.call(this, l, false)) :\r\n                0);\r\n    }\r\n\r\n    static goThroughEntireSalePayments(sale: IAPISale, callback: (payment: IAPIPayment, isDirectSaleData: boolean) => void): void {\r\n        if (sale.Payments)\r\n            sale.Payments.forEach(p => callback.call(this, p, true));\r\n\r\n        if (sale.Refunds)\r\n            sale.Refunds.forEach(ref => ref.Payments ?\r\n                ref.Payments.forEach(p => callback.call(this, p, false)) :\r\n                0);\r\n    }\r\n\r\n    static goThroughEntireSaleSurcharges(sale: IAPISale, callback: (surcharge: IAPISurcharge, isDirectSaleData: boolean) => void): void {\r\n        if (sale.Surcharges)\r\n            sale.Surcharges.forEach(s => callback.call(this, s, true));\r\n\r\n        if (sale.Refunds)\r\n            sale.Refunds.forEach(ref => ref.Surcharges ?\r\n                ref.Surcharges.forEach(s => callback.call(this, s, false)) :\r\n                0);\r\n    };\r\n\r\n    static restoreSurcharge(sd: IAPISurcharge, taxInclusive: boolean) {\r\n        if (!sd || !sd.Total) return sd;\r\n\r\n        sd.CalculatedValue = sd.Total;\r\n        sd.CalculatedValueWithTax = taxInclusive === true ? sd.Total : (sd.Total + sd.Tax);\r\n    };\r\n\r\n    static addGhostSurcharge(sale: ISale, surcharge: ISurcharge, ptype: PaymentShortNameStandardType) {\r\n        const p = Enumerable.from(sale.Payments)\r\n            .where(p => p.ShortName === ptype)\r\n            .firstOrDefault();\r\n\r\n        if (p) {\r\n            p.Surcharge = surcharge;\r\n            surcharge.PaymentID = p.ID;\r\n        }\r\n    }\r\n\r\n    static setPaymentMethodName(el: IAPIPayment, customPaymentMethods: Array<IPaymentMethod>): void {\r\n        el.PaymentTypeName = this.getPaymentName(el.ShortName, customPaymentMethods);\r\n    }\r\n\r\n    static getPaymentName(shortName: string, customPaymentMethods: Array<IPaymentMethod>) {\r\n        let name: string = null;\r\n\r\n        switch (shortName) {\r\n            case PaymentShortNameStandardType.Cash:\r\n                name = ext.gettextCatalog.getString(\"Cash\");\r\n                break;\r\n            case PaymentShortNameStandardType.CreditCard:\r\n                name = ext.gettextCatalog.getString(\"Credit card\");\r\n                break;\r\n            case PaymentShortNameStandardType.StoreCredits:\r\n                name = ext.gettextCatalog.getString(\"Store credit\");\r\n                break;\r\n            case PaymentShortNameStandardType.LoyaltyPoints:\r\n            case PaymentShortNameStandardType.Loyalty:\r\n                name = ext.gettextCatalog.getString(\"Loyalty points\");\r\n                break;\r\n            default:\r\n                name = this.getCustomPaymentMethodName(shortName, customPaymentMethods);\r\n                break;\r\n        }\r\n\r\n        return name;\r\n    };\r\n\r\n\r\n    static getCustomPaymentMethodName(shortName: string, customPaymentMethods: Array<IPaymentMethod>): string {\r\n        var lst = customPaymentMethods.filter(function (el) { return el.loweredPaymentMethodName == shortName });\r\n        return lst.length > 0 ? lst[0].paymentMethodName : shortName;\r\n    }\r\n\r\n    static isStandardPaymentType(paymentShortName: string) {\r\n        if (!paymentShortName || typeof (paymentShortName) !== 'string') return false;\r\n\r\n        switch (paymentShortName.toLowerCase()) {\r\n            case PaymentShortNameStandardType.Cash:\r\n            case PaymentShortNameStandardType.CreditCard:\r\n            case PaymentShortNameStandardType.GiftCard:\r\n            case PaymentShortNameStandardType.Loyalty:\r\n            case PaymentShortNameStandardType.StoreCredits:\r\n            case PaymentShortNameStandardType.Rounding.toLowerCase():\r\n            case PaymentShortNameStandardType.Discount.toLowerCase():\r\n                return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    static formPaymentID(el: IAPIPayment): string {\r\n        let ptp = el.ShortName;\r\n        if (ptp.indexOf(PaymentShortNameStandardType.BackofficePayment) === 0) {\r\n            ptp = PaymentShortNameStandardType.BackofficePayment;\r\n        }\r\n\r\n        let res: string = null;\r\n\r\n        switch (ptp) {\r\n            case PaymentShortNameStandardType.Loyalty:\r\n            case PaymentShortNameStandardType.GiftCard:\r\n            case PaymentShortNameStandardType.BackofficePayment:\r\n            case PaymentShortNameStandardType.StoreCredits:\r\n            case PaymentShortNameStandardType.Cash:\r\n                res = ptp + '@@1@@';\r\n                break;\r\n            case PaymentShortNameStandardType.CreditCard:\r\n                res = 'credit card@@1@@' + el.ServerTransactionID + '@@2@@' + el.ClientTransactionID + '@@3@@';\r\n                if (el.Surcharge)\r\n                    res += el.Surcharge.SurchargeID + '@@4@@';\r\n                break;\r\n            default:\r\n                if (!this.isStandardPaymentType(ptp)) {\r\n                    res = ptp + '@@1@@';\r\n                    if (el.Surcharge) {\r\n                        res += '@@2@@@@3@@' + el.Surcharge.SurchargeID + '@@4@@';\r\n                    }\r\n                }\r\n                break;\r\n        }\r\n\r\n        return res;\r\n    }\r\n\r\n    static negateSurcharge(el: IAPISurcharge) {\r\n        el.CalculatedValue *= -1;\r\n        el.CalculatedValueWithTax *= -1;\r\n        el.Tax *= -1;\r\n        if (el.AmountToRefund)\r\n            el.AmountToRefund *= -1;\r\n        if (el.TaxToRefund)\r\n            el.TaxToRefund *= -1;\r\n        if (el.Total)\r\n            el.Total *= -1;\r\n    };\r\n\r\n    // s2 surcharge will be added into s1\r\n    static sumSurcharges(s1: IAPISurcharge, s2: IAPISurcharge, isNegative?: boolean) {\r\n        if (!s1 || !s2) return;\r\n        var sign = isNegative === true ? -1 : 1;\r\n        s1.CalculatedValue = ext.helperService.addValues(s1.CalculatedValue, sign * s2.CalculatedValue);\r\n        s1.CalculatedValueWithTax = ext.helperService.addValues(s1.CalculatedValueWithTax, sign * s2.CalculatedValueWithTax);\r\n        s1.Tax = ext.helperService.addValues(s1.Tax, sign * s2.Tax);\r\n        s1.AmountToRefund = ext.helperService.addValues(s1.AmountToRefund, sign * s2.AmountToRefund);\r\n        s1.TaxToRefund = ext.helperService.addValues(s1.TaxToRefund, sign * s2.TaxToRefund);\r\n        if (s1.Total && s2.Total)\r\n            s1.Total = ext.helperService.addValues(s1.Total, sign * s2.Total);\r\n    }\r\n\r\n    static groupSalesTree(sale: IAPISale, surcharges: any, customPaymentMethods: Array<IPaymentMethod>): IGroupedSale {\r\n        const nativeSale = convertFromOld(sale.RawSaleObject);\r\n        const paymap = new Map<string, IAPIPayment>();\r\n        const surmap = new Map<string, IAPISurcharge>();\r\n        const ghostsurlist = new Array<IAPISurcharge>();\r\n\r\n        const groupedSale = <IGroupedSale>\r\n            {\r\n                TotalSurcharge: 0, // including refunded surcharges via cash/store credits\r\n                GhostSurcharge: 0,\r\n                TotalSale: 0,\r\n                TotalToRefund: 0,\r\n                ExchangeAmount: 0,\r\n                PaymentsMap: {},\r\n                PaymentsMap2: {},\r\n                LoyaltyRefundCoeff: 1 // if we paid by loyalties it means that this sum didn't lead to loyalty accrual so during refund we should count this\r\n            };\r\n\r\n        this.goThroughEntireSaleItems(sale, (line, _isDirectSaleData) => {\r\n            if (!line.MissingInInvoice) {\r\n                if (line.IsProduct || line.ProductID) {\r\n                    let sm = Math.abs(line.TotalPerLine + (nativeSale.IsTaxInclusive !== true ? line.Tax : 0));\r\n                    if (line.Quantity < 0) sm *= -1; // actually API sales are composed so that only quantity sign defines amount sign\r\n                    groupedSale.TotalSale += ext.helperService.DEARRound(sm, 2);\r\n                } else if (!line.IsProduct && !line.IsGiftCard && !line.ProductID && line.Name === PaymentShortNameStandardType.Discount) {\r\n                    groupedSale.TotalSale += ext.helperService.DEARRound(line.TotalPerLine, 2); // count order level discount\r\n                }\r\n            }\r\n        });\r\n\r\n        this.goThroughEntireSaleSurcharges(sale, (item, isDirectSaleData) => {\r\n            const srch = <IAPISurcharge>angular.copy(item);\r\n\r\n            this.restoreSurcharge(srch, nativeSale.IsTaxInclusive);\r\n\r\n            // set refundable flag from global surcharge list\r\n            if (surcharges[srch.SurchargeID]) {\r\n                srch.RefundSurcharge = surcharges[srch.SurchargeID].RefundSurcharge;\r\n            }\r\n\r\n            if (item.PaymentShortName) {\r\n                // this is surcharge that was created as separation of cash surcharge refund\r\n                // but we still need to count it \r\n                srch.RefundSurcharge = true;\r\n                ghostsurlist.push(srch);\r\n            } else if (item.PaymentID) {\r\n                surmap.set(item.PaymentID, srch);\r\n                if (srch.RefundSurcharge === true)\r\n                    groupedSale.TotalSurcharge += (!isDirectSaleData ? -1 : 1) * srch.CalculatedValueWithTax;\r\n            }\r\n        });\r\n\r\n        this.goThroughEntireSalePayments(sale, (item, _isDirectSaleData) => {\r\n            this.setPaymentMethodName(item, customPaymentMethods);\r\n\r\n            //restore surcharges to payments\r\n            const srch = surmap.get(item.ID);\r\n            if (srch)\r\n                item.Surcharge = srch;\r\n        });\r\n\r\n        // group all surcharges\r\n        // also group payments\r\n        var paymentSum = 0;\r\n        var loyaltyPaymentSum = 0;\r\n        this.goThroughEntireSalePayments(sale, (item, isDirectSaleData) => {\r\n            var id = this.formPaymentID(item);\r\n\r\n            // collect only payments but not returns\r\n            if (isDirectSaleData) {\r\n                if (item.ShortName === PaymentShortNameStandardType.Loyalty)\r\n                    loyaltyPaymentSum += item.Amount;\r\n                else\r\n                    paymentSum += item.Amount;\r\n            } else if (item.Amount < 0) {\r\n                if (item.ShortName === PaymentShortNameStandardType.Loyalty)\r\n                    loyaltyPaymentSum -= item.Amount;\r\n                else\r\n                    paymentSum -= item.Amount;\r\n            }\r\n\r\n            var p = paymap.get(id);\r\n            if (!p) {\r\n                item = <IAPIPayment>angular.copy(item);\r\n                if (!isDirectSaleData) {\r\n                    item.Amount *= -1;\r\n                    if (item.Surcharge)\r\n                        this.negateSurcharge(item.Surcharge);\r\n                }\r\n                paymap.set(id, item);\r\n            } else {\r\n                p.Amount += (!isDirectSaleData ? -1 : 1) * item.Amount;\r\n                if (item.Surcharge)\r\n                    this.sumSurcharges(p.Surcharge, item.Surcharge, !isDirectSaleData); // add to p.Surcharge\r\n            }\r\n        });\r\n\r\n        if ((paymentSum + loyaltyPaymentSum) > 0)\r\n            groupedSale.LoyaltyRefundCoeff = paymentSum / (paymentSum + loyaltyPaymentSum);\r\n        else\r\n            groupedSale.LoyaltyRefundCoeff = 1;\r\n\r\n        // go through ghost list\r\n        ghostsurlist.forEach(srch => groupedSale.GhostSurcharge -= srch.CalculatedValueWithTax);\r\n        groupedSale.GhostSurcharge = ext.helperService.DEARRound(groupedSale.GhostSurcharge, 2);\r\n\r\n        // create initial surcharge copy for next calculations\r\n        groupedSale.PaymentsMap = {}; // all payments map for initial sale\r\n        Array.from(paymap.values()).forEach(p => {\r\n            p.ID = ext.uuid2Service.newguid();\r\n            if (p.Surcharge) {\r\n                p.Surcharge.PaymentID = p.ID;\r\n                p.InitialSurcharge = <IAPISurcharge>angular.copy(p.Surcharge);\r\n            }\r\n\r\n            groupedSale.PaymentsMap[p.ID] = p;\r\n        });\r\n\r\n        ext.cardPayService.createCardPaymentMap(groupedSale);\r\n        return groupedSale;\r\n    }\r\n\r\n    /*\r\n     Collect refunded amounts in relation to main sale.\r\n     */\r\n    static groupMainSaleRefunds(selectedItem: ISelectedItem, customPaymentMethods: Array<IPaymentMethod>) {\r\n        if (selectedItem.Data.FinancialStatus === FinancialStatusType.Closed && selectedItem.Data.Refunds) {\r\n            // if it's main sale, to correctly show refunded amounts, setup surcharges to them\r\n            selectedItem.RefundPayments = [];\r\n            let ps = new Array<IAPIPayment>();\r\n\r\n            Enumerable.from(selectedItem.Data.Refunds).forEach(ref =>\r\n                Enumerable.from(ref.Payments).forEach(p => {\r\n                    var pc = <IAPIPayment>angular.copy(p);\r\n                    this.setPaymentMethodName(pc, customPaymentMethods);\r\n                    ps.push(pc);\r\n                })\r\n            );\r\n\r\n            selectedItem.RefundPayments = Enumerable.from(ps)\r\n                .groupBy(p => p.ShortName)\r\n                .select(g => {\r\n                    return {\r\n                        ShortName: g.key(),\r\n                        PaymentTypeName: this.getPaymentName(g.key(), customPaymentMethods),\r\n                        Amount: g.sum(e => e.Amount)\r\n                    }\r\n                })\r\n                .where(s => s.Amount > 0)\r\n                .select(p => p)\r\n                .toArray();\r\n\r\n        }\r\n    }\r\n\r\n    static isSaleInNewFormat(sale: any): boolean {\r\n        return sale && sale.PayloadVersion === '3';\r\n    }\r\n\r\n    // see saleService.js getTaxObject\r\n    static getTaxObject(currentSale: ISale, el: ICheckoutItem) {\r\n        const tenantTax = ext.configService.tenantTaxRule;\r\n        const outletTax = ext.configService.lastOutletTax;\r\n        let customerTaxObject: ITax = null;\r\n\r\n        if (!ext.configService.ignoreCustomerTaxRule && currentSale.Customer && !!currentSale.Customer.TaxRuleID) {\r\n            customerTaxObject = <ITax>{\r\n                TaxRuleID: currentSale.Customer.TaxRuleID,\r\n                EffectiveInclusiveTaxPercent: currentSale.Customer.EffectivePercentInclusive,\r\n                EffectiveExclusiveTaxPercent: currentSale.Customer.EffectivePercentExclusive\r\n            };\r\n        }\r\n\r\n        var taxObject = this.getTaxObjectFromOldFormat(\r\n            (!!el && el.ProductTaxString) ? JSON.parse(el.ProductTaxString) :\r\n                customerTaxObject ? customerTaxObject :\r\n                    outletTax !== 'null' ? JSON.parse(outletTax) :\r\n                        JSON.parse(tenantTax));\r\n\r\n        return taxObject;\r\n    };\r\n\r\n    static getTaxObjectFromOldFormat(parsedTax: any): ITax {\r\n        return <ITax>{\r\n            TaxRuleID: parsedTax.TaxRuleID ? parsedTax.TaxRuleID : parsedTax.ruleID,\r\n            EffectiveInclusiveTaxPercent: parsedTax.TaxRuleID ? parsedTax.EffectiveInclusiveTaxPercent : parsedTax.effectivePercentInclusive,\r\n            EffectiveExclusiveTaxPercent: parsedTax.TaxRuleID ? parsedTax.EffectiveExclusiveTaxPercent : parsedTax.effectivePercentExclusive\r\n        };\r\n    }\r\n\r\n    static assignOutletInfo(info: IOutletInfo | null): IOutletInfo {\r\n        const rec = {} as IOutletInfo;\r\n\r\n        if (info && typeof info === 'object') {\r\n            if (info.Description) {\r\n                rec.Description = info.Description;\r\n            }\r\n            if (!!info.City || !!info.Country || !!info.Line1 || !!info.Line2 || !!info.Postcode || !!info.State) {\r\n                rec.City     = info.City;\r\n                rec.Country  = info.Country;\r\n                rec.Line1    = info.Line1;\r\n                rec.Line2    = info.Line2;\r\n                rec.Postcode = info.Postcode;\r\n                rec.State    = info.State;\r\n            }\r\n        }\r\n\r\n        return rec;\r\n    }\r\n\r\n}","import { IAngularStatic } from \"angular\";\r\nimport Enumerable from \"linq\";\r\nimport { IInputData, IOutputData, IPartialCalculator, IPartialExecutor } from \"./CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel } from \"./Enums\";\r\nimport PARTIAL_CALCULATORS from './PartialCalculators';\r\n\r\n\r\n\r\ndeclare const angular: IAngularStatic;\r\n// main service. Should be acessed via accessor CalculatorService.Instance\r\nexport class CalculatorService {\r\n    private static instance: CalculatorService = null;\r\n    private calculators: Enumerable.IDictionary<CalculationType, Array<IPartialExecutor>> = null;\r\n\r\n    static get Instance(): CalculatorService {\r\n        if (this.instance === null) {\r\n            this.instance = new CalculatorService();\r\n        }\r\n\r\n        return this.instance;\r\n    }\r\n\r\n    // lelel - minimal order number from which calculation will be started\r\n    calculate(type: CalculationType, inputData: IInputData, level: StartCalcLevel = StartCalcLevel.Setup): IOutputData {\r\n        const processors = this.calculators.get(type);\r\n        let out = <IOutputData>{\r\n            processResult: true,\r\n            errorMessage: null\r\n        };\r\n\r\n        processors.filter(p => p.order >= level).forEach(proc => {\r\n            if (out.processResult) {\r\n                out = angular.extend(out, proc.executor.calculate(type, inputData));\r\n            }\r\n        });\r\n\r\n        return out;\r\n    }\r\n\r\n    // constructor. Find and intinialize all partial calculators\r\n    private constructor() {\r\n        // enum all window objects and init partial calculator instances\r\n        const names = Object.getOwnPropertyNames(PARTIAL_CALCULATORS).filter(n => this.isPartialCalculator(PARTIAL_CALCULATORS[n]) === true);\r\n        const lst = new Array<IPartialExecutor>();\r\n\r\n        // fill all calculators\r\n        names.forEach(n => {\r\n            const p = this.getInstance(n);\r\n            p.getOptions().executionOptions.forEach(o => {\r\n                lst.push(<IPartialExecutor>{\r\n                    type: o.type,\r\n                    order: o.order,\r\n                    executor: p\r\n                });\r\n            })\r\n        });\r\n\r\n        // group and sort\r\n        this.calculators = Enumerable.from(lst)\r\n                            .groupBy(item => item.type)\r\n                            .select(r => {\r\n                                return {\r\n                                    type: <CalculationType><any>r.key(),\r\n                                    executors: Enumerable.from(r.getSource()).orderBy(k=>k.order).toArray()\r\n                                };\r\n                            }).toDictionary(k=>k.type, v=>v.executors);\r\n    }\r\n\r\n    private isPartialCalculator(_obj: any): _obj is IPartialCalculator {\r\n        return true;\r\n    }\r\n\r\n    private getInstance(name: string): IPartialCalculator {\r\n        var t = Object.create(PARTIAL_CALCULATORS[name].prototype);\r\n        t.constructor.apply(t);\r\n        return <IPartialCalculator>t;\r\n    }\r\n\r\n    getNumberOfCalculators(): number {\r\n        return this.calculators.count();\r\n    }\r\n}","import { CalculatorHelperService } from \"./CalculatorHelperService\";\r\nimport { SaleType, CustomDiscountType } from \"./Enums\";\r\nimport { ICheckoutItem, IProductDeal, ILineDiscountResult, ProductType } from \"./Interfaces\";\r\nimport { IAngularStatic } from 'angular';\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport class CheckoutItem implements ICheckoutItem {\r\n    ID: string;\r\n    Name: string;\r\n    ProductID?: string;\r\n    ProductShortDescription: string;\r\n    ProductType: ProductType;\r\n    SerialNumber?: string;\r\n    SKU: string;\r\n    OptionLine: string;\r\n    FamilyID?: string;\r\n    SeparatedItemID?: string;\r\n    ComplexSeparatedItemID?: string;\r\n    ImageID?: string;\r\n    BasePrice: number;\r\n    FinalPrice: number;\r\n    FinalAmount: number;\r\n    FinalTaxAmount: number;\r\n    Barcode?: string;\r\n    BrandID?: string;\r\n    CategoryID: string;\r\n    Count: number;\r\n    Discounts: IProductDeal[];\r\n    LoyaltyPointsEarning: number;\r\n    SaleType?: SaleType;\r\n    CanDelete?: boolean;\r\n    CanEdit?: boolean;\r\n    Discount?: number;\r\n    ItemDiscount?: number;\r\n    DefaultPrice?: number;\r\n    Price1?: number;\r\n    Price2?: number;\r\n    Price3?: number;\r\n    Price4?: number;\r\n    Price5?: number;\r\n    Price6?: number;\r\n    Price7?: number;\r\n    Price8?: number;\r\n    Price9?: number;\r\n    Price10?: number;\r\n    Deals?: ILineDiscountResult[];\r\n    ExtraInfo?: string;\r\n    GiftCardCode?: string;\r\n    GiftCardExpirationDate?: string;\r\n    CF1?: string;\r\n    CF2?: string;\r\n    CF3?: string;\r\n    CF4?: string;\r\n    CF5?: string;\r\n    CF6?: string;\r\n    CF7?: string;\r\n    CF8?: string;\r\n    CF9?: string;\r\n    CF10?: string;\r\n    Note?: string;\r\n    Option1?: string;\r\n    Option2?: string;\r\n    Option3?: string;\r\n    Tags?: string;\r\n    CustomDiscountType?: CustomDiscountType;\r\n    TaxRuleID: string;\r\n    EffectiveInclusiveTaxPercent: number;\r\n    EffectiveExclusiveTaxPercent: number;\r\n    LoyaltyRatio?: number;\r\n    ProductTaxString: string;\r\n\r\n    BaseCount?: number; // for refund form stores initial number of items in sale\r\n    MaxCount?: number;\r\n    MinCount?: number;\r\n    Return?: boolean;\r\n    Sign?: number;\r\n    BaseTax?: number;\r\n    PriceBasedValue?: number;\r\n\r\n    constructor() {\r\n\r\n    }\r\n\r\n    isValid() {\r\n        return true;\r\n    }\r\n\r\n    static create(item: ICheckoutItem): ICheckoutItem {\r\n        if (!item) return new CheckoutItem();\r\n\r\n        if (typeof ((<any>item).isValid) !== 'function') {\r\n            // remove possible artefacts from old style sales (related to custom sale checkout items)\r\n            delete (<any>item).Price;\r\n            delete (<any>item).PriceWithTax;\r\n            delete (<any>item).Amount;\r\n\r\n            return angular.extend(new CheckoutItem(), item);\r\n        }\r\n        else\r\n            return <ICheckoutItem>item;\r\n    }\r\n\r\n    static copy(item: ICheckoutItem): ICheckoutItem {\r\n        let newItem = <ICheckoutItem>angular.copy(item);\r\n        return this.create(newItem);\r\n    }\r\n\r\n    /* we need to separate rounding of Order Lines and Addtitional Charges lines same as done in web\r\n        So Total will be ROUND(Lines) + Round(Additional Lines) and tax will be ROUND(Tax Lines) + ROUND(Tax Additional Lines)\r\n    */\r\n    static isAdditionalCharge(item: ICheckoutItem) {\r\n        // Quick Sale products\r\n        return item.SaleType === 'customsale';\r\n    }\r\n\r\n    // ********************************* old style support ***************\r\n    get Amount(): number {\r\n        return this.FinalAmount;\r\n    }\r\n\r\n    set Amount(v: number) {\r\n        throw new TypeError('Amout property does not exist. Use FinalAmount instead.');\r\n    }\r\n\r\n    get minCount(): number {\r\n        return CalculatorHelperService.zcn(this.MinCount);\r\n    }\r\n\r\n    get maxCount(): number {\r\n        return CalculatorHelperService.zcn(this.MaxCount);\r\n    }\r\n\r\n    get return(): boolean {\r\n        return CalculatorHelperService.zcb(this.Return);\r\n    }\r\n    set return(v: boolean) {\r\n        this.Return = v;\r\n    }\r\n\r\n    set sign(v: number) {\r\n        this.Sign = v;\r\n    }\r\n    get sign(): number {\r\n        return this.Sign;\r\n    }\r\n\r\n    get PriceWithDiscount(): number {\r\n        return this.FinalPrice;\r\n    }\r\n\r\n    get Price(): number {\r\n        return this.FinalPrice;\r\n    }\r\n\r\n    get Sku(): string {\r\n        return this.SKU;\r\n    }\r\n\r\n    get priceBasedValue(): number {\r\n        return this.PriceBasedValue;\r\n    }\r\n}","import { IAngularStatic } from \"angular\";\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport class CertificateErrorComponent {\r\n    static $inject = ['$scope', 'helperService', CertificateErrorComponent];\r\n\r\n    constructor(private $scope: any, private helperService: any) {\r\n        this.$scope.$on('$viewContentLoaded', this.contentLoaded.bind(this));\r\n    }\r\n\r\n    contentLoaded() {\r\n        this.helperService.closeDialog($('#enterModal'));\r\n    }\r\n\r\n    openLink() {\r\n        cordova.InAppBrowser.open('https://support.dearsystems.com/support/solutions/articles/11000125998-cin7-core-applications-server-connection-error-update-certificate', '_system');\r\n    }\r\n   \r\n}\r\n\r\n\r\nangular.module(\"mainApp\").controller('certificateErrorComponent', CertificateErrorComponent.$inject);\r\n\r\nexport default 'certificateErrorComponent'","import { SecondScreenStates, SecondTerminalServiceWeb } from \"../Services/second-terminal.service\";\r\nimport { IContact, IReceiptSaleModel, ISale } from \"../Interfaces\";\r\nimport { IAngularStatic } from 'angular';\r\ndeclare var $: any;\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport interface ISecondScreenControllerScope {\r\n    backgroundColor: string;\r\n    logoUrl: any;\r\n    customerContact: IContact;\r\n    customizedUI: boolean;\r\n    receiptSaleModel: IReceiptSaleModel;\r\n    random: number;\r\n    currentSale: ISale;\r\n    secondScreenState: string;\r\n    finishLoading: Function;\r\n    currencyCulture: string;\r\n    $on: (s: string, f: Function) => void;\r\n    $apply(f: () => void): unknown;\r\n    currency_symbol: string;\r\n}\r\n\r\nexport interface IMessageData {\r\n    scope: ISecondScreenControllerScope;\r\n    secondScreenState: string;\r\n}\r\n\r\nexport class SecondScreenController {\r\n    static $inject = ['$scope', 'tmhDynamicLocale', 'helperService', '$locale', SecondScreenController];\r\n\r\n    private  = SecondScreenStates.Sale;\r\n    // @ts-ignore\r\n    private channel = new BroadcastChannel(SecondTerminalServiceWeb.ChannelName);\r\n\r\n    constructor(private $scope: ISecondScreenControllerScope, private tmhDynamicLocale: any, private helperService: any, private $locale: any) {\r\n        this.$scope.secondScreenState = SecondScreenStates.Off;\r\n        this.$scope.$on('$viewContentLoaded', this.contentLoaded.bind(this));\r\n        this.$scope.$on('$destroy', this.destroy.bind(this))\r\n        this.$scope.finishLoading = this.finishLoading.bind(this);\r\n        this.channel.onmessage = this.onMessage.bind(this);\r\n    }\r\n    \r\n    contentLoaded() {\r\n        $('.container-fluid.main-content').addClass('second-screen');\r\n    }\r\n\r\n\r\n    finishLoading() {\r\n        $('#secondScreen #backScreenTemplates').css('display', 'unset');\r\n    }\r\n\r\n    onMessage(event) {\r\n        const data: IMessageData = event.data;\r\n\r\n        this.$scope.$apply(() => {\r\n            console.log(event);\r\n            if (typeof data == 'object' && data.scope) {\r\n                // copy items to controllers scope\r\n                for (const key in data.scope) {\r\n                    this.$scope[key] = data.scope[key];\r\n                }\r\n\r\n                if (!this.$scope.customizedUI) {\r\n                    this.$scope.backgroundColor = '#EEF1F5';\r\n                }\r\n\r\n                if (this.$scope.currencyCulture) {\r\n                    this.tmhDynamicLocale.set(this.$scope.currencyCulture.toLowerCase());\r\n                    this.helperService.setSpecialCurrencySymbols();\r\n                }\r\n\r\n                if(this.$scope.currency_symbol) {\r\n                    this.$locale.NUMBER_FORMATS.CURRENCY_SYM = this.$scope.currency_symbol;\r\n                }\r\n                \r\n                this.$scope.secondScreenState = data.secondScreenState;\r\n                if (this.$scope.currentSale.Customer?.ID) {\r\n                    const sale = this.$scope.currentSale;\r\n                    if (sale.SelectedContact && sale.SelectedContact.ID) {\r\n                        this.$scope.customerContact = sale.SelectedContact;\r\n                    } else if (!!sale.Customer.Contacts && sale.Customer.Contacts.length > 0) {\r\n                        let cnts = sale.Customer.Contacts.filter(function (c) { return c.Default === true; });\r\n                        if (cnts.length === 0)\r\n                            cnts = sale.Customer.Contacts;\r\n                        const cnt = cnts[0];\r\n                        this.$scope.customerContact = cnt;\r\n                    }\r\n                }\r\n            }\r\n        })\r\n    }\r\n\r\n    destroy() {\r\n        this.channel.close();\r\n        this.channel = null;\r\n    }\r\n}\r\n\r\n\r\n(<any>angular).module('mainApp').controller('secondScreenController', SecondScreenController.$inject);","//import angular from \"angular\";\r\nimport { Sale } from \"./Sale\";\r\nimport Enumerable from \"linq\";\r\nimport { CheckoutItem } from \"./CheckoutItem\";\r\nimport { CalculatorHelperService } from \"./CalculatorHelperService\";\r\nimport { Moment } from \"moment\";\r\nimport { StartCalcLevel, SaleType, AddressType, DiscountType, DiscountLineType, SurchargeType, SaleStatusType, FinancialStatusType, PaymentShortNameStandardType } from \"./Enums\";\r\nimport { IInputData } from \"./CalculatorInterfaces\";\r\nimport { ISale, IAPISale, ICustomer, ISalesRepresentative, ITax, ICheckoutItem, IPayment, IRefundBase, IAddress, IContact, ICustomerDeal, IDiscount, ISurcharge, IAPIConvertConfig, IAPIProduct, IAPIPayment, IAPISurcharge, IAPIRefund, ProductType } from \"./Interfaces\";\r\nimport { IAngularStatic } from 'angular';\r\n\r\ndeclare const moment: Moment;\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport class ConverterService {\r\n\r\n    // convert from old style sale to new style\r\n    // also it checks that sale object is new but constructed via JSON.parse\r\n    static convertFromOld(inputData: IInputData): ISale {\r\n        if (inputData.oldSale.PayloadVersion && inputData.oldSale.PayloadVersion === '3') { // already new one\r\n            inputData.sale = <ISale>CalculatorHelperService.saleFromRestoredString(inputData.oldSale);\r\n            return inputData.sale;\r\n        }\r\n        // make conversion\r\n        inputData.sale = new Sale();\r\n\r\n        this.setCheckoutsFromOldFormat(inputData);\r\n        this.setPaymentsFromOldFormat(inputData);\r\n        this.setCustomer(inputData);\r\n        this.setSalesRepresentative(inputData);\r\n        this.setSaleInfoFromOld(inputData);\r\n        return inputData.sale;\r\n    }\r\n\r\n    static convertToAPI(inputData: IInputData): IAPISale {\r\n        const currentSale = inputData.sale;\r\n        const cfg = inputData.convertData;\r\n\r\n        this.setConversionData(inputData);\r\n        this.setFinancialStatus(inputData);\r\n        this.setConsolidationFlag(inputData.convertData);\r\n\r\n        let apiSale = this.createAPISale(inputData);\r\n\r\n        this.checkNFillStandaloneRefund(inputData, apiSale);\r\n\r\n        if (currentSale.ReturnID || cfg.isStandaloneReturn || cfg.isStandaloneExchange) {\r\n            // process refund items\r\n            const refund = this.setRefundSale(inputData, apiSale);\r\n            this.setRefundCheckoutItems(inputData, refund);\r\n            this.setSaleDiscount(inputData, apiSale);\r\n            this.setRefundPayments(inputData, refund);\r\n            this.setRounding(inputData, refund.Payments, true);\r\n            this.setSurcharges(inputData.sale.Payments, refund.Surcharges, true);\r\n        } else {\r\n            this.setSaleCheckoutItems(inputData, apiSale);\r\n            this.setSaleDiscount(inputData, apiSale);\r\n            this.setSalePayments(inputData, apiSale);\r\n            this.setRounding(inputData, apiSale.Payments);\r\n            this.setSurcharges(inputData.sale.Payments, apiSale.Surcharges);\r\n        }\r\n\r\n        // this.filterPayments(apiSale);\r\n\r\n        return apiSale;\r\n    }\r\n\r\n    //static preparePayloadForSave(sale: ISale): string {\r\n    //    if (sale.RawSaleObject)\r\n    //        delete sale.RawSaleObject; // leave only one current level\r\n\r\n    //    return JSON.stringify(sale);\r\n    //}\r\n\r\n    static convertAPIToSale(inputData: IInputData): ISale {\r\n\r\n        const dearSale = inputData.oldSale; // it's here API format sale from Cin7 Core\r\n        const sale = new Sale();\r\n        inputData.sale = sale;\r\n\r\n        sale.ID = dearSale.TaskID;\r\n        // sale.tempFields.isDiscountPercent = false;\r\n        sale.Comment = dearSale.CustomerNote;\r\n        sale.Customer = <ICustomer>{\r\n            ID: dearSale.CustomerID,\r\n            Name: dearSale.CustomerName,\r\n            StoreCredits: dearSale.CustomerStoreCredits,\r\n            EnableLoyaltyPoints: dearSale.CustomerEnableLoyaltyPoints,\r\n            LoyaltyPoints: dearSale.CustomerLoyaltyPoints\r\n        };\r\n        sale.OrderNumber = dearSale.InvoiceNumber;\r\n        sale.OrderType = '';\r\n        sale.IsTaxInclusive = dearSale.TaxInclusive;\r\n        if (dearSale.SalesRepresentative) {\r\n            sale.SalesRepresentative = <ISalesRepresentative>{\r\n                Name: dearSale.SalesRepresentative\r\n            };\r\n        }\r\n\r\n        this.setCheckoutItemsFromAPISale(inputData);\r\n        this.setPaymentsFromAPISale(inputData);\r\n        CalculatorHelperService.calculateCheckout(sale, null, StartCalcLevel.Tax);\r\n\r\n        return sale;\r\n\r\n    }\r\n\r\n    // helper functions\r\n    private static setCheckoutItemsFromAPISale(inputData: IInputData) {\r\n        const dearSale = inputData.oldSale; // it's here API format sale from Cin7 Core\r\n        const sale = inputData.sale;\r\n\r\n        <Array<any>>(dearSale.SaleLines).forEach(el => {\r\n            const taxObject = <ITax>{\r\n                EffectiveExclusiveTaxPercent: el.Tax,\r\n                EffectiveInclusiveTaxPercent: el.Tax,\r\n                TaxRuleID: el.TaxRule,\r\n            };\r\n\r\n            const price = typeof (el.Price) !== 'number' ? parseFloat(el.Price) : el.Price;\r\n            const itemDiscount = price / 100 * el.Discount;\r\n            const priceWithDiscount = price - itemDiscount;\r\n            const loyaltyEarning = typeof (el.LoyaltyEarning) != 'number' ? parseFloat(el.LoyaltyEarning) : el.LoyaltyEarning;\r\n            const pl = CheckoutItem.create(<ICheckoutItem>{\r\n                ID: ext.uuid2Service.newguid(),\r\n                TaxRuleID: taxObject.TaxRuleID,\r\n                EffectiveInclusiveTaxPercent: taxObject.EffectiveInclusiveTaxPercent,\r\n                EffectiveExclusiveTaxPercent: taxObject.EffectiveExclusiveTaxPercent,\r\n                LoyaltyPointsEarning: loyaltyEarning ? loyaltyEarning : 0,\r\n                Name: el.Name,\r\n                Count: el.Quantity,\r\n                BasePrice: price,\r\n                FinalPrice: priceWithDiscount,\r\n                FinalAmount: priceWithDiscount * el.Quantity,\r\n                FinalTaxAmount: CalculatorHelperService.calculateTax(taxObject, priceWithDiscount * el.Quantity, sale.IsTaxInclusive),\r\n                Discounts: null,\r\n                Note: '',\r\n                SerialNumber: null,\r\n                ProductTaxString: el.ProductTaxString\r\n            });\r\n\r\n            if (el.ProductID !== \"00000000-0000-0000-0000-000000000000\") {\r\n\r\n                pl.ProductID = el.ProductID;\r\n                pl.Tags = el.Tags;\r\n                pl.BrandID = el.BrandID;\r\n                pl.CategoryID = el.CategoryID;\r\n                pl.FamilyID = el.FamilyID;\r\n                pl.CanEdit = false;\r\n                pl.CanDelete = false;\r\n                pl.DefaultPrice = el.Price;\r\n                pl.SaleType = SaleType.Sale;\r\n                pl.Barcode = el.Barcode;\r\n                pl.ImageID = el.ImageID;\r\n                pl.Option1 = el.Option1;\r\n                pl.Option2 = el.Option2;\r\n                pl.Option3 = el.Option3;\r\n                pl.ProductShortDescription = el.ProductShortDescription;\r\n                pl.ProductType = <ProductType>el.ProductType;\r\n                pl.CF1 = el.CF1;\r\n                pl.CF2 = el.CF2;\r\n                pl.CF3 = el.CF3;\r\n                pl.CF4 = el.CF4;\r\n                pl.CF5 = el.CF5;\r\n                pl.CF6 = el.CF6;\r\n                pl.CF7 = el.CF7;\r\n                pl.CF8 = el.CF8;\r\n                pl.CF9 = el.CF9;\r\n                pl.CF10 = el.CF10;\r\n                pl.ProductTaxString = el.ProductTaxString;\r\n\r\n                sale.CheckoutItems.push(pl);\r\n            } else if (el.Price >= 0) {\r\n                // custom sale\r\n                pl.ProductID = ext.uuid2Service.newguid();\r\n                pl.SaleType = SaleType.CustomSale;\r\n\r\n                sale.CheckoutItems.push(pl);\r\n            } else {\r\n                // actual discount line\r\n                sale.Discount += Math.abs(price * el.Quantity);\r\n            }\r\n        });\r\n    }\r\n\r\n    private static setPaymentsFromAPISale(inputData: IInputData) {\r\n        const dearSale = inputData.oldSale; // it's here API format sale from Cin7 Core\r\n        const sale = inputData.sale;\r\n\r\n        <Array<any>>(dearSale.Payments).forEach(el => {\r\n\r\n            var payment = <IPayment>{\r\n                ID: el.ID,\r\n                PaymentProcessorID: \"BackofficePayment\",\r\n                Amount: el.Amount,\r\n                Date: el.DatePaid,\r\n                ShortName: 'BackofficePayment_',\r\n                PaymentTypeName: \"Non-POS\",\r\n                Loyalty: 0,\r\n                Reference: null,\r\n                Surcharge: null\r\n            };\r\n\r\n            sale.Payments.push(payment);\r\n        });\r\n    }\r\n\r\n    private static setSaleInfoFromOld(inputData: IInputData) {\r\n        const { zct, zch, zcb } = CalculatorHelperService;\r\n\r\n        const os = inputData.oldSale;\r\n        const s = inputData.sale;\r\n        const cfg = inputData.convertData;\r\n\r\n        s.ID = os.ID;\r\n        s.ParentOrderID = !os.parentOrderID ? null : os.parentOrderID;\r\n        s.IsFirstChild = !os.IsFirstChild ? null : os.IsFirstChild;\r\n        s.NewRefundOrder = !os.newRefundOrder ? null : os.newRefundOrder;\r\n        s.PosOrderID = !os.PosOrderID ? null : os.PosOrderID;\r\n        s.ReturnID = !os.ReturnID ? null : os.ReturnID;\r\n        s.OperationID = !os.OperationID ? null : os.OperationID;\r\n        s.OrderNumber = os.OrderNumber;\r\n        s.OrderType = os.OrderType;\r\n        s.Barcode = !os.Barcode ? null : os.Barcode;\r\n        s.DateNative = !os.DateNative ? new Date() : os.DateNative;\r\n        s.Date = !os.Date ? null : os.Date;\r\n        s.SaleType = !os.SaleType ? SaleType.Sale : <SaleType>os.SaleType;\r\n        s.OperationName = !os.OperationName ? null : os.OperationName;\r\n        s.StandAloneReturn = !os.StandAloneReturn ? false : os.StandAloneReturn;\r\n        s.ClearOrderNumber = os.ClearOrderNumber;\r\n        s.SubTotal = !os.SubTotal ? 0 : os.SubTotal;// !os.Total ? (!os.BaseTotal ? 0 : os.BaseTotal) : os.Total;\r\n        s.Tax = !os.Tax ? (!os.CalculatedTax ? 0 : os.CalculatedTax) : os.Tax;\r\n        s.Discount = !os.Discount ? 0 : os.Discount;\r\n        s.IsDiscountPercent = os.IsDiscountPercent === true || os.isDiscountPercent === true;\r\n        s.LaybyDate = os.LaybyDate;\r\n\r\n        if (s.Discount) {\r\n            s.DiscountValue = os.discountValue;\r\n            // if (s.IsDiscountPercent)\r\n            //     s.DiscountValue = s.SubTotal * Math.min(Math.abs(s.Discount), 100) / 100;\r\n            // else\r\n            //     s.DiscountValue = Math.min(Math.abs(s.Discount), s.SubTotal);\r\n        }\r\n\r\n        s.Comment = !os.comment ? null : os.comment;\r\n        s.IsTaxInclusive = (cfg.taxInclusive === true || cfg.taxInclusive === false) ?\r\n            cfg.taxInclusive : CalculatorHelperService.isConfigTaxInclusive();\r\n        s.Total = !os.Total ? (s.SubTotal - s.DiscountValue + (s.IsTaxInclusive ? 0 : s.Tax)) : os.Total;\r\n        s.TotalCheckout = s.Total;\r\n        s.CashChangeAmount = ext.helperService.DEARRound(!os.CashChangeAmount ? 0 : os.CashChangeAmount, 6);\r\n        s.SelectedCouponID = !os.selectedCouponID ? null : os.selectedCouponID;\r\n        s.SelectedCouponDealID = !os.selectedCouponDealID ? null : os.selectedCouponDealID;\r\n        s.SelectedCoupon = !os.selectedCoupon ? null : os.selectedCoupon;\r\n        s.ReturnSelectedCouponID = !os.returnSelectedCouponID ? null : os.returnSelectedCouponID;\r\n        s.ReturnSelectedCouponDealID = !os.returnSelectedCouponDealID ? null : os.returnSelectedCouponDealID;\r\n        s.ReturnSelectedCoupon = !os.returnSelectedCoupon ? null : os.returnSelectedCoupon;\r\n        s.IsParked = !os.isParked ? false : os.isParked;\r\n        s.LoyaltyPoints = zch(os.LoyaltyPoints);\r\n        s.IsFromDearSale = !os.IsFromDearSale ? false : true;\r\n\r\n        if (os.isDiscountPercent !== null && os.isDiscountPercent !== undefined) {\r\n            s.IsDiscountPercent = os.isDiscountPercent;\r\n        }\r\n\r\n        if (os.note)\r\n            s.Comment = os.note;\r\n\r\n        if (os.Refunds) {\r\n            s.Refunds = new Array<IRefundBase>();\r\n            <Array<any>>(os.Refunds).forEach(r => {\r\n                s.Refunds.push(<IRefundBase>{\r\n                    RefundID: r.RefundID\r\n                })\r\n            });\r\n        }\r\n    }\r\n\r\n    private static setSalesRepresentative(inputData: IInputData) {\r\n        const oldSale = inputData.oldSale;\r\n        const sale = inputData.sale;\r\n        const reps = oldSale.salesRepresentative;\r\n        if (reps && typeof (reps) === 'string') {\r\n            sale.SalesRepresentative = <ISalesRepresentative>{\r\n                Name: reps\r\n            };\r\n        } else if (reps) {\r\n            sale.SalesRepresentative = <ISalesRepresentative>{\r\n                ID: reps.ID,\r\n                Name: reps.Name,\r\n                PosOutletID: !reps.PosOutletID ? null : reps.PosOutletID\r\n            };\r\n        }\r\n    }\r\n\r\n    private static setCustomer(inputData: IInputData) {\r\n        const oldSale = inputData.oldSale;\r\n        const sale = inputData.sale;\r\n\r\n        if (oldSale.customer) {\r\n            const c = oldSale.customer;\r\n            sale.Customer = <ICustomer>{\r\n                ID: c.ID,\r\n                Name: c.Name,\r\n                Account: c.Account,\r\n                AccountReceivable: c.AccountReceivable,\r\n                Addresses: new Array<IAddress>(),\r\n                Contacts: new Array<IContact>(),\r\n                CreditLimit: c.CreditLimit,\r\n                Currency: c.Currency,\r\n                Discount: c.Discount,\r\n                Discounts: new Array<ICustomerDeal>(),\r\n                MatrixDiscounts: new Array<IDiscount>(),\r\n                PriceTier: c.PriceTier,\r\n                RevenueAccount: c.RevenueAccount,\r\n                StoreCredits: c.StoreCredits,\r\n                Tags: c.Tags,\r\n                TaxNumber: c.TaxNumber,\r\n                TaxRule: c.TaxRule,\r\n                TaxRuleID: c.TaxRuleID,\r\n                EffectivePercentExclusive: c.EffectivePercentExclusive,\r\n                EffectivePercentInclusive: c.EffectivePercentInclusive,\r\n                EnableLoyaltyPoints: c.EnableLoyaltyPoints,\r\n                LoyaltyPoints: c.LoyaltyPoints,\r\n                DontReloadAddresses: c.DontReloadAddresses,\r\n                DontReloadContacts: c.DontReloadContacts\r\n            };\r\n\r\n            if (c.LoadedFromLocalDb === true || c.LoadedFromLocalDb === false)\r\n                sale.Customer.LoadedFromLocalDb = c.LoadedFromLocalDb;\r\n\r\n            if (c.Addresses) {\r\n                let ad: Array<any>;\r\n\r\n                if (typeof (c.Addresses) === 'string') {\r\n                    ad = JSON.parse(c.Addresses);\r\n                } else if (Array.isArray(c.Addresses)) {\r\n                    ad = c.Addresses;\r\n                } else ad = [];\r\n\r\n                ad.forEach(a => {\r\n                    const adr = <IAddress>{\r\n                        ID: a.ID,\r\n                        City: !a.City ? a.city : a.City,\r\n                        Country: !a.Country ? a.country : a.Country,\r\n                        DefaultForType: a.DefaultForType,\r\n                        Line1: !a.Line1 ? a.line1 : a.Line1,\r\n                        Postcode: !a.Postcode ? a.postcode : a.Postcode,\r\n                        Type: <AddressType>(!a.Type ? a.type : a.Type)\r\n                    };\r\n\r\n                    if (a.Line2 || a.line2) {\r\n                        adr.Line2 = !a.Line2 ? a.line2 : a.Line2;\r\n                    }\r\n\r\n                    if (a.state || a.State) {\r\n                        adr.State = !a.State ? a.state : a.State;\r\n                    }\r\n\r\n                    sale.Customer.Addresses.push(adr);\r\n                });\r\n            }\r\n\r\n            if (c.Contacts) {\r\n                <Array<any>>(c.Contacts).forEach(c => {\r\n                    const cnt = <IContact>{\r\n                        ID: c.ID,\r\n                        Default: c.Default,\r\n                        Email: c.Email,\r\n                        Fax: c.Fax,\r\n                        IncludeInEmail: c.IncludeInEmail,\r\n                        JobTitle: c.JobTitle,\r\n                        MobilePhone: c.MobilePhone,\r\n                        Name: c.Name,\r\n                        Phone: c.Phone,\r\n                        Website: c.Website\r\n                    };\r\n\r\n                    sale.Customer.Contacts.push(cnt);\r\n                });\r\n            }\r\n\r\n            if (c.Discounts) {\r\n                <Array<any>>(c.Discounts).forEach(d => {\r\n                    const cd = <ICustomerDeal>{\r\n                        CustomerID: d.CustomerID,\r\n                        DealID: d.DealID\r\n                    };\r\n\r\n                    sale.Customer.Discounts.push(cd);\r\n                });\r\n            }\r\n\r\n            if (c.MatrixDiscounts) {\r\n                <Array<any>>(c.MatrixDiscounts).forEach(m => {\r\n                    const mtx = <IDiscount>{\r\n                        Type: <DiscountType>m.Type,\r\n                        DiscountLineType: <DiscountLineType>m.DiscountLineType,\r\n                        ProductID: m.ProductID,\r\n                        CustomerID: m.CustomerID,\r\n                        ByTag: m.ByTag,\r\n                        MaxValue: m.MaxValue,\r\n                        MinValue: m.MinValue,\r\n                        Amount: m.Amount\r\n                    };\r\n\r\n                    sale.Customer.MatrixDiscounts.push(mtx);\r\n                });\r\n            }\r\n        } else {\r\n            sale.Customer = <ICustomer>{\r\n                ID: null\r\n            };\r\n        }\r\n    }\r\n\r\n    private static setPaymentsFromOldFormat(inputData: IInputData) {\r\n        const oldSale = inputData.oldSale;\r\n        const sale = inputData.sale;\r\n\r\n        if (Array.isArray(oldSale.Payments)) {\r\n            <Array<any>>(oldSale.Payments).forEach(p => {\r\n                const el = <IPayment>{\r\n                    Amount: p.Amount,\r\n                    Date: p.Date,\r\n                    ID: p.ID,\r\n                    Loyalty: !p.Loyalty ? 0 : p.Loyalty,\r\n                    PaymentProcessorID: p.PaymentProcessorID,\r\n                    PaymentTypeName: p.PaymentTypeName,\r\n                    ShortName: p.ShortName,\r\n                    Reference: !p.Reference ? null : p.Reference,\r\n                    ServerTransactionID: !p.ServerTransactionID ? null : p.ServerTransactionID,\r\n                    ClientTransactionID: !p.ClientTransactionID ? null : p.ClientTransactionID,\r\n                    SaleServerTransactionID: !p.SaleServerTransactionID ? null : p.SaleServerTransactionID,\r\n                    TransactionMetaData: !p.TransactionMetaData ? null : p.TransactionMetaData,\r\n                    GiftCardID: !p.GiftCardID ? null : p.GiftCardID,\r\n                    Surcharge: null\r\n                };\r\n\r\n                if (p.Surcharge) {\r\n                    const s = p.Surcharge;\r\n                    el.Surcharge = <ISurcharge>{\r\n                        SurchargeID: s.SurchargeID,\r\n                        Type: <SurchargeType>s.Type,\r\n                        Name: s.Name,\r\n                        CalculatedValue: s.CalculatedValue,\r\n                        CalculatedValueWithTax: s.CalculatedValueWithTax,\r\n                        PaymentID: s.PaymentID,\r\n                        RefundSurcharge: s.RefundSurcharge,\r\n                        Tax: s.Tax,\r\n                        TaxRuleID: s.TaxRuleID,\r\n                        Value: s.Value\r\n                    };\r\n                }\r\n\r\n                sale.Payments.push(el);\r\n            });\r\n        }\r\n    }\r\n\r\n    public static convertFromOldCheckoutItem(oel: any): ICheckoutItem {\r\n        const el = CheckoutItem.create(<ICheckoutItem>{\r\n            ID: oel.ID,\r\n            FinalAmount: oel.Amount,\r\n            Barcode: !oel.BarCode ? null : oel.BarCode,\r\n            BasePrice: Math.abs(oel.BasePrice),\r\n            FinalPrice: Math.abs(oel.BasePriceWithDiscount),\r\n            BrandID: oel.BrandID,\r\n            ImageID: oel.ImageID,\r\n            CF1: oel.CF1,\r\n            CF2: oel.CF2,\r\n            CF3: oel.CF3,\r\n            CF4: oel.CF4,\r\n            CF5: oel.CF5,\r\n            CF6: oel.CF6,\r\n            CF7: oel.CF7,\r\n            CF8: oel.CF8,\r\n            CF9: oel.CF9,\r\n            CF10: oel.CF10,\r\n            CanDelete: oel.CanDelete,\r\n            CanEdit: oel.CanEdit,\r\n            DefaultPrice: oel.DefaultPrice,\r\n            ItemDiscount: CalculatorHelperService.zch(oel.itemDiscount),\r\n            Discount: CalculatorHelperService.zch(oel.Discount),\r\n            Price1: oel.Price1,\r\n            Price2: oel.Price2,\r\n            Price3: oel.Price3,\r\n            Price4: oel.Price4,\r\n            Price5: oel.Price5,\r\n            Price6: oel.Price6,\r\n            Price7: oel.Price7,\r\n            Price8: oel.Price8,\r\n            Price9: oel.Price9,\r\n            Price10: oel.Price10,\r\n            FamilyID: oel.FamilyID,\r\n            CategoryID: oel.CategoryID,\r\n            Count: oel.Count * (oel.Amount < 0 ? -1 : 1),\r\n            OptionLine: oel.OptionLine,\r\n            Name: oel.Name,\r\n            Note: oel.Note,\r\n            Option1: oel.Option1,\r\n            Option2: oel.Option2,\r\n            Option3: oel.Option3,\r\n            FinalTaxAmount: oel.Tax,\r\n            ProductID: oel.ProductID,\r\n            ProductShortDescription: oel.ProductShortDescription,\r\n            ProductType: <ProductType>oel.ProductType,\r\n            SaleType: <SaleType>oel.SaleType,\r\n            SerialNumber: oel.SerialNumber,\r\n            SKU: oel.Sku,\r\n            TaxRuleID: oel.TaxRuleID,\r\n            Tags: oel.Tags,\r\n            LoyaltyPointsEarning: oel.LoyaltyPointsEarning,\r\n            GiftCardCode: !oel.GiftCardCode ? null : oel.GiftCardCode,\r\n            GiftCardExpirationDate: !oel.GiftCardExpirationDate ? null : oel.GiftCardExpirationDate,\r\n            Discounts: oel.Discounts\r\n        });\r\n\r\n        if (oel.Taxes) {\r\n            el.EffectiveInclusiveTaxPercent = oel.Taxes.effectivePercentInclusive;\r\n            el.EffectiveExclusiveTaxPercent = oel.Taxes.effectivePercentExclusive;\r\n        }\r\n\r\n        if (oel.CustomDiscountType)\r\n            el.CustomDiscountType = oel.CustomDiscountType;\r\n\r\n        if (oel.ExtraInfo)\r\n            el.ExtraInfo = oel.ExtraInfo;\r\n\r\n        if (oel.SeparatedItemID)\r\n            el.SeparatedItemID = oel.SeparatedItemID;\r\n\r\n        if (oel.ComplexSeparatedItemID)\r\n            el.ComplexSeparatedItemID = oel.ComplexSeparatedItemID;\r\n\r\n        if (oel.deals && oel.deals.length > 0) {\r\n            el.Deals = angular.copy(oel.deals);\r\n            if (el.Deals) {\r\n                el.Deals.forEach(d => {\r\n                    d.applyPriority = (<any>d).applyProirity;\r\n                    delete (<any>d).applyProirity;\r\n                    delete d.itemsToSeparate;\r\n                })\r\n            }\r\n        } else el.Deals = [];\r\n\r\n        return el;\r\n    }\r\n\r\n    private static setCheckoutsFromOldFormat(inputData: IInputData) {\r\n        const oldSale = inputData.oldSale;\r\n        const sale = inputData.sale;\r\n\r\n        if (oldSale.CheckoutItems) {\r\n            <Array<any>>(oldSale.CheckoutItems).forEach(oel => {\r\n                const el = ConverterService.convertFromOldCheckoutItem(oel);\r\n                sale.CheckoutItems.push(el);\r\n            });\r\n        }\r\n    }\r\n\r\n    private static setConversionData(inputData: IInputData) {\r\n        const cfg = inputData.convertData;\r\n        const sale = inputData.sale;\r\n        cfg.taxInclusive = sale.IsTaxInclusive; // should be set in sale controller\r\n        cfg.isStandaloneReturn = sale.StandAloneReturn === true; // standalone refund is special case\r\n        cfg.isStandaloneExchange = sale.StandAloneExchange === true; // standalone exchange is special case\r\n        cfg.taxPrecision = (ext.configService.taxCalculationMethod == 'Row Total' ? 2 : 4);\r\n    }\r\n\r\n    static convertSaleStatusToFinancialStatus(st: SaleStatusType) {\r\n        let res: FinancialStatusType;\r\n\r\n        switch (st) {\r\n            case SaleStatusType.Closed:\r\n                res = FinancialStatusType.Closed;\r\n                break;\r\n            case SaleStatusType.Layby:\r\n                res = FinancialStatusType.Layby;\r\n                break;\r\n            case SaleStatusType.LaybyClosed:\r\n                res = FinancialStatusType.LaybyClosed;\r\n                break;\r\n            case SaleStatusType.OnAccount:\r\n                res = FinancialStatusType.OnAccount;\r\n                break;\r\n            case SaleStatusType.OnAccountClosed:\r\n                res = FinancialStatusType.OnAccountClosed;\r\n                break;\r\n            case SaleStatusType.Parked:\r\n                res = FinancialStatusType.Parked;\r\n                break;\r\n            default:\r\n                throw new TypeError('Sale status cannot be converted to financial status!');\r\n        }\r\n\r\n        return res;\r\n    }\r\n\r\n    private static filterPayments(currentSaleObject: IAPISale) {\r\n        currentSaleObject.Payments = currentSaleObject.Payments.filter(el => el.ShortName !== 'Discount');\r\n    }\r\n\r\n    // Return real sale status\r\n    private static setFinancialStatus(inputData: IInputData) {\r\n        const cfg = inputData.convertData;\r\n        const sale = inputData.sale;\r\n        let retStatus = this.convertSaleStatusToFinancialStatus(cfg.status);\r\n\r\n        if (cfg.status === SaleStatusType.Closed) {\r\n            if (sale.OrderType === FinancialStatusType.OnAccount) {\r\n                if (cfg.isPartiallyPaid) {\r\n                    retStatus = FinancialStatusType.OnAccount;\r\n                } else {\r\n                    retStatus = FinancialStatusType.OnAccountClosed;\r\n                }\r\n            }\r\n\r\n            if (sale.OrderType === SaleStatusType.Layby) {\r\n                if (cfg.isPartiallyPaid) {\r\n                    retStatus = FinancialStatusType.Layby;\r\n                } else {\r\n                    retStatus = FinancialStatusType.LaybyClosed;\r\n                }\r\n            }\r\n        }\r\n\r\n        cfg.finStatus = retStatus;\r\n    }\r\n\r\n    private static setConsolidationFlag(cfg: IAPIConvertConfig) {\r\n        let doNotConsolidate = false;\r\n\r\n        switch (cfg.finStatus) {\r\n            case FinancialStatusType.Layby:\r\n            case FinancialStatusType.LaybyClosed:\r\n            case FinancialStatusType.OnAccount:\r\n            case FinancialStatusType.OnAccountClosed:\r\n                doNotConsolidate = true;\r\n                break;\r\n        }\r\n\r\n        if (cfg.isStandaloneReturn)\r\n            doNotConsolidate = true;\r\n\r\n        cfg.doNotConsolidate = doNotConsolidate;\r\n    }\r\n\r\n    private static getOrderNumber(sale: ISale): string {\r\n        if ((sale.IsParked === true || sale.IsFromDearSale) && sale.OrderNumber) {\r\n            return sale.OrderNumber;\r\n        }\r\n        const prefix = ext.configService.registryPrefix || '';\r\n        const suffix = ext.configService.registrySuffix || '';\r\n        const clearOrderNumber = (sale.ClearOrderNumber && String(sale.ClearOrderNumber).trim()) || '000000';\r\n        return `${prefix}${clearOrderNumber}${suffix}`;\r\n    }\r\n\r\n    // create partially filled API sale\r\n    private static createAPISale(inputData: IInputData): IAPISale {\r\n        const sale = inputData.sale;\r\n        const cfg = inputData.convertData;\r\n        const isParked = sale.IsParked === true;\r\n\r\n        // @ts-ignore TODO\r\n        const apiSale = <IAPISale>{\r\n            OrderID: sale.ID,\r\n            OperationID: !sale.OperationID ? ext.uuid2Service.newguid() : sale.OperationID,\r\n            Date: moment.utc(),\r\n            LaybyDate: sale.LaybyDate,\r\n            RegistryID: isParked ? sale.RegistryID : ext.configService.lastRegistryID,\r\n            Currency: ext.configService.currency,\r\n            TaxInclusive: sale.IsTaxInclusive,\r\n            DoNotConsolidate: cfg.doNotConsolidate,\r\n            FinancialStatus: cfg.finStatus,\r\n            SalesRepresentative: !sale.SalesRepresentative ? '' : sale.SalesRepresentative.Name,\r\n            UserName: isParked ? sale.UserName || '' : ext.configService.userName,\r\n            CustomerID: !sale.Customer ? null : sale.Customer.ID,\r\n            CustomerName: !sale.Customer ? '' : sale.Customer.Name,\r\n            Lines: new Array<IAPIProduct>(),\r\n            Payments: new Array<IAPIPayment>(),\r\n            Surcharges: new Array<IAPISurcharge>(),\r\n            OrderNumber: this.getOrderNumber(sale),\r\n            ClearOrderNumber: !sale.ClearOrderNumber ? '000000' : sale.ClearOrderNumber,\r\n            CustomerNote: !sale.Comment ? '' : sale.Comment,\r\n            Total: sale.Total, // should be number, not string\r\n            RegistryCloseID: ext.configService.registrySalesID,\r\n            SequenceGeneration: 'client',\r\n            standaloneRefund: cfg.isStandaloneReturn,\r\n            standaloneExchange: cfg.isStandaloneExchange,\r\n            ParentOrderID: sale.ParentOrderID,\r\n            LoyaltyUpdate: null,// lets controller to determine itself the loyalty update. sale.calculateTotalLoyalty()\r\n            IsFromDearSale: sale.IsFromDearSale,\r\n            CustomerEmail: !sale.SelectedContact ? null : sale.SelectedContact.Email,\r\n            CustomerMobilePhone: !sale.SelectedContact ? null : sale.SelectedContact.MobilePhone,\r\n            Discount: sale.DiscountValueRaw,\r\n            MarketingConsent: !sale.SelectedContact ? null : sale.SelectedContact.MarketingConsent,\r\n            CustomerContactID: !sale.SelectedContact ? null : sale.SelectedContact.ID,\r\n            CustomerShippingAddressLine1: sale.CustomerShippingAddressLine1 || '',\r\n            CustomerShippingAddressLine2: sale.CustomerShippingAddressLine2 || '',\r\n            CustomerShippingCity: sale.CustomerShippingCity || '',\r\n            CustomerShippingCountry: sale.CustomerShippingCountry || '',\r\n            CustomerShippingProvince: sale.CustomerShippingProvince || '',\r\n            CustomerShippingZip: sale.CustomerShippingZip || '',\r\n            UpdateReceiptView: false,\r\n            UpdateRegistrySequenceIfDuplicate: !isParked,\r\n            SendReceiptViaEmail: !sale.Customer ? null : sale.Customer.SendReceiptViaEmail,\r\n            OutletName: ext.configService.lastOutlet,\r\n            OutletID: ext.configService.lastECSMappingOutletID\r\n        };\r\n\r\n        return apiSale;\r\n    }\r\n\r\n    private static checkNFillStandaloneRefund(inputData: IInputData, currentSaleObject: IAPISale) {\r\n        const cfg = inputData.convertData;\r\n        const sale = inputData.sale;\r\n        if (cfg.isStandaloneReturn) {\r\n            currentSaleObject.OrderNumber = sale.ClearOrderNumber;\r\n            currentSaleObject.ClearOrderNumber = sale.ClearOrderNumber;\r\n            currentSaleObject.AdjustRefunds = !sale.AdjustRefunds ? false : true;\r\n            var line = <IAPIProduct>{\r\n                ProductID: null,\r\n                ProductName: 'Standalone Refund',\r\n                SKU: 'Standalone Refund',\r\n                Quantity: 1,\r\n                Price: 0,\r\n                TotalPerLine: 0,\r\n                Tax: 0,\r\n                TaxRuleID: null,\r\n                CalculateTax: false,\r\n                ImageID: null,\r\n                ProductType: null\r\n            };\r\n\r\n            currentSaleObject.Lines.push(line);\r\n        }\r\n\r\n    }\r\n\r\n    private static setSaleCheckoutItems(inputData: IInputData, currentSaleObject: IAPISale) {\r\n        const sale = inputData.sale;\r\n        const cfg = inputData.convertData;\r\n\r\n        if (sale.ReturnID || sale.StandAloneReturn === true) return; // we do not process refunds here\r\n\r\n        this.setCheckoutItems(cfg, sale.CheckoutItems, currentSaleObject.Lines, false);\r\n    }\r\n\r\n    private static setRefundCheckoutItems(inputData: IInputData, refund: IAPIRefund) {\r\n        const sale = inputData.sale;\r\n        const cfg = inputData.convertData;\r\n\r\n        this.setCheckoutItems(cfg, sale.CheckoutItems, refund.Lines, true);\r\n    }\r\n\r\n    private static setCheckoutItems(cfg: IAPIConvertConfig, items: Array<ICheckoutItem>, linesContainer: Array<IAPIProduct>, isRefund: boolean) {\r\n\r\n        items.forEach(el => {\r\n            const line = <IAPIProduct>{\r\n                ProductID: el.SaleType === SaleType.CustomSale ? null : el.ProductID,\r\n                Quantity: ext.helperService.DEARRound(isRefund === true ? -1 * el.Count : el.Count, 4),\r\n                Discount: isRefund ? -el.ItemDiscount : el.ItemDiscount,\r\n                // OverriddenPrice: null, // try to escape from this price.\r\n                Price: ext.helperService.DEARRound(Math.abs(el.FinalPrice), 4),\r\n                //                    TotalPerLine: ext.helperService.DEARRound(isRefund === true ? -1 * el.FinalAmount : el.FinalAmount, cfg.taxPrecision),\r\n                TotalPerLine: ext.helperService.DEARRound(Math.abs(el.FinalAmount), cfg.taxPrecision), // Cin7 Core sim accepts only positive amount always\r\n                //                Tax: ext.helperService.DEARRound(isRefund === true ? -1 * el.FinalTaxAmount : el.FinalTaxAmount, cfg.taxPrecision),\r\n                Tax: ext.helperService.DEARRound(Math.abs(el.FinalTaxAmount), cfg.taxPrecision),\r\n                TaxRuleID: el.TaxRuleID,\r\n                CalculateTax: false,\r\n                ImageID: el.ImageID,\r\n                ProductType: el.ProductType,\r\n                SerialNumber: el.SerialNumber,\r\n                MissingInInvoice: el.MissingInInvoice\r\n            };\r\n\r\n            if (el.SaleType === SaleType.CustomSale) line.ProductName = el.Name;\r\n            if (el.GiftCardCode) line.GiftCardCode = el.GiftCardCode;\r\n\r\n            if (el.GiftCardExpirationDate)\r\n                line.GiftCardExpirationDate = ext.helperService.toDateFromDatepickerParameter(el.GiftCardExpirationDate);\r\n\r\n            linesContainer.push(line);\r\n        });\r\n    }\r\n\r\n    private static setSurcharges(payments: Array<IPayment>, surcharges: Array<IAPISurcharge>, changeSign?: boolean) {\r\n\r\n        if (payments) {\r\n            payments.forEach(payment => {\r\n                if (payment.Surcharge) {\r\n                    const srch = payment.Surcharge;\r\n                    const line = <IAPISurcharge>{\r\n                        Total: srch.CalculatedValue * (changeSign === true ? -1 : 1),\r\n                        Tax: srch.Tax * (changeSign === true ? -1 : 1),\r\n                        Name: srch.Name,\r\n                        Type: srch.Type,\r\n                        Value: srch.Value,\r\n                        SurchargeID: srch.SurchargeID,\r\n                        TaxRuleID: srch.TaxRuleID,\r\n                        PaymentRealAmount: srch.CalculatedValueWithTax * (changeSign === true ? -1 : 1),\r\n                        RefundSurcharge: srch.RefundSurcharge,\r\n                        PaymentID: payment.ID\r\n                    };\r\n\r\n                    if (srch.PaymentShortName)\r\n                        line.PaymentShortName = srch.PaymentShortName;\r\n\r\n                    surcharges.push(line);\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    private static setSaleDiscount(inputData: IInputData, currentSaleObject: IAPISale) {\r\n        const sale = inputData.sale;\r\n\r\n        if (sale.DiscountValue) {\r\n            var discountPaymentLine = <IAPIPayment>{\r\n                ID: ext.uuid2Service.newguid(),\r\n                PaymentProcessorID: null,\r\n                Amount: sale.DiscountValue,\r\n                Date: moment.utc(),\r\n                ShortName: \"Discount\"\r\n            };\r\n            currentSaleObject.Payments.push(discountPaymentLine);\r\n        }\r\n    }\r\n\r\n    private static setSalePayments(inputData: IInputData, currentSaleObject: IAPISale) {\r\n        const sale = inputData.sale;\r\n\r\n        if (!sale.ReturnID) {\r\n            sale.Payments.forEach(el => {\r\n                if (el.Amount >= 0 || (el.ShortName === PaymentShortNameStandardType.Rounding && el.Amount != 0)) {\r\n                    var p = <IAPIPayment>{\r\n                        ID: el.ID,\r\n                        PaymentProcessorID: el.PaymentProcessorID,\r\n                        Amount: el.Amount,\r\n                        Date: el.Date,\r\n                        ShortName: el.ShortName,\r\n                        Loyalty: (sale.Customer && sale.Customer.ID) ? el.Loyalty : 0,\r\n                        Reference: el.Reference\r\n                    };\r\n\r\n                    if (el.ClientTransactionID)\r\n                        p.ClientTransactionID = el.ClientTransactionID;\r\n\r\n                    if (el.ServerTransactionID) {\r\n                        p.ServerTransactionID = el.ServerTransactionID;\r\n                        p.ClientTransactionID = !p.ClientTransactionID ? null : p.ClientTransactionID;\r\n                    }\r\n\r\n                    if (el.SaleServerTransactionID)\r\n                        p.SaleServerTransactionID = el.SaleServerTransactionID;\r\n\r\n                    if (el.TransactionMetaData)\r\n                        p.TransactionMetaData = el.TransactionMetaData;\r\n\r\n                    if (el.GiftCardID) p.GiftCardID = el.GiftCardID;\r\n\r\n                    currentSaleObject.Payments.push(p);\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    private static setRefundPayments(inputData: IInputData, refund: IAPIRefund) {\r\n        const sale = inputData.sale;\r\n\r\n        sale.Payments.forEach(el => {\r\n            var p = <IAPIPayment>{\r\n                ID: el.ID,\r\n                PaymentProcessorID: el.PaymentProcessorID,\r\n                Amount: el.ShortName === 'Discount' ? Math.abs(el.Amount) : el.Amount * -1,\r\n                Loyalty: Math.abs(el.Loyalty),\r\n                Date: el.Date,\r\n                ShortName: el.ShortName,\r\n                Reference: el.Reference\r\n            };\r\n\r\n            if (el.ClientTransactionID)\r\n                p.ClientTransactionID = el.ClientTransactionID;\r\n\r\n            if (el.ServerTransactionID) {\r\n                p.ServerTransactionID = el.ServerTransactionID;\r\n                p.ClientTransactionID = !p.ClientTransactionID ? null : p.ClientTransactionID;\r\n            }\r\n\r\n            if (el.SaleServerTransactionID)\r\n                p.SaleServerTransactionID = el.SaleServerTransactionID;\r\n\r\n            if (el.TransactionMetaData)\r\n                p.TransactionMetaData = el.TransactionMetaData;\r\n\r\n            if (el.GiftCardID) p.GiftCardID = el.GiftCardID;\r\n\r\n            refund.Payments.push(p);\r\n        });\r\n    }\r\n\r\n    private static setRounding(inputData: IInputData, payments: Array<IAPIPayment>, changeSign?: boolean) {\r\n        // check and remove zero rounding\r\n        payments = Enumerable.from(payments)\r\n            .where(p => p.ShortName !== PaymentShortNameStandardType.Rounding)\r\n            .select(p => p).toArray();\r\n\r\n        // commented as rounding is already in payments only\r\n        //const sale = inputData.sale;\r\n\r\n        //if (!sale.ReturnID) {\r\n        //    sale.Payments.forEach(el => {\r\n        //        if (el.ShortName === 'Rounding') {\r\n        //            var roundingPaymentLine = <IAPIPayment>{\r\n        //                ID: el.ID,\r\n        //                Amount: changeSign !== true ? el.Amount : (el.Amount* -1),\r\n        //                Date: el.Date,\r\n        //                ShortName: el.ShortName,\r\n        //                Loyalty: 0\r\n        //            };\r\n        //            payments.push(roundingPaymentLine);\r\n        //        }\r\n        //    });\r\n        //}\r\n    }\r\n\r\n    private static setRefundSale(inputData: IInputData, currentSaleObject: IAPISale): IAPIRefund {\r\n        const sale = inputData.sale;\r\n        const cfg = inputData.convertData;\r\n\r\n        currentSaleObject.RefundForOrderID = sale.ID;\r\n        currentSaleObject.FinancialStatus = FinancialStatusType.Returned;\r\n        currentSaleObject.OperationID = ext.uuid2Service.newguid();\r\n\r\n        if (cfg.isContinue !== true) {\r\n            // orderid below will be used as posorderid as well\r\n            currentSaleObject.OrderID = sale.NewRefundOrder ? sale.NewRefundOrder : ext.uuid2Service.newguid();\r\n        }\r\n        else {\r\n            const order = !sale.PosOrderID ? sale.NewRefundOrder : sale.PosOrderID;\r\n\r\n            currentSaleObject.OrderID = order; // in the case of refund continue set order id as pos order id\r\n            if (cfg.isStandaloneReturn)\r\n                currentSaleObject.RefundForOrderID = order;\r\n        }\r\n\r\n        let existRefund = sale.Refunds && sale.Refunds.length > 0 ? sale.Refunds[0].RefundID : null;\r\n        if (!existRefund) {\r\n            if (sale.IsExchange === true || sale.IsRefund === true)\r\n                existRefund = sale.ReturnID;\r\n        }\r\n\r\n        var refundID = (sale.IsFirstRefundDone === true || cfg.isContinue === true) && existRefund ? existRefund :\r\n            (!cfg.newGuidValue ? ext.uuid2Service.newguid() :\r\n                cfg.newGuidValue);\r\n\r\n        if (cfg.isContinue !== true)\r\n            sale.ReturnID = refundID;\r\n\r\n        const refund = <IAPIRefund>{\r\n            RefundID: refundID,\r\n            Date: moment.utc(),\r\n            Note: sale.Comment,\r\n            Lines: new Array<IAPIProduct>(),\r\n            Payments: new Array<IAPIPayment>(),\r\n            Surcharges: new Array<IAPISurcharge>()\r\n        };\r\n\r\n        if (cfg.isStandaloneReturn) {\r\n            refund.Note = 'Refund without receipt.';\r\n        }\r\n\r\n        if (cfg.isStandaloneExchange) {\r\n            refund.Note = 'Exchange without receipt.';\r\n        }\r\n\r\n        // this is to not duplicate refunds on next payment refund operation\r\n        //if (cfg.isContinue !== true || !sale.refunds || sale.refunds.length == 0) {\r\n        //    sale.refunds = [<IAPIRefund>{\r\n        //        RefundID: refund.RefundID\r\n        //    }]; // fake record\r\n        //}\r\n        currentSaleObject.Refunds = [refund];\r\n        sale.IsFirstRefundDone = true;\r\n\r\n        return refund;\r\n    }\r\n}\r\n\r\n// helper function for js\r\n// checks before that new sale mode is enabled. If not - return sale as is\r\n// if new mode is enabled, call converter that checks is sale is already correctly\r\n// converted. If not - convert, or fix\r\nexport function convertFromOld(oldSale: any, isTaxInclusive?: boolean): ISale {\r\n    // if string is on input, convert it into object\r\n    if (!oldSale) return oldSale;\r\n    if (typeof (oldSale) === 'string')\r\n        oldSale = JSON.parse(oldSale);\r\n\r\n    const canUseNewSales = CalculatorHelperService.useNewCalculation(oldSale);\r\n    if (!canUseNewSales) return oldSale;\r\n\r\n    const res = ConverterService.convertFromOld(<IInputData>{\r\n        oldSale: oldSale,\r\n        convertData: <IAPIConvertConfig>{\r\n            taxInclusive: isTaxInclusive\r\n        }\r\n    });\r\n\r\n    // res.NewRefundOrder = null; // to prevent use stored guid as newely generated\r\n\r\n    return res;\r\n}\r\n\r\nexport function restoreTransactionMetadata(sale: ISale, nativeSale: ISale) {\r\n    if (!sale || !nativeSale) return;\r\n    const map = new Map<string, IPayment>();\r\n    if (nativeSale.Payments)\r\n        nativeSale.Payments.forEach(p => map.set(p.ID, p));\r\n    if (nativeSale.ReturnPayments)\r\n        nativeSale.ReturnPayments.forEach(p => map.set(p.ID, p));\r\n\r\n    if (sale.Payments)\r\n        sale.Payments.forEach(p => {\r\n            if (map.has(p.ID)) {\r\n                const np = map.get(p.ID);\r\n                if (np.TransactionMetaData && !p.TransactionMetaData)\r\n                    p.TransactionMetaData = np.TransactionMetaData;\r\n            }\r\n        });\r\n\r\n    if (sale.Refunds)\r\n        sale.Refunds.forEach(r => {\r\n            if ((<IAPIRefund>r).Payments)\r\n                (<IAPIRefund>r).Payments.forEach(p => {\r\n                    if (map.has(p.ID)) {\r\n                        const np = map.get(p.ID);\r\n                        if (np.TransactionMetaData && !p.TransactionMetaData)\r\n                            p.TransactionMetaData = np.TransactionMetaData;\r\n                    }\r\n                })\r\n        });\r\n}\r\n\r\nexport function convertToAPI(sale: ISale, status: SaleStatusType, isContinue: boolean, newGuidValue?: string, isPartiallyPaid?: boolean): IAPISale {\r\n    sale = convertFromOld(sale);\r\n\r\n    return ConverterService.convertToAPI(<IInputData>{\r\n        sale: sale,\r\n        convertData: <IAPIConvertConfig>{\r\n            status: status,\r\n            isContinue: !isContinue ? false : true,\r\n            newGuidValue: newGuidValue,\r\n            isPartiallyPaid: !isPartiallyPaid ? false : true\r\n        }\r\n    });\r\n}\r\n\r\nexport function convertFromAPI(oldSale: any): ISale {\r\n    return ConverterService.convertAPIToSale(<IInputData>{\r\n        oldSale: oldSale,\r\n        convertData: <IAPIConvertConfig>{}\r\n    });\r\n}\r\n// remove all temporary properties from payload. Also remove payload from payload to reduce object and remove mess\r\n//function preparePayloadForSave(sale: ISale) {\r\n//    return ConverterService.preparePayloadForSave(sale);\r\n//}","export enum DeliverySourceType {\r\n    POS = 'POS'\r\n}\r\n\r\nexport class DayGap {\r\n    startTime: number; // in mins\r\n    endTime: number; // in mins\r\n\r\n    constructor(start: number, end: number) {\r\n        this.startTime = start;\r\n        this.endTime = end;\r\n    }\r\n\r\n    isInGap(tm: number) {\r\n        return tm >= this.startTime && tm <= this.endTime;\r\n    }\r\n}\r\n\r\nexport class DeliveryContact {\r\n    ContactID: string;\r\n    Name: string;\r\n    Email: string;\r\n    Phone: string;\r\n    MobilePhone: string;\r\n}\r\n\r\nexport class DeliveryAddress {\r\n    AddressID: string;\r\n    Line1: string;\r\n    Line2: string;\r\n    CitySuburb: string;\r\n    StateProvince: string;\r\n    ZipPostCode: string;\r\n    Country: string;\r\n}\r\n\r\nexport class DeliveryItem {\r\n    DeliveryItemID: string;\r\n    TaskID?: string;\r\n    TaskStatus?: string;\r\n    DeliveryNumber?: string;\r\n    ProductID: string;\r\n    ProductName: string;\r\n    ProductCode: string;\r\n    Quantity: number;\r\n    DeliveryDateStr?: string; // this is real datetime to pass in/out\r\n    DeliveryTime?: number;\r\n    DeliveryTimeDisplay?: string;\r\n    DeliveryDate?: string;\r\n\r\n    splitDateTime() {\r\n        if (!this.DeliveryDateStr) {\r\n            this.DeliveryDate = null;\r\n            this.DeliveryTime = null;\r\n            this.DeliveryTimeDisplay = null;\r\n        } else {\r\n            const rtm = ext.helperService.getFormatedLocalDateTime(this.DeliveryDateStr);\r\n            this.DeliveryDate = rtm.date;\r\n            this.DeliveryTime = rtm.time;\r\n            this.DeliveryTimeDisplay = ext.helperService.formatTime(rtm.time);\r\n        }\r\n    }\r\n}\r\n\r\nexport class Delivery {\r\n    DeliveryID: string;\r\n    CustomerID: string;\r\n    CustomerName: string;\r\n    ConfigurationID: string; // POS ID\r\n    LocationID?: string; // Sale outlet location ID\r\n    ECSMappingOutletID?: string; // Sale outlet mapping ID\r\n    OrderID: string;    // POS order ID\r\n    OrderNumber?: string; // POS order  number\r\n    DeliverySource: string; // source of this delivery (POS, WMS, Cin7 Core)\r\n    ContactDetails: DeliveryContact;\r\n    ShipAddressDetails: DeliveryAddress;\r\n    DeliveryItems: Array<DeliveryItem>;\r\n    IsNew: boolean;\r\n    DeliveryInterval: number;\r\n\r\n    constructor() {\r\n        this.DeliveryItems = new Array<DeliveryItem>();\r\n        this.IsNew = true;\r\n        this.DeliverySource = DeliverySourceType.POS;\r\n        this.ContactDetails = new DeliveryContact();\r\n        this.ShipAddressDetails = new DeliveryAddress();\r\n        this.DeliveryInterval = ext.configService.deliveryTimeInterval;\r\n    }\r\n}","import Enumerable from \"linq\";\r\nimport { ISale } from \"../Interfaces\";\r\nimport { IAngularStatic } from 'angular';\r\nimport { DayGap, Delivery, DeliveryAddress, DeliveryContact, DeliveryItem } from './Delivery';\r\nimport { ProductionCalendar, ProductionCalendarDay, ProductionCalendarSpecialDay } from './ProductionCalendar';\r\nimport { DeliveryListItem, DeliveryListResult } from './DeliveryList';\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport class DeliveryHelper {\r\n    currentDelivery: Delivery = null;\r\n    calendarMap: Map<number, ProductionCalendar> = null;\r\n    availableDeliveryItems = new Array<DeliveryItem>();\r\n    dayMap: Map<string, Array<DeliveryListItem>> = null;\r\n\r\n    constructor() {\r\n        this.calendarMap = new Map<number, ProductionCalendar>();\r\n    }\r\n\r\n    public static CreateDeliveryHelper() {\r\n        return new DeliveryHelper();\r\n    }\r\n\r\n    public CreateDeliveryObject(obj: Delivery): Delivery { // in reality input object is not real Delivery instance. It's used only as interface\r\n        const delivery = new Delivery();\r\n\r\n        if (obj)\r\n            Object.assign(delivery, obj);\r\n\r\n        if (obj.ContactDetails) {\r\n            const dc = new DeliveryContact();\r\n            Object.assign(dc, obj.ContactDetails);\r\n            delivery.ContactDetails = dc;\r\n        }\r\n\r\n        if (obj.ShipAddressDetails) {\r\n            const ds = new DeliveryAddress();\r\n            Object.assign(ds, obj.ShipAddressDetails);\r\n            delivery.ShipAddressDetails = ds;\r\n        }\r\n\r\n        if (obj.DeliveryItems) {\r\n            delivery.DeliveryItems = new Array<DeliveryItem>();\r\n            obj.DeliveryItems.forEach(item => {\r\n                const di = this.CreateDeliveryItemObject(item);\r\n                delivery.DeliveryItems.push(di);\r\n            });\r\n        }\r\n\r\n        delivery.DeliveryItems = delivery.DeliveryItems.sort((a, b) => {\r\n            if (a.DeliveryDate && !b.DeliveryDate) return -1;\r\n            if (!a.DeliveryDate && b.DeliveryDate) return 1;\r\n            if (!a.DeliveryDate && !b.DeliveryDate) {\r\n                return 0;\r\n            }\r\n\r\n            const dc = a.DeliveryDate.localeCompare(b.DeliveryDate);\r\n\r\n            if (dc === 0) {\r\n                const dc2 = a.DeliveryTime < b.DeliveryTime ? -1 : a.DeliveryTime > b.DeliveryTime ? 1 : 0;\r\n\r\n                if (dc2 === 0)\r\n                    return a.DeliveryNumber.localeCompare(b.DeliveryNumber);\r\n                else return dc2;\r\n            }\r\n\r\n            return dc;\r\n        });\r\n\r\n        this.currentDelivery = delivery;\r\n        return delivery;\r\n    }\r\n\r\n    public CreateDeliveryItemObject(item: DeliveryItem): DeliveryItem {\r\n        const di = new DeliveryItem();\r\n        Object.assign(di, item);\r\n        // shift datetime to local datetime and split\r\n        di.splitDateTime();\r\n        return di;\r\n    }\r\n\r\n    public ModifyCalendarObjectMap(lst: Array<ProductionCalendar>) {\r\n        const { calendarMap } = this;\r\n\r\n        // lst - does not have real calendar objects - it's interfaces\r\n        if (lst) {\r\n            lst.forEach(l => calendarMap.set(l.Year, l));\r\n        }\r\n\r\n        return calendarMap;\r\n    }\r\n\r\n    public CreateCalendarObject(obj: ProductionCalendar): ProductionCalendar {\r\n        const calendar = new ProductionCalendar();\r\n        Object.assign(calendar, obj);\r\n\r\n        calendar.vProductionCalendarDays = new Array<ProductionCalendarDay>();\r\n        if (obj.vProductionCalendarDays) {\r\n            obj.vProductionCalendarDays.forEach(day => {\r\n                const proDay = new ProductionCalendarDay();\r\n                Object.assign(proDay, day);\r\n                calendar.vProductionCalendarDays.push(proDay);\r\n            });\r\n        }\r\n\r\n        calendar.vProductionCalendarSpecialDays = new Array<ProductionCalendarSpecialDay>();\r\n        if (obj.vProductionCalendarSpecialDays) {\r\n            obj.vProductionCalendarSpecialDays.forEach(day => {\r\n                const proDay = new ProductionCalendarSpecialDay();\r\n                Object.assign(proDay, day);\r\n                calendar.vProductionCalendarSpecialDays.push(proDay);\r\n            });\r\n        }\r\n\r\n        return calendar;\r\n    }\r\n\r\n    async loadDeliveryByDeliveryID(deliveryID: string) {\r\n        const res = await ext.webOnlyProvider.loadDelivery({\r\n            objectID: deliveryID,\r\n            objectType: 'DeliveryID'\r\n        });\r\n\r\n        return this.CreateDeliveryObject(res.data as Delivery);\r\n    }\r\n\r\n    async loadDeliveryBySaleOrder(sale: ISale) {\r\n        const res = await ext.webOnlyProvider.loadDelivery({\r\n            objectID: sale.ID,\r\n            objectType: 'POSOrderID'\r\n        });\r\n\r\n        if (!res.data) { // there is no delivery yet\r\n            res.data = {\r\n                ConfigurationID: ext.configService.applicationID,\r\n                ECSMappingOutletID: ext.configService.lastECSMappingOutletID,\r\n                OrderID: sale.ID,\r\n                OrderNumber: sale.OrderNumber\r\n            };\r\n\r\n            res.data.DeliveryItems = await this.LoadProductsAvailableForDeliveryBySale(sale);\r\n            res.data.IsNew = true;\r\n        } else {\r\n            res.data.IsNew = false;\r\n            // add product lines that are not in delivery, i.e. they were removed before\r\n            const availableItems = await this.LoadProductsAvailableForDeliveryBySale(sale);\r\n\r\n            const map = new Map<string, any>();\r\n\r\n            res.data.DeliveryItems.forEach(di => map.set(di.ProductID, di));\r\n\r\n            availableItems.forEach(ai => {\r\n                if (!map.has(ai.ProductID)) {\r\n                    res.data.DeliveryItems.push(ai);\r\n                }\r\n            });\r\n        }\r\n\r\n        const delivery = this.CreateDeliveryObject(res.data as Delivery);\r\n        await this.CheckAndLoadCalendars(delivery);\r\n\r\n        return delivery;\r\n    }\r\n\r\n    async loadDeliveries(page: number, limit: number, filters: any) {\r\n        const flt = angular.copy(filters);\r\n        flt.fromDate = ext.helperService.toDateFromDatepickerParameter(flt.fromDate);\r\n        flt.toDate = ext.helperService.toDateFromDatepickerParameter(flt.toDate);\r\n\r\n        const res = await ext.webOnlyProvider.loadDeliveries(angular.extend(flt, {\r\n            limit: limit ? limit : null,\r\n            page: page ? page : 0\r\n        }));\r\n\r\n        return res.data as DeliveryListResult;\r\n    };\r\n\r\n    async printDeliveries(filters: any) {\r\n        const flt = angular.copy(filters);\r\n        flt.fromDate = ext.helperService.toDateFromDatepickerParameter(flt.fromDate);\r\n        flt.toDate = ext.helperService.toDateFromDatepickerParameter(flt.toDate);\r\n        // flt.toDate = flt.fromDate;\r\n\r\n        const res = await ext.webOnlyProvider.loadDeliveries(angular.extend(flt, {\r\n            templateID: ext.configService.deliveryTemplateID\r\n        }));\r\n\r\n        return res.data as string;\r\n    }\r\n\r\n    async loadDeliveryCalendars(years: Array<number>) {\r\n        const res = await ext.webOnlyProvider.loadCalendars(years);\r\n        return res.data as Array<ProductionCalendar>;\r\n    };\r\n\r\n    async CheckAndLoadCalendars(delivery: Delivery) {\r\n        // get all years used\r\n        const res = new Array<ProductionCalendar>();\r\n\r\n        let yearsLst = new Array();\r\n\r\n        const curYear = new Date().getFullYear();\r\n        yearsLst = [curYear - 1, curYear, curYear + 1];\r\n\r\n        const yearsRes = await this.loadDeliveryCalendars(yearsLst);\r\n        yearsRes.forEach(y => res.push(this.CreateCalendarObject(y)));\r\n        this.ModifyCalendarObjectMap(res);\r\n    }\r\n\r\n    async LoadProductsAvailableForDeliveryBySale(sale: ISale) {\r\n        return this.LoadProductsAvailableForDelivery(sale.ID);\r\n    }\r\n\r\n    async LoadProductsAvailableForDelivery(posOrderID: string) {\r\n        const res = new Array<DeliveryItem>();\r\n\r\n        const lst = await ext.webOnlyProvider.loadProductsAvailableForDelivery(posOrderID);\r\n        lst.data.forEach(p => res.push(this.CreateDeliveryItemObject(p)));\r\n\r\n        this.availableDeliveryItems = res;\r\n        return res;\r\n    }\r\n\r\n    async SaveDelivery() {\r\n        if (this.currentDelivery.IsNew)\r\n            await ext.webOnlyProvider.CreateDelivery(this.currentDelivery.DeliveryID, this.currentDelivery);\r\n        else\r\n            await ext.webOnlyProvider.UpdateDelivery(this.currentDelivery.DeliveryID, this.currentDelivery);\r\n    }\r\n\r\n    async UpdateDeliveryTaskStatus(taskID: string, locationID: string, status: string) {\r\n        await ext.webOnlyProvider.UpdateDeliveryTaskStatus(taskID, locationID, status);\r\n    }\r\n\r\n    pushGap(dayWorkGaps: Array<DayGap>, day: ProductionCalendarDay) {\r\n        if (day.BreakStartTime && day.BreakEndTime) {\r\n            dayWorkGaps.push(new DayGap(day.StartTime, day.BreakStartTime - 1)); // to exclude lunch\r\n            dayWorkGaps.push(new DayGap(day.BreakEndTime + 1, day.EndTime)); // +1 to exclude lunch end time\r\n        } else {\r\n            dayWorkGaps.push(new DayGap(day.StartTime, day.EndTime));\r\n        }\r\n    }\r\n\r\n    getStartTime(gaps: Array<DayGap>) {\r\n        let start = 24 * 60;\r\n        gaps.forEach((g) => start = Math.min(start, g.startTime));\r\n        return start;\r\n    }\r\n\r\n    generateTime(dtStr) {\r\n        let dayWorkGaps = new Array<DayGap>(); // intervals where delivery is disabled\r\n\r\n        if (dtStr) {\r\n            const dt = ext.helperService.convertToDateFromDatepicker(dtStr);\r\n            const dtNoZone = ext.helperService.toDateFromDatepickerDirectNoZone(dtStr);\r\n            const year = dt.year();\r\n            const month = dt.month() + 1;\r\n            const dayOfWeek = dt.isoWeekday(); // dt.day() + 1;\r\n            const calendar = this.calendarMap.get(year);\r\n\r\n            // fill day work gaps\r\n            if (calendar) {\r\n                const dspec = calendar.vProductionCalendarSpecialDays.filter(d => d.Date === dtNoZone);\r\n                if (dspec.length > 0) {\r\n                    if (!dspec[0].IsHoliday) {\r\n                        this.pushGap(dayWorkGaps, dspec[0]);\r\n                    }\r\n                } else {\r\n                    const dw = calendar.vProductionCalendarDays.filter(d => d.DayOfWeek === dayOfWeek);\r\n                    if (dw.length > 0) {\r\n                        this.pushGap(dayWorkGaps, dw[0]);\r\n                    }\r\n                }\r\n\r\n            } else dayWorkGaps = null;\r\n\r\n        }\r\n\r\n        let x = ext.configService.deliveryTimeInterval;\r\n        let times = [];\r\n\r\n        if (dayWorkGaps) {\r\n            const start = this.getStartTime(dayWorkGaps);\r\n            for (let tt = start; tt <= 24 * 60; tt += x) {\r\n                const flt = dayWorkGaps ? dayWorkGaps.filter(g => g.isInGap(tt)) : null;\r\n                if (flt == null || flt.length > 0) {\r\n                    times.push({\r\n                        display: ext.helperService.formatTime(tt),\r\n                        value: tt\r\n                    });\r\n                }\r\n            }\r\n        } else {\r\n            throw ext.gettextCatalog.getString(\"To setup time, please setup delivery calendar for current location.\");\r\n        }\r\n\r\n        return times;\r\n    };\r\n\r\n    getMinimalPendingDate() {\r\n\r\n        let d = Enumerable.from(this.currentDelivery.DeliveryItems)\r\n            .where(d => d.DeliveryDate && d.DeliveryTime && (!d.TaskStatus || d.TaskStatus == 'In progress'))\r\n            .select(d => ext.helperService.convertToDateFromDatepicker(d.DeliveryDate).toDate())\r\n            .orderBy(d => d)\r\n            .firstOrDefault();\r\n\r\n        if (!d) { // if there is no items in delivery, get current date\r\n            d = new Date();\r\n        }\r\n\r\n        return d;\r\n    }\r\n\r\n    async prepareCalendarData(items: Array<DeliveryListItem>) {\r\n        const data = Array<any>();\r\n        this.dayMap = new Map<string, Array<DeliveryListItem>>();\r\n\r\n        items.forEach(d => {\r\n            const rtm = ext.helperService.getFormatedLocalDateTime(d.StatusDate);\r\n            const date = rtm.date;\r\n            const time = ext.helperService.formatTime(rtm.time);\r\n            const time2 = ext.helperService.formatTime(rtm.time + ext.configService.deliveryTimeInterval);\r\n            const fromDate = ext.helperService.toDateFromDatepickerParameter(rtm.date, time + ':00', true);\r\n            const toDate = ext.helperService.toDateFromDatepickerParameter(rtm.date, time2 + ':00', true);\r\n\r\n            const ln = {\r\n                id: d.TaskID,\r\n                title: `${d.DeliveryTaskNumber} (${time})`,\r\n                start: fromDate,\r\n                end: toDate,\r\n                className: d.TaskStatus === 'In progress' ? 'task-in-progress' :\r\n                    d.TaskStatus === 'Completed' ? 'task-completed' :\r\n                        d.TaskStatus === 'Void' ? 'task-cancelled' : ''\r\n            };\r\n\r\n            data.push(ln);\r\n\r\n            let di = this.dayMap.get(date);\r\n            if (!di) {\r\n                di = new Array<DeliveryListItem>();\r\n                this.dayMap.set(date, di);\r\n            }\r\n\r\n            di.push(d);\r\n\r\n        });\r\n\r\n        // add background events to colorize day cells\r\n        Array.from(this.dayMap.keys()).forEach(k => {\r\n            const di = this.dayMap.get(k);\r\n            if (di && di.length > 0 && di[0].DayTasks >= ext.configService.deliveryNumberPerDay) {\r\n                data.push({\r\n                    start: ext.helperService.convertToDateFromDatepicker(k).toDate(),\r\n                    allDay: true,\r\n                    className: 'delivery-no-more-room',\r\n                    display: 'background'\r\n                });\r\n            }\r\n            //  else if (di.filter(d => d.TaskStatus === 'In progress').length > 0) {\r\n            //     data.push({\r\n            //         start: ext.helperService.convertToDateFromDatepicker(k).toDate(),\r\n            //         allDay: true,\r\n            //         className: 'delivery-has-in-progress',\r\n            //         display: 'background'\r\n            //     });\r\n            // }\r\n        });\r\n\r\n        return data;\r\n    }\r\n}","export class ProductionCalendarDay {\r\n    DayID: string;\r\n    DayOfWeek: number;\r\n    IsWeekend: boolean;\r\n    StartTime: number;\r\n    EndTime: number;\r\n    BreakStartTime?: number;\r\n    BreakEndTime?: number;\r\n}\r\n\r\nexport class ProductionCalendarSpecialDay extends ProductionCalendarDay {\r\n    Date: string;\r\n    IsHoliday: boolean;\r\n    Comment?: string;\r\n}\r\n\r\nexport class ProductionCalendar {\r\n    CalendarID: string;\r\n    Year: number;\r\n    WeekStart: number;\r\n    vProductionCalendarDays: Array<ProductionCalendarDay>;\r\n    vProductionCalendarSpecialDays: Array<ProductionCalendarSpecialDay>;\r\n\r\n    constructor() {\r\n        this.vProductionCalendarDays = new Array<ProductionCalendarDay>();\r\n        this.vProductionCalendarSpecialDays = new Array<ProductionCalendarSpecialDay>();\r\n    }\r\n}","\r\n// defines calculation types. In each case only partial calculators that defines itself for target type will be executed\r\nexport enum CalculationType {\r\n    Checkout,\r\n    Payments,\r\n    RefundCheckout,\r\n    RefundPayments // when on sales history page and sale details calculations are required\r\n}\r\n\r\nexport enum StartCalcLevel {\r\n    Setup = 0,\r\n    Discount = 50,\r\n    Tax = 100,\r\n    RefundSubmit = 150,\r\n    Total = 200,\r\n    Payments = 400,     // start point to include all payment layers in calculations. \r\n    RefundLimits = 450,\r\n    Loyalty = 500,      // loyalty shouldn't include surcharges as loyalty only applies to purchase but not to additional external fee\r\n    Surcharge = 550,\r\n    TotalPayments = 600,\r\n    Final = 1000\r\n}\r\n\r\nexport enum AddressType {\r\n    Shipping = 'Shipping',\r\n    Business = 'Business',\r\n    Billing = 'Billing'\r\n}\r\n\r\nexport enum CustomDiscountType {\r\n    Price = 'price',\r\n    Percent = 'percent',\r\n    StandAloneReturn = 'standaloneReturn'\r\n}\r\n\r\nexport enum DiscountLineType {\r\n    DiscountAmount = 'Discount Amount',\r\n    DiscountPercent = '% Discount',\r\n    MarkupAmount = 'Markup Amount',\r\n    MarkupPercent = '% Markup',\r\n    PriceOverride = 'Price Override',\r\n    FlatAmount = 'Flat Amount'\r\n}\r\n\r\nexport enum DiscountType {\r\n    Simple = 'Simple',\r\n    QuantityBased = 'Quantity Based'\r\n}\r\n\r\nexport enum PaymentShortNameStandardType {\r\n    Cash = 'cash',\r\n    CreditCard = 'credit card',\r\n    GiftCard = 'gift card',\r\n    Loyalty = 'loyalty',\r\n    LoyaltyPoints = 'loyalty points',\r\n    StoreCredits = 'store credits',\r\n    Rounding = 'Rounding',\r\n    BackofficePayment = 'BackofficePayment_',\r\n    Discount = 'Discount'\r\n}\r\n\r\nexport enum SurchargeType {\r\n    Percent = 'percentage',\r\n    Fixed = 'fixed'\r\n}\r\n\r\nexport enum FinancialStatusType {\r\n    Closed = 'CLOSED',\r\n    Returned = 'RETURN',\r\n    LaybyClosed = 'LAYBY_CLOSED',\r\n    Layby = 'LAYBY',\r\n    OnAccountClosed = 'ONACCOUNT_CLOSED',\r\n    OnAccount = 'ONACCOUNT',\r\n    Parked = 'PARKED'\r\n}\r\n\r\nexport enum SaleStatusType {\r\n    Opened = 'OPEN',\r\n    Parked = 'PARKED',\r\n    Closed = 'CLOSED',\r\n    Saved = 'SAVED',\r\n    Layby = 'LAYBY',\r\n    LaybyClosed = 'LAYBY_CLOSED',\r\n    OnAccount = 'ONACCOUNT',\r\n    OnAccountClosed = 'ONACCOUNT_CLOSED'\r\n}\r\n\r\nexport enum SaleType {\r\n    Sale = 'sale',\r\n    /** Quick Sale product (Additional Charges in Cin7 Core) */\r\n    CustomSale = 'customsale'\r\n}\r\n\r\nexport enum TaxCalculationMethod {\r\n    RowTotal = 'Row Total',\r\n    OrderTotal = 'Document Total'\r\n}\r\n\r\nexport enum HistoryActionMode {\r\n    SaleDetails = 'details',\r\n    SaleRefund = 'refund',\r\n    RefundAmounts = 'refundsum'\r\n}","import { SurchargeType, DiscountType, DiscountLineType, AddressType, SaleType, CustomDiscountType, FinancialStatusType, SaleStatusType } from \"./Enums\";\r\n\r\nexport interface ICustomer {\r\n    ID: string;\r\n    Name: string;\r\n    Account: number;\r\n    AccountReceivable: string;\r\n    Addresses: Array<IAddress>;\r\n    Contacts: Array<IContact>;\r\n    CreditLimit: number;\r\n    Currency: string;\r\n    Discount: number; // current customer discount value\r\n    Discounts: Array<ICustomerDeal>; // array of deals that exists for customer  \r\n    MatrixDiscounts: Array<IDiscount>;\r\n    PriceTier: string;\r\n    RevenueAccount: string;\r\n    StoreCredits: number;\r\n    Tags: string;\r\n    TaxNumber: string;\r\n    TaxRule: string;\r\n    TaxRuleID: string;\r\n    EffectivePercentExclusive: number;\r\n    EffectivePercentInclusive: number;\r\n    EnableLoyaltyPoints: boolean;\r\n    LoyaltyPoints: number;\r\n    LoadedFromLocalDb?: boolean;\r\n    DontReloadContacts?: boolean;\r\n    DontReloadAddresses?: boolean;\r\n    PaymentTerm?: string;\r\n    Attributes?: ICustomerAttribute[];\r\n\r\n    LLExternalType?: string;\r\n    LLCustomerID?: string;\r\n    LLMerchantID?: string;\r\n    LLEmail?: string;\r\n    LLDiscountCode?: string;  // external loyalty discount code\r\n    LLInitialBalance?: string; // externa loyalty balance for the customer before any operation\r\n    SendReceiptViaEmail?: boolean;\r\n}\r\n\r\nexport interface ICustomerAttribute {\r\n    Name: string;\r\n    Value: string;\r\n}\r\n\r\nexport interface ISurcharge {\r\n    SurchargeID: string;    // surcharge id\r\n    Type: SurchargeType;\r\n    Name: string; // surcharge name\r\n    PaymentShortName?: string; // short name of payment method. Only for ghost surcharges, i.e. fake like cash and store credit\r\n    CalculatedValue: number; // calculated surcharge value for referenced payment\r\n    CalculatedValueWithTax: number; // calculated surcharge value including tax. In case of inclusive tax, this value will  be equal to CalculatedValue\r\n    PaymentID?: string; // reference to payment\r\n    RefundSurcharge: boolean; // true if surcharge is refundable\r\n    Tax: number;            // tax value applied to this surcharge value\r\n    TaxRuleID: string;      // reference to tax rule id\r\n    Value: number;      // surcharge value. if type is 'percentage' this is percents else fixed value\r\n\r\n    // legacy fields\r\n    PaymentRealAmount?: number; // actually total from payment. For old style sale processing\r\n    Total?: number; // for compatibility with analytics functions\r\n}\r\n\r\nexport interface IDiscount {\r\n    Type: DiscountType;\r\n    DiscountLineType: DiscountLineType;\r\n    CustomerID: string;\r\n    ProductID: string;\r\n    ByTag: boolean;\r\n    MaxValue: number;\r\n    MinValue: number;\r\n    Amount: number;\r\n}\r\n\r\nexport interface ICustomerDeal {\r\n    CustomerID: string;\r\n    DealID: string;\r\n}\r\n\r\nexport interface IDealTarget {\r\n    productID: string;\r\n    isFamily: boolean;\r\n    categoryID: string;\r\n    brandID: string;\r\n    tagName: string;\r\n}\r\n\r\nexport interface ICoupon {\r\n    ID: string;\r\n    Code: string;\r\n}\r\n\r\nexport interface ITrigger {\r\n    brandID: string;\r\n    categoryID: string;\r\n    productID: string;\r\n    isFamily: boolean;\r\n    tagName: string;\r\n    maxValue?: number;\r\n    minValue?: number;\r\n    amount: number;\r\n    discountLineType: DiscountLineType;\r\n}\r\n\r\nexport interface IProductDeal {\r\n    amount: number;\r\n    buyMore: boolean;\r\n    buyValue: number;\r\n    customersGroup: string;\r\n    dateFrom: any;\r\n    dateTo: any;\r\n    dealDiscountID: string;\r\n    dealID: string;\r\n    discountID: string;\r\n    discountLineType: DiscountLineType;\r\n    getValue: number;\r\n    tenantID: string;\r\n    type: DiscountType;\r\n    maxValue?: number;\r\n    minValue?: number;\r\n    targets: Array<IDealTarget>;\r\n    allowCoupons: boolean;\r\n    singleCouponCodeUsage: boolean;\r\n    coupons: Array<ICoupon>;\r\n    triggers: Array<ITrigger>;\r\n    affectedProducts?: Array<IAffectedProduct>;\r\n}\r\n\r\nexport interface IAffectedProduct {\r\n    productID: string;\r\n    price: number;\r\n}\r\n\r\nexport interface IContact {\r\n    ID: string;\r\n    Default: boolean;\r\n    Email: string;\r\n    Fax: string;\r\n    IncludeInEmail: boolean;\r\n    JobTitle: string;\r\n    MobilePhone: string;\r\n    Name: string;\r\n    Phone: string;\r\n    Website: string;\r\n    MarketingConsent: string; \r\n}\r\n\r\nexport interface IAddress {\r\n    ID: string;\r\n    City: string;\r\n    Country: string;\r\n    DefaultForType: boolean;\r\n    Line1: string;\r\n    Line2: string;\r\n    Postcode: string;\r\n    State: string;\r\n    Type: AddressType;\r\n}\r\n\r\nexport enum ProductType {\r\n    Stock = \"Stock\",\r\n    Service = \"Service\",\r\n    NonInventory = \"Non Inventory\",\r\n    GiftCard = \"GiftCard\"\r\n}\r\n\r\nexport interface ICheckoutItem extends ITax {\r\n    ID: string; // checkout id - unique value, not equal to productID\r\n    Name: string;   // product name\r\n    ProductID?: string; // product id\r\n    ProductShortDescription: string;\r\n    ProductType: ProductType;    // produc type\r\n    SerialNumber?: string; // serial number if exists\r\n    SKU: string;    // product SKU\r\n    OptionLine: string; // options concated to line\r\n    FamilyID?: string;  // product family id\r\n    SeparatedItemID?: string; // parentid if this item is result of deal applied like 'buy one and get one for free'\r\n    ComplexSeparatedItemID?: string; // id including parent and this item id\r\n    ImageID?: string;   // product image id\r\n    BasePrice: number; // base price before any discounts applied\r\n    FinalPrice: number; // final price with product level discount as it should be shown in checkout\r\n    FinalAmount: number; // total count * finalPrice as it should be shown in checkout area\r\n    FinalTaxAmount: number;   // final tax value for total row, i.e. count * finalPrice * effectiveTaxPercent\r\n    BaseTax?: number;   // tax per single product, Required only for refund\r\n    Barcode?: string;     // product barcode\r\n    BrandID?: string;    // brand id\r\n    CategoryID: string; // category id\r\n    Count: number;      // number of products in this line. Can be decimal\r\n    Discounts: Array<IProductDeal>; // array of dealID's that is currently applied.  \r\n    LoyaltyPointsEarning: number; // loyalty points amount that will be earned for entire amount field.\r\n    SaleType?: SaleType;              // for custom sale is CustomSale\r\n\r\n    // temporary fields. Will be removed before save payload\r\n    CanDelete?: boolean;         // define UI behavior\r\n    CanEdit?: boolean;           // define UI behavior\r\n    Discount?: number;           // if CustomDiscountType not null should be used to calculate final price with discount\r\n    ItemDiscount?: number;       // calculated discount value for auto discount\r\n    DefaultPrice?: number;\r\n    Price1?: number;\r\n    Price2?: number;\r\n    Price3?: number;\r\n    Price4?: number;\r\n    Price5?: number;\r\n    Price6?: number;\r\n    Price7?: number;\r\n    Price8?: number;\r\n    Price9?: number;\r\n    Price10?: number;\r\n    Deals?: Array<ILineDiscountResult>;\r\n    LoyaltyRatio?: number; // temporary for loyalty calculations\r\n    ExtraInfo?: string; // packed extra info about prices and so on.\r\n    ProductTaxString: string; // initial tax string for product\r\n    // ***************************************\r\n\r\n    GiftCardCode?: string;           // if this is gift card sale, gift card code will be here\r\n    GiftCardExpirationDate?: string; // gift card expiration date if required\r\n    CF1?: string;\r\n    CF2?: string;\r\n    CF3?: string;\r\n    CF4?: string;\r\n    CF5?: string;\r\n    CF6?: string;\r\n    CF7?: string;\r\n    CF8?: string;\r\n    CF9?: string;\r\n    CF10?: string;\r\n    Note?: string;\r\n    Option1?: string;\r\n    Option2?: string;\r\n    Option3?: string;\r\n    Tags?: string;\r\n    CustomDiscountType?: CustomDiscountType; // not null if manual discount is applied\r\n\r\n    BaseCount?: number; // for refund form stores initial number of items in sale\r\n    MaxCount?: number;\r\n    MinCount?: number;\r\n    Return?: boolean;                // can be used in history details\r\n    Sign?: number;             // for refund only\r\n    PriceBasedValue?: number; // is set when  amount was received from price based barcode.\r\n    MissingInInvoice?: boolean;\r\n}\r\n\r\nexport interface ISalesRepresentative {\r\n    ID: string;\r\n    Name: string;\r\n    PosOutletID?: string;\r\n}\r\n\r\n//interface ICoupon {\r\n//    Name: string;\r\n//    DealID: string;\r\n//    CouponID: string;\r\n//}\r\n\r\nexport interface IPayment {\r\n    Amount: number;\r\n    Date: Date;\r\n    ID: string;\r\n    Loyalty: number; // loyalty points earned by this payment\r\n    PaymentProcessorID?: string;\r\n    PaymentTypeName?: string;\r\n    Reference?: string;\r\n    ServerTransactionID?: string; // card payment transaction id\r\n    ClientTransactionID?: string; // card payment client side transaction id. Does not exist in each provider\r\n    // the field below will contain the reference to sale card payment that is returned by this refund. \r\n    // Should be used in return continue process to reduce payment limit for specific card refund payment line   \r\n    SaleServerTransactionID?: string;\r\n    ShortName?: string; // short name of payment method. Only for ghost surcharges, i.e. fake like cash and store credit\r\n    Surcharge?: ISurcharge; // surcharge that was applied to this payment\r\n    TransactionMetaData?: string; // additional satellite info for card payment\r\n    GiftCardID?: string;          // if this payment is done by gift card\r\n    FromHistory?: boolean;         // true if this is a payment from history. It means that it shouldn't be couned when calculate current session payment loyalty\r\n    InitialSurcharge?: ISurcharge;\r\n}\r\n\r\nexport interface ISale {\r\n    PayloadVersion: string; // sale structure version. Also in replace of conversionVersion\r\n    ID: string;\r\n    ParentOrderID?: string;  // is set for exchange/refund sale\r\n    IsFirstChild?: boolean;\r\n    NewRefundOrder?: string; // used to switch between existing order id and new one. For continued sales order should not be changed\r\n    PosOrderID?: string;     // only used for refunds\r\n    ReturnID?: string;\r\n    OperationID?: string;\r\n    OrderNumber: string;\r\n    OrderType: string;\r\n    Barcode: string;\r\n    DateNative: Date;\r\n    Date: string;\r\n    SaleType: SaleType;\r\n    OperationName: string;\r\n    StandAloneReturn: boolean;\r\n    StandAloneExchange: boolean;    \r\n    ClearOrderNumber: string;\r\n    SubTotal: number;\r\n    Total: number;\r\n    TotalCheckout: number;\r\n    Balance?: number;\r\n    Tax: number;\r\n    Discount: number;\r\n    DiscountValue: number;\r\n    Comment?: string;\r\n    IsTaxInclusive: boolean;    // tax mode. I's the same for all checkout items\r\n    CashChangeAmount: number;   // change for this sale if payment was done with usage of cash payment method \r\n    SurchargeTotal?: number;    // total amount of surcharge for sale\r\n    SurchargeTotalTax?: number;    // total tax amount of surcharge for sale\r\n    NonRefundableSurcharge?: number;\r\n    LaybyDate: string;\r\n\r\n    // temporary fields that will be deleted before save payload\r\n    IsDiscountPercent?: boolean; // is manual order level discount of percent type \r\n    AdjustRefunds?: boolean;\r\n    ManuallyAppliedDiscount?: boolean;\r\n    keepTotalDiscount?: boolean;\r\n\r\n    ReturnLoyaltyPoints?: boolean; // used in sales history\r\n    DiscountTax?: number;\r\n    CantProcessOffline?: boolean;\r\n    LoyaltyPoints?: number;         // current session loyalty points calculated based on payments\r\n    LoyaltyPointsTotal?: number;    // total loyalty points calculated based on payments\r\n    CustomerLoyaltyPoints?: number;         // customer current loyalty points  \r\n    CustomerLoyaltyPointsUsed?: number;     // customer loyalty points used for payment in this sale\r\n    SurchargeToRefund?: number;\r\n    SurchargeTaxToRefund?: number;\r\n    FullReturnRounding?: number;\r\n    EstimateTotal?: number;\r\n    BaseTotal?: number;\r\n    RemainingToRefund?: number;\r\n    DiscountValueRaw?: number\r\n    CustomerLoyaltyPointsRemaining?: number; // remaining customer loyalty points that can be used in sale\r\n    // **************************************************\r\n\r\n    SalesRepresentative: ISalesRepresentative;\r\n    Customer: ICustomer;\r\n    CheckoutItems: Array<ICheckoutItem>;\r\n    SelectedCoupon?: string;\r\n    SelectedCouponID?: string;\r\n    SelectedCouponDealID?: string;\r\n    ReturnSelectedCoupon?: string;\r\n    ReturnSelectedCouponID?: string;\r\n    ReturnSelectedCouponDealID?: string;\r\n    Payments: Array<IPayment>;\r\n    Refunds?: Array<IRefundBase>; // actually only to detect, that this current sale is refund/exchange.\r\n    GroupedSale?: IGroupedSale;\r\n    // RawSaleObject?: ISale; // previous native sale in case of refund/exchage\r\n    IsParked?: boolean;\r\n    CalledFromHistory?: boolean;\r\n    Status?: FinancialStatusType;   // in refund mode only\r\n    ReturnItems?: Array<ICheckoutItem>; // for refunds\r\n    ReturnPayments?: Array<IPayment>;\r\n\r\n    IsFromDearSale?: boolean; /// this field will be used to keep OrderNumber for refunds of sale converted from Cin7 Core (cause they dont have clear order number)\r\n\r\n    IsExchange?: boolean;\r\n    IsRefund?: boolean;\r\n    IsFastRefund: boolean;\r\n    IsFirstRefundDone: boolean;\r\n\r\n    // helper methods\r\n    calculateTotalLoyalty(): number;\r\n    calculateSessionLoyalty(): number;\r\n\r\n    SelectedContact: IContact;\r\n    TotalBasePrice: number;\r\n    TotalItemDiscount: number;\r\n\r\n    CustomerShippingAddressLine1?: string;\r\n    CustomerShippingAddressLine2?: string;\r\n    CustomerShippingCity?: string;\r\n    CustomerShippingCountry?: string;\r\n    CustomerShippingProvince?: string;\r\n    CustomerShippingZip?: string;\r\n    UpdateReceiptView?: boolean;\r\n    UpdateRegistrySequenceIfDuplicate?: boolean;\r\n    SendReceiptViaEmail?: boolean;\r\n    OutletName?: string;\r\n    OutletID?: string;\r\n    RegistryID?: string;\r\n    UserName?: string;\r\n}\r\n\r\nexport interface IAPISale {\r\n    ClearOrderNumber: string,\r\n    Currency: string,\r\n    CustomerID?: string,\r\n    CustomerName?: string,\r\n    CustomerNote?: string,\r\n    Date: string,\r\n    LaybyDate: string,\r\n    DoNotConsolidate: boolean,\r\n    FinancialStatus: FinancialStatusType,\r\n    LoyaltyUpdate?: number,\r\n    OperationID: string,\r\n    OrderID: string,\r\n    OrderNumber: string,\r\n    ParentOrderID?: string,\r\n    RefundForOrderID?: string,\r\n    RegistryCloseID: string,\r\n    RegistryID: string,\r\n    SalesRepresentative?: string,\r\n    SequenceGeneration: string,\r\n    TaxInclusive: boolean,\r\n    Total: number,\r\n    UserName: string,\r\n    standaloneRefund: boolean,\r\n    standaloneExchange: boolean,\r\n    AdjustRefunds: boolean,\r\n    Lines: Array<IAPIProduct>,\r\n    Payments: Array<IAPIPayment>,\r\n    Refunds: Array<IAPIRefund>,\r\n    Surcharges: Array<IAPISurcharge>,\r\n    RawSaleObject?: string; // previous native sale in case of refund/exchange serialized in string format\r\n    InitialRefunds?: Array<IAPIRefund>;\r\n    IsFromDearSale?: boolean;\r\n    CustomerEmail?: string,\r\n    CustomerMobilePhone?: string,\r\n    Discount?: number,\r\n    MarketingConsent?: string,\r\n    CustomerContactID?: string\r\n    CustomerShippingAddressLine1?: string;\r\n    CustomerShippingAddressLine2?: string;\r\n    CustomerShippingCity?: string;\r\n    CustomerShippingCountry?: string;\r\n    CustomerShippingProvince?: string;\r\n    CustomerShippingZip?: string;\r\n    UpdateReceiptView?: boolean;\r\n    UpdateRegistrySequenceIfDuplicate?: boolean;\r\n    SendReceiptViaEmail?: boolean;\r\n    OutletName?: string;\r\n    OutletID?: string;\r\n}\r\n\r\nexport interface IAPIProduct {\r\n    ProductID: string;\r\n    Name?: string;\r\n    ProductName?: string;   // for custom sale due to product id will be null\r\n    ProductType: ProductType;\r\n    ImageID: string;\r\n    Price: number; // price without any discount\r\n    OverriddenPrice?: number; // means price without order level discount. Required for server to create discount payment lines\r\n    Quantity: number;\r\n    CalculateTax: boolean;\r\n    SerialNumber?: string;\r\n    TaxRuleID: string;\r\n    Tax: number;\r\n    TotalPerLine: number;\r\n    Discount?: number;\r\n    GiftCardCode?: string;\r\n    GiftCardExpirationDate?: string;\r\n\r\n    // fields that were set when sale is loaded from web api\r\n    IsProduct?: boolean;\r\n    IsGiftCard?: boolean;\r\n    refundQuantity?: number;\r\n\r\n    MissingInInvoice?: boolean;\r\n}\r\n\r\nexport interface IAPIPayment {\r\n    ID: string,\r\n    ShortName: string,\r\n    PaymentProcessorID: string,\r\n    Amount: number,\r\n    Date: any,\r\n    Loyalty?: number,\r\n    Reference?: string,\r\n    ServerTransactionID?: string,\r\n    SaleServerTransactionID?: string,\r\n    ClientTransactionID?: string,\r\n    TransactionMetaData?: string,\r\n    GiftCardID?: string,\r\n    // temp fields\r\n    Surcharge?: IAPISurcharge;\r\n    PaymentTypeName?: string;\r\n    InitialSurcharge?: IAPISurcharge;\r\n}\r\n\r\nexport interface IAPISurcharge {\r\n    SurchargeID: string,\r\n    TaxRuleID: string,\r\n    Total: number,\r\n    Tax: number,\r\n    Name: string,\r\n    Type: SurchargeType,\r\n    Value: number,\r\n    PaymentRealAmount: number,\r\n    RefundSurcharge?: boolean,\r\n    PaymentID: string,              // reference to payment for which this surcharge was done. So in API sale it can be a number of the same surcharges.\r\n    PaymentShortName?: string,\r\n\r\n    // temp fields\r\n    CalculatedValue?: number; // calculated surcharge value for referenced payment\r\n    CalculatedValueWithTax?: number; // calculated surcharge value including tax. In case of inclusive tax, this value will  be equal to CalculatedValue\r\n    AmountToRefund?: number;\r\n    TaxToRefund?: number;\r\n}\r\n\r\nexport interface IRefundBase {\r\n    RefundID: string;\r\n}\r\n\r\nexport interface IAPIRefund {\r\n    RefundID: string,\r\n    Date?: any,\r\n    Note?: string,\r\n    Lines?: Array<IAPIProduct>,\r\n    Payments?: Array<IAPIPayment>,\r\n    Surcharges?: Array<IAPISurcharge>,\r\n    IsFromChild?: boolean\r\n}\r\n\r\nexport interface IAPIConvertConfig {\r\n    status: SaleStatusType,\r\n    isContinue: boolean,\r\n    newGuidValue: string,\r\n    isPartiallyPaid: boolean,\r\n    finStatus?: FinancialStatusType,\r\n    isStandaloneReturn?: boolean,\r\n    isStandaloneExchange?: boolean,    \r\n    doNotConsolidate?: boolean,\r\n    taxInclusive: boolean,\r\n    taxPrecision: number,\r\n}\r\n\r\nexport interface IGroupedSale {\r\n    TotalSurcharge?: number;     // including refunded surcharges via cash/store credits\r\n    GhostSurcharge?: number;\r\n    TotalSale: number;\r\n    TotalToRefund: number;\r\n    ExchangeAmount?: number;\r\n    LoyaltyRefundCoeff?: number; // if we paid by loyalties it means that this sum didn't lead to loyalty accrual so during refund we should count this\r\n    PaymentsMap?: any; // Map<string, IPayment2>;\r\n    PaymentsMap2?: any; // Map<string, IPayment2>;\r\n}\r\n\r\nexport interface ITax {\r\n    TaxRuleID: string; // tax rule id used\r\n    EffectiveInclusiveTaxPercent: number; // effective means that it sufficient to multiply final price to this value/100 to get real tax value\r\n    EffectiveExclusiveTaxPercent: number; // effective means that it sufficient to multiply final price to this value/100 to get real tax value\r\n}\r\n\r\nexport interface IDealResult {\r\n    disc: IProductDeal;\r\n    discount: number;\r\n    affectedValue: number;\r\n}\r\n\r\nexport interface ILineDiscountResult {\r\n    applyPriority: number;\r\n    discount?: IProductDeal;\r\n    totalDiscount: number;\r\n    itemsToSeparate?: number;\r\n    itemDiscount?: number;\r\n    dealDiscountID?: string;\r\n    isCustomerDiscount?: boolean;\r\n}\r\n\r\nexport interface ICalcDiscount {\r\n    discount: number;\r\n    totalDiscount: number;\r\n    applyPriority: number;\r\n    itemsToSeparate?: number;\r\n}\r\n\r\nexport interface IDeaDiscountResult {\r\n    dealDiscountID: string;\r\n    discount: number;\r\n}\r\n\r\nexport interface IReceiptCheckoutItem {\r\n    AdditionalAttribute1: string;\r\n    AdditionalAttribute2: string;\r\n    AdditionalAttribute3: string;\r\n    AdditionalAttribute4: string;\r\n    AdditionalAttribute5: string;\r\n    AdditionalAttribute6: string;\r\n    AdditionalAttribute7: string;\r\n    AdditionalAttribute8: string;\r\n    AdditionalAttribute9: string;\r\n    AdditionalAttribute10: string;\r\n    ProductAmount: string;\r\n    ProductBarCode: string;\r\n    ProductCount: number;\r\n    ProductDiscount: string;\r\n    ProductID: string;\r\n    ProductName: string;\r\n    ProductPrice: string;\r\n    ProductTaxPercent: string;\r\n    ProductSerialNumber: string;\r\n    ProductShortDescription: string;\r\n    ProductSku: string;\r\n    ProductDiscountPercentage: string;\r\n    ProductDiscountedPrice: string;\r\n    ProductDiscountedTotal: string;\r\n}\r\n\r\nexport interface IReceiptNote {\r\n    SalesNote: string;\r\n}\r\n\r\nexport interface IReceiptPayment {\r\n    PaymentAmount: string;\r\n    PaymentDate: string;\r\n    PaymentTypeName: string;\r\n}\r\n\r\nexport interface IReceiptSalesRepresentative {\r\n    SalesRepresentativeName: string;\r\n}\r\n\r\nexport interface IReceiptSurcharge {\r\n    Surcharge: string;\r\n}\r\n\r\nexport interface IEntityWithAddress {\r\n    City?: string;\r\n    Country?: string;\r\n    Line1?: string;\r\n    Line2?: string;\r\n    Postcode?: string;\r\n    State?: string;\r\n}\r\n\r\nexport interface IReceiptCustomer extends IEntityWithAddress {\r\n    CustomerLoyaltyPoints?: string;\r\n    CustomerLoyaltyPointsUsed?: string;\r\n    CustomerName: string;\r\n    Email?: string;\r\n    MobilePhone?: string;\r\n    Phone?: string;\r\n   \r\n    SaleLoyaltyPoints: string;\r\n    TotalLoyaltyPoints: string;\r\n    TaxNumber?: string;\r\n    PaymentTerm?: string;\r\n}\r\n\r\nexport interface IReceiptSaleModel {\r\n    TerminalReceipts: any[];\r\n    Balance: string;\r\n    Barcode: string;\r\n    CalculatedTax: string;\r\n    Change: string;\r\n    CheckoutProductCount: number;\r\n    CheckoutProducts: Array<IReceiptCheckoutItem>;\r\n    Customer: Array<IReceiptCustomer>;\r\n    CustomerAttributes: ICustomerAttribute[];\r\n    CustomerReceipt: string;\r\n    Date: string;\r\n    Discount: string;\r\n    MerchantReceipt: string;\r\n    Notes: Array<IReceiptNote>;\r\n    OutletName: string;\r\n    OutletInfo: Array<IOutletInfo>;\r\n    Payments: Array<IReceiptPayment>;\r\n    ReceiptNumber: string;\r\n    Received: string;\r\n    RegistryName: string;\r\n    SalesRepresentative: Array<IReceiptSalesRepresentative>;\r\n    SubTotal: string;\r\n    Surcharges: Array<IReceiptSurcharge>;\r\n    Time: string;\r\n    Total: string;\r\n    TyroTerminalReceipts: Array<any>;\r\n    VantivTerminalReceipts: Array<any>;\r\n    LinklyTerminalReceipts: Array<any>;\r\n    DiscountPercentage: string;\r\n    TotalBasePrice: string;\r\n    TotalItemDiscount: string;\r\n}\r\n\r\nexport interface IPaymentMethod {\r\n    isCustom?: boolean;                 // true if it's custom payment\r\n    loweredPaymentMethodName: string;   // unique payment lower case name\r\n    paymentMethodName?: string;         // human readable payment method name\r\n    paymentProcessorID: string;         // payment processor ID\r\n    surcharges: Array<string>;          // array of surcharge ID's available for use\r\n}\r\n\r\nexport interface ISelectedItem {\r\n    Data: IAPISale;\r\n    canContinue?: boolean;\r\n    IsPartialPaid?: boolean;\r\n    PartiallyPaidDue?: number;\r\n    RawSaleObject?: string;\r\n    RefundPayments?: Array<any>;\r\n    canContinueReturn?: boolean;\r\n    shouldPayExtra?: boolean;\r\n    SaleType?: number;\r\n}\r\n\r\nexport interface IPaymentValidation {\r\n    cashAmount: number,\r\n    creditCardAmount: number,\r\n    storeCreditAmount: number,\r\n    loyaltyPointsAmount: number,\r\n    cashSurchargeAmount: number,\r\n    storeCreditSurchargeAmount: number,\r\n    cardPayments: any;\r\n    customPayments: Array<ICustomValidation>;\r\n    hasSurchargeRest?: boolean;\r\n}\r\n\r\nexport interface ICustomValidation {\r\n    shortName: string,\r\n    customPaymentName: string,\r\n    validationAmount: number,\r\n    amount: number,\r\n    id: string,\r\n    Surcharge?: IAPISurcharge\r\n}\r\n\r\nexport interface ICardValidation {\r\n    validationAmount: number,\r\n    amount: number,\r\n    id: string,\r\n    Surcharge?: IAPISurcharge\r\n}\r\n\r\nexport interface IRefundPayments {\r\n    cash: number;\r\n    cashSurcharge: number;\r\n    cashRounded: number;\r\n    storeCredit: number;\r\n    storeCreditSurcharge: number;\r\n    loyaltyPoints: number;\r\n    creditCard: number;\r\n}\r\n\r\n\r\nexport interface IOutletInfo extends IEntityWithAddress {\r\n    Description: string;\r\n}","import Enumerable from \"linq\";\r\nimport { omit } from 'lodash';\r\nimport { CalculatorHelperService } from \"../CalculatorHelperService\";\r\nimport { CheckoutItem } from \"../CheckoutItem\";\r\nimport { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel, DiscountType, DiscountLineType, CustomDiscountType } from \"../Enums\";\r\nimport { ISale, ICheckoutItem, ILineDiscountResult, ICustomerDeal, IProductDeal, ICalcDiscount, ITrigger, IDealTarget, IDealResult, IAffectedProduct, IDeaDiscountResult } from \"../Interfaces\";\r\n\r\n\r\nexport class AutoDiscountCalculator implements IPartialCalculator {\r\n\r\n    getOptions(): IPartialCalculatorOptions {\r\n        return <IPartialCalculatorOptions>{\r\n            executionOptions: [\r\n                <IPartialCalculatorExecutionOptions>{\r\n                    type: CalculationType.Checkout,\r\n                    order: StartCalcLevel.Discount + 10\r\n                }\r\n            ]\r\n        };\r\n    }\r\n\r\n    /*\r\n     */\r\n    calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n        this.getSaleDiscounts(inputData);\r\n        this.clearDealsFields(inputData.sale);\r\n        return <IOutputData>{processResult: true};\r\n    }\r\n\r\n    private clearDealsFields(sale: ISale) {\r\n        sale.CheckoutItems.forEach(el => {\r\n            if (el.Deals) {\r\n                el.Deals.forEach(d => delete d.itemsToSeparate);\r\n            }\r\n        })\r\n    }\r\n\r\n    private tryToFindOtherCheckoutItemByProductID(items: Array<ICheckoutItem>, productID: string, dealDiscountID: string): ICheckoutItem {\r\n        let item: ICheckoutItem = null;\r\n        for (let v in items) {\r\n            const el = <ICheckoutItem>items[v];\r\n            if (el.ProductID === productID && !this.hasThisDeal(el.Deals, dealDiscountID)) {\r\n                item = el;\r\n                break;\r\n            }\r\n        }\r\n\r\n        return item;\r\n    }\r\n\r\n    private checkDifferentConditions(inputData: IInputData, dealDiscountID: string): boolean {\r\n        let diffConditions = false;\r\n        const productDeals = inputData.productDeals;\r\n        let found = false;\r\n\r\n        productDeals.forEach(disc => {\r\n            if (disc.dealDiscountID === dealDiscountID) {\r\n                disc.triggers.forEach(tEl => {\r\n                    found = false;\r\n                    disc.targets.forEach(targetDisc => {\r\n                        if (((tEl.productID && tEl.productID === targetDisc.productID) ||\r\n                            (tEl.categoryID && tEl.categoryID === targetDisc.categoryID) ||\r\n                            (tEl.brandID && tEl.brandID === targetDisc.brandID) ||\r\n                            (tEl.tagName && tEl.tagName === targetDisc.tagName))) {\r\n                            found = true;\r\n                        }\r\n\r\n                    });\r\n\r\n                    if (found === false) {\r\n                        diffConditions = true;\r\n                    }\r\n                });\r\n\r\n                disc.targets.forEach(tEl => {\r\n                    found = false;\r\n                    disc.triggers.forEach(targetDisc => {\r\n                        if (((tEl.productID && tEl.productID === targetDisc.productID) ||\r\n                            (tEl.categoryID && tEl.categoryID === targetDisc.categoryID) ||\r\n                            (tEl.brandID && tEl.brandID === targetDisc.brandID) ||\r\n                            (tEl.tagName && tEl.tagName === targetDisc.tagName))) {\r\n                            found = true;\r\n                        }\r\n\r\n                    });\r\n\r\n                    if (found === false) {\r\n                        diffConditions = true;\r\n                    }\r\n                });\r\n            }\r\n        });\r\n\r\n        return diffConditions;\r\n    }\r\n\r\n\r\n    /**\r\n     * check if product is affected by deal\r\n     * @param {} deals\r\n     * @param {} dealDiscountID\r\n     * @returns {}\r\n     */\r\n    private hasThisDeal(deals: Array<ILineDiscountResult>, dealDiscountID: string): boolean {\r\n        var result = deals.filter(deal => deal.dealDiscountID === dealDiscountID);\r\n        return result.length > 0;\r\n    }\r\n\r\n    /*\r\n     * check if customer has current deal\r\n     * @param {} customerDeals\r\n     * @param {} dealID\r\n     * @returns {}\r\n     */\r\n    private customerHasThatDeal(customerDeals: Array<ICustomerDeal>, dealID: string): boolean {\r\n        const has = customerDeals.filter(el => el.DealID === dealID).length > 0;\r\n        return has;\r\n    }\r\n\r\n    /**\r\n     * check if tags string contaons tagName\r\n     * @param {} tags\r\n     * @param {} tag\r\n     * @returns {}\r\n     */\r\n    private checkTag(tags: any, tag: string): boolean {\r\n        let hasTag = false;\r\n        if (tag && tags && typeof (tags) === 'string') {\r\n            const result = <Array<string>>tags.split(',');\r\n            hasTag = result.filter(el => el === tag).length > 0;\r\n        }\r\n\r\n        return hasTag;\r\n    }\r\n\r\n    //calculate posible discount\r\n    private calculateDiscountLine(discount: IProductDeal, item: ICheckoutItem, value: number): ICalcDiscount {\r\n        var result = <ICalcDiscount>{\r\n            discount: 0,\r\n            totalDiscount: 0,\r\n            applyPriority: 0\r\n        };\r\n\r\n        var affectedValue = value === null ? item.Count : value;\r\n\r\n        if (discount.type === DiscountType.QuantityBased) {\r\n            discount.triggers.forEach(t => {\r\n                if (t.minValue <= item.Count && item.Count <= t.maxValue) {\r\n                    discount.amount = t.amount;\r\n                    return false;\r\n                }\r\n            });\r\n        }\r\n\r\n        switch (discount.discountLineType) {\r\n            case DiscountLineType.DiscountAmount:\r\n                result.discount = discount.amount > item.BasePrice ? 0 : item.BasePrice - discount.amount;\r\n                break;\r\n            case DiscountLineType.DiscountPercent:\r\n                result.discount = item.BasePrice * (100 - discount.amount) / 100;\r\n                break;\r\n            case DiscountLineType.MarkupAmount:\r\n                result.discount = item.BasePrice + discount.amount;\r\n                break;\r\n            case DiscountLineType.MarkupPercent:\r\n                result.discount = item.BasePrice + (item.BasePrice * discount.amount / 100);\r\n                break;\r\n            case DiscountLineType.FlatAmount:\r\n                result.discount = discount.amount / affectedValue;\r\n                break;\r\n            default:\r\n                result.discount = 0;\r\n                break;\r\n        }\r\n\r\n        result.discount = item.BasePrice - result.discount;\r\n        result.totalDiscount = result.discount * affectedValue;\r\n\r\n        if (value !== null)\r\n            result.itemsToSeparate = affectedValue;\r\n\r\n        if (discount.discountLineType === DiscountLineType.PriceOverride) {\r\n            result.applyPriority = 1;\r\n            result.discount = item.BasePrice - discount.amount;\r\n            result.totalDiscount = result.discount * affectedValue;\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    private static isOrderTotal(item: ITrigger | IDealTarget) {\r\n        return (!item.productID || item.productID === ext.constantService.newGuid)\r\n            && !item.categoryID && !item.brandID && !item.tagName;\r\n    }\r\n\r\n    private calculateOrderDiscount(discount: IProductDeal, total: number, checkoutItems: Array<ICheckoutItem>): IDealResult {\r\n        const newGuid = ext.constantService.newGuid;\r\n        const result = <IDealResult>{\r\n            disc: discount,\r\n            discount: 0,\r\n            affectedValue: 0\r\n        };\r\n\r\n        let totalMultiplier = discount.buyValue > 0 ? Math.floor(total / discount.buyValue) : 0;\r\n        let affectedValue = discount.getValue;\r\n        let productBuyCount = 0;\r\n        let applyTotalDiscount = false;\r\n\r\n        discount.triggers.forEach(tEl => {\r\n            checkoutItems.forEach(el => {\r\n                if ((((el.ProductID === tEl.productID && tEl.productID && !tEl.isFamily) ||\r\n                        (el.FamilyID === tEl.productID && tEl.productID && tEl.isFamily) ||\r\n                        (!tEl.productID || tEl.productID == newGuid))\r\n                    && ((el.CategoryID === tEl.categoryID && tEl.categoryID) || !tEl.categoryID)\r\n                    && ((el.BrandID === tEl.brandID && tEl.brandID) || !tEl.brandID)\r\n                    && (this.checkTag(el.Tags, tEl.tagName) || !tEl.tagName))) {\r\n                    productBuyCount += el.Count;\r\n                }\r\n            });\r\n        });\r\n\r\n        if (Math.floor(productBuyCount / discount.buyValue) >= 1) {\r\n            totalMultiplier = Math.floor(productBuyCount / discount.buyValue);\r\n            applyTotalDiscount = true;\r\n        }\r\n\r\n        totalMultiplier = totalMultiplier > 0 ? discount.buyMore === false ? totalMultiplier : 1 : 0;\r\n        affectedValue *= totalMultiplier;\r\n\r\n        if ((AutoDiscountCalculator.isOrderTotal(discount.triggers[0]) || applyTotalDiscount === true) &&\r\n            discount.targets.length > 0 && AutoDiscountCalculator.isOrderTotal(discount.targets[0])) {\r\n            switch (discount.discountLineType) {\r\n                case DiscountLineType.DiscountAmount:\r\n                    result.discount = total - discount.amount;\r\n                    break;\r\n                case DiscountLineType.DiscountPercent:\r\n                    result.discount = total * (100 - discount.amount) / 100;\r\n                    break;\r\n                case DiscountLineType.MarkupAmount:\r\n                    result.discount = total + discount.amount;\r\n                    break;\r\n                case DiscountLineType.MarkupPercent:\r\n                    result.discount = total + (total * discount.amount / 100);\r\n                    break;\r\n                case DiscountLineType.PriceOverride:\r\n                    result.discount = discount.amount;\r\n                    break;\r\n                case DiscountLineType.FlatAmount:\r\n                    result.discount = discount.amount;\r\n                    break;\r\n                default:\r\n                    result.discount = 0;\r\n                    break;\r\n            }\r\n\r\n            result.discount = total - result.discount;\r\n            if (discount.discountLineType === DiscountLineType.DiscountPercent && totalMultiplier === 0) {\r\n                result.discount *= totalMultiplier;\r\n            } else if (discount.discountLineType !== DiscountLineType.DiscountPercent) {\r\n                result.discount *= totalMultiplier;\r\n            }\r\n\r\n        }\r\n\r\n        /// Looks like we dont need this part\r\n        /*else if (discount.targets.length > 0 && discount.targets[0].productID !== newGuid) {\r\n\r\n            discount.targets.forEach(targetDisc => {\r\n                checkoutItems.forEach(targetItem => {\r\n                    if ((((targetItem.ProductID === targetDisc.productID && targetDisc.productID && !targetDisc.isFamily) || (targetItem.FamilyID === targetDisc.productID && targetDisc.productID && targetDisc.isFamily) || !targetDisc.productID) &&\r\n                        ((targetItem.CategoryID === targetDisc.categoryID && targetDisc.categoryID) || !targetDisc.categoryID) &&\r\n                        ((targetItem.BrandID === targetDisc.brandID && targetDisc.brandID) || !targetDisc.brandID) &&\r\n                        (this.checkTag(targetItem.Tags, targetDisc.tagName) || !targetDisc.tagName)) && targetItem.CanEdit) {\r\n                        discount.affectedProducts.push(<IAffectedProduct>{\r\n                            productID: targetItem.ProductID,\r\n                            price: targetItem.BasePrice\r\n                        });\r\n                    }\r\n                });\r\n            });\r\n\r\n            // orderBy(discount.affectedProducts, ['price'], false)\r\n            Enumerable.from(discount.affectedProducts)\r\n                .orderBy(k => k.price)\r\n                .forEach(affectedProduct => {\r\n                    for (let v in checkoutItems) {\r\n                        const targetItem = <ICheckoutItem>checkoutItems[v];\r\n                        if (targetItem.ProductID === affectedProduct.productID &&\r\n                            (affectedValue > 0)) {\r\n                            var value = affectedValue > targetItem.Count ? targetItem.Count : affectedValue ? affectedValue : null;\r\n                            var itemDiscount = this.calculateDiscountLine(discount, targetItem, value);\r\n                            result.discount = itemDiscount.totalDiscount;\r\n                            affectedValue -= targetItem.Count;\r\n                            break;\r\n                        }\r\n                    }\r\n                });\r\n\r\n            result.affectedValue = affectedValue;\r\n        }*/\r\n\r\n        return result;\r\n    }\r\n\r\n    // filter deals in according to selectedCoupon\r\n    private filterProductDeals(inputData: IInputData) {\r\n        const currentSale = inputData.sale;\r\n        const productDeals = inputData.productDeals;\r\n\r\n        if (!productDeals)\r\n            return new Array<IProductDeal>();\r\n\r\n        const couponID = currentSale.SelectedCouponID;\r\n\r\n        const filteredProductDeals = productDeals.filter(d => {\r\n            if (d.allowCoupons !== true) return true; // if deal is not coupon, get it\r\n            if (!d.coupons) return false;\r\n            if (!!d.coupons && !couponID) return false;\r\n\r\n            const coups = d.coupons.filter(function (c) {\r\n                return c.ID === couponID;\r\n            });\r\n            return coups.length > 0;\r\n        });\r\n\r\n        return filteredProductDeals;\r\n    }\r\n\r\n    private getSaleDiscounts(inputData: IInputData) {\r\n        const currentSale = inputData.sale;\r\n        const productDeals = !inputData.productDeals ? new Array<IProductDeal>() : inputData.productDeals;\r\n        const newGuid = ext.constantService.newGuid;\r\n\r\n        if (currentSale.StandAloneReturn) return; // for standalone there is no discounts, exit.\r\n\r\n        let customerDeals = !currentSale.Customer ? [] : currentSale.Customer.Discounts;\r\n        if (!customerDeals)\r\n            customerDeals = [];\r\n\r\n        const removedItemsMap = new Map<string, ICheckoutItem>(); // assume that saparated items can have only one split, i.e. with the same SeparatedItemID can be only one item\r\n\r\n        currentSale.CheckoutItems.forEach(el => {\r\n            el.Deals = new Array<ILineDiscountResult>();\r\n            el.ItemDiscount = 0;\r\n\r\n            if (el.SeparatedItemID && el.CanEdit) {\r\n                for (let v in currentSale.CheckoutItems) {\r\n                    const parentEl = <ICheckoutItem>currentSale.CheckoutItems[v];\r\n                    if (parentEl.ID === el.SeparatedItemID) {\r\n                        parentEl.Count = parentEl.Count + el.Count;\r\n                        removedItemsMap.set(el.ComplexSeparatedItemID, el);\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        });\r\n\r\n        // check and remove cleared manual discounts\r\n        // check here custom discount\r\n        currentSale.CheckoutItems.forEach(el => {\r\n            if (el.CanEdit) {\r\n                if (el.CustomDiscountType === CustomDiscountType.Percent && el.Discount == 0)\r\n                    el.CustomDiscountType = null;\r\n            }\r\n        });\r\n\r\n        // clean temporary data\r\n        if (productDeals)\r\n            productDeals.forEach(el => el.affectedProducts = new Array<IAffectedProduct>());\r\n\r\n        // cause product deals can have coupon deals and coupon deal can be disabled\r\n        // we need to filter productDeals and remove all coupon deals that don't work for the moment\r\n        // coupon deal starts to work when it contains coupon number that is selected. Only one coupon can be set for current sale.\r\n        const filteredProductDeals = this.filterProductDeals(inputData);\r\n\r\n        currentSale.CheckoutItems = currentSale.CheckoutItems\r\n            .filter(c => !c.ComplexSeparatedItemID || !removedItemsMap.has(c.ComplexSeparatedItemID));\r\n\r\n        const currentDate = new Date();\r\n\r\n        // calculate order level discount\r\n        var total = CalculatorHelperService.getCheckoutSum(currentSale);\r\n        var totalDiscounts = new Array<IDealResult>();\r\n\r\n        filteredProductDeals.forEach(disc => {\r\n            if ((disc.dateTo == null || new Date(disc.dateTo) >= currentDate) &&\r\n                (disc.dateFrom == null || new Date(disc.dateFrom) <= currentDate) &&\r\n                (disc.triggers[0].productID === newGuid || (disc.targets[0] && disc.targets[0].productID === newGuid)) &&\r\n                (this.customerHasThatDeal(customerDeals, disc.dealID) || disc.customersGroup === 'All' || disc.customersGroup === 'POS')) {\r\n                const result = this.calculateOrderDiscount(disc, total, currentSale.CheckoutItems);\r\n                if (result.discount)\r\n                    totalDiscounts.push(result);\r\n            }\r\n        });\r\n\r\n        var results = new Array<IDeaDiscountResult>();\r\n        totalDiscounts.forEach(el => {\r\n            let addNewResult = true;\r\n            for (let v in results) {\r\n                const r = <IDeaDiscountResult>results[v];\r\n                if (r.dealDiscountID === el.disc.dealDiscountID) {\r\n                    r.discount += el.discount;\r\n                    addNewResult = false;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (addNewResult) {\r\n                results.push(\r\n                    <IDeaDiscountResult>{\r\n                        dealDiscountID: el.disc.dealDiscountID,\r\n                        discount: el.discount\r\n                    });\r\n            }\r\n        });\r\n\r\n        // search discounts for products\r\n        // Customers discount, discount matrix, product discount\r\n        currentSale.CheckoutItems.forEach(el => {\r\n            if (!el.Deals)\r\n                el.Deals = new Array<ILineDiscountResult>();\r\n\r\n            if (currentSale.Customer &&\r\n                currentSale.Customer.Discount &&\r\n                currentSale.Customer.Discount > 0 &&\r\n                ext.configService.applyCustomerDiscountAfterOtherDiscounts !== true) {\r\n                var customerDiscount = currentSale.Customer.Discount;\r\n\r\n                var disc = <IProductDeal>{\r\n                    discountLineType: DiscountLineType.DiscountPercent,\r\n                    amount: customerDiscount\r\n                };\r\n\r\n                var result = this.calculateDiscountLine(disc, el, null);\r\n                var discount = <ILineDiscountResult>{\r\n                    applyPriority: result.applyPriority,\r\n                    discount: disc,\r\n                    totalDiscount: result.totalDiscount,\r\n                    itemDiscount: result.discount,\r\n                    itemsToSeparate: result.itemsToSeparate,\r\n                    dealDiscountID: null,\r\n                    isCustomerDiscount: true\r\n                };\r\n\r\n                el.Deals.push(discount);\r\n            }\r\n\r\n            var appliedDiscount = false;\r\n            var appliedByTag = false;\r\n            var appliedById = false;\r\n            if (currentSale.Customer.MatrixDiscounts) {\r\n                currentSale.Customer.MatrixDiscounts.forEach(martrixItem => {\r\n                    if ((el.ProductID === martrixItem.ProductID &&\r\n                            (martrixItem.Type === DiscountType.Simple\r\n                                || (martrixItem.Type === DiscountType.QuantityBased &&\r\n                                    martrixItem.MinValue <= el.Count &&\r\n                                    martrixItem.MaxValue >= el.Count))) &&\r\n                        ((appliedById === true && martrixItem.ByTag === false) ||\r\n                            (appliedByTag === true && martrixItem.ByTag === true) ||\r\n                            appliedDiscount === false)\r\n                    ) {\r\n\r\n                        appliedDiscount = true;\r\n\r\n                        if (martrixItem.ByTag) {\r\n                            appliedByTag = true;\r\n                        } else {\r\n                            appliedById = true;\r\n                        }\r\n\r\n                        var disc = <IProductDeal>{\r\n                            discountLineType: martrixItem.DiscountLineType,\r\n                            amount: martrixItem.Amount\r\n                        };\r\n\r\n                        var result = this.calculateDiscountLine(disc, el, null);\r\n                        var discount = <ILineDiscountResult>{\r\n                            applyPriority: result.applyPriority,\r\n                            discount: disc,\r\n                            totalDiscount: result.totalDiscount,\r\n                            itemDiscount: result.discount,\r\n                            itemsToSeparate: result.itemsToSeparate,\r\n                            dealDiscountID: null\r\n                        };\r\n\r\n                        el.Deals.push(discount);\r\n                    }\r\n                });\r\n            }\r\n\r\n            if (el.Discounts && appliedDiscount === false) {\r\n                el.Discounts.forEach(prDisc => {\r\n                    if ((prDisc.type === DiscountType.Simple\r\n                        || (prDisc.type === DiscountType.QuantityBased &&\r\n                            prDisc.minValue <= el.Count &&\r\n                            prDisc.maxValue >= el.Count))) {\r\n\r\n                        var disc = <IProductDeal>{\r\n                            discountLineType: prDisc.discountLineType,\r\n                            amount: prDisc.amount\r\n                        };\r\n\r\n                        var result = this.calculateDiscountLine(disc, el, null);\r\n                        var discount = <ILineDiscountResult>{\r\n                            applyPriority: result.applyPriority,\r\n                            discount: disc,\r\n                            totalDiscount: result.totalDiscount,\r\n                            itemDiscount: result.discount,\r\n                            itemsToSeparate: result.itemsToSeparate,\r\n                            dealDiscountID: null\r\n                        };\r\n\r\n                        el.Deals.push(discount);\r\n                    }\r\n                });\r\n            }\r\n        });\r\n\r\n        //deals discounts\r\n        Enumerable.from(filteredProductDeals)\r\n            .orderBy(k => k.dealDiscountID)\r\n            .forEach(disc => {\r\n                if (this.customerHasThatDeal(customerDeals, disc.dealID) ||\r\n                    disc.customersGroup === 'All' ||\r\n                    disc.customersGroup === 'POS') {\r\n\r\n                    var productBuyCount = 0;\r\n                    var triggerItemIds = new Array<string>();\r\n\r\n                    disc.triggers.forEach(tElement => {\r\n                        currentSale.CheckoutItems.forEach(el => {\r\n                            const isOrderTotal = AutoDiscountCalculator.isOrderTotal(tElement);\r\n\r\n                            if (el.CanEdit &&\r\n                                (((el.ProductID === tElement.productID &&\r\n                                            tElement.productID &&\r\n                                            !tElement.isFamily) ||\r\n                                        (tElement.productID &&\r\n                                            tElement.isFamily &&\r\n                                            el.FamilyID === tElement.productID) || !tElement.productID || tElement.productID === newGuid) &&\r\n                                    ((el.CategoryID === tElement.categoryID && tElement.categoryID) ||\r\n                                        !tElement.categoryID) &&\r\n                                    ((el.BrandID === tElement.brandID && tElement.brandID) || !tElement.brandID) &&\r\n                                    (this.checkTag(el.Tags, tElement.tagName) || !tElement.tagName)) &&\r\n                                (disc.dateTo == null || new Date(disc.dateTo) >= currentDate) &&\r\n                                (disc.dateFrom == null || new Date(disc.dateFrom) <= currentDate)) {\r\n                                if (disc.type === DiscountType.QuantityBased) {\r\n                                    const qv = isOrderTotal ? el.FinalAmount : el.Count;\r\n                                    if (tElement.minValue <= qv && (qv <= tElement.maxValue)) {\r\n                                        productBuyCount += qv;\r\n                                        triggerItemIds.push(el.ProductID);\r\n                                    }\r\n\r\n                                } else {\r\n                                    productBuyCount += isOrderTotal ? el.FinalAmount : el.Count;\r\n                                    triggerItemIds.push(el.ProductID);\r\n                                }\r\n                            }\r\n                        });\r\n                    });\r\n\r\n\r\n                    if (productBuyCount >= disc.buyValue || disc.buyValue == null) {\r\n\r\n                        disc.targets.forEach(targetDisc => {\r\n                            currentSale.CheckoutItems.forEach(targetItem => {\r\n                                if (targetItem.CanEdit &&\r\n                                    (disc.dateTo == null || new Date(disc.dateTo) >= currentDate) &&\r\n                                    (disc.dateFrom == null || new Date(disc.dateFrom) <= currentDate) &&\r\n                                    (((targetItem.ProductID === targetDisc.productID &&\r\n                                                targetDisc.productID && !targetDisc.isFamily) ||\r\n                                            (targetDisc.productID && targetDisc.isFamily &&\r\n                                                targetItem.FamilyID === targetDisc.productID) || !targetDisc.productID) &&\r\n                                        ((targetItem.CategoryID === targetDisc.categoryID && targetDisc.categoryID) ||\r\n                                            !targetDisc.categoryID) &&\r\n                                        ((targetItem.BrandID === targetDisc.brandID && targetDisc.brandID) || !targetDisc.brandID) &&\r\n                                        (this.checkTag(targetItem.Tags, targetDisc.tagName) || !targetDisc.tagName)) &&\r\n                                    (disc.type === DiscountType.Simple\r\n                                        || (disc.type === DiscountType.QuantityBased && disc.minValue <= targetItem.Count &&\r\n                                            disc.maxValue >= targetItem.Count)) && targetItem.CanEdit &&\r\n                                    (!this.hasThisDeal(targetItem.Deals, disc.dealDiscountID) /*||  // it seems the error checkout item does not have itemsToSeparate\r\n                                      (targetItem.itemsToSeparate > 0 && targetItem.itemsToSeparate !== targetItem.Count)*/)) {\r\n                                    disc.affectedProducts.push(\r\n                                        <IAffectedProduct>{\r\n                                            productID: targetItem.ProductID,\r\n                                            price: targetItem.BasePrice\r\n                                        });\r\n                                }\r\n                            });\r\n                        });\r\n\r\n                        if (disc.targets.length === 0) {\r\n                            disc.triggers.forEach(tElement => {\r\n                                currentSale.CheckoutItems.forEach(targetItem => {\r\n                                    if (targetItem.CanEdit &&\r\n                                        (disc.dateTo == null || new Date(disc.dateTo) >= currentDate) &&\r\n                                        (disc.dateFrom == null || new Date(disc.dateFrom) <= currentDate) &&\r\n                                        (((targetItem.ProductID === tElement.productID && tElement.productID && !tElement.isFamily) ||\r\n                                                (targetItem.FamilyID === tElement.productID && tElement.productID && tElement.isFamily) ||\r\n                                                !tElement.productID || tElement.productID === newGuid) &&\r\n                                            ((targetItem.CategoryID === tElement.categoryID && tElement.categoryID) || !tElement.categoryID) &&\r\n                                            ((targetItem.BrandID === tElement.brandID && tElement.brandID) || !tElement.brandID) &&\r\n                                            (this.checkTag(targetItem.Tags, tElement.tagName) || !tElement.tagName)) &&\r\n                                        (disc.type === DiscountType.Simple\r\n                                            || (disc.type === DiscountType.QuantityBased &&\r\n                                                tElement.minValue <= targetItem.Count && tElement.maxValue >= targetItem.Count)) &&\r\n                                        targetItem.CanEdit &&\r\n                                        (!this.hasThisDeal(targetItem.Deals, disc.dealDiscountID)\r\n                                            // || (targetItem.itemsToSeparate > 0 && targetItem.itemsToSeparate !== targetItem.Count) // it seems the bug\r\n                                        )) {\r\n\r\n                                        if (disc.type === DiscountType.QuantityBased) {\r\n\r\n                                            if (tElement.minValue <= targetItem.Count &&\r\n                                                tElement.maxValue >= targetItem.Count) {\r\n                                                disc.amount = tElement.amount;\r\n                                                disc.discountLineType = tElement.discountLineType;\r\n                                                disc.affectedProducts.push(\r\n                                                    <IAffectedProduct>{\r\n                                                        productID: targetItem.ProductID,\r\n                                                        price: targetItem.BasePrice\r\n                                                    });\r\n                                            }\r\n                                        } else {\r\n\r\n                                            disc.affectedProducts.push(\r\n                                                <IAffectedProduct>{\r\n                                                    productID: targetItem.ProductID,\r\n                                                    price: targetItem.BasePrice\r\n                                                });\r\n                                        }\r\n                                    }\r\n                                });\r\n                            });\r\n                        }\r\n\r\n                        var affectedValue = 0;\r\n\r\n                        if (this.checkDifferentConditions(inputData, disc.dealDiscountID) === true) {\r\n                            affectedValue = disc.buyMore === false ? disc.getValue * Math.floor(productBuyCount / disc.buyValue) : disc.getValue;\r\n                        } else {\r\n                            affectedValue = disc.getValue * Math.floor(productBuyCount / (disc.buyValue + disc.getValue));\r\n                            affectedValue = (affectedValue > disc.getValue && disc.buyMore === true) ? disc.getValue : affectedValue;\r\n                        }\r\n\r\n                        Enumerable.from(disc.affectedProducts)\r\n                            .orderBy(k => k.price)\r\n                            .forEach(affectedProduct => {\r\n                                currentSale.CheckoutItems.forEach(targetItem => {\r\n                                    if (targetItem.CanEdit &&\r\n                                        targetItem.ProductID === affectedProduct.productID &&\r\n                                        (affectedValue > 0 || (!affectedValue && affectedValue !== 0))) {\r\n\r\n                                        if (this.hasThisDeal(targetItem.Deals, disc.dealDiscountID)) {\r\n                                            var otherItem = this.tryToFindOtherCheckoutItemByProductID(currentSale.CheckoutItems, targetItem.ProductID, disc.dealDiscountID);\r\n                                            if (otherItem != null) {\r\n                                                var value = affectedValue > otherItem.Count ? otherItem.Count : affectedValue ? affectedValue : null;\r\n                                                var result = this.calculateDiscountLine(disc, otherItem, value);\r\n                                                var discount =\r\n                                                    <ILineDiscountResult>{\r\n                                                        applyPriority: result.applyPriority,\r\n                                                        discount: omit(disc, ['coupons']),\r\n                                                        totalDiscount: result.totalDiscount,\r\n                                                        itemDiscount: result.discount,\r\n                                                        itemsToSeparate: result.itemsToSeparate,\r\n                                                        dealDiscountID: disc.dealDiscountID\r\n                                                    };\r\n                                                otherItem.Deals.push(discount);\r\n                                                affectedValue -= value;\r\n                                                return false;\r\n                                            } else {\r\n                                                for (let v in targetItem.Deals) {\r\n                                                    const d = <ILineDiscountResult>targetItem.Deals[v];\r\n                                                    if (d.dealDiscountID === disc.dealDiscountID) {\r\n\r\n                                                        var value = affectedValue + d.itemsToSeparate > targetItem.Count ?\r\n                                                            targetItem.Count : affectedValue + d.itemsToSeparate;\r\n                                                        var result = this.calculateDiscountLine(disc, targetItem, value);\r\n                                                        d.itemsToSeparate = result.itemsToSeparate;\r\n                                                        d.totalDiscount = result.totalDiscount;\r\n                                                        affectedValue -= value;\r\n                                                        break;\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                        } else {\r\n                                            const value = affectedValue > targetItem.Count ?\r\n                                                targetItem.Count : affectedValue ?\r\n                                                    affectedValue : null;\r\n                                            const result = this.calculateDiscountLine(disc, targetItem, value);\r\n                                            const discount = <ILineDiscountResult>{\r\n                                                applyPriority: result.applyPriority,\r\n                                                discount: omit(disc, ['coupons']),\r\n                                                totalDiscount: result.totalDiscount,\r\n                                                itemDiscount: result.discount,\r\n                                                itemsToSeparate: result.itemsToSeparate,\r\n                                                dealDiscountID: disc.dealDiscountID\r\n                                            };\r\n\r\n                                            targetItem.Deals.push(discount);\r\n                                            affectedValue -= value;\r\n                                            return false;\r\n                                        }\r\n                                    }\r\n                                });\r\n                            });\r\n                    }\r\n                }\r\n            });\r\n\r\n        //choose best discount\r\n        const itemsToAdd = new Array<ICheckoutItem>();\r\n        currentSale.CheckoutItems.forEach(el => {\r\n            let itemsWithOutDiscount = el.CanEdit ? el.Count : 0;\r\n            let dlst = Enumerable.from(el.Deals);\r\n\r\n            if (el.Deals.filter(d => d.applyPriority > 0).length > 0) {\r\n                dlst = dlst.where(d => d.applyPriority > 0);\r\n            } else dlst = dlst.orderByDescending(k => k.applyPriority);\r\n\r\n            const deals = dlst\r\n                // .thenByDescending(k => k.totalDiscount)\r\n                // IMZ. sorting is replaced by the following due to in the case of 5 items for instance with\r\n                // deal that acts on 1 item, tha total discount will be always greater.\r\n                // also the best discount has the best priority. But if PriceOverride discount exists on this product\r\n                // it will be the best always\r\n                .orderByDescending(k => k.itemDiscount)\r\n                .toArray();\r\n\r\n            // const deals = orderBy(el.deals, ['applyPriority', 'totalDiscount'], true);\r\n\r\n            for (let i = 0; i < deals.length && itemsWithOutDiscount > 0; i++) {\r\n                let bestDiscount = deals[i];\r\n\r\n                if (bestDiscount && el.CanEdit) {\r\n                    if (bestDiscount.itemsToSeparate && bestDiscount.itemsToSeparate < el.Count) {\r\n                        let newItem = CheckoutItem.copy(el);\r\n\r\n                        newItem.Count = bestDiscount.itemsToSeparate;\r\n                        newItem.ID = ext.uuid2Service.newguid();\r\n                        //                            newItem.itemDiscount = helperService.DEARRound(bestDiscount.itemDiscount, 2);\r\n                        newItem.FinalPrice = ext.helperService.DEARRound(newItem.BasePrice - bestDiscount.itemDiscount, 2);\r\n                        newItem.ItemDiscount = ext.helperService.DEARRound(bestDiscount.itemDiscount, 2);\r\n                        newItem.SeparatedItemID = el.ID;\r\n                        newItem.ComplexSeparatedItemID = el.ID + \"__\" + bestDiscount.dealDiscountID;\r\n                        newItem.FinalAmount = ext.helperService.DEARRound(newItem.FinalPrice * newItem.Count, 2);\r\n\r\n                        el.Count -= bestDiscount.itemsToSeparate;\r\n                        el.FinalAmount = el.BasePrice * el.Count;\r\n                        el.FinalPrice = el.BasePrice;\r\n\r\n                        itemsWithOutDiscount -= bestDiscount.itemsToSeparate;\r\n\r\n                        itemsToAdd.push(newItem);\r\n                    } else {\r\n\r\n                        //                            el.itemDiscount = helperService.DEARRound(bestDiscount.itemDiscount, 2);\r\n                        //                            el.FinalPrice = ext.helperService.DEARRound(el.BasePrice - bestDiscount.itemDiscount, 2);\r\n                        el.FinalPrice = ext.helperService.DEARRound(el.BasePrice - bestDiscount.itemDiscount, 4);\r\n                        el.FinalAmount = ext.helperService.DEARRound(el.FinalPrice * el.Count, 2);\r\n                        el.ItemDiscount = ext.helperService.DEARRound(bestDiscount.itemDiscount, 2);\r\n                        itemsWithOutDiscount = 0;\r\n                    }\r\n                }\r\n            }\r\n        });\r\n\r\n        itemsToAdd.forEach(el => {\r\n            if (!!el.ComplexSeparatedItemID && removedItemsMap.has(el.ComplexSeparatedItemID)) {\r\n                var oldEl = removedItemsMap.get(el.ComplexSeparatedItemID);\r\n                el.Discount = oldEl.Discount;\r\n                if (oldEl.CustomDiscountType !== null && oldEl.CustomDiscountType !== undefined)\r\n                    el.CustomDiscountType = oldEl.CustomDiscountType;\r\n            }\r\n            currentSale.CheckoutItems.push(el);\r\n        });\r\n\r\n        //apply customersDiscount after all discounts if needed\r\n        if (currentSale.Customer && currentSale.Customer.Discount && currentSale.Customer.Discount > 0 &&\r\n            ext.configService.applyCustomerDiscountAfterOtherDiscounts === true) {\r\n\r\n            currentSale.CheckoutItems.forEach(el => {\r\n                const discountPercentage = currentSale.Customer.Discount / 100;\r\n\r\n                if (el.CanEdit) {\r\n                    // apply customer discount on final price with all other discounts and update both prices\r\n                    el.ItemDiscount = el.ItemDiscount + el.FinalPrice * discountPercentage;\r\n                    el.FinalPrice = ext.helperService.DEARRound(el.BasePrice - el.ItemDiscount, 2);\r\n                    el.FinalAmount = ext.helperService.DEARRound(el.FinalPrice * el.Count, 2);\r\n                    el.ItemDiscount = ext.helperService.DEARRound(el.ItemDiscount, 2);\r\n                }\r\n            });\r\n        }\r\n\r\n        // check here custom discount\r\n        currentSale.CheckoutItems.forEach(el => {\r\n            if (el.CanEdit) {\r\n                if (el.CustomDiscountType === CustomDiscountType.Price &&\r\n                    el.Discount >= 0) {\r\n                    el.ItemDiscount = ext.helperService.DEARRound(el.BasePrice - el.Discount, 2);\r\n\r\n                    if (el.ItemDiscount === 0) {\r\n                        el.FinalPrice = el.BasePrice;\r\n                        // el.CustomDiscountType = null; // this will disable custom setting at all.\r\n                    } else\r\n                        el.FinalPrice = el.Discount;\r\n                } else if (el.CustomDiscountType === CustomDiscountType.Percent &&\r\n                    el.Discount >= 0) {\r\n                    if (el.Discount > 100)\r\n                        el.Discount = 100;\r\n\r\n                    el.ItemDiscount = el.Discount * el.BasePrice / 100;\r\n\r\n                    if (el.ItemDiscount === 0) {\r\n                        el.FinalPrice = el.BasePrice;\r\n                        // el.CustomDiscountType = null;\r\n                    } else\r\n                        el.FinalPrice = ext.helperService.DEARRound(el.BasePrice - el.ItemDiscount, 2);\r\n                }\r\n\r\n                el.FinalAmount = ext.helperService.DEARRound(el.FinalPrice * el.Count, 2);\r\n                el.ItemDiscount = ext.helperService.DEARRound(el.ItemDiscount, 2);\r\n            }\r\n        });\r\n\r\n        // reprocess here price based barcode products\r\n        currentSale.CheckoutItems.forEach(el => {\r\n            if (el.CanEdit && el.PriceBasedValue) {\r\n                if (el.FinalPrice > 0) {\r\n                    el.Count = ext.helperService.DEARRound(el.PriceBasedValue / el.FinalPrice, 4);\r\n                } else {\r\n                    el.FinalAmount = 1;\r\n                }\r\n\r\n                el.FinalAmount = ext.helperService.DEARRound(el.FinalPrice * el.Count, 2);\r\n            }\r\n        });\r\n\r\n        total = CalculatorHelperService.getCheckoutSum(currentSale);\r\n        //const prevDiscountValue = currentSale.Discount;\r\n\r\n        //            var bestTotalDiscount = orderBy(results, 'discount', true)[0];\r\n        const bestTotalDiscount = Enumerable.from(results).orderByDescending(k => k.discount).firstOrDefault();\r\n\r\n        if (currentSale.keepTotalDiscount !== true && currentSale.ManuallyAppliedDiscount !== true) {\r\n            if (bestTotalDiscount && bestTotalDiscount.discount > 0) {\r\n                currentSale.Discount = ext.helperService.DEARRound(bestTotalDiscount.discount > total ? total : bestTotalDiscount.discount, 2);\r\n                currentSale.IsDiscountPercent = false;\r\n            } else {\r\n                currentSale.Discount = 0;\r\n            }\r\n        }\r\n\r\n        if (currentSale.ManuallyAppliedDiscount === true && currentSale.keepTotalDiscount !== true) {\r\n            currentSale.keepTotalDiscount = false;\r\n\r\n            var message = ext.gettextCatalog.getString(\"Please note that the total discount has been updated.\");\r\n            var skipwarn = localStorage.getItem('SkipDiscountSaleWarnMessage') === 'true';\r\n            if (!skipwarn) {\r\n                ext.helperService.showCustomDialog3(ext.gettextCatalog.getString('Warning'), message,\r\n                    ext.gettextCatalog.getString('OK'), '', false, true, skipwarn, function (val) {\r\n                        localStorage.setItem('SkipDiscountSaleWarnMessage', val);\r\n                    });\r\n            }\r\n        }\r\n    }\r\n}","import {\r\n    IPartialCalculator,\r\n    IPartialCalculatorOptions,\r\n    IPartialCalculatorExecutionOptions,\r\n    IInputData,\r\n    IOutputData\r\n} from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel } from \"../Enums\";\r\nimport { Sale } from \"../Sale\";\r\n\r\n\r\nexport class FinalCalculator implements IPartialCalculator {\r\n\r\n    getOptions(): IPartialCalculatorOptions {\r\n        return <IPartialCalculatorOptions>{\r\n            executionOptions: [\r\n                <IPartialCalculatorExecutionOptions>{\r\n                    type: CalculationType.Checkout,\r\n                    order: StartCalcLevel.Final + 10\r\n                }\r\n            ]\r\n        };\r\n    }\r\n\r\n    calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n        // go through all checkout items and calculate taxes and sum them\r\n        const sale = Sale.create(inputData.sale); // in case if it's not sale object - create it\r\n        const scope = inputData.scope;\r\n\r\n        if (scope) {\r\n            // save sale should be at the end of all calculations\r\n            ext.helperService.storeCurrentSale(sale, scope);\r\n        }\r\n\r\n        return <IOutputData>{processResult: true};\r\n    }\r\n}","import { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel, PaymentShortNameStandardType } from \"../Enums\";\r\nimport { ISale } from \"../Interfaces\";\r\n\r\n\r\n    export class LoyaltyCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.Payments,\r\n                        order: StartCalcLevel.Loyalty + 10\r\n                    },\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.RefundPayments,\r\n                        order: StartCalcLevel.Loyalty + 10\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            const sale = inputData.sale;\r\n\r\n            if (sale.Payments && !ext.configService.loyaltyLionToken && sale.Customer.EnableLoyaltyPoints) {\r\n                const pm = new Map<string, number>();\r\n                sale.Payments.forEach(p => {\r\n                    if (p.ShortName !== PaymentShortNameStandardType.Discount &&\r\n                        p.ShortName !== PaymentShortNameStandardType.Rounding &&\r\n                        p.ShortName !== PaymentShortNameStandardType.Loyalty) {\r\n                        // take into account that we should substract surcharges\r\n                        // because surcharge is outside fee and do not relate to merchant business\r\n                        // so client can not get points for this amount\r\n                        const samount = (p.Surcharge && p.Surcharge.CalculatedValueWithTax) ? p.Surcharge.CalculatedValueWithTax : 0;\r\n                        pm.set(p.ID, p.Amount - samount);\r\n                    }\r\n                });\r\n\r\n                const res = this.calculateLoyalty(sale, pm);\r\n                // set loyalty into payments\r\n                sale.Payments.forEach(p => {\r\n                    if (res.has(p.ID)) {\r\n                        p.Loyalty = res.get(p.ID);\r\n                    }\r\n                });\r\n\r\n                sale.LoyaltyPointsTotal = sale.calculateTotalLoyalty();\r\n                sale.LoyaltyPoints = sale.calculateSessionLoyalty();\r\n            }\r\n\r\n            return <IOutputData>{ processResult: true };\r\n        }\r\n\r\n        /*\r\n         Calculates proposed loyalty based on loyalty ratio for each\r\n         item in the checkout. So checkout items should contain loyalty ratio\r\n         result sign automatically depends on the total payments sign\r\n         sale - current sale with correct checkout items\r\n\r\n         Take into account that in new sale design we will have prices always positive but count can be negative in case of refund\r\n         this is for our internal sale presentation\r\n         amounts - is map of amounts and keys\r\n        */\r\n        private calculateLoyalty(sale: ISale, amounts: Map<string, number>): Map<string, number> {\r\n            const res = new Map<string, number>();\r\n\r\n            if (ext.configService.enableLoyalty !== true) return res;\r\n\r\n            const checkoutItems = sale.CheckoutItems;\r\n\r\n            // calculate all payments sum that client should really pay\r\n            // for current sale state. Sum can be <0 if system should return\r\n            // money to customer.\r\n            // Also each product can hase its own layalty ratio\r\n            // it means that even if there is no money to return/pay == 0,\r\n            // loylaty change can be != 0\r\n            //const total = amount;\r\n\r\n            // now calculate ratio of each product in checkout\r\n            // positive amount - earn loyalty\r\n            // negative amount - return loyalty\r\n\r\n            let sumRefund = 0;\r\n            let sumSale = 0;\r\n\r\n            // get total sum for new items\r\n            // do the same for refund items\r\n            checkoutItems.forEach(el => {\r\n                if (el.FinalAmount > 0) sumSale += el.FinalAmount;\r\n                else if (el.FinalAmount < 0) sumRefund += el.FinalAmount;\r\n            });\r\n\r\n            // set items layout ratio per single unit (this is why it's divided by Count)\r\n            checkoutItems.forEach(el => {\r\n                if (el.FinalAmount > 0 && sumSale != 0)\r\n                    el.LoyaltyRatio = Math.abs(el.LoyaltyPointsEarning * el.FinalAmount / el.Count / sumSale); // absolute loyalty ratio\r\n                else if (el.FinalAmount < 0 && sumRefund != 0)\r\n                    el.LoyaltyRatio = Math.abs(el.LoyaltyPointsEarning * el.FinalAmount / el.Count / sumRefund); // absolute loyalty ratio\r\n                else el.LoyaltyRatio = 0;\r\n            });\r\n\r\n            // current refund|pay amount\r\n            let separatePaySum = 0;\r\n            let separateReturnSum = 0;\r\n            checkoutItems.forEach(el => {\r\n                if (el.FinalAmount > 0) separatePaySum += Math.abs(el.FinalAmount);\r\n                else if (el.FinalAmount < 0) {\r\n                    separateReturnSum += Math.abs(el.FinalAmount);\r\n                }\r\n            });\r\n\r\n            const isRefund = separateReturnSum > 0 && separatePaySum === 0;\r\n\r\n            Array.from(amounts.keys()).forEach(k => {\r\n\r\n                let currentLoyaltySum = 0;\r\n                const total = amounts.get(k);\r\n\r\n                // if total sum >0 it means we have direct sale or exchange with extra pay\r\n                // so total sum to use in loyalty is: full refund + total\r\n                if (total > 0 || (total === 0 && !isRefund)) {\r\n\r\n                    // calc loyalty earning\r\n                    checkoutItems.forEach(el => {\r\n                        if (el.FinalAmount > 0) // earning\r\n                            currentLoyaltySum += el.LoyaltyRatio * Math.abs(el.Count) * (separateReturnSum + total);\r\n                        else if (el.FinalAmount < 0) // returning /// separateReturnSum should be negative otherwise we will receive loyalty for exchanged amount twice\r\n                            currentLoyaltySum -= el.LoyaltyRatio * Math.abs(el.Count) * separateReturnSum;\r\n                    });\r\n                } else {\r\n                    // in this case we refund difference\r\n                    // calc loyalty earning\r\n                    checkoutItems.forEach(el => {\r\n                        if (el.FinalAmount > 0) // earning\r\n                            currentLoyaltySum += el.LoyaltyRatio * Math.abs(el.Count) * separatePaySum;\r\n                        else if (el.FinalAmount < 0) // returning\r\n                            currentLoyaltySum -= Math.abs(el.LoyaltyRatio * Math.abs(el.Count) * (separatePaySum + Math.abs(total)));\r\n                    });\r\n                }\r\n\r\n                res.set(k, currentLoyaltySum);\r\n            });\r\n\r\n            checkoutItems.forEach(el => delete el.LoyaltyRatio);\r\n\r\n            return res;\r\n        };\r\n\r\n    }","import Enumerable from \"linq\";\r\nimport { CalculatorHelperService } from \"../CalculatorHelperService\";\r\nimport { CheckoutItem } from \"../CheckoutItem\";\r\nimport { Sale } from \"../Sale\";\r\nimport { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel, SaleType, CustomDiscountType } from \"../Enums\";\r\nimport { ISale, ICheckoutItem, ProductType } from \"../Interfaces\";\r\n\r\n\r\n    export class NativePricesCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.Checkout,\r\n                        order: StartCalcLevel.Setup + 10\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        chooseProductTierPrice(s: ISale, pc: ICheckoutItem): number {\r\n            const sale = <Sale>s;\r\n            const p = <CheckoutItem>pc;\r\n\r\n            if (p && ext.configService.useCustomerPriceTier === true &&\r\n                sale.customer &&\r\n                sale.customer.PriceTier &&\r\n                p.SaleType !== SaleType.CustomSale &&\r\n                p.ProductType !== ProductType.GiftCard &&\r\n                pc.CustomDiscountType !== CustomDiscountType.StandAloneReturn\r\n            ) {\r\n                const tier = Number(sale.customer.PriceTier.substr('Tier '.length));\r\n                if (tier >= 1 && tier <= 10) {\r\n                    let extra: any = p;\r\n                    // input product object can contain parsed prices or packed into ExtraInfo\r\n                    if (p.ExtraInfo)\r\n                        extra = JSON.parse(p.ExtraInfo);\r\n\r\n                    var val = extra['Price' + tier];\r\n                    if (!val) val = 0;\r\n\r\n                    return val;\r\n                }\r\n            }\r\n\r\n            return !p.DefaultPrice ? p.BasePrice : p.DefaultPrice;\r\n        }\r\n\r\n        /*\r\n          If new items are specified, they will be added\r\n          If remove items are specified they will be deleted\r\n          After that all will be recalculated\r\n         */\r\n        calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            const sale = inputData.sale;\r\n\r\n            if (!sale.CheckoutItems)\r\n                sale.CheckoutItems = new Array<ICheckoutItem>();\r\n\r\n            if (inputData.checkoutItems) {\r\n                if (inputData.checkoutItems.itemsToDelete) {\r\n                    const dic = Enumerable.from(inputData.checkoutItems.itemsToDelete).toDictionary(k => k, v => true);\r\n\r\n                    sale.CheckoutItems =\r\n                        Enumerable.from(sale.CheckoutItems).where(k => !dic.contains(k.ID)).toArray();\r\n                }\r\n\r\n                if (inputData.checkoutItems.itemsToAdd) {\r\n                    inputData.checkoutItems.itemsToAdd.forEach(c => {\r\n                        const item = CalculatorHelperService.convertCheckoutItem(c);\r\n                        sale.CheckoutItems.push(item);\r\n                    });\r\n                }\r\n            }\r\n\r\n            const m = new Map<string, ICheckoutItem>();\r\n            const checkTaxes = inputData.checkTaxes === true;\r\n\r\n            Enumerable.from(sale.CheckoutItems)\r\n                .where(c => c.CanEdit !== false) // if item is fixed, do not change it\r\n                .forEach(c => {\r\n                    // fill some fields\r\n                    const price = this.chooseProductTierPrice(sale, c);\r\n                    if (checkTaxes) {\r\n                        const taxObject = CalculatorHelperService.getTaxObject(sale, c);\r\n\r\n                        if (taxObject && c.TaxRuleID !== taxObject.TaxRuleID) {\r\n                            c.TaxRuleID = taxObject.TaxRuleID;\r\n                            c.EffectiveInclusiveTaxPercent = taxObject.EffectiveInclusiveTaxPercent;\r\n                            c.EffectiveExclusiveTaxPercent = taxObject.EffectiveExclusiveTaxPercent;\r\n                        }\r\n                    }\r\n                    c.BasePrice = ext.helperService.DEARRound(price, 2);\r\n                    c.FinalPrice = c.BasePrice; // for the moment we don't know about any discounts\r\n                    c.FinalTaxAmount = 0;\r\n                    c.ItemDiscount = 0;\r\n                    c.FinalAmount = ext.helperService.DEARRound(c.FinalPrice * c.Count, 2); // amount per line\r\n                    // due to discount calculations might split some items we need to group them back for correct\r\n                    // repeated discount calculations\r\n                    const key = this.checkoutItemKey(c, inputData.scope && inputData.scope.saleType === 'standaloneExchange' ? c.Return : undefined);\r\n\r\n                    if (m.has(key)) {\r\n                        const itm = m.get(key);\r\n                        itm.Count += c.Count;\r\n                        itm.FinalAmount += c.FinalAmount;\r\n                        itm.FinalAmount = ext.helperService.DEARRound(itm.FinalAmount, 6); // to exclude roundong error\r\n                    } else {\r\n                        m.set(key, c);\r\n                    }\r\n                });\r\n\r\n            // update sale checkout\r\n            sale.CheckoutItems = Array.from(m.values()).concat(sale.CheckoutItems.filter(c => c.CanEdit !== true));\r\n\r\n            return <IOutputData>{ processResult: true };\r\n        }\r\n\r\n        checkoutItemKey(item: ICheckoutItem, isReturn?: boolean): string {\r\n            if (!item) return '';\r\n            let key = `@@1@@${item.ProductID}@@2@@${item.SerialNumber}@@3@@`;\r\n\r\n            if(isReturn !== undefined)\r\n            {\r\n                key += isReturn;\r\n            }\r\n\r\n            if (item.ProductType == ProductType.GiftCard) key += item.GiftCardCode; // Do not merge gift cards\r\n\r\n            return key;\r\n        }\r\n    }","//import angular from \"angular\";\r\nimport { CalculatorHelperService } from \"../CalculatorHelperService\";\r\nimport { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel, HistoryActionMode, SaleType } from \"../Enums\";\r\nimport { ICheckoutItem, ISale, IAPIProduct } from \"../Interfaces\";\r\nimport { IAngularStatic } from 'angular';\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\n\r\n    export class RefundCheckoutSetupCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.RefundCheckout,\r\n                        order: StartCalcLevel.Setup + 10\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            const sale = inputData.sale;\r\n            const isChainedRefundAllowed = CalculatorHelperService.isChainedRefundAllowed(inputData.selectedItem);\r\n            const actionMode = inputData.actionMode;\r\n            const discountCoeff = CalculatorHelperService.getSaleDiscountCoefficient(sale);\r\n\r\n            // const refundsCopy = <Array<IAPIRefund>>angular.copy(sale.Refunds);\r\n            const refundsCopy = angular.copy(inputData.selectedItem.Data.Refunds);\r\n\r\n            inputData.refundsCopy = refundsCopy;\r\n            \r\n            // in chained refund we start refund as for non refunded sale\r\n            // for only sold items\r\n            if (isChainedRefundAllowed === true) {\r\n                // refundsCopy =  null;\r\n                // leave only newly sold items\r\n                sale.CheckoutItems = this.getSoldOnlyItems(sale);\r\n            }\r\n\r\n            // collect all items from sale and refunds for this sale\r\n            this.collectItems(inputData);\r\n            this.appendRefundedItems(inputData);\r\n\r\n            //sale.ReturnItems = sale.CheckoutItems;\r\n            sale.ReturnItems = angular.copy(sale.CheckoutItems);\r\n\r\n            const cmap = new Map<string, ICheckoutItem>();\r\n\r\n            sale.CheckoutItems.forEach(c => cmap.set(c.ID, c));\r\n\r\n            sale.ReturnPayments = sale.Payments;\r\n\r\n            if (sale.ReturnItems) {\r\n                sale.ReturnItems.forEach(el => {\r\n                    el.MaxCount = el.Count;\r\n                    if (inputData.selectedItem.canContinue == true || inputData.selectedItem.IsPartialPaid == true) {\r\n                        el.MinCount = el.Count;\r\n                        el.Return = true;\r\n                    }\r\n                    else {\r\n                        el.Return = false; \r\n                        el.MinCount = el.Count === 0 ? 0 : 1;\r\n                    }\r\n                    \r\n                    // not yet refunded so reduce prices by order discount value\r\n                    if (actionMode === HistoryActionMode.SaleRefund) {\r\n                        const cel = cmap.get(el.ID);\r\n\r\n                        el.FinalPrice = cel.FinalPrice * discountCoeff;\r\n                        el.FinalAmount = cel.FinalAmount * discountCoeff;\r\n                        el.FinalTaxAmount = cel.FinalTaxAmount * discountCoeff;\r\n                    }\r\n                    \r\n                    if (el.BaseCount === undefined || el.BaseCount == null)\r\n                        el.BaseCount = el.Count; // initial item count for which Tax and Amount were calculated\r\n                });\r\n            }\r\n\r\n            sale.CheckoutItems = [];\r\n            sale.Payments = [];\r\n\r\n            sale.ReturnLoyaltyPoints = (sale.Customer && sale.Customer.ID) ? true : false;\r\n\r\n            return <IOutputData>{\r\n                processResult: true,\r\n                refundsCopy: refundsCopy\r\n            };\r\n        }\r\n\r\n        getSoldOnlyItems(sale: ISale) {\r\n            var items = sale.CheckoutItems;\r\n            var soldItems = items.filter(function (itm) { return itm.Return !== true && itm.FinalAmount >= 0; });\r\n            return soldItems;\r\n        }\r\n\r\n        /*\r\n         Collect all items for this sale. Sale can contain a list of refund sales, so we need to collect them as well\r\n         Collect will take place based on product id and item price.\r\n         */ \r\n        private collectItems(inputData: IInputData): void {\r\n            const sale = inputData.sale;\r\n            const refundsCopy = inputData.refundsCopy;\r\n\r\n            const discountCoeff = CalculatorHelperService.getSaleDiscountCoefficient(sale);\r\n\r\n            if (refundsCopy && refundsCopy.length > 0 && sale.CheckoutItems &&\r\n                sale.CheckoutItems.length > 0) {\r\n                sale.CheckoutItems.forEach(item => {\r\n                    refundsCopy.forEach(refItem => {\r\n                        if (refItem.Lines) {\r\n                            refItem.Lines.forEach(refLine => {\r\n                                //if (item.BaseCount === undefined || item.BaseCount == null)\r\n                                //    item.BaseCount = item.Count; // initial item count for which Tax and Amount were calculated\r\n\r\n                                if (refLine.Quantity < 0) {\r\n                                    // price comparing\r\n                                    if (this.itemComparator(item, refLine, sale.IsTaxInclusive, discountCoeff)) {\r\n                                        item.Count += refLine.Quantity;\r\n                                        refLine.Quantity = 0;\r\n                                    }\r\n                                }\r\n                            });\r\n                        }\r\n                    });\r\n                });\r\n            }\r\n        }\r\n\r\n        private appendRefundedItems(inputData: IInputData): void {\r\n            const sale = inputData.sale;\r\n            const selectedSale = inputData.selectedItem.Data;\r\n            const discountCoeff = 1;//CalculatorHelperService.getSaleDiscountCoefficient(sale);\r\n\r\n            if (sale.CheckoutItems && sale.CheckoutItems.length > 0 &&\r\n                selectedSale && selectedSale.Lines) {\r\n                sale.CheckoutItems.forEach(item => {\r\n                    selectedSale.Lines.forEach(refLine => {\r\n                        // price comparing\r\n                        if (this.itemComparator(item, refLine, sale.IsTaxInclusive, discountCoeff)) {\r\n                            item.Count = refLine.Quantity - refLine.refundQuantity;// | 0;\r\n                        }\r\n                    });\r\n                });\r\n            }\r\n        }\r\n\r\n        private itemComparator(item: ICheckoutItem, refLine: IAPIProduct, isTaxInclusive: boolean, discountCoeff: number): boolean {\r\n            // price comparing\r\n            // take into account that on exclusive tax OverriddenPrice contains tax but line.Price - does not.\r\n            //const isPricesEqual = ext.helperService.DEARRound(\r\n            //    item.FinalAmount + (isTaxInclusive !== true ? item.FinalTaxAmount : 0), 2) ===\r\n            //    ext.helperService.DEARRound(refLine.OverriddenPrice / discountCoeff * item.Count, 2);\r\n            const isPricesEqual = ext.helperService.DEARRound(item.FinalAmount * discountCoeff, 4) ===\r\n                ext.helperService.DEARRound(refLine.TotalPerLine, 4);\r\n\r\n            if (item.Name.indexOf('(Surcharge)') == -1 && isPricesEqual &&\r\n                ((item.SaleType === SaleType.Sale &&\r\n                    (refLine.IsProduct == true || refLine.IsGiftCard == true) &&\r\n                    refLine.ProductID === item.ProductID &&\r\n                    refLine.GiftCardCode === (item.GiftCardCode === undefined ? null : item.GiftCardCode) &&\r\n                    (!item.SerialNumber || item.SerialNumber === refLine.SerialNumber))\r\n                    ||\r\n                    (item.SaleType === SaleType.CustomSale &&\r\n                        refLine.IsProduct == false &&\r\n                        item.Name == refLine.Name))\r\n            ) {\r\n                return true;\r\n            }\r\n\r\n            return false;\r\n        }\r\n    }","import { CalculatorHelperService } from \"../CalculatorHelperService\";\r\nimport { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel } from \"../Enums\";\r\nimport { ICheckoutItem } from \"../Interfaces\";\r\nimport { IAngularStatic } from 'angular';\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\n\r\n    export class RefundCheckoutSubmitCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.RefundCheckout,\r\n                        order: StartCalcLevel.RefundSubmit + 10\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            const sale = inputData.sale;\r\n\r\n            sale.ReturnItems.forEach(el => {\r\n                let returnItem = <ICheckoutItem>angular.copy(el);\r\n                //const discountCoeff = CalculatorHelperService.getSaleDiscountCoefficient(sale);\r\n\r\n                returnItem.Count = -1 * el.Count;\r\n                // we need to reduce price by order discount value to refund correctly\r\n                // in refund we include in product price all discounts thet were took place\r\n                //returnItem.FinalPrice = el.FinalPrice * discountCoeff;\r\n                //returnItem.FinalAmount = -1 * el.FinalAmount * discountCoeff;\r\n                //returnItem.FinalTaxAmount = -1 * el.FinalTaxAmount * discountCoeff;\r\n                //returnItem.BaseTax = -1 * el.FinalTaxAmount * Math.abs(el.Count) * discountCoeff / Math.abs(el.BaseCount); // final tax per single item in line\r\n                //returnItem.ItemDiscount = -1 * el.ItemDiscount * discountCoeff;\r\n                returnItem.FinalAmount = -1 * el.Count * el.FinalPrice;\r\n                returnItem.FinalTaxAmount = -1 * CalculatorHelperService.calculateTax3(el, sale.IsTaxInclusive, el.Count * el.FinalPrice);\r\n                returnItem.BaseTax = el.FinalTaxAmount / Math.abs(el.Count); // final tax per single item in line\r\n                returnItem.ItemDiscount = -1 * el.ItemDiscount;\r\n                returnItem.BasePrice = el.BasePrice;\r\n                returnItem.Discount = -1 * el.Discount;\r\n                returnItem.LoyaltyPointsEarning *= -1;\r\n                returnItem.CanEdit = false;\r\n                returnItem.Sign = -1;\r\n\r\n                // remove item from checkout\r\n                sale.CheckoutItems = sale.CheckoutItems.filter(el => el.ID !== returnItem.ID);\r\n\r\n                if (el.Return === true) {\r\n                    sale.CheckoutItems.push(returnItem);\r\n                }\r\n            });\r\n\r\n            return <IOutputData>{\r\n                processResult: true\r\n            };\r\n        }\r\n    }","import Enumerable from \"linq\";\r\nimport { CalculatorHelperService } from \"../CalculatorHelperService\";\r\nimport { convertFromOld } from \"../ConverterService\";\r\nimport { Sale } from \"../Sale\";\r\nimport { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel, TaxCalculationMethod, PaymentShortNameStandardType, FinancialStatusType } from \"../Enums\";\r\nimport { ICardValidation, IPaymentValidation, IGroupedSale, IPayment, IAPIPayment, ICustomValidation } from \"../Interfaces\";\r\n\r\n    export class RefundLimitsCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.RefundPayments,\r\n                        order: StartCalcLevel.RefundLimits + 10\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            // go through all checkout items and calculate taxes and sum them\r\n            const sale = <Sale>inputData.sale;\r\n            const paymentValidation = inputData.paymentValidation;\r\n\r\n            if (!paymentValidation) return;\r\n\r\n            // get total sum to refund via checkout items. order level discount should be already applied to checkout items\r\n            let total = Enumerable.from(sale.CheckoutItems)\r\n                .select(s => ext.helperService.DEARRound(-1 * s.FinalAmount, 2))\r\n                .sum();\r\n\r\n            let taxModePresision = ext.configService.taxCalculationMethod === TaxCalculationMethod.RowTotal ? 2 : 4;\r\n            if (!sale.TaxModePresision)\r\n                sale.TaxModePresision = taxModePresision;\r\n            else\r\n                taxModePresision = sale.TaxModePresision;\r\n\r\n            if (!sale.IsTaxInclusive) {\r\n                const tax = Enumerable.from(sale.CheckoutItems)\r\n                    .sum(el => ext.helperService.DEARRound(CalculatorHelperService.calculateTax2(el, false), taxModePresision));\r\n\r\n                total += -tax;\r\n            }\r\n\r\n            const nativeSale = inputData.selectedItem ? <Sale>convertFromOld(inputData.selectedItem.RawSaleObject) : null;\r\n\r\n            // collect sums from previous refunds and reduce\r\n            // available amounts in future\r\n            this.collectValidatorSums(paymentValidation, sale.GroupedSale, inputData.operationSubName === 'continue' && nativeSale ? nativeSale.Payments : [], inputData.operationSubName === 'continue' ? total : null);\r\n            if (nativeSale) {\r\n                this.collectRoundingNDetectExchange(inputData);\r\n            }\r\n\r\n            const newCardTotalSum = ext.cardPayService.removeFullyUsedCards(paymentValidation.cardPayments);\r\n            // correct card validation amount\r\n            paymentValidation.creditCardAmount = newCardTotalSum;\r\n\r\n            if (nativeSale && inputData.fullReturn && nativeSale.CashRounding && nativeSale.CashRounding !== 0) {\r\n\r\n                // first return and return whole sale\r\n                total += ext.helperService.DEARRound(nativeSale.CashRounding, 2);\r\n            } else {\r\n                sale.CashRounding = 0;\r\n            }\r\n\r\n            sale.FullReturnRounding = 0;\r\n\r\n            if (inputData.lastItemReturn && !inputData.fullReturn) {\r\n\r\n                // when not all cash refunded\r\n\r\n                if (inputData.hasExchange == false) {\r\n                    // available to refund by all payment types\r\n                    const totalRemaining = sale.GroupedSale.TotalSale;\r\n\r\n                    if (total != totalRemaining) {\r\n                        total = totalRemaining;\r\n                    }\r\n                }\r\n                else {\r\n                    let estimatedRounding = ext.helperService.DEARRound(inputData.additionalEstimateTotal, 2);\r\n                    if (nativeSale.CashRounding && nativeSale.CashRounding !== 0) {\r\n                        estimatedRounding += ext.helperService.DEARRound(nativeSale.CashRounding, 2);\r\n                        estimatedRounding = ext.helperService.DEARRound(estimatedRounding, 2);\r\n                    }\r\n\r\n                    total += estimatedRounding;\r\n                }\r\n            }\r\n\r\n            let orderTotal = 0;\r\n\r\n            if (nativeSale && !sale.IsExchange) {\r\n                if (inputData.selectedItem.IsPartialPaid === true) {\r\n                    orderTotal = Math.abs(CalculatorHelperService.getOldPartialPayments(nativeSale));\r\n                    total = ext.helperService.DEARRound(orderTotal, 2);\r\n                }\r\n                else\r\n                    orderTotal = Math.abs(CalculatorHelperService.getCheckoutSum(nativeSale) + nativeSale.CashRounding);\r\n            } else\r\n                orderTotal = total;\r\n\r\n            orderTotal = ext.helperService.DEARRound(orderTotal, 2);\r\n\r\n            const oldReturnPayments = nativeSale ? this.oldReturnPayments(inputData) : 0;\r\n            const oldLoyaltyPayments = nativeSale ? this.oldReturnPayments(inputData, 'loyalty') : 0;\r\n\r\n            const allPartialPayment = nativeSale && inputData.selectedItem ? -1 * CalculatorHelperService.getAllPartialPayment(nativeSale, inputData.selectedItem) : 0;\r\n            var totalWithOldReturnPayments = total + oldReturnPayments;\r\n\r\n            if (nativeSale && nativeSale.IsDirect && this.canReturnPartiallyPaid(nativeSale) === true) {\r\n                // this takes place for continue refund. Amount can be zero\r\n                if (allPartialPayment >= 0 && orderTotal > allPartialPayment)\r\n                    this.adjustLimits(paymentValidation, orderTotal, -allPartialPayment, totalWithOldReturnPayments);\r\n                // this takes place on refund of partial paid sale. allPartialPayment always less than zero.\r\n                else if (allPartialPayment < 0 && orderTotal > -allPartialPayment)\r\n                    this.adjustLimits(paymentValidation, -allPartialPayment, 0, totalWithOldReturnPayments);\r\n\r\n                // if first refund of direct sale, allPartialPayment<0, orderTotal == 0\r\n                if (Math.abs(paymentValidation.cashAmount) > Math.abs(paymentValidation.storeCreditAmount))\r\n                    paymentValidation.storeCreditAmount = paymentValidation.cashAmount;\r\n                if (Math.abs(paymentValidation.cashAmount) > Math.abs(paymentValidation.loyaltyPointsAmount))\r\n                    paymentValidation.loyaltyPointsAmount = paymentValidation.cashAmount;\r\n            }\r\n            else {\r\n                paymentValidation.loyaltyPointsAmount += oldLoyaltyPayments;\r\n                if (paymentValidation.loyaltyPointsAmount < 0) paymentValidation.loyaltyPointsAmount = 0;\r\n                this.adjustLimits(paymentValidation, total, oldReturnPayments, totalWithOldReturnPayments);\r\n            }\r\n\r\n            if (sale.GroupedSale)\r\n                sale.GroupedSale.TotalToRefund = ext.helperService.DEARRound(totalWithOldReturnPayments, 2);\r\n\r\n            paymentValidation.cashAmount = ext.helperService.DEARRound(paymentValidation.cashAmount, 2);\r\n            paymentValidation.creditCardAmount = ext.helperService.DEARRound(paymentValidation.creditCardAmount, 2);\r\n            paymentValidation.storeCreditAmount = ext.helperService.DEARRound(paymentValidation.storeCreditAmount, 2);\r\n            paymentValidation.loyaltyPointsAmount = ext.helperService.DEARRound(paymentValidation.loyaltyPointsAmount, 2);\r\n\r\n            this.prepareSurchargeLimits(inputData);\r\n\r\n            paymentValidation.customPayments.forEach(p => p.validationAmount = ext.helperService.DEARRound(p.validationAmount, 6));\r\n            const map = <Array<ICardValidation>>ext.helperService.mapToList(paymentValidation.cardPayments);\r\n            map.forEach(p => p.validationAmount = ext.helperService.DEARRound(p.validationAmount, 6));\r\n\r\n            return <IOutputData>{\r\n                processResult: true\r\n            };\r\n        }\r\n\r\n        private oldReturnPayments(inputData: IInputData, typeFilter: string = null): number {\r\n            let sum = 0;\r\n            if (inputData.operationSubName === 'continue' && inputData.sale.Payments) {\r\n                // calc sum without any surcharges\r\n                if (!typeFilter) {\r\n                    sum = Enumerable.from(inputData.sale.Payments)\r\n                        .sum(p => this.getAmountWithoutSurcharge(p));\r\n                } else {\r\n                    sum = Enumerable.from(inputData.sale.Payments)\r\n                        .where(p => p.ShortName === typeFilter)\r\n                        .sum(p => this.getAmountWithoutSurcharge(p));\r\n                }\r\n            }\r\n\r\n            return sum;\r\n        }\r\n\r\n        private collectRoundingNDetectExchange(inputData: IInputData): void {\r\n            inputData.hasExchange = false;\r\n            inputData.additionalEstimateTotal = 0;\r\n\r\n            if (!inputData.isContinueReturn) {\r\n                const refunds = !inputData.selectedItem.Data.InitialRefunds ?\r\n                    inputData.selectedItem.Data.Refunds : inputData.selectedItem.Data.InitialRefunds;\r\n\r\n                if (refunds && refunds.length > 0) {\r\n                    if (inputData.fullReturn)\r\n                        inputData.lastItemReturn = true;\r\n                    else\r\n                        inputData.lastItemReturn = false;\r\n\r\n                    inputData.fullReturn = false;\r\n                    refunds.forEach(ref => {\r\n\r\n                        if (ref.Lines.filter(l => l.Quantity > 0).length > 0)\r\n                            inputData.hasExchange = true;\r\n\r\n                        inputData.additionalEstimateTotal += Enumerable.from(ref.Payments)\r\n                            .where(p => p.ShortName === PaymentShortNameStandardType.Rounding)\r\n                            .sum(p => p.Amount);\r\n\r\n                        //// TODO ? looks like never executed code\r\n                        //inputData.additionalEstimateTotal += Enumerable.from(ref.Lines)\r\n                        //    .where(l => l.ProductName === 'Rounding')\r\n                        //    .sum(l => ext.helperService.DEARRound(l.Quantity * l.TotalPerLine, 2));\r\n                    });\r\n                }\r\n            }\r\n\r\n        }\r\n\r\n        /*\r\n         adjust limits with already done partial payments\r\n         */\r\n        private adjustLimits(paymentValidation: IPaymentValidation, total: number, correctionAmount: number, limit: number): void {\r\n            if (total > 0 && paymentValidation.loyaltyPointsAmount > 0) { // loyalty cannot be refunded to any cash channels\r\n                total -= paymentValidation.loyaltyPointsAmount;\r\n            }\r\n\r\n            paymentValidation.cashAmount = total + correctionAmount;\r\n            if (paymentValidation.cashAmount < 0)\r\n                paymentValidation.cashAmount = 0;\r\n\r\n            paymentValidation.storeCreditAmount = total + correctionAmount;\r\n            if (paymentValidation.storeCreditAmount < 0)\r\n                paymentValidation.storeCreditAmount = 0;\r\n            //            paymentValidation.loyaltyPointsAmount = total + correctionAmount;\r\n            // paymentValidation.creditCardAmount = total + correctionAmount;\r\n\r\n            if (paymentValidation.cashAmount > limit) paymentValidation.cashAmount = limit;\r\n            if (paymentValidation.storeCreditAmount > limit) paymentValidation.storeCreditAmount = limit;\r\n            if (paymentValidation.loyaltyPointsAmount > limit) paymentValidation.loyaltyPointsAmount = limit;\r\n            if (paymentValidation.creditCardAmount > limit) paymentValidation.creditCardAmount = limit;\r\n\r\n            Object.getOwnPropertyNames(paymentValidation.cardPayments).forEach(n => {\r\n                const p = paymentValidation.cardPayments[n];\r\n                p.validationAmount = p.validationAmount > limit ? limit : p.validationAmount;\r\n            });\r\n\r\n            paymentValidation.customPayments.forEach(p =>\r\n                p.validationAmount = p.validationAmount > limit ? limit : p.validationAmount);\r\n\r\n            // rounding all\r\n            paymentValidation.cashAmount = ext.helperService.DEARRound(paymentValidation.cashAmount, 2);\r\n            paymentValidation.storeCreditAmount = ext.helperService.DEARRound(paymentValidation.storeCreditAmount, 2);\r\n            paymentValidation.loyaltyPointsAmount = ext.helperService.DEARRound(paymentValidation.loyaltyPointsAmount, 2);\r\n            paymentValidation.creditCardAmount = ext.helperService.DEARRound(paymentValidation.creditCardAmount, 2);\r\n\r\n            paymentValidation.customPayments.forEach(p => {\r\n                p.validationAmount = ext.helperService.DEARRound(p.validationAmount, 2);\r\n            });\r\n        }\r\n\r\n        private collectValidatorSums(paymentValidation: IPaymentValidation, groupedSale: IGroupedSale, currentPayments: Array<IPayment>, limitValue: number = null): void {\r\n            if (!groupedSale) return;\r\n\r\n            const plist = <Array<IAPIPayment>>ext.helperService.mapToList(groupedSale.PaymentsMap);\r\n            CalculatorHelperService.clearPaymentValidations(paymentValidation);\r\n\r\n            // refund payment has SaleServerTransactionID if it's card refund\r\n            // by this id we can find initial payment and its limit\r\n            // build map object from SaleServerTransactionID to native payment\r\n            const srvRemap = new Map<string, IAPIPayment>();\r\n\r\n            plist.forEach(el => {\r\n                var ptp = el.ShortName;\r\n                if (ptp.indexOf(PaymentShortNameStandardType.BackofficePayment) === 0)\r\n                    ptp = PaymentShortNameStandardType.BackofficePayment;\r\n\r\n                switch (ptp) {\r\n                    case PaymentShortNameStandardType.Loyalty:\r\n                        paymentValidation.loyaltyPointsAmount += el.Amount;\r\n                        if (limitValue != null && paymentValidation.loyaltyPointsAmount > limitValue)\r\n                            paymentValidation.loyaltyPointsAmount = limitValue;\r\n                        break;\r\n                    case PaymentShortNameStandardType.GiftCard:\r\n                    case PaymentShortNameStandardType.BackofficePayment:\r\n                    case PaymentShortNameStandardType.Cash:\r\n                        paymentValidation.cashAmount += el.Amount;\r\n                        if (limitValue != null && paymentValidation.cashAmount > limitValue)\r\n                            paymentValidation.cashAmount = limitValue;\r\n                        break;\r\n                    case PaymentShortNameStandardType.StoreCredits:\r\n                        paymentValidation.storeCreditAmount += el.Amount;\r\n                        if (limitValue != null && paymentValidation.storeCreditAmount > limitValue)\r\n                            paymentValidation.storeCreditAmount = limitValue;\r\n                        break;\r\n                    case PaymentShortNameStandardType.CreditCard:\r\n                        srvRemap.set(el.ServerTransactionID, el);\r\n                        const ccAmount = this.getAmountWithoutSurcharge(el);\r\n                        paymentValidation.creditCardAmount += ccAmount;\r\n                        if (limitValue != null && paymentValidation.creditCardAmount > limitValue)\r\n                            paymentValidation.creditCardAmount = limitValue;\r\n                        paymentValidation.creditCardAmount = ext.helperService.DEARRound(paymentValidation.creditCardAmount, 2);\r\n\r\n                        ext.cardPayService.addSumToCardPayment(paymentValidation.cardPayments, el.ServerTransactionID, el.ClientTransactionID,\r\n                            ccAmount, el.TransactionMetaData);\r\n\r\n                        if (el.Surcharge && el.Surcharge.RefundSurcharge === true) {\r\n                            paymentValidation.cardPayments[ext.cardPayService.combineKey(el.ServerTransactionID, el.ClientTransactionID)]\r\n                                .Surcharge = el.Surcharge;\r\n                            el.Surcharge.AmountToRefund = 0;\r\n                        }\r\n\r\n                        break;\r\n\r\n                    default:\r\n                        if (!CalculatorHelperService.isStandardPaymentType(el.ShortName)) {\r\n\r\n                            if (el.PaymentProcessorID === \"BackofficePayment\" &&\r\n                                el.ShortName.indexOf(PaymentShortNameStandardType.BackofficePayment) === 0) {\r\n                                el.PaymentProcessorID = el.ShortName.substr(PaymentShortNameStandardType.BackofficePayment.length);\r\n                            }\r\n\r\n                            let ptl = paymentValidation.customPayments.filter(p => p.id === el.ID);\r\n                            let pt: ICustomValidation = null;\r\n\r\n                            if (ptl.length === 0) {\r\n                                // add payment type to return possible list\r\n                                pt = <ICustomValidation>{\r\n                                    shortName: el.ShortName,\r\n                                    customPaymentName: el.PaymentTypeName,\r\n                                    validationAmount: 0,\r\n                                    amount: 0,\r\n                                    id: el.ID\r\n                                };\r\n\r\n                                if (el.Surcharge && el.Surcharge.RefundSurcharge === true) {\r\n                                    pt.Surcharge = el.Surcharge;\r\n                                    pt.Surcharge.AmountToRefund = 0;\r\n                                }\r\n\r\n                                paymentValidation.customPayments.push(pt);\r\n\r\n                            } else {\r\n                                pt = ptl[0];\r\n                                if (pt.Surcharge)\r\n                                    pt.Surcharge.AmountToRefund = 0;\r\n                                pt.amount = 0;\r\n                            }\r\n\r\n                            pt.validationAmount = ext.helperService.DEARRound(this.getAmountWithoutSurcharge(el), 2);\r\n                        }\r\n                        break;\r\n                }\r\n            });\r\n\r\n            currentPayments.forEach(el => {\r\n                if (!CalculatorHelperService.isStandardPaymentType(el.ShortName)) {\r\n\r\n                    if (el.PaymentProcessorID === \"BackofficePayment\" &&\r\n                        el.ShortName.indexOf(PaymentShortNameStandardType.BackofficePayment) === 0) {\r\n                        el.PaymentProcessorID = el.ShortName.substr(PaymentShortNameStandardType.BackofficePayment.length);\r\n                    }\r\n\r\n                    const cp = paymentValidation.customPayments.filter(p => p.shortName === el.ShortName);\r\n                    if (cp.length > 0) {\r\n                        const ccAmount = this.getAmountWithoutSurcharge(el);\r\n                        cp[0].validationAmount += ccAmount;\r\n                        cp[0].validationAmount = ext.helperService.DEARRound(cp[0].validationAmount, 2);\r\n                    }\r\n                } else if (el.ShortName === PaymentShortNameStandardType.CreditCard) {\r\n                    if (srvRemap.has(el.SaleServerTransactionID)) {\r\n                        const iel = srvRemap.get(el.SaleServerTransactionID);\r\n\r\n                        const ccAmount = this.getAmountWithoutSurcharge(el);\r\n                        ext.cardPayService.addSumToCardPayment(paymentValidation.cardPayments,\r\n                            iel.ServerTransactionID, iel.ClientTransactionID, ccAmount);\r\n                    }\r\n                }\r\n            });\r\n\r\n        }\r\n\r\n        private getAmountWithoutSurcharge(payment: IAPIPayment | IPayment): number {\r\n            if (!payment.Surcharge) return payment.Amount;\r\n            return payment.Amount -\r\n                (payment.InitialSurcharge ?\r\n                    payment.InitialSurcharge.CalculatedValueWithTax :\r\n                    payment.Surcharge.CalculatedValueWithTax);\r\n        }\r\n\r\n        private canReturnPartiallyPaid(nativeSale: Sale) {\r\n            if (nativeSale) {\r\n\r\n                var isPartialPaid = false;\r\n                if (typeof nativeSale.IsPartialPaid !== 'undefined') {\r\n                    isPartialPaid = nativeSale.IsPartialPaid;\r\n                }\r\n\r\n                var result = isPartialPaid ||\r\n                    (nativeSale.Status === FinancialStatusType.LaybyClosed ||\r\n                        nativeSale.Status === FinancialStatusType.OnAccountClosed ||\r\n                        nativeSale.Status === FinancialStatusType.OnAccount ||\r\n                        nativeSale.Status === FinancialStatusType.Layby ||\r\n                        nativeSale.Status === FinancialStatusType.Closed);\r\n\r\n                return result;\r\n            }\r\n            else {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        private surchargeSetup(p: ICustomValidation | ICardValidation, groupedSale: IGroupedSale,\r\n            totalToRefund: number, surchargeRestToRefund: number) {\r\n            let src = <IAPIPayment>groupedSale.PaymentsMap[p.id];\r\n            if (!src) src = <IAPIPayment>groupedSale.PaymentsMap2[p.id];\r\n\r\n            const amountToRefund = Math.min(surchargeRestToRefund, src.InitialSurcharge.CalculatedValueWithTax);\r\n            let sm = src.Amount - (!src.InitialSurcharge ? 0 : src.InitialSurcharge.CalculatedValueWithTax);\r\n            if (sm < 0) sm = 0;\r\n            sm = ext.helperService.DEARRound(sm, 6);\r\n            // the maximum for surcharge refund by this custom method is defined by rest of surcharge for this method\r\n            p.validationAmount = ext.helperService.DEARRound(Math.min(totalToRefund, sm), 2);\r\n            let coeff = 0;\r\n            if (sm > 0)\r\n                coeff = Math.min(totalToRefund, sm) / sm;\r\n\r\n            if (p.Surcharge.RefundSurcharge === true && coeff > 0 && src.InitialSurcharge.CalculatedValueWithTax > 0) {\r\n                if (Math.abs(coeff * src.InitialSurcharge.CalculatedValueWithTax) > Math.abs(amountToRefund))\r\n                    coeff = amountToRefund / src.InitialSurcharge.CalculatedValueWithTax;\r\n\r\n                p.Surcharge.CalculatedValueWithTax = ext.helperService.DEARRound(coeff * src.InitialSurcharge.CalculatedValueWithTax, 2);\r\n                p.Surcharge.CalculatedValue = ext.helperService.DEARRound(coeff * src.InitialSurcharge.CalculatedValue, 2);\r\n                p.Surcharge.Tax = ext.helperService.DEARRound(coeff * src.InitialSurcharge.Tax, 4);\r\n            } else {\r\n                p.Surcharge.CalculatedValueWithTax = 0;\r\n                p.Surcharge.CalculatedValue = 0;\r\n                p.Surcharge.Tax = 0;\r\n            }\r\n\r\n            p.Surcharge.AmountToRefund = 0;\r\n            p.Surcharge.TaxToRefund = 0;\r\n        }\r\n\r\n        // we know surcharges, refunded by cash/storecredit, so we need to reduce limits for all payment surcharge related\r\n        // methods\r\n        private prepareSurchargeLimits(inputData: IInputData) {\r\n            const groupedSale = inputData.sale.GroupedSale;\r\n            const paymentValidation = inputData.paymentValidation;\r\n            paymentValidation.hasSurchargeRest = false;\r\n\r\n            if (!groupedSale) return;\r\n\r\n            ext.cardPayService.createCardPaymentMap(groupedSale);\r\n\r\n            const surchargeRestToRefund = groupedSale.TotalSurcharge <= 0 ? 0 : groupedSale.TotalSurcharge + groupedSale.GhostSurcharge;\r\n            const totalToRefund = groupedSale.TotalToRefund;// - groupedSale.ExchangeAmount;\r\n\r\n            paymentValidation.customPayments.forEach(p => {\r\n                if (p.Surcharge) {\r\n                    this.surchargeSetup(p, groupedSale, totalToRefund, surchargeRestToRefund);\r\n                }\r\n            });\r\n\r\n            const map = <Array<ICardValidation>>ext.helperService.mapToList(paymentValidation.cardPayments);\r\n            map.forEach(p => {\r\n                if (p.Surcharge) {\r\n                    this.surchargeSetup(p, groupedSale, totalToRefund, surchargeRestToRefund);\r\n                }\r\n            });\r\n        }\r\n\r\n    }","import { CalculatorHelperService } from \"../CalculatorHelperService\";\r\nimport { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel } from \"../Enums\";\r\nimport { Sale } from \"../Sale\";\r\n\r\n    export class RefundPaymentsSetupCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.RefundPayments,\r\n                        order: StartCalcLevel.Payments + 10\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            // go through all checkout items and calculate taxes and sum them\r\n            const sale = <Sale>inputData.sale;\r\n            const refundsCopy = inputData.refundsCopy;\r\n\r\n            sale.DiscountTax = 0;\r\n            sale.Tax = 0;\r\n            sale.Total = 0;\r\n            sale.Balance = 0;\r\n            sale.SurchargeTotal = 0;\r\n            sale.SurchargeTotalTax = 0;\r\n            sale.SurchargeToRefund = 0;\r\n            sale.SurchargeTaxToRefund = 0;\r\n            sale.NonRefundableSurcharge = 0;\r\n            sale.SelectedCoupon = null;\r\n            sale.SelectedCouponID = null;\r\n            sale.SelectedCouponDealID = null;\r\n\r\n            const pmap = new Map<string, boolean>();\r\n            const surcharges = sale.Surcharges;\r\n\r\n            if (surcharges) {\r\n                surcharges.forEach(el => {\r\n                    if (!pmap.has(el.PaymentID)) {\r\n                        pmap.set(el.PaymentID, true);\r\n                        if (el.RefundSurcharge === true) {\r\n                            sale.SurchargeToRefund += el.CalculatedValue;\r\n                            sale.SurchargeTaxToRefund += el.Tax;\r\n                        }\r\n                        else {\r\n                            sale.NonRefundableSurcharge += el.CalculatedValue;\r\n                        }\r\n                    }\r\n                });\r\n            }\r\n\r\n            if (refundsCopy) {\r\n                refundsCopy.forEach(ref => {\r\n                    if (ref.Surcharges)\r\n                        ref.Surcharges.forEach(el =>  {\r\n                        if (!pmap.has(el.PaymentID)) {\r\n                            pmap.set(el.PaymentID, true);\r\n                            CalculatorHelperService.restoreSurcharge(el, sale.IsTaxInclusive);\r\n                            sale.SurchargeToRefund -= el.Total;\r\n                            sale.SurchargeTaxToRefund -= el.Tax;\r\n                        }\r\n                    });\r\n                });\r\n            }\r\n\r\n            sale.SurchargeTaxToRefund = ext.helperService.DEARRound(sale.SurchargeTaxToRefund, 2);\r\n            sale.SurchargeToRefund = ext.helperService.DEARRound(sale.SurchargeToRefund, 2) +\r\n                (sale.IsTaxInclusive ? 0 : sale.SurchargeTaxToRefund);\r\n            sale.NonRefundableSurcharge = ext.helperService.DEARRound(sale.NonRefundableSurcharge, 2);\r\n\r\n            return <IOutputData>{ processResult: true };\r\n        }\r\n\r\n    }","import Enumerable from \"linq\";\r\nimport { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel } from \"../Enums\";\r\n\r\n    export class SurchargesPaymentsCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.Payments,\r\n                        order: StartCalcLevel.Surcharge + 10\r\n                    },\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.RefundPayments,\r\n                        order: StartCalcLevel.Surcharge + 15 // after refund surcharge\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            const sale = inputData.sale;\r\n\r\n            const res = Enumerable.from(sale.Payments)\r\n                .where(p => p.Surcharge && p.Surcharge.CalculatedValue !== 0)\r\n                .sum(p => p.Surcharge.CalculatedValue);\r\n\r\n            const resTax = Enumerable.from(sale.Payments)\r\n                .where(p => p.Surcharge && p.Surcharge.Tax !== 0)\r\n                .sum(p => p.Surcharge.Tax);\r\n\r\n            sale.SurchargeTotal = ext.helperService.DEARRound(res, 2);\r\n            sale.SurchargeTotalTax = ext.helperService.DEARRound(resTax, 4); \r\n\r\n            return <IOutputData>{ processResult: true };\r\n        }\r\n    }","import { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel } from \"../Enums\";\r\n\r\n    export class TaxCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.Checkout,\r\n                        order: StartCalcLevel.Tax + 10\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        calculate(calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            // go through all checkout items and calculate taxes and sum them\r\n            const sale = inputData.sale;\r\n            const isTaxInclusive = sale.IsTaxInclusive === true;\r\n\r\n            sale.CheckoutItems.forEach(s => {\r\n\r\n                s.FinalTaxAmount =\r\n                    ext.helperService.DEARRound(\r\n                        s.FinalAmount *\r\n                        (isTaxInclusive ? s.EffectiveInclusiveTaxPercent : s.EffectiveExclusiveTaxPercent) / 100,\r\n                        4);\r\n            });\r\n\r\n            return <IOutputData>{ processResult: true };\r\n        }\r\n    }","import Enumerable from \"linq\";\r\nimport { CalculatorHelperService } from \"../CalculatorHelperService\";\r\nimport { Sale } from \"../Sale\";\r\nimport { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel, TaxCalculationMethod, HistoryActionMode } from \"../Enums\";\r\nimport { ISale } from \"../Interfaces\";\r\nimport { CheckoutItem } from \"../CheckoutItem\";\r\n\r\n    export class TotalCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.Checkout,\r\n                        order: StartCalcLevel.Total + 10\r\n                    },\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.Payments,\r\n                        order: StartCalcLevel.Payments + 10\r\n                    },\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.RefundPayments,\r\n                        order: StartCalcLevel.TotalPayments + 10\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        calculate(calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            // go through all checkout items and calculate taxes and sum them\r\n            const sale = Sale.create(inputData.sale); // in case if it's not sale object - create it\r\n            const isTaxInclusive = sale.IsTaxInclusive === true;\r\n            const actionMode = inputData.actionMode;\r\n\r\n            let taxModePresision = ext.configService.taxCalculationMethod === TaxCalculationMethod.RowTotal ? 2 : 4;\r\n            if (!sale.TaxModePresision)\r\n                sale.TaxModePresision = taxModePresision;\r\n            else\r\n                taxModePresision = sale.TaxModePresision;\r\n\r\n            const subSum = ext.helperService.DEARRound(Enumerable.from(sale.CheckoutItems)\r\n                .where(s => !CheckoutItem.isAdditionalCharge(s))\r\n                .select(s => ext.helperService.DEARRound(s.FinalAmount, 2))\r\n                .sum(), 2);\r\n\r\n            sale.SubTotal = subSum;\r\n            const subAdditionalLinesSum = ext.helperService.DEARRound(Enumerable.from(sale.CheckoutItems)\r\n                .where(s => CheckoutItem.isAdditionalCharge(s))\r\n                .select(s => ext.helperService.DEARRound(s.FinalAmount, 2))\r\n                .sum(), 2);\r\n    \r\n            sale.SubTotal = ext.helperService.DEARRound(subSum + subAdditionalLinesSum, 2);\r\n\r\n            let discountTaxReduceCoefficient = 1;\r\n            sale.DiscountValue = 0;\r\n            sale.DiscountValueRaw = 0;\r\n            let newSaleOrderDiscount: number = null;\r\n\r\n            if (this.hasSoldItems(sale)) {\r\n                // this should be counted for sale but not for refunds.\r\n                // on refunds all discounts are already counted in item final prices\r\n                // order level discount reduces total amount as result reduces each checkout item final price\r\n                let itemSubTotal = sale.SubTotal;\r\n                if (sale.Discount && CalculatorHelperService.zcn(sale.Discount) && (itemSubTotal > 0)) {\r\n                    // keep not rounded discount, it is needed in backend for correct calculation\r\n                    // when spliting discount by tax groups (items with same tax rule), it will be rounded in backend\r\n                    if (sale.IsDiscountPercent) {\r\n                        sale.DiscountValueRaw = itemSubTotal * Math.min(Math.abs(sale.Discount), 100) / 100;\r\n                        sale.DiscountValue = ext.helperService.DEARRound(sale.DiscountValueRaw, 2);\r\n                        if (Math.abs(sale.Discount) > 100)\r\n                            newSaleOrderDiscount = 100;\r\n                    }\r\n                    else {\r\n                        sale.DiscountValueRaw = Math.min(Math.abs(sale.Discount), itemSubTotal);\r\n                        sale.DiscountValue = ext.helperService.DEARRound(sale.DiscountValueRaw, 2);\r\n                        if (Math.abs(sale.Discount) > itemSubTotal)\r\n                            newSaleOrderDiscount = itemSubTotal;\r\n                    }\r\n\r\n                    discountTaxReduceCoefficient = CalculatorHelperService.getSaleDiscountCoefficientBasic(sale);\r\n                    // we should count only positive items\r\n                    // const sp = CalculatorHelperService.getCheckoutSum(sale, true);\r\n                    // discountTaxReduceCoefficient = !subSum ? 1 : (subSum - sale.DiscountValue) / sp;\r\n                }\r\n            }\r\n\r\n            // tax total\r\n            // const taxSum = Enumerable.from(sale.CheckoutItems)\r\n            //     //            .select(s => ext.helperService.DEARRound(s.FinalTaxAmount * (s.Count > 0 ? discountTaxReduceCoefficient : 1), taxModePresision))\r\n            //     .select(s => ext.helperService.DEARRound(s.FinalTaxAmount, taxModePresision) * (s.Count > 0 ? discountTaxReduceCoefficient : 1))\r\n            //     .sum();\r\n            // const taxDiscountSum = Enumerable.from(sale.CheckoutItems)\r\n            //     //            .select(s => ext.helperService.DEARRound(s.FinalTaxAmount * (1 - (s.Count > 0 ? discountTaxReduceCoefficient : 1)), taxModePresision))\r\n            //     .select(s => ext.helperService.DEARRound(s.FinalTaxAmount, taxModePresision) * (1 - (s.Count > 0 ? discountTaxReduceCoefficient : 1)))\r\n            //     .sum();\r\n            const taxSumLines = ext.helperService.DEARRound(Enumerable.from(sale.CheckoutItems)\r\n                .where(s => !CheckoutItem.isAdditionalCharge(s))\r\n                .select(s => ext.helperService.DEARRound(s.FinalTaxAmount, taxModePresision))\r\n                .sum(), 2);\r\n            const taxSumAdditional = ext.helperService.DEARRound(Enumerable.from(sale.CheckoutItems)\r\n                .where(s => CheckoutItem.isAdditionalCharge(s))\r\n                .select(s => ext.helperService.DEARRound(s.FinalTaxAmount, taxModePresision))\r\n                .sum(), 2);\r\n        \r\n            const taxSum0 = taxSumLines + taxSumAdditional;\r\n            const taxDiscountSum = ext.helperService.DEARRound(taxSum0 * (1 - discountTaxReduceCoefficient), 2);\r\n            const taxSum = ext.helperService.DEARRound(taxSum0 * discountTaxReduceCoefficient, 2);\r\n\r\n            sale.DiscountTax = ext.helperService.DEARRound(taxDiscountSum, 2);\r\n            sale.Tax = ext.helperService.DEARRound(taxSum, 2);\r\n            sale.Total = ext.helperService.DEARRound(sale.SubTotal + (isTaxInclusive ? 0 : sale.Tax) - sale.DiscountValue, 2);\r\n            sale.Balance = ext.helperService.DEARRound(CalculatorHelperService.getSaleBalance(sale), 2);\r\n\r\n            if (calculationType === CalculationType.RefundPayments) {\r\n                sale.BaseTotal = sale.Total; // + (isTaxInclusive ? 0 : sale.Tax); // without order level discount\r\n                sale.EstimateTotal = this.estimateTotalSum(sale);\r\n                if (inputData.selectedItem && actionMode === HistoryActionMode.SaleRefund) {\r\n                    sale.RemainingToRefund = this.getRemainingToRefund(inputData); // show globally for this sale how much can be refunded\r\n                } else {\r\n                    sale.RemainingToRefund = -1 * CalculatorHelperService.sumToPayLeft(<Sale>sale,\r\n                        -1 * Math.abs(this.amountSums(inputData)),\r\n                        // we trying to refund partially paid sale. So count only paid sum\r\n                        inputData.selectedItem &&\r\n                        inputData.selectedItem.shouldPayExtra === true &&\r\n                        inputData.selectedItem.IsPartialPaid === true); // for continue refund show rest of sum\r\n                }\r\n            } else {\r\n                sale.SurchargeTotal = 0;\r\n                sale.SurchargeTotalTax = 0;\r\n            }\r\n\r\n            const totalBasePrice = ext.helperService.DEARRound(Enumerable.from(sale.CheckoutItems)\r\n                .select(s => ext.helperService.DEARRound(s.BasePrice * s.Count, 2))\r\n                .sum(), 2);\r\n\r\n            sale.TotalBasePrice = totalBasePrice;\r\n\r\n            const totalItemDiscount = ext.helperService.DEARRound(Enumerable.from(sale.CheckoutItems)\r\n                .select(s => ext.helperService.DEARRound(s.ItemDiscount * s.Count, 2))\r\n                .sum(), 2);\r\n\r\n            sale.TotalItemDiscount = totalItemDiscount;\r\n\r\n            sale.TotalCheckout = sale.Total;\r\n\r\n            const outd = <IOutputData>{ processResult: true };\r\n            outd.updateSaleOrderDiscount = newSaleOrderDiscount;\r\n\r\n            return outd;\r\n        }\r\n\r\n        // for refund calcucations\r\n        private estimateTotalSum = function (sale: ISale) {\r\n\r\n            let sum = Enumerable.from(sale.ReturnItems)\r\n                .where(el => el.MaxCount > 0)\r\n                .sum(el => ext.helperService.DEARRound(el.MaxCount * el.FinalPrice, 2));\r\n\r\n            if (!sale.IsTaxInclusive) {\r\n                const tax = Enumerable.from(sale.ReturnItems)\r\n                    .where(el => el.MaxCount > 0)\r\n                    .sum(el => CalculatorHelperService.calculateTax2(el, false));\r\n\r\n                sum += tax;\r\n            }\r\n\r\n            return sum;\r\n        }\r\n\r\n        private amountSums(inputData: IInputData) {\r\n            let sum = 0;\r\n            const payments = inputData.payments;\r\n            const paymentValidation = inputData.paymentValidation;\r\n\r\n            if (payments) {\r\n                if (payments.cash)\r\n                    sum += payments.cash;\r\n\r\n                if (paymentValidation.cardPayments)\r\n                    sum += ext.cardPayService.sumAllCardPayments(paymentValidation.cardPayments, false);\r\n\r\n                if (payments.storeCredit)\r\n                    sum += payments.storeCredit;\r\n\r\n                if (payments.loyaltyPoints)\r\n                    sum += payments.loyaltyPoints;\r\n            }\r\n\r\n            if (paymentValidation && paymentValidation.customPayments)\r\n                sum += Enumerable.from(paymentValidation.customPayments).sum(p => p.amount);\r\n\r\n            return ext.helperService.DEARRound(sum, 2);\r\n        };\r\n\r\n        private hasSoldItems(sale: ISale): boolean {\r\n            return Enumerable.from(sale.CheckoutItems)\r\n                .where(c => c.Count > 0)\r\n                .any();\r\n        }\r\n\r\n        // return amount that is the maximum amount that still can be refunded\r\n        // for this sale. It means that we need to count all already refunded items\r\n        private getRemainingToRefund(inputData: IInputData): number {\r\n            const sale = inputData.sale;\r\n\r\n            const sum1 = CalculatorHelperService.getCheckoutSumFromAPISale(inputData.selectedItem.Data);\r\n            const sum2 = CalculatorHelperService.getProcessedCheckoutSumFromAPISale(inputData.selectedItem.Data);\r\n\r\n            // get current payments from UI\r\n            const amountSums = this.amountSums(inputData);\r\n\r\n            return sum1 - sum2 - amountSums;\r\n        }\r\n\r\n    }","import { CalculatorHelperService } from \"../CalculatorHelperService\";\r\nimport { IPartialCalculator, IPartialCalculatorOptions, IPartialCalculatorExecutionOptions, IInputData, IOutputData } from \"../CalculatorInterfaces\";\r\nimport { CalculationType, StartCalcLevel } from \"../Enums\";\r\nimport { Sale } from \"../Sale\";\r\n\r\n    export class TotalPaymentsCalculator implements IPartialCalculator {\r\n\r\n        getOptions(): IPartialCalculatorOptions {\r\n            return <IPartialCalculatorOptions>{\r\n                executionOptions: [\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.Payments,\r\n                        order: StartCalcLevel.TotalPayments + 10\r\n                    },\r\n                    <IPartialCalculatorExecutionOptions>{\r\n                        type: CalculationType.RefundPayments,\r\n                        order: StartCalcLevel.TotalPayments + 15\r\n                    }\r\n                ]\r\n            };\r\n        }\r\n\r\n        calculate(_calculationType: CalculationType, inputData: IInputData): IOutputData {\r\n            const sale = Sale.create(inputData.sale);\r\n\r\n            // add surcharges to required totals\r\n            sale.Tax = ext.helperService.DEARRound(sale.Tax + sale.SurchargeTotalTax, 2);\r\n            sale.Total = ext.helperService.DEARRound(sale.SubTotal + sale.SurchargeTotal +\r\n                (sale.IsTaxInclusive ? 0 : sale.Tax) - sale.DiscountValue, 2);\r\n            sale.Balance = ext.helperService.DEARRound(CalculatorHelperService.getSaleBalance(sale), 2);\r\n\r\n            return <IOutputData>{ processResult: true };\r\n        }\r\n    }","import { AutoDiscountCalculator } from './AutoDiscountCalculator';\r\nimport { NativePricesCalculator } from './NativePricesCalculator';\r\nimport { SurchargesPaymentsCalculator } from './SurchargesPaymentsCalculator';\r\nimport { RefundCheckoutSetupCalculator } from './RefundCheckoutSetupCalculator';\r\nimport { RefundPaymentsSetupCalculator } from './RefundPaymentsSetupCalculator';\r\nimport { LoyaltyCalculator } from './LoyaltyCalculator';\r\nimport { TotalPaymentsCalculator } from './TotalPaymentsCalculator';\r\nimport { RefundCheckoutSubmitCalculator } from './RefundCheckoutSubmitCalculator';\r\nimport { FinalCalculator } from './FinalCalculator';\r\nimport { TaxCalculator } from './TaxCalculator';\r\nimport { RefundLimitsCalculator } from './RefundLimitsCalculator';\r\nimport { TotalCalculator } from './TotalCalculator';\r\n\r\nconst obj = {\r\n    'AutoDiscountCalculator': AutoDiscountCalculator,\r\n    'LoyaltyCalculator': LoyaltyCalculator,\r\n    'FinalCalculator': FinalCalculator,\r\n    'NativePricesCalculator': NativePricesCalculator,\r\n    'RefundCheckoutSubmitCalculator': RefundCheckoutSubmitCalculator,\r\n    'RefundCheckoutSetupCalculator': RefundCheckoutSetupCalculator,\r\n    'RefundLimitsCalculator': RefundLimitsCalculator,\r\n    'RefundPaymentsSetupCalculator': RefundPaymentsSetupCalculator,\r\n    'SurchargesPaymentsCalculator': SurchargesPaymentsCalculator,\r\n    'TaxCalculator': TaxCalculator,\r\n    'TotalCalculator': TotalCalculator,\r\n    'TotalPaymentsCalculator': TotalPaymentsCalculator\r\n};\r\n\r\nconst PARTIAL_CALCULATORS = obj;\r\n\r\nexport default PARTIAL_CALCULATORS;","import Enumerable from 'linq';\r\nimport { CheckoutItem } from './CheckoutItem';\r\nimport { CalculatorHelperService } from './CalculatorHelperService';\r\nimport { Moment } from 'moment';\r\nimport { FinancialStatusType, PaymentShortNameStandardType, SaleType } from './Enums';\r\nimport { ISale, ISalesRepresentative, ICustomer, ICheckoutItem, IPayment, IGroupedSale, IRefundBase, IContact, ISurcharge } from './Interfaces';\r\nimport { IAngularStatic } from 'angular';\r\n\r\ndeclare const moment: Moment;\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport class Sale implements ISale {\r\n    ID: string;\r\n    ParentOrderID?: string;\r\n    IsFirstChild?: boolean;\r\n    NewRefundOrder?: string;\r\n    PosOrderID?: string;\r\n    ReturnID?: string;\r\n    OperationID?: string;\r\n    OrderNumber: string;\r\n    OrderType: string;\r\n    Barcode: string;\r\n    DateNative: Date;\r\n    Date: string;\r\n    SaleType: SaleType;\r\n    OperationName: string;\r\n    StandAloneReturn: boolean;\r\n    StandAloneExchange: boolean;\r\n    ClearOrderNumber: string;\r\n    SubTotal: number;\r\n    Total: number;\r\n    Tax: number;\r\n    Discount: number; // value set on UI. May be percent or absolute value\r\n    DiscountValue: number; // real calculated value\r\n    DiscountValueRaw: number; // real calculated value\r\n    Comment: string;\r\n    IsTaxInclusive: boolean;\r\n    CashChangeAmount: number;\r\n\r\n    IsDiscountPercent?: boolean; // is manual order level discount of percent type \r\n    AdjustRefunds?: boolean;\r\n    ManuallyAppliedDiscount?: boolean;\r\n    WarnAboutDiscount?: boolean;\r\n    ReturnLoyaltyPoints?: boolean; // used in sales history\r\n    DiscountTax?: number;\r\n    CantProcessOffline?: boolean;\r\n    SalesRepresentative: ISalesRepresentative;\r\n\r\n    Customer: ICustomer;\r\n    CheckoutItems: ICheckoutItem[];\r\n    SelectedCoupon: string;\r\n    SelectedCouponID: string;\r\n    SelectedCouponDealID: string;\r\n    ReturnSelectedCoupon: string;\r\n    ReturnSelectedCouponID: string;\r\n    ReturnSelectedCouponDealID: string;\r\n    Payments: IPayment[];\r\n\r\n    //    refunds?: IAPIRefund[];\r\n    GroupedSale?: IGroupedSale;\r\n    //    RawSaleObject?: ISale; // previous native sale in case of refund/exchage\r\n    Refunds: Array<IRefundBase>;\r\n    //fields \r\n    PayloadVersion: string;\r\n    IsParked: boolean;\r\n    LoyaltyPoints?: number;\r\n    Balance?: number;\r\n    SurchargeTotal?: number;\r\n    SurchargeTotalTax?: number;\r\n    NonRefundableSurcharge?: number;\r\n    CalledFromHistory?: boolean;\r\n    TotalCheckout: number;\r\n    SurchargeToRefund?: number;\r\n    SurchargeTaxToRefund?: number;\r\n    Status?: FinancialStatusType;\r\n    ReturnItems?: Array<ICheckoutItem>; // for refunds\r\n    ReturnPayments?: Array<IPayment>;   // for refunds\r\n    FullReturnRounding?: number;\r\n    EstimateTotal?: number;             // refund only\r\n    BaseTotal?: number;\r\n    RemainingToRefund?: number;\r\n    LaybyDate: string;\r\n    TaxModePresision?: number;\r\n    IsFastRefund: boolean;\r\n\r\n    IsFirstRefundDone: boolean;\r\n    isFromDearSale: boolean;\r\n    SelectedContact: IContact;\r\n    TotalBasePrice: number;\r\n    TotalItemDiscount: number;\r\n\r\n    CustomerShippingAddressLine1?: string;\r\n    CustomerShippingAddressLine2?: string;\r\n    CustomerShippingCity?: string;\r\n    CustomerShippingCountry?: string;\r\n    CustomerShippingProvince?: string;\r\n    CustomerShippingZip?: string;\r\n    OutletName?: string;\r\n    OutletID?: string;\r\n    RegistryID?: string;\r\n    UserName?: string;\r\n\r\n    /*\r\n     * Helpers for old style properties. Wrap them.\r\n     */\r\n    get payloadVersion(): string {\r\n        return this.PayloadVersion;\r\n    }\r\n    set payloadVersion(v: string) {\r\n        // fake. In old mode we can not modify payload version.\r\n    }\r\n\r\n    get isParked(): boolean {\r\n        return this.IsParked;\r\n    }\r\n    set isParked(v: boolean) {\r\n        this.IsParked = v;\r\n    }\r\n\r\n    get selectedCoupon(): string {\r\n        return this.SelectedCoupon;\r\n    }\r\n    set selectedCoupon(v: string) {\r\n        this.SelectedCoupon = v;\r\n    }\r\n\r\n    get selectedCouponID(): string {\r\n        return this.SelectedCouponID;\r\n    }\r\n    set selectedCouponID(v: string) {\r\n        this.SelectedCouponID = v;\r\n    }\r\n\r\n    get selectedCouponDealID(): string {\r\n        return this.SelectedCouponDealID;\r\n    }\r\n    set selectedCouponDealID(v: string) {\r\n        this.SelectedCouponDealID = v;\r\n    }\r\n\r\n    get returnSelectedCoupon(): string {\r\n        return this.ReturnSelectedCoupon;\r\n    }\r\n    set returnSelectedCoupon(v: string) {\r\n        this.ReturnSelectedCoupon = v;\r\n    }\r\n\r\n    get returnSelectedCouponID(): string {\r\n        return this.ReturnSelectedCouponID;\r\n    }\r\n    set returnSelectedCouponID(v: string) {\r\n        this.ReturnSelectedCouponID = v;\r\n    }\r\n\r\n    get returnSelectedCouponDealID(): string {\r\n        return this.ReturnSelectedCouponDealID;\r\n    }\r\n    set returnSelectedCouponDealID(v: string) {\r\n        this.ReturnSelectedCouponDealID = v;\r\n    }\r\n\r\n    set itemAppliedDiscount(v: any) {\r\n        // fake\r\n    }\r\n\r\n    set isDiscountPercent(v: boolean) {\r\n        this.IsDiscountPercent = v;\r\n    }\r\n    get isDiscountPercent(): boolean {\r\n        return this.IsDiscountPercent;\r\n    }\r\n\r\n    set customer(v: ICustomer) {\r\n        this.Customer = v;\r\n    }\r\n    get customer(): ICustomer {\r\n        return this.Customer;\r\n    }\r\n\r\n    set processZero(v: boolean) {\r\n        // fake, do nothing\r\n    }\r\n\r\n    // support of backside monitor\r\n    get TotalForBackSide(): number {\r\n        return this.Total;\r\n    }\r\n    set TotalForBackSide(v: number) {\r\n        // fake\r\n    }\r\n\r\n    get CashRounding(): number {\r\n        if (!this.Payments || this.Payments.length === 0) return 0;\r\n\r\n        const v = Enumerable.from(this.Payments)\r\n            .where(p => p.ShortName === PaymentShortNameStandardType.Rounding)\r\n            .select(p => p.Amount)\r\n            .sum();\r\n\r\n        return CalculatorHelperService.zch(v);\r\n    }\r\n\r\n    set CashRounding(v: number) {\r\n        let rnd: IPayment = null;\r\n        v = ext.helperService.DEARRound(v, 4);\r\n\r\n        if (!this.Payments || this.Payments.length === 0)\r\n            rnd = null;\r\n        else\r\n            rnd = Enumerable.from(this.Payments)\r\n                .where(p => p.ShortName === PaymentShortNameStandardType.Rounding && p.FromHistory !== true)\r\n                .select(p => p).firstOrDefault();\r\n\r\n        if (!rnd && v) {\r\n            // create rounding\r\n            rnd = <IPayment><unknown>{\r\n                ID: ext.uuid2Service.newguid(),\r\n                PaymentProcessorID: null,\r\n                Amount: v,\r\n                Date: moment.utc(),\r\n                ShortName: PaymentShortNameStandardType.Rounding,\r\n                PaymentTypeName: ext.gettextCatalog.getString(\"Payment (cash rounding)\"),\r\n                Loyalty: 0\r\n            };\r\n\r\n            this.Payments.push(rnd);\r\n\r\n        } else {\r\n            if (!v) {\r\n                // remove zero record\r\n                this.Payments = this.Payments.filter(p => p.ShortName !== PaymentShortNameStandardType.Rounding || p.FromHistory === true);\r\n            } else {\r\n                rnd.Amount = v;\r\n                // @ts-ignore\r\n                rnd.Date = moment.utc();\r\n            }\r\n        }\r\n    }\r\n\r\n    // current remaining customer loyalty points\r\n    get CustomerLoyaltyPointsRemaining(): number {\r\n        return this.CustomerLoyaltyPoints - this.CustomerLoyaltyPointsUsed;\r\n    }\r\n    set CustomerLoyaltyPointsRemaining(v: number) {\r\n        // do nothing\r\n    }\r\n\r\n    // current total customer loyalty points\r\n    get CustomerLoyaltyPoints(): number {\r\n        let res = 0;\r\n\r\n        if (this.Customer && this.Customer.LoyaltyPoints)\r\n            res = CalculatorHelperService.zcn(this.Customer.LoyaltyPoints);\r\n\r\n        return ext.helperService.DEARRound(res, 2);\r\n    }\r\n    set CustomerLoyaltyPoints(v: number) {\r\n        // do nothing\r\n    }\r\n\r\n    // enum payments of type loyalty\r\n    set CustomerLoyaltyPointsUsed(n: number) {\r\n        // do nothing\r\n    }\r\n\r\n    get CustomerLoyaltyPointsUsed(): number {\r\n        if (!this.Payments) return 0;\r\n\r\n        // get only current session data\r\n        const res = Enumerable.from(this.Payments)\r\n            //        .where(p => p.ShortName === PaymentShortNameStandardType.Loyalty && p.FromHistory !== true)\r\n            .where(p => p.ShortName === PaymentShortNameStandardType.Loyalty)\r\n            .select(p => p.Amount)\r\n            .sum();\r\n\r\n        return ext.helperService.DEARRound(res, 2);\r\n    }\r\n\r\n    set Surcharges(v: Array<ISurcharge>) {\r\n        // do nothing\r\n    }\r\n\r\n    get Surcharges(): Array<ISurcharge> {\r\n        const res = Enumerable.from(this.Payments)\r\n            .where(p => p.Surcharge ? true : false)\r\n            .select(p => p.Surcharge).toArray();\r\n\r\n        return res;\r\n    }\r\n\r\n    // here we compare Total for sale with paid part\r\n    // taking into account fake payment like rounding/discount\r\n    get IsPartialPaid(): boolean {\r\n        return !CalculatorHelperService.sumToPayLeft(this) ? false : true;\r\n    }\r\n    set IsPartialPaid(v: boolean) {\r\n        // fake\r\n    }\r\n\r\n    get CalculatedTax(): number {\r\n        return CalculatorHelperService.zcn(this.Tax);\r\n    }\r\n    set CalculatedTax(v: number) {\r\n        // fake\r\n    }\r\n\r\n    get discountValue(): number {\r\n        return CalculatorHelperService.zcn(this.DiscountValue);\r\n    }\r\n    set discountValue(v: number) {\r\n        // fake\r\n    }\r\n\r\n    set calledFromHistory(v: boolean) {\r\n        this.CalledFromHistory = v;\r\n    }\r\n\r\n    get Surcharge(): number {\r\n        return Enumerable.from(this.Surcharges).sum(s => this.IsTaxInclusive ? s.CalculatedValueWithTax : s.CalculatedValue);\r\n        // return CalculatorHelperService.zcn(this.SurchargeTotal);\r\n    }\r\n    set Surcharge(v: number) {\r\n        // fake\r\n    }\r\n\r\n    set manuallyAppliedDiscount(v: boolean) {\r\n        if (v != this.ManuallyAppliedDiscount) {\r\n            this.WarnAboutDiscount = false;\r\n        }\r\n        this.ManuallyAppliedDiscount = v;\r\n    }\r\n    get manuallyAppliedDiscount(): boolean {\r\n        return this.ManuallyAppliedDiscount;\r\n    }\r\n\r\n    get cantProcessOffline(): boolean {\r\n        return this.CantProcessOffline;\r\n    }\r\n    set cantProcessOffline(v: boolean) {\r\n        this.CantProcessOffline = v;\r\n    }\r\n\r\n    set parentOrderID(v: string) {\r\n        this.ParentOrderID = v;\r\n    }\r\n    get parentOrderID(): string {\r\n        return this.ParentOrderID;\r\n    }\r\n\r\n    set newRefundOrder(v: string) {\r\n        this.NewRefundOrder = v;\r\n    }\r\n    get newRefundOrder(): string {\r\n        return this.NewRefundOrder;\r\n    }\r\n\r\n    set standAloneReturn(v: boolean) {\r\n        this.StandAloneReturn = v;\r\n    }\r\n    get standAloneReturn(): boolean {\r\n        return this.StandAloneReturn;\r\n    }\r\n\r\n    set standAloneExchange(v: boolean) {\r\n        this.StandAloneExchange = v;\r\n    }\r\n    get standAloneExchange(): boolean {\r\n        return this.StandAloneExchange;\r\n    }\r\n    \r\n    set IsFromDearSale(v: boolean) {\r\n        this.isFromDearSale = v;\r\n    }\r\n    get IsFromDearSale(): boolean {\r\n        return this.isFromDearSale;\r\n    }\r\n    // ********************************************\r\n\r\n    //constructor \r\n    constructor() {\r\n        this.PayloadVersion = '3';\r\n        this.ID = ext.uuid2Service.newguid();\r\n        this.ParentOrderID = null;\r\n        this.IsFirstChild = false;\r\n        this.NewRefundOrder = null;\r\n        this.PosOrderID = null;\r\n        this.ReturnID = null;\r\n        this.OperationID = null;\r\n        this.OrderNumber = null;\r\n        this.OrderType = null;\r\n        this.Barcode = null;\r\n        this.DateNative = new Date();\r\n        this.Date = this.DateNative.toDateString();\r\n        this.SaleType = SaleType.Sale;\r\n        this.OperationName = null;\r\n        this.StandAloneReturn = false;\r\n        this.StandAloneExchange = false;        \r\n        this.ClearOrderNumber = null;\r\n        this.SubTotal = 0;\r\n        this.Total = 0;\r\n        this.Tax = 0;\r\n        this.Discount = 0;\r\n        this.DiscountValue = 0;\r\n        this.Comment = null;\r\n        this.IsTaxInclusive = CalculatorHelperService.isConfigTaxInclusive();\r\n        this.CashChangeAmount = 0;\r\n        this.SalesRepresentative = null;\r\n        this.Customer = <ICustomer>{\r\n            ID: null\r\n        };\r\n        this.CustomerShippingAddressLine1 = '';\r\n        this.CustomerShippingAddressLine2 = '';\r\n        this.CustomerShippingCity = '';\r\n        this.CustomerShippingCountry = '';\r\n        this.CustomerShippingProvince = '';\r\n        this.CustomerShippingZip = '';\r\n        this.CheckoutItems = new Array<ICheckoutItem>();\r\n        this.SelectedCoupon = null;\r\n        this.SelectedCouponID = null;\r\n        this.SelectedCouponDealID = null;\r\n        this.ReturnSelectedCoupon = null;\r\n        this.ReturnSelectedCouponID = null;\r\n        this.ReturnSelectedCouponDealID = null;\r\n        this.Payments = new Array<IPayment>();\r\n        this.Refunds = null;\r\n        this.IsParked = false;\r\n        this.IsDiscountPercent = false;\r\n        this.LoyaltyPoints = 0;\r\n        this.SurchargeTotal = 0;\r\n        this.SurchargeTotalTax = 0;\r\n        this.TotalCheckout = 0;\r\n        this.NonRefundableSurcharge = 0;\r\n        this.WarnAboutDiscount = false;\r\n        this.IsFastRefund = false;\r\n        this.IsFirstRefundDone = false;\r\n        this.isFromDearSale = false;\r\n        this.SelectedContact = null;\r\n        this.TotalBasePrice = 0;\r\n        this.TotalItemDiscount = 0;\r\n    }\r\n\r\n    isValid() {\r\n        return true;\r\n    }\r\n\r\n    static create(sale: ISale): Sale {\r\n        if (!sale) return null;\r\n\r\n        if (typeof ((<any>sale).isValid) !== 'function') {\r\n            sale = angular.extend(new Sale(), sale);\r\n            for (let i = 0; i < sale.CheckoutItems.length; i++) {\r\n                sale.CheckoutItems[i] = CheckoutItem.create(sale.CheckoutItems[i]);\r\n            }\r\n        }\r\n\r\n        return <Sale>sale;\r\n    }\r\n\r\n    // helpers\r\n    calculateTotalLoyalty(): number {\r\n        const res = Enumerable.from(this.Payments)\r\n            .where(p => p.ShortName !== PaymentShortNameStandardType.Loyalty) // exclude loyalty payments\r\n            .sum(p => !p.Loyalty ? 0 : p.Loyalty);\r\n        return ext.helperService.DEARRound(res, 2);\r\n    }\r\n\r\n    // exclude here payments that were done before. They should be marked by FromHistory === true flag\r\n    calculateSessionLoyalty(): number {\r\n        const res = Enumerable.from(this.Payments)\r\n            .where(p => p.FromHistory !== true && p.ShortName !== PaymentShortNameStandardType.Loyalty)\r\n            .sum(p => !p.Loyalty ? 0 : p.Loyalty);\r\n\r\n        return ext.helperService.DEARRound(res, 2);\r\n    }\r\n\r\n    private countSaleItems(): number {\r\n        return Enumerable.from(this.CheckoutItems)\r\n            .where(i => i.Count > 0)\r\n            .count();\r\n    }\r\n\r\n    private countReturnItems(): number {\r\n        return Enumerable.from(this.CheckoutItems)\r\n            .where(i => i.Count < 0)\r\n            .count();\r\n    }\r\n\r\n    get IsDirect(): boolean {\r\n        return this.countSaleItems() > 0 && this.countReturnItems() === 0;\r\n    }\r\n    set IsDirect(v: boolean) {\r\n    }\r\n\r\n    get IsRefund(): boolean {\r\n        return this.countSaleItems() === 0 && this.countReturnItems() > 0;\r\n    }\r\n    set IsRefund(v: boolean) {\r\n    }\r\n\r\n    get IsExchange(): boolean {\r\n        return this.countSaleItems() > 0 && this.countReturnItems() > 0;\r\n    }\r\n    set IsExchange(v: boolean) {\r\n    }\r\n}\r\n\r\nfunction initializeTSSale(): ISale {\r\n    return new Sale();\r\n}","import { IAngularStatic } from \"angular\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\ndeclare const Fingerprint: any;\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport class BiometricsAuthService {\r\n    static $inject = [BiometricsAuthService];\r\n\r\n    private static Key = 'App Biometric Auth';\r\n    private static LocalStorageKey = 'bioAuth';\r\n\r\n    constructor() {\r\n    }\r\n\r\n    isAvailable(): Promise<boolean> {\r\n        return new Promise((res, rej) => {\r\n            if (window.isSite) {\r\n                return res(false);\r\n            }\r\n            const isAvailableSuccess = (result) => {\r\n                res(!!result);\r\n            };\r\n\r\n            const isAvailableError = (error) => {\r\n                console.log(error);\r\n                res(false);\r\n            };\r\n            Fingerprint.isAvailable(isAvailableSuccess, isAvailableError);\r\n        });\r\n    }\r\n\r\n    registerSecret(value: string) {\r\n        return new Promise<void>((res, rej) => {\r\n            Fingerprint.registerBiometricSecret({\r\n                description: BiometricsAuthService.Key,\r\n                secret: value,\r\n                invalidateOnEnrollment: true,\r\n                disableBackup: true, // always disabled on Android\r\n            }, (result) => res(), (err) => rej(err));\r\n        });\r\n    }\r\n\r\n    loadSecret(): Promise<string> {\r\n        return new Promise<string>((res, rej) => {\r\n            Fingerprint.loadBiometricSecret({\r\n                description: BiometricsAuthService.Key,\r\n            }, (result) => res(result), (err) => rej(err));\r\n        });\r\n    }\r\n\r\n    isBioAuthEnabled(tenantID?: string, userID?: string) {\r\n        const auth = localStorage.getItem(BiometricsAuthService.LocalStorageKey);\r\n        return tenantID && userID ? !!auth && auth === `${tenantID}@${userID}` : !!auth;\r\n    }\r\n\r\n    getBioAuthKey() {\r\n        const auth = localStorage.getItem(BiometricsAuthService.LocalStorageKey);\r\n        return auth ? auth : null;\r\n    }\r\n\r\n    saveBioAuthKey(tenantID: string, userID: string) {\r\n        localStorage.setItem(BiometricsAuthService.LocalStorageKey, `${tenantID}@${userID}`);\r\n    }\r\n\r\n    reset() {\r\n        localStorage.removeItem(BiometricsAuthService.LocalStorageKey);\r\n    }\r\n}\r\n\r\n\r\n(<any>angular).module('services')\r\n    .service('bioAuthService', BiometricsAuthService.$inject);\r\n\r\nexport default 'bioAuthService';","import { IAngularStatic } from \"angular\";\r\nimport buildConfiguration from '../../src/PosScripts/configEnvironment';\r\n\r\ndeclare const device: any;\r\ndeclare const cordova: Cordova;\r\ndeclare const angular: IAngularStatic;\r\n// @ts-ignore\r\ndeclare const IRoot: any;\r\ninterface DeviceInfo {\r\n    model: string;\r\n    deviceID: string;\r\n    platform: 'iOS' | 'Android';\r\n    appVersion: string;\r\n    version: string;\r\n}\r\n\r\nexport class DeviceInfoService {\r\n    static $inject = [DeviceInfoService] as unknown[] as Function[];\r\n\r\n    private _deviceInfo: DeviceInfo = <DeviceInfo>{};\r\n    private isRootedDevice: boolean;\r\n    private isVirtual: boolean;\r\n\r\n    get deviceInfo(): Readonly<DeviceInfo> {\r\n        return this._deviceInfo;\r\n    }\r\n\r\n    public get isDeviceRooted() {\r\n        return !this.isVirtual && !this.isAndroid && this.isRootedDevice;\r\n    }\r\n\r\n    public get isSimulator() {\r\n        return (this.cordovaDevice ? this.cordovaDevice.isVirtual : (<any>window).isSimulator) === true;\r\n    }\r\n\r\n    public get isBrowser() {\r\n        return typeof cordova === 'undefined' || (<any>window).isSimulator;\r\n    }\r\n\r\n    public get isAndroid() {\r\n        return this.deviceInfo.platform?.toLowerCase() === 'android';\r\n    }\r\n\r\n    public get isIOS() {\r\n        return !this.isAndroid;\r\n    }\r\n\r\n    public get isDeviceVirtual() {\r\n        return this.isVirtual;\r\n    }\r\n\r\n    constructor() {\r\n        if (typeof cordova !== 'undefined' && typeof(cordova.exec) === 'function') {\r\n            // @ts-ignore\r\n            cordova.exec(() => {\r\n                (<any>window).isSimulator = true;\r\n            }, () => {}, 'cordova-simulate', 'isSimulator', []);\r\n        }\r\n\r\n        if (typeof device !== 'undefined') {\r\n        // service should be initialized when root injector is constructed, so this would be before creating any components\r\n            device.getInfo((data) => {\r\n                if (data) {\r\n                    let deviceModel = data.model;\r\n                    if (data.manufacturer && data.manufacturer !== 'unknown') {\r\n                        deviceModel = data.manufacturer + ': ' + data.model;\r\n                    }\r\n\r\n                    this._deviceInfo = {\r\n                        model: deviceModel,\r\n                        deviceID: data.uuid,\r\n                        platform: buildConfiguration.platform,\r\n                        appVersion: buildConfiguration.appVersion,\r\n                        version: data.version\r\n                    };\r\n\r\n                    this.isVirtual = data.isVirtual;\r\n                } else {\r\n                    console.log('no device getInfo data');\r\n                }\r\n            });\r\n        }\r\n\r\n        if (typeof IRoot !== 'undefined') { \r\n            IRoot.isRooted((value: boolean) => {\r\n                this.isRootedDevice = value;\r\n                console.log(\"rooted device\", value);\r\n            }, (error) => {\r\n                console.error(error);\r\n                this.isRootedDevice = false;\r\n            });\r\n        }\r\n    }\r\n\r\n    get cordovaDevice() {\r\n        return (<any>window).device;\r\n    }\r\n}\r\n\r\nangular.module('services')\r\n    .service('deviceInfo', DeviceInfoService.$inject);\r\n\r\nexport default 'deviceInfo';","import { IAngularStatic } from 'angular';\r\n\r\ndeclare const angular: IAngularStatic;\r\ndeclare const window: any;\r\ndeclare const buildConfiguration: any;\r\n\r\ninterface CredentialResponse {\r\n  credential: string;\r\n}\r\n\r\nclass GoogleHelperService {\r\n    static $inject = ['$q', 'configService', GoogleHelperService];\r\n\r\n    private loginDeferred: any;\r\n\r\n    constructor(\r\n        private $q: any,\r\n        private configService: any\r\n    ) {\r\n    }\r\n\r\n    init() {\r\n        if (this.configService.isSite && window.google?.accounts?.id) {\r\n            window.google.accounts.id.initialize({\r\n              client_id: buildConfiguration.GSuites_ClientID,\r\n              callback: this.handleCredentialResponse.bind(this),\r\n              ux_mode: 'popup'\r\n          });\r\n        }\r\n    }\r\n\r\n    login() {\r\n        const deferred = this.$q.defer();\r\n        if (this.configService.isSite && window.google?.accounts?.id) {\r\n            window.google.accounts.id.cancel();\r\n            this.loginDeferred = deferred;\r\n            window.google.accounts.id.prompt();\r\n        }\r\n        else if (!this.configService.isSite && window && window.plugins && window.plugins.googleplus) {\r\n            window.plugins.googleplus.login(\r\n                {\r\n                    'scopes': 'profile email',\r\n                    'webClientId': buildConfiguration.GSuites_ClientID\r\n                },\r\n                function (googleUser) {\r\n                    deferred.resolve(googleUser);\r\n                },\r\n                function (error) {\r\n                    deferred.reject(error);\r\n                }\r\n            );\r\n        }\r\n        return deferred.promise;\r\n    }\r\n\r\n    logout() {\r\n        if (this.configService.isSite && window.google?.accounts?.id) {\r\n          window.google.accounts.id.disableAutoSelect();\r\n        }\r\n        else if (!this.configService.isSite && window && window.plugins && window.plugins.googleplus) {\r\n            window.plugins.googleplus.logout();\r\n        }\r\n    }\r\n\r\n    private handleCredentialResponse(resp: CredentialResponse) {\r\n        if (!this.loginDeferred) {\r\n          console.warn('No pending login - ignoring credential.'); \r\n          return; \r\n        }\r\n        try {\r\n          const jwt = resp.credential;\r\n          const payload = JSON.parse(atob(jwt.split('.')[1]));\r\n          this.loginDeferred.resolve({ idToken: jwt, email: payload.email });\r\n        } catch (e) {\r\n          this.loginDeferred.reject(e);\r\n        } finally {\r\n          this.loginDeferred = null;\r\n        }\r\n      }\r\n}\r\n\r\n(<any>angular).module('services')\r\n    .service('googleHelperService', GoogleHelperService.$inject);","/// <reference types=\"cordova-plugin-inappbrowser\" />\r\nimport { IAngularStatic } from 'angular';\r\nimport buildConfiguration from '../../src/PosScripts/configEnvironment';\r\nimport { IConfigService } from '../Typings/Typings';\r\nimport { DeviceInfoService } from './device-info.service';\r\n//import deviceInfo from './device-info.service';\r\n\r\ndeclare var $: any;\r\n//declare const cordova: Cordova;\r\ndeclare const angular: IAngularStatic;\r\n\r\nangular.module('mainApp')\r\n    .constant('MSClientID', buildConfiguration.MS_ClientID);\r\n\r\n// const REDIRECT_URL = 'http://localhost/msauth';\r\n\r\ninterface IPopupImplementation {\r\n    open(url): WindowProxy;\r\n    getRedirectedUrl(popup: WindowProxy, url: string): Promise<string>;\r\n}\r\n\r\n\r\nclass PopupCordova implements IPopupImplementation {\r\n    open(url: any): WindowProxy {\r\n        return cordova.InAppBrowser.open(url, '_blank') as unknown as WindowProxy;\r\n    }\r\n\r\n    getRedirectedUrl(popup: WindowProxy, url: string): Promise<string> {\r\n        return new Promise((res, _) => {\r\n            // @ts-ignore\r\n            popup.addEventListener('loadstart', (e: Event & {url: string}) => {\r\n                console.log('loadstart');\r\n                console.log(JSON.stringify(e));\r\n                if (e.url.startsWith(url)) {\r\n\r\n                    popup.close();\r\n                    res(e.url);\r\n                }\r\n            });\r\n\r\n            popup.addEventListener('exit', () => {\r\n                res(null);\r\n            });\r\n        });\r\n    }\r\n\r\n}\r\n\r\nclass PopupBrowser implements IPopupImplementation {\r\n\r\n    private ticks = 0;\r\n    private readonly timeout = 60 * 1000 * 5;\r\n    private readonly interval = 100;\r\n    popupRef: Window;\r\n\r\n    open(url: any): WindowProxy {\r\n        return window.open(url, 'msal', this.getPopupSettings())\r\n    }\r\n\r\n    getRedirectedUrl(popup: WindowProxy, url: string): Promise<string> {\r\n        this.ticks = 0;\r\n        this.popupRef = popup;\r\n        return new Promise((resolve, reject) => {\r\n            const intervalId = setInterval(() => {\r\n                this.ticks++;\r\n                const maxTicks = this.timeout / this.interval;\r\n                if (this.ticks > maxTicks) {\r\n                    this.popupRef.close();\r\n                    reject('Login not completed');\r\n                }\r\n                if (this.popupRef.closed) {\r\n                    \r\n                    clearInterval(intervalId);\r\n                    resolve(null);\r\n                    return;\r\n                }\r\n\r\n                let href = '';\r\n                try {\r\n                    href = this.popupRef.location.href;\r\n                } catch {\r\n\r\n                }\r\n                if (!href) return;\r\n                if (href.startsWith(url)) {\r\n                    clearInterval(intervalId);\r\n                    this.popupRef.close();\r\n                    resolve(href);\r\n                }\r\n            }, 100);\r\n        });\r\n    }\r\n\r\n    private getPopupSettings() {\r\n        const winLeft = window.screenLeft ? window.screenLeft : window.screenX;\r\n        const winTop = window.screenTop ? window.screenTop : window.screenY;\r\n       \r\n        const winWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n        const winHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\r\n\r\n        const POPUP_WIDTH = 483;\r\n        const POPUP_HEIGHT = 600;\r\n\r\n        const left = Math.max(0, winWidth / 2 - POPUP_WIDTH / 2 + winLeft);\r\n        const top = Math.max(0, winHeight / 2 - POPUP_HEIGHT / 2 + winTop);\r\n        return `popup=yes, width=${POPUP_WIDTH}, height=${POPUP_HEIGHT}, top=${top}, left=${left}`;\r\n    }\r\n\r\n}\r\n\r\nclass PopupImplementationFactory {\r\n    create(isSite: boolean) {\r\n        if (isSite) {\r\n            return new PopupBrowser();\r\n        }\r\n\r\n        return new PopupCordova();\r\n    }\r\n}\r\n\r\n\r\nexport class MSALService {\r\n    static $inject = ['MSClientID', 'configService', 'deviceInfo', MSALService];\r\n\r\n    constructor(private MSClientID: string, private configService: IConfigService, private deviceInfo: DeviceInfoService) {\r\n    }\r\n    private _isAvailable = true;\r\n\r\n    get isAvailable() {\r\n        return this._isAvailable;\r\n    }\r\n\r\n    login(): Promise<{username: string; token: string; id: string}> {\r\n        if (!this._isAvailable) return Promise.resolve(null);\r\n\r\n        const scope = encodeURIComponent('openid profile email user.read');\r\n\r\n        const redirectUrl = encodeURI(this.getRedirectUrl());\r\n        let loginUrl = `https://login.microsoftonline.com/common/oauth2/v2.0/authorize?scope=${scope}&response_type=id_token&response_mode=fragment&prompt=select_account`;\r\n        loginUrl += `&client_id=${this.MSClientID}`;\r\n        loginUrl += `&redirect_uri=${redirectUrl}`;\r\n        loginUrl += `&nonce=${Math.floor(Math.random() * 10000000)}`;\r\n\r\n        const popupImpl = new PopupImplementationFactory().create(this.configService.isSite || this.deviceInfo.isBrowser);\r\n\r\n        const popup =  popupImpl.open(loginUrl);\r\n\r\n\r\n\r\n        return popupImpl.getRedirectedUrl(popup, this.getRedirectUrl()).then(url => {\r\n            if (!url) return null;\r\n            const params =  new URLSearchParams(url.replace(this.getRedirectUrl() + '#', ''));\r\n            const token = params.get('id_token');\r\n            const claims = this.parseJwt(token);\r\n            const userID = claims.oid;\r\n            const email = claims.preferred_username;\r\n\r\n            return {id: userID, token: token, username: email};\r\n        });\r\n    }\r\n\r\n    private parseJwt(token: string) {\r\n        const base64Url = token.split('.')[1];\r\n        const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\r\n        const jsonPayload = decodeURIComponent(window.atob(base64).split('').map(function(c) {\r\n            return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\r\n        }).join(''));\r\n\r\n        return JSON.parse(jsonPayload);\r\n    }\r\n\r\n    private getRedirectUrl() {\r\n        if (this.configService.isSite || this.deviceInfo.isBrowser) {\r\n            // in debug ms will only accept localhost:8000\r\n            return location.origin + '/redirect.html'\r\n        }\r\n\r\n        return location.origin + '/redirect.html'\r\n    }\r\n}\r\n\r\n(<any>angular).module('services')\r\n    .service('msalService', MSALService.$inject);\r\n\r\nexport default 'msalService'","import { convertFromOld } from \"../ConverterService\";\r\nimport { HelperService, JsStoreProvider, LocalDBProvider } from \"../Typings/Typings\";\r\nimport { IAngularStatic } from 'angular';\r\nimport { DeviceInfoService } from \"./device-info.service\";\r\n\r\ndeclare var $: any;\r\ndeclare const angular: IAngularStatic;\r\n\r\nclass OfflineSaleService {\r\n    static $inject = ['$q', 'helperService', 'configService', 'localDBProvider', 'jsStoreProvider', 'deviceInfo', OfflineSaleService];\r\n\r\n    constructor(\r\n        private $q: any,\r\n        private helperService: HelperService,\r\n        private configService: any,\r\n        private localDBProvider: LocalDBProvider,\r\n        private jsStoreProvider: JsStoreProvider,\r\n        private deviceInfo: DeviceInfoService\r\n    ) {\r\n    }\r\n\r\n    clearOfflineSales(): PromiseLike<any> {\r\n        if (this.configService.isSite) {\r\n            const deferred = this.$q.defer();\r\n            this.helperService.storeSaleQueue([]);\r\n            deferred.resolve(null);\r\n            return deferred.promise;\r\n        } else {\r\n            return this.localDBProvider.removeSales(this.configService.posName, null, 'parked');\r\n        }\r\n    }\r\n\r\n    getCount(): PromiseLike<number> {\r\n        if (this.configService.isSite) {\r\n            const deferred = this.$q.defer();\r\n            const queueSales = this.helperService.getSaleQueue();\r\n            const countQueue = queueSales && Array.isArray(queueSales) ? queueSales.length : 0;\r\n            deferred.resolve(countQueue);\r\n            return deferred.promise;\r\n        } else {\r\n            return this.localDBProvider.loadOfflineSalesCount(this.configService.posName, null, null, 'parked');\r\n        }\r\n    }\r\n\r\n    loadOfflineSalesErrorHistory(): PromiseLike<Array<any>> {\r\n        let deferred = this.$q.defer();\r\n        if (!this.configService.isSite || (<any>window).isSupported) {\r\n            const provider = this.configService.isSite || this.deviceInfo.isSimulator ? this.jsStoreProvider : this.localDBProvider;\r\n            const THIS = this;\r\n            const pr = provider.loadOfflineSalesErrorHistory(this.configService.lastDearPosName)\r\n                .then((data) => {\r\n                    deferred = THIS.$q.defer();\r\n                    let result = data.map(function(el) {\r\n                        el.sale = JSON.parse(el.Packed);\r\n                        el.sale = convertFromOld(el.sale);\r\n                        el.info = JSON.parse(el.InfoPacked); \r\n                        el.Status = el.StatusID;\r\n                        delete el.Packed;\r\n                        delete el.InfoPacked;\r\n                        return el;\r\n                    });\r\n                    result.push(...this.loadOfflineSalesFromQueue());\r\n\r\n                    deferred.resolve(result);\r\n                    return deferred.promise;\r\n                });\r\n            return pr;\r\n        } else {\r\n            deferred.resolve(this.loadOfflineSalesFromQueue());\r\n            return deferred.promise;\r\n        }\r\n\r\n    };\r\n\r\n    loadOfflineSalesFromQueue() {\r\n        const queue = this.helperService.getSaleQueue();\r\n        return queue && Array.isArray(queue)\r\n        ? queue.map(el => {\r\n            return el;\r\n        })\r\n        : [];\r\n    }\r\n\r\n    removeFromHistory(saleID: string, operationID: string): PromiseLike<void> {\r\n        const provider = this.configService.isSite || this.deviceInfo.isSimulator ? this.jsStoreProvider : this.localDBProvider;\r\n        return provider.removeSale(saleID, null, operationID);\r\n    }\r\n}\r\n\r\n(<any>angular).module('services')\r\n    .service('offlineSaleService', OfflineSaleService.$inject);","import { Observable, Subject } from \"rxjs\";\r\nimport { HelperService, IGetTextCatalog } from \"../../Typings/Typings\";\r\nimport { IScope } from \"angular\";\r\n\r\nexport interface IOption {\r\n    name: string, value: string\r\n}\r\nexport interface IDialogQuestion {\r\n    Text: string;\r\n    Options: IOption[];\r\n    IsError?: boolean;\r\n}\r\n\r\n\r\nexport class ProgressDialog {\r\n    private progressText = \"\";\r\n    private isProgressShown = false;\r\n    private hideButtons = false;\r\n    private parentScope: IScope;\r\n\r\n    get parentScopeAny() {\r\n        return this.parentScope as any;\r\n    }\r\n\r\n    private dialogCalled = false;\r\n    private lastQuestion: IDialogQuestion;\r\n    private caption: string;\r\n\r\n    private _cancelSubject = new Subject<void>();\r\n    get onCancel() {\r\n        return this._cancelSubject as Observable<void>;\r\n    }\r\n\r\n    private _answerSubject = new Subject<string>();\r\n    get onAnswer() {\r\n        return this._answerSubject as Observable<string>;\r\n    }\r\n\r\n    constructor(private gettextCatalog: IGetTextCatalog, private $timeout: ng.ITimeoutService, private helperService: HelperService,\r\n        scope: any, caption: string) {\r\n        this.parentScope = scope;\r\n        this.caption = caption;\r\n    }\r\n\r\n\r\n    showProgressDialog() {\r\n        if (this.isProgressShown) {\r\n            return;\r\n        }\r\n        this.$timeout(() => {\r\n            this.parentScopeAny.customModalDlg2Caption = this.caption;;\r\n            this.parentScopeAny.customModalDlg2Text = this.progressText;\r\n\r\n            if (!this.hideButtons) {\r\n                this.parentScopeAny.customModalDlg2Buttons = [{\r\n                    name: this.gettextCatalog.getString('Cancel'),\r\n                    value: 'CANCEL'\r\n                }];\r\n            }\r\n            else {\r\n                this.parentScopeAny.customModalDlg2Buttons = [];\r\n            }\r\n\r\n            this.parentScopeAny.callbackModal2 = (code) => {\r\n                this.showProgressDialog();\r\n\r\n                this.isProgressShown = false;\r\n                //d1.resolve(code);\r\n                this._answerSubject.next(code);\r\n                this.dialogCalled = false;\r\n                return true;\r\n            };\r\n        });\r\n\r\n        this.isProgressShown = true;\r\n        this.$timeout(() => {\r\n            this.helperService.showDialog('#customModalDlg2');\r\n        });\r\n    }\r\n\r\n    hideProgressDialog(force = false) {\r\n        if (this.isProgressShown || force) {\r\n            this.$timeout(() => {\r\n                this.helperService.closeDialog('#customModalDlg2');\r\n                this.isProgressShown = false;\r\n            });\r\n\r\n        }\r\n    };\r\n\r\n    updateText(text: string) {\r\n        this.$timeout(() => {\r\n            this.progressText = text;\r\n            if (this.isProgressShown) {\r\n                this.parentScopeAny.customModalDlg2Text = this.progressText;\r\n            }\r\n        });\r\n    }\r\n\r\n    updateButtonsAndText(text: string, buttons: IOption[]) {\r\n        this.$timeout(() => {\r\n            this.setButtonsAndText({ Text: text, Options: buttons })\r\n        });\r\n    }\r\n\r\n    askQuestion(q: IDialogQuestion) {\r\n        this.hideProgressDialog();\r\n        if (!this.dialogCalled) {\r\n            this.lastQuestion = q;\r\n            this.dialogCalled = true;\r\n\r\n            this.$timeout(() => {\r\n                this.setButtonsAndText(q);\r\n            });\r\n\r\n            this.hideProgressDialog();\r\n        }\r\n        else if (q.IsError === true) {\r\n            this.lastQuestion = q;\r\n            this.dialogCalled = true;\r\n            this.$timeout(() => this.setButtonsAndText(q));\r\n\r\n        }\r\n    }\r\n\r\n    destroy() {\r\n        this.hideProgressDialog(true);\r\n        if (this.dialogCalled) {\r\n            this.dialogCalled = false;\r\n            this.parentScopeAny.callbackModal2(null);\r\n            this.parentScopeAny.callbackModal2 = () => { };\r\n            this._answerSubject.complete();\r\n            this._cancelSubject.complete();\r\n            this.parentScope = null;\r\n        }\r\n\r\n    }\r\n\r\n    private setButtonsAndText(q: IDialogQuestion): void {\r\n        this.updateText(q.Text);\r\n        let buttons = [];\r\n        if (!q || !q.Options || q.Options.length === 0) {\r\n            buttons = [{\r\n                name: this.gettextCatalog.getString('Cancel'),\r\n                value: 'CANCEL'\r\n            }];\r\n        }\r\n\r\n        for (const o of q.Options) {\r\n            buttons.push({\r\n                value: o.value,\r\n                name: o.name\r\n            });\r\n        }\r\n        this.parentScopeAny.customModalDlg2Buttons = buttons;\r\n    }\r\n}","export interface BaseTransactionData {\r\n    Station: string;\r\n    DeviceId: string;\r\n    PosName: string;\r\n    PosVersion?: string;\r\n    VendorId: string;\r\n}\r\n\r\nexport interface TransactionData extends BaseTransactionData {\r\n\r\n    Amount: number;\r\n    AmountCash?: number;\r\n    Cur: string;\r\n    TxnType: 'Purchase' | 'Validate' | 'Auth ' | 'Refund' | 'Status' | 'UI';\r\n    TxnRef: string;\r\n\r\n    MRef?: string;\r\n    UrlSuccess?: string;\r\n    UrlFail?: string;\r\n}\r\n\r\nexport interface InitialTransactionResponse {\r\n    TxnType: 'Purchase' | 'Validate' | 'Auth ' | 'Refund' | 'Status' | 'UI';\r\n    StatusId: StatusId;\r\n    TxnStatusId: TxnStatusId;\r\n    Complete: number;\r\n    ReCo: string;\r\n    Tmo: number;\r\n    TxnRef: string;\r\n    DL1: string;\r\n    DL2: string;\r\n    B1: string;\r\n    B2: string;\r\n}\r\n\r\nexport interface TransactionResult {\r\n    AC?: string;\r\n    AP?: string;\r\n    CN?: string;\r\n    CT?: string;\r\n    DS?: string;\r\n    DS_TZ?: string;\r\n    DT?: string;\r\n    DT_TZ?: string;\r\n    PIX?: string;\r\n    RID?: string;\r\n    RRN?: string;\r\n    ST?: string;\r\n    TR?: string;\r\n    DBID?: string;\r\n    RC?: string;\r\n    RT?: string;\r\n    RTT?: number;\r\n    AmtA?: number;\r\n    AmtS?: number;\r\n    AmtT?: number;\r\n    AmtC?: number;\r\n    MID?: string;\r\n    TID?: string;\r\n    AutoSig?: any;\r\n    CaStan?: any;\r\n}\r\n\r\nexport interface TransactionResponse extends InitialTransactionResponse {\r\n    RcptW: number;\r\n    Rcpt: string;\r\n    Result: TransactionResult;\r\n\r\n    MerchantReceipt?: string;\r\n    MerchantReceiptWidth?: number\r\n}\r\n\r\n\r\nexport enum TxnStatusId {\r\n\r\n    Idle = 1,\r\n    PresentOrInsertCard = 2,\r\n    SelectAccount = 3,\r\n    SelectApp = 4,\r\n    EnterPin = 5,\r\n    Processing = 6,\r\n    VerifyingSignature = 7,\r\n    DisplayResult = 8\r\n}\r\n\r\n\r\nexport enum StatusId {\r\n    Initiating = 1,\r\n    TransactionStarted = 2,\r\n    TransactionStarted2 = 3,\r\n    Processing = 4,\r\n    Authenticating = 5,\r\n    TransactionCompleted = 6,\r\n}\r\n\r\n\r\nexport interface WindcaveSettings {\r\n    printWindcaveReceipts: boolean;\r\n}","import { IAngularStatic, IHttpResponse } from \"angular\";\r\nimport { IMakePaymentOptions, IPaymentProvider, IRefundOptions, IResponse } from \"../Interfaces\";\r\nimport { IPayment } from \"../../../Interfaces\";\r\nimport { HelperService, IConfigService, IGetTextCatalog } from \"../../../Typings/Typings\";\r\nimport { Builder, Parser } from 'xml2js';\r\n\r\nimport buildConfiguration from \"../../../../src/PosScripts/configEnvironment\";\r\nimport { Observable, Subject, Subscription, TimeoutError, catchError, concatMap, delay, from, map, repeat, switchMap, take, takeUntil, tap, throwError, timeout, timer } from \"rxjs\";\r\nimport { IOption, ProgressDialog } from \"../progress-dialog\";\r\nimport { BaseTransactionData, InitialTransactionResponse, StatusId, TransactionData, TransactionResponse, TransactionResult, WindcaveSettings } from \"./interfaces\";\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\n\r\nconst parseNumbers = (str: string) => {\r\n    if (!isNaN(<number><unknown>str)) {\r\n        // 00000123 like strings\r\n        if (str && typeof str === 'string' && str != '0' && str[0] === '0') {\r\n            return str;\r\n        }\r\n        return <any>str % 1 === 0 ? parseInt(str, 10) : parseFloat(str);\r\n      }\r\n      return str;\r\n};\r\n\r\n\r\nexport class WindcaveProviderService implements IPaymentProvider<TransactionResponse> {\r\n    static $inject = ['configService', '$http', 'gettextCatalog', '$timeout', 'helperService', '$q', 'printService', '$sce', WindcaveProviderService];\r\n\r\n    cancelPolling: Subject<void> = new Subject<void>();\r\n    progressDialog: ProgressDialog;\r\n    isPolling: boolean;\r\n    polling: Subscription;\r\n\r\n    responseObservable: Subject<InitialTransactionResponse> = new Subject<InitialTransactionResponse>();\r\n    responseSubscription: Subscription;\r\n    merchantReceipt: string;\r\n    merchantReceiptWidth: any;\r\n    lastResult: IResponse;\r\n    settings: WindcaveSettings;\r\n\r\n    get subscribeObject() {\r\n        return { next: (v) => this.responseObservable.next(v), error: err => this.responseObservable.error(err) };\r\n    }\r\n\r\n    get url(): string {\r\n        return this.configService.isQAMode ? 'https://uat.windcave.com/pxmi3/pos.aspx' : 'https://sec.windcave.com/pxmi3/pos.aspx';\r\n    }\r\n\r\n    readonly POSName = 'Cin7 Core POS';\r\n    readonly POSVersion = buildConfiguration.appVersion;\r\n    readonly POSVendorId = '5745F5888DC641A39DFB';\r\n\r\n    public parentScope: any;\r\n\r\n    private deferred: ng.IDeferred<IResponse>;\r\n    private currentRef: string;\r\n    private lastStatus: StatusId;\r\n    private mode: 'transaction' | 'refund';\r\n\r\n    constructor(private configService: IConfigService,\r\n        private $http: ng.IHttpService,\r\n        private gettextCatalog: IGetTextCatalog,\r\n        private $timeout: ng.ITimeoutService,\r\n        private helperService: HelperService,\r\n        private $q: ng.IQService,\r\n        private printService: any,\r\n        private $sce: ng.ISCEService) {\r\n    }\r\n   \r\n    get disablePaymentOnFailed(): boolean {\r\n        return true;\r\n    }\r\n\r\n    get timeout(): number {\r\n        return this.configService.isQAMode ? 180_000 : 90_000;\r\n    }\r\n\r\n\r\n    getCardInfo(metadata: TransactionResponse): { catdPAN: string; cardType: string; } {\r\n        return { catdPAN: metadata.Result?.CN, cardType: metadata.Result?.CT };\r\n    }\r\n\r\n    private process(callback: () => Observable<InitialTransactionResponse>, type: 'refund' | 'transaction') {\r\n        this.initState();\r\n        this.validate()\r\n        this.mode = type;\r\n\r\n        this.settings = this.configService.getCardPaymentSettings<WindcaveSettings>();\r\n\r\n        this.progressDialog.showProgressDialog();\r\n        this.progressDialog.updateText(this.gettextCatalog.getString('Initiating {{type}}...', { type: type}));\r\n        this.progressDialog.onCancel.subscribe(() => this.returnError(this.gettextCatalog.getString('{{type}} cancelled', { type: type })));\r\n        this.progressDialog.onAnswer.subscribe((answer) => this.answer(answer));\r\n\r\n        this.responseObservable.pipe(timeout({ each: this.timeout })).subscribe({\r\n            next: this.checkStatus.bind(this),\r\n            error: this.returnError.bind(this),\r\n            complete: () => console.log('complete observable')\r\n        })\r\n        \r\n        callback().subscribe(this.subscribeObject);\r\n\r\n        return (this.deferred.promise as Promise<any>).finally(this.destroy.bind(this));\r\n    }\r\n\r\n\r\n    makePayment(options: IMakePaymentOptions): Promise<any> {\r\n        return this.process(() => this.postTransaction(options), 'transaction');\r\n    }\r\n\r\n    refund(payment: IPayment, amount: number, options: IRefundOptions): Promise<any> {\r\n        if (!payment.TransactionMetaData) throw new Error('Transaction metadata not found.');\r\n        return this.process(() =>  {\r\n            const response = (typeof payment.TransactionMetaData === 'string' ? JSON.parse(payment.TransactionMetaData) : payment.TransactionMetaData) as TransactionResponse;\r\n            return this.postRefund(amount, response.TxnRef, response.Result.TR, options.currency)\r\n        }, 'refund');\r\n    }\r\n\r\n    init(_, __): Promise<void> {\r\n        return Promise.resolve();\r\n    }\r\n\r\n    closeConnection(): void {\r\n        this.destroy();\r\n    }\r\n\r\n    startPolling() {\r\n        this.cancelPolling = new Subject<void>();\r\n        this.cancelPolling.pipe(take(1)).subscribe(x => {\r\n            this.isPolling = false;\r\n            this.polling?.unsubscribe();\r\n        });\r\n        if (this.polling && !this.polling.closed) {\r\n            this.polling.unsubscribe();\r\n        }\r\n        this.isPolling = true;\r\n        const poll = timer(0, 500).pipe(\r\n            concatMap(_ => this.statusCall(this.currentRef)),\r\n            tap((res) => console.log(res)),\r\n            delay(1000),\r\n            repeat(),\r\n            takeUntil(this.cancelPolling)\r\n        );\r\n        this.polling = poll.subscribe(this.subscribeObject);\r\n\r\n    }\r\n\r\n    getReceiptAsHtml(receipt: string, width: number): string {\r\n        const regex = new RegExp(`(.{${width}})`, 'g');\r\n\r\n        const lines = receipt.split('\\n');\r\n\r\n        const str = lines.map(line => line.replace(regex, '$1<br />')).join('<br />');\r\n\r\n        return `<pre style=\"background-color: unset;border: none;\">${str}</pre>`\r\n    }\r\n\r\n    private returnError(err: any) {\r\n        let text = typeof err === 'string' ? err : err.message;\r\n        if (err instanceof TimeoutError) {\r\n            text = this.gettextCatalog.getString('Transaction timeout: please try again');\r\n        }\r\n        this.deferred.reject(<IResponse>{\r\n            result: false,\r\n            disableAddPayment: err instanceof TimeoutError && this.lastStatus !== null ? false : undefined,\r\n            response: {\r\n                errorDescription: text\r\n            }\r\n        })\r\n    }\r\n\r\n    private initState() {\r\n        this.lastResult = null;\r\n        this.settings = <WindcaveSettings>{};\r\n        this.merchantReceipt = null;\r\n        this.merchantReceiptWidth = null;\r\n        this.lastStatus = null;\r\n        this.isPolling = false;\r\n        this.currentRef = '';\r\n        if (!(this.responseObservable?.closed ?? true)) this.responseObservable.complete();\r\n        this.responseObservable = new Subject<InitialTransactionResponse>();\r\n        this.progressDialog = new ProgressDialog(this.gettextCatalog, this.$timeout, this.helperService, this.parentScope, this.gettextCatalog.getString('Windcave payment'));\r\n        this.deferred = this.$q.defer<IResponse>();\r\n    }\r\n\r\n    private destroy() {\r\n        this.settings = <WindcaveSettings>{};\r\n        this.progressDialog?.destroy();\r\n        if (!(this.polling?.closed ?? true)) this.polling?.unsubscribe();\r\n        this.cancelPolling?.complete();\r\n        this.responseObservable?.complete();\r\n        this.responseObservable = null;\r\n        this.deferred = null;\r\n        this.merchantReceipt = null;\r\n        this.merchantReceiptWidth = null;\r\n    }\r\n\r\n    private checkStatus(response: InitialTransactionResponse): InitialTransactionResponse {\r\n        \r\n        const isStatusDefined = typeof response.StatusId !== 'undefined';\r\n\r\n        if (response.TxnType === 'UI') {\r\n            if (!this.isPolling) this.startPolling();\r\n            return null;\r\n        }\r\n\r\n        this.progressDialog?.showProgressDialog();\r\n\r\n        if (response.Complete != 1) {\r\n            this.updateTextAndButtons(response);\r\n            if (!this.isPolling) this.startPolling();\r\n            return null;\r\n        }\r\n\r\n        if (this.isPolling) {\r\n            this.cancelPolling.next();\r\n        }\r\n        if (response.Complete == 1 || isStatusDefined && response.StatusId === StatusId.TransactionCompleted) {\r\n            response.Complete = 1;\r\n            const res = this.processCompletedResponse(response as TransactionResponse);\r\n            if (res.result) {\r\n                this.lastResult = res;\r\n                if (!this.merchantReceipt && (response as TransactionResponse).Result?.AP == '1' && res.response.TransactionMetaData) {\r\n                    this.requestReceipt().subscribe( { complete: () => {\r\n                            res.response.TransactionMetaData.MerchantReceipt = this.merchantReceipt;\r\n                            res.response.TransactionMetaData.MerchantReceiptWidth = Number(this.merchantReceiptWidth);\r\n                            this.deferred.resolve(res);\r\n                        }});\r\n                } else {\r\n                    if (res.response.TransactionMetaData) {\r\n                        res.response.TransactionMetaData.MerchantReceipt = this.merchantReceipt;\r\n                        res.response.TransactionMetaData.MerchantReceiptWidth = this.merchantReceiptWidth;\r\n                    }\r\n                    this.deferred.resolve(res);\r\n                }\r\n                \r\n            } else {\r\n                this.deferred.reject(res);\r\n            }\r\n            \r\n            return response\r\n        }\r\n        else {\r\n            const receipt = (response as TransactionResponse).Rcpt;\r\n            if (receipt && typeof receipt === 'string' && receipt.indexOf('MERCHANT COPY') !== -1) { \r\n                this.merchantReceipt = receipt;\r\n                this.merchantReceiptWidth = Number((response as TransactionResponse).RcptW);\r\n                if (this.settings.printWindcaveReceipts) {\r\n                    this.printReceipt();\r\n                }\r\n            }\r\n            this.progressDialog.askQuestion({\r\n                Text: response.DL2 ? response.DL1 + '\\n' + response.DL2 : response.DL1,\r\n                Options: [\r\n                    { name: response.B1, value: response.B1 },\r\n                    { name: response.B2, value: response.B2 },\r\n                ]\r\n            });\r\n        }\r\n\r\n        return response;\r\n    }\r\n    \r\n    updateTextAndButtons(response: InitialTransactionResponse) {\r\n        const buttons = [];\r\n        if (response.B1) {\r\n            buttons.push({ name: response.B1, value: response.B1 });\r\n        }\r\n        if (response.B2) {\r\n            buttons.push({ name: response.B2 === 'CANCEL' ? this.gettextCatalog.getString('Cancel') : response.B2, value: response.B2 });\r\n        }\r\n        \r\n        if (response.DL1 || response.DL2 || buttons.length > 0) \r\n            this.progressDialog?.updateButtonsAndText(response.DL2 ? response.DL1 + '\\n' + response.DL2 : response.DL1, buttons);\r\n    }\r\n\r\n    getReceipt(transactionData: TransactionResponse, isMerchant: boolean) {\r\n        if (!this.configService.getCardPaymentSettings<WindcaveSettings>()?.printWindcaveReceipts) {\r\n            return null;\r\n        }\r\n        if (isMerchant) {\r\n            if (!transactionData.MerchantReceipt) return null;\r\n            const s = this.getReceiptAsHtml(transactionData.MerchantReceipt, transactionData.MerchantReceiptWidth);\r\n            return {\r\n                \r\n                MerchantReceipt: this.$sce.trustAsHtml(s)\r\n            };\r\n        }\r\n        else\r\n        {\r\n            if (!transactionData.Rcpt) return null;\r\n            const s = this.getReceiptAsHtml(transactionData.Rcpt, transactionData.RcptW);\r\n            return {\r\n                CustomerReceipt: this.$sce.trustAsHtml(s)\r\n            };\r\n        }\r\n    };\r\n\r\n    private printReceipt() {\r\n        const deferred = this.$q.defer();\r\n        try {\r\n            if (!this.merchantReceipt) {\r\n                deferred.resolve();\r\n                return deferred.promise;\r\n            }\r\n            this.printService.finishPrintCollectMode();\r\n            this.printService.printDataContainer = [{data: $(this.getReceiptAsHtml(this.merchantReceipt, this.merchantReceiptWidth))}];\r\n            return this.printService.printReceiptFromHTML()\r\n            .catch(err => console.log(err))\r\n            .finally(err => {\r\n                this.printService.resetPrintCollectMode();\r\n                deferred.resolve();\r\n                return deferred.promise;\r\n            });\r\n        } catch (e) {\r\n            console.log(e)\r\n        }\r\n      \r\n    }\r\n    \r\n    private requestReceipt() {\r\n        return this.call(this.toXML(\r\n            {\r\n                ...this.createRequest(),\r\n                TxnType: 'Receipt',\r\n                ReceiptType: '1',\r\n                TxnRef: this.currentRef,\r\n            }\r\n        )).pipe(timeout({ each:  1000 * 20}), tap(res => {\r\n            this.merchantReceipt = (<TransactionResponse>res).Rcpt;\r\n            this.merchantReceiptWidth = Number((res as TransactionResponse).RcptW);\r\n        }), take(1));\r\n    }\r\n\r\n    private answer(answer: string): void {\r\n        this.cancelPolling?.next();\r\n\r\n        if (answer === 'cancel')  {\r\n            if (this.lastResult) {\r\n                this.deferred.resolve(this.lastResult);\r\n            }\r\n            return this.returnError('Transaction cancelled');\r\n        }\r\n        \r\n        this.call(this.toXML(\r\n            {\r\n                ...this.createRequest(),\r\n                TxnType: 'UI',\r\n                TxnRef: this.currentRef,\r\n                UiType: 'Bn',\r\n                Name: answer,\r\n                Val: answer\r\n            }\r\n        )).pipe(take(1)).subscribe(this.subscribeObject);\r\n    }\r\n\r\n    private processCompletedResponse(response: TransactionResponse): IResponse {\r\n        console.log('completed: ');\r\n        console.log(response);\r\n        this.cancelPolling?.next();\r\n\r\n        const error = (err: string) => ({\r\n            result: false,\r\n            response: {\r\n                errorDescription: err\r\n            }\r\n        });\r\n        if (response.ReCo !== '00' && <any>response.ReCo !== 0 && response.ReCo !== '0' && response.ReCo !== undefined) {\r\n            return error(this.getDescriptionFromReCo(response.ReCo, response.DL1));\r\n        } else if (<any>response.Result?.AP !== 1) {\r\n            if (response.DL1) {\r\n                this.updateText(response);\r\n            }\r\n            return error(response.Result?.RT ? `${response.Result?.RT} (${response.Result.RC})` :  response.Result?.AC || response.Result?.RC);\r\n        } else {\r\n            if (response.DL1) {\r\n                this.updateText(response);\r\n            }\r\n            return {\r\n                result: true,\r\n                amount: response.Result.AmtA ? response.Result.AmtA / 100 : undefined,\r\n                response: {\r\n                    ServerTransactionID: response.Result.TR,\r\n                    TransactionMetaData: response,\r\n                }\r\n            \r\n            }\r\n        }\r\n    }\r\n\r\n    private updateText(response: InitialTransactionResponse) {\r\n        this.progressDialog.updateText(response.DL2 ? response.DL1 + '\\n' + response.DL2 : response.DL1);\r\n    }\r\n\r\n\r\n    private postTransaction(options: IMakePaymentOptions): Observable<InitialTransactionResponse> {\r\n        this.currentRef = options.Sale.ID;\r\n        return this.call(this.toXML(\r\n            <TransactionData>{\r\n                ...this.createRequest(),\r\n                TxnType: 'Purchase',\r\n                TxnRef: options.Sale.ID,\r\n                Amount: options.amount,\r\n                Cur: options.currency,\r\n                MRef: options.OrderNumber,\r\n            }\r\n        ));\r\n    }\r\n\r\n    private postRefund(amount : number, ref: string, id: string, currency: string): Observable<InitialTransactionResponse> {\r\n        this.currentRef = ref\r\n        return this.call(this.toXML(\r\n            <TransactionData>{\r\n                ...this.createRequest(),\r\n                TxnType: 'Refund',\r\n                TxnRef: ref,\r\n                Amount: amount,\r\n                Cur: currency,\r\n                DpsTxnRef: id,\r\n            }\r\n        ));\r\n    }\r\n\r\n    private statusCall(ref: string): Observable<InitialTransactionResponse> {\r\n        return this.call(this.toXML(\r\n            {\r\n                ...this.createRequest(),\r\n                TxnType: 'Status',\r\n                TxnRef: ref\r\n            }\r\n        ));\r\n    }\r\n\r\n    private call<T extends InitialTransactionResponse>(data: string) {\r\n\r\n        const processBtn = (btn: any): string => {\r\n            if (typeof btn === 'object') {\r\n                return btn.$?.en == '1' && btn._ ? btn._ : undefined;\r\n            }\r\n            return btn;\r\n        };\r\n\r\n        const headers = { 'Content-Type': 'text/xml', 'Accept': 'text/xml'};\r\n        return from<Promise<IHttpResponse<string>>>(\r\n            <Promise<IHttpResponse<string>>>this.$http.post<string>(this.configService.connectionURL + '/POSCorsProxy', \r\n                data,\r\n                { \r\n                    headers: new Headers({'packed-request-headers': encodeURIComponent(JSON.stringify(headers))}),\r\n                    responseType: 'text',\r\n                    params: { initialUrl: encodeURIComponent(this.url) },\r\n                }\r\n            )\r\n        ).pipe(\r\n            switchMap(res => {\r\n                var parser = new Parser({ valueProcessors: [parseNumbers], explicitArray: false });\r\n                return from<Promise<any>>(parser.parseStringPromise(res.data))\r\n                    .pipe(\r\n                        map((obj: {Scr: InitialTransactionResponse}) => {\r\n                            if (obj.Scr.StatusId !== undefined) {\r\n                                this.lastStatus = obj.Scr.StatusId;\r\n                            }\r\n                            obj.Scr.B1 = processBtn(obj.Scr.B1);\r\n                            obj.Scr.B2 = processBtn(obj.Scr.B2);\r\n                            if (obj.Scr.ReCo && obj.Scr.ReCo !== '00' && (<number><unknown>obj.Scr.ReCo) !== 0) {\r\n                                throw new Error(this.getDescriptionFromReCo(obj.Scr.ReCo, obj.Scr.DL2 ? obj.Scr.DL1 + ' ' + obj.Scr.DL2 : obj.Scr.DL1));\r\n                            }\r\n                            return obj.Scr as T;\r\n                        })\r\n                    );\r\n            }),\r\n            catchError(err => {\r\n                return throwError(() => err);\r\n            })\r\n        ).pipe(take(1));\r\n    }\r\n\r\n    private toXML(obj: any, action: string = 'doScrHIT') {\r\n        const builder = new Builder();\r\n\r\n        return builder.buildObject({\r\n            Scr: {\r\n                $: {\r\n                    action: action,\r\n                    user: (<any>this.configService).windcaveUsername,\r\n                    key: (<any>this.configService).windcaveKey,\r\n                },\r\n                ...obj\r\n            }\r\n        });\r\n    }\r\n\r\n    private createRequest(): BaseTransactionData {\r\n        return {\r\n            Station: (<any>this.configService).windcaveStation,\r\n            DeviceId: this.configService.lastRegistry?.length > 32 ? this.configService.lastRegistry.substr(0, 32) : this.configService.lastRegistry || 'default register',\r\n            PosName: this.POSName,\r\n            PosVersion: this.POSVersion,\r\n            VendorId: this.POSVendorId,\r\n        };\r\n\r\n    }\r\n\r\n    validate() {\r\n        if (!(<any>this.configService).windcaveUsername || !(<any>this.configService).windcaveKey) {\r\n            throw new Error(this.gettextCatalog.getString('Windcave credentials have not been configured.'));\r\n        }\r\n        if (!(<any>this.configService).windcaveStation) {\r\n            throw new Error(this.gettextCatalog.getString('Please configure Windcave station in the register settings'));\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    private getDescriptionFromReCo(code: string, text: string): string {\r\n        switch (code) {\r\n            case 'P4':\r\n                return 'PosDeviceId is greater than 32 characters';\r\n            case 'P5':\r\n                return 'PosDeviceId not matched';\r\n            case 'P7':\r\n                return 'Invalid transaction type';\r\n            case 'P8':\r\n                return 'Authentication error';\r\n            case 'P9':\r\n                return 'Authentication error—Station Id mismatch';\r\n            case 'PA':\r\n                return 'Status request error';\r\n            case 'PB':\r\n            case 'PC':\r\n                return 'SCRHIT Init Session Error';\r\n            case 'PC':\r\n                return 'Existing Txn In progress — previous transaction was left in an incomplete state, ensure sending status request of the previous transaction and its reference and status response is handled accordingly.';\r\n            case 'PD':\r\n            case 'PE':\r\n            case 'PF':\r\n                return 'SCRHIT Transmit Error — network connection issue, ensure the terminal has performed a Logon to the Windcave HOST.';\r\n            case 'PG':\r\n                return 'Init Wait Timeout';\r\n            case 'PJ':\r\n                return 'TxnRef not matched';\r\n            case 'PK':\r\n                return 'SCRHIT not enabled';\r\n            case 'PL':\r\n                return 'Invalid input parameter';\r\n            case 'PM':\r\n                return 'Txn type not allowed';\r\n            case 'PO':\r\n                return 'Invalid Station Id';\r\n            case 'TQ':\r\n                return 'HIT Start Failed — connection lost, ensure the terminal has performed a Logon to the Windcave HOST.';\r\n            default:\r\n                if (text) return text;\r\n                return 'Unknown error: ' + code;\r\n        }\r\n    }\r\n\r\n}\r\n\r\n\r\n(<any>angular).module('services')\r\n    .service('windcaveProvider', WindcaveProviderService.$inject);\r\n\r\nexport default 'windcaveProvider';","import { HelperService, IConfigService } from \"../Typings/Typings\";\r\nimport { IMessageData, ISecondScreenControllerScope } from \"../Controllers/second-screen.controller\";\r\nimport { IAngularStatic } from 'angular';\r\nimport { IReceiptSaleModel, ISale } from \"../Interfaces\";\r\n\r\ndeclare var $: any;\r\ndeclare const angular: IAngularStatic;\r\ndeclare var buildConfiguration: any;\r\ndeclare var ExternalScreen: any;\r\n\r\nexport const SecondScreenStates = {\r\n    Off: 'off',\r\n    Sale: 'sale',\r\n    Payment: 'payment'\r\n}\r\n\r\ntype SecondScreenStatesType = 'off' | 'sale' | 'payment';\r\n\r\ninterface ISecondTerminalImplementation {\r\n    processPartialReceipt(scope: any, state: SecondScreenStatesType): Promise<boolean>;\r\n    init(): Promise<boolean>;\r\n}\r\n\r\nexport class SecondTerminalService {\r\n    static $inject = ['$q', 'secondTerminalServiceImplementation', SecondTerminalService];\r\n\r\n    private isOff = true;\r\n\r\n    constructor(\r\n        private $q: any,\r\n        private implementation: ISecondTerminalImplementation\r\n    ) { }\r\n\r\n\r\n    presentationIsAvailable = false;\r\n\r\n    init() {\r\n        this.presentationIsAvailable = true;\r\n        try {\r\n            this.implementation.init();\r\n        } catch (err) {\r\n            console.log(err);\r\n        }\r\n    }\r\n\r\n    /*showBackHTML(scope, el, mode) {\r\n\r\n        if (this.presentationIsAvailable) {\r\n\r\n            if (el.length == 0)\r\n                return this.init();\r\n\r\n            switch (mode) {\r\n                case 'partialCheck':\r\n                    return this.processPartialReceipt(scope);\r\n                default:\r\n                    //return this.processReceiptHTML(el);\r\n                    break;\r\n            }\r\n        }\r\n        else {\r\n            var deffered = this.$q.defer();\r\n            deffered.resolve(null);\r\n            return deffered.promise;\r\n        }\r\n    }*/\r\n\r\n    update(scope: any, state: SecondScreenStatesType) {\r\n        try {\r\n            // do not re-render each time if it is already off\r\n            if (this.presentationIsAvailable && (state !== SecondScreenStates.Off || !this.isOff)) {\r\n                return this.implementation.processPartialReceipt(scope, state)\r\n                    .then((res) => {\r\n                        this.isOff = state == SecondScreenStates.Off;\r\n                        return res;\r\n                    });\r\n            }\r\n            else {\r\n                const deffered = this.$q.defer();\r\n                deffered.resolve(null);\r\n                return deffered.promise;\r\n            }\r\n        }\r\n        catch (ex) {\r\n            console.log(ex);\r\n            const deffered = this.$q.defer();\r\n            deffered.resolve(null);\r\n            return deffered.promise;\r\n        }\r\n    }\r\n\r\n    /*processReceiptHTML(el: any) {\r\n\r\n        const el2 = el.clone();\r\n        el2.find('div[template]').removeAttr('template');\r\n        const s = el2.html();\r\n\r\n        const itemTpl = $('script[backmonitor-template]').text();\r\n\r\n        let html = this.replace(itemTpl, '{{s}}', s);\r\n        html = this.replace(html, '{{t}}', 'receipt ' + this.uuid2.newguid());\r\n\r\n        return this.setBackHTML(html, null);\r\n    }*/\r\n}\r\n\r\nabstract class BaseMobileImplementation implements ISecondTerminalImplementation {\r\n\r\n    protected constructor(protected $timeout: any) {\r\n    }\r\n\r\n    abstract setBackHTML(html: string, scope: any): Promise<boolean>;\r\n\r\n    private replace(str, search, value) {\r\n        return str.replace(search, function () { return value; });\r\n    }\r\n\r\n    private replaceAll(str, mapObj){\r\n        var re = new RegExp(Object.keys(mapObj).map(s => `(\\{\\{${s}\\}\\})`).join(\"|\"),\"g\");\r\n    \r\n        return str.replace(re, function(matched){\r\n            return mapObj[matched.substring(2, matched.length - 2)];\r\n        });\r\n    }\r\n\r\n    async processPartialReceipt(scope: any, state: SecondScreenStatesType): Promise<boolean> {\r\n        const el = $('.receipt-template');\r\n        if (el.length == 0) {\r\n            await this.init();\r\n        }\r\n\r\n        // to trigger change detection and rerender in .receipt-template\r\n        return this.$timeout(() => scope.secondScreenState = state).then(() => this.$timeout(() => {\r\n\r\n            console.log(scope.lastSaleType);\r\n            const itemTpl = $('[backmonitor-resume]').html();\r\n\r\n            let container = $('script[backmonitor-container]').text();\r\n            container = this.replace(container, '{{t}}', 'receipt ' + Math.floor(Math.random() * (Number.MAX_SAFE_INTEGER)));\r\n\r\n            let html = this.replaceAll(container, {\r\n                backgroundColor: scope.backgroundColor,\r\n                designClass: scope.customizedUI ? 'advanced-design' : 'simple-design',\r\n                s: itemTpl\r\n            });\r\n            return this.setBackHTML(html, scope);\r\n        }));\r\n    }\r\n\r\n    init() {\r\n        const html = \"<!DOCTYPE html>\\n\" +\r\n            \"<html lang=\\\"en\\\">\\n\" +\r\n            \"  <head>\\n\" +\r\n            \"    <meta charset=\\\"utf-8\\\">\\n\" +\r\n            \"    <title>default page</title>\\n\" +\r\n            \"  </head>\\n\" +\r\n            \"  <body style=\\\"background-color:black;color:white;\\\">\\n\" +\r\n            \"  </body>\\n\" +\r\n            \"</html>\";\r\n\r\n        return this.setBackHTML(html, {});\r\n    }\r\n}\r\n\r\nclass SecondTerminalServiceIOS extends BaseMobileImplementation {\r\n    static $inject = ['$q', '$timeout', SecondTerminalServiceIOS];\r\n\r\n    constructor(private $q: any, $timeout: any) {\r\n        super($timeout);\r\n    }\r\n\r\n    setBackHTML(html: string, scope: any) {\r\n        const deferred = this.$q.defer();\r\n        ExternalScreen.checkAvailability(function (isAvailable) {\r\n            if (isAvailable) {\r\n                ExternalScreen.loadHTML(html);\r\n                deferred.resolve(true);\r\n            }\r\n\r\n            deferred.resolve(false);\r\n        })\r\n        console.log('ios');\r\n\r\n        return deferred.promise;\r\n    }\r\n}\r\n\r\nexport class SecondTerminalServiceWeb implements ISecondTerminalImplementation {\r\n    static ChannelName = \"secondScreen_channel\";\r\n    static $inject = ['configService' , SecondTerminalServiceWeb];\r\n\r\n    constructor (private configService: IConfigService) {\r\n    }\r\n\r\n    init(): Promise<boolean> {\r\n        return Promise.resolve(true);\r\n    }\r\n\r\n    processPartialReceipt(scope: any, state: SecondScreenStatesType): Promise<boolean> {\r\n        try {\r\n            // @ts-ignore\r\n            const channel = new BroadcastChannel(SecondTerminalServiceWeb.ChannelName);\r\n            channel.postMessage(<IMessageData>{ scope: this.cloneScope(scope), secondScreenState: state })\r\n\r\n            channel.close();\r\n            return Promise.resolve(true);\r\n        } catch (e) {\r\n            return Promise.reject(e);\r\n        }\r\n    }\r\n\r\n    async openSecondScreenPage() {\r\n        if (!this.configService.isSite) {\r\n            return;\r\n        }\r\n        const isRelease = buildConfiguration.configuration === \"Release\" || buildConfiguration.configuration === \"QA\";\r\n        const location = (<any>window).location;\r\n        const url = isRelease ? `${location.protocol}//${location.host}/#/secondScreen` : `${location.protocol}//${location.host}/index.html#/secondScreen`;\r\n        let secondScreenInfo: {left: number, top: number, width: number, height: number} = null;\r\n\r\n        if ('getScreenDetails' in window) {\r\n            try {\r\n                const screenDetails = await (<any>window).getScreenDetails();\r\n                if (screenDetails.screens.length > 1) {\r\n                    for (const screen of screenDetails.screens) {\r\n                        // find first external screen\r\n                        if (screen !== screenDetails.currentScreen) {\r\n                            secondScreenInfo = {\r\n                                left: screen.left,\r\n                                top: screen.top,\r\n                                height: screen.height,\r\n                                width: screen.width\r\n                            };\r\n                        }\r\n                    }\r\n                }\r\n            } catch (ex) {\r\n                console.log(ex);\r\n            }\r\n        }\r\n\r\n        let options = 'location=no,status=no,fullscreen=yes';\r\n        if (secondScreenInfo) {\r\n            for (const key in secondScreenInfo) {\r\n                options += `,${key}=${secondScreenInfo[key]}`;\r\n            }\r\n        }\r\n        (<any>window).open(url, '_blank', options);\r\n    }\r\n\r\n    private cloneScope(scope: Partial<{currentSale: ISale, receiptSaleModel: IReceiptSaleModel, lastSaleType: string, currency_symbol: string }>) {\r\n        return scope ? <Partial<ISecondScreenControllerScope>>{\r\n                //  moment dates can't be serialized\r\n                currentSale: {...scope.currentSale, Payments: scope.currentSale.Payments?.map(p => ({...p, Date: <any>p.Date?.toString()}))},\r\n                lastSaleType: scope.lastSaleType,\r\n                receiptSaleModel: {...scope.receiptSaleModel},\r\n                currency_symbol: scope.currency_symbol,\r\n                customizedUI: this.configService.customizedSecondScreenUI,\r\n                logoUrl: this.configService.secondScreenLogoUrl,\r\n                backgroundColor: this.configService.secondScreenBackground,\r\n                currencyCulture: this.configService.currencyCulture\r\n            }\r\n            : null;\r\n    }\r\n}\r\n\r\nclass SecondTerminalServiceAndroid extends BaseMobileImplementation {\r\n    static $inject = ['$q', 'helperService', 'gettextCatalog', '$timeout', SecondTerminalServiceAndroid];\r\n\r\n    constructor(private $q: any, private helperService: HelperService, private gettextCatalog: any, $timeout: any) {\r\n        super($timeout);\r\n    }\r\n\r\n    setBackHTML(html: string, scope: any) {\r\n        var deffered = this.$q.defer();\r\n\r\n\r\n        (<any>window).plugins.starPrinter.setBackDisplay(html, (err, result) => {\r\n            if (err) {\r\n                if (err === \"NO OVERLAY PERMISSION\") {\r\n                    this.askForPermission().then(() => deffered.resolve()).catch((err) => {\r\n                        console.log(err)\r\n                        deffered.resolve(err);\r\n                    });\r\n                    return;\r\n                } else {\r\n                    console.log(\"setBackDisplay failed\");\r\n                    deffered.resolve(false);\r\n                }\r\n            }\r\n            else {\r\n                console.log(\"setBackDisplay success: \" + JSON.stringify(result));\r\n                deffered.resolve(result.IsPresentationEnabled);\r\n            }\r\n\r\n            deffered.resolve(null);\r\n        });\r\n\r\n\r\n        return deffered.promise;\r\n    }\r\n\r\n    askForPermission(): Promise<void> {\r\n        const cacheKey = 'SkipOverlayPermissionWarning';\r\n        const message = this.gettextCatalog.getString(\"You need to give \\\"Draw over other apps\\\" permission to display content on second screen.\");\r\n        const skipwarn = localStorage.getItem(cacheKey) === 'true';\r\n        var deffered = this.$q.defer();\r\n\r\n        if (!skipwarn) {\r\n            this.helperService.showCustomDialog3(this.gettextCatalog.getString('Warning'), message,\r\n                this.gettextCatalog.getString('Go to settings'), '', false, true, skipwarn,\r\n                (skip) => {\r\n                    localStorage.setItem(cacheKey, skip);\r\n                    (<any>window).plugins.starPrinter.askOverlayPermission()\r\n                });\r\n        }\r\n\r\n        return deffered.promise;\r\n    }\r\n}\r\n\r\n(<any>angular).module('services')\r\n    .service('secondTerminalService', SecondTerminalService.$inject);\r\n\r\n(<any>angular).module('services')\r\n    .service('secondTerminalServiceAndroid', SecondTerminalServiceAndroid.$inject);\r\n(<any>angular).module('services')\r\n    .service('secondTerminalServiceIOS', SecondTerminalServiceIOS.$inject);\r\n(<any>angular).module('services')\r\n    .service('secondTerminalServiceWeb', SecondTerminalServiceWeb.$inject);\r\n\r\n(<any>angular).module('services')\r\n    .service('secondTerminalServiceImplementation', ['configService', 'secondTerminalServiceWeb', 'secondTerminalServiceAndroid', 'secondTerminalServiceIOS',\r\n        function (configService, secondTerminalServiceWeb, secondTerminalServiceAndroid, secondTerminalServiceIOS) {\r\n            if (configService.isSite || ((<any>window).navigator.platform && (<any>window).navigator.platform.toLowerCase().startsWith('win'))) {\r\n                return secondTerminalServiceWeb;\r\n            }\r\n            else if (buildConfiguration.platform == 'android') {\r\n                return secondTerminalServiceAndroid;\r\n            }\r\n\r\n            return secondTerminalServiceIOS;\r\n        }]);","import { IAngularStatic } from \"angular\";\r\nimport { IConfigService } from \"../Typings/Typings\";\r\nimport { DeviceInfoService } from \"./device-info.service\";\r\n\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\n\r\nexport class ServerConnectionService {\r\n\r\n    static $inject = ['$http', 'configService', 'deviceInfo', '$location', ServerConnectionService];\r\n\r\n    constructor(private $http: ng.IHttpService, private configService: IConfigService, private deviceInfo: DeviceInfoService, private $location: ng.ILocationService) {\r\n    }\r\n\r\n    public async isCertificateError(): Promise<boolean> {\r\n        if (!this.deviceInfo.isAndroid || window.isSite) return Promise.resolve(false);\r\n\r\n        try {\r\n            const version = this.deviceInfo.deviceInfo?.version;\r\n            if (!version) return Promise.resolve(false);\r\n            const majorVersion = Number.parseInt(version.split('.')[0]);\r\n            if (majorVersion >= 10) return Promise.resolve(false);\r\n        } catch (ex) {\r\n            return Promise.resolve(false);\r\n        }\r\n\r\n        $.blockUI();\r\n        const req = this.$http({\r\n            method: 'GET',\r\n            url: this.configService.connectionURL + '/PosPing',\r\n            // @ts-ignore\r\n            byPassCancellation: true,\r\n            // @ts-ignore\r\n            bypassRetry: true\r\n        });\r\n\r\n        return req\r\n            .then(() => Promise.resolve(false))\r\n            .catch((error) => {\r\n                if (this.configService.isQAMode) {\r\n                    console.log(JSON.stringify(error))\r\n                }\r\n                if (error.status === -1) {\r\n                    return Promise.resolve(true);\r\n                }\r\n\r\n                return Promise.resolve(false);\r\n            })\r\n            .finally(() => $.unblockUI());\r\n    }\r\n\r\n    public async showCertificateErrorPage(): Promise<boolean> {\r\n        const isError = await this.isCertificateError();\r\n\r\n        if (isError) {\r\n            this.$location.path('/certificate-error');\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n}\r\n\r\n(<any>angular).module('services')\r\n    .service('serverConnectionService', ServerConnectionService.$inject);\r\n\r\nexport default 'serverConnectionService';","import { IAngularStatic } from 'angular';\r\nimport { HelperService, IConfigService, SaleService } from '../Typings/Typings';\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\ninterface ISurcharge {\r\n    SurchargeID: string;\r\n    Value: number;\r\n    IsActive: boolean;\r\n    Name: string;\r\n    Type: string;\r\n    RefundSurcharge: boolean | null;\r\n\r\n    // set manually\r\n    CalculatedValue: number;\r\n    Tax: number;\r\n    CalculatedValueWithTax: number;\r\n}\r\n\r\ninterface ISurchargeData {\r\n        paymentProcessorID: string;\r\n        isCustom: boolean;\r\n        surcharges: ISurcharge[];\r\n        realSum: number;\r\n        tax: any;\r\n        taxInclucive: boolean\r\n}\r\n\r\nclass SurchargeService {\r\n    static $inject = ['helperService', 'saleService', SurchargeService];\r\n    constructor(\r\n        private helperService: HelperService,\r\n        private saleService: SaleService\r\n    ) {\r\n    }\r\n\r\n    calculateSurcharges(data: ISurchargeData) {\r\n        let surcharges = [];\r\n        for (var i = 0; i < data.surcharges.length; i++) {\r\n            var item = angular.copy(data.surcharges[i]);\r\n            if (item.Type == 'percentage') {\r\n                item.CalculatedValue = this.helperService.DEARRound(data.realSum * item.Value / 100, 2);\r\n            }\r\n            else {\r\n                item.CalculatedValue = this.helperService.DEARRound(item.Value, 2);\r\n            }\r\n\r\n            var surchargeTax = JSON.parse(data.tax);\r\n            item.Tax = this.helperService.DEARRound(this.saleService.calculateTax(surchargeTax, item.CalculatedValue, data.taxInclucive), 2);\r\n\r\n            if (data.taxInclucive) {\r\n                item.CalculatedValueWithTax = this.helperService.DEARRound(item.CalculatedValue, 6);                        \r\n            }\r\n            else {\r\n                item.CalculatedValueWithTax = this.helperService.DEARRound(item.CalculatedValue + item.Tax, 6);\r\n            }\r\n            surcharges.push(item);\r\n        }\r\n        return surcharges;\r\n    }\r\n\r\n    extractSurcharge(amount: number, data: ISurchargeData) {\r\n        let surcharges = [];\r\n        for (var i = 0; i < data.surcharges.length; i++) {\r\n            var item = angular.copy(data.surcharges[i]);\r\n            if (item.Type == 'percentage') {\r\n                item.CalculatedValue = this.helperService.DEARRound(data.realSum * item.Value / 100, 2);\r\n            }\r\n            else {\r\n                item.CalculatedValue = this.helperService.DEARRound(item.Value, 2);\r\n            }\r\n\r\n            var surchargeTax = JSON.parse(data.tax);\r\n            item.Tax = this.helperService.DEARRound(this.saleService.calculateTax(surchargeTax, item.CalculatedValue, data.taxInclucive), 2);\r\n\r\n            if (data.taxInclucive) {\r\n                item.CalculatedValueWithTax = this.helperService.DEARRound(item.CalculatedValue, 6);                        \r\n            }\r\n            else {\r\n                item.CalculatedValueWithTax = this.helperService.DEARRound(item.CalculatedValue + item.Tax, 6);\r\n            }\r\n            surcharges.push(item);\r\n        }\r\n        return surcharges;\r\n    }\r\n\r\n\r\n    reCalculateSurchargeForPartiallyApproved(surcharge: ISurcharge, realSum: number, taxInclucive: boolean, tax: any): ISurcharge {\r\n        const surchargeTax = JSON.parse(tax);\r\n        let surchargeWithTax = 0;\r\n        let surchargeValue = 0;\r\n        let taxValue = 0;\r\n        if (surcharge.Type === 'percentage') {\r\n            const taxPercent = (<any>this.saleService).getTaxPercent(surchargeTax, taxInclucive);\r\n            const surchargePercentWithTax =  surcharge.Value + (surcharge.Value * taxPercent / 100);\r\n            surchargeWithTax = this.helperService.DEARRound(realSum * surchargePercentWithTax / 100, 6);\r\n            taxValue = this.helperService.DEARRound(surchargeWithTax * taxPercent / 100, 2);\r\n            surchargeValue = this.helperService.DEARRound(surchargeWithTax - (!taxInclucive ? taxValue : 0), 6);\r\n        } else {\r\n            surchargeValue = this.helperService.DEARRound(surcharge.Value, 2);\r\n            surchargeWithTax = surchargeValue;\r\n            taxValue = this.helperService.DEARRound(this.saleService.calculateTax(surchargeTax, surchargeValue, taxInclucive), 2);\r\n            if (!taxInclucive) {\r\n                surchargeWithTax = this.helperService.DEARRound(surchargeValue + tax, 6);\r\n            }\r\n        }\r\n\r\n        return <ISurcharge>{\r\n            CalculatedValue: surchargeValue,\r\n            Tax: taxValue,\r\n            CalculatedValueWithTax: surchargeWithTax,\r\n        }\r\n    }        \r\n}\r\n\r\n(<any>angular).module('services')\r\n    .service('surchargeService', SurchargeService.$inject);","import { CardPayService } from \"../../src/PosScripts/cardPayService\";\r\nimport { CalculatorService } from \"../CalculatorService\";\r\nimport { IGroupedSale, ISale, IOutletInfo } from \"../Interfaces\";\r\n\r\n\r\nexport interface IExternalServices {\r\n    webOnlyProvider: any;\r\n    loyaltyService: any;\r\n    saleService: SaleService;\r\n    receiptService: ReceiptService;\r\n    cardPayService: CardPayService;\r\n    barcodeService: BarcodeService;\r\n    gettextCatalog: any;\r\n    constantService: any;\r\n    uuid2Service: any;\r\n    configService: IConfigService;\r\n    helperService: HelperService;\r\n    outletService: any;\r\n}\r\n\r\ndeclare global {\r\n    var ext: IExternalServices;\r\n    var isSite: boolean;\r\n}\r\n\r\n\r\n\r\n    export interface ReceiptService {\r\n        fillVantivTransactionData(transactionData: any, currency: any): any;\r\n    }\r\n\r\n    /*export interface CardPayService {\r\n        detectProvider(metaData: string): string;\r\n        addSumToCardPayment(arr: any, transactionID: string, clientTransactionID: string, amount: number, transMetadata?: string): void;\r\n        combineKey(transactionID: string, clientTransactionID: string): string;\r\n        removeFullyUsedCards(crd: any): number;\r\n        sumAllCardPayments(any, includeSurchargeRefund: boolean): number;\r\n        createCardPaymentMap(groupedSale: IGroupedSale): void;\r\n    }*/\r\n\r\n    export interface BarcodeService {\r\n        initForReceipt(receiptSaleModel: any);\r\n    }\r\n\r\n    export interface SaleService {\r\n        fillTyroTransactionData(transactionData: any, isMerchant: boolean): any;\r\n        fillLinklyPaymentTransactionData(transactionData: any, isMerchant: boolean): any;\r\n        calculateTax(taxObject, total: number, isTaxInclusive: boolean): number;\r\n    }\r\n\r\n    export interface HelperService {\r\n        closeDialog(id: string): unknown;\r\n        showDialog(id: string): unknown;\r\n        DEARRound(value: number, places: number): number;\r\n        toDateFromDatepickerParameter(str: string, timeStr?: string, noReplace?: boolean): string;\r\n        showCustomDialog3(caption: string, text: string, okButtonName?: string,\r\n            cancelButtonName?: string, showCancel?: boolean, showCheckbox?: boolean,\r\n            checkboxValue?: any, checkBoxCallback?: any): void;\r\n        applyCurrency(number: any, currency: any): string;\r\n        getFormatedDate(date: any): string;\r\n        addValues(a: any, b: any): number;\r\n        mapToList(map: any): Array<any>;\r\n        roundCash(amount: number): number;\r\n        storeCurrentSale(sale: ISale, scope?: any): void;\r\n        formatTime(v: number): string;\r\n        toDateFromDatepickerDirect(dtStr: string): string;\r\n        toDateFromDatepicker(dtStr: string): string;\r\n        convertToDateFromDatepicker(dtStr: string): any;\r\n        toDateFromDatepickerDirectNoZone(dtStr: string): string;\r\n        getFormatedLocalDateTime(dt: string): { date: string, time: number };\r\n        getFormatedDateAsIs(dt: Date): string;\r\n        getFormatedDateOnlyAsIs(dt: Date): string;\r\n        getSaleQueue(): any[];\r\n        storeSaleQueue(queue: any[]);\r\n        guidToFlatString(guid: string): string;\r\n    };\r\n\r\n\r\n    export interface IConfiguration {\r\n        taxCalculationMethod: string;\r\n        taxInclucive: any;\r\n        allowNewCalculations?: boolean;\r\n        applyCustomerDiscountAfterOtherDiscounts: boolean;\r\n        ignoreCustomerTaxRule: boolean;\r\n        enableLoyalty: boolean;\r\n        useCustomerPriceTier: boolean;\r\n        deliveryTimeInterval: number;\r\n        deliveryTemplateID: string;\r\n        deliveryNumberPerDay: number;\r\n        tenantTaxRule: string;\r\n        loyaltyLionToken: string;\r\n\r\n        lastUserName: string;\r\n        lastDisplayUserName: string;\r\n\r\n        isClover: boolean;\r\n        useWindcave: boolean;\r\n        useLinkly: boolean;\r\n        usePaymentSense: boolean;\r\n        useTriPOS: boolean;\r\n        useTyro: boolean;\r\n        CanSaleRep: boolean;\r\n    }\r\n\r\n    export interface IOutletConfiguration {\r\n        lastOutletTax: string;\r\n        lastOutlet: string;\r\n        lastOutletID: string;\r\n        lastECSMappingOutletID: string;\r\n\r\n        customizedSecondScreenUI: boolean;\r\n        secondScreenBackground: string;\r\n        secondScreenLogoUrl: string;\r\n    }\r\n\r\n    export interface IRegistryConfiguration {\r\n        lastRegistry: string;\r\n        lastRegistryID: string;\r\n        registryPrefix: string;\r\n        registrySuffix: string;\r\n        registrySalesID: string;\r\n    }\r\n\r\n    export interface IGetTextCatalog {\r\n        getString(s: string, params?: {}): string;\r\n    }\r\n\r\n    export interface IUUID2Service {\r\n        newguid(): string;\r\n    }\r\n   \r\n\r\n    export interface IConfigService extends IConfiguration, IOutletConfiguration, IRegistryConfiguration {\r\n        isQAMode: boolean;\r\n        currencyCulture: string;\r\n        lastOutletInfo: IOutletInfo;\r\n        applicationID: string;\r\n        currency: string;\r\n        userName: string;\r\n        isSite: boolean;\r\n        isMobile: boolean;\r\n        connectionURL: string;\r\n        getCardPaymentSettings<T extends object>(): T;\r\n    }\r\n\r\n    export declare var configService: IConfigService;\r\n\r\n    export declare var uuid2Service: IUUID2Service;\r\n\r\n    export declare var constantService: {\r\n        newGuid: string;\r\n    }\r\n\r\n    export declare var gettextCatalog: IGetTextCatalog;\r\n\r\n    export declare var loyaltyService: {\r\n        loyaltyEnabled: boolean;\r\n    }\r\n\r\n    export declare var webOnlyProvider: {\r\n        loadDeliveries(params: any): Promise<any>;\r\n        loadDelivery(params: any): Promise<any>;\r\n        loadCalendars(params: any): Promise<any>;\r\n        loadProductsAvailableForDelivery(posOrderID: string): Promise<any>;\r\n        CreateDelivery(deliveryID: string, params: any): Promise<any>;\r\n        UpdateDelivery(deliveryID: string, params: any): Promise<any>;\r\n        UpdateDeliveryTaskStatus(deliveryTaskID: string, locationID: string, status: string): Promise<any>;\r\n    }\r\n\r\n    export type LocalDBProvider = {\r\n        removeSales(posName: string, statusID?: string, exeptStatusID?: string): PromiseLike<any>;\r\n        removeSale(saleID: string, statusID: string, operationID: string): PromiseLike<any>;\r\n        loadOfflineSalesCount(posName: string, saleID: string, statusID: string, exeptStatusID: string): PromiseLike<number>;\r\n        loadOfflineSalesErrorHistory(posName: string) : PromiseLike<any[]>\r\n    }\r\n\r\n    export type JsStoreProvider = {\r\n        removeSale(saleID: string, statusID: string, operationID: string): PromiseLike<any>;\r\n        loadOfflineSalesErrorHistory(posName: string) : PromiseLike<any[]>\r\n    }\r\n\r\n\r\n// helper function for js like cordova app initialization\r\nconst initializeCalculator = (helperService: any, configService: any, uuid2: any, constantService: any,\r\n    gettextCatalog: any, barodeService: any, cardPayService: any, receiptService: any, saleService: any,\r\n    loyaltyService: any, webOnlyProvider: any, outletService: any) => {\r\n    if (typeof ext === 'undefined') {\r\n        const ext = <IExternalServices>{};\r\n        window.ext = ext;\r\n    }\r\n    // @ts-ignore\r\n    if (typeof pc === 'undefined') {\r\n        //@ts-ignore\r\n        window.pc = {};\r\n    }\r\n    ext.helperService = helperService;\r\n    ext.configService = configService;\r\n    ext.uuid2Service = uuid2;\r\n    ext.constantService = constantService;\r\n    ext.gettextCatalog = gettextCatalog;\r\n    ext.barcodeService = barodeService;\r\n    ext.cardPayService = cardPayService;\r\n    ext.receiptService = receiptService;\r\n    ext.saleService = saleService;\r\n    ext.loyaltyService = loyaltyService;\r\n    ext.webOnlyProvider = webOnlyProvider;\r\n    ext.outletService = outletService;\r\n    return CalculatorService.Instance;\r\n}\r\n\r\n\r\nexport default initializeCalculator;","import { IAngularStatic, IQService, IScope } from 'angular';\r\nimport { HelperService, IConfigService, IGetTextCatalog, IUUID2Service } from '../../TypePosScripts/Typings/Typings';\r\nimport { IPaymentProvider, IResponse } from '../../TypePosScripts/Services/payment-providers/Interfaces';\r\nimport windcaveProvider, { WindcaveProviderService } from '../../TypePosScripts/Services/payment-providers/windcave/windcave-provider.service';\r\n\r\n\r\ndeclare const angular: IAngularStatic;\r\ninterface IProvider {\r\n    provider: IPaymentProvider<any>;\r\n    key: string;\r\n    name: string;\r\n}\r\n\r\nexport class CardPayService {\r\n    delayDone: boolean = false;\r\n    cardTransactionInProgress: boolean = false;\r\n\r\n    static $inject = [\r\n        '$q', 'configService', 'gettextCatalog', 'cloverReaderProvider', 'squareReaderProvider',\r\n        'tyroReaderProvider', 'triPOSReaderProvider', 'linklyPaymentReaderProvider', 'paymentSenseReaderProvider', windcaveProvider,\r\n        'helperService', 'uuid2', 'printService', '$rootScope'\r\n    ];\r\n\r\n    constructor(\r\n        private $q: IQService,\r\n        private configService: IConfigService,\r\n        private gettextCatalog: IGetTextCatalog,\r\n        private cloverReaderProvider: IPaymentProvider<any>,\r\n        private squareReaderProvider: IPaymentProvider<any>,\r\n        private tyroReaderProvider: IPaymentProvider<any>,\r\n        private triPOSReaderProvider: IPaymentProvider<any>,\r\n        private linklyPaymentReaderProvider: IPaymentProvider<any>,\r\n        private paymentSenseReaderProvider: IPaymentProvider<any>,\r\n        private windcaveProvider: WindcaveProviderService,\r\n        private helperService: HelperService,\r\n        private uuid2: IUUID2Service,\r\n        private printService: any,\r\n        private $rootScope: any\r\n    ) {\r\n        (<any>this.$rootScope).cardTransactionInProgress = false;\r\n    }\r\n\r\n    setInProgress() {\r\n        (<any>this.$rootScope).cardTransactionInProgress = true;\r\n    }\r\n\r\n    getProviderMap(): IProvider[] {\r\n        let providerMap: IProvider[] = [];\r\n\r\n        // add below each new card reader provider\r\n        providerMap.push({ provider: null, key: 'emptyProvider', name: this.gettextCatalog.getString('Not integrated') });\r\n        if (!this.configService.isSite)\r\n            providerMap.push({ provider: this.squareReaderProvider, key: 'squareReaderProvider', name: this.gettextCatalog.getString('Square reader') });\r\n\r\n        if (this.configService.isClover)\r\n            providerMap.push({ provider: this.cloverReaderProvider, key: 'cloverReaderProvider', name: this.gettextCatalog.getString('Clover reader') });\r\n\r\n        if (this.configService.useTyro)\r\n            providerMap.push({ provider: this.tyroReaderProvider, key: 'tyroReaderProvider', name: this.gettextCatalog.getString('Tyro reader') });\r\n\r\n        if (this.configService.useTriPOS)\r\n            providerMap.push({ provider: this.triPOSReaderProvider, key: 'triPOSReaderProvider', name: this.gettextCatalog.getString('Vantiv triPOS reader') });\r\n\r\n        if (this.configService.usePaymentSense)\r\n            providerMap.push({ provider: this.paymentSenseReaderProvider, key: 'paymentSenseReaderProvider', name: this.gettextCatalog.getString('Paymentsense reader') });\r\n\r\n        if (this.configService.useLinkly)\r\n            providerMap.push({ provider: this.linklyPaymentReaderProvider, key: 'linklyPaymentReaderProvider', name: this.gettextCatalog.getString('Linkly reader') });\r\n\r\n        if (this.configService.useWindcave)\r\n            providerMap.push({ provider: this.windcaveProvider, key: 'windcaveProvider', name: this.gettextCatalog.getString('Windcave') });\r\n\r\n        return providerMap;\r\n    }\r\n\r\n    getAvailableProviders(): { key: string, name: string }[] {\r\n        let res: { key: string, name: string }[] = [];\r\n        this.getProviderMap().forEach(e => {\r\n            res.push({ key: e.key, name: e.name });\r\n        });\r\n\r\n        return res;\r\n    }\r\n\r\n    pair(scope: any, key: string, settings: any): Promise<any> {\r\n        let obj = this.selectProvider(scope, key);\r\n        return obj.provider.init(true, settings).finally(() => {\r\n            (<any>obj.provider).parentScope = null;\r\n        });\r\n    }\r\n\r\n    unpair(scope: any, key: string, settings: any): Promise<any> {\r\n        let obj = this.selectProvider(scope, key);\r\n        return obj.provider.unpair(settings).finally(() => {\r\n            (<any>obj.provider).parentScope = null;\r\n        });\r\n    }\r\n\r\n    cancelCurrentTransaction(scope, key) {\r\n        const obj = this.selectProvider(scope, key);\r\n\r\n        if (typeof (obj.provider.cancelCurrentTransaction) == 'function') {\r\n            return obj.provider.cancelCurrentTransaction().finally(() => {\r\n                (<any>obj.provider).parentScope = null;\r\n            });\r\n        }\r\n        else {\r\n            return this.$q.resolve().finally(() => {\r\n                (<any>obj.provider).parentScope = null;\r\n            });;\r\n        }\r\n    };\r\n\r\n    /*\r\n    Makes card payment using specified payment provider\r\n    callback - function to be called when payment is finished\r\n    can receive error as well\r\n    */\r\n    makePayment(payInfo, scope) {\r\n\r\n        try {\r\n            var providerCfg = this.selectProvider(scope);\r\n        } catch (e) {\r\n            var deferred1 = this.$q.defer();\r\n            deferred1.reject(e);\r\n            return deferred1.promise;\r\n        }\r\n\r\n        if (providerCfg.provider == null) {\r\n            var deferred = this.$q.defer();\r\n            const meta = 'non integrated card payment';\r\n            deferred.resolve({\r\n                result: true,\r\n                response: {\r\n                    ServerTransactionID: this.uuid2.newguid(),\r\n                    TransactionMetaData: meta\r\n                }\r\n\r\n            });\r\n\r\n            return deferred.promise;\r\n        }\r\n\r\n        var options = {\r\n            amount: payInfo.Amount,\r\n            currency: payInfo.Currency,\r\n            metadata: this.helperService.guidToFlatString(payInfo.ID),\r\n            receiptCallback: payInfo.receiptCallback,\r\n            receiptDoneCallback: payInfo.receiptDoneCallback,\r\n            OrderNumber: payInfo.OrderNumber,\r\n            Sale: payInfo.Sale\r\n        };\r\n\r\n        console.log('makePayment' + ' call params: ' + JSON.stringify(options));\r\n        this.printService.initPrintCollectMode();\r\n\r\n\r\n        const deferredMain = this.$q.defer<any>();\r\n        deferredMain.resolve(null);\r\n        let prm = deferredMain.promise;\r\n\r\n        if (window.device) {\r\n            if (window.device.platform !== 'iOS' || (window.device.platform == 'iOS' && parseInt(window.device.version) < 13)) {\r\n                if (providerCfg.key == 'squareReaderProvider') {\r\n                    prm = prm.then(() => this.printService.disconnect()); // async\r\n                }\r\n            }\r\n        }\r\n\r\n\r\n        if (typeof (providerCfg.provider.init) === 'function') {\r\n            prm = prm\r\n                .then(() => {\r\n                    this.$rootScope.cardTransactionInProgress = true;\r\n                    return providerCfg.provider.init();\r\n                });\r\n        }\r\n\r\n        prm = prm.then(() => {\r\n            this.$rootScope.cardTransactionInProgress = true;\r\n            return providerCfg.provider.makePayment(options);\r\n        });\r\n\r\n        return prm.then((res: IResponse | boolean) => {\r\n            $.blockUI();\r\n            if (typeof (res) === 'object') {\r\n                res.provider = providerCfg.key;\r\n                if (res.response?.TransactionMetaData) {\r\n                    (<any>res.response?.TransactionMetaData).provider = providerCfg.key;\r\n                }\r\n            }\r\n            \r\n            this.printService.finishPrintCollectMode();\r\n            return this.printService.printReceiptFromHTML().then(() => {\r\n                this.printService.resetPrintCollectMode();\r\n                var q = this.$q.defer();\r\n                q.resolve(res);\r\n               \r\n                return q.promise;\r\n            });\r\n        })\r\n        .catch((err) => {\r\n            if (err.disableAddPayment === undefined) {\r\n                err.disableAddPayment = !!providerCfg.provider.disablePaymentOnFailed;\r\n            }\r\n            throw err;\r\n        })\r\n        .finally(() => {\r\n            $.unblockUI();\r\n            (<any>providerCfg.provider).parentScope = null;\r\n            this.$rootScope.cardTransactionInProgress = false;\r\n\r\n            if (!!providerCfg.provider &&\r\n                typeof (providerCfg.provider.closeConnection) === 'function') {\r\n                providerCfg.provider.closeConnection();\r\n            }\r\n\r\n            if (window.device) {\r\n                if (window.device.platform !== 'iOS' || (window.device.platform == 'iOS' && parseInt(window.device.version) < 13)) {\r\n                    if (providerCfg.key === 'squareReaderProvider') {\r\n                        this.printService.connect();\r\n                    }\r\n                }\r\n            }\r\n\r\n            this.helperService.storeCurrentSale(null);\r\n        });\r\n\r\n    };\r\n\r\n    refund(initialPayment, refunds, scope, payInfo) {\r\n        var options = {\r\n            receiptCallback: payInfo.receiptCallback,\r\n            OrderNumber: payInfo.OrderNumber,\r\n            currency: payInfo.Currency\r\n        };\r\n\r\n        var p = null;\r\n        var providerCfg = this.selectProvider(scope);\r\n        var procRes = [];\r\n\r\n        if (!providerCfg.provider) {\r\n\r\n            var deferred2 = this.$q.defer();\r\n            deferred2.resolve(null);\r\n            p = deferred2.promise;\r\n            var returnPayments = !!initialPayment.nativeSalePayments ?\r\n                initialPayment.nativeSalePayments :\r\n                !!initialPayment.GroupedSale ? this.helperService.mapToList(initialPayment.GroupedSale.PaymentsMap) :\r\n                    initialPayment.ReturnPayments;\r\n\r\n            angular.forEach(returnPayments, (el) => {\r\n                if (el.PaymentTypeName == 'Credit Card' ||\r\n                    el.ShortName == 'credit card') {\r\n                    var key = this.combineKey(el.ServerTransactionID, el.ClientTransactionID);\r\n                    var refund = refunds[key];\r\n\r\n                    if (!!refund && refund.amount > 0) {\r\n                        p = p.then(() => {\r\n                            var deferred2 = this.$q.defer();\r\n                            deferred2.resolve({\r\n                                amount: refund.amount,\r\n                                result: true,\r\n                                ServerTransactionID: this.uuid2.newguid(),\r\n                                TransactionMetaData: 'non integrated card refund',\r\n                                SaleServerTransactionID: el.ServerTransactionID,\r\n                                Surcharge: refund.Surcharge\r\n                            });\r\n\r\n                            return deferred2.promise;\r\n                        });\r\n\r\n                        p = p.then((res) => {\r\n                            procRes.push(res);\r\n                            var deferred2 = this.$q.defer();\r\n                            deferred2.resolve(res);\r\n                            return deferred2.promise;\r\n                        });\r\n                    }\r\n                }\r\n            });\r\n\r\n            return p.then(() => {\r\n                var deferred2 = this.$q.defer();\r\n                deferred2.resolve(procRes);\r\n                return deferred2.promise;\r\n            });\r\n\r\n        }\r\n\r\n        if (typeof (providerCfg.provider.refund) != 'function') {\r\n            var deferred = this.$q.defer();\r\n            deferred.reject(\r\n                {\r\n                    result: false,\r\n                    response: {\r\n                        errorDescription: 'Refund is not supported'\r\n                    }\r\n                });\r\n            return deferred.promise;\r\n        }\r\n\r\n        if (typeof (providerCfg.provider.init) == 'function') {\r\n            p = providerCfg.provider.init();\r\n        }\r\n        else {\r\n            var deferred2 = this.$q.defer();\r\n            deferred2.resolve(null);\r\n            p = deferred2.promise;\r\n        }\r\n\r\n        this.printService.initPrintCollectMode();\r\n        p = p.then(() => {\r\n            this.setInProgress();\r\n        });\r\n\r\n        angular.forEach(initialPayment.ReturnPayments, (el) => {\r\n            if (el.PaymentTypeName == 'Credit Card') {\r\n                var key = this.combineKey(el.ServerTransactionID, el.ClientTransactionID);\r\n                var refund = refunds[key];\r\n\r\n                if (!!refund && refund.amount > 0) {\r\n\r\n                    // we need to skip real payment gateway processing (possibly this payment was processed on provider side but we were unable to get info)\r\n                    if (refund.isRemotedlyProcessed === true || el.TransactionMetaData === 'non integrated card payment' || el.TransactionMetaData === 'restored after crash') {\r\n                        p = p.then(() => {\r\n                            var deferred2 = this.$q.defer();\r\n                            deferred2.resolve({\r\n                                amount: refund.amount,\r\n                                ServerTransactionID: \"\",\r\n                                TransactionMetaData: 'manually processed card pay refund',\r\n                                result: true,\r\n                                Surcharge: refund.Surcharge\r\n                            });\r\n                            return deferred2.promise;\r\n                        });\r\n                    }\r\n                    else if (el.TransactionMetaData && typeof (el.TransactionMetaData) === 'object' && el.TransactionMetaData.provider && el.TransactionMetaData.provider !== providerCfg.key) {\r\n                        p = p.then(() => {\r\n                            const deferred = this.$q.defer();\r\n                            deferred.reject(\r\n                                {\r\n                                    result: false,\r\n                                    response: {\r\n                                        errorDescription: `Sale payment was completed using another payment provider (${el.TransactionMetaData.provider}). Only cash refund is available.`\r\n                                    }\r\n                                });\r\n                            return deferred.promise;\r\n                        });\r\n                    }\r\n                    else\r\n                        if (providerCfg.key == 'squareReaderProvider') {\r\n                            if (!!el.squareIntegrationID && (el.ClientTransactionID || el.ServerTransactionID)) { // square refund\r\n                                p = p.then(() => { return this.squareReaderProvider.refund(el, refund.amount); }).then(res => {\r\n                                    const deferred = this.$q.defer();\r\n                                    if (res.result === false && res.message) {\r\n                                        deferred.reject(res.message);\r\n                                    } else {\r\n                                        deferred.resolve(res);\r\n                                    }\r\n                                    return deferred.promise;\r\n                                });\r\n                            }\r\n                            else {\r\n                                p = p.then(() => {\r\n                                    var deferred2 = this.$q.defer();\r\n                                    deferred2.resolve({\r\n                                        amount: refund.amount,\r\n                                        result: true,\r\n                                        Surcharge: refund.Surcharge\r\n                                    });\r\n                                    return deferred2.promise;\r\n                                });\r\n                            }\r\n                        }\r\n                        else {\r\n                            p = p.then(() => { return providerCfg.provider.refund(el, refund.amount, options); });\r\n                        }\r\n\r\n                    p = p.then((res) => {\r\n                        res.SaleServerTransactionID = el.ServerTransactionID;\r\n                        if (!res.Surcharge && refund.Surcharge) {\r\n                            res.Surcharge = refund.Surcharge;\r\n                        }\r\n                        if (typeof (res) === 'object') {\r\n                            res.provider = providerCfg.key;\r\n                            if (res.response?.TransactionMetaData) {\r\n                                (<any>res.response?.TransactionMetaData).provider = providerCfg.key;\r\n                                if (!res.TransactionMetaData) {\r\n                                    res.TransactionMetaData = res.response.TransactionMetaData;\r\n                                }\r\n                                if (!res.ServerTransactionID) {\r\n                                    res.ServerTransactionID = res.response.ServerTransactionID;\r\n                                }\r\n                            }\r\n                        }\r\n\r\n                        procRes.push(res);\r\n                        var deferred2 = this.$q.defer();\r\n                        deferred2.resolve(res);\r\n                        return deferred2.promise;\r\n                    });\r\n                }\r\n            }\r\n        });\r\n\r\n        p = p.then((res) => {\r\n            this.printService.finishPrintCollectMode();\r\n            return this.printService.printReceiptFromHTML().then(() => {\r\n                this.printService.resetPrintCollectMode();\r\n                var q = this.$q.defer();\r\n                q.resolve(res);\r\n                return q.promise;\r\n            });\r\n        }).finally(() => {\r\n            (<any>this.$rootScope).cardTransactionInProgress = false;\r\n            if (!!providerCfg.provider &&\r\n                typeof (providerCfg.provider.closeConnection) === 'function') {\r\n                providerCfg.provider.closeConnection();\r\n            }\r\n        });\r\n\r\n        return p.then(() => {\r\n            var deferred2 = this.$q.defer();\r\n            deferred2.resolve(procRes);\r\n            return deferred2.promise;\r\n        });\r\n    };\r\n\r\n    validate(key: string) {\r\n        const provider = this.selectProvider(null, key, true);\r\n\r\n        if (provider?.provider && typeof (provider.provider.validate) === 'function') {\r\n            return provider.provider.validate();\r\n        }\r\n        return true;\r\n    }\r\n\r\n    selectProvider(scope: any, providerKey = undefined, noThrowError = false) {\r\n        this.delayDone = false;\r\n\r\n        var cfg = this.configService.getCardPaymentSettings<any>();\r\n        if (this.configService.isClover) {\r\n            cfg.providerKey = 'cloverReaderProvider';\r\n        }\r\n\r\n        if (scope && scope.operationName === 'Refund' && scope.saleType === 'standaloneReturn') {\r\n            cfg.providerKey = \"emptyProvider\";\r\n        }\r\n\r\n        var key = !!providerKey ? providerKey : cfg.providerKey;\r\n        var cp = this.getProviderMap().filter(function (v) { return v.key == key; })[0];\r\n\r\n\r\n        if (!cp) {\r\n            if (noThrowError === true)\r\n                return null;\r\n\r\n            var s = this.gettextCatalog.getString(\r\n                'No card payment provider was found. Please reconfigure a payment provider in the POS application setup/ payment setup menu.');\r\n            throw new Error(s);\r\n        }\r\n\r\n        if (!!cp.provider) {\r\n            (<any>cp.provider).parentScope = scope;\r\n            this.delayDone = (<any>cp.provider).delayDone === true;\r\n        }\r\n\r\n        return cp;\r\n    };\r\n\r\n    combineKey(transactionID: string, clientTransactionID: string) {\r\n        return (!transactionID ? '' : transactionID) + '_' + (!clientTransactionID ? '' : clientTransactionID);\r\n    };\r\n\r\n    addSumToCardPayment(arr, transactionID, clientTransactionID, amount, transMetadata?: any) {\r\n        var key = this.combineKey(transactionID, clientTransactionID);\r\n        var o = arr[key];\r\n        if (!o || !o.validationAmount) {\r\n            o = { amount: 0, validationAmount: 0, id: key };\r\n            if (!!transMetadata)\r\n                $.extend(o, this.getCardInfo(transMetadata));\r\n        }\r\n\r\n        o.validationAmount += amount;\r\n\r\n        arr[key] = o;\r\n\r\n        return arr;\r\n    };\r\n\r\n    removeFullyUsedCards(arr) {\r\n        var sm = 0;\r\n        angular.forEach(Object.getOwnPropertyNames(arr), function (key) {\r\n            if (arr[key].validationAmount <= 0)\r\n                delete arr[key];\r\n            else\r\n                sm += arr[key].validationAmount;\r\n        });\r\n\r\n        return this.helperService.DEARRound(sm, 6);\r\n    };\r\n\r\n    sumAllCardPayments(arr, includeSurchargeRefund) {\r\n        var sum = 0;\r\n        angular.forEach(Object.getOwnPropertyNames(arr), function (key) {\r\n            if (!!arr[key].amount) {\r\n                sum += arr[key].amount;\r\n                if (includeSurchargeRefund === true && !!arr[key].Surcharge && arr[key].Surcharge.RefundSurcharge === true &&\r\n                    arr[key].Surcharge.AmountToRefund)\r\n                    sum += arr[key].Surcharge.AmountToRefund;\r\n            }\r\n        });\r\n\r\n        return sum;\r\n    };\r\n\r\n    setAllCardAmountToZero(arr) {\r\n        angular.forEach(Object.getOwnPropertyNames(arr), function (key) {\r\n            arr[key].amount = 0;\r\n            if (!!arr[key].Surcharge) {\r\n                arr[key].Surcharge.AmountToRefund = 0;\r\n                arr[key].Surcharge.TaxToRefund = 0;\r\n            }\r\n\r\n            // also make copy of validation amount to allow valid recalculation of surcharge when return back and continue exchange payment\r\n            arr[key].initialValidationPayment = arr[key].validationAmount;\r\n        });\r\n    };\r\n\r\n    validateCardRefunds(arr, errContainer) {\r\n        var idx = 1;\r\n        var hasErrors = false;\r\n        angular.forEach(Object.getOwnPropertyNames(arr), (key) => {\r\n            var el = arr[key];\r\n\r\n            if (el.amount < 0 || el.amount > this.helperService.DEARRound(el.validationAmount, 2)) {\r\n                errContainer.push(this.gettextCatalog.getString(\"Credit card {{idx}} payment amount should be between 0 and \", { idx: idx })\r\n                    + this.helperService.DEARRound(el.validationAmount, 2));\r\n                hasErrors = true;\r\n            }\r\n            idx++;\r\n        });\r\n\r\n        return hasErrors;\r\n    };\r\n\r\n    getCardInfo(transMetadata) {\r\n        var res = {};\r\n        var provType = this.detectProvider(transMetadata);\r\n        var providerCfg = this.selectProvider(null, provType, true);\r\n        if (providerCfg?.provider && typeof providerCfg.provider.getCardInfo === 'function') {\r\n            return providerCfg.provider.getCardInfo(transMetadata);\r\n        }\r\n\r\n        if (provType == 'triPOSReaderProvider') {\r\n            res = {\r\n                cardPAN: transMetadata.accountNumber,\r\n                cardType: transMetadata.cardLogo\r\n            };\r\n        } else if (provType == 'paymentSenseReaderProvider') {\r\n            res = {\r\n                cardPAN: transMetadata.primaryAccountNumber,\r\n                cardType: transMetadata.cardSchemeName\r\n            };\r\n        } else if (provType == 'linklyPaymentReaderProvider') {\r\n            res = {\r\n                cardPAN: transMetadata.pan,\r\n                cardType: transMetadata.cardType\r\n            };\r\n        }\r\n        else\r\n            res = {\r\n                cardPAN: transMetadata.elidedPan,\r\n                cardType: transMetadata.cardType\r\n            };\r\n\r\n        return res;\r\n    };\r\n\r\n    detectProvider(metaData) {\r\n        if (!metaData.provider) {\r\n            if (!!metaData._processor) {\r\n                metaData.provider = 'triPOSReaderProvider';\r\n            }\r\n            else if (!!metaData.elidedPan) {\r\n                metaData.provider = 'tyroReaderProvider';\r\n            } else if (!!metaData.tpi) {\r\n                metaData.provider = 'paymentSenseReaderProvider';\r\n            } else if (!!metaData.pan) {\r\n                metaData.provider = 'linklyPaymentReaderProvider';\r\n            }\r\n        }\r\n\r\n        return metaData.provider;\r\n    }\r\n\r\n    timeout(prom, time, ex) {\r\n        let timer;\r\n        return Promise.race([\r\n            prom,\r\n            new Promise((_r, rej) => timer = setTimeout(rej, time, ex))\r\n        ]).finally(() => clearTimeout(timer));\r\n    }\r\n\r\n    /*\r\n    Some of payment gateway provider requires that POS get  EndOfDay report from card machine\r\n    so this method is for this aims\r\n    */\r\n    getEndOfDayReport(scope, registerCloseID) {\r\n        var providerCfg = this.selectProvider(scope, null, true);\r\n        const deferredMain = this.$q.defer<any>();\r\n\r\n        let prm = deferredMain.promise;\r\n\r\n\r\n        const savedReportStr = window.localStorage.getItem('CloseOfDayReport');\r\n        if (!!savedReportStr) {\r\n            const savedReport = JSON.parse(savedReportStr);\r\n            if (savedReport.RegisterCloseID === registerCloseID) {\r\n                deferredMain.resolve(savedReport.report);\r\n                return deferredMain.promise;\r\n            }\r\n        }\r\n\r\n        deferredMain.resolve(null);\r\n        prm = deferredMain.promise;\r\n\r\n        if (!providerCfg || !providerCfg.provider || typeof (providerCfg.provider.getEndOfDayReport) !== 'function') {\r\n            return prm.then(() => {\r\n                var deferred2 = this.$q.defer();\r\n                deferred2.resolve(null);\r\n                return deferred2.promise;\r\n            });\r\n        }\r\n\r\n        if (typeof (providerCfg.provider.init) === 'function') {\r\n            prm = prm.then(() => providerCfg.provider.init())\r\n        }\r\n\r\n        return prm.then(() => {\r\n            var ex = new Error('Timeout');\r\n            this.timeout(providerCfg.provider.getEndOfDayReport(registerCloseID), 60 * 2 * 1000, ex)\r\n                .then((res) => {\r\n                    window.localStorage.setItem('CloseOfDayReport', JSON.stringify({\r\n                        RegisterCloseID: registerCloseID,\r\n                        report: res\r\n                    }));\r\n\r\n                    var deferred2 = this.$q.defer();\r\n                    deferred2.resolve(res);\r\n                    return deferred2.promise;\r\n                })\r\n                .catch(e => {\r\n                    if (e === ex) {\r\n                        var deferred2 = this.$q.defer();\r\n                        deferred2.resolve(null);\r\n                        return deferred2.promise;\r\n                    }\r\n                });\r\n        })\r\n            .finally(() =>{\r\n                if (!!providerCfg.provider &&\r\n                    typeof (providerCfg.provider.closeConnection) === 'function') {\r\n                    providerCfg.provider.closeConnection();\r\n                }\r\n            });\r\n    };\r\n\r\n    createCardPaymentMap(groupedSale) {\r\n        groupedSale.PaymentsMap2 = {};\r\n        var plist = this.helperService.mapToList(groupedSale.PaymentsMap);\r\n        plist.forEach((p) => {\r\n            if (p.ShortName === 'credit card') {\r\n                groupedSale.PaymentsMap2[this.combineKey(p.ServerTransactionID, p.ClientTransactionID)] = p;\r\n            }\r\n        });\r\n    };\r\n}\r\n\r\nangular.module('services').service('cardPayService', CardPayService);","import bioAuthService, { BiometricsAuthService } from '../../TypePosScripts/Services/biometrics-auth.service';\r\nimport msalService, { MSALService } from '../../TypePosScripts/Services/msal.service';\r\nimport {DeviceInfoService} from '../../TypePosScripts/Services/device-info.service';\r\nimport buildConfiguration from './configEnvironment';\r\nimport { IAngularStatic } from 'angular';\r\nimport { LoginService } from './loginService';\r\nimport { ServerConnectionService } from '../../TypePosScripts/Services/server-connection.service';\r\nimport serverConnectionService  from '../../TypePosScripts/Services/server-connection.service';\r\n\r\nconst EMAIL_NOT_LINKED_CODE = 10;\r\ndeclare const angular: IAngularStatic;\r\n\r\nangular.module(\"mainApp\").controller('loginController',\r\n    ['$scope', '$rootScope', 'configService', 'loginService', 'errorService', 'helperService',\r\n     '$timeout', 'gettextCatalog', 'googleHelperService', bioAuthService, msalService, 'deviceInfo', serverConnectionService,\r\nfunction ($scope, $rootScope, configService, loginService: LoginService, errorService, helperService,\r\n    $timeout, gettextCatalog, googleHelperService, bioAuthService: BiometricsAuthService, /* @type {} **/ msalService: MSALService, deviceInfo: DeviceInfoService, serverConnectionService: ServerConnectionService) {\r\n    $scope.isDeviceRooted = false;\r\n    $scope.isBioAvailable = false;\r\n    $scope.isDBEngineSupported = function () {\r\n        // for not supported browsers we simply use standard web logic without any locally saved data\r\n        return true;\r\n        //return !configService.isSite || jsStoreProvider.isSupported;\r\n    };\r\n\r\n    $scope.isIOS9 = function () {\r\n        return window.isOS9 === true;\r\n    };\r\n\r\n    // temp fields\r\n    $scope.dearPosMode = false;\r\n\r\n    //$scope.dearPosModeShow = configService.baseURL.indexOf('qa.dearsystems.com') >= 0 ||\r\n    //   configService.baseURL.indexOf('127.0.0.1') >= 0 ||\r\n    //   configService.baseURL.indexOf('localhost') >= 0;\r\n    //console.log('dearPosModeShow: ' + configService.isQAMode);\r\n    //console.log('dearPosModeShow: ' + configService.baseURL);\r\n\r\n    $scope.dearPosModeShow = false; // do not change this settings on production or QA !!!\r\n\r\n    if ($scope.dearPosModeShow)\r\n        $scope.dearPosMode = true; // on QA we set old mode as default\r\n\r\n    //\r\n    $scope.dearPosName = configService.lastDearPosName;\r\n    $scope.userName = configService.lastUserName;\r\n    $scope.displayUserName = configService.lastDisplayUserName;\r\n    $scope.password = null;\r\n    $scope.showChangeIP = false;\r\n    $scope.hosIpAddress = configService.baseURL;\r\n    $scope.isSite = configService.isSite;\r\n    $scope.idToken = null;\r\n    \r\n    $scope.isRelease = buildConfiguration.configuration == \"Release\";// && (configService.isMobile || configService.isSite);\r\n    //console.log('login controller inited');\r\n    $scope.isOnline = configService.isOnline;\r\n    $scope.pinMode = false;\r\n    $scope.pinValue = [];\r\n    $scope.finished = false;\r\n    $scope.invalidPinAttempt = 0;\r\n    for (var i = 0; i < configService.pinSize; i++)\r\n        $scope.pinValue.push(null);\r\n\r\n    $scope.resetPIN = function () {\r\n        for (var i = 0; i < configService.pinSize; i++)\r\n            $scope.pinValue[i] = null;\r\n\r\n        $scope.finished = false;\r\n    };\r\n\r\n    $scope.warningVisibility = {\r\n        DEARPOSName: false,\r\n        Email: false,\r\n        Password: false        \r\n    };\r\n\r\n    $scope.pinFormCaption = gettextCatalog.getString('Enter your Cin7 Core POS PIN');\r\n\r\n    $scope.setPinMode = function () {\r\n        $(document).off('keydown', keyboardListener).on('keydown', keyboardListener);\r\n        $scope.pinMode = true;\r\n        $scope.resetPIN();\r\n    };\r\n\r\n    $scope.setLoginMode = function () {\r\n        if($scope.pinMode)\r\n            $(document).unbind('keydown', keyboardListener); \r\n\r\n        $scope.pinMode = false;\r\n        $scope.resetPIN();\r\n    };\r\n\r\n    $scope.clickFun = function (s) {\r\n        $timeout(function () {\r\n            console.log('pin clickFun:'+s);\r\n            if (s == 'backspace') {\r\n                for (var i = ($scope.pinValue.length - 1) ; i >= 0; i--) {\r\n                    if ($scope.pinValue[i] != null) {\r\n                        $scope.pinValue[i] = null;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                for (var i = 0; i < $scope.pinValue.length; i++) {\r\n                    if ($scope.pinValue[i] == null) {\r\n                        $scope.pinValue[i] = s;\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n\r\n            $scope.finished = $scope.pinValue[$scope.pinValue.length - 1] != null;\r\n        });\r\n    };\r\n\r\n\r\n    function keyboardListener(e){\r\n        if($scope.pinMode){\r\n            if((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 96 && e.keyCode <= 105))\r\n                $scope.clickFun(e.key);\r\n            else if(e.keyCode === 8)\r\n                $scope.clickFun('backspace');\r\n        }\r\n    }\r\n\r\n    $scope.$watch('finished',\r\n      function (newValue, oldValue) {\r\n          if (newValue === true && $scope.pinMode === true) {\r\n              $scope.login();\r\n          }\r\n      }\r\n     );\r\n\r\n    $scope.showWaitPopup = false;\r\n    $scope.recreateDBStart = false;\r\n\r\n    $scope.afterInit = async function () {\r\n        const valid = !configService.isSite && buildConfiguration.configuration !== 'Debug' ? !await serverConnectionService.showCertificateErrorPage() : true;\r\n        if (valid) {\r\n            // if it's not a first login and pin is enabled, show pin form first\r\n            if (configService.pinEnabled === true && configService.pinToken && !!configService.lastUserName) {\r\n                $scope.setPinMode();\r\n            } else {\r\n                $scope.setLoginMode();\r\n                bioAuthService.isAvailable().then(res => {\r\n                    if (res) {\r\n                        $scope.isBioAuthEnabled = bioAuthService.isBioAuthEnabled();\r\n                        if ($scope.isBioAuthEnabled && loginService.isFirstLogin)\r\n                            setTimeout(() => $scope.biometricLogin());\r\n                    }\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    $scope.$on('login.show', function (event, data) {\r\n        if (deviceInfo.isDeviceRooted) {\r\n            errorService.showError(gettextCatalog.getString('This app will not work on rooted device.'));\r\n            $scope.isDeviceRooted = true;\r\n        } else {\r\n            $scope.afterInit();\r\n        }\r\n\r\n        $('.dp_colored-background').hide();\r\n\r\n        $scope.showWaitPopup = window.waitApplication === true;\r\n        $scope.recreateDBStart = false;\r\n\r\n        console.log('login controller got login.show event');\r\n        $scope.showDialog();\r\n    });\r\n\r\n    $scope.$on('login.hide', function (event, data) {\r\n        $scope.showWaitPopup = window.waitApplication === true;\r\n        $scope.recreateDBStart = window.recreateDBStart === true;\r\n    });\r\n    \r\n    $scope.$on('config.ConnectionStateChanged', function (event, object) {\r\n        $scope.isOnline = object;\r\n    });\r\n\r\n    // silent login without login form. This takes place after \r\n    // password change\r\n    $scope.$on('login.silent', function (event, data) {\r\n        $scope.dearPosName = data.dearPosName;\r\n        $scope.userName = data.userName;\r\n        $scope.password = data.password;\r\n        $scope.login(data.callBack);\r\n    });\r\n\r\n    $scope.$on('header.logoff', function (event) {\r\n        $scope.userName = null;\r\n        $scope.password = null;\r\n        $scope.invalidPinAttempt = 0;\r\n\r\n        googleHelperService.logout();\r\n\r\n    });\r\n\r\n    $scope.showDialog = function () {\r\n\r\n        if (window.localStorage.getItem('FirstLoad') === 'false') {\r\n            $scope.password = null;\r\n            helperService.showDialog($('#enterModal'), function () {\r\n                $scope.password = null;\r\n                $timeout(function () {\r\n                    $scope.password = null;\r\n                }, 250);\r\n                const func = function () {\r\n                    if (navigator.splashscreen) {\r\n                        navigator.splashscreen.hide();\r\n                        $timeout(function () {\r\n                            $('#enterModal').css('z-index', '10040');\r\n                            $('#enterModalInner').css('z-index', '10040');\r\n                        }, 500);\r\n                    } else {\r\n                        document.addEventListener('deviceready', function () {\r\n                            navigator.splashscreen.hide();\r\n                            $timeout(function () {\r\n                                $('#enterModal').css('z-index', '10040');\r\n                                $('#enterModalInner').css('z-index', '10040');\r\n                            }, 500);\r\n                        }, false);\r\n                    }\r\n                    \r\n                };\r\n\r\n                if (configService.isMobile) {\r\n                    $timeout(func, 500);\r\n                } else if (typeof window.device !== 'undefined' && window.device.isVirtual) {\r\n                    $timeout(func, 500);\r\n                }\r\n            });\r\n        }\r\n    };\r\n\r\n    $scope.showForgotPasswordDialog = function () {\r\n        //$('#forgotPasswordModalInner .modal-body').height($('#enterModalInner .modal-body').height());\r\n\r\n        $scope.warningVisibility.DEARPOSName = false;\r\n        $scope.warningVisibility.Email = false;\r\n        $scope.warningVisibility.Password = false;\r\n\r\n        helperService.showDialog($('#forgotPasswordModal'));\r\n    };\r\n    \r\n    $scope.hideForgotPasswordDialog = function () {\r\n        $scope.warningVisibility.DEARPOSName = false;\r\n        $scope.warningVisibility.Email = false;\r\n        $scope.warningVisibility.Password = false;\r\n\r\n        helperService.closeDialog($('#forgotPasswordModal'));\r\n    };\r\n\r\n    $rootScope.callbackModalCancel = function () {\r\n        console.log('callbackModalCancel called');\r\n        if ($scope.dialogMode == 'enable-face-auth') {\r\n            bioAuthService.reset();\r\n            $scope.afterLogin();\r\n            $scope.dialogMode = '';\r\n        }\r\n    };\r\n\r\n    $rootScope.callbackModal3 = async function () {\r\n        console.log('callbackModal called');\r\n\r\n        if ($scope.dialogMode == 'enable-face-auth') {\r\n            try {\r\n                await bioAuthService.registerSecret(JSON.stringify($scope.getDataForLogin()));\r\n                await bioAuthService.saveBioAuthKey(configService.lastDearPosName, configService.loginUserID);\r\n            } catch (e) {\r\n                errorService.showError(e);\r\n            } finally {\r\n                $scope.afterLogin();\r\n                $scope.dialogMode = '';\r\n            }\r\n        }\r\n    };\r\n\r\n    $scope.afterLogin = (callback) => {\r\n        if (callback) {\r\n            $rootScope.$broadcast('header.updateSettingsSecondStep');\r\n        } else {\r\n            // show outlet|register dialog\r\n            $rootScope.$broadcast('selectOR.show'); // show outlet|register dialog\r\n        }\r\n    }\r\n\r\n    //$scope.afterLoginCallback = null;\r\n\r\n    $scope.canShowErrors = false;\r\n    // Login button was pressed\r\n    $scope.login = function (callback) {\r\n        var pin = null;\r\n\r\n        $scope.warningVisibility.DEARPOSName = false;\r\n        $scope.warningVisibility.Email = false;\r\n        $scope.warningVisibility.Password = false;\r\n\r\n        if (!$scope.pinMode) {\r\n            $scope.canShowErrors = !!$scope.loginForm.$invalid;\r\n\r\n            if ($scope.loginForm.$invalid) {\r\n                return false;\r\n            }\r\n        }\r\n        else {\r\n            pin = '';\r\n            for (var i = 0; i < $scope.pinValue.length; i++)\r\n                pin += $scope.pinValue[i];\r\n        }\r\n\r\n        if (configService.isMobile) {\r\n            Keyboard.hide();\r\n        }\r\n        else {\r\n            helperService.hideKeyboard();\r\n        }\r\n\r\n        $.blockUI();\r\n\r\n        const loginError = (err) => {\r\n            // process error\r\n            $.unblockUI();\r\n\r\n            var title = 'Error';\r\n\r\n            errorService.showError(err, function () {\r\n                if ($scope.pinMode) {\r\n                    $timeout(function () {\r\n                        $scope.resetPIN();\r\n                        $scope.invalidPinAttempt++;\r\n                        if ($scope.invalidPinAttempt >= 3) {\r\n                            $scope.invalidPinAttempt = 0;\r\n                            $scope.setLoginMode();\r\n                        }\r\n                    });\r\n                }\r\n            }, title);\r\n        };\r\n\r\n        const loginSuccess = async (data) => {\r\n            // temp processing. Back switch to old style sale format\r\n            if ($scope.dearPosMode === true) {\r\n                configService.allowNewCalculations = false;\r\n                $scope.payloadVersion = '1';\r\n            }\r\n            //\r\n\r\n            const afterLoginVersionCheckCall = async () => {\r\n                helperService.closeDialog($('#enterModal'));\r\n                // save login info\r\n\r\n                $scope.loginUser(data);\r\n\r\n                if (data.IsRequiredChangePassword) {\r\n                    //$.unblockUI();\r\n                    // show password change dialog\r\n                    $rootScope.$broadcast('changepassword.show', {\r\n                        userName: configService.lastUserName,\r\n                        dearPosName: configService.lastDearPosName,\r\n                        userID: configService.loginUserID,\r\n                        password: $scope.password\r\n                    });\r\n                } else {\r\n\r\n                    if (!callback) {\r\n                        $scope.displayBiometricAuthSuggestionDialog($scope.afterLogin);\r\n                    }\r\n                    else {\r\n                        $scope.afterLogin(callback)\r\n                    }\r\n\r\n                }\r\n\r\n                if ($scope.pinMode)\r\n                    $(document).unbind('keydown', keyboardListener);\r\n            }\r\n\r\n            $.unblockUI();\r\n            if (data.VersionWarning && !data.VersionOutdated && !JSON.parse(localStorage.getItem('versionCheckboxPOS'))) {\r\n                helperService.showCustomDialog3(gettextCatalog.getString('Version warning'), data.VersionWarning,\r\n                    gettextCatalog.getString('Ok'), '', false, true, JSON.parse(localStorage.getItem('versionCheckboxPOS')) || false,\r\n                    async (val) => {\r\n                        localStorage.setItem('versionCheckboxPOS', val);\r\n                        await afterLoginVersionCheckCall();\r\n                    }\r\n                );\r\n            } else if (data.VersionOutdated) {\r\n                helperService.showCustomDialog(gettextCatalog.getString('Version outdated'), data.VersionOutdated,\r\n                    gettextCatalog.getString('Ok'), '', false\r\n                );\r\n            } else {\r\n                await afterLoginVersionCheckCall();\r\n            }\r\n        };\r\n\r\n        loginService.login($scope.dearPosName, $scope.userName, $scope.password, pin).then(loginSuccess, loginError);\r\n    };\r\n\r\n    $scope.canShowForgotPasswordErrors = false;\r\n\r\n    $scope.recoverPassword = function () {\r\n        $scope.canShowForgotPasswordErrors = !!$scope.forgotPasswordForm.$invalid;\r\n\r\n        if ($scope.forgotPasswordForm.$invalid) {\r\n            return false;\r\n        }\r\n        $.blockUI();\r\n        loginService.recoverPassword($scope.dearPosName, $scope.userName).then(function(resp) {\r\n            $.unblockUI();\r\n            helperService.showInfoDialog({\r\n                title: '',\r\n                body: gettextCatalog.getString(\"We just sent you an email message to the address you specified. Inside the message is a link you can use to change your password. The message should show up within a few seconds. If it doesn't, check your spam or junk mail folder and look for a message from Cin7 Core that says 'Password Reset Request'.\")\r\n            }, function () {\r\n                $timeout(function () {\r\n                    $scope.hideForgotPasswordDialog();\r\n                }, 0);\r\n            });\r\n        },\r\n            function (err) {\r\n                // process error\r\n                $.unblockUI();\r\n\r\n                var title = 'Error';\r\n\r\n                errorService.showError(err, null, title);\r\n                //                errorService.showError(err, $scope.showDialog, title);\r\n                // show error and login page once more\r\n            });\r\n\r\n        \r\n    };\r\n\r\n    $scope.changeIpAddress = function() {\r\n        configService.setBaseURL($scope.hosIpAddress);\r\n        configService.baseImageURL = $scope.hosIpAddress + configService.imageURLSuffix;\r\n        $scope.showChangeIP = false;\r\n    };\r\n\r\n    $scope.showIpChange = function() {\r\n        $scope.showChangeIP = true;\r\n    };\r\n\r\n    $scope.getIpAddressClass = function(form) {\r\n        if ((!form.dearPosIpAddress.$invalid && form.dearPosIpAddress.$dirty) || (!form.dearPosIpAddress.$invalid && form.dearPosIpAddress.length > 0))\r\n            return 'dp_has-success has-success';\r\n        else if (((form.dearPosIpAddress.$invalid || form.dearPosIpAddress.$error.required) && (form.dearPosIpAddress.$dirty || form.dearPosIpAddress.length > 0)))\r\n            return 'has-danger dp_has-danger';\r\n    };\r\n\r\n    $scope.getDearPosNameClass = function (form) {\r\n        if ((form.dearPosName.$invalid || form.dearPosName.$error.required) && $scope.canShowErrors)\r\n            return 'has-danger dp_has-danger';\r\n        else return '';\r\n    };\r\n\r\n    $scope.getUserNameClass = function (form) {\r\n       if ((form.userName.$invalid || form.userName.$error.required || form.userName.$error.email) && $scope.canShowErrors)\r\n            return 'has-danger dp_has-danger';\r\n        else return '';\r\n    };\r\n\r\n\r\n    $scope.getEmailFormatError = function (form) {\r\n        return form.userName.$error.email == true && $scope.canShowErrors == true;\r\n    };\r\n\r\n    $scope.getEmailRequiredError = function (form) {\r\n        return (form.userName.$invalid && form.userName.$error.required) && $scope.canShowErrors;\r\n    };\r\n\r\n    $scope.getPosNameRequiredError = function (form) {\r\n        return (form.dearPosName.$invalid && form.dearPosName.$error.required) && $scope.canShowErrors;\r\n    };\r\n\r\n    $scope.getPasswordRequiredError = function (form) {\r\n        return (form.password.$invalid && form.password.$error.required) && $scope.canShowErrors;\r\n    };\r\n\r\n    $scope.getPasswordClass = function (form) {\r\n        if ((form.password.$invalid || form.password.$error.required) && $scope.canShowErrors)\r\n            return 'has-danger dp_has-danger';\r\n        else return '';\r\n    };\r\n\r\n    $scope.getPosNameRequiredErrorFP = function (form) {\r\n        return (form.dearPosNameFP.$invalid && form.dearPosNameFP.$error.required) && $scope.canShowForgotPasswordErrors;\r\n    };\r\n\r\n    $scope.getDearPosNameClassFP = function (form) {\r\n        if ((form.dearPosNameFP.$invalid || form.dearPosNameFP.$error.required) && $scope.canShowForgotPasswordErrors)\r\n            return 'has-danger dp_has-danger';\r\n        else return '';\r\n    };\r\n\r\n    $scope.getEmailRequiredErrorFP = function (form) {\r\n        return (form.userNameFP.$invalid && form.userNameFP.$error.required) && $scope.canShowForgotPasswordErrors;\r\n    };\r\n\r\n    $scope.getUserNameClassFP = function (form) {\r\n        if ((form.userNameFP.$invalid || form.userNameFP.$error.required || form.userNameFP.$error.email) && $scope.canShowForgotPasswordErrors)\r\n            return 'has-danger dp_has-danger';\r\n        else return '';\r\n    };\r\n\r\n    $scope.getEmailFormatErrorFP = function (form) {\r\n        return form.userNameFP.$error.email == true && $scope.canShowForgotPasswordErrors == true;\r\n    };\r\n\r\n    $scope.showDEARPOSWarning = function() {\r\n        $scope.warningVisibility.DEARPOSName = !$scope.warningVisibility.DEARPOSName;\r\n        $scope.warningVisibility.Email = false;\r\n        $scope.warningVisibility.Password = false;\r\n    };\r\n\r\n    $scope.showEmailWarning = function() {\r\n        $scope.warningVisibility.Email = !$scope.warningVisibility.Email;\r\n        $scope.warningVisibility.DEARPOSName = false;\r\n        $scope.warningVisibility.Password = false;\r\n    };\r\n\r\n    $scope.showPasswordWarning = function() {\r\n        $scope.warningVisibility.Password = !$scope.warningVisibility.Password;\r\n        $scope.warningVisibility.DEARPOSName = false;\r\n        $scope.warningVisibility.Email = false;\r\n    };\r\n\r\n\r\n    $scope.eyePasswordInit = function () {\r\n        var eyePasswordLink = $('#eyePassword');\r\n        console.log(eyePasswordLink);\r\n        $(eyePasswordLink).attr('title', gettextCatalog.getString('Show password')); \r\n    };\r\n\r\n    $scope.eyePasswordToggle = function () {\r\n        var eyePasswordLink = $('#eyePassword');\r\n        var eye = $(eyePasswordLink).children('span');\r\n        if ($(eye).hasClass(\"glyphicon-eye-open\")) {\r\n            $(eye).removeClass(\"glyphicon-eye-open\");\r\n            $(eye).addClass(\"glyphicon-eye-close\");\r\n        }\r\n        else {\r\n            $(eye).removeClass(\"glyphicon-eye-close\");\r\n            $(eye).addClass(\"glyphicon-eye-open\");\r\n        }\r\n\r\n        var input = $($(eyePasswordLink).data(\"toggle\"));\r\n        if (input.attr(\"type\") === \"password\") {\r\n            input.attr(\"type\", \"text\");\r\n            $(eyePasswordLink).attr('title', gettextCatalog.getString('Hide password'));\r\n        } else {\r\n            input.attr(\"type\", \"password\");\r\n            $(eyePasswordLink).attr('title', gettextCatalog.getString('Show password'));\r\n        }\r\n    };\r\n\r\n    $scope.googleLoginInit = function () {\r\n        googleHelperService.init();\r\n    };\r\n\r\n    $scope.externalLogin = function (params) {\r\n        $.blockUI();\r\n        return loginService.login($scope.dearPosName, params.email, null, null, params.externalToken, params.tokenType).then(\r\n            (data) => {\r\n                if ($scope.dearPosMode === true) {\r\n                    configService.allowNewCalculations = false;\r\n                    $scope.payloadVersion = '1';\r\n                }\r\n\r\n                helperService.closeDialog($('#enterModal'));\r\n                $.unblockUI();\r\n                $scope.loginUser(data);\r\n\r\n                $scope.displayBiometricAuthSuggestionDialog(() => {\r\n                    // show outlet|register dialog\r\n                    $rootScope.$broadcast('selectOR.show'); // show outlet|register dialog\r\n                });\r\n            },\r\n            function (err) {\r\n\r\n                $.unblockUI();\r\n\r\n                if (err && err.length > 0 && (err[0].Exception == 'Email is not linked with Cin7 Core, Please link the email and try again.' || err[0].ErrorCode == EMAIL_NOT_LINKED_CODE)) {\r\n                    $scope.externalToken = params.externalToken;\r\n                    $scope.userName = params.email;\r\n                    $scope.tokenType = params.tokenType;\r\n                    $scope.showLinkingDialog();\r\n                }\r\n                else {        \r\n                    if (params.tokenType === 'google') {\r\n                        googleHelperService.logout();\r\n                    }\r\n                    errorService.showError(err);\r\n                }\r\n            });\r\n    }\r\n\r\n    $scope.displayBiometricAuthSuggestionDialog = async function(callBack) {\r\n        if (await bioAuthService.isAvailable()) {\r\n            if (!bioAuthService.isBioAuthEnabled(configService.lastDearPosName, configService.loginUserID)) {\r\n                const checkBoxValue = JSON.parse(localStorage.getItem(`doNotShowEnableBioAuth_${configService.loginUserID}`)) || false;\r\n                if (checkBoxValue) {\r\n                    return callBack && callBack();\r\n                }\r\n                \r\n           \r\n                $scope.dialogMode = 'enable-face-auth';\r\n                \r\n                helperService.showCustomDialog3(gettextCatalog.getString('Confirmation'), gettextCatalog.getString(`Do you want to enable biometric sign-in for user ${configService.lastUserName}?`),\r\n                    gettextCatalog.getString('Yes'), gettextCatalog.getString('No'), true, true, checkBoxValue,\r\n                    (val) => {\r\n                        console.log('success callback')\r\n                        if (val) {\r\n                            localStorage.setItem(`doNotShowEnableBioAuth_${configService.loginUserID}`, true.toString());\r\n                            bioAuthService.reset();\r\n                        }\r\n                    }\r\n                );\r\n            } else if (callBack) {\r\n                callBack();   \r\n            }\r\n        } else {\r\n            callBack();\r\n        }\r\n    }\r\n\r\n    $scope.googleLogin = function () {\r\n\r\n        if (!$scope.isOnline) {\r\n            errorService.showError(gettextCatalog.getString(\"Cannot log in to Google when offline.\"));\r\n            return false;\r\n        }\r\n\r\n        if (!$scope.dearPosName) {\r\n            errorService.showError(gettextCatalog.getString(\"Required attribute 'PosApplicationName' cannot be empty.\"));\r\n            return false;\r\n        }\r\n\r\n        googleHelperService.login()\r\n            .then(function (user) {\r\n                $scope.externalLogin({email: user.email, password: null, externalToken: user.idToken, tokenType: 'google'});\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n\r\n                googleHelperService.logout();\r\n\r\n                if (err && err.error && err.error != 'popup_closed_by_user') {\r\n                    errorService.showError(err);\r\n                }\r\n\r\n            });\r\n    };\r\n\r\n    $scope.msalLogin = async function () {\r\n\r\n        if (!$scope.isOnline) {\r\n            errorService.showError(gettextCatalog.getString(\"Cannot log in when offline.\"));\r\n            return false;\r\n        }\r\n\r\n        if (!$scope.dearPosName) {\r\n            errorService.showError(gettextCatalog.getString(\"Please enter POS name first\"));\r\n            return false;\r\n        }\r\n\r\n        msalService.login()\r\n            .then(function (res) {\r\n                if (!res) return;\r\n                \r\n                $scope.externalLogin({email: res.username, password: null, externalToken: res.token, tokenType: 'ms'});\r\n            })\r\n            .catch(function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n    };\r\n\r\n    $scope.eyeLinkingPasswordToggle = function () {\r\n        var eyeLinkingPasswordLink = $('#eyeLinkingPassword');\r\n        var eye = $(eyeLinkingPasswordLink).children('span');\r\n        if ($(eye).hasClass(\"glyphicon-eye-open\")) {\r\n            $(eye).removeClass(\"glyphicon-eye-open\");\r\n            $(eye).addClass(\"glyphicon-eye-close\");\r\n        }\r\n        else {\r\n            $(eye).removeClass(\"glyphicon-eye-close\");\r\n            $(eye).addClass(\"glyphicon-eye-open\");\r\n        }\r\n\r\n        var input = $($(eyeLinkingPasswordLink).data(\"toggle\"));\r\n        if (input.attr(\"type\") === \"password\") {\r\n            input.attr(\"type\", \"text\");\r\n            $(eyeLinkingPasswordLink).attr('title', gettextCatalog.getString('Hide password'));\r\n        } else {\r\n            input.attr(\"type\", \"password\");\r\n            $(eyeLinkingPasswordLink).attr('title', gettextCatalog.getString('Show password'));\r\n        }\r\n    };\r\n\r\n    $scope.showLinkingDialog = function () {\r\n\r\n        $scope.warningVisibility.DEARPOSName = false;\r\n        $scope.warningVisibility.Email = false;\r\n        $scope.warningVisibility.Password = false;\r\n        $scope.password = null;\r\n\r\n        helperService.showDialog($('#externalLinkingModal'));\r\n    };\r\n\r\n    $scope.hideLinkingDialog = function () {\r\n        $scope.warningVisibility.DEARPOSName = false;\r\n        $scope.warningVisibility.Email = false;\r\n        $scope.warningVisibility.Password = false;\r\n        $scope.password = null;\r\n\r\n        helperService.closeDialog($('#externalLinkingModal'));\r\n    };\r\n\r\n\r\n    $scope.loginUser = (data) => {\r\n        configService.setLastDearPosName(data.PosName);\r\n        configService.setLastUserName(data.UserName);\r\n        configService.setLastDisplayUserName(data.DisplayUserName);\r\n\r\n        $rootScope.$broadcast('header.setUserInfo', {\r\n            currentUser: !data.DisplayUserName ? data.UserName : data.DisplayUserName,\r\n            currentPosName: data.PosName,\r\n            currentRoleName: configService.role,\r\n            currentUserId: configService.loginUserID,\r\n        });\r\n    };\r\n\r\n    $scope.canShowLinkingGoogleErrors = false;\r\n    \r\n    $scope.linkExternal = () => {\r\n        //TODO\r\n        $scope.canShowLinkingGoogleErrors = !!$scope.externalLinkingForm.$invalid;\r\n\r\n        if ($scope.externalLinkingForm.$invalid) {\r\n            return false;\r\n        }\r\n        $.blockUI();\r\n        loginService.linkingExternal($scope.dearPosName, $scope.userName, $scope.password, $scope.externalToken, $scope.tokenType).then(() => {\r\n\r\n            loginService.login($scope.dearPosName, $scope.userName, null, null, $scope.externalToken, $scope.tokenType).then(\r\n                (data) => {\r\n\r\n                    $scope.idToken = null;\r\n                    if ($scope.dearPosMode === true) {\r\n                        configService.allowNewCalculations = false;\r\n                        $scope.payloadVersion = '1';\r\n                    }\r\n\r\n                    $scope.hideLinkingDialog();\r\n                    helperService.closeDialog($('#enterModal'));\r\n\r\n                    $.unblockUI();\r\n\r\n                    $scope.loginUser(data);\r\n\r\n                    // show outlet|register dialog\r\n                    $rootScope.$broadcast('selectOR.show'); // show outlet|register dialog\r\n                },\r\n                function (err) {\r\n                    $.unblockUI();\r\n                    errorService.showError(err);\r\n                });\r\n        },\r\n            function (err) {\r\n                $.unblockUI();\r\n                errorService.showError(err);\r\n            });\r\n    };\r\n\r\n    $scope.googleLogOut = function () {\r\n        $scope.idToken = null;\r\n        googleHelperService.logout();\r\n    };\r\n\r\n    $scope.biometricLogin = async () => {\r\n        try {\r\n            if (!$scope.isBioAuthEnabled) return;\r\n            const val = await bioAuthService.loadSecret();\r\n            if (val) {\r\n                const data = JSON.parse(val);\r\n                if (data) {\r\n                    $.blockUI();\r\n                    try {\r\n                        const res = await loginService.login(data.PosName, data.UserName, null, null, null, null, data);\r\n                        helperService.closeDialog($('#enterModal'));\r\n                        $scope.loginUser(res);\r\n                        $.unblockUI();\r\n                        $scope.afterLogin();\r\n                    } catch (err) {\r\n                        $.unblockUI();\r\n                        errorService.showError(err);\r\n                    }\r\n                }\r\n            }\r\n        } catch (e) {\r\n            console.log(e);\r\n            if (e.code && e.code === Fingerprint.BIOMETRIC_NO_SECRET_FOUND ) {\r\n                errorService.showError(gettextCatalog.getString(`Please log in using user/password first to enable biometric login`));\r\n                return;\r\n            } else if (e.code && (e.code === Fingerprint.BIOMETRIC_NO_SECRET_FOUND || e.code === Fingerprint.BIOMETRIC_PIN_OR_PATTERN_DISMISSED)) {\r\n                return;\r\n            } else if (e.message) {\r\n                errorService.showError(e.message);\r\n            } else {\r\n                errorService.showError(e);\r\n            }\r\n        }\r\n    }\r\n\r\n    $scope.getDataForLogin = () => {\r\n        return {\r\n            PosName: configService.lastDearPosName,\r\n            UserName: configService.lastUserName,\r\n            DisplayUserName: configService.lastDisplayUserName,\r\n            IsRequiredChangePassword: false,\r\n            ApplicationKey: configService.applicationKey,\r\n            UserID: configService.loginUserID\r\n        }\r\n    }\r\n}]);","import sjcl from 'sjcl';\r\nimport { IAngularStatic, Injectable } from 'angular';\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport class LoginService {\r\n    static $inject = [\r\n        '$q', 'configService', 'remoteRequestProvider', 'localDBProvider', 'gettextCatalog', 'tmhDynamicLocale',\r\n        '$interval', 'helperService', 'saleService', 'productsService', 'receiptService',\r\n        'userManagementService', 'customerService', 'barcodeService', 'registryService', 'loyaltyService', '$rootScope', 'googleHelperService', 'deviceInfo',\r\n        'pendoService', LoginService\r\n    ];\r\n\r\n    public isFirstLogin = true;\r\n    private afterLoginCallbacks = [];\r\n    private payloadVersion: string;\r\n    private idleLogoutTimer: number;\r\n\r\n    constructor(private $q, private configService: any, private remoteRequestProvider, private localDBProvider, private gettextCatalog, private tmhDynamicLocale,\r\n                private $interval,  private helperService, private saleService, private productsService, private receiptService,\r\n                private userManagementService, private customerService, private barcodeService, private registryService, private loyaltyService, private $rootScope, private googleHelperService, private deviceInfo,\r\n                private pendoService)\r\n    {\r\n        this.$interval(() => {\r\n            if (this.isLoggedIn()) {\r\n                configService.execCallbackFunctions();\r\n            }\r\n        }, this.configService.dataSendInterval);\r\n    }\r\n\r\n    isLoggedIn() {\r\n        return !!this.configService.applicationKey && !!this.configService.tenantID && !!this.configService.loginUserID;\r\n    };\r\n\r\n    login(dearPosName, userName, password, pin, externalToken = null, tokenType = null, savedData = null) {\r\n        var isOnline = this.configService.isOnline !== false;\r\n        var provider = isOnline || this.deviceInfo.isSimulator ? this.remoteRequestProvider : this.localDBProvider;\r\n        var pinToken = null;\r\n        if (!!pin) {\r\n            pinToken = this.preparePinToken(pin);\r\n            if (!userName)\r\n                userName = this.configService.lastUserName;\r\n        }\r\n\r\n        // *************** for debug !!! ***********************\r\n        //configService.applicationKey = '12345';\r\n        //configService.tenantID = '32145';\r\n        //configService.loginUserID = '34534534';\r\n        //configService.userName = userName;\r\n        //configService.role = 'Administrator';\r\n        //deferred.resolve(null);\r\n        //return deferred.promise;\r\n        // ***************************************************\r\n        var pr = provider.login(dearPosName, userName, password, pin, pinToken, externalToken, tokenType, savedData)\r\n            .then((resp) => {\r\n                const deferred = this.$q.defer();\r\n                this.configService.loginChanges = null;\r\n\r\n                if (!resp) {\r\n                    // call error processing\r\n                    deferred.reject('Error on login to address: ' + this.configService.connectionURL);\r\n                    return deferred.promise;\r\n                }\r\n\r\n                const body = resp.data;\r\n\r\n                //                    if (!!pin) { // Doesn't matter wht kind of login is used: check preconditions\r\n                if (!this.isFirstLogin) {\r\n                    if (this.configService.applicationID === body.ApplicationID) {\r\n                        this.configService.loginChanges = 'full';\r\n\r\n                        if (this.configService.lastLoginUserID === body.UserId) {\r\n                            this.configService.loginChanges = 'none';\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (savedData && savedData.ApplicationKey) {\r\n                    body.ApplicationKey = savedData.ApplicationKey;\r\n                }\r\n\r\n                this.setConfiguration(body);\r\n                this.configService.posName = dearPosName;\r\n                this.configService.password = password;\r\n\r\n\r\n                if (!this.configService.currencyCulture) {\r\n                    this.configService.currencyCulture = 'en-US';\r\n                }\r\n\r\n                this.tmhDynamicLocale.set(this.configService.currencyCulture.toLowerCase()); // register make sence under android/ios\r\n                this.helperService.setSpecialCurrencySymbols();\r\n\r\n                body.Password = password;\r\n                body.PosName = dearPosName;\r\n\r\n                if (isOnline) {\r\n                    this.configService.setBaseURL();\r\n                }\r\n\r\n                $.each(this.afterLoginCallbacks, function (idx, el) {\r\n                    el();\r\n                });\r\n\r\n\r\n                if (this.configService.autoLockAfter) {\r\n                    this.initIdleLogout(this.configService.autoLockAfter);\r\n                }\r\n\r\n                this.pendoService.initPendo();\r\n\r\n                deferred.resolve(body);\r\n                return deferred.promise;\r\n            }, (err) => {\r\n                const err0 = err;\r\n                if (!!err && err.hasOwnProperty('headers')) {\r\n                    err = err.data;\r\n                }\r\n                if (!err) {\r\n                    err = this.gettextCatalog.getString(\"Connection refused.\");\r\n                }\r\n\r\n                const deferred = this.$q.defer();\r\n                // call error processing\r\n                console.log('Error on login to address: ' + this.configService.connectionURL + '/PosAccount: ' + err0);\r\n                deferred.reject(err);\r\n                return deferred.promise;\r\n            })\r\n            .then((body) => {\r\n                if (this.configService.isSite === true || !body.Password || !this.configService.isOnline || this.deviceInfo.isSimulator) {\r\n                    var deferred = this.$q.defer();\r\n                    deferred.resolve(body);\r\n                    return deferred.promise;\r\n                } else {\r\n                    return this.localDBProvider.saveLogin(body);\r\n                }\r\n            });\r\n\r\n        // init Loylaty providers\r\n        pr = pr.then((res) => {\r\n            return this.loyaltyService.preload(res);\r\n        });\r\n\r\n        return pr;\r\n    };\r\n\r\n    setAfterLoginCallbacks(func) {\r\n        this.afterLoginCallbacks.push(func);\r\n    };\r\n\r\n    logoff() {\r\n\r\n        this.googleHelperService.logout();\r\n\r\n        this.configService.applicationKey = null;\r\n        this.configService.loginUserID = null;\r\n        this.configService.userName = null;\r\n        this.configService.roles = null;\r\n        this.configService.UserHasSelectedOutlet = null;\r\n        this.configService.lastPosChange = null;\r\n        this.configService.password = null;\r\n        this.configService.applyCustomerDiscountAfterOtherDiscounts = null;\r\n        // this.configService.pinToken = null;\r\n        this.productsService.stopProductsAutoUpdate();\r\n        this.saleService.stopSequenceAutoUpdate();\r\n        this.pendoService.resetPendo();\r\n    };\r\n\r\n    changePassword(userID, passwordOld, passwordNew) {\r\n        return this.remoteRequestProvider.changePassword(userID, passwordOld, passwordNew);\r\n    };\r\n\r\n    recoverPassword(posName, userName) {\r\n        var pr = this.remoteRequestProvider.recoverPassword(posName, userName);\r\n        pr = pr.then((res) => {\r\n            var deferred = this.$q.defer();\r\n            deferred.resolve(res);\r\n            return deferred.promise;\r\n        });\r\n        return pr;\r\n    };\r\n\r\n    preparePinToken(pin) {\r\n        const pinData = {\r\n            posName: this.configService.posName.toLowerCase(),\r\n            applicationID: this.configService.applicationID.toLowerCase(),\r\n            tenantID: this.configService.tenantID.toLowerCase(),\r\n            pin: pin\r\n        };\r\n\r\n        const s = JSON.stringify(pinData);\r\n\r\n        console.log(s);\r\n\r\n        const salt = sjcl.codec.base64.fromBits([17, 4, 19, 71]);\r\n\r\n        const r = sjcl.json.encrypt(pin, s, {\r\n            salt: salt,\r\n            iv: salt\r\n        });\r\n\r\n        return r;\r\n    };\r\n\r\n    savePin(pin) {\r\n\r\n        // try to save it to db then save to local\r\n        const ciphertext = pin == null ? null : this.preparePinToken(pin);\r\n        this.configService.pinToken = ciphertext;\r\n\r\n        let pr = this.remoteRequestProvider.savePin(ciphertext);\r\n        if (this.configService.isMobile && !this.deviceInfo.isSimulator) {\r\n            pr = pr.then(() => {\r\n                return this.localDBProvider.savePin(ciphertext);\r\n            });\r\n        }\r\n\r\n        return pr;\r\n    };\r\n\r\n    static listOfResetEvents = ['load', 'mousemove', 'mousedown', 'touchstart', 'click', 'keypress', 'scroll'];\r\n\r\n    /*\r\n     * This function should logout user if he exceeds idle time (if its set on pos integration page)\r\n     */\r\n    private initIdleLogout(idleMaxDuration) {\r\n        const resetTimer = (e)  => {\r\n            // console.log('reseted by ', e.type);\r\n            clearTimeout(this.idleLogoutTimer);\r\n            this.idleLogoutTimer = setTimeout(idleLogout, idleMaxDuration*1000);  // time is in milliseconds\r\n        }\r\n\r\n        LoginService.listOfResetEvents.forEach((e) => {\r\n            window.addEventListener(e, resetTimer.bind(this), true);\r\n        });\r\n\r\n        const idleLogout = () => {\r\n            if (this.$rootScope.cardTransactionInProgress) {\r\n                resetTimer({type: 'transaction in progress'});\r\n                return;\r\n            }\r\n            console.log('clear timeout');\r\n            clearTimeout(this.idleLogoutTimer);\r\n\r\n            LoginService.listOfResetEvents.forEach((e) => {\r\n                window.removeEventListener(e, resetTimer.bind(this));\r\n            });\r\n\r\n            this.$rootScope.$broadcast('header.logoff');\r\n            this.googleHelperService.logout();\r\n        }\r\n\r\n        clearTimeout(this.idleLogoutTimer);\r\n        this.idleLogoutTimer = setTimeout(idleLogout, idleMaxDuration*1000);\r\n    }\r\n\r\n    /*\r\n     * This function loads everything that is required to work properly\r\n     * depending on this.configService.pinMode and ECSConfigID and OutletLocationMappingID and userID\r\n     * will decide what to load\r\n     */\r\n    loadAll(dataChangeNotificationService, getHash) {\r\n        console.time('Load all');\r\n\r\n        var prList = [];\r\n        var skipMost = false; // if the same user logged on by pin - skip as much as we can\r\n        var skipBigData = false; // the outlet is the same, so skip big data loading\r\n\r\n        switch (this.configService.loginChanges) {\r\n            case 'none': // even user is the same on pin login\r\n                skipMost = true;\r\n                skipBigData = true;\r\n                break;\r\n            case 'user': // user is different, but outlet is the same\r\n                skipBigData = true;\r\n                break;\r\n        }\r\n\r\n        this.configService.loginChanges = null; // reset\r\n\r\n        console.time('Load receipt template');\r\n        var pr = null;\r\n\r\n        // condition below is removed as it makes receipt to be not loaded at first time\r\n        // also it's useful to reload template as it can be modified\r\n        if (!skipMost) {\r\n            pr = this.receiptService.getReceiptTemplate()\r\n                .then(() => {\r\n                    console.timeEnd('Load receipt template');\r\n                    return this.helperService.resolvePromise();\r\n                });\r\n            prList.push(pr);\r\n        }\r\n\r\n        // if we are in mobile mode or in site mode and we support indexed db\r\n        if (this.configService.isSite === false || window.isSupported === true) {\r\n            dataChangeNotificationService.stop();\r\n            pr = dataChangeNotificationService.init();\r\n            prList.push(pr);\r\n        }\r\n\r\n        if (!skipBigData) {\r\n            // load only for mobile version or Indexed DB supported browsers\r\n            if (!this.configService.isSite || window.isSupported) {\r\n                console.time('loadSaleRepresentativesAll');\r\n                pr = this.userManagementService.loadSaleRepresentativesAll(true, getHash).then(() => {\r\n                    console.timeEnd('loadSaleRepresentativesAll');\r\n                    return this.userManagementService.startSaleRepresentativesAutoUpdate();\r\n                });\r\n                prList.push(pr);\r\n            }\r\n        }\r\n\r\n        if (!skipBigData) {\r\n            // load only for mobile version or Indexed DB supported browsers\r\n            console.time('Load products');\r\n            pr = this.productsService.loadProducts(true, getHash);\r\n\r\n            // disable auto product reloading due to system overload.\r\n            // also StocktakeTask event also lead to reload and also is disabled\r\n            //if (!this.configService.isSite || window.isSupported) {\r\n            //    pr = pr.then(() => {\r\n            //        console.timeEnd('Load products');\r\n            //        return productsService.startProductsAutoUpdate();\r\n            //    });\r\n            //} else {\r\n            pr = pr.then(() => {\r\n                console.timeEnd('Load products');\r\n                return this.helperService.resolvePromise();\r\n            });\r\n            //}\r\n            prList.push(pr);\r\n\r\n            pr = this.customerService.loadCustomersOnInit(getHash);\r\n            prList.push(pr);\r\n\r\n            console.time('Load discounts');\r\n            pr = this.saleService.getPosDiscounts()\r\n                .then(() => {\r\n                    console.timeEnd('Load discounts');\r\n                    return this.helperService.resolvePromise();\r\n                });\r\n            prList.push(pr);\r\n\r\n            console.time('Load card settings');\r\n            pr = this.productsService.getGiftCardSettings()\r\n                .then(() => {\r\n                    console.timeEnd('Load card settings');\r\n                    return this.helperService.resolvePromise();\r\n                });\r\n            prList.push(pr);\r\n        }\r\n\r\n        console.time('startSequenceAutoUpdate');\r\n        pr = this.saleService.startSequenceAutoUpdate()\r\n            .then(() => {\r\n                console.timeEnd('startSequenceAutoUpdate');\r\n                return this.helperService.resolvePromise();\r\n            });\r\n        prList.push(pr);\r\n\r\n        if (!skipBigData) {\r\n            console.time('getSurcharge');\r\n            pr = this.saleService.getSurcharge()\r\n                .then(() => {\r\n                    console.timeEnd('getSurcharge');\r\n                    return this.helperService.resolvePromise();\r\n                });\r\n            prList.push(pr);\r\n        }\r\n\r\n        if (!skipBigData) {\r\n            console.time('loadAllFonts');\r\n            pr = this.barcodeService.loadAllFonts()\r\n                .then(() => {\r\n                    console.timeEnd('loadAllFonts');\r\n                    return this.helperService.resolvePromise();\r\n                });\r\n            prList.push(pr);\r\n\r\n            console.time('Load tax rules');\r\n            pr = this.productsService.loadTaxRules()\r\n                .then(() => {\r\n                    console.timeEnd('Load tax rules');\r\n                    return this.helperService.resolvePromise();\r\n                });\r\n            prList.push(pr);\r\n        }\r\n\r\n        // the promise below should be the last always\r\n        console.time('getActiveRegistrySales');\r\n        pr = this.registryService.getActiveRegistrySales(this.configService.lastRegistryID, this.configService.lastUserName)\r\n            .then((resp) => {\r\n                console.timeEnd('getActiveRegistrySales');\r\n                this.registryService.activeSalesFromLogin = resp;\r\n                return this.helperService.resolvePromise(resp);\r\n            });\r\n        prList.push(pr);\r\n\r\n        return this.$q.all(prList);\r\n    };\r\n\r\n    setConfiguration(body) {\r\n        this.configService.lastLoginUserID = body.UserId;\r\n        this.configService.userImageID = body.UserImageID;\r\n        this.configService.applicationID = body.ApplicationID;\r\n        this.configService.applicationKey = body.ApplicationKey;\r\n        this.configService.tenantID = body.AccountId;\r\n        this.configService.loginUserID = body.UserId;\r\n        this.configService.loadCustomersMode = body.LoadCustomersMode == undefined ? 2 : body.LoadCustomersMode;\r\n        this.configService.userName = body.UserName;\r\n        this.configService.role = body.UserRole;\r\n        this.configService.taxCalculationMethod = body.TaxCalculationMethod;\r\n        this.configService.taxInclucive = body.TaxInclucive;\r\n        this.configService.tenantTaxRule = JSON.stringify(body.Tax);\r\n        this.configService.ignoreCustomerTaxRule = body.IgnoreCustomerTaxRule;\r\n        this.configService.currency = body.Currency; // tenant level currency\r\n        this.configService.paymentProcessors = body.PaymentProcessors;\r\n        this.configService.posPaymentProcessors = body.PaymentProcessors;\r\n        this.configService.enableLoyalty = body.EnableLoyalty;\r\n        this.configService.UserHasSelectedOutlet = body.UserHasSelectedOutlet;\r\n        this.configService.dateFormat = body.DateFormat;\r\n        this.configService.roundTo = body.RoundTo;\r\n        this.configService.roundingRule = body.RoundingRule;\r\n        this.configService.loyaltyEarning = body.LoyaltyEarning;\r\n        this.configService.currencyCulture = body.CurrencyCulture;\r\n        this.configService.setCurrencyCulture(body.CurrencyCulture);\r\n        this.configService.blockSales = body.BlockSales;\r\n        this.configService.lastPosChange = body.LastPosChange;\r\n\r\n        this.configService.pinEnabled = body.PinEnabled;\r\n        this.configService.pinSize = body.PinLength;\r\n        this.configService.pinToken = body?.PinToken ?? null;\r\n        this.configService.applyCustomerDiscountAfterOtherDiscounts = body.ApplyCustomerDiscountAfterOtherDiscounts;\r\n        this.configService.useTyro = body.UseTyro === true;\r\n        this.configService.useTriPOS = body.UseTriPOS === true;\r\n        this.configService.tyroMerchantID = body.TyroMerchantID;\r\n        this.configService.triPOSAccountID = body.TriPOSAccountID;\r\n        this.configService.triPOSAcceptorID = body.TriPOSAcceptorID;\r\n        this.configService.triPOSAccountToken = body.TriPOSAccountToken;\r\n        this.configService.usePaymentSense = body.UsePaymentSense === true;\r\n        this.configService.useLinkly = body.UseLinkly === true;\r\n        this.configService.linklyUserName = body.LinklyUserName;\r\n        this.configService.linklyPassword = body.LinklyPassword;\r\n        this.configService.timeZone = body.TimeZone;\r\n        this.configService.decimalPlaces = !body.DecimalPlaces ? 0 : Number(body.DecimalPlaces.substr(1));\r\n        this.configService.useCustomerPriceTier = body.UseCustomerPriceTier === true;\r\n        this.configService.canChangePrice = body.CanChangePrice;\r\n        this.configService.canGiveDiscount = body.CanGiveDiscount;\r\n        this.configService.canSellOnAccount = body.CanSellOnAccount;\r\n        this.configService.canSeeDashboard = body.CanSeeDashboard;\r\n        this.configService.banknoteDenominations = body.BanknoteDenominations;\r\n        this.configService.MatchedLoginsCount = body.MatchedLoginsCount;\r\n        this.configService.zeroTaxID = body.ZeroTaxID;\r\n        this.configService.canSeeAllSales = body.CanSeeAllSales;\r\n        this.configService.CanDoLayby = body.CanDoLayby;\r\n        this.configService.CanSeeStockValue = body.CanSeeStockValue;\r\n        this.configService.CanSeeItemValue = body.CanSeeItemValue;\r\n        this.configService.CanVoidSales = body.CanVoidSales;\r\n        this.configService.canClearOfflineSales = body.CanClearOfflineSales;\r\n        this.configService.checkAvailabilityOnCheckout = body.CheckAvailabilityOnCheckout;\r\n        this.configService.CanSaleRep = (body.CanSaleRep === null || body.CanSaleRep === undefined) ? true : body.CanSaleRep;\r\n\r\n        // weight based barcode settings\r\n        this.configService.advancedBarcodeMode = body.AdvancedBarcodeMode;\r\n        this.configService.advancedBarcodeUseOutletSKU = body.AdvancedBarcodeUseOutletSKU;\r\n        this.configService.advancedBarcodeSKULength = body.AdvancedBarcodeSKULength;\r\n        this.configService.advancedBarcodeValueLength = body.AdvancedBarcodeValueLength;\r\n        this.configService.advancedBarcodeValueDecimalPoint = body.AdvancedBarcodeValueDecimalPoint;\r\n\r\n        this.configService.consolidateToCustomerID = body.ConsolidateToCustomerID;\r\n        this.configService.autoLockAfter = body.AutoLockAfter;\r\n\r\n        // if the below setting is false, it means all delivery functionality should be hidden from current logged on user\r\n        this.configService.canSeeAllScheduledDeliveries = body.CanSeeAllScheduledDeliveries && body.DeliverySchedulingEnable;\r\n        this.configService.deliveryNumberPerDay = body.DeliveryNumberPerDay;\r\n        this.configService.deliveryTimeInterval = body.deliveryTimeInterval;\r\n\r\n        this.configService.deliveryProcessShipSales = body.DeliveryProcessShipSales === true;\r\n        this.configService.deliveryTemplateID = body.DeliveryTemplateID;\r\n\r\n        this.configService.loadCustomersMode = body.LoadCustomersMode;\r\n        this.configService.paymentDisplayOrder = body.PaymentDisplayOrder;\r\n        this.configService.enableOrderStatusTracking = body.EnableOrderStatusTracking;\r\n\r\n        // LoyaltyLion settings\r\n        if (body.LoyaltyLionToken) {\r\n            this.configService.loyaltyLionToken = body.LoyaltyLionToken;\r\n            this.configService.enableLoyalty = false;\r\n        }\r\n\r\n        this.configService.allowNewCalculations = !body.AllowNewCalculations ? false : true;\r\n        if (this.configService.allowNewCalculations) {\r\n            this.payloadVersion = '3';\r\n        }\r\n\r\n        if (body.CashManagementOparationReasons)\r\n            this.configService.cashManagementOparationReasons = body.CashManagementOparationReasons;\r\n\r\n        this.configService.useWindcave = body.UseWindcave === true;\r\n        if (this.configService.useWindcave) {\r\n            this.configService.windcaveUsername = body.WindcaveUsername;\r\n            this.configService.windcaveKey = body.WindcaveKey;\r\n        }\r\n    }\r\n\r\n    linkingExternal(posName, userName, password, token, tokenType) {\r\n        return this.remoteRequestProvider.linkingExternal(posName, userName, password, token, tokenType);\r\n    }\r\n}\r\n\r\nangular.module('services').service('loginService', LoginService.$inject as unknown as Injectable<Function>);","import { IAngularStatic, Injectable } from 'angular';\r\nimport buildConfiguration from './configEnvironment';\r\nimport { events } from './eventConstants';\r\n\r\ndeclare const angular: IAngularStatic;\r\n\r\nexport class PendoService {\r\n    static $inject = ['configService', 'deviceInfo', '$rootScope', PendoService];\r\n\r\n    private pendoEnabled = true;\r\n    private pendoRef: any; // pendo reference\r\n    private pendoStub: any;\r\n\r\n    private getPendo() {\r\n        return typeof window !== 'undefined' ? (window as any).pendo : undefined;\r\n    }\r\n\r\n    static loadPendoScript() {\r\n        try {\r\n            const apiKey = buildConfiguration.PendoKey;\r\n            const win = window as any;\r\n\r\n            if (!apiKey || win.pendo || win.pendoLoading) {\r\n                return;\r\n            }\r\n\r\n            win.pendoLoading = true;\r\n\r\n            (function(apiKey){\r\n                (function(p,e,n,d,o){var v,w,x,y,z;o=p[d]=p[d]||{};o._q=o._q||[];\r\n                v=['initialize','identify','updateOptions','pageLoad','track'];for(w=0,x=v.length;w<x;++w)(function(m){\r\n                    o[m]=o[m]||function(){o._q[m===v[0]?'unshift':'push']([m].concat([].slice.call(arguments,0)));};})(v[w]);\r\n                    y=e.createElement(n);y.async=!0;y.src='https://cdn.pendo.io/agent/static/'+apiKey+'/pendo.js';y.onload=function(){win.pendoLoading=false;};y.onerror=function(){win.pendoLoading=false;};\r\n                    z=e.getElementsByTagName(n)[0];z.parentNode.insertBefore(y,z);})(window,document,'script','pendo');\r\n            })(apiKey);\r\n\r\n            \r\n        } catch (e) {\r\n            if (typeof window !== 'undefined') {\r\n                 (window as any).pendoLoading = false;\r\n            }\r\n            console.error('Error loading Pendo script:', e);\r\n        }\r\n    }\r\n\r\n    constructor(private configService: any, private deviceInfo: any, private $rootScope: any) {\r\n        this.pendoRef = null;\r\n        this.initializePendoStub();\r\n        this.setupEventListeners();\r\n    }\r\n\r\n    private setupEventListeners() {\r\n        // listen syncStatus to enable/disable Pendo based on status\r\n        this.$rootScope.$on(events.HEADER_SYNC_STATUS_EVENT, (event, status) => {\r\n            if (status === events.STATUS_OK_AFTER_ERROR_SEND) {\r\n                this.enablePendo();\r\n            } else if (status === events.STATUS_ERROR_SEND_ORDER) {\r\n                this.disablePendo();\r\n            }\r\n        });\r\n    }\r\n\r\n    private initializePendoStub() {\r\n        this.pendoStub = {\r\n            initialize: () => { this.pendoEnabled = false; },\r\n            track: () => {},\r\n            identify: () => {},\r\n            clearSession: () => {},\r\n            stopSendingEvents: () => {},\r\n            startSendingEvents: () => {},\r\n            updateOptions: () => {}\r\n        };\r\n    }\r\n\r\n    initPendo() {\r\n        const pendo = this.getPendo();\r\n        if (!pendo || typeof pendo.initialize !== 'function') {\r\n            return;\r\n        }\r\n\r\n        this.pendoRef = pendo;\r\n\r\n        try {\r\n            if (buildConfiguration.configuration !== \"Debug\") {\r\n                const prefix = this.configService.isQAMode || buildConfiguration.configuration === \"Debug\" ? 'QA_Pendo_Test_' : '';\r\n                const name = prefix + this.configService.userName;\r\n                const model = this.deviceInfo.device ? `${this.deviceInfo.device.manufacturer}: ${this.deviceInfo.device.model}` : undefined;\r\n                pendo.initialize({\r\n                    visitor: {\r\n                        id: name,\r\n                        visitorId: name,\r\n                        email: this.configService.userName,\r\n\r\n                        appVersion: buildConfiguration.appVersion,\r\n                        model: model,\r\n                        deviceID: this.deviceInfo.device ? this.deviceInfo.device.uuid : undefined,\r\n                        osVersion: this.deviceInfo.device ? this.deviceInfo.device.version : undefined,\r\n                    },\r\n                    account: {\r\n                        id: this.configService.tenantID,\r\n                        accountId: prefix + this.configService.tenantID,\r\n                        isQA: (this.configService.isQAMode || buildConfiguration.configuration === \"Debug\").toString()\r\n                    }\r\n                });\r\n            }\r\n        } catch (e) {\r\n            console.error(e);\r\n        }\r\n    }\r\n\r\n\r\n    resetPendo() {\r\n        const pendo = this.getPendo();\r\n        if (!pendo) {\r\n            return;\r\n        }\r\n\r\n        try {\r\n            if (buildConfiguration.configuration !== \"Debug\") {\r\n                pendo.clearSession && pendo.clearSession();\r\n                Object.assign(pendo, this.pendoStub);\r\n            }\r\n        } catch (e) {\r\n            console.error(e);\r\n        }\r\n    }\r\n\r\n    enablePendo() {\r\n        const pendo = this.getPendo();\r\n        if (!pendo) {\r\n            return;\r\n        }\r\n\r\n        if (!this.pendoEnabled) {\r\n            this.pendoRef = pendo;\r\n            this.initPendo();\r\n            pendo.startSendingEvents && pendo.startSendingEvents();\r\n            this.pendoEnabled = true;\r\n        }\r\n    }\r\n\r\n    disablePendo() {\r\n        const pendo = this.getPendo();\r\n        if (!pendo) {\r\n            return;\r\n        }\r\n\r\n        if (this.pendoEnabled) {\r\n            pendo.stopSendingEvents && pendo.stopSendingEvents();\r\n            pendo.teardown && pendo.teardown();\r\n            Object.assign(pendo, this.pendoStub);\r\n            this.pendoEnabled = false;\r\n        }\r\n    }\r\n}\r\n\r\nangular.module('services').service('pendoService', PendoService.$inject as unknown as Injectable<Function>);\r\n","export default function Worker_fn() {\n  return new Worker(__webpack_public_path__ + \"unpackWorker-bundle.worker.js?h=8fe20cc9c3f98337b3de\");\n}\n","var map = {\n\t\"./Error_2020.svg\": \"./src/PosImages/Error_2020.svg\",\n\t\"./POS_2020.svg\": \"./src/PosImages/POS_2020.svg\",\n\t\"./Payment_2020.svg\": \"./src/PosImages/Payment_2020.svg\",\n\t\"./Print_2020.svg\": \"./src/PosImages/Print_2020.svg\",\n\t\"./Question_2020.svg\": \"./src/PosImages/Question_2020.svg\",\n\t\"./Question_yellow_2020.svg\": \"./src/PosImages/Question_yellow_2020.svg\",\n\t\"./Scanner_2020.svg\": \"./src/PosImages/Scanner_2020.svg\",\n\t\"./Success-full_2020.svg\": \"./src/PosImages/Success-full_2020.svg\",\n\t\"./Success-transparent_2020.svg\": \"./src/PosImages/Success-transparent_2020.svg\",\n\t\"./Success_2020.svg\": \"./src/PosImages/Success_2020.svg\",\n\t\"./Warning_2020.svg\": \"./src/PosImages/Warning_2020.svg\",\n\t\"./accountIcon_2020.svg\": \"./src/PosImages/accountIcon_2020.svg\",\n\t\"./add.green.svg\": \"./src/PosImages/add.green.svg\",\n\t\"./add.white.svg\": \"./src/PosImages/add.white.svg\",\n\t\"./amexLogo.svg\": \"./src/PosImages/amexLogo.svg\",\n\t\"./android-chrome-192x192.png\": \"./src/PosImages/android-chrome-192x192.png\",\n\t\"./android-chrome-384x384.png\": \"./src/PosImages/android-chrome-384x384.png\",\n\t\"./apple-touch-icon.png\": \"./src/PosImages/apple-touch-icon.png\",\n\t\"./arrow-left-clear_2020.svg\": \"./src/PosImages/arrow-left-clear_2020.svg\",\n\t\"./arrowDown_2020.svg\": \"./src/PosImages/arrowDown_2020.svg\",\n\t\"./arrowLeft_2020.svg\": \"./src/PosImages/arrowLeft_2020.svg\",\n\t\"./arrowRight_2020.svg\": \"./src/PosImages/arrowRight_2020.svg\",\n\t\"./backarrow.blue.svg\": \"./src/PosImages/backarrow.blue.svg\",\n\t\"./backarrow.white.svg\": \"./src/PosImages/backarrow.white.svg\",\n\t\"./backarrow1.svg\": \"./src/PosImages/backarrow1.svg\",\n\t\"./backspace.svg\": \"./src/PosImages/backspace.svg\",\n\t\"./barcode-svgrepo-com.svg\": \"./src/PosImages/barcode-svgrepo-com.svg\",\n\t\"./barcodeScanner-error.svg\": \"./src/PosImages/barcodeScanner-error.svg\",\n\t\"./barcodeScanner1.svg\": \"./src/PosImages/barcodeScanner1.svg\",\n\t\"./barcodeScanner2.svg\": \"./src/PosImages/barcodeScanner2.svg\",\n\t\"./bg.jpg\": \"./src/PosImages/bg.jpg\",\n\t\"./brand.svg\": \"./src/PosImages/brand.svg\",\n\t\"./calendar.svg\": \"./src/PosImages/calendar.svg\",\n\t\"./calendar_2020.svg\": \"./src/PosImages/calendar_2020.svg\",\n\t\"./calendar_icon_range_2020.svg\": \"./src/PosImages/calendar_icon_range_2020.svg\",\n\t\"./cash.png\": \"./src/PosImages/cash.png\",\n\t\"./cash.svg\": \"./src/PosImages/cash.svg\",\n\t\"./cashIcon_2020.svg\": \"./src/PosImages/cashIcon_2020.svg\",\n\t\"./cashIcon_2023.svg\": \"./src/PosImages/cashIcon_2023.svg\",\n\t\"./category.svg\": \"./src/PosImages/category.svg\",\n\t\"./checkMark.green.svg\": \"./src/PosImages/checkMark.green.svg\",\n\t\"./checkMark3.svg\": \"./src/PosImages/checkMark3.svg\",\n\t\"./cin7-core.svg\": \"./src/PosImages/cin7-core.svg\",\n\t\"./clip.svg\": \"./src/PosImages/clip.svg\",\n\t\"./close.svg\": \"./src/PosImages/close.svg\",\n\t\"./closed-sign.svg\": \"./src/PosImages/closed-sign.svg\",\n\t\"./cog_2020.svg\": \"./src/PosImages/cog_2020.svg\",\n\t\"./comment-alt.svg\": \"./src/PosImages/comment-alt.svg\",\n\t\"./complete-btn.png\": \"./src/PosImages/complete-btn.png\",\n\t\"./complete.png\": \"./src/PosImages/complete.png\",\n\t\"./copy_2020.svg\": \"./src/PosImages/copy_2020.svg\",\n\t\"./credit-card.png\": \"./src/PosImages/credit-card.png\",\n\t\"./creditCard.svg\": \"./src/PosImages/creditCard.svg\",\n\t\"./creditCardIcon_2020.svg\": \"./src/PosImages/creditCardIcon_2020.svg\",\n\t\"./creditCardIcon_2023.svg\": \"./src/PosImages/creditCardIcon_2023.svg\",\n\t\"./customers-icon_2020.svg\": \"./src/PosImages/customers-icon_2020.svg\",\n\t\"./customers.svg\": \"./src/PosImages/customers.svg\",\n\t\"./dashboard-icon_2020.svg\": \"./src/PosImages/dashboard-icon_2020.svg\",\n\t\"./dashboard.svg\": \"./src/PosImages/dashboard.svg\",\n\t\"./date-left.png\": \"./src/PosImages/date-left.png\",\n\t\"./date-right.png\": \"./src/PosImages/date-right.png\",\n\t\"./delete-red.svg\": \"./src/PosImages/delete-red.svg\",\n\t\"./delete.svg\": \"./src/PosImages/delete.svg\",\n\t\"./delivery-truck.svg\": \"./src/PosImages/delivery-truck.svg\",\n\t\"./display.svg\": \"./src/PosImages/display.svg\",\n\t\"./double-left-chevron.svg\": \"./src/PosImages/double-left-chevron.svg\",\n\t\"./dp_add-head__back.png\": \"./src/PosImages/dp_add-head__back.png\",\n\t\"./dp_add-head__close.png\": \"./src/PosImages/dp_add-head__close.png\",\n\t\"./dp_arrow-left.png\": \"./src/PosImages/dp_arrow-left.png\",\n\t\"./dp_arrow-right.png\": \"./src/PosImages/dp_arrow-right.png\",\n\t\"./dp_arrow_1.png\": \"./src/PosImages/dp_arrow_1.png\",\n\t\"./dp_arrow_2.png\": \"./src/PosImages/dp_arrow_2.png\",\n\t\"./dp_arrow_3.png\": \"./src/PosImages/dp_arrow_3.png\",\n\t\"./dp_arrow_4.png\": \"./src/PosImages/dp_arrow_4.png\",\n\t\"./dp_catalogue__cart-item_add.png\": \"./src/PosImages/dp_catalogue__cart-item_add.png\",\n\t\"./dp_catalogue__cart-top-cart.png\": \"./src/PosImages/dp_catalogue__cart-top-cart.png\",\n\t\"./dp_catalogue__cart-top-settings.png\": \"./src/PosImages/dp_catalogue__cart-top-settings.png\",\n\t\"./dp_catalogue__products-top-add-white.png\": \"./src/PosImages/dp_catalogue__products-top-add-white.png\",\n\t\"./dp_catalogue__products-top-add.png\": \"./src/PosImages/dp_catalogue__products-top-add.png\",\n\t\"./dp_catalogue__products-top-caption.png\": \"./src/PosImages/dp_catalogue__products-top-caption.png\",\n\t\"./dp_catalogue__products-top-close.png\": \"./src/PosImages/dp_catalogue__products-top-close.png\",\n\t\"./dp_catalogue__products-top-nav-toggle.png\": \"./src/PosImages/dp_catalogue__products-top-nav-toggle.png\",\n\t\"./dp_catalogue__products-top-search.png\": \"./src/PosImages/dp_catalogue__products-top-search.png\",\n\t\"./dp_custom-file-control.png\": \"./src/PosImages/dp_custom-file-control.png\",\n\t\"./dp_customers-table__item-redact.png\": \"./src/PosImages/dp_customers-table__item-redact.png\",\n\t\"./dp_customers-table__item-toggle.png\": \"./src/PosImages/dp_customers-table__item-toggle.png\",\n\t\"./dp_drawer-list__img_1.png\": \"./src/PosImages/dp_drawer-list__img_1.png\",\n\t\"./dp_drawer-list__img_2.png\": \"./src/PosImages/dp_drawer-list__img_2.png\",\n\t\"./dp_drawer-list__img_3.png\": \"./src/PosImages/dp_drawer-list__img_3.png\",\n\t\"./dp_drawer-list__img_4.png\": \"./src/PosImages/dp_drawer-list__img_4.png\",\n\t\"./dp_drawer-list__img_5.png\": \"./src/PosImages/dp_drawer-list__img_5.png\",\n\t\"./dp_drawer-user__img.png\": \"./src/PosImages/dp_drawer-user__img.png\",\n\t\"./dp_filter-select-up.png\": \"./src/PosImages/dp_filter-select-up.png\",\n\t\"./dp_filter-select.png\": \"./src/PosImages/dp_filter-select.png\",\n\t\"./dp_form-control-search.png\": \"./src/PosImages/dp_form-control-search.png\",\n\t\"./dp_form-control_note.png\": \"./src/PosImages/dp_form-control_note.png\",\n\t\"./dp_modal-note-sale-2.png\": \"./src/PosImages/dp_modal-note-sale-2.png\",\n\t\"./dp_modal-note-sale.png\": \"./src/PosImages/dp_modal-note-sale.png\",\n\t\"./dp_modal-select-item__val-less.png\": \"./src/PosImages/dp_modal-select-item__val-less.png\",\n\t\"./dp_modal-select-item__val-more.png\": \"./src/PosImages/dp_modal-select-item__val-more.png\",\n\t\"./dp_modal__back.png\": \"./src/PosImages/dp_modal__back.png\",\n\t\"./dp_note-table__item-go.png\": \"./src/PosImages/dp_note-table__item-go.png\",\n\t\"./dp_payment__info-pay-done.png\": \"./src/PosImages/dp_payment__info-pay-done.png\",\n\t\"./dp_payment__info-pay-input.png\": \"./src/PosImages/dp_payment__info-pay-input.png\",\n\t\"./dp_payment__info-text-add.png\": \"./src/PosImages/dp_payment__info-text-add.png\",\n\t\"./dropdown1.svg\": \"./src/PosImages/dropdown1.svg\",\n\t\"./dropdown2.svg\": \"./src/PosImages/dropdown2.svg\",\n\t\"./dropdown2.up.svg\": \"./src/PosImages/dropdown2.up.svg\",\n\t\"./dropdown3.svg\": \"./src/PosImages/dropdown3.svg\",\n\t\"./editPencilRecord_2020.svg\": \"./src/PosImages/editPencilRecord_2020.svg\",\n\t\"./email.svg\": \"./src/PosImages/email.svg\",\n\t\"./email.white.svg\": \"./src/PosImages/email.white.svg\",\n\t\"./emailed.svg\": \"./src/PosImages/emailed.svg\",\n\t\"./empty.jpg\": \"./src/PosImages/empty.jpg\",\n\t\"./enter.png\": \"./src/PosImages/enter.png\",\n\t\"./export.svg\": \"./src/PosImages/export.svg\",\n\t\"./export_2020.svg\": \"./src/PosImages/export_2020.svg\",\n\t\"./eye-filled.svg\": \"./src/PosImages/eye-filled.svg\",\n\t\"./face-scan.svg\": \"./src/PosImages/face-scan.svg\",\n\t\"./favicon.png\": \"./src/PosImages/favicon.png\",\n\t\"./filter.svg\": \"./src/PosImages/filter.svg\",\n\t\"./filters_button_2020.svg\": \"./src/PosImages/filters_button_2020.svg\",\n\t\"./giftCard.svg\": \"./src/PosImages/giftCard.svg\",\n\t\"./giftCardIcon_2020.svg\": \"./src/PosImages/giftCardIcon_2020.svg\",\n\t\"./giftCardIcon_2023.svg\": \"./src/PosImages/giftCardIcon_2023.svg\",\n\t\"./go-into.png\": \"./src/PosImages/go-into.png\",\n\t\"./google-logo.svg\": \"./src/PosImages/google-logo.svg\",\n\t\"./infoIcon_2020.svg\": \"./src/PosImages/infoIcon_2020.svg\",\n\t\"./info_icon.svg\": \"./src/PosImages/info_icon.svg\",\n\t\"./inventory-icon_2020.svg\": \"./src/PosImages/inventory-icon_2020.svg\",\n\t\"./inventory.svg\": \"./src/PosImages/inventory.svg\",\n\t\"./keyboardIcon_2023.svg\": \"./src/PosImages/keyboardIcon_2023.svg\",\n\t\"./logo.png\": \"./src/PosImages/logo.png\",\n\t\"./mail_2020.svg\": \"./src/PosImages/mail_2020.svg\",\n\t\"./menu-hamburger_2020.svg\": \"./src/PosImages/menu-hamburger_2020.svg\",\n\t\"./menu-tabs.svg\": \"./src/PosImages/menu-tabs.svg\",\n\t\"./menu.svg\": \"./src/PosImages/menu.svg\",\n\t\"./ms.svg\": \"./src/PosImages/ms.svg\",\n\t\"./mstile-150x150.png\": \"./src/PosImages/mstile-150x150.png\",\n\t\"./next.black.svg\": \"./src/PosImages/next.black.svg\",\n\t\"./nextRound_2020.svg\": \"./src/PosImages/nextRound_2020.svg\",\n\t\"./ok.png\": \"./src/PosImages/ok.png\",\n\t\"./openInnerTable_2020.svg\": \"./src/PosImages/openInnerTable_2020.svg\",\n\t\"./outlet.svg\": \"./src/PosImages/outlet.svg\",\n\t\"./paginatorLeftDouble_2020.svg\": \"./src/PosImages/paginatorLeftDouble_2020.svg\",\n\t\"./paginatorLeftSingle_2020.svg\": \"./src/PosImages/paginatorLeftSingle_2020.svg\",\n\t\"./paginatorRightDouble_2020.svg\": \"./src/PosImages/paginatorRightDouble_2020.svg\",\n\t\"./paginatorRightSingle_2020.svg\": \"./src/PosImages/paginatorRightSingle_2020.svg\",\n\t\"./paper-warning2.svg\": \"./src/PosImages/paper-warning2.svg\",\n\t\"./password.svg\": \"./src/PosImages/password.svg\",\n\t\"./pay-busket_2020.svg\": \"./src/PosImages/pay-busket_2020.svg\",\n\t\"./paymentKeyboard.svg\": \"./src/PosImages/paymentKeyboard.svg\",\n\t\"./paymentSystem2.svg\": \"./src/PosImages/paymentSystem2.svg\",\n\t\"./paymentSystem3.svg\": \"./src/PosImages/paymentSystem3.svg\",\n\t\"./paymentSystem4.svg\": \"./src/PosImages/paymentSystem4.svg\",\n\t\"./prev.black.svg\": \"./src/PosImages/prev.black.svg\",\n\t\"./prevRound_2020.svg\": \"./src/PosImages/prevRound_2020.svg\",\n\t\"./printButtonBlack_2020.svg\": \"./src/PosImages/printButtonBlack_2020.svg\",\n\t\"./printButton_2020.svg\": \"./src/PosImages/printButton_2020.svg\",\n\t\"./printLabels.svg\": \"./src/PosImages/printLabels.svg\",\n\t\"./printer-error.svg\": \"./src/PosImages/printer-error.svg\",\n\t\"./printer1.svg\": \"./src/PosImages/printer1.svg\",\n\t\"./printer2.svg\": \"./src/PosImages/printer2.svg\",\n\t\"./printer3.svg\": \"./src/PosImages/printer3.svg\",\n\t\"./question-mark.png\": \"./src/PosImages/question-mark.png\",\n\t\"./question-mark2.png\": \"./src/PosImages/question-mark2.png\",\n\t\"./quickKeysIcon_2020.svg\": \"./src/PosImages/quickKeysIcon_2020.svg\",\n\t\"./refundSuccessful.svg\": \"./src/PosImages/refundSuccessful.svg\",\n\t\"./register-error.svg\": \"./src/PosImages/register-error.svg\",\n\t\"./register.svg\": \"./src/PosImages/register.svg\",\n\t\"./reportType.svg\": \"./src/PosImages/reportType.svg\",\n\t\"./reports-icon_2020.svg\": \"./src/PosImages/reports-icon_2020.svg\",\n\t\"./reports.svg\": \"./src/PosImages/reports.svg\",\n\t\"./rightArrow.svg\": \"./src/PosImages/rightArrow.svg\",\n\t\"./role.svg\": \"./src/PosImages/role.svg\",\n\t\"./safari-pinned-tab.png\": \"./src/PosImages/safari-pinned-tab.png\",\n\t\"./saleComplete.svg\": \"./src/PosImages/saleComplete.svg\",\n\t\"./scan.png\": \"./src/PosImages/scan.png\",\n\t\"./scanner.svg\": \"./src/PosImages/scanner.svg\",\n\t\"./sell-icon_2020.svg\": \"./src/PosImages/sell-icon_2020.svg\",\n\t\"./sell.svg\": \"./src/PosImages/sell.svg\",\n\t\"./session-icon_2020.svg\": \"./src/PosImages/session-icon_2020.svg\",\n\t\"./setting.svg\": \"./src/PosImages/setting.svg\",\n\t\"./settings.svg\": \"./src/PosImages/settings.svg\",\n\t\"./setup-icon_2020.svg\": \"./src/PosImages/setup-icon_2020.svg\",\n\t\"./setup.svg\": \"./src/PosImages/setup.svg\",\n\t\"./signin-background.svg\": \"./src/PosImages/signin-background.svg\",\n\t\"./status.svg\": \"./src/PosImages/status.svg\",\n\t\"./store-credit.png\": \"./src/PosImages/store-credit.png\",\n\t\"./sync-alt.svg\": \"./src/PosImages/sync-alt.svg\",\n\t\"./sync.svg\": \"./src/PosImages/sync.svg\",\n\t\"./tiles.svg\": \"./src/PosImages/tiles.svg\",\n\t\"./trash_2020.svg\": \"./src/PosImages/trash_2020.svg\",\n\t\"./trash_2023.svg\": \"./src/PosImages/trash_2023.svg\",\n\t\"./trash_red_s.png\": \"./src/PosImages/trash_red_s.png\",\n\t\"./undo.png\": \"./src/PosImages/undo.png\",\n\t\"./user-icon_2020.svg\": \"./src/PosImages/user-icon_2020.svg\",\n\t\"./user.svg\": \"./src/PosImages/user.svg\",\n\t\"./userGreen.svg\": \"./src/PosImages/userGreen.svg\",\n\t\"./users-icon_2020.svg\": \"./src/PosImages/users-icon_2020.svg\",\n\t\"./validationError.png\": \"./src/PosImages/validationError.png\",\n\t\"./validationWarning.png\": \"./src/PosImages/validationWarning.png\",\n\t\"./warn.png\": \"./src/PosImages/warn.png\",\n\t\"./warning.svg\": \"./src/PosImages/warning.svg\",\n\t\"./wrong.svg\": \"./src/PosImages/wrong.svg\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src/PosImages sync recursive \\\\.(svg%7Cpng%7Cjpg)$\";","var map = {\n\t\"./addCustomerPartial.html\": \"./src/PosViews/addCustomerPartial.html\",\n\t\"./addNotesDialogPartial.html\": \"./src/PosViews/addNotesDialogPartial.html\",\n\t\"./addProductPartial.html\": \"./src/PosViews/addProductPartial.html\",\n\t\"./addSalesRepresentativePartial.html\": \"./src/PosViews/addSalesRepresentativePartial.html\",\n\t\"./addShippingAddressPartial.html\": \"./src/PosViews/addShippingAddressPartial.html\",\n\t\"./addStockTakePartial.html\": \"./src/PosViews/addStockTakePartial.html\",\n\t\"./addSurchargePartial.html\": \"./src/PosViews/addSurchargePartial.html\",\n\t\"./availabilityCheckPartial.html\": \"./src/PosViews/availabilityCheckPartial.html\",\n\t\"./backScreenTemplates.html\": \"./src/PosViews/backScreenTemplates.html\",\n\t\"./cameraScanSequentialPartial.html\": \"./src/PosViews/cameraScanSequentialPartial.html\",\n\t\"./cashManagementPartial.html\": \"./src/PosViews/cashManagementPartial.html\",\n\t\"./cashRoundingDialogPartial.html\": \"./src/PosViews/cashRoundingDialogPartial.html\",\n\t\"./certificate-error.component.html\": \"./src/PosViews/certificate-error.component.html\",\n\t\"./changeLanguagePartial.html\": \"./src/PosViews/changeLanguagePartial.html\",\n\t\"./changePasswordPartial.html\": \"./src/PosViews/changePasswordPartial.html\",\n\t\"./checkoutProductsAvailabilityInsufficientDialogPartial.html\": \"./src/PosViews/checkoutProductsAvailabilityInsufficientDialogPartial.html\",\n\t\"./clickAndCollectGridPartial.html\": \"./src/PosViews/clickAndCollectGridPartial.html\",\n\t\"./clickAndCollectModalDialogPartial.html\": \"./src/PosViews/clickAndCollectModalDialogPartial.html\",\n\t\"./clickAndCollectScanBatchDialogPartial.html\": \"./src/PosViews/clickAndCollectScanBatchDialogPartial.html\",\n\t\"./couponDialogPartial.html\": \"./src/PosViews/couponDialogPartial.html\",\n\t\"./creditCardProcessingErrorPartial.html\": \"./src/PosViews/creditCardProcessingErrorPartial.html\",\n\t\"./customDialog2Partial.html\": \"./src/PosViews/customDialog2Partial.html\",\n\t\"./customDialogPartial.html\": \"./src/PosViews/customDialogPartial.html\",\n\t\"./customSaleDialogPartial.html\": \"./src/PosViews/customSaleDialogPartial.html\",\n\t\"./customerDisplaySetupDialogPartial.html\": \"./src/PosViews/customerDisplaySetupDialogPartial.html\",\n\t\"./customerEmailWarningDialog.html\": \"./src/PosViews/customerEmailWarningDialog.html\",\n\t\"./customersPartial.html\": \"./src/PosViews/customersPartial.html\",\n\t\"./dashboardDetailsPartial.html\": \"./src/PosViews/dashboardDetailsPartial.html\",\n\t\"./dashboardPartial.html\": \"./src/PosViews/dashboardPartial.html\",\n\t\"./dateRangeSelector.html\": \"./src/PosViews/dateRangeSelector.html\",\n\t\"./deliveryCalendarPartial.html\": \"./src/PosViews/deliveryCalendarPartial.html\",\n\t\"./deliveryDialogPartial.html\": \"./src/PosViews/deliveryDialogPartial.html\",\n\t\"./deliveryPartial.html\": \"./src/PosViews/deliveryPartial.html\",\n\t\"./emailReportDialogPartial.html\": \"./src/PosViews/emailReportDialogPartial.html\",\n\t\"./errorDialogPartial.html\": \"./src/PosViews/errorDialogPartial.html\",\n\t\"./fullCalendarPartial.html\": \"./src/PosViews/fullCalendarPartial.html\",\n\t\"./giftCardPayPartial.html\": \"./src/PosViews/giftCardPayPartial.html\",\n\t\"./giftCardSalePartial.html\": \"./src/PosViews/giftCardSalePartial.html\",\n\t\"./headerPartial.html\": \"./src/PosViews/headerPartial.html\",\n\t\"./homePartial.html\": \"./src/PosViews/homePartial.html\",\n\t\"./layByPaymentDateDialogPartial.html\": \"./src/PosViews/layByPaymentDateDialogPartial.html\",\n\t\"./linklyPinPadPairing.html\": \"./src/PosViews/linklyPinPadPairing.html\",\n\t\"./loginPartial.html\": \"./src/PosViews/loginPartial.html\",\n\t\"./loyaltyConfirmPartial.html\": \"./src/PosViews/loyaltyConfirmPartial.html\",\n\t\"./loyaltyLionDialogPartial.html\": \"./src/PosViews/loyaltyLionDialogPartial.html\",\n\t\"./messageBoxPartial.html\": \"./src/PosViews/messageBoxPartial.html\",\n\t\"./numberKeyboardPartial.html\": \"./src/PosViews/numberKeyboardPartial.html\",\n\t\"./offlinePaymentsDialogPartial.html\": \"./src/PosViews/offlinePaymentsDialogPartial.html\",\n\t\"./offlineSalesPartial.html\": \"./src/PosViews/offlineSalesPartial.html\",\n\t\"./openCloseRegistryPartial.html\": \"./src/PosViews/openCloseRegistryPartial.html\",\n\t\"./partialPaymentsDialogPartial.html\": \"./src/PosViews/partialPaymentsDialogPartial.html\",\n\t\"./paymentModalSetupPartial.html\": \"./src/PosViews/paymentModalSetupPartial.html\",\n\t\"./pdfWebPrintPartial.html\": \"./src/PosViews/pdfWebPrintPartial.html\",\n\t\"./pinCodePartial.html\": \"./src/PosViews/pinCodePartial.html\",\n\t\"./pinCodeSetupPartial.html\": \"./src/PosViews/pinCodeSetupPartial.html\",\n\t\"./prepareAnyDayClosurePartial.html\": \"./src/PosViews/prepareAnyDayClosurePartial.html\",\n\t\"./printerModalSetupPartial.html\": \"./src/PosViews/printerModalSetupPartial.html\",\n\t\"./productLabelPrintPartial.html\": \"./src/PosViews/productLabelPrintPartial.html\",\n\t\"./productManagementPartial.html\": \"./src/PosViews/productManagementPartial.html\",\n\t\"./productManagementPriceDlgPartial.html\": \"./src/PosViews/productManagementPriceDlgPartial.html\",\n\t\"./productOptionsPartial.html\": \"./src/PosViews/productOptionsPartial.html\",\n\t\"./quoteEmailDialogPartial.html\": \"./src/PosViews/quoteEmailDialogPartial.html\",\n\t\"./receiptDialogPartial.html\": \"./src/PosViews/receiptDialogPartial.html\",\n\t\"./receiptEmailDialogPartial.html\": \"./src/PosViews/receiptEmailDialogPartial.html\",\n\t\"./reportCloseRegistryDetailsPartial.html\": \"./src/PosViews/reportCloseRegistryDetailsPartial.html\",\n\t\"./reportCloseRegistryPartial.html\": \"./src/PosViews/reportCloseRegistryPartial.html\",\n\t\"./reportGiftCardPartial.html\": \"./src/PosViews/reportGiftCardPartial.html\",\n\t\"./reportInTransitColumnSelectorPartial.html\": \"./src/PosViews/reportInTransitColumnSelectorPartial.html\",\n\t\"./reportInTransitPartial.html\": \"./src/PosViews/reportInTransitPartial.html\",\n\t\"./reportInventoryColumnSelectorPartial.html\": \"./src/PosViews/reportInventoryColumnSelectorPartial.html\",\n\t\"./reportInventoryPartial.html\": \"./src/PosViews/reportInventoryPartial.html\",\n\t\"./reportPaymentTypeSummaryPartial.html\": \"./src/PosViews/reportPaymentTypeSummaryPartial.html\",\n\t\"./reportProductPerformanceColumnSelectorPartial.html\": \"./src/PosViews/reportProductPerformanceColumnSelectorPartial.html\",\n\t\"./reportProductPerformancePartial.html\": \"./src/PosViews/reportProductPerformancePartial.html\",\n\t\"./reportSalesSummaryColumnSelectorPartial.html\": \"./src/PosViews/reportSalesSummaryColumnSelectorPartial.html\",\n\t\"./reportSalesSummaryPartial.html\": \"./src/PosViews/reportSalesSummaryPartial.html\",\n\t\"./reportStoreCreditPartial.html\": \"./src/PosViews/reportStoreCreditPartial.html\",\n\t\"./reportSurchargePartial.html\": \"./src/PosViews/reportSurchargePartial.html\",\n\t\"./requestCancelDialogPartial.html\": \"./src/PosViews/requestCancelDialogPartial.html\",\n\t\"./returnCompliteDialogPartial.html\": \"./src/PosViews/returnCompliteDialogPartial.html\",\n\t\"./returnPaymentsDialogPartial.html\": \"./src/PosViews/returnPaymentsDialogPartial.html\",\n\t\"./returnSaleDialogPartial.html\": \"./src/PosViews/returnSaleDialogPartial.html\",\n\t\"./saleHistoryDetailsDialogPartial.html\": \"./src/PosViews/saleHistoryDetailsDialogPartial.html\",\n\t\"./saleHistoryFilterDialogPartial.html\": \"./src/PosViews/saleHistoryFilterDialogPartial.html\",\n\t\"./saleSummaryPartial.html\": \"./src/PosViews/saleSummaryPartial.html\",\n\t\"./salesHistoryPartial.html\": \"./src/PosViews/salesHistoryPartial.html\",\n\t\"./salesParkedPartial.html\": \"./src/PosViews/salesParkedPartial.html\",\n\t\"./scanSerialNumberDialogPartial.html\": \"./src/PosViews/scanSerialNumberDialogPartial.html\",\n\t\"./scannerModalSetupPartial.html\": \"./src/PosViews/scannerModalSetupPartial.html\",\n\t\"./secondScreen.html\": \"./src/PosViews/secondScreen.html\",\n\t\"./selectOutletRegistryPartial.html\": \"./src/PosViews/selectOutletRegistryPartial.html\",\n\t\"./selectTaxDialogPartial.html\": \"./src/PosViews/selectTaxDialogPartial.html\",\n\t\"./sellCheckoutSectionNewPartial.html\": \"./src/PosViews/sellCheckoutSectionNewPartial.html\",\n\t\"./sellCheckoutSectionPartial.html\": \"./src/PosViews/sellCheckoutSectionPartial.html\",\n\t\"./sellPartial.html\": \"./src/PosViews/sellPartial.html\",\n\t\"./sellProductNamePartial.html\": \"./src/PosViews/sellProductNamePartial.html\",\n\t\"./sellProductPriceNewPartial.html\": \"./src/PosViews/sellProductPriceNewPartial.html\",\n\t\"./sellProductPricePartial.html\": \"./src/PosViews/sellProductPricePartial.html\",\n\t\"./sellToPayNewPartial.html\": \"./src/PosViews/sellToPayNewPartial.html\",\n\t\"./sellToPayPartial.html\": \"./src/PosViews/sellToPayPartial.html\",\n\t\"./sellTopInfoNewPartial.html\": \"./src/PosViews/sellTopInfoNewPartial.html\",\n\t\"./sellTopInfoPartial.html\": \"./src/PosViews/sellTopInfoPartial.html\",\n\t\"./sellTotalSectionNewPartial.html\": \"./src/PosViews/sellTotalSectionNewPartial.html\",\n\t\"./sellTotalSectionPartial.html\": \"./src/PosViews/sellTotalSectionPartial.html\",\n\t\"./setPassword.html\": \"./src/PosViews/setPassword.html\",\n\t\"./setupLabelPrinterSelectFromListDlgPartial.html\": \"./src/PosViews/setupLabelPrinterSelectFromListDlgPartial.html\",\n\t\"./setupPartial.html\": \"./src/PosViews/setupPartial.html\",\n\t\"./setupPrinterSelectFromListDlgPartial.html\": \"./src/PosViews/setupPrinterSelectFromListDlgPartial.html\",\n\t\"./sideBarPartial.html\": \"./src/PosViews/sideBarPartial.html\",\n\t\"./standaloneExchangeDialogPartial.html\": \"./src/PosViews/standaloneExchangeDialogPartial.html\",\n\t\"./standaloneRefundDialogPartial.html\": \"./src/PosViews/standaloneRefundDialogPartial.html\",\n\t\"./stockFamilyProductMatrixPartial.html\": \"./src/PosViews/stockFamilyProductMatrixPartial.html\",\n\t\"./stockItemQuantityDlgPartial.html\": \"./src/PosViews/stockItemQuantityDlgPartial.html\",\n\t\"./stockOrderingCommentsDialogPartial.html\": \"./src/PosViews/stockOrderingCommentsDialogPartial.html\",\n\t\"./stockOrderingPartial.html\": \"./src/PosViews/stockOrderingPartial.html\",\n\t\"./stockPurchaseOrderDetailsPartial.html\": \"./src/PosViews/stockPurchaseOrderDetailsPartial.html\",\n\t\"./stockTakePartial.html\": \"./src/PosViews/stockTakePartial.html\",\n\t\"./stockTransferAddItemPartial.html\": \"./src/PosViews/stockTransferAddItemPartial.html\",\n\t\"./stockTransferOrderAddItemPartial.html\": \"./src/PosViews/stockTransferOrderAddItemPartial.html\",\n\t\"./stockTransferOrderDetailsPartial.html\": \"./src/PosViews/stockTransferOrderDetailsPartial.html\",\n\t\"./stockTransferOrderQuantityAbsolutePartial.html\": \"./src/PosViews/stockTransferOrderQuantityAbsolutePartial.html\",\n\t\"./stockTransferOrderReorderDialogPartial.html\": \"./src/PosViews/stockTransferOrderReorderDialogPartial.html\",\n\t\"./stockTransferOrderScanGridPartial.html\": \"./src/PosViews/stockTransferOrderScanGridPartial.html\",\n\t\"./stockTransferOrderScanGridPartial2.html\": \"./src/PosViews/stockTransferOrderScanGridPartial2.html\",\n\t\"./stockTransferOrderSetQuantityDialogPartial.html\": \"./src/PosViews/stockTransferOrderSetQuantityDialogPartial.html\",\n\t\"./stockTransferPartial.html\": \"./src/PosViews/stockTransferPartial.html\",\n\t\"./stockTransferProcessPartial.html\": \"./src/PosViews/stockTransferProcessPartial.html\",\n\t\"./stockTransferScanGridPartial.html\": \"./src/PosViews/stockTransferScanGridPartial.html\",\n\t\"./stockTransferScanGridPartial2.html\": \"./src/PosViews/stockTransferScanGridPartial2.html\",\n\t\"./stockTransferSetQuantityDialogPartial.html\": \"./src/PosViews/stockTransferSetQuantityDialogPartial.html\",\n\t\"./stocktakeProcessPartial.html\": \"./src/PosViews/stocktakeProcessPartial.html\",\n\t\"./stocktakeQuantityAbsolutePartial.html\": \"./src/PosViews/stocktakeQuantityAbsolutePartial.html\",\n\t\"./stocktakeScanGridPartial.html\": \"./src/PosViews/stocktakeScanGridPartial.html\",\n\t\"./stocktakeScanPartial.html\": \"./src/PosViews/stocktakeScanPartial.html\",\n\t\"./stocktakeSetQuantityDialogPartial.html\": \"./src/PosViews/stocktakeSetQuantityDialogPartial.html\",\n\t\"./storeCreditConfirmPartial.html\": \"./src/PosViews/storeCreditConfirmPartial.html\",\n\t\"./userManagementPartial.html\": \"./src/PosViews/userManagementPartial.html\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./src/PosViews sync recursive \\\\.html$\";","angular.module('mainApp').run(['gettextCatalog', function (gettextCatalog) {\r\n/* jshint -W100 */\r\n    gettextCatalog.setStrings('en-GB', {});\r\n    gettextCatalog.setStrings('en-US', {\"&nbsp;\":\"&nbsp;\",\"(Family)\":\"(Family)\",\"*Please enter a sale order number, customer name or an invoice number in the search field to\\r\\n                    populate all sales including backend sales from other sales channels.\":\"*Please enter a sale order number, customer name or an invoice number in the search field to\\r\\n                    populate all sales including backend sales from other sales channels.\",\"- disabled\":\"- disabled\",\"<b style=\\\"font-weight: bold;\\\">Are you sure?</b>\":\"<b style=\\\"font-weight: bold;\\\">Are you sure?</b>\",\"<b style=\\\"font-weight: bold;\\\">Are you sure?</b><br>\\n                        All changes will be lost. Would you like to continue?\":\"<b style=\\\"font-weight: bold;\\\">Are you sure?</b><br>\\n                        All changes will be lost. Would you like to continue?\",\"<img src=\\\"PosImages/arrow-left-clear_2020.svg\\\" alt=\\\"arrow\\\" style=\\\"height: auto;\\n                                    width: 15px;\\n                                    position: relative;\\n                                    top: 1px;\\n                                    right: 5px;\\\">\\n                            Back to list\":\"<img src=\\\"PosImages/arrow-left-clear_2020.svg\\\" alt=\\\"arrow\\\" style=\\\"height: auto;\\n                                    width: 15px;\\n                                    position: relative;\\n                                    top: 1px;\\n                                    right: 5px;\\\">\\n                            Back to list\",\"<img src=\\\"PosImages/delivery-truck.svg\\\" style=\\\"width:23px;\\\">&nbsp;\\n                                            <span translate>Schedule delivery</span>\":\"<img src=\\\"PosImages/delivery-truck.svg\\\" style=\\\"width:23px;\\\">&nbsp;\\n                                            <span translate>Schedule delivery</span>\",\"<img src=\\\"PosImages/printButtonBlack_2020.svg\\\">&nbsp;\\n                                            <span translate>Print receipt</span>\":\"<img src=\\\"PosImages/printButtonBlack_2020.svg\\\">&nbsp;\\n                                            <span translate>Print receipt</span>\",\"<img src=\\\"PosImages/wrong.svg\\\" alt=\\\"void\\\">\\n                        Void\":\"<img src=\\\"PosImages/wrong.svg\\\" alt=\\\"void\\\">\\n                        Void\",\"<span class=\\\"ng-scope\\\">Add new stock</span>\":\"<span class=\\\"ng-scope\\\">Add new stock</span>\",\"<span class=\\\"ng-scope\\\">Return</span>\":\"<span class=\\\"ng-scope\\\">Return</span>\",\"<span class=\\\"ng-scope\\\">Sale</span>\":\"<span class=\\\"ng-scope\\\">Sale</span>\",\"<span translate>Available at</span> {{currentOrder.fromLocationName}}\":\"<span translate>Available at</span> {{currentOrder.fromLocationName}}\",\"<span translate>Sign in to POS</span>\":\"<span translate>Sign in to POS</span>\",\"A coupon with this code has already been used or doesn't exist. Please enter another code.\":\"A coupon with this code has already been used or doesn't exist. Please enter another code.\",\"A product with a negative price cannot be added to the checkout.\":\"A product with a negative price cannot be added to the checkout.\",\"A product with this serial number has been already added to the checkout.\":\"A product with this serial number has been already added to the checkout.\",\"Account\":\"Account\",\"Account sale payments\":\"Account sale payments\",\"Account sales\":\"Account sales\",\"Account sales started or continued\":\"Account sales started or continued\",\"Actions\":\"Actions\",\"Activate user\":\"Activate user\",\"Activation code\":\"Activation code\",\"Add\":\"Add\",\"Add a new stocktake\":\"Add a new stocktake\",\"Add a product to your sale\":\"Add a product to your sale\",\"Add a sales representative to the sale\":\"Add a sales representative to the sale\",\"Add a stock transfer\":\"Add a stock transfer\",\"Add cash\":\"Add cash\",\"Add customer to the sale\":\"Add customer to the sale\",\"Add new customer\":\"Add new customer\",\"Add new product\":\"Add new product\",\"Add new user\":\"Add new user\",\"Add order\":\"Add order\",\"Add the sale representative to the sale order\":\"Add the sale representative to the sale order\",\"Address\":\"Address\",\"Address #. 'Address line' is required.\":\"Address #. 'Address line' is required.\",\"Address #. 'City' is required.\":\"Address #. 'City' is required.\",\"Address line 1\":\"Address line 1\",\"Address line 2\":\"Address line 2\",\"Addresses\":\"Addresses\",\"All\":\"All\",\"All application data has been successfully updated!\":\"All application data has been successfully updated!\",\"All barcodes were recognised and added to your document.\":\"All barcodes were recognized and added to your document.\",\"All low on stock\":\"All low on stock\",\"All outlets\":\"All outlets\",\"All registers\":\"All registers\",\"All roles\":\"All roles\",\"All sales\":\"All sales\",\"All statuses\":\"All statuses\",\"Allow stock adjustment\":\"Allow stock adjustment\",\"Already picked\":\"Already picked\",\"Always show quantity\":\"Always show quantity\",\"Amount\":\"Amount\",\"Amount to pay {{sum}} is larger than gift card {{code}} balance {{bal}}. The entire gift card balance will be used.\":\"Amount to pay {{sum}} is larger than gift card {{code}} balance {{bal}}. The entire gift card balance will be used.\",\"An error occurred during payment processing.\":\"An error occurred during payment processing.\",\"Applied coupon\":\"Applied coupon\",\"Apply\":\"Apply\",\"Apply coupon\":\"Apply coupon\",\"Apply filters\":\"Apply filters\",\"Apply surcharge\":\"Apply surcharge\",\"Are you sure that you want to delete this attachment?\":\"Are you sure that you want to delete this attachment?\",\"Are you sure you want to close this register?\":\"Are you sure you want to close this register?\",\"Are you sure you want to delete\":\"Are you sure you want to delete\",\"Are you sure you want to proceed with the sale?\":\"Are you sure you want to proceed with the sale?\",\"Are you sure you want to skip card machine processing?\":\"Are you sure you want to skip card machine processing?\",\"Attached by\":\"Attached by\",\"Auto-discover printer\":\"Auto-discover printer\",\"Available\":\"Available\",\"Available \\n                                            <span ng-if=\\\"currentOrder.fromLocationName\\\" translate>at <br> \\n                                            {{currentOrder.fromLocationName}}</span>\":\"Available \\n                                            <span ng-if=\\\"currentOrder.fromLocationName\\\" translate>at <br> \\n                                            {{currentOrder.fromLocationName}}</span>\",\"Available Paymentsense terminals:\":\"Available Paymentsense terminals:\",\"Available at\":\"Available at\",\"Available at {{currentOrder.fromLocationName}}\":\"Available at {{currentOrder.fromLocationName}}\",\"Available:\":\"Available:\",\"Average cost:\":\"Average cost:\",\"BIN\":\"BIN\",\"Back\":\"Back\",\"Back to product list\":\"Back to product list\",\"Back to sale\":\"Back to sale\",\"Balance\":\"Balance\",\"Balance:\":\"Balance:\",\"Barcode\":\"Barcode\",\"Barcode detected.\":\"Barcode detected.\",\"Barcode:\":\"Barcode:\",\"Basket size\":\"Basket size\",\"Basket value\":\"Basket value\",\"Batch\":\"Batch\",\"Batch/SN\":\"Batch/SN\",\"Batch/serial no.\":\"Batch/serial no.\",\"Batch/serial number not found.\":\"Batch/serial number not found.\",\"Billing address:\":\"Billing address:\",\"Bin\":\"Bin\",\"Brand\":\"Brand\",\"Brands\":\"Brands\",\"Breakdown of cash movement\":\"Breakdown of cash movement\",\"COGS\":\"COGS\",\"Can't open cash drawer automatically:\":\"Can't open cash drawer automatically:\",\"Cancel\":\"Cancel\",\"Cancel partial payments\":\"Cancel partial payments\",\"Cancel stocktake\":\"Cancel stocktake\",\"Cancelled\":\"Canceled\",\"Cancelled on\":\"Canceled on\",\"Cancelling transaction...\":\"Canceling transaction...\",\"Cannot log in to Google when offline.\":\"Cannot log in to Google when offline.\",\"Cannot log in when offline.\":\"Cannot log in when offline.\",\"Cannot sell gift card while offline\":\"Cannot sell gift card while offline\",\"Card machine end of day report data\":\"Card machine end of day report data\",\"Card payment system\":\"Card payment system\",\"Cash\":\"Cash\",\"Cash in\":\"Cash in\",\"Cash management\":\"Cash management\",\"Cash movements\":\"Cash movements\",\"Cash out\":\"Cash out\",\"Cash payment amount should be between 0 and\":\"Cash payment amount should be between 0 and\",\"Cash rounding\":\"Cash rounding\",\"Cash surcharge ({{currency_symbol}}&nbsp;{{paymentValidation.cashSurchargeAmount | number:2}} max)\":\"Cash surcharge ({{currency_symbol}}&nbsp;{{paymentValidation.cashSurchargeAmount | number:2}} max)\",\"Cash to refund\":\"Cash to refund\",\"Categories\":\"Categories\",\"Category\":\"Category\",\"Cc\":\"Cc\",\"Change\":\"Change\",\"Change\\n                                outlet|register\":\"Change\\n                                outlet|register\",\"Change host IP address\":\"Change host IP address\",\"Change language\":\"Change language\",\"Change outlet|register\":\"Change outlet|register\",\"Change password\":\"Change password\",\"Choose a different payment type\":\"Choose a different payment type\",\"Choose a document template\":\"Choose a document template\",\"Cin7 Core POS name is required.\":\"Cin7 Core POS name is required.\",\"City / suburb\":\"City / suburb\",\"Clear\":\"Clear\",\"Clear ({{countOffline}})\":\"Clear ({{countOffline}})\",\"Clear sale\":\"Clear sale\",\"Click & collect\":\"Click & collect\",\"Close\":\"Close\",\"Close Registry Details\":\"Close Registry Details\",\"Close date\":\"Close date\",\"Close day\":\"Close day\",\"Close menu\":\"Close menu\",\"Close register\":\"Close register\",\"Close register day\":\"Close register day\",\"Closed\":\"Closed\",\"Clover reader\":\"Clover reader\",\"Collect\":\"Collect\",\"Comment for product\":\"Comment for product\",\"Comments\":\"Comments\",\"Complete\":\"Complete\",\"Complete\\n                                    <!-- <img class=\\\"buttonImageOffset\\\" src=\\\"PosImages/complete-btn.png\\\" />\\n                                    <span class=\\\"completeButton-text\\\" translate>Complete</span> -->\":\"Complete\\n                                    <!-- <img class=\\\"buttonImageOffset\\\" src=\\\"PosImages/complete-btn.png\\\" />\\n                                    <span class=\\\"completeButton-text\\\" translate>Complete</span> -->\",\"Complete stocktake\":\"Complete stocktake\",\"Complete!\":\"Complete!\",\"Completed\":\"Completed\",\"Confirm\":\"Confirm\",\"Confirm cancellation of editing\":\"Confirm cancellation of editing\",\"Confirm password doesn't match\":\"Confirm password doesn't match\",\"Confirm password is required.\":\"Confirm password is required.\",\"Confirmation\":\"Confirmation\",\"Connect\":\"Connect\",\"Connect to a different payment system\":\"Connect to a different payment system\",\"Connect to the network and try again.\":\"Connect to the network and try again.\",\"Connect using Bluetooth: BT:00:11:22:33:FF:EE\":\"Connect using Bluetooth: BT:00:11:22:33:FF:EE\",\"Connect using IP or MAC address: TCP:192.168.0.100\":\"Connect using IP or MAC address: TCP:192.168.0.100\",\"Connect with a different printer\":\"Connect with a different printer\",\"Connection problems.\":\"Connection problems.\",\"Connection refused.\":\"Connection refused.\",\"Connection to the server has been interrupted while processing the refund. It could have been successfully processed. Please check sales history to confirm successful processing of this refund.\":\"Connection to the server has been interrupted while processing the refund. It could have been successfully processed. Please check sales history to confirm successful processing of this refund.\",\"Contact\":\"Contact\",\"Contact #. 'Name' is required.\":\"Contact #. 'Name' is required.\",\"Contact #. Please enter a valid email.\":\"Contact #. Please enter a valid email.\",\"Contact name\":\"Contact name\",\"Contacts\":\"Contacts\",\"Continue\":\"Continue\",\"Continue exchange\":\"Continue exchange\",\"Continue return\":\"Continue return\",\"Copies\":\"Copies\",\"Copy\":\"Copy\",\"Costing method\":\"Costing method\",\"Count:\":\"Count:\",\"Counted\":\"Counted\",\"Country\":\"Country\",\"Coupon code\":\"Coupon code\",\"Create a new customer\":\"Create a new customer\",\"Create an account\":\"Create an account\",\"Create exchange without sale\":\"Create exchange without sale\",\"Create refund without sale\":\"Create refund without sale\",\"Credit card\":\"Credit card\",\"Credit card payment amount should be between 0 and\":\"Credit card payment amount should be between 0 and\",\"Credit card surcharge:\":\"Credit card surcharge:\",\"Credit card {{idx}} payment amount should be between 0 and\":\"Credit card {{idx}} payment amount should be between 0 and\",\"Credit limit exceeded!\":\"Credit limit exceeded!\",\"Credit limit:\":\"Credit limit:\",\"Custom sale\":\"Custom sale\",\"Customer\":\"Customer\",\"Customer count\":\"Customer count\",\"Customer display setup\":\"Customer display setup\",\"Customer email is empty. Can not get customer information from LoyaltyLion.\":\"Customer email is empty. Can not get customer information from LoyaltyLion.\",\"Customer info\":\"Customer info\",\"Customer is on credit hold!\":\"Customer is on credit hold!\",\"Customer name\":\"Customer name\",\"Customer outstanding balance including this order is\":\"Customer outstanding balance including this order is\",\"Customer reference #:\":\"Customer reference #:\",\"Customer:\":\"Customer:\",\"Customers\":\"Customers\",\"Customers list\":\"Customers list\",\"Customise columns\":\"Customize columns\",\"Cut receipts\":\"Cut receipts\",\"Dashboard\":\"Dashboard\",\"Data created\":\"Data created\",\"Date\":\"Date\",\"Day\":\"Day\",\"Day closure date\":\"Day closure date\",\"Deactivate user\":\"Deactivate user\",\"Default billing address\":\"Default billing address\",\"Default shipping address\":\"Default shipping address\",\"Delete\":\"Delete\",\"Delete stocktake\":\"Delete stocktake\",\"Delete user\":\"Delete user\",\"Delivered\":\"Delivered\",\"Deliveries\":\"Deliveries\",\"Delivery\":\"Delivery\",\"Delivery #\":\"Delivery #\",\"Delivery calendar\":\"Delivery calendar\",\"Delivery should contain at least one item with a date and time filled in before saving.\":\"Delivery should contain at least one item with a date and time filled in before saving.\",\"Delivery task\":\"Delivery task\",\"Delivery task was cancelled.\":\"Delivery task was canceled.\",\"Delivery task was completed.\":\"Delivery task was completed.\",\"Delivery task will be cancelled. Would you like to continue?\":\"Delivery task will be canceled. Would you like to continue?\",\"Delivery task will be completed. Would you like to continue?\":\"Delivery task will be completed. Would you like to continue?\",\"Delivery tasks\":\"Delivery tasks\",\"Delivery was successfully saved.\":\"Delivery was successfully saved.\",\"Delivery without items will be removed. Would you like to continue?\":\"Delivery without items will be removed. Would you like to continue?\",\"Description\":\"Description\",\"Difference\":\"Difference\",\"Discard\":\"Discard\",\"Discount\":\"Discount\",\"Discount %\":\"Discount %\",\"Discount percent\":\"Discount percent\",\"Discount value\":\"Discount value\",\"Discount:\":\"Discount:\",\"Discounts\":\"Discounts\",\"Dismiss\":\"Dismiss\",\"Do not show this warning again\":\"Do not show this warning again\",\"Do you want to add payments to this sale?\":\"Do you want to add payments to this sale?\",\"Do you want to enable biometric sign-in for user ?\":\"Do you want to enable biometric sign-in for user ?\",\"Do you want to remove invalid payment methods?\":\"Do you want to remove invalid payment methods?\",\"Done\":\"Done\",\"Download\":\"Download\",\"Draft\":\"Draft\",\"Due\":\"Due\",\"Due date:\":\"Due date:\",\"Due:\":\"Due:\",\"Edit customer\":\"Edit customer\",\"Edit or delete assigned taxes for individual products\":\"Edit or delete assigned taxes for individual products\",\"Edit or delete assigned taxes for multiple products grouped by tax rules\":\"Edit or delete assigned taxes for multiple products grouped by tax rules\",\"Edit purchase order\":\"Edit purchase order\",\"Edit stock transfer\":\"Edit stock transfer\",\"Edit stock transfer order\":\"Edit stock transfer order\",\"Edit taxes\":\"Edit taxes\",\"Effective date\":\"Effective date\",\"Email\":\"Email\",\"Email address / login\":\"Email address / login\",\"Email address / username\":\"Email address / username\",\"Email is required.\":\"Email is required.\",\"Email purchase order\":\"Email purchase order\",\"Email quote\":\"Email quote\",\"Email receipt\":\"Email receipt\",\"Email report\":\"Email report\",\"Email subject\":\"Email subject\",\"Email:\":\"Email:\",\"Enable automatic opening\":\"Enable automatic opening\",\"Enable camera scanner\":\"Enable camera scanner\",\"Enable loyalty\":\"Enable loyalty\",\"Enable software keyboard\":\"Enable software keyboard\",\"Enough\":\"Enough\",\"Enter no less than {{cnt}} symbols to start searching.\":\"Enter no less than {{cnt}} symbols to start searching.\",\"Enter serial/batch #\":\"Enter serial/batch #\",\"Enter your Cin7 Core POS PIN\":\"Enter your Cin7 Core POS PIN\",\"Enter your new Cin7 Core POS PIN\":\"Enter your new Cin7 Core POS PIN\",\"Entered amount is larger than remaining amount.<br/>Please enter a smaller value.\":\"Entered amount is larger than remaining amount.<br/>Please enter a smaller value.\",\"Error\":\"Error\",\"Error processing the card:\":\"Error processing the card:\",\"Error sending email.\":\"Error sending email.\",\"Exchange\":\"Exchange\",\"Exchanged\":\"Exchanged\",\"Expected\":\"Expected\",\"Expense account\":\"Expense account\",\"Expiration date\":\"Expiration date\",\"Expiry date\":\"Expiry date\",\"Failed to complete fulfillment, please try again later or contact support.\":\"Failed to complete fulfillment, please try again later or contact support.\",\"Failed to convert sale, please try again later or contact support.\":\"Failed to convert sale, please try again later or contact support.\",\"Failed to load sale quote template.\":\"Failed to load sale quote template.\",\"Failed to load sale, please try again later or contact support.\":\"Failed to load sale, please try again later or contact support.\",\"Failed to perform auto fulfillment, please try again later or contact support.\":\"Failed to perform auto fulfillment, please try again later or contact support.\",\"Failed to remove attachment:\":\"Failed to remove attachment:\",\"File\":\"File\",\"Filters\":\"Filters\",\"Final product price is zero, so product count is set to 1.\":\"Final product price is zero, so product count is set to 1.\",\"Finish\":\"Finish\",\"Fixed\":\"Fixed\",\"Forgot password?\":\"Forgot password?\",\"From\":\"From\",\"From supplier\":\"From supplier\",\"From warehouse\":\"From warehouse\",\"Fulfill\":\"Fulfill\",\"Fulfill all\":\"Fulfill all\",\"Fulfillment\":\"Fulfillment\",\"Full calendar\":\"Full calendar\",\"Gift Card\":\"Gift Card\",\"Gift card\":\"Gift card\",\"Gift card #\":\"Gift card #\",\"Gift card cannot be refunded.\":\"Gift card cannot be refunded.\",\"Gift card code\":\"Gift card code\",\"Gift card history\":\"Gift card history\",\"Gift card payment is available in online mode only.\":\"Gift card payment is available in online mode only.\",\"Gift card price\":\"Gift card price\",\"Gift card support is disabled.\":\"Gift card support is disabled.\",\"Gift card with this code already exists.\":\"Gift card with this code already exists.\",\"Gift card {{code}} is being sold in this sale and can't be used for payment.\":\"Gift card {{code}} is being sold in this sale and can't be used for payment.\",\"Gift card:\":\"Gift card:\",\"Gift cards\":\"Gift cards\",\"Go back to login\":\"Go back to login\",\"Go to settings\":\"Go to settings\",\"Goods to pick\":\"Goods to pick\",\"Gross profit\":\"Gross profit\",\"Group register\":\"Group register\",\"Group variants\":\"Group variants\",\"Hide password\":\"Hide password\",\"Home\":\"Home\",\"If you really want to close this day, please, press 'Continue'\":\"If you really want to close this day, please, press 'Continue'\",\"Image\":\"Image\",\"Import products in bulk\":\"Import products in bulk\",\"In progress\":\"In progress\",\"In the web version, the standard browser printing form is used.\":\"In the web version, the standard browser printing form is used.\",\"In transit\":\"In transit\",\"Including tax\":\"Including tax\",\"Initiating {{type}}...\":\"Initiating {{type}}...\",\"Insufficient stock level for this batch.\":\"Insufficient stock level for this batch.\",\"Insufficient stock quantity detected in the following sale item(s):\":\"Insufficient stock quantity detected in the following sale item(s):\",\"Invalid number of copies was specified!<br/> Please, enter the number of copies between 1 and 10000.\":\"Invalid number of copies was specified!<br/> Please, enter the number of copies between 1 and 10000.\",\"Inventory\":\"Inventory\",\"Invoice #\":\"Invoice #\",\"Invoice #:\":\"Invoice #:\",\"Invoice date:\":\"Invoice date:\",\"Invoice number\":\"Invoice number\",\"Issue change of\":\"Issue change of\",\"It seems like the Cin7 Core POS configuration you are currently logged in is incomplete. To avoid posting incorrect sale transactions, your session will be terminated. Please contact your POS administrator/manager to resolve the issue.\":\"It seems like the Cin7 Core POS configuration you are currently logged in is incomplete. To avoid posting incorrect sale transactions, your session will be terminated. Please contact your POS administrator/manager to resolve the issue.\",\"It seems like this outlet/register combination is not available any more. Please select the outlet/register again.\":\"It seems like this outlet/register combination is not available any more. Please select the outlet/register again.\",\"Items have been successfully exchanged. Stock adjustment for returned items has been completed at {{outletName}}.\":\"Items have been successfully exchanged. Stock adjustment for returned items has been completed at {{outletName}}.\",\"JSON has been copied to clipboard.\":\"JSON has been copied to clipboard.\",\"Label printer\":\"Label printer\",\"Label printer found.\":\"Label printer found.\",\"Label printer name\":\"Label printer name\",\"Labels\":\"Labels\",\"Last 30 days\":\"Last 30 days\",\"Last 7 days\":\"Last 7 days\",\"Last 90 days\":\"Last 90 days\",\"Last financial year\":\"Last financial year\",\"Last month\":\"Last month\",\"Last quarter\":\"Last quarter\",\"Layby\":\"Layby\",\"Layby closed\":\"Layby closed\",\"Layby payments\":\"Layby payments\",\"Laybys started\":\"Laybys started\",\"Linking with Cin7 Core POS\":\"Linking with Cin7 Core POS\",\"Linkly payment system\":\"Linkly payment system\",\"Linkly reader\":\"Linkly reader\",\"Loading the updated POS/outlet configuration settings. Please wait...\":\"Loading the updated POS/outlet configuration settings. Please wait...\",\"Location\":\"Location\",\"Lock products\":\"Lock products\",\"Log out\":\"Log out\",\"Login\":\"Login\",\"Loyalty\":\"Loyalty\",\"Loyalty\\n                                                            points\":\"Loyalty\\n                                                            points\",\"Loyalty point amount should be between 0 and\":\"Loyalty point amount should be between 0 and\",\"Loyalty points\":\"Loyalty points\",\"Loyalty points amount should be between 0 and\":\"Loyalty points amount should be between 0 and\",\"Loyalty points earned\":\"Loyalty points earned\",\"Loyalty points:\":\"Loyalty points:\",\"LoyaltyLion points:\":\"LoyaltyLion points:\",\"Main register\":\"Main register\",\"Make partial payment\":\"Make partial payment\",\"Marketing consent\":\"Marketing consent\",\"Markup\":\"Markup\",\"Maximum name length is 256 characters.\":\"Maximum name length is 256 characters.\",\"Maximum reason field length is 256 characters.\":\"Maximum reason field length is 256 characters.\",\"Message\":\"Message\",\"Mobile phone\":\"Mobile phone\",\"Model name\":\"Model name\",\"Modify product\":\"Modify product\",\"Modify stocktake\":\"Modify stocktake\",\"Month\":\"Month\",\"N/A\":\"N/A\",\"Name\":\"Name\",\"Name:\":\"Name:\",\"New\":\"New\",\"New purchase order\":\"New purchase order\",\"New sales\":\"New sales\",\"New stock transfer\":\"New stock transfer\",\"New stock transfer order\":\"New stock transfer order\",\"New to Cin7 Core POS?\":\"New to Cin7 Core POS?\",\"Next\":\"Next\",\"Next 30 days\":\"Next 30 days\",\"Next 7 days\":\"Next 7 days\",\"No\":\"No\",\"No Clover printer is connected.\":\"No Clover printer is connected.\",\"No card payment provider was found. Please reconfigure a payment provider in the POS application setup/ payment setup menu.\":\"No card payment provider was found. Please reconfigure a payment provider in the POS application setup/ payment setup menu.\",\"No customers found.\":\"No customers found.\",\"No label printer was found. Please try to specify the label printer name manually.\":\"No label printer was found. Please try to specify the label printer name manually.\",\"No printer was found. Please try to specify the printer name manually.\":\"No printer was found. Please try to specify the printer name manually.\",\"No products found.\":\"No products found.\",\"No reason\":\"No reason\",\"No results found\":\"No results found\",\"No shipping address available\":\"No shipping address available\",\"No surcharge\":\"No surcharge\",\"No-receipt exchange\":\"No-receipt exchange\",\"No-receipt refund\":\"No-receipt refund\",\"Non-POS\":\"Non-POS\",\"Not enough\":\"Not enough\",\"Not integrated\":\"Not integrated\",\"Note\":\"Note\",\"Notes\":\"Notes\",\"OK\":\"OK\",\"Offline mode\":\"Offline mode\",\"Offline sales\":\"Offline sales\",\"Ok\":\"Ok\",\"On account\":\"On account\",\"On account closed\":\"On account closed\",\"On hand\":\"On hand\",\"On hand:\":\"On hand:\",\"On order\":\"On order\",\"On order <span ng-if=\\\"currentOrder.toLocationName\\\" translate>at <br> {{currentOrder.toLocationName}}</span>\":\"On order <span ng-if=\\\"currentOrder.toLocationName\\\" translate>at <br> {{currentOrder.toLocationName}}</span>\",\"On order at\":\"On order at\",\"On order at {{currentOrder.toLocationName}}:\":\"On order at {{currentOrder.toLocationName}}:\",\"Once deactivated, users won't be able to use the POS any more until activated again.\":\"Once deactivated, users won't be able to use the POS any more until activated again.\",\"Only\":\"Only\",\"Only available\":\"Only available\",\"Only first\":\"Only first\",\"Only the first 10 customers will be shown. You can also add a new customer here.\":\"Only the first 10 customers will be shown. You can also add a new customer here.\",\"Only the first {{cnt}} products are shown.\":\"Only the first {{cnt}} products are shown.\",\"Oops!\":\"Oops!\",\"Open / close\":\"Open / close\",\"Open WMS\":\"Open WMS\",\"Open cash drawer\":\"Open cash drawer\",\"Open customer display\":\"Open customer display\",\"Open register\":\"Open register\",\"Opened\":\"Opened\",\"Opening balance\":\"Opening balance\",\"Opening float\":\"Opening float\",\"Opt in\":\"Opt in\",\"Opt out\":\"Opt out\",\"Options\":\"Options\",\"Order #\":\"Order #\",\"Order amount\":\"Order amount\",\"Order info:\":\"Order info:\",\"Order number\":\"Order number\",\"Order: #{{currentSale.OrderNumber}}\":\"Order: #{{currentSale.OrderNumber}}\",\"Ordered quantity\":\"Ordered quantity\",\"Ordering\":\"Ordering\",\"Ordering for product family {{familyName}}\":\"Ordering for product family {{familyName}}\",\"Outlet\":\"Outlet\",\"Outlet / register\":\"Outlet / register\",\"Outlet SKU should have {{cnt}} digits. Please enter a valid SKU.\":\"Outlet SKU should have {{cnt}} digits. Please enter a valid SKU.\",\"Outlet level SKU\":\"Outlet level SKU\",\"Outlet name\":\"Outlet name\",\"Overall totals\":\"Overall totals\",\"Overview dashboard\":\"Overview dashboard\",\"PIN SETUP\":\"PIN SETUP\",\"PIN code is incorrect.\":\"PIN code is incorrect.\",\"POS register is closed\":\"POS register is closed\",\"POS sales\":\"POS sales\",\"Paid\":\"Paid\",\"Paid.\":\"Paid.\",\"Pair code\":\"Pair code\",\"Pair with terminal\":\"Pair with terminal\",\"Paper roll is empty. Please replace the paper.\":\"Paper roll is empty. Please replace the paper.\",\"Paper width\":\"Paper width\",\"Park\":\"Park\",\"Parked sales\":\"Parked sales\",\"Partial payment will be automatically allocated to the store credit account. Please use store credit to complete the exchange transaction.\":\"Partial payment will be automatically allocated to the store credit account. Please use store credit to complete the exchange transaction.\",\"Password is required.\":\"Password is required.\",\"Password recovery\":\"Password recovery\",\"Password was successfully changed.\":\"Password was successfully changed.\",\"Paste code\":\"Paste code\",\"Pay\":\"Pay\",\"Pay %0 with loyalty\":\"Pay %0 with loyalty\",\"Pay %0 with store credits\":\"Pay %0 with store credits\",\"Pay with Amex\":\"Pay with Amex\",\"Pay with a gift card\":\"Pay with a gift card\",\"Pay {{currentSale.customer.LoyaltyPoints |currency}} with loyalty\":\"Pay {{currentSale.customer.LoyaltyPoints |currency}} with loyalty\",\"Pay {{currentSale.customer.StoreCredits |currency}} with store credits\":\"Pay {{currentSale.customer.StoreCredits |currency}} with store credits\",\"Payable amount\":\"Payable amount\",\"Payment\\n                                    Type Summary\":\"Payment\\n                                    Type Summary\",\"Payment (cash rounding)\":\"Payment (cash rounding)\",\"Payment Type\":\"Payment Type\",\"Payment Type Summary\":\"Payment Type Summary\",\"Payment Type Summary:&nbsp;\":\"Payment Type Summary:&nbsp;\",\"Payment is required.\":\"Payment is required.\",\"Payment setup\":\"Payment setup\",\"Payment system setup\":\"Payment system setup\",\"Payment term:\":\"Payment term:\",\"Payment type\":\"Payment type\",\"Payments\":\"Payments\",\"Paymentsense reader\":\"Paymentsense reader\",\"Pending\":\"Pending\",\"Percent\":\"Percent\",\"Petty cash in\":\"Petty cash in\",\"Petty cash out\":\"Petty cash out\",\"Phone\":\"Phone\",\"Phone:\":\"Phone:\",\"Please add a customer for this exchange.\":\"Please add a customer for this exchange.\",\"Please add a customer for this refund.\":\"Please add a customer for this refund.\",\"Please configure Windcave station in the register settings\":\"Please configure Windcave station in the register settings\",\"Please enter POS name first\":\"Please enter POS name first\",\"Please fix the discount to complete the sale.\":\"Please fix the discount to complete the sale.\",\"Please install our Warehouse Management System QA application to process shipment from the store.\":\"Please install our Warehouse Management System QA application to process shipment from the store.\",\"Please install our Warehouse Management System application to process shipment from the store.\":\"Please install our Warehouse Management System application to process shipment from the store.\",\"Please log in using user/password first to enable biometric login\":\"Please log in using user/password first to enable biometric login\",\"Please note that the total discount has been updated.\":\"Please note that the total discount has been updated.\",\"Please perform the 'Authorise POS' function on your terminal.\":\"Please perform the 'Authorize POS' function on your terminal.\",\"Please scan barcode\":\"Please scan barcode\",\"Please select a label printer from the list below\":\"Please select a label printer from the list below\",\"Please select a printer from the list below\":\"Please select a printer from the list below\",\"Please specify the pair code.\":\"Please specify the pair code.\",\"Please, consider using Cin7 Core POS mobile app from the App Store.\":\"Please, consider using Cin7 Core POS mobile app from the App Store.\",\"Please, pick at least one item to complete fulfillment.\":\"Please, pick at least one item to complete fulfillment.\",\"Please, select the day closure date and press 'Continue'.\":\"Please, select the day closure date and press 'Continue'.\",\"Please, use Chrome or another latest browser on your platform.\":\"Please, use Chrome or another latest browser on your platform.\",\"Postcode\":\"Postcode\",\"Postcode / ZIP\":\"Postcode / ZIP\",\"Preferred time\":\"Preferred time\",\"Press the 'Cancel' button to interrupt the request.\":\"Press the 'Cancel' button to interrupt the request.\",\"Price\":\"Price\",\"Print\":\"Print\",\"Print EFTPOS receipts on the Tyro terminal\":\"Print EFTPOS receipts on the Tyro terminal\",\"Print all receipts\":\"Print all receipts\",\"Print complete!\":\"Print complete!\",\"Print labels\":\"Print labels\",\"Print merchant receipt copy\":\"Print merchant receipt copy\",\"Print receipt\":\"Print receipt\",\"Print receipt through Cin7 Core\":\"Print receipt through Cin7 Core\",\"Print receipts on Linkly PIN pad\":\"Print receipts on Linkly PIN pad\",\"Printer\":\"Printer\",\"Printer cover is open.\":\"Printer cover is open.\",\"Printer is found.\":\"Printer is found.\",\"Printer is offline.\":\"Printer is offline.\",\"Printer manufacturer\":\"Printer manufacturer\",\"Printer model\":\"Printer model\",\"Printer name\":\"Printer name\",\"Printer name is empty.\":\"Printer name is empty.\",\"Printer name/ IP address\":\"Printer name/ IP address\",\"Printer resolution is invalid.\":\"Printer resolution is invalid.\",\"Printer settings have been saved.\":\"Printer settings have been saved.\",\"Printer setup\":\"Printer setup\",\"Processed\":\"Processed\",\"Product\":\"Product\",\"Product\\n                                    Performance\":\"Product\\n                                    Performance\",\"Product / SKU\":\"Product / SKU\",\"Product Performance\":\"Product Performance\",\"Product discount\":\"Product discount\",\"Product has insufficient stock level.\":\"Product has insufficient stock level.\",\"Product is not found in this sale.\":\"Product is not found in this sale.\",\"Product management\":\"Product management\",\"Product name\":\"Product name\",\"Product name / SKU\":\"Product name / SKU\",\"Product not found. Please scan another barcode.\":\"Product not found. Please scan another barcode.\",\"Product not found. Please, scan another barcode.\":\"Product not found. Please, scan another barcode.\",\"Product with this serial number has been already added to pick.\":\"Product with this serial number has been already added to pick.\",\"Product {{name}} quantity was updated.\":\"Product {{name}} quantity was updated.\",\"Product {{name}} was added.\":\"Product {{name}} was added.\",\"Products\":\"Products\",\"Purchase order\":\"Purchase order\",\"Qty:\":\"Qty:\",\"Quantity\":\"Quantity\",\"Quantity for serial numbered products can't be changed. Would you like to delete this product from checkout?\":\"Quantity for serial numbered products can't be changed. Would you like to delete this product from checkout?\",\"Quantity on hand\":\"Quantity on hand\",\"Query period should not exceed 31 days.\":\"Query period should not exceed 31 days.\",\"Quick Key\":\"Quick Key\",\"Quick refund\":\"Quick refund\",\"Quick refund customer\":\"Quick refund customer\",\"Quick sale\":\"Quick sale\",\"REFUNDED\":\"REFUNDED\",\"Rate\":\"Rate\",\"Reason\":\"Reason\",\"Receipt\":\"Receipt\",\"Receipt #\":\"Receipt #\",\"Receipt # / customer\":\"Receipt # / customer\",\"Receipt number\":\"Receipt number\",\"Receipt sent successfully.\":\"Receipt sent successfully.\",\"Receipt template not found.\":\"Receipt template not found.\",\"Received\":\"Received\",\"Received date\":\"Received date\",\"Received quantity\":\"Received quantity\",\"Recover\":\"Recover\",\"Refresh\":\"Refresh\",\"Refresh page\":\"Refresh page\",\"Refund\":\"Refund\",\"Refund amount cannot be more than\":\"Refund amount cannot be more than\",\"Refund complete!\":\"Refund complete!\",\"Refund completed.\":\"Refund completed.\",\"Refund is required.\":\"Refund is required.\",\"Refund is successfully\":\"Refund is successfully\",\"Refund successful\":\"Refund successful\",\"Refunded\":\"Refunded\",\"Refunded.\":\"Refunded.\",\"Register\":\"Register\",\"Register\\n                                    Closure\":\"Register\\n                                    Closure\",\"Register Closure\":\"Register Closure\",\"Register closing is available online only.\":\"Register closing is available online only.\",\"Register name\":\"Register name\",\"Reload data\":\"Reload data\",\"Remaining to refund amount must be equal to zero.\":\"Remaining to refund amount must be equal to zero.\",\"Remaining to refund amount must be equal to zero. Please fill in the cash or store credit refund amount.\":\"Remaining to refund amount must be equal to zero. Please fill in the cash or store credit refund amount.\",\"Remaining to refund without surcharges:\":\"Remaining to refund without surcharges:\",\"Remaining to refund:\":\"Remaining to refund:\",\"Remove\":\"Remove\",\"Remove cash\":\"Remove cash\",\"Remove invalid payment methods\":\"Remove invalid payment methods\",\"Remove pairing\":\"Remove pairing\",\"Reorder\":\"Reorder\",\"Reorder products\":\"Reorder products\",\"Reports\":\"Reports\",\"Request to the server was cancelled.\":\"Request to the server was canceled.\",\"Required attribute 'PosApplicationName' cannot be empty.\":\"Required attribute 'PosApplicationName' cannot be empty.\",\"Required by\":\"Required by\",\"Reset\":\"Reset\",\"Return\":\"Return\",\"Return count\":\"Return count\",\"Returned\":\"Returned\",\"Returns\":\"Returns\",\"Revenue\":\"Revenue\",\"Role\":\"Role\",\"Rounded cash to refund\":\"Rounded cash to refund\",\"Rounding\":\"Rounding\",\"Rounding:\":\"Rounding:\",\"SCANNING\":\"SCANNING\",\"SET TO ALL\":\"SET TO ALL\",\"SKU\":\"SKU\",\"SKU:\":\"SKU:\",\"Sale\":\"Sale\",\"Sale cannot be modified.\":\"Sale cannot be modified.\",\"Sale count\":\"Sale count\",\"Sale details\":\"Sale details\",\"Sale gift card\":\"Sale gift card\",\"Sale note\":\"Sale note\",\"Sale order will be deleted together with its data from all internal reports. Are you sure that you want to proceed?\":\"Sale order will be deleted together with its data from all internal reports. Are you sure that you want to proceed?\",\"Sale order {{orderNumber}} has been voided.\":\"Sale order {{orderNumber}} has been voided.\",\"Sale quote\":\"Sale quote\",\"Sale quote sent successfully.\":\"Sale quote sent successfully.\",\"Sale rep\":\"Sale rep\",\"Sale summary\":\"Sale summary\",\"Sale total\":\"Sale total\",\"Sale would be deleted from error history. Would you like to continue?\":\"Sale would be deleted from error history. Would you like to continue?\",\"Sales\":\"Sales\",\"Sales Summary\":\"Sales Summary\",\"Sales history\":\"Sales history\",\"Sales with loyalty or store credit payments or returns cannot be processed without connection to the server.\":\"Sales with loyalty or store credit payments or returns cannot be processed without connection to the server.\",\"Save\":\"Save\",\"Save as draft\":\"Save as draft\",\"Scan again\":\"Scan again\",\"Scan barcode\\n                                    <!-- <img class=\\\"buttonImageOffset\\\" src=\\\"PosImages/scan.png\\\" />\\n                                    <span class=\\\"scanBarcodeButton-text\\\" translate>Scan barcode</span> -->\":\"Scan barcode\\n                                    <!-- <img class=\\\"buttonImageOffset\\\" src=\\\"PosImages/scan.png\\\" />\\n                                    <span class=\\\"scanBarcodeButton-text\\\" translate>Scan barcode</span> -->\",\"Scan serial number\":\"Scan serial number\",\"Scanner setup\":\"Scanner setup\",\"Schedule delivery\":\"Schedule delivery\",\"Scheduled deliveries\":\"Scheduled deliveries\",\"Search\":\"Search\",\"Search results for\":\"Search results for\",\"Search results for barcode\":\"Search results for barcode\",\"Select a customer\":\"Select a customer\",\"Select a product to order\":\"Select a product to order\",\"Select a shipping address to add to the sale\":\"Select a shipping address to add to the sale\",\"Select address\":\"Select address\",\"Select at least one product.\":\"Select at least one product.\",\"Select contact\":\"Select contact\",\"Select costing method\":\"Select costing method\",\"Select country\":\"Select country\",\"Select default location\":\"Select default location\",\"Select expense account\":\"Select expense account\",\"Select items for return\":\"Select items for return\",\"Select language\":\"Select language\",\"Select layby date\":\"Select layby date\",\"Select location\":\"Select location\",\"Select outlet\":\"Select outlet\",\"Select paper type\":\"Select paper type\",\"Select paper width\":\"Select paper width\",\"Select payment system\":\"Select payment system\",\"Select printer manufacturer\":\"Select printer manufacturer\",\"Select printer model\":\"Select printer model\",\"Select product category\":\"Select product category\",\"Select product type\":\"Select product type\",\"Select reason\":\"Select reason\",\"Select register\":\"Select register\",\"Select role\":\"Select role\",\"Select terminal to pair\":\"Select terminal to pair\",\"Selected invoice cannot be fulfilled.\":\"Selected invoice cannot be fulfilled.\",\"Selection done\":\"Selection done\",\"Sell\":\"Sell\",\"Sell\\n                            offline\":\"Sell\\n                            offline\",\"Send email\":\"Send email\",\"Session\":\"Session\",\"Set\":\"Set\",\"Set PIN code\":\"Set PIN code\",\"Set the margins value to 'none' in the next print dialogue for correct printing.\":\"Set the margins value to 'none' in the next print dialog for correct printing.\",\"Set up your POS system\":\"Set up your POS system\",\"Setup\":\"Setup\",\"Shipped by\":\"Shipped by\",\"Shipping address\":\"Shipping address\",\"Short description\":\"Short description\",\"Show all\":\"Show all\",\"Show completed\":\"Show completed\",\"Show on hand\":\"Show on hand\",\"Show password\":\"Show password\",\"Show products\":\"Show products\",\"Sign in\":\"Sign in\",\"Sign in to POS\":\"Sign in to POS\",\"Sign in with Google\":\"Sign in with Google\",\"Sign in with Microsoft\":\"Sign in with Microsoft\",\"Sign in with biometrics\":\"Sign in with biometrics\",\"Simulator mode\":\"Simulator mode\",\"Skip warning\":\"Skip warning\",\"Sold by\":\"Sold by\",\"Some of the barcodes supplied could not be matched to any products or more than one product is found per supplied barcode. Unprocessed barcodes are listed in the box below.\":\"Some of the barcodes supplied could not be matched to any products or more than one product is found per supplied barcode. Unprocessed barcodes are listed in the box below.\",\"Some refunds were unsuccessful, so the amount was transferred to store credit instead.\":\"Some refunds were unsuccessful, so the amount was transferred to store credit instead.\",\"Some refunds were unsuccessful:<br/>\":\"Some refunds were unsuccessful:<br/>\",\"Some things went wrong, please download {{app}} application from store manually\":\"Some things went wrong, please download {{app}} application from store manually\",\"Someone has already opened this register.\":\"Someone has already opened this register.\",\"Something went wrong, please try again.\":\"Something went wrong, please try again.\",\"Something went wrong: cannot pay negative amount with a gift card.\":\"Something went wrong: cannot pay negative amount with a gift card.\",\"Specify product quantity\":\"Specify product quantity\",\"Specify stock transfer quantity\":\"Specify stock transfer quantity\",\"Specify stocktake quantity\":\"Specify stocktake quantity\",\"Square reader\":\"Square reader\",\"Start a new sale\":\"Start a new sale\",\"Start date\":\"Start date\",\"Start stocktake\":\"Start stocktake\",\"State / province\":\"State / province\",\"Status\":\"Status\",\"Still open.\":\"Still open.\",\"Stock transfer\":\"Stock transfer\",\"Stock transfer order\":\"Stock transfer order\",\"Stocktake\":\"Stocktake\",\"Stocktake is running in the location so there are no available products.\":\"Stocktake is running in the location so there are no available products.\",\"Stocktake quantity\":\"Stocktake quantity\",\"Stocktake quantity:\":\"Stocktake quantity:\",\"Store\\n                                                            credits\":\"Store\\n                                                            credits\",\"Store Credit\":\"Store Credit\",\"Store Credit\\n                                    Report\":\"Store Credit\\n                                    Report\",\"Store Credit Report\":\"Store Credit Report\",\"Store credit\":\"Store credit\",\"Store credit payment amount should be between 0 and\":\"Store credit payment amount should be between 0 and\",\"Store credit surcharge\":\"Store credit surcharge\",\"Store credits:\":\"Store credits:\",\"Subtotal\":\"Subtotal\",\"Subtotal:\":\"Subtotal:\",\"Sum\":\"Sum\",\"Supplier\":\"Supplier\",\"Surcharge\":\"Surcharge\",\"Surcharge\\n                                    Report\":\"Surcharge\\n                                    Report\",\"Surcharge Report\":\"Surcharge Report\",\"Surcharge amount\":\"Surcharge amount\",\"Surcharge refund amount:\":\"Surcharge refund amount:\",\"Surcharge:\":\"Surcharge:\",\"Surcharges\":\"Surcharges\",\"Swipe left/right\":\"Swipe left/right\",\"Sync\":\"Sync\",\"Tags\":\"Tags\",\"Tax\":\"Tax\",\"Tax\\n                                            number\":\"Tax\\n                                            number\",\"Tax\\n                                        number\":\"Tax\\n                                        number\",\"Tax:\":\"Tax:\",\"Tender\":\"Tender\",\"Terminal ID\":\"Terminal ID\",\"Terminal connection timeout\":\"Terminal connection timeout\",\"Terminal has been disconnected from Cin7 Core POS.\":\"Terminal has been disconnected from Cin7 Core POS.\",\"Terminal has been disconnected from Cin7 Core POS. Please connect it again and perform a transaction.\":\"Terminal has been disconnected from Cin7 Core POS. Please connect it again and perform a transaction.\",\"Terminal has been successfully disconnected from Cin7 Core POS.\":\"Terminal has been successfully disconnected from Cin7 Core POS.\",\"Terminal has been successfully paired with Cin7 Core POS.\":\"Terminal has been successfully paired with Cin7 Core POS.\",\"Test connection\":\"Test connection\",\"Test print\":\"Test print\",\"Thank you for the purchase!\":\"Thank you for the purchase!\",\"The 'From' date should be less than or equal to the 'To' date.\":\"The 'From' date should be less than or equal to the 'To' date.\",\"The PIN code is not available. Switch on the PIN code support on the Cin7 Core POS integration setup page.\":\"The PIN code is not available. Switch on the PIN code support on the Cin7 Core POS integration setup page.\",\"The PIN code is reset.\":\"The PIN code is reset.\",\"The PIN pad has already been paired. Do you want to exit without connecting?\":\"The PIN pad has already been paired. Do you want to exit without connecting?\",\"The PIN pad has already been paired. Do you want to remove the current pairing and pair it again?\":\"The PIN pad has already been paired. Do you want to remove the current pairing and pair it again?\",\"The barcode could not be detected. Make sure your scanner is connected correctly and then try scanning again.\":\"The barcode could not be detected. Make sure your scanner is connected correctly and then try scanning again.\",\"The current receipt template doesn't support merchant/customer receipt printing. Please modify the receipt template or disable 'Print EFTPOS receipts on the Linkly payment terminal' on the setup page.\":\"The current receipt template doesn't support merchant/customer receipt printing. Please modify the receipt template or disable 'Print EFTPOS receipts on the Linkly payment terminal' on the setup page.\",\"The current receipt template doesn't support merchant/customer receipt printing. Please modify the receipt template or enable 'Print EFTPOS receipts on the Tyro terminal' on the setup page.\":\"The current receipt template doesn't support merchant/customer receipt printing. Please modify the receipt template or enable 'Print EFTPOS receipts on the Tyro terminal' on the setup page.\",\"The email is not well-formed.\":\"The email is not well-formed.\",\"The file is saved as:\":\"The file is saved as:\",\"The label printer has been successfully set.\":\"The label printer has been successfully set.\",\"The maximum number of product is\\n                                                {{item.maxCount}}\":\"The maximum number of product is\\n                                                {{item.maxCount}}\",\"The outlet does not have active registers. Please create registers on the POS integration page of the Cin7 Core site or select another outlet.\":\"The outlet does not have active registers. Please create registers on the POS integration page of the Cin7 Core site or select another outlet.\",\"The payment amount is more than the sales amount.\":\"The payment amount is more than the sales amount.\",\"The payment cannot be processed. The 'Square integration to process' parameter isn't set for the outlet on the POS setup page or you need to reset the outlet.\":\"The payment cannot be processed. The 'Square integration to process' parameter isn't set for the outlet on the POS setup page or you need to reset the outlet.\",\"The printer has been successfully set.\":\"The printer has been successfully set.\",\"The printer is not responding. Make sure your printer is connected correctly and then try again.\":\"The printer is not responding. Make sure your printer is connected correctly and then try again.\",\"The printer was not set up.\":\"The printer was not set up.\",\"The quote cannot be sent. Please check your email address.\":\"The quote cannot be sent. Please check your email address.\",\"The receipt cannot be sent. Please check your email address.\":\"The receipt cannot be sent. Please check your email address.\",\"The sale format is unknown. Please, update application from the store\":\"The sale format is unknown. Please, update application from the store\",\"The sale was not found. If it was a parked sale, someone may already be processing it right now.\":\"The sale was not found. If it was a parked sale, someone may already be processing it right now.\",\"The sale {{orderNumber}} could not be saved because it contains a deleted product.\":\"The sale {{orderNumber}} could not be saved because it contains a deleted product.\",\"The same gift card has been already added to the checkout.\":\"The same gift card has been already added to the checkout.\",\"The selected item appears on the list of the current stocktake. To avoid incorrect counts you may need to cancel the sale of the item.\":\"The selected item appears on the list of the current stocktake. To avoid incorrect counts you may need to cancel the sale of the item.\",\"The ultimate solution for your business\":\"The ultimate solution for your business\",\"The username, password, or paircode was invalid. Please check this information and try again.\":\"The username, password, or paircode was invalid. Please check this information and try again.\",\"The username/password combination is incorrect or you have exceeded the number of allowed login attempts. Please try to recover the password using the 'Forgot your password' link.\":\"The username/password combination is incorrect or you have exceeded the number of allowed login attempts. Please try to recover the password using the 'Forgot your password' link.\",\"There are more products in this location but some of them are under stocktake.\":\"There are more products in this location but some of them are under stocktake.\",\"There are no available products in this location.\":\"There are no available products in this location.\",\"There are no comments.\":\"There are no comments.\",\"There is a problem connecting to the server.<br/> Please check your internet connection.\":\"There is a problem connecting to the server.<br/> Please check your internet connection.\",\"There is nothing to pay. Continue?\":\"There is nothing to pay. Continue?\",\"This app will not work on rooted device.\":\"This app will not work on rooted device.\",\"This one-off coupon has already been used!\":\"This one-off coupon has already been used!\",\"This receipt number has already been used. Are you sure you would like to proceed with new exchange with this receipt number?\":\"This receipt number has already been used. Are you sure you would like to proceed with new exchange with this receipt number?\",\"This receipt number has already been used. Are you sure you would like to proceed with new refund with this receipt number?\":\"This receipt number has already been used. Are you sure you would like to proceed with new refund with this receipt number?\",\"This report has been successfully sent\":\"This report has been successfully sent\",\"This will reverse all transfers and change the transfer status to draft! Would you like to proceed anyway?\":\"This will reverse all transfers and change the transfer status to draft! Would you like to proceed anyway?\",\"This will reverse all transfers and change the transfer status to voided! Would you like to proceed anyway?\":\"This will reverse all transfers and change the transfer status to voided! Would you like to proceed anyway?\",\"Time\":\"Time\",\"To\":\"To\",\"To cash ({{currency_symbol}}&nbsp;{{paymentValidation.cashAmount | number:2}} max)\":\"To cash ({{currency_symbol}}&nbsp;{{paymentValidation.cashAmount | number:2}} max)\",\"To credit card&nbsp;<span ng-show=\\\"paymentValidation.cardPayments.length>1\\\" class=\\\"rp_value\\\">#{{$index+1}} </span>({{currency_symbol}}&nbsp;{{obj.validationAmount | number:2}} max)\":\"To credit card&nbsp;<span ng-show=\\\"paymentValidation.cardPayments.length>1\\\" class=\\\"rp_value\\\">#{{$index+1}} </span>({{currency_symbol}}&nbsp;{{obj.validationAmount | number:2}} max)\",\"To loyalty points\":\"To loyalty points\",\"To select a product to print a label, you can click on product image in the product list on the previous screen.\":\"To select a product to print a label, you can click on product image in the product list on the previous screen.\",\"To setup time, please setup delivery calendar for current location.\":\"To setup time, please setup delivery calendar for current location.\",\"To store credit\":\"To store credit\",\"Today\":\"Today\",\"Total\":\"Total\",\"Total account sale payments\":\"Total account sale payments\",\"Total account sales\":\"Total account sales\",\"Total before discount\":\"Total before discount\",\"Total discount\":\"Total discount\",\"Total issued\":\"Total issued\",\"Total layby payments\":\"Total layby payments\",\"Total new laybys\":\"Total new laybys\",\"Total new returns\":\"Total new returns\",\"Total redeemed\":\"Total redeemed\",\"Total refund amount:\":\"Total refund amount:\",\"Total sold\":\"Total sold\",\"Total tax\":\"Total tax\",\"Total:\":\"Total:\",\"Totals\":\"Totals\",\"Totals by payment type\":\"Totals by payment type\",\"Transaction in progress...\":\"Transaction in progress...\",\"Transaction is\":\"Transaction is\",\"Transaction timeout: please try again\":\"Transaction timeout: please try again\",\"Transfer #\":\"Transfer #\",\"Transfer quantity\":\"Transfer quantity\",\"Try connecting again\":\"Try connecting again\",\"Type\":\"Type\",\"Type is required.\":\"Type is required.\",\"Tyro payment system\":\"Tyro payment system\",\"Tyro payment system error.\":\"Tyro payment system error.\",\"Tyro reader\":\"Tyro reader\",\"Undo\":\"Undo\",\"Undo stock transfer\":\"Undo stock transfer\",\"Undo stocktake\":\"Undo stocktake\",\"Unit\":\"Unit\",\"Unit of measure\":\"Unit of measure\",\"Unknown\":\"Unknown\",\"Update\":\"Update\",\"Update settings\":\"Update settings\",\"Use same address for billing\":\"Use same address for billing\",\"User\":\"User\",\"User / note\":\"User / note\",\"User management\":\"User management\",\"Users\":\"Users\",\"Users list\":\"Users list\",\"Value\":\"Value\",\"Vantiv triPOS reader\":\"Vantiv triPOS reader\",\"Variation\":\"Variation\",\"Version outdated\":\"Version outdated\",\"Version warning\":\"Version warning\",\"Void\":\"Void\",\"Void stock transfer\":\"Void stock transfer\",\"Voided\":\"Voided\",\"Warehouse Management\\n                                    System application is not available\":\"Warehouse Management\\n                                    System application is not available\",\"Warehouse Management System {{qa}} application is not available\":\"Warehouse Management System {{qa}} application is not available\",\"Warning\":\"Warning\",\"Was the payment successful?\":\"Was the payment successful?\",\"We do not support Cin7 Core Web POS in this browser.\":\"We do not support Cin7 Core Web POS in this browser.\",\"We do not support Cin7 Core Web POS on IOS version < 10.\":\"We do not support Cin7 Core Web POS on IOS version < 10.\",\"We have identified incorrectly completed payment transaction. Please confirm if the payment succeeded?\":\"We have identified incorrectly completed payment transaction. Please confirm if the payment succeeded?\",\"We just sent you an email message to the address you specified. Inside the message is a link you can use to change your password. The message should show up within a few seconds. If it doesn't, check your spam or junk mail folder and look for a message from Cin7 Core that says 'Password Reset Request'.\":\"We just sent you an email message to the address you specified. Inside the message is a link you can use to change your password. The message should show up within a few seconds. If it doesn't, check your spam or junk mail folder and look for a message from Cin7 Core that says 'Password Reset Request'.\",\"Week\":\"Week\",\"Windcave\":\"Windcave\",\"Windcave credentials have not been configured.\":\"Windcave credentials have not been configured.\",\"Windcave payment\":\"Windcave payment\",\"Would you like to add payment?\":\"Would you like to add payment?\",\"Would you like to cancel\":\"Would you like to cancel\",\"Would you like to clear the current sale?\":\"Would you like to clear the current sale?\",\"Would you like to complete\":\"Would you like to complete\",\"Would you like to convert this sale into a POS sale?\":\"Would you like to convert this sale into a POS sale?\",\"Would you like to delete\":\"Would you like to delete\",\"Would you like to delete sales representative:\":\"Would you like to delete sales representative:\",\"Would you like to delete the parked sale or clear the current sale?\":\"Would you like to delete the parked sale or clear the current sale?\",\"Would you like to park this sale?\":\"Would you like to park this sale?\",\"Would you like to print a receipt?\":\"Would you like to print a receipt?\",\"Would you like to remove gift card:\":\"Would you like to remove gift card:\",\"Would you like to remove product:\":\"Would you like to remove product:\",\"Would you like to remove this customer:\":\"Would you like to remove this customer:\",\"Would you like to remove this product?\":\"Would you like to remove this product?\",\"Would you like to reorder only the products available at {{currentOrder.fromLocationName}}, or all low on stock products?\":\"Would you like to reorder only the products available at {{currentOrder.fromLocationName}}, or all low on stock products?\",\"Would you like to return this item?\":\"Would you like to return this item?\",\"Would you like to start\":\"Would you like to start\",\"Would you like to undo\":\"Would you like to undo\",\"X\":\"X\",\"Yes\":\"Yes\",\"Yes, cancel\":\"Yes, cancel\",\"Yes, complete\":\"Yes, complete\",\"Yes, delete\":\"Yes, delete\",\"Yes, remove delivery\":\"Yes, remove delivery\",\"Yes, this is a layby sale\":\"Yes, this is a layby sale\",\"Yes, this is an on account sale\":\"Yes, this is an on account sale\",\"Yesterday\":\"Yesterday\",\"You are working in offline mode.\":\"You are working in offline mode.\",\"You can only redeem up to the value of your current loyalty balance. You may still proceed with this as a partial payment, then choose another payment method for the remaining balance.\":\"You can only redeem up to the value of your current loyalty balance. You may still proceed with this as a partial payment, then choose another payment method for the remaining balance.\",\"You can only redeem up to the value of your current store credits balance. You may still proceed with this as a partial payment, then choose another payment method for the remaining balance.\":\"You can only redeem up to the value of your current store credits balance. You may still proceed with this as a partial payment, then choose another payment method for the remaining balance.\",\"You can set up a max 1-year period for reporting only.\":\"You can set up a max 1-year period for reporting only.\",\"You need to give \\\"Draw over other apps\\\" permission to display content on second screen.\":\"You need to give \\\"Draw over other apps\\\" permission to display content on second screen.\",\"You won't be able to change the sale after clicking \\\"Yes, this is a layby sale\\\", would you like to continue?\":\"You won't be able to change the sale after clicking \\\"Yes, this is a layby sale\\\", would you like to continue?\",\"You won't be able to change the sale after clicking \\\"Yes, this is an on account sale\\\", would you like to continue?\":\"You won't be able to change the sale after clicking \\\"Yes, this is an on account sale\\\", would you like to continue?\",\"Your PIN code has been successfully reset.\":\"Your PIN code has been successfully reset.\",\"Your PIN code has been successfully saved.\":\"Your PIN code has been successfully saved.\",\"Your PIN code is not unique. Please, change your PIN code as soon as possible to prevent wrong logins.\":\"Your PIN code is not unique. Please, change your PIN code as soon as possible to prevent wrong logins.\",\"Your computer is not connected to the internet. Please check the status of your connection. You\\n                        can make sales in register while you're offline, but you'll lose any unfinished work on this\\n                        page. Otherwise, wait here. When you're online again, this box will close, and you'll be ready\\n                        to go.\":\"Your computer is not connected to the internet. Please check the status of your connection. You\\n                        can make sales in register while you're offline, but you'll lose any unfinished work on this\\n                        page. Otherwise, wait here. When you're online again, this box will close, and you'll be ready\\n                        to go.\",\"Your current sale will be lost. You will need to log in again. Would you like to continue?\":\"Your current sale will be lost. You will need to log in again. Would you like to continue?\",\"Your payment and sales totals will be finalised for this period.\":\"Your payment and sales totals will be finalized for this period.\",\"_register_\":\"_register_\",\"amount should be between 0 and\":\"amount should be between 0 and\",\"at <br> \\n                                            {{currentOrder.fromLocationName}}\":\"at <br> \\n                                            {{currentOrder.fromLocationName}}\",\"at <br> {{currentOrder.toLocationName}}\":\"at <br> {{currentOrder.toLocationName}}\",\"availability\":\"availability\",\"completed\":\"completed\",\"from users?\":\"from users?\",\"has unsupported extension\":\"has unsupported extension\",\"is approved. The rest of the amount must be paid in another way.\":\"is approved. The rest of the amount must be paid in another way.\",\"loyalty points deducted\":\"loyalty points deducted\",\"or\":\"or\",\"partially\":\"partially\",\"refund is not supported for this payment:\":\"refund is not supported for this payment:\",\"sale representatives will be shown\":\"sale representatives will be shown\",\"stocktake?\":\"stocktake?\",\"to\":\"to\",\"to process this sale using the following\":\"to process this sale using the following\",\"v.\":\"v.\",\"v. {{appVersion}}\":\"v. {{appVersion}}\",\"whereas the customer credit limit is\":\"whereas the customer credit limit is\",\"x\":\"x\",\"{{$parent.messageBoxNo ? $parent.messageBoxNo : 'No'}}\":\"{{$parent.messageBoxNo ? $parent.messageBoxNo : 'No'}}\",\"{{$parent.messageBoxYes ? $parent.messageBoxYes : 'Yes'}}\":\"{{$parent.messageBoxYes ? $parent.messageBoxYes : 'Yes'}}\",\"{{QuantityPropName === 'TransferQuantity' ? 'Transfer quantity' : 'Quantity' }}\":\"{{QuantityPropName === 'TransferQuantity' ? 'Transfer quantity' : 'Quantity' }}\",\"{{btn.name}}\":\"{{btn.name}}\",\"{{caption}}\":\"{{caption}}\",\"{{chartDetails.Title}}\":\"{{chartDetails.Title}}\",\"{{currentStocktake.name}}\":\"{{currentStocktake.name}}\",\"{{newCustomer.UseSameForBilling ? 'Default shipping/billing address' : 'Default shipping address'}}\":\"{{newCustomer.UseSameForBilling ? 'Default shipping/billing address' : 'Default shipping address'}}\",\"{{selectedData.MethodName}}\":\"{{selectedData.MethodName}}\",\"{{type}} cancelled\":\"{{type}} canceled\"});\r\n/* jshint +W100 */\r\n}]);","/* (ignored) */","/* (ignored) */","/* (ignored) */","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\tif (cachedModule.error !== undefined) throw cachedModule.error;\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\ttry {\n\t\tvar execOptions = { id: moduleId, module: module, factory: __webpack_modules__[moduleId], require: __webpack_require__ };\n\t\t__webpack_require__.i.forEach(function(handler) { handler(execOptions); });\n\t\tif (!execOptions.factory) {\n\t\t\tdelete __webpack_module_cache__[moduleId];\n\t\t\tvar e = new Error(\"Cannot find module '\" + moduleId + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t}\n\t\tmodule = execOptions.module;\n\t\texecOptions.factory.call(module.exports, module, module.exports, execOptions.require);\n\t} catch(e) {\n\t\tmodule.error = e;\n\t\tthrow e;\n\t}\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// expose the module cache\n__webpack_require__.c = __webpack_module_cache__;\n\n// expose the module execution interceptor\n__webpack_require__.i = [];\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif (((priority & 1) === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter/value functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","// This function allow to reference all chunks\n__webpack_require__.u = function(chunkId) { return chunkId + \"-bundle.js?h=\" + {\"0\":\"0af55a41aca7d321556f\",\"defaultVendors\":\"f8e0b89f292ba6f67266\",\"main\":\"8574f6c84a2692a32c3d\"}[chunkId] + \"\"; };","// This function allow to reference all chunks\n__webpack_require__.hu = function(chunkId) { return chunkId + \".\" + __webpack_require__.h() + \".hot-update.js\"; };","// This function allow to reference all chunks\n__webpack_require__.miniCssF = function(chunkId) { return chunkId + \".css?h=\" + {\"defaultVendors\":\"234e622d4c830ba3e776\",\"main\":\"7fec3713c758dd5bc3da\"}[chunkId] + \"\"; };","__webpack_require__.hmrF = function() { return \"main.\" + __webpack_require__.h() + \".hot-update.json\"; };","__webpack_require__.h = function() { return \"0b5af05af327d4a14050\"; };","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); };","var inProgress = {};\nvar dataWebpackPrefix = \"crdregister:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","var currentModuleData = {};\nvar installedModules = __webpack_require__.c;\n\n// module and require creation\nvar currentChildModule;\nvar currentParents = [];\n\n// status\nvar registeredStatusHandlers = [];\nvar currentStatus = \"idle\";\n\n// while downloading\nvar blockingPromises = 0;\nvar blockingPromisesWaiting = [];\n\n// The update info\nvar currentUpdateApplyHandlers;\nvar queuedInvalidatedModules;\n\n__webpack_require__.hmrD = currentModuleData;\n\n__webpack_require__.i.push(function (options) {\n\tvar module = options.module;\n\tvar require = createRequire(options.require, options.id);\n\tmodule.hot = createModuleHotObject(options.id, module);\n\tmodule.parents = currentParents;\n\tmodule.children = [];\n\tcurrentParents = [];\n\toptions.require = require;\n});\n\n__webpack_require__.hmrC = {};\n__webpack_require__.hmrI = {};\n\nfunction createRequire(require, moduleId) {\n\tvar me = installedModules[moduleId];\n\tif (!me) return require;\n\tvar fn = function (request) {\n\t\tif (me.hot.active) {\n\t\t\tif (installedModules[request]) {\n\t\t\t\tvar parents = installedModules[request].parents;\n\t\t\t\tif (parents.indexOf(moduleId) === -1) {\n\t\t\t\t\tparents.push(moduleId);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcurrentParents = [moduleId];\n\t\t\t\tcurrentChildModule = request;\n\t\t\t}\n\t\t\tif (me.children.indexOf(request) === -1) {\n\t\t\t\tme.children.push(request);\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.warn(\n\t\t\t\t\"[HMR] unexpected require(\" +\n\t\t\t\t\trequest +\n\t\t\t\t\t\") from disposed module \" +\n\t\t\t\t\tmoduleId\n\t\t\t);\n\t\t\tcurrentParents = [];\n\t\t}\n\t\treturn require(request);\n\t};\n\tvar createPropertyDescriptor = function (name) {\n\t\treturn {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\treturn require[name];\n\t\t\t},\n\t\t\tset: function (value) {\n\t\t\t\trequire[name] = value;\n\t\t\t}\n\t\t};\n\t};\n\tfor (var name in require) {\n\t\tif (\n\t\t\tObject.prototype.hasOwnProperty.call(require, name) &&\n\t\t\tname !== \"e\" &&\n\t\t\tname !== \"ei\"\n\t\t) {\n\t\t\tObject.defineProperty(fn, name, createPropertyDescriptor(name));\n\t\t}\n\t}\n\t// A chunk load blocks the update until it settles, and `.ei` is the analyzable\n\t// half of `.e`. A runtime that loads no chunks has neither to wrap.\n\tif (require.e) {\n\t\t(fn).e = function (chunkId, fetchPriority) {\n\t\t\treturn trackBlockingPromise(\n\t\t\t\t(require.e)(chunkId, fetchPriority)\n\t\t\t);\n\t\t};\n\t}\n\tif (require.ei) {\n\t\t(fn).ei = function (chunkId, importFn) {\n\t\t\treturn trackBlockingPromise(\n\t\t\t\t(require.ei)(chunkId, importFn)\n\t\t\t);\n\t\t};\n\t}\n\treturn (fn);\n}\n\nfunction createModuleHotObject(moduleId, me) {\n\tvar _main = currentChildModule !== moduleId;\n\tvar hot = {\n\t\t// private stuff\n\t\t_acceptedDependencies: {},\n\t\t_acceptedErrorHandlers: {},\n\t\t_declinedDependencies: {},\n\t\t_selfAccepted: false,\n\t\t_selfDeclined: false,\n\t\t_selfInvalidated: false,\n\t\t_disposeHandlers: [],\n\t\t_main: _main,\n\t\t_requireSelf: function () {\n\t\t\tcurrentParents = me.parents.slice();\n\t\t\tcurrentChildModule = _main ? undefined : moduleId;\n\t\t\t__webpack_require__(moduleId);\n\t\t},\n\n\t\t// Module API\n\t\tactive: true,\n\t\taccept: function (dep, callback, errorHandler) {\n\t\t\tif (dep === undefined) hot._selfAccepted = true;\n\t\t\telse if (typeof dep === \"function\") hot._selfAccepted = dep;\n\t\t\telse if (typeof dep === \"object\" && dep !== null) {\n\t\t\t\tfor (var i = 0; i < dep.length; i++) {\n\t\t\t\t\thot._acceptedDependencies[dep[i]] = callback || function () {};\n\t\t\t\t\thot._acceptedErrorHandlers[dep[i]] = errorHandler;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thot._acceptedDependencies[dep] = callback || function () {};\n\t\t\t\thot._acceptedErrorHandlers[dep] = errorHandler;\n\t\t\t}\n\t\t},\n\t\tdecline: function (dep) {\n\t\t\tif (dep === undefined) hot._selfDeclined = true;\n\t\t\telse if (typeof dep === \"object\" && dep !== null)\n\t\t\t\tfor (var i = 0; i < dep.length; i++)\n\t\t\t\t\thot._declinedDependencies[dep[i]] = true;\n\t\t\telse hot._declinedDependencies[dep] = true;\n\t\t},\n\t\tdispose: function (callback) {\n\t\t\thot._disposeHandlers.push(callback);\n\t\t},\n\t\taddDisposeHandler: function (callback) {\n\t\t\thot._disposeHandlers.push(callback);\n\t\t},\n\t\tremoveDisposeHandler: function (callback) {\n\t\t\tvar idx = hot._disposeHandlers.indexOf(callback);\n\t\t\tif (idx >= 0) hot._disposeHandlers.splice(idx, 1);\n\t\t},\n\t\tinvalidate: function () {\n\t\t\tthis._selfInvalidated = true;\n\t\t\tswitch (currentStatus) {\n\t\t\t\tcase \"idle\":\n\t\t\t\t\tcurrentUpdateApplyHandlers = [];\n\t\t\t\t\tObject.keys(__webpack_require__.hmrI).forEach(function (key) {\n\t\t\t\t\t\t__webpack_require__.hmrI[key](\n\t\t\t\t\t\t\tmoduleId,\n\t\t\t\t\t\t\t(currentUpdateApplyHandlers)\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t\tsetStatus(\"ready\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ready\":\n\t\t\t\t\tObject.keys(__webpack_require__.hmrI).forEach(function (key) {\n\t\t\t\t\t\t__webpack_require__.hmrI[key](\n\t\t\t\t\t\t\tmoduleId,\n\t\t\t\t\t\t\t(currentUpdateApplyHandlers)\n\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"prepare\":\n\t\t\t\tcase \"check\":\n\t\t\t\tcase \"dispose\":\n\t\t\t\tcase \"apply\":\n\t\t\t\t\t(queuedInvalidatedModules = queuedInvalidatedModules || []).push(\n\t\t\t\t\t\tmoduleId\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t// ignore requests in error states\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\n\t\t// Management API\n\t\tcheck: hotCheck,\n\t\tapply: hotApply,\n\t\tstatus: function (l) {\n\t\t\tif (!l) return currentStatus;\n\t\t\tregisteredStatusHandlers.push(l);\n\t\t},\n\t\taddStatusHandler: function (l) {\n\t\t\tregisteredStatusHandlers.push(l);\n\t\t},\n\t\tremoveStatusHandler: function (l) {\n\t\t\tvar idx = registeredStatusHandlers.indexOf(l);\n\t\t\tif (idx >= 0) registeredStatusHandlers.splice(idx, 1);\n\t\t},\n\n\t\t// inherit from previous dispose call\n\t\tdata: currentModuleData[moduleId]\n\t};\n\tcurrentChildModule = undefined;\n\treturn hot;\n}\n\nfunction setStatus(newStatus) {\n\tcurrentStatus = newStatus;\n\tvar results = [];\n\n\tfor (var i = 0; i < registeredStatusHandlers.length; i++)\n\t\tresults[i] = registeredStatusHandlers[i].call(null, newStatus);\n\n\treturn Promise.all(results).then(function () {});\n}\n\nfunction unblock() {\n\tif (--blockingPromises === 0) {\n\t\tsetStatus(\"ready\").then(function () {\n\t\t\tif (blockingPromises === 0) {\n\t\t\t\tvar list = blockingPromisesWaiting;\n\t\t\t\tblockingPromisesWaiting = [];\n\t\t\t\tfor (var i = 0; i < list.length; i++) {\n\t\t\t\t\tlist[i]();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n\nfunction trackBlockingPromise(promise) {\n\tswitch (currentStatus) {\n\t\tcase \"ready\":\n\t\t\tsetStatus(\"prepare\");\n\t\t/* fallthrough */\n\t\tcase \"prepare\":\n\t\t\tblockingPromises++;\n\t\t\tpromise.then(unblock, unblock);\n\t\t\treturn promise;\n\t\tdefault:\n\t\t\treturn promise;\n\t}\n}\n\nfunction waitForBlockingPromises(fn) {\n\tif (blockingPromises === 0) return fn();\n\treturn (\n\t\tnew Promise(function (resolve) {\n\t\t\tblockingPromisesWaiting.push(function () {\n\t\t\t\tresolve(fn());\n\t\t\t});\n\t\t})\n\t);\n}\n\nfunction hotCheck(applyOnUpdate) {\n\tif (currentStatus !== \"idle\") {\n\t\tthrow new Error(\"check() is only allowed in idle status\");\n\t}\n\treturn setStatus(\"check\")\n\t\t.then(__webpack_require__.hmrM)\n\t\t.then(function (update) {\n\t\t\tif (!update) {\n\t\t\t\treturn setStatus(applyInvalidatedModules() ? \"ready\" : \"idle\").then(\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn setStatus(\"prepare\").then(function () {\n\t\t\t\tvar updatedModules = [];\n\t\t\t\tcurrentUpdateApplyHandlers = [];\n\n\t\t\t\treturn Promise.all(\n\t\t\t\t\tObject.keys(__webpack_require__.hmrC).reduce(function (\n\t\t\t\t\t\tpromises,\n\t\t\t\t\t\tkey\n\t\t\t\t\t) {\n\t\t\t\t\t\t__webpack_require__.hmrC[key](\n\t\t\t\t\t\t\tupdate.c,\n\t\t\t\t\t\t\tupdate.r,\n\t\t\t\t\t\t\tupdate.m,\n\t\t\t\t\t\t\tpromises,\n\t\t\t\t\t\t\t(currentUpdateApplyHandlers),\n\t\t\t\t\t\t\tupdatedModules,\n\t\t\t\t\t\t\tupdate.css,\n\t\t\t\t\t\t\tupdate.f\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn promises;\n\t\t\t\t\t}, ([]))\n\t\t\t\t).then(function () {\n\t\t\t\t\treturn waitForBlockingPromises(function () {\n\t\t\t\t\t\tif (applyOnUpdate) {\n\t\t\t\t\t\t\treturn internalApply(applyOnUpdate);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn setStatus(\"ready\").then(function () {\n\t\t\t\t\t\t\treturn updatedModules;\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t});\n}\n\nfunction hotApply(options) {\n\tif (currentStatus !== \"ready\") {\n\t\treturn Promise.resolve().then(function () {\n\t\t\tthrow new Error(\n\t\t\t\t\"apply() is only allowed in ready status (state: \" +\n\t\t\t\t\tcurrentStatus +\n\t\t\t\t\t\")\"\n\t\t\t);\n\t\t});\n\t}\n\treturn internalApply(options);\n}\n\nfunction internalApply(options) {\n\toptions = options || {};\n\n\tapplyInvalidatedModules();\n\n\tvar results = (\n\t\tcurrentUpdateApplyHandlers\n\t).map(function (handler) {\n\t\treturn handler((options));\n\t});\n\tcurrentUpdateApplyHandlers = undefined;\n\n\tvar errors = results\n\t\t.map(function (r) {\n\t\t\treturn r.error;\n\t\t})\n\t\t.filter(Boolean);\n\n\tif (errors.length > 0) {\n\t\treturn setStatus(\"abort\").then(function () {\n\t\t\tthrow errors[0];\n\t\t});\n\t}\n\n\t// Now in \"dispose\" phase\n\tvar disposePromise = setStatus(\"dispose\");\n\n\tresults.forEach(function (result) {\n\t\tif (result.dispose) result.dispose();\n\t});\n\n\t// Now in \"apply\" phase\n\tvar applyPromise = setStatus(\"apply\");\n\n\tvar error;\n\tvar reportError = function (err) {\n\t\tif (!error) error = err;\n\t};\n\n\tvar outdatedModules = [];\n\n\tvar onAccepted = function () {\n\t\treturn Promise.all([disposePromise, applyPromise]).then(function () {\n\t\t\t// handle errors in accept handlers and self accepted module load\n\t\t\tif (error) {\n\t\t\t\treturn setStatus(\"fail\").then(function () {\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (queuedInvalidatedModules) {\n\t\t\t\treturn internalApply(options).then(function (list) {\n\t\t\t\t\toutdatedModules.forEach(function (moduleId) {\n\t\t\t\t\t\tif (list.indexOf(moduleId) < 0) list.push(moduleId);\n\t\t\t\t\t});\n\t\t\t\t\treturn list;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn setStatus(\"idle\").then(function () {\n\t\t\t\treturn outdatedModules;\n\t\t\t});\n\t\t});\n\t};\n\n\treturn Promise.all(\n\t\tresults\n\t\t\t.filter(function (result) {\n\t\t\t\treturn result.apply;\n\t\t\t})\n\t\t\t.map(function (result) {\n\t\t\t\treturn (result.apply)(reportError);\n\t\t\t})\n\t)\n\t\t.then(function (applyResults) {\n\t\t\tapplyResults.forEach(function (modules) {\n\t\t\t\tif (modules) {\n\t\t\t\t\tfor (var i = 0; i < modules.length; i++) {\n\t\t\t\t\t\toutdatedModules.push(modules[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t})\n\t\t.then(onAccepted);\n}\n\nfunction applyInvalidatedModules() {\n\tif (queuedInvalidatedModules) {\n\t\tif (!currentUpdateApplyHandlers) currentUpdateApplyHandlers = [];\n\t\tObject.keys(__webpack_require__.hmrI).forEach(function (key) {\n\t\t\t(queuedInvalidatedModules).forEach(\n\t\t\t\tfunction (moduleId) {\n\t\t\t\t\t__webpack_require__.hmrI[key](\n\t\t\t\t\t\tmoduleId,\n\t\t\t\t\t\t(currentUpdateApplyHandlers)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t);\n\t\t});\n\t\tqueuedInvalidatedModules = undefined;\n\t\treturn true;\n\t}\n}","__webpack_require__.p = \"/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = function(chunkId, fullhref, oldTag, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tif (__webpack_require__.nc) {\n\t\tlinkTag.nonce = __webpack_require__.nc;\n\t}\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// no chunk loading\n\nvar oldTags = [];\nvar newTags = [];\nvar applyHandler = function(options) {\n\treturn { dispose: function() {\n\t\tfor(var i = 0; i < oldTags.length; i++) {\n\t\t\tvar oldTag = oldTags[i];\n\t\t\tif(oldTag.parentNode) oldTag.parentNode.removeChild(oldTag);\n\t\t}\n\t\toldTags.length = 0;\n\t}, apply: function() {\n\t\tfor(var i = 0; i < newTags.length; i++) newTags[i].rel = \"stylesheet\";\n\t\tnewTags.length = 0;\n\t} };\n}\n__webpack_require__.hmrC.miniCss = function(chunkIds, removedChunks, removedModules, promises, applyHandlers, updatedModulesList) {\n\tapplyHandlers.push(applyHandler);\n\tchunkIds.forEach(function(chunkId) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tvar oldTag = findStylesheet(href, fullhref);\n\t\tif(!oldTag) return;\n\t\tpromises.push(new Promise(function(resolve, reject) {\n\t\t\tvar tag = createStylesheet(chunkId, fullhref, oldTag, function() {\n\t\t\t\ttag.as = \"style\";\n\t\t\t\ttag.rel = \"preload\";\n\t\t\t\tresolve();\n\t\t\t}, reject);\n\t\t\toldTags.push(oldTag);\n\t\t\tnewTags.push(tag);\n\t\t}));\n\t});\n}\n\n// no prefetching\n\n// no preloaded","__webpack_require__.b = (typeof document !== 'undefined' && document.baseURI) || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = __webpack_require__.hmrS_jsonp = __webpack_require__.hmrS_jsonp || {\n\t\"main\": 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\nvar currentUpdatedModulesList;\nvar waitingUpdateResolves = {};\nfunction loadUpdateChunk(chunkId, updatedModulesList) {\n\tcurrentUpdatedModulesList = updatedModulesList;\n\treturn new Promise(function(resolve, reject) {\n\t\twaitingUpdateResolves[chunkId] = resolve;\n\t\t// start update chunk loading\n\t\tvar url = __webpack_require__.p + __webpack_require__.hu(chunkId);\n\t\t// create error before stack unwound to get useful stacktrace later\n\t\tvar error = new Error();\n\t\tvar loadingEnded = function(event) {\n\t\t\tif(waitingUpdateResolves[chunkId]) {\n\t\t\t\twaitingUpdateResolves[chunkId] = undefined\n\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\terror.message = 'Loading hot update chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\terror.type = errorType;\n\t\t\t\terror.request = realSrc;\n\t\t\t\terror.event = event;\n\t\t\t\treject(error);\n\t\t\t}\n\t\t};\n\t\t__webpack_require__.l(url, loadingEnded);\n\t});\n}\n\nself[\"webpackHotUpdatecrdregister\"] = function(chunkId, moreModules, runtime) {\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\tcurrentUpdate[moduleId] = moreModules[moduleId];\n\t\t\tcurrentUpdatedModulesList && currentUpdatedModulesList.push(moduleId);\n\t\t}\n\t}\n\tif(runtime) currentUpdateRuntime.push(runtime);\n\tif(waitingUpdateResolves[chunkId]) {\n\t\twaitingUpdateResolves[chunkId]();\n\t\twaitingUpdateResolves[chunkId] = undefined;\n\t}\n};\n\nvar currentUpdateChunks;\nvar currentUpdate;\nvar currentUpdateRemovedChunks;\nvar currentUpdateRuntime;\nfunction applyHandler(options) {\n\tif (__webpack_require__.f) delete __webpack_require__.f.jsonpHmr;\n\tcurrentUpdateChunks = (\n\t\t(undefined)\n\t);\n\tfunction getAffectedModuleEffects(updateModuleId) {\n\t\tvar outdatedModules = [updateModuleId];\n\t\tvar outdatedDependencies = {};\n\n\t\tvar queue = outdatedModules.map(function (id) {\n\t\t\treturn {\n\t\t\t\tchain: [id],\n\t\t\t\tid: id\n\t\t\t};\n\t\t});\n\t\twhile (queue.length > 0) {\n\t\t\tvar queueItem = (queue.pop());\n\t\t\tvar moduleId = queueItem.id;\n\t\t\tvar chain = queueItem.chain;\n\t\t\tvar module = __webpack_require__.c[moduleId];\n\t\t\tif (\n\t\t\t\t!module ||\n\t\t\t\t(module.hot._selfAccepted && !module.hot._selfInvalidated)\n\t\t\t)\n\t\t\t\tcontinue;\n\t\t\tif (module.hot._selfDeclined) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"self-declined\",\n\t\t\t\t\tchain: chain,\n\t\t\t\t\tmoduleId: moduleId\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (module.hot._main) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"unaccepted\",\n\t\t\t\t\tchain: chain,\n\t\t\t\t\tmoduleId: moduleId\n\t\t\t\t};\n\t\t\t}\n\t\t\tfor (var i = 0; i < module.parents.length; i++) {\n\t\t\t\tvar parentId = module.parents[i];\n\t\t\t\tvar parent = __webpack_require__.c[parentId];\n\t\t\t\tif (!parent) continue;\n\t\t\t\tif (parent.hot._declinedDependencies[moduleId]) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"declined\",\n\t\t\t\t\t\tchain: chain.concat([parentId]),\n\t\t\t\t\t\tmoduleId: moduleId,\n\t\t\t\t\t\tparentId: parentId\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (outdatedModules.indexOf(parentId) !== -1) continue;\n\t\t\t\tif (parent.hot._acceptedDependencies[moduleId]) {\n\t\t\t\t\tif (!outdatedDependencies[parentId])\n\t\t\t\t\t\toutdatedDependencies[parentId] = [];\n\t\t\t\t\taddAllToSet(outdatedDependencies[parentId], [moduleId]);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tdelete outdatedDependencies[parentId];\n\t\t\t\toutdatedModules.push(parentId);\n\t\t\t\tqueue.push({\n\t\t\t\t\tchain: chain.concat([parentId]),\n\t\t\t\t\tid: parentId\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttype: \"accepted\",\n\t\t\tmoduleId: updateModuleId,\n\t\t\toutdatedModules: outdatedModules,\n\t\t\toutdatedDependencies: outdatedDependencies\n\t\t};\n\t}\n\n\tfunction addAllToSet(a, b) {\n\t\tfor (var i = 0; i < b.length; i++) {\n\t\t\tvar item = b[i];\n\t\t\tif (a.indexOf(item) === -1) a.push(item);\n\t\t}\n\t}\n\n\t// at begin all updates modules are outdated\n\t// the \"outdated\" status can propagate to parents if they don't accept the children\n\tvar outdatedDependencies = {};\n\tvar outdatedModules = [];\n\tvar appliedUpdate = {};\n\n\tvar warnUnexpectedRequire = function warnUnexpectedRequire(module) {\n\t\tconsole.warn(\n\t\t\t\"[HMR] unexpected require(\" + module.id + \") to disposed module\"\n\t\t);\n\t};\n\n\tfor (var moduleId in currentUpdate) {\n\t\tif (__webpack_require__.o(currentUpdate, moduleId)) {\n\t\t\tvar newModuleFactory = currentUpdate[moduleId];\n\t\t\tvar result = newModuleFactory\n\t\t\t\t? getAffectedModuleEffects(moduleId)\n\t\t\t\t: {\n\t\t\t\t\t\ttype: \"disposed\",\n\t\t\t\t\t\tmoduleId: moduleId\n\t\t\t\t\t};\n\t\t\tvar abortError = false;\n\t\t\tvar doApply = false;\n\t\t\tvar doDispose = false;\n\t\t\tvar chainInfo = \"\";\n\t\t\tif (result.chain) {\n\t\t\t\tchainInfo = \"\\nUpdate propagation: \" + result.chain.join(\" -> \");\n\t\t\t}\n\t\t\tswitch (result.type) {\n\t\t\t\tcase \"self-declined\":\n\t\t\t\t\tif (options.onDeclined) options.onDeclined(result);\n\t\t\t\t\tif (!options.ignoreDeclined)\n\t\t\t\t\t\tabortError = new Error(\n\t\t\t\t\t\t\t\"Aborted because of self decline: \" +\n\t\t\t\t\t\t\t\tresult.moduleId +\n\t\t\t\t\t\t\t\tchainInfo\n\t\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"declined\":\n\t\t\t\t\tif (options.onDeclined) options.onDeclined(result);\n\t\t\t\t\tif (!options.ignoreDeclined)\n\t\t\t\t\t\tabortError = new Error(\n\t\t\t\t\t\t\t\"Aborted because of declined dependency: \" +\n\t\t\t\t\t\t\t\tresult.moduleId +\n\t\t\t\t\t\t\t\t\" in \" +\n\t\t\t\t\t\t\t\tresult.parentId +\n\t\t\t\t\t\t\t\tchainInfo\n\t\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"unaccepted\":\n\t\t\t\t\tif (options.onUnaccepted) options.onUnaccepted(result);\n\t\t\t\t\tif (!options.ignoreUnaccepted)\n\t\t\t\t\t\tabortError = new Error(\n\t\t\t\t\t\t\t\"Aborted because \" + moduleId + \" is not accepted\" + chainInfo\n\t\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"accepted\":\n\t\t\t\t\tif (options.onAccepted) options.onAccepted(result);\n\t\t\t\t\tdoApply = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"disposed\":\n\t\t\t\t\tif (options.onDisposed) options.onDisposed(result);\n\t\t\t\t\tdoDispose = true;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(\"Unexception type \" + result.type);\n\t\t\t}\n\t\t\tif (abortError) {\n\t\t\t\treturn {\n\t\t\t\t\terror: abortError\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (doApply) {\n\t\t\t\tappliedUpdate[moduleId] = (\n\t\t\t\t\tnewModuleFactory\n\t\t\t\t);\n\t\t\t\taddAllToSet(\n\t\t\t\t\toutdatedModules,\n\t\t\t\t\t(result.outdatedModules)\n\t\t\t\t);\n\t\t\t\tvar resultOutdatedDependencies =\n\t\t\t\t\t(\n\t\t\t\t\t\tresult.outdatedDependencies\n\t\t\t\t\t);\n\t\t\t\tfor (moduleId in resultOutdatedDependencies) {\n\t\t\t\t\tif (__webpack_require__.o(resultOutdatedDependencies, moduleId)) {\n\t\t\t\t\t\tif (!outdatedDependencies[moduleId])\n\t\t\t\t\t\t\toutdatedDependencies[moduleId] = [];\n\t\t\t\t\t\taddAllToSet(\n\t\t\t\t\t\t\toutdatedDependencies[moduleId],\n\t\t\t\t\t\t\tresultOutdatedDependencies[moduleId]\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (doDispose) {\n\t\t\t\taddAllToSet(outdatedModules, [result.moduleId]);\n\t\t\t\tappliedUpdate[moduleId] = warnUnexpectedRequire;\n\t\t\t}\n\t\t}\n\t}\n\tcurrentUpdate = (\n\t\t(undefined)\n\t);\n\n\t// Store self accepted outdated modules to require them later by the module system\n\tvar outdatedSelfAcceptedModules = [];\n\tfor (var j = 0; j < outdatedModules.length; j++) {\n\t\tvar outdatedModuleId = outdatedModules[j];\n\t\tvar module = __webpack_require__.c[outdatedModuleId];\n\t\tif (\n\t\t\tmodule &&\n\t\t\t(module.hot._selfAccepted || module.hot._main) &&\n\t\t\t// removed self-accepted modules should not be required\n\t\t\tappliedUpdate[outdatedModuleId] !== warnUnexpectedRequire &&\n\t\t\t// when called invalidate self-accepting is not possible\n\t\t\t!module.hot._selfInvalidated\n\t\t) {\n\t\t\toutdatedSelfAcceptedModules.push({\n\t\t\t\tmodule: outdatedModuleId,\n\t\t\t\trequire: module.hot._requireSelf,\n\t\t\t\terrorHandler: module.hot._selfAccepted\n\t\t\t});\n\t\t}\n\t}\n\n\tvar moduleOutdatedDependencies;\n\n\treturn {\n\t\tdispose: function () {\n\t\t\tcurrentUpdateRemovedChunks.forEach(function (chunkId) {\n\t\t\t\tdelete installedChunks[chunkId];\n\t\t\t});\n\t\t\tcurrentUpdateRemovedChunks = (\n\t\t\t\t(undefined)\n\t\t\t);\n\n\t\t\tvar idx;\n\t\t\tvar queue = outdatedModules.slice();\n\t\t\twhile (queue.length > 0) {\n\t\t\t\tvar moduleId = (queue.pop());\n\t\t\t\tvar module = __webpack_require__.c[moduleId];\n\t\t\t\tif (!module) continue;\n\n\t\t\t\tvar data = {};\n\n\t\t\t\t// Call dispose handlers\n\t\t\t\tvar disposeHandlers = module.hot._disposeHandlers;\n\t\t\t\tfor (j = 0; j < disposeHandlers.length; j++) {\n\t\t\t\t\tdisposeHandlers[j].call(null, data);\n\t\t\t\t}\n\t\t\t\t__webpack_require__.hmrD[moduleId] = data;\n\n\t\t\t\t// disable module (this disables requires from this module)\n\t\t\t\tmodule.hot.active = false;\n\n\t\t\t\t// remove module from cache\n\t\t\t\tdelete __webpack_require__.c[moduleId];\n\n\t\t\t\t// when disposing there is no need to call dispose handler\n\t\t\t\tdelete outdatedDependencies[moduleId];\n\n\t\t\t\t// remove \"parents\" references from all children\n\t\t\t\tfor (j = 0; j < module.children.length; j++) {\n\t\t\t\t\tvar child = __webpack_require__.c[module.children[j]];\n\t\t\t\t\tif (!child) continue;\n\t\t\t\t\tidx = child.parents.indexOf(moduleId);\n\t\t\t\t\tif (idx >= 0) {\n\t\t\t\t\t\tchild.parents.splice(idx, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// remove outdated dependency from module children\n\t\t\tvar dependency;\n\t\t\tfor (var outdatedModuleId in outdatedDependencies) {\n\t\t\t\tif (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) {\n\t\t\t\t\tmodule = __webpack_require__.c[outdatedModuleId];\n\t\t\t\t\tif (module) {\n\t\t\t\t\t\tmoduleOutdatedDependencies =\n\t\t\t\t\t\t\toutdatedDependencies[outdatedModuleId];\n\t\t\t\t\t\tfor (j = 0; j < moduleOutdatedDependencies.length; j++) {\n\t\t\t\t\t\t\tdependency = moduleOutdatedDependencies[j];\n\t\t\t\t\t\t\tidx = module.children.indexOf(dependency);\n\t\t\t\t\t\t\tif (idx >= 0) module.children.splice(idx, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tapply: function (reportError) {\n\t\t\tvar acceptPromises = [];\n\t\t\t// insert new code\n\t\t\tfor (var updateModuleId in appliedUpdate) {\n\t\t\t\tif (__webpack_require__.o(appliedUpdate, updateModuleId)) {\n\t\t\t\t\t__webpack_require__.m[updateModuleId] = appliedUpdate[updateModuleId];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// run new runtime modules\n\t\t\tfor (var i = 0; i < currentUpdateRuntime.length; i++) {\n\t\t\t\tcurrentUpdateRuntime[i](__webpack_require__);\n\t\t\t}\n\n\t\t\t// call accept handlers\n\t\t\tfor (var outdatedModuleId in outdatedDependencies) {\n\t\t\t\tif (__webpack_require__.o(outdatedDependencies, outdatedModuleId)) {\n\t\t\t\t\tvar module = __webpack_require__.c[outdatedModuleId];\n\t\t\t\t\tif (module) {\n\t\t\t\t\t\tmoduleOutdatedDependencies =\n\t\t\t\t\t\t\toutdatedDependencies[outdatedModuleId];\n\t\t\t\t\t\tvar callbacks = [];\n\t\t\t\t\t\tvar errorHandlers = [];\n\t\t\t\t\t\tvar dependenciesForCallbacks = [];\n\t\t\t\t\t\tfor (var j = 0; j < moduleOutdatedDependencies.length; j++) {\n\t\t\t\t\t\t\tvar dependency = moduleOutdatedDependencies[j];\n\t\t\t\t\t\t\tvar acceptCallback =\n\t\t\t\t\t\t\t\tmodule.hot._acceptedDependencies[dependency];\n\t\t\t\t\t\t\tvar errorHandler =\n\t\t\t\t\t\t\t\tmodule.hot._acceptedErrorHandlers[dependency];\n\t\t\t\t\t\t\tif (acceptCallback) {\n\t\t\t\t\t\t\t\tif (callbacks.indexOf(acceptCallback) !== -1) continue;\n\t\t\t\t\t\t\t\tcallbacks.push(acceptCallback);\n\t\t\t\t\t\t\t\terrorHandlers.push(errorHandler);\n\t\t\t\t\t\t\t\tdependenciesForCallbacks.push(dependency);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (var k = 0; k < callbacks.length; k++) {\n\t\t\t\t\t\t\tvar result;\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tresult = callbacks[k].call(null, moduleOutdatedDependencies);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\tif (typeof errorHandlers[k] === \"function\") {\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t(errorHandlers[k])(err, {\n\t\t\t\t\t\t\t\t\t\t\tmoduleId: outdatedModuleId,\n\t\t\t\t\t\t\t\t\t\t\tdependencyId: dependenciesForCallbacks[k]\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t} catch (err2) {\n\t\t\t\t\t\t\t\t\t\tif (options.onErrored) {\n\t\t\t\t\t\t\t\t\t\t\toptions.onErrored({\n\t\t\t\t\t\t\t\t\t\t\t\ttype: \"accept-error-handler-errored\",\n\t\t\t\t\t\t\t\t\t\t\t\tmoduleId: outdatedModuleId,\n\t\t\t\t\t\t\t\t\t\t\t\tdependencyId: dependenciesForCallbacks[k],\n\t\t\t\t\t\t\t\t\t\t\t\terror: err2,\n\t\t\t\t\t\t\t\t\t\t\t\toriginalError: err\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (!options.ignoreErrored) {\n\t\t\t\t\t\t\t\t\t\t\treportError(err2);\n\t\t\t\t\t\t\t\t\t\t\treportError(err);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (options.onErrored) {\n\t\t\t\t\t\t\t\t\t\toptions.onErrored({\n\t\t\t\t\t\t\t\t\t\t\ttype: \"accept-errored\",\n\t\t\t\t\t\t\t\t\t\t\tmoduleId: outdatedModuleId,\n\t\t\t\t\t\t\t\t\t\t\tdependencyId: dependenciesForCallbacks[k],\n\t\t\t\t\t\t\t\t\t\t\terror: err\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (!options.ignoreErrored) {\n\t\t\t\t\t\t\t\t\t\treportError(err);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tresult &&\n\t\t\t\t\t\t\t\ttypeof ((result).then) ===\n\t\t\t\t\t\t\t\t\t\"function\"\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tacceptPromises.push((result));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar onAccepted = function () {\n\t\t\t\t// Load self accepted modules\n\t\t\t\tfor (var o = 0; o < outdatedSelfAcceptedModules.length; o++) {\n\t\t\t\t\tvar item = outdatedSelfAcceptedModules[o];\n\t\t\t\t\tvar moduleId = item.module;\n\t\t\t\t\ttry {\n\t\t\t\t\t\titem.require(moduleId);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tif (typeof item.errorHandler === \"function\") {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\titem.errorHandler(err, {\n\t\t\t\t\t\t\t\t\tmoduleId: moduleId,\n\t\t\t\t\t\t\t\t\tmodule: __webpack_require__.c[moduleId]\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} catch (err1) {\n\t\t\t\t\t\t\t\tif (options.onErrored) {\n\t\t\t\t\t\t\t\t\toptions.onErrored({\n\t\t\t\t\t\t\t\t\t\ttype: \"self-accept-error-handler-errored\",\n\t\t\t\t\t\t\t\t\t\tmoduleId: moduleId,\n\t\t\t\t\t\t\t\t\t\terror: err1,\n\t\t\t\t\t\t\t\t\t\toriginalError: err\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (!options.ignoreErrored) {\n\t\t\t\t\t\t\t\t\treportError(err1);\n\t\t\t\t\t\t\t\t\treportError(err);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (options.onErrored) {\n\t\t\t\t\t\t\t\toptions.onErrored({\n\t\t\t\t\t\t\t\t\ttype: \"self-accept-errored\",\n\t\t\t\t\t\t\t\t\tmoduleId: moduleId,\n\t\t\t\t\t\t\t\t\terror: err\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!options.ignoreErrored) {\n\t\t\t\t\t\t\t\treportError(err);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn Promise.all(acceptPromises)\n\t\t\t\t.then(onAccepted)\n\t\t\t\t.then(function () {\n\t\t\t\t\treturn outdatedModules;\n\t\t\t\t});\n\t\t}\n\t};\n}\n__webpack_require__.hmrI.jsonp = function (moduleId, applyHandlers) {\n\tif (!currentUpdate) {\n\t\tcurrentUpdate = {};\n\t\tcurrentUpdateRuntime = [];\n\t\tcurrentUpdateRemovedChunks = [];\n\t\tapplyHandlers.push(applyHandler);\n\t}\n\tif (!__webpack_require__.o(currentUpdate, moduleId)) {\n\t\tcurrentUpdate[moduleId] = __webpack_require__.m[moduleId];\n\t}\n};\n__webpack_require__.hmrC.jsonp = function (\n\tchunkIds,\n\tremovedChunks,\n\tremovedModules,\n\tpromises,\n\tapplyHandlers,\n\tupdatedModulesList,\n\tcss,\n\tforceLoadChunks\n) {\n\tapplyHandlers.push(applyHandler);\n\tcurrentUpdateChunks = {};\n\tcurrentUpdateRemovedChunks = removedChunks;\n\tcurrentUpdate = removedModules.reduce(function (obj, key) {\n\t\tobj[key] = false;\n\t\treturn obj;\n\t}, ({}));\n\tcurrentUpdateRuntime = [];\n\tchunkIds.forEach(function (chunkId) {\n\t\tif (\n\t\t\t__webpack_require__.o(installedChunks, chunkId) &&\n\t\t\tinstalledChunks[chunkId] !== undefined\n\t\t) {\n\t\t\tpromises.push(loadUpdateChunk(chunkId, updatedModulesList));\n\t\t\tcurrentUpdateChunks[chunkId] = true;\n\t\t} else {\n\t\t\tcurrentUpdateChunks[chunkId] = false;\n\t\t}\n\t});\n\tif (__webpack_require__.f) {\n\t\t__webpack_require__.f.jsonpHmr = function (chunkId, promises) {\n\t\t\tif (\n\t\t\t\tcurrentUpdateChunks &&\n\t\t\t\t__webpack_require__.o(currentUpdateChunks, chunkId) &&\n\t\t\t\t!currentUpdateChunks[chunkId]\n\t\t\t) {\n\t\t\t\tpromises.push(loadUpdateChunk(chunkId));\n\t\t\t\tcurrentUpdateChunks[chunkId] = true;\n\t\t\t}\n\t\t};\n\t\t// Force-load chunks that now own modules orphaned by a removed chunk;\n\t\t// ensure handlers skip already-installed chunks, so no guard is needed.\n\t\tif (forceLoadChunks) {\n\t\t\tforceLoadChunks.forEach(function (chunkId) {\n\t\t\t\tObject.keys(__webpack_require__.f).forEach(function (key) {\n\t\t\t\t\t__webpack_require__.f[key](chunkId, promises);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n};\n\n__webpack_require__.hmrM = function() {\n\tif (typeof fetch === \"undefined\") throw new Error(\"No browser support: need fetch API\");\n\treturn fetch(__webpack_require__.p + __webpack_require__.hmrF()).then(function(response) {\n\t\tif(response.status === 404) return; // no update available\n\t\tif(!response.ok) throw new Error(\"Failed to fetch update manifest \" + response.statusText);\n\t\treturn response.json();\n\t});\n};\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkcrdregister\"] = self[\"webpackChunkcrdregister\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","","// module cache are used so entry inlining is disabled\n// startup\n// Load entry module and return exports\n__webpack_require__.O(undefined, [\"defaultVendors\"], function() { return __webpack_require__(\"./src/PosScripts/globals.js\"); })\n__webpack_require__.O(undefined, [\"defaultVendors\"], function() { return __webpack_require__(\"./src/PosScripts/main.js\"); })\n__webpack_require__.O(undefined, [\"defaultVendors\"], function() { return __webpack_require__(\"./src/PosScripts/index.js\"); })\nvar __webpack_exports__ = __webpack_require__.O(undefined, [\"defaultVendors\"], function() { return __webpack_require__(\"./src/PosScripts/entry.js\"); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n",""],"names":["window","buildConfiguration","isSite","module","exports","OptionsTreeItem","_createClass","el","_classCallCheck","angular","controller","$scope","$rootScope","configService","errorService","customerService","helperService","$element","constants","$timeout","gettextCatalog","liveSearchService","$q","customer","searchText","searchTextLive","customerSearchList","showViewDetails","searchLimit","customerSearchLimit","mode","enableLoyalty","isOnline","minSymbolsToStartSearch","minSymbolsMessage","getString","cnt","notSetAddressTypeText","debounceTime","countries","submittedTab","submittedEditTab","tabs","contactTabIndex","billingSelected","shippingSelected","fcss","innerHeight","$on","event","object","formatBalance","addressTypes","Name","newCustomer","Contacts","Email","Phone","MobilePhone","Addresses","Line1","Type","Account","ID","Status","Currency","currency","EnableLoyaltyPoints","LoyaltyPoints","StoreCredits","UseSameForBilling","SendReceiptViaEmail","loadCountries","$","blockUI","then","resp","data","err","showError","unblockUI","resetNewCustomer","MarketingConsent","trigger","setCustomerLoadMode","loadOnline","currentTabCreate","prevTabCreate","isCustomersGrid","addCustomerForm","$setPristine","console","log","initSelects","showDialog","focus","editCustomerShowHandler","resetTabdrop","contractSelected","currentTab","prevTab","existShipping","existBilling","editedCustomer","copy","shippingAddr","filter","x","each","idx","billingAddr","length","push","open","index","findIndex","addr","_shippingAddr$","selectedShippingAddr","_objectSpread","_billingAddr$","selectedBillingAddr","groupValidation","groupName","isTouched","isValid","editCustomerForm","SCOPE","updateTabdrop","formType","options","selectSearch","selectSearchNotFound","selectSearchPlaceholder","attr","styler","firstRunEditDialog","fullReset","removeClass","ctrl","tabdrop","text","editedCustomerContact","Contact","editedCustomerContactObjcet","editedCustomerAddress","Address","editedCustomerAddressObjcet","liveSearchIsOpen","$watch","newValue","oldValue","fitHeightTypeahead","loadCustomersOnlineResults","liveSearchCustomer","val","isMobileDesign","isLoading","filterCustomerData","loadCustomers","res","Customers","SearchText","liveSearchResults","mapOnlineCustomers","slice","liveSearchFinished","name","liveSearchSelected","item","model","label","Array","from","target","classList","includes","viewDetailsButtonHandler","searchCustomerID","id","searchCustomerEmail","email","searchCustomer","CustomerID","Keyboard","hide","hideKeyboard","$broadcast","liveKeyPress","which","canShowErrors","searchCustomerLoadCustomers","forceOnline","pr","deferred","defer","resolve","promise","selectCustomer","addCustomer","isMobile","searchCustomerForm","$invalid","searchCustomerText","cancelDialog","initialModeValue","cancelEditCustomerDialogModal","closeDialog","action","createCustomer","validateCreateModal","a","City","forEach","State","StateProvince","Postcode","ZipPostCode","DefaultForType","Line2","Country","LocatoinID","lastOutletID","AddressID","CitySuburb","TaxExemptionReasonCode","ValidationState","ValidationText","c","ContactID","Website","IncludeInEmail","Fax","Comment","JobTitle","TaxRuleID","EffectivePercentInclusive","EffectivePercentExclusive","unshift","handleDefaultAddress","form","type","address","touchAddress","$name","ad","editCustomer","validateModal","saveMainInfo","saveContacts","saveShipping","saveBilling","isContactsTouched","customerToSave","contactsToRemove","addressesToRemove","indexOf","splice","updateMode","d","extend","updateCustomer","onCustomerUpdated","currentSale","cancelDialogModal","editCustomerContact","Customer","editCustomerAddress","switchMode","setAddNew","setFocusToFirstInput","getNewCustomerAddressClass","validateNewCustomer","validateShippingAdress","validateBillingAdress","getFieldClass","fieldLengthGT","field","undefined","$dirty","$error","required","touchMainInfo","touched","touchContact","isMarketingConsent","arguments","concatsGroup","find","tabIndex","tab","contactName","concat","phone","mobilePhone","tabIsTouched","tabIsValid","$valid","$setDirty","group","line1","line2","city","state","zipCode","country","defaultForType","validateForm","valid","getNextItem","currentIdx","some","getPrevItem","reverse","existPrevNumber","existNextNumber","changeTab","tabNumber","email_0","changeTabCreate","prevPane","nextPane","shippingAddressRequired","billingAddressRequired","addressS","$viewValue","astateS","acountryS","azipPostCodeS","acityS","addressB","astateB","acountryB","azipPostCodeB","acityB","title","hasError","isRequired","errors","i","contact","v","join","userManagementService","localDBProvider","jsStoreProvider","deviceInfo","settingsProvider","isSimulator","hideUsersAssignedToAllLocations","salesRepresentative","salesRepresentativeSearchList","firstShow","hideUsersAssignedToAllLocationsChanged","value","setHideUsersAssignedToAllLocations","searchSalesRepresentative","getHideUsersAssignedToAllLocations","r","Value","show","searchSalesRepresentativeForm","searchSalesRepresentativeID","filters","HideAllLocations","searchSaleRepresentatives","SaleRepresentatives","selectSalesRepresentative","addSalesRepresentative","shippingAddressSearchList","emptyText","resultCount","salesShippingAddress","customerAddressData","shippingAddressList","defaultShippingAddressIndex","pop","map","displayText","displayAddress","prvSelectedAddressData","selectedAddressData","selectedAddress","getEmptyText","searchShippingAddress","filterText","toLowerCase","closeKeyboard","selectSalesShippingAddress","addSalesShippingAddress","selectedSalesShippingAddress","soundService","printService","STATUS_DRAFT","QuantityPropName","ShowAtLocations","availableProducts","groupedAvailableProducts","displayAvailableProducts","firstScanFormShow","firstAddFormShow","dateFormat","getDateByFormatForDatePickers","currentOrder","firstScanStart","isScanDlgVisible","itemQuantityDlg","quantityObject","scanGridProducts","modifyTransferItemFunc","showScanDlg","evt","scanError","scanSuccess","setMultiscan","stockTakeScanData","totalCount","inStocktransferCount","reconnect","click","Number","parent","stockTransferActiveTab","stocktakeScanActiveTab","clearScanData","multiScanText","getMultiscan","hideScanDlg","modifyTransferItem","row","isAbsolute","manualPress","comparator","b","searchProductList","Barcode","ProductCode","barcode","rows","msg","message","playBad","playGood","makeQuantityObject","String","fromCharCode","scanStockTransfer","arr","split","br","trim","showSetQuantityDlg","dataStatus","showItemQuantityDlg","refID","Adjustment","QuantityOnHand","OnHand","OnOrder","QuantityAvailable","Available","showOnHand","hideBarcode","readOnly","ProductID","elID","setQuantity","prm","adjustStockTransfer","processed","liveSearch","showMaxVisibleLiveSearchCountMsg","searchProductID","scanGridSearchText","placeMaxVisibleLiveSearchCountMsg","lst","getBoundingClientRect","width","height","css","left","bottom","searchType","filtered","searchLocationID","LocationID","searchExpiryDate","ExpiryDate","searchBatchSN","BatchSN","scanGridSearch","deferred2","scanGridCancelSearchMode","saleService","surchargeService","surcharge","surcharges","isCustom","paymentProcessorID","realSum","calculateSurcharges","selectSurcharge","addSurcharge","PaymentRealAmount","service","monochrome","scaleX","scaleY","rotation","arrBarcodes","clearBarcodes","initBarcode","elemID","altText","opts","imgDiv","html","barcodeText","replace","barcodeAltText","initArr","elt","sym","desc","opt","bw","BWIPJS","bwipjs_fonts","canvas","document","getElementById","style","visibility","tmp","eq","substr","alttext","includetext","backgroundcolor","bitmap","Bitmap","scale","pad","paddingwidth","paddingheight","BWIPP","e","display","errorText","stack","obj","renderBarcodes","loadfonts","len","render","dataURL","toDataURL","clearFonts","fontsets","f","fonts","loadAllFonts","monocolor","_loop","fst","Object","getOwnPropertyNames","sizes","j","sz","getglyph","minchar","initForReceiptInProgress","initForReceipt","receiptSaleModel","is","toUpperCase","THIS","elem","parceBarcodeWeightBased","SKU","advancedBarcodeMode","isGS1Mode","decimalPoint","advancedBarcodeValueDecimalPoint","IsDS1","prefix","parseInt","IsDS1PriceBased","advancedBarcodeSKULength","advancedBarcodeValueLength","isNaN","dec","UseOutletSKU","advancedBarcodeUseOutletSKU","getWeightAmount","amount","SpecAmount","parseFloat","setPriceBasedItemValue","elAdded","PriceBasedValue","Amount","Count","sjcl","unpackStr","$http","getNCache","url","bitArray","hash","sha256","fileName","codec","hex","fromBits","fileEntry","prepareFolder","fl","getFile","fe","readFile","requestConfig","method","cache","ContentType","Hash","objStr","Image","writeFile","deffered","reject","resolveLocalFileSystemURL","cordova","file","cacheDirectory","folder","getDirectory","create","dirEntry","exclusive","reader","FileReader","onloadend","result","readAsText","dataObj","createWriter","fileWriter","onwriteend","onerror","toString","blb","Blob","seek","write","clearCache","removeRecursively","isSequential","fireEvent","_","needFireEvent","scan2","finishScan","nextScan","scan","lastFocusedElement","isEmulator","format","cancelled","plugins","barcodeScanner","error","resultDisplayDuration","disableSuccessBeep","loginService","registryService","reportService","uuid2","$uibModal","$location","$locale","cashManagementService","$filter","viewName","constCashManagementViewName","isLoggedIn","goToHomePage","EmptyReason","getFormatedDate","getDateByFormat","getDateByFormatAlreadyLocal","closeRegistryObj","OutletName","lastOutlet","RegistryNumber","lastRegistry","movement","PettyAmount","CustomReason","Reason","currency_symbol","NUMBER_FORMATS","CURRENCY_SYM","fixDropdownHeight","off","offset","prn","closest","prnOff","newHeight","top","onLoad","checkOpenCashDrawer","getActiveRegistrySales","lastRegistryID","lastUserName","total","GiftCardCounted","GiftCardExpected","StoreCreditCounted","StoreCreditExpected","LoyaltyCounted","LoyaltyExpected","CreditCardCounted","CreditCardExpected","getCashMovements","operations","raiseViewChanged","path","calculateTotal","count","expected","removeCash","OperationType","checkBoxes","RemoveNotPetty","RemovePetty","editPosUserDialog","addCash","AddNotPetty","AddPetty","checkFields","reason","$windowElement","setType","addMovement","tempAmount","addCashMovement","newguid","userName","updateRegistryCash","registrySalesID","Reasons","mvm","printCashManagementReport","updateReasons","reasonName","addReason","reasons","cashManagementOparationReasons","getOperationType","getOperationSign","getMovementAmount","isValidAddMovementForm","DEARRound","maxValue","CashExpected","checkMaxValue","cashManagementAmountDlg","cashManagementPettyAmountDlg","tempPettyAmount","showCasgManagementAmountDlg","toggle","showCasgManagementPettyAmountDlg","setCashManagementAmount","setCashManagementPettyAmount","changeAmountType","getReasons","showOpenCashDrawer","hasCashDrawer","hasDrawer","openCashDrawer","remoteRequestProvider","webOnlyProvider","closeRegistryID","registryID","operationType","provider","objArr","CloseRegistryID","RegistryID","OperationTime","moment","utc","SalesRepresentative","addCashMovements","sendOfflineCashManagement","getCashMovementsToSend","promises","Success","ppr","markCashMovementsAsSent","Errors","Exist","Promise","all","sendDelayedOfflineCashManagement","addCallback","addCallbackFunction","password1","password2","dearPosName","userID","oldPassword","warningVisibility","Password1","Password2","password","confirm","confirmPasswordForm","changePassword","showPassword1Warning","showPassword2Warning","clickAndCollectService","keyPressDelayService","productsService","fulfillment","getDateByFormatForMoment","getImageUrl","imageID","subUrl","size","imagesX","imagesY","baseImageURL","loadClickAndCollectSale","taskID","fromOrderLines","PickedLines","InvoiceDateFormated","InvoiceDate","DueDateFormated","DueDate","getPickItemColor","Quantity","pickItemFunc","scanedValue","available","newQuantity","expiryDateDistribution","CostingMethod","skipScanDialog","productFound","skip","closeScanBatchDialog","pickItem","ExpiryDateDistribution","PickLines","showScanBatchDialog","removePickedItemFunc","BaseAvailable","scanedBatch","scanBatchSelectedItem","cancelPressed","showFulfillmentCompletedDialog","closefulfillmentCompletedDialog","submitScanBatch","checkProductSerialNumber","found","ids","respRow","pickedItem","changePickedItemQuantity","stopPropagation","preventDefault","newQuantityValue","isScanBatchDialogVisible","autoPick","TaskID","itemsToRemove","processedProducts","batchNumbers","batchItem","batch","completeFulfillment","payload","SaleID","Lines","UserName","pickedLines","pId","pLine","eId","exp","quantity","clickAndCollectFulfill","PosOrderID","isPartialPayment","localStorage","setItem","JSON","stringify","saleID","subType","toPaymentPage","isFullyPaid","IsPaid","posSale","convertDearSaleIntoPOSSale","currentSaleObject","convertCurrentSaleForAPI","TaxInclusive","OrderNumber","InvoiceNumber","IsFromDearSale","saveSale","errorMessage","error2","ErrorMessage","paidAmount","Payments","Total","Exception","constClickAndCollectViewName","fullFilters","CustomerSearch","SaleNumberSearch","selectedPage","totalPages","itemsByPage","totalRecords","ordersTotal","showNoInvoicesMessage","selectedRow","abs","Math","scrollReachBottomCallback","loadClickAndCollectSales","Orders","OrderDateFormated","SaleOrderDate","fEl","getPages","initPagerOnScroll","search","step","ceil","selectRow","showCustomDialog","callbackModal","getStatusColor","convertFromOld","CalculatorHelperService","AddressType","StartCalcLevel","Enumerable","$interval","stopLoadCheck","page","limit","clickAndCollectAutoPick","calculateTax","dearSale","Date","ReturnID","CheckoutItems","isDiscountPercent","Discount","DiscountTax","comment","CustomerNote","RealPaySum","CalculatedTax","CustomerName","CustomerLoyaltyPoints","CustomerStoreCredits","CustomerEnableLoyaltyPoints","CheckoutItemCount","Balance","LoyaltyPointsTotal","ClearOrderNumber","OrderType","CashChangeAmount","itemDiscount","selectedCoupon","manuallyAppliedDiscount","CashRounding","CustomerEmail","CustomerPhone","DontReloadContacts","ShippingAddress","Shipping","DontReloadAddresses","SaleLines","taxObject","effectivePercentExclusive","Tax","effectivePercentInclusive","ruleID","TaxRule","price","Price","priceWithDiscount","loyaltyEarning","LoyaltyEarning","priceWithT","pl","Tags","BrandID","CategoryID","FamilyID","Note","LoyaltyPointsEarning","PriceWithTax","CanEdit","CanDelete","SaleType","Taxes","BasePrice","BasePriceWithDiscount","Sku","BarCode","ImageID","Discounts","Option1","Option2","Option3","ProductShortDescription","ProductType","SerialNumber","CF1","CF2","CF3","CF4","CF5","CF6","CF7","CF8","CF9","CF10","DefaultPrice","deals","priceWithTax","discount","payment","PaymentProcessorID","DatePaid","ShortName","PaymentTypeName","Loyalty","Reference","Surcharge","showNewCheckoutUI","calculateCheckout","totalSum","convertDearSaleIntoPOSSaleWithRefunds","originalSale","GroupedSale","TotalSurcharge","GhostSurcharge","TotalSale","ExchangeAmount","PaymentsMap","LoyaltyRefundCoeff","cantProcessOffline","sale","refundID","ReturnPayments","Refunds","refundId","refund","IsPartialPaid","IsPartiallyPaid","newRefundOrder","RefundID","RefundLines","PriceWithDiscount","MissingInInvoice","RefundPayments","refPay","pi","pay","s1","sum","p","s2","chIdx","chkItem","FinalPrice","FinalAmount","FinalTaxAmount","makePayment","metadata","starPrinter","requestCharge","response","errorDescription","ServerTransactionID","paymentID","payloadVersion","bypassOutletRegistry","applicationID","applicationKey","loginUserID","tenantID","posName","role","taxCalculationMethod","taxInclucive","tenantTaxRule","ignoreCustomerTaxRule","paymentProcessors","posPaymentProcessors","UserHasSelectedOutlet","applyCustomerDiscountAfterOtherDiscounts","callbackFunctions","dataSendCount","dataSendInterval","hasNetworkConnection","pingFunction","pingFrequency","loginChanges","deliveryTimeInterval","loadCustomersMode","lastOutletInfo","lastPingCall","pingMinInterval","minimalAndroidVersion","isQAMode","pinSize","pinEnabled","pinToken","fractionalLimit","supportMerchantCustomerReceiptPrint","timeZone","posVendorId","supportLinklyMerchantCustomerReceiptPrint","isLinklyPairWithTerminal","requestTimeout","searchProductLimit","keyPressDelay","registryPrefix","registrySuffix","roundTo","roundingRule","currencyCulture","blockSales","lastPosChange","getStartedSuffix","connectionURLSuffix","imageURLSuffix","baseURL","dearAPIBaseUrl","dearAPIImageUrl","enableSoftKbd","isClover","decimalPlaces","zeroTaxID","banknoteDenominations","allowNewCalculations","autoLockAfter","giftCardSettings","hasCamera","configuration","getItem","getStartedURL","connectionURL","setBaseURL","newUrl","endsWith","setImageURL","lastDearPosName","setLastDearPosName","n","setLastUserName","lastDisplayUserName","setLastDisplayUserName","setPingFunction","func","setNetworkMode","_isOnline","pingResponse","old","changeState","execCallbackFunctions","updateInProcess","updateInProcessResult","callCallbackFunctions","updateCardPaymentIDsFromOutlet","useTyro","TyroMerchantID","tyroMerchantID","useTriPOS","TriPOSAccountID","triPOSAccountID","TriPOSAcceptorID","triPOSAcceptorID","TriPOSAccountToken","triPOSAccountToken","useLinkly","LinklyUserName","linklyUserName","LinklyPassword","linklyPassword","useWindcave","WindcaveStation","windcaveStation","lastECSMappingOutletID","lastOutletTax","lastSquareLocationID","lastSquareIntegrationID","lastPaymentSenseURL","lastPaymentSenseAPIKey","lastSurchargeTax","info","parse","setLastOutlet","outletConfig","PosOutletID","EcsLocationMappingID","SquareLocationID","SquareIntegrationID","PaymentSenseURL","PaymentSenseAPIKey","SurchargeTax","Info","customizedSecondScreenUI","CustomizedCustomerDisplayUI","secondScreenBackground","CustomerDisplayBackground","secondScreenLogoUrl","CustomerDisplayLogo","setCurrencyCulture","culture","cashRegistryPaymentProcessorID","receiptID","labelID","quickKeyTemplateID","quickKeyData","tyroTerminalID","triPOSLaneID","catalogTilesSize","catalogTilesVisibility","showProductAvailability","saveReceiptTemplate","tpl","loadReceiptTemplate","saveLabelTemplate","loadLabelTemplate","setLabelTemplate","setLastRegistry","registryName","cashRegistryPaymentProcessorId","setPrinterSettings","setLabelPrinterSettings","getPrinterSystems","canSelectModel","canDiscover","getLabelPrinterSystems","getPrinterSettings","force","printerWidthCode","printerWidthPoints","simulatorMode","printSystem","printerModel","printerName","getLabelPrinterSettings","labelPrinterWidthCode","labelPrinterWidthPointsX","labelPrinterWidthPointsY","labelW","labelH","labelPrintSystem","labelPrinterName","getScannerSettings","hasOwnProperty","enableCameraScan","setScannerSettings","cfg","setCardPaymentSettings","getCardPaymentSettings","providerKey","isAdmin","isManagerAndHigher","isAdminAndConnected","isManagerAndHigherAndConnected","getCardPaymentProcessor","loweredPaymentMethodName","getPaymentMethods","destScope","customPaymentMethods","storeCreditsPaymentProcessorID","creditCardPaymentProcessorID","laybyPaymentProcessorID","giftCardPaymentProcessorID","loyaltyPaymentProcessorID","isGiftCardEnabled","IsGiftCardEnabled","isGiftCardExpirationDateEnabled","CanGiftCardExpire","isGiftCardRefundable","CanGiftCardRefund","getCatalogPageSize","getCatalogPageRows","getCatalogPageCols","getCatalogTilesVisibility","getShowProductAvailability","setNextSequenceNumber","getNextSequenceNumber","intV","getTriPOSUrl","getTriPOSLaneUrl","events","UpdateLanguage","constHomeViewName","constSellViewName","constSessionViewName","constOfflineSalesViewName","constSalesHistoryViewName","constCloseRegistryViewName","constSalesParkedViewName","constProductsViewName","constCustomersViewName","constUserManagementViewName","constDashboardViewName","constProductManagementViewName","constSetupViewName","constPrinterSetupViewName","constLabelPrinterSetupViewName","constInventoryViewName","constInTransitViewName","constReportsViewName","constPaymentTypeSummaryViewName","constProductPerformanceViewName","constSalesSummaryViewName","constGiftCardViewName","constDeliveryViewName","UpdateLanguageFunction","constHomeSectionName","constSessionSectionName","constInventorySectionName","constReportsSectionName","constSellSectionName","constProductsSectionName","constCustomersSectionName","constUsersSectionName","constDashboardSectionName","constProductSectionName","constSetupSectionName","pageSize","parkStatuses","parked","layby","onaccount","pending","minScreenHeight","newGuid","backofficePayment","newSaleTotalCountName","newSaleCountName","giftCardSaleCountName","newOnAccountCountName","newLaybyCountName","newTaxCountName","newSaleDiscountName","refundTotalName","roundingTotalName","newPaymentCountName","maxAllowedPrice","maxAllowedTotalPrice","customKeyboardMaxLenth","playStoreAppLink","appleStoreAppLink","escapeString","s","exportTableToCSV","tableSelector","csv","ignore","col","isAsIs","txt","exportNewTableToCSV","downloadCSV","filename","csvFile","downloadLink","navigator","msSaveBlob","createElement","download","href","URL","createObjectURL","body","appendChild","writeCSVToFile","nativeURL","device","platform","externalDataDirectory","documentsDirectory","dir","blob","hybridModeLoadOnline","startCustomersAutoUpdate","injector","element","me","get","loadCustomersAll","loadMode","_getLoadCustomerProvider","isSupported","SaleBarcode","isOnlineOnStart","status","getCustomer","Id","resolvePromise","rejectPromise","cp","AccountReceivable","RevenueAccount","PriceTier","AdditionalAttribute1","AdditionalAttribute2","AdditionalAttribute3","AdditionalAttribute4","AdditionalAttribute5","AdditionalAttribute6","AdditionalAttribute7","AdditionalAttribute8","AdditionalAttribute9","AdditionalAttribute10","CreditLimit","Comments","removeCustomer","customerID","lockCustomersUpdate","loadCustomersOnInit","getHash","time","needLoad","timeEnd","prUpdate","_typeof","bind","needCheckCount","loadLiveCustomers","LoadOnline","fillCustomersData","checkCustomersOld","getCustomersHash","loadCostomersAll","loadRes","CompareResult","unpack","restored","CustomerHash","isArray","refreshCustomers","customers","Default","mapped","toLowerCamelCase","addresses","mattrixDiscounts","MatrixDiscounts","discounts","searchParameters","allCustomers","customersTotal","tabName","collapseObject","showCollapse","collapse","getAddressString","grep","Boolean","toggleRow","active","lockSearch","checkSearchAndWait","processBarcodeSearch","dispatchEvent","Event","bubbles","showInMobileDesign","showInDesktopDesign","Chart","outletService","stockTakeService","canSeeProfitabilityMetrics","CanSeeStockValue","chartObj","viewMode","startDate","add","startOf","endDate","periodLabel","OutletID","outleDetails","Revenue","SaleCount","CustomerCount","GrossProfit","DiscountValue","DiscountPercent","BasketValue","BasketSize","ReturnCount","COGS","totalValue","loadUserAvailableOutletsWithoutRegister","locations","allowSelectOutlet","reloadData","updatePeriodLabel","setViewMode","viewModeName","currentDate","clone","endOf","prevPeriod","nextPeriod","showDetails","chartName","chartDetails","Title","Outlets","Details","initChart","chartData","Labels","closeDashboardDetailsDialog","destroy","outletID","_startDate","toDateWithCurrentTimeZone","_endDate","getDashboardData","ranges","Ranges","outlets","lastPeriodData","LastPeriodData","SalesRevenue","SalesCount","key","outletData","ECSLocationName","Percent","getPercent","getAvgPercent","sort","compareOutlets","selector","labels","values","empty","ctx","getContext","myChart","datasets","backgroundColor","borderColor","fill","lineTension","pointRadius","pointBackgroundColor","pointBorderWidth","pointBorderColor","pointHoverRadius","pointHoverBackgroundColor","pointHoverBorderWidth","pointHoverBorderColor","responsive","legend","tooltips","enabled","elements","point","pointStyle","scales","xAxes","gridLines","scaleLabel","yAxes","ticks","suggestedMin","round","propName","outlet1","outlet2","factory","dataChangeNotificationService","lastEvents","timer","isInited","init","dataChangeStatuses","mp","lastChange","stop","cancel","JsStore","initialDBCreationScript","script","update2","tx","executeSql","update3","update4","update5","update6","update7","update8","update9","update10","update11","update12","update13","update14","update15","update16","update17","update18","update19","update20","update21","update22","update23","update24","update25","update26","update27","update28","update29","update30","update31","update32","update33","update34","update35","update36","update37","update38","update39","update40","update41","update42","update43","registeredUpdates","appplyUpdates","currentVersion","version","getSchema","settingsTable","columns","dataType","DATA_TYPE","primaryKey","notNull","enableSearch","DateTime","productsTable","multiEntry","customersTable","saleRepresentativesTable","offlineSalesTable","_defineProperty","productsSearchTempTable","registryOrdersTable","dbVersionTable","orderPaymentsTable","tables","canMigrateData","DeliveryHelper","Calendar","dayGridPlugin","$templateCache","$compile","showCompleted","setStatuses","searchFilter","calendar","refetchEvents","deliveryHelper","CreateDeliveryHelper","processParams","cs","removeItem","toDate","fromDate","firstTime","loadData","calendarEl","initialView","firstDay","dayMaxEventRows","loadCalendar","visibleRange","start","end","eventClick","gotoDeliveryList","viewDidMount","toolbar","prepend","addClass","prms","successCallback","failCallback","flt","loadDeliveries","prepareCalendarData","Rows","currentFilter","getFormatedDate2","cantExport","scrollEvent","loadUserAvailableOutletsAndRegistries","singleLocation","newVal","oldVal","nv","ov","equals","searchPress","blur","isNewSearch","cpy","getLocationID","formatRow","where","select","firstOrDefault","dateSelectedCallback","to","rtm","getFormatedLocalDateTime","StatusDate","FormattedDate","date","FormattedTime","formatTime","VoidDate","FormattedVoidDate","deactivateSchedule","dialogMode","currentRow","changeDeliveryStatus","editRow","EntityID","addNew","print","printDeliveries","printPdfReport","CompleteDeliveryTask","locationID","UpdateDeliveryTaskStatus","CancelDeliveryTask","$this","querySelector","scrollTop","scrollHeight","fullCalendar","dt","getFullYear","getMonth","uuid2Service","isContact","caption","deliveryInterval","customerName","contactID","addressID","addressLine1","addressLine2","postCode","deliveryCurrentTime","deliveryCurrentRow","deliveryItems","clearDelivery","clearContact","clearAddress","deliveryTimes","contacts","generateTime","dtStr","selectTimeList","selectTime","TaskStatus","offsetTop","offsetLeft","DeliveryTime","DeliveryDate","ex","setTime","DeliveryTimeDisplay","DeliveryNumber","wasSaved","loadDeliveryBySaleOrder","DeliveryItems","IsNew","editDeliveryCaption","fillContactObject","ContactDetails","fillAddressObject","ShipAddressDetails","processCustomerData","updateControls","datePickerFormat","DeliveryDateOld","setDatepicker","clearTime","fillAddress","fillContact","orderBy","order","toArray","orderByDescending","SelectedContact","foundContact","temp","defaultContact","Save","delivery","currentDelivery","DeliveryID","DeliveryDateStr","toDateFromDatepickerParameter","SaveInternal","exit","ret","SaveDelivery","getMinimalPendingDate","cloneDate","keyboardPartial","dateRangeSelector","details","constructor","prototype","directive","scope","attrs","ngSubmit","setTimeout","unbind","submit","$apply","link","$observe","preparePrintTemplate","attributes","activeElement","isDefined","$emit","require","ngModel","$setViewValue","$eval","ngmEnter","on","container","containerHeight","elHeight","outerHeight","curScroll","position","elPos","elemBottom","restrict","focusedElement","ngmSelect","cacheService","httpSrc","getConfig","takeParentSize","isQuickKeyImage","emptyImage","ngmEmptyImageSrc","$set","getImage","config","isFamily","imageId","isRealFamily","addSize","quickImageType","encodeURIComponent","onChange","transclude","templateUrl","checkDeviceVersion","elems","querySelectorAll","eix","floatPrecision","$parent","selectValue","positiveSign","formattedModel","selectSum","doc","range","selection","createTextRange","moveToElementText","getSelection","createRange","selectNodeContents","removeAllRanges","addRange","resetFontSize","AvailablePT","childClass","defaultSize","children","className","fitFontSize","maxWidth","first","elWidth","offsetWidth","setFocus","clickFun","symb","floor","applyFractionalLimit","tmpModel","pointPos","substring","pressFun","ngmPopoverCallback","ngmDiscountCodeTextModel","ht","dlg","ngmPopoverTarget","btnVar","ngActiveButtonModel","info1Var","ngInfo1Model","canChangeSignVar","ngmCanChangeSignModel","titleVar","ngmPopoverTitleModel","ngmEnterCallCallback","discountCodeZoneCls","ngmDiscountCodeZoneClsModel","ngmTitleCodeText","ngmDiscountCodeTitleText","discountCode","isValidCode","toggleSign","$$childHead","signIsPositive","titleCodeText","prnVar","ngmPopoverDialog","ngmPopoverTitle","placement","ngmPlacement","displayMode","ngmDisplayMode","inited","popel","remove","canChangeSign","LLDiscountType","popover","template","content","compiledContent","$modal","discountCodeFieldTemplate","discountCodeField","append","btnCancel","modal","keyHandler","keyCode","callback","isShown","timeout","activeButton","info1","formatFloatNumber","update","getModelValue","clean","getScope","apply","$interpolate","ngmOptionsCallback","ngmTemplate","ngmOptionsDialog","prnModel","ngmOptionsTitle","entireTemplate","ngmEntireTemplate","currentLevel","currentValue","option1","option2","option3","compiledTitle","selectOption","keys","call","templateCompiled","btnBack","hideDialog","evtHide","$root","handleDestroyEvent","parentOption","EMAIL_REGEXP","elm","$validators","modelValue","$isEmpty","test","ngmMoveFocusTo","fun","ngModelCtrl","equalToValidator","viewValue","checkedVal","thisInputVal","isEnterPressed","mdl","ngmRedirectChangeEvent","sItem","linker","bootstrapSwitch","frm","scp","showValue","ngmShowValue","showModal","ngmShowModal","table","evtName","refreshTable","pipe","tableState","stSelectCombo","query","distinct","stPageSelector","redraw","paginationState","pages","totalItemCount","stPageUpdater","pagination","$parse","preventClick","isTouchmove","moveMoment","timeStamp","cancelable","isDisabled","currentTarget","fn","$event","eventToFire","root","resizeFun","resize","removeResize","dateFrom","dateTo","dateLimit","FormatedDateRange","DateFrom","DateTo","allowReset","checkApplyButtonDisabled","disableApplyButton","bothDatesRequired","translatePredefinedDateRanges","dateDelivery","Code","subtract","month","year","res2","dateRanges","showDateSelector","setDateRange","hideDateSelector","keepData","updateDateRangePlaceholder","days","reset","monthLimit","setMonthLimit","period","toggleClass","updateContentHeight","$content","$contentWrapper","contentTop","contentHeight","screenHeight","bottomMargin","evt1","passKeyboard","evt2","evt3","def","terminal","afterRender","$window","opacity","tip","appendTo","extractOrderIDs","orderID","baseOrderID","standAloneReturn","sendEmailReceipt","emailSubject","emailBody","ignoreOrderID","templateID","documentBody","storeEmailReceipt","setEmailToken","hiddenToken","emailTemplate","PendoService","loadPendoScript","requireAll","context","onCloseCallback","isCriticalError","isHTML","errorObject","isCancelled","msd","exceptionMessage","statusText","showErrorDialog","HEADER_SYNC_STATUS_EVENT","STATUS_OK_AFTER_ERROR_SEND","STATUS_ERROR_SEND_ORDER","STATUS_TOO_LONG","STATUS_OK","downloadFile","_this","mimeType","_downloadWeb","req","responseType","_blobToBase64","printPdf","_downloadInAppBrowser","_downloadMobile","_this2","storageLocation","_getStorageLocation","folderpath","toURL","fileOpener2","success","InAppBrowser","Error","readAsDataURL","$sce","filterService","uibTypeaheadHighlightExFunction","filterInput","m","sel","searchu","filterInputu","searchArr","splitSearchText","intersections","findIntersections","sortIntersections","regions","unionAllIntersections","formatString","initCanvas","adj","textToLengthAdjusted","rhtml","w","trustAsHtml","maxLineWidth","clearCanvas","ff","fs","fw","sfnt","font","measureText","threeDotSpace","diffPos","idx2","increase","str","src","dst","begin","sortedArr","k","isIntersected","unionIntersections","offsetStart","sh","eh","shLength","ehLength","insertStr","max","pend","isStringContainsSearchArray","contains","checkEquality","pos","pos2","minPos","incompatiblePos","min","_MinPT","_AvailablePT","_ww","getCharMeasure","currentChar","pt","measureObject","_chTMP","measureTextWidth","charAt","measureTextHeight","maxHeight","getFontHeight","sourceWidth","sourceHeight","textAlign","textBaseline","fillText","getImageData","firstY","lastY","y","alpha","updateFontSize","child","minSize","checkHeight","innerText","widthSize","heightSize","fSz","fArr","offsetHeight","jsAddCustomerModalPosition","btnPositionTop","btnPositionLeft","btnHeight","modalWidth","btnPositionLeftDialog","onSelectOpened","onViewStyled","onSelectClosed","initTogglers","initCustomerForm","onScrollReachBottomCallback","$div","$divs","onScroll","$container","isEndOfList","barcodeService","googleHelperService","snackbar","SnackBar","sameFont","currentViewName","transmit","pageTitle","currentUser","currentOutlet","currentRegister","selectedLanguage","languages","Text","showHeader","updateDesignMode","indicatorTitle","outletName","updateTitle","changeLanguage","getCurrentLanguage","closeChangeLanguageDialog","closePageNotAvailableDialog","changeLanguageModalInstance","dismiss","setLanguage","setCurrentLanguage","logoff","dropdown","logout","cur","changeOutlet","toggleMenu","next","current","$$route","originalPath","fdf","$el","enableMenu","modalUpdateSettings","showInfoDialog","callBack","showRefreshPageDialog","location","reload","closePageRefreshDialog","refreshPage","closeCancelDialogModalDialog","syncStatus","printerStatus","scannerStatus","tillStatus","make","close","unpackArray","UnpackWorker","NonWrappableContainer","set","o","createNonWrappableContainer","dialogs","local","getFormatedDateAmPm","getFormatedDateAlreadyLocal","getDateFormat","tm","hours","minutes","getFormatedDateWithLocalTime2","getFormatedDateAsIs","getFormatedDateOnlyAsIs","toDateFromDatepickerDirect","toDateFromDatepickerDirectNoZone","convertToDateFromDatepicker","timeStr","skipReplace","toDateFromDatepickerParameterUTC","toISOString","toDateFromDatepicker","toJSON","mins","appendSecs","initCenterModalDialog","parentElement","modalDialog","alignModal","array","okButtonName","cancelButtonName","showCancel","showCustomDialog3","showCheckbox","checkboxValue","checkBoxCallback","checkBoxValue","resizeCallback","closeCallback","one","pressEnterElement","pressEscapeElement","isActive","backdrop","keyboard","okPressed","scope2","dbRawsToArray","places","pow","pv","toFixed","prop","_len","showPageAfterInit","applyCurrency","number","lastActive","erroDialogIsShown","_$windowElement$","_$$","removeProperty","closeBtn","setProperty","infoObject","isWarning","customClass","roundCash","rule","intAmount","lstDigit","lstDigits","elementId","setSelectionRange","inputs","er","alert","z","checkDeviceVersionIsBelowMinimal","guidToFlatString","g","gotoSell","gotoParkedSales","trimArray","extractCurrentQuickKeyInfo","qkey","qdataTemp","qdata","brands","categories","tags","groupingOperator","checkClickedElement","elpt","elementFromPoint","pageX","pageY","getSearchParams","cSearch","sendMessage","dateFormatFun","dateLimitRange","_customClass","datepicker","pickerInited","dtMin","hour","minute","second","dtMax","numberOfMonths","minDate","maxDate","showButtonPanel","onClose","dateText","instance","dpDiv","beforeShow","input","widget","off2","buttonPane","change","_clearDate","_gotoToday","setDatepicker2","beforeFun","closeFun","defaultDate","showOn","butttonImage","getEmailClass","formElement","isLoyaltyEnabled","storeCurrentSale","paymentType","saleType","operationName","restoreCurrentSale","Surcharges","isModalDialog","modalContent","elTop","availableHeight","keyboardHeight","resizeModalTypeahead","isOpen","$elPopup","$resizeContnet","elemHeight","absValue","getModalConfiguration","headerHeight","modalTopPadding","modalBottomPadding","getModalContainerHeight","mobileSettings","modalHeaderHeight","paddings","modalContainerHeight","getGuid","_p8","random","uniqueBy","hashTable","isSyncIndicatorSet","getSaleQueue","queue","createdDate","now","storeSaleQueue","checkNSetIndicator","setIndicator","tmpr","PROCESS_QUEUE_FAIL_THRESHOLD","processQueueToSendFail","failCounter","shift","processQueueToSendSuccess","OperationID","getQueueSaleToSend","shiftItem","compareStrings","treatNullAsValue","addValues","mapToList","setSpecialCurrencySymbols","localeID","GROUP_SEP","DECIMAL_SEP","useWorker","worker","postMessage","onmessage","useNewCalculation","hideDatePickers","b64toBlob","b64Data","contentType","byteCharacters","atob","byteArrays","byteNumbers","charCodeAt","byteArray","Uint8Array","downloadPdfReport","base64Pdf","startsWith","PrintPDF","lnk","cameraScan","sequense","canShowCameraScanIcon","sets","isCameraScanAvailable","getReceiptProcessSettings","promiseWhile","condition","whilst","newObj","newProp","printProcess","win","$uibModalInstance","closeErrorDialog","closeErrorDialogButton","showStartForm","splashscreen","callLogin","callGetStarted","abt","ngGettext","ngSanitize","tooltip","ngTouch","initializeCalculator","Boswer","support","transition","userAgent","fileref","setAttribute","getElementsByTagName","sessionStorage","isNewSession","browser","getParser","isSafari","isBrowser","osVer","getOSVersion","osver","isSafari11","satisfies","macos","safari","mobile","isSafari9","isIE","isOS9","getOSName","searchString","subjectString","isFinite","lastIndex","selectRange","moveEnd","moveStart","onBackKeyDown","_window$buildConfigur","appVersion","getTemplateUrl","app","$routeProvider","tmhDynamicLocaleProvider","when","caseInsensitiveMatch","redirectTo","otherwise","localeLocationPattern","run","cardPayService","receiptService","loyaltyService","put","setupCrd","addEventListener","checkPermissions","initThings","isSecondScreen","$$path","jSqlProvider","secondTerminalService","deviceInfoService","navigateHome","$evalAsync","servicesToAddCallbacks","isVirtual","resumeHandler","packageCode","BuildInfo","packageName","processKbdShow","processKbdHide","startUp","jQuery","symbol","kbdset","mediaDevices","enumerateDevices","devices","kind","connection","Connection","NONE","err2","_iterator","_createForOfIteratorHelper","_step","done","callbackFun","permissions","list","WRITE_EXTERNAL_STORAGE","ACCESS_COARSE_LOCATION","ACCESS_FINE_LOCATION","CAMERA","BLUETOOTH_CONNECT","BLUETOOTH_SCAN","checkPermission","hasPermission","requestPermissions","h","hasClass","hs","actel","scrollIntoView","behavior","block","inline","lpos","scrollBy","currentLanguage","debug","defaults","overlayCSS","background","border","padding","margin","color","cursor","baseZ","onBlock","isBlockUIVisible","onUnblock","loginHandler","isNegative","dbUpdatesService","db","productLikeIndex","chunkSize","dropAndCreate","schema","isDbExist","exists","dropDb","cleanSchema","createDb","openDb","insert","into","migrateData","currentSchema","existingTableNames","t","backupData","backupPromises","tableName","restorePromises","skipDataCheck","getVersionFromTable","recreateDB","freshDbResult","shouldMigrate","getDbSchema","cancelApplication","indexedDB","mozIndexedDB","webkitIndexedDB","msIndexedDB","checkOtherInstances","recreateDBStart","Instance","Worker","import","meta","waitApplication","crdlockDB","ver","getTime","req0","deleteDatabase","prt","onsuccess","onblocked","addCacheRow","productID","ExtraInfo","OutletSKU","Family","ProductFamilyName","productCode","outletSKU","productFamilyName","cF1","cF2","cF3","cF4","cF5","cF6","cF7","cF8","cF9","cF10","buildIndexes","refreshProducts","clear","vals","lastModified","tg","productFamilyID","Category","category","categoryID","DiscountName","discountName","DiscountID","discountID","discountLines","tax","Option1Name","productFamilyOption1Name","Option2Name","productFamilyOption2Name","Option3Name","productFamilyOption3Name","FamilyImageID","familyImageID","brandID","Brand","brand","productShortDescription","FamilyShortDescription","familyShortDescription","StocktakeLocked","stocktakeLocked","productType","costingMethod","Price1","price1","Price2","price2","Price3","price3","Price4","price4","Price5","price5","Price6","price6","Price7","price7","Price8","price8","Price9","price9","Price10","price10","splitBigBulkInsert","bulkInsert","upsert","bulks","getProductByID","qkeytemplate","tempClear","command","groupingOperatorAND","isConditionSet","or","rids","textu","tt","useWeightBasedSearch","useOutletSKU","tempBulkInsert","getSearchCount","tempSelectAll","jq","rs","groupBy","grouping","rs2","getSearchPage","tempSelectByKey","getLiveSearchProducs","checkProductsOld","getProductsHash","familySearch","familyID","tempSelectByFamilyID","getFamilySearchCount","tempSelectByFamilyIDCount","getFamilySearchPage","customerLikeIndex","isPartial","preparePromise","vls","enableLoyaltyPoints","matrixDiscounts","taxRuleID","priceTier","account","creditLimit","taxes","RuleID","LoadedFromLocalDb","cnd","refreshSaleRepresentatives","lpr","posOutletID","checkSaleRepresentativesOld","getSaleRepresentativesHash","loadParkedSales","take","productsSearchTemp","tempPrimaryKey","addOfflineSale","PosName","StatusID","statusID","Packed","InfoPacked","ErrorText","trackOrder","registryCloseID","OrderID","RegistryCloseID","CreatedDate","trackOrderPayments","refundIDs","paymentIDs","refundsJson","paymentsJson","getOrdersForCloseRegistry","by","getOrphanOrders","getOrderPaymentsForCloseRegistry","orders","orderIDs","removeSale","operationID","loadOfflineSalesErrorHistory","keyChain","timeOut","forceDelayOperation","timeDelay","keyChainMinLength","html2canvas","labelPaperWidthCode","deviceIsStarted","labelPrinterOnline","labelPrinterPaperNearEmpty","labelPrinterPaperEmpty","labelPrinterCoverOpen","currentSettings","eventListenerProcessor","callUpdate","disconnect","applyLabelPrinterSettings","settings","internalDisconnect","internalConnect","connect","discoverAvailableLabelPrinters","labelPrinterSystem","paperWidthCode","labelPrintMode","portable","initLabelPrinter","checkLabelPrinterConnection","labelPrintTest","printLabelsFromHTML","q","printArea","reg","RegExp","printer","landscape","createLabelPrintContainer","contentDocument","chl","outerWidth","dat","showLabelPrintImage","data64","modalStr","$d","wnd","scrolling","ec","removeAttr","printLabels","labelPrintEl","ignoreNotLabelPrint","elLabelPrint","outerHTML","tel","getLabelPrintArea","forceLocal","pointsX","pointsY","perRow","margins","getTemplate","getLabelTemplate","receipt","Template","se","appID","linklyPaymentApplicationId","delayDone","integrationKeys","parentScope","errorRecoveryInSeconds","polling","pollingIntervalInSeconds","isRequestFromPurchase","formKey","retrieveLinklyData","linklyCloudSecretKeyUrl","linklyPaymentPairCode","getLinklyCloudSecretKey","secret","storeLinklyData","iframeSourceUrl","posVersion","posId","linklyCloudPairTerminal","token","tokenExpiryInSeconds","expirySeconds","startPolling","getErrorText","unpair","removeLinklyData","stopPolling","getToken","progressText","isProgressShown","hideButtons","showProgressDialog","customModalDlg2Caption","customModalDlg2Text","customModalDlg2Buttons","callbackModal2","code","cancelCurrentTransaction","hideProgressDialog","dialogCalled","lastQuestion","lastCallback","isTokenExpired","d0","tokenExpiry","printLinklyPaymentReceiptOnTerminal","linklyCloudPaymentUrl","requestType","isPaymentReceiptOn","isCutReceiptOn","receiptsLinklyPaymentReceiptOnTerminal","tempSessionId","linklyCloudMakePayment","transactionData","responseTransactionData","receipts","receiptText","merchantReceipt","customerReceipt","getReprintReceipt","printReceipt","responseText","Sale","TransactionMetaData","errorRecovery","refundSum","rfn","purchaseAnalysisData","RFN","txnRef","linklyCloudRefundTransaction","customModalDlg2Text2","printPromise","linklyCloudCancelCurrentTransaction","errorRecoveryexpiry","linklyCloudTransactionStatus","transaction","tran","linklyCloudReprintReceipt","errorMSG","linklyCloudTerminalStatus","customersData","customerDataLoaded","fillData","products","sku","filterData","counter","fd","cmp","mapOnlineCustomer","postcode","firstLine","tempCustomer","onlineCustomer","mapCustomer","a1","b1","adr","longNameProcess","args","NaN","androidDatabaseProvider","sqlitePlugin","openDatabase","createDBSchema","resultSet","results","Version","__proto__","executeChunk","chunckSize","dbTHIS","ext","upperChunckBound","executeChunkBatch","batchStmnts","sqlBatch","pinLogin","pin","readTransaction","rec","isErr","matchedUsers","decrypt","PinToken","Password","MatchedLoginsCount","lastUser","l","login","__","savedData","Token","saveLogin","ciphertext","encrypt","savePin","saveUserOutlets","packed","getUserPosOutletsRegistry","getPosOutlet","updateOutletPacked","outlet","getNextSequence","posRegistryID","valueToReturn","Registries","PosRegistryID","CurrentReceiptNumber","intVal","setNextSequence","CHUNCK_SIZE","placeholders","isOnCreditHold","sch","rowsAffected","formatLikePart","searchArray","selectedCouponID","selectedCouponDealID","removeSales","exeptStatusID","prepareLoadOfflineSalesQuery","loadOfflineSalesCount","loadOfflineSales","getReceiptTemplate","EmailTemplate","EmailSubject","TemplateID","getRegistry","registry","Result","openRegistry","closeRegistry","cashCounted","creditCardCounted","giftCardCounted","loyaltyCounted","storeCreditCounted","note","additionals","report","sendClosecRegistry","sendResetRegistry","updateRegistrySales","cashExpected","creditCardExpected","giftCardExpected","loyaltyExpected","storeCreditExpected","registryCleanUp","getClosedRegistries","getRegisterStatisticToProcess","excludeID","removeSendedClosecRegistry","localOnly","removeCashMovements","concString","IsOnCreditHold","makeErrorOrder","orderId","makeErrorHistoryOrder","getPosDiscounts","targets","buyMore","refreshPosDiscounts","newDiscounts","allowCoupons","singleCouponCodeUsage","coupons","tagName","dealDiscountID","customersGroup","dealID","buyValue","getValue","minValue","discountLineType","parameters","getSaleCoupons","couponCode","addSaleCoupon","clearCoupons","getGiftCardSettings","setGiftCardSettings","savePOSData","posID","getPOSData","refreshTaxRules","Description","loadTaxRules","Rule","preload","LoyaltyLionProvider","useWidgetIfAvailable","sdkFailed","sdkReadyPromise","apiLoader","loyaltylion","_initData","startSdkReadyWatch","POLL_MS","POLL_TICKS","poll","site","soft","softReject","initCustomer","_this3","LLExternalType","silent","Warning","warning","LLEmail","LLCustomerID","LLServerToken","LLTokenDate","authenticateCustomer","auth","buffered","fallback","clearCustomer","getCustomerBalance","balance","insertScript","firstScript","crossOrigin","parentNode","insertBefore","isLoyaltyLion","lion","dateString","getDate","initialized","_token","commands","getHours","_buffer","useWidget","uiMode","loyaltyWidget","showWidget","hideWidget","loyaltyLionClipboardHandler","isLLCopyButton","$button","buttonEl","offsetParent","hasChildNodes","childNodes","loyaltyLionDiscountZoneClipboardHandler","toElement","isCordova","clipboard","showClipboardError","friendlyMessage","$applyAsync","sendCCMessage","paste","readText","writeText","loyaltyDEARProvider","loyaltyLionProvider","providerInfo","loaded","loyaltyEnabled","runProviderPreload","preloadRes","loyaltyLionToken","providerInformation","bal","LLInitialBalance","angularInjector","getAngularService","callRootScope","scannerDetection","avgTimeByChar","ignoreIfFocusOn","minLength","onComplete","qty","handlePopoverClose","rpopel0","rpopel","handleDateSelectorClose","handleTimeSelectorClose","rptm","handleSnackbarClose","snack","rootScope","isVisible","handleLoyaltyLionClipboard","closePopovers","ready","disableF5","platformStyles","styleTag","offlineSaleService","statuses","triggerChangeOutletFilter","filterSelectors","searchInput","canClearOfflineSales","selectedJSON","countOffline","clearOfflineSales","refreshCounter","getCount","loadFilters","getUserOulets","resp1","currentOfflineDir","errorHistory","resp2","mDateFormat","mDateFrom","dateFromFilter","itemDate","utcOffset","mDateTo","dateToFilter","setHours","saleObject","every","sync","sendOfflineSales","rowClick","removeFromHistory","OfflineStatus","ErrorHistory","clearOfflineSalesDlg","copyJSON","string","continueSale","newOfflineDir","sortOfflineFiled","sortOffline","direction","lastCloseRegistryObj","openingFloatAmount","openingFloatNotes","backReportFilters","forceClosure","PosOutletName","RegistryName","closeDate","CloseDay","reportFilters","existingRegistryCloseOnDeviceID","ClosingTime","customPayments","AdditionalCounters","CounterType","Counted","Counter","CustomCounterName","loadLastClosedRegistry","proccess","loyaltyPaymentDialog","isRegistryOpened","IsAlreadyOpened","cashAmountDlg","checkAmount","editElementType","keyboardTitle","enableChangeSign","showAmountDlg","payType","CashCounted","CounterName","setAmount","changeValue","getSurchargeRate","SurchargeRateType","SurchargeRate","closeKeyborad","self","getProvider","isTrackingEnabled","onlyConfig","enableOrderStatusTracking","groupOrdersByID","ordersMap","StatusChanges","ChangeDate","determineOrderStatus","saleInfo","rawSale","offlineStatusParked","FinancialStatus","hasPayments","extractRefundsAndPayments","mergePaymentData","groupedOrders","paymentsData","paymentRecord","refunds","payments","statusOrSaleInfo","openRegistrySalesID","extracted","warn","timestamp","regularOrders","orphanOrders","allOrders","getRemoteOnly","updateConfigPaymentProcessors","paymentMethodName","PaymentProcessors","pc","ln","socket","isSocketReady","readyState","CLOSED","CLOSING","PaymentSenseTerminalID","socketClose","socketConnect","sendRequest","deffered0","deffered2","signatureDeffered","deffered3","closeConnection","cancelKeepAlive","reportStage1","reportStage2","getEndOfDayReport","closeRegisterID","repRes","RegisterCloseID","masterDeffered","WebSocket","onopen","keepAlive","onclose","jsonrpc","send","params","notificationValue","processTimeout","transactionResult","timeoutSignature","transactionId","tpi","transactionType","amountTotal","reportResult","reportType","df","isCancel","timerID","timerId","clearTimeout","isCloverPrinter","needReconnection","ngmHideFonts","fixTerimnalPrintingInTemplate","fixCashPrintingInTemplate","fixReceipts","preprocessElement","fixReceipt","attrNgm","ed","startTab","nextUntil","detach","atr","dv","after","replaceWith","vars","detectPrinterByName","modelName","macAddress","portName","hasInternalScanner","_name","printerOnline","printerPaperNearEmpty","printerPaperEmpty","printerCoverOpen","barcodeScannerOnline","cashDrawerOpen","cd","applyPrinterSettings","disconnectEpson","printMode","portSettings","connectEpson","noScanner","discoverAvailablePrinters","printerSystem","portDiscoveryEpson","deviceName","portDiscovery","forceNoScanner","initPrinter","initCloverPrinter","initStarPrinter","initEpsonPrinter","emulation","openCashDrawerEpson","checkPrinterConnection","checkStatusEpson","checkStatus","printTest","printReceiptFromHTML","printDataContainer","collectMode","initPrintCollectMode","finishPrintCollectMode","resetPrintCollectMode","printReceiptFromHTMLInternal","THISFunc","FontScaleRelativeTo3inch","coeff","replaceValue","hidden","widthOfText","widthPerChar","containerWidth","fontSize","BreakWordsInTable","printDataContainerLocal","collectModeLocal","cln","isFirst","createPrintContainer","printFromHTMLClover","printHTMLViaPrintService","printFromHTMLEpson","printFromHTML","showPrintImage","resizePrintContainer","connectionInterface","isStringIPAddress","modelFound","starPrinterModels","modelTitle","canUseCashDrawer","getCloverPrinters","uuid","printAdditionalReceiptsPromise","printAdditionalReceipts","MerchantReceipt","CustomerReceipt","hasTerminalReceipts","printEl","directUse","elPrint","ignoreNotPrint","ignoreTerminalReceipts","ignorePrinterSetupError","q2","trmp","isValidOS","getPrinterModels","system","epsonPrinterModels","modelId","modelNames","paperSize","canSetDrawerOpenStatus","canPrintTextReceiptSample","canPrintUtf8EncodedText","canPrintRasterReceiptSample","canPrintCjk","canUseBlackMark","canUseBlackMarkDetection","canUsePageMode","canUseBarcodeReader","canUseCustomerDisplay","canUseAllReceipt","canGetProductSerialNumber","settableUsbSerialNumberLength","isUsbSerialNumberEnabledByDefault","productManagementService","labelPrintService","labelService","needToReloadProduct","ifcss","labelTemplateClass","dataCount","dataPage","dataPageDisplay","printParams","copies","productsData","labelTemplates","newLabelItems","labelModel","watches","labelsPRow","labelsPPage","modify","canChangePrice","PriceTiers","labelPrintArea","nextStepPrintModal","labelPrinterSettings","getData","units","salesPriceTiers","costingMethods","types","expenseAccounts","Model","tmpls","getTemplates","loadGrid","sorting","ProductName","watcher","loadProductList","Page","labelPrint","product","firstGridShow","formatTemplate","selectPage","goBack","editProductDialog","$focusElement","editProduct","prepareEdit","addNewProduct","prepareAddNew","newProduct","AlwaysShowQuantity","AssemblyCostEstimationMethod","AverageCost","DefaultLocation","DefaultUnitOfMeasure","DropShipMode","NotSellable","PriceTear1","PriceTear2","PriceTear3","PriceTear4","PriceTear5","PriceTear6","PriceTear7","PriceTear8","PriceTear9","PriceTear10","ShortDescription","ExpenseAccount","modifyProduct","isNew","IsMarkupTear1","IsMarkupTear2","IsMarkupTear3","IsMarkupTear4","IsMarkupTear5","IsMarkupTear6","IsMarkupTear7","IsMarkupTear8","IsMarkupTear9","IsMarkupTear10","familyRow","Products","loadFamilyProductList","productPrice","productPriceDlg","showPriceDlg","priceTear","tear","setPrice","reinitSelects","keyboardTemplateDlg","tempCopies","showKeyboardTemplateDlg","setCopies","findTemplate","labelSelectedArea","labelSelectedAreaParams","formatCurrencyInTemplate","WCode","replacedString","labelTemplate","updateLabelsTemplate","IsFamily","idch","elch","multiplyPush","_el","tr","lt","labelWpad","columnsCount","makeTableFromTemplate","lt2","pageEl","ProductPrice","printLabelCheck","getProductData","Process","OutletLocationMappingID","saveNewProduct","updateProduct","scaleWidth","ProductLabels","wrap","wrapItems","wraper","items","itemsArr","wrapAll","useSql","useSqlite","startProductsAutoUpdate","loadProducts","stopProductsAutoUpdate","reloadWhenOutletChanged","lockProductsUpdate","isForce","ProductHash","quickKeySearch","quickKey","weightBasedBarcode","qkeyTemplate","qtemplate","qi","QuickKeyTemplateID","QuickKeyID","ImageType","imageContentType","getFamilySearchFull","getProductImages","isProduct","productIDs","loadImage","loadFamilyImage","GiftCardSttings","serialNumber","checkSerialNumber","taxRules","checkCheckoutProductsAvailability","products2","insufficient","request","prod","insufficientProducts","insufficientQuantitySKUs","fixTerminalReceipt","templateName","scopeObjectName","getReceiptTemplateByName","prepareCashManagementReceiptSaleModel","toDateString","Time","CashManagementReceipts","CashManagementOperation","CashManagementAmount","CashManagementNotes","prepareVantivDeclineReceiptSaleModel","VantivTerminalReceipts","fillVantivTransactionData","emv","VantivMerchantID","merchantId","VantivTerminalID","terminalId","VantivReferenceNo","_processor","processorReferenceNumber","VantivAccountNo","accountNumber","VantivCard","cardLogo","VanitvEntry","entryMode","VantivTransactionID","VantivApprovalCode","approvalNumber","VantivResponseCode","processorResponseCode","VantivExpressResponseCode","hostResponseCode","VantivApprovedAmount","_type","totalAmount","approvedAmount","VantivSignature","signatureImage","VantivApplicationID","applicationIdentifier","VantivCryptogram","cryptogram","VantivTags","orderStatusService","currentSavingRegistryClose","IsActive","IsMobile","ordersPromise","fetchOrdersForCloseRegistry","endOfDayPromise","EndOfDayReport","sendOfflineOpenCloseRegistry","endOfDayReport","activeSalesFromLogin","forceNetwork","OrdersStatusHistory","orderPromises","externalToken","tokenType","PosApplicationName","Pin","AppVersion","ExternalToken","TokenType","Platform","GetConfig","UserID","ApplicationKey","passwordOld","passwordNew","OldPassword","NewPassword","getCurrentSequence","getPosOutletsRegistry","outletLocationMappingID","ignoreNullValues","sX","sY","checkCount","Term","Limit","assign","Attributes","loadFakeCustomer","FakeServerKey","processSale","Data","receiptName","receiptScopeObject","loadSalesHistory","isStatusArray","statusArr","DateOffset","getTimezoneOffset","ReceiptNumber","SortField","FieldName","SortDirection","Direction","ApplicationID","LastRequestDate","Statuses","parkSale","loadPosUsers","BaseOrderID","EmailBody","IgnoreOrderID","DocumentBody","getPosUsers","currentUserName","CurrentUserName","RoleName","loadSaleRepresentativesAll","createPosUser","user","RoleFullName","CurrentUser","updatePosUser","UserId","removePosUser","activateUser","isLocked","deactivateUser","discardParkedSale","checkConnection","configID","byPassCancellation","ping","canProcess","BlockSales","LastPosChange","recoverPassword","isLiveDataRequest","getStockTakeData","saveNewStockTake","updateStockTake","loadStocktakeList","deleteStocktake","startStocktake","loadStocktake","searchMode","adjustStocktakeItem","itemID","batchSN","expiryDate","receivedDate","completeStocktake","localDate","cancelStocktake","undoStocktake","CouponCode","ReturnType","ViewMode","FromOrderLines","checkGiftCardExists","GiftCardCodes","loadDEARSales","loadDEARSale","linkingExternal","getLLCustomerRewards","LLMerchantID","MerchantID","emailService","registries","triggerChangeRegisterFilter","prepareAnyDayClosureData","closureDate","backFilter","getReports","updateRegistriesCombo","gridControl","predicate","reportCloseRegistryData","loadRegistryCloseList","OpeningTime","currentReport","loadClosureRegistryDetails","showReportCloseRegistryDetailsDialog","firstTimeOpenDlg","closeReportCloseRegistryDetailsDialog","receiptTemplate","receiptEmailTemplate","receiptEmailSubject","addFormatting","printReport","getReportTemplate","emailReport","emailCtrl","formatEmailSubject","reportEmailSentStatus","firstshowPrepareClosureDayFormShow","showPrepareClosureDay","closePrepareAnyDayClosure","redirectToClosureDay","csvService","totalValueSold","totalValueRedeemed","totalOutstandingBalance","totalGiftCardActive","listOfColumns","additionalHeaders","orderByColumnId","orderDesc","giftCardFilter","selectedDetails","showGiftCardDetails","getReport","loadReportGiftCard","MaxRows","Headers","AdditionalHeaders","Values","GiftCardCode","InitialBalance","TotalValueSold","CurrentBalance","TotalBalance","TotalActiveCards","filterForm","allowEmailSubject","colIDs","ColumnList","emailTo","subject","loadReportGiftCardEmail","exportReport","loadReportGiftCardCSV","popoverUrl","totals","outelts","selectedColumns","selectedAdditionalColumns","showCustomiser","closeCustomiser","selectColumn","isColumnSelected","columnFilter","columnId","additionalColumnFilter","columnHeaderFilter","groupFamilies","OutletLocationName","LocationAddress","ef","fromPage1","headers","loadInTransitReport","Totals","isDefault","loadInTransitReportEmail","loadInTransitReportCSV","reportTypes","variantsGroupEnabled","getCurrentReportType","ReportType","loadInventoryReport","loadInventoryReportEmail","loadInventoryReportCSV","methods","users","triggerChangeUserFilter","grid","minimumColumnSize","rowHeight","enableColumnMenus","enableFiltering","enableSorting","excessRows","excessColumns","columnDefs","onRegisterApi","gridApi","customScroller","myScrolling","uiGridViewport","scrollHandler","myScrollingOverride","gridData","fadeIn","selectedData","core","handleWindowResize","renderCompleted","loadUserAvailableUsers","isProcessed","StartDate","EndDate","u","loadPaymentTypeSummary","Dates","updateGrid","valueCellTemplate","tooltipCellTemplate","cellTooltip","cellTemplate","cellClass","headerCellClass","minWidth","emailSubj","loadPaymentTypeSummaryReportEmail","loadPaymentTypeSummaryReportCSV","chunk","newArr","chunkedColumnsData","loadProductPerformanceReport","loadProductPerformanceReportEmail","loadProductPerformanceReportCSV","showProductEnabled","showProducts","showTotals","diff","loadSalesSummary","loadSalesSummaryEmail","loadSalesSummaryCSV","reportName","reportScopeObjectName","getPaymentTypeName","sname","pname","totalPayment","newPayment","cashManagement","laybyTotal","laybyClosedTotal","laybyClosed","onaccountTotal","onaccountClosedTotal","onaccountClosed","returnsTotal","returns","CashReceived","CashMovements","CashManagementOffset","NonCashPayments","TotalExpected","TotalCounted","giftCardCount","CloseTime","OpenTime","IsLatest","CashManagement","vr","counted","Diff","IsCustom","PosPayments","PaymentDate2","PaymentDate","paymentOnAccountCount","paymentLayByCount","saleTotalCount","saleCount","onAccountCount","layByCount","taxCount","discountCount","CashRoundingPosPayments","refundCount","CashCountedToBank","accountCounters","AccountData","PaymentType","Date2","p1","p2","camnt","closeTime","CloseReport","CloseOfDayReportHTML","EndOfDayReportConvertToHTML","formatCurrencyInObject","fields","fwn","subj","printVantivDeclineReceipt","infoType","loadStockTransferSatelliteData","loadSurchargeReport","loadSurchargeReportCSV","loadSurchargeReportEmail","loadStoreCredit","totalIssued","totalRedeemed","totalBalance","totalOpeningBalance","IssuedAmount","RedeemedAmount","OpeningBalance","reportLines","line","formats","loadStoreCreditCSV","loadStoreCreditEmail","totalValueIssued","typesSelect","DateFormated","fromd","tod","constSurchargeViewName","groupRegister","$injector","webRequest","canceller","gid","currentRequests","tmr","showCancellation","hdr","responseError","isPing","isSaleSaleOrder","hideCancellation","retryAttempts","retryTimeout","logoutUser","retryAttempt","bypassRetry","isCancelDialogVisible","cancelAllRequests","isLoggedOn","gotoLogin","$httpProvider","interceptors","convertToAPI","needUpdateSequenceNumber","Parked","updateNextSequenceNumber","isAfterSale","queuedCnt","startSequenceAutoUpdate","stopSequenceAutoUpdate","isStandardPaymentType","paymentShortName","keepOrderNumber","callInBackGround","isRemoteProvider","_processError","isSuccess","Duplicate","NewRegistryID","updateSaleOrderNumberForCurrentSale","storeProvider","errorData","orderNumber","returnBool","IsPermanent","skipAnalyticData","isNewSale","PayloadVersion","RawSaleObject","CalculatedAnalyticData","calculateAnalyticData","LocalDate","IsParked","UpdateRegistrySequenceIfDuplicate","st","allowAsync","addSaleToQueue","trackPromise","laybySale","onaccountSale","amountToSave","alreadyUsed","removeParkedSale","loadOnlineParkedSales","OrderDate","OrderDateUTC","DeliveryTasks","HideDelivery","ExtendedFlags","flags","SEE","ReceiptWasEmailed","isSendInProgress","forceStatusID","sales","ofs","offlineSale","ignoreError","updatePriceWithTax","isTaxInclusive","isStandaloneReturn","isStandaloneExchange","standAloneExchange","sign","updateBasePriceWithDiscount","copyCurrentSale","isContinue","savedTaxInclusive","newGuidValue","isPartiallyPaid","isPaymentStage","isParked","conversionVersion","that","doNotConsolidate","taxPrecision","paymentClose","taxInclusive","LaybyDate","DoNotConsolidate","SequenceGeneration","standaloneRefund","standaloneExchange","ParentOrderID","parentOrderID","LoyaltyUpdate","UpdateReceiptView","AdjustRefunds","TotalPerLine","CalculateTax","DiscountCoeff","discountValue","surchargeTotal","surchargeSum","surchargeTaxSum","discountCoeff","BaseTotal","GiftCardExpirationDate","itemAppliedDiscount","CalculatedValue","SurchargeID","PaymentID","PaymentShortName","discountPaymentLine","ClientTransactionID","GiftCardID","roundingPaymentLine","RefundForOrderID","existRefund","OverriddenPrice","SaleServerTransactionID","pms","CalculatedValueWithTax","paymentsSum","taxTypeInclusive","percent","getTaxPercent","subTotalSum","totalItemsDiscount","calculateTotalTax","isDiscountInvalid","excludeCalculatedSurcharges","posTaxInclucive","subSum","taxReduceCoeff","stax","SurchargeToRefund","SurchargeTaxToRefund","ssum","totalSumWithTax","itemsTotalExSurcharge","itemsTotal","surchargeTax","pSurcharge","InitialSurcharge","itemsOnly","paymentsSumExSurcharge","getAmountWithoutSurcharge","calcRemainingDue","paidEx","remaining","totalLoyaltyPoints","totalPaymentsLoyaltyPoints","calculateLoyaltyEx","checkoutItems","sumRefund","sumSale","LoyaltyRatio","currentLoyaltySum","separatePaySum","separateReturnSum","totalLoyaltyRefunds","updateReceipt","sumToPayLeft","isRefund","returnLoyaltyPoints","SaleLoyaltyPoints","CustomerLoyaltyPointsUsed","TotalLoyaltyPoints","LLDiscountCode","lpSum","usedL","calcCustomerLoyaltyPoints","cnts","CustomerShippingAddressLine1","CustomerShippingCity","CustomerShippingCountry","CustomerShippingAddressLine2","CustomerShippingZip","CustomerShippingProvince","caddrs","caddr","SalesRepresentativeName","receiptNumber","CheckoutProductCount","SubTotal","DiscountPercentage","totalTax","Change","Notes","SalesNote","CheckoutProducts","ProductCount","ProductAmount","ProductSku","ProductBarCode","ProductDiscount","ProductSerialNumber","ProductDiscountPercentage","ItemDiscount","rounding","PaymentAmount","Received","TyroTerminalReceipts","LinklyTerminalReceipts","fillTransactionData","printMerchantCopy","printTriPOSMerchantReceipt","detectProvider","fillTyroTransactionData","fillLinklyPaymentTransactionData","isMerchant","replaceAll","productDeals","getPreparedDeals","checkTag","tag","hasTag","hasThisDeal","deal","customerHasThatDeal","customerDeals","has","DealID","hasAvailableCoupons","cdl","dscIdx","disc","triggers","tIdx","tElement","filterProductDeals","couponID","filteredProductDeals","coups","getTaxObject","tenantTax","outletTax","customerTaxObject","isProductTax","applyCustomerTax","leaveTaxAsIs","taxInclisuve","updateItemTaxRelatedFields","updateProductWithZeroPrice","amountWithTax","getSaleDiscounts","removedItemsMap","SeparatedItemID","parentEl","ComplexSeparatedItemID","affectedProducts","totalDiscounts","calculateOrderDiscount","addNewResult","rIdx","customerDiscount","calculateDiscountLine","applyProirity","totalDiscount","itemsToSeparate","appliedDiscount","appliedByTag","appliedById","mIdx","martrixItem","MinValue","MaxValue","ByTag","DiscountLineType","prIdx","prDisc","productBuyCount","triggerItemIds","targetDiscIdx","targetDisc","targetItemIdx","targetItem","affectedValue","checkDifferentConditions","affectedProduct","otherItem","tryToFindOtherCheckoutItemByProductID","idxd","itemsToAdd","itemsWithOutDiscount","bestDiscount","newItem","oldEl","CustomDiscountType","discountPercentage","priceBasedValue","prevDiscountValue","bestTotalDiscount","keepTotalDiscount","skipwarn","totalMultiplier","applyTotalDiscount","tEl","diffConditins","preparedDeals","tenantTimeZone","hasGroup","trIdx","preparedDeal","removeDuplicates","mergeTargets","getTriggerKey","isQuantityBased","getTargetKey","getProductAvailability","searchOpts","getExpectedSums","expectedSumsObj","alreadyCountedPayments","alreadyCountedRefunds","expectedSums","saleCoupons","checkSingleUsageCouponIsAvailable","foundCouponUsages","couponToUse","getCouponFromDealsByCode","couponsInData","ignoreOneOffType","fnd","getGiftCardCodes","checkRefundAvailable","IsRefundAvailable","isGiftCardsRefundAvailable","IsTaxInclusive","elementLine","PosRegistryName","ProductSKU","ProductOption1","ProductOption2","ProductOption3","TaxesIncluded","srches","getSurcharges","_surcharges","SurchargeName","SurchargePaymentAmount","rnd","FullReturnRounding","getRoundingsFromPayments","rsum","surchargeAmount","surchargeTaxAmount","queueToSendIsInProcess","processQueueToSend","surchargeCacheLastLoad","surchargeCache","getSurcharge","loadSurcharges","predictCashPayments","sumToPay","denominations","minInteger","Nominal","twoBanknoteCombinations","oneBanknotes","union","goThroughEntireSaleItems","ref","goThroughEntireSalePayments","goThroughEntireSaleSurcharges","formPaymentID","ptp","formSurchargeID","recalcRefundSurcharges","groupedSale","paymentValidation","changedFieldType","totalToRefund","TotalToRefund","cashPayments","cashRest","cashSurchargeLimit","cardNCustomSurchargeRefunds","cash","storeCreditSurchargeLimit","cashSurcharge","storeCreditSurcharge","cashSurchargeAmount","storeCreditSurchargeAmount","cashRounded","prepareSurchargeLimits","sm","validationAmount","RefundSurcharge","AmountToRefund","TaxToRefund","cardPayments","createCardPaymentMap","PaymentsMap2","initialValidationPayment","cardNCustomSelectedRefunds","calcSelectedSurcharges","calcTotalPay","storeCredit","loyaltyPoints","createGhostSurchargeToRefund","surchargeAmountToRefund","paymentAmount","addGhostSurcharge","calculateRefundSurcharges","addExchangeAmountToGroupedSale","getProductDeals","setPaymentLimits","sumRest","refundDialogItem","OldAmount","cashAmount","storeCreditAmount","loyaltyPointsAmount","eid","valAmount","setRefundAmount","skipDialog","changepPaymentAmount","refundPaymentAmountDlg","selectedItem","operationSubName","actionMode","amountLimit","getRemainingToRefund","checkLimit","forceMessage","calculateRefundPayments","amountPercent","taxToRefund","amountToRefund","creditCard","sumAllCardPayments","setAllCardAmountToZero","attachFilesToOrder","files","removeAttachment","attachmentId","giftCardExists","checkPosSaleOrderExists","posOrderID","checkSaleOrderExists","isVoided","loadLLCustomerRewards","merchantID","_resp$data","OrderNumberDetails","currentOrderId","match","RegistrySequenceUpdated","OriginalOrderNumber","restoreTransactionMetadata","fontMeasureService","nothingFound","dearSalesFilters","lastRequestDateTime","dearSalesSelectedPage","dearSalesTotalPages","triggerChangeStatusFilter","currentDir","newDir","sortFiled","returnedLoaylty","canSeeAllSales","gridType","selectedDearSale","dearOrdersTotal","selectedAttachment","canBeVoided","changeGridType","dearSalesSearch","dearSales","dearSalesGetPages","dearSalesScrollReachBottomCallback","dearSalesSelectRow","convertDearSaleIntoPosSale","selectItem","resultSales","isTaxInvlusive","currentSaleObjects","apiPosSale","dearSalesDateSelectedCallback","haveItemLine","have","IsProduct","OutletID1","StatusID1","DateFrom1","DateTo1","dateOptions","formatYear","startingDay","datePicker","opened","openDatePicker","getCustomPaymentMethod","shortName","initMeasure","getCustomPaymentMethodName","translateStatuses","StatusName","financialStatusName","shouldPayExtra","nativeSale","StandaloneRefund","StandaloneExchange","isExchange","Users","reloadCurrentPage","onLoadInternal","selectedID","setDropdownPosition","unshiftedOrders","tempData","showLaybyDate","payLoad","saleTotalPaid","getSaleTotalPaid","saleTotalGrid","getSaleGridTotal","isParentOnAcount","receiptResp","injectedString","receiptTemplateID","filed","getServerFiledName","IsFromChild","getRoundingSign","paymentTypeName","rndPayment","getRefundOperationName","isPaid","getSaleTotalDue","PartiallyPaidDue","getPartialPaidDue","refundTotal","originalPaymentTotal","totalPaid","totalRefunded","getSaleTotal","ignoreRounding","fullGridRow","getHistoryOrderLineSum","continueReturnSale","reloadItem","submitSelectReturnItems","doneRefund","processError","continueExchangeSale","doneExchange","returnSale","nativeSalePayments","Message","mainSaleID","rawSaleObject","groupSalesTree","paymap","surmap","ghostsurlist","isDirectSaleData","srch","restoreSurcharge","setPaymentMethodName","paymentSum","loyaltyPaymentSum","negateSurcharge","sumSurcharges","maxReturnAmount","lidx","smap","hideDetails","isChainedReturn","isChainedRefundAllowed","RefundNumber","refundsCopy","additionalEstimateTotal","NonRefundableSurcharge","pmap","getSoldOnlyItems","reIdx","refItem","refLine","BaseCount","isPricesEqual","IsGiftCard","ReturnItems","refundQuantity","maxCount","canContinue","minCount","outData","calculateRefundCheckout","refundNeedCustomer","canChangeCustomer","EstimateTotal","estimateTotalSum","getDateByFormatFromUtcToLocal","firestLoad","selectItemInternal","openSalesHistoryFilterDialog","newGuidForRefund","newGuidForRefund2","closeSalesHistoryFilterDialog","applyFilters","getSaleShippingAddress","isSelected","IsFirstChild","CanVoidSales","nonChildRefunds","childRefunds","InitialLines","InitialRefunds","childLines","chL","totalSalePaid","totalSaleGrid","isNewSale0","hasRefund","refIdx","isFound","pRefIdx","pRef","posPayment","lineIdx","refLineIdx","priceWithNoSaleDiscount","refPayIdx","updatePay","payIdx","hideRefund","setPaymentName","roundingReturned","soldItems","groupMainSaleRefunds","returnDue","rawTotal","stot","sgn","paid","FromHistory","canReturn","canContinueReturn","canContinueExchange","canContinuePayment","cantExchange","allowOnAccountExchange","showSalesHistyoryDetailsDialog","itm","scrollTo","animate","calculateRefundDiscount","hiddenSearch","hideSearch","changeReturnItemCount","oldReturnPayments","isContinueReturn","addItem","fullReturn","lastItemReturn","isOnlyGiftCards","showRefundGiftCardError","showRefundAmountError","returnItem","delIdx","RefundSubmit","creditCardAmount","plist","ccAmount","addSumToCardPayment","combineKey","customPaymentName","hasExchange","refundIdx","lId","removeFullyUsedCards","totalRemaining","estimatedRounding","orderTotal","orderPaid","canReturnPartiallyPaid","getAllPartialPayment","totalWithOldReturnPayments","calcTax","cancelRefund","editReturnPayments","showReturnPaymentsDialog","closeSalesHistoryDetailsDialog","closeReturnPaymentsDialog","showReturnCompliteDialog","closeReturnCompliteDialog","openRegister","amountSums","showRefundPaymentsAmountError","showRefundExactPaymentsAmountError","cashPay","enteredAmount","addPayment","roundedAmount","cashRounding","addPaymentToRefund","customPay","payProcessor","sr","addSurchargeToRefund","isAddedToPayment","creditCardPay","receiptCallback","processPartialReturn","cardType","cardPAN","storeCreditsPay","loyaltyPointsPay","processReturn","lastCurrentSale","unblock","forceConnectionError","setMessage","submitSelectReturnPayments","refundPaymentsError","pp","hasErrors","validateCardRefunds","remainingToRefund","selectedToRefund","needOpenCashDrawer","processPayments","TotalSumWithTax","isError","d2","noWait","RefundLimits","rtr","keepDiscount","SelectedItem","copyToNewSale","DateNative","onAccountExchangeConfirmation","paidCurrency","doneOnAccountExchange","robj","isRemotedlyProcessed","submitStandaloneRefund2","submitStandaloneExchangeInternal","removeAttachmentInternal","voidSaleInternal","curSale","standaloneSettings","allowStockAdjustment","isInput","submitStandaloneRefund","DefaultCustomer","IsFastRefund","fastRefund","submitStandaloneExchange","posUtils","consolidateToCustomerID","showStandaloneDialog","closeStandaloneRefundDialog","showStandaloneExchangeDialog","closeStandaloneExchangeDialog","earnLoyalty","serverTransactionID","clientTransactionID","saleServerTransactionID","loyalty","ignoreTransactions","clearReceiptModel","receiptDialog","calledFromHistory","getBalance","showReceiptDialog","forceRestore","receiptEmail","closeReceiptDialog","vl","receiptHolder","receiptForm","printAllReceipts","sentToEmail","extFlags","ordr","closeReceiptEmailDialog","handleRemotedlyProcessed","showRefundPaymentAmountDlg","sumLimit","RemainingToRefund","refundItemCountDlg","refundDialogItemCount","showRefundItemCountDlg","setItemCount","getEmailClasss","cantProcessReturn","cant","hasErrorInItemCount","itemsToReturnCount","inputSearch","isPartialPaid","excludeSelectedAmount","sTotal","sGrid","fullReturnRounding","toggleItemSelection","callFullfilmentDialog","MasterTaskID","applyCustomSurchargeRefundCoefficient","totalLimit","reduceMaxAmounts","applyCardSurchargeRefundCoefficient","correctSurcharge","prepareSurcharge","surchargeCopy","sd","allCustomPaymentValidations","remainingInOrder","totalInOrder","subTotalInOrder","openAttachmentDialog","onFileSelect","filesToSend","fExtension","lastIndexOf","fileToBase64","resps","onload","fileContent","attachment","AttachementID","attachmentIndex","Attachments","addDelivery","selectDelivery","canDelivery","canSeeAllScheduledDeliveries","isLeftAligned","innerWidth","voidSale","offlineParkedSales","onlineParkedSales","loadOfflineParkedSales","restartRefresher","refresher","refreshData","loadInProcess","orderedRes","deformatCurrency","scrollOfflineReachBottomCallback","lockFast","TotalSum","scrollOnlineReachBottomCallback","pageNumber","activeMode","selectedOutletItem","selectedOutlet","selectedRegister","canBypassDialog","checkRegistersForOutlet","setChoice","foundOutlet","foundRegistry","ReceiptID","RegistryPrefix","RegistrySuffix","QuickKeyData","TyroTerminalID","TriPOSLaneID","CatalogTilesSize","CatalogTilesVisibility","ShowProductAvailability","cleanSale","loadAll","loadAllFinal","setOutlet","registrySelected","setRegister","setChoice2","outletObj","noRegister","isFirstLogin","setChoice3","register","backToLogin","oIdx","oEl","rEl","$uibModalProvider","animation","taxWatches","taxRulesMap","groupedItems","taxGroupedWatches","createTaxRules","createProductTaxes","createGroupedTaxes","inp","watchList","ShowPrice","calculateTax2","$watchGroup","isInclusiveTax","cursale","description","description2","InitialTaxRuleID","Description2","synchronizeGroupToProducts","changedTaxesMap","newTax","refreshSize","synchronizeProductsToGroup","applyChanges","checkMap","resetTax","SaleStatusType","linklyPaymentReaderProvider","secondTerminalServiceWeb","watchers","paymentDisplayOrder","creditCardError","addFailedCreditCardPayment","showSearchResult","prev","catalogTileRows","catalogTileCols","customizedUI","logoUrl","currentProductFamily","switchNoReceiptExchangeMode","noReceiptExchangeMode","fixStocktakeFlags","searchItems","map2","sp","hasQuickKey","pageRows","pageCols","tilesVisibility","calculateActualCatalogRows","setRegistrySales","addCustomerHandler","clearLLDiscount","LLCopiedCode","LLCurrentValue","LLDiscountTitle","clearSaleLLDiscount","needClearLLDiscount","initLoyaltyCustomer","loyaltyUnavailable","setDisableLoyaltyFlag","showCustomerEmailWarningDialog","initSummaryValues","updateCheckoutProductPrice","Setup","updateSizesInCheckout","customPayWithSurcharge","creditCardPayWithSurcharge","onLoyaltyLionWidgetClick","saleNotesShowMoreClick","slideToggle","cashMode","creditCardMode","isSearchVisible","searchTotal","currentPage","isInFamily","quoteTemplateHolder","QuoteTemplate","QuoteEmailTemplate","QuoteEmail","showLoyalty","disableLoyalty","isFastRefund","canChangeSalesRepresentative","canParkSale","canDiscardSale","canAddDiscount","canGiveDiscount","canInsertCheckoutItems","giftCardAmount","scanedSerialNumber","isValidAmount","checkOutItem","minSymbolsToStartSearchMessage","oldAvailableCouponsValue","paymentActionInProgress","pendingPaymentRegistry","handleEmptyResult","isSilent","quoteHolder","showPaymentSection","isPaymentFinished","setPaymentFinished","lastSaleType","disablePrintReceipt","formHolder","realCashSum","calculateSums","restoreSale","existingPayment","isContinueExchange","markSaleAsPayOnly","goPayment","compliteSale","dontReloadReceipt","defaultCustomer","adjustRefunds","NewRefundOrder","StandAloneReturn","StandAloneExchange","cSale","returnSelectedCoupon","returnSelectedCouponID","returnSelectedCouponDealID","checkRestoredSaleAsync","saleCheckResult","saleObj","restoredSaleObj","viewLoaded","firstTimeLoad","firstTimeSummaryLoad","openCustomerDisplay","openSecondScreenPage","paymentSettings","secretKey","isAfterLogin","toggleProductTiles","scrollToAddedPaymentItem","isUserAction","isUserPerformedSearch","byQuickKey","addPaymentItem","insideStocktakeCheck","sortProducts","showAvailability","slel","availabilityObject","option1Name","option2Name","option3Name","maxLevel","processItem","isQuickKey","elementID","checkData","tree","optionLevels","o1","o2","levels","showProductOptionsDlg","addImages","arr2","img","image","productFilter","checkOutItemsFilter","giftCardCode","isReturn","GiftCard","Return","changePage","QuickKeySearch","hideNoProdMessage","noClean","CreateNewSale","cleanSearch","stocktakeProductToCheck","callbackModalCancel","isElement","returnElemen","cancelPayment","declineTransactionData","removePaymentItem","removeCustomerCallback","removeSalesRepCallback","loyaltyPay","removeOnlinePaymentMethods","returnElement","skipGiftCardDlg","canCheck","showGiftCardDialog","scanSerialNumberWithCallback","showScanSerialNumberDialog","currentGiftCardProduct","closeScanSerialNumberDialog","isPriceBased","revertPrice","chooseProductTierPrice","ProductTaxString","extra","expirationDate","addCheckoutItemsToSale","changeItemCount","calculatePriceWithDiscount","discountRules","filterDiscount","discountType","isNewFormat","hasReturnItems","hasBuyItems","prnID","discardSale","showDiscardDialog","totalCheckoutItems","getCustomPaymentMethodByShortName","processZero","TotalForBackSide","calculatePayments","lastRegistryPiece","checkAvailability","CanSaleRep","isSalesRepresentativeExist","checkAvailabilityOnCheckout","showCheckoutProductsAvailabilityInsufficientDialog","noReceiptExchangeButtonDisabled","closeCheckoutProductsAvailabilityInsufficientDialog","amountRefundSums","cashRefundPay","creditCardRefundPay","customPayRet","storeCreditsRefundPay","loyaltyPointsRefundPay","lastPaymentID","customPayAmount","operationCode","fakePayments","rp","fakePayment","prc","forceHeightRecalc","emailSent","payAmountChanged","hasPaidLines","buildPendingPaymentKey","reference","normalizedAmount","saleKey","getOrCreatePendingPaymentId","paymentKey","clearPendingPaymentId","clearAllPendingPaymentIds","addPaymentToSaleObject","blockedDeferred","idp","invalidPaymentAmount","allSummPaid","lastCashRounding","amountToCheck","finalPaymentAmount","partialApproved","realSurchargeApplied","reCalculateSurchargeForPartiallyApproved","messageHide","errorCallback","disableAddPayment","finishPaymentPhase","payRes","forceSaleCompleted","canAddPayment","existingSurchargeIndex","cardPayment","$$hashKey","lastLoyaltyUpdateAmount","cancelLastPayment","$sсope","triggerSendEmailReceipt","deferred3","showOfflinePaymentsDialog","cancelCashRoundingDialog","closeCreditCardProcessingErrorDialog","closeCreditCardProcessingErrorDialog2","cashRoundingDialog","banknotePredictions","updateSizesInCashPayment","isLoyalty","checkPayment","_readOnlyError","srchs","getPaymentMethodSurcharges","giftCardPay","giftCardID","allowLayby","allow","CanDoLayby","hasGiftCardCodes","closeDiscardDialog","showAskPaymentDialog","messageBoxText","messageBoxYes","messageBoxNo","closeAskPaymentDialog","closeAskSureLayByDialog","laybyPayDialog","closeAskSureOnAccountDialog","onAccountPay","askSureLayBy","askSureOnAccount","laybyPay","allowOnAccount","canSellOnAccount","isDisableOffline","disableLoyaltyPayment","disable","CustomerLoyaltyPointsRemaining","disableStoreCreditsPayment","fromDialog","storeCreditPaymentDialog","endPayment","hideMenuDropdown","addShippingAddress","unsetWarning","unsetTimer","unsetCustomer","removeSaleShippingAddress","unsetSalesRepresentativeWarning","unsetSalesRepresentativeTimer","unsetSalesRepresentative","checkOfflinePaymentMethods","paymentToRemove","removePayment","isCouponDialogVisible","isGiftCardDialogVisible","isGiftCardPayDialogVisible","isScanSerialNumberDialogVisible","currentGiftCardPay","couponDialogCallback","submitScanSerialNumber","itemWithcallback","showNotNoundSerialNumberDialog","closeNotFoundSerialNumberDialog","notNoundSerialNumberAddToCheckOut","showCustomSaleDialog","customSale","objScope","customSaleForm","closeCustomSaleDialog","addCustomSaleProduct","productName","returnSaleDialog","returnSaleDialogInstance","ariaLabelledBy","ariaDescribedBy","closeReturnSaleDialog","cancelSearchMode","hideOptions","selPrn","discountDlg","discountCls","discountTitle","showDiscountDlg","stagedCode","setDiscount","updateSaleOrderDiscount","removeItemFromCheckout","customDiscountDlg","customDiscountSettings","tryShowCustomDiscountDlg","showCustomDiscountDlg","isNewVersion","customSetDiscount","setCustomItemDiscount","payDlg","showPayDlg","setPay","productOptionsDlg","addProductToCheckout","currentNote","noteMode","afterParkCallback","showSkipButton","showAddSaleNoteDialog","closeAddSaleNoteDialog","quickPayDlg","showqQickPayDlg","setQuickQuantity","quickPaySumDlg","showQuickPaySumDlg","setQuickPrice","invalidPrice","isControl","swipeDirection","swipe","updateCustomSale","pr1","foundItem","itemToCoppy","updateItem","separetedItemID","isSaleInNewFormat","pr2","isTotalExceedingMaxPrice","isTotalExceedingDlgShow","checkSaleTotalLimit","saleTotal","maxPrice","displayCheckData","FilterName","FilterNames","FilterSKU","FilterSKUs","FilterOption1","FilterOption1s","FilterOption2","FilterOption2s","FilterOption3","FilterOption3s","FilterOutlet","FilterOutlets","listSortFun","itemsByAvailability","dataPageAvailability","dataCountAvailability","averageCost","canSeeItemValue","CanSeeItemValue","availabilityFilterName","filterNames","filterSKUs","filterOption1s","filterOption2s","filterOption3s","filterOutlets","refreshAvailabilityPaging","$watchCollection","newCol","oldCol","getLastCheckoutItems","arrn","op","OptionLine","firstShowPartialPaymentsDlg","showCancelPartialPaymentsDlg","cancelPaymentRow","cancelPaymentDlg","initialPayment","hasSale","processParkedSales","newAvailableCouponsValue","canDismissCoupon","checkCouponIsValidAndProcess","cause","sc","couponDialogActive","showCouponDlg","couponPress","giftCardSaleDialogCallback","expDate","DefaultGiftCardExpirationPeriod","isExpirationDateEnabled","onGiftCardDialogSave","giftCardAmountDlg","showGiftCardAmountDlg","setGiftCardAmount","giftCardPayAmountDlg","showGiftCardPayAmountDlg","setGiftCardPayAmount","showGiftCardPayDialog","_getSumByGiftCard","toAddAmount","sumByGiftCard","giftCardPayDialogCallback","getGiftCardForPayment","isValidUsage","saleSum","hasItemToReturn","hasNewItem","hasExchangeItems","onResize","itemCustomerToggle","toggleItemDetails","showCalendar","paymentDetails","togglePaymentDetails","currentLayby","layByDateDialogCallback","updateTotalsFontSizes","useCustomerPriceTier","tier","calculateCashChangeValue","nativeSum","clientSum","payCashDlg","showPayCashDlg","setCashPay","setCashMode","setCreditCardMode","setPredefinedCash","cashPay2","creditCardPay2","showSelectTaxDialog","EffectiveExclusiveTaxPercent","EffectiveInclusiveTaxPercent","isTaxPopupAvailable","paymentTypeShortName","mn","isLoyaltyLionEnabled","llExistedCustomer","closeLoyaltyLionDialog","prepareQuoteReceipt","QuoteEmailSubject","QuoteTemplateID","getQuoteNumberAndReceipt","canEmailQuote","canPrintQuote","printQuote","showQuoteEmailDialog","closeQuoteEmailDialog","sendEmailQuote","closeQuoteEmailCompleteDialog","ErrorCode","Rewards","_window$loyaltylion","reward","llReward","claimedRewards","discount_amount","discount_type","point_cost","getCatalogTileContainerHeight","closeCustomerEmailWarningDialog","editCustomerEmail","customerEmail","deferred4","currencyFilter","currencySymbol","$route","pinFormCaption","pinMode","hideGoToLogin","isSuccessMessage","pinValue","keyboardListener","save","finished","updateParams","printerModalMode","selected","selectedSystem","selectedModel","showSoftKbdPart","points","printerModels","labelSettings","printTyroReceiptOnTerminal","printWindcaveReceipts","selectedPaymentSystem","providers","providerName","systemName","showPaymentSenseTerminals","getAvailableProviders","fiteredKeys","selectedArea","printerSystems","pf","models","labelPrinterSystems","labelSelectedSystem","pageSizeCode","findPrintArea","pairTyro","pair","pairTriPOS","removePairTriPOS","savePaymentSystem","showPaymentSenseTerminal","validate","paymentModalMode","isConnectionReady","pairLinklyPayment","showLinklyPinPadPairingConfirmDialog","pairLinklyPaymentSystem","removePairLinklyPayment","connectAnotherPaymentSystem","resetPrinter","printersList","labelPrintersList","discoverPrinter","setSelectedPrinter","discoverLabelPrinter","setSelectedLabelPrinter","printerSetup","testConnection","testLabelConnection","labelPrinterSetup","scanModalMode","openScannerSetup","closeScannerSetup","scanValue","scannerSettings","scanAgain","isScanAgainReady","openPaymentSetup","closePaymentSetup","showCardPaymentSetupConfirmDialog","secondScreenSettings","opencustomerDisplaySetup","enableAuto","closeCustomerDisplaySetup","saveCustomerDisplaySetup","openCustomerScreen","firstTimeOpenPrinterModal","openPrinterSetup","closePrinterSetup","connectAnotherPrinter","paymentSenseTerminals","closeLinklyPinPadPairingConfirmDialog","closeCardPaymentSetupConfirmDialog","showPaymentSetupModal","detailsVisibility","setup","session","inventory","reports","isAndroid","getUserImageUrl","userImageID","updateUserImageSrc","isQA","allowManagerAndOnline","currentSection","selectedMenuOption","selectedMenuOptionMobile","canSeeDashboard","showDetailsPanel","hideHomeAndProducts","isScanSetupVisible","goHome","currentPosName","currentRoleName","currentUserId","canManageUsers","canSale","setAfterLoginCallbacks","setRights","mobileTrigger","secName","previousSection","openWMS","scheme","packName","externalAppCall","appName","wmsApplicationNotAvailableDialog","hideSideBar","removeQueryparam","clickOutside","curSec","sectionName","pageNotAvailableDialog","sellOffline","qa","closeWMSApplicationNotAvailableDialog","getWMS","WMSApplicationLink","WMSApplicationLinkIOS","activityForResult","newLanguageObj","reloadAll","stayAtPage","blockScreen","isOldBrowser","badSound","goodSound","goodAudio","Audio","badAudio","canPlayOnCurrentDevice","exec","canPlaySound","resetAndPlay","audio","pause","currentTime","playPromise","play","isFunction","playSound","canPlay","_schemes$find","squareApplicationId","backDeferred","schemes","CFBundleURLSchemes","squareURLSchema","applicationId","tenders","locationId","square","clientTransactionId","serverTransactionId","squareIntegrationID","squareLocationID","squareRefund","stockOrderingService","avaivedProducts","familyName","firstFormShow","baseOptionChange","hideBaseGridLine","baseOption","baseOptionValue","gridColumnsCount","gridColumnsSizePercent","productFamily","variationGrid","isDlgVisible","isEditable","productFamilyOptions","firstDlgShow","firstInitSelects","multiplier","selectedProducts","fromLocationName","toLocationName","evaluateProductFamily","showMatrixDlg","option1ValuesDistinct","option2ValuesDistinct","option3ValuesDistinct","option1Values","option2Values","option3Values","comments","selectedItems","availableItem","Index","Option1Values","it","Option2Values","Option3Values","Options","showSetQty","infoText","hasOption2","hasOption3","optionsCount","obaseNum","variationCount","IsHeader","Header","availLen","lineHeader","lineData","variationCount1","variationCount2","varOpt2No","axisXName","axisYName","axisXData","axisYData","headerLine","dataBlock","av","Empty","variationGridColLength","baseOptionValueChange","setAllQty","isToAll","itemQuantityDlg2","itemIndex","otherItems","textColor","availColor","orderedqty","ST_ORDER_TYPE","STATUS_ORDERED","STATUS_PICKING","STATUS_IN_TRANSIT","STATUS_IN_PROGRESS","STATUS_COMPLETED","STATUS_VOIDED","stockOrderingData","filterStatuses","statusName","allLocations","suppliers","referenceData","deleteMode","deleteObject","loadAvailableLocations","currentLocation","ParentID","loadSuppliers","$itemsContainer","itemsContainerHeight","itemsTableHeight","isPossibleToLoadMoreItems","loadTasksList","CompletionDate","stRequiredBy","STRequiredBy","getStatusName","canUndo","getCanUndo","canVoid","getCanVoid","FromLocationAddress","itemType","closeAddOrder","currentDetails","getStatusBg","loadStockOrderingList","loadAvailableProducts","toLocationId","compress","loadStockTransferOrderRelatedData","productsCompressed","loadStockTransferOrderDetails","modifyStockTransfer","task","FromLocationID","fromLocationID","ToLocationID","toLocationID","LastUpdatedBy","RequiredBy","rid","dtl","TransferQuantity","OrderedQuantity","saveNewStockTransferOrder","updateStockTransferOrder","loadReorderProducts","onlyAvailable","loadStockTransferReorderData","loadPurchaseAvailableProducts","supplierID","loadPurchaseOrderRelatedData","loadPurchaseOrderDetails","loadPurchaseTask","getRate","getExchangeRate","modifyPurchaseOrder","originalTask","CurrencyRate","currencyRate","TaxPercent","TaxCalculation","Terms","SupplierID","Supplier","supplierName","Approach","approach","Location","locationName","CombineAdditionalCharges","Memo","Items","variant","Cost","SupplierSKU","updateAdditionalTaxAndTotal","pricePrecision","saveNewPurchase","saveAsDraft","savePurchaseOrder","updatePurchase","undoPurchase","deleteUndoPurchase","voidPurchase","loadPurchaseReorderProducts","loadPurchaseReorderData","record","printPurchaseOrder","getPurchaseOrderEmail","sendPurchaseOrderEmail","loadPurchaseOrderTemplates","fileDownloadService","fcss_m","firstData","initInputs","loadGridProcess","isDelete","needReloadAvailable","voidItem","undoItem","hasChild","dataDisplay","OrderStatus","ToName","HasChild","rules","IsVariation","supplierCurrency","baseCurrency","rate","supplier","TaxRuleName","PaymentTermName","TaxPercentInclusive","TaxPercentExclusive","showMessageWhenAdded","openFamilyDlg","ne","OrderLineID","UnitName","UnitOfMeasure","FamilyName","removeLineItem","availableItems","modifyOrder","currentLineCommentRow","currentLineComment","showChangeRowCommentDialog","closeAddLineCommentsDialog","reorderProducts","addFamilyItemToOrder","templates","printingMode","templateModel","showPrintDialog","Templates","processChosenTemplate","isOk","showEmailDlg","downloadOrder","Url","FileName","emailModel","BodyHtml","emailOrder","isSend","existing","newRec","Unit","activeTab","dataCountProcess","dataPageProcess","dataPageDisplayProcess","itemsByPageProcess","isProcessLoading","categoryLiveSearchIsOpen","brandLiveSearchIsOpen","tagLiveSearchIsOpen","datePickerReady","prepareDatePicker","defaultAcc","defaultAccount","accounts","newStocktake","lockSell","showOnhand","selectedCategory","selectedBrand","selectedTag","LockSell","IncludeQuantityOnHand","categoriesArr","brandsArr","tagsArr","scanLocationID","scanLocationName","stockTakesData","SearchParameters","editStocktake","modifyStocktake","modifyTask","liveSearchCategory","liveSearchCategorySelected","addTextToArray","liveSearchCategoryFinished","liveSearchBrand","liveSearchBrandSelected","liveSearchBrandFinished","liveSearchTag","liveSearchTagSelected","liveSearchTagFinished","removeFromList","removeTextFromArray","currentStocktake","bins","sncnts","BinID","fixQuantityObjectLocation","prepareCurrentStocktake","currentTask","showProcessStocktake","totalPagesProcess","scrollReachBottomCallbackProcess","getLocationBins","selectPageProcess","getPagesProcess","itemsInPage","rowClicked","prepareScanData","ExpiryDate2","gridControlProcess","ParentLocationID","adjustStocktakeAbsolute","ReceivedDate","scanComboInit","LocationName","scanStocktake","searchValue","scanInventoryMode","codes","adjustStocktakeRelative","processSingleScan","selectScanProduct","completeStocktakeDlgShow","completeStocktakeDlgShow2","cancelStocktakeDlgShow2","cancelStocktakeDlgShow","undoStocktakeDlgShow2","undoStocktakeDlgShow","addNewZeroStockItem","zeroStockProduct","LastChange","QtyOrder","canAdd","includeQuantityOnHand","isTemplateMode","correctDates","receivedDateDate","incValue","loadStockTransferList","loadUserAvailableOutlets","loadStockTransferDetails","saveNewStockTransfer","updateStockTransfer","voidStockTransfer","deleteStockTransfer","completeStockTransfer","putAwayData","undoStockTransfer","scanStockTakeInventoryMode","dataContainer","stockTransfersData","dateDisplay","ToLocationAddress","locationListTo","setLocationListTo","currentTransfer","wElement","fromLoc","initInnerSelects","editCurrent","toLoc","inStockTakeCount","reloadAvailable","removeTransferItem","forceComplete","liveSearchFunc","DisplayName","putAway","ReceivedQuantity","NonInventory","FromLocationOrBinID","fromLocationOrBinId","PutAway","showReorderDlg","closeReorderDlg","allLow","justClose","triPOSApplicationId","triPOSHeaders","laneID","loadTriPOSLane","isRemoveNeeded","deleteTriPOSLane","terminalID","triTerminalID","activationCode","triActivationCode","createTriPOSLane","triPOSMakePayment","transactionAmount","expressResponseCode","isApproved","titel","signature","patialApprovedSum","statusCode","expressResponseMessage","lnkObject","_links","rel","triPOSRefundPayment","tyroApplicationId","iclient","iframeSourceUrlExt","TYRO","IClient","posProductVendor","posProductName","posProductVersion","prWithTimeout","pairTerminal","integrationKey","prom","race","_r","rej","initiatePurchase","integratedReceipt","mid","tid","statusMessageCallback","questionCallback","question","answerCallback","d1","isManualCancel","transactionCompleteCallback","initiateRefund","elidedPan","pako","encoded","binData","inflate","initRolesFilter","userRole","roles","userHasSelectedOutlet","addPosUser","editedUser","editPosUser","OutletNames","saveUser","saveUserForm","deactivationModalDialog","cancelDeactivationModal","showDeleteUserDialog","hideDeleteUserDialog","userToDelete","deletePosUser","del","getUserNameClass","lockUpdate","SaleRepresentativesHash","startSaleRepresentativesAutoUpdate","families","ProductFamilyOption1Name","ProductFamilyOption2Name","ProductFamilyOption3Name","ProductFamilyID","DiscountLines","family","FamilyShortName","isLimitReached","dic","familyData","Mode","Registry","getApiUrl","setPassword","newPassword","finalizeID","FinalizeID","transactionID","originalTransactionDate","refundAmount","TransactionID","OriginalTransactionDate","RefundAmount","SearchString","completionDate","Lang","RootProperty","useCORSProxy","initialUrl","laneId","ticketNumber","allowDebit","allowPartialApprovals","registerCloseID","giftCardCodes","LocationId","isVoid","User","taskId","loadDelivery","loadProductsAvailableForDelivery","loadCalendars","CreateDelivery","deliveryID","UpdateDelivery","deliveryTaskID","newStatus","username","paircode","Accept","linklyCloudSecretKey","uri","operatorReference","lastLoginUserID","Merchant","TxnType","AmtPurchase","TxnRef","CurrencyCode","CutReceipt","ReceiptAutoPrint","Application","PurchaseAnalysisData","OPR","AMT","Key","App","ReprintType","StatusType"],"sourceRoot":""}