{"version":3,"file":"static/js/2424fa34cc00b8772e7d.bundle.js","mappings":";sQAeOA,eAAeC,EAAwBC,EAAuBC,GACnE,MAAMC,QAAqBC,EAAAA,EAAAA,uBAAsB,CAAEC,cAAeJ,EAAQK,eAAiBL,EAAQK,cAAcC,eAAeC,YAAYC,UAAWR,EAAQK,cAAcC,eAAeC,YAAYE,UAAWR,GAAYS,OAAMC,GAASC,QAAQC,IAAI,0DAA2DF,KAErT,GAAIT,GAAgBA,EAAaY,OAAS,EAAG,CAC3CZ,EAAaa,MAAK,CAACC,EAAwBC,IAA6BD,EAAEE,aAAkBD,EAAEC,cAAkB,EAAI,IAEpH,MAAMC,EAAuB,GAE7BjB,EAAakB,KAAIC,GAAQF,EAAWG,KAAKD,EAAKE,YA2B9C,aAFuBC,EAAAA,EAAAA,eAAc,CAAEpB,cAAeJ,EAAQK,eAAiBL,EAAQK,cAAcC,eAAeC,YAAYC,UAAWW,GAAYT,OAAMC,GAASC,QAAQC,IAAI,kDAAmDF,KAKvO,MAAO,EACT,CAEOb,eAAe2B,EAAYzB,EAAuB0B,GACvD,GAAIA,EAAYZ,OAAS,EAAG,CAC1B,MAEMa,EAAmC,CAAEC,QAFrB,CAAEC,UAAW7B,EAAQK,cAAcC,eAAeC,YAAYC,UAAWsB,UAAW9B,EAAQK,cAAcC,eAAeC,YAAYE,WAExFsB,YAAaL,EAAaM,mBAAmB,GAIhH,aAFuBC,EAAAA,EAAAA,aAAY,CAAE7B,cAAeJ,EAAQK,eAAiBsB,GAK/E,MAAO,EACT,CAEO7B,eAAeoC,EAAwBlC,EAAuBmC,EAA6CC,EAAoBC,EAAsBC,EAAgBC,GAC1K,MAAMC,QA6FD1C,eAAkCE,EAAuBmC,GAC9D,MAAMK,EAAiC,GAEnCL,EAAUM,QACZN,EAAUM,OAAOC,SAAQC,IACnBA,EAAOC,UAAYD,EAAOC,SAAS9B,OAAS,GAC9C0B,EAAWlB,KAAK,CAAEuB,KAAMF,EAAQG,OAAQH,EAAOC,SAASxB,KAAIC,GAAQA,EAAKE,WAAWwB,SAAU,QAKpG,IAAK,IAAIC,EAAI,EAAGA,EAAIR,EAAW1B,SAAUkC,EACvCR,EAAW,GAAGQ,KAAKD,eAAiBtB,EAAYzB,EAASwC,EAAW,GAAGQ,KAAKF,QAG9E,OAAON,CACT,CA7G2BS,CAAmBjD,EAASmC,GAE/Ce,QAAeC,EAAAA,EAAAA,sBAAqB,CAAE/C,cAAeJ,EAAQK,eAAiB+B,EAASgB,eAEvFC,EAAkC,GAElCC,QAAyBC,EAAAA,EAAAA,IAAqC,CAAEnD,cAAeJ,EAAQK,eAAiB+B,EAASgB,cAAehB,EAASoB,MAAQnB,EAAcC,EAAOC,GAE5K,IAAK,IAAIkB,EAAI,EAAGA,EAAIH,EAAiBxC,OAAQ2C,IAAK,CAChD,MAAMC,EAA2BC,KAAKC,MAAMN,EAAiB,GAAGG,MAEhE,GAAIC,EAAuB,UACzB9C,QAAQC,IAAI6C,EAA0B,kBACjC,CACL,MAAMG,EAA6B,GAEnC,IAAK,IAAIb,EAAI,EAAGA,GAAK,GAAIA,IAAK,CAC5B,MAAMc,EAAS,QAAUd,EAErBU,EAAY,GAAGI,MACjBD,EAAiBvC,KAAKoC,EAAY,GAAGI,MAIzC,IAAIC,EAAW,GACXC,EAAS,EACTC,EAAQ,EAkBZ,GAhBsC,KAAlCP,EAAYQ,mBAA8D,OAAlCR,EAAYQ,kBACtD1B,EAAWE,SAAQC,IACjB,MAAMwB,EAAQxB,EAAOI,SAASqB,MAAK/C,GAAQA,EAAKE,WAAa8C,SAASX,EAAYY,aAE9EH,IACFJ,EAAWpB,EAAOE,KAAK0B,KACvBP,EAASrB,EAAOE,KAAKtB,SACrB0C,EAAQE,EAAMK,MAAQL,EAAMK,MAAQ,OAIxCT,EAAWL,EAAYe,gBACvBT,EAASU,OAAOhB,EAAYQ,mBAC5BD,EAAQP,EAAYiB,cAGe,KAAjCjB,EAAYkB,iBAAyB,CACvC,IAAIT,EAAQS,EAAAA,GAAAA,OAA2BC,WAAUxD,GAAQA,EAAKyD,QAAUpB,EAAYkB,mBAGhFT,EAAQ,IACVA,EAAQS,EAAAA,GAAAA,OAA2BC,WAAUxD,GAAQA,EAAKyD,QAAUpB,EAAYkB,oBAI9ET,GAAS,IACXF,GAAgBW,EAAAA,MAAuB,GAAGT,MAI9C,MAAMY,EAAgB7B,EAAOkB,MAAKY,GAASA,EAAMC,KAAOvB,EAAYwB,eAC9DC,EAA2C,KAA1BzB,EAAY0B,UAAoBL,GAAiBA,EAAcM,QAAUN,EAAcM,QAAU,UAAY3B,EAAY0B,UAEhJ,IAAIJ,EAAQtB,EACZsB,EAAML,aAAeV,EACrBe,EAAMP,gBAAkBV,EACxBiB,EAAMd,kBAAoBF,EAAOsB,WAEjCjC,EAAa/B,KAAK,CAChBiE,WAAY,CAAC7B,EAAY8B,WACzBC,MAAO5B,EACP6B,UAAWhC,EAAYiC,kBAAoB,IAAIC,KAAKlC,EAAYiC,mBAAqB,IAAIC,KACzFR,UAAW,CAACD,GACZU,OAAQb,KASd,OAJA3B,EAAatC,MAAK,CAACC,EAAGC,IACbA,EAAEyE,UAAUI,UAAY9E,EAAE0E,UAAUI,YAGtCzC,CACT,CAEOvD,eAAeiG,EAAiB/F,EAAuBgG,EAAsBC,EAAsB5E,SAClG6E,EAAAA,EAAAA,IAAwB,CAAE9F,cAAeJ,EAAQK,eA2BnD,WACJ,IAAI8F,GAAOC,EAAAA,EAAAA,KAEX,OAASC,EAAAA,EAAAA,GAAaF,IAA8B,IAArBG,EAAAA,EAAAA,GAAYH,IACzCA,GAAOC,EAAAA,EAAAA,KAGT,OAAOD,CACT,CAnC0EI,GAAgBP,EAAcC,GAAc,IAAIL,MAAOY,cAAenF,EAAKoF,WAAYpF,EAAKqF,OAAQrF,EAAKiD,UAAWjD,EAAKsF,QAAStF,EAAKmE,UAAWnE,EAAKuF,SAAUvF,EAAKwF,aAAcxF,EAAKyF,WAAYzF,EAAK0F,OAAQ1F,EAAK2F,OAAQ3F,EAAK4F,OAAQ5F,EAAK6F,OAAQ7F,EAAK8F,OAAQ9F,EAAK+F,OAAQ/F,EAAKgG,OAAQhG,EAAKiG,OAAQjG,EAAKkG,OAAQlG,EAAKmG,QAASnG,EAAKoG,QAASpG,EAAKqG,QAASrG,EAAKsG,QAAStG,EAAKuG,QAASvG,EAAKwG,QAASxG,EAAKyG,QAASzG,EAAK0G,QAAS1G,EAAK2G,QAAS3G,EAAK4G,QAAS5G,EAAK6G,QAAS7G,EAAK8G,QAAS9G,EAAK+G,QAAS/G,EAAKgH,SAAUhH,EAAKiH,YAAajH,EAAKkH,gBAAiBlH,EAAKmH,KAAMnH,EAAKoH,aAAcpH,EAAKqH,WAAYrH,EAAKsH,WAAYtH,EAAKuH,UAAWvH,EAAKwH,YAAaxH,EAAKyH,WAAYzH,EAAK0H,eAAgB1H,EAAK2H,eAAgB3H,EAAK4H,gBAAiB5H,EAAK6H,UAAW7H,EAAK8H,YAAa9H,EAAK+H,UAAW/H,EAAKgI,QAAShI,EAAKiI,iBAAkBjI,EAAKuD,iBAAkBvD,EAAKkI,QAASlI,EAAKmI,YAAanI,EAAKoI,qBAAsBpI,EAAKqI,YAAarI,EAAKsI,UAAWtI,EAAKuI,UAAWvI,EAAKwI,WAAYxI,EAAKyI,UAAWzI,EAAK0I,UAAW1I,EAAK2I,YAAa3I,EAAK4I,YAAa5I,EAAK6I,UAAW7I,EAAK8I,OAAQ9I,EAAK+I,YAAa/I,EAAKgJ,cAAehJ,EAAKiJ,YAAajJ,EAAKkJ,qBAAsBlJ,EAAKmJ,eAAgBnJ,EAAKoJ,mBAAoBpJ,EAAKqJ,mBACvvC,CAEO5K,eAAe6K,EAAuB3K,EAAuBqB,GAGlE,aAFsBuJ,EAAAA,EAAAA,IAAgC,CAAExK,cAAeJ,EAAQK,eAAiBgB,EAAKwJ,KAAKpE,WAAYpF,EAAKwJ,KAAKnE,OAAQrF,EAAKwJ,KAAKvG,UAAWjD,EAAKwJ,KAAKlE,QAAStF,EAAKwJ,KAAKrF,UAAWnE,EAAKwJ,KAAKjE,SAAUvF,EAAKwJ,KAAKhE,aAAcxF,EAAKwJ,KAAK/D,WAAYzF,EAAKwJ,KAAK9D,OAAQ1F,EAAKwJ,KAAK7D,OAAQ3F,EAAKwJ,KAAK5D,OAAQ5F,EAAKwJ,KAAK3D,OAAQ7F,EAAKwJ,KAAK1D,OAAQ9F,EAAKwJ,KAAKzD,OAAQ/F,EAAKwJ,KAAKxD,OAAQhG,EAAKwJ,KAAKvD,OAAQjG,EAAKwJ,KAAKtD,OAAQlG,EAAKwJ,KAAKrD,QAASnG,EAAKwJ,KAAKpD,QAASpG,EAAKwJ,KAAKnD,QAASrG,EAAKwJ,KAAKlD,QAAStG,EAAKwJ,KAAKjD,QAASvG,EAAKwJ,KAAKhD,QAASxG,EAAKwJ,KAAK/C,QAASzG,EAAKwJ,KAAK9C,QAAS1G,EAAKwJ,KAAK7C,QAAS3G,EAAKwJ,KAAK5C,QAAS5G,EAAKwJ,KAAK3C,QAAS7G,EAAKwJ,KAAK1C,QAAS9G,EAAKwJ,KAAKzC,QAAS/G,EAAKwJ,KAAKxC,SAAUhH,EAAKwJ,KAAKvC,YAAajH,EAAKwJ,KAAKtC,gBAAiBlH,EAAKwJ,KAAKrC,KAAMnH,EAAKwJ,KAAKpC,aAAcpH,EAAKwJ,KAAKnC,WAAYrH,EAAKwJ,KAAKlC,WAAYtH,EAAKwJ,KAAKjC,UAAWvH,EAAKwJ,KAAKhC,YAAaxH,EAAKwJ,KAAK/B,WAAYzH,EAAKwJ,KAAK9B,eAAgB1H,EAAKwJ,KAAK7B,eAAgB3H,EAAKwJ,KAAK5B,gBAAiB5H,EAAKwJ,KAAK3B,UAAW7H,EAAKwJ,KAAK1B,YAAa9H,EAAKwJ,KAAKzB,UAAW/H,EAAKwJ,KAAKxB,QAAShI,EAAKwJ,KAAKvB,iBAAkBjI,EAAKwJ,KAAKjG,iBAAkBvD,EAAKwJ,KAAKtB,QAASlI,EAAKwJ,KAAKrB,YAAanI,EAAKwJ,KAAKpB,qBAAsBpI,EAAKwJ,KAAKnB,YAAarI,EAAKwJ,KAAKlB,UAAWtI,EAAKwJ,KAAKjB,UAAWvI,EAAKwJ,KAAKhB,WAAYxI,EAAKwJ,KAAKf,UAAWzI,EAAKwJ,KAAKd,UAAW1I,EAAKwJ,KAAKb,YAAa3I,EAAKwJ,KAAKZ,YAAa5I,EAAKyJ,QAASzJ,EAAK0J,YAAa1J,EAAK2J,OAAQ3J,EAAK4J,aAAc5J,EAAKwJ,KAAKX,UAAW7I,EAAKwJ,KAAKV,OAAQ9I,EAAKwJ,KAAKT,YAAa/I,EAAKwJ,KAAKP,YAAajJ,EAAKwJ,KAAKR,cAAehJ,EAAKwJ,KAAKN,qBAAsBlJ,EAAKwJ,KAAKL,eAAgBnJ,EAAKwJ,KAAKJ,mBAAoBpJ,EAAKwJ,KAAKH,mBAAoBrJ,EAAKwJ,KAAKK,QAAS7J,EAAKwJ,KAAKM,oBAGnpD,6BC/JO,IAAWC,EAMZ,SAAUC,EAAUC,GACxB,OAAOA,EAAQF,EAAYG,KAC7B,kBARA,SAAkBH,GAChBA,EAAAA,EAAA,mBACAA,EAAAA,EAAA,qBACAA,EAAAA,EAAA,kBACD,CAJD,CAAkBA,IAAAA,EAAW,gCCHtB,IAAWI,EAQAC,EAMAC,sCAdlB,SAAkBF,GAChBA,EAAA,kBACAA,EAAA,YACAA,EAAA,kBACAA,EAAA,gBACAA,EAAA,aACD,CAND,CAAkBA,IAAAA,EAAe,KAQjC,SAAkBC,GAChBA,EAAA,UACAA,EAAA,UACAA,EAAA,aACD,CAJD,CAAkBA,IAAAA,EAAa,KAM/B,SAAkBC,GAChBA,EAAA,kBACAA,EAAA,eACD,CAHD,CAAkBA,IAAAA,EAAQ,+bCO1B,MAgBMC,EAA4BC,IAC9B,MAAMC,EAAgBC,EAAiBF,GAEvC,SAAIC,IAAiBD,EAAMG,KAAK9H,MAAM+H,0BAC3BH,EAAgBD,EAAMG,KAAK9H,MAAM+H,uBAGhC,EAGVF,EAAoBF,GACfK,KAAKC,IAAIN,EAAMG,KAAK9H,MAAMkI,WAAa,EAAGP,EAAMG,KAAK9H,MAAMmI,qBAAuB,EAAGR,EAAMG,KAAK9H,MAAMoI,eAAiB,GAG5HC,EAAsBV,IACxB,MAAMW,EAAeC,EAAeZ,EAAOA,EAAMG,KAAK9H,MAAM+H,yBAC5D,OAAOS,EAAAA,cAAA,QAAMC,UAAU,oBAAoBC,SAAS,SAASJ,EAAoB,EAG/EC,EAAiBA,CAACZ,EAA2C3H,KAC/D,QAAc2I,IAAV3I,EAIJ,OAAc,IAAVA,GAAe2H,EAAMiB,cACdjB,EAAMiB,cAGVjB,EAAM5L,QAAQ8M,iBAAiBN,eAAevI,EAAM,EAGzD8I,EAAuCnB,IACzC,MAAMC,EAAgBC,EAAiBF,GACjCW,EAAeC,EAAeZ,EAAOC,GAE3C,OACIY,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,QAAMC,UAAU,WAAS,IAAGd,EAAMoB,kBAAiB,IAAGT,EAAY,IAAGX,EAAMqB,iBAAgB,IAAGX,EAAmBV,IACjHa,EAAAA,cAAA,QAAMC,UAAU,2BAA0B,cAAa,QAAQH,GAC/DE,EAAAA,cAAA,sBAAkB,QAAQH,EAAmBV,IAC5CA,EAAMsB,aAAeT,EAAAA,cAAA,QAAMC,UAAU,sBAAsBd,EAAMsB,aACnE,EAKEC,EAA8EC,EAAAA,GAAiBC,gBACxG,6WAAOC,CAAA,CACLC,UA7DuD3B,QAERgB,IAA7ChB,EAAMG,KAAK9H,MAAM+H,wBACV,KAIPS,EAAAA,cAAA,QAAMC,UAAWc,IAAW,YAAa5B,EAAMc,YAC1Cf,EAAyBC,GAASmB,EAAoCnB,GAASU,EAAmBV,KAXjF,CAAC,kOCiI/B,MA6eM6B,EAAkBtH,IACfE,EAAAA,EAAAA,GAAaF,IAA8B,IAArBG,EAAAA,EAAAA,GAAYH,GAGrCuH,EAAWA,CAACC,EAAkBC,KAEhC,IAAIC,EAAU,GACVC,EAAcH,EAAWC,EACzBG,EAAQ,GACZ,IAAK,IAAI/K,EAAI,EAAGA,EAAI8K,EAAYhN,OAAQkC,IAChC8K,EAAY,GAAG9K,OAAS4K,GACxBG,EAAMzM,KAAKuM,GAEXA,EAAU,IAEVA,GAAWC,EAAY,GAAG9K,KAGlC,OAAO+K,CAAK,EAGVC,EAA4B,CAChCC,QAngBcnO,MAAOoO,EAAuCtC,EAA+CuC,EAA0CC,KACrJ,MAAMC,EAAYC,EAAe1C,GAEjC,IAAI2C,EAAe3C,EAAMG,KAAKyC,QAE9B,GAAIH,EAGF,YAFAI,EAAe7C,EAAOyC,GAKxBF,GAAY,QAEuBvB,IAA7BhB,EAAM8C,qBACVH,QAAsB3C,EAAM8C,oBAAuB9C,EAAMG,KAAKyC,SAGhE,MAAMG,QAAkBC,EAAAA,EAAAA,cAAahD,EAAM5L,QAAQK,eAEnD,GAAIuL,EAAMiD,mBAAqBjD,EAAMiD,kBAAkB/N,OAAS,EAAG,CACjE,MAAMgO,EAAgC,GAQtC,GANAlD,EAAMiD,kBAAkBzN,KAAI,CAAC2N,EAAeC,KACd,KAAxBD,EAAkB,YACpBD,EAAoBxN,KAAKyN,EAAkB,eAI3CD,EAAoBhO,OAAS,EAAG,CAClC,MAAMmO,QAAwBC,EAAAA,EAAAA,GAAwB,CAAE9O,cAAewL,EAAM5L,QAAQK,eAAiBsO,EAAUQ,KAAKlK,IAE/GmK,EAAsB,GAExBH,EAAgBnO,OAAS,GAC3BmO,EAAgBvM,SAAQC,GAAUyM,EAAa9N,KAAKqC,KAAKC,MAAMjB,MAGjE,MAAM0M,EAA2B,CAACP,EAAoB,IAEtDM,EAAa1M,SAAQ4M,IACfA,EAAqB,mBAAMD,EAAe,IAC5CA,EAAe/N,KAAKgO,EAAe,eAIvC,MAAMC,QAAyBZ,EAAUa,gBAAgB,CAAEC,YAAaJ,IAExE,GAAgC,YAA5BE,EAAiBG,OAAsB,CACzC,MAAMC,EAAiBJ,EAAiBtJ,cAAesJ,EAAiBtJ,aAAa2J,gBAAkBL,EAAiBtJ,aAAa2J,gBAAuB,GACtJC,EAAqBN,EAAiBtJ,cAAesJ,EAAiBtJ,aAAa6J,iBAAmBP,EAAiBtJ,aAAa6J,iBAAwB,GAE5JzO,EAAoB,CACxBoF,WAAY,GAAIC,OAAQiI,EAAUQ,KAAKlK,GAAIgE,gBAAiB,GAAIK,iBAAkB,GAClFhF,UAAW,GAAIqC,QAAS,GAAInB,UAAW,GACvCoB,SAAU,GAAIC,aAAc,GAAIC,WAAY,GAC5CC,OAAQ,GAAIC,OAAQ,GAAIC,OAAQ,GAAIC,OAAQ,GAAIC,OAAQ,GAAIC,OAAQ,GAAIC,OAAQ,GAAIC,OAAQ,GAAIC,OAAQ,GAAIC,QAAS,GACrHC,QAAS,GAAIC,QAAS,GAAIC,QAAS,GAAIC,QAAS,GAAIC,QAAS,GAAIC,QAAS,GAAIC,QAAS,GAAIC,QAAS,GAAIC,QAAS,GAAIC,QAAS,GAC9HC,QAAS,GAAIC,QAAS,GACtBC,SAAU,GAAIC,YAAa,GAC3BC,iBAAiB,EAAOC,KAAM,GAC9BC,aAAc,GAAIC,WAAY,GAAIC,WAAY,GAAIE,YAAa,GAAIuB,YAAY,GAAIb,QAAS,GAC5FT,WAAY,GAAIU,YAAa,GAC7BT,eAAgB,GAAIC,eAAgB,GAAIG,YAAa,GACrDC,UAAW,GAAIC,QAAS,GACxBzE,iBAAkB,GAClBsF,UAAW,GACXC,OAAQ,GACRT,YAAa,GACbd,UAAW,GAAIM,UAAW,GAC1Bc,YAAa,GAAIC,YAAa,GAC9BN,UAAW,GAAIC,UAAW,GAC1BH,qBAAsB,GACtBI,WAAY,GACZC,UAAW,GAAIC,UAAW,GAC1BO,YAAY,GACZD,cAAc,GACdE,qBAAqB,GACrBC,eAAe,GACfC,mBAAmB,GACnBC,mBAAmB,GACnBQ,QAAQ,EACRC,oBAAoB,SAGhBpF,EAAAA,EAAAA,IAAiB6F,EAAM5L,QAAS,gEAAiE2P,EAAiB,KAAOE,EAAoBxO,GAEnJoN,EAAe7C,EAAO,CAAEmE,cAAe,mBAAoBC,iBAAkBT,IAE7EpB,GAAY,GAGd,IAAK,IAAI1K,EAAI,EAAGA,EAAIqL,EAAoBhO,OAAQ2C,IAAK,CAGnD,UAFqBwM,EAAAA,EAAAA,IAAwB,CAAE7P,cAAewL,EAAM5L,QAAQK,eAAiByO,EAAoB,GAAGrL,MAEvG,CACX,MAAMU,EAAQ8K,EAAgB7K,MAAKzB,GACpBgB,KAAKC,MAAMjB,GAEA,aAAMmM,EAAoB,GAAGrL,OAGvD,GAAIU,EAAO,CACT,MAAM+L,EAASvM,KAAKC,MAAMO,GAEpB9C,EAAoB,CACxBoF,WAAYyJ,EAAmB,WAC/BxJ,OAAQwJ,EAAe,OACvBjH,gBAAiBiH,EAAwB,gBACzC5G,iBAAkB4G,EAAyB,iBAC3C5L,UAAW4L,EAAkB,UAC7BvJ,QAASuJ,EAAgB,QACzB1K,UAAW0K,EAAkB,UAC7BtJ,SAAUsJ,EAAiB,SAC3BrJ,aAAcqJ,EAAqB,aACnCpJ,WAAYoJ,EAAmB,WAC/BnJ,OAAQmJ,EAAe,OACvBlJ,OAAQkJ,EAAe,OACvBjJ,OAAQiJ,EAAe,OACvBhJ,OAAQgJ,EAAe,OACvB/I,OAAQ+I,EAAe,OACvB9I,OAAQ8I,EAAe,OACvB7I,OAAQ6I,EAAe,OACvB5I,OAAQ4I,EAAe,OACvB3I,OAAQ2I,EAAe,OACvB1I,QAAS0I,EAAgB,QACzBzI,QAASyI,EAAgB,QACzBxI,QAASwI,EAAgB,QACzBvI,QAASuI,EAAgB,QACzBtI,QAASsI,EAAgB,QACzBrI,QAASqI,EAAgB,QACzBpI,QAASoI,EAAgB,QACzBnI,QAASmI,EAAgB,QACzBlI,QAASkI,EAAgB,QACzBjI,QAASiI,EAAgB,QACzBhI,QAASgI,EAAgB,QACzB/H,QAAS+H,EAAgB,QACzB9H,QAAS8H,EAAgB,QACzB7H,SAAU6H,EAAiB,SAC3B5H,YAAa4H,EAAoB,YACjC3H,gBAAiB2H,EAAwB,gBACzC1H,KAAM0H,EAAa,KACnBzH,aAAcyH,EAAqB,aACnCxH,WAAYwH,EAAmB,WAC/BvH,WAAYuH,EAAmB,WAC/BrH,YAAaqH,EAAoB,YACjC9F,YAAa8F,EAAoB,YACjC3G,QAAS2G,EAAgB,QACzBpH,WAAYoH,EAAmB,WAC/B1G,YAAa0G,EAAoB,YACjCnH,eAAgBmH,EAAuB,eACvClH,eAAgBkH,EAAuB,eACvC/G,YAAa+G,EAAoB,YACjC9G,UAAW8G,EAAkB,UAC7B7G,QAAS6G,EAAgB,QACzBtL,iBAAkBsL,EAAyB,iBAC3ChG,UAAWgG,EAAkB,UAC7B/F,OAAQ+F,EAAe,OACvBxG,YAAawG,EAAoB,YACjCtH,UAAWsH,EAAkB,UAC7BhH,UAAWgH,EAAkB,UAC7BlG,YAAakG,EAAoB,YACjCjG,YAAaiG,EAAoB,YACjCvG,UAAWuG,EAAkB,UAC7BtG,UAAWsG,EAAkB,UAC7BzG,qBAAsByG,EAA6B,qBACnDrG,WAAYqG,EAAmB,WAC/BpG,UAAWoG,EAAkB,UAC7BnG,UAAWmG,EAAkB,UAC7B5F,YAAa4F,EAAoB,YACjC7F,cAAe6F,EAAsB,cACrC3F,qBAAsB2F,EAA6B,qBACnD1F,eAAgB0F,EAAuB,eACvCzF,mBAAoByF,EAA2B,mBAC/CxF,mBAAoBwF,EAA2B,mBAC/ChF,QAASgF,EAAgB,QACzB/E,oBAAqB+E,EAA4B,2BAG7CnK,EAAAA,EAAAA,IAAiB6F,EAAM5L,QAAS,8DAA+D,GAAIqB,OAQnH,IAAK,IAAIoC,EAAI,EAAGA,EAAImI,EAAMuE,MAAOrP,OAAQ2C,IAAK,CAC5C,MAAM2M,OAA6C,IAA1BxE,EAAMyE,OAAQ,GAAG5M,MAAkD,KAA1BmI,EAAMyE,OAAQ,GAAG5M,KAAcmI,EAAMyE,OAAQ,GAAG5M,KAAO,GACnH6M,EAAiB5C,EAAS0C,EAAW,KAErCG,OAAiD,IAA5B3E,EAAM4E,SAAU,GAAG/M,MAAmD,KAA3BmI,EAAM4E,SAAS,GAAG/M,KAAcmI,EAAM4E,SAAS,GAAG/M,KAAO,GACzHgN,EAAmB/C,EAAS6C,EAAa,KAEzCG,OAAmD,IAA7B9E,EAAM+E,UAAW,GAAGlN,MAAoD,KAA5BmI,EAAM+E,UAAU,GAAGlN,KAAcmI,EAAM+E,UAAU,GAAGlN,KAAO,GAC7HmN,OAA2D,IAAjChF,EAAMiF,cAAe,GAAGpN,MAAwD,KAAhCmI,EAAMiF,cAAc,GAAGpN,KAAcmI,EAAMiF,cAAc,GAAGpN,KAAO,GAC7IqN,OAAuD,IAA/BlF,EAAMmF,YAAa,GAAGtN,MAAsD,KAA9BmI,EAAMmF,YAAY,GAAGtN,KAAcmI,EAAMmF,YAAa,GAAGtN,KAAO,GAEtIuN,OAA2C,IAAzBpF,EAAMuE,MAAO,GAAG1M,KAAuBmI,EAAMuE,MAAO,GAAG1M,KAAO,GAAK,GACrFwN,EAAgBvD,EAASsD,EAAU,KAEzC,IAAK,IAAIE,EAAID,EAAcnQ,OAAS,EAAGoQ,EAAI,GAAIA,IAC7CD,EAAc3P,KAAK,IAGrB,MAAM6P,OAAiD,IAA5BvF,EAAMwF,SAAU,GAAG3N,KAAuBmI,EAAMwF,SAAU,GAAG3N,KAAO,IAAM,IAC/F4N,EAAkBF,EAAYG,UAAU,EAAGH,EAAYrQ,OAAS,GAChEyQ,OAA+C,IAA3B3F,EAAM4F,QAAS,GAAG/N,KAAuBmI,EAAM4F,QAAS,GAAG/N,KAAO,GAEtFgO,OAAmD,IAA7B7F,EAAM8F,WAAW,GAAGjO,KAAuBmI,EAAM8F,WAAY,GAAGjO,KAAO,GAE7FkO,OAAuD,IAA9B/F,EAAMgG,YAAY,GAAGnO,KAAuBmI,EAAMgG,YAAY,GAAGnO,KAAO,GAEjGoO,OAAgE,IAAnCjG,EAAMkG,iBAAiB,GAAGrO,MAAuBmI,EAAMkG,iBAAiB,GAAGrO,KACxGsO,OAA0C,IAAxBnG,EAAMoG,MAAM,GAAGvO,KAAuBmI,EAAMoG,MAAM,GAAGvO,KAAO,GAE9EwO,OAA0D,IAAhCrG,EAAMsG,cAAc,GAAGzO,KAAuBmI,EAAMsG,cAAe,GAAGzO,KAAO,GACvG0O,OAAsD,IAA9BvG,EAAMwG,YAAY,GAAG3O,KAAuBmI,EAAMwG,YAAa,GAAG3O,KAAO,GACjG4O,OAAsD,IAA9BzG,EAAM0G,YAAY,GAAG7O,KAAuBmI,EAAM0G,YAAa,GAAG7O,KAAO,GACjG8O,OAAwD,IAA/B3G,EAAM4G,aAAa,GAAG/O,KAAuBgP,OAAO7G,EAAM4G,aAAc,GAAG/O,MAAQ,GAC5GiP,OAAwD,IAA/B9G,EAAM+G,aAAa,GAAGlP,KAAuBgP,OAAO7G,EAAM+G,aAAc,GAAGlP,MAAQ,GAC5GmP,OAAwD,IAA/BhH,EAAMiH,aAAa,GAAGpP,KAAuBgP,OAAO7G,EAAMiH,aAAc,GAAGpP,MAAQ,GAC5GqP,OAA4D,IAAjClH,EAAMmH,eAAe,GAAGtP,KAAuBgP,OAAO7G,EAAMmH,eAAgB,GAAGtP,MAAQ,GAClHuP,OAA2E,IAAxCpH,EAAMqH,sBAAsB,GAAGxP,KAAuBgP,OAAO7G,EAAMqH,sBAAuB,GAAGxP,MAAQ,GAExIyP,OAA8D,IAAlCtH,EAAMuH,gBAAgB,GAAG1P,KAAuBgP,OAAO7G,EAAMuH,gBAAiB,GAAG1P,MAAQ,GAErH2P,OAAsE,IAAtCxH,EAAMyH,oBAAoB,GAAG5P,MAA+D,KAAvCmI,EAAMyH,oBAAqB,GAAG5P,KAAc,IAAImC,KAAK,KAAM,EAAG,GAAGY,cAAgBoF,EAAMyH,oBAAqB,GAAG5P,KAEpM6P,OAAsE,IAAtC1H,EAAM2H,oBAAoB,GAAG9P,MAA+D,KAAvCmI,EAAM2H,oBAAqB,GAAG9P,KAAc,IAAImC,KAAK,KAAM,EAAG,GAAGY,cAAgBoF,EAAM2H,oBAAqB,GAAG9P,KAEpM+P,OAAgD,IAA3B5H,EAAM6H,SAAS,GAAGhQ,KAAuBiB,OAAOkH,EAAM6H,SAAU,GAAGhQ,MAAQ,EAEhGiQ,OAAuE,IAAtC9H,EAAM+H,oBAAoB,GAAGlQ,KAAuBiB,OAAOkH,EAAM+H,oBAAqB,GAAGlQ,MAAQ,EAGlImQ,OAAiD,IAA5BhI,EAAMiI,UAAU,GAAGpQ,KAAuBmI,EAAMiI,UAAW,GAAGpQ,KAAO,GAE1FqQ,OAAsD,IAA9BlI,EAAMmI,YAAY,GAAGtQ,KAAuBmI,EAAMmI,YAAa,GAAGtQ,KAAO,GAEjGuQ,OAAoD,IAA7BpI,EAAMqI,WAAW,GAAGxQ,MAAsD,KAA9BmI,EAAMqI,WAAY,GAAGxQ,KAAc,IAAImC,KAAK,KAAM,EAAG,GAAGY,cAAgBoF,EAAMqI,WAAY,GAAGxQ,KAEhKyQ,OAAqD,IAA7BtI,EAAMqI,WAAW,GAAGxQ,KAAuBmI,EAAMqI,WAAW,GAAGxQ,KAAKsK,MAAM,KAAO,GACzGoG,OAAqD,IAA7BvI,EAAMwI,WAAW,GAAG3Q,KAAuBmI,EAAMwI,WAAW,GAAG3Q,KAAKsK,MAAM,KAAO,GAEzGsG,OAAkE,IAApCzI,EAAM0I,kBAAkB,GAAG7Q,KAAuBmI,EAAM0I,kBAAmB,GAAG7Q,KAAO,GACnH8Q,OAA8D,IAAlC3I,EAAM4I,gBAAgB,GAAG/Q,KAAuBmI,EAAM4I,gBAAiB,GAAG/Q,KAAO,GAC7GgR,OAAwD,IAA/B7I,EAAM8I,aAAa,GAAGjR,KAAuBmI,EAAM8I,aAAc,GAAGjR,KAAO,GAEpGkR,OAAoD,IAA7B/I,EAAMgJ,WAAW,GAAGnR,MAAqD,KAA9BmI,EAAMgJ,WAAY,GAAGnR,KAAcmI,EAAMgJ,WAAY,GAAGnR,MAAkC,IAAImC,MAAOY,cACvKqO,OAAgD,IAA3BjJ,EAAMkJ,SAAS,GAAGrR,MAAmD,KAA5BmI,EAAMkJ,SAAU,GAAGrR,KAAcmI,EAAMkJ,SAAU,GAAGrR,MAAkC,IAAImC,MAAOY,cAE/JuO,OAAkE,IAApCnJ,EAAMoJ,kBAAkB,GAAGvR,KAAuBmI,EAAMoJ,kBAAmB,GAAGvR,KAAO,GACnHwR,OAAoD,IAA7BrJ,EAAMsJ,WAAW,GAAGzR,MAAsD,KAA9BmI,EAAMsJ,WAAY,GAAGzR,KAAc,IAAImC,KAAK,KAAM,EAAG,GAAGY,cAAgBoF,EAAMsJ,WAAY,GAAGzR,KAEhK0R,OAA8C,IAA1BvJ,EAAMwJ,QAAQ,GAAG3R,KAAuBmI,EAAMwJ,QAAQ,GAAG3R,KAAO,GAEpF4R,OAAwD,IAA/BzJ,EAAM0J,aAAa,GAAG7R,KAAuBmI,EAAM0J,aAAc,GAAG7R,KAAO,GAEpG8R,QAA0E,IAAxC3J,EAAM4J,sBAAsB,GAAG/R,KAAuBmI,EAAM4J,sBAAuB,GAAG/R,KAAO,GAE/HgS,QAAoD,IAA7B7J,EAAM8J,WAAW,GAAGjS,MAAsD,KAA9BmI,EAAM8J,WAAY,GAAGjS,KAAc,IAAImC,KAAK,KAAM,EAAG,GAAGY,cAAgBoF,EAAM8J,WAAY,GAAGjS,KAChKkS,QAAoD,IAA7B/J,EAAMgK,WAAW,GAAGnS,KAAuBmI,EAAMgK,WAAY,GAAGnS,KAAO,GAE9FoS,QAAwD,IAA/BjK,EAAMkK,aAAa,GAAGrS,MAAwD,KAAhCmI,EAAMkK,aAAc,GAAGrS,KAAc,IAAImC,KAAK,KAAM,EAAG,GAAGY,cAAgBoF,EAAMkK,aAAc,GAAGrS,KAExKsS,QAAsD,IAA9BnK,EAAMoK,YAAY,GAAGvS,KAAuBmI,EAAMoK,YAAa,GAAGvS,KAAO,GACjGwS,QAAgD,IAA3BrK,EAAMsK,SAAS,GAAGzS,KAAuBmI,EAAMsK,SAAU,GAAGzS,KAAO,GACxF0S,GAAmBzI,EAASuI,GAAa,KAGzCG,QAAmD,IAA7BxK,EAAMyK,WAAW,GAAG5S,KAAuB6M,EAAexP,OAAS,EAAI,EAAI8K,EAAMyK,WAAY,GAAG5S,KAAO,EAC7H6S,QAAuE,IAAvC1K,EAAM2K,qBAAqB,GAAG9S,KAAuBmI,EAAM2K,qBAAqB,GAAG9S,KAAO,EAC1H+S,GAAwC,MAApB5K,EAAM6K,YAAsBH,GAAyB,EAE/E,IAAK,IAAIpF,EAAIiF,GAAiBrV,OAAS,EAAGoQ,EAAI,EAAGA,IAC/CiF,GAAiB7U,KAAK,IAGxB,IAAIoV,GAAuB,GACvBC,GAAsB,EACtBC,IAAqB,EACrBC,IAAsB,EAE1B,KAAOF,GAAsBrG,EAAexP,QAAW0V,IAAqBI,KAAuBC,IAAsB,CACvH,IAAIC,GAAc1Q,EAAAA,EAAAA,KAElB,MAAQqH,EAAeqJ,IACrBA,GAAc1Q,EAAAA,EAAAA,KAGhB,MAAM2Q,QAAwBpI,EAAUqI,iBAAiB,CACvDxI,QAASgI,IAAqBI,GAAqBhL,EAAM6K,WAAalI,EACtE0I,MAAOT,IAAqBI,GAAqBN,GAAyBF,GAC1Ec,kBAAmBtL,EAAMuL,oBAAqB,GAAGC,kBACjDC,qBAAsB,CAAEC,oCAAqC1L,EAAM2L,qCACnEC,kBAAkB,EAClBC,eAAgB7L,EAAM6L,eACtBC,iBAAyD,IAArC9L,EAAM+L,kBAAmB,GAAGlU,KAAuBmI,EAAM+L,kBAAmB,GAAGlU,KAAO,EAC1GmU,6BAA8BhM,EAAMgM,+BAGhCC,EAA4BpF,OAAO9D,EAAUQ,KAAK2I,UAAWnJ,EAAUQ,KAAK2I,UAAWhX,OAAS,GAAGiX,WACnGC,EAAqBrJ,EAAUQ,KAAK2I,UAAWnJ,EAAUQ,KAAK2I,UAAWhX,OAAS,GAAGmX,OAErF5W,EAAoB,CACxBoF,WAAYuR,EAAYtR,OAAQiI,EAAUQ,KAAKlK,GAAIgE,gBAAiB6N,EAAaxN,iBAAkBqN,GAAsB,EAAID,GAAuB,GACpJpS,UAAWuT,EAAmBlR,QAAS8J,EAAiB,GAAGkG,MAC3DnR,UAAW8K,EAAe,GAAGqG,MAC7B/P,SAAU8J,EAAc7J,aAAc+J,EAAkB9J,WAAYgK,EACpE/J,OAAQkK,EAAc,GAAIjK,OAAQiK,EAAc,GAAIhK,OAAQgK,EAAc,GAAI/J,OAAQ+J,EAAc,GAAI9J,OAAQ8J,EAAc,GAC9H7J,OAAQ6J,EAAc,GAAI5J,OAAQ4J,EAAc,GAAI3J,OAAQ2J,EAAc,GAAI1J,OAAQ0J,EAAc,GAAIzJ,QAASyJ,EAAc,GAC/HxJ,QAASwJ,EAAc,IAAKvJ,QAASuJ,EAAc,IAAKtJ,QAASsJ,EAAc,IAAKrJ,QAASqJ,EAAc,IAAKpJ,QAASoJ,EAAc,IAAKnJ,QAASmJ,EAAc,IAAKlJ,QAASkJ,EAAc,IAAKjJ,QAASiJ,EAAc,IAAKhJ,QAASgJ,EAAc,IAAK/I,QAAS+I,EAAc,IACnR9I,QAASoJ,EAAYnJ,QAASiJ,EAC9BhJ,SAAUoJ,EAAcnJ,YAAaqJ,EACrCpJ,gBAAiBsJ,EAAqBrJ,KAAMuJ,EAC5CtJ,aAAcwJ,EAAkBvJ,WAAYyJ,EAAgBxJ,WAAY0J,EAAgBxJ,YAAa0J,EAAiBnI,YAAasI,EAAiBnJ,QAASqK,EAC7J9K,WAAYgL,EAAgBtK,YAAa6L,EACzCtM,eAAgBsL,EAAsBrL,eAAgBuL,EAAoBpL,YAAasL,EACvFrL,UAAWuL,EAAetL,QAASwL,EACnCjQ,iBAAkBmQ,EAClB7K,UAAW+K,EACX9K,OAAQgL,EACRzL,YAAamM,GACbjN,UAAWoL,EAAe9K,UAAWiL,EAAe,GAAKA,EAAe,GAAK,GAC7EnK,YAAakK,EAAe,GAAKA,EAAe,GAAK,GAAIjK,YAAakK,EAAe,GAAKA,EAAe,GAAK,GAC9GxK,UAAW8L,GAAe7L,UAAW+L,GACrClM,qBAAsB8L,GACtB1L,WAAYkM,GACZjM,UAAWqM,GAAiB,GAAIpM,UAAWoM,GAAiB,GAC5D7L,YAAasI,EACbvI,cAAeyI,EACfvI,qBAAsByI,EACtBxI,eAAgB0I,EAChBzI,mBAAoB2I,EACpB1I,mBAAoB4I,EACpBpI,QAASsI,EACTrI,oBAAqBuI,GAGvB,GAA+B,YAA3BqD,EAAgBrH,OAAsB,CACZ,IAAxBiH,KACAD,GAAuBsB,GAG3B,IAAIE,EAAavJ,EAAUQ,KACvBgJ,EAA8BxJ,EAAUQ,KAAK2I,UAAYnJ,EAAUQ,KAAK2I,UAAY,GAEpFK,EAAgBrX,OAAS,IAC3BqX,EAAiBA,EAAgBrX,OAAS,GAAGsX,QAAUtB,QAEjDuB,EAAAA,EAAAA,sBAAqB,CAAEjY,cAAewL,EAAM5L,QAAQK,eAAiB6X,EAAWjT,GAAIkT,IAG5F,IAsCIG,EAAqB,CACvBzN,KAvC6B,CAC7BpE,WAAYuR,EAAYtR,OAAQiI,EAAUQ,KAAKlK,GAC/CgE,gBAAiB6N,EAAaxN,iBAAkBqN,GAAsB,EAAID,GAAuB,GACjGpS,UAAWuT,EACXlR,QAAS8J,EAAiB,GAAGkG,MAAwBnR,UAAW8K,EAAe,GAAGqG,MAClF/P,SAAU8J,EAAc7J,aAAc+J,EAAkB9J,WAAYgK,EACpE/J,OAAQkK,EAAc,GAAIjK,OAAQiK,EAAc,GAAIhK,OAAQgK,EAAc,GAAI/J,OAAQ+J,EAAc,GACpG9J,OAAQ8J,EAAc,GAAI7J,OAAQ6J,EAAc,GAAI5J,OAAQ4J,EAAc,GAAI3J,OAAQ2J,EAAc,GACpG1J,OAAQ0J,EAAc,GAAIzJ,QAASyJ,EAAc,GAAIxJ,QAASwJ,EAAc,IAAKvJ,QAASuJ,EAAc,IACxGtJ,QAASsJ,EAAc,IAAKrJ,QAASqJ,EAAc,IAAKpJ,QAASoJ,EAAc,IAAKnJ,QAASmJ,EAAc,IAC3GlJ,QAASkJ,EAAc,IAAKjJ,QAASiJ,EAAc,IAAKhJ,QAASgJ,EAAc,IAAK/I,QAAS+I,EAAc,IAC3G9I,QAASoJ,EAAYnJ,QAASiJ,EAAiBhJ,SAAUoJ,EAAcnJ,YAAaqJ,EACpFpJ,gBAAiBsJ,EAAqBrJ,KAAMuJ,EAC5CtJ,aAAcwJ,EAAkBvJ,WAAYyJ,EAC5CxJ,WAAY0J,EAAgBxJ,YAAa0J,EAAiBnI,YAAasI,EAAiBnJ,QAASqK,EACjG9K,WAAYgL,EAAgBtK,YAAa6L,EACzCtM,eAAgBsL,EAAsBrL,eAAgBuL,EAAoBpL,YAAasL,EACvFrL,UAAWuL,EAAetL,QAASwL,EACnCjQ,iBAAkBmQ,EAClB7K,UAAW+K,EACX9K,OAAQgL,EACRzL,YAAamM,GACbjN,UAAWoL,EAAe9K,UAAWiL,EAAe,GAAKA,EAAe,GAAK,GAC7EnK,YAAakK,EAAe,GAAKA,EAAe,GAAK,GAAIjK,YAAakK,EAAe,GAAKA,EAAe,GAAK,GAC9GxK,UAAW8L,GAAe7L,UAAW+L,GACrClM,qBAAsB8L,GACtB1L,WAAYkM,GACZjM,UAAWqM,GAAiB,GAAIpM,UAAWoM,GAAiB,GAC5D7L,YAAasI,EACbvI,cAAeyI,EACfvI,qBAAsByI,EACtBxI,eAAgB0I,EAChBzI,mBAAoB2I,EACpB1I,mBAAoB4I,EACpBpI,QAASsI,EACTrI,oBAAqBuI,GAKrB5I,SAAS,EACTC,YAAa,GACbC,QAAQ,EACRC,cAAc,IAITuL,IAAsBA,KAAsBI,KACjD0B,EAASzN,KAAKvG,UAAYmO,OAAO7G,EAAM6K,WAAWlV,UAClD+W,EAASzN,KAAKvB,iBAAmBoN,GACjC4B,EAASzN,KAAKlE,QAAU,GACxB2R,EAASzN,KAAKrF,UAAY,GAC1B8S,EAASzN,KAAKjE,SAAW,GACzB0R,EAASzN,KAAKhE,aAAe,GAC7ByR,EAASzN,KAAK/D,WAAa,GAC3BwR,EAASzN,KAAK9D,OAASkK,EAAc,GACrCqH,EAASzN,KAAK7D,OAASiK,EAAc,GACrCqH,EAASzN,KAAK5D,OAAS,GACvBqR,EAASzN,KAAK3D,OAAS,GACvBoR,EAASzN,KAAK1D,OAAS,GACvBmR,EAASzN,KAAKzD,OAAS,GACvBkR,EAASzN,KAAKxD,OAAS,GACvBiR,EAASzN,KAAKvD,OAAS,GACvBgR,EAASzN,KAAKtD,OAAS,GACvB+Q,EAASzN,KAAKrD,QAAU,GACxB8Q,EAASzN,KAAKpD,QAAU,GACxB6Q,EAASzN,KAAKnD,QAAU,GACxB4Q,EAASzN,KAAKlD,QAAU,GACxB2Q,EAASzN,KAAKjD,QAAU,GACxB0Q,EAASzN,KAAKhD,QAAU,GACxByQ,EAASzN,KAAK/C,QAAU,GACxBwQ,EAASzN,KAAK9C,QAAU,GACxBuQ,EAASzN,KAAK7C,QAAU,GACxBsQ,EAASzN,KAAK5C,QAAU,GACxBqQ,EAASzN,KAAK3C,QAAU,GACxBoQ,EAASzN,KAAK1C,QAAU,GACxBmQ,EAASzN,KAAKzC,QAAU,GACxBkQ,EAASzN,KAAKxC,SAAW,GACzBiQ,EAASzN,KAAKvC,YAAc,GAC5BgQ,EAASzN,KAAKtC,iBAAkB,EAChC+P,EAASzN,KAAKrC,KAAO,GACrB8P,EAASzN,KAAKpC,aAAe,GAC7B6P,EAASzN,KAAKnC,WAAa,GAC3B4P,EAASzN,KAAKlC,WAAa,GAC3B2P,EAASzN,KAAKhC,YAAc,GAC5ByP,EAASzN,KAAKtB,QAAU,GACxB+O,EAASzN,KAAK/B,WAAa,GAC3BwP,EAASzN,KAAKrB,YAAc,GAC5B8O,EAASzN,KAAK9B,eAAiB,GAC/BuP,EAASzN,KAAK7B,eAAiB,GAC/BsP,EAASzN,KAAK1B,YAAc,GAC5BmP,EAASzN,KAAKjG,iBAAmB,GACjC0T,EAASzN,KAAKjB,UAAY,GAC1B0O,EAASzN,KAAKhB,WAAa,GAC3ByO,EAASzN,KAAKf,UAAY,GAC1BwO,EAASzN,KAAKd,UAAY,GAC1BuO,EAASzN,KAAKb,YAAc,GAC5BsO,EAASzN,KAAKZ,YAAc,GAE5BqO,EAASrN,cAAe,EAExB4L,IAAsB,GAKxB,UAFqBlM,EAAAA,EAAAA,IAAuBiB,EAAM5L,QAASsY,GAE9C,CACX,MAAM3I,EAAiBoH,EAAgB9Q,cAAe8Q,EAAgB9Q,aAAa2J,gBAAkBmH,EAAgB9Q,aAAa2J,gBAAuB,GACnJC,EAAqBkH,EAAgB9Q,cAAe8Q,EAAgB9Q,aAAa6J,iBAAmBiH,EAAgB9Q,aAAa6J,iBAAwB,SAEzJ/J,EAAAA,EAAAA,IAAiB6F,EAAM5L,QAAS,sEAAuE2P,EAAiB,IAAME,EAAoBxO,GAExJoN,EAAe7C,EAAO,CAAEmE,cAAe,mBAAoBC,iBAAkB+G,IAE7E5I,GAAY,QAET,CACL,MAAMwB,EAAiBoH,EAAgB9Q,cAAe8Q,EAAgB9Q,aAAa2J,gBAAkBmH,EAAgB9Q,aAAa2J,gBAAuB,GACnJC,EAAqBkH,EAAgB9Q,cAAe8Q,EAAgB9Q,aAAa6J,iBAAmBiH,EAAgB9Q,aAAa6J,iBAAwB,SAEzJ/J,EAAAA,EAAAA,IAAiB6F,EAAM5L,QAAS,iEAAkE2P,EAAiB,IAAME,EAAoBxO,GAEnJoN,EAAe7C,EAAO,CAAEmE,cAAe,mBAAoBC,iBAAkB+G,IAE7E5I,GAAY,GAGVwI,GAAsBrG,EAAexP,QACvC6V,KAGEH,KAAsBI,KACxBA,IAAqB,IAK3B2B,EAAgB3M,EAAM,GA4BlB4M,EAA+D5M,IAAiD,IAAA6M,EAAAC,EAAAC,EACpH,MAAOC,EAAUzK,IAAe0K,EAAAA,EAAAA,WAAS,IAClCC,EAAWC,IAAgBF,EAAAA,EAAAA,WAAS,GAMrCG,EAAiBpN,EAAMG,KAAK9H,MAChCwI,IAAAA,cAACU,EAA4B,CAC3BpB,KAAM,CAAE9H,MAAO2H,EAAMG,KAAK9H,OAC1BjE,QAAS4L,EAAM5L,QACfiZ,GAAIrN,EAAMqN,GACVC,SAAUtN,EAAMsN,SAChBrM,cAAkC,QAArB4L,EAAE7M,EAAMuN,qBAAa,IAAAV,OAAA,EAAnBA,EAAqB5L,cACpCG,kBAAsC,QAArB0L,EAAE9M,EAAMuN,qBAAa,IAAAT,OAAA,EAAnBA,EAAqB1L,kBACxCC,iBAAqC,QAArB0L,EAAE/M,EAAMuN,qBAAa,IAAAR,OAAA,EAAnBA,EAAqB1L,mBACnC,GAEFmM,EAA0B,CAC9BpZ,QAAS4L,EAAM5L,QACf0M,UAAW,kBACXuM,GAAIrN,EAAMqN,GACVC,SAAUtN,EAAMsN,SAChBnN,KAAM,CAAEyC,QAAS5C,EAAMG,KAAKyC,QAASvK,MAAO2H,EAAMG,KAAK9H,OACvDkV,cAAevN,EAAMuN,cACrBE,cAAezN,EAAMyN,cACrBC,aAAc1N,EAAM5L,QAAQuZ,QAAQD,aACpCE,qBAAoC5M,IAAnBhB,EAAM6N,SAAyB7N,EAAM6N,SAAW,EACjET,eAAgBA,EAChBU,cAAe9N,EAAM8N,cACrBZ,UAAWA,EACXC,aAAcA,EACdY,iBAAkB/N,EAAM+N,kBAGpBC,EAAmBnN,IAAAA,cAACoN,EAAAA,MAAKC,OAAAC,OAAA,GAAKX,IAC9BtU,EAAQkV,EAAYpO,GACpBqO,GAAUC,EAAAA,EAAAA,kBAAiBC,EAAAA,GAAe3B,UAAW5M,EAAM+N,iBAAmB7U,EAAO,IACrFsV,GAAaC,EAAAA,EAAAA,wBAAuBzO,EAAM+N,iBAAmBM,GAEnE,OACExN,IAAAA,cAAAA,IAAAA,SAAA,KACGmN,EACDnN,IAAAA,cAAA,SAAAqN,OAAAC,OAAA,CACErN,UAAWc,IAAW,mBAAoB5B,EAAMc,YAC5C0N,EAAU,CACdnM,QA3CiBnO,gBACfkO,EAA0BC,QAAQqM,EAAO1O,EAAOuC,EAAa4K,EAAa,EA2C5EH,SAAUhN,EAAMgN,UAAYA,GAAY2B,EAAoB3O,IAAU4O,EAAqB5O,GAAO,KAEjGoO,EAAYpO,IAEd,EAKP4M,EAAUiC,aAAe,CAAEhB,SAAU,GAErC,MAAMO,EAAepO,GACV4O,EAAqB5O,GAAO,GAASA,EAAM8O,eAAiB9O,EAAM+O,cAGvErM,EAAkB1C,IACpB,MAAM,KAAEG,EAAI,oBAAEoL,EAAmB,sBAAEyD,EAAqB,kBAAEjD,EAAiB,kBAAEkD,EAAiB,kBAAEC,EAAiB,yBAAEC,EAA2B,IAAI,yBAAEC,EAA2B,GAAMpP,EAErL,IAAKG,IAASA,EAAKyC,QAAQjN,SAEvB,MAAO,CAAEwO,cAAe,cAG5B,GAAIhE,EAAKyC,QAAQyM,WAAY,CACzB,MAAMC,EAAoBnP,EAAKyC,QAAQyM,WAAWE,QAAOC,KAAeA,EAAUC,gBAAkBD,EAAUC,eAAeC,SAE7H,GAAIJ,EAAkBpa,OAAS,EAE3B,MAAO,CAAEiP,cAAe,mBAAoBmL,kBAAmBA,GAIvE,GAAIV,EAAqB5O,GAAO,GAAO,CACnC,MAAMsL,EAAqBC,GAAuBA,EAAoBC,mBAAsB,EAG5F,MAAO,CAAErH,cAAe,aAAcwL,UAFpBtP,KAAKC,IAAIgL,EAAmB,IAMlD,OAAI0D,KACCjD,GAAqBA,EAAkB,IAAMkD,GAAqBE,IAA6BpD,EAAkB,IAAMmD,GAAqBE,IACtI,CAAEjL,cAAe,4BAF5B,CAMgB,EAGdyK,EAAuBA,CAAC5O,EAA+C4P,KACzE,QAAkD5O,IAA9ChB,EAAM5L,QAAQyb,IAAIC,OAAOlE,mBAAgF,IAA9C5L,EAAM5L,QAAQyb,IAAIC,OAAOlE,kBACjF5L,EAAM+P,WAAa/P,EAAMgQ,qBAAuBhQ,EAAMiQ,0BAA4BjQ,EAAMkQ,2BAA6BlQ,EAAMmQ,uBAE9H,OAAO,EAGX,IAAKnQ,EAAMG,OAASH,EAAMG,KAAKyC,QAAQjN,SAEnC,OAAO,EAGX,GAAIqK,EAAMG,KAAKyC,QAAQyM,YACfrP,EAAMG,KAAKyC,QAAQyM,WAAW7W,MAAKgX,KAAeA,EAAUC,gBAAkBD,EAAUC,eAAeC,SAEvG,OAAO,EAGf,MAAMU,EAAyBR,GAA0B5P,EAAM6N,SAAW7N,EAAM6N,SAAW,EAE3F,QAAQ7N,EAAMuL,0BACyCvK,IAAhDhB,EAAMuL,oBAAoBC,mBAC1BxL,EAAMuL,oBAAoBC,mBAAqB4E,EACpC,EAGhBzB,EAAuB3O,KACrBA,EAAMG,KAAKyC,QAAQyM,aACfrP,EAAMG,KAAKyC,QAAQyM,WAAW7W,MAAKgX,KAAeA,EAAUC,gBAAkBD,EAAUC,eAAeC,cAM1G1P,EAAM+P,WAAc/P,EAAMgQ,qBAAwBhQ,EAAMiQ,0BAA6BjQ,EAAMkQ,2BAO9FvD,EAAmB3M,IACnBA,EAAMqQ,OACRrQ,EAAMqQ,SAIJxN,EAAiBA,CAAC7C,EAA+CnJ,KAC/DmJ,EAAMsQ,SACNtQ,EAAMsQ,QAAQzZ,IAKT0Z,EAAoG/O,EAAAA,GAAiBC,gBAC9H,iXAAWC,CAAA,CACTC,UAAWiL,GAAcxK,+ZCnyBzB,SAAUoO,EACR3Z,EACA0M,EACAkN,EACArc,EACAwO,EACA2I,EACAmF,GAEJ,GAA6B,eAAzB7Z,EAAOsN,cACP,OAAOsM,EAAUE,0BACd,GAA6B,qBAAzB9Z,EAAOsN,cAAsC,CACpD,GAAItN,EAAOuN,kBAA0D,gBAAtCvN,EAAOuN,iBAAiBwM,UAA6B,CAEhF,IAAIC,GAAyB,EAC7B,MAAMC,EAAkBlO,aAAO,EAAPA,EAASjN,SAEjC,IAAK,IAAIkC,EAAI,EAAGA,EAAI0L,EAAMA,KAAK2I,UAAWhX,OAAQ2C,IAAK,KAAAkZ,EACnD,GAAIxN,EAAMA,KAAK2I,UAAW,GAAGrU,KAAKsU,YAAc2E,IAC3CvN,EAAMA,KAAK2I,UAAW,GAAGrU,KAAKmZ,cAAgB,OAASN,IAAwD,QAAhDK,EAAI3c,EAAQK,cAAcC,eAAeuc,eAAO,IAAAF,OAAA,EAA5CA,EAA8CG,yBAA0B,MAC3I3N,EAAMA,KAAK2I,UAAW,GAAGrU,KAAKsZ,oBAAsB,QAAST,aAAQ,EAARA,EAAUU,gBAAiB,IAAK,CAC9FP,EAAiBhZ,EAEjB,OAIR,IAAIwZ,EAAuB,EAE3B,IAAwB,IAApBR,EAAuB,CACvB,MAAMS,uWAAgB5P,CAAA,GAAO6B,EAAMA,KAAK2I,UAAW,GAAG2E,MACtDQ,EAAcC,EAAiBC,UAAY,EAI/C,MAAMC,EAA6Bpd,EAAQyb,IAAIC,OAAO0B,2BAChDC,EAAelG,aAAmB,EAAnBA,EAAqBC,kBAE1C,IAAIkG,EAYJ,OATIA,OAD+B1Q,IAA/BwQ,QAA6DxQ,IAAjByQ,EAC5B,QACQzQ,IAAjByQ,EACSD,OACsBxQ,IAA/BwQ,EACSC,EAEApR,KAAKsR,IAAIH,EAA4BC,GAGlDhB,EAAUmB,qBAAqBC,QAAQ,gBAAiBR,EAAY3X,YAAYmY,QAAQ,gBAAiBH,EAAchY,YACpC,IAAAoY,EAAvF,OAAIjb,EAAOuN,kBAA0D,mBAAtCvN,EAAOuN,iBAAiBwM,UAC5B,QAA9BkB,EAAOjb,EAAOuN,wBAAgB,IAAA0N,GAAc,QAAdA,EAAvBA,EAAyBzX,oBAAY,IAAAyX,OAAA,EAArCA,EAAuC5N,iBAG3CuM,EAAUE,0BAIzB,CAEM,SAAUoB,EAA4Blb,EAAwC4Z,EAAgDuB,GAChI,IAAKnb,EACD,MAAO,CAAC,EAGZ,MAAMob,EAA4D,CAAC,EAMnE,OAJApb,EAAOC,SAAQ0Y,IACXyC,EAAWzC,EAAU0C,oBAMvB,SAA2CC,EAA4B1B,EAAgDuB,GACzH,OAAQG,GACJ,KAAK,EACD,OAAO1B,EAAU2B,sCACrB,KAAK,EACD,OAAO3B,EAAU4B,8CACrB,KAAK,EACD,OAAO5B,EAAU6B,qCACrB,KAAK,EACD,OAAON,EAAavB,EAAU8B,uCAAyC9B,EAAU+B,sCACrF,QACI,MAAO,GAEnB,CAnBmDC,CAAiCjD,EAAU0C,mBAAoBzB,EAAWuB,EAAW,IAG7HC,CACX,mmBClEO,MAAMS,EAA+EC,IACuyB,IADtyB,QAC3F/P,EAAO,kBAAEgQ,EAAiB,qBAAEC,EAAoB,iBAAEC,EAAgB,KAAEvP,EAAI,UAAEkN,EAAS,QAAErc,EAAO,OAAE0b,EAAM,WAAEiD,EAAU,iBAAEhF,EAAgB,sBAAEiB,EAAqB,iBAAEgE,EAAgB,eAAEnH,EAAc,UAAEoH,EAAS,kBAAEhQ,EAAiB,OAAEwB,EAAM,SAAEG,EAAQ,UAAEG,EAAS,cAAEE,EAAa,YAAEE,EAAW,MAAEZ,EAAK,YAAEyB,EAAW,WAAEF,EAAU,SAAEN,EAAQ,QAAEI,EAAO,kBAAE8C,EAAiB,iBAAExC,EAAgB,MAAEE,EAAK,cAAEE,EAAa,YAAEE,EAAW,YAAEE,EAAW,aAAEE,EAAY,aAACG,EAAY,WAAEsB,EAAU,WAAEG,EAAU,YAAEL,EAAW,gBAAES,EAAe,aAAEE,EAAY,WAAEE,EAAU,SAAEE,EAAQ,kBAAEE,EAAiB,WAAEE,EAAU,QAAEE,EAAO,UAAEvB,EAAS,aAAEyB,GAAY,sBAAEE,GAAqB,aAAEM,GAAY,WAAEJ,GAAU,WAAEE,GAAU,YAAEI,GAAW,SAAEE,GAAQ,WAAEG,GAAU,WAAEI,GAAU,qBAAEF,GAAoB,SAAEqC,GAAQ,WAAEkG,GAAU,aAAEjM,GAAY,eAAEE,GAAc,sBAAEE,GAAqB,gBAAEE,GAAe,oBAAEE,GAAmB,oBAAEE,GAAmB,SAACE,GAAQ,oBAAEE,IAA0B4K,EAC73B,MAAOQ,GAAeC,KAAoBnG,EAAAA,EAAAA,UAA0C,CAClFY,SAAU,EACV8D,SAAK3Q,EACLV,SAAKU,EACLqS,WAAY,CACVC,gBAAiB,CAAC,EAClBC,cAAe,GACfC,kBAAmB,GACnBC,WAAY,GACZC,UAAW,aAEbC,qBAAiB3S,EACjB4S,8BAA0B5S,EAC1B6S,kBAAc7S,EACd8S,4BAAwB9S,EACxBkM,eAAWlM,EACXgP,yBAAqBhP,EACrBkP,+BAA2BlP,EAC3B+S,mBAAe/S,EACf6K,oBAAgB7K,EAChBgS,sBAAkBhS,EAClBgO,2BAAuBhO,IAGnBgT,GAAuC,CAC3CC,UAAW,CACTC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEvCG,UAAU,GAGNpF,GAA2BU,EAAOZ,kBAClCC,GAA2BW,EAAOb,kBAExC,IAAIwF,GAA4C,IAAIC,EAAAA,mBAAyB,GACzEC,GAAqC/B,EAAkB1d,OAAS,EAAI0d,EAAkB,GAAK,GAC3FiB,GAA6Bf,EAAiBvD,QAAQxY,GAAyB6L,EAAQjN,WAAaoB,EAAOoV,YAC3GyI,GAAwBrR,EACxB0O,GAAuC,CAAC,EACxC5E,GAAKzK,EAAkB,SAQvBmR,GAA0D,GAA1Cjb,OAAOqa,GAAcH,kBAErCzH,GAAgDsH,aAAoB,EAApBA,EAAsBtD,QAAQxY,GAAkD6L,EAAQjN,WAAaoB,EAAOoV,YAAW3W,KAAKqf,IACvK,CACL1I,UAAW0I,EAAK1I,UAChBX,kBAAmBqJ,EAAKC,eACxBC,cAAe,OACfC,oBAAqB,OAIzB,MAAMzH,GAAgB,CACpB0H,aAAcxE,EAAUyE,mBACxBC,qBAAsB1E,EAAU2E,2BAChCC,kBAAmB5E,EAAU6E,qBAC7BC,qBAAsB9E,EAAU+E,8BAChCC,kBAAmBhF,EAAUiF,wBAC7BzU,cAAewP,EAAUkF,UACzBvU,kBAAmBqP,EAAUrP,kBAC7BC,iBAAkBoP,EAAUpP,kBAG9B,IAAIuU,GAAwD,CAC1DC,eAAiBC,IACb,MAAMC,EAAarU,EAAA,GAAQyR,GAAcE,YAUzC,OATA0C,EAAcxC,mBAAgBvS,EAC9B+U,EAActC,gBAAazS,EAE3BoS,IAAiB4C,GAAStU,EAAAA,EAAA,GACnBsU,GAAS,IACZnI,SAAUiI,EACVzC,WAAY0C,OAGT,CAAI,EAEfE,iBAAmBC,IACf9C,IAAiB4C,GAAStU,EAAAA,EAAA,GACnBsU,GAAS,IACZ3C,WAAY6C,KAEf,EAELC,sBAAuBA,CACnBC,EACAC,EACAC,EACAC,KAEAnD,IAAiB4C,GAAStU,EAAAA,EAAA,GACnBsU,GAAS,IACZrC,gBAAiByC,EACjBxC,yBAA0ByC,EAC1BvC,uBAAwByC,KACzB,EAGPC,uBAAwBA,CAACC,EAA6BC,KAClDzE,GAAW,GAAGwE,KAAyBC,EAChCjC,GAAqBkC,SAAQ,IAEzB,IAAIC,SAActR,GAAKA,QAC/BxQ,OAAO+hB,IAEN,GAAIA,IAAWC,EAAAA,wBAAwBC,gCACnC,MAAMF,MAIlBG,gBAAiBA,CAACC,EAAuBC,IAC9B,kBAGXC,gBAAkBC,IACdhE,IAAiB4C,GAAStU,EAAAA,EAAA,GACnBsU,GAAS,IACZ9I,UAAWkK,KACZ,EAEPC,wBAA0BC,IACtBlE,IAAiB4C,GAAStU,EAAAA,EAAA,GACnBsU,GAAS,IACZhG,oBAAqBsH,KACtB,EAOPC,8BAAgCC,IAC5BpE,IAAiB4C,GAAStU,EAAAA,EAAA,GACnBsU,GAAS,IACZ9F,0BAA2BsH,KAC5B,EAEPC,iBAAmB3L,IACf,MAAMiK,EAAarU,EAAA,GAAQyR,GAAcE,YACzC0C,EAAcvC,uBAAoBxS,EAElCoS,IAAiB4C,GAAStU,EAAAA,EAAA,GACnBsU,GAAS,IACZnK,gBAAgB,EAChBmH,iBAAkBlH,EAClBuH,WAAY0C,KACb,IAKT2B,EAAAA,EAAAA,YAAU,KACR,IAAIC,EAA+BhD,GAC/BiD,EAAgC9E,EAAiBvD,QAAQxY,GAAyB6L,EAAQjN,WAAaoB,EAAOoV,YAElHiH,IAAiB4C,GAAStU,EAAAA,EAAA,GACrBsU,GAAS,IACZrC,gBAAiBgE,EACjB9D,aAAc+D,EAAgB,MAC7B,GACF,IA4DH,OACE/W,IAAAA,cAAA,OAAKC,UAAW,oCACb8B,GACC/B,IAAAA,cAAC0P,EAAAA,iCAAgC,CAC/BxB,cAAemE,GAAagE,EAAAA,GAAyB,GAAGnE,KAAgBmE,EAAAA,GAAwB,GAAGnE,KACnGjE,eAAgB2B,EAAUoH,6BAE1BhK,SAAUsF,GAActF,SACxB1N,KAAM,CAAEyC,QAAS+R,GAAoBtc,MAAOwb,GAAa,GAAItQ,KAAMqR,IACnExgB,QAASA,EACTiZ,GAAIA,GACJC,SArMO,6BAsMPgD,QAtEkBpc,UACxB,IAAI4jB,EACAC,EACAC,QAA6BzU,EAC7B0U,EAAyCzH,EAAyB3Z,EAAQmhB,EAASvH,EAAWrc,EAASugB,GAAoBpJ,GAAoB,QAAIvK,GAWvJ,GAT6B,eAAzBnK,EAAOsN,cACT2T,EAAiD,eAAzBjhB,EAAOsN,cDrM/B,SAA2BwL,EAA+Bc,GAC5D,OAAKd,GAAaA,GAAa,EACpBc,EAAUyH,uBACI,IAAdvI,EACAc,EAAU0H,8BAEV1H,EAAU2H,6BAA6BvG,QAAQ,YAAalC,EAAUjW,WAErF,CC6LsE2e,CAAiBxhB,EAAO8Y,UAAWc,QAAazP,EAC9E,qBAAzBnK,EAAOsN,gBAAwCtN,EAAOuN,kBAA2D,gBAAtCvN,EAAOuN,iBAAiBwM,WAAqE,mBAAtC/Z,EAAOuN,iBAAiBwM,YACnKkH,EAAwBtH,EAAyB3Z,EAAQmhB,EAASvH,EAAWrc,EAASwO,EAASiQ,OAAsB7R,GAGrHiX,OAAqBjX,GAGM,wBAAzBnK,EAAOsN,cACT,QAAuCnD,IAAnCmS,GAAcH,kBAAkCG,GAAcH,iBAAiB,GAA2B5D,GAA2B,CACvI,MAAMkJ,EAAsBlkB,EAAQ8M,iBAAiBN,eAAoCwO,IAEzF2I,EAA4BtH,EAAU8H,6BAA6B1G,QAAQ,cAAeyG,QACrF,GAAInF,GAAcH,iBAAiB,GAA2B7D,GAA2B,CAC9F,MAAMmJ,EAAsBlkB,EAAQ8M,iBAAiBN,eAAoCuO,IAEzF4I,EAA4BtH,EAAU+H,6BAA6B3G,QAAQ,cAAeyG,GAI9FlF,IAAiB4C,GAAStU,EAAAA,EAAA,GACrBsU,GAAS,IACZ3C,WAAY,CACVK,UAAW,YACXH,cAAeuE,EACfxE,gBAA0C,qBAAzBzc,EAAOsN,cAAuC4N,EAA4Blb,EAAOyY,kBAAmBmB,EAAW7N,aAAO,EAAPA,EAAS6V,YAAc,CAAC,EACxJjF,kBAAmBuE,EACnBtE,WAAYwE,MAGf,EAkCK5H,MA/BmBqI,KAAK,IAAAC,EAAAC,EAAAC,EACkB,MAApB,QAAxBF,EAAAxF,GAAcE,kBAAU,IAAAsF,OAAA,EAAxBA,EAA0BpF,gBAAwE,MAAxB,QAAxBqF,EAAAzF,GAAcE,kBAAU,IAAAuF,OAAA,EAAxBA,EAA0BpF,oBAAqE,MAAjB,QAAxBqF,EAAA1F,GAAcE,kBAAU,IAAAwF,OAAA,EAAxBA,EAA0BpF,aACpIL,IAAiB4C,GAAStU,EAAAA,EAAA,GACrBsU,GAAS,IACZ3C,WAAY,CACVC,gBAAiB,CAAC,EAClBC,cAAe,GACfC,kBAAmB,GACnBC,WAAY,GACZC,UAAW,iBAMjBT,GAAW,EAiBLnQ,mBAAoBqQ,GAAcQ,gBAClCpI,oBAAqBA,GACrBwE,WAAW,EACXC,qBAxMkB,EAyMlBqH,wBAAyBzB,GAAmByB,wBAC5CpH,0BA5MuB,EA6MvBC,2BA5MwB,EA6MxBqH,8BAA+B3B,GAAmB2B,8BAClDhK,cAAeA,GACfG,aAActZ,EAAQuZ,QAAQD,aAC9BD,cAAeuG,GACfjG,iBAAkBA,EAClBoC,uBAAwB4D,GACxBlI,eAAgBA,EAChBE,kBAAmBiH,EACnBhE,sBAAuBA,EACvBC,kBAAmBa,EAAOb,kBAC1BC,kBAAmBY,EAAOZ,kBAC1BE,yBAA0BA,GAC1BD,yBAA0BA,GAC1BxD,qCApNkC,EAqNlCK,8BAvNc,EAwNd/I,kBAAmBA,EACnBwB,OAAQA,EACRG,SAAUA,EACVG,UAAWA,EACXE,cAAeA,EACfE,YAAaA,EACbZ,MAAOA,EACPyB,YAAaA,EACbF,WAAYA,EACZN,SAAUA,EACVI,QAASA,EACToH,SAAUA,GACVtE,kBAAmBA,EACnBxC,iBAAkBA,EAClBE,MAAOA,EACPE,cAAeA,EACfE,YAAaA,EACbE,YAAaA,EACbE,aAAcA,EACdG,aAAcA,EACdsB,WAAYA,EACZG,WAAYA,EACZL,YAAaA,EACbS,gBAAiBA,EACjBE,aAAcA,EACdE,WAAYA,EACZE,SAAUA,EACVE,kBAAmBA,EACnBE,WAAYA,EACZE,QAASA,EACTvB,UAAWA,EACXyB,aAAcA,GACdE,sBAAuBA,GACvBM,aAAcA,GACdJ,WAAYA,GACZE,WAAYA,GACZI,YAAaA,GACbE,SAAUA,GACVG,WAAYA,GACZI,WAAYA,GACZF,qBAAsBA,GACtB1D,aAAcA,GACdE,eAAgBA,GAChBE,sBAAuBA,GACvBE,gBAAmBA,GACnBE,oBAAuBA,GACvBE,oBAAuBA,GACvBE,SAAYA,GACZE,oBAAuBA,KAG3BlH,IAAAA,cAACiY,EAAgC,CAC/BxF,gBAAiBH,GAAcE,WAAWC,gBAC1CC,cAAeJ,GAAcE,WAAWE,cACxCC,kBAAmBL,GAAcE,WAAWG,kBAC5CC,WAAYN,GAAcE,WAAWI,WACrChD,UAAWA,EACXsI,UAAkD,cAAvC5F,GAAcE,WAAWK,YAElC,EAIGoF,EAA6EE,IAA4F,IAA3F,UAAED,EAAS,gBAAEzF,EAAe,cAAEC,EAAa,kBAAEC,EAAiB,WAAEC,EAAU,UAAEhD,GAAWuI,EAC5KC,EAAwC,GAgB5C,OAdAA,EAAgB/K,OAAOgL,OAAO5F,GAAiB/D,QAAO4J,QAAuBnY,IAAZmY,IAE7D5F,GACF0F,EAAcvjB,KAAK6d,GAGjBC,GACFyF,EAAcvjB,KAAK8d,GAGjBC,GACFwF,EAAcvjB,KAAK+d,GAInB5S,IAAAA,cAACuY,EAAAA,MAAK,CAACC,OAAQN,GAAaE,EAAc/jB,OAAS,EAAGokB,MAAM,SAASC,WAAW,EAAI,aAAc9I,EAAU+I,0BAC1G3Y,IAAAA,cAAA,OAAKC,UAAU,oBAAmB,cAAa,QAC7CD,IAAAA,cAAA,QAAMC,UAAU,6BAChBD,IAAAA,cAAA,YAAO4P,EAAU+I,2BAElBP,EAAczjB,KAAI,CAAC2jB,EAAS/V,IACpBvC,IAAAA,cAAA,OAAK4Y,IAAKrW,EAAOtC,UAAU,mBAAmBqY,KAEjD,gKCzVZ,MA+oBA,EA/oB0DxG,IAI4C,IAJ3C,WACzD+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,cACxDC,EAAa,aAAEC,EAAY,iBAAEC,EAAgB,oBAAEC,EAAmB,qBAClEC,EAAoB,sBAAEC,EAAqB,UAC3CC,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,2BAAEmH,GAA4B1H,EAChG,IAAI2H,EAA0BxhB,OAAO4gB,EAAW,GAAGa,cAAe,IAC9DC,EAA0Bd,EAAW,GAAGa,cAAe,GAE3D,MAAOzO,EAAa2O,IAAkBxN,EAAAA,EAAAA,UAAS,CAACqN,KACzCI,EAAYC,IAAiB1N,EAAAA,EAAAA,UAAS,CAAC,MACvC2N,EAAeC,IAAoB5N,EAAAA,EAAAA,UAAS,CAACuN,KAC7CM,EAAYC,IAAiB9N,EAAAA,EAAAA,UAAS,CAACiK,EAAAA,GAA6B,GAAGnE,QACvEiI,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,MAC3CjH,EAAakV,IAAkBjO,EAAAA,EAAAA,UAAS,CAAC,KAE1CkO,EAAajE,EAAAA,GAAgC,GAAGnE,KAEhDqI,EAAY1B,EAAWlhB,MAAK6iB,GAA4B,SAApBA,EAAKC,aAAwBC,aACjEC,EAAgB9B,EAAWlhB,MAAK6iB,GAA4B,SAApBA,EAAKC,aAAwBG,eAQrE,aAAEC,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MAc1BC,EAAsBA,CAACnN,EAAYtL,KACvC0Y,EAAoBpN,EAAMqN,OAAO5Y,MAAOC,GAExC,IAAI4Y,EAAoBhB,EAAaiB,QACjCC,EAAuBF,EAAkB,GAAG5Y,KAC5C+Y,EAAoBD,EAAqB/Z,MAAM,KAE/Cia,EAAqBpW,EAAYiW,QAIrC,GAFAG,EAAmB,GAAGhZ,KAAW,GAE7BsL,EAAMqN,OAAO5Y,QAAU+T,EAAAA,GAA6B,GAAGnE,KACzD,GAAIoJ,EAAkBjnB,OAASkmB,EAC7Bc,GAAwB,IAAIG,OAAOjB,EAAYe,EAAkBjnB,OAAS,OACrE,CACL,KAAOinB,EAAkBjnB,OAASkmB,GAChCe,EAAkBG,MAEpBJ,EAAuBC,EAAkBI,KAAK,UAGhD,GAAIJ,EAAkBjnB,OAASsmB,EAC7BU,GAAwB,IAAIG,OAAOb,EAAgBW,EAAkBjnB,OAAS,OACzE,CACL,KAAOinB,EAAkBjnB,OAASsmB,GAChCW,EAAkBG,MAEpBJ,EAAuBC,EAAkBI,KAAK,KAIlDP,EAAkB,GAAG5Y,KAAW8Y,EAEhCjB,EAAgBe,GAChBd,EAAekB,GAEfrC,EAAaiC,GACb/B,EAAoBmC,EAAmB,EAGnCI,EAAuBA,CAACnkB,EAAe+K,KAC3C,MAAMqZ,EAAmB3Q,EAAYmQ,QAErC,UAA+C,IAAjCQ,EAAiB,GAAGrZ,MAChCqZ,EAAiB/mB,KAAK4kB,GAGxBmC,EAAiB,GAAGrZ,KAAW/K,EAE/BoiB,EAAegC,GAEf3C,EAAc2C,EAAiB,EAG3BC,EAAyBA,CAACvZ,EAAeC,KAC7C,MAAMuZ,EAAqB/B,EAAcqB,QAEnCW,EAAUlD,EAAWlhB,MAAKokB,GAAkC,WAAvBA,EAAQtB,aAEnD,UAAiD,IAAnCqB,EAAmB,GAAGvZ,MAA+D,MAAnCuZ,EAAmB,GAAGvZ,MACpFuZ,EAAmBjnB,KAAKknB,EAASrC,cAAe,IAGlDoC,EAAmB,GAAGvZ,KAAqB,KAAVD,EAAeA,EAAQyZ,EAASrC,cAAe,GAEhFM,EAAiB8B,EAAmB,EAKhCE,EAAiBA,CAACnO,EAAYtL,KAFjB0Z,QAGHpO,EAAMqN,OAAO5Y,MAHsB4Z,MAAMD,KAIrDE,EAAoBtO,EAAMqN,OAAO5Y,MAAOC,GACxCsZ,EAAuBxF,EAAAA,GAAoB,GAAGnE,KAAe3P,GAC7DoZ,EAAqB1jB,OAAO4V,EAAMqN,OAAO5Y,OAAQC,KAI/C4Z,EAAsBA,CAAC7Z,EAAeC,KAC1C,IAAI6Z,EAAkBvC,EAAWuB,QAEjC,UAA8C,IAAhCgB,EAAgB,GAAG7Z,MAC/B6Z,EAAgBvnB,KAAK,IAGvBunB,EAAgB,GAAG7Z,KAAWD,EAE9BwX,EAAcsC,EAAgB,EAG1BnB,EAAsBA,CAAC3Y,EAAeC,KAC1C,IAAI8Z,EAAkBpC,EAAWmB,QAEjC,UAA8C,IAAhCiB,EAAgB,GAAG9Z,MAC/B8Z,EAAgBxnB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MAGvDmK,EAAgB,GAAG9Z,KAAWD,EAE9B4X,EAAcmC,GAEdlD,EAAiBkD,EAAgB,EAG7BC,EAAeA,CAACha,EAAeia,KACnC,GAAIja,EAAO,CACT,MAAMoB,EAAQpB,EAAMhB,MAAM,KAE1B,OAAOoC,EAAM,GAAG6Y,KAAe7Y,EAAM,GAAG6Y,KAAe,GAGzD,MAAO,EAAE,EAsBLC,EAAwBA,CAACC,EAAcla,KAC3C,MAAM4Y,EAAoBhB,EAAaiB,QAEvC,UAAgD,IAAlCD,EAAkB,GAAG5Y,MACjC4Y,EAAkBtmB,KAAK,IAGzBsmB,EAAkB,GAAG5Y,KAAWka,EAEhCtB,EAAkB,GAAG5Y,KAASma,OAE9BtC,EAAgBe,GAEhBjC,EAAaiC,GAEbwB,EAAmBxB,EAAmBhW,EAAa8U,EAAW,EAS1D2C,EAAuBA,CAACH,EAAcla,KAC1C,IAAIsa,EAAmB1X,EAAYiW,QACnC,UAA+C,IAAjCyB,EAAiB,GAAGta,MAChCsa,EAAiBhoB,KAAK,IAExBgoB,EAAiB,GAAGta,KAAWka,EAC/BpC,EAAewC,GACfzD,EAAoByD,GACpBF,EAAmBxC,EAAc0C,EAAkB5C,EAAW,EAG1D0C,EAAqBA,CAACxB,EAA6B0B,EAA4BC,KACnF,IAAIC,GAAe,EAEnB,IAAK,IAAI/lB,EAAI,EAAGA,EAAImkB,EAAkB9mB,OAAQ2C,IAAK,CACjD,GAA2D,KAAvDmkB,EAAkB,GAAGnkB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC7DK,GAAe,EACf,MAGF,GAAID,EAAc,GAAG9lB,OAASqf,EAAAA,GAA+B,GAAGnE,MAAqD,KAApC2K,EAAiB,GAAG7lB,KAAK0lB,OAAe,CACvHK,GAAe,EACf,OAIJ1D,EAAqB0D,EAAa,EAG9BC,GAAWA,KACfjE,EAAO,GAEP,MAAMgD,EAAUlD,EAAWlhB,MAAKokB,GAAkC,WAAvBA,EAAQtB,aAE7CmB,EAAmB3Q,EAAYmQ,QAC/BU,EAAqB/B,EAAcqB,QACnC6B,EAAqBhD,EAAWmB,QAChCD,EAAoBhB,EAAaiB,QACjCyB,EAAmB1X,EAAYiW,QAErCQ,EAAiB/mB,KAAK+C,SAASmkB,EAASrC,cAAe,KACvDoC,EAAmBjnB,KAAKknB,EAASrC,cAAe,IAChDuD,EAAmBpoB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MACxDiJ,EAAkBtmB,KAAK,IACvBgoB,EAAiBhoB,KAAK,IAEtB+kB,EAAegC,GACf5B,EAAiB8B,GACjB5B,EAAc+C,GACd7C,EAAgBe,GAChBd,EAAewC,GAEf5D,EAAc2C,GACdzC,EAAiB8D,GACjB/D,EAAaiC,GACb/B,EAAoByD,GAEpBxD,GAAqB,EAAM,EAGvB6D,GAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,GAAiB/a,SAInByW,EAAUzW,GACV+a,GAAiB/a,QAGnByW,EAAUzW,GACV+a,GAAiB/a,IAIf+a,GAAoB/a,IACxB,MAAMwZ,EAAUlD,EAAWlhB,MAAKokB,GAAkC,WAAvBA,EAAQtB,aAE7CmB,EAAmB3Q,EAAYmQ,QAC/BgB,EAAkBvC,EAAWuB,QAC7BU,EAAqB/B,EAAcqB,QACnC6B,EAAqBhD,EAAWmB,QAChCD,EAAoBhB,EAAaiB,QACjCyB,EAAmB1X,EAAYiW,aAEO,IAAjCQ,EAAiB,GAAGrZ,OACzBqZ,EAAiBvnB,OAAS,EAC5BunB,EAAiByB,OAAO9a,EAAO,GAE/BqZ,EAAiB,GAAKhkB,SAASmkB,EAASrC,cAAe,UAIhB,IAAhC0C,EAAgB,GAAG7Z,OACxB6Z,EAAgB/nB,OAAS,EAC3B+nB,EAAgBiB,OAAO9a,EAAO,GAE9B6Z,EAAgB,GAAK,SAIqB,IAAnCN,EAAmB,GAAGvZ,OAC3BuZ,EAAmBznB,OAAS,EAC9BynB,EAAmBuB,OAAO9a,EAAO,IAEjCuZ,EAAmB,GAAKC,EAASrC,cAAe,GAChDkC,EAAiB,GAAKnC,SAIoB,IAAnCwD,EAAmB,GAAG1a,OAC3B0a,EAAmB5oB,OAAS,EAC9B4oB,EAAmBI,OAAO9a,EAAO,GAEjC0a,EAAmB,GAAK5G,EAAAA,GAA6B,GAAGnE,WAIf,IAAlCiJ,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,SAIiB,IAAjC0B,EAAiB,GAAGta,OACzBsa,EAAiBxoB,OAAS,EAC5BwoB,EAAiBQ,OAAO9a,EAAO,GAE/Bsa,EAAiB,GAAK,IAI1BjD,EAAegC,GACf9B,EAAcsC,GACdpC,EAAiB8B,GACjB5B,EAAc+C,GACd7C,EAAgBe,GAChBd,EAAewC,GAEf5D,EAAc2C,GACdzC,EAAiB8D,GACjB/D,EAAaiC,GACb/B,EAAoByD,GAEpBF,EAAmBxB,EAAmB0B,EAAkBI,EAAmB,GAG7EpG,EAAAA,EAAAA,YAAU,KACR,MAAMkF,EAAUlD,EAAWlhB,MAAKokB,GAAkC,WAAvBA,EAAQtB,aAEnD,IAAI8C,EAAmBtlB,OAAO8jB,aAAO,EAAPA,EAASrC,cAAe,IAClD8D,EAAoBxX,OAAO+V,aAAO,EAAPA,EAASrC,cAAe,IAEvD,MAAM+D,EAAkC,GAClCC,EAA+B,GAC/BC,EAAsC,GACtCC,EAA+B,GAC/BvC,EAAiC,GACjCwC,EAAgC,GAEtC,GAAItE,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,IAAIkU,EAA4BqO,EAAU,GAAGviB,KAAwB,kBACrE,MAAM8mB,EAAevE,EAAU,GAAGviB,KAAe,SAC3C+mB,EAAsBxE,EAAU,GAAGviB,KAAY,MAErD,OAAQkU,GACN,KAAK,EACHA,EAAoBjT,OAAOslB,GAC3BE,EAAsB5oB,KAAK2oB,GAC3BE,EAAmB7oB,KAAK,IACxB,MAEF,KAAK,EACH4oB,EAAsB5oB,KAAK,KAC3B6oB,EAAmB7oB,KAAK,IACxB,MAEF,KAAK,EACH4oB,EAAsB5oB,KAAK,KAC3B6oB,EAAmB7oB,KAAK,IACxB,MAEF,KAAK,GACH4oB,EAAsB5oB,KAAK,MAC3B6oB,EAAmB7oB,KAAK,IACxB,MAEF,KAAK,GACH4oB,EAAsB5oB,KAAK,MAC3B6oB,EAAmB7oB,KAAK,IACxB,MAEF,QACMqW,GACFuS,EAAsB5oB,KAAKwhB,EAAAA,GAAoB,GAAGnE,MAClDwL,EAAmB7oB,KAAKqW,EAAkBrS,cAE1CqS,EAAoBjT,OAAOslB,GAC3BE,EAAsB5oB,KAAK2oB,GAC3BE,EAAmB7oB,KAAK,KAK9B,IAAImpB,EAAgB,EAGlBA,EADEF,IAAiBzH,EAAAA,GAA6B,GAAGnE,KACnCqI,EAEAI,EAGlB,IAAIsD,EAAW,GAEfF,EAAUppB,KAAI,CAAC8nB,EAAMla,KAEjB0b,GADW,GAAT1b,GAAcA,EAAQyb,EACZ,IAAMvB,EAENA,KAIhBkB,EAA0B9oB,KAAKqW,GAC/B0S,EAAmB/oB,KAAKipB,GACxBzC,EAAqBxmB,KAAKopB,GAC1BJ,EAAoBhpB,KAAK0kB,EAAU,GAAGviB,KAAkB,aAG1DojB,EAAgBiB,GAChBhB,EAAewD,GAEf3E,EAAamC,GACbjC,EAAoByE,GAEpBlB,EAAmBtB,EAAsBwC,EAAqBD,QAE9DH,EAAsB5oB,KAAK2oB,GAC3BG,EAA0B9oB,KAAK0oB,GAC/BK,EAAmB/oB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MACxDwL,EAAmB7oB,KAAK,IAG1BmlB,EAAiByD,GACjB3D,EAAc4D,GACd9D,EAAe+D,GACfzD,EAAc0D,GAEd3E,EAAc0E,GACdxE,EAAiByE,GAEjBtE,GAAsB,EAAK,GAC1B,CAACC,IAEJ,MAAM2E,GAAoBA,CAACnC,EAAiBoC,IACtCpC,EAAQrC,cAER1Z,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,qBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW8D,QACrCrC,EAAQrC,cAAc/kB,KAAK0pB,GAExBre,IAAAA,cAAA,SAAOC,UAAU,gBACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+b,EACPE,QAASxE,EAAc,GAAGoE,OAAWnY,OAAOqY,GAAO,eACrCtE,EAAc,GAAGoE,OAAWnY,OAAOqY,GACjDG,SAAW3Q,GAzcD4Q,EAAC5Q,EAAYtL,KACvCsZ,EAAuBhO,EAAMqN,OAAO5Y,MAAOC,GAEvCsL,EAAMqN,OAAO5Y,QAAU+T,EAAAA,GAAoB,GAAGnE,MAChDiK,EAAoB,IAAK5Z,GACzBoZ,EAAqB,EAAGpZ,KAExBoZ,EAAqB1jB,OAAO4V,EAAMqN,OAAO5Y,OAAQC,GACjD4Z,EAAoB,GAAI5Z,KAicWkc,CAAoB5Q,EAAOsQ,KAGjDE,IAAWhI,EAAAA,GAAoB,GAAGnE,KAAgB,GAAK,IAAKmM,EAE5DA,IAAWhI,EAAAA,GAAoB,GAAGnE,KAAgB,KACjDlS,IAAAA,cAAA,SACEse,KAAK,OACLhc,MAAOuX,EAAW,GAAGsE,KACrBO,UAAU,UACVC,QAAQ,SAAQ,YACN,SACVC,KAAK,aAAY,gBACF,GAAE,gBACF,IAAK,gBACL3mB,OAAO4hB,EAAW,GAAGsE,MACpCK,SAAW3Q,GAAUmO,EAAenO,EAAOsQ,GAC3CU,WAAahR,IAAiB,QAAQiR,KAAKjR,EAAM+K,MAAQ/K,EAAMkR,kBAC/DC,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,yCAUrB,KAyBHif,GAAkBA,CAACf,EAAa5D,EAAmB4E,IACpCC,MAAMC,MAAM,KAAMD,MAAM7E,IAAY5lB,KAAI,SAAU2qB,EAAGtoB,GAAK,OAAOA,CAAG,IAErErC,KAAK4nB,GAEnBvc,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACZkf,GAAcnf,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWiF,eACnDJ,GAAcnf,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWmC,KAAK+C,SAAS,KAAqB,IAAdjD,EAAkBjC,EAAWmC,KAAK5X,UAAU,EAAGyV,EAAWmC,KAAKpoB,OAAS,GAAK,KAAOkoB,EAAY,GAAK,IAAMjC,EAAWmC,KAAKzL,QAAQ,IAAK,KAAOuL,EAAY,IAAMjC,EAAWmC,KAAO,IAAMF,EAAY,GAChRvc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOga,EAAanC,EAAa,GAAGgE,KAAQ5B,GAAU,YAC5C,SACVqC,KAAK,aACLJ,SAAW3Q,GAhZY4R,EAAC5R,EAAYtL,EAAega,EAAmBhC,KAChF,MAAMmF,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF,IAAIC,EAAY/R,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GACxDG,EAAoB1F,EAAa,GAAG5X,KAEnCsd,EAAkBC,SAAS,OAC9BD,GAAqB,IAAIrE,OAAOjB,EAAY,IAG9C,IAAIwF,EAAyBF,EAAkBve,MAAM,KAErDye,EAAuB,GAAGxD,KAAeqD,EACzCA,EAAYG,EAAuBrE,KAAK,KAExCc,EAAsBoD,EAAWrd,EAAM,EAiYRkd,CAA2B5R,EAAOsQ,EAAK5B,EAAWhC,GACvEyE,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,SAQnFK,GAAqB7B,GAEvBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWnV,aACtCnF,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO6C,EAAY,GAAGgZ,KAAM,YAClB,SACVS,KAAK,aACLJ,SAAW3Q,GAjYQoS,EAACpS,EAAYtL,KACxC,IAAImd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAClF/C,EAAqB/O,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EA+X9C0d,CAAqBpS,EAAOsQ,GACjDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OAOvF,OACE3f,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GAxjBFvb,QAwjB0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,WAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BACZie,GAAkBnC,EAASoC,GAlFvBA,SACS,IAAzBlE,EAAW,GAAGkE,KAChB,KAIPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW+F,UACtCrgB,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,SAAOC,UAAU,yBACfD,IAAAA,cAAA,SAAOse,KAAK,QAAQhc,MAAO+T,EAAAA,GAA6B,GAAGnE,KAAeqM,QAAStE,EAAW,GAAGkE,KAAOmC,YAActa,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAAeoO,UAAS,eAAgBrG,EAAW,GAAGkE,KAAOmC,YAActa,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAAeoO,UAAW9B,SAAW3Q,GAAUmN,EAAoBnN,EAAOsQ,KAAS9H,EAAAA,GAA6B,GAAGnE,MAEpYlS,IAAAA,cAAA,SAAOC,UAAU,yBACfD,IAAAA,cAAA,SAAOse,KAAK,QAAQhc,MAAO+T,EAAAA,GAA+B,GAAGnE,KAAeqM,QAAStE,EAAW,GAAGkE,KAAOmC,YAActa,OAAOqQ,EAAAA,GAA+B,GAAGnE,MAAc,eAAgB+H,EAAW,GAAGkE,KAAOmC,YAActa,OAAOqQ,EAAAA,GAA+B,GAAGnE,MAAeoO,UAAW9B,SAAW3Q,GAAUmN,EAAoBnN,EAAOsQ,KAAS9H,EAAAA,GAA+B,GAAGnE,SAqEnXqO,CAAoBpC,GACpBlE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,OAAkBqI,EAAY,GAAK2E,GAAgBf,EAAK5D,EAAWN,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA+B,GAAGnE,OACrM+H,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA+B,GAAGnE,OAAkByI,EAAgB,GAAKuE,GAAgBf,EAAKxD,EAAeV,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA+B,GAAGnE,OAC/M+H,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA+B,GAAGnE,OAAkByI,EAAgB,GAAKqF,GAAkB7B,IAKzE,IAAAqC,EAAAC,EAAzD,IAAK7hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAsC,KAAb,QAAtBugB,EAAA1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,YAAgD,IAA1BkT,EAAY,GAAGkT,KAAyBlT,EAAY,GAAGkT,KAAS,IAA4B,QAAzBsC,EAAG3N,EAAgB9c,cAAM,IAAAyqB,OAAA,EAAtBA,EAAwB1oB,QAKxL,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,QAI5E,iKCpoBV,MAiqBA,EAjqB4DJ,IAImE,IAJlE,WAC3D+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,cACxD6H,EAAa,gBAAEC,EAAe,aAAE5H,EAAY,iBAAEC,EAAgB,iBAAE4H,EAAgB,mBAAEC,EAAkB,mBACpGC,EAAkB,oBAAEC,EAAmB,qBAAE7H,EAAoB,uBAAE8H,EAAsB,UACrF5H,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEwtB,EAAQ,SAAExiB,EAAQ,WAAEyT,EAAU,cAAEgP,EAAa,2BAAE7H,GAA4B1H,EACzH,MAAOwP,EAAYC,IAAiBnV,EAAAA,EAAAA,UAAS,CAAC,MACvCrI,EAAUyd,IAAepV,EAAAA,EAAAA,UAAS,CAAC,MACnCnH,EAAYwc,IAAiBrV,EAAAA,EAAAA,UAAS,CAACiK,EAAAA,GAA6B,GAAGnE,QACvExO,EAAOge,IAAYtV,EAAAA,EAAAA,UAAS,CAAC,MAC7B3G,EAAekc,IAAoBvV,EAAAA,EAAAA,UAAS,CAAC,MAC7CzG,EAAaic,IAAkBxV,EAAAA,EAAAA,UAAS,CAAC,MACzCvG,EAAagc,IAAkBzV,EAAAA,EAAAA,UAAS,CAAC,MACzCrG,EAAc+b,IAAmB1V,EAAAA,EAAAA,UAAS,CAAC,KAE5CkO,EAAajE,EAAAA,GAAkC,GAAGnE,KAElD6P,EAAalJ,EAAWlhB,MAAK6iB,GAA4B,SAApBA,EAAKC,aAAwBC,aAClEsH,EAAenJ,EAAWlhB,MAAK6iB,GAA4B,SAApBA,EAAKC,aAAwBwH,cACpEC,KAAad,IAAYA,EAASe,gBAAmD,KAAlCf,EAASe,cAAczF,QAQ1E,aAAE7B,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MAE1BqH,GAAoBA,CAACvU,EAAYtL,KACrC8f,GAAaxU,EAAMqN,OAAO5Y,MAAOC,GAEjC,MAAM+f,EAAa5e,EAAM0X,QAEzB,IAAI9Y,EAAQggB,EAAW,GAAG/f,KAE1B,GAAID,EAAO,CACT,MAAMkI,EAAQqD,EAAMqN,OAAO5Y,QAAU+T,EAAAA,GAA6B,GAAGnE,KAAgB6P,EAAaC,EAElG,IAAIO,EAAajgB,EAAMhB,MAAM,KAE7B,GAAIihB,EAAWluB,OAASmW,EACtBlI,GAAS,IAAIkZ,OAAOhR,EAAQ+X,EAAWluB,OAAS,OAC3C,CACL,KAAOkuB,EAAWluB,OAASmW,GACzB+X,EAAW9G,MAGbnZ,EAAQigB,EAAW7G,KAAK,KAG1B4G,EAAW,GAAG/f,KAAWD,EAEzBof,EAASY,GAETpJ,EAAaoJ,KAIXD,GAAeA,CAAC/f,EAAeC,KACnC,MAAMggB,EAAatd,EAAWmW,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MAGlDqQ,EAAW,GAAGhgB,KAAWD,EAEzBmf,EAAcc,GAEdpJ,EAAiBoJ,EAAW,EAGxBjG,GAAeA,CAACha,EAAeia,KACnC,GAAIja,EAAO,CACT,MAAMoB,EAAQpB,EAAMhB,MAAM,KAE1B,OAAOoC,EAAM,GAAG6Y,KAAe7Y,EAAM,GAAG6Y,KAAe,GAGzD,MAAO,EAAE,EAuBLiG,GAAWA,CAAC/F,EAAcla,KAC9B,MAAM4Y,EAAoBzX,EAAM0X,QAEhC,UAAgD,IAAlCD,EAAkB,GAAG5Y,MACjC4Y,EAAkBtmB,KAAK,IAGzBsmB,EAAkB,GAAG5Y,KAAWka,EAEhCtB,EAAkB,GAAG5Y,KAASma,OAE9BgF,EAASvG,GAETjC,EAAaiC,GAEbsH,GAAkBtH,EAAkB,EAmEhCsH,GAAqBF,IACzB,IAAIhE,GAAU,EAETgE,GAAoC,IAAtBA,EAAWluB,SAC5BkqB,GAAU,GAGZ,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,GAAoD,KAAhDurB,EAAW,GAAGvrB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CACtD6B,GAAU,EAAO,MAIrBlF,EAAqBkF,EAAQ,EAGzBmE,GAAuBA,CAACC,EAA8BC,KAC1D,IAAI5sB,GAAS,EAEb,IAAK,IAAIgB,EAAI,EAAGA,EAAI2rB,EAAmBtuB,SAAU2C,EAC/ChB,EAASA,GAAyC,KAA/B2sB,EAAmB,GAAG3rB,MAA4C,KAA7B4rB,EAAiB,GAAG5rB,KAG9EmqB,EAAuBnrB,EAAO,EAG1B6sB,GAAqBA,IACrBX,EACKd,EAAS0B,YAAYpG,QAAsC,KAA5B0E,EAAS2B,eAAwB,KAAO3B,EAAS2B,eAAerG,OAAS,KAAqC,KAA9B0E,EAAS4B,iBAA0B,KAAO5B,EAAS4B,iBAAiBtG,OAAS,KAAmC,KAA5B0E,EAAS6B,eAAwB,KAAO7B,EAAS6B,eAAevG,OAAS,IAG9Q,GAGHM,GAAWA,KACfjE,EAAO,GAEP,MAAMmK,EAAkB5B,EAAWlG,QAC7B+H,EAAgBpf,EAASqX,QACzBkH,EAAa5e,EAAM0X,QACnBgI,EAAkBne,EAAWmW,QAC7BuH,EAAqBld,EAAc2V,QACnCiI,EAAmB1d,EAAYyV,QAC/BwH,EAAmB/c,EAAYuV,QAC/BkI,EAAoBvd,EAAaqV,QAEvC8H,EAAgBruB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,IAC5F8B,EAActuB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,IACxFiB,EAAWztB,KAAK,IAChBuuB,EAAgBvuB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MACrDoR,EAAkBzuB,KAAK,IAEnBqtB,GACFS,EAAmB9tB,KAAKguB,MACxBQ,EAAiBxuB,KAAKusB,EAASmC,4BAC/BX,EAAiB/tB,KAAKusB,EAASoC,uBAE/Bb,EAAmB9tB,KAAK,IACxBwuB,EAAiBxuB,KAAK,IACtB+tB,EAAiB/tB,KAAK,KAGxB0sB,EAAc2B,GACd1B,EAAY2B,GACZzB,EAASY,GACTb,EAAc2B,GACdzB,EAAiBgB,GACjBf,EAAeyB,GACfxB,EAAee,GACfd,EAAgBwB,GAEhBzC,EAAcqC,GACdpC,EAAgBqC,GAChBjK,EAAaoJ,GACbnJ,EAAiBiK,GACjBrC,EAAiB4B,GACjB3B,EAAmBqC,GACnBpC,EAAmB2B,GACnB1B,EAAoBoC,GAEpBjK,GAAqB,GAErBqJ,GAAqBC,EAAoBC,EAAiB,EAGtD1F,GAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GAEVgX,EAAU8D,OAAO9a,EAAO,GAExB+a,GAAiB/a,SAInByW,EAAUzW,GAEV+a,GAAiB/a,QAGnByW,EAAUzW,GAEV+a,GAAiB/a,IAIf+a,GAAoB/a,IACxB,MAAM2gB,EAAkB5B,EAAWlG,QAC7B+H,EAAgBpf,EAASqX,QACzBkH,EAAa5e,EAAM0X,QACnBgI,EAAkBne,EAAWmW,QAC7BuH,EAAqBld,EAAc2V,QACnCiI,EAAmB1d,EAAYyV,QAC/BwH,EAAmB/c,EAAYuV,aAEM,IAAhC8H,EAAgB,GAAG3gB,OACxB2gB,EAAgB7uB,OAAS,EAC3B6uB,EAAgB7F,OAAO9a,EAAO,GAE9B2gB,EAAgB,GAAK7B,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,SAIvD,IAA9B8B,EAAc,GAAG5gB,OACtB4gB,EAAc9uB,OAAS,EACzB8uB,EAAc9F,OAAO9a,EAAO,GAE5B4gB,EAAc,GAAK9B,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,SAItD,IAA3BiB,EAAW,GAAG/f,OACnB+f,EAAWjuB,OAAS,EACtBiuB,EAAWjF,OAAO9a,EAAO,GAEzB+f,EAAW,GAAK,SAIuB,IAAhCc,EAAgB,GAAG7gB,OACxB6gB,EAAgB/uB,OAAS,EAC3B+uB,EAAgB/F,OAAO9a,EAAO,GAE9B6gB,EAAgB,GAAK/M,EAAAA,GAA6B,GAAGnE,WAIX,IAAnCyQ,EAAmB,GAAGpgB,OAC3BogB,EAAmBtuB,OAAS,EAC9BsuB,EAAmBtF,OAAO9a,EAAO,GAEjCogB,EAAmB,GAAK,SAIgB,IAAjCU,EAAiB,GAAG9gB,OACzB8gB,EAAiBhvB,OAAS,EAC5BgvB,EAAiBhG,OAAO9a,EAAO,GAE/B8gB,EAAiB,GAAK,SAIkB,IAAjCT,EAAiB,GAAGrgB,OACzBqgB,EAAiBvuB,OAAS,EAC5BuuB,EAAiBvF,OAAO9a,EAAO,GAE/BqgB,EAAiB,GAAK,IAI1BrB,EAAc2B,GACd1B,EAAY2B,GACZzB,EAASY,GACTb,EAAc2B,GACdzB,EAAiBgB,GACjBf,EAAeyB,GACfxB,EAAee,GAEf/B,EAAcqC,GACdpC,EAAgBqC,GAChBjK,EAAaoJ,GACbnJ,EAAiBiK,GACjBjC,EAAuBwB,GACvB3B,EAAmBqC,GACnBpC,EAAmB2B,GAEnBH,GAAkBH,GAClBI,GAAqBC,EAAoBC,EAAiB,GAG5D/L,EAAAA,EAAAA,YAAU,KACR,MAAMqM,EAA4B,GAC5BC,EAA0B,GAC1Bb,EAAuB,GACvBc,EAA4B,GAC5BT,EAA+B,GAC/BU,EAA6B,GAC7BT,EAA6B,GAC7BU,EAA8B,GAEpC,GAAI/J,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAM+mB,EAAsBxE,EAAU,GAAGviB,KAAY,MAC/C8mB,EAAevE,EAAU,GAAGviB,KAAe,SAE3CgnB,EAAgBF,IAAiBzH,EAAAA,GAA6B,GAAGnE,KAAgB6P,EAAaC,EAEpG,IAAI/D,EAAW,GAEfF,EAAU9nB,SAAQ,CAACwmB,EAAMla,IAAU0b,GAAqB,GAAT1b,GAAcA,EAAQyb,EAAgB,IAAMvB,EAAOA,IAElGyG,EAAgBruB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,IAC5F8B,EAActuB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,IACxFiB,EAAWztB,KAAKopB,GAChBmF,EAAgBvuB,KAAKipB,GACrB6E,EAAmB9tB,KAAK0kB,EAAU,GAAGviB,KAAmB,cACxDqsB,EAAiBxuB,KAAK0kB,EAAU,GAAGviB,KAAiB,YACpD4rB,EAAiB/tB,KAAK0kB,EAAU,GAAGviB,KAAiB,YACpDssB,EAAkBzuB,KAAK0kB,EAAU,GAAGviB,KAAkB,aAGxD0qB,EAASY,GAETpJ,EAAaoJ,GAEbG,GAAkBH,QAElBY,EAAgBruB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,IAC5F8B,EAActuB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,IACxF+B,EAAgBvuB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MACrDyQ,EAAmB9tB,KAAKguB,MACxBS,EAAkBzuB,KAAK,IAEnBqtB,GACFmB,EAAiBxuB,KAAKusB,EAASmC,4BAC/BX,EAAiB/tB,KAAKusB,EAASoC,uBAE/BH,EAAiBxuB,KAAK,IACtB+tB,EAAiB/tB,KAAK,KAI1B0sB,EAAc2B,GACd1B,EAAY2B,GACZ1B,EAAc2B,GACdzB,EAAiBgB,GACjBf,EAAeyB,GACfxB,EAAee,GACfd,EAAgBwB,GAEhBzC,EAAcqC,GACdpC,EAAgBqC,GAChBhK,EAAiBiK,GACjBrC,EAAiB4B,GACjB3B,EAAmBqC,GACnBpC,EAAmB2B,GACnB1B,EAAoBoC,GAEpBZ,GAAqBC,EAAoBC,EAAiB,GACzD,CAACrJ,IAEJ,MAqCM2F,GAAkBA,CAACf,EAAa5D,KACpC,MAAMkJ,EAAYnJ,EAAWmC,KAG7B,OAFmB2C,MAAMC,MAAM,KAAMD,MAAM7E,IAAY5lB,KAAI,SAAU2qB,EAAGtoB,GAAK,OAAOA,CAAG,IAErErC,KAAK4nB,GAEnBvc,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcwjB,EAAUjE,SAAS,KAAqB,IAAdjD,EAAkBkH,EAAU5e,UAAU,EAAG4e,EAAUpvB,OAAS,GAAK,KAAOkoB,EAAY,GAAK,IAAMkH,EAAUzS,QAAQ,IAAK,KAAOuL,EAAY,IAAMkH,EAAY,IAAMlH,EAAY,GAClOvc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOga,GAAa5Y,EAAM,GAAGya,KAAQ5B,GAAU,YACrC,SACVqC,KAAK,aACLJ,SAAW3Q,GAhbE6V,EAAC7V,EAAYtL,EAAega,EAAmBhC,KACtE,MAAMmF,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF,IAAIC,EAAY/R,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GACxDiE,EAAqBjgB,EAAM,GAAGnB,KAElC,GAAIohB,EAAoB,CACjBA,EAAmB7D,SAAS,OAC/B6D,GAAsB,IAAInI,OAAOjB,EAAY,IAG/C,MAAMqJ,EAAYD,EAAmBriB,MAAM,KAE3CsiB,EAAU,GAAGrH,KAAeqD,EAC5BA,EAAYgE,EAAUlI,KAAK,KAG7B8G,GAAS5C,EAAWrd,EAAM,EA+ZKmhB,CAAiB7V,EAAOsQ,EAAK5B,EAAWhC,GAC7DyE,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7ES,aAAa,YAKrB,EAGEyD,GAAqBA,CAAChL,EAAsBsF,IAE9Cne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,KAAGC,UAAU,iBAAiBqa,EAAWwJ,eACzC9jB,IAAAA,cAAA,OAAKC,UAAU,gBACbD,IAAAA,cAAA,OAAKC,UAAU,yBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWyJ,iBACtC/jB,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOmD,EAAc,GAAG0Y,KAAM,YACpB,SACVS,KAAK,aACLnC,KAAM5D,EAAW,GAAG4B,WACpB+D,SAAW3Q,GApaEmW,EAAC1hB,EAAeC,KACvC,MAAMggB,EAAa9c,EAAc2V,QAEjC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBqf,EAAiBY,GAEjBxB,EAAiBwB,GAEjBG,GAAqBH,EAAY1c,EAAY,EAuZdme,CAAiBnW,EAAMqN,OAAO5Y,MAAO6b,GAC1Da,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7ES,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,yBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW2J,aACtCjkB,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOqD,EAAY,GAAGwY,KAAM,YAClB,SACVS,KAAK,aACLnC,KAAM5D,EAAW,GAAG4B,WACpB+D,SAAW3Q,GAraAqW,EAAC5hB,EAAeC,KACrC,MAAMggB,EAAa5c,EAAYyV,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBsf,EAAeW,GAEfvB,EAAmBuB,EAAW,EA0ZC2B,CAAerW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7ES,aAAa,WAKnBpgB,IAAAA,cAAA,OAAKC,UAAU,iBACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW6J,mBACtCnkB,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOuD,EAAY,GAAGsY,KAAM,YAClB,SACVS,KAAK,aACLJ,SAAW3Q,GAzaAuW,EAAC9hB,EAAeC,KACrC,MAAMggB,EAAa1c,EAAYuV,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGfyN,EAAMjO,QAAQ,EACfkuB,EAAW,GAAGhgB,KAAWD,EAEzB+hB,EAAAA,GAAMC,QAAQjO,EAAAA,GAAkC,GAAGnE,MAGrD2P,EAAeU,GAEftB,EAAmBsB,GAEnBG,GAAqBjd,EAAe8c,EAAW,EAwZhB6B,CAAevW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVmgB,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWiK,gBACtCvkB,IAAAA,cAAA,KAAGC,UAAU,aAAaqa,EAAWkK,wBAIzCxkB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWmK,cACtCzkB,IAAAA,cAAA,SACEse,KAAK,SACLI,UAAU,MACVpc,MAAOyD,EAAa,GAAGoY,KAAM,YACnB,SACVS,KAAK,aACLJ,SAAU3Q,GA1aI6W,EAACpiB,EAAeC,KACtC,MAAMggB,EAAaxc,EAAaqV,QAEhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBwf,EAAgBS,GAEhBrB,EAAoBqB,EAAW,EA+ZJmC,CAAgB7W,EAAMqN,OAAO5Y,MAAO6b,GACvDa,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxD9e,UAAU,eACVmgB,aAAa,WAOvB,OACEpgB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GA5kBFvb,QA4kB0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,SAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BA5JRke,SACS,IAAzBlZ,EAAW,GAAGkZ,KAChB,KAIPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,UACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW+F,UACtCrgB,IAAAA,cAAA,OAAKC,UAAU,kBACbD,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA6B,GAAGnE,KACvCqM,QAAStZ,EAAW,GAAGkZ,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAAeoO,UAAS,eACnFrb,EAAW,GAAGkZ,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAAeoO,UAC7F9B,SAAW3Q,GAAUuU,GAAkBvU,EAAOsQ,KAE/C9H,EAAAA,GAA6B,GAAGnE,MAGnClS,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA8B,GAAGnE,KACxCqM,QAAStZ,EAAW,GAAGkZ,OAAWnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,MAAc,eAC1EjN,EAAW,GAAGkZ,OAAWnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,MAC/EsM,SAAW3Q,GAAUuU,GAAkBvU,EAAOsQ,KAE/C9H,EAAAA,GAA8B,GAAGnE,SAgIrBqO,CAAoBpC,GACpBlZ,EAAW,GAAGkZ,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,OAAkB6P,EAAa,GAAK7C,GAAgBf,EAAK4D,GACzH9c,EAAW,GAAGkZ,OAAWnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,OAAkB8P,EAAe,GAAK9C,GAAgBf,EAAK6D,GAC5H6B,GAAmBhL,EAAYsF,IAKmB,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAyB,QAAzB,EAAG6S,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,QAKpE,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,oJCnqBV,MA2eA,EA3e+DJ,IAC0N,IADzN,WAC9D+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,cAAE6H,EAAa,gBAAEC,EAAe,aAAE5H,EAAY,iBAAEC,EAAgB,qBAAEE,EAAoB,mBAAEsL,EAAkB,UAAEpL,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,cAAEgP,EAAa,2BAAE7H,GAA4B1H,EACnR,MAAO8S,EAAeC,IAAoBzY,EAAAA,EAAAA,UAAS,CAAC,MAC7C0Y,EAAiBC,IAAsB3Y,EAAAA,EAAAA,UAAS,CAAC,MACjD6N,EAAYC,IAAiB9N,EAAAA,EAAAA,UAAS,CAACiK,EAAAA,GAA6B,GAAGnE,QACvEiI,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,MAC3C4Y,EAAaC,IAAkB7Y,EAAAA,EAAAA,UAAS,CAACiK,EAAAA,GAA+B,GAAGnE,OAE5EoI,EAAajE,EAAAA,GAAqC,GAAGnE,KAErDqI,EAAY1B,EAAWlhB,MAAK6iB,GAA4B,YAApBA,EAAKkG,aAA2BhG,aACpE7R,EAAegQ,EAAWlhB,MAAK6iB,GAA4B,YAApBA,EAAKkG,aAA2BuB,eAQvE,aAAEpH,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MAE1BC,EAAsBA,CAACnN,EAAYtL,KACvC0Y,EAAoBpN,EAAMqN,OAAO5Y,MAAOC,GAExC,IAAI4Y,EAAoBhB,EAAaiB,QAEjCC,EAAuBF,EAAkB,GAAG5Y,KAEhD,GAAI8Y,EAAsB,CACxB,IAAIC,EAAoBD,EAAqB/Z,MAAM,KAEnD,GAAIuM,EAAMqN,OAAO5Y,QAAU+T,EAAAA,GAA6B,GAAGnE,KACzD,GAAIoJ,EAAkBjnB,OAASkmB,EAC7Bc,GAAwB,IAAIG,OAAOjB,EAAYe,EAAkBjnB,OAAS,OACrE,CACL,KAAOinB,EAAkBjnB,OAASkmB,GAChCe,EAAkBG,MAEpBJ,EAAuBC,EAAkBI,KAAK,UAGhD,GAAIJ,EAAkBjnB,OAASwU,EAC7BwS,GAAwB,IAAIG,OAAO3S,EAAeyS,EAAkBjnB,OAAS,OACxE,CACL,KAAOinB,EAAkBjnB,OAASwU,GAChCyS,EAAkBG,MAEpBJ,EAAuBC,EAAkBI,KAAK,MAKpDP,EAAkB,GAAG5Y,KAAW8Y,EAEhCjB,EAAgBe,GAEhBjC,EAAaiC,EAAkB,EAG3B+J,EAAuBA,CAACrX,EAAYtL,KACxC4iB,EAAqBtX,EAAMqN,OAAO5Y,MAAOC,EAAM,EAG3C0Y,EAAsBA,CAAC3Y,EAAeC,KAC1C,IAAI8Z,EAAkBpC,EAAWmB,QAEjC,UAA8C,IAAhCiB,EAAgB,GAAG9Z,MAC/B8Z,EAAgBxnB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MAGvDmK,EAAgB,GAAG9Z,KAAWD,EAE9B4X,EAAcmC,GAEdlD,EAAiBkD,EAAgB,EAG7BC,EAAeA,CAACha,EAAeia,KACnC,GAAIja,EAAO,CACT,MAAMoB,EAAQpB,EAAMhB,MAAM,KAE1B,OAAOoC,EAAM,GAAG6Y,KAAe7Y,EAAM,GAAG6Y,KAAe,GAGzD,MAAO,EAAE,EAuBLC,EAAwBA,CAACC,EAAcla,KAC3C,IAAIggB,EAAapI,EAAaiB,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWka,EAEzB8F,EAAW,GAAGhgB,KAASma,OAEvBtC,EAAgBmI,GAEhBrJ,EAAaqJ,GAEb6C,EAAmB7C,EAAW,EAG1B4C,EAAuBA,CAAC7iB,EAAeC,KAC3C,MAAMggB,EAAayC,EAAY5J,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAKwhB,EAAAA,GAA+B,GAAGnE,MAGpDqQ,EAAW,GAAGhgB,KAAWD,EAEzB2iB,EAAe1C,GAEfoC,EAAmBpC,EAAW,EAG1B6C,EAAsB7C,IAC1B,IAAIhE,GAAU,EAETgE,GAAoC,IAAtBA,EAAWluB,SAC5BkqB,GAAU,GAEZ,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,GAAoD,KAAhDurB,EAAW,GAAGvrB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CACtD6B,GAAU,EAAO,MAIrBlF,EAAqBkF,EAAQ,EAGzBvB,EAAWA,KACfjE,EAAO,GAEP,MAAMsM,EAAqBT,EAAcxJ,QACnCkK,EAAuBR,EAAgB1J,QACvCD,EAAoBhB,EAAaiB,QACjC6B,EAAqBhD,EAAWmB,QAChCmK,EAAmBP,EAAY5J,QAErCiK,EAAmBxwB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,IAC/FiE,EAAqBzwB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,IAC/FlG,EAAkBtmB,KAAK,IACvBooB,EAAmBpoB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MACxDqT,EAAiB1wB,KAAKwhB,EAAAA,GAA+B,GAAGnE,MAExD2S,EAAiBQ,GACjBN,EAAmBO,GACnBlL,EAAgBe,GAChBjB,EAAc+C,GACdgI,EAAeM,GAEf1E,EAAcwE,GACdvE,EAAgBwE,GAChBpM,EAAaiC,GACbhC,EAAiB8D,GACjB0H,EAAmBY,GAEnBlM,GAAqB,EAAM,EAGvB6D,EAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,EAAiB/a,SAInByW,EAAUzW,GACV+a,EAAiB/a,QAGnByW,EAAUzW,GACV+a,EAAiB/a,IAIf+a,EAAoB/a,IACxB,MAAM8iB,EAAqBT,EAAcxJ,QACnCkK,EAAuBR,EAAgB1J,QACvCD,EAAoBhB,EAAaiB,QACjC6B,EAAqBhD,EAAWmB,aAEQ,IAAnCiK,EAAmB,GAAG9iB,OAC3B8iB,EAAmBhxB,OAAS,EAC9BgxB,EAAmBhI,OAAO9a,EAAO,GAEjC8iB,EAAmB,GAAKhE,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,SAInD,IAArCiE,EAAqB,GAAG/iB,OAC7B+iB,EAAqBjxB,OAAS,EAChCixB,EAAqBjI,OAAO9a,EAAO,GAEnC+iB,EAAqB,GAAKjE,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,SAItD,IAAlClG,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,SAImB,IAAnC8B,EAAmB,GAAG1a,OAC3B0a,EAAmB5oB,OAAS,EAC9B4oB,EAAmBI,OAAO9a,EAAO,GAEjC0a,EAAmB,GAAK5G,EAAAA,GAA6B,GAAGnE,MAI5D2S,EAAiBQ,GACjBN,EAAmBO,GACnBpL,EAAc+C,GACd7C,EAAgBe,GAEhB0F,EAAcwE,GACdvE,EAAgBwE,GAChBnM,EAAiB8D,GACjB/D,EAAaiC,GAEbiK,EAAmBjK,EAAkB,GAGvCtE,EAAAA,EAAAA,YAAU,KACR,MAAM2O,EAA6B,GAC7BC,EAA+B,GAC/BpK,EAAiC,GACjCuC,EAA+B,GAC/B8H,EAAgC,GAEtC,GAAInM,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAM+mB,EAAsBxE,EAAU,GAAGviB,KAAY,MAC/C8mB,EAAevE,EAAU,GAAGviB,KAAe,SAEjD,IAAIgnB,EAAgB,EAGlBA,EADEF,IAAiBzH,EAAAA,GAA6B,GAAGnE,KACnCqI,EAEA1R,EAGlB,IAAIoV,EAAW,GAEfF,EAAUppB,KAAI,CAAC8nB,EAAMla,KAEjB0b,GADW,GAAT1b,GAAcA,EAAQyb,EACZ,IAAMvB,EAENA,KAIhB+I,EAAiB3wB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,IAC7FoE,EAAmB5wB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,IAC7FhG,EAAqBxmB,KAAKopB,GAC1BL,EAAmB/oB,KAAKipB,GACxB4H,EAAoB7wB,KAAK0kB,EAAU,GAAGviB,KAAqB,gBAG7DojB,EAAgBiB,GAEhBnC,EAAamC,GAEb+J,EAAmB/J,QAEnBmK,EAAiB3wB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,IAC7FoE,EAAmB5wB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,IAC7FzD,EAAmB/oB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MACxDwT,EAAoB7wB,KAAKwhB,EAAAA,GAA+B,GAAGnE,MAG7D2S,EAAiBW,GACjBT,EAAmBU,GACnBvL,EAAc0D,GACdqH,EAAeS,GAEf7E,EAAc2E,GACd1E,EAAgB2E,GAChBtM,EAAiByE,GACjB+G,EAAmBe,EAAoB,GACtC,CAACnM,IAEJ,MAqCM2F,EAAkBA,CAACf,EAAa5D,KACpC,MAAMkJ,EAAYnJ,EAAWmC,KAG7B,OAFmB2C,MAAMC,MAAM,KAAMD,MAAM7E,IAAY5lB,KAAI,SAAU2qB,EAAGtoB,GAAK,OAAOA,CAAG,IAErErC,KAAK4nB,GAEnBvc,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcwjB,EAAUjE,SAAS,KAAqB,IAAdjD,EAAkBkH,EAAU5e,UAAU,EAAG4e,EAAUpvB,OAAS,GAAK,KAAOkoB,EAAY,GAAK,IAAMkH,EAAUzS,QAAQ,IAAK,KAAOuL,EAAY,IAAMkH,EAAY,IAAMlH,EAAY,GAClOvc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOga,EAAanC,EAAa,GAAGgE,KAAQ5B,GAAU,YAC5C,SACVqC,KAAK,aACLJ,SAAW3Q,GArSY4R,EAAC5R,EAAYtL,EAAega,EAAmBhC,KAChF,MAAMmF,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF,IAAIC,EAAY/R,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GACxDG,EAAoB1F,EAAa,GAAG5X,KAExC,GAAIsd,EAAmB,CAChBA,EAAkBC,SAAS,OAC9BD,GAAqB,IAAIrE,OAAOjB,EAAY,IAG9C,IAAIwF,EAAyBF,EAAkBve,MAAM,KAErDye,EAAuB,GAAGxD,KAAeqD,EACzCA,EAAYG,EAAuBrE,KAAK,KAG1Cc,EAAsBoD,EAAWrd,EAAM,EAoRRkd,CAA2B5R,EAAOsQ,EAAK5B,EAAWhC,GACvEyE,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,QAKrF,EAoCJ,OACE3f,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GA7ZFvb,QA6Z0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,aAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BA5GRke,SACS,IAAzBlE,EAAW,GAAGkE,KAChB,KAIPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,UACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW+F,UACtCrgB,IAAAA,cAAA,OAAKC,UAAU,kBACbD,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA6B,GAAGnE,KACvCqM,QAAStE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAAc,eACzE+H,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAC9EsM,SAAW3Q,GAAUmN,EAAoBnN,EAAOsQ,KAEjD9H,EAAAA,GAA6B,GAAGnE,MAGnClS,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA8B,GAAGnE,KACxCqM,QAAStE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,MAAc,eAC1E+H,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,MAC/EsM,SAAW3Q,GAAUmN,EAAoBnN,EAAOsQ,KAEjD9H,EAAAA,GAA8B,GAAGnE,SAgFrBqO,CAAoBpC,GACpBlE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,OAAkBqI,EAAY,GAAK2E,EAAgBf,EAAK5D,GACxHN,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,OAAkBrJ,EAAe,GAAKqW,EAAgBf,EAAKtV,GAhD1HsV,IAEvBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,UACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW+D,QACtCre,IAAAA,cAAA,OAAKC,UAAU,kBACbD,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA+B,GAAGnE,KACzCqM,QAASyG,EAAY,GAAG7G,OAAWnY,OAAOqQ,EAAAA,GAA+B,GAAGnE,MAAc,eAC5E8S,EAAY,GAAG7G,OAAWnY,OAAOqQ,EAAAA,GAA+B,GAAGnE,MACjFsM,SAAW3Q,GAAUqX,EAAqBrX,EAAOsQ,KAElD9H,EAAAA,GAA+B,GAAGnE,MAGrClS,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA6B,GAAGnE,KACvCqM,QAASyG,EAAY,GAAG7G,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAAc,eAC1E8S,EAAY,GAAG7G,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAC/EsM,SAAW3Q,GAAUqX,EAAqBrX,EAAOsQ,KAElD9H,EAAAA,GAA6B,GAAGnE,SAwBpByT,CAAkBxH,IAKgC,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAyB,QAAzB,EAAG6S,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,QAKpE,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,oJCxeV,MAuaA,EAvaqDJ,IAAsQ,IAArQ,WAAE+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,cAAE6H,EAAa,gBAAEC,EAAe,aAAE5H,EAAY,iBAAEC,EAAgB,qBAAEE,EAAoB,UAAEE,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,cAAEgP,EAAa,2BAAE7H,GAA4B1H,EACrT,MAAOmI,EAAYC,IAAiB9N,EAAAA,EAAAA,UAAS,CAACiK,EAAAA,GAA6B,GAAGnE,QACvE0S,EAAeC,IAAoBzY,EAAAA,EAAAA,UAAS,CAAC,MAC7C0Y,EAAiBC,IAAsB3Y,EAAAA,EAAAA,UAAS,CAAC,MACjD+N,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,KAE5CkO,EAAajE,EAAAA,GAA2B,GAAGnE,KAE3CqI,EAAY1B,EAAWlhB,MAAK6iB,GAA4B,YAApBA,EAAKkG,aAA2BhG,aACpE7R,EAAegQ,EAAWlhB,MAAK6iB,GAA4B,YAApBA,EAAKkG,aAA2BuB,eAQvE,aAAEpH,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MAE1BC,EAAsBA,CAACnN,EAAYtL,KACvC0Y,EAAoBpN,EAAMqN,OAAO5Y,MAAOC,GAExC,IAAI4Y,EAAoBhB,EAAaiB,QACjCC,EAAuBF,EAAkB,GAAG5Y,KAChD,GAAI8Y,EAAsB,CACxB,IAAIC,EAAoBD,EAAqB/Z,MAAM,KAEnD,GAAIuM,EAAMqN,OAAO5Y,QAAU+T,EAAAA,GAA6B,GAAGnE,KACzD,GAAIoJ,EAAkBjnB,OAASkmB,EAC7Bc,GAAwB,IAAIG,OAAOjB,EAAYe,EAAkBjnB,OAAS,OACrE,CACL,KAAOinB,EAAkBjnB,OAASkmB,GAChCe,EAAkBG,MAEpBJ,EAAuBC,EAAkBI,KAAK,UAGhD,GAAIJ,EAAkBjnB,OAASwU,EAC7BwS,GAAwB,IAAIG,OAAO3S,EAAeyS,EAAkBjnB,OAAS,OACxE,CACL,KAAOinB,EAAkBjnB,OAASwU,GAChCyS,EAAkBG,MAEpBJ,EAAuBC,EAAkBI,KAAK,MAIpDP,EAAkB,GAAG5Y,KAAW8Y,EAEhCjB,EAAgBe,GAEhBjC,EAAaiC,EAAkB,EAG3BF,EAAsBA,CAAC3Y,EAAeC,KAC1C,IAAI8Z,EAAkBpC,EAAWmB,QAEjC,UAA8C,IAAhCiB,EAAgB,GAAG9Z,MAC/B8Z,EAAgBxnB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MAGvDmK,EAAgB,GAAG9Z,KAAWD,EAE9B4X,EAAcmC,GAEdlD,EAAiBkD,EAAgB,EAG7BC,EAAeA,CAACha,EAAeia,KACnC,GAAIja,EAAO,CACT,MAAMoB,EAAQpB,EAAMhB,MAAM,KAE1B,OAAOoC,EAAM,GAAG6Y,KAAe7Y,EAAM,GAAG6Y,KAAe,GAGzD,MAAO,EAAE,EAwBLC,EAAwBA,CAACC,EAAcla,KAC3C,MAAM4Y,EAAoBhB,EAAaiB,QAEvC,UAAgD,IAAlCD,EAAkB,GAAG5Y,MACjC4Y,EAAkBtmB,KAAK,IAGzBsmB,EAAkB,GAAG5Y,KAAWka,EAEhCtB,EAAkB,GAAG5Y,KAASma,OAE9BtC,EAAgBe,GAEhBjC,EAAaiC,GAEbwB,EAAmBxB,EAAkB,EAGjCwB,EAAsBxB,IAC1B,IAAI4B,GAAe,EAEnB,IAAK,IAAI/lB,EAAI,EAAGA,EAAImkB,EAAkB9mB,OAAQ2C,IAC5C,GAA2D,KAAvDmkB,EAAkB,GAAGnkB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC7DK,GAAe,EACf,MAIJ1D,EAAqB0D,EAAa,EAG9BC,EAAWA,KACfjE,EAAO,GAEP,MAAMkE,EAAqBhD,EAAWmB,QAChCiK,EAAqBT,EAAcxJ,QACnCkK,EAAuBR,EAAgB1J,QACvCD,EAAoBhB,EAAaiB,QAEvC6B,EAAmBpoB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MACxDmT,EAAmBxwB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,IAC/FiE,EAAqBzwB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,IAC/FlG,EAAkBtmB,KAAK,IAEvBqlB,EAAc+C,GACd4H,EAAiBQ,GACjBN,EAAmBO,GACnBlL,EAAgBe,GAEhBhC,EAAiB8D,GACjB4D,EAAcwE,GACdvE,EAAgBwE,GAChBpM,EAAaiC,GAEb9B,GAAqB,EAAM,EAGvB6D,EAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,EAAiB/a,SAInByW,EAAUzW,GACV+a,EAAiB/a,QAGnByW,EAAUzW,GACV+a,EAAiB/a,IAIf+a,EAAoB/a,IACxB,MAAM0a,EAAqBhD,EAAWmB,QAChCiK,EAAqBT,EAAcxJ,QACnCkK,EAAuBR,EAAgB1J,QACvCD,EAAoBhB,EAAaiB,aAEO,IAAnC6B,EAAmB,GAAG1a,OAC3B0a,EAAmB5oB,OAAS,EAC9B4oB,EAAmBI,OAAO9a,EAAO,GAEjC0a,EAAmB,GAAK5G,EAAAA,GAA6B,GAAGnE,WAId,IAAnCmT,EAAmB,GAAG9iB,OAC3B8iB,EAAmBhxB,OAAS,EAC9BgxB,EAAmBhI,OAAO9a,EAAO,GAEjC8iB,EAAmB,GAAKhE,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,SAInD,IAArCiE,EAAqB,GAAG/iB,OAC7B+iB,EAAqBjxB,OAAS,EAChCixB,EAAqBjI,OAAO9a,EAAO,GAEnC+iB,EAAqB,GAAKjE,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,SAItD,IAAlClG,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,IAI3BjB,EAAc+C,GACd4H,EAAiBQ,GACjBN,EAAmBO,GACnBlL,EAAgBe,GAEhBhC,EAAiB8D,GACjB4D,EAAcwE,GACdvE,EAAgBwE,GAChBpM,EAAaiC,GAEbwB,EAAmBxB,EAAkB,GAGvCtE,EAAAA,EAAAA,YAAU,KACR,MAAM+G,EAA+B,GAC/B4H,EAA6B,GAC7BC,EAA+B,GAC/BpK,EAAiC,GAEvC,GAAI9B,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAM+mB,EAAsBxE,EAAU,GAAGviB,KAAY,MAC/C8mB,EAAevE,EAAU,GAAGviB,KAAe,SAEjD,IAAIgnB,EAAgBzD,EAEhBuD,IAAiBzH,EAAAA,GAA6B,GAAGnE,OACnD8L,EAAgBnV,GAGlB,IAAIoV,EAAW,GAEfF,EAAUppB,KAAI,CAAC8nB,EAAMla,KAEjB0b,GADY,IAAV1b,GAAeA,EAAQyb,EACb,IAAMvB,EAENA,KAIhB+I,EAAiB3wB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,IAC7FoE,EAAmB5wB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,IAC7FzD,EAAmB/oB,KAAKipB,GACxBzC,EAAqBxmB,KAAKopB,GAG5B7D,EAAgBiB,GAEhBnC,EAAamC,GAEbsB,EAAmBtB,QAEnBmK,EAAiB3wB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,IAC7FoE,EAAmB5wB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,IAC7FzD,EAAmB/oB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MAG1D2S,EAAiBW,GACjBT,EAAmBU,GACnBvL,EAAc0D,GAEdzE,EAAiByE,GACjBiD,EAAc2E,GACd1E,EAAgB2E,EAAmB,GAClC,CAAClM,IAEJ,MAqCM2F,EAAkBA,CAACf,EAAa5D,KACpC,MAAMkJ,EAAYnJ,EAAWmC,KAG7B,OAFmB2C,MAAMC,MAAM,KAAMD,MAAM7E,IAAY5lB,KAAI,SAAU2qB,EAAGtoB,GAAK,OAAOA,CAAG,IAErErC,KAAI4nB,GAElBvc,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcwjB,EAAUjE,SAAS,KAAqB,IAAdjD,EAAkBkH,EAAU5e,UAAU,EAAG4e,EAAUpvB,OAAS,GAAK,KAAOkoB,EAAY,GAAK,IAAMkH,EAAUzS,QAAQ,IAAK,KAAOuL,EAAY,IAAMkH,EAAY,IAAMlH,EAAY,GAClOvc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOga,EAAanC,EAAa,GAAGgE,KAAQ5B,GAAU,YAC5C,SACVqC,KAAK,aACLJ,SAAU3Q,GA3Qa4R,EAAC5R,EAAYtL,EAAega,EAAmBhC,KAChF,MAAMmF,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF,IAAIC,EAAY/R,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAExDG,EAAoB1F,EAAa,GAAG5X,KAExC,GAAIsd,EAAmB,CAChBA,EAAkBC,SAAS,OAC9BD,GAAqB,IAAIrE,OAAOjB,EAAY,IAG9C,MAAMwF,EAAyBF,EAAkBve,MAAM,KAEvDye,EAAuB,GAAGxD,KAAeqD,EACzCA,EAAYG,EAAuBrE,KAAK,KAG1Cc,EAAsBoD,EAAWrd,EAAM,EAyPVkd,CAA2B5R,EAAOsQ,EAAK5B,EAAWhC,GACrEyE,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxD9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,QAKrF,EAGJ,OACE3f,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GA3VFvb,QA2V0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,aAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BA3ERke,SACS,IAAzBlE,EAAW,GAAGkE,KAChB,KAIPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,UACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW+F,UACtCrgB,IAAAA,cAAA,OAAKC,UAAU,kBACbD,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA6B,GAAGnE,KACvCqM,QAAStE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAAc,eACzE+H,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAC9EsM,SAAW3Q,GAAUmN,EAAoBnN,EAAOsQ,KAEjD9H,EAAAA,GAA6B,GAAGnE,MAGnClS,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA8B,GAAGnE,KACxCqM,QAAStE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,MAAc,eAC1E+H,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,MAC/EsM,SAAW3Q,GAAUmN,EAAoBnN,EAAOsQ,KAEjD9H,EAAAA,GAA8B,GAAGnE,SA+CrBqO,CAAoBpC,GACpBlE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,OAAkBqI,EAAY,GAAK2E,EAAgBf,EAAK5D,GACxHN,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,OAAkBrJ,EAAe,GAAKqW,EAAgBf,EAAKtV,IAK1E,IAAA2X,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAyB,QAAzB,EAAG6S,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,QAKpE,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,QAI5E,6JChaV,MAkcA,EAlcgDJ,IAGqE,IAHpE,WAC/C+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,mBACxD4M,EAAkB,cAAE/E,EAAa,gBAAEC,EAAe,aAAE5H,EAAY,uBAAE2M,EAAsB,qBAAExM,EAAoB,UAC9GE,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,cAAEgP,EAAa,2BAAE7H,GAA4B1H,EAC/G,MAAOwP,EAAYC,IAAiBnV,EAAAA,EAAAA,UAAS,CAAC,MACvCrI,EAAUyd,IAAepV,EAAAA,EAAAA,UAAS,CAAC,MACnC1I,EAAOge,IAAYtV,EAAAA,EAAAA,UAAS,CAAC,MAE7B0Z,EAAaC,IAAiB3Z,EAAAA,EAAAA,UAAS,CAAC,IAEzCkO,EAAajE,EAAAA,GAAsB,GAAGnE,KACtC6P,EAAalJ,EAAWlhB,MAAK6iB,GAA4B,SAApBA,EAAKC,aAAwBC,cAOlE,aAAEG,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MAgB1B0E,EAA6BA,CAAC5R,EAAYtL,EAAega,KAC7D,MAAMmD,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF,IAAIC,EAAY/R,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GACxDG,EAAoBnc,EAAM,GAAGnB,KAE5Bsd,EAAkBC,SAAS,OAC9BD,GAAqB,IAAIrE,OAAOuG,EAAa,IAG/C,MAAMhC,EAAyBF,EAAkBve,MAAM,KAEvDye,EAAuB,GAAGxD,KAAeqD,EACzCA,EAAYG,EAAuBrE,KAAK,KAExCc,EAAsBoD,EAAWrd,EAAM,EAGnCia,EAAwBA,CAACC,EAAcla,KAC3C,MAAM4Y,EAAoBzX,EAAM0X,QAEhC,UAAgD,IAAlCD,EAAkB,GAAG5Y,MACjC4Y,EAAkBtmB,KAAK,IAGzBsmB,EAAkB,GAAG5Y,KAAWka,EAEhCtB,EAAkB,GAAG5Y,KAASma,OAE9BgF,EAASvG,GAETjC,EAAaiC,GAEbwB,EAAmBxB,EAAkB,EAGjC6K,EAAyBA,CAACnY,EAAYtL,KAC1C,IAAI0jB,EAA0B,GAC1BC,EAAwB,GAE5B,IAAK,IAAIlvB,EAAI,EAAGA,EAAI6W,EAAMxZ,SAAU2C,EAClCivB,GAAmBpY,EAAM,GAAG7W,KAAKqB,OAASrB,GAAK6W,EAAMxZ,OAAS,EAAI,IAAM,IACxE6xB,GAAiBrY,EAAM,GAAG7W,KAAKsL,OAAStL,GAAK6W,EAAMxZ,OAAS,EAAI,IAAM,IAGxE,MAAM8xB,EAAmB7E,EAAWlG,QAC9BgL,EAAeriB,EAASqX,QAE9B,UAA+C,IAAjC+K,EAAiB,GAAG5jB,MAChC4jB,EAAiBtxB,KAAK,IAGxB,UAA2C,IAA7BuxB,EAAa,GAAG7jB,MAC5B6jB,EAAavxB,KAAK,IAGpBsxB,EAAiB,GAAG5jB,KAAW0jB,EAC/BG,EAAa,GAAG7jB,KAAW2jB,EAE3B3E,EAAc4E,GACd3E,EAAY4E,GAEZvF,EAAcsF,GACdrF,EAAgBsF,GA7EIC,EAAC7b,EAAejI,KACpC,MAAMggB,EAAauD,EAAY1K,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,GAGlB0tB,EAAW,GAAGhgB,KAAWiI,EAEzBub,EAAcxD,GAEdqD,EAAmBrD,EAAW,EAoE9B8D,CAAcxY,EAAMxZ,OAAQkO,GAE5B+jB,EAAoBH,EAAiB,EAGjC7J,EAAeA,CAACha,EAAeia,KACnC,GAAIja,EAAO,CACT,MAAMoB,EAAQpB,EAAMhB,MAAM,KAE1B,OAAOoC,EAAM,GAAG6Y,KAAe7Y,EAAM,GAAG6Y,KAAe,GAGzD,MAAO,EAAE,EAGLgK,EAAsBhkB,IAC1B,MAAMikB,EAAmD,GAEzD,GAAIlF,EAAWjtB,OAAS,EAAG,CACzB,MAAM8xB,EAAmB7E,EAAWlG,QAC9BgL,EAAeriB,EAASqX,QAE9B,QAA4C,IAAjC+K,EAAiB,GAAG5jB,MACQ,KAAjC4jB,EAAiB,GAAG5jB,KAAiB,CACvC,MAAMkkB,EAAaN,EAAiB,GAAG5jB,KAASjB,MAAM,KAChDolB,EAAWN,EAAa,GAAG7jB,KAASjB,MAAM,KAEhD,IAAK,IAAItK,EAAI,EAAGA,EAAIyvB,EAAWpyB,SAAU2C,EACvCwvB,EAAa3xB,KAAK,CAAEyN,MAAOokB,EAAS,GAAG1vB,KAAMqB,MAAOouB,EAAW,GAAGzvB,QAM1E,OAAOwvB,CAAY,EAGfF,EAAuBK,IAC3B,IAAIC,EAAiBD,EAAmBtyB,OAAS,EAEjD,IAAK,IAAI2C,EAAI,EAAGA,EAAI2vB,EAAmBtyB,OAAQ2C,IAC7C,GAA4D,KAAxD2vB,EAAmB,GAAG3vB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC9DkK,GAAiB,EAAO,MAI5Bf,EAAuBe,EAAe,EAGlCjK,EAAsBxB,IAC1B,IAAI4B,EAAe5B,EAAkB9mB,OAAS,EAE9C,IAAK,IAAI2C,EAAI,EAAGA,EAAImkB,EAAkB9mB,OAAQ2C,IAC5C,GAA2D,KAAvDmkB,EAAkB,GAAGnkB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC7DK,GAAe,EACf,MAIJ1D,EAAqB0D,EAAa,EAS9BC,EAAWA,KACfjE,EAAO,GAEP,MAAM8N,EAAmBf,EAAY1K,QAC/B8H,EAAkB5B,EAAWlG,QAC7B+H,EAAgBpf,EAASqX,QACzBkH,EAAa5e,EAAM0X,QAEzByL,EAAiBhyB,KAAK,GACtBquB,EAAgBruB,KAAK,IACrBsuB,EAActuB,KAAK,IACnBytB,EAAWztB,KAAK,IAEhBkxB,EAAcc,GACdtF,EAAc2B,GACd1B,EAAY2B,GACZzB,EAASY,GAETsD,EAAmBiB,GACnBhG,EAAcqC,GACdpC,EAAgBqC,GAChBjK,EAAaoJ,GAEbuD,GAAuB,GACvBxM,GAAqB,EAAM,EAGvB6D,EAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GAEVgX,EAAU8D,OAAO9a,EAAO,GAExB+a,EAAiB/a,SAInByW,EAAUzW,GAEV+a,EAAiB/a,QAGnByW,EAAUzW,GACV+a,EAAiB/a,IAIf+a,EAAoB/a,IACxB,MAAMskB,EAAmBf,EAAY1K,QAC/B8H,EAAkB5B,EAAWlG,QAC7B+H,EAAgBpf,EAASqX,QACzBkH,EAAa5e,EAAM0X,aAEmB,IAAjCyL,EAAiB,GAAGtkB,OACzBskB,EAAiBxyB,OAAS,EAC5BwyB,EAAiBxJ,OAAO9a,EAAO,GAE/BskB,EAAiB,GAAK,EAGxBd,EAAcc,GAEdjB,EAAmBiB,SAGsB,IAAhC3D,EAAgB,GAAG3gB,OACxB2gB,EAAgB7uB,OAAS,EAC3B6uB,EAAgB7F,OAAO9a,EAAO,GAE9B2gB,EAAgB,GAAK,GAGvB3B,EAAc2B,GAEdrC,EAAcqC,SAGyB,IAA9BC,EAAc,GAAG5gB,OACtB4gB,EAAc9uB,OAAS,EACzB8uB,EAAc9F,OAAO9a,EAAO,GAE5B4gB,EAAc,GAAK,GAGrB3B,EAAY2B,GAEZrC,EAAgBqC,SAGoB,IAA3Bb,EAAW,GAAG/f,OACnB+f,EAAWjuB,OAAS,EACtBiuB,EAAWjF,OAAO9a,EAAO,GAEzB+f,EAAW,GAAK,GAGlBZ,EAASY,GAETpJ,EAAaoJ,IAGfgE,EAAoBpD,GACpBvG,EAAmB2F,EAAW,GAGhCzL,EAAAA,EAAAA,YAAU,KACR,MAAMgQ,EAA6B,GAC7B3D,EAA4B,GAC5BC,EAA0B,GAC1Bb,EAAuB,GAE7B,GAAI/I,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAM+mB,EAAsBxE,EAAU,GAAGviB,KAAY,MAErD,IAAIinB,EAAW,GAEfF,EAAUppB,KAAI,CAAC8nB,EAAMla,KAEjB0b,GADY,IAAV1b,GAAeA,EAAQwf,EACb,IAAMtF,EAENA,KAIhB,MAAMqK,EAAoBvN,EAAU,GAAGviB,KAAgB,UAEvD6vB,EAAiBhyB,KAAKiyB,EAAUxlB,MAAM,KAAKjN,QAC3C6uB,EAAgBruB,KAAKiyB,GACrB3D,EAActuB,KAAK0kB,EAAU,GAAGviB,KAAc,SAC9CsrB,EAAWztB,KAAKopB,GAGlByD,EAASY,GAETpJ,EAAaoJ,GAEb3F,EAAmB2F,QAEnBuE,EAAiBhyB,KAAK,GACtBquB,EAAgBruB,KAAK,IACrBsuB,EAActuB,KAAK,IAGrBkxB,EAAcc,GACdtF,EAAc2B,GACd1B,EAAY2B,GAEZyC,EAAmBiB,GACnBhG,EAAcqC,GACdpC,EAAgBqC,GAEhBmD,EAAoBpD,EAAgB,GACnC,CAAC3J,IAiDJ,OACEvZ,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GAtXFvb,QAsX0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,aAAvBwZ,EAAQ2E,WACV,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,8BA3DRke,IAEzBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWyM,WACtC/mB,IAAAA,cAACgnB,EAAAA,GAAM,CACLC,SAAO,EACP3kB,MAAOikB,EAAmBpI,GAC1B+I,mBAAmB,EACnBC,QAAS9F,EAAc1sB,KAAIkZ,IAAmB,CAAEvL,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,SACvF2Q,SAAU3Q,GAASmY,EAAuBnY,EAAOsQ,GACjDiJ,gBAAgB,cAChBnnB,UAAU,SACVonB,iBAAkBA,IAAM,KACxBC,mBAAmB,MA8CJC,CAAoBpJ,GACpB4D,EAAa,GAxCd7C,EAACf,EAAa4D,KACpC,MAAM0B,EAAYnJ,EAAWmC,KAG7B,OAFmB2C,MAAMC,MAAM,KAAMD,MAAM2C,IAAaptB,KAAI,SAAU2qB,EAAGtoB,GAAK,OAAOA,CAAG,IAEtErC,KAAI4nB,GAElBvc,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcwjB,EAAUjE,SAAS,KAAsB,IAAdjD,EAAkBkH,EAAU5e,UAAU,EAAG4e,EAAUpvB,OAAS,GAAK,KAAOkoB,EAAY,GAAK,IAAMkH,EAAUzS,QAAQ,IAAK,KAAOuL,EAAY,IAAOkH,EAAY,IAAMlH,EAAY,GACpOvc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOga,EAAa5Y,EAAM,GAAGya,KAAQ5B,GAAU,YACrC,SACVqC,KAAK,aACLJ,SAAU3Q,GAAS4R,EAA2B5R,EAAOsQ,EAAK5B,GAC1DyC,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxD9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,QAKrF,EAiBuCT,CAAgBf,EAAK4D,IAKW,IAAAvB,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,KAAyB,QAAtBugB,EAAA1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,OAtPjDwK,IACrB+e,EAAWjtB,OAAS,QAAuC,IAA3BitB,EAAW,GAAG/e,KAA2B+e,EAAW,GAAG/e,KAASjB,MAAM,KAAKjN,OAAS,EAqPrCmzB,CAA4BrJ,KAKzG,GAA2B,WAAvBpC,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,4JC1bV,MAwkBA,EAxkB+CJ,IAAiT,IAAhT,WAAE+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,cAAEC,EAAa,aAAEC,EAAY,qBAAEG,EAAoB,sBAAEC,EAAqB,UAAEC,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,SAAE+O,EAAQ,cAACC,EAAa,gBAACP,EAAe,cAACD,EAAa,mBAAG+E,EAAkB,uBAAEC,GAAuB/T,EAE1V,MAAO7G,EAAa2O,IAAkBxN,EAAAA,EAAAA,UAAS,CAAC,KACzCyN,EAAYC,IAAiB1N,EAAAA,EAAAA,UAAS,CAAC,MACvCqb,EAAcC,IAAmBtb,EAAAA,EAAAA,UAAS,CAAC,MAC3Cub,EAAgBC,IAAqBxb,EAAAA,EAAAA,UAAS,CAAC,MAC/Cyb,EAAaC,IAAkB1b,EAAAA,EAAAA,UAAS,CAAC,MAEzC0Z,EAAaC,IAAiB3Z,EAAAA,EAAAA,UAAS,CAAC,IAKzCkO,EAAajE,EAAAA,GAAqB,GAAGnE,KAErCgQ,KAAad,IAAYA,EAASe,gBAAmD,KAAlCf,EAASe,cAAczF,QAQ1E,aAAE7B,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MA4F1BgN,EAAwBA,CAACtL,EAAcla,KAC3C,MAAMylB,EAAoBP,EAAarM,QAEvC,UAAgD,IAAlC4M,EAAkB,GAAGzlB,MACjCylB,EAAkBnzB,KAAK,IAGzBmzB,EAAkB,GAAGzlB,KAAWka,EAEhCuL,EAAkB,GAAGzlB,KAASma,OAE9BgL,EAAgBM,GAEhB9O,EAAa8O,GAEbrL,EAAmBqL,EAAkB,EAMjCrL,EAAsBqL,IAC1B,IAAIjL,GAAe,EAEnB,IAAK,IAAI/lB,EAAI,EAAGA,EAAIgxB,EAAkB3zB,OAAQ2C,IAC5C,GAAyC,KAArCgxB,EAAkB,GAAGhxB,KAAK0lB,OAAe,CAC3CK,GAAe,EACf,MAIJ1D,EAAqB0D,EAAa,EAG9BkL,EAAuBrM,IAC3B,IAAIsM,GAAgB,EAEpB,IAAK,IAAIlxB,EAAI,EAAGA,EAAI4kB,EAAiBvnB,OAAQ2C,IAC3C,GAAgC,GAA5B4kB,EAAiB,GAAG5kB,KAAW,CACjCkxB,GAAgB,EAChB,MAIJ5O,EAAsB4O,EAAc,EAKhChL,EAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,EAAiB/a,SAInByW,EAAUzW,GACV+a,EAAiB/a,QAGnByW,EAAUzW,GACV+a,EAAiB/a,IAIf+a,EAAoB/a,IACxB,MAAMwZ,EAAUlD,EAAWlhB,MAAKokB,GAAkC,WAAvBA,EAAQtB,aAE7CmB,EAAmB3Q,EAAYmQ,QAC/BgB,EAAkBvC,EAAWuB,QAC7B4M,EAAoBP,EAAarM,QACjC+M,EAAkBrC,EAAY1K,QAC9BgN,EAAoBP,EAAYzM,QAChCiN,EAAsBV,EAAevM,aAGC,IAAjCQ,EAAiB,GAAGrZ,OACzBqZ,EAAiBvnB,OAAS,EAC5BunB,EAAiByB,OAAO9a,EAAO,GAE/BqZ,EAAiB,GAAKhkB,SAASmkB,EAASrC,cAAe,UAIhB,IAAhC0C,EAAgB,GAAG7Z,OACxB6Z,EAAgB/nB,OAAS,EAC3B+nB,EAAgBiB,OAAO9a,EAAO,GAE9B6Z,EAAgB,GAAK,SAIoB,IAAlC4L,EAAkB,GAAGzlB,OAC1BylB,EAAkB3zB,OAAS,EAC7B2zB,EAAkB3K,OAAO9a,EAAO,GAEhCylB,EAAkB,GAAK,SAGgB,IAAhCG,EAAgB,GAAG5lB,OACxB4lB,EAAgB9zB,OAAS,EAC3B8zB,EAAgB9K,OAAO9a,EAAO,GAE9B4lB,EAAgB,GAAK,EAGvBpC,EAAcoC,GAEdvC,EAAmBuC,SAGwB,IAAlCC,EAAkB,GAAG7lB,OAC1B6lB,EAAkB/zB,OAAS,EAC7B+zB,EAAkB/K,OAAO9a,EAAO,GAEhC6lB,EAAkB,GAAK,SAIoB,IAApCC,EAAoB,GAAG9lB,OAC5B8lB,EAAoBh0B,OAAS,EAC/Bg0B,EAAoBhL,OAAO9a,EAAO,GAElC8lB,EAAoB,GAAK,IAO7BzO,EAAegC,GACf9B,EAAcsC,GACdsL,EAAgBM,GAChBF,EAAeM,GACfR,EAAkBS,GAGlBxH,EAAcuH,GACdtH,EAAgBuH,GAChBnP,EAAa8O,GACb/O,EAAc2C,GAEd0K,EAAoB8B,GACpBzL,EAAmBqL,GACnBC,EAAoBrM,EAAiB,GAGvC/E,EAAAA,EAAAA,YAAU,KACR,MAAMkF,EAAUlD,EAAWlhB,MAAKokB,GAAkC,WAAvBA,EAAQtB,aAEnD,IAAI8C,EAAmBtlB,OAAO8jB,aAAO,EAAPA,EAASrC,cAAe,IAClD8D,EAAoBxX,OAAO+V,aAAO,EAAPA,EAASrC,cAAe,IAEvD,MAAMiE,EAAsC,GACtCD,EAA+B,GAC/B4K,EAAiC,GACjCC,EAAmC,GACnC1B,EAA6B,GAC7B3D,EAA4B,GAC5BC,EAA0B,GAEhC,GAAI5J,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,IAAIkU,EAA4BqO,EAAU,GAAGviB,KAAwB,kBAErE,MAAM8vB,EAAoBvN,EAAU,GAAGviB,KAAgB,UAMvD,OAJA6vB,EAAiBhyB,KAAKiyB,EAAUxlB,MAAM,KAAKjN,QAC3C6uB,EAAgBruB,KAAKiyB,GACrB3D,EAActuB,KAAK0kB,EAAU,GAAGviB,KAAc,SAEtCkU,GACN,KAAK,EACHA,EAAoBjT,OAAOslB,GAC3BgL,EAAuB1zB,KAAK2oB,GAC5BE,EAAmB7oB,KAAK,IACxB,MAEF,KAAK,EACH0zB,EAAuB1zB,KAAK,KAC5B6oB,EAAmB7oB,KAAK,IACxB,MAEF,KAAK,EACH0zB,EAAuB1zB,KAAK,KAC5B6oB,EAAmB7oB,KAAK,IACxB,MAEF,KAAK,GACH0zB,EAAuB1zB,KAAK,MAC5B6oB,EAAmB7oB,KAAK,IACxB,MAEF,KAAK,GACH0zB,EAAuB1zB,KAAK,MAC5B6oB,EAAmB7oB,KAAK,IACxB,MAEF,QACMqW,GACFqd,EAAuB1zB,KAAKwhB,EAAAA,GAAoB,GAAGnE,MACnDwL,EAAmB7oB,KAAKqW,EAAkBrS,cAE1CqS,EAAoBjT,OAAOslB,GAC3BgL,EAAuB1zB,KAAK2oB,GAC5BE,EAAmB7oB,KAAK,KAM9ByzB,EAAqBzzB,KAAK0kB,EAAU,GAAGviB,KAAY,MAAE,IAErD2mB,EAA0B9oB,KAAKqW,GAIjCwc,EAAgBY,GAGhBpP,EAAaoP,GAGb3L,EAAmB2L,QAEnBC,EAAuB1zB,KAAK2oB,GAC5BG,EAA0B9oB,KAAK0oB,GAC/BG,EAAmB7oB,KAAK,IACxBgyB,EAAiBhyB,KAAK,GACtBquB,EAAgBruB,KAAK,IACrBsuB,EAActuB,KAAK,IAIlBqtB,GAAaoG,EAAqBj0B,QAAS,GAG1Ci0B,EAAqBzzB,KAAKusB,EAASoH,UAAU,IAAIpH,EAASqH,UAG9Df,EAAgBY,GAChB1O,EAAe+D,GACf7D,EAAc4D,GACdqI,EAAcc,GACdiB,EAAe5E,GACf0E,EAAkBzE,GAElByC,EAAmBiB,GACnBhG,EAAcqC,GACdpC,EAAgBqC,GAEhBmD,EAAoBpD,GAEpBjK,EAAc0E,GACdzE,EAAaoP,GAEbL,EAAoBtK,GACpBhB,EAAmB2L,EAAqB,GACvC,CAAC/O,IAEJ,MAAMgN,EAAsBhkB,IAC1B,MAAMikB,EAAmD,GAEzD,GAAIqB,EAAYxzB,OAAS,EAAG,CAC1B,MAAM8xB,EAAmB0B,EAAYzM,QAC/BgL,EAAeuB,EAAevM,QAEpC,QAA4C,IAAjC+K,EAAiB,GAAG5jB,MACQ,KAAjC4jB,EAAiB,GAAG5jB,KAAiB,CACvC,MAAMkkB,EAAaN,EAAiB,GAAG5jB,KAASjB,MAAM,KAChDolB,EAAWN,EAAa,GAAG7jB,KAASjB,MAAM,KAEhD,IAAK,IAAItK,EAAI,EAAGA,EAAIyvB,EAAWpyB,SAAU2C,EACvCwvB,EAAa3xB,KAAK,CAAEyN,MAAOokB,EAAS,GAAG1vB,KAAMqB,MAAOouB,EAAW,GAAGzvB,QAM1E,OAAOwvB,CAAY,EAGfF,EAAuBoC,IAC3B,IAAI9B,EAAiB8B,EAAiBr0B,OAAS,EAE/C,IAAK,IAAI2C,EAAI,EAAGA,EAAI0xB,EAAiBr0B,OAAQ2C,IAC3C,GAA0D,KAAtD0xB,EAAiB,GAAG1xB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC5DkK,GAAiB,EACjB,MAIJf,EAAuBe,EAAe,EAiBlCZ,EAAyBA,CAACnY,EAAYtL,KAC1C,IAAI0jB,EAA0B,GAC1BC,EAAwB,GAE5BD,GAAmBpY,EAAMxV,MACzB6tB,GAAiBrY,EAAMvL,MAEvB,MAAM6jB,EAAmB0B,EAAYzM,QAC/BgL,EAAeuB,EAAevM,QAEpC,UAA+C,IAAjC+K,EAAiB,GAAG5jB,MAChC4jB,EAAiBtxB,KAAK,IAGxB,UAA2C,IAA7BuxB,EAAa,GAAG7jB,MAC5B6jB,EAAavxB,KAAK,IAGpBsxB,EAAiB,GAAG5jB,KAAW0jB,EAC/BG,EAAa,GAAG7jB,KAAW2jB,EAE3B4B,EAAe3B,GACfyB,EAAkBxB,GAElBvF,EAAcsF,GACdrF,EAAgBsF,GAvCIC,EAAC7b,EAAejI,KACpC,MAAMggB,EAAauD,EAAY1K,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,GAGlB0tB,EAAW,GAAGhgB,KAAWiI,EAEzBub,EAAcxD,GAEdqD,EAAmBrD,EAAW,EA8B9B8D,CAAcxY,EAAMxZ,OAAQkO,GAE5B+jB,EAAoBH,EAAiB,EAwBjCwC,EAAcxK,GAEhBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,qBAAqBqa,EAAWmN,cAC7CznB,IAAAA,cAAA,SACEse,KAAK,OACLhc,MAAOmlB,EAAa,GAAGtJ,KACvBO,UAAU,OAAM,YACN,SACVE,KAAK,aACLJ,SAAW3Q,GAlaM+a,EAAC/a,EAAYtL,KACtC,IAAImd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAElFoI,EAAsBla,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EA+Z/CqmB,CAAmB/a,EAAOsQ,GAC/Ca,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OASvF,OACE3f,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GAtfFvb,QAsf0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IACTne,IAAAA,cAAA,OAAKC,UAAU,eACpBD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,iBAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BAtDNke,IAEzBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWyM,WACtC/mB,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOikB,EAAmBpI,GAC1B+I,mBAAmB,EACnBC,QAAS9F,EAAc1sB,KAAIkZ,IAAmB,CAAEvL,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,SACvF2Q,SAAU3Q,GAASmY,EAAuBnY,EAAOsQ,GACjDiJ,gBAAgB,cAChBnnB,UAAU,SACVonB,iBAAkBA,IAAM,KACxBC,mBAAmB,MA0CNC,CAAoBpJ,GACpBwK,EAAWxK,IAOuC,IAAAqC,EAAAC,EAAzD,IAAK7hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IACI,KAAb,QAAtBugB,EAAA1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,YAAgD,IAA1BkT,EAAY,GAAGkT,KAAyBlT,EAAY,GAAGkT,KAAS,IAA4B,QAAzBsC,EAAG3N,EAAgB9c,cAAM,IAAAyqB,OAAA,EAAtBA,EAAwB1oB,QAMtJ,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,GAId3gB,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,MAKlE,UAYd,oJC7kBV,MAqcA,EArc6DrM,IAA4O,IAA3O,WAAE+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,aAAEE,EAAY,iBAAEC,EAAgB,oBAAEC,EAAmB,qBAAEC,EAAoB,UAAEE,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,2BAAEmH,GAA4B1H,EACnS,MAAOmI,EAAYC,IAAiB9N,EAAAA,EAAAA,UAAS,CAACiK,EAAAA,GAA6B,GAAGnE,QACvEiI,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,MAC3CjH,EAAakV,IAAkBjO,EAAAA,EAAAA,UAAS,CAAC,KAE1CkO,EAAajE,EAAAA,EAAmC,GAAGnE,KAEnDqI,EAAY1B,EAAWlhB,MAAK6iB,GAA4B,YAApBA,EAAKkG,aAA2BhG,aACpEC,EAAgB9B,EAAWlhB,MAAK6iB,GAA4B,YAApBA,EAAKkG,aAA2BuB,eAQxE,aAAEpH,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MAE1BC,EAAsBA,CAACnN,EAAYtL,KACvC0Y,EAAoBpN,EAAMqN,OAAO5Y,MAAOC,GAExC,IAAI4Y,EAAoBhB,EAAaiB,QACjCC,EAAuBF,EAAkB,GAAG5Y,KAC5CgZ,EAAqBpW,EAAYiW,QAErC,GADAG,EAAmB,GAAGhZ,KAAW,GAC7B8Y,EAAsB,CACxB,IAAIC,EAAoBD,EAAqB/Z,MAAM,KAGnD,GAAIuM,EAAMqN,OAAO5Y,QAAU+T,EAAAA,GAA6B,GAAGnE,KACzD,GAAIoJ,EAAkBjnB,OAASkmB,EAC7Bc,GAAwB,IAAIG,OAAOjB,EAAYe,EAAkBjnB,OAAS,OACrE,CACL,KAAOinB,EAAkBjnB,OAASkmB,GAChCe,EAAkBG,MAEpBJ,EAAuBC,EAAkBI,KAAK,UAGhD,GAAIJ,EAAkBjnB,OAASsmB,EAC7BU,GAAwB,IAAIG,OAAOb,EAAgBW,EAAkBjnB,OAAS,OACzE,CACL,KAAOinB,EAAkBjnB,OAASsmB,GAChCW,EAAkBG,MAEpBJ,EAAuBC,EAAkBI,KAAK,MAMpDP,EAAkB,GAAG5Y,KAAW8Y,EAEhCjB,EAAgBe,GAChBd,EAAekB,GAEfrC,EAAaiC,GACb/B,EAAoBmC,EAAmB,EAInCN,EAAsBA,CAAC3Y,EAAeC,KAC1C,IAAI8Z,EAAkBpC,EAAWmB,QAEjC,UAA8C,IAAhCiB,EAAgB,GAAG9Z,MAC/B8Z,EAAgBxnB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MAGvDmK,EAAgB,GAAG9Z,KAAWD,EAE9B4X,EAAcmC,GACdM,EAAmBxC,EAAchV,EAAakX,GAE9ClD,EAAiBkD,EAAgB,EAG7BC,EAAeA,CAACha,EAAeia,KACnC,GAAIja,EAAO,CACT,MAAMoB,EAAQpB,EAAMhB,MAAM,KAE1B,OAAOoC,EAAM,GAAG6Y,KAAe7Y,EAAM,GAAG6Y,KAAe,GAGzD,MAAO,EAAE,EAqBLC,EAAwBA,CAACC,EAAcla,KAC3C,MAAM4Y,EAAoBhB,EAAaiB,QAEvC,UAAgD,IAAlCD,EAAkB,GAAG5Y,MACjC4Y,EAAkB,GAAG5Y,KAAW,GAGlC4Y,EAAkB,GAAG5Y,KAAWka,EAEhCtB,EAAkB,GAAG5Y,KAASma,OAE9BtC,EAAgBe,GAEhBjC,EAAaiC,GAEbwB,EAAmBxB,EAAmBhW,EAAa8U,EAAW,EAS1D2C,EAAuBA,CAACH,EAAcla,KAC1C,IAAIsa,EAAmB1X,EAAYiW,QACnC,UAA+C,IAAjCyB,EAAiB,GAAGta,MAChCsa,EAAiBhoB,KAAK,IAExBgoB,EAAiB,GAAGta,KAAWka,EAC/BpC,EAAewC,GACfzD,EAAoByD,GACpBF,EAAmBxC,EAAc0C,EAAkB5C,EAAW,EAG1D0C,EAAqBA,CAACxB,EAA6B0B,EAA4BC,KACnF,IAAIC,GAAe,EACd5B,GAAkD,IAA7BA,EAAkB9mB,SAC1C0oB,GAAe,GAEjB,IAAK,IAAI/lB,EAAI,EAAGA,EAAImkB,EAAkB9mB,OAAQ2C,IAAK,CACjD,IAAKmkB,EAAkB,GAAGnkB,MAA+D,KAAvDmkB,EAAkB,GAAGnkB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC3FK,GAAe,EACf,MAGF,IAAKD,EAAc,GAAG9lB,MAAQ8lB,EAAc,GAAG9lB,OAASqf,EAAAA,GAA+B,GAAGnE,MAAqD,KAApC2K,EAAiB,GAAG7lB,KAAK0lB,OAAe,CACjJK,GAAe,EACf,OAIJ1D,EAAqB0D,EAAa,EAG9BC,EAAWA,KACfjE,EAAO,GAEP,MAAMkE,EAAqBhD,EAAWmB,QAChCD,EAAoBhB,EAAaiB,QACjCyB,EAAmB1X,EAAYiW,QAErC6B,EAAmBpoB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MACxDiJ,EAAkBtmB,KAAK,IACvBgoB,EAAiBhoB,KAAK,IAEtBqlB,EAAc+C,GACd7C,EAAgBe,GAChBd,EAAewC,GAEf1D,EAAiB8D,GACjB/D,EAAaiC,GACb/B,EAAoByD,GACpBF,EAAmBxB,EAAmB0B,EAAkBI,GAExD5D,GAAqB,EAAM,EAGvB6D,EAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,EAAiB/a,SAInByW,EAAUzW,GACV+a,EAAiB/a,QAGnByW,EAAUzW,GACV+a,EAAiB/a,IAIf+a,EAAoB/a,IACxB,MAAM0a,EAAqBhD,EAAWmB,QAChCD,EAAoBhB,EAAaiB,QACjCyB,EAAmB1X,EAAYiW,aAES,IAAnC6B,EAAmB,GAAG1a,OAC3B0a,EAAmB5oB,OAAS,EAC9B4oB,EAAmBI,OAAO9a,EAAO,GAEjC0a,EAAmB,GAAK5G,EAAAA,GAA6B,GAAGnE,WAIf,IAAlCiJ,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,SAIiB,IAAjC0B,EAAiB,GAAGta,OACzBsa,EAAiBxoB,OAAS,EAC5BwoB,EAAiBQ,OAAO9a,EAAO,GAE/Bsa,EAAiB,GAAK,IAI1B3C,EAAc+C,GACd7C,EAAgBe,GAChBd,EAAewC,GAEf1D,EAAiB8D,GACjB/D,EAAaiC,GACb/B,EAAoByD,GAEpBF,EAAmBxB,EAAmBhW,EAAa8U,GACnD0C,EAAmBxC,EAAc0C,EAAkB5C,EAAW,GAGhEpD,EAAAA,EAAAA,YAAU,KACR,MAAM+G,EAA+B,GAC/BvC,EAAiC,GACjCwC,EAAgC,GAEtC,GAAItE,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAM+mB,EAAsBxE,EAAU,GAAGviB,KAAY,MAC/C8mB,EAAevE,EAAU,GAAGviB,KAAe,SAEjD,IAAIgnB,EAAgB,EAGlBA,EADEF,IAAiBzH,EAAAA,GAA6B,GAAGnE,KACnCqI,EAEAI,EAGlB,IAAIsD,EAAW,GAEfF,EAAUppB,KAAI,CAAC8nB,EAAMla,KAEjB0b,GADW,GAAT1b,GAAcA,EAAQyb,EACZ,IAAMvB,EAENA,KAIhBmB,EAAmB/oB,KAAKipB,GACxBzC,EAAqBxmB,KAAKopB,GAC1BJ,EAAoBhpB,KAAK0kB,EAAU,GAAGviB,KAAkB,aAG1DojB,EAAgBiB,GAChBhB,EAAewD,GAEf3E,EAAamC,GACbjC,EAAoByE,GAEpBlB,EAAmBtB,EAAsBwC,EAAqBD,QAE9DA,EAAmB/oB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MAG1DgI,EAAc0D,GAEdzE,EAAiByE,EAAmB,GACnC,CAACrE,IAEJ,MAqCM2F,EAAkBA,CAACf,EAAa5D,KACpC,MAAMkJ,EAAYnJ,EAAWmC,KAG7B,OAFmB2C,MAAMC,MAAM,KAAMD,MAAM7E,IAAY5lB,KAAI,SAAU2qB,EAAGtoB,GAAK,OAAOA,CAAG,IAErErC,KAAK4nB,GAEnBvc,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcwjB,EAAUjE,SAAS,KAAqB,IAAdjD,EAAkBkH,EAAU5e,UAAU,EAAG4e,EAAUpvB,OAAS,GAAK,KAAOkoB,EAAY,GAAK,IAAMkH,EAAUzS,QAAQ,IAAK,KAAOuL,EAAY,IAAMkH,EAAY,IAAMlH,EAAY,GAClOvc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOga,EAAanC,EAAa,GAAGgE,KAAQ5B,GAAU,YAC5C,SACVqC,KAAK,aACLJ,SAAW3Q,GA/QY4R,EAAC5R,EAAYtL,EAAega,EAAmBhC,KAChF,MAAMmF,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF,IAAIC,EAAY/R,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GACxDG,EAAoB1F,EAAa,GAAG5X,KACxC,GAAIsd,EAAmB,CAChBA,EAAkBC,SAAS,OAC9BD,GAAqB,IAAIrE,OAAOjB,EAAY,IAG9C,MAAMwF,EAAyBF,EAAkBve,MAAM,KAEvDye,EAAuB,GAAGxD,KAAeqD,EACzCA,EAAYG,EAAuBrE,KAAK,KAE1Cc,EAAsBoD,EAAWrd,EAAM,EAgQRkd,CAA2B5R,EAAOsQ,EAAK5B,EAAWhC,GACvEyE,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,QAKrF,EAGJ,OACE3f,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GAxWFvb,QAwW0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,aAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BA3ERke,SACS,IAAzBlE,EAAW,GAAGkE,KAChB,KAIPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,UACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW+F,UACtCrgB,IAAAA,cAAA,OAAKC,UAAU,kBACbD,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA6B,GAAGnE,KACvCqM,QAAStE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAAc,eACzE+H,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAC9EsM,SAAW3Q,GAAUmN,EAAoBnN,EAAOsQ,KAEjD9H,EAAAA,GAA6B,GAAGnE,MAGnClS,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA+B,GAAGnE,KACzCqM,QAAStE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA+B,GAAGnE,MAAc,eAC3E+H,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA+B,GAAGnE,MAChFsM,SAAW3Q,GAAUmN,EAAoBnN,EAAOsQ,KAEjD9H,EAAAA,GAA+B,GAAGnE,SA+CtBqO,CAAoBpC,GACpBlE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,OAAkBqI,EAAY,GAAK2E,EAAgBf,EAAK5D,GACxHN,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA+B,GAAGnE,OAAkByI,EAAgB,GAAKuE,EAAgBf,EAAKxD,GAC9HV,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA+B,GAAGnE,OAAkByI,EAAgB,GACnG3a,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWnV,aACtCnF,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO6C,EAAY,GAAGgZ,KAAM,YAClB,SACVS,KAAK,aACLJ,SAAW3Q,GAhRdoS,EAACpS,EAAYtL,KACxC,MAAMmd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF/C,EAAqB/O,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EA6QxB0d,CAAqBpS,EAAOsQ,GACjDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,QASlC,IAAAa,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAyB,QAAzB,EAAG6S,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,QAKpE,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,QAI5E,6IC/bV,MAoXA,EApX2DJ,IAAyQ,IAAxQ,WAAE+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,cAAE6H,EAAa,gBAAEC,EAAe,aAAE5H,EAAY,oBAAEE,EAAmB,qBAAEC,EAAoB,UAAEE,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,cAAEgP,EAAa,2BAAE7H,GAA4B1H,EAC9T,MAAO8S,EAAeC,IAAoBzY,EAAAA,EAAAA,UAAS,CAAC,MAC7C0Y,EAAiBC,IAAsB3Y,EAAAA,EAAAA,UAAS,CAAC,MACjD+N,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,MAC3CjH,EAAakV,IAAkBjO,EAAAA,EAAAA,UAAS,CAAC,KAE1CkO,EAAajE,EAAAA,GAAiC,GAAGnE,KACjDyI,EAAgB9B,EAAWlhB,MAAK6iB,GAA4B,iBAApBA,EAAKC,aAAgCC,cAQ7E,aAAEG,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MAoB1ByB,EAAwBA,CAACC,EAAcla,KAC3C,MAAM4Y,EAAoBhB,EAAaiB,QAEvC,UAAgD,IAAlCD,EAAkB,GAAG5Y,MACjC4Y,EAAkBtmB,KAAK,IAGzBsmB,EAAkB,GAAG5Y,KAAWka,EAChCtB,EAAkB,GAAG5Y,KAASma,OAE9BtC,EAAgBe,GAEhBjC,EAAaiC,GAEbwB,EAAmBxB,EAAmBhW,EAAY,EAS9CyX,EAAuBA,CAACH,EAAcla,KAC1C,IAAIsa,EAAmB1X,EAAYiW,QAEnC,UAA+C,IAAjCyB,EAAiB,GAAGta,MAChCsa,EAAiBhoB,KAAK,IAExBgoB,EAAiB,GAAGta,KAAWka,EAC/BpC,EAAewC,GACfzD,EAAoByD,GACpBF,EAAmBxC,EAAc0C,EAAiB,EAG9CF,EAAqBA,CAACxB,EAA6B0B,KACvD,IAAIE,GAAe,EAEnB,IAAK,IAAI/lB,EAAI,EAAGA,EAAImkB,EAAkB9mB,OAAQ2C,IAAK,CACjD,IAAKmkB,EAAkB,GAAGnkB,MAA+D,KAAvDmkB,EAAkB,GAAGnkB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC3FK,GAAe,EACf,MAID,MAAM8L,EAAyB1N,EAAkB,GAAGnkB,KAAKsK,MAAM,KAC/D,GAAIunB,EAAuBx0B,OAAO,GAAwC,KAArCw0B,EAAuB,GAAGnM,OAAe,CAC5EK,GAAe,EACf,MAGH,GAA0D,KAAtDF,EAAiB,GAAG7lB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC5DK,GAAe,EACf,OAIJ1D,EAAqB0D,EAAa,EAG9BC,EAAWA,KACfjE,EAAO,GAEP,MAAMsM,EAAqBT,EAAcxJ,QACnCkK,EAAuBR,EAAgB1J,QACvCD,EAAoBhB,EAAaiB,QACjCyB,EAAmB1X,EAAYiW,QAErCiK,EAAmBxwB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,IAC/FiE,EAAqBzwB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,IAC/FlG,EAAkBtmB,KAAK,IACvBgoB,EAAiBhoB,KAAK,IAEtBgwB,EAAiBQ,GACjBN,EAAmBO,GACnBlL,EAAgBe,GAChBd,EAAewC,GAEfgE,EAAcwE,GACdvE,EAAgBwE,GAChBpM,EAAaiC,GACb/B,EAAoByD,GAEpBxD,GAAqB,EAAM,EAGvB6D,EAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAA0B,eAEzFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAA0B,YAE9H4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,EAAiB/a,SAInByW,EAAUzW,GACV+a,EAAiB/a,QAGnByW,EAAUzW,GACV+a,EAAiB/a,IAIf+a,EAAoB/a,IACxB,MAAM8iB,EAAqBT,EAAcxJ,QACnCkK,EAAuBR,EAAgB1J,QACvCD,EAAoBhB,EAAaiB,QACjCyB,EAAmB1X,EAAYiW,aAES,IAAnCiK,EAAmB,GAAG9iB,OAC3B8iB,EAAmBhxB,OAAS,EAC9BgxB,EAAmBhI,OAAO9a,EAAO,GAEjC8iB,EAAmB,GAAKhE,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,SAInD,IAArCiE,EAAqB,GAAG/iB,OAC7B+iB,EAAqBjxB,OAAS,EAChCixB,EAAqBjI,OAAO9a,EAAO,GAEnC+iB,EAAqB,GAAKjE,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,SAItD,IAAlClG,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,SAIiB,IAAjC0B,EAAiB,GAAGta,OACzBsa,EAAiBxoB,OAAS,EAC5BwoB,EAAiBQ,OAAO9a,EAAO,GAE/Bsa,EAAiB,GAAK,IAI1BgI,EAAiBQ,GACjBN,EAAmBO,GACnBlL,EAAgBe,GAChBd,EAAewC,GAEfgE,EAAcwE,GACdvE,EAAgBwE,GAChBpM,EAAaiC,GACb/B,EAAoByD,GAEpBF,EAAmBxB,EAAmBhW,EAAY,GAIpD0R,EAAAA,EAAAA,YAAU,KACR,MAAM2O,EAA6B,GAC7BC,EAA+B,GAC/BpK,EAAiC,GACjCwC,EAAgC,GAEtC,GAAItE,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzCwuB,EAAiB3wB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,IAC7FoE,EAAmB5wB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,IAC7FxD,EAAoBhpB,KAAK0kB,EAAU,GAAGviB,KAAuB,aAC7D,MAAM+mB,EAAsBxE,EAAU,GAAGviB,KAAiB,MAE1D,IAAIinB,EAAW,GAEfF,EAAUppB,KAAI,CAAC8nB,EAAMla,KAEjB0b,GADW,GAAT1b,GAAcA,EAAQoY,EACZ,IAAM8B,EAENA,KAIhBpB,EAAqBxmB,KAAKopB,GAG5B7D,EAAgBiB,GAChBhB,EAAewD,GAEf3E,EAAamC,GACbjC,EAAoByE,GAEpBlB,EAAmBtB,EAAsBwC,QAEzC2H,EAAiB3wB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,IAC7FoE,EAAmB5wB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,IAG/FwD,EAAiBW,GACjBT,EAAmBU,GAEnB5E,EAAc2E,GACd1E,EAAgB2E,EAAmB,GAClC,CAAClM,IAEH,MAAM+C,EAAeA,CAACha,EAAeia,KACpC,GAAIja,EAAO,CACT,MAAMoB,EAAQpB,EAAMhB,MAAM,KAE1B,OAAOoC,EAAM,GAAG6Y,KAAe7Y,EAAM,GAAG6Y,KAAe,GAGzD,MAAO,EAAE,EAGLuM,EAA0BA,CAAC3K,EAAa5D,IACzB6E,MAAMC,MAAM,KAAMD,MAAM7E,IAAY5lB,KAAI,SAAU2qB,EAAGtoB,GAAK,OAAOA,CAAG,IAErErC,KAAK4nB,GAEfvc,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWiF,cACtCvf,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOga,EAAanC,EAAa,GAAGgE,KAAQ5B,GAAU,YAC5C,SACVqC,KAAK,aACLJ,SAAW3Q,GAlQQ4R,EAAC5R,EAAYtL,EAAega,EAAmBhC,KAChF,MAAMmF,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF,IAAIC,EAAY/R,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GACxDG,EAAoB1F,EAAa,GAAG5X,KAEnCsd,EAAkBC,SAAS,OAC9BD,GAAqB,IAAIrE,OAAOjB,EAAY,IAG9C,IAAIwF,EAAyBF,EAAkBve,MAAM,KAErDye,EAAuB,GAAGxD,KAAeqD,EACzCA,EAAYG,EAAuBrE,KAAK,KAExCc,EAAsBoD,EAAWrd,EAAM,EAmPJkd,CAA2B5R,EAAOsQ,EAAK5B,EAAWhC,GACvEyE,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,SAQvFoJ,EAAuB5K,GAEzBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWnV,aACtCnF,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO6C,EAAY,GAAGgZ,KAAM,YAClB,SACVS,KAAK,aACLJ,SAAW3Q,GArPQoS,EAACpS,EAAYtL,KACxC,MAAMmd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF/C,EAAqB/O,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAkP9C0d,CAAqBpS,EAAOsQ,GACjDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OAOvF,OACE3f,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GA5SFvb,QA4S0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,iBAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BACZ6oB,EAAwB3K,EAAKxD,GAC7BoO,EAAoB5K,IAK8B,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAyB,QAAzB,EAAG6S,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,QAKpE,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,6IClXV,MAocA,EApcgDJ,IAA2O,IAA1O,WAAE+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,cAAEC,EAAa,aAAEC,EAAY,qBAAEG,EAAoB,sBAAEC,EAAqB,UAAEC,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,2BAAEmH,GAA4B1H,EACrR,IAAI2H,EAA0BxhB,OAAO4gB,EAAW,GAAGa,cAAe,IAC9DC,EAA0Bd,EAAW,GAAGa,cAAe,GAC3D,MAAOzO,EAAa2O,IAAkBxN,EAAAA,EAAAA,UAAS,CAACqN,KACzCI,EAAYC,IAAiB1N,EAAAA,EAAAA,UAAS,CAAC,MACvC4c,EAAcC,IAAmB7c,EAAAA,EAAAA,UAAS,CAAC,MAC3C8c,EAAgBC,IAAqB/c,EAAAA,EAAAA,UAAS,CAACuN,IAEhDW,EAAajE,EAAAA,GAAsB,GAAGnE,MAQtC,aAAE2I,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MAc1BY,EAAuBA,CAACnkB,EAAe+K,KAC3C,MAAMqZ,EAAmB3Q,EAAYmQ,QAErC,UAA+C,IAAjCQ,EAAiB,GAAGrZ,MAChCqZ,EAAiB/mB,KAAK,GAGxB+mB,EAAiB,GAAGrZ,KAAW/K,EAE/BoiB,EAAegC,GAEf3C,EAAc2C,GAEdqM,EAAoBrM,EAAiB,EAGjCX,EAAsBA,CAAC3Y,EAAeC,KAC1C,MAAMuZ,EAAqBoN,EAAe9N,QAE1C,UAAiD,IAAnCU,EAAmB,GAAGvZ,MAClCuZ,EAAmBjnB,KAAK,IAG1BinB,EAAmB,GAAGvZ,KAAWD,EAEjC6mB,EAAkBrN,EAAmB,EAWjCK,EAAsBA,CAAC7Z,EAAeC,KAC1C,MAAM6Z,EAAkBvC,EAAWuB,QAEnC,UAA8C,IAAhCgB,EAAgB,GAAG7Z,MAC/B6Z,EAAgBvnB,KAAK,IAGvBunB,EAAgB,GAAG7Z,KAAWD,EAE9B8Z,EAAgB,GAAG7Z,KAASma,OAE5B5C,EAAcsC,EAAgB,EAS1BgN,EAAwBA,CAAC3M,EAAcla,KAC3C,MAAM8mB,EAAoBL,EAAa5N,QAEvC,UAAgD,IAAlCiO,EAAkB,GAAG9mB,MACjC8mB,EAAkBx0B,KAAK,IAGzBw0B,EAAkB,GAAG9mB,KAAWka,EAEhC4M,EAAkB,GAAG9mB,KAASma,OAE9BuM,EAAgBI,GAEhBnQ,EAAamQ,GAEb1M,EAAmB0M,EAAkB,EAGjCC,EAAarN,IAAgCC,MAAMD,GAEnDU,EAAsB0M,IAC1B,IAAItM,GAAe,EAEnB,IAAK,IAAI/lB,EAAI,EAAGA,EAAIqyB,EAAkBh1B,OAAQ2C,IAC5C,GAAyC,KAArCqyB,EAAkB,GAAGryB,KAAK0lB,OAAe,CAC3CK,GAAe,EACf,MAIJ1D,EAAqB0D,EAAa,EAG9BkL,EAAuBrM,IAC3B,IAAIsM,GAAgB,EAEpB,IAAK,IAAIlxB,EAAI,EAAGA,EAAI4kB,EAAiBvnB,OAAQ2C,IAC3C,GAAgC,GAA5B4kB,EAAiB,GAAG5kB,KAAW,CACjCkxB,GAAgB,EAChB,MAIJ5O,EAAsB4O,EAAc,EAGhClL,EAAWA,KACfjE,EAAO,GAEP,MAAMgD,EAAUlD,EAAWlhB,MAAKokB,GAAkC,WAAvBA,EAAQtB,aAE7CmB,EAAmB3Q,EAAYmQ,QAC/BU,EAAqBoN,EAAe9N,QACpCiO,EAAoBL,EAAa5N,QAEvCQ,EAAiB/mB,KAAK+C,SAASmkB,EAASrC,cAAe,KACvD2P,EAAkBx0B,KAAK,IACvBinB,EAAmBjnB,KAAKknB,EAASrC,cAAe,IAEhDE,EAAegC,GACfqN,EAAgBI,GAChBF,EAAkBrN,GAElB7C,EAAc2C,GACd1C,EAAamQ,GAEbhQ,GAAqB,GACrBC,GAAsB,EAAM,EAGxB4D,EAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,EAAiB/a,SAInByW,EAAUzW,GACV+a,EAAiB/a,QAGnByW,EAAUzW,GACV+a,EAAiB/a,IAIf+a,EAAoB/a,IACxB,MAAMwZ,EAAUlD,EAAWlhB,MAAKokB,GAAkC,WAAvBA,EAAQtB,aAE7CmB,EAAmB3Q,EAAYmQ,QAC/BgB,EAAkBvC,EAAWuB,QAC7BiO,EAAoBL,EAAa5N,QACjCU,EAAqBoN,EAAe9N,aAEE,IAAjCQ,EAAiB,GAAGrZ,OACzBqZ,EAAiBvnB,OAAS,EAC5BunB,EAAiByB,OAAO9a,EAAO,GAE/BqZ,EAAiB,GAAKhkB,SAASmkB,EAASrC,cAAe,UAIhB,IAAhC0C,EAAgB,GAAG7Z,OACxB6Z,EAAgB/nB,OAAS,EAC3B+nB,EAAgBiB,OAAO9a,EAAO,GAE9B6Z,EAAgB,GAAK,SAIoB,IAAlCiN,EAAkB,GAAG9mB,OAC1B8mB,EAAkBh1B,OAAS,EAC7Bg1B,EAAkBhM,OAAO9a,EAAO,GAEhC8mB,EAAkB,GAAK,SAImB,IAAnCvN,EAAmB,GAAGvZ,OAC3BuZ,EAAmBznB,OAAS,EAC9BynB,EAAmBuB,OAAO9a,EAAO,GAEjCuZ,EAAmB,GAAKC,EAASrC,cAAe,IAIpDE,EAAegC,GACf9B,EAAcsC,GACd6M,EAAgBI,GAChBF,EAAkBrN,GAElB5C,EAAamQ,GACbpQ,EAAc2C,GAEde,EAAmB0M,GACnBpB,EAAoBrM,EAAiB,GAGvC/E,EAAAA,EAAAA,YAAU,KACR,MAAMkF,EAAUlD,EAAWlhB,MAAKokB,GAAkC,WAAvBA,EAAQtB,aAEnD,IAAI8C,EAAmBtlB,OAAO8jB,aAAO,EAAPA,EAASrC,cAAe,IAClD8D,EAAoBxX,OAAO+V,aAAO,EAAPA,EAASrC,cAAe,IAEvD,MAAMiE,EAAsC,GACtCD,EAA+B,GAC/B6L,EAAiC,GACjChB,EAAmC,GAEzC,GAAIhP,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,IAAIkU,EAA4BqO,EAAU,GAAGviB,KAAwB,kBAErE,OAAQkU,GACN,KAAK,EACHA,EAAoBjT,OAAOslB,GAC3BgL,EAAuB1zB,KAAK2oB,GAC5BE,EAAmB7oB,KAAK,IACxB,MAEF,KAAK,EACH0zB,EAAuB1zB,KAAK,KAC5B6oB,EAAmB7oB,KAAK,IACxB,MAEF,KAAK,EACH0zB,EAAuB1zB,KAAK,KAC5B6oB,EAAmB7oB,KAAK,IACxB,MAEF,KAAK,GACH0zB,EAAuB1zB,KAAK,MAC5B6oB,EAAmB7oB,KAAK,IACxB,MAEF,KAAK,GACH0zB,EAAuB1zB,KAAK,MAC5B6oB,EAAmB7oB,KAAK,IACxB,MAEF,QACMqW,GACFqd,EAAuB1zB,KAAKwhB,EAAAA,GAAoB,GAAGnE,MACnDwL,EAAmB7oB,KAAKqW,EAAkBrS,cAE1CqS,EAAoBjT,OAAOslB,GAC3BgL,EAAuB1zB,KAAK2oB,GAC5BE,EAAmB7oB,KAAK,KAK9B00B,EAAqB10B,KAAK0kB,EAAU,GAAGviB,KAAY,MAAE,IACrD2mB,EAA0B9oB,KAAKqW,GAIjC+d,EAAgBM,GAEhBrQ,EAAaqQ,GAEb5M,EAAmB4M,QAEnBhB,EAAuB1zB,KAAK2oB,GAC5BG,EAA0B9oB,KAAK0oB,GAC/BG,EAAmB7oB,KAAK,IAG1Bs0B,EAAkBZ,GAClB3O,EAAe+D,GACf7D,EAAc4D,GAEdzE,EAAc0E,GAEdsK,EAAoBtK,EAA0B,GAC7C,CAACpE,IAEJ,MAAMoP,EAAcxK,GAEhBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,qBAAqBqa,EAAWmC,MAC7Czc,IAAAA,cAAA,SACEse,KAAK,OACLhc,MAAO0mB,EAAa,GAAG7K,KACvBO,UAAU,OAAM,YACN,SACVE,KAAK,aACLJ,SAAW3Q,GA3PM+a,EAAC/a,EAAYtL,KACtC,IAAImd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAElFyJ,EAAsBvb,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAwP/CqmB,CAAmB/a,EAAOsQ,GAC/Ca,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OAOjFzB,EAAoBA,CAACnC,EAAiBoC,IACtCpC,EAAQrC,cAER1Z,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,qBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW8D,QACrCrC,EAAQrC,cAAc/kB,KAAK0pB,GAExBre,IAAAA,cAAA,SAAOC,UAAU,gBACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+b,EACPE,QAAS2K,EAAe,GAAG/K,OAAWnY,OAAOqY,GAAO,eACtC6K,EAAe,GAAG/K,OAAWnY,OAAOqY,GAClDG,SAAW3Q,GAjVD4Q,EAAC5Q,EAAYtL,KACvC0Y,EAAoBpN,EAAMqN,OAAO5Y,MAAOC,GAEpCsL,EAAMqN,OAAO5Y,QAAU+T,EAAAA,GAAoB,GAAGnE,MAChDiK,EAAoB,IAAK5Z,GACzBoZ,EAAqB,EAAGpZ,KAExBoZ,EAAqB1jB,OAAO4V,EAAMqN,OAAO5Y,OAAQC,GACjD4Z,EAAoB,GAAI5Z,KAyUWkc,CAAoB5Q,EAAOsQ,KAGjDE,IAAWhI,EAAAA,GAAoB,GAAGnE,KAAgB,GAAK,IAAKmM,EAE5DA,IAAWhI,EAAAA,GAAoB,GAAGnE,KAAgB,KACjDlS,IAAAA,cAAA,SACEse,KAAK,OACLhc,MAAOuX,EAAW,GAAGsE,KACrBO,UAAU,UACVC,QAAQ,SAAQ,YACN,SACVC,KAAK,aAAY,gBACF,GAAE,gBACF,IAAK,gBACL3mB,OAAO4hB,EAAW,GAAGsE,MACpCK,SAAW3Q,GAzTRmO,EAACnO,EAAYtL,KAC9B+mB,EAAUzb,EAAMqN,OAAO5Y,SACzB6Z,EAAoBtO,EAAMqN,OAAO5Y,MAAOC,GACxC0Y,EAAoB5E,EAAAA,GAAoB,GAAGnE,KAAe3P,GAC1DoZ,EAAqB1jB,OAAO4V,EAAMqN,OAAO5Y,OAAQC,KAqTZyZ,CAAenO,EAAOsQ,GAC3CU,WAAahR,IAAiB,QAAQiR,KAAKjR,EAAM+K,MAAQ/K,EAAMkR,kBAC/DC,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,yCAUrB,KAGT,OACED,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GA3XFvb,QA2X0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IACTne,IAAAA,cAAA,OAAKC,UAAU,eACpBD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,WAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BACZ0oB,EAAWxK,GACXD,EAAkBnC,EAASoC,IAKuB,IAAAqC,EAAAC,EAAzD,IAAK7hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IACI,KAAb,QAAtBugB,EAAA1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,YAAgD,IAA1BkT,EAAY,GAAGkT,KAAyBlT,EAAY,GAAGkT,KAAS,IAA4B,QAAzBsC,EAAG3N,EAAgB9c,cAAM,IAAAyqB,OAAA,EAAtBA,EAAwB1oB,QAMtJ,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,MAKlE,UAOdvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,6JC1bV,MAuiBA,EAviB0DJ,IAAiT,IAAhT,WAAE+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,mBAAE4M,EAAkB,cAAE/E,EAAa,gBAAEC,EAAe,aAAE5H,EAAY,iBAAEC,EAAgB,uBAAE0M,EAAsB,qBAAExM,EAAoB,UAAEE,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,cAAEgP,EAAa,2BAAC7H,GAA4B1H,EACrW,MAAO+V,EAAaC,IAAkB1b,EAAAA,EAAAA,UAAS,CAAC,MACzCod,EAAiBC,IAAcrd,EAAAA,EAAAA,UAAS,CAAC,MACzC6N,EAAYC,IAAiB9N,EAAAA,EAAAA,UAAS,CAACiK,EAAAA,GAA6B,GAAGnE,QACvEiI,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,MAE3C0Z,EAAaC,IAAiB3Z,EAAAA,EAAAA,UAAS,CAAC,IAEzCkO,EAAajE,EAAAA,GAAgC,GAAGnE,KAChDqI,EAAY1B,EAAWlhB,MAAK6iB,GAA4B,YAApBA,EAAKkG,aAA2BhG,aACpE7R,EAAegQ,EAAWlhB,MAAK6iB,GAA4B,YAApBA,EAAKkG,aAA2BuB,eAQvE,aAAEpH,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MAgB1BC,EAAsBA,CAACnN,EAAYtL,KACvC0Y,EAAoBpN,EAAMqN,OAAO5Y,MAAOC,GAExC,IAAI4Y,EAAoBhB,EAAaiB,QACjCC,EAAuBF,EAAkB,GAAG5Y,KAC5C+Y,EAAoBD,EAAqB/Z,MAAM,KAEnD,GAAIuM,EAAMqN,OAAO5Y,QAAU+T,EAAAA,GAA6B,GAAGnE,KACzD,GAAIoJ,EAAkBjnB,OAASkmB,EAC7Bc,GAAwB,IAAIG,OAAOjB,EAAYe,EAAkBjnB,OAAS,OACrE,CACL,KAAOinB,EAAkBjnB,OAASkmB,GAChCe,EAAkBG,MAEpBJ,EAAuBC,EAAkBI,KAAK,UAGhD,GAAIJ,EAAkBjnB,OAASwU,EAC7BwS,GAAwB,IAAIG,OAAO3S,EAAeyS,EAAkBjnB,OAAS,OACxE,CACL,KAAOinB,EAAkBjnB,OAASwU,GAChCyS,EAAkBG,MAEpBJ,EAAuBC,EAAkBI,KAAK,KAIlDP,EAAkB,GAAG5Y,KAAW8Y,EAEhCjB,EAAgBe,GAEhBjC,EAAaiC,EAAkB,EAG3BF,EAAsBA,CAAC3Y,EAAeC,KAC1C,MAAM8Z,EAAkBpC,EAAWmB,QAEnC,UAA8C,IAAhCiB,EAAgB,GAAG9Z,MAC/B8Z,EAAgBxnB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MAGvDmK,EAAgB,GAAG9Z,KAAWD,EAE9B4X,EAAcmC,GAEdlD,EAAiBkD,EAAgB,EAG7BC,EAAeA,CAACha,EAAeia,KACnC,GAAIja,EAAO,CACT,MAAMoB,EAAQpB,EAAMhB,MAAM,KAE1B,OAAOoC,EAAM,GAAG6Y,KAAe7Y,EAAM,GAAG6Y,KAAe,GAGzD,MAAO,EAAE,EAqBLC,EAAwBA,CAACC,EAAcla,KAC3C,MAAM4Y,EAAoBhB,EAAaiB,QAEvC,UAAgD,IAAlCD,EAAkB,GAAG5Y,MACjC4Y,EAAkBtmB,KAAK,IAGzBsmB,EAAkB,GAAG5Y,KAAWka,EAEhCtB,EAAkB,GAAG5Y,KAASma,OAE9BtC,EAAgBe,GAEhBjC,EAAaiC,GAEbwB,EAAmBxB,EAAkB,EAGjC6K,EAAyBA,CAACnY,EAAYtL,KAC1C,IAAI0jB,EAA0B,GAC1BC,EAAwB,GAE5B,IAAK,IAAIlvB,EAAI,EAAGA,EAAI6W,EAAMxZ,SAAU2C,EAClCivB,GAAmBpY,EAAM,GAAG7W,KAAKqB,OAASrB,GAAK6W,EAAMxZ,OAAS,EAAI,IAAM,IACxE6xB,GAAiBrY,EAAM,GAAG7W,KAAKsL,OAAStL,GAAK6W,EAAMxZ,OAAS,EAAI,IAAM,IAGxE,MAAM8xB,EAAmB0B,EAAYzM,QAC/BgL,EAAeoD,EAAgBpO,QAErC,UAA+C,IAAjC+K,EAAiB,GAAG5jB,MAChC4jB,EAAiBtxB,KAAK,IAGxB,UAA2C,IAA7BuxB,EAAa,GAAG7jB,MAC5B6jB,EAAavxB,KAAK,IAGpBsxB,EAAiB,GAAG5jB,KAAW0jB,EAC/BG,EAAa,GAAG7jB,KAAW2jB,EAE3B4B,EAAe3B,GACfsD,EAAWrD,GAEXvF,EAAcsF,GACdrF,EAAgBsF,GAvIIC,EAAC7b,EAAejI,KACpC,MAAMggB,EAAauD,EAAY1K,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,GAGlB0tB,EAAW,GAAGhgB,KAAWiI,EAEzBub,EAAcxD,GAEdqD,EAAmBrD,EAAW,EA8H9B8D,CAAcxY,EAAMxZ,OAAQkO,GAE5B+jB,EAAoBH,EAAiB,EAGjCI,EAAsBhkB,IAC1B,MAAMikB,EAAmD,GAEzD,GAAIqB,EAAYxzB,OAAS,EAAG,CAC1B,MAAM8xB,EAAmB0B,EAAYzM,QAC/BgL,EAAeoD,EAAgBpO,QAErC,QAA4C,IAAjC+K,EAAiB,GAAG5jB,MACQ,KAAjC4jB,EAAiB,GAAG5jB,KAAiB,CACvC,MAAMkkB,EAAaN,EAAiB,GAAG5jB,KAASjB,MAAM,KAChDolB,EAAWN,EAAa,GAAG7jB,KAASjB,MAAM,KAEhD,IAAK,IAAItK,EAAI,EAAGA,EAAIyvB,EAAWpyB,SAAU2C,EACvCwvB,EAAa3xB,KAAK,CAAEyN,MAAOokB,EAAS,GAAG1vB,KAAMqB,MAAOouB,EAAW,GAAGzvB,QAM1E,OAAOwvB,CAAY,EAGfF,EAAuBK,IAC3B,IAAIC,EAAiBD,EAAmBtyB,OAAS,EAEjD,IAAK,IAAI2C,EAAI,EAAGA,EAAI2vB,EAAmBtyB,OAAQ2C,IAC7C,GAA4D,KAAxD2vB,EAAmB,GAAG3vB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC9DkK,GAAiB,EAAO,MAI5Bf,EAAuBe,EAAe,EAGlCjK,EAAsBxB,IAC1B,IAAI4B,EAAe5B,EAAkB9mB,OAAS,EAE9C,IAAK,IAAI2C,EAAI,EAAGA,EAAImkB,EAAkB9mB,OAAQ2C,IAC5C,GAA2D,KAAvDmkB,EAAkB,GAAGnkB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC7DK,GAAe,EAAO,MAI1B1D,EAAqB0D,EAAa,EAS9BC,EAAWA,KACfjE,EAAO,GAEP,MAAMoP,EAAkBrC,EAAY1K,QAC9B8H,EAAkB2E,EAAYzM,QAC9B+H,EAAgBqG,EAAgBpO,QAChC6B,EAAqBhD,EAAWmB,QAChCD,EAAoBhB,EAAaiB,QAEvC+M,EAAgBtzB,KAAK,GACrBquB,EAAgBruB,KAAK,IACrBsuB,EAActuB,KAAK,IACnBooB,EAAmBpoB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MACxDiJ,EAAkBtmB,KAAK,IAEvBkxB,EAAcoC,GACdL,EAAe5E,GACfuG,EAAWtG,GACXjJ,EAAc+C,GACd7C,EAAgBe,GAEhByK,EAAmBuC,GACnBtH,EAAcqC,GACdpC,EAAgBqC,GAChBhK,EAAiB8D,GACjB/D,EAAaiC,GAEb0K,GAAuB,GACvBxM,GAAqB,EAAM,EAGvB6D,EAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,EAAiB/a,SAInByW,EAAUzW,GACV+a,EAAiB/a,QAGnByW,EAAUzW,GACV+a,EAAiB/a,IAIf+a,EAAoB/a,IACxB,MAAM4lB,EAAkBrC,EAAY1K,QAC9BuL,EAAqBkB,EAAYzM,QACjCsO,EAAuBF,EAAgBpO,QACvC6B,EAAqBhD,EAAWmB,QAChCD,EAAoBhB,EAAaiB,aAEI,IAAhC+M,EAAgB,GAAG5lB,OACxB4lB,EAAgB9zB,OAAS,EAC3B8zB,EAAgB9K,OAAO9a,EAAO,GAE9B4lB,EAAgB,GAAK,EAGvBpC,EAAcoC,GAEdvC,EAAmBuC,SAGyB,IAAnCxB,EAAmB,GAAGpkB,OAC3BokB,EAAmBtyB,OAAS,EAC9BsyB,EAAmBtJ,OAAO9a,EAAO,GAEjCokB,EAAmB,GAAK,SAIoB,IAArC+C,EAAqB,GAAGnnB,OAC7BmnB,EAAqBr1B,OAAS,EAChCq1B,EAAqBrM,OAAO9a,EAAO,GAEnCmnB,EAAqB,GAAK,SAIgB,IAAnCzM,EAAmB,GAAG1a,OAC3B0a,EAAmB5oB,OAAS,EAC9B4oB,EAAmBI,OAAO9a,EAAO,GAEjC0a,EAAmB,GAAK5G,EAAAA,GAA6B,GAAGnE,WAIf,IAAlCiJ,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,IAI3B2M,EAAenB,GACf8C,EAAWC,GACXxP,EAAc+C,GACd7C,EAAgBe,GAEhB0F,EAAc8F,GACd7F,EAAgB4I,GAChBvQ,EAAiB8D,GACjB/D,EAAaiC,GAEbmL,EAAoBK,GACpBhK,EAAmBxB,EAAkB,GAGvCtE,EAAAA,EAAAA,YAAU,KACR,MAAMsM,EAA0B,GAC1BD,EAA4B,GAC5B2D,EAA6B,GAC7BvE,EAAuB,GACvBc,EAA4B,GAElC,GAAI7J,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAM+mB,EAAsBxE,EAAU,GAAGviB,KAAY,MAC/C8mB,EAAevE,EAAU,GAAGviB,KAAe,SAC3CgnB,EAAgBF,IAAiBzH,EAAAA,GAA6B,GAAGnE,KAAgBqI,EAAY1R,EAEnG,IAAIoV,EAAW,GAEfF,EAAUppB,KAAI,CAAC8nB,EAAMla,KAEjB0b,GADY,IAAV1b,GAAeA,EAAQyb,EACb,IAAMvB,EAENA,KAIhB,MAAMqK,EAAoBvN,EAAU,GAAGviB,KAAgB,UAEvD6vB,EAAiBhyB,KAAKiyB,EAAUxlB,MAAM,KAAKjN,QAC3C6uB,EAAgBruB,KAAKiyB,GACrB3D,EAActuB,KAAK0kB,EAAU,GAAGviB,KAAc,SAC9CsrB,EAAWztB,KAAKopB,GAChBmF,EAAgBvuB,KAAKipB,GAGvB1D,EAAgBkI,GAEhBpJ,EAAaoJ,GAEb3F,EAAmB2F,QAEnBY,EAAgBruB,KAAK,IACrBsuB,EAActuB,KAAK,IACnBgyB,EAAiBhyB,KAAK,GACtBuuB,EAAgBvuB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MAGvDuX,EAAWtG,GACX2E,EAAe5E,GACf6C,EAAcc,GACd3M,EAAckJ,GAEdtC,EAAgBqC,GAChBtC,EAAcqC,GACd0C,EAAmBiB,GACnB1N,EAAiBiK,GAEjBkD,EAAoBpD,EAAgB,GACnC,CAAC3J,IAEJ,MA0DM2F,GAAkBA,CAACf,EAAa5D,KACpC,MAAMkJ,EAAYnJ,EAAWmC,KAG7B,OAFmB2C,MAAMC,MAAM,KAAMD,MAAM7E,IAAY5lB,KAAI,SAAU2qB,EAAGtoB,GAAK,OAAOA,CAAG,IAErErC,KAAK4nB,GAEnBvc,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcwjB,EAAUjE,SAAS,KAAqB,IAAdjD,EAAkBkH,EAAU5e,UAAU,EAAG4e,EAAUpvB,OAAS,GAAK,KAAOkoB,EAAY,GAAK,IAAMkH,EAAUzS,QAAQ,IAAK,KAAOuL,EAAY,IAAMkH,EAAY,IAAMlH,EAAY,GAClOvc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOga,EAAanC,EAAa,GAAGgE,KAAQ5B,GAAU,YAC5C,SACVqC,KAAK,aACLJ,SAAW3Q,GA7XY4R,EAAC5R,EAAYtL,EAAega,EAAmBhC,KAChF,MAAMmF,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF,IAAIC,EAAY/R,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GACxDG,EAAoB1F,EAAa,GAAG5X,KAEnCsd,EAAkBC,SAAS,OAC9BD,GAAqB,IAAIrE,OAAOjB,EAAY,IAG9C,MAAMwF,EAAyBF,EAAkBve,MAAM,KAEvDye,EAAuB,GAAGxD,KAAeqD,EACzCA,EAAYG,EAAuBrE,KAAK,KAExCc,EAAsBoD,EAAWrd,EAAM,EA8WRkd,CAA2B5R,EAAOsQ,EAAK5B,EAAWhC,GACvEyE,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,QAKrF,EAGJ,OACE3f,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GA1dFvb,QA0d0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,aAAvBwZ,EAAQ2E,WACV,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,8BAhGRke,IAEzBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWyM,WACtC/mB,IAAAA,cAACgnB,EAAAA,GAAM,CACLC,SAAO,EACP3kB,MAAOikB,EAAmBpI,GAC1B+I,mBAAmB,EACnBC,QAAS9F,EAAc1sB,KAAIkZ,IAAmB,CAAEvL,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,SACvF2Q,SAAU3Q,GAASmY,EAAuBnY,EAAOsQ,GACjDiJ,gBAAgB,cAChBnnB,UAAU,SACVonB,iBAAkBA,IAAM,KACxBC,mBAAmB,MAmFJC,CAAoBpJ,GA5EhBA,SACS,IAAzBlE,EAAW,GAAGkE,KAChB,KAIPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,UACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW+F,UACtCrgB,IAAAA,cAAA,OAAKC,UAAU,kBACbD,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA6B,GAAGnE,KACvCqM,QAAStE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAAc,eACzE+H,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAC9EsM,SAAW3Q,GAAUmN,EAAoBnN,EAAOsQ,KAEjD9H,EAAAA,GAA6B,GAAGnE,MAGnClS,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA8B,GAAGnE,KACxCqM,QAAStE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,MAAc,eAC1E+H,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,MAC/EsM,SAAW3Q,GAAUmN,EAAoBnN,EAAOsQ,KAEjD9H,EAAAA,GAA8B,GAAGnE,SAgDrBqO,CAAoBpC,GACpBlE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,OAAkBqI,EAAY,GAAK2E,GAAgBf,EAAK5D,GACxHN,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,OAAkBrJ,EAAe,GAAKqW,GAAgBf,EAAKtV,IAK1E,IAAA2X,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,KAAyB,QAAtBugB,EAAA1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,OA5SjDwK,IACrBslB,EAAYxzB,OAAS,QAAwC,IAA5BwzB,EAAY,GAAGtlB,KAA2BslB,EAAY,GAAGtlB,KAASjB,MAAM,KAAKjN,OAAS,EA2SxCmzB,CAA4BrJ,KAKzG,GAA2B,WAAvBpC,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,gJCniBV,MA2dA,EA3dgEJ,IACmP,IADlP,WAC/D+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,mBAAE4M,EAAkB,cAAE/E,EAAa,gBAAEC,EAAe,aAAE5H,EAAY,oBAAEE,EAAmB,uBAAEyM,EAAsB,qBAAExM,EAAoB,UAAEE,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,cAAEgP,EAAa,2BAAC7H,GAA4B1H,EAC7S,MAAO+V,EAAaC,IAAkB1b,EAAAA,EAAAA,UAAS,CAAC,MACzC+N,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,MAC3Cod,EAAiBC,IAAcrd,EAAAA,EAAAA,UAAS,CAAC,MACzCjH,EAAakV,IAAkBjO,EAAAA,EAAAA,UAAS,CAAC,MAEzC0Z,EAAaC,IAAiB3Z,EAAAA,EAAAA,UAAS,CAAC,IAEzCkO,EAAajE,EAAAA,GAAsC,GAAGnE,MAQtD,aAAE2I,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MAgB1BiL,EAAyBA,CAACnY,EAAYtL,KAC1C,IAAI0jB,EAA0B,GAC1BC,EAAwB,GAE5B,IAAK,IAAIlvB,EAAI,EAAGA,EAAI6W,EAAMxZ,SAAU2C,EAClCivB,GAAmBpY,EAAM,GAAG7W,KAAKqB,OAASrB,GAAK6W,EAAMxZ,OAAS,EAAI,IAAM,IACxE6xB,GAAiBrY,EAAM,GAAG7W,KAAKsL,OAAStL,GAAK6W,EAAMxZ,OAAS,EAAI,IAAM,IAGxE,MAAM8xB,EAAmB0B,EAAYzM,QAC/BgL,EAAeoD,EAAgBpO,QAErC,UAA+C,IAAjC+K,EAAiB,GAAG5jB,MAChC4jB,EAAiBtxB,KAAK,IAGxB,UAA2C,IAA7BuxB,EAAa,GAAG7jB,MAC5B6jB,EAAavxB,KAAK,IAGpBsxB,EAAiB,GAAG5jB,KAAW0jB,EAC/BG,EAAa,GAAG7jB,KAAW2jB,EAE3B4B,EAAe3B,GACfsD,EAAWrD,GAEXvF,EAAcsF,GACdrF,EAAgBsF,GAzCIC,EAAC7b,EAAejI,KACpC,MAAMggB,EAAauD,EAAY1K,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,GAGlB0tB,EAAW,GAAGhgB,KAAWiI,EAEzBub,EAAcxD,GAEdqD,EAAmBrD,EAAW,EAgC9B8D,CAAcxY,EAAMxZ,OAAQkO,GAE5B+jB,EAAoBH,EAAiB,EAGjCI,EAAsBhkB,IAC1B,MAAMikB,EAAmD,GAEzD,GAAIqB,EAAYxzB,OAAS,EAAG,CAC1B,MAAM8xB,EAAmB0B,EAAYzM,QAC/BgL,EAAeoD,EAAgBpO,QAErC,QAA4C,IAAjC+K,EAAiB,GAAG5jB,MACQ,KAAjC4jB,EAAiB,GAAG5jB,KAAiB,CACvC,MAAMkkB,EAAaN,EAAiB,GAAG5jB,KAASjB,MAAM,KAChDolB,EAAWN,EAAa,GAAG7jB,KAASjB,MAAM,KAEhD,IAAK,IAAItK,EAAI,EAAGA,EAAIyvB,EAAWpyB,SAAU2C,EACvCwvB,EAAa3xB,KAAK,CAAEyN,MAAOokB,EAAS,GAAG1vB,KAAMqB,MAAOouB,EAAW,GAAGzvB,QAM1E,OAAOwvB,CAAY,EASfhK,EAAwBA,CAACC,EAAcla,KAC3C,MAAM4Y,EAAoBhB,EAAaiB,QAEvC,UAAgD,IAAlCD,EAAkB,GAAG5Y,MACjC4Y,EAAkBtmB,KAAK,IAGzBsmB,EAAkB,GAAG5Y,KAAWka,EAEhCtB,EAAkB,GAAG5Y,KAASma,OAE9BtC,EAAgBe,GAEhBjC,EAAaiC,GAEbwB,EAAmBxB,EAAmBhW,EAAY,EAS9CyX,EAAuBA,CAACH,EAAcla,KAC1C,MAAMsa,EAAmB1X,EAAYiW,QAErC,UAA+C,IAAjCyB,EAAiB,GAAGta,MAChCsa,EAAiBhoB,KAAK,IAGxBgoB,EAAiB,GAAGta,KAAWka,EAE/BI,EAAiB,GAAGta,KAASma,OAE7BrC,EAAewC,GAEfzD,EAAoByD,GAEpBF,EAAmBxC,EAAc0C,EAAiB,EAG9CyJ,EAAuBK,IAC3B,IAAIC,EAAiBD,EAAmBtyB,OAAS,EAEjD,IAAK,IAAI2C,EAAI,EAAGA,EAAI2vB,EAAmBtyB,OAAQ2C,IAC7C,GAA4D,KAAxD2vB,EAAmB,GAAG3vB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC9DkK,GAAiB,EACjB,MAIJf,EAAuBe,EAAe,EAGlCjK,EAAqBA,CAACxB,EAA6B0B,KACvD,IAAIE,EAAe5B,EAAkB9mB,OAAS,EAE9C,IAAK,IAAI2C,EAAI,EAAGA,EAAImkB,EAAkB9mB,OAAQ2C,IAAK,CACjD,GAAImkB,EAAkB,GAAGnkB,MAA+D,KAAvDmkB,EAAkB,GAAGnkB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC1FK,GAAe,EACf,MAGF,GAAIF,EAAiB,GAAG7lB,MAA8D,KAAtD6lB,EAAiB,GAAG7lB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CACxFK,GAAe,EACf,OAIJ1D,EAAqB0D,EAAa,EAS9BC,EAAWA,KACfjE,EAAO,GAEP,MAAMoP,EAAkBrC,EAAY1K,QAC9BuL,EAAqBkB,EAAYzM,QACjCsO,EAAuBF,EAAgBpO,QACvCD,EAAoBhB,EAAaiB,QACjCyB,EAAmB1X,EAAYiW,QAErC+M,EAAgBtzB,KAAK,GACrB8xB,EAAmB9xB,KAAK,IACxB60B,EAAqB70B,KAAK,IAC1BsmB,EAAkBtmB,KAAK,IACvBgoB,EAAiBhoB,KAAK,IAEtBkxB,EAAcoC,GACdL,EAAenB,GACf8C,EAAWC,GACXtP,EAAgBe,GAChBd,EAAewC,GAEf+I,EAAmBuC,GACnBtH,EAAc8F,GACd7F,EAAgB4I,GAChBxQ,EAAaiC,GACb/B,EAAoByD,GAEpBgJ,GAAuB,GACvBxM,GAAqB,EAAM,EAGvB6D,EAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,EAAiB/a,SAInByW,EAAUzW,GACV+a,EAAiB/a,QAGnByW,EAAUzW,GACV+a,EAAiB/a,IAIf+a,EAAoB/a,IACxB,MAAM4lB,EAAkBrC,EAAY1K,QAC9BuL,EAAqBkB,EAAYzM,QACjCsO,EAAuBF,EAAgBpO,QACvCD,EAAoBhB,EAAaiB,QACjCyB,EAAmB1X,EAAYiW,aAEM,IAAhC+M,EAAgB,GAAG5lB,OACxB4lB,EAAgB9zB,OAAS,EAC3B8zB,EAAgB9K,OAAO9a,EAAO,GAE9B4lB,EAAgB,GAAK,EAGvBpC,EAAcoC,GAEdvC,EAAmBuC,SAGyB,IAAnCxB,EAAmB,GAAGpkB,OAC3BokB,EAAmBtyB,OAAS,EAC9BsyB,EAAmBtJ,OAAO9a,EAAO,GAEjCokB,EAAmB,GAAK,SAIoB,IAArC+C,EAAqB,GAAGnnB,OAC7BmnB,EAAqBr1B,OAAS,EAChCq1B,EAAqBrM,OAAO9a,EAAO,GAEnCmnB,EAAqB,GAAK,SAIe,IAAlCvO,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,SAIiB,IAAjC0B,EAAiB,GAAGta,OACzBsa,EAAiBxoB,OAAS,EAC5BwoB,EAAiBQ,OAAO9a,EAAO,GAE/Bsa,EAAiB,GAAK,IAI1BiL,EAAenB,GACf8C,EAAWC,GACXtP,EAAgBe,GAChBd,EAAewC,GAEfgE,EAAc8F,GACd7F,EAAgB4I,GAChBxQ,EAAaiC,GACb/B,EAAoByD,GAEpByJ,EAAoBK,GACpBhK,EAAmBxB,EAAmBhW,GACtCwX,EAAmBxC,EAAc0C,EAAiB,GAGpDhG,EAAAA,EAAAA,YAAU,KACR,MAAMgQ,EAA6B,GAC7B3D,EAA4B,GAC5BC,EAA0B,GAC1BtF,EAAgC,GAChCyE,EAAuB,GAE7B,GAAI/I,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAM8vB,EAAoBvN,EAAU,GAAGviB,KAAgB,UAEvD6vB,EAAiBhyB,KAAKiyB,EAAUxlB,MAAM,KAAKjN,QAC3C6uB,EAAgBruB,KAAKiyB,GACrB3D,EAActuB,KAAK0kB,EAAU,GAAGviB,KAAc,SAC9CsrB,EAAWztB,KAAK0kB,EAAU,GAAGviB,KAAY,MAAE,IAC3C6mB,EAAoBhpB,KAAK0kB,EAAU,GAAGviB,KAAkB,aAG1DojB,EAAgBkI,GAChBjI,EAAewD,GAEf3E,EAAaoJ,GACblJ,EAAoByE,GAEpBlB,EAAmB2F,EAAYzE,QAE/BgJ,EAAiBhyB,KAAK,GACtBquB,EAAgBruB,KAAK,IACrBsuB,EAActuB,KAAK,IAGrBkxB,EAAcc,GACdiB,EAAe5E,GACfuG,EAAWtG,GAEXyC,EAAmBiB,GACnBhG,EAAcqC,GACdpC,EAAgBqC,GAEhBmD,EAAoBpD,EAAgB,GACnC,CAAC3J,IAEJ,MAqBMoQ,EAAsBxL,GAExBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWiF,cACtCvf,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO6X,EAAa,GAAGgE,KAAM,YACnB,SACVS,KAAK,aACLJ,SAAW3Q,GAjSM+a,EAAC/a,EAAYtL,KACtC,MAAMmd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpFnD,EAAsB3O,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EA8R/CqmB,CAAmB/a,EAAOsQ,GAC/Ca,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OAOjFoJ,EAAuB5K,GAEzBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWnV,aACtCnF,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO6C,EAAY,GAAGgZ,KAAM,YAClB,SACVS,KAAK,aACLJ,SAAW3Q,GA9RQoS,EAACpS,EAAYtL,KACxC,MAAMmd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF/C,EAAqB/O,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EA2R9C0d,CAAqBpS,EAAOsQ,GACjDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OAOvF,OACE3f,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GAhZFvb,QAgZ0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,aAAvBwZ,EAAQ2E,WACV,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,8BA3ERke,IAEzBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWyM,WACtC/mB,IAAAA,cAACgnB,EAAAA,GAAM,CACLC,SAAO,EACP3kB,MAAOikB,EAAmBpI,GAC1B+I,mBAAmB,EACnBC,QAAS9F,EAAc1sB,KAAIkZ,IAAmB,CAAEvL,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,SACvF2Q,SAAU3Q,GAASmY,EAAuBnY,EAAOsQ,GACjDiJ,gBAAgB,cAChBnnB,UAAU,SACVonB,iBAAkBA,IAAM,KACxBC,mBAAmB,MA8DJC,CAAoBpJ,GACpBwL,EAAmBxL,GACnB4K,EAAoB5K,IAK8B,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,KAAyB,QAAtBugB,EAAA1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,OAxQjDwK,IACrBslB,EAAYxzB,OAAS,QAAwC,IAA5BwzB,EAAY,GAAGtlB,KAA2BslB,EAAY,GAAGtlB,KAASjB,MAAM,KAAKjN,OAAS,EAuQxCmzB,CAA4BrJ,KAKzG,GAA2B,WAAvBpC,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,qLCvbV,MAk9CA,EAl9CoEJ,IACgJ,IAD/I,WAAE+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,cAAEC,EAAa,aAAEC,EAAY,qBAAEG,EAAoB,sBAAEC,EAAqB,UAAEC,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,SAAE+O,EAAQ,cAAEC,EAAa,gBAAEP,EAAe,cAAED,EAAa,mBAAE+E,EAAkB,uBAAEC,EAAsB,oBAAE3E,EAAmB,sBAAE0I,EAAqB,4BAAEC,EAA2B,6BAAEC,EAA4B,kBAAEC,EAAiB,oBAAEC,EAAmB,MAAEn0B,EAAK,aAAED,EAAY,mBAAEq0B,EAAkB,8BAAEC,EAA6B,kCAAEC,EAAiC,iCAAEC,EAAgC,qBAAEC,EAAoB,eAAEC,EAAc,2BAAE9Q,EAA0B,uBAC9sB+Q,EAAsB,2BAAEC,EAA0B,2BAAEC,EAA0B,gBAAEC,EAAe,gBAAEC,EAAe,iBAAEC,EAAgB,gBAAEC,EAAe,0BAAEC,GAAyB,6BAAEC,IAA8BjZ,EAE9M,IAAIkZ,GAAuB/yB,OAAO4yB,GAElC,MAAO5f,GAAa2O,KAAkBxN,EAAAA,EAAAA,UAAS,CAAC4e,MACzCnR,GAAYC,KAAiB1N,EAAAA,EAAAA,UAAS,CAAC,MACvCqb,GAAcC,KAAmBtb,EAAAA,EAAAA,UAAS,CAAC,MAC3Cub,GAAgBC,KAAqBxb,EAAAA,EAAAA,UAAS,CAAC,MAC/Cyb,GAAaC,KAAkB1b,EAAAA,EAAAA,UAAS,CAAC,MACzCrG,GAAc+b,KAAmB1V,EAAAA,EAAAA,UAAS,CAAC,MAC3C6e,GAAaC,KAAkB9e,EAAAA,EAAAA,UAAS,CAAC,MACzC+e,GAAeC,KAAoBhf,EAAAA,EAAAA,UAAS,CAAC,MAC7Cif,GAAuBC,KAA4Blf,EAAAA,EAAAA,UAAS,CAAC,MAC7Dmf,GAAWC,KAAgBpf,EAAAA,EAAAA,UAAS,CAAC,MACrCqf,GAAgBC,KAAqBtf,EAAAA,EAAAA,UAAS,CAAC,MAC/Cuf,GAAoBC,KAAyBxf,EAAAA,EAAAA,UAAS,CAAC,MACvDyf,GAAmBC,KAAwB1f,EAAAA,EAAAA,UAAS,CAAC,MACrD0Z,GAAaC,KAAiB3Z,EAAAA,EAAAA,UAAS,CAAC,KACxC2f,GAAgBC,KAAqB5f,EAAAA,EAAAA,UAAS,IAC9C6f,GAAMC,KAAW9f,EAAAA,EAAAA,UAAS,KAC1B+f,GAAYC,KAAiBhgB,EAAAA,EAAAA,UAAS,CAAC,MACvCigB,GAAiBC,KAAsBlgB,EAAAA,EAAAA,WAAS,IAChDmgB,GAASC,KAAcpgB,EAAAA,EAAAA,UAAS,CAAC,KACjCqgB,GAAQC,KAAatgB,EAAAA,EAAAA,UAAS,CAAC,MAC/BlF,GAAqBylB,KAA0BvgB,EAAAA,EAAAA,UAAS,EAAC,KACzDwgB,GAAwBC,KAA6BzgB,EAAAA,EAAAA,UAAS,CAAC,KAChE0gB,GAAmBC,KAAwB3gB,EAAAA,EAAAA,WAAS,GAGpDkO,GAAajE,EAAAA,GAA+C,GAAGnE,KAE/DgQ,MAAad,IAAYA,EAASe,gBAAmD,KAAlCf,EAASe,cAAczF,QAQ1E,aAAE7B,GAAY,MAAEC,KAAUC,EAAAA,EAAAA,MA2G1BiS,GAAqBzK,IACzB,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,IAAKurB,EAAW,GAAGvrB,KAAM,CACvBunB,GAAU,EAAO,MAIrByL,EAAoBzL,EAAQ,EAGxB0O,GAAmC1K,IACvC,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,IAAKurB,EAAW,GAAGvrB,KAAM,CACvBunB,GAAU,EAAO,MAIrB4L,EAAkC5L,EAAQ,EAGtC2O,GAAkC3K,IACtC,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,IAAKurB,EAAW,GAAGvrB,KAAM,CACvBunB,GAAU,EAAO,MAIrB6L,EAAiC7L,EAAQ,EAGrCwJ,GAAwBA,CAACtL,EAAcla,KAC3C,MAAMylB,EAAoBP,GAAarM,QAEvC,UAAgD,IAAlC4M,EAAkB,GAAGzlB,MACjCylB,EAAkBnzB,KAAK,IAGzBmzB,EAAkB,GAAGzlB,KAAWka,EAEhCuL,EAAkB,GAAGzlB,KAASma,OAE9BgL,GAAgBM,GAEhB9O,EAAa8O,GAEbrL,GAAmBqL,EAAkB,EAmBjCmF,GAA8BA,CAACtf,EAAYtL,KAC/C,IAAImd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAvKrDyN,EAAC3Q,EAAcla,KAC5C,MAAM8qB,EAAqBlC,GAAc/P,QAEzC,UAAiD,IAAnCiS,EAAmB,GAAG9qB,MAClC8qB,EAAmBx4B,KAAK,IAG1Bw4B,EAAmB,GAAG9qB,KAAWka,EAEjC4Q,EAAmB,GAAG9qB,KAASma,OAE/B0O,GAAiBiC,GAEjBzD,EAAsByD,EAAmB,EA4JzCD,CAAuBvf,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EA4BzE+qB,GAAqBj6B,MAAOwa,EAAYtL,KAC5C,MAAMgrB,EAAY1f,EAAMqN,OAAOsS,MAAM,GACrC,GAZyBvB,MAECA,EAAKwB,KADT,KAWlBC,CAAkBH,GAAY,CAChC,MAAMI,OA1Be1B,IAChB,IAAIlW,SAAQ,CAAC6X,EAASC,KAC3B,MAAMC,EAAa,IAAIC,WACvBD,EAAWE,cAAc/B,GACzB6B,EAAWG,OAAS,KAClBL,EAAQE,EAAW93B,OAAO,EAE5B83B,EAAWI,QAAWh6B,IACpB25B,EAAO35B,EAAM,CACd,IAiBoBi6B,CAAgBZ,GAC/Ba,EAAeT,EAAO90B,WAAWmY,QAAQ,2BAA4B,IAC3Ekb,GAAQkC,GAER,MAAMC,EAAiBlC,GAAW/Q,QAElC,UAA6C,IAA/BiT,EAAe,GAAG9rB,MAC9B8rB,EAAex5B,KAAK,IAGtBw5B,EAAe,GAAG9rB,KAAWgrB,EAAU9Q,KAEvC4R,EAAe,GAAG9rB,KAASma,OAE3B0P,GAAciC,GACd/B,IAAmB,QAGnBA,IAAmB,GACnBjI,EAAAA,GAAMnwB,MAAMomB,GAAWgU,mBAKrB3R,GAAsBqL,IAC1B,IAAIjL,EAAeiL,EAAkB3zB,OAAS,EAE9C,IAAK,IAAI2C,EAAI,EAAGA,EAAIgxB,EAAkB3zB,OAAQ2C,IAC5C,GAAyC,KAArCgxB,EAAkB,GAAGhxB,KAAK0lB,OAAe,CAC3CK,GAAe,EACf,MAIJ1D,EAAqB0D,EAAa,EAG9BwR,GAAsBF,IAC1B,IAAIG,EAAoBH,EAAeh6B,OAAS,EAEhD,IAAK,IAAI2C,EAAI,EAAGA,EAAIq3B,EAAeh6B,OAAQ2C,IACzC,GAAsC,KAAlCq3B,EAAe,GAAGr3B,KAAK0lB,OAAe,CACxC8R,GAAoB,EACpB,MAIJnE,EAAqBmE,EAAkB,EAGnCC,GAA4BnL,IAChC,IAAIoL,EAAsBpL,EAAkBjvB,OAAS,EAErD,IAAK,IAAI2C,EAAI,EAAGA,EAAIssB,EAAkBjvB,OAAQ2C,IAC5C,GAAyC,KAArCssB,EAAkB,GAAGtsB,KAAK0lB,OAAe,CAC3CgS,GAAsB,EACtB,MAIJ7E,EAA4B6E,EAAoB,EAG5CC,GAA+BC,IACnC,IAAIC,EAAyBD,EAAqBv6B,OAAS,EAE3D,IAAK,IAAI2C,EAAI,EAAGA,EAAI43B,EAAqBv6B,OAAQ2C,IAC/C,GAA4C,KAAxC43B,EAAqB,GAAG53B,KAAK0lB,OAAe,CAC9CmS,GAAyB,EACzB,MAIJ3E,EAA8B2E,EAAuB,EAGjD5G,GAAuBrM,IAC3B,IAAIsM,GAAgB,EAEpB,IAAK,IAAIlxB,EAAI,EAAGA,EAAI4kB,EAAiBvnB,OAAQ2C,IAC3C,GAAgC,GAA5B4kB,EAAiB,GAAG5kB,KAAW,CACjCkxB,GAAgB,EAChB,MAIJ5O,EAAsB4O,EAAc,EAGhChL,GAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,GAAiB/a,SAInByW,EAAUzW,GACV+a,GAAiB/a,QAGnByW,EAAUzW,GACV+a,GAAiB/a,IAwCfya,GAAWA,KAAK,IAAAwD,EACpBzH,EAAO,GAEP,MAAMiP,EAAoBP,GAAarM,QACjCgN,EAAoBP,GAAYzM,QAChCiN,EAAsBV,GAAevM,QACrCkI,EAAoBvd,GAAaqV,QACjC0T,EAAsB3D,GAAc/P,QACpC2T,EAA6B1D,GAAsBjQ,QACnD4T,EAAoB/D,GAAY7P,QAChC6T,EAAgB1D,GAAUnQ,QAC1B8T,EAAsBzD,GAAerQ,QACrC+T,EAAyBtD,GAAkBzQ,QAC3CgU,EAA0BzD,GAAmBvQ,QAC7CiT,EAAiBlC,GAAW/Q,QAC5BiU,EAAe9C,GAAQnR,QACvBkU,EAAc7C,GAAOrR,QACrBQ,EAAmB3Q,GAAYmQ,QAuDrC,GApDA6T,EAAcp6B,KAAK,IACnBs6B,EAAuBt6B,KAAK,IAC5Bu6B,EAAwBv6B,KAAK,IAC7Bw5B,EAAex5B,KAAK,IACpBq6B,EAAoBr6B,KAAK,IACzBw6B,EAAax6B,KAAK,GAClBy6B,EAAYz6B,KAAK,IACjB+mB,EAAiB/mB,KAA2B,QAAvB2rB,EAAC1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,OAE9Cg1B,IAAqB,GACrBf,GAAkB,GAClBtE,GAAgBM,GAChBF,GAAeM,GACfR,GAAkBS,GAClBvG,GAAgBwB,GAChB4H,GAAe8D,GACf5D,GAAiB0D,GACjBxD,GAAyByD,GACzBrD,GAAkBwD,GAClBpD,GAAqBqD,GACrBvD,GAAsBwD,GACtB5D,GAAayD,GACb7C,GAAciC,GACd7B,GAAW6C,GACXzV,GAAegC,GACf8Q,GAAU4C,GAGVzO,EAAcuH,GACdtH,EAAgBuH,GAChBnP,EAAa8O,GACb9G,EAAoBoC,GACpBsG,EAAsBkF,GACtBhF,EAA6BiF,GAC7BhF,EAAkBkF,GAClB1E,EAAuB2E,GACvB1E,EAA2B4E,GAC3B3E,EAA2B0E,GAC3BzE,EAAgB2E,GAChB1E,EAAgB2E,GAChBrW,EAAc2C,GAEdvC,GAAqB,GACrBwM,GAAuB,GACvBmE,GAAoB,GAEpB2E,GAA4BO,GAC5BjC,GAAgCmC,GAChClC,GAA+BiC,GAC/BZ,GAAmBF,GACnBpG,GAAoBrM,GAES,IAAzByF,EAAchtB,OAAc,CAE9B,MAAMwZ,EAAQwT,EAAc,GACtBkO,EAAW,CAAEjtB,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,MAC1D2hB,GAAeD,EAAUnH,EAAkB/zB,QAC3CwxB,GAAuB,KAMrBvI,GAAoB/a,IACxB,MAAMqZ,EAAmB3Q,GAAYmQ,QAC/BgB,EAAkBvC,GAAWuB,QAC7B4M,EAAoBP,GAAarM,QACjC+M,EAAkBrC,GAAY1K,QAC9BgN,EAAoBP,GAAYzM,QAChCiN,EAAsBV,GAAevM,QACrCkI,EAAoBvd,GAAaqV,QACjC4T,EAAoB/D,GAAY7P,QAChC0T,EAAsB3D,GAAc/P,QACpC2T,EAA6B1D,GAAsBjQ,QACnD6T,EAAgB1D,GAAUnQ,QAC1B8T,EAAsBzD,GAAerQ,QACrC+T,EAAyBtD,GAAkBzQ,QAC3CgU,EAA0BzD,GAAmBvQ,QAC7CiT,EAAiBlC,GAAW/Q,QAC5BiU,EAAe9C,GAAQnR,QACvBkU,EAAc7C,GAAOrR,QACrBqU,EAA2BvoB,GAAoBkU,QAC/CsU,EAA8B9C,GAAuBxR,aAGf,IAAjCQ,EAAiB,GAAGrZ,OACzBqZ,EAAiBvnB,OAAS,EAC5BunB,EAAiByB,OAAO9a,EAAO,GAE/BqZ,EAAiB,GAAKoP,SAIiB,IAAhC5O,EAAgB,GAAG7Z,OACxB6Z,EAAgB/nB,OAAS,EAC3B+nB,EAAgBiB,OAAO9a,EAAO,GAE9B6Z,EAAgB,GAAK,SAIoB,IAAlC4L,EAAkB,GAAGzlB,OAC1BylB,EAAkB3zB,OAAS,EAC7B2zB,EAAkB3K,OAAO9a,EAAO,GAEhCylB,EAAkB,GAAK,SAGgB,IAAhCG,EAAgB,GAAG5lB,OACxB4lB,EAAgB9zB,OAAS,EAC3B8zB,EAAgB9K,OAAO9a,EAAO,GAE9B4lB,EAAgB,GAAK,EAGvBpC,GAAcoC,GAEdvC,EAAmBuC,SAGwB,IAAlCC,EAAkB,GAAG7lB,OAC1B6lB,EAAkB/zB,OAAS,EAC7B+zB,EAAkB/K,OAAO9a,EAAO,GAEhC6lB,EAAkB,GAAK,SAIoB,IAApCC,EAAoB,GAAG9lB,OAC5B8lB,EAAoBh0B,OAAS,EAC/Bg0B,EAAoBhL,OAAO9a,EAAO,GAElC8lB,EAAoB,GAAK,SAIgB,IAAlC/E,EAAkB,GAAG/gB,OAC1B+gB,EAAkBjvB,OAAS,EAC7BivB,EAAkBjG,OAAO9a,EAAO,GAEhC+gB,EAAkB,GAAK,SAIkB,IAAlC0L,EAAkB,GAAGzsB,OAC1BysB,EAAkB36B,OAAS,EAC7B26B,EAAkB3R,OAAO9a,EAAO,GAEhCysB,EAAkB,GAAK,SAIoB,IAApCF,EAAoB,GAAGvsB,OAC5BusB,EAAoBz6B,OAAS,EAC/By6B,EAAoBzR,OAAO9a,EAAO,GAElCusB,EAAoB,GAAK,SAIyB,IAA3CC,EAA2B,GAAGxsB,OACnCwsB,EAA2B16B,OAAS,EACtC06B,EAA2B1R,OAAO9a,EAAO,GAEzCwsB,EAA2B,GAAK,SAGK,IAA9BE,EAAc,GAAG1sB,OACtB0sB,EAAc56B,OAAS,EACzB46B,EAAc5R,OAAO9a,EAAO,GAE5B0sB,EAAc,GAAK,SAGwB,IAApCC,EAAoB,GAAG3sB,OAC5B2sB,EAAoB76B,OAAS,EAC/B66B,EAAoB7R,OAAO9a,EAAO,GAElC2sB,EAAoB,GAAK,SAGsB,IAAxCE,EAAwB,GAAG7sB,OAChC6sB,EAAwB/6B,OAAS,EACnC+6B,EAAwB/R,OAAO9a,EAAO,GAEtC6sB,EAAwB,GAAK,SAGiB,IAAvCD,EAAuB,GAAG5sB,OAC/B4sB,EAAuB96B,OAAS,EAClC86B,EAAuB9R,OAAO9a,EAAO,GAErC4sB,EAAuB,GAAK,SAGU,IAA/Bd,EAAe,GAAG9rB,OACvB8rB,EAAeh6B,OAAS,EAC1Bg6B,EAAehR,OAAO9a,EAAO,GAE7B8rB,EAAe,GAAK,SAGgB,IAA7BgB,EAAa,GAAG9sB,OACrB8sB,EAAah7B,OAAS,EACxBg7B,EAAahS,OAAO9a,EAAO,GAE3B8sB,EAAa,GAAK,QAGiB,IAA5BC,EAAY,GAAG/sB,OACpB+sB,EAAYj7B,OAAS,EACvBi7B,EAAYjS,OAAO9a,EAAO,GAE1B+sB,EAAY,GAAK,SAG+B,IAAzCG,EAAyB,GAAGltB,OACjCktB,EAAyBp7B,OAAS,EACpCo7B,EAAyBpS,OAAO9a,EAAO,GAEvCktB,EAAyB,IAAK,QAGqB,IAA5CC,EAA4B,GAAGntB,OACpCmtB,EAA4Br7B,OAAS,EACvCq7B,EAA4BrS,OAAO9a,EAAO,GAE1CmtB,EAA4B,GAAK,GAIrC9V,GAAegC,GACf9B,GAAcsC,GACdsL,GAAgBM,GAChBF,GAAeM,GACfR,GAAkBS,GAClBvG,GAAgBwB,GAChB4H,GAAe8D,GACf5D,GAAiB0D,GACjBxD,GAAyByD,GACzBvD,GAAayD,GACbvD,GAAkBwD,GAClBpD,GAAqBqD,GACrBvD,GAAsBwD,GACtBhD,GAAciC,GACd7B,GAAW6C,GACX1C,GAAuB8C,GACvB5C,GAA0B6C,GAC1BhD,GAAU4C,GAGVzO,EAAcuH,GACdtH,EAAgBuH,GAChBnP,EAAa8O,GACb/O,EAAc2C,GACdsF,EAAoBoC,GACpBsG,EAAsBkF,GACtBhF,EAA6BiF,GAC7BhF,EAAkBkF,GAClB1E,EAAuB2E,GACvB1E,EAA2B4E,GAC3B3E,EAA2B0E,GAC3BzE,EAAgB2E,GAChB1E,EAAgB2E,GAChBxE,GAA0B2E,GAC1B1E,GAA6B2E,GAG7BpJ,GAAoB8B,GACpBzL,GAAmBqL,GACnBuG,GAAmBF,GACnBpG,GAAoBrM,GACpB6S,GAAyBnL,GACzBqL,GAA4BO,GAC5BlC,GAAkBiC,GAClBhC,GAAgCmC,GAChClC,GAA+BiC,EAAuB,GAGxDtY,EAAAA,EAAAA,YAAU,KACR,MAAM6G,EAA+B,GAC/B4K,EAAiC,GACjCzB,EAA6B,GAC7B3D,EAA4B,GAC5BC,EAA0B,GAC1BwM,EAAsC,GACtCC,EAAsC,GACtCC,EAAwC,GACxCC,EAA+C,GAC/CC,EAA8B,GAC9BC,EAAmC,GACnCC,EAAsC,GACtCC,EAAuC,GACvC7B,EAA2B,GAC3B8B,EAA4B,GAC5BC,EAA2B,GAC3BC,EAAmC,GACnCzU,EAA6B,GAC7B8T,EAAsC,GAE5C,GAAInW,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CAEzC,MAAM8vB,EAAoBvN,EAAU,GAAGviB,KAAgB,UACjDu0B,EAA+C,KAAnChS,EAAU,GAAGviB,KAAgB,UAAW,IAAImC,KAAKogB,EAAU,GAAGviB,KAAgB,WAAK,KAC/F20B,EAAiE,KAA5CpS,EAAU,GAAGviB,KAAyB,mBAAW,IAAImC,KAAKogB,EAAU,GAAGviB,KAAyB,oBAAK,KAC1H60B,EAAgE,KAA5CtS,EAAU,GAAGviB,KAAyB,mBAAW,IAAImC,KAAKogB,EAAU,GAAGviB,KAAyB,oBAAK,KACzHs5B,EAAe/W,EAAU,GAAGviB,KAA0B,oBAAIuiB,EAAU,GAAGviB,KAA0B,oBAAI,EAErGu5B,EAAWC,SAASC,eAAe,aAAez5B,GAahC,IAAAypB,EAGnBiQ,EAHL,GAXIH,IAGAA,EAAShS,QAFS,IAAjB+R,GAUgB,IAAjBA,EACF1U,EAAiB/mB,KAA2B,QAAvB4rB,EAAC3N,EAAgB9c,cAAM,IAAAyqB,OAAA,EAAtBA,EAAwB1oB,YAG9C6jB,EAAiB/mB,MAA2B,QAAtB67B,EAAA5d,EAAgB9c,cAAM,IAAA06B,OAAA,EAAtBA,EAAwB34B,OAASizB,IAIzDnE,EAAiBhyB,KAAKiyB,EAAUxlB,MAAM,KAAKjN,QAC3C6uB,EAAgBruB,KAAKiyB,GACrB3D,EAActuB,KAAK0kB,EAAU,GAAGviB,KAAc,SAC9C24B,EAA0B96B,KAAK0kB,EAAU,GAAGviB,KAAkB,aAC9D44B,EAA0B/6B,KAAK0kB,EAAU,GAAGviB,KAAkB,aAC9D64B,EAA4Bh7B,KAAK0kB,EAAU,GAAGviB,KAAkB,aAChE84B,EAAmCj7B,KAAK0kB,EAAU,GAAGviB,KAA2B,sBAChF+4B,EAAkBl7B,KAAK02B,EAAYA,EAAUxxB,cAAgB,IAC7Di2B,EAAuBn7B,KAAK0kB,EAAU,GAAGviB,KAAqB,gBAC9Di5B,EAA0Bp7B,KAAKg3B,EAAoBA,EAAkB9xB,cAAgB,IACrFm2B,EAA2Br7B,KAAK82B,EAAqBA,EAAmB5xB,cAAgB,IACxFuuB,EAAqBzzB,KAAK0kB,EAAU,GAAGviB,KAAY,MAAE,IACrDm5B,EAAgBt7B,KAAK,GACrBu7B,EAAev7B,KAAK0kB,EAAU,GAAGviB,KAAc,SAC/Cq5B,EAAsBx7B,KAAsB,IAAjBy7B,GAC3BZ,EAA4B76B,KAAKy7B,GACjCjC,EAAex5B,KAAK,IAItB,GAA6B,IAAzBwsB,EAAchtB,OAAc,CAC9B,MAAMwZ,EAAQwT,EAAc,GACtBkO,EAAW,CAAEjtB,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,MAE1D8iB,GAAqBpB,EAAUhW,EAAUllB,QACzCwxB,GAAuB,GAGzB6B,GAAgBY,GAChBxG,GAAgB6N,GAChBzE,GAAe0E,GACfxE,GAAiByE,GACjBvE,GAAyBwE,GACzBtE,GAAauE,GACbrE,GAAkBsE,GAClBlE,GAAqBmE,GACrBrE,GAAsBsE,GACtB9D,GAAciC,GACd7B,GAAW2D,GACXxD,GAAuB0D,GACvBxD,GAA0B6C,GAC1B9V,GAAegC,GACf8Q,GAAU0D,GAGVlX,EAAaoP,GACbyB,EAAkBgG,GAClB7O,EAAoByO,GACpB/F,EAAsBiG,GACtB/F,EAA6BgG,GAC7BvF,EAAuByF,GACvBxF,EAA2B0F,GAC3BzF,EAA2BwF,GAC3BvF,EAAgByF,GAChBxF,EAAgByF,GAChBtF,GAA0BuF,GAC1BtF,GAA6B2E,GAE7B/S,GAAmB2L,GACnBiG,GAAmBF,GACnBI,GAAyBkB,GACzBhB,GAA4BqB,GAC5BhD,GAAkB+C,GAClB9C,GAAgCiD,GAChChD,GAA+B+C,OAE1B,KAAAW,EACLlT,EAAmB7oB,KAAK,IACxBgyB,EAAiBhyB,KAAK,GACtBquB,EAAgBruB,KAAK,IACrBsuB,EAActuB,KAAK,IACnBk7B,EAAkBl7B,KAAK,IACvBm7B,EAAuBn7B,KAAK,IAC5Bq7B,EAA2Br7B,KAAK,IAChCo7B,EAA0Bp7B,KAAK,IAC/Bw5B,EAAex5B,KAAK,IACpBs7B,EAAgBt7B,KAAK,GACrB+mB,EAAiB/mB,KAA2B,QAAvB+7B,EAAC9d,EAAgB9c,cAAM,IAAA46B,OAAA,EAAtBA,EAAwB74B,OAC9Cq4B,EAAev7B,KAAK,IAuDtB,GAnDIqtB,IAAaoG,EAAqBj0B,QAAU,IAE9Ci0B,EAAqBzzB,KAAKusB,EAASoH,UAAY,IAAMpH,EAASqH,UAC9DmH,EAA0B/6B,KAAKusB,EAASyP,qBACxClB,EAA0B96B,KAAKusB,EAAS0P,cAG1CpJ,GAAgBY,GAChBxO,GAAc4D,GACdqI,GAAcc,GACd/E,GAAgB6N,GAChBzE,GAAe0E,GACfxE,GAAiByE,GACjBvE,GAAyBwE,GACzBtE,GAAauE,GACbrE,GAAkBsE,GAClBlE,GAAqBmE,GACrBrE,GAAsBsE,GACtB9D,GAAciC,GACd7B,GAAW2D,GACXxD,GAAuB0D,GACvBxD,GAA0B6C,GAC1B9V,GAAegC,GACf8Q,GAAU0D,GAEVxK,EAAmBiB,GACnBkD,EAAkBgG,GAClBrF,EAAgByF,GAChBrF,GAA0BuF,GAC1BtF,GAA6B2E,GAC7B/E,EAAgByF,GAEhBnX,EAAc2C,GACd1C,EAAaoP,GACbpH,EAAoByO,GACpB/F,EAAsBiG,GACtB/F,EAA6BgG,GAC7BvF,EAAuByF,GACvBxF,EAA2B0F,GAC3BzF,EAA2BwF,GAE3BjD,GAAkB+C,GAClB9H,GAAoBrM,GACpBe,GAAmB2L,GACnBiG,GAAmBF,GACnBI,GAAyBkB,GACzBhB,GAA4BqB,GAC5B/C,GAAgCiD,GAChChD,GAA+B+C,GAGF,IAAzB5O,EAAchtB,QAAgBklB,EAAUllB,QAAU,EAAG,CAEvD,MAAMwZ,EAAQwT,EAAc,GACtBkO,EAAW,CAAEjtB,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,MAE1D2hB,GAAeD,EAAU,GACzB1J,GAAuB,QAGjBxE,EAAchtB,OAAS,IAC7ByzB,GAAe5E,GACf0E,GAAkBzE,GAClBtC,EAAcqC,GACdpC,EAAgBqC,GAChBmD,GAAoBpD,MAGrB,CAAC3J,IAEJ,MAAMgN,GAAsBhkB,IAC1B,MAAMikB,EAAmD,GAEzD,GAAIqB,GAAYxzB,OAAS,EAAG,CAC1B,MAAM8xB,EAAmB0B,GAAYzM,QAC/BgL,EAAeuB,GAAevM,QAEpC,QAA4C,IAAjC+K,EAAiB,GAAG5jB,MACQ,KAAjC4jB,EAAiB,GAAG5jB,KAAiB,CACvC,MAAMkkB,EAAaN,EAAiB,GAAG5jB,KAASjB,MAAM,KAChDolB,EAAWN,EAAa,GAAG7jB,KAASjB,MAAM,KAEhD,IAAK,IAAItK,EAAI,EAAGA,EAAIyvB,EAAWpyB,SAAU2C,EACvCwvB,EAAa3xB,KAAK,CAAEyN,MAAOokB,EAAS,GAAG1vB,KAAMqB,MAAOouB,EAAW,GAAGzvB,QAM1E,OAAOwvB,CAAY,EAGfF,GAAuBoC,IAC3B,IAAI9B,EAAiB8B,EAAiBr0B,OAAS,EAE/C,IAAK,IAAI2C,EAAI,EAAGA,EAAI0xB,EAAiBr0B,OAAQ2C,IAC3C,GAA0D,KAAtD0xB,EAAiB,GAAG1xB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC5DkK,GAAiB,EACjB,MAIJf,EAAuBe,EAAe,EASlCmK,GAAkBA,CAACtU,EAAcla,KACrC,MAAM+sB,EAAc7C,GAAOrR,QAE3B,UAA0C,IAA5BkU,EAAY,GAAG/sB,MAC3B+sB,EAAYz6B,KAAK,IAGnBy6B,EAAY,GAAG/sB,KAAWka,EAE1B6S,EAAY,GAAG/sB,KAASma,OAExBgQ,GAAU4C,GAEV3E,EAAgB2E,EAAY,EAiBxBtJ,GAAyBA,CAACnY,EAAYtL,KAC1C,IAAI0jB,EAA0B,GAC1BC,EAAwB,GAG5BD,GAAmBpY,EAAMxV,MACzB6tB,GAAiBrY,EAAMvL,MAGvB,MAAM6jB,EAAmB0B,GAAYzM,QAC/BgL,EAAeuB,GAAevM,QAEpC,UAA+C,IAAjC+K,EAAiB,GAAG5jB,MAChC4jB,EAAiBtxB,KAAK,IAGxB,UAA2C,IAA7BuxB,EAAa,GAAG7jB,MAC5B6jB,EAAavxB,KAAK,IAGpBsxB,EAAiB,GAAG5jB,KAAW0jB,EAC/BG,EAAa,GAAG7jB,KAAW2jB,EAE3B,IAAI8K,EAA8B3P,EAAc1pB,MAAKoK,GAAWA,EAAY,IAAK8L,EAAMvL,QAEvFyqB,IAAsBiE,EAAaC,mBACnCjF,GAAkBgF,EAAaE,oBAE/BpJ,GAAe3B,GACfyB,GAAkBxB,GAElBvF,EAAcsF,GACdrF,EAAgBsF,GAIhBE,GAAoBH,EAAiB,EAGjCwK,GAAuBA,CAAC9iB,EAAYsjB,KACxC,IAAIlL,EAA0B,GAC1BC,EAAwB,GAG5BD,GAAmBpY,EAAMxV,MACzB6tB,GAAiBrY,EAAMvL,MAGvB,MAAM6jB,EAAmB0B,GAAYzM,QAC/BgL,EAAeuB,GAAevM,QAEpC,IAAI,IAAIpkB,EAAE,EAAGA,EAAGm6B,EAAYn6B,IAC5B,CAEA,UAA2C,IAA7BmvB,EAAiB,GAAGnvB,MAChCmvB,EAAiBtxB,KAAK,IAGxB,UAAuC,IAAzBuxB,EAAa,GAAGpvB,MAC5BovB,EAAavxB,KAAK,IAEpBsxB,EAAiB,GAAGnvB,KAAOivB,EAC3BG,EAAa,GAAGpvB,KAAOkvB,EAIvB,IAAI8K,EAA8B3P,EAAc1pB,MAAKoK,GAAWA,EAAY,IAAK8L,EAAMvL,QACvFyqB,IAAsBiE,EAAaC,mBACnCjF,GAAkBgF,EAAaE,oBAE/BpJ,GAAe3B,GACfyB,GAAkBxB,GAElBvF,EAAcsF,GACdrF,EAAgBsF,EAAa,EAKzBoJ,GAAiBA,CAAC3hB,EAAYtL,KAClC,IAAI0jB,EAA0B,GAC1BC,EAAwB,GAG5BD,GAAmBpY,EAAMxV,MACzB6tB,GAAiBrY,EAAMvL,MAGvB,MAAM6jB,EAAmB0B,GAAYzM,QAC/BgL,EAAeuB,GAAevM,QAEpC,UAA+C,IAAjC+K,EAAiB,GAAG5jB,MAChC4jB,EAAiBtxB,KAAK,IAGxB,UAA2C,IAA7BuxB,EAAa,GAAG7jB,MAC5B6jB,EAAavxB,KAAK,IAGpBsxB,EAAiB,GAAG5jB,KAAW0jB,EAC/BG,EAAa,GAAG7jB,KAAW2jB,EAE3B,IAAI8K,EAA8B3P,EAAc1pB,MAAKoK,GAAWA,EAAY,IAAK8L,EAAMvL,QAEvFyqB,IAAsBiE,EAAaC,mBACnCjF,GAAkBgF,EAAaE,oBAE/BpJ,GAAe3B,GACfyB,GAAkBxB,GAElBvF,EAAcsF,GACdrF,EAAgBsF,GA7HIC,EAAC7b,EAAejI,KACpC,MAAMggB,EAAauD,GAAY1K,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,GAGlB0tB,EAAW,GAAGhgB,KAAWiI,EAEzBub,GAAcxD,GAEdqD,EAAmBrD,EAAW,EAoH9B8D,CAAc,EAAG9jB,EAAM,EAsCnB6uB,GAAmBjT,QACY,IAAxBoN,GAAU,GAAGpN,KACf,KAGPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWiR,WACtCvrB,IAAAA,cAACqxB,EAAAA,EAAU,CACT7S,SAAW8S,GAn/BCC,EAACjvB,EAAaC,KAClC,MAAMggB,EAAagJ,GAAUnQ,QAE7B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAAQA,EAAMvI,cAAgB,GAEvDyxB,GAAajJ,GAEbwH,EAAkBxH,GAElByK,GAAkBzK,EAAW,EAs+BKgP,CAAcD,EAAMnT,GAC9C7b,MAA+B,KAAxBipB,GAAU,GAAGpN,MAAiBoN,GAAU,GAAGpN,KAAO2B,SAAS,QAAU,KAAO,IAAI3mB,KAAKoyB,GAAU,GAAGpN,MACzGqT,OAAQ,UACRC,QAAS,IAAIt4B,KACb8G,UAAW,aACXyxB,eAAgB,GAChBC,iBAAkB,GAClBC,gBAAiB,OAOrBC,GAA4B1T,IAAmC,IAAA2T,EACnE,YAA4C,IAAjCnG,GAAmB,GAAGxN,KACxB,KAGPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWqR,oBACtC3rB,IAAAA,cAACqxB,EAAAA,EAAU,CACT7S,SAAW8S,GAtiCUS,EAACzvB,EAAaC,KAC3C,MAAMggB,EAAaoJ,GAAmBvQ,QAEtC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAAQA,EAAMvI,cAAgB,GAEvD6xB,GAAsBrJ,GACtB0K,GAAgC1K,GAChCiI,EAA2BjI,EAAW,EA2hCJwP,CAAuBT,EAAMnT,GACvD7b,MAAwC,KAAjCqpB,GAAmB,GAAGxN,MAA6C,QAAhC2T,EAAInG,GAAmB,GAAGxN,YAAM,IAAA2T,GAA5BA,EAA8BhS,SAAS,QAAU,KAAO,IAAI3mB,KAAKwyB,GAAmB,GAAGxN,MACrIqT,OAAQ,UACRC,QAAS,IAAIt4B,KACb8G,UAAW,aACXyxB,eAAgB,GAChBC,iBAAkB,GAClBC,gBAAiB,MAGjB,EAIJI,GAA2B7T,IAAmC,IAAA8T,EAClE,YAA2C,IAAhCpG,GAAkB,GAAG1N,KACvB,KAGPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWuR,mBACtC7rB,IAAAA,cAACqxB,EAAAA,EAAU,CACT7S,SAAW8S,GA/iCSY,EAAC5vB,EAAaC,KAC1C,MAAMggB,EAAasJ,GAAkBzQ,QAErC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAAQA,EAAMvI,cAAgB,GAEvD+xB,GAAqBvJ,GACrB2K,GAA+B3K,GAC/BkI,EAA2BlI,EAAW,EAoiCJ2P,CAAsBZ,EAAMnT,GACtD7b,MAAuC,KAAhCupB,GAAkB,GAAG1N,MAA4C,QAA/B8T,EAAIpG,GAAkB,GAAG1N,YAAM,IAAA8T,GAA3BA,EAA6BnS,SAAS,QAAU,KAAO,IAAI3mB,KAAK0yB,GAAkB,GAAG1N,MAClIqT,OAAQ,UACRC,QAAS,IAAIt4B,KACb8G,UAAW,aACXyxB,eAAgB,GAChBC,iBAAkB,GAClBC,gBAAiB,MAGjB,EA8CJO,GAAwBhU,GAE1Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,KAAGC,UAAU,qBAAqBqa,GAAW8X,gBAC7CpyB,IAAAA,cAAA,OAAKC,UAAU,4BACbD,IAAAA,cAAA,OAAKC,UAAU,wBACbD,IAAAA,cAAA,SACEse,KAAK,OACL7B,KAAK,aACLiC,UAAU,OAAM,YACN,SACVE,KAAK,aACLyT,OAAO,oBACP7T,SAAW3Q,GAAUyf,GAAmBzf,EAAOsQ,GAC/Cle,UAAU,kBAGdD,IAAAA,cAAA,OAAKC,UAAU,8DACbD,IAAAA,cAAA,UAAQse,KAAK,SAASnS,UAAUsf,GAAe,GAAGtN,OAAUkO,GAAgC7qB,QAAU8wB,GAz3BrFj/B,WACzB,MAAMk/B,EAAM18B,EAAQ,MAAQ,OACtB28B,EAAyB,MAAhB58B,EAAuB,QAAU,OAC1C68B,EAAWhH,GAAe,GAAGlpB,KAAW,QACxCmwB,EAAczG,GACd0G,EAAgB1I,EAEhBoE,EAAiBlC,GAAW/Q,QAGR,mBAEJ0D,KAAK2M,GAAe,GAAGlpB,aAEZqwB,EAAAA,EAAAA,IAAuB,CAAEj/B,cAAeC,GAAiB2+B,EAAKC,EAAQC,EAAUC,EAAaC,IAEvGE,gBAAkB5zB,EAAAA,GAAS6zB,QAC9CzO,EAAAA,GAAMnwB,MAAMomB,GAAWyY,sBAIvB3G,GAAciC,GACdE,GAAmBF,IAEnBhK,EAAAA,EAAAA,IAAM/J,GAAW0Y,uBAKnB3O,EAAAA,GAAMnwB,MAAMomB,GAAW2Y,oBA41BgGC,CAAmB/U,IAAO9H,EAAAA,GAAoB,GAAGnE,SAOtKyW,GAAcxK,GAEhBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,qBAAqBqa,GAAWmN,cAC7CznB,IAAAA,cAAA,SACEse,KAAK,OACLhc,MAAOmlB,GAAa,GAAGtJ,KACvBO,UAAU,OAAM,YACN,SACVE,KAAK,aACLJ,SAAW3Q,GArtCM+a,EAAC/a,EAAYtL,KACtC,IAAImd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAElFoI,GAAsBla,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAktC/CqmB,CAAmB/a,EAAOsQ,GAC/Ca,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OA4BjFwT,GAAgChV,GAElCne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW8Y,sBACtCpzB,IAAAA,cAAA,SACEse,KAAK,SACLI,UAAU,MACVpc,MAAO+oB,GAAsB,GAAGlN,KAAM,YAC5B,SACVS,KAAK,aACLJ,SAAU3Q,GAtuCcwlB,EAAC/wB,EAAeC,KAChD,MAAMggB,EAAa8I,GAAsBjQ,QAEzC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBgpB,GAAyB/I,GAEzBuH,EAA6BvH,EAAW,EA2tCb8Q,CAA0BxlB,EAAMqN,OAAO5Y,MAAO6b,GACjEa,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxD9e,UAAU,eACVmgB,aAAa,WAOjBkT,GAAwBnV,GAE1Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWmR,gBACtCzrB,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,MACVpc,MAAOmpB,GAAe,GAAGtN,KAAM,YACrB,SACVS,KAAK,aACLJ,SAAU3Q,GA7uCO0lB,EAACjxB,EAAeC,KACzC,MAAMggB,EAAakJ,GAAerQ,QAIlC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAHQ,mBAMJiqB,KAAKxc,IAAUA,EAAMjO,QAAU,IACnDkuB,EAAW,GAAGhgB,KAAWD,EAEzBopB,GAAkBnJ,GAClBoM,GAA4BpM,GAC5BgI,EAAuBhI,IAGvB8B,EAAAA,GAAMnwB,MAAMomB,GAAW2Y,oBA4tCEM,CAAmB1lB,EAAMqN,OAAO5Y,MAAO6b,GAC1Da,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxD9e,UAAU,eACVmgB,aAAa,WAOjBoT,GAAuBrV,GAEzBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWmZ,aACtCzzB,IAAAA,cAAA,SACEse,KAAK,SACLI,UAAU,MACVpc,MAAOyD,GAAa,GAAGoY,KAAM,YACnB,SACVS,KAAK,aACLJ,SAAU3Q,GA3oCI6W,EAACpiB,EAAeC,KACtC,MAAMggB,EAAaxc,GAAaqV,QAEhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBwf,GAAgBS,GAEhBrB,EAAoBqB,GAEpBkM,GAAyBlM,EAAW,EA8nCTmC,CAAgB7W,EAAMqN,OAAO5Y,MAAO6b,GACvDa,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxD9e,UAAU,eACVmgB,aAAa,WAOjBsT,GAAiBvV,GAEnBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWvV,SACtC/E,IAAAA,cAAA,YACE0e,UAAU,OACVpc,MAAOmqB,GAAO,GAAGtO,KAAM,YACb,SACVS,KAAK,aACLJ,SAAW3Q,GAtbS8lB,EAAC9lB,EAAYtL,KACzC,MAAMmd,EAAYzQ,EAAO2kB,0BAA4B3kB,EAAO2kB,0BAA4B,IAExF7C,GAAgBljB,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAmbzCoxB,CAAsB9lB,EAAOsQ,GAClDle,UAAU,eACVyf,UAAWzQ,EAAO2kB,0BAA4B3kB,EAAO2kB,0BAA4B,QAOrFC,GAAwB1V,QACS,IAA1BlT,GAAY,GAAGkT,KACjB,KAIPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWwZ,KACtC9zB,IAAAA,cAAA,KAAGC,UAAU,UAAUqa,GAAWyZ,WAClC/zB,IAAAA,cAAA,WACEA,IAAAA,cAAA,SAAOg0B,QAAS,aAAe7V,EAAKle,UAAU,mBAC5CD,IAAAA,cAAA,SAAOse,KAAK,WAAW9R,GAAI,aAAe2R,EAAKK,SAAU3Q,GAlTzComB,EAAC3xB,EAAgBC,KAC3C,MAAMggB,EAAarb,GAAoBkU,QACjC8Y,EAAiBjpB,GAAYmQ,QAC7B+Y,EAAoBvH,GAAuBxR,QAEjD,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,MAAK,GAGlB,UAA6C,IAA/Bq/B,EAAe,GAAG3xB,MAC9B2xB,EAAer/B,KAAK,GAMF,IAAAu/B,EAIfC,EAPL9R,EAAW,GAAGhgB,KAAWD,EACzB6xB,EAAkB,GAAG5xB,MAAqB,IAAVD,EAAgB,EAAG,EAGjD4xB,EAAe,GAAG3xB,MADN,IAAVD,GACiD,QAAtB8xB,EAAAthB,EAAgB9c,cAAM,IAAAo+B,OAAA,EAAtBA,EAAwBr8B,OAASizB,GAIX,QAAzBqJ,EAAGvhB,EAAgB9c,cAAM,IAAAq+B,OAAA,EAAtBA,EAAwBt8B,MAKvD40B,GAAuBpK,GACvBsK,GAA0BsH,GAC1Bva,GAAesa,GACfjb,EAAcib,GACdpJ,GAA0BvI,GAC1BwI,GAA6BoJ,EAAkB,EAmR6BF,CAAoBpmB,EAAMqN,OAAOqD,QAASJ,KAC3G9H,EAAAA,GAAwB,GAAGnE,KAAgB,MAAQ2Y,MAQhE,OACE7qB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,IAt2CFvb,QAs2C0B6gB,QAASrF,GAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IACTne,IAAAA,cAAA,OAAKC,UAAU,eACpBD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,iBAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BACO,IAAnB8rB,IAAwB/rB,IAAAA,cAAA,KAAGC,UAAU,qBAAqBqa,GAAWga,eAAgBvI,IAhO/E5N,KAC3B,GAAIkD,EAAchtB,OAAS,EACzB,OACE2L,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWia,eACtCv0B,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOikB,GAAmBpI,GAC1B+I,mBAAmB,EACnBC,QAAS9F,EAAc1sB,KAAIkZ,IAAmB,CAAEvL,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,SACvF2Q,SAAU3Q,GAASmY,GAAuBnY,EAAOsQ,GACjDiJ,gBAAgB,cAChBnnB,UAAU,SACVonB,iBAAkBA,IAAM,KACxBC,mBAAmB,MAO7B,MAAMzZ,EAAQwT,EAAc,GAE5B,OACErhB,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWia,eACtCv0B,IAAAA,cAACgnB,EAAAA,GAAM,CACLwN,aAAc,CAAElyB,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,MACvDqZ,mBAAmB,EACnB1I,SAAU3Q,GAASmY,GAAuBnY,EAAOsQ,GACjDiJ,gBAAgB,cAChBnnB,UAAU,SACVonB,iBAAkBA,IAAM,KACxBC,mBAAmB,KAGnB,EA4LaC,CAAoBpJ,GACpBwK,GAAWxK,GACXqV,GAAoBrV,GA3IdA,IAEzBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,qBAAqBqa,GAAWma,eAC7Cz0B,IAAAA,cAAA,SACEse,KAAK,OACLhc,MAAO6oB,GAAc,GAAGhN,KACxBO,UAAU,OAAM,YACN,SACVE,KAAK,aACLJ,SAAW3Q,GAAUsf,GAA4Btf,EAAOsQ,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OA8HhE+U,CAAoBvW,GACpBgV,GAA6BhV,GAC7BiT,GAAgBjT,GAChBmV,GAAqBnV,GACrB0T,GAAyB1T,GACzB6T,GAAwB7T,GACxBgU,GAAqBhU,GACrB0V,GAAqB1V,GACrByM,GAAoB8I,GAAcvV,IAKgB,IAAAwW,EAAzD,IAAK/1B,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAC/BiH,GAAoB,GAAGiX,UAA0C,IAA1BlT,GAAY,GAAGkT,KAAyBlT,GAAY,GAAGkT,KAAS,IAA4B,QAAzBwW,EAAG7hB,EAAgB9c,cAAM,IAAA2+B,OAAA,EAAtBA,EAAwB58B,QAM/I,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8B8Q,GAAkBwC,IAAqB9sB,IAAAA,cAAA,OAAKC,UAAU,UAClGD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,MAKlE,UAOdvf,IAAayT,GAAcmH,GAA8B8Q,GAAkBwC,IAC3E9sB,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,yLCt+CV,MAwhCA,EAxhCyDJ,IAI2D,IAJ1D,WACxD+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,mBACxD4M,EAAkB,cAAE/E,EAAa,gBAAEC,EAAe,aAAE5H,EAAY,wBAAE0b,EAAuB,aAAEC,EAAY,oBACvG3T,EAAmB,iBAAEH,EAAgB,mBAAEC,EAAkB,mBAAEC,EAAkB,gBAAE6T,EAAe,wBAAEC,EAAuB,wBAAEC,EAAuB,UAChJzb,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,cAAEgP,EAAa,2BAAC7H,GAA4B1H,EAC9G,MAAOwP,EAAYC,IAAiBnV,EAAAA,EAAAA,UAAS,CAAC,MACvCrI,EAAUyd,IAAepV,EAAAA,EAAAA,UAAS,CAAC,MACnC1I,EAAOge,IAAYtV,EAAAA,EAAAA,UAAS,CAAC,MAC7B6oB,EAAeC,IAAoB9oB,EAAAA,EAAAA,UAAS,EAAC,KAC7C7G,EAAO4vB,IAAY/oB,EAAAA,EAAAA,UAAS,CAAC,MAC7BrG,EAAc+b,IAAmB1V,EAAAA,EAAAA,UAAS,CAAC,MAC3C3G,EAAekc,IAAoBvV,EAAAA,EAAAA,UAAS,CAAC,MAC7CzG,EAAaic,IAAkBxV,EAAAA,EAAAA,UAAS,CAAC,MACzCvG,EAAagc,IAAkBzV,EAAAA,EAAAA,UAAS,CAAC,MACzCgpB,GAAcC,KAAmBjpB,EAAAA,EAAAA,UAAS,CAAC,MAE3C0Z,GAAaC,KAAiB3Z,EAAAA,EAAAA,UAAS,CAAC,IAIzCkO,GAAajE,EAAAA,GAA+B,GAAGnE,KAC/C6P,GAAalJ,EAAWlhB,MAAK6iB,GAA4B,SAApBA,EAAKC,aAAwBC,cAQlE,aAAEG,GAAY,MAAEC,KAAUC,EAAAA,EAAAA,MAgB1ByU,GAAiBA,CAAC3hB,EAAYtL,KAClC,IAAI0jB,EAA0B,GAC1BC,EAAwB,GAE5B,IAAK,IAAIlvB,EAAI,EAAGA,EAAI6W,EAAMxZ,SAAU2C,EAClCivB,GAAmBpY,EAAM,GAAG7W,KAAKqB,OAASrB,GAAK6W,EAAMxZ,OAAS,EAAI,IAAM,IACxE6xB,GAAiBrY,EAAM,GAAG7W,KAAKsL,OAAStL,GAAK6W,EAAMxZ,OAAS,EAAI,IAAM,IAGxE,MAAM6uB,EAAkB5B,EAAWlG,QAC7B+H,EAAgBpf,EAASqX,QAE/B,UAA8C,IAAhC8H,EAAgB,GAAG3gB,MAC/B2gB,EAAgBruB,KAAK,IAGvB,UAA4C,IAA9BsuB,EAAc,GAAG5gB,MAC7B4gB,EAActuB,KAAK,IAGrBquB,EAAgB,GAAG3gB,KAAW0jB,EAC9B9C,EAAc,GAAG5gB,KAAW2jB,EAE5B3E,EAAc2B,GACd1B,EAAY2B,GAEZtC,EAAcqC,GACdpC,EAAgBqC,GAzCIkD,EAAC7b,EAAejI,KACpC,MAAMggB,EAAauD,GAAY1K,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,GAGlB0tB,EAAW,GAAGhgB,KAAWiI,EAEzBub,GAAcxD,GAEdqD,EAAmBrD,EAAW,EAgC9B8D,CAAcxY,EAAMxZ,OAAQkO,GAE5B+yB,GAAepS,EAAiBC,EAAezf,EAAOuxB,EAAe1vB,EAAM,EAqBvEgwB,GAAYA,CAAC9Y,EAAcla,KAC/B,MAAMggB,EAAa7e,EAAM0X,QAGzB,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWka,EAEzB8F,EAAW,GAAGhgB,KAASma,OAEvBgF,EAASa,GAETrJ,EAAaqJ,GAEb+S,GAAehU,EAAYvd,EAAUwe,EAAY0S,EAAe1vB,EAAM,EAwHlEiwB,GAAgBjzB,IACpB,MAAMkzB,EAAalwB,EAAM6V,QACnBkI,EAAoBvd,EAAaqV,QACjCuH,EAAqBld,EAAc2V,QACnCiI,EAAmB1d,EAAYyV,QAC/BwH,EAAmB/c,EAAYuV,QAC/Bsa,EAAoBN,GAAaha,QAEvCqa,EAAW,GAAGlzB,KAAW,GACzB+gB,EAAkB,GAAG/gB,KAAW,GAChCogB,EAAmB,GAAGpgB,KAAW,GACjC8gB,EAAiB,GAAG9gB,KAAW,GAC/BqgB,EAAiB,GAAGrgB,KAAW,GAC/BmzB,EAAkB,GAAGnzB,KAAW,GAEhC4yB,EAASM,GACT3T,EAAgBwB,GAChB3B,EAAiBgB,GACjBf,EAAeyB,GACfxB,EAAee,GACfyS,GAAgBK,GAEhBb,EAAaY,GACbvU,EAAoBoC,GACpBvC,EAAiB4B,GACjB3B,EAAmBqC,GACnBpC,EAAmB2B,GACnBkS,EAAgBY,EAAkB,EAG9BnP,GAAsBhkB,IAC1B,MAAMikB,EAAmD,GAEzD,GAAIlF,EAAWjtB,OAAS,EAAG,CACzB,MAAM8xB,EAAmB7E,EAAWlG,QAC9BgL,EAAeriB,EAASqX,QAE9B,QAA4C,IAAjC+K,EAAiB,GAAG5jB,MACQ,KAAjC4jB,EAAiB,GAAG5jB,KAAiB,CACvC,MAAMkkB,EAAaN,EAAiB,GAAG5jB,KAASjB,MAAM,KAChDolB,EAAWN,EAAa,GAAG7jB,KAASjB,MAAM,KAEhD,IAAK,IAAItK,EAAI,EAAGA,EAAIyvB,EAAWpyB,SAAU2C,EACvCwvB,EAAa3xB,KAAK,CAAEyN,MAAOokB,EAAS,GAAG1vB,KAAMqB,MAAOouB,EAAW,GAAGzvB,QAM1E,OAAOwvB,CAAY,EAGfmP,GAAgBA,CAACrzB,EAAeia,KACpC,GAAIja,EAAO,CACT,MAAMoB,EAAQpB,EAAMhB,MAAM,KAE1B,OAAOoC,EAAM,GAAG6Y,KAAe7Y,EAAM,GAAG6Y,KAAe,GAGzD,MAAO,EAAE,EAmBLqZ,GAAqBrT,IACzB,IAAIvsB,EAASusB,EAAWluB,OAAS,EAEjC,IAAK,IAAI2C,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,GAAoD,KAAhDurB,EAAW,GAAGvrB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CACtD1mB,GAAS,EAAO,MAIpB,OAAOA,CAAM,EAGT6/B,GAAqBvzB,IAjTH,IAkTfA,EAAMjO,QAjTS,KAiTqBiO,EAAMjO,YAA8ByhC,GAAiBxzB,IAAgByzB,GAAazzB,IAGzHwzB,GAAoBxzB,IAExB,MAAM0zB,EAAY,kBACZC,EAAgB,UAChBC,EAAY,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC/BC,EAAe,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAClEC,EAAe,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAGlEC,EAAO/zB,EAAMuwB,cAGnB,IAAKmD,EAAUM,KAAKD,GAClB,OAAO,EAIT,MAAME,EAAUF,EAAKG,MAAMR,GAE3B,GAAIO,EAAS,CACX,MAAME,EAAWF,EAAQ,GAGzB,IAAKN,EAAcK,KAAKG,GACtB,OAAO,EAIT,MAAMC,EAAgBH,EAAQ,GAAGj1B,MAAM,IAEvC,IAAIq1B,EAAQ,EAEZ,IAAK,IAAI3/B,EAAI,EAAGA,EAAI0/B,EAAcriC,SAAU2C,EAC1C2/B,GAAS/+B,SAAS8+B,EAAc,GAAG1/B,MAAQk/B,EAAU,GAAGl/B,KAItD,CAAC,IAAK,KAAK4/B,QAAQH,IAAa,IAClCE,GAAS,GAGX,MAAME,EAAcF,EAAQ,GACtBG,EAAaP,EAAQ,GAM3B,MAFe,CAAC,IAAK,KAAKK,QAAQH,IAAa,EAAIN,EAAa,GAAGU,OAAmBC,EAAcV,EAAa,GAAGS,OAAmBC,EAKzI,OAAO,CAAK,EAGRf,GAAgBzzB,IACpB,MAAMy0B,EAAgB,cAChBC,EAAsB,CAC1B,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC9E,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC9E,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAKlDC,EAFM30B,EAAMuwB,cAEMvxB,MAAM,IAG9B,GAxXsB,IAwXlB21B,EAAY5iC,OAA4B,CAE1C,IAAK0iC,EAAcjY,KAAKmY,EAAY,IAAGA,EAAY5iC,OAAS,KAC1D,OAAO,EAGT,IAAK,IAAI2C,EAAI,EAAGA,EAAIigC,EAAY5iC,OAAS,IAAK2C,EAE5C,GAAI+/B,EAAcjY,KAAKmY,EAAY,GAAGjgC,MACpC,OAAO,EAIX,OAAO,EACF,GArYe,KAqYXigC,EAAY5iC,OAA4B,CAEjD,IAAK0iC,EAAcjY,KAAKmY,EAAYA,EAAY5iC,OAAS,IACvD,OAAO,EAKT,GAAK0iC,EAAcjY,KAAKmY,EAAY,KAAQF,EAAcjY,KAAKmY,EAAY,KAAQF,EAAcjY,KAAKmY,EAAY,KAAQF,EAAcjY,KAAKmY,EAAY,IAGlJ,CAEL,GAAuB,MAAnBA,EAAY,IAAiC,MAAnBA,EAAY,IAAiC,MAAnBA,EAAY,GAClE,OAAO,EAIT,GAAIF,EAAcjY,KAAKmY,EAAY,KAAOF,EAAcjY,KAAKmY,EAAY,IACvE,OAAO,EAIT,IAAKF,EAAcjY,KAAKmY,EAAY,IAClC,OAAO,EAIT,MAAMC,EAAaD,EAAY,GAAKA,EAAY,GAEhD,IAAIE,GAAkB,EAEtB,IAAK,IAAIngC,EAAI,EAAGA,EAAIggC,EAAoB3iC,SAAU2C,EAC5CggC,EAAoB,GAAGhgC,OAASkgC,IAClCC,GAAkB,GAItB,QAAKA,KAKDJ,EAAcjY,KAAKmY,EAAY,KAAOF,EAAcjY,KAAKmY,EAAY,KAAOF,EAAcjY,KAAKmY,EAAY,KAAOF,EAAcjY,KAAKmY,EAAY,KAjCrJ,QAAQF,EAAcjY,KAAKmY,EAAY,KAAQF,EAAcjY,KAAKmY,EAAY,KAAQF,EAAcjY,KAAKmY,EAAY,KAAQF,EAAcjY,KAAKmY,EAAY,KAAQF,EAAcjY,KAAKmY,EAAY,KAyCvM,OAAO,CAAK,EAGR3B,GAAiBA,CAACpS,EAA2BC,EAAyBb,EAAsB8U,EAA+B3B,KAC/H,MAAM4B,EAAWzB,GAAkBtT,GAE7BtsB,EAASqhC,GAAYzB,GAAkB1S,IAAoB0S,GAAkBzS,IA1KzDmU,EAACF,EAA+B3B,KAC1D,IAAIz/B,EAASohC,EAAmB/iC,OAAS,EAEzC,IAAK,IAAI2C,EAAI,EAAGA,EAAIogC,EAAmB/iC,SACjC+iC,EAAmB,GAAGpgC,OACxBhB,EAAgC,KAAvBy/B,EAAW,GAAGz+B,MAAsB6+B,GAAkBJ,EAAW,GAAGz+B,OAG1EhB,KAL0CgB,GAUjD,OAAOhB,CAAM,EA6JwFshC,CAAoBF,EAAoB3B,GAE7IV,EAAwBsC,GAExBrC,EAAwBh/B,EAAO,EAG3BgnB,GAAWA,KACfjE,EAAO,GAEP,MAAMmK,EAAkB5B,EAAWlG,QAC7B+H,EAAgBpf,EAASqX,QACzByL,EAAmBf,GAAY1K,QAC/BkH,EAAa5e,EAAM0X,QACnBgc,EAAqBnC,EAAc7Z,QACnCqa,EAAalwB,EAAM6V,QACnBkI,EAAoBvd,EAAaqV,QACjCuH,EAAqBld,EAAc2V,QACnCiI,EAAmB1d,EAAYyV,QAC/BwH,EAAmB/c,EAAYuV,QAC/Bsa,EAAoBN,GAAaha,QAEvC8H,EAAgBruB,KAAK,IACrBsuB,EAActuB,KAAK,IACnBgyB,EAAiBhyB,KAAK,GACtBytB,EAAWztB,KAAK,IAChBuiC,EAAmBviC,MAAK,GACxB4gC,EAAW5gC,KAAK,IAChByuB,EAAkBzuB,KAAK,IACvB8tB,EAAmB9tB,KAAK,IACxBwuB,EAAiBxuB,KAAK,IACtB+tB,EAAiB/tB,KAAK,IACtB6gC,EAAkB7gC,KAAK,IAEvB0sB,EAAc2B,GACd1B,EAAY2B,GACZ4C,GAAcc,GACdnF,EAASY,GACT4S,EAAiBkC,GACjBjC,EAASM,GACT3T,EAAgBwB,GAChB3B,EAAiBgB,GACjBf,EAAeyB,GACfxB,EAAee,GACfyS,GAAgBK,GAEhB7U,EAAcqC,GACdpC,EAAgBqC,GAChByC,EAAmBiB,GACnB3N,EAAaoJ,GACbsS,EAAwBwC,GACxBvC,EAAaY,GACbvU,EAAoBoC,GACpBvC,EAAiB4B,GACjB3B,EAAmBqC,GACnBpC,EAAmB2B,GACnBkS,EAAgBY,GAEhBJ,GAAepS,EAAiBC,EAAeb,EAAY8U,EAAoB3B,EAAW,EAGtFvY,GAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GAEVgX,EAAU8D,OAAO9a,EAAO,GAExB+a,GAAiB/a,SAGnByW,EAAUzW,GAEV+a,GAAiB/a,QAGnByW,EAAUzW,GACV+a,GAAiB/a,IAIf+a,GAAoB/a,IACxB,MAAMskB,EAAmBf,GAAY1K,QAC/B8H,EAAkB5B,EAAWlG,QAC7B+H,EAAgBpf,EAASqX,QACzBkH,EAAa5e,EAAM0X,QACnBgc,EAAqBnC,EAAc7Z,QACnCqa,EAAalwB,EAAM6V,QACnBkI,EAAoBvd,EAAaqV,QACjCuH,EAAqBld,EAAc2V,QACnCiI,EAAmB1d,EAAYyV,QAC/BwH,EAAmB/c,EAAYuV,QAC/Bsa,EAAoBN,GAAaha,QAkDvC,QAhD4C,IAAjCyL,EAAiB,GAAGtkB,OACzBskB,EAAiBxyB,OAAS,EAC5BwyB,EAAiBxJ,OAAO9a,EAAO,GAE/BskB,EAAiB,GAAK,EAGxBd,GAAcc,GAEdjB,EAAmBiB,SAGsB,IAAhC3D,EAAgB,GAAG3gB,OACxB2gB,EAAgB7uB,OAAS,EAC3B6uB,EAAgB7F,OAAO9a,EAAO,GAE9B2gB,EAAgB,GAAK,GAGvB3B,EAAc2B,GAEdrC,EAAcqC,SAGyB,IAA9BC,EAAc,GAAG5gB,OACtB4gB,EAAc9uB,OAAS,EACzB8uB,EAAc9F,OAAO9a,EAAO,GAE5B4gB,EAAc,GAAK,GAGrB3B,EAAY2B,GAEZrC,EAAgBqC,SAGoB,IAA3Bb,EAAW,GAAG/f,OACnB+f,EAAWjuB,OAAS,EACtBiuB,EAAWjF,OAAO9a,EAAO,GAEzB+f,EAAW,GAAK,GAGlBZ,EAASY,GAETpJ,EAAaoJ,SAG+B,IAAnC8U,EAAmB,GAAG70B,KAA0B,CACzD,GAAI60B,EAAmB/iC,OAAS,EAC9B+iC,EAAmB/Z,OAAO9a,EAAO,OAC5B,CACL60B,EAAmB,IAAK,EAExB,MAAM7G,EAAWC,SAASC,eAAe,SAErCF,IACFA,EAAShS,SAAU,GAIvB2W,EAAiBkC,GAEjBxC,EAAwBwC,QAGY,IAA3B3B,EAAW,GAAGlzB,OACnBkzB,EAAWphC,OAAS,EACtBohC,EAAWpY,OAAO9a,EAAO,GAEzBkzB,EAAW,GAAK,GAGlBN,EAASM,GAETZ,EAAaY,SAG8B,IAAlCnS,EAAkB,GAAG/gB,OAC1B+gB,EAAkBjvB,OAAS,EAC7BivB,EAAkBjG,OAAO9a,EAAO,GAEhC+gB,EAAkB,GAAK,GAGzBxB,EAAgBwB,GAEhBpC,EAAoBoC,SAGwB,IAAnCX,EAAmB,GAAGpgB,OAC3BogB,EAAmBtuB,OAAS,EAC9BsuB,EAAmBtF,OAAO9a,EAAO,GAEjCogB,EAAmB,GAAK,GAG1BhB,EAAiBgB,SAGyB,IAAjCU,EAAiB,GAAG9gB,OACzB8gB,EAAiBhvB,OAAS,EAC5BgvB,EAAiBhG,OAAO9a,EAAO,GAE/B8gB,EAAiB,GAAK,GAGxBzB,EAAeyB,GAEfrC,EAAmBqC,SAGuB,IAAjCT,EAAiB,GAAGrgB,OACzBqgB,EAAiBvuB,OAAS,EAC5BuuB,EAAiBvF,OAAO9a,EAAO,GAE/BqgB,EAAiB,GAAK,GAGxBf,EAAee,GAEf3B,EAAmB2B,SAGwB,IAAlC8S,EAAkB,GAAGnzB,OAC1BmzB,EAAkBrhC,OAAS,EAC7BqhC,EAAkBrY,OAAO9a,EAAO,GAEhCmzB,EAAkB,GAAK,GAGzBL,GAAgBK,GAEhBZ,EAAgBY,IAGlBJ,GAAepS,EAAiBC,EAAeb,EAAY8U,EAAoB3B,EAAW,GAG5F5e,EAAAA,EAAAA,YAAU,KACR,MAAMgQ,EAA6B,GAC7B3D,EAA4B,GAC5BC,EAA0B,GAC1Bb,EAAuB,GACvB8U,EAAgC,GAChC3B,EAAuB,GACvBnS,EAA8B,GAC9BX,EAA+B,GAC/BU,EAA6B,GAC7BT,EAA6B,GAC7B2U,EAA2B,GAEjC,GAAIhe,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAMwgC,IAASje,EAAU,GAAGviB,KAAsB,iBAAIuiB,EAAU,GAAGviB,KAAsB,gBAEnFu5B,EAAWC,SAASC,eAAe,OAASz5B,GAE9Cu5B,IACFA,EAAShS,QAAUiZ,GAGrB,MAAM9zB,EAAkB6V,EAAU,GAAGviB,KAAiB,MAEtD,IAAIylB,EAAO,GAEX/Y,EAAMzN,SAAQ,CAACrB,EAAM2N,IAAUka,GAAiB,GAATla,GAAcA,EAAQwf,GAAa,IAAMntB,EAAOA,IAEvF,MAAMkyB,EAAoBvN,EAAU,GAAGviB,KAAgB,UAEvD6vB,EAAiBhyB,KAAKiyB,EAAUxlB,MAAM,KAAKjN,QAC3C6uB,EAAgBruB,KAAKiyB,GACrB3D,EAActuB,KAAK0kB,EAAU,GAAGviB,KAAc,SAC9CsrB,EAAWztB,KAAK4nB,GAChB2a,EAAmBviC,KAAK2iC,GACxB/B,EAAW5gC,KAAK0kB,EAAU,GAAGviB,KAAW,KAAIuiB,EAAU,GAAGviB,KAAW,KAAI,IACxEssB,EAAkBzuB,KAAK0kB,EAAU,GAAGviB,KAAkB,aACtD2rB,EAAmB9tB,KAAK0kB,EAAU,GAAGviB,KAAmB,cACxDqsB,EAAiBxuB,KAAK0kB,EAAU,GAAGviB,KAAiB,YACpD4rB,EAAiB/tB,KAAK0kB,EAAU,GAAGviB,KAAiB,YACpDugC,EAAe1iC,KAAK0kB,EAAU,GAAGviB,KAAc,SAGjD0qB,EAASY,GACTR,EAAgBwB,GAEhBpK,EAAaoJ,GACbpB,EAAoBoC,QAEpBuD,EAAiBhyB,KAAK,GACtBquB,EAAgBruB,KAAK,IACrBsuB,EAActuB,KAAK,IACnBytB,EAAWztB,KAAK,IAChBuiC,EAAmBviC,MAAK,GACxB4gC,EAAW5gC,KAAK,IAChB8tB,EAAmB9tB,KAAK,IACxBwuB,EAAiBxuB,KAAK,IACtB+tB,EAAiB/tB,KAAK,IACtB0iC,EAAe1iC,KAAK,IAGtB0sB,EAAc2B,GACd1B,EAAY2B,GACZ4C,GAAcc,GACdqO,EAAiBkC,GACjBjC,EAASM,GACT9T,EAAiBgB,GACjBf,EAAeyB,GACfxB,EAAee,GACfyS,GAAgBkC,GAEhB1W,EAAcqC,GACdpC,EAAgBqC,GAChByC,EAAmBiB,GACnB+N,EAAwBwC,GACxBvC,EAAaY,GACb1U,EAAiB4B,GACjB3B,EAAmBqC,GACnBpC,EAAmB2B,GACnBkS,EAAgByC,GAEhBjC,GAAepS,EAAiBC,EAAeb,EAAY8U,EAAoB3B,EAAW,GACzF,CAAClc,IAEJ,MAqBMoP,GAAcxK,IAClB,MAAMsF,EAAYnJ,GAAWmC,KAG7B,OAFmB2C,MAAMC,MAAM,KAAMD,MAAM2C,KAAaptB,KAAI,SAAU2qB,EAAGtoB,GAAK,OAAOA,CAAG,IAEtErC,KAAI4nB,GAElBvc,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAc8hB,GAAa,EAAK0B,EAAY,KAAOlH,EAAY,GAAMkH,GAClFzjB,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOqzB,GAAcjyB,EAAM,GAAGya,KAAQ5B,GAAU,YACtC,SACVqC,KAAK,aACLJ,SAAU3Q,GAnvBG6V,EAAC7V,EAAYtL,EAAega,KACnD,MAAMmD,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF,IAAIC,EAAY/R,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GACxDiE,EAAqBjgB,EAAM,GAAGnB,KAE7BohB,EAAmB7D,SAAS,OAC/B6D,GAAsB,IAAInI,OAAOuG,GAAa,IAGhD,MAAM6B,EAAYD,EAAmBriB,MAAM,KAE3CsiB,EAAU,GAAGrH,KAAeqD,EAC5BA,EAAYgE,EAAUlI,KAAK,KAE3B6Z,GAAU3V,EAAWrd,EAAM,EAouBEmhB,CAAiB7V,EAAOsQ,EAAK5B,GAChDyC,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxD9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7ES,aAAa,YAKrB,EAGEqX,GAA2BtZ,GAE7Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWwZ,KACtC9zB,IAAAA,cAAA,KAAGC,UAAU,UAAUqa,GAAWyZ,WAClC/zB,IAAAA,cAAA,WACEA,IAAAA,cAAA,SAAOg0B,QAAS,OAAS7V,EAAKle,UAAU,mBACtCD,IAAAA,cAAA,SAAOse,KAAK,WAAW9R,GAAI,OAAS2R,EAAKK,SAAU3Q,GAluBtC6pB,EAACp1B,EAAgBC,KACxC,MAAMggB,EAAa0S,EAAc7Z,QAEjC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,MAAK,GAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzB4yB,EAAiB3S,GAEjBqS,EAAwBrS,GAGnBjgB,GACHkzB,GAAajzB,GAGf+yB,GAAehU,EAAYvd,EAAUL,EAAO6e,EAAYhd,EAAM,EAgtBQmyB,CAAiB7pB,EAAMqN,OAAOqD,QAASJ,KAClG9H,EAAAA,GAA2B,GAAGnE,SAQrCylB,GAAcxZ,IAClB,MAAMnoB,EAAS6/B,GAAkBtwB,EAAM,GAAG4Y,MAE1C,OACEne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW+b,MACtCr2B,IAAAA,cAAA,OAAKC,UAAWjK,EAAS,gBAAkB,yBACzCgK,IAAAA,cAAA,qBACY,SACVC,UAAU,eACVye,UAAU,OACVE,KAAK,aACLJ,SAAU3Q,GAnuBL+pB,EAACt1B,EAAeC,KAC/B,MAAMggB,EAAahd,EAAM6V,QAEzB,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAAMoa,OAE/ByY,EAAS5S,GAETsS,EAAatS,GAEb,MAAMvsB,EAAS6/B,GAAkBvzB,GApIX,IAsIjBA,EAAMjO,QArIW,KAqImBiO,EAAMjO,QAAgC2B,GAC7EquB,EAAAA,GAAMC,QAAQjO,EAAAA,GAA8B,GAAGnE,MAGjDojB,GAAehU,EAAYvd,EAAUL,EAAOuxB,EAAe1S,EAAW,EAgtBzCqV,CAAS/pB,EAAMqN,OAAO5Y,MAAMuwB,cAAe1U,GAC9Da,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxDzc,MAAOiD,EAAM,GAAG4Y,KAChBG,KAAK,OACLoB,UAAW,GACXU,aAAa,WAIf,EAIJyX,GAAe1Z,GAEjBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,KAAGC,UAAU,iBAAiBqa,GAAWwd,oBACzC93B,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWmK,cACtCzkB,IAAAA,cAAA,SACEse,KAAK,SACLI,UAAU,MACVpc,MAAOyD,EAAa,GAAGoY,KAAM,YACnB,SACVS,KAAK,aACLJ,SAAU3Q,GAtuBKkqB,EAACz1B,EAAeC,KACvC,MAAMggB,EAAaxc,EAAaqV,QAEhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBwf,EAAgBS,GAEhBrB,EAAoBqB,EAAW,EA2tBJwV,CAAiBlqB,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxD9e,UAAU,eACVmgB,aAAa,WAOjB4X,GAAiB7Z,IACrB,MAAM8Z,EAAS7wB,EAAU,GAAG8K,KAAc9K,UAE1C,OACEpH,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,KAAGC,UAAU,iBAAiBqa,GAAW4d,iBACzCl4B,IAAAA,cAAA,KAAGC,UAAU,iBAAiBqa,GAAWwJ,eACzC9jB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWyJ,iBACtC/jB,IAAAA,cAAA,qBACY,SACVC,UAAU,eACVye,UAAU,OACVE,KAAK,aACLJ,SAAU3Q,GAhvBKmW,EAAC1hB,EAAeC,KACvC,MAAMggB,EAAa9c,EAAc2V,QAEjC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAAMoa,OAE/BiF,EAAiBY,GAEjBxB,EAAiBwB,EAAW,EAquBDyB,CAAiBnW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxDW,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7Erd,MAAOmD,EAAc,GAAG0Y,KACxBG,KAAK,OACL8B,aAAa,SAGfpgB,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW2J,aACtCjkB,IAAAA,cAAA,qBACY,SACVC,UAAU,eACVye,UAAU,OACVE,KAAK,aACLJ,SAAU3Q,GAhvBGqW,EAAC5hB,EAAeC,KACrC,MAAMggB,EAAa5c,EAAYyV,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAAMoa,OAE/BkF,EAAeW,GAEfvB,EAAmBuB,EAAW,EAquBH2B,CAAerW,EAAMqN,OAAO5Y,MAAO6b,GACtDa,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxDW,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7Erd,MAAOqD,EAAY,GAAGwY,KACtBG,KAAK,OACL8B,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,iBACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW6J,mBACtCnkB,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOuD,EAAY,GAAGsY,KAAM,YAClB,SACVS,KAAK,aACLJ,SAAU3Q,GApvBCuW,EAAC9hB,EAAeC,KACrC,MAAMggB,EAAa1c,EAAYuV,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGfyN,EAAMjO,QAAQ,EACfkuB,EAAW,GAAGhgB,KAAWD,EAAMoa,OAE/B2H,EAAAA,GAAMC,QAAQjO,EAAAA,GAAkC,GAAGnE,MAGrD2P,EAAeU,GAEftB,EAAmBsB,EAAW,EAquBD6B,CAAevW,EAAMqN,OAAO5Y,MAAO6b,GACtDa,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxD9e,UAAU,eACVmgB,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWiK,gBACtCvkB,IAAAA,cAACgnB,EAAAA,GAAM,CACLmR,YAAa/C,GAAa,GAAGjX,KAC7BgJ,QAAS8Q,EACTzZ,SAAU3Q,GA9uBEuqB,EAACvqB,EAAYtL,KACnC,MAAMggB,EAAa6S,GAAaha,QAEhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/Bg9B,GAAgB9S,GAEhBuS,EAAgBvS,EAAW,EAmuBE6V,CAAgBvqB,EAAOsQ,GAC1Cle,UAAW,SACXo4B,cAAc,MAIhB,EAIV,OACEr4B,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,IA97BFvb,QA87B0B6gB,QAASrF,GAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,UAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BAjMRke,IAEzBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWyM,WACtC/mB,IAAAA,cAACgnB,EAAAA,GAAM,CACLC,SAAO,EACP3kB,MAAOikB,GAAmBpI,GAC1B+I,mBAAmB,EACnBC,QAAS9F,EAAc1sB,KAAIkZ,IAAmB,CAAEvL,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,SACvF2Q,SAAU3Q,GAAS2hB,GAAe3hB,EAAOsQ,GACzCiJ,gBAAgB,cAChBnnB,UAAU,SACVonB,iBAAkBA,IAAM,KACxBC,mBAAmB,MAoLJC,CAAoBpJ,GACpBwK,GAAWxK,GACXsZ,GAAwBtZ,GACxB8W,EAAc,GAAG9W,MAAUwZ,GAAWxZ,GACtC8W,EAAc,GAAG9W,MAAU0Z,GAAY1Z,GACvC8W,EAAc,GAAG9W,MAAU6Z,GAAc7Z,IAKS,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAG6lB,GAAY,GAAG3H,MAA+B,QAAzBqC,EAAG1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,SAK5F,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,sJCnhCV,MAwqBA,EAxqBwDJ,IAAyc,IAAxc,WAAE+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,cAAEC,EAAa,aAAEC,EAAY,qBAAEG,EAAoB,sBAAEC,EAAqB,UAAEC,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,SAAE+O,EAAQ,cAACC,EAAa,gBAACP,EAAe,cAACD,EAAa,mBAAG+E,EAAkB,uBAAEC,EAAsB,oBAAG3E,EAAmB,oBAAEoX,EAAmB,4BAAEzO,EAA2B,2BAACrQ,EAA0B,4BAAC+e,EAA2B,wBAAEC,GAAwB1mB,EAE3f,MAAO7G,EAAa2O,IAAkBxN,EAAAA,EAAAA,UAAS,CAAC,KACzCyN,EAAYC,IAAiB1N,EAAAA,EAAAA,UAAS,CAAC,MACvCqb,EAAcC,IAAmBtb,EAAAA,EAAAA,UAAS,CAAC,MAC3Cub,EAAgBC,IAAqBxb,EAAAA,EAAAA,UAAS,CAAC,MAC/Cyb,EAAaC,IAAkB1b,EAAAA,EAAAA,UAAS,CAAC,MACzCrG,EAAc+b,IAAmB1V,EAAAA,EAAAA,UAAS,CAAC,MAC3C6e,EAAaC,IAAkB9e,EAAAA,EAAAA,UAAS,CAAC,MAEzC0Z,EAAaC,IAAiB3Z,EAAAA,EAAAA,UAAS,CAAC,KACzC0gB,EAAmBC,IAAwB3gB,EAAAA,EAAAA,WAAS,IACpD2f,EAAgBC,KAAqB5f,EAAAA,EAAAA,UAAS,GAK9CkO,GAAajE,EAAAA,GAAqB,GAAGnE,KAErCgQ,MAAad,IAAYA,EAASe,gBAAmD,KAAlCf,EAASe,cAAczF,QAQ1E,aAAE7B,GAAY,MAAEC,KAAUC,EAAAA,EAAAA,MAqC1BgN,GAAwBA,CAACtL,EAAcla,KAC3C,MAAMylB,EAAoBP,EAAarM,QAEvC,UAAgD,IAAlC4M,EAAkB,GAAGzlB,MACjCylB,EAAkBnzB,KAAK,IAGzBmzB,EAAkB,GAAGzlB,KAAWka,EAEhCuL,EAAkB,GAAGzlB,KAASma,OAE9BgL,EAAgBM,GAEhB9O,EAAa8O,GAEbrL,GAAmBqL,EAAkB,EAmBjCyQ,GAAuBA,CAAChc,EAAcla,KAC1C,MAAMm2B,EAAmBzN,EAAY7P,QAErC,UAA+C,IAAjCsd,EAAiB,GAAGn2B,MAC9Bm2B,EAAiB7jC,KAAK,IAG1B6jC,EAAiB,GAAGn2B,KAAWka,EAE/Bic,EAAiB,GAAGn2B,KAASma,OAE7BwO,EAAewN,GAEfJ,EAAoBI,GAEpBC,GAA0BD,EAAiB,EAOvC/b,GAAsBqL,IAC1B,IAAIjL,EAAeiL,EAAkB3zB,OAAS,EAE9C,IAAK,IAAI2C,EAAI,EAAGA,EAAIgxB,EAAkB3zB,OAAQ2C,IAC5C,GAAyC,KAArCgxB,EAAkB,GAAGhxB,KAAK0lB,OAAe,CAC3CK,GAAe,EACf,MAIJ1D,EAAqB0D,EAAa,EAG9B4b,GAA6BD,IACjC,IAAIE,EAAsBF,EAAiBrkC,OAAS,EAEpD,IAAK,IAAI2C,EAAI,EAAGA,EAAI0hC,EAAiBrkC,OAAQ2C,IAC3C,GAAwC,KAApC0hC,EAAiB,GAAG1hC,KAAK0lB,OAAe,CAC1Ckc,GAAsB,EACtB,MAIJL,EAA4BK,EAAoB,EAG5CnK,GAA4BnL,IAChC,IAAIoL,EAAsBpL,EAAkBjvB,OAAS,EAErD,IAAK,IAAI2C,EAAI,EAAGA,EAAIssB,EAAkBjvB,OAAQ2C,IAC5C,GAAyC,KAArCssB,EAAkB,GAAGtsB,KAAK0lB,OAAe,CAC3CgS,GAAsB,EACtB,MAIJ7E,EAA4B6E,EAAoB,EAG5CzG,GAAuBrM,IAC3B,IAAIsM,GAAgB,EAEpB,IAAK,IAAIlxB,EAAI,EAAGA,EAAI4kB,EAAiBvnB,OAAQ2C,IAC3C,GAAgC,GAA5B4kB,EAAiB,GAAG5kB,KAAW,CACjCkxB,GAAgB,EAChB,MAIJ5O,EAAsB4O,EAAc,EAKhChL,GAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,GAAiB/a,SAInByW,EAAUzW,GACV+a,GAAiB/a,QAGnByW,EAAUzW,GACV+a,GAAiB/a,IAIfya,GAAWA,KACfjE,EAAO,GAEP,MAAMiP,EAAoBP,EAAarM,QACjCgN,EAAoBP,EAAYzM,QAChCiN,EAAsBV,EAAevM,QACrCkI,EAAoBvd,EAAaqV,QACjC4T,EAAoB/D,EAAY7P,QAGvC2R,GAAqB,GACrBf,GAAkB,GAClBtE,EAAgBM,GAChBF,EAAeM,GACfR,EAAkBS,GAClBvG,EAAgBwB,GAChB4H,EAAe8D,GAEfnO,EAAcuH,GACdtH,EAAgBuH,GAChBnP,EAAa8O,GACb9G,EAAoBoC,GACpBgV,EAAoBtJ,GAEpB3V,GAAqB,GACrBwM,GAAuB,GACvB0S,GAA4B,EAAM,EAI7Bjb,GAAoB/a,IACxB,MAAMwZ,EAAUlD,EAAWlhB,MAAKokB,GAAkC,WAAvBA,EAAQtB,aAE7CmB,EAAmB3Q,EAAYmQ,QAC/BgB,EAAkBvC,EAAWuB,QAC7B4M,EAAoBP,EAAarM,QACjC+M,EAAkBrC,EAAY1K,QAC9BgN,EAAoBP,EAAYzM,QAChCiN,EAAsBV,EAAevM,QACrCkI,EAAoBvd,EAAaqV,QACjC4T,EAAoB/D,EAAY7P,aAGM,IAAjCQ,EAAiB,GAAGrZ,OACzBqZ,EAAiBvnB,OAAS,EAC5BunB,EAAiByB,OAAO9a,EAAO,GAE/BqZ,EAAiB,GAAKhkB,SAASmkB,EAASrC,cAAe,UAIhB,IAAhC0C,EAAgB,GAAG7Z,OACxB6Z,EAAgB/nB,OAAS,EAC3B+nB,EAAgBiB,OAAO9a,EAAO,GAE9B6Z,EAAgB,GAAK,SAIoB,IAAlC4L,EAAkB,GAAGzlB,OAC1BylB,EAAkB3zB,OAAS,EAC7B2zB,EAAkB3K,OAAO9a,EAAO,GAEhCylB,EAAkB,GAAK,SAGgB,IAAhCG,EAAgB,GAAG5lB,OACxB4lB,EAAgB9zB,OAAS,EAC3B8zB,EAAgB9K,OAAO9a,EAAO,GAE9B4lB,EAAgB,GAAK,EAGvBpC,EAAcoC,GAEdvC,EAAmBuC,SAGwB,IAAlCC,EAAkB,GAAG7lB,OAC1B6lB,EAAkB/zB,OAAS,EAC7B+zB,EAAkB/K,OAAO9a,EAAO,GAEhC6lB,EAAkB,GAAK,SAIoB,IAApCC,EAAoB,GAAG9lB,OAC5B8lB,EAAoBh0B,OAAS,EAC/Bg0B,EAAoBhL,OAAO9a,EAAO,GAElC8lB,EAAoB,GAAK,SAIgB,IAAlC/E,EAAkB,GAAG/gB,OACxB+gB,EAAkBjvB,OAAS,EAC3BivB,EAAkBjG,OAAO9a,EAAO,GAEhC+gB,EAAkB,GAAK,SAIc,IAAlC0L,EAAkB,GAAGzsB,OACxBysB,EAAkB36B,OAAS,EAC3B26B,EAAkB3R,OAAO9a,EAAO,GAEhCysB,EAAkB,GAAK,IAQ/BpV,EAAegC,GACf9B,EAAcsC,GACdsL,EAAgBM,GAChBF,EAAeM,GACfR,EAAkBS,GAClBvG,EAAgBwB,GAChB4H,EAAe8D,GAGfnO,EAAcuH,GACdtH,EAAgBuH,GAChBnP,EAAa8O,GACb/O,EAAc2C,GACdsF,EAAoBoC,GACpBgV,EAAoBtJ,GAEpB1I,GAAoB8B,GACpBzL,GAAmBqL,GACnBC,GAAoBrM,GACpB6S,GAAyBnL,GAC1BqV,GAA0B3J,EAAkB,GAI7CnY,EAAAA,EAAAA,YAAU,KACR,MAAMkF,EAAUlD,EAAWlhB,MAAKokB,GAAkC,WAAvBA,EAAQtB,aAEnD,IAAI8C,EAAmBtlB,OAAO8jB,aAAO,EAAPA,EAASrC,cAAe,IAClD8D,EAAoBxX,OAAO+V,aAAO,EAAPA,EAASrC,cAAe,IAEvD,MAAMiE,EAAsC,GACtCD,EAA+B,GAC/B4K,EAAiC,GACjCC,EAAmC,GACnC1B,EAA6B,GAC7B3D,EAA4B,GAC5BC,EAA0B,GAC1BwM,EAAsC,GACtCC,EAAqC,GAE3C,GAAIrW,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,IAAIkU,EAA4BqO,EAAU,GAAGviB,KAAwB,kBAErE,MAAM8vB,EAAoBvN,EAAU,GAAGviB,KAAgB,UAEvD6vB,EAAiBhyB,KAAKiyB,EAAUxlB,MAAM,KAAKjN,QAC3C6uB,EAAgBruB,KAAKiyB,GACrB3D,EAActuB,KAAK0kB,EAAU,GAAGviB,KAAc,SAC9C24B,EAA0B96B,KAAK0kB,EAAU,GAAGviB,KAAkB,aAC9D44B,EAA0B/6B,KAAK0kB,EAAU,GAAGviB,KAAkB,aAG9DsxB,EAAqBzzB,KAAK0kB,EAAU,GAAGviB,KAAY,MAAE,IAErD2mB,EAA0B9oB,KAAKqW,GAIjCwc,EAAgBY,GAChBxG,EAAgB6N,GAChBzE,EAAe0E,GAGf1W,EAAaoP,GAGb3L,GAAmB2L,GACnBqQ,GAA0B/I,GAC1BnB,GAAyBkB,QAEzBpH,EAAuB1zB,KAAK2oB,GAC5BG,EAA0B9oB,KAAK0oB,GAC/BG,EAAmB7oB,KAAK,IACxBgyB,EAAiBhyB,KAAK,GACtBquB,EAAgBruB,KAAK,IACrBsuB,EAActuB,KAAK,IAIlBqtB,IAAaoG,EAAqBj0B,QAAS,IAG1Ci0B,EAAqBzzB,KAAKusB,EAASoH,UAAU,IAAIpH,EAASqH,UAC1DmH,EAA0B/6B,KAAKusB,EAASyP,qBACxClB,EAA0B96B,KAAKusB,EAAS0P,cAG5CpJ,EAAgBY,GAChB1O,EAAe+D,GACf7D,EAAc4D,GACdqI,EAAcc,GACdiB,EAAe5E,GACf0E,EAAkBzE,GAClBrB,EAAgB6N,GAChBzE,EAAe0E,GAEfhK,EAAmBiB,GACnBhG,EAAcqC,GACdpC,EAAgBqC,GAEhBmD,GAAoBpD,GAEpBjK,EAAc0E,GACdzE,EAAaoP,GACbpH,EAAoByO,GACpB2I,EAAoB1I,GAEpB3H,GAAoBtK,GACpBhB,GAAmB2L,GACnBqQ,GAA0B/I,GAC1BnB,GAAyBkB,EAA0B,GAElD,CAACpW,IAEJ,MAAMgN,GAAsBhkB,IAC1B,MAAMikB,EAAmD,GAEzD,GAAIqB,EAAYxzB,OAAS,EAAG,CAC1B,MAAM8xB,EAAmB0B,EAAYzM,QAC/BgL,EAAeuB,EAAevM,QAEpC,QAA4C,IAAjC+K,EAAiB,GAAG5jB,MACQ,KAAjC4jB,EAAiB,GAAG5jB,KAAiB,CACvC,MAAMkkB,EAAaN,EAAiB,GAAG5jB,KAASjB,MAAM,KAChDolB,EAAWN,EAAa,GAAG7jB,KAASjB,MAAM,KAEhD,IAAK,IAAItK,EAAI,EAAGA,EAAIyvB,EAAWpyB,SAAU2C,EACvCwvB,EAAa3xB,KAAK,CAAEyN,MAAOokB,EAAS,GAAG1vB,KAAMqB,MAAOouB,EAAW,GAAGzvB,QAM1E,OAAOwvB,CAAY,EAGfF,GAAuBoC,IAC3B,IAAI9B,EAAiB8B,EAAiBr0B,OAAS,EAE/C,IAAK,IAAI2C,EAAI,EAAGA,EAAI0xB,EAAiBr0B,OAAQ2C,IAC3C,GAA0D,KAAtD0xB,EAAiB,GAAG1xB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC5DkK,GAAiB,EACjB,MAIJf,EAAuBe,EAAe,EAiBlCZ,GAAyBA,CAACnY,EAAYtL,KAC1C,IAAI0jB,EAA0B,GAC1BC,EAAwB,GAG1BD,GAAmBpY,EAAMxV,MACzB6tB,GAAiBrY,EAAMvL,MAGzB,MAAM6jB,EAAmB0B,EAAYzM,QAC/BgL,EAAeuB,EAAevM,QAEpC,UAA+C,IAAjC+K,EAAiB,GAAG5jB,MAChC4jB,EAAiBtxB,KAAK,IAGxB,UAA2C,IAA7BuxB,EAAa,GAAG7jB,MAC5B6jB,EAAavxB,KAAK,IAGpBsxB,EAAiB,GAAG5jB,KAAW0jB,EAC/BG,EAAa,GAAG7jB,KAAW2jB,EAE3B,IAAI8K,EAA8B3P,EAAc1pB,MAAKoK,GAAWA,EAAY,IAAK8L,EAAMvL,QAEvFyqB,GAAsBiE,EAAaC,mBACnCjF,GAAkBgF,EAAaE,oBAE/BpJ,EAAe3B,GACfyB,EAAkBxB,GAElBvF,EAAcsF,GACdrF,EAAgBsF,GA9CIC,EAAC7b,EAAejI,KACpC,MAAMggB,EAAauD,EAAY1K,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,GAGlB0tB,EAAW,GAAGhgB,KAAWiI,EAEzBub,EAAcxD,GAEdqD,EAAmBrD,EAAW,EAqC9B8D,CAAcxY,EAAMxZ,OAAQkO,GAE5B+jB,GAAoBH,EAAiB,EAwBjCwC,GAAcxK,GAEhBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,qBAAqBqa,GAAWmN,cAC7CznB,IAAAA,cAAA,SACEse,KAAK,OACLhc,MAAOmlB,EAAa,GAAGtJ,KACvBO,UAAU,OAAM,YACN,SACVE,KAAK,aACLJ,SAAW3Q,GA9gBM+a,EAAC/a,EAAYtL,KACtC,IAAImd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAElFoI,GAAsBla,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EA2gB/CqmB,CAAmB/a,EAAOsQ,GAC/Ca,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OAOjFkZ,GAAqB1a,GAEvBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,qBAAqBu4B,EAAwBle,GAAW2Q,YAAY3Q,GAAWwe,yBAC5F94B,IAAAA,cAAA,SACEse,KAAK,OACLhc,MAAO2oB,EAAY,GAAG9M,KACtBO,UAAU,OAAM,YACN,SACVE,KAAK,aACLJ,SAAW3Q,GA3hBakrB,EAAClrB,EAAYtL,KAC7C,IAAImd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAElF8Y,GAAqB5qB,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAwhB9Cw2B,CAA0BlrB,EAAOsQ,GACtDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OAOjF6T,GAAwBrV,GAE1Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWmZ,aACtCzzB,IAAAA,cAAA,SACEse,KAAK,SACLI,UAAU,MACVpc,MAAOyD,EAAa,GAAGoY,KAAM,YACnB,SACVS,KAAK,aACLJ,SAAU3Q,GApgBI6W,EAACpiB,EAAeC,KACtC,MAAMggB,EAAaxc,EAAaqV,QAEhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBwf,EAAgBS,GAEhBrB,EAAoBqB,GAEpBkM,GAAyBlM,EAAW,EAufTmC,CAAgB7W,EAAMqN,OAAO5Y,MAAO6b,GACvDa,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxD9e,UAAU,eACVmgB,aAAa,WASvB,OACEpgB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,IA/kBFvb,QA+kB0B6gB,QAASrF,GAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IACTne,IAAAA,cAAA,OAAKC,UAAU,eACpBD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,iBAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BACO,IAAnB8rB,GAAwB/rB,IAAAA,cAAA,KAAGC,UAAU,qBAAqBqa,GAAWga,eAAgBvI,GAjG/E5N,IAEzBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWia,eACtCv0B,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOikB,GAAmBpI,GAC1B+I,mBAAmB,EACnBC,QAAS9F,EAAc1sB,KAAIkZ,IAAmB,CAAEvL,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,SACvF2Q,SAAU3Q,GAASmY,GAAuBnY,EAAOsQ,GACjDiJ,gBAAgB,cAChBnnB,UAAU,SACVonB,iBAAkBA,IAAM,KACxBC,mBAAmB,MAqFNC,CAAoBpJ,GACpBwK,GAAWxK,GACX0a,GAAkB1a,GAClBqV,GAAoBrV,IAO8B,IAAAqC,EAAAC,EAAzD,IAAK7hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IACI,KAAb,QAAtBugB,EAAA1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,YAAgD,IAA1BkT,EAAY,GAAGkT,KAAyBlT,EAAY,GAAGkT,KAAS,IAA4B,QAAzBsC,EAAG3N,EAAgB9c,cAAM,IAAAyqB,OAAA,EAAtBA,EAAwB1oB,QAMtJ,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACXtO,GAAcmH,GAA8BsT,GAAqB9sB,IAAAA,cAAA,OAAKC,UAAU,UACjFD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,MAKlE,UAObvf,IAAayT,GAAcmH,GAA8BsT,GAC1D9sB,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,gJCjqBV,MA6+BA,EA7+B0DJ,IAAkhB,IAAjhB,WAAE+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,cAAEC,EAAa,aAAEC,EAAY,qBAAEG,EAAoB,sBAAEC,EAAqB,UAAEC,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,SAAE+O,EAAQ,cAACC,EAAa,gBAACP,EAAe,cAACD,EAAa,mBAAG+E,EAAkB,uBAAEC,EAAsB,oBAAG3E,EAAmB,sBAAE0I,EAAqB,6BAAEE,EAA4B,4BAAED,EAA2B,2BAAErQ,EAA0B,gBAAEqR,EAAe,kBAAEmO,EAAiB,0BAAElO,EAAyB,6BAAEC,GAA6BjZ,EAEtkB,IAAIkZ,EAAuB/yB,OAAO4yB,GAClC,MAAO5f,EAAa2O,IAAkBxN,EAAAA,EAAAA,UAAS,CAAC4e,KACzCnR,EAAYC,IAAiB1N,EAAAA,EAAAA,UAAS,CAAC,MACvCqb,EAAcC,IAAmBtb,EAAAA,EAAAA,UAAS,CAAC,MAC3Cub,EAAgBC,IAAqBxb,EAAAA,EAAAA,UAAS,CAAC,MAC/Cyb,EAAaC,IAAkB1b,EAAAA,EAAAA,UAAS,CAAC,MACzCrG,EAAc+b,IAAmB1V,EAAAA,EAAAA,UAAS,CAAC,MAC3C+e,EAAeC,IAAoBhf,EAAAA,EAAAA,UAAS,CAAC,MAC7Cif,EAAuBC,KAA4Blf,EAAAA,EAAAA,UAAS,CAAC,MAE7D0Z,GAAaC,KAAiB3Z,EAAAA,EAAAA,UAAS,CAAC,KACzC0gB,GAAmBC,KAAwB3gB,EAAAA,EAAAA,WAAS,IACpD2f,GAAgBC,KAAqB5f,EAAAA,EAAAA,UAAS,IAE7ClF,GAAqBylB,KAA0BvgB,EAAAA,EAAAA,UAAS,EAAC,KACzDwgB,GAAwBC,KAA6BzgB,EAAAA,EAAAA,UAAS,CAAC,IAIhEkO,GAAajE,EAAAA,GAAiC,GAAGnE,KAEjDgQ,MAAad,IAAYA,EAASe,gBAAmD,KAAlCf,EAASe,cAAczF,QAQ1E,aAAE7B,GAAY,MAAEC,KAAUC,EAAAA,EAAAA,MAuG1BgN,GAAwBA,CAACtL,EAAcla,KAC3C,MAAMylB,EAAoBP,EAAarM,QAEvC,UAAgD,IAAlC4M,EAAkB,GAAGzlB,MACjCylB,EAAkBnzB,KAAK,IAGzBmzB,EAAkB,GAAGzlB,KAAWka,EAEhCuL,EAAkB,GAAGzlB,KAASma,OAE9BgL,EAAgBM,GAEhB9O,EAAa8O,GAEbrL,GAAmBqL,EAAkB,EAmBjCoF,GAAyBA,CAAC3Q,EAAcla,KAC5C,MAAM8qB,EAAqBlC,EAAc/P,QAEzC,UAAiD,IAAnCiS,EAAmB,GAAG9qB,MAChC8qB,EAAmBx4B,KAAK,IAG5Bw4B,EAAmB,GAAG9qB,KAAWka,EAEjC4Q,EAAmB,GAAG9qB,KAASma,OAE/B0O,EAAiBiC,GAEjBzD,EAAsByD,EAAmB,EAqBrC1Q,GAAsBqL,IAC1B,IAAIjL,EAAeiL,EAAkB3zB,OAAS,EAE9C,IAAK,IAAI2C,EAAI,EAAGA,EAAIgxB,EAAkB3zB,OAAQ2C,IAC5C,GAAyC,KAArCgxB,EAAkB,GAAGhxB,KAAK0lB,OAAe,CAC3CK,GAAe,EACf,MAIJ1D,EAAqB0D,EAAa,EAG9B0R,GAA4BnL,IAChC,IAAIoL,EAAsBpL,EAAkBjvB,OAAS,EAErD,IAAK,IAAI2C,EAAI,EAAGA,EAAIssB,EAAkBjvB,OAAQ2C,IAC5C,GAAyC,KAArCssB,EAAkB,GAAGtsB,KAAK0lB,OAAe,CAC3CgS,GAAsB,EACtB,MAIJ7E,EAA4B6E,EAAoB,EAG5CzG,GAAuBrM,IAC3B,IAAIsM,GAAgB,EAEpB,IAAK,IAAIlxB,EAAI,EAAGA,EAAI4kB,EAAiBvnB,OAAQ2C,IAC3C,GAAgC,GAA5B4kB,EAAiB,GAAG5kB,KAAW,CACjCkxB,GAAgB,EAChB,MAIJ5O,EAAsB4O,EAAc,EAKhChL,GAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,GAAiB/a,SAInByW,EAAUzW,GACV+a,GAAiB/a,QAGnByW,EAAUzW,GACV+a,GAAiB/a,IAIfya,GAAWA,KAAK,IAAAwD,EACpBzH,EAAO,GAEP,MAAMiP,EAAoBP,EAAarM,QACjCgN,EAAoBP,EAAYzM,QAChCiN,EAAsBV,EAAevM,QACrCkI,EAAoBvd,EAAaqV,QACjC0T,EAAsB3D,EAAc/P,QACpC2T,EAA6B1D,EAAsBjQ,QACnDQ,EAAmB3Q,EAAYmQ,QA0BrC,GAzBAQ,EAAiB/mB,KAA2B,QAAvB2rB,EAAC1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,OAE9Cg1B,IAAqB,GACrBf,GAAkB,GAClBtE,EAAgBM,GAChBF,EAAeM,GACfR,EAAkBS,GAClBvG,EAAgBwB,GAChB8H,EAAiB0D,GACjBxD,GAAyByD,GACzBnV,EAAegC,GAEfiF,EAAcuH,GACdtH,EAAgBuH,GAChBnP,EAAa8O,GACb9G,EAAoBoC,GACpBsG,EAAsBkF,GACtBhF,EAA6BiF,GAC7B9V,EAAc2C,GAEdvC,GAAqB,GACrBwM,GAAuB,GAEvBoC,GAAoBrM,GAES,IAAzByF,EAAchtB,OAAc,CAE9B,MAAMwZ,EAAQwT,EAAc,GACtBkO,EAAW,CAAEjtB,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,MAC1D2hB,GAAeD,EAAUnH,EAAkB/zB,QAC3CwxB,GAAuB,KAMrBvI,GAAoB/a,IACxB,MAAMqZ,EAAmB3Q,EAAYmQ,QAC/BgB,EAAkBvC,EAAWuB,QAC7B4M,EAAoBP,EAAarM,QACjC+M,EAAkBrC,GAAY1K,QAC9BgN,EAAoBP,EAAYzM,QAChCiN,EAAsBV,EAAevM,QACrCkI,EAAoBvd,EAAaqV,QACjC0T,EAAsB3D,EAAc/P,QACpC2T,EAA6B1D,EAAsBjQ,QACnDqU,EAA2BvoB,GAAoBkU,QAC/CsU,EAA8B9C,GAAuBxR,aAGf,IAAjCQ,EAAiB,GAAGrZ,OACzBqZ,EAAiBvnB,OAAS,EAC5BunB,EAAiByB,OAAO9a,EAAO,GAE/BqZ,EAAiB,GAAKoP,QAIiB,IAAhC5O,EAAgB,GAAG7Z,OACxB6Z,EAAgB/nB,OAAS,EAC3B+nB,EAAgBiB,OAAO9a,EAAO,GAE9B6Z,EAAgB,GAAK,SAIoB,IAAlC4L,EAAkB,GAAGzlB,OAC1BylB,EAAkB3zB,OAAS,EAC7B2zB,EAAkB3K,OAAO9a,EAAO,GAEhCylB,EAAkB,GAAK,SAGgB,IAAhCG,EAAgB,GAAG5lB,OACxB4lB,EAAgB9zB,OAAS,EAC3B8zB,EAAgB9K,OAAO9a,EAAO,GAE9B4lB,EAAgB,GAAK,EAGvBpC,GAAcoC,GAEdvC,EAAmBuC,SAGwB,IAAlCC,EAAkB,GAAG7lB,OAC1B6lB,EAAkB/zB,OAAS,EAC7B+zB,EAAkB/K,OAAO9a,EAAO,GAEhC6lB,EAAkB,GAAK,SAIoB,IAApCC,EAAoB,GAAG9lB,OAC5B8lB,EAAoBh0B,OAAS,EAC/Bg0B,EAAoBhL,OAAO9a,EAAO,GAElC8lB,EAAoB,GAAK,SAIgB,IAAlC/E,EAAkB,GAAG/gB,OACxB+gB,EAAkBjvB,OAAS,EAC3BivB,EAAkBjG,OAAO9a,EAAO,GAEhC+gB,EAAkB,GAAK,SAIgB,IAApCwL,EAAoB,GAAGvsB,OAC1BusB,EAAoBz6B,OAAS,EAC7By6B,EAAoBzR,OAAO9a,EAAO,GAElCusB,EAAoB,GAAK,SAIqB,IAA3CC,EAA2B,GAAGxsB,OACjCwsB,EAA2B16B,OAAS,EACtC06B,EAA2B1R,OAAO9a,EAAO,GAEzCwsB,EAA2B,GAAK,SAIc,IAAzCU,EAAyB,GAAGltB,OACjCktB,EAAyBp7B,OAAS,EACpCo7B,EAAyBpS,OAAO9a,EAAO,GAEvCktB,EAAyB,IAAK,QAIqB,IAA5CC,EAA4B,GAAGntB,OACpCmtB,EAA4Br7B,OAAS,EACvCq7B,EAA4BrS,OAAO9a,EAAO,GAE1CmtB,EAA4B,GAAK,GAIrC9V,EAAegC,GACf9B,EAAcsC,GACdsL,EAAgBM,GAChBF,EAAeM,GACfR,EAAkBS,GAClBvG,EAAgBwB,GAChB8H,EAAiB0D,GACjBxD,GAAyByD,GACzBpC,GAAuB8C,GACvB5C,GAA0B6C,GAG1B7O,EAAcuH,GACdtH,EAAgBuH,GAChBnP,EAAa8O,GACb/O,EAAc2C,GACdsF,EAAoBoC,GACpBsG,EAAsBkF,GACtBhF,EAA6BiF,GAC7BjE,EAA0B2E,GAC1B1E,EAA6B2E,GAE7BpJ,GAAoB8B,GACpBzL,GAAmBqL,GACnBC,GAAoBrM,GACpB6S,GAAyBnL,EAAkB,GAG7CzM,EAAAA,EAAAA,YAAU,KACR,MAAM6G,EAA+B,GAC/B4K,EAAiC,GACjCzB,EAA6B,GAC7B3D,EAA4B,GAC5BC,EAA0B,GAC1BwM,EAAsC,GACtCE,EAAuC,GACvCC,EAA8C,GAC9ClU,EAA6B,GAC7ByU,EAAmC,GACnCX,EAAsC,GAE5C,GAAInW,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAM8vB,EAAoBvN,EAAU,GAAGviB,KAAgB,UACjDs5B,EAAe/W,EAAU,GAAGviB,KAA0B,oBAAIuiB,EAAU,GAAGviB,KAA0B,oBAAI,EAErGu5B,EAAWC,SAASC,eAAe,aAAez5B,GAahC,IAAAypB,EAGnBiQ,EAHL,GAXIH,IAGAA,EAAShS,QAFS,IAAjB+R,GAUgB,IAAjBA,EACF1U,EAAiB/mB,KAA2B,QAAvB4rB,EAAC3N,EAAgB9c,cAAM,IAAAyqB,OAAA,EAAtBA,EAAwB1oB,YAG9C6jB,EAAiB/mB,MAA2B,QAAtB67B,EAAA5d,EAAgB9c,cAAM,IAAA06B,OAAA,EAAtBA,EAAwB34B,OAASizB,GAGzDnE,EAAiBhyB,KAAKiyB,EAAUxlB,MAAM,KAAKjN,QAC3C6uB,EAAgBruB,KAAKiyB,GACrB3D,EAActuB,KAAK0kB,EAAU,GAAGviB,KAAc,SAC9C24B,EAA0B96B,KAAK0kB,EAAU,GAAGviB,KAAkB,aAC9D64B,EAA4Bh7B,KAAK0kB,EAAU,GAAGviB,KAAkB,aAChE84B,EAAmCj7B,KAAK0kB,EAAU,GAAGviB,KAA2B,sBAChFq5B,EAAsBx7B,KAAsB,IAAjBy7B,GAC3BZ,EAA4B76B,KAAKy7B,GACjChI,EAAqBzzB,KAAK0kB,EAAU,GAAGviB,KAAY,MAAE,IAGvD,GAA6B,IAAzBqqB,EAAchtB,OAAc,CAC9B,MAAMwZ,EAAQwT,EAAc,GACtBkO,EAAW,CAAEjtB,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,MAE1D8iB,GAAqBpB,EAAUhW,EAAUllB,QACzCwxB,GAAuB,GAKzB6B,EAAgBY,GAChBxG,EAAgB6N,GAChBvE,EAAiByE,GACjBvE,GAAyBwE,GAGzB5W,EAAaoP,GACbpH,EAAoByO,GAGpBhT,GAAmB2L,GACnBmG,GAAyBkB,OACpB,KAAAiB,EACLlT,EAAmB7oB,KAAK,IACxBgyB,EAAiBhyB,KAAK,GACtBquB,EAAgBruB,KAAK,IACrBsuB,EAActuB,KAAK,IACnBg7B,EAA4Bh7B,KAAK,IACjCi7B,EAAmCj7B,KAAK,IACxC+mB,EAAiB/mB,KAA2B,QAAvB+7B,EAAC9d,EAAgB9c,cAAM,IAAA46B,OAAA,EAAtBA,EAAwB74B,OAiChD,GA9BGmqB,IAAaoG,EAAqBj0B,QAAS,IAE1Ci0B,EAAqBzzB,KAAKusB,EAASoH,UAAY,IAAMpH,EAASqH,UAC9DkH,EAA0B96B,KAAKusB,EAAS0P,cAG5CpJ,EAAgBY,GAChBxO,EAAc4D,GACdqI,GAAcc,GACd/E,EAAgB6N,GAChBvE,EAAiByE,GACjBvE,GAAyBwE,GACzBnD,GAAuB0D,GACvBxD,GAA0B6C,GAC1B9V,EAAegC,GAEfgK,EAAmBiB,GACnB5N,EAAc2C,GACd1C,EAAaoP,GACbpH,EAAoByO,GACpB/F,EAAsBiG,GACtB/F,EAA6BgG,GAE7B7H,GAAoBrM,GACpBe,GAAmB2L,GACnBmG,GAAyBkB,GAEzB7E,EAA0BuF,GAC1BtF,EAA6B2E,GAEA,IAAzBrO,EAAchtB,QAAgBklB,EAAUllB,QAAU,EAAG,CAEvD,MAAMwZ,EAAQwT,EAAc,GACtBkO,EAAW,CAAEjtB,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,MAE1D2hB,GAAeD,EAAU,GACzB1J,GAAuB,QAGjBxE,EAAchtB,OAAS,IAC7ByzB,EAAe5E,GACf0E,EAAkBzE,GAClBtC,EAAcqC,GACdpC,EAAgBqC,GAChBmD,GAAoBpD,MAIrB,CAAC3J,IAEJ,MAAMgN,GAAsBhkB,IAC1B,MAAMikB,EAAmD,GAEzD,GAAIqB,EAAYxzB,OAAS,EAAG,CAC1B,MAAM8xB,EAAmB0B,EAAYzM,QAC/BgL,EAAeuB,EAAevM,QAEpC,QAA4C,IAAjC+K,EAAiB,GAAG5jB,MACQ,KAAjC4jB,EAAiB,GAAG5jB,KAAiB,CACvC,MAAMkkB,EAAaN,EAAiB,GAAG5jB,KAASjB,MAAM,KAChDolB,EAAWN,EAAa,GAAG7jB,KAASjB,MAAM,KAEhD,IAAK,IAAItK,EAAI,EAAGA,EAAIyvB,EAAWpyB,SAAU2C,EACvCwvB,EAAa3xB,KAAK,CAAEyN,MAAOokB,EAAS,GAAG1vB,KAAMqB,MAAOouB,EAAW,GAAGzvB,QAM1E,OAAOwvB,CAAY,EAGfF,GAAuBoC,IAC3B,IAAI9B,EAAiB8B,EAAiBr0B,OAAS,EAE/C,IAAK,IAAI2C,EAAI,EAAGA,EAAI0xB,EAAiBr0B,OAAQ2C,IAC3C,GAA0D,KAAtD0xB,EAAiB,GAAG1xB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC5DkK,GAAiB,EACjB,MAIJf,EAAuBe,EAAe,EAGlCP,GAAgBA,CAAC7b,EAAejI,KACpC,MAAMggB,EAAauD,GAAY1K,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,GAGlB0tB,EAAW,GAAGhgB,KAAWiI,EAEzBub,GAAcxD,GAEdqD,EAAmBrD,EAAW,EAG1ByD,GAAyBA,CAACnY,EAAYtL,KAC1C,IAAI0jB,EAA0B,GAC1BC,EAAwB,GAG1BD,GAAmBpY,EAAMxV,MACzB6tB,GAAiBrY,EAAMvL,MAGzB,MAAM6jB,EAAmB0B,EAAYzM,QAC/BgL,EAAeuB,EAAevM,QAEpC,UAA+C,IAAjC+K,EAAiB,GAAG5jB,MAChC4jB,EAAiBtxB,KAAK,IAGxB,UAA2C,IAA7BuxB,EAAa,GAAG7jB,MAC5B6jB,EAAavxB,KAAK,IAGpBsxB,EAAiB,GAAG5jB,KAAW0jB,EAC/BG,EAAa,GAAG7jB,KAAW2jB,EAE3B,IAAI8K,EAA8B3P,EAAc1pB,MAAKoK,GAAWA,EAAY,IAAK8L,EAAMvL,QAEvFyqB,IAAsBiE,EAAaC,mBACnCjF,GAAkBgF,EAAaE,oBAE/BpJ,EAAe3B,GACfyB,EAAkBxB,GAElBvF,EAAcsF,GACdrF,EAAgBsF,GAEhBC,GAAcxY,EAAMxZ,OAAQkO,GAE5B+jB,GAAoBH,EAAiB,EAGjCwK,GAAuBA,CAAC9iB,EAAYsjB,KACxC,IAAIlL,EAA0B,GAC1BC,EAAwB,GAG5BD,GAAmBpY,EAAMxV,MACzB6tB,GAAiBrY,EAAMvL,MAGvB,MAAM6jB,EAAmB0B,EAAYzM,QAC/BgL,EAAeuB,EAAevM,QAEpC,IAAI,IAAIpkB,EAAE,EAAGA,EAAGm6B,EAAYn6B,IAC5B,CAEA,UAA2C,IAA7BmvB,EAAiB,GAAGnvB,MAChCmvB,EAAiBtxB,KAAK,IAGxB,UAAuC,IAAzBuxB,EAAa,GAAGpvB,MAC5BovB,EAAavxB,KAAK,IAEpBsxB,EAAiB,GAAGnvB,KAAOivB,EAC3BG,EAAa,GAAGpvB,KAAOkvB,EAIvB,IAAI8K,EAA8B3P,EAAc1pB,MAAKoK,GAAWA,EAAY,IAAK8L,EAAMvL,QACvFyqB,IAAsBiE,EAAaC,mBACnCjF,GAAkBgF,EAAaE,oBAE/BpJ,EAAe3B,GACfyB,EAAkBxB,GAElBvF,EAAcsF,GACdrF,EAAgBsF,EAAa,EAMzBoJ,GAAiBA,CAAC3hB,EAAYtL,KAClC,IAAI0jB,EAA0B,GAC1BC,EAAwB,GAG5BD,GAAmBpY,EAAMxV,MACzB6tB,GAAiBrY,EAAMvL,MAGvB,MAAM6jB,EAAmB0B,EAAYzM,QAC/BgL,EAAeuB,EAAevM,QAEpC,UAA+C,IAAjC+K,EAAiB,GAAG5jB,MAChC4jB,EAAiBtxB,KAAK,IAGxB,UAA2C,IAA7BuxB,EAAa,GAAG7jB,MAC5B6jB,EAAavxB,KAAK,IAGpBsxB,EAAiB,GAAG5jB,KAAW0jB,EAC/BG,EAAa,GAAG7jB,KAAW2jB,EAE3B,IAAI8K,EAA8B3P,EAAc1pB,MAAKoK,GAAWA,EAAY,IAAK8L,EAAMvL,QAEvFyqB,IAAsBiE,EAAaC,mBACnCjF,GAAkBgF,EAAaE,oBAE/BpJ,EAAe3B,GACfyB,EAAkBxB,GAElBvF,EAAcsF,GACdrF,EAAgBsF,GAEhBC,GAAc,EAAG9jB,EAAM,EAiFnBomB,GAAcxK,GAEhBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,qBAAqBqa,GAAWmC,MAC7Czc,IAAAA,cAAA,SACEse,KAAK,OACLhc,MAAOmlB,EAAa,GAAGtJ,KACvBO,UAAU,OAAM,YACN,SACVE,KAAK,aACLJ,SAAW3Q,GA1uBM+a,EAAC/a,EAAYtL,KACtC,IAAImd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAElFoI,GAAsBla,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAuuB/CqmB,CAAmB/a,EAAOsQ,GAC/Ca,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OAOjF+U,GAAuBvW,GAEzBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,qBAAqBqa,GAAWma,eAC7Cz0B,IAAAA,cAAA,SACEse,KAAK,OACLhc,MAAO6oB,EAAc,GAAGhN,KACxBO,UAAU,OAAM,YACN,SACVE,KAAK,aACLJ,SAAW3Q,GArvBesf,EAACtf,EAAYtL,KAC/C,IAAImd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAElFyN,GAAuBvf,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAkvBhD4qB,CAA4Btf,EAAOsQ,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OAOjF6T,GAAwBrV,GAE1Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWmZ,aACtCzzB,IAAAA,cAAA,SACEse,KAAK,SACLI,UAAU,MACVpc,MAAOyD,EAAa,GAAGoY,KAAM,YACnB,SACVS,KAAK,aACLJ,SAAU3Q,GA3tBI6W,EAACpiB,EAAeC,KACtC,MAAMggB,EAAaxc,EAAaqV,QAEhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBwf,EAAgBS,GAEhBrB,EAAoBqB,GAEpBkM,GAAyBlM,EAAW,EA8sBTmC,CAAgB7W,EAAMqN,OAAO5Y,MAAO6b,GACvDa,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxD9e,UAAU,eACVmgB,aAAa,WAOjB+S,GAAiChV,GAEnCne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW8Y,sBACtCpzB,IAAAA,cAAA,SACEse,KAAK,SACLI,UAAU,MACVpc,MAAO+oB,EAAsB,GAAGlN,KAAM,YAC5B,SACVS,KAAK,aACLJ,SAAU3Q,GA/sBcwlB,EAAC/wB,EAAeC,KAChD,MAAMggB,EAAa8I,EAAsBjQ,QAEzC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBgpB,GAAyB/I,GAEzBuH,EAA6BvH,EAAW,EAosBb8Q,CAA0BxlB,EAAMqN,OAAO5Y,MAAO6b,GACjEa,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxD9e,UAAU,eACVmgB,aAAa,WAOjByT,GAAwB1V,QACS,IAA1BlT,EAAY,GAAGkT,KACjB,KAIPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWwZ,KACtC9zB,IAAAA,cAAA,KAAGC,UAAU,UAAUqa,GAAWyZ,WAClC/zB,IAAAA,cAAA,WACEA,IAAAA,cAAA,SAAOg0B,QAAS,aAAe7V,EAAKle,UAAU,mBAC5CD,IAAAA,cAAA,SAAOse,KAAK,WAAW9R,GAAI,aAAe2R,EAAKK,SAAU3Q,GA7KzComB,EAAC3xB,EAAgBC,KAC3C,MAAMggB,EAAarb,GAAoBkU,QACjC8Y,EAAiBjpB,EAAYmQ,QAC7B+Y,EAAoBvH,GAAuBxR,QAEjD,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,MAAK,GAGlB,UAA6C,IAA/Bq/B,EAAe,GAAG3xB,MAC9B2xB,EAAer/B,KAAK,GAMF,IAAAu/B,EAIfC,EAPL9R,EAAW,GAAGhgB,KAAWD,EACzB6xB,EAAkB,GAAG5xB,MAAqB,IAAVD,EAAgB,EAAG,EAGjD4xB,EAAe,GAAG3xB,MADN,IAAVD,GACiD,QAAtB8xB,EAAAthB,EAAgB9c,cAAM,IAAAo+B,OAAA,EAAtBA,EAAwBr8B,OAASizB,EAIX,QAAzBqJ,EAAGvhB,EAAgB9c,cAAM,IAAAq+B,OAAA,EAAtBA,EAAwBt8B,MAKvD40B,GAAuBpK,GACvBsK,GAA0BsH,GAC1Bva,EAAesa,GACfjb,EAAcib,GACdpJ,EAA0BvI,GAC1BwI,EAA6BoJ,EAAkB,EA8I6BF,CAAoBpmB,EAAMqN,OAAOqD,QAASJ,KAC3G6a,EAAoB,MAAQnO,MAQzC,OACE7qB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,IAh5BFvb,QAg5B0B6gB,QAASrF,GAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IACTne,IAAAA,cAAA,OAAKC,UAAU,eACpBD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,SAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BACbD,IAAAA,cAAA,KAAGC,UAAU,qBAAqBqa,GAAWga,eAAgBvI,IA/JtD5N,KAC3B,GAAIkD,EAAchtB,OAAS,EACzB,OACE2L,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW1W,QACtC5D,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOikB,GAAmBpI,GAC1B+I,mBAAmB,EACnBC,QAAS9F,EAAc1sB,KAAIkZ,IAAmB,CAAEvL,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,SACvF2Q,SAAU3Q,GAASmY,GAAuBnY,EAAOsQ,GACjDiJ,gBAAgB,cAChBnnB,UAAU,SACVonB,iBAAkBA,IAAM,KACxBC,mBAAmB,MAQ7B,MAAMzZ,EAAQwT,EAAc,GAE5B,OACErhB,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW1W,QACtC5D,IAAAA,cAACgnB,EAAAA,GAAM,CACLwN,aAAc,CAAElyB,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,MACvDqZ,mBAAmB,EACnB1I,SAAU3Q,GAASmY,GAAuBnY,EAAOsQ,GACjDiJ,gBAAgB,cAChBnnB,UAAU,SACVonB,iBAAkBA,IAAM,KACxBC,mBAAmB,KAGnB,EA0HaC,CAAoBpJ,GACpBwK,GAAWxK,GACXqV,GAAoBrV,GACpBuW,GAAoBvW,GACpBgV,GAA6BhV,GACJ,IAAzB6M,GAA8B6I,GAAqB1V,IAKD,IAAAwW,EAAzD,IAAK/1B,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAC/BiH,GAAoB,GAAGiX,UAA0C,IAA1BlT,EAAY,GAAGkT,KAAyBlT,EAAY,GAAGkT,KAAS,IAA4B,QAAzBwW,EAAG7hB,EAAgB9c,cAAM,IAAA2+B,OAAA,EAAtBA,EAAwB58B,QAM/I,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACXtO,GAAcmH,GAA8BsT,IAAqB9sB,IAAAA,cAAA,OAAKC,UAAU,UACjFD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,MAKlE,UAObvf,IAAayT,GAAcmH,GAA8BsT,IAC1D9sB,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,2LCx9BV,MAm3CA,EAn3C2DJ,IAC2E,IAD1E,WAAE+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,cAAEC,EAAa,aAAEC,EAAY,qBAAEG,EAAoB,sBAAEC,EAAqB,UAAEC,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,SAAE+O,EAAQ,cAAEC,EAAa,gBAAEP,EAAe,cAAED,EAAa,mBAAE+E,EAAkB,uBAAEC,EAAsB,oBAAE3E,EAAmB,sBAAE0I,EAAqB,4BAAEC,EAA2B,6BAAEC,EAA4B,kBAAEC,EAAiB,oBAAEC,EAAmB,MAAEn0B,EAAK,aAAED,EAAY,mBAAEq0B,EAAkB,8BAACC,EAA6B,kCAACC,EAAiC,iCAACC,EAAgC,qBAAEC,EAAoB,eAACC,EAAc,2BAAC9Q,EAA0B,uBAClsB+Q,EAAsB,2BAAEC,EAA0B,2BAAEC,EAA0B,gBAACC,EAAe,gBAACC,EAAe,iBAAEC,GAAkB9Y,EAEhI,MAAO7G,EAAa2O,KAAkBxN,EAAAA,EAAAA,UAAS,CAAC,KACzCyN,GAAYC,KAAiB1N,EAAAA,EAAAA,UAAS,CAAC,MACvCqb,GAAcC,KAAmBtb,EAAAA,EAAAA,UAAS,CAAC,MAC3Cub,GAAgBC,KAAqBxb,EAAAA,EAAAA,UAAS,CAAC,MAC/Cyb,GAAaC,KAAkB1b,EAAAA,EAAAA,UAAS,CAAC,MACzCrG,GAAc+b,KAAmB1V,EAAAA,EAAAA,UAAS,CAAC,MAC3C6e,GAAaC,KAAkB9e,EAAAA,EAAAA,UAAS,CAAC,MACzC+e,GAAeC,KAAoBhf,EAAAA,EAAAA,UAAS,CAAC,MAC7Cif,GAAuBC,KAA4Blf,EAAAA,EAAAA,UAAS,CAAC,MAC7Dmf,GAAWC,KAAgBpf,EAAAA,EAAAA,UAAS,CAAC,MACrCqf,GAAgBC,KAAqBtf,EAAAA,EAAAA,UAAS,CAAC,MAC/Cuf,GAAoBC,KAAyBxf,EAAAA,EAAAA,UAAS,CAAC,MACvDyf,GAAmBC,KAAwB1f,EAAAA,EAAAA,UAAS,CAAC,MACrD0Z,GAAaC,KAAiB3Z,EAAAA,EAAAA,UAAS,CAAC,KACxC2f,GAAgBC,KAAqB5f,EAAAA,EAAAA,UAAS,IAC9C6f,GAAMC,KAAW9f,EAAAA,EAAAA,UAAS,KAC1B+f,GAAYC,KAAkBhgB,EAAAA,EAAAA,UAAS,CAAC,MACxCigB,GAAiBC,KAAsBlgB,EAAAA,EAAAA,WAAS,IAChDmgB,GAASC,KAAcpgB,EAAAA,EAAAA,UAAS,CAAC,KACjCqgB,GAAQC,KAAatgB,EAAAA,EAAAA,UAAS,CAAC,MAChC0gB,GAAmBC,KAAwB3gB,EAAAA,EAAAA,WAAS,GAEpDkO,GAAajE,EAAAA,GAAkC,GAAGnE,KAElDgQ,MAAad,IAAYA,EAASe,gBAAmD,KAAlCf,EAASe,cAAczF,QAQ1E,aAAE7B,GAAY,MAAEC,KAAUC,EAAAA,EAAAA,MA2G1BiS,GAAqBzK,IACzB,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,IAAKurB,EAAW,GAAGvrB,KAAM,CACvBunB,GAAU,EAAO,MAIrByL,EAAoBzL,EAAQ,EAGxB0O,GAAmC1K,IACvC,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,IAAKurB,EAAW,GAAGvrB,KAAM,CACvBunB,GAAU,EAAO,MAIrB4L,EAAkC5L,EAAQ,EAGtC2O,GAAkC3K,IACtC,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,IAAKurB,EAAW,GAAGvrB,KAAM,CACvBunB,GAAU,EAAO,MAIrB6L,EAAiC7L,EAAQ,EAGrCwJ,GAAwBA,CAACtL,EAAcla,KAC3C,MAAMylB,EAAoBP,GAAarM,QAEvC,UAAgD,IAAlC4M,EAAkB,GAAGzlB,MACjCylB,EAAkBnzB,KAAK,IAGzBmzB,EAAkB,GAAGzlB,KAAWka,EAEhCuL,EAAkB,GAAGzlB,KAASma,OAE9BgL,GAAgBM,GAEhB9O,EAAa8O,GAEbrL,GAAmBqL,EAAkB,EAmBjCmF,GAA8BA,CAACtf,EAAYtL,KAC/C,IAAImd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAvKrDyN,EAAC3Q,EAAcla,KAC5C,MAAM8qB,EAAqBlC,GAAc/P,QAEzC,UAAiD,IAAnCiS,EAAmB,GAAG9qB,MAClC8qB,EAAmBx4B,KAAK,IAG1Bw4B,EAAmB,GAAG9qB,KAAWka,EAEjC4Q,EAAmB,GAAG9qB,KAASma,OAE/B0O,GAAiBiC,GAEjBzD,EAAsByD,EAAmB,EA4JzCD,CAAuBvf,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EA4BzE+qB,GAAqBj6B,MAAOwa,EAAYtL,KAC5C,MAAMgrB,EAAY1f,EAAMqN,OAAOsS,MAAM,GACrC,GAZyBvB,MAECA,EAAKwB,KADT,KAWlBC,CAAkBH,GAAY,CAChC,MAAMI,OA1Be1B,IAChB,IAAIlW,SAAQ,CAAC6X,EAASC,KAC3B,MAAMC,EAAa,IAAIC,WACvBD,EAAWE,cAAc/B,GACzB6B,EAAWG,OAAS,KAClBL,EAAQE,EAAW93B,OAAO,EAE5B83B,EAAWI,QAAWh6B,IACpB25B,EAAO35B,EAAM,CACd,IAiBoBi6B,CAAgBZ,GAC/Ba,EAAeT,EAAO90B,WAAWmY,QAAQ,2BAA4B,IAC3Ekb,GAAQkC,GAER,MAAMC,EAAiBlC,GAAW/Q,QAElC,UAA6C,IAA/BiT,EAAe,GAAG9rB,MAC9B8rB,EAAex5B,KAAK,IAGtBw5B,EAAe,GAAG9rB,KAAWgrB,EAAU9Q,KAEvC4R,EAAe,GAAG9rB,KAASma,OAE3B0P,GAAciC,GACd/B,IAAmB,QAGnBA,IAAmB,GACnBjI,EAAAA,GAAMnwB,MAAMomB,GAAWgU,mBAKrB3R,GAAsBqL,IAC1B,IAAIjL,EAAeiL,EAAkB3zB,OAAS,EAE9C,IAAK,IAAI2C,EAAI,EAAGA,EAAIgxB,EAAkB3zB,OAAQ2C,IAC5C,GAAyC,KAArCgxB,EAAkB,GAAGhxB,KAAK0lB,OAAe,CAC3CK,GAAe,EACf,MAIJ1D,EAAqB0D,EAAa,EAG9BwR,GAAsBF,IAC1B,IAAIG,EAAoBH,EAAeh6B,OAAS,EAEhD,IAAK,IAAI2C,EAAI,EAAGA,EAAIq3B,EAAeh6B,OAAQ2C,IACzC,GAAsC,KAAlCq3B,EAAe,GAAGr3B,KAAK0lB,OAAe,CACxC8R,GAAoB,EACpB,MAIJnE,EAAqBmE,EAAkB,EAGnCC,GAA4BnL,IAChC,IAAIoL,EAAsBpL,EAAkBjvB,OAAS,EAErD,IAAK,IAAI2C,EAAI,EAAGA,EAAIssB,EAAkBjvB,OAAQ2C,IAC5C,GAAyC,KAArCssB,EAAkB,GAAGtsB,KAAK0lB,OAAe,CAC3CgS,GAAsB,EACtB,MAIJ7E,EAA4B6E,EAAoB,EAG5CC,GAA+BC,IACnC,IAAIC,EAAyBD,EAAqBv6B,OAAS,EAE3D,IAAK,IAAI2C,EAAI,EAAGA,EAAI43B,EAAqBv6B,OAAQ2C,IAC/C,GAA4C,KAAxC43B,EAAqB,GAAG53B,KAAK0lB,OAAe,CAC9CmS,GAAyB,EACzB,MAIJ3E,EAA8B2E,EAAuB,EAGjD5G,GAAuBrM,IAC3B,IAAIsM,GAAgB,EAEpB,IAAK,IAAIlxB,EAAI,EAAGA,EAAI4kB,EAAiBvnB,OAAQ2C,IAC3C,GAAgC,GAA5B4kB,EAAiB,GAAG5kB,KAAW,CACjCkxB,GAAgB,EAChB,MAIJ5O,EAAsB4O,EAAc,EAGhChL,GAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,GAAiB/a,SAInByW,EAAUzW,GACV+a,GAAiB/a,QAGnByW,EAAUzW,GACV+a,GAAiB/a,IAIfya,GAAWA,KACfjE,EAAO,GAEP,MAAMiP,EAAoBP,GAAarM,QACjCgN,EAAoBP,GAAYzM,QAChCiN,EAAsBV,GAAevM,QACrCkI,EAAoBvd,GAAaqV,QACjC0T,EAAsB3D,GAAc/P,QACpC2T,EAA6B1D,GAAsBjQ,QACnD4T,EAAoB/D,GAAY7P,QAChC6T,EAAgB1D,GAAUnQ,QAC1B8T,EAAsBzD,GAAerQ,QACrC+T,EAAyBtD,GAAkBzQ,QAC3CgU,EAA0BzD,GAAmBvQ,QAC7CiT,EAAiBlC,GAAW/Q,QAC5BiU,EAAe9C,GAAQnR,QACvBkU,EAAc7C,GAAOrR,QAkD3B,GA/CA6T,EAAcp6B,KAAK,IACnBs6B,EAAuBt6B,KAAK,IAC5Bu6B,EAAwBv6B,KAAK,IAC7Bw5B,EAAex5B,KAAK,IACpBq6B,EAAoBr6B,KAAK,IACzBw6B,EAAax6B,KAAK,GAClBy6B,EAAYz6B,KAAK,IAEjBk4B,IAAqB,GACrBf,GAAkB,GAClBtE,GAAgBM,GAChBF,GAAeM,GACfR,GAAkBS,GAClBvG,GAAgBwB,GAChB4H,GAAe8D,GACf5D,GAAiB0D,GACjBxD,GAAyByD,GACzBrD,GAAkBwD,GAClBpD,GAAqBqD,GACrBvD,GAAsBwD,GACtB5D,GAAayD,GACb7C,GAAciC,GACd7B,GAAW6C,GACX3C,GAAU4C,GAEVzO,EAAcuH,GACdtH,EAAgBuH,GAChBnP,EAAa8O,GACb9G,EAAoBoC,GACpBsG,EAAsBkF,GACtBhF,EAA6BiF,GAC7BhF,EAAkBkF,GAClB1E,EAAuB2E,GACvB1E,EAA2B4E,GAC3B3E,EAA2B0E,GAC3BzE,EAAgB2E,GAChB1E,EAAgB2E,GAEhBjW,GAAqB,GACrBwM,GAAuB,GACvBmE,GAAoB,GAEpB2E,GAA4BO,GAC5BjC,GAAgCmC,GAChClC,GAA+BiC,GAC/BZ,GAAmBF,GAES,IAAzBhN,EAAchtB,OACjB,CAEA,MAAMwZ,EAAQwT,EAAc,GACtBkO,EAAW,CAAEjtB,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,MAE1D2hB,GAAeD,EAAUnH,EAAkB/zB,QAC3CwxB,GAAuB,KA0CnBvI,GAAoB/a,IACxB,MAAMwZ,EAAUlD,EAAWlhB,MAAKokB,GAAkC,WAAvBA,EAAQtB,aAE7CmB,EAAmB3Q,EAAYmQ,QAC/BgB,EAAkBvC,GAAWuB,QAC7B4M,EAAoBP,GAAarM,QACjC+M,EAAkBrC,GAAY1K,QAC9BgN,EAAoBP,GAAYzM,QAChCiN,EAAsBV,GAAevM,QACrCkI,EAAoBvd,GAAaqV,QACjC4T,EAAoB/D,GAAY7P,QAChC0T,EAAsB3D,GAAc/P,QACpC2T,EAA6B1D,GAAsBjQ,QACnD6T,EAAgB1D,GAAUnQ,QAC1B8T,EAAsBzD,GAAerQ,QACrC+T,EAAyBtD,GAAkBzQ,QAC3CgU,EAA0BzD,GAAmBvQ,QAC7CiT,EAAiBlC,GAAW/Q,QAC5BiU,EAAe9C,GAAQnR,QACvBkU,EAAc7C,GAAOrR,aAGiB,IAAjCQ,EAAiB,GAAGrZ,OACzBqZ,EAAiBvnB,OAAS,EAC5BunB,EAAiByB,OAAO9a,EAAO,GAE/BqZ,EAAiB,GAAKhkB,SAASmkB,EAASrC,cAAe,UAIhB,IAAhC0C,EAAgB,GAAG7Z,OACxB6Z,EAAgB/nB,OAAS,EAC3B+nB,EAAgBiB,OAAO9a,EAAO,GAE9B6Z,EAAgB,GAAK,SAIoB,IAAlC4L,EAAkB,GAAGzlB,OAC1BylB,EAAkB3zB,OAAS,EAC7B2zB,EAAkB3K,OAAO9a,EAAO,GAEhCylB,EAAkB,GAAK,SAGgB,IAAhCG,EAAgB,GAAG5lB,OACxB4lB,EAAgB9zB,OAAS,EAC3B8zB,EAAgB9K,OAAO9a,EAAO,GAE9B4lB,EAAgB,GAAK,EAGvBpC,GAAcoC,GAEdvC,EAAmBuC,SAGwB,IAAlCC,EAAkB,GAAG7lB,OAC1B6lB,EAAkB/zB,OAAS,EAC7B+zB,EAAkB/K,OAAO9a,EAAO,GAEhC6lB,EAAkB,GAAK,SAIoB,IAApCC,EAAoB,GAAG9lB,OAC5B8lB,EAAoBh0B,OAAS,EAC/Bg0B,EAAoBhL,OAAO9a,EAAO,GAElC8lB,EAAoB,GAAK,SAIgB,IAAlC/E,EAAkB,GAAG/gB,OAC1B+gB,EAAkBjvB,OAAS,EAC7BivB,EAAkBjG,OAAO9a,EAAO,GAEhC+gB,EAAkB,GAAK,SAIkB,IAAlC0L,EAAkB,GAAGzsB,OAC1BysB,EAAkB36B,OAAS,EAC7B26B,EAAkB3R,OAAO9a,EAAO,GAEhCysB,EAAkB,GAAK,SAIoB,IAApCF,EAAoB,GAAGvsB,OAC5BusB,EAAoBz6B,OAAS,EAC/By6B,EAAoBzR,OAAO9a,EAAO,GAElCusB,EAAoB,GAAK,SAIyB,IAA3CC,EAA2B,GAAGxsB,OACnCwsB,EAA2B16B,OAAS,EACtC06B,EAA2B1R,OAAO9a,EAAO,GAEzCwsB,EAA2B,GAAK,SAGK,IAA9BE,EAAc,GAAG1sB,OACtB0sB,EAAc56B,OAAS,EACzB46B,EAAc5R,OAAO9a,EAAO,GAE5B0sB,EAAc,GAAK,SAGwB,IAApCC,EAAoB,GAAG3sB,OAC5B2sB,EAAoB76B,OAAS,EAC/B66B,EAAoB7R,OAAO9a,EAAO,GAElC2sB,EAAoB,GAAK,SAGsB,IAAxCE,EAAwB,GAAG7sB,OAChC6sB,EAAwB/6B,OAAS,EACnC+6B,EAAwB/R,OAAO9a,EAAO,GAEtC6sB,EAAwB,GAAK,SAGiB,IAAvCD,EAAuB,GAAG5sB,OAC/B4sB,EAAuB96B,OAAS,EAClC86B,EAAuB9R,OAAO9a,EAAO,GAErC4sB,EAAuB,GAAK,SAGU,IAA/Bd,EAAe,GAAG9rB,OACvB8rB,EAAeh6B,OAAS,EAC1Bg6B,EAAehR,OAAO9a,EAAO,GAE7B8rB,EAAe,GAAK,SAGgB,IAA7BgB,EAAa,GAAG9sB,OACrB8sB,EAAah7B,OAAS,EACxBg7B,EAAahS,OAAO9a,EAAO,GAE3B8sB,EAAa,GAAK,QAGiB,IAA5BC,EAAY,GAAG/sB,OACpB+sB,EAAYj7B,OAAS,EACvBi7B,EAAYjS,OAAO9a,EAAO,GAE1B+sB,EAAY,GAAK,IAMrB1V,GAAegC,GACf9B,GAAcsC,GACdsL,GAAgBM,GAChBF,GAAeM,GACfR,GAAkBS,GAClBvG,GAAgBwB,GAChB4H,GAAe8D,GACf5D,GAAiB0D,GACjBxD,GAAyByD,GACzBvD,GAAayD,GACbvD,GAAkBwD,GAClBpD,GAAqBqD,GACrBvD,GAAsBwD,GACtBhD,GAAciC,GACd7B,GAAW6C,GACX3C,GAAU4C,GAGVzO,EAAcuH,GACdtH,EAAgBuH,GAChBnP,EAAa8O,GACb/O,EAAc2C,GACdsF,EAAoBoC,GACpBsG,EAAsBkF,GACtBhF,EAA6BiF,GAC7BhF,EAAkBkF,GAClB1E,EAAuB2E,GACvB1E,EAA2B4E,GAC3B3E,EAA2B0E,GAC3BzE,EAAgB2E,GAChB1E,EAAgB2E,GAGhBhJ,GAAoB8B,GACpBzL,GAAmBqL,GACnBuG,GAAmBF,GACnBpG,GAAoBrM,GACpB6S,GAAyBnL,GACzBqL,GAA4BO,GAC5BlC,GAAkBiC,GAClBhC,GAAgCmC,GAChClC,GAA+BiC,EAAuB,GAGxDtY,EAAAA,EAAAA,YAAU,KACR,MAAMkF,EAAUlD,EAAWlhB,MAAKokB,GAAkC,WAAvBA,EAAQtB,aAEnD,IAAI8C,EAAmBtlB,OAAO8jB,aAAO,EAAPA,EAASrC,cAAe,IAClD8D,EAAoBxX,OAAO+V,aAAO,EAAPA,EAASrC,cAAe,IAEvD,MAAMiE,EAAsC,GACtCD,EAA+B,GAC/B4K,EAAiC,GACjCC,EAAmC,GACnC1B,EAA6B,GAC7B3D,EAA4B,GAC5BC,EAA0B,GAC1BwM,EAAsC,GACtCC,EAAsC,GACtCC,EAAwC,GACxCC,EAA+C,GAC/CC,EAA8B,GAC9BC,EAAmC,GACnCC,EAAsC,GACtCC,EAAuC,GACvC7B,EAA2B,GAC3B8B,EAA4B,GAC5BC,EAA2B,GAEjC,GAAI7W,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,IAAIkU,EAA4BqO,EAAU,GAAGviB,KAAwB,kBAErE,MAAM8vB,EAAoBvN,EAAU,GAAGviB,KAAgB,UACjDu0B,EAA+C,KAAnChS,EAAU,GAAGviB,KAAgB,UAAW,IAAImC,KAAKogB,EAAU,GAAGviB,KAAgB,WAAK,KAC/F20B,EAAiE,KAA5CpS,EAAU,GAAGviB,KAAyB,mBAAW,IAAImC,KAAKogB,EAAU,GAAGviB,KAAyB,oBAAK,KAC1H60B,EAAgE,KAA5CtS,EAAU,GAAGviB,KAAyB,mBAAW,IAAImC,KAAKogB,EAAU,GAAGviB,KAAyB,oBAAK,KAoB/H,GAjBA6vB,EAAiBhyB,KAAKiyB,EAAUxlB,MAAM,KAAKjN,QAC3C6uB,EAAgBruB,KAAKiyB,GACrB3D,EAActuB,KAAK0kB,EAAU,GAAGviB,KAAc,SAC9C24B,EAA0B96B,KAAK0kB,EAAU,GAAGviB,KAAkB,aAC9D44B,EAA0B/6B,KAAK0kB,EAAU,GAAGviB,KAAkB,aAC9D64B,EAA4Bh7B,KAAK0kB,EAAU,GAAGviB,KAAkB,aAChE84B,EAAmCj7B,KAAK0kB,EAAU,GAAGviB,KAA2B,sBAChF+4B,EAAkBl7B,KAAK02B,EAAUA,EAAUxxB,cAAc,IACzDi2B,EAAuBn7B,KAAK0kB,EAAU,GAAGviB,KAAqB,gBAC9Di5B,EAA0Bp7B,KAAKg3B,EAAkBA,EAAkB9xB,cAAc,IACjFm2B,EAA2Br7B,KAAK82B,EAAmBA,EAAmB5xB,cAAc,IACpFuuB,EAAqBzzB,KAAK0kB,EAAU,GAAGviB,KAAY,MAAE,IACrDm5B,EAAgBt7B,KAAK,GACrB8oB,EAA0B9oB,KAAKqW,GAC/BklB,EAAev7B,KAAK0kB,EAAU,GAAGviB,KAAc,SAC/Cq3B,EAAex5B,KAAK,IAEQ,IAAzBwsB,EAAchtB,OACjB,CACE,MAAMwZ,EAAQwT,EAAc,GACtBkO,EAAW,CAAEjtB,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,MAE1D8iB,GAAqBpB,EAAUhW,EAAUllB,QACzCwxB,GAAuB,IAM3B6B,GAAgBY,GAChBxG,GAAgB6N,GAChBzE,GAAe0E,GACfxE,GAAiByE,GACjBvE,GAAyBwE,GACzBtE,GAAauE,GACbrE,GAAkBsE,GAClBlE,GAAqBmE,GACrBrE,GAAsBsE,GACtB9D,GAAciC,GACd7B,GAAW2D,GACXzD,GAAU0D,GAGVlX,EAAaoP,GACbyB,EAAkBgG,GAClB7O,EAAoByO,GACpB/F,EAAsBiG,GACtB/F,EAA6BgG,GAC7BvF,EAAuByF,GACvBxF,EAA2B0F,GAC3BzF,EAA2BwF,GAC3BvF,EAAgByF,GAChBxF,EAAgByF,GAEhBzT,GAAmB2L,GACnBiG,GAAmBF,GACnBI,GAAyBkB,GACzBhB,GAA4BqB,GAC5BhD,GAAkB+C,GAClB9C,GAAgCiD,GAChChD,GAA+B+C,QAI/B1H,EAAuB1zB,KAAK2oB,GAC5BG,EAA0B9oB,KAAK0oB,GAC/BG,EAAmB7oB,KAAK,IACxBgyB,EAAiBhyB,KAAK,GACtBquB,EAAgBruB,KAAK,IACrBsuB,EAActuB,KAAK,IACnBk7B,EAAkBl7B,KAAK,IACvBm7B,EAAuBn7B,KAAK,IAC5Bq7B,EAA2Br7B,KAAK,IAChCo7B,EAA0Bp7B,KAAK,IAC/Bw5B,EAAex5B,KAAK,IACpBs7B,EAAgBt7B,KAAK,GACrBu7B,EAAev7B,KAAK,IAsDtB,GAlDIqtB,IAAaoG,EAAqBj0B,QAAU,IAE9Ci0B,EAAqBzzB,KAAKusB,EAASoH,UAAY,IAAMpH,EAASqH,UAC9DmH,EAA0B/6B,KAAKusB,EAASyP,qBACxClB,EAA0B96B,KAAKusB,EAAS0P,cAG1CpJ,GAAgBY,GAChB1O,GAAe+D,GACf7D,GAAc4D,GACdqI,GAAcc,GACd/E,GAAgB6N,GAChBzE,GAAe0E,GACfxE,GAAiByE,GACjBvE,GAAyBwE,GACzBtE,GAAauE,GACbrE,GAAkBsE,GAClBlE,GAAqBmE,GACrBrE,GAAsBsE,GACtB9D,GAAciC,GACd7B,GAAW2D,GACXzD,GAAU0D,GAEVxK,EAAmBiB,GAGnBkD,EAAkBgG,GAClBrF,EAAgByF,GAChBxF,EAAgByF,GAIhBnX,EAAc0E,GACdzE,EAAaoP,GACbpH,EAAoByO,GACpB/F,EAAsBiG,GACtB/F,EAA6BgG,GAC7BvF,EAAuByF,GACvBxF,EAA2B0F,GAC3BzF,EAA2BwF,GAE3BjD,GAAkB+C,GAClB9H,GAAoBtK,GACpBhB,GAAmB2L,GACnBiG,GAAmBF,GACnBI,GAAyBkB,GACzBhB,GAA4BqB,GAC5B/C,GAAgCiD,GAChChD,GAA+B+C,GAEH,IAAzB5O,EAAchtB,QAAgBklB,EAAUllB,QAAU,EACrD,CAEA,MAAMwZ,EAAQwT,EAAc,GACtBkO,EAAW,CAAEjtB,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,MAE1D2hB,GAAeD,EAAU,GACzB1J,GAAuB,QAGfxE,EAAchtB,OAAS,IAC7ByzB,GAAe5E,GACf0E,GAAkBzE,GAClBtC,EAAcqC,GACdpC,EAAgBqC,GAChBmD,GAAoBpD,MAIrB,CAAC3J,IAEJ,MAAMgN,GAAsBhkB,IAC1B,MAAMikB,EAAmD,GAEzD,GAAIqB,GAAYxzB,OAAS,EAAG,CAC1B,MAAM8xB,EAAmB0B,GAAYzM,QAC/BgL,EAAeuB,GAAevM,QAEpC,QAA4C,IAAjC+K,EAAiB,GAAG5jB,MACQ,KAAjC4jB,EAAiB,GAAG5jB,KAAiB,CACvC,MAAMkkB,EAAaN,EAAiB,GAAG5jB,KAASjB,MAAM,KAChDolB,EAAWN,EAAa,GAAG7jB,KAASjB,MAAM,KAEhD,IAAK,IAAItK,EAAI,EAAGA,EAAIyvB,EAAWpyB,SAAU2C,EACvCwvB,EAAa3xB,KAAK,CAAEyN,MAAOokB,EAAS,GAAG1vB,KAAMqB,MAAOouB,EAAW,GAAGzvB,QAM1E,OAAOwvB,CAAY,EAGfF,GAAuBoC,IAC3B,IAAI9B,EAAiB8B,EAAiBr0B,OAAS,EAE/C,IAAK,IAAI2C,EAAI,EAAGA,EAAI0xB,EAAiBr0B,OAAQ2C,IAC3C,GAA0D,KAAtD0xB,EAAiB,GAAG1xB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC5DkK,GAAiB,EACjB,MAIJf,EAAuBe,EAAe,EASlCmK,GAAkBA,CAACtU,EAAcla,KACrC,MAAM+sB,EAAc7C,GAAOrR,QAE3B,UAA0C,IAA5BkU,EAAY,GAAG/sB,MAC3B+sB,EAAYz6B,KAAK,IAGnBy6B,EAAY,GAAG/sB,KAAWka,EAE1B6S,EAAY,GAAG/sB,KAASma,OAExBgQ,GAAU4C,GAEV3E,EAAgB2E,EAAY,EAGxBjJ,GAAgBA,CAAC7b,EAAejI,KACpC,MAAMggB,EAAauD,GAAY1K,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,GAGlB0tB,EAAW,GAAGhgB,KAAWiI,EAEzBub,GAAcxD,GAEdqD,EAAmBrD,EAAW,EAG1ByD,GAAyBA,CAACnY,EAAYtL,KAC1C,IAAI0jB,EAA0B,GAC1BC,EAAwB,GAG1BD,GAAmBpY,EAAMxV,MACzB6tB,GAAiBrY,EAAMvL,MAGzB,MAAM6jB,EAAmB0B,GAAYzM,QAC/BgL,EAAeuB,GAAevM,QAEpC,UAA+C,IAAjC+K,EAAiB,GAAG5jB,MAChC4jB,EAAiBtxB,KAAK,IAGxB,UAA2C,IAA7BuxB,EAAa,GAAG7jB,MAC5B6jB,EAAavxB,KAAK,IAGpBsxB,EAAiB,GAAG5jB,KAAW0jB,EAC/BG,EAAa,GAAG7jB,KAAW2jB,EAE3B,IAAI8K,EAA8B3P,EAAc1pB,MAAKoK,GAAWA,EAAY,IAAK8L,EAAMvL,QAEvFyqB,IAAsBiE,EAAaC,mBACnCjF,GAAkBgF,EAAaE,oBAE/BpJ,GAAe3B,GACfyB,GAAkBxB,GAElBvF,EAAcsF,GACdrF,EAAgBsF,GAEhBC,GAAc,EAAG9jB,GAEjB+jB,GAAoBH,EAAiB,EAGjCwK,GAAuBA,CAAC9iB,EAAYsjB,KACxC,IAAIlL,EAA0B,GAC1BC,EAAwB,GAG5BD,GAAmBpY,EAAMxV,MACzB6tB,GAAiBrY,EAAMvL,MAGvB,MAAM6jB,EAAmB0B,GAAYzM,QAC/BgL,EAAeuB,GAAevM,QAEpC,IAAI,IAAIpkB,EAAE,EAAGA,EAAGm6B,EAAYn6B,IAC5B,CAEA,UAA2C,IAA7BmvB,EAAiB,GAAGnvB,MAChCmvB,EAAiBtxB,KAAK,IAGxB,UAAuC,IAAzBuxB,EAAa,GAAGpvB,MAC5BovB,EAAavxB,KAAK,IAEpBsxB,EAAiB,GAAGnvB,KAAOivB,EAC3BG,EAAa,GAAGpvB,KAAOkvB,EAIvB,IAAI8K,EAA8B3P,EAAc1pB,MAAKoK,GAAWA,EAAY,IAAK8L,EAAMvL,QACvFyqB,IAAsBiE,EAAaC,mBACnCjF,GAAkBgF,EAAaE,oBAE/BpJ,GAAe3B,GACfyB,GAAkBxB,GAElBvF,EAAcsF,GACdrF,EAAgBsF,EAAa,EAMzBoJ,GAAiBA,CAAC3hB,EAAYtL,KAClC,IAAI0jB,EAA0B,GAC1BC,EAAwB,GAG1BD,GAAmBpY,EAAMxV,MACzB6tB,GAAiBrY,EAAMvL,MAGzB,MAAM6jB,EAAmB0B,GAAYzM,QAC/BgL,EAAeuB,GAAevM,QAEpC,UAA+C,IAAjC+K,EAAiB,GAAG5jB,MAChC4jB,EAAiBtxB,KAAK,IAGxB,UAA2C,IAA7BuxB,EAAa,GAAG7jB,MAC5B6jB,EAAavxB,KAAK,IAGpBsxB,EAAiB,GAAG5jB,KAAW0jB,EAC/BG,EAAa,GAAG7jB,KAAW2jB,EAE3B,IAAI8K,EAA8B3P,EAAc1pB,MAAKoK,GAAWA,EAAY,IAAK8L,EAAMvL,QAEvFyqB,IAAsBiE,EAAaC,mBACnCjF,GAAkBgF,EAAaE,oBAE/BpJ,GAAe3B,GACfyB,GAAkBxB,GAElBvF,EAAcsF,GACdrF,EAAgBsF,GAEhBC,GAAc,EAAG9jB,EAAM,EAInB6uB,GAAmBjT,QACY,IAAxBoN,GAAU,GAAGpN,KACf,KAGPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWiR,WACtCvrB,IAAAA,cAACqxB,EAAAA,EAAU,CACT7S,SAAW8S,GA76BCC,EAACjvB,EAAaC,KAClC,MAAMggB,EAAagJ,GAAUnQ,QAE7B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAAQA,EAAMvI,cAAgB,GAEvDyxB,GAAajJ,GAEbwH,EAAkBxH,GAElByK,GAAkBzK,EAAW,EAg6BKgP,CAAcD,EAAMnT,GAC9C7b,MAA+B,KAAxBipB,GAAU,GAAGpN,MAAiBoN,GAAU,GAAGpN,KAAO2B,SAAS,QAAU,KAAO,IAAI3mB,KAAKoyB,GAAU,GAAGpN,MACzGqT,OAAQ,UACRC,QAAS,IAAIt4B,KACb8G,UAAW,aACXyxB,eAAgB,GAChBC,iBAAkB,GAClBC,gBAAiB,OAOrBC,GAA4B1T,IAAmC,IAAA2T,EACnE,YAA4C,IAAjCnG,GAAmB,GAAGxN,KACxB,KAGPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWqR,oBACtC3rB,IAAAA,cAACqxB,EAAAA,EAAU,CACT7S,SAAW8S,GAh+BUS,EAACzvB,EAAaC,KAC3C,MAAMggB,EAAaoJ,GAAmBvQ,QAEtC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAAQA,EAAMvI,cAAgB,GAEvD6xB,GAAsBrJ,GACtB0K,GAAgC1K,GAChCiI,EAA2BjI,EAAW,EAq9BJwP,CAAuBT,EAAMnT,GACvD7b,MAAwC,KAAjCqpB,GAAmB,GAAGxN,MAA6C,QAAhC2T,EAAInG,GAAmB,GAAGxN,YAAM,IAAA2T,GAA5BA,EAA8BhS,SAAS,QAAU,KAAO,IAAI3mB,KAAKwyB,GAAmB,GAAGxN,MACrIqT,OAAQ,UACRC,QAAS,IAAIt4B,KACb8G,UAAW,aACXyxB,eAAgB,GAChBC,iBAAkB,GAClBC,gBAAiB,MAGjB,EAIJI,GAA2B7T,IAAmC,IAAA8T,EAClE,YAA2C,IAAhCpG,GAAkB,GAAG1N,KACvB,KAGPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWuR,mBACtC7rB,IAAAA,cAACqxB,EAAAA,EAAU,CACT7S,SAAW8S,GAz+BSY,EAAC5vB,EAAaC,KAC1C,MAAMggB,EAAasJ,GAAkBzQ,QAErC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAAQA,EAAMvI,cAAgB,GAEvD+xB,GAAqBvJ,GACrB2K,GAA+B3K,GAC/BkI,EAA2BlI,EAAW,EA89BJ2P,CAAsBZ,EAAMnT,GACtD7b,MAAuC,KAAhCupB,GAAkB,GAAG1N,MAA4C,QAA/B8T,EAAIpG,GAAkB,GAAG1N,YAAM,IAAA8T,GAA3BA,EAA6BnS,SAAS,QAAU,KAAO,IAAI3mB,KAAK0yB,GAAkB,GAAG1N,MAClIqT,OAAQ,UACRC,QAAS,IAAIt4B,KACb8G,UAAW,aACXyxB,eAAgB,GAChBC,iBAAkB,GAClBC,gBAAiB,MAGjB,EA8CJO,GAAwBhU,GAE1Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,KAAGC,UAAU,qBAAqBqa,GAAW8X,gBAC7CpyB,IAAAA,cAAA,OAAKC,UAAU,4BACbD,IAAAA,cAAA,OAAKC,UAAU,wBACbD,IAAAA,cAAA,SACEse,KAAK,OACL7B,KAAK,aACLiC,UAAU,OAAM,YACN,SACVE,KAAK,aACLyT,OAAO,oBACP7T,SAAW3Q,GAAUyf,GAAmBzf,EAAOsQ,GAC/Cle,UAAU,kBAGdD,IAAAA,cAAA,OAAKC,UAAU,8DACbD,IAAAA,cAAA,UAAQse,KAAK,SAASnS,UAAUsf,GAAe,GAAGtN,OAAUkO,GAAgC7qB,QAAU8wB,GApuBrFj/B,WACzB,MAAMk/B,EAAM18B,EAAQ,MAAQ,OACtB28B,EAAyB,MAAhB58B,EAAuB,QAAU,OAC1C68B,EAAWhH,GAAe,GAAGlpB,KAAW,QACxCmwB,EAAczG,GACd0G,EAAgB1I,EAEhBoE,EAAiBlC,GAAW/Q,QAGR,mBAEJ0D,KAAK2M,GAAe,GAAGlpB,aAEZqwB,EAAAA,EAAAA,IAAuB,CAAEj/B,cAAeC,GAAiB2+B,EAAKC,EAAQC,EAAUC,EAAaC,IAEvGE,gBAAkB5zB,EAAAA,GAAS6zB,QAC9CzO,EAAAA,GAAMnwB,MAAMomB,GAAWyY,sBAIvB3G,GAAciC,GACdE,GAAmBF,IAEnBhK,EAAAA,EAAAA,IAAM/J,GAAW0Y,uBAKnB3O,EAAAA,GAAMnwB,MAAMomB,GAAW2Y,oBAusBgGC,CAAmB/U,IAAO9H,EAAAA,GAAoB,GAAGnE,SAOtKyW,GAAcxK,GAEhBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,qBAAqBqa,GAAWmN,cAC7CznB,IAAAA,cAAA,SACEse,KAAK,OACLhc,MAAOmlB,GAAa,GAAGtJ,KACvBO,UAAU,OAAM,YACN,SACVE,KAAK,aACLJ,SAAW3Q,GA/oCM+a,EAAC/a,EAAYtL,KACtC,IAAImd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAElFoI,GAAsBla,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EA4oC/CqmB,CAAmB/a,EAAOsQ,GAC/Ca,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OA4BjFwT,GAAgChV,GAElCne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW8Y,sBACtCpzB,IAAAA,cAAA,SACEse,KAAK,SACLI,UAAU,MACVpc,MAAO+oB,GAAsB,GAAGlN,KAAM,YAC5B,SACVS,KAAK,aACLJ,SAAU3Q,GAhqCcwlB,EAAC/wB,EAAeC,KAChD,MAAMggB,EAAa8I,GAAsBjQ,QAEzC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBgpB,GAAyB/I,GAEzBuH,EAA6BvH,EAAW,EAqpCb8Q,CAA0BxlB,EAAMqN,OAAO5Y,MAAO6b,GACjEa,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxD9e,UAAU,eACVmgB,aAAa,WAOjBkT,GAAwBnV,GAE1Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWmR,gBACtCzrB,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,MACVpc,MAAOmpB,GAAe,GAAGtN,KAAM,YACrB,SACVS,KAAK,aACLJ,SAAU3Q,GAvqCO0lB,EAACjxB,EAAeC,KACzC,MAAMggB,EAAakJ,GAAerQ,QAIlC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAHQ,mBAMJiqB,KAAKxc,IAAUA,EAAMjO,QAAU,IACnDkuB,EAAW,GAAGhgB,KAAWD,EAEzBopB,GAAkBnJ,GAClBoM,GAA4BpM,GAC5BgI,EAAuBhI,IAGvB8B,EAAAA,GAAMnwB,MAAMomB,GAAW2Y,oBAspCEM,CAAmB1lB,EAAMqN,OAAO5Y,MAAO6b,GAC1Da,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxD9e,UAAU,eACVmgB,aAAa,WAOjBoT,GAAuBrV,GAEzBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWmZ,aACtCzzB,IAAAA,cAAA,SACEse,KAAK,SACLI,UAAU,MACVpc,MAAOyD,GAAa,GAAGoY,KAAM,YACnB,SACVS,KAAK,aACLJ,SAAU3Q,GArkCI6W,EAACpiB,EAAeC,KACtC,MAAMggB,EAAaxc,GAAaqV,QAEhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBwf,GAAgBS,GAEhBrB,EAAoBqB,GAEpBkM,GAAyBlM,EAAW,EAwjCTmC,CAAgB7W,EAAMqN,OAAO5Y,MAAO6b,GACvDa,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxD9e,UAAU,eACVmgB,aAAa,WAOjBsT,GAAiBvV,GAEnBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWvV,SACtC/E,IAAAA,cAAA,YACE0e,UAAU,OACVpc,MAAOmqB,GAAO,GAAGtO,KAAM,YACb,SACVS,KAAK,aACLJ,SAAW3Q,GArZS8lB,EAAC9lB,EAAYtL,KACzC,MAAMmd,EAAYzQ,EAAO2kB,0BAA4B3kB,EAAO2kB,0BAA4B,IAExF7C,GAAgBljB,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAkZzCoxB,CAAsB9lB,EAAOsQ,GAClDle,UAAU,eACVyf,UAAWzQ,EAAO2kB,0BAA4B3kB,EAAO2kB,0BAA4B,QAS3F,OACE5zB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,IA7wCFvb,QA6wC0B6gB,QAASrF,GAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IACTne,IAAAA,cAAA,OAAKC,UAAU,eACpBD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,iBAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BACO,IAAnB8rB,IAAwB/rB,IAAAA,cAAA,KAAGC,UAAU,qBAAqBqa,GAAWga,eAAgBvI,IA9M/E5N,KAC3B,GAAGkD,EAAchtB,OAAS,EAExB,OACE2L,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWia,eACtCv0B,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOikB,GAAmBpI,GAC1B+I,mBAAmB,EACnBC,QAAS9F,EAAc1sB,KAAIkZ,IAAmB,CAAEvL,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,SACvF2Q,SAAU3Q,GAASmY,GAAuBnY,EAAOsQ,GACjDiJ,gBAAgB,cAChBnnB,UAAU,SACVonB,iBAAkBA,IAAM,KACxBC,mBAAmB,MAO7B,MAAMzZ,EAAQwT,EAAc,GAE5B,OACErhB,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWia,eACtCv0B,IAAAA,cAACgnB,EAAAA,GAAM,CACLwN,aAAc,CAAClyB,MAAOuL,EAAU,GAAGxV,MAAOwV,EAAY,MACtDqZ,mBAAmB,EACnB1I,SAAU3Q,GAASmY,GAAuBnY,EAAOsQ,GACjDiJ,gBAAgB,cAChBnnB,UAAU,SACVonB,iBAAkBA,IAAM,KACxBC,mBAAmB,KAGnB,EAyKaC,CAAoBpJ,GACpBwK,GAAWxK,GACXqV,GAAoBrV,GAxHdA,IAEzBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,qBAAqBqa,GAAWma,eAC7Cz0B,IAAAA,cAAA,SACEse,KAAK,OACLhc,MAAO6oB,GAAc,GAAGhN,KACxBO,UAAU,OAAM,YACN,SACVE,KAAK,aACLJ,SAAW3Q,GAAUsf,GAA4Btf,EAAOsQ,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OA2GhE+U,CAAoBvW,GACpBgV,GAA6BhV,GAC7BiT,GAAgBjT,GAChBmV,GAAqBnV,GACrB0T,GAAyB1T,GACzB6T,GAAwB7T,GACxBgU,GAAqBhU,GACrByM,GAAoB8I,GAAcvV,IAKgB,IAAAqC,EAAAC,EAAzD,IAAK7hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IACI,KAAb,QAAtBugB,EAAA1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,YAAgD,IAA1BkT,EAAY,GAAGkT,KAAyBlT,EAAY,GAAGkT,KAAS,IAA4B,QAAzBsC,EAAG3N,EAAgB9c,cAAM,IAAAyqB,OAAA,EAAtBA,EAAwB1oB,QAMtJ,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8B8Q,GAAkBwC,IAAqB9sB,IAAAA,cAAA,OAAKC,UAAU,UAClGD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,MAKlE,UAOdvf,IAAayT,GAAcmH,GAA8B8Q,GAAkBwC,IAC3E9sB,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,wKC74CV,MAkWA,EAlWyDJ,IAI6C,IAJ5C,WACxD+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,aACxDE,EAAY,kBAAE6Q,EAAiB,kBAAEkP,EAAiB,qBAClD5f,EAAoB,oBAAE2Q,EAAmB,UACzCzQ,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,2BAAEmH,GAA4B1H,EAChG,MAAOqI,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,MAC3Cmf,EAAWC,IAAgBpf,EAAAA,EAAAA,UAAS,CAAC,MACrC8sB,EAAWC,IAAgB/sB,EAAAA,EAAAA,UAAS,CAAC,KAEtCkO,EAAajE,EAAAA,GAA+B,GAAGnE,MAQ/C,aAAE2I,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MAQ1ByB,EAAwBA,CAACC,EAAcla,KAC3C,MAAMggB,EAAapI,EAAaiB,QAGhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWka,EAEzB8F,EAAW,GAAGhgB,KAASma,OAEvBtC,EAAgBmI,GAEhBrJ,EAAaqJ,GAEbE,EAAkBF,EAAW,EAiCzBE,EAAqBF,IACzB,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,GAAoD,KAAhDurB,EAAW,GAAGvrB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CACtD6B,GAAU,EAAO,MAIrBlF,EAAqBkF,EAAQ,EAGzByO,EAAqBzK,IACzB,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,GAA2B,OAAvBurB,EAAW,GAAGvrB,KAAe,CAC/BunB,GAAU,EAAO,MAIrByL,EAAoBzL,EAAQ,EAGxBvB,EAAWA,KACfjE,EAAO,GAEP,MAAMoC,EAAoBhB,EAAaiB,QACjCge,EAAiB7N,EAAUnQ,QAC3Bie,EAAiBH,EAAU9d,QAEjCD,EAAkBtmB,KAAK,IACvBukC,EAAevkC,KAAK,IACpBwkC,EAAexkC,KAAK,IAEpBulB,EAAgBe,GAChBqQ,EAAa4N,GACbD,EAAaE,GAEbngB,EAAaiC,GACb4O,EAAkBqP,GAClBH,EAAkBI,GAElBhgB,GAAqB,GACrB2Q,GAAoB,EAAK,EAGrB9M,EAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,EAAiB/a,SAInByW,EAAUzW,GACV+a,EAAiB/a,QAGnByW,EAAUzW,GACV+a,EAAiB/a,IAIf+a,EAAoB/a,IACxB,MAAM4Y,EAAoBhB,EAAaiB,QACjCke,EAAiB/N,EAAUnQ,QAC3Bie,EAAiBH,EAAU9d,aAEY,IAAlCD,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,GAGzBf,EAAgBe,GAEhB6O,EAAoB7O,SAGoB,IAA/Bme,EAAe,GAAG/2B,OACvB+2B,EAAejlC,OAAS,EAC1BilC,EAAejc,OAAO9a,EAAO,GAE7B+2B,EAAe,GAAK,GAGtB9N,EAAa8N,GAEbpgB,EAAaogB,SAG2B,IAA/BD,EAAe,GAAG92B,OACvB82B,EAAehlC,OAAS,EAC1BglC,EAAehc,OAAO9a,EAAO,GAE7B82B,EAAe,GAAK,GAGtBF,EAAaE,GAEbJ,EAAkBI,IAGpB5W,EAAkBtH,GAClB6R,EAAkBsM,EAAe,GAGnCziB,EAAAA,EAAAA,YAAU,KACR,MAAMwE,EAAiC,GACjC0U,EAA8B,GAC9BwJ,EAA8B,GAEpC,GAAIhgB,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAMu0B,EAA+C,KAAnChS,EAAU,GAAGviB,KAAgB,UAAW,IAAImC,KAAKogB,EAAU,GAAGviB,KAAgB,WAAK,IAAImC,KAEzGkiB,EAAqBxmB,KAAK0kB,EAAU,GAAGviB,KAAY,MAAE,IACrD+4B,EAAkBl7B,KAAK02B,EAAUxxB,eACjCw/B,EAAkB1kC,KAAK0kB,EAAU,GAAGviB,KAAgB,WAGtDojB,EAAgBiB,GAChBmQ,EAAauE,GACboJ,EAAaI,GAEbrgB,EAAamC,GACb0O,EAAkBgG,GAClBkJ,EAAkBM,GAElB9W,EAAkBpH,GAClB2R,EAAkB+C,MAEnB,CAACxW,IAEJ,MAAMigB,EAAmBrb,GAErBne,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWmC,MACtCzc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO6X,EAAa,GAAGgE,KAAM,YACnB,SACVS,KAAK,aACLJ,SAAW3Q,GAzNQ+a,EAAC/a,EAAYtL,KACtC,MAAMmd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpFnD,EAAsB3O,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAsNjDqmB,CAAmB/a,EAAOsQ,GAC/Ca,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,MAM/EyR,EAAmBjT,QACY,IAAxBoN,EAAU,GAAGpN,KACf,KAIPne,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWiR,WACtCvrB,IAAAA,cAACqxB,EAAAA,EAAU,CACT7S,SAAW8S,GAlNGC,EAACjvB,EAAaC,KAClC,MAAMggB,EAAagJ,EAAUnQ,QAE7B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAAQA,EAAMvI,cAAgB,GAEvDyxB,EAAajJ,GAEbwH,EAAkBxH,GAElByK,EAAkBzK,EAAW,EAqMGgP,CAAcD,EAAMnT,GAC9C7b,MAA+B,KAAxBipB,EAAU,GAAGpN,MAAiBoN,EAAU,GAAGpN,KAAO2B,SAAS,QAAU,KAAO,IAAI3mB,KAAKoyB,EAAU,GAAGpN,MACzGqT,OAAQ,UACRiI,QAAS,IAAItgC,KAAK,KAAK,EAAE,GACzBs4B,QAAS,IAAIt4B,KACb8G,UAAW,aACXyxB,eAAgB,GAChBC,iBAAkB,GAClBC,gBAAiB,MAMnB8H,EAAmBvb,QACY,IAAxB+a,EAAU,GAAG/a,KACf,KAIPne,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW4e,WACtCl5B,IAAAA,cAACgnB,EAAAA,GAAM,CACLmR,YAAae,EAAU,GAAG/a,KAC1BgJ,QAASwS,EAAAA,EACTnb,SAAW3Q,GA3NG+rB,EAAC/rB,EAAYtL,KACjC,MAAMggB,EAAa2W,EAAU9d,QAE7B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/B8gC,EAAa5W,GAEb0W,EAAkB1W,EAAW,EAgNFqX,CAAc/rB,EAAOsQ,GAC1Cle,UAAW,SACXo4B,cAAc,KAMtB,OACEr4B,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GAtRFvb,QAsR0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,SAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,kCACZu5B,EAAgBrb,GAChBiT,EAAgBjT,GAChBub,EAAgBvb,IAKkC,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAyB,QAAzB,EAAG6S,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,QAKpE,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,QAI5E,0JC3VV,MA8eA,EA9e0DJ,IAE2O,IAF1O,WACzD+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,cACxD6H,EAAa,gBAAEC,EAAe,aAAE5H,EAAY,kBAAE6Q,EAAiB,mBAAE8P,EAAkB,uBAAEC,EAAsB,qBAAEzgB,EAAoB,uBAAE0gB,EAAsB,oBAAE/P,EAAmB,UAAEzQ,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,cAAEgP,EAAa,2BAAE7H,GAA4B1H,EAE/R,MAAO8S,EAAeC,IAAoBzY,EAAAA,EAAAA,UAAS,CAAC,MAC7C0Y,EAAiBC,IAAsB3Y,EAAAA,EAAAA,UAAS,CAAC,MACjD+N,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,MAC3Cmf,EAAWC,IAAgBpf,EAAAA,EAAAA,UAAS,EAAC,IAAIjT,MAAOY,iBAChDigC,EAAYC,IAAiB7tB,EAAAA,EAAAA,UAAS,CAAC,MACvC4Y,EAAaC,IAAkB7Y,EAAAA,EAAAA,UAAS,CAACiK,EAAAA,GAA6B,GAAGnE,OAE1EoI,EAAajE,EAAAA,GAAgC,GAAGnE,MAQhD,aAAE2I,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MAQ1ByB,EAAwBA,CAACC,EAAcla,KAC3C,MAAMggB,EAAapI,EAAaiB,QAGhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWka,EAEzB8F,EAAW,GAAGhgB,KAASma,OAEvBtC,EAAgBmI,GAEhBrJ,EAAaqJ,GAEbE,EAAkBF,EAAW,EAsCzB4C,EAAuBA,CAAC7iB,EAAeC,KAC3C,MAAMggB,EAAayC,EAAY5J,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MAGlDqQ,EAAW,GAAGhgB,KAAWD,EAEzB2iB,EAAe1C,GAEfuX,EAAuBvX,EAAW,EAG9BE,EAAqBF,IACzB,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,GAAoD,KAAhDurB,EAAW,GAAGvrB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CACtD6B,GAAU,EAAO,MAIrBlF,EAAqBkF,EAAQ,EAGzB2b,EAAuB3X,IAC3B,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,GAAoD,KAAhDurB,EAAW,GAAGvrB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CACtD6B,GAAU,EAAO,MAIrBwb,EAAuBxb,EAAQ,EAG3ByO,EAAqBzK,IACzB,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,GAA2B,OAAvBurB,EAAW,GAAGvrB,KAAe,CAC/BunB,GAAU,EAAO,MAIrByL,EAAoBzL,EAAQ,EAGxBvB,EAAWA,KACfjE,EAAO,GAEP,MAAMsM,EAAqBT,EAAcxJ,QACnCkK,EAAuBR,EAAgB1J,QACvCD,EAAoBhB,EAAaiB,QACjCge,EAAiB7N,EAAUnQ,QAC3B+e,EAAkBH,EAAW5e,QAC7BiB,EAAkB2I,EAAY5J,QAEpCiK,EAAmBxwB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,IAC/FiE,EAAqBzwB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,IAC/FlG,EAAkBtmB,KAAK,IACvBukC,EAAevkC,MAAK,IAAIsE,MAAOY,eAC/BogC,EAAgBtlC,KAAK,IACrBwnB,EAAgBxnB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MAErD2S,EAAiBQ,GACjBN,EAAmBO,GACnBlL,EAAgBe,GAChBqQ,EAAa4N,GACba,EAAcE,GACdlV,EAAe5I,GAEfwE,EAAcwE,GACdvE,EAAgBwE,GAChBpM,EAAaiC,GACb4O,EAAkBqP,GAClBS,EAAmBM,GACnBL,EAAuBzd,GAEvBhD,GAAqB,GACrB0gB,GAAuB,GACvB/P,GAAoB,EAAK,EAGrB9M,EAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,EAAiB/a,SAInByW,EAAUzW,GACV+a,EAAiB/a,QAGnByW,EAAUzW,GACV+a,EAAiB/a,IAIf+a,EAAoB/a,IACxB,MAAM8iB,EAAqBT,EAAcxJ,QACnCkK,EAAuBR,EAAgB1J,QACvCD,EAAoBhB,EAAaiB,QACjCgf,EAAsBpV,EAAY5J,QAClC+e,EAAkBH,EAAW5e,QAC7Bke,EAAiB/N,EAAUnQ,aAEa,IAAnCiK,EAAmB,GAAG9iB,OAC3B8iB,EAAmBhxB,OAAS,EAC9BgxB,EAAmBhI,OAAO9a,EAAO,GAEjC8iB,EAAmB,GAAKhE,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,SAInD,IAArCiE,EAAqB,GAAG/iB,OAC7B+iB,EAAqBjxB,OAAS,EAChCixB,EAAqBjI,OAAO9a,EAAO,GAEnC+iB,EAAqB,GAAKjE,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,SAItD,IAAlClG,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,GAGzBf,EAAgBe,GAEhB6O,EAAoB7O,SAGyB,IAApCif,EAAoB,GAAG73B,OAC5B63B,EAAoB/lC,OAAS,EAC/B+lC,EAAoB/c,OAAO9a,EAAO,GAElC63B,EAAoB,GAAK/jB,EAAAA,GAA6B,GAAGnE,KAG3D+S,EAAemV,GAEfN,EAAuBM,SAGkB,IAAhCD,EAAgB,GAAG53B,OACxB43B,EAAgB9lC,OAAS,EAC3B8lC,EAAgB9c,OAAO9a,EAAO,GAE9B43B,EAAgB,GAAK,GAGvBF,EAAcE,GAEdN,EAAmBM,SAGqB,IAA/Bb,EAAe,GAAG/2B,OACvB+2B,EAAejlC,OAAS,EAC1BilC,EAAejc,OAAO9a,EAAO,GAE7B+2B,EAAe,IAAK,IAAIngC,MAAOY,cAGjCyxB,EAAa8N,GAEbpgB,EAAaogB,IAGfzU,EAAiBQ,GACjBN,EAAmBO,GAEnBzE,EAAcwE,GACdvE,EAAgBwE,GAEhB7C,EAAkBtH,GAClB+e,EAAoBC,GACpBnN,EAAkBsM,EAAe,GAGnCziB,EAAAA,EAAAA,YAAU,KACR,MAAM2O,EAA6B,GAC7BC,EAA+B,GAC/BpK,EAAiC,GACjCuC,EAA+B,GAC/Byc,EAA+B,GAC/BtK,EAA8B,GAEpC,GAAIxW,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAMu0B,EAA+C,KAAnChS,EAAU,GAAGviB,KAAgB,UAAW,IAAImC,KAAKogB,EAAU,GAAGviB,KAAgB,WAAK,IAAImC,KAEzGqsB,EAAiB3wB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,IAC7FoE,EAAmB5wB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,IAC7FhG,EAAqBxmB,KAAK0kB,EAAU,GAAGviB,KAAY,MAAE,IACrD4mB,EAAmB/oB,KAA6C,KAAxC0kB,EAAU,GAAGviB,KAAqB,eAAWuiB,EAAU,GAAGviB,KAAqB,eAAIqf,EAAAA,GAA6B,GAAGnE,MAC3ImoB,EAAmBxlC,KAAK0kB,EAAU,GAAGviB,KAAiB,YACtD+4B,EAAkBl7B,KAAK02B,EAAUxxB,eAGnCqgB,EAAgBiB,GAChB4e,EAAcI,GAEdnhB,EAAamC,GACbwe,EAAmBQ,GAEnB5X,EAAkBpH,GAClB6e,EAAoBG,QAEpB7U,EAAiB3wB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,IAC7FoE,EAAmB5wB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,IAC7F0O,EAAkBl7B,MAAK,IAAIsE,MAAOY,eAClC6jB,EAAmB/oB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MAG1D2S,EAAiBW,GACjBT,EAAmBU,GACnBR,EAAerH,GACf4N,EAAauE,GAEblP,EAAc2E,GACd1E,EAAgB2E,GAChBqU,EAAuBlc,GACvBmM,EAAkBgG,GAElB/C,EAAkB+C,EAAkB,GACnC,CAACxW,IAEJ,MAAMigB,EAAmBrb,GAErBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWmC,MACtCzc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO6X,EAAa,GAAGgE,KAAM,YACnB,SACVS,KAAK,aACLJ,SAAW3Q,GAjUM+a,EAAC/a,EAAYtL,KACtC,MAAMmd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpFnD,EAAsB3O,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EA8T/CqmB,CAAmB/a,EAAOsQ,GAC/Ca,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OAOjFyR,GAAmBjT,QACY,IAAxBoN,EAAU,GAAGpN,KACf,KAIPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWiR,WACtCvrB,IAAAA,cAACqxB,IAAU,CACTiJ,WAAW,aACXC,SAAU,IAAIphC,KAAKoyB,EAAU,GAAGpN,MAChCK,SAAW8S,GA9TCC,EAACjvB,EAAaC,KAClC,MAAMggB,EAAagJ,EAAUnQ,QAE7B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,MAAK,IAAIsE,MAAOY,eAGzBuI,IACFigB,EAAW,GAAGhgB,KAAWD,EAAMvI,eAEjCyxB,EAAajJ,GAEbwH,EAAkBxH,GAElByK,EAAkBzK,EAAW,EAgTKgP,CAAcD,EAAMnT,GAC9Cqc,gBAAgB,iBAOpBC,GAAqBtc,GAEvBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW0f,YACtCh6B,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO03B,EAAW,GAAG7b,KAAM,YACjB,SACVS,KAAK,aACLJ,SAAW3Q,GAhUE6sB,EAACje,EAAcla,KACpC,MAAMggB,EAAayX,EAAW5e,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWka,EAEzB8F,EAAW,GAAGhgB,KAASma,OAEvBud,EAAc1X,GAEdsX,EAAmBtX,GAEnB2X,EAAoB3X,EAAW,EAiTFmY,CAAe7sB,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OAwCvF,OACE3f,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GA/ZFvb,QA+Z0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,SAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BACZu5B,EAAgBrb,GAChBiT,GAAgBjT,GAChBsc,GAAkBtc,GAhDhBA,IAEvBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,UACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW+D,QACtCre,IAAAA,cAAA,OAAKC,UAAU,kBACbD,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA6B,GAAGnE,KACvCqM,QAASyG,EAAY,GAAG7G,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAAc,eAC1E8S,EAAY,GAAG7G,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAC/EsM,SAAW3Q,GAAUsX,EAAqBtX,EAAMqN,OAAO5Y,MAAO6b,KAE/D9H,EAAAA,GAA6B,GAAGnE,MAGnClS,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA2B,GAAGnE,KACrCqM,QAASyG,EAAY,GAAG7G,OAAWnY,OAAOqQ,EAAAA,GAA2B,GAAGnE,MAAc,eACxE8S,EAAY,GAAG7G,OAAWnY,OAAOqQ,EAAAA,GAA2B,GAAGnE,MAC7EsM,SAAW3Q,GAAUsX,EAAqBtX,EAAMqN,OAAO5Y,MAAO6b,KAE/D9H,EAAAA,GAA2B,GAAGnE,SAwBlByT,CAAkBxH,IAKgC,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAyB,QAAzB,EAAG6S,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,QAKpE,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,QAI5E,sJC1eV,MAiVA,EAjVgEJ,IAIsC,IAJrC,WAC/D+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,kBACxD2hB,EAAiB,aAAEzhB,EAAY,qBAC/BG,EAAoB,oBAAE2Q,EAAmB,UACzCzQ,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,2BAAEmH,GAA4B1H,EAEhG,MAAOrJ,EAAYmyB,IAAiBxuB,EAAAA,EAAAA,UAAS,CAAC,MACvC1I,EAAOge,IAAYtV,EAAAA,EAAAA,UAAS,CAAC,MAE7B0Z,EAAaC,IAAiB3Z,EAAAA,EAAAA,UAAS,CAAC,IAEzCkO,EAAajE,EAAAA,GAAgC,GAAGnE,KAGhD2oB,EAAY,IAAI1hC,KACtB0hC,EAAUC,QAAQD,EAAUE,UAAY,GACxCF,EAAUG,SAAS,EAAG,EAAG,EAAG,GAE5B,MAMM,aAAEngB,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MA8B1ByH,EAAWA,CAAC/F,EAAcla,KAC9B,MAAMggB,EAAa7e,EAAM0X,QAGzB,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWka,EAEzB8F,EAAW,GAAGhgB,KAASma,OAEvBgF,EAASa,GAETrJ,EAAaqJ,GAEbE,EAAkBF,EAAW,EAKzBE,EAAqBF,IACzB,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,GAAoD,KAAhDurB,EAAW,GAAGvrB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CACtD6B,GAAU,EAAO,MAIrBlF,EAAqBkF,EAAQ,EAGzByO,EAAqBiO,IACzB,IAAIjlC,GAAS,EAEb,MAAMwU,EAAQywB,EAAgB5mC,OAE9B,IAAK,IAAI2C,EAAI,EAAGA,EAAIwT,EAAOxT,IAAK,CAG9B,QAFqDmJ,IAA5B86B,EAAgB,GAAGjkC,MAAkD,KAA5BikC,EAAgB,GAAGjkC,KAE9D,CACrBhB,GAAS,EAAO,OAIpBg0B,EAAoBh0B,EAAO,EAKvBgnB,EAAWA,KACfjE,EAAO,GAEP,MAAM8N,EAAmBf,EAAY1K,QAC/B6f,EAAkBxyB,EAAW2S,QAC7BkH,EAAa5e,EAAM0X,QAEzB6f,EAAgBpmC,KAAKgmC,EAAUK,gBAC/B5Y,EAAWztB,KAAK,IAChBkxB,EAAcc,GACd+T,EAAcK,GACdvZ,EAASY,GAETqY,EAAkBM,GAClB/hB,EAAaoJ,GAEbjJ,GAAqB,GAErB2T,EAAkBiO,EAAgB,EAG9B/d,EAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,EAAiB/a,SAInByW,EAAUzW,GACV+a,EAAiB/a,QAGnByW,EAAUzW,GACV+a,EAAiB/a,IAIf+a,EAAoB/a,IACxB,MAAMskB,EAAmBf,EAAY1K,QAC/B6f,EAAkBxyB,EAAW2S,QAC7BkH,EAAa5e,EAAM0X,QAEvB2K,EAAcc,QAG2B,IAAhCoU,EAAgB,GAAG14B,OACxB04B,EAAgB5mC,OAAS,EAC3B4mC,EAAgB5d,OAAO9a,EAAO,GAE9B04B,EAAgB,GAAKJ,EAAU9gC,cAGjC6gC,EAAcK,GAEdN,EAAkBM,SAGkB,IAA3B3Y,EAAW,GAAG/f,OACnB+f,EAAWjuB,OAAS,EACtBiuB,EAAWjF,OAAO9a,EAAO,GAEzB+f,EAAW,GAAK,GAGlBZ,EAASY,GAETpJ,EAAaoJ,IAGfG,EAAkBH,GAClB0K,EAAkBiO,EAAgB,GAIpCpkB,EAAAA,EAAAA,YAAU,KACR,MAAMgQ,EAA6B,GAC7BoU,EAA4B,GAC5B3Y,EAAuB,GAG7B,GAAI/I,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAEpCikC,EAAgBpmC,KAAK0kB,EAAU,GAAGviB,KAAgB,UAAIuiB,EAAU,GAAGviB,KAAgB,UAAI6jC,EAAU9gC,eACjGuoB,EAAWztB,KAAK0kB,EAAU,GAAGviB,KAAY,MAAE,IAI7C+uB,EAAcc,GACdnF,EAASY,GAETpJ,EAAaoJ,GAEbG,EAAkBH,QAIlB2Y,EAAgBpmC,KAAKgmC,EAAU9gC,eAIjC6gC,EAAcK,GAEdN,EAAkBM,GAElBjO,EAAkBiO,EAAgB,GACjC,CAAC1hB,IAEJ,MAAM4hB,EAA0Bhd,GAE5Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWugB,WACtC76B,IAAAA,cAACqxB,EAAAA,EAAU,CACT7S,SAAW8S,GAhNC8J,EAAC94B,EAAaC,KAClC,MAAMggB,EAAa9Z,EAAW2S,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAKgmC,EAAU9gC,eAG5BuI,EAAM04B,SAAS,EAAG,EAAG,EAAG,GAExB,MAAM1J,EAAOhvB,EAAQA,EAAMvI,cAAgB8gC,EAAU9gC,cAErDwoB,EAAW,GAAGhgB,KAAW+uB,EAEzBsJ,EAAcrY,GAEdoY,EAAkBpY,GAElByK,EAAkBzK,EAAW,EA+LK6Y,CAAc9J,EAAMnT,GAC9C7b,MAAgC,KAAzBmG,EAAW,GAAG0V,MAAiB1V,EAAW,GAAG0V,KAAO2B,SAAS,QAAU,KAAO,IAAI3mB,KAAKsP,EAAW,GAAG0V,MAC5GqT,OAAQ,UACRiI,QAASoB,EACT56B,UAAW,aACXyxB,eAAgB,KAChBC,iBAAkB,KAClBC,gBAAiB,WAOrB4H,EAAmBrb,GAErBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWmC,MACtCzc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOoB,EAAM,GAAGya,KAAM,YACZ,SACVS,KAAK,aACLJ,SAAU3Q,GArNK6V,EAAC7V,EAAYtL,KACpC,IAAImd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAElF6C,EAAS3U,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAkNpCmhB,CAAiB7V,EAAOsQ,GAC3Ca,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxD9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7ES,aAAa,WAOvB,OACEpgB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GAhQFvb,QAgQ0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,SAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BACZu5B,EAAgBrb,GAChBgd,EAAuBhd,IAK2B,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAG6lB,EAAY,GAAG3H,MAA+B,QAAzBqC,EAAG1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,SAK5F,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,8KCxUV,MAmrBA,EAnrB6DJ,IAAmZ,IAAlZ,WAAE+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,cAAE6H,EAAa,gBAAEC,EAAe,aAAE5H,EAAY,iBAAE6H,EAAgB,mBAAEC,EAAkB,mBAAEC,EAAkB,gBAAE6T,EAAe,oBAAE5T,EAAmB,qBAAE7H,EAAoB,uBAAE8H,EAAsB,4BAAE0I,EAA2B,UAAEtQ,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEwtB,EAAQ,SAAExiB,EAAQ,WAAEyT,EAAU,cAAEgP,EAAa,2BAAE7H,GAA4B1H,EAC1c,MAAOqI,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,MAC3CwY,EAAeC,IAAoBzY,EAAAA,EAAAA,UAAS,CAAC,MAC7C0Y,EAAiBC,IAAsB3Y,EAAAA,EAAAA,UAAS,CAAC,MACjDivB,EAAcC,IAAmBlvB,EAAAA,EAAAA,UAAS,CAAC,MAC3CmvB,EAAcC,IAAmBpvB,EAAAA,EAAAA,UAAS,CAAC,MAC3CqvB,EAAYC,IAAiBtvB,EAAAA,EAAAA,UAAS,CAAC,MACvCuvB,EAAYC,IAAiBxvB,EAAAA,EAAAA,UAAS,CAAC,MACvCyvB,EAAaC,IAAc1vB,EAAAA,EAAAA,UAAS,CAAC,MACrCrG,EAAc+b,IAAmB1V,EAAAA,EAAAA,UAAS,CAAC,KAE5CkO,EAAajE,EAAAA,GAAmC,GAAGnE,KACnDgQ,MAAad,IAAYA,EAASe,gBAAmD,KAAlCf,EAASe,cAAczF,OAE1EnC,GAAY1B,EAAWlhB,MAAK6iB,GAA4B,YAApBA,EAAKkG,aAA2BhG,cAOpE,aAAEG,GAAY,MAAEC,KAAUC,EAAAA,EAAAA,MAE1BuB,GAAeA,CAACha,EAAeia,KACnC,GAAIja,EAAO,CACT,MAAMoB,EAAQpB,EAAMhB,MAAM,KAE1B,OAAOoC,EAAM,GAAG6Y,KAAe7Y,EAAM,GAAG6Y,KAAe,GAGzD,MAAO,EAAE,EAqBLC,GAAwBA,CAACC,EAAcla,KAC3C,MAAM4Y,EAAoBhB,EAAaiB,QAEvC,UAAgD,IAAlCD,EAAkB,GAAG5Y,MACjC4Y,EAAkBtmB,KAAK,IAGzBsmB,EAAkB,GAAG5Y,KAAWka,EAEhCtB,EAAkB,GAAG5Y,KAASma,OAE9BtC,EAAgBe,GAEhBjC,EAAaiC,GAEbwB,GAAmBxB,EAAkB,EAyFjCwB,GAAsBxB,IAC1B,IAAI4B,GAAe,EAEnB,IAAK,IAAI/lB,EAAI,EAAGA,EAAImkB,EAAkB9mB,OAAQ2C,IAC5C,GAA2D,KAAvDmkB,EAAkB,GAAGnkB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC7DK,GAAe,EACf,MAIJ1D,EAAqB0D,EAAa,EAG9B2F,GAAuBA,CAACqZ,EAAyBC,KACrD,IAAIhmC,GAAS,EAEb,IAAK,IAAIgB,EAAI,EAAGA,EAAI+kC,EAAc1nC,SAAU2C,EAC1ChB,EAASA,GAAoC,KAA1B+lC,EAAc,GAAG/kC,MAA2C,KAA5BglC,EAAgB,GAAGhlC,KAGxEmqB,EAAuBnrB,EAAO,EAG1By4B,GAA4BnL,IAChC,IAAIoL,EAAsBpL,EAAkBjvB,OAAS,EAErD,IAAK,IAAI2C,EAAI,EAAGA,EAAIssB,EAAkBjvB,OAAQ2C,IAC5C,GAAyC,KAArCssB,EAAkB,GAAGtsB,KAAK0lB,OAAe,CAC3CgS,GAAsB,EACtB,MAIJ7E,EAA4B6E,EAAoB,EAG5C7L,GAAqBA,IACrBX,GACKd,EAAS0B,YAAYpG,QAAsC,KAA5B0E,EAAS2B,eAAwB,KAAO3B,EAAS2B,eAAerG,OAAS,KAAqC,KAA9B0E,EAAS4B,iBAA0B,KAAO5B,EAAS4B,iBAAiBtG,OAAS,KAAmC,KAA5B0E,EAAS6B,eAAwB,KAAO7B,EAAS6B,eAAevG,OAAS,KAAkC,KAA3B0E,EAAS6a,cAAuB,KAAO7a,EAAS6a,cAAcvf,OAAS,IAG5V,GAGHwf,GAAoBA,KACxB,GAAIha,GAAW,CACb,MAEMrS,EAFSzI,EAAU,GAAG8K,KAAc9K,UAElBzP,MAAMwkC,GAA4CA,EAAM9jC,MAAMw6B,gBAAkBzR,EAASgb,iBAAiBvJ,gBAElI,OAAOhjB,EAAWA,EAASxX,MAAQ,GAGrC,MAAO,EAAE,EAGL2kB,GAAWA,KACfjE,EAAO,GAEP,MAAMsM,EAAqBT,EAAcxJ,QACnCkK,EAAuBR,EAAgB1J,QACvCD,EAAoBhB,EAAaiB,QAEjCihB,EAAoBd,EAAangB,QACjCkhB,EAAkBb,EAAWrgB,QAC7B4gB,EAAkBL,EAAWvgB,QAC7BmhB,EAAeV,EAAYzgB,QAC3BkI,EAAoBvd,EAAaqV,QAEvCiK,EAAmBxwB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,IAC/FiE,EAAqBzwB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,IAC/FlG,EAAkBtmB,KAAK,IACvByuB,EAAkBzuB,KAAK,IAEnBqtB,IACFma,EAAkBxnC,KAAKguB,MACvByZ,EAAgBznC,KAAKusB,EAASmC,4BAC9ByY,EAAgBnnC,KAAKusB,EAASoC,qBAC9B+Y,EAAa1nC,KAAKqnC,QAElBG,EAAkBxnC,KAAK,IACvBynC,EAAgBznC,KAAK,IACrBmnC,EAAgBnnC,KAAK,IACrB0nC,EAAa1nC,KAAKuS,EAAU,GAAG8K,KAAc9K,UAAU,GAAG/O,QAG5DwsB,EAAiBQ,GACjBN,EAAmBO,GACnBlL,EAAgBe,GAEhBqgB,EAAgBa,GAChBX,EAAcY,GACdV,EAAcI,GACdF,EAAWS,GACXza,EAAgBwB,GAEhBzC,EAAcwE,GACdvE,EAAgBwE,GAChBpM,EAAaiC,GAEb4F,EAAiBsb,GACjBrb,EAAmBsb,GACnBrb,EAAmB+a,GACnBlH,EAAgByH,GAChBrb,EAAoBoC,GAEpBjK,GAAqB,GAErBqJ,GAAqB6Y,EAAcI,GAEnClN,GAAyBnL,EAAkB,EAGvCpG,GAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,GAAiB/a,SAInByW,EAAUzW,GACV+a,GAAiB/a,QAGnByW,EAAUzW,GACV+a,GAAiB/a,IAIf+a,GAAoB/a,IACxB,MAAM8iB,EAAqBT,EAAcxJ,QACnCkK,EAAuBR,EAAgB1J,QACvCD,EAAoBhB,EAAaiB,QACjCohB,EAAoBnB,EAAajgB,QAEjCihB,EAAoBd,EAAangB,QACjCkhB,EAAkBb,EAAWrgB,QAC7B4gB,EAAkBL,EAAWvgB,QAC7BmhB,EAAeV,EAAYzgB,QAC3BkI,EAAoBvd,EAAaqV,aAEO,IAAnCiK,EAAmB,GAAG9iB,OAC3B8iB,EAAmBhxB,OAAS,EAC9BgxB,EAAmBhI,OAAO9a,EAAO,GAEjC8iB,EAAmB,GAAKhE,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,SAInD,IAArCiE,EAAqB,GAAG/iB,OAC7B+iB,EAAqBjxB,OAAS,EAChCixB,EAAqBjI,OAAO9a,EAAO,GAEnC+iB,EAAqB,GAAKjE,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,SAItD,IAAlClG,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,SAIkB,IAAlCqhB,EAAkB,GAAGj6B,OAC1Bi6B,EAAkBnoC,OAAS,EAC7BmoC,EAAkBnf,OAAO9a,EAAO,GAEhCi6B,EAAkB,GAAK,SAIkB,IAAlCH,EAAkB,GAAG95B,OAC1B85B,EAAkBhoC,OAAS,EAC7BgoC,EAAkBhf,OAAO9a,EAAO,GAEhC85B,EAAkB,GAAK,GAGzBb,EAAgBa,GAEhBlb,EAAuBkb,SAGkB,IAAhCC,EAAgB,GAAG/5B,OACxB+5B,EAAgBjoC,OAAS,EAC3BioC,EAAgBjf,OAAO9a,EAAO,GAE9B+5B,EAAgB,GAAK,GAGvBZ,EAAcY,GAEdtb,EAAmBsb,SAGsB,IAAhCN,EAAgB,GAAGz5B,OACxBy5B,EAAgB3nC,OAAS,EAC3B2nC,EAAgB3e,OAAO9a,EAAO,GAE9By5B,EAAgB,GAAK,GAGvBJ,EAAcI,GAEd/a,EAAmB+a,SAGmB,IAA7BO,EAAa,GAAGh6B,OACrBg6B,EAAaloC,OAAS,EACxBkoC,EAAalf,OAAO9a,EAAO,GAE3Bg6B,EAAa,GAAKn1B,EAAU,GAAG8K,KAAc9K,UAAU,GAAG/O,MAG5DyjC,EAAWS,GAEXzH,EAAgByH,SAG2B,IAAlCjZ,EAAkB,GAAG/gB,OAC1B+gB,EAAkBjvB,OAAS,EAC3BivB,EAAkBjG,OAAO9a,EAAO,GAEhC+gB,EAAkB,GAAK,GAG3BxB,EAAgBwB,GAEhBpC,EAAoBoC,IAGtBuB,EAAiBQ,GACjBN,EAAmBO,GACnBlL,EAAgBe,GAChBmgB,EAAgBkB,GAEhB3b,EAAcwE,GACdvE,EAAgBwE,GAChBpM,EAAaiC,GAEbwB,GAAmBxB,GAEnBuH,GAAqB6Y,EAAcI,GAEnClN,GAAyBnL,EAAkB,GAG7CzM,EAAAA,EAAAA,YAAU,KACR,MAAM4lB,EAA8B,GAC9BC,EAA4B,GAC5BrhB,EAAiC,GAEjCshB,EAAiC,GACjCC,EAA+B,GAC/BC,EAA+B,GAC/BC,EAA4B,GAC5BxZ,EAA8B,GAGpC,GAAI/J,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAM+lC,EAAmBxjB,EAAU,GAAGviB,KAAY,MAElD,IAAIwT,EAAQ,EACR2P,EAAe,GAEnB,UAA+C,IAAjC4iB,EAAiB,GAAGvyB,MAChC2P,GAAgB4iB,EAAiB,GAAGvyB,UAEO,IAAhCuyB,EAAiBvyB,EAAQ,KAClC2P,GAAgB,KAGlB3P,IAGF,MAAMsc,EAAYzF,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,GACnF2b,EAAU3b,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,GAErFob,EAAkB5nC,KAAKiyB,GACvB4V,EAAgB7nC,KAAKmoC,GACrB3hB,EAAqBxmB,KAAKslB,GAE1BwiB,EAAqB9nC,KAAK0kB,EAAU,GAAGviB,KAAmB,cAC1D4lC,EAAmB/nC,KAAK0kB,EAAU,GAAGviB,KAAiB,YACtD6lC,EAAmBhoC,KAAK0kB,EAAU,GAAGviB,KAAiB,YACtD8lC,EAAgBjoC,KAAK0kB,EAAU,GAAGviB,KAAc,SAChDssB,EAAkBzuB,KAAK0kB,EAAU,GAAGviB,KAAkB,aAGxDojB,EAAgBiB,GAChBmgB,EAAgBmB,GAChBjB,EAAckB,GACdhB,EAAciB,GACdf,EAAWgB,GACXhb,EAAgBwB,GAEhBpK,EAAamC,GACb0F,EAAiB4b,GACjB3b,EAAmB4b,GACnB3b,EAAmB4b,GACnB/H,EAAgBgI,GAChB5b,EAAoBoC,GAEpB3G,GAAmBtB,GACnBqH,GAAqBia,EAAsBE,GAC3CpO,GAAyBnL,OACpB,CACL,MAAMwD,EAAYzF,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,GACnF2b,EAAU3b,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,GAErFob,EAAkB5nC,KAAKiyB,GACvB4V,EAAgB7nC,KAAKmoC,GACrB1Z,EAAkBzuB,KAAK,IAEnBqtB,KACFya,EAAqB9nC,KAAKguB,MAC1B+Z,EAAmB/nC,KAAKusB,EAASmC,4BACjCsZ,EAAmBhoC,KAAKusB,EAASoC,qBACjCsZ,EAAgBjoC,KAAKqnC,MAErBV,EAAgBmB,GAChBjB,EAAckB,GACdhB,EAAciB,GACdf,EAAWgB,GACXhb,EAAgBwB,GAEhBvC,EAAiB4b,GACjB3b,EAAmB4b,GACnB3b,EAAmB4b,GACnB/H,EAAgBgI,GAChB5b,EAAoBoC,GAEpBZ,GAAqBia,EAAsBE,GAC3CpO,GAAyBnL,IAI7BuB,EAAiB4X,GACjB1X,EAAmB2X,GAEnB7b,EAAc4b,GACd3b,EAAgB4b,EAAgB,GAC/B,CAACnjB,IAEJ,MAAM2F,GAAkBA,CAACf,EAAa5D,IACjB6E,MAAMC,MAAM,KAAMD,MAAM7E,IAAY5lB,KAAI,SAAU2qB,EAAGtoB,GAAK,OAAOA,CAAG,IAErErC,KAAK4nB,GAEnBvc,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWmC,KAAK+C,SAAS,KAAqB,IAAdjD,EAAkBjC,EAAWmC,KAAK5X,UAAU,EAAGyV,EAAWmC,KAAKpoB,OAAS,GAAK,KAAOkoB,EAAY,GAAK,IAAMjC,EAAWmC,KAAKzL,QAAQ,IAAK,KAAOuL,EAAY,IAAMjC,EAAWmC,KAAO,IAAMF,EAAY,GAChQvc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOga,GAAanC,EAAa,GAAGgE,KAAQ5B,GAAU,YAC5C,SACVqC,KAAK,aACLJ,SAAW3Q,GApfY4R,EAAC5R,EAAYtL,EAAega,EAAmBhC,KAChF,MAAMmF,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF,IAAIC,EAAY/R,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GACxDG,EAAoB1F,EAAa,GAAG5X,KAEnCsd,EAAkBC,SAAS,OAC9BD,GAAqB,IAAIrE,OAAOjB,EAAY,IAG9C,MAAMwF,EAAyBF,EAAkBve,MAAM,KAEvDye,EAAuB,GAAGxD,KAAeqD,EACzCA,EAAYG,EAAuBrE,KAAK,KAExCc,GAAsBoD,EAAWrd,EAAM,EAqeRkd,CAA2B5R,EAAOsQ,EAAK5B,EAAWhC,GACvEyE,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,SAQnFkE,GAAsB1F,IAC1B,MAAM8Z,EAAS7wB,EAAU,GAAG8K,KAAc9K,UAE1C,OACEpH,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,KAAGC,UAAU,iBAAiBqa,EAAWwJ,eACzC9jB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWyJ,iBACtC/jB,IAAAA,cAAA,qBACY,SACVC,UAAU,eACVye,UAAU,OACVE,KAAK,aACLJ,SAAW3Q,GAxeImW,EAAC1hB,EAAeC,KACvC,MAAMggB,EAAagZ,EAAangB,QAEhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBigB,EAAW,GAAGhgB,KAASma,OAEvB8e,EAAgBjZ,GAEhBxB,EAAiBwB,GAEjBG,GAAqB6Y,EAAcI,EAAW,EAydjB3X,CAAiBnW,EAAMqN,OAAO5Y,MAAO6b,GAC1Da,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1DW,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7Erd,MAAOi5B,EAAa,GAAGpd,KACvBG,KAAK,OACL8B,aAAa,SAGfpgB,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW2J,aACtCjkB,IAAAA,cAAA,qBACY,SACVC,UAAU,eACVye,UAAU,OACVE,KAAK,aACLJ,SAAW3Q,GApeEqW,EAAC5hB,EAAeC,KACrC,MAAMggB,EAAakZ,EAAWrgB,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBigB,EAAW,GAAGhgB,KAASma,OAEvBgf,EAAcnZ,GAEdvB,EAAmBuB,EAAW,EAudD2B,CAAerW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1DW,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7Erd,MAAOm5B,EAAW,GAAGtd,KACrBG,KAAK,OACL8B,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,iBACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW6J,mBACtCnkB,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOq5B,EAAW,GAAGxd,KAAM,YACjB,SACVS,KAAK,aACLJ,SAAW3Q,GAteAuW,EAAC9hB,EAAeC,KACrC,MAAMggB,EAAaoZ,EAAWvgB,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGfyN,EAAMjO,QAAQ,EACfkuB,EAAW,GAAGhgB,KAAWD,EAEzB+hB,EAAAA,GAAMC,QAAQjO,EAAAA,GAAkC,GAAGnE,MAGrDqQ,EAAW,GAAGhgB,KAASma,OAEvBkf,EAAcrZ,GAEdtB,EAAmBsB,GAEnBG,GAAqB6Y,EAAcI,EAAW,EAmdfvX,CAAevW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVmgB,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWiK,gBACtCvkB,IAAAA,cAACgnB,EAAAA,GAAM,CACLmR,YAAa0D,EAAY,GAAG1d,KAC5BgJ,QAAS8Q,EACTzZ,SAAW3Q,GA5dHovB,EAACpvB,EAAYtL,KAC/B,MAAMggB,EAAasZ,EAAYzgB,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/ByjC,EAAWvZ,GAEXuS,EAAgBvS,EAAW,EAidI0a,CAAYpvB,EAAOsQ,GACxCle,UAAW,SACXo4B,cAAc,MAKpBr4B,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWmK,cACtCzkB,IAAAA,cAAA,SACEse,KAAK,SACLI,UAAU,MACVpc,MAAOyD,EAAa,GAAGoY,KAAM,YACnB,SACVS,KAAK,aACLJ,SAAU3Q,GA7dI6W,EAACpiB,EAAeC,KACtC,MAAMggB,EAAaxc,EAAaqV,QAEhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBwf,EAAgBS,GAEhBrB,EAAoBqB,GAEpBkM,GAAyBlM,EAAW,EAgdTmC,CAAgB7W,EAAMqN,OAAO5Y,MAAO6b,GACvDa,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxD9e,UAAU,eACVmgB,aAAa,UAGb,EAIV,OACEpgB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,IApmBFvb,QAomB0B6gB,QAASrF,GAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,SAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BACZsa,GAAY,GAAK2E,GAAgBf,EAAK5D,IACtCsJ,GAAmB1F,IAK+B,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAyB,QAAzB,EAAG6S,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,QAKpE,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,oJC3rBV,MAiUA,EAjUiDJ,IAAoP,IAAnP,WAAE+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,cAAE6H,EAAa,gBAAEC,EAAe,aAAE5H,EAAY,qBAAEG,EAAoB,UAAEE,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,cAAEgP,EAAa,2BAAE7H,GAA4B1H,EAC/R,MAAOqI,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,MAC3CwY,EAAeC,IAAoBzY,EAAAA,EAAAA,UAAS,CAAC,MAC7C0Y,EAAiBC,IAAsB3Y,EAAAA,EAAAA,UAAS,CAAC,MACjDivB,EAAcC,IAAmBlvB,EAAAA,EAAAA,UAAS,CAAC,KAE5CkO,EAAajE,EAAAA,GAAuB,GAAGnE,KAEvCqI,EAAY1B,EAAWlhB,MAAK6iB,GAA4B,YAApBA,EAAKkG,aAA2BhG,cAOpE,aAAEG,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MAE1BuB,EAAeA,CAACha,EAAeia,KACnC,GAAIja,EAAO,CACT,MAAMoB,EAAQpB,EAAMhB,MAAM,KAE1B,OAAOoC,EAAM,GAAG6Y,KAAe7Y,EAAM,GAAG6Y,KAAe,GAGzD,MAAO,EAAE,EAqBLC,EAAwBA,CAACC,EAAcla,KAC3C,MAAM4Y,EAAoBhB,EAAaiB,QAEvC,UAAgD,IAAlCD,EAAkB,GAAG5Y,MACjC4Y,EAAkBtmB,KAAK,IAGzBsmB,EAAkB,GAAG5Y,KAAWka,EAEhCtB,EAAkB,GAAG5Y,KAASma,OAE9BtC,EAAgBe,GAEhBjC,EAAaiC,GAEbwB,EAAmBxB,EAAkB,EAGjCwB,EAAsBxB,IAC1B,IAAI4B,GAAe,EAEnB,IAAK,IAAI/lB,EAAI,EAAGA,EAAImkB,EAAkB9mB,OAAQ2C,IAC5C,GAA2D,KAAvDmkB,EAAkB,GAAGnkB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC7DK,GAAe,EACf,MAIJ1D,EAAqB0D,EAAa,EAG9BC,EAAWA,KACfjE,EAAO,GAEP,MAAMsM,EAAqBT,EAAcxJ,QACnCkK,EAAuBR,EAAgB1J,QACvCD,EAAoBhB,EAAaiB,QAEvCiK,EAAmBxwB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,IAC/FiE,EAAqBzwB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,IAC/FlG,EAAkBtmB,KAAK,IAEvBgwB,EAAiBQ,GACjBN,EAAmBO,GACnBlL,EAAgBe,GAEhB0F,EAAcwE,GACdvE,EAAgBwE,GAChBpM,EAAaiC,GAEb9B,GAAqB,EAAM,EAGvB6D,EAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,EAAiB/a,SAInByW,EAAUzW,GACV+a,EAAiB/a,QAGnByW,EAAUzW,GACV+a,EAAiB/a,IAIf+a,EAAoB/a,IACxB,MAAM8iB,EAAqBT,EAAcxJ,QACnCkK,EAAuBR,EAAgB1J,QACvCD,EAAoBhB,EAAaiB,QACjCohB,EAAoBnB,EAAajgB,aAEO,IAAnCiK,EAAmB,GAAG9iB,OAC3B8iB,EAAmBhxB,OAAS,EAC9BgxB,EAAmBhI,OAAO9a,EAAO,GAEjC8iB,EAAmB,GAAKhE,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,SAInD,IAArCiE,EAAqB,GAAG/iB,OAC7B+iB,EAAqBjxB,OAAS,EAChCixB,EAAqBjI,OAAO9a,EAAO,GAEnC+iB,EAAqB,GAAKjE,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,SAItD,IAAlClG,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,SAIkB,IAAlCqhB,EAAkB,GAAGj6B,OAC1Bi6B,EAAkBnoC,OAAS,EAC7BmoC,EAAkBnf,OAAO9a,EAAO,GAEhCi6B,EAAkB,GAAK,IAI3B3X,EAAiBQ,GACjBN,EAAmBO,GACnBlL,EAAgBe,GAChBmgB,EAAgBkB,GAEhB3b,EAAcwE,GACdvE,EAAgBwE,GAChBpM,EAAaiC,GAEbwB,EAAmBxB,EAAkB,GAGvCtE,EAAAA,EAAAA,YAAU,KACR,MAAM4lB,EAA8B,GAC9BC,EAA4B,GAC5BrhB,EAAiC,GAGvC,GAAI9B,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAM+lC,EAAmBxjB,EAAU,GAAGviB,KAAY,MAElD,IAAIwT,EAAQ,EACR2P,EAAe,GAEnB,UAA+C,IAAjC4iB,EAAiB,GAAGvyB,MAChC2P,GAAgB4iB,EAAiB,GAAGvyB,UAEO,IAAhCuyB,EAAiBvyB,EAAQ,KAClC2P,GAAgB,KAGlB3P,IAGF,MAAMsc,EAAYzF,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,GACnF2b,EAAU3b,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,GAErFob,EAAkB5nC,KAAKiyB,GACvB4V,EAAgB7nC,KAAKmoC,GACrB3hB,EAAqBxmB,KAAKslB,GAG5BC,EAAgBiB,GAEhBnC,EAAamC,GAEbsB,EAAmBtB,OACd,CACL,MAAMyL,EAAYzF,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,GACnF2b,EAAU3b,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,GAErFob,EAAkB5nC,KAAKiyB,GACvB4V,EAAgB7nC,KAAKmoC,GAGvBnY,EAAiB4X,GACjB1X,EAAmB2X,GAEnB7b,EAAc4b,GACd3b,EAAgB4b,EAAgB,GAC/B,CAACnjB,IAEJ,MAAM2F,EAAkBA,CAACf,EAAa5D,IACjB6E,MAAMC,MAAM,KAAMD,MAAM7E,IAAY5lB,KAAI,SAAU2qB,EAAGtoB,GAAK,OAAOA,CAAG,IAErErC,KAAK4nB,GAEnBvc,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWmC,KAAK+C,SAAS,KAAqB,IAAdjD,EAAkBjC,EAAWmC,KAAK5X,UAAU,EAAGyV,EAAWmC,KAAKpoB,OAAS,GAAK,KAAOkoB,EAAY,GAAK,IAAMjC,EAAWmC,KAAKzL,QAAQ,IAAK,KAAOuL,EAAY,IAAMjC,EAAWmC,KAAO,IAAMF,EAAY,GAChQvc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOga,EAAanC,EAAa,GAAGgE,KAAQ5B,GAAU,YAC5C,SACVqC,KAAK,aACLJ,SAAW3Q,GA3NY4R,EAAC5R,EAAYtL,EAAega,EAAmBhC,KAChF,MAAMmF,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF,IAAIC,EAAY/R,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GACxDG,EAAoB1F,EAAa,GAAG5X,KAEnCsd,EAAkBC,SAAS,OAC9BD,GAAqB,IAAIrE,OAAOjB,EAAY,IAG9C,MAAMwF,EAAyBF,EAAkBve,MAAM,KAEvDye,EAAuB,GAAGxD,KAAeqD,EACzCA,EAAYG,EAAuBrE,KAAK,KAExCc,EAAsBoD,EAAWrd,EAAM,EA4MRkd,CAA2B5R,EAAOsQ,EAAK5B,EAAWhC,GACvEyE,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,SAQzF,OACE3f,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GAzPFvb,QAyP0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,SAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BACZsa,EAAY,GAAK2E,EAAgBf,EAAK5D,IAKY,IAAAiG,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAyB,QAAzB,EAAG6S,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,QAKpE,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,oJC3TV,MA+XA,EA/XoDJ,IAAsR,IAArR,WAAE+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,cAAE6H,EAAa,gBAAEC,EAAe,aAAE5H,EAAY,gBAAEyR,EAAe,qBAAEtR,EAAoB,UAAEE,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,cAAEgP,EAAa,2BAAE7H,EAA0B,iBAACoR,GAAkB9Y,EACpU,MAAOqI,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,MAC3CwY,EAAeC,IAAoBzY,EAAAA,EAAAA,UAAS,CAAC,MAC7C0Y,EAAiBC,IAAsB3Y,EAAAA,EAAAA,UAAS,CAAC,MACjDivB,EAAcC,IAAmBlvB,EAAAA,EAAAA,UAAS,CAAC,MAC3CqgB,EAAQC,IAAatgB,EAAAA,EAAAA,UAAS,CAAC,KAEhCkO,EAAajE,EAAAA,GAA0B,GAAGnE,KAE1CqI,EAAY1B,EAAWlhB,MAAK6iB,GAA4B,YAApBA,EAAKkG,aAA2BhG,cAOpE,aAAEG,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MAE1BuB,EAAeA,CAACha,EAAeia,KACnC,GAAIja,EAAO,CACT,MAAMoB,EAAQpB,EAAMhB,MAAM,KAE1B,OAAOoC,EAAM,GAAG6Y,KAAe7Y,EAAM,GAAG6Y,KAAe,GAGzD,MAAO,EAAE,EAqBLC,EAAwBA,CAACC,EAAcla,KAC3C,MAAM4Y,EAAoBhB,EAAaiB,QAEvC,UAAgD,IAAlCD,EAAkB,GAAG5Y,MACjC4Y,EAAkBtmB,KAAK,IAGzBsmB,EAAkB,GAAG5Y,KAAWka,EAEhCtB,EAAkB,GAAG5Y,KAASma,OAE9BtC,EAAgBe,GAEhBjC,EAAaiC,GAEbwB,EAAmBxB,EAAkB,EASjC4V,EAAkBA,CAACtU,EAAcla,KACrC,MAAM+sB,EAAc7C,EAAOrR,QAE3B,UAA0C,IAA5BkU,EAAY,GAAG/sB,MAC3B+sB,EAAYz6B,KAAK,IAGnBy6B,EAAY,GAAG/sB,KAAWka,EAE1B6S,EAAY,GAAG/sB,KAASma,OAExBgQ,EAAU4C,GAEV3E,EAAgB2E,EAAY,EAGxB3S,EAAsBxB,IAC1B,IAAI4B,GAAe,EAEnB,IAAK,IAAI/lB,EAAI,EAAGA,EAAImkB,EAAkB9mB,OAAQ2C,IAC5C,GAA2D,KAAvDmkB,EAAkB,GAAGnkB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC7DK,GAAe,EACf,MAIJ1D,EAAqB0D,EAAa,EAG9BC,EAAWA,KACfjE,EAAO,GAEP,MAAMsM,EAAqBT,EAAcxJ,QACnCkK,EAAuBR,EAAgB1J,QACvCD,EAAoBhB,EAAaiB,QACjCkU,EAAc7C,EAAOrR,QAE3BiK,EAAmBxwB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,IAC/FiE,EAAqBzwB,KAAKwsB,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,IAC/FlG,EAAkBtmB,KAAK,IACvBy6B,EAAYz6B,KAAK,IAEjBgwB,EAAiBQ,GACjBN,EAAmBO,GACnBlL,EAAgBe,GAChBuR,EAAU4C,GAEVzO,EAAcwE,GACdvE,EAAgBwE,GAChBpM,EAAaiC,GACbwP,EAAgB2E,GAEhBjW,GAAqB,EAAM,EAGvB6D,EAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,EAAiB/a,SAInByW,EAAUzW,GACV+a,EAAiB/a,QAGnByW,EAAUzW,GACV+a,EAAiB/a,IAIf+a,EAAoB/a,IACxB,MAAM8iB,EAAqBT,EAAcxJ,QACnCkK,EAAuBR,EAAgB1J,QACvCD,EAAoBhB,EAAaiB,QACjCohB,EAAoBnB,EAAajgB,QACjCkU,EAAc7C,EAAOrR,aAEmB,IAAnCiK,EAAmB,GAAG9iB,OAC3B8iB,EAAmBhxB,OAAS,EAC9BgxB,EAAmBhI,OAAO9a,EAAO,GAEjC8iB,EAAmB,GAAKhE,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,SAInD,IAArCiE,EAAqB,GAAG/iB,OAC7B+iB,EAAqBjxB,OAAS,EAChCixB,EAAqBjI,OAAO9a,EAAO,GAEnC+iB,EAAqB,GAAKjE,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,SAItD,IAAlClG,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,SAIkB,IAAlCqhB,EAAkB,GAAGj6B,OAC1Bi6B,EAAkBnoC,OAAS,EAC7BmoC,EAAkBnf,OAAO9a,EAAO,GAEhCi6B,EAAkB,GAAK,SAIY,IAA5BlN,EAAY,GAAG/sB,OACpB+sB,EAAYj7B,OAAS,EACvBi7B,EAAYjS,OAAO9a,EAAO,GAE1B+sB,EAAY,GAAK,IAIrBzK,EAAiBQ,GACjBN,EAAmBO,GACnBlL,EAAgBe,GAChBmgB,EAAgBkB,GAChB9P,EAAU4C,GAEVzO,EAAcwE,GACdvE,EAAgBwE,GAChBpM,EAAaiC,GACbwP,EAAgB2E,GAEhB3S,EAAmBxB,EAAkB,GAGvCtE,EAAAA,EAAAA,YAAU,KACR,MAAM4lB,EAA8B,GAC9BC,EAA4B,GAC5BrhB,EAAiC,GACjC+U,EAA2B,GAGjC,GAAI7W,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAM+lC,EAAmBxjB,EAAU,GAAGviB,KAAY,MAElD,IAAIwT,EAAQ,EACR2P,EAAe,GAEnB,UAA+C,IAAjC4iB,EAAiB,GAAGvyB,MAChC2P,GAAgB4iB,EAAiB,GAAGvyB,UAEO,IAAhCuyB,EAAiBvyB,EAAQ,KAClC2P,GAAgB,KAGlB3P,IAGF,MAAMsc,EAAYzF,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,GACnF2b,EAAU3b,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,GAErFob,EAAkB5nC,KAAKiyB,GACvB4V,EAAgB7nC,KAAKmoC,GACrB3hB,EAAqBxmB,KAAKslB,GAC1BiW,EAAev7B,KAAK0kB,EAAU,GAAGviB,KAAc,SAGjDojB,EAAgBiB,GAChBqR,EAAU0D,GAEVlX,EAAamC,GACbsP,EAAgByF,GAEhBzT,EAAmBtB,OACd,CACL,MAAMyL,EAAYzF,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAS,KAAI,GACnF2b,EAAU3b,GAAiBA,EAAchtB,OAAS,EAAIgtB,EAAc,GAAO,GAAI,GAErFob,EAAkB5nC,KAAKiyB,GACvB4V,EAAgB7nC,KAAKmoC,GAGvBnY,EAAiB4X,GACjB1X,EAAmB2X,GAEnB7b,EAAc4b,GACd3b,EAAgB4b,EAAgB,GAC/B,CAACnjB,IAEJ,MAAM2F,EAAkBA,CAACf,EAAa5D,IACjB6E,MAAMC,MAAM,KAAMD,MAAM7E,IAAY5lB,KAAI,SAAU2qB,EAAGtoB,GAAK,OAAOA,CAAG,IAErErC,KAAK4nB,GAEnBvc,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWmC,KAAK+C,SAAS,KAAqB,IAAdjD,EAAkBjC,EAAWmC,KAAK5X,UAAU,EAAGyV,EAAWmC,KAAKpoB,OAAS,GAAK,KAAOkoB,EAAY,GAAK,IAAMjC,EAAWmC,KAAKzL,QAAQ,IAAK,KAAOuL,EAAY,IAAMjC,EAAWmC,KAAO,IAAMF,EAAY,GAChQvc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOga,EAAanC,EAAa,GAAGgE,KAAQ5B,GAAU,YAC5C,SACVqC,KAAK,aACLJ,SAAW3Q,GApQY4R,EAAC5R,EAAYtL,EAAega,EAAmBhC,KAChF,MAAMmF,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF,IAAIC,EAAY/R,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GACxDG,EAAoB1F,EAAa,GAAG5X,KAEnCsd,EAAkBC,SAAS,OAC9BD,GAAqB,IAAIrE,OAAOjB,EAAY,IAG9C,MAAMwF,EAAyBF,EAAkBve,MAAM,KAEvDye,EAAuB,GAAGxD,KAAeqD,EACzCA,EAAYG,EAAuBrE,KAAK,KAExCc,EAAsBoD,EAAWrd,EAAM,EAqPRkd,CAA2B5R,EAAOsQ,EAAK5B,EAAWhC,GACvEyE,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,SAQnF+T,EAAiBvV,GAEnBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWvV,SACtC/E,IAAAA,cAAA,YACE0e,UAAU,OACVpc,MAAOmqB,EAAO,GAAGtO,KAAM,YACb,SACVS,KAAK,aACLJ,SAAW3Q,GArPS8lB,EAAC9lB,EAAYtL,KACzC,MAAMmd,EAAYzQ,EAAO2kB,0BAA4B3kB,EAAO2kB,0BAA4B,IAExF7C,EAAgBljB,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAkPzCoxB,CAAsB9lB,EAAOsQ,GAClDle,UAAU,eACVyf,UAAWzQ,EAAO2kB,0BAA4B3kB,EAAO2kB,0BAA4B,QAO3F,OACE5zB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GArTFvb,QAqT0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,SAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BACZsa,EAAY,GAAK2E,EAAgBf,EAAK5D,GACtCqQ,GAAoB8I,EAAcvV,IAKgB,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAyB,QAAzB,EAAG6S,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,QAKpE,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,qKC5WV,MAmjCA,EAnjC8DJ,IA8BzD,IA9B0D,WAC7D+G,EAAU,gBACV/F,EAAe,eACfoqB,EAAc,SACdpkB,EAAQ,OACRC,EAAM,WACNokB,EAAU,UACVnkB,EAAS,WACTokB,EAAU,aACVlkB,EAAY,iBACZC,EAAgB,iBAChBkkB,EAAgB,oBAChBC,EAAmB,kBACnBC,EAAiB,gBACjBC,EAAe,gBACfC,EAAe,mBACfC,EAAkB,iBAClBC,EAAgB,qBAChBC,EAAoB,oBACpBC,EAAmB,qBACnBxkB,EAAoB,UACpBE,EAAS,OACTtK,EAAM,WACNiD,EAAU,cACVte,EAAa,SACbgL,EAAQ,WACRyT,EAAU,aACVyrB,EAAY,gBACZC,EAAe,2BACfvkB,GACD1H,EACC,MAAOksB,EAAmBC,IAAwB7xB,EAAAA,EAAAA,UAAS,CAAC,MACrD8xB,EAAeC,IAAoB/xB,EAAAA,EAAAA,UAAS,CAAC,MAC7C9H,EAAa85B,IAAkBhyB,EAAAA,EAAAA,UAAS,CAAC,MACzCiyB,EAAYC,IAAiBlyB,EAAAA,EAAAA,UAAS,CAAC,SACvCmyB,EAAWC,IAAgBpyB,EAAAA,EAAAA,UAAS,CAAC,KACrCqyB,EAAgBC,IAAqBtyB,EAAAA,EAAAA,UAAS,EACnD,IAAIjT,MAAOY,iBAEN4kC,EAAcC,IAAmBxyB,EAAAA,EAAAA,UAAS,CAC/C,IAAIjT,MACF,IAAIA,MAAO0lC,aAAY,IAAI1lC,MAAO2lC,cAAgB,IAClD/kC,iBAEGglC,EAAiBC,IAAsB5yB,EAAAA,EAAAA,UAAS,CAAC,MACjD6yB,EAAcC,KAAmB9yB,EAAAA,EAAAA,UAAS,CAAC,MAC3C6N,GAAYC,KAAiB9N,EAAAA,EAAAA,UAAS,CAC3CiK,EAAAA,GAA6B,GAAGnE,QAE3BiI,GAAcC,KAAmBhO,EAAAA,EAAAA,UAAS,CAAC,KAG5CkO,GAAajE,EAAAA,GAAoC,GAAGnE,KACpDqI,GAAY1B,EAAWlhB,MAAM6iB,GAA6B,YAApBA,EAAKkG,aAC9ChG,aACG7R,GAAegQ,EAAWlhB,MAAM6iB,GAA6B,YAApBA,EAAKkG,aACjDuB,eAQG,aAAEpH,GAAY,MAAEC,KAAUC,EAAAA,EAAAA,MAE1BokB,GAAqBA,CAACtxB,EAAYtL,KACtC68B,GAAmBvxB,EAAMqN,OAAO5Y,MAAOC,GACvC88B,GAAoBxxB,EAAMqN,OAAO5Y,MAAOC,EAAM,EAG1C+8B,GAA2BA,CAACzxB,EAAYtL,KAC5Cg9B,GAAyB1xB,EAAMqN,OAAO5Y,MAAOC,GAC7Ci9B,GAAsB3xB,EAAMqN,OAAO5Y,MAAOC,EAAM,EAG5CyY,GAAsBA,CAACnN,EAAYtL,KACvC0Y,GAAoBpN,EAAMqN,OAAO5Y,MAAOC,GAExC,MAAM4Y,EAAoBhB,GAAaiB,QAEvC,IAAIC,EAAuBF,EAAkB,GAAG5Y,KAEhD,MAAM+Y,EAAoBD,EAAqB/Z,MAAM,KAErD,GAAIuM,EAAMqN,OAAO5Y,QAAU+T,EAAAA,GAA6B,GAAGnE,KACzD,GAAIoJ,EAAkBjnB,OAASkmB,GAC7Bc,GAAwB,IAAIG,OAC1BjB,GAAYe,EAAkBjnB,OAAS,OAEpC,CAEL,KAAOinB,EAAkBjnB,OAASkmB,IAChCe,EAAkBG,MAGpBJ,EAAuBC,EAAkBI,KAAK,UAGhD,GAAIJ,EAAkBjnB,OAASwU,GAC7BwS,GAAwB,IAAIG,OAC1B3S,GAAeyS,EAAkBjnB,OAAS,OAEvC,CAEL,KAAOinB,EAAkBjnB,OAASwU,IAChCyS,EAAkBG,MAEpBJ,EAAuBC,EAAkBI,KAAK,KAIlDP,EAAkB,GAAG5Y,KAAW8Y,EAEhCF,EAAkB,GAAG5Y,KAASma,OAE9BtC,GAAgBe,GAEhBjC,EAAaiC,EAAkB,EAG3BokB,GAA2BA,CAACj9B,EAAeC,KAC/C,MAAMk9B,EAAuBV,EAAgB3jB,QAE7C,UAAmD,IAArCqkB,EAAqB,GAAGl9B,MACpCk9B,EAAqB5qC,KAAK,IAG5B4qC,EAAqB,GAAGl9B,KAAWD,EAEnCm9B,EAAqB,GAAGl9B,KAASma,OAEjCsiB,EAAmBS,GACnB/B,EAAmB+B,EAAqB,EAGpCD,GAAwBA,CAACl9B,EAAeC,KAC5C,MAAMm9B,EAAoBT,EAAa7jB,QACjCD,EAAoBhB,GAAaiB,QAEvC,UAAgD,IAAlCskB,EAAkB,GAAGn9B,MACjCm9B,EAAkB7qC,KAAK,IAGa,KAAlC6qC,EAAkB,GAAGn9B,MACT,QAAVD,IACFo9B,EAAkB,GAAGn9B,KAAW4X,GAAa,GAAG5X,MAGlD28B,GAAgBQ,GAChBjC,EAAgBiC,IAEF,OAAVp9B,IACF6Y,EAAkB,GAAG5Y,KAAWm9B,EAAkB,GAAGn9B,KACrDm9B,EAAkB,GAAGn9B,KAAW,GAEhC6X,GAAgBe,GAChBjC,EAAaiC,GACb+jB,GAAgBQ,GAChBjC,EAAgBiC,KAKhBN,GAAqBA,CAAC98B,EAAeC,KACzC,IAAIo9B,EAAiBpB,EAAUnjB,QAE/B,UAA6C,IAA/BukB,EAAe,GAAGp9B,MAC9Bo9B,EAAe9qC,KAAK,GAGtB8qC,EAAe,GAAGp9B,MAAYD,EAE9Bk8B,EAAamB,GACbtC,EAAiBsC,EAAe,EAG5BN,GAAsBA,CAAC/8B,EAAeC,KAC1C,IAAIq9B,EAAsBnB,EAAerjB,QACrCykB,EAAoBlB,EAAavjB,QAErC,UAAkD,IAApCwkB,EAAoB,GAAGr9B,MACnCq9B,EAAoB/qC,MAAK,IAAIsE,MAAOY,eAGtC,UAAgD,IAAlC8lC,EAAkB,GAAGt9B,MACjCs9B,EAAkBhrC,KAChB,IAAIsE,MACF,IAAIA,MAAO0lC,aAAY,IAAI1lC,MAAO2lC,cAAgB,IAClD/kC,eAIN6lC,EAAoB,GAAGr9B,KAAW,IAAIpJ,KACpCymC,EAAoB,GAAGr9B,MACvBxI,cACF8lC,EAAkB,GAAGt9B,KAAW,IAAIpJ,KAClC,IAAIA,KAAKymC,EAAoB,GAAGr9B,MAAUs8B,YACxC,IAAI1lC,KAAKymC,EAAoB,GAAGr9B,MAAUu8B,gBAAiBx8B,IAE7DvI,cAEF2kC,EAAkBkB,GAClBhB,EAAgBiB,GAChBtC,EAAkBqC,GAClBpC,EAAgBqC,EAAkB,EAG9B5kB,GAAsBA,CAAC3Y,EAAeC,KAC1C,IAAI8Z,EAAkBpC,GAAWmB,QAEjC,UAA8C,IAAhCiB,EAAgB,GAAG9Z,MAC/B8Z,EAAgBxnB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MAGvDmK,EAAgB,GAAG9Z,KAAWD,EAE9B4X,GAAcmC,GAEdlD,EAAiBkD,EAAgB,EAG7BC,GAAeA,CAACha,EAAeia,KACnC,GAAIja,EAAO,CACT,MAAMoB,EAAQpB,EAAMhB,MAAM,KAE1B,OAAOoC,EAAM,GAAG6Y,KAAe7Y,EAAM,GAAG6Y,KAAe,GAGzD,MAAO,EAAE,EA4BLC,GAAwBA,CAACC,EAAcla,KAC3C,MAAM4Y,EAAoBhB,GAAaiB,QAEvC,UAAgD,IAAlCD,EAAkB,GAAG5Y,MACjC4Y,EAAkBtmB,KAAK,IAGzBsmB,EAAkB,GAAG5Y,KAAWka,EAEhCtB,EAAkB,GAAG5Y,KAASma,OAE9BtC,GAAgBe,GAEhBjC,EAAaiC,GAEbwB,GAAmBxB,EAAkB,EAGjCwB,GAAsBxB,IAC1B,IAAI4B,GAAe,EACnB,IAAK,IAAI/lB,EAAI,EAAGA,EAAImkB,EAAkB9mB,OAAQ2C,IAC5C,GAA2D,KAAvDmkB,EAAkB,GAAGnkB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC7DK,GAAe,EACf,MAIJ1D,EAAqB0D,EAAa,EAG9BC,GAAWA,KACfjE,EAAO,GAEP,MAAM+mB,EAAyB9B,EAAkB5iB,QAC3C2kB,EAAqB7B,EAAc9iB,QACnC4kB,EAAmB17B,EAAY8W,QAC/B6kB,EAAwB5B,EAAWjjB,QACnCwkB,EAAsBnB,EAAerjB,QACrCykB,EAAoBlB,EAAavjB,QACjCukB,EAAiBpB,EAAUnjB,QAC3B6B,EAAqBhD,GAAWmB,QAChCD,EAAoBhB,GAAaiB,QAEvC0kB,EAAuBjrC,KAAK,IAC5BkrC,EAAmBlrC,KAAK,IACxBmrC,EAAiBnrC,KAAK,IACtBorC,EAAsBprC,KAAK,OAC3B+qC,EAAoB/qC,MAAK,IAAIsE,MAAOY,eACpC8lC,EAAkBhrC,KAChB,IAAIsE,MACF,IAAIA,MAAO0lC,aAAY,IAAI1lC,MAAO2lC,cAAgB,IAClD/kC,eAEJ4lC,EAAe9qC,KAAK,GACpBooB,EAAmBpoB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MACxDiJ,EAAkBtmB,KAAK,IAEvBopC,EAAqB6B,GACrB3B,EAAiB4B,GACjB3B,EAAe4B,GACf1B,EAAc2B,GACdvB,EAAkBkB,GAClBhB,EAAgBiB,GAChBrB,EAAamB,GACbzlB,GAAc+C,GACd7C,GAAgBe,GAEhByiB,EAAqBkC,GACrBnC,EAAiBoC,GACjBlC,EAAoBmC,GACpB1C,EAAoB2C,GACpB1C,EAAkBqC,GAClBpC,EAAgBqC,GAChBxC,EAAiBsC,GACjBxmB,EAAiB8D,GACjB/D,EAAaiC,GAEb9B,GAAqB,EAAM,EAoHvB6D,GAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAOd,UALwB1a,EAAAA,EAAAA,GACtB,CAAE9O,cAAeC,GACjBsO,EAAUQ,KAAKlK,KAGHnE,OAAS,GAAKklB,EAAU,GAAGhX,KAAqB,WAAG,CAK1B,mBAJHL,EAAUa,gBAAgB,CAC1DC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAGxBU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAC/B,CAAE7P,cAAeC,GACjB2lB,EAAU,GAAGhX,KAAqB,YAGhC4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,GAAiB/a,SAGnByW,EAAUzW,GACV+a,GAAiB/a,QAGnByW,EAAUzW,GACV+a,GAAiB/a,IAIf+a,GAAoB/a,IACxB,MAAMu9B,EAAyB9B,EAAkB5iB,QAC3C2kB,EAAqB7B,EAAc9iB,QACnC4kB,EAAmB17B,EAAY8W,QAC/B6kB,EAAwB5B,EAAWjjB,QACnCwkB,EAAsBnB,EAAerjB,QACrCykB,EAAoBlB,EAAavjB,QACjCukB,EAAiBpB,EAAUnjB,QAC3B8kB,EAAkBnB,EAAgB3jB,QAClC6B,EAAqBhD,GAAWmB,QAChCD,EAAoBhB,GAAaiB,QACjC+kB,EAAelB,EAAa7jB,aAGgB,IAAvC0kB,EAAuB,GAAGv9B,OAC/Bu9B,EAAuBzrC,OAAS,EAClCyrC,EAAuBziB,OAAO9a,EAAO,GAE9Bw7B,IACP+B,EAAuB,GAAK,UAIc,IAAnCC,EAAmB,GAAGx9B,OACQ,KAAnCw9B,EAAmB,GAAGx9B,MACxB66B,EAAW2C,EAAmB,GAAGx9B,MAE/Bw9B,EAAmB1rC,OAAS,EAC9B0rC,EAAmB1iB,OAAO9a,EAAO,GAE1Bw7B,IACPgC,EAAmB,GAAK,UAIgB,IAAjCC,EAAiB,GAAGz9B,OAEzBy9B,EAAiB3rC,OAAS,EAE5B2rC,EAAiB3iB,OAAO9a,EAAO,GAExBw7B,IACPiC,EAAiB,GAAK,UAIuB,IAAtCC,EAAsB,GAAG19B,OAE9B09B,EAAsB5rC,OAAS,EACjC4rC,EAAsB5iB,OAAO9a,EAAO,GAE7Bw7B,IACPkC,EAAsB,GAAK,aAIgB,IAApCL,EAAoB,GAAGr9B,OAE5Bq9B,EAAoBvrC,OAAS,EAC/BurC,EAAoBviB,OAAO9a,EAAO,GAE3Bw7B,IACP6B,EAAoB,IAAK,IAAIzmC,MAAOY,qBAIK,IAAlC8lC,EAAkB,GAAGt9B,OAE1Bs9B,EAAkBxrC,OAAS,EAC7BwrC,EAAkBxiB,OAAO9a,EAAO,GAEzBw7B,IACP8B,EAAkB,GAAK,IAAI1mC,MACzB,IAAIA,MAAO0lC,aAAY,IAAI1lC,MAAO2lC,cAAgB,IAClD/kC,qBAIoC,IAA/B4lC,EAAe,GAAGp9B,OAEvBo9B,EAAetrC,OAAS,EAC1BsrC,EAAetiB,OAAO9a,EAAO,GAEtBw7B,IACP4B,EAAe,GAAK,SAImB,IAAhCO,EAAgB,GAAG39B,OAExB29B,EAAgB7rC,OAAS,EAC3B6rC,EAAgB7iB,OAAO9a,EAAO,GAEvBw7B,IACPmC,EAAgB,GAAK,UAIqB,IAAnCjjB,EAAmB,GAAG1a,OAE3B0a,EAAmB5oB,OAAS,EAC9B4oB,EAAmBI,OAAO9a,EAAO,GAE1Bw7B,IACP9gB,EAAmB,GAAK5G,EAAAA,GAA6B,GAAGnE,YAIf,IAAlCiJ,EAAkB,GAAG5Y,OAE1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEzBw7B,IACP5iB,EAAkB,GAAK,UAIa,IAA7BglB,EAAa,GAAG59B,OAErB49B,EAAa9rC,QAAU,EACzB8rC,EAAa9iB,OAAO9a,EAAO,GAEpBw7B,IACPoC,EAAa,GAAK,KAItBlC,EAAqB6B,GACrB3B,EAAiB4B,GACjB3B,EAAe4B,GACf1B,EAAc2B,GACdvB,EAAkBkB,GAClBhB,EAAgBiB,GAChBrB,EAAamB,GACbX,EAAmBkB,GACnBhmB,GAAc+C,GACd7C,GAAgBe,GAChB+jB,GAAgBiB,GAEhBvC,EAAqBkC,GACrBnC,EAAiBoC,GACjBlC,EAAoBmC,GACpB1C,EAAoB2C,GACpB1C,EAAkBqC,GAClBpC,EAAgBqC,GAChBxC,EAAiBsC,GACjBjC,EAAmBwC,GACnB/mB,EAAiB8D,GACjB/D,EAAaiC,GACbsiB,EAAgB0C,GAEhBxjB,GAAmBxB,EAAkB,GAGvCtE,EAAAA,EAAAA,YAAU,KACR,MAAMwE,EAAiC,GACjC+kB,EAAmC,GACnCC,EAAiC,GACjCC,EAA8B,GAC9B1iB,EAA+B,GAC/B2iB,EAAqC,GACrCC,EAAoC,GACpCC,EAAiC,GAEvC,GACElnB,EAAUllB,OAAS,QAC0B,IAAtCklB,EAAU,GAAsB,mBACF,GAArCA,EAAU,GAAsB,kBAChC,CACA,IAAK,IAAIviB,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAM+mB,EAAsBxE,EAAU,GAAGviB,KAAY,MAC/C0pC,EAAWnnB,EAAU,GAAGviB,KAAe,SACvC8mB,EAAevE,EAAU,GAAGviB,KAAe,SAC3C2pC,EAAkBpnB,EAAU,GAAGviB,KAAkB,YACjD4pC,EAAgBrnB,EAAU,GAAGviB,KAAgB,UAC7C6pC,EAActnB,EAAU,GAAGviB,KAAc,QACzC8pC,EAAiBvnB,EAAU,GAAGviB,KAAiB,WAC/C+pC,EAAgBxnB,EAAU,GAAGviB,KAAgB,UAC7CgqC,EAAgBznB,EAAU,GAAGviB,KAAgB,UAEnD,IAAIgnB,EAAgB,EAGlBA,EADEF,IAAiBzH,EAAAA,GAA6B,GAAGnE,KACnCqI,GAEA1R,GAGlB,IAAIoV,EAAW,GAmCf,GAjCAF,EAAUppB,KAAI,CAAC8nB,EAAMla,KAEjB0b,GADW,GAAT1b,GAAcA,EAAQyb,EACZ,IAAMvB,EAENA,KAIhBpB,EAAqBxmB,KAAKopB,GAEtB2iB,EACFR,EAAuBvrC,KAAK,IAAIsE,KAAKynC,GAAe7mC,eAEpDqmC,EAAuBvrC,MAAK,IAAIsE,MAAOY,eAGrC8mC,EACFR,EAAqBxrC,KAAK,IAAIsE,KAAK0nC,GAAa9mC,eAEhDsmC,EAAqBxrC,KACnB,IAAIsE,MACF,IAAIA,MAAO0lC,aAAY,IAAI1lC,MAAO2lC,cAAgB4B,IAClD3mC,eAINumC,EAAkBzrC,KAAK6rC,GACvB9iB,EAAmB/oB,KAAKipB,GACxByiB,EAAyB1rC,KACH,KAApB8rC,EAAyBA,EAAkB,OAE7CH,EAAwB3rC,KAAKisC,GAEP,KAAlBC,EAAsB,CACxB,IAAIE,EAAUF,EAAgB,IAAMC,EACpCP,EAAqB5rC,KAAKosC,IAI9B7mB,GAAgBiB,GAChBqjB,EAAkB0B,GAClBxB,EAAgByB,GAChB7B,EAAa8B,GACbpmB,GAAc0D,GACd0gB,EAAciC,GACdvB,EAAmBwB,GACnBtB,GAAgBuB,GAEhBvnB,EAAamC,GACbkiB,EAAkB6C,GAClB5C,EAAgB6C,GAChBhD,EAAiBiD,GACjBnnB,EAAiByE,GACjB0f,EAAoBiD,GACpB7C,EAAmB8C,GACnB/C,EAAgBgD,GAEhB9jB,GAAmBtB,QAEnBlC,EAAiBc,IACjBqjB,EAAoBe,GACpBd,EAAkBkB,GAClBjB,EAAgBmB,GAEE,GAAhBb,GAxZsBzqC,WAC1B,IAAIysC,EAAyB9B,EAAkB5iB,QAC3C2kB,EAAqB7B,EAAc9iB,QACnC4kB,EAAmB17B,EAAY8W,QAC/B6kB,EAAwB5B,EAAWjjB,QACnCwkB,EAAsBnB,EAAerjB,QACrCykB,EAAoBlB,EAAavjB,QACjCukB,EAAiBpB,EAAUnjB,QAC3B6B,EAAqBhD,GAAWmB,QAChCD,EAAoBhB,GAAaiB,QACjCqkB,EAAuBV,EAAgB3jB,QACvCskB,EAAoBT,EAAa7jB,QAEjC8lB,EAAa,GAGjB,IAAI,IAAI3qC,EAAE,EAAGA,EAAGynC,EAAkB3pC,OAAQkC,IAE1C,IAAK,IAAIS,EAAI,EAAGA,EAAI8oC,EAAuBzrC,OAAQ2C,IACjD,GACoC,IAAlC8oC,EAAuB,GAAG9oC,MACO,OAAjCipC,EAAsB,GAAGjpC,MACI,IAA7BmkB,EAAkB,GAAGnkB,KACrB,CAEAkqC,EAAWrsC,KAAKmC,GAEhB8oC,EAAuBziB,OAAOrmB,EAAE,GAChC+oC,EAAmB1iB,OAAOrmB,EAAE,GAC5BgpC,EAAiB3iB,OAAOrmB,EAAE,GAC1BipC,EAAsB5iB,OAAOrmB,EAAE,GAC/B4oC,EAAoBviB,OAAOrmB,EAAE,GAC7B6oC,EAAkBxiB,OAAOrmB,EAAE,GAC3B2oC,EAAetiB,OAAOrmB,EAAE,GACxBimB,EAAmBI,OAAOrmB,EAAE,GAC5BmkB,EAAkBkC,OAAOrmB,EAAE,GAC3ByoC,EAAqBpiB,OAAOrmB,EAAE,GAE9B,MAKJ,IAAImqC,EAAgB,EAEpB,IAAK,IAAInqC,EAAI,EAAGA,EAAIkmC,EAAe7oC,OAAQ2C,IAEF,GAArCkmC,EAAe,GAAGlmC,KAAc,SACO,GAAvCkmC,EAAe,GAAGlmC,KAAgB,WAClC+oC,EAAmB3nC,WAChBoU,GAAOA,IAAO0wB,EAAe,GAAGlmC,KAAe,WAC9C,IAEJmqC,IAEArB,EAAuBjrC,KAAKqoC,EAAe,GAAGlmC,KAAmB,cACjE+oC,EAAmBlrC,KAAKqoC,EAAe,GAAGlmC,KAAe,UACzDgpC,EAAiBnrC,KAAKqoC,EAAe,GAAGlmC,KAAiB,YACzDipC,EAAsBprC,KAAK,SAC3B+qC,EAAoB/qC,KAClB,IAAIsE,KAAK+jC,EAAe,GAAGlmC,KAAc,SAAG+C,eAE9C8lC,EAAkBhrC,KAChB,IAAIsE,KACF,IAAIA,KAAK+jC,EAAe,GAAGlmC,KAAc,SAAG6nC,YAC1C,IAAI1lC,KAAK+jC,EAAe,GAAGlmC,KAAc,SAAG8nC,cAAgB,IAE9D/kC,eAEJ4lC,EAAe9qC,KAAK,GACpBooB,EAAmBpoB,KAAKqoC,EAAe,GAAGlmC,KAAe,UACzDmkB,EAAkBtmB,KAChBqoC,EAAe,GAAGlmC,KAAa,OAC7B,IACAkmC,EAAe,GAAGlmC,KAAa,QAEnCyoC,EAAqB5qC,KAAK,MAC1B6qC,EAAkB7qC,KAAK,KAIvBqsC,EAAW7sC,OAAS,EACtB8oC,EAAWgE,EAAeD,GAE1BnoB,EAAOooB,GAITlD,EAAqB6B,GACrB3B,EAAiB4B,GACjB3B,EAAe4B,GACf1B,EAAc2B,GACdvB,EAAkBkB,GAClBhB,EAAgBiB,GAChBrB,EAAamB,GACbzlB,GAAc+C,GACd7C,GAAgBe,GAChB6jB,EAAmBS,GAEnB7B,EAAqBkC,GACrBnC,EAAiBoC,GACjBlC,EAAoBmC,GACpB1C,EAAoB2C,GACpB1C,EAAkBqC,GAClBpC,EAAgBqC,GAChBxC,EAAiBsC,GACjBxmB,EAAiB8D,GACjB/D,EAAaiC,GACbuiB,EAAmB+B,GAEnB9iB,GAAmBxB,EAAkB,EA2SnCimB,KAED,CAAC7nB,EAAWukB,IAEf,MAsFM5e,GAAkBA,CAACf,EAAa5D,KACpC,MAAMkJ,EAAYnJ,GAAWmC,KACvB6F,EAAalD,MAAMC,MAAM,KAAMD,MAAM7E,IAAY5lB,KAAI,SAAS2qB,EAAGtoB,GACrE,OAAOA,CACT,IAEA,MAC2B,QAAzBqnC,EAAW,GAAGlgB,MACY,UAAzBkgB,EAAW,GAAGlgB,MAAoD,QAA9B4gB,EAAgB,GAAG5gB,KAEjDmE,EAAW3tB,KAAK4nB,GAEnBvc,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cACVwjB,EAAUjE,SAAS,KACF,IAAdjD,EACEkH,EAAU5e,UAAU,EAAG4e,EAAUpvB,OAAS,GAC1C,KACCkoB,EAAY,GACb,IACAkH,EAAUzS,QAAQ,IAAK,KAAOuL,EAAY,IAC5CkH,EAAY,IAAMlH,EAAY,GAEpCvc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOga,GAAanC,GAAa,GAAGgE,KAAQ5B,GAAU,YAC5C,SACVqC,KAAK,aACLJ,SAAW3Q,GA1nBU4R,EACjC5R,EACAtL,EACAga,EACAhC,KAEA,MAAMmF,EAAYzQ,EAAO0Q,wBACrB1Q,EAAO0Q,wBACP,GAEJ,IAAIC,EAAY/R,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GACxDG,EAAoB1F,GAAa,GAAG5X,KAEnCsd,EAAkBC,SAAS,OAC9BD,GAAqB,IAAIrE,OAAOjB,EAAY,IAG9C,IAAIwF,EAAyBF,EAAkBve,MAAM,KAErDye,EAAuB,GAAGxD,KAAeqD,EACzCA,EAAYG,EAAuBrE,KAAK,KAExCc,GAAsBoD,EAAWrd,EAAM,EAqmBzBkd,CAA2B5R,EAAOsQ,EAAK5B,EAAWhC,GAEpDyE,UAAYnR,IACY,KAAlBA,EAAMoR,SACRpR,EAAMkR,kBAGV9e,UAAU,eACVyf,UACEzQ,EAAO0Q,wBACH1Q,EAAO0Q,wBACP,SAQT2C,EAAW3tB,KAAK4nB,GAEnBvc,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,YACbD,IAAAA,cAAA,KAAGC,UAAU,cACVwjB,EAAUjE,SAAS,KACF,IAAdjD,EACEkH,EAAU5e,UAAU,EAAG4e,EAAUpvB,OAAS,GAC1C,KACCkoB,EAAY,GACb,IACAkH,EAAUzS,QAAQ,IAAK,KAAOuL,EAAY,IAC5CkH,EAAY,IAAMlH,EAAY,GAEpCvc,IAAAA,cAAA,KAAGC,UAAU,mBAAmB0gB,MAAO,CAAElI,MAAO,UAC7C6D,GAAanC,GAAa,GAAGgE,KAAQ5B,SAyDpD,OACEvc,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QACEkgB,SAAUrF,IAv4BEvb,QAw4BZ6gB,QAASrF,GACTsF,aAAa,OAEbpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAChC,GAA2B,cAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BACa,UAAzBo+B,EAAW,GAAGlgB,MACbne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,UACGsa,GAAW+mB,aACVrD,EAAkB,GAAG7f,OApOvBA,IAE1Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,UACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWgnB,OACtCthC,IAAAA,cAAA,OAAKC,UAAU,kBACbD,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO,EACPic,QAAgC,GAAvBggB,EAAU,GAAGpgB,KAAW,eACI,GAAvBogB,EAAU,GAAGpgB,KAC3BK,SAAW3Q,GAAUsxB,GAAmBtxB,EAAOsQ,KAEhD7D,GAAWinB,cAGdvhC,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO,EACPic,QAAgC,GAAvBggB,EAAU,GAAGpgB,KAAW,eACI,GAAvBogB,EAAU,GAAGpgB,KAC3BK,SAAW3Q,GAAUsxB,GAAmBtxB,EAAOsQ,KAEhD7D,GAAWknB,iBA+MCC,CAAqBtjB,GAhKRA,IAElCne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,UACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWonB,QACtC1hC,IAAAA,cAAA,KAAGC,UAAU,cACV0hC,IAAOlD,EAAe,GAAGtgB,MAAQqT,OAAO,eAAc,KAAI,IAC1DmQ,IAAOhD,EAAa,GAAGxgB,MAAQqT,OAAO,kBA0JxBoQ,CAA6BzjB,GACJ,UAAzBkgB,EAAW,GAAGlgB,MAzMRA,IAE3Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,UACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWunB,kBACtC7hC,IAAAA,cAAA,OAAKC,UAAU,kBACbD,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO,KACPic,QACgC,KAA9BwgB,EAAgB,GAAG5gB,MACW,OAA9B4gB,EAAgB,GAAG5gB,KAAe,eAGJ,KAA9B4gB,EAAgB,GAAG5gB,MACW,OAA9B4gB,EAAgB,GAAG5gB,KAErBK,SAAW3Q,GAAUyxB,GAAyBzxB,EAAOsQ,KAEtD7D,GAAWwnB,eAGd9hC,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO,MACPic,QAAuC,QAA9BwgB,EAAgB,GAAG5gB,KAAgB,eACA,QAA9B4gB,EAAgB,GAAG5gB,KACjCK,SAAW3Q,GAAUyxB,GAAyBzxB,EAAOsQ,KAEtD7D,GAAWynB,oBA2KEC,CAAsB7jB,GA3EnBA,SACS,IAAzBlE,GAAW,GAAGkE,KAChB,KAIPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,UACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW+F,UACtCrgB,IAAAA,cAAA,OAAKC,UAAU,kBACbD,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA6B,GAAGnE,KACvCqM,QACEtE,GAAW,GAAGkE,OACdnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAAc,eAGrD+H,GAAW,GAAGkE,OACdnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAEzCsM,SAAW3Q,GAAUmN,GAAoBnN,EAAOsQ,KAEjD9H,EAAAA,GAA6B,GAAGnE,MAGnClS,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA8B,GAAGnE,KACxCqM,QACEtE,GAAW,GAAGkE,OACdnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,MAAc,eAGtD+H,GAAW,GAAGkE,OACdnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,MAE1CsM,SAAW3Q,GAAUmN,GAAoBnN,EAAOsQ,KAEjD9H,EAAAA,GAA8B,GAAGnE,SAmCrBqO,CAAoBpC,GACpBlE,GAAW,GAAGkE,OACbnY,OACEqQ,EAAAA,GAA6B,GAAGnE,OAElCqI,GAAY,GACZ2E,GAAgBf,EAAK5D,IACtBN,GAAW,GAAGkE,OACbnY,OACEqQ,EAAAA,GAA8B,GAAGnE,OAEnCrJ,GAAe,GACfqW,GAAgBf,EAAKtV,KAI4B,IAAA2X,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,KAEV,QAAtBugB,EAAA1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,OACvBwmC,EAAU,GAAGpgB,OAKvB,GAA2B,WAAvBpC,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAEX,yBADA,oBAGJ,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,IAAe0rB,GAAmBvkB,GAClCxZ,IAAAA,cAAA,OAAKC,UAAU,UACbD,IAAAA,cAAA,UACEC,UAAU,UACVqe,KAAK,SACL9c,QAASwb,IAGP3G,EAAAA,GACE,GAAGnE,OAMblS,IAAAA,cAAA,OAAKC,UAAU,wBACbD,IAAAA,cAAA,UACEC,UAAW8b,EAAQ6E,OACnBpf,QAASA,IAAM0b,GAAgBiB,OAMzC,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UACEC,UAAW8b,EAAQ6E,OACnBpf,QAASA,IAAM0b,GAAgBiB,MAMjC,UAQhBvf,IAAayT,IAAe0rB,GAAmBvkB,GAC/CxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,IAC5B3G,EAAAA,GAA6B,GAAGnE,QAKrC,2HChkCV,MA4VA,EA5VgDJ,IAAwP,IAAvP,WAAE+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,aAAEE,EAAY,gBAAE+oB,EAAe,gBAAEtX,EAAe,qBAAEtR,EAAoB,UAAEE,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,2BAAEmH,EAA0B,iBAACoR,GAAkB9Y,EAClS,MAAOowB,EAAcC,IAAmB/1B,EAAAA,EAAAA,UAAS,CAAC,MAC3Cg2B,EAAiBC,IAAsBj2B,EAAAA,EAAAA,UAAS,CAAC,MACjDk2B,EAAgBC,IAAqBn2B,EAAAA,EAAAA,UAAS,CAAC,KAEhDkO,EAAajE,EAAAA,GAAsB,GAAGnE,MAQtC,aAAE2I,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MAQ1BynB,EAAwBA,CAAC/lB,EAAcla,KAC3C,MAAMkgC,EAAoBP,EAAa9mB,QAEvC,UAAgD,IAAlCqnB,EAAkB,GAAGlgC,MACjCkgC,EAAkB5tC,KAAK,IAGzB4tC,EAAkB,GAAGlgC,KAAWka,EAEhCgmB,EAAkB,GAAGlgC,KAASma,OAE9BylB,EAAgBM,GAEhBvpB,EAAaupB,GAEb9lB,EAAmB8lB,EAAkB,EASjCC,EAA2BA,CAACjmB,EAAcla,KAC9C,MAAMogC,EAAuBP,EAAgBhnB,QAE7C,UAAmD,IAArCunB,EAAqB,GAAGpgC,MACpCogC,EAAqB9tC,KAAK,IAG5B8tC,EAAqB,GAAGpgC,KAAWka,EAEnCkmB,EAAqB,GAAGpgC,KAASma,OAEjC2lB,EAAmBM,GAEnBV,EAAgBU,EAAqB,EASjCC,EAA0BA,CAACnmB,EAAcla,KAC7C,MAAMsgC,EAAsBP,EAAelnB,QAE3C,UAAkD,IAApCynB,EAAoB,GAAGtgC,MACnCsgC,EAAoBhuC,KAAK,IAG3BguC,EAAoB,GAAGtgC,KAAWka,EAElComB,EAAoB,GAAGtgC,KAASma,OAEhC6lB,EAAkBM,GAElBlY,EAAgBkY,EAAoB,EAGhClmB,EAAsB8lB,IAC1B,IAAI1lB,GAAe,EAEnB,IAAK,IAAI/lB,EAAI,EAAGA,EAAIyrC,EAAkBpuC,OAAQ2C,IAC5C,GAAyC,KAArCyrC,EAAkB,GAAGzrC,KAAK0lB,OAAe,CAC3CK,GAAe,EACf,MAIJ1D,EAAqB0D,EAAa,EAG9BC,EAAWA,KACfjE,EAAO,GAEP,MAAM0pB,EAAoBP,EAAa9mB,QACjCunB,EAAuBP,EAAgBhnB,QACvCynB,EAAsBP,EAAelnB,QAE3CqnB,EAAkB5tC,KAAK,IACvB8tC,EAAqB9tC,KAAK,IAC1BguC,EAAoBhuC,KAAK,IAEzBstC,EAAgBM,GAChBJ,EAAmBM,GACnBJ,EAAkBM,GAElB3pB,EAAaupB,GACbR,EAAgBU,GAChBhY,EAAgBkY,GAEhBxpB,GAAqB,EAAM,EAGvB6D,EAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,EAAiB/a,SAInByW,EAAUzW,GACV+a,EAAiB/a,QAGnByW,EAAUzW,GACV+a,EAAiB/a,IAIf+a,EAAoB/a,IACxB,MAAMkgC,EAAoBP,EAAa9mB,QACjCunB,EAAuBP,EAAgBhnB,QACvCynB,EAAsBP,EAAelnB,aAEE,IAAlCqnB,EAAkB,GAAGlgC,OAC1BkgC,EAAkBpuC,OAAS,EAC7BouC,EAAkBplB,OAAO9a,EAAO,GAEhCkgC,EAAkB,GAAK,SAIqB,IAArCE,EAAqB,GAAGpgC,OAC7BogC,EAAqBtuC,OAAS,EAChCsuC,EAAqBtlB,OAAO9a,EAAO,GAEnCogC,EAAqB,GAAK,SAIiB,IAApCE,EAAoB,GAAGtgC,OAC5BsgC,EAAoBxuC,OAAS,EAC/BwuC,EAAoBxlB,OAAO9a,EAAO,GAElCsgC,EAAoB,GAAK,IAI7BV,EAAgBM,GAChBJ,EAAmBM,GACnBJ,EAAkBM,GAElB3pB,EAAaupB,GACbR,EAAgBU,GAChBhY,EAAgBkY,GAEhBlmB,EAAmB8lB,EAAkB,GAGvC5rB,EAAAA,EAAAA,YAAU,KACR,MAAMisB,EAAiC,GACjCC,EAAoC,GACpCC,EAAmC,GAEzC,GAAIzpB,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,IAAI+mB,EAAsBxE,EAAU,GAAGviB,KAAY,MAG/C+mB,GACF+kB,EAAqBjuC,KAAKkpB,EAAU,IAGtCglB,EAAwBluC,KAAK0kB,EAAU,GAAGviB,KAAc,SACxDgsC,EAAuBnuC,KAAK0kB,EAAU,GAAGviB,KAAc,SAGzDmrC,EAAgBW,GAChBT,EAAmBU,GACnBR,EAAkBS,GAElB9pB,EAAa4pB,GACbb,EAAgBc,GAChBpY,EAAgBqY,GAEhBrmB,EAAmBmmB,MAEpB,CAACvpB,IAEJ,MAAMigB,EAAmBrb,GAErBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWmC,MACtCzc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO4/B,EAAa,GAAG/jB,KAAM,YACnB,SACVS,KAAK,aACLJ,SAAW3Q,GAzNM+a,EAAC/a,EAAYtL,KACtC,MAAMmd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF6iB,EAAsB30B,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAsN/CqmB,CAAmB/a,EAAOsQ,GAC/Ca,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OAOjFsjB,EAAiB9kB,GAEnBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWhC,SACtCtY,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO8/B,EAAgB,GAAGjkB,KAAM,YACtB,SACVS,KAAK,aACLJ,SAAW3Q,GAtNSq1B,EAACr1B,EAAYtL,KACzC,MAAMmd,EAAYzQ,EAAOk0B,2BAA6Bl0B,EAAOk0B,2BAA6B,GAE1FT,EAAyB70B,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAmNlD2gC,CAAsBr1B,EAAOsQ,GAClDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAOk0B,2BAA6Bl0B,EAAOk0B,2BAA6B,OAOvFzP,EAAiBvV,GAEnBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWvV,SACtC/E,IAAAA,cAAA,YACE0e,UAAU,OACVpc,MAAOggC,EAAe,GAAGnkB,KAAM,YACrB,SACVS,KAAK,aACLJ,SAAW3Q,GApNS8lB,EAAC9lB,EAAYtL,KACzC,MAAMmd,EAAYzQ,EAAO2kB,0BAA4B3kB,EAAO2kB,0BAA4B,IAExFgP,EAAwB/0B,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAiNjDoxB,CAAsB9lB,EAAOsQ,GAClDle,UAAU,eACVyf,UAAWzQ,EAAO2kB,0BAA4B3kB,EAAO2kB,0BAA4B,QAO3F,OACE5zB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GArRFvb,QAqR0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,SAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BACZu5B,EAAgBrb,GAChB8kB,EAAc9kB,GACdyM,GAAoB8I,EAAcvV,IAKgB,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAyB,QAAzB,EAAG6S,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,QAKpE,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,yKC5UV,MA4rBA,EA5rBwDJ,IAKwD,IALvD,WACvD+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,mBACxD4M,EAAkB,yBAAEwd,EAAwB,aAAElqB,EAAY,oBAAEmqB,EAAmB,iBAC/EtiB,EAAgB,mBAAEC,EAAkB,mBAAEC,EAAkB,gBAAE6T,EAAe,qBACzEzb,EAAoB,yBAAEiqB,EAAwB,uBAAEniB,EAAsB,UACtE5H,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEwtB,EAAQ,SAAExiB,EAAQ,WAAEyT,EAAU,2BAAEmH,GAA4B1H,EAC1G,MAAOyxB,EAAkBC,IAAuBp3B,EAAAA,EAAAA,UAAS,CAACs1B,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,SACrF8hB,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,MAC3Cq3B,EAAaC,IAAkBt3B,EAAAA,EAAAA,UAAS,CAAC,MACzCmvB,EAAcC,IAAmBpvB,EAAAA,EAAAA,UAAS,CAAC,MAC3CqvB,EAAYC,IAAiBtvB,EAAAA,EAAAA,UAAS,CAAC,MACvCuvB,EAAYC,IAAiBxvB,EAAAA,EAAAA,UAAS,CAAC,MACvCyvB,EAAaC,IAAc1vB,EAAAA,EAAAA,UAAS,CAAC,MAErC0Z,EAAaC,IAAiB3Z,EAAAA,EAAAA,UAAS,CAAC,IAEzCkO,EAAajE,EAAAA,GAA8B,GAAGnE,KAC9CgQ,KAAad,IAAYA,EAASe,gBAAmD,KAAlCf,EAASe,cAAczF,QAQ1E,aAAE7B,EAAY,MAAEC,KAAUC,EAAAA,EAAAA,MAkB1B4oB,GAAuBA,CAAC91B,EAAYtL,KACxC,MAAMggB,EAAaghB,EAAiBnoB,QAEpC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK6sC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,OAGpDkqB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/BmrC,EAAoBjhB,GAEpB6gB,EAAyB7gB,GA3BL8D,EAACud,EAAqBrhC,KAC1C,MAAMggB,EAAauD,EAAY1K,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK6sC,EAAAA,MAAAA,IAGlB,MAAMmC,EAAWnC,EAAO,GAAGxvB,KAAcwvB,OAAOtpC,WAAWxD,GAA4CA,EAAKyD,QAAUurC,IAEtHrhB,EAAW,GAAGhgB,KAAWm/B,EAAAA,MAAa,GAAGmC,KAEzC9d,EAAcxD,GAEdqD,EAAmBrD,EAAW,EAgB9B8D,CAAcxY,EAAMxV,MAAOkK,EAAM,EAS7Bia,GAAwBA,CAACC,EAAcla,KAC3C,MAAMggB,EAAapI,EAAaiB,QAGhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWka,EAEzB8F,EAAW,GAAGhgB,KAASma,OAEvBtC,EAAgBmI,GAEhBrJ,EAAaqJ,GAEbE,GAAkBF,EAAW,EA2FzBuhB,GAA4BvhC,IAChC,GAAIghC,EAAiBlvC,OAAS,EAAG,CAC/B,MAAM8xB,EAAmBod,EAAiBnoB,QAE1C,QAA4C,IAAjC+K,EAAiB,GAAG5jB,KAC7B,OAAOm/B,EAAO,GAAGxvB,KAAcwvB,OAAO/pC,MAAM/C,GAA2CA,EAAKyD,QAAU8tB,EAAiB,GAAG5jB,OAI9H,MAAO,CAAED,MAAO,GAAIjK,MAAO,GAAI,EAG3BoqB,GAAqBF,IACzB,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,GAAoD,KAAhDurB,EAAW,GAAGvrB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CACtD6B,GAAU,EAAO,MAIrBlF,EAAqBkF,EAAQ,EAGzBwlB,GAAwBxhB,IAC5B,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,GAAoD,KAAhDurB,EAAW,GAAGvrB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CACtD6B,GAAU,EAAO,MAIrB+kB,EAAyB/kB,EAAQ,EAG7BmE,GAAuBA,CAACqZ,EAAyBC,KACrD,IAAIhmC,GAAS,EAEb,IAAK,IAAIgB,EAAI,EAAGA,EAAI+kC,EAAc1nC,SAAU2C,EAC1ChB,EAASA,GAAoC,KAA1B+lC,EAAc,GAAG/kC,MAA2C,KAA5BglC,EAAgB,GAAGhlC,KAGxEmqB,EAAuBnrB,EAAO,EAG1B6sB,GAAqBA,IACrBX,EACKd,EAAS0B,YAAYpG,QAAsC,KAA5B0E,EAAS2B,eAAwB,KAAO3B,EAAS2B,eAAerG,OAAS,KAAqC,KAA9B0E,EAAS4B,iBAA0B,KAAO5B,EAAS4B,iBAAiBtG,OAAS,KAAmC,KAA5B0E,EAAS6B,eAAwB,KAAO7B,EAAS6B,eAAevG,OAAS,KAAkC,KAA3B0E,EAAS6a,cAAuB,KAAO7a,EAAS6a,cAAcvf,OAAS,IAG5V,GAGHwf,GAAoBA,KACxB,GAAIha,EAAW,CACb,MAEMrS,EAFSzI,EAAU,GAAG8K,KAAc9K,UAElBzP,MAAMwkC,GAA4CA,EAAM9jC,MAAMw6B,gBAAkBzR,EAASgb,iBAAiBvJ,gBAElI,OAAOhjB,EAAWA,EAASxX,MAAQ,GAGrC,MAAO,EAAE,EAGL2kB,GAAWA,KACfjE,EAAO,GAEP,MAAMoP,EAAkBrC,EAAY1K,QAC9B4oB,EAAwBT,EAAiBnoB,QACzCD,EAAoBhB,EAAaiB,QACjC6oB,EAAmBR,EAAYroB,QAC/BihB,EAAoBd,EAAangB,QACjCkhB,EAAkBb,EAAWrgB,QAC7B4gB,EAAkBL,EAAWvgB,QAC7BmhB,EAAeV,EAAYzgB,QAEjC+M,EAAgBtzB,KAAK6sC,EAAAA,MAAAA,IACrBsC,EAAsBnvC,KAAK6sC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,OAC7D8iB,EAAkBtmB,KAAK,IACvBovC,EAAiBpvC,KAAK,IAElBqtB,GACFma,EAAkBxnC,KAAKguB,MACvByZ,EAAgBznC,KAAKusB,EAASmC,4BAC9ByY,EAAgBnnC,KAAKusB,EAASoC,qBAC9B+Y,EAAa1nC,KAAKqnC,QAElBG,EAAkBxnC,KAAK,IACvBynC,EAAgBznC,KAAK,IACrBmnC,EAAgBnnC,KAAK,IACrB0nC,EAAa1nC,KAAKuS,EAAU,GAAG8K,KAAc9K,UAAU,GAAG/O,QAG5D0tB,EAAcoC,GACdqb,EAAoBQ,GACpB5pB,EAAgBe,GAChBuoB,EAAeO,GACfzI,EAAgBa,GAChBX,EAAcY,GACdV,EAAcI,GACdF,EAAWS,GAEX3W,EAAmBuC,GACnBib,EAAyBY,GACzB9qB,EAAaiC,GACbkoB,EAAoBY,GACpBljB,EAAiBsb,GACjBrb,EAAmBsb,GACnBrb,EAAmB+a,GACnBlH,EAAgByH,GAEhBljB,GAAqB,GACrBiqB,GAAyB,GAEzB5gB,GAAqB6Y,EAAcI,EAAW,EAG1Cze,GAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,GAAiB/a,SAInByW,EAAUzW,GACV+a,GAAiB/a,QAGnByW,EAAUzW,GACV+a,GAAiB/a,IAIf+a,GAAoB/a,IACxB,MAAM4lB,EAAkBrC,EAAY1K,QAC9B4oB,EAAwBT,EAAiBnoB,QACzCD,EAAoBhB,EAAaiB,QACjC6oB,EAAmBR,EAAYroB,QAC/BihB,EAAoBd,EAAangB,QACjCkhB,EAAkBb,EAAWrgB,QAC7B4gB,EAAkBL,EAAWvgB,QAC7BmhB,EAAeV,EAAYzgB,aAEU,IAAhC+M,EAAgB,GAAG5lB,OACxB4lB,EAAgB9zB,OAAS,EAC3B8zB,EAAgB9K,OAAO9a,EAAO,GAE9B4lB,EAAgB,GAAKuZ,EAAAA,MAAAA,GAGvB3b,EAAcoC,GAEdvC,EAAmBuC,SAG4B,IAAtC6b,EAAsB,GAAGzhC,OAC9ByhC,EAAsB3vC,OAAS,EACjC2vC,EAAsB3mB,OAAO9a,EAAO,GAEpCyhC,EAAsB,GAAKtC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,MAG/DmrC,EAAoBQ,GAEpBZ,EAAyBY,SAGkB,IAAlC7oB,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,GAGzBf,EAAgBe,GAEhBjC,EAAaiC,SAG6B,IAAjC8oB,EAAiB,GAAG1hC,OACzB0hC,EAAiB5vC,OAAS,EAC5B4vC,EAAiB5mB,OAAO9a,EAAO,GAE/B0hC,EAAiB,GAAK,GAGxBP,EAAeO,GAEfZ,EAAoBY,SAGuB,IAAlC5H,EAAkB,GAAG95B,OAC1B85B,EAAkBhoC,OAAS,EAC7BgoC,EAAkBhf,OAAO9a,EAAO,GAEhC85B,EAAkB,GAAK,GAGzBb,EAAgBa,GAEhBlb,EAAuBkb,SAGkB,IAAhCC,EAAgB,GAAG/5B,OACxB+5B,EAAgBjoC,OAAS,EAC3BioC,EAAgBjf,OAAO9a,EAAO,GAE9B+5B,EAAgB,GAAK,GAGvBZ,EAAcY,GAEdtb,EAAmBsb,SAGsB,IAAhCN,EAAgB,GAAGz5B,OACxBy5B,EAAgB3nC,OAAS,EAC3B2nC,EAAgB3e,OAAO9a,EAAO,GAE9By5B,EAAgB,GAAK,GAGvBJ,EAAcI,GAEd/a,EAAmB+a,SAGmB,IAA7BO,EAAa,GAAGh6B,OACrBg6B,EAAaloC,OAAS,EACxBkoC,EAAalf,OAAO9a,EAAO,GAE3Bg6B,EAAa,GAAKn1B,EAAU,GAAG8K,KAAc9K,UAAU,GAAG/O,MAG5DyjC,EAAWS,GAEXzH,EAAgByH,IAGlB9Z,GAAkBtH,GAClB4oB,GAAqBE,GACrBvhB,GAAqB6Y,EAAcI,EAAW,GAGhD9kB,EAAAA,EAAAA,YAAU,KACR,MAAMqtB,EAA+B,GAC/BC,EAAoC,GACpC9oB,EAAiC,GACjC+oB,EAAgC,GAChCzH,EAAiC,GACjCC,EAA+B,GAC/BC,EAA+B,GAC/BC,EAA4B,GAElC,GAAIvjB,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAMqtC,EAA2D,KAA1C9qB,EAAU,GAAGviB,KAAuB,iBAAWuiB,EAAU,GAAGviB,KAAuB,iBAAI0qC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,MAC1IkK,EAAQm/B,EAAO,GAAGxvB,KAAcwvB,OAAOtpC,WAAWxD,GAA4CA,EAAKyD,QAAUgsC,IAEnHH,EAAmBrvC,KAAK6sC,EAAAA,MAAa,GAAGn/B,MACxC4hC,EAAwBtvC,KAAKwvC,GAC7BhpB,EAAqBxmB,KAAK0kB,EAAU,GAAGviB,KAAY,MAAE,IACrDotC,EAAoBvvC,KAAK0kB,EAAU,GAAGviB,KAAkB,aACxD2lC,EAAqB9nC,KAAK0kB,EAAU,GAAGviB,KAAmB,cAC1D4lC,EAAmB/nC,KAAK0kB,EAAU,GAAGviB,KAAiB,YACtD6lC,EAAmBhoC,KAAK0kB,EAAU,GAAGviB,KAAiB,YACtD8lC,EAAgBjoC,KAAK0kB,EAAU,GAAGviB,KAAc,SAGlD+uB,EAAcme,GACdV,EAAoBW,GACpB/pB,EAAgBiB,GAChBqoB,EAAeU,GACf5I,EAAgBmB,GAChBjB,EAAckB,GACdhB,EAAciB,GACdf,EAAWgB,GAEXlX,EAAmBse,GACnBd,EAAyBe,GACzBjrB,EAAamC,GACbgoB,EAAoBe,GACpBrjB,EAAiB4b,GACjB3b,EAAmB4b,GACnB3b,EAAmB4b,GACnB/H,EAAgBgI,GAEhBra,GAAkBpH,GAClB0oB,GAAqBK,GACrB1hB,GAAqBia,EAAsBE,QAEvC3a,IACFya,EAAqB9nC,KAAKguB,MAC1B+Z,EAAmB/nC,KAAKusB,EAASmC,4BACjCsZ,EAAmBhoC,KAAKusB,EAASoC,qBACjCsZ,EAAgBjoC,KAAKqnC,MAErBV,EAAgBmB,GAChBjB,EAAckB,GACdhB,EAAciB,GACdf,EAAWgB,GAEX/b,EAAiB4b,GACjB3b,EAAmB4b,GACnB3b,EAAmB4b,GACnB/H,EAAgBgI,GAEhBpa,GAAqBia,EAAsBE,IAG7CuG,EAAyBG,KAE1B,CAAChqB,IAEJ,MAiBMigB,GAAmBrb,GAErBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWmC,MACtCzc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO6X,EAAa,GAAGgE,KAAM,YACnB,SACVS,KAAK,aACLJ,SAAW3Q,GA1dM+a,EAAC/a,EAAYtL,KACtC,IAAImd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAElFnD,GAAsB3O,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAud/CqmB,CAAmB/a,EAAOsQ,GAC/Ca,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7ES,aAAa,WAOjBkkB,GAAsBnmB,GAExBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWmpB,aACtCzjC,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOmhC,EAAY,GAAGtlB,KAAM,YAClB,SACVS,KAAK,aACLJ,SAAW3Q,GAvdG02B,EAAC9nB,EAAcla,KACrC,MAAMggB,EAAakhB,EAAYroB,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWka,EAEzB8F,EAAW,GAAGhgB,KAASma,OAEvBgnB,EAAenhB,GAEf8gB,EAAoB9gB,GAEpBwhB,GAAqBxhB,EAAW,EAwcHgiB,CAAgB12B,EAAMqN,OAAO5Y,MAAO6b,GACzDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7ES,aAAa,WAOjByD,GAAsB1F,IAC1B,MAAM8Z,EAAS7wB,EAAU,GAAG8K,KAAc9K,UAE1C,OACEpH,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,KAAGC,UAAU,iBAAiBqa,EAAWwJ,eACzC9jB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWyJ,iBACtC/jB,IAAAA,cAAA,qBACY,SACVC,UAAU,eACVye,UAAU,OACVE,KAAK,aACLJ,SAAW3Q,GA7dImW,EAAC1hB,EAAeC,KACvC,MAAMggB,EAAagZ,EAAangB,QAEhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBigB,EAAW,GAAGhgB,KAASma,OAEvB8e,EAAgBjZ,GAEhBxB,EAAiBwB,GAEjBG,GAAqB6Y,EAAcI,EAAW,EA8cjB3X,CAAiBnW,EAAMqN,OAAO5Y,MAAO6b,GAC1Da,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1DW,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7Erd,MAAOi5B,EAAa,GAAGpd,KACvBG,KAAK,OACL8B,aAAa,SAGfpgB,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW2J,aACtCjkB,IAAAA,cAAA,qBACY,SACVC,UAAU,eACVye,UAAU,OACVE,KAAK,aACLJ,SAAW3Q,GAzdEqW,EAAC5hB,EAAeC,KACrC,MAAMggB,EAAakZ,EAAWrgB,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBigB,EAAW,GAAGhgB,KAASma,OAEvBgf,EAAcnZ,GAEdvB,EAAmBuB,EAAW,EA4cD2B,CAAerW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1DW,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7Erd,MAAOm5B,EAAW,GAAGtd,KACrBG,KAAK,OACL8B,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,iBACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW6J,mBACtCnkB,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOq5B,EAAW,GAAGxd,KAAM,YACjB,SACVS,KAAK,aACLJ,SAAW3Q,GA3dAuW,EAAC9hB,EAAeC,KACrC,MAAMggB,EAAaoZ,EAAWvgB,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGfyN,EAAMjO,QAAQ,EACfkuB,EAAW,GAAGhgB,KAAWD,EAEzB+hB,EAAAA,GAAMC,QAAQjO,EAAAA,GAAkC,GAAGnE,MAGrDqQ,EAAW,GAAGhgB,KAASma,OAEvBkf,EAAcrZ,GAEdtB,EAAmBsB,GAEnBG,GAAqB6Y,EAAcI,EAAW,EAwcfvX,CAAevW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVmgB,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWiK,gBACtCvkB,IAAAA,cAACgnB,EAAAA,GAAM,CACLmR,YAAa0D,EAAY,GAAG1d,KAC5BgJ,QAAS8Q,EACTzZ,SAAW3Q,GAjdHovB,EAACpvB,EAAYtL,KAC/B,MAAMggB,EAAasZ,EAAYzgB,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/ByjC,EAAWvZ,GAEXuS,EAAgBvS,EAAW,EAscI0a,CAAYpvB,EAAOsQ,GACxCle,UAAW,SACXo4B,cAAc,MAIhB,EAIV,OACEr4B,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GAxmBFvb,QAwmB0B6gB,QAASrF,GAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,WAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BA5ILke,IAE5Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWipB,kBACtCvjC,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOwhC,GAAyB3lB,GAChCgJ,QAASua,EAAO,GAAGxvB,KAAcwvB,OACjCljB,SAAW3Q,GAAU81B,GAAqB91B,EAAOsQ,GACjDle,UAAW,SACXo4B,cAAc,MAmIC8C,CAAuBhd,GACvBqb,GAAgBrb,GAChBmmB,GAAmBnmB,GACnB0F,GAAmB1F,IAK+B,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAG6lB,EAAY,GAAG3H,MAA+B,QAAzBqC,EAAG1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,SAK5F,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,2LC7qBV,MAkuCA,EAluCwDJ,IAI0E,IAJzE,WACvD+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,mBACxD4M,EAAkB,yBAAEwd,EAAwB,kBAAEzI,EAAiB,oBAAEvhB,EAAmB,aAAEF,EAAY,qBAAEsrB,EAAoB,kBAAEza,EAAiB,kBAAEkP,EAAiB,kBAAEwL,EAAiB,kBAAEC,EAAiB,iBAAE3jB,EAAgB,mBAAEC,EAAkB,mBAAEC,EAAkB,gBAAE6T,EAAe,qBAC/Qzb,EAAoB,6BAAEsrB,EAA4B,oBAAE3a,EAAmB,uBAAE7I,EAAsB,gBAAEwJ,EAAe,UAChHpR,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEwtB,EAAQ,SAAExiB,EAAQ,WAAEyT,EAAU,2BAAEmH,EAA0B,iBAAEoR,GAAkB9Y,EAC5H,MAAOvJ,EAAmBq8B,IAAwBx4B,EAAAA,EAAAA,UAAS,CAACs1B,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,SACvFoQ,EAAYmyB,IAAiBxuB,EAAAA,EAAAA,UAAS,CAAC,MACvCy4B,EAAcC,IAAmB14B,EAAAA,EAAAA,UAAS,CAAC,MAC3CuO,EAAeoqB,IAAoB34B,EAAAA,EAAAA,UAAS,CAAC,MAC7C44B,GAAeC,KAAoB74B,EAAAA,EAAAA,UAAS,CAAC,MAC7C5E,GAAY09B,KAAiB94B,EAAAA,EAAAA,UAAS,CAAC,MACvCzE,GAAYw9B,KAAiB/4B,EAAAA,EAAAA,UAAS,CAAC,MACvCnD,GAAYm8B,KAAiBh5B,EAAAA,EAAAA,UAAS,CAAC,MACvCjD,GAAYk8B,KAAiBj5B,EAAAA,EAAAA,UAAS,CAAC,MACvC3G,GAAekc,KAAoBvV,EAAAA,EAAAA,UAAS,CAAC,MAC7CzG,GAAaic,KAAkBxV,EAAAA,EAAAA,UAAS,CAAC,MACzCvG,GAAagc,KAAkBzV,EAAAA,EAAAA,UAAS,CAAC,MACzCgpB,GAAckQ,KAAgBl5B,EAAAA,EAAAA,UAAS,CAAC,MACxCrH,GAASwgC,KAAcn5B,EAAAA,EAAAA,UAAS,CAAC,MAEjCo5B,GAAYC,KAAiBr5B,EAAAA,EAAAA,UAA+C,KAC5Es5B,GAAiBC,KAAsBv5B,EAAAA,EAAAA,UAA+C,KACtF0Z,GAAaC,KAAiB3Z,EAAAA,EAAAA,UAAS,CAAC,IAEzCkO,GAAajE,EAAAA,GAA8B,GAAGnE,KAC9CgQ,MAAad,IAAYA,EAASe,gBAAmD,KAAlCf,EAASe,cAAczF,OAE1Eme,GAAY,IAAI1hC,KACtB0hC,GAAUC,QAAQD,GAAUE,UAAY,GACxCF,GAAUG,SAAS,EAAG,EAAG,EAAG,GAE5B,MAMM,aAAEngB,GAAY,MAAEC,KAAUC,EAAAA,EAAAA,MAkB1B4oB,GAAuBA,CAAC91B,EAAYtL,KACxC,MAAMggB,EAAaha,EAAkB6S,QAErC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/BusC,EAAqBriB,GAErB6gB,EAAyB7gB,GA3BL8D,EAACud,EAAqBrhC,KAC1C,MAAMggB,EAAauD,GAAY1K,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK6sC,EAAAA,MAAAA,IAGlB,MAAMmC,EAAWnC,EAAO,GAAGxvB,KAAcwvB,OAAOtpC,WAAWxD,GAA4CA,EAAKyD,QAAUurC,IAEtHrhB,EAAW,GAAGhgB,KAAWm/B,EAAAA,MAAa,GAAGmC,KAEzC9d,GAAcxD,GAEdqD,EAAmBrD,EAAW,EAgB9B8D,CAAcxY,EAAMxV,MAAOkK,EAAM,EAuC7Bqa,GAAuBA,CAACH,EAAcla,KAC1C,MAAMggB,EAAasiB,EAAazpB,QAGhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK6sC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,OAGpDkqB,EAAW,GAAGhgB,KAAWka,EAEzBqoB,EAAgBviB,GAEhBnJ,EAAoBmJ,GAEpBE,GAAkBF,EAAY5H,EAAc,EAGxCirB,GAAwBA,CAACnpB,EAAcla,KAC3C,MAAMggB,EAAa5H,EAAcS,QAGjC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWka,EAEzBsoB,EAAiBxiB,GAEjBrJ,EAAaqJ,GAEbE,GAAkBoiB,EAActiB,EAAW,EAGvCsjB,GAAwBA,CAACppB,EAAcla,KAC3C,MAAMggB,EAAayiB,GAAc5pB,QAGjC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWka,EAEzBwoB,GAAiB1iB,GAEjBiiB,EAAqBjiB,GAErBujB,GAA0BvjB,EAAW,EAGjCwjB,GAAWA,CAACzjC,EAAaC,EAAelK,KAC5C,MAAMkqB,EAAalqB,IAAUiiB,GAAWiR,UAAY/jB,GAAW4T,QAAUnS,GAAWmS,QAEpF,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAAQA,EAAMvI,cAAgB,GAEvD1B,IAAUiiB,GAAWiR,UAAYya,GAAmBzjC,GAAS0jC,GAAmB3jC,EAAOC,GAEnFlK,IAAUiiB,GAAWiR,WACvB2Z,GAAc3iB,GAEdwH,EAAkBxH,GAEpB2jB,GAAuB3jB,EAAYtZ,MAEjCm8B,GAAc7iB,GAEdkiB,EAAkBliB,GAElByK,GAAkBvkB,EAAY8Z,GAE9B2jB,GAAuB1+B,GAAY+a,KAIjC4jB,GAAWA,CAACt4B,EAAYtL,EAAelK,KAC3C,MAAMkqB,EAAalqB,IAAUiiB,GAAW4e,UAAYvxB,GAAWyT,QAAUjS,GAAWiS,QAEpF,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE3BA,IAAUiiB,GAAW4e,WACvBiM,GAAc5iB,GAEd0W,EAAkB1W,KAElB8iB,GAAc9iB,GAEdmiB,EAAkBniB,KAsEhByjB,GAAsBzjC,IAC1B,MAAMggB,EAAaijB,GAAWpqB,QAE9B,KAAOmH,EAAWluB,OAASkU,EAAkBlU,QAC3CkuB,EAAW1tB,KAAK8kC,EAAAA,GAGlBpX,EAAW,GAAGhgB,KAAW6jC,KAEzBX,GAAcljB,EAAW,EAGrB0jB,GAAqBA,CAAC3jC,EAAaC,KACvC,MAAMggB,EAAamjB,GAAgBtqB,QAEnC,KAAOmH,EAAWluB,OAASkU,EAAkBlU,QAC3CkuB,EAAW1tB,KAAK8kC,EAAAA,GAGlBpX,EAAW,GAAGhgB,KAAW8jC,GAAgB/jC,GAEzCqjC,GAAmBpjB,EAAW,EAG1BuhB,GAA4BvhC,IAChC,GAAIgG,EAAkBlU,OAAS,EAAG,CAChC,MAAM8xB,EAAmB5d,EAAkB6S,QAE3C,QAA4C,IAAjC+K,EAAiB,GAAG5jB,KAC7B,OAAOm/B,EAAO,GAAGxvB,KAAcwvB,OAAO/pC,MAAM/C,GAA2CA,EAAKyD,QAAU8tB,EAAiB,GAAG5jB,OAI9H,MAAO,CAAED,MAAO,GAAIjK,MAAO,GAAI,EAG3BoqB,GAAoBA,CAAC5F,EAA4BypB,KACrD,IAAItwC,GAAS,EAEb,IAAK,IAAIgB,EAAI,EAAGA,EAAI6lB,EAAiBxoB,SAAU2C,EAC7ChB,EAASA,GAAuC,KAA7B6mB,EAAiB,GAAG7lB,MAA6C,KAA9BsvC,EAAkB,GAAGtvC,KAG7EqiB,EAAqBrjB,EAAO,EAGxB8vC,GAA6BS,IACjC,IAAIvwC,GAAS,EAEb,IAAK,IAAIgB,EAAI,EAAGA,EAAIuvC,EAAkBlyC,SAAU2C,EAC9ChB,EAASA,GAAwC,KAA9BuwC,EAAkB,GAAGvvC,KAG1C2tC,EAA6B3uC,EAAO,EAGhCg3B,GAAoBA,CAACiO,EAA2BuL,KACpD,IAAIxwC,GAAS,EAEb,MAAMwU,EAAQywB,EAAgB5mC,OAASmyC,EAAgBnyC,OAAS4mC,EAAgB5mC,OAASmyC,EAAgBnyC,OAEzG,IAAK,IAAI2C,EAAI,EAAGA,EAAIwT,EAAOxT,IAAK,CAE9B,MAAM6jC,EAAY,IAAI1hC,KAAK8hC,EAAgB,GAAGjkC,MAExCyvC,OAA+CtmC,IAA5B86B,EAAgB,GAAGjkC,MAAkD,KAA5BikC,EAAgB,GAAGjkC,MAAe6jC,EAAUiE,cAAgB,MAC9HjE,EAAU6L,WAAa,IAAM7L,EAAUE,UAAY,GAE7C4L,EAAY,IAAIxtC,KAAKqtC,EAAgB,GAAGxvC,MAExC4vC,OAA+CzmC,IAA5BqmC,EAAgB,GAAGxvC,MAAkD,KAA5BwvC,EAAgB,GAAGxvC,MAAe2vC,EAAU7H,cAAgB,MAAQ6H,EAAUD,WAAa,IAAMC,EAAU5L,UAAY,GAGzL,GAAI0L,GAAoBG,EAAkB,CACxC5wC,GAAS,EAAO,OAIpBg0B,EAAoBh0B,EAAO,EAGvBkwC,GAAyBA,CAACW,EAA2BL,KACzD,IAAIxwC,GAAS,EAEb,MAAMwU,EAAQq8B,EAAgBxyC,OAASmyC,EAAgBnyC,OAASwyC,EAAgBxyC,OAASmyC,EAAgBnyC,OAEzG,IAAK,IAAI2C,EAAI,EAAGA,EAAIwT,EAAOxT,IAAK,CAE9B,MAAMu0B,EAAY,IAAIpyB,KAAK0tC,EAAgB,GAAG7vC,MAExC8vC,EAAmBvb,EAAUuT,cAAgB,MAAQvT,EAAUmb,WAAa,IAAMnb,EAAUwP,UAAY,GAExG4L,EAAY,IAAIxtC,KAAKqtC,EAAgB,GAAGxvC,MAExC4vC,OAA+CzmC,IAA5BqmC,EAAgB,GAAGxvC,MAAkD,KAA5BwvC,EAAgB,GAAGxvC,MAAe2vC,EAAU7H,cAAgB,MAAQ6H,EAAUD,WAAa,IAAMC,EAAU5L,UAAY,GAEzL,GAAI+L,GAAoBF,EAAkB,CACxC5wC,GAAS,EAAO,MAGlB,IAAK8wC,IAAqBF,GACrBrb,EAAYob,EAAW,CACxB3wC,GAAS,EAAO,OAKtBg0B,EAAoBh0B,EAAO,EAGvB0sB,GAAuBA,CAACqZ,EAAyBC,EAA2BzE,KAChF,IAAIvhC,GAAS,EAEb,IAAK,IAAIgB,EAAI,EAAGA,EAAI+kC,EAAc1nC,SAAU2C,EAC1ChB,EAASA,GAAoC,KAA1B+lC,EAAc,GAAG/kC,MAA2C,KAA5BglC,EAAgB,GAAGhlC,MAA0C,KAA3BugC,EAAe,GAAGvgC,KAGzGmqB,EAAuBnrB,EAAO,EAS1B+6B,GAAkBA,CAACtU,EAAcla,KACrC,MAAM+sB,EAAcvqB,GAAQqW,QAE5B,UAA0C,IAA5BkU,EAAY,GAAG/sB,MAC3B+sB,EAAYz6B,KAAK,IAGnBy6B,EAAY,GAAG/sB,KAAWka,EAE1B6S,EAAY,GAAG/sB,KAASma,OAExB6oB,GAAWjW,GAEX3E,EAAgB2E,EAAY,EAGxB+W,GAAmB/jC,IACvB,MAAMgvB,EAAOhvB,GAAgB,IAAInJ,KAE3B4tC,EAAM,IAAI5tC,KAIhB,GAFAm4B,EAAK0J,SAAS,EAAG,EAAG,EAAG,GAEnB1J,EAAKwN,eAAiBiI,EAAIjI,eAAiBxN,EAAKoV,YAAcK,EAAIL,YAAcpV,EAAKyJ,WAAagM,EAAIhM,UAAW,CACnH,MAAMiM,EAA8C,GAapD,OAXArN,EAAAA,EAAehlC,KAAIsyC,IACjB,MAAMC,EAAWD,EAAM5uC,MAAMiJ,MAAM,KAE7B6lC,EAAYvvC,SAASsvC,EAAS,GAAG5lC,MAAM,KAAK,IAC5C8lC,EAAWxvC,SAASsvC,EAASA,EAAS7yC,OAAS,GAAGiN,MAAM,KAAK,KAE/D6lC,GAAaJ,EAAIM,YAAcD,GAAYL,EAAIM,YAAcF,GAAaJ,EAAIM,YAAcN,EAAIM,YAAcD,IAChHJ,EAAOnyC,KAAKoyC,MAITD,EAGT,OAAOrN,EAAAA,CAAc,EAGjByM,GAAuBA,IACyB,GAItCkB,OAAO3N,EAAAA,GAGjB9W,GAAqBA,IACrBX,GACKd,EAAS0B,YAAYpG,QAAsC,KAA5B0E,EAAS2B,eAAwB,KAAO3B,EAAS2B,eAAerG,OAAS,KAAqC,KAA9B0E,EAAS4B,iBAA0B,KAAO5B,EAAS4B,iBAAiBtG,OAAS,KAAmC,KAA5B0E,EAAS6B,eAAwB,KAAO7B,EAAS6B,eAAevG,OAAS,KAAkC,KAA3B0E,EAAS6a,cAAuB,KAAO7a,EAAS6a,cAAcvf,OAAS,IAG5V,GAGHwf,GAAoBA,KACxB,GAAIha,GAAW,CACb,MAEMrS,EAFSzI,EAAU,GAAG8K,KAAc9K,UAElBzP,MAAMwkC,GAA4CA,EAAM9jC,MAAMw6B,gBAAkBzR,EAASgb,iBAAiBvJ,gBAElI,OAAOhjB,EAAWA,EAASxX,MAAQ,GAGrC,MAAO,EAAE,EAGL2kB,GAAWA,KACfjE,EAAO,GAEP,MAAM8N,EAAmBf,GAAY1K,QAC/BmsB,EAAyBh/B,EAAkB6S,QAC3C6f,EAAkBxyB,EAAW2S,QAC7BosB,EAAoB3C,EAAazpB,QACjCqsB,EAAqB9sB,EAAcS,QACnCssB,EAAqB1C,GAAc5pB,QACnCyrB,EAAkBr/B,GAAW4T,QAC7BusB,EAAkBhgC,GAAWyT,QAC7BorB,EAAkBv9B,GAAWmS,QAC7BwsB,EAAkBz+B,GAAWiS,QAC7BuH,EAAqBld,GAAc2V,QACnCiI,EAAmB1d,GAAYyV,QAC/BwH,EAAmB/c,GAAYuV,QAC/Bmc,EAAiBnC,GAAaha,QAC9BysB,EAAe9iC,GAAQqW,QAE7ByL,EAAiBhyB,KAAK6sC,EAAAA,MAAAA,IACtB6F,EAAuB1yC,KAAK6sC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,OAC9D4iC,EAAgBpmC,KAAKgmC,GAAUK,gBAC/BsM,EAAkB3yC,KAAK,IACvB4yC,EAAmB5yC,KAAK,IACxB6yC,EAAmB7yC,KAAK,IACxBgyC,EAAgBhyC,KAAK,IACrB8yC,EAAgB9yC,KAAK,IACrB2xC,EAAgB3xC,KAAK,IACrB+yC,EAAgB/yC,KAAK,IACrBgzC,EAAahzC,KAAK,IAEdqtB,IACFS,EAAmB9tB,KAAKguB,MACxBQ,EAAiBxuB,KAAKusB,EAASmC,4BAC/BX,EAAiB/tB,KAAKusB,EAASoC,qBAC/B+T,EAAe1iC,KAAKqnC,QAEpBvZ,EAAmB9tB,KAAK,IACxBwuB,EAAiBxuB,KAAK,IACtB+tB,EAAiB/tB,KAAK,IACtB0iC,EAAe1iC,KAAKuS,EAAU,GAAG8K,KAAc9K,UAAU,GAAG/O,QAG9D0tB,GAAcc,GACd+d,EAAqB2C,GACrB3M,EAAcK,GACd6J,EAAgB0C,GAChBzC,EAAiB0C,GACjBxC,GAAiByC,GACjBxC,GAAc2B,GACd1B,GAAcwC,GACdvC,GAAcoB,GACdnB,GAAcuC,GACdjmB,GAAiBgB,GACjBf,GAAeyB,GACfxB,GAAee,GACf0iB,GAAa/N,GACbgO,GAAWsC,GAEX7B,GAAmBuB,EAAuBlzC,OAAS,GACnD4xC,GAAmB,IAAI9sC,KAAQouC,EAAuBlzC,OAAS,GAE/DuxB,EAAmBiB,GACnBuc,EAAyBmE,GACzB5M,EAAkBM,GAClB7hB,EAAoBouB,GACpBtuB,EAAauuB,GACbjD,EAAqBkD,GACrB3d,EAAkB8c,GAClB5N,EAAkB0O,GAClBlD,EAAkB+B,GAClBvN,EAAkB2O,GAClB7mB,EAAiB4B,GACjB3B,EAAmBqC,GACnBpC,EAAmB2B,GACnBkS,EAAgByC,GAChB5M,EAAgBkd,GAEhBxuB,GAAqB,GAErB2T,GAAkBiO,EAAiBuL,GACnC9jB,GAAqBC,EAAoBC,EAAkB2U,EAAe,EAGtEra,GAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,GAAiB/a,SAInByW,EAAUzW,GACV+a,GAAiB/a,QAGnByW,EAAUzW,GACV+a,GAAiB/a,IAIf+a,GAAoB/a,IACxB,MAAMskB,EAAmBf,GAAY1K,QAC/BmsB,EAAyBh/B,EAAkB6S,QAC3C6f,EAAkBxyB,EAAW2S,QAC7BosB,EAAoB3C,EAAazpB,QACjCqsB,EAAqB9sB,EAAcS,QACnCssB,EAAqB1C,GAAc5pB,QACnCyrB,EAAkBr/B,GAAW4T,QAC7BusB,EAAkBhgC,GAAWyT,QAC7BorB,EAAkBv9B,GAAWmS,QAC7BwsB,EAAkBz+B,GAAWiS,QAC7BuH,EAAqBld,GAAc2V,QACnCiI,EAAmB1d,GAAYyV,QAC/BwH,EAAmB/c,GAAYuV,QAC/Bmc,EAAiBnC,GAAaha,QAC9BysB,EAAe9iC,GAAQqW,aAEe,IAAjCyL,EAAiB,GAAGtkB,OACzBskB,EAAiBxyB,OAAS,EAC5BwyB,EAAiBxJ,OAAO9a,EAAO,GAE/BskB,EAAiB,GAAK6a,EAAAA,MAAAA,GAGxB3b,GAAcc,GAEdjB,EAAmBiB,SAG6B,IAAvC0gB,EAAuB,GAAGhlC,OAC/BglC,EAAuBlzC,OAAS,EAClCkzC,EAAuBlqB,OAAO9a,EAAO,GAErCglC,EAAuB,GAAK7F,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,MAGhEusC,EAAqB2C,GAErBnE,EAAyBmE,SAGgB,IAAhCtM,EAAgB,GAAG14B,OACxB04B,EAAgB5mC,OAAS,EAC3B4mC,EAAgB5d,OAAO9a,EAAO,GAE9B04B,EAAgB,GAAKJ,GAAU9gC,cAGjC6gC,EAAcK,GAEdN,EAAkBM,SAGyB,IAAlCuM,EAAkB,GAAGjlC,OAC1BilC,EAAkBnzC,OAAS,EAC7BmzC,EAAkBnqB,OAAO9a,EAAO,GAEhCilC,EAAkB,GAAK,GAGzB1C,EAAgB0C,GAEhBpuB,EAAoBouB,SAGwB,IAAnCC,EAAmB,GAAGllC,OAC3BklC,EAAmBpzC,OAAS,EAC9BozC,EAAmBpqB,OAAO9a,EAAO,GAEjCklC,EAAmB,GAAK,GAG1B1C,EAAiB0C,GAEjBvuB,EAAauuB,SAG+B,IAAnCC,EAAmB,GAAGnlC,OAC3BmlC,EAAmBrzC,OAAS,EAC9BqzC,EAAmBrqB,OAAO9a,EAAO,GAEjCmlC,EAAmB,GAAK,GAG1BzC,GAAiByC,GAEjBlD,EAAqBkD,SAGoB,IAAhCb,EAAgB,GAAGtkC,OACxBskC,EAAgBxyC,OAAS,EAC3BwyC,EAAgBxpB,OAAO9a,EAAO,GAE9BskC,EAAgB,GAAK,GAGvB3B,GAAc2B,GAEd9c,EAAkB8c,SAGuB,IAAhCL,EAAgB,GAAGjkC,OACxBikC,EAAgBnyC,OAAS,EAC3BmyC,EAAgBnpB,OAAO9a,EAAO,GAE9BikC,EAAgB,GAAK,GAGvBpB,GAAcoB,GAEd/B,EAAkB+B,SAGuB,IAAhCmB,EAAgB,GAAGplC,OACxBolC,EAAgBtzC,OAAS,EAC3BszC,EAAgBtqB,OAAO9a,EAAO,GAE9BolC,EAAgB,GAAK,GAGvBxC,GAAcwC,GAEd1O,EAAkB0O,SAGuB,IAAhCC,EAAgB,GAAGrlC,OACxBqlC,EAAgBvzC,OAAS,EAC3BuzC,EAAgBvqB,OAAO9a,EAAO,GAE9BqlC,EAAgB,GAAK,GAGvBvC,GAAcuC,GAEdlD,EAAkBkD,SAG0B,IAAnCjlB,EAAmB,GAAGpgB,OAC3BogB,EAAmBtuB,OAAS,EAC9BsuB,EAAmBtF,OAAO9a,EAAO,GAEjCogB,EAAmB,GAAK,GAG1BhB,GAAiBgB,GAEjBxB,EAAuBwB,SAGmB,IAAjCU,EAAiB,GAAG9gB,OACzB8gB,EAAiBhvB,OAAS,EAC5BgvB,EAAiBhG,OAAO9a,EAAO,GAE/B8gB,EAAiB,GAAK,GAGxBzB,GAAeyB,GAEfrC,EAAmBqC,SAGuB,IAAjCT,EAAiB,GAAGrgB,OACzBqgB,EAAiBvuB,OAAS,EAC5BuuB,EAAiBvF,OAAO9a,EAAO,GAE/BqgB,EAAiB,GAAK,GAGxBf,GAAee,GAEf3B,EAAmB2B,SAGqB,IAA/B2U,EAAe,GAAGh1B,OACvBg1B,EAAeljC,OAAS,EAC1BkjC,EAAela,OAAO9a,EAAO,GAE7Bg1B,EAAe,GAAKnwB,EAAU,GAAG8K,KAAc9K,UAAU,GAAG/O,MAG9DitC,GAAa/N,GAEbzC,EAAgByC,SAGoB,IAA3BiO,GAAW,GAAGjjC,OACnBijC,GAAWnxC,OAAS,EACtBmxC,GAAWnoB,OAAO9a,EAAO,GAEzByjC,GAAmB,SAIoB,IAAhCN,GAAgB,GAAGnjC,OACxBmjC,GAAgBrxC,OAAS,EAC3BqxC,GAAgBroB,OAAO9a,EAAO,GAE9B0jC,GAAmB,IAAI9sC,KAAQ,SAIK,IAA7B0uC,EAAa,GAAGtlC,OACrBslC,EAAaxzC,OAAS,EACxBwzC,EAAaxqB,OAAO9a,EAAO,GAE3BslC,EAAa,GAAK,GAGpBld,EAAgBkd,IAGlBplB,GAAkB+kB,EAAmBC,GACrC3B,GAA0B4B,GAC1B1a,GAAkBiO,EAAiBuL,GACnC9jB,GAAqBC,EAAoBC,EAAkB2U,EAAe,GAG5E1gB,EAAAA,EAAAA,YAAU,KACR,MAAMgQ,EAA6B,GAC7BihB,EAAkC,GAClC7M,EAA4B,GAC5BuM,EAA8B,GAC9BC,EAA+B,GAC/BC,EAA+B,GAC/Bb,EAA4B,GAC5Bc,EAA4B,GAC5BnB,EAA4B,GAC5BoB,EAA4B,GAC5BjlB,EAA+B,GAC/BU,EAA6B,GAC7BT,EAA6B,GAC7B2U,EAA2B,GAC3BsQ,EAAyB,GAE/B,GAAItuB,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAMqtC,EAA2D,KAA1C9qB,EAAU,GAAGviB,KAAuB,iBAAWuiB,EAAU,GAAGviB,KAAuB,iBAAI0qC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,MAC1IkK,EAAQm/B,EAAO,GAAGxvB,KAAcwvB,OAAOtpC,WAAWxD,GAA4CA,EAAKyD,QAAUgsC,IAE7G9Y,EAA+C,KAAnChS,EAAU,GAAGviB,KAAgB,UAAW,IAAImC,KAAKogB,EAAU,GAAGviB,KAAgB,WAAK,IAAImC,KAAK,KAAM,EAAG,EAAG,EAAG,EAAG,GAC1HwtC,EAA+C,KAAnCptB,EAAU,GAAGviB,KAAgB,UAAW,IAAImC,KAAKogB,EAAU,GAAGviB,KAAgB,WAAK,IAAImC,KAEzG0tB,EAAiBhyB,KAAK6sC,EAAAA,MAAa,GAAGn/B,MACtCulC,EAAsBjzC,KAAKwvC,GAC3BpJ,EAAgBpmC,KAAwC,KAAnC0kB,EAAU,GAAGviB,KAAgB,gBAA+CmJ,IAAnCoZ,EAAU,GAAGviB,KAAgB,UAAkBuiB,EAAU,GAAGviB,KAAgB,UAAI6jC,GAAU9gC,eACxJytC,EAAkB3yC,KAAK0kB,EAAU,GAAGviB,KAAkB,aACtDywC,EAAmB5yC,KAAK0kB,EAAU,GAAGviB,KAAY,MAAE,IACnD0wC,EAAmB7yC,KAAK0kB,EAAU,GAAGviB,KAA2B,sBAChE6vC,EAAgBhyC,KAAK02B,EAAUxxB,eAC/B4tC,EAAgB9yC,KAAK0kB,EAAU,GAAGviB,KAAgB,WAClDwvC,EAAgB3xC,KAAK8xC,EAAU5sC,eAC/B6tC,EAAgB/yC,KAAK0kB,EAAU,GAAGviB,KAAgB,WAClD2rB,EAAmB9tB,KAAK0kB,EAAU,GAAGviB,KAAmB,cACxDqsB,EAAiBxuB,KAAK0kB,EAAU,GAAGviB,KAAiB,YACpD4rB,EAAiB/tB,KAAK0kB,EAAU,GAAGviB,KAAiB,YACpDugC,EAAe1iC,KAAK0kB,EAAU,GAAGviB,KAAc,SAC/C6wC,EAAahzC,KAAK0kB,EAAU,GAAGviB,KAAc,SAE7CgvC,GAAmBhvC,GACnBivC,GAAmBU,EAAW3vC,GAGhC+uB,GAAcc,GACd+d,EAAqBkD,GACrBhD,EAAgB0C,GAChBzC,EAAiB0C,GACjBxC,GAAiByC,GACjBxC,GAAc2B,GACd1B,GAAcwC,GACdvC,GAAcoB,GACdnB,GAAcuC,GACdjmB,GAAiBgB,GACjBf,GAAeyB,GACfxB,GAAee,GACf0iB,GAAa/N,GACbgO,GAAWsC,GAEXjiB,EAAmBiB,GACnBuc,EAAyB0E,GACzB1uB,EAAoBouB,GACpBtuB,EAAauuB,GACbjD,EAAqBkD,GACrB3d,EAAkB8c,GAClB5N,EAAkB0O,GAClBlD,EAAkB+B,GAClB9B,EAAkBkD,GAClB7mB,EAAiB4B,GACjB3B,EAAmBqC,GACnBpC,EAAmB2B,GACnBkS,EAAgByC,GAChB5M,EAAgBkd,GAEhBplB,GAAkB+kB,EAAmBC,GACrC3B,GAA0B4B,GAC1BhlB,GAAqBC,EAAoBC,EAAkB2U,QAEvDrV,KACFS,EAAmB9tB,KAAKguB,MACxBQ,EAAiBxuB,KAAKusB,EAASmC,4BAC/BX,EAAiB/tB,KAAKusB,EAASoC,qBAC/B+T,EAAe1iC,KAAKqnC,MAEpBva,GAAiBgB,GACjBf,GAAeyB,GACfxB,GAAee,GACf0iB,GAAa/N,GAEbxW,EAAiB4B,GACjB3B,EAAmBqC,GACnBpC,EAAmB2B,GACnBkS,EAAgByC,GAEhB7U,GAAqBC,EAAoBC,EAAkB2U,IAG7D0D,EAAgBpmC,KAAKgmC,GAAU9gC,eAE/BisC,GAAmB,GACnBC,GAAmB,IAAI9sC,KAAQ,GAE/BiqC,EAAyB76B,GAG3BqyB,EAAcK,GAEdN,EAAkBM,GAElBjO,GAAkBiO,EAAiBuL,EAAgB,GAElD,CAACjtB,IAEJ,MAAM4hB,GAA0Bhd,GAE5Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWipB,kBACtCvjC,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOwhC,GAAyB3lB,GAChCgJ,QAASua,EAAO,GAAGxvB,KAAcwvB,OACjCljB,SAAW3Q,GAAU81B,GAAqB91B,EAAOsQ,GACjDle,UAAW,SACXo4B,cAAc,KAIlBr4B,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWugB,WACtC76B,IAAAA,cAACqxB,EAAAA,EAAU,CACP7S,SAAW8S,GA/1BD8J,EAAC94B,EAAaC,KAClC,MAAMggB,EAAa9Z,EAAW2S,QAMxBkW,EAAOhvB,EAAQA,EAAMvI,cAAgB8gC,GAAU9gC,cAErDwoB,EAAW,GAAGhgB,KAAW+uB,EAEzBsJ,EAAcrY,GAEdoY,EAAkBpY,GAElByK,GAAkBzK,EAAYtZ,GAAW,EAg1BLmyB,CAAc9J,EAAMnT,GAC9C7b,MAAgC,KAAzBmG,EAAW,GAAG0V,WAA0Che,IAAzBqH,GAAW,GAAG2W,MAAwB1V,EAAW,GAAG0V,KAAO2B,SAAS,QAAU,KAAO,IAAI3mB,KAAKsP,EAAW,GAAG0V,MAClJqT,OAAQ,UACRiI,QAASoB,GACT56B,UAAW,aACXyxB,eAAgB,GAChBC,iBAAkB,GAClBC,gBAAiB,OAOvBmW,GAA0B5pB,GAE5Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWnV,aACtCnF,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOuiC,EAAa,GAAG1mB,KAAM,YACnB,SACVS,KAAK,aACLJ,SAAW3Q,GAt2BM+a,EAAC/a,EAAYtL,KACtC,MAAMmd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF/C,GAAqB/O,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAm2B9CqmB,CAAmB/a,EAAOsQ,GAC/Ca,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7ES,aAAa,WAOjB4nB,GAA2B7pB,GAE7Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,KAAGC,UAAU,iBAAiBqa,GAAW2tB,uBACzCjoC,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWiF,cACtCvf,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOqY,EAAc,GAAGwD,KAAM,YACpB,SACVS,KAAK,aACLJ,SAAW3Q,GAv3Bcq6B,EAACr6B,EAAYtL,KAC9C,MAAMmd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpFimB,GAAsB/3B,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAo3B/C2lC,CAA2Br6B,EAAOsQ,GACvDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7ES,aAAa,WAOjB+nB,GAA2BhqB,GAE7Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW8tB,cACtCpoC,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO0iC,GAAc,GAAG7mB,KAAM,YACpB,SACVS,KAAK,aACLJ,SAAW3Q,GAv4Bcw6B,EAACx6B,EAAYtL,KAC9C,MAAMmd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpFkmB,GAAsBh4B,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAo4B/C8lC,CAA2Bx6B,EAAOsQ,GACvDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7ES,aAAa,WAqFjByD,GAAsB1F,IAC1B,MAAM8Z,EAAS7wB,EAAU,GAAG8K,KAAc9K,UAE1C,OACEpH,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,KAAGC,UAAU,iBAAiBqa,GAAWwJ,eACzC9jB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWyJ,iBACtC/jB,IAAAA,cAAA,qBACY,SACVC,UAAU,eACVye,UAAU,OACVE,KAAK,aACLJ,SAAW3Q,GAp4BImW,EAAC1hB,EAAeC,KACvC,MAAMggB,EAAa9c,GAAc2V,QAEjC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBqf,GAAiBY,GAEjBxB,EAAiBwB,GAEjBG,GAAqBH,EAAY1c,GAAauvB,GAAa,EAu3B9BpR,CAAiBnW,EAAMqN,OAAO5Y,MAAO6b,GAC1Da,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1DW,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7Erd,MAAOmD,GAAc,GAAG0Y,KACxBG,KAAK,OACL8B,aAAa,SAGfpgB,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW2J,aACtCjkB,IAAAA,cAAA,qBACY,SACVC,UAAU,eACVye,UAAU,OACVE,KAAK,aACLJ,SAAW3Q,GAl4BEqW,EAAC5hB,EAAeC,KACrC,MAAMggB,EAAa5c,GAAYyV,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBsf,GAAeW,GAEfvB,EAAmBuB,EAAW,EAu3BD2B,CAAerW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1DW,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7Erd,MAAOqD,GAAY,GAAGwY,KACtBG,KAAK,OACL8B,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,iBACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW6J,mBACtCnkB,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOuD,GAAY,GAAGsY,KAAM,YAClB,SACVS,KAAK,aACLJ,SAAW3Q,GAt4BAuW,EAAC9hB,EAAeC,KACrC,MAAMggB,EAAa1c,GAAYuV,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGfyN,EAAMjO,QAAQ,EACfkuB,EAAW,GAAGhgB,KAAWD,EAEzB+hB,EAAAA,GAAMC,QAAQjO,EAAAA,GAAkC,GAAGnE,MAGrD2P,GAAeU,GAEftB,EAAmBsB,GAEnBG,GAAqBjd,GAAe8c,EAAY6S,GAAa,EAq3B9BhR,CAAevW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVmgB,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWiK,gBACtCvkB,IAAAA,cAACgnB,EAAAA,GAAM,CACLmR,YAAa/C,GAAa,GAAGjX,KAC7BgJ,QAAS8Q,EACTzZ,SAAW3Q,GA93BHovB,EAACpvB,EAAYtL,KAC/B,MAAMggB,EAAa6S,GAAaha,QAEhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/BitC,GAAa/iB,GAEbuS,EAAgBvS,GAEhBG,GAAqBjd,GAAeI,GAAa0c,EAAW,EAi3B7B0a,CAAYpvB,EAAOsQ,GACxCle,UAAW,SACXo4B,cAAc,MAIhB,EAIJ3E,GAAiBvV,GAEnBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWvV,SACtC/E,IAAAA,cAAA,YACE0e,UAAU,OACVpc,MAAOyC,GAAQ,GAAGoZ,KAAM,YACd,SACVS,KAAK,aACLJ,SAAW3Q,GA1wBS8lB,EAAC9lB,EAAYtL,KACzC,MAAMmd,EAAYzQ,EAAO2kB,0BAA4B3kB,EAAO2kB,0BAA4B,IAExF7C,GAAgBljB,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAuwBzCoxB,CAAsB9lB,EAAOsQ,GAClDle,UAAU,eACVyf,UAAWzQ,EAAO2kB,0BAA4B3kB,EAAO2kB,0BAA4B,QAO3F,OACE5zB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,IA9nCFvb,QA8nC0B6gB,QAASrF,GAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,WAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BACZk7B,GAAuBhd,GACvB4pB,GAAuB5pB,GACvB6pB,GAAwB7pB,GACxBgqB,GAAwBhqB,GApLpBA,KAC3B,QAA6Bhe,IAAzBqlC,GAAW,GAAGrnB,WAAiDhe,IAAzBqH,GAAW,GAAG2W,KACtD,OAAO,KAGT,MAEMmqB,EAFQ9C,GAAW,GAAGrnB,KAAOxmB,MAAM4wC,GAAqBA,EAAKlwC,QAAUsP,GAAW,GAAGwW,QAEvD,CAAE7b,MAAO,GAAIjK,MAAO,eAExD,OACE2H,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWiR,WACtCvrB,IAAAA,cAACqxB,EAAAA,EAAU,CACT7S,SAAW8S,GAAeyU,GAASzU,EAAMnT,EAAK7D,GAAWiR,WACzDjpB,MAAgC,KAAzBkF,GAAW,GAAG2W,WAA0Che,IAAzBqH,GAAW,GAAG2W,MAAwB3W,GAAW,GAAG2W,KAAO2B,SAAS,QAAU,KAAO,IAAI3mB,KAAKqO,GAAW,GAAG2W,MAClJqT,OAAQ,UACRC,QAAS,IAAIt4B,KACb8G,UAAW,aACXyxB,eAAgB,KAChBC,iBAAkB,KAClBC,gBAAiB,UAIrB5xB,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW4e,WACtCl5B,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOgmC,EACPnhB,QAASqe,GAAW,GAAGrnB,KACvBK,SAAW3Q,GAAUs4B,GAASt4B,EAAOsQ,EAAK7D,GAAW4e,WACrDj5B,UAAW,SACXo4B,cAAc,KAGd,EAkJemQ,CAAoBrqB,GA9IhBA,KAC3B,QAAkChe,IAA9BulC,GAAgB,GAAGvnB,WAAiDhe,IAAzB8I,GAAW,GAAGkV,KAC3D,OAAO,KAGT,MAEMmqB,EAFQ5C,GAAgB,GAAGvnB,KAAOxmB,MAAM4wC,GAAqBA,EAAKlwC,QAAU8Q,GAAW,GAAGgV,QAE5D,CAAE7b,MAAO,GAAIjK,MAAO,eAExD,OACE2H,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWqsB,WACtC3mC,IAAAA,cAACqxB,EAAAA,EAAU,CACT7S,SAAW8S,GAAeyU,GAASzU,EAAMnT,EAAK7D,GAAWqsB,WACzDrkC,MAAgC,KAAzB2G,GAAW,GAAGkV,WAA0Che,IAAzB8I,GAAW,GAAGkV,MAAuBlV,GAAW,GAAGkV,KAAO2B,SAAS,QAAU,KAAO,IAAI3mB,KAAK8P,GAAW,GAAGkV,MACjJqT,OAAQ,UACRC,QAAS,IAAIt4B,KACb8G,UAAW,aACXyxB,eAAgB,KAChBC,iBAAkB,KAClBC,gBAAiB,UAIrB5xB,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWmuB,WACtCzoC,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOgmC,EACPnhB,QAASue,GAAgB,GAAGvnB,KAC5BK,SAAW3Q,GAAUs4B,GAASt4B,EAAOsQ,EAAK7D,GAAWmuB,WACrDxoC,UAAW,SACXo4B,cAAc,KAGd,EA4GeqQ,CAAoBvqB,GACpB0F,GAAmB1F,GACnByM,GAAoB8I,GAAcvV,IAKgB,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAG6lB,GAAY,GAAG3H,MAA+B,QAAzBqC,EAAG1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,SAK5F,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,uMCpuCV,MAm2BA,EAn2ByDJ,IAKuD,IALtD,WACxD+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,mBACxD4M,EAAkB,yBAAEwd,EAAwB,aAAElqB,EAAY,mBAAE2gB,EAAkB,kBAAE9P,EAAiB,kBAAEkP,EAAiB,iBACpHlY,EAAgB,mBAAEC,EAAkB,mBAAEC,EAAkB,gBAAE6T,EAAe,qBACzEzb,EAAoB,uBAAE0gB,EAAsB,oBAAE/P,EAAmB,uBAAE7I,EAAsB,UACzF5H,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEwtB,EAAQ,SAAExiB,EAAQ,WAAEyT,EAAU,2BAAEmH,GAA4B1H,EAC1G,MAAOyxB,EAAkBC,IAAuBp3B,EAAAA,EAAAA,UAAS,CAACs1B,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,SACrF8hB,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,MAC3C4tB,EAAYC,IAAiB7tB,EAAAA,EAAAA,UAAS,CAAC,MACvCmf,EAAWC,IAAgBpf,EAAAA,EAAAA,UAAS,CAAC,MACrC8sB,EAAWC,IAAgB/sB,EAAAA,EAAAA,UAAS,CAAC,MACrCmvB,EAAcC,IAAmBpvB,EAAAA,EAAAA,UAAS,CAAC,MAC3CqvB,EAAYC,IAAiBtvB,EAAAA,EAAAA,UAAS,CAAC,MACvCuvB,GAAYC,KAAiBxvB,EAAAA,EAAAA,UAAS,CAAC,MACvCyvB,GAAaC,KAAc1vB,EAAAA,EAAAA,UAAS,CAAC,MAErCo5B,GAAYC,KAAiBr5B,EAAAA,EAAAA,UAA+C,KAC5E0Z,GAAaC,KAAiB3Z,EAAAA,EAAAA,UAAS,CAAC,IAEzCkO,GAAajE,EAAAA,GAA+B,GAAGnE,KAC/CgQ,MAAad,IAAYA,EAASe,gBAAmD,KAAlCf,EAASe,cAAczF,QAQ1E,aAAE7B,GAAY,MAAEC,KAAUC,EAAAA,EAAAA,MAkB1B4oB,GAAuBA,CAAC91B,EAAYtL,KACxC,MAAMggB,EAAaghB,EAAiBnoB,QAEpC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK6sC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,OAGpDkqB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/BmrC,EAAoBjhB,GAEpB6gB,EAAyB7gB,GA3BL8D,EAACud,EAAqBrhC,KAC1C,MAAMggB,EAAauD,GAAY1K,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK6sC,EAAAA,MAAAA,IAGlB,MAAMmC,EAAWnC,EAAO,GAAGxvB,KAAcwvB,OAAOtpC,WAAWxD,GAA4CA,EAAKyD,QAAUurC,IAEtHrhB,EAAW,GAAGhgB,KAAWm/B,EAAAA,MAAa,GAAGmC,KAEzC9d,GAAcxD,GAEdqD,EAAmBrD,EAAW,EAgB9B8D,CAAcxY,EAAMxV,MAAOkK,EAAM,EAS7Bia,GAAwBA,CAACC,EAAcla,KAC3C,MAAMggB,EAAapI,EAAaiB,QAGhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWka,EAEzB8F,EAAW,GAAGhgB,KAASma,OAEvBtC,EAAgBmI,GAEhBrJ,EAAaqJ,GAEbE,GAAkBF,EAAW,EA6HzBomB,GAAgBA,CAACrmC,EAAaC,KAClC,MAAMggB,EAAaijB,GAAWpqB,QAE9B,KAAOmH,EAAWluB,OAASkvC,EAAiBlvC,QAC1CkuB,EAAW1tB,KAAK8kC,EAAAA,GAGlB,MAAMrI,EAAOhvB,GAAgB,IAAInJ,KAE3B4tC,EAAM,IAAI5tC,KAIhB,GAFAm4B,EAAK0J,SAAS,EAAG,EAAG,EAAG,GAEnB1J,EAAKwN,eAAiBiI,EAAIjI,eAAiBxN,EAAKoV,YAAcK,EAAIL,YAAcpV,EAAKyJ,WAAagM,EAAIhM,UAAW,CACnH,MAAMiM,EAA8C,GAEpDrN,EAAAA,EAAehlC,KAAIsyC,IACjB,MAAMC,EAAWD,EAAM5uC,MAAMiJ,MAAM,KAE7B6lC,EAAYvvC,SAASsvC,EAAS,GAAG5lC,MAAM,KAAK,IAC5C8lC,EAAWxvC,SAASsvC,EAASA,EAAS7yC,OAAS,GAAGiN,MAAM,KAAK,KAE/D6lC,GAAaJ,EAAIM,YAAcD,GAAYL,EAAIM,YAAcF,GAAaJ,EAAIM,YAAcN,EAAIM,YAAcD,IAChHJ,EAAOnyC,KAAKoyC,MAIhB1kB,EAAW,GAAGhgB,KAAWykC,OAEzBzkB,EAAW,GAAGhgB,KAAWo3B,EAAAA,EAG3B8L,GAAcljB,EAAW,EAGrBuhB,GAA4BvhC,IAChC,GAAIghC,EAAiBlvC,OAAS,EAAG,CAC/B,MAAM8xB,EAAmBod,EAAiBnoB,QAE1C,QAA4C,IAAjC+K,EAAiB,GAAG5jB,KAC7B,OAAOm/B,EAAO,GAAGxvB,KAAcwvB,OAAO/pC,MAAM/C,GAA2CA,EAAKyD,QAAU8tB,EAAiB,GAAG5jB,OAI9H,MAAO,CAAED,MAAO,GAAIjK,MAAO,GAAI,EAG3BoqB,GAAqBF,IACzB,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,GAAoD,KAAhDurB,EAAW,GAAGvrB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CACtD6B,GAAU,EAAO,MAIrBlF,EAAqBkF,EAAQ,EAGzB2b,GAAuB3X,IAC3B,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,GAAoD,KAAhDurB,EAAW,GAAGvrB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CACtD6B,GAAU,EAAO,MAIrBwb,EAAuBxb,EAAQ,EAG3ByO,GAAqBzK,IACzB,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,GAA2B,KAAvBurB,EAAW,GAAGvrB,MAAeurB,EAAW,GAAGvrB,KAAK8oB,SAAS,QAAS,CACpEvB,GAAU,EAAO,MAIrByL,EAAoBzL,EAAQ,EAGxBmE,GAAuBA,CAACqZ,EAAyBC,KACrD,IAAIhmC,GAAS,EAEb,IAAK,IAAIgB,EAAI,EAAGA,EAAI+kC,EAAc1nC,SAAU2C,EAC1ChB,EAASA,GAAoC,KAA1B+lC,EAAc,GAAG/kC,MAA2C,KAA5BglC,EAAgB,GAAGhlC,KAGxEmqB,EAAuBnrB,EAAO,EAuB1BgnB,GAAWA,KACfjE,EAAO,GAEP,MAAMoP,EAAkBrC,GAAY1K,QAC9B4oB,EAAwBT,EAAiBnoB,QACzCD,EAAoBhB,EAAaiB,QACjC+e,EAAkBH,EAAW5e,QAC7Bge,EAAiB7N,EAAUnQ,QAC3Bie,EAAiBH,EAAU9d,QAC3BihB,EAAoBd,EAAangB,QACjCkhB,EAAkBb,EAAWrgB,QAC7B4gB,EAAkBL,GAAWvgB,QAC7BmhB,EAAeV,GAAYzgB,QAEjC+M,EAAgBtzB,KAAK6sC,EAAAA,MAAAA,IACrBsC,EAAsBnvC,KAAK6sC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,OAC7D8iB,EAAkBtmB,KAAK,IACvBslC,EAAgBtlC,KAAK,IACrBukC,EAAevkC,KAAK,IACpBwkC,EAAexkC,KAAK,IAEhBqtB,IACFma,EAAkBxnC,KAzChBqtB,GACKd,EAAS0B,YAAYpG,QAAsC,KAA5B0E,EAAS2B,eAAwB,KAAO3B,EAAS2B,eAAerG,OAAS,KAAqC,KAA9B0E,EAAS4B,iBAA0B,KAAO5B,EAAS4B,iBAAiBtG,OAAS,KAAmC,KAA5B0E,EAAS6B,eAAwB,KAAO7B,EAAS6B,eAAevG,OAAS,KAAkC,KAA3B0E,EAAS6a,cAAuB,KAAO7a,EAAS6a,cAAcvf,OAAS,IAG5V,IAsCL4f,EAAgBznC,KAAKusB,EAASmC,4BAC9ByY,EAAgBnnC,KAAKusB,EAASoC,qBAC9B+Y,EAAa1nC,KArCSqnC,MACxB,GAAIha,GAAW,CACb,MAEMrS,EAFSzI,EAAU,GAAG8K,KAAc9K,UAElBzP,MAAMwkC,GAA4CA,EAAM9jC,MAAMw6B,gBAAkBzR,EAASgb,iBAAiBvJ,gBAElI,OAAOhjB,EAAWA,EAASxX,MAAQ,GAGrC,MAAO,EAAE,EA4BW6jC,MAElBG,EAAkBxnC,KAAK,IACvBynC,EAAgBznC,KAAK,IACrBmnC,EAAgBnnC,KAAK,IACrB0nC,EAAa1nC,KAAKuS,EAAU,GAAG8K,KAAc9K,UAAU,GAAG/O,QAG5D0tB,GAAcoC,GACdqb,EAAoBQ,GACpB5pB,EAAgBe,GAChB8e,EAAcE,GACd3O,EAAa4N,GACbD,EAAaE,GACbmC,EAAgBa,GAChBX,EAAcY,GACdV,GAAcI,GACdF,GAAWS,GAEXoM,GAAc,IAAIxvC,KAAQ6qC,EAAsB3vC,OAAS,GAEzDuxB,EAAmBuC,GACnBib,EAAyBY,GACzB9qB,EAAaiC,GACb0e,EAAmBM,GACnBpQ,EAAkBqP,GAClBH,EAAkBI,GAClBtY,EAAiBsb,GACjBrb,EAAmBsb,GACnBrb,EAAmB+a,GACnBlH,EAAgByH,GAEhBljB,GAAqB,GACrB0gB,GAAuB,GACvB/P,GAAoB,GAEpBtH,GAAqB2Z,EAAmBL,EAAgB,EAGpD9e,GAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,GAAiB/a,SAInByW,EAAUzW,GACV+a,GAAiB/a,QAGnByW,EAAUzW,GACV+a,GAAiB/a,IAIf+a,GAAoB/a,IACxB,MAAM4lB,EAAkBrC,GAAY1K,QAC9B4oB,EAAwBT,EAAiBnoB,QACzCD,EAAoBhB,EAAaiB,QACjC+e,EAAkBH,EAAW5e,QAC7Bge,EAAiB7N,EAAUnQ,QAC3Bie,EAAiBH,EAAU9d,QAC3BihB,EAAoBd,EAAangB,QACjCkhB,EAAkBb,EAAWrgB,QAC7B4gB,EAAkBL,GAAWvgB,QAC7BmhB,EAAeV,GAAYzgB,aAEU,IAAhC+M,EAAgB,GAAG5lB,OACxB4lB,EAAgB9zB,OAAS,EAC3B8zB,EAAgB9K,OAAO9a,EAAO,GAE9B4lB,EAAgB,GAAKuZ,EAAAA,MAAAA,GAGvB3b,GAAcoC,GAEdvC,EAAmBuC,SAG4B,IAAtC6b,EAAsB,GAAGzhC,OAC9ByhC,EAAsB3vC,OAAS,EACjC2vC,EAAsB3mB,OAAO9a,EAAO,GAEpCyhC,EAAsB,GAAKtC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,MAG/DmrC,EAAoBQ,GAEpBZ,EAAyBY,SAGkB,IAAlC7oB,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,GAGzBf,EAAgBe,GAEhBjC,EAAaiC,SAG4B,IAAhCgf,EAAgB,GAAG53B,OACxB43B,EAAgB9lC,OAAS,EAC3B8lC,EAAgB9c,OAAO9a,EAAO,GAE9B43B,EAAgB,GAAK,GAGvBF,EAAcE,GAEdN,EAAmBM,SAGqB,IAA/Bf,EAAe,GAAG72B,OACvB62B,EAAe/kC,OAAS,EAC1B+kC,EAAe/b,OAAO9a,EAAO,GAE7B62B,EAAe,GAAK,GAGtB5N,EAAa4N,GAEbrP,EAAkBqP,SAGsB,IAA/BC,EAAe,GAAG92B,OACvB82B,EAAehlC,OAAS,EAC1BglC,EAAehc,OAAO9a,EAAO,GAE7B82B,EAAe,GAAK,GAGtBF,EAAaE,GAEbJ,EAAkBI,SAGyB,IAAlCgD,EAAkB,GAAG95B,OAC1B85B,EAAkBhoC,OAAS,EAC7BgoC,EAAkBhf,OAAO9a,EAAO,GAEhC85B,EAAkB,GAAK,GAGzBb,EAAgBa,GAEhBlb,EAAuBkb,SAGkB,IAAhCC,EAAgB,GAAG/5B,OACxB+5B,EAAgBjoC,OAAS,EAC3BioC,EAAgBjf,OAAO9a,EAAO,GAE9B+5B,EAAgB,GAAK,GAGvBZ,EAAcY,GAEdtb,EAAmBsb,SAGsB,IAAhCN,EAAgB,GAAGz5B,OACxBy5B,EAAgB3nC,OAAS,EAC3B2nC,EAAgB3e,OAAO9a,EAAO,GAE9By5B,EAAgB,GAAK,GAGvBJ,GAAcI,GAEd/a,EAAmB+a,SAGmB,IAA7BO,EAAa,GAAGh6B,OACrBg6B,EAAaloC,OAAS,EACxBkoC,EAAalf,OAAO9a,EAAO,GAE3Bg6B,EAAa,GAAKn1B,EAAU,GAAG8K,KAAc9K,UAAU,GAAG/O,MAG5DyjC,GAAWS,GAEXzH,EAAgByH,SAGoB,IAA3BiJ,GAAW,GAAGjjC,OACnBijC,GAAWnxC,OAAS,EACtBmxC,GAAWnoB,OAAO9a,EAAO,GAEzBomC,GAAc,IAAIxvC,KAAQ,IAI9BspB,GAAkBtH,GAClB+e,GAAoBC,GACpBnN,GAAkBoM,GAClB1W,GAAqB6Y,EAAcI,GAAW,GAGhD9kB,EAAAA,EAAAA,YAAU,KACR,MAAMqtB,EAA+B,GAC/BC,EAAoC,GACpC9oB,EAAiC,GACjCgf,EAA+B,GAC/BtK,EAA8B,GAC9BwJ,EAA8B,GAC9BoD,EAAiC,GACjCC,EAA+B,GAC/BC,EAA+B,GAC/BC,EAA4B,GAElC,GAAIvjB,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAMqtC,EAA2D,KAA1C9qB,EAAU,GAAGviB,KAAuB,iBAAWuiB,EAAU,GAAGviB,KAAuB,iBAAI0qC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,MAC1IkK,EAAQm/B,EAAO,GAAGxvB,KAAcwvB,OAAOtpC,WAAWxD,GAA4CA,EAAKyD,QAAUgsC,IAE7G9Y,EAA+C,KAAnChS,EAAU,GAAGviB,KAAgB,UAAW,IAAImC,KAAKogB,EAAU,GAAGviB,KAAgB,WAAK,IAAImC,KAEzG+qC,EAAmBrvC,KAAK6sC,EAAAA,MAAa,GAAGn/B,MACxC4hC,EAAwBtvC,KAAKwvC,GAC7BhpB,EAAqBxmB,KAAK0kB,EAAU,GAAGviB,KAAY,MAAE,IACrDqjC,EAAmBxlC,KAAK0kB,EAAU,GAAGviB,KAAiB,YACtD+4B,EAAkBl7B,KAAK02B,EAAUxxB,eACjCw/B,EAAkB1kC,KAAK0kB,EAAU,GAAGviB,KAAgB,WACpD2lC,EAAqB9nC,KAAK0kB,EAAU,GAAGviB,KAAmB,cAC1D4lC,EAAmB/nC,KAAK0kB,EAAU,GAAGviB,KAAiB,YACtD6lC,EAAmBhoC,KAAK0kB,EAAU,GAAGviB,KAAiB,YACtD8lC,EAAgBjoC,KAAK0kB,EAAU,GAAGviB,KAAc,SAEhD2xC,GAAcpd,EAAWv0B,GAG3B+uB,GAAcme,GACdV,EAAoBW,GACpB/pB,EAAgBiB,GAChB4e,EAAcI,GACd7O,EAAauE,GACboJ,EAAaI,GACbiC,EAAgBmB,GAChBjB,EAAckB,GACdhB,GAAciB,GACdf,GAAWgB,GAEXlX,EAAmBse,GACnBd,EAAyBe,GACzBjrB,EAAamC,GACbwe,EAAmBQ,GACnBtQ,EAAkBgG,GAClBkJ,EAAkBM,GAClBxY,EAAiB4b,GACjB3b,EAAmB4b,GACnB3b,EAAmB4b,GACnB/H,EAAgBgI,GAEhBra,GAAkBpH,GAClB6e,GAAoBG,GACpBrN,GAAkB+C,GAClBrN,GAAqBia,EAAsBE,QAE3C8L,GAAc,IAAIxvC,KAAQ,GAE1BysB,EAAmBE,IACnBsd,EAAyBG,KAE1B,CAAChqB,IAEJ,MAiBMigB,GAAmBrb,GAErBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWmC,MACtCzc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO6X,EAAa,GAAGgE,KAAM,YACnB,SACVS,KAAK,aACLJ,SAAW3Q,GAtlBM+a,EAAC/a,EAAYtL,KACtC,IAAImd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAElFnD,GAAsB3O,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAmlB/CqmB,CAAmB/a,EAAOsQ,GAC/Ca,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7ES,aAAa,WAOjBqa,GAAqBtc,GAEvBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW0f,YACtCh6B,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO03B,EAAW,GAAG7b,KAAM,YACjB,SACVS,KAAK,aACLJ,SAAW3Q,GAnlBE6sB,EAACje,EAAcla,KACpC,MAAMggB,EAAayX,EAAW5e,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWka,EAEzB8F,EAAW,GAAGhgB,KAASma,OAEvBud,EAAc1X,GAEdsX,EAAmBtX,GAEnB2X,GAAoB3X,EAAW,EAokBFmY,CAAe7sB,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7ES,aAAa,WAOjBooB,GAAuBrqB,IAC3B,QAA6Bhe,IAAzBqlC,GAAW,GAAGrnB,WAAgDhe,IAAxBorB,EAAU,GAAGpN,KACrD,OAAO,KAGT,MAAMzmB,EAAQ8tC,GAAW,GAAGrnB,KAAOxmB,MAAM4wC,GAAqBA,EAAKlwC,QAAU6gC,EAAU,GAAG/a,OAEpFmqB,EAAc5wC,GAAgB,CAAE4K,MAAO,GAAIjK,MAAO,IAExD,OACE2H,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWiR,WACtCvrB,IAAAA,cAACqxB,EAAAA,EAAU,CACT7S,SAAW8S,GA1lBCC,EAACjvB,EAAaC,KAClC,MAAMggB,EAAagJ,EAAUnQ,QAE7B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,MAAK,IAAIsE,MAAOY,eAG7B,MAAMu3B,EAAOhvB,EAAQA,EAAMvI,cAAgB,GAE3CwoB,EAAW,GAAGhgB,KAAW+uB,EAEzBqX,GAAcrmC,EAAOC,GAErBipB,EAAajJ,GAEbwH,EAAkBxH,GAElByK,GAAkBzK,EAAW,EAykBKgP,CAAcD,EAAMnT,GAC9C7b,MAA+B,KAAxBipB,EAAU,GAAGpN,MAAiBoN,EAAU,GAAGpN,KAAO2B,SAAS,QAAU,KAAO,IAAI3mB,KAAKoyB,EAAU,GAAGpN,MACzGqT,OAAQ,UACRC,QAAS,IAAIt4B,KACb8G,UAAW,aACXyxB,eAAgB,GAChBC,iBAAkB,GAClBC,gBAAiB,MAIrB5xB,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW4e,WACtCl5B,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOgmC,EACPnhB,QAASqe,GAAW,GAAGrnB,KACvBK,SAAW3Q,GAtlBC+rB,EAAC/rB,EAAYtL,KACjC,MAAMggB,EAAa2W,EAAU9d,QAE7B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/B8gC,EAAa5W,GAEb0W,EAAkB1W,EAAW,EA2kBAqX,CAAc/rB,EAAOsQ,GAC1Cle,UAAW,SACXo4B,cAAc,KAGd,EAIJxU,GAAsB1F,IAC1B,MAAM8Z,EAAS7wB,EAAU,GAAG8K,KAAc9K,UAE1C,OACEpH,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,KAAGC,UAAU,iBAAiBqa,GAAWwJ,eACzC9jB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWyJ,iBACtC/jB,IAAAA,cAAA,qBACY,SACVC,UAAU,eACVye,UAAU,OACVE,KAAK,aACLJ,SAAW3Q,GA9lBImW,EAAC1hB,EAAeC,KACvC,MAAMggB,EAAagZ,EAAangB,QAEhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBigB,EAAW,GAAGhgB,KAASma,OAEvB8e,EAAgBjZ,GAEhBxB,EAAiBwB,GAEjBG,GAAqB6Y,EAAcI,GAAW,EA+kBjB3X,CAAiBnW,EAAMqN,OAAO5Y,MAAO6b,GAC1Da,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1DW,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7Erd,MAAOi5B,EAAa,GAAGpd,KACvBG,KAAK,OACL8B,aAAa,SAGfpgB,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW2J,aACtCjkB,IAAAA,cAAA,qBACY,SACVC,UAAU,eACVye,UAAU,OACVE,KAAK,aACLJ,SAAW3Q,GA1lBEqW,EAAC5hB,EAAeC,KACrC,MAAMggB,EAAakZ,EAAWrgB,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBigB,EAAW,GAAGhgB,KAASma,OAEvBgf,EAAcnZ,GAEdvB,EAAmBuB,EAAW,EA6kBD2B,CAAerW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1DW,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7Erd,MAAOm5B,EAAW,GAAGtd,KACrBG,KAAK,OACL8B,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,iBACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW6J,mBACtCnkB,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOq5B,GAAW,GAAGxd,KAAM,YACjB,SACVS,KAAK,aACLJ,SAAW3Q,GA5lBAuW,EAAC9hB,EAAeC,KACrC,MAAMggB,EAAaoZ,GAAWvgB,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGfyN,EAAMjO,QAAQ,EACfkuB,EAAW,GAAGhgB,KAAWD,EAEzB+hB,EAAAA,GAAMC,QAAQjO,EAAAA,GAAkC,GAAGnE,MAGrDqQ,EAAW,GAAGhgB,KAASma,OAEvBkf,GAAcrZ,GAEdtB,EAAmBsB,GAEnBG,GAAqB6Y,EAAcI,GAAW,EAykBfvX,CAAevW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVmgB,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWiK,gBACtCvkB,IAAAA,cAACgnB,EAAAA,GAAM,CACLmR,YAAa0D,GAAY,GAAG1d,KAC5BgJ,QAAS8Q,EACTzZ,SAAW3Q,GAllBHovB,EAACpvB,EAAYtL,KAC/B,MAAMggB,EAAasZ,GAAYzgB,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/ByjC,GAAWvZ,GAEXuS,EAAgBvS,EAAW,EAukBI0a,CAAYpvB,EAAOsQ,GACxCle,UAAW,SACXo4B,cAAc,MAIhB,EAIV,OACEr4B,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,IA3wBFvb,QA2wB0B6gB,QAASrF,GAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,WAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BAnLLke,IAE5Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWipB,kBACtCvjC,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOwhC,GAAyB3lB,GAChCgJ,QAASua,EAAO,GAAGxvB,KAAcwvB,OACjCljB,SAAW3Q,GAAU81B,GAAqB91B,EAAOsQ,GACjDle,UAAW,SACXo4B,cAAc,MA0KC8C,CAAuBhd,GACvBqb,GAAgBrb,GAChBsc,GAAkBtc,GAClBqqB,GAAoBrqB,GACpB0F,GAAmB1F,IAK+B,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAG6lB,GAAY,GAAG3H,MAA+B,QAAzBqC,EAAG1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,SAK5F,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,uMC71BV,MAggCA,EAhgCuDJ,IAK0E,IALzE,WACtD+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,mBACxD4M,EAAkB,yBAAEwd,EAAwB,kBAAEzI,EAAiB,aAAEzhB,EAAY,eAAE0vB,EAAc,kBAAE7e,EAAiB,kBAAEkP,EAAiB,iBACnIlY,EAAgB,mBAAEC,EAAkB,mBAAEC,EAAkB,gBAAE6T,EAAe,qBACzEzb,EAAoB,oBAAE2Q,EAAmB,uBAAE7I,EAAsB,gBAAEwJ,EAAe,UAClFpR,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEwtB,EAAQ,SAAExiB,EAAQ,WAAEyT,EAAU,2BAAEmH,EAA0B,iBAACoR,GAAkB9Y,EAC3H,MAAOvJ,EAAmBq8B,IAAwBx4B,EAAAA,EAAAA,UAAS,CAACs1B,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,SACvFoQ,EAAYmyB,IAAiBxuB,EAAAA,EAAAA,UAAS,CAAC,MACvC1I,EAAOge,IAAYtV,EAAAA,EAAAA,UAAS,CAAC,MAC7BzD,EAASkgC,IAAcz8B,EAAAA,EAAAA,UAAS,CAACiK,EAAAA,GAAyB,GAAGnE,QAC7D1K,EAAY09B,IAAiB94B,EAAAA,EAAAA,UAAS,CAAC,MACvCzE,EAAYw9B,IAAiB/4B,EAAAA,EAAAA,UAAS,CAAC,MACvC3G,GAAekc,KAAoBvV,EAAAA,EAAAA,UAAS,CAAC,MAC7CzG,GAAaic,KAAkBxV,EAAAA,EAAAA,UAAS,CAAC,MACzCvG,GAAagc,KAAkBzV,EAAAA,EAAAA,UAAS,CAAC,MACzCgpB,GAAckQ,KAAgBl5B,EAAAA,EAAAA,UAAS,CAAC,MACxCrH,GAASwgC,KAAcn5B,EAAAA,EAAAA,UAAS,CAAC,MAEjCo5B,GAAYC,KAAiBr5B,EAAAA,EAAAA,UAA+C,KAC5E0Z,GAAaC,KAAiB3Z,EAAAA,EAAAA,UAAS,CAAC,IAEzCkO,GAAajE,EAAAA,GAA6B,GAAGnE,KAC7CgQ,MAAad,IAAYA,EAASe,gBAAmD,KAAlCf,EAASe,cAAczF,OAE1Eme,GAAY,IAAI1hC,KACtB0hC,GAAUC,QAAQD,GAAUE,UAAY,GACxCF,GAAUG,SAAS,EAAG,EAAG,EAAG,GAE5B,MAMM,aAAEngB,GAAY,MAAEC,KAAUC,EAAAA,EAAAA,MAkB1B4oB,GAAuBA,CAAC91B,EAAYtL,KACxC,MAAMggB,EAAaha,EAAkB6S,QAErC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK6sC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,OAGpDkqB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/BusC,EAAqBriB,GAErB6gB,EAAyB7gB,GA3BL8D,EAACud,EAAqBrhC,KAC1C,MAAMggB,EAAauD,GAAY1K,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK6sC,EAAAA,MAAAA,IAGlB,MAAMmC,EAAWnC,EAAO,GAAGxvB,KAAcwvB,OAAOtpC,WAAWxD,GAA4CA,EAAKyD,QAAUurC,IAEtHrhB,EAAW,GAAGhgB,KAAWm/B,EAAAA,MAAa,GAAGmC,KAEzC9d,GAAcxD,GAEdqD,EAAmBrD,EAAW,EAgB9B8D,CAAcxY,EAAMxV,MAAOkK,EAAM,EA6B7BigB,GAAWA,CAAC/F,EAAcla,KAC9B,MAAMggB,EAAa7e,EAAM0X,QAGzB,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWka,EAEzB8F,EAAW,GAAGhgB,KAASma,OAEvBgF,EAASa,GAETrJ,EAAaqJ,GAEbE,GAAkBF,EAAW,EAGzBumB,GAAaA,CAACj7B,EAAYtL,KAC9B,MAAMggB,EAAa5Z,EAAQyS,QAE3B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAKwhB,EAAAA,GAAyB,GAAGnE,MAG9CqQ,EAAW,GAAGhgB,KAAWsL,EAAMqN,OAAO5Y,MAEtCumC,EAAWtmB,GAEXqmB,EAAermB,EAAW,EA6GtBomB,GAAgBA,CAACrmC,EAAaC,KAClC,MAAMggB,EAAaijB,GAAWpqB,QAE9B,KAAOmH,EAAWluB,OAASkU,EAAkBlU,QAC3CkuB,EAAW1tB,KAAK8kC,EAAAA,GAGlB,MAAMrI,EAAOhvB,GAAgB,IAAInJ,KAE3B4tC,EAAM,IAAI5tC,KAIhB,GAFAm4B,EAAK0J,SAAS,EAAG,EAAG,EAAG,GAEnB1J,EAAKwN,eAAiBiI,EAAIjI,eAAiBxN,EAAKoV,YAAcK,EAAIL,YAAcpV,EAAKyJ,WAAagM,EAAIhM,UAAW,CACnH,MAAMiM,EAA8C,GAEpDrN,EAAAA,EAAehlC,KAAIsyC,IACjB,MAAMC,EAAWD,EAAM5uC,MAAMiJ,MAAM,KAE7B6lC,EAAYvvC,SAASsvC,EAAS,GAAG5lC,MAAM,KAAK,IAC5C8lC,EAAWxvC,SAASsvC,EAASA,EAAS7yC,OAAS,GAAGiN,MAAM,KAAK,KAE/D6lC,GAAaJ,EAAIM,YAAcD,GAAYL,EAAIM,YAAcF,GAAaJ,EAAIM,YAAcN,EAAIM,YAAcD,IAChHJ,EAAOnyC,KAAKoyC,MAIhB1kB,EAAW,GAAGhgB,KAAWykC,OAEzBzkB,EAAW,GAAGhgB,KAAWo3B,EAAAA,EAG3B8L,GAAcljB,EAAW,EAGrBuhB,GAA4BvhC,IAChC,GAAIgG,EAAkBlU,OAAS,EAAG,CAChC,MAAM8xB,EAAmB5d,EAAkB6S,QAE3C,QAA4C,IAAjC+K,EAAiB,GAAG5jB,KAC7B,OAAOm/B,EAAO,GAAGxvB,KAAcwvB,OAAO/pC,MAAM/C,GAA2CA,EAAKyD,QAAU8tB,EAAiB,GAAG5jB,OAI9H,MAAO,CAAED,MAAO,GAAIjK,MAAO,GAAI,EAG3BoqB,GAAqBF,IACzB,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,GAAoD,KAAhDurB,EAAW,GAAGvrB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CACtD6B,GAAU,EAAO,MAIrBlF,EAAqBkF,EAAQ,EAGzByO,GAAoBA,CAACiO,EAA2B4L,KACpD,IAAI7wC,GAAS,EAEb,MAAMwU,EAAQywB,EAAgB5mC,OAASwyC,EAAgBxyC,OAAS4mC,EAAgB5mC,OAASwyC,EAAgBxyC,OAEzG,IAAK,IAAI2C,EAAI,EAAGA,EAAIwT,EAAOxT,IAAK,CAC9B,MAAMyvC,OAA+CtmC,IAA5B86B,EAAgB,GAAGjkC,MAAkD,KAA5BikC,EAAgB,GAAGjkC,KAE/Eu0B,EAAY,IAAIpyB,KAAK0tC,EAAgB,GAAG7vC,MAExC8vC,OAA+C3mC,IAA5B0mC,EAAgB,GAAG7vC,MAAkD,KAA5B6vC,EAAgB,GAAG7vC,MAAeu0B,EAAUuT,eAAiB,MAAQvT,EAAUmb,WAAa,IAAMnb,EAAUwP,UAAY,GAE1L,GAAI0L,GAAoBK,EAAkB,CACxC9wC,GAAS,EAAO,OAIpBg0B,EAAoBh0B,EAAO,EAGvB0sB,GAAuBA,CAACC,EAA8BC,EAA4B2U,KACtF,IAAIvhC,GAAS,EAEb,IAAK,IAAIgB,EAAI,EAAGA,EAAI2rB,EAAmBtuB,SAAU2C,EAC/ChB,EAASA,GAAyC,KAA/B2sB,EAAmB,GAAG3rB,MAA4C,KAA7B4rB,EAAiB,GAAG5rB,MAA0C,KAA3BugC,EAAe,GAAGvgC,KAG/GmqB,EAAuBnrB,EAAO,EAS1B+6B,GAAkBA,CAACtU,EAAcla,KACrC,MAAM+sB,EAAcvqB,GAAQqW,QAE5B,UAA0C,IAA5BkU,EAAY,GAAG/sB,MAC3B+sB,EAAYz6B,KAAK,IAGnBy6B,EAAY,GAAG/sB,KAAWka,EAE1B6S,EAAY,GAAG/sB,KAASma,OAExB6oB,GAAWjW,GAEX3E,EAAgB2E,EAAY,EAGxBzM,GAAqBA,IACrBX,GACKd,EAAS0B,YAAYpG,QAAsC,KAA5B0E,EAAS2B,eAAwB,KAAO3B,EAAS2B,eAAerG,OAAS,KAAqC,KAA9B0E,EAAS4B,iBAA0B,KAAO5B,EAAS4B,iBAAiBtG,OAAS,KAAmC,KAA5B0E,EAAS6B,eAAwB,KAAO7B,EAAS6B,eAAevG,OAAS,KAAkC,KAA3B0E,EAAS6a,cAAuB,KAAO7a,EAAS6a,cAAcvf,OAAS,IAG5V,GAGHwf,GAAoBA,KACxB,GAAIha,GAAW,CACb,MAEMrS,EAFSzI,EAAU,GAAG8K,KAAc9K,UAElBzP,MAAMwkC,GAA4CA,EAAM9jC,MAAMw6B,gBAAkBzR,EAASgb,iBAAiBvJ,gBAElI,OAAOhjB,EAAWA,EAASxX,MAAQ,GAGrC,MAAO,EAAE,EAGL2kB,GAAWA,KACfjE,EAAO,GAEP,MAAM8N,EAAmBf,GAAY1K,QAC/BmsB,EAAyBh/B,EAAkB6S,QAC3C6f,EAAkBxyB,EAAW2S,QAC7BkH,EAAa5e,EAAM0X,QACnB2tB,EAAepgC,EAAQyS,QACvByrB,EAAkBr/B,EAAW4T,QAC7BusB,EAAkBhgC,EAAWyT,QAC7BuH,EAAqBld,GAAc2V,QACnCiI,EAAmB1d,GAAYyV,QAC/BwH,EAAmB/c,GAAYuV,QAC/Bmc,EAAiBnC,GAAaha,QAC9BysB,EAAe9iC,GAAQqW,QAE7ByL,EAAiBhyB,KAAK6sC,EAAAA,MAAAA,IACtB6F,EAAuB1yC,KAAK6sC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,OAC9D4iC,EAAgBpmC,KAAKgmC,GAAUK,gBAC/B6N,EAAal0C,KAAKwhB,EAAAA,GAAyB,GAAGnE,MAC9CoQ,EAAWztB,KAAK,IAChBgyC,EAAgBhyC,KAAK,IACrB8yC,EAAgB9yC,KAAK,IACrBgzC,EAAahzC,KAAK,IAEdqtB,IACFS,EAAmB9tB,KAAKguB,MACxBQ,EAAiBxuB,KAAKusB,EAASmC,4BAC/BX,EAAiB/tB,KAAKusB,EAASoC,qBAC/B+T,EAAe1iC,KAAKqnC,QAEpBvZ,EAAmB9tB,KAAK,IACxBwuB,EAAiBxuB,KAAK,IACtB+tB,EAAiB/tB,KAAK,IACtB0iC,EAAe1iC,KAAKuS,EAAU,GAAG8K,KAAc9K,UAAU,GAAG/O,QAG9D0tB,GAAcc,GACd+d,EAAqB2C,GACrB3M,EAAcK,GACdvZ,EAASY,GACTumB,EAAWE,GACX7D,EAAc2B,GACd1B,EAAcwC,GACdhmB,GAAiBgB,GACjBf,GAAeyB,GACfxB,GAAee,GACf0iB,GAAa/N,GACbgO,GAAWsC,GAEXc,GAAc,IAAIxvC,KAAQouC,EAAuBlzC,OAAS,GAE1DuxB,EAAmBiB,GACnBuc,EAAyBmE,GACzB5M,EAAkBM,GAClB/hB,EAAaoJ,GACbsmB,EAAeG,GACfhf,EAAkB8c,GAClB5N,EAAkB0O,GAClB5mB,EAAiB4B,GACjB3B,EAAmBqC,GACnBpC,EAAmB2B,GACnBkS,EAAgByC,GAChB5M,EAAgBkd,GAEhBxuB,GAAqB,GAErB2T,GAAkBiO,EAAiB4L,GACnCnkB,GAAqBC,EAAoBC,EAAkB2U,EAAe,EAGtEra,GAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,GAAiB/a,SAInByW,EAAUzW,GACV+a,GAAiB/a,QAGnByW,EAAUzW,GACV+a,GAAiB/a,IAIf+a,GAAoB/a,IACxB,MAAMskB,EAAmBf,GAAY1K,QAC/BmsB,EAAyBh/B,EAAkB6S,QAC3C6f,EAAkBxyB,EAAW2S,QAC7BkH,EAAa5e,EAAM0X,QACnB2tB,EAAepgC,EAAQyS,QACvByrB,EAAkBr/B,EAAW4T,QAC7BusB,EAAkBhgC,EAAWyT,QAC7BuH,EAAqBld,GAAc2V,QACnCiI,EAAmB1d,GAAYyV,QAC/BwH,EAAmB/c,GAAYuV,QAC/Bmc,EAAiBnC,GAAaha,QAC9BysB,EAAe9iC,GAAQqW,aAEe,IAAjCyL,EAAiB,GAAGtkB,OACzBskB,EAAiBxyB,OAAS,EAC5BwyB,EAAiBxJ,OAAO9a,EAAO,GAE/BskB,EAAiB,GAAK6a,EAAAA,MAAAA,GAGxB3b,GAAcc,GAEdjB,EAAmBiB,SAG6B,IAAvC0gB,EAAuB,GAAGhlC,OAC/BglC,EAAuBlzC,OAAS,EAClCkzC,EAAuBlqB,OAAO9a,EAAO,GAErCglC,EAAuB,GAAK7F,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,MAGhEusC,EAAqB2C,GAErBnE,EAAyBmE,SAGgB,IAAhCtM,EAAgB,GAAG14B,OACxB04B,EAAgB5mC,OAAS,EAC3B4mC,EAAgB5d,OAAO9a,EAAO,GAE9B04B,EAAgB,GAAKJ,GAAU9gC,cAGjC6gC,EAAcK,GAEdN,EAAkBM,SAGkB,IAA3B3Y,EAAW,GAAG/f,OACnB+f,EAAWjuB,OAAS,EACtBiuB,EAAWjF,OAAO9a,EAAO,GAEzB+f,EAAW,GAAK,GAGlBZ,EAASY,GAETpJ,EAAaoJ,SAGyB,IAA7BymB,EAAa,GAAGxmC,OACrBwmC,EAAa10C,OAAS,EACxB00C,EAAa1rB,OAAO9a,EAAO,GAE3BwmC,EAAa,GAAK1yB,EAAAA,GAAyB,GAAGnE,KAGhD22B,EAAWE,GAEXH,EAAeG,SAG0B,IAAhClC,EAAgB,GAAGtkC,OACxBskC,EAAgBxyC,OAAS,EAC3BwyC,EAAgBxpB,OAAO9a,EAAO,GAE9BskC,EAAgB,GAAK,GAGvB3B,EAAc2B,GAEd9c,EAAkB8c,SAGuB,IAAhCc,EAAgB,GAAGplC,OACxBolC,EAAgBtzC,OAAS,EAC3BszC,EAAgBtqB,OAAO9a,EAAO,GAE9BolC,EAAgB,GAAK,GAGvBxC,EAAcwC,GAEd1O,EAAkB0O,SAG0B,IAAnChlB,EAAmB,GAAGpgB,OAC3BogB,EAAmBtuB,OAAS,EAC9BsuB,EAAmBtF,OAAO9a,EAAO,GAEjCogB,EAAmB,GAAK,GAG1BhB,GAAiBgB,GAEjBxB,EAAuBwB,SAGmB,IAAjCU,EAAiB,GAAG9gB,OACzB8gB,EAAiBhvB,OAAS,EAC5BgvB,EAAiBhG,OAAO9a,EAAO,GAE/B8gB,EAAiB,GAAK,GAGxBzB,GAAeyB,GAEfrC,EAAmBqC,SAGuB,IAAjCT,EAAiB,GAAGrgB,OACzBqgB,EAAiBvuB,OAAS,EAC5BuuB,EAAiBvF,OAAO9a,EAAO,GAE/BqgB,EAAiB,GAAK,GAGxBf,GAAee,GAEf3B,EAAmB2B,SAGqB,IAA/B2U,EAAe,GAAGh1B,OACvBg1B,EAAeljC,OAAS,EAC1BkjC,EAAela,OAAO9a,EAAO,GAE7Bg1B,EAAe,GAAKnwB,EAAU,GAAG8K,KAAc9K,UAAU,GAAG/O,MAG9DitC,GAAa/N,GAEbzC,EAAgByC,SAGoB,IAA3BiO,GAAW,GAAGjjC,OACnBijC,GAAWnxC,OAAS,EACtBmxC,GAAWnoB,OAAO9a,EAAO,GAEzBomC,GAAc,IAAIxvC,KAAQ,SAIU,IAA7B0uC,EAAa,GAAGtlC,OACrBslC,EAAaxzC,OAAS,EACxBwzC,EAAaxqB,OAAO9a,EAAO,GAE3BslC,EAAa,GAAK,GAGpBtC,GAAW3iB,GAEX+H,EAAgB/H,IAGlBH,GAAkBH,GAClB0K,GAAkBiO,EAAiB4L,GACnCnkB,GAAqBC,EAAoBC,EAAkB2U,EAAe,GAG5E1gB,EAAAA,EAAAA,YAAU,KACR,MAAMgQ,EAA6B,GAC7BihB,EAAkC,GAClC7M,EAA4B,GAC5B3Y,EAAuB,GACvBymB,EAAyB,GACzBlC,EAA4B,GAC5Bc,EAA4B,GAC5BhlB,EAA+B,GAC/BU,EAA6B,GAC7BT,EAA6B,GAC7B2U,EAA2B,GAC3BsQ,EAAyB,GAE/B,GAAItuB,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAMqtC,EAA2D,KAA1C9qB,EAAU,GAAGviB,KAAuB,iBAAWuiB,EAAU,GAAGviB,KAAuB,iBAAI0qC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,MAC1IkK,EAAQm/B,EAAO,GAAGxvB,KAAcwvB,OAAOtpC,WAAWxD,GAA4CA,EAAKyD,QAAUgsC,IAE7G2E,EAAyC,KAAhCzvB,EAAU,GAAGviB,KAAa,OAAWuiB,EAAU,GAAGviB,KAAa,OAAIqf,EAAAA,GAAyB,GAAGnE,KAExGqZ,EAA+C,KAAnChS,EAAU,GAAGviB,KAAgB,UAAW,IAAImC,KAAKogB,EAAU,GAAGviB,KAAgB,WAAK,IAAImC,KAEzG0tB,EAAiBhyB,KAAK6sC,EAAAA,MAAa,GAAGn/B,MACtCulC,EAAsBjzC,KAAKwvC,GAC3BpJ,EAAgBpmC,KAAK0kB,EAAU,GAAGviB,KAAgB,UAAIuiB,EAAU,GAAGviB,KAAgB,UAAI6jC,GAAU9gC,eACjGuoB,EAAWztB,KAAK0kB,EAAU,GAAGviB,KAAY,MAAE,IAC3C+xC,EAAal0C,KAAKm0C,GAClBnC,EAAgBhyC,KAAK02B,EAAUxxB,eAC/B4tC,EAAgB9yC,KAAK0kB,EAAU,GAAGviB,KAAgB,WAClD2rB,EAAmB9tB,KAAK0kB,EAAU,GAAGviB,KAAmB,cACxDqsB,EAAiBxuB,KAAK0kB,EAAU,GAAGviB,KAAiB,YACpD4rB,EAAiB/tB,KAAK0kB,EAAU,GAAGviB,KAAiB,YACpDugC,EAAe1iC,KAAK0kB,EAAU,GAAGviB,KAAc,SAC/C6wC,EAAahzC,KAAK0kB,EAAU,GAAGviB,KAAc,SAE7C2xC,GAAcpd,EAAWv0B,GAG3B+uB,GAAcc,GACd+d,EAAqBkD,GACrBpmB,EAASY,GACTumB,EAAWE,GACX7D,EAAc2B,GACd1B,EAAcwC,GACdhmB,GAAiBgB,GACjBf,GAAeyB,GACfxB,GAAee,GACf0iB,GAAa/N,GACbgO,GAAWsC,GAEXjiB,EAAmBiB,GACnBuc,EAAyB0E,GACzB5uB,EAAaoJ,GACbsmB,EAAeG,GACfhf,EAAkB8c,GAClB5N,EAAkB0O,GAClB5mB,EAAiB4B,GACjB3B,EAAmBqC,GACnBpC,EAAmB2B,GACnBkS,EAAgByC,GAChB5M,EAAgBkd,GAEhBplB,GAAkBH,GAClBI,GAAqBC,EAAoBC,EAAkB2U,QAEvDrV,KACFS,EAAmB9tB,KAAKguB,MACxBQ,EAAiBxuB,KAAKusB,EAASmC,4BAC/BX,EAAiB/tB,KAAKusB,EAASoC,qBAC/B+T,EAAe1iC,KAAKqnC,MAEpBva,GAAiBgB,GACjBf,GAAeyB,GACfxB,GAAee,GACf0iB,GAAa/N,GAEbxW,EAAiB4B,GACjB3B,EAAmBqC,GACnBpC,EAAmB2B,GACnBkS,EAAgByC,GAEhB7U,GAAqBC,EAAoBC,EAAkB2U,IAG7D0D,EAAgBpmC,KAAKgmC,GAAU9gC,eAC/BgvC,EAAal0C,KAAKwhB,EAAAA,GAAyB,GAAGnE,MAE9Cy2B,GAAc,IAAIxvC,KAAQ,GAE1BiqC,EAAyB76B,GACzBqgC,EAAeG,GAGjBnO,EAAcK,GAEdN,EAAkBM,GAElBjO,GAAkBiO,EAAiB4L,EAAgB,GAClD,CAACttB,IAEJ,MAAM4hB,GAA0Bhd,GAE5Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWipB,kBACtCvjC,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOwhC,GAAyB3lB,GAChCgJ,QAASua,EAAO,GAAGxvB,KAAcwvB,OACjCljB,SAAU3Q,GAAS81B,GAAqB91B,EAAOsQ,GAC/Cle,UAAW,SACXo4B,cAAc,KAIlBr4B,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWugB,WACtC76B,IAAAA,cAACqxB,EAAAA,EAAU,CACT7S,SAAW8S,GAjrBC8J,EAAC94B,EAAaC,KAClC,MAAMggB,EAAa9Z,EAAW2S,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAKgmC,GAAU9gC,eAG5BuI,EAAM04B,SAAS,EAAG,EAAG,EAAG,GAExB,MAAM1J,EAAOhvB,EAAQA,EAAMvI,cAAgB8gC,GAAU9gC,cAErDwoB,EAAW,GAAGhgB,KAAW+uB,EAEzBsJ,EAAcrY,GAEdoY,EAAkBpY,GAElByK,GAAkBzK,EAAY/a,EAAW,EAgqBP4zB,CAAc9J,EAAMnT,GAC9C7b,MAAgC,KAAzBmG,EAAW,GAAG0V,MAAiB1V,EAAW,GAAG0V,KAAO2B,SAAS,QAAU,KAAO,IAAI3mB,KAAKsP,EAAW,GAAG0V,MAC5GqT,OAAQ,UACRiI,QAASoB,GACT56B,UAAW,aACXyxB,eAAgB,KAChBC,iBAAkB,KAClBC,gBAAiB,WAOrB4H,GAAmBrb,GAErBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWmC,MACtCzc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOoB,EAAM,GAAGya,KAAM,YACZ,SACVS,KAAK,aACLJ,SAAU3Q,GAtrBK6V,EAAC7V,EAAYtL,KACpC,IAAImd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAElF6C,GAAS3U,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAmrBpCmhB,CAAiB7V,EAAOsQ,GAC3Ca,UAAWnR,IAAiC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBACxD9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7ES,aAAa,WA4CjBooB,GAAuBrqB,IAC3B,QAA6Bhe,IAAzBqlC,GAAW,GAAGrnB,WAAiDhe,IAAzBqH,EAAW,GAAG2W,KACtD,OAAO,KAGT,MAAMzmB,EAAQ8tC,GAAW,GAAGrnB,KAAOxmB,MAAM4wC,GAAqBA,EAAKlwC,QAAUsP,EAAW,GAAGwW,OAErFmqB,EAAc5wC,GAAgB,CAAE4K,MAAO,GAAIjK,MAAO,eAExD,OACE2H,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWiR,WACtCvrB,IAAAA,cAACqxB,EAAAA,EAAU,CACT7S,SAAW8S,GA7sBCC,EAACjvB,EAAaC,KAClC,MAAMggB,EAAa/a,EAAW4T,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB,MAAMy8B,EAAOhvB,EAAQA,EAAMvI,cAAgB,GAE3CwoB,EAAW,GAAGhgB,KAAW+uB,EAEzBqX,GAAcrmC,EAAOC,GAErB2iC,EAAc3iB,GAEdwH,EAAkBxH,GAElByK,GAAkBvkB,EAAY8Z,EAAW,EA4rBPgP,CAAcD,EAAMnT,GAC9C7b,MAAgC,KAAzBkF,EAAW,GAAG2W,MAAiB3W,EAAW,GAAG2W,KAAO2B,SAAS,QAAU,KAAO,IAAI3mB,KAAKqO,EAAW,GAAG2W,MAC5GqT,OAAQ,UACRC,QAAS,IAAIt4B,KACb8G,UAAW,aACXyxB,eAAgB,KAChBC,iBAAkB,KAClBC,gBAAiB,UAIrB5xB,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW4e,WACtCl5B,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOgmC,EACPnhB,QAASqe,GAAW,GAAGrnB,KACvBK,SAAW3Q,GAzsBC+rB,EAAC/rB,EAAYtL,KACjC,MAAMggB,EAAa5a,EAAWyT,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/B8sC,EAAc5iB,GAEd0W,EAAkB1W,EAAW,EA8rBAqX,CAAc/rB,EAAOsQ,GAC1Cle,UAAW,SACXo4B,cAAc,KAGd,EAIJxU,GAAsB1F,IAC1B,MAAM8Z,EAAS7wB,EAAU,GAAG8K,KAAc9K,UAE1C,OACEpH,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,KAAGC,UAAU,iBAAiBqa,GAAWwJ,eACzC9jB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWyJ,iBACtC/jB,IAAAA,cAAA,qBACY,SACVC,UAAU,eACVye,UAAU,OACVE,KAAK,aACLJ,SAAW3Q,GAjtBImW,EAAC1hB,EAAeC,KACvC,MAAMggB,EAAa9c,GAAc2V,QAEjC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBigB,EAAW,GAAGhgB,KAASma,OAEvBiF,GAAiBY,GAEjBxB,EAAiBwB,GAEjBG,GAAqBH,EAAY1c,GAAauvB,GAAa,EAksB9BpR,CAAiBnW,EAAMqN,OAAO5Y,MAAO6b,GAC1Da,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1DW,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7Erd,MAAOmD,GAAc,GAAG0Y,KACxBG,KAAK,OACL8B,aAAa,SAGfpgB,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW2J,aACtCjkB,IAAAA,cAAA,qBACY,SACVC,UAAU,eACVye,UAAU,OACVE,KAAK,aACLJ,SAAW3Q,GA7sBEqW,EAAC5hB,EAAeC,KACrC,MAAMggB,EAAa5c,GAAYyV,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBigB,EAAW,GAAGhgB,KAASma,OAEvBkF,GAAeW,GAEfvB,EAAmBuB,EAAW,EAgsBD2B,CAAerW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1DW,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7Erd,MAAOqD,GAAY,GAAGwY,KACtBG,KAAK,OACL8B,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,iBACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW6J,mBACtCnkB,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOuD,GAAY,GAAGsY,KAAM,YAClB,SACVS,KAAK,aACLJ,SAAW3Q,GA/sBAuW,EAAC9hB,EAAeC,KACrC,MAAMggB,EAAa1c,GAAYuV,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGfyN,EAAMjO,QAAQ,EACfkuB,EAAW,GAAGhgB,KAAWD,EAEzB+hB,EAAAA,GAAMC,QAAQjO,EAAAA,GAAkC,GAAGnE,MAGrDqQ,EAAW,GAAGhgB,KAASma,OAEvBmF,GAAeU,GAEftB,EAAmBsB,GAEnBG,GAAqBjd,GAAe8c,EAAY6S,GAAa,EA4rB9BhR,CAAevW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVmgB,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWiK,gBACtCvkB,IAAAA,cAACgnB,EAAAA,GAAM,CACLmR,YAAa/C,GAAa,GAAGjX,KAC7BgJ,QAAS8Q,EACTzZ,SAAW3Q,GArsBHovB,EAACpvB,EAAYtL,KAC/B,MAAMggB,EAAa6S,GAAaha,QAEhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/BitC,GAAa/iB,GAEbuS,EAAgBvS,GAEhBG,GAAqBjd,GAAeI,GAAa0c,EAAW,EAwrB7B0a,CAAYpvB,EAAOsQ,GACxCle,UAAW,SACXo4B,cAAc,MAIhB,EAIJ3E,GAAiBvV,GAEnBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWvV,SACtC/E,IAAAA,cAAA,YACE0e,UAAU,OACVpc,MAAOyC,GAAQ,GAAGoZ,KAAM,YACd,SACVS,KAAK,aACLJ,SAAW3Q,GAhnBS8lB,EAAC9lB,EAAYtL,KACzC,MAAMmd,EAAYzQ,EAAO2kB,0BAA4B3kB,EAAO2kB,0BAA4B,IAExF7C,GAAgBljB,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EA6mBzCoxB,CAAsB9lB,EAAOsQ,GAClDle,UAAU,eACVyf,UAAWzQ,EAAO2kB,0BAA4B3kB,EAAO2kB,0BAA4B,QAO3F,OACE5zB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,IAj6BFvb,QAi6B0B6gB,QAASrF,GAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,WAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BACZk7B,GAAuBhd,GACvBqb,GAAgBrb,GAhLdA,SACQ,IAAtBxV,EAAQ,GAAGwV,KACb,KAIPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,UACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW0uB,QACtChpC,IAAAA,cAAA,OAAKC,UAAU,kBACbD,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAAyB,GAAGnE,KACnCqM,QAAS5V,EAAQ,GAAGwV,OAAWnY,OAAOqQ,EAAAA,GAAyB,GAAGnE,MAAc,eAClEvJ,EAAQ,GAAGwV,OAAWnY,OAAOqQ,EAAAA,GAAyB,GAAGnE,MACvEsM,SAAU3Q,GAASi7B,GAAWj7B,EAAOsQ,KAEtC9H,EAAAA,GAAyB,GAAGnE,MAG/BlS,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA2B,GAAGnE,KACrCqM,QAAS5V,EAAQ,GAAGwV,OAAWnY,OAAOqQ,EAAAA,GAA2B,GAAGnE,MAAc,eACpEvJ,EAAQ,GAAGwV,OAAWnY,OAAOqQ,EAAAA,GAA2B,GAAGnE,MACzEsM,SAAU3Q,GAASi7B,GAAWj7B,EAAOsQ,KAEvC9H,EAAAA,GAA2B,GAAGnE,SAoJjB+2B,CAAkB9qB,GAClBqqB,GAAoBrqB,GACpB0F,GAAmB1F,GACnByM,GAAoB8I,GAAcvV,IAKgB,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAG6lB,GAAY,GAAG3H,MAA+B,QAAzBqC,EAAG1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,SAK5F,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,uMC//BV,MAi1BA,EAj1B6DJ,IAKmD,IALlD,WAC5D+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,mBACxD4M,EAAkB,yBAAEwd,EAAwB,aAAElqB,EAAY,oBAAEgwB,EAAmB,kBAAEnf,EAAiB,kBAAEkP,EAAiB,iBACrHlY,EAAgB,mBAAEC,EAAkB,mBAAEC,EAAkB,gBAAE6T,EAAe,qBACzEzb,EAAoB,oBAAE2Q,EAAmB,uBAAE7I,EAAsB,UACjE5H,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEwtB,EAAQ,SAAExiB,EAAQ,WAAEyT,EAAU,2BAAEmH,GAA4B1H,EAC1G,MAAOyxB,EAAkBC,IAAuBp3B,EAAAA,EAAAA,UAAS,CAACs1B,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,SACrF8hB,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,MAC3C+8B,EAAaC,IAAkBh9B,EAAAA,EAAAA,UAAS,CAAC,MACzCmf,EAAWC,IAAgBpf,EAAAA,EAAAA,UAAS,CAAC,MACrC8sB,EAAWC,IAAgB/sB,EAAAA,EAAAA,UAAS,CAAC,MACrCmvB,EAAcC,IAAmBpvB,EAAAA,EAAAA,UAAS,CAAC,MAC3CqvB,EAAYC,IAAiBtvB,EAAAA,EAAAA,UAAS,CAAC,MACvCuvB,EAAYC,KAAiBxvB,EAAAA,EAAAA,UAAS,CAAC,MACvCyvB,GAAaC,KAAc1vB,EAAAA,EAAAA,UAAS,CAAC,MAErCo5B,GAAYC,KAAiBr5B,EAAAA,EAAAA,UAA+C,KAC5E0Z,GAAaC,KAAiB3Z,EAAAA,EAAAA,UAAS,CAAC,IAEzCkO,GAAajE,EAAAA,GAAmC,GAAGnE,KACnDgQ,MAAad,IAAYA,EAASe,gBAAmD,KAAlCf,EAASe,cAAczF,QAQ1E,aAAE7B,GAAY,MAAEC,KAAUC,EAAAA,EAAAA,MAkB1B4oB,GAAuBA,CAAC91B,EAAYtL,KACxC,MAAMggB,EAAaghB,EAAiBnoB,QAEpC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK6sC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,OAGpDkqB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/BmrC,EAAoBjhB,GAEpB6gB,EAAyB7gB,GA3BL8D,EAACud,EAAqBrhC,KAC1C,MAAMggB,EAAauD,GAAY1K,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK6sC,EAAAA,MAAAA,IAGlB,MAAMmC,EAAWnC,EAAO,GAAGxvB,KAAcwvB,OAAOtpC,WAAWxD,GAA4CA,EAAKyD,QAAUurC,IAEtHrhB,EAAW,GAAGhgB,KAAWm/B,EAAAA,MAAa,GAAGmC,KAEzC9d,GAAcxD,GAEdqD,EAAmBrD,EAAW,EAgB9B8D,CAAcxY,EAAMxV,MAAOkK,EAAM,EAS7Bia,GAAwBA,CAACC,EAAcla,KAC3C,MAAMggB,EAAapI,EAAaiB,QAGhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWka,EAEzB8F,EAAW,GAAGhgB,KAASma,OAEvBtC,EAAgBmI,GAEhBrJ,EAAaqJ,GAEbE,GAAkBF,EAAW,EAmBzBomB,GAAgBA,CAACrmC,EAAaC,KAClC,MAAMggB,EAAaijB,GAAWpqB,QAE9B,KAAOmH,EAAWluB,OAASkvC,EAAiBlvC,QAC1CkuB,EAAW1tB,KAAK8kC,EAAAA,GAGlB,MAAMrI,EAAOhvB,GAAgB,IAAInJ,KAE3B4tC,EAAM,IAAI5tC,KAIhB,GAFAm4B,EAAK0J,SAAS,EAAG,EAAG,EAAG,GAEnB1J,EAAKwN,eAAiBiI,EAAIjI,eAAiBxN,EAAKoV,YAAcK,EAAIL,YAAcpV,EAAKyJ,WAAagM,EAAIhM,UAAW,CACnH,MAAMiM,EAA8C,GAEpDrN,EAAAA,EAAehlC,KAAIsyC,IACjB,MAAMC,EAAWD,EAAM5uC,MAAMiJ,MAAM,KAE7B6lC,EAAYvvC,SAASsvC,EAAS,GAAG5lC,MAAM,KAAK,IAC5C8lC,EAAWxvC,SAASsvC,EAASA,EAAS7yC,OAAS,GAAGiN,MAAM,KAAK,KAE/D6lC,GAAaJ,EAAIM,YAAcD,GAAYL,EAAIM,YAAcF,GAAaJ,EAAIM,YAAcN,EAAIM,YAAcD,IAChHJ,EAAOnyC,KAAKoyC,MAIhB1kB,EAAW,GAAGhgB,KAAWykC,OAEzBzkB,EAAW,GAAGhgB,KAAWo3B,EAAAA,EAG3B8L,GAAcljB,EAAW,EAyGrBuhB,GAA4BvhC,IAChC,GAAIghC,EAAiBlvC,OAAS,EAAG,CAC/B,MAAM8xB,EAAmBod,EAAiBnoB,QAE1C,QAA4C,IAAjC+K,EAAiB,GAAG5jB,KAC7B,OAAOm/B,EAAO,GAAGxvB,KAAcwvB,OAAO/pC,MAAM/C,GAA2CA,EAAKyD,QAAU8tB,EAAiB,GAAG5jB,OAI9H,MAAO,CAAED,MAAO,GAAIjK,MAAO,GAAI,EAG3BoqB,GAAqBF,IACzB,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,GAAoD,KAAhDurB,EAAW,GAAGvrB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CACtD6B,GAAU,EAAO,MAIrBlF,EAAqBkF,EAAQ,EAGzByO,GAAoBA,CAACqc,EAA4B/P,KACrD,IAAItjC,GAAS,EAEb,IAAK,IAAIgB,EAAI,EAAGA,EAAIqyC,EAAiBh1C,SAAU2C,EAC7ChB,EAASA,IAAwC,KAA7BqzC,EAAiB,GAAGryC,OAAgBqyC,EAAiB,GAAGryC,KAAK8oB,SAAS,WAAwC,KAA3BwZ,EAAe,GAAGtiC,OAAgBsiC,EAAe,GAAGtiC,KAAK8oB,SAAS,SAG3KkK,EAAoBh0B,EAAO,EAGvB0sB,GAAuBA,CAACqZ,EAAyBC,KACrD,IAAIhmC,GAAS,EAEb,IAAK,IAAIgB,EAAI,EAAGA,EAAI+kC,EAAc1nC,SAAU2C,EAC1ChB,EAASA,GAAoC,KAA1B+lC,EAAc,GAAG/kC,MAA2C,KAA5BglC,EAAgB,GAAGhlC,KAGxEmqB,EAAuBnrB,EAAO,EAuB1BgnB,GAAWA,KACfjE,EAAO,GAEP,MAAMoP,EAAkBrC,GAAY1K,QAC9B4oB,EAAwBT,EAAiBnoB,QACzCD,EAAoBhB,EAAaiB,QACjCkuB,EAAoBH,EAAY/tB,QAChCge,EAAiB7N,EAAUnQ,QAC3Bie,EAAiBH,EAAU9d,QAC3BihB,EAAoBd,EAAangB,QACjCkhB,EAAkBb,EAAWrgB,QAC7B4gB,EAAkBL,EAAWvgB,QAC7BmhB,EAAeV,GAAYzgB,QAEjC+M,EAAgBtzB,KAAK6sC,EAAAA,MAAAA,IACrBsC,EAAsBnvC,KAAK6sC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,OAC7D8iB,EAAkBtmB,KAAK,IACvBy0C,EAAkBz0C,KAAK,IACvBukC,EAAevkC,KAAK,IACpBwkC,EAAexkC,KAAK,IAEhBqtB,IACFma,EAAkBxnC,KAzChBqtB,GACKd,EAAS0B,YAAYpG,QAAsC,KAA5B0E,EAAS2B,eAAwB,KAAO3B,EAAS2B,eAAerG,OAAS,KAAqC,KAA9B0E,EAAS4B,iBAA0B,KAAO5B,EAAS4B,iBAAiBtG,OAAS,KAAmC,KAA5B0E,EAAS6B,eAAwB,KAAO7B,EAAS6B,eAAevG,OAAS,KAAkC,KAA3B0E,EAAS6a,cAAuB,KAAO7a,EAAS6a,cAAcvf,OAAS,IAG5V,IAsCL4f,EAAgBznC,KAAKusB,EAASmC,4BAC9ByY,EAAgBnnC,KAAKusB,EAASoC,qBAC9B+Y,EAAa1nC,KArCSqnC,MACxB,GAAIha,GAAW,CACb,MAEMrS,EAFSzI,EAAU,GAAG8K,KAAc9K,UAElBzP,MAAMwkC,GAA4CA,EAAM9jC,MAAMw6B,gBAAkBzR,EAASgb,iBAAiBvJ,gBAElI,OAAOhjB,EAAWA,EAASxX,MAAQ,GAGrC,MAAO,EAAE,EA4BW6jC,MAElBG,EAAkBxnC,KAAK,IACvBynC,EAAgBznC,KAAK,IACrBmnC,EAAgBnnC,KAAK,IACrB0nC,EAAa1nC,KAAKuS,EAAU,GAAG8K,KAAc9K,UAAU,GAAG/O,QAG5D0tB,GAAcoC,GACdqb,EAAoBQ,GACpB5pB,EAAgBe,GAChBiuB,EAAeE,GACf9d,EAAa4N,GACbD,EAAaE,GACbmC,EAAgBa,GAChBX,EAAcY,GACdV,GAAcI,GACdF,GAAWS,GAEXoM,GAAc,IAAIxvC,KAAQ6qC,EAAsB3vC,OAAS,GAEzDuxB,EAAmBuC,GACnBib,EAAyBY,GACzB9qB,EAAaiC,GACb+tB,EAAoBI,GACpBvf,EAAkBqP,GAClBH,EAAkBI,GAClBtY,EAAiBsb,GACjBrb,EAAmBsb,GACnBrb,EAAmB+a,GACnBlH,EAAgByH,GAEhBljB,GAAqB,GACrB2Q,GAAoB,GAEpBtH,GAAqB2Z,EAAmBL,EAAgB,EAGpD9e,GAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,GAAiB/a,SAInByW,EAAUzW,GACV+a,GAAiB/a,QAGnByW,EAAUzW,GACV+a,GAAiB/a,IAIf+a,GAAoB/a,IACxB,MAAM4lB,EAAkBrC,GAAY1K,QAC9B4oB,EAAwBT,EAAiBnoB,QACzCD,EAAoBhB,EAAaiB,QACjCkuB,EAAoBH,EAAY/tB,QAChCge,EAAiB7N,EAAUnQ,QAC3Bie,EAAiBH,EAAU9d,QAC3BihB,EAAoBd,EAAangB,QACjCkhB,EAAkBb,EAAWrgB,QAC7B4gB,EAAkBL,EAAWvgB,QAC7BmhB,EAAeV,GAAYzgB,aAEU,IAAhC+M,EAAgB,GAAG5lB,OACxB4lB,EAAgB9zB,OAAS,EAC3B8zB,EAAgB9K,OAAO9a,EAAO,GAE9B4lB,EAAgB,GAAKuZ,EAAAA,MAAAA,GAGvB3b,GAAcoC,GAEdvC,EAAmBuC,SAG4B,IAAtC6b,EAAsB,GAAGzhC,OAC9ByhC,EAAsB3vC,OAAS,EACjC2vC,EAAsB3mB,OAAO9a,EAAO,GAEpCyhC,EAAsB,GAAKtC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,MAG/DmrC,EAAoBQ,GAEpBZ,EAAyBY,SAGkB,IAAlC7oB,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,GAGzBf,EAAgBe,GAEhBjC,EAAaiC,GAEbsH,GAAkBtH,SAGyB,IAAlCmuB,EAAkB,GAAG/mC,OAC1B+mC,EAAkBj1C,OAAS,EAC7Bi1C,EAAkBjsB,OAAO9a,EAAO,GAEhC+mC,EAAkB,GAAK,GAGzBF,EAAeE,GAEfJ,EAAoBI,SAGoB,IAA/BlQ,EAAe,GAAG72B,OACvB62B,EAAe/kC,OAAS,EAC1B+kC,EAAe/b,OAAO9a,EAAO,GAE7B62B,EAAe,GAAK,GAGtB5N,EAAa4N,GAEbrP,EAAkBqP,SAGsB,IAA/BC,EAAe,GAAG92B,OACvB82B,EAAehlC,OAAS,EAC1BglC,EAAehc,OAAO9a,EAAO,GAE7B82B,EAAe,GAAK,GAGtBF,EAAaE,GAEbJ,EAAkBI,SAGyB,IAAlCgD,EAAkB,GAAG95B,OAC1B85B,EAAkBhoC,OAAS,EAC7BgoC,EAAkBhf,OAAO9a,EAAO,GAEhC85B,EAAkB,GAAK,GAGzBb,EAAgBa,GAEhBlb,EAAuBkb,SAGkB,IAAhCC,EAAgB,GAAG/5B,OACxB+5B,EAAgBjoC,OAAS,EAC3BioC,EAAgBjf,OAAO9a,EAAO,GAE9B+5B,EAAgB,GAAK,GAGvBZ,EAAcY,GAEdtb,EAAmBsb,SAGsB,IAAhCN,EAAgB,GAAGz5B,OACxBy5B,EAAgB3nC,OAAS,EAC3B2nC,EAAgB3e,OAAO9a,EAAO,GAE9By5B,EAAgB,GAAK,GAGvBJ,GAAcI,GAEd/a,EAAmB+a,SAGmB,IAA7BO,EAAa,GAAGh6B,OACrBg6B,EAAaloC,OAAS,EACxBkoC,EAAalf,OAAO9a,EAAO,GAE3Bg6B,EAAa,GAAKn1B,EAAU,GAAG8K,KAAc9K,UAAU,GAAG/O,MAG5DyjC,GAAWS,GAEXzH,EAAgByH,SAGoB,IAA3BiJ,GAAW,GAAGjjC,OACnBijC,GAAWnxC,OAAS,EACtBmxC,GAAWnoB,OAAO9a,EAAO,GAEzBomC,GAAc,IAAIxvC,KAAQ,IAI9B6zB,GAAkBoM,EAAgBkQ,GAClC5mB,GAAqB6Y,EAAcI,EAAW,GAGhD9kB,EAAAA,EAAAA,YAAU,KACR,MAAMqtB,EAA+B,GAC/BC,EAAoC,GACpC9oB,EAAiC,GACjCkuB,EAAgC,GAChCxZ,EAA8B,GAC9BwJ,EAA8B,GAC9BoD,EAAiC,GACjCC,EAA+B,GAC/BC,EAA+B,GAC/BC,EAA4B,GAElC,GAAIvjB,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAMqtC,EAA2D,KAA1C9qB,EAAU,GAAGviB,KAAuB,iBAAWuiB,EAAU,GAAGviB,KAAuB,iBAAI0qC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,MAC1IkK,EAAQm/B,EAAO,GAAGxvB,KAAcwvB,OAAOtpC,WAAWxD,GAA4CA,EAAKyD,QAAUgsC,IAE7G8E,EAAmD,KAArC5vB,EAAU,GAAGviB,KAAkB,YAAW,IAAImC,KAAKogB,EAAU,GAAGviB,KAAkB,aAAK,IAAImC,KACzGoyB,EAA+C,KAAnChS,EAAU,GAAGviB,KAAgB,UAAW,IAAImC,KAAKogB,EAAU,GAAGviB,KAAgB,WAAK,IAAImC,KAEzG+qC,EAAmBrvC,KAAK6sC,EAAAA,MAAa,GAAGn/B,MACxC4hC,EAAwBtvC,KAAKwvC,GAC7BhpB,EAAqBxmB,KAAK0kB,EAAU,GAAGviB,KAAY,MAAE,IACrDuyC,EAAoB10C,KAAKs0C,EAAYpvC,eACrCg2B,EAAkBl7B,KAAK02B,EAAUxxB,eACjCw/B,EAAkB1kC,KAAK0kB,EAAU,GAAGviB,KAAgB,WACpD2lC,EAAqB9nC,KAAK0kB,EAAU,GAAGviB,KAAmB,cAC1D4lC,EAAmB/nC,KAAK0kB,EAAU,GAAGviB,KAAiB,YACtD6lC,EAAmBhoC,KAAK0kB,EAAU,GAAGviB,KAAiB,YACtD8lC,EAAgBjoC,KAAK0kB,EAAU,GAAGviB,KAAc,SAEhD2xC,GAAcpd,EAAWv0B,GAG3B+uB,GAAcme,GACdV,EAAoBW,GACpB/pB,EAAgBiB,GAChB+tB,EAAeG,GACf/d,EAAauE,GACboJ,EAAaI,GACbiC,EAAgBmB,GAChBjB,EAAckB,GACdhB,GAAciB,GACdf,GAAWgB,GAEXlX,EAAmBse,GACnBd,EAAyBe,GACzBjrB,EAAamC,GACb6tB,EAAoBK,GACpBxf,EAAkBgG,GAClBkJ,EAAkBM,GAClBxY,EAAiB4b,GACjB3b,EAAmB4b,GACnB3b,EAAmB4b,GACnB/H,EAAgBgI,GAEhBra,GAAkBpH,GAClB2R,GAAkBuc,EAAqBxZ,GACvCrN,GAAqBia,EAAsBE,QAE3C8L,GAAc,IAAIxvC,KAAQ,GAE1BiqC,EAAyBG,KAE1B,CAAChqB,IAEJ,MAiBMigB,GAAmBrb,GAErBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWmC,MACtCzc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO6X,EAAa,GAAGgE,KAAM,YACnB,SACVS,KAAK,aACLJ,SAAW3Q,GAlkBM+a,EAAC/a,EAAYtL,KACtC,IAAImd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAElFnD,GAAsB3O,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EA+jB/CqmB,CAAmB/a,EAAOsQ,GAC/Ca,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7ES,aAAa,WAOjBopB,GAAqBrrB,QACKhe,IAA1BgpC,EAAY,GAAGhrB,KACV,KAIPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW6uB,aACtCnpC,IAAAA,cAACqxB,EAAAA,EAAU,CACT7S,SAAW8S,GA9jBGmY,EAACnnC,EAAaC,KACpC,MAAMggB,EAAa4mB,EAAY/tB,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,MAAK,IAAIsE,MAAOY,eAG7BwoB,EAAW,GAAGhgB,KAAWD,EAAQA,EAAMvI,cAAgB,GAEvDqvC,EAAe7mB,GAEf2mB,EAAoB3mB,GAEpByK,GAAkBzK,EAAYgJ,EAAU,EAijBNke,CAAgBnY,EAAMnT,GAChD7b,MAAiC,KAA1B6mC,EAAY,GAAGhrB,MAAiBgrB,EAAY,GAAGhrB,KAAO2B,SAAS,QAAU,KAAO,IAAI3mB,KAAKgwC,EAAY,GAAGhrB,MAC/GqT,OAAQ,UACRiI,QAAS,IAAItgC,KACb8G,UAAW,aACXyxB,eAAgB,GAChBC,iBAAkB,GAClBC,gBAAiB,OAOrB4W,GAAuBrqB,IAC3B,QAA6Bhe,IAAzBqlC,GAAW,GAAGrnB,WAAgDhe,IAAxBorB,EAAU,GAAGpN,KACrD,OAAO,KAGT,MAAMzmB,EAAQ8tC,GAAW,GAAGrnB,KAAOxmB,MAAM4wC,GAAqBA,EAAKlwC,QAAU6gC,EAAU,GAAG/a,OAEpFmqB,EAAc5wC,GAAgB,CAAE4K,MAAO,GAAIjK,MAAO,IAExD,OACE2H,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWiR,WACtCvrB,IAAAA,cAACqxB,EAAAA,EAAU,CACT7S,SAAW8S,GAviBCC,EAACjvB,EAAaC,KAClC,MAAMggB,EAAagJ,EAAUnQ,QAE7B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,MAAK,IAAIsE,MAAOY,eAG7BwoB,EAAW,GAAGhgB,KAAWD,EAAQA,EAAMvI,cAAgB,GAEvD4uC,GAAcrmC,EAAOC,GAErBipB,EAAajJ,GAEbwH,EAAkBxH,GAElByK,GAAkBmc,EAAa5mB,EAAW,EAwhBRgP,CAAcD,EAAMnT,GAC9C7b,MAA+B,KAAxBipB,EAAU,GAAGpN,MAAiBoN,EAAU,GAAGpN,KAAO2B,SAAS,QAAU,KAAO,IAAI3mB,KAAKoyB,EAAU,GAAGpN,MACzGqT,OAAQ,UACRC,QAAS,IAAIt4B,KACb8G,UAAW,aACXyxB,eAAgB,GAChBC,iBAAkB,GAClBC,gBAAiB,MAIrB5xB,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW4e,WACtCl5B,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOgmC,EACPnhB,QAASqe,GAAW,GAAGrnB,KACvBK,SAAW3Q,GAriBC+rB,EAAC/rB,EAAYtL,KACjC,MAAMggB,EAAa2W,EAAU9d,QAE7B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/B8gC,EAAa5W,GAEb0W,EAAkB1W,EAAW,EA0hBAqX,CAAc/rB,EAAOsQ,GAC1Cle,UAAW,SACXo4B,cAAc,KAGd,EAIJxU,GAAsB1F,IAC1B,MAAM8Z,EAAS7wB,EAAU,GAAG8K,KAAc9K,UAE1C,OACEpH,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,KAAGC,UAAU,iBAAiBqa,GAAWwJ,eACzC9jB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWyJ,iBACtC/jB,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOi5B,EAAa,GAAGpd,KAAM,YACnB,SACVS,KAAK,aACLJ,SAAW3Q,GA9iBImW,EAAC1hB,EAAeC,KACvC,MAAMggB,EAAagZ,EAAangB,QAEhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBigB,EAAW,GAAGhgB,KAASma,OAEvB8e,EAAgBjZ,GAEhBxB,EAAiBwB,GAEjBG,GAAqB6Y,EAAcI,EAAW,EA+hBjB3X,CAAiBnW,EAAMqN,OAAO5Y,MAAO6b,GAC1Da,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7ES,aAAa,SAGfpgB,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW2J,aACtCjkB,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOm5B,EAAW,GAAGtd,KAAM,YACjB,SACVS,KAAK,aACLJ,SAAW3Q,GA1iBEqW,EAAC5hB,EAAeC,KACrC,MAAMggB,EAAakZ,EAAWrgB,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBigB,EAAW,GAAGhgB,KAASma,OAEvBgf,EAAcnZ,GAEdvB,EAAmBuB,EAAW,EA6hBD2B,CAAerW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7ES,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,iBACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW6J,mBACtCnkB,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOq5B,EAAW,GAAGxd,KAAM,YACjB,SACVS,KAAK,aACLJ,SAAW3Q,GA3iBAuW,EAAC9hB,EAAeC,KACrC,MAAMggB,EAAaoZ,EAAWvgB,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGfyN,EAAMjO,QAAQ,EACfkuB,EAAW,GAAGhgB,KAAWD,EAEzB+hB,EAAAA,GAAMC,QAAQjO,EAAAA,GAAkC,GAAGnE,MAGrDqQ,EAAW,GAAGhgB,KAASma,OAEvBkf,GAAcrZ,GAEdtB,EAAmBsB,GAEnBG,GAAqB6Y,EAAcI,EAAW,EAwhBfvX,CAAevW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVmgB,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWiK,gBACtCvkB,IAAAA,cAACgnB,EAAAA,GAAM,CACLmR,YAAa0D,GAAY,GAAG1d,KAC5BgJ,QAAS8Q,EACTzZ,SAAW3Q,GAjiBHovB,EAACpvB,EAAYtL,KAC/B,MAAMggB,EAAasZ,GAAYzgB,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/ByjC,GAAWvZ,GAEXuS,EAAgBvS,EAAW,EAshBI0a,CAAYpvB,EAAOsQ,GACxCle,UAAW,SACXo4B,cAAc,MAIhB,EAIV,OACEr4B,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,IAzvBFvb,QAyvB0B6gB,QAASrF,GAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,WAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BArLLke,IAE5Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWipB,kBACtCvjC,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOwhC,GAAyB3lB,GAChCgJ,QAASua,EAAO,GAAGxvB,KAAcwvB,OACjCljB,SAAW3Q,GAAU81B,GAAqB91B,EAAOsQ,GACjDle,UAAW,SACXo4B,cAAc,MA4KC8C,CAAuBhd,GACvBqb,GAAgBrb,GAChBqrB,GAAkBrrB,GAClBqqB,GAAoBrqB,GACpB0F,GAAmB1F,IAK+B,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAG6lB,GAAY,GAAG3H,MAA+B,QAAzBqC,EAAG1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,SAK5F,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,udC50BV,MA61BA,EA71B4DJ,IAKoD,IALnD,WAC3D+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,mBACxD4M,EAAkB,yBAAEwd,EAAwB,qBAAEsG,EAAoB,aAAExwB,EAAY,kBAAE6Q,EAAiB,kBAAEkP,EAAiB,iBACtHlY,EAAgB,mBAAEC,EAAkB,mBAAEC,EAAkB,gBAAE6T,EAAe,qBACzEzb,EAAoB,oBAAE2Q,EAAmB,uBAAE7I,EAAsB,UACjE5H,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEwtB,EAAQ,SAAExiB,EAAQ,WAAEyT,EAAU,2BAAEmH,GAA4B1H,EAC1G,MAAOyxB,EAAkBC,IAAuBp3B,EAAAA,EAAAA,UAAS,CAACs1B,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,SACrFsxC,EAAcC,IAAmBx9B,EAAAA,EAAAA,UAAS,CAACy9B,EAAU,GAAG33B,KAAciV,QAAQ,GAAG9uB,SACjF8hB,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,MAC3Cmf,EAAWC,IAAgBpf,EAAAA,EAAAA,UAAS,CAAC,MACrC8sB,EAAWC,IAAgB/sB,EAAAA,EAAAA,UAAS,CAAC,MACrCmvB,EAAcC,IAAmBpvB,EAAAA,EAAAA,UAAS,CAAC,MAC3CqvB,EAAYC,IAAiBtvB,EAAAA,EAAAA,UAAS,CAAC,MACvCuvB,GAAYC,KAAiBxvB,EAAAA,EAAAA,UAAS,CAAC,MACvCyvB,GAAaC,KAAc1vB,EAAAA,EAAAA,UAAS,CAAC,MAErCo5B,GAAYC,KAAiBr5B,EAAAA,EAAAA,UAA+C,KAC5E0Z,GAAaC,KAAiB3Z,EAAAA,EAAAA,UAAS,CAAC,IAEzCkO,GAAajE,EAAAA,GAAkC,GAAGnE,KAClDgQ,MAAad,IAAYA,EAASe,gBAAmD,KAAlCf,EAASe,cAAczF,QAQ1E,aAAE7B,GAAY,MAAEC,KAAUC,EAAAA,EAAAA,MAkB1B4oB,GAAuBA,CAAC91B,EAAYtL,KACxC,MAAMggB,EAAaghB,EAAiBnoB,QAEpC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK6sC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,OAGpDkqB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/BmrC,EAAoBjhB,GAEpB6gB,EAAyB7gB,GA3BL8D,EAACud,EAAqBrhC,KAC1C,MAAMggB,EAAauD,GAAY1K,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK6sC,EAAAA,MAAAA,IAGlB,MAAMmC,EAAWnC,EAAO,GAAGxvB,KAAcwvB,OAAOtpC,WAAWxD,GAA4CA,EAAKyD,QAAUurC,IAEtHrhB,EAAW,GAAGhgB,KAAWm/B,EAAAA,MAAa,GAAGmC,KAEzC9d,GAAcxD,GAEdqD,EAAmBrD,EAAW,EAgB9B8D,CAAcxY,EAAMxV,MAAOkK,EAAM,EAuB7Bia,GAAwBA,CAACC,EAAcla,KAC3C,MAAMggB,EAAapI,EAAaiB,QAGhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWka,EAEzB8F,EAAW,GAAGhgB,KAASma,OAEvBtC,EAAgBmI,GAEhBrJ,EAAaqJ,GAEbE,GAAkBF,EAAW,EAyGzBomB,GAAgBA,CAACrmC,EAAaC,KAClC,MAAMggB,EAAaijB,GAAWpqB,QAE9B,KAAOmH,EAAWluB,OAASkvC,EAAiBlvC,QAC1CkuB,EAAW1tB,KAAK8kC,EAAAA,GAGlB,MAAMrI,EAAOhvB,GAAgB,IAAInJ,KAE3B4tC,EAAM,IAAI5tC,KAIhB,GAFAm4B,EAAK0J,SAAS,EAAG,EAAG,EAAG,GAEnB1J,EAAKwN,eAAiBiI,EAAIjI,eAAiBxN,EAAKoV,YAAcK,EAAIL,YAAcpV,EAAKyJ,WAAagM,EAAIhM,UAAW,CACnH,MAAMiM,EAA8C,GAEpDrN,EAAAA,EAAehlC,KAAIsyC,IACjB,MAAMC,EAAWD,EAAM5uC,MAAMiJ,MAAM,KAE7B6lC,EAAYvvC,SAASsvC,EAAS,GAAG5lC,MAAM,KAAK,IAC5C8lC,EAAWxvC,SAASsvC,EAASA,EAAS7yC,OAAS,GAAGiN,MAAM,KAAK,KAE/D6lC,GAAaJ,EAAIM,YAAcD,GAAYL,EAAIM,YAAcF,GAAaJ,EAAIM,YAAcN,EAAIM,YAAcD,IAChHJ,EAAOnyC,KAAKoyC,MAIhB1kB,EAAW,GAAGhgB,KAAWykC,OAEzBzkB,EAAW,GAAGhgB,KAAWo3B,EAAAA,EAG3B8L,GAAcljB,EAAW,EAGrBuhB,GAA4BvhC,IAChC,GAAIghC,EAAiBlvC,OAAS,EAAG,CAC/B,MAAM8xB,EAAmBod,EAAiBnoB,QAE1C,QAA4C,IAAjC+K,EAAiB,GAAG5jB,KAC7B,OAAOm/B,EAAO,GAAGxvB,KAAcwvB,OAAO/pC,MAAM/C,GAA2CA,EAAKyD,QAAU8tB,EAAiB,GAAG5jB,OAI9H,MAAO,CAAED,MAAO,GAAIjK,MAAO,GAAI,EAG3BoqB,GAAqBF,IACzB,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,GAAoD,KAAhDurB,EAAW,GAAGvrB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CACtD6B,GAAU,EAAO,MAIrBlF,EAAqBkF,EAAQ,EAGzByO,GAAqBzK,IACzB,IAAIhE,GAAU,EAEd,IAAK,IAAIvnB,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IACrC,GAA2B,KAAvBurB,EAAW,GAAGvrB,MAAeurB,EAAW,GAAGvrB,KAAK8oB,SAAS,QAAS,CACpEvB,GAAU,EAAO,MAIrByL,EAAoBzL,EAAQ,EAGxBmE,GAAuBA,CAACqZ,EAAyBC,KACrD,IAAIhmC,GAAS,EAEb,IAAK,IAAIgB,EAAI,EAAGA,EAAI+kC,EAAc1nC,SAAU2C,EAC1ChB,EAASA,GAAoC,KAA1B+lC,EAAc,GAAG/kC,MAA2C,KAA5BglC,EAAgB,GAAGhlC,KAGxEmqB,EAAuBnrB,EAAO,EAG1B6sB,GAAqBA,IACrBX,GACKd,EAAS0B,YAAYpG,QAAsC,KAA5B0E,EAAS2B,eAAwB,KAAO3B,EAAS2B,eAAerG,OAAS,KAAqC,KAA9B0E,EAAS4B,iBAA0B,KAAO5B,EAAS4B,iBAAiBtG,OAAS,KAAmC,KAA5B0E,EAAS6B,eAAwB,KAAO7B,EAAS6B,eAAevG,OAAS,KAAkC,KAA3B0E,EAAS6a,cAAuB,KAAO7a,EAAS6a,cAAcvf,OAAS,IAG5V,GAGHwf,GAAoBA,KACxB,GAAIha,GAAW,CACb,MAEMrS,EAFSzI,EAAU,GAAG8K,KAAc9K,UAElBzP,MAAMwkC,GAA4CA,EAAM9jC,MAAMw6B,gBAAkBzR,EAASgb,iBAAiBvJ,gBAElI,OAAOhjB,EAAWA,EAASxX,MAAQ,GAGrC,MAAO,EAAE,EAGL2kB,GAAWA,KACfjE,EAAO,GAEP,MAAMoP,EAAkBrC,GAAY1K,QAC9B4oB,EAAwBT,EAAiBnoB,QACzCgf,EAAsBuP,EAAavuB,QACnCD,EAAoBhB,EAAaiB,QACjCge,EAAiB7N,EAAUnQ,QAC3Bie,EAAiBH,EAAU9d,QAC3BihB,EAAoBd,EAAangB,QACjCkhB,EAAkBb,EAAWrgB,QAC7B4gB,EAAkBL,GAAWvgB,QAC7BmhB,EAAeV,GAAYzgB,QAEjC+M,EAAgBtzB,KAAK6sC,EAAAA,MAAAA,IACrBsC,EAAsBnvC,KAAK6sC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,OAC7D+hC,EAAoBvlC,KAAKg1C,EAAU,GAAG33B,KAAciV,QAAQ,GAAG9uB,OAC/D8iB,EAAkBtmB,KAAK,IACvBukC,EAAevkC,KAAK,IACpBwkC,EAAexkC,KAAK,IAEhBqtB,IACFma,EAAkBxnC,KAAKguB,MACvByZ,EAAgBznC,KAAKusB,EAASmC,4BAC9ByY,EAAgBnnC,KAAKusB,EAASoC,qBAC9B+Y,EAAa1nC,KAAKqnC,QAElBG,EAAkBxnC,KAAK,IACvBynC,EAAgBznC,KAAK,IACrBmnC,EAAgBnnC,KAAK,IACrB0nC,EAAa1nC,KAAKuS,EAAU,GAAG8K,KAAc9K,UAAU,GAAG/O,QAG5D0tB,GAAcoC,GACdqb,EAAoBQ,GACpB4F,EAAgBxP,GAChBhgB,EAAgBe,GAChBqQ,EAAa4N,GACbD,EAAaE,GACbmC,EAAgBa,GAChBX,EAAcY,GACdV,GAAcI,GACdF,GAAWS,GAEXoM,GAAc,IAAIxvC,KAAQ6qC,EAAsB3vC,OAAS,GAEzDuxB,EAAmBuC,GACnBib,EAAyBY,GACzB0F,EAAqBtP,GACrBlhB,EAAaiC,GACb4O,EAAkBqP,GAClBH,EAAkBI,GAClBtY,EAAiBsb,GACjBrb,EAAmBsb,GACnBrb,EAAmB+a,GACnBlH,EAAgByH,GAEhBljB,GAAqB,GACrB2Q,GAAoB,GAEpBtH,GAAqB2Z,EAAmBL,EAAgB,EAGpD9e,GAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,GAAiB/a,SAInByW,EAAUzW,GACV+a,GAAiB/a,QAGnByW,EAAUzW,GACV+a,GAAiB/a,IAIf+a,GAAoB/a,IACxB,MAAM4lB,EAAkBrC,GAAY1K,QAC9B4oB,EAAwBT,EAAiBnoB,QACzCgf,EAAsBuP,EAAavuB,QACnCD,EAAoBhB,EAAaiB,QACjCge,EAAiB7N,EAAUnQ,QAC3Bie,EAAiBH,EAAU9d,QAC3BihB,EAAoBd,EAAangB,QACjCkhB,EAAkBb,EAAWrgB,QAC7B4gB,EAAkBL,GAAWvgB,QAC7BmhB,EAAeV,GAAYzgB,aAEU,IAAhC+M,EAAgB,GAAG5lB,OACxB4lB,EAAgB9zB,OAAS,EAC3B8zB,EAAgB9K,OAAO9a,EAAO,GAE9B4lB,EAAgB,GAAKuZ,EAAAA,MAAAA,GAGvB3b,GAAcoC,GAEdvC,EAAmBuC,SAG4B,IAAtC6b,EAAsB,GAAGzhC,OAC9ByhC,EAAsB3vC,OAAS,EACjC2vC,EAAsB3mB,OAAO9a,EAAO,GAEpCyhC,EAAsB,GAAKtC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,MAG/DmrC,EAAoBQ,GAEpBZ,EAAyBY,SAGoB,IAApC5J,EAAoB,GAAG73B,OAC5B63B,EAAoB/lC,OAAS,EAC/B+lC,EAAoB/c,OAAO9a,EAAO,GAElC63B,EAAoB,GAAKyP,EAAU,GAAG33B,KAAciV,QAAQ,GAAG9uB,MAGjEuxC,EAAgBxP,GAEhBsP,EAAqBtP,SAGsB,IAAlCjf,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,GAGzBf,EAAgBe,GAEhBjC,EAAaiC,SAG2B,IAA/Bie,EAAe,GAAG72B,OACvB62B,EAAe/kC,OAAS,EAC1B+kC,EAAe/b,OAAO9a,EAAO,GAE7B62B,EAAe,GAAK,GAGtB5N,EAAa4N,GAEbrP,EAAkBqP,SAGsB,IAA/BC,EAAe,GAAG92B,OACvB82B,EAAehlC,OAAS,EAC1BglC,EAAehc,OAAO9a,EAAO,GAE7B82B,EAAe,GAAK,GAGtBF,EAAaE,GAEbJ,EAAkBI,SAGyB,IAAlCgD,EAAkB,GAAG95B,OAC1B85B,EAAkBhoC,OAAS,EAC7BgoC,EAAkBhf,OAAO9a,EAAO,GAEhC85B,EAAkB,GAAK,GAGzBb,EAAgBa,GAEhBlb,EAAuBkb,SAGkB,IAAhCC,EAAgB,GAAG/5B,OACxB+5B,EAAgBjoC,OAAS,EAC3BioC,EAAgBjf,OAAO9a,EAAO,GAE9B+5B,EAAgB,GAAK,GAGvBZ,EAAcY,GAEdtb,EAAmBsb,SAGsB,IAAhCN,EAAgB,GAAGz5B,OACxBy5B,EAAgB3nC,OAAS,EAC3B2nC,EAAgB3e,OAAO9a,EAAO,GAE9By5B,EAAgB,GAAK,GAGvBJ,GAAcI,GAEd/a,EAAmB+a,SAGmB,IAA7BO,EAAa,GAAGh6B,OACrBg6B,EAAaloC,OAAS,EACxBkoC,EAAalf,OAAO9a,EAAO,GAE3Bg6B,EAAa,GAAKn1B,EAAU,GAAG8K,KAAc9K,UAAU,GAAG/O,MAG5DyjC,GAAWS,GAEXzH,EAAgByH,SAGoB,IAA3BiJ,GAAW,GAAGjjC,OACnBijC,GAAWnxC,OAAS,EACtBmxC,GAAWnoB,OAAO9a,EAAO,GAEzBomC,GAAc,IAAIxvC,KAAQ,IAI9BspB,GAAkBtH,GAClB6R,GAAkBoM,GAClB1W,GAAqB6Y,EAAcI,GAAW,GAGhD9kB,EAAAA,EAAAA,YAAU,KACR,MAAMqtB,EAA+B,GAC/BC,EAAoC,GACpC2F,EAAiC,GACjCzuB,EAAiC,GACjC0U,EAA8B,GAC9BwJ,EAA8B,GAC9BoD,EAAiC,GACjCC,EAA+B,GAC/BC,EAA+B,GAC/BC,EAA4B,GAElC,GAAIvjB,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAMqtC,EAA2D,KAA1C9qB,EAAU,GAAGviB,KAAuB,iBAAWuiB,EAAU,GAAGviB,KAAuB,iBAAI0qC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,MAC1IkK,EAAQm/B,EAAO,GAAGxvB,KAAcwvB,OAAOtpC,WAAWxD,GAA4CA,EAAKyD,QAAUgsC,IAE7G9Y,EAA+C,KAAnChS,EAAU,GAAGviB,KAAgB,UAAW,IAAImC,KAAKogB,EAAU,GAAGviB,KAAgB,WAAK,IAAImC,KAEzG+qC,EAAmBrvC,KAAK6sC,EAAAA,MAAa,GAAGn/B,MACxC4hC,EAAwBtvC,KAAKwvC,GAC7ByF,EAAqBj1C,KAA6C,KAAxC0kB,EAAU,GAAGviB,KAAqB,eAAWuiB,EAAU,GAAGviB,KAAqB,eAAI6yC,EAAU,GAAG33B,KAAciV,QAAQ,GAAG9uB,OACnJgjB,EAAqBxmB,KAAK0kB,EAAU,GAAGviB,KAAY,MAAE,IACrD+4B,EAAkBl7B,KAAK02B,EAAUxxB,eACjCw/B,EAAkB1kC,KAAK0kB,EAAU,GAAGviB,KAAgB,WACpD2lC,EAAqB9nC,KAAK0kB,EAAU,GAAGviB,KAAmB,cAC1D4lC,EAAmB/nC,KAAK0kB,EAAU,GAAGviB,KAAiB,YACtD6lC,EAAmBhoC,KAAK0kB,EAAU,GAAGviB,KAAiB,YACtD8lC,EAAgBjoC,KAAK0kB,EAAU,GAAGviB,KAAc,SAEhD2xC,GAAcpd,EAAWv0B,GAG3B+uB,GAAcme,GACdV,EAAoBW,GACpByF,EAAgBE,GAChB1vB,EAAgBiB,GAChBmQ,EAAauE,GACboJ,EAAaI,GACbiC,EAAgBmB,GAChBjB,EAAckB,GACdhB,GAAciB,GACdf,GAAWgB,GAEXlX,EAAmBse,GACnBd,EAAyBe,GACzBuF,EAAqBI,GACrB5wB,EAAamC,GACb0O,EAAkBgG,GAClBkJ,EAAkBM,GAClBxY,EAAiB4b,GACjB3b,EAAmB4b,GACnB3b,EAAmB4b,GACnB/H,EAAgBgI,GAEhBra,GAAkBpH,GAClB2R,GAAkB+C,GAClBrN,GAAqBia,EAAsBE,QAEvC3a,KACFya,EAAqB9nC,KAAKguB,MAC1B+Z,EAAmB/nC,KAAKusB,EAASmC,4BACjCsZ,EAAmBhoC,KAAKusB,EAASoC,qBACjCsZ,EAAgBjoC,KAAKqnC,MAErBV,EAAgBmB,GAChBjB,EAAckB,GACdhB,GAAciB,GACdf,GAAWgB,GAEX/b,EAAiB4b,GACjB3b,EAAmB4b,GACnB3b,EAAmB4b,GACnB/H,EAAgBgI,GAEhBpa,GAAqBia,EAAsBE,IAG7C8L,GAAc,IAAIxvC,KAAQ,GAE1BiqC,EAAyBG,GACzBmG,EAAqBC,KAEtB,CAACpwB,IAEJ,MAiBMwwB,GAAyB5rB,GAE3Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWqvB,cACtC3pC,IAAAA,cAACgnB,EAAAA,GAAM,CACLmR,YAAawR,EAAa,GAAGxrB,KAC7BgJ,QAAS0iB,EAAU,GAAG33B,KAAciV,QACpC3I,SAAW3Q,GAjlBIm8B,EAACn8B,EAAYtL,KACpC,MAAMggB,EAAaonB,EAAavuB,QAEhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAKg1C,EAAU,GAAG33B,KAAciV,QAAQ,GAAG9uB,OAGxDkqB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/BuxC,EAAgBrnB,GAEhBmnB,EAAqBnnB,EAAW,EAskBHynB,CAAiBn8B,EAAOsQ,GAC7Cle,UAAW,SACXo4B,cAAc,MAOlBmB,GAAmBrb,GAErBne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,UAAUqa,GAAW2vB,qBAClCjqC,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWmC,MACtCzc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO6X,EAAa,GAAGgE,KAAM,YACnB,SACVS,KAAK,aACLJ,SAAW3Q,GAxlBM+a,EAAC/a,EAAYtL,KACtC,IAAImd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAElFnD,GAAsB3O,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EAqlB/CqmB,CAAmB/a,EAAOsQ,GAC/Ca,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7ES,aAAa,WAOjBooB,GAAuBrqB,IAC3B,QAA6Bhe,IAAzBqlC,GAAW,GAAGrnB,WAAgDhe,IAAxBorB,EAAU,GAAGpN,KACrD,OAAO,KAGT,MAAMzmB,EAAQ8tC,GAAW,GAAGrnB,KAAOxmB,MAAM4wC,GAAqBA,EAAKlwC,QAAU6gC,EAAU,GAAG/a,OAEpFmqB,EAAc5wC,GAAgB,CAAE4K,MAAO,GAAIjK,MAAO,IAExD,OACE2H,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWiR,WACtCvrB,IAAAA,cAACqxB,EAAAA,EAAU,CACT7S,SAAW8S,GAxlBCC,EAACjvB,EAAaC,KAClC,MAAMggB,EAAagJ,EAAUnQ,QAE7B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,MAAK,IAAIsE,MAAOY,eAG7BwoB,EAAW,GAAGhgB,KAAWD,EAAQA,EAAMvI,cAAgB,GAEvD4uC,GAAcrmC,EAAOC,GAErBipB,EAAajJ,GAEbwH,EAAkBxH,GAElByK,GAAkBzK,EAAW,EAykBKgP,CAAcD,EAAMnT,GAC9C7b,MAA+B,KAAxBipB,EAAU,GAAGpN,MAAiBoN,EAAU,GAAGpN,KAAO2B,SAAS,QAAU,KAAO,IAAI3mB,KAAKoyB,EAAU,GAAGpN,MACzGqT,OAAQ,UACRC,QAAS,IAAIt4B,KACb8G,UAAW,aACXyxB,eAAgB,GAChBC,iBAAkB,GAClBC,gBAAiB,MAIrB5xB,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW4e,WACtCl5B,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOgmC,EACPnhB,QAASqe,GAAW,GAAGrnB,KACvBK,SAAW3Q,GAtlBC+rB,EAAC/rB,EAAYtL,KACjC,MAAMggB,EAAa2W,EAAU9d,QAE7B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/B8gC,EAAa5W,GAEb0W,EAAkB1W,EAAW,EA2kBAqX,CAAc/rB,EAAOsQ,GAC1Cle,UAAW,SACXo4B,cAAc,KAGd,EAIJxU,GAAsB1F,IAC1B,MAAM8Z,EAAS7wB,EAAU,GAAG8K,KAAc9K,UAE1C,OACEpH,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,KAAGC,UAAU,iBAAiBqa,GAAWwJ,eACzC9jB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWyJ,iBACtC/jB,IAAAA,cAAA,qBACY,SACVC,UAAU,eACVye,UAAU,OACVE,KAAK,aACLJ,SAAW3Q,GA9lBImW,EAAC1hB,EAAeC,KACvC,MAAMggB,EAAagZ,EAAangB,QAEhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBigB,EAAW,GAAGhgB,KAASma,OAEvB8e,EAAgBjZ,GAEhBxB,EAAiBwB,GAEjBG,GAAqB6Y,EAAcI,GAAW,EA+kBjB3X,CAAiBnW,EAAMqN,OAAO5Y,MAAO6b,GAC1Da,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1DW,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7Erd,MAAOi5B,EAAa,GAAGpd,KACvBG,KAAK,OACL8B,aAAa,SAGfpgB,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW2J,aACtCjkB,IAAAA,cAAA,qBACY,SACVC,UAAU,eACVye,UAAU,OACVE,KAAK,aACLJ,SAAW3Q,GA1lBEqW,EAAC5hB,EAAeC,KACrC,MAAMggB,EAAakZ,EAAWrgB,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBigB,EAAW,GAAGhgB,KAASma,OAEvBgf,EAAcnZ,GAEdvB,EAAmBuB,EAAW,EA6kBD2B,CAAerW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1DW,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7Erd,MAAOm5B,EAAW,GAAGtd,KACrBG,KAAK,OACL8B,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,iBACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW6J,mBACtCnkB,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOq5B,GAAW,GAAGxd,KAAM,YACjB,SACVS,KAAK,aACLJ,SAAW3Q,GA5lBAuW,EAAC9hB,EAAeC,KACrC,MAAMggB,EAAaoZ,GAAWvgB,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGfyN,EAAMjO,QAAQ,EACfkuB,EAAW,GAAGhgB,KAAWD,EAEzB+hB,EAAAA,GAAMC,QAAQjO,EAAAA,GAAkC,GAAGnE,MAGrDqQ,EAAW,GAAGhgB,KAASma,OAEvBkf,GAAcrZ,GAEdtB,EAAmBsB,GAEnBG,GAAqB6Y,EAAcI,GAAW,EAykBfvX,CAAevW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVmgB,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWiK,gBACtCvkB,IAAAA,cAACgnB,EAAAA,GAAM,CACLmR,YAAa0D,GAAY,GAAG1d,KAC5BgJ,QAAS8Q,EACTzZ,SAAW3Q,GAllBHovB,EAACpvB,EAAYtL,KAC/B,MAAMggB,EAAasZ,GAAYzgB,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/ByjC,GAAWvZ,GAEXuS,EAAgBvS,EAAW,EAukBI0a,CAAYpvB,EAAOsQ,GACxCle,UAAW,SACXo4B,cAAc,MAIhB,EAIV,OACEr4B,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,IArwBFvb,QAqwB0B6gB,QAASrF,GAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,WAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BA/KLke,IAE5Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWipB,kBACtCvjC,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOwhC,GAAyB3lB,GAChCgJ,QAASua,EAAO,GAAGxvB,KAAcwvB,OACjCljB,SAAW3Q,GAAU81B,GAAqB91B,EAAOsQ,GACjDle,UAAW,SACXo4B,cAAc,MAsKC8C,CAAuBhd,GACvB4rB,GAAsB5rB,GACtBqb,GAAgBrb,GAChBqqB,GAAoBrqB,GACpB0F,GAAmB1F,IAK+B,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAG6lB,GAAY,GAAG3H,MAA+B,QAAzBqC,EAAG1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,SAK5F,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,iMC31BV,MAm3BA,EAn3BwDJ,IAKwD,IALvD,WACvD+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,mBACxD4M,EAAkB,yBAAEwd,EAAwB,aAAElqB,EAAY,kBAAE6Q,EAAiB,kBAAEkP,EAAiB,iBAChGlY,EAAgB,mBAAEC,EAAkB,mBAAEC,EAAkB,gBAAE6T,EAAe,qBACzEzb,EAAoB,oBAAE2Q,EAAmB,uBAAE7I,EAAsB,UACjE5H,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEwtB,EAAQ,SAAExiB,EAAQ,WAAEyT,EAAU,2BAAEmH,GAA4B1H,EAC1G,MAAOyxB,EAAkBC,IAAuBp3B,EAAAA,EAAAA,UAAS,CAACs1B,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,SACrF8hB,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,MAC3Cmf,EAAWC,IAAgBpf,EAAAA,EAAAA,UAAS,CAAC,MACrC8sB,EAAWC,IAAgB/sB,EAAAA,EAAAA,UAAS,CAAC,MACrCmvB,EAAcC,IAAmBpvB,EAAAA,EAAAA,UAAS,CAAC,MAC3CqvB,EAAYC,IAAiBtvB,EAAAA,EAAAA,UAAS,CAAC,MACvCuvB,EAAYC,IAAiBxvB,EAAAA,EAAAA,UAAS,CAAC,MACvCyvB,EAAaC,KAAc1vB,EAAAA,EAAAA,UAAS,CAAC,MAErC0Z,GAAaC,KAAiB3Z,EAAAA,EAAAA,UAAS,CAAC,IAEzCu1B,GAASuI,EAAQ,IACjB5vB,GAAajE,EAAAA,GAA8B,GAAGnE,KAC9CgQ,MAAad,IAAYA,EAASe,gBAAmD,KAAlCf,EAASe,cAAczF,QAS1E,aAAE7B,GAAY,MAAEC,KAAUC,EAAAA,EAAAA,MAkB1B4oB,GAAuBA,CAAC91B,EAAYtL,KACxC,MAAMggB,EAAaghB,EAAiBnoB,QAEpC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK6sC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,OAGpDkqB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/BmrC,EAAoBjhB,GAEpB6gB,EAAyB7gB,GA3BL8D,EAACud,EAAqBrhC,KAC1C,MAAMggB,EAAauD,GAAY1K,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK6sC,EAAAA,MAAAA,IAGlB,MAAMmC,EAAWnC,EAAO,GAAGxvB,KAAcwvB,OAAOtpC,WAAWxD,GAA4CA,EAAKyD,QAAUurC,IAEtHrhB,EAAW,GAAGhgB,KAAWm/B,EAAAA,MAAa,GAAGmC,KAEzC9d,GAAcxD,GAEdqD,EAAmBrD,EAAW,EAgB9B8D,CAAcxY,EAAMxV,MAAOkK,EAAM,EAG7B4nC,GAAmBA,CAAC7nC,EAAeia,KACvC,GAAIja,EAAO,CACT,MAAMoB,EAAQpB,EAAMhB,MAAM,KAE1B,OAAOoC,EAAM,GAAG6Y,KAAe7Y,EAAM,GAAG6Y,KAAe,GAGzD,MAAO,EAAE,EAmBLC,GAAwBA,CAACla,EAAeC,KAC5C,MAAMggB,EAAapI,EAAaiB,QAGhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBigB,EAAW,GAAGhgB,KAASma,OAEvBtC,EAAgBmI,GAEhBrJ,EAAaqJ,GAEbE,GAAkBF,EAAW,EAuBzB6nB,GAAqB9nC,IAEzB,GAAc,KAAVA,EACF,MAAO,GAGT,MAAMipB,EAAYjpB,EAAMhB,MAAM,KAE9B,OAAOiqB,EAAU,GAAK,IAAMA,EAAU,GAAK,IAAMA,EAAU,EAAE,EAmBzDgG,GAAgBA,CAACjvB,EAAeC,KACpC,MAAMggB,EAAagJ,EAAUnQ,QAE7B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBkpB,EAAajJ,GAEbwH,EAAkBxH,GAElByK,GAAkBzK,EAAW,EAiBzBqX,GAAgBA,CAACt3B,EAAeC,KACpC,MAAMggB,EAAa2W,EAAU9d,QAE7B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzB62B,EAAa5W,GAEb0W,EAAkB1W,EAAW,EAyEzBuhB,GAA4BvhC,IAChC,GAAIghC,EAAiBlvC,OAAS,EAAG,CAC/B,MAAM8xB,EAAmBod,EAAiBnoB,QAE1C,QAA4C,IAAjC+K,EAAiB,GAAG5jB,KAC7B,OAAOm/B,EAAO,GAAGxvB,KAAcwvB,OAAO/pC,MAAM/C,GAA2CA,EAAKyD,QAAU8tB,EAAiB,GAAG5jB,OAI9H,MAAO,CAAED,MAAO,GAAIjK,MAAO,GAAI,EAG3BoqB,GAAqBF,IACzB,IAAIhE,GAAU,EACd,GAAIgE,EAAWluB,OAAS,EACtB,IAAK,IAAI2C,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IAAK,CAC1C,KAAIurB,EAAW,GAAGvrB,KAAK3C,OAAS,GAAKkuB,EAAW,GAAGvrB,KAAK4/B,QAAQ,KAAO,GAOhE,CACLrY,GAAU,EAAO,MAPjB,IAAI+D,EAAaC,EAAW,GAAGvrB,KAAKsK,MAAM,KAC1C,IAAK,IAAI/K,EAAI,EAAGA,EAAI+rB,EAAWjuB,OAAQkC,IACrC,GAAoD,KAAhD+rB,EAAW,GAAG/rB,KAAKya,QAAQ,KAAM,IAAI0L,OAAe,CACtD6B,GAAU,EAAO,YASzBA,GAAU,EAGZlF,EAAqBkF,EAAQ,EAGzByO,GAAqBzK,IACzB,IAAIhE,GAAU,EAEd,GAAIgE,EAAWluB,OAAS,EACtB,IAAK,IAAI2C,EAAI,EAAGA,EAAIurB,EAAWluB,OAAQ2C,IAAK,CAC1C,KAAIurB,EAAW,GAAGvrB,KAAK3C,OAAS,GAAKkuB,EAAW,GAAGvrB,KAAK4/B,QAAQ,KAAO,GAchE,CACLrY,GAAU,EAAO,MAdjB,IAAI8rB,EAAY9nB,EAAW,GAAGvrB,KAAKsK,MAAM,KAEzC,GAnSU,IAmSN+oC,EAAUh2C,OAQP,CACLkqB,GAAU,EAAO,MARjB,IAAK,IAAIhoB,EAAI,EAAGA,EAAI8zC,EAAUh2C,OAAQkC,IAAK,CACzC,MAAM+L,EAAQ+nC,EAAU,GAAG9zC,KAAKya,QAAQ,KAAM,IAAI0L,OAElD,GAAc,KAAVpa,GAAgBA,EAAMwd,SAAS,QAAS,CAC1CvB,GAAU,EAAO,aAY3BA,GAAU,EAGZyL,EAAoBzL,EAAQ,EAGxBmE,GAAuBA,CAACqZ,EAAyBC,KACrD,IAAIhmC,GAAS,EAEb,IAAK,IAAIgB,EAAI,EAAGA,EAAI+kC,EAAc1nC,SAAU2C,EAC1ChB,EAASA,GAAoC,KAA1B+lC,EAAc,GAAG/kC,MAA2C,KAA5BglC,EAAgB,GAAGhlC,KAGxEmqB,EAAuBnrB,EAAO,EAG1B6sB,GAAqBA,IACrBX,GACKd,EAAS0B,YAAYpG,QAAsC,KAA5B0E,EAAS2B,eAAwB,KAAO3B,EAAS2B,eAAerG,OAAS,KAAqC,KAA9B0E,EAAS4B,iBAA0B,KAAO5B,EAAS4B,iBAAiBtG,OAAS,KAAmC,KAA5B0E,EAAS6B,eAAwB,KAAO7B,EAAS6B,eAAevG,OAAS,KAAkC,KAA3B0E,EAAS6a,cAAuB,KAAO7a,EAAS6a,cAAcvf,OAAS,IAG5V,GAGHwf,GAAoBA,KACxB,GAAIha,GAAW,CACb,MAEMrS,EAFSzI,EAAU,GAAG8K,KAAc9K,UAElBzP,MAAMwkC,GAA4CA,EAAM9jC,MAAMw6B,gBAAkBzR,EAASgb,iBAAiBvJ,gBAElI,OAAOhjB,EAAWA,EAASxX,MAAQ,GAGrC,MAAO,EAAE,EAGL2kB,GAAWA,KACfjE,EAAO,GAEP,MAAMoP,EAAkBrC,GAAY1K,QAC9B4oB,EAAwBT,EAAiBnoB,QACzCD,EAAoBhB,EAAaiB,QACjCge,EAAiB7N,EAAUnQ,QAC3Bie,EAAiBH,EAAU9d,QAC3BihB,EAAoBd,EAAangB,QACjCkhB,EAAkBb,EAAWrgB,QAC7B4gB,EAAkBL,EAAWvgB,QAC7BmhB,EAAeV,EAAYzgB,QAEjC+M,EAAgBtzB,KAAK6sC,EAAAA,MAAAA,IACrBsC,EAAsBnvC,KAAK6sC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,OAC7D8iB,EAAkBtmB,KAAK,IACvBukC,EAAevkC,KAAK,IACpBwkC,EAAexkC,KAAK,IAEhBqtB,IACFma,EAAkBxnC,KAAKguB,MACvByZ,EAAgBznC,KAAKusB,EAASmC,4BAC9ByY,EAAgBnnC,KAAKusB,EAASoC,qBAC9B+Y,EAAa1nC,KAAKqnC,QAElBG,EAAkBxnC,KAAK,IACvBynC,EAAgBznC,KAAK,IACrBmnC,EAAgBnnC,KAAK,IACrB0nC,EAAa1nC,KAAKuS,EAAU,GAAG8K,KAAc9K,UAAU,GAAG/O,QAG5D0tB,GAAcoC,GACdqb,EAAoBQ,GACpB5pB,EAAgBe,GAChBqQ,EAAa4N,GACbD,EAAaE,GACbmC,EAAgBa,GAChBX,EAAcY,GACdV,EAAcI,GACdF,GAAWS,GAEX3W,EAAmBuC,GACnBib,EAAyBY,GACzB9qB,EAAaiC,GACb4O,EAAkBqP,GAClBH,EAAkBI,GAClBtY,EAAiBsb,GACjBrb,EAAmBsb,GACnBrb,EAAmB+a,GACnBlH,EAAgByH,GAEhBljB,GAAqB,GACrB2Q,GAAoB,GAEpBtH,GAAqB2Z,EAAmBL,EAAgB,EAGpD9e,GAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,GAAiB/a,SAGnByW,EAAUzW,GACV+a,GAAiB/a,QAGnByW,EAAUzW,GACV+a,GAAiB/a,IAIf+a,GAAoB/a,IACxB,MAAM4lB,EAAkBrC,GAAY1K,QAC9B4oB,EAAwBT,EAAiBnoB,QACzCD,EAAoBhB,EAAaiB,QACjCge,EAAiB7N,EAAUnQ,QAC3Bie,EAAiBH,EAAU9d,QAC3BihB,EAAoBd,EAAangB,QACjCkhB,EAAkBb,EAAWrgB,QAC7B4gB,EAAkBL,EAAWvgB,QAC7BmhB,EAAeV,EAAYzgB,aAEU,IAAhC+M,EAAgB,GAAG5lB,OACxB4lB,EAAgB9zB,OAAS,EAC3B8zB,EAAgB9K,OAAO9a,EAAO,GAE9B4lB,EAAgB,GAAKuZ,EAAAA,MAAAA,GAGvB3b,GAAcoC,GAEdvC,EAAmBuC,SAG4B,IAAtC6b,EAAsB,GAAGzhC,OAC9ByhC,EAAsB3vC,OAAS,EACjC2vC,EAAsB3mB,OAAO9a,EAAO,GAEpCyhC,EAAsB,GAAKtC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,MAG/DmrC,EAAoBQ,GAEpBZ,EAAyBY,SAGkB,IAAlC7oB,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,GAGzBf,EAAgBe,GAEhBjC,EAAaiC,SAG2B,IAA/Bie,EAAe,GAAG72B,OACvB62B,EAAe/kC,OAAS,EAC1B+kC,EAAe/b,OAAO9a,EAAO,GAE7B62B,EAAe,GAAK,GAGtB5N,EAAa4N,GAEbrP,EAAkBqP,SAGsB,IAA/BC,EAAe,GAAG92B,OACvB82B,EAAehlC,OAAS,EAC1BglC,EAAehc,OAAO9a,EAAO,GAE7B82B,EAAe,GAAK,GAGtBF,EAAaE,GAEbJ,EAAkBI,SAGyB,IAAlCgD,EAAkB,GAAG95B,OAC1B85B,EAAkBhoC,OAAS,EAC7BgoC,EAAkBhf,OAAO9a,EAAO,GAEhC85B,EAAkB,GAAK,GAGzBb,EAAgBa,GAEhBlb,EAAuBkb,SAGkB,IAAhCC,EAAgB,GAAG/5B,OACxB+5B,EAAgBjoC,OAAS,EAC3BioC,EAAgBjf,OAAO9a,EAAO,GAE9B+5B,EAAgB,GAAK,GAGvBZ,EAAcY,GAEdtb,EAAmBsb,SAGsB,IAAhCN,EAAgB,GAAGz5B,OACxBy5B,EAAgB3nC,OAAS,EAC3B2nC,EAAgB3e,OAAO9a,EAAO,GAE9By5B,EAAgB,GAAK,GAGvBJ,EAAcI,GAEd/a,EAAmB+a,SAGmB,IAA7BO,EAAa,GAAGh6B,OACrBg6B,EAAaloC,OAAS,EACxBkoC,EAAalf,OAAO9a,EAAO,GAE3Bg6B,EAAa,GAAKn1B,EAAU,GAAG8K,KAAc9K,UAAU,GAAG/O,MAG5DyjC,GAAWS,GAEXzH,EAAgByH,IAGlB9Z,GAAkBtH,GAClB6R,GAAkBoM,GAClB1W,GAAqB6Y,EAAcI,EAAW,GAGhD9kB,EAAAA,EAAAA,YAAU,KACR,MAAMqtB,EAA+B,GAC/BC,EAAoC,GACpC9oB,EAAiC,GACjC0U,EAA8B,GAC9BwJ,EAA8B,GAC9BoD,EAAiC,GACjCC,EAA+B,GAC/BC,EAA+B,GAC/BC,EAA4B,GAElC,GAAIvjB,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,MAAMqtC,EAA2D,KAA1C9qB,EAAU,GAAGviB,KAAuB,iBAAWuiB,EAAU,GAAGviB,KAAuB,iBAAI0qC,EAAO,GAAGxvB,KAAcwvB,OAAO,GAAGrpC,MAC1IkK,EAAQm/B,EAAO,GAAGxvB,KAAcwvB,OAAOtpC,WAAWxD,GAA4CA,EAAKyD,QAAUgsC,IAC7GtmB,EAAsBxE,EAAU,GAAGviB,KAAY,MAErD,IAAIinB,EAAW,GAEfF,EAAUppB,KAAI,CAAC8nB,EAAMla,KAEjB0b,GADY,IAAV1b,GAAeA,EAjkBT,EAkkBI,IAAMka,EAENA,KAIhB,MAAMjV,GAAiD,KAAnC+R,EAAU,GAAGviB,KAAgB,UAAW,IAAImC,KAAKogB,EAAU,GAAGviB,KAAgB,WAAG+C,eAAgB,IAAIZ,MAAOY,gBAAuD,KAArCwf,EAAU,GAAGviB,KAAkB,YAAW,IAAM2qC,GAAOpoB,EAAU,GAAGviB,KAAkB,aAAGw6B,OAAO,cAAgB,IAE5P7pB,EAAa4R,EAAU,GAAGviB,KAAgB,WAA0C,KAArCuiB,EAAU,GAAGviB,KAAkB,YAAW,IAAMuiB,EAAU,GAAGviB,KAAkB,YAAI,IAExIktC,EAAmBrvC,KAAK6sC,EAAAA,MAAa,GAAGn/B,MACxC4hC,EAAwBtvC,KAAKwvC,GAC7BhpB,EAAqBxmB,KAAKopB,GAC1B8R,EAAkBl7B,KAAK2S,GACvB+xB,EAAkB1kC,KAAK8S,GACvBg1B,EAAqB9nC,KAAK0kB,EAAU,GAAGviB,KAAmB,cAC1D4lC,EAAmB/nC,KAAK0kB,EAAU,GAAGviB,KAAiB,YACtD6lC,EAAmBhoC,KAAK0kB,EAAU,GAAGviB,KAAiB,YACtD8lC,EAAgBjoC,KAAK0kB,EAAU,GAAGviB,KAAc,SAGlD+uB,GAAcme,GACdV,EAAoBW,GACpB/pB,EAAgBiB,GAChBmQ,EAAauE,GACboJ,EAAaI,GACbiC,EAAgBmB,GAChBjB,EAAckB,GACdhB,EAAciB,GACdf,GAAWgB,GAEXlX,EAAmBse,GACnBd,EAAyBe,GACzBjrB,EAAamC,GACb0O,EAAkBgG,GAClBkJ,EAAkBM,GAClBxY,EAAiB4b,GACjB3b,EAAmB4b,GACnB3b,EAAmB4b,GACnB/H,EAAgBgI,GAEhBra,GAAkBpH,GAClB2R,GAAkB+C,GAClBrN,GAAqBia,EAAsBE,QAEvC3a,KACFya,EAAqB9nC,KAAKguB,MAC1B+Z,EAAmB/nC,KAAKusB,EAASmC,4BACjCsZ,EAAmBhoC,KAAKusB,EAASoC,qBACjCsZ,EAAgBjoC,KAAKqnC,MAErBV,EAAgBmB,GAChBjB,EAAckB,GACdhB,EAAciB,GACdf,GAAWgB,GAEX/b,EAAiB4b,GACjB3b,EAAmB4b,GACnB3b,EAAmB4b,GACnB/H,EAAgBgI,GAEhBpa,GAAqBia,EAAsBE,IAG7CuG,EAAyBG,KAE1B,CAAChqB,IAEJ,MAiBMigB,GAAkBA,CAACrb,EAAamsB,IAElCtqC,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,KAAGC,UAAU,iBAAiBqa,GAAWiwB,cAAgB,KAAOD,EAAa,IAC7EtqC,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWmC,MACtCzc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO6nC,GAAiBhwB,EAAa,GAAGgE,KAAQmsB,GAAW,YACjD,SACV1rB,KAAK,aACLJ,SAAW3Q,GA/mBO28B,EAAC38B,EAAYtL,EAAe+nC,KACtD,MAAM5qB,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF,IAAI8qB,EAAiBtwB,EAAa,GAAG5X,KAEhCkoC,EAAe3qB,SAAS,OAC3B2qB,GAAkB,IAAIjvB,OAAO,IAG/B,MAAM+G,EAAakoB,EAAenpC,MAAM,KAExCihB,EAAW,GAAG+nB,KAAgBz8B,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAE1ElD,GAAsB+F,EAAW7G,KAAK,KAAMnZ,EAAM,EAkmBrBioC,CAAoB38B,EAAOsQ,EAAKmsB,GACrDtrB,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7ES,aAAa,WAOjBooB,GAAsBA,CAACrqB,EAAamsB,KACxC,MAAMI,EAAkC,IAAfJ,EAxlBKhoC,KAC9B,GAAIA,EAAMwd,SAAS,KAGjB,OAFmBxd,EAAMhB,MAAM,KAEb,GAGpB,OAAOgB,CAAK,EAilBgCqoC,CAAuBpf,EAAU,GAAGpN,MA9kBjD7b,KAC/B,GAAIA,EAAMwd,SAAS,KAAM,CACvB,MAAM8qB,EAAatoC,EAAMhB,MAAM,KAE/B,OAAO8oC,GAAkBQ,EAAW,IAGtC,OAAOtoC,CAAK,EAukB8EuoC,CAAwBtf,EAAU,GAAGpN,MAE/H,QAAyBhe,IAArBuqC,EACF,OAAO,KAGT,MAAMhzC,EAAQiiC,EAAAA,EAAehiC,MAAK4wC,GAAQA,EAAKlwC,QAAU8xC,GAAiBjR,EAAU,GAAG/a,KAAQmsB,KAEzFhC,EAAc5wC,GAAgB,CAAE4K,MAAO,GAAIjK,MAAO,IAExD,OACE2H,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWiR,WACtCvrB,IAAAA,cAACqxB,EAAAA,EAAU,CACT7S,SAAW8S,GAxkBOwZ,EAACxoC,EAAaC,EAAe+nC,KACvD,IAAIG,EAAiBlf,EAAU,GAAGhpB,KAE7BkoC,EAAe3qB,SAAS,OAC3B2qB,GAAkB,IAAIjvB,OAAO,IAG/B,MAAM+G,EAAakoB,EAAenpC,MAAM,KAElCgwB,EAAOhvB,GAAgB,IAAInJ,KAAK,KAAM,EAAG,GAE/CopB,EAAW,GAAG+nB,KAA+B,IAAfA,EAAmBhZ,EAAKv3B,cAAgB4nC,GAAOrQ,GAAME,OAAO,cAE1FD,GAAchP,EAAW7G,KAAK,KAAMnZ,EAAM,EA2jBRuoC,CAAoBxZ,EAAMnT,EAAKmsB,GACzDhoC,MAA4B,KAArBooC,GAA2BA,EAAiB5qB,SAAS,QAAU,KAAO,IAAI3mB,KAAKuxC,GACtFlZ,OAAQ,UACRC,QAAS,IAAIt4B,KACb8G,UAAW,aACXyxB,eAAgB,GAChBC,iBAAkB,GAClBC,gBAAiB,MAIrB5xB,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW4e,WACtCl5B,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOgmC,EACPnhB,QAASwS,EAAAA,EACTnb,SAAW3Q,GAxjBOk9B,EAACl9B,EAAYtL,EAAe+nC,KACtD,IAAIG,EAAiBvR,EAAU,GAAG32B,KAE7BkoC,EAAe3qB,SAAS,OAC3B2qB,GAAkB,IAAIjvB,OAAO,IAG/B,MAAM+G,EAAakoB,EAAenpC,MAAM,KAExCihB,EAAW,GAAG+nB,KAAgBz8B,EAAMxV,MAEpCuhC,GAAcrX,EAAW7G,KAAK,KAAMnZ,EAAM,EA6iBbwoC,CAAoBl9B,EAAOsQ,EAAKmsB,GACrDrqC,UAAW,SACXo4B,cAAc,KAGd,EAIJxU,GAAsB1F,IAC1B,MAAM8Z,EAAS7wB,EAAU,GAAG8K,KAAc9K,UAE1C,OACEpH,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,KAAGC,UAAU,iBAAiBqa,GAAWwJ,eACzC9jB,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWyJ,iBACtC/jB,IAAAA,cAAA,qBACY,SACVC,UAAU,eACVye,UAAU,OACVE,KAAK,aACLJ,SAAW3Q,GAljBImW,EAAC1hB,EAAeC,KACvC,MAAMggB,EAAagZ,EAAangB,QAEhC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBigB,EAAW,GAAGhgB,KAASma,OAEvB8e,EAAgBjZ,GAEhBxB,EAAiBwB,GAEjBG,GAAqB6Y,EAAcI,EAAW,EAmiBjB3X,CAAiBnW,EAAMqN,OAAO5Y,MAAO6b,GAC1Da,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1DW,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7Erd,MAAOi5B,EAAa,GAAGpd,KACvBG,KAAK,OACL8B,aAAa,SAGfpgB,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW2J,aACtCjkB,IAAAA,cAAA,qBACY,SACVC,UAAU,eACVye,UAAU,OACVE,KAAK,aACLJ,SAAW3Q,GA9iBEqW,EAAC5hB,EAAeC,KACrC,MAAMggB,EAAakZ,EAAWrgB,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWD,EAEzBigB,EAAW,GAAGhgB,KAASma,OAEvBgf,EAAcnZ,GAEdvB,EAAmBuB,EAAW,EAiiBD2B,CAAerW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1DW,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAC7Erd,MAAOm5B,EAAW,GAAGtd,KACrBG,KAAK,OACL8B,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,iBACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAW6J,mBACtCnkB,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOq5B,EAAW,GAAGxd,KAAM,YACjB,SACVS,KAAK,aACLJ,SAAW3Q,GAhjBAuW,EAAC9hB,EAAeC,KACrC,MAAMggB,EAAaoZ,EAAWvgB,QAE9B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGfyN,EAAMjO,QAAQ,EACfkuB,EAAW,GAAGhgB,KAAWD,EAEzB+hB,EAAAA,GAAMC,QAAQjO,EAAAA,GAAkC,GAAGnE,MAGrDqQ,EAAW,GAAGhgB,KAASma,OAEvBkf,EAAcrZ,GAEdtB,EAAmBsB,GAEnBG,GAAqB6Y,EAAcI,EAAW,EA6hBfvX,CAAevW,EAAMqN,OAAO5Y,MAAO6b,GACxDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVmgB,aAAa,UAIjBpgB,IAAAA,cAAA,OAAKC,UAAU,mCACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWiK,gBACtCvkB,IAAAA,cAACgnB,EAAAA,GAAM,CACLmR,YAAa0D,EAAY,GAAG1d,KAC5BgJ,QAAS8Q,EACTzZ,SAAW3Q,GAtiBHovB,EAACpvB,EAAYtL,KAC/B,MAAMggB,EAAasZ,EAAYzgB,QAE/B,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,IAGlB0tB,EAAW,GAAGhgB,KAAWsL,EAAMxV,MAE/ByjC,GAAWvZ,GAEXuS,EAAgBvS,EAAW,EA2hBI0a,CAAYpvB,EAAOsQ,GACxCle,UAAW,SACXo4B,cAAc,MAIhB,EAIV,OACEr4B,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,IA1xBFvb,QA0xB0B6gB,QAASrF,GAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,WAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BAhKLke,IAE5Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,GAAWipB,kBACtCvjC,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAOwhC,GAAyB3lB,GAChCgJ,QAASua,EAAO,GAAGxvB,KAAcwvB,OACjCljB,SAAW3Q,GAAU81B,GAAqB91B,EAAOsQ,GACjDle,UAAW,SACXo4B,cAAc,MAuJC8C,CAAuBhd,GACvBqb,GAAgBrb,EAAK,GACrBqqB,GAAoBrqB,EAAK,GACzBqb,GAAgBrb,EAAK,GACrBqqB,GAAoBrqB,EAAK,GACzB0F,GAAmB1F,IAK+B,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAG6lB,GAAY,GAAG3H,MAA+B,QAAzBqC,EAAG1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,SAK5F,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,GAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,IAAW3G,EAAAA,GAA6B,GAAGnE,QAG5E,iaC13BV,MA2iBA,EA3iBuEJ,IAAoR,IAAnR,WAAE+G,EAAU,gBAAE/F,EAAe,WAAE9I,EAAU,SAAE8O,EAAQ,OAAEC,EAAM,UAAEC,EAAS,aAAEE,EAAY,iBAAEC,EAAgB,oBAAEC,EAAmB,2BAAE4xB,EAA0B,qBAAE3xB,EAAoB,UAAEE,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,2BAAEmH,GAA4B1H,EACrV,MAAOmI,EAAYC,IAAiB9N,EAAAA,EAAAA,UAAS,CAACiK,EAAAA,GAA6B,GAAGnE,QACvEiI,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,MAC3CjH,EAAakV,IAAkBjO,EAAAA,EAAAA,UAAS,CAAC,MACzC6+B,EAAoBC,IAAyB9+B,EAAAA,EAAAA,UAAS,CAAC,IAExDkO,EAAajE,EAAAA,GAA4C,GAAGnE,KAE5DqI,EAAY1B,EAAWlhB,MAAK6iB,GAA4B,YAApBA,EAAKkG,aAA2BhG,aACpE7R,EAAegQ,EAAWlhB,MAAK6iB,GAA4B,YAApBA,EAAKkG,aAA2BuB,cACvEtH,EAAgB9B,EAAWlhB,MAAK6iB,GAA4B,YAApBA,EAAKkG,aAA2B9F,eAQxE,aAAEC,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MAE1BC,EAAsBA,CAACnN,EAAYtL,KACvC0Y,EAAoBpN,EAAMqN,OAAO5Y,MAAOC,GAExC,IAAI4Y,EAAoBhB,EAAaiB,QACjCC,EAAuBF,EAAkB,GAAG5Y,KAC5C+Y,EAAoBD,EAAqB/Z,MAAM,KAE/Cia,EAAqBpW,EAAYiW,QAGrC,GAFAG,EAAmB,GAAGhZ,KAAW,GAE7BsL,EAAMqN,OAAO5Y,QAAU+T,EAAAA,GAA6B,GAAGnE,KACzD,GAAIoJ,EAAkBjnB,OAASkmB,EAC7Bc,GAAwB,IAAIG,OAAOjB,EAAYe,EAAkBjnB,OAAS,OACrE,CACL,KAAOinB,EAAkBjnB,OAASkmB,GAChCe,EAAkBG,MAEpBJ,EAAuBC,EAAkBI,KAAK,UAE3C,GAAI7N,EAAMqN,OAAO5Y,QAAU+T,EAAAA,GAA8B,GAAGnE,KACjE,GAAIoJ,EAAkBjnB,OAASwU,EAC7BwS,GAAwB,IAAIG,OAAO3S,EAAeyS,EAAkBjnB,OAAS,OACxE,CACL,KAAOinB,EAAkBjnB,OAASwU,GAChCyS,EAAkBG,MAEpBJ,EAAuBC,EAAkBI,KAAK,UAGhD,GAAIJ,EAAkBjnB,OAASsmB,EAC7BU,GAAwB,IAAIG,OAAOb,EAAgBW,EAAkBjnB,OAAS,OACzE,CACL,KAAOinB,EAAkBjnB,OAASsmB,GAChCW,EAAkBG,MAEpBJ,EAAuBC,EAAkBI,KAAK,KAIlDP,EAAkB,GAAG5Y,KAAW8Y,EAEhCjB,EAAgBe,GAChBd,EAAekB,GAEfrC,EAAaiC,GACb/B,EAAoBmC,EAAmB,EAiBnCN,EAAsBA,CAAC3Y,EAAeC,KAC1C,IAAI8Z,EAAkBpC,EAAWmB,QAEjC,UAA8C,IAAhCiB,EAAgB,GAAG9Z,MAC/B8Z,EAAgBxnB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MAGvDmK,EAAgB,GAAG9Z,KAAWD,EAE9B4X,EAAcmC,GAEdlD,EAAiBkD,EAAgB,EAG7BC,EAAeA,CAACha,EAAeia,KACnC,GAAIja,EAAO,CACT,MAAMoB,EAAQpB,EAAMhB,MAAM,KAE1B,OAAOoC,EAAM,GAAG6Y,KAAe7Y,EAAM,GAAG6Y,KAAe,GAGzD,MAAO,EAAE,EAqBLC,EAAwBA,CAACC,EAAcla,KAC3C,MAAM4Y,EAAoBhB,EAAaiB,QAEvC,UAAgD,IAAlCD,EAAkB,GAAG5Y,MACjC4Y,EAAkBtmB,KAAK,IAGzBsmB,EAAkB,GAAG5Y,KAAWka,EAEhCtB,EAAkB,GAAG5Y,KAASma,OAE9BtC,EAAgBe,GAEhBjC,EAAaiC,GAEbwB,EAAmBxB,EAAmBhW,EAAa8U,EAAW,EAS1D2C,EAAuBA,CAACH,EAAcla,KAC1C,MAAMsa,EAAmB1X,EAAYiW,QAErC,UAA+C,IAAjCyB,EAAiB,GAAGta,MAChCsa,EAAiBhoB,KAAK,IAGxBgoB,EAAiB,GAAGta,KAAWka,EAE/BI,EAAiB,GAAGta,KAASma,OAE7BrC,EAAewC,GAEfzD,EAAoByD,GAEpBF,EAAmBxC,EAAc0C,EAAkB5C,EAAW,EAG1DkxB,EAA8B5oC,IAClC,GAAI0oC,EAAmB52C,OAAS,EAAG,CACjC,MAAM8xB,EAAmB8kB,EAAmB7vB,QAE5C,YAA4C,IAAjC+K,EAAiB,GAAG5jB,MAA4D,GAAhC4jB,EAAiB,GAAG5jB,KACtEyK,EAAS,GAAGkF,KAAclF,SAASrV,MAAM/C,GAA2CA,EAAK0N,QAAU0D,OAAOmgB,EAAiB,GAAG5jB,QAE9H,KAIX,OAAO,IAAI,EAGPoa,EAAqBA,CAACxB,EAA6B0B,EAA4BC,KACnF,IAAIC,GAAe,EAEnB,IAAK,IAAI/lB,EAAI,EAAGA,EAAImkB,EAAkB9mB,OAAQ2C,IAAK,CACjD,GAA2D,KAAvDmkB,EAAkB,GAAGnkB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC7DK,GAAe,EACf,MAGF,GAAID,EAAc,GAAG9lB,OAASqf,EAAAA,GAA+B,GAAGnE,MAAqD,KAApC2K,EAAiB,GAAG7lB,KAAK0lB,OAAe,CACvHK,GAAe,EACf,OAIJ1D,EAAqB0D,EAAa,EAG9BC,EAAWA,KACfjE,EAAO,GAEP,IAAIkE,EAAqBhD,EAAWmB,QAChCD,EAAoBhB,EAAaiB,QACjCyB,EAAmB1X,EAAYiW,QAC/BgwB,EAA0BH,EAAmB7vB,QAEjD6B,EAAmBpoB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MACxDiJ,EAAkBtmB,KAAK,IACvBgoB,EAAiBhoB,KAAK,IACtBu2C,EAAwBv2C,KAAK,GAE7BqlB,EAAc+C,GACd7C,EAAgBe,GAChBd,EAAewC,GACfquB,EAAsBE,GAEtBjyB,EAAiB8D,GACjB/D,EAAaiC,GACb/B,EAAoByD,GACpBmuB,EAA2BI,GAE3BzuB,EAAmBxB,EAAmB0B,EAAkBI,EAAmB,EAGvEC,EAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,EAAiB/a,SAInByW,EAAUzW,GACV+a,EAAiB/a,QAGnByW,EAAUzW,GACV+a,EAAiB/a,IAIf+a,EAAoB/a,IACxB,IAAI0a,EAAqBhD,EAAWmB,QAChCD,EAAoBhB,EAAaiB,QACjCyB,EAAmB1X,EAAYiW,QAC/BgwB,EAA0BH,EAAmB7vB,aAEH,IAAnC6B,EAAmB,GAAG1a,OAC3B0a,EAAmB5oB,OAAS,EAC9B4oB,EAAmBI,OAAO9a,EAAO,GAEjC0a,EAAmB,GAAK5G,EAAAA,GAA6B,GAAGnE,WAIf,IAAlCiJ,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,SAIiB,IAAjC0B,EAAiB,GAAGta,OACzBsa,EAAiBxoB,OAAS,EAC5BwoB,EAAiBQ,OAAO9a,EAAO,GAE/Bsa,EAAiB,GAAK,SAIyB,IAAxCuuB,EAAwB,GAAG7oC,OAChC6oC,EAAwB/2C,OAAS,EACnC+2C,EAAwB/tB,OAAO9a,EAAO,GAEtC6oC,EAAwB,GAAK,GAIjClxB,EAAc+C,GACd7C,EAAgBe,GAChBd,EAAewC,GACfquB,EAAsBE,GAEtBjyB,EAAiB8D,GACjB/D,EAAaiC,GACb/B,EAAoByD,GACpBmuB,EAA2BI,GAE3BzuB,EAAmBxB,EAAmB0B,EAAkBI,EAAmB,GAG7EpG,EAAAA,EAAAA,YAAU,KACR,IAAIwE,EAAiC,GACjCwC,EAAgC,GAChCD,EAA+B,GAC/BytB,EAAuC,CAAC,GAE5C,GAAI9xB,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,IAAI+mB,EAAsBxE,EAAU,GAAGviB,KAAY,MAC/Cs0C,EAAkB/xB,EAAU,GAAGviB,KAAkB,YACjD8mB,EAAevE,EAAU,GAAGviB,KAAe,SAC3Cu0C,OAA4E,IAA5ChyB,EAAU,GAAGviB,KAAyB,mBAAoBuiB,EAAU,GAAGviB,KAAyB,mBAAI,EAEpIgnB,EAAgB,EAGlBA,EADEF,IAAiBzH,EAAAA,GAA6B,GAAGnE,KACnCqI,EACPuD,IAAiBzH,EAAAA,GAA8B,GAAGnE,KAC3CrJ,EAEA8R,EAGlB,IAAIsD,EAAW,GAEfF,EAAUppB,KAAI,CAAC8nB,EAAMla,KAEjB0b,GADW,GAAT1b,GAAcA,EAAQyb,EACZ,IAAMvB,EAENA,KAIhBpB,EAAqBxmB,KAAKopB,GAC1BJ,EAAoBhpB,KAAKy2C,GACzB1tB,EAAmB/oB,KAAKipB,GAEf,GAAL9mB,EACFq0C,EAA2B,GAAKE,EAEhCF,EAA2Bx2C,KAAK02C,GAIpCnxB,EAAgBiB,GAChBhB,EAAewD,GACf3D,EAAc0D,GACdstB,EAAsBG,GAEtBnyB,EAAamC,GACbjC,EAAoByE,GACpB1E,EAAiByE,GACjBotB,EAA2BK,GAE3B1uB,EAAmBtB,EAAsBwC,EAAqBD,QAE9DzE,EAAiBc,KAElB,CAACV,IAEJ,MAgDM2F,EAAkBA,CAACf,EAAa5D,KACpC,MAAMkJ,EAAYnJ,EAAWmC,KAG7B,OAFmB2C,MAAMC,MAAM,KAAMD,MAAM7E,IAAY5lB,KAAI,SAAU2qB,EAAGtoB,GAAK,OAAOA,CAAG,IAErErC,KAAK4nB,GAEnBvc,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcwjB,EAAUjE,SAAS,KAAqB,IAAdjD,EAAkBkH,EAAU5e,UAAU,EAAG4e,EAAUpvB,OAAS,GAAK,KAAOkoB,EAAY,GAAK,IAAMkH,EAAUzS,QAAQ,IAAK,KAAOuL,EAAY,IAAMkH,EAAY,IAAMlH,EAAY,GAClOvc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOga,EAAanC,EAAa,GAAGgE,KAAQ5B,GAAU,YAC5C,SACVqC,KAAK,aACLJ,SAAW3Q,GArUY4R,EAAC5R,EAAYtL,EAAega,EAAmBhC,KAChF,IAAImF,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAE9EC,EAAY/R,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GACxDG,EAAoB1F,EAAa,GAAG5X,KAEnCsd,EAAkBC,SAAS,OAC9BD,GAAqB,IAAIrE,OAAOjB,EAAY,IAG9C,IAAIwF,EAAyBF,EAAkBve,MAAM,KAErDye,EAAuB,GAAGxD,KAAeqD,EACzCA,EAAYG,EAAuBrE,KAAK,KAExCc,EAAsBoD,EAAWrd,EAAM,EAsTRkd,CAA2B5R,EAAOsQ,EAAK5B,EAAWhC,GACvEyE,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,QAKrF,EAGE6rB,EAA4BrtB,GAE9Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,qBACbD,IAAAA,cAAA,MAAIC,UAAU,gBACdD,IAAAA,cAAA,KAAGC,UAAU,mBAAmBqa,EAAWmxB,cAC3CzrC,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWoxB,iBACtC1rC,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAACgnB,EAAAA,GAAM,CACL1kB,MAAO6oC,EAA2BhtB,GAClCga,YAAa7d,EAAWqxB,mBACxBxkB,QAASna,EAAS,GAAGkF,KAAclF,SACnCwR,SAAW3Q,GAlYQ+9B,EAAC/9B,EAAYtL,KAC1C,MAAMggB,EAAa0oB,EAAmB7vB,QAEtC,UAAyC,IAA3BmH,EAAW,GAAGhgB,MAC1BggB,EAAW1tB,KAAK,GAGlB0tB,EAAW,GAAGhgB,MAAYsL,EAAMvL,MAEhC4oC,EAAsB3oB,GAEtByoB,EAA2BzoB,EAAW,EAuXPqpB,CAAuB/9B,EAAOsQ,GACnDle,UAAW,kBACXo4B,cAAc,OAQpB0P,EAA0B5pB,GAE5Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWnV,aACtCnF,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO6C,EAAY,GAAGgZ,KAAM,YAClB,SACVS,KAAK,aACLJ,SAAW3Q,GA7UQoS,EAACpS,EAAYtL,KACxC,IAAImd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAElF/C,EAAqB/O,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EA0U9C0d,CAAqBpS,EAAOsQ,GACjDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OAOvF,OACE3f,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GA3dFvb,QA2d0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,aAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BAjIRke,SACS,IAAzBlE,EAAW,GAAGkE,KAChB,KAIPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,UACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW+F,UACtCrgB,IAAAA,cAAA,OAAKC,UAAU,kBACbD,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA6B,GAAGnE,KACvCqM,QAAStE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAAc,eACzE+H,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAC9EsM,SAAW3Q,GAAUmN,EAAoBnN,EAAOsQ,KAEjD9H,EAAAA,GAA6B,GAAGnE,MAGnClS,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA8B,GAAGnE,KACxCqM,QAAStE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,MAAc,eAC1E+H,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,MAC/EsM,SAAW3Q,GAAUmN,EAAoBnN,EAAOsQ,KAEjD9H,EAAAA,GAA8B,GAAGnE,MAGpClS,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA+B,GAAGnE,KACzCqM,QAAStE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA+B,GAAGnE,MAAc,eAC3E+H,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA+B,GAAGnE,MAChFsM,SAAW3Q,GAAUmN,EAAoBnN,EAAOsQ,KAEjD9H,EAAAA,GAA+B,GAAGnE,SA0FtBqO,CAAoBpC,GACpBlE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,OAAkBqI,EAAY,GAAK2E,EAAgBf,EAAK5D,GACxHN,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,OAAkBrJ,EAAe,GAAKqW,EAAgBf,EAAKtV,GAC5HoR,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA+B,GAAGnE,OAAkByI,EAAgB,GAAKuE,EAAgBf,EAAKxD,GAC9HV,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,QAAmByI,EAAgB,GAAK9R,EAAe,IAAMk/B,EAAuB5pB,GACpJqtB,EAAyBrtB,IAKyB,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,KAAyB,QAAtBugB,EAAA1N,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,QAAUiS,EAAaA,EAAWjS,MAAQkzC,EAAmB,GAAG9sB,KAAS,KAK7I,GAA2B,WAAvBpC,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,QAI5E,oJC5iBV,MA+dA,EA/d0DJ,IAA4O,IAA3O,WAAE+G,EAAU,gBAAE/F,EAAe,SAAEgG,EAAQ,OAAEC,EAAM,UAAEC,EAAS,aAAEE,EAAY,iBAAEC,EAAgB,oBAAEC,EAAmB,qBAAEC,EAAoB,UAAEE,EAAS,OAAEtK,EAAM,WAAEiD,EAAU,cAAEte,EAAa,SAAEgL,EAAQ,WAAEyT,EAAU,2BAAEmH,GAA4B1H,EAChS,MAAOmI,EAAYC,IAAiB9N,EAAAA,EAAAA,UAAS,CAACiK,EAAAA,GAA6B,GAAGnE,QACvEiI,EAAcC,IAAmBhO,EAAAA,EAAAA,UAAS,CAAC,MAC3CjH,EAAakV,IAAkBjO,EAAAA,EAAAA,UAAS,CAAC,KAE1CkO,EAAajE,EAAAA,GAAgC,GAAGnE,KAEhDqI,EAAY1B,EAAWlhB,MAAK6iB,GAA4B,YAApBA,EAAKkG,aAA2BhG,aACpE7R,EAAegQ,EAAWlhB,MAAK6iB,GAA4B,YAApBA,EAAKkG,aAA2BuB,cACvEtH,EAAgB9B,EAAWlhB,MAAK6iB,GAA4B,YAApBA,EAAKkG,aAA2B9F,eAQxE,aAAEC,EAAY,MAAEC,IAAUC,EAAAA,EAAAA,MAE1BC,EAAsBA,CAACnN,EAAYtL,KACvC0Y,EAAoBpN,EAAMqN,OAAO5Y,MAAOC,GAExC,IAAI4Y,EAAoBhB,EAAaiB,QACjCC,EAAuBF,EAAkB,GAAG5Y,KAC5C+Y,EAAoBD,EAAqB/Z,MAAM,KAE/Cia,EAAqBpW,EAAYiW,QAGrC,GAFAG,EAAmB,GAAGhZ,KAAW,GAE7BsL,EAAMqN,OAAO5Y,QAAU+T,EAAAA,GAA6B,GAAGnE,KACzD,GAAIoJ,EAAkBjnB,OAASkmB,EAC7Bc,GAAwB,IAAIG,OAAOjB,EAAYe,EAAkBjnB,OAAS,OACrE,CACL,KAAOinB,EAAkBjnB,OAASkmB,GAChCe,EAAkBG,MAEpBJ,EAAuBC,EAAkBI,KAAK,UAE3C,GAAI7N,EAAMqN,OAAO5Y,QAAU+T,EAAAA,GAA8B,GAAGnE,KACjE,GAAIoJ,EAAkBjnB,OAASwU,EAC7BwS,GAAwB,IAAIG,OAAO3S,EAAeyS,EAAkBjnB,OAAS,OACxE,CACL,KAAOinB,EAAkBjnB,OAASwU,GAChCyS,EAAkBG,MAEpBJ,EAAuBC,EAAkBI,KAAK,UAGhD,GAAIJ,EAAkBjnB,OAASsmB,EAC7BU,GAAwB,IAAIG,OAAOb,EAAgBW,EAAkBjnB,OAAS,OACzE,CACL,KAAOinB,EAAkBjnB,OAASsmB,GAChCW,EAAkBG,MAEpBJ,EAAuBC,EAAkBI,KAAK,KAIlDP,EAAkB,GAAG5Y,KAAW8Y,EAEhCjB,EAAgBe,GAChBd,EAAekB,GAEfrC,EAAaiC,GACb/B,EAAoBmC,EAAmB,EAGnCN,EAAsBA,CAAC3Y,EAAeC,KAC1C,IAAI8Z,EAAkBpC,EAAWmB,QAEjC,UAA8C,IAAhCiB,EAAgB,GAAG9Z,MAC/B8Z,EAAgBxnB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MAGvDmK,EAAgB,GAAG9Z,KAAWD,EAE9B4X,EAAcmC,GAEdlD,EAAiBkD,EAAgB,EAG7BC,EAAeA,CAACha,EAAeia,KACnC,GAAIja,EAAO,CACT,MAAMoB,EAAQpB,EAAMhB,MAAM,KAE1B,OAAOoC,EAAM,GAAG6Y,KAAe7Y,EAAM,GAAG6Y,KAAe,GAGzD,MAAO,EAAE,EAqBLC,EAAwBA,CAACC,EAAcla,KAC3C,MAAM4Y,EAAoBhB,EAAaiB,QAEvC,UAAgD,IAAlCD,EAAkB,GAAG5Y,MACjC4Y,EAAkBtmB,KAAK,IAGzBsmB,EAAkB,GAAG5Y,KAAWka,EAEhCtB,EAAkB,GAAG5Y,KAASma,OAE9BtC,EAAgBe,GAEhBjC,EAAaiC,GAEbwB,EAAmBxB,EAAmBhW,EAAa8U,EAAW,EAS1D2C,EAAuBA,CAACH,EAAcla,KAC1C,MAAMsa,EAAmB1X,EAAYiW,QAErC,UAA+C,IAAjCyB,EAAiB,GAAGta,MAChCsa,EAAiBhoB,KAAK,IAGxBgoB,EAAiB,GAAGta,KAAWka,EAE/BI,EAAiB,GAAGta,KAASma,OAE7BrC,EAAewC,GAEfzD,EAAoByD,GAEpBF,EAAmBxC,EAAc0C,EAAkB5C,EAAW,EAG1D0C,EAAqBA,CAACxB,EAA6B0B,EAA4BC,KACnF,IAAIC,GAAe,EAEnB,IAAK,IAAI/lB,EAAI,EAAGA,EAAImkB,EAAkB9mB,OAAQ2C,IAAK,CACjD,GAA2D,KAAvDmkB,EAAkB,GAAGnkB,KAAKga,QAAQ,KAAM,IAAI0L,OAAe,CAC7DK,GAAe,EACf,MAGF,GAAID,EAAc,GAAG9lB,OAASqf,EAAAA,GAA+B,GAAGnE,MAAqD,KAApC2K,EAAiB,GAAG7lB,KAAK0lB,OAAe,CACvHK,GAAe,EACf,OAIJ1D,EAAqB0D,EAAa,EAG9BC,EAAWA,KACfjE,EAAO,GAEP,MAAMkE,EAAqBhD,EAAWmB,QAChCD,EAAoBhB,EAAaiB,QACjCyB,EAAmB1X,EAAYiW,QAErC6B,EAAmBpoB,KAAKwhB,EAAAA,GAA6B,GAAGnE,MACxDiJ,EAAkBtmB,KAAK,IACvBgoB,EAAiBhoB,KAAK,IAEtBqlB,EAAc+C,GACd7C,EAAgBe,GAChBd,EAAewC,GAEf1D,EAAiB8D,GACjB/D,EAAaiC,GACb/B,EAAoByD,GAEpBxD,GAAqB,EAAM,EAGvB6D,EAAkB7pB,UACtB,QAAqC,IAA1BkmB,EAAU,GAAGhX,KAA0B,CAChD,MAAML,QAAkBC,EAAAA,EAAAA,cAAavO,GAErC,IAAIupB,GAAU,EAId,UAFwB1a,EAAAA,EAAAA,GAAwB,CAAE9O,cAAeC,GAAiBsO,EAAUQ,KAAKlK,KAEnFnE,OAAS,EAAG,CAGa,mBAFH6N,EAAUa,gBAAgB,CAAEC,YAAa,CAACuW,EAAU,GAAGhX,KAAqB,eAEpFU,SACxBka,GAAU,GAGZ,IAAIC,QAA6B5Z,EAAAA,EAAAA,IAAwB,CAAE7P,cAAeC,GAAiB2lB,EAAU,GAAGhX,KAAqB,YAEzH4a,GAAWC,IACbpE,EAAUzW,GACVgX,EAAU8D,OAAO9a,EAAO,GACxB+a,EAAiB/a,SAInByW,EAAUzW,GACV+a,EAAiB/a,QAGnByW,EAAUzW,GACV+a,EAAiB/a,IAIf+a,EAAoB/a,IACxB,MAAM0a,EAAqBhD,EAAWmB,QAChCD,EAAoBhB,EAAaiB,QACjCyB,EAAmB1X,EAAYiW,aAES,IAAnC6B,EAAmB,GAAG1a,OAC3B0a,EAAmB5oB,OAAS,EAC9B4oB,EAAmBI,OAAO9a,EAAO,GAEjC0a,EAAmB,GAAK5G,EAAAA,GAA6B,GAAGnE,WAIf,IAAlCiJ,EAAkB,GAAG5Y,OAC1B4Y,EAAkB9mB,OAAS,EAC7B8mB,EAAkBkC,OAAO9a,EAAO,GAEhC4Y,EAAkB,GAAK,SAIiB,IAAjC0B,EAAiB,GAAGta,OACzBsa,EAAiBxoB,OAAS,EAC5BwoB,EAAiBQ,OAAO9a,EAAO,GAE/Bsa,EAAiB,GAAK,IAI1B3C,EAAc+C,GACd7C,EAAgBe,GAChBd,EAAewC,GAEf1D,EAAiB8D,GACjB/D,EAAaiC,GACb/B,EAAoByD,GAEpBF,EAAmBxB,EAAmB0B,EAAkB5C,EAAW,GAGrEpD,EAAAA,EAAAA,YAAU,KACR,MAAMwE,EAAiC,GACjCwC,EAAgC,GAChCD,EAA+B,GAErC,GAAIrE,EAAUllB,OAAS,EAAG,CACxB,IAAK,IAAI2C,EAAI,EAAGA,EAAIuiB,EAAUllB,OAAQ2C,IAAK,CACzC,IAAI+mB,EAAsBxE,EAAU,GAAGviB,KAAY,MAC/Cs0C,EAAkB/xB,EAAU,GAAGviB,KAAkB,YACjD8mB,EAAevE,EAAU,GAAGviB,KAAe,SAE3CgnB,EAAgB,EAGlBA,EADEF,IAAiBzH,EAAAA,GAA6B,GAAGnE,KACnCqI,EACPuD,IAAiBzH,EAAAA,GAA8B,GAAGnE,KAC3CrJ,EAEA8R,EAGlB,IAAIsD,EAAW,GAEfF,EAAUppB,KAAI,CAAC8nB,EAAMla,KAEjB0b,GADW,GAAT1b,GAAcA,EAAQyb,EACZ,IAAMvB,EAENA,KAIhBpB,EAAqBxmB,KAAKopB,GAC1BJ,EAAoBhpB,KAAKy2C,GACzB1tB,EAAmB/oB,KAAKipB,GAG1B1D,EAAgBiB,GAChBhB,EAAewD,GACf3D,EAAc0D,GAEd1E,EAAamC,GACbjC,EAAoByE,GACpB1E,EAAiByE,GAEjBjB,EAAmBtB,EAAsBwC,EAAqBD,QAE9DzE,EAAiBc,KAElB,CAACV,IAEJ,MAgDM2F,EAAkBA,CAACf,EAAa5D,KACpC,MAAMkJ,EAAYnJ,EAAWmC,KAG7B,OAFmB2C,MAAMC,MAAM,KAAMD,MAAM7E,IAAY5lB,KAAI,SAAU2qB,EAAGtoB,GAAK,OAAOA,CAAG,IAErErC,KAAK4nB,GAEnBvc,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcwjB,EAAUjE,SAAS,KAAqB,IAAdjD,EAAkBkH,EAAU5e,UAAU,EAAG4e,EAAUpvB,OAAS,GAAK,KAAOkoB,EAAY,GAAK,IAAMkH,EAAUzS,QAAQ,IAAK,KAAOuL,EAAY,IAAMkH,EAAY,IAAMlH,EAAY,GAClOvc,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAOga,EAAanC,EAAa,GAAGgE,KAAQ5B,GAAU,YAC5C,SACVqC,KAAK,aACLJ,SAAW3Q,GA9RY4R,EAAC5R,EAAYtL,EAAega,EAAmBhC,KAChF,MAAMmF,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF,IAAIC,EAAY/R,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GACxDG,EAAoB1F,EAAa,GAAG5X,KAEnCsd,EAAkBC,SAAS,OAC9BD,GAAqB,IAAIrE,OAAOjB,EAAY,IAG9C,IAAIwF,EAAyBF,EAAkBve,MAAM,KAErDye,EAAuB,GAAGxD,KAAeqD,EACzCA,EAAYG,EAAuBrE,KAAK,KAExCc,EAAsBoD,EAAWrd,EAAM,EA+QRkd,CAA2B5R,EAAOsQ,EAAK5B,EAAWhC,GACvEyE,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,QAKrF,EAGEooB,EAA0B5pB,GAE5Bne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAWnV,aACtCnF,IAAAA,cAAA,SACEse,KAAK,OACLI,UAAU,OACVpc,MAAO6C,EAAY,GAAGgZ,KAAM,YAClB,SACVS,KAAK,aACLJ,SAAW3Q,GAhRQoS,EAACpS,EAAYtL,KACxC,MAAMmd,EAAYzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,GAEpF/C,EAAqB/O,EAAMqN,OAAO5Y,MAAMuC,UAAU,EAAG6a,EAAY,GAAInd,EAAM,EA6Q9C0d,CAAqBpS,EAAOsQ,GACjDa,UAAYnR,IAAkC,KAAlBA,EAAMoR,SAAkBpR,EAAMkR,kBAC1D9e,UAAU,eACVyf,UAAWzQ,EAAO0Q,wBAA0B1Q,EAAO0Q,wBAA0B,OAOvF,OACE3f,IAAAA,cAAA,OAAKC,UAAU,uBACbD,IAAAA,cAAA,QAAMkgB,SAAUrF,GAhZFvb,QAgZ0B6gB,QAASrF,EAAOsF,aAAa,OACnEpgB,IAAAA,cAAA,OAAKC,UAAU,6BACZ6Y,EAASnkB,KAAI,CAACqC,EAAGmnB,IAEdne,IAAAA,cAAA,OAAKC,UAAU,eACbD,IAAAA,cAAA,OAAK4Y,IAAK,MAAM5hB,EAAEwV,KAAMvM,UAAU,oBAC/B4Y,EAAWlkB,KAAI,CAAConB,EAAiBxZ,KAEhC,GAA2B,aAAvBwZ,EAAQtB,WACV,OACEza,IAAAA,cAAA,OAAKC,UAAU,8BA3GRke,SACS,IAAzBlE,EAAW,GAAGkE,KAChB,KAIPne,IAAAA,cAAA,OAAKC,UAAU,OACbD,IAAAA,cAAA,OAAKC,UAAU,UACbD,IAAAA,cAAA,KAAGC,UAAU,cAAcqa,EAAW+F,UACtCrgB,IAAAA,cAAA,OAAKC,UAAU,kBACbD,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA6B,GAAGnE,KACvCqM,QAAStE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAAc,eACzE+H,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,MAC9EsM,SAAW3Q,GAAUmN,EAAoBnN,EAAOsQ,KAEjD9H,EAAAA,GAA6B,GAAGnE,MAGnClS,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA8B,GAAGnE,KACxCqM,QAAStE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,MAAc,eAC1E+H,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,MAC/EsM,SAAW3Q,GAAUmN,EAAoBnN,EAAOsQ,KAEjD9H,EAAAA,GAA8B,GAAGnE,MAGpClS,IAAAA,cAAA,SAAOC,UAAU,gCACfD,IAAAA,cAAA,SACEse,KAAK,QACLhc,MAAO+T,EAAAA,GAA+B,GAAGnE,KACzCqM,QAAStE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA+B,GAAGnE,MAAc,eAC3E+H,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA+B,GAAGnE,MAChFsM,SAAW3Q,GAAUmN,EAAoBnN,EAAOsQ,KAEjD9H,EAAAA,GAA+B,GAAGnE,SAoEtBqO,CAAoBpC,GACpBlE,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA6B,GAAGnE,OAAkBqI,EAAY,GAAK2E,EAAgBf,EAAK5D,GACxHN,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA8B,GAAGnE,OAAkBrJ,EAAe,GAAKqW,EAAgBf,EAAKtV,GAC5HoR,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA+B,GAAGnE,OAAkByI,EAAgB,GAAKuE,EAAgBf,EAAKxD,GAC9HV,EAAW,GAAGkE,OAAWnY,OAAOqQ,EAAAA,GAA+B,GAAGnE,OAAkByI,EAAgB,GACnGotB,EAAuB5pB,IAK0B,IAAAqC,EAAzD,IAAK5hB,GAAmC,kBAAvBmd,EAAQ2E,WACvB,OACE1gB,IAAAA,cAAA,OAAKC,UAAU,4CACbD,IAAAA,cAAA,KAAG4Y,IAAKrW,EAAOtC,UAAU,YAAU,IAAyB,QAAzB,EAAG6S,EAAgB9c,cAAM,IAAAwqB,OAAA,EAAtBA,EAAwBzoB,QAKpE,GAA2B,WAAvBgkB,EAAQ2E,WAAyB,CACnC,GAAI9hB,EAAU,CACZ,MAAM+hB,EAAStO,EAAmC,yBAAtB,oBAE5B,OACErS,IAAAA,cAAA,OAAKC,UAAW0gB,IACZtO,GAAcmH,GAA8BxZ,IAAAA,cAAA,OAAKC,UAAU,UAC3DD,IAAAA,cAAA,UAAQC,UAAU,UAAUqe,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,OAEhGlS,IAAAA,cAAA,OAAKC,UAAU,wBAAuBD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,OAK9G,OACEne,IAAAA,cAAA,OAAKC,UAAU,sCACbD,IAAAA,cAAA,UAAQC,UAAW8b,EAAQ6E,OAAQpf,QAASA,IAAM0b,EAAgBiB,MAKlE,UAQhBvf,IAAayT,GAAcmH,GAC3BxZ,IAAAA,cAAA,OAAKC,UAAU,2BACbD,IAAAA,cAAA,UAAQse,KAAK,SAAS9c,QAASwb,GAAW3G,EAAAA,GAA6B,GAAGnE,QAI5E,iBC5fV,IAAIvd,EAAM,CACT,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,QAAS,IACT,WAAY,IACZ,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,gBAAiB,IACjB,aAAc,IACd,gBAAiB,IACjB,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,UAAW,IACX,aAAc,IACd,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,WAAY,IACZ,cAAe,IACf,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,WAAY,IACZ,cAAe,IACf,UAAW,IACX,aAAc,IACd,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,YAAa,IACb,eAAgB,IAChB,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,QAAS,IACT,WAAY,IACZ,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,UAAW,IACX,aAAc,IACd,QAAS,IACT,WAAY,IACZ,OAAQ,IACR,UAAW,IACX,QAAS,IACT,WAAY,IACZ,QAAS,IACT,aAAc,IACd,gBAAiB,IACjB,WAAY,IACZ,UAAW,IACX,aAAc,IACd,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,YAAa,IACb,eAAgB,IAChB,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,gBAAiB,IACjB,OAAQ,IACR,UAAW,IACX,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,KAIf,SAASk3C,EAAeC,GACvB,IAAIt/B,EAAKu/B,EAAsBD,GAC/B,OAAOE,EAAoBx/B,EAC5B,CACA,SAASu/B,EAAsBD,GAC9B,IAAIE,EAAoBC,EAAEt3C,EAAKm3C,GAAM,CACpC,IAAIxZ,EAAI,IAAI4Z,MAAM,uBAAyBJ,EAAM,KAEjD,MADAxZ,EAAE6Z,KAAO,mBACH7Z,CACP,CACA,OAAO39B,EAAIm3C,EACZ,CACAD,EAAeO,KAAO,WACrB,OAAO/+B,OAAO++B,KAAKz3C,EACpB,EACAk3C,EAAeje,QAAUme,EACzBM,EAAOC,QAAUT,EACjBA,EAAer/B,GAAK","sources":["webpack://Msdyn365.Commerce.Online/./src/actions/helper-functions.ts?5715","webpack://Msdyn365.Commerce.Online/./src/components/breakpoints.ts?f4e7","webpack://Msdyn365.Commerce.Online/./src/components/enums.ts?ba3b","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/component/ecomm-form-price-component.tsx?0905","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/component/ecomm-form-add-to-cart-source.component.tsx?93f7","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/utilities/btrts-donations-error-utilities.ts?08f2","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/component/ecomm-form-add-to-cart.component.tsx?356d","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/amountDeceasedNameForm.component.tsx?ac48","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/categoryNamesAddressForm.component.tsx?993c","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/categoryNamesCollectionForm.component.tsx?c269","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/categoryNamesForm.component.tsx?2d96","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/ceremonyForm.component.tsx?e051","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/coursesForm.component.tsx?7152","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/deceasedCategoryNamesForm.component.tsx?dd58","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/deceasedDedicatedByForm.component.tsx?ada7","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/donationForm.component.tsx?7b1f","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/eventCategoryNamesForm.component.tsx?bee6","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/eventDeceasedDedicatedByForm.component.tsx?af5a","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/eventPassportUploadInsuranceForm.component.tsx?55fe","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/eventTaxDeductionForm.component.tsx?d9a4","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/eventsChineseNameForm.component.tsx?0d9c","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/eventsNextOfKinNameForm.component.tsx?4eed","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/eventsPassportUploadForm.component.tsx?7118","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/nameBirthDatetimeForm.component.tsx?8dcc","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/nameBirthdaySchoolForm.component.tsx?f7bc","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/nameDedicationStartDate.component.tsx?820b","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/namesAddressContactnoForm.component.tsx?cf85","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/namesOnlyForm.component.tsx?b690","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/namesRemarksForm.component.tsx?b498","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/noOfYearsCategoryNamesForm.component.tsx?3a5e","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/offeringForm.component.tsx?1ca2","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/servicesBusinessForm.component.tsx?1156","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/servicesDeceasedForm.component.tsx?c9cf","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/servicesEducationForm.component.tsx?7b46","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/servicesGeneralForm.component.tsx?a844","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/servicesHealthSurgeryForm.component.tsx?8b27","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/servicesInfantSpiritForm.component.tsx?2217","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/servicesMarriageForm.component.tsx?9567","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/threeCategoryNamesConsecrationForm.component.tsx?9007","webpack://Msdyn365.Commerce.Online/./src/modules/ecomm-product-details-form/formsComponents/threeCategoryNamesForm.component.tsx?2117","webpack://Msdyn365.Commerce.Online/./node_modules/moment/locale/ sync ^\\.\\/.*$?b2df"],"sourcesContent":["import { ICoreContext } from '@msdyn365-commerce/core';\r\n\r\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\r\n\r\nimport { AsyncResult, Customer, Product, ProductSearchCriteria, ProductSearchResult, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { getOrderHistoryAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CustomersDataActions.g';\r\nimport { searchAsync, searchByCategoryAsync, getByIdsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\n\r\nimport { v4 as uuidv4, validate as uuidValidate, version as uuidVersion } from 'uuid';\r\n\r\nimport { createOrUpdateBTGPCartLineAsync, createBTGPErrorLogAsync, getByCustomerAllBTGPTransactionAsync } from '../actions/DataActionExtension.g';\r\nimport { CategoryProducts, FormDetails, PastTransaction, CartItem, Transaction } from '../actions/ecomm-interfaces';\r\n\r\nimport DedicationPeriod from '../resources/dedicationPeriod.json';\r\n\r\nexport async function getProductsByCategoryId(context: ICoreContext, categoryId: number): Promise {\r\n const searchResult = await searchByCategoryAsync({ callerContext: context.actionContext }, context.actionContext.requestContext.apiSettings.channelId, context.actionContext.requestContext.apiSettings.catalogId, categoryId).catch(error => console.log('[getProductsByCategoryId] searchByCategoryAsync error: ', error));\r\n\r\n if (searchResult && searchResult.length > 0) {\r\n searchResult.sort((a: ProductSearchResult, b: ProductSearchResult) => ((a.DisplayOrder!) < (b.DisplayOrder!) ? -1 : 1));\r\n\r\n const productIds: number[] = [];\r\n\r\n searchResult.map(item => productIds.push(item.RecordId));\r\n\r\n // const availability = await getEstimatedAvailabilityAsync(context, { ProductIds: productIds, DefaultWarehouseOnly: true }).\r\n // catch(error => console.log('[getProductsByCategoryId] getEstimatedAvailabilityAsync error: ', error));\r\n\r\n // if (availability && availability.ProductWarehouseInventoryAvailabilities) {\r\n // const warehouse = availability.ProductWarehouseInventoryAvailabilities;\r\n\r\n // if (warehouse.length > 0) {\r\n // const availableIds: number[] = [];\r\n\r\n // searchResult.map(item => {\r\n // const found = warehouse.find(stock => stock.ProductId === item.RecordId);\r\n\r\n // if (found && (found.PhysicalAvailableInventoryLevelCode && found.PhysicalAvailableInventoryLevelCode === InventoryLvls.AVAIL)) {\r\n // availableIds.push(item.RecordId);\r\n // }\r\n // });\r\n\r\n // const products = await getByIdsAsync(context, channelId, availableIds).catch(error => console.log('[getProductsByCategoryId] getByIdsAsync error: ', error));\r\n\r\n // return products;\r\n // }\r\n // }\r\n\r\n const products = await getByIdsAsync({ callerContext: context.actionContext }, context.actionContext.requestContext.apiSettings.channelId, productIds).catch(error => console.log('[getProductsByCategoryId] getByIdsAsync error: ', error));\r\n\r\n return products;\r\n }\r\n\r\n return [];\r\n}\r\n\r\nexport async function getProducts(context: ICoreContext, categoryIDs: number[]): Promise {\r\n if (categoryIDs.length > 0) {\r\n const projectDomain = { ChannelId: context.actionContext.requestContext.apiSettings.channelId, CatalogId: context.actionContext.requestContext.apiSettings.catalogId };\r\n\r\n const criterias: ProductSearchCriteria = { Context: projectDomain, CategoryIds: categoryIDs, IncludeAttributes: true };\r\n \r\n const products = await searchAsync({ callerContext: context.actionContext }, criterias);\r\n \r\n return products;\r\n }\r\n\r\n return [];\r\n}\r\n\r\nexport async function getCustomerOrderHistory(context: ICoreContext, hierarchy: AsyncResult, customer: Customer, organisation: string, isUat: boolean, limit: number) {\r\n const dictionary = await generateDictionary(context, hierarchy);\r\n\r\n const orders = await getOrderHistoryAsync({ callerContext: context.actionContext }, customer.AccountNumber);\r\n\r\n const orderHistory: PastTransaction[] = [];\r\n\r\n const btgpTransactions = await getByCustomerAllBTGPTransactionAsync({ callerContext: context.actionContext }, customer.AccountNumber, customer.Email!, organisation, isUat, limit);\r\n\r\n for (let i = 0; i < btgpTransactions.length; i++) {\r\n const transaction: Transaction = JSON.parse(btgpTransactions[`${i}`]);\r\n \r\n if (transaction['errorCode']) {\r\n console.log(transaction['errorMessage']);\r\n } else {\r\n const transactionNames: string[] = [];\r\n\r\n for (let j = 1; j <= 20; j++) {\r\n const nameID = 'Name_' + j;\r\n\r\n if (transaction[`${nameID}`]) {\r\n transactionNames.push(transaction[`${nameID}`]);\r\n }\r\n }\r\n\r\n let mainName = '';\r\n let mainID = 0;\r\n let price = 0;\r\n\r\n if (transaction.ProductCategoryID === '' || transaction.ProductCategoryID === null) {\r\n dictionary.forEach(record => {\r\n const found = record.Products.find(item => item.RecordId === parseInt(transaction.ProductID));\r\n\r\n if (found) { \r\n mainName = record.Main.Name!; \r\n mainID = record.Main.RecordId;\r\n price = found.Price ? found.Price : 0;\r\n }\r\n });\r\n } else {\r\n mainName = transaction.ProductCategory;\r\n mainID = Number(transaction.ProductCategoryID);\r\n price = transaction.ProductPrice;\r\n }\r\n\r\n if (transaction.DedicationPeriod !== '') {\r\n let found = DedicationPeriod.en.period.findIndex(item => item.label === transaction.DedicationPeriod);\r\n\r\n // Look through chinese version.\r\n if (found < 0) {\r\n found = DedicationPeriod.zh.period.findIndex(item => item.label === transaction.DedicationPeriod);\r\n }\r\n\r\n // Found matching dedication period.\r\n if (found >= 0) {\r\n price = price * DedicationPeriod.scale[`${found}`];\r\n }\r\n }\r\n\r\n const matchingOrder = orders.find(order => order.Id === transaction.SalesOrderID);\r\n const orderReceiptNo = transaction.ReceiptNo === '' ? matchingOrder && matchingOrder.SalesId ? matchingOrder.SalesId : 'Pending' : transaction.ReceiptNo;\r\n\r\n let order = transaction;\r\n order.ProductPrice = price;\r\n order.ProductCategory = mainName;\r\n order.ProductCategoryID = mainID.toString();\r\n\r\n orderHistory.push({ \r\n EventDates: [transaction.EventName],\r\n Names: transactionNames,\r\n OrderDate: transaction.DateOfTransaction ? new Date(transaction.DateOfTransaction) : new Date(),\r\n ReceiptNo: [orderReceiptNo],\r\n Record: order\r\n });\r\n }\r\n }\r\n\r\n orderHistory.sort((a, b) => {\r\n return b.OrderDate.getTime() - a.OrderDate.getTime();\r\n }); \r\n\r\n return orderHistory;\r\n}\r\n\r\nexport async function generateErrorLog(context: ICoreContext, errorLogName: string, errorDetails: string, item: FormDetails) {\r\n await createBTGPErrorLogAsync({ callerContext: context.actionContext }, generateUUID(), errorLogName, errorDetails, new Date().toISOString(), item.CartLineID, item.CartID, item.ProductID, item.EventID, item.EventName, item.SerialID, item.SerialNumber, item.SerialName, item.Name_1, item.Name_2, item.Name_3, item.Name_4, item.Name_5, item.Name_6, item.Name_7, item.Name_8, item.Name_9, item.Name_10, item.Name_11, item.Name_12, item.Name_13, item.Name_14, item.Name_15, item.Name_16, item.Name_17, item.Name_18, item.Name_19, item.Name_20, item.Remarks, item.Message, item.Category, item.DedicatedBy, item.HasTaxDeduction, item.Nric, item.BuildingName, item.UnitNumber, item.PostalCode, item.BirthDate, item.PhoneNumber, item.SchoolName, item.DonationOption, item.BlessingOption, item.CartLineComment, item.BirthTime, item.LightOption, item.ValidFrom, item.ValidTo, item.ParentCartLineID, item.DedicationPeriod, item.Country, item.CompanyName, item.DeceasedRelationship, item.SurgeryDate, item.DeathDate, item.DeathTime, item.NameChange, item.OldName_1, item.OldName_2, item.BirthDate_2, item.BirthTime_2, item.StartDate, item.Gender, item.ChineseName, item.ContactNumber, item.NameNextKin, item.ContactNumberNextKin, item.PassportNumber, item.PassportExpiryDate, item.PassportIssuedDate);\r\n}\r\n\r\nexport async function createOrUpdateCartline(context: ICoreContext, item: CartItem): Promise {\r\n const result = await createOrUpdateBTGPCartLineAsync({ callerContext: context.actionContext }, item.Form.CartLineID, item.Form.CartID, item.Form.ProductID, item.Form.EventID, item.Form.EventName, item.Form.SerialID, item.Form.SerialNumber, item.Form.SerialName, item.Form.Name_1, item.Form.Name_2, item.Form.Name_3, item.Form.Name_4, item.Form.Name_5, item.Form.Name_6, item.Form.Name_7, item.Form.Name_8, item.Form.Name_9, item.Form.Name_10, item.Form.Name_11, item.Form.Name_12, item.Form.Name_13, item.Form.Name_14, item.Form.Name_15, item.Form.Name_16, item.Form.Name_17, item.Form.Name_18, item.Form.Name_19, item.Form.Name_20, item.Form.Remarks, item.Form.Message, item.Form.Category, item.Form.DedicatedBy, item.Form.HasTaxDeduction, item.Form.Nric, item.Form.BuildingName, item.Form.UnitNumber, item.Form.PostalCode, item.Form.BirthDate, item.Form.PhoneNumber, item.Form.SchoolName, item.Form.DonationOption, item.Form.BlessingOption, item.Form.CartLineComment, item.Form.BirthTime, item.Form.LightOption, item.Form.ValidFrom, item.Form.ValidTo, item.Form.ParentCartLineID, item.Form.DedicationPeriod, item.Form.Country, item.Form.CompanyName, item.Form.DeceasedRelationship, item.Form.SurgeryDate, item.Form.DeathDate, item.Form.DeathTime, item.Form.NameChange, item.Form.OldName_1, item.Form.OldName_2, item.Form.BirthDate_2, item.Form.BirthTime_2, item.IsValid, item.InvalidType, item.InCart, item.IsSubProduct, item.Form.StartDate, item.Form.Gender, item.Form.ChineseName, item.Form.NameNextKin, item.Form.ContactNumber, item.Form.ContactNumberNextKin, item.Form.PassportNumber, item.Form.PassportExpiryDate, item.Form.PassportIssuedDate, item.Form.Consent, item.Form.IsInsuranceIncluded);\r\n\r\n return result;\r\n}\r\n\r\nexport async function generateDictionary(context: ICoreContext, hierarchy: AsyncResult): Promise {\r\n const dictionary: CategoryProducts[] = [];\r\n\r\n if (hierarchy.result) {\r\n hierarchy.result.forEach(record => {\r\n if (record.Children && record.Children.length > 0) {\r\n dictionary.push({ Main: record, SubIDs: record.Children.map(item => item.RecordId), Products: [] });\r\n }\r\n });\r\n }\r\n\r\n for (let j = 0; j < dictionary.length; ++j) {\r\n dictionary[`${j}`].Products = await getProducts(context, dictionary[`${j}`].SubIDs);\r\n }\r\n\r\n return dictionary;\r\n}\r\n\r\nexport function generateUUID(): string {\r\n let uuid = uuidv4();\r\n\r\n while (!(uuidValidate(uuid) && uuidVersion(uuid) == 4)) {\r\n uuid = uuidv4();\r\n }\r\n\r\n return uuid;\r\n}","// <= 999 = Mobile\r\n// >= 1000 = Tablet and Desktop\r\n\r\nexport const enum Breakpoints {\r\n small = 540,\r\n medium = 768,\r\n large = 992\r\n}\r\n\r\nexport function isMobile (width: number): boolean {\r\n return width < Breakpoints.large;\r\n}","export const enum FOMOOrderStatus {\r\n CREATED = 'CREATED',\r\n FAIL = 'FAIL',\r\n SUCCESS = 'SUCCESS',\r\n CLOSED = 'CLOSED',\r\n ERROR = 'ERROR'\r\n}\r\n\r\nexport const enum InventoryLvls {\r\n OOS = 'OOS',\r\n LIS = 'LIS',\r\n AVAIL = 'AVAIL'\r\n}\r\n\r\nexport const enum Response {\r\n SUCCESS = 'SUCCESS',\r\n FAILED = 'FAILED'\r\n}","import classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\n/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\nimport { IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { ProductPrice } from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport interface IProductDetailsPriceComponentProps extends IComponentProps<{price: ProductPrice}> {\r\n className?: string;\r\n savingsText?: string;\r\n freePriceText?: string;\r\n originalPriceText?: string;\r\n currentPriceText?: string;\r\n}\r\n\r\nexport interface IProductDetailsPriceComponent extends IComponent {\r\n}\r\n\r\nconst PriceComponentActions = {\r\n};\r\n\r\nconst Price: React.FC = (props: IProductDetailsPriceComponentProps) => {\r\n // CustomerContextualPrice could be 0\r\n if (props.data.price.CustomerContextualPrice === undefined) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {showStrikethroughPricing(props) ? renderCurrentPriceWithOriginalPrice(props) : renderCurrentPrice(props)}\r\n \r\n );\r\n};\r\n\r\nconst showStrikethroughPricing = (props: IProductDetailsPriceComponentProps) => {\r\n const originalPrice = getOriginalPrice(props);\r\n\r\n if (originalPrice && props.data.price.CustomerContextualPrice) {\r\n return originalPrice > props.data.price.CustomerContextualPrice;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nconst getOriginalPrice = (props:IProductDetailsPriceComponentProps) => {\r\n return Math.max(props.data.price.BasePrice || 0, props.data.price.TradeAgreementPrice || 0, props.data.price.AdjustedPrice || 0);\r\n};\r\n\r\nconst renderCurrentPrice = (props: IProductDetailsPriceComponentProps): JSX.Element | undefined => {\r\n const initialPrice = formatCurrency(props, props.data.price.CustomerContextualPrice);\r\n return {initialPrice};\r\n};\r\n\r\nconst formatCurrency = (props: IProductDetailsPriceComponentProps, price: number | undefined): string | undefined => {\r\n if (price === undefined) {\r\n return undefined;\r\n }\r\n\r\n if (price === 0 && props.freePriceText) {\r\n return props.freePriceText;\r\n }\r\n\r\n return props.context.cultureFormatter.formatCurrency(price);\r\n};\r\n\r\nconst renderCurrentPriceWithOriginalPrice = (props: IProductDetailsPriceComponentProps): JSX.Element | null => {\r\n const originalPrice = getOriginalPrice(props);\r\n const initialPrice = formatCurrency(props, originalPrice);\r\n\r\n return (\r\n <>\r\n {props.originalPriceText} {initialPrice} {props.currentPriceText} {renderCurrentPrice(props)}\r\n \r\n \r\n {props.savingsText && {props.savingsText}}\r\n \r\n );\r\n};\r\n\r\n// @ts-ignore\r\nexport const ProductDetailsPriceComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\r\n 'Price',\r\n { component: Price, ...PriceComponentActions }\r\n);","import classnames from 'classnames';\r\n\r\nimport React, { useState } from 'react';\r\n\r\nimport { v4 as uuidv4, validate as uuidValidate, version as uuidVersion } from 'uuid';\r\n\r\nimport { getPayloadObject, getTelemetryAttributes, IPopupProps, ITelemetryContent, Popup } from '@msdyn365-commerce-modules/utilities';\r\n\r\nimport { IComponent, IComponentProps, IGridSettings, IImageSettings, msdyn365Commerce, TelemetryEvent } from '@msdyn365-commerce/core';\r\n\r\nimport { getCartState, ICartState, ICartActionResult } from '@msdyn365-commerce/global-state';\r\n\r\nimport { CartLine, ProductAvailableQuantity, ProductDimension, ProductPrice, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { updateCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\nimport { FormDetails,CartItem } from '../../../actions/ecomm-interfaces';\r\nimport { createOrUpdateCartline, generateErrorLog } from '../../../actions/helper-functions';\r\n\r\nimport { ProductDetailsPriceComponent } from './ecomm-form-price-component';\r\n\r\nexport interface IProductDetailsAddToCartComponentProps extends IComponentProps<{ product: SimpleProduct; price?: ProductPrice, cart: ICartState }> {\r\n className?: string;\r\n addToCartText: string;\r\n outOfStockText: string;\r\n disabled?: boolean;\r\n quantity?: number;\r\n navigationUrl?: string;\r\n productAvailability?: ProductAvailableQuantity;\r\n getSelectedProduct?: SimpleProduct;\r\n\r\n imageSettings: IImageSettings;\r\n gridSettings: IGridSettings;\r\n\r\n isLoading?: boolean;\r\n isUpdatingDimension?: boolean;\r\n isLoadingDeliveryOptions?: boolean;\r\n isUpdatingDeliveryOptions?: boolean;\r\n isAddServiceItemToCart?: boolean;\r\n isAddEmailDeliveryItemToCart?: boolean;\r\n isPriceKeyedIn?: boolean;\r\n isOrderQuantityLimitsFeatureEnabled?: boolean;\r\n customPriceAmount?: number[];\r\n\r\n matchingCartItems?: [];\r\n\r\n events?: string[];\r\n eventIDs: string[];\r\n\r\n serialIds: string[];\r\n serialNumbers: string[];\r\n serialNames: string[];\r\n \r\n names: string[];\r\n dedicatedBy: string[];\r\n \r\n categories: string[];\r\n messages?: string[];\r\n remarks?: string[];\r\n \r\n hasTaxDeductions: boolean[];\r\n nrics: string[];\r\n \r\n buildingNames: string[];\r\n unitNumbers: string[];\r\n postalCodes: string[];\r\n phoneNumbers: number[];\r\n chineseNames: string[];\r\n countries: string[];\r\n\r\n nameNextKins: string[];\r\n contactNumbers: string[]\r\n contactNumbersNextKin: string[];\r\n passportNumbers: string[];\r\n passportExpiryDates: string[];\r\n passportIssuedDates: string[];\r\n consents: number[];\r\n isInsuranceIncluded: number[];\r\n\r\n birthDates: string[];\r\n birthTimes: string[];\r\n\r\n deathDates: string[];\r\n deathTimes: string[];\r\n\r\n surgeryDates: string[];\r\n \r\n schoolNames: string[];\r\n companyNames: string[];\r\n \r\n blessingOptions: string[];\r\n collectionOptions: string[];\r\n lightOptions: string[];\r\n \r\n validFroms: string[];\r\n validTos: string[];\r\n \r\n dedicationPeriods: string[];\r\n startDates: string[];\r\n\r\n genders: string[];\r\n\r\n deceasedRelationships: string[];\r\n \r\n nameChanges: string[];\r\n oldNames: string[];\r\n \r\n quantities: number[];\r\n \r\n subProduct: SimpleProduct;\r\n subProductQuantities: number[];\r\n\r\n dialogStrings?: {\r\n goToCartText: string;\r\n continueShoppingText: string;\r\n headerItemOneText: string;\r\n headerItemFormatText: string;\r\n headerMessageText: string;\r\n freePriceText: string;\r\n originalPriceText: string;\r\n currentPriceText: string;\r\n };\r\n\r\n telemetryContent?: ITelemetryContent;\r\n\r\n isCustomPriceSelected?: boolean;\r\n maximumKeyInPrice?: number;\r\n minimumKeyInPrice?: number;\r\n defaultMaximumKeyInPrice?: number;\r\n defaultMinimumKeyInPrice?: number;\r\n\r\n onAdd?(): void;\r\n onError?(result: IProductDetailsAddToCartFailureResult): void;\r\n changeUpdatingDimension?(isUpdatingDimension: boolean): void;\r\n changeUpdatingDeliveryOptions?(isUpdatingDeliveryOptions: boolean): void;\r\n}\r\n\r\nexport declare type IProductDetailsCartActionFailureReason = 'EMPTYINPUT' | 'MISSINGDIMENSION' | 'OUTOFSTOCK' | 'CARTACTIONFAILED' | 'INVALIDCUSTOMAMOUNT';\r\n\r\nexport interface IProductDetailsAddToCartFailureResult {\r\n failureReason: IProductDetailsCartActionFailureReason;\r\n stockLeft?: number;\r\n cartActionResult?: ICartActionResult;\r\n missingDimensions?: ProductDimension[];\r\n}\r\n\r\nexport interface IProductDetailsAddtoCartComponent extends IComponent {\r\n onClick(): (event: React.MouseEvent, props: IProductDetailsAddToCartComponentProps) => void;\r\n}\r\n\r\nconst onClick = async (_event: React.MouseEvent, props: IProductDetailsAddToCartComponentProps, setDisabled: (disabled: boolean) => void, openModal: (opened: boolean) => void): Promise => {\r\n const cartError = addToCartError(props);\r\n\r\n let productToAdd = props.data.product;\r\n\r\n if (cartError) {\r\n propagateError(props, cartError);\r\n \r\n return;\r\n }\r\n\r\n setDisabled(true);\r\n\r\n if (!(props.getSelectedProduct === undefined)) {\r\n productToAdd = (await props.getSelectedProduct) || props.data.product;\r\n }\r\n\r\n const cartState = await getCartState(props.context.actionContext);\r\n\r\n if (props.matchingCartItems && props.matchingCartItems.length > 0) {\r\n const matchingCartLineIds: string[] = [];\r\n\r\n props.matchingCartItems.map((value: string, index: number) => {\r\n if (value['cartLineId'] !== '') {\r\n matchingCartLineIds.push(value['cartLineId']);\r\n }\r\n });\r\n\r\n if (matchingCartLineIds.length > 0) {\r\n const cartLinesResult = await getAllBTGPCartLineAsync({ callerContext: props.context.actionContext }, cartState.cart.Id);\r\n \r\n const cartLineData: any[] = [];\r\n\r\n if (cartLinesResult.length > 0) {\r\n cartLinesResult.forEach(record => cartLineData.push(JSON.parse(record)));\r\n }\r\n\r\n const cartIdToRemove: string[] = [matchingCartLineIds[0]];\r\n\r\n cartLineData.forEach(cl => {\r\n if (cl['ParentCartLineID'] === cartIdToRemove[0]) {\r\n cartIdToRemove.push(cl['CartLineID']);\r\n }\r\n });\r\n\r\n const removeCartResult = await cartState.removeCartLines({ cartLineIds: cartIdToRemove });\r\n\r\n if (removeCartResult.status !== 'SUCCESS') {\r\n const errorMessageId = removeCartResult.errorDetails ? removeCartResult.errorDetails.ErrorResourceId ? removeCartResult.errorDetails.ErrorResourceId : '' : '';\r\n const errorMessageDetail = removeCartResult.errorDetails ? removeCartResult.errorDetails.LocalizedMessage ? removeCartResult.errorDetails.LocalizedMessage : '' : '';\r\n\r\n const item: FormDetails = {\r\n CartLineID: '', CartID: cartState.cart.Id, CartLineComment: '', ParentCartLineID: '',\r\n ProductID: '', EventID: '', EventName: '',\r\n SerialID: '', SerialNumber: '', SerialName: '',\r\n Name_1: '', Name_2: '', Name_3: '', Name_4: '', Name_5: '', Name_6: '', Name_7: '', Name_8: '', Name_9: '', Name_10: '', \r\n Name_11: '', Name_12: '', Name_13: '', Name_14: '', Name_15: '', Name_16: '', Name_17: '', Name_18: '', Name_19: '', Name_20: '',\r\n Remarks: '', Message: '',\r\n Category: '', DedicatedBy: '',\r\n HasTaxDeduction: false, Nric: '',\r\n BuildingName: '', UnitNumber: '', PostalCode: '', PhoneNumber: '', ChineseName:'', Country: '',\r\n SchoolName: '', CompanyName: '',\r\n DonationOption: '', BlessingOption: '', LightOption: '',\r\n ValidFrom: '', ValidTo: '',\r\n DedicationPeriod: '',\r\n StartDate: '',\r\n Gender: '',\r\n SurgeryDate: '',\r\n BirthDate: '', BirthTime: '',\r\n BirthDate_2: '', BirthTime_2: '',\r\n DeathDate: '', DeathTime: '',\r\n DeceasedRelationship: '',\r\n NameChange: '', \r\n OldName_1: '', OldName_2: '',\r\n NameNextKin:'',\r\n ContactNumber:'',\r\n ContactNumberNextKin:'',\r\n PassportNumber:'',\r\n PassportExpiryDate:'',\r\n PassportIssuedDate:'',\r\n Consent:0,\r\n IsInsuranceIncluded:0\r\n };\r\n\r\n await generateErrorLog(props.context, 'ERROR ecomm-form-add-to-cart-source cartState.removeCartLines', errorMessageId + ': ' + errorMessageDetail, item);\r\n\r\n propagateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: removeCartResult });\r\n\r\n setDisabled(false);\r\n }\r\n\r\n for (let i = 0; i < matchingCartLineIds.length; i++) {\r\n const result = await deleteBTGPCartLineAsync({ callerContext: props.context.actionContext }, matchingCartLineIds[`${i}`]);\r\n\r\n if (!result) {\r\n const found = cartLinesResult.find(record => {\r\n const item = JSON.parse(record);\r\n\r\n return item['CartLineID'] === matchingCartLineIds[`${i}`];\r\n });\r\n\r\n if (found) {\r\n const parsed = JSON.parse(found);\r\n\r\n const item: FormDetails = {\r\n CartLineID: parsed['CartLineID'],\r\n CartID: parsed['CartID'],\r\n CartLineComment: parsed['CartLineComment'],\r\n ParentCartLineID: parsed['ParentCartLineID'],\r\n ProductID: parsed['ProductID'],\r\n EventID: parsed['EventID'],\r\n EventName: parsed['EventName'],\r\n SerialID: parsed['SerialID'],\r\n SerialNumber: parsed['SerialNumber'],\r\n SerialName: parsed['SerialName'],\r\n Name_1: parsed['Name_1'],\r\n Name_2: parsed['Name_2'],\r\n Name_3: parsed['Name_3'],\r\n Name_4: parsed['Name_4'],\r\n Name_5: parsed['Name_5'],\r\n Name_6: parsed['Name_6'],\r\n Name_7: parsed['Name_7'],\r\n Name_8: parsed['Name_8'],\r\n Name_9: parsed['Name_9'],\r\n Name_10: parsed['Name_10'], \r\n Name_11: parsed['Name_11'],\r\n Name_12: parsed['Name_12'],\r\n Name_13: parsed['Name_13'],\r\n Name_14: parsed['Name_14'],\r\n Name_15: parsed['Name_15'],\r\n Name_16: parsed['Name_16'],\r\n Name_17: parsed['Name_17'],\r\n Name_18: parsed['Name_18'],\r\n Name_19: parsed['Name_19'],\r\n Name_20: parsed['Name_20'],\r\n Remarks: parsed['Remarks'],\r\n Message: parsed['Message'],\r\n Category: parsed['Category'],\r\n DedicatedBy: parsed['DedicatedBy'],\r\n HasTaxDeduction: parsed['HasTaxDeduction'],\r\n Nric: parsed['Nric'],\r\n BuildingName: parsed['BuildingName'],\r\n UnitNumber: parsed['UnitNumber'],\r\n PostalCode: parsed['PostalCode'],\r\n PhoneNumber: parsed['PhoneNumber'],\r\n ChineseName: parsed['ChineseName'],\r\n Country: parsed['Country'],\r\n SchoolName: parsed['SchoolName'],\r\n CompanyName: parsed['CompanyName'],\r\n DonationOption: parsed['DonationOption'],\r\n BlessingOption: parsed['BlessingOption'],\r\n LightOption: parsed['LightOption'],\r\n ValidFrom: parsed['ValidFrom'],\r\n ValidTo: parsed['ValidTo'],\r\n DedicationPeriod: parsed['DedicationPeriod'],\r\n StartDate: parsed['StartDate'],\r\n Gender: parsed['Gender'],\r\n SurgeryDate: parsed['SurgeryDate'],\r\n BirthDate: parsed['BirthDate'],\r\n BirthTime: parsed['BirthTime'],\r\n BirthDate_2: parsed['BirthDate_2'],\r\n BirthTime_2: parsed['BirthTime_2'],\r\n DeathDate: parsed['DeathDate'],\r\n DeathTime: parsed['DeathTime'],\r\n DeceasedRelationship: parsed['DeceasedRelationship'],\r\n NameChange: parsed['NameChange'],\r\n OldName_1: parsed['OldName_1'],\r\n OldName_2: parsed['OldName_2'],\r\n NameNextKin: parsed['NameNextKin'],\r\n ContactNumber: parsed['ContactNumber'],\r\n ContactNumberNextKin: parsed['ContactNumberNextKin'],\r\n PassportNumber: parsed[\"PassportNumber\"],\r\n PassportExpiryDate: parsed[\"PassportExpiryDate\"],\r\n PassportIssuedDate: parsed[\"PassportIssuedDate\"],\r\n Consent: parsed[\"Consent\"],\r\n IsInsuranceIncluded: parsed[\"IsInsuranceIncluded\"]\r\n };\r\n\r\n await generateErrorLog(props.context, 'ERROR ecomm-form-add-to-cart-source deleteBTGPCartLineAsync', '', item);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // ATTENTION: CORE LOGIC BEGINS HERE.\r\n for (let i = 0; i < props.names!.length; i++) {\r\n const cartEvent = typeof props.events![`${i}`] !== 'undefined' && props.events![`${i}`] !== '' ? props.events![`${i}`] : '';\r\n const cartEventArray = strSplit(cartEvent, ';');\r\n\r\n const cartEventID = typeof props.eventIDs![`${i}`] !== 'undefined' && props.eventIDs[`${i}`] !== '' ? props.eventIDs[`${i}`] : '';\r\n const cartEventIDArray = strSplit(cartEventID, ';');\r\n\r\n const cartSerialId = typeof props.serialIds![`${i}`] !== 'undefined' && props.serialIds[`${i}`] !== '' ? props.serialIds[`${i}`] : '';\r\n const cartSerialNumber = typeof props.serialNumbers![`${i}`] !== 'undefined' && props.serialNumbers[`${i}`] !== '' ? props.serialNumbers[`${i}`] : '';\r\n const cartSerialName = typeof props.serialNames![`${i}`] !== 'undefined' && props.serialNames[`${i}`] !== '' ? props.serialNames![`${i}`] : ''; \r\n\r\n const cartName = typeof props.names![`${i}`] !== 'undefined' ? props.names![`${i}`] + '' : '';\r\n const cartNameArray = strSplit(cartName, ';');\r\n\r\n for (let r = cartNameArray.length - 1; r < 20; r++) {\r\n cartNameArray.push('');\r\n }\r\n\r\n const cartMessage = typeof props.messages![`${i}`] !== 'undefined' ? props.messages![`${i}`] + ';' : ';';\r\n const cartMessageTemp = cartMessage.substring(0, cartMessage.length - 1);\r\n const cartRemark = typeof props.remarks![`${i}`] !== 'undefined' ? props.remarks![`${i}`] : '';\r\n\r\n const cartCategory = typeof props.categories[`${i}`] !== 'undefined' ? props.categories![`${i}`] : '';\r\n\r\n const cartDedicatedBy = typeof props.dedicatedBy[`${i}`] !== 'undefined' ? props.dedicatedBy[`${i}`] : '';\r\n\r\n const cartHasTaxDeduction = typeof props.hasTaxDeductions[`${i}`] !== 'undefined' ? props.hasTaxDeductions[`${i}`] : false;\r\n const cartNric = typeof props.nrics[`${i}`] !== 'undefined' ? props.nrics[`${i}`] : '';\r\n\r\n const cartBuildingName = typeof props.buildingNames[`${i}`] !== 'undefined' ? props.buildingNames![`${i}`] : '';\r\n const cartUnitNumber = typeof props.unitNumbers[`${i}`] !== 'undefined' ? props.unitNumbers![`${i}`] : '';\r\n const cartPostalCode = typeof props.postalCodes[`${i}`] !== 'undefined' ? props.postalCodes![`${i}`] : '';\r\n const cartPhoneNumber = typeof props.phoneNumbers[`${i}`] !== 'undefined' ? String(props.phoneNumbers![`${i}`]) : '';\r\n const cartChineseName = typeof props.chineseNames[`${i}`] !== 'undefined' ? String(props.chineseNames![`${i}`]) : '';\r\n const cartNameNextKin = typeof props.nameNextKins[`${i}`] !== 'undefined' ? String(props.nameNextKins![`${i}`]) : '';\r\n const cartContactNumber = typeof props.contactNumbers[`${i}`] !== 'undefined' ? String(props.contactNumbers![`${i}`]) : '';\r\n const cartContactNumbersNextKin = typeof props.contactNumbersNextKin[`${i}`] !== 'undefined' ? String(props.contactNumbersNextKin![`${i}`]) : '';\r\n\r\n const cartPassportNumber = typeof props.passportNumbers[`${i}`] !== 'undefined' ? String(props.passportNumbers![`${i}`]) : '';\r\n\r\n const cartPassportExpiryDate = typeof props.passportExpiryDates[`${i}`] === 'undefined' || props.passportExpiryDates![`${i}`] === '' ? new Date(1900, 1, 1).toISOString() : props.passportExpiryDates![`${i}`];\r\n\r\n const cartPassportIssuedDate = typeof props.passportIssuedDates[`${i}`] === 'undefined' || props.passportIssuedDates![`${i}`] === '' ? new Date(1900, 1, 1).toISOString() : props.passportIssuedDates![`${i}`];\r\n\r\n const cartConsent = typeof props.consents[`${i}`] !== 'undefined' ? Number(props.consents![`${i}`]) : 0;\r\n\r\n const cartIsInsuranceIncluded = typeof props.isInsuranceIncluded[`${i}`] !== 'undefined' ? Number(props.isInsuranceIncluded![`${i}`]) : 0;\r\n\r\n\r\n const cartCountry = typeof props.countries[`${i}`] !== 'undefined' ? props.countries![`${i}`] : '';\r\n\r\n const cartSchoolName = typeof props.schoolNames[`${i}`] !== 'undefined' ? props.schoolNames![`${i}`] : '';\r\n\r\n const cartBirthDate = typeof props.birthDates[`${i}`] === 'undefined' || props.birthDates![`${i}`] === '' ? new Date(1900, 1, 1).toISOString() : props.birthDates![`${i}`];\r\n\r\n const cartBirthDates = typeof props.birthDates[`${i}`] !== 'undefined' ? props.birthDates[`${i}`].split(';') : [];\r\n const cartBirthTimes = typeof props.birthTimes[`${i}`] !== 'undefined' ? props.birthTimes[`${i}`].split(';') : [];\r\n\r\n const cartCollectionOption = typeof props.collectionOptions[`${i}`] !== 'undefined' ? props.collectionOptions![`${i}`] : '';\r\n const cartBlessingOption = typeof props.blessingOptions[`${i}`] !== 'undefined' ? props.blessingOptions![`${i}`] : '';\r\n const cartLightOption = typeof props.lightOptions[`${i}`] !== 'undefined' ? props.lightOptions![`${i}`] : '';\r\n\r\n const cartValidFrom = typeof props.validFroms[`${i}`] !== 'undefined' ? props.validFroms![`${i}`] !== '' ? props.validFroms![`${i}`] : new Date().toISOString() : new Date().toISOString();\r\n const cartValidTo = typeof props.validTos[`${i}`] !== 'undefined' ? props.validTos![`${i}`] !== '' ? props.validTos![`${i}`] : new Date().toISOString() : new Date().toISOString();\r\n\r\n const cartDedicationPeriod = typeof props.dedicationPeriods[`${i}`] !== 'undefined' ? props.dedicationPeriods![`${i}`] : '';\r\n const cartStartDate = typeof props.startDates[`${i}`] === 'undefined' || props.startDates![`${i}`] === '' ? new Date(1900, 1, 1).toISOString() : props.startDates![`${i}`];\r\n\r\n const cartGender = typeof props.genders[`${i}`] !== 'undefined' ? props.genders[`${i}`] : '';\r\n\r\n const cartCompanyName = typeof props.companyNames[`${i}`] !== 'undefined' ? props.companyNames![`${i}`] : '';\r\n\r\n const cartDeceasedRelationship = typeof props.deceasedRelationships[`${i}`] !== 'undefined' ? props.deceasedRelationships![`${i}`] : '';\r\n\r\n const cartDeathDate = typeof props.deathDates[`${i}`] === 'undefined' || props.deathDates![`${i}`] === '' ? new Date(1900, 1, 1).toISOString() : props.deathDates![`${i}`];\r\n const cartDeathTime = typeof props.deathTimes[`${i}`] !== 'undefined' ? props.deathTimes![`${i}`] : '';\r\n\r\n const cartSurgeryDate = typeof props.surgeryDates[`${i}`] === 'undefined' || props.surgeryDates![`${i}`] === '' ? new Date(1900, 1, 1).toISOString() : props.surgeryDates![`${i}`];\r\n\r\n const cartNameChange = typeof props.nameChanges[`${i}`] !== 'undefined' ? props.nameChanges![`${i}`] : '';\r\n const cartOldName = typeof props.oldNames[`${i}`] !== 'undefined' ? props.oldNames![`${i}`] : '';\r\n const cartOldNameArray = strSplit(cartOldName, ';');\r\n\r\n // If this is an event product, it will not have any sub product and it cannot be a renewable lamp.\r\n const cartQuantity = typeof props.quantities[`${i}`] !== 'undefined' ? cartEventArray.length > 1 ? 1 : props.quantities![`${i}`] : 1;\r\n const cartSubProductQuantity = typeof props.subProductQuantities[`${i}`] !== 'undefined' ? props.subProductQuantities[`${i}`] : 0;\r\n const cartHasSubProduct = props.subProduct != null && cartSubProductQuantity > 0;\r\n\r\n for (let r = cartOldNameArray.length - 1; r < 2; r++) {\r\n cartOldNameArray.push('');\r\n }\r\n\r\n let cartParentCartLineID = '';\r\n let cartEventAddedIndex = 0;\r\n let cartSubParentAdded = false;\r\n let cartSubProductAdded = false;\r\n\r\n while (cartEventAddedIndex < cartEventArray.length || (cartHasSubProduct && cartSubParentAdded && !cartSubProductAdded)) {\r\n let cartComment = uuidv4();\r\n\r\n while (!uuidValidateV4(cartComment)) {\r\n cartComment = uuidv4();\r\n }\r\n\r\n const addToCartResult = await cartState.addProductToCart({\r\n product: cartHasSubProduct && cartSubParentAdded ? props.subProduct : productToAdd,\r\n count: cartHasSubProduct && cartSubParentAdded ? cartSubProductQuantity : cartQuantity,\r\n availableQuantity: props.productAvailability![0].AvailableQuantity,\r\n additionalProperties: { orderQuantityLimitsFeatureIsEnabled: props.isOrderQuantityLimitsFeatureEnabled },\r\n enableStockCheck: false,\r\n isPriceKeyedIn: props.isPriceKeyedIn,\r\n customPrice: typeof props.customPriceAmount![`${i}`] !== 'undefined' ? props.customPriceAmount![`${i}`] : 0,\r\n isAddEmailDeliveryItemToCart: props.isAddEmailDeliveryItemToCart\r\n });\r\n\r\n const cartLineProductID: string = String(cartState.cart.CartLines![cartState.cart.CartLines!.length - 1].ProductId!);\r\n const cartLineID: string = cartState.cart.CartLines![cartState.cart.CartLines!.length - 1].LineId!;\r\n\r\n const item: FormDetails = {\r\n CartLineID: cartLineID, CartID: cartState.cart.Id, CartLineComment: cartComment, ParentCartLineID: cartEventAddedIndex > 0 ? cartParentCartLineID : '',\r\n ProductID: cartLineProductID, EventID: cartEventIDArray[`${cartEventAddedIndex}`],\r\n EventName: cartEventArray[`${cartEventAddedIndex}`],\r\n SerialID: cartSerialId, SerialNumber: cartSerialNumber, SerialName: cartSerialName,\r\n Name_1: cartNameArray[0], Name_2: cartNameArray[1], Name_3: cartNameArray[2], Name_4: cartNameArray[3], Name_5: cartNameArray[4],\r\n Name_6: cartNameArray[5], Name_7: cartNameArray[6], Name_8: cartNameArray[7], Name_9: cartNameArray[8], Name_10: cartNameArray[9],\r\n Name_11: cartNameArray[10], Name_12: cartNameArray[11], Name_13: cartNameArray[12], Name_14: cartNameArray[13], Name_15: cartNameArray[14], Name_16: cartNameArray[15], Name_17: cartNameArray[16], Name_18: cartNameArray[17], Name_19: cartNameArray[18], Name_20: cartNameArray[19],\r\n Remarks: cartRemark, Message: cartMessageTemp,\r\n Category: cartCategory, DedicatedBy: cartDedicatedBy,\r\n HasTaxDeduction: cartHasTaxDeduction, Nric: cartNric,\r\n BuildingName: cartBuildingName, UnitNumber: cartUnitNumber, PostalCode: cartPostalCode, PhoneNumber: cartPhoneNumber, ChineseName: cartChineseName, Country: cartCountry,\r\n SchoolName: cartSchoolName, CompanyName: cartCompanyName,\r\n DonationOption: cartCollectionOption, BlessingOption: cartBlessingOption, LightOption: cartLightOption,\r\n ValidFrom: cartValidFrom, ValidTo: cartValidTo,\r\n DedicationPeriod: cartDedicationPeriod,\r\n StartDate: cartStartDate,\r\n Gender: cartGender,\r\n SurgeryDate: cartSurgeryDate,\r\n BirthDate: cartBirthDate, BirthTime: cartBirthTimes[0] ? cartBirthTimes[0] : '',\r\n BirthDate_2: cartBirthDates[1] ? cartBirthDates[1] : '', BirthTime_2: cartBirthTimes[1] ? cartBirthTimes[1] : '',\r\n DeathDate: cartDeathDate, DeathTime: cartDeathTime,\r\n DeceasedRelationship: cartDeceasedRelationship,\r\n NameChange: cartNameChange, \r\n OldName_1: cartOldNameArray[0], OldName_2: cartOldNameArray[1],\r\n NameNextKin: cartNameNextKin,\r\n ContactNumber: cartContactNumber,\r\n ContactNumberNextKin: cartContactNumbersNextKin,\r\n PassportNumber: cartPassportNumber,\r\n PassportExpiryDate: cartPassportExpiryDate,\r\n PassportIssuedDate: cartPassportIssuedDate,\r\n Consent: cartConsent,\r\n IsInsuranceIncluded: cartIsInsuranceIncluded\r\n };\r\n\r\n if (addToCartResult.status === 'SUCCESS') {\r\n if (cartEventAddedIndex === 0) {\r\n cartParentCartLineID = cartLineID;\r\n }\r\n\r\n let updateCart = cartState.cart;\r\n let updateCartLines: CartLine[] = cartState.cart.CartLines ? cartState.cart.CartLines : [];\r\n\r\n if (updateCartLines.length > 0) {\r\n updateCartLines![updateCartLines.length - 1].Comment = cartComment;\r\n\r\n await updateCartLinesAsync({ callerContext: props.context.actionContext }, updateCart.Id, updateCartLines);\r\n }\r\n\r\n let formDetails: FormDetails = {\r\n CartLineID: cartLineID, CartID: cartState.cart.Id, \r\n CartLineComment: cartComment, ParentCartLineID: cartEventAddedIndex > 0 ? cartParentCartLineID : '', \r\n ProductID: cartLineProductID, \r\n EventID: cartEventIDArray[`${cartEventAddedIndex}`], EventName: cartEventArray[`${cartEventAddedIndex}`], \r\n SerialID: cartSerialId, SerialNumber: cartSerialNumber, SerialName: cartSerialName, \r\n Name_1: cartNameArray[0], Name_2: cartNameArray[1], Name_3: cartNameArray[2], Name_4: cartNameArray[3], \r\n Name_5: cartNameArray[4], Name_6: cartNameArray[5], Name_7: cartNameArray[6], Name_8: cartNameArray[7], \r\n Name_9: cartNameArray[8], Name_10: cartNameArray[9], Name_11: cartNameArray[10], Name_12: cartNameArray[11], \r\n Name_13: cartNameArray[12], Name_14: cartNameArray[13], Name_15: cartNameArray[14], Name_16: cartNameArray[15], \r\n Name_17: cartNameArray[16], Name_18: cartNameArray[17], Name_19: cartNameArray[18], Name_20: cartNameArray[19], \r\n Remarks: cartRemark, Message: cartMessageTemp, Category: cartCategory, DedicatedBy: cartDedicatedBy, \r\n HasTaxDeduction: cartHasTaxDeduction, Nric: cartNric, \r\n BuildingName: cartBuildingName, UnitNumber: cartUnitNumber, \r\n PostalCode: cartPostalCode, PhoneNumber: cartPhoneNumber, ChineseName: cartChineseName, Country: cartCountry, \r\n SchoolName: cartSchoolName, CompanyName: cartCompanyName, \r\n DonationOption: cartCollectionOption, BlessingOption: cartBlessingOption, LightOption: cartLightOption, \r\n ValidFrom: cartValidFrom, ValidTo: cartValidTo, \r\n DedicationPeriod: cartDedicationPeriod, \r\n StartDate: cartStartDate,\r\n Gender: cartGender,\r\n SurgeryDate: cartSurgeryDate, \r\n BirthDate: cartBirthDate, BirthTime: cartBirthTimes[0] ? cartBirthTimes[0] : '', \r\n BirthDate_2: cartBirthDates[1] ? cartBirthDates[1] : '', BirthTime_2: cartBirthTimes[1] ? cartBirthTimes[1] : '', \r\n DeathDate: cartDeathDate, DeathTime: cartDeathTime, \r\n DeceasedRelationship: cartDeceasedRelationship, \r\n NameChange: cartNameChange, \r\n OldName_1: cartOldNameArray[0], OldName_2: cartOldNameArray[1],\r\n NameNextKin: cartNameNextKin,\r\n ContactNumber: cartContactNumber,\r\n ContactNumberNextKin: cartContactNumbersNextKin,\r\n PassportNumber: cartPassportNumber,\r\n PassportExpiryDate: cartPassportExpiryDate,\r\n PassportIssuedDate: cartPassportIssuedDate,\r\n Consent: cartConsent,\r\n IsInsuranceIncluded: cartIsInsuranceIncluded\r\n };\r\n\r\n let cartItem: CartItem = {\r\n Form: formDetails,\r\n IsValid: true,\r\n InvalidType: '',\r\n InCart: true,\r\n IsSubProduct: false\r\n };\r\n\r\n // Special case for a particular GP product using consecration form.\r\n if (!(!cartHasSubProduct || (cartHasSubProduct && !cartSubParentAdded))) {\r\n cartItem.Form.ProductID = String(props.subProduct.RecordId);\r\n cartItem.Form.ParentCartLineID = cartParentCartLineID;\r\n cartItem.Form.EventID = '';\r\n cartItem.Form.EventName = '';\r\n cartItem.Form.SerialID = '';\r\n cartItem.Form.SerialNumber = '';\r\n cartItem.Form.SerialName = '';\r\n cartItem.Form.Name_1 = cartNameArray[0];\r\n cartItem.Form.Name_2 = cartNameArray[1];\r\n cartItem.Form.Name_3 = '';\r\n cartItem.Form.Name_4 = '';\r\n cartItem.Form.Name_5 = '';\r\n cartItem.Form.Name_6 = '';\r\n cartItem.Form.Name_7 = '';\r\n cartItem.Form.Name_8 = '';\r\n cartItem.Form.Name_9 = '';\r\n cartItem.Form.Name_10 = '';\r\n cartItem.Form.Name_11 = '';\r\n cartItem.Form.Name_12 = '';\r\n cartItem.Form.Name_13 = '';\r\n cartItem.Form.Name_14 = '';\r\n cartItem.Form.Name_15 = '';\r\n cartItem.Form.Name_16 = '';\r\n cartItem.Form.Name_17 = '';\r\n cartItem.Form.Name_18 = '';\r\n cartItem.Form.Name_19 = '';\r\n cartItem.Form.Name_20 = '';\r\n cartItem.Form.Remarks = '';\r\n cartItem.Form.Message = '';\r\n cartItem.Form.Category = '';\r\n cartItem.Form.DedicatedBy = '';\r\n cartItem.Form.HasTaxDeduction = false;\r\n cartItem.Form.Nric = '';\r\n cartItem.Form.BuildingName = '';\r\n cartItem.Form.UnitNumber = '';\r\n cartItem.Form.PostalCode = '';\r\n cartItem.Form.PhoneNumber = '';\r\n cartItem.Form.Country = '';\r\n cartItem.Form.SchoolName = '';\r\n cartItem.Form.CompanyName = '';\r\n cartItem.Form.DonationOption = '';\r\n cartItem.Form.BlessingOption = '';\r\n cartItem.Form.LightOption = '';\r\n cartItem.Form.DedicationPeriod = '';\r\n cartItem.Form.DeathTime = '';\r\n cartItem.Form.NameChange = '';\r\n cartItem.Form.OldName_1 = '';\r\n cartItem.Form.OldName_2 = '';\r\n cartItem.Form.BirthDate_2 = '';\r\n cartItem.Form.BirthTime_2 = '';\r\n\r\n cartItem.IsSubProduct = true;\r\n\r\n cartSubProductAdded = true;\r\n }\r\n\r\n const result = await createOrUpdateCartline(props.context, cartItem);\r\n\r\n if (!result) {\r\n const errorMessageId = addToCartResult.errorDetails ? addToCartResult.errorDetails.ErrorResourceId ? addToCartResult.errorDetails.ErrorResourceId : '' : '';\r\n const errorMessageDetail = addToCartResult.errorDetails ? addToCartResult.errorDetails.LocalizedMessage ? addToCartResult.errorDetails.LocalizedMessage : '' : '';\r\n\r\n await generateErrorLog(props.context, 'ERROR ecomm-form-add-to-cart-source createOrUpdateBTGPCartLineAsync', errorMessageId + ':' + errorMessageDetail, item);\r\n\r\n propagateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: addToCartResult });\r\n \r\n setDisabled(false);\r\n }\r\n } else {\r\n const errorMessageId = addToCartResult.errorDetails ? addToCartResult.errorDetails.ErrorResourceId ? addToCartResult.errorDetails.ErrorResourceId : '' : '';\r\n const errorMessageDetail = addToCartResult.errorDetails ? addToCartResult.errorDetails.LocalizedMessage ? addToCartResult.errorDetails.LocalizedMessage : '' : '';\r\n\r\n await generateErrorLog(props.context, 'ERROR ecomm-form-add-to-cart-source cartState.addProductToCart', errorMessageId + ':' + errorMessageDetail, item);\r\n\r\n propagateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: addToCartResult });\r\n \r\n setDisabled(false);\r\n }\r\n\r\n if (cartEventAddedIndex < cartEventArray.length) {\r\n cartEventAddedIndex++;\r\n }\r\n\r\n if (cartHasSubProduct && !cartSubParentAdded) {\r\n cartSubParentAdded = true;\r\n }\r\n }\r\n }\r\n\r\n propagateResult(props);\r\n};\r\n\r\nconst uuidValidateV4 = (uuid: string): boolean => {\r\n return uuidValidate(uuid) && uuidVersion(uuid) == 4;\r\n};\r\n\r\nconst strSplit = (sentence: string, splitChar: string): string[] => {\r\n // let arrayPosition = 0;\r\n let oneWord = \"\";\r\n let newSentence = sentence + splitChar;\r\n let split = [];\r\n for (let j = 0; j < newSentence.length; j++) {\r\n if (newSentence[`${j}`] === splitChar) {\r\n split.push(oneWord);\r\n // arrayPosition++;\r\n oneWord = \"\";\r\n } else {\r\n oneWord += newSentence[`${j}`];\r\n }\r\n }\r\n return split;\r\n};\r\n\r\nconst AddToCartComponentActions = {\r\n onClick: onClick\r\n};\r\n\r\nconst AddToCart: React.FC = (props: IProductDetailsAddToCartComponentProps) => {\r\n const [disabled, setDisabled] = useState(false);\r\n const [modalOpen, setModalOpen] = useState(false);\r\n\r\n const onClickHandler = async (event: React.MouseEvent) => {\r\n await AddToCartComponentActions.onClick(event, props, setDisabled, setModalOpen);\r\n };\r\n\r\n const priceComponent = props.data.price ? (\r\n ) : '';\r\n\r\n const popupProps: IPopupProps = {\r\n context: props.context,\r\n className: 'msc-add-to-cart',\r\n id: props.id,\r\n typeName: props.typeName,\r\n data: { product: props.data.product, price: props.data.price },\r\n dialogStrings: props.dialogStrings,\r\n imageSettings: props.imageSettings,\r\n gridSettings: props.context.request.gridSettings,\r\n productQuantity: props.quantity !== undefined ? props.quantity : 1,\r\n priceComponent: priceComponent,\r\n navigationUrl: props.navigationUrl,\r\n modalOpen: modalOpen,\r\n setModalOpen: setModalOpen,\r\n telemetryContent: props.telemetryContent\r\n };\r\n\r\n const renderModalPopup = ;\r\n const label = getLinkText(props);\r\n const payload = getPayloadObject(TelemetryEvent.AddToCart, props.telemetryContent!, label, '');\r\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\r\n\r\n return (\r\n <>\r\n {renderModalPopup}\r\n \r\n \r\n );\r\n};\r\n\r\n// Set default props.\r\nAddToCart.defaultProps = { quantity: 1 };\r\n\r\nconst getLinkText = (props: IProductDetailsAddToCartComponentProps): string => {\r\n return shouldShowOutOfStock(props, false) ? props.outOfStockText : props.addToCartText;\r\n};\r\n\r\nconst addToCartError = (props: IProductDetailsAddToCartComponentProps): IProductDetailsAddToCartFailureResult | undefined => {\r\n const { data, productAvailability, isCustomPriceSelected, customPriceAmount, maximumKeyInPrice, minimumKeyInPrice, defaultMaximumKeyInPrice = 1000, defaultMinimumKeyInPrice = 1 } = props;\r\n\r\n if (!data || !data.product.RecordId) {\r\n // No product exists, won't be able to add to cart\r\n return { failureReason: 'EMPTYINPUT' };\r\n }\r\n\r\n if (data.product.Dimensions) {\r\n const missingDimensions = data.product.Dimensions.filter(dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value));\r\n\r\n if (missingDimensions.length > 0) {\r\n // At least one dimension with no value exists on the product, won't be able to add to cart\r\n return { failureReason: 'MISSINGDIMENSION', missingDimensions: missingDimensions };\r\n }\r\n }\r\n\r\n if (shouldShowOutOfStock(props, true)) {\r\n const availableQuantity = (productAvailability && productAvailability.AvailableQuantity) || 0;\r\n const stockLeft = Math.max(availableQuantity, 0);\r\n\r\n return { failureReason: 'OUTOFSTOCK', stockLeft: stockLeft };\r\n }\r\n\r\n // When Custom price is selected, if there is no keyed-in price or keyed-in price is out of limit, should return error.\r\n if (isCustomPriceSelected && (\r\n !customPriceAmount || customPriceAmount[0] > (maximumKeyInPrice || defaultMaximumKeyInPrice) || customPriceAmount[0] < (minimumKeyInPrice || defaultMinimumKeyInPrice))) {\r\n return { failureReason: 'INVALIDCUSTOMAMOUNT' };\r\n }\r\n\r\n // Only allow adding to cart if not showing out of stock\r\n return undefined;\r\n};\r\n\r\nconst shouldShowOutOfStock = (props: IProductDetailsAddToCartComponentProps, includeCurrentQuantity: boolean): boolean => {\r\n if (props.context.app.config.enableStockCheck === undefined || props.context.app.config.enableStockCheck === false\r\n || props.isLoading || props.isUpdatingDimension || props.isLoadingDeliveryOptions || props.isUpdatingDeliveryOptions || props.isAddServiceItemToCart) {\r\n // Out of stock turn off, don't bother showing out of stock\r\n return false;\r\n }\r\n\r\n if (!props.data || !props.data.product.RecordId) {\r\n // No product exists, don't bother showing out of stock\r\n return false;\r\n }\r\n\r\n if (props.data.product.Dimensions) {\r\n if (props.data.product.Dimensions.find(dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value))) {\r\n // At least one dimension with no value exists on the product, so also don't show out of stock\r\n return false;\r\n }\r\n }\r\n const includedQuantityNumber = includeCurrentQuantity && props.quantity ? props.quantity : 1;\r\n\r\n return (props.productAvailability\r\n && props.productAvailability.AvailableQuantity !== undefined\r\n && props.productAvailability.AvailableQuantity >= includedQuantityNumber)\r\n ? false : true;\r\n};\r\n\r\nconst isIntermediateState = (props: IProductDetailsAddToCartComponentProps): boolean => {\r\n if (props.data.product.Dimensions) {\r\n if (props.data.product.Dimensions.find(dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value))) {\r\n // At least one dimension with no value exists on the product, so also not in intermediate state\r\n return false;\r\n }\r\n }\r\n\r\n if (!props.isLoading && !props.isUpdatingDimension && !props.isLoadingDeliveryOptions && !props.isUpdatingDeliveryOptions) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nconst propagateResult = (props: IProductDetailsAddToCartComponentProps): void => {\r\n if (props.onAdd) {\r\n props.onAdd();\r\n }\r\n};\r\n\r\nconst propagateError = (props: IProductDetailsAddToCartComponentProps, result: IProductDetailsAddToCartFailureResult): void => {\r\n if (props.onError) {\r\n props.onError(result);\r\n }\r\n};\r\n\r\n// @ts-ignore\r\nexport const ProductDetailsAddToCartComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\r\n 'AddToCart',\r\n { component: AddToCart, ...AddToCartComponentActions }\r\n);","/* tslint:disable: no-duplicate-imports */\r\nimport { IAddToCartFailureResult } from '@msdyn365-commerce/components';\r\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { OrgUnitLocation, ProductAvailableQuantity , ProductDimension, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { IProductDetailsBtrtsBuyboxResources } from '../component/components-interfaces-definition';\r\n\r\nexport function getQuantityError(stockLeft: number | undefined, resources: IProductDetailsBtrtsBuyboxResources): string | undefined {\r\n if (!stockLeft || stockLeft <= 0) {\r\n return resources.errorMessageOutOfStock;\r\n } else if (stockLeft === 1) {\r\n return resources.errorMessageOutOfRangeOneLeft;\r\n } else {\r\n return resources.errorMessageOutOfRangeFormat.replace('{numLeft}', stockLeft.toString());\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:cyclomatic-complexity\r\nexport function getGenericDonationsError(\r\n result: IAddToCartFailureResult,\r\n cart: ICartState | undefined,\r\n resources: IProductDetailsBtrtsBuyboxResources,\r\n context: ICoreContext>,\r\n product: SimpleProduct | undefined,\r\n productAvailability: ProductAvailableQuantity | undefined,\r\n location: OrgUnitLocation | undefined)\r\n : string | undefined {\r\n if (result.failureReason === 'EMPTYINPUT') {\r\n return resources.addedToCartFailureMessage;\r\n } else if (result.failureReason === 'CARTACTIONFAILED') {\r\n if (result.cartActionResult && result.cartActionResult.substatus === 'MAXQUANTITY') {\r\n // get the quantity of the product in cart\r\n let elementFoundAt:number = -1;\r\n const productIdToFind = product?.RecordId;\r\n\r\n for (let i = 0; i < cart!.cart.CartLines!.length; i++) {\r\n if (cart!.cart.CartLines![`${i}`].ProductId === productIdToFind &&\r\n (cart!.cart.CartLines![`${i}`].DeliveryMode || '') === (location && context.actionContext.requestContext.channel?.PickupDeliveryModeCode || '') &&\r\n (cart!.cart.CartLines![`${i}`].FulfillmentStoreId || '') === (location?.OrgUnitNumber || '')) {\r\n elementFoundAt = i;\r\n\r\n break;\r\n }\r\n }\r\n\r\n let curQuantity: number = 0;\r\n\r\n if (elementFoundAt !== -1) {\r\n const cartLineToUpdate = {...cart!.cart.CartLines![`${elementFoundAt}`]};\r\n curQuantity = cartLineToUpdate.Quantity || 0;\r\n }\r\n\r\n // get the quantity limit for the product\r\n const maxQuantityForCartLineItem = context.app.config.maxQuantityForCartLineItem;\r\n const availableQty = productAvailability?.AvailableQuantity;\r\n\r\n let quantityLimit: number;\r\n\r\n if (maxQuantityForCartLineItem === undefined && availableQty === undefined) {\r\n quantityLimit = 10;\r\n } else if (availableQty === undefined) {\r\n quantityLimit = maxQuantityForCartLineItem;\r\n } else if (maxQuantityForCartLineItem === undefined) {\r\n quantityLimit = availableQty;\r\n } else {\r\n quantityLimit = Math.min(maxQuantityForCartLineItem, availableQty);\r\n }\r\n\r\n return resources.maxQuantityLimitText.replace('{curQuantity}', curQuantity.toString()).replace('{maxQuantity}', quantityLimit.toString());\r\n } else if (result.cartActionResult && result.cartActionResult.substatus === 'QUANTITYLIMITS') {\r\n return result.cartActionResult?.errorDetails?.LocalizedMessage;\r\n }\r\n\r\n return resources.addedToCartFailureMessage;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function getConfigureDonationsErrors(result: ProductDimension[] | undefined, resources: IProductDetailsBtrtsBuyboxResources, isGiftCard?: Boolean): { [configureId: string]: string | undefined } {\r\n if (!result) {\r\n return {};\r\n }\r\n\r\n const dimensions: { [configureId: string]: string | undefined } = {};\r\n\r\n result.forEach(dimension => {\r\n dimensions[dimension.DimensionTypeValue] = getDimensionDonationsErrorString(dimension.DimensionTypeValue, resources, isGiftCard);\r\n });\r\n\r\n return dimensions;\r\n}\r\n\r\nexport function getDimensionDonationsErrorString(dimensionTypeValue: number, resources: IProductDetailsBtrtsBuyboxResources, isGiftCard?: Boolean): string {\r\n switch (dimensionTypeValue) {\r\n case 1: // ProductDimensionType.Color\r\n return resources.productDimensionTypeColorErrorMessage;\r\n case 2: // ProductDimensionType.Configuration\r\n return resources.productDimensionTypeConfigurationErrorMessage;\r\n case 3: // ProductDimensionType.Size\r\n return resources.productDimensionTypeSizeErrorMessage;\r\n case 4: // ProductDimensionType.Style\r\n return isGiftCard ? resources.productDimensionTypeAmountErrorMessage : resources.productDimensionTypeStyleErrorMessage;\r\n default:\r\n return '';\r\n }\r\n}","import React, { useState, useEffect } from 'react';\r\n\r\nimport { Alert } from '@msdyn365-commerce-modules/utilities';\r\nimport { IAddToCartFailureResult } from '@msdyn365-commerce/components';\r\nimport { IImageSettings } from '@msdyn365-commerce/core';\r\n\r\nimport { getConfigureDonationsErrors, getGenericDonationsError, getQuantityError } from '../utilities/btrts-donations-error-utilities';\r\nimport { SimpleProduct, ProductPrice, ProductAvailableQuantity, ProductDeliveryOptions, ProductWarehouseInventoryAvailability } from '@msdyn365-commerce/retail-proxy';\r\nimport { IProductInventoryInformation, FinitePromiseQueue, FinitePromiseQueueError, IPromiseQueue } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nimport { ProductDetailsAddToCartComponent } from './ecomm-form-add-to-cart-source.component';\r\n\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\n\r\nimport {\r\n IProductDetailsAddtoCartCallbacks,\r\n IProductDetailsAddToCartButtonProps,\r\n IProductDetailsBtrtsBuyboxResources,\r\n IProductDetailsErrorState,\r\n IProductDetailsErrorBlockProps,\r\n IProductDetailsProductListState,\r\n} from './components-interfaces-definition';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nexport const ProductDetailsAddtoCartButton: React.FC = ({\r\n product, simpleProductList, productsAvailability, productPriceList, cart, resources, context, config, localeCode, telemetryContent, isCustomPriceSelected, keyInPriceAmount, isPriceKeyedIn, cartAdded, matchingCartItems, events, eventIDs, serialIds, serialNumbers, serialNames, names, dedicatedBy, categories, messages, remarks, collectionOptions, hasTaxDeductions, nrics, buildingNames, unitNumbers, postalCodes, phoneNumbers,chineseNames, birthDates, birthTimes, schoolNames, blessingOptions, lightOptions, validFroms, validTos, dedicationPeriods, startDates, genders, countries, companyNames, deceasedRelationships, surgeryDates, deathDates, deathTimes, nameChanges, oldNames, quantities, subProduct, subProductQuantities, disabled, isEditMode, nameNextKins, contactNumbers, contactNumbersNextKin, passportNumbers, passportExpiryDates, passportIssuedDates,consents, isInsuranceIncluded }: any) => {\r\n const [callbackState, setCallBackState] = useState({\r\n quantity: 1,\r\n min: undefined,\r\n max: undefined,\r\n errorState: {\r\n configureErrors: {},\r\n quantityError: '',\r\n customAmountError: '',\r\n otherError: '',\r\n errorHost: 'ADDTOCART'\r\n },\r\n selectedProduct: undefined,\r\n productAvailableQuantity: undefined,\r\n productPrice: undefined,\r\n productDeliveryOptions: undefined,\r\n modalOpen: undefined,\r\n isUpdatingDimension: undefined,\r\n isUpdatingDeliveryOptions: undefined,\r\n isServiceItem: undefined,\r\n isPriceKeyedIn: undefined,\r\n keyInPriceAmount: undefined,\r\n isCustomPriceSelected: undefined\r\n });\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=240&h=240&m=6`, w: 0, h: 0 },\r\n lg: { q: `w=240&h=240&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=240&h=240&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const defaultMinimumKeyInPrice = config.minimumKeyInPrice;\r\n const defaultMaximumKeyInPrice = config.maximumKeyInPrice;\r\n\r\n let dimensionUpdateQueue: IPromiseQueue = new FinitePromiseQueue(2);\r\n let simpleProductValue: SimpleProduct = (simpleProductList.length > 0 ? simpleProductList[0] : []);\r\n let productPrice: ProductPrice = productPriceList.filter((record: ProductPrice) => product.RecordId === record.ProductId);\r\n let cartValue: ICartState = cart;\r\n let dimensions: { [id: number]: string } = {};\r\n let id = product['RecordId'];\r\n let typeName = 'ecomm-product-details-form';\r\n let isLoadingDeliveryOptions = false;\r\n let isUpdatingDeliveryOptions = false;\r\n let isUpdatingDimension = false;\r\n let maximumKeyInPrice: number | undefined;\r\n let minimumKeyInPrice: number | undefined;\r\n let isEmailDelivery = false;\r\n let isServiceItem = Number(callbackState.keyInPriceAmount) == 0 ? true : false;\r\n let isOrderQuantityLimitsFeatureEnabled = false;\r\n let productAvailability: ProductAvailableQuantity = productsAvailability?.filter((record: ProductWarehouseInventoryAvailability) => product.RecordId === record.ProductId).map((elem: ProductWarehouseInventoryAvailability) => {\r\n return {\r\n ProductId: elem.ProductId,\r\n AvailableQuantity: elem.TotalAvailable,\r\n UnitOfMeasure: 'Unit',\r\n ExtensionProperties: []\r\n };\r\n });\r\n\r\n const dialogStrings = {\r\n goToCartText: resources.buyBoxGoToCartText,\r\n continueShoppingText: resources.buyBoxContinueShoppingText,\r\n headerItemOneText: resources.buyBoxSingleItemText,\r\n headerItemFormatText: resources.buyBoxMultiLineItemFormatText,\r\n headerMessageText: resources.buyBoxHeaderMessageText,\r\n freePriceText: resources.priceFree,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText\r\n };\r\n\r\n let addToCartCallbacks: IProductDetailsAddtoCartCallbacks = {\r\n updateQuantity: (newQuantity: number): boolean => {\r\n const errorStateVal = { ...callbackState.errorState };\r\n errorStateVal.quantityError = undefined;\r\n errorStateVal.otherError = undefined;\r\n\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n quantity: newQuantity,\r\n errorState: errorStateVal\r\n })\r\n );\r\n return true;\r\n },\r\n updateErrorState: (newErrorState: IProductDetailsErrorState): void => {\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n errorState: newErrorState\r\n })\r\n );\r\n },\r\n updateSelectedProduct: (\r\n newSelectedProduct: SimpleProduct,\r\n newInventory: IProductInventoryInformation | undefined,\r\n newPrice: ProductPrice | undefined,\r\n newDeliveryOptions: ProductDeliveryOptions | undefined\r\n ): void => {\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n selectedProduct: newSelectedProduct,\r\n productAvailableQuantity: newInventory,\r\n productDeliveryOptions: newDeliveryOptions\r\n }));\r\n // _updatePrice(newPrice);\r\n },\r\n dimensionSelectedAsync: (selectedDimensionId: number, selectedDimensionValueId: string): Promise => {\r\n dimensions[`${selectedDimensionId}`] = selectedDimensionValueId;\r\n return dimensionUpdateQueue.enqueue(() => {\r\n // Return Promise, just temporary.\r\n return new Promise(r => r());// _updateDimensions();\r\n }).catch((reason: any) => { // tslint:disable-line:no-any\r\n // Ignore discarded processes.\r\n if (reason !== FinitePromiseQueueError.ProcessWasDiscardedFromTheQueue) {\r\n throw reason;\r\n }\r\n });\r\n },\r\n getDropdownName: (dimensionType: number, resource: IProductDetailsBtrtsBuyboxResources): string => {\r\n return 'getDropDownName';\r\n // return this._getDropdownName(dimensionType, resources);\r\n },\r\n changeModalOpen: (isModalOpen: boolean): void => {\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n modalOpen: isModalOpen\r\n }));\r\n },\r\n changeUpdatingDimension: (isUpdDimension: boolean): void => {\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n isUpdatingDimension: isUpdDimension\r\n }));\r\n },\r\n /**\r\n * Update isUpdatingDeliveryOptions state.\r\n *\r\n * @param isUpdatingDeliveryOptions - The status of updating delivery options.\r\n */\r\n changeUpdatingDeliveryOptions: (isUpdDeliveryOptions: boolean): void => {\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n isUpdatingDeliveryOptions: isUpdDeliveryOptions\r\n }));\r\n },\r\n updateKeyInPrice: (customPrice: number): void => {\r\n const errorStateVal = { ...callbackState.errorState };\r\n errorStateVal.customAmountError = undefined;\r\n\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n isPriceKeyedIn: true,\r\n keyInPriceAmount: customPrice,\r\n errorState: errorStateVal\r\n }));\r\n // this._updatePrice(this.state.productPrice, customPrice);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n let simpleProduct: SimpleProduct = simpleProductValue;\r\n let productPriceVal: ProductPrice = productPriceList.filter((record: ProductPrice) => product.RecordId === record.ProductId);\r\n\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n selectedProduct: simpleProduct,\r\n productPrice: productPriceVal[0]\r\n }));\r\n }, []);\r\n\r\n const onAddToCartFailed = async (result: IAddToCartFailureResult) => {\r\n let quantityErrorForState: string | undefined;\r\n let customAmountErrorForState: string | undefined;\r\n let cartObj: ICartState = (await cart);\r\n let otherErrorForState: string | undefined = getGenericDonationsError(result, cartObj, resources, context, simpleProductValue, productAvailability[0], undefined);\r\n\r\n if (result.failureReason === 'OUTOFSTOCK') {\r\n quantityErrorForState = result.failureReason === 'OUTOFSTOCK' ? getQuantityError(result.stockLeft, resources) : undefined;\r\n } else if (result.failureReason === 'CARTACTIONFAILED' && result.cartActionResult && (result.cartActionResult.substatus === 'MAXQUANTITY' || result.cartActionResult.substatus === 'QUANTITYLIMITS')) {\r\n quantityErrorForState = getGenericDonationsError(result, cartObj, resources, context, product, productsAvailability, undefined);\r\n\r\n // Prevent error duplication in otherError and quantityError.\r\n otherErrorForState = undefined;\r\n }\r\n\r\n if (result.failureReason === 'INVALIDCUSTOMAMOUNT') {\r\n if (callbackState.keyInPriceAmount === undefined || callbackState.keyInPriceAmount[0] < (minimumKeyInPrice || defaultMinimumKeyInPrice)) {\r\n const formatedAmountLimit = context.cultureFormatter.formatCurrency(minimumKeyInPrice || defaultMinimumKeyInPrice);\r\n\r\n customAmountErrorForState = resources.invalidSmallCustomAmountText.replace('{minAmount}', formatedAmountLimit);\r\n } else if (callbackState.keyInPriceAmount[0] > (maximumKeyInPrice || defaultMaximumKeyInPrice)) {\r\n const formatedAmountLimit = context.cultureFormatter.formatCurrency(maximumKeyInPrice || defaultMaximumKeyInPrice);\r\n\r\n customAmountErrorForState = resources.invalidLargeCustomAmountText.replace('{maxAmount}', formatedAmountLimit);\r\n }\r\n }\r\n\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n errorState: {\r\n errorHost: 'ADDTOCART',\r\n quantityError: quantityErrorForState,\r\n configureErrors: result.failureReason === 'MISSINGDIMENSION' ? getConfigureDonationsErrors(result.missingDimensions, resources, product?.IsGiftCard) : {},\r\n customAmountError: customAmountErrorForState,\r\n otherError: otherErrorForState\r\n }\r\n })\r\n );\r\n };\r\n\r\n const onAddToCartSuccess = () => {\r\n if (callbackState.errorState?.quantityError !== '' || callbackState.errorState?.customAmountError !== '' || callbackState.errorState?.otherError !== '') {\r\n setCallBackState(prevState => ({\r\n ...prevState,\r\n errorState: {\r\n configureErrors: {},\r\n quantityError: '',\r\n customAmountError: '',\r\n otherError: '',\r\n errorHost: 'ADDTOCART'\r\n }\r\n }));\r\n }\r\n\r\n // Updating state variable.\r\n cartAdded();\r\n };\r\n\r\n return (\r\n
\r\n {product && (\r\n \r\n )}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport const PrductDetailsAddtoCartErrorBlock: React.FC = ({ showError, configureErrors, quantityError, customAmountError, otherError, resources }) => {\r\n let errorMessages: (string | undefined)[] = [];\r\n\r\n errorMessages = Object.values(configureErrors).filter(message => message !== undefined);\r\n\r\n if (quantityError) {\r\n errorMessages.push(quantityError);\r\n }\r\n\r\n if (customAmountError) {\r\n errorMessages.push(customAmountError);\r\n }\r\n\r\n if (otherError) {\r\n errorMessages.push(otherError);\r\n }\r\n\r\n return (\r\n 0} color='danger' assertive={true} aria-label={resources.buyboxErrorMessageHeader} >\r\n \r\n {errorMessages.map((message, index) => {\r\n return
{message}
;\r\n })}\r\n
\r\n );\r\n};\r\n","import React, { useEffect, useState } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { AsyncResult, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackPrice?: any;\r\n callbackName?: any;\r\n callbackCategory?: any;\r\n callbackDedicatedBy?: any;\r\n callbackNamesEntered?: any;\r\n callbackPricesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst AmountDeceasedNameForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackPrice, callbackName, callbackCategory, callbackDedicatedBy,\r\n callbackNamesEntered, callbackPricesEntered,\r\n formItems, config, localeCode, actionContext, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n var minDonationNumberOption = Number(formScheme[0].field_options![0]);\r\n var minDonationstringOption = formScheme[0].field_options![0];\r\n\r\n const [customPrice, setCustomPrice] = useState([minDonationNumberOption]);\r\n const [inputValue, setInputValue] = useState(['']);\r\n const [donationValue, setDonationValue] = useState([minDonationstringOption]);\r\n const [radioValue, setRadioValue] = useState([resource.categoryFamilyLabel[`${localeCode}`]]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [dedicatedBy, setDedicatedBy] = useState(['']);\r\n\r\n const formLabels = resource.amountDeceasedNameForm[`${localeCode}`];\r\n\r\n const noOfNames = formScheme.find(form => form.field_name === 'name')!.field_number!;\r\n const deceasedNames = formScheme.find(form => form.field_name === 'name')!.field_number3!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _onChangePriceValue = (event: any, index: number) => {\r\n _setDonationValueArray(event.target.value, index);\r\n\r\n if (event.target.value === resource.otherLabel[`${localeCode}`]) {\r\n _setInputValueArray('0', index);\r\n _setCustomPriceArray(0, index);\r\n } else {\r\n _setCustomPriceArray(Number(event.target.value), index);\r\n _setInputValueArray('', index);\r\n }\r\n };\r\n\r\n const _onChangeRadioValue = (event: any, index: number) => {\r\n _setRadioValueArray(event.target.value, index);\r\n\r\n let ceremonyNameArray = ceremonyName.slice();\r\n let existingCeremonyName = ceremonyNameArray[`${index}`];\r\n let existingNameArray = existingCeremonyName.split(';');\r\n\r\n let dedicatedNameArray = dedicatedBy.slice();\r\n\r\n dedicatedNameArray[`${index}`] = '';\r\n\r\n if (event.target.value === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < noOfNames) {\r\n existingCeremonyName += ';'.repeat(noOfNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > noOfNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n } else {\r\n if (existingNameArray.length < deceasedNames) {\r\n existingCeremonyName += ';'.repeat(deceasedNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > deceasedNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = existingCeremonyName;\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedNameArray);\r\n };\r\n\r\n const _setCustomPriceArray = (price: number, index: number) => {\r\n const customPriceArray = customPrice.slice();\r\n\r\n while (typeof customPriceArray[`${index}`] === 'undefined') {\r\n customPriceArray.push(minDonationNumberOption);\r\n }\r\n\r\n customPriceArray[`${index}`] = price;\r\n\r\n setCustomPrice(customPriceArray);\r\n\r\n callbackPrice(customPriceArray);\r\n };\r\n\r\n const _setDonationValueArray = (value: string, index: number) => {\r\n const donationValueArray = donationValue.slice();\r\n\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n while (typeof donationValueArray[`${index}`] === 'undefined' || donationValueArray[`${index}`] === \"0\") {\r\n donationValueArray.push(element!.field_options![0]);\r\n }\r\n\r\n donationValueArray[`${index}`] = value !== '' ? value : element!.field_options![0];\r\n\r\n setDonationValue(donationValueArray);\r\n };\r\n\r\n const isNumeric = (num: any): boolean => { return !isNaN(num); };\r\n\r\n const _setInputValue = (event: any, index: number) => {\r\n if (isNumeric(event.target.value)) {\r\n _setInputValueArray(event.target.value, index);\r\n _setDonationValueArray(resource.otherLabel[`${localeCode}`], index);\r\n _setCustomPriceArray(Number(event.target.value), index);\r\n }\r\n };\r\n\r\n const _setInputValueArray = (value: string, index: number) => {\r\n let inputValueArray = inputValue.slice();\r\n\r\n while (typeof inputValueArray[`${index}`] === 'undefined') {\r\n inputValueArray.push('');\r\n }\r\n\r\n inputValueArray[`${index}`] = value;\r\n\r\n setInputValue(inputValueArray);\r\n };\r\n\r\n const _setRadioValueArray = (value: string, index: number) => {\r\n let radioValueArray = radioValue.slice();\r\n\r\n while (typeof radioValueArray[`${index}`] === 'undefined') {\r\n radioValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n radioValueArray[`${index}`] = value;\r\n\r\n setRadioValue(radioValueArray);\r\n\r\n callbackCategory(radioValueArray);\r\n };\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n let inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n // _setCustomPriceArray(0, index);\r\n };\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedBy, radioValue);\r\n };\r\n\r\n const _setDedicatedByValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n _setDedicatedByArray(event.target.value.substring(0, maxLength - 1), index);\r\n\r\n };\r\n\r\n const _setDedicatedByArray = (name: string, index: number) => {\r\n let dedicatedByArray = dedicatedBy.slice();\r\n while (typeof dedicatedByArray[`${index}`] === 'undefined') {\r\n dedicatedByArray.push('');\r\n }\r\n dedicatedByArray[`${index}`] = name;\r\n setDedicatedBy(dedicatedByArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n _checkNamesEntered(ceremonyName, dedicatedByArray, radioValue);\r\n };\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[], dedicatedByArray: string[], categoryArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n\r\n if (categoryArray[`${i}`] === resource.categoryDeceasedLabel[`${localeCode}`] && dedicatedByArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n const customPriceArray = customPrice.slice();\r\n const donationValueArray = donationValue.slice();\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n customPriceArray.push(parseInt(element!.field_options![0]));\r\n donationValueArray.push(element!.field_options![0]);\r\n categoryValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n ceremonyNameArray.push('');\r\n dedicatedByArray.push('');\r\n\r\n setCustomPrice(customPriceArray);\r\n setDonationValue(donationValueArray);\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackPrice(customPriceArray);\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n const customPriceArray = customPrice.slice();\r\n const inputValueArray = inputValue.slice();\r\n const donationValueArray = donationValue.slice();\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n if (typeof customPriceArray[`${index}`] !== 'undefined') {\r\n if (customPriceArray.length > 1) {\r\n customPriceArray.splice(index, 1);\r\n } else {\r\n customPriceArray[0] = parseInt(element!.field_options![0]);\r\n }\r\n }\r\n\r\n if (typeof inputValueArray[`${index}`] !== 'undefined') {\r\n if (inputValueArray.length > 1) {\r\n inputValueArray.splice(index, 1);\r\n } else {\r\n inputValueArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof donationValueArray[`${index}`] !== 'undefined') {\r\n if (donationValueArray.length > 1) {\r\n donationValueArray.splice(index, 1);\r\n } else {\r\n donationValueArray[0] = element!.field_options![0];\r\n customPriceArray[0] = minDonationNumberOption;\r\n }\r\n }\r\n\r\n if (typeof categoryValueArray[`${index}`] !== 'undefined') {\r\n if (categoryValueArray.length > 1) {\r\n categoryValueArray.splice(index, 1);\r\n } else {\r\n categoryValueArray[0] = resource.categoryFamilyLabel[`${localeCode}`];\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof dedicatedByArray[`${index}`] !== 'undefined') {\r\n if (dedicatedByArray.length > 1) {\r\n dedicatedByArray.splice(index, 1);\r\n } else {\r\n dedicatedByArray[0] = '';\r\n }\r\n }\r\n\r\n setCustomPrice(customPriceArray);\r\n setInputValue(inputValueArray);\r\n setDonationValue(donationValueArray);\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackPrice(customPriceArray);\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedByArray, categoryValueArray);\r\n }\r\n\r\n useEffect(() => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n var minDonationvalue = Number(element?.field_options![0]);\r\n var minDonationString = String(element?.field_options![0]);\r\n\r\n const existingDonationValue: string[] = [];\r\n const existingInputValue: string[] = [];\r\n const existingCustomPriceAmount: number[] = [];\r\n const existingRadioValue: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingDedicatedBy: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n var customPriceAmount: number = formItems[`${i}`]['customPriceAmount'];\r\n const itemCategory = formItems[`${i}`]['category'];\r\n const itemNames: string[] = formItems[`${i}`]['names'];\r\n\r\n switch (customPriceAmount) {\r\n case 0:\r\n customPriceAmount = Number(minDonationvalue);\r\n existingDonationValue.push(minDonationString);\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 2:\r\n existingDonationValue.push('2');\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 5:\r\n existingDonationValue.push('5');\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 10:\r\n existingDonationValue.push('10');\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 50:\r\n existingDonationValue.push('50');\r\n existingInputValue.push('');\r\n break;\r\n\r\n default:\r\n if (customPriceAmount) {\r\n existingDonationValue.push(resource.otherLabel[`${localeCode}`]);\r\n existingInputValue.push(customPriceAmount.toString());\r\n } else {\r\n customPriceAmount = Number(minDonationvalue);\r\n existingDonationValue.push(minDonationString);\r\n existingInputValue.push('');\r\n }\r\n break;\r\n }\r\n\r\n let itemNameCount = 0;\r\n\r\n if (itemCategory === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n itemNameCount = noOfNames;\r\n } else {\r\n itemNameCount = deceasedNames;\r\n }\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index != 0 && index < itemNameCount) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n existingCustomPriceAmount.push(customPriceAmount);\r\n existingRadioValue.push(itemCategory);\r\n existingCeremonyName.push(itemName);\r\n existingDedicatedBy.push(formItems[`${i}`]['dedicatedBy']);\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n setDedicatedBy(existingDedicatedBy);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackDedicatedBy(existingDedicatedBy);\r\n\r\n _checkNamesEntered(existingCeremonyName, existingDedicatedBy, existingRadioValue);\r\n } else {\r\n existingDonationValue.push(minDonationString); \r\n existingCustomPriceAmount.push(minDonationvalue); \r\n existingRadioValue.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n existingInputValue.push('');\r\n }\r\n\r\n setDonationValue(existingDonationValue);\r\n setInputValue(existingInputValue);\r\n setCustomPrice(existingCustomPriceAmount);\r\n setRadioValue(existingRadioValue);\r\n \r\n callbackPrice(existingCustomPriceAmount);\r\n callbackCategory(existingRadioValue);\r\n\r\n callbackPricesEntered(true);\r\n }, [formItems]);\r\n\r\n const _buildAmountField = (element: IField, idx: number): JSX.Element | null => {\r\n if (element.field_options) {\r\n return (\r\n
\r\n
\r\n

{formLabels.amount}

\r\n {element.field_options.map((option: string) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n }\r\n\r\n const _buildCategoryField = (idx: number): JSX.Element | null => {\r\n if (typeof radioValue[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.category}

\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number, isDeceased: boolean): JSX.Element[] => {\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n {isDeceased &&

{formLabels.deceasedName}

}\r\n {!isDeceased &&

{formLabels.name.endsWith('*') ? nameIndex === 0 ? formLabels.name.substring(0, formLabels.name.length - 1) + ' ' + (nameIndex + 1) + '*' : formLabels.name.replace('*', ' ' + (nameIndex + 1)) : formLabels.name + ' ' + nameIndex + 1}

}\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n const _buildDedicatedBy = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicatedBy}

\r\n _setDedicatedByValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'amount') {\r\n return (\r\n
\r\n {_buildAmountField(element, idx)}\r\n {_buildCategoryField(idx)}\r\n {radioValue[`${idx}`] === String(resource.categoryFamilyLabel[`${localeCode}`]) && noOfNames > 0 && _buildNameGroup(idx, noOfNames, radioValue[`${idx}`] === String(resource.categoryDeceasedLabel[`${localeCode}`]))}\r\n {radioValue[`${idx}`] === String(resource.categoryDeceasedLabel[`${localeCode}`]) && deceasedNames > 0 && _buildNameGroup(idx, deceasedNames, radioValue[`${idx}`] === String(resource.categoryDeceasedLabel[`${localeCode}`]))}\r\n {radioValue[`${idx}`] === String(resource.categoryDeceasedLabel[`${localeCode}`]) && deceasedNames > 0 && _buildDedicatedBy(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price! === 0 ? typeof customPrice[`${idx}`] !== 'undefined' ? customPrice[`${idx}`] : '0' : selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default AmountDeceasedNameForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackCategory?: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackPhoneNumber: any;\r\n callbackNamesEntered?: any;\r\n callbackAddressEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst CategoryNamesAddressForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackEvent, callbackEventID, callbackName, callbackCategory, callbackBuilding, callbackUnitNumber,\r\n callbackPostalCode, callbackPhoneNumber, callbackNamesEntered, callbackAddressEntered,\r\n formItems, config, localeCode, actionContext, userInfo, isMobile, isEditMode, productEvents, allowMultipleRegistrations }) => {\r\n const [eventNames, setEventNames] = useState(['']);\r\n const [eventIDs, setEventIDs] = useState(['']);\r\n const [categories, setCategories] = useState([resource.categoryFamilyLabel[`${localeCode}`]]);\r\n const [names, setNames] = useState(['']);\r\n const [buildingNames, setBuildingNames] = useState(['']);\r\n const [unitNumbers, setUnitNumbers] = useState(['']);\r\n const [postalCodes, setPostalCodes] = useState(['']);\r\n const [phoneNumbers, setPhoneNumbers] = useState(['']);\r\n\r\n const formLabels = resource.categoryNamesAddressForm[`${localeCode}`];\r\n\r\n const namesCount = formScheme.find(form => form.field_name === 'name')!.field_number!;\r\n const companyCount = formScheme.find(form => form.field_name === 'name')!.field_number2!;\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _onChangeCategory = (event: any, index: number) => {\r\n _setCategory(event.target.value, index);\r\n\r\n const namesArray = names.slice();\r\n\r\n let value = namesArray[`${index}`];\r\n\r\n if (value) {\r\n const count = event.target.value === resource.categoryFamilyLabel[`${localeCode}`] ? namesCount : companyCount;\r\n\r\n let valueArray = value.split(';');\r\n\r\n if (valueArray.length < count) {\r\n value += ';'.repeat(count - valueArray.length - 1);\r\n } else { \r\n while (valueArray.length > count) {\r\n valueArray.pop();\r\n }\r\n\r\n value = valueArray.join(';');\r\n }\r\n\r\n namesArray[`${index}`] = value;\r\n\r\n setNames(namesArray);\r\n\r\n callbackName(namesArray);\r\n }\r\n }\r\n\r\n const _setCategory = (value: string, index: number) => {\r\n const valueArray = categories.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setCategories(valueArray);\r\n\r\n callbackCategory(valueArray);\r\n }\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _formatNameInput = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleNames = names[`${index}`];\r\n\r\n if (inputMultipleNames) {\r\n if (!inputMultipleNames.includes(';')) {\r\n inputMultipleNames += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n const newValues = inputMultipleNames.split(';');\r\n\r\n newValues[`${nameIndex}`] = inputName;\r\n inputName = newValues.join(';');\r\n }\r\n \r\n _setName(inputName, index);\r\n }\r\n\r\n const _setName = (name: string, index: number) => {\r\n const ceremonyNameArray = names.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setNames(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNameEntered(ceremonyNameArray);\r\n }\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingNames.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setBuildingNames(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n\r\n _checkAddressEntered(valueArray, postalCodes);\r\n }\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setUnitNumbers(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n }\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCodes.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if(value.length<=6){\r\n valueArray[`${index}`] = value;\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n setPostalCodes(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n\r\n _checkAddressEntered(buildingNames, valueArray);\r\n }\r\n\r\n const _setPhoneNumber = (value: string, index: number) => {\r\n const valueArray = phoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setPhoneNumbers(valueArray);\r\n\r\n callbackPhoneNumber(valueArray);\r\n }\r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n if (!valueArray || valueArray.length === 0) {\r\n checked = false;\r\n }\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkAddressEntered = (buildingNamesArray: string[], postalCodesArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < buildingNamesArray.length; ++i) {\r\n result = result && buildingNamesArray[`${i}`] !== '' && postalCodesArray[`${i}`] !== '';\r\n }\r\n\r\n callbackAddressEntered(result);\r\n }\r\n\r\n const _initBuildingField = () => {\r\n if (userValid) {\r\n return userInfo.gmb_blockno.trim() + (userInfo.gmb_buildingno !== '' ? ', ' + userInfo.gmb_buildingno.trim() : '') + (userInfo.gmb_buildingname !== '' ? ', ' + userInfo.gmb_buildingname.trim() : '') + (userInfo.address1_line1 !== '' ? ', ' + userInfo.address1_line1.trim() : '');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const eventNamesArray = eventNames.slice();\r\n const eventIDsArray = eventIDs.slice();\r\n const namesArray = names.slice();\r\n const categoriesArray = categories.slice();\r\n const buildingNamesArray = buildingNames.slice();\r\n const unitNumbersArray = unitNumbers.slice();\r\n const postalCodesArray = postalCodes.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n\r\n eventNamesArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n eventIDsArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n namesArray.push('');\r\n categoriesArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n phoneNumbersArray.push('');\r\n\r\n if (userValid) {\r\n buildingNamesArray.push(_initBuildingField());\r\n unitNumbersArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodesArray.push(userInfo.address1_postalcode);\r\n } else {\r\n buildingNamesArray.push('');\r\n unitNumbersArray.push('');\r\n postalCodesArray.push('');\r\n }\r\n\r\n setEventNames(eventNamesArray);\r\n setEventIDs(eventIDsArray);\r\n setNames(namesArray);\r\n setCategories(categoriesArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n callbackName(namesArray);\r\n callbackCategory(categoriesArray);\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n\r\n callbackNamesEntered(false);\r\n \r\n _checkAddressEntered(buildingNamesArray, postalCodesArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n \r\n formItems.splice(index, 1);\r\n \r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const eventNamesArray = eventNames.slice();\r\n const eventIDsArray = eventIDs.slice();\r\n const namesArray = names.slice();\r\n const categoriesArray = categories.slice();\r\n const buildingNamesArray = buildingNames.slice();\r\n const unitNumbersArray = unitNumbers.slice();\r\n const postalCodesArray = postalCodes.slice();\r\n\r\n if (typeof eventNamesArray[`${index}`] !== 'undefined') {\r\n if (eventNamesArray.length > 1) {\r\n eventNamesArray.splice(index, 1);\r\n } else {\r\n eventNamesArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n }\r\n }\r\n\r\n if (typeof eventIDsArray[`${index}`] !== 'undefined') {\r\n if (eventIDsArray.length > 1) {\r\n eventIDsArray.splice(index, 1);\r\n } else {\r\n eventIDsArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n }\r\n }\r\n\r\n if (typeof namesArray[`${index}`] !== 'undefined') {\r\n if (namesArray.length > 1) {\r\n namesArray.splice(index, 1);\r\n } else {\r\n namesArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof categoriesArray[`${index}`] !== 'undefined') {\r\n if (categoriesArray.length > 1) {\r\n categoriesArray.splice(index, 1);\r\n } else {\r\n categoriesArray[0] = resource.categoryFamilyLabel[`${localeCode}`];\r\n }\r\n }\r\n\r\n if (typeof buildingNamesArray[`${index}`] !== 'undefined') {\r\n if (buildingNamesArray.length > 1) {\r\n buildingNamesArray.splice(index, 1);\r\n } else {\r\n buildingNamesArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof unitNumbersArray[`${index}`] !== 'undefined') {\r\n if (unitNumbersArray.length > 1) {\r\n unitNumbersArray.splice(index, 1);\r\n } else {\r\n unitNumbersArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof postalCodesArray[`${index}`] !== 'undefined') {\r\n if (postalCodesArray.length > 1) {\r\n postalCodesArray.splice(index, 1);\r\n } else {\r\n postalCodesArray[0] = '';\r\n }\r\n }\r\n\r\n setEventNames(eventNamesArray);\r\n setEventIDs(eventIDsArray);\r\n setNames(namesArray);\r\n setCategories(categoriesArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n callbackName(namesArray);\r\n callbackCategory(categoriesArray);\r\n callbackAddressEntered(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n\r\n _checkNameEntered(namesArray);\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray);\r\n }\r\n\r\n useEffect(() => {\r\n const eventNamesArray: string[] = [];\r\n const eventIDsArray: string[] = [];\r\n const namesArray: string[] = [];\r\n const categoriesArray: string[] = [];\r\n const buildingNamesArray: string[] = [];\r\n const unitNumbersArray: string[] = [];\r\n const postalCodesArray: string[] = [];\r\n const phoneNumbersArray: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemNames: string[] = formItems[`${i}`]['names'];\r\n const itemCategory = formItems[`${i}`]['category'];\r\n\r\n const itemNameCount = itemCategory === resource.categoryFamilyLabel[`${localeCode}`] ? namesCount : companyCount;\r\n\r\n let itemName = '';\r\n\r\n itemNames.forEach((name, index) => itemName += index != 0 && index < itemNameCount ? ';' + name : name);\r\n\r\n eventNamesArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n eventIDsArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n namesArray.push(itemName);\r\n categoriesArray.push(itemCategory);\r\n buildingNamesArray.push(formItems[`${i}`]['buildingName']);\r\n unitNumbersArray.push(formItems[`${i}`]['unitNumber']);\r\n postalCodesArray.push(formItems[`${i}`]['postalCode']);\r\n phoneNumbersArray.push(formItems[`${i}`]['phoneNumber']);\r\n }\r\n\r\n setNames(namesArray);\r\n\r\n callbackName(namesArray);\r\n\r\n _checkNameEntered(namesArray);\r\n } else {\r\n eventNamesArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n eventIDsArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n categoriesArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n buildingNamesArray.push(_initBuildingField());\r\n phoneNumbersArray.push('');\r\n\r\n if (userValid) {\r\n unitNumbersArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodesArray.push(userInfo.address1_postalcode);\r\n } else {\r\n unitNumbersArray.push('');\r\n postalCodesArray.push('');\r\n }\r\n }\r\n\r\n setEventNames(eventNamesArray);\r\n setEventIDs(eventIDsArray);\r\n setCategories(categoriesArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n callbackCategory(categoriesArray);\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray);\r\n }, [formItems]);\r\n\r\n const _buildCategoryField = (idx: number): JSX.Element | null => {\r\n if (typeof categories[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.category}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{nameLabel.endsWith('*') ? nameIndex === 0 ? nameLabel.substring(0, nameLabel.length - 1) + ' ' + (nameIndex + 1) + '*' : nameLabel.replace('*', ' ' + (nameIndex + 1)) : nameLabel + ' ' + nameIndex + 1}

\r\n _formatNameInput(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n const _buildAddressField = (formScheme: IField[], idx: number): JSX.Element => {\r\n return (\r\n
\r\n

{formLabels.addressPrompt}

\r\n
\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n

{formLabels.addressCountryPrompt}

\r\n
\r\n
\r\n\r\n
\r\n

{formLabels.addressPhone}

\r\n _setPhoneNumber(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'name') {\r\n return (\r\n
\r\n {_buildCategoryField(idx)}\r\n {categories[`${idx}`] === String(resource.categoryFamilyLabel[`${localeCode}`]) && namesCount > 0 && _buildNameGroup(idx, namesCount)}\r\n {categories[`${idx}`] === String(resource.categoryCompanyLabel[`${localeCode}`]) && companyCount > 0 && _buildNameGroup(idx, companyCount)}\r\n {_buildAddressField(formScheme, idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CategoryNamesAddressForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackCategory?: any;\r\n callbackNamesEntered?: any;\r\n callbackCollection: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst CategoryNamesCollectionForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackEvent, callbackEventID, callbackName, callbackCategory, callbackNamesEntered, callbackCollection, formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents, allowMultipleRegistrations }) => {\r\n const [ceremonyValue, setCeremonyValue] = useState(['']);\r\n const [ceremonyIDValue, setCeremonyIDValue] = useState(['']);\r\n const [radioValue, setRadioValue] = useState([resource.categoryFamilyLabel[`${localeCode}`]]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [optionValue, setOptionValue] = useState([resource.optionCollectionLabel[`${localeCode}`]]);\r\n\r\n const formLabels = resource.categoryNamesCollectionForm[`${localeCode}`];\r\n\r\n const noOfNames = formScheme.find(form => form.field_type === 'textBox')!.field_number!;\r\n const companyNames = formScheme.find(form => form.field_type === 'textBox')!.field_number2!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _onChangeRadioValue = (event: any, index: number) => {\r\n _setRadioValueArray(event.target.value, index);\r\n\r\n let ceremonyNameArray = ceremonyName.slice();\r\n\r\n let existingCeremonyName = ceremonyNameArray[`${index}`];\r\n\r\n if (existingCeremonyName) {\r\n let existingNameArray = existingCeremonyName.split(';');\r\n\r\n if (event.target.value === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < noOfNames) {\r\n existingCeremonyName += ';'.repeat(noOfNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > noOfNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n } else {\r\n if (existingNameArray.length < companyNames) {\r\n existingCeremonyName += ';'.repeat(companyNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > companyNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n }\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = existingCeremonyName;\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n \r\n callbackName(ceremonyNameArray);\r\n }\r\n\r\n const _onChangeOptionValue = (event: any, index: number) => {\r\n _setOptionValueArray(event.target.value, index);\r\n }\r\n\r\n const _setRadioValueArray = (value: string, index: number) => {\r\n let radioValueArray = radioValue.slice();\r\n\r\n while (typeof radioValueArray[`${index}`] === 'undefined') {\r\n radioValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n radioValueArray[`${index}`] = value;\r\n\r\n setRadioValue(radioValueArray);\r\n \r\n callbackCategory(radioValueArray);\r\n }\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (inputMultipleName) {\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n let inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n }\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n let valueArray = ceremonyName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setCeremonyName(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkInputEntered(valueArray);\r\n }\r\n\r\n const _setOptionValueArray = (value: string, index: number) => {\r\n const valueArray = optionValue.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(resource.optionCollectionLabel[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setOptionValue(valueArray);\r\n\r\n callbackCollection(valueArray);\r\n }\r\n\r\n const _checkInputEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n if (!valueArray || valueArray.length === 0) {\r\n checked = false;\r\n }\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const categoryValueArray = radioValue.slice();\r\n const optionValueArray = optionValue.slice();\r\n\r\n ceremonyValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n ceremonyIDValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n ceremonyNameArray.push('');\r\n categoryValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n optionValueArray.push(resource.optionCollectionLabel[`${localeCode}`]);\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setRadioValue(categoryValueArray);\r\n setOptionValue(optionValueArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackCategory(categoryValueArray);\r\n callbackCollection(optionValueArray);\r\n\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const categoryValueArray = radioValue.slice();\r\n\r\n if (typeof ceremonyValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyValueArray.length > 1) {\r\n ceremonyValueArray.splice(index, 1);\r\n } else {\r\n ceremonyValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyIDValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyIDValueArray.length > 1) {\r\n ceremonyIDValueArray.splice(index, 1);\r\n } else {\r\n ceremonyIDValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof categoryValueArray[`${index}`] !== 'undefined') {\r\n if (categoryValueArray.length > 1) {\r\n categoryValueArray.splice(index, 1);\r\n } else {\r\n categoryValueArray[0] = resource.categoryFamilyLabel[`${localeCode}`];\r\n }\r\n }\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkInputEntered(ceremonyNameArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingCeremony: string[] = [];\r\n const existingCeremonyID: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingRadioValue: string[] = [];\r\n const existingOptionValue: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemNames: string[] = formItems[`${i}`]['names'];\r\n const itemCategory = formItems[`${i}`]['category'];\r\n\r\n let itemNameCount = 0;\r\n\r\n if (itemCategory === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n itemNameCount = noOfNames;\r\n } else {\r\n itemNameCount = companyNames;\r\n }\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index != 0 && index < itemNameCount) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n existingCeremony.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n existingCeremonyID.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n existingCeremonyName.push(itemName);\r\n existingRadioValue.push(itemCategory);\r\n existingOptionValue.push(formItems[`${i}`]['donationOption']);\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n\r\n callbackName(existingCeremonyName);\r\n\r\n _checkInputEntered(existingCeremonyName);\r\n } else {\r\n existingCeremony.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n existingCeremonyID.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n existingRadioValue.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n existingOptionValue.push(resource.optionCollectionLabel[`${localeCode}`]);\r\n }\r\n\r\n setCeremonyValue(existingCeremony);\r\n setCeremonyIDValue(existingCeremonyID);\r\n setRadioValue(existingRadioValue);\r\n setOptionValue(existingOptionValue);\r\n\r\n callbackEvent(existingCeremony);\r\n callbackEventID(existingCeremonyID);\r\n callbackCategory(existingRadioValue);\r\n callbackCollection(existingOptionValue);\r\n }, [formItems])\r\n\r\n const _buildCategoryField = (idx: number): JSX.Element | null => {\r\n if (typeof radioValue[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.category}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{nameLabel.endsWith('*') ? nameIndex === 0 ? nameLabel.substring(0, nameLabel.length - 1) + ' ' + (nameIndex + 1) + '*' : nameLabel.replace('*', ' ' + (nameIndex + 1)) : nameLabel + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n const _buildOptionField = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.option}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'category') {\r\n return (\r\n
\r\n {_buildCategoryField(idx)}\r\n {radioValue[`${idx}`] === String(resource.categoryFamilyLabel[`${localeCode}`]) && noOfNames > 0 && _buildNameGroup(idx, noOfNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryCompanyLabel[`${localeCode}`]) && companyNames > 0 && _buildNameGroup(idx, companyNames)}\r\n {_buildOptionField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CategoryNamesCollectionForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackCategory?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst CategoryNamesForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackEvent, callbackEventID, callbackName, callbackCategory, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents, allowMultipleRegistrations }) => {\r\n const [radioValue, setRadioValue] = useState([resource.categoryFamilyLabel[`${localeCode}`]]);\r\n const [ceremonyValue, setCeremonyValue] = useState(['']);\r\n const [ceremonyIDValue, setCeremonyIDValue] = useState(['']);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n\r\n const formLabels = resource.categoryNamesForm[`${localeCode}`];\r\n\r\n const noOfNames = formScheme.find(form => form.field_type === 'textBox')!.field_number!;\r\n const companyNames = formScheme.find(form => form.field_type === 'textBox')!.field_number2!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _onChangeRadioValue = (event: any, index: number) => {\r\n _setRadioValueArray(event.target.value, index);\r\n\r\n let ceremonyNameArray = ceremonyName.slice();\r\n let existingCeremonyName = ceremonyNameArray[`${index}`];\r\n if (existingCeremonyName) {\r\n let existingNameArray = existingCeremonyName.split(';');\r\n\r\n if (event.target.value === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < noOfNames) {\r\n existingCeremonyName += ';'.repeat(noOfNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > noOfNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n } else {\r\n if (existingNameArray.length < companyNames) {\r\n existingCeremonyName += ';'.repeat(companyNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > companyNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n }\r\n }\r\n ceremonyNameArray[`${index}`] = existingCeremonyName;\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n };\r\n\r\n const _setRadioValueArray = (value: string, index: number) => {\r\n let radioValueArray = radioValue.slice();\r\n\r\n while (typeof radioValueArray[`${index}`] === 'undefined') {\r\n radioValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n radioValueArray[`${index}`] = value;\r\n\r\n setRadioValue(radioValueArray);\r\n\r\n callbackCategory(radioValueArray);\r\n };\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n \r\n if (inputMultipleName) {\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n const inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n }\r\n \r\n _setCeremonyNameArray(inputName, index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n }\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n categoryValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n ceremonyValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n ceremonyIDValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n ceremonyNameArray.push('');\r\n\r\n setRadioValue(categoryValueArray);\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackCategory(categoryValueArray);\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n if (typeof categoryValueArray[`${index}`] !== 'undefined') {\r\n if (categoryValueArray.length > 1) {\r\n categoryValueArray.splice(index, 1);\r\n } else {\r\n categoryValueArray[0] = resource.categoryFamilyLabel[`${localeCode}`];\r\n }\r\n }\r\n\r\n if (typeof ceremonyValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyValueArray.length > 1) {\r\n ceremonyValueArray.splice(index, 1);\r\n } else {\r\n ceremonyValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyIDValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyIDValueArray.length > 1) {\r\n ceremonyIDValueArray.splice(index, 1);\r\n } else {\r\n ceremonyIDValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n setRadioValue(categoryValueArray);\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackCategory(categoryValueArray);\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingRadioValue: string[] = [];\r\n const existingCeremony: string[] = [];\r\n const existingCeremonyID: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemNames: string[] = formItems[`${i}`]['names'];\r\n const itemCategory = formItems[`${i}`]['category'];\r\n\r\n let itemNameCount = noOfNames;\r\n\r\n if (itemCategory !== resource.categoryFamilyLabel[`${localeCode}`]) {\r\n itemNameCount = companyNames;\r\n }\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index !== 0 && index < itemNameCount) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n existingCeremony.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n existingCeremonyID.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n existingRadioValue.push(itemCategory);\r\n existingCeremonyName.push(itemName);\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n\r\n callbackName(existingCeremonyName);\r\n\r\n _checkNamesEntered(existingCeremonyName);\r\n } else {\r\n existingCeremony.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n existingCeremonyID.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n existingRadioValue.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n setCeremonyValue(existingCeremony);\r\n setCeremonyIDValue(existingCeremonyID);\r\n setRadioValue(existingRadioValue);\r\n\r\n callbackCategory(existingRadioValue);\r\n callbackEvent(existingCeremony);\r\n callbackEventID(existingCeremonyID);\r\n }, [formItems]);\r\n\r\n const _buildCategoryField = (idx: number): JSX.Element | null => {\r\n if (typeof radioValue[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.category}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map(nameIndex => {\r\n return (\r\n
\r\n
\r\n

{nameLabel.endsWith('*') ? nameIndex === 0 ? nameLabel.substring(0, nameLabel.length - 1) + ' ' + (nameIndex + 1) + '*' : nameLabel.replace('*', ' ' + (nameIndex + 1)) : nameLabel + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'category') {\r\n return (\r\n
\r\n {_buildCategoryField(idx)}\r\n {radioValue[`${idx}`] === String(resource.categoryFamilyLabel[`${localeCode}`]) && noOfNames > 0 && _buildNameGroup(idx, noOfNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryCompanyLabel[`${localeCode}`]) && companyNames > 0 && _buildNameGroup(idx, companyNames)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CategoryNamesForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport Select from 'react-select'\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackEvent: any;\r\n callbackEventID: any;\r\n callbackName: any;\r\n callbackEventsSelected: any;\r\n callbackNamesEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst CeremonyForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackMultiplier, callbackEvent, callbackEventID, callbackName, callbackEventsSelected, callbackNamesEntered,\r\n formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents, allowMultipleRegistrations }) => {\r\n const [eventNames, setEventNames] = useState(['']);\r\n const [eventIDs, setEventIDs] = useState(['']);\r\n const [names, setNames] = useState(['']);\r\n\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.ceremonyForm[`${localeCode}`];\r\n const namesCount = formScheme.find(form => form.field_name === 'name')!.field_number!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (count: number, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(1);\r\n }\r\n\r\n valueArray[`${index}`] = count;\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = names[`${index}`];\r\n\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(namesCount - 1);\r\n }\r\n\r\n const inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = names.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setNames(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n }\r\n\r\n const _setMultipleEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n for (let i = 0; i < event.length; ++i) {\r\n inputEventDates += event[`${i}`].label + (i != event.length - 1 ? ';' : '');\r\n inputEventIDs += event[`${i}`].value + (i != event.length - 1 ? ';' : '');\r\n }\r\n\r\n const selectValueArray = eventNames.slice();\r\n const eventIDArray = eventIDs.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n setEventNames(selectValueArray);\r\n setEventIDs(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(event.length, index);\r\n\r\n _checkEventsEntered(selectValueArray);\r\n }\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _displayEventDates = (index: number): { value: string, label: string }[] => {\r\n const displayValue: { value: string, label: string }[] = [];\r\n\r\n if (eventNames.length > 0) {\r\n const selectValueArray = eventNames.slice();\r\n const eventIDArray = eventIDs.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n if (selectValueArray[`${index}`] !== '') {\r\n const eventDates = selectValueArray[`${index}`].split(';');\r\n const eventIds = eventIDArray[`${index}`].split(';');\r\n\r\n for (let i = 0; i < eventDates.length; ++i) {\r\n displayValue.push({ value: eventIds[`${i}`], label: eventDates[`${i}`] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return displayValue;\r\n }\r\n\r\n const _checkEventsEntered = (ceremonyEventArray: string[]) => {\r\n let eventsSelected = ceremonyEventArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < ceremonyEventArray.length; i++) {\r\n if (ceremonyEventArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n eventsSelected = false; break;\r\n }\r\n }\r\n\r\n callbackEventsSelected(eventsSelected);\r\n }\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[]) => {\r\n let namesEntered = ceremonyNameArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkNumberOfSelectedEvent = (index: number): number => {\r\n const count = eventNames.length > 0 && typeof eventNames[`${index}`] !== 'undefined' ? eventNames[`${index}`].split(';').length : 1;\r\n\r\n return count;\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multipliersArray = multipliers.slice();\r\n const eventNamesArray = eventNames.slice();\r\n const eventIDsArray = eventIDs.slice();\r\n const namesArray = names.slice();\r\n\r\n multipliersArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n namesArray.push('');\r\n\r\n setMultiplers(multipliersArray);\r\n setEventNames(eventNamesArray);\r\n setEventIDs(eventIDsArray);\r\n setNames(namesArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n callbackName(namesArray);\r\n\r\n callbackEventsSelected(false);\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n\r\n formItems.splice(index, 1);\r\n \r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multipliersArray = multipliers.slice();\r\n const eventNamesArray = eventNames.slice();\r\n const eventIDsArray = eventIDs.slice();\r\n const namesArray = names.slice();\r\n\r\n if (typeof multipliersArray[`${index}`] !== 'undefined') {\r\n if (multipliersArray.length > 1) {\r\n multipliersArray.splice(index, 1);\r\n } else {\r\n multipliersArray[0] = 1;\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n }\r\n\r\n if (typeof eventNamesArray[`${index}`] !== 'undefined') {\r\n if (eventNamesArray.length > 1) {\r\n eventNamesArray.splice(index, 1);\r\n } else {\r\n eventNamesArray[0] = '';\r\n }\r\n\r\n setEventNames(eventNamesArray);\r\n\r\n callbackEvent(eventNamesArray);\r\n }\r\n\r\n if (typeof eventIDsArray[`${index}`] !== 'undefined') {\r\n if (eventIDsArray.length > 1) {\r\n eventIDsArray.splice(index, 1);\r\n } else {\r\n eventIDsArray[0] = '';\r\n }\r\n\r\n setEventIDs(eventIDsArray);\r\n\r\n callbackEventID(eventIDsArray);\r\n }\r\n\r\n if (typeof namesArray[`${index}`] !== 'undefined') {\r\n if (namesArray.length > 1) {\r\n namesArray.splice(index, 1);\r\n } else {\r\n namesArray[0] = '';\r\n }\r\n\r\n setNames(namesArray);\r\n\r\n callbackName(namesArray);\r\n }\r\n\r\n _checkEventsEntered(eventNamesArray);\r\n _checkNamesEntered(namesArray);\r\n }\r\n\r\n useEffect(() => {\r\n const multipliersArray: number[] = [];\r\n const eventNamesArray: string[] = [];\r\n const eventIDsArray: string[] = [];\r\n const namesArray: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemNames: string[] = formItems[`${i}`]['names'];\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index !== 0 && index < namesCount) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n const eventName: string = formItems[`${i}`]['eventName'];\r\n\r\n multipliersArray.push(eventName.split(';').length);\r\n eventNamesArray.push(eventName);\r\n eventIDsArray.push(formItems[`${i}`]['eventID']);\r\n namesArray.push(itemName);\r\n }\r\n \r\n setNames(namesArray);\r\n \r\n callbackName(namesArray);\r\n\r\n _checkNamesEntered(namesArray);\r\n } else {\r\n multipliersArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n setEventNames(eventNamesArray);\r\n setEventIDs(eventIDsArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n\r\n _checkEventsEntered(eventNamesArray);\r\n }, [formItems])\r\n\r\n const _buildEventDropdown = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.eventDate}

\r\n { return ({ value: event['id'], label: event['name'] }); })}\r\n onChange={event => _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameGroup = (idx: number, namesCount: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(namesCount)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map(nameIndex => {\r\n return (\r\n
\r\n
\r\n

{nameLabel.endsWith('*') ? (nameIndex === 0 ? nameLabel.substring(0, nameLabel.length - 1) + ' ' + (nameIndex + 1) + '*' : nameLabel.replace('*', ' ' + (nameIndex + 1))) : nameLabel + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_type === 'dropdown') {\r\n return (\r\n
\r\n {_buildEventDropdown(idx)}\r\n {namesCount > 0 && _buildNameGroup(idx, namesCount)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price! * _checkNumberOfSelectedEvent(idx)}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n )\r\n};\r\n\r\nexport default CeremonyForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\nimport Select from 'react-select'\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackPrice?: any;\r\n callbackName?: any;\r\n callbackEmailId?:any;\r\n callbackContactNumber?:any;\r\n callbackEventID?:any;\r\n callbackEvent?: any;\r\n callbackNamesEntered?: any;\r\n callbackPricesEntered?: any;\r\n callbackMultiplier: any;\r\n callbackEventsSelected?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n userInfo: any;\r\n productEvents: any[];\r\n}\r\n\r\nconst CoursesForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackPrice, callbackName, callbackNamesEntered, callbackPricesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, userInfo,productEvents,callbackEventID,callbackEvent , callbackMultiplier, callbackEventsSelected}) => {\r\n\r\n const [customPrice, setCustomPrice] = useState([0]);\r\n const [inputValue, setInputValue] = useState(['']);\r\n const [attendeeName, setAttendeeName] = useState(['']);\r\n const [coursesEventId, setCoursesEventId] = useState(['']);\r\n const [selectValue, setSelectValue] = useState(['']);\r\n \r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n \r\n\r\n\r\n const formLabels = resource.coursesForm[`${localeCode}`];\r\n\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm();\r\n\r\n// const _onChangePriceValue = (event: any, index: number) => {\r\n// // _setRadioValueArray(event.target.value, index);\r\n\r\n// if (event.target.value === resource.otherLabel[`${localeCode}`]) {\r\n// _setInputValueArray('0', index);\r\n// _setCustomPriceArray(0, index);\r\n// } else {\r\n// _setCustomPriceArray(Number(event.target.value), index);\r\n// _setInputValueArray('', index);\r\n// }\r\n// };\r\n\r\n// const _setCustomPriceArray = (price: number, index: number) => {\r\n// const customPriceArray = customPrice.slice();\r\n\r\n// while (typeof customPriceArray[`${index}`] === 'undefined') {\r\n// customPriceArray.push(0);\r\n// }\r\n\r\n// customPriceArray[`${index}`] = price;\r\n\r\n// setCustomPrice(customPriceArray);\r\n\r\n// callbackPrice(customPriceArray);\r\n\r\n// _checkPricesEntered(customPriceArray);\r\n// };\r\n\r\n// const _setRadioValueArray = (value: string, index: number) => {\r\n// const donationValueArray = donationAmount.slice();\r\n\r\n// while (typeof donationValueArray[`${index}`] === 'undefined') {\r\n// donationValueArray.push('');\r\n// }\r\n\r\n// donationValueArray[`${index}`] = value;\r\n\r\n// setDonationAmount(donationValueArray);\r\n// };\r\n\r\n// const _setInputValue = (event: any, index: number) => {\r\n// if (isNumeric(event.target.value)) {\r\n// _setInputValueArray(event.target.value, index);\r\n// // _setRadioValueArray(resource.otherLabel[`${localeCode}`], index);\r\n// _setCustomPriceArray(Number(event.target.value), index);\r\n// }\r\n// };\r\n\r\n// const _setInputValueArray = (value: string, index: number) => {\r\n// const inputValueArray = inputValue.slice();\r\n\r\n// while (typeof inputValueArray[`${index}`] === 'undefined') {\r\n// inputValueArray.push('');\r\n// }\r\n\r\n// inputValueArray[`${index}`] = value;\r\n\r\n// inputValueArray[`${index}`].trim();\r\n\r\n// setInputValue(inputValueArray);\r\n// };\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setAttendeeNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n //let eventObj = productEvents[0];\r\n \r\n // _setEventIdArray(eventObj['id'], 0);\r\n \r\n };\r\n\r\n // const _setEventIdArray = (eventId: string, index: number) => {\r\n // const coursesEventIDArray = coursesEventId.slice();\r\n\r\n // while (typeof coursesEventIDArray[`${index}`] === 'undefined') {\r\n // coursesEventIDArray.push('');\r\n // }\r\n\r\n // coursesEventIDArray[`${index}`] = eventId;\r\n\r\n // coursesEventIDArray[`${index}`].trim();\r\n\r\n // setCoursesEventId(coursesEventIDArray);\r\n\r\n \r\n\r\n // callbackEventID(coursesEventIDArray);\r\n // };\r\n\r\n const _setAttendeeNameArray = (name: string, index: number) => {\r\n const attendeeNameArray = attendeeName.slice();\r\n\r\n while (typeof attendeeNameArray[`${index}`] === 'undefined') {\r\n attendeeNameArray.push('');\r\n }\r\n\r\n attendeeNameArray[`${index}`] = name;\r\n\r\n attendeeNameArray[`${index}`].trim();\r\n\r\n setAttendeeName(attendeeNameArray);\r\n\r\n callbackName(attendeeNameArray);\r\n\r\n _checkNamesEntered(attendeeNameArray);\r\n };\r\n\r\n \r\n //const isNumeric = (num: any): boolean => { return !isNaN(num); };\r\n\r\n const _checkNamesEntered = (attendeeNameArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < attendeeNameArray.length; i++) {\r\n if (attendeeNameArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkPricesEntered = (customPriceArray: number[]) => {\r\n let pricesEntered = true;\r\n\r\n for (let i = 0; i < customPriceArray.length; i++) {\r\n if (customPriceArray[`${i}`] == 0) {\r\n pricesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPricesEntered(pricesEntered);\r\n }\r\n\r\n\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n const customPriceArray = customPrice.slice();\r\n const inputValueArray = inputValue.slice();\r\n const attendeeNameArray = attendeeName.slice();\r\n const multiplierArray = multipliers.slice();\r\n const coursesEventArray = selectValue.slice();\r\n const coursesEventIDArray = coursesEventId.slice();\r\n \r\n \r\n if (typeof customPriceArray[`${index}`] !== 'undefined') {\r\n if (customPriceArray.length > 1) {\r\n customPriceArray.splice(index, 1);\r\n } else {\r\n customPriceArray[0] = parseInt(element!.field_options![0]);\r\n }\r\n }\r\n\r\n if (typeof inputValueArray[`${index}`] !== 'undefined') {\r\n if (inputValueArray.length > 1) {\r\n inputValueArray.splice(index, 1);\r\n } else {\r\n inputValueArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof attendeeNameArray[`${index}`] !== 'undefined') {\r\n if (attendeeNameArray.length > 1) {\r\n attendeeNameArray.splice(index, 1);\r\n } else {\r\n attendeeNameArray[0] = '';\r\n }\r\n }\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = 1;\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof coursesEventArray[`${index}`] !== 'undefined') {\r\n if (coursesEventArray.length > 1) {\r\n coursesEventArray.splice(index, 1);\r\n } else {\r\n coursesEventArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof coursesEventIDArray[`${index}`] !== 'undefined') {\r\n if (coursesEventIDArray.length > 1) {\r\n coursesEventIDArray.splice(index, 1);\r\n } else {\r\n coursesEventIDArray[0] = '';\r\n }\r\n }\r\n \r\n\r\n \r\n\r\n setCustomPrice(customPriceArray);\r\n setInputValue(inputValueArray);\r\n setAttendeeName(attendeeNameArray);\r\n setSelectValue(coursesEventArray);\r\n setCoursesEventId(coursesEventIDArray);\r\n\r\n\r\n callbackEvent(coursesEventArray);\r\n callbackEventID(coursesEventIDArray);\r\n callbackName(attendeeNameArray);\r\n callbackPrice(customPriceArray);\r\n\r\n _checkEventsEntered(coursesEventArray);\r\n _checkNamesEntered(attendeeNameArray);\r\n _checkPricesEntered(customPriceArray);\r\n }\r\n\r\n useEffect(() => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n var minDonationvalue = Number(element?.field_options![0]);\r\n var minDonationString = String(element?.field_options![0]);\r\n\r\n const existingCustomPriceAmount: number[] = [];\r\n const existingInputValue: string[] = [];\r\n const existingAttendeeName: string[] = [];\r\n const existingDonationAmount: string[] = [];\r\n const multipliersArray: number[] = [];\r\n const eventNamesArray: string[] = [];\r\n const eventIDsArray: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n var customPriceAmount: number = formItems[`${i}`]['customPriceAmount'];\r\n\r\n const eventName: string = formItems[`${i}`]['eventName'];\r\n\r\n multipliersArray.push(eventName.split(';').length);\r\n eventNamesArray.push(eventName);\r\n eventIDsArray.push(formItems[`${i}`]['eventID']);\r\n\r\n switch (customPriceAmount) {\r\n case 0:\r\n customPriceAmount = Number(minDonationvalue);\r\n existingDonationAmount.push(minDonationString);\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 2:\r\n existingDonationAmount.push('2');\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 5:\r\n existingDonationAmount.push('5');\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 10:\r\n existingDonationAmount.push('10');\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 50:\r\n existingDonationAmount.push('50');\r\n existingInputValue.push('');\r\n break;\r\n\r\n default:\r\n if (customPriceAmount) {\r\n existingDonationAmount.push(resource.otherLabel[`${localeCode}`]);\r\n existingInputValue.push(customPriceAmount.toString());\r\n } else {\r\n customPriceAmount = Number(minDonationvalue);\r\n existingDonationAmount.push(minDonationString);\r\n existingInputValue.push('');\r\n }\r\n break;\r\n }\r\n\r\n \r\n existingAttendeeName.push(formItems[`${i}`]['names'][0]);\r\n \r\n existingCustomPriceAmount.push(customPriceAmount);\r\n }\r\n \r\n\r\n setAttendeeName(existingAttendeeName);\r\n \r\n\r\n callbackName(existingAttendeeName);\r\n \r\n\r\n _checkNamesEntered(existingAttendeeName);\r\n } else {\r\n existingDonationAmount.push(minDonationString);\r\n existingCustomPriceAmount.push(minDonationvalue);\r\n existingInputValue.push('');\r\n multipliersArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n }\r\n\r\n //setDonationAmount(existingDonationAmount);\r\n if(userValid && existingAttendeeName.length <=0)\r\n {\r\n \r\n existingAttendeeName.push(userInfo.firstname+' '+userInfo.lastname);\r\n }\r\n\r\n setAttendeeName(existingAttendeeName);\r\n setCustomPrice(existingCustomPriceAmount);\r\n setInputValue(existingInputValue);\r\n setMultiplers(multipliersArray);\r\n setSelectValue(eventNamesArray);\r\n setCoursesEventId(eventIDsArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n\r\n _checkEventsEntered(eventNamesArray);\r\n\r\n callbackPrice(existingCustomPriceAmount);\r\n callbackName(existingAttendeeName);\r\n\r\n _checkPricesEntered(existingCustomPriceAmount);\r\n _checkNamesEntered(existingAttendeeName);\r\n }, [formItems])\r\n\r\n const _displayEventDates = (index: number): { value: string, label: string }[] => {\r\n const displayValue: { value: string, label: string }[] = [];\r\n\r\n if (selectValue.length > 0) {\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n if (selectValueArray[`${index}`] !== '') {\r\n const eventDates = selectValueArray[`${index}`].split(';');\r\n const eventIds = eventIDArray[`${index}`].split(';');\r\n\r\n for (let i = 0; i < eventDates.length; ++i) {\r\n displayValue.push({ value: eventIds[`${i}`], label: eventDates[`${i}`] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return displayValue;\r\n }\r\n\r\n const _checkEventsEntered = (cousesEventArray: string[]) => {\r\n let eventsSelected = cousesEventArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < cousesEventArray.length; i++) {\r\n if (cousesEventArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n eventsSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackEventsSelected(eventsSelected);\r\n }\r\n\r\n const _setMultipler = (count: number, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(1);\r\n }\r\n\r\n valueArray[`${index}`] = count;\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setMultipleEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(event.length, index);\r\n\r\n _checkEventsEntered(selectValueArray);\r\n }\r\n\r\n\r\n const _buildEventDropdown = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.eventDate}

\r\n { return ({ value: event['id'], label: event['name'] }); })}\r\n onChange={event => _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.attendeeName}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'attendeeName') {\r\n return (\r\n
\r\n {_buildEventDropdown(idx)}\r\n {_buildName(idx)}\r\n\r\n {/* {_buildAmountField(element, idx)} */}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

\r\n ${selectedProduct.result?.Price! === 0 ? typeof customPrice[`${idx}`] !== 'undefined' ? customPrice[`${idx}`] : '0' : selectedProduct.result?.Price!}\r\n

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {/* {!isEditMode &&
\r\n \r\n
} */}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
;\r\n })}\r\n
\r\n\r\n {/* {!isMobile && !isEditMode &&\r\n
\r\n \r\n
} */}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CoursesForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackName?: any;\r\n callbackCategory?: any;\r\n callbackDedicatedBy?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst DeceasedCategoryNamesForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackName, callbackCategory, callbackDedicatedBy, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n const [radioValue, setRadioValue] = useState([resource.categoryFamilyLabel[`${localeCode}`]]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [dedicatedBy, setDedicatedBy] = useState(['']);\r\n\r\n const formLabels = resource.deceasedCategoryNamesForm[`${localeCode}`];\r\n\r\n const noOfNames = formScheme.find(form => form.field_type === 'textBox')!.field_number!;\r\n const deceasedNames = formScheme.find(form => form.field_type === 'textBox')!.field_number2!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _onChangeRadioValue = (event: any, index: number) => {\r\n _setRadioValueArray(event.target.value, index);\r\n\r\n let ceremonyNameArray = ceremonyName.slice();\r\n let existingCeremonyName = ceremonyNameArray[`${index}`];\r\n let dedicatedNameArray = dedicatedBy.slice();\r\n dedicatedNameArray[`${index}`] = '';\r\n if (existingCeremonyName) {\r\n let existingNameArray = existingCeremonyName.split(';');\r\n\r\n\r\n if (event.target.value === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < noOfNames) {\r\n existingCeremonyName += ';'.repeat(noOfNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > noOfNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n } else {\r\n if (existingNameArray.length < deceasedNames) {\r\n existingCeremonyName += ';'.repeat(deceasedNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > deceasedNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n }\r\n }\r\n\r\n\r\n ceremonyNameArray[`${index}`] = existingCeremonyName;\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedNameArray);\r\n\r\n };\r\n\r\n const _setRadioValueArray = (value: string, index: number) => {\r\n let radioValueArray = radioValue.slice();\r\n\r\n while (typeof radioValueArray[`${index}`] === 'undefined') {\r\n radioValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n radioValueArray[`${index}`] = value;\r\n\r\n setRadioValue(radioValueArray);\r\n _checkNamesEntered(ceremonyName, dedicatedBy, radioValueArray)\r\n\r\n callbackCategory(radioValueArray);\r\n };\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n if (inputMultipleName) {\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n const inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n }\r\n _setCeremonyNameArray(inputName, index);\r\n };\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray[`${index}`] = '';\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedBy, radioValue);\r\n };\r\n\r\n const _setDedicatedByValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setDedicatedByArray(event.target.value.substring(0, maxLength - 1), index);\r\n };\r\n\r\n const _setDedicatedByArray = (name: string, index: number) => {\r\n let dedicatedByArray = dedicatedBy.slice();\r\n while (typeof dedicatedByArray[`${index}`] === 'undefined') {\r\n dedicatedByArray.push('');\r\n }\r\n dedicatedByArray[`${index}`] = name;\r\n setDedicatedBy(dedicatedByArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n _checkNamesEntered(ceremonyName, dedicatedByArray, radioValue);\r\n };\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[], dedicatedByArray: string[], categoryArray: string[]) => {\r\n let namesEntered = true;\r\n if (!ceremonyNameArray || ceremonyNameArray.length === 0) {\r\n namesEntered = false;\r\n }\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (!ceremonyNameArray[`${i}`] || ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n\r\n if (!categoryArray[`${i}`] || categoryArray[`${i}`] === resource.categoryDeceasedLabel[`${localeCode}`] && dedicatedByArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n categoryValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n ceremonyNameArray.push('');\r\n dedicatedByArray.push('');\r\n\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n _checkNamesEntered(ceremonyNameArray, dedicatedByArray, categoryValueArray);\r\n\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n if (typeof categoryValueArray[`${index}`] !== 'undefined') {\r\n if (categoryValueArray.length > 1) {\r\n categoryValueArray.splice(index, 1);\r\n } else {\r\n categoryValueArray[0] = resource.categoryFamilyLabel[`${localeCode}`];\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof dedicatedByArray[`${index}`] !== 'undefined') {\r\n if (dedicatedByArray.length > 1) {\r\n dedicatedByArray.splice(index, 1);\r\n } else {\r\n dedicatedByArray[0] = '';\r\n }\r\n }\r\n\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedBy, radioValue);\r\n _checkNamesEntered(ceremonyName, dedicatedByArray, radioValue);\r\n }\r\n\r\n useEffect(() => {\r\n const existingRadioValue: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingDedicatedBy: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemNames: string[] = formItems[`${i}`]['names'];\r\n const itemCategory = formItems[`${i}`]['category'];\r\n\r\n let itemNameCount = 0;\r\n\r\n if (itemCategory === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n itemNameCount = noOfNames;\r\n } else {\r\n itemNameCount = deceasedNames;\r\n }\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index != 0 && index < itemNameCount) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n existingRadioValue.push(itemCategory);\r\n existingCeremonyName.push(itemName);\r\n existingDedicatedBy.push(formItems[`${i}`]['dedicatedBy']);\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n setDedicatedBy(existingDedicatedBy);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackDedicatedBy(existingDedicatedBy);\r\n\r\n _checkNamesEntered(existingCeremonyName, existingDedicatedBy, existingRadioValue);\r\n } else {\r\n existingRadioValue.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n setRadioValue(existingRadioValue);\r\n\r\n callbackCategory(existingRadioValue);\r\n }, [formItems]);\r\n\r\n const _buildCategoryField = (idx: number): JSX.Element | null => {\r\n if (typeof radioValue[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.category}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{nameLabel.endsWith('*') ? nameIndex === 0 ? nameLabel.substring(0, nameLabel.length - 1) + ' ' + (nameIndex + 1) + '*' : nameLabel.replace('*', ' ' + (nameIndex + 1)) : nameLabel + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'category') {\r\n return (\r\n
\r\n {_buildCategoryField(idx)}\r\n {radioValue[`${idx}`] === String(resource.categoryFamilyLabel[`${localeCode}`]) && noOfNames > 0 && _buildNameGroup(idx, noOfNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryDeceasedLabel[`${localeCode}`]) && deceasedNames > 0 && _buildNameGroup(idx, deceasedNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryDeceasedLabel[`${localeCode}`]) && deceasedNames > 0 &&\r\n
\r\n
\r\n

{formLabels.dedicatedBy}

\r\n _setDedicatedByValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n }\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default DeceasedCategoryNamesForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackDedicatedBy?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst DeceasedDedicatedByForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackEvent, callbackEventID, callbackName, callbackDedicatedBy, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents, allowMultipleRegistrations }) => {\r\n const [ceremonyValue, setCeremonyValue] = useState(['']);\r\n const [ceremonyIDValue, setCeremonyIDValue] = useState(['']);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [dedicatedBy, setDedicatedBy] = useState(['']);\r\n\r\n const formLabels = resource.deceasedDedicatedByForm[`${localeCode}`];\r\n const deceasedNames = formScheme.find(form => form.field_name === 'deceasedName')!.field_number!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm(); \r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n let inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n\r\n _setCeremonyNameArray(inputName, index); \r\n };\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedBy);\r\n };\r\n\r\n const _setDedicatedByValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setDedicatedByArray(event.target.value.substring(0, maxLength - 1), index);\r\n };\r\n\r\n const _setDedicatedByArray = (name: string, index: number) => {\r\n let dedicatedByArray = dedicatedBy.slice();\r\n \r\n while (typeof dedicatedByArray[`${index}`] === 'undefined') {\r\n dedicatedByArray.push('');\r\n }\r\n dedicatedByArray[`${index}`] = name;\r\n setDedicatedBy(dedicatedByArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n _checkNamesEntered(ceremonyName, dedicatedByArray);\r\n };\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[], dedicatedByArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (!ceremonyNameArray[`${i}`] || ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n\r\n //Check if the first element in the series of names is empty\r\n const ceremonyNameArraysplit = ceremonyNameArray[`${i}`].split(';');\r\n if (ceremonyNameArraysplit.length>0&&ceremonyNameArraysplit[0].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n\r\n if (dedicatedByArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n ceremonyValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n ceremonyIDValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n ceremonyNameArray.push('');\r\n dedicatedByArray.push('');\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`][`${'cartLineId'}`]] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`][`${'cartLineId'}`]);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } \r\n\r\n const _updateStateData = (index: number) => {\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n if (typeof ceremonyValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyValueArray.length > 1) {\r\n ceremonyValueArray.splice(index, 1);\r\n } else {\r\n ceremonyValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyIDValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyIDValueArray.length > 1) {\r\n ceremonyIDValueArray.splice(index, 1);\r\n } else {\r\n ceremonyIDValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof dedicatedByArray[`${index}`] !== 'undefined') {\r\n if (dedicatedByArray.length > 1) {\r\n dedicatedByArray.splice(index, 1);\r\n } else {\r\n dedicatedByArray[0] = '';\r\n }\r\n }\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedBy);\r\n }\r\n\r\n \r\n useEffect(() => {\r\n const existingCeremony: string[] = [];\r\n const existingCeremonyID: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingDedicatedBy: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n existingCeremony.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n existingCeremonyID.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n existingDedicatedBy.push(formItems[`${i}`][`${'dedicatedBy'}`]);\r\n const itemNames: string[] = formItems[`${i}`][`${'names'}`];\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index != 0 && index < deceasedNames) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n \r\n existingCeremonyName.push(itemName);\r\n } \r\n\r\n setCeremonyName(existingCeremonyName);\r\n setDedicatedBy(existingDedicatedBy);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackDedicatedBy(existingDedicatedBy);\r\n\r\n _checkNamesEntered(existingCeremonyName, existingDedicatedBy);\r\n } else {\r\n existingCeremony.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n existingCeremonyID.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n }\r\n\r\n setCeremonyValue(existingCeremony);\r\n setCeremonyIDValue(existingCeremonyID);\r\n\r\n callbackEvent(existingCeremony);\r\n callbackEventID(existingCeremonyID);\r\n }, [formItems])\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _buildDeceasedNameGroup = (idx: number, noOfNames: number,): JSX.Element[] => {\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{formLabels.deceasedName}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n const _buildDedicatedName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicatedBy}

\r\n _setDedicatedByValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'deceasedName') {\r\n return (\r\n
\r\n {_buildDeceasedNameGroup(idx, deceasedNames)}\r\n {_buildDedicatedName(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n } \r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default DeceasedDedicatedByForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackPrice?: any;\r\n callbackName?: any;\r\n callbackNamesEntered?: any;\r\n callbackPricesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst DonationForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackPrice, callbackName, callbackNamesEntered, callbackPricesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n var minDonationNumberOption = Number(formScheme[1].field_options![0]);\r\n var minDonationstringOption = formScheme[1].field_options![0];\r\n const [customPrice, setCustomPrice] = useState([minDonationNumberOption]);\r\n const [inputValue, setInputValue] = useState(['']);\r\n const [donationName, setDonationName] = useState(['']);\r\n const [donationAmount, setDonationAmount] = useState([minDonationstringOption]);\r\n\r\n const formLabels = resource.donationForm[`${localeCode}`];\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _onChangePriceValue = (event: any, index: number) => {\r\n _setRadioValueArray(event.target.value, index);\r\n\r\n if (event.target.value === resource.otherLabel[`${localeCode}`]) {\r\n _setInputValueArray('0', index);\r\n _setCustomPriceArray(0, index);\r\n } else {\r\n _setCustomPriceArray(Number(event.target.value), index);\r\n _setInputValueArray('', index);\r\n }\r\n };\r\n\r\n const _setCustomPriceArray = (price: number, index: number) => {\r\n const customPriceArray = customPrice.slice();\r\n\r\n while (typeof customPriceArray[`${index}`] === 'undefined') {\r\n customPriceArray.push(0);\r\n }\r\n\r\n customPriceArray[`${index}`] = price;\r\n\r\n setCustomPrice(customPriceArray);\r\n\r\n callbackPrice(customPriceArray);\r\n\r\n _checkPricesEntered(customPriceArray);\r\n };\r\n\r\n const _setRadioValueArray = (value: string, index: number) => {\r\n const donationValueArray = donationAmount.slice();\r\n\r\n while (typeof donationValueArray[`${index}`] === 'undefined') {\r\n donationValueArray.push('');\r\n }\r\n\r\n donationValueArray[`${index}`] = value;\r\n\r\n setDonationAmount(donationValueArray);\r\n };\r\n\r\n const _setInputValue = (event: any, index: number) => {\r\n if (isNumeric(event.target.value)) {\r\n _setInputValueArray(event.target.value, index);\r\n _setRadioValueArray(resource.otherLabel[`${localeCode}`], index);\r\n _setCustomPriceArray(Number(event.target.value), index);\r\n }\r\n };\r\n\r\n const _setInputValueArray = (value: string, index: number) => {\r\n const inputValueArray = inputValue.slice();\r\n\r\n while (typeof inputValueArray[`${index}`] === 'undefined') {\r\n inputValueArray.push('');\r\n }\r\n\r\n inputValueArray[`${index}`] = value;\r\n\r\n inputValueArray[`${index}`].trim();\r\n\r\n setInputValue(inputValueArray);\r\n };\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setDonationNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n };\r\n\r\n const _setDonationNameArray = (name: string, index: number) => {\r\n const donationNameArray = donationName.slice();\r\n\r\n while (typeof donationNameArray[`${index}`] === 'undefined') {\r\n donationNameArray.push('');\r\n }\r\n\r\n donationNameArray[`${index}`] = name;\r\n\r\n donationNameArray[`${index}`].trim();\r\n\r\n setDonationName(donationNameArray);\r\n\r\n callbackName(donationNameArray);\r\n\r\n _checkNamesEntered(donationNameArray);\r\n };\r\n\r\n const isNumeric = (num: any): boolean => { return !isNaN(num); };\r\n\r\n const _checkNamesEntered = (donationNameArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < donationNameArray.length; i++) {\r\n if (donationNameArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkPricesEntered = (customPriceArray: number[]) => {\r\n let pricesEntered = true;\r\n\r\n for (let i = 0; i < customPriceArray.length; i++) {\r\n if (customPriceArray[`${i}`] == 0) {\r\n pricesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPricesEntered(pricesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n const customPriceArray = customPrice.slice();\r\n const donationValueArray = donationAmount.slice();\r\n const donationNameArray = donationName.slice();\r\n\r\n customPriceArray.push(parseInt(element!.field_options![0]));\r\n donationNameArray.push('');\r\n donationValueArray.push(element!.field_options![0]);\r\n\r\n setCustomPrice(customPriceArray);\r\n setDonationName(donationNameArray);\r\n setDonationAmount(donationValueArray);\r\n\r\n callbackPrice(customPriceArray);\r\n callbackName(donationNameArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackPricesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n const customPriceArray = customPrice.slice();\r\n const inputValueArray = inputValue.slice();\r\n const donationNameArray = donationName.slice();\r\n const donationValueArray = donationAmount.slice();\r\n\r\n if (typeof customPriceArray[`${index}`] !== 'undefined') {\r\n if (customPriceArray.length > 1) {\r\n customPriceArray.splice(index, 1);\r\n } else {\r\n customPriceArray[0] = parseInt(element!.field_options![0]);\r\n }\r\n }\r\n\r\n if (typeof inputValueArray[`${index}`] !== 'undefined') {\r\n if (inputValueArray.length > 1) {\r\n inputValueArray.splice(index, 1);\r\n } else {\r\n inputValueArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof donationNameArray[`${index}`] !== 'undefined') {\r\n if (donationNameArray.length > 1) {\r\n donationNameArray.splice(index, 1);\r\n } else {\r\n donationNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof donationValueArray[`${index}`] !== 'undefined') {\r\n if (donationValueArray.length > 1) {\r\n donationValueArray.splice(index, 1);\r\n } else {\r\n donationValueArray[0] = element!.field_options![0];\r\n }\r\n }\r\n\r\n setCustomPrice(customPriceArray);\r\n setInputValue(inputValueArray);\r\n setDonationName(donationNameArray);\r\n setDonationAmount(donationValueArray);\r\n\r\n callbackName(donationNameArray);\r\n callbackPrice(customPriceArray);\r\n\r\n _checkNamesEntered(donationNameArray);\r\n _checkPricesEntered(customPriceArray);\r\n }\r\n\r\n useEffect(() => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n var minDonationvalue = Number(element?.field_options![0]);\r\n var minDonationString = String(element?.field_options![0]);\r\n\r\n const existingCustomPriceAmount: number[] = [];\r\n const existingInputValue: string[] = [];\r\n const existingDonationName: string[] = [];\r\n const existingDonationAmount: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n var customPriceAmount: number = formItems[`${i}`]['customPriceAmount'];\r\n\r\n switch (customPriceAmount) {\r\n case 0:\r\n customPriceAmount = Number(minDonationvalue);\r\n existingDonationAmount.push(minDonationString);\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 2:\r\n existingDonationAmount.push('2');\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 5:\r\n existingDonationAmount.push('5');\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 10:\r\n existingDonationAmount.push('10');\r\n existingInputValue.push('');\r\n break;\r\n\r\n case 50:\r\n existingDonationAmount.push('50');\r\n existingInputValue.push('');\r\n break;\r\n\r\n default:\r\n if (customPriceAmount) {\r\n existingDonationAmount.push(resource.otherLabel[`${localeCode}`]);\r\n existingInputValue.push(customPriceAmount.toString());\r\n } else {\r\n customPriceAmount = Number(minDonationvalue);\r\n existingDonationAmount.push(minDonationString);\r\n existingInputValue.push('');\r\n }\r\n break;\r\n }\r\n\r\n existingDonationName.push(formItems[`${i}`]['names'][0]);\r\n existingCustomPriceAmount.push(customPriceAmount);\r\n }\r\n\r\n\r\n setDonationName(existingDonationName);\r\n\r\n callbackName(existingDonationName);\r\n\r\n _checkNamesEntered(existingDonationName);\r\n } else {\r\n existingDonationAmount.push(minDonationString);\r\n existingCustomPriceAmount.push(minDonationvalue);\r\n existingInputValue.push('');\r\n }\r\n\r\n setDonationAmount(existingDonationAmount);\r\n setCustomPrice(existingCustomPriceAmount);\r\n setInputValue(existingInputValue);\r\n\r\n callbackPrice(existingCustomPriceAmount);\r\n\r\n _checkPricesEntered(existingCustomPriceAmount);\r\n }, [formItems])\r\n\r\n const _buildName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildAmountField = (element: IField, idx: number): JSX.Element | null => {\r\n if (element.field_options) {\r\n return (\r\n
\r\n
\r\n

{formLabels.amount}

\r\n {element.field_options.map((option: string) => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'amount') {\r\n return (\r\n
\r\n {_buildName(idx)}\r\n {_buildAmountField(element, idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

\r\n ${selectedProduct.result?.Price! === 0 ? typeof customPrice[`${idx}`] !== 'undefined' ? customPrice[`${idx}`] : '0' : selectedProduct.result?.Price!}\r\n

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
;\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default DonationForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport Select from 'react-select'\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackCategory?: any;\r\n callbackEventsSelected?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst EventCategoryNamesForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackMultiplier, callbackEvent, callbackEventID, callbackName, callbackCategory, callbackEventsSelected, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents,allowMultipleRegistrations }) => {\r\n const [selectValue, setSelectValue] = useState(['']);\r\n const [ceremonyEventID, setEventID] = useState(['']);\r\n const [radioValue, setRadioValue] = useState([resource.categoryFamilyLabel[`${localeCode}`]]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.eventCategoryNamesForm[`${localeCode}`];\r\n const noOfNames = formScheme.find(form => form.field_type === 'textBox')!.field_number!;\r\n const companyNames = formScheme.find(form => form.field_type === 'textBox')!.field_number2!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (count: number, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(1);\r\n }\r\n\r\n valueArray[`${index}`] = count;\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _onChangeRadioValue = (event: any, index: number) => {\r\n _setRadioValueArray(event.target.value, index);\r\n\r\n let ceremonyNameArray = ceremonyName.slice();\r\n let existingCeremonyName = ceremonyNameArray[`${index}`];\r\n let existingNameArray = existingCeremonyName.split(';');\r\n\r\n if (event.target.value === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < noOfNames) {\r\n existingCeremonyName += ';'.repeat(noOfNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > noOfNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n } else {\r\n if (existingNameArray.length < companyNames) {\r\n existingCeremonyName += ';'.repeat(companyNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > companyNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = existingCeremonyName;\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n }\r\n\r\n const _setRadioValueArray = (value: string, index: number) => {\r\n const radioValueArray = radioValue.slice();\r\n\r\n while (typeof radioValueArray[`${index}`] === 'undefined') {\r\n radioValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n radioValueArray[`${index}`] = value;\r\n\r\n setRadioValue(radioValueArray);\r\n\r\n callbackCategory(radioValueArray);\r\n }\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n const inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n }\r\n\r\n const _setMultipleEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n for (let i = 0; i < event.length; ++i) {\r\n inputEventDates += event[`${i}`].label + (i != event.length - 1 ? ';' : '');\r\n inputEventIDs += event[`${i}`].value + (i != event.length - 1 ? ';' : '');\r\n }\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = ceremonyEventID.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n setSelectValue(selectValueArray);\r\n setEventID(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(event.length, index);\r\n\r\n _checkEventsEntered(selectValueArray);\r\n }\r\n\r\n const _displayEventDates = (index: number): { value: string, label: string }[] => {\r\n const displayValue: { value: string, label: string }[] = [];\r\n\r\n if (selectValue.length > 0) {\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = ceremonyEventID.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n if (selectValueArray[`${index}`] !== '') {\r\n const eventDates = selectValueArray[`${index}`].split(';');\r\n const eventIds = eventIDArray[`${index}`].split(';');\r\n\r\n for (let i = 0; i < eventDates.length; ++i) {\r\n displayValue.push({ value: eventIds[`${i}`], label: eventDates[`${i}`] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return displayValue;\r\n }\r\n\r\n const _checkEventsEntered = (ceremonyEventArray: string[]) => {\r\n let eventsSelected = ceremonyEventArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < ceremonyEventArray.length; i++) {\r\n if (ceremonyEventArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n eventsSelected = false; break;\r\n }\r\n }\r\n\r\n callbackEventsSelected(eventsSelected);\r\n }\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[]) => {\r\n let namesEntered = ceremonyNameArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkNumberOfSelectedEvent = (index: number): number => {\r\n const count = selectValue.length > 0 && typeof selectValue[`${index}`] !== 'undefined' ? selectValue[`${index}`].split(';').length : 1;\r\n\r\n return count;\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multiplierArray = multipliers.slice();\r\n const eventNamesArray = selectValue.slice();\r\n const eventIDsArray = ceremonyEventID.slice();\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n multiplierArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n categoryValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n ceremonyNameArray.push('');\r\n\r\n setMultiplers(multiplierArray);\r\n setSelectValue(eventNamesArray);\r\n setEventID(eventIDsArray);\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n callbackEventsSelected(false);\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multiplierArray = multipliers.slice();\r\n const ceremonyEventArray = selectValue.slice();\r\n const ceremonyEventIDArray = ceremonyEventID.slice();\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = 1;\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof ceremonyEventArray[`${index}`] !== 'undefined') {\r\n if (ceremonyEventArray.length > 1) {\r\n ceremonyEventArray.splice(index, 1);\r\n } else {\r\n ceremonyEventArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyEventIDArray[`${index}`] !== 'undefined') {\r\n if (ceremonyEventIDArray.length > 1) {\r\n ceremonyEventIDArray.splice(index, 1);\r\n } else {\r\n ceremonyEventIDArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof categoryValueArray[`${index}`] !== 'undefined') {\r\n if (categoryValueArray.length > 1) {\r\n categoryValueArray.splice(index, 1);\r\n } else {\r\n categoryValueArray[0] = resource.categoryFamilyLabel[`${localeCode}`];\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n setSelectValue(ceremonyEventArray);\r\n setEventID(ceremonyEventIDArray);\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackEvent(ceremonyEventArray);\r\n callbackEventID(ceremonyEventIDArray);\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkEventsEntered(ceremonyEventArray);\r\n _checkNamesEntered(ceremonyNameArray);\r\n }\r\n\r\n useEffect(() => {\r\n const eventIDsArray: string[] = [];\r\n const eventNamesArray: string[] = [];\r\n const multipliersArray: number[] = [];\r\n const namesArray: string[] = [];\r\n const categoriesArray: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemNames: string[] = formItems[`${i}`]['names'];\r\n const itemCategory = formItems[`${i}`]['category'];\r\n const itemNameCount = itemCategory === resource.categoryFamilyLabel[`${localeCode}`] ? noOfNames : companyNames;\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index !== 0 && index < itemNameCount) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n const eventName: string = formItems[`${i}`]['eventName'];\r\n\r\n multipliersArray.push(eventName.split(';').length);\r\n eventNamesArray.push(eventName);\r\n eventIDsArray.push(formItems[`${i}`]['eventID']);\r\n namesArray.push(itemName);\r\n categoriesArray.push(itemCategory);\r\n }\r\n\r\n setCeremonyName(namesArray);\r\n\r\n callbackName(namesArray);\r\n\r\n _checkNamesEntered(namesArray);\r\n } else {\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n multipliersArray.push(1);\r\n categoriesArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n setEventID(eventIDsArray);\r\n setSelectValue(eventNamesArray);\r\n setMultiplers(multipliersArray);\r\n setRadioValue(categoriesArray);\r\n\r\n callbackEventID(eventIDsArray);\r\n callbackEvent(eventNamesArray);\r\n callbackMultiplier(multipliersArray);\r\n callbackCategory(categoriesArray);\r\n\r\n _checkEventsEntered(eventNamesArray);\r\n }, [formItems])\r\n\r\n const _buildEventDropdown = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.eventDate}

\r\n { return ({ value: event['id'], label: event['name'] }); })}\r\n onChange={event => _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildCategoryField = (idx: number): JSX.Element | null => {\r\n if (typeof radioValue[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.category}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{nameLabel.endsWith('*') ? nameIndex === 0 ? nameLabel.substring(0, nameLabel.length - 1) + ' ' + (nameIndex + 1) + '*' : nameLabel.replace('*', ' ' + (nameIndex + 1)) : nameLabel + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_type === 'dropdown') {\r\n return (\r\n
\r\n {_buildEventDropdown(idx)}\r\n {_buildCategoryField(idx)}\r\n {radioValue[`${idx}`] === String(resource.categoryFamilyLabel[`${localeCode}`]) && noOfNames > 0 && _buildNameGroup(idx, noOfNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryCompanyLabel[`${localeCode}`]) && companyNames > 0 && _buildNameGroup(idx, companyNames)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price! * _checkNumberOfSelectedEvent(idx)}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default EventCategoryNamesForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport Select from 'react-select'\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackDedicatedBy?: any;\r\n callbackEventsSelected?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst EventDeceasedDedicatedByForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackMultiplier, callbackEvent, callbackEventID, callbackName, callbackDedicatedBy, callbackEventsSelected, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents,allowMultipleRegistrations }) => {\r\n const [selectValue, setSelectValue] = useState(['']);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [ceremonyEventID, setEventID] = useState(['']);\r\n const [dedicatedBy, setDedicatedBy] = useState(['']);\r\n\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.eventDeceasedDedicatedByForm[`${localeCode}`];\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (count: number, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(1);\r\n }\r\n\r\n valueArray[`${index}`] = count;\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setMultipleEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n for (let i = 0; i < event.length; ++i) {\r\n inputEventDates += event[`${i}`].label + (i != event.length - 1 ? ';' : '');\r\n inputEventIDs += event[`${i}`].value + (i != event.length - 1 ? ';' : '');\r\n }\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = ceremonyEventID.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n setSelectValue(selectValueArray);\r\n setEventID(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(event.length, index);\r\n\r\n _checkEventsEntered(selectValueArray);\r\n }\r\n\r\n const _displayEventDates = (index: number): { value: string, label: string }[] => {\r\n const displayValue: { value: string, label: string }[] = [];\r\n\r\n if (selectValue.length > 0) {\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = ceremonyEventID.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n if (selectValueArray[`${index}`] !== '') {\r\n const eventDates = selectValueArray[`${index}`].split(';');\r\n const eventIds = eventIDArray[`${index}`].split(';');\r\n\r\n for (let i = 0; i < eventDates.length; ++i) {\r\n displayValue.push({ value: eventIds[`${i}`], label: eventDates[`${i}`] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return displayValue;\r\n }\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setCeremonyNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedBy);\r\n }\r\n\r\n const _setDedicatedByValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setDedicatedByArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setDedicatedByArray = (name: string, index: number) => {\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n while (typeof dedicatedByArray[`${index}`] === 'undefined') {\r\n dedicatedByArray.push('');\r\n }\r\n\r\n dedicatedByArray[`${index}`] = name;\r\n\r\n dedicatedByArray[`${index}`].trim();\r\n\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n _checkNamesEntered(ceremonyName, dedicatedByArray);\r\n }\r\n\r\n const _checkEventsEntered = (ceremonyEventArray: string[]) => {\r\n let eventsSelected = ceremonyEventArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < ceremonyEventArray.length; i++) {\r\n if (ceremonyEventArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n eventsSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackEventsSelected(eventsSelected);\r\n }\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[], dedicatedByArray: string[]) => {\r\n let namesEntered = ceremonyNameArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`] && ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n\r\n if (dedicatedByArray[`${i}`] && dedicatedByArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkNumberOfSelectedEvent = (index: number): number => {\r\n const count = selectValue.length > 0 && typeof selectValue[`${index}`] !== 'undefined' ? selectValue[`${index}`].split(';').length : 1;\r\n\r\n return count;\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multiplierArray = multipliers.slice();\r\n const ceremonyEventArray = selectValue.slice();\r\n const ceremonyEventIDArray = ceremonyEventID.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n multiplierArray.push(1);\r\n ceremonyEventArray.push('');\r\n ceremonyEventIDArray.push('');\r\n ceremonyNameArray.push('');\r\n dedicatedByArray.push('');\r\n\r\n setMultiplers(multiplierArray);\r\n setSelectValue(ceremonyEventArray);\r\n setEventID(ceremonyEventIDArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n callbackEvent(ceremonyEventArray);\r\n callbackEventID(ceremonyEventIDArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n callbackEventsSelected(false);\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multiplierArray = multipliers.slice();\r\n const ceremonyEventArray = selectValue.slice();\r\n const ceremonyEventIDArray = ceremonyEventID.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = 1;\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof ceremonyEventArray[`${index}`] !== 'undefined') {\r\n if (ceremonyEventArray.length > 1) {\r\n ceremonyEventArray.splice(index, 1);\r\n } else {\r\n ceremonyEventArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyEventIDArray[`${index}`] !== 'undefined') {\r\n if (ceremonyEventIDArray.length > 1) {\r\n ceremonyEventIDArray.splice(index, 1);\r\n } else {\r\n ceremonyEventIDArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof dedicatedByArray[`${index}`] !== 'undefined') {\r\n if (dedicatedByArray.length > 1) {\r\n dedicatedByArray.splice(index, 1);\r\n } else {\r\n dedicatedByArray[0] = '';\r\n }\r\n }\r\n\r\n setSelectValue(ceremonyEventArray);\r\n setEventID(ceremonyEventIDArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackEvent(ceremonyEventArray);\r\n callbackEventID(ceremonyEventIDArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n _checkEventsEntered(ceremonyEventArray);\r\n _checkNamesEntered(ceremonyNameArray, dedicatedBy);\r\n _checkNamesEntered(ceremonyName, dedicatedByArray);\r\n }\r\n\r\n useEffect(() => {\r\n const multipliersArray: number[] = [];\r\n const eventNamesArray: string[] = [];\r\n const eventIDsArray: string[] = [];\r\n const existingDedicatedBy: string[] = [];\r\n const namesArray: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const eventName: string = formItems[`${i}`]['eventName'];\r\n\r\n multipliersArray.push(eventName.split(';').length);\r\n eventNamesArray.push(eventName);\r\n eventIDsArray.push(formItems[`${i}`]['eventID']);\r\n namesArray.push(formItems[`${i}`]['names'][0]);\r\n existingDedicatedBy.push(formItems[`${i}`]['dedicatedBy']);\r\n }\r\n\r\n setCeremonyName(namesArray);\r\n setDedicatedBy(existingDedicatedBy);\r\n\r\n callbackName(namesArray);\r\n callbackDedicatedBy(existingDedicatedBy);\r\n\r\n _checkNamesEntered(namesArray, existingDedicatedBy);\r\n } else {\r\n multipliersArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n setSelectValue(eventNamesArray);\r\n setEventID(eventIDsArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n\r\n _checkEventsEntered(eventNamesArray);\r\n }, [formItems])\r\n\r\n const _buildEventDropdown = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.eventDate}

\r\n { return ({ value: event['id'], label: event['name'] }); })}\r\n onChange={event => _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildDeceasedName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.deceasedName}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildDedicatedName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicatedBy}

\r\n _setDedicatedByValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_type === 'dropdown') {\r\n return (\r\n
\r\n {_buildEventDropdown(idx)}\r\n {_buildDeceasedName(idx)}\r\n {_buildDedicatedName(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price! * _checkNumberOfSelectedEvent(idx)}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n )\r\n};\r\n\r\nexport default EventDeceasedDedicatedByForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport DatePicker from 'react-date-picker';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync, uploadImageFileToAzure } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IEventDetails, IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\nimport { Response } from '../../../components/enums';\r\n\r\nimport Select from 'react-select'\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackPrice?: any;\r\n callbackName?: any;\r\n callbackEmailId?: any;\r\n callbackContactNumber?: any;\r\n callbackEventID?: any;\r\n callbackEvent?: any;\r\n callbackNamesEntered?: any;\r\n callbackPricesEntered?: any;\r\n callbackMultiplier: any;\r\n callbackEventsSelected?: any;\r\n callbackPhoneNumber: any;\r\n callbackNextOfKinName: any;\r\n callbackNextOfKinPhoneNumber: any;\r\n callbackBirthDate: any;\r\n callbackPassportNumber: any;\r\n callbackPassportExpiryDate: any;\r\n callbackPassportIssuedDate: any;\r\n callbackConsent: any;\r\n callbackDateEntered: any;\r\n callbackPassportExpiryDateEntered: any;\r\n callbackPassportIssueDateEntered: any;\r\n callbackRemarks?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n userInfo: any;\r\n productEvents: any[];\r\n isUat: boolean;\r\n organisation: string;\r\n azureContainerName: string;\r\n callbackPhoneNumbersEntered: any;\r\n callbackPassportNumberEntered: any;\r\n callbackInsuranceIncluded: any;\r\n callbackFileUploaded: any;\r\n isFileUploaded: boolean;\r\n allowMultipleRegistrations: boolean;\r\n showRemarksField: boolean;\r\n insuranceAmount: string;\r\n callbackInsuranceIncludedNum: any;\r\n}\r\n\r\nconst EventPassportUploadInsuranceForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackPrice, callbackName, callbackNamesEntered, callbackPricesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, userInfo, productEvents, callbackEventID, callbackEvent, callbackMultiplier, callbackEventsSelected, callbackPhoneNumber, callbackNextOfKinName, callbackPhoneNumbersEntered, callbackNextOfKinPhoneNumber, callbackBirthDate, callbackDateEntered, isUat, organisation, azureContainerName, callbackPassportNumberEntered, callbackPassportExpiryDateEntered, callbackPassportIssueDateEntered, callbackFileUploaded, isFileUploaded, allowMultipleRegistrations,\r\n callbackPassportNumber, callbackPassportExpiryDate, callbackPassportIssuedDate, callbackConsent, callbackRemarks, showRemarksField, insuranceAmount, callbackInsuranceIncluded, callbackInsuranceIncludedNum }) => {\r\n\r\n var insuranceAmountValue = Number(insuranceAmount);\r\n\r\n const [customPrice, setCustomPrice] = useState([insuranceAmountValue]);\r\n const [inputValue, setInputValue] = useState(['']);\r\n const [attendeeName, setAttendeeName] = useState(['']);\r\n const [coursesEventId, setCoursesEventId] = useState(['']);\r\n const [selectValue, setSelectValue] = useState(['']);\r\n const [phoneNumbers, setPhoneNumbers] = useState(['']);\r\n const [chineseName, setChineseName] = useState(['']);\r\n const [nextOfKinName, setNextOfKinName] = useState(['']);\r\n const [nextOfKinPhoneNumbers, setNextOfKinPhoneNumbers] = useState(['']);\r\n const [birthDate, setBirthDate] = useState(['']);\r\n const [passportNumber, setPassportNumber] = useState(['']);\r\n const [passportExpiryDate, setPassportExpiryDate] = useState(['']);\r\n const [passportIssueDate, setPassportIssueDate] = useState(['']);\r\n const [multipliers, setMultiplers] = useState([1]);\r\n const [remainingSlots, setRemainingSlots] = useState(0);\r\n const [file, setFile] = useState('');\r\n const [imageFiles, setImageFiles] = useState(['']);\r\n const [isValidFileSize, setIsValidFileSize] = useState(false);\r\n const [consent, setConsent] = useState([1]);\r\n const [remark, setRemark] = useState(['']);\r\n const [isInsuranceIncluded, setIsInsuranceIncluded] = useState([false]);\r\n const [isInsuranceIncludedNum, setIsInsuranceIncludedNum] = useState([0]);\r\n const[showAddMoreButton, setShowAddMoreButton] = useState(false);\r\n\r\n\r\n const formLabels = resource.eventsPassportUploadWithInsuranceForm[`${localeCode}`];\r\n\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm();\r\n\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setAttendeeNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n\r\n\r\n };\r\n\r\n const _setNextOfKinNameArray = (name: string, index: number) => {\r\n const nextOfKinNameArray = nextOfKinName.slice();\r\n\r\n while (typeof nextOfKinNameArray[`${index}`] === 'undefined') {\r\n nextOfKinNameArray.push('');\r\n }\r\n\r\n nextOfKinNameArray[`${index}`] = name;\r\n\r\n nextOfKinNameArray[`${index}`].trim();\r\n\r\n setNextOfKinName(nextOfKinNameArray);\r\n\r\n callbackNextOfKinName(nextOfKinNameArray);\r\n\r\n };\r\n\r\n const _setNextOfKinPhoneNumbers = (value: string, index: number) => {\r\n const valueArray = nextOfKinPhoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setNextOfKinPhoneNumbers(valueArray);\r\n\r\n callbackNextOfKinPhoneNumber(valueArray);\r\n }\r\n\r\n const _setPassportNumber = (value: string, index: number) => {\r\n const valueArray = passportNumber.slice();\r\n\r\n const alphanumericRegex = /^[a-zA-Z0-9\\s]+$/;\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if (alphanumericRegex.test(value) && value.length <= 50) {\r\n valueArray[`${index}`] = value;\r\n\r\n setPassportNumber(valueArray);\r\n _checkPassportNumberEntered(valueArray);\r\n callbackPassportNumber(valueArray);\r\n }\r\n else {\r\n toast.error(formLabels.validPassportText)\r\n }\r\n }\r\n\r\n const _setPassportExpiryDate = (value: Date, index: number) => {\r\n const valueArray = passportExpiryDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n setPassportExpiryDate(valueArray);\r\n _checkPassportExpiryDateEntered(valueArray);\r\n callbackPassportExpiryDate(valueArray);\r\n }\r\n\r\n const _setPassportIssueDate = (value: Date, index: number) => {\r\n const valueArray = passportIssueDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n setPassportIssueDate(valueArray);\r\n _checkPassportIssueDateEntered(valueArray);\r\n callbackPassportIssuedDate(valueArray);\r\n }\r\n\r\n const _setBirthDate = (value: Date, index: number) => {\r\n const valueArray = birthDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n setBirthDate(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n\r\n _checkDateEntered(valueArray);\r\n }\r\n\r\n const _checkDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (!valueArray[`${i}`]) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackDateEntered(checked);\r\n }\r\n\r\n const _checkPassportExpiryDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (!valueArray[`${i}`]) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackPassportExpiryDateEntered(checked);\r\n }\r\n\r\n const _checkPassportIssueDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (!valueArray[`${i}`]) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackPassportIssueDateEntered(checked);\r\n }\r\n\r\n const _setAttendeeNameArray = (name: string, index: number) => {\r\n const attendeeNameArray = attendeeName.slice();\r\n\r\n while (typeof attendeeNameArray[`${index}`] === 'undefined') {\r\n attendeeNameArray.push('');\r\n }\r\n\r\n attendeeNameArray[`${index}`] = name;\r\n\r\n attendeeNameArray[`${index}`].trim();\r\n\r\n setAttendeeName(attendeeNameArray);\r\n\r\n callbackName(attendeeNameArray);\r\n\r\n _checkNamesEntered(attendeeNameArray);\r\n };\r\n\r\n const _setPhoneNumber = (value: string, index: number) => {\r\n const valueArray = phoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setPhoneNumbers(valueArray);\r\n\r\n callbackPhoneNumber(valueArray);\r\n\r\n _checkPhoneNumberEntered(valueArray);\r\n }\r\n\r\n const _setNextOfKinNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setNextOfKinNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n\r\n\r\n };\r\n\r\n const convertToBase64 = (file: any) => {\r\n return new Promise((resolve, reject) => {\r\n const fileReader = new FileReader();\r\n fileReader.readAsDataURL(file);\r\n fileReader.onload = () => {\r\n resolve(fileReader.result);\r\n };\r\n fileReader.onerror = (error) => {\r\n reject(error);\r\n };\r\n });\r\n };\r\n\r\n const _validateFileSize = (file: any) => {\r\n const MAX_FILE_SIZE = 2e+7 // 20MB\r\n const fileSizeKiloBytes = file.size;\r\n\r\n if (fileSizeKiloBytes > MAX_FILE_SIZE) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n const _setFileInputValue = async (event: any, index: number) => {\r\n const imageFile = event.target.files[0];\r\n if (_validateFileSize(imageFile)) {\r\n const base64 = await convertToBase64(imageFile) as string;\r\n const base64String = base64.toString().replace(/^data:image\\/\\w+;base64,/, \"\");\r\n setFile(base64String);\r\n\r\n const imageFileArray = imageFiles.slice();\r\n\r\n while (typeof imageFileArray[`${index}`] === 'undefined') {\r\n imageFileArray.push('');\r\n }\r\n\r\n imageFileArray[`${index}`] = imageFile.name;\r\n\r\n imageFileArray[`${index}`].trim();\r\n\r\n setImageFiles(imageFileArray);\r\n setIsValidFileSize(true);\r\n }\r\n else {\r\n setIsValidFileSize(false);\r\n toast.error(formLabels.fileSizeErrorMsg);\r\n }\r\n };\r\n\r\n\r\n const _checkNamesEntered = (attendeeNameArray: string[]) => {\r\n let namesEntered = attendeeNameArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < attendeeNameArray.length; i++) {\r\n if (attendeeNameArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkFileUploaded = (imageFileArray: string[]) => {\r\n let imageFileUploaded = imageFileArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < imageFileArray.length; i++) {\r\n if (imageFileArray[`${i}`].trim() === '') {\r\n imageFileUploaded = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackFileUploaded(imageFileUploaded);\r\n }\r\n\r\n const _checkPhoneNumberEntered = (phoneNumbersArray: string[]) => {\r\n let phoneNumbersEntered = phoneNumbersArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < phoneNumbersArray.length; i++) {\r\n if (phoneNumbersArray[`${i}`].trim() === '') {\r\n phoneNumbersEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPhoneNumbersEntered(phoneNumbersEntered);\r\n }\r\n\r\n const _checkPassportNumberEntered = (passportNumbersArray: string[]) => {\r\n let passportNumbersEntered = passportNumbersArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < passportNumbersArray.length; i++) {\r\n if (passportNumbersArray[`${i}`].trim() === '') {\r\n passportNumbersEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPassportNumberEntered(passportNumbersEntered);\r\n }\r\n\r\n const _checkPricesEntered = (customPriceArray: number[]) => {\r\n let pricesEntered = true;\r\n\r\n for (let i = 0; i < customPriceArray.length; i++) {\r\n if (customPriceArray[`${i}`] == 0) {\r\n pricesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPricesEntered(pricesEntered);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _uploadFileToAzure = async (index: number) => {\r\n const env = isUat ? \"uat\" : \"prod\";\r\n const entity = organisation == \"BT\" ? \"btrts\" : \"gpbt\";\r\n const fileName = passportNumber[`${index}`] + \".jpeg\";\r\n const base64Image = file;\r\n const containerName = azureContainerName;\r\n\r\n const imageFileArray = imageFiles.slice();\r\n\r\n\r\n const alphanumericRegex = /^[a-zA-Z0-9\\s]+$/;\r\n\r\n if (alphanumericRegex.test(passportNumber[`${index}`])) {\r\n\r\n const uploadFileResult = await uploadImageFileToAzure({ callerContext: actionContext }, env, entity, fileName, base64Image, containerName);\r\n\r\n if (uploadFileResult.toUpperCase() !== Response.SUCCESS) {\r\n toast.error(formLabels.fileUploadFailedMsg);\r\n }\r\n else {\r\n\r\n setImageFiles(imageFileArray);\r\n _checkFileUploaded(imageFileArray);\r\n // setIsFileUploaded(true);\r\n toast(formLabels.fileUploadSuccessMsg);\r\n }\r\n\r\n }\r\n else {\r\n toast.error(formLabels.validPassportText)\r\n }\r\n\r\n\r\n\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const attendeeNameArray = attendeeName.slice();\r\n const coursesEventArray = selectValue.slice();\r\n const coursesEventIDArray = coursesEventId.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const nextOfKinNamesArray = nextOfKinName.slice();\r\n const nextOfKinPhoneNumbersArray = nextOfKinPhoneNumbers.slice();\r\n const chineseNamesArray = chineseName.slice();\r\n const birthdayArray = birthDate.slice();\r\n const passportNumberArray = passportNumber.slice();\r\n const passportIssueDateArray = passportIssueDate.slice();\r\n const passportExpiryDateArray = passportExpiryDate.slice();\r\n const imageFileArray = imageFiles.slice();\r\n const consentArray = consent.slice();\r\n const remarkArray = remark.slice();\r\n const customPriceArray = customPrice.slice();\r\n\r\n\r\n birthdayArray.push('');\r\n passportIssueDateArray.push('');\r\n passportExpiryDateArray.push('');\r\n imageFileArray.push('');\r\n passportNumberArray.push('');\r\n consentArray.push(1);\r\n remarkArray.push('');\r\n customPriceArray.push(selectedProduct.result?.Price!);\r\n\r\n setShowAddMoreButton(false);\r\n setRemainingSlots(0);\r\n setAttendeeName(attendeeNameArray);\r\n setSelectValue(coursesEventArray);\r\n setCoursesEventId(coursesEventIDArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setChineseName(chineseNamesArray);\r\n setNextOfKinName(nextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(nextOfKinPhoneNumbersArray);\r\n setPassportNumber(passportNumberArray);\r\n setPassportIssueDate(passportIssueDateArray);\r\n setPassportExpiryDate(passportExpiryDateArray)\r\n setBirthDate(birthdayArray);\r\n setImageFiles(imageFileArray)\r\n setConsent(consentArray);\r\n setCustomPrice(customPriceArray);\r\n setRemark(remarkArray);\r\n\r\n\r\n callbackEvent(coursesEventArray);\r\n callbackEventID(coursesEventIDArray);\r\n callbackName(attendeeNameArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackNextOfKinName(nextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(nextOfKinPhoneNumbersArray);\r\n callbackBirthDate(birthdayArray);\r\n callbackPassportNumber(passportNumberArray);\r\n callbackPassportExpiryDate(passportExpiryDateArray);\r\n callbackPassportIssuedDate(passportIssueDateArray);\r\n callbackConsent(consentArray);\r\n callbackRemarks(remarkArray);\r\n callbackPrice(customPriceArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackEventsSelected(false);\r\n callbackDateEntered(false);\r\n\r\n _checkPassportNumberEntered(passportNumberArray);\r\n _checkPassportExpiryDateEntered(passportExpiryDateArray);\r\n _checkPassportIssueDateEntered(passportIssueDateArray);\r\n _checkFileUploaded(imageFileArray);\r\n _checkPricesEntered(customPriceArray);\r\n\r\n if (productEvents.length === 1) {\r\n\r\n const event = productEvents[0];\r\n const eventObj = { value: event['id'], label: event['name'] }\r\n _setEventDates(eventObj, coursesEventArray.length);\r\n callbackEventsSelected(true);\r\n\r\n }\r\n\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const customPriceArray = customPrice.slice();\r\n const inputValueArray = inputValue.slice();\r\n const attendeeNameArray = attendeeName.slice();\r\n const multiplierArray = multipliers.slice();\r\n const coursesEventArray = selectValue.slice();\r\n const coursesEventIDArray = coursesEventId.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const chineseNamesArray = chineseName.slice();\r\n const nextOfKinNamesArray = nextOfKinName.slice();\r\n const nextOfKinPhoneNumbersArray = nextOfKinPhoneNumbers.slice();\r\n const birthdayArray = birthDate.slice();\r\n const passportNumberArray = passportNumber.slice();\r\n const passportIssueDateArray = passportIssueDate.slice();\r\n const passportExpiryDateArray = passportExpiryDate.slice();\r\n const imageFileArray = imageFiles.slice();\r\n const consentArray = consent.slice();\r\n const remarkArray = remark.slice();\r\n const isInsuranceIncludedArray = isInsuranceIncluded.slice();\r\n const isInsuranceIncludedNumArray = isInsuranceIncludedNum.slice();\r\n\r\n\r\n if (typeof customPriceArray[`${index}`] !== 'undefined') {\r\n if (customPriceArray.length > 1) {\r\n customPriceArray.splice(index, 1);\r\n } else {\r\n customPriceArray[0] = insuranceAmountValue;\r\n }\r\n }\r\n\r\n if (typeof inputValueArray[`${index}`] !== 'undefined') {\r\n if (inputValueArray.length > 1) {\r\n inputValueArray.splice(index, 1);\r\n } else {\r\n inputValueArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof attendeeNameArray[`${index}`] !== 'undefined') {\r\n if (attendeeNameArray.length > 1) {\r\n attendeeNameArray.splice(index, 1);\r\n } else {\r\n attendeeNameArray[0] = '';\r\n }\r\n }\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = 1;\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof coursesEventArray[`${index}`] !== 'undefined') {\r\n if (coursesEventArray.length > 1) {\r\n coursesEventArray.splice(index, 1);\r\n } else {\r\n coursesEventArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof coursesEventIDArray[`${index}`] !== 'undefined') {\r\n if (coursesEventIDArray.length > 1) {\r\n coursesEventIDArray.splice(index, 1);\r\n } else {\r\n coursesEventIDArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof phoneNumbersArray[`${index}`] !== 'undefined') {\r\n if (phoneNumbersArray.length > 1) {\r\n phoneNumbersArray.splice(index, 1);\r\n } else {\r\n phoneNumbersArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof chineseNamesArray[`${index}`] !== 'undefined') {\r\n if (chineseNamesArray.length > 1) {\r\n chineseNamesArray.splice(index, 1);\r\n } else {\r\n chineseNamesArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof nextOfKinNamesArray[`${index}`] !== 'undefined') {\r\n if (nextOfKinNamesArray.length > 1) {\r\n nextOfKinNamesArray.splice(index, 1);\r\n } else {\r\n nextOfKinNamesArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof nextOfKinPhoneNumbersArray[`${index}`] !== 'undefined') {\r\n if (nextOfKinPhoneNumbersArray.length > 1) {\r\n nextOfKinPhoneNumbersArray.splice(index, 1);\r\n } else {\r\n nextOfKinPhoneNumbersArray[0] = '';\r\n }\r\n }\r\n if (typeof birthdayArray[`${index}`] !== 'undefined') {\r\n if (birthdayArray.length > 1) {\r\n birthdayArray.splice(index, 1);\r\n } else {\r\n birthdayArray[0] = '';\r\n }\r\n }\r\n if (typeof passportNumberArray[`${index}`] !== 'undefined') {\r\n if (passportNumberArray.length > 1) {\r\n passportNumberArray.splice(index, 1);\r\n } else {\r\n passportNumberArray[0] = '';\r\n }\r\n }\r\n if (typeof passportExpiryDateArray[`${index}`] !== 'undefined') {\r\n if (passportExpiryDateArray.length > 1) {\r\n passportExpiryDateArray.splice(index, 1);\r\n } else {\r\n passportExpiryDateArray[0] = '';\r\n }\r\n }\r\n if (typeof passportIssueDateArray[`${index}`] !== 'undefined') {\r\n if (passportIssueDateArray.length > 1) {\r\n passportIssueDateArray.splice(index, 1);\r\n } else {\r\n passportIssueDateArray[0] = '';\r\n }\r\n }\r\n if (typeof imageFileArray[`${index}`] !== 'undefined') {\r\n if (imageFileArray.length > 1) {\r\n imageFileArray.splice(index, 1);\r\n } else {\r\n imageFileArray[0] = '';\r\n }\r\n }\r\n if (typeof consentArray[`${index}`] !== 'undefined') {\r\n if (consentArray.length > 1) {\r\n consentArray.splice(index, 1);\r\n } else {\r\n consentArray[0] = 1;\r\n }\r\n }\r\n if (typeof remarkArray[`${index}`] !== 'undefined') {\r\n if (remarkArray.length > 1) {\r\n remarkArray.splice(index, 1);\r\n } else {\r\n remarkArray[0] = '';\r\n }\r\n }\r\n if (typeof isInsuranceIncludedArray[`${index}`] !== 'undefined') {\r\n if (isInsuranceIncludedArray.length > 1) {\r\n isInsuranceIncludedArray.splice(index, 1);\r\n } else {\r\n isInsuranceIncludedArray[0] = false;\r\n }\r\n }\r\n if (typeof isInsuranceIncludedNumArray[`${index}`] !== 'undefined') {\r\n if (isInsuranceIncludedNumArray.length > 1) {\r\n isInsuranceIncludedNumArray.splice(index, 1);\r\n } else {\r\n isInsuranceIncludedNumArray[0] = 0;\r\n }\r\n }\r\n\r\n setCustomPrice(customPriceArray);\r\n setInputValue(inputValueArray);\r\n setAttendeeName(attendeeNameArray);\r\n setSelectValue(coursesEventArray);\r\n setCoursesEventId(coursesEventIDArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setChineseName(chineseNamesArray);\r\n setNextOfKinName(nextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(nextOfKinPhoneNumbersArray);\r\n setBirthDate(birthdayArray);\r\n setPassportNumber(passportNumberArray);\r\n setPassportIssueDate(passportIssueDateArray);\r\n setPassportExpiryDate(passportExpiryDateArray)\r\n setImageFiles(imageFileArray);\r\n setConsent(consentArray);\r\n setIsInsuranceIncluded(isInsuranceIncludedArray);\r\n setIsInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n setRemark(remarkArray);\r\n\r\n\r\n callbackEvent(coursesEventArray);\r\n callbackEventID(coursesEventIDArray);\r\n callbackName(attendeeNameArray);\r\n callbackPrice(customPriceArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackNextOfKinName(nextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(nextOfKinPhoneNumbersArray);\r\n callbackBirthDate(birthdayArray);\r\n callbackPassportNumber(passportNumberArray);\r\n callbackPassportExpiryDate(passportExpiryDateArray);\r\n callbackPassportIssuedDate(passportIssueDateArray);\r\n callbackConsent(consentArray);\r\n callbackRemarks(remarkArray);\r\n callbackInsuranceIncluded(isInsuranceIncludedArray);\r\n callbackInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n\r\n\r\n _checkEventsEntered(coursesEventArray);\r\n _checkNamesEntered(attendeeNameArray);\r\n _checkFileUploaded(imageFileArray);\r\n _checkPricesEntered(customPriceArray);\r\n _checkPhoneNumberEntered(phoneNumbersArray);\r\n _checkPassportNumberEntered(passportNumberArray);\r\n _checkDateEntered(birthdayArray);\r\n _checkPassportExpiryDateEntered(passportExpiryDateArray);\r\n _checkPassportIssueDateEntered(passportIssueDateArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingInputValue: string[] = [];\r\n const existingAttendeeName: string[] = [];\r\n const multipliersArray: number[] = [];\r\n const eventNamesArray: string[] = [];\r\n const eventIDsArray: string[] = [];\r\n const existingPhoneNumbersArray: string[] = [];\r\n const existingChineseNamesArray: string[] = [];\r\n const existingNextOfKinNamesArray: string[] = [];\r\n const existingNextOfKinPhoneNumbersArray: string[] = [];\r\n const existingBirthDate: string[] = [];\r\n const existingPassportNumber: string[] = [];\r\n const existingPassportIssueDate: string[] = [];\r\n const existingPassportExpiryDate: string[] = [];\r\n const imageFileArray: string[] = [];\r\n const existingConsent: number[] = [];\r\n const existingRemark: string[] = [];\r\n const insuranceIncludeArray: boolean[] = [];\r\n const customPriceArray: number[] = [];\r\n const isInsuranceIncludedNumArray: number[]=[];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n\r\n const eventName: string = formItems[`${i}`]['eventName'];\r\n const birthDate = formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']) : null;\r\n const passportExpiryDate = formItems[`${i}`]['passportExpiryDate'] !== '' ? new Date(formItems[`${i}`]['passportExpiryDate']) : null;\r\n const passportIssueDate = formItems[`${i}`]['passportIssuedDate'] !== '' ? new Date(formItems[`${i}`]['passportIssuedDate']) : null;\r\n const hasInsurance = formItems[`${i}`]['isInsuranceIncluded'] ? formItems[`${i}`]['isInsuranceIncluded'] : 0;\r\n\r\n const checkbox = document.getElementById('insurance_' + i) as HTMLInputElement | null;\r\n\r\n if (checkbox) {\r\n if(hasInsurance === 0)\r\n {\r\n checkbox.checked = false;\r\n }\r\n else\r\n {\r\n checkbox.checked = true;\r\n }\r\n }\r\n\r\n if (hasInsurance === 0) {\r\n customPriceArray.push(selectedProduct.result?.Price!);\r\n }\r\n else {\r\n customPriceArray.push(selectedProduct.result?.Price! + insuranceAmountValue);\r\n }\r\n\r\n\r\n multipliersArray.push(eventName.split(';').length);\r\n eventNamesArray.push(eventName);\r\n eventIDsArray.push(formItems[`${i}`]['eventID']);\r\n existingPhoneNumbersArray.push(formItems[`${i}`]['phoneNumber']);\r\n existingChineseNamesArray.push(formItems[`${i}`]['chineseName']);\r\n existingNextOfKinNamesArray.push(formItems[`${i}`]['nameNextKin']);\r\n existingNextOfKinPhoneNumbersArray.push(formItems[`${i}`]['contactNumberNextKin']);\r\n existingBirthDate.push(birthDate ? birthDate.toISOString() : '');\r\n existingPassportNumber.push(formItems[`${i}`]['passportNumber']);\r\n existingPassportIssueDate.push(passportIssueDate ? passportIssueDate.toISOString() : '');\r\n existingPassportExpiryDate.push(passportExpiryDate ? passportExpiryDate.toISOString() : '');\r\n existingAttendeeName.push(formItems[`${i}`]['names'][0]);\r\n existingConsent.push(1);\r\n existingRemark.push(formItems[`${i}`]['remarks']);\r\n insuranceIncludeArray.push(hasInsurance === 0 ? false: true);\r\n isInsuranceIncludedNumArray.push(hasInsurance);\r\n imageFileArray.push('');\r\n\r\n }\r\n\r\n if (productEvents.length === 1) {\r\n const event = productEvents[0];\r\n const eventObj = { value: event['id'], label: event['name'] }\r\n\r\n _setEventDatesOnLoad(eventObj, formItems.length);\r\n callbackEventsSelected(true);\r\n\r\n }\r\n setAttendeeName(existingAttendeeName);\r\n setPhoneNumbers(existingPhoneNumbersArray);\r\n setChineseName(existingChineseNamesArray);\r\n setNextOfKinName(existingNextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(existingNextOfKinPhoneNumbersArray);\r\n setBirthDate(existingBirthDate);\r\n setPassportNumber(existingPassportNumber);\r\n setPassportIssueDate(existingPassportIssueDate);\r\n setPassportExpiryDate(existingPassportExpiryDate);\r\n setImageFiles(imageFileArray);\r\n setConsent(existingConsent);\r\n setIsInsuranceIncluded(insuranceIncludeArray);\r\n setIsInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n setCustomPrice(customPriceArray);\r\n setRemark(existingRemark);\r\n\r\n\r\n callbackName(existingAttendeeName);\r\n callbackBirthDate(existingBirthDate);\r\n callbackPhoneNumber(existingPhoneNumbersArray);\r\n callbackNextOfKinName(existingNextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(existingNextOfKinPhoneNumbersArray);\r\n callbackPassportNumber(existingPassportNumber);\r\n callbackPassportExpiryDate(existingPassportExpiryDate);\r\n callbackPassportIssuedDate(existingPassportIssueDate);\r\n callbackConsent(existingConsent);\r\n callbackRemarks(existingRemark);\r\n callbackInsuranceIncluded(insuranceIncludeArray);\r\n callbackInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n\r\n _checkNamesEntered(existingAttendeeName);\r\n _checkFileUploaded(imageFileArray);\r\n _checkPhoneNumberEntered(existingPhoneNumbersArray);\r\n _checkPassportNumberEntered(existingPassportNumber);\r\n _checkDateEntered(existingBirthDate);\r\n _checkPassportExpiryDateEntered(existingPassportExpiryDate);\r\n _checkPassportIssueDateEntered(existingPassportIssueDate);\r\n\r\n } else {\r\n existingInputValue.push('');\r\n multipliersArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n existingBirthDate.push('');\r\n existingPassportNumber.push('');\r\n existingPassportExpiryDate.push('');\r\n existingPassportIssueDate.push('');\r\n imageFileArray.push('');\r\n existingConsent.push(1);\r\n customPriceArray.push(selectedProduct.result?.Price!);\r\n existingRemark.push('');\r\n\r\n }\r\n\r\n if (userValid && existingAttendeeName.length <= 0) {\r\n\r\n existingAttendeeName.push(userInfo.firstname + ' ' + userInfo.lastname);\r\n existingChineseNamesArray.push(userInfo.gmb_fullnamechinese);\r\n existingPhoneNumbersArray.push(userInfo.mobilephone)\r\n }\r\n\r\n setAttendeeName(existingAttendeeName);\r\n setInputValue(existingInputValue);\r\n setMultiplers(multipliersArray);\r\n setPhoneNumbers(existingPhoneNumbersArray);\r\n setChineseName(existingChineseNamesArray);\r\n setNextOfKinName(existingNextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(existingNextOfKinPhoneNumbersArray);\r\n setBirthDate(existingBirthDate);\r\n setPassportNumber(existingPassportNumber);\r\n setPassportIssueDate(existingPassportIssueDate);\r\n setPassportExpiryDate(existingPassportExpiryDate);\r\n setImageFiles(imageFileArray);\r\n setConsent(existingConsent);\r\n setIsInsuranceIncluded(insuranceIncludeArray);\r\n setIsInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n setCustomPrice(customPriceArray);\r\n setRemark(existingRemark);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackBirthDate(existingBirthDate);\r\n callbackConsent(existingConsent);\r\n callbackInsuranceIncluded(insuranceIncludeArray);\r\n callbackInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n callbackRemarks(existingRemark);\r\n\r\n callbackPrice(customPriceArray);\r\n callbackName(existingAttendeeName);\r\n callbackPhoneNumber(existingPhoneNumbersArray);\r\n callbackNextOfKinName(existingNextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(existingNextOfKinPhoneNumbersArray);\r\n callbackPassportNumber(existingPassportNumber);\r\n callbackPassportExpiryDate(existingPassportExpiryDate);\r\n callbackPassportIssuedDate(existingPassportIssueDate);\r\n\r\n _checkDateEntered(existingBirthDate);\r\n _checkPricesEntered(customPriceArray);\r\n _checkNamesEntered(existingAttendeeName);\r\n _checkFileUploaded(imageFileArray);\r\n _checkPhoneNumberEntered(existingPhoneNumbersArray);\r\n _checkPassportNumberEntered(existingPassportNumber);\r\n _checkPassportExpiryDateEntered(existingPassportExpiryDate);\r\n _checkPassportIssueDateEntered(existingPassportIssueDate);\r\n\r\n\r\n if (productEvents.length === 1 && formItems.length <= 0) {\r\n\r\n const event = productEvents[0];\r\n const eventObj = { value: event['id'], label: event['name'] }\r\n\r\n _setEventDates(eventObj, 0);\r\n callbackEventsSelected(true);\r\n\r\n }\r\n else if(productEvents.length > 1){\r\n setSelectValue(eventNamesArray);\r\n setCoursesEventId(eventIDsArray);\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n _checkEventsEntered(eventNamesArray);\r\n }\r\n\r\n }, [formItems])\r\n\r\n const _displayEventDates = (index: number): { value: string, label: string }[] => {\r\n const displayValue: { value: string, label: string }[] = [];\r\n\r\n if (selectValue.length > 0) {\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n if (selectValueArray[`${index}`] !== '') {\r\n const eventDates = selectValueArray[`${index}`].split(';');\r\n const eventIds = eventIDArray[`${index}`].split(';');\r\n\r\n for (let i = 0; i < eventDates.length; ++i) {\r\n displayValue.push({ value: eventIds[`${i}`], label: eventDates[`${i}`] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return displayValue;\r\n }\r\n\r\n const _checkEventsEntered = (cousesEventArray: string[]) => {\r\n let eventsSelected = cousesEventArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < cousesEventArray.length; i++) {\r\n if (cousesEventArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n eventsSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackEventsSelected(eventsSelected);\r\n }\r\n\r\n const _setRemarksInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 100;\r\n\r\n _setRemarkArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setRemarkArray = (name: string, index: number) => {\r\n const remarkArray = remark.slice();\r\n\r\n while (typeof remarkArray[`${index}`] === 'undefined') {\r\n remarkArray.push('');\r\n }\r\n\r\n remarkArray[`${index}`] = name;\r\n\r\n remarkArray[`${index}`].trim();\r\n\r\n setRemark(remarkArray);\r\n\r\n callbackRemarks(remarkArray);\r\n }\r\n\r\n const _setMultipler = (count: number, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(1);\r\n }\r\n\r\n valueArray[`${index}`] = count;\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setMultipleEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n\r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n //_setMultipler(1, index);\r\n\r\n _checkEventsEntered(selectValueArray);\r\n }\r\n\r\n const _setEventDatesOnLoad = (event: any, formLength: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n\r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n for(let i=0; i< formLength; i++)\r\n {\r\n \r\n while (typeof selectValueArray[`${i}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${i}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n selectValueArray[`${i}`] = inputEventDates;\r\n eventIDArray[`${i}`] = inputEventIDs;\r\n\r\n }\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n //_setMultipler(1, index);\r\n\r\n }\r\n const _setEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n\r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(1, index);\r\n\r\n }\r\n\r\n const _setInsuranceAmount = (value: boolean, index: number) => {\r\n const valueArray = isInsuranceIncluded.slice();\r\n const insuranceArray = customPrice.slice();\r\n const insuranceNumArray = isInsuranceIncludedNum.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(false);\r\n }\r\n\r\n while (typeof insuranceArray[`${index}`] === 'undefined') {\r\n insuranceArray.push(0);\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n insuranceNumArray[`${index}`] = value === true? 1: 0;\r\n\r\n if (value === true) {\r\n insuranceArray[`${index}`] = selectedProduct.result?.Price! + insuranceAmountValue;\r\n\r\n }\r\n else {\r\n insuranceArray[`${index}`] = selectedProduct.result?.Price!;\r\n\r\n }\r\n\r\n\r\n setIsInsuranceIncluded(valueArray);\r\n setIsInsuranceIncludedNum(insuranceNumArray);\r\n setCustomPrice(insuranceArray);\r\n callbackPrice(insuranceArray);\r\n callbackInsuranceIncluded(valueArray);\r\n callbackInsuranceIncludedNum(insuranceNumArray);\r\n };\r\n\r\n const _buildBirthDate = (idx: number): JSX.Element | null => {\r\n if (typeof birthDate[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n return (\r\n
\r\n
\r\n

{formLabels.birthDate}

\r\n _setBirthDate(date, idx)}\r\n value={birthDate[`${idx}`] === '' || birthDate[`${idx}`].includes('1900') ? null : new Date(birthDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildPassportExpiryDate = (idx: number): JSX.Element | null => {\r\n if (typeof passportExpiryDate[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n return (\r\n
\r\n
\r\n

{formLabels.passportExpiryDate}

\r\n _setPassportExpiryDate(date, idx)}\r\n value={passportExpiryDate[`${idx}`] === '' || passportExpiryDate[`${idx}`]?.includes('1900') ? null : new Date(passportExpiryDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildPassportIssueDate = (idx: number): JSX.Element | null => {\r\n if (typeof passportIssueDate[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n return (\r\n
\r\n
\r\n

{formLabels.passportIssueDate}

\r\n _setPassportIssueDate(date, idx)}\r\n value={passportIssueDate[`${idx}`] === '' || passportIssueDate[`${idx}`]?.includes('1900') ? null : new Date(passportIssueDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildEventDropdown = (idx: number): JSX.Element => {\r\n if (productEvents.length > 1) {\r\n return (\r\n
\r\n
\r\n

{formLabels.coursesEvents}

\r\n { return ({ value: event['id'], label: event['name'] }); })}\r\n onChange={event => _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n\r\n }\r\n const event = productEvents[0];\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.coursesEvents}

\r\n _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n\r\n }\r\n\r\n const _buildUploadPassport = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n

{formLabels.passportUpload}

\r\n
\r\n
\r\n _setFileInputValue(event, idx)}\r\n className='form-control'\r\n />\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.attendeeName}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNextOfKinName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.nameNextOfKin}

\r\n _setNextOfKinNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNextOfKinContactNumber = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.phoneNumberNextOfKin}

\r\n _setNextOfKinPhoneNumbers(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildPassportNumber = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.passportNumber}

\r\n _setPassportNumber(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildContactNumber = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.phoneNumber}

\r\n _setPhoneNumber(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildRemarks = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.remarks}

\r\n _setRemarksInputValue(event, idx)}\r\n className='form-control'\r\n maxLength={config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 101}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildInsuranceField = (idx: number): JSX.Element | null => {\r\n if (typeof customPrice[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.tax}

\r\n

{formLabels.taxPrompt}

\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'attendeeName') {\r\n return (\r\n
\r\n {remainingSlots !== 0 &&

{formLabels.availableSlots}{remainingSlots}

}\r\n {_buildEventDropdown(idx)}\r\n {_buildName(idx)}\r\n {_buildContactNumber(idx)}\r\n {_buildNextOfKinName(idx)}\r\n {_buildNextOfKinContactNumber(idx)}\r\n {_buildBirthDate(idx)}\r\n {_buildPassportNumber(idx)}\r\n {_buildPassportExpiryDate(idx)}\r\n {_buildPassportIssueDate(idx)}\r\n {_buildUploadPassport(idx)}\r\n {_buildInsuranceField(idx)}\r\n {showRemarksField && _buildRemarks(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

\r\n ${isInsuranceIncluded[`${idx}`] ? typeof customPrice[`${idx}`] !== 'undefined' ? customPrice[`${idx}`] : '0' : selectedProduct.result?.Price!}\r\n

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations && isFileUploaded && showAddMoreButton &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
;\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations && isFileUploaded && showAddMoreButton &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default EventPassportUploadInsuranceForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport Select from 'react-select';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport countries from '../resources/countries.json';\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackEvent: any;\r\n callbackEventID: any;\r\n callbackName: any;\r\n callbackHasTaxDeduction: any;\r\n callbackNRIC: any;\r\n callbackPhoneNumber: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackCountry: any;\r\n callbackEnableSaveDraft: any;\r\n callbackFormsValidation: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst EventTaxDeductionForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackMultiplier, callbackEvent, callbackEventID, callbackName, callbackHasTaxDeduction, callbackNRIC,\r\n callbackPhoneNumber, callbackBuilding, callbackUnitNumber, callbackPostalCode, callbackCountry, callbackEnableSaveDraft, callbackFormsValidation,\r\n formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents,allowMultipleRegistrations }) => {\r\n const [eventNames, setEventNames] = useState(['']);\r\n const [eventIDs, setEventIDs] = useState(['']);\r\n const [names, setNames] = useState(['']);\r\n const [taxDeductions, setTaxDeductions] = useState([false]);\r\n const [nrics, setNRICs] = useState(['']);\r\n const [phoneNumbers, setPhoneNumbers] = useState(['']);\r\n const [buildingNames, setBuildingNames] = useState(['']);\r\n const [unitNumbers, setUnitNumbers] = useState(['']);\r\n const [postalCodes, setPostalCodes] = useState(['']);\r\n const [countryNames, setCountryNames] = useState(['']);\r\n\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const minIdentitySize = 9;\r\n const maxIdentitySize = 10;\r\n const formLabels = resource.eventTaxDeductionForm[`${localeCode}`];\r\n const namesCount = formScheme.find(form => form.field_name === 'name')!.field_number!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (count: number, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(1);\r\n }\r\n\r\n valueArray[`${index}`] = count;\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n };\r\n\r\n const _setEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n for (let i = 0; i < event.length; ++i) {\r\n inputEventDates += event[`${i}`].label + (i != event.length - 1 ? ';' : '');\r\n inputEventIDs += event[`${i}`].value + (i != event.length - 1 ? ';' : '');\r\n }\r\n\r\n const eventNamesArray = eventNames.slice();\r\n const eventIDsArray = eventIDs.slice();\r\n\r\n while (typeof eventNamesArray[`${index}`] === 'undefined') {\r\n eventNamesArray.push('');\r\n }\r\n\r\n while (typeof eventIDsArray[`${index}`] === 'undefined') {\r\n eventIDsArray.push('');\r\n }\r\n\r\n eventNamesArray[`${index}`] = inputEventDates;\r\n eventIDsArray[`${index}`] = inputEventIDs;\r\n\r\n setEventNames(eventNamesArray);\r\n setEventIDs(eventIDsArray);\r\n\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n\r\n _setMultipler(event.length, index);\r\n\r\n _validateForms(eventNamesArray, eventIDsArray, names, taxDeductions, nrics);\r\n };\r\n\r\n const _formatNameInput = (event: any, index: number, nameIndex: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleNames = names[`${index}`];\r\n\r\n if (!inputMultipleNames.includes(';')) {\r\n inputMultipleNames += ';'.repeat(namesCount - 1);\r\n }\r\n\r\n const newValues = inputMultipleNames.split(';');\r\n\r\n newValues[`${nameIndex}`] = inputName;\r\n inputName = newValues.join(';');\r\n\r\n _setNames(inputName, index);\r\n };\r\n\r\n const _setNames = (name: string, index: number) => {\r\n const valueArray = names.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setNames(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _validateForms(eventNames, eventIDs, valueArray, taxDeductions, nrics);\r\n };\r\n\r\n const _setTaxDeduction = (value: boolean, index: number) => {\r\n const valueArray = taxDeductions.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(false);\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setTaxDeductions(valueArray);\r\n\r\n callbackHasTaxDeduction(valueArray);\r\n\r\n // Clear NRIC/ FIN/ UEN and address fields if value is false.\r\n if (!value) {\r\n _resetFields(index);\r\n }\r\n\r\n _validateForms(eventNames, eventIDs, names, valueArray, nrics);\r\n };\r\n\r\n const _setNric = (value: string, index: number) => {\r\n const valueArray = nrics.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value.trim();\r\n\r\n setNRICs(valueArray);\r\n\r\n callbackNRIC(valueArray);\r\n\r\n const result = _validateIdentity(value);\r\n\r\n if ((value.length === minIdentitySize || value.length === maxIdentitySize) && !result) {\r\n toast.warning(resource.invalidNricFinUenMsg[`${localeCode}`]);\r\n }\r\n\r\n _validateForms(eventNames, eventIDs, names, taxDeductions, valueArray);\r\n };\r\n\r\n const _setPhoneNumbers = (value: string, index: number) => {\r\n const valueArray = phoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setPhoneNumbers(valueArray);\r\n\r\n callbackPhoneNumber(valueArray);\r\n };\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingNames.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value.trim();\r\n\r\n setBuildingNames(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n };\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value.trim();\r\n\r\n setUnitNumbers(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n };\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCodes.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if(value.length<=6){\r\n valueArray[`${index}`] = value.trim();\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n setPostalCodes(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n };\r\n\r\n const _setCountryName = (event: any, index: number) => {\r\n const valueArray = countryNames.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setCountryNames(valueArray);\r\n\r\n callbackCountry(valueArray);\r\n };\r\n\r\n const _resetFields = (index: number) => {\r\n const nricsArray = nrics.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const buildingNamesArray = buildingNames.slice();\r\n const unitNumbersArray = unitNumbers.slice();\r\n const postalCodesArray = postalCodes.slice();\r\n const countryNamesArray = countryNames.slice();\r\n\r\n nricsArray[`${index}`] = '';\r\n phoneNumbersArray[`${index}`] = '';\r\n buildingNamesArray[`${index}`] = '';\r\n unitNumbersArray[`${index}`] = '';\r\n postalCodesArray[`${index}`] = '';\r\n countryNamesArray[`${index}`] = '';\r\n\r\n setNRICs(nricsArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setCountryNames(countryNamesArray);\r\n\r\n callbackNRIC(nricsArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackCountry(countryNamesArray);\r\n };\r\n\r\n const _displayEventDates = (index: number): { value: string, label: string }[] => {\r\n const displayValue: { value: string, label: string }[] = [];\r\n\r\n if (eventNames.length > 0) {\r\n const selectValueArray = eventNames.slice();\r\n const eventIDArray = eventIDs.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n if (selectValueArray[`${index}`] !== '') {\r\n const eventDates = selectValueArray[`${index}`].split(';');\r\n const eventIds = eventIDArray[`${index}`].split(';');\r\n\r\n for (let i = 0; i < eventDates.length; ++i) {\r\n displayValue.push({ value: eventIds[`${i}`], label: eventDates[`${i}`] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return displayValue;\r\n };\r\n\r\n const _displayNames = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return '';\r\n };\r\n\r\n const _checkTaxDeductions = (taxDeductionsArray: boolean[], nricsArray: string[]): boolean => {\r\n let result = taxDeductionsArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < taxDeductionsArray.length; ++i) {\r\n if (taxDeductionsArray[`${i}`]) {\r\n result = nricsArray[`${i}`] === '' ? false : _validateIdentity(nricsArray[`${i}`]);\r\n }\r\n\r\n if (!result) {\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n const _checkStringArray = (valueArray: string[]): boolean => {\r\n let result = valueArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n result = false; break;\r\n }\r\n }\r\n\r\n return result;\r\n };\r\n\r\n const _validateIdentity = (value: string): boolean => {\r\n return value.length === minIdentitySize || value.length === maxIdentitySize ? (_validateNricFin(value) ? true : _validateUen(value)) : false;\r\n };\r\n\r\n const _validateNricFin = (value: string): boolean => {\r\n // Validation rules.\r\n const nricRegex = /(\\D)(\\d{7})(\\D)/;\r\n const nricTypeRegex = /S|T|F|G/;\r\n const weightArr = [2, 7, 6, 5, 4, 3, 2];\r\n const nricLetterST = ['J', 'Z', 'I', 'H', 'G', 'F', 'E', 'D', 'C', 'B', 'A'];\r\n const nricLetterFG = ['X', 'W', 'U', 'T', 'R', 'Q', 'P', 'N', 'M', 'L', 'K'];\r\n\r\n // Set nric to all uppercase to remove case sensitivity.\r\n const nric = value.toUpperCase();\r\n\r\n // Return false if it fails basic validation.\r\n if (!nricRegex.exec(nric)) {\r\n return false;\r\n }\r\n\r\n // Get nric type.\r\n const nricArr = nric.match(nricRegex);\r\n\r\n if (nricArr) {\r\n const nricType = nricArr[1];\r\n\r\n // Return false if it fails basic validation.\r\n if (!nricTypeRegex.exec(nricType)) {\r\n return false;\r\n }\r\n\r\n // Multiply each digit in the nric number by it's weight in order.\r\n const nricDigitsArr = nricArr[2].split('');\r\n\r\n let total = 0;\r\n\r\n for (let i = 0; i < nricDigitsArr.length; ++i) {\r\n total += parseInt(nricDigitsArr[`${i}`]) * weightArr[`${i}`];\r\n }\r\n\r\n // If the nric type is T or G, add 4 to the total.\r\n if (['T', 'G'].indexOf(nricType) >= 0) {\r\n total += 4;\r\n }\r\n\r\n const letterIndex = total % 11;\r\n const nricLetter = nricArr[3];\r\n\r\n // Check last letter of nric for Singaporeans: nricLetterST.\r\n // Check last letter of nric for foreigners : nricLetterFG.\r\n const result = ['S', 'T'].indexOf(nricType) >= 0 ? nricLetterST[`${letterIndex}`] === nricLetter : nricLetterFG[`${letterIndex}`] === nricLetter;\r\n\r\n return result;\r\n } \r\n\r\n return false;\r\n };\r\n\r\n const _validateUen = (value: string): boolean => {\r\n const checkAlphabet = /^[a-zA-Z]+$/;\r\n const entityTypeIndicator = [\r\n 'LP', 'LL', 'FC', 'PF', 'RF', 'MQ', 'MM', 'NB', 'CC', 'CS', 'MB', 'FM', 'GS', 'GA',\r\n 'GB', 'DP', 'CP', 'NR', 'CM', 'CD', 'MD', 'HS', 'VH', 'CH', 'MH', 'CL', 'XL', 'CX',\r\n 'RP', 'TU', 'TC', 'FB', 'FN', 'PA', 'PB', 'SS', 'MC', 'SM'\r\n ];\r\n\r\n const uen = value.toUpperCase();\r\n \r\n const uenStrArray = uen.split('');\r\n\r\n // Businesses registered with ACRA.\r\n if (uenStrArray.length === minIdentitySize) {\r\n // Check that last character is a letter.\r\n if (!checkAlphabet.test(uenStrArray[`${uenStrArray.length - 1}`])) { \r\n return false;\r\n }\r\n\r\n for (let i = 0; i < uenStrArray.length - 1; ++i) {\r\n // Check that first 8 letters are all numbers.\r\n if (checkAlphabet.test(uenStrArray[`${i}`])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n } else if (uenStrArray.length === maxIdentitySize) {\r\n // Check that last character is a letter.\r\n if (!checkAlphabet.test(uenStrArray[uenStrArray.length - 1])) {\r\n return false;\r\n }\r\n\r\n // Local companies registered with ACRA: if.\r\n // All other entities which will be issued new UEN: else.\r\n if (!checkAlphabet.test(uenStrArray[0]) && !checkAlphabet.test(uenStrArray[1]) && !checkAlphabet.test(uenStrArray[2]) && !checkAlphabet.test(uenStrArray[3])) {\r\n // Check that 5th to 9th letters are all numbers.\r\n return !checkAlphabet.test(uenStrArray[4]) && !checkAlphabet.test(uenStrArray[5]) && !checkAlphabet.test(uenStrArray[6]) && !checkAlphabet.test(uenStrArray[7]) && !checkAlphabet.test(uenStrArray[8]);\r\n } else {\r\n // Check that 1st letter is either T or S or R.\r\n if (uenStrArray[0] !== 'T' && uenStrArray[0] !== 'S' && uenStrArray[0] !== 'R') {\r\n return false;\r\n }\r\n\r\n // Check that 2nd and 3rd letters are numbers only.\r\n if (checkAlphabet.test(uenStrArray[1]) || checkAlphabet.test(uenStrArray[2])) {\r\n return false;\r\n }\r\n\r\n // Check that 4th letter is an alphabet.\r\n if (!checkAlphabet.test(uenStrArray[3])) {\r\n return false;\r\n }\r\n\r\n // Check entity-type indicator.\r\n const entityType = uenStrArray[3] + uenStrArray[4];\r\n\r\n let entityTypeMatch = false;\r\n\r\n for (let i = 0; i < entityTypeIndicator.length; ++i) {\r\n if (entityTypeIndicator[`${i}`] === entityType) {\r\n entityTypeMatch = true;\r\n }\r\n }\r\n\r\n if (!entityTypeMatch) {\r\n return false;\r\n }\r\n\r\n // Check that 6th to 9th letters are numbers only.\r\n if (checkAlphabet.test(uenStrArray[5]) || checkAlphabet.test(uenStrArray[6]) || checkAlphabet.test(uenStrArray[7]) || checkAlphabet.test(uenStrArray[8])) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const _validateForms = (eventNamesArray: string[], eventIDsArray: string[], namesArray: string[], taxDeductionsArray: boolean[], nricsArray: string[]) => {\r\n const hasNames = _checkStringArray(namesArray);\r\n\r\n const result = hasNames && _checkStringArray(eventNamesArray) && _checkStringArray(eventIDsArray) && _checkTaxDeductions(taxDeductionsArray, nricsArray);\r\n\r\n callbackEnableSaveDraft(hasNames);\r\n\r\n callbackFormsValidation(result);\r\n };\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const eventNamesArray = eventNames.slice();\r\n const eventIDsArray = eventIDs.slice();\r\n const multipliersArray = multipliers.slice();\r\n const namesArray = names.slice();\r\n const taxDeductionsArray = taxDeductions.slice();\r\n const nricsArray = nrics.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const buildingNamesArray = buildingNames.slice();\r\n const unitNumbersArray = unitNumbers.slice();\r\n const postalCodesArray = postalCodes.slice();\r\n const countryNamesArray = countryNames.slice();\r\n\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n multipliersArray.push(1);\r\n namesArray.push('');\r\n taxDeductionsArray.push(false);\r\n nricsArray.push('');\r\n phoneNumbersArray.push('');\r\n buildingNamesArray.push('');\r\n unitNumbersArray.push('');\r\n postalCodesArray.push('');\r\n countryNamesArray.push('');\r\n\r\n setEventNames(eventNamesArray);\r\n setEventIDs(eventIDsArray);\r\n setMultiplers(multipliersArray);\r\n setNames(namesArray);\r\n setTaxDeductions(taxDeductionsArray);\r\n setNRICs(nricsArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setCountryNames(countryNamesArray);\r\n\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n callbackMultiplier(multipliersArray);\r\n callbackName(namesArray);\r\n callbackHasTaxDeduction(taxDeductionsArray);\r\n callbackNRIC(nricsArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackCountry(countryNamesArray);\r\n\r\n _validateForms(eventNamesArray, eventIDsArray, namesArray, taxDeductionsArray, nricsArray);\r\n };\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n\r\n formItems.splice(index, 1);\r\n\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n };\r\n\r\n const _updateStateData = (index: number) => {\r\n const multipliersArray = multipliers.slice();\r\n const eventNamesArray = eventNames.slice();\r\n const eventIDsArray = eventIDs.slice();\r\n const namesArray = names.slice();\r\n const taxDeductionsArray = taxDeductions.slice(); \r\n const nricsArray = nrics.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const buildingNamesArray = buildingNames.slice();\r\n const unitNumbersArray = unitNumbers.slice();\r\n const postalCodesArray = postalCodes.slice();\r\n const countryNamesArray = countryNames.slice();\r\n\r\n if (typeof multipliersArray[`${index}`] !== 'undefined') {\r\n if (multipliersArray.length > 1) {\r\n multipliersArray.splice(index, 1);\r\n } else {\r\n multipliersArray[0] = 1;\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n }\r\n\r\n if (typeof eventNamesArray[`${index}`] !== 'undefined') {\r\n if (eventNamesArray.length > 1) {\r\n eventNamesArray.splice(index, 1);\r\n } else {\r\n eventNamesArray[0] = '';\r\n }\r\n\r\n setEventNames(eventNamesArray);\r\n\r\n callbackEvent(eventNamesArray);\r\n }\r\n\r\n if (typeof eventIDsArray[`${index}`] !== 'undefined') {\r\n if (eventIDsArray.length > 1) {\r\n eventIDsArray.splice(index, 1);\r\n } else {\r\n eventIDsArray[0] = '';\r\n }\r\n\r\n setEventIDs(eventIDsArray);\r\n\r\n callbackEventID(eventIDsArray);\r\n }\r\n\r\n if (typeof namesArray[`${index}`] !== 'undefined') {\r\n if (namesArray.length > 1) {\r\n namesArray.splice(index, 1);\r\n } else {\r\n namesArray[0] = '';\r\n }\r\n\r\n setNames(namesArray);\r\n\r\n callbackName(namesArray);\r\n }\r\n\r\n if (typeof taxDeductionsArray[`${index}`] !== 'undefined') {\r\n if (taxDeductionsArray.length > 1) {\r\n taxDeductionsArray.splice(index, 1);\r\n } else {\r\n taxDeductionsArray[0] = false;\r\n\r\n const checkbox = document.getElementById('tax_0') as HTMLInputElement | null; \r\n\r\n if (checkbox) {\r\n checkbox.checked = false;\r\n }\r\n }\r\n\r\n setTaxDeductions(taxDeductionsArray);\r\n\r\n callbackHasTaxDeduction(taxDeductionsArray);\r\n }\r\n\r\n if (typeof nricsArray[`${index}`] !== 'undefined') {\r\n if (nricsArray.length > 1) {\r\n nricsArray.splice(index, 1);\r\n } else {\r\n nricsArray[0] = '';\r\n }\r\n\r\n setNRICs(nricsArray);\r\n\r\n callbackNRIC(nricsArray);\r\n }\r\n\r\n if (typeof phoneNumbersArray[`${index}`] !== 'undefined') {\r\n if (phoneNumbersArray.length > 1) {\r\n phoneNumbersArray.splice(index, 1);\r\n } else {\r\n phoneNumbersArray[0] = '';\r\n }\r\n\r\n setPhoneNumbers(phoneNumbersArray);\r\n\r\n callbackPhoneNumber(phoneNumbersArray);\r\n }\r\n\r\n if (typeof buildingNamesArray[`${index}`] !== 'undefined') {\r\n if (buildingNamesArray.length > 1) {\r\n buildingNamesArray.splice(index, 1);\r\n } else {\r\n buildingNamesArray[0] = '';\r\n }\r\n\r\n setBuildingNames(buildingNamesArray);\r\n }\r\n\r\n if (typeof unitNumbersArray[`${index}`] !== 'undefined') {\r\n if (unitNumbersArray.length > 1) {\r\n unitNumbersArray.splice(index, 1);\r\n } else {\r\n unitNumbersArray[0] = '';\r\n }\r\n\r\n setUnitNumbers(unitNumbersArray);\r\n\r\n callbackUnitNumber(unitNumbersArray);\r\n }\r\n\r\n if (typeof postalCodesArray[`${index}`] !== 'undefined') {\r\n if (postalCodesArray.length > 1) {\r\n postalCodesArray.splice(index, 1);\r\n } else {\r\n postalCodesArray[0] = '';\r\n }\r\n\r\n setPostalCodes(postalCodesArray);\r\n\r\n callbackPostalCode(postalCodesArray);\r\n }\r\n\r\n if (typeof countryNamesArray[`${index}`] !== 'undefined') {\r\n if (countryNamesArray.length > 1) {\r\n countryNamesArray.splice(index, 1);\r\n } else {\r\n countryNamesArray[0] = '';\r\n }\r\n\r\n setCountryNames(countryNamesArray);\r\n\r\n callbackCountry(countryNamesArray);\r\n }\r\n\r\n _validateForms(eventNamesArray, eventIDsArray, namesArray, taxDeductionsArray, nricsArray);\r\n };\r\n\r\n useEffect(() => {\r\n const multipliersArray: number[] = [];\r\n const eventNamesArray: string[] = [];\r\n const eventIDsArray: string[] = [];\r\n const namesArray: string[] = [];\r\n const taxDeductionsArray: boolean[] = [];\r\n const nricsArray: string[] = [];\r\n const phoneNumbersArray: string[] = [];\r\n const buildingNamesArray: string[] = [];\r\n const unitNumbersArray: string[] = [];\r\n const postalCodesArray: string[] = [];\r\n const countriesArray: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const hasTax = formItems[`${i}`]['hasTaxDeduction'] ? formItems[`${i}`]['hasTaxDeduction'] : false;\r\n\r\n const checkbox = document.getElementById('tax_' + i) as HTMLInputElement | null; \r\n\r\n if (checkbox) {\r\n checkbox.checked = hasTax;\r\n }\r\n\r\n const names: string[] = formItems[`${i}`][`${'names'}`];\r\n\r\n let name = '';\r\n\r\n names.forEach((item, index) => name += index != 0 && index < namesCount ? ';' + item : item);\r\n\r\n const eventName: string = formItems[`${i}`]['eventName'];\r\n\r\n multipliersArray.push(eventName.split(';').length);\r\n eventNamesArray.push(eventName);\r\n eventIDsArray.push(formItems[`${i}`]['eventID']);\r\n namesArray.push(name);\r\n taxDeductionsArray.push(hasTax);\r\n nricsArray.push(formItems[`${i}`]['nric'] ? formItems[`${i}`]['nric'] : '');\r\n phoneNumbersArray.push(formItems[`${i}`]['phoneNumber']);\r\n buildingNamesArray.push(formItems[`${i}`]['buildingName']);\r\n unitNumbersArray.push(formItems[`${i}`]['unitNumber']);\r\n postalCodesArray.push(formItems[`${i}`]['postalCode']);\r\n countriesArray.push(formItems[`${i}`]['country']);\r\n }\r\n\r\n setNames(namesArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n\r\n callbackName(namesArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n } else {\r\n multipliersArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n namesArray.push('');\r\n taxDeductionsArray.push(false);\r\n nricsArray.push('');\r\n buildingNamesArray.push('');\r\n unitNumbersArray.push('');\r\n postalCodesArray.push('');\r\n countriesArray.push('');\r\n }\r\n\r\n setEventNames(eventNamesArray);\r\n setEventIDs(eventIDsArray);\r\n setMultiplers(multipliersArray);\r\n setTaxDeductions(taxDeductionsArray);\r\n setNRICs(nricsArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setCountryNames(countriesArray);\r\n\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n callbackMultiplier(multipliersArray);\r\n callbackHasTaxDeduction(taxDeductionsArray);\r\n callbackNRIC(nricsArray);\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackCountry(countriesArray);\r\n\r\n _validateForms(eventNamesArray, eventIDsArray, namesArray, taxDeductionsArray, nricsArray);\r\n }, [formItems]);\r\n\r\n const _buildEventDropdown = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.eventDate}

\r\n { return ({ value: event['id'], label: event['name'] }); })}\r\n onChange={event => _setEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _buildName = (idx: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(namesCount)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map(nameIndex => {\r\n return (\r\n
\r\n
\r\n

{namesCount > 1 ? (nameLabel + ' ' + (nameIndex + 1)) : nameLabel}

\r\n _formatNameInput(event, idx, nameIndex)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete='none'\r\n />\r\n
\r\n
\r\n );\r\n });\r\n };\r\n\r\n const _buildTaxDeductionField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.tax}

\r\n

{formLabels.taxPrompt}

\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _buildNRIC = (idx: number): JSX.Element => {\r\n const result = _validateIdentity(nrics[`${idx}`]);\r\n \r\n return (\r\n
\r\n
\r\n

{formLabels.nric}

\r\n
\r\n _setNric(event.target.value.toUpperCase(), idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n value={nrics[`${idx}`]}\r\n type='text'\r\n maxLength={10}\r\n autoComplete='none'\r\n />\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _buildPhone = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n

{formLabels.addressPhonePrompt}

\r\n
\r\n

{formLabels.addressPhone}

\r\n _setPhoneNumbers(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete='none'\r\n />\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _buildAddress = (idx: number): JSX.Element => {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n return (\r\n
\r\n

{formLabels.addressOptional}

\r\n

{formLabels.addressPrompt}

\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={buildingNames[`${idx}`]}\r\n type='text'\r\n autoComplete='none'\r\n />\r\n\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={unitNumbers[`${idx}`]}\r\n type='text'\r\n autoComplete='none'\r\n />\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete='none'\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n _setCountryName(event, idx)}\r\n className={'select'}\r\n isSearchable={true}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'event') {\r\n return (\r\n
\r\n {_buildEventDropdown(idx)}\r\n {_buildName(idx)}\r\n {_buildTaxDeductionField(idx)}\r\n {taxDeductions[`${idx}`] && _buildNRIC(idx)}\r\n {taxDeductions[`${idx}`] && _buildPhone(idx)}\r\n {taxDeductions[`${idx}`] && _buildAddress(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${multipliers[`${idx}`] * selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default EventTaxDeductionForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IEventDetails, IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\nimport Select from 'react-select'\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackPrice?: any;\r\n callbackName?: any;\r\n callbackEmailId?:any;\r\n callbackContactNumber?:any;\r\n callbackEventID?:any;\r\n callbackEvent?: any;\r\n callbackNamesEntered?: any;\r\n callbackChineseNamesEntered?: any;\r\n callbackPricesEntered?: any;\r\n callbackMultiplier: any;\r\n callbackEventsSelected?: any;\r\n callbackPhoneNumber: any;\r\n callbackChineseName: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n userInfo: any;\r\n productEvents: any[];\r\n callbackPhoneNumbersEntered: any;\r\n allowMultipleRegistrations: boolean;\r\n makeChinesNameMandatory: boolean;\r\n}\r\n\r\nconst EventChineseNameForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackPrice, callbackName, callbackNamesEntered, callbackPricesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, userInfo,productEvents,callbackEventID,callbackEvent , callbackMultiplier, callbackEventsSelected, callbackPhoneNumber, callbackChineseName, callbackPhoneNumbersEntered,allowMultipleRegistrations,callbackChineseNamesEntered, makeChinesNameMandatory}) => {\r\n\r\n const [customPrice, setCustomPrice] = useState([0]);\r\n const [inputValue, setInputValue] = useState(['']);\r\n const [attendeeName, setAttendeeName] = useState(['']);\r\n const [coursesEventId, setCoursesEventId] = useState(['']);\r\n const [selectValue, setSelectValue] = useState(['']);\r\n const [phoneNumbers, setPhoneNumbers] = useState(['']);\r\n const [chineseName, setChineseName] = useState(['']);\r\n \r\n const [multipliers, setMultiplers] = useState([1]);\r\n const[showAddMoreButton, setShowAddMoreButton] = useState(false);\r\n const[remainingSlots, setRemainingSlots] = useState(0);\r\n\r\n \r\n\r\n\r\n const formLabels = resource.coursesForm[`${localeCode}`];\r\n\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm();\r\n\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setAttendeeNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n\r\n \r\n };\r\n\r\n const _setChineseNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setChineseNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n \r\n \r\n };\r\n\r\n\r\n // const coursesEventIDArray = coursesEventId.slice();\r\n\r\n // while (typeof coursesEventIDArray[`${index}`] === 'undefined') {\r\n // coursesEventIDArray.push('');\r\n // }\r\n\r\n // coursesEventIDArray[`${index}`] = eventId;\r\n\r\n // coursesEventIDArray[`${index}`].trim();\r\n\r\n // setCoursesEventId(coursesEventIDArray);\r\n\r\n \r\n\r\n // callbackEventID(coursesEventIDArray);\r\n // };\r\n\r\n const _setAttendeeNameArray = (name: string, index: number) => {\r\n const attendeeNameArray = attendeeName.slice();\r\n\r\n while (typeof attendeeNameArray[`${index}`] === 'undefined') {\r\n attendeeNameArray.push('');\r\n }\r\n\r\n attendeeNameArray[`${index}`] = name;\r\n\r\n attendeeNameArray[`${index}`].trim();\r\n\r\n setAttendeeName(attendeeNameArray);\r\n\r\n callbackName(attendeeNameArray);\r\n\r\n _checkNamesEntered(attendeeNameArray);\r\n };\r\n\r\n const _setPhoneNumber = (value: string, index: number) => {\r\n const valueArray = phoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setPhoneNumbers(valueArray);\r\n\r\n callbackPhoneNumber(valueArray);\r\n\r\n _checkPhoneNumberEntered(valueArray);\r\n }\r\n\r\n const _setChineseNameArray = (name: string, index: number) => {\r\n const chineseNameArray = chineseName.slice();\r\n\r\n while (typeof chineseNameArray[`${index}`] === 'undefined') {\r\n chineseNameArray.push('');\r\n }\r\n\r\n chineseNameArray[`${index}`] = name;\r\n\r\n chineseNameArray[`${index}`].trim();\r\n\r\n setChineseName(chineseNameArray);\r\n\r\n callbackChineseName(chineseNameArray);\r\n\r\n _checkChineseNamesEntered(chineseNameArray);\r\n\r\n };\r\n\r\n \r\n //const isNumeric = (num: any): boolean => { return !isNaN(num); };\r\n\r\n const _checkNamesEntered = (attendeeNameArray: string[]) => {\r\n let namesEntered = attendeeNameArray.length > 0? true: false;\r\n\r\n for (let i = 0; i < attendeeNameArray.length; i++) {\r\n if (attendeeNameArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkChineseNamesEntered = (chineseNameArray: string[]) => {\r\n let chineseNamesEntered = chineseNameArray.length > 0? true: false;\r\n\r\n for (let i = 0; i < chineseNameArray.length; i++) {\r\n if (chineseNameArray[`${i}`].trim() === '') {\r\n chineseNamesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackChineseNamesEntered(chineseNamesEntered);\r\n }\r\n\r\n const _checkPhoneNumberEntered = (phoneNumbersArray: string[]) => {\r\n let phoneNumbersEntered = phoneNumbersArray.length > 0? true: false;\r\n\r\n for (let i = 0; i < phoneNumbersArray.length; i++) {\r\n if (phoneNumbersArray[`${i}`].trim() === '') {\r\n phoneNumbersEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPhoneNumbersEntered(phoneNumbersEntered);\r\n }\r\n\r\n const _checkPricesEntered = (customPriceArray: number[]) => {\r\n let pricesEntered = true;\r\n\r\n for (let i = 0; i < customPriceArray.length; i++) {\r\n if (customPriceArray[`${i}`] == 0) {\r\n pricesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPricesEntered(pricesEntered);\r\n }\r\n\r\n\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const attendeeNameArray = attendeeName.slice();\r\n const coursesEventArray = selectValue.slice();\r\n const coursesEventIDArray = coursesEventId.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const chineseNamesArray = chineseName.slice();\r\n\r\n \r\n setShowAddMoreButton(false);\r\n setRemainingSlots(0);\r\n setAttendeeName(attendeeNameArray);\r\n setSelectValue(coursesEventArray);\r\n setCoursesEventId(coursesEventIDArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setChineseName(chineseNamesArray);\r\n\r\n callbackEvent(coursesEventArray);\r\n callbackEventID(coursesEventIDArray);\r\n callbackName(attendeeNameArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackChineseName(chineseNamesArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackEventsSelected(false);\r\n callbackChineseNamesEntered(false);\r\n\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n const customPriceArray = customPrice.slice();\r\n const inputValueArray = inputValue.slice();\r\n const attendeeNameArray = attendeeName.slice();\r\n const multiplierArray = multipliers.slice();\r\n const coursesEventArray = selectValue.slice();\r\n const coursesEventIDArray = coursesEventId.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const chineseNamesArray = chineseName.slice();\r\n \r\n \r\n if (typeof customPriceArray[`${index}`] !== 'undefined') {\r\n if (customPriceArray.length > 1) {\r\n customPriceArray.splice(index, 1);\r\n } else {\r\n customPriceArray[0] = parseInt(element!.field_options![0]);\r\n }\r\n }\r\n\r\n if (typeof inputValueArray[`${index}`] !== 'undefined') {\r\n if (inputValueArray.length > 1) {\r\n inputValueArray.splice(index, 1);\r\n } else {\r\n inputValueArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof attendeeNameArray[`${index}`] !== 'undefined') {\r\n if (attendeeNameArray.length > 1) {\r\n attendeeNameArray.splice(index, 1);\r\n } else {\r\n attendeeNameArray[0] = '';\r\n }\r\n }\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = 1;\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof coursesEventArray[`${index}`] !== 'undefined') {\r\n if (coursesEventArray.length > 1) {\r\n coursesEventArray.splice(index, 1);\r\n } else {\r\n coursesEventArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof coursesEventIDArray[`${index}`] !== 'undefined') {\r\n if (coursesEventIDArray.length > 1) {\r\n coursesEventIDArray.splice(index, 1);\r\n } else {\r\n coursesEventIDArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof phoneNumbersArray[`${index}`] !== 'undefined') {\r\n if (phoneNumbersArray.length > 1) {\r\n phoneNumbersArray.splice(index, 1);\r\n } else {\r\n phoneNumbersArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof chineseNamesArray[`${index}`] !== 'undefined') {\r\n if (chineseNamesArray.length > 1) {\r\n chineseNamesArray.splice(index, 1);\r\n } else {\r\n chineseNamesArray[0] = '';\r\n }\r\n } \r\n \r\n \r\n\r\n \r\n\r\n setCustomPrice(customPriceArray);\r\n setInputValue(inputValueArray);\r\n setAttendeeName(attendeeNameArray);\r\n setSelectValue(coursesEventArray);\r\n setCoursesEventId(coursesEventIDArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setChineseName(chineseNamesArray);\r\n\r\n\r\n callbackEvent(coursesEventArray);\r\n callbackEventID(coursesEventIDArray);\r\n callbackName(attendeeNameArray);\r\n callbackPrice(customPriceArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackChineseName(chineseNamesArray);\r\n\r\n _checkEventsEntered(coursesEventArray);\r\n _checkNamesEntered(attendeeNameArray);\r\n _checkPricesEntered(customPriceArray);\r\n _checkPhoneNumberEntered(phoneNumbersArray);\r\n _checkChineseNamesEntered(chineseNamesArray);\r\n\r\n }\r\n\r\n useEffect(() => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n var minDonationvalue = Number(element?.field_options![0]);\r\n var minDonationString = String(element?.field_options![0]);\r\n\r\n const existingCustomPriceAmount: number[] = [];\r\n const existingInputValue: string[] = [];\r\n const existingAttendeeName: string[] = [];\r\n const existingDonationAmount: string[] = [];\r\n const multipliersArray: number[] = [];\r\n const eventNamesArray: string[] = [];\r\n const eventIDsArray: string[] = [];\r\n const existingPhoneNumbersArray: string[] = [];\r\n const existingChineseNamesArray : string[]=[];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n var customPriceAmount: number = formItems[`${i}`]['customPriceAmount'];\r\n\r\n const eventName: string = formItems[`${i}`]['eventName'];\r\n\r\n multipliersArray.push(eventName.split(';').length);\r\n eventNamesArray.push(eventName);\r\n eventIDsArray.push(formItems[`${i}`]['eventID']);\r\n existingPhoneNumbersArray.push(formItems[`${i}`]['phoneNumber']);\r\n existingChineseNamesArray.push(formItems[`${i}`]['chineseName']);\r\n\r\n \r\n existingAttendeeName.push(formItems[`${i}`]['names'][0]);\r\n \r\n existingCustomPriceAmount.push(customPriceAmount);\r\n }\r\n \r\n\r\n setAttendeeName(existingAttendeeName);\r\n setPhoneNumbers(existingPhoneNumbersArray);\r\n setChineseName(existingChineseNamesArray);\r\n \r\n\r\n callbackName(existingAttendeeName);\r\n \r\n\r\n _checkNamesEntered(existingAttendeeName);\r\n _checkChineseNamesEntered(existingChineseNamesArray);\r\n _checkPhoneNumberEntered(existingPhoneNumbersArray);\r\n } else {\r\n existingDonationAmount.push(minDonationString);\r\n existingCustomPriceAmount.push(minDonationvalue);\r\n existingInputValue.push('');\r\n multipliersArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n }\r\n\r\n //setDonationAmount(existingDonationAmount);\r\n if(userValid && existingAttendeeName.length <=0)\r\n {\r\n \r\n existingAttendeeName.push(userInfo.firstname+' '+userInfo.lastname);\r\n existingChineseNamesArray.push(userInfo.gmb_fullnamechinese);\r\n existingPhoneNumbersArray.push(userInfo.mobilephone)\r\n }\r\n\r\n setAttendeeName(existingAttendeeName);\r\n setCustomPrice(existingCustomPriceAmount);\r\n setInputValue(existingInputValue);\r\n setMultiplers(multipliersArray);\r\n setSelectValue(eventNamesArray);\r\n setCoursesEventId(eventIDsArray);\r\n setPhoneNumbers(existingPhoneNumbersArray);\r\n setChineseName(existingChineseNamesArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n\r\n _checkEventsEntered(eventNamesArray);\r\n\r\n callbackPrice(existingCustomPriceAmount);\r\n callbackName(existingAttendeeName);\r\n callbackPhoneNumber(existingPhoneNumbersArray);\r\n callbackChineseName(existingChineseNamesArray);\r\n\r\n _checkPricesEntered(existingCustomPriceAmount);\r\n _checkNamesEntered(existingAttendeeName);\r\n _checkChineseNamesEntered(existingChineseNamesArray);\r\n _checkPhoneNumberEntered(existingPhoneNumbersArray);\r\n \r\n }, [formItems])\r\n\r\n const _displayEventDates = (index: number): { value: string, label: string }[] => {\r\n const displayValue: { value: string, label: string }[] = [];\r\n\r\n if (selectValue.length > 0) {\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n if (selectValueArray[`${index}`] !== '') {\r\n const eventDates = selectValueArray[`${index}`].split(';');\r\n const eventIds = eventIDArray[`${index}`].split(';');\r\n\r\n for (let i = 0; i < eventDates.length; ++i) {\r\n displayValue.push({ value: eventIds[`${i}`], label: eventDates[`${i}`] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return displayValue;\r\n }\r\n\r\n const _checkEventsEntered = (cousesEventArray: string[]) => {\r\n let eventsSelected = cousesEventArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < cousesEventArray.length; i++) {\r\n if (cousesEventArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n eventsSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackEventsSelected(eventsSelected);\r\n }\r\n\r\n const _setMultipler = (count: number, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(1);\r\n }\r\n\r\n valueArray[`${index}`] = count;\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setMultipleEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n \r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n \r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(event.length, index);\r\n\r\n _checkEventsEntered(selectValueArray);\r\n }\r\n\r\n\r\n const _buildEventDropdown = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.coursesEvents}

\r\n { return ({ value: event['id'], label: event['name'] }); })}\r\n onChange={event => _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.attendeeName}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildChineseName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{makeChinesNameMandatory?formLabels.chineseName:formLabels.chineseNameNotMandatory}

\r\n _setChineseNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildContactNumber = ( idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.phoneNumber}

\r\n _setPhoneNumber(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'attendeeName') {\r\n return (\r\n
\r\n {remainingSlots !== 0 &&

{formLabels.availableSlots}{remainingSlots}

}\r\n {_buildEventDropdown(idx)}\r\n {_buildName(idx)}\r\n {_buildChineseName(idx)}\r\n {_buildContactNumber(idx)}\r\n\r\n {/* {_buildAmountField(element, idx)} */}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

\r\n ${selectedProduct.result?.Price! === 0 ? typeof customPrice[`${idx}`] !== 'undefined' ? customPrice[`${idx}`] : '0' : selectedProduct.result?.Price!}\r\n

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations && showAddMoreButton &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
;\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations && showAddMoreButton &&\r\n
\r\n \r\n
} \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default EventChineseNameForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IEventDetails, IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\nimport Select from 'react-select'\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackPrice?: any;\r\n callbackName?: any;\r\n callbackEmailId?:any;\r\n callbackContactNumber?:any;\r\n callbackEventID?:any;\r\n callbackEvent?: any;\r\n callbackNamesEntered?: any;\r\n callbackPricesEntered?: any;\r\n callbackMultiplier: any;\r\n callbackEventsSelected?: any;\r\n callbackPhoneNumber: any;\r\n callbackNextOfKinName: any;\r\n callbackNextOfKinPhoneNumber: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n userInfo: any;\r\n productEvents: any[];\r\n callbackPhoneNumbersEntered: any;\r\n allowMultipleRegistrations: boolean;\r\n insuranceAmount: string;\r\n insuranceFeeLabel: string;\r\n callbackInsuranceIncluded: any;\r\n callbackInsuranceIncludedNum: any;\r\n}\r\n\r\nconst EventNextOfKinNameForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackPrice, callbackName, callbackNamesEntered, callbackPricesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, userInfo,productEvents,callbackEventID,callbackEvent , callbackMultiplier, callbackEventsSelected, callbackPhoneNumber, callbackNextOfKinName, callbackNextOfKinPhoneNumber, callbackPhoneNumbersEntered, allowMultipleRegistrations, insuranceAmount, insuranceFeeLabel, callbackInsuranceIncluded, callbackInsuranceIncludedNum}) => {\r\n\r\n var insuranceAmountValue = Number(insuranceAmount);\r\n const [customPrice, setCustomPrice] = useState([insuranceAmountValue]);\r\n const [inputValue, setInputValue] = useState(['']);\r\n const [attendeeName, setAttendeeName] = useState(['']);\r\n const [coursesEventId, setCoursesEventId] = useState(['']);\r\n const [selectValue, setSelectValue] = useState(['']);\r\n const [phoneNumbers, setPhoneNumbers] = useState(['']);\r\n const [nextOfKinName, setNextOfKinName] = useState(['']);\r\n const [nextOfKinPhoneNumbers, setNextOfKinPhoneNumbers] = useState(['']);\r\n \r\n const [multipliers, setMultiplers] = useState([1]);\r\n const[showAddMoreButton, setShowAddMoreButton] = useState(false);\r\n const[remainingSlots, setRemainingSlots] = useState(0);\r\n\r\n const [isInsuranceIncluded, setIsInsuranceIncluded] = useState([false]);\r\n const [isInsuranceIncludedNum, setIsInsuranceIncludedNum] = useState([0]);\r\n \r\n\r\n\r\n const formLabels = resource.eventsNextOfKinNameForm[`${localeCode}`];\r\n\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm();\r\n\r\n// const _onChangePriceValue = (event: any, index: number) => {\r\n// // _setRadioValueArray(event.target.value, index);\r\n\r\n// if (event.target.value === resource.otherLabel[`${localeCode}`]) {\r\n// _setInputValueArray('0', index);\r\n// _setCustomPriceArray(0, index);\r\n// } else {\r\n// _setCustomPriceArray(Number(event.target.value), index);\r\n// _setInputValueArray('', index);\r\n// }\r\n// };\r\n\r\n// const _setCustomPriceArray = (price: number, index: number) => {\r\n// const customPriceArray = customPrice.slice();\r\n\r\n// while (typeof customPriceArray[`${index}`] === 'undefined') {\r\n// customPriceArray.push(0);\r\n// }\r\n\r\n// customPriceArray[`${index}`] = price;\r\n\r\n// setCustomPrice(customPriceArray);\r\n\r\n// callbackPrice(customPriceArray);\r\n\r\n// _checkPricesEntered(customPriceArray);\r\n// };\r\n\r\n// const _setRadioValueArray = (value: string, index: number) => {\r\n// const donationValueArray = donationAmount.slice();\r\n\r\n// while (typeof donationValueArray[`${index}`] === 'undefined') {\r\n// donationValueArray.push('');\r\n// }\r\n\r\n// donationValueArray[`${index}`] = value;\r\n\r\n// setDonationAmount(donationValueArray);\r\n// };\r\n\r\n// const _setInputValue = (event: any, index: number) => {\r\n// if (isNumeric(event.target.value)) {\r\n// _setInputValueArray(event.target.value, index);\r\n// // _setRadioValueArray(resource.otherLabel[`${localeCode}`], index);\r\n// _setCustomPriceArray(Number(event.target.value), index);\r\n// }\r\n// };\r\n\r\n// const _setInputValueArray = (value: string, index: number) => {\r\n// const inputValueArray = inputValue.slice();\r\n\r\n// while (typeof inputValueArray[`${index}`] === 'undefined') {\r\n// inputValueArray.push('');\r\n// }\r\n\r\n// inputValueArray[`${index}`] = value;\r\n\r\n// inputValueArray[`${index}`].trim();\r\n\r\n// setInputValue(inputValueArray);\r\n// };\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setAttendeeNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n //let eventObj = productEvents[0];\r\n \r\n // _setEventIdArray(eventObj['id'], 0);\r\n \r\n };\r\n\r\n const _setNextOfKinNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setNextOfKinNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n //let eventObj = productEvents[0];\r\n \r\n // _setEventIdArray(eventObj['id'], 0);\r\n \r\n };\r\n\r\n\r\n // const _setEventIdArray = (eventId: string, index: number) => {\r\n // const coursesEventIDArray = coursesEventId.slice();\r\n\r\n // while (typeof coursesEventIDArray[`${index}`] === 'undefined') {\r\n // coursesEventIDArray.push('');\r\n // }\r\n\r\n // coursesEventIDArray[`${index}`] = eventId;\r\n\r\n // coursesEventIDArray[`${index}`].trim();\r\n\r\n // setCoursesEventId(coursesEventIDArray);\r\n\r\n \r\n\r\n // callbackEventID(coursesEventIDArray);\r\n // };\r\n\r\n const _setAttendeeNameArray = (name: string, index: number) => {\r\n const attendeeNameArray = attendeeName.slice();\r\n\r\n while (typeof attendeeNameArray[`${index}`] === 'undefined') {\r\n attendeeNameArray.push('');\r\n }\r\n\r\n attendeeNameArray[`${index}`] = name;\r\n\r\n attendeeNameArray[`${index}`].trim();\r\n\r\n setAttendeeName(attendeeNameArray);\r\n\r\n callbackName(attendeeNameArray);\r\n\r\n _checkNamesEntered(attendeeNameArray);\r\n };\r\n\r\n const _setPhoneNumber = (value: string, index: number) => {\r\n const valueArray = phoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setPhoneNumbers(valueArray);\r\n\r\n callbackPhoneNumber(valueArray);\r\n\r\n _checkPhoneNumberEntered(valueArray);\r\n }\r\n\r\n const _setNextOfKinNameArray = (name: string, index: number) => {\r\n const nextOfKinNameArray = nextOfKinName.slice();\r\n\r\n while (typeof nextOfKinNameArray[`${index}`] === 'undefined') {\r\n nextOfKinNameArray.push('');\r\n }\r\n\r\n nextOfKinNameArray[`${index}`] = name;\r\n\r\n nextOfKinNameArray[`${index}`].trim();\r\n\r\n setNextOfKinName(nextOfKinNameArray);\r\n\r\n callbackNextOfKinName(nextOfKinNameArray);\r\n\r\n };\r\n\r\n const _setNextOfKinPhoneNumbers = (value: string, index: number) => {\r\n const valueArray = nextOfKinPhoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setNextOfKinPhoneNumbers(valueArray);\r\n\r\n callbackNextOfKinPhoneNumber(valueArray);\r\n }\r\n\r\n \r\n //const isNumeric = (num: any): boolean => { return !isNaN(num); };\r\n\r\n const _checkNamesEntered = (attendeeNameArray: string[]) => {\r\n let namesEntered = attendeeNameArray.length > 0? true: false;\r\n\r\n for (let i = 0; i < attendeeNameArray.length; i++) {\r\n if (attendeeNameArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkPhoneNumberEntered = (phoneNumbersArray: string[]) => {\r\n let phoneNumbersEntered = phoneNumbersArray.length > 0? true: false;\r\n\r\n for (let i = 0; i < phoneNumbersArray.length; i++) {\r\n if (phoneNumbersArray[`${i}`].trim() === '') {\r\n phoneNumbersEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPhoneNumbersEntered(phoneNumbersEntered);\r\n }\r\n\r\n const _checkPricesEntered = (customPriceArray: number[]) => {\r\n let pricesEntered = true;\r\n\r\n for (let i = 0; i < customPriceArray.length; i++) {\r\n if (customPriceArray[`${i}`] == 0) {\r\n pricesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPricesEntered(pricesEntered);\r\n }\r\n\r\n\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const attendeeNameArray = attendeeName.slice();\r\n const coursesEventArray = selectValue.slice();\r\n const coursesEventIDArray = coursesEventId.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const nextOfKinNamesArray = nextOfKinName.slice();\r\n const nextOfKinPhoneNumbersArray = nextOfKinPhoneNumbers.slice();\r\n const customPriceArray = customPrice.slice();\r\n customPriceArray.push(selectedProduct.result?.Price!);\r\n \r\n setShowAddMoreButton(false);\r\n setRemainingSlots(0);\r\n setAttendeeName(attendeeNameArray);\r\n setSelectValue(coursesEventArray);\r\n setCoursesEventId(coursesEventIDArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setNextOfKinName(nextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(nextOfKinPhoneNumbersArray);\r\n setCustomPrice(customPriceArray);\r\n\r\n callbackEvent(coursesEventArray);\r\n callbackEventID(coursesEventIDArray);\r\n callbackName(attendeeNameArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackNextOfKinName(nextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(nextOfKinPhoneNumbersArray);\r\n callbackPrice(customPriceArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackEventsSelected(false);\r\n\r\n _checkPricesEntered(customPriceArray);\r\n\r\n if (productEvents.length === 1) {\r\n\r\n const event = productEvents[0];\r\n const eventObj = { value: event['id'], label: event['name'] }\r\n _setEventDates(eventObj, coursesEventArray.length);\r\n callbackEventsSelected(true);\r\n\r\n }\r\n\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const customPriceArray = customPrice.slice();\r\n const inputValueArray = inputValue.slice();\r\n const attendeeNameArray = attendeeName.slice();\r\n const multiplierArray = multipliers.slice();\r\n const coursesEventArray = selectValue.slice();\r\n const coursesEventIDArray = coursesEventId.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const nextOfKinNamesArray = nextOfKinName.slice();\r\n const nextOfKinPhoneNumbersArray = nextOfKinPhoneNumbers.slice();\r\n const isInsuranceIncludedArray = isInsuranceIncluded.slice();\r\n const isInsuranceIncludedNumArray = isInsuranceIncludedNum.slice();\r\n \r\n \r\n if (typeof customPriceArray[`${index}`] !== 'undefined') {\r\n if (customPriceArray.length > 1) {\r\n customPriceArray.splice(index, 1);\r\n } else {\r\n customPriceArray[0] = insuranceAmountValue;\r\n }\r\n }\r\n\r\n if (typeof inputValueArray[`${index}`] !== 'undefined') {\r\n if (inputValueArray.length > 1) {\r\n inputValueArray.splice(index, 1);\r\n } else {\r\n inputValueArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof attendeeNameArray[`${index}`] !== 'undefined') {\r\n if (attendeeNameArray.length > 1) {\r\n attendeeNameArray.splice(index, 1);\r\n } else {\r\n attendeeNameArray[0] = '';\r\n }\r\n }\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = 1;\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof coursesEventArray[`${index}`] !== 'undefined') {\r\n if (coursesEventArray.length > 1) {\r\n coursesEventArray.splice(index, 1);\r\n } else {\r\n coursesEventArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof coursesEventIDArray[`${index}`] !== 'undefined') {\r\n if (coursesEventIDArray.length > 1) {\r\n coursesEventIDArray.splice(index, 1);\r\n } else {\r\n coursesEventIDArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof phoneNumbersArray[`${index}`] !== 'undefined') {\r\n if (phoneNumbersArray.length > 1) {\r\n phoneNumbersArray.splice(index, 1);\r\n } else {\r\n phoneNumbersArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof nextOfKinNamesArray[`${index}`] !== 'undefined') {\r\n if (nextOfKinNamesArray.length > 1) {\r\n nextOfKinNamesArray.splice(index, 1);\r\n } else {\r\n nextOfKinNamesArray[0] = '';\r\n }\r\n } \r\n\r\n if (typeof nextOfKinPhoneNumbersArray[`${index}`] !== 'undefined') {\r\n if (nextOfKinPhoneNumbersArray.length > 1) {\r\n nextOfKinPhoneNumbersArray.splice(index, 1);\r\n } else {\r\n nextOfKinPhoneNumbersArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof isInsuranceIncludedArray[`${index}`] !== 'undefined') {\r\n if (isInsuranceIncludedArray.length > 1) {\r\n isInsuranceIncludedArray.splice(index, 1);\r\n } else {\r\n isInsuranceIncludedArray[0] = false;\r\n }\r\n }\r\n\r\n if (typeof isInsuranceIncludedNumArray[`${index}`] !== 'undefined') {\r\n if (isInsuranceIncludedNumArray.length > 1) {\r\n isInsuranceIncludedNumArray.splice(index, 1);\r\n } else {\r\n isInsuranceIncludedNumArray[0] = 0;\r\n }\r\n }\r\n\r\n setCustomPrice(customPriceArray);\r\n setInputValue(inputValueArray);\r\n setAttendeeName(attendeeNameArray);\r\n setSelectValue(coursesEventArray);\r\n setCoursesEventId(coursesEventIDArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setNextOfKinName(nextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(nextOfKinPhoneNumbersArray);\r\n setIsInsuranceIncluded(isInsuranceIncludedArray);\r\n setIsInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n\r\n\r\n callbackEvent(coursesEventArray);\r\n callbackEventID(coursesEventIDArray);\r\n callbackName(attendeeNameArray);\r\n callbackPrice(customPriceArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackNextOfKinName(nextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(nextOfKinPhoneNumbersArray);\r\n callbackInsuranceIncluded(isInsuranceIncludedArray);\r\n callbackInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n\r\n _checkEventsEntered(coursesEventArray);\r\n _checkNamesEntered(attendeeNameArray);\r\n _checkPricesEntered(customPriceArray);\r\n _checkPhoneNumberEntered(phoneNumbersArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingInputValue: string[] = [];\r\n const existingAttendeeName: string[] = [];\r\n const multipliersArray: number[] = [];\r\n const eventNamesArray: string[] = [];\r\n const eventIDsArray: string[] = [];\r\n const existingPhoneNumbersArray: string[] = [];\r\n const existingNextOfKinNamesArray : string[]=[];\r\n const existingNextOfKinPhoneNumbersArray : string[]=[];\r\n const customPriceArray: number[] = [];\r\n const insuranceIncludeArray: boolean[] = [];\r\n const isInsuranceIncludedNumArray: number[]=[];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const eventName: string = formItems[`${i}`]['eventName'];\r\n const hasInsurance = formItems[`${i}`]['isInsuranceIncluded'] ? formItems[`${i}`]['isInsuranceIncluded'] : 0;\r\n\r\n const checkbox = document.getElementById('insurance_' + i) as HTMLInputElement | null;\r\n\r\n if (checkbox) {\r\n if(hasInsurance === 0)\r\n {\r\n checkbox.checked = false;\r\n }\r\n else\r\n {\r\n checkbox.checked = true;\r\n }\r\n }\r\n\r\n if (hasInsurance === 0) {\r\n customPriceArray.push(selectedProduct.result?.Price!);\r\n }\r\n else {\r\n customPriceArray.push(selectedProduct.result?.Price! + insuranceAmountValue);\r\n }\r\n\r\n multipliersArray.push(eventName.split(';').length);\r\n eventNamesArray.push(eventName);\r\n eventIDsArray.push(formItems[`${i}`]['eventID']);\r\n existingPhoneNumbersArray.push(formItems[`${i}`]['phoneNumber']);\r\n existingNextOfKinNamesArray.push(formItems[`${i}`]['nameNextKin']);\r\n existingNextOfKinPhoneNumbersArray.push(formItems[`${i}`]['contactNumberNextKin']);\r\n insuranceIncludeArray.push(hasInsurance === 0 ? false: true);\r\n isInsuranceIncludedNumArray.push(hasInsurance);\r\n existingAttendeeName.push(formItems[`${i}`]['names'][0]);\r\n }\r\n\r\n if (productEvents.length === 1) {\r\n const event = productEvents[0];\r\n const eventObj = { value: event['id'], label: event['name'] }\r\n\r\n _setEventDatesOnLoad(eventObj, formItems.length);\r\n callbackEventsSelected(true);\r\n\r\n }\r\n \r\n\r\n setAttendeeName(existingAttendeeName);\r\n setPhoneNumbers(existingPhoneNumbersArray);\r\n setNextOfKinName(existingNextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(existingNextOfKinPhoneNumbersArray);\r\n \r\n\r\n callbackName(existingAttendeeName);\r\n callbackPhoneNumber(existingPhoneNumbersArray);\r\n \r\n\r\n _checkNamesEntered(existingAttendeeName);\r\n _checkPhoneNumberEntered(existingPhoneNumbersArray);\r\n } else {\r\n existingInputValue.push('');\r\n multipliersArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n existingNextOfKinNamesArray.push('');\r\n existingNextOfKinPhoneNumbersArray.push('');\r\n customPriceArray.push(selectedProduct.result?.Price!);\r\n }\r\n\r\n if(userValid && existingAttendeeName.length <=0)\r\n {\r\n existingAttendeeName.push(userInfo.firstname + ' ' + userInfo.lastname);\r\n existingPhoneNumbersArray.push(userInfo.mobilephone)\r\n }\r\n\r\n setAttendeeName(existingAttendeeName);\r\n setInputValue(existingInputValue);\r\n setMultiplers(multipliersArray);\r\n setPhoneNumbers(existingPhoneNumbersArray);\r\n setNextOfKinName(existingNextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(existingNextOfKinPhoneNumbersArray);\r\n setIsInsuranceIncluded(insuranceIncludeArray);\r\n setIsInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n setCustomPrice(customPriceArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackPrice(customPriceArray);\r\n callbackName(existingAttendeeName);\r\n callbackPhoneNumber(existingPhoneNumbersArray);\r\n callbackNextOfKinName(existingNextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(existingNextOfKinPhoneNumbersArray);\r\n\r\n _checkPricesEntered(customPriceArray);\r\n _checkNamesEntered(existingAttendeeName);\r\n _checkPhoneNumberEntered(existingPhoneNumbersArray);\r\n\r\n callbackInsuranceIncluded(insuranceIncludeArray);\r\n callbackInsuranceIncludedNum(isInsuranceIncludedNumArray);\r\n\r\n if (productEvents.length === 1 && formItems.length <= 0) {\r\n\r\n const event = productEvents[0];\r\n const eventObj = { value: event['id'], label: event['name'] }\r\n\r\n _setEventDates(eventObj, 0);\r\n callbackEventsSelected(true);\r\n\r\n }\r\n else if(productEvents.length > 1){\r\n setSelectValue(eventNamesArray);\r\n setCoursesEventId(eventIDsArray);\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n _checkEventsEntered(eventNamesArray);\r\n }\r\n\r\n \r\n }, [formItems])\r\n\r\n const _displayEventDates = (index: number): { value: string, label: string }[] => {\r\n const displayValue: { value: string, label: string }[] = [];\r\n\r\n if (selectValue.length > 0) {\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n if (selectValueArray[`${index}`] !== '') {\r\n const eventDates = selectValueArray[`${index}`].split(';');\r\n const eventIds = eventIDArray[`${index}`].split(';');\r\n\r\n for (let i = 0; i < eventDates.length; ++i) {\r\n displayValue.push({ value: eventIds[`${i}`], label: eventDates[`${i}`] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return displayValue;\r\n }\r\n\r\n const _checkEventsEntered = (cousesEventArray: string[]) => {\r\n let eventsSelected = cousesEventArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < cousesEventArray.length; i++) {\r\n if (cousesEventArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n eventsSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackEventsSelected(eventsSelected);\r\n }\r\n\r\n const _setMultipler = (count: number, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(1);\r\n }\r\n\r\n valueArray[`${index}`] = count;\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setMultipleEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n \r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n \r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(event.length, index);\r\n\r\n _checkEventsEntered(selectValueArray);\r\n }\r\n\r\n const _setEventDatesOnLoad = (event: any, formLength: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n\r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n for(let i=0; i< formLength; i++)\r\n {\r\n \r\n while (typeof selectValueArray[`${i}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${i}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n selectValueArray[`${i}`] = inputEventDates;\r\n eventIDArray[`${i}`] = inputEventIDs;\r\n\r\n }\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n //_setMultipler(1, index);\r\n\r\n }\r\n\r\n const _setEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n\r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(1, index);\r\n\r\n }\r\n\r\n const _setInsuranceAmount = (value: boolean, index: number) => {\r\n const valueArray = isInsuranceIncluded.slice();\r\n const insuranceArray = customPrice.slice();\r\n const insuranceNumArray = isInsuranceIncludedNum.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(false);\r\n }\r\n\r\n while (typeof insuranceArray[`${index}`] === 'undefined') {\r\n insuranceArray.push(0);\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n insuranceNumArray[`${index}`] = value === true? 1: 0;\r\n\r\n if (value === true) {\r\n insuranceArray[`${index}`] = selectedProduct.result?.Price! + insuranceAmountValue;\r\n\r\n }\r\n else {\r\n insuranceArray[`${index}`] = selectedProduct.result?.Price!;\r\n\r\n }\r\n\r\n\r\n setIsInsuranceIncluded(valueArray);\r\n setIsInsuranceIncludedNum(insuranceNumArray);\r\n setCustomPrice(insuranceArray);\r\n callbackPrice(insuranceArray);\r\n callbackInsuranceIncluded(valueArray);\r\n callbackInsuranceIncludedNum(insuranceNumArray);\r\n };\r\n\r\n\r\n const _buildEventDropdown = (idx: number): JSX.Element => {\r\n if (productEvents.length > 1) {\r\n return (\r\n
\r\n
\r\n

{formLabels.events}

\r\n { return ({ value: event['id'], label: event['name'] }); })}\r\n onChange={event => _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n\r\n }\r\n\r\n const event = productEvents[0];\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.events}

\r\n _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNextOfKinName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.nameNextOfKin}

\r\n _setNextOfKinNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildContactNumber = ( idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.phoneNumber}

\r\n _setPhoneNumber(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNextOfKinContactNumber = ( idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.phoneNumberNextOfKin}

\r\n _setNextOfKinPhoneNumbers(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildInsuranceField = (idx: number): JSX.Element | null => {\r\n if (typeof customPrice[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.tax}

\r\n

{formLabels.taxPrompt}

\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'name') {\r\n return (\r\n
\r\n

{formLabels.availableSlots}{remainingSlots}

\r\n {_buildEventDropdown(idx)}\r\n {_buildName(idx)}\r\n {_buildContactNumber(idx)}\r\n {_buildNextOfKinName(idx)}\r\n {_buildNextOfKinContactNumber(idx)}\r\n {insuranceAmountValue !== 0 && _buildInsuranceField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

\r\n ${isInsuranceIncluded[`${idx}`] ? typeof customPrice[`${idx}`] !== 'undefined' ? customPrice[`${idx}`] : '0' : selectedProduct.result?.Price!}\r\n

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations && showAddMoreButton &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
;\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations && showAddMoreButton &&\r\n
\r\n \r\n
} \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default EventNextOfKinNameForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport DatePicker from 'react-date-picker';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync, uploadImageFileToAzure } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IEventDetails, IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\nimport { Response } from '../../../components/enums';\r\n\r\nimport Select from 'react-select'\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackPrice?: any;\r\n callbackName?: any;\r\n callbackEmailId?: any;\r\n callbackContactNumber?: any;\r\n callbackEventID?: any;\r\n callbackEvent?: any;\r\n callbackNamesEntered?: any;\r\n callbackPricesEntered?: any;\r\n callbackMultiplier: any;\r\n callbackEventsSelected?: any;\r\n callbackPhoneNumber: any;\r\n callbackNextOfKinName: any;\r\n callbackNextOfKinPhoneNumber: any;\r\n callbackBirthDate: any;\r\n callbackPassportNumber: any;\r\n callbackPassportExpiryDate:any;\r\n callbackPassportIssuedDate: any;\r\n callbackConsent: any;\r\n callbackDateEntered: any;\r\n callbackPassportExpiryDateEntered: any;\r\n callbackPassportIssueDateEntered: any;\r\n callbackRemarks?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n userInfo: any;\r\n productEvents: any[];\r\n isUat: boolean;\r\n organisation: string;\r\n azureContainerName: string;\r\n callbackPhoneNumbersEntered: any;\r\n callbackPassportNumberEntered: any;\r\n callbackFileUploaded: any;\r\n isFileUploaded: boolean;\r\n allowMultipleRegistrations: boolean;\r\n showRemarksField: boolean;\r\n}\r\n\r\nconst EventPassportUploadForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackPrice, callbackName, callbackNamesEntered, callbackPricesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, userInfo, productEvents, callbackEventID, callbackEvent, callbackMultiplier, callbackEventsSelected, callbackPhoneNumber, callbackNextOfKinName, callbackPhoneNumbersEntered, callbackNextOfKinPhoneNumber, callbackBirthDate, callbackDateEntered, isUat, organisation, azureContainerName,callbackPassportNumberEntered,callbackPassportExpiryDateEntered,callbackPassportIssueDateEntered, callbackFileUploaded,isFileUploaded,allowMultipleRegistrations,\r\ncallbackPassportNumber, callbackPassportExpiryDate, callbackPassportIssuedDate,callbackConsent,callbackRemarks, showRemarksField }) => {\r\n\r\n const [customPrice, setCustomPrice] = useState([0]);\r\n const [inputValue, setInputValue] = useState(['']);\r\n const [attendeeName, setAttendeeName] = useState(['']);\r\n const [coursesEventId, setCoursesEventId] = useState(['']);\r\n const [selectValue, setSelectValue] = useState(['']);\r\n const [phoneNumbers, setPhoneNumbers] = useState(['']);\r\n const [chineseName, setChineseName] = useState(['']);\r\n const [nextOfKinName, setNextOfKinName] = useState(['']);\r\n const [nextOfKinPhoneNumbers, setNextOfKinPhoneNumbers] = useState(['']);\r\n const [birthDate, setBirthDate] = useState(['']);\r\n const [passportNumber, setPassportNumber] = useState(['']);\r\n const [passportExpiryDate, setPassportExpiryDate] = useState(['']);\r\n const [passportIssueDate, setPassportIssueDate] = useState(['']);\r\n const [multipliers, setMultiplers] = useState([1]);\r\n const [remainingSlots, setRemainingSlots] = useState(0);\r\n const [file, setFile] = useState('');\r\n const [imageFiles, setImageFiles ] = useState(['']);\r\n const [isValidFileSize, setIsValidFileSize] = useState(false);\r\n const [consent, setConsent] = useState([1]);\r\n const [remark, setRemark] = useState(['']);\r\n const[showAddMoreButton, setShowAddMoreButton] = useState(false);\r\n\r\n const formLabels = resource.eventsPassportUploadForm[`${localeCode}`];\r\n\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm();\r\n\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setAttendeeNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n\r\n\r\n };\r\n\r\n const _setNextOfKinNameArray = (name: string, index: number) => {\r\n const nextOfKinNameArray = nextOfKinName.slice();\r\n\r\n while (typeof nextOfKinNameArray[`${index}`] === 'undefined') {\r\n nextOfKinNameArray.push('');\r\n }\r\n\r\n nextOfKinNameArray[`${index}`] = name;\r\n\r\n nextOfKinNameArray[`${index}`].trim();\r\n\r\n setNextOfKinName(nextOfKinNameArray);\r\n\r\n callbackNextOfKinName(nextOfKinNameArray);\r\n\r\n };\r\n\r\n const _setNextOfKinPhoneNumbers = (value: string, index: number) => {\r\n const valueArray = nextOfKinPhoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setNextOfKinPhoneNumbers(valueArray);\r\n\r\n callbackNextOfKinPhoneNumber(valueArray);\r\n }\r\n\r\n const _setPassportNumber = (value: string, index: number) => {\r\n const valueArray = passportNumber.slice();\r\n\r\n const alphanumericRegex = /^[a-zA-Z0-9\\s]+$/;\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n \r\n if (alphanumericRegex.test(value) && value.length <= 50) {\r\n valueArray[`${index}`] = value;\r\n\r\n setPassportNumber(valueArray);\r\n _checkPassportNumberEntered(valueArray);\r\n callbackPassportNumber(valueArray);\r\n }\r\n else {\r\n toast.error(formLabels.validPassportText)\r\n }\r\n }\r\n\r\n const _setPassportExpiryDate = (value: Date, index: number) => {\r\n const valueArray = passportExpiryDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n setPassportExpiryDate(valueArray);\r\n _checkPassportExpiryDateEntered(valueArray);\r\n callbackPassportExpiryDate(valueArray);\r\n }\r\n\r\n const _setPassportIssueDate = (value: Date, index: number) => {\r\n const valueArray = passportIssueDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n setPassportIssueDate(valueArray);\r\n _checkPassportIssueDateEntered(valueArray);\r\n callbackPassportIssuedDate(valueArray);\r\n }\r\n\r\n const _setBirthDate = (value: Date, index: number) => {\r\n const valueArray = birthDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n setBirthDate(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n\r\n _checkDateEntered(valueArray);\r\n }\r\n\r\n const _checkDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (!valueArray[`${i}`]) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackDateEntered(checked);\r\n }\r\n\r\n const _checkPassportExpiryDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (!valueArray[`${i}`]) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackPassportExpiryDateEntered(checked);\r\n }\r\n\r\n const _checkPassportIssueDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (!valueArray[`${i}`]) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackPassportIssueDateEntered(checked);\r\n }\r\n\r\n const _setAttendeeNameArray = (name: string, index: number) => {\r\n const attendeeNameArray = attendeeName.slice();\r\n\r\n while (typeof attendeeNameArray[`${index}`] === 'undefined') {\r\n attendeeNameArray.push('');\r\n }\r\n\r\n attendeeNameArray[`${index}`] = name;\r\n\r\n attendeeNameArray[`${index}`].trim();\r\n\r\n setAttendeeName(attendeeNameArray);\r\n\r\n callbackName(attendeeNameArray);\r\n\r\n _checkNamesEntered(attendeeNameArray);\r\n };\r\n\r\n const _setPhoneNumber = (value: string, index: number) => {\r\n const valueArray = phoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setPhoneNumbers(valueArray);\r\n\r\n callbackPhoneNumber(valueArray);\r\n\r\n _checkPhoneNumberEntered(valueArray);\r\n }\r\n\r\n const _setNextOfKinNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setNextOfKinNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n\r\n\r\n };\r\n\r\n const convertToBase64 = (file: any) => {\r\n return new Promise((resolve, reject) => {\r\n const fileReader = new FileReader();\r\n fileReader.readAsDataURL(file);\r\n fileReader.onload = () => {\r\n resolve(fileReader.result);\r\n };\r\n fileReader.onerror = (error) => {\r\n reject(error);\r\n };\r\n });\r\n };\r\n\r\n const _validateFileSize = (file: any) => {\r\n const MAX_FILE_SIZE = 2e+7 // 20MB\r\n const fileSizeKiloBytes = file.size;\r\n\r\n if (fileSizeKiloBytes > MAX_FILE_SIZE) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n const _setFileInputValue = async (event: any, index: number) => {\r\n const imageFile = event.target.files[0];\r\n if (_validateFileSize(imageFile)) {\r\n const base64 = await convertToBase64(imageFile) as string;\r\n const base64String = base64.toString().replace(/^data:image\\/\\w+;base64,/, \"\");\r\n setFile(base64String);\r\n\r\n const imageFileArray = imageFiles.slice();\r\n\r\n while (typeof imageFileArray[`${index}`] === 'undefined') {\r\n imageFileArray.push('');\r\n }\r\n \r\n imageFileArray[`${index}`] = imageFile.name;\r\n \r\n imageFileArray[`${index}`].trim();\r\n\r\n setImageFiles(imageFileArray);\r\n setIsValidFileSize(true);\r\n }\r\n else {\r\n setIsValidFileSize(false);\r\n toast.error(formLabels.fileSizeErrorMsg);\r\n }\r\n };\r\n\r\n\r\n const _checkNamesEntered = (attendeeNameArray: string[]) => {\r\n let namesEntered = attendeeNameArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < attendeeNameArray.length; i++) {\r\n if (attendeeNameArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkFileUploaded = (imageFileArray: string[]) => {\r\n let imageFileUploaded = imageFileArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < imageFileArray.length; i++) {\r\n if (imageFileArray[`${i}`].trim() === '') {\r\n imageFileUploaded = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackFileUploaded(imageFileUploaded);\r\n }\r\n\r\n const _checkPhoneNumberEntered = (phoneNumbersArray: string[]) => {\r\n let phoneNumbersEntered = phoneNumbersArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < phoneNumbersArray.length; i++) {\r\n if (phoneNumbersArray[`${i}`].trim() === '') {\r\n phoneNumbersEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPhoneNumbersEntered(phoneNumbersEntered);\r\n }\r\n\r\n const _checkPassportNumberEntered = (passportNumbersArray: string[]) => {\r\n let passportNumbersEntered = passportNumbersArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < passportNumbersArray.length; i++) {\r\n if (passportNumbersArray[`${i}`].trim() === '') {\r\n passportNumbersEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPassportNumberEntered(passportNumbersEntered);\r\n }\r\n\r\n const _checkPricesEntered = (customPriceArray: number[]) => {\r\n let pricesEntered = true;\r\n\r\n for (let i = 0; i < customPriceArray.length; i++) {\r\n if (customPriceArray[`${i}`] == 0) {\r\n pricesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPricesEntered(pricesEntered);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const attendeeNameArray = attendeeName.slice();\r\n const coursesEventArray = selectValue.slice();\r\n const coursesEventIDArray = coursesEventId.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const nextOfKinNamesArray = nextOfKinName.slice();\r\n const nextOfKinPhoneNumbersArray = nextOfKinPhoneNumbers.slice();\r\n const chineseNamesArray = chineseName.slice();\r\n const birthdayArray = birthDate.slice();\r\n const passportNumberArray = passportNumber.slice();\r\n const passportIssueDateArray = passportIssueDate.slice();\r\n const passportExpiryDateArray = passportExpiryDate.slice();\r\n const imageFileArray = imageFiles.slice();\r\n const consentArray = consent.slice();\r\n const remarkArray = remark.slice();\r\n\r\n\r\n birthdayArray.push('');\r\n passportIssueDateArray.push('');\r\n passportExpiryDateArray.push('');\r\n imageFileArray.push('');\r\n passportNumberArray.push('');\r\n consentArray.push(1);\r\n remarkArray.push('');\r\n \r\n setShowAddMoreButton(false);\r\n setRemainingSlots(0);\r\n setAttendeeName(attendeeNameArray);\r\n setSelectValue(coursesEventArray);\r\n setCoursesEventId(coursesEventIDArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setChineseName(chineseNamesArray);\r\n setNextOfKinName(nextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(nextOfKinPhoneNumbersArray);\r\n setPassportNumber(passportNumberArray);\r\n setPassportIssueDate(passportIssueDateArray);\r\n setPassportExpiryDate(passportExpiryDateArray)\r\n setBirthDate(birthdayArray);\r\n setImageFiles(imageFileArray)\r\n setConsent(consentArray);\r\n setRemark(remarkArray);\r\n\r\n callbackEvent(coursesEventArray);\r\n callbackEventID(coursesEventIDArray);\r\n callbackName(attendeeNameArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackNextOfKinName(nextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(nextOfKinPhoneNumbersArray);\r\n callbackBirthDate(birthdayArray);\r\n callbackPassportNumber(passportNumberArray);\r\n callbackPassportExpiryDate(passportExpiryDateArray);\r\n callbackPassportIssuedDate(passportIssueDateArray);\r\n callbackConsent(consentArray);\r\n callbackRemarks(remarkArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackEventsSelected(false);\r\n callbackDateEntered(false);\r\n\r\n _checkPassportNumberEntered(passportNumberArray);\r\n _checkPassportExpiryDateEntered(passportExpiryDateArray);\r\n _checkPassportIssueDateEntered(passportIssueDateArray);\r\n _checkFileUploaded(imageFileArray);\r\n\r\n if(productEvents.length === 1)\r\n {\r\n \r\n const event = productEvents[0];\r\n const eventObj = { value: event['id'], label: event['name'] }\r\n \r\n _setEventDates(eventObj, coursesEventArray.length);\r\n callbackEventsSelected(true);\r\n\r\n }\r\n\r\n }\r\n\r\n const _uploadFileToAzure = async (index: number) => {\r\n const env = isUat ? \"uat\" : \"prod\";\r\n const entity = organisation == \"BT\" ? \"btrts\" : \"gpbt\";\r\n const fileName = passportNumber[`${index}`] + \".jpeg\";\r\n const base64Image = file;\r\n const containerName = azureContainerName;\r\n\r\n const imageFileArray = imageFiles.slice();\r\n\r\n\r\n const alphanumericRegex = /^[a-zA-Z0-9\\s]+$/;\r\n\r\n if (alphanumericRegex.test(passportNumber[`${index}`])) {\r\n\r\n const uploadFileResult = await uploadImageFileToAzure({ callerContext: actionContext }, env, entity, fileName, base64Image, containerName);\r\n\r\n if (uploadFileResult.toUpperCase() !== Response.SUCCESS) {\r\n toast.error(formLabels.fileUploadFailedMsg);\r\n }\r\n else {\r\n\r\n setImageFiles(imageFileArray);\r\n _checkFileUploaded(imageFileArray);\r\n // setIsFileUploaded(true);\r\n toast(formLabels.fileUploadSuccessMsg);\r\n }\r\n\r\n }\r\n else {\r\n toast.error(formLabels.validPassportText)\r\n }\r\n\r\n\r\n\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n const customPriceArray = customPrice.slice();\r\n const inputValueArray = inputValue.slice();\r\n const attendeeNameArray = attendeeName.slice();\r\n const multiplierArray = multipliers.slice();\r\n const coursesEventArray = selectValue.slice();\r\n const coursesEventIDArray = coursesEventId.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n const chineseNamesArray = chineseName.slice();\r\n const nextOfKinNamesArray = nextOfKinName.slice();\r\n const nextOfKinPhoneNumbersArray = nextOfKinPhoneNumbers.slice();\r\n const birthdayArray = birthDate.slice();\r\n const passportNumberArray = passportNumber.slice();\r\n const passportIssueDateArray = passportIssueDate.slice();\r\n const passportExpiryDateArray = passportExpiryDate.slice();\r\n const imageFileArray = imageFiles.slice();\r\n const consentArray = consent.slice();\r\n const remarkArray = remark.slice();\r\n\r\n\r\n if (typeof customPriceArray[`${index}`] !== 'undefined') {\r\n if (customPriceArray.length > 1) {\r\n customPriceArray.splice(index, 1);\r\n } else {\r\n customPriceArray[0] = parseInt(element!.field_options![0]);\r\n }\r\n }\r\n\r\n if (typeof inputValueArray[`${index}`] !== 'undefined') {\r\n if (inputValueArray.length > 1) {\r\n inputValueArray.splice(index, 1);\r\n } else {\r\n inputValueArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof attendeeNameArray[`${index}`] !== 'undefined') {\r\n if (attendeeNameArray.length > 1) {\r\n attendeeNameArray.splice(index, 1);\r\n } else {\r\n attendeeNameArray[0] = '';\r\n }\r\n }\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = 1;\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof coursesEventArray[`${index}`] !== 'undefined') {\r\n if (coursesEventArray.length > 1) {\r\n coursesEventArray.splice(index, 1);\r\n } else {\r\n coursesEventArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof coursesEventIDArray[`${index}`] !== 'undefined') {\r\n if (coursesEventIDArray.length > 1) {\r\n coursesEventIDArray.splice(index, 1);\r\n } else {\r\n coursesEventIDArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof phoneNumbersArray[`${index}`] !== 'undefined') {\r\n if (phoneNumbersArray.length > 1) {\r\n phoneNumbersArray.splice(index, 1);\r\n } else {\r\n phoneNumbersArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof chineseNamesArray[`${index}`] !== 'undefined') {\r\n if (chineseNamesArray.length > 1) {\r\n chineseNamesArray.splice(index, 1);\r\n } else {\r\n chineseNamesArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof nextOfKinNamesArray[`${index}`] !== 'undefined') {\r\n if (nextOfKinNamesArray.length > 1) {\r\n nextOfKinNamesArray.splice(index, 1);\r\n } else {\r\n nextOfKinNamesArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof nextOfKinPhoneNumbersArray[`${index}`] !== 'undefined') {\r\n if (nextOfKinPhoneNumbersArray.length > 1) {\r\n nextOfKinPhoneNumbersArray.splice(index, 1);\r\n } else {\r\n nextOfKinPhoneNumbersArray[0] = '';\r\n }\r\n }\r\n if (typeof birthdayArray[`${index}`] !== 'undefined') {\r\n if (birthdayArray.length > 1) {\r\n birthdayArray.splice(index, 1);\r\n } else {\r\n birthdayArray[0] = '';\r\n }\r\n }\r\n if (typeof passportNumberArray[`${index}`] !== 'undefined') {\r\n if (passportNumberArray.length > 1) {\r\n passportNumberArray.splice(index, 1);\r\n } else {\r\n passportNumberArray[0] = '';\r\n }\r\n }\r\n if (typeof passportExpiryDateArray[`${index}`] !== 'undefined') {\r\n if (passportExpiryDateArray.length > 1) {\r\n passportExpiryDateArray.splice(index, 1);\r\n } else {\r\n passportExpiryDateArray[0] = '';\r\n }\r\n }\r\n if (typeof passportIssueDateArray[`${index}`] !== 'undefined') {\r\n if (passportIssueDateArray.length > 1) {\r\n passportIssueDateArray.splice(index, 1);\r\n } else {\r\n passportIssueDateArray[0] = '';\r\n }\r\n }\r\n if (typeof imageFileArray[`${index}`] !== 'undefined') {\r\n if (imageFileArray.length > 1) {\r\n imageFileArray.splice(index, 1);\r\n } else {\r\n imageFileArray[0] = '';\r\n }\r\n }\r\n if (typeof consentArray[`${index}`] !== 'undefined') {\r\n if (consentArray.length > 1) {\r\n consentArray.splice(index, 1);\r\n } else {\r\n consentArray[0] = 1;\r\n }\r\n }\r\n if (typeof remarkArray[`${index}`] !== 'undefined') {\r\n if (remarkArray.length > 1) {\r\n remarkArray.splice(index, 1);\r\n } else {\r\n remarkArray[0] = '';\r\n }\r\n }\r\n\r\n\r\n\r\n setCustomPrice(customPriceArray);\r\n setInputValue(inputValueArray);\r\n setAttendeeName(attendeeNameArray);\r\n setSelectValue(coursesEventArray);\r\n setCoursesEventId(coursesEventIDArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n setChineseName(chineseNamesArray);\r\n setNextOfKinName(nextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(nextOfKinPhoneNumbersArray);\r\n setBirthDate(birthdayArray);\r\n setPassportNumber(passportNumberArray);\r\n setPassportIssueDate(passportIssueDateArray);\r\n setPassportExpiryDate(passportExpiryDateArray)\r\n setImageFiles(imageFileArray);\r\n setConsent(consentArray);\r\n setRemark(remarkArray);\r\n\r\n\r\n callbackEvent(coursesEventArray);\r\n callbackEventID(coursesEventIDArray);\r\n callbackName(attendeeNameArray);\r\n callbackPrice(customPriceArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n callbackNextOfKinName(nextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(nextOfKinPhoneNumbersArray);\r\n callbackBirthDate(birthdayArray);\r\n callbackPassportNumber(passportNumberArray);\r\n callbackPassportExpiryDate(passportExpiryDateArray);\r\n callbackPassportIssuedDate(passportIssueDateArray);\r\n callbackConsent(consentArray);\r\n callbackRemarks(remarkArray);\r\n \r\n\r\n _checkEventsEntered(coursesEventArray);\r\n _checkNamesEntered(attendeeNameArray);\r\n _checkFileUploaded(imageFileArray);\r\n _checkPricesEntered(customPriceArray);\r\n _checkPhoneNumberEntered(phoneNumbersArray);\r\n _checkPassportNumberEntered(passportNumberArray);\r\n _checkDateEntered(birthdayArray);\r\n _checkPassportExpiryDateEntered(passportExpiryDateArray);\r\n _checkPassportIssueDateEntered(passportIssueDateArray);\r\n }\r\n\r\n useEffect(() => {\r\n const element = formScheme.find(element => element.field_name === 'amount');\r\n\r\n var minDonationvalue = Number(element?.field_options![0]);\r\n var minDonationString = String(element?.field_options![0]);\r\n\r\n const existingCustomPriceAmount: number[] = [];\r\n const existingInputValue: string[] = [];\r\n const existingAttendeeName: string[] = [];\r\n const existingDonationAmount: string[] = [];\r\n const multipliersArray: number[] = [];\r\n const eventNamesArray: string[] = [];\r\n const eventIDsArray: string[] = [];\r\n const existingPhoneNumbersArray: string[] = [];\r\n const existingChineseNamesArray: string[] = [];\r\n const existingNextOfKinNamesArray: string[] = [];\r\n const existingNextOfKinPhoneNumbersArray: string[] = [];\r\n const existingBirthDate: string[] = [];\r\n const existingPassportNumber: string[] = [];\r\n const existingPassportIssueDate: string[] = [];\r\n const existingPassportExpiryDate: string[] = [];\r\n const imageFileArray: string[] = [];\r\n const existingConsent: number[] = [];\r\n const existingRemark: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n var customPriceAmount: number = formItems[`${i}`]['customPriceAmount'];\r\n\r\n const eventName: string = formItems[`${i}`]['eventName'];\r\n const birthDate = formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']) : null;\r\n const passportExpiryDate = formItems[`${i}`]['passportExpiryDate'] !== '' ? new Date(formItems[`${i}`]['passportExpiryDate']) : null;\r\n const passportIssueDate = formItems[`${i}`]['passportIssuedDate'] !== '' ? new Date(formItems[`${i}`]['passportIssuedDate']) : null;\r\n\r\n\r\n multipliersArray.push(eventName.split(';').length);\r\n eventNamesArray.push(eventName);\r\n eventIDsArray.push(formItems[`${i}`]['eventID']);\r\n existingPhoneNumbersArray.push(formItems[`${i}`]['phoneNumber']);\r\n existingChineseNamesArray.push(formItems[`${i}`]['chineseName']);\r\n existingNextOfKinNamesArray.push(formItems[`${i}`]['nameNextKin']);\r\n existingNextOfKinPhoneNumbersArray.push(formItems[`${i}`]['contactNumberNextKin']);\r\n existingBirthDate.push(birthDate?birthDate.toISOString():'');\r\n existingPassportNumber.push(formItems[`${i}`]['passportNumber']);\r\n existingPassportIssueDate.push(passportIssueDate?passportIssueDate.toISOString():'');\r\n existingPassportExpiryDate.push(passportExpiryDate?passportExpiryDate.toISOString():'');\r\n existingAttendeeName.push(formItems[`${i}`]['names'][0]);\r\n existingConsent.push(1);\r\n existingCustomPriceAmount.push(customPriceAmount);\r\n existingRemark.push(formItems[`${i}`]['remarks']);\r\n imageFileArray.push('');\r\n\r\n if(productEvents.length === 1)\r\n {\r\n const event = productEvents[0];\r\n const eventObj = { value: event['id'], label: event['name'] }\r\n \r\n _setEventDatesOnLoad(eventObj, formItems.length);\r\n callbackEventsSelected(true);\r\n \r\n }\r\n }\r\n\r\n\r\n setAttendeeName(existingAttendeeName);\r\n setPhoneNumbers(existingPhoneNumbersArray);\r\n setChineseName(existingChineseNamesArray);\r\n setNextOfKinName(existingNextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(existingNextOfKinPhoneNumbersArray);\r\n setBirthDate(existingBirthDate);\r\n setPassportNumber(existingPassportNumber);\r\n setPassportIssueDate(existingPassportIssueDate);\r\n setPassportExpiryDate(existingPassportExpiryDate);\r\n setImageFiles(imageFileArray);\r\n setConsent(existingConsent);\r\n setRemark(existingRemark);\r\n\r\n\r\n callbackName(existingAttendeeName);\r\n callbackBirthDate(existingBirthDate);\r\n callbackPhoneNumber(existingPhoneNumbersArray);\r\n callbackNextOfKinName(existingNextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(existingNextOfKinPhoneNumbersArray);\r\n callbackPassportNumber(existingPassportNumber);\r\n callbackPassportExpiryDate(existingPassportExpiryDate);\r\n callbackPassportIssuedDate(existingPassportIssueDate);\r\n callbackConsent(existingConsent);\r\n callbackRemarks(existingRemark);\r\n\r\n _checkNamesEntered(existingAttendeeName);\r\n _checkFileUploaded(imageFileArray);\r\n _checkPhoneNumberEntered(existingPhoneNumbersArray);\r\n _checkPassportNumberEntered(existingPassportNumber);\r\n _checkDateEntered(existingBirthDate);\r\n _checkPassportExpiryDateEntered(existingPassportExpiryDate);\r\n _checkPassportIssueDateEntered(existingPassportIssueDate);\r\n\r\n \r\n } else {\r\n existingDonationAmount.push(minDonationString);\r\n existingCustomPriceAmount.push(minDonationvalue);\r\n existingInputValue.push('');\r\n multipliersArray.push(1);\r\n eventNamesArray.push('');\r\n eventIDsArray.push('');\r\n existingBirthDate.push('');\r\n existingPassportNumber.push('');\r\n existingPassportExpiryDate.push('');\r\n existingPassportIssueDate.push('');\r\n imageFileArray.push('');\r\n existingConsent.push(1);\r\n existingRemark.push('');\r\n }\r\n\r\n //setDonationAmount(existingDonationAmount);\r\n if (userValid && existingAttendeeName.length <= 0) {\r\n\r\n existingAttendeeName.push(userInfo.firstname + ' ' + userInfo.lastname);\r\n existingChineseNamesArray.push(userInfo.gmb_fullnamechinese);\r\n existingPhoneNumbersArray.push(userInfo.mobilephone)\r\n }\r\n\r\n setAttendeeName(existingAttendeeName);\r\n setCustomPrice(existingCustomPriceAmount);\r\n setInputValue(existingInputValue);\r\n setMultiplers(multipliersArray);\r\n setPhoneNumbers(existingPhoneNumbersArray);\r\n setChineseName(existingChineseNamesArray);\r\n setNextOfKinName(existingNextOfKinNamesArray);\r\n setNextOfKinPhoneNumbers(existingNextOfKinPhoneNumbersArray);\r\n setBirthDate(existingBirthDate);\r\n setPassportNumber(existingPassportNumber);\r\n setPassportIssueDate(existingPassportIssueDate);\r\n setPassportExpiryDate(existingPassportExpiryDate);\r\n setImageFiles(imageFileArray);\r\n setConsent(existingConsent);\r\n setRemark(existingRemark);\r\n\r\n callbackMultiplier(multipliersArray);\r\n //callbackEvent(eventNamesArray);\r\n //callbackEventID(eventIDsArray);\r\n callbackBirthDate(existingBirthDate);\r\n callbackConsent(existingConsent);\r\n callbackRemarks(existingRemark);\r\n\r\n //_checkEventsEntered(eventNamesArray);\r\n \r\n callbackPrice(existingCustomPriceAmount);\r\n callbackName(existingAttendeeName);\r\n callbackPhoneNumber(existingPhoneNumbersArray);\r\n callbackNextOfKinName(existingNextOfKinNamesArray);\r\n callbackNextOfKinPhoneNumber(existingNextOfKinPhoneNumbersArray);\r\n callbackPassportNumber(existingPassportNumber);\r\n callbackPassportExpiryDate(existingPassportExpiryDate);\r\n callbackPassportIssuedDate(existingPassportIssueDate);\r\n \r\n _checkDateEntered(existingBirthDate);\r\n _checkPricesEntered(existingCustomPriceAmount);\r\n _checkNamesEntered(existingAttendeeName);\r\n _checkFileUploaded(imageFileArray);\r\n _checkPhoneNumberEntered(existingPhoneNumbersArray);\r\n _checkPassportNumberEntered(existingPassportNumber);\r\n _checkPassportExpiryDateEntered(existingPassportExpiryDate);\r\n _checkPassportIssueDateEntered(existingPassportIssueDate);\r\n\r\n if(productEvents.length === 1 && formItems.length <= 0)\r\n {\r\n \r\n const event = productEvents[0];\r\n const eventObj = { value: event['id'], label: event['name'] }\r\n \r\n _setEventDates(eventObj, 0);\r\n callbackEventsSelected(true);\r\n\r\n }\r\n else if(productEvents.length > 1){\r\n setSelectValue(eventNamesArray);\r\n setCoursesEventId(eventIDsArray);\r\n callbackEvent(eventNamesArray);\r\n callbackEventID(eventIDsArray);\r\n _checkEventsEntered(eventNamesArray);\r\n }\r\n\r\n\r\n }, [formItems])\r\n\r\n const _displayEventDates = (index: number): { value: string, label: string }[] => {\r\n const displayValue: { value: string, label: string }[] = [];\r\n\r\n if (selectValue.length > 0) {\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n if (selectValueArray[`${index}`] !== '') {\r\n const eventDates = selectValueArray[`${index}`].split(';');\r\n const eventIds = eventIDArray[`${index}`].split(';');\r\n\r\n for (let i = 0; i < eventDates.length; ++i) {\r\n displayValue.push({ value: eventIds[`${i}`], label: eventDates[`${i}`] });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return displayValue;\r\n }\r\n\r\n const _checkEventsEntered = (cousesEventArray: string[]) => {\r\n let eventsSelected = cousesEventArray.length > 0 ? true : false;\r\n\r\n for (let i = 0; i < cousesEventArray.length; i++) {\r\n if (cousesEventArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n eventsSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackEventsSelected(eventsSelected);\r\n }\r\n\r\n const _setRemarksInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 100;\r\n\r\n _setRemarkArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setRemarkArray = (name: string, index: number) => {\r\n const remarkArray = remark.slice();\r\n\r\n while (typeof remarkArray[`${index}`] === 'undefined') {\r\n remarkArray.push('');\r\n }\r\n\r\n remarkArray[`${index}`] = name;\r\n\r\n remarkArray[`${index}`].trim();\r\n\r\n setRemark(remarkArray);\r\n\r\n callbackRemarks(remarkArray);\r\n }\r\n\r\n const _setMultipler = (count: number, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(1);\r\n }\r\n\r\n valueArray[`${index}`] = count;\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setMultipleEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n\r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(1, index);\r\n\r\n _checkEventsEntered(selectValueArray);\r\n }\r\n\r\n const _setEventDatesOnLoad = (event: any, formLength: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n\r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n for(let i=0; i< formLength; i++)\r\n {\r\n \r\n while (typeof selectValueArray[`${i}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${i}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n selectValueArray[`${i}`] = inputEventDates;\r\n eventIDArray[`${i}`] = inputEventIDs;\r\n\r\n }\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n //_setMultipler(1, index);\r\n\r\n }\r\n\r\n const _setEventDates = (event: any, index: number) => {\r\n let inputEventDates: string = '';\r\n let inputEventIDs: string = '';\r\n\r\n\r\n inputEventDates += event.label;\r\n inputEventIDs += event.value;\r\n\r\n\r\n const selectValueArray = selectValue.slice();\r\n const eventIDArray = coursesEventId.slice();\r\n\r\n while (typeof selectValueArray[`${index}`] === 'undefined') {\r\n selectValueArray.push('');\r\n }\r\n\r\n while (typeof eventIDArray[`${index}`] === 'undefined') {\r\n eventIDArray.push('');\r\n }\r\n\r\n selectValueArray[`${index}`] = inputEventDates;\r\n eventIDArray[`${index}`] = inputEventIDs;\r\n\r\n let eventDetails: IEventDetails = productEvents.find(product => product['id'] == event.value);\r\n\r\n setShowAddMoreButton(!eventDetails.hideAddMoreButton);\r\n setRemainingSlots(eventDetails.eventAvailableSlot);\r\n\r\n setSelectValue(selectValueArray);\r\n setCoursesEventId(eventIDArray);\r\n\r\n callbackEvent(selectValueArray);\r\n callbackEventID(eventIDArray);\r\n\r\n _setMultipler(1, index);\r\n\r\n }\r\n\r\n const _buildBirthDate = (idx: number): JSX.Element | null => {\r\n if (typeof birthDate[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n return (\r\n
\r\n
\r\n

{formLabels.birthDate}

\r\n _setBirthDate(date, idx)}\r\n value={birthDate[`${idx}`] === '' || birthDate[`${idx}`].includes('1900') ? null : new Date(birthDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildPassportExpiryDate = (idx: number): JSX.Element | null => {\r\n if (typeof passportExpiryDate[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n return (\r\n
\r\n
\r\n

{formLabels.passportExpiryDate}

\r\n _setPassportExpiryDate(date, idx)}\r\n value={passportExpiryDate[`${idx}`] === '' || passportExpiryDate[`${idx}`]?.includes('1900') ? null : new Date(passportExpiryDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildPassportIssueDate = (idx: number): JSX.Element | null => {\r\n if (typeof passportIssueDate[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n return (\r\n
\r\n
\r\n

{formLabels.passportIssueDate}

\r\n _setPassportIssueDate(date, idx)}\r\n value={passportIssueDate[`${idx}`] === '' || passportIssueDate[`${idx}`]?.includes('1900') ? null : new Date(passportIssueDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n const _buildEventDropdown = (idx: number): JSX.Element => {\r\n if(productEvents.length > 1)\r\n {\r\n return (\r\n
\r\n
\r\n

{formLabels.coursesEvents}

\r\n { return ({ value: event['id'], label: event['name'] }); })}\r\n onChange={event => _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n\r\n }\r\n const event = productEvents[0];\r\n \r\n return (\r\n
\r\n
\r\n

{formLabels.coursesEvents}

\r\n _setMultipleEventDates(event, idx)}\r\n classNamePrefix='eventSelect'\r\n className='select'\r\n noOptionsMessage={() => null}\r\n blurInputOnSelect={false}\r\n />\r\n
\r\n
\r\n );\r\n \r\n }\r\n\r\n const _buildUploadPassport = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n

{formLabels.passportUpload}

\r\n
\r\n
\r\n _setFileInputValue(event, idx)}\r\n className='form-control'\r\n />\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.attendeeName}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNextOfKinName = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.nameNextOfKin}

\r\n _setNextOfKinNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNextOfKinContactNumber = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.phoneNumberNextOfKin}

\r\n _setNextOfKinPhoneNumbers(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildPassportNumber = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.passportNumber}

\r\n _setPassportNumber(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildContactNumber = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.phoneNumber}

\r\n _setPhoneNumber(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildRemarks = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.remarks}

\r\n _setRemarksInputValue(event, idx)}\r\n className='form-control'\r\n maxLength={config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 101}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'attendeeName') {\r\n return (\r\n
\r\n {remainingSlots !== 0 &&

{formLabels.availableSlots}{remainingSlots}

}\r\n {_buildEventDropdown(idx)}\r\n {_buildName(idx)}\r\n {_buildContactNumber(idx)}\r\n {_buildNextOfKinName(idx)}\r\n {_buildNextOfKinContactNumber(idx)}\r\n {_buildBirthDate(idx)}\r\n {_buildPassportNumber(idx)}\r\n {_buildPassportExpiryDate(idx)}\r\n {_buildPassportIssueDate(idx)}\r\n {_buildUploadPassport(idx)}\r\n {showRemarksField && _buildRemarks(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

\r\n ${selectedProduct.result?.Price! === 0 ? typeof customPrice[`${idx}`] !== 'undefined' ? customPrice[`${idx}`] : '0' : selectedProduct.result?.Price!}\r\n

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations && isFileUploaded && showAddMoreButton &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
;\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations && isFileUploaded && showAddMoreButton &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default EventPassportUploadForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport DatePicker from 'react-date-picker';\r\nimport Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport resource from '../resources/resource.json';\r\nimport time from '../resources/time.json';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackName?: any;\r\n callbackBirthDate: any;\r\n callbackBirthTime: any;\r\n callbackNamesEntered?: any;\r\n callbackDateEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst NameBirthDatetimeForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackName, callbackBirthDate, callbackBirthTime,\r\n callbackNamesEntered, callbackDateEntered,\r\n formItems, config, localeCode, actionContext, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [birthDate, setBirthDate] = useState(['']);\r\n const [birthTime, setBirthTime] = useState(['']);\r\n\r\n const formLabels = resource.nameBirthDatetimeForm[`${localeCode}`];\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setCeremonyNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const valueArray = ceremonyName.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setCeremonyName(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(valueArray);\r\n }\r\n\r\n const _setBirthDate = (value: Date, index: number) => {\r\n const valueArray = birthDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n setBirthDate(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n\r\n _checkDateEntered(valueArray);\r\n }\r\n\r\n const _setBirthTime = (event: any, index: number) => {\r\n const valueArray = birthTime.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setBirthTime(valueArray);\r\n\r\n callbackBirthTime(valueArray);\r\n }\r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`] === null) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackDateEntered(checked);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dateValueArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n\r\n ceremonyNameArray.push('');\r\n dateValueArray.push('');\r\n timeValueArray.push('');\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n setBirthDate(dateValueArray);\r\n setBirthTime(timeValueArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n callbackBirthDate(dateValueArray);\r\n callbackBirthTime(timeValueArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackDateEntered(true);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const birthDateArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackDateEntered(ceremonyNameArray);\r\n }\r\n\r\n if (typeof birthDateArray[`${index}`] !== 'undefined') {\r\n if (birthDateArray.length > 1) {\r\n birthDateArray.splice(index, 1);\r\n } else {\r\n birthDateArray[0] = '';\r\n }\r\n\r\n setBirthDate(birthDateArray);\r\n\r\n callbackName(birthDateArray);\r\n }\r\n\r\n if (typeof timeValueArray[`${index}`] !== 'undefined') {\r\n if (timeValueArray.length > 1) {\r\n timeValueArray.splice(index, 1);\r\n } else {\r\n timeValueArray[0] = '';\r\n }\r\n\r\n setBirthTime(timeValueArray);\r\n\r\n callbackBirthTime(timeValueArray);\r\n }\r\n\r\n _checkNameEntered(ceremonyNameArray);\r\n _checkDateEntered(birthDateArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingCeremonyName: string[] = [];\r\n const existingBirthDate: string[] = [];\r\n const existingBirthTime: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const birthDate = formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']) : new Date();\r\n\r\n existingCeremonyName.push(formItems[`${i}`]['names'][0]);\r\n existingBirthDate.push(birthDate.toISOString());\r\n existingBirthTime.push(formItems[`${i}`]['birthTime']);\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n setBirthDate(existingBirthDate);\r\n setBirthTime(existingBirthTime);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackBirthDate(existingBirthDate);\r\n callbackBirthTime(existingBirthTime);\r\n\r\n _checkNameEntered(existingCeremonyName);\r\n _checkDateEntered(existingBirthDate);\r\n }\r\n }, [formItems])\r\n\r\n const _buildNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n

{formLabels.name}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n );\r\n }\r\n\r\n const _buildBirthDate = (idx: number): JSX.Element | null => {\r\n if (typeof birthDate[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n

{formLabels.birthDate}

\r\n _setBirthDate(date, idx)}\r\n value={birthDate[`${idx}`] === '' || birthDate[`${idx}`].includes('1900') ? null : new Date(birthDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n minDate={new Date(1900,1,1)}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n );\r\n }\r\n\r\n const _buildBirthTime = (idx: number): JSX.Element | null => {\r\n if (typeof birthTime[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n

{formLabels.birthTime}

\r\n _setBirthTime(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'name') {\r\n return (\r\n
\r\n {_buildNameField(idx)}\r\n {_buildBirthDate(idx)}\r\n {_buildBirthTime(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default NameBirthDatetimeForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport DatePicker from 'react-datepicker';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackBirthDate: any;\r\n callbackSchoolName: any;\r\n callbackBlessingOption: any;\r\n callbackNamesEntered?: any;\r\n callbackSchoolsEntered: any;\r\n callbackDateEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst NameBirthdaySchoolForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackEvent, callbackEventID, callbackName, callbackBirthDate, callbackSchoolName, callbackBlessingOption, callbackNamesEntered, callbackSchoolsEntered, callbackDateEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents, allowMultipleRegistrations }) => {\r\n\r\n const [ceremonyValue, setCeremonyValue] = useState(['']);\r\n const [ceremonyIDValue, setCeremonyIDValue] = useState(['']);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [birthDate, setBirthDate] = useState([new Date().toISOString()]);\r\n const [schoolName, setSchoolName] = useState(['']);\r\n const [optionValue, setOptionValue] = useState([resource.optionInPersonLabel[`${localeCode}`]]);\r\n\r\n const formLabels = resource.nameBirthdaySchoolForm[`${localeCode}`];\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setCeremonyNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const valueArray = ceremonyName.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setCeremonyName(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(valueArray);\r\n }\r\n\r\n const _setBirthDate = (value: Date, index: number) => {\r\n const valueArray = birthDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(new Date().toISOString());\r\n }\r\n\r\n if (value) {\r\n valueArray[`${index}`] = value.toISOString();\r\n }\r\n setBirthDate(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n\r\n _checkDateEntered(valueArray);\r\n }\r\n\r\n const _setSchoolName = (name: string, index: number) => {\r\n const valueArray = schoolName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setSchoolName(valueArray);\r\n\r\n callbackSchoolName(valueArray);\r\n\r\n _checkSchoolEntered(valueArray);\r\n }\r\n\r\n const _setOptionValueArray = (value: string, index: number) => {\r\n const valueArray = optionValue.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(resource.optionInPersonLabel[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setOptionValue(valueArray);\r\n\r\n callbackBlessingOption(valueArray);\r\n }\r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkSchoolEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackSchoolsEntered(checked);\r\n }\r\n\r\n const _checkDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`] === null) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackDateEntered(checked);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dateValueArray = birthDate.slice();\r\n const schoolNameArray = schoolName.slice();\r\n const radioValueArray = optionValue.slice();\r\n\r\n ceremonyValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n ceremonyIDValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n ceremonyNameArray.push('');\r\n dateValueArray.push(new Date().toISOString());\r\n schoolNameArray.push('');\r\n radioValueArray.push(resource.optionInPersonLabel[`${localeCode}`]);\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setBirthDate(dateValueArray);\r\n setSchoolName(schoolNameArray);\r\n setOptionValue(radioValueArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackBirthDate(dateValueArray);\r\n callbackSchoolName(schoolNameArray);\r\n callbackBlessingOption(radioValueArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackSchoolsEntered(false);\r\n callbackDateEntered(true);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const blessingOptionArray = optionValue.slice();\r\n const schoolNameArray = schoolName.slice();\r\n const birthDateArray = birthDate.slice();\r\n\r\n if (typeof ceremonyValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyValueArray.length > 1) {\r\n ceremonyValueArray.splice(index, 1);\r\n } else {\r\n ceremonyValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyIDValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyIDValueArray.length > 1) {\r\n ceremonyIDValueArray.splice(index, 1);\r\n } else {\r\n ceremonyIDValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackDateEntered(ceremonyNameArray);\r\n }\r\n\r\n if (typeof blessingOptionArray[`${index}`] !== 'undefined') {\r\n if (blessingOptionArray.length > 1) {\r\n blessingOptionArray.splice(index, 1);\r\n } else {\r\n blessingOptionArray[0] = resource.optionInPersonLabel[`${localeCode}`];\r\n }\r\n\r\n setOptionValue(blessingOptionArray);\r\n\r\n callbackBlessingOption(blessingOptionArray);\r\n }\r\n\r\n if (typeof schoolNameArray[`${index}`] !== 'undefined') {\r\n if (schoolNameArray.length > 1) {\r\n schoolNameArray.splice(index, 1);\r\n } else {\r\n schoolNameArray[0] = '';\r\n }\r\n\r\n setSchoolName(schoolNameArray);\r\n\r\n callbackSchoolName(schoolNameArray);\r\n }\r\n\r\n if (typeof birthDateArray[`${index}`] !== 'undefined') {\r\n if (birthDateArray.length > 1) {\r\n birthDateArray.splice(index, 1);\r\n } else {\r\n birthDateArray[0] = new Date().toISOString();\r\n }\r\n\r\n setBirthDate(birthDateArray);\r\n\r\n callbackName(birthDateArray);\r\n }\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n\r\n _checkNameEntered(ceremonyNameArray);\r\n _checkSchoolEntered(schoolNameArray);\r\n _checkDateEntered(birthDateArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingCeremony: string[] = [];\r\n const existingCeremonyID: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingRadioValue: string[] = [];\r\n const existingSchoolName: string[] = [];\r\n const existingBirthDate: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const birthDate = formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']) : new Date();\r\n\r\n existingCeremony.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n existingCeremonyID.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n existingCeremonyName.push(formItems[`${i}`]['names'][0]);\r\n existingRadioValue.push(formItems[`${i}`]['blessingOption'] !== '' ? formItems[`${i}`]['blessingOption'] : resource.optionInPersonLabel[`${localeCode}`]);\r\n existingSchoolName.push(formItems[`${i}`]['schoolName']);\r\n existingBirthDate.push(birthDate.toISOString());\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n setSchoolName(existingSchoolName);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackSchoolName(existingSchoolName);\r\n\r\n _checkNameEntered(existingCeremonyName);\r\n _checkSchoolEntered(existingSchoolName);\r\n } else {\r\n existingCeremony.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n existingCeremonyID.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n existingBirthDate.push(new Date().toISOString());\r\n existingRadioValue.push(resource.optionInPersonLabel[`${localeCode}`]);\r\n }\r\n\r\n setCeremonyValue(existingCeremony);\r\n setCeremonyIDValue(existingCeremonyID);\r\n setOptionValue(existingRadioValue);\r\n setBirthDate(existingBirthDate);\r\n\r\n callbackEvent(existingCeremony);\r\n callbackEventID(existingCeremonyID);\r\n callbackBlessingOption(existingRadioValue);\r\n callbackBirthDate(existingBirthDate);\r\n\r\n _checkDateEntered(existingBirthDate);\r\n }, [formItems])\r\n\r\n const _buildNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildBirthDate = (idx: number): JSX.Element | null => {\r\n if (typeof birthDate[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.birthDate}

\r\n _setBirthDate(date, idx)}\r\n placeholderText='DD/MM/YYYY'\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildSchoolField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.schoolName}

\r\n _setSchoolName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildOptionField = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.option}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'name') {\r\n return (\r\n
\r\n {_buildNameField(idx)}\r\n {_buildBirthDate(idx)}\r\n {_buildSchoolField(idx)}\r\n {_buildOptionField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default NameBirthdaySchoolForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport DatePicker from 'react-date-picker';\r\n//import Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n//import { toast } from 'react-toastify';\r\n\r\n//import countries from '../resources/countries.json';\r\n//import period from '../../../resources/dedicationPeriod.json';\r\nimport resource from '../resources/resource.json';\r\n//import time from '../resources/time.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState, /*ITimeRange*/ } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackStartDate: any;\r\n callbackName: any;\r\n callbackNamesEntered: any;\r\n callbackDateEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst NamesDedicationStartDateForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackStartDate, callbackName, \r\n callbackNamesEntered, callbackDateEntered, \r\n formItems, config, localeCode, actionContext, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n\r\n const [startDates, setStartDates] = useState(['']);\r\n const [names, setNames] = useState(['']);\r\n \r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.nameDedicationDateForm[`${localeCode}`];\r\n \r\n\r\n const startDate = new Date();\r\n startDate.setDate(startDate.getDate() + 1);\r\n startDate.setHours(0, 0, 0, 0);\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n \r\n\r\n const _setStartDate = (value: Date, index: number) => {\r\n const valueArray = startDates.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(startDate.toISOString());\r\n }\r\n\r\n value.setHours(0, 0, 0, 0);\r\n\r\n const date = value ? value.toISOString() : startDate.toISOString();\r\n\r\n valueArray[`${index}`] = date;\r\n\r\n setStartDates(valueArray);\r\n\r\n callbackStartDate(valueArray);\r\n\r\n _checkDateEntered(valueArray);\r\n }\r\n\r\n const _formatNameInput = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setName(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setName = (name: string, index: number) => {\r\n const valueArray = names.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setNames(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(valueArray);\r\n }\r\n\r\n \r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkDateEntered = (startDatesArray: string[]) => {\r\n let result = true;\r\n\r\n const count = startDatesArray.length;\r\n\r\n for (let i = 0; i < count; i++) {\r\n const startDateInvalid = startDatesArray[`${i}`] === undefined || startDatesArray[`${i}`] === '' ? true : false;\r\n\r\n if (startDateInvalid ) {\r\n result = false; break;\r\n }\r\n }\r\n\r\n callbackDateEntered(result);\r\n }\r\n\r\n \r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multipliersArray = multipliers.slice();\r\n const startDatesArray = startDates.slice();\r\n const namesArray = names.slice();\r\n\r\n startDatesArray.push(startDate.toDateString());\r\n namesArray.push('');\r\n setMultiplers(multipliersArray);\r\n setStartDates(startDatesArray);\r\n setNames(namesArray);\r\n\r\n callbackStartDate(startDatesArray);\r\n callbackName(namesArray);\r\n\r\n callbackNamesEntered(false);\r\n \r\n _checkDateEntered(startDatesArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multipliersArray = multipliers.slice();\r\n const startDatesArray = startDates.slice();\r\n const namesArray = names.slice();\r\n\r\n setMultiplers(multipliersArray);\r\n\r\n\r\n if (typeof startDatesArray[`${index}`] !== 'undefined') {\r\n if (startDatesArray.length > 1) {\r\n startDatesArray.splice(index, 1);\r\n } else {\r\n startDatesArray[0] = startDate.toISOString();\r\n }\r\n\r\n setStartDates(startDatesArray);\r\n\r\n callbackStartDate(startDatesArray);\r\n }\r\n\r\n if (typeof namesArray[`${index}`] !== 'undefined') {\r\n if (namesArray.length > 1) {\r\n namesArray.splice(index, 1);\r\n } else {\r\n namesArray[0] = '';\r\n }\r\n\r\n setNames(namesArray);\r\n\r\n callbackName(namesArray);\r\n }\r\n\r\n _checkNameEntered(namesArray);\r\n _checkDateEntered(startDatesArray);\r\n\r\n }\r\n\r\n useEffect(() => {\r\n const multipliersArray: number[] = [];\r\n const startDatesArray: string[] = [];\r\n const namesArray: string[] = [];\r\n\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n \r\n startDatesArray.push(formItems[`${i}`]['startDate'] ? formItems[`${i}`]['startDate'] : startDate.toISOString());\r\n namesArray.push(formItems[`${i}`]['names'][0]);\r\n\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n setNames(namesArray);\r\n\r\n callbackName(namesArray);\r\n \r\n _checkNameEntered(namesArray);\r\n \r\n } else {\r\n \r\n startDatesArray.push(startDate.toISOString());\r\n \r\n }\r\n\r\n setStartDates(startDatesArray);\r\n\r\n callbackStartDate(startDatesArray);\r\n\r\n _checkDateEntered(startDatesArray);\r\n }, [formItems])\r\n\r\n const _buildDedicationPeriod = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.startDate}

\r\n _setStartDate(date, idx)}\r\n value={startDates[`${idx}`] === '' || startDates[`${idx}`].includes('1900') ? null : new Date(startDates[`${idx}`])}\r\n format={'dd-MM-y'}\r\n minDate={startDate}\r\n className={'datepicker'}\r\n dayPlaceholder={'DD'}\r\n monthPlaceholder={'MM'}\r\n yearPlaceholder={'YYYY'}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name}

\r\n _formatNameInput(event, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete='none'\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'name') {\r\n return (\r\n
\r\n {_buildNameField(idx)}\r\n {_buildDedicationPeriod(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${multipliers[`${idx}`] * selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default NamesDedicationStartDateForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\nimport { toast } from 'react-toastify';\r\nimport countries from '../resources/countries.json';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackCountry: any;\r\n callbackPhoneNumber: any;\r\n callbackNamesEntered?: any;\r\n callbackAddressEntered: any;\r\n callbackPhoneNumbersEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst NamesAddressContactnoForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackEvent, callbackEventID, callbackName, callbackBuilding, callbackUnitNumber, callbackPostalCode, callbackCountry, callbackPhoneNumber, callbackNamesEntered, callbackAddressEntered, callbackPhoneNumbersEntered, formItems, config, localeCode, actionContext, userInfo, isMobile, isEditMode, productEvents, allowMultipleRegistrations }) => {\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [ceremonyValue, setCeremonyValue] = useState(['']);\r\n const [ceremonyIDValue, setCeremonyIDValue] = useState(['']);\r\n const [serialNumber, setSerialNumber] = useState(['']);\r\n const [buildingName, setBuildingName] = useState(['']);\r\n const [unitNumber, setUnitNumber] = useState(['']);\r\n const [postalCode, setPostalCode] = useState(['']);\r\n const [countryName, setCountry] = useState(['']);\r\n const [phoneNumbers, setPhoneNumbers] = useState(['']);\r\n\r\n const formLabels = resource.namesAddressContactnoForm[`${localeCode}`];\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const noOfNames = formScheme.find(form => form.field_type === 'textBox')!.field_number!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n const inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n };\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n };\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setBuildingName(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumber.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setUnitNumber(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n }\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCode.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if(value.length<=6){\r\n valueArray[`${index}`] = value;\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setPostalCode(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setCountry = (event: any, index: number) => {\r\n const valueArray = countryName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setCountry(valueArray);\r\n\r\n callbackCountry(valueArray);\r\n }\r\n\r\n const _setPhoneNumber = (value: string, index: number) => {\r\n const valueArray = phoneNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setPhoneNumbers(valueArray);\r\n\r\n callbackPhoneNumber(valueArray);\r\n\r\n _checkPhoneNumberEntered(valueArray);\r\n }\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _checkAddressEntered = (buildingArray: string[], postalCodeArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < buildingArray.length; ++i) {\r\n result = result && buildingArray[`${i}`] !== '' && postalCodeArray[`${i}`] !== '';\r\n }\r\n\r\n callbackAddressEntered(result);\r\n }\r\n\r\n const _checkPhoneNumberEntered = (phoneNumbersArray: string[]) => {\r\n let phoneNumbersEntered = phoneNumbersArray.length > 0? true: false;\r\n\r\n for (let i = 0; i < phoneNumbersArray.length; i++) {\r\n if (phoneNumbersArray[`${i}`].trim() === '') {\r\n phoneNumbersEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackPhoneNumbersEntered(phoneNumbersEntered);\r\n }\r\n\r\n const _initBuildingField = () => {\r\n if (userValid) {\r\n return userInfo.gmb_blockno.trim() + (userInfo.gmb_buildingno !== '' ? ', ' + userInfo.gmb_buildingno.trim() : '') + (userInfo.gmb_buildingname !== '' ? ', ' + userInfo.gmb_buildingname.trim() : '') + (userInfo.address1_line1 !== '' ? ', ' + userInfo.address1_line1.trim() : '') + (userInfo.address1_city !== '' ? ', ' + userInfo.address1_city.trim() : '');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _initCountryField = () => {\r\n if (userValid) {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n const location = states.find((place: { value: string, label: string }) => place.label.toUpperCase() === userInfo.address1_country.toUpperCase());\r\n\r\n return location ? location.label : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n\r\n ceremonyValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n ceremonyIDValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n ceremonyNameArray.push('');\r\n phoneNumbersArray.push('');\r\n\r\n if (userValid) {\r\n buildingNameArray.push(_initBuildingField());\r\n unitNumberArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodeArray.push(userInfo.address1_postalcode);\r\n countryArray.push(_initCountryField());\r\n } else {\r\n buildingNameArray.push('');\r\n unitNumberArray.push('');\r\n postalCodeArray.push('');\r\n countryArray.push(countries[`${localeCode}`].countries[0].label);\r\n }\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n setBuildingName(buildingNameArray);\r\n setUnitNumber(unitNumberArray);\r\n setPostalCode(postalCodeArray);\r\n setCountry(countryArray);\r\n setPhoneNumbers(phoneNumbersArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n callbackBuilding(buildingNameArray);\r\n callbackUnitNumber(unitNumberArray);\r\n callbackPostalCode(postalCodeArray);\r\n callbackCountry(countryArray);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n\r\n callbackNamesEntered(false);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n\r\n _checkPhoneNumberEntered(phoneNumbersArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const serialNumberArray = serialNumber.slice();\r\n\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n const phoneNumbersArray = phoneNumbers.slice();\r\n\r\n if (typeof ceremonyValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyValueArray.length > 1) {\r\n ceremonyValueArray.splice(index, 1);\r\n } else {\r\n ceremonyValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyIDValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyIDValueArray.length > 1) {\r\n ceremonyIDValueArray.splice(index, 1);\r\n } else {\r\n ceremonyIDValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof serialNumberArray[`${index}`] !== 'undefined') {\r\n if (serialNumberArray.length > 1) {\r\n serialNumberArray.splice(index, 1);\r\n } else {\r\n serialNumberArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof buildingNameArray[`${index}`] !== 'undefined') {\r\n if (buildingNameArray.length > 1) {\r\n buildingNameArray.splice(index, 1);\r\n } else {\r\n buildingNameArray[0] = '';\r\n }\r\n\r\n setBuildingName(buildingNameArray);\r\n\r\n callbackAddressEntered(buildingNameArray);\r\n }\r\n\r\n if (typeof unitNumberArray[`${index}`] !== 'undefined') {\r\n if (unitNumberArray.length > 1) {\r\n unitNumberArray.splice(index, 1);\r\n } else {\r\n unitNumberArray[0] = '';\r\n }\r\n\r\n setUnitNumber(unitNumberArray);\r\n\r\n callbackUnitNumber(unitNumberArray);\r\n }\r\n\r\n if (typeof postalCodeArray[`${index}`] !== 'undefined') {\r\n if (postalCodeArray.length > 1) {\r\n postalCodeArray.splice(index, 1);\r\n } else {\r\n postalCodeArray[0] = '';\r\n }\r\n\r\n setPostalCode(postalCodeArray);\r\n\r\n callbackPostalCode(postalCodeArray);\r\n }\r\n\r\n if (typeof countryArray[`${index}`] !== 'undefined') {\r\n if (countryArray.length > 1) {\r\n countryArray.splice(index, 1);\r\n } else {\r\n countryArray[0] = countries[`${localeCode}`].countries[0].label;\r\n }\r\n\r\n setCountry(countryArray);\r\n\r\n callbackCountry(countryArray);\r\n }\r\n\r\n if (typeof phoneNumbersArray[`${index}`] !== 'undefined') {\r\n if (phoneNumbersArray.length > 1) {\r\n phoneNumbersArray.splice(index, 1);\r\n } else {\r\n phoneNumbersArray[0] = '';\r\n }\r\n\r\n setPhoneNumbers(phoneNumbersArray);\r\n\r\n callbackPhoneNumber(phoneNumbersArray);\r\n }\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setSerialNumber(serialNumberArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n\r\n _checkPhoneNumberEntered(phoneNumbersArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingEventName: string[] = [];\r\n const existingEventID: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n\r\n const existingBuildingName: string[] = [];\r\n const existingUnitNumber: string[] = [];\r\n const existingPostalCode: string[] = [];\r\n const existingCountry: string[] = [];\r\n const phoneNumbersArray: string[] = [];\r\n\r\n // formItems could possibly be populated by past transactions/drafts/coming from cart.\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemCommentParts = formItems[`${i}`]['names'];\r\n \r\n let count = 0;\r\n let ceremonyName = '';\r\n\r\n while (typeof itemCommentParts[`${count}`] !== 'undefined') {\r\n ceremonyName += itemCommentParts[`${count}`];\r\n\r\n if (typeof itemCommentParts[count + 1] !== 'undefined') {\r\n ceremonyName += ';';\r\n }\r\n\r\n count++;\r\n }\r\n\r\n const eventName = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n const eventID = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n\r\n existingEventName.push(eventName);\r\n existingEventID.push(eventID);\r\n existingCeremonyName.push(ceremonyName);\r\n\r\n existingBuildingName.push(formItems[`${i}`]['buildingName']);\r\n existingUnitNumber.push(formItems[`${i}`]['unitNumber']);\r\n existingPostalCode.push(formItems[`${i}`]['postalCode']);\r\n existingCountry.push(formItems[`${i}`]['country']);\r\n phoneNumbersArray.push(formItems[`${i}`]['phoneNumber']);\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n setPhoneNumbers(phoneNumbersArray);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n\r\n _checkNamesEntered(existingCeremonyName);\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n _checkPhoneNumberEntered(phoneNumbersArray);\r\n } else {\r\n const eventName = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n const eventID = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n\r\n existingEventName.push(eventName);\r\n existingEventID.push(eventID);\r\n phoneNumbersArray.push('');\r\n\r\n if (userValid) {\r\n existingBuildingName.push(_initBuildingField());\r\n existingUnitNumber.push(userInfo.gmb_unitnofloorapartmentno);\r\n existingPostalCode.push(userInfo.address1_postalcode);\r\n existingCountry.push(_initCountryField());\r\n\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n setPhoneNumbers(phoneNumbersArray);\r\n\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n callbackPhoneNumber(phoneNumbersArray);\r\n\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n _checkPhoneNumberEntered(phoneNumbersArray);\r\n }\r\n }\r\n\r\n setCeremonyValue(existingEventName);\r\n setCeremonyIDValue(existingEventID);\r\n\r\n callbackEvent(existingEventName);\r\n callbackEventID(existingEventID);\r\n }, [formItems]);\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name.endsWith('*') ? nameIndex === 0 ? formLabels.name.substring(0, formLabels.name.length - 1) + ' ' + (nameIndex + 1) + '*' : formLabels.name.replace('*', ' ' + (nameIndex + 1)) : formLabels.name + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n const _buildAddressField = (idx: number): JSX.Element => {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n return (\r\n
\r\n

{formLabels.addressPrompt}

\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={buildingName[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={unitNumber[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n _setCountry(event, idx)}\r\n className={'select'}\r\n isSearchable={true}\r\n />\r\n
\r\n
\r\n\r\n
\r\n

{formLabels.addressPhone}

\r\n _setPhoneNumber(event.target.value, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'name') {\r\n return (\r\n
\r\n {noOfNames > 0 && _buildNameGroup(idx, noOfNames)}\r\n {_buildAddressField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default NamesAddressContactnoForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst NamesOnlyForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackEvent, callbackEventID, callbackName, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents, allowMultipleRegistrations }) => {\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [ceremonyValue, setCeremonyValue] = useState(['']);\r\n const [ceremonyIDValue, setCeremonyIDValue] = useState(['']);\r\n const [serialNumber, setSerialNumber] = useState(['']);\r\n\r\n const formLabels = resource.namesOnlyForm[`${localeCode}`];\r\n\r\n const noOfNames = formScheme.find(form => form.field_type === 'textBox')!.field_number!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n const inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n };\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n };\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n ceremonyValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n ceremonyIDValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n ceremonyNameArray.push('');\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const serialNumberArray = serialNumber.slice();\r\n\r\n if (typeof ceremonyValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyValueArray.length > 1) {\r\n ceremonyValueArray.splice(index, 1);\r\n } else {\r\n ceremonyValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyIDValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyIDValueArray.length > 1) {\r\n ceremonyIDValueArray.splice(index, 1);\r\n } else {\r\n ceremonyIDValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof serialNumberArray[`${index}`] !== 'undefined') {\r\n if (serialNumberArray.length > 1) {\r\n serialNumberArray.splice(index, 1);\r\n } else {\r\n serialNumberArray[0] = '';\r\n }\r\n }\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setSerialNumber(serialNumberArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingEventName: string[] = [];\r\n const existingEventID: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n\r\n // formItems could possibly be populated by past transactions/drafts/coming from cart.\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemCommentParts = formItems[`${i}`]['names'];\r\n \r\n let count = 0;\r\n let ceremonyName = '';\r\n\r\n while (typeof itemCommentParts[`${count}`] !== 'undefined') {\r\n ceremonyName += itemCommentParts[`${count}`];\r\n\r\n if (typeof itemCommentParts[count + 1] !== 'undefined') {\r\n ceremonyName += ';';\r\n }\r\n\r\n count++;\r\n }\r\n\r\n const eventName = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n const eventID = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n\r\n existingEventName.push(eventName);\r\n existingEventID.push(eventID);\r\n existingCeremonyName.push(ceremonyName);\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n\r\n callbackName(existingCeremonyName);\r\n\r\n _checkNamesEntered(existingCeremonyName);\r\n } else {\r\n const eventName = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n const eventID = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n\r\n existingEventName.push(eventName);\r\n existingEventID.push(eventID);\r\n }\r\n\r\n setCeremonyValue(existingEventName);\r\n setCeremonyIDValue(existingEventID);\r\n\r\n callbackEvent(existingEventName);\r\n callbackEventID(existingEventID);\r\n }, [formItems]);\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name.endsWith('*') ? nameIndex === 0 ? formLabels.name.substring(0, formLabels.name.length - 1) + ' ' + (nameIndex + 1) + '*' : formLabels.name.replace('*', ' ' + (nameIndex + 1)) : formLabels.name + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'name') {\r\n return (\r\n
\r\n {noOfNames > 0 && _buildNameGroup(idx, noOfNames)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default NamesOnlyForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackEvent?: any;\r\n callbackEventID?: any;\r\n callbackName?: any;\r\n callbackRemarks?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n productEvents: any[];\r\n allowMultipleRegistrations: boolean;\r\n showRemarksField: boolean;\r\n}\r\n\r\nconst NamesRemarksForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackEvent, callbackEventID, callbackName, callbackRemarks, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, productEvents, allowMultipleRegistrations,showRemarksField }) => {\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [ceremonyValue, setCeremonyValue] = useState(['']);\r\n const [ceremonyIDValue, setCeremonyIDValue] = useState(['']);\r\n const [serialNumber, setSerialNumber] = useState(['']);\r\n const [remark, setRemark] = useState(['']);\r\n\r\n const formLabels = resource.namesRemarksForm[`${localeCode}`];\r\n\r\n const noOfNames = formScheme.find(form => form.field_type === 'textBox')!.field_number!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n const inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n };\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n };\r\n\r\n const _setRemarksInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 100;\r\n\r\n _setRemarkArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setRemarkArray = (name: string, index: number) => {\r\n const remarkArray = remark.slice();\r\n\r\n while (typeof remarkArray[`${index}`] === 'undefined') {\r\n remarkArray.push('');\r\n }\r\n\r\n remarkArray[`${index}`] = name;\r\n\r\n remarkArray[`${index}`].trim();\r\n\r\n setRemark(remarkArray);\r\n\r\n callbackRemarks(remarkArray);\r\n }\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const remarkArray = remark.slice();\r\n\r\n ceremonyValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '');\r\n ceremonyIDValueArray.push(productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '');\r\n ceremonyNameArray.push('');\r\n remarkArray.push('');\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setRemark(remarkArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackRemarks(remarkArray);\r\n\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const ceremonyValueArray = ceremonyValue.slice();\r\n const ceremonyIDValueArray = ceremonyIDValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const serialNumberArray = serialNumber.slice();\r\n const remarkArray = remark.slice();\r\n\r\n if (typeof ceremonyValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyValueArray.length > 1) {\r\n ceremonyValueArray.splice(index, 1);\r\n } else {\r\n ceremonyValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyIDValueArray[`${index}`] !== 'undefined') {\r\n if (ceremonyIDValueArray.length > 1) {\r\n ceremonyIDValueArray.splice(index, 1);\r\n } else {\r\n ceremonyIDValueArray[0] = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof serialNumberArray[`${index}`] !== 'undefined') {\r\n if (serialNumberArray.length > 1) {\r\n serialNumberArray.splice(index, 1);\r\n } else {\r\n serialNumberArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof remarkArray[`${index}`] !== 'undefined') {\r\n if (remarkArray.length > 1) {\r\n remarkArray.splice(index, 1);\r\n } else {\r\n remarkArray[0] = '';\r\n }\r\n }\r\n\r\n setCeremonyValue(ceremonyValueArray);\r\n setCeremonyIDValue(ceremonyIDValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setSerialNumber(serialNumberArray);\r\n setRemark(remarkArray);\r\n\r\n callbackEvent(ceremonyValueArray);\r\n callbackEventID(ceremonyIDValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackRemarks(remarkArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingEventName: string[] = [];\r\n const existingEventID: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingRemark: string[] = [];\r\n\r\n // formItems could possibly be populated by past transactions/drafts/coming from cart.\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemCommentParts = formItems[`${i}`]['names'];\r\n \r\n let count = 0;\r\n let ceremonyName = '';\r\n\r\n while (typeof itemCommentParts[`${count}`] !== 'undefined') {\r\n ceremonyName += itemCommentParts[`${count}`];\r\n\r\n if (typeof itemCommentParts[count + 1] !== 'undefined') {\r\n ceremonyName += ';';\r\n }\r\n\r\n count++;\r\n }\r\n\r\n const eventName = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n const eventID = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n\r\n existingEventName.push(eventName);\r\n existingEventID.push(eventID);\r\n existingCeremonyName.push(ceremonyName);\r\n existingRemark.push(formItems[`${i}`]['remarks']);\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n setRemark(existingRemark);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackRemarks(existingRemark);\r\n\r\n _checkNamesEntered(existingCeremonyName);\r\n } else {\r\n const eventName = productEvents && productEvents.length > 0 ? productEvents[0]['name'] : '';\r\n const eventID = productEvents && productEvents.length > 0 ? productEvents[0]['id'] : '';\r\n\r\n existingEventName.push(eventName);\r\n existingEventID.push(eventID);\r\n }\r\n\r\n setCeremonyValue(existingEventName);\r\n setCeremonyIDValue(existingEventID);\r\n\r\n callbackEvent(existingEventName);\r\n callbackEventID(existingEventID);\r\n }, [formItems]);\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name.endsWith('*') ? nameIndex === 0 ? formLabels.name.substring(0, formLabels.name.length - 1) + ' ' + (nameIndex + 1) + '*' : formLabels.name.replace('*', ' ' + (nameIndex + 1)) : formLabels.name + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n const _buildRemarks = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.remarks}

\r\n _setRemarksInputValue(event, idx)}\r\n className='form-control'\r\n maxLength={config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 101}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'name') {\r\n return (\r\n
\r\n {noOfNames > 0 && _buildNameGroup(idx, noOfNames)}\r\n {showRemarksField && _buildRemarks(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default NamesRemarksForm;","import React, { useState, useEffect } from \"react\";\r\n\r\nimport { useForm } from \"react-hook-form\";\r\n\r\nimport moment from \"moment\";\r\n\r\nimport resource from \"../resources/resource.json\";\r\n\r\nimport { getCartState } from \"@msdyn365-commerce/global-state\";\r\nimport { SimpleProduct, AsyncResult } from \"@msdyn365-commerce/retail-proxy\";\r\n\r\nimport {\r\n deleteBTGPCartLineAsync,\r\n getAllBTGPCartLineAsync,\r\n} from \"../../../actions/DataActionExtension.g\";\r\n\r\nimport { IField, IdState } from \"../ecomm-product-details-form.data\";\r\nimport { IEcommProductDetailsFormConfig } from \"../ecomm-product-details-form.props.autogenerated\";\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n renewableLamps: [];\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n replaceRow(noOfRows: number, idx: number[]): void;\r\n deleteRow(idx: number): void;\r\n removeLamp(serialId: string): void;\r\n callbackName?: any;\r\n callbackCategory?: any;\r\n callbackNoOfYear?: any;\r\n callbackLightOption?: any;\r\n callbackValidFrom?: any;\r\n callbackValidTo?: any;\r\n callbackOldName?: any;\r\n callbackNameChange?: any;\r\n callbackSerialNumber?: any;\r\n callbackSerialId?: any;\r\n callbackSerialNames: any;\r\n callbackNamesEntered?: any;\r\n formItems: any[];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n addRenewLamp: boolean;\r\n itemUnavailable: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst NoOfYearsCategoryNamesForm: React.FC = ({\r\n formScheme,\r\n selectedProduct,\r\n renewableLamps,\r\n rowsData,\r\n addRow,\r\n replaceRow,\r\n deleteRow,\r\n removeLamp,\r\n callbackName,\r\n callbackCategory,\r\n callbackNoOfYear,\r\n callbackLightOption,\r\n callbackValidFrom,\r\n callbackValidTo,\r\n callbackOldName,\r\n callbackNameChange,\r\n callbackSerialId,\r\n callbackSerialNumber,\r\n callbackSerialNames,\r\n callbackNamesEntered,\r\n formItems,\r\n config,\r\n localeCode,\r\n actionContext,\r\n isMobile,\r\n isEditMode,\r\n addRenewLamp,\r\n itemUnavailable,\r\n allowMultipleRegistrations\r\n}) => {\r\n const [serialNumberValue, setSerialNumberValue] = useState([\"\"]);\r\n const [serialIdValue, setSerialIdValue] = useState([\"\"]);\r\n const [serialNames, setSerialNames] = useState([\"\"]);\r\n const [lightValue, setLightValue] = useState([\"New\"]);\r\n const [yearValue, setYearValue] = useState([1]);\r\n const [startYearValue, setStartYearValue] = useState([\r\n new Date().toISOString(),\r\n ]);\r\n const [endYearValue, setEndYearValue] = useState([\r\n new Date(\r\n new Date().setFullYear(new Date().getFullYear() + 1)\r\n ).toISOString(),\r\n ]);\r\n const [nameChangeValue, setNameChangeValue] = useState([\"\"]);\r\n const [oldNameValue, setOldNameValue] = useState([\"\"]);\r\n const [radioValue, setRadioValue] = useState([\r\n resource.categoryFamilyLabel[`${localeCode}`],\r\n ]);\r\n const [ceremonyName, setCeremonyName] = useState([\"\"]);\r\n //const [clickAddItem, setAddItem] = useState(false);\r\n\r\n const formLabels = resource.noOfYearsCategoryNamesForm[`${localeCode}`];\r\n const noOfNames = formScheme.find((form) => form.field_type === \"textBox\")!\r\n .field_number!;\r\n const companyNames = formScheme.find((form) => form.field_type === \"textBox\")!\r\n .field_number2!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _onChangeYearValue = (event: any, index: number) => {\r\n _setYearValueArray(event.target.value, index);\r\n _setValidValueArray(event.target.value, index);\r\n };\r\n\r\n const _onChangeNameChangeValue = (event: any, index: number) => {\r\n _setNameChangeValueArray(event.target.value, index);\r\n _setOldNameValueArray(event.target.value, index);\r\n };\r\n\r\n const _onChangeRadioValue = (event: any, index: number) => {\r\n _setRadioValueArray(event.target.value, index);\r\n\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n let existingCeremonyName = ceremonyNameArray[`${index}`];\r\n\r\n const existingNameArray = existingCeremonyName.split(\";\");\r\n\r\n if (event.target.value === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < noOfNames) {\r\n existingCeremonyName += \";\".repeat(\r\n noOfNames - existingNameArray.length - 1\r\n );\r\n } else {\r\n // More than\r\n while (existingNameArray.length > noOfNames) {\r\n existingNameArray.pop();\r\n }\r\n\r\n existingCeremonyName = existingNameArray.join(\";\");\r\n }\r\n } else {\r\n if (existingNameArray.length < companyNames) {\r\n existingCeremonyName += \";\".repeat(\r\n companyNames - existingNameArray.length - 1\r\n );\r\n } else {\r\n // More than\r\n while (existingNameArray.length > companyNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(\";\");\r\n }\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = existingCeremonyName;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n };\r\n\r\n const _setNameChangeValueArray = (value: string, index: number) => {\r\n const nameChangeValueArray = nameChangeValue.slice();\r\n\r\n while (typeof nameChangeValueArray[`${index}`] === \"undefined\") {\r\n nameChangeValueArray.push(\"\");\r\n }\r\n\r\n nameChangeValueArray[`${index}`] = value;\r\n\r\n nameChangeValueArray[`${index}`].trim();\r\n\r\n setNameChangeValue(nameChangeValueArray);\r\n callbackNameChange(nameChangeValueArray);\r\n };\r\n\r\n const _setOldNameValueArray = (value: string, index: number) => {\r\n const oldNameValueArray = oldNameValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof oldNameValueArray[`${index}`] === \"undefined\") {\r\n oldNameValueArray.push(\"\");\r\n }\r\n\r\n if (oldNameValueArray[`${index}`] === \"\") {\r\n if (value === \"Yes\") {\r\n oldNameValueArray[`${index}`] = ceremonyName[`${index}`];\r\n }\r\n\r\n setOldNameValue(oldNameValueArray);\r\n callbackOldName(oldNameValueArray);\r\n } else {\r\n if (value === \"No\") {\r\n ceremonyNameArray[`${index}`] = oldNameValueArray[`${index}`];\r\n oldNameValueArray[`${index}`] = \"\";\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n callbackName(ceremonyNameArray);\r\n setOldNameValue(oldNameValueArray);\r\n callbackOldName(oldNameValueArray);\r\n }\r\n }\r\n };\r\n\r\n const _setYearValueArray = (value: string, index: number) => {\r\n let yearValueArray = yearValue.slice();\r\n\r\n while (typeof yearValueArray[`${index}`] === \"undefined\") {\r\n yearValueArray.push(1);\r\n }\r\n\r\n yearValueArray[`${index}`] = +value;\r\n\r\n setYearValue(yearValueArray);\r\n callbackNoOfYear(yearValueArray);\r\n };\r\n\r\n const _setValidValueArray = (value: string, index: number) => {\r\n let startYearValueArray = startYearValue.slice();\r\n let endYearValueArray = endYearValue.slice();\r\n\r\n while (typeof startYearValueArray[`${index}`] === \"undefined\") {\r\n startYearValueArray.push(new Date().toISOString());\r\n }\r\n\r\n while (typeof endYearValueArray[`${index}`] === \"undefined\") {\r\n endYearValueArray.push(\r\n new Date(\r\n new Date().setFullYear(new Date().getFullYear() + 1)\r\n ).toISOString()\r\n );\r\n }\r\n\r\n startYearValueArray[`${index}`] = new Date(\r\n startYearValueArray[`${index}`]\r\n ).toISOString();\r\n endYearValueArray[`${index}`] = new Date(\r\n new Date(startYearValueArray[`${index}`]).setFullYear(\r\n new Date(startYearValueArray[`${index}`]).getFullYear() + +value\r\n )\r\n ).toISOString();\r\n\r\n setStartYearValue(startYearValueArray);\r\n setEndYearValue(endYearValueArray);\r\n callbackValidFrom(startYearValueArray);\r\n callbackValidTo(endYearValueArray);\r\n };\r\n\r\n const _setRadioValueArray = (value: string, index: number) => {\r\n let radioValueArray = radioValue.slice();\r\n\r\n while (typeof radioValueArray[`${index}`] === \"undefined\") {\r\n radioValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n radioValueArray[`${index}`] = value;\r\n\r\n setRadioValue(radioValueArray);\r\n\r\n callbackCategory(radioValueArray);\r\n };\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(\";\");\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : \"\";\r\n }\r\n\r\n return \"\";\r\n };\r\n\r\n const _setNameMultipleInputValue = (\r\n event: any,\r\n index: number,\r\n nameIndex: number,\r\n noOfNames: number\r\n ) => {\r\n const maxLength = config.charactersLimitForNames\r\n ? config.charactersLimitForNames\r\n : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (!inputMultipleName.includes(\";\")) {\r\n inputMultipleName += \";\".repeat(noOfNames - 1);\r\n }\r\n\r\n let inputMutlipleNameSplit = inputMultipleName.split(\";\");\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(\";\");\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n };\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === \"undefined\") {\r\n ceremonyNameArray.push(\"\");\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n };\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[]) => {\r\n let namesEntered = true;\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, \"\").trim() === \"\") {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n };\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const serialNumberValueArray = serialNumberValue.slice();\r\n const serialIdValueArray = serialIdValue.slice();\r\n const serialNamesArray = serialNames.slice();\r\n const lightOptionValueArray = lightValue.slice();\r\n const startYearValueArray = startYearValue.slice();\r\n const endYearValueArray = endYearValue.slice();\r\n const yearValueArray = yearValue.slice();\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n serialNumberValueArray.push(\"\");\r\n serialIdValueArray.push(\"\");\r\n serialNamesArray.push(\"\");\r\n lightOptionValueArray.push(\"New\");\r\n startYearValueArray.push(new Date().toISOString());\r\n endYearValueArray.push(\r\n new Date(\r\n new Date().setFullYear(new Date().getFullYear() + 1)\r\n ).toISOString()\r\n );\r\n yearValueArray.push(1);\r\n categoryValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n ceremonyNameArray.push(\"\");\r\n\r\n setSerialNumberValue(serialNumberValueArray);\r\n setSerialIdValue(serialIdValueArray);\r\n setSerialNames(serialNamesArray);\r\n setLightValue(lightOptionValueArray);\r\n setStartYearValue(startYearValueArray);\r\n setEndYearValue(endYearValueArray);\r\n setYearValue(yearValueArray);\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackSerialNumber(serialNumberValueArray);\r\n callbackSerialId(serialIdValueArray);\r\n callbackSerialNames(serialNamesArray);\r\n callbackLightOption(lightOptionValueArray);\r\n callbackValidFrom(startYearValueArray);\r\n callbackValidTo(endYearValueArray);\r\n callbackNoOfYear(yearValueArray);\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n\r\n callbackNamesEntered(false);\r\n };\r\n\r\n const _addItemRenewSerial = async () => {\r\n let serialNumberValueArray = serialNumberValue.slice();\r\n let serialIdValueArray = serialIdValue.slice();\r\n let serialNamesArray = serialNames.slice();\r\n let lightOptionValueArray = lightValue.slice();\r\n let startYearValueArray = startYearValue.slice();\r\n let endYearValueArray = endYearValue.slice();\r\n let yearValueArray = yearValue.slice();\r\n let categoryValueArray = radioValue.slice();\r\n let ceremonyNameArray = ceremonyName.slice();\r\n let nameChangeValueArray = nameChangeValue.slice();\r\n let oldNameValueArray = oldNameValue.slice();\r\n\r\n let indexArray = [];\r\n \r\n\r\n for(let j=0; j< serialNumberValue.length; j++){\r\n\r\n for (let i = 0; i < serialNumberValueArray.length; i++) {\r\n if (\r\n serialNumberValueArray[`${i}`] == \"\" &&\r\n lightOptionValueArray[`${i}`] == \"New\" &&\r\n ceremonyNameArray[`${i}`] == \"\"\r\n ) {\r\n\r\n indexArray.push(i);\r\n\r\n serialNumberValueArray.splice(i,1);\r\n serialIdValueArray.splice(i,1);\r\n serialNamesArray.splice(i,1);\r\n lightOptionValueArray.splice(i,1);\r\n startYearValueArray.splice(i,1);\r\n endYearValueArray.splice(i,1);\r\n yearValueArray.splice(i,1);\r\n categoryValueArray.splice(i,1);\r\n ceremonyNameArray.splice(i,1);\r\n nameChangeValueArray.splice(i,1);\r\n\r\n break\r\n }\r\n }\r\n }\r\n\r\n let numberOfLamps = 0;\r\n\r\n for (let i = 0; i < renewableLamps.length; i++) {\r\n if (\r\n renewableLamps[`${i}`][\"isAdded\"] == false &&\r\n renewableLamps[`${i}`][\"isChecked\"] == true &&\r\n serialIdValueArray.findIndex(\r\n (id) => id === renewableLamps[`${i}`][\"serialId\"]\r\n ) < 0\r\n ) {\r\n numberOfLamps++;\r\n\r\n serialNumberValueArray.push(renewableLamps[`${i}`][\"serialNumber\"]);\r\n serialIdValueArray.push(renewableLamps[`${i}`][\"serialId\"]);\r\n serialNamesArray.push(renewableLamps[`${i}`][\"serialName\"]);\r\n lightOptionValueArray.push(\"Renew\");\r\n startYearValueArray.push(\r\n new Date(renewableLamps[`${i}`][\"validTo\"]).toISOString()\r\n );\r\n endYearValueArray.push(\r\n new Date(\r\n new Date(renewableLamps[`${i}`][\"validTo\"]).setFullYear(\r\n new Date(renewableLamps[`${i}`][\"validTo\"]).getFullYear() + 1\r\n )\r\n ).toISOString()\r\n );\r\n yearValueArray.push(1);\r\n categoryValueArray.push(renewableLamps[`${i}`][\"category\"]);\r\n ceremonyNameArray.push(\r\n renewableLamps[`${i}`][\"name_1\"] +\r\n \";\" +\r\n renewableLamps[`${i}`][\"name_2\"]\r\n );\r\n nameChangeValueArray.push(\"No\");\r\n oldNameValueArray.push(\"\");\r\n }\r\n }\r\n\r\n if (indexArray.length > 0) {\r\n replaceRow(numberOfLamps, indexArray);\r\n } else {\r\n addRow(numberOfLamps);\r\n }\r\n \r\n\r\n setSerialNumberValue(serialNumberValueArray);\r\n setSerialIdValue(serialIdValueArray);\r\n setSerialNames(serialNamesArray);\r\n setLightValue(lightOptionValueArray);\r\n setStartYearValue(startYearValueArray);\r\n setEndYearValue(endYearValueArray);\r\n setYearValue(yearValueArray);\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setNameChangeValue(nameChangeValueArray);\r\n\r\n callbackSerialNumber(serialNumberValueArray);\r\n callbackSerialId(serialIdValueArray);\r\n callbackSerialNames(serialNamesArray);\r\n callbackLightOption(lightOptionValueArray);\r\n callbackValidFrom(startYearValueArray);\r\n callbackValidTo(endYearValueArray);\r\n callbackNoOfYear(yearValueArray);\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackNameChange(nameChangeValueArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n };\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== \"undefined\") {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync(\r\n { callerContext: actionContext },\r\n cartState.cart.Id\r\n );\r\n\r\n if (cartItems.length > 0 && formItems[`${index}`][\"cartLineId\"]) {\r\n let removeCartLinesResult = await cartState.removeCartLines({\r\n cartLineIds: [formItems[`${index}`][\"cartLineId\"]],\r\n });\r\n\r\n if (removeCartLinesResult.status === \"SUCCESS\") {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync(\r\n { callerContext: actionContext },\r\n formItems[`${index}`][\"cartLineId\"]\r\n );\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n };\r\n\r\n const _updateStateData = (index: number) => {\r\n const serialNumberValueArray = serialNumberValue.slice();\r\n const serialIdValueArray = serialIdValue.slice();\r\n const serialNamesArray = serialNames.slice();\r\n const lightOptionValueArray = lightValue.slice();\r\n const startYearValueArray = startYearValue.slice();\r\n const endYearValueArray = endYearValue.slice();\r\n const yearValueArray = yearValue.slice();\r\n const nameChangeArray = nameChangeValue.slice();\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const oldNameArray = oldNameValue.slice();\r\n\r\n\r\n if (typeof serialNumberValueArray[`${index}`] !== \"undefined\") {\r\n if (serialNumberValueArray.length > 1) {\r\n serialNumberValueArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable) {\r\n serialNumberValueArray[0] = \"\";\r\n }\r\n }\r\n\r\n if (typeof serialIdValueArray[`${index}`] !== \"undefined\") {\r\n if (serialIdValueArray[`${index}`] !== \"\") {\r\n removeLamp(serialIdValueArray[`${index}`]);\r\n }\r\n if (serialIdValueArray.length > 1) {\r\n serialIdValueArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable) {\r\n serialIdValueArray[0] = \"\";\r\n }\r\n }\r\n\r\n if (typeof serialNamesArray[`${index}`] !== \"undefined\") {\r\n\r\n if (serialNamesArray.length > 1) {\r\n \r\n serialNamesArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable){\r\n serialNamesArray[0] = \"\";\r\n }\r\n }\r\n\r\n if (typeof lightOptionValueArray[`${index}`] !== \"undefined\") {\r\n\r\n if (lightOptionValueArray.length > 1) {\r\n lightOptionValueArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable){\r\n lightOptionValueArray[0] = \"New\";\r\n }\r\n }\r\n\r\n if (typeof startYearValueArray[`${index}`] !== \"undefined\") {\r\n\r\n if (startYearValueArray.length > 1) {\r\n startYearValueArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable) {\r\n startYearValueArray[0] = new Date().toISOString();\r\n }\r\n }\r\n\r\n if (typeof endYearValueArray[`${index}`] !== \"undefined\") {\r\n\r\n if (endYearValueArray.length > 1) {\r\n endYearValueArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable) {\r\n endYearValueArray[0] = new Date(\r\n new Date().setFullYear(new Date().getFullYear() + 1)\r\n ).toISOString();\r\n }\r\n }\r\n\r\n if (typeof yearValueArray[`${index}`] !== \"undefined\") {\r\n\r\n if (yearValueArray.length > 1) {\r\n yearValueArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable) {\r\n yearValueArray[0] = 1;\r\n }\r\n }\r\n\r\n if (typeof nameChangeArray[`${index}`] !== \"undefined\") {\r\n\r\n if (nameChangeArray.length > 1) {\r\n nameChangeArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable) {\r\n nameChangeArray[0] = \"\";\r\n }\r\n }\r\n\r\n if (typeof categoryValueArray[`${index}`] !== \"undefined\") {\r\n\r\n if (categoryValueArray.length > 1) {\r\n categoryValueArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable) {\r\n categoryValueArray[0] = resource.categoryFamilyLabel[`${localeCode}`];\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== \"undefined\") {\r\n\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable) {\r\n ceremonyNameArray[0] = \"\";\r\n }\r\n }\r\n\r\n if (typeof oldNameArray[`${index}`] !== \"undefined\") {\r\n\r\n if (oldNameArray.length >= 1) {\r\n oldNameArray.splice(index, 1);\r\n } \r\n else if(!itemUnavailable) {\r\n oldNameArray[0] = \"\";\r\n }\r\n }\r\n\r\n setSerialNumberValue(serialNumberValueArray);\r\n setSerialIdValue(serialIdValueArray);\r\n setSerialNames(serialNamesArray);\r\n setLightValue(lightOptionValueArray);\r\n setStartYearValue(startYearValueArray);\r\n setEndYearValue(endYearValueArray);\r\n setYearValue(yearValueArray);\r\n setNameChangeValue(nameChangeArray);\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setOldNameValue(oldNameArray);\r\n\r\n callbackSerialNumber(serialNumberValueArray);\r\n callbackSerialId(serialIdValueArray);\r\n callbackSerialNames(serialNamesArray);\r\n callbackLightOption(lightOptionValueArray);\r\n callbackValidFrom(startYearValueArray);\r\n callbackValidTo(endYearValueArray);\r\n callbackNoOfYear(yearValueArray);\r\n callbackNameChange(nameChangeArray);\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackOldName(oldNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray);\r\n };\r\n\r\n useEffect(() => {\r\n const existingCeremonyName: string[] = [];\r\n const existingStartYearValue: string[] = [];\r\n const existingEndYearValue: string[] = [];\r\n const existingYearValue: number[] = [];\r\n const existingRadioValue: string[] = [];\r\n const existingLightOptionValue: string[] = [];\r\n const existingNameChangeValue: string[] = [];\r\n const existingOldNameValue: string[] = [];\r\n\r\n if (\r\n formItems.length > 0 &&\r\n typeof formItems[0][\"isPastTransaction\"] !== \"undefined\" &&\r\n formItems[0][\"isPastTransaction\"] != true\r\n ) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const itemNames: string[] = formItems[`${i}`][\"names\"];\r\n const itemYear = formItems[`${i}`][\"quantity\"];\r\n const itemCategory = formItems[`${i}`][\"category\"];\r\n const itemLightOption = formItems[`${i}`][\"lightOption\"];\r\n const itemValidFrom = formItems[`${i}`][\"validFrom\"];\r\n const itemValidTo = formItems[`${i}`][\"validTo\"];\r\n const itemNameChange = formItems[`${i}`][\"nameChange\"];\r\n const itemOldName_1 = formItems[`${i}`][\"oldName_1\"];\r\n const itemOldName_2 = formItems[`${i}`][\"oldName_2\"];\r\n\r\n let itemNameCount = 0;\r\n\r\n if (itemCategory === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n itemNameCount = noOfNames;\r\n } else {\r\n itemNameCount = companyNames;\r\n }\r\n\r\n let itemName = \"\";\r\n\r\n itemNames.map((name, index) => {\r\n if (index != 0 && index < itemNameCount) {\r\n itemName += \";\" + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n existingCeremonyName.push(itemName);\r\n\r\n if (itemValidFrom) {\r\n existingStartYearValue.push(new Date(itemValidFrom).toISOString());\r\n } else {\r\n existingStartYearValue.push(new Date().toISOString());\r\n }\r\n\r\n if (itemValidTo) {\r\n existingEndYearValue.push(new Date(itemValidTo).toISOString());\r\n } else {\r\n existingEndYearValue.push(\r\n new Date(\r\n new Date().setFullYear(new Date().getFullYear() + itemYear)\r\n ).toISOString()\r\n );\r\n }\r\n\r\n existingYearValue.push(itemYear);\r\n existingRadioValue.push(itemCategory);\r\n existingLightOptionValue.push(\r\n itemLightOption !== \"\" ? itemLightOption : \"New\"\r\n );\r\n existingNameChangeValue.push(itemNameChange);\r\n\r\n if (itemOldName_1 !== \"\") {\r\n let oldName = itemOldName_1 + \";\" + itemOldName_2;\r\n existingOldNameValue.push(oldName);\r\n }\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n setStartYearValue(existingStartYearValue);\r\n setEndYearValue(existingEndYearValue);\r\n setYearValue(existingYearValue);\r\n setRadioValue(existingRadioValue);\r\n setLightValue(existingLightOptionValue);\r\n setNameChangeValue(existingNameChangeValue);\r\n setOldNameValue(existingOldNameValue);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackValidFrom(existingStartYearValue);\r\n callbackValidTo(existingEndYearValue);\r\n callbackNoOfYear(existingYearValue);\r\n callbackCategory(existingRadioValue);\r\n callbackLightOption(existingLightOptionValue);\r\n callbackNameChange(existingNameChangeValue);\r\n callbackOldName(existingOldNameValue);\r\n\r\n _checkNamesEntered(existingCeremonyName);\r\n } else {\r\n callbackCategory(radioValue);\r\n callbackLightOption(lightValue);\r\n callbackValidFrom(startYearValue);\r\n callbackValidTo(endYearValue);\r\n }\r\n if (addRenewLamp == true) {\r\n _addItemRenewSerial();\r\n }\r\n }, [formItems, addRenewLamp]);\r\n\r\n const _buildNoOfYearsField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.years}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _buildNameChangeField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.nameChangePrompt}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _buildSponsorshipPeriodField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.period}

\r\n

\r\n {moment(startYearValue[`${idx}`]).format(\"DD MMM YYYY\")} -{\" \"}\r\n {moment(endYearValue[`${idx}`]).format(\"DD MMM YYYY\")}\r\n

\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function(x, i) {\r\n return i;\r\n });\r\n\r\n if (\r\n lightValue[`${idx}`] === \"New\" ||\r\n (lightValue[`${idx}`] === \"Renew\" && nameChangeValue[`${idx}`] === \"Yes\")\r\n ) {\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

\r\n {nameLabel.endsWith(\"*\")\r\n ? nameIndex === 0\r\n ? nameLabel.substring(0, nameLabel.length - 1) +\r\n \" \" +\r\n (nameIndex + 1) +\r\n \"*\"\r\n : nameLabel.replace(\"*\", \" \" + (nameIndex + 1))\r\n : nameLabel + \" \" + nameIndex + 1}\r\n

\r\n \r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)\r\n }\r\n onKeyDown={(event) => {\r\n if (event.keyCode === 13) {\r\n event.preventDefault();\r\n }\r\n }}\r\n className=\"form-control\"\r\n maxLength={\r\n config.charactersLimitForNames\r\n ? config.charactersLimitForNames\r\n : 31\r\n }\r\n />\r\n
\r\n
\r\n );\r\n });\r\n } else {\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

\r\n {nameLabel.endsWith(\"*\")\r\n ? nameIndex === 0\r\n ? nameLabel.substring(0, nameLabel.length - 1) +\r\n \" \" +\r\n (nameIndex + 1) +\r\n \"*\"\r\n : nameLabel.replace(\"*\", \" \" + (nameIndex + 1))\r\n : nameLabel + \" \" + nameIndex + 1}\r\n

\r\n

\r\n {_displayName(ceremonyName[`${idx}`], nameIndex)}\r\n

\r\n
\r\n
\r\n );\r\n });\r\n }\r\n };\r\n\r\n const _buildCategoryField = (idx: number): JSX.Element | null => {\r\n if (typeof radioValue[`${idx}`] === \"undefined\") {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.category}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n };\r\n return (\r\n
\r\n \r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n if (element.field_name === \"noOfYears\") {\r\n return (\r\n
\r\n {lightValue[`${idx}`] === \"Renew\" && (\r\n
\r\n

\r\n {formLabels.renewalTitle +\r\n serialNumberValue[`${idx}`]}\r\n

\r\n
\r\n )}\r\n {_buildNoOfYearsField(idx)}\r\n {_buildSponsorshipPeriodField(idx)}\r\n {lightValue[`${idx}`] === \"Renew\" &&\r\n _buildNameChangeField(idx)}\r\n {_buildCategoryField(idx)}\r\n {radioValue[`${idx}`] ===\r\n String(\r\n resource.categoryFamilyLabel[`${localeCode}`]\r\n ) &&\r\n noOfNames > 0 &&\r\n _buildNameGroup(idx, noOfNames)}\r\n {radioValue[`${idx}`] ===\r\n String(\r\n resource.categoryCompanyLabel[`${localeCode}`]\r\n ) &&\r\n companyNames > 0 &&\r\n _buildNameGroup(idx, companyNames)}\r\n
\r\n );\r\n }\r\n if (!isMobile && element.field_type === \"product_price\") {\r\n return (\r\n
\r\n

\r\n $\r\n {selectedProduct.result?.Price! *\r\n yearValue[`${idx}`] }\r\n

\r\n
\r\n );\r\n }\r\n if (element.field_type === \"action\") {\r\n if (isMobile) {\r\n const style = !isEditMode\r\n ? \"form-details-item\"\r\n : \"form-details-item edit\";\r\n\r\n return (\r\n
\r\n {!isEditMode && !itemUnavailable && allowMultipleRegistrations && (\r\n
\r\n \r\n {\r\n resource.addAnotherItemTitle[\r\n `${localeCode}`\r\n ]\r\n }\r\n \r\n
\r\n )}\r\n
\r\n _deleteCartLine(idx)}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n return (\r\n
\r\n _deleteCartLine(idx)}\r\n />\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && !itemUnavailable && allowMultipleRegistrations && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default NoOfYearsCategoryNamesForm;\r\n","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackName?: any;\r\n callbackMessage?: any;\r\n callbackRemarks?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n showRemarksField: boolean;\r\n}\r\n\r\nconst OfferingForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackName, callbackMessage, callbackRemarks, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, allowMultipleRegistrations,showRemarksField }) => {\r\n const [offeringName, setOfferingName] = useState(['']);\r\n const [offeringMessage, setOfferingMessage] = useState(['']);\r\n const [offeringRemark, setOfferingRemark] = useState(['']);\r\n\r\n const formLabels = resource.offeringForm[`${localeCode}`];\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // functions to build form returned by useForm() hook\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setOfferingNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setOfferingNameArray = (name: string, index: number) => {\r\n const offeringNameArray = offeringName.slice();\r\n\r\n while (typeof offeringNameArray[`${index}`] === 'undefined') {\r\n offeringNameArray.push('');\r\n }\r\n\r\n offeringNameArray[`${index}`] = name;\r\n\r\n offeringNameArray[`${index}`].trim();\r\n\r\n setOfferingName(offeringNameArray);\r\n\r\n callbackName(offeringNameArray);\r\n\r\n _checkNamesEntered(offeringNameArray);\r\n }\r\n\r\n const _setMessageInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForMessages ? config.charactersLimitForMessages : 20;\r\n\r\n _setOfferingMessageArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setOfferingMessageArray = (name: string, index: number) => {\r\n const offeringMessageArray = offeringMessage.slice();\r\n\r\n while (typeof offeringMessageArray[`${index}`] === 'undefined') {\r\n offeringMessageArray.push('');\r\n }\r\n\r\n offeringMessageArray[`${index}`] = name;\r\n\r\n offeringMessageArray[`${index}`].trim();\r\n\r\n setOfferingMessage(offeringMessageArray);\r\n\r\n callbackMessage(offeringMessageArray);\r\n }\r\n\r\n const _setRemarksInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 100;\r\n\r\n _setOfferingRemarkArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setOfferingRemarkArray = (name: string, index: number) => {\r\n const offeringRemarkArray = offeringRemark.slice();\r\n\r\n while (typeof offeringRemarkArray[`${index}`] === 'undefined') {\r\n offeringRemarkArray.push('');\r\n }\r\n\r\n offeringRemarkArray[`${index}`] = name;\r\n\r\n offeringRemarkArray[`${index}`].trim();\r\n\r\n setOfferingRemark(offeringRemarkArray);\r\n\r\n callbackRemarks(offeringRemarkArray);\r\n }\r\n\r\n const _checkNamesEntered = (offeringNameArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < offeringNameArray.length; i++) {\r\n if (offeringNameArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const offeringNameArray = offeringName.slice();\r\n const offeringMessageArray = offeringMessage.slice();\r\n const offeringRemarkArray = offeringRemark.slice();\r\n\r\n offeringNameArray.push('');\r\n offeringMessageArray.push('');\r\n offeringRemarkArray.push('');\r\n\r\n setOfferingName(offeringNameArray);\r\n setOfferingMessage(offeringMessageArray);\r\n setOfferingRemark(offeringRemarkArray);\r\n\r\n callbackName(offeringNameArray);\r\n callbackMessage(offeringMessageArray);\r\n callbackRemarks(offeringRemarkArray);\r\n\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const offeringNameArray = offeringName.slice();\r\n const offeringMessageArray = offeringMessage.slice();\r\n const offeringRemarkArray = offeringRemark.slice();\r\n\r\n if (typeof offeringNameArray[`${index}`] !== 'undefined') {\r\n if (offeringNameArray.length > 1) {\r\n offeringNameArray.splice(index, 1);\r\n } else {\r\n offeringNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof offeringMessageArray[`${index}`] !== 'undefined') {\r\n if (offeringMessageArray.length > 1) {\r\n offeringMessageArray.splice(index, 1);\r\n } else {\r\n offeringMessageArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof offeringRemarkArray[`${index}`] !== 'undefined') {\r\n if (offeringRemarkArray.length > 1) {\r\n offeringRemarkArray.splice(index, 1);\r\n } else {\r\n offeringRemarkArray[0] = '';\r\n }\r\n }\r\n\r\n setOfferingName(offeringNameArray);\r\n setOfferingMessage(offeringMessageArray);\r\n setOfferingRemark(offeringRemarkArray);\r\n\r\n callbackName(offeringNameArray);\r\n callbackMessage(offeringMessageArray);\r\n callbackRemarks(offeringRemarkArray);\r\n\r\n _checkNamesEntered(offeringNameArray);\r\n }\r\n\r\n useEffect(() => {\r\n const existingOfferingName: string[] = [];\r\n const existingOfferingMessage: string[] = [];\r\n const existingOfferingRemark: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n let itemNames: string[] = formItems[`${i}`]['names'];\r\n\r\n // Offering form has only one name, that's why the first element is pushed.\r\n if (itemNames) {\r\n existingOfferingName.push(itemNames[0]);\r\n }\r\n\r\n existingOfferingMessage.push(formItems[`${i}`]['message']);\r\n existingOfferingRemark.push(formItems[`${i}`]['remarks']);\r\n }\r\n\r\n setOfferingName(existingOfferingName);\r\n setOfferingMessage(existingOfferingMessage);\r\n setOfferingRemark(existingOfferingRemark);\r\n\r\n callbackName(existingOfferingName);\r\n callbackMessage(existingOfferingMessage);\r\n callbackRemarks(existingOfferingRemark);\r\n\r\n _checkNamesEntered(existingOfferingName);\r\n }\r\n }, [formItems])\r\n\r\n const _buildNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildMessage = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.message}

\r\n _setMessageInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForMessages ? config.charactersLimitForMessages : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildRemarks = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.remarks}

\r\n _setRemarksInputValue(event, idx)}\r\n className='form-control'\r\n maxLength={config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 101}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'name') {\r\n return (\r\n
\r\n {_buildNameField(idx)}\r\n {_buildMessage(idx)}\r\n {showRemarksField && _buildRemarks(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n )\r\n};\r\n\r\nexport default OfferingForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport countries from '../resources/countries.json';\r\nimport period from '../../../resources/dedicationPeriod.json';\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackDedicationPeriod: any;\r\n callbackName?: any;\r\n callbackCompanyName: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackCountry: any;\r\n callbackNamesEntered?: any;\r\n callbackCompaniesEntered: any;\r\n callbackAddressEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst ServicesBusinessForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackMultiplier, callbackDedicationPeriod, callbackName, callbackCompanyName,\r\n callbackBuilding, callbackUnitNumber, callbackPostalCode, callbackCountry,\r\n callbackNamesEntered, callbackCompaniesEntered, callbackAddressEntered,\r\n formItems, config, localeCode, actionContext, userInfo, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n const [dedicationPeriod, setDedicationPeriod] = useState([period[`${localeCode}`].period[0].label]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [companyName, setCompanyName] = useState(['']);\r\n const [buildingName, setBuildingName] = useState(['']);\r\n const [unitNumber, setUnitNumber] = useState(['']);\r\n const [postalCode, setPostalCode] = useState(['']);\r\n const [countryName, setCountry] = useState(['']);\r\n\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.servicesBusinessForm[`${localeCode}`];\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (periodLabel: string, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period.scale[0]);\r\n }\r\n\r\n const scaleIdx = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === periodLabel);\r\n\r\n valueArray[`${index}`] = period.scale[`${scaleIdx}`];\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setDedicationPeriod = (event: any, index: number) => {\r\n const valueArray = dedicationPeriod.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period[`${localeCode}`].period[0].label);\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setDedicationPeriod(valueArray);\r\n\r\n callbackDedicationPeriod(valueArray);\r\n\r\n _setMultipler(event.label, index);\r\n }\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setCeremonyNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const valueArray = ceremonyName.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setCeremonyName(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(valueArray);\r\n }\r\n\r\n const _setCompanyName = (name: string, index: number) => {\r\n const valueArray = companyName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setCompanyName(valueArray);\r\n\r\n callbackCompanyName(valueArray);\r\n\r\n _checkCompanyEntered(valueArray);\r\n }\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setBuildingName(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumber.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setUnitNumber(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n }\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCode.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if(value.length<=6){\r\n valueArray[`${index}`] = value;\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setPostalCode(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setCountry = (event: any, index: number) => {\r\n const valueArray = countryName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setCountry(valueArray);\r\n\r\n callbackCountry(valueArray);\r\n }\r\n\r\n const _displayDedicationPeriod = (index: number): { value: string, label: string } => {\r\n if (dedicationPeriod.length > 0) {\r\n const selectValueArray = dedicationPeriod.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n return period[`${localeCode}`].period.find((item: { value: string, label: string }) => item.label === selectValueArray[`${index}`]);\r\n }\r\n }\r\n\r\n return { value: '', label: '' };\r\n }\r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkCompanyEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackCompaniesEntered(checked);\r\n }\r\n\r\n const _checkAddressEntered = (buildingArray: string[], postalCodeArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < buildingArray.length; ++i) {\r\n result = result && buildingArray[`${i}`] !== '' && postalCodeArray[`${i}`] !== '';\r\n }\r\n\r\n callbackAddressEntered(result);\r\n }\r\n\r\n const _initBuildingField = () => {\r\n if (userValid) {\r\n return userInfo.gmb_blockno.trim() + (userInfo.gmb_buildingno !== '' ? ', ' + userInfo.gmb_buildingno.trim() : '') + (userInfo.gmb_buildingname !== '' ? ', ' + userInfo.gmb_buildingname.trim() : '') + (userInfo.address1_line1 !== '' ? ', ' + userInfo.address1_line1.trim() : '') + (userInfo.address1_city !== '' ? ', ' + userInfo.address1_city.trim() : '');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _initCountryField = () => {\r\n if (userValid) {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n const location = states.find((place: { value: string, label: string }) => place.label.toUpperCase() === userInfo.address1_country.toUpperCase());\r\n\r\n return location ? location.label : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const companyNameArray = companyName.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n multiplierArray.push(period.scale[0]);\r\n dedicationPeriodArray.push(period[`${localeCode}`].period[0].label);\r\n ceremonyNameArray.push('');\r\n companyNameArray.push('');\r\n\r\n if (userValid) {\r\n buildingNameArray.push(_initBuildingField());\r\n unitNumberArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodeArray.push(userInfo.address1_postalcode);\r\n countryArray.push(_initCountryField());\r\n } else {\r\n buildingNameArray.push('');\r\n unitNumberArray.push('');\r\n postalCodeArray.push('');\r\n countryArray.push(countries[`${localeCode}`].countries[0].label);\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n setDedicationPeriod(dedicationPeriodArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setCompanyName(companyNameArray);\r\n setBuildingName(buildingNameArray);\r\n setUnitNumber(unitNumberArray);\r\n setPostalCode(postalCodeArray);\r\n setCountry(countryArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n callbackName(ceremonyNameArray);\r\n callbackCompanyName(companyNameArray);\r\n callbackBuilding(buildingNameArray);\r\n callbackUnitNumber(unitNumberArray);\r\n callbackPostalCode(postalCodeArray);\r\n callbackCountry(countryArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackCompaniesEntered(false);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const companyNameArray = companyName.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = period.scale[0];\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof dedicationPeriodArray[`${index}`] !== 'undefined') {\r\n if (dedicationPeriodArray.length > 1) {\r\n dedicationPeriodArray.splice(index, 1);\r\n } else {\r\n dedicationPeriodArray[0] = period[`${localeCode}`].period[0].label;\r\n }\r\n\r\n setDedicationPeriod(dedicationPeriodArray);\r\n\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n }\r\n\r\n if (typeof companyNameArray[`${index}`] !== 'undefined') {\r\n if (companyNameArray.length > 1) {\r\n companyNameArray.splice(index, 1);\r\n } else {\r\n companyNameArray[0] = '';\r\n }\r\n\r\n setCompanyName(companyNameArray);\r\n\r\n callbackCompanyName(companyNameArray);\r\n }\r\n\r\n if (typeof buildingNameArray[`${index}`] !== 'undefined') {\r\n if (buildingNameArray.length > 1) {\r\n buildingNameArray.splice(index, 1);\r\n } else {\r\n buildingNameArray[0] = '';\r\n }\r\n\r\n setBuildingName(buildingNameArray);\r\n\r\n callbackAddressEntered(buildingNameArray);\r\n }\r\n\r\n if (typeof unitNumberArray[`${index}`] !== 'undefined') {\r\n if (unitNumberArray.length > 1) {\r\n unitNumberArray.splice(index, 1);\r\n } else {\r\n unitNumberArray[0] = '';\r\n }\r\n\r\n setUnitNumber(unitNumberArray);\r\n\r\n callbackUnitNumber(unitNumberArray);\r\n }\r\n\r\n if (typeof postalCodeArray[`${index}`] !== 'undefined') {\r\n if (postalCodeArray.length > 1) {\r\n postalCodeArray.splice(index, 1);\r\n } else {\r\n postalCodeArray[0] = '';\r\n }\r\n\r\n setPostalCode(postalCodeArray);\r\n\r\n callbackPostalCode(postalCodeArray);\r\n }\r\n\r\n if (typeof countryArray[`${index}`] !== 'undefined') {\r\n if (countryArray.length > 1) {\r\n countryArray.splice(index, 1);\r\n } else {\r\n countryArray[0] = countries[`${localeCode}`].countries[0].label;\r\n }\r\n\r\n setCountry(countryArray);\r\n\r\n callbackCountry(countryArray);\r\n }\r\n\r\n _checkNameEntered(ceremonyNameArray);\r\n _checkCompanyEntered(companyNameArray);\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n useEffect(() => {\r\n const existingMultiplier: number[] = [];\r\n const existingDedicatedPeriod: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingCompanyName: string[] = [];\r\n const existingBuildingName: string[] = [];\r\n const existingUnitNumber: string[] = [];\r\n const existingPostalCode: string[] = [];\r\n const existingCountry: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const selectedPeriod = formItems[`${i}`]['dedicationPeriod'] !== '' ? formItems[`${i}`]['dedicationPeriod'] : period[`${localeCode}`].period[0].label;\r\n const index = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === selectedPeriod);\r\n\r\n existingMultiplier.push(period.scale[`${index}`]);\r\n existingDedicatedPeriod.push(selectedPeriod);\r\n existingCeremonyName.push(formItems[`${i}`]['names'][0]);\r\n existingCompanyName.push(formItems[`${i}`]['companyName']);\r\n existingBuildingName.push(formItems[`${i}`]['buildingName']);\r\n existingUnitNumber.push(formItems[`${i}`]['unitNumber']);\r\n existingPostalCode.push(formItems[`${i}`]['postalCode']);\r\n existingCountry.push(formItems[`${i}`]['country']);\r\n }\r\n\r\n setMultiplers(existingMultiplier);\r\n setDedicationPeriod(existingDedicatedPeriod);\r\n setCeremonyName(existingCeremonyName);\r\n setCompanyName(existingCompanyName);\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n\r\n callbackMultiplier(existingMultiplier);\r\n callbackDedicationPeriod(existingDedicatedPeriod);\r\n callbackName(existingCeremonyName);\r\n callbackCompanyName(existingCompanyName);\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n\r\n _checkNameEntered(existingCeremonyName);\r\n _checkCompanyEntered(existingCompanyName);\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n } else {\r\n if (userValid) {\r\n existingBuildingName.push(_initBuildingField());\r\n existingUnitNumber.push(userInfo.gmb_unitnofloorapartmentno);\r\n existingPostalCode.push(userInfo.address1_postalcode);\r\n existingCountry.push(_initCountryField());\r\n\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n }\r\n\r\n callbackDedicationPeriod(dedicationPeriod);\r\n }\r\n }, [formItems]);\r\n\r\n const _buildDedicationPeriod = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicationPeriod}

\r\n _setDedicationPeriod(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildCompanyField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.companyName}

\r\n _setCompanyName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildAddressField = (idx: number): JSX.Element => {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n return (\r\n
\r\n

{formLabels.addressPrompt}

\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={buildingName[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={unitNumber[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n _setCountry(event, idx)}\r\n className={'select'}\r\n isSearchable={true}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'period') {\r\n return (\r\n
\r\n {_buildDedicationPeriod(idx)}\r\n {_buildNameField(idx)}\r\n {_buildCompanyField(idx)}\r\n {_buildAddressField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${multipliers[`${idx}`] * selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ServicesBusinessForm","import React, { useState, useEffect } from 'react';\r\n\r\nimport DatePicker from 'react-date-picker';\r\nimport Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport countries from '../resources/countries.json';\r\nimport period from '../../../resources/dedicationPeriod.json';\r\nimport resource from '../resources/resource.json';\r\nimport time from '../resources/time.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState, ITimeRange } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackDedicationPeriod: any;\r\n callbackStartDate: any;\r\n callbackDedicatedBy: any;\r\n callbackName: any;\r\n callbackRelationship: any;\r\n callbackBirthDate: any;\r\n callbackBirthTime: any;\r\n callbackDeathDate: any;\r\n callbackDeathTime: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackCountry: any;\r\n callbackNamesEntered?: any;\r\n callbackRelationshipsEntered: any;\r\n callbackDateEntered: any;\r\n callbackAddressEntered: any;\r\n callbackRemarks?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n showRemarksField: boolean;\r\n}\r\n\r\nconst ServicesDeceasedForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackMultiplier, callbackDedicationPeriod, callbackStartDate, callbackDedicatedBy, callbackName, callbackRelationship, callbackBirthDate, callbackBirthTime, callbackDeathDate, callbackDeathTime, callbackBuilding, callbackUnitNumber, callbackPostalCode, callbackCountry,\r\n callbackNamesEntered, callbackRelationshipsEntered, callbackDateEntered, callbackAddressEntered, callbackRemarks,\r\n formItems, config, localeCode, actionContext, userInfo, isMobile, isEditMode, allowMultipleRegistrations, showRemarksField }) => {\r\n const [dedicationPeriods, setDedicationPeriods] = useState([period[`${localeCode}`].period[0].label]);\r\n const [startDates, setStartDates] = useState(['']);\r\n const [dedicatedBys, setDedicatedBys] = useState(['']);\r\n const [deceasedNames, setDeceasedNames] = useState(['']);\r\n const [relationships, setRelationships] = useState(['']);\r\n const [birthDates, setBirthDates] = useState(['']);\r\n const [birthTimes, setBirthTimes] = useState(['']);\r\n const [deathDates, setDeathDates] = useState(['']);\r\n const [deathTimes, setDeathTimes] = useState(['']);\r\n const [buildingNames, setBuildingNames] = useState(['']);\r\n const [unitNumbers, setUnitNumbers] = useState(['']);\r\n const [postalCodes, setPostalCodes] = useState(['']);\r\n const [countryNames, setCountries] = useState(['']);\r\n const [remarks, setRemarks] = useState(['']);\r\n\r\n const [timeRanges, setTimeRanges] = useState<{ value: string, label: string }[][]>([]);\r\n const [deathTimeRanges, setDeathTimeRanges] = useState<{ value: string, label: string }[][]>([]);\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.servicesDeceasedForm[`${localeCode}`];\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const startDate = new Date();\r\n startDate.setDate(startDate.getDate() + 1);\r\n startDate.setHours(0, 0, 0, 0);\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (periodLabel: string, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period.scale[0]);\r\n }\r\n\r\n const scaleIdx = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === periodLabel);\r\n\r\n valueArray[`${index}`] = period.scale[`${scaleIdx}`];\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setDedicationPeriod = (event: any, index: number) => {\r\n const valueArray = dedicationPeriods.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setDedicationPeriods(valueArray);\r\n\r\n callbackDedicationPeriod(valueArray);\r\n\r\n _setMultipler(event.label, index);\r\n }\r\n\r\n const _setStartDate = (value: Date, index: number) => {\r\n const valueArray = startDates.slice();\r\n\r\n // while (typeof valueArray[`${index}`] === 'undefined') {\r\n // valueArray.push(startDate.toISOString());\r\n // }\r\n\r\n const date = value ? value.toISOString() : startDate.toISOString();\r\n\r\n valueArray[`${index}`] = date;\r\n\r\n setStartDates(valueArray);\r\n\r\n callbackStartDate(valueArray);\r\n\r\n _checkDateEntered(valueArray, deathDates);\r\n }\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setDedicatedByArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setDeceasedNameInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setDeceasedNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setRelationshipInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setRelationshipArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setDedicatedByArray = (name: string, index: number) => {\r\n const valueArray = dedicatedBys.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period[`${localeCode}`].period[0].label);\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n setDedicatedBys(valueArray);\r\n\r\n callbackDedicatedBy(valueArray);\r\n\r\n _checkNameEntered(valueArray, deceasedNames);\r\n }\r\n\r\n const _setDeceasedNameArray = (name: string, index: number) => {\r\n const valueArray = deceasedNames.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n setDeceasedNames(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(dedicatedBys, valueArray);\r\n }\r\n\r\n const _setRelationshipArray = (name: string, index: number) => {\r\n const valueArray = relationships.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n setRelationships(valueArray);\r\n\r\n callbackRelationship(valueArray);\r\n\r\n _checkRelationshipEntered(valueArray);\r\n }\r\n\r\n const _setDate = (value: Date, index: number, label: string) => {\r\n const valueArray = label === formLabels.birthDate ? birthDates.slice() : deathDates.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n label === formLabels.birthDate ? _setBirthTimeRange(index) : _setDeathTimeRange(value, index);\r\n\r\n if (label === formLabels.birthDate) {\r\n setBirthDates(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n \r\n _checkBirthDateEntered(valueArray, deathDates);\r\n } else {\r\n setDeathDates(valueArray);\r\n\r\n callbackDeathDate(valueArray);\r\n\r\n _checkDateEntered(startDates, valueArray);\r\n\r\n _checkBirthDateEntered(birthDates, valueArray);\r\n }\r\n }\r\n\r\n const _setTime = (event: any, index: number, label: string) => {\r\n const valueArray = label === formLabels.birthTime ? birthTimes.slice() : deathTimes.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n if (label === formLabels.birthTime) {\r\n setBirthTimes(valueArray);\r\n\r\n callbackBirthTime(valueArray);\r\n } else {\r\n setDeathTimes(valueArray);\r\n\r\n callbackDeathTime(valueArray);\r\n }\r\n }\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingNames.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setBuildingNames(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n\r\n _checkAddressEntered(valueArray, postalCodes, countryNames);\r\n }\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setUnitNumbers(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n }\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCodes.slice();\r\n \r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n \r\n if(value.length<=6){\r\n valueArray[`${index}`] = value;\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n setPostalCodes(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n\r\n _checkAddressEntered(buildingNames, valueArray, countryNames);\r\n }\r\n\r\n const _setCountry = (event: any, index: number) => {\r\n const valueArray = countryNames.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setCountries(valueArray);\r\n\r\n callbackCountry(valueArray);\r\n\r\n _checkAddressEntered(buildingNames, postalCodes, valueArray);\r\n }\r\n\r\n const _setBirthTimeRange = (index: number) => {\r\n const valueArray = timeRanges.slice();\r\n\r\n while (valueArray.length < dedicationPeriods.length) {\r\n valueArray.push(time.intervals);\r\n }\r\n\r\n valueArray[`${index}`] = _initBirthTimeRanges();\r\n\r\n setTimeRanges(valueArray);\r\n }\r\n\r\n const _setDeathTimeRange = (value: Date, index: number) => {\r\n const valueArray = deathTimeRanges.slice();\r\n\r\n while (valueArray.length < dedicationPeriods.length) {\r\n valueArray.push(time.intervals);\r\n }\r\n\r\n valueArray[`${index}`] = _initTimeRanges(value);\r\n\r\n setDeathTimeRanges(valueArray);\r\n }\r\n\r\n const _displayDedicationPeriod = (index: number): { value: string, label: string } => {\r\n if (dedicationPeriods.length > 0) {\r\n const selectValueArray = dedicationPeriods.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n return period[`${localeCode}`].period.find((item: { value: string, label: string }) => item.label === selectValueArray[`${index}`]);\r\n }\r\n }\r\n\r\n return { value: '', label: '' };\r\n }\r\n\r\n const _checkNameEntered = (dedicatedByArray: string[], deceasedNameArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < dedicatedByArray.length; ++i) {\r\n result = result && dedicatedByArray[`${i}`] !== '' && deceasedNameArray[`${i}`] !== '';\r\n }\r\n\r\n callbackNamesEntered(result);\r\n }\r\n\r\n const _checkRelationshipEntered = (relationshipArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < relationshipArray.length; ++i) {\r\n result = result && relationshipArray[`${i}`] !== '';\r\n }\r\n\r\n callbackRelationshipsEntered(result);\r\n }\r\n\r\n const _checkDateEntered = (startDatesArray: string[], deathDatesArray: string[]) => {\r\n let result = true;\r\n\r\n const count = startDatesArray.length > deathDatesArray.length ? startDatesArray.length : deathDatesArray.length;\r\n\r\n for (let i = 0; i < count; i++) {\r\n\r\n const startDate = new Date(startDatesArray[`${i}`]);\r\n\r\n const startDateInvalid = startDatesArray[`${i}`] === undefined || startDatesArray[`${i}`] === '' || startDate.getFullYear() < 1900 || \r\n startDate.getMonth() > 12 || startDate.getDate() > 31? true : false;\r\n \r\n const deathDate = new Date(deathDatesArray[`${i}`]); \r\n\r\n const deathDateInvalid = deathDatesArray[`${i}`] === undefined || deathDatesArray[`${i}`] === '' || deathDate.getFullYear() < 1900 || deathDate.getMonth() > 12 || deathDate.getDate() > 31 ? true : false;\r\n \r\n\r\n if (startDateInvalid || deathDateInvalid) {\r\n result = false; break;\r\n }\r\n }\r\n\r\n callbackDateEntered(result);\r\n }\r\n\r\n const _checkBirthDateEntered = (birthDatesArray: string[], deathDatesArray: string[]) => {\r\n let result = true;\r\n\r\n const count = birthDatesArray.length < deathDatesArray.length ? birthDatesArray.length : deathDatesArray.length;\r\n\r\n for (let i = 0; i < count; i++) {\r\n\r\n const birthDate = new Date(birthDatesArray[`${i}`]);\r\n\r\n const birthDateInvalid = birthDate.getFullYear() < 1900 || birthDate.getMonth() > 12 || birthDate.getDate() > 31? true : false;\r\n \r\n const deathDate = new Date(deathDatesArray[`${i}`]); \r\n\r\n const deathDateInvalid = deathDatesArray[`${i}`] === undefined || deathDatesArray[`${i}`] === '' || deathDate.getFullYear() < 1900 || deathDate.getMonth() > 12 || deathDate.getDate() > 31 ? true : false;\r\n\r\n if (birthDateInvalid || deathDateInvalid) {\r\n result = false; break;\r\n }\r\n\r\n if (!birthDateInvalid && !deathDateInvalid) {\r\n if(birthDate > deathDate) {\r\n result = false; break;\r\n }\r\n }\r\n }\r\n\r\n callbackDateEntered(result);\r\n }\r\n\r\n const _checkAddressEntered = (buildingArray: string[], postalCodeArray: string[], countriesArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < buildingArray.length; ++i) {\r\n result = result && buildingArray[`${i}`] !== '' && postalCodeArray[`${i}`] !== '' && countriesArray[`${i}`] !== '';\r\n }\r\n\r\n callbackAddressEntered(result);\r\n }\r\n\r\n const _setRemarksInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 100;\r\n\r\n _setRemarkArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setRemarkArray = (name: string, index: number) => {\r\n const remarkArray = remarks.slice();\r\n\r\n while (typeof remarkArray[`${index}`] === 'undefined') {\r\n remarkArray.push('');\r\n }\r\n\r\n remarkArray[`${index}`] = name;\r\n\r\n remarkArray[`${index}`].trim();\r\n\r\n setRemarks(remarkArray);\r\n\r\n callbackRemarks(remarkArray);\r\n }\r\n\r\n const _initTimeRanges = (value: Date): { value: string; label: string; }[] => {\r\n const date = value ? value : new Date();\r\n\r\n const now = new Date();\r\n\r\n date.setHours(0, 0, 0, 0);\r\n\r\n if (date.getFullYear() >= now.getFullYear() && date.getMonth() >= now.getMonth() && date.getDate() >= now.getDate()) {\r\n const ranges: { value: string; label: string; }[] = [];\r\n\r\n time.intervals.map(range => {\r\n const interval = range.label.split(' ');\r\n\r\n const firstHour = parseInt(interval[0].split(':')[0]);\r\n const lastHour = parseInt(interval[interval.length - 1].split(':')[0]);\r\n\r\n if (firstHour <= now.getHours() && lastHour <= now.getHours() || firstHour <= now.getHours() && now.getHours() <= lastHour) {\r\n ranges.push(range);\r\n }\r\n });\r\n\r\n return ranges;\r\n }\r\n\r\n return time.intervals;\r\n }\r\n\r\n const _initBirthTimeRanges = (): { value: string; label: string; }[] => {\r\n const ranges: { value: string; label: string; }[] = [];\r\n\r\n //ranges.push({ value: '0', label: '' });\r\n\r\n return ranges.concat(time.intervals);\r\n }\r\n\r\n const _initBuildingField = () => {\r\n if (userValid) {\r\n return userInfo.gmb_blockno.trim() + (userInfo.gmb_buildingno !== '' ? ', ' + userInfo.gmb_buildingno.trim() : '') + (userInfo.gmb_buildingname !== '' ? ', ' + userInfo.gmb_buildingname.trim() : '') + (userInfo.address1_line1 !== '' ? ', ' + userInfo.address1_line1.trim() : '') + (userInfo.address1_city !== '' ? ', ' + userInfo.address1_city.trim() : '');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _initCountryField = () => {\r\n if (userValid) {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n const location = states.find((place: { value: string, label: string }) => place.label.toUpperCase() === userInfo.address1_country.toUpperCase());\r\n\r\n return location ? location.label : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multipliersArray = multipliers.slice();\r\n const dedicationPeriodsArray = dedicationPeriods.slice();\r\n const startDatesArray = startDates.slice();\r\n const dedicatedBysArray = dedicatedBys.slice();\r\n const deceasedNamesArray = deceasedNames.slice();\r\n const relationshipsArray = relationships.slice();\r\n const birthDatesArray = birthDates.slice();\r\n const birthTimesArray = birthTimes.slice();\r\n const deathDatesArray = deathDates.slice();\r\n const deathTimesArray = deathTimes.slice();\r\n const buildingNamesArray = buildingNames.slice();\r\n const unitNumbersArray = unitNumbers.slice();\r\n const postalCodesArray = postalCodes.slice();\r\n const countriesArray = countryNames.slice();\r\n const remarksArray = remarks.slice();\r\n\r\n multipliersArray.push(period.scale[0]);\r\n dedicationPeriodsArray.push(period[`${localeCode}`].period[0].label);\r\n startDatesArray.push(startDate.toDateString());\r\n dedicatedBysArray.push('');\r\n deceasedNamesArray.push('');\r\n relationshipsArray.push('');\r\n birthDatesArray.push('');\r\n birthTimesArray.push('');\r\n deathDatesArray.push('');\r\n deathTimesArray.push('');\r\n remarksArray.push('');\r\n\r\n if (userValid) {\r\n buildingNamesArray.push(_initBuildingField());\r\n unitNumbersArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodesArray.push(userInfo.address1_postalcode);\r\n countriesArray.push(_initCountryField());\r\n } else {\r\n buildingNamesArray.push('');\r\n unitNumbersArray.push('');\r\n postalCodesArray.push('');\r\n countriesArray.push(countries[`${localeCode}`].countries[0].label);\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n setDedicationPeriods(dedicationPeriodsArray);\r\n setStartDates(startDatesArray);\r\n setDedicatedBys(dedicatedBysArray);\r\n setDeceasedNames(deceasedNamesArray);\r\n setRelationships(relationshipsArray);\r\n setBirthDates(birthDatesArray);\r\n setBirthTimes(birthTimesArray);\r\n setDeathDates(deathDatesArray);\r\n setDeathTimes(deathTimesArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setCountries(countriesArray);\r\n setRemarks(remarksArray);\r\n\r\n _setBirthTimeRange(dedicationPeriodsArray.length - 1);\r\n _setDeathTimeRange(new Date(), dedicationPeriodsArray.length - 1);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackDedicationPeriod(dedicationPeriodsArray);\r\n callbackStartDate(startDatesArray);\r\n callbackDedicatedBy(dedicatedBysArray);\r\n callbackName(deceasedNamesArray);\r\n callbackRelationship(relationshipsArray);\r\n callbackBirthDate(birthDatesArray);\r\n callbackBirthTime(birthTimesArray);\r\n callbackDeathDate(deathDatesArray);\r\n callbackBirthTime(deathTimesArray);\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackCountry(countriesArray);\r\n callbackRemarks(remarksArray);\r\n\r\n callbackNamesEntered(false);\r\n\r\n _checkDateEntered(startDatesArray, deathDatesArray);\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray, countriesArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multipliersArray = multipliers.slice();\r\n const dedicationPeriodsArray = dedicationPeriods.slice();\r\n const startDatesArray = startDates.slice();\r\n const dedicatedBysArray = dedicatedBys.slice();\r\n const deceasedNamesArray = deceasedNames.slice();\r\n const relationshipsArray = relationships.slice();\r\n const birthDatesArray = birthDates.slice();\r\n const birthTimesArray = birthTimes.slice();\r\n const deathDatesArray = deathDates.slice();\r\n const deathTimesArray = deathTimes.slice();\r\n const buildingNamesArray = buildingNames.slice();\r\n const unitNumbersArray = unitNumbers.slice();\r\n const postalCodesArray = postalCodes.slice();\r\n const countriesArray = countryNames.slice();\r\n const remarksArray = remarks.slice();\r\n\r\n if (typeof multipliersArray[`${index}`] !== 'undefined') {\r\n if (multipliersArray.length > 1) {\r\n multipliersArray.splice(index, 1);\r\n } else {\r\n multipliersArray[0] = period.scale[0];\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n }\r\n\r\n if (typeof dedicationPeriodsArray[`${index}`] !== 'undefined') {\r\n if (dedicationPeriodsArray.length > 1) {\r\n dedicationPeriodsArray.splice(index, 1);\r\n } else {\r\n dedicationPeriodsArray[0] = period[`${localeCode}`].period[0].label;\r\n }\r\n\r\n setDedicationPeriods(dedicationPeriodsArray);\r\n\r\n callbackDedicationPeriod(dedicationPeriodsArray);\r\n }\r\n\r\n if (typeof startDatesArray[`${index}`] !== 'undefined') {\r\n if (startDatesArray.length > 1) {\r\n startDatesArray.splice(index, 1);\r\n } else {\r\n startDatesArray[0] = startDate.toISOString();\r\n }\r\n\r\n setStartDates(startDatesArray);\r\n\r\n callbackStartDate(startDatesArray);\r\n }\r\n\r\n if (typeof dedicatedBysArray[`${index}`] !== 'undefined') {\r\n if (dedicatedBysArray.length > 1) {\r\n dedicatedBysArray.splice(index, 1);\r\n } else {\r\n dedicatedBysArray[0] = '';\r\n }\r\n\r\n setDedicatedBys(dedicatedBysArray);\r\n\r\n callbackDedicatedBy(dedicatedBysArray);\r\n }\r\n\r\n if (typeof deceasedNamesArray[`${index}`] !== 'undefined') {\r\n if (deceasedNamesArray.length > 1) {\r\n deceasedNamesArray.splice(index, 1);\r\n } else {\r\n deceasedNamesArray[0] = '';\r\n }\r\n\r\n setDeceasedNames(deceasedNamesArray);\r\n\r\n callbackName(deceasedNamesArray);\r\n }\r\n\r\n if (typeof relationshipsArray[`${index}`] !== 'undefined') {\r\n if (relationshipsArray.length > 1) {\r\n relationshipsArray.splice(index, 1);\r\n } else {\r\n relationshipsArray[0] = '';\r\n }\r\n\r\n setRelationships(relationshipsArray);\r\n\r\n callbackRelationship(relationshipsArray);\r\n }\r\n\r\n if (typeof birthDatesArray[`${index}`] !== 'undefined') {\r\n if (birthDatesArray.length > 1) {\r\n birthDatesArray.splice(index, 1);\r\n } else {\r\n birthDatesArray[0] = '';\r\n }\r\n\r\n setBirthDates(birthDatesArray);\r\n\r\n callbackBirthDate(birthDatesArray);\r\n }\r\n\r\n if (typeof deathDatesArray[`${index}`] !== 'undefined') {\r\n if (deathDatesArray.length > 1) {\r\n deathDatesArray.splice(index, 1);\r\n } else {\r\n deathDatesArray[0] = '';\r\n }\r\n\r\n setDeathDates(deathDatesArray);\r\n\r\n callbackDeathDate(deathDatesArray);\r\n }\r\n\r\n if (typeof birthTimesArray[`${index}`] !== 'undefined') {\r\n if (birthTimesArray.length > 1) {\r\n birthTimesArray.splice(index, 1);\r\n } else {\r\n birthTimesArray[0] = '';\r\n }\r\n\r\n setBirthTimes(birthTimesArray);\r\n\r\n callbackBirthTime(birthTimesArray);\r\n }\r\n\r\n if (typeof deathTimesArray[`${index}`] !== 'undefined') {\r\n if (deathTimesArray.length > 1) {\r\n deathTimesArray.splice(index, 1);\r\n } else {\r\n deathTimesArray[0] = '';\r\n }\r\n\r\n setDeathTimes(deathTimesArray);\r\n\r\n callbackDeathTime(deathTimesArray);\r\n }\r\n\r\n if (typeof buildingNamesArray[`${index}`] !== 'undefined') {\r\n if (buildingNamesArray.length > 1) {\r\n buildingNamesArray.splice(index, 1);\r\n } else {\r\n buildingNamesArray[0] = '';\r\n }\r\n\r\n setBuildingNames(buildingNamesArray);\r\n\r\n callbackAddressEntered(buildingNamesArray);\r\n }\r\n\r\n if (typeof unitNumbersArray[`${index}`] !== 'undefined') {\r\n if (unitNumbersArray.length > 1) {\r\n unitNumbersArray.splice(index, 1);\r\n } else {\r\n unitNumbersArray[0] = '';\r\n }\r\n\r\n setUnitNumbers(unitNumbersArray);\r\n\r\n callbackUnitNumber(unitNumbersArray);\r\n }\r\n\r\n if (typeof postalCodesArray[`${index}`] !== 'undefined') {\r\n if (postalCodesArray.length > 1) {\r\n postalCodesArray.splice(index, 1);\r\n } else {\r\n postalCodesArray[0] = '';\r\n }\r\n\r\n setPostalCodes(postalCodesArray);\r\n\r\n callbackPostalCode(postalCodesArray);\r\n }\r\n\r\n if (typeof countriesArray[`${index}`] !== 'undefined') {\r\n if (countriesArray.length > 1) {\r\n countriesArray.splice(index, 1);\r\n } else {\r\n countriesArray[0] = countries[`${localeCode}`].countries[0].label;\r\n }\r\n\r\n setCountries(countriesArray);\r\n\r\n callbackCountry(countriesArray);\r\n }\r\n\r\n if (typeof timeRanges[`${index}`] !== 'undefined') {\r\n if (timeRanges.length > 1) {\r\n timeRanges.splice(index, 1);\r\n } else {\r\n _setBirthTimeRange(0);\r\n }\r\n }\r\n\r\n if (typeof deathTimeRanges[`${index}`] !== 'undefined') {\r\n if (deathTimeRanges.length > 1) {\r\n deathTimeRanges.splice(index, 1);\r\n } else {\r\n _setDeathTimeRange(new Date(), 0);\r\n }\r\n }\r\n\r\n if (typeof remarksArray[`${index}`] !== 'undefined') {\r\n if (remarksArray.length > 1) {\r\n remarksArray.splice(index, 1);\r\n } else {\r\n remarksArray[0] = '';\r\n }\r\n \r\n callbackRemarks(remarksArray);\r\n }\r\n\r\n _checkNameEntered(dedicatedBysArray, deceasedNamesArray);\r\n _checkRelationshipEntered(relationshipsArray);\r\n _checkDateEntered(startDatesArray, deathDatesArray);\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray, countriesArray);\r\n }\r\n\r\n useEffect(() => {\r\n const multipliersArray: number[] = [];\r\n const dedicatedPeriodsArray: string[] = [];\r\n const startDatesArray: string[] = [];\r\n const dedicatedBysArray: string[] = [];\r\n const deceasedNamesArray: string[] = [];\r\n const relationshipsArray: string[] = [];\r\n const birthDatesArray: string[] = [];\r\n const birthTimesArray: string[] = [];\r\n const deathDatesArray: string[] = [];\r\n const deathTimesArray: string[] = [];\r\n const buildingNamesArray: string[] = [];\r\n const unitNumbersArray: string[] = [];\r\n const postalCodesArray: string[] = [];\r\n const countriesArray: string[] = [];\r\n const remarksArray: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const selectedPeriod = formItems[`${i}`]['dedicationPeriod'] !== '' ? formItems[`${i}`]['dedicationPeriod'] : period[`${localeCode}`].period[0].label;\r\n const index = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === selectedPeriod);\r\n\r\n const birthDate = formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']) : new Date(1900, 1, 1, 0, 0, 0);\r\n const deathDate = formItems[`${i}`]['deathDate'] !== '' ? new Date(formItems[`${i}`]['deathDate']) : new Date();\r\n\r\n multipliersArray.push(period.scale[`${index}`]);\r\n dedicatedPeriodsArray.push(selectedPeriod);\r\n startDatesArray.push(formItems[`${i}`]['startDate'] !== '' && formItems[`${i}`]['startDate'] !== undefined ? formItems[`${i}`]['startDate'] : startDate.toISOString());\r\n dedicatedBysArray.push(formItems[`${i}`]['dedicatedBy']);\r\n deceasedNamesArray.push(formItems[`${i}`]['names'][0]);\r\n relationshipsArray.push(formItems[`${i}`]['deceasedRelationship']);\r\n birthDatesArray.push(birthDate.toISOString());\r\n birthTimesArray.push(formItems[`${i}`]['birthTime']);\r\n deathDatesArray.push(deathDate.toISOString());\r\n deathTimesArray.push(formItems[`${i}`]['deathTime']);\r\n buildingNamesArray.push(formItems[`${i}`]['buildingName']);\r\n unitNumbersArray.push(formItems[`${i}`]['unitNumber']);\r\n postalCodesArray.push(formItems[`${i}`]['postalCode']);\r\n countriesArray.push(formItems[`${i}`]['country']);\r\n remarksArray.push(formItems[`${i}`]['remarks']);\r\n\r\n _setBirthTimeRange(i);\r\n _setDeathTimeRange(deathDate, i);\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n setDedicationPeriods(dedicatedPeriodsArray);\r\n setDedicatedBys(dedicatedBysArray);\r\n setDeceasedNames(deceasedNamesArray);\r\n setRelationships(relationshipsArray);\r\n setBirthDates(birthDatesArray);\r\n setBirthTimes(birthTimesArray);\r\n setDeathDates(deathDatesArray);\r\n setDeathTimes(deathTimesArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setCountries(countriesArray);\r\n setRemarks(remarksArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackDedicationPeriod(dedicatedPeriodsArray);\r\n callbackDedicatedBy(dedicatedBysArray);\r\n callbackName(deceasedNamesArray);\r\n callbackRelationship(relationshipsArray);\r\n callbackBirthDate(birthDatesArray);\r\n callbackBirthTime(birthTimesArray);\r\n callbackDeathDate(deathDatesArray);\r\n callbackDeathTime(deathTimesArray);\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackCountry(countriesArray);\r\n callbackRemarks(remarksArray);\r\n\r\n _checkNameEntered(dedicatedBysArray, deceasedNamesArray);\r\n _checkRelationshipEntered(relationshipsArray);\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray, countriesArray);\r\n } else {\r\n if (userValid) {\r\n buildingNamesArray.push(_initBuildingField());\r\n unitNumbersArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodesArray.push(userInfo.address1_postalcode);\r\n countriesArray.push(_initCountryField());\r\n\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setCountries(countriesArray);\r\n\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackCountry(countriesArray);\r\n\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray, countriesArray);\r\n }\r\n\r\n startDatesArray.push(startDate.toISOString());\r\n\r\n _setBirthTimeRange(0);\r\n _setDeathTimeRange(new Date(), 0);\r\n \r\n callbackDedicationPeriod(dedicationPeriods);\r\n }\r\n\r\n setStartDates(startDatesArray);\r\n\r\n callbackStartDate(startDatesArray);\r\n\r\n _checkDateEntered(startDatesArray, deathDatesArray);\r\n\r\n }, [formItems])\r\n\r\n const _buildDedicationPeriod = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicationPeriod}

\r\n _setDedicationPeriod(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.startDate}

\r\n _setStartDate(date, idx)}\r\n value={startDates[`${idx}`] === '' || birthDates[`${idx}`] === undefined || startDates[`${idx}`].includes('1900') ? null : new Date(startDates[`${idx}`])}\r\n format={'dd-MM-y'}\r\n minDate={startDate}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildDedicatedByField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicatedBy}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildDeceasedNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n

{formLabels.deceasedDetailsPrompt}

\r\n
\r\n

{formLabels.deceasedName}

\r\n _setDeceasedNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildRelationshipField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.relationship}

\r\n _setRelationshipInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildBirthDateTime = (idx: number): JSX.Element | null => {\r\n if (timeRanges[`${idx}`] === undefined || birthDates[`${idx}`] === undefined) {\r\n return null;\r\n }\r\n\r\n const found = timeRanges[`${idx}`].find((slot: ITimeRange) => slot.label === birthTimes[`${idx}`]);\r\n\r\n const displayTime = found ? found : { value: '', label: 'Select time' };\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.birthDate}

\r\n _setDate(date, idx, formLabels.birthDate)}\r\n value={birthDates[`${idx}`] === '' || birthDates[`${idx}`] === undefined || birthDates[`${idx}`].includes('1900') ? null : new Date(birthDates[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={'DD'}\r\n monthPlaceholder={'MM'}\r\n yearPlaceholder={'YYYY'}\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.birthTime}

\r\n _setTime(event, idx, formLabels.birthTime)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildDeathDateTime = (idx: number): JSX.Element | null => {\r\n if (deathTimeRanges[`${idx}`] === undefined || deathDates[`${idx}`] === undefined) {\r\n return null;\r\n }\r\n\r\n const found = deathTimeRanges[`${idx}`].find((slot: ITimeRange) => slot.label === deathTimes[`${idx}`]);\r\n\r\n const displayTime = found ? found : { value: '', label: 'Select time' };\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.deathDate}

\r\n _setDate(date, idx, formLabels.deathDate)}\r\n value={deathDates[`${idx}`] === '' || deathDates[`${idx}`] === undefined|| deathDates[`${idx}`].includes('1900') ? null : new Date(deathDates[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={'DD'}\r\n monthPlaceholder={'MM'}\r\n yearPlaceholder={'YYYY'}\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.deathTime}

\r\n _setTime(event, idx, formLabels.deathTime)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildAddressField = (idx: number): JSX.Element => {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n return (\r\n
\r\n

{formLabels.addressPrompt}

\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={buildingNames[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={unitNumbers[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n _setCountry(event, idx)}\r\n className={'select'}\r\n isSearchable={true}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildRemarks = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.remarks}

\r\n _setRemarksInputValue(event, idx)}\r\n className='form-control'\r\n maxLength={config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 101}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'period') {\r\n return (\r\n
\r\n {_buildDedicationPeriod(idx)}\r\n {_buildDedicatedByField(idx)}\r\n {_buildDeceasedNameField(idx)}\r\n {_buildRelationshipField(idx)}\r\n {_buildBirthDateTime(idx)}\r\n {_buildDeathDateTime(idx)}\r\n {_buildAddressField(idx)}\r\n {showRemarksField && _buildRemarks(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${multipliers[`${idx}`] * selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ServicesDeceasedForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport DatePicker from 'react-date-picker';\r\nimport Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport countries from '../resources/countries.json';\r\nimport period from '../../../resources/dedicationPeriod.json';\r\nimport resource from '../resources/resource.json';\r\nimport time from '../resources/time.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState, ITimeRange } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackDedicationPeriod: any;\r\n callbackName?: any;\r\n callbackSchoolName: any;\r\n callbackBirthDate: any;\r\n callbackBirthTime: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackCountry: any;\r\n callbackNamesEntered?: any;\r\n callbackSchoolsEntered: any;\r\n callbackDateEntered: any;\r\n callbackAddressEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst ServicesEducationForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackMultiplier, callbackDedicationPeriod, callbackName, callbackSchoolName, callbackBirthDate, callbackBirthTime,\r\n callbackBuilding, callbackUnitNumber, callbackPostalCode, callbackCountry,\r\n callbackNamesEntered, callbackSchoolsEntered, callbackDateEntered, callbackAddressEntered,\r\n formItems, config, localeCode, actionContext, userInfo, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n const [dedicationPeriod, setDedicationPeriod] = useState([period[`${localeCode}`].period[0].label]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [schoolName, setSchoolName] = useState(['']);\r\n const [birthDate, setBirthDate] = useState(['']);\r\n const [birthTime, setBirthTime] = useState(['']);\r\n const [buildingName, setBuildingName] = useState(['']);\r\n const [unitNumber, setUnitNumber] = useState(['']);\r\n const [postalCode, setPostalCode] = useState(['']);\r\n const [countryName, setCountry] = useState(['']);\r\n\r\n const [timeRanges, setTimeRanges] = useState<{ value: string, label: string }[][]>([]);\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.servicesEducationForm[`${localeCode}`];\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (periodLabel: string, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period.scale[0]);\r\n }\r\n\r\n const scaleIdx = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === periodLabel);\r\n\r\n valueArray[`${index}`] = period.scale[`${scaleIdx}`];\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setDedicationPeriod = (event: any, index: number) => {\r\n const valueArray = dedicationPeriod.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period[`${localeCode}`].period[0].label);\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setDedicationPeriod(valueArray);\r\n\r\n callbackDedicationPeriod(valueArray);\r\n\r\n _setMultipler(event.label, index);\r\n }\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setCeremonyNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const valueArray = ceremonyName.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setCeremonyName(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(valueArray);\r\n }\r\n\r\n const _setSchoolName = (name: string, index: number) => {\r\n const valueArray = schoolName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setSchoolName(valueArray);\r\n\r\n callbackSchoolName(valueArray);\r\n\r\n _checkSchoolEntered(valueArray);\r\n }\r\n\r\n const _setBirthDate = (value: Date, index: number) => {\r\n const valueArray = birthDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(new Date().toISOString());\r\n }\r\n\r\n const date = value ? value.toISOString() : '';\r\n\r\n valueArray[`${index}`] = date;\r\n\r\n _setTimeRange(value, index);\r\n\r\n setBirthDate(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n\r\n _checkDateEntered(valueArray);\r\n }\r\n\r\n const _setBirthTime = (event: any, index: number) => {\r\n const valueArray = birthTime.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setBirthTime(valueArray);\r\n\r\n callbackBirthTime(valueArray);\r\n }\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setBuildingName(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumber.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setUnitNumber(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n }\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCode.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if(value.length<=6){\r\n valueArray[`${index}`] = value;\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setPostalCode(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setCountry = (event: any, index: number) => {\r\n const valueArray = countryName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setCountry(valueArray);\r\n\r\n callbackCountry(valueArray);\r\n }\r\n\r\n const _setTimeRange = (value: Date, index: number) => {\r\n const valueArray = timeRanges.slice();\r\n\r\n while (valueArray.length < dedicationPeriod.length) {\r\n valueArray.push(time.intervals);\r\n }\r\n\r\n const date = value ? value : new Date();\r\n\r\n const now = new Date();\r\n\r\n date.setHours(0, 0, 0, 0);\r\n\r\n if (date.getFullYear() >= now.getFullYear() && date.getMonth() >= now.getMonth() && date.getDate() >= now.getDate()) {\r\n const ranges: { value: string; label: string; }[] = [];\r\n\r\n time.intervals.map(range => {\r\n const interval = range.label.split(' ');\r\n\r\n const firstHour = parseInt(interval[0].split(':')[0]);\r\n const lastHour = parseInt(interval[interval.length - 1].split(':')[0]);\r\n\r\n if (firstHour <= now.getHours() && lastHour <= now.getHours() || firstHour <= now.getHours() && now.getHours() <= lastHour) {\r\n ranges.push(range);\r\n }\r\n });\r\n\r\n valueArray[`${index}`] = ranges;\r\n } else {\r\n valueArray[`${index}`] = time.intervals;\r\n }\r\n\r\n setTimeRanges(valueArray);\r\n }\r\n\r\n const _displayDedicationPeriod = (index: number): { value: string, label: string } => {\r\n if (dedicationPeriod.length > 0) {\r\n const selectValueArray = dedicationPeriod.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n return period[`${localeCode}`].period.find((item: { value: string, label: string }) => item.label === selectValueArray[`${index}`]);\r\n }\r\n }\r\n\r\n return { value: '', label: '' };\r\n }\r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkSchoolEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackSchoolsEntered(checked);\r\n }\r\n\r\n const _checkDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`] === '' || valueArray[`${i}`].includes('1900')) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackDateEntered(checked);\r\n }\r\n\r\n const _checkAddressEntered = (buildingArray: string[], postalCodeArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < buildingArray.length; ++i) {\r\n result = result && buildingArray[`${i}`] !== '' && postalCodeArray[`${i}`] !== '';\r\n }\r\n\r\n callbackAddressEntered(result);\r\n }\r\n\r\n const _initBuildingField = () => {\r\n if (userValid) {\r\n return userInfo.gmb_blockno.trim() + (userInfo.gmb_buildingno !== '' ? ', ' + userInfo.gmb_buildingno.trim() : '') + (userInfo.gmb_buildingname !== '' ? ', ' + userInfo.gmb_buildingname.trim() : '') + (userInfo.address1_line1 !== '' ? ', ' + userInfo.address1_line1.trim() : '') + (userInfo.address1_city !== '' ? ', ' + userInfo.address1_city.trim() : '');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _initCountryField = () => {\r\n if (userValid) {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n const location = states.find((place: { value: string, label: string }) => place.label.toUpperCase() === userInfo.address1_country.toUpperCase());\r\n\r\n return location ? location.label : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const schoolNameArray = schoolName.slice();\r\n const dateValueArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n multiplierArray.push(period.scale[0]);\r\n dedicationPeriodArray.push(period[`${localeCode}`].period[0].label);\r\n ceremonyNameArray.push('');\r\n schoolNameArray.push('');\r\n dateValueArray.push('');\r\n timeValueArray.push('');\r\n\r\n if (userValid) {\r\n buildingNameArray.push(_initBuildingField());\r\n unitNumberArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodeArray.push(userInfo.address1_postalcode);\r\n countryArray.push(_initCountryField());\r\n } else {\r\n buildingNameArray.push('');\r\n unitNumberArray.push('');\r\n postalCodeArray.push('');\r\n countryArray.push(countries[`${localeCode}`].countries[0].label);\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n setDedicationPeriod(dedicationPeriodArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setSchoolName(schoolNameArray);\r\n setBirthDate(dateValueArray);\r\n setBirthTime(timeValueArray);\r\n setBuildingName(buildingNameArray);\r\n setUnitNumber(unitNumberArray);\r\n setPostalCode(postalCodeArray);\r\n setCountry(countryArray);\r\n\r\n _setTimeRange(new Date(), dedicationPeriodArray.length - 1);\r\n\r\n callbackMultiplier(multiplierArray);\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n callbackName(ceremonyNameArray);\r\n callbackSchoolName(schoolNameArray);\r\n callbackBirthDate(dateValueArray);\r\n callbackBirthTime(timeValueArray);\r\n callbackBuilding(buildingNameArray);\r\n callbackUnitNumber(unitNumberArray);\r\n callbackPostalCode(postalCodeArray);\r\n callbackCountry(countryArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackSchoolsEntered(false);\r\n callbackDateEntered(true);\r\n\r\n _checkAddressEntered(buildingNameArray, postalCodeArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const schoolNameArray = schoolName.slice();\r\n const dateValueArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = period.scale[0];\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof dedicationPeriodArray[`${index}`] !== 'undefined') {\r\n if (dedicationPeriodArray.length > 1) {\r\n dedicationPeriodArray.splice(index, 1);\r\n } else {\r\n dedicationPeriodArray[0] = period[`${localeCode}`].period[0].label;\r\n }\r\n\r\n setDedicationPeriod(dedicationPeriodArray);\r\n\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n }\r\n\r\n if (typeof schoolNameArray[`${index}`] !== 'undefined') {\r\n if (schoolNameArray.length > 1) {\r\n schoolNameArray.splice(index, 1);\r\n } else {\r\n schoolNameArray[0] = '';\r\n }\r\n\r\n setSchoolName(schoolNameArray);\r\n\r\n callbackSchoolName(schoolNameArray);\r\n }\r\n\r\n if (typeof dateValueArray[`${index}`] !== 'undefined') {\r\n if (dateValueArray.length > 1) {\r\n dateValueArray.splice(index, 1);\r\n } else {\r\n dateValueArray[0] = '';\r\n }\r\n\r\n setBirthDate(dateValueArray);\r\n\r\n callbackBirthDate(dateValueArray);\r\n }\r\n\r\n if (typeof timeValueArray[`${index}`] !== 'undefined') {\r\n if (timeValueArray.length > 1) {\r\n timeValueArray.splice(index, 1);\r\n } else {\r\n timeValueArray[0] = '';\r\n }\r\n\r\n setBirthTime(timeValueArray);\r\n\r\n callbackBirthTime(timeValueArray);\r\n }\r\n\r\n if (typeof buildingNameArray[`${index}`] !== 'undefined') {\r\n if (buildingNameArray.length > 1) {\r\n buildingNameArray.splice(index, 1);\r\n } else {\r\n buildingNameArray[0] = '';\r\n }\r\n\r\n setBuildingName(buildingNameArray);\r\n\r\n callbackAddressEntered(buildingNameArray);\r\n }\r\n\r\n if (typeof unitNumberArray[`${index}`] !== 'undefined') {\r\n if (unitNumberArray.length > 1) {\r\n unitNumberArray.splice(index, 1);\r\n } else {\r\n unitNumberArray[0] = '';\r\n }\r\n\r\n setUnitNumber(unitNumberArray);\r\n\r\n callbackUnitNumber(unitNumberArray);\r\n }\r\n\r\n if (typeof postalCodeArray[`${index}`] !== 'undefined') {\r\n if (postalCodeArray.length > 1) {\r\n postalCodeArray.splice(index, 1);\r\n } else {\r\n postalCodeArray[0] = '';\r\n }\r\n\r\n setPostalCode(postalCodeArray);\r\n\r\n callbackPostalCode(postalCodeArray);\r\n }\r\n\r\n if (typeof countryArray[`${index}`] !== 'undefined') {\r\n if (countryArray.length > 1) {\r\n countryArray.splice(index, 1);\r\n } else {\r\n countryArray[0] = countries[`${localeCode}`].countries[0].label;\r\n }\r\n\r\n setCountry(countryArray);\r\n\r\n callbackCountry(countryArray);\r\n }\r\n\r\n if (typeof timeRanges[`${index}`] !== 'undefined') {\r\n if (timeRanges.length > 1) {\r\n timeRanges.splice(index, 1);\r\n } else {\r\n _setTimeRange(new Date(), 0);\r\n }\r\n }\r\n\r\n _checkNameEntered(ceremonyNameArray);\r\n _checkSchoolEntered(schoolNameArray);\r\n _checkDateEntered(dateValueArray);\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n useEffect(() => {\r\n const existingMultiplier: number[] = [];\r\n const existingDedicatedPeriod: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingSchoolName: string[] = [];\r\n const existingBirthDate: string[] = [];\r\n const existingBirthTime: string[] = [];\r\n const existingBuildingName: string[] = [];\r\n const existingUnitNumber: string[] = [];\r\n const existingPostalCode: string[] = [];\r\n const existingCountry: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const selectedPeriod = formItems[`${i}`]['dedicationPeriod'] !== '' ? formItems[`${i}`]['dedicationPeriod'] : period[`${localeCode}`].period[0].label;\r\n const index = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === selectedPeriod);\r\n\r\n const birthDate = formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']) : new Date();\r\n\r\n existingMultiplier.push(period.scale[`${index}`]);\r\n existingDedicatedPeriod.push(selectedPeriod);\r\n existingCeremonyName.push(formItems[`${i}`]['names'][0]);\r\n existingSchoolName.push(formItems[`${i}`]['schoolName']);\r\n existingBirthDate.push(birthDate.toISOString());\r\n existingBirthTime.push(formItems[`${i}`]['birthTime']);\r\n existingBuildingName.push(formItems[`${i}`]['buildingName']);\r\n existingUnitNumber.push(formItems[`${i}`]['unitNumber']);\r\n existingPostalCode.push(formItems[`${i}`]['postalCode']);\r\n existingCountry.push(formItems[`${i}`]['country']);\r\n\r\n _setTimeRange(birthDate, i);\r\n }\r\n\r\n setMultiplers(existingMultiplier);\r\n setDedicationPeriod(existingDedicatedPeriod);\r\n setCeremonyName(existingCeremonyName);\r\n setSchoolName(existingSchoolName);\r\n setBirthDate(existingBirthDate);\r\n setBirthTime(existingBirthTime);\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n\r\n callbackMultiplier(existingMultiplier);\r\n callbackDedicationPeriod(existingDedicatedPeriod);\r\n callbackName(existingCeremonyName);\r\n callbackSchoolName(existingSchoolName);\r\n callbackBirthDate(existingBirthDate);\r\n callbackBirthTime(existingBirthTime);\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n\r\n _checkNameEntered(existingCeremonyName);\r\n _checkSchoolEntered(existingSchoolName);\r\n _checkDateEntered(existingBirthDate);\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n } else {\r\n _setTimeRange(new Date(), 0);\r\n\r\n callbackMultiplier(multipliers);\r\n callbackDedicationPeriod(dedicationPeriod);\r\n }\r\n }, [formItems]);\r\n\r\n const _buildDedicationPeriod = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicationPeriod}

\r\n _setDedicationPeriod(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildSchoolField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.schoolName}

\r\n _setSchoolName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildBirthDateTime = (idx: number): JSX.Element | null => {\r\n if (timeRanges[`${idx}`] === undefined || birthDate[`${idx}`] === undefined) {\r\n return null;\r\n }\r\n\r\n const found = timeRanges[`${idx}`].find((slot: ITimeRange) => slot.label === birthTime[`${idx}`]);\r\n\r\n const displayTime = found ? found : { value: '', label: '' };\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.birthDate}

\r\n _setBirthDate(date, idx)}\r\n value={birthDate[`${idx}`] === '' || birthDate[`${idx}`].includes('1900') ? null : new Date(birthDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.birthTime}

\r\n _setBirthTime(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildAddressField = (idx: number): JSX.Element => {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n return (\r\n
\r\n

{formLabels.addressPrompt}

\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={buildingName[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={unitNumber[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n _setCountry(event, idx)}\r\n className={'select'}\r\n isSearchable={true}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'period') {\r\n return (\r\n
\r\n {_buildDedicationPeriod(idx)}\r\n {_buildNameField(idx)}\r\n {_buildSchoolField(idx)}\r\n {_buildBirthDateTime(idx)}\r\n {_buildAddressField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${multipliers[`${idx}`] * selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ServicesEducationForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport DatePicker from 'react-date-picker';\r\nimport Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport countries from '../resources/countries.json';\r\nimport period from '../../../resources/dedicationPeriod.json';\r\nimport resource from '../resources/resource.json';\r\nimport time from '../resources/time.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState, ITimeRange } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackDedicationPeriod: any;\r\n callbackStartDate: any;\r\n callbackName: any;\r\n callbackGender: any;\r\n callbackBirthDate: any;\r\n callbackBirthTime: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackCountry: any;\r\n callbackNamesEntered: any;\r\n callbackDateEntered: any;\r\n callbackAddressEntered: any;\r\n callbackRemarks?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n showRemarksField: boolean;\r\n}\r\n\r\nconst ServicesGeneralForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackMultiplier, callbackDedicationPeriod, callbackStartDate, callbackName, callbackGender, callbackBirthDate, callbackBirthTime,\r\n callbackBuilding, callbackUnitNumber, callbackPostalCode, callbackCountry,\r\n callbackNamesEntered, callbackDateEntered, callbackAddressEntered, callbackRemarks,\r\n formItems, config, localeCode, actionContext, userInfo, isMobile, isEditMode, allowMultipleRegistrations,showRemarksField }) => {\r\n const [dedicationPeriods, setDedicationPeriods] = useState([period[`${localeCode}`].period[0].label]);\r\n const [startDates, setStartDates] = useState(['']);\r\n const [names, setNames] = useState(['']);\r\n const [genders, setGenders] = useState([resource.genderMaleLabel[`${localeCode}`]]);\r\n const [birthDates, setBirthDates] = useState(['']);\r\n const [birthTimes, setBirthTimes] = useState(['']); \r\n const [buildingNames, setBuildingNames] = useState(['']);\r\n const [unitNumbers, setUnitNumbers] = useState(['']);\r\n const [postalCodes, setPostalCodes] = useState(['']);\r\n const [countryNames, setCountries] = useState(['']);\r\n const [remarks, setRemarks] = useState(['']);\r\n\r\n const [timeRanges, setTimeRanges] = useState<{ value: string, label: string }[][]>([]);\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.servicesGeneralForm[`${localeCode}`];\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const startDate = new Date();\r\n startDate.setDate(startDate.getDate() + 1);\r\n startDate.setHours(0, 0, 0, 0);\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (periodLabel: string, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period.scale[0]);\r\n }\r\n\r\n const scaleIdx = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === periodLabel);\r\n\r\n valueArray[`${index}`] = period.scale[`${scaleIdx}`];\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setDedicationPeriod = (event: any, index: number) => {\r\n const valueArray = dedicationPeriods.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period[`${localeCode}`].period[0].label);\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setDedicationPeriods(valueArray);\r\n\r\n callbackDedicationPeriod(valueArray);\r\n\r\n _setMultipler(event.label, index);\r\n }\r\n\r\n const _setStartDate = (value: Date, index: number) => {\r\n const valueArray = startDates.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(startDate.toISOString());\r\n }\r\n\r\n value.setHours(0, 0, 0, 0);\r\n\r\n const date = value ? value.toISOString() : startDate.toISOString();\r\n\r\n valueArray[`${index}`] = date;\r\n\r\n setStartDates(valueArray);\r\n\r\n callbackStartDate(valueArray);\r\n\r\n _checkDateEntered(valueArray, birthDates);\r\n }\r\n\r\n const _formatNameInput = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setName(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setName = (name: string, index: number) => {\r\n const valueArray = names.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setNames(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(valueArray);\r\n }\r\n\r\n const _setGender = (event: any, index: number) => {\r\n const valueArray = genders.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(resource.genderMaleLabel[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`] = event.target.value;\r\n\r\n setGenders(valueArray);\r\n \r\n callbackGender(valueArray);\r\n }\r\n\r\n const _setBirthDate = (value: Date, index: number) => {\r\n const valueArray = birthDates.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n const date = value ? value.toISOString() : '';\r\n\r\n valueArray[`${index}`] = date;\r\n\r\n _setTimeRange(value, index);\r\n\r\n setBirthDates(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n\r\n _checkDateEntered(startDates, valueArray);\r\n }\r\n\r\n const _setBirthTime = (event: any, index: number) => {\r\n const valueArray = birthTimes.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setBirthTimes(valueArray);\r\n\r\n callbackBirthTime(valueArray);\r\n }\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingNames.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setBuildingNames(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n\r\n _checkAddressEntered(valueArray, postalCodes, countryNames);\r\n }\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumbers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setUnitNumbers(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n }\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCodes.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if(value.length<=6){\r\n valueArray[`${index}`] = value;\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setPostalCodes(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n\r\n _checkAddressEntered(buildingNames, valueArray, countryNames);\r\n }\r\n\r\n const _setCountry = (event: any, index: number) => {\r\n const valueArray = countryNames.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setCountries(valueArray);\r\n\r\n callbackCountry(valueArray);\r\n\r\n _checkAddressEntered(buildingNames, postalCodes, valueArray);\r\n }\r\n\r\n const _setTimeRange = (value: Date, index: number) => {\r\n const valueArray = timeRanges.slice();\r\n\r\n while (valueArray.length < dedicationPeriods.length) {\r\n valueArray.push(time.intervals);\r\n }\r\n\r\n const date = value ? value : new Date();\r\n\r\n const now = new Date();\r\n\r\n date.setHours(0, 0, 0, 0);\r\n\r\n if (date.getFullYear() >= now.getFullYear() && date.getMonth() >= now.getMonth() && date.getDate() >= now.getDate()) {\r\n const ranges: { value: string; label: string; }[] = [];\r\n\r\n time.intervals.map(range => {\r\n const interval = range.label.split(' ');\r\n\r\n const firstHour = parseInt(interval[0].split(':')[0]);\r\n const lastHour = parseInt(interval[interval.length - 1].split(':')[0]);\r\n\r\n if (firstHour <= now.getHours() && lastHour <= now.getHours() || firstHour <= now.getHours() && now.getHours() <= lastHour) {\r\n ranges.push(range);\r\n }\r\n });\r\n\r\n valueArray[`${index}`] = ranges;\r\n } else {\r\n valueArray[`${index}`] = time.intervals;\r\n }\r\n\r\n setTimeRanges(valueArray);\r\n }\r\n\r\n const _displayDedicationPeriod = (index: number): { value: string, label: string } => {\r\n if (dedicationPeriods.length > 0) {\r\n const selectValueArray = dedicationPeriods.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n return period[`${localeCode}`].period.find((item: { value: string, label: string }) => item.label === selectValueArray[`${index}`]);\r\n }\r\n }\r\n\r\n return { value: '', label: '' };\r\n }\r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkDateEntered = (startDatesArray: string[], birthDatesArray: string[]) => {\r\n let result = true;\r\n\r\n const count = startDatesArray.length < birthDatesArray.length ? startDatesArray.length : birthDatesArray.length;\r\n\r\n for (let i = 0; i < count; i++) {\r\n const startDateInvalid = startDatesArray[`${i}`] === undefined || startDatesArray[`${i}`] === '' ? true : false;\r\n\r\n const birthDate = new Date(birthDatesArray[`${i}`]);\r\n\r\n const birthDateInvalid = birthDatesArray[`${i}`] === undefined || birthDatesArray[`${i}`] === '' || birthDate.getFullYear() <= 1900 || birthDate.getMonth() > 12 || birthDate.getDate() > 31 ? true : false;\r\n\r\n if (startDateInvalid || birthDateInvalid) {\r\n result = false; break;\r\n }\r\n }\r\n\r\n callbackDateEntered(result);\r\n }\r\n\r\n const _checkAddressEntered = (buildingNamesArray: string[], postalCodesArray: string[], countriesArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < buildingNamesArray.length; ++i) {\r\n result = result && buildingNamesArray[`${i}`] !== '' && postalCodesArray[`${i}`] !== '' && countriesArray[`${i}`] !== '';\r\n }\r\n\r\n callbackAddressEntered(result);\r\n }\r\n\r\n const _setRemarksInputValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 100;\r\n\r\n _setRemarkArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setRemarkArray = (name: string, index: number) => {\r\n const remarkArray = remarks.slice();\r\n\r\n while (typeof remarkArray[`${index}`] === 'undefined') {\r\n remarkArray.push('');\r\n }\r\n\r\n remarkArray[`${index}`] = name;\r\n\r\n remarkArray[`${index}`].trim();\r\n\r\n setRemarks(remarkArray);\r\n\r\n callbackRemarks(remarkArray);\r\n }\r\n\r\n const _initBuildingField = () => {\r\n if (userValid) {\r\n return userInfo.gmb_blockno.trim() + (userInfo.gmb_buildingno !== '' ? ', ' + userInfo.gmb_buildingno.trim() : '') + (userInfo.gmb_buildingname !== '' ? ', ' + userInfo.gmb_buildingname.trim() : '') + (userInfo.address1_line1 !== '' ? ', ' + userInfo.address1_line1.trim() : '') + (userInfo.address1_city !== '' ? ', ' + userInfo.address1_city.trim() : '');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _initCountryField = () => {\r\n if (userValid) {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n const location = states.find((place: { value: string, label: string }) => place.label.toUpperCase() === userInfo.address1_country.toUpperCase());\r\n\r\n return location ? location.label : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multipliersArray = multipliers.slice();\r\n const dedicationPeriodsArray = dedicationPeriods.slice();\r\n const startDatesArray = startDates.slice();\r\n const namesArray = names.slice();\r\n const gendersArray = genders.slice();\r\n const birthDatesArray = birthDates.slice();\r\n const birthTimesArray = birthTimes.slice();\r\n const buildingNamesArray = buildingNames.slice();\r\n const unitNumbersArray = unitNumbers.slice();\r\n const postalCodesArray = postalCodes.slice();\r\n const countriesArray = countryNames.slice();\r\n const remarksArray = remarks.slice();\r\n\r\n multipliersArray.push(period.scale[0]);\r\n dedicationPeriodsArray.push(period[`${localeCode}`].period[0].label);\r\n startDatesArray.push(startDate.toDateString());\r\n gendersArray.push(resource.genderMaleLabel[`${localeCode}`]);\r\n namesArray.push('');\r\n birthDatesArray.push('');\r\n birthTimesArray.push('');\r\n remarksArray.push('');\r\n\r\n if (userValid) {\r\n buildingNamesArray.push(_initBuildingField());\r\n unitNumbersArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodesArray.push(userInfo.address1_postalcode);\r\n countriesArray.push(_initCountryField());\r\n } else {\r\n buildingNamesArray.push('');\r\n unitNumbersArray.push('');\r\n postalCodesArray.push('');\r\n countriesArray.push(countries[`${localeCode}`].countries[0].label);\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n setDedicationPeriods(dedicationPeriodsArray);\r\n setStartDates(startDatesArray);\r\n setNames(namesArray);\r\n setGenders(gendersArray);\r\n setBirthDates(birthDatesArray);\r\n setBirthTimes(birthTimesArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setCountries(countriesArray);\r\n setRemarks(remarksArray);\r\n\r\n _setTimeRange(new Date(), dedicationPeriodsArray.length - 1);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackDedicationPeriod(dedicationPeriodsArray);\r\n callbackStartDate(startDatesArray);\r\n callbackName(namesArray);\r\n callbackGender(gendersArray);\r\n callbackBirthDate(birthDatesArray);\r\n callbackBirthTime(birthTimesArray);\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackCountry(countriesArray);\r\n callbackRemarks(remarksArray);\r\n\r\n callbackNamesEntered(false);\r\n \r\n _checkDateEntered(startDatesArray, birthDatesArray);\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray, countriesArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multipliersArray = multipliers.slice();\r\n const dedicationPeriodsArray = dedicationPeriods.slice();\r\n const startDatesArray = startDates.slice();\r\n const namesArray = names.slice();\r\n const gendersArray = genders.slice();\r\n const birthDatesArray = birthDates.slice();\r\n const birthTimesArray = birthTimes.slice();\r\n const buildingNamesArray = buildingNames.slice();\r\n const unitNumbersArray = unitNumbers.slice();\r\n const postalCodesArray = postalCodes.slice();\r\n const countriesArray = countryNames.slice();\r\n const remarksArray = remarks.slice();\r\n\r\n if (typeof multipliersArray[`${index}`] !== 'undefined') {\r\n if (multipliersArray.length > 1) {\r\n multipliersArray.splice(index, 1);\r\n } else {\r\n multipliersArray[0] = period.scale[0];\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n }\r\n\r\n if (typeof dedicationPeriodsArray[`${index}`] !== 'undefined') {\r\n if (dedicationPeriodsArray.length > 1) {\r\n dedicationPeriodsArray.splice(index, 1);\r\n } else {\r\n dedicationPeriodsArray[0] = period[`${localeCode}`].period[0].label;\r\n }\r\n\r\n setDedicationPeriods(dedicationPeriodsArray);\r\n\r\n callbackDedicationPeriod(dedicationPeriodsArray);\r\n }\r\n\r\n if (typeof startDatesArray[`${index}`] !== 'undefined') {\r\n if (startDatesArray.length > 1) {\r\n startDatesArray.splice(index, 1);\r\n } else {\r\n startDatesArray[0] = startDate.toISOString();\r\n }\r\n\r\n setStartDates(startDatesArray);\r\n\r\n callbackStartDate(startDatesArray);\r\n }\r\n\r\n if (typeof namesArray[`${index}`] !== 'undefined') {\r\n if (namesArray.length > 1) {\r\n namesArray.splice(index, 1);\r\n } else {\r\n namesArray[0] = '';\r\n }\r\n\r\n setNames(namesArray);\r\n\r\n callbackName(namesArray);\r\n }\r\n\r\n if (typeof gendersArray[`${index}`] !== 'undefined') {\r\n if (gendersArray.length > 1) {\r\n gendersArray.splice(index, 1);\r\n } else {\r\n gendersArray[0] = resource.genderMaleLabel[`${localeCode}`];\r\n }\r\n\r\n setGenders(gendersArray);\r\n\r\n callbackGender(gendersArray);\r\n }\r\n\r\n if (typeof birthDatesArray[`${index}`] !== 'undefined') {\r\n if (birthDatesArray.length > 1) {\r\n birthDatesArray.splice(index, 1);\r\n } else {\r\n birthDatesArray[0] = '';\r\n }\r\n\r\n setBirthDates(birthDatesArray);\r\n\r\n callbackBirthDate(birthDatesArray);\r\n }\r\n\r\n if (typeof birthTimesArray[`${index}`] !== 'undefined') {\r\n if (birthTimesArray.length > 1) {\r\n birthTimesArray.splice(index, 1);\r\n } else {\r\n birthTimesArray[0] = '';\r\n }\r\n\r\n setBirthTimes(birthTimesArray);\r\n\r\n callbackBirthTime(birthTimesArray);\r\n }\r\n\r\n if (typeof buildingNamesArray[`${index}`] !== 'undefined') {\r\n if (buildingNamesArray.length > 1) {\r\n buildingNamesArray.splice(index, 1);\r\n } else {\r\n buildingNamesArray[0] = '';\r\n }\r\n\r\n setBuildingNames(buildingNamesArray);\r\n\r\n callbackAddressEntered(buildingNamesArray);\r\n }\r\n\r\n if (typeof unitNumbersArray[`${index}`] !== 'undefined') {\r\n if (unitNumbersArray.length > 1) {\r\n unitNumbersArray.splice(index, 1);\r\n } else {\r\n unitNumbersArray[0] = '';\r\n }\r\n\r\n setUnitNumbers(unitNumbersArray);\r\n\r\n callbackUnitNumber(unitNumbersArray);\r\n }\r\n\r\n if (typeof postalCodesArray[`${index}`] !== 'undefined') {\r\n if (postalCodesArray.length > 1) {\r\n postalCodesArray.splice(index, 1);\r\n } else {\r\n postalCodesArray[0] = '';\r\n }\r\n\r\n setPostalCodes(postalCodesArray);\r\n\r\n callbackPostalCode(postalCodesArray);\r\n }\r\n\r\n if (typeof countriesArray[`${index}`] !== 'undefined') {\r\n if (countriesArray.length > 1) {\r\n countriesArray.splice(index, 1);\r\n } else {\r\n countriesArray[0] = countries[`${localeCode}`].countries[0].label;\r\n }\r\n\r\n setCountries(countriesArray);\r\n\r\n callbackCountry(countriesArray);\r\n }\r\n\r\n if (typeof timeRanges[`${index}`] !== 'undefined') {\r\n if (timeRanges.length > 1) {\r\n timeRanges.splice(index, 1);\r\n } else {\r\n _setTimeRange(new Date(), 0);\r\n }\r\n }\r\n\r\n if (typeof remarksArray[`${index}`] !== 'undefined') {\r\n if (remarksArray.length > 1) {\r\n remarksArray.splice(index, 1);\r\n } else {\r\n remarksArray[0] = '';\r\n }\r\n\r\n setRemarks(postalCodesArray);\r\n\r\n callbackRemarks(postalCodesArray);\r\n }\r\n\r\n _checkNameEntered(namesArray);\r\n _checkDateEntered(startDatesArray, birthDatesArray);\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray, countriesArray);\r\n }\r\n\r\n useEffect(() => {\r\n const multipliersArray: number[] = [];\r\n const dedicatedPeriodsArray: string[] = [];\r\n const startDatesArray: string[] = [];\r\n const namesArray: string[] = [];\r\n const gendersArray: string[] = [];\r\n const birthDatesArray: string[] = [];\r\n const birthTimesArray: string[] = [];\r\n const buildingNamesArray: string[] = [];\r\n const unitNumbersArray: string[] = [];\r\n const postalCodesArray: string[] = [];\r\n const countriesArray: string[] = [];\r\n const remarksArray: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const selectedPeriod = formItems[`${i}`]['dedicationPeriod'] !== '' ? formItems[`${i}`]['dedicationPeriod'] : period[`${localeCode}`].period[0].label;\r\n const index = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === selectedPeriod);\r\n\r\n const gender = formItems[`${i}`]['gender'] !== '' ? formItems[`${i}`]['gender'] : resource.genderMaleLabel[`${localeCode}`];\r\n\r\n const birthDate = formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']) : new Date();\r\n\r\n multipliersArray.push(period.scale[`${index}`]);\r\n dedicatedPeriodsArray.push(selectedPeriod);\r\n startDatesArray.push(formItems[`${i}`]['startDate'] ? formItems[`${i}`]['startDate'] : startDate.toISOString());\r\n namesArray.push(formItems[`${i}`]['names'][0]);\r\n gendersArray.push(gender);\r\n birthDatesArray.push(birthDate.toISOString());\r\n birthTimesArray.push(formItems[`${i}`]['birthTime']);\r\n buildingNamesArray.push(formItems[`${i}`]['buildingName']);\r\n unitNumbersArray.push(formItems[`${i}`]['unitNumber']);\r\n postalCodesArray.push(formItems[`${i}`]['postalCode']);\r\n countriesArray.push(formItems[`${i}`]['country']);\r\n remarksArray.push(formItems[`${i}`]['remarks']);\r\n \r\n _setTimeRange(birthDate, i);\r\n }\r\n\r\n setMultiplers(multipliersArray);\r\n setDedicationPeriods(dedicatedPeriodsArray);\r\n setNames(namesArray);\r\n setGenders(gendersArray);\r\n setBirthDates(birthDatesArray);\r\n setBirthTimes(birthTimesArray);\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setCountries(countriesArray);\r\n setRemarks(remarksArray);\r\n\r\n callbackMultiplier(multipliersArray);\r\n callbackDedicationPeriod(dedicatedPeriodsArray);\r\n callbackName(namesArray);\r\n callbackGender(gendersArray);\r\n callbackBirthDate(birthDatesArray);\r\n callbackBirthTime(birthTimesArray);\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackCountry(countriesArray);\r\n callbackRemarks(remarksArray);\r\n\r\n _checkNameEntered(namesArray);\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray, countriesArray);\r\n } else {\r\n if (userValid) {\r\n buildingNamesArray.push(_initBuildingField());\r\n unitNumbersArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodesArray.push(userInfo.address1_postalcode);\r\n countriesArray.push(_initCountryField());\r\n\r\n setBuildingNames(buildingNamesArray);\r\n setUnitNumbers(unitNumbersArray);\r\n setPostalCodes(postalCodesArray);\r\n setCountries(countriesArray);\r\n\r\n callbackBuilding(buildingNamesArray);\r\n callbackUnitNumber(unitNumbersArray);\r\n callbackPostalCode(postalCodesArray);\r\n callbackCountry(countriesArray);\r\n\r\n _checkAddressEntered(buildingNamesArray, postalCodesArray, countriesArray);\r\n }\r\n\r\n startDatesArray.push(startDate.toISOString());\r\n gendersArray.push(resource.genderMaleLabel[`${localeCode}`]);\r\n\r\n _setTimeRange(new Date(), 0);\r\n\r\n callbackDedicationPeriod(dedicationPeriods);\r\n callbackGender(gendersArray);\r\n }\r\n\r\n setStartDates(startDatesArray);\r\n\r\n callbackStartDate(startDatesArray);\r\n\r\n _checkDateEntered(startDatesArray, birthDatesArray);\r\n }, [formItems])\r\n\r\n const _buildDedicationPeriod = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicationPeriod}

\r\n _setDedicationPeriod(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.startDate}

\r\n _setStartDate(date, idx)}\r\n value={startDates[`${idx}`] === '' || startDates[`${idx}`].includes('1900') ? null : new Date(startDates[`${idx}`])}\r\n format={'dd-MM-y'}\r\n minDate={startDate}\r\n className={'datepicker'}\r\n dayPlaceholder={'DD'}\r\n monthPlaceholder={'MM'}\r\n yearPlaceholder={'YYYY'}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name}

\r\n _formatNameInput(event, idx)}\r\n onKeyDown={event => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete='none'\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildGenderField = (idx: number): JSX.Element | null => {\r\n if (typeof genders[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.gender}

\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildBirthDateTime = (idx: number): JSX.Element | null => {\r\n if (timeRanges[`${idx}`] === undefined || birthDates[`${idx}`] === undefined) {\r\n return null;\r\n }\r\n\r\n const found = timeRanges[`${idx}`].find((slot: ITimeRange) => slot.label === birthTimes[`${idx}`]);\r\n\r\n const displayTime = found ? found : { value: '', label: 'Select time' };\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.birthDate}

\r\n _setBirthDate(date, idx)}\r\n value={birthDates[`${idx}`] === '' || birthDates[`${idx}`].includes('1900') ? null : new Date(birthDates[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={'DD'}\r\n monthPlaceholder={'MM'}\r\n yearPlaceholder={'YYYY'}\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.birthTime}

\r\n _setBirthTime(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildAddressField = (idx: number): JSX.Element => {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n return (\r\n
\r\n

{formLabels.addressPrompt}

\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={buildingNames[`${idx}`]}\r\n type='text'\r\n autoComplete='none'\r\n />\r\n\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={unitNumbers[`${idx}`]}\r\n type='text'\r\n autoComplete='none'\r\n />\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete='none'\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n _setCountry(event, idx)}\r\n className={'select'}\r\n isSearchable={true}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildRemarks = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.remarks}

\r\n _setRemarksInputValue(event, idx)}\r\n className='form-control'\r\n maxLength={config.charactersLimitForRemarks ? config.charactersLimitForRemarks : 101}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'period') {\r\n return (\r\n
\r\n {_buildDedicationPeriod(idx)}\r\n {_buildNameField(idx)}\r\n {_buildGenderField(idx)}\r\n {_buildBirthDateTime(idx)}\r\n {_buildAddressField(idx)}\r\n {showRemarksField && _buildRemarks(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${multipliers[`${idx}`] * selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ServicesGeneralForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport DatePicker from 'react-date-picker';\r\nimport Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport countries from '../resources/countries.json';\r\nimport period from '../../../resources/dedicationPeriod.json';\r\nimport resource from '../resources/resource.json';\r\nimport time from '../resources/time.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState, ITimeRange } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackDedicationPeriod: any;\r\n callbackName?: any;\r\n callbackSurgeryDate: any;\r\n callbackBirthDate: any;\r\n callbackBirthTime: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackCountry: any;\r\n callbackNamesEntered?: any;\r\n callbackDateEntered: any;\r\n callbackAddressEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst ServicesHealthSurgeryForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackMultiplier, callbackDedicationPeriod, callbackName, callbackSurgeryDate, callbackBirthDate, callbackBirthTime,\r\n callbackBuilding, callbackUnitNumber, callbackPostalCode, callbackCountry,\r\n callbackNamesEntered, callbackDateEntered, callbackAddressEntered,\r\n formItems, config, localeCode, actionContext, userInfo, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n const [dedicationPeriod, setDedicationPeriod] = useState([period[`${localeCode}`].period[0].label]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [surgeryDate, setSurgeryDate] = useState(['']);\r\n const [birthDate, setBirthDate] = useState(['']);\r\n const [birthTime, setBirthTime] = useState(['']);\r\n const [buildingName, setBuildingName] = useState(['']);\r\n const [unitNumber, setUnitNumber] = useState(['']);\r\n const [postalCode, setPostalCode] = useState(['']);\r\n const [countryName, setCountry] = useState(['']);\r\n\r\n const [timeRanges, setTimeRanges] = useState<{ value: string, label: string }[][]>([]);\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.servicesHealthSurgeryForm[`${localeCode}`];\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (periodLabel: string, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period.scale[0]);\r\n }\r\n\r\n const scaleIdx = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === periodLabel);\r\n\r\n valueArray[`${index}`] = period.scale[`${scaleIdx}`];\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setDedicationPeriod = (event: any, index: number) => {\r\n const valueArray = dedicationPeriod.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period[`${localeCode}`].period[0].label);\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setDedicationPeriod(valueArray);\r\n\r\n callbackDedicationPeriod(valueArray);\r\n\r\n _setMultipler(event.label, index);\r\n }\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setCeremonyNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const valueArray = ceremonyName.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setCeremonyName(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(valueArray);\r\n }\r\n\r\n const _setSurgeryDate = (value: Date, index: number) => {\r\n const valueArray = surgeryDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(new Date().toISOString());\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n setSurgeryDate(valueArray);\r\n\r\n callbackSurgeryDate(valueArray);\r\n\r\n _checkDateEntered(valueArray, birthDate);\r\n }\r\n\r\n const _setTimeRange = (value: Date, index: number) => {\r\n const valueArray = timeRanges.slice();\r\n\r\n while (valueArray.length < dedicationPeriod.length) {\r\n valueArray.push(time.intervals);\r\n }\r\n\r\n const date = value ? value : new Date();\r\n\r\n const now = new Date();\r\n\r\n date.setHours(0, 0, 0, 0);\r\n\r\n if (date.getFullYear() >= now.getFullYear() && date.getMonth() >= now.getMonth() && date.getDate() >= now.getDate()) {\r\n const ranges: { value: string; label: string; }[] = [];\r\n\r\n time.intervals.map(range => {\r\n const interval = range.label.split(' ');\r\n\r\n const firstHour = parseInt(interval[0].split(':')[0]);\r\n const lastHour = parseInt(interval[interval.length - 1].split(':')[0]);\r\n\r\n if (firstHour <= now.getHours() && lastHour <= now.getHours() || firstHour <= now.getHours() && now.getHours() <= lastHour) {\r\n ranges.push(range);\r\n }\r\n });\r\n\r\n valueArray[`${index}`] = ranges;\r\n } else {\r\n valueArray[`${index}`] = time.intervals;\r\n }\r\n\r\n setTimeRanges(valueArray);\r\n }\r\n\r\n const _setBirthDate = (value: Date, index: number) => {\r\n const valueArray = birthDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(new Date().toISOString());\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n _setTimeRange(value, index);\r\n\r\n setBirthDate(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n\r\n _checkDateEntered(surgeryDate, valueArray);\r\n }\r\n\r\n const _setBirthTime = (event: any, index: number) => {\r\n const valueArray = birthTime.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setBirthTime(valueArray);\r\n\r\n callbackBirthTime(valueArray);\r\n }\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setBuildingName(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumber.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setUnitNumber(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n }\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCode.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if(value.length<=6){\r\n valueArray[`${index}`] = value;\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setPostalCode(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setCountry = (event: any, index: number) => {\r\n const valueArray = countryName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setCountry(valueArray);\r\n\r\n callbackCountry(valueArray);\r\n }\r\n\r\n const _displayDedicationPeriod = (index: number): { value: string, label: string } => {\r\n if (dedicationPeriod.length > 0) {\r\n const selectValueArray = dedicationPeriod.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n return period[`${localeCode}`].period.find((item: { value: string, label: string }) => item.label === selectValueArray[`${index}`]);\r\n }\r\n }\r\n\r\n return { value: '', label: '' };\r\n }\r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkDateEntered = (surgeryDateArray: string[], birthDateArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < surgeryDateArray.length; ++i) {\r\n result = result && (surgeryDateArray[`${i}`] !== '' || !surgeryDateArray[`${i}`].includes('1900')) && (birthDateArray[`${i}`] !== '' || !birthDateArray[`${i}`].includes('1900'));\r\n }\r\n\r\n callbackDateEntered(result);\r\n }\r\n\r\n const _checkAddressEntered = (buildingArray: string[], postalCodeArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < buildingArray.length; ++i) {\r\n result = result && buildingArray[`${i}`] !== '' && postalCodeArray[`${i}`] !== '';\r\n }\r\n\r\n callbackAddressEntered(result);\r\n }\r\n\r\n const _initBuildingField = () => {\r\n if (userValid) {\r\n return userInfo.gmb_blockno.trim() + (userInfo.gmb_buildingno !== '' ? ', ' + userInfo.gmb_buildingno.trim() : '') + (userInfo.gmb_buildingname !== '' ? ', ' + userInfo.gmb_buildingname.trim() : '') + (userInfo.address1_line1 !== '' ? ', ' + userInfo.address1_line1.trim() : '') + (userInfo.address1_city !== '' ? ', ' + userInfo.address1_city.trim() : '');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _initCountryField = () => {\r\n if (userValid) {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n const location = states.find((place: { value: string, label: string }) => place.label.toUpperCase() === userInfo.address1_country.toUpperCase());\r\n\r\n return location ? location.label : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const surgeryValueArray = surgeryDate.slice();\r\n const dateValueArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n multiplierArray.push(period.scale[0]);\r\n dedicationPeriodArray.push(period[`${localeCode}`].period[0].label);\r\n ceremonyNameArray.push('');\r\n surgeryValueArray.push('');\r\n dateValueArray.push('');\r\n timeValueArray.push('');\r\n\r\n if (userValid) {\r\n buildingNameArray.push(_initBuildingField());\r\n unitNumberArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodeArray.push(userInfo.address1_postalcode);\r\n countryArray.push(_initCountryField());\r\n } else {\r\n buildingNameArray.push('');\r\n unitNumberArray.push('');\r\n postalCodeArray.push('');\r\n countryArray.push(countries[`${localeCode}`].countries[0].label);\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n setDedicationPeriod(dedicationPeriodArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setSurgeryDate(surgeryValueArray);\r\n setBirthDate(dateValueArray);\r\n setBirthTime(timeValueArray);\r\n setBuildingName(buildingNameArray);\r\n setUnitNumber(unitNumberArray);\r\n setPostalCode(postalCodeArray);\r\n setCountry(countryArray);\r\n\r\n _setTimeRange(new Date(), dedicationPeriodArray.length - 1);\r\n\r\n callbackMultiplier(multiplierArray);\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n callbackName(ceremonyNameArray);\r\n callbackSurgeryDate(surgeryValueArray);\r\n callbackBirthDate(dateValueArray);\r\n callbackBirthTime(timeValueArray);\r\n callbackBuilding(buildingNameArray);\r\n callbackUnitNumber(unitNumberArray);\r\n callbackPostalCode(postalCodeArray);\r\n callbackCountry(countryArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackDateEntered(true);\r\n\r\n _checkAddressEntered(buildingNameArray, postalCodeArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const surgeryValueArray = surgeryDate.slice();\r\n const dateValueArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = period.scale[0];\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof dedicationPeriodArray[`${index}`] !== 'undefined') {\r\n if (dedicationPeriodArray.length > 1) {\r\n dedicationPeriodArray.splice(index, 1);\r\n } else {\r\n dedicationPeriodArray[0] = period[`${localeCode}`].period[0].label;\r\n }\r\n\r\n setDedicationPeriod(dedicationPeriodArray);\r\n\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNameEntered(ceremonyNameArray);\r\n }\r\n\r\n if (typeof surgeryValueArray[`${index}`] !== 'undefined') {\r\n if (surgeryValueArray.length > 1) {\r\n surgeryValueArray.splice(index, 1);\r\n } else {\r\n surgeryValueArray[0] = '';\r\n }\r\n\r\n setSurgeryDate(surgeryValueArray);\r\n\r\n callbackSurgeryDate(surgeryValueArray);\r\n }\r\n\r\n if (typeof dateValueArray[`${index}`] !== 'undefined') {\r\n if (dateValueArray.length > 1) {\r\n dateValueArray.splice(index, 1);\r\n } else {\r\n dateValueArray[0] = '';\r\n }\r\n\r\n setBirthDate(dateValueArray);\r\n\r\n callbackBirthDate(dateValueArray);\r\n }\r\n\r\n if (typeof timeValueArray[`${index}`] !== 'undefined') {\r\n if (timeValueArray.length > 1) {\r\n timeValueArray.splice(index, 1);\r\n } else {\r\n timeValueArray[0] = '';\r\n }\r\n\r\n setBirthTime(timeValueArray);\r\n\r\n callbackBirthTime(timeValueArray);\r\n }\r\n\r\n if (typeof buildingNameArray[`${index}`] !== 'undefined') {\r\n if (buildingNameArray.length > 1) {\r\n buildingNameArray.splice(index, 1);\r\n } else {\r\n buildingNameArray[0] = '';\r\n }\r\n\r\n setBuildingName(buildingNameArray);\r\n\r\n callbackAddressEntered(buildingNameArray);\r\n }\r\n\r\n if (typeof unitNumberArray[`${index}`] !== 'undefined') {\r\n if (unitNumberArray.length > 1) {\r\n unitNumberArray.splice(index, 1);\r\n } else {\r\n unitNumberArray[0] = '';\r\n }\r\n\r\n setUnitNumber(unitNumberArray);\r\n\r\n callbackUnitNumber(unitNumberArray);\r\n }\r\n\r\n if (typeof postalCodeArray[`${index}`] !== 'undefined') {\r\n if (postalCodeArray.length > 1) {\r\n postalCodeArray.splice(index, 1);\r\n } else {\r\n postalCodeArray[0] = '';\r\n }\r\n\r\n setPostalCode(postalCodeArray);\r\n\r\n callbackPostalCode(postalCodeArray);\r\n }\r\n\r\n if (typeof countryArray[`${index}`] !== 'undefined') {\r\n if (countryArray.length > 1) {\r\n countryArray.splice(index, 1);\r\n } else {\r\n countryArray[0] = countries[`${localeCode}`].countries[0].label;\r\n }\r\n\r\n setCountry(countryArray);\r\n\r\n callbackCountry(countryArray);\r\n }\r\n\r\n if (typeof timeRanges[`${index}`] !== 'undefined') {\r\n if (timeRanges.length > 1) {\r\n timeRanges.splice(index, 1);\r\n } else {\r\n _setTimeRange(new Date(), 0);\r\n }\r\n }\r\n\r\n _checkDateEntered(dateValueArray, surgeryValueArray);\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n useEffect(() => {\r\n const existingMultiplier: number[] = [];\r\n const existingDedicatedPeriod: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingSurgeryDate: string[] = [];\r\n const existingBirthDate: string[] = [];\r\n const existingBirthTime: string[] = [];\r\n const existingBuildingName: string[] = [];\r\n const existingUnitNumber: string[] = [];\r\n const existingPostalCode: string[] = [];\r\n const existingCountry: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const selectedPeriod = formItems[`${i}`]['dedicationPeriod'] !== '' ? formItems[`${i}`]['dedicationPeriod'] : period[`${localeCode}`].period[0].label;\r\n const index = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === selectedPeriod);\r\n\r\n const surgeryDate = formItems[`${i}`]['surgeryDate'] !== '' ? new Date(formItems[`${i}`]['surgeryDate']) : new Date();\r\n const birthDate = formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']) : new Date();\r\n\r\n existingMultiplier.push(period.scale[`${index}`]);\r\n existingDedicatedPeriod.push(selectedPeriod);\r\n existingCeremonyName.push(formItems[`${i}`]['names'][0]);\r\n existingSurgeryDate.push(surgeryDate.toISOString());\r\n existingBirthDate.push(birthDate.toISOString());\r\n existingBirthTime.push(formItems[`${i}`]['birthTime']);\r\n existingBuildingName.push(formItems[`${i}`]['buildingName']);\r\n existingUnitNumber.push(formItems[`${i}`]['unitNumber']);\r\n existingPostalCode.push(formItems[`${i}`]['postalCode']);\r\n existingCountry.push(formItems[`${i}`]['country']);\r\n\r\n _setTimeRange(birthDate, i);\r\n }\r\n\r\n setMultiplers(existingMultiplier);\r\n setDedicationPeriod(existingDedicatedPeriod);\r\n setCeremonyName(existingCeremonyName);\r\n setSurgeryDate(existingSurgeryDate);\r\n setBirthDate(existingBirthDate);\r\n setBirthTime(existingBirthTime);\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n\r\n callbackMultiplier(existingMultiplier);\r\n callbackDedicationPeriod(existingDedicatedPeriod);\r\n callbackName(existingCeremonyName);\r\n callbackSurgeryDate(existingSurgeryDate);\r\n callbackBirthDate(existingBirthDate);\r\n callbackBirthTime(existingBirthTime);\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n\r\n _checkNameEntered(existingCeremonyName);\r\n _checkDateEntered(existingSurgeryDate, existingBirthDate);\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n } else {\r\n _setTimeRange(new Date(), 0);\r\n\r\n callbackDedicationPeriod(dedicationPeriod);\r\n }\r\n }, [formItems]);\r\n\r\n const _buildDedicationPeriod = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicationPeriod}

\r\n _setDedicationPeriod(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.name}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildSurgeryDate = (idx: number): JSX.Element | null => {\r\n if (surgeryDate[`${idx}`] === undefined) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.surgeryDate}

\r\n _setSurgeryDate(date, idx)}\r\n value={surgeryDate[`${idx}`] === '' || surgeryDate[`${idx}`].includes('1900') ? null : new Date(surgeryDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n minDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildBirthDateTime = (idx: number): JSX.Element | null => {\r\n if (timeRanges[`${idx}`] === undefined || birthDate[`${idx}`] === undefined) {\r\n return null;\r\n }\r\n\r\n const found = timeRanges[`${idx}`].find((slot: ITimeRange) => slot.label === birthTime[`${idx}`]);\r\n\r\n const displayTime = found ? found : { value: '', label: '' };\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.birthDate}

\r\n _setBirthDate(date, idx)}\r\n value={birthDate[`${idx}`] === '' || birthDate[`${idx}`].includes('1900') ? null : new Date(birthDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.birthTime}

\r\n _setBirthTime(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildAddressField = (idx: number): JSX.Element => {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n return (\r\n
\r\n

{formLabels.addressPrompt}

\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n _setCountry(event, idx)}\r\n className={'select'}\r\n isSearchable={true}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'period') {\r\n return (\r\n
\r\n {_buildDedicationPeriod(idx)}\r\n {_buildNameField(idx)}\r\n {_buildSurgeryDate(idx)}\r\n {_buildBirthDateTime(idx)}\r\n {_buildAddressField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${multipliers[`${idx}`] * selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ServicesHealthSurgeryForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport DatePicker from 'react-date-picker';\r\nimport Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport blessings from '../resources/blessingType.json';\r\nimport countries from '../resources/countries.json';\r\nimport period from '../../../resources/dedicationPeriod.json';\r\nimport resource from '../resources/resource.json';\r\nimport time from '../resources/time.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState, ITimeRange } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackDedicationPeriod: any;\r\n callbackBlessingType: any;\r\n callbackName?: any;\r\n callbackBirthDate: any;\r\n callbackBirthTime: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackCountry: any;\r\n callbackNamesEntered?: any;\r\n callbackDateEntered: any;\r\n callbackAddressEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst ServicesInfantSpiritForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackMultiplier, callbackDedicationPeriod, callbackBlessingType, callbackName, callbackBirthDate, callbackBirthTime,\r\n callbackBuilding, callbackUnitNumber, callbackPostalCode, callbackCountry,\r\n callbackNamesEntered, callbackDateEntered, callbackAddressEntered,\r\n formItems, config, localeCode, actionContext, userInfo, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n const [dedicationPeriod, setDedicationPeriod] = useState([period[`${localeCode}`].period[0].label]);\r\n const [blessingType, setBlessingType] = useState([blessings[`${localeCode}`].options[0].label]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [birthDate, setBirthDate] = useState(['']);\r\n const [birthTime, setBirthTime] = useState(['']);\r\n const [buildingName, setBuildingName] = useState(['']);\r\n const [unitNumber, setUnitNumber] = useState(['']);\r\n const [postalCode, setPostalCode] = useState(['']);\r\n const [countryName, setCountry] = useState(['']);\r\n\r\n const [timeRanges, setTimeRanges] = useState<{ value: string, label: string }[][]>([]);\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const formLabels = resource.servicesInfantSpiritForm[`${localeCode}`];\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (periodLabel: string, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period.scale[0]);\r\n }\r\n\r\n const scaleIdx = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === periodLabel);\r\n\r\n valueArray[`${index}`] = period.scale[`${scaleIdx}`];\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setDedicationPeriod = (event: any, index: number) => {\r\n const valueArray = dedicationPeriod.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period[`${localeCode}`].period[0].label);\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setDedicationPeriod(valueArray);\r\n\r\n callbackDedicationPeriod(valueArray);\r\n\r\n _setMultipler(event.label, index);\r\n }\r\n\r\n const _setBlessingType = (event: any, index: number) => {\r\n const valueArray = blessingType.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(blessings[`${localeCode}`].options[0].label);\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setBlessingType(valueArray);\r\n\r\n callbackBlessingType(valueArray);\r\n }\r\n\r\n const _setNameInputValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setCeremonyNameArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const valueArray = ceremonyName.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = name;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setCeremonyName(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(valueArray);\r\n }\r\n\r\n const _setBirthDate = (value: Date, index: number) => {\r\n const valueArray = birthDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(new Date().toISOString());\r\n }\r\n\r\n valueArray[`${index}`] = value ? value.toISOString() : '';\r\n\r\n _setTimeRange(value, index);\r\n\r\n setBirthDate(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n\r\n _checkDateEntered(valueArray);\r\n }\r\n\r\n const _setBirthTime = (event: any, index: number) => {\r\n const valueArray = birthTime.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setBirthTime(valueArray);\r\n\r\n callbackBirthTime(valueArray);\r\n }\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setBuildingName(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumber.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setUnitNumber(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n }\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCode.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if(value.length<=6){\r\n valueArray[`${index}`] = value;\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setPostalCode(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setCountry = (event: any, index: number) => {\r\n const valueArray = countryName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setCountry(valueArray);\r\n\r\n callbackCountry(valueArray);\r\n }\r\n\r\n const _setTimeRange = (value: Date, index: number) => {\r\n const valueArray = timeRanges.slice();\r\n\r\n while (valueArray.length < dedicationPeriod.length) {\r\n valueArray.push(time.intervals);\r\n }\r\n\r\n const date = value ? value : new Date();\r\n\r\n const now = new Date();\r\n\r\n date.setHours(0, 0, 0, 0);\r\n\r\n if (date.getFullYear() >= now.getFullYear() && date.getMonth() >= now.getMonth() && date.getDate() >= now.getDate()) {\r\n const ranges: { value: string; label: string; }[] = [];\r\n\r\n time.intervals.map(range => {\r\n const interval = range.label.split(' ');\r\n\r\n const firstHour = parseInt(interval[0].split(':')[0]);\r\n const lastHour = parseInt(interval[interval.length - 1].split(':')[0]);\r\n\r\n if (firstHour <= now.getHours() && lastHour <= now.getHours() || firstHour <= now.getHours() && now.getHours() <= lastHour) {\r\n ranges.push(range);\r\n }\r\n });\r\n\r\n valueArray[`${index}`] = ranges;\r\n } else {\r\n valueArray[`${index}`] = time.intervals;\r\n }\r\n\r\n setTimeRanges(valueArray);\r\n }\r\n\r\n const _displayDedicationPeriod = (index: number): { value: string, label: string } => {\r\n if (dedicationPeriod.length > 0) {\r\n const selectValueArray = dedicationPeriod.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n return period[`${localeCode}`].period.find((item: { value: string, label: string }) => item.label === selectValueArray[`${index}`]);\r\n }\r\n }\r\n\r\n return { value: '', label: '' };\r\n }\r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`] === '' || valueArray[`${i}`].includes('1900')) {\r\n checked = false; break;\r\n }\r\n }\r\n\r\n callbackDateEntered(checked);\r\n }\r\n\r\n const _checkAddressEntered = (buildingArray: string[], postalCodeArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < buildingArray.length; ++i) {\r\n result = result && buildingArray[`${i}`] !== '' && postalCodeArray[`${i}`] !== '';\r\n }\r\n\r\n callbackAddressEntered(result);\r\n }\r\n\r\n const _initBuildingField = () => {\r\n if (userValid) {\r\n return userInfo.gmb_blockno.trim() + (userInfo.gmb_buildingno !== '' ? ', ' + userInfo.gmb_buildingno.trim() : '') + (userInfo.gmb_buildingname !== '' ? ', ' + userInfo.gmb_buildingname.trim() : '') + (userInfo.address1_line1 !== '' ? ', ' + userInfo.address1_line1.trim() : '') + (userInfo.address1_city !== '' ? ', ' + userInfo.address1_city.trim() : '');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _initCountryField = () => {\r\n if (userValid) {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n const location = states.find((place: { value: string, label: string }) => place.label.toUpperCase() === userInfo.address1_country.toUpperCase());\r\n\r\n return location ? location.label : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const blessingOptionArray = blessingType.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dateValueArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n multiplierArray.push(period.scale[0]);\r\n dedicationPeriodArray.push(period[`${localeCode}`].period[0].label);\r\n blessingOptionArray.push(blessings[`${localeCode}`].options[0].label);\r\n ceremonyNameArray.push('');\r\n dateValueArray.push('');\r\n timeValueArray.push('');\r\n\r\n if (userValid) {\r\n buildingNameArray.push(_initBuildingField());\r\n unitNumberArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodeArray.push(userInfo.address1_postalcode);\r\n countryArray.push(_initCountryField());\r\n } else {\r\n buildingNameArray.push('');\r\n unitNumberArray.push('');\r\n postalCodeArray.push('');\r\n countryArray.push(countries[`${localeCode}`].countries[0].label);\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n setDedicationPeriod(dedicationPeriodArray);\r\n setBlessingType(blessingOptionArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setBirthDate(dateValueArray);\r\n setBirthTime(timeValueArray);\r\n setBuildingName(buildingNameArray);\r\n setUnitNumber(unitNumberArray);\r\n setPostalCode(postalCodeArray);\r\n setCountry(countryArray);\r\n\r\n _setTimeRange(new Date(), dedicationPeriodArray.length - 1);\r\n\r\n callbackMultiplier(multiplierArray);\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n callbackBlessingType(blessingOptionArray);\r\n callbackName(ceremonyNameArray);\r\n callbackBirthDate(dateValueArray);\r\n callbackBirthTime(timeValueArray);\r\n callbackBuilding(buildingNameArray);\r\n callbackUnitNumber(unitNumberArray);\r\n callbackPostalCode(postalCodeArray);\r\n callbackCountry(countryArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackDateEntered(true);\r\n\r\n _checkAddressEntered(buildingNameArray, postalCodeArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const blessingOptionArray = blessingType.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dateValueArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = period.scale[0];\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof dedicationPeriodArray[`${index}`] !== 'undefined') {\r\n if (dedicationPeriodArray.length > 1) {\r\n dedicationPeriodArray.splice(index, 1);\r\n } else {\r\n dedicationPeriodArray[0] = period[`${localeCode}`].period[0].label;\r\n }\r\n\r\n setDedicationPeriod(dedicationPeriodArray);\r\n\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n }\r\n\r\n if (typeof blessingOptionArray[`${index}`] !== 'undefined') {\r\n if (blessingOptionArray.length > 1) {\r\n blessingOptionArray.splice(index, 1);\r\n } else {\r\n blessingOptionArray[0] = blessings[`${localeCode}`].options[0].label;\r\n }\r\n\r\n setBlessingType(blessingOptionArray);\r\n\r\n callbackBlessingType(blessingOptionArray);\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n }\r\n\r\n if (typeof dateValueArray[`${index}`] !== 'undefined') {\r\n if (dateValueArray.length > 1) {\r\n dateValueArray.splice(index, 1);\r\n } else {\r\n dateValueArray[0] = '';\r\n }\r\n\r\n setBirthDate(dateValueArray);\r\n\r\n callbackBirthDate(dateValueArray);\r\n }\r\n\r\n if (typeof timeValueArray[`${index}`] !== 'undefined') {\r\n if (timeValueArray.length > 1) {\r\n timeValueArray.splice(index, 1);\r\n } else {\r\n timeValueArray[0] = '';\r\n }\r\n\r\n setBirthTime(timeValueArray);\r\n\r\n callbackBirthTime(timeValueArray);\r\n }\r\n\r\n if (typeof buildingNameArray[`${index}`] !== 'undefined') {\r\n if (buildingNameArray.length > 1) {\r\n buildingNameArray.splice(index, 1);\r\n } else {\r\n buildingNameArray[0] = '';\r\n }\r\n\r\n setBuildingName(buildingNameArray);\r\n\r\n callbackAddressEntered(buildingNameArray);\r\n }\r\n\r\n if (typeof unitNumberArray[`${index}`] !== 'undefined') {\r\n if (unitNumberArray.length > 1) {\r\n unitNumberArray.splice(index, 1);\r\n } else {\r\n unitNumberArray[0] = '';\r\n }\r\n\r\n setUnitNumber(unitNumberArray);\r\n\r\n callbackUnitNumber(unitNumberArray);\r\n }\r\n\r\n if (typeof postalCodeArray[`${index}`] !== 'undefined') {\r\n if (postalCodeArray.length > 1) {\r\n postalCodeArray.splice(index, 1);\r\n } else {\r\n postalCodeArray[0] = '';\r\n }\r\n\r\n setPostalCode(postalCodeArray);\r\n\r\n callbackPostalCode(postalCodeArray);\r\n }\r\n\r\n if (typeof countryArray[`${index}`] !== 'undefined') {\r\n if (countryArray.length > 1) {\r\n countryArray.splice(index, 1);\r\n } else {\r\n countryArray[0] = countries[`${localeCode}`].countries[0].label;\r\n }\r\n\r\n setCountry(countryArray);\r\n\r\n callbackCountry(countryArray);\r\n }\r\n\r\n if (typeof timeRanges[`${index}`] !== 'undefined') {\r\n if (timeRanges.length > 1) {\r\n timeRanges.splice(index, 1);\r\n } else {\r\n _setTimeRange(new Date(), 0);\r\n }\r\n }\r\n\r\n _checkNameEntered(ceremonyNameArray);\r\n _checkDateEntered(dateValueArray);\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n useEffect(() => {\r\n const existingMultiplier: number[] = [];\r\n const existingDedicatedPeriod: string[] = [];\r\n const existingBlessingType: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingBirthDate: string[] = [];\r\n const existingBirthTime: string[] = [];\r\n const existingBuildingName: string[] = [];\r\n const existingUnitNumber: string[] = [];\r\n const existingPostalCode: string[] = [];\r\n const existingCountry: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const selectedPeriod = formItems[`${i}`]['dedicationPeriod'] !== '' ? formItems[`${i}`]['dedicationPeriod'] : period[`${localeCode}`].period[0].label;\r\n const index = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === selectedPeriod);\r\n\r\n const birthDate = formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']) : new Date();\r\n\r\n existingMultiplier.push(period.scale[`${index}`]);\r\n existingDedicatedPeriod.push(selectedPeriod);\r\n existingBlessingType.push(formItems[`${i}`]['blessingOption'] !== '' ? formItems[`${i}`]['blessingOption'] : blessings[`${localeCode}`].options[0].label);\r\n existingCeremonyName.push(formItems[`${i}`]['names'][0]);\r\n existingBirthDate.push(birthDate.toISOString());\r\n existingBirthTime.push(formItems[`${i}`]['birthTime']);\r\n existingBuildingName.push(formItems[`${i}`]['buildingName']);\r\n existingUnitNumber.push(formItems[`${i}`]['unitNumber']);\r\n existingPostalCode.push(formItems[`${i}`]['postalCode']);\r\n existingCountry.push(formItems[`${i}`]['country']);\r\n\r\n _setTimeRange(birthDate, i);\r\n }\r\n\r\n setMultiplers(existingMultiplier);\r\n setDedicationPeriod(existingDedicatedPeriod);\r\n setBlessingType(existingBlessingType);\r\n setCeremonyName(existingCeremonyName);\r\n setBirthDate(existingBirthDate);\r\n setBirthTime(existingBirthTime);\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n\r\n callbackMultiplier(existingMultiplier);\r\n callbackDedicationPeriod(existingDedicatedPeriod);\r\n callbackBlessingType(existingBlessingType);\r\n callbackName(existingCeremonyName);\r\n callbackBirthDate(existingBirthDate);\r\n callbackBirthTime(existingBirthTime);\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n\r\n _checkNameEntered(existingCeremonyName);\r\n _checkDateEntered(existingBirthDate);\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n } else {\r\n if (userValid) {\r\n existingBuildingName.push(_initBuildingField());\r\n existingUnitNumber.push(userInfo.gmb_unitnofloorapartmentno);\r\n existingPostalCode.push(userInfo.address1_postalcode);\r\n existingCountry.push(_initCountryField());\r\n\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n }\r\n\r\n _setTimeRange(new Date(), 0);\r\n\r\n callbackDedicationPeriod(dedicationPeriod);\r\n callbackBlessingType(blessingType);\r\n }\r\n }, [formItems]);\r\n\r\n const _buildDedicationPeriod = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicationPeriod}

\r\n _setDedicationPeriod(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildBlessingOptions = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.blessingType}

\r\n _setBlessingType(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.parentDetailsPrompt}

\r\n

{formLabels.name}

\r\n _setNameInputValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildBirthDateTime = (idx: number): JSX.Element | null => {\r\n if (timeRanges[`${idx}`] === undefined || birthDate[`${idx}`] === undefined) {\r\n return null;\r\n }\r\n\r\n const found = timeRanges[`${idx}`].find((slot: ITimeRange) => slot.label === birthTime[`${idx}`]);\r\n\r\n const displayTime = found ? found : { value: '', label: '' };\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.birthDate}

\r\n _setBirthDate(date, idx)}\r\n value={birthDate[`${idx}`] === '' || birthDate[`${idx}`].includes('1900') ? null : new Date(birthDate[`${idx}`])}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.birthTime}

\r\n _setBirthTime(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildAddressField = (idx: number): JSX.Element => {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n return (\r\n
\r\n

{formLabels.addressPrompt}

\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={buildingName[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={unitNumber[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n _setCountry(event, idx)}\r\n className={'select'}\r\n isSearchable={true}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'period') {\r\n return (\r\n
\r\n {_buildDedicationPeriod(idx)}\r\n {_buildBlessingOptions(idx)}\r\n {_buildNameField(idx)}\r\n {_buildBirthDateTime(idx)}\r\n {_buildAddressField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${multipliers[`${idx}`] * selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ServicesInfantSpiritForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport DatePicker from 'react-date-picker';\r\nimport Select from 'react-select';\r\n\r\nimport { useForm } from 'react-hook-form';\r\nimport { toast } from 'react-toastify';\r\n\r\nimport countries from '../resources/countries.json';\r\nimport period from '../../../resources/dedicationPeriod.json';\r\nimport resource from '../resources/resource.json';\r\nimport time from '../resources/time.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackMultiplier: any;\r\n callbackDedicationPeriod: any;\r\n callbackName?: any;\r\n callbackBirthDate: any;\r\n callbackBirthTime: any;\r\n callbackBuilding: any;\r\n callbackUnitNumber: any;\r\n callbackPostalCode: any;\r\n callbackCountry: any;\r\n callbackNamesEntered?: any;\r\n callbackDateEntered: any;\r\n callbackAddressEntered: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n userInfo: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst ServicesMarriageForm: React.FC = ({\r\n formScheme, selectedProduct, rowsData, addRow, deleteRow,\r\n callbackMultiplier, callbackDedicationPeriod, callbackName, callbackBirthDate, callbackBirthTime,\r\n callbackBuilding, callbackUnitNumber, callbackPostalCode, callbackCountry,\r\n callbackNamesEntered, callbackDateEntered, callbackAddressEntered,\r\n formItems, config, localeCode, actionContext, userInfo, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n const [dedicationPeriod, setDedicationPeriod] = useState([period[`${localeCode}`].period[0].label]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [birthDate, setBirthDate] = useState(['']);\r\n const [birthTime, setBirthTime] = useState(['']);\r\n const [buildingName, setBuildingName] = useState(['']);\r\n const [unitNumber, setUnitNumber] = useState(['']);\r\n const [postalCode, setPostalCode] = useState(['']);\r\n const [countryName, setCountry] = useState(['']);\r\n\r\n const [multipliers, setMultiplers] = useState([1]);\r\n\r\n const moment = require('moment');\r\n const formLabels = resource.servicesMarriageForm[`${localeCode}`];\r\n const userValid = (userInfo && userInfo.emailaddress1) ? userInfo.emailaddress1.trim() !== '' : false;\r\n const noPersons = 2;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n }\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _setMultipler = (periodLabel: string, index: number) => {\r\n const valueArray = multipliers.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period.scale[0]);\r\n }\r\n\r\n const scaleIdx = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === periodLabel);\r\n\r\n valueArray[`${index}`] = period.scale[`${scaleIdx}`];\r\n\r\n setMultiplers(valueArray);\r\n\r\n callbackMultiplier(valueArray);\r\n }\r\n\r\n const _setDedicationPeriod = (event: any, index: number) => {\r\n const valueArray = dedicationPeriod.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(period[`${localeCode}`].period[0].label);\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setDedicationPeriod(valueArray);\r\n\r\n callbackDedicationPeriod(valueArray);\r\n\r\n _setMultipler(event.label, index);\r\n }\r\n\r\n const _setDisplayValue = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNamesInputValue = (event: any, index: number, elementIdx: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let storedElements = ceremonyName[`${index}`];\r\n\r\n if (!storedElements.includes(';')) {\r\n storedElements += ';'.repeat(1);\r\n }\r\n\r\n const valueArray = storedElements.split(';');\r\n\r\n valueArray[`${elementIdx}`] = event.target.value.substring(0, maxLength - 1);\r\n\r\n _setCeremonyNameArray(valueArray.join(';'), index);\r\n }\r\n\r\n const _setCeremonyNameArray = (value: string, index: number) => {\r\n const valueArray = ceremonyName.slice();\r\n\r\n // To handle adding of a new form record.\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setCeremonyName(valueArray);\r\n\r\n callbackName(valueArray);\r\n\r\n _checkNameEntered(valueArray);\r\n }\r\n\r\n const _displayFirstDateValue = (value: string): string => {\r\n if (value.includes(';')) {\r\n const valueSplit = value.split(';');\r\n\r\n return valueSplit[0];\r\n }\r\n\r\n return value;\r\n }\r\n\r\n const _displaySecondDateValue = (value: string): string => {\r\n if (value.includes(';')) {\r\n const valueSplit = value.split(';');\r\n\r\n return _formatDateString(valueSplit[1]);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n const _formatDateString = (value: string): string => {\r\n // Convert DD-MM-YYYY into YYYY-MM-DD to initialise DateTime object.\r\n if (value === '') {\r\n return '';\r\n }\r\n\r\n const birthDate = value.split('-');\r\n\r\n return birthDate[2] + '-' + birthDate[1] + '-' + birthDate[0];\r\n }\r\n\r\n const _setDatesInputValue = (value: Date, index: number, elementIdx: number) => {\r\n let storedElements = birthDate[`${index}`];\r\n\r\n if (!storedElements.includes(';')) {\r\n storedElements += ';'.repeat(1);\r\n }\r\n\r\n const valueArray = storedElements.split(';');\r\n\r\n const date = value ? value : new Date(1900, 1, 1);\r\n\r\n valueArray[`${elementIdx}`] = elementIdx === 0 ? date.toISOString() : moment(date).format('DD-MM-YYYY');\r\n\r\n _setBirthDate(valueArray.join(';'), index);\r\n }\r\n\r\n const _setBirthDate = (value: string, index: number) => {\r\n const valueArray = birthDate.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setBirthDate(valueArray);\r\n\r\n callbackBirthDate(valueArray);\r\n\r\n _checkDateEntered(valueArray);\r\n }\r\n\r\n const _setTimesInputValue = (event: any, index: number, elementIdx: number) => {\r\n let storedElements = birthTime[`${index}`];\r\n\r\n if (!storedElements.includes(';')) {\r\n storedElements += ';'.repeat(1);\r\n }\r\n\r\n const valueArray = storedElements.split(';');\r\n\r\n valueArray[`${elementIdx}`] = event.label;\r\n\r\n _setBirthTime(valueArray.join(';'), index);\r\n }\r\n\r\n const _setBirthTime = (value: string, index: number) => {\r\n const valueArray = birthTime.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n setBirthTime(valueArray);\r\n\r\n callbackBirthTime(valueArray);\r\n }\r\n\r\n const _setBuildingName = (value: string, index: number) => {\r\n const valueArray = buildingName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setBuildingName(valueArray);\r\n\r\n callbackBuilding(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setUnitNumber = (value: string, index: number) => {\r\n const valueArray = unitNumber.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = value;\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setUnitNumber(valueArray);\r\n\r\n callbackUnitNumber(valueArray);\r\n }\r\n\r\n const _setPostalCode = (value: string, index: number) => {\r\n const valueArray = postalCode.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n if(value.length<=6){\r\n valueArray[`${index}`] = value;\r\n }else{\r\n toast.warning(resource.invalidPostalCodeMessage[`${localeCode}`]);\r\n }\r\n\r\n valueArray[`${index}`].trim();\r\n\r\n setPostalCode(valueArray);\r\n\r\n callbackPostalCode(valueArray);\r\n\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n const _setCountry = (event: any, index: number) => {\r\n const valueArray = countryName.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push('');\r\n }\r\n\r\n valueArray[`${index}`] = event.label;\r\n\r\n setCountry(valueArray);\r\n\r\n callbackCountry(valueArray);\r\n }\r\n\r\n const _displayDedicationPeriod = (index: number): { value: string, label: string } => {\r\n if (dedicationPeriod.length > 0) {\r\n const selectValueArray = dedicationPeriod.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined') {\r\n return period[`${localeCode}`].period.find((item: { value: string, label: string }) => item.label === selectValueArray[`${index}`]);\r\n }\r\n }\r\n\r\n return { value: '', label: '' };\r\n }\r\n\r\n const _checkNameEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n if (valueArray.length > 0) {\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].length > 0 && valueArray[`${i}`].indexOf(\";\") > 0) {\r\n var namesArray = valueArray[`${i}`].split(\";\");\r\n for (let j = 0; j < namesArray.length; j++) {\r\n if (namesArray[`${j}`].replace(/;/g, '').trim() === '') {\r\n checked = false; break;\r\n }\r\n }\r\n } else {\r\n checked = false; break;\r\n }\r\n }\r\n }\r\n else {\r\n checked = false\r\n }\r\n\r\n callbackNamesEntered(checked);\r\n }\r\n\r\n const _checkDateEntered = (valueArray: string[]) => {\r\n let checked = true;\r\n\r\n if (valueArray.length > 0) {\r\n for (let i = 0; i < valueArray.length; i++) {\r\n if (valueArray[`${i}`].length > 0 && valueArray[`${i}`].indexOf(\";\") > 0) {\r\n var dateArray = valueArray[`${i}`].split(\";\");\r\n\r\n if (dateArray.length === noPersons) {\r\n for (let j = 0; j < dateArray.length; j++) {\r\n const value = dateArray[`${j}`].replace(/;/g, '').trim();\r\n\r\n if (value === '' || value.includes('1900')) {\r\n checked = false; break;\r\n }\r\n }\r\n } else {\r\n checked = false; break;\r\n }\r\n } else {\r\n checked = false; break;\r\n }\r\n }\r\n }\r\n else {\r\n checked = false\r\n }\r\n\r\n callbackDateEntered(checked);\r\n }\r\n\r\n const _checkAddressEntered = (buildingArray: string[], postalCodeArray: string[]) => {\r\n let result = true;\r\n\r\n for (let i = 0; i < buildingArray.length; ++i) {\r\n result = result && buildingArray[`${i}`] !== '' && postalCodeArray[`${i}`] !== '';\r\n }\r\n\r\n callbackAddressEntered(result);\r\n }\r\n\r\n const _initBuildingField = () => {\r\n if (userValid) {\r\n return userInfo.gmb_blockno.trim() + (userInfo.gmb_buildingno !== '' ? ', ' + userInfo.gmb_buildingno.trim() : '') + (userInfo.gmb_buildingname !== '' ? ', ' + userInfo.gmb_buildingname.trim() : '') + (userInfo.address1_line1 !== '' ? ', ' + userInfo.address1_line1.trim() : '') + (userInfo.address1_city !== '' ? ', ' + userInfo.address1_city.trim() : '');\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _initCountryField = () => {\r\n if (userValid) {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n const location = states.find((place: { value: string, label: string }) => place.label.toUpperCase() === userInfo.address1_country.toUpperCase());\r\n\r\n return location ? location.label : '';\r\n }\r\n\r\n return '';\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dateValueArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n multiplierArray.push(period.scale[0]);\r\n dedicationPeriodArray.push(period[`${localeCode}`].period[0].label);\r\n ceremonyNameArray.push('');\r\n dateValueArray.push('');\r\n timeValueArray.push('');\r\n\r\n if (userValid) {\r\n buildingNameArray.push(_initBuildingField());\r\n unitNumberArray.push(userInfo.gmb_unitnofloorapartmentno);\r\n postalCodeArray.push(userInfo.address1_postalcode);\r\n countryArray.push(_initCountryField());\r\n } else {\r\n buildingNameArray.push('');\r\n unitNumberArray.push('');\r\n postalCodeArray.push('');\r\n countryArray.push(countries[`${localeCode}`].countries[0].label);\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n setDedicationPeriod(dedicationPeriodArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setBirthDate(dateValueArray);\r\n setBirthTime(timeValueArray);\r\n setBuildingName(buildingNameArray);\r\n setUnitNumber(unitNumberArray);\r\n setPostalCode(postalCodeArray);\r\n setCountry(countryArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n callbackName(ceremonyNameArray);\r\n callbackBirthDate(dateValueArray);\r\n callbackBirthTime(timeValueArray);\r\n callbackBuilding(buildingNameArray);\r\n callbackUnitNumber(unitNumberArray);\r\n callbackPostalCode(postalCodeArray);\r\n callbackCountry(countryArray);\r\n\r\n callbackNamesEntered(false);\r\n callbackDateEntered(true);\r\n\r\n _checkAddressEntered(buildingNameArray, postalCodeArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const multiplierArray = multipliers.slice();\r\n const dedicationPeriodArray = dedicationPeriod.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dateValueArray = birthDate.slice();\r\n const timeValueArray = birthTime.slice();\r\n const buildingNameArray = buildingName.slice();\r\n const unitNumberArray = unitNumber.slice();\r\n const postalCodeArray = postalCode.slice();\r\n const countryArray = countryName.slice();\r\n\r\n if (typeof multiplierArray[`${index}`] !== 'undefined') {\r\n if (multiplierArray.length > 1) {\r\n multiplierArray.splice(index, 1);\r\n } else {\r\n multiplierArray[0] = period.scale[0];\r\n }\r\n\r\n setMultiplers(multiplierArray);\r\n\r\n callbackMultiplier(multiplierArray);\r\n }\r\n\r\n if (typeof dedicationPeriodArray[`${index}`] !== 'undefined') {\r\n if (dedicationPeriodArray.length > 1) {\r\n dedicationPeriodArray.splice(index, 1);\r\n } else {\r\n dedicationPeriodArray[0] = period[`${localeCode}`].period[0].label;\r\n }\r\n\r\n setDedicationPeriod(dedicationPeriodArray);\r\n\r\n callbackDedicationPeriod(dedicationPeriodArray);\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n }\r\n\r\n if (typeof dateValueArray[`${index}`] !== 'undefined') {\r\n if (dateValueArray.length > 1) {\r\n dateValueArray.splice(index, 1);\r\n } else {\r\n dateValueArray[0] = '';\r\n }\r\n\r\n setBirthDate(dateValueArray);\r\n\r\n callbackBirthDate(dateValueArray);\r\n }\r\n\r\n if (typeof timeValueArray[`${index}`] !== 'undefined') {\r\n if (timeValueArray.length > 1) {\r\n timeValueArray.splice(index, 1);\r\n } else {\r\n timeValueArray[0] = '';\r\n }\r\n\r\n setBirthTime(timeValueArray);\r\n\r\n callbackBirthTime(timeValueArray);\r\n }\r\n\r\n if (typeof buildingNameArray[`${index}`] !== 'undefined') {\r\n if (buildingNameArray.length > 1) {\r\n buildingNameArray.splice(index, 1);\r\n } else {\r\n buildingNameArray[0] = '';\r\n }\r\n\r\n setBuildingName(buildingNameArray);\r\n\r\n callbackAddressEntered(buildingNameArray);\r\n }\r\n\r\n if (typeof unitNumberArray[`${index}`] !== 'undefined') {\r\n if (unitNumberArray.length > 1) {\r\n unitNumberArray.splice(index, 1);\r\n } else {\r\n unitNumberArray[0] = '';\r\n }\r\n\r\n setUnitNumber(unitNumberArray);\r\n\r\n callbackUnitNumber(unitNumberArray);\r\n }\r\n\r\n if (typeof postalCodeArray[`${index}`] !== 'undefined') {\r\n if (postalCodeArray.length > 1) {\r\n postalCodeArray.splice(index, 1);\r\n } else {\r\n postalCodeArray[0] = '';\r\n }\r\n\r\n setPostalCode(postalCodeArray);\r\n\r\n callbackPostalCode(postalCodeArray);\r\n }\r\n\r\n if (typeof countryArray[`${index}`] !== 'undefined') {\r\n if (countryArray.length > 1) {\r\n countryArray.splice(index, 1);\r\n } else {\r\n countryArray[0] = countries[`${localeCode}`].countries[0].label;\r\n }\r\n\r\n setCountry(countryArray);\r\n\r\n callbackCountry(countryArray);\r\n }\r\n\r\n _checkNameEntered(ceremonyNameArray);\r\n _checkDateEntered(dateValueArray);\r\n _checkAddressEntered(buildingName, postalCode);\r\n }\r\n\r\n useEffect(() => {\r\n const existingMultiplier: number[] = [];\r\n const existingDedicatedPeriod: string[] = [];\r\n const existingCeremonyName: string[] = [];\r\n const existingBirthDate: string[] = [];\r\n const existingBirthTime: string[] = [];\r\n const existingBuildingName: string[] = [];\r\n const existingUnitNumber: string[] = [];\r\n const existingPostalCode: string[] = [];\r\n const existingCountry: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n const selectedPeriod = formItems[`${i}`]['dedicationPeriod'] !== '' ? formItems[`${i}`]['dedicationPeriod'] : period[`${localeCode}`].period[0].label;\r\n const index = period[`${localeCode}`].period.findIndex((item: { value: number; label: string; }) => item.label === selectedPeriod);\r\n const itemNames: string[] = formItems[`${i}`]['names'];\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index !== 0 && index < noPersons) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n const birthDates = (formItems[`${i}`]['birthDate'] !== '' ? new Date(formItems[`${i}`]['birthDate']).toISOString() : new Date().toISOString()) + (formItems[`${i}`]['birthDate_2'] !== '' ? ';' + moment(formItems[`${i}`]['birthDate_2']).format('DD-MM-YYYY') : '');\r\n\r\n const birthTimes = formItems[`${i}`]['birthTime'] + (formItems[`${i}`]['birthTime_2'] !== '' ? ';' + formItems[`${i}`]['birthTime_2'] : '');\r\n\r\n existingMultiplier.push(period.scale[`${index}`]);\r\n existingDedicatedPeriod.push(selectedPeriod);\r\n existingCeremonyName.push(itemName);\r\n existingBirthDate.push(birthDates);\r\n existingBirthTime.push(birthTimes);\r\n existingBuildingName.push(formItems[`${i}`]['buildingName']);\r\n existingUnitNumber.push(formItems[`${i}`]['unitNumber']);\r\n existingPostalCode.push(formItems[`${i}`]['postalCode']);\r\n existingCountry.push(formItems[`${i}`]['country']);\r\n }\r\n\r\n setMultiplers(existingMultiplier);\r\n setDedicationPeriod(existingDedicatedPeriod);\r\n setCeremonyName(existingCeremonyName);\r\n setBirthDate(existingBirthDate);\r\n setBirthTime(existingBirthTime);\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n\r\n callbackMultiplier(existingMultiplier);\r\n callbackDedicationPeriod(existingDedicatedPeriod);\r\n callbackName(existingCeremonyName);\r\n callbackBirthDate(existingBirthDate);\r\n callbackBirthTime(existingBirthTime);\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n\r\n _checkNameEntered(existingCeremonyName);\r\n _checkDateEntered(existingBirthDate);\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n } else {\r\n if (userValid) {\r\n existingBuildingName.push(_initBuildingField());\r\n existingUnitNumber.push(userInfo.gmb_unitnofloorapartmentno);\r\n existingPostalCode.push(userInfo.address1_postalcode);\r\n existingCountry.push(_initCountryField());\r\n\r\n setBuildingName(existingBuildingName);\r\n setUnitNumber(existingUnitNumber);\r\n setPostalCode(existingPostalCode);\r\n setCountry(existingCountry);\r\n\r\n callbackBuilding(existingBuildingName);\r\n callbackUnitNumber(existingUnitNumber);\r\n callbackPostalCode(existingPostalCode);\r\n callbackCountry(existingCountry);\r\n\r\n _checkAddressEntered(existingBuildingName, existingPostalCode);\r\n }\r\n\r\n callbackDedicationPeriod(dedicationPeriod);\r\n }\r\n }, [formItems]);\r\n\r\n const _buildDedicationPeriod = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicationPeriod}

\r\n _setDedicationPeriod(event, idx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameField = (idx: number, elementIdx: number): JSX.Element => {\r\n return (\r\n
\r\n

{formLabels.detailsPrompt + ' ' + (elementIdx + 1)}

\r\n
\r\n

{formLabels.name}

\r\n _setNamesInputValue(event, idx, elementIdx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n autoComplete=\"none\"\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildBirthDateTime = (idx: number, elementIdx: number): JSX.Element | null => {\r\n const displayBirthDate = elementIdx === 0 ? _displayFirstDateValue(birthDate[`${idx}`]) : _displaySecondDateValue(birthDate[`${idx}`]);\r\n\r\n if (displayBirthDate === undefined) {\r\n return null;\r\n }\r\n\r\n const found = time.intervals.find(slot => slot.label === _setDisplayValue(birthTime[`${idx}`], elementIdx));\r\n\r\n const displayTime = found ? found : { value: '', label: '' };\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.birthDate}

\r\n _setDatesInputValue(date, idx, elementIdx)}\r\n value={displayBirthDate === '' || displayBirthDate.includes('1900') ? null : new Date(displayBirthDate)}\r\n format={'dd-MM-y'}\r\n maxDate={new Date()}\r\n className={'datepicker'}\r\n dayPlaceholder={''}\r\n monthPlaceholder={''}\r\n yearPlaceholder={''}\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.birthTime}

\r\n _setTimesInputValue(event, idx, elementIdx)}\r\n className={'select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildAddressField = (idx: number): JSX.Element => {\r\n const states = countries[`${localeCode}`].countries;\r\n\r\n return (\r\n
\r\n

{formLabels.addressPrompt}

\r\n
\r\n

{formLabels.addressBuilding}

\r\n _setBuildingName(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={buildingName[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n\r\n

{formLabels.addressUnit}

\r\n _setUnitNumber(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n value={unitNumber[`${idx}`]}\r\n type='text'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n
\r\n

{formLabels.addressPostalCode}

\r\n _setPostalCode(event.target.value, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n autoComplete=\"none\"\r\n />\r\n
\r\n\r\n
\r\n

{formLabels.addressCountry}

\r\n _setCountry(event, idx)}\r\n className={'select'}\r\n isSearchable={true}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'period') {\r\n return (\r\n
\r\n {_buildDedicationPeriod(idx)}\r\n {_buildNameField(idx, 0)}\r\n {_buildBirthDateTime(idx, 0)}\r\n {_buildNameField(idx, 1)}\r\n {_buildBirthDateTime(idx, 1)}\r\n {_buildAddressField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${multipliers[`${idx}`] * selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ServicesMarriageForm;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport Select from 'react-select';\r\n\r\nimport quantity from '../resources/consecrationQuantity.json';\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n subProduct: SimpleProduct;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackName?: any;\r\n callbackCategory?: any;\r\n callbackDedicatedBy?: any;\r\n callbackSubProductQuantity?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst ThreeCategoryNamesConsecrationForm1: React.FC = ({ formScheme, selectedProduct, subProduct, rowsData, addRow, deleteRow, callbackName, callbackCategory, callbackDedicatedBy, callbackSubProductQuantity, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n const [radioValue, setRadioValue] = useState([resource.categoryFamilyLabel[`${localeCode}`]]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [dedicatedBy, setDedicatedBy] = useState(['']);\r\n const [subProductQuantity, setSubProductQuantity] = useState([0]);\r\n\r\n const formLabels = resource.threeCategoryNamesConsecrationForm[`${localeCode}`];\r\n\r\n const noOfNames = formScheme.find(form => form.field_type === 'textBox')!.field_number!;\r\n const companyNames = formScheme.find(form => form.field_type === 'textBox')!.field_number2!;\r\n const deceasedNames = formScheme.find(form => form.field_type === 'textBox')!.field_number3!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _onChangeRadioValue = (event: any, index: number) => {\r\n _setRadioValueArray(event.target.value, index);\r\n\r\n let ceremonyNameArray = ceremonyName.slice();\r\n let existingCeremonyName = ceremonyNameArray[`${index}`];\r\n let existingNameArray = existingCeremonyName.split(';');\r\n\r\n let dedicatedNameArray = dedicatedBy.slice();\r\n dedicatedNameArray[`${index}`] = '';\r\n\r\n if (event.target.value === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < noOfNames) {\r\n existingCeremonyName += ';'.repeat(noOfNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > noOfNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n } else if (event.target.value === resource.categoryCompanyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < companyNames) {\r\n existingCeremonyName += ';'.repeat(companyNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > companyNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n } else {\r\n if (existingNameArray.length < deceasedNames) {\r\n existingCeremonyName += ';'.repeat(deceasedNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > deceasedNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = existingCeremonyName;\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedNameArray);\r\n };\r\n\r\n const _setSubProductQuantity = (event: any, index: number) => {\r\n const valueArray = subProductQuantity.slice();\r\n\r\n while (typeof valueArray[`${index}`] === 'undefined') {\r\n valueArray.push(0);\r\n }\r\n\r\n valueArray[`${index}`] = +event.value;\r\n\r\n setSubProductQuantity(valueArray);\r\n\r\n callbackSubProductQuantity(valueArray);\r\n }\r\n\r\n const _setRadioValueArray = (value: string, index: number) => {\r\n let radioValueArray = radioValue.slice();\r\n\r\n while (typeof radioValueArray[`${index}`] === 'undefined') {\r\n radioValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n radioValueArray[`${index}`] = value;\r\n\r\n setRadioValue(radioValueArray);\r\n\r\n callbackCategory(radioValueArray);\r\n };\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n let inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n };\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedBy, radioValue);\r\n };\r\n\r\n const _setDedicatedByValue = (event: any, index: number) => {\r\n let maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setDedicatedByArray(event.target.value.substring(0, maxLength - 1), index);\r\n };\r\n\r\n const _setDedicatedByArray = (name: string, index: number) => {\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n while (typeof dedicatedByArray[`${index}`] === 'undefined') {\r\n dedicatedByArray.push('');\r\n }\r\n\r\n dedicatedByArray[`${index}`] = name;\r\n\r\n dedicatedByArray[`${index}`].trim();\r\n\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n _checkNamesEntered(ceremonyName, dedicatedByArray, radioValue);\r\n };\r\n\r\n const _displaySubProductQuantity = (index: number): { value: string, label: string } | null => {\r\n if (subProductQuantity.length > 0) {\r\n const selectValueArray = subProductQuantity.slice();\r\n\r\n if (typeof selectValueArray[`${index}`] !== 'undefined' && selectValueArray[`${index}`] != 0) {\r\n return quantity[`${localeCode}`].quantity.find((item: { value: string, label: string }) => item.value === String(selectValueArray[`${index}`]));\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[], dedicatedByArray: string[], categoryArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n\r\n if (categoryArray[`${i}`] === resource.categoryDeceasedLabel[`${localeCode}`] && dedicatedByArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n let categoryValueArray = radioValue.slice();\r\n let ceremonyNameArray = ceremonyName.slice();\r\n let dedicatedByArray = dedicatedBy.slice();\r\n let subProductQuantityArray = subProductQuantity.slice();\r\n\r\n categoryValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n ceremonyNameArray.push('');\r\n dedicatedByArray.push('');\r\n subProductQuantityArray.push(0);\r\n\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n setSubProductQuantity(subProductQuantityArray);\r\n\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n callbackSubProductQuantity(subProductQuantityArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedByArray, categoryValueArray);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n let categoryValueArray = radioValue.slice();\r\n let ceremonyNameArray = ceremonyName.slice();\r\n let dedicatedByArray = dedicatedBy.slice();\r\n let subProductQuantityArray = subProductQuantity.slice();\r\n\r\n if (typeof categoryValueArray[`${index}`] !== 'undefined') {\r\n if (categoryValueArray.length > 1) {\r\n categoryValueArray.splice(index, 1);\r\n } else {\r\n categoryValueArray[0] = resource.categoryFamilyLabel[`${localeCode}`];\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof dedicatedByArray[`${index}`] !== 'undefined') {\r\n if (dedicatedByArray.length > 1) {\r\n dedicatedByArray.splice(index, 1);\r\n } else {\r\n dedicatedByArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof subProductQuantityArray[`${index}`] !== 'undefined') {\r\n if (subProductQuantityArray.length > 1) {\r\n subProductQuantityArray.splice(index, 1);\r\n } else {\r\n subProductQuantityArray[0] = 0;\r\n }\r\n }\r\n\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n setSubProductQuantity(subProductQuantityArray);\r\n\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n callbackSubProductQuantity(subProductQuantityArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedByArray, categoryValueArray);\r\n }\r\n\r\n useEffect(() => {\r\n let existingCeremonyName: string[] = [];\r\n let existingDedicatedBy: string[] = [];\r\n let existingRadioValue: string[] = [];\r\n let existingSubProductQuantity: number[] = [0]\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n let itemNames: string[] = formItems[`${i}`]['names'];\r\n let itemDedicatedBy = formItems[`${i}`]['dedicatedBy'];\r\n let itemCategory = formItems[`${i}`]['category'];\r\n let itemSubProductQuantity = typeof formItems[`${i}`]['subProductQuantity'] !== 'undefined' ? formItems[`${i}`]['subProductQuantity'] : 0;\r\n\r\n let itemNameCount = 0;\r\n\r\n if (itemCategory === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n itemNameCount = noOfNames;\r\n } else if (itemCategory === resource.categoryCompanyLabel[`${localeCode}`]) {\r\n itemNameCount = companyNames\r\n } else {\r\n itemNameCount = deceasedNames;\r\n }\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index != 0 && index < itemNameCount) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n existingCeremonyName.push(itemName);\r\n existingDedicatedBy.push(itemDedicatedBy);\r\n existingRadioValue.push(itemCategory);\r\n \r\n if (i == 0) {\r\n existingSubProductQuantity[0] = itemSubProductQuantity;\r\n } else {\r\n existingSubProductQuantity.push(itemSubProductQuantity);\r\n }\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n setDedicatedBy(existingDedicatedBy);\r\n setRadioValue(existingRadioValue);\r\n setSubProductQuantity(existingSubProductQuantity);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackDedicatedBy(existingDedicatedBy);\r\n callbackCategory(existingRadioValue);\r\n callbackSubProductQuantity(existingSubProductQuantity);\r\n\r\n _checkNamesEntered(existingCeremonyName, existingDedicatedBy, existingRadioValue);\r\n } else {\r\n callbackCategory(radioValue);\r\n }\r\n }, [formItems])\r\n\r\n const _buildCategoryField = (idx: number): JSX.Element | null => {\r\n if (typeof radioValue[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.category}

\r\n
\r\n \r\n\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{nameLabel.endsWith('*') ? nameIndex === 0 ? nameLabel.substring(0, nameLabel.length - 1) + ' ' + (nameIndex + 1) + '*' : nameLabel.replace('*', ' ' + (nameIndex + 1)) : nameLabel + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n const _buildSubProductQuantity = (idx: number): JSX.Element | null => {\r\n return (\r\n
\r\n
\r\n
\r\n

{formLabels.consecration}

\r\n

{formLabels.consecrationSub}

\r\n
\r\n _setSubProductQuantity(event, idx)}\r\n className={'col-lg-6 select'}\r\n isSearchable={false}\r\n />\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildDedicatedByField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicatedBy}

\r\n _setDedicatedByValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'category') {\r\n return (\r\n
\r\n {_buildCategoryField(idx)}\r\n {radioValue[`${idx}`] === String(resource.categoryFamilyLabel[`${localeCode}`]) && noOfNames > 0 && _buildNameGroup(idx, noOfNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryCompanyLabel[`${localeCode}`]) && companyNames > 0 && _buildNameGroup(idx, companyNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryDeceasedLabel[`${localeCode}`]) && deceasedNames > 0 && _buildNameGroup(idx, deceasedNames)}\r\n {radioValue[`${idx}`] !== String(resource.categoryFamilyLabel[`${localeCode}`]) && (deceasedNames > 0 || companyNames > 0) && _buildDedicatedByField(idx)}\r\n {_buildSubProductQuantity(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price! + (subProduct ? subProduct.Price * subProductQuantity[`${idx}`] : 0)}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n )\r\n};\r\n\r\nexport default ThreeCategoryNamesConsecrationForm1;","import React, { useState, useEffect } from 'react';\r\n\r\nimport { useForm } from 'react-hook-form';\r\n\r\nimport resource from '../resources/resource.json';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { SimpleProduct, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { deleteBTGPCartLineAsync, getAllBTGPCartLineAsync } from '../../../actions/DataActionExtension.g';\r\n\r\nimport { IField, IdState } from '../ecomm-product-details-form.data';\r\nimport { IEcommProductDetailsFormConfig } from '../ecomm-product-details-form.props.autogenerated';\r\n\r\ninterface IEcommFormProps {\r\n formScheme: IField[];\r\n selectedProduct: AsyncResult;\r\n rowsData: IdState[];\r\n addRow(noOfRows: Number): void;\r\n deleteRow(idx: number): void;\r\n callbackName?: any;\r\n callbackCategory?: any;\r\n callbackDedicatedBy?: any;\r\n callbackNamesEntered?: any;\r\n formItems: [];\r\n config: IEcommProductDetailsFormConfig;\r\n localeCode: string;\r\n actionContext: any;\r\n isMobile: boolean;\r\n isEditMode: boolean;\r\n allowMultipleRegistrations: boolean;\r\n}\r\n\r\nconst ThreeCategoryNamesForm: React.FC = ({ formScheme, selectedProduct, rowsData, addRow, deleteRow, callbackName, callbackCategory, callbackDedicatedBy, callbackNamesEntered, formItems, config, localeCode, actionContext, isMobile, isEditMode, allowMultipleRegistrations }) => {\r\n const [radioValue, setRadioValue] = useState([resource.categoryFamilyLabel[`${localeCode}`]]);\r\n const [ceremonyName, setCeremonyName] = useState(['']);\r\n const [dedicatedBy, setDedicatedBy] = useState(['']);\r\n\r\n const formLabels = resource.threeCategoryNamesForm[`${localeCode}`];\r\n\r\n const noOfNames = formScheme.find(form => form.field_type === 'textBox')!.field_number!;\r\n const companyNames = formScheme.find(form => form.field_type === 'textBox')!.field_number2!;\r\n const deceasedNames = formScheme.find(form => form.field_type === 'textBox')!.field_number3!;\r\n\r\n const onSubmit = (data: any) => {\r\n // display form data on success\r\n // alert('SUCCESS!! :-)\\n\\n' + JSON.stringify(data, null, 4));\r\n };\r\n\r\n // Functions to build form returned by useForm() hook.\r\n const { handleSubmit, reset } = useForm();\r\n\r\n const _onChangeRadioValue = (event: any, index: number) => {\r\n _setRadioValueArray(event.target.value, index);\r\n\r\n let ceremonyNameArray = ceremonyName.slice();\r\n let existingCeremonyName = ceremonyNameArray[`${index}`];\r\n let existingNameArray = existingCeremonyName.split(';');\r\n\r\n let dedicatedNameArray = dedicatedBy.slice();\r\n dedicatedNameArray[`${index}`] = '';\r\n\r\n if (event.target.value === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < noOfNames) {\r\n existingCeremonyName += ';'.repeat(noOfNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > noOfNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n } else if (event.target.value === resource.categoryCompanyLabel[`${localeCode}`]) {\r\n if (existingNameArray.length < companyNames) {\r\n existingCeremonyName += ';'.repeat(companyNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > companyNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n } else {\r\n if (existingNameArray.length < deceasedNames) {\r\n existingCeremonyName += ';'.repeat(deceasedNames - existingNameArray.length - 1);\r\n } else { // More than\r\n while (existingNameArray.length > deceasedNames) {\r\n existingNameArray.pop();\r\n }\r\n existingCeremonyName = existingNameArray.join(';');\r\n }\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = existingCeremonyName;\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedNameArray);\r\n }\r\n\r\n const _setRadioValueArray = (value: string, index: number) => {\r\n let radioValueArray = radioValue.slice();\r\n\r\n while (typeof radioValueArray[`${index}`] === 'undefined') {\r\n radioValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n }\r\n\r\n radioValueArray[`${index}`] = value;\r\n\r\n setRadioValue(radioValueArray);\r\n\r\n callbackCategory(radioValueArray);\r\n }\r\n\r\n const _displayName = (value: string, nameIndex: number): string => {\r\n if (value) {\r\n const names = value.split(';');\r\n\r\n return names[`${nameIndex}`] ? names[`${nameIndex}`] : '';\r\n }\r\n\r\n return ''\r\n }\r\n\r\n const _setNameMultipleInputValue = (event: any, index: number, nameIndex: number, noOfNames: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n let inputName = event.target.value.substring(0, maxLength - 1);\r\n let inputMultipleName = ceremonyName[`${index}`];\r\n\r\n if (!inputMultipleName.includes(';')) {\r\n inputMultipleName += ';'.repeat(noOfNames - 1);\r\n }\r\n\r\n let inputMutlipleNameSplit = inputMultipleName.split(';');\r\n\r\n inputMutlipleNameSplit[`${nameIndex}`] = inputName;\r\n inputName = inputMutlipleNameSplit.join(';');\r\n\r\n _setCeremonyNameArray(inputName, index);\r\n }\r\n\r\n const _setCeremonyNameArray = (name: string, index: number) => {\r\n const ceremonyNameArray = ceremonyName.slice();\r\n\r\n while (typeof ceremonyNameArray[`${index}`] === 'undefined') {\r\n ceremonyNameArray.push('');\r\n }\r\n\r\n ceremonyNameArray[`${index}`] = name;\r\n\r\n ceremonyNameArray[`${index}`].trim();\r\n\r\n setCeremonyName(ceremonyNameArray);\r\n\r\n callbackName(ceremonyNameArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedBy, radioValue);\r\n }\r\n\r\n const _setDedicatedByValue = (event: any, index: number) => {\r\n const maxLength = config.charactersLimitForNames ? config.charactersLimitForNames : 31;\r\n\r\n _setDedicatedByArray(event.target.value.substring(0, maxLength - 1), index);\r\n }\r\n\r\n const _setDedicatedByArray = (name: string, index: number) => {\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n while (typeof dedicatedByArray[`${index}`] === 'undefined') {\r\n dedicatedByArray.push('');\r\n }\r\n\r\n dedicatedByArray[`${index}`] = name;\r\n\r\n dedicatedByArray[`${index}`].trim();\r\n\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n _checkNamesEntered(ceremonyName, dedicatedByArray, radioValue);\r\n }\r\n\r\n const _checkNamesEntered = (ceremonyNameArray: string[], dedicatedByArray: string[], categoryArray: string[]) => {\r\n let namesEntered = true;\r\n\r\n for (let i = 0; i < ceremonyNameArray.length; i++) {\r\n if (ceremonyNameArray[`${i}`].replace(/;/g, '').trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n\r\n if (categoryArray[`${i}`] === resource.categoryDeceasedLabel[`${localeCode}`] && dedicatedByArray[`${i}`].trim() === '') {\r\n namesEntered = false;\r\n break;\r\n }\r\n }\r\n\r\n callbackNamesEntered(namesEntered);\r\n }\r\n\r\n const _addItem = () => {\r\n addRow(1);\r\n\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n categoryValueArray.push(resource.categoryFamilyLabel[`${localeCode}`]);\r\n ceremonyNameArray.push('');\r\n dedicatedByArray.push('');\r\n\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n callbackNamesEntered(false);\r\n }\r\n\r\n const _deleteCartLine = async (index: number): Promise => {\r\n if (typeof formItems[`${index}`] !== 'undefined') {\r\n const cartState = await getCartState(actionContext);\r\n\r\n let success = false;\r\n\r\n const cartItems = await getAllBTGPCartLineAsync({ callerContext: actionContext }, cartState.cart.Id);\r\n\r\n if (cartItems.length > 0) {\r\n let removeCartLinesResult = await cartState.removeCartLines({ cartLineIds: [formItems[`${index}`]['cartLineId']] });\r\n\r\n if (removeCartLinesResult.status === 'SUCCESS') {\r\n success = true;\r\n }\r\n\r\n let deleteCartLineResult = await deleteBTGPCartLineAsync({ callerContext: actionContext }, formItems[`${index}`]['cartLineId']);\r\n\r\n if (success && deleteCartLineResult) {\r\n deleteRow(index);\r\n formItems.splice(index, 1);\r\n _updateStateData(index);\r\n }\r\n\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n } else {\r\n deleteRow(index);\r\n _updateStateData(index);\r\n }\r\n }\r\n\r\n const _updateStateData = (index: number) => {\r\n const categoryValueArray = radioValue.slice();\r\n const ceremonyNameArray = ceremonyName.slice();\r\n const dedicatedByArray = dedicatedBy.slice();\r\n\r\n if (typeof categoryValueArray[`${index}`] !== 'undefined') {\r\n if (categoryValueArray.length > 1) {\r\n categoryValueArray.splice(index, 1);\r\n } else {\r\n categoryValueArray[0] = resource.categoryFamilyLabel[`${localeCode}`];\r\n }\r\n }\r\n\r\n if (typeof ceremonyNameArray[`${index}`] !== 'undefined') {\r\n if (ceremonyNameArray.length > 1) {\r\n ceremonyNameArray.splice(index, 1);\r\n } else {\r\n ceremonyNameArray[0] = '';\r\n }\r\n }\r\n\r\n if (typeof dedicatedByArray[`${index}`] !== 'undefined') {\r\n if (dedicatedByArray.length > 1) {\r\n dedicatedByArray.splice(index, 1);\r\n } else {\r\n dedicatedByArray[0] = '';\r\n }\r\n }\r\n\r\n setRadioValue(categoryValueArray);\r\n setCeremonyName(ceremonyNameArray);\r\n setDedicatedBy(dedicatedByArray);\r\n\r\n callbackCategory(categoryValueArray);\r\n callbackName(ceremonyNameArray);\r\n callbackDedicatedBy(dedicatedByArray);\r\n\r\n _checkNamesEntered(ceremonyNameArray, dedicatedByArray, radioValue);\r\n }\r\n\r\n useEffect(() => {\r\n const existingCeremonyName: string[] = [];\r\n const existingDedicatedBy: string[] = [];\r\n const existingRadioValue: string[] = [];\r\n\r\n if (formItems.length > 0) {\r\n for (let i = 0; i < formItems.length; i++) {\r\n let itemNames: string[] = formItems[`${i}`]['names'];\r\n let itemDedicatedBy = formItems[`${i}`]['dedicatedBy'];\r\n let itemCategory = formItems[`${i}`]['category'];\r\n\r\n let itemNameCount = 0;\r\n\r\n if (itemCategory === resource.categoryFamilyLabel[`${localeCode}`]) {\r\n itemNameCount = noOfNames;\r\n } else if (itemCategory === resource.categoryCompanyLabel[`${localeCode}`]) {\r\n itemNameCount = companyNames\r\n } else {\r\n itemNameCount = deceasedNames;\r\n }\r\n\r\n let itemName = '';\r\n\r\n itemNames.map((name, index) => {\r\n if (index != 0 && index < itemNameCount) {\r\n itemName += ';' + name;\r\n } else {\r\n itemName += name;\r\n }\r\n });\r\n\r\n existingCeremonyName.push(itemName);\r\n existingDedicatedBy.push(itemDedicatedBy);\r\n existingRadioValue.push(itemCategory);\r\n }\r\n\r\n setCeremonyName(existingCeremonyName);\r\n setDedicatedBy(existingDedicatedBy);\r\n setRadioValue(existingRadioValue);\r\n\r\n callbackName(existingCeremonyName);\r\n callbackDedicatedBy(existingDedicatedBy);\r\n callbackCategory(existingRadioValue);\r\n\r\n _checkNamesEntered(existingCeremonyName, existingDedicatedBy, existingRadioValue);\r\n } else {\r\n callbackCategory(radioValue);\r\n }\r\n }, [formItems])\r\n\r\n const _buildCategoryField = (idx: number): JSX.Element | null => {\r\n if (typeof radioValue[`${idx}`] === 'undefined') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n

{formLabels.category}

\r\n
\r\n \r\n\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n const _buildNameGroup = (idx: number, noOfNames: number): JSX.Element[] => {\r\n const nameLabel = formLabels.name;\r\n const namesArray = Array.apply(null, Array(noOfNames)).map(function (x, i) { return i; });\r\n\r\n return namesArray.map((nameIndex) => {\r\n return (\r\n
\r\n
\r\n

{nameLabel.endsWith('*') ? nameIndex === 0 ? nameLabel.substring(0, nameLabel.length - 1) + ' ' + (nameIndex + 1) + '*' : nameLabel.replace('*', ' ' + (nameIndex + 1)) : nameLabel + ' ' + nameIndex + 1}

\r\n _setNameMultipleInputValue(event, idx, nameIndex, noOfNames)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n });\r\n }\r\n\r\n const _buildDedicatedByField = (idx: number): JSX.Element => {\r\n return (\r\n
\r\n
\r\n

{formLabels.dedicatedBy}

\r\n _setDedicatedByValue(event, idx)}\r\n onKeyDown={(event) => { if (event.keyCode === 13) { event.preventDefault(); } }}\r\n className='form-control'\r\n maxLength={config.charactersLimitForNames ? config.charactersLimitForNames : 31}\r\n />\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {rowsData.map((i, idx) => {\r\n return (\r\n
\r\n
\r\n {formScheme.map((element: IField, index: number) => {\r\n\r\n if (element.field_name === 'category') {\r\n return (\r\n
\r\n {_buildCategoryField(idx)}\r\n {radioValue[`${idx}`] === String(resource.categoryFamilyLabel[`${localeCode}`]) && noOfNames > 0 && _buildNameGroup(idx, noOfNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryCompanyLabel[`${localeCode}`]) && companyNames > 0 && _buildNameGroup(idx, companyNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryDeceasedLabel[`${localeCode}`]) && deceasedNames > 0 && _buildNameGroup(idx, deceasedNames)}\r\n {radioValue[`${idx}`] === String(resource.categoryDeceasedLabel[`${localeCode}`]) && deceasedNames > 0 &&\r\n _buildDedicatedByField(idx)}\r\n
\r\n );\r\n }\r\n\r\n if (!isMobile && element.field_type === 'product_price') {\r\n return (\r\n
\r\n

${selectedProduct.result?.Price!}

\r\n
\r\n );\r\n }\r\n\r\n if (element.field_type === 'action') {\r\n if (isMobile) {\r\n const style = !isEditMode ? 'form-details-item' : 'form-details-item edit';\r\n\r\n return (\r\n
\r\n {!isEditMode && allowMultipleRegistrations &&
\r\n \r\n
}\r\n
\r\n
\r\n );\r\n }\r\n\r\n return (\r\n
\r\n
\r\n );\r\n }\r\n\r\n return;\r\n })}\r\n
\r\n
\r\n );\r\n })}\r\n
\r\n\r\n {!isMobile && !isEditMode && allowMultipleRegistrations &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n )\r\n};\r\n\r\nexport default ThreeCategoryNamesForm;","var map = {\n\t\"./af\": 155,\n\t\"./af.js\": 155,\n\t\"./ar\": 156,\n\t\"./ar-dz\": 157,\n\t\"./ar-dz.js\": 157,\n\t\"./ar-kw\": 158,\n\t\"./ar-kw.js\": 158,\n\t\"./ar-ly\": 159,\n\t\"./ar-ly.js\": 159,\n\t\"./ar-ma\": 160,\n\t\"./ar-ma.js\": 160,\n\t\"./ar-ps\": 161,\n\t\"./ar-ps.js\": 161,\n\t\"./ar-sa\": 162,\n\t\"./ar-sa.js\": 162,\n\t\"./ar-tn\": 163,\n\t\"./ar-tn.js\": 163,\n\t\"./ar.js\": 156,\n\t\"./az\": 164,\n\t\"./az.js\": 164,\n\t\"./be\": 165,\n\t\"./be.js\": 165,\n\t\"./bg\": 166,\n\t\"./bg.js\": 166,\n\t\"./bm\": 167,\n\t\"./bm.js\": 167,\n\t\"./bn\": 168,\n\t\"./bn-bd\": 169,\n\t\"./bn-bd.js\": 169,\n\t\"./bn.js\": 168,\n\t\"./bo\": 170,\n\t\"./bo.js\": 170,\n\t\"./br\": 171,\n\t\"./br.js\": 171,\n\t\"./bs\": 172,\n\t\"./bs.js\": 172,\n\t\"./ca\": 173,\n\t\"./ca.js\": 173,\n\t\"./cs\": 174,\n\t\"./cs.js\": 174,\n\t\"./cv\": 175,\n\t\"./cv.js\": 175,\n\t\"./cy\": 176,\n\t\"./cy.js\": 176,\n\t\"./da\": 177,\n\t\"./da.js\": 177,\n\t\"./de\": 178,\n\t\"./de-at\": 179,\n\t\"./de-at.js\": 179,\n\t\"./de-ch\": 180,\n\t\"./de-ch.js\": 180,\n\t\"./de.js\": 178,\n\t\"./dv\": 181,\n\t\"./dv.js\": 181,\n\t\"./el\": 182,\n\t\"./el.js\": 182,\n\t\"./en-au\": 183,\n\t\"./en-au.js\": 183,\n\t\"./en-ca\": 184,\n\t\"./en-ca.js\": 184,\n\t\"./en-gb\": 185,\n\t\"./en-gb.js\": 185,\n\t\"./en-ie\": 186,\n\t\"./en-ie.js\": 186,\n\t\"./en-il\": 187,\n\t\"./en-il.js\": 187,\n\t\"./en-in\": 188,\n\t\"./en-in.js\": 188,\n\t\"./en-nz\": 189,\n\t\"./en-nz.js\": 189,\n\t\"./en-sg\": 190,\n\t\"./en-sg.js\": 190,\n\t\"./eo\": 191,\n\t\"./eo.js\": 191,\n\t\"./es\": 192,\n\t\"./es-do\": 193,\n\t\"./es-do.js\": 193,\n\t\"./es-mx\": 194,\n\t\"./es-mx.js\": 194,\n\t\"./es-us\": 195,\n\t\"./es-us.js\": 195,\n\t\"./es.js\": 192,\n\t\"./et\": 196,\n\t\"./et.js\": 196,\n\t\"./eu\": 197,\n\t\"./eu.js\": 197,\n\t\"./fa\": 198,\n\t\"./fa.js\": 198,\n\t\"./fi\": 199,\n\t\"./fi.js\": 199,\n\t\"./fil\": 200,\n\t\"./fil.js\": 200,\n\t\"./fo\": 201,\n\t\"./fo.js\": 201,\n\t\"./fr\": 202,\n\t\"./fr-ca\": 203,\n\t\"./fr-ca.js\": 203,\n\t\"./fr-ch\": 204,\n\t\"./fr-ch.js\": 204,\n\t\"./fr.js\": 202,\n\t\"./fy\": 205,\n\t\"./fy.js\": 205,\n\t\"./ga\": 206,\n\t\"./ga.js\": 206,\n\t\"./gd\": 207,\n\t\"./gd.js\": 207,\n\t\"./gl\": 208,\n\t\"./gl.js\": 208,\n\t\"./gom-deva\": 209,\n\t\"./gom-deva.js\": 209,\n\t\"./gom-latn\": 210,\n\t\"./gom-latn.js\": 210,\n\t\"./gu\": 211,\n\t\"./gu.js\": 211,\n\t\"./he\": 212,\n\t\"./he.js\": 212,\n\t\"./hi\": 213,\n\t\"./hi.js\": 213,\n\t\"./hr\": 214,\n\t\"./hr.js\": 214,\n\t\"./hu\": 215,\n\t\"./hu.js\": 215,\n\t\"./hy-am\": 216,\n\t\"./hy-am.js\": 216,\n\t\"./id\": 217,\n\t\"./id.js\": 217,\n\t\"./is\": 218,\n\t\"./is.js\": 218,\n\t\"./it\": 219,\n\t\"./it-ch\": 220,\n\t\"./it-ch.js\": 220,\n\t\"./it.js\": 219,\n\t\"./ja\": 221,\n\t\"./ja.js\": 221,\n\t\"./jv\": 222,\n\t\"./jv.js\": 222,\n\t\"./ka\": 223,\n\t\"./ka.js\": 223,\n\t\"./kk\": 224,\n\t\"./kk.js\": 224,\n\t\"./km\": 225,\n\t\"./km.js\": 225,\n\t\"./kn\": 226,\n\t\"./kn.js\": 226,\n\t\"./ko\": 227,\n\t\"./ko.js\": 227,\n\t\"./ku\": 228,\n\t\"./ku-kmr\": 229,\n\t\"./ku-kmr.js\": 229,\n\t\"./ku.js\": 228,\n\t\"./ky\": 230,\n\t\"./ky.js\": 230,\n\t\"./lb\": 231,\n\t\"./lb.js\": 231,\n\t\"./lo\": 232,\n\t\"./lo.js\": 232,\n\t\"./lt\": 233,\n\t\"./lt.js\": 233,\n\t\"./lv\": 234,\n\t\"./lv.js\": 234,\n\t\"./me\": 235,\n\t\"./me.js\": 235,\n\t\"./mi\": 236,\n\t\"./mi.js\": 236,\n\t\"./mk\": 237,\n\t\"./mk.js\": 237,\n\t\"./ml\": 238,\n\t\"./ml.js\": 238,\n\t\"./mn\": 239,\n\t\"./mn.js\": 239,\n\t\"./mr\": 240,\n\t\"./mr.js\": 240,\n\t\"./ms\": 241,\n\t\"./ms-my\": 242,\n\t\"./ms-my.js\": 242,\n\t\"./ms.js\": 241,\n\t\"./mt\": 243,\n\t\"./mt.js\": 243,\n\t\"./my\": 244,\n\t\"./my.js\": 244,\n\t\"./nb\": 245,\n\t\"./nb.js\": 245,\n\t\"./ne\": 246,\n\t\"./ne.js\": 246,\n\t\"./nl\": 247,\n\t\"./nl-be\": 248,\n\t\"./nl-be.js\": 248,\n\t\"./nl.js\": 247,\n\t\"./nn\": 249,\n\t\"./nn.js\": 249,\n\t\"./oc-lnc\": 250,\n\t\"./oc-lnc.js\": 250,\n\t\"./pa-in\": 251,\n\t\"./pa-in.js\": 251,\n\t\"./pl\": 252,\n\t\"./pl.js\": 252,\n\t\"./pt\": 253,\n\t\"./pt-br\": 254,\n\t\"./pt-br.js\": 254,\n\t\"./pt.js\": 253,\n\t\"./ro\": 255,\n\t\"./ro.js\": 255,\n\t\"./ru\": 256,\n\t\"./ru.js\": 256,\n\t\"./sd\": 257,\n\t\"./sd.js\": 257,\n\t\"./se\": 258,\n\t\"./se.js\": 258,\n\t\"./si\": 259,\n\t\"./si.js\": 259,\n\t\"./sk\": 260,\n\t\"./sk.js\": 260,\n\t\"./sl\": 261,\n\t\"./sl.js\": 261,\n\t\"./sq\": 262,\n\t\"./sq.js\": 262,\n\t\"./sr\": 263,\n\t\"./sr-cyrl\": 264,\n\t\"./sr-cyrl.js\": 264,\n\t\"./sr.js\": 263,\n\t\"./ss\": 265,\n\t\"./ss.js\": 265,\n\t\"./sv\": 266,\n\t\"./sv.js\": 266,\n\t\"./sw\": 267,\n\t\"./sw.js\": 267,\n\t\"./ta\": 268,\n\t\"./ta.js\": 268,\n\t\"./te\": 269,\n\t\"./te.js\": 269,\n\t\"./tet\": 270,\n\t\"./tet.js\": 270,\n\t\"./tg\": 271,\n\t\"./tg.js\": 271,\n\t\"./th\": 272,\n\t\"./th.js\": 272,\n\t\"./tk\": 273,\n\t\"./tk.js\": 273,\n\t\"./tl-ph\": 274,\n\t\"./tl-ph.js\": 274,\n\t\"./tlh\": 275,\n\t\"./tlh.js\": 275,\n\t\"./tr\": 276,\n\t\"./tr.js\": 276,\n\t\"./tzl\": 277,\n\t\"./tzl.js\": 277,\n\t\"./tzm\": 278,\n\t\"./tzm-latn\": 279,\n\t\"./tzm-latn.js\": 279,\n\t\"./tzm.js\": 278,\n\t\"./ug-cn\": 280,\n\t\"./ug-cn.js\": 280,\n\t\"./uk\": 281,\n\t\"./uk.js\": 281,\n\t\"./ur\": 282,\n\t\"./ur.js\": 282,\n\t\"./uz\": 283,\n\t\"./uz-latn\": 284,\n\t\"./uz-latn.js\": 284,\n\t\"./uz.js\": 283,\n\t\"./vi\": 285,\n\t\"./vi.js\": 285,\n\t\"./x-pseudo\": 286,\n\t\"./x-pseudo.js\": 286,\n\t\"./yo\": 287,\n\t\"./yo.js\": 287,\n\t\"./zh-cn\": 288,\n\t\"./zh-cn.js\": 288,\n\t\"./zh-hk\": 289,\n\t\"./zh-hk.js\": 289,\n\t\"./zh-mo\": 290,\n\t\"./zh-mo.js\": 290,\n\t\"./zh-tw\": 291,\n\t\"./zh-tw.js\": 291\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 = 302;"],"names":["async","getProductsByCategoryId","context","categoryId","searchResult","searchByCategoryAsync","callerContext","actionContext","requestContext","apiSettings","channelId","catalogId","catch","error","console","log","length","sort","a","b","DisplayOrder","productIds","map","item","push","RecordId","getByIdsAsync","getProducts","categoryIDs","criterias","Context","ChannelId","CatalogId","CategoryIds","IncludeAttributes","searchAsync","getCustomerOrderHistory","hierarchy","customer","organisation","isUat","limit","dictionary","result","forEach","record","Children","Main","SubIDs","Products","j","generateDictionary","orders","getOrderHistoryAsync","AccountNumber","orderHistory","btgpTransactions","getByCustomerAllBTGPTransactionAsync","Email","i","transaction","JSON","parse","transactionNames","nameID","mainName","mainID","price","ProductCategoryID","found","find","parseInt","ProductID","Name","Price","ProductCategory","Number","ProductPrice","DedicationPeriod","findIndex","label","matchingOrder","order","Id","SalesOrderID","orderReceiptNo","ReceiptNo","SalesId","toString","EventDates","EventName","Names","OrderDate","DateOfTransaction","Date","Record","getTime","generateErrorLog","errorLogName","errorDetails","createBTGPErrorLogAsync","uuid","uuidv4","uuidValidate","uuidVersion","generateUUID","toISOString","CartLineID","CartID","EventID","SerialID","SerialNumber","SerialName","Name_1","Name_2","Name_3","Name_4","Name_5","Name_6","Name_7","Name_8","Name_9","Name_10","Name_11","Name_12","Name_13","Name_14","Name_15","Name_16","Name_17","Name_18","Name_19","Name_20","Remarks","Message","Category","DedicatedBy","HasTaxDeduction","Nric","BuildingName","UnitNumber","PostalCode","BirthDate","PhoneNumber","SchoolName","DonationOption","BlessingOption","CartLineComment","BirthTime","LightOption","ValidFrom","ValidTo","ParentCartLineID","Country","CompanyName","DeceasedRelationship","SurgeryDate","DeathDate","DeathTime","NameChange","OldName_1","OldName_2","BirthDate_2","BirthTime_2","StartDate","Gender","ChineseName","ContactNumber","NameNextKin","ContactNumberNextKin","PassportNumber","PassportExpiryDate","PassportIssuedDate","createOrUpdateCartline","createOrUpdateBTGPCartLineAsync","Form","IsValid","InvalidType","InCart","IsSubProduct","Consent","IsInsuranceIncluded","Breakpoints","isMobile","width","large","FOMOOrderStatus","InventoryLvls","Response","showStrikethroughPricing","props","originalPrice","getOriginalPrice","data","CustomerContextualPrice","Math","max","BasePrice","TradeAgreementPrice","AdjustedPrice","renderCurrentPrice","initialPrice","formatCurrency","React","className","itemProp","undefined","freePriceText","cultureFormatter","renderCurrentPriceWithOriginalPrice","originalPriceText","currentPriceText","savingsText","ProductDetailsPriceComponent","msdyn365Commerce","createComponent","_objectSpread","component","classnames","uuidValidateV4","strSplit","sentence","splitChar","oneWord","newSentence","split","AddToCartComponentActions","onClick","_event","setDisabled","openModal","cartError","addToCartError","productToAdd","product","propagateError","getSelectedProduct","cartState","getCartState","matchingCartItems","matchingCartLineIds","value","index","cartLinesResult","getAllBTGPCartLineAsync","cart","cartLineData","cartIdToRemove","cl","removeCartResult","removeCartLines","cartLineIds","status","errorMessageId","ErrorResourceId","errorMessageDetail","LocalizedMessage","failureReason","cartActionResult","deleteBTGPCartLineAsync","parsed","names","cartEvent","events","cartEventArray","cartEventID","eventIDs","cartEventIDArray","cartSerialId","serialIds","cartSerialNumber","serialNumbers","cartSerialName","serialNames","cartName","cartNameArray","r","cartMessage","messages","cartMessageTemp","substring","cartRemark","remarks","cartCategory","categories","cartDedicatedBy","dedicatedBy","cartHasTaxDeduction","hasTaxDeductions","cartNric","nrics","cartBuildingName","buildingNames","cartUnitNumber","unitNumbers","cartPostalCode","postalCodes","cartPhoneNumber","phoneNumbers","String","cartChineseName","chineseNames","cartNameNextKin","nameNextKins","cartContactNumber","contactNumbers","cartContactNumbersNextKin","contactNumbersNextKin","cartPassportNumber","passportNumbers","cartPassportExpiryDate","passportExpiryDates","cartPassportIssuedDate","passportIssuedDates","cartConsent","consents","cartIsInsuranceIncluded","isInsuranceIncluded","cartCountry","countries","cartSchoolName","schoolNames","cartBirthDate","birthDates","cartBirthDates","cartBirthTimes","birthTimes","cartCollectionOption","collectionOptions","cartBlessingOption","blessingOptions","cartLightOption","lightOptions","cartValidFrom","validFroms","cartValidTo","validTos","cartDedicationPeriod","dedicationPeriods","cartStartDate","startDates","cartGender","genders","cartCompanyName","companyNames","cartDeceasedRelationship","deceasedRelationships","cartDeathDate","deathDates","cartDeathTime","deathTimes","cartSurgeryDate","surgeryDates","cartNameChange","nameChanges","cartOldName","oldNames","cartOldNameArray","cartQuantity","quantities","cartSubProductQuantity","subProductQuantities","cartHasSubProduct","subProduct","cartParentCartLineID","cartEventAddedIndex","cartSubParentAdded","cartSubProductAdded","cartComment","addToCartResult","addProductToCart","count","availableQuantity","productAvailability","AvailableQuantity","additionalProperties","orderQuantityLimitsFeatureIsEnabled","isOrderQuantityLimitsFeatureEnabled","enableStockCheck","isPriceKeyedIn","customPrice","customPriceAmount","isAddEmailDeliveryItemToCart","cartLineProductID","CartLines","ProductId","cartLineID","LineId","updateCart","updateCartLines","Comment","updateCartLinesAsync","cartItem","propagateResult","AddToCart","_props$dialogStrings","_props$dialogStrings2","_props$dialogStrings3","disabled","useState","modalOpen","setModalOpen","priceComponent","id","typeName","dialogStrings","popupProps","imageSettings","gridSettings","request","productQuantity","quantity","navigationUrl","telemetryContent","renderModalPopup","Popup","Object","assign","getLinkText","payload","getPayloadObject","TelemetryEvent","attributes","getTelemetryAttributes","event","isIntermediateState","shouldShowOutOfStock","defaultProps","outOfStockText","addToCartText","isCustomPriceSelected","maximumKeyInPrice","minimumKeyInPrice","defaultMaximumKeyInPrice","defaultMinimumKeyInPrice","Dimensions","missingDimensions","filter","dimension","DimensionValue","Value","stockLeft","includeCurrentQuantity","app","config","isLoading","isUpdatingDimension","isLoadingDeliveryOptions","isUpdatingDeliveryOptions","isAddServiceItemToCart","includedQuantityNumber","onAdd","onError","ProductDetailsAddToCartComponent","getGenericDonationsError","resources","location","addedToCartFailureMessage","substatus","elementFoundAt","productIdToFind","_context$actionContex","DeliveryMode","channel","PickupDeliveryModeCode","FulfillmentStoreId","OrgUnitNumber","curQuantity","cartLineToUpdate","Quantity","maxQuantityForCartLineItem","availableQty","quantityLimit","min","maxQuantityLimitText","replace","_result$cartActionRes","getConfigureDonationsErrors","isGiftCard","dimensions","DimensionTypeValue","dimensionTypeValue","productDimensionTypeColorErrorMessage","productDimensionTypeConfigurationErrorMessage","productDimensionTypeSizeErrorMessage","productDimensionTypeAmountErrorMessage","productDimensionTypeStyleErrorMessage","getDimensionDonationsErrorString","ProductDetailsAddtoCartButton","_ref","simpleProductList","productsAvailability","productPriceList","localeCode","keyInPriceAmount","cartAdded","isEditMode","callbackState","setCallBackState","errorState","configureErrors","quantityError","customAmountError","otherError","errorHost","selectedProduct","productAvailableQuantity","productPrice","productDeliveryOptions","isServiceItem","defaultImageSettings","viewports","xs","q","w","h","lg","xl","lazyload","dimensionUpdateQueue","FinitePromiseQueue","simpleProductValue","cartValue","elem","TotalAvailable","UnitOfMeasure","ExtensionProperties","goToCartText","buyBoxGoToCartText","continueShoppingText","buyBoxContinueShoppingText","headerItemOneText","buyBoxSingleItemText","headerItemFormatText","buyBoxMultiLineItemFormatText","headerMessageText","buyBoxHeaderMessageText","priceFree","addToCartCallbacks","updateQuantity","newQuantity","errorStateVal","prevState","updateErrorState","newErrorState","updateSelectedProduct","newSelectedProduct","newInventory","newPrice","newDeliveryOptions","dimensionSelectedAsync","selectedDimensionId","selectedDimensionValueId","enqueue","Promise","reason","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","getDropdownName","dimensionType","resource","changeModalOpen","isModalOpen","changeUpdatingDimension","isUpdDimension","changeUpdatingDeliveryOptions","isUpdDeliveryOptions","updateKeyInPrice","useEffect","simpleProduct","productPriceVal","ProductDetailsOutOfStockText","quantityErrorForState","customAmountErrorForState","cartObj","otherErrorForState","errorMessageOutOfStock","errorMessageOutOfRangeOneLeft","errorMessageOutOfRangeFormat","getQuantityError","formatedAmountLimit","invalidSmallCustomAmountText","invalidLargeCustomAmountText","IsGiftCard","onAddToCartSuccess","_callbackState$errorS","_callbackState$errorS2","_callbackState$errorS3","PrductDetailsAddtoCartErrorBlock","showError","_ref2","errorMessages","values","message","Alert","isOpen","color","assertive","buyboxErrorMessageHeader","key","formScheme","rowsData","addRow","deleteRow","callbackPrice","callbackName","callbackCategory","callbackDedicatedBy","callbackNamesEntered","callbackPricesEntered","formItems","allowMultipleRegistrations","minDonationNumberOption","field_options","minDonationstringOption","setCustomPrice","inputValue","setInputValue","donationValue","setDonationValue","radioValue","setRadioValue","ceremonyName","setCeremonyName","setDedicatedBy","formLabels","noOfNames","form","field_name","field_number","deceasedNames","field_number3","handleSubmit","reset","useForm","_onChangeRadioValue","_setRadioValueArray","target","ceremonyNameArray","slice","existingCeremonyName","existingNameArray","dedicatedNameArray","repeat","pop","join","_setCustomPriceArray","customPriceArray","_setDonationValueArray","donationValueArray","element","_setInputValue","num","isNaN","_setInputValueArray","inputValueArray","radioValueArray","_displayName","nameIndex","_setCeremonyNameArray","name","trim","_checkNamesEntered","_setDedicatedByArray","dedicatedByArray","categoryArray","namesEntered","_addItem","categoryValueArray","_deleteCartLine","success","deleteCartLineResult","splice","_updateStateData","minDonationvalue","minDonationString","existingDonationValue","existingInputValue","existingCustomPriceAmount","existingRadioValue","existingDedicatedBy","itemCategory","itemNames","itemNameCount","itemName","_buildAmountField","idx","amount","option","type","checked","onChange","_onChangePriceValue","inputMode","pattern","role","onKeyPress","test","preventDefault","onKeyDown","keyCode","_buildNameGroup","isDeceased","Array","apply","x","deceasedName","endsWith","_setNameMultipleInputValue","maxLength","charactersLimitForNames","inputName","inputMultipleName","includes","inputMutlipleNameSplit","_buildDedicatedBy","_setDedicatedByValue","onSubmit","onReset","autoComplete","category","valueOf","_buildCategoryField","_selectedProduct$resu","_selectedProduct$resu2","field_type","style","action","callbackEvent","callbackEventID","callbackBuilding","callbackUnitNumber","callbackPostalCode","callbackPhoneNumber","callbackAddressEntered","userInfo","productEvents","eventNames","setEventNames","setEventIDs","setCategories","setNames","setBuildingNames","setUnitNumbers","setPostalCodes","setPhoneNumbers","namesCount","companyCount","field_number2","userValid","emailaddress1","_onChangeCategory","_setCategory","namesArray","valueArray","_setName","_checkNameEntered","_checkAddressEntered","buildingNamesArray","postalCodesArray","_initBuildingField","gmb_blockno","gmb_buildingno","gmb_buildingname","address1_line1","eventNamesArray","eventIDsArray","categoriesArray","unitNumbersArray","phoneNumbersArray","gmb_unitnofloorapartmentno","address1_postalcode","nameLabel","_formatNameInput","inputMultipleNames","newValues","_buildAddressField","addressPrompt","addressBuilding","_setBuildingName","addressUnit","_setUnitNumber","addressPostalCode","_setPostalCode","toast","warning","addressCountry","addressCountryPrompt","addressPhone","_setPhoneNumber","callbackCollection","ceremonyValue","setCeremonyValue","ceremonyIDValue","setCeremonyIDValue","optionValue","setOptionValue","_onChangeOptionValue","_setOptionValueArray","_checkInputEntered","ceremonyValueArray","ceremonyIDValueArray","optionValueArray","existingCeremony","existingCeremonyID","existingOptionValue","_buildOptionField","callbackMultiplier","callbackEventsSelected","multipliers","setMultiplers","_setMultipleEventDates","inputEventDates","inputEventIDs","selectValueArray","eventIDArray","_setMultipler","_checkEventsEntered","_displayEventDates","displayValue","eventDates","eventIds","ceremonyEventArray","eventsSelected","multipliersArray","eventName","eventDate","Select","isMulti","closeMenuOnSelect","options","classNamePrefix","noOptionsMessage","blurInputOnSelect","_buildEventDropdown","_checkNumberOfSelectedEvent","attendeeName","setAttendeeName","coursesEventId","setCoursesEventId","selectValue","setSelectValue","_setAttendeeNameArray","attendeeNameArray","_checkPricesEntered","pricesEntered","multiplierArray","coursesEventArray","coursesEventIDArray","existingAttendeeName","existingDonationAmount","firstname","lastname","cousesEventArray","_buildName","_setNameInputValue","ceremonyNameArraysplit","_buildDeceasedNameGroup","_buildDedicatedName","donationName","setDonationName","donationAmount","setDonationAmount","_setDonationNameArray","donationNameArray","isNumeric","existingDonationName","ceremonyEventID","setEventID","ceremonyEventIDArray","_buildDeceasedName","callbackNextOfKinName","callbackPhoneNumbersEntered","callbackNextOfKinPhoneNumber","callbackBirthDate","callbackDateEntered","azureContainerName","callbackPassportNumberEntered","callbackPassportExpiryDateEntered","callbackPassportIssueDateEntered","callbackFileUploaded","isFileUploaded","callbackPassportNumber","callbackPassportExpiryDate","callbackPassportIssuedDate","callbackConsent","callbackRemarks","showRemarksField","insuranceAmount","callbackInsuranceIncluded","callbackInsuranceIncludedNum","insuranceAmountValue","chineseName","setChineseName","nextOfKinName","setNextOfKinName","nextOfKinPhoneNumbers","setNextOfKinPhoneNumbers","birthDate","setBirthDate","passportNumber","setPassportNumber","passportExpiryDate","setPassportExpiryDate","passportIssueDate","setPassportIssueDate","remainingSlots","setRemainingSlots","file","setFile","imageFiles","setImageFiles","isValidFileSize","setIsValidFileSize","consent","setConsent","remark","setRemark","setIsInsuranceIncluded","isInsuranceIncludedNum","setIsInsuranceIncludedNum","showAddMoreButton","setShowAddMoreButton","_checkDateEntered","_checkPassportExpiryDateEntered","_checkPassportIssueDateEntered","_setNextOfKinNameInputValue","_setNextOfKinNameArray","nextOfKinNameArray","_setFileInputValue","imageFile","files","size","_validateFileSize","base64","resolve","reject","fileReader","FileReader","readAsDataURL","onload","onerror","convertToBase64","base64String","imageFileArray","fileSizeErrorMsg","_checkFileUploaded","imageFileUploaded","_checkPhoneNumberEntered","phoneNumbersEntered","_checkPassportNumberEntered","passportNumbersArray","passportNumbersEntered","nextOfKinNamesArray","nextOfKinPhoneNumbersArray","chineseNamesArray","birthdayArray","passportNumberArray","passportIssueDateArray","passportExpiryDateArray","consentArray","remarkArray","eventObj","_setEventDates","isInsuranceIncludedArray","isInsuranceIncludedNumArray","existingPhoneNumbersArray","existingChineseNamesArray","existingNextOfKinNamesArray","existingNextOfKinPhoneNumbersArray","existingBirthDate","existingPassportNumber","existingPassportIssueDate","existingPassportExpiryDate","existingConsent","existingRemark","insuranceIncludeArray","hasInsurance","checkbox","document","getElementById","_selectedProduct$resu3","_setEventDatesOnLoad","_selectedProduct$resu4","gmb_fullnamechinese","mobilephone","_setRemarkArray","eventDetails","hideAddMoreButton","eventAvailableSlot","formLength","_buildBirthDate","DatePicker","date","_setBirthDate","format","maxDate","dayPlaceholder","monthPlaceholder","yearPlaceholder","_buildPassportExpiryDate","_passportExpiryDate","_setPassportExpiryDate","_buildPassportIssueDate","_passportIssueDate","_setPassportIssueDate","_buildUploadPassport","passportUpload","accept","e","env","entity","fileName","base64Image","containerName","uploadImageFileToAzure","toUpperCase","SUCCESS","fileUploadFailedMsg","fileUploadSuccessMsg","validPassportText","_uploadFileToAzure","_buildNextOfKinContactNumber","phoneNumberNextOfKin","_setNextOfKinPhoneNumbers","_buildPassportNumber","_setPassportNumber","_buildContactNumber","phoneNumber","_buildRemarks","_setRemarksInputValue","charactersLimitForRemarks","_buildInsuranceField","tax","taxPrompt","htmlFor","_setInsuranceAmount","insuranceArray","insuranceNumArray","_selectedProduct$resu5","_selectedProduct$resu6","availableSlots","coursesEvents","defaultValue","nameNextOfKin","_buildNextOfKinName","_selectedProduct$resu7","callbackHasTaxDeduction","callbackNRIC","callbackCountry","callbackEnableSaveDraft","callbackFormsValidation","taxDeductions","setTaxDeductions","setNRICs","countryNames","setCountryNames","_validateForms","_setNames","_resetFields","nricsArray","countryNamesArray","_displayNames","_checkStringArray","_validateIdentity","_validateNricFin","_validateUen","nricRegex","nricTypeRegex","weightArr","nricLetterST","nricLetterFG","nric","exec","nricArr","match","nricType","nricDigitsArr","total","indexOf","letterIndex","nricLetter","checkAlphabet","entityTypeIndicator","uenStrArray","entityType","entityTypeMatch","taxDeductionsArray","hasNames","_checkTaxDeductions","countriesArray","hasTax","_buildTaxDeductionField","_setTaxDeduction","_buildNRIC","_setNric","_buildPhone","addressPhonePrompt","_setPhoneNumbers","_buildAddress","states","addressOptional","placeholder","_setCountryName","isSearchable","callbackChineseName","callbackChineseNamesEntered","makeChinesNameMandatory","_setChineseNameArray","chineseNameArray","_checkChineseNamesEntered","chineseNamesEntered","_buildChineseName","chineseNameNotMandatory","_setChineseNameInputValue","insuranceFeeLabel","callbackBirthTime","birthTime","setBirthTime","dateValueArray","timeValueArray","birthDateArray","existingBirthTime","_buildNameField","minDate","_buildBirthTime","time","_setBirthTime","callbackSchoolName","callbackBlessingOption","callbackSchoolsEntered","schoolName","setSchoolName","_checkSchoolEntered","schoolNameArray","blessingOptionArray","existingSchoolName","dateFormat","selected","placeholderText","_buildSchoolField","_setSchoolName","callbackStartDate","setStartDates","startDate","setDate","getDate","setHours","startDatesArray","toDateString","_buildDedicationPeriod","_setStartDate","serialNumber","setSerialNumber","buildingName","setBuildingName","unitNumber","setUnitNumber","postalCode","setPostalCode","countryName","setCountry","buildingArray","postalCodeArray","address1_city","_initCountryField","place","address1_country","buildingNameArray","unitNumberArray","countryArray","serialNumberArray","existingEventName","existingEventID","existingBuildingName","existingUnitNumber","existingPostalCode","existingCountry","itemCommentParts","eventID","_setCountry","renewableLamps","replaceRow","removeLamp","callbackNoOfYear","callbackLightOption","callbackValidFrom","callbackValidTo","callbackOldName","callbackNameChange","callbackSerialId","callbackSerialNumber","callbackSerialNames","addRenewLamp","itemUnavailable","serialNumberValue","setSerialNumberValue","serialIdValue","setSerialIdValue","setSerialNames","lightValue","setLightValue","yearValue","setYearValue","startYearValue","setStartYearValue","endYearValue","setEndYearValue","setFullYear","getFullYear","nameChangeValue","setNameChangeValue","oldNameValue","setOldNameValue","_onChangeYearValue","_setYearValueArray","_setValidValueArray","_onChangeNameChangeValue","_setNameChangeValueArray","_setOldNameValueArray","nameChangeValueArray","oldNameValueArray","yearValueArray","startYearValueArray","endYearValueArray","serialNumberValueArray","serialIdValueArray","serialNamesArray","lightOptionValueArray","nameChangeArray","oldNameArray","existingStartYearValue","existingEndYearValue","existingYearValue","existingLightOptionValue","existingNameChangeValue","existingOldNameValue","itemYear","itemLightOption","itemValidFrom","itemValidTo","itemNameChange","itemOldName_1","itemOldName_2","oldName","indexArray","numberOfLamps","_addItemRenewSerial","renewalTitle","years","oneYearTitle","twoYearTitle","_buildNoOfYearsField","period","moment","_buildSponsorshipPeriodField","nameChangePrompt","keepNameTitle","changeNameTitle","_buildNameChangeField","callbackMessage","offeringName","setOfferingName","offeringMessage","setOfferingMessage","offeringRemark","setOfferingRemark","_setOfferingNameArray","offeringNameArray","_setOfferingMessageArray","offeringMessageArray","_setOfferingRemarkArray","offeringRemarkArray","existingOfferingName","existingOfferingMessage","existingOfferingRemark","_buildMessage","_setMessageInputValue","charactersLimitForMessages","callbackDedicationPeriod","callbackCompanyName","callbackCompaniesEntered","dedicationPeriod","setDedicationPeriod","companyName","setCompanyName","_setDedicationPeriod","periodLabel","scaleIdx","_displayDedicationPeriod","_checkCompanyEntered","dedicationPeriodArray","companyNameArray","existingMultiplier","existingDedicatedPeriod","existingCompanyName","selectedPeriod","_buildCompanyField","_setCompanyName","callbackRelationship","callbackDeathDate","callbackDeathTime","callbackRelationshipsEntered","setDedicationPeriods","dedicatedBys","setDedicatedBys","setDeceasedNames","relationships","setRelationships","setBirthDates","setBirthTimes","setDeathDates","setDeathTimes","setCountries","setRemarks","timeRanges","setTimeRanges","deathTimeRanges","setDeathTimeRanges","_setDeceasedNameArray","_setRelationshipArray","_checkRelationshipEntered","_setDate","_setBirthTimeRange","_setDeathTimeRange","_checkBirthDateEntered","_setTime","_initBirthTimeRanges","_initTimeRanges","deceasedNameArray","relationshipArray","deathDatesArray","startDateInvalid","getMonth","deathDate","deathDateInvalid","birthDatesArray","birthDateInvalid","now","ranges","range","interval","firstHour","lastHour","getHours","concat","dedicationPeriodsArray","dedicatedBysArray","deceasedNamesArray","relationshipsArray","birthTimesArray","deathTimesArray","remarksArray","dedicatedPeriodsArray","_buildDedicatedByField","_buildDeceasedNameField","deceasedDetailsPrompt","_setDeceasedNameInputValue","_buildRelationshipField","relationship","_setRelationshipInputValue","displayTime","slot","_buildBirthDateTime","deathTime","_buildDeathDateTime","_setTimeRange","callbackGender","setGenders","_setGender","gendersArray","gender","_buildGenderField","callbackSurgeryDate","surgeryDate","setSurgeryDate","surgeryDateArray","surgeryValueArray","existingSurgeryDate","_buildSurgeryDate","_setSurgeryDate","callbackBlessingType","blessingType","setBlessingType","blessings","existingBlessingType","_buildBlessingOptions","_setBlessingType","parentDetailsPrompt","require","_setDisplayValue","_formatDateString","dateArray","elementIdx","detailsPrompt","_setNamesInputValue","storedElements","displayBirthDate","_displayFirstDateValue","valueSplit","_displaySecondDateValue","_setDatesInputValue","_setTimesInputValue","callbackSubProductQuantity","subProductQuantity","setSubProductQuantity","_displaySubProductQuantity","subProductQuantityArray","existingSubProductQuantity","itemDedicatedBy","itemSubProductQuantity","_buildSubProductQuantity","consecration","consecrationSub","consecrationPrompt","_setSubProductQuantity","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","code","keys","module","exports"],"sourceRoot":""}